@media-quest/builder 0.0.7 → 0.0.8
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/dist/public-api.d.mts +51 -39
- package/dist/public-api.d.ts +51 -39
- package/dist/public-api.js +146 -45
- package/dist/public-api.mjs +147 -46
- package/package.json +3 -3
- package/src/Builder-page.spec.ts +21 -15
- package/src/Builder-page.ts +21 -18
- package/src/Builder-schema.spec.ts +270 -268
- package/src/Builder-schema.ts +32 -31
- package/src/BuilderObject.ts +0 -8
- package/src/prefix.spec.ts +5 -0
- package/src/prefix.ts +107 -0
- package/src/rulebuilder/Builder-rule.spec.ts +64 -35
- package/src/rulebuilder/Builder-rule.ts +3 -3
- package/src/rulebuilder/RuleAction.ts +7 -5
- package/src/rulebuilder/RuleBuilder-test-utils.ts +61 -30
- package/src/rulebuilder/RuleVariable.ts +6 -2
- package/src/rulebuilder/condition/Builder-condition-group.ts +2 -2
- package/src/rulebuilder/condition/Builder-condition.spec.ts +38 -29
- package/src/rulebuilder/condition/Builder-condition.ts +2 -2
- package/src/theme/default-theme-compiler.ts +2 -3
package/dist/public-api.mjs
CHANGED
|
@@ -18,9 +18,6 @@ var BuilderObjectId;
|
|
|
18
18
|
BuilderObjectId2.questionId = () => {
|
|
19
19
|
return createId("builder-question");
|
|
20
20
|
};
|
|
21
|
-
BuilderObjectId2.pageId = () => {
|
|
22
|
-
return createId("builder-page");
|
|
23
|
-
};
|
|
24
21
|
const createId = (type) => {
|
|
25
22
|
const id = U.randomString(24);
|
|
26
23
|
return type + "-" + id;
|
|
@@ -390,13 +387,125 @@ var CustomVariable = class {
|
|
|
390
387
|
};
|
|
391
388
|
|
|
392
389
|
// src/Builder-page.ts
|
|
393
|
-
import { DUtil as DUtil2 } from "@media-quest/engine";
|
|
390
|
+
import { DUtil as DUtil2, PageID } from "@media-quest/engine";
|
|
391
|
+
|
|
392
|
+
// src/prefix.ts
|
|
393
|
+
var VarID = {
|
|
394
|
+
create: (schemaPrefix, pagePrefix) => {
|
|
395
|
+
const varId = schemaPrefix + "_" + pagePrefix;
|
|
396
|
+
return varId;
|
|
397
|
+
}
|
|
398
|
+
};
|
|
399
|
+
var createRandomPrefix = (length) => {
|
|
400
|
+
const letters = "abcdefghijklmnopqrstuvyz";
|
|
401
|
+
const all = letters + letters.toUpperCase();
|
|
402
|
+
let result = "";
|
|
403
|
+
for (let i = 0; i < length; i++) {
|
|
404
|
+
const char = all.charAt(Math.floor(Math.random() * all.length));
|
|
405
|
+
result += char;
|
|
406
|
+
}
|
|
407
|
+
return result;
|
|
408
|
+
};
|
|
409
|
+
var SchemaPrefix = class _SchemaPrefix {
|
|
410
|
+
constructor(_value) {
|
|
411
|
+
this._value = _value;
|
|
412
|
+
}
|
|
413
|
+
static MIN_LENGTH = 1;
|
|
414
|
+
static randomLen = 5;
|
|
415
|
+
static MAX_LENGTH = 16;
|
|
416
|
+
static fromValue = (value) => {
|
|
417
|
+
return new _SchemaPrefix(value);
|
|
418
|
+
};
|
|
419
|
+
static fromValueOrThrow = (value) => {
|
|
420
|
+
if (!_SchemaPrefix.isValid(value))
|
|
421
|
+
throw new Error("Invalid prefix");
|
|
422
|
+
return new _SchemaPrefix(value);
|
|
423
|
+
};
|
|
424
|
+
static fromString = (value) => {
|
|
425
|
+
if (!_SchemaPrefix.isValid(value))
|
|
426
|
+
return false;
|
|
427
|
+
return new _SchemaPrefix(value);
|
|
428
|
+
};
|
|
429
|
+
static castOrCreateRandom = (value) => {
|
|
430
|
+
const v = _SchemaPrefix.isValid(value) ? value : createRandomPrefix(_SchemaPrefix.randomLen);
|
|
431
|
+
return new _SchemaPrefix(v);
|
|
432
|
+
};
|
|
433
|
+
static isValid = (prefix) => {
|
|
434
|
+
if (typeof prefix !== "string")
|
|
435
|
+
return false;
|
|
436
|
+
if (prefix.length < _SchemaPrefix.MIN_LENGTH)
|
|
437
|
+
return false;
|
|
438
|
+
if (prefix.length > _SchemaPrefix.MAX_LENGTH)
|
|
439
|
+
return false;
|
|
440
|
+
return true;
|
|
441
|
+
};
|
|
442
|
+
get value() {
|
|
443
|
+
return this._value;
|
|
444
|
+
}
|
|
445
|
+
set value(value) {
|
|
446
|
+
if (!_SchemaPrefix.isValid(value)) {
|
|
447
|
+
console.log("INVALID PREFIX", value);
|
|
448
|
+
} else {
|
|
449
|
+
this._value = value;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
};
|
|
453
|
+
var PagePrefix = class _PagePrefix {
|
|
454
|
+
constructor(_value) {
|
|
455
|
+
this._value = _value;
|
|
456
|
+
}
|
|
457
|
+
static MIN_LENGTH = 1;
|
|
458
|
+
static randomLen = 5;
|
|
459
|
+
static MAX_LENGTH = 16;
|
|
460
|
+
static fromValue = (value) => {
|
|
461
|
+
return new _PagePrefix(value);
|
|
462
|
+
};
|
|
463
|
+
static create = () => {
|
|
464
|
+
const v = createRandomPrefix(_PagePrefix.randomLen);
|
|
465
|
+
return new _PagePrefix(v);
|
|
466
|
+
};
|
|
467
|
+
static fromString = (value) => {
|
|
468
|
+
if (!_PagePrefix.isValid(value))
|
|
469
|
+
return false;
|
|
470
|
+
return new _PagePrefix(value);
|
|
471
|
+
};
|
|
472
|
+
static fromStringOrThrow = (value) => {
|
|
473
|
+
if (!_PagePrefix.isValid(value))
|
|
474
|
+
throw new Error("Invalid prefix");
|
|
475
|
+
return value;
|
|
476
|
+
};
|
|
477
|
+
static castOrCreateRandom = (value) => {
|
|
478
|
+
const v = _PagePrefix.isValid(value) ? value : createRandomPrefix(_PagePrefix.randomLen);
|
|
479
|
+
return new _PagePrefix(v);
|
|
480
|
+
};
|
|
481
|
+
static isValid = (prefix) => {
|
|
482
|
+
if (typeof prefix !== "string")
|
|
483
|
+
return false;
|
|
484
|
+
if (prefix.length < SchemaPrefix.MIN_LENGTH)
|
|
485
|
+
return false;
|
|
486
|
+
if (prefix.length > SchemaPrefix.MAX_LENGTH)
|
|
487
|
+
return false;
|
|
488
|
+
return true;
|
|
489
|
+
};
|
|
490
|
+
get value() {
|
|
491
|
+
return this._value;
|
|
492
|
+
}
|
|
493
|
+
set value(value) {
|
|
494
|
+
if (!_PagePrefix.isValid(value)) {
|
|
495
|
+
console.log("INVALID PREFIX", value);
|
|
496
|
+
} else {
|
|
497
|
+
this._value = value;
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
};
|
|
501
|
+
|
|
502
|
+
// src/Builder-page.ts
|
|
394
503
|
var U2 = DUtil2;
|
|
395
504
|
var BuilderPage = class _BuilderPage extends BuilderObject {
|
|
396
505
|
objectType = "builder-page";
|
|
397
506
|
id;
|
|
398
507
|
_pageType;
|
|
399
|
-
_prefix
|
|
508
|
+
_prefix;
|
|
400
509
|
_questions = [];
|
|
401
510
|
_tags;
|
|
402
511
|
_backgroundColor = "#FFFFFF";
|
|
@@ -405,7 +514,7 @@ var BuilderPage = class _BuilderPage extends BuilderObject {
|
|
|
405
514
|
mainText;
|
|
406
515
|
nextButton = BuilderOption.create(-1, "Neste");
|
|
407
516
|
static create(type, _prefix) {
|
|
408
|
-
const id =
|
|
517
|
+
const id = PageID.create();
|
|
409
518
|
const mainTextDto = {
|
|
410
519
|
text: "",
|
|
411
520
|
audioFile: false,
|
|
@@ -421,7 +530,7 @@ var BuilderPage = class _BuilderPage extends BuilderObject {
|
|
|
421
530
|
id,
|
|
422
531
|
nextButton: nextButtonDto,
|
|
423
532
|
mainText: mainTextDto,
|
|
424
|
-
prefix:
|
|
533
|
+
prefix: _prefix,
|
|
425
534
|
questions: [],
|
|
426
535
|
tags: []
|
|
427
536
|
};
|
|
@@ -436,7 +545,8 @@ var BuilderPage = class _BuilderPage extends BuilderObject {
|
|
|
436
545
|
super(dto);
|
|
437
546
|
this.id = dto.id;
|
|
438
547
|
this._pageType = dto._type;
|
|
439
|
-
|
|
548
|
+
const prefixInstance = PagePrefix.castOrCreateRandom(dto.prefix);
|
|
549
|
+
this._prefix = prefixInstance;
|
|
440
550
|
this.mainText = BuilderMainText.fromJson(dto.mainText);
|
|
441
551
|
this.nextButton = BuilderOption.fromJson(dto.nextButton);
|
|
442
552
|
this.defaultQuestion = BuilderQuestion.fromJson(dto.defaultQuestion);
|
|
@@ -518,14 +628,14 @@ var BuilderPage = class _BuilderPage extends BuilderObject {
|
|
|
518
628
|
const variables = [];
|
|
519
629
|
if (this._pageType === "question") {
|
|
520
630
|
const pagePrefix = this.prefix;
|
|
521
|
-
const
|
|
631
|
+
const varId = VarID.create(modulePrefix.value, pagePrefix);
|
|
522
632
|
const label = this.mainText.text;
|
|
523
633
|
const op = this.defaultQuestion.options.map((o) => {
|
|
524
634
|
const label2 = o.label;
|
|
525
635
|
const value = o.value;
|
|
526
636
|
return new BuilderVariableOption(label2, value);
|
|
527
637
|
});
|
|
528
|
-
const singleVar = new QuestionVariable(
|
|
638
|
+
const singleVar = new QuestionVariable(varId, label, op, pageNumber);
|
|
529
639
|
variables.push(singleVar);
|
|
530
640
|
}
|
|
531
641
|
return variables;
|
|
@@ -537,10 +647,10 @@ var BuilderPage = class _BuilderPage extends BuilderObject {
|
|
|
537
647
|
return this._pageType;
|
|
538
648
|
}
|
|
539
649
|
get prefix() {
|
|
540
|
-
return this._prefix;
|
|
650
|
+
return this._prefix.value;
|
|
541
651
|
}
|
|
542
652
|
set prefix(value) {
|
|
543
|
-
this._prefix = value;
|
|
653
|
+
this._prefix.value = value;
|
|
544
654
|
}
|
|
545
655
|
toJson() {
|
|
546
656
|
const questions = this._questions.map((q) => q.toJson());
|
|
@@ -554,7 +664,7 @@ var BuilderPage = class _BuilderPage extends BuilderObject {
|
|
|
554
664
|
nextButton,
|
|
555
665
|
id: this.id,
|
|
556
666
|
tags: [...this.tags],
|
|
557
|
-
prefix: this._prefix,
|
|
667
|
+
prefix: this._prefix.value,
|
|
558
668
|
defaultQuestion: this.defaultQuestion.toJson(),
|
|
559
669
|
questions
|
|
560
670
|
};
|
|
@@ -568,7 +678,7 @@ var BuilderPage = class _BuilderPage extends BuilderObject {
|
|
|
568
678
|
const defaultQuestionClone = this.defaultQuestion.clone();
|
|
569
679
|
const mainTextClone = JSON.parse(JSON.stringify(this.mainText));
|
|
570
680
|
const questionsClone = this.questions.map((q) => q.clone());
|
|
571
|
-
const newId =
|
|
681
|
+
const newId = PageID.create();
|
|
572
682
|
const clone = {
|
|
573
683
|
...dto,
|
|
574
684
|
id: newId,
|
|
@@ -929,7 +1039,7 @@ var BuilderCondition = class _BuilderCondition extends BuilderObject {
|
|
|
929
1039
|
}
|
|
930
1040
|
return { isValid: true };
|
|
931
1041
|
}
|
|
932
|
-
toEngineCondition(
|
|
1042
|
+
toEngineCondition() {
|
|
933
1043
|
const val = this.value;
|
|
934
1044
|
const op = this._operator;
|
|
935
1045
|
const v = this._variable;
|
|
@@ -944,7 +1054,7 @@ var BuilderCondition = class _BuilderCondition extends BuilderObject {
|
|
|
944
1054
|
kind: "numeric-condition",
|
|
945
1055
|
value: val.value,
|
|
946
1056
|
valueLabel: val.label,
|
|
947
|
-
referenceId:
|
|
1057
|
+
referenceId: v.varId,
|
|
948
1058
|
referenceLabel: v.label,
|
|
949
1059
|
operator: "eq"
|
|
950
1060
|
};
|
|
@@ -1086,7 +1196,7 @@ var BuilderConditionGroup = class _BuilderConditionGroup extends BuilderObject {
|
|
|
1086
1196
|
kind: "condition-group"
|
|
1087
1197
|
};
|
|
1088
1198
|
}
|
|
1089
|
-
toEngineConditionComplex(
|
|
1199
|
+
toEngineConditionComplex() {
|
|
1090
1200
|
const comp = {
|
|
1091
1201
|
kind: "complex-condition",
|
|
1092
1202
|
all: [],
|
|
@@ -1095,7 +1205,7 @@ var BuilderConditionGroup = class _BuilderConditionGroup extends BuilderObject {
|
|
|
1095
1205
|
};
|
|
1096
1206
|
const conditions = [];
|
|
1097
1207
|
this.conditions.forEach((c) => {
|
|
1098
|
-
const maybeSimple = c.toEngineCondition(
|
|
1208
|
+
const maybeSimple = c.toEngineCondition();
|
|
1099
1209
|
if (maybeSimple) {
|
|
1100
1210
|
conditions.push(maybeSimple);
|
|
1101
1211
|
}
|
|
@@ -1356,18 +1466,18 @@ var BuilderRule = class _BuilderRule extends BuilderObject {
|
|
|
1356
1466
|
};
|
|
1357
1467
|
return dto;
|
|
1358
1468
|
}
|
|
1359
|
-
toEngineRule(
|
|
1469
|
+
toEngineRule() {
|
|
1360
1470
|
const conditions = [];
|
|
1361
1471
|
this._conditions.forEach((c) => {
|
|
1362
1472
|
if (c) {
|
|
1363
1473
|
if (c instanceof BuilderCondition) {
|
|
1364
|
-
const simpleCondition = c.toEngineCondition(
|
|
1474
|
+
const simpleCondition = c.toEngineCondition();
|
|
1365
1475
|
if (simpleCondition) {
|
|
1366
1476
|
conditions.push(simpleCondition);
|
|
1367
1477
|
}
|
|
1368
1478
|
}
|
|
1369
1479
|
if (c instanceof BuilderConditionGroup) {
|
|
1370
|
-
const complexCondition = c.toEngineConditionComplex(
|
|
1480
|
+
const complexCondition = c.toEngineConditionComplex();
|
|
1371
1481
|
if (complexCondition)
|
|
1372
1482
|
conditions.push(complexCondition);
|
|
1373
1483
|
}
|
|
@@ -1655,7 +1765,7 @@ var DefaultThemeCompiler = class extends AbstractThemeCompiler {
|
|
|
1655
1765
|
const ruleInput = builderSchema.getRuleInput();
|
|
1656
1766
|
const pageQueRules = [];
|
|
1657
1767
|
source.rules.forEach((rule) => {
|
|
1658
|
-
const engineRule = BuilderRule.fromDto(rule, ruleInput).toEngineRule(
|
|
1768
|
+
const engineRule = BuilderRule.fromDto(rule, ruleInput).toEngineRule();
|
|
1659
1769
|
if (!Rule.isEmpty(engineRule)) {
|
|
1660
1770
|
pageQueRules.push(engineRule);
|
|
1661
1771
|
} else {
|
|
@@ -1670,7 +1780,6 @@ var DefaultThemeCompiler = class extends AbstractThemeCompiler {
|
|
|
1670
1780
|
compile(source) {
|
|
1671
1781
|
const pages = source.pages.map((p) => this.compilePage(p, source.prefix));
|
|
1672
1782
|
const rules = this.compileRules(source);
|
|
1673
|
-
console.log(pages.map((p) => p.tags));
|
|
1674
1783
|
const dto = {
|
|
1675
1784
|
backgroundColor: source.backgroundColor,
|
|
1676
1785
|
baseHeight: source.baseHeight,
|
|
@@ -1679,7 +1788,6 @@ var DefaultThemeCompiler = class extends AbstractThemeCompiler {
|
|
|
1679
1788
|
pageSequences: [],
|
|
1680
1789
|
pages,
|
|
1681
1790
|
predefinedFacts: [],
|
|
1682
|
-
prefix: source.prefix,
|
|
1683
1791
|
rules,
|
|
1684
1792
|
stateFromEvent: [
|
|
1685
1793
|
{
|
|
@@ -2008,11 +2116,12 @@ var DefaultThemeCompiler = class extends AbstractThemeCompiler {
|
|
|
2008
2116
|
import { DUtil as DUtil4 } from "@media-quest/engine";
|
|
2009
2117
|
var U4 = DUtil4;
|
|
2010
2118
|
var BuilderSchema = class _BuilderSchema {
|
|
2011
|
-
constructor(id, name,
|
|
2119
|
+
constructor(id, name, _prefix) {
|
|
2012
2120
|
this.id = id;
|
|
2013
2121
|
this.name = name;
|
|
2014
|
-
this.
|
|
2122
|
+
this._prefix = _prefix;
|
|
2015
2123
|
}
|
|
2124
|
+
_prefix;
|
|
2016
2125
|
baseHeight = 1300;
|
|
2017
2126
|
baseWidth = 1024;
|
|
2018
2127
|
backgroundColor = "#000000";
|
|
@@ -2022,15 +2131,20 @@ var BuilderSchema = class _BuilderSchema {
|
|
|
2022
2131
|
get rules() {
|
|
2023
2132
|
return [...this._rules];
|
|
2024
2133
|
}
|
|
2134
|
+
get prefix() {
|
|
2135
|
+
return this._prefix.value;
|
|
2136
|
+
}
|
|
2025
2137
|
_tagCollection = TagCollection.create();
|
|
2026
2138
|
get tags() {
|
|
2027
2139
|
return [...this._tagCollection];
|
|
2028
2140
|
}
|
|
2029
2141
|
static create(id, name, prefix) {
|
|
2030
|
-
|
|
2142
|
+
const schemaPrefix = SchemaPrefix.castOrCreateRandom(prefix);
|
|
2143
|
+
return new _BuilderSchema(id, name, schemaPrefix);
|
|
2031
2144
|
}
|
|
2032
2145
|
static fromJson(dto) {
|
|
2033
|
-
const
|
|
2146
|
+
const schemaPrefix = SchemaPrefix.castOrCreateRandom(dto.prefix);
|
|
2147
|
+
const schema = new _BuilderSchema(dto.id, dto.name, schemaPrefix);
|
|
2034
2148
|
const pages = dto.pages.map(BuilderPage.fromJson);
|
|
2035
2149
|
schema._tagCollection.init(dto.tags);
|
|
2036
2150
|
schema.backgroundColor = dto.backgroundColor;
|
|
@@ -2063,7 +2177,8 @@ var BuilderSchema = class _BuilderSchema {
|
|
|
2063
2177
|
return dto;
|
|
2064
2178
|
}
|
|
2065
2179
|
addPage(type, atIndex = -1) {
|
|
2066
|
-
const
|
|
2180
|
+
const pagePrefix = PagePrefix.create();
|
|
2181
|
+
const newPage = BuilderPage.create(type, pagePrefix.value);
|
|
2067
2182
|
if (atIndex >= 0 && atIndex < this.pages.length) {
|
|
2068
2183
|
this.pages.splice(atIndex, 0, newPage);
|
|
2069
2184
|
} else {
|
|
@@ -2150,9 +2265,9 @@ var BuilderSchema = class _BuilderSchema {
|
|
|
2150
2265
|
return excludeByTagDto;
|
|
2151
2266
|
});
|
|
2152
2267
|
const jumpActions = [];
|
|
2153
|
-
const prefix =
|
|
2268
|
+
const prefix = this.prefix;
|
|
2154
2269
|
this.pages.forEach((page, index) => {
|
|
2155
|
-
const pageVariables = page.getQuestionVariables(
|
|
2270
|
+
const pageVariables = page.getQuestionVariables(this._prefix, index);
|
|
2156
2271
|
qVars.push(...pageVariables);
|
|
2157
2272
|
const mainText = page.mainText.text;
|
|
2158
2273
|
const jumpAction = {
|
|
@@ -2179,20 +2294,6 @@ var BuilderSchema = class _BuilderSchema {
|
|
|
2179
2294
|
addTag(builderTag) {
|
|
2180
2295
|
this._tagCollection.add(builderTag);
|
|
2181
2296
|
}
|
|
2182
|
-
// getHash(): SchemaHash {
|
|
2183
|
-
// const md5 = MD5(this.toJson());
|
|
2184
|
-
// return
|
|
2185
|
-
// }
|
|
2186
|
-
// hasChanged(hash: SchemaHash): boolean {
|
|
2187
|
-
// return hash !== this.getHash();
|
|
2188
|
-
// }
|
|
2189
|
-
getQuestionVariables(withModulePrefix = false) {
|
|
2190
|
-
const prefix = withModulePrefix ? this.prefix : "";
|
|
2191
|
-
const all = this.pages.map((page, index) => {
|
|
2192
|
-
return page.getQuestionVariables(prefix, index);
|
|
2193
|
-
}).flat(1);
|
|
2194
|
-
return all;
|
|
2195
|
-
}
|
|
2196
2297
|
compile() {
|
|
2197
2298
|
const moduleDto = this.toJson();
|
|
2198
2299
|
const imp = new DefaultThemeCompiler();
|
|
@@ -2276,4 +2377,4 @@ export {
|
|
|
2276
2377
|
TagActionManager,
|
|
2277
2378
|
TagCollection
|
|
2278
2379
|
};
|
|
2279
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL0J1aWxkZXJPYmplY3QudHMiLCAiLi4vc3JjL3RoZW1lL2ljb24tdXJscy50cyIsICIuLi9zcmMvdGhlbWUvSURlZmF1bHRUaGVtZS50cyIsICIuLi9zcmMvQnVpbGRlci1vcHRpb24udHMiLCAiLi4vc3JjL0J1aWxkZXItcXVlc3Rpb24udHMiLCAiLi4vc3JjL0J1aWxkZXJNYWluVGV4dC50cyIsICIuLi9zcmMvcnVsZWJ1aWxkZXIvUnVsZVZhcmlhYmxlLnRzIiwgIi4uL3NyYy9CdWlsZGVyLXBhZ2UudHMiLCAiLi4vc3JjL3J1bGVidWlsZGVyL1NpbmdsZVNlbGVjdEl0ZW0udHMiLCAiLi4vc3JjL3J1bGVidWlsZGVyL1J1bGVJbnB1dC50cyIsICIuLi9zcmMvQnVpbGRlclRhZy50cyIsICIuLi9zcmMvcnVsZWJ1aWxkZXIvY29uZGl0aW9uL0J1aWxkZXItb3BlcmF0b3IudHMiLCAiLi4vc3JjL3J1bGVidWlsZGVyL2NvbmRpdGlvbi9CdWlsZGVyLWNvbmRpdGlvbi50cyIsICIuLi9zcmMvcnVsZWJ1aWxkZXIvY29uZGl0aW9uL0J1aWxkZXItY29uZGl0aW9uLWdyb3VwLnRzIiwgIi4uL3NyYy9ydWxlYnVpbGRlci9tdWx0aS1zZWxlY3QtaXRlbS50cyIsICIuLi9zcmMvcnVsZWJ1aWxkZXIvdGFnLWFjdGlvbi1tYW5hZ2VyLnRzIiwgIi4uL3NyYy9ydWxlYnVpbGRlci9wYWdlLWFjdGlvbi1tYW5hZ2VyLnRzIiwgIi4uL3NyYy9ydWxlYnVpbGRlci9qdW1wLXRvLWFjdGlvbi1tYW5hZ2VyLnRzIiwgIi4uL3NyYy9ydWxlYnVpbGRlci9CdWlsZGVyLXJ1bGUudHMiLCAiLi4vc3JjL3RoZW1lL0Fic3RyYWN0VGhlbWVDb21waWxlci50cyIsICIuLi9zcmMvdGhlbWUvc3RhbmRhcmQtcHJvcHMudHMiLCAiLi4vc3JjL3RoZW1lL3RoZW1lLXV0aWxzLnRzIiwgIi4uL3NyYy90aGVtZS9kZWZhdWx0LXRoZW1lLWNvbXBpbGVyLnRzIiwgIi4uL3NyYy9CdWlsZGVyLXNjaGVtYS50cyIsICIuLi9zcmMvQnVpbGRlci10ZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBEVXRpbCB9IGZyb20gXCJAbWVkaWEtcXVlc3QvZW5naW5lXCI7XG5cbmNvbnN0IFUgPSBEVXRpbDtcbi8qKlxuICogQnVpbGRlciBvYmplY3RzIGFyZSBjb21wbGV4IG9iamVjdHMgdGhhdCBhcmUgZW1iZWRkZWQgaW5zaWRlXG4gKiBhIEJ1aWxkZXItc2NoZW1hLCBhbmQgbmVlZHMgdG8gYmUgc2VyaWFsaXplZCB0byBqc29uLiBPZnRlbiB0aGVzZSBvYmplY3RzXG4gKiBhcmUgdXNlZCBpbiBjb2xsZWN0aW9ucywgYW5kIHRoYXQgaXMgd2h5IG1vc3Qgb2YgdGhlbSBuZWVkIGFuIGlkLlxuICovXG50eXBlIEJ1aWxkZXJPYmplY3RUeXBlID1cbiAgfCBcImJ1aWxkZXItcGFnZVwiXG4gIHwgXCJidWlsZGVyLXF1ZXN0aW9uLW9wdGlvblwiXG4gIHwgXCJidWlsZGVyLXF1ZXN0aW9uXCJcbiAgfCBcImJ1aWxkZXItbWFpbi10ZXh0XCJcbiAgfCBcImJ1aWxkZXItdGV4dFwiXG4gIHwgXCJidWlsZGVyLXJ1bGVcIlxuICB8IFwiYnVpbGRlci10YWdcIlxuICB8IFwiYnVpbGRlci1jb25kaXRpb25cIlxuICB8IFwiYnVpbGRlci12YXJpYWJsZVwiXG4gIHwgXCJidWlsZGVyLWNvbmRpdGlvbi1ncm91cFwiO1xuXG5leHBvcnQgbmFtZXNwYWNlIEJ1aWxkZXJPYmplY3RJZCB7XG4gIGV4cG9ydCB0eXBlIFF1ZXN0aW9uT3B0aW9uSUQgPSBzdHJpbmcgJiB7IF9fT1BUSU9OX19JRF9fOiB0cnVlIH07XG4gIGV4cG9ydCB0eXBlIFF1ZXN0aW9uSUQgPSBzdHJpbmcgJiB7IF9fUVVFU1RJT05fX0lEX186IHRydWUgfTtcbiAgZXhwb3J0IHR5cGUgVmlkZW9GaWxlSUQgPSBzdHJpbmcgJiB7IF9fVklERU9fX0lEX186IHRydWUgfTtcbiAgZXhwb3J0IHR5cGUgQXVkaW9GaWxlSUQgPSBzdHJpbmcgJiB7IF9fQVVESU9fX0lEX186IHRydWUgfTtcbiAgZXhwb3J0IHR5cGUgSW1hZ2VJRCA9IHN0cmluZyAmIHsgX19JTUFHRV9fSURfXzogdHJ1ZSB9O1xuICBleHBvcnQgdHlwZSBUZXh0SUQgPSBzdHJpbmcgJiB7IF9fVEVYVF9fSURfXzogdHJ1ZSB9O1xuICBleHBvcnQgdHlwZSBNYWluVGV4dElEID0gc3RyaW5nICYgeyBfX01BSU5fX1RFWFRfX0lEX186IHRydWUgfTtcbiAgZXhwb3J0IHR5cGUgUGFnZUlEID0gc3RyaW5nICYgeyBfX1BBR0VfX0lEX186IHRydWUgfTtcbiAgZXhwb3J0IHR5cGUgVGFnSWQgPSBzdHJpbmcgJiB7IF9fVEFHX19JRF9fOiB0cnVlIH07XG5cbiAgZXhwb3J0IGNvbnN0IGNyZWF0ZVRhZ0lkID0gKCk6IFRhZ0lkID0+IHtcbiAgICByZXR1cm4gY3JlYXRlSWQoXCJidWlsZGVyLXRhZ1wiKSBhcyBUYWdJZDtcbiAgfTtcblxuICBleHBvcnQgY29uc3QgbWFpblRleHRJZCA9ICgpOiBNYWluVGV4dElEID0+IHtcbiAgICByZXR1cm4gY3JlYXRlSWQoXCJidWlsZGVyLW1haW4tdGV4dFwiKSBhcyBNYWluVGV4dElEO1xuICB9O1xuICBleHBvcnQgY29uc3QgdGV4dElkID0gKCk6IFRleHRJRCA9PiB7XG4gICAgcmV0dXJuIGNyZWF0ZUlkKFwiYnVpbGRlci10ZXh0XCIpIGFzIFRleHRJRDtcbiAgfTtcblxuICBleHBvcnQgY29uc3QgcXVlc3Rpb25PcHRpb25JZCA9ICgpOiBRdWVzdGlvbk9wdGlvbklEID0+IHtcbiAgICByZXR1cm4gY3JlYXRlSWQoXCJidWlsZGVyLXF1ZXN0aW9uLW9wdGlvblwiKSBhcyBRdWVzdGlvbk9wdGlvbklEO1xuICB9O1xuICBleHBvcnQgY29uc3QgcXVlc3Rpb25JZCA9ICgpOiBRdWVzdGlvbklEID0+IHtcbiAgICByZXR1cm4gY3JlYXRlSWQoXCJidWlsZGVyLXF1ZXN0aW9uXCIpIGFzIFF1ZXN0aW9uSUQ7XG4gIH07XG4gIGV4cG9ydCBjb25zdCBwYWdlSWQgPSAoKTogUGFnZUlEID0+IHtcbiAgICByZXR1cm4gY3JlYXRlSWQoXCJidWlsZGVyLXBhZ2VcIikgYXMgUGFnZUlEO1xuICB9O1xuXG4gIGNvbnN0IGNyZWF0ZUlkID0gKHR5cGU6IEJ1aWxkZXJPYmplY3RUeXBlKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBpZCA9IFUucmFuZG9tU3RyaW5nKDI0KTtcbiAgICByZXR1cm4gdHlwZSArIFwiLVwiICsgaWQ7XG4gIH07XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCdWlsZGVyT2JqZWN0PFQgZXh0ZW5kcyBCdWlsZGVyT2JqZWN0VHlwZSwgRHRvIGV4dGVuZHMge30+IHtcbiAgLy8gYWJzdHJhY3QgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgYWJzdHJhY3QgcmVhZG9ubHkgb2JqZWN0VHlwZTogVDtcbiAgYWJzdHJhY3QgdG9Kc29uKCk6IER0bztcbiAgYWJzdHJhY3QgY2xvbmUoKTogRHRvO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3JpZ2luYWxEdG86IER0bztcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGR0bzogRHRvKSB7XG4gICAgdGhpcy5vcmlnaW5hbER0byA9IGR0bztcbiAgICAvLyB0aGlzLm9iamVjdElkID0gZHRvLm9iamVjdElkO1xuICB9XG59XG4iLCAiZXhwb3J0IGNvbnN0IEljb25VcmxzID0ge1xuICBpc3BlV2hpdGVQbmc6XG4gICAgJ2h0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZpc3BlLWh2aXQucG5nP2FsdD1tZWRpYSZ0b2tlbj1mNmZlNjI4Yi0yZDk5LTQ3MmQtYTJlYS1lMDYyODczZTJlMjInLFxuICBwYXVzZVN2ZzpcbiAgICAnaHR0cHM6Ly9maXJlYmFzZXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vdjAvYi9pc3BlLWJhY2tlbmQtZGV2LmFwcHNwb3QuY29tL28vcHVibGljLWFzc2V0cyUyRnBhdXNlLTI0cHguc3ZnP2FsdD1tZWRpYSZ0b2tlbj00NzMzNzQ5MS1iYjBkLTRjNTYtOWM4OS1hMDczY2UxOWZhZDQnLFxuICBwYXVzZUNpcmNsZU91dGxpbmVTdmc6XG4gICAgJ2h0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZwYXVzZV9jaXJjbGVfb3V0bGluZS0yNHB4LnN2Zz9hbHQ9bWVkaWEmdG9rZW49MTMzYWFiYzgtYWI5YS00ZWFhLTk5MTQtNGYwZjgyYzIyZWUyJyxcblxuICBwYXVzZUNpcmNsZUZpbGxlZFN2ZzpcbiAgICAnaHR0cHM6Ly9maXJlYmFzZXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vdjAvYi9pc3BlLWJhY2tlbmQtZGV2LmFwcHNwb3QuY29tL28vcHVibGljLWFzc2V0cyUyRnBhdXNlX2NpcmNsZV9maWxsZWQtMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPWFmM2YxMmMzLTMxOTktNDA5Ni04ZWQyLTc2MzQ3YjlhMGEwYScsXG4gIHBsYXlDaXJjbGVSZWd1bGFyOlxuICAgICdodHRwczovL2ZpcmViYXNlc3RvcmFnZS5nb29nbGVhcGlzLmNvbS92MC9iL2lzcGUtYmFja2VuZC1kZXYuYXBwc3BvdC5jb20vby9wdWJsaWMtYXNzZXRzJTJGcGxheS1jaXJjbGUtcmVndWxhci5zdmc/YWx0PW1lZGlhJnRva2VuPTA4NjdiNjkwLWQ3ZmQtNDc1Yy04ZTkxLWIyZDdhZWNhNTRkMScsXG4gIHBsYXlBcnJvd1N2ZzpcbiAgICAnaHR0cHM6Ly9maXJlYmFzZXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vdjAvYi9pc3BlLWJhY2tlbmQtZGV2LmFwcHNwb3QuY29tL28vcHVibGljLWFzc2V0cyUyRnBsYXlfYXJyb3ctMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPTJmYTk1ZTFmLTYxZjctNGExOC1hZmIzLTIxMGVhYmFlODIyNycsXG4gIHBsYXlDaXJjbGVPdXRsaW5lOlxuICAgICdodHRwczovL2ZpcmViYXNlc3RvcmFnZS5nb29nbGVhcGlzLmNvbS92MC9iL2lzcGUtYmFja2VuZC1kZXYuYXBwc3BvdC5jb20vby9wdWJsaWMtYXNzZXRzJTJGcGxheV9jaXJjbGVfb3V0bGluZS0yNHB4LnN2Zz9hbHQ9bWVkaWEmdG9rZW49M2E5ZjYyYzUtZGZhMi00MGVmLWE1MGUtY2YxYmRkMmQ0N2YyJyxcblxuICBzdG9wQ2lyY2xlU3ZnOlxuICAgICdodHRwczovL2ZpcmViYXNlc3RvcmFnZS5nb29nbGVhcGlzLmNvbS92MC9iL2lzcGUtYmFja2VuZC1kZXYuYXBwc3BvdC5jb20vby9wdWJsaWMtYXNzZXRzJTJGc3RvcF9jaXJjbGUtMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPThmYmM4Yjg5LTI5YmItNDlhZC1hZTExLWI4ODgyYmEzY2E3NycsXG4gIHN0b3BTdmc6XG4gICAgJ2h0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZzdG9wLTI0cHguc3ZnP2FsdD1tZWRpYSZ0b2tlbj1kMmNkNDFmMS0xMzMxLTQyNDMtOWI3YS1kYzBmMGNjZDI1NWQnLFxuICByZXBsYXlDaXJjbGVTdmc6XG4gICAgJ2h0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZyZXBsYXktMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPTNjMzVjY2Y0LWI0NjctNGU4MS04NWQ2LWIzNmFjNjQ3MzhhZCcsXG5cbiAgdm9sdW1lT2ZmU3ZnOlxuICAgICdodHRwczovL2ZpcmViYXNlc3RvcmFnZS5nb29nbGVhcGlzLmNvbS92MC9iL2lzcGUtYmFja2VuZC1kZXYuYXBwc3BvdC5jb20vby9wdWJsaWMtYXNzZXRzJTJGdm9sdW1lX29mZi0yNHB4LnN2Zz9hbHQ9bWVkaWEmdG9rZW49NGU0MWNjMTAtOWY0Yi00OTY3LWI0ZGYtZWQwNjgyZTY1N2E5JyxcbiAgdm9sdW1lVXBTdmc6XG4gICAgJ2h0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZ2b2x1bWVfdXAtMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPTU1MWJkMGE2LWE1MTUtNGY4Ny1hMjQ1LWRhNDMzZjQ4MzNmOSdcbn07XG4iLCAiaW1wb3J0IHR5cGUgeyBDc3NUaGVtZSB9IGZyb20gXCIuL2Nzcy10aGVtZVwiO1xuaW1wb3J0IHsgRFN0eWxlLCBEQ3NzIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcbmltcG9ydCB7IEljb25VcmxzIH0gZnJvbSBcIi4vaWNvbi11cmxzXCI7XG5cbnR5cGUgUFN0eWxlID0gUGFydGlhbDxEU3R5bGU+O1xuZXhwb3J0IGludGVyZmFjZSBJRGVmYXVsdFRoZW1lIHtcbiAgbmFtZTogc3RyaW5nO1xuICBpbWFnZTogeyBzdHlsZTogUFN0eWxlIH07XG4gIHZpZGVvUGxheWVyOiB7XG4gICAgcGxheUJ1dHRvbjoge1xuICAgICAgaWNvblVybDogc3RyaW5nO1xuICAgICAgY3NzOiBQU3R5bGU7XG4gICAgICBjc3NEaXNhYmxlZDogUFN0eWxlO1xuICAgICAgY3NzRW5hYmxlZDogUFN0eWxlO1xuICAgIH07XG4gICAgcGF1c2VCdXR0b246IHtcbiAgICAgIGljb25Vcmw6IHN0cmluZztcbiAgICAgIGNzczogUFN0eWxlO1xuICAgICAgY3NzRGlzYWJsZWQ6IFBTdHlsZTtcbiAgICAgIGNzc0VuYWJsZWQ6IFBTdHlsZTtcbiAgICB9O1xuICAgIHZpZGVvRWxlbWVudDoge1xuICAgICAgY3NzOiBQU3R5bGU7XG4gICAgfTtcbiAgfTtcbiAgbWFpblRleHQ6IHtcbiAgICBub01lZGlhOiB7XG4gICAgICB0ZXh0OiB7IGNzczogUFN0eWxlOyBjc3NEaXNhYmxlZDogUFN0eWxlOyBjc3NFbmFibGVkOiBQU3R5bGUgfTtcbiAgICAgIGF1ZGlvOiB7IGNzczogUFN0eWxlOyBjc3NEaXNhYmxlZDogUFN0eWxlOyBjc3NFbmFibGVkOiBQU3R5bGUgfTtcbiAgICB9O1xuICAgIHdpdGhNZWRpYToge1xuICAgICAgdGV4dDogeyBjc3M6IFBTdHlsZTsgY3NzRGlzYWJsZWQ6IFBTdHlsZTsgY3NzRW5hYmxlZDogUFN0eWxlIH07XG4gICAgICBhdWRpbzogeyBjc3M6IFBTdHlsZTsgY3NzRGlzYWJsZWQ6IFBTdHlsZTsgY3NzRW5hYmxlZDogUFN0eWxlIH07XG4gICAgfTtcbiAgfTtcbiAgLy8gbWFpblRleHRUaGVtZTogQnVpbGRlclRleHRUaGVtZTtcbiAgcmVzcG9uc2VCdXR0b25zOiBCdWlsZGVyT3B0aW9uVGhlbWU7XG4gIG5leHRCdXR0b25UaGVtZTogQnVpbGRlck9wdGlvblRoZW1lO1xuICAvLyBtYWluUXVlc3Rpb25UZXh0OiBCdWlsZGVyVGV4dFRoZW1lO1xuICBkb250S25vd0J1dHRvblRoZW1lPzogQnVpbGRlck9wdGlvblRoZW1lO1xuICBidXR0b25UaGVtZXM/OiBBcnJheTxCdWlsZGVyT3B0aW9uVGhlbWU+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJPcHRpb25UaGVtZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGl2OiBDc3NUaGVtZTtcbiAgdGV4dDE6IFBTdHlsZTtcbiAgdGV4dDI/OiBDc3NUaGVtZTtcbn1cblxubmFtZXNwYWNlIEJ1aWxkZXJPcHRpb25UaGVtZSB7XG4gIGNvbnN0IEdSRUVOID0gXCIjNzBBRDQ3XCI7XG4gIGNvbnN0IFlFTExPVyA9IFwiI0ZGQzAwMFwiO1xuICBjb25zdCBPUkFOR0UgPSBcIiNGNDkwMkNcIjtcbiAgY29uc3QgUkVEID0gXCIjRkYwMDAwXCI7XG4gIGNvbnN0IExJR0hUX0JMVUUgPSBcIiM0MjcxOUNcIjtcbiAgY29uc3QgV0hJVEUgPSBcIiNmZmZmZmZcIjtcbiAgY29uc3QgQkxVRSA9IFwiIzJGNTU5N1wiO1xuICBjb25zdCBCVE5fV0lEVEggPSAxOC41O1xuICBjb25zdCBCVE5fQk9SREVSX1dJRFRIID0gMztcbiAgY29uc3QgQlROX0JPUkRFUl9SQURJVVMgPSAxMDtcbiAgY29uc3QgQlROX0JPUkRFUl9TVFlMRTogRFN0eWxlW1wiYm9yZGVyU3R5bGVcIl0gPSBcInNvbGlkXCI7XG4gIGNvbnN0IEJUTl9IRUlHSFQgPSA5LjI7XG4gIGNvbnN0IEJUTl9TSE9SVF9XSURUSCA9IDEzLjc7XG4gIGNvbnN0IEZPTlRfV0VJR0hUOiBEU3R5bGVbXCJmb250V2VpZ2h0XCJdID0gNjAwO1xuICBjb25zdCBGT05UX1NJWkU6IERDc3MuUHhbXCJ2YWx1ZVwiXSA9IDM1O1xuXG4gIGV4cG9ydCBjb25zdCBibHVlQnV0dG9uID0gKCk6IEJ1aWxkZXJPcHRpb25UaGVtZSA9PiAoe1xuICAgIG5hbWU6IFwiYmx1ZS1idXR0b24tdGhlbWVcIixcbiAgICBkaXY6IHtcbiAgICAgIGNzczoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IEJMVUUsXG4gICAgICAgIGJvcmRlckNvbG9yOiBCTFVFLFxuICAgICAgICB0ZXh0Q29sb3I6IFdISVRFLFxuICAgICAgICBmb250U2l6ZTogeyBfdW5pdDogXCJweFwiLCB2YWx1ZTogRk9OVF9TSVpFIH0sXG4gICAgICAgIGJvcmRlcldpZHRoOiB7IF91bml0OiBcInB4XCIsIHZhbHVlOiBCVE5fQk9SREVSX1dJRFRIIH0sXG4gICAgICAgIGJvcmRlclN0eWxlOiBCVE5fQk9SREVSX1NUWUxFLFxuICAgICAgICBib3JkZXJSYWRpdXM6IHsgdmFsdWU6IEJUTl9CT1JERVJfUkFESVVTLCBfdW5pdDogXCJweFwiIH0sXG4gICAgICAgIHBhZGRpbmc6IHsgX3VuaXQ6IFwicHhcIiwgdmFsdWU6IDQwIH0sXG4gICAgICAgIGg6IEJUTl9IRUlHSFQsXG4gICAgICAgIHc6IEJUTl9XSURUSCxcbiAgICAgICAgeDogMTAsXG4gICAgICAgIHk6IDgsXG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcbiAgICAgIH0sXG4gICAgICBjc3NEaXNhYmxlZDogeyBvcGFjaXR5OiAwLjMsIGN1cnNvcjogXCJub3QtYWxsb3dlZFwiIH0sXG4gICAgICBjc3NFbmFibGVkOiB7IG9wYWNpdHk6IDEsIGN1cnNvcjogXCJwb2ludGVyXCIgfSxcbiAgICB9LFxuICAgIHRleHQxOiB7XG4gICAgICB5OiA1MCxcbiAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMCUsIDUwJSlcIixcbiAgICAgIHRleHRDb2xvcjogV0hJVEUsXG4gICAgICBmb250U2l6ZTogeyBfdW5pdDogXCJweFwiLCB2YWx1ZTogRk9OVF9TSVpFIH0sXG4gICAgICB3OiA4NCxcbiAgICAgIHg6IDgsXG4gICAgICBmb250V2VpZ2h0OiBGT05UX1dFSUdIVCxcbiAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcbiAgICB9LFxuICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IERlZmF1bHRUaGVtZTogSURlZmF1bHRUaGVtZSA9IHtcbiAgbmFtZTogXCJkZWZhdWx0LXRoZW1lXCIsXG4gIHZpZGVvUGxheWVyOiB7XG4gICAgcGxheUJ1dHRvbjoge1xuICAgICAgaWNvblVybDogSWNvblVybHMucGxheUNpcmNsZVJlZ3VsYXIsXG4gICAgICBjc3M6IHsgdzogNSwgaDogNSwgeTogNDgsIHg6IDQgfSxcbiAgICAgIGNzc0Rpc2FibGVkOiB7IG9wYWNpdHk6IDAuMywgY3Vyc29yOiBcIm5vdC1hbGxvd2VkXCIgfSxcbiAgICAgIGNzc0VuYWJsZWQ6IHsgb3BhY2l0eTogMC44LCBjdXJzb3I6IFwicG9pbnRlclwiIH0sXG4gICAgfSxcbiAgICBwYXVzZUJ1dHRvbjoge1xuICAgICAgaWNvblVybDogSWNvblVybHMucGF1c2VTdmcsXG4gICAgICBjc3M6IHsgdzogNSwgaDogNSwgeTogNDgsIHg6IDQgfSxcbiAgICAgIGNzc0Rpc2FibGVkOiB7IG9wYWNpdHk6IDAuMywgY3Vyc29yOiBcIm5vdC1hbGxvd2VkXCIgfSxcbiAgICAgIGNzc0VuYWJsZWQ6IHsgb3BhY2l0eTogMC44LCBjdXJzb3I6IFwicG9pbnRlclwiIH0sXG4gICAgfSxcbiAgICB2aWRlb0VsZW1lbnQ6IHsgY3NzOiB7IHc6IDEwMCwgaDogNDUsIHk6IDU1LCB4OiAwIH0gfSxcbiAgfSxcbiAgaW1hZ2U6IHsgc3R5bGU6IHsgaDogNTAsIHc6IDEwMCwgeDogMCB9IH0sXG4gIG1haW5UZXh0OiB7XG4gICAgbm9NZWRpYToge1xuICAgICAgdGV4dDoge1xuICAgICAgICBjc3M6IHtcbiAgICAgICAgICB3OiA4MCxcbiAgICAgICAgICB5OiA2NSxcbiAgICAgICAgICB4OiAxMCxcbiAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgICAgdGV4dENvbG9yOiBcImJsYWNrXCIsXG4gICAgICAgICAgZm9udFNpemU6IHsgX3VuaXQ6IFwicHhcIiwgdmFsdWU6IDQwIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNzc0Rpc2FibGVkOiB7fSxcbiAgICAgICAgY3NzRW5hYmxlZDoge30sXG4gICAgICB9LFxuICAgICAgYXVkaW86IHtcbiAgICAgICAgY3NzOiB7XG4gICAgICAgICAgaDogNixcbiAgICAgICAgICB3OiA2LFxuICAgICAgICAgIHg6IDQsXG4gICAgICAgICAgeTogMzIsXG4gICAgICAgICAgY3Vyc29yOiBcInBvaW50ZXJcIixcbiAgICAgICAgICBvcGFjaXR5OiAwLjgsXG4gICAgICAgICAgdmlzaWJpbGl0eTogXCJ2aXNpYmxlXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGNzc0Rpc2FibGVkOiB7IG9wYWNpdHk6IDAuMywgY3Vyc29yOiBcIm5vdC1hbGxvd2VkXCIgfSxcbiAgICAgICAgY3NzRW5hYmxlZDogeyBvcGFjaXR5OiAwLjgsIGN1cnNvcjogXCJwb2ludGVyXCIgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB3aXRoTWVkaWE6IHtcbiAgICAgIHRleHQ6IHtcbiAgICAgICAgY3NzOiB7XG4gICAgICAgICAgdzogODAsXG4gICAgICAgICAgeTogMjcsXG4gICAgICAgICAgeDogMTAsXG4gICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxuICAgICAgICAgIHRleHRDb2xvcjogXCJibGFja1wiLFxuICAgICAgICAgIGZvbnRTaXplOiB7IF91bml0OiBcInB4XCIsIHZhbHVlOiAzMCB9LFxuICAgICAgICB9LFxuICAgICAgICBjc3NEaXNhYmxlZDoge30sXG4gICAgICAgIGNzc0VuYWJsZWQ6IHt9LFxuICAgICAgfSxcbiAgICAgIGF1ZGlvOiB7XG4gICAgICAgIGNzczoge1xuICAgICAgICAgIGg6IDYsXG4gICAgICAgICAgdzogNixcbiAgICAgICAgICB4OiA0LFxuICAgICAgICAgIHk6IDMyLFxuICAgICAgICAgIGN1cnNvcjogXCJwb2ludGVyXCIsXG4gICAgICAgICAgb3BhY2l0eTogMC44LFxuICAgICAgICAgIHZpc2liaWxpdHk6IFwidmlzaWJsZVwiLFxuICAgICAgICB9LFxuICAgICAgICBjc3NEaXNhYmxlZDogeyBvcGFjaXR5OiAwLjMsIGN1cnNvcjogXCJub3QtYWxsb3dlZFwiIH0sXG4gICAgICAgIGNzc0VuYWJsZWQ6IHsgb3BhY2l0eTogMC44LCBjdXJzb3I6IFwicG9pbnRlclwiIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG4gIG5leHRCdXR0b25UaGVtZTogQnVpbGRlck9wdGlvblRoZW1lLmJsdWVCdXR0b24oKSxcbiAgcmVzcG9uc2VCdXR0b25zOiBCdWlsZGVyT3B0aW9uVGhlbWUuYmx1ZUJ1dHRvbigpLFxufTtcbiIsICJpbXBvcnQgeyBCdWlsZGVyT2JqZWN0SWQsIEJ1aWxkZXJPYmplY3QgfSBmcm9tIFwiLi9CdWlsZGVyT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJPcHRpb25UaGVtZSB9IGZyb20gXCIuL3RoZW1lL0lEZWZhdWx0VGhlbWVcIjtcbmltcG9ydCB7IERlZmF1bHRUaGVtZSB9IGZyb20gXCIuL3RoZW1lL0lEZWZhdWx0VGhlbWVcIjtcbmltcG9ydCB7IEF1ZGlvRmlsZSB9IGZyb20gXCIuL21lZGlhLWZpbGVzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlck9wdGlvbkR0byB7XG4gIHJlYWRvbmx5IGlkOiBCdWlsZGVyT2JqZWN0SWQuUXVlc3Rpb25PcHRpb25JRDtcbiAgcmVhZG9ubHkgdmFsdWU6IG51bWJlcjtcbiAgcmVhZG9ubHkgbGFiZWw6IHN0cmluZztcbiAgcmVhZG9ubHkgbGFiZWxBdWRpbz86IEF1ZGlvRmlsZTtcbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkZXJPcHRpb24gZXh0ZW5kcyBCdWlsZGVyT2JqZWN0PFwiYnVpbGRlci1xdWVzdGlvbi1vcHRpb25cIiwgQnVpbGRlck9wdGlvbkR0bz4ge1xuICByZWFkb25seSBvYmplY3RUeXBlID0gXCJidWlsZGVyLXF1ZXN0aW9uLW9wdGlvblwiO1xuICB0aGVtZTogQnVpbGRlck9wdGlvblRoZW1lID0gRGVmYXVsdFRoZW1lLnJlc3BvbnNlQnV0dG9ucztcblxuICBpZDogQnVpbGRlck9iamVjdElkLlF1ZXN0aW9uT3B0aW9uSUQ7XG4gIHZhbHVlOiBudW1iZXI7XG4gIGxhYmVsID0gXCJcIjtcbiAgcHJpdmF0ZSBfbGFiZWxBdWRpb0ZpbGU6IEF1ZGlvRmlsZSB8IGZhbHNlID0gZmFsc2U7XG4gIGdldCBsYWJlbEF1ZGlvRmlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbGFiZWxBdWRpb0ZpbGU7XG4gIH1cbiAgc2V0IGxhYmVsQXVkaW9GaWxlKGF1ZGlvRmlsZTogQXVkaW9GaWxlIHwgZmFsc2UpIHtcbiAgICB0aGlzLl9sYWJlbEF1ZGlvRmlsZSA9IGF1ZGlvRmlsZTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoZHRvOiBCdWlsZGVyT3B0aW9uRHRvKSB7XG4gICAgc3VwZXIoZHRvKTtcbiAgICB0aGlzLmlkID0gZHRvLmlkO1xuICAgIHRoaXMudmFsdWUgPSBkdG8udmFsdWU7XG4gICAgdGhpcy5sYWJlbCA9IGR0by5sYWJlbDtcbiAgICAvLyB0aGlzLnRoZW1lID0gZHRvLnRoZW1lO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlKHZhbHVlOiBudW1iZXIsIGxhYmVsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpZCA9IEJ1aWxkZXJPYmplY3RJZC5xdWVzdGlvbk9wdGlvbklkKCk7XG4gICAgY29uc3QgZHRvOiBCdWlsZGVyT3B0aW9uRHRvID0ge1xuICAgICAgaWQsXG4gICAgICB2YWx1ZSxcbiAgICAgIGxhYmVsLFxuICAgIH07XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQnVpbGRlck9wdGlvbihkdG8pO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUpzb24oZHRvOiBCdWlsZGVyT3B0aW9uRHRvKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQnVpbGRlck9wdGlvbihkdG8pO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIHRvSnNvbigpOiBCdWlsZGVyT3B0aW9uRHRvIHtcbiAgICBjb25zdCBkdG86IEJ1aWxkZXJPcHRpb25EdG8gPSB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgbGFiZWw6IHRoaXMubGFiZWwsXG4gICAgfTtcbiAgICByZXR1cm4gZHRvO1xuICB9XG5cbiAgY2xvbmUoKTogQnVpbGRlck9wdGlvbkR0byB7XG4gICAgY29uc3QgY2xvbmVJZCA9IEJ1aWxkZXJPYmplY3RJZC5xdWVzdGlvbk9wdGlvbklkKCk7XG4gICAgY29uc3QgZHRvID0gdGhpcy50b0pzb24oKTtcbiAgICBjb25zdCBjbG9uZUR0bzogQnVpbGRlck9wdGlvbkR0byA9IHsgLi4uZHRvLCBpZDogY2xvbmVJZCB9O1xuICAgIHJldHVybiBjbG9uZUR0bztcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQnVpbGRlck9wdGlvbkR0byB9IGZyb20gXCIuL0J1aWxkZXItb3B0aW9uXCI7XG5pbXBvcnQgeyBCdWlsZGVyT3B0aW9uIH0gZnJvbSBcIi4vQnVpbGRlci1vcHRpb25cIjtcbmltcG9ydCB7IEJ1aWxkZXJPYmplY3QsIEJ1aWxkZXJPYmplY3RJZCB9IGZyb20gXCIuL0J1aWxkZXJPYmplY3RcIjtcblxuZXhwb3J0IHR5cGUgQnVpbGRlclF1ZXN0aW9uVHlwZSA9XG4gICAgfCBcInNlbGVjdC1vbmVcIlxuICAgIHwgXCJzZWxlY3QtbWFueVwiXG4gICAgfCBcInRleHRcIlxuICAgIHwgXCJjb2xvclwiXG4gICAgfCBcInJhZGlvXCJcbiAgICB8IFwiZW1haWxcIlxuICAgIHwgXCJ0aW1lXCJcbiAgICB8IFwiY2hlY2tib3hcIlxuICAgIHwgXCJ0ZXh0YXJlYVwiXG4gICAgfCBcImRhdGVcIlxuICAgIHwgXCJudW1lcmljLXJhbmdlXCJcbiAgICB8IFwiZHVyYXRpb25cIjtcblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZGVyUXVlc3Rpb25EdG8ge1xuICAgIHJlYWRvbmx5IGlkOiBCdWlsZGVyT2JqZWN0SWQuUXVlc3Rpb25JRDtcbiAgICBfdHlwZTogQnVpbGRlclF1ZXN0aW9uVHlwZTtcbiAgICB0ZXh0OiBzdHJpbmc7XG4gICAgb3B0aW9uczogUmVhZG9ubHlBcnJheTxCdWlsZGVyT3B0aW9uRHRvPjtcbiAgICBwcmVmaXg6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkZXJRdWVzdGlvbiBleHRlbmRzIEJ1aWxkZXJPYmplY3Q8XCJidWlsZGVyLXF1ZXN0aW9uXCIsIEJ1aWxkZXJRdWVzdGlvbkR0bz4ge1xuICAgIHJlYWRvbmx5IG9iamVjdFR5cGUgPSBcImJ1aWxkZXItcXVlc3Rpb25cIjtcbiAgICBpZDogQnVpbGRlck9iamVjdElkLlF1ZXN0aW9uSUQ7XG4gICAgdHlwZTogQnVpbGRlclF1ZXN0aW9uVHlwZTtcbiAgICBxdWVzdGlvblRleHQgPSBcIlwiO1xuICAgIG9wdGlvbnM6IEJ1aWxkZXJPcHRpb25bXSA9IFtdO1xuICAgIHByZWZpeCA9IFwiXCI7XG5cbiAgICBzdGF0aWMgY3JlYXRlID0gKHR5cGU6IEJ1aWxkZXJRdWVzdGlvblR5cGUpID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSBCdWlsZGVyT2JqZWN0SWQucXVlc3Rpb25JZCgpO1xuXG4gICAgICAgIHJldHVybiBuZXcgQnVpbGRlclF1ZXN0aW9uKHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgX3R5cGU6IHR5cGUsXG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgICBwcmVmaXg6IFwiXCIsXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21Kc29uKGR0bzogQnVpbGRlclF1ZXN0aW9uRHRvKTogQnVpbGRlclF1ZXN0aW9uIHtcbiAgICAgICAgY29uc3QgcXVlc3Rpb24gPSBuZXcgQnVpbGRlclF1ZXN0aW9uKGR0byk7XG4gICAgICAgIHJldHVybiBxdWVzdGlvbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKGR0bzogQnVpbGRlclF1ZXN0aW9uRHRvKSB7XG4gICAgICAgIHN1cGVyKGR0byk7XG4gICAgICAgIHRoaXMuaWQgPSBkdG8uaWQgYXMgQnVpbGRlck9iamVjdElkLlF1ZXN0aW9uSUQ7XG4gICAgICAgIHRoaXMudHlwZSA9IGR0by5fdHlwZTtcbiAgICAgICAgdGhpcy5xdWVzdGlvblRleHQgPSBkdG8udGV4dDtcbiAgICAgICAgdGhpcy5wcmVmaXggPSBkdG8ucHJlZml4O1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBkdG8ub3B0aW9ucy5tYXAoKG8pID0+IEJ1aWxkZXJPcHRpb24uZnJvbUpzb24obykpO1xuICAgIH1cblxuICAgIGFkZE9wdGlvbihsYWJlbDogc3RyaW5nLCB2YWx1ZTogbnVtYmVyLCBhdEluZGV4ID0gLTEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gQnVpbGRlck9wdGlvbi5jcmVhdGUodmFsdWUsIGxhYmVsKTtcbiAgICAgICAgaWYgKGF0SW5kZXggPj0gMCAmJiBhdEluZGV4IDwgdGhpcy5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnNwbGljZShhdEluZGV4LCAwLCBvcHRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnB1c2gob3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH1cblxuICAgIGRlbGV0ZU9wdGlvbihvcHRpb246IEJ1aWxkZXJPcHRpb24pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWQgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKChvKSA9PiBvLmlkICE9PSBvcHRpb24uaWQpO1xuICAgICAgICBjb25zdCBkaWREZWxldGUgPSBmaWx0ZXJlZC5sZW5ndGggPT09IHRoaXMub3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBmaWx0ZXJlZDtcbiAgICAgICAgcmV0dXJuIGRpZERlbGV0ZTtcbiAgICB9XG5cbiAgICB0b0pzb24oKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNKc29uID0gdGhpcy5vcHRpb25zLm1hcCgobykgPT4gby50b0pzb24oKSk7XG4gICAgICAgIGNvbnN0IGR0bzogQnVpbGRlclF1ZXN0aW9uRHRvID0ge1xuICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICBwcmVmaXg6IHRoaXMucHJlZml4LFxuICAgICAgICAgICAgX3R5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHRleHQ6IHRoaXMucXVlc3Rpb25UZXh0LFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uc0pzb24sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBkdG87XG4gICAgfVxuXG4gICAgY2xvbmUoKTogQnVpbGRlclF1ZXN0aW9uRHRvIHtcbiAgICAgICAgY29uc3QgY2xvbmVJZCA9IEJ1aWxkZXJPYmplY3RJZC5xdWVzdGlvbklkKCk7XG4gICAgICAgIGNvbnN0IGR0byA9IHRoaXMudG9Kc29uKCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNDbG9uZSA9IHRoaXMub3B0aW9ucy5tYXAoKG8pID0+IG8uY2xvbmUoKSk7XG4gICAgICAgIGNvbnN0IGNsb25lZER0bzogQnVpbGRlclF1ZXN0aW9uRHRvID0ge1xuICAgICAgICAgICAgLi4uZHRvLFxuICAgICAgICAgICAgaWQ6IGNsb25lSWQsXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zQ2xvbmUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjbG9uZWREdG87XG4gICAgfVxufVxuIiwgImltcG9ydCB7IEJ1aWxkZXJPYmplY3QgfSBmcm9tIFwiLi9CdWlsZGVyT2JqZWN0XCI7XG5pbXBvcnQgeyBBdWRpb0ZpbGUgfSBmcm9tIFwiLi9tZWRpYS1maWxlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJNYWluVGV4dER0byB7XG4gICAgdGV4dDogc3RyaW5nO1xuICAgIGF1ZGlvRmlsZTogQXVkaW9GaWxlIHwgZmFsc2U7XG4gICAgYXV0b3BsYXk6IGJvb2xlYW47XG4gICAgYXV0b3BsYXlEZWxheTogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgQnVpbGRlck1haW5UZXh0IGV4dGVuZHMgQnVpbGRlck9iamVjdDxcImJ1aWxkZXItbWFpbi10ZXh0XCIsIEJ1aWxkZXJNYWluVGV4dER0bz4ge1xuICAgIHJlYWRvbmx5IG9iamVjdFR5cGU6IFwiYnVpbGRlci1tYWluLXRleHRcIiA9IFwiYnVpbGRlci1tYWluLXRleHRcIjtcbiAgICBhdXRvcGxheSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2F1ZGlvRmlsZTogQXVkaW9GaWxlIHwgZmFsc2UgPSBmYWxzZTtcbiAgICBhdXRvcGxheURlbGF5ID0gMDtcblxuICAgIHRleHQgPSBcIlwiO1xuXG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihkdG86IEJ1aWxkZXJNYWluVGV4dER0bykge1xuICAgICAgICBzdXBlcihkdG8pO1xuICAgICAgICB0aGlzLl9hdWRpb0ZpbGUgPSBkdG8uYXVkaW9GaWxlID8/IGZhbHNlO1xuICAgICAgICB0aGlzLmF1dG9wbGF5ID0gZHRvLmF1dG9wbGF5ID8/IGZhbHNlO1xuICAgICAgICB0aGlzLmF1dG9wbGF5RGVsYXkgPSBkdG8uYXV0b3BsYXlEZWxheSA/PyAwO1xuICAgICAgICB0aGlzLnRleHQgPSBkdG8udGV4dCA/PyBcIlwiO1xuICAgIH1cblxuICAgIGdldCBhdXRvcGxheURlbGF5SW5TZWNvbmRzKCkge1xuICAgICAgICBjb25zdCBkZWxheSA9IHRoaXMuYXV0b3BsYXlEZWxheTtcbiAgICAgICAgY29uc3QgcyA9IGRlbGF5IC8gMTAwMDtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gcy50b0ZpeGVkKDEpO1xuICAgICAgICByZXR1cm4gZm9ybWF0dGVkO1xuICAgIH1cblxuICAgIGdldCBkdXJhdGlvblRhZygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmF1ZGlvRmlsZSkgcmV0dXJuIFwiXCI7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuYXVkaW9GaWxlLmR1cmF0aW9uKTtcbiAgICAgICAgY29uc3QgZHVyID0gdGhpcy5hdWRpb0ZpbGUuZHVyYXRpb24udG9GaXhlZCgxKTtcbiAgICAgICAgcmV0dXJuIFwiZHVyIFwiICsgZHVyICsgXCIgc1wiO1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSnNvbihkdG86IEJ1aWxkZXJNYWluVGV4dER0byk6IEJ1aWxkZXJNYWluVGV4dCB7XG4gICAgICAgIGNvbnN0IG1haW5UZXh0ID0gbmV3IEJ1aWxkZXJNYWluVGV4dChkdG8pO1xuICAgICAgICByZXR1cm4gbWFpblRleHQ7XG4gICAgfVxuXG4gICAgc3RhdGljIGNyZWF0ZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgZHRvOiBCdWlsZGVyTWFpblRleHREdG8gPSB7XG4gICAgICAgICAgICBhdXRvcGxheTogZmFsc2UsXG4gICAgICAgICAgICBhdXRvcGxheURlbGF5OiAwLFxuICAgICAgICAgICAgYXVkaW9GaWxlOiBmYWxzZSxcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXcgQnVpbGRlck1haW5UZXh0KGR0byk7XG4gICAgfTtcblxuICAgIGNsb25lKCk6IEJ1aWxkZXJNYWluVGV4dER0byB7XG4gICAgICAgIGNvbnN0IGR0byA9IHRoaXMudG9Kc29uKCk7XG4gICAgICAgIGNvbnN0IGNsb25lID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkdG8pKTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIHRvSnNvbigpOiBCdWlsZGVyTWFpblRleHREdG8ge1xuICAgICAgICBjb25zdCBkdG86IEJ1aWxkZXJNYWluVGV4dER0byA9IHtcbiAgICAgICAgICAgIHRleHQ6IHRoaXMudGV4dCxcbiAgICAgICAgICAgIGF1ZGlvRmlsZTogdGhpcy5hdWRpb0ZpbGUsXG4gICAgICAgICAgICBhdXRvcGxheTogdGhpcy5hdXRvcGxheSxcbiAgICAgICAgICAgIGF1dG9wbGF5RGVsYXk6IHRoaXMuYXV0b3BsYXlEZWxheSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGR0bztcbiAgICB9XG4gICAgZ2V0IGF1ZGlvRmlsZSgpOiBBdWRpb0ZpbGUgfCBmYWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hdWRpb0ZpbGU7XG4gICAgfVxuICAgIHNldCBhdWRpb0ZpbGUoYXVkaW9GaWxlOiBBdWRpb0ZpbGUgfCBmYWxzZSkge1xuICAgICAgICBpZiAoYXVkaW9GaWxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5hdXRvcGxheURlbGF5ID0gMDtcbiAgICAgICAgICAgIHRoaXMuYXV0b3BsYXkgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hdWRpb0ZpbGUgPSBhdWRpb0ZpbGU7XG4gICAgfVxufVxuIiwgImNvbnN0IEJ1aWxkZXJWYXJpYWJsZVR5cGUgPSB7XG4gIG51bWVyaWNXaXRoT3B0aW9uczogdHJ1ZSxcbiAgbnVtZXJpYzogdHJ1ZSxcbiAgbnVtZXJpY1JhbmdlOiB0cnVlLFxuICB0ZXh0OiB0cnVlLFxuICBkYXRlOiB0cnVlLFxuICBkYXRlUmFuZ2U6IHRydWUsXG4gIHRpbWU6IHRydWUsXG4gIGR1cmF0aW9uOiB0cnVlLFxuICBib29sZWFuOiB0cnVlLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgQnVpbGRlclZhcmlhYmxlVHlwZSA9IGtleW9mIHR5cGVvZiBCdWlsZGVyVmFyaWFibGVUeXBlO1xuXG5leHBvcnQgY2xhc3MgQnVpbGRlclZhcmlhYmxlT3B0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgbGFiZWw6IHN0cmluZyxcbiAgICByZWFkb25seSB2YWx1ZTogbnVtYmVyLFxuICApIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblZhcmlhYmxlIHtcbiAgcmVhZG9ubHkga2luZDogXCJxdWVzdGlvbi12YXJpYWJsZVwiID0gXCJxdWVzdGlvbi12YXJpYWJsZVwiO1xuICByZWFkb25seSBkYXRhVHlwZTogQnVpbGRlclZhcmlhYmxlVHlwZSA9IFwibnVtZXJpY1dpdGhPcHRpb25zXCI7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IHZhcklkOiBzdHJpbmcsXG4gICAgcmVhZG9ubHkgbGFiZWw6IHN0cmluZyxcbiAgICByZWFkb25seSBvcHRpb25zOiBSZWFkb25seUFycmF5PEJ1aWxkZXJWYXJpYWJsZU9wdGlvbj4sXG4gICAgcmVhZG9ubHkgcGFnZU51bWJlcjogbnVtYmVyLFxuICApIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBDdXN0b21WYXJpYWJsZSB7XG4gIHJlYWRvbmx5IGtpbmQ6IFwiY29uZmlndXJhdGlvbi12YXJpYWJsZVwiID0gXCJjb25maWd1cmF0aW9uLXZhcmlhYmxlXCI7XG4gIHJlYWRvbmx5IGRhdGFUeXBlOiBCdWlsZGVyVmFyaWFibGVUeXBlID0gXCJudW1lcmljV2l0aE9wdGlvbnNcIjtcbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgdmFySWQ6IHN0cmluZyxcbiAgICByZWFkb25seSBsYWJlbDogc3RyaW5nLFxuICAgIHJlYWRvbmx5IG9wdGlvbnM6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclZhcmlhYmxlT3B0aW9uPixcbiAgKSB7fVxufVxuXG5leHBvcnQgdHlwZSBCdWlsZGVyVmFyaWFibGUgPSBRdWVzdGlvblZhcmlhYmxlIHwgQ3VzdG9tVmFyaWFibGU7XG4iLCAiaW1wb3J0IHR5cGUgeyBCdWlsZGVyUXVlc3Rpb25EdG8sIEJ1aWxkZXJRdWVzdGlvblR5cGUgfSBmcm9tIFwiLi9CdWlsZGVyLXF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBCdWlsZGVyUXVlc3Rpb24gfSBmcm9tIFwiLi9CdWlsZGVyLXF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBCdWlsZGVyT2JqZWN0LCBCdWlsZGVyT2JqZWN0SWQgfSBmcm9tIFwiLi9CdWlsZGVyT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJPcHRpb25EdG8gfSBmcm9tIFwiLi9CdWlsZGVyLW9wdGlvblwiO1xuaW1wb3J0IHsgQnVpbGRlck9wdGlvbiB9IGZyb20gXCIuL0J1aWxkZXItb3B0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJNYWluVmlkZW9EdG8gfSBmcm9tIFwiLi9CdWlsZGVyTWFpblZpZGVvRHRvXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJNYWluSW1hZ2VEdG8gfSBmcm9tIFwiLi9CdWlsZGVyTWFpbkltYWdlRHRvXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJNYWluVGV4dER0byB9IGZyb20gXCIuL0J1aWxkZXJNYWluVGV4dFwiO1xuaW1wb3J0IHsgQnVpbGRlck1haW5UZXh0IH0gZnJvbSBcIi4vQnVpbGRlck1haW5UZXh0XCI7XG5pbXBvcnQgeyBCdWlsZGVyVmFyaWFibGVPcHRpb24sIFF1ZXN0aW9uVmFyaWFibGUgfSBmcm9tIFwiLi9ydWxlYnVpbGRlci9SdWxlVmFyaWFibGVcIjtcbmltcG9ydCB7IERVdGlsIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcblxuY29uc3QgVSA9IERVdGlsO1xuZXhwb3J0IHR5cGUgQnVpbGRlclBhZ2VUeXBlID0gXCJpbmZvLXBhZ2VcIiB8IFwicXVlc3Rpb25cIiB8IFwibXVsdGktc2VsZWN0XCIgfCBcImZvcm1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZGVyUGFnZUR0byB7XG4gIHJlYWRvbmx5IGlkOiBCdWlsZGVyT2JqZWN0SWQuUGFnZUlEO1xuICBwcmVmaXg6IHN0cmluZztcbiAgX3R5cGU6IEJ1aWxkZXJQYWdlVHlwZTtcbiAgbWFpblRleHQ6IEJ1aWxkZXJNYWluVGV4dER0bztcbiAgbmV4dEJ1dHRvbjogQnVpbGRlck9wdGlvbkR0bztcbiAgZGVmYXVsdFF1ZXN0aW9uOiBCdWlsZGVyUXVlc3Rpb25EdG87XG4gIHF1ZXN0aW9uczogQXJyYXk8QnVpbGRlclF1ZXN0aW9uRHRvPjtcbiAgbWFpbk1lZGlhPzogQnVpbGRlck1haW5JbWFnZUR0byB8IEJ1aWxkZXJNYWluVmlkZW9EdG87XG4gIGF1dG9wbGF5U2VxdWVuY2U6IEFycmF5PHN0cmluZz47XG4gIHRhZ3M6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPjtcbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkZXJQYWdlIGV4dGVuZHMgQnVpbGRlck9iamVjdDxcImJ1aWxkZXItcGFnZVwiLCBCdWlsZGVyUGFnZUR0bz4ge1xuICByZWFkb25seSBvYmplY3RUeXBlOiBcImJ1aWxkZXItcGFnZVwiID0gXCJidWlsZGVyLXBhZ2VcIjtcbiAgcmVhZG9ubHkgaWQ6IEJ1aWxkZXJPYmplY3RJZC5QYWdlSUQ7XG4gIHByaXZhdGUgX3BhZ2VUeXBlOiBCdWlsZGVyUGFnZVR5cGU7XG4gIHByaXZhdGUgX3ByZWZpeCA9IFwiXCI7XG4gIHByaXZhdGUgX3F1ZXN0aW9uczogQXJyYXk8QnVpbGRlclF1ZXN0aW9uPiA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IF90YWdzOiBTZXQ8c3RyaW5nPjtcbiAgcHJpdmF0ZSBfYmFja2dyb3VuZENvbG9yID0gXCIjRkZGRkZGXCI7XG4gIG1haW5NZWRpYTogQnVpbGRlck1haW5WaWRlb0R0byB8IEJ1aWxkZXJNYWluSW1hZ2VEdG8gfCBmYWxzZSA9IGZhbHNlO1xuICBkZWZhdWx0UXVlc3Rpb246IEJ1aWxkZXJRdWVzdGlvbjtcbiAgbWFpblRleHQ6IEJ1aWxkZXJNYWluVGV4dDtcbiAgbmV4dEJ1dHRvbiA9IEJ1aWxkZXJPcHRpb24uY3JlYXRlKC0xLCBcIk5lc3RlXCIpO1xuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlKHR5cGU6IEJ1aWxkZXJQYWdlVHlwZSwgX3ByZWZpeDogc3RyaW5nKSB7XG4gICAgY29uc3QgaWQgPSBCdWlsZGVyT2JqZWN0SWQucGFnZUlkKCk7XG4gICAgY29uc3QgbWFpblRleHREdG86IEJ1aWxkZXJNYWluVGV4dER0byA9IHtcbiAgICAgIHRleHQ6IFwiXCIsXG4gICAgICBhdWRpb0ZpbGU6IGZhbHNlLFxuICAgICAgYXV0b3BsYXk6IGZhbHNlLFxuICAgICAgYXV0b3BsYXlEZWxheTogMCxcbiAgICB9O1xuICAgIGNvbnN0IG5leHRCdXR0b25EdG8gPSBCdWlsZGVyT3B0aW9uLmNyZWF0ZSgtMSwgXCJwYWdlLW5leHQtYnV0dG9uLXRleHRcIikudG9Kc29uKCk7XG4gICAgY29uc3QgZGVmYXVsdFF1ZXN0aW9uRHRvID0gQnVpbGRlclF1ZXN0aW9uLmNyZWF0ZShcInNlbGVjdC1vbmVcIikudG9Kc29uKCk7XG4gICAgY29uc3QgZHRvOiBCdWlsZGVyUGFnZUR0byA9IHtcbiAgICAgIF90eXBlOiB0eXBlLFxuICAgICAgYXV0b3BsYXlTZXF1ZW5jZTogW10sXG4gICAgICBkZWZhdWx0UXVlc3Rpb246IGRlZmF1bHRRdWVzdGlvbkR0byxcbiAgICAgIGlkLFxuICAgICAgbmV4dEJ1dHRvbjogbmV4dEJ1dHRvbkR0byxcbiAgICAgIG1haW5UZXh0OiBtYWluVGV4dER0byxcbiAgICAgIHByZWZpeDogXCJcIixcbiAgICAgIHF1ZXN0aW9uczogW10sXG4gICAgICB0YWdzOiBbXSxcbiAgICB9O1xuXG4gICAgY29uc3QgcGFnZSA9IG5ldyBCdWlsZGVyUGFnZShkdG8pO1xuICAgIHJldHVybiBwYWdlO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZnJvbUpzb24oZHRvOiBCdWlsZGVyUGFnZUR0byk6IEJ1aWxkZXJQYWdlIHtcbiAgICBjb25zdCBwYWdlID0gbmV3IEJ1aWxkZXJQYWdlKGR0byk7XG4gICAgcmV0dXJuIHBhZ2U7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGR0bzogQnVpbGRlclBhZ2VEdG8pIHtcbiAgICBzdXBlcihkdG8pO1xuICAgIHRoaXMuaWQgPSBkdG8uaWQ7XG4gICAgdGhpcy5fcGFnZVR5cGUgPSBkdG8uX3R5cGU7XG4gICAgdGhpcy5fcHJlZml4ID0gZHRvLnByZWZpeDtcbiAgICB0aGlzLm1haW5UZXh0ID0gQnVpbGRlck1haW5UZXh0LmZyb21Kc29uKGR0by5tYWluVGV4dCk7XG4gICAgdGhpcy5uZXh0QnV0dG9uID0gQnVpbGRlck9wdGlvbi5mcm9tSnNvbihkdG8ubmV4dEJ1dHRvbik7XG4gICAgdGhpcy5kZWZhdWx0UXVlc3Rpb24gPSBCdWlsZGVyUXVlc3Rpb24uZnJvbUpzb24oZHRvLmRlZmF1bHRRdWVzdGlvbik7XG4gICAgdGhpcy5fcXVlc3Rpb25zID0gZHRvLnF1ZXN0aW9ucy5tYXAoKHEpID0+IEJ1aWxkZXJRdWVzdGlvbi5mcm9tSnNvbihxKSk7XG4gICAgY29uc3QgdGFnTGlzdDogc3RyaW5nW10gPSBBcnJheS5pc0FycmF5KGR0by50YWdzKSA/IGR0by50YWdzIDogW107XG4gICAgdGhpcy5fdGFncyA9IG5ldyBTZXQodGFnTGlzdCk7XG4gICAgaWYgKGR0by5tYWluTWVkaWEpIHtcbiAgICAgIHRoaXMubWFpbk1lZGlhID0gZHRvLm1haW5NZWRpYTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVSb3dzKCk7XG4gIH1cblxuICBpbnNlcnRRdWVzdGlvbihxdWVzdGlvbjogQnVpbGRlclF1ZXN0aW9uLCBhdEluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWxpZEluZGV4Rm4gPSBVLmlzSW5SYW5nZSgwLCB0aGlzLl9xdWVzdGlvbnMubGVuZ3RoKTtcbiAgICBpZiAoIXZhbGlkSW5kZXhGbihhdEluZGV4KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBoYXNRdWVzdGlvbiA9ICEhdGhpcy5fcXVlc3Rpb25zLmZpbmQoKHEpID0+IHEuaWQgPT09IHF1ZXN0aW9uLmlkKTtcbiAgICBpZiAoaGFzUXVlc3Rpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5fcXVlc3Rpb25zLnNwbGljZShhdEluZGV4LCAwLCBxdWVzdGlvbik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhZGRRdWVzdGlvbih0eXBlOiBCdWlsZGVyUXVlc3Rpb25UeXBlLCBhdEluZGV4ID0gLTEpOiBCdWlsZGVyUXVlc3Rpb24ge1xuICAgIGNvbnN0IHF1ZXN0aW9uID0gQnVpbGRlclF1ZXN0aW9uLmNyZWF0ZSh0eXBlKTtcbiAgICBpZiAoYXRJbmRleCA8IHRoaXMuX3F1ZXN0aW9ucy5sZW5ndGggJiYgYXRJbmRleCA+PSAwKSB7XG4gICAgICB0aGlzLl9xdWVzdGlvbnMuc3BsaWNlKGF0SW5kZXgsIDAsIHF1ZXN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcXVlc3Rpb25zLnB1c2gocXVlc3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gcXVlc3Rpb247XG4gIH1cblxuICAvKipcbiAgICogTW92ZSBhIHF1ZXN0aW9uIGluIHF1ZXN0aW9ucy1hcnJheVxuICAgKiBAcGFyYW0gcXVlc3Rpb24gKHJlZmVyZW5jZSlcbiAgICogQHBhcmFtIHRvSW5kZXhcbiAgICovXG4gIG1vdmVRdWVzdGlvbihxdWVzdGlvbjogQnVpbGRlclF1ZXN0aW9uLCB0b0luZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWxpZFRvSW5kZXhGbiA9IFUuaXNJblJhbmdlKDAsIHRoaXMuX3F1ZXN0aW9ucy5sZW5ndGgpO1xuICAgIGlmICghdmFsaWRUb0luZGV4Rm4odG9JbmRleCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5fcXVlc3Rpb25zLmluZGV4T2YocXVlc3Rpb24pO1xuICAgIGlmIChjdXJyZW50SW5kZXggPCAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuX3F1ZXN0aW9ucy5zcGxpY2UoY3VycmVudEluZGV4LCAxKTtcbiAgICB0aGlzLl9xdWVzdGlvbnMuc3BsaWNlKHRvSW5kZXgsIDAsIHF1ZXN0aW9uKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGRlbGV0ZVF1ZXN0aW9uKHF1ZXN0aW9uOiBCdWlsZGVyUXVlc3Rpb24pIHtcbiAgICB0aGlzLl9xdWVzdGlvbnMgPSB0aGlzLl9xdWVzdGlvbnMuZmlsdGVyKChxKSA9PiBxICE9PSBxdWVzdGlvbik7XG4gICAgLy8gVE9ETyBFTUlUIERFTEVURUQgUVVFU1RJT04uXG4gICAgdGhpcy51cGRhdGVSb3dzKCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVSb3dzKCkge1xuICAgIGlmICh0aGlzLl9wYWdlVHlwZSA9PT0gXCJxdWVzdGlvblwiIHx8IHRoaXMuX3BhZ2VUeXBlID09PSBcImluZm8tcGFnZVwiKSB7XG4gICAgICB0aGlzLl9xdWVzdGlvbnMgPSBbXTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3BhZ2VUeXBlID09PSBcImZvcm1cIiAmJiB0aGlzLl9xdWVzdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLl9xdWVzdGlvbnMgPSBbXTtcbiAgICAgIHRoaXMuYWRkUXVlc3Rpb24oXCJ0ZXh0XCIpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fcGFnZVR5cGUgPT09IFwibXVsdGktc2VsZWN0XCIgJiYgdGhpcy5fcXVlc3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5fcXVlc3Rpb25zID0gW107XG4gICAgICB0aGlzLmFkZFF1ZXN0aW9uKFwidGV4dFwiKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkVGFnKHRhZzogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGFncy5hZGQodGFnKTtcbiAgfVxuICBwdWJsaWMgZGVsZXRlVGFnKHRhZzogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGFncy5kZWxldGUodGFnKTtcbiAgfVxuXG4gIHNldCBwYWdlVHlwZSh2YWx1ZTogQnVpbGRlclBhZ2VUeXBlKSB7XG4gICAgdGhpcy5fcGFnZVR5cGUgPSB2YWx1ZTtcbiAgICAvLyBUT0RPIEVtaXQgQWxsIHF1ZXN0aW9ucyB0aGF0IGFyZSBkZWxldGVkPyBMaXN0ZW4gZm9yIHJlbW92ZWQgdmFyaWFibGVzPz9cbiAgICB0aGlzLnVwZGF0ZVJvd3MoKTtcbiAgfVxuXG4gIGdldFF1ZXN0aW9uVmFyaWFibGVzKG1vZHVsZVByZWZpeDogc3RyaW5nLCBwYWdlTnVtYmVyOiBudW1iZXIpOiBSZWFkb25seUFycmF5PFF1ZXN0aW9uVmFyaWFibGU+IHtcbiAgICBjb25zdCB2YXJpYWJsZXM6IFF1ZXN0aW9uVmFyaWFibGVbXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMuX3BhZ2VUeXBlID09PSBcInF1ZXN0aW9uXCIpIHtcbiAgICAgIGNvbnN0IHBhZ2VQcmVmaXggPSB0aGlzLnByZWZpeDtcbiAgICAgIGNvbnN0IGlkID0gbW9kdWxlUHJlZml4ID8gbW9kdWxlUHJlZml4ICsgXCJfXCIgKyBwYWdlUHJlZml4IDogcGFnZVByZWZpeDtcbiAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5tYWluVGV4dC50ZXh0O1xuICAgICAgY29uc3Qgb3AgPSB0aGlzLmRlZmF1bHRRdWVzdGlvbi5vcHRpb25zLm1hcCgobykgPT4ge1xuICAgICAgICBjb25zdCBsYWJlbCA9IG8ubGFiZWw7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gby52YWx1ZTtcbiAgICAgICAgcmV0dXJuIG5ldyBCdWlsZGVyVmFyaWFibGVPcHRpb24obGFiZWwsIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc2luZ2xlVmFyID0gbmV3IFF1ZXN0aW9uVmFyaWFibGUoaWQsIGxhYmVsLCBvcCwgcGFnZU51bWJlcik7XG4gICAgICB2YXJpYWJsZXMucHVzaChzaW5nbGVWYXIpO1xuICAgIH1cbiAgICByZXR1cm4gdmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0IHRhZ3MoKTogUmVhZG9ubHlBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX3RhZ3NdO1xuICB9XG4gIGdldCBwYWdlVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFnZVR5cGU7XG4gIH1cblxuICBnZXQgcHJlZml4KCkge1xuICAgIHJldHVybiB0aGlzLl9wcmVmaXg7XG4gIH1cblxuICBzZXQgcHJlZml4KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wcmVmaXggPSB2YWx1ZTtcbiAgfVxuXG4gIHRvSnNvbigpOiBCdWlsZGVyUGFnZUR0byB7XG4gICAgY29uc3QgcXVlc3Rpb25zID0gdGhpcy5fcXVlc3Rpb25zLm1hcCgocSkgPT4gcS50b0pzb24oKSk7XG4gICAgY29uc3QgbWFpblRleHQgPSB0aGlzLm1haW5UZXh0LnRvSnNvbigpO1xuICAgIGNvbnN0IG5leHRCdXR0b24gPSB0aGlzLm5leHRCdXR0b24udG9Kc29uKCk7XG4gICAgY29uc3QgbWFpbk1lZGlhID0gdGhpcy5tYWluTWVkaWE7XG4gICAgY29uc3QgZHRvOiBCdWlsZGVyUGFnZUR0byA9IHtcbiAgICAgIF90eXBlOiB0aGlzLnBhZ2VUeXBlLFxuICAgICAgbWFpblRleHQsXG4gICAgICBhdXRvcGxheVNlcXVlbmNlOiBbXSxcbiAgICAgIG5leHRCdXR0b24sXG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIHRhZ3M6IFsuLi50aGlzLnRhZ3NdLFxuICAgICAgcHJlZml4OiB0aGlzLl9wcmVmaXgsXG4gICAgICBkZWZhdWx0UXVlc3Rpb246IHRoaXMuZGVmYXVsdFF1ZXN0aW9uLnRvSnNvbigpLFxuICAgICAgcXVlc3Rpb25zLFxuICAgIH07XG4gICAgaWYgKG1haW5NZWRpYSkge1xuICAgICAgZHRvLm1haW5NZWRpYSA9IG1haW5NZWRpYTtcbiAgICB9XG4gICAgcmV0dXJuIGR0bztcbiAgfVxuXG4gIGNsb25lKCk6IEJ1aWxkZXJQYWdlRHRvIHtcbiAgICBjb25zdCBkdG8gPSB0aGlzLnRvSnNvbigpO1xuICAgIGNvbnN0IGRlZmF1bHRRdWVzdGlvbkNsb25lID0gdGhpcy5kZWZhdWx0UXVlc3Rpb24uY2xvbmUoKTtcbiAgICBjb25zdCBtYWluVGV4dENsb25lID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLm1haW5UZXh0KSk7XG4gICAgLy8gY29uc3QgcGFnZXNDbG9uZSA9IHRoaXNcbiAgICBjb25zdCBxdWVzdGlvbnNDbG9uZSA9IHRoaXMucXVlc3Rpb25zLm1hcCgocSkgPT4gcS5jbG9uZSgpKTtcbiAgICBjb25zdCBuZXdJZCA9IEJ1aWxkZXJPYmplY3RJZC5wYWdlSWQoKTtcbiAgICBjb25zdCBjbG9uZTogQnVpbGRlclBhZ2VEdG8gPSB7XG4gICAgICAuLi5kdG8sXG4gICAgICBpZDogbmV3SWQsXG4gICAgICBkZWZhdWx0UXVlc3Rpb246IGRlZmF1bHRRdWVzdGlvbkNsb25lLFxuICAgICAgbWFpblRleHQ6IG1haW5UZXh0Q2xvbmUsXG4gICAgICBxdWVzdGlvbnM6IHF1ZXN0aW9uc0Nsb25lLFxuICAgIH07XG4gICAgLy8gY29uc3QgY2xvbmVEdG9cbiAgICByZXR1cm4gY2xvbmU7XG4gIH1cblxuICBnZXQgYmFja2dyb3VuZENvbG9yKCkge1xuICAgIHJldHVybiB0aGlzLl9iYWNrZ3JvdW5kQ29sb3I7XG4gIH1cblxuICBzZXQgYmFja2dyb3VuZENvbG9yKGNvbG9yOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIGNvbG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjtcbiAgICB9XG4gIH1cblxuICBnZXQgcXVlc3Rpb25zKCk6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclF1ZXN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXN0aW9ucztcbiAgfVxufVxuIiwgImltcG9ydCB7IEJ1aWxkZXJWYXJpYWJsZSwgQnVpbGRlclZhcmlhYmxlT3B0aW9uIH0gZnJvbSBcIi4vUnVsZVZhcmlhYmxlXCI7XG5pbXBvcnQgeyBCdWlsZGVyT3BlcmF0b3IgfSBmcm9tIFwiLi9jb25kaXRpb24vQnVpbGRlci1vcGVyYXRvclwiO1xuaW1wb3J0IHsgSnVtcFRvUGFnZUFjdGlvbiB9IGZyb20gXCIuL1J1bGVBY3Rpb25cIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNpbmdsZVNlbGVjdEl0ZW08VD4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZWxlY3RMYWJlbDtcbiAgcHJpdmF0ZSByZWFkb25seSBfdG9vbFRpcDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2VhcmNoU3RyaW5nO1xuICBnZXQgc2VsZWN0TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0TGFiZWw7XG4gIH1cbiAgZ2V0IHRvb2x0aXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rvb2xUaXA7XG4gIH1cblxuICBnZXQgc2VhcmNoU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWFyY2hTdHJpbmc7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocmVhZG9ubHkgZGF0YTogVCkge1xuICAgIHRoaXMuX3NlbGVjdExhYmVsID0gdGhpcy5nZXRTZWxlY3RMYWJlbCgpO1xuICAgIHRoaXMuX3Rvb2xUaXAgPSB0aGlzLmdldFRvb2x0aXAoKTtcbiAgICB0aGlzLl9zZWFyY2hTdHJpbmcgPSB0aGlzLmdldFNlYXJjaFN0cmluZygpO1xuICB9XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRTZWxlY3RMYWJlbCgpOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRUb29sdGlwKCk6IHN0cmluZztcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFNlYXJjaFN0cmluZygpOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBSdWxlVmFyaWFibGVTZWxlY3RJdGVtIGV4dGVuZHMgU2luZ2xlU2VsZWN0SXRlbTxCdWlsZGVyVmFyaWFibGU+IHtcbiAgcHVibGljIHN0YXRpYyBjcmVhdGUgPSAoZGF0YTogQnVpbGRlclZhcmlhYmxlKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBSdWxlVmFyaWFibGVTZWxlY3RJdGVtKGRhdGEpO1xuICB9O1xuICByZWFkb25seSBvcHRpb25zOiBSZWFkb25seUFycmF5PFJ1bGVPcHRpb25TZWxlY3RJdGVtPjtcbiAgY29uc3RydWN0b3IocmVhZG9ubHkgZGF0YTogQnVpbGRlclZhcmlhYmxlKSB7XG4gICAgc3VwZXIoZGF0YSk7XG4gICAgdGhpcy5vcHRpb25zID0gZGF0YS5vcHRpb25zLm1hcChSdWxlT3B0aW9uU2VsZWN0SXRlbS5jcmVhdGUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNlYXJjaFN0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEudmFySWQgKyB0aGlzLmRhdGEubGFiZWw7XG4gIH1cblxuICBnZXRTZWxlY3RMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEudmFySWQ7XG4gIH1cblxuICBnZXRUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5sYWJlbDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUnVsZU9wdGlvblNlbGVjdEl0ZW0gZXh0ZW5kcyBTaW5nbGVTZWxlY3RJdGVtPEJ1aWxkZXJWYXJpYWJsZU9wdGlvbj4ge1xuICBwdWJsaWMgc3RhdGljIGNyZWF0ZSA9IChvcHRpb246IEJ1aWxkZXJWYXJpYWJsZU9wdGlvbikgPT4ge1xuICAgIHJldHVybiBuZXcgUnVsZU9wdGlvblNlbGVjdEl0ZW0ob3B0aW9uKTtcbiAgfTtcbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihvcHRpb246IEJ1aWxkZXJWYXJpYWJsZU9wdGlvbikge1xuICAgIHN1cGVyKG9wdGlvbik7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFNlYXJjaFN0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNlbGVjdExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5sYWJlbCArIFwiKFwiICsgdGhpcy5kYXRhLnZhbHVlICsgXCIpXCI7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0VG9vbHRpcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPcGVyYXRvclNlbGVjdEl0ZW0gZXh0ZW5kcyBTaW5nbGVTZWxlY3RJdGVtPEJ1aWxkZXJPcGVyYXRvciB8IFwiXCI+IHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFUSA9IG5ldyBPcGVyYXRvclNlbGVjdEl0ZW0oXCJlcXVhbFwiKTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT1RfRVEgPSBuZXcgT3BlcmF0b3JTZWxlY3RJdGVtKFwibm90RXF1YWxcIik7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZnJvbVN5bWJvbCA9IChcbiAgICBzeW1ib2w6IEJ1aWxkZXJPcGVyYXRvciB8IE9taXQ8c3RyaW5nLCBCdWlsZGVyT3BlcmF0b3I+LFxuICApOiBPcGVyYXRvclNlbGVjdEl0ZW0gfCBmYWxzZSA9PiB7XG4gICAgaWYgKHN5bWJvbCA9PT0gXCJlcXVhbFwiKSB7XG4gICAgICByZXR1cm4gT3BlcmF0b3JTZWxlY3RJdGVtLkVRO1xuICAgIH1cbiAgICBpZiAoc3ltYm9sID09PSBcIm5vdEVxdWFsXCIpIHtcbiAgICAgIHJldHVybiBPcGVyYXRvclNlbGVjdEl0ZW0uTk9UX0VRO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG4gIHByaXZhdGUgY29uc3RydWN0b3Iob3BlcmF0b3I6IEJ1aWxkZXJPcGVyYXRvcikge1xuICAgIHN1cGVyKG9wZXJhdG9yKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTZWFyY2hTdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTZWxlY3RMYWJlbCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG9wZXJhdG9yID0gdGhpcy5kYXRhO1xuICAgIGlmIChvcGVyYXRvciA9PT0gXCJlcXVhbFwiKSB7XG4gICAgICByZXR1cm4gXCJFcXVhbHNcIjtcbiAgICB9XG4gICAgaWYgKG9wZXJhdG9yID09PSBcIm5vdEVxdWFsXCIpIHtcbiAgICAgIHJldHVybiBcIk5vdCBlcXVhbHNcIjtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0VG9vbHRpcCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG9wZXJhdG9yID0gdGhpcy5kYXRhO1xuICAgIGlmIChvcGVyYXRvciA9PT0gXCJlcXVhbFwiKSB7XG4gICAgICByZXR1cm4gXCJFcXVhbHNcIjtcbiAgICB9XG4gICAgaWYgKG9wZXJhdG9yID09PSBcIm5vdEVxdWFsXCIpIHtcbiAgICAgIHJldHVybiBcIk5vdCBlcXVhbHNcIjtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEp1bXBUb1BhZ2VTZWxlY3RJdGVtIGV4dGVuZHMgU2luZ2xlU2VsZWN0SXRlbTxKdW1wVG9QYWdlQWN0aW9uPiB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgY3JlYXRlID0gKHBhZ2VEYXRhOiBKdW1wVG9QYWdlQWN0aW9uKSA9PiBuZXcgSnVtcFRvUGFnZVNlbGVjdEl0ZW0ocGFnZURhdGEpO1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocGFnZURhdGE6IEp1bXBUb1BhZ2VBY3Rpb24pIHtcbiAgICBzdXBlcihwYWdlRGF0YSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U2VhcmNoU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5wYWdlSWQgKyB0aGlzLmRhdGEubWFpblRleHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U2VsZWN0TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLnBhZ2VJZCArIFwiIChcIiArIHRoaXMuZGF0YS5wYWdlTnVtYmVyICsgXCIpXCI7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0VG9vbHRpcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEubWFpblRleHQ7XG4gIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IFF1ZXN0aW9uVmFyaWFibGUsIEN1c3RvbVZhcmlhYmxlLCBCdWlsZGVyVmFyaWFibGUgfSBmcm9tIFwiLi9SdWxlVmFyaWFibGVcIjtcbmltcG9ydCB0eXBlIHsgRXhjbHVkZUJ5UGFnZUFjdGlvbiwgRXhjbHVkZUJ5VGFnQWN0aW9uLCBKdW1wVG9QYWdlQWN0aW9uIH0gZnJvbSBcIi4vUnVsZUFjdGlvblwiO1xuaW1wb3J0IHsgSnVtcFRvUGFnZVNlbGVjdEl0ZW0gfSBmcm9tIFwiLi9TaW5nbGVTZWxlY3RJdGVtXCI7XG5cbi8qKlxuICogVE9ETyBDcmF0ZSBmaWx0ZXJzIGZvciBcImNhcmRpbmFsaXR5XCIgb3IgXCJvcmRlclwiIG9mIGEgdmFyaWFibGU7XG4gKiBSZXR1cm4gbGVnYWwgbGlzdHMgb2YgdmFyaWFibGVzLlxuICovXG5leHBvcnQgY2xhc3MgUnVsZUlucHV0IHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfcXVlc3Rpb25WYXJpYWJsZXM6IFJlYWRvbmx5QXJyYXk8UXVlc3Rpb25WYXJpYWJsZT4sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2N1c3RvbVZhcmlhYmxlczogUmVhZG9ubHlBcnJheTxDdXN0b21WYXJpYWJsZT4sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VJZEFjdGlvbnM6IFJlYWRvbmx5QXJyYXk8RXhjbHVkZUJ5UGFnZUFjdGlvbj4sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhZ0FjdGlvbnM6IFJlYWRvbmx5QXJyYXk8RXhjbHVkZUJ5VGFnQWN0aW9uPixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfanVtcEFjdGlvbnM6IFJlYWRvbmx5QXJyYXk8SnVtcFRvUGFnZUFjdGlvbj5cbiAgICApIHt9XG5cbiAgICBnZXQgcXVlc3Rpb25WYXJzKCk6IFJlYWRvbmx5QXJyYXk8UXVlc3Rpb25WYXJpYWJsZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcXVlc3Rpb25WYXJpYWJsZXM7XG4gICAgfVxuXG4gICAgZ2V0Q29uZGl0aW9uSW5wdXQoKTogUmVhZG9ubHlBcnJheTxCdWlsZGVyVmFyaWFibGU+IHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLnF1ZXN0aW9uVmFycywgLi4udGhpcy5jdXN0b21WYXJzXTtcbiAgICB9XG5cbiAgICBnZXRKdW1wVG9QYWdlT3B0aW9ucygpOiBSZWFkb25seUFycmF5PEp1bXBUb1BhZ2VTZWxlY3RJdGVtPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9qdW1wQWN0aW9ucy5tYXAoSnVtcFRvUGFnZVNlbGVjdEl0ZW0uY3JlYXRlKTtcbiAgICB9XG5cbiAgICBnZXQgY3VzdG9tVmFycygpOiBSZWFkb25seUFycmF5PEN1c3RvbVZhcmlhYmxlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXN0b21WYXJpYWJsZXM7XG4gICAgfVxuXG4gICAgZ2V0IGV4Y2x1ZGVCeVBhZ2VJZEFjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYWdlSWRBY3Rpb25zO1xuICAgIH1cblxuICAgIGdldCBleGNsdWRlQnlUYWdBY3Rpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFnQWN0aW9ucztcbiAgICB9XG4gICAgZ2V0IGp1bXBUb1BhZ2VBY3Rpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fanVtcEFjdGlvbnM7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IEJ1aWxkZXJPYmplY3RJZCwgQnVpbGRlck9iamVjdCB9IGZyb20gJy4vQnVpbGRlck9iamVjdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlclRhZ0R0byB7XG4gIHJlYWRvbmx5IGlkOiBCdWlsZGVyT2JqZWN0SWQuVGFnSWQ7XG4gIHJlYWRvbmx5IHRhZzogc3RyaW5nO1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgQnVpbGRlclRhZyBleHRlbmRzIEJ1aWxkZXJPYmplY3Q8J2J1aWxkZXItdGFnJywgQnVpbGRlclRhZ0R0bz4ge1xuICByZWFkb25seSBvYmplY3RUeXBlOiAnYnVpbGRlci10YWcnID0gJ2J1aWxkZXItdGFnJztcbiAgcmVhZG9ubHkgaWQ6IEJ1aWxkZXJPYmplY3RJZC5UYWdJZDtcbiAgdGFnVGV4dCA9ICcnO1xuICB0YWdEZXNjcmlwdGlvbiA9ICcnO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BWF9MRU5HVEggPSAyMDtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNSU5fTEVOR1RIID0gMTtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGNyZWF0ZSA9ICh0YWc6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyA9ICcnKSA9PiB7XG4gICAgY29uc3QgaWQgPSBCdWlsZGVyT2JqZWN0SWQuY3JlYXRlVGFnSWQoKTtcbiAgICBjb25zdCBkdG86IEJ1aWxkZXJUYWdEdG8gPSB7XG4gICAgICBpZCxcbiAgICAgIHRhZyxcbiAgICAgIGRlc2NyaXB0aW9uXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IEJ1aWxkZXJUYWcoZHRvKTtcbiAgfTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBmcm9tRHRvID0gKGR0bzogQnVpbGRlclRhZ0R0bykgPT4ge1xuICAgIHJldHVybiBuZXcgQnVpbGRlclRhZyhkdG8pO1xuICB9O1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoZHRvOiBCdWlsZGVyVGFnRHRvKSB7XG4gICAgY29uc3QgaWQgPSBkdG8uaWQgPz8gQnVpbGRlck9iamVjdElkLmNyZWF0ZVRhZ0lkKCk7XG4gICAgY29uc3Qgd2l0aElkID0geyAuLi5kdG8sIGlkIH07XG4gICAgc3VwZXIod2l0aElkKTtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy50YWdUZXh0ID0gZHRvLnRhZyA/PyAnJztcbiAgICB0aGlzLnRhZ0Rlc2NyaXB0aW9uID0gZHRvLmRlc2NyaXB0aW9uID8/ICcnO1xuICB9XG4gIGNsb25lKCk6IEJ1aWxkZXJUYWdEdG8ge1xuICAgIHJldHVybiB0aGlzLnRvSnNvbigpO1xuICB9XG5cbiAgdG9Kc29uKCk6IEJ1aWxkZXJUYWdEdG8ge1xuICAgIHJldHVybiB7IHRhZzogdGhpcy50YWdUZXh0LCBkZXNjcmlwdGlvbjogdGhpcy50YWdEZXNjcmlwdGlvbiwgaWQ6IHRoaXMuaWQgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGFnQ29sbGVjdGlvbiBpbXBsZW1lbnRzIEl0ZXJhYmxlPEJ1aWxkZXJUYWc+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGFncyA9IG5ldyBTZXQ8QnVpbGRlclRhZz4oKTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBjcmVhdGUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBUYWdDb2xsZWN0aW9uKFtdKTtcbiAgfTtcblxuICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICBjb25zdCBsaXN0ID0gWy4uLnRoaXMuX3RhZ3NdO1xuICAgIHJldHVybiBsaXN0W1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgfVxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGluaXRpYWxUYWdzOiBSZWFkb25seUFycmF5PEJ1aWxkZXJUYWc+KSB7XG4gICAgaW5pdGlhbFRhZ3MuZm9yRWFjaCh0YWcgPT4ge1xuICAgICAgdGhpcy5fdGFncy5hZGQodGFnKTtcbiAgICB9KTtcbiAgfVxuXG4gIGluaXQodGFnczogUmVhZG9ubHlBcnJheTxCdWlsZGVyVGFnRHRvPikge1xuICAgIGNvbnN0IGR0b0xpc3Q6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclRhZ0R0bz4gPSBBcnJheS5pc0FycmF5KHRhZ3MpXG4gICAgICA/IHRhZ3NcbiAgICAgIDogW107XG4gICAgY29uc3QgYWxsID0gZHRvTGlzdC5tYXAoQnVpbGRlclRhZy5mcm9tRHRvKTtcbiAgICBhbGwuZm9yRWFjaCh0YWcgPT4ge1xuICAgICAgdGhpcy5fdGFncy5hZGQodGFnKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZCh0YWc6IEJ1aWxkZXJUYWcpIHtcbiAgICB0aGlzLl90YWdzLmFkZCh0YWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSB0aGlzIHRhZyBmcm9tIGNvbGxlY3Rpb247XG4gICAqIEBwYXJhbSB0YWdcbiAgICovXG4gIGRlbGV0ZSh0YWc6IEJ1aWxkZXJUYWcpIHtcbiAgICB0aGlzLl90YWdzLmRlbGV0ZSh0YWcpO1xuICB9XG5cbiAgdG9Kc29uKCk6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclRhZ0R0bz4ge1xuICAgIGNvbnN0IGxpc3QgPSBbLi4udGhpcy5fdGFnc107XG4gICAgY29uc3QgZHRvTGlzdCA9IGxpc3QubWFwKHQgPT4gdC50b0pzb24oKSk7XG4gICAgcmV0dXJuIGR0b0xpc3Q7XG4gIH1cblxuICBkZWxldGVBbGwodGFnczogSXRlcmFibGU8QnVpbGRlclRhZz4pIHtcbiAgICBjb25zdCBsID0gdGFnc1tTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgY29uc3QgYXNMaXN0ID0gWy4uLnRhZ3NdO1xuICAgIGFzTGlzdC5mb3JFYWNoKHQgPT4ge1xuICAgICAgdGhpcy5kZWxldGUodCk7XG4gICAgfSk7XG4gIH1cbn1cbiIsICJjb25zdCBCdWlsZGVyT3BlcmF0b3JTeW1ib2xzID0ge1xuICBlcXVhbDogdHJ1ZSxcbiAgbm90RXF1YWw6IHRydWUsXG4gIGxlc3NUaGFuOiB0cnVlLFxuICBsZXNzVGhhbk9yRXF1YWw6IHRydWUsXG4gIGdyZWF0ZXJUaGFuOiB0cnVlLFxuICBncmVhdGVyVGhhbk9yRXF1YWw6IHRydWUsXG4gIGJldHdlZW46IHRydWUsXG4gIG5vdEJldHdlZW46IHRydWUsXG4gIGluOiB0cnVlLFxuICBub3RJbjogdHJ1ZSxcbiAgbWlzc2luZzogdHJ1ZSxcbiAgbm90TWlzc2luZzogdHJ1ZSxcbiAgY29udGFpbnM6IHRydWUsXG4gIG5vdENvbnRhaW5zOiB0cnVlLFxuICBlbXB0eTogdHJ1ZSxcbiAgbm90RW1wdHk6IHRydWUsXG4gIHN0YXJ0c1dpdGg6IHRydWUsXG4gIGVuZHNXaXRoOiB0cnVlLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgQnVpbGRlck9wZXJhdG9yID0ga2V5b2YgdHlwZW9mIEJ1aWxkZXJPcGVyYXRvclN5bWJvbHM7XG5cbmV4cG9ydCBuYW1lc3BhY2UgQnVpbGRlck9wZXJhdG9yIHtcbiAgZXhwb3J0IGNvbnN0IGlzID0gKHN5bWJvbD86IHN0cmluZyk6IHN5bWJvbCBpcyBCdWlsZGVyT3BlcmF0b3IgPT4ge1xuICAgIGlmICh0eXBlb2Ygc3ltYm9sICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3Qua2V5cyhCdWlsZGVyT3BlcmF0b3JTeW1ib2xzKS5pbmNsdWRlcyhzeW1ib2wpO1xuICB9O1xufVxuIiwgImltcG9ydCB7IEJ1aWxkZXJPYmplY3QgfSBmcm9tIFwiLi4vLi4vQnVpbGRlck9iamVjdFwiO1xuaW1wb3J0IHsgQnVpbGRlck9wZXJhdG9yIH0gZnJvbSBcIi4vQnVpbGRlci1vcGVyYXRvclwiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGVyVmFyaWFibGUsIEJ1aWxkZXJWYXJpYWJsZU9wdGlvbiB9IGZyb20gXCIuLi9SdWxlVmFyaWFibGVcIjtcbmltcG9ydCB7IE9wZXJhdG9yU2VsZWN0SXRlbSwgUnVsZU9wdGlvblNlbGVjdEl0ZW0sIFJ1bGVWYXJpYWJsZVNlbGVjdEl0ZW0gfSBmcm9tIFwiLi4vU2luZ2xlU2VsZWN0SXRlbVwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlckNvbmRpdGlvbkR0byB7XG4gIHJlYWRvbmx5IGtpbmQ6IFwiY29uZGl0aW9uXCI7XG4gIHJlYWRvbmx5IG9wZXJhdG9yOiBCdWlsZGVyT3BlcmF0b3IgfCBcIlwiO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZhcmlhYmxlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgdmFsdWU6IG51bWJlciB8IHN0cmluZyB8IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZGVyQ29uZGl0aW9uIGV4dGVuZHMgQnVpbGRlck9iamVjdDxcImJ1aWxkZXItY29uZGl0aW9uXCIsIEJ1aWxkZXJDb25kaXRpb25EdG8+IHtcbiAgcmVhZG9ubHkgb2JqZWN0VHlwZTogXCJidWlsZGVyLWNvbmRpdGlvblwiID0gXCJidWlsZGVyLWNvbmRpdGlvblwiO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5VTUJFUl9PUEVSQVRPUlM6IFJlYWRvbmx5QXJyYXk8T3BlcmF0b3JTZWxlY3RJdGVtPiA9IFtcbiAgICBPcGVyYXRvclNlbGVjdEl0ZW0uRVEsXG4gICAgT3BlcmF0b3JTZWxlY3RJdGVtLk5PVF9FUSxcbiAgXTtcblxuICBwcml2YXRlIGluaXRpYWxEdG86IEJ1aWxkZXJDb25kaXRpb25EdG87XG4gIG5hbWUgPSBcIlwiO1xuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlID0gKHZhcmlhYmxlTGlzdDogUmVhZG9ubHlBcnJheTxCdWlsZGVyVmFyaWFibGU+KSA9PiB7XG4gICAgY29uc3QgY29uZGl0aW9uID0gbmV3IEJ1aWxkZXJDb25kaXRpb24oXG4gICAgICB7XG4gICAgICAgIGtpbmQ6IFwiY29uZGl0aW9uXCIsXG4gICAgICAgIG5hbWU6IFwiXCIsXG4gICAgICAgIG9wZXJhdG9yOiBcIlwiLFxuICAgICAgICB2YXJpYWJsZUlkOiBcIlwiLFxuICAgICAgICB2YWx1ZTogXCJcIixcbiAgICAgIH0sXG4gICAgICB2YXJpYWJsZUxpc3QsXG4gICAgKTtcbiAgICByZXR1cm4gY29uZGl0aW9uO1xuICB9O1xuXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUR0byA9IChkdG86IEJ1aWxkZXJDb25kaXRpb25EdG8sIHZhcmlhYmxlczogUmVhZG9ubHlBcnJheTxCdWlsZGVyVmFyaWFibGU+KSA9PiB7XG4gICAgY29uc3QgX2R0bzogQnVpbGRlckNvbmRpdGlvbkR0byA9IHtcbiAgICAgIGtpbmQ6IFwiY29uZGl0aW9uXCIsXG4gICAgICBuYW1lOiBkdG8ubmFtZSA/PyBcIlwiLFxuICAgICAgdmFsdWU6IGR0by52YWx1ZSA/PyBcIlwiLFxuICAgICAgb3BlcmF0b3I6IGR0by5vcGVyYXRvciA/PyBcIlwiLFxuICAgICAgdmFyaWFibGVJZDogZHRvLnZhcmlhYmxlSWQgPz8gXCJcIixcbiAgICB9O1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEJ1aWxkZXJDb25kaXRpb24oX2R0bywgdmFyaWFibGVzKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH07XG4gIHByaXZhdGUgX3ZhcmlhYmxlOiBCdWlsZGVyVmFyaWFibGUgfCBmYWxzZSA9IGZhbHNlO1xuICBwcml2YXRlIF9vcGVyYXRvcjogQnVpbGRlck9wZXJhdG9yIHwgXCJcIiA9IFwiXCI7XG4gIHByaXZhdGUgX3ZhbHVlOiBCdWlsZGVyVmFyaWFibGVPcHRpb24gfCBmYWxzZSA9IGZhbHNlO1xuICBwcml2YXRlIF92YXJpYWJsZUxpc3Q6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclZhcmlhYmxlPiA9IFtdO1xuXG4gIC8qKlxuICAgKiBDYW4gb25seSBzZXQgdmFyaWFibGVzIHRoYXQgZXhpc3QgaW4gdmFyaWFibGVMaXN0LlxuICAgKiBAcGFyYW0gdmFyaWFibGVcbiAgICovXG4gIHNldCB2YXJpYWJsZSh2YXJpYWJsZTogQnVpbGRlclZhcmlhYmxlIHwgZmFsc2UpIHtcbiAgICBpZiAodmFyaWFibGUgPT09IHRoaXMuX3ZhcmlhYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3ZhcmlhYmxlID0gdmFyaWFibGU7XG4gICAgdGhpcy5fb3BlcmF0b3IgPSBcIlwiO1xuICAgIHRoaXMuX3ZhbHVlID0gZmFsc2U7XG4gIH1cblxuICBnZXQgdmFyaWFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhcmlhYmxlO1xuICB9XG5cbiAgc2V0IHZhbHVlKHZhcmlhYmxlVmFsdWU6IEJ1aWxkZXJWYXJpYWJsZU9wdGlvbiB8IGZhbHNlKSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YXJpYWJsZVZhbHVlO1xuICB9XG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICB2YWxpZGF0ZSgpOiB7IGlzVmFsaWQ6IHRydWUgfSB8IHsgaXNWYWxpZDogZmFsc2U7IG1lc3NhZ2U6IHN0cmluZyB9IHtcbiAgICBpZiAodGhpcy5fdmFyaWFibGVMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IFwiSGFzIG5vIHZhcmlhYmxlTGlzdCB0byBjaGVjayBkdG8gYWdhaW5zdC5cIixcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICghdGhpcy5fdmFyaWFibGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBcIlZhcmlhYmxlIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCBmcm9tIHZhcmlhYmxlTGlzdC5cIixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9vcGVyYXRvcikge1xuICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIG1lc3NhZ2U6IFwiT3BlcmF0b3IgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkXCIgfTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3ZhbHVlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogXCJWYWx1ZSAoQnVpbGRlclZhcmlhYmxlT3B0aW9uKSBpcyBub3QgaW5pdGlhbGl6ZWRcIixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgaXNWYWxpZDogdHJ1ZSB9O1xuICB9XG5cbiAgdG9FbmdpbmVDb25kaXRpb24obW9kdWxlUHJlZml4OiBzdHJpbmcpOiBDb25kaXRpb24uU2ltcGxlIHwgZmFsc2Uge1xuICAgIGNvbnN0IHZhbCA9IHRoaXMudmFsdWU7XG4gICAgY29uc3Qgb3AgPSB0aGlzLl9vcGVyYXRvcjtcbiAgICBjb25zdCB2ID0gdGhpcy5fdmFyaWFibGU7XG4gICAgaWYgKCF2YWwpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIW9wKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCF2KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKG9wID09PSBcImVxdWFsXCIpIHtcbiAgICAgIGNvbnN0IGVuZ2luZUNvbmRpdGlvbjogQ29uZGl0aW9uLlNpbXBsZSA9IHtcbiAgICAgICAga2luZDogXCJudW1lcmljLWNvbmRpdGlvblwiLFxuICAgICAgICB2YWx1ZTogdmFsLnZhbHVlLFxuICAgICAgICB2YWx1ZUxhYmVsOiB2YWwubGFiZWwsXG4gICAgICAgIHJlZmVyZW5jZUlkOiBtb2R1bGVQcmVmaXggKyBcIl9cIiArIHYudmFySWQsXG4gICAgICAgIHJlZmVyZW5jZUxhYmVsOiB2LmxhYmVsLFxuICAgICAgICBvcGVyYXRvcjogXCJlcVwiLFxuICAgICAgfTtcbiAgICAgIHJldHVybiBlbmdpbmVDb25kaXRpb247XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZFZhcmlhYmxlSW5Vbml2ZXJzZSh2YXJpYWJsZUlkOiBzdHJpbmcpOiBCdWlsZGVyVmFyaWFibGUgfCBmYWxzZSB7XG4gICAgY29uc3QgdiA9IHRoaXMuX3ZhcmlhYmxlTGlzdC5maW5kKCh2KSA9PiB2LnZhcklkID09PSB2YXJpYWJsZUlkKTtcbiAgICByZXR1cm4gdiA/PyBmYWxzZTtcbiAgfVxuXG4gIHNldCBvcGVyYXRvcihvcGVyYXRvcjogQnVpbGRlck9wZXJhdG9yIHwgXCJcIikge1xuICAgIGlmIChCdWlsZGVyT3BlcmF0b3IuaXMob3BlcmF0b3IpKSB7XG4gICAgICB0aGlzLl9vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vcGVyYXRvciA9IFwiXCI7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG9wZXJhdG9yKCkge1xuICAgIHJldHVybiB0aGlzLl9vcGVyYXRvcjtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoZHRvOiBCdWlsZGVyQ29uZGl0aW9uRHRvLCB2YXJpYWJsZXM6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclZhcmlhYmxlPikge1xuICAgIHN1cGVyKGR0byk7XG4gICAgdGhpcy5pbml0aWFsRHRvID0gZHRvO1xuICAgIHRoaXMubmFtZSA9IGR0by5uYW1lO1xuICAgIHRoaXMuX3NldFZhcmlhYmxlTGlzdCh2YXJpYWJsZXMpO1xuICB9XG5cbiAgZ2V0IHZhcmlhYmxlU2VsZWN0SXRlbXNJblVuaXZlcnNlKCk6IFJlYWRvbmx5QXJyYXk8UnVsZVZhcmlhYmxlU2VsZWN0SXRlbT4ge1xuICAgIHJldHVybiB0aGlzLl92YXJpYWJsZUxpc3QubWFwKFJ1bGVWYXJpYWJsZVNlbGVjdEl0ZW0uY3JlYXRlKTtcbiAgfVxuXG4gIGdldCBvcGVyYXRvcnNTZWxlY3RJdGVtcygpOiBSZWFkb25seUFycmF5PE9wZXJhdG9yU2VsZWN0SXRlbT4ge1xuICAgIHJldHVybiB0aGlzLl92YXJpYWJsZSA/IEJ1aWxkZXJDb25kaXRpb24uTlVNQkVSX09QRVJBVE9SUyA6IFtdO1xuICB9XG5cbiAgZ2V0IHNlbGVjdFZhbHVlSXRlbXMoKTogUmVhZG9ubHlBcnJheTxSdWxlT3B0aW9uU2VsZWN0SXRlbT4ge1xuICAgIGlmICghdGhpcy5fdmFyaWFibGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3Qgb3B0ID0gdGhpcy5fdmFyaWFibGUub3B0aW9ucy5tYXAoUnVsZU9wdGlvblNlbGVjdEl0ZW0uY3JlYXRlKTtcbiAgICByZXR1cm4gb3B0O1xuICB9XG5cbiAgY2xvbmUoKTogQnVpbGRlckNvbmRpdGlvbkR0byB7XG4gICAgcmV0dXJuIHRoaXMudG9Kc29uKCk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRWYXJpYWJsZUxpc3QodmFyaWFibGVzOiBSZWFkb25seUFycmF5PEJ1aWxkZXJWYXJpYWJsZT4pOiBib29sZWFuIHtcbiAgICB0aGlzLl92YXJpYWJsZUxpc3QgPSB2YXJpYWJsZXM7XG4gICAgY29uc3QgdiA9IHRoaXMuX3ZhcmlhYmxlTGlzdC5maW5kKCh2KSA9PiB2LnZhcklkID09PSB0aGlzLm9yaWdpbmFsRHRvLnZhcmlhYmxlSWQpO1xuICAgIGlmICghdikge1xuICAgICAgdGhpcy5fdmFyaWFibGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX29wZXJhdG9yID0gXCJcIjtcbiAgICAgIHRoaXMuX3ZhbHVlID0gZmFsc2U7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuX3ZhcmlhYmxlID0gdjtcbiAgICBjb25zdCBvcCA9IHRoaXMub3JpZ2luYWxEdG8ub3BlcmF0b3I7XG5cbiAgICBpZiAoIUJ1aWxkZXJPcGVyYXRvci5pcyhvcCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5fb3BlcmF0b3IgPSBvcDtcbiAgICBjb25zdCBtYXliZU9wdGlvbiA9IHYub3B0aW9ucy5maW5kKChvcCkgPT4gb3AudmFsdWUgPT09IHRoaXMub3JpZ2luYWxEdG8udmFsdWUpO1xuICAgIGlmICghbWF5YmVPcHRpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5fdmFsdWUgPSBtYXliZU9wdGlvbjtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHRvSnNvbigpOiBCdWlsZGVyQ29uZGl0aW9uRHRvIHtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5uYW1lO1xuICAgIGNvbnN0IHZhcmlhYmxlSWQgPSB0aGlzLl92YXJpYWJsZSA/IHRoaXMuX3ZhcmlhYmxlLnZhcklkIDogXCJcIjtcbiAgICBjb25zdCBvcGVyYXRvciA9IHRoaXMuX29wZXJhdG9yID8gdGhpcy5fb3BlcmF0b3IgOiBcIlwiO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fdmFsdWUgPyB0aGlzLl92YWx1ZS52YWx1ZSA6IFwiXCI7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtpbmQ6IFwiY29uZGl0aW9uXCIsXG4gICAgICBuYW1lLFxuICAgICAgb3BlcmF0b3IsXG4gICAgICB2YXJpYWJsZUlkLFxuICAgICAgdmFsdWUsXG4gICAgfTtcbiAgfVxufVxuIiwgImltcG9ydCB7IEJ1aWxkZXJDb25kaXRpb24sIHR5cGUgQnVpbGRlckNvbmRpdGlvbkR0byB9IGZyb20gXCIuL0J1aWxkZXItY29uZGl0aW9uXCI7XG5pbXBvcnQgeyBCdWlsZGVyT2JqZWN0IH0gZnJvbSBcIi4uLy4uL0J1aWxkZXJPYmplY3RcIjtcbmltcG9ydCB0eXBlIHsgQnVpbGRlclZhcmlhYmxlIH0gZnJvbSBcIi4uL1J1bGVWYXJpYWJsZVwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcblxuY29uc3QgQ29uZGl0aW9uR3JvdXBUeXBlID0ge1xuICBhbGw6IHRydWUsXG4gIGFueTogdHJ1ZSxcbiAgY291bnQ6IHRydWUsXG59O1xuXG5leHBvcnQgdHlwZSBDb25kaXRpb25Hcm91cFR5cGUgPSBrZXlvZiB0eXBlb2YgQ29uZGl0aW9uR3JvdXBUeXBlO1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZGVyQ29uZGl0aW9uR3JvdXBEdG8ge1xuICByZWFkb25seSBraW5kOiBcImNvbmRpdGlvbi1ncm91cFwiO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvdW50PzogbnVtYmVyO1xuICByZWFkb25seSB0eXBlOiBDb25kaXRpb25Hcm91cFR5cGU7XG4gIHJlYWRvbmx5IGNvbmRpdGlvbnM6IFJlYWRvbmx5QXJyYXk8QnVpbGRlckNvbmRpdGlvbkR0bz47XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZGVyQ29uZGl0aW9uR3JvdXAgZXh0ZW5kcyBCdWlsZGVyT2JqZWN0PFwiYnVpbGRlci1jb25kaXRpb24tZ3JvdXBcIiwgQnVpbGRlckNvbmRpdGlvbkdyb3VwRHRvPiB7XG4gIHN0YXRpYyByZWFkb25seSBpc0NvbmRpdGlvbkdyb3VwVHlwZSA9ICh2YWx1ZTogc3RyaW5nIHwgc3ltYm9sKTogdmFsdWUgaXMgQ29uZGl0aW9uR3JvdXBUeXBlID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkVmFsdWVzID0gT2JqZWN0LmtleXMoQ29uZGl0aW9uR3JvdXBUeXBlKTtcbiAgICByZXR1cm4gdmFsaWRWYWx1ZXMuaW5jbHVkZXModmFsdWUpO1xuICB9O1xuXG4gIHJlYWRvbmx5IG9iamVjdFR5cGU6IFwiYnVpbGRlci1jb25kaXRpb24tZ3JvdXBcIiA9IFwiYnVpbGRlci1jb25kaXRpb24tZ3JvdXBcIjtcbiAgcHJpdmF0ZSBfdHlwZTogQ29uZGl0aW9uR3JvdXBUeXBlO1xuICBuYW1lID0gXCJcIjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29uZGl0aW9uczogQXJyYXk8QnVpbGRlckNvbmRpdGlvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZhcmlhYmxlTGlzdDogUmVhZG9ubHlBcnJheTxCdWlsZGVyVmFyaWFibGU+O1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZnJvbUR0byA9IChkdG86IEJ1aWxkZXJDb25kaXRpb25Hcm91cER0bywgdmFyaWFibGVMaXN0OiBSZWFkb25seUFycmF5PEJ1aWxkZXJWYXJpYWJsZT4pID0+IHtcbiAgICByZXR1cm4gbmV3IEJ1aWxkZXJDb25kaXRpb25Hcm91cChkdG8sIHZhcmlhYmxlTGlzdCk7XG4gIH07XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihkdG86IEJ1aWxkZXJDb25kaXRpb25Hcm91cER0bywgdmFyaWFibGVMaXN0OiBSZWFkb25seUFycmF5PEJ1aWxkZXJWYXJpYWJsZT4pIHtcbiAgICBzdXBlcihkdG8pO1xuICAgIHRoaXMubmFtZSA9IGR0by5uYW1lO1xuICAgIHRoaXMuX3R5cGUgPSBkdG8udHlwZTtcbiAgICBjb25zdCBjb25kaXRpb25MaXN0ID0gQXJyYXkuaXNBcnJheShkdG8uY29uZGl0aW9ucykgPyBkdG8uY29uZGl0aW9ucyA6IFtdO1xuICAgIHRoaXMuX2NvbmRpdGlvbnMgPSBjb25kaXRpb25MaXN0Lm1hcCgoZHRvKSA9PiBCdWlsZGVyQ29uZGl0aW9uLmZyb21EdG8oZHRvLCB2YXJpYWJsZUxpc3QpKTtcbiAgICB0aGlzLl92YXJpYWJsZUxpc3QgPSB2YXJpYWJsZUxpc3Q7XG4gIH1cbiAgZ2V0IGNvbmRpdGlvbnMoKTogUmVhZG9ubHlBcnJheTxCdWlsZGVyQ29uZGl0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmRpdGlvbnM7XG4gIH1cblxuICBnZXQgY29uZGl0aW9uQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmRpdGlvbnMubGVuZ3RoO1xuICB9XG5cbiAgYWRkQ29uZGl0aW9uKCk6IEJ1aWxkZXJDb25kaXRpb24ge1xuICAgIGNvbnN0IG5ld0NvbmRpdGlvbnMgPSBCdWlsZGVyQ29uZGl0aW9uLmNyZWF0ZSh0aGlzLl92YXJpYWJsZUxpc3QpO1xuICAgIHRoaXMuX2NvbmRpdGlvbnMucHVzaChuZXdDb25kaXRpb25zKTtcbiAgICByZXR1cm4gbmV3Q29uZGl0aW9ucztcbiAgfVxuXG4gIHJlbW92ZUNvbmRpdGlvbihjb25kaXRpb246IEJ1aWxkZXJDb25kaXRpb24pOiBib29sZWFuIHtcbiAgICAvLyB0aGlzLl9jb25kaXRpb25zLlxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fY29uZGl0aW9ucy5pbmRleE9mKGNvbmRpdGlvbik7XG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLl9jb25kaXRpb25zLnNwbGljZShpbmRleCwgMSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjbG9uZSgpOiBCdWlsZGVyQ29uZGl0aW9uR3JvdXBEdG8ge1xuICAgIHJldHVybiB0aGlzLnRvSnNvbigpO1xuICB9XG5cbiAgdG9Kc29uKCk6IEJ1aWxkZXJDb25kaXRpb25Hcm91cER0byB7XG4gICAgY29uc3QgY29uZGl0aW9uczogUmVhZG9ubHlBcnJheTxCdWlsZGVyQ29uZGl0aW9uRHRvPiA9IFsuLi50aGlzLl9jb25kaXRpb25zLm1hcCgoYykgPT4gYy50b0pzb24oKSldO1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBjb25kaXRpb25zLFxuICAgICAgdHlwZTogdGhpcy5fdHlwZSxcbiAgICAgIGtpbmQ6IFwiY29uZGl0aW9uLWdyb3VwXCIsXG4gICAgfTtcbiAgfVxuXG4gIHRvRW5naW5lQ29uZGl0aW9uQ29tcGxleChtb2R1bGVQcmVmaXg6IHN0cmluZyk6IENvbmRpdGlvbi5Db21wbGV4IHwgZmFsc2Uge1xuICAgIGNvbnN0IGNvbXA6IENvbmRpdGlvbi5Db21wbGV4ID0ge1xuICAgICAga2luZDogXCJjb21wbGV4LWNvbmRpdGlvblwiLFxuICAgICAgYWxsOiBbXSxcbiAgICAgIHNvbWU6IFtdLFxuICAgICAgbmFtZTogXCJcIixcbiAgICB9O1xuICAgIGNvbnN0IGNvbmRpdGlvbnM6IENvbmRpdGlvbi5TaW1wbGVbXSA9IFtdO1xuICAgIHRoaXMuY29uZGl0aW9ucy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICBjb25zdCBtYXliZVNpbXBsZSA9IGMudG9FbmdpbmVDb25kaXRpb24obW9kdWxlUHJlZml4KTtcbiAgICAgIGlmIChtYXliZVNpbXBsZSkge1xuICAgICAgICBjb25kaXRpb25zLnB1c2gobWF5YmVTaW1wbGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0aGlzLl90eXBlID09PSBcImFsbFwiKSB7XG4gICAgICByZXR1cm4geyAuLi5jb21wLCBhbGw6IGNvbmRpdGlvbnMgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3R5cGUgPT09IFwiYW55XCIpIHtcbiAgICAgIHJldHVybiB7IC4uLmNvbXAsIHNvbWU6IGNvbmRpdGlvbnMgfTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhcIklOVkFMSUQgQ09NUExFWCBDT05ESVRJT04uIFRPRE8gSU1QTEVNRU5UIHJhbmdlLCBhbmQgY291bnQuXCIpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGdldCB0eXBlKCk6IENvbmRpdGlvbkdyb3VwVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3R5cGU7XG4gIH1cbiAgc2V0IHR5cGUoY29uZGl0aW9uR3JvdXBUeXBlOiBDb25kaXRpb25Hcm91cFR5cGUpIHtcbiAgICBpZiAoQnVpbGRlckNvbmRpdGlvbkdyb3VwLmlzQ29uZGl0aW9uR3JvdXBUeXBlKGNvbmRpdGlvbkdyb3VwVHlwZSkpIHtcbiAgICAgIHRoaXMuX3R5cGUgPSBjb25kaXRpb25Hcm91cFR5cGU7XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHsgRXhjbHVkZUJ5UGFnZUFjdGlvbiwgRXhjbHVkZUJ5VGFnQWN0aW9uIH0gZnJvbSBcIi4vUnVsZUFjdGlvblwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTXVsdGlTZWxlY3RJdGVtPFQ+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9pc1NlbGVjdGVkSW5pdGlhbGx5OiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3NlbGVjdExhYmVsO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Rvb2xUaXA7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfc2VhcmNoU3RyaW5nO1xuICAgIHB1YmxpYyBpc1NlbGVjdGVkOiBib29sZWFuO1xuICAgIGdldCBzZWxlY3RMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0TGFiZWw7XG4gICAgfVxuICAgIGdldCB0b29sdGlwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdG9vbFRpcDtcbiAgICB9XG5cbiAgICBnZXQgc2VhcmNoU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoU3RyaW5nO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocmVhZG9ubHkgZGF0YTogVCwgaXNTZWxlY3RlZDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9pc1NlbGVjdGVkSW5pdGlhbGx5ID0gaXNTZWxlY3RlZDtcbiAgICAgICAgdGhpcy5pc1NlbGVjdGVkID0gaXNTZWxlY3RlZDtcbiAgICAgICAgdGhpcy5fc2VhcmNoU3RyaW5nID0gdGhpcy5nZXRTZWFyY2hTdHJpbmcoKTtcbiAgICAgICAgdGhpcy5fdG9vbFRpcCA9IHRoaXMuZ2V0VG9vbHRpcCgpO1xuICAgICAgICB0aGlzLl9zZWxlY3RMYWJlbCA9IHRoaXMuZ2V0U2VsZWN0TGFiZWwoKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFNlbGVjdExhYmVsKCk6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0VG9vbHRpcCgpOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFNlYXJjaFN0cmluZygpOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBFeGNsdWRlQnlUYWdTZWxlY3RJdGVtIGV4dGVuZHMgTXVsdGlTZWxlY3RJdGVtPEV4Y2x1ZGVCeVRhZ0FjdGlvbj4ge1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgY3JlYXRlID0gKHRhZ0RhdGE6IEV4Y2x1ZGVCeVRhZ0FjdGlvbiwgaXNTZWxlY3RlZDogYm9vbGVhbikgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IEV4Y2x1ZGVCeVRhZ1NlbGVjdEl0ZW0odGFnRGF0YSwgaXNTZWxlY3RlZCk7XG4gICAgfTtcbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoZGF0YTogRXhjbHVkZUJ5VGFnQWN0aW9uLCBpc1NlbGVjdGVkOiBib29sZWFuKSB7XG4gICAgICAgIHN1cGVyKGRhdGEsIGlzU2VsZWN0ZWQpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgZ2V0U2VhcmNoU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEudGFnO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRTZWxlY3RMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLnRhZyArIFwiIChcIiArIHRoaXMuZGF0YS5wYWdlQ291bnQgKyBcIilcIjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0VG9vbHRpcCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLnRhZyArIFwiICAodXNlZCBpbiBcIiArIHRoaXMuZGF0YS5wYWdlQ291bnQgKyBcIiBwYWdlcylcIjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFeGNsdWRlQnlQYWdlSWRTZWxlY3RJdGVtIGV4dGVuZHMgTXVsdGlTZWxlY3RJdGVtPEV4Y2x1ZGVCeVBhZ2VBY3Rpb24+IHtcbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZSA9IChydWxlQWN0aW9uUGFnZTogRXhjbHVkZUJ5UGFnZUFjdGlvbiwgaXNTZWxlY3RlZDogYm9vbGVhbikgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IEV4Y2x1ZGVCeVBhZ2VJZFNlbGVjdEl0ZW0ocnVsZUFjdGlvblBhZ2UsIGlzU2VsZWN0ZWQpO1xuICAgIH07XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoZGF0YTogRXhjbHVkZUJ5UGFnZUFjdGlvbiwgaXNTZWxlY3RlZDogYm9vbGVhbikge1xuICAgICAgICBzdXBlcihkYXRhLCBpc1NlbGVjdGVkKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIGdldFNlYXJjaFN0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLnBhZ2VJZCArIHRoaXMuZGF0YS5tYWluVGV4dDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0U2VsZWN0TGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5wYWdlSWQgKyBcIiAoXCIgKyB0aGlzLmRhdGEucGFnZU51bWJlciArIFwiKVwiO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEubWFpblRleHQ7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgUnVsZUlucHV0IH0gZnJvbSBcIi4vUnVsZUlucHV0XCI7XG5pbXBvcnQgeyBFeGNsdWRlQnlUYWdTZWxlY3RJdGVtIH0gZnJvbSBcIi4vbXVsdGktc2VsZWN0LWl0ZW1cIjtcbmltcG9ydCB7IEV4Y2x1ZGVCeVRhZ0FjdGlvbiB9IGZyb20gXCIuL1J1bGVBY3Rpb25cIjtcblxuZXhwb3J0IGNsYXNzIFRhZ0FjdGlvbk1hbmFnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbml0aWFsU2VsZWN0aW9uOiBTZXQ8c3RyaW5nPjtcbiAgcmVhZG9ubHkgc2VsZWN0SXRlbXM6IFJlYWRvbmx5QXJyYXk8RXhjbHVkZUJ5VGFnU2VsZWN0SXRlbT47XG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IHZhbGlkT3B0aW9uczogUnVsZUlucHV0W1wiX3RhZ0FjdGlvbnNcIl0sXG4gICAgcmVhZG9ubHkgaW5pdGlhbFNlbGVjdGlvbjogUmVhZG9ubHlBcnJheTxzdHJpbmc+LFxuICApIHtcbiAgICB0aGlzLl9pbml0aWFsU2VsZWN0aW9uID0gbmV3IFNldChbLi4uaW5pdGlhbFNlbGVjdGlvbl0pO1xuICAgIHRoaXMuc2VsZWN0SXRlbXMgPSB2YWxpZE9wdGlvbnMubWFwKChvcHQpID0+IHtcbiAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLl9pbml0aWFsU2VsZWN0aW9uLmhhcyhvcHQudGFnKTtcbiAgICAgIHJldHVybiBFeGNsdWRlQnlUYWdTZWxlY3RJdGVtLmNyZWF0ZShvcHQsIGlzU2VsZWN0ZWQpO1xuICAgIH0pO1xuICB9XG4gIGdldEN1cnJlbnRTZWxlY3Rpb24oKTogUmVhZG9ubHlBcnJheTxzdHJpbmc+IHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0SXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmlzU2VsZWN0ZWQpLm1hcCgoaXRtKSA9PiBpdG0uZGF0YS50YWcpO1xuICAgIHJldHVybiBzZWxlY3RlZDtcbiAgfVxuXG4gIGdldEVuZ2luZUFjdGlvbnMoKTogUmVhZG9ubHlBcnJheTxFeGNsdWRlQnlUYWdBY3Rpb24+IHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0SXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmlzU2VsZWN0ZWQpO1xuICAgIGNvbnN0IHRhZ0FjdGlvbnMgPSBzZWxlY3RlZC5tYXAoKHMpID0+IHMuZGF0YSk7XG4gICAgcmV0dXJuIFsuLi50YWdBY3Rpb25zXTtcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgUnVsZUlucHV0IH0gZnJvbSBcIi4vUnVsZUlucHV0XCI7XG5pbXBvcnQgeyBFeGNsdWRlQnlQYWdlSWRTZWxlY3RJdGVtIH0gZnJvbSBcIi4vbXVsdGktc2VsZWN0LWl0ZW1cIjtcbmltcG9ydCB7IEV4Y2x1ZGVCeVBhZ2VBY3Rpb24gfSBmcm9tIFwiLi9SdWxlQWN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBQYWdlQWN0aW9uTWFuYWdlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2luaXRpYWxTZWxlY3Rpb246IFNldDxzdHJpbmc+O1xuICByZWFkb25seSBzZWxlY3RJdGVtczogUmVhZG9ubHlBcnJheTxFeGNsdWRlQnlQYWdlSWRTZWxlY3RJdGVtPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSB2YWxpZE9wdGlvbnM6IFJ1bGVJbnB1dFtcIl9wYWdlSWRBY3Rpb25zXCJdLFxuICAgIHJlYWRvbmx5IGluaXRpYWxTZWxlY3Rpb246IFJlYWRvbmx5QXJyYXk8c3RyaW5nPixcbiAgKSB7XG4gICAgdGhpcy5faW5pdGlhbFNlbGVjdGlvbiA9IG5ldyBTZXQoWy4uLmluaXRpYWxTZWxlY3Rpb25dKTtcbiAgICB0aGlzLnNlbGVjdEl0ZW1zID0gdmFsaWRPcHRpb25zLm1hcCgob3B0KSA9PiB7XG4gICAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5faW5pdGlhbFNlbGVjdGlvbi5oYXMob3B0LnBhZ2VJZCk7XG4gICAgICByZXR1cm4gRXhjbHVkZUJ5UGFnZUlkU2VsZWN0SXRlbS5jcmVhdGUob3B0LCBpc1NlbGVjdGVkKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEN1cnJlbnRTZWxlY3Rpb24oKTogUmVhZG9ubHlBcnJheTxzdHJpbmc+IHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0SXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmlzU2VsZWN0ZWQpLm1hcCgoaXRtKSA9PiBpdG0uZGF0YS5wYWdlSWQpO1xuICAgIHJldHVybiBzZWxlY3RlZDtcbiAgfVxuXG4gIGdldEVuZ2luZUFjdGlvbigpOiBSZWFkb25seUFycmF5PEV4Y2x1ZGVCeVBhZ2VBY3Rpb24+IHtcbiAgICBjb25zdCBzZWxlY3RJdGVtcyA9IHRoaXMuc2VsZWN0SXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmlzU2VsZWN0ZWQpO1xuICAgIGNvbnN0IGFjdGlvbnMgPSBzZWxlY3RJdGVtcy5tYXAoKGl0ZW0pID0+IGl0ZW0uZGF0YSk7XG4gICAgcmV0dXJuIFsuLi5hY3Rpb25zXTtcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgUnVsZUlucHV0IH0gZnJvbSBcIi4vUnVsZUlucHV0XCI7XG5pbXBvcnQgeyBKdW1wVG9QYWdlU2VsZWN0SXRlbSB9IGZyb20gXCIuL1NpbmdsZVNlbGVjdEl0ZW1cIjtcblxuZXhwb3J0IGNsYXNzIEp1bXBUb0FjdGlvbk1hbmFnZXIge1xuICByZWFkb25seSBvcHRpb25zOiBSZWFkb25seUFycmF5PEp1bXBUb1BhZ2VTZWxlY3RJdGVtPjtcbiAgcHJpdmF0ZSBfc2VsZWN0ZWQ6IEp1bXBUb1BhZ2VTZWxlY3RJdGVtIHwgZmFsc2U7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmFsaWRPcHRpb25zOiBSdWxlSW5wdXRbXCJfanVtcEFjdGlvbnNcIl0sXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbml0aWFsU2VsZWN0aW9uOiBzdHJpbmcgfCBmYWxzZSB8IHVuZGVmaW5lZCxcbiAgKSB7XG4gICAgdGhpcy5vcHRpb25zID0gdmFsaWRPcHRpb25zLm1hcChKdW1wVG9QYWdlU2VsZWN0SXRlbS5jcmVhdGUpO1xuICAgIHRoaXMuX3NlbGVjdGVkID0gdGhpcy5maW5kU2VsZWN0ZWQoaW5pdGlhbFNlbGVjdGlvbik7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkKCk6IEp1bXBUb1BhZ2VTZWxlY3RJdGVtIHwgZmFsc2Uge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZDtcbiAgfVxuICBzZXQgc2VsZWN0ZWQoc2VsZWN0ZWQ6IEp1bXBUb1BhZ2VTZWxlY3RJdGVtIHwgZmFsc2UpIHtcbiAgICB0aGlzLl9zZWxlY3RlZCA9IHRoaXMuZmluZFNlbGVjdGVkKHNlbGVjdGVkKTtcbiAgfVxuICBnZXRTZWxlY3RlZFBhZ2VJZCgpOiBzdHJpbmcgfCBmYWxzZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkID8gdGhpcy5fc2VsZWN0ZWQuZGF0YS5wYWdlSWQgOiBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGZpbmRTZWxlY3RlZCh2YWx1ZTogdW5rbm93bik6IEp1bXBUb1BhZ2VTZWxlY3RJdGVtIHwgZmFsc2Uge1xuICAgIGlmICghdmFsdWUpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBKdW1wVG9QYWdlU2VsZWN0SXRlbSkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5maW5kKCh2KSA9PiB2ID09PSB2YWx1ZSkgfHwgZmFsc2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZmluZCgodikgPT4gdi5kYXRhLnBhZ2VJZCA9PT0gdmFsdWUpIHx8IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBCdWlsZGVyQ29uZGl0aW9uLCB0eXBlIEJ1aWxkZXJDb25kaXRpb25EdG8gfSBmcm9tIFwiLi9jb25kaXRpb24vQnVpbGRlci1jb25kaXRpb25cIjtcbmltcG9ydCB7XG4gIEJ1aWxkZXJDb25kaXRpb25Hcm91cCxcbiAgdHlwZSBCdWlsZGVyQ29uZGl0aW9uR3JvdXBEdG8sXG4gIHR5cGUgQ29uZGl0aW9uR3JvdXBUeXBlLFxufSBmcm9tIFwiLi9jb25kaXRpb24vQnVpbGRlci1jb25kaXRpb24tZ3JvdXBcIjtcbmltcG9ydCB0eXBlIHsgUnVsZUlucHV0IH0gZnJvbSBcIi4vUnVsZUlucHV0XCI7XG5pbXBvcnQgeyBCdWlsZGVyT2JqZWN0IH0gZnJvbSBcIi4uL0J1aWxkZXJPYmplY3RcIjtcbmltcG9ydCB7IFRhZ0FjdGlvbk1hbmFnZXIgfSBmcm9tIFwiLi90YWctYWN0aW9uLW1hbmFnZXJcIjtcbmltcG9ydCB7IFBhZ2VBY3Rpb25NYW5hZ2VyIH0gZnJvbSBcIi4vcGFnZS1hY3Rpb24tbWFuYWdlclwiO1xuaW1wb3J0IHsgSnVtcFRvQWN0aW9uTWFuYWdlciB9IGZyb20gXCIuL2p1bXAtdG8tYWN0aW9uLW1hbmFnZXJcIjtcbmltcG9ydCB7IENvbmRpdGlvbiwgUGFnZVF1ZUNvbW1hbmQsIFBhZ2VRdWVSdWxlcyB9IGZyb20gXCJAbWVkaWEtcXVlc3QvZW5naW5lXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlclJ1bGVEdG8ge1xuICByZWFkb25seSB0eXBlOiBDb25kaXRpb25Hcm91cFR5cGU7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgY29uZGl0aW9uczogUmVhZG9ubHlBcnJheTxCdWlsZGVyQ29uZGl0aW9uRHRvIHwgQnVpbGRlckNvbmRpdGlvbkdyb3VwRHRvPjtcbiAgcmVhZG9ubHkgZXhjbHVkZVRhZ3M6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPjtcbiAgcmVhZG9ubHkgZXhjbHVkZVBhZ2VzOiBSZWFkb25seUFycmF5PHN0cmluZz47XG4gIHJlYWRvbmx5IGp1bXBUb1BhZ2U6IHN0cmluZyB8IGZhbHNlO1xufVxuZXhwb3J0IGNsYXNzIEJ1aWxkZXJSdWxlIGV4dGVuZHMgQnVpbGRlck9iamVjdDxcImJ1aWxkZXItcnVsZVwiLCBCdWlsZGVyUnVsZUR0bz4ge1xuICByZWFkb25seSBvYmplY3RUeXBlOiBcImJ1aWxkZXItcnVsZVwiID0gXCJidWlsZGVyLXJ1bGVcIjtcbiAgcHJpdmF0ZSBfdHlwZTogQ29uZGl0aW9uR3JvdXBUeXBlID0gXCJhbGxcIjtcbiAgcHVibGljIG5hbWUgPSBcIlJ1bGUgbmFtZVwiO1xuICAvLyBwdWJsaWMgY291bnROdW1iZXIgPSAxO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb25kaXRpb25zOiBBcnJheTxCdWlsZGVyQ29uZGl0aW9uIHwgQnVpbGRlckNvbmRpdGlvbkdyb3VwPiA9IFtdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RhZ0FjdGlvbk1hbmFnZXI6IFRhZ0FjdGlvbk1hbmFnZXI7XG4gIHByaXZhdGUgX3BhZ2VBY3Rpb25NYW5hZ2VyOiBQYWdlQWN0aW9uTWFuYWdlcjtcbiAgcmVhZG9ubHkganVtcFRvQWN0aW9uTWFuYWdlcjogSnVtcFRvQWN0aW9uTWFuYWdlcjtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBmcm9tRHRvID0gKGR0bzogQnVpbGRlclJ1bGVEdG8sIGlucHV0OiBSdWxlSW5wdXQpOiBCdWlsZGVyUnVsZSA9PiB7XG4gICAgcmV0dXJuIG5ldyBCdWlsZGVyUnVsZShkdG8sIGlucHV0KTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBkdG86IEJ1aWxkZXJSdWxlRHRvLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3J1bGVJbnB1dDogUnVsZUlucHV0LFxuICApIHtcbiAgICBzdXBlcihkdG8pO1xuICAgIGNvbnN0IGNvbmRpdGlvbklucHV0ID0gdGhpcy5fcnVsZUlucHV0LmdldENvbmRpdGlvbklucHV0KCk7XG4gICAgdGhpcy5uYW1lID0gZHRvLm5hbWUgPz8gXCJcIjtcbiAgICB0aGlzLl90eXBlID0gZHRvLnR5cGUgPz8gXCJhbnlcIjtcbiAgICB0aGlzLl9jb25kaXRpb25zID0gZHRvLmNvbmRpdGlvbnMucmVkdWNlPEFycmF5PEJ1aWxkZXJDb25kaXRpb24gfCBCdWlsZGVyQ29uZGl0aW9uR3JvdXA+PigoYWNjLCBjdXJyKSA9PiB7XG4gICAgICBpZiAoY3Vyci5raW5kID09PSBcImNvbmRpdGlvblwiKSB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IEJ1aWxkZXJDb25kaXRpb24uZnJvbUR0byhjdXJyLCBjb25kaXRpb25JbnB1dCk7XG4gICAgICAgIGFjYy5wdXNoKGNvbmRpdGlvbik7XG4gICAgICB9XG4gICAgICBpZiAoY3Vyci5raW5kID09PSBcImNvbmRpdGlvbi1ncm91cFwiKSB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbkdyb3VwID0gQnVpbGRlckNvbmRpdGlvbkdyb3VwLmZyb21EdG8oY3VyciwgY29uZGl0aW9uSW5wdXQpO1xuICAgICAgICBhY2MucHVzaChjb25kaXRpb25Hcm91cCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcbiAgICAvLyBUT0RPIENIRUNLIFdJVEggQ1VSUkVOVCBPUFRJT05TLlxuICAgIHRoaXMuX3BhZ2VBY3Rpb25NYW5hZ2VyID0gbmV3IFBhZ2VBY3Rpb25NYW5hZ2VyKF9ydWxlSW5wdXQuZXhjbHVkZUJ5UGFnZUlkQWN0aW9ucywgZHRvLmV4Y2x1ZGVQYWdlcyk7XG4gICAgLy8gdGhpcy5leGNsdWRlQnlQYWdlSWREdG9MaXN0LnB1c2goLi4uZHRvLmV4Y2x1ZGVQYWdlcyk7XG4gICAgdGhpcy5fdGFnQWN0aW9uTWFuYWdlciA9IG5ldyBUYWdBY3Rpb25NYW5hZ2VyKF9ydWxlSW5wdXQuZXhjbHVkZUJ5VGFnQWN0aW9ucywgZHRvLmV4Y2x1ZGVUYWdzKTtcblxuICAgIHRoaXMuanVtcFRvQWN0aW9uTWFuYWdlciA9IG5ldyBKdW1wVG9BY3Rpb25NYW5hZ2VyKF9ydWxlSW5wdXQuanVtcFRvUGFnZUFjdGlvbnMsIGR0by5qdW1wVG9QYWdlKTtcbiAgfVxuXG4gIGdldCBjb25kaXRpb25zKCk6IFJlYWRvbmx5QXJyYXk8QnVpbGRlckNvbmRpdGlvbkdyb3VwIHwgQnVpbGRlckNvbmRpdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLl9jb25kaXRpb25zO1xuICB9XG5cbiAgZ2V0VGFnQWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fdGFnQWN0aW9uTWFuYWdlci5zZWxlY3RJdGVtcztcbiAgfVxuXG4gIGdldFZhbGlkUGFnZUFjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VBY3Rpb25NYW5hZ2VyLnNlbGVjdEl0ZW1zO1xuICB9XG5cbiAgZ2V0IGNvbmRpdGlvbkNvdW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jb25kaXRpb25zLmxlbmd0aDtcbiAgfVxuXG4gIHNldCB0eXBlKHR5cGU6IENvbmRpdGlvbkdyb3VwVHlwZSkge1xuICAgIGlmIChCdWlsZGVyQ29uZGl0aW9uR3JvdXAuaXNDb25kaXRpb25Hcm91cFR5cGUodHlwZSkpIHtcbiAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiB0aGlzLl90eXBlO1xuICB9XG5cbiAgZGVsZXRlQ29uZGl0aW9uKGNvbmRpdGlvbjogQnVpbGRlckNvbmRpdGlvbiB8IEJ1aWxkZXJDb25kaXRpb25Hcm91cCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fY29uZGl0aW9ucy5pbmRleE9mKGNvbmRpdGlvbik7XG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLl9jb25kaXRpb25zLnNwbGljZShpbmRleCwgMSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhZGRDb25kaXRpb24oKTogQnVpbGRlckNvbmRpdGlvbiB7XG4gICAgY29uc3QgY29uZGl0aW9uID0gQnVpbGRlckNvbmRpdGlvbi5jcmVhdGUodGhpcy5fcnVsZUlucHV0LmdldENvbmRpdGlvbklucHV0KCkpO1xuICAgIHRoaXMuX2NvbmRpdGlvbnMucHVzaChjb25kaXRpb24pO1xuICAgIHJldHVybiBjb25kaXRpb247XG4gIH1cblxuICBhZGRDb25kaXRpb25Hcm91cCgpOiBCdWlsZGVyQ29uZGl0aW9uR3JvdXAge1xuICAgIGNvbnN0IGR0bzogQnVpbGRlckNvbmRpdGlvbkdyb3VwRHRvID0ge1xuICAgICAga2luZDogXCJjb25kaXRpb24tZ3JvdXBcIixcbiAgICAgIG5hbWU6IFwiXCIsXG4gICAgICB0eXBlOiBcImFsbFwiLFxuICAgICAgY29uZGl0aW9uczogW10sXG4gICAgfTtcbiAgICBjb25zdCBuZXdHcm91cCA9IEJ1aWxkZXJDb25kaXRpb25Hcm91cC5mcm9tRHRvKGR0bywgdGhpcy5fcnVsZUlucHV0LnF1ZXN0aW9uVmFycyk7XG4gICAgdGhpcy5fY29uZGl0aW9ucy5wdXNoKG5ld0dyb3VwKTtcbiAgICByZXR1cm4gbmV3R3JvdXA7XG4gIH1cblxuICBjbG9uZSgpOiBCdWlsZGVyUnVsZUR0byB7XG4gICAgcmV0dXJuIHRoaXMudG9Kc29uKCk7XG4gIH1cblxuICB0b0pzb24oKTogQnVpbGRlclJ1bGVEdG8ge1xuICAgIGNvbnN0IGNvbmRpdGlvbnMgPSB0aGlzLl9jb25kaXRpb25zLm1hcCgoYykgPT4gYy50b0pzb24oKSk7XG4gICAgY29uc3QgZXhjbHVkZVBhZ2VzID0gdGhpcy5fcGFnZUFjdGlvbk1hbmFnZXIuZ2V0Q3VycmVudFNlbGVjdGlvbigpO1xuICAgIGNvbnN0IGV4Y2x1ZGVUYWdzID0gdGhpcy5fdGFnQWN0aW9uTWFuYWdlci5nZXRDdXJyZW50U2VsZWN0aW9uKCk7XG4gICAgY29uc3QganVtcFRvUGFnZSA9IHRoaXMuanVtcFRvQWN0aW9uTWFuYWdlci5nZXRTZWxlY3RlZFBhZ2VJZCgpO1xuICAgIGNvbnN0IGR0bzogQnVpbGRlclJ1bGVEdG8gPSB7XG4gICAgICB0eXBlOiB0aGlzLl90eXBlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgY29uZGl0aW9ucyxcbiAgICAgIGV4Y2x1ZGVQYWdlcyxcbiAgICAgIGp1bXBUb1BhZ2UsXG4gICAgICBleGNsdWRlVGFncyxcbiAgICB9O1xuICAgIHJldHVybiBkdG87XG4gIH1cbiAgdG9FbmdpbmVSdWxlKG1vZHVsZVByZWZpeDogc3RyaW5nKTogUGFnZVF1ZVJ1bGVzIHtcbiAgICBjb25zdCBjb25kaXRpb25zOiBDb25kaXRpb25bXSA9IFtdO1xuICAgIHRoaXMuX2NvbmRpdGlvbnMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgaWYgKGMpIHtcbiAgICAgICAgaWYgKGMgaW5zdGFuY2VvZiBCdWlsZGVyQ29uZGl0aW9uKSB7XG4gICAgICAgICAgY29uc3Qgc2ltcGxlQ29uZGl0aW9uID0gYy50b0VuZ2luZUNvbmRpdGlvbihtb2R1bGVQcmVmaXgpO1xuICAgICAgICAgIGlmIChzaW1wbGVDb25kaXRpb24pIHtcbiAgICAgICAgICAgIGNvbmRpdGlvbnMucHVzaChzaW1wbGVDb25kaXRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYyBpbnN0YW5jZW9mIEJ1aWxkZXJDb25kaXRpb25Hcm91cCkge1xuICAgICAgICAgIGNvbnN0IGNvbXBsZXhDb25kaXRpb24gPSBjLnRvRW5naW5lQ29uZGl0aW9uQ29tcGxleChtb2R1bGVQcmVmaXgpO1xuICAgICAgICAgIGlmIChjb21wbGV4Q29uZGl0aW9uKSBjb25kaXRpb25zLnB1c2goY29tcGxleENvbmRpdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBsZXQgYWxsOiBDb25kaXRpb25bXSA9IFtdO1xuICAgIGxldCBzb21lOiBDb25kaXRpb25bXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gXCJhbGxcIikge1xuICAgICAgYWxsID0gWy4uLmNvbmRpdGlvbnNdO1xuICAgIH1cbiAgICBjb25zdCBwYWdlUXVlQ29tbWFuZHM6IEFycmF5PFBhZ2VRdWVDb21tYW5kPiA9IFtdO1xuICAgIGNvbnN0IG1heWJlSnVtcFRvUGFnZSA9IHRoaXMuanVtcFRvQWN0aW9uTWFuYWdlci5zZWxlY3RlZDtcbiAgICBpZiAobWF5YmVKdW1wVG9QYWdlKSB7XG4gICAgICBjb25zdCBqdW1wQ29tbWFuZDogUGFnZVF1ZUNvbW1hbmQgPSB7XG4gICAgICAgIGtpbmQ6IFwiUEFHRV9RVUVfSlVNUF9UT19QQUdFX0NPTU1BTkRcIixcbiAgICAgICAgdGFyZ2V0OiBcIlBBR0VfUVVFXCIsXG4gICAgICAgIHRhcmdldElkOiBcIlBBR0VfUVVFXCIsXG4gICAgICAgIHBheWxvYWQ6IHsgcGFnZUlkOiBtYXliZUp1bXBUb1BhZ2UuZGF0YS5wYWdlSWQgfSxcbiAgICAgIH07XG4gICAgICBwYWdlUXVlQ29tbWFuZHMucHVzaChqdW1wQ29tbWFuZCk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhjbHVkZVBhZ2VCeUlkTGlzdCA9IHRoaXMuX3BhZ2VBY3Rpb25NYW5hZ2VyLmdldEVuZ2luZUFjdGlvbigpLm1hcCgoYSkgPT4gYS5wYWdlSWQpO1xuICAgIGlmIChleGNsdWRlUGFnZUJ5SWRMaXN0Lmxlbmd0aCkge1xuICAgICAgY29uc3QgY29tbWFuZDogUGFnZVF1ZUNvbW1hbmQgPSB7XG4gICAgICAgIGtpbmQ6IFwiUEFHRV9RVUVfRVhDTFVERV9CWV9QQUdFX0lEX0NPTU1BTkRcIixcbiAgICAgICAgdGFyZ2V0OiBcIlBBR0VfUVVFXCIsXG4gICAgICAgIHRhcmdldElkOiBcIlBBR0VfUVVFXCIsXG4gICAgICAgIHBheWxvYWQ6IHsgcGFnZUlkczogWy4uLmV4Y2x1ZGVQYWdlQnlJZExpc3RdIH0sXG4gICAgICB9O1xuICAgICAgcGFnZVF1ZUNvbW1hbmRzLnB1c2goY29tbWFuZCk7XG4gICAgfVxuICAgIGNvbnN0IGV4Y2x1ZGVUYWdzID0gdGhpcy5fdGFnQWN0aW9uTWFuYWdlci5nZXRFbmdpbmVBY3Rpb25zKCkubWFwKCh0YWdBKSA9PiB0YWdBLnRhZyk7XG4gICAgaWYgKGV4Y2x1ZGVUYWdzLmxlbmd0aCkge1xuICAgICAgY29uc3QgZXhjbHVkZVRhZ3NDb21tYW5kOiBQYWdlUXVlQ29tbWFuZCA9IHtcbiAgICAgICAga2luZDogXCJQQUdFX1FVRV9FWENMVURFX0JZX1RBR19DT01NQU5EXCIsXG4gICAgICAgIHRhcmdldDogXCJQQUdFX1FVRVwiLFxuICAgICAgICB0YXJnZXRJZDogXCJQQUdFX1FVRVwiLFxuICAgICAgICBwYXlsb2FkOiB7IHRhZ0lkczogWy4uLmV4Y2x1ZGVUYWdzXSB9LFxuICAgICAgfTtcbiAgICAgIHBhZ2VRdWVDb21tYW5kcy5wdXNoKGV4Y2x1ZGVUYWdzQ29tbWFuZCk7XG4gICAgfVxuXG4gICAgY29uc3QgcnVsZTogUGFnZVF1ZVJ1bGVzID0ge1xuICAgICAgZGVzY3JpcHRpb246IHRoaXMubmFtZSxcbiAgICAgIGFsbCxcbiAgICAgIHNvbWUsXG4gICAgICBvbkZhaWx1cmU6IFtdLFxuICAgICAgb25TdWNjZXNzOiBwYWdlUXVlQ29tbWFuZHMsXG4gICAgfTtcbiAgICByZXR1cm4gcnVsZTtcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQnVpbGRlclNjaGVtYUR0byB9IGZyb20gXCIuLi9CdWlsZGVyLXNjaGVtYVwiO1xuaW1wb3J0IHsgU2NoZW1hRHRvIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0VGhlbWVDb21waWxlcjxUaGVtZVNjaGVtYT4ge1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IHRoZW1lOiBUaGVtZVNjaGVtYSkge31cbiAgYWJzdHJhY3QgY29tcGlsZShzY2hlbWE6IEJ1aWxkZXJTY2hlbWFEdG8pOiBTY2hlbWFEdG87XG59XG4iLCAiaW1wb3J0IHsgRFN0YXRlLCBCb29sZWFuU3RhdGVQcm9wZXJ0eSB9IGZyb20gXCJAbWVkaWEtcXVlc3QvZW5naW5lXCI7XG5cbmV4cG9ydCBuYW1lc3BhY2UgRFN0YXRlUHJvcHMge1xuICBleHBvcnQgY29uc3QgbWVkaWFCbG9ja2VkQnlTZXF1ZW5jZSA9IG5ldyBCb29sZWFuU3RhdGVQcm9wZXJ0eShcbiAgICBcIm1lZGlhLWJsb2NrZWQtYnktYXV0b3BsYXktc2VxdWVuY2VcIixcbiAgICBmYWxzZSxcbiAgICBcIlNob3VsZCBiZSB0cnVlIGlmIHRoZSBwYWdlIGlzIGluIGEgYXV0b3BsYXktc2VxdWVuY2UuIFRoZSBhdXRvcGxheS1zZXF1ZW5jZSB3aWxsIGFsd2F5cyBibG9jayBvdGhlciBtZWRpYS5cIixcbiAgKTtcbiAgZXhwb3J0IGNvbnN0IGlucHV0QmxvY2tpbmdCeVNlcXVlbmNlID0gbmV3IEJvb2xlYW5TdGF0ZVByb3BlcnR5KFwiaW5wdXQtYmxvY2tlZC1ieS1hdXRvcGxheS1zZXF1ZW5jZVwiLCBmYWxzZSwgXCJcIik7XG4gIGV4cG9ydCBjb25zdCBtZWRpYUJsb2NrZWRCeUF1ZGlvID0gbmV3IEJvb2xlYW5TdGF0ZVByb3BlcnR5KFwibWVkaWEtYmxvY2tlZC1ieS1hdWRpb1wiLCBmYWxzZSwgXCJcIik7XG4gIGV4cG9ydCBjb25zdCBpbnB1dEJsb2NrZWRCeUF1ZGlvID0gbmV3IEJvb2xlYW5TdGF0ZVByb3BlcnR5KFwiaW5wdXQtYmxvY2tlZC1ieS1hdWRpb1wiLCBmYWxzZSwgXCJcIik7XG4gIGV4cG9ydCBjb25zdCBtZWRpYUJsb2NrZWRCeVZpZGVvID0gbmV3IEJvb2xlYW5TdGF0ZVByb3BlcnR5KFwibWVkaWEtYmxvY2tlZC1ieS12aWRlb1wiLCBmYWxzZSwgXCJcIik7XG4gIGV4cG9ydCBjb25zdCBpbnB1dEJsb2NrZWRCeVZpZGVvID0gbmV3IEJvb2xlYW5TdGF0ZVByb3BlcnR5KFxuICAgIFwiaW5wdXQtYmxvY2tlZC1ieS12aWRlb1wiLFxuICAgIGZhbHNlLFxuICAgIFwiU2hvdWxkIGJlIHRydWUgaWYgYSB2aWRlbyBpcyBwbGF5aW5nLCBhbmQgdGhpcyB2aWRlbyBpcyBzdXBwb3NlIHRvIGJsb2NrIHVzZXItaW5wdXQuXCIsXG4gICk7XG4gIGV4cG9ydCBjb25zdCB1c2VyUGF1c2VkVmlkZW8gPSBuZXcgQm9vbGVhblN0YXRlUHJvcGVydHkoXG4gICAgXCJ1c2VyLXBhdXNlZC12aWRlb1wiLFxuICAgIGZhbHNlLFxuICAgIFwiU2hvdWxkIGJlIHRydWUgaWYgdXNlciBwYXVzZWQgdGhlIHZpZGVvIGJ5IHByZXNzaW5nIHRoZSBwYXVzZS1idXR0b24uXCIsXG4gICk7XG4gIGV4cG9ydCBjb25zdCB2aWRlb0lzUGxheWluZyA9IG5ldyBCb29sZWFuU3RhdGVQcm9wZXJ0eShcbiAgICBcInZpZGVvLWlzLXBsYXlpbmdcIixcbiAgICBmYWxzZSxcbiAgICBcIlNob3VsZCBiZSB0cnVlIGlmIGFueSB2aWRlbyBpcyBwbGF5aW5nIG9uIHRoZSBwYWdlLlwiLFxuICApO1xuICBleHBvcnQgY29uc3QgYXVkaW9Jc1BsYXlpbmcgPSBuZXcgQm9vbGVhblN0YXRlUHJvcGVydHkoXG4gICAgXCJhdWRpby1pcy1wbGF5aW5nXCIsXG4gICAgZmFsc2UsXG4gICAgXCJTaG91bGQgYmUgdHJ1IGlmIGFueSBhdWRpbyBpcyBwbGF5aW5nIG9uIHBhZ2VcIixcbiAgKTtcbiAgY29uc3QgX3Byb3BzID0ge1xuICAgIGlucHV0QmxvY2tlZEJ5QXVkaW8sXG4gICAgbWVkaWFCbG9ja2VkQnlBdWRpbyxcbiAgICBpbnB1dEJsb2NraW5nQnlTZXF1ZW5jZSxcbiAgICBtZWRpYUJsb2NrZWRCeVNlcXVlbmNlLFxuICAgIGlucHV0QmxvY2tlZEJ5VmlkZW8sXG4gICAgbWVkaWFCbG9ja2VkQnlWaWRlbyxcbiAgICB1c2VyUGF1c2VkVmlkZW8sXG4gICAgdmlkZW9Jc1BsYXlpbmcsXG4gIH07XG5cbiAgY29uc3QgZGlzYWJsZUF1ZGlvSWNvblF1ZXJ5OiBEU3RhdGUuU3RhdGVRdWVyeSA9IHtcbiAgICBuYW1lOiBcImRpc2FibGUtQXVkaW9cIixcbiAgICBjb25kaXRpb246IHtcbiAgICAgIGtpbmQ6IFwiY29tcGxleC1jb25kaXRpb25cIixcbiAgICAgIG5hbWU6IFwiYXVkaW8tY29udHJvbHMtYXJlLWJsb2NrZWRcIixcbiAgICAgIHNvbWU6IFtcbiAgICAgICAgbWVkaWFCbG9ja2VkQnlTZXF1ZW5jZS5nZXRJc1RydWVDb25kaXRpb24oKSxcbiAgICAgICAgbWVkaWFCbG9ja2VkQnlBdWRpby5nZXRJc1RydWVDb25kaXRpb24oKSxcbiAgICAgICAgbWVkaWFCbG9ja2VkQnlWaWRlby5nZXRJc1RydWVDb25kaXRpb24oKSxcbiAgICAgIF0sXG4gICAgICBhbGw6IFtdLFxuICAgIH0sXG4gIH07XG4gIGNvbnN0IGhpZGVWaWRlb1BsYXlRdWVyeTogRFN0YXRlLlN0YXRlUXVlcnkgPSB7XG4gICAgbmFtZTogXCJoaWRlLXZpZGVvLXBsYXktYnV0dG9uXCIsXG4gICAgY29uZGl0aW9uOiB7XG4gICAgICBraW5kOiBcImNvbXBsZXgtY29uZGl0aW9uXCIsXG4gICAgICBuYW1lOiBcInZpZGVvLWlzLXBsYXlpbmctY29uZGl0aW9uXCIsXG4gICAgICBhbGw6IFt2aWRlb0lzUGxheWluZy5nZXRJc1RydWVDb25kaXRpb24oKV0sXG4gICAgICBzb21lOiBbXSxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IGhpZGVWaWRlb1BhdXNlUXVlcnk6IERTdGF0ZS5TdGF0ZVF1ZXJ5ID0ge1xuICAgIG5hbWU6IFwiaGlkZS12aWRlby1wYXVzZS1idXR0b25cIixcbiAgICBjb25kaXRpb246IHtcbiAgICAgIGtpbmQ6IFwiY29tcGxleC1jb25kaXRpb25cIixcbiAgICAgIG5hbWU6IFwidmlkZW8taXMtbm90LXBsYXlpbmctY29uZGl0aW9uXCIsXG4gICAgICBhbGw6IFt2aWRlb0lzUGxheWluZy5nZXRJc0ZhbHNlQ29uZGl0aW9uKCldLFxuICAgICAgc29tZTogW10sXG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBkaXNhYmxlVmlkZW9QbGF5UXVlcnk6IERTdGF0ZS5TdGF0ZVF1ZXJ5ID0ge1xuICAgIG5hbWU6IFwiZGlzYWJsZS12aWRlb1wiLFxuICAgIGNvbmRpdGlvbjoge1xuICAgICAga2luZDogXCJjb21wbGV4LWNvbmRpdGlvblwiLFxuICAgICAgbmFtZTogXCJ2aWRlby1wbGF5IHNoYWxsIGJlIGRpc2FibGVkXCIsXG4gICAgICBhbGw6IFt1c2VyUGF1c2VkVmlkZW8uZ2V0SXNGYWxzZUNvbmRpdGlvbigpXSxcbiAgICAgIHNvbWU6IFtcbiAgICAgICAgbWVkaWFCbG9ja2VkQnlTZXF1ZW5jZS5nZXRJc1RydWVDb25kaXRpb24oKSxcbiAgICAgICAgbWVkaWFCbG9ja2VkQnlBdWRpby5nZXRJc1RydWVDb25kaXRpb24oKSxcbiAgICAgICAgbWVkaWFCbG9ja2VkQnlWaWRlby5nZXRJc1RydWVDb25kaXRpb24oKSxcbiAgICAgICAgYXVkaW9Jc1BsYXlpbmcuZ2V0SXNUcnVlQ29uZGl0aW9uKCksXG4gICAgICBdLFxuICAgIH0sXG4gIH07XG4gIGNvbnN0IGRpc2FibGVVc2VySW5wdXRRdWVyeTogRFN0YXRlLlN0YXRlUXVlcnkgPSB7XG4gICAgbmFtZTogXCJkaXNhYmxlLXVzZXItaW5wdXRcIixcbiAgICBjb25kaXRpb246IHtcbiAgICAgIGtpbmQ6IFwiY29tcGxleC1jb25kaXRpb25cIixcbiAgICAgIG5hbWU6IFwiVXNlciBpbnB1dCBzaGFsbCBiZSBkaXNhYmxlZCAoUmVzcG9uc2UtYnV0dG9ucywgRm9ybUNvbnRyb2xzLi4uKVwiLFxuICAgICAgYWxsOiBbXSxcbiAgICAgIHNvbWU6IFtcbiAgICAgICAgaW5wdXRCbG9ja2VkQnlBdWRpby5nZXRJc1RydWVDb25kaXRpb24oKSxcbiAgICAgICAgaW5wdXRCbG9ja2VkQnlWaWRlby5nZXRJc1RydWVDb25kaXRpb24oKSxcbiAgICAgICAgaW5wdXRCbG9ja2luZ0J5U2VxdWVuY2UuZ2V0SXNUcnVlQ29uZGl0aW9uKCksXG4gICAgICBdLFxuICAgIH0sXG4gIH07XG4gIGV4cG9ydCBjb25zdCBfUXVlcmllcyA9IHtcbiAgICBkaXNhYmxlQXVkaW9JY29uUXVlcnksXG4gICAgZGlzYWJsZVZpZGVvUGxheVF1ZXJ5LFxuICAgIGRpc2FibGVVc2VySW5wdXRRdWVyeSxcbiAgICBoaWRlVmlkZW9QYXVzZVF1ZXJ5LFxuICAgIGhpZGVWaWRlb1BsYXlRdWVyeSxcbiAgfTtcbiAgZXhwb3J0IGNvbnN0IGFsbERlZmF1bHRQcm9wZXJ0aWVzID0gT2JqZWN0LnZhbHVlcyhfcHJvcHMpO1xuICBleHBvcnQgY29uc3QgYWxsRGVmYXVsdFF1ZXJpZXMgPSBPYmplY3QudmFsdWVzKF9RdWVyaWVzKTtcbn1cbiIsICJpbXBvcnQgeyBEQ29tbWFuZCwgRWxlbWVudENvbW1hbmQgfSBmcm9tIFwiQG1lZGlhLXF1ZXN0L2VuZ2luZVwiO1xuaW1wb3J0IHsgRFN0eWxlIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcbmltcG9ydCB7IERFbGVtZW50RHRvIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcblxuZXhwb3J0IG5hbWVzcGFjZSBUaGVtZVV0aWxzIHtcbiAgZXhwb3J0IGNvbnN0IGRpc2FibGVDbGlja0NvbW1hbmRzID0gKGVsZW1lbnRJZDogc3RyaW5nLCBzdHlsZUNoYW5nZXM6IFBhcnRpYWw8RFN0eWxlPik6IEVsZW1lbnRDb21tYW5kW10gPT4ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGtpbmQ6IFwiRUxFTUVOVF9ESVNBQkxFX0NMSUNLX0NPTU1BTkRcIixcbiAgICAgICAgdGFyZ2V0OiBcIkVMRU1FTlRcIixcbiAgICAgICAgdGFyZ2V0SWQ6IGVsZW1lbnRJZCxcbiAgICAgICAgcGF5bG9hZDoge30sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBraW5kOiBcIkVMRU1FTlRfU1RZTEVfQ09NTUFORFwiLFxuICAgICAgICB0YXJnZXQ6IFwiRUxFTUVOVFwiLFxuICAgICAgICB0YXJnZXRJZDogZWxlbWVudElkLFxuICAgICAgICBwYXlsb2FkOiB7IGNoYW5nZXM6IHN0eWxlQ2hhbmdlcyB9LFxuICAgICAgfSxcbiAgICBdO1xuICB9O1xuXG4gIGV4cG9ydCBjb25zdCBlbmFibGVDbGlja0NvbW1hbmRzID0gKGVsZW1lbnRJZDogc3RyaW5nLCBzdHlsZUNoYW5nZXM6IFBhcnRpYWw8RFN0eWxlPik6IEVsZW1lbnRDb21tYW5kW10gPT4ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGtpbmQ6IFwiRUxFTUVOVF9FTkFCTEVfQ0xJQ0tfQ09NTUFORFwiLFxuICAgICAgICB0YXJnZXQ6IFwiRUxFTUVOVFwiLFxuICAgICAgICB0YXJnZXRJZDogZWxlbWVudElkLFxuICAgICAgICBwYXlsb2FkOiB7fSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtpbmQ6IFwiRUxFTUVOVF9TVFlMRV9DT01NQU5EXCIsXG4gICAgICAgIHRhcmdldDogXCJFTEVNRU5UXCIsXG4gICAgICAgIHRhcmdldElkOiBlbGVtZW50SWQsXG4gICAgICAgIHBheWxvYWQ6IHsgY2hhbmdlczogc3R5bGVDaGFuZ2VzIH0sXG4gICAgICB9LFxuICAgIF07XG4gIH07XG4gIGV4cG9ydCBjb25zdCBoaWRlQ29tbWFuZCA9IChlbGVtZW50SWQ6IHN0cmluZyk6IEVsZW1lbnRDb21tYW5kID0+IHtcbiAgICBjb25zdCBoaWRlQ29tbWFuZDogRENvbW1hbmQgPSB7XG4gICAgICBraW5kOiBcIkVMRU1FTlRfU1RZTEVfQ09NTUFORFwiLFxuICAgICAgdGFyZ2V0OiBcIkVMRU1FTlRcIixcbiAgICAgIHRhcmdldElkOiBlbGVtZW50SWQsXG4gICAgICBwYXlsb2FkOiB7IGNoYW5nZXM6IHsgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiB9IH0sXG4gICAgfTtcbiAgICByZXR1cm4gaGlkZUNvbW1hbmQ7XG4gIH07XG4gIGV4cG9ydCBjb25zdCBzaG93Q29tbWFuZCA9IChlbGVtZW50SWQ6IHN0cmluZyk6IEVsZW1lbnRDb21tYW5kID0+IHtcbiAgICBjb25zdCBzaG93Q29tbWFuZDogRENvbW1hbmQgPSB7XG4gICAgICBraW5kOiBcIkVMRU1FTlRfU1RZTEVfQ09NTUFORFwiLFxuICAgICAgdGFyZ2V0OiBcIkVMRU1FTlRcIixcbiAgICAgIHRhcmdldElkOiBlbGVtZW50SWQsXG4gICAgICBwYXlsb2FkOiB7IGNoYW5nZXM6IHsgdmlzaWJpbGl0eTogXCJ2aXNpYmxlXCIgfSB9LFxuICAgIH07XG4gICAgcmV0dXJuIHNob3dDb21tYW5kO1xuICB9O1xuXG4gIGV4cG9ydCBjb25zdCBzcGFjZUV2ZW5seVggPSA8VCBleHRlbmRzIFBpY2s8REVsZW1lbnREdG8sIFwic3R5bGVcIj4+KFxuICAgIGl0ZW1zOiBSZWFkb25seUFycmF5PFQ+LFxuICAgIG9wdGlvbnM6IHsgc3RhcnRBdDogbnVtYmVyOyBlbmRBdDogbnVtYmVyOyBkZWZhdWx0SXRlbVdpZHRoOiBudW1iZXIgfSA9IHtcbiAgICAgIHN0YXJ0QXQ6IDAsXG4gICAgICBlbmRBdDogMTAwLFxuICAgICAgZGVmYXVsdEl0ZW1XaWR0aDogNSxcbiAgICB9LFxuICApOiBSZWFkb25seUFycmF5PFQ+ID0+IHtcbiAgICBjb25zdCBzdGFydEF0ID0gb3B0aW9ucz8uc3RhcnRBdCA/PyAwO1xuICAgIGNvbnN0IGVuZEF0ID0gb3B0aW9ucz8uZW5kQXQgPz8gMTAwO1xuICAgIGNvbnN0IHJhbmdlID0gTWF0aC5hYnMoZW5kQXQgLSBzdGFydEF0KTtcbiAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IG1hcmdpbkNvdW50ID0gaXRlbXMubGVuZ3RoICsgMTtcbiAgICBjb25zdCBkZWZhdWx0V2lkdGggPSBvcHRpb25zLmRlZmF1bHRJdGVtV2lkdGggPz8gMTUwIC8gbWFyZ2luQ291bnQ7XG5cbiAgICBsZXQgdG90YWxXaWR0aE9mRWxlbWVudHMgPSBpdGVtcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgIGNvbnN0IHcgPSBjdXJyLnN0eWxlLncgPz8gZGVmYXVsdFdpZHRoO1xuICAgICAgcmV0dXJuIHByZXYgKyB3O1xuICAgIH0sIDApO1xuXG4gICAgbGV0IGN1cnNvciA9IHN0YXJ0QXQ7XG4gICAgY29uc3QgcmVzdCA9IE1hdGgubWF4KHJhbmdlIC0gdG90YWxXaWR0aE9mRWxlbWVudHMsIDApO1xuICAgIGNvbnN0IG1hcmdpbiA9IHJlc3QgLyBtYXJnaW5Db3VudDtcblxuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGN1cnNvciA9IGN1cnNvciArIG1hcmdpbjtcbiAgICAgIGNvbnN0IHcgPSBpdGVtLnN0eWxlLncgPz8gZGVmYXVsdFdpZHRoO1xuICAgICAgY29uc3QgeCA9IGN1cnNvcjtcbiAgICAgIGN1cnNvciA9IGN1cnNvciArIHc7XG4gICAgICBpdGVtLnN0eWxlLncgPSB3O1xuICAgICAgaXRlbS5zdHlsZS54ID0geDtcbiAgICB9KTtcblxuICAgIHJldHVybiBpdGVtcztcbiAgfTtcblxuICBleHBvcnQgY29uc3QgY2VudGVyWSA9ICgpOiBQaWNrPERTdHlsZSwgXCJ5XCIgfCBcInRyYW5zZm9ybVwiPiA9PiAoe1xuICAgIHk6IDUwLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMCUsIDUwJSlcIixcbiAgfSk7XG4gIGV4cG9ydCBjb25zdCBjZW50ZXJYID0gKCk6IFBpY2s8RFN0eWxlLCBcInhcIiB8IFwidHJhbnNmb3JtXCI+ID0+ICh7XG4gICAgeDogNTAsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgtNTAlLCAwJSlcIixcbiAgfSk7XG5cbiAgZXhwb3J0IGNvbnN0IGNlbnRlclhZID0gKCk6IFBpY2s8RFN0eWxlLCBcInhcIiB8IFwieVwiIHwgXCJ0cmFuc2Zvcm1cIj4gPT4gKHtcbiAgICB4OiA1MCxcbiAgICB5OiA1MCxcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKC01MCUsIDUwJSlcIixcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgQWJzdHJhY3RUaGVtZUNvbXBpbGVyIH0gZnJvbSBcIi4vQWJzdHJhY3RUaGVtZUNvbXBpbGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJTY2hlbWFEdG8gfSBmcm9tIFwiLi4vQnVpbGRlci1zY2hlbWFcIjtcbmltcG9ydCB7IEJ1aWxkZXJTY2hlbWEgfSBmcm9tIFwiLi4vQnVpbGRlci1zY2hlbWFcIjtcbmltcG9ydCB0eXBlIHsgQnVpbGRlclBhZ2VEdG8gfSBmcm9tIFwiLi4vQnVpbGRlci1wYWdlXCI7XG5pbXBvcnQgeyBEU3RhdGVQcm9wcyB9IGZyb20gXCIuL3N0YW5kYXJkLXByb3BzXCI7XG5pbXBvcnQgeyBUaGVtZVV0aWxzIH0gZnJvbSBcIi4vdGhlbWUtdXRpbHNcIjtcbmltcG9ydCB7IERlZmF1bHRUaGVtZSwgdHlwZSBJRGVmYXVsdFRoZW1lIH0gZnJvbSBcIi4vSURlZmF1bHRUaGVtZVwiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGVyTWFpbkltYWdlRHRvIH0gZnJvbSBcIi4uL0J1aWxkZXJNYWluSW1hZ2VEdG9cIjtcbmltcG9ydCB0eXBlIHsgQnVpbGRlck1haW5WaWRlb0R0byB9IGZyb20gXCIuLi9CdWlsZGVyTWFpblZpZGVvRHRvXCI7XG5pbXBvcnQge1xuICBEQXVkaW9EdG8sXG4gIERBdXRvUGxheVNlcXVlbmNlLFxuICBEQ29tbWFuZCxcbiAgRERpdkR0byxcbiAgREVsZW1lbnREdG8sXG4gIERJbWdEdG8sXG4gIERUZXh0RHRvLFxuICBEVXRpbCxcbiAgRFZpZGVvRHRvLFxuICBGYWN0LFxuICBQYWdlRHRvLFxuICBQYWdlUXVlQ29tbWFuZCxcbiAgUnVsZSxcbiAgU2NoZW1hRHRvLFxufSBmcm9tIFwiQG1lZGlhLXF1ZXN0L2VuZ2luZVwiO1xuaW1wb3J0IHsgQXVkaW9GaWxlIH0gZnJvbSBcIi4uL21lZGlhLWZpbGVzXCI7XG5pbXBvcnQgeyBCdWlsZGVyUnVsZSB9IGZyb20gXCIuLi9ydWxlYnVpbGRlclwiO1xuXG5jb25zdCBVID0gRFV0aWw7XG5jb25zdCBnZW5lcmF0ZUVsZW1lbnRJZCA9ICgpID0+IFUucmFuZG9tU3RyaW5nKDMyKTtcbmV4cG9ydCBjbGFzcyBEZWZhdWx0VGhlbWVDb21waWxlciBleHRlbmRzIEFic3RyYWN0VGhlbWVDb21waWxlcjxJRGVmYXVsdFRoZW1lPiB7XG4gIHJlYWRvbmx5IG5hbWUgPSBcIklzcGUgZGVmYXVsdCB0aGVtZS5cIjtcbiAgcHJpdmF0ZSByZWFkb25seSBUQUcgPSBcIlsgREVGQVVMVF9USEVNRV9DT01QSUxFUiBdOiBcIjtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoRGVmYXVsdFRoZW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcGlsZVJ1bGVzKHNvdXJjZTogQnVpbGRlclNjaGVtYUR0byk6IFJ1bGU8UGFnZVF1ZUNvbW1hbmQsIG5ldmVyPltdIHtcbiAgICBjb25zdCBidWlsZGVyU2NoZW1hID0gQnVpbGRlclNjaGVtYS5mcm9tSnNvbihzb3VyY2UpO1xuICAgIGNvbnN0IHJ1bGVJbnB1dCA9IGJ1aWxkZXJTY2hlbWEuZ2V0UnVsZUlucHV0KCk7XG4gICAgY29uc3QgcGFnZVF1ZVJ1bGVzOiBSdWxlPFBhZ2VRdWVDb21tYW5kLCBuZXZlcj5bXSA9IFtdO1xuICAgIHNvdXJjZS5ydWxlcy5mb3JFYWNoKChydWxlKSA9PiB7XG4gICAgICBjb25zdCBlbmdpbmVSdWxlID0gQnVpbGRlclJ1bGUuZnJvbUR0byhydWxlLCBydWxlSW5wdXQpLnRvRW5naW5lUnVsZShzb3VyY2UucHJlZml4KTtcbiAgICAgIGlmICghUnVsZS5pc0VtcHR5KGVuZ2luZVJ1bGUpKSB7XG4gICAgICAgIHBhZ2VRdWVSdWxlcy5wdXNoKGVuZ2luZVJ1bGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5ncm91cENvbGxhcHNlZCh0aGlzLlRBRywgXCJUaHJvd3MgYXdheSBlbXB0eSBydWxlLlwiKTtcbiAgICAgICAgY29uc29sZS5sb2cocnVsZSk7XG4gICAgICAgIGNvbnNvbGUubG9nKHJ1bGVJbnB1dCk7XG4gICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcGFnZVF1ZVJ1bGVzO1xuICB9XG5cbiAgY29tcGlsZShzb3VyY2U6IEJ1aWxkZXJTY2hlbWFEdG8pOiBTY2hlbWFEdG8ge1xuICAgIGNvbnN0IHBhZ2VzID0gc291cmNlLnBhZ2VzLm1hcCgocCkgPT4gdGhpcy5jb21waWxlUGFnZShwLCBzb3VyY2UucHJlZml4KSk7XG4gICAgY29uc3QgcnVsZXMgPSB0aGlzLmNvbXBpbGVSdWxlcyhzb3VyY2UpO1xuICAgIGNvbnNvbGUubG9nKHBhZ2VzLm1hcCgocCkgPT4gcC50YWdzKSk7XG5cbiAgICBjb25zdCBkdG86IFNjaGVtYUR0byA9IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogc291cmNlLmJhY2tncm91bmRDb2xvcixcbiAgICAgIGJhc2VIZWlnaHQ6IHNvdXJjZS5iYXNlSGVpZ2h0LFxuICAgICAgYmFzZVdpZHRoOiBzb3VyY2UuYmFzZVdpZHRoLFxuICAgICAgaWQ6IHNvdXJjZS5pZCxcbiAgICAgIHBhZ2VTZXF1ZW5jZXM6IFtdLFxuICAgICAgcGFnZXMsXG4gICAgICBwcmVkZWZpbmVkRmFjdHM6IFtdLFxuICAgICAgcHJlZml4OiBzb3VyY2UucHJlZml4LFxuICAgICAgcnVsZXMsXG4gICAgICBzdGF0ZUZyb21FdmVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgb25FdmVudDogXCJWSURFT19FTkRFRF9FVkVOVFwiLFxuICAgICAgICAgIHRoZW5FeGVjdXRlOiBbXG4gICAgICAgICAgICBEU3RhdGVQcm9wcy51c2VyUGF1c2VkVmlkZW8uZ2V0U2V0RmFsc2VDb21tYW5kKCksXG4gICAgICAgICAgICBEU3RhdGVQcm9wcy5tZWRpYUJsb2NrZWRCeVZpZGVvLmdldFNldEZhbHNlQ29tbWFuZCgpLFxuICAgICAgICAgICAgRFN0YXRlUHJvcHMudmlkZW9Jc1BsYXlpbmcuZ2V0U2V0RmFsc2VDb21tYW5kKCksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG9uRXZlbnQ6IFwiVklERU9fUEFVU0VEX0VWRU5UXCIsXG4gICAgICAgICAgdGhlbkV4ZWN1dGU6IFtcbiAgICAgICAgICAgIERTdGF0ZVByb3BzLnZpZGVvSXNQbGF5aW5nLmdldFNldEZhbHNlQ29tbWFuZCgpLFxuICAgICAgICAgICAgRFN0YXRlUHJvcHMubWVkaWFCbG9ja2VkQnlWaWRlby5nZXRTZXRGYWxzZUNvbW1hbmQoKSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb25FdmVudDogXCJWSURFT19QTEFZX0VWRU5UXCIsXG4gICAgICAgICAgdGhlbkV4ZWN1dGU6IFtcbiAgICAgICAgICAgIERTdGF0ZVByb3BzLnZpZGVvSXNQbGF5aW5nLmdldFNldFRydWVDb21tYW5kKCksXG4gICAgICAgICAgICBEU3RhdGVQcm9wcy51c2VyUGF1c2VkVmlkZW8uZ2V0U2V0RmFsc2VDb21tYW5kKCksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG9uRXZlbnQ6IFwiQVVESU9fUExBWV9FVkVOVFwiLFxuICAgICAgICAgIHRoZW5FeGVjdXRlOiBbXG4gICAgICAgICAgICBEU3RhdGVQcm9wcy5hdWRpb0lzUGxheWluZy5nZXRTZXRUcnVlQ29tbWFuZCgpLFxuICAgICAgICAgICAgRFN0YXRlUHJvcHMubWVkaWFCbG9ja2VkQnlBdWRpby5nZXRTZXRUcnVlQ29tbWFuZCgpLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvbkV2ZW50OiBcIkFVRElPX0VOREVEX0VWRU5UXCIsXG4gICAgICAgICAgdGhlbkV4ZWN1dGU6IFtcbiAgICAgICAgICAgIERTdGF0ZVByb3BzLmF1ZGlvSXNQbGF5aW5nLmdldFNldEZhbHNlQ29tbWFuZCgpLFxuICAgICAgICAgICAgRFN0YXRlUHJvcHMubWVkaWFCbG9ja2VkQnlBdWRpby5nZXRTZXRGYWxzZUNvbW1hbmQoKSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb25FdmVudDogXCJBVURJT19QQVVTRURfRVZFTlRcIixcbiAgICAgICAgICB0aGVuRXhlY3V0ZTogW1xuICAgICAgICAgICAgRFN0YXRlUHJvcHMuYXVkaW9Jc1BsYXlpbmcuZ2V0U2V0RmFsc2VDb21tYW5kKCksXG4gICAgICAgICAgICBEU3RhdGVQcm9wcy5tZWRpYUJsb2NrZWRCeUF1ZGlvLmdldFNldEZhbHNlQ29tbWFuZCgpLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgc3RhdGVQcm9wczogRFN0YXRlUHJvcHMuYWxsRGVmYXVsdFByb3BlcnRpZXMubWFwKChkZWYpID0+IGRlZi5wcm9wRGVmaW5pdGlvbiksXG4gICAgICBzdGF0ZVF1ZXJpZXM6IERTdGF0ZVByb3BzLmFsbERlZmF1bHRRdWVyaWVzLFxuICAgIH07XG4gICAgcmV0dXJuIGR0bztcbiAgfVxuICBwcml2YXRlIGNvbXBpbGVQYWdlKHBhZ2U6IEJ1aWxkZXJQYWdlRHRvLCBtb2R1bGVQcmVmaXg6IHN0cmluZyk6IFBhZ2VEdG8ge1xuICAgIC8vIGNvbnNvbGUubG9nKF9tb2R1bGVJZCk7XG4gICAgLy8gY29uc3QgdGV4dEVsZW1lbnRcbiAgICBjb25zdCB0YWdzID0gcGFnZS50YWdzID8/IFtdO1xuICAgIGNvbnN0IHsgbmV4dEJ1dHRvbiwgbWFpblRleHQsIGlkLCBtYWluTWVkaWEsIF90eXBlIH0gPSBwYWdlO1xuICAgIGNvbnN0IGVsZW1lbnRzOiBERWxlbWVudER0b1tdID0gW107XG4gICAgY29uc3QgYXVkaW9SZXNvdXJjZXNEdG86IERBdWRpb0R0b1tdID0gW107XG4gICAgY29uc3QgdmlkZW9SZXNvdXJjZXM6IERWaWRlb0R0b1tdID0gW107XG4gICAgbGV0IG1haW5WaWRlbzogRFZpZGVvRHRvIHwgZmFsc2UgPSBmYWxzZTtcbiAgICBsZXQgbWFpblRleHRBdWRpbzogREF1ZGlvRHRvIHwgZmFsc2UgPSBmYWxzZTtcblxuICAgIGlmIChwYWdlLm1haW5UZXh0LmF1ZGlvRmlsZSkge1xuICAgICAgY29uc3QgcmVzID0gdGhpcy5jb21waWxlTWFpblRleHRBdWRpbyhwYWdlLm1haW5UZXh0LmF1ZGlvRmlsZSk7XG4gICAgICBlbGVtZW50cy5wdXNoKC4uLnJlcy5lbGVtZW50cyk7XG4gICAgICBhdWRpb1Jlc291cmNlc0R0by5wdXNoKHJlcy5hdWRpb0R0byk7XG4gICAgICBtYWluVGV4dEF1ZGlvID0gcmVzLmF1ZGlvRHRvO1xuICAgIH1cblxuICAgIGlmIChfdHlwZSA9PT0gXCJxdWVzdGlvblwiKSB7XG4gICAgICBjb25zdCB2YXJpYWJsZUlkID0gbW9kdWxlUHJlZml4ICsgXCJfXCIgKyBwYWdlLnByZWZpeDtcbiAgICAgIGNvbnN0IHsgYnV0dG9ucywgcXVlc3Rpb24gfSA9IHRoaXMuY29tcGlsZVF1ZXN0aW9uKGlkLCBwYWdlLCB2YXJpYWJsZUlkKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKHF1ZXN0aW9uKTtcbiAgICAgIGVsZW1lbnRzLnB1c2goLi4uYnV0dG9ucywgcXVlc3Rpb24pO1xuICAgIH1cblxuICAgIGlmIChfdHlwZSA9PT0gXCJpbmZvLXBhZ2VcIikge1xuICAgICAgY29uc3QgaW5mb1RleHQgPSBtYWluVGV4dC50ZXh0O1xuICAgICAgY29uc3QgbmV4dEJ0bkVsZW1lbnQ6IERFbGVtZW50RHRvID0gdGhpcy5jb21waWxlQnV0dG9uKGlkLCBuZXh0QnV0dG9uLCB7XG4gICAgICAgIGtpbmQ6IFwibmV4dC1idXR0b25cIixcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdGV4dFN0eWxlID0gbWFpbk1lZGlhID8gRGVmYXVsdFRoZW1lLm1haW5UZXh0LndpdGhNZWRpYS50ZXh0LmNzcyA6IERlZmF1bHRUaGVtZS5tYWluVGV4dC5ub01lZGlhLnRleHQuY3NzO1xuICAgICAgY29uc3QgZWxlbWVudDogREVsZW1lbnREdG8gPSB7XG4gICAgICAgIHRleHQ6IGluZm9UZXh0LFxuICAgICAgICBfdGFnOiBcInBcIixcbiAgICAgICAgaWQ6IGdlbmVyYXRlRWxlbWVudElkKCksXG4gICAgICAgIHN0eWxlOiB0ZXh0U3R5bGUsXG4gICAgICB9O1xuICAgICAgZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICAgIGVsZW1lbnRzLnB1c2gobmV4dEJ0bkVsZW1lbnQpO1xuICAgIH1cbiAgICBpZiAobWFpbk1lZGlhICYmIG1haW5NZWRpYS5raW5kID09PSBcIm1haW4taW1hZ2VcIikge1xuICAgICAgY29uc3QgbWFpbkltYWdlRWxlbWVudCA9IHRoaXMuY29tcGlsZUltYWdlKG1haW5NZWRpYSk7XG4gICAgICBlbGVtZW50cy5wdXNoKG1haW5JbWFnZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIGlmIChtYWluTWVkaWEgJiYgbWFpbk1lZGlhLmtpbmQgPT09IFwibWFpbi12aWRlb1wiKSB7XG4gICAgICBjb25zdCB2aWRlb091dHB1dCA9IHRoaXMuY29tcGlsZVZpZGVvKG1haW5NZWRpYSk7XG4gICAgICBtYWluVmlkZW8gPSB2aWRlb091dHB1dC52aWRlb0R0bztcbiAgICAgIGVsZW1lbnRzLnB1c2goLi4udmlkZW9PdXRwdXQuZWxlbWVudHMpO1xuICAgICAgdmlkZW9SZXNvdXJjZXMucHVzaCh2aWRlb091dHB1dC52aWRlb0R0byk7XG4gICAgfVxuICAgIGNvbnN0IG1haW5WaWRlb0lkID0gbWFpblZpZGVvID8gbWFpblZpZGVvLmlkIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGF1dG9QbGF5U2VxdWVuY2U6IERBdXRvUGxheVNlcXVlbmNlID0ge1xuICAgICAgYmxvY2tVc2VySW5wdXQ6IHRydWUsXG4gICAgICBpZDogXCIxXCIsXG4gICAgICBpdGVtczogW10sXG4gICAgICBzdGFydENvbW1hbmRzOiBbXG4gICAgICAgIERTdGF0ZVByb3BzLm1lZGlhQmxvY2tlZEJ5U2VxdWVuY2UuZ2V0U2V0VHJ1ZUNvbW1hbmQoKSxcbiAgICAgICAgRFN0YXRlUHJvcHMuaW5wdXRCbG9ja2luZ0J5U2VxdWVuY2UuZ2V0U2V0VHJ1ZUNvbW1hbmQoKSxcbiAgICAgIF0sXG4gICAgICBlbmRDb21tYW5kczogW1xuICAgICAgICBEU3RhdGVQcm9wcy5tZWRpYUJsb2NrZWRCeVNlcXVlbmNlLmdldFNldEZhbHNlQ29tbWFuZCgpLFxuICAgICAgICBEU3RhdGVQcm9wcy5pbnB1dEJsb2NraW5nQnlTZXF1ZW5jZS5nZXRTZXRGYWxzZUNvbW1hbmQoKSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIGlmIChtYWluVmlkZW8gJiYgcGFnZS5tYWluTWVkaWEgJiYgcGFnZS5tYWluTWVkaWEua2luZCA9PT0gXCJtYWluLXZpZGVvXCIgJiYgcGFnZS5tYWluTWVkaWEubW9kZSA9PT0gXCJhdXRvcGxheVwiKSB7XG4gICAgICBhdXRvUGxheVNlcXVlbmNlLml0ZW1zLnB1c2goe1xuICAgICAgICBraW5kOiBcImF1dG9wbGF5LXZpZGVvXCIsXG4gICAgICAgIHZpZGVvSWQ6IG1haW5WaWRlby5pZCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChtYWluVGV4dEF1ZGlvICYmIHBhZ2UubWFpblRleHQuYXV0b3BsYXkpIHtcbiAgICAgIGF1dG9QbGF5U2VxdWVuY2UuaXRlbXMucHVzaCh7XG4gICAgICAgIGtpbmQ6IFwiYXV0b3BsYXktYXVkaW9cIixcbiAgICAgICAgYXVkaW9JZDogbWFpblRleHRBdWRpby5pZCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VEdG86IFBhZ2VEdG8gPSB7XG4gICAgICBhdWRpbzogYXVkaW9SZXNvdXJjZXNEdG8sXG4gICAgICBhdXRvUGxheVNlcXVlbmNlOiBhdXRvUGxheVNlcXVlbmNlLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBcInJlZFwiLFxuICAgICAgZWxlbWVudHMsXG4gICAgICBpZCxcbiAgICAgIG1haW5WaWRlb0lkLFxuICAgICAgdGFnczogWy4uLnRhZ3NdLFxuICAgICAgdmlkZW86IHZpZGVvUmVzb3VyY2VzLFxuICAgIH07XG4gICAgcmV0dXJuIHBhZ2VEdG87XG4gIH1cblxuICBwcml2YXRlIGNvbXBpbGVJbWFnZShpbWFnZTogQnVpbGRlck1haW5JbWFnZUR0bykge1xuICAgIGNvbnN0IGltZzogREltZ0R0byA9IHtcbiAgICAgIF90YWc6IFwiaW1nXCIsXG4gICAgICBpZDogaW1hZ2UuZmlsZS5pZCxcbiAgICAgIHN0eWxlOiB0aGlzLnRoZW1lLmltYWdlLnN0eWxlLFxuICAgICAgdXJsOiBpbWFnZS5maWxlLmRvd25sb2FkVXJsLFxuICAgIH07XG4gICAgcmV0dXJuIGltZztcbiAgfVxuXG4gIHByaXZhdGUgY29tcGlsZU1haW5UZXh0QXVkaW8oYXVkaW9GaWxlOiBBdWRpb0ZpbGUpOiB7XG4gICAgYXVkaW9EdG86IERBdWRpb0R0bztcbiAgICBlbGVtZW50czogREVsZW1lbnREdG9bXTtcbiAgfSB7XG4gICAgY29uc3QgdCA9IHRoaXMudGhlbWUubWFpblRleHQ7XG4gICAgY29uc3QgYXVkaW9JZCA9IGF1ZGlvRmlsZS5pZDtcbiAgICBjb25zdCBpY29uVXJsID1cbiAgICAgIFwiaHR0cHM6Ly9maXJlYmFzZXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vdjAvYi9pc3BlLWJhY2tlbmQtZGV2LmFwcHNwb3QuY29tL28vcHVibGljLWFzc2V0cyUyRnZvbHVtZV91cC0yNHB4LnN2Zz9hbHQ9bWVkaWEmdG9rZW49NTUxYmQwYTYtYTUxNS00Zjg3LWEyNDUtZGE0MzNmNDgzM2Y5XCI7XG5cbiAgICBjb25zdCBidXR0b25JZCA9IFUucmFuZG9tU3RyaW5nKDMwKTtcbiAgICBjb25zdCBwbGF5TWFpblRleHRBdWRpbzogREltZ0R0byA9IHtcbiAgICAgIF90YWc6IFwiaW1nXCIsXG4gICAgICBpZDogYnV0dG9uSWQsXG4gICAgICB1cmw6IGljb25VcmwsXG4gICAgICBzdHlsZTogeyAuLi50LndpdGhNZWRpYS5hdWRpby5jc3MgfSxcbiAgICAgIG9uQ2xpY2s6IFtcbiAgICAgICAge1xuICAgICAgICAgIGtpbmQ6IFwiQVVESU9fUExBWV9DT01NQU5EXCIsXG4gICAgICAgICAgdGFyZ2V0OiBcIkFVRElPXCIsXG4gICAgICAgICAgdGFyZ2V0SWQ6IGF1ZGlvSWQsXG4gICAgICAgICAgcGF5bG9hZDogeyB2b2x1bWU6IDEgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBvblN0YXRlQ2hhbmdlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBxdWVyeU5hbWU6IERTdGF0ZVByb3BzLl9RdWVyaWVzLmRpc2FibGVBdWRpb0ljb25RdWVyeS5uYW1lLFxuICAgICAgICAgIHdoZW5UcnVlOiBbLi4uVGhlbWVVdGlscy5kaXNhYmxlQ2xpY2tDb21tYW5kcyhidXR0b25JZCwgdC53aXRoTWVkaWEuYXVkaW8uY3NzRGlzYWJsZWQpXSxcbiAgICAgICAgICB3aGVuRmFsc2U6IFsuLi5UaGVtZVV0aWxzLmVuYWJsZUNsaWNrQ29tbWFuZHMoYnV0dG9uSWQsIHQud2l0aE1lZGlhLmF1ZGlvLmNzc0VuYWJsZWQpXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgICBjb25zdCBhdWRpb0R0bzogREF1ZGlvRHRvID0ge1xuICAgICAgX3RhZzogXCJhdWRpb1wiLFxuICAgICAgLy8gZXZlbnRIYW5kbGVyczogW10sXG4gICAgICBpZDogYXVkaW9GaWxlLmlkLFxuICAgICAgdXJsOiBhdWRpb0ZpbGUuZG93bmxvYWRVcmwsXG4gICAgfTtcbiAgICByZXR1cm4geyBhdWRpb0R0bywgZWxlbWVudHM6IFtwbGF5TWFpblRleHRBdWRpb10gfTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcGlsZVZpZGVvKHZpZGVvOiBCdWlsZGVyTWFpblZpZGVvRHRvKSB7XG4gICAgY29uc3QgdCA9IHRoaXMudGhlbWUudmlkZW9QbGF5ZXI7XG4gICAgY29uc3QgdmlkZW9JZCA9IHZpZGVvLmZpbGUuaWQ7XG4gICAgY29uc3QgcGxheUJ1dHRvbklkID0gXCJwbGF5LWJ0bi1mb3JcIiArIHZpZGVvSWQ7XG4gICAgY29uc3QgcGF1c2VCdXR0b25JZCA9IFwicGF1c2UtYnRuLWZvclwiICsgdmlkZW9JZDtcbiAgICBjb25zdCBlbGVtZW50czogREVsZW1lbnREdG9bXSA9IFtdO1xuICAgIGNvbnN0IHZpZGVvRHRvOiBEVmlkZW9EdG8gPSB7XG4gICAgICBfdGFnOiBcInZpZGVvXCIsXG4gICAgICBpZDogdmlkZW8uZmlsZS5pZCxcbiAgICAgIHN0eWxlOiB0LnZpZGVvRWxlbWVudC5jc3MsXG4gICAgICB1cmw6IHZpZGVvLmZpbGUuZG93bmxvYWRVcmwsXG4gICAgfTtcbiAgICBjb25zdCBwbGF5QnRuOiBESW1nRHRvID0ge1xuICAgICAgaWQ6IHBsYXlCdXR0b25JZCxcbiAgICAgIF90YWc6IFwiaW1nXCIsXG4gICAgICB1cmw6IHQucGxheUJ1dHRvbi5pY29uVXJsLFxuICAgICAgc3R5bGU6IHsgLi4udC5wbGF5QnV0dG9uLmNzcywgLi4udC5wbGF5QnV0dG9uLmNzc0VuYWJsZWQgfSxcbiAgICAgIG9uQ2xpY2s6IFtcbiAgICAgICAge1xuICAgICAgICAgIGtpbmQ6IFwiVklERU9fUExBWV9DT01NQU5EXCIsXG4gICAgICAgICAgdGFyZ2V0OiBcIlZJREVPXCIsXG4gICAgICAgICAgdGFyZ2V0SWQ6IHZpZGVvSWQsXG4gICAgICAgICAgcGF5bG9hZDoge30sXG4gICAgICAgIH0sXG4gICAgICAgIC8vIFRPRE8gQ2hlY2sgaWYgdGhpcyB2aWRlbyBzaGFsbCBibG9jayBvdGhlciBtZWRpYSBmaXJzdD9cbiAgICAgICAgRFN0YXRlUHJvcHMubWVkaWFCbG9ja2VkQnlWaWRlby5nZXRTZXRUcnVlQ29tbWFuZCgpLFxuICAgICAgICBEU3RhdGVQcm9wcy51c2VyUGF1c2VkVmlkZW8uZ2V0U2V0RmFsc2VDb21tYW5kKCksXG4gICAgICBdLFxuICAgICAgb25TdGF0ZUNoYW5nZTogW1xuICAgICAgICB7XG4gICAgICAgICAgcXVlcnlOYW1lOiBEU3RhdGVQcm9wcy5fUXVlcmllcy5kaXNhYmxlVmlkZW9QbGF5UXVlcnkubmFtZSxcbiAgICAgICAgICB3aGVuVHJ1ZTogWy4uLlRoZW1lVXRpbHMuZGlzYWJsZUNsaWNrQ29tbWFuZHMocGxheUJ1dHRvbklkLCB0LnBsYXlCdXR0b24uY3NzRGlzYWJsZWQpXSxcbiAgICAgICAgICB3aGVuRmFsc2U6IFsuLi5UaGVtZVV0aWxzLmVuYWJsZUNsaWNrQ29tbWFuZHMocGxheUJ1dHRvbklkLCB0LnBsYXlCdXR0b24uY3NzRW5hYmxlZCldLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcXVlcnlOYW1lOiBEU3RhdGVQcm9wcy5fUXVlcmllcy5oaWRlVmlkZW9QbGF5UXVlcnkubmFtZSxcbiAgICAgICAgICB3aGVuVHJ1ZTogW1RoZW1lVXRpbHMuaGlkZUNvbW1hbmQocGxheUJ1dHRvbklkKV0sXG4gICAgICAgICAgd2hlbkZhbHNlOiBbVGhlbWVVdGlscy5zaG93Q29tbWFuZChwbGF5QnV0dG9uSWQpXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgICBjb25zdCBwYXVzZUJ0bjogREltZ0R0byA9IHtcbiAgICAgIGlkOiBwYXVzZUJ1dHRvbklkLFxuICAgICAgX3RhZzogXCJpbWdcIixcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIC4uLnQucGF1c2VCdXR0b24uY3NzLFxuICAgICAgICB2aXNpYmlsaXR5OiBcImhpZGRlblwiLFxuICAgICAgICAuLi50LnBhdXNlQnV0dG9uLmNzc0VuYWJsZWQsXG4gICAgICB9LFxuICAgICAgdXJsOiB0LnBhdXNlQnV0dG9uLmljb25VcmwsXG4gICAgICBvbkNsaWNrOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBraW5kOiBcIlZJREVPX1BBVVNFX0NPTU1BTkRcIixcbiAgICAgICAgICB0YXJnZXQ6IFwiVklERU9cIixcbiAgICAgICAgICB0YXJnZXRJZDogdmlkZW9JZCxcbiAgICAgICAgICBwYXlsb2FkOiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAgRFN0YXRlUHJvcHMubWVkaWFCbG9ja2VkQnlWaWRlby5nZXRTZXRGYWxzZUNvbW1hbmQoKSxcbiAgICAgICAgRFN0YXRlUHJvcHMudXNlclBhdXNlZFZpZGVvLmdldFNldFRydWVDb21tYW5kKCksXG4gICAgICBdLFxuICAgICAgb25TdGF0ZUNoYW5nZTogW1xuICAgICAgICB7XG4gICAgICAgICAgcXVlcnlOYW1lOiBEU3RhdGVQcm9wcy5fUXVlcmllcy5oaWRlVmlkZW9QYXVzZVF1ZXJ5Lm5hbWUsXG4gICAgICAgICAgd2hlblRydWU6IFtUaGVtZVV0aWxzLmhpZGVDb21tYW5kKHBhdXNlQnV0dG9uSWQpXSxcbiAgICAgICAgICB3aGVuRmFsc2U6IFtUaGVtZVV0aWxzLnNob3dDb21tYW5kKHBhdXNlQnV0dG9uSWQpXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgICBlbGVtZW50cy5wdXNoKHBsYXlCdG4pO1xuICAgIGVsZW1lbnRzLnB1c2gocGF1c2VCdG4pO1xuICAgIHJldHVybiB7IHZpZGVvRHRvLCBlbGVtZW50cyB9O1xuICB9XG4gIHByaXZhdGUgY29tcGlsZVF1ZXN0aW9uKFxuICAgIHBhZ2VJZDogc3RyaW5nLFxuICAgIHBhZ2U6IEJ1aWxkZXJQYWdlRHRvLFxuICAgIHZhcmlhYmxlSWQ6IHN0cmluZyxcbiAgKToge1xuICAgIHF1ZXN0aW9uOiBEVGV4dER0bztcbiAgICBidXR0b25zOiBERGl2RHRvW107XG4gIH0ge1xuICAgIC8vIFRPRE8gUkVGQUNUT1JFIERFRkFVTFQgUVVFU1RJT04gVE8gLSAoUkVNT1ZFIFVTRSBURVhUMSlcbiAgICAvLyBjb25zb2xlLmxvZyhwYWdlKTtcbiAgICBjb25zdCBxID0gcGFnZS5kZWZhdWx0UXVlc3Rpb247XG4gICAgY29uc3QgdGV4dCA9IHBhZ2UubWFpblRleHQudGV4dDtcbiAgICBjb25zdCBxdWVzdGlvblN0eWxlID0gcGFnZS5tYWluTWVkaWFcbiAgICAgID8gRGVmYXVsdFRoZW1lLm1haW5UZXh0LndpdGhNZWRpYS50ZXh0LmNzc1xuICAgICAgOiBEZWZhdWx0VGhlbWUubWFpblRleHQubm9NZWRpYS50ZXh0LmNzcztcbiAgICBjb25zdCBxdWVzdGlvbjogRFRleHREdG8gPSB7XG4gICAgICBfdGFnOiBcInBcIixcbiAgICAgIHRleHQsXG4gICAgICBldmVudEhhbmRsZXJzOiBbXSxcbiAgICAgIGlkOiBVLnJhbmRvbVN0cmluZygzMCksXG4gICAgICBvbkNsaWNrOiBbXSxcbiAgICAgIG9uU3RhdGVDaGFuZ2U6IFtdLFxuICAgICAgc3R5bGU6IHF1ZXN0aW9uU3R5bGUsXG4gICAgfTtcbiAgICBjb25zdCBidXR0b25zID0gcS5vcHRpb25zLm1hcCgobykgPT4ge1xuICAgICAgY29uc3QgYnRucyA9IHRoaXMuY29tcGlsZUJ1dHRvbihwYWdlSWQsIG8sIHtcbiAgICAgICAga2luZDogXCJyZXNwb25zZS1idXR0b25cIixcbiAgICAgICAgcXVlc3Rpb25JZDogdmFyaWFibGVJZCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGJ0bnM7XG4gICAgfSk7XG4gICAgVGhlbWVVdGlscy5zcGFjZUV2ZW5seVgoYnV0dG9ucyk7XG4gICAgcmV0dXJuIHsgcXVlc3Rpb24sIGJ1dHRvbnMgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcGlsZUJ1dHRvbihcbiAgICBwYWdlSWQ6IHN0cmluZyxcbiAgICBidXR0b25EdG86IEJ1aWxkZXJQYWdlRHRvW1wibmV4dEJ1dHRvblwiXSxcbiAgICBvcHRpb25zOiB7IGtpbmQ6IFwicmVzcG9uc2UtYnV0dG9uXCI7IHF1ZXN0aW9uSWQ6IHN0cmluZyB9IHwgeyBraW5kOiBcIm5leHQtYnV0dG9uXCIgfSxcbiAgKSB7XG4gICAgY29uc3QgZmFjdHNDb2xsZWN0ZWQ6IEZhY3RbXSA9IFtdO1xuICAgIGNvbnN0IHsgaWQsIHZhbHVlLCBsYWJlbCB9ID0gYnV0dG9uRHRvO1xuXG4gICAgY29uc3QgeyBkaXYsIHRleHQxIH0gPSBEZWZhdWx0VGhlbWUucmVzcG9uc2VCdXR0b25zO1xuICAgIGlmIChvcHRpb25zLmtpbmQgPT09IFwicmVzcG9uc2UtYnV0dG9uXCIpIHtcbiAgICAgIGNvbnN0IGZhY3Q6IEZhY3QgPSB7XG4gICAgICAgIGtpbmQ6IFwibnVtZXJpYy1mYWN0XCIsXG4gICAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICByZWZlcmVuY2VJZDogb3B0aW9ucy5xdWVzdGlvbklkLFxuICAgICAgICByZWZlcmVuY2VMYWJlbDogXCJRdWVzdGlvbklkOiBcIiArIG9wdGlvbnMucXVlc3Rpb25JZCxcbiAgICAgIH07XG4gICAgICBmYWN0c0NvbGxlY3RlZC5wdXNoKGZhY3QpO1xuICAgIH1cblxuICAgIGNvbnN0IG9uQ2xpY2tIYW5kbGVyOiBEQ29tbWFuZCA9IHtcbiAgICAgIGtpbmQ6IFwiRU5HSU5FX0xFQVZFX1BBR0VfQ09NTUFORFwiLFxuICAgICAgdGFyZ2V0OiBcIkVOR0lORVwiLFxuICAgICAgdGFyZ2V0SWQ6IFwiRU5HSU5FXCIsXG4gICAgICBwYXlsb2FkOiB7XG4gICAgICAgIHBhZ2VJZCxcbiAgICAgICAgZmFjdHNDb2xsZWN0ZWQsXG4gICAgICB9LFxuICAgIH07XG4gICAgY29uc3QgYnRuOiBERGl2RHRvID0ge1xuICAgICAgaWQsXG4gICAgICBfdGFnOiBcImRpdlwiLFxuICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAge1xuICAgICAgICAgIF90YWc6IFwicFwiLFxuICAgICAgICAgIGlkOiBVLnJhbmRvbVN0cmluZygzMCksXG4gICAgICAgICAgdGV4dDogbGFiZWwsXG4gICAgICAgICAgc3R5bGU6IHRleHQxLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIG9uU3RhdGVDaGFuZ2U6IFtcbiAgICAgICAge1xuICAgICAgICAgIHF1ZXJ5TmFtZTogRFN0YXRlUHJvcHMuX1F1ZXJpZXMuZGlzYWJsZVVzZXJJbnB1dFF1ZXJ5Lm5hbWUsXG4gICAgICAgICAgd2hlbkZhbHNlOiBbLi4uVGhlbWVVdGlscy5lbmFibGVDbGlja0NvbW1hbmRzKGlkLCBkaXYuY3NzRW5hYmxlZCldLFxuICAgICAgICAgIHdoZW5UcnVlOiBbLi4uVGhlbWVVdGlscy5kaXNhYmxlQ2xpY2tDb21tYW5kcyhpZCwgZGl2LmNzc0Rpc2FibGVkKV0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgc3R5bGU6IHsgLi4uZGl2LmNzcywgLi4uZGl2LmNzc0VuYWJsZWQgfSxcbiAgICAgIG9uQ2xpY2s6IFtvbkNsaWNrSGFuZGxlcl0sXG4gICAgfTtcbiAgICBpZiAob3B0aW9ucy5raW5kID09PSBcIm5leHQtYnV0dG9uXCIpIHtcbiAgICAgIGJ0bi5zdHlsZS54ID0gNTA7XG4gICAgICBidG4uc3R5bGUueSA9IDg7XG4gICAgICBidG4uc3R5bGUudHJhbnNmb3JtID0gXCJ0cmFuc2xhdGUoLTUwJSwgMCUpXCI7XG4gICAgfVxuICAgIHJldHVybiBidG47XG4gIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IEJ1aWxkZXJQYWdlRHRvLCBCdWlsZGVyUGFnZVR5cGUgfSBmcm9tIFwiLi9CdWlsZGVyLXBhZ2VcIjtcbmltcG9ydCB7IEJ1aWxkZXJQYWdlIH0gZnJvbSBcIi4vQnVpbGRlci1wYWdlXCI7XG5pbXBvcnQgeyBSdWxlSW5wdXQgfSBmcm9tIFwiLi9ydWxlYnVpbGRlci9SdWxlSW5wdXRcIjtcbmltcG9ydCB0eXBlIHsgUXVlc3Rpb25WYXJpYWJsZSB9IGZyb20gXCIuL3J1bGVidWlsZGVyL1J1bGVWYXJpYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21WYXJpYWJsZSB9IGZyb20gXCIuL3J1bGVidWlsZGVyXCI7XG5pbXBvcnQgdHlwZSB7IEV4Y2x1ZGVCeVBhZ2VBY3Rpb24sIEV4Y2x1ZGVCeVRhZ0FjdGlvbiwgSnVtcFRvUGFnZUFjdGlvbiB9IGZyb20gXCIuL3J1bGVidWlsZGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJUYWdEdG8gfSBmcm9tIFwiLi9CdWlsZGVyVGFnXCI7XG5pbXBvcnQgeyBCdWlsZGVyVGFnLCBUYWdDb2xsZWN0aW9uIH0gZnJvbSBcIi4vQnVpbGRlclRhZ1wiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGVyUnVsZUR0byB9IGZyb20gXCIuL3J1bGVidWlsZGVyXCI7XG5pbXBvcnQgeyBCdWlsZGVyUnVsZSB9IGZyb20gXCIuL3J1bGVidWlsZGVyXCI7XG5pbXBvcnQgeyBEZWZhdWx0VGhlbWVDb21waWxlciB9IGZyb20gXCIuL3RoZW1lL2RlZmF1bHQtdGhlbWUtY29tcGlsZXJcIjtcbmltcG9ydCB7IEltYWdlRmlsZSB9IGZyb20gXCIuL21lZGlhLWZpbGVzXCI7XG5pbXBvcnQgeyBTY2hlbWFEdG8sIERVdGlsIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcbmNvbnN0IFUgPSBEVXRpbDtcbi8vIHR5cGUgU2NoZW1hSGFzaCA9IHN0cmluZyAmIHsgX19NRDVfX0hBU0g6IHRydWUgfTtcbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlclNjaGVtYUR0byB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByZWZpeDogc3RyaW5nO1xuICByZWFkb25seSBtYWluSW1hZ2U6IEltYWdlRmlsZSB8IGZhbHNlO1xuICByZWFkb25seSBiYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBwYWdlczogQnVpbGRlclBhZ2VEdG9bXTtcbiAgcmVhZG9ubHkgYmFzZUhlaWdodDogbnVtYmVyO1xuICByZWFkb25seSBiYXNlV2lkdGg6IG51bWJlcjtcbiAgcmVhZG9ubHkgcnVsZXM6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclJ1bGVEdG8+O1xuICByZWFkb25seSB0YWdzOiBSZWFkb25seUFycmF5PEJ1aWxkZXJUYWdEdG8+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVtYUJ1aWxkT3V0cHV0IHtcbiAgc2NoZW1hOiBTY2hlbWFEdG87XG4gIGNvZGVib29rOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBzY2hlbWFDb25maWc6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZGVyU2NoZW1hIHtcbiAgYmFzZUhlaWdodCA9IDEzMDA7XG4gIGJhc2VXaWR0aCA9IDEwMjQ7XG4gIGJhY2tncm91bmRDb2xvciA9IFwiIzAwMDAwMFwiO1xuICBwYWdlczogQnVpbGRlclBhZ2VbXSA9IFtdO1xuICBtYWluSW1hZ2U6IEltYWdlRmlsZSB8IGZhbHNlID0gZmFsc2U7XG4gIHByaXZhdGUgX3J1bGVzOiBCdWlsZGVyUnVsZVtdID0gW107XG4gIGdldCBydWxlcygpOiBSZWFkb25seUFycmF5PEJ1aWxkZXJSdWxlPiB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9ydWxlc107XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF90YWdDb2xsZWN0aW9uOiBUYWdDb2xsZWN0aW9uID0gVGFnQ29sbGVjdGlvbi5jcmVhdGUoKTtcbiAgZ2V0IHRhZ3MoKTogUmVhZG9ubHlBcnJheTxCdWlsZGVyVGFnPiB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl90YWdDb2xsZWN0aW9uXTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZShpZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBCdWlsZGVyU2NoZW1hKGlkLCBuYW1lLCBwcmVmaXgpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBmcm9tSnNvbihkdG86IEJ1aWxkZXJTY2hlbWFEdG8pOiBCdWlsZGVyU2NoZW1hIHtcbiAgICBjb25zdCBzY2hlbWEgPSBuZXcgQnVpbGRlclNjaGVtYShkdG8uaWQsIGR0by5uYW1lLCBkdG8ucHJlZml4KTtcbiAgICBjb25zdCBwYWdlcyA9IGR0by5wYWdlcy5tYXAoQnVpbGRlclBhZ2UuZnJvbUpzb24pO1xuICAgIHNjaGVtYS5fdGFnQ29sbGVjdGlvbi5pbml0KGR0by50YWdzKTtcbiAgICBzY2hlbWEuYmFja2dyb3VuZENvbG9yID0gZHRvLmJhY2tncm91bmRDb2xvcjtcbiAgICBzY2hlbWEuYmFzZUhlaWdodCA9IGR0by5iYXNlSGVpZ2h0O1xuICAgIHNjaGVtYS5iYXNlV2lkdGggPSBkdG8uYmFzZVdpZHRoO1xuICAgIHNjaGVtYS5wYWdlcyA9IHBhZ2VzO1xuICAgIHNjaGVtYS5iYWNrZ3JvdW5kQ29sb3IgPSBkdG8uYmFja2dyb3VuZENvbG9yO1xuICAgIHNjaGVtYS5tYWluSW1hZ2UgPSBkdG8ubWFpbkltYWdlID8/IGZhbHNlO1xuICAgIGNvbnN0IHJ1bGVzRHRvID0gZHRvLnJ1bGVzID8/IFtdO1xuICAgIGNvbnN0IHJ1bGVJbnB1dCA9IHNjaGVtYS5nZXRSdWxlSW5wdXQoKTtcbiAgICBzY2hlbWEuX3J1bGVzID0gcnVsZXNEdG8ubWFwKChyKSA9PiBCdWlsZGVyUnVsZS5mcm9tRHRvKHIsIHJ1bGVJbnB1dCkpO1xuICAgIHJldHVybiBzY2hlbWE7XG4gIH1cblxuICB0b0pzb24oKTogQnVpbGRlclNjaGVtYUR0byB7XG4gICAgY29uc3QgcGFnZXMgPSB0aGlzLnBhZ2VzLm1hcCgocCkgPT4gcC50b0pzb24oKSk7XG4gICAgY29uc3QgdGFncyA9IHRoaXMuX3RhZ0NvbGxlY3Rpb24udG9Kc29uKCk7XG4gICAgY29uc3QgcnVsZXMgPSB0aGlzLl9ydWxlcy5tYXAoKHJ1bGUpID0+IHJ1bGUudG9Kc29uKCkpO1xuXG4gICAgY29uc3QgZHRvOiBCdWlsZGVyU2NoZW1hRHRvID0ge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLmJhY2tncm91bmRDb2xvcixcbiAgICAgIGJhc2VIZWlnaHQ6IHRoaXMuYmFzZUhlaWdodCxcbiAgICAgIGJhc2VXaWR0aDogdGhpcy5iYXNlV2lkdGgsXG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIHBhZ2VzLFxuICAgICAgcnVsZXMsXG4gICAgICB0YWdzLFxuICAgICAgbWFpbkltYWdlOiB0aGlzLm1haW5JbWFnZSxcbiAgICAgIHByZWZpeDogdGhpcy5wcmVmaXgsXG4gICAgfTtcbiAgICByZXR1cm4gZHRvO1xuICB9XG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGlkOiBzdHJpbmcsXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyxcbiAgICBwdWJsaWMgcHJlZml4OiBzdHJpbmcsXG4gICkge31cblxuICBhZGRQYWdlKHR5cGU6IEJ1aWxkZXJQYWdlVHlwZSwgYXRJbmRleCA9IC0xKTogQnVpbGRlclBhZ2Uge1xuICAgIGNvbnN0IG5ld1BhZ2UgPSBCdWlsZGVyUGFnZS5jcmVhdGUodHlwZSwgXCJcIik7XG4gICAgaWYgKGF0SW5kZXggPj0gMCAmJiBhdEluZGV4IDwgdGhpcy5wYWdlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMucGFnZXMuc3BsaWNlKGF0SW5kZXgsIDAsIG5ld1BhZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhZ2VzLnB1c2gobmV3UGFnZSk7XG4gICAgfVxuICAgIHJldHVybiBuZXdQYWdlO1xuICB9XG5cbiAgaW5zZXJ0UGFnZShwYWdlOiBCdWlsZGVyUGFnZSwgYXRJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW5zZXJ0UGFnZUF0SW5kZXgocGFnZSwgYXRJbmRleCk7XG4gIH1cblxuICBwcml2YXRlIGluc2VydFBhZ2VBdEluZGV4KHBhZ2U6IEJ1aWxkZXJQYWdlLCBhdEluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBpc1ZhbGlkSW5kZXggPSBVLmlzSW5SYW5nZSgwLCB0aGlzLnBhZ2VzLmxlbmd0aCAtIDEpO1xuICAgIGlmICghaXNWYWxpZEluZGV4KGF0SW5kZXgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGV4aXN0cyA9ICEhdGhpcy5wYWdlcy5maW5kKChwKSA9PiBwLmlkID09PSBwYWdlLmlkKTtcbiAgICBpZiAoZXhpc3RzKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMucGFnZXMuc3BsaWNlKGF0SW5kZXgsIDAsIHBhZ2UpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYWRkUnVsZSgpIHtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMuZ2V0UnVsZUlucHV0KCk7XG4gICAgY29uc3QgY291bnQgPSB0aGlzLl9ydWxlcy5sZW5ndGggKyAxO1xuICAgIGNvbnN0IG5hbWUgPSBcIlJ1bGUtbnVtYmVyOiBcIiArIGNvdW50O1xuICAgIGNvbnN0IHJ1bGUgPSBCdWlsZGVyUnVsZS5mcm9tRHRvKFxuICAgICAge1xuICAgICAgICBjb25kaXRpb25zOiBbXSxcbiAgICAgICAgdHlwZTogXCJhbGxcIixcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZXhjbHVkZVRhZ3M6IFtdLFxuICAgICAgICBqdW1wVG9QYWdlOiBmYWxzZSxcbiAgICAgICAgZXhjbHVkZVBhZ2VzOiBbXSxcbiAgICAgIH0sXG4gICAgICBpbnB1dCxcbiAgICApO1xuICAgIHRoaXMuX3J1bGVzLnB1c2gocnVsZSk7XG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cbiAgZGVsZXRlUnVsZShydWxlOiBCdWlsZGVyUnVsZSkge1xuICAgIHRoaXMuX3J1bGVzID0gdGhpcy5fcnVsZXMuZmlsdGVyKChyKSA9PiByICE9PSBydWxlKTtcbiAgfVxuXG4gIG1vdmVQYWdlKHBhZ2U6IEJ1aWxkZXJQYWdlLCB0b0luZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMucGFnZXMuaW5kZXhPZihwYWdlKTtcbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGlzVmFsaWRJbmRleCA9IFUuaXNJblJhbmdlKDAsIHRoaXMucGFnZXMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKCFpc1ZhbGlkSW5kZXgodG9JbmRleCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coJ01vdmluZyBmcm9tIDonICsgaW5kZXggKyAnIHRvOiAnICsgdG9JbmRleCk7XG4gICAgdGhpcy5wYWdlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMucGFnZXMuc3BsaWNlKHRvSW5kZXgsIDAsIHBhZ2UpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZGVsZXRlUGFnZShwYWdlOiBCdWlsZGVyUGFnZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZpbHRlcmVkID0gdGhpcy5wYWdlcy5maWx0ZXIoKHApID0+IHAgIT09IHBhZ2UpO1xuICAgIGNvbnN0IGRpZERlbGV0ZSA9IGZpbHRlcmVkLmxlbmd0aCA9PT0gdGhpcy5wYWdlcy5sZW5ndGggLSAxO1xuICAgIHRoaXMucGFnZXMgPSBmaWx0ZXJlZDtcbiAgICByZXR1cm4gZGlkRGVsZXRlO1xuICB9XG5cbiAgcmVldmFsdWF0ZVJ1bGVzKCkge1xuICAgIGNvbnNvbGUubG9nKFwiUmVldmFsdWF0aW9uZyBydWxlc0lucHV0XCIpO1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5nZXRSdWxlSW5wdXQoKTtcbiAgICBjb25zdCBydWxlc0R0byA9IHRoaXMuX3J1bGVzLm1hcCgocikgPT4gci50b0pzb24oKSk7XG4gICAgdGhpcy5fcnVsZXMgPSBydWxlc0R0by5tYXAoKGR0bykgPT4gQnVpbGRlclJ1bGUuZnJvbUR0byhkdG8sIGlucHV0KSk7XG4gIH1cblxuICBnZXRSdWxlSW5wdXQoKTogUnVsZUlucHV0IHtcbiAgICBjb25zdCBxVmFyczogUXVlc3Rpb25WYXJpYWJsZVtdID0gW107XG4gICAgY29uc3QgY1ZhcnM6IEN1c3RvbVZhcmlhYmxlW10gPSBbXTtcbiAgICBjb25zdCBwYWdlSWRBY3Rpb25zOiBFeGNsdWRlQnlQYWdlQWN0aW9uW10gPSBbXTtcbiAgICBjb25zdCB0YWdBY3Rpb25zOiBFeGNsdWRlQnlUYWdBY3Rpb25bXSA9IHRoaXMudGFncy5tYXAoKHQpID0+IHtcbiAgICAgIGNvbnN0IHRhZyA9IHQudGFnVGV4dDtcbiAgICAgIGNvbnN0IHBhZ2VDb3VudCA9IHRoaXMucGFnZXMucmVkdWNlKChjb3VudCwgY3VycikgPT4ge1xuICAgICAgICByZXR1cm4gY3Vyci50YWdzLmluY2x1ZGVzKHRhZykgPyBjb3VudCArIDEgOiBjb3VudDtcbiAgICAgIH0sIDApO1xuICAgICAgY29uc3QgZXhjbHVkZUJ5VGFnRHRvOiBFeGNsdWRlQnlUYWdBY3Rpb24gPSB7XG4gICAgICAgIGtpbmQ6IFwiZXhjbHVkZS1ieS10YWdcIixcbiAgICAgICAgcGFnZUNvdW50LFxuICAgICAgICB0YWcsXG4gICAgICAgIGRlc2NyaXB0aW9uOiB0LnRhZ0Rlc2NyaXB0aW9uLFxuICAgICAgfTtcbiAgICAgIHJldHVybiBleGNsdWRlQnlUYWdEdG87XG4gICAgfSk7XG4gICAgY29uc3QganVtcEFjdGlvbnM6IEp1bXBUb1BhZ2VBY3Rpb25bXSA9IFtdO1xuICAgIGNvbnN0IHByZWZpeCA9IFwiXCI7XG4gICAgdGhpcy5wYWdlcy5mb3JFYWNoKChwYWdlLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgcGFnZVZhcmlhYmxlcyA9IHBhZ2UuZ2V0UXVlc3Rpb25WYXJpYWJsZXMocHJlZml4LCBpbmRleCk7XG4gICAgICBxVmFycy5wdXNoKC4uLnBhZ2VWYXJpYWJsZXMpO1xuICAgICAgY29uc3QgbWFpblRleHQgPSBwYWdlLm1haW5UZXh0LnRleHQ7XG4gICAgICBjb25zdCBqdW1wQWN0aW9uOiBKdW1wVG9QYWdlQWN0aW9uID0ge1xuICAgICAgICBraW5kOiBcImp1bXAtdG8tcGFnZVwiLFxuICAgICAgICBwYWdlSWQ6IHBhZ2UuaWQsXG4gICAgICAgIHBhZ2VOdW1iZXI6IGluZGV4LFxuICAgICAgICBtYWluVGV4dDogcGFnZS5tYWluVGV4dC50ZXh0LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4Y2x1ZGVQYWdlQWN0aW9uOiBFeGNsdWRlQnlQYWdlQWN0aW9uID0ge1xuICAgICAgICBraW5kOiBcImV4Y2x1ZGUtYnktcGFnZUlkXCIsXG4gICAgICAgIHBhZ2VJZDogcGFnZS5pZCxcbiAgICAgICAgcGFnZU51bWJlcjogaW5kZXgsXG4gICAgICAgIG1haW5UZXh0LFxuICAgICAgfTtcbiAgICAgIGp1bXBBY3Rpb25zLnB1c2goanVtcEFjdGlvbik7XG4gICAgICBwYWdlSWRBY3Rpb25zLnB1c2goZXhjbHVkZVBhZ2VBY3Rpb24pO1xuICAgIH0pO1xuICAgIGNvbnN0IHJ1bGVJbnB1dCA9IG5ldyBSdWxlSW5wdXQocVZhcnMsIGNWYXJzLCBwYWdlSWRBY3Rpb25zLCB0YWdBY3Rpb25zLCBqdW1wQWN0aW9ucyk7XG5cbiAgICByZXR1cm4gcnVsZUlucHV0O1xuICB9XG5cbiAgZGVsZXRlVGFncyh0YWdzOiBSZWFkb25seUFycmF5PEJ1aWxkZXJUYWc+KSB7XG4gICAgdGhpcy5fdGFnQ29sbGVjdGlvbi5kZWxldGVBbGwodGFncyk7XG4gIH1cblxuICBhZGRUYWcoYnVpbGRlclRhZzogQnVpbGRlclRhZykge1xuICAgIHRoaXMuX3RhZ0NvbGxlY3Rpb24uYWRkKGJ1aWxkZXJUYWcpO1xuICB9XG5cbiAgLy8gZ2V0SGFzaCgpOiBTY2hlbWFIYXNoIHtcbiAgLy8gICAgIGNvbnN0IG1kNSA9IE1ENSh0aGlzLnRvSnNvbigpKTtcbiAgLy8gICAgIHJldHVyblxuICAvLyB9XG5cbiAgLy8gaGFzQ2hhbmdlZChoYXNoOiBTY2hlbWFIYXNoKTogYm9vbGVhbiB7XG4gIC8vICAgICByZXR1cm4gaGFzaCAhPT0gdGhpcy5nZXRIYXNoKCk7XG4gIC8vIH1cblxuICBwcml2YXRlIGdldFF1ZXN0aW9uVmFyaWFibGVzKHdpdGhNb2R1bGVQcmVmaXggPSBmYWxzZSk6IFJlYWRvbmx5QXJyYXk8UXVlc3Rpb25WYXJpYWJsZT4ge1xuICAgIGNvbnN0IHByZWZpeCA9IHdpdGhNb2R1bGVQcmVmaXggPyB0aGlzLnByZWZpeCA6IFwiXCI7XG4gICAgY29uc3QgYWxsID0gdGhpcy5wYWdlc1xuICAgICAgLm1hcCgocGFnZSwgaW5kZXgpID0+IHtcbiAgICAgICAgcmV0dXJuIHBhZ2UuZ2V0UXVlc3Rpb25WYXJpYWJsZXMocHJlZml4LCBpbmRleCk7XG4gICAgICB9KVxuICAgICAgLmZsYXQoMSk7XG4gICAgcmV0dXJuIGFsbDtcbiAgfVxuXG4gIGNvbXBpbGUoKTogU2NoZW1hQnVpbGRPdXRwdXQge1xuICAgIGNvbnN0IG1vZHVsZUR0byA9IHRoaXMudG9Kc29uKCk7XG4gICAgY29uc3QgaW1wID0gbmV3IERlZmF1bHRUaGVtZUNvbXBpbGVyKCk7XG4gICAgY29uc3Qgc2NoZW1hID0gaW1wLmNvbXBpbGUobW9kdWxlRHRvKTtcblxuICAgIHJldHVybiB7IGNvZGVib29rOiB7fSwgc2NoZW1hLCBzY2hlbWFDb25maWc6IHt9IH07XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBCdWlsZGVyT2JqZWN0SWQsIEJ1aWxkZXJPYmplY3QgfSBmcm9tICcuL0J1aWxkZXJPYmplY3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJUZXh0RHRvIHtcbiAgcmVhZG9ubHkgaWQ6IEJ1aWxkZXJPYmplY3RJZC5UZXh0SUQ7XG4gIHRleHQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICB0cmFuc2xhdGlvblJlcXVpcmVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgQnVpbGRlclRleHQgZXh0ZW5kcyBCdWlsZGVyT2JqZWN0PCdidWlsZGVyLXRleHQnLCBCdWlsZGVyVGV4dER0bz4ge1xuICByZWFkb25seSBvYmplY3RUeXBlID0gJ2J1aWxkZXItdGV4dCc7XG4gIGlkOiBCdWlsZGVyT2JqZWN0SWQuVGV4dElEO1xuICB0ZXh0ID0gJyc7XG4gIG5hbWUgPSAnJztcbiAgdHJhbnNsYXRlUmVxdWlyZWQgPSBmYWxzZTtcbiAgLy8gYXVkaW86IHtpZDogQn1cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihkdG86IEJ1aWxkZXJUZXh0RHRvKSB7XG4gICAgc3VwZXIoZHRvKTtcbiAgICB0aGlzLmlkID0gZHRvLmlkO1xuICAgIHRoaXMudHJhbnNsYXRlUmVxdWlyZWQgPSBkdG8udHJhbnNsYXRpb25SZXF1aXJlZDtcbiAgICB0aGlzLm5hbWUgPSBkdG8ubmFtZTtcbiAgICB0aGlzLnRleHQgPSBkdG8udGV4dDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlKG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGlkID0gQnVpbGRlck9iamVjdElkLnRleHRJZCgpO1xuICAgIGNvbnN0IGR0bzogQnVpbGRlclRleHREdG8gPSB7XG4gICAgICBpZCxcbiAgICAgIG5hbWUsXG4gICAgICB0ZXh0OiAnJyxcbiAgICAgIHRyYW5zbGF0aW9uUmVxdWlyZWQ6IGZhbHNlXG4gICAgfTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBCdWlsZGVyVGV4dChkdG8pO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGZyb21Kc29uKGR0bzogQnVpbGRlclRleHREdG8pIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBCdWlsZGVyVGV4dChkdG8pO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIGNsb25lKCk6IEJ1aWxkZXJUZXh0RHRvIHtcbiAgICBjb25zdCBuZXdJZCA9IEJ1aWxkZXJPYmplY3RJZC50ZXh0SWQoKTtcbiAgICBjb25zdCBkdG8gPSB0aGlzLnRvSnNvbigpO1xuICAgIGNvbnN0IHdpdGhOZXdJZDogQnVpbGRlclRleHREdG8gPSB7IC4uLmR0bywgaWQ6IG5ld0lkIH07XG4gICAgcmV0dXJuIHdpdGhOZXdJZDtcbiAgfVxuXG4gIHRvSnNvbigpOiBCdWlsZGVyVGV4dER0byB7XG4gICAgY29uc3QgZHRvOiBCdWlsZGVyVGV4dER0byA9IHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgdGV4dDogdGhpcy50ZXh0LFxuICAgICAgdHJhbnNsYXRpb25SZXF1aXJlZDogdGhpcy50cmFuc2xhdGVSZXF1aXJlZFxuICAgIH07XG4gICAgcmV0dXJuIGR0bztcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFBLFNBQVMsYUFBYTtBQUV0QixJQUFNLElBQUk7QUFrQkgsSUFBVTtBQUFBLENBQVYsQ0FBVUEscUJBQVY7QUFXRSxFQUFNQSxpQkFBQSxjQUFjLE1BQWE7QUFDdEMsV0FBTyxTQUFTLGFBQWE7QUFBQSxFQUMvQjtBQUVPLEVBQU1BLGlCQUFBLGFBQWEsTUFBa0I7QUFDMUMsV0FBTyxTQUFTLG1CQUFtQjtBQUFBLEVBQ3JDO0FBQ08sRUFBTUEsaUJBQUEsU0FBUyxNQUFjO0FBQ2xDLFdBQU8sU0FBUyxjQUFjO0FBQUEsRUFDaEM7QUFFTyxFQUFNQSxpQkFBQSxtQkFBbUIsTUFBd0I7QUFDdEQsV0FBTyxTQUFTLHlCQUF5QjtBQUFBLEVBQzNDO0FBQ08sRUFBTUEsaUJBQUEsYUFBYSxNQUFrQjtBQUMxQyxXQUFPLFNBQVMsa0JBQWtCO0FBQUEsRUFDcEM7QUFDTyxFQUFNQSxpQkFBQSxTQUFTLE1BQWM7QUFDbEMsV0FBTyxTQUFTLGNBQWM7QUFBQSxFQUNoQztBQUVBLFFBQU0sV0FBVyxDQUFDLFNBQW9DO0FBQ3BELFVBQU0sS0FBSyxFQUFFLGFBQWEsRUFBRTtBQUM1QixXQUFPLE9BQU8sTUFBTTtBQUFBLEVBQ3RCO0FBQUEsR0FuQ2U7QUFzQ1YsSUFBZSxnQkFBZixNQUEwRTtBQUFBLEVBSzVEO0FBQUEsRUFDVCxZQUFZLEtBQVU7QUFDOUIsU0FBSyxjQUFjO0FBQUEsRUFFckI7QUFDRjs7O0FDcEVPLElBQU0sV0FBVztBQUFBLEVBQ3RCLGNBQ0U7QUFBQSxFQUNGLFVBQ0U7QUFBQSxFQUNGLHVCQUNFO0FBQUEsRUFFRixzQkFDRTtBQUFBLEVBQ0YsbUJBQ0U7QUFBQSxFQUNGLGNBQ0U7QUFBQSxFQUNGLG1CQUNFO0FBQUEsRUFFRixlQUNFO0FBQUEsRUFDRixTQUNFO0FBQUEsRUFDRixpQkFDRTtBQUFBLEVBRUYsY0FDRTtBQUFBLEVBQ0YsYUFDRTtBQUNKOzs7QUNzQkEsSUFBVTtBQUFBLENBQVYsQ0FBVUMsd0JBQVY7QUFDRSxRQUFNLFFBQVE7QUFDZCxRQUFNLFNBQVM7QUFDZixRQUFNLFNBQVM7QUFDZixRQUFNLE1BQU07QUFDWixRQUFNLGFBQWE7QUFDbkIsUUFBTSxRQUFRO0FBQ2QsUUFBTSxPQUFPO0FBQ2IsUUFBTSxZQUFZO0FBQ2xCLFFBQU0sbUJBQW1CO0FBQ3pCLFFBQU0sb0JBQW9CO0FBQzFCLFFBQU0sbUJBQTBDO0FBQ2hELFFBQU0sYUFBYTtBQUNuQixRQUFNLGtCQUFrQjtBQUN4QixRQUFNLGNBQW9DO0FBQzFDLFFBQU0sWUFBOEI7QUFFN0IsRUFBTUEsb0JBQUEsYUFBYSxPQUEyQjtBQUFBLElBQ25ELE1BQU07QUFBQSxJQUNOLEtBQUs7QUFBQSxNQUNILEtBQUs7QUFBQSxRQUNILGlCQUFpQjtBQUFBLFFBQ2pCLGFBQWE7QUFBQSxRQUNiLFdBQVc7QUFBQSxRQUNYLFVBQVUsRUFBRSxPQUFPLE1BQU0sT0FBTyxVQUFVO0FBQUEsUUFDMUMsYUFBYSxFQUFFLE9BQU8sTUFBTSxPQUFPLGlCQUFpQjtBQUFBLFFBQ3BELGFBQWE7QUFBQSxRQUNiLGNBQWMsRUFBRSxPQUFPLG1CQUFtQixPQUFPLEtBQUs7QUFBQSxRQUN0RCxTQUFTLEVBQUUsT0FBTyxNQUFNLE9BQU8sR0FBRztBQUFBLFFBQ2xDLEdBQUc7QUFBQSxRQUNILEdBQUc7QUFBQSxRQUNILEdBQUc7QUFBQSxRQUNILEdBQUc7QUFBQSxRQUNILFdBQVc7QUFBQSxNQUNiO0FBQUEsTUFDQSxhQUFhLEVBQUUsU0FBUyxLQUFLLFFBQVEsY0FBYztBQUFBLE1BQ25ELFlBQVksRUFBRSxTQUFTLEdBQUcsUUFBUSxVQUFVO0FBQUEsSUFDOUM7QUFBQSxJQUNBLE9BQU87QUFBQSxNQUNMLEdBQUc7QUFBQSxNQUNILFdBQVc7QUFBQSxNQUNYLFdBQVc7QUFBQSxNQUNYLFVBQVUsRUFBRSxPQUFPLE1BQU0sT0FBTyxVQUFVO0FBQUEsTUFDMUMsR0FBRztBQUFBLE1BQ0gsR0FBRztBQUFBLE1BQ0gsWUFBWTtBQUFBLE1BQ1osV0FBVztBQUFBLElBQ2I7QUFBQSxFQUNGO0FBQUEsR0FoRFE7QUFtREgsSUFBTSxlQUE4QjtBQUFBLEVBQ3pDLE1BQU07QUFBQSxFQUNOLGFBQWE7QUFBQSxJQUNYLFlBQVk7QUFBQSxNQUNWLFNBQVMsU0FBUztBQUFBLE1BQ2xCLEtBQUssRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUU7QUFBQSxNQUMvQixhQUFhLEVBQUUsU0FBUyxLQUFLLFFBQVEsY0FBYztBQUFBLE1BQ25ELFlBQVksRUFBRSxTQUFTLEtBQUssUUFBUSxVQUFVO0FBQUEsSUFDaEQ7QUFBQSxJQUNBLGFBQWE7QUFBQSxNQUNYLFNBQVMsU0FBUztBQUFBLE1BQ2xCLEtBQUssRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUU7QUFBQSxNQUMvQixhQUFhLEVBQUUsU0FBUyxLQUFLLFFBQVEsY0FBYztBQUFBLE1BQ25ELFlBQVksRUFBRSxTQUFTLEtBQUssUUFBUSxVQUFVO0FBQUEsSUFDaEQ7QUFBQSxJQUNBLGNBQWMsRUFBRSxLQUFLLEVBQUUsR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEVBQUU7QUFBQSxFQUN0RDtBQUFBLEVBQ0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRSxFQUFFO0FBQUEsRUFDeEMsVUFBVTtBQUFBLElBQ1IsU0FBUztBQUFBLE1BQ1AsTUFBTTtBQUFBLFFBQ0osS0FBSztBQUFBLFVBQ0gsR0FBRztBQUFBLFVBQ0gsR0FBRztBQUFBLFVBQ0gsR0FBRztBQUFBLFVBQ0gsV0FBVztBQUFBLFVBQ1gsV0FBVztBQUFBLFVBQ1gsVUFBVSxFQUFFLE9BQU8sTUFBTSxPQUFPLEdBQUc7QUFBQSxRQUNyQztBQUFBLFFBQ0EsYUFBYSxDQUFDO0FBQUEsUUFDZCxZQUFZLENBQUM7QUFBQSxNQUNmO0FBQUEsTUFDQSxPQUFPO0FBQUEsUUFDTCxLQUFLO0FBQUEsVUFDSCxHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsVUFDSCxRQUFRO0FBQUEsVUFDUixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsUUFDZDtBQUFBLFFBQ0EsYUFBYSxFQUFFLFNBQVMsS0FBSyxRQUFRLGNBQWM7QUFBQSxRQUNuRCxZQUFZLEVBQUUsU0FBUyxLQUFLLFFBQVEsVUFBVTtBQUFBLE1BQ2hEO0FBQUEsSUFDRjtBQUFBLElBQ0EsV0FBVztBQUFBLE1BQ1QsTUFBTTtBQUFBLFFBQ0osS0FBSztBQUFBLFVBQ0gsR0FBRztBQUFBLFVBQ0gsR0FBRztBQUFBLFVBQ0gsR0FBRztBQUFBLFVBQ0gsV0FBVztBQUFBLFVBQ1gsV0FBVztBQUFBLFVBQ1gsVUFBVSxFQUFFLE9BQU8sTUFBTSxPQUFPLEdBQUc7QUFBQSxRQUNyQztBQUFBLFFBQ0EsYUFBYSxDQUFDO0FBQUEsUUFDZCxZQUFZLENBQUM7QUFBQSxNQUNmO0FBQUEsTUFDQSxPQUFPO0FBQUEsUUFDTCxLQUFLO0FBQUEsVUFDSCxHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsVUFDSCxRQUFRO0FBQUEsVUFDUixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsUUFDZDtBQUFBLFFBQ0EsYUFBYSxFQUFFLFNBQVMsS0FBSyxRQUFRLGNBQWM7QUFBQSxRQUNuRCxZQUFZLEVBQUUsU0FBUyxLQUFLLFFBQVEsVUFBVTtBQUFBLE1BQ2hEO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLGlCQUFpQixtQkFBbUIsV0FBVztBQUFBLEVBQy9DLGlCQUFpQixtQkFBbUIsV0FBVztBQUNqRDs7O0FDcktPLElBQU0sZ0JBQU4sTUFBTSx1QkFBc0IsY0FBMkQ7QUFBQSxFQUNuRixhQUFhO0FBQUEsRUFDdEIsUUFBNEIsYUFBYTtBQUFBLEVBRXpDO0FBQUEsRUFDQTtBQUFBLEVBQ0EsUUFBUTtBQUFBLEVBQ0Esa0JBQXFDO0FBQUEsRUFDN0MsSUFBSSxpQkFBaUI7QUFDbkIsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBLEVBQ0EsSUFBSSxlQUFlLFdBQThCO0FBQy9DLFNBQUssa0JBQWtCO0FBQUEsRUFDekI7QUFBQSxFQUVRLFlBQVksS0FBdUI7QUFDekMsVUFBTSxHQUFHO0FBQ1QsU0FBSyxLQUFLLElBQUk7QUFDZCxTQUFLLFFBQVEsSUFBSTtBQUNqQixTQUFLLFFBQVEsSUFBSTtBQUFBLEVBRW5CO0FBQUEsRUFDQSxPQUFjLE9BQU8sT0FBZSxPQUFlO0FBQ2pELFVBQU0sS0FBSyxnQkFBZ0IsaUJBQWlCO0FBQzVDLFVBQU0sTUFBd0I7QUFBQSxNQUM1QjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUNBLFVBQU0sV0FBVyxJQUFJLGVBQWMsR0FBRztBQUN0QyxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBRUEsT0FBYyxTQUFTLEtBQXVCO0FBQzVDLFVBQU0sV0FBVyxJQUFJLGVBQWMsR0FBRztBQUN0QyxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBRUEsU0FBMkI7QUFDekIsVUFBTSxNQUF3QjtBQUFBLE1BQzVCLElBQUksS0FBSztBQUFBLE1BQ1QsT0FBTyxLQUFLO0FBQUEsTUFDWixPQUFPLEtBQUs7QUFBQSxJQUNkO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUVBLFFBQTBCO0FBQ3hCLFVBQU0sVUFBVSxnQkFBZ0IsaUJBQWlCO0FBQ2pELFVBQU0sTUFBTSxLQUFLLE9BQU87QUFDeEIsVUFBTSxXQUE2QixFQUFFLEdBQUcsS0FBSyxJQUFJLFFBQVE7QUFDekQsV0FBTztBQUFBLEVBQ1Q7QUFDRjs7O0FDdkNPLElBQU0sa0JBQU4sTUFBTSx5QkFBd0IsY0FBc0Q7QUFBQSxFQUM5RSxhQUFhO0FBQUEsRUFDdEI7QUFBQSxFQUNBO0FBQUEsRUFDQSxlQUFlO0FBQUEsRUFDZixVQUEyQixDQUFDO0FBQUEsRUFDNUIsU0FBUztBQUFBLEVBRVQsT0FBTyxTQUFTLENBQUMsU0FBOEI7QUFDM0MsVUFBTSxLQUFLLGdCQUFnQixXQUFXO0FBRXRDLFdBQU8sSUFBSSxpQkFBZ0I7QUFBQSxNQUN2QjtBQUFBLE1BQ0EsT0FBTztBQUFBLE1BQ1AsTUFBTTtBQUFBLE1BQ04sU0FBUyxDQUFDO0FBQUEsTUFDVixRQUFRO0FBQUEsSUFDWixDQUFDO0FBQUEsRUFDTDtBQUFBLEVBRUEsT0FBYyxTQUFTLEtBQTBDO0FBQzdELFVBQU0sV0FBVyxJQUFJLGlCQUFnQixHQUFHO0FBQ3hDLFdBQU87QUFBQSxFQUNYO0FBQUEsRUFFUSxZQUFZLEtBQXlCO0FBQ3pDLFVBQU0sR0FBRztBQUNULFNBQUssS0FBSyxJQUFJO0FBQ2QsU0FBSyxPQUFPLElBQUk7QUFDaEIsU0FBSyxlQUFlLElBQUk7QUFDeEIsU0FBSyxTQUFTLElBQUk7QUFDbEIsU0FBSyxVQUFVLElBQUksUUFBUSxJQUFJLENBQUMsTUFBTSxjQUFjLFNBQVMsQ0FBQyxDQUFDO0FBQUEsRUFDbkU7QUFBQSxFQUVBLFVBQVUsT0FBZSxPQUFlLFVBQVUsSUFBSTtBQUNsRCxVQUFNLFNBQVMsY0FBYyxPQUFPLE9BQU8sS0FBSztBQUNoRCxRQUFJLFdBQVcsS0FBSyxVQUFVLEtBQUssUUFBUSxRQUFRO0FBQy9DLFdBQUssUUFBUSxPQUFPLFNBQVMsR0FBRyxNQUFNO0FBQUEsSUFDMUMsT0FBTztBQUNILFdBQUssUUFBUSxLQUFLLE1BQU07QUFBQSxJQUM1QjtBQUNBLFdBQU87QUFBQSxFQUNYO0FBQUEsRUFFQSxhQUFhLFFBQWdDO0FBQ3pDLFVBQU0sV0FBVyxLQUFLLFFBQVEsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLE9BQU8sRUFBRTtBQUM5RCxVQUFNLFlBQVksU0FBUyxXQUFXLEtBQUssUUFBUSxTQUFTO0FBQzVELFNBQUssVUFBVTtBQUNmLFdBQU87QUFBQSxFQUNYO0FBQUEsRUFFQSxTQUFTO0FBQ0wsVUFBTSxjQUFjLEtBQUssUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUN0RCxVQUFNLE1BQTBCO0FBQUEsTUFDNUIsSUFBSSxLQUFLO0FBQUEsTUFDVCxRQUFRLEtBQUs7QUFBQSxNQUNiLE9BQU8sS0FBSztBQUFBLE1BQ1osTUFBTSxLQUFLO0FBQUEsTUFDWCxTQUFTO0FBQUEsSUFDYjtBQUNBLFdBQU87QUFBQSxFQUNYO0FBQUEsRUFFQSxRQUE0QjtBQUN4QixVQUFNLFVBQVUsZ0JBQWdCLFdBQVc7QUFDM0MsVUFBTSxNQUFNLEtBQUssT0FBTztBQUN4QixVQUFNLGVBQWUsS0FBSyxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDO0FBQ3RELFVBQU0sWUFBZ0M7QUFBQSxNQUNsQyxHQUFHO0FBQUEsTUFDSCxJQUFJO0FBQUEsTUFDSixTQUFTO0FBQUEsSUFDYjtBQUNBLFdBQU87QUFBQSxFQUNYO0FBQ0o7OztBQzFGTyxJQUFNLGtCQUFOLE1BQU0seUJBQXdCLGNBQXVEO0FBQUEsRUFDL0UsYUFBa0M7QUFBQSxFQUMzQyxXQUFXO0FBQUEsRUFDSCxhQUFnQztBQUFBLEVBQ3hDLGdCQUFnQjtBQUFBLEVBRWhCLE9BQU87QUFBQSxFQUVDLFlBQVksS0FBeUI7QUFDekMsVUFBTSxHQUFHO0FBQ1QsU0FBSyxhQUFhLElBQUksYUFBYTtBQUNuQyxTQUFLLFdBQVcsSUFBSSxZQUFZO0FBQ2hDLFNBQUssZ0JBQWdCLElBQUksaUJBQWlCO0FBQzFDLFNBQUssT0FBTyxJQUFJLFFBQVE7QUFBQSxFQUM1QjtBQUFBLEVBRUEsSUFBSSx5QkFBeUI7QUFDekIsVUFBTSxRQUFRLEtBQUs7QUFDbkIsVUFBTSxJQUFJLFFBQVE7QUFDbEIsVUFBTSxZQUFZLEVBQUUsUUFBUSxDQUFDO0FBQzdCLFdBQU87QUFBQSxFQUNYO0FBQUEsRUFFQSxJQUFJLGNBQWM7QUFDZCxRQUFJLENBQUMsS0FBSztBQUFXLGFBQU87QUFFNUIsVUFBTSxNQUFNLEtBQUssVUFBVSxTQUFTLFFBQVEsQ0FBQztBQUM3QyxXQUFPLFNBQVMsTUFBTTtBQUFBLEVBQzFCO0FBQUEsRUFFQSxPQUFPLFNBQVMsS0FBMEM7QUFDdEQsVUFBTSxXQUFXLElBQUksaUJBQWdCLEdBQUc7QUFDeEMsV0FBTztBQUFBLEVBQ1g7QUFBQSxFQUVBLE9BQU8sU0FBUyxNQUFNO0FBQ2xCLFVBQU0sTUFBMEI7QUFBQSxNQUM1QixVQUFVO0FBQUEsTUFDVixlQUFlO0FBQUEsTUFDZixXQUFXO0FBQUEsTUFDWCxNQUFNO0FBQUEsSUFDVjtBQUNBLFdBQU8sSUFBSSxpQkFBZ0IsR0FBRztBQUFBLEVBQ2xDO0FBQUEsRUFFQSxRQUE0QjtBQUN4QixVQUFNLE1BQU0sS0FBSyxPQUFPO0FBQ3hCLFVBQU0sUUFBUSxLQUFLLE1BQU0sS0FBSyxVQUFVLEdBQUcsQ0FBQztBQUM1QyxXQUFPO0FBQUEsRUFDWDtBQUFBLEVBRUEsU0FBNkI7QUFDekIsVUFBTSxNQUEwQjtBQUFBLE1BQzVCLE1BQU0sS0FBSztBQUFBLE1BQ1gsV0FBVyxLQUFLO0FBQUEsTUFDaEIsVUFBVSxLQUFLO0FBQUEsTUFDZixlQUFlLEtBQUs7QUFBQSxJQUN4QjtBQUNBLFdBQU87QUFBQSxFQUNYO0FBQUEsRUFDQSxJQUFJLFlBQStCO0FBQy9CLFdBQU8sS0FBSztBQUFBLEVBQ2hCO0FBQUEsRUFDQSxJQUFJLFVBQVUsV0FBOEI7QUFDeEMsUUFBSSxjQUFjLE9BQU87QUFDckIsV0FBSyxnQkFBZ0I7QUFDckIsV0FBSyxXQUFXO0FBQUEsSUFDcEI7QUFDQSxTQUFLLGFBQWE7QUFBQSxFQUN0QjtBQUNKOzs7QUNsRU8sSUFBTSx3QkFBTixNQUE0QjtBQUFBLEVBQ2pDLFlBQ1csT0FDQSxPQUNUO0FBRlM7QUFDQTtBQUFBLEVBQ1I7QUFDTDtBQUVPLElBQU0sbUJBQU4sTUFBdUI7QUFBQSxFQUc1QixZQUNXLE9BQ0EsT0FDQSxTQUNBLFlBQ1Q7QUFKUztBQUNBO0FBQ0E7QUFDQTtBQUFBLEVBQ1I7QUFBQSxFQVBNLE9BQTRCO0FBQUEsRUFDNUIsV0FBZ0M7QUFPM0M7QUFFTyxJQUFNLGlCQUFOLE1BQXFCO0FBQUEsRUFHMUIsWUFDVyxPQUNBLE9BQ0EsU0FDVDtBQUhTO0FBQ0E7QUFDQTtBQUFBLEVBQ1I7QUFBQSxFQU5NLE9BQWlDO0FBQUEsRUFDakMsV0FBZ0M7QUFNM0M7OztBQzlCQSxTQUFTLFNBQUFDLGNBQWE7QUFFdEIsSUFBTUMsS0FBSUQ7QUFnQkgsSUFBTSxjQUFOLE1BQU0scUJBQW9CLGNBQThDO0FBQUEsRUFDcEUsYUFBNkI7QUFBQSxFQUM3QjtBQUFBLEVBQ0Q7QUFBQSxFQUNBLFVBQVU7QUFBQSxFQUNWLGFBQXFDLENBQUM7QUFBQSxFQUM3QjtBQUFBLEVBQ1QsbUJBQW1CO0FBQUEsRUFDM0IsWUFBK0Q7QUFBQSxFQUMvRDtBQUFBLEVBQ0E7QUFBQSxFQUNBLGFBQWEsY0FBYyxPQUFPLElBQUksT0FBTztBQUFBLEVBRTdDLE9BQWMsT0FBTyxNQUF1QixTQUFpQjtBQUMzRCxVQUFNLEtBQUssZ0JBQWdCLE9BQU87QUFDbEMsVUFBTSxjQUFrQztBQUFBLE1BQ3RDLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLFVBQVU7QUFBQSxNQUNWLGVBQWU7QUFBQSxJQUNqQjtBQUNBLFVBQU0sZ0JBQWdCLGNBQWMsT0FBTyxJQUFJLHVCQUF1QixFQUFFLE9BQU87QUFDL0UsVUFBTSxxQkFBcUIsZ0JBQWdCLE9BQU8sWUFBWSxFQUFFLE9BQU87QUFDdkUsVUFBTSxNQUFzQjtBQUFBLE1BQzFCLE9BQU87QUFBQSxNQUNQLGtCQUFrQixDQUFDO0FBQUEsTUFDbkIsaUJBQWlCO0FBQUEsTUFDakI7QUFBQSxNQUNBLFlBQVk7QUFBQSxNQUNaLFVBQVU7QUFBQSxNQUNWLFFBQVE7QUFBQSxNQUNSLFdBQVcsQ0FBQztBQUFBLE1BQ1osTUFBTSxDQUFDO0FBQUEsSUFDVDtBQUVBLFVBQU0sT0FBTyxJQUFJLGFBQVksR0FBRztBQUNoQyxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0EsT0FBYyxTQUFTLEtBQWtDO0FBQ3ZELFVBQU0sT0FBTyxJQUFJLGFBQVksR0FBRztBQUNoQyxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBRVEsWUFBWSxLQUFxQjtBQUN2QyxVQUFNLEdBQUc7QUFDVCxTQUFLLEtBQUssSUFBSTtBQUNkLFNBQUssWUFBWSxJQUFJO0FBQ3JCLFNBQUssVUFBVSxJQUFJO0FBQ25CLFNBQUssV0FBVyxnQkFBZ0IsU0FBUyxJQUFJLFFBQVE7QUFDckQsU0FBSyxhQUFhLGNBQWMsU0FBUyxJQUFJLFVBQVU7QUFDdkQsU0FBSyxrQkFBa0IsZ0JBQWdCLFNBQVMsSUFBSSxlQUFlO0FBQ25FLFNBQUssYUFBYSxJQUFJLFVBQVUsSUFBSSxDQUFDLE1BQU0sZ0JBQWdCLFNBQVMsQ0FBQyxDQUFDO0FBQ3RFLFVBQU0sVUFBb0IsTUFBTSxRQUFRLElBQUksSUFBSSxJQUFJLElBQUksT0FBTyxDQUFDO0FBQ2hFLFNBQUssUUFBUSxJQUFJLElBQUksT0FBTztBQUM1QixRQUFJLElBQUksV0FBVztBQUNqQixXQUFLLFlBQVksSUFBSTtBQUFBLElBQ3ZCO0FBQ0EsU0FBSyxXQUFXO0FBQUEsRUFDbEI7QUFBQSxFQUVBLGVBQWUsVUFBMkIsU0FBMEI7QUFDbEUsVUFBTSxlQUFlQyxHQUFFLFVBQVUsR0FBRyxLQUFLLFdBQVcsTUFBTTtBQUMxRCxRQUFJLENBQUMsYUFBYSxPQUFPLEdBQUc7QUFDMUIsYUFBTztBQUFBLElBQ1Q7QUFDQSxVQUFNLGNBQWMsQ0FBQyxDQUFDLEtBQUssV0FBVyxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sU0FBUyxFQUFFO0FBQ3RFLFFBQUksYUFBYTtBQUNmLGFBQU87QUFBQSxJQUNUO0FBQ0EsU0FBSyxXQUFXLE9BQU8sU0FBUyxHQUFHLFFBQVE7QUFDM0MsV0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUVBLFlBQVksTUFBMkIsVUFBVSxJQUFxQjtBQUNwRSxVQUFNLFdBQVcsZ0JBQWdCLE9BQU8sSUFBSTtBQUM1QyxRQUFJLFVBQVUsS0FBSyxXQUFXLFVBQVUsV0FBVyxHQUFHO0FBQ3BELFdBQUssV0FBVyxPQUFPLFNBQVMsR0FBRyxRQUFRO0FBQUEsSUFDN0MsT0FBTztBQUNMLFdBQUssV0FBVyxLQUFLLFFBQVE7QUFBQSxJQUMvQjtBQUNBLFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsYUFBYSxVQUEyQixTQUEwQjtBQUNoRSxVQUFNLGlCQUFpQkEsR0FBRSxVQUFVLEdBQUcsS0FBSyxXQUFXLE1BQU07QUFDNUQsUUFBSSxDQUFDLGVBQWUsT0FBTyxHQUFHO0FBQzVCLGFBQU87QUFBQSxJQUNUO0FBQ0EsVUFBTSxlQUFlLEtBQUssV0FBVyxRQUFRLFFBQVE7QUFDckQsUUFBSSxlQUFlLEdBQUc7QUFDcEIsYUFBTztBQUFBLElBQ1Q7QUFDQSxTQUFLLFdBQVcsT0FBTyxjQUFjLENBQUM7QUFDdEMsU0FBSyxXQUFXLE9BQU8sU0FBUyxHQUFHLFFBQVE7QUFDM0MsV0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUVBLGVBQWUsVUFBMkI7QUFDeEMsU0FBSyxhQUFhLEtBQUssV0FBVyxPQUFPLENBQUMsTUFBTSxNQUFNLFFBQVE7QUFFOUQsU0FBSyxXQUFXO0FBQUEsRUFDbEI7QUFBQSxFQUNRLGFBQWE7QUFDbkIsUUFBSSxLQUFLLGNBQWMsY0FBYyxLQUFLLGNBQWMsYUFBYTtBQUNuRSxXQUFLLGFBQWEsQ0FBQztBQUFBLElBQ3JCO0FBQ0EsUUFBSSxLQUFLLGNBQWMsVUFBVSxLQUFLLFdBQVcsV0FBVyxHQUFHO0FBQzdELFdBQUssYUFBYSxDQUFDO0FBQ25CLFdBQUssWUFBWSxNQUFNO0FBQUEsSUFDekI7QUFDQSxRQUFJLEtBQUssY0FBYyxrQkFBa0IsS0FBSyxXQUFXLFdBQVcsR0FBRztBQUNyRSxXQUFLLGFBQWEsQ0FBQztBQUNuQixXQUFLLFlBQVksTUFBTTtBQUFBLElBQ3pCO0FBQUEsRUFDRjtBQUFBLEVBRU8sT0FBTyxLQUFhO0FBQ3pCLFNBQUssTUFBTSxJQUFJLEdBQUc7QUFBQSxFQUNwQjtBQUFBLEVBQ08sVUFBVSxLQUFhO0FBQzVCLFNBQUssTUFBTSxPQUFPLEdBQUc7QUFBQSxFQUN2QjtBQUFBLEVBRUEsSUFBSSxTQUFTLE9BQXdCO0FBQ25DLFNBQUssWUFBWTtBQUVqQixTQUFLLFdBQVc7QUFBQSxFQUNsQjtBQUFBLEVBRUEscUJBQXFCLGNBQXNCLFlBQXFEO0FBQzlGLFVBQU0sWUFBZ0MsQ0FBQztBQUV2QyxRQUFJLEtBQUssY0FBYyxZQUFZO0FBQ2pDLFlBQU0sYUFBYSxLQUFLO0FBQ3hCLFlBQU0sS0FBSyxlQUFlLGVBQWUsTUFBTSxhQUFhO0FBQzVELFlBQU0sUUFBUSxLQUFLLFNBQVM7QUFDNUIsWUFBTSxLQUFLLEtBQUssZ0JBQWdCLFFBQVEsSUFBSSxDQUFDLE1BQU07QUFDakQsY0FBTUMsU0FBUSxFQUFFO0FBQ2hCLGNBQU0sUUFBUSxFQUFFO0FBQ2hCLGVBQU8sSUFBSSxzQkFBc0JBLFFBQU8sS0FBSztBQUFBLE1BQy9DLENBQUM7QUFDRCxZQUFNLFlBQVksSUFBSSxpQkFBaUIsSUFBSSxPQUFPLElBQUksVUFBVTtBQUNoRSxnQkFBVSxLQUFLLFNBQVM7QUFBQSxJQUMxQjtBQUNBLFdBQU87QUFBQSxFQUNUO0FBQUEsRUFFQSxJQUFJLE9BQThCO0FBQ2hDLFdBQU8sQ0FBQyxHQUFHLEtBQUssS0FBSztBQUFBLEVBQ3ZCO0FBQUEsRUFDQSxJQUFJLFdBQVc7QUFDYixXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUEsRUFFQSxJQUFJLFNBQVM7QUFDWCxXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUEsRUFFQSxJQUFJLE9BQU8sT0FBZTtBQUN4QixTQUFLLFVBQVU7QUFBQSxFQUNqQjtBQUFBLEVBRUEsU0FBeUI7QUFDdkIsVUFBTSxZQUFZLEtBQUssV0FBVyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUN2RCxVQUFNLFdBQVcsS0FBSyxTQUFTLE9BQU87QUFDdEMsVUFBTSxhQUFhLEtBQUssV0FBVyxPQUFPO0FBQzFDLFVBQU0sWUFBWSxLQUFLO0FBQ3ZCLFVBQU0sTUFBc0I7QUFBQSxNQUMxQixPQUFPLEtBQUs7QUFBQSxNQUNaO0FBQUEsTUFDQSxrQkFBa0IsQ0FBQztBQUFBLE1BQ25CO0FBQUEsTUFDQSxJQUFJLEtBQUs7QUFBQSxNQUNULE1BQU0sQ0FBQyxHQUFHLEtBQUssSUFBSTtBQUFBLE1BQ25CLFFBQVEsS0FBSztBQUFBLE1BQ2IsaUJBQWlCLEtBQUssZ0JBQWdCLE9BQU87QUFBQSxNQUM3QztBQUFBLElBQ0Y7QUFDQSxRQUFJLFdBQVc7QUFDYixVQUFJLFlBQVk7QUFBQSxJQUNsQjtBQUNBLFdBQU87QUFBQSxFQUNUO0FBQUEsRUFFQSxRQUF3QjtBQUN0QixVQUFNLE1BQU0sS0FBSyxPQUFPO0FBQ3hCLFVBQU0sdUJBQXVCLEtBQUssZ0JBQWdCLE1BQU07QUFDeEQsVUFBTSxnQkFBZ0IsS0FBSyxNQUFNLEtBQUssVUFBVSxLQUFLLFFBQVEsQ0FBQztBQUU5RCxVQUFNLGlCQUFpQixLQUFLLFVBQVUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7QUFDMUQsVUFBTSxRQUFRLGdCQUFnQixPQUFPO0FBQ3JDLFVBQU0sUUFBd0I7QUFBQSxNQUM1QixHQUFHO0FBQUEsTUFDSCxJQUFJO0FBQUEsTUFDSixpQkFBaUI7QUFBQSxNQUNqQixVQUFVO0FBQUEsTUFDVixXQUFXO0FBQUEsSUFDYjtBQUVBLFdBQU87QUFBQSxFQUNUO0FBQUEsRUFFQSxJQUFJLGtCQUFrQjtBQUNwQixXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUEsRUFFQSxJQUFJLGdCQUFnQixPQUFlO0FBQ2pDLFFBQUksT0FBTyxVQUFVLFVBQVU7QUFDN0IsV0FBSyxtQkFBbUI7QUFBQSxJQUMxQjtBQUFBLEVBQ0Y7QUFBQSxFQUVBLElBQUksWUFBNEM7QUFDOUMsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUNGOzs7QUNwUE8sSUFBZSxtQkFBZixNQUFtQztBQUFBLEVBZTlCLFlBQXFCLE1BQVM7QUFBVDtBQUM3QixTQUFLLGVBQWUsS0FBSyxlQUFlO0FBQ3hDLFNBQUssV0FBVyxLQUFLLFdBQVc7QUFDaEMsU0FBSyxnQkFBZ0IsS0FBSyxnQkFBZ0I7QUFBQSxFQUM1QztBQUFBLEVBbEJpQjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDakIsSUFBSSxjQUFzQjtBQUN4QixXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUEsRUFDQSxJQUFJLFVBQVU7QUFDWixXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUEsRUFFQSxJQUFJLGVBQWU7QUFDakIsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQVVGO0FBRU8sSUFBTSx5QkFBTixNQUFNLGdDQUErQixpQkFBa0M7QUFBQSxFQUs1RSxZQUFxQixNQUF1QjtBQUMxQyxVQUFNLElBQUk7QUFEUztBQUVuQixTQUFLLFVBQVUsS0FBSyxRQUFRLElBQUkscUJBQXFCLE1BQU07QUFBQSxFQUM3RDtBQUFBLEVBUEEsT0FBYyxTQUFTLENBQUMsU0FBMEI7QUFDaEQsV0FBTyxJQUFJLHdCQUF1QixJQUFJO0FBQUEsRUFDeEM7QUFBQSxFQUNTO0FBQUEsRUFNQyxrQkFBMEI7QUFDbEMsV0FBTyxLQUFLLEtBQUssUUFBUSxLQUFLLEtBQUs7QUFBQSxFQUNyQztBQUFBLEVBRUEsaUJBQXlCO0FBQ3ZCLFdBQU8sS0FBSyxLQUFLO0FBQUEsRUFDbkI7QUFBQSxFQUVBLGFBQXFCO0FBQ25CLFdBQU8sS0FBSyxLQUFLO0FBQUEsRUFDbkI7QUFDRjtBQUVPLElBQU0sdUJBQU4sTUFBTSw4QkFBNkIsaUJBQXdDO0FBQUEsRUFDaEYsT0FBYyxTQUFTLENBQUMsV0FBa0M7QUFDeEQsV0FBTyxJQUFJLHNCQUFxQixNQUFNO0FBQUEsRUFDeEM7QUFBQSxFQUNRLFlBQVksUUFBK0I7QUFDakQsVUFBTSxNQUFNO0FBQUEsRUFDZDtBQUFBLEVBQ1Usa0JBQTBCO0FBQ2xDLFdBQU87QUFBQSxFQUNUO0FBQUEsRUFFVSxpQkFBeUI7QUFDakMsV0FBTyxLQUFLLEtBQUssUUFBUSxNQUFNLEtBQUssS0FBSyxRQUFRO0FBQUEsRUFDbkQ7QUFBQSxFQUVVLGFBQXFCO0FBQzdCLFdBQU87QUFBQSxFQUNUO0FBQ0Y7QUFFTyxJQUFNLHFCQUFOLE1BQU0sNEJBQTJCLGlCQUF1QztBQUFBLEVBQzdFLE9BQXVCLEtBQUssSUFBSSxvQkFBbUIsT0FBTztBQUFBLEVBQzFELE9BQXVCLFNBQVMsSUFBSSxvQkFBbUIsVUFBVTtBQUFBLEVBQ2pFLE9BQXVCLGFBQWEsQ0FDbEMsV0FDK0I7QUFDL0IsUUFBSSxXQUFXLFNBQVM7QUFDdEIsYUFBTyxvQkFBbUI7QUFBQSxJQUM1QjtBQUNBLFFBQUksV0FBVyxZQUFZO0FBQ3pCLGFBQU8sb0JBQW1CO0FBQUEsSUFDNUI7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ1EsWUFBWSxVQUEyQjtBQUM3QyxVQUFNLFFBQVE7QUFBQSxFQUNoQjtBQUFBLEVBRVUsa0JBQTBCO0FBQ2xDLFdBQU87QUFBQSxFQUNUO0FBQUEsRUFFVSxpQkFBeUI7QUFDakMsVUFBTSxXQUFXLEtBQUs7QUFDdEIsUUFBSSxhQUFhLFNBQVM7QUFDeEIsYUFBTztBQUFBLElBQ1Q7QUFDQSxRQUFJLGFBQWEsWUFBWTtBQUMzQixhQUFPO0FBQUEsSUFDVDtBQUNBLFdBQU87QUFBQSxFQUNUO0FBQUEsRUFFVSxhQUFxQjtBQUM3QixVQUFNLFdBQVcsS0FBSztBQUN0QixRQUFJLGFBQWEsU0FBUztBQUN4QixhQUFPO0FBQUEsSUFDVDtBQUNBLFFBQUksYUFBYSxZQUFZO0FBQzNCLGFBQU87QUFBQSxJQUNUO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFDRjtBQUVPLElBQU0sdUJBQU4sTUFBTSw4QkFBNkIsaUJBQW1DO0FBQUEsRUFDM0UsT0FBdUIsU0FBUyxDQUFDLGFBQStCLElBQUksc0JBQXFCLFFBQVE7QUFBQSxFQUN2RixZQUFZLFVBQTRCO0FBQ2hELFVBQU0sUUFBUTtBQUFBLEVBQ2hCO0FBQUEsRUFFVSxrQkFBMEI7QUFDbEMsV0FBTyxLQUFLLEtBQUssU0FBUyxLQUFLLEtBQUs7QUFBQSxFQUN0QztBQUFBLEVBRVUsaUJBQXlCO0FBQ2pDLFdBQU8sS0FBSyxLQUFLLFNBQVMsT0FBTyxLQUFLLEtBQUssYUFBYTtBQUFBLEVBQzFEO0FBQUEsRUFFVSxhQUFxQjtBQUM3QixXQUFPLEtBQUssS0FBSztBQUFBLEVBQ25CO0FBQ0Y7OztBQzlITyxJQUFNLFlBQU4sTUFBZ0I7QUFBQSxFQUNuQixZQUNxQixvQkFDQSxrQkFDQSxnQkFDQSxhQUNBLGNBQ25CO0FBTG1CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQSxFQUNsQjtBQUFBLEVBRUgsSUFBSSxlQUFnRDtBQUNoRCxXQUFPLEtBQUs7QUFBQSxFQUNoQjtBQUFBLEVBRUEsb0JBQW9EO0FBQ2hELFdBQU8sQ0FBQyxHQUFHLEtBQUssY0FBYyxHQUFHLEtBQUssVUFBVTtBQUFBLEVBQ3BEO0FBQUEsRUFFQSx1QkFBNEQ7QUFDeEQsV0FBTyxLQUFLLGFBQWEsSUFBSSxxQkFBcUIsTUFBTTtBQUFBLEVBQzVEO0FBQUEsRUFFQSxJQUFJLGFBQTRDO0FBQzVDLFdBQU8sS0FBSztBQUFBLEVBQ2hCO0FBQUEsRUFFQSxJQUFJLHlCQUF5QjtBQUN6QixXQUFPLEtBQUs7QUFBQSxFQUNoQjtBQUFBLEVBRUEsSUFBSSxzQkFBc0I7QUFDdEIsV0FBTyxLQUFLO0FBQUEsRUFDaEI7QUFBQSxFQUNBLElBQUksb0JBQW9CO0FBQ3BCLFdBQU8sS0FBSztBQUFBLEVBQ2hCO0FBQ0o7OztBQ25DTyxJQUFNLGFBQU4sTUFBTSxvQkFBbUIsY0FBNEM7QUFBQSxFQUNqRSxhQUE0QjtBQUFBLEVBQzVCO0FBQUEsRUFDVCxVQUFVO0FBQUEsRUFDVixpQkFBaUI7QUFBQSxFQUNqQixPQUF1QixhQUFhO0FBQUEsRUFDcEMsT0FBdUIsYUFBYTtBQUFBLEVBRXBDLE9BQXVCLFNBQVMsQ0FBQyxLQUFhLGNBQXNCLE9BQU87QUFDekUsVUFBTSxLQUFLLGdCQUFnQixZQUFZO0FBQ3ZDLFVBQU0sTUFBcUI7QUFBQSxNQUN6QjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUNBLFdBQU8sSUFBSSxZQUFXLEdBQUc7QUFBQSxFQUMzQjtBQUFBLEVBQ0EsT0FBdUIsVUFBVSxDQUFDLFFBQXVCO0FBQ3ZELFdBQU8sSUFBSSxZQUFXLEdBQUc7QUFBQSxFQUMzQjtBQUFBLEVBQ1UsWUFBWSxLQUFvQjtBQUN4QyxVQUFNLEtBQUssSUFBSSxNQUFNLGdCQUFnQixZQUFZO0FBQ2pELFVBQU0sU0FBUyxFQUFFLEdBQUcsS0FBSyxHQUFHO0FBQzVCLFVBQU0sTUFBTTtBQUNaLFNBQUssS0FBSztBQUNWLFNBQUssVUFBVSxJQUFJLE9BQU87QUFDMUIsU0FBSyxpQkFBaUIsSUFBSSxlQUFlO0FBQUEsRUFDM0M7QUFBQSxFQUNBLFFBQXVCO0FBQ3JCLFdBQU8sS0FBSyxPQUFPO0FBQUEsRUFDckI7QUFBQSxFQUVBLFNBQXdCO0FBQ3RCLFdBQU8sRUFBRSxLQUFLLEtBQUssU0FBUyxhQUFhLEtBQUssZ0JBQWdCLElBQUksS0FBSyxHQUFHO0FBQUEsRUFDNUU7QUFDRjtBQUVPLElBQU0sZ0JBQU4sTUFBTSxlQUE4QztBQUFBLEVBQ3hDLFFBQVEsb0JBQUksSUFBZ0I7QUFBQSxFQUM3QyxPQUF1QixTQUFTLE1BQU07QUFDcEMsV0FBTyxJQUFJLGVBQWMsQ0FBQyxDQUFDO0FBQUEsRUFDN0I7QUFBQSxFQUVBLENBQUMsT0FBTyxRQUFRLElBQUk7QUFDbEIsVUFBTSxPQUFPLENBQUMsR0FBRyxLQUFLLEtBQUs7QUFDM0IsV0FBTyxLQUFLLE9BQU8sUUFBUSxFQUFFO0FBQUEsRUFDL0I7QUFBQSxFQUNRLFlBQVksYUFBd0M7QUFDMUQsZ0JBQVksUUFBUSxTQUFPO0FBQ3pCLFdBQUssTUFBTSxJQUFJLEdBQUc7QUFBQSxJQUNwQixDQUFDO0FBQUEsRUFDSDtBQUFBLEVBRUEsS0FBSyxNQUFvQztBQUN2QyxVQUFNLFVBQXdDLE1BQU0sUUFBUSxJQUFJLElBQzVELE9BQ0EsQ0FBQztBQUNMLFVBQU0sTUFBTSxRQUFRLElBQUksV0FBVyxPQUFPO0FBQzFDLFFBQUksUUFBUSxTQUFPO0FBQ2pCLFdBQUssTUFBTSxJQUFJLEdBQUc7QUFBQSxJQUNwQixDQUFDO0FBQUEsRUFDSDtBQUFBLEVBRUEsSUFBSSxLQUFpQjtBQUNuQixTQUFLLE1BQU0sSUFBSSxHQUFHO0FBQUEsRUFDcEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTUEsT0FBTyxLQUFpQjtBQUN0QixTQUFLLE1BQU0sT0FBTyxHQUFHO0FBQUEsRUFDdkI7QUFBQSxFQUVBLFNBQXVDO0FBQ3JDLFVBQU0sT0FBTyxDQUFDLEdBQUcsS0FBSyxLQUFLO0FBQzNCLFVBQU0sVUFBVSxLQUFLLElBQUksT0FBSyxFQUFFLE9BQU8sQ0FBQztBQUN4QyxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBRUEsVUFBVSxNQUE0QjtBQUNwQyxVQUFNLElBQUksS0FBSyxPQUFPLFFBQVEsRUFBRTtBQUNoQyxVQUFNLFNBQVMsQ0FBQyxHQUFHLElBQUk7QUFDdkIsV0FBTyxRQUFRLE9BQUs7QUFDbEIsV0FBSyxPQUFPLENBQUM7QUFBQSxJQUNmLENBQUM7QUFBQSxFQUNIO0FBQ0Y7OztBQ2hHQSxJQUFNLHlCQUF5QjtBQUFBLEVBQzdCLE9BQU87QUFBQSxFQUNQLFVBQVU7QUFBQSxFQUNWLFVBQVU7QUFBQSxFQUNWLGlCQUFpQjtBQUFBLEVBQ2pCLGFBQWE7QUFBQSxFQUNiLG9CQUFvQjtBQUFBLEVBQ3BCLFNBQVM7QUFBQSxFQUNULFlBQVk7QUFBQSxFQUNaLElBQUk7QUFBQSxFQUNKLE9BQU87QUFBQSxFQUNQLFNBQVM7QUFBQSxFQUNULFlBQVk7QUFBQSxFQUNaLFVBQVU7QUFBQSxFQUNWLGFBQWE7QUFBQSxFQUNiLE9BQU87QUFBQSxFQUNQLFVBQVU7QUFBQSxFQUNWLFlBQVk7QUFBQSxFQUNaLFVBQVU7QUFDWjtBQUlPLElBQVU7QUFBQSxDQUFWLENBQVVDLHFCQUFWO0FBQ0UsRUFBTUEsaUJBQUEsS0FBSyxDQUFDLFdBQStDO0FBQ2hFLFFBQUksT0FBTyxXQUFXLFVBQVU7QUFDOUIsYUFBTztBQUFBLElBQ1Q7QUFDQSxXQUFPLE9BQU8sS0FBSyxzQkFBc0IsRUFBRSxTQUFTLE1BQU07QUFBQSxFQUM1RDtBQUFBLEdBTmU7OztBQ1ZWLElBQU0sbUJBQU4sTUFBTSwwQkFBeUIsY0FBd0Q7QUFBQSxFQUNuRixhQUFrQztBQUFBLEVBQzNDLE9BQXVCLG1CQUFzRDtBQUFBLElBQzNFLG1CQUFtQjtBQUFBLElBQ25CLG1CQUFtQjtBQUFBLEVBQ3JCO0FBQUEsRUFFUTtBQUFBLEVBQ1IsT0FBTztBQUFBLEVBRVAsT0FBYyxTQUFTLENBQUMsaUJBQWlEO0FBQ3ZFLFVBQU0sWUFBWSxJQUFJO0FBQUEsTUFDcEI7QUFBQSxRQUNFLE1BQU07QUFBQSxRQUNOLE1BQU07QUFBQSxRQUNOLFVBQVU7QUFBQSxRQUNWLFlBQVk7QUFBQSxRQUNaLE9BQU87QUFBQSxNQUNUO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBRUEsT0FBYyxVQUFVLENBQUMsS0FBMEIsY0FBOEM7QUFDL0YsVUFBTSxPQUE0QjtBQUFBLE1BQ2hDLE1BQU07QUFBQSxNQUNOLE1BQU0sSUFBSSxRQUFRO0FBQUEsTUFDbEIsT0FBTyxJQUFJLFNBQVM7QUFBQSxNQUNwQixVQUFVLElBQUksWUFBWTtBQUFBLE1BQzFCLFlBQVksSUFBSSxjQUFjO0FBQUEsSUFDaEM7QUFDQSxVQUFNLFdBQVcsSUFBSSxrQkFBaUIsTUFBTSxTQUFTO0FBQ3JELFdBQU87QUFBQSxFQUNUO0FBQUEsRUFDUSxZQUFxQztBQUFBLEVBQ3JDLFlBQWtDO0FBQUEsRUFDbEMsU0FBd0M7QUFBQSxFQUN4QyxnQkFBZ0QsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNekQsSUFBSSxTQUFTLFVBQW1DO0FBQzlDLFFBQUksYUFBYSxLQUFLLFdBQVc7QUFDL0I7QUFBQSxJQUNGO0FBQ0EsU0FBSyxZQUFZO0FBQ2pCLFNBQUssWUFBWTtBQUNqQixTQUFLLFNBQVM7QUFBQSxFQUNoQjtBQUFBLEVBRUEsSUFBSSxXQUFXO0FBQ2IsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBLEVBRUEsSUFBSSxNQUFNLGVBQThDO0FBQ3RELFNBQUssU0FBUztBQUFBLEVBQ2hCO0FBQUEsRUFDQSxJQUFJLFFBQVE7QUFDVixXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUEsRUFFQSxXQUFvRTtBQUNsRSxRQUFJLEtBQUssY0FBYyxXQUFXLEdBQUc7QUFDbkMsYUFBTztBQUFBLFFBQ0wsU0FBUztBQUFBLFFBQ1QsU0FBUztBQUFBLE1BQ1g7QUFBQSxJQUNGO0FBQ0EsUUFBSSxDQUFDLEtBQUssV0FBVztBQUNuQixhQUFPO0FBQUEsUUFDTCxTQUFTO0FBQUEsUUFDVCxTQUFTO0FBQUEsTUFDWDtBQUFBLElBQ0Y7QUFFQSxRQUFJLENBQUMsS0FBSyxXQUFXO0FBQ25CLGFBQU8sRUFBRSxTQUFTLE9BQU8sU0FBUyxvQ0FBb0M7QUFBQSxJQUN4RTtBQUVBLFFBQUksQ0FBQyxLQUFLLFFBQVE7QUFDaEIsYUFBTztBQUFBLFFBQ0wsU0FBUztBQUFBLFFBQ1QsU0FBUztBQUFBLE1BQ1g7QUFBQSxJQUNGO0FBRUEsV0FBTyxFQUFFLFNBQVMsS0FBSztBQUFBLEVBQ3pCO0FBQUEsRUFFQSxrQkFBa0IsY0FBZ0Q7QUFDaEUsVUFBTSxNQUFNLEtBQUs7QUFDakIsVUFBTSxLQUFLLEtBQUs7QUFDaEIsVUFBTSxJQUFJLEtBQUs7QUFDZixRQUFJLENBQUM7QUFBSyxhQUFPO0FBQ2pCLFFBQUksQ0FBQztBQUFJLGFBQU87QUFDaEIsUUFBSSxDQUFDO0FBQUcsYUFBTztBQUNmLFFBQUksT0FBTyxTQUFTO0FBQ2xCLFlBQU0sa0JBQW9DO0FBQUEsUUFDeEMsTUFBTTtBQUFBLFFBQ04sT0FBTyxJQUFJO0FBQUEsUUFDWCxZQUFZLElBQUk7QUFBQSxRQUNoQixhQUFhLGVBQWUsTUFBTSxFQUFFO0FBQUEsUUFDcEMsZ0JBQWdCLEVBQUU7QUFBQSxRQUNsQixVQUFVO0FBQUEsTUFDWjtBQUNBLGFBQU87QUFBQSxJQUNUO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUVRLHVCQUF1QixZQUE2QztBQUMxRSxVQUFNLElBQUksS0FBSyxjQUFjLEtBQUssQ0FBQ0MsT0FBTUEsR0FBRSxVQUFVLFVBQVU7QUFDL0QsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBLEVBRUEsSUFBSSxTQUFTLFVBQWdDO0FBQzNDLFFBQUksZ0JBQWdCLEdBQUcsUUFBUSxHQUFHO0FBQ2hDLFdBQUssWUFBWTtBQUFBLElBQ25CLE9BQU87QUFDTCxXQUFLLFlBQVk7QUFBQSxJQUNuQjtBQUFBLEVBQ0Y7QUFBQSxFQUVBLElBQUksV0FBVztBQUNiLFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQSxFQUVRLFlBQVksS0FBMEIsV0FBMkM7QUFDdkYsVUFBTSxHQUFHO0FBQ1QsU0FBSyxhQUFhO0FBQ2xCLFNBQUssT0FBTyxJQUFJO0FBQ2hCLFNBQUssaUJBQWlCLFNBQVM7QUFBQSxFQUNqQztBQUFBLEVBRUEsSUFBSSxnQ0FBdUU7QUFDekUsV0FBTyxLQUFLLGNBQWMsSUFBSSx1QkFBdUIsTUFBTTtBQUFBLEVBQzdEO0FBQUEsRUFFQSxJQUFJLHVCQUEwRDtBQUM1RCxXQUFPLEtBQUssWUFBWSxrQkFBaUIsbUJBQW1CLENBQUM7QUFBQSxFQUMvRDtBQUFBLEVBRUEsSUFBSSxtQkFBd0Q7QUFDMUQsUUFBSSxDQUFDLEtBQUssV0FBVztBQUNuQixhQUFPLENBQUM7QUFBQSxJQUNWO0FBQ0EsVUFBTSxNQUFNLEtBQUssVUFBVSxRQUFRLElBQUkscUJBQXFCLE1BQU07QUFDbEUsV0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUVBLFFBQTZCO0FBQzNCLFdBQU8sS0FBSyxPQUFPO0FBQUEsRUFDckI7QUFBQSxFQUVRLGlCQUFpQixXQUFvRDtBQUMzRSxTQUFLLGdCQUFnQjtBQUNyQixVQUFNLElBQUksS0FBSyxjQUFjLEtBQUssQ0FBQ0EsT0FBTUEsR0FBRSxVQUFVLEtBQUssWUFBWSxVQUFVO0FBQ2hGLFFBQUksQ0FBQyxHQUFHO0FBQ04sV0FBSyxZQUFZO0FBQ2pCLFdBQUssWUFBWTtBQUNqQixXQUFLLFNBQVM7QUFDZCxhQUFPO0FBQUEsSUFDVDtBQUNBLFNBQUssWUFBWTtBQUNqQixVQUFNLEtBQUssS0FBSyxZQUFZO0FBRTVCLFFBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLEdBQUc7QUFDM0IsYUFBTztBQUFBLElBQ1Q7QUFDQSxTQUFLLFlBQVk7QUFDakIsVUFBTSxjQUFjLEVBQUUsUUFBUSxLQUFLLENBQUNDLFFBQU9BLElBQUcsVUFBVSxLQUFLLFlBQVksS0FBSztBQUM5RSxRQUFJLENBQUMsYUFBYTtBQUNoQixhQUFPO0FBQUEsSUFDVDtBQUNBLFNBQUssU0FBUztBQUNkLFdBQU87QUFBQSxFQUNUO0FBQUEsRUFFQSxTQUE4QjtBQUM1QixVQUFNLE9BQU8sS0FBSztBQUNsQixVQUFNLGFBQWEsS0FBSyxZQUFZLEtBQUssVUFBVSxRQUFRO0FBQzNELFVBQU0sV0FBVyxLQUFLLFlBQVksS0FBSyxZQUFZO0FBQ25ELFVBQU0sUUFBUSxLQUFLLFNBQVMsS0FBSyxPQUFPLFFBQVE7QUFDaEQsV0FBTztBQUFBLE1BQ0wsTUFBTTtBQUFBLE1BQ047QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGOzs7QUMxTUEsSUFBTSxxQkFBcUI7QUFBQSxFQUN6QixLQUFLO0FBQUEsRUFDTCxLQUFLO0FBQUEsRUFDTCxPQUFPO0FBQ1Q7QUFXTyxJQUFNLHdCQUFOLE1BQU0sK0JBQThCLGNBQW1FO0FBQUEsRUFDNUcsT0FBZ0IsdUJBQXVCLENBQUMsVUFBd0Q7QUFDOUYsUUFBSSxPQUFPLFVBQVUsVUFBVTtBQUM3QixhQUFPO0FBQUEsSUFDVDtBQUNBLFVBQU0sY0FBYyxPQUFPLEtBQUssa0JBQWtCO0FBQ2xELFdBQU8sWUFBWSxTQUFTLEtBQUs7QUFBQSxFQUNuQztBQUFBLEVBRVMsYUFBd0M7QUFBQSxFQUN6QztBQUFBLEVBQ1IsT0FBTztBQUFBLEVBQ1U7QUFBQSxFQUNBO0FBQUEsRUFFakIsT0FBdUIsVUFBVSxDQUFDLEtBQStCLGlCQUFpRDtBQUNoSCxXQUFPLElBQUksdUJBQXNCLEtBQUssWUFBWTtBQUFBLEVBQ3BEO0FBQUEsRUFDVSxZQUFZLEtBQStCLGNBQThDO0FBQ2pHLFVBQU0sR0FBRztBQUNULFNBQUssT0FBTyxJQUFJO0FBQ2hCLFNBQUssUUFBUSxJQUFJO0FBQ2pCLFVBQU0sZ0JBQWdCLE1BQU0sUUFBUSxJQUFJLFVBQVUsSUFBSSxJQUFJLGFBQWEsQ0FBQztBQUN4RSxTQUFLLGNBQWMsY0FBYyxJQUFJLENBQUNDLFNBQVEsaUJBQWlCLFFBQVFBLE1BQUssWUFBWSxDQUFDO0FBQ3pGLFNBQUssZ0JBQWdCO0FBQUEsRUFDdkI7QUFBQSxFQUNBLElBQUksYUFBOEM7QUFDaEQsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBLEVBRUEsSUFBSSxpQkFBaUI7QUFDbkIsV0FBTyxLQUFLLFlBQVk7QUFBQSxFQUMxQjtBQUFBLEVBRUEsZUFBaUM7QUFDL0IsVUFBTSxnQkFBZ0IsaUJBQWlCLE9BQU8sS0FBSyxhQUFhO0FBQ2hFLFNBQUssWUFBWSxLQUFLLGFBQWE7QUFDbkMsV0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUVBLGdCQUFnQixXQUFzQztBQUVwRCxVQUFNLFFBQVEsS0FBSyxZQUFZLFFBQVEsU0FBUztBQUNoRCxRQUFJLFFBQVEsR0FBRztBQUNiLGFBQU87QUFBQSxJQUNUO0FBQ0EsU0FBSyxZQUFZLE9BQU8sT0FBTyxDQUFDO0FBQ2hDLFdBQU87QUFBQSxFQUNUO0FBQUEsRUFFQSxRQUFrQztBQUNoQyxXQUFPLEtBQUssT0FBTztBQUFBLEVBQ3JCO0FBQUEsRUFFQSxTQUFtQztBQUNqQyxVQUFNLGFBQWlELENBQUMsR0FBRyxLQUFLLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsRyxXQUFPO0FBQUEsTUFDTCxNQUFNLEtBQUs7QUFBQSxNQUNYO0FBQUEsTUFDQSxNQUFNLEtBQUs7QUFBQSxNQUNYLE1BQU07QUFBQSxJQUNSO0FBQUEsRUFDRjtBQUFBLEVBRUEseUJBQXlCLGNBQWlEO0FBQ3hFLFVBQU0sT0FBMEI7QUFBQSxNQUM5QixNQUFNO0FBQUEsTUFDTixLQUFLLENBQUM7QUFBQSxNQUNOLE1BQU0sQ0FBQztBQUFBLE1BQ1AsTUFBTTtBQUFBLElBQ1I7QUFDQSxVQUFNLGFBQWlDLENBQUM7QUFDeEMsU0FBSyxXQUFXLFFBQVEsQ0FBQyxNQUFNO0FBQzdCLFlBQU0sY0FBYyxFQUFFLGtCQUFrQixZQUFZO0FBQ3BELFVBQUksYUFBYTtBQUNmLG1CQUFXLEtBQUssV0FBVztBQUFBLE1BQzdCO0FBQUEsSUFDRixDQUFDO0FBQ0QsUUFBSSxLQUFLLFVBQVUsT0FBTztBQUN4QixhQUFPLEVBQUUsR0FBRyxNQUFNLEtBQUssV0FBVztBQUFBLElBQ3BDO0FBQ0EsUUFBSSxLQUFLLFVBQVUsT0FBTztBQUN4QixhQUFPLEVBQUUsR0FBRyxNQUFNLE1BQU0sV0FBVztBQUFBLElBQ3JDO0FBRUEsWUFBUSxJQUFJLDZEQUE2RDtBQUV6RSxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0EsSUFBSSxPQUEyQjtBQUM3QixXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUEsRUFDQSxJQUFJLEtBQUssb0JBQXdDO0FBQy9DLFFBQUksdUJBQXNCLHFCQUFxQixrQkFBa0IsR0FBRztBQUNsRSxXQUFLLFFBQVE7QUFBQSxJQUNmO0FBQUEsRUFDRjtBQUNGOzs7QUNuSE8sSUFBZSxrQkFBZixNQUFrQztBQUFBLEVBZ0IzQixZQUFxQixNQUFTLFlBQXFCO0FBQTlCO0FBQzNCLFNBQUssdUJBQXVCO0FBQzVCLFNBQUssYUFBYTtBQUNsQixTQUFLLGdCQUFnQixLQUFLLGdCQUFnQjtBQUMxQyxTQUFLLFdBQVcsS0FBSyxXQUFXO0FBQ2hDLFNBQUssZUFBZSxLQUFLLGVBQWU7QUFBQSxFQUM1QztBQUFBLEVBckJpQjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ1Y7QUFBQSxFQUNQLElBQUksY0FBc0I7QUFDdEIsV0FBTyxLQUFLO0FBQUEsRUFDaEI7QUFBQSxFQUNBLElBQUksVUFBVTtBQUNWLFdBQU8sS0FBSztBQUFBLEVBQ2hCO0FBQUEsRUFFQSxJQUFJLGVBQWU7QUFDZixXQUFPLEtBQUs7QUFBQSxFQUNoQjtBQVdKO0FBRU8sSUFBTSx5QkFBTixNQUFNLGdDQUErQixnQkFBb0M7QUFBQSxFQUM1RSxPQUF1QixTQUFTLENBQUMsU0FBNkIsZUFBd0I7QUFDbEYsV0FBTyxJQUFJLHdCQUF1QixTQUFTLFVBQVU7QUFBQSxFQUN6RDtBQUFBLEVBQ1UsWUFBWSxNQUEwQixZQUFxQjtBQUNqRSxVQUFNLE1BQU0sVUFBVTtBQUFBLEVBQzFCO0FBQUEsRUFDVSxrQkFBMEI7QUFDaEMsV0FBTyxLQUFLLEtBQUs7QUFBQSxFQUNyQjtBQUFBLEVBRVUsaUJBQXlCO0FBQy9CLFdBQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxLQUFLLEtBQUssWUFBWTtBQUFBLEVBQ3hEO0FBQUEsRUFFVSxhQUFxQjtBQUMzQixXQUFPLEtBQUssS0FBSyxNQUFNLGdCQUFnQixLQUFLLEtBQUssWUFBWTtBQUFBLEVBQ2pFO0FBQ0o7QUFFTyxJQUFNLDRCQUFOLE1BQU0sbUNBQWtDLGdCQUFxQztBQUFBLEVBQ2hGLE9BQWMsU0FBUyxDQUFDLGdCQUFxQyxlQUF3QjtBQUNqRixXQUFPLElBQUksMkJBQTBCLGdCQUFnQixVQUFVO0FBQUEsRUFDbkU7QUFBQSxFQUVVLFlBQVksTUFBMkIsWUFBcUI7QUFDbEUsVUFBTSxNQUFNLFVBQVU7QUFBQSxFQUMxQjtBQUFBLEVBQ1Usa0JBQTBCO0FBQ2hDLFdBQU8sS0FBSyxLQUFLLFNBQVMsS0FBSyxLQUFLO0FBQUEsRUFDeEM7QUFBQSxFQUVVLGlCQUF5QjtBQUMvQixXQUFPLEtBQUssS0FBSyxTQUFTLE9BQU8sS0FBSyxLQUFLLGFBQWE7QUFBQSxFQUM1RDtBQUFBLEVBRVUsYUFBcUI7QUFDM0IsV0FBTyxLQUFLLEtBQUs7QUFBQSxFQUNyQjtBQUNKOzs7QUNqRU8sSUFBTSxtQkFBTixNQUF1QjtBQUFBLEVBRzVCLFlBQ1csY0FDQSxrQkFDVDtBQUZTO0FBQ0E7QUFFVCxTQUFLLG9CQUFvQixvQkFBSSxJQUFJLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztBQUN0RCxTQUFLLGNBQWMsYUFBYSxJQUFJLENBQUMsUUFBUTtBQUMzQyxZQUFNLGFBQWEsS0FBSyxrQkFBa0IsSUFBSSxJQUFJLEdBQUc7QUFDckQsYUFBTyx1QkFBdUIsT0FBTyxLQUFLLFVBQVU7QUFBQSxJQUN0RCxDQUFDO0FBQUEsRUFDSDtBQUFBLEVBWGlCO0FBQUEsRUFDUjtBQUFBLEVBV1Qsc0JBQTZDO0FBQzNDLFVBQU0sV0FBVyxLQUFLLFlBQVksT0FBTyxDQUFDLFNBQVMsS0FBSyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLEdBQUc7QUFDN0YsV0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUVBLG1CQUFzRDtBQUNwRCxVQUFNLFdBQVcsS0FBSyxZQUFZLE9BQU8sQ0FBQyxTQUFTLEtBQUssVUFBVTtBQUNsRSxVQUFNLGFBQWEsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUk7QUFDN0MsV0FBTyxDQUFDLEdBQUcsVUFBVTtBQUFBLEVBQ3ZCO0FBQ0Y7OztBQ3ZCTyxJQUFNLG9CQUFOLE1BQXdCO0FBQUEsRUFJN0IsWUFDVyxjQUNBLGtCQUNUO0FBRlM7QUFDQTtBQUVULFNBQUssb0JBQW9CLG9CQUFJLElBQUksQ0FBQyxHQUFHLGdCQUFnQixDQUFDO0FBQ3RELFNBQUssY0FBYyxhQUFhLElBQUksQ0FBQyxRQUFRO0FBQzNDLFlBQU0sYUFBYSxLQUFLLGtCQUFrQixJQUFJLElBQUksTUFBTTtBQUN4RCxhQUFPLDBCQUEwQixPQUFPLEtBQUssVUFBVTtBQUFBLElBQ3pELENBQUM7QUFBQSxFQUNIO0FBQUEsRUFaaUI7QUFBQSxFQUNSO0FBQUEsRUFhVCxzQkFBNkM7QUFDM0MsVUFBTSxXQUFXLEtBQUssWUFBWSxPQUFPLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLEtBQUssTUFBTTtBQUNoRyxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBRUEsa0JBQXNEO0FBQ3BELFVBQU0sY0FBYyxLQUFLLFlBQVksT0FBTyxDQUFDLFNBQVMsS0FBSyxVQUFVO0FBQ3JFLFVBQU0sVUFBVSxZQUFZLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSTtBQUNuRCxXQUFPLENBQUMsR0FBRyxPQUFPO0FBQUEsRUFDcEI7QUFDRjs7O0FDMUJPLElBQU0sc0JBQU4sTUFBMEI7QUFBQSxFQUcvQixZQUNtQixjQUNBLGtCQUNqQjtBQUZpQjtBQUNBO0FBRWpCLFNBQUssVUFBVSxhQUFhLElBQUkscUJBQXFCLE1BQU07QUFDM0QsU0FBSyxZQUFZLEtBQUssYUFBYSxnQkFBZ0I7QUFBQSxFQUNyRDtBQUFBLEVBUlM7QUFBQSxFQUNEO0FBQUEsRUFRUixJQUFJLFdBQXlDO0FBQzNDLFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQSxFQUNBLElBQUksU0FBUyxVQUF3QztBQUNuRCxTQUFLLFlBQVksS0FBSyxhQUFhLFFBQVE7QUFBQSxFQUM3QztBQUFBLEVBQ0Esb0JBQW9DO0FBQ2xDLFdBQU8sS0FBSyxZQUFZLEtBQUssVUFBVSxLQUFLLFNBQVM7QUFBQSxFQUN2RDtBQUFBLEVBQ1EsYUFBYSxPQUE4QztBQUNqRSxRQUFJLENBQUM7QUFBTyxhQUFPO0FBQ25CLFFBQUksaUJBQWlCLHNCQUFzQjtBQUN6QyxhQUFPLEtBQUssUUFBUSxLQUFLLENBQUMsTUFBTSxNQUFNLEtBQUssS0FBSztBQUFBLElBQ2xEO0FBQ0EsUUFBSSxPQUFPLFVBQVUsVUFBVTtBQUM3QixhQUFPLEtBQUssUUFBUSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssV0FBVyxLQUFLLEtBQUs7QUFBQSxJQUM5RDtBQUNBLFdBQU87QUFBQSxFQUNUO0FBQ0Y7OztBQ1hPLElBQU0sY0FBTixNQUFNLHFCQUFvQixjQUE4QztBQUFBLEVBY25FLFlBQ1MsS0FDQSxZQUNqQjtBQUNBLFVBQU0sR0FBRztBQUhRO0FBQ0E7QUFHakIsVUFBTSxpQkFBaUIsS0FBSyxXQUFXLGtCQUFrQjtBQUN6RCxTQUFLLE9BQU8sSUFBSSxRQUFRO0FBQ3hCLFNBQUssUUFBUSxJQUFJLFFBQVE7QUFDekIsU0FBSyxjQUFjLElBQUksV0FBVyxPQUF3RCxDQUFDLEtBQUssU0FBUztBQUN2RyxVQUFJLEtBQUssU0FBUyxhQUFhO0FBQzdCLGNBQU0sWUFBWSxpQkFBaUIsUUFBUSxNQUFNLGNBQWM7QUFDL0QsWUFBSSxLQUFLLFNBQVM7QUFBQSxNQUNwQjtBQUNBLFVBQUksS0FBSyxTQUFTLG1CQUFtQjtBQUNuQyxjQUFNLGlCQUFpQixzQkFBc0IsUUFBUSxNQUFNLGNBQWM7QUFDekUsWUFBSSxLQUFLLGNBQWM7QUFBQSxNQUN6QjtBQUNBLGFBQU87QUFBQSxJQUNULEdBQUcsQ0FBQyxDQUFDO0FBRUwsU0FBSyxxQkFBcUIsSUFBSSxrQkFBa0IsV0FBVyx3QkFBd0IsSUFBSSxZQUFZO0FBRW5HLFNBQUssb0JBQW9CLElBQUksaUJBQWlCLFdBQVcscUJBQXFCLElBQUksV0FBVztBQUU3RixTQUFLLHNCQUFzQixJQUFJLG9CQUFvQixXQUFXLG1CQUFtQixJQUFJLFVBQVU7QUFBQSxFQUNqRztBQUFBLEVBdENTLGFBQTZCO0FBQUEsRUFDOUIsUUFBNEI7QUFBQSxFQUM3QixPQUFPO0FBQUE7QUFBQSxFQUVHLGNBQStELENBQUM7QUFBQSxFQUVoRTtBQUFBLEVBQ1Q7QUFBQSxFQUNDO0FBQUEsRUFDVCxPQUF1QixVQUFVLENBQUMsS0FBcUIsVUFBa0M7QUFDdkYsV0FBTyxJQUFJLGFBQVksS0FBSyxLQUFLO0FBQUEsRUFDbkM7QUFBQSxFQTZCQSxJQUFJLGFBQXNFO0FBQ3hFLFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQSxFQUVBLGdCQUFnQjtBQUNkLFdBQU8sS0FBSyxrQkFBa0I7QUFBQSxFQUNoQztBQUFBLEVBRUEsc0JBQXNCO0FBQ3BCLFdBQU8sS0FBSyxtQkFBbUI7QUFBQSxFQUNqQztBQUFBLEVBRUEsSUFBSSxpQkFBaUI7QUFDbkIsV0FBTyxLQUFLLFlBQVk7QUFBQSxFQUMxQjtBQUFBLEVBRUEsSUFBSSxLQUFLLE1BQTBCO0FBQ2pDLFFBQUksc0JBQXNCLHFCQUFxQixJQUFJLEdBQUc7QUFDcEQsV0FBSyxRQUFRO0FBQUEsSUFDZjtBQUFBLEVBQ0Y7QUFBQSxFQUVBLElBQUksT0FBTztBQUNULFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQSxFQUVBLGdCQUFnQixXQUE4RDtBQUM1RSxVQUFNLFFBQVEsS0FBSyxZQUFZLFFBQVEsU0FBUztBQUNoRCxRQUFJLFFBQVEsR0FBRztBQUNiLGFBQU87QUFBQSxJQUNUO0FBQ0EsU0FBSyxZQUFZLE9BQU8sT0FBTyxDQUFDO0FBQ2hDLFdBQU87QUFBQSxFQUNUO0FBQUEsRUFFQSxlQUFpQztBQUMvQixVQUFNLFlBQVksaUJBQWlCLE9BQU8sS0FBSyxXQUFXLGtCQUFrQixDQUFDO0FBQzdFLFNBQUssWUFBWSxLQUFLLFNBQVM7QUFDL0IsV0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUVBLG9CQUEyQztBQUN6QyxVQUFNLE1BQWdDO0FBQUEsTUFDcEMsTUFBTTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sWUFBWSxDQUFDO0FBQUEsSUFDZjtBQUNBLFVBQU0sV0FBVyxzQkFBc0IsUUFBUSxLQUFLLEtBQUssV0FBVyxZQUFZO0FBQ2hGLFNBQUssWUFBWSxLQUFLLFFBQVE7QUFDOUIsV0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUVBLFFBQXdCO0FBQ3RCLFdBQU8sS0FBSyxPQUFPO0FBQUEsRUFDckI7QUFBQSxFQUVBLFNBQXlCO0FBQ3ZCLFVBQU0sYUFBYSxLQUFLLFlBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUM7QUFDekQsVUFBTSxlQUFlLEtBQUssbUJBQW1CLG9CQUFvQjtBQUNqRSxVQUFNLGNBQWMsS0FBSyxrQkFBa0Isb0JBQW9CO0FBQy9ELFVBQU0sYUFBYSxLQUFLLG9CQUFvQixrQkFBa0I7QUFDOUQsVUFBTSxNQUFzQjtBQUFBLE1BQzFCLE1BQU0sS0FBSztBQUFBLE1BQ1gsTUFBTSxLQUFLO0FBQUEsTUFDWDtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0EsYUFBYSxjQUFvQztBQUMvQyxVQUFNLGFBQTBCLENBQUM7QUFDakMsU0FBSyxZQUFZLFFBQVEsQ0FBQyxNQUFNO0FBQzlCLFVBQUksR0FBRztBQUNMLFlBQUksYUFBYSxrQkFBa0I7QUFDakMsZ0JBQU0sa0JBQWtCLEVBQUUsa0JBQWtCLFlBQVk7QUFDeEQsY0FBSSxpQkFBaUI7QUFDbkIsdUJBQVcsS0FBSyxlQUFlO0FBQUEsVUFDakM7QUFBQSxRQUNGO0FBQ0EsWUFBSSxhQUFhLHVCQUF1QjtBQUN0QyxnQkFBTSxtQkFBbUIsRUFBRSx5QkFBeUIsWUFBWTtBQUNoRSxjQUFJO0FBQWtCLHVCQUFXLEtBQUssZ0JBQWdCO0FBQUEsUUFDeEQ7QUFBQSxNQUNGO0FBQUEsSUFDRixDQUFDO0FBQ0QsUUFBSSxNQUFtQixDQUFDO0FBQ3hCLFFBQUksT0FBb0IsQ0FBQztBQUV6QixRQUFJLEtBQUssU0FBUyxPQUFPO0FBQ3ZCLFlBQU0sQ0FBQyxHQUFHLFVBQVU7QUFBQSxJQUN0QjtBQUNBLFVBQU0sa0JBQXlDLENBQUM7QUFDaEQsVUFBTSxrQkFBa0IsS0FBSyxvQkFBb0I7QUFDakQsUUFBSSxpQkFBaUI7QUFDbkIsWUFBTSxjQUE4QjtBQUFBLFFBQ2xDLE1BQU07QUFBQSxRQUNOLFFBQVE7QUFBQSxRQUNSLFVBQVU7QUFBQSxRQUNWLFNBQVMsRUFBRSxRQUFRLGdCQUFnQixLQUFLLE9BQU87QUFBQSxNQUNqRDtBQUNBLHNCQUFnQixLQUFLLFdBQVc7QUFBQSxJQUNsQztBQUVBLFVBQU0sc0JBQXNCLEtBQUssbUJBQW1CLGdCQUFnQixFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTTtBQUN6RixRQUFJLG9CQUFvQixRQUFRO0FBQzlCLFlBQU0sVUFBMEI7QUFBQSxRQUM5QixNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixVQUFVO0FBQUEsUUFDVixTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUcsbUJBQW1CLEVBQUU7QUFBQSxNQUMvQztBQUNBLHNCQUFnQixLQUFLLE9BQU87QUFBQSxJQUM5QjtBQUNBLFVBQU0sY0FBYyxLQUFLLGtCQUFrQixpQkFBaUIsRUFBRSxJQUFJLENBQUMsU0FBUyxLQUFLLEdBQUc7QUFDcEYsUUFBSSxZQUFZLFFBQVE7QUFDdEIsWUFBTSxxQkFBcUM7QUFBQSxRQUN6QyxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixVQUFVO0FBQUEsUUFDVixTQUFTLEVBQUUsUUFBUSxDQUFDLEdBQUcsV0FBVyxFQUFFO0FBQUEsTUFDdEM7QUFDQSxzQkFBZ0IsS0FBSyxrQkFBa0I7QUFBQSxJQUN6QztBQUVBLFVBQU0sT0FBcUI7QUFBQSxNQUN6QixhQUFhLEtBQUs7QUFBQSxNQUNsQjtBQUFBLE1BQ0E7QUFBQSxNQUNBLFdBQVcsQ0FBQztBQUFBLE1BQ1osV0FBVztBQUFBLElBQ2I7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUNGOzs7QUNuTU8sSUFBZSx3QkFBZixNQUFrRDtBQUFBLEVBQzdDLFlBQStCLE9BQW9CO0FBQXBCO0FBQUEsRUFBcUI7QUFFaEU7OztBQ05BLFNBQWlCLDRCQUE0QjtBQUV0QyxJQUFVO0FBQUEsQ0FBVixDQUFVQyxpQkFBVjtBQUNFLEVBQU1BLGFBQUEseUJBQXlCLElBQUk7QUFBQSxJQUN4QztBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUNPLEVBQU1BLGFBQUEsMEJBQTBCLElBQUkscUJBQXFCLHNDQUFzQyxPQUFPLEVBQUU7QUFDeEcsRUFBTUEsYUFBQSxzQkFBc0IsSUFBSSxxQkFBcUIsMEJBQTBCLE9BQU8sRUFBRTtBQUN4RixFQUFNQSxhQUFBLHNCQUFzQixJQUFJLHFCQUFxQiwwQkFBMEIsT0FBTyxFQUFFO0FBQ3hGLEVBQU1BLGFBQUEsc0JBQXNCLElBQUkscUJBQXFCLDBCQUEwQixPQUFPLEVBQUU7QUFDeEYsRUFBTUEsYUFBQSxzQkFBc0IsSUFBSTtBQUFBLElBQ3JDO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ08sRUFBTUEsYUFBQSxrQkFBa0IsSUFBSTtBQUFBLElBQ2pDO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ08sRUFBTUEsYUFBQSxpQkFBaUIsSUFBSTtBQUFBLElBQ2hDO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ08sRUFBTUEsYUFBQSxpQkFBaUIsSUFBSTtBQUFBLElBQ2hDO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ0EsUUFBTSxTQUFTO0FBQUEsSUFDYixxQkFBQUEsYUFBQTtBQUFBLElBQ0EscUJBQUFBLGFBQUE7QUFBQSxJQUNBLHlCQUFBQSxhQUFBO0FBQUEsSUFDQSx3QkFBQUEsYUFBQTtBQUFBLElBQ0EscUJBQUFBLGFBQUE7QUFBQSxJQUNBLHFCQUFBQSxhQUFBO0FBQUEsSUFDQSxpQkFBQUEsYUFBQTtBQUFBLElBQ0EsZ0JBQUFBLGFBQUE7QUFBQSxFQUNGO0FBRUEsUUFBTSx3QkFBMkM7QUFBQSxJQUMvQyxNQUFNO0FBQUEsSUFDTixXQUFXO0FBQUEsTUFDVCxNQUFNO0FBQUEsTUFDTixNQUFNO0FBQUEsTUFDTixNQUFNO0FBQUEsUUFDSkEsYUFBQSx1QkFBdUIsbUJBQW1CO0FBQUEsUUFDMUNBLGFBQUEsb0JBQW9CLG1CQUFtQjtBQUFBLFFBQ3ZDQSxhQUFBLG9CQUFvQixtQkFBbUI7QUFBQSxNQUN6QztBQUFBLE1BQ0EsS0FBSyxDQUFDO0FBQUEsSUFDUjtBQUFBLEVBQ0Y7QUFDQSxRQUFNLHFCQUF3QztBQUFBLElBQzVDLE1BQU07QUFBQSxJQUNOLFdBQVc7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLEtBQUssQ0FBQ0EsYUFBQSxlQUFlLG1CQUFtQixDQUFDO0FBQUEsTUFDekMsTUFBTSxDQUFDO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFFQSxRQUFNLHNCQUF5QztBQUFBLElBQzdDLE1BQU07QUFBQSxJQUNOLFdBQVc7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLEtBQUssQ0FBQ0EsYUFBQSxlQUFlLG9CQUFvQixDQUFDO0FBQUEsTUFDMUMsTUFBTSxDQUFDO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFFQSxRQUFNLHdCQUEyQztBQUFBLElBQy9DLE1BQU07QUFBQSxJQUNOLFdBQVc7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLEtBQUssQ0FBQ0EsYUFBQSxnQkFBZ0Isb0JBQW9CLENBQUM7QUFBQSxNQUMzQyxNQUFNO0FBQUEsUUFDSkEsYUFBQSx1QkFBdUIsbUJBQW1CO0FBQUEsUUFDMUNBLGFBQUEsb0JBQW9CLG1CQUFtQjtBQUFBLFFBQ3ZDQSxhQUFBLG9CQUFvQixtQkFBbUI7QUFBQSxRQUN2Q0EsYUFBQSxlQUFlLG1CQUFtQjtBQUFBLE1BQ3BDO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDQSxRQUFNLHdCQUEyQztBQUFBLElBQy9DLE1BQU07QUFBQSxJQUNOLFdBQVc7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLEtBQUssQ0FBQztBQUFBLE1BQ04sTUFBTTtBQUFBLFFBQ0pBLGFBQUEsb0JBQW9CLG1CQUFtQjtBQUFBLFFBQ3ZDQSxhQUFBLG9CQUFvQixtQkFBbUI7QUFBQSxRQUN2Q0EsYUFBQSx3QkFBd0IsbUJBQW1CO0FBQUEsTUFDN0M7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNPLEVBQU1BLGFBQUEsV0FBVztBQUFBLElBQ3RCO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0Y7QUFDTyxFQUFNQSxhQUFBLHVCQUF1QixPQUFPLE9BQU8sTUFBTTtBQUNqRCxFQUFNQSxhQUFBLG9CQUFvQixPQUFPLE9BQU9BLGFBQUEsUUFBUTtBQUFBLEdBN0d4Qzs7O0FDRVYsSUFBVTtBQUFBLENBQVYsQ0FBVUMsZ0JBQVY7QUFDRSxFQUFNQSxZQUFBLHVCQUF1QixDQUFDLFdBQW1CLGlCQUFvRDtBQUMxRyxXQUFPO0FBQUEsTUFDTDtBQUFBLFFBQ0UsTUFBTTtBQUFBLFFBQ04sUUFBUTtBQUFBLFFBQ1IsVUFBVTtBQUFBLFFBQ1YsU0FBUyxDQUFDO0FBQUEsTUFDWjtBQUFBLE1BQ0E7QUFBQSxRQUNFLE1BQU07QUFBQSxRQUNOLFFBQVE7QUFBQSxRQUNSLFVBQVU7QUFBQSxRQUNWLFNBQVMsRUFBRSxTQUFTLGFBQWE7QUFBQSxNQUNuQztBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRU8sRUFBTUEsWUFBQSxzQkFBc0IsQ0FBQyxXQUFtQixpQkFBb0Q7QUFDekcsV0FBTztBQUFBLE1BQ0w7QUFBQSxRQUNFLE1BQU07QUFBQSxRQUNOLFFBQVE7QUFBQSxRQUNSLFVBQVU7QUFBQSxRQUNWLFNBQVMsQ0FBQztBQUFBLE1BQ1o7QUFBQSxNQUNBO0FBQUEsUUFDRSxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixVQUFVO0FBQUEsUUFDVixTQUFTLEVBQUUsU0FBUyxhQUFhO0FBQUEsTUFDbkM7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNPLEVBQU1BLFlBQUEsY0FBYyxDQUFDLGNBQXNDO0FBQ2hFLFVBQU1DLGVBQXdCO0FBQUEsTUFDNUIsTUFBTTtBQUFBLE1BQ04sUUFBUTtBQUFBLE1BQ1IsVUFBVTtBQUFBLE1BQ1YsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLFNBQVMsRUFBRTtBQUFBLElBQy9DO0FBQ0EsV0FBT0E7QUFBQSxFQUNUO0FBQ08sRUFBTUQsWUFBQSxjQUFjLENBQUMsY0FBc0M7QUFDaEUsVUFBTUUsZUFBd0I7QUFBQSxNQUM1QixNQUFNO0FBQUEsTUFDTixRQUFRO0FBQUEsTUFDUixVQUFVO0FBQUEsTUFDVixTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksVUFBVSxFQUFFO0FBQUEsSUFDaEQ7QUFDQSxXQUFPQTtBQUFBLEVBQ1Q7QUFFTyxFQUFNRixZQUFBLGVBQWUsQ0FDMUIsT0FDQSxVQUF3RTtBQUFBLElBQ3RFLFNBQVM7QUFBQSxJQUNULE9BQU87QUFBQSxJQUNQLGtCQUFrQjtBQUFBLEVBQ3BCLE1BQ3FCO0FBQ3JCLFVBQU0sVUFBVSxTQUFTLFdBQVc7QUFDcEMsVUFBTSxRQUFRLFNBQVMsU0FBUztBQUNoQyxVQUFNLFFBQVEsS0FBSyxJQUFJLFFBQVEsT0FBTztBQUN0QyxRQUFJLE1BQU0sV0FBVyxHQUFHO0FBQ3RCLGFBQU8sQ0FBQztBQUFBLElBQ1Y7QUFDQSxVQUFNLGNBQWMsTUFBTSxTQUFTO0FBQ25DLFVBQU0sZUFBZSxRQUFRLG9CQUFvQixNQUFNO0FBRXZELFFBQUksdUJBQXVCLE1BQU0sT0FBTyxDQUFDLE1BQU0sU0FBUztBQUN0RCxZQUFNLElBQUksS0FBSyxNQUFNLEtBQUs7QUFDMUIsYUFBTyxPQUFPO0FBQUEsSUFDaEIsR0FBRyxDQUFDO0FBRUosUUFBSSxTQUFTO0FBQ2IsVUFBTSxPQUFPLEtBQUssSUFBSSxRQUFRLHNCQUFzQixDQUFDO0FBQ3JELFVBQU0sU0FBUyxPQUFPO0FBRXRCLFVBQU0sUUFBUSxDQUFDLFNBQVM7QUFDdEIsZUFBUyxTQUFTO0FBQ2xCLFlBQU0sSUFBSSxLQUFLLE1BQU0sS0FBSztBQUMxQixZQUFNLElBQUk7QUFDVixlQUFTLFNBQVM7QUFDbEIsV0FBSyxNQUFNLElBQUk7QUFDZixXQUFLLE1BQU0sSUFBSTtBQUFBLElBQ2pCLENBQUM7QUFFRCxXQUFPO0FBQUEsRUFDVDtBQUVPLEVBQU1BLFlBQUEsVUFBVSxPQUF3QztBQUFBLElBQzdELEdBQUc7QUFBQSxJQUNILFdBQVc7QUFBQSxFQUNiO0FBQ08sRUFBTUEsWUFBQSxVQUFVLE9BQXdDO0FBQUEsSUFDN0QsR0FBRztBQUFBLElBQ0gsV0FBVztBQUFBLEVBQ2I7QUFFTyxFQUFNQSxZQUFBLFdBQVcsT0FBOEM7QUFBQSxJQUNwRSxHQUFHO0FBQUEsSUFDSCxHQUFHO0FBQUEsSUFDSCxXQUFXO0FBQUEsRUFDYjtBQUFBLEdBeEdlOzs7QUNLakI7QUFBQSxFQVFFLFNBQUFHO0FBQUEsRUFLQTtBQUFBLE9BRUs7QUFJUCxJQUFNQyxLQUFJQztBQUNWLElBQU0sb0JBQW9CLE1BQU1ELEdBQUUsYUFBYSxFQUFFO0FBQzFDLElBQU0sdUJBQU4sY0FBbUMsc0JBQXFDO0FBQUEsRUFDcEUsT0FBTztBQUFBLEVBQ0MsTUFBTTtBQUFBLEVBQ3ZCLGNBQWM7QUFDWixVQUFNLFlBQVk7QUFBQSxFQUNwQjtBQUFBLEVBRVEsYUFBYSxRQUF5RDtBQUM1RSxVQUFNLGdCQUFnQixjQUFjLFNBQVMsTUFBTTtBQUNuRCxVQUFNLFlBQVksY0FBYyxhQUFhO0FBQzdDLFVBQU0sZUFBOEMsQ0FBQztBQUNyRCxXQUFPLE1BQU0sUUFBUSxDQUFDLFNBQVM7QUFDN0IsWUFBTSxhQUFhLFlBQVksUUFBUSxNQUFNLFNBQVMsRUFBRSxhQUFhLE9BQU8sTUFBTTtBQUNsRixVQUFJLENBQUMsS0FBSyxRQUFRLFVBQVUsR0FBRztBQUM3QixxQkFBYSxLQUFLLFVBQVU7QUFBQSxNQUM5QixPQUFPO0FBQ0wsZ0JBQVEsZUFBZSxLQUFLLEtBQUsseUJBQXlCO0FBQzFELGdCQUFRLElBQUksSUFBSTtBQUNoQixnQkFBUSxJQUFJLFNBQVM7QUFDckIsZ0JBQVEsU0FBUztBQUFBLE1BQ25CO0FBQUEsSUFDRixDQUFDO0FBQ0QsV0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUVBLFFBQVEsUUFBcUM7QUFDM0MsVUFBTSxRQUFRLE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxLQUFLLFlBQVksR0FBRyxPQUFPLE1BQU0sQ0FBQztBQUN4RSxVQUFNLFFBQVEsS0FBSyxhQUFhLE1BQU07QUFDdEMsWUFBUSxJQUFJLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7QUFFcEMsVUFBTSxNQUFpQjtBQUFBLE1BQ3JCLGlCQUFpQixPQUFPO0FBQUEsTUFDeEIsWUFBWSxPQUFPO0FBQUEsTUFDbkIsV0FBVyxPQUFPO0FBQUEsTUFDbEIsSUFBSSxPQUFPO0FBQUEsTUFDWCxlQUFlLENBQUM7QUFBQSxNQUNoQjtBQUFBLE1BQ0EsaUJBQWlCLENBQUM7QUFBQSxNQUNsQixRQUFRLE9BQU87QUFBQSxNQUNmO0FBQUEsTUFDQSxnQkFBZ0I7QUFBQSxRQUNkO0FBQUEsVUFDRSxTQUFTO0FBQUEsVUFDVCxhQUFhO0FBQUEsWUFDWCxZQUFZLGdCQUFnQixtQkFBbUI7QUFBQSxZQUMvQyxZQUFZLG9CQUFvQixtQkFBbUI7QUFBQSxZQUNuRCxZQUFZLGVBQWUsbUJBQW1CO0FBQUEsVUFDaEQ7QUFBQSxRQUNGO0FBQUEsUUFDQTtBQUFBLFVBQ0UsU0FBUztBQUFBLFVBQ1QsYUFBYTtBQUFBLFlBQ1gsWUFBWSxlQUFlLG1CQUFtQjtBQUFBLFlBQzlDLFlBQVksb0JBQW9CLG1CQUFtQjtBQUFBLFVBQ3JEO0FBQUEsUUFDRjtBQUFBLFFBQ0E7QUFBQSxVQUNFLFNBQVM7QUFBQSxVQUNULGFBQWE7QUFBQSxZQUNYLFlBQVksZUFBZSxrQkFBa0I7QUFBQSxZQUM3QyxZQUFZLGdCQUFnQixtQkFBbUI7QUFBQSxVQUNqRDtBQUFBLFFBQ0Y7QUFBQSxRQUNBO0FBQUEsVUFDRSxTQUFTO0FBQUEsVUFDVCxhQUFhO0FBQUEsWUFDWCxZQUFZLGVBQWUsa0JBQWtCO0FBQUEsWUFDN0MsWUFBWSxvQkFBb0Isa0JBQWtCO0FBQUEsVUFDcEQ7QUFBQSxRQUNGO0FBQUEsUUFDQTtBQUFBLFVBQ0UsU0FBUztBQUFBLFVBQ1QsYUFBYTtBQUFBLFlBQ1gsWUFBWSxlQUFlLG1CQUFtQjtBQUFBLFlBQzlDLFlBQVksb0JBQW9CLG1CQUFtQjtBQUFBLFVBQ3JEO0FBQUEsUUFDRjtBQUFBLFFBQ0E7QUFBQSxVQUNFLFNBQVM7QUFBQSxVQUNULGFBQWE7QUFBQSxZQUNYLFlBQVksZUFBZSxtQkFBbUI7QUFBQSxZQUM5QyxZQUFZLG9CQUFvQixtQkFBbUI7QUFBQSxVQUNyRDtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsTUFDQSxZQUFZLFlBQVkscUJBQXFCLElBQUksQ0FBQyxRQUFRLElBQUksY0FBYztBQUFBLE1BQzVFLGNBQWMsWUFBWTtBQUFBLElBQzVCO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUNRLFlBQVksTUFBc0IsY0FBK0I7QUFHdkUsVUFBTSxPQUFPLEtBQUssUUFBUSxDQUFDO0FBQzNCLFVBQU0sRUFBRSxZQUFZLFVBQVUsSUFBSSxXQUFXLE1BQU0sSUFBSTtBQUN2RCxVQUFNLFdBQTBCLENBQUM7QUFDakMsVUFBTSxvQkFBaUMsQ0FBQztBQUN4QyxVQUFNLGlCQUE4QixDQUFDO0FBQ3JDLFFBQUksWUFBK0I7QUFDbkMsUUFBSSxnQkFBbUM7QUFFdkMsUUFBSSxLQUFLLFNBQVMsV0FBVztBQUMzQixZQUFNLE1BQU0sS0FBSyxxQkFBcUIsS0FBSyxTQUFTLFNBQVM7QUFDN0QsZUFBUyxLQUFLLEdBQUcsSUFBSSxRQUFRO0FBQzdCLHdCQUFrQixLQUFLLElBQUksUUFBUTtBQUNuQyxzQkFBZ0IsSUFBSTtBQUFBLElBQ3RCO0FBRUEsUUFBSSxVQUFVLFlBQVk7QUFDeEIsWUFBTSxhQUFhLGVBQWUsTUFBTSxLQUFLO0FBQzdDLFlBQU0sRUFBRSxTQUFTLFNBQVMsSUFBSSxLQUFLLGdCQUFnQixJQUFJLE1BQU0sVUFBVTtBQUV2RSxlQUFTLEtBQUssR0FBRyxTQUFTLFFBQVE7QUFBQSxJQUNwQztBQUVBLFFBQUksVUFBVSxhQUFhO0FBQ3pCLFlBQU0sV0FBVyxTQUFTO0FBQzFCLFlBQU0saUJBQThCLEtBQUssY0FBYyxJQUFJLFlBQVk7QUFBQSxRQUNyRSxNQUFNO0FBQUEsTUFDUixDQUFDO0FBQ0QsWUFBTSxZQUFZLFlBQVksYUFBYSxTQUFTLFVBQVUsS0FBSyxNQUFNLGFBQWEsU0FBUyxRQUFRLEtBQUs7QUFDNUcsWUFBTSxVQUF1QjtBQUFBLFFBQzNCLE1BQU07QUFBQSxRQUNOLE1BQU07QUFBQSxRQUNOLElBQUksa0JBQWtCO0FBQUEsUUFDdEIsT0FBTztBQUFBLE1BQ1Q7QUFDQSxlQUFTLEtBQUssT0FBTztBQUNyQixlQUFTLEtBQUssY0FBYztBQUFBLElBQzlCO0FBQ0EsUUFBSSxhQUFhLFVBQVUsU0FBUyxjQUFjO0FBQ2hELFlBQU0sbUJBQW1CLEtBQUssYUFBYSxTQUFTO0FBQ3BELGVBQVMsS0FBSyxnQkFBZ0I7QUFBQSxJQUNoQztBQUVBLFFBQUksYUFBYSxVQUFVLFNBQVMsY0FBYztBQUNoRCxZQUFNLGNBQWMsS0FBSyxhQUFhLFNBQVM7QUFDL0Msa0JBQVksWUFBWTtBQUN4QixlQUFTLEtBQUssR0FBRyxZQUFZLFFBQVE7QUFDckMscUJBQWUsS0FBSyxZQUFZLFFBQVE7QUFBQSxJQUMxQztBQUNBLFVBQU0sY0FBYyxZQUFZLFVBQVUsS0FBSztBQUMvQyxVQUFNLG1CQUFzQztBQUFBLE1BQzFDLGdCQUFnQjtBQUFBLE1BQ2hCLElBQUk7QUFBQSxNQUNKLE9BQU8sQ0FBQztBQUFBLE1BQ1IsZUFBZTtBQUFBLFFBQ2IsWUFBWSx1QkFBdUIsa0JBQWtCO0FBQUEsUUFDckQsWUFBWSx3QkFBd0Isa0JBQWtCO0FBQUEsTUFDeEQ7QUFBQSxNQUNBLGFBQWE7QUFBQSxRQUNYLFlBQVksdUJBQXVCLG1CQUFtQjtBQUFBLFFBQ3RELFlBQVksd0JBQXdCLG1CQUFtQjtBQUFBLE1BQ3pEO0FBQUEsSUFDRjtBQUVBLFFBQUksYUFBYSxLQUFLLGFBQWEsS0FBSyxVQUFVLFNBQVMsZ0JBQWdCLEtBQUssVUFBVSxTQUFTLFlBQVk7QUFDN0csdUJBQWlCLE1BQU0sS0FBSztBQUFBLFFBQzFCLE1BQU07QUFBQSxRQUNOLFNBQVMsVUFBVTtBQUFBLE1BQ3JCLENBQUM7QUFBQSxJQUNIO0FBRUEsUUFBSSxpQkFBaUIsS0FBSyxTQUFTLFVBQVU7QUFDM0MsdUJBQWlCLE1BQU0sS0FBSztBQUFBLFFBQzFCLE1BQU07QUFBQSxRQUNOLFNBQVMsY0FBYztBQUFBLE1BQ3pCLENBQUM7QUFBQSxJQUNIO0FBRUEsVUFBTSxVQUFtQjtBQUFBLE1BQ3ZCLE9BQU87QUFBQSxNQUNQO0FBQUEsTUFDQSxpQkFBaUI7QUFBQSxNQUNqQjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQSxNQUFNLENBQUMsR0FBRyxJQUFJO0FBQUEsTUFDZCxPQUFPO0FBQUEsSUFDVDtBQUNBLFdBQU87QUFBQSxFQUNUO0FBQUEsRUFFUSxhQUFhLE9BQTRCO0FBQy9DLFVBQU0sTUFBZTtBQUFBLE1BQ25CLE1BQU07QUFBQSxNQUNOLElBQUksTUFBTSxLQUFLO0FBQUEsTUFDZixPQUFPLEtBQUssTUFBTSxNQUFNO0FBQUEsTUFDeEIsS0FBSyxNQUFNLEtBQUs7QUFBQSxJQUNsQjtBQUNBLFdBQU87QUFBQSxFQUNUO0FBQUEsRUFFUSxxQkFBcUIsV0FHM0I7QUFDQSxVQUFNLElBQUksS0FBSyxNQUFNO0FBQ3JCLFVBQU0sVUFBVSxVQUFVO0FBQzFCLFVBQU0sVUFDSjtBQUVGLFVBQU0sV0FBV0EsR0FBRSxhQUFhLEVBQUU7QUFDbEMsVUFBTSxvQkFBNkI7QUFBQSxNQUNqQyxNQUFNO0FBQUEsTUFDTixJQUFJO0FBQUEsTUFDSixLQUFLO0FBQUEsTUFDTCxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsTUFBTSxJQUFJO0FBQUEsTUFDbEMsU0FBUztBQUFBLFFBQ1A7QUFBQSxVQUNFLE1BQU07QUFBQSxVQUNOLFFBQVE7QUFBQSxVQUNSLFVBQVU7QUFBQSxVQUNWLFNBQVMsRUFBRSxRQUFRLEVBQUU7QUFBQSxRQUN2QjtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGVBQWU7QUFBQSxRQUNiO0FBQUEsVUFDRSxXQUFXLFlBQVksU0FBUyxzQkFBc0I7QUFBQSxVQUN0RCxVQUFVLENBQUMsR0FBRyxXQUFXLHFCQUFxQixVQUFVLEVBQUUsVUFBVSxNQUFNLFdBQVcsQ0FBQztBQUFBLFVBQ3RGLFdBQVcsQ0FBQyxHQUFHLFdBQVcsb0JBQW9CLFVBQVUsRUFBRSxVQUFVLE1BQU0sVUFBVSxDQUFDO0FBQUEsUUFDdkY7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUNBLFVBQU0sV0FBc0I7QUFBQSxNQUMxQixNQUFNO0FBQUE7QUFBQSxNQUVOLElBQUksVUFBVTtBQUFBLE1BQ2QsS0FBSyxVQUFVO0FBQUEsSUFDakI7QUFDQSxXQUFPLEVBQUUsVUFBVSxVQUFVLENBQUMsaUJBQWlCLEVBQUU7QUFBQSxFQUNuRDtBQUFBLEVBRVEsYUFBYSxPQUE0QjtBQUMvQyxVQUFNLElBQUksS0FBSyxNQUFNO0FBQ3JCLFVBQU0sVUFBVSxNQUFNLEtBQUs7QUFDM0IsVUFBTSxlQUFlLGlCQUFpQjtBQUN0QyxVQUFNLGdCQUFnQixrQkFBa0I7QUFDeEMsVUFBTSxXQUEwQixDQUFDO0FBQ2pDLFVBQU0sV0FBc0I7QUFBQSxNQUMxQixNQUFNO0FBQUEsTUFDTixJQUFJLE1BQU0sS0FBSztBQUFBLE1BQ2YsT0FBTyxFQUFFLGFBQWE7QUFBQSxNQUN0QixLQUFLLE1BQU0sS0FBSztBQUFBLElBQ2xCO0FBQ0EsVUFBTSxVQUFtQjtBQUFBLE1BQ3ZCLElBQUk7QUFBQSxNQUNKLE1BQU07QUFBQSxNQUNOLEtBQUssRUFBRSxXQUFXO0FBQUEsTUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxXQUFXLEtBQUssR0FBRyxFQUFFLFdBQVcsV0FBVztBQUFBLE1BQ3pELFNBQVM7QUFBQSxRQUNQO0FBQUEsVUFDRSxNQUFNO0FBQUEsVUFDTixRQUFRO0FBQUEsVUFDUixVQUFVO0FBQUEsVUFDVixTQUFTLENBQUM7QUFBQSxRQUNaO0FBQUE7QUFBQSxRQUVBLFlBQVksb0JBQW9CLGtCQUFrQjtBQUFBLFFBQ2xELFlBQVksZ0JBQWdCLG1CQUFtQjtBQUFBLE1BQ2pEO0FBQUEsTUFDQSxlQUFlO0FBQUEsUUFDYjtBQUFBLFVBQ0UsV0FBVyxZQUFZLFNBQVMsc0JBQXNCO0FBQUEsVUFDdEQsVUFBVSxDQUFDLEdBQUcsV0FBVyxxQkFBcUIsY0FBYyxFQUFFLFdBQVcsV0FBVyxDQUFDO0FBQUEsVUFDckYsV0FBVyxDQUFDLEdBQUcsV0FBVyxvQkFBb0IsY0FBYyxFQUFFLFdBQVcsVUFBVSxDQUFDO0FBQUEsUUFDdEY7QUFBQSxRQUNBO0FBQUEsVUFDRSxXQUFXLFlBQVksU0FBUyxtQkFBbUI7QUFBQSxVQUNuRCxVQUFVLENBQUMsV0FBVyxZQUFZLFlBQVksQ0FBQztBQUFBLFVBQy9DLFdBQVcsQ0FBQyxXQUFXLFlBQVksWUFBWSxDQUFDO0FBQUEsUUFDbEQ7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUNBLFVBQU0sV0FBb0I7QUFBQSxNQUN4QixJQUFJO0FBQUEsTUFDSixNQUFNO0FBQUEsTUFDTixPQUFPO0FBQUEsUUFDTCxHQUFHLEVBQUUsWUFBWTtBQUFBLFFBQ2pCLFlBQVk7QUFBQSxRQUNaLEdBQUcsRUFBRSxZQUFZO0FBQUEsTUFDbkI7QUFBQSxNQUNBLEtBQUssRUFBRSxZQUFZO0FBQUEsTUFDbkIsU0FBUztBQUFBLFFBQ1A7QUFBQSxVQUNFLE1BQU07QUFBQSxVQUNOLFFBQVE7QUFBQSxVQUNSLFVBQVU7QUFBQSxVQUNWLFNBQVMsQ0FBQztBQUFBLFFBQ1o7QUFBQSxRQUNBLFlBQVksb0JBQW9CLG1CQUFtQjtBQUFBLFFBQ25ELFlBQVksZ0JBQWdCLGtCQUFrQjtBQUFBLE1BQ2hEO0FBQUEsTUFDQSxlQUFlO0FBQUEsUUFDYjtBQUFBLFVBQ0UsV0FBVyxZQUFZLFNBQVMsb0JBQW9CO0FBQUEsVUFDcEQsVUFBVSxDQUFDLFdBQVcsWUFBWSxhQUFhLENBQUM7QUFBQSxVQUNoRCxXQUFXLENBQUMsV0FBVyxZQUFZLGFBQWEsQ0FBQztBQUFBLFFBQ25EO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFDQSxhQUFTLEtBQUssT0FBTztBQUNyQixhQUFTLEtBQUssUUFBUTtBQUN0QixXQUFPLEVBQUUsVUFBVSxTQUFTO0FBQUEsRUFDOUI7QUFBQSxFQUNRLGdCQUNOLFFBQ0EsTUFDQSxZQUlBO0FBR0EsVUFBTSxJQUFJLEtBQUs7QUFDZixVQUFNLE9BQU8sS0FBSyxTQUFTO0FBQzNCLFVBQU0sZ0JBQWdCLEtBQUssWUFDdkIsYUFBYSxTQUFTLFVBQVUsS0FBSyxNQUNyQyxhQUFhLFNBQVMsUUFBUSxLQUFLO0FBQ3ZDLFVBQU0sV0FBcUI7QUFBQSxNQUN6QixNQUFNO0FBQUEsTUFDTjtBQUFBLE1BQ0EsZUFBZSxDQUFDO0FBQUEsTUFDaEIsSUFBSUEsR0FBRSxhQUFhLEVBQUU7QUFBQSxNQUNyQixTQUFTLENBQUM7QUFBQSxNQUNWLGVBQWUsQ0FBQztBQUFBLE1BQ2hCLE9BQU87QUFBQSxJQUNUO0FBQ0EsVUFBTSxVQUFVLEVBQUUsUUFBUSxJQUFJLENBQUMsTUFBTTtBQUNuQyxZQUFNLE9BQU8sS0FBSyxjQUFjLFFBQVEsR0FBRztBQUFBLFFBQ3pDLE1BQU07QUFBQSxRQUNOLFlBQVk7QUFBQSxNQUNkLENBQUM7QUFDRCxhQUFPO0FBQUEsSUFDVCxDQUFDO0FBQ0QsZUFBVyxhQUFhLE9BQU87QUFDL0IsV0FBTyxFQUFFLFVBQVUsUUFBUTtBQUFBLEVBQzdCO0FBQUEsRUFFUSxjQUNOLFFBQ0EsV0FDQSxTQUNBO0FBQ0EsVUFBTSxpQkFBeUIsQ0FBQztBQUNoQyxVQUFNLEVBQUUsSUFBSSxPQUFPLE1BQU0sSUFBSTtBQUU3QixVQUFNLEVBQUUsS0FBSyxNQUFNLElBQUksYUFBYTtBQUNwQyxRQUFJLFFBQVEsU0FBUyxtQkFBbUI7QUFDdEMsWUFBTSxPQUFhO0FBQUEsUUFDakIsTUFBTTtBQUFBLFFBQ047QUFBQSxRQUNBO0FBQUEsUUFDQSxhQUFhLFFBQVE7QUFBQSxRQUNyQixnQkFBZ0IsaUJBQWlCLFFBQVE7QUFBQSxNQUMzQztBQUNBLHFCQUFlLEtBQUssSUFBSTtBQUFBLElBQzFCO0FBRUEsVUFBTSxpQkFBMkI7QUFBQSxNQUMvQixNQUFNO0FBQUEsTUFDTixRQUFRO0FBQUEsTUFDUixVQUFVO0FBQUEsTUFDVixTQUFTO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUNBLFVBQU0sTUFBZTtBQUFBLE1BQ25CO0FBQUEsTUFDQSxNQUFNO0FBQUEsTUFDTixVQUFVO0FBQUEsUUFDUjtBQUFBLFVBQ0UsTUFBTTtBQUFBLFVBQ04sSUFBSUEsR0FBRSxhQUFhLEVBQUU7QUFBQSxVQUNyQixNQUFNO0FBQUEsVUFDTixPQUFPO0FBQUEsUUFDVDtBQUFBLE1BQ0Y7QUFBQSxNQUNBLGVBQWU7QUFBQSxRQUNiO0FBQUEsVUFDRSxXQUFXLFlBQVksU0FBUyxzQkFBc0I7QUFBQSxVQUN0RCxXQUFXLENBQUMsR0FBRyxXQUFXLG9CQUFvQixJQUFJLElBQUksVUFBVSxDQUFDO0FBQUEsVUFDakUsVUFBVSxDQUFDLEdBQUcsV0FBVyxxQkFBcUIsSUFBSSxJQUFJLFdBQVcsQ0FBQztBQUFBLFFBQ3BFO0FBQUEsTUFDRjtBQUFBLE1BQ0EsT0FBTyxFQUFFLEdBQUcsSUFBSSxLQUFLLEdBQUcsSUFBSSxXQUFXO0FBQUEsTUFDdkMsU0FBUyxDQUFDLGNBQWM7QUFBQSxJQUMxQjtBQUNBLFFBQUksUUFBUSxTQUFTLGVBQWU7QUFDbEMsVUFBSSxNQUFNLElBQUk7QUFDZCxVQUFJLE1BQU0sSUFBSTtBQUNkLFVBQUksTUFBTSxZQUFZO0FBQUEsSUFDeEI7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUNGOzs7QUMvWkEsU0FBb0IsU0FBQUUsY0FBYTtBQUNqQyxJQUFNQyxLQUFJRDtBQXFCSCxJQUFNLGdCQUFOLE1BQU0sZUFBYztBQUFBLEVBc0RqQixZQUNVLElBQ1QsTUFDQSxRQUNQO0FBSGdCO0FBQ1Q7QUFDQTtBQUFBLEVBQ047QUFBQSxFQXpESCxhQUFhO0FBQUEsRUFDYixZQUFZO0FBQUEsRUFDWixrQkFBa0I7QUFBQSxFQUNsQixRQUF1QixDQUFDO0FBQUEsRUFDeEIsWUFBK0I7QUFBQSxFQUN2QixTQUF3QixDQUFDO0FBQUEsRUFDakMsSUFBSSxRQUFvQztBQUN0QyxXQUFPLENBQUMsR0FBRyxLQUFLLE1BQU07QUFBQSxFQUN4QjtBQUFBLEVBRWlCLGlCQUFnQyxjQUFjLE9BQU87QUFBQSxFQUN0RSxJQUFJLE9BQWtDO0FBQ3BDLFdBQU8sQ0FBQyxHQUFHLEtBQUssY0FBYztBQUFBLEVBQ2hDO0FBQUEsRUFDQSxPQUFjLE9BQU8sSUFBWSxNQUFjLFFBQWdCO0FBQzdELFdBQU8sSUFBSSxlQUFjLElBQUksTUFBTSxNQUFNO0FBQUEsRUFDM0M7QUFBQSxFQUVBLE9BQWMsU0FBUyxLQUFzQztBQUMzRCxVQUFNLFNBQVMsSUFBSSxlQUFjLElBQUksSUFBSSxJQUFJLE1BQU0sSUFBSSxNQUFNO0FBQzdELFVBQU0sUUFBUSxJQUFJLE1BQU0sSUFBSSxZQUFZLFFBQVE7QUFDaEQsV0FBTyxlQUFlLEtBQUssSUFBSSxJQUFJO0FBQ25DLFdBQU8sa0JBQWtCLElBQUk7QUFDN0IsV0FBTyxhQUFhLElBQUk7QUFDeEIsV0FBTyxZQUFZLElBQUk7QUFDdkIsV0FBTyxRQUFRO0FBQ2YsV0FBTyxrQkFBa0IsSUFBSTtBQUM3QixXQUFPLFlBQVksSUFBSSxhQUFhO0FBQ3BDLFVBQU0sV0FBVyxJQUFJLFNBQVMsQ0FBQztBQUMvQixVQUFNLFlBQVksT0FBTyxhQUFhO0FBQ3RDLFdBQU8sU0FBUyxTQUFTLElBQUksQ0FBQyxNQUFNLFlBQVksUUFBUSxHQUFHLFNBQVMsQ0FBQztBQUNyRSxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBRUEsU0FBMkI7QUFDekIsVUFBTSxRQUFRLEtBQUssTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM5QyxVQUFNLE9BQU8sS0FBSyxlQUFlLE9BQU87QUFDeEMsVUFBTSxRQUFRLEtBQUssT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQztBQUVyRCxVQUFNLE1BQXdCO0FBQUEsTUFDNUIsaUJBQWlCLEtBQUs7QUFBQSxNQUN0QixZQUFZLEtBQUs7QUFBQSxNQUNqQixXQUFXLEtBQUs7QUFBQSxNQUNoQixJQUFJLEtBQUs7QUFBQSxNQUNULE1BQU0sS0FBSztBQUFBLE1BQ1g7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0EsV0FBVyxLQUFLO0FBQUEsTUFDaEIsUUFBUSxLQUFLO0FBQUEsSUFDZjtBQUNBLFdBQU87QUFBQSxFQUNUO0FBQUEsRUFPQSxRQUFRLE1BQXVCLFVBQVUsSUFBaUI7QUFDeEQsVUFBTSxVQUFVLFlBQVksT0FBTyxNQUFNLEVBQUU7QUFDM0MsUUFBSSxXQUFXLEtBQUssVUFBVSxLQUFLLE1BQU0sUUFBUTtBQUMvQyxXQUFLLE1BQU0sT0FBTyxTQUFTLEdBQUcsT0FBTztBQUFBLElBQ3ZDLE9BQU87QUFDTCxXQUFLLE1BQU0sS0FBSyxPQUFPO0FBQUEsSUFDekI7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBRUEsV0FBVyxNQUFtQixTQUEwQjtBQUN0RCxXQUFPLEtBQUssa0JBQWtCLE1BQU0sT0FBTztBQUFBLEVBQzdDO0FBQUEsRUFFUSxrQkFBa0IsTUFBbUIsU0FBaUI7QUFDNUQsVUFBTSxlQUFlQyxHQUFFLFVBQVUsR0FBRyxLQUFLLE1BQU0sU0FBUyxDQUFDO0FBQ3pELFFBQUksQ0FBQyxhQUFhLE9BQU8sR0FBRztBQUMxQixhQUFPO0FBQUEsSUFDVDtBQUNBLFVBQU0sU0FBUyxDQUFDLENBQUMsS0FBSyxNQUFNLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxLQUFLLEVBQUU7QUFDeEQsUUFBSSxRQUFRO0FBQ1YsYUFBTztBQUFBLElBQ1Q7QUFDQSxTQUFLLE1BQU0sT0FBTyxTQUFTLEdBQUcsSUFBSTtBQUNsQyxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBRUEsVUFBVTtBQUNSLFVBQU0sUUFBUSxLQUFLLGFBQWE7QUFDaEMsVUFBTSxRQUFRLEtBQUssT0FBTyxTQUFTO0FBQ25DLFVBQU0sT0FBTyxrQkFBa0I7QUFDL0IsVUFBTSxPQUFPLFlBQVk7QUFBQSxNQUN2QjtBQUFBLFFBQ0UsWUFBWSxDQUFDO0FBQUEsUUFDYixNQUFNO0FBQUEsUUFDTjtBQUFBLFFBQ0EsYUFBYSxDQUFDO0FBQUEsUUFDZCxZQUFZO0FBQUEsUUFDWixjQUFjLENBQUM7QUFBQSxNQUNqQjtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQ0EsU0FBSyxPQUFPLEtBQUssSUFBSTtBQUNyQixXQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0EsV0FBVyxNQUFtQjtBQUM1QixTQUFLLFNBQVMsS0FBSyxPQUFPLE9BQU8sQ0FBQyxNQUFNLE1BQU0sSUFBSTtBQUFBLEVBQ3BEO0FBQUEsRUFFQSxTQUFTLE1BQW1CLFNBQTBCO0FBQ3BELFVBQU0sUUFBUSxLQUFLLE1BQU0sUUFBUSxJQUFJO0FBQ3JDLFFBQUksUUFBUSxHQUFHO0FBQ2IsYUFBTztBQUFBLElBQ1Q7QUFDQSxVQUFNLGVBQWVBLEdBQUUsVUFBVSxHQUFHLEtBQUssTUFBTSxTQUFTLENBQUM7QUFDekQsUUFBSSxDQUFDLGFBQWEsT0FBTyxHQUFHO0FBQzFCLGFBQU87QUFBQSxJQUNUO0FBRUEsU0FBSyxNQUFNLE9BQU8sT0FBTyxDQUFDO0FBQzFCLFNBQUssTUFBTSxPQUFPLFNBQVMsR0FBRyxJQUFJO0FBQ2xDLFdBQU87QUFBQSxFQUNUO0FBQUEsRUFFQSxXQUFXLE1BQTRCO0FBQ3JDLFVBQU0sV0FBVyxLQUFLLE1BQU0sT0FBTyxDQUFDLE1BQU0sTUFBTSxJQUFJO0FBQ3BELFVBQU0sWUFBWSxTQUFTLFdBQVcsS0FBSyxNQUFNLFNBQVM7QUFDMUQsU0FBSyxRQUFRO0FBQ2IsV0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUVBLGtCQUFrQjtBQUNoQixZQUFRLElBQUksMEJBQTBCO0FBQ3RDLFVBQU0sUUFBUSxLQUFLLGFBQWE7QUFDaEMsVUFBTSxXQUFXLEtBQUssT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUNsRCxTQUFLLFNBQVMsU0FBUyxJQUFJLENBQUMsUUFBUSxZQUFZLFFBQVEsS0FBSyxLQUFLLENBQUM7QUFBQSxFQUNyRTtBQUFBLEVBRUEsZUFBMEI7QUFDeEIsVUFBTSxRQUE0QixDQUFDO0FBQ25DLFVBQU0sUUFBMEIsQ0FBQztBQUNqQyxVQUFNLGdCQUF1QyxDQUFDO0FBQzlDLFVBQU0sYUFBbUMsS0FBSyxLQUFLLElBQUksQ0FBQyxNQUFNO0FBQzVELFlBQU0sTUFBTSxFQUFFO0FBQ2QsWUFBTSxZQUFZLEtBQUssTUFBTSxPQUFPLENBQUMsT0FBTyxTQUFTO0FBQ25ELGVBQU8sS0FBSyxLQUFLLFNBQVMsR0FBRyxJQUFJLFFBQVEsSUFBSTtBQUFBLE1BQy9DLEdBQUcsQ0FBQztBQUNKLFlBQU0sa0JBQXNDO0FBQUEsUUFDMUMsTUFBTTtBQUFBLFFBQ047QUFBQSxRQUNBO0FBQUEsUUFDQSxhQUFhLEVBQUU7QUFBQSxNQUNqQjtBQUNBLGFBQU87QUFBQSxJQUNULENBQUM7QUFDRCxVQUFNLGNBQWtDLENBQUM7QUFDekMsVUFBTSxTQUFTO0FBQ2YsU0FBSyxNQUFNLFFBQVEsQ0FBQyxNQUFNLFVBQVU7QUFDbEMsWUFBTSxnQkFBZ0IsS0FBSyxxQkFBcUIsUUFBUSxLQUFLO0FBQzdELFlBQU0sS0FBSyxHQUFHLGFBQWE7QUFDM0IsWUFBTSxXQUFXLEtBQUssU0FBUztBQUMvQixZQUFNLGFBQStCO0FBQUEsUUFDbkMsTUFBTTtBQUFBLFFBQ04sUUFBUSxLQUFLO0FBQUEsUUFDYixZQUFZO0FBQUEsUUFDWixVQUFVLEtBQUssU0FBUztBQUFBLE1BQzFCO0FBQ0EsWUFBTSxvQkFBeUM7QUFBQSxRQUM3QyxNQUFNO0FBQUEsUUFDTixRQUFRLEtBQUs7QUFBQSxRQUNiLFlBQVk7QUFBQSxRQUNaO0FBQUEsTUFDRjtBQUNBLGtCQUFZLEtBQUssVUFBVTtBQUMzQixvQkFBYyxLQUFLLGlCQUFpQjtBQUFBLElBQ3RDLENBQUM7QUFDRCxVQUFNLFlBQVksSUFBSSxVQUFVLE9BQU8sT0FBTyxlQUFlLFlBQVksV0FBVztBQUVwRixXQUFPO0FBQUEsRUFDVDtBQUFBLEVBRUEsV0FBVyxNQUFpQztBQUMxQyxTQUFLLGVBQWUsVUFBVSxJQUFJO0FBQUEsRUFDcEM7QUFBQSxFQUVBLE9BQU8sWUFBd0I7QUFDN0IsU0FBSyxlQUFlLElBQUksVUFBVTtBQUFBLEVBQ3BDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVdRLHFCQUFxQixtQkFBbUIsT0FBd0M7QUFDdEYsVUFBTSxTQUFTLG1CQUFtQixLQUFLLFNBQVM7QUFDaEQsVUFBTSxNQUFNLEtBQUssTUFDZCxJQUFJLENBQUMsTUFBTSxVQUFVO0FBQ3BCLGFBQU8sS0FBSyxxQkFBcUIsUUFBUSxLQUFLO0FBQUEsSUFDaEQsQ0FBQyxFQUNBLEtBQUssQ0FBQztBQUNULFdBQU87QUFBQSxFQUNUO0FBQUEsRUFFQSxVQUE2QjtBQUMzQixVQUFNLFlBQVksS0FBSyxPQUFPO0FBQzlCLFVBQU0sTUFBTSxJQUFJLHFCQUFxQjtBQUNyQyxVQUFNLFNBQVMsSUFBSSxRQUFRLFNBQVM7QUFFcEMsV0FBTyxFQUFFLFVBQVUsQ0FBQyxHQUFHLFFBQVEsY0FBYyxDQUFDLEVBQUU7QUFBQSxFQUNsRDtBQUNGOzs7QUNoUE8sSUFBTSxjQUFOLE1BQU0scUJBQW9CLGNBQThDO0FBQUEsRUFDcEUsYUFBYTtBQUFBLEVBQ3RCO0FBQUEsRUFDQSxPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxvQkFBb0I7QUFBQTtBQUFBLEVBRVosWUFBWSxLQUFxQjtBQUN2QyxVQUFNLEdBQUc7QUFDVCxTQUFLLEtBQUssSUFBSTtBQUNkLFNBQUssb0JBQW9CLElBQUk7QUFDN0IsU0FBSyxPQUFPLElBQUk7QUFDaEIsU0FBSyxPQUFPLElBQUk7QUFBQSxFQUNsQjtBQUFBLEVBRUEsT0FBYyxPQUFPLE1BQWM7QUFDakMsVUFBTSxLQUFLLGdCQUFnQixPQUFPO0FBQ2xDLFVBQU0sTUFBc0I7QUFBQSxNQUMxQjtBQUFBLE1BQ0E7QUFBQSxNQUNBLE1BQU07QUFBQSxNQUNOLHFCQUFxQjtBQUFBLElBQ3ZCO0FBQ0EsVUFBTSxXQUFXLElBQUksYUFBWSxHQUFHO0FBQ3BDLFdBQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxPQUFjLFNBQVMsS0FBcUI7QUFDMUMsVUFBTSxXQUFXLElBQUksYUFBWSxHQUFHO0FBQ3BDLFdBQU87QUFBQSxFQUNUO0FBQUEsRUFFQSxRQUF3QjtBQUN0QixVQUFNLFFBQVEsZ0JBQWdCLE9BQU87QUFDckMsVUFBTSxNQUFNLEtBQUssT0FBTztBQUN4QixVQUFNLFlBQTRCLEVBQUUsR0FBRyxLQUFLLElBQUksTUFBTTtBQUN0RCxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBRUEsU0FBeUI7QUFDdkIsVUFBTSxNQUFzQjtBQUFBLE1BQzFCLElBQUksS0FBSztBQUFBLE1BQ1QsTUFBTSxLQUFLO0FBQUEsTUFDWCxNQUFNLEtBQUs7QUFBQSxNQUNYLHFCQUFxQixLQUFLO0FBQUEsSUFDNUI7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUNGOyIsCiAgIm5hbWVzIjogWyJCdWlsZGVyT2JqZWN0SWQiLCAiQnVpbGRlck9wdGlvblRoZW1lIiwgIkRVdGlsIiwgIlUiLCAibGFiZWwiLCAiQnVpbGRlck9wZXJhdG9yIiwgInYiLCAib3AiLCAiZHRvIiwgIkRTdGF0ZVByb3BzIiwgIlRoZW1lVXRpbHMiLCAiaGlkZUNvbW1hbmQiLCAic2hvd0NvbW1hbmQiLCAiRFV0aWwiLCAiVSIsICJEVXRpbCIsICJEVXRpbCIsICJVIl0KfQo=
|
|
2380
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL0J1aWxkZXJPYmplY3QudHMiLCAiLi4vc3JjL3RoZW1lL2ljb24tdXJscy50cyIsICIuLi9zcmMvdGhlbWUvSURlZmF1bHRUaGVtZS50cyIsICIuLi9zcmMvQnVpbGRlci1vcHRpb24udHMiLCAiLi4vc3JjL0J1aWxkZXItcXVlc3Rpb24udHMiLCAiLi4vc3JjL0J1aWxkZXJNYWluVGV4dC50cyIsICIuLi9zcmMvcnVsZWJ1aWxkZXIvUnVsZVZhcmlhYmxlLnRzIiwgIi4uL3NyYy9CdWlsZGVyLXBhZ2UudHMiLCAiLi4vc3JjL3ByZWZpeC50cyIsICIuLi9zcmMvcnVsZWJ1aWxkZXIvU2luZ2xlU2VsZWN0SXRlbS50cyIsICIuLi9zcmMvcnVsZWJ1aWxkZXIvUnVsZUlucHV0LnRzIiwgIi4uL3NyYy9CdWlsZGVyVGFnLnRzIiwgIi4uL3NyYy9ydWxlYnVpbGRlci9jb25kaXRpb24vQnVpbGRlci1vcGVyYXRvci50cyIsICIuLi9zcmMvcnVsZWJ1aWxkZXIvY29uZGl0aW9uL0J1aWxkZXItY29uZGl0aW9uLnRzIiwgIi4uL3NyYy9ydWxlYnVpbGRlci9jb25kaXRpb24vQnVpbGRlci1jb25kaXRpb24tZ3JvdXAudHMiLCAiLi4vc3JjL3J1bGVidWlsZGVyL211bHRpLXNlbGVjdC1pdGVtLnRzIiwgIi4uL3NyYy9ydWxlYnVpbGRlci90YWctYWN0aW9uLW1hbmFnZXIudHMiLCAiLi4vc3JjL3J1bGVidWlsZGVyL3BhZ2UtYWN0aW9uLW1hbmFnZXIudHMiLCAiLi4vc3JjL3J1bGVidWlsZGVyL2p1bXAtdG8tYWN0aW9uLW1hbmFnZXIudHMiLCAiLi4vc3JjL3J1bGVidWlsZGVyL0J1aWxkZXItcnVsZS50cyIsICIuLi9zcmMvdGhlbWUvQWJzdHJhY3RUaGVtZUNvbXBpbGVyLnRzIiwgIi4uL3NyYy90aGVtZS9zdGFuZGFyZC1wcm9wcy50cyIsICIuLi9zcmMvdGhlbWUvdGhlbWUtdXRpbHMudHMiLCAiLi4vc3JjL3RoZW1lL2RlZmF1bHQtdGhlbWUtY29tcGlsZXIudHMiLCAiLi4vc3JjL0J1aWxkZXItc2NoZW1hLnRzIiwgIi4uL3NyYy9CdWlsZGVyLXRleHQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IERVdGlsIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcblxuY29uc3QgVSA9IERVdGlsO1xuLyoqXG4gKiBCdWlsZGVyIG9iamVjdHMgYXJlIGNvbXBsZXggb2JqZWN0cyB0aGF0IGFyZSBlbWJlZGRlZCBpbnNpZGVcbiAqIGEgQnVpbGRlci1zY2hlbWEsIGFuZCBuZWVkcyB0byBiZSBzZXJpYWxpemVkIHRvIGpzb24uIE9mdGVuIHRoZXNlIG9iamVjdHNcbiAqIGFyZSB1c2VkIGluIGNvbGxlY3Rpb25zLCBhbmQgdGhhdCBpcyB3aHkgbW9zdCBvZiB0aGVtIG5lZWQgYW4gaWQuXG4gKi9cbnR5cGUgQnVpbGRlck9iamVjdFR5cGUgPVxuICB8IFwiYnVpbGRlci1wYWdlXCJcbiAgfCBcImJ1aWxkZXItcXVlc3Rpb24tb3B0aW9uXCJcbiAgfCBcImJ1aWxkZXItcXVlc3Rpb25cIlxuICB8IFwiYnVpbGRlci1tYWluLXRleHRcIlxuICB8IFwiYnVpbGRlci10ZXh0XCJcbiAgfCBcImJ1aWxkZXItcnVsZVwiXG4gIHwgXCJidWlsZGVyLXRhZ1wiXG4gIHwgXCJidWlsZGVyLWNvbmRpdGlvblwiXG4gIHwgXCJidWlsZGVyLXZhcmlhYmxlXCJcbiAgfCBcImJ1aWxkZXItY29uZGl0aW9uLWdyb3VwXCI7XG5cbmV4cG9ydCBuYW1lc3BhY2UgQnVpbGRlck9iamVjdElkIHtcbiAgZXhwb3J0IHR5cGUgUXVlc3Rpb25PcHRpb25JRCA9IHN0cmluZyAmIHsgX19PUFRJT05fX0lEX186IHRydWUgfTtcbiAgZXhwb3J0IHR5cGUgUXVlc3Rpb25JRCA9IHN0cmluZyAmIHsgX19RVUVTVElPTl9fSURfXzogdHJ1ZSB9O1xuICBleHBvcnQgdHlwZSBUZXh0SUQgPSBzdHJpbmcgJiB7IF9fVEVYVF9fSURfXzogdHJ1ZSB9O1xuICBleHBvcnQgdHlwZSBNYWluVGV4dElEID0gc3RyaW5nICYgeyBfX01BSU5fX1RFWFRfX0lEX186IHRydWUgfTtcbiAgZXhwb3J0IHR5cGUgVGFnSWQgPSBzdHJpbmcgJiB7IF9fVEFHX19JRF9fOiB0cnVlIH07XG4gIGV4cG9ydCBjb25zdCBjcmVhdGVUYWdJZCA9ICgpOiBUYWdJZCA9PiB7XG4gICAgcmV0dXJuIGNyZWF0ZUlkKFwiYnVpbGRlci10YWdcIikgYXMgVGFnSWQ7XG4gIH07XG5cbiAgZXhwb3J0IGNvbnN0IG1haW5UZXh0SWQgPSAoKTogTWFpblRleHRJRCA9PiB7XG4gICAgcmV0dXJuIGNyZWF0ZUlkKFwiYnVpbGRlci1tYWluLXRleHRcIikgYXMgTWFpblRleHRJRDtcbiAgfTtcbiAgZXhwb3J0IGNvbnN0IHRleHRJZCA9ICgpOiBUZXh0SUQgPT4ge1xuICAgIHJldHVybiBjcmVhdGVJZChcImJ1aWxkZXItdGV4dFwiKSBhcyBUZXh0SUQ7XG4gIH07XG5cbiAgZXhwb3J0IGNvbnN0IHF1ZXN0aW9uT3B0aW9uSWQgPSAoKTogUXVlc3Rpb25PcHRpb25JRCA9PiB7XG4gICAgcmV0dXJuIGNyZWF0ZUlkKFwiYnVpbGRlci1xdWVzdGlvbi1vcHRpb25cIikgYXMgUXVlc3Rpb25PcHRpb25JRDtcbiAgfTtcbiAgZXhwb3J0IGNvbnN0IHF1ZXN0aW9uSWQgPSAoKTogUXVlc3Rpb25JRCA9PiB7XG4gICAgcmV0dXJuIGNyZWF0ZUlkKFwiYnVpbGRlci1xdWVzdGlvblwiKSBhcyBRdWVzdGlvbklEO1xuICB9O1xuXG4gIGNvbnN0IGNyZWF0ZUlkID0gKHR5cGU6IEJ1aWxkZXJPYmplY3RUeXBlKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBpZCA9IFUucmFuZG9tU3RyaW5nKDI0KTtcbiAgICByZXR1cm4gdHlwZSArIFwiLVwiICsgaWQ7XG4gIH07XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCdWlsZGVyT2JqZWN0PFQgZXh0ZW5kcyBCdWlsZGVyT2JqZWN0VHlwZSwgRHRvIGV4dGVuZHMge30+IHtcbiAgLy8gYWJzdHJhY3QgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgYWJzdHJhY3QgcmVhZG9ubHkgb2JqZWN0VHlwZTogVDtcbiAgYWJzdHJhY3QgdG9Kc29uKCk6IER0bztcbiAgYWJzdHJhY3QgY2xvbmUoKTogRHRvO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3JpZ2luYWxEdG86IER0bztcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGR0bzogRHRvKSB7XG4gICAgdGhpcy5vcmlnaW5hbER0byA9IGR0bztcbiAgICAvLyB0aGlzLm9iamVjdElkID0gZHRvLm9iamVjdElkO1xuICB9XG59XG4iLCAiZXhwb3J0IGNvbnN0IEljb25VcmxzID0ge1xuICBpc3BlV2hpdGVQbmc6XG4gICAgJ2h0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZpc3BlLWh2aXQucG5nP2FsdD1tZWRpYSZ0b2tlbj1mNmZlNjI4Yi0yZDk5LTQ3MmQtYTJlYS1lMDYyODczZTJlMjInLFxuICBwYXVzZVN2ZzpcbiAgICAnaHR0cHM6Ly9maXJlYmFzZXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vdjAvYi9pc3BlLWJhY2tlbmQtZGV2LmFwcHNwb3QuY29tL28vcHVibGljLWFzc2V0cyUyRnBhdXNlLTI0cHguc3ZnP2FsdD1tZWRpYSZ0b2tlbj00NzMzNzQ5MS1iYjBkLTRjNTYtOWM4OS1hMDczY2UxOWZhZDQnLFxuICBwYXVzZUNpcmNsZU91dGxpbmVTdmc6XG4gICAgJ2h0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZwYXVzZV9jaXJjbGVfb3V0bGluZS0yNHB4LnN2Zz9hbHQ9bWVkaWEmdG9rZW49MTMzYWFiYzgtYWI5YS00ZWFhLTk5MTQtNGYwZjgyYzIyZWUyJyxcblxuICBwYXVzZUNpcmNsZUZpbGxlZFN2ZzpcbiAgICAnaHR0cHM6Ly9maXJlYmFzZXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vdjAvYi9pc3BlLWJhY2tlbmQtZGV2LmFwcHNwb3QuY29tL28vcHVibGljLWFzc2V0cyUyRnBhdXNlX2NpcmNsZV9maWxsZWQtMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPWFmM2YxMmMzLTMxOTktNDA5Ni04ZWQyLTc2MzQ3YjlhMGEwYScsXG4gIHBsYXlDaXJjbGVSZWd1bGFyOlxuICAgICdodHRwczovL2ZpcmViYXNlc3RvcmFnZS5nb29nbGVhcGlzLmNvbS92MC9iL2lzcGUtYmFja2VuZC1kZXYuYXBwc3BvdC5jb20vby9wdWJsaWMtYXNzZXRzJTJGcGxheS1jaXJjbGUtcmVndWxhci5zdmc/YWx0PW1lZGlhJnRva2VuPTA4NjdiNjkwLWQ3ZmQtNDc1Yy04ZTkxLWIyZDdhZWNhNTRkMScsXG4gIHBsYXlBcnJvd1N2ZzpcbiAgICAnaHR0cHM6Ly9maXJlYmFzZXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vdjAvYi9pc3BlLWJhY2tlbmQtZGV2LmFwcHNwb3QuY29tL28vcHVibGljLWFzc2V0cyUyRnBsYXlfYXJyb3ctMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPTJmYTk1ZTFmLTYxZjctNGExOC1hZmIzLTIxMGVhYmFlODIyNycsXG4gIHBsYXlDaXJjbGVPdXRsaW5lOlxuICAgICdodHRwczovL2ZpcmViYXNlc3RvcmFnZS5nb29nbGVhcGlzLmNvbS92MC9iL2lzcGUtYmFja2VuZC1kZXYuYXBwc3BvdC5jb20vby9wdWJsaWMtYXNzZXRzJTJGcGxheV9jaXJjbGVfb3V0bGluZS0yNHB4LnN2Zz9hbHQ9bWVkaWEmdG9rZW49M2E5ZjYyYzUtZGZhMi00MGVmLWE1MGUtY2YxYmRkMmQ0N2YyJyxcblxuICBzdG9wQ2lyY2xlU3ZnOlxuICAgICdodHRwczovL2ZpcmViYXNlc3RvcmFnZS5nb29nbGVhcGlzLmNvbS92MC9iL2lzcGUtYmFja2VuZC1kZXYuYXBwc3BvdC5jb20vby9wdWJsaWMtYXNzZXRzJTJGc3RvcF9jaXJjbGUtMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPThmYmM4Yjg5LTI5YmItNDlhZC1hZTExLWI4ODgyYmEzY2E3NycsXG4gIHN0b3BTdmc6XG4gICAgJ2h0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZzdG9wLTI0cHguc3ZnP2FsdD1tZWRpYSZ0b2tlbj1kMmNkNDFmMS0xMzMxLTQyNDMtOWI3YS1kYzBmMGNjZDI1NWQnLFxuICByZXBsYXlDaXJjbGVTdmc6XG4gICAgJ2h0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZyZXBsYXktMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPTNjMzVjY2Y0LWI0NjctNGU4MS04NWQ2LWIzNmFjNjQ3MzhhZCcsXG5cbiAgdm9sdW1lT2ZmU3ZnOlxuICAgICdodHRwczovL2ZpcmViYXNlc3RvcmFnZS5nb29nbGVhcGlzLmNvbS92MC9iL2lzcGUtYmFja2VuZC1kZXYuYXBwc3BvdC5jb20vby9wdWJsaWMtYXNzZXRzJTJGdm9sdW1lX29mZi0yNHB4LnN2Zz9hbHQ9bWVkaWEmdG9rZW49NGU0MWNjMTAtOWY0Yi00OTY3LWI0ZGYtZWQwNjgyZTY1N2E5JyxcbiAgdm9sdW1lVXBTdmc6XG4gICAgJ2h0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZ2b2x1bWVfdXAtMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPTU1MWJkMGE2LWE1MTUtNGY4Ny1hMjQ1LWRhNDMzZjQ4MzNmOSdcbn07XG4iLCAiaW1wb3J0IHR5cGUgeyBDc3NUaGVtZSB9IGZyb20gXCIuL2Nzcy10aGVtZVwiO1xuaW1wb3J0IHsgRFN0eWxlLCBEQ3NzIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcbmltcG9ydCB7IEljb25VcmxzIH0gZnJvbSBcIi4vaWNvbi11cmxzXCI7XG5cbnR5cGUgUFN0eWxlID0gUGFydGlhbDxEU3R5bGU+O1xuZXhwb3J0IGludGVyZmFjZSBJRGVmYXVsdFRoZW1lIHtcbiAgbmFtZTogc3RyaW5nO1xuICBpbWFnZTogeyBzdHlsZTogUFN0eWxlIH07XG4gIHZpZGVvUGxheWVyOiB7XG4gICAgcGxheUJ1dHRvbjoge1xuICAgICAgaWNvblVybDogc3RyaW5nO1xuICAgICAgY3NzOiBQU3R5bGU7XG4gICAgICBjc3NEaXNhYmxlZDogUFN0eWxlO1xuICAgICAgY3NzRW5hYmxlZDogUFN0eWxlO1xuICAgIH07XG4gICAgcGF1c2VCdXR0b246IHtcbiAgICAgIGljb25Vcmw6IHN0cmluZztcbiAgICAgIGNzczogUFN0eWxlO1xuICAgICAgY3NzRGlzYWJsZWQ6IFBTdHlsZTtcbiAgICAgIGNzc0VuYWJsZWQ6IFBTdHlsZTtcbiAgICB9O1xuICAgIHZpZGVvRWxlbWVudDoge1xuICAgICAgY3NzOiBQU3R5bGU7XG4gICAgfTtcbiAgfTtcbiAgbWFpblRleHQ6IHtcbiAgICBub01lZGlhOiB7XG4gICAgICB0ZXh0OiB7IGNzczogUFN0eWxlOyBjc3NEaXNhYmxlZDogUFN0eWxlOyBjc3NFbmFibGVkOiBQU3R5bGUgfTtcbiAgICAgIGF1ZGlvOiB7IGNzczogUFN0eWxlOyBjc3NEaXNhYmxlZDogUFN0eWxlOyBjc3NFbmFibGVkOiBQU3R5bGUgfTtcbiAgICB9O1xuICAgIHdpdGhNZWRpYToge1xuICAgICAgdGV4dDogeyBjc3M6IFBTdHlsZTsgY3NzRGlzYWJsZWQ6IFBTdHlsZTsgY3NzRW5hYmxlZDogUFN0eWxlIH07XG4gICAgICBhdWRpbzogeyBjc3M6IFBTdHlsZTsgY3NzRGlzYWJsZWQ6IFBTdHlsZTsgY3NzRW5hYmxlZDogUFN0eWxlIH07XG4gICAgfTtcbiAgfTtcbiAgLy8gbWFpblRleHRUaGVtZTogQnVpbGRlclRleHRUaGVtZTtcbiAgcmVzcG9uc2VCdXR0b25zOiBCdWlsZGVyT3B0aW9uVGhlbWU7XG4gIG5leHRCdXR0b25UaGVtZTogQnVpbGRlck9wdGlvblRoZW1lO1xuICAvLyBtYWluUXVlc3Rpb25UZXh0OiBCdWlsZGVyVGV4dFRoZW1lO1xuICBkb250S25vd0J1dHRvblRoZW1lPzogQnVpbGRlck9wdGlvblRoZW1lO1xuICBidXR0b25UaGVtZXM/OiBBcnJheTxCdWlsZGVyT3B0aW9uVGhlbWU+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJPcHRpb25UaGVtZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGl2OiBDc3NUaGVtZTtcbiAgdGV4dDE6IFBTdHlsZTtcbiAgdGV4dDI/OiBDc3NUaGVtZTtcbn1cblxubmFtZXNwYWNlIEJ1aWxkZXJPcHRpb25UaGVtZSB7XG4gIGNvbnN0IEdSRUVOID0gXCIjNzBBRDQ3XCI7XG4gIGNvbnN0IFlFTExPVyA9IFwiI0ZGQzAwMFwiO1xuICBjb25zdCBPUkFOR0UgPSBcIiNGNDkwMkNcIjtcbiAgY29uc3QgUkVEID0gXCIjRkYwMDAwXCI7XG4gIGNvbnN0IExJR0hUX0JMVUUgPSBcIiM0MjcxOUNcIjtcbiAgY29uc3QgV0hJVEUgPSBcIiNmZmZmZmZcIjtcbiAgY29uc3QgQkxVRSA9IFwiIzJGNTU5N1wiO1xuICBjb25zdCBCVE5fV0lEVEggPSAxOC41O1xuICBjb25zdCBCVE5fQk9SREVSX1dJRFRIID0gMztcbiAgY29uc3QgQlROX0JPUkRFUl9SQURJVVMgPSAxMDtcbiAgY29uc3QgQlROX0JPUkRFUl9TVFlMRTogRFN0eWxlW1wiYm9yZGVyU3R5bGVcIl0gPSBcInNvbGlkXCI7XG4gIGNvbnN0IEJUTl9IRUlHSFQgPSA5LjI7XG4gIGNvbnN0IEJUTl9TSE9SVF9XSURUSCA9IDEzLjc7XG4gIGNvbnN0IEZPTlRfV0VJR0hUOiBEU3R5bGVbXCJmb250V2VpZ2h0XCJdID0gNjAwO1xuICBjb25zdCBGT05UX1NJWkU6IERDc3MuUHhbXCJ2YWx1ZVwiXSA9IDM1O1xuXG4gIGV4cG9ydCBjb25zdCBibHVlQnV0dG9uID0gKCk6IEJ1aWxkZXJPcHRpb25UaGVtZSA9PiAoe1xuICAgIG5hbWU6IFwiYmx1ZS1idXR0b24tdGhlbWVcIixcbiAgICBkaXY6IHtcbiAgICAgIGNzczoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IEJMVUUsXG4gICAgICAgIGJvcmRlckNvbG9yOiBCTFVFLFxuICAgICAgICB0ZXh0Q29sb3I6IFdISVRFLFxuICAgICAgICBmb250U2l6ZTogeyBfdW5pdDogXCJweFwiLCB2YWx1ZTogRk9OVF9TSVpFIH0sXG4gICAgICAgIGJvcmRlcldpZHRoOiB7IF91bml0OiBcInB4XCIsIHZhbHVlOiBCVE5fQk9SREVSX1dJRFRIIH0sXG4gICAgICAgIGJvcmRlclN0eWxlOiBCVE5fQk9SREVSX1NUWUxFLFxuICAgICAgICBib3JkZXJSYWRpdXM6IHsgdmFsdWU6IEJUTl9CT1JERVJfUkFESVVTLCBfdW5pdDogXCJweFwiIH0sXG4gICAgICAgIHBhZGRpbmc6IHsgX3VuaXQ6IFwicHhcIiwgdmFsdWU6IDQwIH0sXG4gICAgICAgIGg6IEJUTl9IRUlHSFQsXG4gICAgICAgIHc6IEJUTl9XSURUSCxcbiAgICAgICAgeDogMTAsXG4gICAgICAgIHk6IDgsXG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcbiAgICAgIH0sXG4gICAgICBjc3NEaXNhYmxlZDogeyBvcGFjaXR5OiAwLjMsIGN1cnNvcjogXCJub3QtYWxsb3dlZFwiIH0sXG4gICAgICBjc3NFbmFibGVkOiB7IG9wYWNpdHk6IDEsIGN1cnNvcjogXCJwb2ludGVyXCIgfSxcbiAgICB9LFxuICAgIHRleHQxOiB7XG4gICAgICB5OiA1MCxcbiAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMCUsIDUwJSlcIixcbiAgICAgIHRleHRDb2xvcjogV0hJVEUsXG4gICAgICBmb250U2l6ZTogeyBfdW5pdDogXCJweFwiLCB2YWx1ZTogRk9OVF9TSVpFIH0sXG4gICAgICB3OiA4NCxcbiAgICAgIHg6IDgsXG4gICAgICBmb250V2VpZ2h0OiBGT05UX1dFSUdIVCxcbiAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcbiAgICB9LFxuICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IERlZmF1bHRUaGVtZTogSURlZmF1bHRUaGVtZSA9IHtcbiAgbmFtZTogXCJkZWZhdWx0LXRoZW1lXCIsXG4gIHZpZGVvUGxheWVyOiB7XG4gICAgcGxheUJ1dHRvbjoge1xuICAgICAgaWNvblVybDogSWNvblVybHMucGxheUNpcmNsZVJlZ3VsYXIsXG4gICAgICBjc3M6IHsgdzogNSwgaDogNSwgeTogNDgsIHg6IDQgfSxcbiAgICAgIGNzc0Rpc2FibGVkOiB7IG9wYWNpdHk6IDAuMywgY3Vyc29yOiBcIm5vdC1hbGxvd2VkXCIgfSxcbiAgICAgIGNzc0VuYWJsZWQ6IHsgb3BhY2l0eTogMC44LCBjdXJzb3I6IFwicG9pbnRlclwiIH0sXG4gICAgfSxcbiAgICBwYXVzZUJ1dHRvbjoge1xuICAgICAgaWNvblVybDogSWNvblVybHMucGF1c2VTdmcsXG4gICAgICBjc3M6IHsgdzogNSwgaDogNSwgeTogNDgsIHg6IDQgfSxcbiAgICAgIGNzc0Rpc2FibGVkOiB7IG9wYWNpdHk6IDAuMywgY3Vyc29yOiBcIm5vdC1hbGxvd2VkXCIgfSxcbiAgICAgIGNzc0VuYWJsZWQ6IHsgb3BhY2l0eTogMC44LCBjdXJzb3I6IFwicG9pbnRlclwiIH0sXG4gICAgfSxcbiAgICB2aWRlb0VsZW1lbnQ6IHsgY3NzOiB7IHc6IDEwMCwgaDogNDUsIHk6IDU1LCB4OiAwIH0gfSxcbiAgfSxcbiAgaW1hZ2U6IHsgc3R5bGU6IHsgaDogNTAsIHc6IDEwMCwgeDogMCB9IH0sXG4gIG1haW5UZXh0OiB7XG4gICAgbm9NZWRpYToge1xuICAgICAgdGV4dDoge1xuICAgICAgICBjc3M6IHtcbiAgICAgICAgICB3OiA4MCxcbiAgICAgICAgICB5OiA2NSxcbiAgICAgICAgICB4OiAxMCxcbiAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgICAgdGV4dENvbG9yOiBcImJsYWNrXCIsXG4gICAgICAgICAgZm9udFNpemU6IHsgX3VuaXQ6IFwicHhcIiwgdmFsdWU6IDQwIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNzc0Rpc2FibGVkOiB7fSxcbiAgICAgICAgY3NzRW5hYmxlZDoge30sXG4gICAgICB9LFxuICAgICAgYXVkaW86IHtcbiAgICAgICAgY3NzOiB7XG4gICAgICAgICAgaDogNixcbiAgICAgICAgICB3OiA2LFxuICAgICAgICAgIHg6IDQsXG4gICAgICAgICAgeTogMzIsXG4gICAgICAgICAgY3Vyc29yOiBcInBvaW50ZXJcIixcbiAgICAgICAgICBvcGFjaXR5OiAwLjgsXG4gICAgICAgICAgdmlzaWJpbGl0eTogXCJ2aXNpYmxlXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGNzc0Rpc2FibGVkOiB7IG9wYWNpdHk6IDAuMywgY3Vyc29yOiBcIm5vdC1hbGxvd2VkXCIgfSxcbiAgICAgICAgY3NzRW5hYmxlZDogeyBvcGFjaXR5OiAwLjgsIGN1cnNvcjogXCJwb2ludGVyXCIgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB3aXRoTWVkaWE6IHtcbiAgICAgIHRleHQ6IHtcbiAgICAgICAgY3NzOiB7XG4gICAgICAgICAgdzogODAsXG4gICAgICAgICAgeTogMjcsXG4gICAgICAgICAgeDogMTAsXG4gICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxuICAgICAgICAgIHRleHRDb2xvcjogXCJibGFja1wiLFxuICAgICAgICAgIGZvbnRTaXplOiB7IF91bml0OiBcInB4XCIsIHZhbHVlOiAzMCB9LFxuICAgICAgICB9LFxuICAgICAgICBjc3NEaXNhYmxlZDoge30sXG4gICAgICAgIGNzc0VuYWJsZWQ6IHt9LFxuICAgICAgfSxcbiAgICAgIGF1ZGlvOiB7XG4gICAgICAgIGNzczoge1xuICAgICAgICAgIGg6IDYsXG4gICAgICAgICAgdzogNixcbiAgICAgICAgICB4OiA0LFxuICAgICAgICAgIHk6IDMyLFxuICAgICAgICAgIGN1cnNvcjogXCJwb2ludGVyXCIsXG4gICAgICAgICAgb3BhY2l0eTogMC44LFxuICAgICAgICAgIHZpc2liaWxpdHk6IFwidmlzaWJsZVwiLFxuICAgICAgICB9LFxuICAgICAgICBjc3NEaXNhYmxlZDogeyBvcGFjaXR5OiAwLjMsIGN1cnNvcjogXCJub3QtYWxsb3dlZFwiIH0sXG4gICAgICAgIGNzc0VuYWJsZWQ6IHsgb3BhY2l0eTogMC44LCBjdXJzb3I6IFwicG9pbnRlclwiIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG4gIG5leHRCdXR0b25UaGVtZTogQnVpbGRlck9wdGlvblRoZW1lLmJsdWVCdXR0b24oKSxcbiAgcmVzcG9uc2VCdXR0b25zOiBCdWlsZGVyT3B0aW9uVGhlbWUuYmx1ZUJ1dHRvbigpLFxufTtcbiIsICJpbXBvcnQgeyBCdWlsZGVyT2JqZWN0SWQsIEJ1aWxkZXJPYmplY3QgfSBmcm9tIFwiLi9CdWlsZGVyT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJPcHRpb25UaGVtZSB9IGZyb20gXCIuL3RoZW1lL0lEZWZhdWx0VGhlbWVcIjtcbmltcG9ydCB7IERlZmF1bHRUaGVtZSB9IGZyb20gXCIuL3RoZW1lL0lEZWZhdWx0VGhlbWVcIjtcbmltcG9ydCB7IEF1ZGlvRmlsZSB9IGZyb20gXCIuL21lZGlhLWZpbGVzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlck9wdGlvbkR0byB7XG4gIHJlYWRvbmx5IGlkOiBCdWlsZGVyT2JqZWN0SWQuUXVlc3Rpb25PcHRpb25JRDtcbiAgcmVhZG9ubHkgdmFsdWU6IG51bWJlcjtcbiAgcmVhZG9ubHkgbGFiZWw6IHN0cmluZztcbiAgcmVhZG9ubHkgbGFiZWxBdWRpbz86IEF1ZGlvRmlsZTtcbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkZXJPcHRpb24gZXh0ZW5kcyBCdWlsZGVyT2JqZWN0PFwiYnVpbGRlci1xdWVzdGlvbi1vcHRpb25cIiwgQnVpbGRlck9wdGlvbkR0bz4ge1xuICByZWFkb25seSBvYmplY3RUeXBlID0gXCJidWlsZGVyLXF1ZXN0aW9uLW9wdGlvblwiO1xuICB0aGVtZTogQnVpbGRlck9wdGlvblRoZW1lID0gRGVmYXVsdFRoZW1lLnJlc3BvbnNlQnV0dG9ucztcblxuICBpZDogQnVpbGRlck9iamVjdElkLlF1ZXN0aW9uT3B0aW9uSUQ7XG4gIHZhbHVlOiBudW1iZXI7XG4gIGxhYmVsID0gXCJcIjtcbiAgcHJpdmF0ZSBfbGFiZWxBdWRpb0ZpbGU6IEF1ZGlvRmlsZSB8IGZhbHNlID0gZmFsc2U7XG4gIGdldCBsYWJlbEF1ZGlvRmlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbGFiZWxBdWRpb0ZpbGU7XG4gIH1cbiAgc2V0IGxhYmVsQXVkaW9GaWxlKGF1ZGlvRmlsZTogQXVkaW9GaWxlIHwgZmFsc2UpIHtcbiAgICB0aGlzLl9sYWJlbEF1ZGlvRmlsZSA9IGF1ZGlvRmlsZTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoZHRvOiBCdWlsZGVyT3B0aW9uRHRvKSB7XG4gICAgc3VwZXIoZHRvKTtcbiAgICB0aGlzLmlkID0gZHRvLmlkO1xuICAgIHRoaXMudmFsdWUgPSBkdG8udmFsdWU7XG4gICAgdGhpcy5sYWJlbCA9IGR0by5sYWJlbDtcbiAgICAvLyB0aGlzLnRoZW1lID0gZHRvLnRoZW1lO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlKHZhbHVlOiBudW1iZXIsIGxhYmVsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpZCA9IEJ1aWxkZXJPYmplY3RJZC5xdWVzdGlvbk9wdGlvbklkKCk7XG4gICAgY29uc3QgZHRvOiBCdWlsZGVyT3B0aW9uRHRvID0ge1xuICAgICAgaWQsXG4gICAgICB2YWx1ZSxcbiAgICAgIGxhYmVsLFxuICAgIH07XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQnVpbGRlck9wdGlvbihkdG8pO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUpzb24oZHRvOiBCdWlsZGVyT3B0aW9uRHRvKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQnVpbGRlck9wdGlvbihkdG8pO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIHRvSnNvbigpOiBCdWlsZGVyT3B0aW9uRHRvIHtcbiAgICBjb25zdCBkdG86IEJ1aWxkZXJPcHRpb25EdG8gPSB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgbGFiZWw6IHRoaXMubGFiZWwsXG4gICAgfTtcbiAgICByZXR1cm4gZHRvO1xuICB9XG5cbiAgY2xvbmUoKTogQnVpbGRlck9wdGlvbkR0byB7XG4gICAgY29uc3QgY2xvbmVJZCA9IEJ1aWxkZXJPYmplY3RJZC5xdWVzdGlvbk9wdGlvbklkKCk7XG4gICAgY29uc3QgZHRvID0gdGhpcy50b0pzb24oKTtcbiAgICBjb25zdCBjbG9uZUR0bzogQnVpbGRlck9wdGlvbkR0byA9IHsgLi4uZHRvLCBpZDogY2xvbmVJZCB9O1xuICAgIHJldHVybiBjbG9uZUR0bztcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQnVpbGRlck9wdGlvbkR0byB9IGZyb20gXCIuL0J1aWxkZXItb3B0aW9uXCI7XG5pbXBvcnQgeyBCdWlsZGVyT3B0aW9uIH0gZnJvbSBcIi4vQnVpbGRlci1vcHRpb25cIjtcbmltcG9ydCB7IEJ1aWxkZXJPYmplY3QsIEJ1aWxkZXJPYmplY3RJZCB9IGZyb20gXCIuL0J1aWxkZXJPYmplY3RcIjtcblxuZXhwb3J0IHR5cGUgQnVpbGRlclF1ZXN0aW9uVHlwZSA9XG4gICAgfCBcInNlbGVjdC1vbmVcIlxuICAgIHwgXCJzZWxlY3QtbWFueVwiXG4gICAgfCBcInRleHRcIlxuICAgIHwgXCJjb2xvclwiXG4gICAgfCBcInJhZGlvXCJcbiAgICB8IFwiZW1haWxcIlxuICAgIHwgXCJ0aW1lXCJcbiAgICB8IFwiY2hlY2tib3hcIlxuICAgIHwgXCJ0ZXh0YXJlYVwiXG4gICAgfCBcImRhdGVcIlxuICAgIHwgXCJudW1lcmljLXJhbmdlXCJcbiAgICB8IFwiZHVyYXRpb25cIjtcblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZGVyUXVlc3Rpb25EdG8ge1xuICAgIHJlYWRvbmx5IGlkOiBCdWlsZGVyT2JqZWN0SWQuUXVlc3Rpb25JRDtcbiAgICBfdHlwZTogQnVpbGRlclF1ZXN0aW9uVHlwZTtcbiAgICB0ZXh0OiBzdHJpbmc7XG4gICAgb3B0aW9uczogUmVhZG9ubHlBcnJheTxCdWlsZGVyT3B0aW9uRHRvPjtcbiAgICBwcmVmaXg6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkZXJRdWVzdGlvbiBleHRlbmRzIEJ1aWxkZXJPYmplY3Q8XCJidWlsZGVyLXF1ZXN0aW9uXCIsIEJ1aWxkZXJRdWVzdGlvbkR0bz4ge1xuICAgIHJlYWRvbmx5IG9iamVjdFR5cGUgPSBcImJ1aWxkZXItcXVlc3Rpb25cIjtcbiAgICBpZDogQnVpbGRlck9iamVjdElkLlF1ZXN0aW9uSUQ7XG4gICAgdHlwZTogQnVpbGRlclF1ZXN0aW9uVHlwZTtcbiAgICBxdWVzdGlvblRleHQgPSBcIlwiO1xuICAgIG9wdGlvbnM6IEJ1aWxkZXJPcHRpb25bXSA9IFtdO1xuICAgIHByZWZpeCA9IFwiXCI7XG5cbiAgICBzdGF0aWMgY3JlYXRlID0gKHR5cGU6IEJ1aWxkZXJRdWVzdGlvblR5cGUpID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSBCdWlsZGVyT2JqZWN0SWQucXVlc3Rpb25JZCgpO1xuXG4gICAgICAgIHJldHVybiBuZXcgQnVpbGRlclF1ZXN0aW9uKHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgX3R5cGU6IHR5cGUsXG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgICBwcmVmaXg6IFwiXCIsXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21Kc29uKGR0bzogQnVpbGRlclF1ZXN0aW9uRHRvKTogQnVpbGRlclF1ZXN0aW9uIHtcbiAgICAgICAgY29uc3QgcXVlc3Rpb24gPSBuZXcgQnVpbGRlclF1ZXN0aW9uKGR0byk7XG4gICAgICAgIHJldHVybiBxdWVzdGlvbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKGR0bzogQnVpbGRlclF1ZXN0aW9uRHRvKSB7XG4gICAgICAgIHN1cGVyKGR0byk7XG4gICAgICAgIHRoaXMuaWQgPSBkdG8uaWQgYXMgQnVpbGRlck9iamVjdElkLlF1ZXN0aW9uSUQ7XG4gICAgICAgIHRoaXMudHlwZSA9IGR0by5fdHlwZTtcbiAgICAgICAgdGhpcy5xdWVzdGlvblRleHQgPSBkdG8udGV4dDtcbiAgICAgICAgdGhpcy5wcmVmaXggPSBkdG8ucHJlZml4O1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBkdG8ub3B0aW9ucy5tYXAoKG8pID0+IEJ1aWxkZXJPcHRpb24uZnJvbUpzb24obykpO1xuICAgIH1cblxuICAgIGFkZE9wdGlvbihsYWJlbDogc3RyaW5nLCB2YWx1ZTogbnVtYmVyLCBhdEluZGV4ID0gLTEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gQnVpbGRlck9wdGlvbi5jcmVhdGUodmFsdWUsIGxhYmVsKTtcbiAgICAgICAgaWYgKGF0SW5kZXggPj0gMCAmJiBhdEluZGV4IDwgdGhpcy5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnNwbGljZShhdEluZGV4LCAwLCBvcHRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnB1c2gob3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH1cblxuICAgIGRlbGV0ZU9wdGlvbihvcHRpb246IEJ1aWxkZXJPcHRpb24pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWQgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKChvKSA9PiBvLmlkICE9PSBvcHRpb24uaWQpO1xuICAgICAgICBjb25zdCBkaWREZWxldGUgPSBmaWx0ZXJlZC5sZW5ndGggPT09IHRoaXMub3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBmaWx0ZXJlZDtcbiAgICAgICAgcmV0dXJuIGRpZERlbGV0ZTtcbiAgICB9XG5cbiAgICB0b0pzb24oKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNKc29uID0gdGhpcy5vcHRpb25zLm1hcCgobykgPT4gby50b0pzb24oKSk7XG4gICAgICAgIGNvbnN0IGR0bzogQnVpbGRlclF1ZXN0aW9uRHRvID0ge1xuICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICBwcmVmaXg6IHRoaXMucHJlZml4LFxuICAgICAgICAgICAgX3R5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHRleHQ6IHRoaXMucXVlc3Rpb25UZXh0LFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uc0pzb24sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBkdG87XG4gICAgfVxuXG4gICAgY2xvbmUoKTogQnVpbGRlclF1ZXN0aW9uRHRvIHtcbiAgICAgICAgY29uc3QgY2xvbmVJZCA9IEJ1aWxkZXJPYmplY3RJZC5xdWVzdGlvbklkKCk7XG4gICAgICAgIGNvbnN0IGR0byA9IHRoaXMudG9Kc29uKCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNDbG9uZSA9IHRoaXMub3B0aW9ucy5tYXAoKG8pID0+IG8uY2xvbmUoKSk7XG4gICAgICAgIGNvbnN0IGNsb25lZER0bzogQnVpbGRlclF1ZXN0aW9uRHRvID0ge1xuICAgICAgICAgICAgLi4uZHRvLFxuICAgICAgICAgICAgaWQ6IGNsb25lSWQsXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zQ2xvbmUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjbG9uZWREdG87XG4gICAgfVxufVxuIiwgImltcG9ydCB7IEJ1aWxkZXJPYmplY3QgfSBmcm9tIFwiLi9CdWlsZGVyT2JqZWN0XCI7XG5pbXBvcnQgeyBBdWRpb0ZpbGUgfSBmcm9tIFwiLi9tZWRpYS1maWxlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJNYWluVGV4dER0byB7XG4gICAgdGV4dDogc3RyaW5nO1xuICAgIGF1ZGlvRmlsZTogQXVkaW9GaWxlIHwgZmFsc2U7XG4gICAgYXV0b3BsYXk6IGJvb2xlYW47XG4gICAgYXV0b3BsYXlEZWxheTogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgQnVpbGRlck1haW5UZXh0IGV4dGVuZHMgQnVpbGRlck9iamVjdDxcImJ1aWxkZXItbWFpbi10ZXh0XCIsIEJ1aWxkZXJNYWluVGV4dER0bz4ge1xuICAgIHJlYWRvbmx5IG9iamVjdFR5cGU6IFwiYnVpbGRlci1tYWluLXRleHRcIiA9IFwiYnVpbGRlci1tYWluLXRleHRcIjtcbiAgICBhdXRvcGxheSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2F1ZGlvRmlsZTogQXVkaW9GaWxlIHwgZmFsc2UgPSBmYWxzZTtcbiAgICBhdXRvcGxheURlbGF5ID0gMDtcblxuICAgIHRleHQgPSBcIlwiO1xuXG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihkdG86IEJ1aWxkZXJNYWluVGV4dER0bykge1xuICAgICAgICBzdXBlcihkdG8pO1xuICAgICAgICB0aGlzLl9hdWRpb0ZpbGUgPSBkdG8uYXVkaW9GaWxlID8/IGZhbHNlO1xuICAgICAgICB0aGlzLmF1dG9wbGF5ID0gZHRvLmF1dG9wbGF5ID8/IGZhbHNlO1xuICAgICAgICB0aGlzLmF1dG9wbGF5RGVsYXkgPSBkdG8uYXV0b3BsYXlEZWxheSA/PyAwO1xuICAgICAgICB0aGlzLnRleHQgPSBkdG8udGV4dCA/PyBcIlwiO1xuICAgIH1cblxuICAgIGdldCBhdXRvcGxheURlbGF5SW5TZWNvbmRzKCkge1xuICAgICAgICBjb25zdCBkZWxheSA9IHRoaXMuYXV0b3BsYXlEZWxheTtcbiAgICAgICAgY29uc3QgcyA9IGRlbGF5IC8gMTAwMDtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gcy50b0ZpeGVkKDEpO1xuICAgICAgICByZXR1cm4gZm9ybWF0dGVkO1xuICAgIH1cblxuICAgIGdldCBkdXJhdGlvblRhZygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmF1ZGlvRmlsZSkgcmV0dXJuIFwiXCI7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuYXVkaW9GaWxlLmR1cmF0aW9uKTtcbiAgICAgICAgY29uc3QgZHVyID0gdGhpcy5hdWRpb0ZpbGUuZHVyYXRpb24udG9GaXhlZCgxKTtcbiAgICAgICAgcmV0dXJuIFwiZHVyIFwiICsgZHVyICsgXCIgc1wiO1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSnNvbihkdG86IEJ1aWxkZXJNYWluVGV4dER0byk6IEJ1aWxkZXJNYWluVGV4dCB7XG4gICAgICAgIGNvbnN0IG1haW5UZXh0ID0gbmV3IEJ1aWxkZXJNYWluVGV4dChkdG8pO1xuICAgICAgICByZXR1cm4gbWFpblRleHQ7XG4gICAgfVxuXG4gICAgc3RhdGljIGNyZWF0ZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgZHRvOiBCdWlsZGVyTWFpblRleHREdG8gPSB7XG4gICAgICAgICAgICBhdXRvcGxheTogZmFsc2UsXG4gICAgICAgICAgICBhdXRvcGxheURlbGF5OiAwLFxuICAgICAgICAgICAgYXVkaW9GaWxlOiBmYWxzZSxcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXcgQnVpbGRlck1haW5UZXh0KGR0byk7XG4gICAgfTtcblxuICAgIGNsb25lKCk6IEJ1aWxkZXJNYWluVGV4dER0byB7XG4gICAgICAgIGNvbnN0IGR0byA9IHRoaXMudG9Kc29uKCk7XG4gICAgICAgIGNvbnN0IGNsb25lID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkdG8pKTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIHRvSnNvbigpOiBCdWlsZGVyTWFpblRleHREdG8ge1xuICAgICAgICBjb25zdCBkdG86IEJ1aWxkZXJNYWluVGV4dER0byA9IHtcbiAgICAgICAgICAgIHRleHQ6IHRoaXMudGV4dCxcbiAgICAgICAgICAgIGF1ZGlvRmlsZTogdGhpcy5hdWRpb0ZpbGUsXG4gICAgICAgICAgICBhdXRvcGxheTogdGhpcy5hdXRvcGxheSxcbiAgICAgICAgICAgIGF1dG9wbGF5RGVsYXk6IHRoaXMuYXV0b3BsYXlEZWxheSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGR0bztcbiAgICB9XG4gICAgZ2V0IGF1ZGlvRmlsZSgpOiBBdWRpb0ZpbGUgfCBmYWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hdWRpb0ZpbGU7XG4gICAgfVxuICAgIHNldCBhdWRpb0ZpbGUoYXVkaW9GaWxlOiBBdWRpb0ZpbGUgfCBmYWxzZSkge1xuICAgICAgICBpZiAoYXVkaW9GaWxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5hdXRvcGxheURlbGF5ID0gMDtcbiAgICAgICAgICAgIHRoaXMuYXV0b3BsYXkgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hdWRpb0ZpbGUgPSBhdWRpb0ZpbGU7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IFBhZ2VQcmVmaXgsIFZhcklELCBTY2hlbWFQcmVmaXggfSBmcm9tIFwiLi4vcHJlZml4XCI7XG5cbmNvbnN0IEJ1aWxkZXJWYXJpYWJsZVR5cGUgPSB7XG4gIG51bWVyaWNXaXRoT3B0aW9uczogdHJ1ZSxcbiAgbnVtZXJpYzogdHJ1ZSxcbiAgbnVtZXJpY1JhbmdlOiB0cnVlLFxuICB0ZXh0OiB0cnVlLFxuICBkYXRlOiB0cnVlLFxuICBkYXRlUmFuZ2U6IHRydWUsXG4gIHRpbWU6IHRydWUsXG4gIGR1cmF0aW9uOiB0cnVlLFxuICBib29sZWFuOiB0cnVlLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgQnVpbGRlclZhcmlhYmxlVHlwZSA9IGtleW9mIHR5cGVvZiBCdWlsZGVyVmFyaWFibGVUeXBlO1xuXG5leHBvcnQgY2xhc3MgQnVpbGRlclZhcmlhYmxlT3B0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgbGFiZWw6IHN0cmluZyxcbiAgICByZWFkb25seSB2YWx1ZTogbnVtYmVyLFxuICApIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblZhcmlhYmxlIHtcbiAgcmVhZG9ubHkga2luZDogXCJxdWVzdGlvbi12YXJpYWJsZVwiID0gXCJxdWVzdGlvbi12YXJpYWJsZVwiO1xuICByZWFkb25seSBkYXRhVHlwZTogQnVpbGRlclZhcmlhYmxlVHlwZSA9IFwibnVtZXJpY1dpdGhPcHRpb25zXCI7XG4gIGNvbnN0cnVjdG9yKFxuICAgIC8vIHByaXZhdGUgc2NoZW1hUHJlZml4OiBTY2hlbWFQcmVmaXgsXG4gICAgLy8gcHJpdmF0ZSBwYWdlUHJlZml4OiBQYWdlUHJlZml4LFxuICAgIHJlYWRvbmx5IHZhcklkOiBWYXJJRCxcbiAgICByZWFkb25seSBsYWJlbDogc3RyaW5nLFxuICAgIHJlYWRvbmx5IG9wdGlvbnM6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclZhcmlhYmxlT3B0aW9uPixcbiAgICByZWFkb25seSBwYWdlTnVtYmVyOiBudW1iZXIsXG4gICkge31cbn1cblxuZXhwb3J0IGNsYXNzIEN1c3RvbVZhcmlhYmxlIHtcbiAgcmVhZG9ubHkga2luZDogXCJjb25maWd1cmF0aW9uLXZhcmlhYmxlXCIgPSBcImNvbmZpZ3VyYXRpb24tdmFyaWFibGVcIjtcbiAgcmVhZG9ubHkgZGF0YVR5cGU6IEJ1aWxkZXJWYXJpYWJsZVR5cGUgPSBcIm51bWVyaWNXaXRoT3B0aW9uc1wiO1xuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSB2YXJJZDogVmFySUQsXG4gICAgcmVhZG9ubHkgbGFiZWw6IHN0cmluZyxcbiAgICByZWFkb25seSBvcHRpb25zOiBSZWFkb25seUFycmF5PEJ1aWxkZXJWYXJpYWJsZU9wdGlvbj4sXG4gICkge31cbn1cblxuZXhwb3J0IHR5cGUgQnVpbGRlclZhcmlhYmxlID0gUXVlc3Rpb25WYXJpYWJsZSB8IEN1c3RvbVZhcmlhYmxlO1xuIiwgImltcG9ydCB0eXBlIHsgQnVpbGRlclF1ZXN0aW9uRHRvLCBCdWlsZGVyUXVlc3Rpb25UeXBlIH0gZnJvbSBcIi4vQnVpbGRlci1xdWVzdGlvblwiO1xuaW1wb3J0IHsgQnVpbGRlclF1ZXN0aW9uIH0gZnJvbSBcIi4vQnVpbGRlci1xdWVzdGlvblwiO1xuaW1wb3J0IHsgQnVpbGRlck9iamVjdCB9IGZyb20gXCIuL0J1aWxkZXJPYmplY3RcIjtcbmltcG9ydCB0eXBlIHsgQnVpbGRlck9wdGlvbkR0byB9IGZyb20gXCIuL0J1aWxkZXItb3B0aW9uXCI7XG5pbXBvcnQgeyBCdWlsZGVyT3B0aW9uIH0gZnJvbSBcIi4vQnVpbGRlci1vcHRpb25cIjtcbmltcG9ydCB0eXBlIHsgQnVpbGRlck1haW5WaWRlb0R0byB9IGZyb20gXCIuL0J1aWxkZXJNYWluVmlkZW9EdG9cIjtcbmltcG9ydCB0eXBlIHsgQnVpbGRlck1haW5JbWFnZUR0byB9IGZyb20gXCIuL0J1aWxkZXJNYWluSW1hZ2VEdG9cIjtcbmltcG9ydCB0eXBlIHsgQnVpbGRlck1haW5UZXh0RHRvIH0gZnJvbSBcIi4vQnVpbGRlck1haW5UZXh0XCI7XG5pbXBvcnQgeyBCdWlsZGVyTWFpblRleHQgfSBmcm9tIFwiLi9CdWlsZGVyTWFpblRleHRcIjtcbmltcG9ydCB7IEJ1aWxkZXJWYXJpYWJsZU9wdGlvbiwgUXVlc3Rpb25WYXJpYWJsZSB9IGZyb20gXCIuL3J1bGVidWlsZGVyL1J1bGVWYXJpYWJsZVwiO1xuaW1wb3J0IHsgRFV0aWwsIFBhZ2VJRCB9IGZyb20gXCJAbWVkaWEtcXVlc3QvZW5naW5lXCI7XG5pbXBvcnQgeyBQYWdlUHJlZml4LCBQYWdlUHJlZml4VmFsdWUsIFZhcklELCBTY2hlbWFQcmVmaXgsIFNjaGVtYVByZWZpeFZhbHVlIH0gZnJvbSBcIi4vcHJlZml4XCI7XG5cbmNvbnN0IFUgPSBEVXRpbDtcbmV4cG9ydCB0eXBlIEJ1aWxkZXJQYWdlVHlwZSA9IFwiaW5mby1wYWdlXCIgfCBcInF1ZXN0aW9uXCIgfCBcIm11bHRpLXNlbGVjdFwiIHwgXCJmb3JtXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlclBhZ2VEdG8ge1xuICByZWFkb25seSBpZDogUGFnZUlEO1xuICByZWFkb25seSBwcmVmaXg6IFBhZ2VQcmVmaXhWYWx1ZTtcbiAgX3R5cGU6IEJ1aWxkZXJQYWdlVHlwZTtcbiAgbWFpblRleHQ6IEJ1aWxkZXJNYWluVGV4dER0bztcbiAgbmV4dEJ1dHRvbjogQnVpbGRlck9wdGlvbkR0bztcbiAgZGVmYXVsdFF1ZXN0aW9uOiBCdWlsZGVyUXVlc3Rpb25EdG87XG4gIHF1ZXN0aW9uczogQXJyYXk8QnVpbGRlclF1ZXN0aW9uRHRvPjtcbiAgbWFpbk1lZGlhPzogQnVpbGRlck1haW5JbWFnZUR0byB8IEJ1aWxkZXJNYWluVmlkZW9EdG87XG4gIGF1dG9wbGF5U2VxdWVuY2U6IEFycmF5PHN0cmluZz47XG4gIHRhZ3M6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPjtcbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkZXJQYWdlIGV4dGVuZHMgQnVpbGRlck9iamVjdDxcImJ1aWxkZXItcGFnZVwiLCBCdWlsZGVyUGFnZUR0bz4ge1xuICByZWFkb25seSBvYmplY3RUeXBlOiBcImJ1aWxkZXItcGFnZVwiID0gXCJidWlsZGVyLXBhZ2VcIjtcbiAgcmVhZG9ubHkgaWQ6IFBhZ2VJRDtcbiAgcHJpdmF0ZSBfcGFnZVR5cGU6IEJ1aWxkZXJQYWdlVHlwZTtcbiAgcHJpdmF0ZSBfcHJlZml4OiBQYWdlUHJlZml4O1xuICBwcml2YXRlIF9xdWVzdGlvbnM6IEFycmF5PEJ1aWxkZXJRdWVzdGlvbj4gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGFnczogU2V0PHN0cmluZz47XG4gIHByaXZhdGUgX2JhY2tncm91bmRDb2xvciA9IFwiI0ZGRkZGRlwiO1xuICBtYWluTWVkaWE6IEJ1aWxkZXJNYWluVmlkZW9EdG8gfCBCdWlsZGVyTWFpbkltYWdlRHRvIHwgZmFsc2UgPSBmYWxzZTtcbiAgZGVmYXVsdFF1ZXN0aW9uOiBCdWlsZGVyUXVlc3Rpb247XG4gIG1haW5UZXh0OiBCdWlsZGVyTWFpblRleHQ7XG4gIG5leHRCdXR0b24gPSBCdWlsZGVyT3B0aW9uLmNyZWF0ZSgtMSwgXCJOZXN0ZVwiKTtcblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZSh0eXBlOiBCdWlsZGVyUGFnZVR5cGUsIF9wcmVmaXg6IFBhZ2VQcmVmaXhWYWx1ZSkge1xuICAgIGNvbnN0IGlkID0gUGFnZUlELmNyZWF0ZSgpO1xuICAgIGNvbnN0IG1haW5UZXh0RHRvOiBCdWlsZGVyTWFpblRleHREdG8gPSB7XG4gICAgICB0ZXh0OiBcIlwiLFxuICAgICAgYXVkaW9GaWxlOiBmYWxzZSxcbiAgICAgIGF1dG9wbGF5OiBmYWxzZSxcbiAgICAgIGF1dG9wbGF5RGVsYXk6IDAsXG4gICAgfTtcbiAgICBjb25zdCBuZXh0QnV0dG9uRHRvID0gQnVpbGRlck9wdGlvbi5jcmVhdGUoLTEsIFwicGFnZS1uZXh0LWJ1dHRvbi10ZXh0XCIpLnRvSnNvbigpO1xuICAgIGNvbnN0IGRlZmF1bHRRdWVzdGlvbkR0byA9IEJ1aWxkZXJRdWVzdGlvbi5jcmVhdGUoXCJzZWxlY3Qtb25lXCIpLnRvSnNvbigpO1xuXG4gICAgY29uc3QgZHRvOiBCdWlsZGVyUGFnZUR0byA9IHtcbiAgICAgIF90eXBlOiB0eXBlLFxuICAgICAgYXV0b3BsYXlTZXF1ZW5jZTogW10sXG4gICAgICBkZWZhdWx0UXVlc3Rpb246IGRlZmF1bHRRdWVzdGlvbkR0byxcbiAgICAgIGlkLFxuICAgICAgbmV4dEJ1dHRvbjogbmV4dEJ1dHRvbkR0byxcbiAgICAgIG1haW5UZXh0OiBtYWluVGV4dER0byxcbiAgICAgIHByZWZpeDogX3ByZWZpeCxcbiAgICAgIHF1ZXN0aW9uczogW10sXG4gICAgICB0YWdzOiBbXSxcbiAgICB9O1xuXG4gICAgY29uc3QgcGFnZSA9IG5ldyBCdWlsZGVyUGFnZShkdG8pO1xuICAgIHJldHVybiBwYWdlO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZnJvbUpzb24oZHRvOiBCdWlsZGVyUGFnZUR0byk6IEJ1aWxkZXJQYWdlIHtcbiAgICBjb25zdCBwYWdlID0gbmV3IEJ1aWxkZXJQYWdlKGR0byk7XG4gICAgcmV0dXJuIHBhZ2U7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGR0bzogQnVpbGRlclBhZ2VEdG8pIHtcbiAgICBzdXBlcihkdG8pO1xuICAgIHRoaXMuaWQgPSBkdG8uaWQ7XG4gICAgdGhpcy5fcGFnZVR5cGUgPSBkdG8uX3R5cGU7XG4gICAgY29uc3QgcHJlZml4SW5zdGFuY2UgPSBQYWdlUHJlZml4LmNhc3RPckNyZWF0ZVJhbmRvbShkdG8ucHJlZml4KTtcbiAgICB0aGlzLl9wcmVmaXggPSBwcmVmaXhJbnN0YW5jZTtcbiAgICB0aGlzLm1haW5UZXh0ID0gQnVpbGRlck1haW5UZXh0LmZyb21Kc29uKGR0by5tYWluVGV4dCk7XG4gICAgdGhpcy5uZXh0QnV0dG9uID0gQnVpbGRlck9wdGlvbi5mcm9tSnNvbihkdG8ubmV4dEJ1dHRvbik7XG4gICAgdGhpcy5kZWZhdWx0UXVlc3Rpb24gPSBCdWlsZGVyUXVlc3Rpb24uZnJvbUpzb24oZHRvLmRlZmF1bHRRdWVzdGlvbik7XG4gICAgdGhpcy5fcXVlc3Rpb25zID0gZHRvLnF1ZXN0aW9ucy5tYXAoKHEpID0+IEJ1aWxkZXJRdWVzdGlvbi5mcm9tSnNvbihxKSk7XG4gICAgY29uc3QgdGFnTGlzdDogc3RyaW5nW10gPSBBcnJheS5pc0FycmF5KGR0by50YWdzKSA/IGR0by50YWdzIDogW107XG4gICAgdGhpcy5fdGFncyA9IG5ldyBTZXQodGFnTGlzdCk7XG4gICAgaWYgKGR0by5tYWluTWVkaWEpIHtcbiAgICAgIHRoaXMubWFpbk1lZGlhID0gZHRvLm1haW5NZWRpYTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVSb3dzKCk7XG4gIH1cblxuICBpbnNlcnRRdWVzdGlvbihxdWVzdGlvbjogQnVpbGRlclF1ZXN0aW9uLCBhdEluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWxpZEluZGV4Rm4gPSBVLmlzSW5SYW5nZSgwLCB0aGlzLl9xdWVzdGlvbnMubGVuZ3RoKTtcbiAgICBpZiAoIXZhbGlkSW5kZXhGbihhdEluZGV4KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBoYXNRdWVzdGlvbiA9ICEhdGhpcy5fcXVlc3Rpb25zLmZpbmQoKHEpID0+IHEuaWQgPT09IHF1ZXN0aW9uLmlkKTtcbiAgICBpZiAoaGFzUXVlc3Rpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5fcXVlc3Rpb25zLnNwbGljZShhdEluZGV4LCAwLCBxdWVzdGlvbik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhZGRRdWVzdGlvbih0eXBlOiBCdWlsZGVyUXVlc3Rpb25UeXBlLCBhdEluZGV4ID0gLTEpOiBCdWlsZGVyUXVlc3Rpb24ge1xuICAgIGNvbnN0IHF1ZXN0aW9uID0gQnVpbGRlclF1ZXN0aW9uLmNyZWF0ZSh0eXBlKTtcbiAgICBpZiAoYXRJbmRleCA8IHRoaXMuX3F1ZXN0aW9ucy5sZW5ndGggJiYgYXRJbmRleCA+PSAwKSB7XG4gICAgICB0aGlzLl9xdWVzdGlvbnMuc3BsaWNlKGF0SW5kZXgsIDAsIHF1ZXN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcXVlc3Rpb25zLnB1c2gocXVlc3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gcXVlc3Rpb247XG4gIH1cblxuICAvKipcbiAgICogTW92ZSBhIHF1ZXN0aW9uIGluIHF1ZXN0aW9ucy1hcnJheVxuICAgKiBAcGFyYW0gcXVlc3Rpb24gKHJlZmVyZW5jZSlcbiAgICogQHBhcmFtIHRvSW5kZXhcbiAgICovXG4gIG1vdmVRdWVzdGlvbihxdWVzdGlvbjogQnVpbGRlclF1ZXN0aW9uLCB0b0luZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWxpZFRvSW5kZXhGbiA9IFUuaXNJblJhbmdlKDAsIHRoaXMuX3F1ZXN0aW9ucy5sZW5ndGgpO1xuICAgIGlmICghdmFsaWRUb0luZGV4Rm4odG9JbmRleCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5fcXVlc3Rpb25zLmluZGV4T2YocXVlc3Rpb24pO1xuICAgIGlmIChjdXJyZW50SW5kZXggPCAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuX3F1ZXN0aW9ucy5zcGxpY2UoY3VycmVudEluZGV4LCAxKTtcbiAgICB0aGlzLl9xdWVzdGlvbnMuc3BsaWNlKHRvSW5kZXgsIDAsIHF1ZXN0aW9uKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGRlbGV0ZVF1ZXN0aW9uKHF1ZXN0aW9uOiBCdWlsZGVyUXVlc3Rpb24pIHtcbiAgICB0aGlzLl9xdWVzdGlvbnMgPSB0aGlzLl9xdWVzdGlvbnMuZmlsdGVyKChxKSA9PiBxICE9PSBxdWVzdGlvbik7XG4gICAgLy8gVE9ETyBFTUlUIERFTEVURUQgUVVFU1RJT04uXG4gICAgdGhpcy51cGRhdGVSb3dzKCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVSb3dzKCkge1xuICAgIGlmICh0aGlzLl9wYWdlVHlwZSA9PT0gXCJxdWVzdGlvblwiIHx8IHRoaXMuX3BhZ2VUeXBlID09PSBcImluZm8tcGFnZVwiKSB7XG4gICAgICB0aGlzLl9xdWVzdGlvbnMgPSBbXTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3BhZ2VUeXBlID09PSBcImZvcm1cIiAmJiB0aGlzLl9xdWVzdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLl9xdWVzdGlvbnMgPSBbXTtcbiAgICAgIHRoaXMuYWRkUXVlc3Rpb24oXCJ0ZXh0XCIpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fcGFnZVR5cGUgPT09IFwibXVsdGktc2VsZWN0XCIgJiYgdGhpcy5fcXVlc3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5fcXVlc3Rpb25zID0gW107XG4gICAgICB0aGlzLmFkZFF1ZXN0aW9uKFwidGV4dFwiKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkVGFnKHRhZzogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGFncy5hZGQodGFnKTtcbiAgfVxuICBwdWJsaWMgZGVsZXRlVGFnKHRhZzogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGFncy5kZWxldGUodGFnKTtcbiAgfVxuXG4gIHNldCBwYWdlVHlwZSh2YWx1ZTogQnVpbGRlclBhZ2VUeXBlKSB7XG4gICAgdGhpcy5fcGFnZVR5cGUgPSB2YWx1ZTtcbiAgICAvLyBUT0RPIEVtaXQgQWxsIHF1ZXN0aW9ucyB0aGF0IGFyZSBkZWxldGVkPyBMaXN0ZW4gZm9yIHJlbW92ZWQgdmFyaWFibGVzPz9cbiAgICB0aGlzLnVwZGF0ZVJvd3MoKTtcbiAgfVxuXG4gIGdldFF1ZXN0aW9uVmFyaWFibGVzKG1vZHVsZVByZWZpeDogU2NoZW1hUHJlZml4LCBwYWdlTnVtYmVyOiBudW1iZXIpOiBSZWFkb25seUFycmF5PFF1ZXN0aW9uVmFyaWFibGU+IHtcbiAgICBjb25zdCB2YXJpYWJsZXM6IFF1ZXN0aW9uVmFyaWFibGVbXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMuX3BhZ2VUeXBlID09PSBcInF1ZXN0aW9uXCIpIHtcbiAgICAgIGNvbnN0IHBhZ2VQcmVmaXggPSB0aGlzLnByZWZpeDtcbiAgICAgIGNvbnN0IHZhcklkID0gVmFySUQuY3JlYXRlKG1vZHVsZVByZWZpeC52YWx1ZSwgcGFnZVByZWZpeCk7XG4gICAgICBjb25zdCBsYWJlbCA9IHRoaXMubWFpblRleHQudGV4dDtcbiAgICAgIGNvbnN0IG9wID0gdGhpcy5kZWZhdWx0UXVlc3Rpb24ub3B0aW9ucy5tYXAoKG8pID0+IHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBvLmxhYmVsO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG8udmFsdWU7XG4gICAgICAgIHJldHVybiBuZXcgQnVpbGRlclZhcmlhYmxlT3B0aW9uKGxhYmVsLCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHNpbmdsZVZhciA9IG5ldyBRdWVzdGlvblZhcmlhYmxlKHZhcklkLCBsYWJlbCwgb3AsIHBhZ2VOdW1iZXIpO1xuICAgICAgdmFyaWFibGVzLnB1c2goc2luZ2xlVmFyKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhcmlhYmxlcztcbiAgfVxuXG4gIGdldCB0YWdzKCk6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl90YWdzXTtcbiAgfVxuICBnZXQgcGFnZVR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VUeXBlO1xuICB9XG5cbiAgZ2V0IHByZWZpeCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJlZml4LnZhbHVlO1xuICB9XG5cbiAgc2V0IHByZWZpeCh2YWx1ZTogUGFnZVByZWZpeFZhbHVlKSB7XG4gICAgdGhpcy5fcHJlZml4LnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICB0b0pzb24oKTogQnVpbGRlclBhZ2VEdG8ge1xuICAgIGNvbnN0IHF1ZXN0aW9ucyA9IHRoaXMuX3F1ZXN0aW9ucy5tYXAoKHEpID0+IHEudG9Kc29uKCkpO1xuICAgIGNvbnN0IG1haW5UZXh0ID0gdGhpcy5tYWluVGV4dC50b0pzb24oKTtcbiAgICBjb25zdCBuZXh0QnV0dG9uID0gdGhpcy5uZXh0QnV0dG9uLnRvSnNvbigpO1xuICAgIGNvbnN0IG1haW5NZWRpYSA9IHRoaXMubWFpbk1lZGlhO1xuICAgIGNvbnN0IGR0bzogQnVpbGRlclBhZ2VEdG8gPSB7XG4gICAgICBfdHlwZTogdGhpcy5wYWdlVHlwZSxcbiAgICAgIG1haW5UZXh0LFxuICAgICAgYXV0b3BsYXlTZXF1ZW5jZTogW10sXG4gICAgICBuZXh0QnV0dG9uLFxuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICB0YWdzOiBbLi4udGhpcy50YWdzXSxcbiAgICAgIHByZWZpeDogdGhpcy5fcHJlZml4LnZhbHVlLFxuICAgICAgZGVmYXVsdFF1ZXN0aW9uOiB0aGlzLmRlZmF1bHRRdWVzdGlvbi50b0pzb24oKSxcbiAgICAgIHF1ZXN0aW9ucyxcbiAgICB9O1xuICAgIGlmIChtYWluTWVkaWEpIHtcbiAgICAgIGR0by5tYWluTWVkaWEgPSBtYWluTWVkaWE7XG4gICAgfVxuICAgIHJldHVybiBkdG87XG4gIH1cblxuICBjbG9uZSgpOiBCdWlsZGVyUGFnZUR0byB7XG4gICAgY29uc3QgZHRvID0gdGhpcy50b0pzb24oKTtcbiAgICBjb25zdCBkZWZhdWx0UXVlc3Rpb25DbG9uZSA9IHRoaXMuZGVmYXVsdFF1ZXN0aW9uLmNsb25lKCk7XG4gICAgY29uc3QgbWFpblRleHRDbG9uZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5tYWluVGV4dCkpO1xuICAgIC8vIGNvbnN0IHBhZ2VzQ2xvbmUgPSB0aGlzXG4gICAgY29uc3QgcXVlc3Rpb25zQ2xvbmUgPSB0aGlzLnF1ZXN0aW9ucy5tYXAoKHEpID0+IHEuY2xvbmUoKSk7XG4gICAgY29uc3QgbmV3SWQgPSBQYWdlSUQuY3JlYXRlKCk7XG4gICAgY29uc3QgY2xvbmU6IEJ1aWxkZXJQYWdlRHRvID0ge1xuICAgICAgLi4uZHRvLFxuICAgICAgaWQ6IG5ld0lkLFxuICAgICAgZGVmYXVsdFF1ZXN0aW9uOiBkZWZhdWx0UXVlc3Rpb25DbG9uZSxcbiAgICAgIG1haW5UZXh0OiBtYWluVGV4dENsb25lLFxuICAgICAgcXVlc3Rpb25zOiBxdWVzdGlvbnNDbG9uZSxcbiAgICB9O1xuICAgIC8vIGNvbnN0IGNsb25lRHRvXG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG5cbiAgZ2V0IGJhY2tncm91bmRDb2xvcigpIHtcbiAgICByZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yO1xuICB9XG5cbiAgc2V0IGJhY2tncm91bmRDb2xvcihjb2xvcjogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gY29sb3I7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHF1ZXN0aW9ucygpOiBSZWFkb25seUFycmF5PEJ1aWxkZXJRdWVzdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLl9xdWVzdGlvbnM7XG4gIH1cbn1cbiIsICJleHBvcnQgdHlwZSBTY2hlbWFQcmVmaXhWYWx1ZSA9IHN0cmluZyAmIHsgX19TQ0hFTUFfUFJFRklYX186IHRydWUgfTtcbmV4cG9ydCB0eXBlIFBhZ2VQcmVmaXhWYWx1ZSA9IHN0cmluZyAmIHsgX19QQUdFX1BSRUZJWF9fOiB0cnVlIH07XG4vLyBleHBvcnQgdHlwZSBRdWVzdGlvblByZWZpeFZhbHVlID0gc3RyaW5nICYgeyBfX1FVRVNUSU9OX1BSRUZJWF9fOiB0cnVlIH07XG5leHBvcnQgdHlwZSBWYXJJRCA9IGAke1NjaGVtYVByZWZpeFZhbHVlfV8ke1BhZ2VQcmVmaXhWYWx1ZX1gO1xuZXhwb3J0IGNvbnN0IFZhcklEID0ge1xuICBjcmVhdGU6IChzY2hlbWFQcmVmaXg6IFNjaGVtYVByZWZpeFZhbHVlLCBwYWdlUHJlZml4OiBQYWdlUHJlZml4VmFsdWUpOiBWYXJJRCA9PiB7XG4gICAgY29uc3QgdmFySWQgPSBzY2hlbWFQcmVmaXggKyBcIl9cIiArIHBhZ2VQcmVmaXg7XG4gICAgcmV0dXJuIHZhcklkIGFzIFZhcklEO1xuICB9LFxufTtcbmNvbnN0IGNyZWF0ZVJhbmRvbVByZWZpeCA9IDxjb25zdCBQIGV4dGVuZHMgc3RyaW5nPihsZW5ndGg6IG51bWJlcik6IFAgPT4ge1xuICBjb25zdCBsZXR0ZXJzID0gXCJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2eXpcIjtcbiAgY29uc3QgYWxsID0gbGV0dGVycyArIGxldHRlcnMudG9VcHBlckNhc2UoKTtcbiAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGFyID0gYWxsLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBhbGwubGVuZ3RoKSk7XG4gICAgcmVzdWx0ICs9IGNoYXI7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdCBhcyBQO1xufTtcbmV4cG9ydCBjbGFzcyBTY2hlbWFQcmVmaXgge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1JTl9MRU5HVEggPSAxO1xuICBwcml2YXRlIHN0YXRpYyByYW5kb21MZW4gPSA1O1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BWF9MRU5HVEggPSAxNjtcbiAgcHVibGljIHN0YXRpYyBmcm9tVmFsdWUgPSAodmFsdWU6IFNjaGVtYVByZWZpeFZhbHVlKTogU2NoZW1hUHJlZml4ID0+IHtcbiAgICByZXR1cm4gbmV3IFNjaGVtYVByZWZpeCh2YWx1ZSk7XG4gIH07XG5cbiAgcHVibGljIHN0YXRpYyBmcm9tVmFsdWVPclRocm93ID0gKHZhbHVlOiBzdHJpbmcpOiBTY2hlbWFQcmVmaXggPT4ge1xuICAgIGlmICghU2NoZW1hUHJlZml4LmlzVmFsaWQodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHByZWZpeFwiKTtcbiAgICByZXR1cm4gbmV3IFNjaGVtYVByZWZpeCh2YWx1ZSk7XG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgZnJvbVN0cmluZyA9ICh2YWx1ZTogc3RyaW5nKTogU2NoZW1hUHJlZml4IHwgZmFsc2UgPT4ge1xuICAgIGlmICghU2NoZW1hUHJlZml4LmlzVmFsaWQodmFsdWUpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIG5ldyBTY2hlbWFQcmVmaXgodmFsdWUpO1xuICB9O1xuICBwdWJsaWMgc3RhdGljIGNhc3RPckNyZWF0ZVJhbmRvbSA9ICh2YWx1ZTogc3RyaW5nKTogU2NoZW1hUHJlZml4ID0+IHtcbiAgICBjb25zdCB2ID0gU2NoZW1hUHJlZml4LmlzVmFsaWQodmFsdWUpID8gdmFsdWUgOiBjcmVhdGVSYW5kb21QcmVmaXg8U2NoZW1hUHJlZml4VmFsdWU+KFNjaGVtYVByZWZpeC5yYW5kb21MZW4pO1xuICAgIHJldHVybiBuZXcgU2NoZW1hUHJlZml4KHYpO1xuICB9O1xuXG4gIHB1YmxpYyBzdGF0aWMgaXNWYWxpZCA9IChwcmVmaXg6IHN0cmluZyB8IDk5OSk6IHByZWZpeCBpcyBTY2hlbWFQcmVmaXhWYWx1ZSA9PiB7XG4gICAgaWYgKHR5cGVvZiBwcmVmaXggIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcbiAgICBpZiAocHJlZml4Lmxlbmd0aCA8IFNjaGVtYVByZWZpeC5NSU5fTEVOR1RIKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHByZWZpeC5sZW5ndGggPiBTY2hlbWFQcmVmaXguTUFYX0xFTkdUSCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIGdldCB2YWx1ZSgpOiBTY2hlbWFQcmVmaXhWYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoIVNjaGVtYVByZWZpeC5pc1ZhbGlkKHZhbHVlKSkge1xuICAgICAgY29uc29sZS5sb2coXCJJTlZBTElEIFBSRUZJWFwiLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgY29uc3RydWN0b3IocHJpdmF0ZSBfdmFsdWU6IFNjaGVtYVByZWZpeFZhbHVlKSB7fVxufVxuZXhwb3J0IGNsYXNzIFBhZ2VQcmVmaXgge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1JTl9MRU5HVEggPSAxO1xuICBwcml2YXRlIHN0YXRpYyByYW5kb21MZW4gPSA1O1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BWF9MRU5HVEggPSAxNjtcbiAgcHVibGljIHN0YXRpYyBmcm9tVmFsdWUgPSAodmFsdWU6IFBhZ2VQcmVmaXhWYWx1ZSk6IFBhZ2VQcmVmaXggPT4ge1xuICAgIHJldHVybiBuZXcgUGFnZVByZWZpeCh2YWx1ZSk7XG4gIH07XG5cbiAgcHVibGljIHN0YXRpYyBjcmVhdGUgPSAoKTogUGFnZVByZWZpeCA9PiB7XG4gICAgY29uc3QgdiA9IGNyZWF0ZVJhbmRvbVByZWZpeDxQYWdlUHJlZml4VmFsdWU+KFBhZ2VQcmVmaXgucmFuZG9tTGVuKTtcbiAgICByZXR1cm4gbmV3IFBhZ2VQcmVmaXgodik7XG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgZnJvbVN0cmluZyA9ICh2YWx1ZTogc3RyaW5nKTogUGFnZVByZWZpeCB8IGZhbHNlID0+IHtcbiAgICBpZiAoIVBhZ2VQcmVmaXguaXNWYWxpZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gbmV3IFBhZ2VQcmVmaXgodmFsdWUpO1xuICB9O1xuXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVN0cmluZ09yVGhyb3cgPSAodmFsdWU6IHN0cmluZyk6IFBhZ2VQcmVmaXhWYWx1ZSA9PiB7XG4gICAgaWYgKCFQYWdlUHJlZml4LmlzVmFsaWQodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHByZWZpeFwiKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgY2FzdE9yQ3JlYXRlUmFuZG9tID0gKHZhbHVlOiBzdHJpbmcpOiBQYWdlUHJlZml4ID0+IHtcbiAgICBjb25zdCB2ID0gUGFnZVByZWZpeC5pc1ZhbGlkKHZhbHVlKSA/IHZhbHVlIDogY3JlYXRlUmFuZG9tUHJlZml4PFBhZ2VQcmVmaXhWYWx1ZT4oUGFnZVByZWZpeC5yYW5kb21MZW4pO1xuICAgIHJldHVybiBuZXcgUGFnZVByZWZpeCh2KTtcbiAgfTtcblxuICBwdWJsaWMgc3RhdGljIGlzVmFsaWQgPSAocHJlZml4OiBzdHJpbmcgfCA5OTkpOiBwcmVmaXggaXMgUGFnZVByZWZpeFZhbHVlID0+IHtcbiAgICBpZiAodHlwZW9mIHByZWZpeCAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChwcmVmaXgubGVuZ3RoIDwgU2NoZW1hUHJlZml4Lk1JTl9MRU5HVEgpIHJldHVybiBmYWxzZTtcbiAgICBpZiAocHJlZml4Lmxlbmd0aCA+IFNjaGVtYVByZWZpeC5NQVhfTEVOR1RIKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgZ2V0IHZhbHVlKCk6IFBhZ2VQcmVmaXhWYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoIVBhZ2VQcmVmaXguaXNWYWxpZCh2YWx1ZSkpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiSU5WQUxJRCBQUkVGSVhcIiwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHByaXZhdGUgX3ZhbHVlOiBQYWdlUHJlZml4VmFsdWUpIHt9XG59XG4iLCAiaW1wb3J0IHsgQnVpbGRlclZhcmlhYmxlLCBCdWlsZGVyVmFyaWFibGVPcHRpb24gfSBmcm9tIFwiLi9SdWxlVmFyaWFibGVcIjtcbmltcG9ydCB7IEJ1aWxkZXJPcGVyYXRvciB9IGZyb20gXCIuL2NvbmRpdGlvbi9CdWlsZGVyLW9wZXJhdG9yXCI7XG5pbXBvcnQgeyBKdW1wVG9QYWdlQWN0aW9uIH0gZnJvbSBcIi4vUnVsZUFjdGlvblwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2luZ2xlU2VsZWN0SXRlbTxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlbGVjdExhYmVsO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b29sVGlwO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZWFyY2hTdHJpbmc7XG4gIGdldCBzZWxlY3RMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RMYWJlbDtcbiAgfVxuICBnZXQgdG9vbHRpcCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdG9vbFRpcDtcbiAgfVxuXG4gIGdldCBzZWFyY2hTdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaFN0cmluZztcbiAgfVxuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihyZWFkb25seSBkYXRhOiBUKSB7XG4gICAgdGhpcy5fc2VsZWN0TGFiZWwgPSB0aGlzLmdldFNlbGVjdExhYmVsKCk7XG4gICAgdGhpcy5fdG9vbFRpcCA9IHRoaXMuZ2V0VG9vbHRpcCgpO1xuICAgIHRoaXMuX3NlYXJjaFN0cmluZyA9IHRoaXMuZ2V0U2VhcmNoU3RyaW5nKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFNlbGVjdExhYmVsKCk6IHN0cmluZztcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFRvb2x0aXAoKTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0U2VhcmNoU3RyaW5nKCk6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFJ1bGVWYXJpYWJsZVNlbGVjdEl0ZW0gZXh0ZW5kcyBTaW5nbGVTZWxlY3RJdGVtPEJ1aWxkZXJWYXJpYWJsZT4ge1xuICBwdWJsaWMgc3RhdGljIGNyZWF0ZSA9IChkYXRhOiBCdWlsZGVyVmFyaWFibGUpID0+IHtcbiAgICByZXR1cm4gbmV3IFJ1bGVWYXJpYWJsZVNlbGVjdEl0ZW0oZGF0YSk7XG4gIH07XG4gIHJlYWRvbmx5IG9wdGlvbnM6IFJlYWRvbmx5QXJyYXk8UnVsZU9wdGlvblNlbGVjdEl0ZW0+O1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBkYXRhOiBCdWlsZGVyVmFyaWFibGUpIHtcbiAgICBzdXBlcihkYXRhKTtcbiAgICB0aGlzLm9wdGlvbnMgPSBkYXRhLm9wdGlvbnMubWFwKFJ1bGVPcHRpb25TZWxlY3RJdGVtLmNyZWF0ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U2VhcmNoU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS52YXJJZCArIHRoaXMuZGF0YS5sYWJlbDtcbiAgfVxuXG4gIGdldFNlbGVjdExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS52YXJJZDtcbiAgfVxuXG4gIGdldFRvb2x0aXAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmxhYmVsO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSdWxlT3B0aW9uU2VsZWN0SXRlbSBleHRlbmRzIFNpbmdsZVNlbGVjdEl0ZW08QnVpbGRlclZhcmlhYmxlT3B0aW9uPiB7XG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlID0gKG9wdGlvbjogQnVpbGRlclZhcmlhYmxlT3B0aW9uKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBSdWxlT3B0aW9uU2VsZWN0SXRlbShvcHRpb24pO1xuICB9O1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKG9wdGlvbjogQnVpbGRlclZhcmlhYmxlT3B0aW9uKSB7XG4gICAgc3VwZXIob3B0aW9uKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U2VhcmNoU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U2VsZWN0TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmxhYmVsICsgXCIoXCIgKyB0aGlzLmRhdGEudmFsdWUgKyBcIilcIjtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9wZXJhdG9yU2VsZWN0SXRlbSBleHRlbmRzIFNpbmdsZVNlbGVjdEl0ZW08QnVpbGRlck9wZXJhdG9yIHwgXCJcIj4ge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVRID0gbmV3IE9wZXJhdG9yU2VsZWN0SXRlbShcImVxdWFsXCIpO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PVF9FUSA9IG5ldyBPcGVyYXRvclNlbGVjdEl0ZW0oXCJub3RFcXVhbFwiKTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBmcm9tU3ltYm9sID0gKFxuICAgIHN5bWJvbDogQnVpbGRlck9wZXJhdG9yIHwgT21pdDxzdHJpbmcsIEJ1aWxkZXJPcGVyYXRvcj4sXG4gICk6IE9wZXJhdG9yU2VsZWN0SXRlbSB8IGZhbHNlID0+IHtcbiAgICBpZiAoc3ltYm9sID09PSBcImVxdWFsXCIpIHtcbiAgICAgIHJldHVybiBPcGVyYXRvclNlbGVjdEl0ZW0uRVE7XG4gICAgfVxuICAgIGlmIChzeW1ib2wgPT09IFwibm90RXF1YWxcIikge1xuICAgICAgcmV0dXJuIE9wZXJhdG9yU2VsZWN0SXRlbS5OT1RfRVE7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihvcGVyYXRvcjogQnVpbGRlck9wZXJhdG9yKSB7XG4gICAgc3VwZXIob3BlcmF0b3IpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNlYXJjaFN0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNlbGVjdExhYmVsKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgb3BlcmF0b3IgPSB0aGlzLmRhdGE7XG4gICAgaWYgKG9wZXJhdG9yID09PSBcImVxdWFsXCIpIHtcbiAgICAgIHJldHVybiBcIkVxdWFsc1wiO1xuICAgIH1cbiAgICBpZiAob3BlcmF0b3IgPT09IFwibm90RXF1YWxcIikge1xuICAgICAgcmV0dXJuIFwiTm90IGVxdWFsc1wiO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgb3BlcmF0b3IgPSB0aGlzLmRhdGE7XG4gICAgaWYgKG9wZXJhdG9yID09PSBcImVxdWFsXCIpIHtcbiAgICAgIHJldHVybiBcIkVxdWFsc1wiO1xuICAgIH1cbiAgICBpZiAob3BlcmF0b3IgPT09IFwibm90RXF1YWxcIikge1xuICAgICAgcmV0dXJuIFwiTm90IGVxdWFsc1wiO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSnVtcFRvUGFnZVNlbGVjdEl0ZW0gZXh0ZW5kcyBTaW5nbGVTZWxlY3RJdGVtPEp1bXBUb1BhZ2VBY3Rpb24+IHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBjcmVhdGUgPSAocGFnZURhdGE6IEp1bXBUb1BhZ2VBY3Rpb24pID0+IG5ldyBKdW1wVG9QYWdlU2VsZWN0SXRlbShwYWdlRGF0YSk7XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihwYWdlRGF0YTogSnVtcFRvUGFnZUFjdGlvbikge1xuICAgIHN1cGVyKHBhZ2VEYXRhKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTZWFyY2hTdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLnBhZ2VJZCArIHRoaXMuZGF0YS5tYWluVGV4dDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTZWxlY3RMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEucGFnZUlkICsgXCIgKFwiICsgdGhpcy5kYXRhLnBhZ2VOdW1iZXIgKyBcIilcIjtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5tYWluVGV4dDtcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgUXVlc3Rpb25WYXJpYWJsZSwgQ3VzdG9tVmFyaWFibGUsIEJ1aWxkZXJWYXJpYWJsZSB9IGZyb20gXCIuL1J1bGVWYXJpYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBFeGNsdWRlQnlQYWdlQWN0aW9uLCBFeGNsdWRlQnlUYWdBY3Rpb24sIEp1bXBUb1BhZ2VBY3Rpb24gfSBmcm9tIFwiLi9SdWxlQWN0aW9uXCI7XG5pbXBvcnQgeyBKdW1wVG9QYWdlU2VsZWN0SXRlbSB9IGZyb20gXCIuL1NpbmdsZVNlbGVjdEl0ZW1cIjtcblxuLyoqXG4gKiBUT0RPIENyYXRlIGZpbHRlcnMgZm9yIFwiY2FyZGluYWxpdHlcIiBvciBcIm9yZGVyXCIgb2YgYSB2YXJpYWJsZTtcbiAqIFJldHVybiBsZWdhbCBsaXN0cyBvZiB2YXJpYWJsZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBSdWxlSW5wdXQge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9xdWVzdGlvblZhcmlhYmxlczogUmVhZG9ubHlBcnJheTxRdWVzdGlvblZhcmlhYmxlPixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfY3VzdG9tVmFyaWFibGVzOiBSZWFkb25seUFycmF5PEN1c3RvbVZhcmlhYmxlPixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUlkQWN0aW9uczogUmVhZG9ubHlBcnJheTxFeGNsdWRlQnlQYWdlQWN0aW9uPixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfdGFnQWN0aW9uczogUmVhZG9ubHlBcnJheTxFeGNsdWRlQnlUYWdBY3Rpb24+LFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9qdW1wQWN0aW9uczogUmVhZG9ubHlBcnJheTxKdW1wVG9QYWdlQWN0aW9uPlxuICAgICkge31cblxuICAgIGdldCBxdWVzdGlvblZhcnMoKTogUmVhZG9ubHlBcnJheTxRdWVzdGlvblZhcmlhYmxlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9xdWVzdGlvblZhcmlhYmxlcztcbiAgICB9XG5cbiAgICBnZXRDb25kaXRpb25JbnB1dCgpOiBSZWFkb25seUFycmF5PEJ1aWxkZXJWYXJpYWJsZT4ge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMucXVlc3Rpb25WYXJzLCAuLi50aGlzLmN1c3RvbVZhcnNdO1xuICAgIH1cblxuICAgIGdldEp1bXBUb1BhZ2VPcHRpb25zKCk6IFJlYWRvbmx5QXJyYXk8SnVtcFRvUGFnZVNlbGVjdEl0ZW0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2p1bXBBY3Rpb25zLm1hcChKdW1wVG9QYWdlU2VsZWN0SXRlbS5jcmVhdGUpO1xuICAgIH1cblxuICAgIGdldCBjdXN0b21WYXJzKCk6IFJlYWRvbmx5QXJyYXk8Q3VzdG9tVmFyaWFibGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1c3RvbVZhcmlhYmxlcztcbiAgICB9XG5cbiAgICBnZXQgZXhjbHVkZUJ5UGFnZUlkQWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhZ2VJZEFjdGlvbnM7XG4gICAgfVxuXG4gICAgZ2V0IGV4Y2x1ZGVCeVRhZ0FjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWdBY3Rpb25zO1xuICAgIH1cbiAgICBnZXQganVtcFRvUGFnZUFjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9qdW1wQWN0aW9ucztcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgQnVpbGRlck9iamVjdElkLCBCdWlsZGVyT2JqZWN0IH0gZnJvbSAnLi9CdWlsZGVyT2JqZWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZGVyVGFnRHRvIHtcbiAgcmVhZG9ubHkgaWQ6IEJ1aWxkZXJPYmplY3RJZC5UYWdJZDtcbiAgcmVhZG9ubHkgdGFnOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZGVyVGFnIGV4dGVuZHMgQnVpbGRlck9iamVjdDwnYnVpbGRlci10YWcnLCBCdWlsZGVyVGFnRHRvPiB7XG4gIHJlYWRvbmx5IG9iamVjdFR5cGU6ICdidWlsZGVyLXRhZycgPSAnYnVpbGRlci10YWcnO1xuICByZWFkb25seSBpZDogQnVpbGRlck9iamVjdElkLlRhZ0lkO1xuICB0YWdUZXh0ID0gJyc7XG4gIHRhZ0Rlc2NyaXB0aW9uID0gJyc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUFYX0xFTkdUSCA9IDIwO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1JTl9MRU5HVEggPSAxO1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgY3JlYXRlID0gKHRhZzogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nID0gJycpID0+IHtcbiAgICBjb25zdCBpZCA9IEJ1aWxkZXJPYmplY3RJZC5jcmVhdGVUYWdJZCgpO1xuICAgIGNvbnN0IGR0bzogQnVpbGRlclRhZ0R0byA9IHtcbiAgICAgIGlkLFxuICAgICAgdGFnLFxuICAgICAgZGVzY3JpcHRpb25cbiAgICB9O1xuICAgIHJldHVybiBuZXcgQnVpbGRlclRhZyhkdG8pO1xuICB9O1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGZyb21EdG8gPSAoZHRvOiBCdWlsZGVyVGFnRHRvKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBCdWlsZGVyVGFnKGR0byk7XG4gIH07XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihkdG86IEJ1aWxkZXJUYWdEdG8pIHtcbiAgICBjb25zdCBpZCA9IGR0by5pZCA/PyBCdWlsZGVyT2JqZWN0SWQuY3JlYXRlVGFnSWQoKTtcbiAgICBjb25zdCB3aXRoSWQgPSB7IC4uLmR0bywgaWQgfTtcbiAgICBzdXBlcih3aXRoSWQpO1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLnRhZ1RleHQgPSBkdG8udGFnID8/ICcnO1xuICAgIHRoaXMudGFnRGVzY3JpcHRpb24gPSBkdG8uZGVzY3JpcHRpb24gPz8gJyc7XG4gIH1cbiAgY2xvbmUoKTogQnVpbGRlclRhZ0R0byB7XG4gICAgcmV0dXJuIHRoaXMudG9Kc29uKCk7XG4gIH1cblxuICB0b0pzb24oKTogQnVpbGRlclRhZ0R0byB7XG4gICAgcmV0dXJuIHsgdGFnOiB0aGlzLnRhZ1RleHQsIGRlc2NyaXB0aW9uOiB0aGlzLnRhZ0Rlc2NyaXB0aW9uLCBpZDogdGhpcy5pZCB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYWdDb2xsZWN0aW9uIGltcGxlbWVudHMgSXRlcmFibGU8QnVpbGRlclRhZz4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF90YWdzID0gbmV3IFNldDxCdWlsZGVyVGFnPigpO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGNyZWF0ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gbmV3IFRhZ0NvbGxlY3Rpb24oW10pO1xuICB9O1xuXG4gIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgIGNvbnN0IGxpc3QgPSBbLi4udGhpcy5fdGFnc107XG4gICAgcmV0dXJuIGxpc3RbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICB9XG4gIHByaXZhdGUgY29uc3RydWN0b3IoaW5pdGlhbFRhZ3M6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclRhZz4pIHtcbiAgICBpbml0aWFsVGFncy5mb3JFYWNoKHRhZyA9PiB7XG4gICAgICB0aGlzLl90YWdzLmFkZCh0YWcpO1xuICAgIH0pO1xuICB9XG5cbiAgaW5pdCh0YWdzOiBSZWFkb25seUFycmF5PEJ1aWxkZXJUYWdEdG8+KSB7XG4gICAgY29uc3QgZHRvTGlzdDogUmVhZG9ubHlBcnJheTxCdWlsZGVyVGFnRHRvPiA9IEFycmF5LmlzQXJyYXkodGFncylcbiAgICAgID8gdGFnc1xuICAgICAgOiBbXTtcbiAgICBjb25zdCBhbGwgPSBkdG9MaXN0Lm1hcChCdWlsZGVyVGFnLmZyb21EdG8pO1xuICAgIGFsbC5mb3JFYWNoKHRhZyA9PiB7XG4gICAgICB0aGlzLl90YWdzLmFkZCh0YWcpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkKHRhZzogQnVpbGRlclRhZykge1xuICAgIHRoaXMuX3RhZ3MuYWRkKHRhZyk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIHRoaXMgdGFnIGZyb20gY29sbGVjdGlvbjtcbiAgICogQHBhcmFtIHRhZ1xuICAgKi9cbiAgZGVsZXRlKHRhZzogQnVpbGRlclRhZykge1xuICAgIHRoaXMuX3RhZ3MuZGVsZXRlKHRhZyk7XG4gIH1cblxuICB0b0pzb24oKTogUmVhZG9ubHlBcnJheTxCdWlsZGVyVGFnRHRvPiB7XG4gICAgY29uc3QgbGlzdCA9IFsuLi50aGlzLl90YWdzXTtcbiAgICBjb25zdCBkdG9MaXN0ID0gbGlzdC5tYXAodCA9PiB0LnRvSnNvbigpKTtcbiAgICByZXR1cm4gZHRvTGlzdDtcbiAgfVxuXG4gIGRlbGV0ZUFsbCh0YWdzOiBJdGVyYWJsZTxCdWlsZGVyVGFnPikge1xuICAgIGNvbnN0IGwgPSB0YWdzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICBjb25zdCBhc0xpc3QgPSBbLi4udGFnc107XG4gICAgYXNMaXN0LmZvckVhY2godCA9PiB7XG4gICAgICB0aGlzLmRlbGV0ZSh0KTtcbiAgICB9KTtcbiAgfVxufVxuIiwgImNvbnN0IEJ1aWxkZXJPcGVyYXRvclN5bWJvbHMgPSB7XG4gIGVxdWFsOiB0cnVlLFxuICBub3RFcXVhbDogdHJ1ZSxcbiAgbGVzc1RoYW46IHRydWUsXG4gIGxlc3NUaGFuT3JFcXVhbDogdHJ1ZSxcbiAgZ3JlYXRlclRoYW46IHRydWUsXG4gIGdyZWF0ZXJUaGFuT3JFcXVhbDogdHJ1ZSxcbiAgYmV0d2VlbjogdHJ1ZSxcbiAgbm90QmV0d2VlbjogdHJ1ZSxcbiAgaW46IHRydWUsXG4gIG5vdEluOiB0cnVlLFxuICBtaXNzaW5nOiB0cnVlLFxuICBub3RNaXNzaW5nOiB0cnVlLFxuICBjb250YWluczogdHJ1ZSxcbiAgbm90Q29udGFpbnM6IHRydWUsXG4gIGVtcHR5OiB0cnVlLFxuICBub3RFbXB0eTogdHJ1ZSxcbiAgc3RhcnRzV2l0aDogdHJ1ZSxcbiAgZW5kc1dpdGg6IHRydWUsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBCdWlsZGVyT3BlcmF0b3IgPSBrZXlvZiB0eXBlb2YgQnVpbGRlck9wZXJhdG9yU3ltYm9scztcblxuZXhwb3J0IG5hbWVzcGFjZSBCdWlsZGVyT3BlcmF0b3Ige1xuICBleHBvcnQgY29uc3QgaXMgPSAoc3ltYm9sPzogc3RyaW5nKTogc3ltYm9sIGlzIEJ1aWxkZXJPcGVyYXRvciA9PiB7XG4gICAgaWYgKHR5cGVvZiBzeW1ib2wgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKEJ1aWxkZXJPcGVyYXRvclN5bWJvbHMpLmluY2x1ZGVzKHN5bWJvbCk7XG4gIH07XG59XG4iLCAiaW1wb3J0IHsgQnVpbGRlck9iamVjdCB9IGZyb20gXCIuLi8uLi9CdWlsZGVyT2JqZWN0XCI7XG5pbXBvcnQgeyBCdWlsZGVyT3BlcmF0b3IgfSBmcm9tIFwiLi9CdWlsZGVyLW9wZXJhdG9yXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJWYXJpYWJsZSwgQnVpbGRlclZhcmlhYmxlT3B0aW9uIH0gZnJvbSBcIi4uL1J1bGVWYXJpYWJsZVwiO1xuaW1wb3J0IHsgT3BlcmF0b3JTZWxlY3RJdGVtLCBSdWxlT3B0aW9uU2VsZWN0SXRlbSwgUnVsZVZhcmlhYmxlU2VsZWN0SXRlbSB9IGZyb20gXCIuLi9TaW5nbGVTZWxlY3RJdGVtXCI7XG5pbXBvcnQgeyBDb25kaXRpb24gfSBmcm9tIFwiQG1lZGlhLXF1ZXN0L2VuZ2luZVwiO1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZGVyQ29uZGl0aW9uRHRvIHtcbiAgcmVhZG9ubHkga2luZDogXCJjb25kaXRpb25cIjtcbiAgcmVhZG9ubHkgb3BlcmF0b3I6IEJ1aWxkZXJPcGVyYXRvciB8IFwiXCI7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgdmFyaWFibGVJZDogc3RyaW5nO1xuICByZWFkb25seSB2YWx1ZTogbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkZXJDb25kaXRpb24gZXh0ZW5kcyBCdWlsZGVyT2JqZWN0PFwiYnVpbGRlci1jb25kaXRpb25cIiwgQnVpbGRlckNvbmRpdGlvbkR0bz4ge1xuICByZWFkb25seSBvYmplY3RUeXBlOiBcImJ1aWxkZXItY29uZGl0aW9uXCIgPSBcImJ1aWxkZXItY29uZGl0aW9uXCI7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTlVNQkVSX09QRVJBVE9SUzogUmVhZG9ubHlBcnJheTxPcGVyYXRvclNlbGVjdEl0ZW0+ID0gW1xuICAgIE9wZXJhdG9yU2VsZWN0SXRlbS5FUSxcbiAgICBPcGVyYXRvclNlbGVjdEl0ZW0uTk9UX0VRLFxuICBdO1xuXG4gIHByaXZhdGUgaW5pdGlhbER0bzogQnVpbGRlckNvbmRpdGlvbkR0bztcbiAgbmFtZSA9IFwiXCI7XG5cbiAgcHVibGljIHN0YXRpYyBjcmVhdGUgPSAodmFyaWFibGVMaXN0OiBSZWFkb25seUFycmF5PEJ1aWxkZXJWYXJpYWJsZT4pID0+IHtcbiAgICBjb25zdCBjb25kaXRpb24gPSBuZXcgQnVpbGRlckNvbmRpdGlvbihcbiAgICAgIHtcbiAgICAgICAga2luZDogXCJjb25kaXRpb25cIixcbiAgICAgICAgbmFtZTogXCJcIixcbiAgICAgICAgb3BlcmF0b3I6IFwiXCIsXG4gICAgICAgIHZhcmlhYmxlSWQ6IFwiXCIsXG4gICAgICAgIHZhbHVlOiBcIlwiLFxuICAgICAgfSxcbiAgICAgIHZhcmlhYmxlTGlzdCxcbiAgICApO1xuICAgIHJldHVybiBjb25kaXRpb247XG4gIH07XG5cbiAgcHVibGljIHN0YXRpYyBmcm9tRHRvID0gKGR0bzogQnVpbGRlckNvbmRpdGlvbkR0bywgdmFyaWFibGVzOiBSZWFkb25seUFycmF5PEJ1aWxkZXJWYXJpYWJsZT4pID0+IHtcbiAgICBjb25zdCBfZHRvOiBCdWlsZGVyQ29uZGl0aW9uRHRvID0ge1xuICAgICAga2luZDogXCJjb25kaXRpb25cIixcbiAgICAgIG5hbWU6IGR0by5uYW1lID8/IFwiXCIsXG4gICAgICB2YWx1ZTogZHRvLnZhbHVlID8/IFwiXCIsXG4gICAgICBvcGVyYXRvcjogZHRvLm9wZXJhdG9yID8/IFwiXCIsXG4gICAgICB2YXJpYWJsZUlkOiBkdG8udmFyaWFibGVJZCA/PyBcIlwiLFxuICAgIH07XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQnVpbGRlckNvbmRpdGlvbihfZHRvLCB2YXJpYWJsZXMpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfTtcbiAgcHJpdmF0ZSBfdmFyaWFibGU6IEJ1aWxkZXJWYXJpYWJsZSB8IGZhbHNlID0gZmFsc2U7XG4gIHByaXZhdGUgX29wZXJhdG9yOiBCdWlsZGVyT3BlcmF0b3IgfCBcIlwiID0gXCJcIjtcbiAgcHJpdmF0ZSBfdmFsdWU6IEJ1aWxkZXJWYXJpYWJsZU9wdGlvbiB8IGZhbHNlID0gZmFsc2U7XG4gIHByaXZhdGUgX3ZhcmlhYmxlTGlzdDogUmVhZG9ubHlBcnJheTxCdWlsZGVyVmFyaWFibGU+ID0gW107XG5cbiAgLyoqXG4gICAqIENhbiBvbmx5IHNldCB2YXJpYWJsZXMgdGhhdCBleGlzdCBpbiB2YXJpYWJsZUxpc3QuXG4gICAqIEBwYXJhbSB2YXJpYWJsZVxuICAgKi9cbiAgc2V0IHZhcmlhYmxlKHZhcmlhYmxlOiBCdWlsZGVyVmFyaWFibGUgfCBmYWxzZSkge1xuICAgIGlmICh2YXJpYWJsZSA9PT0gdGhpcy5fdmFyaWFibGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fdmFyaWFibGUgPSB2YXJpYWJsZTtcbiAgICB0aGlzLl9vcGVyYXRvciA9IFwiXCI7XG4gICAgdGhpcy5fdmFsdWUgPSBmYWxzZTtcbiAgfVxuXG4gIGdldCB2YXJpYWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFyaWFibGU7XG4gIH1cblxuICBzZXQgdmFsdWUodmFyaWFibGVWYWx1ZTogQnVpbGRlclZhcmlhYmxlT3B0aW9uIHwgZmFsc2UpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhcmlhYmxlVmFsdWU7XG4gIH1cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHZhbGlkYXRlKCk6IHsgaXNWYWxpZDogdHJ1ZSB9IHwgeyBpc1ZhbGlkOiBmYWxzZTsgbWVzc2FnZTogc3RyaW5nIH0ge1xuICAgIGlmICh0aGlzLl92YXJpYWJsZUxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogXCJIYXMgbm8gdmFyaWFibGVMaXN0IHRvIGNoZWNrIGR0byBhZ2FpbnN0LlwiLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl92YXJpYWJsZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IFwiVmFyaWFibGUgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIGZyb20gdmFyaWFibGVMaXN0LlwiLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX29wZXJhdG9yKSB7XG4gICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgbWVzc2FnZTogXCJPcGVyYXRvciBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWRcIiB9O1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fdmFsdWUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBcIlZhbHVlIChCdWlsZGVyVmFyaWFibGVPcHRpb24pIGlzIG5vdCBpbml0aWFsaXplZFwiLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBpc1ZhbGlkOiB0cnVlIH07XG4gIH1cblxuICB0b0VuZ2luZUNvbmRpdGlvbigpOiBDb25kaXRpb24uU2ltcGxlIHwgZmFsc2Uge1xuICAgIGNvbnN0IHZhbCA9IHRoaXMudmFsdWU7XG4gICAgY29uc3Qgb3AgPSB0aGlzLl9vcGVyYXRvcjtcbiAgICBjb25zdCB2ID0gdGhpcy5fdmFyaWFibGU7XG4gICAgaWYgKCF2YWwpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIW9wKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCF2KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKG9wID09PSBcImVxdWFsXCIpIHtcbiAgICAgIGNvbnN0IGVuZ2luZUNvbmRpdGlvbjogQ29uZGl0aW9uLlNpbXBsZSA9IHtcbiAgICAgICAga2luZDogXCJudW1lcmljLWNvbmRpdGlvblwiLFxuICAgICAgICB2YWx1ZTogdmFsLnZhbHVlLFxuICAgICAgICB2YWx1ZUxhYmVsOiB2YWwubGFiZWwsXG4gICAgICAgIHJlZmVyZW5jZUlkOiB2LnZhcklkLFxuICAgICAgICByZWZlcmVuY2VMYWJlbDogdi5sYWJlbCxcbiAgICAgICAgb3BlcmF0b3I6IFwiZXFcIixcbiAgICAgIH07XG4gICAgICByZXR1cm4gZW5naW5lQ29uZGl0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGZpbmRWYXJpYWJsZUluVW5pdmVyc2UodmFyaWFibGVJZDogc3RyaW5nKTogQnVpbGRlclZhcmlhYmxlIHwgZmFsc2Uge1xuICAgIGNvbnN0IHYgPSB0aGlzLl92YXJpYWJsZUxpc3QuZmluZCgodikgPT4gdi52YXJJZCA9PT0gdmFyaWFibGVJZCk7XG4gICAgcmV0dXJuIHYgPz8gZmFsc2U7XG4gIH1cblxuICBzZXQgb3BlcmF0b3Iob3BlcmF0b3I6IEJ1aWxkZXJPcGVyYXRvciB8IFwiXCIpIHtcbiAgICBpZiAoQnVpbGRlck9wZXJhdG9yLmlzKG9wZXJhdG9yKSkge1xuICAgICAgdGhpcy5fb3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fb3BlcmF0b3IgPSBcIlwiO1xuICAgIH1cbiAgfVxuXG4gIGdldCBvcGVyYXRvcigpIHtcbiAgICByZXR1cm4gdGhpcy5fb3BlcmF0b3I7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGR0bzogQnVpbGRlckNvbmRpdGlvbkR0bywgdmFyaWFibGVzOiBSZWFkb25seUFycmF5PEJ1aWxkZXJWYXJpYWJsZT4pIHtcbiAgICBzdXBlcihkdG8pO1xuICAgIHRoaXMuaW5pdGlhbER0byA9IGR0bztcbiAgICB0aGlzLm5hbWUgPSBkdG8ubmFtZTtcbiAgICB0aGlzLl9zZXRWYXJpYWJsZUxpc3QodmFyaWFibGVzKTtcbiAgfVxuXG4gIGdldCB2YXJpYWJsZVNlbGVjdEl0ZW1zSW5Vbml2ZXJzZSgpOiBSZWFkb25seUFycmF5PFJ1bGVWYXJpYWJsZVNlbGVjdEl0ZW0+IHtcbiAgICByZXR1cm4gdGhpcy5fdmFyaWFibGVMaXN0Lm1hcChSdWxlVmFyaWFibGVTZWxlY3RJdGVtLmNyZWF0ZSk7XG4gIH1cblxuICBnZXQgb3BlcmF0b3JzU2VsZWN0SXRlbXMoKTogUmVhZG9ubHlBcnJheTxPcGVyYXRvclNlbGVjdEl0ZW0+IHtcbiAgICByZXR1cm4gdGhpcy5fdmFyaWFibGUgPyBCdWlsZGVyQ29uZGl0aW9uLk5VTUJFUl9PUEVSQVRPUlMgOiBbXTtcbiAgfVxuXG4gIGdldCBzZWxlY3RWYWx1ZUl0ZW1zKCk6IFJlYWRvbmx5QXJyYXk8UnVsZU9wdGlvblNlbGVjdEl0ZW0+IHtcbiAgICBpZiAoIXRoaXMuX3ZhcmlhYmxlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IG9wdCA9IHRoaXMuX3ZhcmlhYmxlLm9wdGlvbnMubWFwKFJ1bGVPcHRpb25TZWxlY3RJdGVtLmNyZWF0ZSk7XG4gICAgcmV0dXJuIG9wdDtcbiAgfVxuXG4gIGNsb25lKCk6IEJ1aWxkZXJDb25kaXRpb25EdG8ge1xuICAgIHJldHVybiB0aGlzLnRvSnNvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0VmFyaWFibGVMaXN0KHZhcmlhYmxlczogUmVhZG9ubHlBcnJheTxCdWlsZGVyVmFyaWFibGU+KTogYm9vbGVhbiB7XG4gICAgdGhpcy5fdmFyaWFibGVMaXN0ID0gdmFyaWFibGVzO1xuICAgIGNvbnN0IHYgPSB0aGlzLl92YXJpYWJsZUxpc3QuZmluZCgodikgPT4gdi52YXJJZCA9PT0gdGhpcy5vcmlnaW5hbER0by52YXJpYWJsZUlkKTtcbiAgICBpZiAoIXYpIHtcbiAgICAgIHRoaXMuX3ZhcmlhYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLl9vcGVyYXRvciA9IFwiXCI7XG4gICAgICB0aGlzLl92YWx1ZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLl92YXJpYWJsZSA9IHY7XG4gICAgY29uc3Qgb3AgPSB0aGlzLm9yaWdpbmFsRHRvLm9wZXJhdG9yO1xuXG4gICAgaWYgKCFCdWlsZGVyT3BlcmF0b3IuaXMob3ApKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuX29wZXJhdG9yID0gb3A7XG4gICAgY29uc3QgbWF5YmVPcHRpb24gPSB2Lm9wdGlvbnMuZmluZCgob3ApID0+IG9wLnZhbHVlID09PSB0aGlzLm9yaWdpbmFsRHRvLnZhbHVlKTtcbiAgICBpZiAoIW1heWJlT3B0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuX3ZhbHVlID0gbWF5YmVPcHRpb247XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB0b0pzb24oKTogQnVpbGRlckNvbmRpdGlvbkR0byB7XG4gICAgY29uc3QgbmFtZSA9IHRoaXMubmFtZTtcbiAgICBjb25zdCB2YXJpYWJsZUlkID0gdGhpcy5fdmFyaWFibGUgPyB0aGlzLl92YXJpYWJsZS52YXJJZCA6IFwiXCI7XG4gICAgY29uc3Qgb3BlcmF0b3IgPSB0aGlzLl9vcGVyYXRvciA/IHRoaXMuX29wZXJhdG9yIDogXCJcIjtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX3ZhbHVlID8gdGhpcy5fdmFsdWUudmFsdWUgOiBcIlwiO1xuICAgIHJldHVybiB7XG4gICAgICBraW5kOiBcImNvbmRpdGlvblwiLFxuICAgICAgbmFtZSxcbiAgICAgIG9wZXJhdG9yLFxuICAgICAgdmFyaWFibGVJZCxcbiAgICAgIHZhbHVlLFxuICAgIH07XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBCdWlsZGVyQ29uZGl0aW9uLCB0eXBlIEJ1aWxkZXJDb25kaXRpb25EdG8gfSBmcm9tIFwiLi9CdWlsZGVyLWNvbmRpdGlvblwiO1xuaW1wb3J0IHsgQnVpbGRlck9iamVjdCB9IGZyb20gXCIuLi8uLi9CdWlsZGVyT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJWYXJpYWJsZSB9IGZyb20gXCIuLi9SdWxlVmFyaWFibGVcIjtcbmltcG9ydCB7IENvbmRpdGlvbiB9IGZyb20gXCJAbWVkaWEtcXVlc3QvZW5naW5lXCI7XG5cbmNvbnN0IENvbmRpdGlvbkdyb3VwVHlwZSA9IHtcbiAgYWxsOiB0cnVlLFxuICBhbnk6IHRydWUsXG4gIGNvdW50OiB0cnVlLFxufTtcblxuZXhwb3J0IHR5cGUgQ29uZGl0aW9uR3JvdXBUeXBlID0ga2V5b2YgdHlwZW9mIENvbmRpdGlvbkdyb3VwVHlwZTtcbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlckNvbmRpdGlvbkdyb3VwRHRvIHtcbiAgcmVhZG9ubHkga2luZDogXCJjb25kaXRpb24tZ3JvdXBcIjtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBjb3VudD86IG51bWJlcjtcbiAgcmVhZG9ubHkgdHlwZTogQ29uZGl0aW9uR3JvdXBUeXBlO1xuICByZWFkb25seSBjb25kaXRpb25zOiBSZWFkb25seUFycmF5PEJ1aWxkZXJDb25kaXRpb25EdG8+O1xufVxuXG5leHBvcnQgY2xhc3MgQnVpbGRlckNvbmRpdGlvbkdyb3VwIGV4dGVuZHMgQnVpbGRlck9iamVjdDxcImJ1aWxkZXItY29uZGl0aW9uLWdyb3VwXCIsIEJ1aWxkZXJDb25kaXRpb25Hcm91cER0bz4ge1xuICBzdGF0aWMgcmVhZG9ubHkgaXNDb25kaXRpb25Hcm91cFR5cGUgPSAodmFsdWU6IHN0cmluZyB8IHN5bWJvbCk6IHZhbHVlIGlzIENvbmRpdGlvbkdyb3VwVHlwZSA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCB2YWxpZFZhbHVlcyA9IE9iamVjdC5rZXlzKENvbmRpdGlvbkdyb3VwVHlwZSk7XG4gICAgcmV0dXJuIHZhbGlkVmFsdWVzLmluY2x1ZGVzKHZhbHVlKTtcbiAgfTtcblxuICByZWFkb25seSBvYmplY3RUeXBlOiBcImJ1aWxkZXItY29uZGl0aW9uLWdyb3VwXCIgPSBcImJ1aWxkZXItY29uZGl0aW9uLWdyb3VwXCI7XG4gIHByaXZhdGUgX3R5cGU6IENvbmRpdGlvbkdyb3VwVHlwZTtcbiAgbmFtZSA9IFwiXCI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbmRpdGlvbnM6IEFycmF5PEJ1aWxkZXJDb25kaXRpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IF92YXJpYWJsZUxpc3Q6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclZhcmlhYmxlPjtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGZyb21EdG8gPSAoZHRvOiBCdWlsZGVyQ29uZGl0aW9uR3JvdXBEdG8sIHZhcmlhYmxlTGlzdDogUmVhZG9ubHlBcnJheTxCdWlsZGVyVmFyaWFibGU+KSA9PiB7XG4gICAgcmV0dXJuIG5ldyBCdWlsZGVyQ29uZGl0aW9uR3JvdXAoZHRvLCB2YXJpYWJsZUxpc3QpO1xuICB9O1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoZHRvOiBCdWlsZGVyQ29uZGl0aW9uR3JvdXBEdG8sIHZhcmlhYmxlTGlzdDogUmVhZG9ubHlBcnJheTxCdWlsZGVyVmFyaWFibGU+KSB7XG4gICAgc3VwZXIoZHRvKTtcbiAgICB0aGlzLm5hbWUgPSBkdG8ubmFtZTtcbiAgICB0aGlzLl90eXBlID0gZHRvLnR5cGU7XG4gICAgY29uc3QgY29uZGl0aW9uTGlzdCA9IEFycmF5LmlzQXJyYXkoZHRvLmNvbmRpdGlvbnMpID8gZHRvLmNvbmRpdGlvbnMgOiBbXTtcbiAgICB0aGlzLl9jb25kaXRpb25zID0gY29uZGl0aW9uTGlzdC5tYXAoKGR0bykgPT4gQnVpbGRlckNvbmRpdGlvbi5mcm9tRHRvKGR0bywgdmFyaWFibGVMaXN0KSk7XG4gICAgdGhpcy5fdmFyaWFibGVMaXN0ID0gdmFyaWFibGVMaXN0O1xuICB9XG4gIGdldCBjb25kaXRpb25zKCk6IFJlYWRvbmx5QXJyYXk8QnVpbGRlckNvbmRpdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLl9jb25kaXRpb25zO1xuICB9XG5cbiAgZ2V0IGNvbmRpdGlvbkNvdW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jb25kaXRpb25zLmxlbmd0aDtcbiAgfVxuXG4gIGFkZENvbmRpdGlvbigpOiBCdWlsZGVyQ29uZGl0aW9uIHtcbiAgICBjb25zdCBuZXdDb25kaXRpb25zID0gQnVpbGRlckNvbmRpdGlvbi5jcmVhdGUodGhpcy5fdmFyaWFibGVMaXN0KTtcbiAgICB0aGlzLl9jb25kaXRpb25zLnB1c2gobmV3Q29uZGl0aW9ucyk7XG4gICAgcmV0dXJuIG5ld0NvbmRpdGlvbnM7XG4gIH1cblxuICByZW1vdmVDb25kaXRpb24oY29uZGl0aW9uOiBCdWlsZGVyQ29uZGl0aW9uKTogYm9vbGVhbiB7XG4gICAgLy8gdGhpcy5fY29uZGl0aW9ucy5cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2NvbmRpdGlvbnMuaW5kZXhPZihjb25kaXRpb24pO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5fY29uZGl0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY2xvbmUoKTogQnVpbGRlckNvbmRpdGlvbkdyb3VwRHRvIHtcbiAgICByZXR1cm4gdGhpcy50b0pzb24oKTtcbiAgfVxuXG4gIHRvSnNvbigpOiBCdWlsZGVyQ29uZGl0aW9uR3JvdXBEdG8ge1xuICAgIGNvbnN0IGNvbmRpdGlvbnM6IFJlYWRvbmx5QXJyYXk8QnVpbGRlckNvbmRpdGlvbkR0bz4gPSBbLi4udGhpcy5fY29uZGl0aW9ucy5tYXAoKGMpID0+IGMudG9Kc29uKCkpXTtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgY29uZGl0aW9ucyxcbiAgICAgIHR5cGU6IHRoaXMuX3R5cGUsXG4gICAgICBraW5kOiBcImNvbmRpdGlvbi1ncm91cFwiLFxuICAgIH07XG4gIH1cblxuICB0b0VuZ2luZUNvbmRpdGlvbkNvbXBsZXgoKTogQ29uZGl0aW9uLkNvbXBsZXggfCBmYWxzZSB7XG4gICAgY29uc3QgY29tcDogQ29uZGl0aW9uLkNvbXBsZXggPSB7XG4gICAgICBraW5kOiBcImNvbXBsZXgtY29uZGl0aW9uXCIsXG4gICAgICBhbGw6IFtdLFxuICAgICAgc29tZTogW10sXG4gICAgICBuYW1lOiBcIlwiLFxuICAgIH07XG4gICAgY29uc3QgY29uZGl0aW9uczogQ29uZGl0aW9uLlNpbXBsZVtdID0gW107XG4gICAgdGhpcy5jb25kaXRpb25zLmZvckVhY2goKGMpID0+IHtcbiAgICAgIGNvbnN0IG1heWJlU2ltcGxlID0gYy50b0VuZ2luZUNvbmRpdGlvbigpO1xuICAgICAgaWYgKG1heWJlU2ltcGxlKSB7XG4gICAgICAgIGNvbmRpdGlvbnMucHVzaChtYXliZVNpbXBsZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHRoaXMuX3R5cGUgPT09IFwiYWxsXCIpIHtcbiAgICAgIHJldHVybiB7IC4uLmNvbXAsIGFsbDogY29uZGl0aW9ucyB9O1xuICAgIH1cbiAgICBpZiAodGhpcy5fdHlwZSA9PT0gXCJhbnlcIikge1xuICAgICAgcmV0dXJuIHsgLi4uY29tcCwgc29tZTogY29uZGl0aW9ucyB9O1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKFwiSU5WQUxJRCBDT01QTEVYIENPTkRJVElPTi4gVE9ETyBJTVBMRU1FTlQgcmFuZ2UsIGFuZCBjb3VudC5cIik7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZ2V0IHR5cGUoKTogQ29uZGl0aW9uR3JvdXBUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxuICBzZXQgdHlwZShjb25kaXRpb25Hcm91cFR5cGU6IENvbmRpdGlvbkdyb3VwVHlwZSkge1xuICAgIGlmIChCdWlsZGVyQ29uZGl0aW9uR3JvdXAuaXNDb25kaXRpb25Hcm91cFR5cGUoY29uZGl0aW9uR3JvdXBUeXBlKSkge1xuICAgICAgdGhpcy5fdHlwZSA9IGNvbmRpdGlvbkdyb3VwVHlwZTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBFeGNsdWRlQnlQYWdlQWN0aW9uLCBFeGNsdWRlQnlUYWdBY3Rpb24gfSBmcm9tIFwiLi9SdWxlQWN0aW9uXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBNdWx0aVNlbGVjdEl0ZW08VD4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2lzU2VsZWN0ZWRJbml0aWFsbHk6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBfc2VsZWN0TGFiZWw7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfdG9vbFRpcDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zZWFyY2hTdHJpbmc7XG4gICAgcHVibGljIGlzU2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgZ2V0IHNlbGVjdExhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RMYWJlbDtcbiAgICB9XG4gICAgZ2V0IHRvb2x0aXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90b29sVGlwO1xuICAgIH1cblxuICAgIGdldCBzZWFyY2hTdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hTdHJpbmc7XG4gICAgfVxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihyZWFkb25seSBkYXRhOiBULCBpc1NlbGVjdGVkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2lzU2VsZWN0ZWRJbml0aWFsbHkgPSBpc1NlbGVjdGVkO1xuICAgICAgICB0aGlzLmlzU2VsZWN0ZWQgPSBpc1NlbGVjdGVkO1xuICAgICAgICB0aGlzLl9zZWFyY2hTdHJpbmcgPSB0aGlzLmdldFNlYXJjaFN0cmluZygpO1xuICAgICAgICB0aGlzLl90b29sVGlwID0gdGhpcy5nZXRUb29sdGlwKCk7XG4gICAgICAgIHRoaXMuX3NlbGVjdExhYmVsID0gdGhpcy5nZXRTZWxlY3RMYWJlbCgpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0U2VsZWN0TGFiZWwoKTogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRUb29sdGlwKCk6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0U2VhcmNoU3RyaW5nKCk6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEV4Y2x1ZGVCeVRhZ1NlbGVjdEl0ZW0gZXh0ZW5kcyBNdWx0aVNlbGVjdEl0ZW08RXhjbHVkZUJ5VGFnQWN0aW9uPiB7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBjcmVhdGUgPSAodGFnRGF0YTogRXhjbHVkZUJ5VGFnQWN0aW9uLCBpc1NlbGVjdGVkOiBib29sZWFuKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgRXhjbHVkZUJ5VGFnU2VsZWN0SXRlbSh0YWdEYXRhLCBpc1NlbGVjdGVkKTtcbiAgICB9O1xuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihkYXRhOiBFeGNsdWRlQnlUYWdBY3Rpb24sIGlzU2VsZWN0ZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgc3VwZXIoZGF0YSwgaXNTZWxlY3RlZCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBnZXRTZWFyY2hTdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS50YWc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFNlbGVjdExhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEudGFnICsgXCIgKFwiICsgdGhpcy5kYXRhLnBhZ2VDb3VudCArIFwiKVwiO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEudGFnICsgXCIgICh1c2VkIGluIFwiICsgdGhpcy5kYXRhLnBhZ2VDb3VudCArIFwiIHBhZ2VzKVwiO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEV4Y2x1ZGVCeVBhZ2VJZFNlbGVjdEl0ZW0gZXh0ZW5kcyBNdWx0aVNlbGVjdEl0ZW08RXhjbHVkZUJ5UGFnZUFjdGlvbj4ge1xuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlID0gKHJ1bGVBY3Rpb25QYWdlOiBFeGNsdWRlQnlQYWdlQWN0aW9uLCBpc1NlbGVjdGVkOiBib29sZWFuKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgRXhjbHVkZUJ5UGFnZUlkU2VsZWN0SXRlbShydWxlQWN0aW9uUGFnZSwgaXNTZWxlY3RlZCk7XG4gICAgfTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihkYXRhOiBFeGNsdWRlQnlQYWdlQWN0aW9uLCBpc1NlbGVjdGVkOiBib29sZWFuKSB7XG4gICAgICAgIHN1cGVyKGRhdGEsIGlzU2VsZWN0ZWQpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgZ2V0U2VhcmNoU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEucGFnZUlkICsgdGhpcy5kYXRhLm1haW5UZXh0O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRTZWxlY3RMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLnBhZ2VJZCArIFwiIChcIiArIHRoaXMuZGF0YS5wYWdlTnVtYmVyICsgXCIpXCI7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFRvb2x0aXAoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5tYWluVGV4dDtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBSdWxlSW5wdXQgfSBmcm9tIFwiLi9SdWxlSW5wdXRcIjtcbmltcG9ydCB7IEV4Y2x1ZGVCeVRhZ1NlbGVjdEl0ZW0gfSBmcm9tIFwiLi9tdWx0aS1zZWxlY3QtaXRlbVwiO1xuaW1wb3J0IHsgRXhjbHVkZUJ5VGFnQWN0aW9uIH0gZnJvbSBcIi4vUnVsZUFjdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgVGFnQWN0aW9uTWFuYWdlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2luaXRpYWxTZWxlY3Rpb246IFNldDxzdHJpbmc+O1xuICByZWFkb25seSBzZWxlY3RJdGVtczogUmVhZG9ubHlBcnJheTxFeGNsdWRlQnlUYWdTZWxlY3RJdGVtPjtcbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgdmFsaWRPcHRpb25zOiBSdWxlSW5wdXRbXCJfdGFnQWN0aW9uc1wiXSxcbiAgICByZWFkb25seSBpbml0aWFsU2VsZWN0aW9uOiBSZWFkb25seUFycmF5PHN0cmluZz4sXG4gICkge1xuICAgIHRoaXMuX2luaXRpYWxTZWxlY3Rpb24gPSBuZXcgU2V0KFsuLi5pbml0aWFsU2VsZWN0aW9uXSk7XG4gICAgdGhpcy5zZWxlY3RJdGVtcyA9IHZhbGlkT3B0aW9ucy5tYXAoKG9wdCkgPT4ge1xuICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuX2luaXRpYWxTZWxlY3Rpb24uaGFzKG9wdC50YWcpO1xuICAgICAgcmV0dXJuIEV4Y2x1ZGVCeVRhZ1NlbGVjdEl0ZW0uY3JlYXRlKG9wdCwgaXNTZWxlY3RlZCk7XG4gICAgfSk7XG4gIH1cbiAgZ2V0Q3VycmVudFNlbGVjdGlvbigpOiBSZWFkb25seUFycmF5PHN0cmluZz4ge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RJdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaXNTZWxlY3RlZCkubWFwKChpdG0pID0+IGl0bS5kYXRhLnRhZyk7XG4gICAgcmV0dXJuIHNlbGVjdGVkO1xuICB9XG5cbiAgZ2V0RW5naW5lQWN0aW9ucygpOiBSZWFkb25seUFycmF5PEV4Y2x1ZGVCeVRhZ0FjdGlvbj4ge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RJdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaXNTZWxlY3RlZCk7XG4gICAgY29uc3QgdGFnQWN0aW9ucyA9IHNlbGVjdGVkLm1hcCgocykgPT4gcy5kYXRhKTtcbiAgICByZXR1cm4gWy4uLnRhZ0FjdGlvbnNdO1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBSdWxlSW5wdXQgfSBmcm9tIFwiLi9SdWxlSW5wdXRcIjtcbmltcG9ydCB7IEV4Y2x1ZGVCeVBhZ2VJZFNlbGVjdEl0ZW0gfSBmcm9tIFwiLi9tdWx0aS1zZWxlY3QtaXRlbVwiO1xuaW1wb3J0IHsgRXhjbHVkZUJ5UGFnZUFjdGlvbiB9IGZyb20gXCIuL1J1bGVBY3Rpb25cIjtcblxuZXhwb3J0IGNsYXNzIFBhZ2VBY3Rpb25NYW5hZ2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfaW5pdGlhbFNlbGVjdGlvbjogU2V0PHN0cmluZz47XG4gIHJlYWRvbmx5IHNlbGVjdEl0ZW1zOiBSZWFkb25seUFycmF5PEV4Y2x1ZGVCeVBhZ2VJZFNlbGVjdEl0ZW0+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IHZhbGlkT3B0aW9uczogUnVsZUlucHV0W1wiX3BhZ2VJZEFjdGlvbnNcIl0sXG4gICAgcmVhZG9ubHkgaW5pdGlhbFNlbGVjdGlvbjogUmVhZG9ubHlBcnJheTxzdHJpbmc+LFxuICApIHtcbiAgICB0aGlzLl9pbml0aWFsU2VsZWN0aW9uID0gbmV3IFNldChbLi4uaW5pdGlhbFNlbGVjdGlvbl0pO1xuICAgIHRoaXMuc2VsZWN0SXRlbXMgPSB2YWxpZE9wdGlvbnMubWFwKChvcHQpID0+IHtcbiAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLl9pbml0aWFsU2VsZWN0aW9uLmhhcyhvcHQucGFnZUlkKTtcbiAgICAgIHJldHVybiBFeGNsdWRlQnlQYWdlSWRTZWxlY3RJdGVtLmNyZWF0ZShvcHQsIGlzU2VsZWN0ZWQpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q3VycmVudFNlbGVjdGlvbigpOiBSZWFkb25seUFycmF5PHN0cmluZz4ge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RJdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaXNTZWxlY3RlZCkubWFwKChpdG0pID0+IGl0bS5kYXRhLnBhZ2VJZCk7XG4gICAgcmV0dXJuIHNlbGVjdGVkO1xuICB9XG5cbiAgZ2V0RW5naW5lQWN0aW9uKCk6IFJlYWRvbmx5QXJyYXk8RXhjbHVkZUJ5UGFnZUFjdGlvbj4ge1xuICAgIGNvbnN0IHNlbGVjdEl0ZW1zID0gdGhpcy5zZWxlY3RJdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaXNTZWxlY3RlZCk7XG4gICAgY29uc3QgYWN0aW9ucyA9IHNlbGVjdEl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5kYXRhKTtcbiAgICByZXR1cm4gWy4uLmFjdGlvbnNdO1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBSdWxlSW5wdXQgfSBmcm9tIFwiLi9SdWxlSW5wdXRcIjtcbmltcG9ydCB7IEp1bXBUb1BhZ2VTZWxlY3RJdGVtIH0gZnJvbSBcIi4vU2luZ2xlU2VsZWN0SXRlbVwiO1xuXG5leHBvcnQgY2xhc3MgSnVtcFRvQWN0aW9uTWFuYWdlciB7XG4gIHJlYWRvbmx5IG9wdGlvbnM6IFJlYWRvbmx5QXJyYXk8SnVtcFRvUGFnZVNlbGVjdEl0ZW0+O1xuICBwcml2YXRlIF9zZWxlY3RlZDogSnVtcFRvUGFnZVNlbGVjdEl0ZW0gfCBmYWxzZTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB2YWxpZE9wdGlvbnM6IFJ1bGVJbnB1dFtcIl9qdW1wQWN0aW9uc1wiXSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluaXRpYWxTZWxlY3Rpb246IHN0cmluZyB8IGZhbHNlIHwgdW5kZWZpbmVkLFxuICApIHtcbiAgICB0aGlzLm9wdGlvbnMgPSB2YWxpZE9wdGlvbnMubWFwKEp1bXBUb1BhZ2VTZWxlY3RJdGVtLmNyZWF0ZSk7XG4gICAgdGhpcy5fc2VsZWN0ZWQgPSB0aGlzLmZpbmRTZWxlY3RlZChpbml0aWFsU2VsZWN0aW9uKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWQoKTogSnVtcFRvUGFnZVNlbGVjdEl0ZW0gfCBmYWxzZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xuICB9XG4gIHNldCBzZWxlY3RlZChzZWxlY3RlZDogSnVtcFRvUGFnZVNlbGVjdEl0ZW0gfCBmYWxzZSkge1xuICAgIHRoaXMuX3NlbGVjdGVkID0gdGhpcy5maW5kU2VsZWN0ZWQoc2VsZWN0ZWQpO1xuICB9XG4gIGdldFNlbGVjdGVkUGFnZUlkKCk6IHN0cmluZyB8IGZhbHNlIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQgPyB0aGlzLl9zZWxlY3RlZC5kYXRhLnBhZ2VJZCA6IGZhbHNlO1xuICB9XG4gIHByaXZhdGUgZmluZFNlbGVjdGVkKHZhbHVlOiB1bmtub3duKTogSnVtcFRvUGFnZVNlbGVjdEl0ZW0gfCBmYWxzZSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEp1bXBUb1BhZ2VTZWxlY3RJdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbmQoKHYpID0+IHYgPT09IHZhbHVlKSB8fCBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5maW5kKCh2KSA9PiB2LmRhdGEucGFnZUlkID09PSB2YWx1ZSkgfHwgZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIiwgImltcG9ydCB7IEJ1aWxkZXJDb25kaXRpb24sIHR5cGUgQnVpbGRlckNvbmRpdGlvbkR0byB9IGZyb20gXCIuL2NvbmRpdGlvbi9CdWlsZGVyLWNvbmRpdGlvblwiO1xuaW1wb3J0IHtcbiAgQnVpbGRlckNvbmRpdGlvbkdyb3VwLFxuICB0eXBlIEJ1aWxkZXJDb25kaXRpb25Hcm91cER0byxcbiAgdHlwZSBDb25kaXRpb25Hcm91cFR5cGUsXG59IGZyb20gXCIuL2NvbmRpdGlvbi9CdWlsZGVyLWNvbmRpdGlvbi1ncm91cFwiO1xuaW1wb3J0IHR5cGUgeyBSdWxlSW5wdXQgfSBmcm9tIFwiLi9SdWxlSW5wdXRcIjtcbmltcG9ydCB7IEJ1aWxkZXJPYmplY3QgfSBmcm9tIFwiLi4vQnVpbGRlck9iamVjdFwiO1xuaW1wb3J0IHsgVGFnQWN0aW9uTWFuYWdlciB9IGZyb20gXCIuL3RhZy1hY3Rpb24tbWFuYWdlclwiO1xuaW1wb3J0IHsgUGFnZUFjdGlvbk1hbmFnZXIgfSBmcm9tIFwiLi9wYWdlLWFjdGlvbi1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBKdW1wVG9BY3Rpb25NYW5hZ2VyIH0gZnJvbSBcIi4vanVtcC10by1hY3Rpb24tbWFuYWdlclwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uLCBQYWdlUXVlQ29tbWFuZCwgUGFnZVF1ZVJ1bGVzIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZGVyUnVsZUR0byB7XG4gIHJlYWRvbmx5IHR5cGU6IENvbmRpdGlvbkdyb3VwVHlwZTtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBjb25kaXRpb25zOiBSZWFkb25seUFycmF5PEJ1aWxkZXJDb25kaXRpb25EdG8gfCBCdWlsZGVyQ29uZGl0aW9uR3JvdXBEdG8+O1xuICByZWFkb25seSBleGNsdWRlVGFnczogUmVhZG9ubHlBcnJheTxzdHJpbmc+O1xuICByZWFkb25seSBleGNsdWRlUGFnZXM6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPjtcbiAgcmVhZG9ubHkganVtcFRvUGFnZTogc3RyaW5nIHwgZmFsc2U7XG59XG5leHBvcnQgY2xhc3MgQnVpbGRlclJ1bGUgZXh0ZW5kcyBCdWlsZGVyT2JqZWN0PFwiYnVpbGRlci1ydWxlXCIsIEJ1aWxkZXJSdWxlRHRvPiB7XG4gIHJlYWRvbmx5IG9iamVjdFR5cGU6IFwiYnVpbGRlci1ydWxlXCIgPSBcImJ1aWxkZXItcnVsZVwiO1xuICBwcml2YXRlIF90eXBlOiBDb25kaXRpb25Hcm91cFR5cGUgPSBcImFsbFwiO1xuICBwdWJsaWMgbmFtZSA9IFwiUnVsZSBuYW1lXCI7XG4gIC8vIHB1YmxpYyBjb3VudE51bWJlciA9IDE7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbmRpdGlvbnM6IEFycmF5PEJ1aWxkZXJDb25kaXRpb24gfCBCdWlsZGVyQ29uZGl0aW9uR3JvdXA+ID0gW107XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdGFnQWN0aW9uTWFuYWdlcjogVGFnQWN0aW9uTWFuYWdlcjtcbiAgcHJpdmF0ZSBfcGFnZUFjdGlvbk1hbmFnZXI6IFBhZ2VBY3Rpb25NYW5hZ2VyO1xuICByZWFkb25seSBqdW1wVG9BY3Rpb25NYW5hZ2VyOiBKdW1wVG9BY3Rpb25NYW5hZ2VyO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGZyb21EdG8gPSAoZHRvOiBCdWlsZGVyUnVsZUR0bywgaW5wdXQ6IFJ1bGVJbnB1dCk6IEJ1aWxkZXJSdWxlID0+IHtcbiAgICByZXR1cm4gbmV3IEJ1aWxkZXJSdWxlKGR0bywgaW5wdXQpO1xuICB9O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGR0bzogQnVpbGRlclJ1bGVEdG8sXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcnVsZUlucHV0OiBSdWxlSW5wdXQsXG4gICkge1xuICAgIHN1cGVyKGR0byk7XG4gICAgY29uc3QgY29uZGl0aW9uSW5wdXQgPSB0aGlzLl9ydWxlSW5wdXQuZ2V0Q29uZGl0aW9uSW5wdXQoKTtcbiAgICB0aGlzLm5hbWUgPSBkdG8ubmFtZSA/PyBcIlwiO1xuICAgIHRoaXMuX3R5cGUgPSBkdG8udHlwZSA/PyBcImFueVwiO1xuICAgIHRoaXMuX2NvbmRpdGlvbnMgPSBkdG8uY29uZGl0aW9ucy5yZWR1Y2U8QXJyYXk8QnVpbGRlckNvbmRpdGlvbiB8IEJ1aWxkZXJDb25kaXRpb25Hcm91cD4+KChhY2MsIGN1cnIpID0+IHtcbiAgICAgIGlmIChjdXJyLmtpbmQgPT09IFwiY29uZGl0aW9uXCIpIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uID0gQnVpbGRlckNvbmRpdGlvbi5mcm9tRHRvKGN1cnIsIGNvbmRpdGlvbklucHV0KTtcbiAgICAgICAgYWNjLnB1c2goY29uZGl0aW9uKTtcbiAgICAgIH1cbiAgICAgIGlmIChjdXJyLmtpbmQgPT09IFwiY29uZGl0aW9uLWdyb3VwXCIpIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uR3JvdXAgPSBCdWlsZGVyQ29uZGl0aW9uR3JvdXAuZnJvbUR0byhjdXJyLCBjb25kaXRpb25JbnB1dCk7XG4gICAgICAgIGFjYy5wdXNoKGNvbmRpdGlvbkdyb3VwKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10pO1xuICAgIC8vIFRPRE8gQ0hFQ0sgV0lUSCBDVVJSRU5UIE9QVElPTlMuXG4gICAgdGhpcy5fcGFnZUFjdGlvbk1hbmFnZXIgPSBuZXcgUGFnZUFjdGlvbk1hbmFnZXIoX3J1bGVJbnB1dC5leGNsdWRlQnlQYWdlSWRBY3Rpb25zLCBkdG8uZXhjbHVkZVBhZ2VzKTtcbiAgICAvLyB0aGlzLmV4Y2x1ZGVCeVBhZ2VJZER0b0xpc3QucHVzaCguLi5kdG8uZXhjbHVkZVBhZ2VzKTtcbiAgICB0aGlzLl90YWdBY3Rpb25NYW5hZ2VyID0gbmV3IFRhZ0FjdGlvbk1hbmFnZXIoX3J1bGVJbnB1dC5leGNsdWRlQnlUYWdBY3Rpb25zLCBkdG8uZXhjbHVkZVRhZ3MpO1xuXG4gICAgdGhpcy5qdW1wVG9BY3Rpb25NYW5hZ2VyID0gbmV3IEp1bXBUb0FjdGlvbk1hbmFnZXIoX3J1bGVJbnB1dC5qdW1wVG9QYWdlQWN0aW9ucywgZHRvLmp1bXBUb1BhZ2UpO1xuICB9XG5cbiAgZ2V0IGNvbmRpdGlvbnMoKTogUmVhZG9ubHlBcnJheTxCdWlsZGVyQ29uZGl0aW9uR3JvdXAgfCBCdWlsZGVyQ29uZGl0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmRpdGlvbnM7XG4gIH1cblxuICBnZXRUYWdBY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl90YWdBY3Rpb25NYW5hZ2VyLnNlbGVjdEl0ZW1zO1xuICB9XG5cbiAgZ2V0VmFsaWRQYWdlQWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFnZUFjdGlvbk1hbmFnZXIuc2VsZWN0SXRlbXM7XG4gIH1cblxuICBnZXQgY29uZGl0aW9uQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmRpdGlvbnMubGVuZ3RoO1xuICB9XG5cbiAgc2V0IHR5cGUodHlwZTogQ29uZGl0aW9uR3JvdXBUeXBlKSB7XG4gICAgaWYgKEJ1aWxkZXJDb25kaXRpb25Hcm91cC5pc0NvbmRpdGlvbkdyb3VwVHlwZSh0eXBlKSkge1xuICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3R5cGU7XG4gIH1cblxuICBkZWxldGVDb25kaXRpb24oY29uZGl0aW9uOiBCdWlsZGVyQ29uZGl0aW9uIHwgQnVpbGRlckNvbmRpdGlvbkdyb3VwKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9jb25kaXRpb25zLmluZGV4T2YoY29uZGl0aW9uKTtcbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuX2NvbmRpdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFkZENvbmRpdGlvbigpOiBCdWlsZGVyQ29uZGl0aW9uIHtcbiAgICBjb25zdCBjb25kaXRpb24gPSBCdWlsZGVyQ29uZGl0aW9uLmNyZWF0ZSh0aGlzLl9ydWxlSW5wdXQuZ2V0Q29uZGl0aW9uSW5wdXQoKSk7XG4gICAgdGhpcy5fY29uZGl0aW9ucy5wdXNoKGNvbmRpdGlvbik7XG4gICAgcmV0dXJuIGNvbmRpdGlvbjtcbiAgfVxuXG4gIGFkZENvbmRpdGlvbkdyb3VwKCk6IEJ1aWxkZXJDb25kaXRpb25Hcm91cCB7XG4gICAgY29uc3QgZHRvOiBCdWlsZGVyQ29uZGl0aW9uR3JvdXBEdG8gPSB7XG4gICAgICBraW5kOiBcImNvbmRpdGlvbi1ncm91cFwiLFxuICAgICAgbmFtZTogXCJcIixcbiAgICAgIHR5cGU6IFwiYWxsXCIsXG4gICAgICBjb25kaXRpb25zOiBbXSxcbiAgICB9O1xuICAgIGNvbnN0IG5ld0dyb3VwID0gQnVpbGRlckNvbmRpdGlvbkdyb3VwLmZyb21EdG8oZHRvLCB0aGlzLl9ydWxlSW5wdXQucXVlc3Rpb25WYXJzKTtcbiAgICB0aGlzLl9jb25kaXRpb25zLnB1c2gobmV3R3JvdXApO1xuICAgIHJldHVybiBuZXdHcm91cDtcbiAgfVxuXG4gIGNsb25lKCk6IEJ1aWxkZXJSdWxlRHRvIHtcbiAgICByZXR1cm4gdGhpcy50b0pzb24oKTtcbiAgfVxuXG4gIHRvSnNvbigpOiBCdWlsZGVyUnVsZUR0byB7XG4gICAgY29uc3QgY29uZGl0aW9ucyA9IHRoaXMuX2NvbmRpdGlvbnMubWFwKChjKSA9PiBjLnRvSnNvbigpKTtcbiAgICBjb25zdCBleGNsdWRlUGFnZXMgPSB0aGlzLl9wYWdlQWN0aW9uTWFuYWdlci5nZXRDdXJyZW50U2VsZWN0aW9uKCk7XG4gICAgY29uc3QgZXhjbHVkZVRhZ3MgPSB0aGlzLl90YWdBY3Rpb25NYW5hZ2VyLmdldEN1cnJlbnRTZWxlY3Rpb24oKTtcbiAgICBjb25zdCBqdW1wVG9QYWdlID0gdGhpcy5qdW1wVG9BY3Rpb25NYW5hZ2VyLmdldFNlbGVjdGVkUGFnZUlkKCk7XG4gICAgY29uc3QgZHRvOiBCdWlsZGVyUnVsZUR0byA9IHtcbiAgICAgIHR5cGU6IHRoaXMuX3R5cGUsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBjb25kaXRpb25zLFxuICAgICAgZXhjbHVkZVBhZ2VzLFxuICAgICAganVtcFRvUGFnZSxcbiAgICAgIGV4Y2x1ZGVUYWdzLFxuICAgIH07XG4gICAgcmV0dXJuIGR0bztcbiAgfVxuICB0b0VuZ2luZVJ1bGUoKTogUGFnZVF1ZVJ1bGVzIHtcbiAgICBjb25zdCBjb25kaXRpb25zOiBDb25kaXRpb25bXSA9IFtdO1xuICAgIHRoaXMuX2NvbmRpdGlvbnMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgaWYgKGMpIHtcbiAgICAgICAgaWYgKGMgaW5zdGFuY2VvZiBCdWlsZGVyQ29uZGl0aW9uKSB7XG4gICAgICAgICAgY29uc3Qgc2ltcGxlQ29uZGl0aW9uID0gYy50b0VuZ2luZUNvbmRpdGlvbigpO1xuICAgICAgICAgIGlmIChzaW1wbGVDb25kaXRpb24pIHtcbiAgICAgICAgICAgIGNvbmRpdGlvbnMucHVzaChzaW1wbGVDb25kaXRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYyBpbnN0YW5jZW9mIEJ1aWxkZXJDb25kaXRpb25Hcm91cCkge1xuICAgICAgICAgIGNvbnN0IGNvbXBsZXhDb25kaXRpb24gPSBjLnRvRW5naW5lQ29uZGl0aW9uQ29tcGxleCgpO1xuICAgICAgICAgIGlmIChjb21wbGV4Q29uZGl0aW9uKSBjb25kaXRpb25zLnB1c2goY29tcGxleENvbmRpdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBsZXQgYWxsOiBDb25kaXRpb25bXSA9IFtdO1xuICAgIGxldCBzb21lOiBDb25kaXRpb25bXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gXCJhbGxcIikge1xuICAgICAgYWxsID0gWy4uLmNvbmRpdGlvbnNdO1xuICAgIH1cbiAgICBjb25zdCBwYWdlUXVlQ29tbWFuZHM6IEFycmF5PFBhZ2VRdWVDb21tYW5kPiA9IFtdO1xuICAgIGNvbnN0IG1heWJlSnVtcFRvUGFnZSA9IHRoaXMuanVtcFRvQWN0aW9uTWFuYWdlci5zZWxlY3RlZDtcbiAgICBpZiAobWF5YmVKdW1wVG9QYWdlKSB7XG4gICAgICBjb25zdCBqdW1wQ29tbWFuZDogUGFnZVF1ZUNvbW1hbmQgPSB7XG4gICAgICAgIGtpbmQ6IFwiUEFHRV9RVUVfSlVNUF9UT19QQUdFX0NPTU1BTkRcIixcbiAgICAgICAgdGFyZ2V0OiBcIlBBR0VfUVVFXCIsXG4gICAgICAgIHRhcmdldElkOiBcIlBBR0VfUVVFXCIsXG4gICAgICAgIHBheWxvYWQ6IHsgcGFnZUlkOiBtYXliZUp1bXBUb1BhZ2UuZGF0YS5wYWdlSWQgfSxcbiAgICAgIH07XG4gICAgICBwYWdlUXVlQ29tbWFuZHMucHVzaChqdW1wQ29tbWFuZCk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhjbHVkZVBhZ2VCeUlkTGlzdCA9IHRoaXMuX3BhZ2VBY3Rpb25NYW5hZ2VyLmdldEVuZ2luZUFjdGlvbigpLm1hcCgoYSkgPT4gYS5wYWdlSWQpO1xuICAgIGlmIChleGNsdWRlUGFnZUJ5SWRMaXN0Lmxlbmd0aCkge1xuICAgICAgY29uc3QgY29tbWFuZDogUGFnZVF1ZUNvbW1hbmQgPSB7XG4gICAgICAgIGtpbmQ6IFwiUEFHRV9RVUVfRVhDTFVERV9CWV9QQUdFX0lEX0NPTU1BTkRcIixcbiAgICAgICAgdGFyZ2V0OiBcIlBBR0VfUVVFXCIsXG4gICAgICAgIHRhcmdldElkOiBcIlBBR0VfUVVFXCIsXG4gICAgICAgIHBheWxvYWQ6IHsgcGFnZUlkczogWy4uLmV4Y2x1ZGVQYWdlQnlJZExpc3RdIH0sXG4gICAgICB9O1xuICAgICAgcGFnZVF1ZUNvbW1hbmRzLnB1c2goY29tbWFuZCk7XG4gICAgfVxuICAgIGNvbnN0IGV4Y2x1ZGVUYWdzID0gdGhpcy5fdGFnQWN0aW9uTWFuYWdlci5nZXRFbmdpbmVBY3Rpb25zKCkubWFwKCh0YWdBKSA9PiB0YWdBLnRhZyk7XG4gICAgaWYgKGV4Y2x1ZGVUYWdzLmxlbmd0aCkge1xuICAgICAgY29uc3QgZXhjbHVkZVRhZ3NDb21tYW5kOiBQYWdlUXVlQ29tbWFuZCA9IHtcbiAgICAgICAga2luZDogXCJQQUdFX1FVRV9FWENMVURFX0JZX1RBR19DT01NQU5EXCIsXG4gICAgICAgIHRhcmdldDogXCJQQUdFX1FVRVwiLFxuICAgICAgICB0YXJnZXRJZDogXCJQQUdFX1FVRVwiLFxuICAgICAgICBwYXlsb2FkOiB7IHRhZ0lkczogWy4uLmV4Y2x1ZGVUYWdzXSB9LFxuICAgICAgfTtcbiAgICAgIHBhZ2VRdWVDb21tYW5kcy5wdXNoKGV4Y2x1ZGVUYWdzQ29tbWFuZCk7XG4gICAgfVxuXG4gICAgY29uc3QgcnVsZTogUGFnZVF1ZVJ1bGVzID0ge1xuICAgICAgZGVzY3JpcHRpb246IHRoaXMubmFtZSxcbiAgICAgIGFsbCxcbiAgICAgIHNvbWUsXG4gICAgICBvbkZhaWx1cmU6IFtdLFxuICAgICAgb25TdWNjZXNzOiBwYWdlUXVlQ29tbWFuZHMsXG4gICAgfTtcbiAgICByZXR1cm4gcnVsZTtcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQnVpbGRlclNjaGVtYUR0byB9IGZyb20gXCIuLi9CdWlsZGVyLXNjaGVtYVwiO1xuaW1wb3J0IHsgU2NoZW1hRHRvIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0VGhlbWVDb21waWxlcjxUaGVtZVNjaGVtYT4ge1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IHRoZW1lOiBUaGVtZVNjaGVtYSkge31cbiAgYWJzdHJhY3QgY29tcGlsZShzY2hlbWE6IEJ1aWxkZXJTY2hlbWFEdG8pOiBTY2hlbWFEdG87XG59XG4iLCAiaW1wb3J0IHsgRFN0YXRlLCBCb29sZWFuU3RhdGVQcm9wZXJ0eSB9IGZyb20gXCJAbWVkaWEtcXVlc3QvZW5naW5lXCI7XG5cbmV4cG9ydCBuYW1lc3BhY2UgRFN0YXRlUHJvcHMge1xuICBleHBvcnQgY29uc3QgbWVkaWFCbG9ja2VkQnlTZXF1ZW5jZSA9IG5ldyBCb29sZWFuU3RhdGVQcm9wZXJ0eShcbiAgICBcIm1lZGlhLWJsb2NrZWQtYnktYXV0b3BsYXktc2VxdWVuY2VcIixcbiAgICBmYWxzZSxcbiAgICBcIlNob3VsZCBiZSB0cnVlIGlmIHRoZSBwYWdlIGlzIGluIGEgYXV0b3BsYXktc2VxdWVuY2UuIFRoZSBhdXRvcGxheS1zZXF1ZW5jZSB3aWxsIGFsd2F5cyBibG9jayBvdGhlciBtZWRpYS5cIixcbiAgKTtcbiAgZXhwb3J0IGNvbnN0IGlucHV0QmxvY2tpbmdCeVNlcXVlbmNlID0gbmV3IEJvb2xlYW5TdGF0ZVByb3BlcnR5KFwiaW5wdXQtYmxvY2tlZC1ieS1hdXRvcGxheS1zZXF1ZW5jZVwiLCBmYWxzZSwgXCJcIik7XG4gIGV4cG9ydCBjb25zdCBtZWRpYUJsb2NrZWRCeUF1ZGlvID0gbmV3IEJvb2xlYW5TdGF0ZVByb3BlcnR5KFwibWVkaWEtYmxvY2tlZC1ieS1hdWRpb1wiLCBmYWxzZSwgXCJcIik7XG4gIGV4cG9ydCBjb25zdCBpbnB1dEJsb2NrZWRCeUF1ZGlvID0gbmV3IEJvb2xlYW5TdGF0ZVByb3BlcnR5KFwiaW5wdXQtYmxvY2tlZC1ieS1hdWRpb1wiLCBmYWxzZSwgXCJcIik7XG4gIGV4cG9ydCBjb25zdCBtZWRpYUJsb2NrZWRCeVZpZGVvID0gbmV3IEJvb2xlYW5TdGF0ZVByb3BlcnR5KFwibWVkaWEtYmxvY2tlZC1ieS12aWRlb1wiLCBmYWxzZSwgXCJcIik7XG4gIGV4cG9ydCBjb25zdCBpbnB1dEJsb2NrZWRCeVZpZGVvID0gbmV3IEJvb2xlYW5TdGF0ZVByb3BlcnR5KFxuICAgIFwiaW5wdXQtYmxvY2tlZC1ieS12aWRlb1wiLFxuICAgIGZhbHNlLFxuICAgIFwiU2hvdWxkIGJlIHRydWUgaWYgYSB2aWRlbyBpcyBwbGF5aW5nLCBhbmQgdGhpcyB2aWRlbyBpcyBzdXBwb3NlIHRvIGJsb2NrIHVzZXItaW5wdXQuXCIsXG4gICk7XG4gIGV4cG9ydCBjb25zdCB1c2VyUGF1c2VkVmlkZW8gPSBuZXcgQm9vbGVhblN0YXRlUHJvcGVydHkoXG4gICAgXCJ1c2VyLXBhdXNlZC12aWRlb1wiLFxuICAgIGZhbHNlLFxuICAgIFwiU2hvdWxkIGJlIHRydWUgaWYgdXNlciBwYXVzZWQgdGhlIHZpZGVvIGJ5IHByZXNzaW5nIHRoZSBwYXVzZS1idXR0b24uXCIsXG4gICk7XG4gIGV4cG9ydCBjb25zdCB2aWRlb0lzUGxheWluZyA9IG5ldyBCb29sZWFuU3RhdGVQcm9wZXJ0eShcbiAgICBcInZpZGVvLWlzLXBsYXlpbmdcIixcbiAgICBmYWxzZSxcbiAgICBcIlNob3VsZCBiZSB0cnVlIGlmIGFueSB2aWRlbyBpcyBwbGF5aW5nIG9uIHRoZSBwYWdlLlwiLFxuICApO1xuICBleHBvcnQgY29uc3QgYXVkaW9Jc1BsYXlpbmcgPSBuZXcgQm9vbGVhblN0YXRlUHJvcGVydHkoXG4gICAgXCJhdWRpby1pcy1wbGF5aW5nXCIsXG4gICAgZmFsc2UsXG4gICAgXCJTaG91bGQgYmUgdHJ1IGlmIGFueSBhdWRpbyBpcyBwbGF5aW5nIG9uIHBhZ2VcIixcbiAgKTtcbiAgY29uc3QgX3Byb3BzID0ge1xuICAgIGlucHV0QmxvY2tlZEJ5QXVkaW8sXG4gICAgbWVkaWFCbG9ja2VkQnlBdWRpbyxcbiAgICBpbnB1dEJsb2NraW5nQnlTZXF1ZW5jZSxcbiAgICBtZWRpYUJsb2NrZWRCeVNlcXVlbmNlLFxuICAgIGlucHV0QmxvY2tlZEJ5VmlkZW8sXG4gICAgbWVkaWFCbG9ja2VkQnlWaWRlbyxcbiAgICB1c2VyUGF1c2VkVmlkZW8sXG4gICAgdmlkZW9Jc1BsYXlpbmcsXG4gIH07XG5cbiAgY29uc3QgZGlzYWJsZUF1ZGlvSWNvblF1ZXJ5OiBEU3RhdGUuU3RhdGVRdWVyeSA9IHtcbiAgICBuYW1lOiBcImRpc2FibGUtQXVkaW9cIixcbiAgICBjb25kaXRpb246IHtcbiAgICAgIGtpbmQ6IFwiY29tcGxleC1jb25kaXRpb25cIixcbiAgICAgIG5hbWU6IFwiYXVkaW8tY29udHJvbHMtYXJlLWJsb2NrZWRcIixcbiAgICAgIHNvbWU6IFtcbiAgICAgICAgbWVkaWFCbG9ja2VkQnlTZXF1ZW5jZS5nZXRJc1RydWVDb25kaXRpb24oKSxcbiAgICAgICAgbWVkaWFCbG9ja2VkQnlBdWRpby5nZXRJc1RydWVDb25kaXRpb24oKSxcbiAgICAgICAgbWVkaWFCbG9ja2VkQnlWaWRlby5nZXRJc1RydWVDb25kaXRpb24oKSxcbiAgICAgIF0sXG4gICAgICBhbGw6IFtdLFxuICAgIH0sXG4gIH07XG4gIGNvbnN0IGhpZGVWaWRlb1BsYXlRdWVyeTogRFN0YXRlLlN0YXRlUXVlcnkgPSB7XG4gICAgbmFtZTogXCJoaWRlLXZpZGVvLXBsYXktYnV0dG9uXCIsXG4gICAgY29uZGl0aW9uOiB7XG4gICAgICBraW5kOiBcImNvbXBsZXgtY29uZGl0aW9uXCIsXG4gICAgICBuYW1lOiBcInZpZGVvLWlzLXBsYXlpbmctY29uZGl0aW9uXCIsXG4gICAgICBhbGw6IFt2aWRlb0lzUGxheWluZy5nZXRJc1RydWVDb25kaXRpb24oKV0sXG4gICAgICBzb21lOiBbXSxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IGhpZGVWaWRlb1BhdXNlUXVlcnk6IERTdGF0ZS5TdGF0ZVF1ZXJ5ID0ge1xuICAgIG5hbWU6IFwiaGlkZS12aWRlby1wYXVzZS1idXR0b25cIixcbiAgICBjb25kaXRpb246IHtcbiAgICAgIGtpbmQ6IFwiY29tcGxleC1jb25kaXRpb25cIixcbiAgICAgIG5hbWU6IFwidmlkZW8taXMtbm90LXBsYXlpbmctY29uZGl0aW9uXCIsXG4gICAgICBhbGw6IFt2aWRlb0lzUGxheWluZy5nZXRJc0ZhbHNlQ29uZGl0aW9uKCldLFxuICAgICAgc29tZTogW10sXG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBkaXNhYmxlVmlkZW9QbGF5UXVlcnk6IERTdGF0ZS5TdGF0ZVF1ZXJ5ID0ge1xuICAgIG5hbWU6IFwiZGlzYWJsZS12aWRlb1wiLFxuICAgIGNvbmRpdGlvbjoge1xuICAgICAga2luZDogXCJjb21wbGV4LWNvbmRpdGlvblwiLFxuICAgICAgbmFtZTogXCJ2aWRlby1wbGF5IHNoYWxsIGJlIGRpc2FibGVkXCIsXG4gICAgICBhbGw6IFt1c2VyUGF1c2VkVmlkZW8uZ2V0SXNGYWxzZUNvbmRpdGlvbigpXSxcbiAgICAgIHNvbWU6IFtcbiAgICAgICAgbWVkaWFCbG9ja2VkQnlTZXF1ZW5jZS5nZXRJc1RydWVDb25kaXRpb24oKSxcbiAgICAgICAgbWVkaWFCbG9ja2VkQnlBdWRpby5nZXRJc1RydWVDb25kaXRpb24oKSxcbiAgICAgICAgbWVkaWFCbG9ja2VkQnlWaWRlby5nZXRJc1RydWVDb25kaXRpb24oKSxcbiAgICAgICAgYXVkaW9Jc1BsYXlpbmcuZ2V0SXNUcnVlQ29uZGl0aW9uKCksXG4gICAgICBdLFxuICAgIH0sXG4gIH07XG4gIGNvbnN0IGRpc2FibGVVc2VySW5wdXRRdWVyeTogRFN0YXRlLlN0YXRlUXVlcnkgPSB7XG4gICAgbmFtZTogXCJkaXNhYmxlLXVzZXItaW5wdXRcIixcbiAgICBjb25kaXRpb246IHtcbiAgICAgIGtpbmQ6IFwiY29tcGxleC1jb25kaXRpb25cIixcbiAgICAgIG5hbWU6IFwiVXNlciBpbnB1dCBzaGFsbCBiZSBkaXNhYmxlZCAoUmVzcG9uc2UtYnV0dG9ucywgRm9ybUNvbnRyb2xzLi4uKVwiLFxuICAgICAgYWxsOiBbXSxcbiAgICAgIHNvbWU6IFtcbiAgICAgICAgaW5wdXRCbG9ja2VkQnlBdWRpby5nZXRJc1RydWVDb25kaXRpb24oKSxcbiAgICAgICAgaW5wdXRCbG9ja2VkQnlWaWRlby5nZXRJc1RydWVDb25kaXRpb24oKSxcbiAgICAgICAgaW5wdXRCbG9ja2luZ0J5U2VxdWVuY2UuZ2V0SXNUcnVlQ29uZGl0aW9uKCksXG4gICAgICBdLFxuICAgIH0sXG4gIH07XG4gIGV4cG9ydCBjb25zdCBfUXVlcmllcyA9IHtcbiAgICBkaXNhYmxlQXVkaW9JY29uUXVlcnksXG4gICAgZGlzYWJsZVZpZGVvUGxheVF1ZXJ5LFxuICAgIGRpc2FibGVVc2VySW5wdXRRdWVyeSxcbiAgICBoaWRlVmlkZW9QYXVzZVF1ZXJ5LFxuICAgIGhpZGVWaWRlb1BsYXlRdWVyeSxcbiAgfTtcbiAgZXhwb3J0IGNvbnN0IGFsbERlZmF1bHRQcm9wZXJ0aWVzID0gT2JqZWN0LnZhbHVlcyhfcHJvcHMpO1xuICBleHBvcnQgY29uc3QgYWxsRGVmYXVsdFF1ZXJpZXMgPSBPYmplY3QudmFsdWVzKF9RdWVyaWVzKTtcbn1cbiIsICJpbXBvcnQgeyBEQ29tbWFuZCwgRWxlbWVudENvbW1hbmQgfSBmcm9tIFwiQG1lZGlhLXF1ZXN0L2VuZ2luZVwiO1xuaW1wb3J0IHsgRFN0eWxlIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcbmltcG9ydCB7IERFbGVtZW50RHRvIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcblxuZXhwb3J0IG5hbWVzcGFjZSBUaGVtZVV0aWxzIHtcbiAgZXhwb3J0IGNvbnN0IGRpc2FibGVDbGlja0NvbW1hbmRzID0gKGVsZW1lbnRJZDogc3RyaW5nLCBzdHlsZUNoYW5nZXM6IFBhcnRpYWw8RFN0eWxlPik6IEVsZW1lbnRDb21tYW5kW10gPT4ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGtpbmQ6IFwiRUxFTUVOVF9ESVNBQkxFX0NMSUNLX0NPTU1BTkRcIixcbiAgICAgICAgdGFyZ2V0OiBcIkVMRU1FTlRcIixcbiAgICAgICAgdGFyZ2V0SWQ6IGVsZW1lbnRJZCxcbiAgICAgICAgcGF5bG9hZDoge30sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBraW5kOiBcIkVMRU1FTlRfU1RZTEVfQ09NTUFORFwiLFxuICAgICAgICB0YXJnZXQ6IFwiRUxFTUVOVFwiLFxuICAgICAgICB0YXJnZXRJZDogZWxlbWVudElkLFxuICAgICAgICBwYXlsb2FkOiB7IGNoYW5nZXM6IHN0eWxlQ2hhbmdlcyB9LFxuICAgICAgfSxcbiAgICBdO1xuICB9O1xuXG4gIGV4cG9ydCBjb25zdCBlbmFibGVDbGlja0NvbW1hbmRzID0gKGVsZW1lbnRJZDogc3RyaW5nLCBzdHlsZUNoYW5nZXM6IFBhcnRpYWw8RFN0eWxlPik6IEVsZW1lbnRDb21tYW5kW10gPT4ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGtpbmQ6IFwiRUxFTUVOVF9FTkFCTEVfQ0xJQ0tfQ09NTUFORFwiLFxuICAgICAgICB0YXJnZXQ6IFwiRUxFTUVOVFwiLFxuICAgICAgICB0YXJnZXRJZDogZWxlbWVudElkLFxuICAgICAgICBwYXlsb2FkOiB7fSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtpbmQ6IFwiRUxFTUVOVF9TVFlMRV9DT01NQU5EXCIsXG4gICAgICAgIHRhcmdldDogXCJFTEVNRU5UXCIsXG4gICAgICAgIHRhcmdldElkOiBlbGVtZW50SWQsXG4gICAgICAgIHBheWxvYWQ6IHsgY2hhbmdlczogc3R5bGVDaGFuZ2VzIH0sXG4gICAgICB9LFxuICAgIF07XG4gIH07XG4gIGV4cG9ydCBjb25zdCBoaWRlQ29tbWFuZCA9IChlbGVtZW50SWQ6IHN0cmluZyk6IEVsZW1lbnRDb21tYW5kID0+IHtcbiAgICBjb25zdCBoaWRlQ29tbWFuZDogRENvbW1hbmQgPSB7XG4gICAgICBraW5kOiBcIkVMRU1FTlRfU1RZTEVfQ09NTUFORFwiLFxuICAgICAgdGFyZ2V0OiBcIkVMRU1FTlRcIixcbiAgICAgIHRhcmdldElkOiBlbGVtZW50SWQsXG4gICAgICBwYXlsb2FkOiB7IGNoYW5nZXM6IHsgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiB9IH0sXG4gICAgfTtcbiAgICByZXR1cm4gaGlkZUNvbW1hbmQ7XG4gIH07XG4gIGV4cG9ydCBjb25zdCBzaG93Q29tbWFuZCA9IChlbGVtZW50SWQ6IHN0cmluZyk6IEVsZW1lbnRDb21tYW5kID0+IHtcbiAgICBjb25zdCBzaG93Q29tbWFuZDogRENvbW1hbmQgPSB7XG4gICAgICBraW5kOiBcIkVMRU1FTlRfU1RZTEVfQ09NTUFORFwiLFxuICAgICAgdGFyZ2V0OiBcIkVMRU1FTlRcIixcbiAgICAgIHRhcmdldElkOiBlbGVtZW50SWQsXG4gICAgICBwYXlsb2FkOiB7IGNoYW5nZXM6IHsgdmlzaWJpbGl0eTogXCJ2aXNpYmxlXCIgfSB9LFxuICAgIH07XG4gICAgcmV0dXJuIHNob3dDb21tYW5kO1xuICB9O1xuXG4gIGV4cG9ydCBjb25zdCBzcGFjZUV2ZW5seVggPSA8VCBleHRlbmRzIFBpY2s8REVsZW1lbnREdG8sIFwic3R5bGVcIj4+KFxuICAgIGl0ZW1zOiBSZWFkb25seUFycmF5PFQ+LFxuICAgIG9wdGlvbnM6IHsgc3RhcnRBdDogbnVtYmVyOyBlbmRBdDogbnVtYmVyOyBkZWZhdWx0SXRlbVdpZHRoOiBudW1iZXIgfSA9IHtcbiAgICAgIHN0YXJ0QXQ6IDAsXG4gICAgICBlbmRBdDogMTAwLFxuICAgICAgZGVmYXVsdEl0ZW1XaWR0aDogNSxcbiAgICB9LFxuICApOiBSZWFkb25seUFycmF5PFQ+ID0+IHtcbiAgICBjb25zdCBzdGFydEF0ID0gb3B0aW9ucz8uc3RhcnRBdCA/PyAwO1xuICAgIGNvbnN0IGVuZEF0ID0gb3B0aW9ucz8uZW5kQXQgPz8gMTAwO1xuICAgIGNvbnN0IHJhbmdlID0gTWF0aC5hYnMoZW5kQXQgLSBzdGFydEF0KTtcbiAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IG1hcmdpbkNvdW50ID0gaXRlbXMubGVuZ3RoICsgMTtcbiAgICBjb25zdCBkZWZhdWx0V2lkdGggPSBvcHRpb25zLmRlZmF1bHRJdGVtV2lkdGggPz8gMTUwIC8gbWFyZ2luQ291bnQ7XG5cbiAgICBsZXQgdG90YWxXaWR0aE9mRWxlbWVudHMgPSBpdGVtcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgIGNvbnN0IHcgPSBjdXJyLnN0eWxlLncgPz8gZGVmYXVsdFdpZHRoO1xuICAgICAgcmV0dXJuIHByZXYgKyB3O1xuICAgIH0sIDApO1xuXG4gICAgbGV0IGN1cnNvciA9IHN0YXJ0QXQ7XG4gICAgY29uc3QgcmVzdCA9IE1hdGgubWF4KHJhbmdlIC0gdG90YWxXaWR0aE9mRWxlbWVudHMsIDApO1xuICAgIGNvbnN0IG1hcmdpbiA9IHJlc3QgLyBtYXJnaW5Db3VudDtcblxuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGN1cnNvciA9IGN1cnNvciArIG1hcmdpbjtcbiAgICAgIGNvbnN0IHcgPSBpdGVtLnN0eWxlLncgPz8gZGVmYXVsdFdpZHRoO1xuICAgICAgY29uc3QgeCA9IGN1cnNvcjtcbiAgICAgIGN1cnNvciA9IGN1cnNvciArIHc7XG4gICAgICBpdGVtLnN0eWxlLncgPSB3O1xuICAgICAgaXRlbS5zdHlsZS54ID0geDtcbiAgICB9KTtcblxuICAgIHJldHVybiBpdGVtcztcbiAgfTtcblxuICBleHBvcnQgY29uc3QgY2VudGVyWSA9ICgpOiBQaWNrPERTdHlsZSwgXCJ5XCIgfCBcInRyYW5zZm9ybVwiPiA9PiAoe1xuICAgIHk6IDUwLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMCUsIDUwJSlcIixcbiAgfSk7XG4gIGV4cG9ydCBjb25zdCBjZW50ZXJYID0gKCk6IFBpY2s8RFN0eWxlLCBcInhcIiB8IFwidHJhbnNmb3JtXCI+ID0+ICh7XG4gICAgeDogNTAsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgtNTAlLCAwJSlcIixcbiAgfSk7XG5cbiAgZXhwb3J0IGNvbnN0IGNlbnRlclhZID0gKCk6IFBpY2s8RFN0eWxlLCBcInhcIiB8IFwieVwiIHwgXCJ0cmFuc2Zvcm1cIj4gPT4gKHtcbiAgICB4OiA1MCxcbiAgICB5OiA1MCxcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKC01MCUsIDUwJSlcIixcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgQWJzdHJhY3RUaGVtZUNvbXBpbGVyIH0gZnJvbSBcIi4vQWJzdHJhY3RUaGVtZUNvbXBpbGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJTY2hlbWFEdG8gfSBmcm9tIFwiLi4vQnVpbGRlci1zY2hlbWFcIjtcbmltcG9ydCB7IEJ1aWxkZXJTY2hlbWEgfSBmcm9tIFwiLi4vQnVpbGRlci1zY2hlbWFcIjtcbmltcG9ydCB0eXBlIHsgQnVpbGRlclBhZ2VEdG8gfSBmcm9tIFwiLi4vQnVpbGRlci1wYWdlXCI7XG5pbXBvcnQgeyBEU3RhdGVQcm9wcyB9IGZyb20gXCIuL3N0YW5kYXJkLXByb3BzXCI7XG5pbXBvcnQgeyBUaGVtZVV0aWxzIH0gZnJvbSBcIi4vdGhlbWUtdXRpbHNcIjtcbmltcG9ydCB7IERlZmF1bHRUaGVtZSwgdHlwZSBJRGVmYXVsdFRoZW1lIH0gZnJvbSBcIi4vSURlZmF1bHRUaGVtZVwiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGVyTWFpbkltYWdlRHRvIH0gZnJvbSBcIi4uL0J1aWxkZXJNYWluSW1hZ2VEdG9cIjtcbmltcG9ydCB0eXBlIHsgQnVpbGRlck1haW5WaWRlb0R0byB9IGZyb20gXCIuLi9CdWlsZGVyTWFpblZpZGVvRHRvXCI7XG5pbXBvcnQge1xuICBEQXVkaW9EdG8sXG4gIERBdXRvUGxheVNlcXVlbmNlLFxuICBEQ29tbWFuZCxcbiAgRERpdkR0byxcbiAgREVsZW1lbnREdG8sXG4gIERJbWdEdG8sXG4gIERUZXh0RHRvLFxuICBEVXRpbCxcbiAgRFZpZGVvRHRvLFxuICBGYWN0LFxuICBQYWdlRHRvLFxuICBQYWdlUXVlQ29tbWFuZCxcbiAgUnVsZSxcbiAgU2NoZW1hRHRvLFxufSBmcm9tIFwiQG1lZGlhLXF1ZXN0L2VuZ2luZVwiO1xuaW1wb3J0IHsgQXVkaW9GaWxlIH0gZnJvbSBcIi4uL21lZGlhLWZpbGVzXCI7XG5pbXBvcnQgeyBCdWlsZGVyUnVsZSB9IGZyb20gXCIuLi9ydWxlYnVpbGRlclwiO1xuXG5jb25zdCBVID0gRFV0aWw7XG5jb25zdCBnZW5lcmF0ZUVsZW1lbnRJZCA9ICgpID0+IFUucmFuZG9tU3RyaW5nKDMyKTtcbmV4cG9ydCBjbGFzcyBEZWZhdWx0VGhlbWVDb21waWxlciBleHRlbmRzIEFic3RyYWN0VGhlbWVDb21waWxlcjxJRGVmYXVsdFRoZW1lPiB7XG4gIHJlYWRvbmx5IG5hbWUgPSBcIklzcGUgZGVmYXVsdCB0aGVtZS5cIjtcbiAgcHJpdmF0ZSByZWFkb25seSBUQUcgPSBcIlsgREVGQVVMVF9USEVNRV9DT01QSUxFUiBdOiBcIjtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoRGVmYXVsdFRoZW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcGlsZVJ1bGVzKHNvdXJjZTogQnVpbGRlclNjaGVtYUR0byk6IFJ1bGU8UGFnZVF1ZUNvbW1hbmQsIG5ldmVyPltdIHtcbiAgICBjb25zdCBidWlsZGVyU2NoZW1hID0gQnVpbGRlclNjaGVtYS5mcm9tSnNvbihzb3VyY2UpO1xuICAgIGNvbnN0IHJ1bGVJbnB1dCA9IGJ1aWxkZXJTY2hlbWEuZ2V0UnVsZUlucHV0KCk7XG4gICAgY29uc3QgcGFnZVF1ZVJ1bGVzOiBSdWxlPFBhZ2VRdWVDb21tYW5kLCBuZXZlcj5bXSA9IFtdO1xuICAgIHNvdXJjZS5ydWxlcy5mb3JFYWNoKChydWxlKSA9PiB7XG4gICAgICBjb25zdCBlbmdpbmVSdWxlID0gQnVpbGRlclJ1bGUuZnJvbUR0byhydWxlLCBydWxlSW5wdXQpLnRvRW5naW5lUnVsZSgpO1xuICAgICAgaWYgKCFSdWxlLmlzRW1wdHkoZW5naW5lUnVsZSkpIHtcbiAgICAgICAgcGFnZVF1ZVJ1bGVzLnB1c2goZW5naW5lUnVsZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmdyb3VwQ29sbGFwc2VkKHRoaXMuVEFHLCBcIlRocm93cyBhd2F5IGVtcHR5IHJ1bGUuXCIpO1xuICAgICAgICBjb25zb2xlLmxvZyhydWxlKTtcbiAgICAgICAgY29uc29sZS5sb2cocnVsZUlucHV0KTtcbiAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBwYWdlUXVlUnVsZXM7XG4gIH1cblxuICBjb21waWxlKHNvdXJjZTogQnVpbGRlclNjaGVtYUR0byk6IFNjaGVtYUR0byB7XG4gICAgY29uc3QgcGFnZXMgPSBzb3VyY2UucGFnZXMubWFwKChwKSA9PiB0aGlzLmNvbXBpbGVQYWdlKHAsIHNvdXJjZS5wcmVmaXgpKTtcbiAgICBjb25zdCBydWxlcyA9IHRoaXMuY29tcGlsZVJ1bGVzKHNvdXJjZSk7XG4gICAgLy8gY29uc29sZS5sb2cocGFnZXMubWFwKChwKSA9PiBwLnRhZ3MpKTtcblxuICAgIGNvbnN0IGR0bzogU2NoZW1hRHRvID0ge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiBzb3VyY2UuYmFja2dyb3VuZENvbG9yLFxuICAgICAgYmFzZUhlaWdodDogc291cmNlLmJhc2VIZWlnaHQsXG4gICAgICBiYXNlV2lkdGg6IHNvdXJjZS5iYXNlV2lkdGgsXG4gICAgICBpZDogc291cmNlLmlkLFxuICAgICAgcGFnZVNlcXVlbmNlczogW10sXG4gICAgICBwYWdlcyxcbiAgICAgIHByZWRlZmluZWRGYWN0czogW10sXG4gICAgICBydWxlcyxcbiAgICAgIHN0YXRlRnJvbUV2ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICBvbkV2ZW50OiBcIlZJREVPX0VOREVEX0VWRU5UXCIsXG4gICAgICAgICAgdGhlbkV4ZWN1dGU6IFtcbiAgICAgICAgICAgIERTdGF0ZVByb3BzLnVzZXJQYXVzZWRWaWRlby5nZXRTZXRGYWxzZUNvbW1hbmQoKSxcbiAgICAgICAgICAgIERTdGF0ZVByb3BzLm1lZGlhQmxvY2tlZEJ5VmlkZW8uZ2V0U2V0RmFsc2VDb21tYW5kKCksXG4gICAgICAgICAgICBEU3RhdGVQcm9wcy52aWRlb0lzUGxheWluZy5nZXRTZXRGYWxzZUNvbW1hbmQoKSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb25FdmVudDogXCJWSURFT19QQVVTRURfRVZFTlRcIixcbiAgICAgICAgICB0aGVuRXhlY3V0ZTogW1xuICAgICAgICAgICAgRFN0YXRlUHJvcHMudmlkZW9Jc1BsYXlpbmcuZ2V0U2V0RmFsc2VDb21tYW5kKCksXG4gICAgICAgICAgICBEU3RhdGVQcm9wcy5tZWRpYUJsb2NrZWRCeVZpZGVvLmdldFNldEZhbHNlQ29tbWFuZCgpLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvbkV2ZW50OiBcIlZJREVPX1BMQVlfRVZFTlRcIixcbiAgICAgICAgICB0aGVuRXhlY3V0ZTogW1xuICAgICAgICAgICAgRFN0YXRlUHJvcHMudmlkZW9Jc1BsYXlpbmcuZ2V0U2V0VHJ1ZUNvbW1hbmQoKSxcbiAgICAgICAgICAgIERTdGF0ZVByb3BzLnVzZXJQYXVzZWRWaWRlby5nZXRTZXRGYWxzZUNvbW1hbmQoKSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb25FdmVudDogXCJBVURJT19QTEFZX0VWRU5UXCIsXG4gICAgICAgICAgdGhlbkV4ZWN1dGU6IFtcbiAgICAgICAgICAgIERTdGF0ZVByb3BzLmF1ZGlvSXNQbGF5aW5nLmdldFNldFRydWVDb21tYW5kKCksXG4gICAgICAgICAgICBEU3RhdGVQcm9wcy5tZWRpYUJsb2NrZWRCeUF1ZGlvLmdldFNldFRydWVDb21tYW5kKCksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG9uRXZlbnQ6IFwiQVVESU9fRU5ERURfRVZFTlRcIixcbiAgICAgICAgICB0aGVuRXhlY3V0ZTogW1xuICAgICAgICAgICAgRFN0YXRlUHJvcHMuYXVkaW9Jc1BsYXlpbmcuZ2V0U2V0RmFsc2VDb21tYW5kKCksXG4gICAgICAgICAgICBEU3RhdGVQcm9wcy5tZWRpYUJsb2NrZWRCeUF1ZGlvLmdldFNldEZhbHNlQ29tbWFuZCgpLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvbkV2ZW50OiBcIkFVRElPX1BBVVNFRF9FVkVOVFwiLFxuICAgICAgICAgIHRoZW5FeGVjdXRlOiBbXG4gICAgICAgICAgICBEU3RhdGVQcm9wcy5hdWRpb0lzUGxheWluZy5nZXRTZXRGYWxzZUNvbW1hbmQoKSxcbiAgICAgICAgICAgIERTdGF0ZVByb3BzLm1lZGlhQmxvY2tlZEJ5QXVkaW8uZ2V0U2V0RmFsc2VDb21tYW5kKCksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBzdGF0ZVByb3BzOiBEU3RhdGVQcm9wcy5hbGxEZWZhdWx0UHJvcGVydGllcy5tYXAoKGRlZikgPT4gZGVmLnByb3BEZWZpbml0aW9uKSxcbiAgICAgIHN0YXRlUXVlcmllczogRFN0YXRlUHJvcHMuYWxsRGVmYXVsdFF1ZXJpZXMsXG4gICAgfTtcbiAgICByZXR1cm4gZHRvO1xuICB9XG4gIHByaXZhdGUgY29tcGlsZVBhZ2UocGFnZTogQnVpbGRlclBhZ2VEdG8sIG1vZHVsZVByZWZpeDogc3RyaW5nKTogUGFnZUR0byB7XG4gICAgLy8gY29uc29sZS5sb2coX21vZHVsZUlkKTtcbiAgICAvLyBjb25zdCB0ZXh0RWxlbWVudFxuICAgIGNvbnN0IHRhZ3MgPSBwYWdlLnRhZ3MgPz8gW107XG4gICAgY29uc3QgeyBuZXh0QnV0dG9uLCBtYWluVGV4dCwgaWQsIG1haW5NZWRpYSwgX3R5cGUgfSA9IHBhZ2U7XG4gICAgY29uc3QgZWxlbWVudHM6IERFbGVtZW50RHRvW10gPSBbXTtcbiAgICBjb25zdCBhdWRpb1Jlc291cmNlc0R0bzogREF1ZGlvRHRvW10gPSBbXTtcbiAgICBjb25zdCB2aWRlb1Jlc291cmNlczogRFZpZGVvRHRvW10gPSBbXTtcbiAgICBsZXQgbWFpblZpZGVvOiBEVmlkZW9EdG8gfCBmYWxzZSA9IGZhbHNlO1xuICAgIGxldCBtYWluVGV4dEF1ZGlvOiBEQXVkaW9EdG8gfCBmYWxzZSA9IGZhbHNlO1xuXG4gICAgaWYgKHBhZ2UubWFpblRleHQuYXVkaW9GaWxlKSB7XG4gICAgICBjb25zdCByZXMgPSB0aGlzLmNvbXBpbGVNYWluVGV4dEF1ZGlvKHBhZ2UubWFpblRleHQuYXVkaW9GaWxlKTtcbiAgICAgIGVsZW1lbnRzLnB1c2goLi4ucmVzLmVsZW1lbnRzKTtcbiAgICAgIGF1ZGlvUmVzb3VyY2VzRHRvLnB1c2gocmVzLmF1ZGlvRHRvKTtcbiAgICAgIG1haW5UZXh0QXVkaW8gPSByZXMuYXVkaW9EdG87XG4gICAgfVxuXG4gICAgaWYgKF90eXBlID09PSBcInF1ZXN0aW9uXCIpIHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlSWQgPSBtb2R1bGVQcmVmaXggKyBcIl9cIiArIHBhZ2UucHJlZml4O1xuICAgICAgY29uc3QgeyBidXR0b25zLCBxdWVzdGlvbiB9ID0gdGhpcy5jb21waWxlUXVlc3Rpb24oaWQsIHBhZ2UsIHZhcmlhYmxlSWQpO1xuICAgICAgLy8gY29uc29sZS5sb2cocXVlc3Rpb24pO1xuICAgICAgZWxlbWVudHMucHVzaCguLi5idXR0b25zLCBxdWVzdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKF90eXBlID09PSBcImluZm8tcGFnZVwiKSB7XG4gICAgICBjb25zdCBpbmZvVGV4dCA9IG1haW5UZXh0LnRleHQ7XG4gICAgICBjb25zdCBuZXh0QnRuRWxlbWVudDogREVsZW1lbnREdG8gPSB0aGlzLmNvbXBpbGVCdXR0b24oaWQsIG5leHRCdXR0b24sIHtcbiAgICAgICAga2luZDogXCJuZXh0LWJ1dHRvblwiLFxuICAgICAgfSk7XG4gICAgICBjb25zdCB0ZXh0U3R5bGUgPSBtYWluTWVkaWEgPyBEZWZhdWx0VGhlbWUubWFpblRleHQud2l0aE1lZGlhLnRleHQuY3NzIDogRGVmYXVsdFRoZW1lLm1haW5UZXh0Lm5vTWVkaWEudGV4dC5jc3M7XG4gICAgICBjb25zdCBlbGVtZW50OiBERWxlbWVudER0byA9IHtcbiAgICAgICAgdGV4dDogaW5mb1RleHQsXG4gICAgICAgIF90YWc6IFwicFwiLFxuICAgICAgICBpZDogZ2VuZXJhdGVFbGVtZW50SWQoKSxcbiAgICAgICAgc3R5bGU6IHRleHRTdHlsZSxcbiAgICAgIH07XG4gICAgICBlbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgICAgZWxlbWVudHMucHVzaChuZXh0QnRuRWxlbWVudCk7XG4gICAgfVxuICAgIGlmIChtYWluTWVkaWEgJiYgbWFpbk1lZGlhLmtpbmQgPT09IFwibWFpbi1pbWFnZVwiKSB7XG4gICAgICBjb25zdCBtYWluSW1hZ2VFbGVtZW50ID0gdGhpcy5jb21waWxlSW1hZ2UobWFpbk1lZGlhKTtcbiAgICAgIGVsZW1lbnRzLnB1c2gobWFpbkltYWdlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgaWYgKG1haW5NZWRpYSAmJiBtYWluTWVkaWEua2luZCA9PT0gXCJtYWluLXZpZGVvXCIpIHtcbiAgICAgIGNvbnN0IHZpZGVvT3V0cHV0ID0gdGhpcy5jb21waWxlVmlkZW8obWFpbk1lZGlhKTtcbiAgICAgIG1haW5WaWRlbyA9IHZpZGVvT3V0cHV0LnZpZGVvRHRvO1xuICAgICAgZWxlbWVudHMucHVzaCguLi52aWRlb091dHB1dC5lbGVtZW50cyk7XG4gICAgICB2aWRlb1Jlc291cmNlcy5wdXNoKHZpZGVvT3V0cHV0LnZpZGVvRHRvKTtcbiAgICB9XG4gICAgY29uc3QgbWFpblZpZGVvSWQgPSBtYWluVmlkZW8gPyBtYWluVmlkZW8uaWQgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgYXV0b1BsYXlTZXF1ZW5jZTogREF1dG9QbGF5U2VxdWVuY2UgPSB7XG4gICAgICBibG9ja1VzZXJJbnB1dDogdHJ1ZSxcbiAgICAgIGlkOiBcIjFcIixcbiAgICAgIGl0ZW1zOiBbXSxcbiAgICAgIHN0YXJ0Q29tbWFuZHM6IFtcbiAgICAgICAgRFN0YXRlUHJvcHMubWVkaWFCbG9ja2VkQnlTZXF1ZW5jZS5nZXRTZXRUcnVlQ29tbWFuZCgpLFxuICAgICAgICBEU3RhdGVQcm9wcy5pbnB1dEJsb2NraW5nQnlTZXF1ZW5jZS5nZXRTZXRUcnVlQ29tbWFuZCgpLFxuICAgICAgXSxcbiAgICAgIGVuZENvbW1hbmRzOiBbXG4gICAgICAgIERTdGF0ZVByb3BzLm1lZGlhQmxvY2tlZEJ5U2VxdWVuY2UuZ2V0U2V0RmFsc2VDb21tYW5kKCksXG4gICAgICAgIERTdGF0ZVByb3BzLmlucHV0QmxvY2tpbmdCeVNlcXVlbmNlLmdldFNldEZhbHNlQ29tbWFuZCgpLFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgaWYgKG1haW5WaWRlbyAmJiBwYWdlLm1haW5NZWRpYSAmJiBwYWdlLm1haW5NZWRpYS5raW5kID09PSBcIm1haW4tdmlkZW9cIiAmJiBwYWdlLm1haW5NZWRpYS5tb2RlID09PSBcImF1dG9wbGF5XCIpIHtcbiAgICAgIGF1dG9QbGF5U2VxdWVuY2UuaXRlbXMucHVzaCh7XG4gICAgICAgIGtpbmQ6IFwiYXV0b3BsYXktdmlkZW9cIixcbiAgICAgICAgdmlkZW9JZDogbWFpblZpZGVvLmlkLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG1haW5UZXh0QXVkaW8gJiYgcGFnZS5tYWluVGV4dC5hdXRvcGxheSkge1xuICAgICAgYXV0b1BsYXlTZXF1ZW5jZS5pdGVtcy5wdXNoKHtcbiAgICAgICAga2luZDogXCJhdXRvcGxheS1hdWRpb1wiLFxuICAgICAgICBhdWRpb0lkOiBtYWluVGV4dEF1ZGlvLmlkLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFnZUR0bzogUGFnZUR0byA9IHtcbiAgICAgIGF1ZGlvOiBhdWRpb1Jlc291cmNlc0R0byxcbiAgICAgIGF1dG9QbGF5U2VxdWVuY2U6IGF1dG9QbGF5U2VxdWVuY2UsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwicmVkXCIsXG4gICAgICBlbGVtZW50cyxcbiAgICAgIGlkLFxuICAgICAgbWFpblZpZGVvSWQsXG4gICAgICB0YWdzOiBbLi4udGFnc10sXG4gICAgICB2aWRlbzogdmlkZW9SZXNvdXJjZXMsXG4gICAgfTtcbiAgICByZXR1cm4gcGFnZUR0bztcbiAgfVxuXG4gIHByaXZhdGUgY29tcGlsZUltYWdlKGltYWdlOiBCdWlsZGVyTWFpbkltYWdlRHRvKSB7XG4gICAgY29uc3QgaW1nOiBESW1nRHRvID0ge1xuICAgICAgX3RhZzogXCJpbWdcIixcbiAgICAgIGlkOiBpbWFnZS5maWxlLmlkLFxuICAgICAgc3R5bGU6IHRoaXMudGhlbWUuaW1hZ2Uuc3R5bGUsXG4gICAgICB1cmw6IGltYWdlLmZpbGUuZG93bmxvYWRVcmwsXG4gICAgfTtcbiAgICByZXR1cm4gaW1nO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21waWxlTWFpblRleHRBdWRpbyhhdWRpb0ZpbGU6IEF1ZGlvRmlsZSk6IHtcbiAgICBhdWRpb0R0bzogREF1ZGlvRHRvO1xuICAgIGVsZW1lbnRzOiBERWxlbWVudER0b1tdO1xuICB9IHtcbiAgICBjb25zdCB0ID0gdGhpcy50aGVtZS5tYWluVGV4dDtcbiAgICBjb25zdCBhdWRpb0lkID0gYXVkaW9GaWxlLmlkO1xuICAgIGNvbnN0IGljb25VcmwgPVxuICAgICAgXCJodHRwczovL2ZpcmViYXNlc3RvcmFnZS5nb29nbGVhcGlzLmNvbS92MC9iL2lzcGUtYmFja2VuZC1kZXYuYXBwc3BvdC5jb20vby9wdWJsaWMtYXNzZXRzJTJGdm9sdW1lX3VwLTI0cHguc3ZnP2FsdD1tZWRpYSZ0b2tlbj01NTFiZDBhNi1hNTE1LTRmODctYTI0NS1kYTQzM2Y0ODMzZjlcIjtcblxuICAgIGNvbnN0IGJ1dHRvbklkID0gVS5yYW5kb21TdHJpbmcoMzApO1xuICAgIGNvbnN0IHBsYXlNYWluVGV4dEF1ZGlvOiBESW1nRHRvID0ge1xuICAgICAgX3RhZzogXCJpbWdcIixcbiAgICAgIGlkOiBidXR0b25JZCxcbiAgICAgIHVybDogaWNvblVybCxcbiAgICAgIHN0eWxlOiB7IC4uLnQud2l0aE1lZGlhLmF1ZGlvLmNzcyB9LFxuICAgICAgb25DbGljazogW1xuICAgICAgICB7XG4gICAgICAgICAga2luZDogXCJBVURJT19QTEFZX0NPTU1BTkRcIixcbiAgICAgICAgICB0YXJnZXQ6IFwiQVVESU9cIixcbiAgICAgICAgICB0YXJnZXRJZDogYXVkaW9JZCxcbiAgICAgICAgICBwYXlsb2FkOiB7IHZvbHVtZTogMSB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIG9uU3RhdGVDaGFuZ2U6IFtcbiAgICAgICAge1xuICAgICAgICAgIHF1ZXJ5TmFtZTogRFN0YXRlUHJvcHMuX1F1ZXJpZXMuZGlzYWJsZUF1ZGlvSWNvblF1ZXJ5Lm5hbWUsXG4gICAgICAgICAgd2hlblRydWU6IFsuLi5UaGVtZVV0aWxzLmRpc2FibGVDbGlja0NvbW1hbmRzKGJ1dHRvbklkLCB0LndpdGhNZWRpYS5hdWRpby5jc3NEaXNhYmxlZCldLFxuICAgICAgICAgIHdoZW5GYWxzZTogWy4uLlRoZW1lVXRpbHMuZW5hYmxlQ2xpY2tDb21tYW5kcyhidXR0b25JZCwgdC53aXRoTWVkaWEuYXVkaW8uY3NzRW5hYmxlZCldLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICAgIGNvbnN0IGF1ZGlvRHRvOiBEQXVkaW9EdG8gPSB7XG4gICAgICBfdGFnOiBcImF1ZGlvXCIsXG4gICAgICAvLyBldmVudEhhbmRsZXJzOiBbXSxcbiAgICAgIGlkOiBhdWRpb0ZpbGUuaWQsXG4gICAgICB1cmw6IGF1ZGlvRmlsZS5kb3dubG9hZFVybCxcbiAgICB9O1xuICAgIHJldHVybiB7IGF1ZGlvRHRvLCBlbGVtZW50czogW3BsYXlNYWluVGV4dEF1ZGlvXSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb21waWxlVmlkZW8odmlkZW86IEJ1aWxkZXJNYWluVmlkZW9EdG8pIHtcbiAgICBjb25zdCB0ID0gdGhpcy50aGVtZS52aWRlb1BsYXllcjtcbiAgICBjb25zdCB2aWRlb0lkID0gdmlkZW8uZmlsZS5pZDtcbiAgICBjb25zdCBwbGF5QnV0dG9uSWQgPSBcInBsYXktYnRuLWZvclwiICsgdmlkZW9JZDtcbiAgICBjb25zdCBwYXVzZUJ1dHRvbklkID0gXCJwYXVzZS1idG4tZm9yXCIgKyB2aWRlb0lkO1xuICAgIGNvbnN0IGVsZW1lbnRzOiBERWxlbWVudER0b1tdID0gW107XG4gICAgY29uc3QgdmlkZW9EdG86IERWaWRlb0R0byA9IHtcbiAgICAgIF90YWc6IFwidmlkZW9cIixcbiAgICAgIGlkOiB2aWRlby5maWxlLmlkLFxuICAgICAgc3R5bGU6IHQudmlkZW9FbGVtZW50LmNzcyxcbiAgICAgIHVybDogdmlkZW8uZmlsZS5kb3dubG9hZFVybCxcbiAgICB9O1xuICAgIGNvbnN0IHBsYXlCdG46IERJbWdEdG8gPSB7XG4gICAgICBpZDogcGxheUJ1dHRvbklkLFxuICAgICAgX3RhZzogXCJpbWdcIixcbiAgICAgIHVybDogdC5wbGF5QnV0dG9uLmljb25VcmwsXG4gICAgICBzdHlsZTogeyAuLi50LnBsYXlCdXR0b24uY3NzLCAuLi50LnBsYXlCdXR0b24uY3NzRW5hYmxlZCB9LFxuICAgICAgb25DbGljazogW1xuICAgICAgICB7XG4gICAgICAgICAga2luZDogXCJWSURFT19QTEFZX0NPTU1BTkRcIixcbiAgICAgICAgICB0YXJnZXQ6IFwiVklERU9cIixcbiAgICAgICAgICB0YXJnZXRJZDogdmlkZW9JZCxcbiAgICAgICAgICBwYXlsb2FkOiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gVE9ETyBDaGVjayBpZiB0aGlzIHZpZGVvIHNoYWxsIGJsb2NrIG90aGVyIG1lZGlhIGZpcnN0P1xuICAgICAgICBEU3RhdGVQcm9wcy5tZWRpYUJsb2NrZWRCeVZpZGVvLmdldFNldFRydWVDb21tYW5kKCksXG4gICAgICAgIERTdGF0ZVByb3BzLnVzZXJQYXVzZWRWaWRlby5nZXRTZXRGYWxzZUNvbW1hbmQoKSxcbiAgICAgIF0sXG4gICAgICBvblN0YXRlQ2hhbmdlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBxdWVyeU5hbWU6IERTdGF0ZVByb3BzLl9RdWVyaWVzLmRpc2FibGVWaWRlb1BsYXlRdWVyeS5uYW1lLFxuICAgICAgICAgIHdoZW5UcnVlOiBbLi4uVGhlbWVVdGlscy5kaXNhYmxlQ2xpY2tDb21tYW5kcyhwbGF5QnV0dG9uSWQsIHQucGxheUJ1dHRvbi5jc3NEaXNhYmxlZCldLFxuICAgICAgICAgIHdoZW5GYWxzZTogWy4uLlRoZW1lVXRpbHMuZW5hYmxlQ2xpY2tDb21tYW5kcyhwbGF5QnV0dG9uSWQsIHQucGxheUJ1dHRvbi5jc3NFbmFibGVkKV0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBxdWVyeU5hbWU6IERTdGF0ZVByb3BzLl9RdWVyaWVzLmhpZGVWaWRlb1BsYXlRdWVyeS5uYW1lLFxuICAgICAgICAgIHdoZW5UcnVlOiBbVGhlbWVVdGlscy5oaWRlQ29tbWFuZChwbGF5QnV0dG9uSWQpXSxcbiAgICAgICAgICB3aGVuRmFsc2U6IFtUaGVtZVV0aWxzLnNob3dDb21tYW5kKHBsYXlCdXR0b25JZCldLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICAgIGNvbnN0IHBhdXNlQnRuOiBESW1nRHRvID0ge1xuICAgICAgaWQ6IHBhdXNlQnV0dG9uSWQsXG4gICAgICBfdGFnOiBcImltZ1wiLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgLi4udC5wYXVzZUJ1dHRvbi5jc3MsXG4gICAgICAgIHZpc2liaWxpdHk6IFwiaGlkZGVuXCIsXG4gICAgICAgIC4uLnQucGF1c2VCdXR0b24uY3NzRW5hYmxlZCxcbiAgICAgIH0sXG4gICAgICB1cmw6IHQucGF1c2VCdXR0b24uaWNvblVybCxcbiAgICAgIG9uQ2xpY2s6IFtcbiAgICAgICAge1xuICAgICAgICAgIGtpbmQ6IFwiVklERU9fUEFVU0VfQ09NTUFORFwiLFxuICAgICAgICAgIHRhcmdldDogXCJWSURFT1wiLFxuICAgICAgICAgIHRhcmdldElkOiB2aWRlb0lkLFxuICAgICAgICAgIHBheWxvYWQ6IHt9LFxuICAgICAgICB9LFxuICAgICAgICBEU3RhdGVQcm9wcy5tZWRpYUJsb2NrZWRCeVZpZGVvLmdldFNldEZhbHNlQ29tbWFuZCgpLFxuICAgICAgICBEU3RhdGVQcm9wcy51c2VyUGF1c2VkVmlkZW8uZ2V0U2V0VHJ1ZUNvbW1hbmQoKSxcbiAgICAgIF0sXG4gICAgICBvblN0YXRlQ2hhbmdlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBxdWVyeU5hbWU6IERTdGF0ZVByb3BzLl9RdWVyaWVzLmhpZGVWaWRlb1BhdXNlUXVlcnkubmFtZSxcbiAgICAgICAgICB3aGVuVHJ1ZTogW1RoZW1lVXRpbHMuaGlkZUNvbW1hbmQocGF1c2VCdXR0b25JZCldLFxuICAgICAgICAgIHdoZW5GYWxzZTogW1RoZW1lVXRpbHMuc2hvd0NvbW1hbmQocGF1c2VCdXR0b25JZCldLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICAgIGVsZW1lbnRzLnB1c2gocGxheUJ0bik7XG4gICAgZWxlbWVudHMucHVzaChwYXVzZUJ0bik7XG4gICAgcmV0dXJuIHsgdmlkZW9EdG8sIGVsZW1lbnRzIH07XG4gIH1cbiAgcHJpdmF0ZSBjb21waWxlUXVlc3Rpb24oXG4gICAgcGFnZUlkOiBzdHJpbmcsXG4gICAgcGFnZTogQnVpbGRlclBhZ2VEdG8sXG4gICAgdmFyaWFibGVJZDogc3RyaW5nLFxuICApOiB7XG4gICAgcXVlc3Rpb246IERUZXh0RHRvO1xuICAgIGJ1dHRvbnM6IEREaXZEdG9bXTtcbiAgfSB7XG4gICAgLy8gVE9ETyBSRUZBQ1RPUkUgREVGQVVMVCBRVUVTVElPTiBUTyAtIChSRU1PVkUgVVNFIFRFWFQxKVxuICAgIC8vIGNvbnNvbGUubG9nKHBhZ2UpO1xuICAgIGNvbnN0IHEgPSBwYWdlLmRlZmF1bHRRdWVzdGlvbjtcbiAgICBjb25zdCB0ZXh0ID0gcGFnZS5tYWluVGV4dC50ZXh0O1xuICAgIGNvbnN0IHF1ZXN0aW9uU3R5bGUgPSBwYWdlLm1haW5NZWRpYVxuICAgICAgPyBEZWZhdWx0VGhlbWUubWFpblRleHQud2l0aE1lZGlhLnRleHQuY3NzXG4gICAgICA6IERlZmF1bHRUaGVtZS5tYWluVGV4dC5ub01lZGlhLnRleHQuY3NzO1xuICAgIGNvbnN0IHF1ZXN0aW9uOiBEVGV4dER0byA9IHtcbiAgICAgIF90YWc6IFwicFwiLFxuICAgICAgdGV4dCxcbiAgICAgIGV2ZW50SGFuZGxlcnM6IFtdLFxuICAgICAgaWQ6IFUucmFuZG9tU3RyaW5nKDMwKSxcbiAgICAgIG9uQ2xpY2s6IFtdLFxuICAgICAgb25TdGF0ZUNoYW5nZTogW10sXG4gICAgICBzdHlsZTogcXVlc3Rpb25TdHlsZSxcbiAgICB9O1xuICAgIGNvbnN0IGJ1dHRvbnMgPSBxLm9wdGlvbnMubWFwKChvKSA9PiB7XG4gICAgICBjb25zdCBidG5zID0gdGhpcy5jb21waWxlQnV0dG9uKHBhZ2VJZCwgbywge1xuICAgICAgICBraW5kOiBcInJlc3BvbnNlLWJ1dHRvblwiLFxuICAgICAgICBxdWVzdGlvbklkOiB2YXJpYWJsZUlkLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gYnRucztcbiAgICB9KTtcbiAgICBUaGVtZVV0aWxzLnNwYWNlRXZlbmx5WChidXR0b25zKTtcbiAgICByZXR1cm4geyBxdWVzdGlvbiwgYnV0dG9ucyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb21waWxlQnV0dG9uKFxuICAgIHBhZ2VJZDogc3RyaW5nLFxuICAgIGJ1dHRvbkR0bzogQnVpbGRlclBhZ2VEdG9bXCJuZXh0QnV0dG9uXCJdLFxuICAgIG9wdGlvbnM6IHsga2luZDogXCJyZXNwb25zZS1idXR0b25cIjsgcXVlc3Rpb25JZDogc3RyaW5nIH0gfCB7IGtpbmQ6IFwibmV4dC1idXR0b25cIiB9LFxuICApIHtcbiAgICBjb25zdCBmYWN0c0NvbGxlY3RlZDogRmFjdFtdID0gW107XG4gICAgY29uc3QgeyBpZCwgdmFsdWUsIGxhYmVsIH0gPSBidXR0b25EdG87XG5cbiAgICBjb25zdCB7IGRpdiwgdGV4dDEgfSA9IERlZmF1bHRUaGVtZS5yZXNwb25zZUJ1dHRvbnM7XG4gICAgaWYgKG9wdGlvbnMua2luZCA9PT0gXCJyZXNwb25zZS1idXR0b25cIikge1xuICAgICAgY29uc3QgZmFjdDogRmFjdCA9IHtcbiAgICAgICAga2luZDogXCJudW1lcmljLWZhY3RcIixcbiAgICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIHJlZmVyZW5jZUlkOiBvcHRpb25zLnF1ZXN0aW9uSWQsXG4gICAgICAgIHJlZmVyZW5jZUxhYmVsOiBcIlF1ZXN0aW9uSWQ6IFwiICsgb3B0aW9ucy5xdWVzdGlvbklkLFxuICAgICAgfTtcbiAgICAgIGZhY3RzQ29sbGVjdGVkLnB1c2goZmFjdCk7XG4gICAgfVxuXG4gICAgY29uc3Qgb25DbGlja0hhbmRsZXI6IERDb21tYW5kID0ge1xuICAgICAga2luZDogXCJFTkdJTkVfTEVBVkVfUEFHRV9DT01NQU5EXCIsXG4gICAgICB0YXJnZXQ6IFwiRU5HSU5FXCIsXG4gICAgICB0YXJnZXRJZDogXCJFTkdJTkVcIixcbiAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgcGFnZUlkLFxuICAgICAgICBmYWN0c0NvbGxlY3RlZCxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBidG46IEREaXZEdG8gPSB7XG4gICAgICBpZCxcbiAgICAgIF90YWc6IFwiZGl2XCIsXG4gICAgICBjaGlsZHJlbjogW1xuICAgICAgICB7XG4gICAgICAgICAgX3RhZzogXCJwXCIsXG4gICAgICAgICAgaWQ6IFUucmFuZG9tU3RyaW5nKDMwKSxcbiAgICAgICAgICB0ZXh0OiBsYWJlbCxcbiAgICAgICAgICBzdHlsZTogdGV4dDEsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgb25TdGF0ZUNoYW5nZTogW1xuICAgICAgICB7XG4gICAgICAgICAgcXVlcnlOYW1lOiBEU3RhdGVQcm9wcy5fUXVlcmllcy5kaXNhYmxlVXNlcklucHV0UXVlcnkubmFtZSxcbiAgICAgICAgICB3aGVuRmFsc2U6IFsuLi5UaGVtZVV0aWxzLmVuYWJsZUNsaWNrQ29tbWFuZHMoaWQsIGRpdi5jc3NFbmFibGVkKV0sXG4gICAgICAgICAgd2hlblRydWU6IFsuLi5UaGVtZVV0aWxzLmRpc2FibGVDbGlja0NvbW1hbmRzKGlkLCBkaXYuY3NzRGlzYWJsZWQpXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBzdHlsZTogeyAuLi5kaXYuY3NzLCAuLi5kaXYuY3NzRW5hYmxlZCB9LFxuICAgICAgb25DbGljazogW29uQ2xpY2tIYW5kbGVyXSxcbiAgICB9O1xuICAgIGlmIChvcHRpb25zLmtpbmQgPT09IFwibmV4dC1idXR0b25cIikge1xuICAgICAgYnRuLnN0eWxlLnggPSA1MDtcbiAgICAgIGJ0bi5zdHlsZS55ID0gODtcbiAgICAgIGJ0bi5zdHlsZS50cmFuc2Zvcm0gPSBcInRyYW5zbGF0ZSgtNTAlLCAwJSlcIjtcbiAgICB9XG4gICAgcmV0dXJuIGJ0bjtcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQnVpbGRlclBhZ2VEdG8sIEJ1aWxkZXJQYWdlVHlwZSB9IGZyb20gXCIuL0J1aWxkZXItcGFnZVwiO1xuaW1wb3J0IHsgQnVpbGRlclBhZ2UgfSBmcm9tIFwiLi9CdWlsZGVyLXBhZ2VcIjtcbmltcG9ydCB7IFJ1bGVJbnB1dCB9IGZyb20gXCIuL3J1bGVidWlsZGVyL1J1bGVJbnB1dFwiO1xuaW1wb3J0IHR5cGUgeyBRdWVzdGlvblZhcmlhYmxlIH0gZnJvbSBcIi4vcnVsZWJ1aWxkZXIvUnVsZVZhcmlhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbVZhcmlhYmxlIH0gZnJvbSBcIi4vcnVsZWJ1aWxkZXJcIjtcbmltcG9ydCB0eXBlIHsgRXhjbHVkZUJ5UGFnZUFjdGlvbiwgRXhjbHVkZUJ5VGFnQWN0aW9uLCBKdW1wVG9QYWdlQWN0aW9uIH0gZnJvbSBcIi4vcnVsZWJ1aWxkZXJcIjtcbmltcG9ydCB0eXBlIHsgQnVpbGRlclRhZ0R0byB9IGZyb20gXCIuL0J1aWxkZXJUYWdcIjtcbmltcG9ydCB7IEJ1aWxkZXJUYWcsIFRhZ0NvbGxlY3Rpb24gfSBmcm9tIFwiLi9CdWlsZGVyVGFnXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJSdWxlRHRvIH0gZnJvbSBcIi4vcnVsZWJ1aWxkZXJcIjtcbmltcG9ydCB7IEJ1aWxkZXJSdWxlIH0gZnJvbSBcIi4vcnVsZWJ1aWxkZXJcIjtcbmltcG9ydCB7IERlZmF1bHRUaGVtZUNvbXBpbGVyIH0gZnJvbSBcIi4vdGhlbWUvZGVmYXVsdC10aGVtZS1jb21waWxlclwiO1xuaW1wb3J0IHsgSW1hZ2VGaWxlIH0gZnJvbSBcIi4vbWVkaWEtZmlsZXNcIjtcbmltcG9ydCB7IFNjaGVtYUR0bywgRFV0aWwsIFBhZ2VJRCwgU2NoZW1hSUQgfSBmcm9tIFwiQG1lZGlhLXF1ZXN0L2VuZ2luZVwiO1xuaW1wb3J0IHsgUGFnZVByZWZpeCwgU2NoZW1hUHJlZml4LCBTY2hlbWFQcmVmaXhWYWx1ZSB9IGZyb20gXCIuL3ByZWZpeFwiO1xuY29uc3QgVSA9IERVdGlsO1xuXG5jbGFzcyBQcmltaXRpdmVXcmFwcGVyPFQ+IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfdmFsdWU6IFQpIHt9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxufVxuXG4vLyB0eXBlIFNjaGVtYUhhc2ggPSBzdHJpbmcgJiB7IF9fTUQ1X19IQVNIOiB0cnVlIH07XG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJTY2hlbWFEdG8ge1xuICByZWFkb25seSBpZDogU2NoZW1hSUQ7XG4gIHJlYWRvbmx5IHByZWZpeDogU2NoZW1hUHJlZml4VmFsdWU7XG4gIHJlYWRvbmx5IG1haW5JbWFnZTogSW1hZ2VGaWxlIHwgZmFsc2U7XG4gIHJlYWRvbmx5IGJhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhZ2VzOiBCdWlsZGVyUGFnZUR0b1tdO1xuICByZWFkb25seSBiYXNlSGVpZ2h0OiBudW1iZXI7XG4gIHJlYWRvbmx5IGJhc2VXaWR0aDogbnVtYmVyO1xuICByZWFkb25seSBydWxlczogUmVhZG9ubHlBcnJheTxCdWlsZGVyUnVsZUR0bz47XG4gIHJlYWRvbmx5IHRhZ3M6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclRhZ0R0bz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hQnVpbGRPdXRwdXQge1xuICBzY2hlbWE6IFNjaGVtYUR0bztcbiAgY29kZWJvb2s6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHNjaGVtYUNvbmZpZzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkZXJTY2hlbWEge1xuICBwcml2YXRlIHJlYWRvbmx5IF9wcmVmaXg6IFNjaGVtYVByZWZpeDtcbiAgYmFzZUhlaWdodCA9IDEzMDA7XG4gIGJhc2VXaWR0aCA9IDEwMjQ7XG4gIGJhY2tncm91bmRDb2xvciA9IFwiIzAwMDAwMFwiO1xuICBwYWdlczogQnVpbGRlclBhZ2VbXSA9IFtdO1xuICBtYWluSW1hZ2U6IEltYWdlRmlsZSB8IGZhbHNlID0gZmFsc2U7XG4gIHByaXZhdGUgX3J1bGVzOiBCdWlsZGVyUnVsZVtdID0gW107XG4gIGdldCBydWxlcygpOiBSZWFkb25seUFycmF5PEJ1aWxkZXJSdWxlPiB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9ydWxlc107XG4gIH1cblxuICBnZXQgcHJlZml4KCk6IFNjaGVtYVByZWZpeFZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5fcHJlZml4LnZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdGFnQ29sbGVjdGlvbjogVGFnQ29sbGVjdGlvbiA9IFRhZ0NvbGxlY3Rpb24uY3JlYXRlKCk7XG4gIGdldCB0YWdzKCk6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclRhZz4ge1xuICAgIHJldHVybiBbLi4udGhpcy5fdGFnQ29sbGVjdGlvbl07XG4gIH1cbiAgcHVibGljIHN0YXRpYyBjcmVhdGUoaWQ6IFNjaGVtYUlELCBuYW1lOiBzdHJpbmcsIHByZWZpeDogU2NoZW1hUHJlZml4VmFsdWUpIHtcbiAgICBjb25zdCBzY2hlbWFQcmVmaXggPSBTY2hlbWFQcmVmaXguY2FzdE9yQ3JlYXRlUmFuZG9tKHByZWZpeCk7XG4gICAgcmV0dXJuIG5ldyBCdWlsZGVyU2NoZW1hKGlkLCBuYW1lLCBzY2hlbWFQcmVmaXgpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBmcm9tSnNvbihkdG86IEJ1aWxkZXJTY2hlbWFEdG8pOiBCdWlsZGVyU2NoZW1hIHtcbiAgICBjb25zdCBzY2hlbWFQcmVmaXggPSBTY2hlbWFQcmVmaXguY2FzdE9yQ3JlYXRlUmFuZG9tKGR0by5wcmVmaXgpO1xuICAgIGNvbnN0IHNjaGVtYSA9IG5ldyBCdWlsZGVyU2NoZW1hKGR0by5pZCwgZHRvLm5hbWUsIHNjaGVtYVByZWZpeCk7XG4gICAgY29uc3QgcGFnZXMgPSBkdG8ucGFnZXMubWFwKEJ1aWxkZXJQYWdlLmZyb21Kc29uKTtcbiAgICBzY2hlbWEuX3RhZ0NvbGxlY3Rpb24uaW5pdChkdG8udGFncyk7XG4gICAgc2NoZW1hLmJhY2tncm91bmRDb2xvciA9IGR0by5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgc2NoZW1hLmJhc2VIZWlnaHQgPSBkdG8uYmFzZUhlaWdodDtcbiAgICBzY2hlbWEuYmFzZVdpZHRoID0gZHRvLmJhc2VXaWR0aDtcbiAgICBzY2hlbWEucGFnZXMgPSBwYWdlcztcbiAgICBzY2hlbWEuYmFja2dyb3VuZENvbG9yID0gZHRvLmJhY2tncm91bmRDb2xvcjtcbiAgICBzY2hlbWEubWFpbkltYWdlID0gZHRvLm1haW5JbWFnZSA/PyBmYWxzZTtcbiAgICBjb25zdCBydWxlc0R0byA9IGR0by5ydWxlcyA/PyBbXTtcbiAgICBjb25zdCBydWxlSW5wdXQgPSBzY2hlbWEuZ2V0UnVsZUlucHV0KCk7XG4gICAgc2NoZW1hLl9ydWxlcyA9IHJ1bGVzRHRvLm1hcCgocikgPT4gQnVpbGRlclJ1bGUuZnJvbUR0byhyLCBydWxlSW5wdXQpKTtcbiAgICByZXR1cm4gc2NoZW1hO1xuICB9XG5cbiAgdG9Kc29uKCk6IEJ1aWxkZXJTY2hlbWFEdG8ge1xuICAgIGNvbnN0IHBhZ2VzID0gdGhpcy5wYWdlcy5tYXAoKHApID0+IHAudG9Kc29uKCkpO1xuICAgIGNvbnN0IHRhZ3MgPSB0aGlzLl90YWdDb2xsZWN0aW9uLnRvSnNvbigpO1xuICAgIGNvbnN0IHJ1bGVzID0gdGhpcy5fcnVsZXMubWFwKChydWxlKSA9PiBydWxlLnRvSnNvbigpKTtcblxuICAgIGNvbnN0IGR0bzogQnVpbGRlclNjaGVtYUR0byA9IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBiYXNlSGVpZ2h0OiB0aGlzLmJhc2VIZWlnaHQsXG4gICAgICBiYXNlV2lkdGg6IHRoaXMuYmFzZVdpZHRoLFxuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBwYWdlcyxcbiAgICAgIHJ1bGVzLFxuICAgICAgdGFncyxcbiAgICAgIG1haW5JbWFnZTogdGhpcy5tYWluSW1hZ2UsXG4gICAgICBwcmVmaXg6IHRoaXMucHJlZml4LFxuICAgIH07XG4gICAgcmV0dXJuIGR0bztcbiAgfVxuICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBpZDogU2NoZW1hSUQsXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyxcbiAgICBfcHJlZml4OiBTY2hlbWFQcmVmaXgsXG4gICkge1xuICAgIHRoaXMuX3ByZWZpeCA9IF9wcmVmaXg7XG4gIH1cblxuICBhZGRQYWdlKHR5cGU6IEJ1aWxkZXJQYWdlVHlwZSwgYXRJbmRleCA9IC0xKTogQnVpbGRlclBhZ2Uge1xuICAgIGNvbnN0IHBhZ2VQcmVmaXggPSBQYWdlUHJlZml4LmNyZWF0ZSgpO1xuICAgIGNvbnN0IG5ld1BhZ2UgPSBCdWlsZGVyUGFnZS5jcmVhdGUodHlwZSwgcGFnZVByZWZpeC52YWx1ZSk7XG4gICAgaWYgKGF0SW5kZXggPj0gMCAmJiBhdEluZGV4IDwgdGhpcy5wYWdlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMucGFnZXMuc3BsaWNlKGF0SW5kZXgsIDAsIG5ld1BhZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhZ2VzLnB1c2gobmV3UGFnZSk7XG4gICAgfVxuICAgIHJldHVybiBuZXdQYWdlO1xuICB9XG5cbiAgaW5zZXJ0UGFnZShwYWdlOiBCdWlsZGVyUGFnZSwgYXRJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW5zZXJ0UGFnZUF0SW5kZXgocGFnZSwgYXRJbmRleCk7XG4gIH1cblxuICBwcml2YXRlIGluc2VydFBhZ2VBdEluZGV4KHBhZ2U6IEJ1aWxkZXJQYWdlLCBhdEluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBpc1ZhbGlkSW5kZXggPSBVLmlzSW5SYW5nZSgwLCB0aGlzLnBhZ2VzLmxlbmd0aCAtIDEpO1xuICAgIGlmICghaXNWYWxpZEluZGV4KGF0SW5kZXgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGV4aXN0cyA9ICEhdGhpcy5wYWdlcy5maW5kKChwKSA9PiBwLmlkID09PSBwYWdlLmlkKTtcbiAgICBpZiAoZXhpc3RzKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMucGFnZXMuc3BsaWNlKGF0SW5kZXgsIDAsIHBhZ2UpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYWRkUnVsZSgpIHtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMuZ2V0UnVsZUlucHV0KCk7XG4gICAgY29uc3QgY291bnQgPSB0aGlzLl9ydWxlcy5sZW5ndGggKyAxO1xuICAgIGNvbnN0IG5hbWUgPSBcIlJ1bGUtbnVtYmVyOiBcIiArIGNvdW50O1xuICAgIGNvbnN0IHJ1bGUgPSBCdWlsZGVyUnVsZS5mcm9tRHRvKFxuICAgICAge1xuICAgICAgICBjb25kaXRpb25zOiBbXSxcbiAgICAgICAgdHlwZTogXCJhbGxcIixcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZXhjbHVkZVRhZ3M6IFtdLFxuICAgICAgICBqdW1wVG9QYWdlOiBmYWxzZSxcbiAgICAgICAgZXhjbHVkZVBhZ2VzOiBbXSxcbiAgICAgIH0sXG4gICAgICBpbnB1dCxcbiAgICApO1xuICAgIHRoaXMuX3J1bGVzLnB1c2gocnVsZSk7XG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cbiAgZGVsZXRlUnVsZShydWxlOiBCdWlsZGVyUnVsZSkge1xuICAgIHRoaXMuX3J1bGVzID0gdGhpcy5fcnVsZXMuZmlsdGVyKChyKSA9PiByICE9PSBydWxlKTtcbiAgfVxuXG4gIG1vdmVQYWdlKHBhZ2U6IEJ1aWxkZXJQYWdlLCB0b0luZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMucGFnZXMuaW5kZXhPZihwYWdlKTtcbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGlzVmFsaWRJbmRleCA9IFUuaXNJblJhbmdlKDAsIHRoaXMucGFnZXMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKCFpc1ZhbGlkSW5kZXgodG9JbmRleCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coJ01vdmluZyBmcm9tIDonICsgaW5kZXggKyAnIHRvOiAnICsgdG9JbmRleCk7XG4gICAgdGhpcy5wYWdlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMucGFnZXMuc3BsaWNlKHRvSW5kZXgsIDAsIHBhZ2UpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZGVsZXRlUGFnZShwYWdlOiBCdWlsZGVyUGFnZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZpbHRlcmVkID0gdGhpcy5wYWdlcy5maWx0ZXIoKHApID0+IHAgIT09IHBhZ2UpO1xuICAgIGNvbnN0IGRpZERlbGV0ZSA9IGZpbHRlcmVkLmxlbmd0aCA9PT0gdGhpcy5wYWdlcy5sZW5ndGggLSAxO1xuICAgIHRoaXMucGFnZXMgPSBmaWx0ZXJlZDtcbiAgICByZXR1cm4gZGlkRGVsZXRlO1xuICB9XG5cbiAgcmVldmFsdWF0ZVJ1bGVzKCkge1xuICAgIGNvbnNvbGUubG9nKFwiUmVldmFsdWF0aW9uZyBydWxlc0lucHV0XCIpO1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5nZXRSdWxlSW5wdXQoKTtcbiAgICBjb25zdCBydWxlc0R0byA9IHRoaXMuX3J1bGVzLm1hcCgocikgPT4gci50b0pzb24oKSk7XG4gICAgdGhpcy5fcnVsZXMgPSBydWxlc0R0by5tYXAoKGR0bykgPT4gQnVpbGRlclJ1bGUuZnJvbUR0byhkdG8sIGlucHV0KSk7XG4gIH1cblxuICBnZXRSdWxlSW5wdXQoKTogUnVsZUlucHV0IHtcbiAgICBjb25zdCBxVmFyczogUXVlc3Rpb25WYXJpYWJsZVtdID0gW107XG4gICAgY29uc3QgY1ZhcnM6IEN1c3RvbVZhcmlhYmxlW10gPSBbXTtcbiAgICBjb25zdCBwYWdlSWRBY3Rpb25zOiBFeGNsdWRlQnlQYWdlQWN0aW9uW10gPSBbXTtcbiAgICBjb25zdCB0YWdBY3Rpb25zOiBFeGNsdWRlQnlUYWdBY3Rpb25bXSA9IHRoaXMudGFncy5tYXAoKHQpID0+IHtcbiAgICAgIGNvbnN0IHRhZyA9IHQudGFnVGV4dDtcbiAgICAgIGNvbnN0IHBhZ2VDb3VudCA9IHRoaXMucGFnZXMucmVkdWNlKChjb3VudCwgY3VycikgPT4ge1xuICAgICAgICByZXR1cm4gY3Vyci50YWdzLmluY2x1ZGVzKHRhZykgPyBjb3VudCArIDEgOiBjb3VudDtcbiAgICAgIH0sIDApO1xuICAgICAgY29uc3QgZXhjbHVkZUJ5VGFnRHRvOiBFeGNsdWRlQnlUYWdBY3Rpb24gPSB7XG4gICAgICAgIGtpbmQ6IFwiZXhjbHVkZS1ieS10YWdcIixcbiAgICAgICAgcGFnZUNvdW50LFxuICAgICAgICB0YWcsXG4gICAgICAgIGRlc2NyaXB0aW9uOiB0LnRhZ0Rlc2NyaXB0aW9uLFxuICAgICAgfTtcbiAgICAgIHJldHVybiBleGNsdWRlQnlUYWdEdG87XG4gICAgfSk7XG4gICAgY29uc3QganVtcEFjdGlvbnM6IEp1bXBUb1BhZ2VBY3Rpb25bXSA9IFtdO1xuICAgIGNvbnN0IHByZWZpeCA9IHRoaXMucHJlZml4O1xuICAgIHRoaXMucGFnZXMuZm9yRWFjaCgocGFnZSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHBhZ2VWYXJpYWJsZXMgPSBwYWdlLmdldFF1ZXN0aW9uVmFyaWFibGVzKHRoaXMuX3ByZWZpeCwgaW5kZXgpO1xuICAgICAgcVZhcnMucHVzaCguLi5wYWdlVmFyaWFibGVzKTtcbiAgICAgIGNvbnN0IG1haW5UZXh0ID0gcGFnZS5tYWluVGV4dC50ZXh0O1xuICAgICAgY29uc3QganVtcEFjdGlvbjogSnVtcFRvUGFnZUFjdGlvbiA9IHtcbiAgICAgICAga2luZDogXCJqdW1wLXRvLXBhZ2VcIixcbiAgICAgICAgcGFnZUlkOiBwYWdlLmlkLFxuICAgICAgICBwYWdlTnVtYmVyOiBpbmRleCxcbiAgICAgICAgbWFpblRleHQ6IHBhZ2UubWFpblRleHQudGV4dCxcbiAgICAgIH07XG4gICAgICBjb25zdCBleGNsdWRlUGFnZUFjdGlvbjogRXhjbHVkZUJ5UGFnZUFjdGlvbiA9IHtcbiAgICAgICAga2luZDogXCJleGNsdWRlLWJ5LXBhZ2VJZFwiLFxuICAgICAgICBwYWdlSWQ6IHBhZ2UuaWQsXG4gICAgICAgIHBhZ2VOdW1iZXI6IGluZGV4LFxuICAgICAgICBtYWluVGV4dCxcbiAgICAgIH07XG4gICAgICBqdW1wQWN0aW9ucy5wdXNoKGp1bXBBY3Rpb24pO1xuICAgICAgcGFnZUlkQWN0aW9ucy5wdXNoKGV4Y2x1ZGVQYWdlQWN0aW9uKTtcbiAgICB9KTtcbiAgICBjb25zdCBydWxlSW5wdXQgPSBuZXcgUnVsZUlucHV0KHFWYXJzLCBjVmFycywgcGFnZUlkQWN0aW9ucywgdGFnQWN0aW9ucywganVtcEFjdGlvbnMpO1xuXG4gICAgcmV0dXJuIHJ1bGVJbnB1dDtcbiAgfVxuXG4gIGRlbGV0ZVRhZ3ModGFnczogUmVhZG9ubHlBcnJheTxCdWlsZGVyVGFnPikge1xuICAgIHRoaXMuX3RhZ0NvbGxlY3Rpb24uZGVsZXRlQWxsKHRhZ3MpO1xuICB9XG5cbiAgYWRkVGFnKGJ1aWxkZXJUYWc6IEJ1aWxkZXJUYWcpIHtcbiAgICB0aGlzLl90YWdDb2xsZWN0aW9uLmFkZChidWlsZGVyVGFnKTtcbiAgfVxuXG4gIGNvbXBpbGUoKTogU2NoZW1hQnVpbGRPdXRwdXQge1xuICAgIGNvbnN0IG1vZHVsZUR0byA9IHRoaXMudG9Kc29uKCk7XG4gICAgY29uc3QgaW1wID0gbmV3IERlZmF1bHRUaGVtZUNvbXBpbGVyKCk7XG4gICAgY29uc3Qgc2NoZW1hID0gaW1wLmNvbXBpbGUobW9kdWxlRHRvKTtcblxuICAgIHJldHVybiB7IGNvZGVib29rOiB7fSwgc2NoZW1hLCBzY2hlbWFDb25maWc6IHt9IH07XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBCdWlsZGVyT2JqZWN0SWQsIEJ1aWxkZXJPYmplY3QgfSBmcm9tICcuL0J1aWxkZXJPYmplY3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJUZXh0RHRvIHtcbiAgcmVhZG9ubHkgaWQ6IEJ1aWxkZXJPYmplY3RJZC5UZXh0SUQ7XG4gIHRleHQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICB0cmFuc2xhdGlvblJlcXVpcmVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgQnVpbGRlclRleHQgZXh0ZW5kcyBCdWlsZGVyT2JqZWN0PCdidWlsZGVyLXRleHQnLCBCdWlsZGVyVGV4dER0bz4ge1xuICByZWFkb25seSBvYmplY3RUeXBlID0gJ2J1aWxkZXItdGV4dCc7XG4gIGlkOiBCdWlsZGVyT2JqZWN0SWQuVGV4dElEO1xuICB0ZXh0ID0gJyc7XG4gIG5hbWUgPSAnJztcbiAgdHJhbnNsYXRlUmVxdWlyZWQgPSBmYWxzZTtcbiAgLy8gYXVkaW86IHtpZDogQn1cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihkdG86IEJ1aWxkZXJUZXh0RHRvKSB7XG4gICAgc3VwZXIoZHRvKTtcbiAgICB0aGlzLmlkID0gZHRvLmlkO1xuICAgIHRoaXMudHJhbnNsYXRlUmVxdWlyZWQgPSBkdG8udHJhbnNsYXRpb25SZXF1aXJlZDtcbiAgICB0aGlzLm5hbWUgPSBkdG8ubmFtZTtcbiAgICB0aGlzLnRleHQgPSBkdG8udGV4dDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlKG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGlkID0gQnVpbGRlck9iamVjdElkLnRleHRJZCgpO1xuICAgIGNvbnN0IGR0bzogQnVpbGRlclRleHREdG8gPSB7XG4gICAgICBpZCxcbiAgICAgIG5hbWUsXG4gICAgICB0ZXh0OiAnJyxcbiAgICAgIHRyYW5zbGF0aW9uUmVxdWlyZWQ6IGZhbHNlXG4gICAgfTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBCdWlsZGVyVGV4dChkdG8pO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGZyb21Kc29uKGR0bzogQnVpbGRlclRleHREdG8pIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBCdWlsZGVyVGV4dChkdG8pO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIGNsb25lKCk6IEJ1aWxkZXJUZXh0RHRvIHtcbiAgICBjb25zdCBuZXdJZCA9IEJ1aWxkZXJPYmplY3RJZC50ZXh0SWQoKTtcbiAgICBjb25zdCBkdG8gPSB0aGlzLnRvSnNvbigpO1xuICAgIGNvbnN0IHdpdGhOZXdJZDogQnVpbGRlclRleHREdG8gPSB7IC4uLmR0bywgaWQ6IG5ld0lkIH07XG4gICAgcmV0dXJuIHdpdGhOZXdJZDtcbiAgfVxuXG4gIHRvSnNvbigpOiBCdWlsZGVyVGV4dER0byB7XG4gICAgY29uc3QgZHRvOiBCdWlsZGVyVGV4dER0byA9IHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgdGV4dDogdGhpcy50ZXh0LFxuICAgICAgdHJhbnNsYXRpb25SZXF1aXJlZDogdGhpcy50cmFu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TyxJQUFJO0FBQ2hCLFNBQUssT0FBTyxJQUFJO0FBQUEsRUFDbEI7QUFBQSxFQUVBLE9BQWMsT0FBTyxNQUFjO0FBQ2pDLFVBQU0sS0FBSyxnQkFBZ0IsT0FBTztBQUNsQyxVQUFNLE1BQXNCO0FBQUEsTUFDMUI7QUFBQSxNQUNBO0FBQUEsTUFDQSxNQUFNO0FBQUEsTUFDTixxQkFBcUI7QUFBQSxJQUN2QjtBQUNBLFVBQU0sV0FBVyxJQUFJLGFBQVksR0FBRztBQUNwQyxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0EsT0FBYyxTQUFTLEtBQXFCO0FBQzFDLFVBQU0sV0FBVyxJQUFJLGFBQVksR0FBRztBQUNwQyxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBRUEsUUFBd0I7QUFDdEIsVUFBTSxRQUFRLGdCQUFnQixPQUFPO0FBQ3JDLFVBQU0sTUFBTSxLQUFLLE9BQU87QUFDeEIsVUFBTSxZQUE0QixFQUFFLEdBQUcsS0FBSyxJQUFJLE1BQU07QUFDdEQsV0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUVBLFNBQXlCO0FBQ3ZCLFVBQU0sTUFBc0I7QUFBQSxNQUMxQixJQUFJLEtBQUs7QUFBQSxNQUNULE1BQU0sS0FBSztBQUFBLE1BQ1gsTUFBTSxLQUFLO0FBQUEsTUFDWCxxQkFBcUIsS0FBSztBQUFBLElBQzVCO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFDRjsiLAogICJuYW1lcyI6IFsiQnVpbGRlck9iamVjdElkIiwgIkJ1aWxkZXJPcHRpb25UaGVtZSIsICJEVXRpbCIsICJVIiwgIkRVdGlsIiwgImxhYmVsIiwgIkJ1aWxkZXJPcGVyYXRvciIsICJ2IiwgIm9wIiwgImR0byIsICJEU3RhdGVQcm9wcyIsICJUaGVtZVV0aWxzIiwgImhpZGVDb21tYW5kIiwgInNob3dDb21tYW5kIiwgIkRVdGlsIiwgIlUiLCAiRFV0aWwiLCAiRFV0aWwiLCAiVSIsICJEVXRpbCIsICJVIl0KfQo=
|