@coralogix/rum-cli 1.1.13 → 1.1.14
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/proto-models/com/coralogix/rum/v2/audit_log.js +4 -2
- package/dist/proto-models/com/coralogix/rum/v2/chunk.js +40 -20
- package/dist/proto-models/com/coralogix/rum/v2/file.js +14 -9
- package/dist/proto-models/com/coralogix/rum/v2/rum_service.js +26 -16
- package/dist/proto-models/com/coralogix/rum/v2/rum_source_map_service.js +18 -10
- package/dist/proto-models/com/coralogix/rum/v2/source_code_file_mapping.js +35 -15
- package/dist/proto-models/google/protobuf/descriptor.js +366 -273
- package/package.json +2 -2
- package/proto-models/com/coralogix/rum/v2/audit_log.ts +3 -2
- package/proto-models/com/coralogix/rum/v2/chunk.ts +42 -25
- package/proto-models/com/coralogix/rum/v2/file.ts +16 -12
- package/proto-models/com/coralogix/rum/v2/rum_service.ts +25 -17
- package/proto-models/com/coralogix/rum/v2/rum_source_map_service.ts +17 -11
- package/proto-models/com/coralogix/rum/v2/source_code_file_mapping.ts +34 -17
- package/proto-models/google/protobuf/descriptor.ts +381 -300
- package/protoset.bin +0 -0
|
@@ -547,12 +547,10 @@ exports.FileDescriptorSet = {
|
|
|
547
547
|
return { file: Array.isArray(object === null || object === void 0 ? void 0 : object.file) ? object.file.map((e) => exports.FileDescriptorProto.fromJSON(e)) : [] };
|
|
548
548
|
},
|
|
549
549
|
toJSON(message) {
|
|
550
|
+
var _a;
|
|
550
551
|
const obj = {};
|
|
551
|
-
if (message.file) {
|
|
552
|
-
obj.file = message.file.map((e) =>
|
|
553
|
-
}
|
|
554
|
-
else {
|
|
555
|
-
obj.file = [];
|
|
552
|
+
if ((_a = message.file) === null || _a === void 0 ? void 0 : _a.length) {
|
|
553
|
+
obj.file = message.file.map((e) => exports.FileDescriptorProto.toJSON(e));
|
|
556
554
|
}
|
|
557
555
|
return obj;
|
|
558
556
|
},
|
|
@@ -761,56 +759,47 @@ exports.FileDescriptorProto = {
|
|
|
761
759
|
};
|
|
762
760
|
},
|
|
763
761
|
toJSON(message) {
|
|
762
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
764
763
|
const obj = {};
|
|
765
|
-
message.name !==
|
|
766
|
-
|
|
767
|
-
if (message.dependency) {
|
|
768
|
-
obj.dependency = message.dependency.map((e) => e);
|
|
764
|
+
if (message.name !== "") {
|
|
765
|
+
obj.name = message.name;
|
|
769
766
|
}
|
|
770
|
-
|
|
771
|
-
obj.
|
|
767
|
+
if (message.package !== "") {
|
|
768
|
+
obj.package = message.package;
|
|
772
769
|
}
|
|
773
|
-
if (message.
|
|
774
|
-
obj.
|
|
770
|
+
if ((_a = message.dependency) === null || _a === void 0 ? void 0 : _a.length) {
|
|
771
|
+
obj.dependency = message.dependency;
|
|
775
772
|
}
|
|
776
|
-
|
|
777
|
-
obj.publicDependency =
|
|
773
|
+
if ((_b = message.publicDependency) === null || _b === void 0 ? void 0 : _b.length) {
|
|
774
|
+
obj.publicDependency = message.publicDependency.map((e) => Math.round(e));
|
|
778
775
|
}
|
|
779
|
-
if (message.weakDependency) {
|
|
776
|
+
if ((_c = message.weakDependency) === null || _c === void 0 ? void 0 : _c.length) {
|
|
780
777
|
obj.weakDependency = message.weakDependency.map((e) => Math.round(e));
|
|
781
778
|
}
|
|
782
|
-
|
|
783
|
-
obj.
|
|
779
|
+
if ((_d = message.messageType) === null || _d === void 0 ? void 0 : _d.length) {
|
|
780
|
+
obj.messageType = message.messageType.map((e) => exports.DescriptorProto.toJSON(e));
|
|
784
781
|
}
|
|
785
|
-
if (message.
|
|
786
|
-
obj.
|
|
782
|
+
if ((_e = message.enumType) === null || _e === void 0 ? void 0 : _e.length) {
|
|
783
|
+
obj.enumType = message.enumType.map((e) => exports.EnumDescriptorProto.toJSON(e));
|
|
787
784
|
}
|
|
788
|
-
|
|
789
|
-
obj.
|
|
785
|
+
if ((_f = message.service) === null || _f === void 0 ? void 0 : _f.length) {
|
|
786
|
+
obj.service = message.service.map((e) => exports.ServiceDescriptorProto.toJSON(e));
|
|
790
787
|
}
|
|
791
|
-
if (message.
|
|
792
|
-
obj.
|
|
788
|
+
if ((_g = message.extension) === null || _g === void 0 ? void 0 : _g.length) {
|
|
789
|
+
obj.extension = message.extension.map((e) => exports.FieldDescriptorProto.toJSON(e));
|
|
793
790
|
}
|
|
794
|
-
|
|
795
|
-
obj.
|
|
796
|
-
}
|
|
797
|
-
if (message.service) {
|
|
798
|
-
obj.service = message.service.map((e) => e ? exports.ServiceDescriptorProto.toJSON(e) : undefined);
|
|
791
|
+
if (message.options !== undefined) {
|
|
792
|
+
obj.options = exports.FileOptions.toJSON(message.options);
|
|
799
793
|
}
|
|
800
|
-
|
|
801
|
-
obj.
|
|
794
|
+
if (message.sourceCodeInfo !== undefined) {
|
|
795
|
+
obj.sourceCodeInfo = exports.SourceCodeInfo.toJSON(message.sourceCodeInfo);
|
|
802
796
|
}
|
|
803
|
-
if (message.
|
|
804
|
-
obj.
|
|
797
|
+
if (message.syntax !== "") {
|
|
798
|
+
obj.syntax = message.syntax;
|
|
805
799
|
}
|
|
806
|
-
|
|
807
|
-
obj.
|
|
800
|
+
if (message.edition !== "") {
|
|
801
|
+
obj.edition = message.edition;
|
|
808
802
|
}
|
|
809
|
-
message.options !== undefined && (obj.options = message.options ? exports.FileOptions.toJSON(message.options) : undefined);
|
|
810
|
-
message.sourceCodeInfo !== undefined &&
|
|
811
|
-
(obj.sourceCodeInfo = message.sourceCodeInfo ? exports.SourceCodeInfo.toJSON(message.sourceCodeInfo) : undefined);
|
|
812
|
-
message.syntax !== undefined && (obj.syntax = message.syntax);
|
|
813
|
-
message.edition !== undefined && (obj.edition = message.edition);
|
|
814
803
|
return obj;
|
|
815
804
|
},
|
|
816
805
|
create(base) {
|
|
@@ -987,57 +976,37 @@ exports.DescriptorProto = {
|
|
|
987
976
|
};
|
|
988
977
|
},
|
|
989
978
|
toJSON(message) {
|
|
979
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
990
980
|
const obj = {};
|
|
991
|
-
message.name !==
|
|
992
|
-
|
|
993
|
-
obj.field = message.field.map((e) => e ? exports.FieldDescriptorProto.toJSON(e) : undefined);
|
|
994
|
-
}
|
|
995
|
-
else {
|
|
996
|
-
obj.field = [];
|
|
997
|
-
}
|
|
998
|
-
if (message.extension) {
|
|
999
|
-
obj.extension = message.extension.map((e) => e ? exports.FieldDescriptorProto.toJSON(e) : undefined);
|
|
1000
|
-
}
|
|
1001
|
-
else {
|
|
1002
|
-
obj.extension = [];
|
|
1003
|
-
}
|
|
1004
|
-
if (message.nestedType) {
|
|
1005
|
-
obj.nestedType = message.nestedType.map((e) => e ? exports.DescriptorProto.toJSON(e) : undefined);
|
|
1006
|
-
}
|
|
1007
|
-
else {
|
|
1008
|
-
obj.nestedType = [];
|
|
1009
|
-
}
|
|
1010
|
-
if (message.enumType) {
|
|
1011
|
-
obj.enumType = message.enumType.map((e) => e ? exports.EnumDescriptorProto.toJSON(e) : undefined);
|
|
981
|
+
if (message.name !== "") {
|
|
982
|
+
obj.name = message.name;
|
|
1012
983
|
}
|
|
1013
|
-
|
|
1014
|
-
obj.
|
|
984
|
+
if ((_a = message.field) === null || _a === void 0 ? void 0 : _a.length) {
|
|
985
|
+
obj.field = message.field.map((e) => exports.FieldDescriptorProto.toJSON(e));
|
|
1015
986
|
}
|
|
1016
|
-
if (message.
|
|
1017
|
-
obj.
|
|
987
|
+
if ((_b = message.extension) === null || _b === void 0 ? void 0 : _b.length) {
|
|
988
|
+
obj.extension = message.extension.map((e) => exports.FieldDescriptorProto.toJSON(e));
|
|
1018
989
|
}
|
|
1019
|
-
|
|
1020
|
-
obj.
|
|
990
|
+
if ((_c = message.nestedType) === null || _c === void 0 ? void 0 : _c.length) {
|
|
991
|
+
obj.nestedType = message.nestedType.map((e) => exports.DescriptorProto.toJSON(e));
|
|
1021
992
|
}
|
|
1022
|
-
if (message.
|
|
1023
|
-
obj.
|
|
993
|
+
if ((_d = message.enumType) === null || _d === void 0 ? void 0 : _d.length) {
|
|
994
|
+
obj.enumType = message.enumType.map((e) => exports.EnumDescriptorProto.toJSON(e));
|
|
1024
995
|
}
|
|
1025
|
-
|
|
1026
|
-
obj.
|
|
996
|
+
if ((_e = message.extensionRange) === null || _e === void 0 ? void 0 : _e.length) {
|
|
997
|
+
obj.extensionRange = message.extensionRange.map((e) => exports.DescriptorProto_ExtensionRange.toJSON(e));
|
|
1027
998
|
}
|
|
1028
|
-
message.
|
|
1029
|
-
|
|
1030
|
-
if (message.reservedRange) {
|
|
1031
|
-
obj.reservedRange = message.reservedRange.map((e) => e ? exports.DescriptorProto_ReservedRange.toJSON(e) : undefined);
|
|
999
|
+
if ((_f = message.oneofDecl) === null || _f === void 0 ? void 0 : _f.length) {
|
|
1000
|
+
obj.oneofDecl = message.oneofDecl.map((e) => exports.OneofDescriptorProto.toJSON(e));
|
|
1032
1001
|
}
|
|
1033
|
-
|
|
1034
|
-
obj.
|
|
1002
|
+
if (message.options !== undefined) {
|
|
1003
|
+
obj.options = exports.MessageOptions.toJSON(message.options);
|
|
1035
1004
|
}
|
|
1036
|
-
if (message.
|
|
1037
|
-
obj.
|
|
1005
|
+
if ((_g = message.reservedRange) === null || _g === void 0 ? void 0 : _g.length) {
|
|
1006
|
+
obj.reservedRange = message.reservedRange.map((e) => exports.DescriptorProto_ReservedRange.toJSON(e));
|
|
1038
1007
|
}
|
|
1039
|
-
|
|
1040
|
-
obj.reservedName =
|
|
1008
|
+
if ((_h = message.reservedName) === null || _h === void 0 ? void 0 : _h.length) {
|
|
1009
|
+
obj.reservedName = message.reservedName;
|
|
1041
1010
|
}
|
|
1042
1011
|
return obj;
|
|
1043
1012
|
},
|
|
@@ -1120,10 +1089,15 @@ exports.DescriptorProto_ExtensionRange = {
|
|
|
1120
1089
|
},
|
|
1121
1090
|
toJSON(message) {
|
|
1122
1091
|
const obj = {};
|
|
1123
|
-
message.start !==
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1092
|
+
if (message.start !== 0) {
|
|
1093
|
+
obj.start = Math.round(message.start);
|
|
1094
|
+
}
|
|
1095
|
+
if (message.end !== 0) {
|
|
1096
|
+
obj.end = Math.round(message.end);
|
|
1097
|
+
}
|
|
1098
|
+
if (message.options !== undefined) {
|
|
1099
|
+
obj.options = exports.ExtensionRangeOptions.toJSON(message.options);
|
|
1100
|
+
}
|
|
1127
1101
|
return obj;
|
|
1128
1102
|
},
|
|
1129
1103
|
create(base) {
|
|
@@ -1185,8 +1159,12 @@ exports.DescriptorProto_ReservedRange = {
|
|
|
1185
1159
|
},
|
|
1186
1160
|
toJSON(message) {
|
|
1187
1161
|
const obj = {};
|
|
1188
|
-
message.start !==
|
|
1189
|
-
|
|
1162
|
+
if (message.start !== 0) {
|
|
1163
|
+
obj.start = Math.round(message.start);
|
|
1164
|
+
}
|
|
1165
|
+
if (message.end !== 0) {
|
|
1166
|
+
obj.end = Math.round(message.end);
|
|
1167
|
+
}
|
|
1190
1168
|
return obj;
|
|
1191
1169
|
},
|
|
1192
1170
|
create(base) {
|
|
@@ -1239,12 +1217,10 @@ exports.ExtensionRangeOptions = {
|
|
|
1239
1217
|
};
|
|
1240
1218
|
},
|
|
1241
1219
|
toJSON(message) {
|
|
1220
|
+
var _a;
|
|
1242
1221
|
const obj = {};
|
|
1243
|
-
if (message.uninterpretedOption) {
|
|
1244
|
-
obj.uninterpretedOption = message.uninterpretedOption.map((e) =>
|
|
1245
|
-
}
|
|
1246
|
-
else {
|
|
1247
|
-
obj.uninterpretedOption = [];
|
|
1222
|
+
if ((_a = message.uninterpretedOption) === null || _a === void 0 ? void 0 : _a.length) {
|
|
1223
|
+
obj.uninterpretedOption = message.uninterpretedOption.map((e) => exports.UninterpretedOption.toJSON(e));
|
|
1248
1224
|
}
|
|
1249
1225
|
return obj;
|
|
1250
1226
|
},
|
|
@@ -1408,17 +1384,39 @@ exports.FieldDescriptorProto = {
|
|
|
1408
1384
|
},
|
|
1409
1385
|
toJSON(message) {
|
|
1410
1386
|
const obj = {};
|
|
1411
|
-
message.name !==
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
message.
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
message.
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1387
|
+
if (message.name !== "") {
|
|
1388
|
+
obj.name = message.name;
|
|
1389
|
+
}
|
|
1390
|
+
if (message.number !== 0) {
|
|
1391
|
+
obj.number = Math.round(message.number);
|
|
1392
|
+
}
|
|
1393
|
+
if (message.label !== 1) {
|
|
1394
|
+
obj.label = fieldDescriptorProto_LabelToJSON(message.label);
|
|
1395
|
+
}
|
|
1396
|
+
if (message.type !== 1) {
|
|
1397
|
+
obj.type = fieldDescriptorProto_TypeToJSON(message.type);
|
|
1398
|
+
}
|
|
1399
|
+
if (message.typeName !== "") {
|
|
1400
|
+
obj.typeName = message.typeName;
|
|
1401
|
+
}
|
|
1402
|
+
if (message.extendee !== "") {
|
|
1403
|
+
obj.extendee = message.extendee;
|
|
1404
|
+
}
|
|
1405
|
+
if (message.defaultValue !== "") {
|
|
1406
|
+
obj.defaultValue = message.defaultValue;
|
|
1407
|
+
}
|
|
1408
|
+
if (message.oneofIndex !== 0) {
|
|
1409
|
+
obj.oneofIndex = Math.round(message.oneofIndex);
|
|
1410
|
+
}
|
|
1411
|
+
if (message.jsonName !== "") {
|
|
1412
|
+
obj.jsonName = message.jsonName;
|
|
1413
|
+
}
|
|
1414
|
+
if (message.options !== undefined) {
|
|
1415
|
+
obj.options = exports.FieldOptions.toJSON(message.options);
|
|
1416
|
+
}
|
|
1417
|
+
if (message.proto3Optional === true) {
|
|
1418
|
+
obj.proto3Optional = message.proto3Optional;
|
|
1419
|
+
}
|
|
1422
1420
|
return obj;
|
|
1423
1421
|
},
|
|
1424
1422
|
create(base) {
|
|
@@ -1491,8 +1489,12 @@ exports.OneofDescriptorProto = {
|
|
|
1491
1489
|
},
|
|
1492
1490
|
toJSON(message) {
|
|
1493
1491
|
const obj = {};
|
|
1494
|
-
message.name !==
|
|
1495
|
-
|
|
1492
|
+
if (message.name !== "") {
|
|
1493
|
+
obj.name = message.name;
|
|
1494
|
+
}
|
|
1495
|
+
if (message.options !== undefined) {
|
|
1496
|
+
obj.options = exports.OneofOptions.toJSON(message.options);
|
|
1497
|
+
}
|
|
1496
1498
|
return obj;
|
|
1497
1499
|
},
|
|
1498
1500
|
create(base) {
|
|
@@ -1587,26 +1589,22 @@ exports.EnumDescriptorProto = {
|
|
|
1587
1589
|
};
|
|
1588
1590
|
},
|
|
1589
1591
|
toJSON(message) {
|
|
1592
|
+
var _a, _b, _c;
|
|
1590
1593
|
const obj = {};
|
|
1591
|
-
message.name !==
|
|
1592
|
-
|
|
1593
|
-
obj.value = message.value.map((e) => e ? exports.EnumValueDescriptorProto.toJSON(e) : undefined);
|
|
1594
|
-
}
|
|
1595
|
-
else {
|
|
1596
|
-
obj.value = [];
|
|
1594
|
+
if (message.name !== "") {
|
|
1595
|
+
obj.name = message.name;
|
|
1597
1596
|
}
|
|
1598
|
-
message.
|
|
1599
|
-
|
|
1600
|
-
obj.reservedRange = message.reservedRange.map((e) => e ? exports.EnumDescriptorProto_EnumReservedRange.toJSON(e) : undefined);
|
|
1597
|
+
if ((_a = message.value) === null || _a === void 0 ? void 0 : _a.length) {
|
|
1598
|
+
obj.value = message.value.map((e) => exports.EnumValueDescriptorProto.toJSON(e));
|
|
1601
1599
|
}
|
|
1602
|
-
|
|
1603
|
-
obj.
|
|
1600
|
+
if (message.options !== undefined) {
|
|
1601
|
+
obj.options = exports.EnumOptions.toJSON(message.options);
|
|
1604
1602
|
}
|
|
1605
|
-
if (message.
|
|
1606
|
-
obj.
|
|
1603
|
+
if ((_b = message.reservedRange) === null || _b === void 0 ? void 0 : _b.length) {
|
|
1604
|
+
obj.reservedRange = message.reservedRange.map((e) => exports.EnumDescriptorProto_EnumReservedRange.toJSON(e));
|
|
1607
1605
|
}
|
|
1608
|
-
|
|
1609
|
-
obj.reservedName =
|
|
1606
|
+
if ((_c = message.reservedName) === null || _c === void 0 ? void 0 : _c.length) {
|
|
1607
|
+
obj.reservedName = message.reservedName;
|
|
1610
1608
|
}
|
|
1611
1609
|
return obj;
|
|
1612
1610
|
},
|
|
@@ -1672,8 +1670,12 @@ exports.EnumDescriptorProto_EnumReservedRange = {
|
|
|
1672
1670
|
},
|
|
1673
1671
|
toJSON(message) {
|
|
1674
1672
|
const obj = {};
|
|
1675
|
-
message.start !==
|
|
1676
|
-
|
|
1673
|
+
if (message.start !== 0) {
|
|
1674
|
+
obj.start = Math.round(message.start);
|
|
1675
|
+
}
|
|
1676
|
+
if (message.end !== 0) {
|
|
1677
|
+
obj.end = Math.round(message.end);
|
|
1678
|
+
}
|
|
1677
1679
|
return obj;
|
|
1678
1680
|
},
|
|
1679
1681
|
create(base) {
|
|
@@ -1745,10 +1747,15 @@ exports.EnumValueDescriptorProto = {
|
|
|
1745
1747
|
},
|
|
1746
1748
|
toJSON(message) {
|
|
1747
1749
|
const obj = {};
|
|
1748
|
-
message.name !==
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1750
|
+
if (message.name !== "") {
|
|
1751
|
+
obj.name = message.name;
|
|
1752
|
+
}
|
|
1753
|
+
if (message.number !== 0) {
|
|
1754
|
+
obj.number = Math.round(message.number);
|
|
1755
|
+
}
|
|
1756
|
+
if (message.options !== undefined) {
|
|
1757
|
+
obj.options = exports.EnumValueOptions.toJSON(message.options);
|
|
1758
|
+
}
|
|
1752
1759
|
return obj;
|
|
1753
1760
|
},
|
|
1754
1761
|
create(base) {
|
|
@@ -1822,16 +1829,17 @@ exports.ServiceDescriptorProto = {
|
|
|
1822
1829
|
};
|
|
1823
1830
|
},
|
|
1824
1831
|
toJSON(message) {
|
|
1832
|
+
var _a;
|
|
1825
1833
|
const obj = {};
|
|
1826
|
-
message.name !==
|
|
1827
|
-
|
|
1828
|
-
obj.method = message.method.map((e) => e ? exports.MethodDescriptorProto.toJSON(e) : undefined);
|
|
1834
|
+
if (message.name !== "") {
|
|
1835
|
+
obj.name = message.name;
|
|
1829
1836
|
}
|
|
1830
|
-
|
|
1831
|
-
obj.method =
|
|
1837
|
+
if ((_a = message.method) === null || _a === void 0 ? void 0 : _a.length) {
|
|
1838
|
+
obj.method = message.method.map((e) => exports.MethodDescriptorProto.toJSON(e));
|
|
1839
|
+
}
|
|
1840
|
+
if (message.options !== undefined) {
|
|
1841
|
+
obj.options = exports.ServiceOptions.toJSON(message.options);
|
|
1832
1842
|
}
|
|
1833
|
-
message.options !== undefined &&
|
|
1834
|
-
(obj.options = message.options ? exports.ServiceOptions.toJSON(message.options) : undefined);
|
|
1835
1843
|
return obj;
|
|
1836
1844
|
},
|
|
1837
1845
|
create(base) {
|
|
@@ -1943,13 +1951,24 @@ exports.MethodDescriptorProto = {
|
|
|
1943
1951
|
},
|
|
1944
1952
|
toJSON(message) {
|
|
1945
1953
|
const obj = {};
|
|
1946
|
-
message.name !==
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
message.
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
message.
|
|
1954
|
+
if (message.name !== "") {
|
|
1955
|
+
obj.name = message.name;
|
|
1956
|
+
}
|
|
1957
|
+
if (message.inputType !== "") {
|
|
1958
|
+
obj.inputType = message.inputType;
|
|
1959
|
+
}
|
|
1960
|
+
if (message.outputType !== "") {
|
|
1961
|
+
obj.outputType = message.outputType;
|
|
1962
|
+
}
|
|
1963
|
+
if (message.options !== undefined) {
|
|
1964
|
+
obj.options = exports.MethodOptions.toJSON(message.options);
|
|
1965
|
+
}
|
|
1966
|
+
if (message.clientStreaming === true) {
|
|
1967
|
+
obj.clientStreaming = message.clientStreaming;
|
|
1968
|
+
}
|
|
1969
|
+
if (message.serverStreaming === true) {
|
|
1970
|
+
obj.serverStreaming = message.serverStreaming;
|
|
1971
|
+
}
|
|
1953
1972
|
return obj;
|
|
1954
1973
|
},
|
|
1955
1974
|
create(base) {
|
|
@@ -2232,33 +2251,70 @@ exports.FileOptions = {
|
|
|
2232
2251
|
};
|
|
2233
2252
|
},
|
|
2234
2253
|
toJSON(message) {
|
|
2254
|
+
var _a;
|
|
2235
2255
|
const obj = {};
|
|
2236
|
-
message.javaPackage !==
|
|
2237
|
-
|
|
2238
|
-
|
|
2239
|
-
message.
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
message.
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
message.
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
if (message.
|
|
2258
|
-
obj.
|
|
2259
|
-
}
|
|
2260
|
-
|
|
2261
|
-
obj.
|
|
2256
|
+
if (message.javaPackage !== "") {
|
|
2257
|
+
obj.javaPackage = message.javaPackage;
|
|
2258
|
+
}
|
|
2259
|
+
if (message.javaOuterClassname !== "") {
|
|
2260
|
+
obj.javaOuterClassname = message.javaOuterClassname;
|
|
2261
|
+
}
|
|
2262
|
+
if (message.javaMultipleFiles === true) {
|
|
2263
|
+
obj.javaMultipleFiles = message.javaMultipleFiles;
|
|
2264
|
+
}
|
|
2265
|
+
if (message.javaGenerateEqualsAndHash === true) {
|
|
2266
|
+
obj.javaGenerateEqualsAndHash = message.javaGenerateEqualsAndHash;
|
|
2267
|
+
}
|
|
2268
|
+
if (message.javaStringCheckUtf8 === true) {
|
|
2269
|
+
obj.javaStringCheckUtf8 = message.javaStringCheckUtf8;
|
|
2270
|
+
}
|
|
2271
|
+
if (message.optimizeFor !== 1) {
|
|
2272
|
+
obj.optimizeFor = fileOptions_OptimizeModeToJSON(message.optimizeFor);
|
|
2273
|
+
}
|
|
2274
|
+
if (message.goPackage !== "") {
|
|
2275
|
+
obj.goPackage = message.goPackage;
|
|
2276
|
+
}
|
|
2277
|
+
if (message.ccGenericServices === true) {
|
|
2278
|
+
obj.ccGenericServices = message.ccGenericServices;
|
|
2279
|
+
}
|
|
2280
|
+
if (message.javaGenericServices === true) {
|
|
2281
|
+
obj.javaGenericServices = message.javaGenericServices;
|
|
2282
|
+
}
|
|
2283
|
+
if (message.pyGenericServices === true) {
|
|
2284
|
+
obj.pyGenericServices = message.pyGenericServices;
|
|
2285
|
+
}
|
|
2286
|
+
if (message.phpGenericServices === true) {
|
|
2287
|
+
obj.phpGenericServices = message.phpGenericServices;
|
|
2288
|
+
}
|
|
2289
|
+
if (message.deprecated === true) {
|
|
2290
|
+
obj.deprecated = message.deprecated;
|
|
2291
|
+
}
|
|
2292
|
+
if (message.ccEnableArenas === true) {
|
|
2293
|
+
obj.ccEnableArenas = message.ccEnableArenas;
|
|
2294
|
+
}
|
|
2295
|
+
if (message.objcClassPrefix !== "") {
|
|
2296
|
+
obj.objcClassPrefix = message.objcClassPrefix;
|
|
2297
|
+
}
|
|
2298
|
+
if (message.csharpNamespace !== "") {
|
|
2299
|
+
obj.csharpNamespace = message.csharpNamespace;
|
|
2300
|
+
}
|
|
2301
|
+
if (message.swiftPrefix !== "") {
|
|
2302
|
+
obj.swiftPrefix = message.swiftPrefix;
|
|
2303
|
+
}
|
|
2304
|
+
if (message.phpClassPrefix !== "") {
|
|
2305
|
+
obj.phpClassPrefix = message.phpClassPrefix;
|
|
2306
|
+
}
|
|
2307
|
+
if (message.phpNamespace !== "") {
|
|
2308
|
+
obj.phpNamespace = message.phpNamespace;
|
|
2309
|
+
}
|
|
2310
|
+
if (message.phpMetadataNamespace !== "") {
|
|
2311
|
+
obj.phpMetadataNamespace = message.phpMetadataNamespace;
|
|
2312
|
+
}
|
|
2313
|
+
if (message.rubyPackage !== "") {
|
|
2314
|
+
obj.rubyPackage = message.rubyPackage;
|
|
2315
|
+
}
|
|
2316
|
+
if ((_a = message.uninterpretedOption) === null || _a === void 0 ? void 0 : _a.length) {
|
|
2317
|
+
obj.uninterpretedOption = message.uninterpretedOption.map((e) => exports.UninterpretedOption.toJSON(e));
|
|
2262
2318
|
}
|
|
2263
2319
|
return obj;
|
|
2264
2320
|
},
|
|
@@ -2392,19 +2448,25 @@ exports.MessageOptions = {
|
|
|
2392
2448
|
};
|
|
2393
2449
|
},
|
|
2394
2450
|
toJSON(message) {
|
|
2451
|
+
var _a;
|
|
2395
2452
|
const obj = {};
|
|
2396
|
-
|
|
2397
|
-
|
|
2398
|
-
|
|
2399
|
-
|
|
2400
|
-
|
|
2401
|
-
|
|
2402
|
-
|
|
2403
|
-
|
|
2404
|
-
|
|
2405
|
-
|
|
2406
|
-
|
|
2407
|
-
|
|
2453
|
+
if (message.messageSetWireFormat === true) {
|
|
2454
|
+
obj.messageSetWireFormat = message.messageSetWireFormat;
|
|
2455
|
+
}
|
|
2456
|
+
if (message.noStandardDescriptorAccessor === true) {
|
|
2457
|
+
obj.noStandardDescriptorAccessor = message.noStandardDescriptorAccessor;
|
|
2458
|
+
}
|
|
2459
|
+
if (message.deprecated === true) {
|
|
2460
|
+
obj.deprecated = message.deprecated;
|
|
2461
|
+
}
|
|
2462
|
+
if (message.mapEntry === true) {
|
|
2463
|
+
obj.mapEntry = message.mapEntry;
|
|
2464
|
+
}
|
|
2465
|
+
if (message.deprecatedLegacyJsonFieldConflicts === true) {
|
|
2466
|
+
obj.deprecatedLegacyJsonFieldConflicts = message.deprecatedLegacyJsonFieldConflicts;
|
|
2467
|
+
}
|
|
2468
|
+
if ((_a = message.uninterpretedOption) === null || _a === void 0 ? void 0 : _a.length) {
|
|
2469
|
+
obj.uninterpretedOption = message.uninterpretedOption.map((e) => exports.UninterpretedOption.toJSON(e));
|
|
2408
2470
|
}
|
|
2409
2471
|
return obj;
|
|
2410
2472
|
},
|
|
@@ -2574,22 +2636,40 @@ exports.FieldOptions = {
|
|
|
2574
2636
|
};
|
|
2575
2637
|
},
|
|
2576
2638
|
toJSON(message) {
|
|
2639
|
+
var _a;
|
|
2577
2640
|
const obj = {};
|
|
2578
|
-
message.ctype !==
|
|
2579
|
-
|
|
2580
|
-
|
|
2581
|
-
|
|
2582
|
-
|
|
2583
|
-
|
|
2584
|
-
message.
|
|
2585
|
-
|
|
2586
|
-
|
|
2587
|
-
|
|
2588
|
-
|
|
2589
|
-
|
|
2590
|
-
|
|
2591
|
-
|
|
2592
|
-
|
|
2641
|
+
if (message.ctype !== 0) {
|
|
2642
|
+
obj.ctype = fieldOptions_CTypeToJSON(message.ctype);
|
|
2643
|
+
}
|
|
2644
|
+
if (message.packed === true) {
|
|
2645
|
+
obj.packed = message.packed;
|
|
2646
|
+
}
|
|
2647
|
+
if (message.jstype !== 0) {
|
|
2648
|
+
obj.jstype = fieldOptions_JSTypeToJSON(message.jstype);
|
|
2649
|
+
}
|
|
2650
|
+
if (message.lazy === true) {
|
|
2651
|
+
obj.lazy = message.lazy;
|
|
2652
|
+
}
|
|
2653
|
+
if (message.unverifiedLazy === true) {
|
|
2654
|
+
obj.unverifiedLazy = message.unverifiedLazy;
|
|
2655
|
+
}
|
|
2656
|
+
if (message.deprecated === true) {
|
|
2657
|
+
obj.deprecated = message.deprecated;
|
|
2658
|
+
}
|
|
2659
|
+
if (message.weak === true) {
|
|
2660
|
+
obj.weak = message.weak;
|
|
2661
|
+
}
|
|
2662
|
+
if (message.debugRedact === true) {
|
|
2663
|
+
obj.debugRedact = message.debugRedact;
|
|
2664
|
+
}
|
|
2665
|
+
if (message.retention !== 0) {
|
|
2666
|
+
obj.retention = fieldOptions_OptionRetentionToJSON(message.retention);
|
|
2667
|
+
}
|
|
2668
|
+
if (message.target !== 0) {
|
|
2669
|
+
obj.target = fieldOptions_OptionTargetTypeToJSON(message.target);
|
|
2670
|
+
}
|
|
2671
|
+
if ((_a = message.uninterpretedOption) === null || _a === void 0 ? void 0 : _a.length) {
|
|
2672
|
+
obj.uninterpretedOption = message.uninterpretedOption.map((e) => exports.UninterpretedOption.toJSON(e));
|
|
2593
2673
|
}
|
|
2594
2674
|
return obj;
|
|
2595
2675
|
},
|
|
@@ -2652,12 +2732,10 @@ exports.OneofOptions = {
|
|
|
2652
2732
|
};
|
|
2653
2733
|
},
|
|
2654
2734
|
toJSON(message) {
|
|
2735
|
+
var _a;
|
|
2655
2736
|
const obj = {};
|
|
2656
|
-
if (message.uninterpretedOption) {
|
|
2657
|
-
obj.uninterpretedOption = message.uninterpretedOption.map((e) =>
|
|
2658
|
-
}
|
|
2659
|
-
else {
|
|
2660
|
-
obj.uninterpretedOption = [];
|
|
2737
|
+
if ((_a = message.uninterpretedOption) === null || _a === void 0 ? void 0 : _a.length) {
|
|
2738
|
+
obj.uninterpretedOption = message.uninterpretedOption.map((e) => exports.UninterpretedOption.toJSON(e));
|
|
2661
2739
|
}
|
|
2662
2740
|
return obj;
|
|
2663
2741
|
},
|
|
@@ -2742,16 +2820,19 @@ exports.EnumOptions = {
|
|
|
2742
2820
|
};
|
|
2743
2821
|
},
|
|
2744
2822
|
toJSON(message) {
|
|
2823
|
+
var _a;
|
|
2745
2824
|
const obj = {};
|
|
2746
|
-
|
|
2747
|
-
|
|
2748
|
-
message.deprecatedLegacyJsonFieldConflicts !== undefined &&
|
|
2749
|
-
(obj.deprecatedLegacyJsonFieldConflicts = message.deprecatedLegacyJsonFieldConflicts);
|
|
2750
|
-
if (message.uninterpretedOption) {
|
|
2751
|
-
obj.uninterpretedOption = message.uninterpretedOption.map((e) => e ? exports.UninterpretedOption.toJSON(e) : undefined);
|
|
2825
|
+
if (message.allowAlias === true) {
|
|
2826
|
+
obj.allowAlias = message.allowAlias;
|
|
2752
2827
|
}
|
|
2753
|
-
|
|
2754
|
-
obj.
|
|
2828
|
+
if (message.deprecated === true) {
|
|
2829
|
+
obj.deprecated = message.deprecated;
|
|
2830
|
+
}
|
|
2831
|
+
if (message.deprecatedLegacyJsonFieldConflicts === true) {
|
|
2832
|
+
obj.deprecatedLegacyJsonFieldConflicts = message.deprecatedLegacyJsonFieldConflicts;
|
|
2833
|
+
}
|
|
2834
|
+
if ((_a = message.uninterpretedOption) === null || _a === void 0 ? void 0 : _a.length) {
|
|
2835
|
+
obj.uninterpretedOption = message.uninterpretedOption.map((e) => exports.UninterpretedOption.toJSON(e));
|
|
2755
2836
|
}
|
|
2756
2837
|
return obj;
|
|
2757
2838
|
},
|
|
@@ -2817,13 +2898,13 @@ exports.EnumValueOptions = {
|
|
|
2817
2898
|
};
|
|
2818
2899
|
},
|
|
2819
2900
|
toJSON(message) {
|
|
2901
|
+
var _a;
|
|
2820
2902
|
const obj = {};
|
|
2821
|
-
|
|
2822
|
-
|
|
2823
|
-
obj.uninterpretedOption = message.uninterpretedOption.map((e) => e ? exports.UninterpretedOption.toJSON(e) : undefined);
|
|
2903
|
+
if (message.deprecated === true) {
|
|
2904
|
+
obj.deprecated = message.deprecated;
|
|
2824
2905
|
}
|
|
2825
|
-
|
|
2826
|
-
obj.uninterpretedOption =
|
|
2906
|
+
if ((_a = message.uninterpretedOption) === null || _a === void 0 ? void 0 : _a.length) {
|
|
2907
|
+
obj.uninterpretedOption = message.uninterpretedOption.map((e) => exports.UninterpretedOption.toJSON(e));
|
|
2827
2908
|
}
|
|
2828
2909
|
return obj;
|
|
2829
2910
|
},
|
|
@@ -2887,13 +2968,13 @@ exports.ServiceOptions = {
|
|
|
2887
2968
|
};
|
|
2888
2969
|
},
|
|
2889
2970
|
toJSON(message) {
|
|
2971
|
+
var _a;
|
|
2890
2972
|
const obj = {};
|
|
2891
|
-
|
|
2892
|
-
|
|
2893
|
-
obj.uninterpretedOption = message.uninterpretedOption.map((e) => e ? exports.UninterpretedOption.toJSON(e) : undefined);
|
|
2973
|
+
if (message.deprecated === true) {
|
|
2974
|
+
obj.deprecated = message.deprecated;
|
|
2894
2975
|
}
|
|
2895
|
-
|
|
2896
|
-
obj.uninterpretedOption =
|
|
2976
|
+
if ((_a = message.uninterpretedOption) === null || _a === void 0 ? void 0 : _a.length) {
|
|
2977
|
+
obj.uninterpretedOption = message.uninterpretedOption.map((e) => exports.UninterpretedOption.toJSON(e));
|
|
2897
2978
|
}
|
|
2898
2979
|
return obj;
|
|
2899
2980
|
},
|
|
@@ -2969,15 +3050,16 @@ exports.MethodOptions = {
|
|
|
2969
3050
|
};
|
|
2970
3051
|
},
|
|
2971
3052
|
toJSON(message) {
|
|
3053
|
+
var _a;
|
|
2972
3054
|
const obj = {};
|
|
2973
|
-
|
|
2974
|
-
|
|
2975
|
-
(obj.idempotencyLevel = methodOptions_IdempotencyLevelToJSON(message.idempotencyLevel));
|
|
2976
|
-
if (message.uninterpretedOption) {
|
|
2977
|
-
obj.uninterpretedOption = message.uninterpretedOption.map((e) => e ? exports.UninterpretedOption.toJSON(e) : undefined);
|
|
3055
|
+
if (message.deprecated === true) {
|
|
3056
|
+
obj.deprecated = message.deprecated;
|
|
2978
3057
|
}
|
|
2979
|
-
|
|
2980
|
-
obj.
|
|
3058
|
+
if (message.idempotencyLevel !== 0) {
|
|
3059
|
+
obj.idempotencyLevel = methodOptions_IdempotencyLevelToJSON(message.idempotencyLevel);
|
|
3060
|
+
}
|
|
3061
|
+
if ((_a = message.uninterpretedOption) === null || _a === void 0 ? void 0 : _a.length) {
|
|
3062
|
+
obj.uninterpretedOption = message.uninterpretedOption.map((e) => exports.UninterpretedOption.toJSON(e));
|
|
2981
3063
|
}
|
|
2982
3064
|
return obj;
|
|
2983
3065
|
},
|
|
@@ -3000,7 +3082,7 @@ function createBaseUninterpretedOption() {
|
|
|
3000
3082
|
positiveIntValue: 0,
|
|
3001
3083
|
negativeIntValue: 0,
|
|
3002
3084
|
doubleValue: 0,
|
|
3003
|
-
stringValue: new Uint8Array(),
|
|
3085
|
+
stringValue: new Uint8Array(0),
|
|
3004
3086
|
aggregateValue: "",
|
|
3005
3087
|
};
|
|
3006
3088
|
}
|
|
@@ -3093,25 +3175,34 @@ exports.UninterpretedOption = {
|
|
|
3093
3175
|
positiveIntValue: isSet(object.positiveIntValue) ? Number(object.positiveIntValue) : 0,
|
|
3094
3176
|
negativeIntValue: isSet(object.negativeIntValue) ? Number(object.negativeIntValue) : 0,
|
|
3095
3177
|
doubleValue: isSet(object.doubleValue) ? Number(object.doubleValue) : 0,
|
|
3096
|
-
stringValue: isSet(object.stringValue) ? bytesFromBase64(object.stringValue) : new Uint8Array(),
|
|
3178
|
+
stringValue: isSet(object.stringValue) ? bytesFromBase64(object.stringValue) : new Uint8Array(0),
|
|
3097
3179
|
aggregateValue: isSet(object.aggregateValue) ? String(object.aggregateValue) : "",
|
|
3098
3180
|
};
|
|
3099
3181
|
},
|
|
3100
3182
|
toJSON(message) {
|
|
3183
|
+
var _a;
|
|
3101
3184
|
const obj = {};
|
|
3102
|
-
if (message.name) {
|
|
3103
|
-
obj.name = message.name.map((e) =>
|
|
3104
|
-
}
|
|
3105
|
-
|
|
3106
|
-
obj.
|
|
3107
|
-
}
|
|
3108
|
-
message.
|
|
3109
|
-
|
|
3110
|
-
|
|
3111
|
-
message.
|
|
3112
|
-
|
|
3113
|
-
|
|
3114
|
-
message.
|
|
3185
|
+
if ((_a = message.name) === null || _a === void 0 ? void 0 : _a.length) {
|
|
3186
|
+
obj.name = message.name.map((e) => exports.UninterpretedOption_NamePart.toJSON(e));
|
|
3187
|
+
}
|
|
3188
|
+
if (message.identifierValue !== "") {
|
|
3189
|
+
obj.identifierValue = message.identifierValue;
|
|
3190
|
+
}
|
|
3191
|
+
if (message.positiveIntValue !== 0) {
|
|
3192
|
+
obj.positiveIntValue = Math.round(message.positiveIntValue);
|
|
3193
|
+
}
|
|
3194
|
+
if (message.negativeIntValue !== 0) {
|
|
3195
|
+
obj.negativeIntValue = Math.round(message.negativeIntValue);
|
|
3196
|
+
}
|
|
3197
|
+
if (message.doubleValue !== 0) {
|
|
3198
|
+
obj.doubleValue = message.doubleValue;
|
|
3199
|
+
}
|
|
3200
|
+
if (message.stringValue.length !== 0) {
|
|
3201
|
+
obj.stringValue = base64FromBytes(message.stringValue);
|
|
3202
|
+
}
|
|
3203
|
+
if (message.aggregateValue !== "") {
|
|
3204
|
+
obj.aggregateValue = message.aggregateValue;
|
|
3205
|
+
}
|
|
3115
3206
|
return obj;
|
|
3116
3207
|
},
|
|
3117
3208
|
create(base) {
|
|
@@ -3125,7 +3216,7 @@ exports.UninterpretedOption = {
|
|
|
3125
3216
|
message.positiveIntValue = (_c = object.positiveIntValue) !== null && _c !== void 0 ? _c : 0;
|
|
3126
3217
|
message.negativeIntValue = (_d = object.negativeIntValue) !== null && _d !== void 0 ? _d : 0;
|
|
3127
3218
|
message.doubleValue = (_e = object.doubleValue) !== null && _e !== void 0 ? _e : 0;
|
|
3128
|
-
message.stringValue = (_f = object.stringValue) !== null && _f !== void 0 ? _f : new Uint8Array();
|
|
3219
|
+
message.stringValue = (_f = object.stringValue) !== null && _f !== void 0 ? _f : new Uint8Array(0);
|
|
3129
3220
|
message.aggregateValue = (_g = object.aggregateValue) !== null && _g !== void 0 ? _g : "";
|
|
3130
3221
|
return message;
|
|
3131
3222
|
},
|
|
@@ -3178,8 +3269,12 @@ exports.UninterpretedOption_NamePart = {
|
|
|
3178
3269
|
},
|
|
3179
3270
|
toJSON(message) {
|
|
3180
3271
|
const obj = {};
|
|
3181
|
-
message.namePart !==
|
|
3182
|
-
|
|
3272
|
+
if (message.namePart !== "") {
|
|
3273
|
+
obj.namePart = message.namePart;
|
|
3274
|
+
}
|
|
3275
|
+
if (message.isExtension === true) {
|
|
3276
|
+
obj.isExtension = message.isExtension;
|
|
3277
|
+
}
|
|
3183
3278
|
return obj;
|
|
3184
3279
|
},
|
|
3185
3280
|
create(base) {
|
|
@@ -3232,12 +3327,10 @@ exports.SourceCodeInfo = {
|
|
|
3232
3327
|
};
|
|
3233
3328
|
},
|
|
3234
3329
|
toJSON(message) {
|
|
3330
|
+
var _a;
|
|
3235
3331
|
const obj = {};
|
|
3236
|
-
if (message.location) {
|
|
3237
|
-
obj.location = message.location.map((e) =>
|
|
3238
|
-
}
|
|
3239
|
-
else {
|
|
3240
|
-
obj.location = [];
|
|
3332
|
+
if ((_a = message.location) === null || _a === void 0 ? void 0 : _a.length) {
|
|
3333
|
+
obj.location = message.location.map((e) => exports.SourceCodeInfo_Location.toJSON(e));
|
|
3241
3334
|
}
|
|
3242
3335
|
return obj;
|
|
3243
3336
|
},
|
|
@@ -3348,26 +3441,22 @@ exports.SourceCodeInfo_Location = {
|
|
|
3348
3441
|
};
|
|
3349
3442
|
},
|
|
3350
3443
|
toJSON(message) {
|
|
3444
|
+
var _a, _b, _c;
|
|
3351
3445
|
const obj = {};
|
|
3352
|
-
if (message.path) {
|
|
3446
|
+
if ((_a = message.path) === null || _a === void 0 ? void 0 : _a.length) {
|
|
3353
3447
|
obj.path = message.path.map((e) => Math.round(e));
|
|
3354
3448
|
}
|
|
3355
|
-
|
|
3356
|
-
obj.path = [];
|
|
3357
|
-
}
|
|
3358
|
-
if (message.span) {
|
|
3449
|
+
if ((_b = message.span) === null || _b === void 0 ? void 0 : _b.length) {
|
|
3359
3450
|
obj.span = message.span.map((e) => Math.round(e));
|
|
3360
3451
|
}
|
|
3361
|
-
|
|
3362
|
-
obj.
|
|
3452
|
+
if (message.leadingComments !== "") {
|
|
3453
|
+
obj.leadingComments = message.leadingComments;
|
|
3363
3454
|
}
|
|
3364
|
-
message.
|
|
3365
|
-
|
|
3366
|
-
if (message.leadingDetachedComments) {
|
|
3367
|
-
obj.leadingDetachedComments = message.leadingDetachedComments.map((e) => e);
|
|
3455
|
+
if (message.trailingComments !== "") {
|
|
3456
|
+
obj.trailingComments = message.trailingComments;
|
|
3368
3457
|
}
|
|
3369
|
-
|
|
3370
|
-
obj.leadingDetachedComments =
|
|
3458
|
+
if ((_c = message.leadingDetachedComments) === null || _c === void 0 ? void 0 : _c.length) {
|
|
3459
|
+
obj.leadingDetachedComments = message.leadingDetachedComments;
|
|
3371
3460
|
}
|
|
3372
3461
|
return obj;
|
|
3373
3462
|
},
|
|
@@ -3424,12 +3513,10 @@ exports.GeneratedCodeInfo = {
|
|
|
3424
3513
|
};
|
|
3425
3514
|
},
|
|
3426
3515
|
toJSON(message) {
|
|
3516
|
+
var _a;
|
|
3427
3517
|
const obj = {};
|
|
3428
|
-
if (message.annotation) {
|
|
3429
|
-
obj.annotation = message.annotation.map((e) =>
|
|
3430
|
-
}
|
|
3431
|
-
else {
|
|
3432
|
-
obj.annotation = [];
|
|
3518
|
+
if ((_a = message.annotation) === null || _a === void 0 ? void 0 : _a.length) {
|
|
3519
|
+
obj.annotation = message.annotation.map((e) => exports.GeneratedCodeInfo_Annotation.toJSON(e));
|
|
3433
3520
|
}
|
|
3434
3521
|
return obj;
|
|
3435
3522
|
},
|
|
@@ -3529,17 +3616,23 @@ exports.GeneratedCodeInfo_Annotation = {
|
|
|
3529
3616
|
};
|
|
3530
3617
|
},
|
|
3531
3618
|
toJSON(message) {
|
|
3619
|
+
var _a;
|
|
3532
3620
|
const obj = {};
|
|
3533
|
-
if (message.path) {
|
|
3621
|
+
if ((_a = message.path) === null || _a === void 0 ? void 0 : _a.length) {
|
|
3534
3622
|
obj.path = message.path.map((e) => Math.round(e));
|
|
3535
3623
|
}
|
|
3536
|
-
|
|
3537
|
-
obj.
|
|
3624
|
+
if (message.sourceFile !== "") {
|
|
3625
|
+
obj.sourceFile = message.sourceFile;
|
|
3626
|
+
}
|
|
3627
|
+
if (message.begin !== 0) {
|
|
3628
|
+
obj.begin = Math.round(message.begin);
|
|
3629
|
+
}
|
|
3630
|
+
if (message.end !== 0) {
|
|
3631
|
+
obj.end = Math.round(message.end);
|
|
3632
|
+
}
|
|
3633
|
+
if (message.semantic !== 0) {
|
|
3634
|
+
obj.semantic = generatedCodeInfo_Annotation_SemanticToJSON(message.semantic);
|
|
3538
3635
|
}
|
|
3539
|
-
message.sourceFile !== undefined && (obj.sourceFile = message.sourceFile);
|
|
3540
|
-
message.begin !== undefined && (obj.begin = Math.round(message.begin));
|
|
3541
|
-
message.end !== undefined && (obj.end = Math.round(message.end));
|
|
3542
|
-
message.semantic !== undefined && (obj.semantic = generatedCodeInfo_Annotation_SemanticToJSON(message.semantic));
|
|
3543
3636
|
return obj;
|
|
3544
3637
|
},
|
|
3545
3638
|
create(base) {
|
|
@@ -3556,7 +3649,7 @@ exports.GeneratedCodeInfo_Annotation = {
|
|
|
3556
3649
|
return message;
|
|
3557
3650
|
},
|
|
3558
3651
|
};
|
|
3559
|
-
|
|
3652
|
+
const tsProtoGlobalThis = (() => {
|
|
3560
3653
|
if (typeof globalThis !== "undefined") {
|
|
3561
3654
|
return globalThis;
|
|
3562
3655
|
}
|
|
@@ -3609,4 +3702,4 @@ if (minimal_1.default.util.Long !== long_1.default) {
|
|
|
3609
3702
|
function isSet(value) {
|
|
3610
3703
|
return value !== null && value !== undefined;
|
|
3611
3704
|
}
|
|
3612
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb3RvLW1vZGVscy9nb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsb0JBQW9CO0FBQ3BCLGdEQUF3QjtBQUN4QixpRUFBcUM7QUFFeEIsUUFBQSxlQUFlLEdBQUcsaUJBQWlCLENBQUM7QUF1S2pELElBQVkseUJBeUNYO0FBekNELFdBQVkseUJBQXlCO0lBQ25DOzs7T0FHRztJQUNILHVGQUFlLENBQUE7SUFDZixxRkFBYyxDQUFBO0lBQ2Q7OztPQUdHO0lBQ0gscUZBQWMsQ0FBQTtJQUNkLHVGQUFlLENBQUE7SUFDZjs7O09BR0c7SUFDSCxxRkFBYyxDQUFBO0lBQ2QseUZBQWdCLENBQUE7SUFDaEIseUZBQWdCLENBQUE7SUFDaEIsbUZBQWEsQ0FBQTtJQUNiLHVGQUFlLENBQUE7SUFDZjs7Ozs7T0FLRztJQUNILHNGQUFlLENBQUE7SUFDZixpREFBaUQ7SUFDakQsMEZBQWlCLENBQUE7SUFDakIscUNBQXFDO0lBQ3JDLHNGQUFlLENBQUE7SUFDZix3RkFBZ0IsQ0FBQTtJQUNoQixvRkFBYyxDQUFBO0lBQ2QsNEZBQWtCLENBQUE7SUFDbEIsNEZBQWtCLENBQUE7SUFDbEIsMENBQTBDO0lBQzFDLHdGQUFnQixDQUFBO0lBQ2hCLDBDQUEwQztJQUMxQyx3RkFBZ0IsQ0FBQTtBQUNsQixDQUFDLEVBekNXLHlCQUF5QixHQUF6QixpQ0FBeUIsS0FBekIsaUNBQXlCLFFBeUNwQztBQUVELFNBQWdCLGlDQUFpQyxDQUFDLE1BQVc7SUFDM0QsUUFBUSxNQUFNLEVBQUU7UUFDZCxLQUFLLENBQUMsQ0FBQztRQUNQLEtBQUssYUFBYTtZQUNoQixPQUFPLHlCQUF5QixDQUFDLFdBQVcsQ0FBQztRQUMvQyxLQUFLLENBQUMsQ0FBQztRQUNQLEtBQUssWUFBWTtZQUNmLE9BQU8seUJBQXlCLENBQUMsVUFB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QUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEQsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtDQUFrQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRixJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsaUNBQWlDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdFLFFBQVEsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQy9ELFFBQVEsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQy9ELFlBQVksRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzNFLFVBQVUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLFFBQVEsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQy9ELE9BQU8sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FB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QyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7WUFDOUYsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7WUFDcEcsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7WUFDOUYsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7WUFDakcsVUFBVSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7WUFDekUsY0FBYyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7WUFDckYsZUFBZSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDcEYsZUFBZSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDcEYsV0FBVyxFQUFFLEtBQUssQ0FB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LFNBQVMsQ0FBQztBQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBMb25nIGZyb20gXCJsb25nXCI7XG5pbXBvcnQgX20wIGZyb20gXCJwcm90b2J1ZmpzL21pbmltYWxcIjtcblxuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9IFwiZ29vZ2xlLnByb3RvYnVmXCI7XG5cbi8qKlxuICogVGhlIHByb3RvY29sIGNvbXBpbGVyIGNhbiBvdXRwdXQgYSBGaWxlRGVzY3JpcHRvclNldCBjb250YWluaW5nIHRoZSAucHJvdG9cbiAqIGZpbGVzIGl0IHBhcnNlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlRGVzY3JpcHRvclNldCB7XG4gIGZpbGU6IEZpbGVEZXNjcmlwdG9yUHJvdG9bXTtcbn1cblxuLyoqIERlc2NyaWJlcyBhIGNvbXBsZXRlIC5wcm90byBmaWxlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlRGVzY3JpcHRvclByb3RvIHtcbiAgLyoqIGZpbGUgbmFtZSwgcmVsYXRpdmUgdG8gcm9vdCBvZiBzb3VyY2UgdHJlZSAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBlLmcuIFwiZm9vXCIsIFwiZm9vLmJhclwiLCBldGMuICovXG4gIHBhY2thZ2U6IHN0cmluZztcbiAgLyoqIE5hbWVzIG9mIGZpbGVzIGltcG9ydGVkIGJ5IHRoaXMgZmlsZS4gKi9cbiAgZGVwZW5kZW5jeTogc3RyaW5nW107XG4gIC8qKiBJbmRleGVzIG9mIHRoZSBwdWJsaWMgaW1wb3J0ZWQgZmlsZXMgaW4gdGhlIGRlcGVuZGVuY3kgbGlzdCBhYm92ZS4gKi9cbiAgcHVibGljRGVwZW5kZW5jeTogbnVtYmVyW107XG4gIC8qKlxuICAgKiBJbmRleGVzIG9mIHRoZSB3ZWFrIGltcG9ydGVkIGZpbGVzIGluIHRoZSBkZXBlbmRlbmN5IGxpc3QuXG4gICAqIEZvciBHb29nbGUtaW50ZXJuYWwgbWlncmF0aW9uIG9ubHkuIERvIG5vdCB1c2UuXG4gICAqL1xuICB3ZWFrRGVwZW5kZW5jeTogbnVtYmVyW107XG4gIC8qKiBBbGwgdG9wLWxldmVsIGRlZmluaXRpb25zIGluIHRoaXMgZmlsZS4gKi9cbiAgbWVzc2FnZVR5cGU6IERlc2NyaXB0b3JQcm90b1tdO1xuICBlbnVtVHlwZTogRW51bURlc2NyaXB0b3JQcm90b1tdO1xuICBzZXJ2aWNlOiBTZXJ2aWNlRGVzY3JpcHRvclByb3RvW107XG4gIGV4dGVuc2lvbjogRmllbGREZXNjcmlwdG9yUHJvdG9bXTtcbiAgb3B0aW9uczpcbiAgICB8IEZpbGVPcHRpb25zXG4gICAgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGlzIGZpZWxkIGNvbnRhaW5zIG9wdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcmlnaW5hbCBzb3VyY2UgY29kZS5cbiAgICogWW91IG1heSBzYWZlbHkgcmVtb3ZlIHRoaXMgZW50aXJlIGZpZWxkIHdpdGhvdXQgaGFybWluZyBydW50aW1lXG4gICAqIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGRlc2NyaXB0b3JzIC0tIHRoZSBpbmZvcm1hdGlvbiBpcyBuZWVkZWQgb25seSBieVxuICAgKiBkZXZlbG9wbWVudCB0b29scy5cbiAgICovXG4gIHNvdXJjZUNvZGVJbmZvOlxuICAgIHwgU291cmNlQ29kZUluZm9cbiAgICB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFRoZSBzeW50YXggb2YgdGhlIHByb3RvIGZpbGUuXG4gICAqIFRoZSBzdXBwb3J0ZWQgdmFsdWVzIGFyZSBcInByb3RvMlwiLCBcInByb3RvM1wiLCBhbmQgXCJlZGl0aW9uc1wiLlxuICAgKlxuICAgKiBJZiBgZWRpdGlvbmAgaXMgcHJlc2VudCwgdGhpcyB2YWx1ZSBtdXN0IGJlIFwiZWRpdGlvbnNcIi5cbiAgICovXG4gIHN5bnRheDogc3RyaW5nO1xuICAvKiogVGhlIGVkaXRpb24gb2YgdGhlIHByb3RvIGZpbGUsIHdoaWNoIGlzIGFuIG9wYXF1ZSBzdHJpbmcuICovXG4gIGVkaXRpb246IHN0cmluZztcbn1cblxuLyoqIERlc2NyaWJlcyBhIG1lc3NhZ2UgdHlwZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVzY3JpcHRvclByb3RvIHtcbiAgbmFtZTogc3RyaW5nO1xuICBmaWVsZDogRmllbGREZXNjcmlwdG9yUHJvdG9bXTtcbiAgZXh0ZW5zaW9uOiBGaWVsZERlc2NyaXB0b3JQcm90b1tdO1xuICBuZXN0ZWRUeXBlOiBEZXNjcmlwdG9yUHJvdG9bXTtcbiAgZW51bVR5cGU6IEVudW1EZXNjcmlwdG9yUHJvdG9bXTtcbiAgZXh0ZW5zaW9uUmFuZ2U6IERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZVtdO1xuICBvbmVvZkRlY2w6IE9uZW9mRGVzY3JpcHRvclByb3RvW107XG4gIG9wdGlvbnM6IE1lc3NhZ2VPcHRpb25zIHwgdW5kZWZpbmVkO1xuICByZXNlcnZlZFJhbmdlOiBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZVtdO1xuICAvKipcbiAgICogUmVzZXJ2ZWQgZmllbGQgbmFtZXMsIHdoaWNoIG1heSBub3QgYmUgdXNlZCBieSBmaWVsZHMgaW4gdGhlIHNhbWUgbWVzc2FnZS5cbiAgICogQSBnaXZlbiBuYW1lIG1heSBvbmx5IGJlIHJlc2VydmVkIG9uY2UuXG4gICAqL1xuICByZXNlcnZlZE5hbWU6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSB7XG4gIC8qKiBJbmNsdXNpdmUuICovXG4gIHN0YXJ0OiBudW1iZXI7XG4gIC8qKiBFeGNsdXNpdmUuICovXG4gIGVuZDogbnVtYmVyO1xuICBvcHRpb25zOiBFeHRlbnNpb25SYW5nZU9wdGlvbnMgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmFuZ2Ugb2YgcmVzZXJ2ZWQgdGFnIG51bWJlcnMuIFJlc2VydmVkIHRhZyBudW1iZXJzIG1heSBub3QgYmUgdXNlZCBieVxuICogZmllbGRzIG9yIGV4dGVuc2lvbiByYW5nZXMgaW4gdGhlIHNhbWUgbWVzc2FnZS4gUmVzZXJ2ZWQgcmFuZ2VzIG1heVxuICogbm90IG92ZXJsYXAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2Uge1xuICAvKiogSW5jbHVzaXZlLiAqL1xuICBzdGFydDogbnVtYmVyO1xuICAvKiogRXhjbHVzaXZlLiAqL1xuICBlbmQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHRlbnNpb25SYW5nZU9wdGlvbnMge1xuICAvKiogVGhlIHBhcnNlciBzdG9yZXMgb3B0aW9ucyBpdCBkb2Vzbid0IHJlY29nbml6ZSBoZXJlLiBTZWUgYWJvdmUuICovXG4gIHVuaW50ZXJwcmV0ZWRPcHRpb246IFVuaW50ZXJwcmV0ZWRPcHRpb25bXTtcbn1cblxuLyoqIERlc2NyaWJlcyBhIGZpZWxkIHdpdGhpbiBhIG1lc3NhZ2UuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkRGVzY3JpcHRvclByb3RvIHtcbiAgbmFtZTogc3RyaW5nO1xuICBudW1iZXI6IG51bWJlcjtcbiAgbGFiZWw6IEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsO1xuICAvKipcbiAgICogSWYgdHlwZV9uYW1lIGlzIHNldCwgdGhpcyBuZWVkIG5vdCBiZSBzZXQuICBJZiBib3RoIHRoaXMgYW5kIHR5cGVfbmFtZVxuICAgKiBhcmUgc2V0LCB0aGlzIG11c3QgYmUgb25lIG9mIFRZUEVfRU5VTSwgVFlQRV9NRVNTQUdFIG9yIFRZUEVfR1JPVVAuXG4gICAqL1xuICB0eXBlOiBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlO1xuICAvKipcbiAgICogRm9yIG1lc3NhZ2UgYW5kIGVudW0gdHlwZXMsIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIHR5cGUuICBJZiB0aGUgbmFtZVxuICAgKiBzdGFydHMgd2l0aCBhICcuJywgaXQgaXMgZnVsbHktcXVhbGlmaWVkLiAgT3RoZXJ3aXNlLCBDKystbGlrZSBzY29waW5nXG4gICAqIHJ1bGVzIGFyZSB1c2VkIHRvIGZpbmQgdGhlIHR5cGUgKGkuZS4gZmlyc3QgdGhlIG5lc3RlZCB0eXBlcyB3aXRoaW4gdGhpc1xuICAgKiBtZXNzYWdlIGFyZSBzZWFyY2hlZCwgdGhlbiB3aXRoaW4gdGhlIHBhcmVudCwgb24gdXAgdG8gdGhlIHJvb3RcbiAgICogbmFtZXNwYWNlKS5cbiAgICovXG4gIHR5cGVOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGb3IgZXh0ZW5zaW9ucywgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgdHlwZSBiZWluZyBleHRlbmRlZC4gIEl0IGlzXG4gICAqIHJlc29sdmVkIGluIHRoZSBzYW1lIG1hbm5lciBhcyB0eXBlX25hbWUuXG4gICAqL1xuICBleHRlbmRlZTogc3RyaW5nO1xuICAvKipcbiAgICogRm9yIG51bWVyaWMgdHlwZXMsIGNvbnRhaW5zIHRoZSBvcmlnaW5hbCB0ZXh0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZS5cbiAgICogRm9yIGJvb2xlYW5zLCBcInRydWVcIiBvciBcImZhbHNlXCIuXG4gICAqIEZvciBzdHJpbmdzLCBjb250YWlucyB0aGUgZGVmYXVsdCB0ZXh0IGNvbnRlbnRzIChub3QgZXNjYXBlZCBpbiBhbnkgd2F5KS5cbiAgICogRm9yIGJ5dGVzLCBjb250YWlucyB0aGUgQyBlc2NhcGVkIHZhbHVlLiAgQWxsIGJ5dGVzID49IDEyOCBhcmUgZXNjYXBlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogc3RyaW5nO1xuICAvKipcbiAgICogSWYgc2V0LCBnaXZlcyB0aGUgaW5kZXggb2YgYSBvbmVvZiBpbiB0aGUgY29udGFpbmluZyB0eXBlJ3Mgb25lb2ZfZGVjbFxuICAgKiBsaXN0LiAgVGhpcyBmaWVsZCBpcyBhIG1lbWJlciBvZiB0aGF0IG9uZW9mLlxuICAgKi9cbiAgb25lb2ZJbmRleDogbnVtYmVyO1xuICAvKipcbiAgICogSlNPTiBuYW1lIG9mIHRoaXMgZmllbGQuIFRoZSB2YWx1ZSBpcyBzZXQgYnkgcHJvdG9jb2wgY29tcGlsZXIuIElmIHRoZVxuICAgKiB1c2VyIGhhcyBzZXQgYSBcImpzb25fbmFtZVwiIG9wdGlvbiBvbiB0aGlzIGZpZWxkLCB0aGF0IG9wdGlvbidzIHZhbHVlXG4gICAqIHdpbGwgYmUgdXNlZC4gT3RoZXJ3aXNlLCBpdCdzIGRlZHVjZWQgZnJvbSB0aGUgZmllbGQncyBuYW1lIGJ5IGNvbnZlcnRpbmdcbiAgICogaXQgdG8gY2FtZWxDYXNlLlxuICAgKi9cbiAganNvbk5hbWU6IHN0cmluZztcbiAgb3B0aW9uczpcbiAgICB8IEZpZWxkT3B0aW9uc1xuICAgIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogSWYgdHJ1ZSwgdGhpcyBpcyBhIHByb3RvMyBcIm9wdGlvbmFsXCIuIFdoZW4gYSBwcm90bzMgZmllbGQgaXMgb3B0aW9uYWwsIGl0XG4gICAqIHRyYWNrcyBwcmVzZW5jZSByZWdhcmRsZXNzIG9mIGZpZWxkIHR5cGUuXG4gICAqXG4gICAqIFdoZW4gcHJvdG8zX29wdGlvbmFsIGlzIHRydWUsIHRoaXMgZmllbGQgbXVzdCBiZSBiZWxvbmcgdG8gYSBvbmVvZiB0b1xuICAgKiBzaWduYWwgdG8gb2xkIHByb3RvMyBjbGllbnRzIHRoYXQgcHJlc2VuY2UgaXMgdHJhY2tlZCBmb3IgdGhpcyBmaWVsZC4gVGhpc1xuICAgKiBvbmVvZiBpcyBrbm93biBhcyBhIFwic3ludGhldGljXCIgb25lb2YsIGFuZCB0aGlzIGZpZWxkIG11c3QgYmUgaXRzIHNvbGVcbiAgICogbWVtYmVyIChlYWNoIHByb3RvMyBvcHRpb25hbCBmaWVsZCBnZXRzIGl0cyBvd24gc3ludGhldGljIG9uZW9mKS4gU3ludGhldGljXG4gICAqIG9uZW9mcyBleGlzdCBpbiB0aGUgZGVzY3JpcHRvciBvbmx5LCBhbmQgZG8gbm90IGdlbmVyYXRlIGFueSBBUEkuIFN5bnRoZXRpY1xuICAgKiBvbmVvZnMgbXVzdCBiZSBvcmRlcmVkIGFmdGVyIGFsbCBcInJlYWxcIiBvbmVvZnMuXG4gICAqXG4gICAqIEZvciBtZXNzYWdlIGZpZWxkcywgcHJvdG8zX29wdGlvbmFsIGRvZXNuJ3QgY3JlYXRlIGFueSBzZW1hbnRpYyBjaGFuZ2UsXG4gICAqIHNpbmNlIG5vbi1yZXBlYXRlZCBtZXNzYWdlIGZpZWxkcyBhbHdheXMgdHJhY2sgcHJlc2VuY2UuIEhvd2V2ZXIgaXQgc3RpbGxcbiAgICogaW5kaWNhdGVzIHRoZSBzZW1hbnRpYyBkZXRhaWwgb2Ygd2hldGhlciB0aGUgdXNlciB3cm90ZSBcIm9wdGlvbmFsXCIgb3Igbm90LlxuICAgKiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIHJvdW5kLXRyaXBwaW5nIHRoZSAucHJvdG8gZmlsZS4gRm9yIGNvbnNpc3RlbmN5IHdlXG4gICAqIGdpdmUgbWVzc2FnZSBmaWVsZHMgYSBzeW50aGV0aWMgb25lb2YgYWxzbywgZXZlbiB0aG91Z2ggaXQgaXMgbm90IHJlcXVpcmVkXG4gICAqIHRvIHRyYWNrIHByZXNlbmNlLiBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGJlY2F1c2UgdGhlIHBhcnNlciBjYW4ndFxuICAgKiB0ZWxsIGlmIGEgZmllbGQgaXMgYSBtZXNzYWdlIG9yIGFuIGVudW0sIHNvIGl0IG11c3QgYWx3YXlzIGNyZWF0ZSBhXG4gICAqIHN5bnRoZXRpYyBvbmVvZi5cbiAgICpcbiAgICogUHJvdG8yIG9wdGlvbmFsIGZpZWxkcyBkbyBub3Qgc2V0IHRoaXMgZmxhZywgYmVjYXVzZSB0aGV5IGFscmVhZHkgaW5kaWNhdGVcbiAgICogb3B0aW9uYWwgd2l0aCBgTEFCRUxfT1BUSU9OQUxgLlxuICAgKi9cbiAgcHJvdG8zT3B0aW9uYWw6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBlbnVtIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUge1xuICAvKipcbiAgICogVFlQRV9ET1VCTEUgLSAwIGlzIHJlc2VydmVkIGZvciBlcnJvcnMuXG4gICAqIE9yZGVyIGlzIHdlaXJkIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMuXG4gICAqL1xuICBUWVBFX0RPVUJMRSA9IDEsXG4gIFRZUEVfRkxPQVQgPSAyLFxuICAvKipcbiAgICogVFlQRV9JTlQ2NCAtIE5vdCBaaWdaYWcgZW5jb2RlZC4gIE5lZ2F0aXZlIG51bWJlcnMgdGFrZSAxMCBieXRlcy4gIFVzZSBUWVBFX1NJTlQ2NCBpZlxuICAgKiBuZWdhdGl2ZSB2YWx1ZXMgYXJlIGxpa2VseS5cbiAgICovXG4gIFRZUEVfSU5UNjQgPSAzLFxuICBUWVBFX1VJTlQ2NCA9IDQsXG4gIC8qKlxuICAgKiBUWVBFX0lOVDMyIC0gTm90IFppZ1phZyBlbmNvZGVkLiAgTmVnYXRpdmUgbnVtYmVycyB0YWtlIDEwIGJ5dGVzLiAgVXNlIFRZUEVfU0lOVDMyIGlmXG4gICAqIG5lZ2F0aXZlIHZhbHVlcyBhcmUgbGlrZWx5LlxuICAgKi9cbiAgVFlQRV9JTlQzMiA9IDUsXG4gIFRZUEVfRklYRUQ2NCA9IDYsXG4gIFRZUEVfRklYRUQzMiA9IDcsXG4gIFRZUEVfQk9PTCA9IDgsXG4gIFRZUEVfU1RSSU5HID0gOSxcbiAgLyoqXG4gICAqIFRZUEVfR1JPVVAgLSBUYWctZGVsaW1pdGVkIGFnZ3JlZ2F0ZS5cbiAgICogR3JvdXAgdHlwZSBpcyBkZXByZWNhdGVkIGFuZCBub3Qgc3VwcG9ydGVkIGluIHByb3RvMy4gSG93ZXZlciwgUHJvdG8zXG4gICAqIGltcGxlbWVudGF0aW9ucyBzaG91bGQgc3RpbGwgYmUgYWJsZSB0byBwYXJzZSB0aGUgZ3JvdXAgd2lyZSBmb3JtYXQgYW5kXG4gICAqIHRyZWF0IGdyb3VwIGZpZWxkcyBhcyB1bmtub3duIGZpZWxkcy5cbiAgICovXG4gIFRZUEVfR1JPVVAgPSAxMCxcbiAgLyoqIFRZUEVfTUVTU0FHRSAtIExlbmd0aC1kZWxpbWl0ZWQgYWdncmVnYXRlLiAqL1xuICBUWVBFX01FU1NBR0UgPSAxMSxcbiAgLyoqIFRZUEVfQllURVMgLSBOZXcgaW4gdmVyc2lvbiAyLiAqL1xuICBUWVBFX0JZVEVTID0gMTIsXG4gIFRZUEVfVUlOVDMyID0gMTMsXG4gIFRZUEVfRU5VTSA9IDE0LFxuICBUWVBFX1NGSVhFRDMyID0gMTUsXG4gIFRZUEVfU0ZJWEVENjQgPSAxNixcbiAgLyoqIFRZUEVfU0lOVDMyIC0gVXNlcyBaaWdaYWcgZW5jb2RpbmcuICovXG4gIFRZUEVfU0lOVDMyID0gMTcsXG4gIC8qKiBUWVBFX1NJTlQ2NCAtIFVzZXMgWmlnWmFnIGVuY29kaW5nLiAqL1xuICBUWVBFX1NJTlQ2NCA9IDE4LFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZUZyb21KU09OKG9iamVjdDogYW55KTogRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZSB7XG4gIHN3aXRjaCAob2JqZWN0KSB7XG4gICAgY2FzZSAxOlxuICAgIGNhc2UgXCJUWVBFX0RPVUJMRVwiOlxuICAgICAgcmV0dXJuIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9ET1VCTEU7XG4gICAgY2FzZSAyOlxuICAgIGNhc2UgXCJUWVBFX0ZMT0FUXCI6XG4gICAgICByZXR1cm4gRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX0ZMT0FUO1xuICAgIGNhc2UgMzpcbiAgICBjYXNlIFwiVFlQRV9JTlQ2NFwiOlxuICAgICAgcmV0dXJuIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9JTlQ2NDtcbiAgICBjYXNlIDQ6XG4gICAgY2FzZSBcIlRZUEVfVUlOVDY0XCI6XG4gICAgICByZXR1cm4gRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX1VJTlQ2NDtcbiAgICBjYXNlIDU6XG4gICAgY2FzZSBcIlRZUEVfSU5UMzJcIjpcbiAgICAgIHJldHVybiBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfSU5UMzI7XG4gICAgY2FzZSA2OlxuICAgIGNhc2UgXCJUWVBFX0ZJWEVENjRcIjpcbiAgICAgIHJldHVybiBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfRklYRUQ2NDtcbiAgICBjYXNlIDc6XG4gICAgY2FzZSBcIlRZUEVfRklYRUQzMlwiOlxuICAgICAgcmV0dXJuIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9GSVhFRDMyO1xuICAgIGNhc2UgODpcbiAgICBjYXNlIFwiVFlQRV9CT09MXCI6XG4gICAgICByZXR1cm4gRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX0JPT0w7XG4gICAgY2FzZSA5OlxuICAgIGNhc2UgXCJUWVBFX1NUUklOR1wiOlxuICAgICAgcmV0dXJuIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9TVFJJTkc7XG4gICAgY2FzZSAxMDpcbiAgICBjYXNlIFwiVFlQRV9HUk9VUFwiOlxuICAgICAgcmV0dXJuIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9HUk9VUDtcbiAgICBjYXNlIDExOlxuICAgIGNhc2UgXCJUWVBFX01FU1NBR0VcIjpcbiAgICAgIHJldHVybiBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfTUVTU0FHRTtcbiAgICBjYXNlIDEyOlxuICAgIGNhc2UgXCJUWVBFX0JZVEVTXCI6XG4gICAgICByZXR1cm4gRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX0JZVEVTO1xuICAgIGNhc2UgMTM6XG4gICAgY2FzZSBcIlRZUEVfVUlOVDMyXCI6XG4gICAgICByZXR1cm4gRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX1VJTlQzMjtcbiAgICBjYXNlIDE0OlxuICAgIGNhc2UgXCJUWVBFX0VOVU1cIjpcbiAgICAgIHJldHVybiBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfRU5VTTtcbiAgICBjYXNlIDE1OlxuICAgIGNhc2UgXCJUWVBFX1NGSVhFRDMyXCI6XG4gICAgICByZXR1cm4gRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX1NGSVhFRDMyO1xuICAgIGNhc2UgMTY6XG4gICAgY2FzZSBcIlRZUEVfU0ZJWEVENjRcIjpcbiAgICAgIHJldHVybiBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfU0ZJWEVENjQ7XG4gICAgY2FzZSAxNzpcbiAgICBjYXNlIFwiVFlQRV9TSU5UMzJcIjpcbiAgICAgIHJldHVybiBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfU0lOVDMyO1xuICAgIGNhc2UgMTg6XG4gICAgY2FzZSBcIlRZUEVfU0lOVDY0XCI6XG4gICAgICByZXR1cm4gRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX1NJTlQ2NDtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IHRzUHJvdG9HbG9iYWxUaGlzLkVycm9yKFwiVW5yZWNvZ25pemVkIGVudW0gdmFsdWUgXCIgKyBvYmplY3QgKyBcIiBmb3IgZW51bSBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlXCIpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWVsZERlc2NyaXB0b3JQcm90b19UeXBlVG9KU09OKG9iamVjdDogRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZSk6IHN0cmluZyB7XG4gIHN3aXRjaCAob2JqZWN0KSB7XG4gICAgY2FzZSBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfRE9VQkxFOlxuICAgICAgcmV0dXJuIFwiVFlQRV9ET1VCTEVcIjtcbiAgICBjYXNlIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9GTE9BVDpcbiAgICAgIHJldHVybiBcIlRZUEVfRkxPQVRcIjtcbiAgICBjYXNlIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9JTlQ2NDpcbiAgICAgIHJldHVybiBcIlRZUEVfSU5UNjRcIjtcbiAgICBjYXNlIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9VSU5UNjQ6XG4gICAgICByZXR1cm4gXCJUWVBFX1VJTlQ2NFwiO1xuICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX0lOVDMyOlxuICAgICAgcmV0dXJuIFwiVFlQRV9JTlQzMlwiO1xuICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX0ZJWEVENjQ6XG4gICAgICByZXR1cm4gXCJUWVBFX0ZJWEVENjRcIjtcbiAgICBjYXNlIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9GSVhFRDMyOlxuICAgICAgcmV0dXJuIFwiVFlQRV9GSVhFRDMyXCI7XG4gICAgY2FzZSBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfQk9PTDpcbiAgICAgIHJldHVybiBcIlRZUEVfQk9PTFwiO1xuICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX1NUUklORzpcbiAgICAgIHJldHVybiBcIlRZUEVfU1RSSU5HXCI7XG4gICAgY2FzZSBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfR1JPVVA6XG4gICAgICByZXR1cm4gXCJUWVBFX0dST1VQXCI7XG4gICAgY2FzZSBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfTUVTU0FHRTpcbiAgICAgIHJldHVybiBcIlRZUEVfTUVTU0FHRVwiO1xuICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX0JZVEVTOlxuICAgICAgcmV0dXJuIFwiVFlQRV9CWVRFU1wiO1xuICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX1VJTlQzMjpcbiAgICAgIHJldHVybiBcIlRZUEVfVUlOVDMyXCI7XG4gICAgY2FzZSBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfRU5VTTpcbiAgICAgIHJldHVybiBcIlRZUEVfRU5VTVwiO1xuICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX1NGSVhFRDMyOlxuICAgICAgcmV0dXJuIFwiVFlQRV9TRklYRUQzMlwiO1xuICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX1NGSVhFRDY0OlxuICAgICAgcmV0dXJuIFwiVFlQRV9TRklYRUQ2NFwiO1xuICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX1NJTlQzMjpcbiAgICAgIHJldHVybiBcIlRZUEVfU0lOVDMyXCI7XG4gICAgY2FzZSBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfU0lOVDY0OlxuICAgICAgcmV0dXJuIFwiVFlQRV9TSU5UNjRcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IHRzUHJvdG9HbG9iYWxUaGlzLkVycm9yKFwiVW5yZWNvZ25pemVkIGVudW0gdmFsdWUgXCIgKyBvYmplY3QgKyBcIiBmb3IgZW51bSBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlXCIpO1xuICB9XG59XG5cbmV4cG9ydCBlbnVtIEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsIHtcbiAgLyoqIExBQkVMX09QVElPTkFMIC0gMCBpcyByZXNlcnZlZCBmb3IgZXJyb3JzICovXG4gIExBQkVMX09QVElPTkFMID0gMSxcbiAgTEFCRUxfUkVRVUlSRUQgPSAyLFxuICBMQUJFTF9SRVBFQVRFRCA9IDMsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWVsZERlc2NyaXB0b3JQcm90b19MYWJlbEZyb21KU09OKG9iamVjdDogYW55KTogRmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWwge1xuICBzd2l0Y2ggKG9iamVjdCkge1xuICAgIGNhc2UgMTpcbiAgICBjYXNlIFwiTEFCRUxfT1BUSU9OQUxcIjpcbiAgICAgIHJldHVybiBGaWVsZERlc2NyaXB0b3JQcm90b19MYWJlbC5MQUJFTF9PUFRJT05BTDtcbiAgICBjYXNlIDI6XG4gICAgY2FzZSBcIkxBQkVMX1JFUVVJUkVEXCI6XG4gICAgICByZXR1cm4gRmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWwuTEFCRUxfUkVRVUlSRUQ7XG4gICAgY2FzZSAzOlxuICAgIGNhc2UgXCJMQUJFTF9SRVBFQVRFRFwiOlxuICAgICAgcmV0dXJuIEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsLkxBQkVMX1JFUEVBVEVEO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgdHNQcm90b0dsb2JhbFRoaXMuRXJyb3IoXCJVbnJlY29nbml6ZWQgZW51bSB2YWx1ZSBcIiArIG9iamVjdCArIFwiIGZvciBlbnVtIEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsXCIpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWVsZERlc2NyaXB0b3JQcm90b19MYWJlbFRvSlNPTihvYmplY3Q6IEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsKTogc3RyaW5nIHtcbiAgc3dpdGNoIChvYmplY3QpIHtcbiAgICBjYXNlIEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsLkxBQkVMX09QVElPTkFMOlxuICAgICAgcmV0dXJuIFwiTEFCRUxfT1BUSU9OQUxcIjtcbiAgICBjYXNlIEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsLkxBQkVMX1JFUVVJUkVEOlxuICAgICAgcmV0dXJuIFwiTEFCRUxfUkVRVUlSRURcIjtcbiAgICBjYXNlIEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsLkxBQkVMX1JFUEVBVEVEOlxuICAgICAgcmV0dXJuIFwiTEFCRUxfUkVQRUFURURcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IHRzUHJvdG9HbG9iYWxUaGlzLkVycm9yKFwiVW5yZWNvZ25pemVkIGVudW0gdmFsdWUgXCIgKyBvYmplY3QgKyBcIiBmb3IgZW51bSBGaWVsZERlc2NyaXB0b3JQcm90b19MYWJlbFwiKTtcbiAgfVxufVxuXG4vKiogRGVzY3JpYmVzIGEgb25lb2YuICovXG5leHBvcnQgaW50ZXJmYWNlIE9uZW9mRGVzY3JpcHRvclByb3RvIHtcbiAgbmFtZTogc3RyaW5nO1xuICBvcHRpb25zOiBPbmVvZk9wdGlvbnMgfCB1bmRlZmluZWQ7XG59XG5cbi8qKiBEZXNjcmliZXMgYW4gZW51bSB0eXBlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnVtRGVzY3JpcHRvclByb3RvIHtcbiAgbmFtZTogc3RyaW5nO1xuICB2YWx1ZTogRW51bVZhbHVlRGVzY3JpcHRvclByb3RvW107XG4gIG9wdGlvbnM6XG4gICAgfCBFbnVtT3B0aW9uc1xuICAgIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogUmFuZ2Ugb2YgcmVzZXJ2ZWQgbnVtZXJpYyB2YWx1ZXMuIFJlc2VydmVkIG51bWVyaWMgdmFsdWVzIG1heSBub3QgYmUgdXNlZFxuICAgKiBieSBlbnVtIHZhbHVlcyBpbiB0aGUgc2FtZSBlbnVtIGRlY2xhcmF0aW9uLiBSZXNlcnZlZCByYW5nZXMgbWF5IG5vdFxuICAgKiBvdmVybGFwLlxuICAgKi9cbiAgcmVzZXJ2ZWRSYW5nZTogRW51bURlc2NyaXB0b3JQcm90b19FbnVtUmVzZXJ2ZWRSYW5nZVtdO1xuICAvKipcbiAgICogUmVzZXJ2ZWQgZW51bSB2YWx1ZSBuYW1lcywgd2hpY2ggbWF5IG5vdCBiZSByZXVzZWQuIEEgZ2l2ZW4gbmFtZSBtYXkgb25seVxuICAgKiBiZSByZXNlcnZlZCBvbmNlLlxuICAgKi9cbiAgcmVzZXJ2ZWROYW1lOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBSYW5nZSBvZiByZXNlcnZlZCBudW1lcmljIHZhbHVlcy4gUmVzZXJ2ZWQgdmFsdWVzIG1heSBub3QgYmUgdXNlZCBieVxuICogZW50cmllcyBpbiB0aGUgc2FtZSBlbnVtLiBSZXNlcnZlZCByYW5nZXMgbWF5IG5vdCBvdmVybGFwLlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIGlzIGRpc3RpbmN0IGZyb20gRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UgaW4gdGhhdCBpdFxuICogaXMgaW5jbHVzaXZlIHN1Y2ggdGhhdCBpdCBjYW4gYXBwcm9wcmlhdGVseSByZXByZXNlbnQgdGhlIGVudGlyZSBpbnQzMlxuICogZG9tYWluLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudW1EZXNjcmlwdG9yUHJvdG9fRW51bVJlc2VydmVkUmFuZ2Uge1xuICAvKiogSW5jbHVzaXZlLiAqL1xuICBzdGFydDogbnVtYmVyO1xuICAvKiogSW5jbHVzaXZlLiAqL1xuICBlbmQ6IG51bWJlcjtcbn1cblxuLyoqIERlc2NyaWJlcyBhIHZhbHVlIHdpdGhpbiBhbiBlbnVtLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ge1xuICBuYW1lOiBzdHJpbmc7XG4gIG51bWJlcjogbnVtYmVyO1xuICBvcHRpb25zOiBFbnVtVmFsdWVPcHRpb25zIHwgdW5kZWZpbmVkO1xufVxuXG4vKiogRGVzY3JpYmVzIGEgc2VydmljZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZURlc2NyaXB0b3JQcm90byB7XG4gIG5hbWU6IHN0cmluZztcbiAgbWV0aG9kOiBNZXRob2REZXNjcmlwdG9yUHJvdG9bXTtcbiAgb3B0aW9uczogU2VydmljZU9wdGlvbnMgfCB1bmRlZmluZWQ7XG59XG5cbi8qKiBEZXNjcmliZXMgYSBtZXRob2Qgb2YgYSBzZXJ2aWNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXRob2REZXNjcmlwdG9yUHJvdG8ge1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJbnB1dCBhbmQgb3V0cHV0IHR5cGUgbmFtZXMuICBUaGVzZSBhcmUgcmVzb2x2ZWQgaW4gdGhlIHNhbWUgd2F5IGFzXG4gICAqIEZpZWxkRGVzY3JpcHRvclByb3RvLnR5cGVfbmFtZSwgYnV0IG11c3QgcmVmZXIgdG8gYSBtZXNzYWdlIHR5cGUuXG4gICAqL1xuICBpbnB1dFR5cGU6IHN0cmluZztcbiAgb3V0cHV0VHlwZTogc3RyaW5nO1xuICBvcHRpb25zOlxuICAgIHwgTWV0aG9kT3B0aW9uc1xuICAgIHwgdW5kZWZpbmVkO1xuICAvKiogSWRlbnRpZmllcyBpZiBjbGllbnQgc3RyZWFtcyBtdWx0aXBsZSBjbGllbnQgbWVzc2FnZXMgKi9cbiAgY2xpZW50U3RyZWFtaW5nOiBib29sZWFuO1xuICAvKiogSWRlbnRpZmllcyBpZiBzZXJ2ZXIgc3RyZWFtcyBtdWx0aXBsZSBzZXJ2ZXIgbWVzc2FnZXMgKi9cbiAgc2VydmVyU3RyZWFtaW5nOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNldHMgdGhlIEphdmEgcGFja2FnZSB3aGVyZSBjbGFzc2VzIGdlbmVyYXRlZCBmcm9tIHRoaXMgLnByb3RvIHdpbGwgYmVcbiAgICogcGxhY2VkLiAgQnkgZGVmYXVsdCwgdGhlIHByb3RvIHBhY2thZ2UgaXMgdXNlZCwgYnV0IHRoaXMgaXMgb2Z0ZW5cbiAgICogaW5hcHByb3ByaWF0ZSBiZWNhdXNlIHByb3RvIHBhY2thZ2VzIGRvIG5vdCBub3JtYWxseSBzdGFydCB3aXRoIGJhY2t3YXJkc1xuICAgKiBkb21haW4gbmFtZXMuXG4gICAqL1xuICBqYXZhUGFja2FnZTogc3RyaW5nO1xuICAvKipcbiAgICogQ29udHJvbHMgdGhlIG5hbWUgb2YgdGhlIHdyYXBwZXIgSmF2YSBjbGFzcyBnZW5lcmF0ZWQgZm9yIHRoZSAucHJvdG8gZmlsZS5cbiAgICogVGhhdCBjbGFzcyB3aWxsIGFsd2F5cyBjb250YWluIHRoZSAucHJvdG8gZmlsZSdzIGdldERlc2NyaXB0b3IoKSBtZXRob2QgYXNcbiAgICogd2VsbCBhcyBhbnkgdG9wLWxldmVsIGV4dGVuc2lvbnMgZGVmaW5lZCBpbiB0aGUgLnByb3RvIGZpbGUuXG4gICAqIElmIGphdmFfbXVsdGlwbGVfZmlsZXMgaXMgZGlzYWJsZWQsIHRoZW4gYWxsIHRoZSBvdGhlciBjbGFzc2VzIGZyb20gdGhlXG4gICAqIC5wcm90byBmaWxlIHdpbGwgYmUgbmVzdGVkIGluc2lkZSB0aGUgc2luZ2xlIHdyYXBwZXIgb3V0ZXIgY2xhc3MuXG4gICAqL1xuICBqYXZhT3V0ZXJDbGFzc25hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIElmIGVuYWJsZWQsIHRoZW4gdGhlIEphdmEgY29kZSBnZW5lcmF0b3Igd2lsbCBnZW5lcmF0ZSBhIHNlcGFyYXRlIC5qYXZhXG4gICAqIGZpbGUgZm9yIGVhY2ggdG9wLWxldmVsIG1lc3NhZ2UsIGVudW0sIGFuZCBzZXJ2aWNlIGRlZmluZWQgaW4gdGhlIC5wcm90b1xuICAgKiBmaWxlLiAgVGh1cywgdGhlc2UgdHlwZXMgd2lsbCAqbm90KiBiZSBuZXN0ZWQgaW5zaWRlIHRoZSB3cmFwcGVyIGNsYXNzXG4gICAqIG5hbWVkIGJ5IGphdmFfb3V0ZXJfY2xhc3NuYW1lLiAgSG93ZXZlciwgdGhlIHdyYXBwZXIgY2xhc3Mgd2lsbCBzdGlsbCBiZVxuICAgKiBnZW5lcmF0ZWQgdG8gY29udGFpbiB0aGUgZmlsZSdzIGdldERlc2NyaXB0b3IoKSBtZXRob2QgYXMgd2VsbCBhcyBhbnlcbiAgICogdG9wLWxldmVsIGV4dGVuc2lvbnMgZGVmaW5lZCBpbiB0aGUgZmlsZS5cbiAgICovXG4gIGphdmFNdWx0aXBsZUZpbGVzOiBib29sZWFuO1xuICAvKipcbiAgICogVGhpcyBvcHRpb24gZG9lcyBub3RoaW5nLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgamF2YUdlbmVyYXRlRXF1YWxzQW5kSGFzaDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElmIHNldCB0cnVlLCB0aGVuIHRoZSBKYXZhMiBjb2RlIGdlbmVyYXRvciB3aWxsIGdlbmVyYXRlIGNvZGUgdGhhdFxuICAgKiB0aHJvd3MgYW4gZXhjZXB0aW9uIHdoZW5ldmVyIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBhc3NpZ24gYSBub24tVVRGLThcbiAgICogYnl0ZSBzZXF1ZW5jZSB0byBhIHN0cmluZyBmaWVsZC5cbiAgICogTWVzc2FnZSByZWZsZWN0aW9uIHdpbGwgZG8gdGhlIHNhbWUuXG4gICAqIEhvd2V2ZXIsIGFuIGV4dGVuc2lvbiBmaWVsZCBzdGlsbCBhY2NlcHRzIG5vbi1VVEYtOCBieXRlIHNlcXVlbmNlcy5cbiAgICogVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB3aGVuIHVzZWQgd2l0aCB0aGUgbGl0ZSBydW50aW1lLlxuICAgKi9cbiAgamF2YVN0cmluZ0NoZWNrVXRmODogYm9vbGVhbjtcbiAgb3B0aW1pemVGb3I6IEZpbGVPcHRpb25zX09wdGltaXplTW9kZTtcbiAgLyoqXG4gICAqIFNldHMgdGhlIEdvIHBhY2thZ2Ugd2hlcmUgc3RydWN0cyBnZW5lcmF0ZWQgZnJvbSB0aGlzIC5wcm90byB3aWxsIGJlXG4gICAqIHBsYWNlZC4gSWYgb21pdHRlZCwgdGhlIEdvIHBhY2thZ2Ugd2lsbCBiZSBkZXJpdmVkIGZyb20gdGhlIGZvbGxvd2luZzpcbiAgICogICAtIFRoZSBiYXNlbmFtZSBvZiB0aGUgcGFja2FnZSBpbXBvcnQgcGF0aCwgaWYgcHJvdmlkZWQuXG4gICAqICAgLSBPdGhlcndpc2UsIHRoZSBwYWNrYWdlIHN0YXRlbWVudCBpbiB0aGUgLnByb3RvIGZpbGUsIGlmIHByZXNlbnQuXG4gICAqICAgLSBPdGhlcndpc2UsIHRoZSBiYXNlbmFtZSBvZiB0aGUgLnByb3RvIGZpbGUsIHdpdGhvdXQgZXh0ZW5zaW9uLlxuICAgKi9cbiAgZ29QYWNrYWdlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTaG91bGQgZ2VuZXJpYyBzZXJ2aWNlcyBiZSBnZW5lcmF0ZWQgaW4gZWFjaCBsYW5ndWFnZT8gIFwiR2VuZXJpY1wiIHNlcnZpY2VzXG4gICAqIGFyZSBub3Qgc3BlY2lmaWMgdG8gYW55IHBhcnRpY3VsYXIgUlBDIHN5c3RlbS4gIFRoZXkgYXJlIGdlbmVyYXRlZCBieSB0aGVcbiAgICogbWFpbiBjb2RlIGdlbmVyYXRvcnMgaW4gZWFjaCBsYW5ndWFnZSAod2l0aG91dCBhZGRpdGlvbmFsIHBsdWdpbnMpLlxuICAgKiBHZW5lcmljIHNlcnZpY2VzIHdlcmUgdGhlIG9ubHkga2luZCBvZiBzZXJ2aWNlIGdlbmVyYXRpb24gc3VwcG9ydGVkIGJ5XG4gICAqIGVhcmx5IHZlcnNpb25zIG9mIGdvb2dsZS5wcm90b2J1Zi5cbiAgICpcbiAgICogR2VuZXJpYyBzZXJ2aWNlcyBhcmUgbm93IGNvbnNpZGVyZWQgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB1c2luZyBwbHVnaW5zXG4gICAqIHRoYXQgZ2VuZXJhdGUgY29kZSBzcGVjaWZpYyB0byB5b3VyIHBhcnRpY3VsYXIgUlBDIHN5c3RlbS4gIFRoZXJlZm9yZSxcbiAgICogdGhlc2UgZGVmYXVsdCB0byBmYWxzZS4gIE9sZCBjb2RlIHdoaWNoIGRlcGVuZHMgb24gZ2VuZXJpYyBzZXJ2aWNlcyBzaG91bGRcbiAgICogZXhwbGljaXRseSBzZXQgdGhlbSB0byB0cnVlLlxuICAgKi9cbiAgY2NHZW5lcmljU2VydmljZXM6IGJvb2xlYW47XG4gIGphdmFHZW5lcmljU2VydmljZXM6IGJvb2xlYW47XG4gIHB5R2VuZXJpY1NlcnZpY2VzOiBib29sZWFuO1xuICBwaHBHZW5lcmljU2VydmljZXM6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJcyB0aGlzIGZpbGUgZGVwcmVjYXRlZD9cbiAgICogRGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0sIHRoaXMgY2FuIGVtaXQgRGVwcmVjYXRlZCBhbm5vdGF0aW9uc1xuICAgKiBmb3IgZXZlcnl0aGluZyBpbiB0aGUgZmlsZSwgb3IgaXQgd2lsbCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQ7IGluIHRoZSB2ZXJ5XG4gICAqIGxlYXN0LCB0aGlzIGlzIGEgZm9ybWFsaXphdGlvbiBmb3IgZGVwcmVjYXRpbmcgZmlsZXMuXG4gICAqL1xuICBkZXByZWNhdGVkOiBib29sZWFuO1xuICAvKipcbiAgICogRW5hYmxlcyB0aGUgdXNlIG9mIGFyZW5hcyBmb3IgdGhlIHByb3RvIG1lc3NhZ2VzIGluIHRoaXMgZmlsZS4gVGhpcyBhcHBsaWVzXG4gICAqIG9ubHkgdG8gZ2VuZXJhdGVkIGNsYXNzZXMgZm9yIEMrKy5cbiAgICovXG4gIGNjRW5hYmxlQXJlbmFzOiBib29sZWFuO1xuICAvKipcbiAgICogU2V0cyB0aGUgb2JqZWN0aXZlIGMgY2xhc3MgcHJlZml4IHdoaWNoIGlzIHByZXBlbmRlZCB0byBhbGwgb2JqZWN0aXZlIGNcbiAgICogZ2VuZXJhdGVkIGNsYXNzZXMgZnJvbSB0aGlzIC5wcm90by4gVGhlcmUgaXMgbm8gZGVmYXVsdC5cbiAgICovXG4gIG9iamNDbGFzc1ByZWZpeDogc3RyaW5nO1xuICAvKiogTmFtZXNwYWNlIGZvciBnZW5lcmF0ZWQgY2xhc3NlczsgZGVmYXVsdHMgdG8gdGhlIHBhY2thZ2UuICovXG4gIGNzaGFycE5hbWVzcGFjZTogc3RyaW5nO1xuICAvKipcbiAgICogQnkgZGVmYXVsdCBTd2lmdCBnZW5lcmF0b3JzIHdpbGwgdGFrZSB0aGUgcHJvdG8gcGFja2FnZSBhbmQgQ2FtZWxDYXNlIGl0XG4gICAqIHJlcGxhY2luZyAnLicgd2l0aCB1bmRlcnNjb3JlIGFuZCB1c2UgdGhhdCB0byBwcmVmaXggdGhlIHR5cGVzL3N5bWJvbHNcbiAgICogZGVmaW5lZC4gV2hlbiB0aGlzIG9wdGlvbnMgaXMgcHJvdmlkZWQsIHRoZXkgd2lsbCB1c2UgdGhpcyB2YWx1ZSBpbnN0ZWFkXG4gICAqIHRvIHByZWZpeCB0aGUgdHlwZXMvc3ltYm9scyBkZWZpbmVkLlxuICAgKi9cbiAgc3dpZnRQcmVmaXg6IHN0cmluZztcbiAgLyoqXG4gICAqIFNldHMgdGhlIHBocCBjbGFzcyBwcmVmaXggd2hpY2ggaXMgcHJlcGVuZGVkIHRvIGFsbCBwaHAgZ2VuZXJhdGVkIGNsYXNzZXNcbiAgICogZnJvbSB0aGlzIC5wcm90by4gRGVmYXVsdCBpcyBlbXB0eS5cbiAgICovXG4gIHBocENsYXNzUHJlZml4OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBvcHRpb24gdG8gY2hhbmdlIHRoZSBuYW1lc3BhY2Ugb2YgcGhwIGdlbmVyYXRlZCBjbGFzc2VzLiBEZWZhdWx0XG4gICAqIGlzIGVtcHR5LiBXaGVuIHRoaXMgb3B0aW9uIGlzIGVtcHR5LCB0aGUgcGFja2FnZSBuYW1lIHdpbGwgYmUgdXNlZCBmb3JcbiAgICogZGV0ZXJtaW5pbmcgdGhlIG5hbWVzcGFjZS5cbiAgICovXG4gIHBocE5hbWVzcGFjZTogc3RyaW5nO1xuICAvKipcbiAgICogVXNlIHRoaXMgb3B0aW9uIHRvIGNoYW5nZSB0aGUgbmFtZXNwYWNlIG9mIHBocCBnZW5lcmF0ZWQgbWV0YWRhdGEgY2xhc3Nlcy5cbiAgICogRGVmYXVsdCBpcyBlbXB0eS4gV2hlbiB0aGlzIG9wdGlvbiBpcyBlbXB0eSwgdGhlIHByb3RvIGZpbGUgbmFtZSB3aWxsIGJlXG4gICAqIHVzZWQgZm9yIGRldGVybWluaW5nIHRoZSBuYW1lc3BhY2UuXG4gICAqL1xuICBwaHBNZXRhZGF0YU5hbWVzcGFjZTogc3RyaW5nO1xuICAvKipcbiAgICogVXNlIHRoaXMgb3B0aW9uIHRvIGNoYW5nZSB0aGUgcGFja2FnZSBvZiBydWJ5IGdlbmVyYXRlZCBjbGFzc2VzLiBEZWZhdWx0XG4gICAqIGlzIGVtcHR5LiBXaGVuIHRoaXMgb3B0aW9uIGlzIG5vdCBzZXQsIHRoZSBwYWNrYWdlIG5hbWUgd2lsbCBiZSB1c2VkIGZvclxuICAgKiBkZXRlcm1pbmluZyB0aGUgcnVieSBwYWNrYWdlLlxuICAgKi9cbiAgcnVieVBhY2thZ2U6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBwYXJzZXIgc3RvcmVzIG9wdGlvbnMgaXQgZG9lc24ndCByZWNvZ25pemUgaGVyZS5cbiAgICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgXCJPcHRpb25zXCIgc2VjdGlvbiBhYm92ZS5cbiAgICovXG4gIHVuaW50ZXJwcmV0ZWRPcHRpb246IFVuaW50ZXJwcmV0ZWRPcHRpb25bXTtcbn1cblxuLyoqIEdlbmVyYXRlZCBjbGFzc2VzIGNhbiBiZSBvcHRpbWl6ZWQgZm9yIHNwZWVkIG9yIGNvZGUgc2l6ZS4gKi9cbmV4cG9ydCBlbnVtIEZpbGVPcHRpb25zX09wdGltaXplTW9kZSB7XG4gIC8qKiBTUEVFRCAtIEdlbmVyYXRlIGNvbXBsZXRlIGNvZGUgZm9yIHBhcnNpbmcsIHNlcmlhbGl6YXRpb24sICovXG4gIFNQRUVEID0gMSxcbiAgLyoqIENPREVfU0laRSAtIGV0Yy4gKi9cbiAgQ09ERV9TSVpFID0gMixcbiAgLyoqIExJVEVfUlVOVElNRSAtIEdlbmVyYXRlIGNvZGUgdXNpbmcgTWVzc2FnZUxpdGUgYW5kIHRoZSBsaXRlIHJ1bnRpbWUuICovXG4gIExJVEVfUlVOVElNRSA9IDMsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWxlT3B0aW9uc19PcHRpbWl6ZU1vZGVGcm9tSlNPTihvYmplY3Q6IGFueSk6IEZpbGVPcHRpb25zX09wdGltaXplTW9kZSB7XG4gIHN3aXRjaCAob2JqZWN0KSB7XG4gICAgY2FzZSAxOlxuICAgIGNhc2UgXCJTUEVFRFwiOlxuICAgICAgcmV0dXJuIEZpbGVPcHRpb25zX09wdGltaXplTW9kZS5TUEVFRDtcbiAgICBjYXNlIDI6XG4gICAgY2FzZSBcIkNPREVfU0laRVwiOlxuICAgICAgcmV0dXJuIEZpbGVPcHRpb25zX09wdGltaXplTW9kZS5DT0RFX1NJWkU7XG4gICAgY2FzZSAzOlxuICAgIGNhc2UgXCJMSVRFX1JVTlRJTUVcIjpcbiAgICAgIHJldHVybiBGaWxlT3B0aW9uc19PcHRpbWl6ZU1vZGUuTElURV9SVU5USU1FO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgdHNQcm90b0dsb2JhbFRoaXMuRXJyb3IoXCJVbnJlY29nbml6ZWQgZW51bSB2YWx1ZSBcIiArIG9iamVjdCArIFwiIGZvciBlbnVtIEZpbGVPcHRpb25zX09wdGltaXplTW9kZVwiKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlVG9KU09OKG9iamVjdDogRmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlKTogc3RyaW5nIHtcbiAgc3dpdGNoIChvYmplY3QpIHtcbiAgICBjYXNlIEZpbGVPcHRpb25zX09wdGltaXplTW9kZS5TUEVFRDpcbiAgICAgIHJldHVybiBcIlNQRUVEXCI7XG4gICAgY2FzZSBGaWxlT3B0aW9uc19PcHRpbWl6ZU1vZGUuQ09ERV9TSVpFOlxuICAgICAgcmV0dXJuIFwiQ09ERV9TSVpFXCI7XG4gICAgY2FzZSBGaWxlT3B0aW9uc19PcHRpbWl6ZU1vZGUuTElURV9SVU5USU1FOlxuICAgICAgcmV0dXJuIFwiTElURV9SVU5USU1FXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyB0c1Byb3RvR2xvYmFsVGhpcy5FcnJvcihcIlVucmVjb2duaXplZCBlbnVtIHZhbHVlIFwiICsgb2JqZWN0ICsgXCIgZm9yIGVudW0gRmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlXCIpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZU9wdGlvbnMge1xuICAvKipcbiAgICogU2V0IHRydWUgdG8gdXNlIHRoZSBvbGQgcHJvdG8xIE1lc3NhZ2VTZXQgd2lyZSBmb3JtYXQgZm9yIGV4dGVuc2lvbnMuXG4gICAqIFRoaXMgaXMgcHJvdmlkZWQgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IHdpdGggdGhlIE1lc3NhZ2VTZXQgd2lyZVxuICAgKiBmb3JtYXQuICBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBmb3IgYW55IG90aGVyIHJlYXNvbjogIEl0J3MgbGVzc1xuICAgKiBlZmZpY2llbnQsIGhhcyBmZXdlciBmZWF0dXJlcywgYW5kIGlzIG1vcmUgY29tcGxpY2F0ZWQuXG4gICAqXG4gICAqIFRoZSBtZXNzYWdlIG11c3QgYmUgZGVmaW5lZCBleGFjdGx5IGFzIGZvbGxvd3M6XG4gICAqICAgbWVzc2FnZSBGb28ge1xuICAgKiAgICAgb3B0aW9uIG1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0ID0gdHJ1ZTtcbiAgICogICAgIGV4dGVuc2lvbnMgNCB0byBtYXg7XG4gICAqICAgfVxuICAgKiBOb3RlIHRoYXQgdGhlIG1lc3NhZ2UgY2Fubm90IGhhdmUgYW55IGRlZmluZWQgZmllbGRzOyBNZXNzYWdlU2V0cyBvbmx5XG4gICAqIGhhdmUgZXh0ZW5zaW9ucy5cbiAgICpcbiAgICogQWxsIGV4dGVuc2lvbnMgb2YgeW91ciB0eXBlIG11c3QgYmUgc2luZ3VsYXIgbWVzc2FnZXM7IGUuZy4gdGhleSBjYW5ub3RcbiAgICogYmUgaW50MzJzLCBlbnVtcywgb3IgcmVwZWF0ZWQgbWVzc2FnZXMuXG4gICAqXG4gICAqIEJlY2F1c2UgdGhpcyBpcyBhbiBvcHRpb24sIHRoZSBhYm92ZSB0d28gcmVzdHJpY3Rpb25zIGFyZSBub3QgZW5mb3JjZWQgYnlcbiAgICogdGhlIHByb3RvY29sIGNvbXBpbGVyLlxuICAgKi9cbiAgbWVzc2FnZVNldFdpcmVGb3JtYXQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBEaXNhYmxlcyB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgc3RhbmRhcmQgXCJkZXNjcmlwdG9yKClcIiBhY2Nlc3Nvciwgd2hpY2ggY2FuXG4gICAqIGNvbmZsaWN0IHdpdGggYSBmaWVsZCBvZiB0aGUgc2FtZSBuYW1lLiAgVGhpcyBpcyBtZWFudCB0byBtYWtlIG1pZ3JhdGlvblxuICAgKiBmcm9tIHByb3RvMSBlYXNpZXI7IG5ldyBjb2RlIHNob3VsZCBhdm9pZCBmaWVsZHMgbmFtZWQgXCJkZXNjcmlwdG9yXCIuXG4gICAqL1xuICBub1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29yOiBib29sZWFuO1xuICAvKipcbiAgICogSXMgdGhpcyBtZXNzYWdlIGRlcHJlY2F0ZWQ/XG4gICAqIERlcGVuZGluZyBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtLCB0aGlzIGNhbiBlbWl0IERlcHJlY2F0ZWQgYW5ub3RhdGlvbnNcbiAgICogZm9yIHRoZSBtZXNzYWdlLCBvciBpdCB3aWxsIGJlIGNvbXBsZXRlbHkgaWdub3JlZDsgaW4gdGhlIHZlcnkgbGVhc3QsXG4gICAqIHRoaXMgaXMgYSBmb3JtYWxpemF0aW9uIGZvciBkZXByZWNhdGluZyBtZXNzYWdlcy5cbiAgICovXG4gIGRlcHJlY2F0ZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBOT1RFOiBEbyBub3Qgc2V0IHRoZSBvcHRpb24gaW4gLnByb3RvIGZpbGVzLiBBbHdheXMgdXNlIHRoZSBtYXBzIHN5bnRheFxuICAgKiBpbnN0ZWFkLiBUaGUgb3B0aW9uIHNob3VsZCBvbmx5IGJlIGltcGxpY2l0bHkgc2V0IGJ5IHRoZSBwcm90byBjb21waWxlclxuICAgKiBwYXJzZXIuXG4gICAqXG4gICAqIFdoZXRoZXIgdGhlIG1lc3NhZ2UgaXMgYW4gYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFwIGVudHJ5IHR5cGUgZm9yIHRoZVxuICAgKiBtYXBzIGZpZWxkLlxuICAgKlxuICAgKiBGb3IgbWFwcyBmaWVsZHM6XG4gICAqICAgICBtYXA8S2V5VHlwZSwgVmFsdWVUeXBlPiBtYXBfZmllbGQgPSAxO1xuICAgKiBUaGUgcGFyc2VkIGRlc2NyaXB0b3IgbG9va3MgbGlrZTpcbiAgICogICAgIG1lc3NhZ2UgTWFwRmllbGRFbnRyeSB7XG4gICAqICAgICAgICAgb3B0aW9uIG1hcF9lbnRyeSA9IHRydWU7XG4gICAqICAgICAgICAgb3B0aW9uYWwgS2V5VHlwZSBrZXkgPSAxO1xuICAgKiAgICAgICAgIG9wdGlvbmFsIFZhbHVlVHlwZSB2YWx1ZSA9IDI7XG4gICAqICAgICB9XG4gICAqICAgICByZXBlYXRlZCBNYXBGaWVsZEVudHJ5IG1hcF9maWVsZCA9IDE7XG4gICAqXG4gICAqIEltcGxlbWVudGF0aW9ucyBtYXkgY2hvb3NlIG5vdCB0byBnZW5lcmF0ZSB0aGUgbWFwX2VudHJ5PXRydWUgbWVzc2FnZSwgYnV0XG4gICAqIHVzZSBhIG5hdGl2ZSBtYXAgaW4gdGhlIHRhcmdldCBsYW5ndWFnZSB0byBob2xkIHRoZSBrZXlzIGFuZCB2YWx1ZXMuXG4gICAqIFRoZSByZWZsZWN0aW9uIEFQSXMgaW4gc3VjaCBpbXBsZW1lbnRhdGlvbnMgc3RpbGwgbmVlZCB0byB3b3JrIGFzXG4gICAqIGlmIHRoZSBmaWVsZCBpcyBhIHJlcGVhdGVkIG1lc3NhZ2UgZmllbGQuXG4gICAqL1xuICBtYXBFbnRyeTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEVuYWJsZSB0aGUgbGVnYWN5IGhhbmRsaW5nIG9mIEpTT04gZmllbGQgbmFtZSBjb25mbGljdHMuICBUaGlzIGxvd2VyY2FzZXNcbiAgICogYW5kIHN0cmlwcyB1bmRlcnNjb3JlZCBmcm9tIHRoZSBmaWVsZHMgYmVmb3JlIGNvbXBhcmlzb24gaW4gcHJvdG8zIG9ubHkuXG4gICAqIFRoZSBuZXcgYmVoYXZpb3IgdGFrZXMgYGpzb25fbmFtZWAgaW50byBhY2NvdW50IGFuZCBhcHBsaWVzIHRvIHByb3RvMiBhc1xuICAgKiB3ZWxsLlxuICAgKlxuICAgKiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgYXMgYSB0ZW1wb3JhcnkgbWVhc3VyZSBhZ2FpbnN0IGJyb2tlbiBidWlsZHMgZHVlXG4gICAqIHRvIHRoZSBjaGFuZ2UgaW4gYmVoYXZpb3IgZm9yIEpTT04gZmllbGQgbmFtZSBjb25mbGljdHMuXG4gICAqXG4gICAqIFRPRE8oYi8yNjE3NTAxOTApIFRoaXMgaXMgbGVnYWN5IGJlaGF2aW9yIHdlIHBsYW4gdG8gcmVtb3ZlIG9uY2UgZG93bnN0cmVhbVxuICAgKiB0ZWFtcyBoYXZlIGhhZCB0aW1lIHRvIG1pZ3JhdGUuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBkZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzOiBib29sZWFuO1xuICAvKiogVGhlIHBhcnNlciBzdG9yZXMgb3B0aW9ucyBpdCBkb2Vzbid0IHJlY29nbml6ZSBoZXJlLiBTZWUgYWJvdmUuICovXG4gIHVuaW50ZXJwcmV0ZWRPcHRpb246IFVuaW50ZXJwcmV0ZWRPcHRpb25bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWVsZE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGN0eXBlIG9wdGlvbiBpbnN0cnVjdHMgdGhlIEMrKyBjb2RlIGdlbmVyYXRvciB0byB1c2UgYSBkaWZmZXJlbnRcbiAgICogcmVwcmVzZW50YXRpb24gb2YgdGhlIGZpZWxkIHRoYW4gaXQgbm9ybWFsbHkgd291bGQuICBTZWUgdGhlIHNwZWNpZmljXG4gICAqIG9wdGlvbnMgYmVsb3cuICBUaGlzIG9wdGlvbiBpcyBub3QgeWV0IGltcGxlbWVudGVkIGluIHRoZSBvcGVuIHNvdXJjZVxuICAgKiByZWxlYXNlIC0tIHNvcnJ5LCB3ZSdsbCB0cnkgdG8gaW5jbHVkZSBpdCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIVxuICAgKi9cbiAgY3R5cGU6IEZpZWxkT3B0aW9uc19DVHlwZTtcbiAgLyoqXG4gICAqIFRoZSBwYWNrZWQgb3B0aW9uIGNhbiBiZSBlbmFibGVkIGZvciByZXBlYXRlZCBwcmltaXRpdmUgZmllbGRzIHRvIGVuYWJsZVxuICAgKiBhIG1vcmUgZWZmaWNpZW50IHJlcHJlc2VudGF0aW9uIG9uIHRoZSB3aXJlLiBSYXRoZXIgdGhhbiByZXBlYXRlZGx5XG4gICAqIHdyaXRpbmcgdGhlIHRhZyBhbmQgdHlwZSBmb3IgZWFjaCBlbGVtZW50LCB0aGUgZW50aXJlIGFycmF5IGlzIGVuY29kZWQgYXNcbiAgICogYSBzaW5nbGUgbGVuZ3RoLWRlbGltaXRlZCBibG9iLiBJbiBwcm90bzMsIG9ubHkgZXhwbGljaXQgc2V0dGluZyBpdCB0b1xuICAgKiBmYWxzZSB3aWxsIGF2b2lkIHVzaW5nIHBhY2tlZCBlbmNvZGluZy5cbiAgICovXG4gIHBhY2tlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSBqc3R5cGUgb3B0aW9uIGRldGVybWluZXMgdGhlIEphdmFTY3JpcHQgdHlwZSB1c2VkIGZvciB2YWx1ZXMgb2YgdGhlXG4gICAqIGZpZWxkLiAgVGhlIG9wdGlvbiBpcyBwZXJtaXR0ZWQgb25seSBmb3IgNjQgYml0IGludGVncmFsIGFuZCBmaXhlZCB0eXBlc1xuICAgKiAoaW50NjQsIHVpbnQ2NCwgc2ludDY0LCBmaXhlZDY0LCBzZml4ZWQ2NCkuICBBIGZpZWxkIHdpdGgganN0eXBlIEpTX1NUUklOR1xuICAgKiBpcyByZXByZXNlbnRlZCBhcyBKYXZhU2NyaXB0IHN0cmluZywgd2hpY2ggYXZvaWRzIGxvc3Mgb2YgcHJlY2lzaW9uIHRoYXRcbiAgICogY2FuIGhhcHBlbiB3aGVuIGEgbGFyZ2UgdmFsdWUgaXMgY29udmVydGVkIHRvIGEgZmxvYXRpbmcgcG9pbnQgSmF2YVNjcmlwdC5cbiAgICogU3BlY2lmeWluZyBKU19OVU1CRVIgZm9yIHRoZSBqc3R5cGUgY2F1c2VzIHRoZSBnZW5lcmF0ZWQgSmF2YVNjcmlwdCBjb2RlIHRvXG4gICAqIHVzZSB0aGUgSmF2YVNjcmlwdCBcIm51bWJlclwiIHR5cGUuICBUaGUgYmVoYXZpb3Igb2YgdGhlIGRlZmF1bHQgb3B0aW9uXG4gICAqIEpTX05PUk1BTCBpcyBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQuXG4gICAqXG4gICAqIFRoaXMgb3B0aW9uIGlzIGFuIGVudW0gdG8gcGVybWl0IGFkZGl0aW9uYWwgdHlwZXMgdG8gYmUgYWRkZWQsIGUuZy5cbiAgICogZ29vZy5tYXRoLkludGVnZXIuXG4gICAqL1xuICBqc3R5cGU6IEZpZWxkT3B0aW9uc19KU1R5cGU7XG4gIC8qKlxuICAgKiBTaG91bGQgdGhpcyBmaWVsZCBiZSBwYXJzZWQgbGF6aWx5PyAgTGF6eSBhcHBsaWVzIG9ubHkgdG8gbWVzc2FnZS10eXBlXG4gICAqIGZpZWxkcy4gIEl0IG1lYW5zIHRoYXQgd2hlbiB0aGUgb3V0ZXIgbWVzc2FnZSBpcyBpbml0aWFsbHkgcGFyc2VkLCB0aGVcbiAgICogaW5uZXIgbWVzc2FnZSdzIGNvbnRlbnRzIHdpbGwgbm90IGJlIHBhcnNlZCBidXQgaW5zdGVhZCBzdG9yZWQgaW4gZW5jb2RlZFxuICAgKiBmb3JtLiAgVGhlIGlubmVyIG1lc3NhZ2Ugd2lsbCBhY3R1YWxseSBiZSBwYXJzZWQgd2hlbiBpdCBpcyBmaXJzdCBhY2Nlc3NlZC5cbiAgICpcbiAgICogVGhpcyBpcyBvbmx5IGEgaGludC4gIEltcGxlbWVudGF0aW9ucyBhcmUgZnJlZSB0byBjaG9vc2Ugd2hldGhlciB0byB1c2VcbiAgICogZWFnZXIgb3IgbGF6eSBwYXJzaW5nIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9mIHRoaXMgb3B0aW9uLiAgSG93ZXZlcixcbiAgICogc2V0dGluZyB0aGlzIG9wdGlvbiB0cnVlIHN1Z2dlc3RzIHRoYXQgdGhlIHByb3RvY29sIGF1dGhvciBiZWxpZXZlcyB0aGF0XG4gICAqIHVzaW5nIGxhenkgcGFyc2luZyBvbiB0aGlzIGZpZWxkIGlzIHdvcnRoIHRoZSBhZGRpdGlvbmFsIGJvb2trZWVwaW5nXG4gICAqIG92ZXJoZWFkIHR5cGljYWxseSBuZWVkZWQgdG8gaW1wbGVtZW50IGl0LlxuICAgKlxuICAgKiBUaGlzIG9wdGlvbiBkb2VzIG5vdCBhZmZlY3QgdGhlIHB1YmxpYyBpbnRlcmZhY2Ugb2YgYW55IGdlbmVyYXRlZCBjb2RlO1xuICAgKiBhbGwgbWV0aG9kIHNpZ25hdHVyZXMgcmVtYWluIHRoZSBzYW1lLiAgRnVydGhlcm1vcmUsIHRocmVhZC1zYWZldHkgb2YgdGhlXG4gICAqIGludGVyZmFjZSBpcyBub3QgYWZmZWN0ZWQgYnkgdGhpcyBvcHRpb247IGNvbnN0IG1ldGhvZHMgcmVtYWluIHNhZmUgdG9cbiAgICogY2FsbCBmcm9tIG11bHRpcGxlIHRocmVhZHMgY29uY3VycmVudGx5LCB3aGlsZSBub24tY29uc3QgbWV0aG9kcyBjb250aW51ZVxuICAgKiB0byByZXF1aXJlIGV4Y2x1c2l2ZSBhY2Nlc3MuXG4gICAqXG4gICAqIE5vdGUgdGhhdCBpbXBsZW1lbnRhdGlvbnMgbWF5IGNob29zZSBub3QgdG8gY2hlY2sgcmVxdWlyZWQgZmllbGRzIHdpdGhpblxuICAgKiBhIGxhenkgc3ViLW1lc3NhZ2UuICBUaGF0IGlzLCBjYWxsaW5nIElzSW5pdGlhbGl6ZWQoKSBvbiB0aGUgb3V0ZXIgbWVzc2FnZVxuICAgKiBtYXkgcmV0dXJuIHRydWUgZXZlbiBpZiB0aGUgaW5uZXIgbWVzc2FnZSBoYXMgbWlzc2luZyByZXF1aXJlZCBmaWVsZHMuXG4gICAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBpbm5lciBtZXNzYWdlIHdvdWxkIGhhdmUgdG8gYmVcbiAgICogcGFyc2VkIGluIG9yZGVyIHRvIHBlcmZvcm0gdGhlIGNoZWNrLCBkZWZlYXRpbmcgdGhlIHB1cnBvc2Ugb2YgbGF6eVxuICAgKiBwYXJzaW5nLiAgQW4gaW1wbGVtZW50YXRpb24gd2hpY2ggY2hvb3NlcyBub3QgdG8gY2hlY2sgcmVxdWlyZWQgZmllbGRzXG4gICAqIG11c3QgYmUgY29uc2lzdGVudCBhYm91dCBpdC4gIFRoYXQgaXMsIGZvciBhbnkgcGFydGljdWxhciBzdWItbWVzc2FnZSwgdGhlXG4gICAqIGltcGxlbWVudGF0aW9uIG11c3QgZWl0aGVyICphbHdheXMqIGNoZWNrIGl0cyByZXF1aXJlZCBmaWVsZHMsIG9yICpuZXZlcipcbiAgICogY2hlY2sgaXRzIHJlcXVpcmVkIGZpZWxkcywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCB0aGUgbWVzc2FnZSBoYXNcbiAgICogYmVlbiBwYXJzZWQuXG4gICAqXG4gICAqIEFzIG9mIE1heSAyMDIyLCBsYXp5IHZlcmlmaWVzIHRoZSBjb250ZW50cyBvZiB0aGUgYnl0ZSBzdHJlYW0gZHVyaW5nXG4gICAqIHBhcnNpbmcuICBBbiBpbnZhbGlkIGJ5dGUgc3RyZWFtIHdpbGwgY2F1c2UgdGhlIG92ZXJhbGwgcGFyc2luZyB0byBmYWlsLlxuICAgKi9cbiAgbGF6eTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIHVudmVyaWZpZWRfbGF6eSBkb2VzIG5vIGNvcnJlY3RuZXNzIGNoZWNrcyBvbiB0aGUgYnl0ZSBzdHJlYW0uIFRoaXMgc2hvdWxkXG4gICAqIG9ubHkgYmUgdXNlZCB3aGVyZSBsYXp5IHdpdGggdmVyaWZpY2F0aW9uIGlzIHByb2hpYml0aXZlIGZvciBwZXJmb3JtYW5jZVxuICAgKiByZWFzb25zLlxuICAgKi9cbiAgdW52ZXJpZmllZExhenk6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJcyB0aGlzIGZpZWxkIGRlcHJlY2F0ZWQ/XG4gICAqIERlcGVuZGluZyBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtLCB0aGlzIGNhbiBlbWl0IERlcHJlY2F0ZWQgYW5ub3RhdGlvbnNcbiAgICogZm9yIGFjY2Vzc29ycywgb3IgaXQgd2lsbCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQ7IGluIHRoZSB2ZXJ5IGxlYXN0LCB0aGlzXG4gICAqIGlzIGEgZm9ybWFsaXphdGlvbiBmb3IgZGVwcmVjYXRpbmcgZmllbGRzLlxuICAgKi9cbiAgZGVwcmVjYXRlZDogYm9vbGVhbjtcbiAgLyoqIEZvciBHb29nbGUtaW50ZXJuYWwgbWlncmF0aW9uIG9ubHkuIERvIG5vdCB1c2UuICovXG4gIHdlYWs6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJbmRpY2F0ZSB0aGF0IHRoZSBmaWVsZCB2YWx1ZSBzaG91bGQgbm90IGJlIHByaW50ZWQgb3V0IHdoZW4gdXNpbmcgZGVidWdcbiAgICogZm9ybWF0cywgZS5nLiB3aGVuIHRoZSBmaWVsZCBjb250YWlucyBzZW5zaXRpdmUgY3JlZGVudGlhbHMuXG4gICAqL1xuICBkZWJ1Z1JlZGFjdDogYm9vbGVhbjtcbiAgcmV0ZW50aW9uOiBGaWVsZE9wdGlvbnNfT3B0aW9uUmV0ZW50aW9uO1xuICB0YXJnZXQ6IEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlO1xuICAvKiogVGhlIHBhcnNlciBzdG9yZXMgb3B0aW9ucyBpdCBkb2Vzbid0IHJlY29nbml6ZSBoZXJlLiBTZWUgYWJvdmUuICovXG4gIHVuaW50ZXJwcmV0ZWRPcHRpb246IFVuaW50ZXJwcmV0ZWRPcHRpb25bXTtcbn1cblxuZXhwb3J0IGVudW0gRmllbGRPcHRpb25zX0NUeXBlIHtcbiAgLyoqIFNUUklORyAtIERlZmF1bHQgbW9kZS4gKi9cbiAgU1RSSU5HID0gMCxcbiAgQ09SRCA9IDEsXG4gIFNUUklOR19QSUVDRSA9IDIsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWVsZE9wdGlvbnNfQ1R5cGVGcm9tSlNPTihvYmplY3Q6IGFueSk6IEZpZWxkT3B0aW9uc19DVHlwZSB7XG4gIHN3aXRjaCAob2JqZWN0KSB7XG4gICAgY2FzZSAwOlxuICAgIGNhc2UgXCJTVFJJTkdcIjpcbiAgICAgIHJldHVybiBGaWVsZE9wdGlvbnNfQ1R5cGUuU1RSSU5HO1xuICAgIGNhc2UgMTpcbiAgICBjYXNlIFwiQ09SRFwiOlxuICAgICAgcmV0dXJuIEZpZWxkT3B0aW9uc19DVHlwZS5DT1JEO1xuICAgIGNhc2UgMjpcbiAgICBjYXNlIFwiU1RSSU5HX1BJRUNFXCI6XG4gICAgICByZXR1cm4gRmllbGRPcHRpb25zX0NUeXBlLlNUUklOR19QSUVDRTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IHRzUHJvdG9HbG9iYWxUaGlzLkVycm9yKFwiVW5yZWNvZ25pemVkIGVudW0gdmFsdWUgXCIgKyBvYmplY3QgKyBcIiBmb3IgZW51bSBGaWVsZE9wdGlvbnNfQ1R5cGVcIik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpZWxkT3B0aW9uc19DVHlwZVRvSlNPTihvYmplY3Q6IEZpZWxkT3B0aW9uc19DVHlwZSk6IHN0cmluZyB7XG4gIHN3aXRjaCAob2JqZWN0KSB7XG4gICAgY2FzZSBGaWVsZE9wdGlvbnNfQ1R5cGUuU1RSSU5HOlxuICAgICAgcmV0dXJuIFwiU1RSSU5HXCI7XG4gICAgY2FzZSBGaWVsZE9wdGlvbnNfQ1R5cGUuQ09SRDpcbiAgICAgIHJldHVybiBcIkNPUkRcIjtcbiAgICBjYXNlIEZpZWxkT3B0aW9uc19DVHlwZS5TVFJJTkdfUElFQ0U6XG4gICAgICByZXR1cm4gXCJTVFJJTkdfUElFQ0VcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IHRzUHJvdG9HbG9iYWxUaGlzLkVycm9yKFwiVW5yZWNvZ25pemVkIGVudW0gdmFsdWUgXCIgKyBvYmplY3QgKyBcIiBmb3IgZW51bSBGaWVsZE9wdGlvbnNfQ1R5cGVcIik7XG4gIH1cbn1cblxuZXhwb3J0IGVudW0gRmllbGRPcHRpb25zX0pTVHlwZSB7XG4gIC8qKiBKU19OT1JNQUwgLSBVc2UgdGhlIGRlZmF1bHQgdHlwZS4gKi9cbiAgSlNfTk9STUFMID0gMCxcbiAgLyoqIEpTX1NUUklORyAtIFVzZSBKYXZhU2NyaXB0IHN0cmluZ3MuICovXG4gIEpTX1NUUklORyA9IDEsXG4gIC8qKiBKU19OVU1CRVIgLSBVc2UgSmF2YVNjcmlwdCBudW1iZXJzLiAqL1xuICBKU19OVU1CRVIgPSAyLFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmllbGRPcHRpb25zX0pTVHlwZUZyb21KU09OKG9iamVjdDogYW55KTogRmllbGRPcHRpb25zX0pTVHlwZSB7XG4gIHN3aXRjaCAob2JqZWN0KSB7XG4gICAgY2FzZSAwOlxuICAgIGNhc2UgXCJKU19OT1JNQUxcIjpcbiAgICAgIHJldHVybiBGaWVsZE9wdGlvbnNfSlNUeXBlLkpTX05PUk1BTDtcbiAgICBjYXNlIDE6XG4gICAgY2FzZSBcIkpTX1NUUklOR1wiOlxuICAgICAgcmV0dXJuIEZpZWxkT3B0aW9uc19KU1R5cGUuSlNfU1RSSU5HO1xuICAgIGNhc2UgMjpcbiAgICBjYXNlIFwiSlNfTlVNQkVSXCI6XG4gICAgICByZXR1cm4gRmllbGRPcHRpb25zX0pTVHlwZS5KU19OVU1CRVI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyB0c1Byb3RvR2xvYmFsVGhpcy5FcnJvcihcIlVucmVjb2duaXplZCBlbnVtIHZhbHVlIFwiICsgb2JqZWN0ICsgXCIgZm9yIGVudW0gRmllbGRPcHRpb25zX0pTVHlwZVwiKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmllbGRPcHRpb25zX0pTVHlwZVRvSlNPTihvYmplY3Q6IEZpZWxkT3B0aW9uc19KU1R5cGUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKG9iamVjdCkge1xuICAgIGNhc2UgRmllbGRPcHRpb25zX0pTVHlwZS5KU19OT1JNQUw6XG4gICAgICByZXR1cm4gXCJKU19OT1JNQUxcIjtcbiAgICBjYXNlIEZpZWxkT3B0aW9uc19KU1R5cGUuSlNfU1RSSU5HOlxuICAgICAgcmV0dXJuIFwiSlNfU1RSSU5HXCI7XG4gICAgY2FzZSBGaWVsZE9wdGlvbnNfSlNUeXBlLkpTX05VTUJFUjpcbiAgICAgIHJldHVybiBcIkpTX05VTUJFUlwiO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgdHNQcm90b0dsb2JhbFRoaXMuRXJyb3IoXCJVbnJlY29nbml6ZWQgZW51bSB2YWx1ZSBcIiArIG9iamVjdCArIFwiIGZvciBlbnVtIEZpZWxkT3B0aW9uc19KU1R5cGVcIik7XG4gIH1cbn1cblxuLyoqXG4gKiBJZiBzZXQgdG8gUkVURU5USU9OX1NPVVJDRSwgdGhlIG9wdGlvbiB3aWxsIGJlIG9taXR0ZWQgZnJvbSB0aGUgYmluYXJ5LlxuICogTm90ZTogYXMgb2YgSmFudWFyeSAyMDIzLCBzdXBwb3J0IGZvciB0aGlzIGlzIGluIHByb2dyZXNzIGFuZCBkb2VzIG5vdCB5ZXRcbiAqIGhhdmUgYW4gZWZmZWN0IChiLzI2NDU5MzQ4OSkuXG4gKi9cbmV4cG9ydCBlbnVtIEZpZWxkT3B0aW9uc19PcHRpb25SZXRlbnRpb24ge1xuICBSRVRFTlRJT05fVU5LTk9XTiA9IDAsXG4gIFJFVEVOVElPTl9SVU5USU1FID0gMSxcbiAgUkVURU5USU9OX1NPVVJDRSA9IDIsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWVsZE9wdGlvbnNfT3B0aW9uUmV0ZW50aW9uRnJvbUpTT04ob2JqZWN0OiBhbnkpOiBGaWVsZE9wdGlvbnNfT3B0aW9uUmV0ZW50aW9uIHtcbiAgc3dpdGNoIChvYmplY3QpIHtcbiAgICBjYXNlIDA6XG4gICAgY2FzZSBcIlJFVEVOVElPTl9VTktOT1dOXCI6XG4gICAgICByZXR1cm4gRmllbGRPcHRpb25zX09wdGlvblJldGVudGlvbi5SRVRFTlRJT05fVU5LTk9XTjtcbiAgICBjYXNlIDE6XG4gICAgY2FzZSBcIlJFVEVOVElPTl9SVU5USU1FXCI6XG4gICAgICByZXR1cm4gRmllbGRPcHRpb25zX09wdGlvblJldGVudGlvbi5SRVRFTlRJT05fUlVOVElNRTtcbiAgICBjYXNlIDI6XG4gICAgY2FzZSBcIlJFVEVOVElPTl9TT1VSQ0VcIjpcbiAgICAgIHJldHVybiBGaWVsZE9wdGlvbnNfT3B0aW9uUmV0ZW50aW9uLlJFVEVOVElPTl9TT1VSQ0U7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyB0c1Byb3RvR2xvYmFsVGhpcy5FcnJvcihcIlVucmVjb2duaXplZCBlbnVtIHZhbHVlIFwiICsgb2JqZWN0ICsgXCIgZm9yIGVudW0gRmllbGRPcHRpb25zX09wdGlvblJldGVudGlvblwiKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmllbGRPcHRpb25zX09wdGlvblJldGVudGlvblRvSlNPTihvYmplY3Q6IEZpZWxkT3B0aW9uc19PcHRpb25SZXRlbnRpb24pOiBzdHJpbmcge1xuICBzd2l0Y2ggKG9iamVjdCkge1xuICAgIGNhc2UgRmllbGRPcHRpb25zX09wdGlvblJldGVudGlvbi5SRVRFTlRJT05fVU5LTk9XTjpcbiAgICAgIHJldHVybiBcIlJFVEVOVElPTl9VTktOT1dOXCI7XG4gICAgY2FzZSBGaWVsZE9wdGlvbnNfT3B0aW9uUmV0ZW50aW9uLlJFVEVOVElPTl9SVU5USU1FOlxuICAgICAgcmV0dXJuIFwiUkVURU5USU9OX1JVTlRJTUVcIjtcbiAgICBjYXNlIEZpZWxkT3B0aW9uc19PcHRpb25SZXRlbnRpb24uUkVURU5USU9OX1NPVVJDRTpcbiAgICAgIHJldHVybiBcIlJFVEVOVElPTl9TT1VSQ0VcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IHRzUHJvdG9HbG9iYWxUaGlzLkVycm9yKFwiVW5yZWNvZ25pemVkIGVudW0gdmFsdWUgXCIgKyBvYmplY3QgKyBcIiBmb3IgZW51bSBGaWVsZE9wdGlvbnNfT3B0aW9uUmV0ZW50aW9uXCIpO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBpbmRpY2F0ZXMgdGhlIHR5cGVzIG9mIGVudGl0aWVzIHRoYXQgdGhlIGZpZWxkIG1heSBhcHBseSB0byB3aGVuIHVzZWRcbiAqIGFzIGFuIG9wdGlvbi4gSWYgaXQgaXMgdW5zZXQsIHRoZW4gdGhlIGZpZWxkIG1heSBiZSBmcmVlbHkgdXNlZCBhcyBhblxuICogb3B0aW9uIG9uIGFueSBraW5kIG9mIGVudGl0eS4gTm90ZTogYXMgb2YgSmFudWFyeSAyMDIzLCBzdXBwb3J0IGZvciB0aGlzIGlzXG4gKiBpbiBwcm9ncmVzcyBhbmQgZG9lcyBub3QgeWV0IGhhdmUgYW4gZWZmZWN0IChiLzI2NDU5MzQ4OSkuXG4gKi9cbmV4cG9ydCBlbnVtIEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlIHtcbiAgVEFSR0VUX1RZUEVfVU5LTk9XTiA9IDAsXG4gIFRBUkdFVF9UWVBFX0ZJTEUgPSAxLFxuICBUQVJHRVRfVFlQRV9FWFRFTlNJT05fUkFOR0UgPSAyLFxuICBUQVJHRVRfVFlQRV9NRVNTQUdFID0gMyxcbiAgVEFSR0VUX1RZUEVfRklFTEQgPSA0LFxuICBUQVJHRVRfVFlQRV9PTkVPRiA9IDUsXG4gIFRBUkdFVF9UWVBFX0VOVU0gPSA2LFxuICBUQVJHRVRfVFlQRV9FTlVNX0VOVFJZID0gNyxcbiAgVEFSR0VUX1RZUEVfU0VSVklDRSA9IDgsXG4gIFRBUkdFVF9UWVBFX01FVEhPRCA9IDksXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZUZyb21KU09OKG9iamVjdDogYW55KTogRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUge1xuICBzd2l0Y2ggKG9iamVjdCkge1xuICAgIGNhc2UgMDpcbiAgICBjYXNlIFwiVEFSR0VUX1RZUEVfVU5LTk9XTlwiOlxuICAgICAgcmV0dXJuIEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlLlRBUkdFVF9UWVBFX1VOS05PV047XG4gICAgY2FzZSAxOlxuICAgIGNhc2UgXCJUQVJHRVRfVFlQRV9GSUxFXCI6XG4gICAgICByZXR1cm4gRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUuVEFSR0VUX1RZUEVfRklMRTtcbiAgICBjYXNlIDI6XG4gICAgY2FzZSBcIlRBUkdFVF9UWVBFX0VYVEVOU0lPTl9SQU5HRVwiOlxuICAgICAgcmV0dXJuIEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlLlRBUkdFVF9UWVBFX0VYVEVOU0lPTl9SQU5HRTtcbiAgICBjYXNlIDM6XG4gICAgY2FzZSBcIlRBUkdFVF9UWVBFX01FU1NBR0VcIjpcbiAgICAgIHJldHVybiBGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZS5UQVJHRVRfVFlQRV9NRVNTQUdFO1xuICAgIGNhc2UgNDpcbiAgICBjYXNlIFwiVEFSR0VUX1RZUEVfRklFTERcIjpcbiAgICAgIHJldHVybiBGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZS5UQVJHRVRfVFlQRV9GSUVMRDtcbiAgICBjYXNlIDU6XG4gICAgY2FzZSBcIlRBUkdFVF9UWVBFX09ORU9GXCI6XG4gICAgICByZXR1cm4gRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUuVEFSR0VUX1RZUEVfT05FT0Y7XG4gICAgY2FzZSA2OlxuICAgIGNhc2UgXCJUQVJHRVRfVFlQRV9FTlVNXCI6XG4gICAgICByZXR1cm4gRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUuVEFSR0VUX1RZUEVfRU5VTTtcbiAgICBjYXNlIDc6XG4gICAgY2FzZSBcIlRBUkdFVF9UWVBFX0VOVU1fRU5UUllcIjpcbiAgICAgIHJldHVybiBGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZS5UQVJHRVRfVFlQRV9FTlVNX0VOVFJZO1xuICAgIGNhc2UgODpcbiAgICBjYXNlIFwiVEFSR0VUX1RZUEVfU0VSVklDRVwiOlxuICAgICAgcmV0dXJuIEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlLlRBUkdFVF9UWVBFX1NFUlZJQ0U7XG4gICAgY2FzZSA5OlxuICAgIGNhc2UgXCJUQVJHRVRfVFlQRV9NRVRIT0RcIjpcbiAgICAgIHJldHVybiBGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZS5UQVJHRVRfVFlQRV9NRVRIT0Q7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyB0c1Byb3RvR2xvYmFsVGhpcy5FcnJvcihcbiAgICAgICAgXCJVbnJlY29nbml6ZWQgZW51bSB2YWx1ZSBcIiArIG9iamVjdCArIFwiIGZvciBlbnVtIEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlXCIsXG4gICAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZVRvSlNPTihvYmplY3Q6IEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlKTogc3RyaW5nIHtcbiAgc3dpdGNoIChvYmplY3QpIHtcbiAgICBjYXNlIEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlLlRBUkdFVF9UWVBFX1VOS05PV046XG4gICAgICByZXR1cm4gXCJUQVJHRVRfVFlQRV9VTktOT1dOXCI7XG4gICAgY2FzZSBGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZS5UQVJHRVRfVFlQRV9GSUxFOlxuICAgICAgcmV0dXJuIFwiVEFSR0VUX1RZUEVfRklMRVwiO1xuICAgIGNhc2UgRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUuVEFSR0VUX1RZUEVfRVhURU5TSU9OX1JBTkdFOlxuICAgICAgcmV0dXJuIFwiVEFSR0VUX1RZUEVfRVhURU5TSU9OX1JBTkdFXCI7XG4gICAgY2FzZSBGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZS5UQVJHRVRfVFlQRV9NRVNTQUdFOlxuICAgICAgcmV0dXJuIFwiVEFSR0VUX1RZUEVfTUVTU0FHRVwiO1xuICAgIGNhc2UgRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUuVEFSR0VUX1RZUEVfRklFTEQ6XG4gICAgICByZXR1cm4gXCJUQVJHRVRfVFlQRV9GSUVMRFwiO1xuICAgIGNhc2UgRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUuVEFSR0VUX1RZUEVfT05FT0Y6XG4gICAgICByZXR1cm4gXCJUQVJHRVRfVFlQRV9PTkVPRlwiO1xuICAgIGNhc2UgRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUuVEFSR0VUX1RZUEVfRU5VTTpcbiAgICAgIHJldHVybiBcIlRBUkdFVF9UWVBFX0VOVU1cIjtcbiAgICBjYXNlIEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlLlRBUkdFVF9UWVBFX0VOVU1fRU5UUlk6XG4gICAgICByZXR1cm4gXCJUQVJHRVRfVFlQRV9FTlVNX0VOVFJZXCI7XG4gICAgY2FzZSBGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZS5UQVJHRVRfVFlQRV9TRVJWSUNFOlxuICAgICAgcmV0dXJuIFwiVEFSR0VUX1RZUEVfU0VSVklDRVwiO1xuICAgIGNhc2UgRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUuVEFSR0VUX1RZUEVfTUVUSE9EOlxuICAgICAgcmV0dXJuIFwiVEFSR0VUX1RZUEVfTUVUSE9EXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyB0c1Byb3RvR2xvYmFsVGhpcy5FcnJvcihcbiAgICAgICAgXCJVbnJlY29nbml6ZWQgZW51bSB2YWx1ZSBcIiArIG9iamVjdCArIFwiIGZvciBlbnVtIEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlXCIsXG4gICAgICApO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT25lb2ZPcHRpb25zIHtcbiAgLyoqIFRoZSBwYXJzZXIgc3RvcmVzIG9wdGlvbnMgaXQgZG9lc24ndCByZWNvZ25pemUgaGVyZS4gU2VlIGFib3ZlLiAqL1xuICB1bmludGVycHJldGVkT3B0aW9uOiBVbmludGVycHJldGVkT3B0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW51bU9wdGlvbnMge1xuICAvKipcbiAgICogU2V0IHRoaXMgb3B0aW9uIHRvIHRydWUgdG8gYWxsb3cgbWFwcGluZyBkaWZmZXJlbnQgdGFnIG5hbWVzIHRvIHRoZSBzYW1lXG4gICAqIHZhbHVlLlxuICAgKi9cbiAgYWxsb3dBbGlhczogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElzIHRoaXMgZW51bSBkZXByZWNhdGVkP1xuICAgKiBEZXBlbmRpbmcgb24gdGhlIHRhcmdldCBwbGF0Zm9ybSwgdGhpcyBjYW4gZW1pdCBEZXByZWNhdGVkIGFubm90YXRpb25zXG4gICAqIGZvciB0aGUgZW51bSwgb3IgaXQgd2lsbCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQ7IGluIHRoZSB2ZXJ5IGxlYXN0LCB0aGlzXG4gICAqIGlzIGEgZm9ybWFsaXphdGlvbiBmb3IgZGVwcmVjYXRpbmcgZW51bXMuXG4gICAqL1xuICBkZXByZWNhdGVkOiBib29sZWFuO1xuICAvKipcbiAgICogRW5hYmxlIHRoZSBsZWdhY3kgaGFuZGxpbmcgb2YgSlNPTiBmaWVsZCBuYW1lIGNvbmZsaWN0cy4gIFRoaXMgbG93ZXJjYXNlc1xuICAgKiBhbmQgc3RyaXBzIHVuZGVyc2NvcmVkIGZyb20gdGhlIGZpZWxkcyBiZWZvcmUgY29tcGFyaXNvbiBpbiBwcm90bzMgb25seS5cbiAgICogVGhlIG5ldyBiZWhhdmlvciB0YWtlcyBganNvbl9uYW1lYCBpbnRvIGFjY291bnQgYW5kIGFwcGxpZXMgdG8gcHJvdG8yIGFzXG4gICAqIHdlbGwuXG4gICAqIFRPRE8oYi8yNjE3NTAxOTApIFJlbW92ZSB0aGlzIGxlZ2FjeSBiZWhhdmlvciBvbmNlIGRvd25zdHJlYW0gdGVhbXMgaGF2ZVxuICAgKiBoYWQgdGltZSB0byBtaWdyYXRlLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0czogYm9vbGVhbjtcbiAgLyoqIFRoZSBwYXJzZXIgc3RvcmVzIG9wdGlvbnMgaXQgZG9lc24ndCByZWNvZ25pemUgaGVyZS4gU2VlIGFib3ZlLiAqL1xuICB1bmludGVycHJldGVkT3B0aW9uOiBVbmludGVycHJldGVkT3B0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW51bVZhbHVlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJcyB0aGlzIGVudW0gdmFsdWUgZGVwcmVjYXRlZD9cbiAgICogRGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0sIHRoaXMgY2FuIGVtaXQgRGVwcmVjYXRlZCBhbm5vdGF0aW9uc1xuICAgKiBmb3IgdGhlIGVudW0gdmFsdWUsIG9yIGl0IHdpbGwgYmUgY29tcGxldGVseSBpZ25vcmVkOyBpbiB0aGUgdmVyeSBsZWFzdCxcbiAgICogdGhpcyBpcyBhIGZvcm1hbGl6YXRpb24gZm9yIGRlcHJlY2F0aW5nIGVudW0gdmFsdWVzLlxuICAgKi9cbiAgZGVwcmVjYXRlZDogYm9vbGVhbjtcbiAgLyoqIFRoZSBwYXJzZXIgc3RvcmVzIG9wdGlvbnMgaXQgZG9lc24ndCByZWNvZ25pemUgaGVyZS4gU2VlIGFib3ZlLiAqL1xuICB1bmludGVycHJldGVkT3B0aW9uOiBVbmludGVycHJldGVkT3B0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZU9wdGlvbnMge1xuICAvKipcbiAgICogSXMgdGhpcyBzZXJ2aWNlIGRlcHJlY2F0ZWQ/XG4gICAqIERlcGVuZGluZyBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtLCB0aGlzIGNhbiBlbWl0IERlcHJlY2F0ZWQgYW5ub3RhdGlvbnNcbiAgICogZm9yIHRoZSBzZXJ2aWNlLCBvciBpdCB3aWxsIGJlIGNvbXBsZXRlbHkgaWdub3JlZDsgaW4gdGhlIHZlcnkgbGVhc3QsXG4gICAqIHRoaXMgaXMgYSBmb3JtYWxpemF0aW9uIGZvciBkZXByZWNhdGluZyBzZXJ2aWNlcy5cbiAgICovXG4gIGRlcHJlY2F0ZWQ6IGJvb2xlYW47XG4gIC8qKiBUaGUgcGFyc2VyIHN0b3JlcyBvcHRpb25zIGl0IGRvZXNuJ3QgcmVjb2duaXplIGhlcmUuIFNlZSBhYm92ZS4gKi9cbiAgdW5pbnRlcnByZXRlZE9wdGlvbjogVW5pbnRlcnByZXRlZE9wdGlvbltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1ldGhvZE9wdGlvbnMge1xuICAvKipcbiAgICogSXMgdGhpcyBtZXRob2QgZGVwcmVjYXRlZD9cbiAgICogRGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0sIHRoaXMgY2FuIGVtaXQgRGVwcmVjYXRlZCBhbm5vdGF0aW9uc1xuICAgKiBmb3IgdGhlIG1ldGhvZCwgb3IgaXQgd2lsbCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQ7IGluIHRoZSB2ZXJ5IGxlYXN0LFxuICAgKiB0aGlzIGlzIGEgZm9ybWFsaXphdGlvbiBmb3IgZGVwcmVjYXRpbmcgbWV0aG9kcy5cbiAgICovXG4gIGRlcHJlY2F0ZWQ6IGJvb2xlYW47XG4gIGlkZW1wb3RlbmN5TGV2ZWw6IE1ldGhvZE9wdGlvbnNfSWRlbXBvdGVuY3lMZXZlbDtcbiAgLyoqIFRoZSBwYXJzZXIgc3RvcmVzIG9wdGlvbnMgaXQgZG9lc24ndCByZWNvZ25pemUgaGVyZS4gU2VlIGFib3ZlLiAqL1xuICB1bmludGVycHJldGVkT3B0aW9uOiBVbmludGVycHJldGVkT3B0aW9uW107XG59XG5cbi8qKlxuICogSXMgdGhpcyBtZXRob2Qgc2lkZS1lZmZlY3QtZnJlZSAob3Igc2FmZSBpbiBIVFRQIHBhcmxhbmNlKSwgb3IgaWRlbXBvdGVudCxcbiAqIG9yIG5laXRoZXI/IEhUVFAgYmFzZWQgUlBDIGltcGxlbWVudGF0aW9uIG1heSBjaG9vc2UgR0VUIHZlcmIgZm9yIHNhZmVcbiAqIG1ldGhvZHMsIGFuZCBQVVQgdmVyYiBmb3IgaWRlbXBvdGVudCBtZXRob2RzIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgUE9TVC5cbiAqL1xuZXhwb3J0IGVudW0gTWV0aG9kT3B0aW9uc19JZGVtcG90ZW5jeUxldmVsIHtcbiAgSURFTVBPVEVOQ1lfVU5LTk9XTiA9IDAsXG4gIC8qKiBOT19TSURFX0VGRkVDVFMgLSBpbXBsaWVzIGlkZW1wb3RlbnQgKi9cbiAgTk9fU0lERV9FRkZFQ1RTID0gMSxcbiAgLyoqIElERU1QT1RFTlQgLSBpZGVtcG90ZW50LCBidXQgbWF5IGhhdmUgc2lkZSBlZmZlY3RzICovXG4gIElERU1QT1RFTlQgPSAyLFxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0aG9kT3B0aW9uc19JZGVtcG90ZW5jeUxldmVsRnJvbUpTT04ob2JqZWN0OiBhbnkpOiBNZXRob2RPcHRpb25zX0lkZW1wb3RlbmN5TGV2ZWwge1xuICBzd2l0Y2ggKG9iamVjdCkge1xuICAgIGNhc2UgMDpcbiAgICBjYXNlIFwiSURFTVBPVEVOQ1lfVU5LTk9XTlwiOlxuICAgICAgcmV0dXJuIE1ldGhvZE9wdGlvbnNfSWRlbXBvdGVuY3lMZXZlbC5JREVNUE9URU5DWV9VTktOT1dOO1xuICAgIGNhc2UgMTpcbiAgICBjYXNlIFwiTk9fU0lERV9FRkZFQ1RTXCI6XG4gICAgICByZXR1cm4gTWV0aG9kT3B0aW9uc19JZGVtcG90ZW5jeUxldmVsLk5PX1NJREVfRUZGRUNUUztcbiAgICBjYXNlIDI6XG4gICAgY2FzZSBcIklERU1QT1RFTlRcIjpcbiAgICAgIHJldHVybiBNZXRob2RPcHRpb25zX0lkZW1wb3RlbmN5TGV2ZWwuSURFTVBPVEVOVDtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IHRzUHJvdG9HbG9iYWxUaGlzLkVycm9yKFxuICAgICAgICBcIlVucmVjb2duaXplZCBlbnVtIHZhbHVlIFwiICsgb2JqZWN0ICsgXCIgZm9yIGVudW0gTWV0aG9kT3B0aW9uc19JZGVtcG90ZW5jeUxldmVsXCIsXG4gICAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRob2RPcHRpb25zX0lkZW1wb3RlbmN5TGV2ZWxUb0pTT04ob2JqZWN0OiBNZXRob2RPcHRpb25zX0lkZW1wb3RlbmN5TGV2ZWwpOiBzdHJpbmcge1xuICBzd2l0Y2ggKG9iamVjdCkge1xuICAgIGNhc2UgTWV0aG9kT3B0aW9uc19JZGVtcG90ZW5jeUxldmVsLklERU1QT1RFTkNZX1VOS05PV046XG4gICAgICByZXR1cm4gXCJJREVNUE9URU5DWV9VTktOT1dOXCI7XG4gICAgY2FzZSBNZXRob2RPcHRpb25zX0lkZW1wb3RlbmN5TGV2ZWwuTk9fU0lERV9FRkZFQ1RTOlxuICAgICAgcmV0dXJuIFwiTk9fU0lERV9FRkZFQ1RTXCI7XG4gICAgY2FzZSBNZXRob2RPcHRpb25zX0lkZW1wb3RlbmN5TGV2ZWwuSURFTVBPVEVOVDpcbiAgICAgIHJldHVybiBcIklERU1QT1RFTlRcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IHRzUHJvdG9HbG9iYWxUaGlzLkVycm9yKFxuICAgICAgICBcIlVucmVjb2duaXplZCBlbnVtIHZhbHVlIFwiICsgb2JqZWN0ICsgXCIgZm9yIGVudW0gTWV0aG9kT3B0aW9uc19JZGVtcG90ZW5jeUxldmVsXCIsXG4gICAgICApO1xuICB9XG59XG5cbi8qKlxuICogQSBtZXNzYWdlIHJlcHJlc2VudGluZyBhIG9wdGlvbiB0aGUgcGFyc2VyIGRvZXMgbm90IHJlY29nbml6ZS4gVGhpcyBvbmx5XG4gKiBhcHBlYXJzIGluIG9wdGlvbnMgcHJvdG9zIGNyZWF0ZWQgYnkgdGhlIGNvbXBpbGVyOjpQYXJzZXIgY2xhc3MuXG4gKiBEZXNjcmlwdG9yUG9vbCByZXNvbHZlcyB0aGVzZSB3aGVuIGJ1aWxkaW5nIERlc2NyaXB0b3Igb2JqZWN0cy4gVGhlcmVmb3JlLFxuICogb3B0aW9ucyBwcm90b3MgaW4gZGVzY3JpcHRvciBvYmplY3RzIChlLmcuIHJldHVybmVkIGJ5IERlc2NyaXB0b3I6Om9wdGlvbnMoKSxcbiAqIG9yIHByb2R1Y2VkIGJ5IERlc2NyaXB0b3I6OkNvcHlUbygpKSB3aWxsIG5ldmVyIGhhdmUgVW5pbnRlcnByZXRlZE9wdGlvbnNcbiAqIGluIHRoZW0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5pbnRlcnByZXRlZE9wdGlvbiB7XG4gIG5hbWU6IFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnRbXTtcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgdW5pbnRlcnByZXRlZCBvcHRpb24sIGluIHdoYXRldmVyIHR5cGUgdGhlIHRva2VuaXplclxuICAgKiBpZGVudGlmaWVkIGl0IGFzIGR1cmluZyBwYXJzaW5nLiBFeGFjdGx5IG9uZSBvZiB0aGVzZSBzaG91bGQgYmUgc2V0LlxuICAgKi9cbiAgaWRlbnRpZmllclZhbHVlOiBzdHJpbmc7XG4gIHBvc2l0aXZlSW50VmFsdWU6IG51bWJlcjtcbiAgbmVnYXRpdmVJbnRWYWx1ZTogbnVtYmVyO1xuICBkb3VibGVWYWx1ZTogbnVtYmVyO1xuICBzdHJpbmdWYWx1ZTogVWludDhBcnJheTtcbiAgYWdncmVnYXRlVmFsdWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgdW5pbnRlcnByZXRlZCBvcHRpb24uICBFYWNoIHN0cmluZyByZXByZXNlbnRzIGEgc2VnbWVudCBpblxuICogYSBkb3Qtc2VwYXJhdGVkIG5hbWUuICBpc19leHRlbnNpb24gaXMgdHJ1ZSBpZmYgYSBzZWdtZW50IHJlcHJlc2VudHMgYW5cbiAqIGV4dGVuc2lvbiAoZGVub3RlZCB3aXRoIHBhcmVudGhlc2VzIGluIG9wdGlvbnMgc3BlY3MgaW4gLnByb3RvIGZpbGVzKS5cbiAqIEUuZy4seyBbXCJmb29cIiwgZmFsc2VdLCBbXCJiYXIuYmF6XCIsIHRydWVdLCBbXCJtb29cIiwgZmFsc2VdIH0gcmVwcmVzZW50c1xuICogXCJmb28uKGJhci5iYXopLm1vb1wiLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQge1xuICBuYW1lUGFydDogc3RyaW5nO1xuICBpc0V4dGVuc2lvbjogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBFbmNhcHN1bGF0ZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIGZyb20gd2hpY2ggYVxuICogRmlsZURlc2NyaXB0b3JQcm90byB3YXMgZ2VuZXJhdGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvdXJjZUNvZGVJbmZvIHtcbiAgLyoqXG4gICAqIEEgTG9jYXRpb24gaWRlbnRpZmllcyBhIHBpZWNlIG9mIHNvdXJjZSBjb2RlIGluIGEgLnByb3RvIGZpbGUgd2hpY2hcbiAgICogY29ycmVzcG9uZHMgdG8gYSBwYXJ0aWN1bGFyIGRlZmluaXRpb24uICBUaGlzIGluZm9ybWF0aW9uIGlzIGludGVuZGVkXG4gICAqIHRvIGJlIHVzZWZ1bCB0byBJREVzLCBjb2RlIGluZGV4ZXJzLCBkb2N1bWVudGF0aW9uIGdlbmVyYXRvcnMsIGFuZCBzaW1pbGFyXG4gICAqIHRvb2xzLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgc2F5IHdlIGhhdmUgYSBmaWxlIGxpa2U6XG4gICAqICAgbWVzc2FnZSBGb28ge1xuICAgKiAgICAgb3B0aW9uYWwgc3RyaW5nIGZvbyA9IDE7XG4gICAqICAgfVxuICAgKiBMZXQncyBsb29rIGF0IGp1c3QgdGhlIGZpZWxkIGRlZmluaXRpb246XG4gICAqICAgb3B0aW9uYWwgc3RyaW5nIGZvbyA9IDE7XG4gICAqICAgXiAgICAgICBeXiAgICAgXl4gIF4gIF5eXlxuICAgKiAgIGEgICAgICAgYmMgICAgIGRlICBmICBnaGlcbiAgICogV2UgaGF2ZSB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcbiAgICogICBzcGFuICAgcGF0aCAgICAgICAgICAgICAgIHJlcHJlc2VudHNcbiAgICogICBbYSxpKSAgWyA0LCAwLCAyLCAwIF0gICAgIFRoZSB3aG9sZSBmaWVsZCBkZWZpbml0aW9uLlxuICAgKiAgIFthLGIpICBbIDQsIDAsIDIsIDAsIDQgXSAgVGhlIGxhYmVsIChvcHRpb25hbCkuXG4gICAqICAgW2MsZCkgIFsgNCwgMCwgMiwgMCwgNSBdICBUaGUgdHlwZSAoc3RyaW5nKS5cbiAgICogICBbZSxmKSAgWyA0LCAwLCAyLCAwLCAxIF0gIFRoZSBuYW1lIChmb28pLlxuICAgKiAgIFtnLGgpICBbIDQsIDAsIDIsIDAsIDMgXSAgVGhlIG51bWJlciAoMSkuXG4gICAqXG4gICAqIE5vdGVzOlxuICAgKiAtIEEgbG9jYXRpb24gbWF5IHJlZmVyIHRvIGEgcmVwZWF0ZWQgZmllbGQgaXRzZWxmIChpLmUuIG5vdCB0byBhbnlcbiAgICogICBwYXJ0aWN1bGFyIGluZGV4IHdpdGhpbiBpdCkuICBUaGlzIGlzIHVzZWQgd2hlbmV2ZXIgYSBzZXQgb2YgZWxlbWVudHMgYXJlXG4gICAqICAgbG9naWNhbGx5IGVuY2xvc2VkIGluIGEgc2luZ2xlIGNvZGUgc2VnbWVudC4gIEZvciBleGFtcGxlLCBhbiBlbnRpcmVcbiAgICogICBleHRlbmQgYmxvY2sgKHBvc3NpYmx5IGNvbnRhaW5pbmcgbXVsdGlwbGUgZXh0ZW5zaW9uIGRlZmluaXRpb25zKSB3aWxsXG4gICAqICAgaGF2ZSBhbiBvdXRlciBsb2NhdGlvbiB3aG9zZSBwYXRoIHJlZmVycyB0byB0aGUgXCJleHRlbnNpb25zXCIgcmVwZWF0ZWRcbiAgICogICBmaWVsZCB3aXRob3V0IGFuIGluZGV4LlxuICAgKiAtIE11bHRpcGxlIGxvY2F0aW9ucyBtYXkgaGF2ZSB0aGUgc2FtZSBwYXRoLiAgVGhpcyBoYXBwZW5zIHdoZW4gYSBzaW5nbGVcbiAgICogICBsb2dpY2FsIGRlY2xhcmF0aW9uIGlzIHNwcmVhZCBvdXQgYWNyb3NzIG11bHRpcGxlIHBsYWNlcy4gIFRoZSBtb3N0XG4gICAqICAgb2J2aW91cyBleGFtcGxlIGlzIHRoZSBcImV4dGVuZFwiIGJsb2NrIGFnYWluIC0tIHRoZXJlIG1heSBiZSBtdWx0aXBsZVxuICAgKiAgIGV4dGVuZCBibG9ja3MgaW4gdGhlIHNhbWUgc2NvcGUsIGVhY2ggb2Ygd2hpY2ggd2lsbCBoYXZlIHRoZSBzYW1lIHBhdGguXG4gICAqIC0gQSBsb2NhdGlvbidzIHNwYW4gaXMgbm90IGFsd2F5cyBhIHN1YnNldCBvZiBpdHMgcGFyZW50J3Mgc3Bhbi4gIEZvclxuICAgKiAgIGV4YW1wbGUsIHRoZSBcImV4dGVuZGVlXCIgb2YgYW4gZXh0ZW5zaW9uIGRlY2xhcmF0aW9uIGFwcGVhcnMgYXQgdGhlXG4gICAqICAgYmVnaW5uaW5nIG9mIHRoZSBcImV4dGVuZFwiIGJsb2NrIGFuZCBpcyBzaGFyZWQgYnkgYWxsIGV4dGVuc2lvbnMgd2l0aGluXG4gICAqICAgdGhlIGJsb2NrLlxuICAgKiAtIEp1c3QgYmVjYXVzZSBhIGxvY2F0aW9uJ3Mgc3BhbiBpcyBhIHN1YnNldCBvZiBzb21lIG90aGVyIGxvY2F0aW9uJ3Mgc3BhblxuICAgKiAgIGRvZXMgbm90IG1lYW4gdGhhdCBpdCBpcyBhIGRlc2NlbmRhbnQuICBGb3IgZXhhbXBsZSwgYSBcImdyb3VwXCIgZGVmaW5lc1xuICAgKiAgIGJvdGggYSB0eXBlIGFuZCBhIGZpZWxkIGluIGEgc2luZ2xlIGRlY2xhcmF0aW9uLiAgVGh1cywgdGhlIGxvY2F0aW9uc1xuICAgKiAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHR5cGUgYW5kIGZpZWxkIGFuZCB0aGVpciBjb21wb25lbnRzIHdpbGwgb3ZlcmxhcC5cbiAgICogLSBDb2RlIHdoaWNoIHRyaWVzIHRvIGludGVycHJldCBsb2NhdGlvbnMgc2hvdWxkIHByb2JhYmx5IGJlIGRlc2lnbmVkIHRvXG4gICAqICAgaWdub3JlIHRob3NlIHRoYXQgaXQgZG9lc24ndCB1bmRlcnN0YW5kLCBhcyBtb3JlIHR5cGVzIG9mIGxvY2F0aW9ucyBjb3VsZFxuICAgKiAgIGJlIHJlY29yZGVkIGluIHRoZSBmdXR1cmUuXG4gICAqL1xuICBsb2NhdGlvbjogU291cmNlQ29kZUluZm9fTG9jYXRpb25bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbiB7XG4gIC8qKlxuICAgKiBJZGVudGlmaWVzIHdoaWNoIHBhcnQgb2YgdGhlIEZpbGVEZXNjcmlwdG9yUHJvdG8gd2FzIGRlZmluZWQgYXQgdGhpc1xuICAgKiBsb2NhdGlvbi5cbiAgICpcbiAgICogRWFjaCBlbGVtZW50IGlzIGEgZmllbGQgbnVtYmVyIG9yIGFuIGluZGV4LiAgVGhleSBmb3JtIGEgcGF0aCBmcm9tXG4gICAqIHRoZSByb290IEZpbGVEZXNjcmlwdG9yUHJvdG8gdG8gdGhlIHBsYWNlIHdoZXJlIHRoZSBkZWZpbml0aW9uIG9jY3Vycy5cbiAgICogRm9yIGV4YW1wbGUsIHRoaXMgcGF0aDpcbiAgICogICBbIDQsIDMsIDIsIDcsIDEgXVxuICAgKiByZWZlcnMgdG86XG4gICAqICAgZmlsZS5tZXNzYWdlX3R5cGUoMykgIC8vIDQsIDNcbiAgICogICAgICAgLmZpZWxkKDcpICAgICAgICAgLy8gMiwgN1xuICAgKiAgICAgICAubmFtZSgpICAgICAgICAgICAvLyAxXG4gICAqIFRoaXMgaXMgYmVjYXVzZSBGaWxlRGVzY3JpcHRvclByb3RvLm1lc3NhZ2VfdHlwZSBoYXMgZmllbGQgbnVtYmVyIDQ6XG4gICAqICAgcmVwZWF0ZWQgRGVzY3JpcHRvclByb3RvIG1lc3NhZ2VfdHlwZSA9IDQ7XG4gICAqIGFuZCBEZXNjcmlwdG9yUHJvdG8uZmllbGQgaGFzIGZpZWxkIG51bWJlciAyOlxuICAgKiAgIHJlcGVhdGVkIEZpZWxkRGVzY3JpcHRvclByb3RvIGZpZWxkID0gMjtcbiAgICogYW5kIEZpZWxkRGVzY3JpcHRvclByb3RvLm5hbWUgaGFzIGZpZWxkIG51bWJlciAxOlxuICAgKiAgIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAgICpcbiAgICogVGh1cywgdGhlIGFib3ZlIHBhdGggZ2l2ZXMgdGhlIGxvY2F0aW9uIG9mIGEgZmllbGQgbmFtZS4gIElmIHdlIHJlbW92ZWRcbiAgICogdGhlIGxhc3QgZWxlbWVudDpcbiAgICogICBbIDQsIDMsIDIsIDcgXVxuICAgKiB0aGlzIHBhdGggcmVmZXJzIHRvIHRoZSB3aG9sZSBmaWVsZCBkZWNsYXJhdGlvbiAoZnJvbSB0aGUgYmVnaW5uaW5nXG4gICAqIG9mIHRoZSBsYWJlbCB0byB0aGUgdGVybWluYXRpbmcgc2VtaWNvbG9uKS5cbiAgICovXG4gIHBhdGg6IG51bWJlcltdO1xuICAvKipcbiAgICogQWx3YXlzIGhhcyBleGFjdGx5IHRocmVlIG9yIGZvdXIgZWxlbWVudHM6IHN0YXJ0IGxpbmUsIHN0YXJ0IGNvbHVtbixcbiAgICogZW5kIGxpbmUgKG9wdGlvbmFsLCBvdGhlcndpc2UgYXNzdW1lZCBzYW1lIGFzIHN0YXJ0IGxpbmUpLCBlbmQgY29sdW1uLlxuICAgKiBUaGVzZSBhcmUgcGFja2VkIGludG8gYSBzaW5nbGUgZmllbGQgZm9yIGVmZmljaWVuY3kuICBOb3RlIHRoYXQgbGluZVxuICAgKiBhbmQgY29sdW1uIG51bWJlcnMgYXJlIHplcm8tYmFzZWQgLS0gdHlwaWNhbGx5IHlvdSB3aWxsIHdhbnQgdG8gYWRkXG4gICAqIDEgdG8gZWFjaCBiZWZvcmUgZGlzcGxheWluZyB0byBhIHVzZXIuXG4gICAqL1xuICBzcGFuOiBudW1iZXJbXTtcbiAgLyoqXG4gICAqIElmIHRoaXMgU291cmNlQ29kZUluZm8gcmVwcmVzZW50cyBhIGNvbXBsZXRlIGRlY2xhcmF0aW9uLCB0aGVzZSBhcmUgYW55XG4gICAqIGNvbW1lbnRzIGFwcGVhcmluZyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBkZWNsYXJhdGlvbiB3aGljaCBhcHBlYXIgdG8gYmVcbiAgICogYXR0YWNoZWQgdG8gdGhlIGRlY2xhcmF0aW9uLlxuICAgKlxuICAgKiBBIHNlcmllcyBvZiBsaW5lIGNvbW1lbnRzIGFwcGVhcmluZyBvbiBjb25zZWN1dGl2ZSBsaW5lcywgd2l0aCBubyBvdGhlclxuICAgKiB0b2tlbnMgYXBwZWFyaW5nIG9uIHRob3NlIGxpbmVzLCB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGUgY29tbWVudC5cbiAgICpcbiAgICogbGVhZGluZ19kZXRhY2hlZF9jb21tZW50cyB3aWxsIGtlZXAgcGFyYWdyYXBocyBvZiBjb21tZW50cyB0aGF0IGFwcGVhclxuICAgKiBiZWZvcmUgKGJ1dCBub3QgY29ubmVjdGVkIHRvKSB0aGUgY3VycmVudCBlbGVtZW50LiBFYWNoIHBhcmFncmFwaCxcbiAgICogc2VwYXJhdGVkIGJ5IGVtcHR5IGxpbmVzLCB3aWxsIGJlIG9uZSBjb21tZW50IGVsZW1lbnQgaW4gdGhlIHJlcGVhdGVkXG4gICAqIGZpZWxkLlxuICAgKlxuICAgKiBPbmx5IHRoZSBjb21tZW50IGNvbnRlbnQgaXMgcHJvdmlkZWQ7IGNvbW1lbnQgbWFya2VycyAoZS5nLiAvLykgYXJlXG4gICAqIHN0cmlwcGVkIG91dC4gIEZvciBibG9jayBjb21tZW50cywgbGVhZGluZyB3aGl0ZXNwYWNlIGFuZCBhbiBhc3Rlcmlza1xuICAgKiB3aWxsIGJlIHN0cmlwcGVkIGZyb20gdGhlIGJlZ2lubmluZyBvZiBlYWNoIGxpbmUgb3RoZXIgdGhhbiB0aGUgZmlyc3QuXG4gICAqIE5ld2xpbmVzIGFyZSBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0LlxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICBvcHRpb25hbCBpbnQzMiBmb28gPSAxOyAgLy8gQ29tbWVudCBhdHRhY2hlZCB0byBmb28uXG4gICAqICAgLy8gQ29tbWVudCBhdHRhY2hlZCB0byBiYXIuXG4gICAqICAgb3B0aW9uYWwgaW50MzIgYmFyID0gMjtcbiAgICpcbiAgICogICBvcHRpb25hbCBzdHJpbmcgYmF6ID0gMztcbiAgICogICAvLyBDb21tZW50IGF0dGFjaGVkIHRvIGJhei5cbiAgICogICAvLyBBbm90aGVyIGxpbmUgYXR0YWNoZWQgdG8gYmF6LlxuICAgKlxuICAgKiAgIC8vIENvbW1lbnQgYXR0YWNoZWQgdG8gbW9vLlxuICAgKiAgIC8vXG4gICAqICAgLy8gQW5vdGhlciBsaW5lIGF0dGFjaGVkIHRvIG1vby5cbiAgICogICBvcHRpb25hbCBkb3VibGUgbW9vID0gNDtcbiAgICpcbiAgICogICAvLyBEZXRhY2hlZCBjb21tZW50IGZvciBjb3JnZS4gVGhpcyBpcyBub3QgbGVhZGluZyBvciB0cmFpbGluZyBjb21tZW50c1xuICAgKiAgIC8vIHRvIG1vbyBvciBjb3JnZSBiZWNhdXNlIHRoZXJlIGFyZSBibGFuayBsaW5lcyBzZXBhcmF0aW5nIGl0IGZyb21cbiAgICogICAvLyBib3RoLlxuICAgKlxuICAgKiAgIC8vIERldGFjaGVkIGNvbW1lbnQgZm9yIGNvcmdlIHBhcmFncmFwaCAyLlxuICAgKlxuICAgKiAgIG9wdGlvbmFsIHN0cmluZyBjb3JnZSA9IDU7XG4gICAqICAgLyogQmxvY2sgY29tbWVudCBhdHRhY2hlZFxuICAgKiAgICAqIHRvIGNvcmdlLiAgTGVhZGluZyBhc3Rlcmlza3NcbiAgICogICAgKiB3aWxsIGJlIHJlbW92ZWQuICogL1xuICAgKiAgIC8qIEJsb2NrIGNvbW1lbnQgYXR0YWNoZWQgdG9cbiAgICogICAgKiBncmF1bHQuICogL1xuICAgKiAgIG9wdGlvbmFsIGludDMyIGdyYXVsdCA9IDY7XG4gICAqXG4gICAqICAgLy8gaWdub3JlZCBkZXRhY2hlZCBjb21tZW50cy5cbiAgICovXG4gIGxlYWRpbmdDb21tZW50czogc3RyaW5nO1xuICB0cmFpbGluZ0NvbW1lbnRzOiBzdHJpbmc7XG4gIGxlYWRpbmdEZXRhY2hlZENvbW1lbnRzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGdlbmVyYXRlZCBjb2RlIGFuZCBpdHMgb3JpZ2luYWwgc291cmNlXG4gKiBmaWxlLiBBIEdlbmVyYXRlZENvZGVJbmZvIG1lc3NhZ2UgaXMgYXNzb2NpYXRlZCB3aXRoIG9ubHkgb25lIGdlbmVyYXRlZFxuICogc291cmNlIGZpbGUsIGJ1dCBtYXkgY29udGFpbiByZWZlcmVuY2VzIHRvIGRpZmZlcmVudCBzb3VyY2UgLnByb3RvIGZpbGVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlZENvZGVJbmZvIHtcbiAgLyoqXG4gICAqIEFuIEFubm90YXRpb24gY29ubmVjdHMgc29tZSBzcGFuIG9mIHRleHQgaW4gZ2VuZXJhdGVkIGNvZGUgdG8gYW4gZWxlbWVudFxuICAgKiBvZiBpdHMgZ2VuZXJhdGluZyAucHJvdG8gZmlsZS5cbiAgICovXG4gIGFubm90YXRpb246IEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uIHtcbiAgLyoqXG4gICAqIElkZW50aWZpZXMgdGhlIGVsZW1lbnQgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSAucHJvdG8gZmlsZS4gVGhpcyBmaWVsZFxuICAgKiBpcyBmb3JtYXR0ZWQgdGhlIHNhbWUgYXMgU291cmNlQ29kZUluZm8uTG9jYXRpb24ucGF0aC5cbiAgICovXG4gIHBhdGg6IG51bWJlcltdO1xuICAvKiogSWRlbnRpZmllcyB0aGUgZmlsZXN5c3RlbSBwYXRoIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgLnByb3RvLiAqL1xuICBzb3VyY2VGaWxlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJZGVudGlmaWVzIHRoZSBzdGFydGluZyBvZmZzZXQgaW4gYnl0ZXMgaW4gdGhlIGdlbmVyYXRlZCBjb2RlXG4gICAqIHRoYXQgcmVsYXRlcyB0byB0aGUgaWRlbnRpZmllZCBvYmplY3QuXG4gICAqL1xuICBiZWdpbjogbnVtYmVyO1xuICAvKipcbiAgICogSWRlbnRpZmllcyB0aGUgZW5kaW5nIG9mZnNldCBpbiBieXRlcyBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUgdGhhdFxuICAgKiByZWxhdGVzIHRvIHRoZSBpZGVudGlmaWVkIG9iamVjdC4gVGhlIGVuZCBvZmZzZXQgc2hvdWxkIGJlIG9uZSBwYXN0XG4gICAqIHRoZSBsYXN0IHJlbGV2YW50IGJ5dGUgKHNvIHRoZSBsZW5ndGggb2YgdGhlIHRleHQgPSBlbmQgLSBiZWdpbikuXG4gICAqL1xuICBlbmQ6IG51bWJlcjtcbiAgc2VtYW50aWM6IEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25fU2VtYW50aWM7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgaWRlbnRpZmllZCBvYmplY3QncyBlZmZlY3Qgb24gdGhlIGVsZW1lbnQgaW4gdGhlIG9yaWdpbmFsXG4gKiAucHJvdG8gZmlsZS5cbiAqL1xuZXhwb3J0IGVudW0gR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9TZW1hbnRpYyB7XG4gIC8qKiBOT05FIC0gVGhlcmUgaXMgbm8gZWZmZWN0IG9yIHRoZSBlZmZlY3QgaXMgaW5kZXNjcmliYWJsZS4gKi9cbiAgTk9ORSA9IDAsXG4gIC8qKiBTRVQgLSBUaGUgZWxlbWVudCBpcyBzZXQgb3Igb3RoZXJ3aXNlIG11dGF0ZWQuICovXG4gIFNFVCA9IDEsXG4gIC8qKiBBTElBUyAtIEFuIGFsaWFzIHRvIHRoZSBlbGVtZW50IGlzIHJldHVybmVkLiAqL1xuICBBTElBUyA9IDIsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljRnJvbUpTT04ob2JqZWN0OiBhbnkpOiBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljIHtcbiAgc3dpdGNoIChvYmplY3QpIHtcbiAgICBjYXNlIDA6XG4gICAgY2FzZSBcIk5PTkVcIjpcbiAgICAgIHJldHVybiBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljLk5PTkU7XG4gICAgY2FzZSAxOlxuICAgIGNhc2UgXCJTRVRcIjpcbiAgICAgIHJldHVybiBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljLlNFVDtcbiAgICBjYXNlIDI6XG4gICAgY2FzZSBcIkFMSUFTXCI6XG4gICAgICByZXR1cm4gR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9TZW1hbnRpYy5BTElBUztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IHRzUHJvdG9HbG9iYWxUaGlzLkVycm9yKFxuICAgICAgICBcIlVucmVjb2duaXplZCBlbnVtIHZhbHVlIFwiICsgb2JqZWN0ICsgXCIgZm9yIGVudW0gR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9TZW1hbnRpY1wiLFxuICAgICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9TZW1hbnRpY1RvSlNPTihvYmplY3Q6IEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25fU2VtYW50aWMpOiBzdHJpbmcge1xuICBzd2l0Y2ggKG9iamVjdCkge1xuICAgIGNhc2UgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9TZW1hbnRpYy5OT05FOlxuICAgICAgcmV0dXJuIFwiTk9ORVwiO1xuICAgIGNhc2UgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9TZW1hbnRpYy5TRVQ6XG4gICAgICByZXR1cm4gXCJTRVRcIjtcbiAgICBjYXNlIEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25fU2VtYW50aWMuQUxJQVM6XG4gICAgICByZXR1cm4gXCJBTElBU1wiO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgdHNQcm90b0dsb2JhbFRoaXMuRXJyb3IoXG4gICAgICAgIFwiVW5yZWNvZ25pemVkIGVudW0gdmFsdWUgXCIgKyBvYmplY3QgKyBcIiBmb3IgZW51bSBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljXCIsXG4gICAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VGaWxlRGVzY3JpcHRvclNldCgpOiBGaWxlRGVzY3JpcHRvclNldCB7XG4gIHJldHVybiB7IGZpbGU6IFtdIH07XG59XG5cbmV4cG9ydCBjb25zdCBGaWxlRGVzY3JpcHRvclNldCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IEZpbGVEZXNjcmlwdG9yU2V0LCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UuZmlsZSkge1xuICAgICAgRmlsZURlc2NyaXB0b3JQcm90by5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogRmlsZURlc2NyaXB0b3JTZXQge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRmlsZURlc2NyaXB0b3JTZXQoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmZpbGUucHVzaChGaWxlRGVzY3JpcHRvclByb3RvLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogRmlsZURlc2NyaXB0b3JTZXQge1xuICAgIHJldHVybiB7IGZpbGU6IEFycmF5LmlzQXJyYXkob2JqZWN0Py5maWxlKSA/IG9iamVjdC5maWxlLm1hcCgoZTogYW55KSA9PiBGaWxlRGVzY3JpcHRvclByb3RvLmZyb21KU09OKGUpKSA6IFtdIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IEZpbGVEZXNjcmlwdG9yU2V0KTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBpZiAobWVzc2FnZS5maWxlKSB7XG4gICAgICBvYmouZmlsZSA9IG1lc3NhZ2UuZmlsZS5tYXAoKGUpID0+IGUgPyBGaWxlRGVzY3JpcHRvclByb3RvLnRvSlNPTihlKSA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai5maWxlID0gW107XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxGaWxlRGVzY3JpcHRvclNldD4pOiBGaWxlRGVzY3JpcHRvclNldCB7XG4gICAgcmV0dXJuIEZpbGVEZXNjcmlwdG9yU2V0LmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8RmlsZURlc2NyaXB0b3JTZXQ+KTogRmlsZURlc2NyaXB0b3JTZXQge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRmlsZURlc2NyaXB0b3JTZXQoKTtcbiAgICBtZXNzYWdlLmZpbGUgPSBvYmplY3QuZmlsZT8ubWFwKChlKSA9PiBGaWxlRGVzY3JpcHRvclByb3RvLmZyb21QYXJ0aWFsKGUpKSB8fCBbXTtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VGaWxlRGVzY3JpcHRvclByb3RvKCk6IEZpbGVEZXNjcmlwdG9yUHJvdG8ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IFwiXCIsXG4gICAgcGFja2FnZTogXCJcIixcbiAgICBkZXBlbmRlbmN5OiBbXSxcbiAgICBwdWJsaWNEZXBlbmRlbmN5OiBbXSxcbiAgICB3ZWFrRGVwZW5kZW5jeTogW10sXG4gICAgbWVzc2FnZVR5cGU6IFtdLFxuICAgIGVudW1UeXBlOiBbXSxcbiAgICBzZXJ2aWNlOiBbXSxcbiAgICBleHRlbnNpb246IFtdLFxuICAgIG9wdGlvbnM6IHVuZGVmaW5lZCxcbiAgICBzb3VyY2VDb2RlSW5mbzogdW5kZWZpbmVkLFxuICAgIHN5bnRheDogXCJcIixcbiAgICBlZGl0aW9uOiBcIlwiLFxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgRmlsZURlc2NyaXB0b3JQcm90byA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IEZpbGVEZXNjcmlwdG9yUHJvdG8sIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5uYW1lICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwKS5zdHJpbmcobWVzc2FnZS5uYW1lKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGFja2FnZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxOCkuc3RyaW5nKG1lc3NhZ2UucGFja2FnZSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLmRlcGVuZGVuY3kpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjYpLnN0cmluZyh2ISk7XG4gICAgfVxuICAgIHdyaXRlci51aW50MzIoODIpLmZvcmsoKTtcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5wdWJsaWNEZXBlbmRlbmN5KSB7XG4gICAgICB3cml0ZXIuaW50MzIodik7XG4gICAgfVxuICAgIHdyaXRlci5sZGVsaW0oKTtcbiAgICB3cml0ZXIudWludDMyKDkwKS5mb3JrKCk7XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2Uud2Vha0RlcGVuZGVuY3kpIHtcbiAgICAgIHdyaXRlci5pbnQzMih2KTtcbiAgICB9XG4gICAgd3JpdGVyLmxkZWxpbSgpO1xuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLm1lc3NhZ2VUeXBlKSB7XG4gICAgICBEZXNjcmlwdG9yUHJvdG8uZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5lbnVtVHlwZSkge1xuICAgICAgRW51bURlc2NyaXB0b3JQcm90by5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnNlcnZpY2UpIHtcbiAgICAgIFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8uZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDUwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5leHRlbnNpb24pIHtcbiAgICAgIEZpZWxkRGVzY3JpcHRvclByb3RvLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMig1OCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBGaWxlT3B0aW9ucy5lbmNvZGUobWVzc2FnZS5vcHRpb25zLCB3cml0ZXIudWludDMyKDY2KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zb3VyY2VDb2RlSW5mbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBTb3VyY2VDb2RlSW5mby5lbmNvZGUobWVzc2FnZS5zb3VyY2VDb2RlSW5mbywgd3JpdGVyLnVpbnQzMig3NCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc3ludGF4ICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDk4KS5zdHJpbmcobWVzc2FnZS5zeW50YXgpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5lZGl0aW9uICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwNikuc3RyaW5nKG1lc3NhZ2UuZWRpdGlvbik7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogRmlsZURlc2NyaXB0b3JQcm90byB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VGaWxlRGVzY3JpcHRvclByb3RvKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UucGFja2FnZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGlmICh0YWcgIT09IDI2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmRlcGVuZGVuY3kucHVzaChyZWFkZXIuc3RyaW5nKCkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIGlmICh0YWcgPT09IDgwKSB7XG4gICAgICAgICAgICBtZXNzYWdlLnB1YmxpY0RlcGVuZGVuY3kucHVzaChyZWFkZXIuaW50MzIoKSk7XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0YWcgPT09IDgyKSB7XG4gICAgICAgICAgICBjb25zdCBlbmQyID0gcmVhZGVyLnVpbnQzMigpICsgcmVhZGVyLnBvcztcbiAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kMikge1xuICAgICAgICAgICAgICBtZXNzYWdlLnB1YmxpY0RlcGVuZGVuY3kucHVzaChyZWFkZXIuaW50MzIoKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIGlmICh0YWcgPT09IDg4KSB7XG4gICAgICAgICAgICBtZXNzYWdlLndlYWtEZXBlbmRlbmN5LnB1c2gocmVhZGVyLmludDMyKCkpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGFnID09PSA5MCkge1xuICAgICAgICAgICAgY29uc3QgZW5kMiA9IHJlYWRlci51aW50MzIoKSArIHJlYWRlci5wb3M7XG4gICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZDIpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZS53ZWFrRGVwZW5kZW5jeS5wdXNoKHJlYWRlci5pbnQzMigpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBpZiAodGFnICE9PSAzNCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5tZXNzYWdlVHlwZS5wdXNoKERlc2NyaXB0b3JQcm90by5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGlmICh0YWcgIT09IDQyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmVudW1UeXBlLnB1c2goRW51bURlc2NyaXB0b3JQcm90by5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIGlmICh0YWcgIT09IDUwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnNlcnZpY2UucHVzaChTZXJ2aWNlRGVzY3JpcHRvclByb3RvLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNTgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZXh0ZW5zaW9uLnB1c2goRmllbGREZXNjcmlwdG9yUHJvdG8uZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICBpZiAodGFnICE9PSA2Nikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5vcHRpb25zID0gRmlsZU9wdGlvbnMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIGlmICh0YWcgIT09IDc0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnNvdXJjZUNvZGVJbmZvID0gU291cmNlQ29kZUluZm8uZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICBpZiAodGFnICE9PSA5OCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5zeW50YXggPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTA2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmVkaXRpb24gPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBGaWxlRGVzY3JpcHRvclByb3RvIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogaXNTZXQob2JqZWN0Lm5hbWUpID8gU3RyaW5nKG9iamVjdC5uYW1lKSA6IFwiXCIsXG4gICAgICBwYWNrYWdlOiBpc1NldChvYmplY3QucGFja2FnZSkgPyBTdHJpbmcob2JqZWN0LnBhY2thZ2UpIDogXCJcIixcbiAgICAgIGRlcGVuZGVuY3k6IEFycmF5LmlzQXJyYXkob2JqZWN0Py5kZXBlbmRlbmN5KSA/IG9iamVjdC5kZXBlbmRlbmN5Lm1hcCgoZTogYW55KSA9PiBTdHJpbmcoZSkpIDogW10sXG4gICAgICBwdWJsaWNEZXBlbmRlbmN5OiBBcnJheS5pc0FycmF5KG9iamVjdD8ucHVibGljRGVwZW5kZW5jeSlcbiAgICAgICAgPyBvYmplY3QucHVibGljRGVwZW5kZW5jeS5tYXAoKGU6IGFueSkgPT4gTnVtYmVyKGUpKVxuICAgICAgICA6IFtdLFxuICAgICAgd2Vha0RlcGVuZGVuY3k6IEFycmF5LmlzQXJyYXkob2JqZWN0Py53ZWFrRGVwZW5kZW5jeSkgPyBvYmplY3Qud2Vha0RlcGVuZGVuY3kubWFwKChlOiBhbnkpID0+IE51bWJlcihlKSkgOiBbXSxcbiAgICAgIG1lc3NhZ2VUeXBlOiBBcnJheS5pc0FycmF5KG9iamVjdD8ubWVzc2FnZVR5cGUpXG4gICAgICAgID8gb2JqZWN0Lm1lc3NhZ2VUeXBlLm1hcCgoZTogYW55KSA9PiBEZXNjcmlwdG9yUHJvdG8uZnJvbUpTT04oZSkpXG4gICAgICAgIDogW10sXG4gICAgICBlbnVtVHlwZTogQXJyYXkuaXNBcnJheShvYmplY3Q/LmVudW1UeXBlKSA/IG9iamVjdC5lbnVtVHlwZS5tYXAoKGU6IGFueSkgPT4gRW51bURlc2NyaXB0b3JQcm90by5mcm9tSlNPTihlKSkgOiBbXSxcbiAgICAgIHNlcnZpY2U6IEFycmF5LmlzQXJyYXkob2JqZWN0Py5zZXJ2aWNlKSA/IG9iamVjdC5zZXJ2aWNlLm1hcCgoZTogYW55KSA9PiBTZXJ2aWNlRGVzY3JpcHRvclByb3RvLmZyb21KU09OKGUpKSA6IFtdLFxuICAgICAgZXh0ZW5zaW9uOiBBcnJheS5pc0FycmF5KG9iamVjdD8uZXh0ZW5zaW9uKVxuICAgICAgICA/IG9iamVjdC5leHRlbnNpb24ubWFwKChlOiBhbnkpID0+IEZpZWxkRGVzY3JpcHRvclByb3RvLmZyb21KU09OKGUpKVxuICAgICAgICA6IFtdLFxuICAgICAgb3B0aW9uczogaXNTZXQob2JqZWN0Lm9wdGlvbnMpID8gRmlsZU9wdGlvbnMuZnJvbUpTT04ob2JqZWN0Lm9wdGlvbnMpIDogdW5kZWZpbmVkLFxuICAgICAgc291cmNlQ29kZUluZm86IGlzU2V0KG9iamVjdC5zb3VyY2VDb2RlSW5mbykgPyBTb3VyY2VDb2RlSW5mby5mcm9tSlNPTihvYmplY3Quc291cmNlQ29kZUluZm8pIDogdW5kZWZpbmVkLFxuICAgICAgc3ludGF4OiBpc1NldChvYmplY3Quc3ludGF4KSA/IFN0cmluZyhvYmplY3Quc3ludGF4KSA6IFwiXCIsXG4gICAgICBlZGl0aW9uOiBpc1NldChvYmplY3QuZWRpdGlvbikgPyBTdHJpbmcob2JqZWN0LmVkaXRpb24pIDogXCJcIixcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBGaWxlRGVzY3JpcHRvclByb3RvKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBtZXNzYWdlLm5hbWUgIT09IHVuZGVmaW5lZCAmJiAob2JqLm5hbWUgPSBtZXNzYWdlLm5hbWUpO1xuICAgIG1lc3NhZ2UucGFja2FnZSAhPT0gdW5kZWZpbmVkICYmIChvYmoucGFja2FnZSA9IG1lc3NhZ2UucGFja2FnZSk7XG4gICAgaWYgKG1lc3NhZ2UuZGVwZW5kZW5jeSkge1xuICAgICAgb2JqLmRlcGVuZGVuY3kgPSBtZXNzYWdlLmRlcGVuZGVuY3kubWFwKChlKSA9PiBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqLmRlcGVuZGVuY3kgPSBbXTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucHVibGljRGVwZW5kZW5jeSkge1xuICAgICAgb2JqLnB1YmxpY0RlcGVuZGVuY3kgPSBtZXNzYWdlLnB1YmxpY0RlcGVuZGVuY3kubWFwKChlKSA9PiBNYXRoLnJvdW5kKGUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqLnB1YmxpY0RlcGVuZGVuY3kgPSBbXTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uud2Vha0RlcGVuZGVuY3kpIHtcbiAgICAgIG9iai53ZWFrRGVwZW5kZW5jeSA9IG1lc3NhZ2Uud2Vha0RlcGVuZGVuY3kubWFwKChlKSA9PiBNYXRoLnJvdW5kKGUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqLndlYWtEZXBlbmRlbmN5ID0gW107XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1lc3NhZ2VUeXBlKSB7XG4gICAgICBvYmoubWVzc2FnZVR5cGUgPSBtZXNzYWdlLm1lc3NhZ2VUeXBlLm1hcCgoZSkgPT4gZSA/IERlc2NyaXB0b3JQcm90by50b0pTT04oZSkgOiB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmoubWVzc2FnZVR5cGUgPSBbXTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZW51bVR5cGUpIHtcbiAgICAgIG9iai5lbnVtVHlwZSA9IG1lc3NhZ2UuZW51bVR5cGUubWFwKChlKSA9PiBlID8gRW51bURlc2NyaXB0b3JQcm90by50b0pTT04oZSkgOiB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmouZW51bVR5cGUgPSBbXTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc2VydmljZSkge1xuICAgICAgb2JqLnNlcnZpY2UgPSBtZXNzYWdlLnNlcnZpY2UubWFwKChlKSA9PiBlID8gU2VydmljZURlc2NyaXB0b3JQcm90by50b0pTT04oZSkgOiB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmouc2VydmljZSA9IFtdO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5leHRlbnNpb24pIHtcbiAgICAgIG9iai5leHRlbnNpb24gPSBtZXNzYWdlLmV4dGVuc2lvbi5tYXAoKGUpID0+IGUgPyBGaWVsZERlc2NyaXB0b3JQcm90by50b0pTT04oZSkgOiB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmouZXh0ZW5zaW9uID0gW107XG4gICAgfVxuICAgIG1lc3NhZ2Uub3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIChvYmoub3B0aW9ucyA9IG1lc3NhZ2Uub3B0aW9ucyA/IEZpbGVPcHRpb25zLnRvSlNPTihtZXNzYWdlLm9wdGlvbnMpIDogdW5kZWZpbmVkKTtcbiAgICBtZXNzYWdlLnNvdXJjZUNvZGVJbmZvICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIChvYmouc291cmNlQ29kZUluZm8gPSBtZXNzYWdlLnNvdXJjZUNvZGVJbmZvID8gU291cmNlQ29kZUluZm8udG9KU09OKG1lc3NhZ2Uuc291cmNlQ29kZUluZm8pIDogdW5kZWZpbmVkKTtcbiAgICBtZXNzYWdlLnN5bnRheCAhPT0gdW5kZWZpbmVkICYmIChvYmouc3ludGF4ID0gbWVzc2FnZS5zeW50YXgpO1xuICAgIG1lc3NhZ2UuZWRpdGlvbiAhPT0gdW5kZWZpbmVkICYmIChvYmouZWRpdGlvbiA9IG1lc3NhZ2UuZWRpdGlvbik7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPEZpbGVEZXNjcmlwdG9yUHJvdG8+KTogRmlsZURlc2NyaXB0b3JQcm90byB7XG4gICAgcmV0dXJuIEZpbGVEZXNjcmlwdG9yUHJvdG8uZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG5cbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxGaWxlRGVzY3JpcHRvclByb3RvPik6IEZpbGVEZXNjcmlwdG9yUHJvdG8ge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRmlsZURlc2NyaXB0b3JQcm90bygpO1xuICAgIG1lc3NhZ2UubmFtZSA9IG9iamVjdC5uYW1lID8/IFwiXCI7XG4gICAgbWVzc2FnZS5wYWNrYWdlID0gb2JqZWN0LnBhY2thZ2UgPz8gXCJcIjtcbiAgICBtZXNzYWdlLmRlcGVuZGVuY3kgPSBvYmplY3QuZGVwZW5kZW5jeT8ubWFwKChlKSA9PiBlKSB8fCBbXTtcbiAgICBtZXNzYWdlLnB1YmxpY0RlcGVuZGVuY3kgPSBvYmplY3QucHVibGljRGVwZW5kZW5jeT8ubWFwKChlKSA9PiBlKSB8fCBbXTtcbiAgICBtZXNzYWdlLndlYWtEZXBlbmRlbmN5ID0gb2JqZWN0LndlYWtEZXBlbmRlbmN5Py5tYXAoKGUpID0+IGUpIHx8IFtdO1xuICAgIG1lc3NhZ2UubWVzc2FnZVR5cGUgPSBvYmplY3QubWVzc2FnZVR5cGU/Lm1hcCgoZSkgPT4gRGVzY3JpcHRvclByb3RvLmZyb21QYXJ0aWFsKGUpKSB8fCBbXTtcbiAgICBtZXNzYWdlLmVudW1UeXBlID0gb2JqZWN0LmVudW1UeXBlPy5tYXAoKGUpID0+IEVudW1EZXNjcmlwdG9yUHJvdG8uZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIG1lc3NhZ2Uuc2VydmljZSA9IG9iamVjdC5zZXJ2aWNlPy5tYXAoKGUpID0+IFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8uZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIG1lc3NhZ2UuZXh0ZW5zaW9uID0gb2JqZWN0LmV4dGVuc2lvbj8ubWFwKChlKSA9PiBGaWVsZERlc2NyaXB0b3JQcm90by5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgbWVzc2FnZS5vcHRpb25zID0gKG9iamVjdC5vcHRpb25zICE9PSB1bmRlZmluZWQgJiYgb2JqZWN0Lm9wdGlvbnMgIT09IG51bGwpXG4gICAgICA/IEZpbGVPcHRpb25zLmZyb21QYXJ0aWFsKG9iamVjdC5vcHRpb25zKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgbWVzc2FnZS5zb3VyY2VDb2RlSW5mbyA9IChvYmplY3Quc291cmNlQ29kZUluZm8gIT09IHVuZGVmaW5lZCAmJiBvYmplY3Quc291cmNlQ29kZUluZm8gIT09IG51bGwpXG4gICAgICA/IFNvdXJjZUNvZGVJbmZvLmZyb21QYXJ0aWFsKG9iamVjdC5zb3VyY2VDb2RlSW5mbylcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIG1lc3NhZ2Uuc3ludGF4ID0gb2JqZWN0LnN5bnRheCA/PyBcIlwiO1xuICAgIG1lc3NhZ2UuZWRpdGlvbiA9IG9iamVjdC5lZGl0aW9uID8/IFwiXCI7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlRGVzY3JpcHRvclByb3RvKCk6IERlc2NyaXB0b3JQcm90byB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogXCJcIixcbiAgICBmaWVsZDogW10sXG4gICAgZXh0ZW5zaW9uOiBbXSxcbiAgICBuZXN0ZWRUeXBlOiBbXSxcbiAgICBlbnVtVHlwZTogW10sXG4gICAgZXh0ZW5zaW9uUmFuZ2U6IFtdLFxuICAgIG9uZW9mRGVjbDogW10sXG4gICAgb3B0aW9uczogdW5kZWZpbmVkLFxuICAgIHJlc2VydmVkUmFuZ2U6IFtdLFxuICAgIHJlc2VydmVkTmFtZTogW10sXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBEZXNjcmlwdG9yUHJvdG8gPSB7XG4gIGVuY29kZShtZXNzYWdlOiBEZXNjcmlwdG9yUHJvdG8sIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5uYW1lICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwKS5zdHJpbmcobWVzc2FnZS5uYW1lKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UuZmllbGQpIHtcbiAgICAgIEZpZWxkRGVzY3JpcHRvclByb3RvLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UuZXh0ZW5zaW9uKSB7XG4gICAgICBGaWVsZERlc2NyaXB0b3JQcm90by5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoNTApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLm5lc3RlZFR5cGUpIHtcbiAgICAgIERlc2NyaXB0b3JQcm90by5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLmVudW1UeXBlKSB7XG4gICAgICBFbnVtRGVzY3JpcHRvclByb3RvLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UuZXh0ZW5zaW9uUmFuZ2UpIHtcbiAgICAgIERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZS5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLm9uZW9mRGVjbCkge1xuICAgICAgT25lb2ZEZXNjcmlwdG9yUHJvdG8uZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDY2KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIE1lc3NhZ2VPcHRpb25zLmVuY29kZShtZXNzYWdlLm9wdGlvbnMsIHdyaXRlci51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnJlc2VydmVkUmFuZ2UpIHtcbiAgICAgIERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMig3NCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UucmVzZXJ2ZWROYW1lKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgyKS5zdHJpbmcodiEpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IERlc2NyaXB0b3JQcm90byB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VEZXNjcmlwdG9yUHJvdG8oKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm5hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxOCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5maWVsZC5wdXNoKEZpZWxkRGVzY3JpcHRvclByb3RvLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZXh0ZW5zaW9uLnB1c2goRmllbGREZXNjcmlwdG9yUHJvdG8uZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBpZiAodGFnICE9PSAyNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5uZXN0ZWRUeXBlLnB1c2goRGVzY3JpcHRvclByb3RvLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMzQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZW51bVR5cGUucHVzaChFbnVtRGVzY3JpcHRvclByb3RvLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNDIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZXh0ZW5zaW9uUmFuZ2UucHVzaChEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2UuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICBpZiAodGFnICE9PSA2Nikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5vbmVvZkRlY2wucHVzaChPbmVvZkRlc2NyaXB0b3JQcm90by5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIGlmICh0YWcgIT09IDU4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm9wdGlvbnMgPSBNZXNzYWdlT3B0aW9ucy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNzQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UucmVzZXJ2ZWRSYW5nZS5wdXNoKERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIGlmICh0YWcgIT09IDgyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnJlc2VydmVkTmFtZS5wdXNoKHJlYWRlci5zdHJpbmcoKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBEZXNjcmlwdG9yUHJvdG8ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBpc1NldChvYmplY3QubmFtZSkgPyBTdHJpbmcob2JqZWN0Lm5hbWUpIDogXCJcIixcbiAgICAgIGZpZWxkOiBBcnJheS5pc0FycmF5KG9iamVjdD8uZmllbGQpID8gb2JqZWN0LmZpZWxkLm1hcCgoZTogYW55KSA9PiBGaWVsZERlc2NyaXB0b3JQcm90by5mcm9tSlNPTihlKSkgOiBbXSxcbiAgICAgIGV4dGVuc2lvbjogQXJyYXkuaXNBcnJheShvYmplY3Q/LmV4dGVuc2lvbilcbiAgICAgICAgPyBvYmplY3QuZXh0ZW5zaW9uLm1hcCgoZTogYW55KSA9PiBGaWVsZERlc2NyaXB0b3JQcm90by5mcm9tSlNPTihlKSlcbiAgICAgICAgOiBbXSxcbiAgICAgIG5lc3RlZFR5cGU6IEFycmF5LmlzQXJyYXkob2JqZWN0Py5uZXN0ZWRUeXBlKVxuICAgICAgICA/IG9iamVjdC5uZXN0ZWRUeXBlLm1hcCgoZTogYW55KSA9PiBEZXNjcmlwdG9yUHJvdG8uZnJvbUpTT04oZSkpXG4gICAgICAgIDogW10sXG4gICAgICBlbnVtVHlwZTogQXJyYXkuaXNBcnJheShvYmplY3Q/LmVudW1UeXBlKSA/IG9iamVjdC5lbnVtVHlwZS5tYXAoKGU6IGFueSkgPT4gRW51bURlc2NyaXB0b3JQcm90by5mcm9tSlNPTihlKSkgOiBbXSxcbiAgICAgIGV4dGVuc2lvblJhbmdlOiBBcnJheS5pc0FycmF5KG9iamVjdD8uZXh0ZW5zaW9uUmFuZ2UpXG4gICAgICAgID8gb2JqZWN0LmV4dGVuc2lvblJhbmdlLm1hcCgoZTogYW55KSA9PiBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2UuZnJvbUpTT04oZSkpXG4gICAgICAgIDogW10sXG4gICAgICBvbmVvZkRlY2w6IEFycmF5LmlzQXJyYXkob2JqZWN0Py5vbmVvZkRlY2wpXG4gICAgICAgID8gb2JqZWN0Lm9uZW9mRGVjbC5tYXAoKGU6IGFueSkgPT4gT25lb2ZEZXNjcmlwdG9yUHJvdG8uZnJvbUpTT04oZSkpXG4gICAgICAgIDogW10sXG4gICAgICBvcHRpb25zOiBpc1NldChvYmplY3Qub3B0aW9ucykgPyBNZXNzYWdlT3B0aW9ucy5mcm9tSlNPTihvYmplY3Qub3B0aW9ucykgOiB1bmRlZmluZWQsXG4gICAgICByZXNlcnZlZFJhbmdlOiBBcnJheS5pc0FycmF5KG9iamVjdD8ucmVzZXJ2ZWRSYW5nZSlcbiAgICAgICAgPyBvYmplY3QucmVzZXJ2ZWRSYW5nZS5tYXAoKGU6IGFueSkgPT4gRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2UuZnJvbUpTT04oZSkpXG4gICAgICAgIDogW10sXG4gICAgICByZXNlcnZlZE5hbWU6IEFycmF5LmlzQXJyYXkob2JqZWN0Py5yZXNlcnZlZE5hbWUpID8gb2JqZWN0LnJlc2VydmVkTmFtZS5tYXAoKGU6IGFueSkgPT4gU3RyaW5nKGUpKSA6IFtdLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IERlc2NyaXB0b3JQcm90byk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgbWVzc2FnZS5uYW1lICE9PSB1bmRlZmluZWQgJiYgKG9iai5uYW1lID0gbWVzc2FnZS5uYW1lKTtcbiAgICBpZiAobWVzc2FnZS5maWVsZCkge1xuICAgICAgb2JqLmZpZWxkID0gbWVzc2FnZS5maWVsZC5tYXAoKGUpID0+IGUgPyBGaWVsZERlc2NyaXB0b3JQcm90by50b0pTT04oZSkgOiB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmouZmllbGQgPSBbXTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZXh0ZW5zaW9uKSB7XG4gICAgICBvYmouZXh0ZW5zaW9uID0gbWVzc2FnZS5leHRlbnNpb24ubWFwKChlKSA9PiBlID8gRmllbGREZXNjcmlwdG9yUHJvdG8udG9KU09OKGUpIDogdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqLmV4dGVuc2lvbiA9IFtdO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5uZXN0ZWRUeXBlKSB7XG4gICAgICBvYmoubmVzdGVkVHlwZSA9IG1lc3NhZ2UubmVzdGVkVHlwZS5tYXAoKGUpID0+IGUgPyBEZXNjcmlwdG9yUHJvdG8udG9KU09OKGUpIDogdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqLm5lc3RlZFR5cGUgPSBbXTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZW51bVR5cGUpIHtcbiAgICAgIG9iai5lbnVtVHlwZSA9IG1lc3NhZ2UuZW51bVR5cGUubWFwKChlKSA9PiBlID8gRW51bURlc2NyaXB0b3JQcm90by50b0pTT04oZSkgOiB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmouZW51bVR5cGUgPSBbXTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZXh0ZW5zaW9uUmFuZ2UpIHtcbiAgICAgIG9iai5leHRlbnNpb25SYW5nZSA9IG1lc3NhZ2UuZXh0ZW5zaW9uUmFuZ2UubWFwKChlKSA9PiBlID8gRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlLnRvSlNPTihlKSA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai5leHRlbnNpb25SYW5nZSA9IFtdO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vbmVvZkRlY2wpIHtcbiAgICAgIG9iai5vbmVvZkRlY2wgPSBtZXNzYWdlLm9uZW9mRGVjbC5tYXAoKGUpID0+IGUgPyBPbmVvZkRlc2NyaXB0b3JQcm90by50b0pTT04oZSkgOiB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmoub25lb2ZEZWNsID0gW107XG4gICAgfVxuICAgIG1lc3NhZ2Uub3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAob2JqLm9wdGlvbnMgPSBtZXNzYWdlLm9wdGlvbnMgPyBNZXNzYWdlT3B0aW9ucy50b0pTT04obWVzc2FnZS5vcHRpb25zKSA6IHVuZGVmaW5lZCk7XG4gICAgaWYgKG1lc3NhZ2UucmVzZXJ2ZWRSYW5nZSkge1xuICAgICAgb2JqLnJlc2VydmVkUmFuZ2UgPSBtZXNzYWdlLnJlc2VydmVkUmFuZ2UubWFwKChlKSA9PiBlID8gRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2UudG9KU09OKGUpIDogdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqLnJlc2VydmVkUmFuZ2UgPSBbXTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucmVzZXJ2ZWROYW1lKSB7XG4gICAgICBvYmoucmVzZXJ2ZWROYW1lID0gbWVzc2FnZS5yZXNlcnZlZE5hbWUubWFwKChlKSA9PiBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqLnJlc2VydmVkTmFtZSA9IFtdO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8RGVzY3JpcHRvclByb3RvPik6IERlc2NyaXB0b3JQcm90byB7XG4gICAgcmV0dXJuIERlc2NyaXB0b3JQcm90by5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcblxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPERlc2NyaXB0b3JQcm90bz4pOiBEZXNjcmlwdG9yUHJvdG8ge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRGVzY3JpcHRvclByb3RvKCk7XG4gICAgbWVzc2FnZS5uYW1lID0gb2JqZWN0Lm5hbWUgPz8gXCJcIjtcbiAgICBtZXNzYWdlLmZpZWxkID0gb2JqZWN0LmZpZWxkPy5tYXAoKGUpID0+IEZpZWxkRGVzY3JpcHRvclByb3RvLmZyb21QYXJ0aWFsKGUpKSB8fCBbXTtcbiAgICBtZXNzYWdlLmV4dGVuc2lvbiA9IG9iamVjdC5leHRlbnNpb24/Lm1hcCgoZSkgPT4gRmllbGREZXNjcmlwdG9yUHJvdG8uZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIG1lc3NhZ2UubmVzdGVkVHlwZSA9IG9iamVjdC5uZXN0ZWRUeXBlPy5tYXAoKGUpID0+IERlc2NyaXB0b3JQcm90by5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgbWVzc2FnZS5lbnVtVHlwZSA9IG9iamVjdC5lbnVtVHlwZT8ubWFwKChlKSA9PiBFbnVtRGVzY3JpcHRvclByb3RvLmZyb21QYXJ0aWFsKGUpKSB8fCBbXTtcbiAgICBtZXNzYWdlLmV4dGVuc2lvblJhbmdlID0gb2JqZWN0LmV4dGVuc2lvblJhbmdlPy5tYXAoKGUpID0+IERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZS5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgbWVzc2FnZS5vbmVvZkRlY2wgPSBvYmplY3Qub25lb2ZEZWNsPy5tYXAoKGUpID0+IE9uZW9mRGVzY3JpcHRvclByb3RvLmZyb21QYXJ0aWFsKGUpKSB8fCBbXTtcbiAgICBtZXNzYWdlLm9wdGlvbnMgPSAob2JqZWN0Lm9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBvYmplY3Qub3B0aW9ucyAhPT0gbnVsbClcbiAgICAgID8gTWVzc2FnZU9wdGlvbnMuZnJvbVBhcnRpYWwob2JqZWN0Lm9wdGlvbnMpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBtZXNzYWdlLnJlc2VydmVkUmFuZ2UgPSBvYmplY3QucmVzZXJ2ZWRSYW5nZT8ubWFwKChlKSA9PiBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZS5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgbWVzc2FnZS5yZXNlcnZlZE5hbWUgPSBvYmplY3QucmVzZXJ2ZWROYW1lPy5tYXAoKGUpID0+IGUpIHx8IFtdO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZURlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSgpOiBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2Uge1xuICByZXR1cm4geyBzdGFydDogMCwgZW5kOiAwLCBvcHRpb25zOiB1bmRlZmluZWQgfTtcbn1cblxuZXhwb3J0IGNvbnN0IERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnN0YXJ0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmludDMyKG1lc3NhZ2Uuc3RhcnQpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5lbmQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmludDMyKG1lc3NhZ2UuZW5kKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBFeHRlbnNpb25SYW5nZU9wdGlvbnMuZW5jb2RlKG1lc3NhZ2Uub3B0aW9ucywgd3JpdGVyLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2Uge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSA4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnN0YXJ0ID0gcmVhZGVyLmludDMyKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5lbmQgPSByZWFkZXIuaW50MzIoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGlmICh0YWcgIT09IDI2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm9wdGlvbnMgPSBFeHRlbnNpb25SYW5nZU9wdGlvbnMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiBpc1NldChvYmplY3Quc3RhcnQpID8gTnVtYmVyKG9iamVjdC5zdGFydCkgOiAwLFxuICAgICAgZW5kOiBpc1NldChvYmplY3QuZW5kKSA/IE51bWJlcihvYmplY3QuZW5kKSA6IDAsXG4gICAgICBvcHRpb25zOiBpc1NldChvYmplY3Qub3B0aW9ucykgPyBFeHRlbnNpb25SYW5nZU9wdGlvbnMuZnJvbUpTT04ob2JqZWN0Lm9wdGlvbnMpIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgbWVzc2FnZS5zdGFydCAhPT0gdW5kZWZpbmVkICYmIChvYmouc3RhcnQgPSBNYXRoLnJvdW5kKG1lc3NhZ2Uuc3RhcnQpKTtcbiAgICBtZXNzYWdlLmVuZCAhPT0gdW5kZWZpbmVkICYmIChvYmouZW5kID0gTWF0aC5yb3VuZChtZXNzYWdlLmVuZCkpO1xuICAgIG1lc3NhZ2Uub3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAob2JqLm9wdGlvbnMgPSBtZXNzYWdlLm9wdGlvbnMgPyBFeHRlbnNpb25SYW5nZU9wdGlvbnMudG9KU09OKG1lc3NhZ2Uub3B0aW9ucykgOiB1bmRlZmluZWQpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2U+KTogRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlIHtcbiAgICByZXR1cm4gRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8RGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlPik6IERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2UoKTtcbiAgICBtZXNzYWdlLnN0YXJ0ID0gb2JqZWN0LnN0YXJ0ID8/IDA7XG4gICAgbWVzc2FnZS5lbmQgPSBvYmplY3QuZW5kID8/IDA7XG4gICAgbWVzc2FnZS5vcHRpb25zID0gKG9iamVjdC5vcHRpb25zICE9PSB1bmRlZmluZWQgJiYgb2JqZWN0Lm9wdGlvbnMgIT09IG51bGwpXG4gICAgICA/IEV4dGVuc2lvblJhbmdlT3B0aW9ucy5mcm9tUGFydGlhbChvYmplY3Qub3B0aW9ucylcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZURlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlKCk6IERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlIHtcbiAgcmV0dXJuIHsgc3RhcnQ6IDAsIGVuZDogMCB9O1xufVxuXG5leHBvcnQgY29uc3QgRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2UgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnN0YXJ0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmludDMyKG1lc3NhZ2Uuc3RhcnQpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5lbmQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmludDMyKG1lc3NhZ2UuZW5kKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZSgpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gOCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5zdGFydCA9IHJlYWRlci5pbnQzMigpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZW5kID0gcmVhZGVyLmludDMyKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZSB7XG4gICAgcmV0dXJuIHsgc3RhcnQ6IGlzU2V0KG9iamVjdC5zdGFydCkgPyBOdW1iZXIob2JqZWN0LnN0YXJ0KSA6IDAsIGVuZDogaXNTZXQob2JqZWN0LmVuZCkgPyBOdW1iZXIob2JqZWN0LmVuZCkgOiAwIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBtZXNzYWdlLnN0YXJ0ICE9PSB1bmRlZmluZWQgJiYgKG9iai5zdGFydCA9IE1hdGgucm91bmQobWVzc2FnZS5zdGFydCkpO1xuICAgIG1lc3NhZ2UuZW5kICE9PSB1bmRlZmluZWQgJiYgKG9iai5lbmQgPSBNYXRoLnJvdW5kKG1lc3NhZ2UuZW5kKSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlPik6IERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlIHtcbiAgICByZXR1cm4gRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2UuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG5cbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZT4pOiBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZSgpO1xuICAgIG1lc3NhZ2Uuc3RhcnQgPSBvYmplY3Quc3RhcnQgPz8gMDtcbiAgICBtZXNzYWdlLmVuZCA9IG9iamVjdC5lbmQgPz8gMDtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VFeHRlbnNpb25SYW5nZU9wdGlvbnMoKTogRXh0ZW5zaW9uUmFuZ2VPcHRpb25zIHtcbiAgcmV0dXJuIHsgdW5pbnRlcnByZXRlZE9wdGlvbjogW10gfTtcbn1cblxuZXhwb3J0IGNvbnN0IEV4dGVuc2lvblJhbmdlT3B0aW9ucyA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IEV4dGVuc2lvblJhbmdlT3B0aW9ucywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24pIHtcbiAgICAgIFVuaW50ZXJwcmV0ZWRPcHRpb24uZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDc5OTQpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogRXh0ZW5zaW9uUmFuZ2VPcHRpb25zIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUV4dGVuc2lvblJhbmdlT3B0aW9ucygpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDk5OTpcbiAgICAgICAgICBpZiAodGFnICE9PSA3OTk0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24ucHVzaChVbmludGVycHJldGVkT3B0aW9uLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogRXh0ZW5zaW9uUmFuZ2VPcHRpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgdW5pbnRlcnByZXRlZE9wdGlvbjogQXJyYXkuaXNBcnJheShvYmplY3Q/LnVuaW50ZXJwcmV0ZWRPcHRpb24pXG4gICAgICAgID8gb2JqZWN0LnVuaW50ZXJwcmV0ZWRPcHRpb24ubWFwKChlOiBhbnkpID0+IFVuaW50ZXJwcmV0ZWRPcHRpb24uZnJvbUpTT04oZSkpXG4gICAgICAgIDogW10sXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogRXh0ZW5zaW9uUmFuZ2VPcHRpb25zKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBpZiAobWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uKSB7XG4gICAgICBvYmoudW5pbnRlcnByZXRlZE9wdGlvbiA9IG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbi5tYXAoKGUpID0+IGUgPyBVbmludGVycHJldGVkT3B0aW9uLnRvSlNPTihlKSA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai51bmludGVycHJldGVkT3B0aW9uID0gW107XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxFeHRlbnNpb25SYW5nZU9wdGlvbnM+KTogRXh0ZW5zaW9uUmFuZ2VPcHRpb25zIHtcbiAgICByZXR1cm4gRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8RXh0ZW5zaW9uUmFuZ2VPcHRpb25zPik6IEV4dGVuc2lvblJhbmdlT3B0aW9ucyB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VFeHRlbnNpb25SYW5nZU9wdGlvbnMoKTtcbiAgICBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24gPSBvYmplY3QudW5pbnRlcnByZXRlZE9wdGlvbj8ubWFwKChlKSA9PiBVbmludGVycHJldGVkT3B0aW9uLmZyb21QYXJ0aWFsKGUpKSB8fCBbXTtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VGaWVsZERlc2NyaXB0b3JQcm90bygpOiBGaWVsZERlc2NyaXB0b3JQcm90byB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogXCJcIixcbiAgICBudW1iZXI6IDAsXG4gICAgbGFiZWw6IDEsXG4gICAgdHlwZTogMSxcbiAgICB0eXBlTmFtZTogXCJcIixcbiAgICBleHRlbmRlZTogXCJcIixcbiAgICBkZWZhdWx0VmFsdWU6IFwiXCIsXG4gICAgb25lb2ZJbmRleDogMCxcbiAgICBqc29uTmFtZTogXCJcIixcbiAgICBvcHRpb25zOiB1bmRlZmluZWQsXG4gICAgcHJvdG8zT3B0aW9uYWw6IGZhbHNlLFxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgRmllbGREZXNjcmlwdG9yUHJvdG8gPSB7XG4gIGVuY29kZShtZXNzYWdlOiBGaWVsZERlc2NyaXB0b3JQcm90bywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLm5hbWUgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLm5hbWUpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5udW1iZXIgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmludDMyKG1lc3NhZ2UubnVtYmVyKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubGFiZWwgIT09IDEpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzIpLmludDMyKG1lc3NhZ2UubGFiZWwpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS50eXBlICE9PSAxKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQwKS5pbnQzMihtZXNzYWdlLnR5cGUpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS50eXBlTmFtZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMig1MCkuc3RyaW5nKG1lc3NhZ2UudHlwZU5hbWUpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5leHRlbmRlZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxOCkuc3RyaW5nKG1lc3NhZ2UuZXh0ZW5kZWUpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kZWZhdWx0VmFsdWUgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTgpLnN0cmluZyhtZXNzYWdlLmRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm9uZW9mSW5kZXggIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNzIpLmludDMyKG1lc3NhZ2Uub25lb2ZJbmRleCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmpzb25OYW1lICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgyKS5zdHJpbmcobWVzc2FnZS5qc29uTmFtZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgRmllbGRPcHRpb25zLmVuY29kZShtZXNzYWdlLm9wdGlvbnMsIHdyaXRlci51aW50MzIoNjYpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnByb3RvM09wdGlvbmFsID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEzNikuYm9vbChtZXNzYWdlLnByb3RvM09wdGlvbmFsKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBGaWVsZERlc2NyaXB0b3JQcm90byB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VGaWVsZERlc2NyaXB0b3JQcm90bygpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubmFtZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGlmICh0YWcgIT09IDI0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm51bWJlciA9IHJlYWRlci5pbnQzMigpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMzIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubGFiZWwgPSByZWFkZXIuaW50MzIoKSBhcyBhbnk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBpZiAodGFnICE9PSA0MCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS50eXBlID0gcmVhZGVyLmludDMyKCkgYXMgYW55O1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UudHlwZU5hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxOCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5leHRlbmRlZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIGlmICh0YWcgIT09IDU4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmRlZmF1bHRWYWx1ZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIGlmICh0YWcgIT09IDcyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm9uZW9mSW5kZXggPSByZWFkZXIuaW50MzIoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBpZiAodGFnICE9PSA4Mikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5qc29uTmFtZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIGlmICh0YWcgIT09IDY2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm9wdGlvbnMgPSBGaWVsZE9wdGlvbnMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMzYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UucHJvdG8zT3B0aW9uYWwgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogRmllbGREZXNjcmlwdG9yUHJvdG8ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBpc1NldChvYmplY3QubmFtZSkgPyBTdHJpbmcob2JqZWN0Lm5hbWUpIDogXCJcIixcbiAgICAgIG51bWJlcjogaXNTZXQob2JqZWN0Lm51bWJlcikgPyBOdW1iZXIob2JqZWN0Lm51bWJlcikgOiAwLFxuICAgICAgbGFiZWw6IGlzU2V0KG9iamVjdC5sYWJlbCkgPyBmaWVsZERlc2NyaXB0b3JQcm90b19MYWJlbEZyb21KU09OKG9iamVjdC5sYWJlbCkgOiAxLFxuICAgICAgdHlwZTogaXNTZXQob2JqZWN0LnR5cGUpID8gZmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZUZyb21KU09OKG9iamVjdC50eXBlKSA6IDEsXG4gICAgICB0eXBlTmFtZTogaXNTZXQob2JqZWN0LnR5cGVOYW1lKSA/IFN0cmluZyhvYmplY3QudHlwZU5hbWUpIDogXCJcIixcbiAgICAgIGV4dGVuZGVlOiBpc1NldChvYmplY3QuZXh0ZW5kZWUpID8gU3RyaW5nKG9iamVjdC5leHRlbmRlZSkgOiBcIlwiLFxuICAgICAgZGVmYXVsdFZhbHVlOiBpc1NldChvYmplY3QuZGVmYXVsdFZhbHVlKSA/IFN0cmluZyhvYmplY3QuZGVmYXVsdFZhbHVlKSA6IFwiXCIsXG4gICAgICBvbmVvZkluZGV4OiBpc1NldChvYmplY3Qub25lb2ZJbmRleCkgPyBOdW1iZXIob2JqZWN0Lm9uZW9mSW5kZXgpIDogMCxcbiAgICAgIGpzb25OYW1lOiBpc1NldChvYmplY3QuanNvbk5hbWUpID8gU3RyaW5nKG9iamVjdC5qc29uTmFtZSkgOiBcIlwiLFxuICAgICAgb3B0aW9uczogaXNTZXQob2JqZWN0Lm9wdGlvbnMpID8gRmllbGRPcHRpb25zLmZyb21KU09OKG9iamVjdC5vcHRpb25zKSA6IHVuZGVmaW5lZCxcbiAgICAgIHByb3RvM09wdGlvbmFsOiBpc1NldChvYmplY3QucHJvdG8zT3B0aW9uYWwpID8gQm9vbGVhbihvYmplY3QucHJvdG8zT3B0aW9uYWwpIDogZmFsc2UsXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogRmllbGREZXNjcmlwdG9yUHJvdG8pOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIG1lc3NhZ2UubmFtZSAhPT0gdW5kZWZpbmVkICYmIChvYmoubmFtZSA9IG1lc3NhZ2UubmFtZSk7XG4gICAgbWVzc2FnZS5udW1iZXIgIT09IHVuZGVmaW5lZCAmJiAob2JqLm51bWJlciA9IE1hdGgucm91bmQobWVzc2FnZS5udW1iZXIpKTtcbiAgICBtZXNzYWdlLmxhYmVsICE9PSB1bmRlZmluZWQgJiYgKG9iai5sYWJlbCA9IGZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsVG9KU09OKG1lc3NhZ2UubGFiZWwpKTtcbiAgICBtZXNzYWdlLnR5cGUgIT09IHVuZGVmaW5lZCAmJiAob2JqLnR5cGUgPSBmaWVsZERlc2NyaXB0b3JQcm90b19UeXBlVG9KU09OKG1lc3NhZ2UudHlwZSkpO1xuICAgIG1lc3NhZ2UudHlwZU5hbWUgIT09IHVuZGVmaW5lZCAmJiAob2JqLnR5cGVOYW1lID0gbWVzc2FnZS50eXBlTmFtZSk7XG4gICAgbWVzc2FnZS5leHRlbmRlZSAhPT0gdW5kZWZpbmVkICYmIChvYmouZXh0ZW5kZWUgPSBtZXNzYWdlLmV4dGVuZGVlKTtcbiAgICBtZXNzYWdlLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIChvYmouZGVmYXVsdFZhbHVlID0gbWVzc2FnZS5kZWZhdWx0VmFsdWUpO1xuICAgIG1lc3NhZ2Uub25lb2ZJbmRleCAhPT0gdW5kZWZpbmVkICYmIChvYmoub25lb2ZJbmRleCA9IE1hdGgucm91bmQobWVzc2FnZS5vbmVvZkluZGV4KSk7XG4gICAgbWVzc2FnZS5qc29uTmFtZSAhPT0gdW5kZWZpbmVkICYmIChvYmouanNvbk5hbWUgPSBtZXNzYWdlLmpzb25OYW1lKTtcbiAgICBtZXNzYWdlLm9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiAob2JqLm9wdGlvbnMgPSBtZXNzYWdlLm9wdGlvbnMgPyBGaWVsZE9wdGlvbnMudG9KU09OKG1lc3NhZ2Uub3B0aW9ucykgOiB1bmRlZmluZWQpO1xuICAgIG1lc3NhZ2UucHJvdG8zT3B0aW9uYWwgIT09IHVuZGVmaW5lZCAmJiAob2JqLnByb3RvM09wdGlvbmFsID0gbWVzc2FnZS5wcm90bzNPcHRpb25hbCk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPEZpZWxkRGVzY3JpcHRvclByb3RvPik6IEZpZWxkRGVzY3JpcHRvclByb3RvIHtcbiAgICByZXR1cm4gRmllbGREZXNjcmlwdG9yUHJvdG8uZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG5cbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxGaWVsZERlc2NyaXB0b3JQcm90bz4pOiBGaWVsZERlc2NyaXB0b3JQcm90byB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VGaWVsZERlc2NyaXB0b3JQcm90bygpO1xuICAgIG1lc3NhZ2UubmFtZSA9IG9iamVjdC5uYW1lID8/IFwiXCI7XG4gICAgbWVzc2FnZS5udW1iZXIgPSBvYmplY3QubnVtYmVyID8/IDA7XG4gICAgbWVzc2FnZS5sYWJlbCA9IG9iamVjdC5sYWJlbCA/PyAxO1xuICAgIG1lc3NhZ2UudHlwZSA9IG9iamVjdC50eXBlID8/IDE7XG4gICAgbWVzc2FnZS50eXBlTmFtZSA9IG9iamVjdC50eXBlTmFtZSA/PyBcIlwiO1xuICAgIG1lc3NhZ2UuZXh0ZW5kZWUgPSBvYmplY3QuZXh0ZW5kZWUgPz8gXCJcIjtcbiAgICBtZXNzYWdlLmRlZmF1bHRWYWx1ZSA9IG9iamVjdC5kZWZhdWx0VmFsdWUgPz8gXCJcIjtcbiAgICBtZXNzYWdlLm9uZW9mSW5kZXggPSBvYmplY3Qub25lb2ZJbmRleCA/PyAwO1xuICAgIG1lc3NhZ2UuanNvbk5hbWUgPSBvYmplY3QuanNvbk5hbWUgPz8gXCJcIjtcbiAgICBtZXNzYWdlLm9wdGlvbnMgPSAob2JqZWN0Lm9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBvYmplY3Qub3B0aW9ucyAhPT0gbnVsbClcbiAgICAgID8gRmllbGRPcHRpb25zLmZyb21QYXJ0aWFsKG9iamVjdC5vcHRpb25zKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgbWVzc2FnZS5wcm90bzNPcHRpb25hbCA9IG9iamVjdC5wcm90bzNPcHRpb25hbCA/PyBmYWxzZTtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VPbmVvZkRlc2NyaXB0b3JQcm90bygpOiBPbmVvZkRlc2NyaXB0b3JQcm90byB7XG4gIHJldHVybiB7IG5hbWU6IFwiXCIsIG9wdGlvbnM6IHVuZGVmaW5lZCB9O1xufVxuXG5leHBvcnQgY29uc3QgT25lb2ZEZXNjcmlwdG9yUHJvdG8gPSB7XG4gIGVuY29kZShtZXNzYWdlOiBPbmVvZkRlc2NyaXB0b3JQcm90bywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLm5hbWUgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLm5hbWUpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIE9uZW9mT3B0aW9ucy5lbmNvZGUobWVzc2FnZS5vcHRpb25zLCB3cml0ZXIudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IE9uZW9mRGVzY3JpcHRvclByb3RvIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZU9uZW9mRGVzY3JpcHRvclByb3RvKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uub3B0aW9ucyA9IE9uZW9mT3B0aW9ucy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogT25lb2ZEZXNjcmlwdG9yUHJvdG8ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBpc1NldChvYmplY3QubmFtZSkgPyBTdHJpbmcob2JqZWN0Lm5hbWUpIDogXCJcIixcbiAgICAgIG9wdGlvbnM6IGlzU2V0KG9iamVjdC5vcHRpb25zKSA/IE9uZW9mT3B0aW9ucy5mcm9tSlNPTihvYmplY3Qub3B0aW9ucykgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogT25lb2ZEZXNjcmlwdG9yUHJvdG8pOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIG1lc3NhZ2UubmFtZSAhPT0gdW5kZWZpbmVkICYmIChvYmoubmFtZSA9IG1lc3NhZ2UubmFtZSk7XG4gICAgbWVzc2FnZS5vcHRpb25zICE9PSB1bmRlZmluZWQgJiYgKG9iai5vcHRpb25zID0gbWVzc2FnZS5vcHRpb25zID8gT25lb2ZPcHRpb25zLnRvSlNPTihtZXNzYWdlLm9wdGlvbnMpIDogdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8T25lb2ZEZXNjcmlwdG9yUHJvdG8+KTogT25lb2ZEZXNjcmlwdG9yUHJvdG8ge1xuICAgIHJldHVybiBPbmVvZkRlc2NyaXB0b3JQcm90by5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcblxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPE9uZW9mRGVzY3JpcHRvclByb3RvPik6IE9uZW9mRGVzY3JpcHRvclByb3RvIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZU9uZW9mRGVzY3JpcHRvclByb3RvKCk7XG4gICAgbWVzc2FnZS5uYW1lID0gb2JqZWN0Lm5hbWUgPz8gXCJcIjtcbiAgICBtZXNzYWdlLm9wdGlvbnMgPSAob2JqZWN0Lm9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBvYmplY3Qub3B0aW9ucyAhPT0gbnVsbClcbiAgICAgID8gT25lb2ZPcHRpb25zLmZyb21QYXJ0aWFsKG9iamVjdC5vcHRpb25zKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlRW51bURlc2NyaXB0b3JQcm90bygpOiBFbnVtRGVzY3JpcHRvclByb3RvIHtcbiAgcmV0dXJuIHsgbmFtZTogXCJcIiwgdmFsdWU6IFtdLCBvcHRpb25zOiB1bmRlZmluZWQsIHJlc2VydmVkUmFuZ2U6IFtdLCByZXNlcnZlZE5hbWU6IFtdIH07XG59XG5cbmV4cG9ydCBjb25zdCBFbnVtRGVzY3JpcHRvclByb3RvID0ge1xuICBlbmNvZGUobWVzc2FnZTogRW51bURlc2NyaXB0b3JQcm90bywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLm5hbWUgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLm5hbWUpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS52YWx1ZSkge1xuICAgICAgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBFbnVtT3B0aW9ucy5lbmNvZGUobWVzc2FnZS5vcHRpb25zLCB3cml0ZXIudWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5yZXNlcnZlZFJhbmdlKSB7XG4gICAgICBFbnVtRGVzY3JpcHRvclByb3RvX0VudW1SZXNlcnZlZFJhbmdlLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UucmVzZXJ2ZWROYW1lKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQyKS5zdHJpbmcodiEpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IEVudW1EZXNjcmlwdG9yUHJvdG8ge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRW51bURlc2NyaXB0b3JQcm90bygpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubmFtZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGlmICh0YWcgIT09IDE4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnZhbHVlLnB1c2goRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMjYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uub3B0aW9ucyA9IEVudW1PcHRpb25zLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBpZiAodGFnICE9PSAzNCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5yZXNlcnZlZFJhbmdlLnB1c2goRW51bURlc2NyaXB0b3JQcm90b19FbnVtUmVzZXJ2ZWRSYW5nZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGlmICh0YWcgIT09IDQyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnJlc2VydmVkTmFtZS5wdXNoKHJlYWRlci5zdHJpbmcoKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBFbnVtRGVzY3JpcHRvclByb3RvIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogaXNTZXQob2JqZWN0Lm5hbWUpID8gU3RyaW5nKG9iamVjdC5uYW1lKSA6IFwiXCIsXG4gICAgICB2YWx1ZTogQXJyYXkuaXNBcnJheShvYmplY3Q/LnZhbHVlKSA/IG9iamVjdC52YWx1ZS5tYXAoKGU6IGFueSkgPT4gRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLmZyb21KU09OKGUpKSA6IFtdLFxuICAgICAgb3B0aW9uczogaXNTZXQob2JqZWN0Lm9wdGlvbnMpID8gRW51bU9wdGlvbnMuZnJvbUpTT04ob2JqZWN0Lm9wdGlvbnMpIDogdW5kZWZpbmVkLFxuICAgICAgcmVzZXJ2ZWRSYW5nZTogQXJyYXkuaXNBcnJheShvYmplY3Q/LnJlc2VydmVkUmFuZ2UpXG4gICAgICAgID8gb2JqZWN0LnJlc2VydmVkUmFuZ2UubWFwKChlOiBhbnkpID0+IEVudW1EZXNjcmlwdG9yUHJvdG9fRW51bVJlc2VydmVkUmFuZ2UuZnJvbUpTT04oZSkpXG4gICAgICAgIDogW10sXG4gICAgICByZXNlcnZlZE5hbWU6IEFycmF5LmlzQXJyYXkob2JqZWN0Py5yZXNlcnZlZE5hbWUpID8gb2JqZWN0LnJlc2VydmVkTmFtZS5tYXAoKGU6IGFueSkgPT4gU3RyaW5nKGUpKSA6IFtdLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IEVudW1EZXNjcmlwdG9yUHJvdG8pOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIG1lc3NhZ2UubmFtZSAhPT0gdW5kZWZpbmVkICYmIChvYmoubmFtZSA9IG1lc3NhZ2UubmFtZSk7XG4gICAgaWYgKG1lc3NhZ2UudmFsdWUpIHtcbiAgICAgIG9iai52YWx1ZSA9IG1lc3NhZ2UudmFsdWUubWFwKChlKSA9PiBlID8gRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLnRvSlNPTihlKSA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai52YWx1ZSA9IFtdO1xuICAgIH1cbiAgICBtZXNzYWdlLm9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiAob2JqLm9wdGlvbnMgPSBtZXNzYWdlLm9wdGlvbnMgPyBFbnVtT3B0aW9ucy50b0pTT04obWVzc2FnZS5vcHRpb25zKSA6IHVuZGVmaW5lZCk7XG4gICAgaWYgKG1lc3NhZ2UucmVzZXJ2ZWRSYW5nZSkge1xuICAgICAgb2JqLnJlc2VydmVkUmFuZ2UgPSBtZXNzYWdlLnJlc2VydmVkUmFuZ2UubWFwKChlKSA9PlxuICAgICAgICBlID8gRW51bURlc2NyaXB0b3JQcm90b19FbnVtUmVzZXJ2ZWRSYW5nZS50b0pTT04oZSkgOiB1bmRlZmluZWRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai5yZXNlcnZlZFJhbmdlID0gW107XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnJlc2VydmVkTmFtZSkge1xuICAgICAgb2JqLnJlc2VydmVkTmFtZSA9IG1lc3NhZ2UucmVzZXJ2ZWROYW1lLm1hcCgoZSkgPT4gZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai5yZXNlcnZlZE5hbWUgPSBbXTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPEVudW1EZXNjcmlwdG9yUHJvdG8+KTogRW51bURlc2NyaXB0b3JQcm90byB7XG4gICAgcmV0dXJuIEVudW1EZXNjcmlwdG9yUHJvdG8uZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG5cbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxFbnVtRGVzY3JpcHRvclByb3RvPik6IEVudW1EZXNjcmlwdG9yUHJvdG8ge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRW51bURlc2NyaXB0b3JQcm90bygpO1xuICAgIG1lc3NhZ2UubmFtZSA9IG9iamVjdC5uYW1lID8/IFwiXCI7XG4gICAgbWVzc2FnZS52YWx1ZSA9IG9iamVjdC52YWx1ZT8ubWFwKChlKSA9PiBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8uZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIG1lc3NhZ2Uub3B0aW9ucyA9IChvYmplY3Qub3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIG9iamVjdC5vcHRpb25zICE9PSBudWxsKVxuICAgICAgPyBFbnVtT3B0aW9ucy5mcm9tUGFydGlhbChvYmplY3Qub3B0aW9ucylcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIG1lc3NhZ2UucmVzZXJ2ZWRSYW5nZSA9IG9iamVjdC5yZXNlcnZlZFJhbmdlPy5tYXAoKGUpID0+IEVudW1EZXNjcmlwdG9yUHJvdG9fRW51bVJlc2VydmVkUmFuZ2UuZnJvbVBhcnRpYWwoZSkpIHx8XG4gICAgICBbXTtcbiAgICBtZXNzYWdlLnJlc2VydmVkTmFtZSA9IG9iamVjdC5yZXNlcnZlZE5hbWU/Lm1hcCgoZSkgPT4gZSkgfHwgW107XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlRW51bURlc2NyaXB0b3JQcm90b19FbnVtUmVzZXJ2ZWRSYW5nZSgpOiBFbnVtRGVzY3JpcHRvclByb3RvX0VudW1SZXNlcnZlZFJhbmdlIHtcbiAgcmV0dXJuIHsgc3RhcnQ6IDAsIGVuZDogMCB9O1xufVxuXG5leHBvcnQgY29uc3QgRW51bURlc2NyaXB0b3JQcm90b19FbnVtUmVzZXJ2ZWRSYW5nZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IEVudW1EZXNjcmlwdG9yUHJvdG9fRW51bVJlc2VydmVkUmFuZ2UsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5zdGFydCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5pbnQzMihtZXNzYWdlLnN0YXJ0KTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZW5kICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5pbnQzMihtZXNzYWdlLmVuZCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogRW51bURlc2NyaXB0b3JQcm90b19FbnVtUmVzZXJ2ZWRSYW5nZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VFbnVtRGVzY3JpcHRvclByb3RvX0VudW1SZXNlcnZlZFJhbmdlKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSA4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnN0YXJ0ID0gcmVhZGVyLmludDMyKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5lbmQgPSByZWFkZXIuaW50MzIoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IEVudW1EZXNjcmlwdG9yUHJvdG9fRW51bVJlc2VydmVkUmFuZ2Uge1xuICAgIHJldHVybiB7IHN0YXJ0OiBpc1NldChvYmplY3Quc3RhcnQpID8gTnVtYmVyKG9iamVjdC5zdGFydCkgOiAwLCBlbmQ6IGlzU2V0KG9iamVjdC5lbmQpID8gTnVtYmVyKG9iamVjdC5lbmQpIDogMCB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBFbnVtRGVzY3JpcHRvclByb3RvX0VudW1SZXNlcnZlZFJhbmdlKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBtZXNzYWdlLnN0YXJ0ICE9PSB1bmRlZmluZWQgJiYgKG9iai5zdGFydCA9IE1hdGgucm91bmQobWVzc2FnZS5zdGFydCkpO1xuICAgIG1lc3NhZ2UuZW5kICE9PSB1bmRlZmluZWQgJiYgKG9iai5lbmQgPSBNYXRoLnJvdW5kKG1lc3NhZ2UuZW5kKSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPEVudW1EZXNjcmlwdG9yUHJvdG9fRW51bVJlc2VydmVkUmFuZ2U+KTogRW51bURlc2NyaXB0b3JQcm90b19FbnVtUmVzZXJ2ZWRSYW5nZSB7XG4gICAgcmV0dXJuIEVudW1EZXNjcmlwdG9yUHJvdG9fRW51bVJlc2VydmVkUmFuZ2UuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG5cbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxFbnVtRGVzY3JpcHRvclByb3RvX0VudW1SZXNlcnZlZFJhbmdlPik6IEVudW1EZXNjcmlwdG9yUHJvdG9fRW51bVJlc2VydmVkUmFuZ2Uge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRW51bURlc2NyaXB0b3JQcm90b19FbnVtUmVzZXJ2ZWRSYW5nZSgpO1xuICAgIG1lc3NhZ2Uuc3RhcnQgPSBvYmplY3Quc3RhcnQgPz8gMDtcbiAgICBtZXNzYWdlLmVuZCA9IG9iamVjdC5lbmQgPz8gMDtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8oKTogRW51bVZhbHVlRGVzY3JpcHRvclByb3RvIHtcbiAgcmV0dXJuIHsgbmFtZTogXCJcIiwgbnVtYmVyOiAwLCBvcHRpb25zOiB1bmRlZmluZWQgfTtcbn1cblxuZXhwb3J0IGNvbnN0IEVudW1WYWx1ZURlc2NyaXB0b3JQcm90byA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IEVudW1WYWx1ZURlc2NyaXB0b3JQcm90bywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLm5hbWUgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLm5hbWUpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5udW1iZXIgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmludDMyKG1lc3NhZ2UubnVtYmVyKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBFbnVtVmFsdWVPcHRpb25zLmVuY29kZShtZXNzYWdlLm9wdGlvbnMsIHdyaXRlci51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogRW51bVZhbHVlRGVzY3JpcHRvclByb3RvIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUVudW1WYWx1ZURlc2NyaXB0b3JQcm90bygpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubmFtZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGlmICh0YWcgIT09IDE2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm51bWJlciA9IHJlYWRlci5pbnQzMigpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMjYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uub3B0aW9ucyA9IEVudW1WYWx1ZU9wdGlvbnMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IEVudW1WYWx1ZURlc2NyaXB0b3JQcm90byB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IGlzU2V0KG9iamVjdC5uYW1lKSA/IFN0cmluZyhvYmplY3QubmFtZSkgOiBcIlwiLFxuICAgICAgbnVtYmVyOiBpc1NldChvYmplY3QubnVtYmVyKSA/IE51bWJlcihvYmplY3QubnVtYmVyKSA6IDAsXG4gICAgICBvcHRpb25zOiBpc1NldChvYmplY3Qub3B0aW9ucykgPyBFbnVtVmFsdWVPcHRpb25zLmZyb21KU09OKG9iamVjdC5vcHRpb25zKSA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8pOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIG1lc3NhZ2UubmFtZSAhPT0gdW5kZWZpbmVkICYmIChvYmoubmFtZSA9IG1lc3NhZ2UubmFtZSk7XG4gICAgbWVzc2FnZS5udW1iZXIgIT09IHVuZGVmaW5lZCAmJiAob2JqLm51bWJlciA9IE1hdGgucm91bmQobWVzc2FnZS5udW1iZXIpKTtcbiAgICBtZXNzYWdlLm9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgKG9iai5vcHRpb25zID0gbWVzc2FnZS5vcHRpb25zID8gRW51bVZhbHVlT3B0aW9ucy50b0pTT04obWVzc2FnZS5vcHRpb25zKSA6IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPEVudW1WYWx1ZURlc2NyaXB0b3JQcm90bz4pOiBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ge1xuICAgIHJldHVybiBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8uZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG5cbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8+KTogRW51bVZhbHVlRGVzY3JpcHRvclByb3RvIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUVudW1WYWx1ZURlc2NyaXB0b3JQcm90bygpO1xuICAgIG1lc3NhZ2UubmFtZSA9IG9iamVjdC5uYW1lID8/IFwiXCI7XG4gICAgbWVzc2FnZS5udW1iZXIgPSBvYmplY3QubnVtYmVyID8/IDA7XG4gICAgbWVzc2FnZS5vcHRpb25zID0gKG9iamVjdC5vcHRpb25zICE9PSB1bmRlZmluZWQgJiYgb2JqZWN0Lm9wdGlvbnMgIT09IG51bGwpXG4gICAgICA/IEVudW1WYWx1ZU9wdGlvbnMuZnJvbVBhcnRpYWwob2JqZWN0Lm9wdGlvbnMpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VTZXJ2aWNlRGVzY3JpcHRvclByb3RvKCk6IFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ge1xuICByZXR1cm4geyBuYW1lOiBcIlwiLCBtZXRob2Q6IFtdLCBvcHRpb25zOiB1bmRlZmluZWQgfTtcbn1cblxuZXhwb3J0IGNvbnN0IFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8gPSB7XG4gIGVuY29kZShtZXNzYWdlOiBTZXJ2aWNlRGVzY3JpcHRvclByb3RvLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UubmFtZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UubmFtZSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLm1ldGhvZCkge1xuICAgICAgTWV0aG9kRGVzY3JpcHRvclByb3RvLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBTZXJ2aWNlT3B0aW9ucy5lbmNvZGUobWVzc2FnZS5vcHRpb25zLCB3cml0ZXIudWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlU2VydmljZURlc2NyaXB0b3JQcm90bygpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubmFtZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGlmICh0YWcgIT09IDE4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm1ldGhvZC5wdXNoKE1ldGhvZERlc2NyaXB0b3JQcm90by5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGlmICh0YWcgIT09IDI2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm9wdGlvbnMgPSBTZXJ2aWNlT3B0aW9ucy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogU2VydmljZURlc2NyaXB0b3JQcm90byB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IGlzU2V0KG9iamVjdC5uYW1lKSA/IFN0cmluZyhvYmplY3QubmFtZSkgOiBcIlwiLFxuICAgICAgbWV0aG9kOiBBcnJheS5pc0FycmF5KG9iamVjdD8ubWV0aG9kKSA/IG9iamVjdC5tZXRob2QubWFwKChlOiBhbnkpID0+IE1ldGhvZERlc2NyaXB0b3JQcm90by5mcm9tSlNPTihlKSkgOiBbXSxcbiAgICAgIG9wdGlvbnM6IGlzU2V0KG9iamVjdC5vcHRpb25zKSA/IFNlcnZpY2VPcHRpb25zLmZyb21KU09OKG9iamVjdC5vcHRpb25zKSA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBTZXJ2aWNlRGVzY3JpcHRvclByb3RvKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBtZXNzYWdlLm5hbWUgIT09IHVuZGVmaW5lZCAmJiAob2JqLm5hbWUgPSBtZXNzYWdlLm5hbWUpO1xuICAgIGlmIChtZXNzYWdlLm1ldGhvZCkge1xuICAgICAgb2JqLm1ldGhvZCA9IG1lc3NhZ2UubWV0aG9kLm1hcCgoZSkgPT4gZSA/IE1ldGhvZERlc2NyaXB0b3JQcm90by50b0pTT04oZSkgOiB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmoubWV0aG9kID0gW107XG4gICAgfVxuICAgIG1lc3NhZ2Uub3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAob2JqLm9wdGlvbnMgPSBtZXNzYWdlLm9wdGlvbnMgPyBTZXJ2aWNlT3B0aW9ucy50b0pTT04obWVzc2FnZS5vcHRpb25zKSA6IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8+KTogU2VydmljZURlc2NyaXB0b3JQcm90byB7XG4gICAgcmV0dXJuIFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8uZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG5cbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxTZXJ2aWNlRGVzY3JpcHRvclByb3RvPik6IFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlU2VydmljZURlc2NyaXB0b3JQcm90bygpO1xuICAgIG1lc3NhZ2UubmFtZSA9IG9iamVjdC5uYW1lID8/IFwiXCI7XG4gICAgbWVzc2FnZS5tZXRob2QgPSBvYmplY3QubWV0aG9kPy5tYXAoKGUpID0+IE1ldGhvZERlc2NyaXB0b3JQcm90by5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgbWVzc2FnZS5vcHRpb25zID0gKG9iamVjdC5vcHRpb25zICE9PSB1bmRlZmluZWQgJiYgb2JqZWN0Lm9wdGlvbnMgIT09IG51bGwpXG4gICAgICA/IFNlcnZpY2VPcHRpb25zLmZyb21QYXJ0aWFsKG9iamVjdC5vcHRpb25zKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlTWV0aG9kRGVzY3JpcHRvclByb3RvKCk6IE1ldGhvZERlc2NyaXB0b3JQcm90byB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogXCJcIixcbiAgICBpbnB1dFR5cGU6IFwiXCIsXG4gICAgb3V0cHV0VHlwZTogXCJcIixcbiAgICBvcHRpb25zOiB1bmRlZmluZWQsXG4gICAgY2xpZW50U3RyZWFtaW5nOiBmYWxzZSxcbiAgICBzZXJ2ZXJTdHJlYW1pbmc6IGZhbHNlLFxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgTWV0aG9kRGVzY3JpcHRvclByb3RvID0ge1xuICBlbmNvZGUobWVzc2FnZTogTWV0aG9kRGVzY3JpcHRvclByb3RvLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UubmFtZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UubmFtZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmlucHV0VHlwZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxOCkuc3RyaW5nKG1lc3NhZ2UuaW5wdXRUeXBlKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3V0cHV0VHlwZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNikuc3RyaW5nKG1lc3NhZ2Uub3V0cHV0VHlwZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgTWV0aG9kT3B0aW9ucy5lbmNvZGUobWVzc2FnZS5vcHRpb25zLCB3cml0ZXIudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5jbGllbnRTdHJlYW1pbmcgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDApLmJvb2wobWVzc2FnZS5jbGllbnRTdHJlYW1pbmcpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zZXJ2ZXJTdHJlYW1pbmcgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDgpLmJvb2wobWVzc2FnZS5zZXJ2ZXJTdHJlYW1pbmcpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IE1ldGhvZERlc2NyaXB0b3JQcm90byB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VNZXRob2REZXNjcmlwdG9yUHJvdG8oKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm5hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxOCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5pbnB1dFR5cGUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBpZiAodGFnICE9PSAyNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5vdXRwdXRUeXBlID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMzQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uub3B0aW9ucyA9IE1ldGhvZE9wdGlvbnMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGlmICh0YWcgIT09IDQwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmNsaWVudFN0cmVhbWluZyA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBpZiAodGFnICE9PSA0OCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5zZXJ2ZXJTdHJlYW1pbmcgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogTWV0aG9kRGVzY3JpcHRvclByb3RvIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogaXNTZXQob2JqZWN0Lm5hbWUpID8gU3RyaW5nKG9iamVjdC5uYW1lKSA6IFwiXCIsXG4gICAgICBpbnB1dFR5cGU6IGlzU2V0KG9iamVjdC5pbnB1dFR5cGUpID8gU3RyaW5nKG9iamVjdC5pbnB1dFR5cGUpIDogXCJcIixcbiAgICAgIG91dHB1dFR5cGU6IGlzU2V0KG9iamVjdC5vdXRwdXRUeXBlKSA/IFN0cmluZyhvYmplY3Qub3V0cHV0VHlwZSkgOiBcIlwiLFxuICAgICAgb3B0aW9uczogaXNTZXQob2JqZWN0Lm9wdGlvbnMpID8gTWV0aG9kT3B0aW9ucy5mcm9tSlNPTihvYmplY3Qub3B0aW9ucykgOiB1bmRlZmluZWQsXG4gICAgICBjbGllbnRTdHJlYW1pbmc6IGlzU2V0KG9iamVjdC5jbGllbnRTdHJlYW1pbmcpID8gQm9vbGVhbihvYmplY3QuY2xpZW50U3RyZWFtaW5nKSA6IGZhbHNlLFxuICAgICAgc2VydmVyU3RyZWFtaW5nOiBpc1NldChvYmplY3Quc2VydmVyU3RyZWFtaW5nKSA/IEJvb2xlYW4ob2JqZWN0LnNlcnZlclN0cmVhbWluZykgOiBmYWxzZSxcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBNZXRob2REZXNjcmlwdG9yUHJvdG8pOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIG1lc3NhZ2UubmFtZSAhPT0gdW5kZWZpbmVkICYmIChvYmoubmFtZSA9IG1lc3NhZ2UubmFtZSk7XG4gICAgbWVzc2FnZS5pbnB1dFR5cGUgIT09IHVuZGVmaW5lZCAmJiAob2JqLmlucHV0VHlwZSA9IG1lc3NhZ2UuaW5wdXRUeXBlKTtcbiAgICBtZXNzYWdlLm91dHB1dFR5cGUgIT09IHVuZGVmaW5lZCAmJiAob2JqLm91dHB1dFR5cGUgPSBtZXNzYWdlLm91dHB1dFR5cGUpO1xuICAgIG1lc3NhZ2Uub3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAob2JqLm9wdGlvbnMgPSBtZXNzYWdlLm9wdGlvbnMgPyBNZXRob2RPcHRpb25zLnRvSlNPTihtZXNzYWdlLm9wdGlvbnMpIDogdW5kZWZpbmVkKTtcbiAgICBtZXNzYWdlLmNsaWVudFN0cmVhbWluZyAhPT0gdW5kZWZpbmVkICYmIChvYmouY2xpZW50U3RyZWFtaW5nID0gbWVzc2FnZS5jbGllbnRTdHJlYW1pbmcpO1xuICAgIG1lc3NhZ2Uuc2VydmVyU3RyZWFtaW5nICE9PSB1bmRlZmluZWQgJiYgKG9iai5zZXJ2ZXJTdHJlYW1pbmcgPSBtZXNzYWdlLnNlcnZlclN0cmVhbWluZyk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPE1ldGhvZERlc2NyaXB0b3JQcm90bz4pOiBNZXRob2REZXNjcmlwdG9yUHJvdG8ge1xuICAgIHJldHVybiBNZXRob2REZXNjcmlwdG9yUHJvdG8uZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG5cbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxNZXRob2REZXNjcmlwdG9yUHJvdG8+KTogTWV0aG9kRGVzY3JpcHRvclByb3RvIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZU1ldGhvZERlc2NyaXB0b3JQcm90bygpO1xuICAgIG1lc3NhZ2UubmFtZSA9IG9iamVjdC5uYW1lID8/IFwiXCI7XG4gICAgbWVzc2FnZS5pbnB1dFR5cGUgPSBvYmplY3QuaW5wdXRUeXBlID8/IFwiXCI7XG4gICAgbWVzc2FnZS5vdXRwdXRUeXBlID0gb2JqZWN0Lm91dHB1dFR5cGUgPz8gXCJcIjtcbiAgICBtZXNzYWdlLm9wdGlvbnMgPSAob2JqZWN0Lm9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBvYmplY3Qub3B0aW9ucyAhPT0gbnVsbClcbiAgICAgID8gTWV0aG9kT3B0aW9ucy5mcm9tUGFydGlhbChvYmplY3Qub3B0aW9ucylcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIG1lc3NhZ2UuY2xpZW50U3RyZWFtaW5nID0gb2JqZWN0LmNsaWVudFN0cmVhbWluZyA/PyBmYWxzZTtcbiAgICBtZXNzYWdlLnNlcnZlclN0cmVhbWluZyA9IG9iamVjdC5zZXJ2ZXJTdHJlYW1pbmcgPz8gZmFsc2U7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlRmlsZU9wdGlvbnMoKTogRmlsZU9wdGlvbnMge1xuICByZXR1cm4ge1xuICAgIGphdmFQYWNrYWdlOiBcIlwiLFxuICAgIGphdmFPdXRlckNsYXNzbmFtZTogXCJcIixcbiAgICBqYXZhTXVsdGlwbGVGaWxlczogZmFsc2UsXG4gICAgamF2YUdlbmVyYXRlRXF1YWxzQW5kSGFzaDogZmFsc2UsXG4gICAgamF2YVN0cmluZ0NoZWNrVXRmODogZmFsc2UsXG4gICAgb3B0aW1pemVGb3I6IDEsXG4gICAgZ29QYWNrYWdlOiBcIlwiLFxuICAgIGNjR2VuZXJpY1NlcnZpY2VzOiBmYWxzZSxcbiAgICBqYXZhR2VuZXJpY1NlcnZpY2VzOiBmYWxzZSxcbiAgICBweUdlbmVyaWNTZXJ2aWNlczogZmFsc2UsXG4gICAgcGhwR2VuZXJpY1NlcnZpY2VzOiBmYWxzZSxcbiAgICBkZXByZWNhdGVkOiBmYWxzZSxcbiAgICBjY0VuYWJsZUFyZW5hczogZmFsc2UsXG4gICAgb2JqY0NsYXNzUHJlZml4OiBcIlwiLFxuICAgIGNzaGFycE5hbWVzcGFjZTogXCJcIixcbiAgICBzd2lmdFByZWZpeDogXCJcIixcbiAgICBwaHBDbGFzc1ByZWZpeDogXCJcIixcbiAgICBwaHBOYW1lc3BhY2U6IFwiXCIsXG4gICAgcGhwTWV0YWRhdGFOYW1lc3BhY2U6IFwiXCIsXG4gICAgcnVieVBhY2thZ2U6IFwiXCIsXG4gICAgdW5pbnRlcnByZXRlZE9wdGlvbjogW10sXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBGaWxlT3B0aW9ucyA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IEZpbGVPcHRpb25zLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuamF2YVBhY2thZ2UgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLmphdmFQYWNrYWdlKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuamF2YU91dGVyQ2xhc3NuYW1lICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDY2KS5zdHJpbmcobWVzc2FnZS5qYXZhT3V0ZXJDbGFzc25hbWUpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5qYXZhTXVsdGlwbGVGaWxlcyA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4MCkuYm9vbChtZXNzYWdlLmphdmFNdWx0aXBsZUZpbGVzKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuamF2YUdlbmVyYXRlRXF1YWxzQW5kSGFzaCA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNjApLmJvb2wobWVzc2FnZS5qYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuamF2YVN0cmluZ0NoZWNrVXRmOCA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyMTYpLmJvb2wobWVzc2FnZS5qYXZhU3RyaW5nQ2hlY2tVdGY4KTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3B0aW1pemVGb3IgIT09IDEpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNzIpLmludDMyKG1lc3NhZ2Uub3B0aW1pemVGb3IpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5nb1BhY2thZ2UgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOTApLnN0cmluZyhtZXNzYWdlLmdvUGFja2FnZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmNjR2VuZXJpY1NlcnZpY2VzID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEyOCkuYm9vbChtZXNzYWdlLmNjR2VuZXJpY1NlcnZpY2VzKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuamF2YUdlbmVyaWNTZXJ2aWNlcyA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMzYpLmJvb2wobWVzc2FnZS5qYXZhR2VuZXJpY1NlcnZpY2VzKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucHlHZW5lcmljU2VydmljZXMgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTQ0KS5ib29sKG1lc3NhZ2UucHlHZW5lcmljU2VydmljZXMpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5waHBHZW5lcmljU2VydmljZXMgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzM2KS5ib29sKG1lc3NhZ2UucGhwR2VuZXJpY1NlcnZpY2VzKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZGVwcmVjYXRlZCA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxODQpLmJvb2wobWVzc2FnZS5kZXByZWNhdGVkKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuY2NFbmFibGVBcmVuYXMgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQ4KS5ib29sKG1lc3NhZ2UuY2NFbmFibGVBcmVuYXMpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vYmpjQ2xhc3NQcmVmaXggIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjkwKS5zdHJpbmcobWVzc2FnZS5vYmpjQ2xhc3NQcmVmaXgpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5jc2hhcnBOYW1lc3BhY2UgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjk4KS5zdHJpbmcobWVzc2FnZS5jc2hhcnBOYW1lc3BhY2UpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zd2lmdFByZWZpeCAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigzMTQpLnN0cmluZyhtZXNzYWdlLnN3aWZ0UHJlZml4KTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGhwQ2xhc3NQcmVmaXggIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzIyKS5zdHJpbmcobWVzc2FnZS5waHBDbGFzc1ByZWZpeCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBocE5hbWVzcGFjZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigzMzApLnN0cmluZyhtZXNzYWdlLnBocE5hbWVzcGFjZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBocE1ldGFkYXRhTmFtZXNwYWNlICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDM1NCkuc3RyaW5nKG1lc3NhZ2UucGhwTWV0YWRhdGFOYW1lc3BhY2UpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5ydWJ5UGFja2FnZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigzNjIpLnN0cmluZyhtZXNzYWdlLnJ1YnlQYWNrYWdlKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbikge1xuICAgICAgVW5pbnRlcnByZXRlZE9wdGlvbi5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoNzk5NCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBGaWxlT3B0aW9ucyB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VGaWxlT3B0aW9ucygpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuamF2YVBhY2thZ2UgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICBpZiAodGFnICE9PSA2Nikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5qYXZhT3V0ZXJDbGFzc25hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gODApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuamF2YU11bHRpcGxlRmlsZXMgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgIGlmICh0YWcgIT09IDE2MCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5qYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICBpZiAodGFnICE9PSAyMTYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuamF2YVN0cmluZ0NoZWNrVXRmOCA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICBpZiAodGFnICE9PSA3Mikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5vcHRpbWl6ZUZvciA9IHJlYWRlci5pbnQzMigpIGFzIGFueTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICBpZiAodGFnICE9PSA5MCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5nb1BhY2thZ2UgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTI4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmNjR2VuZXJpY1NlcnZpY2VzID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMzYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuamF2YUdlbmVyaWNTZXJ2aWNlcyA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTQ0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnB5R2VuZXJpY1NlcnZpY2VzID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA0MjpcbiAgICAgICAgICBpZiAodGFnICE9PSAzMzYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UucGhwR2VuZXJpY1NlcnZpY2VzID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICBpZiAodGFnICE9PSAxODQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZGVwcmVjYXRlZCA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMjQ4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmNjRW5hYmxlQXJlbmFzID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAzNjpcbiAgICAgICAgICBpZiAodGFnICE9PSAyOTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uub2JqY0NsYXNzUHJlZml4ID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgIGlmICh0YWcgIT09IDI5OCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5jc2hhcnBOYW1lc3BhY2UgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMzE0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnN3aWZ0UHJlZml4ID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgIGlmICh0YWcgIT09IDMyMikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5waHBDbGFzc1ByZWZpeCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICBpZiAodGFnICE9PSAzMzApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UucGhwTmFtZXNwYWNlID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgIGlmICh0YWcgIT09IDM1NCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5waHBNZXRhZGF0YU5hbWVzcGFjZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICBpZiAodGFnICE9PSAzNjIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UucnVieVBhY2thZ2UgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgOTk5OlxuICAgICAgICAgIGlmICh0YWcgIT09IDc5OTQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbi5wdXNoKFVuaW50ZXJwcmV0ZWRPcHRpb24uZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBGaWxlT3B0aW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGphdmFQYWNrYWdlOiBpc1NldChvYmplY3QuamF2YVBhY2thZ2UpID8gU3RyaW5nKG9iamVjdC5qYXZhUGFja2FnZSkgOiBcIlwiLFxuICAgICAgamF2YU91dGVyQ2xhc3NuYW1lOiBpc1NldChvYmplY3QuamF2YU91dGVyQ2xhc3NuYW1lKSA/IFN0cmluZyhvYmplY3QuamF2YU91dGVyQ2xhc3NuYW1lKSA6IFwiXCIsXG4gICAgICBqYXZhTXVsdGlwbGVGaWxlczogaXNTZXQob2JqZWN0LmphdmFNdWx0aXBsZUZpbGVzKSA/IEJvb2xlYW4ob2JqZWN0LmphdmFNdWx0aXBsZUZpbGVzKSA6IGZhbHNlLFxuICAgICAgamF2YUdlbmVyYXRlRXF1YWxzQW5kSGFzaDogaXNTZXQob2JqZWN0LmphdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2gpXG4gICAgICAgID8gQm9vbGVhbihvYmplY3QuamF2YUdlbmVyYXRlRXF1YWxzQW5kSGFzaClcbiAgICAgICAgOiBmYWxzZSxcbiAgICAgIGphdmFTdHJpbmdDaGVja1V0Zjg6IGlzU2V0KG9iamVjdC5qYXZhU3RyaW5nQ2hlY2tVdGY4KSA/IEJvb2xlYW4ob2JqZWN0LmphdmFTdHJpbmdDaGVja1V0ZjgpIDogZmFsc2UsXG4gICAgICBvcHRpbWl6ZUZvcjogaXNTZXQob2JqZWN0Lm9wdGltaXplRm9yKSA/IGZpbGVPcHRpb25zX09wdGltaXplTW9kZUZyb21KU09OKG9iamVjdC5vcHRpbWl6ZUZvcikgOiAxLFxuICAgICAgZ29QYWNrYWdlOiBpc1NldChvYmplY3QuZ29QYWNrYWdlKSA/IFN0cmluZyhvYmplY3QuZ29QYWNrYWdlKSA6IFwiXCIsXG4gICAgICBjY0dlbmVyaWNTZXJ2aWNlczogaXNTZXQob2JqZWN0LmNjR2VuZXJpY1NlcnZpY2VzKSA/IEJvb2xlYW4ob2JqZWN0LmNjR2VuZXJpY1NlcnZpY2VzKSA6IGZhbHNlLFxuICAgICAgamF2YUdlbmVyaWNTZXJ2aWNlczogaXNTZXQob2JqZWN0LmphdmFHZW5lcmljU2VydmljZXMpID8gQm9vbGVhbihvYmplY3QuamF2YUdlbmVyaWNTZXJ2aWNlcykgOiBmYWxzZSxcbiAgICAgIHB5R2VuZXJpY1NlcnZpY2VzOiBpc1NldChvYmplY3QucHlHZW5lcmljU2VydmljZXMpID8gQm9vbGVhbihvYmplY3QucHlHZW5lcmljU2VydmljZXMpIDogZmFsc2UsXG4gICAgICBwaHBHZW5lcmljU2VydmljZXM6IGlzU2V0KG9iamVjdC5waHBHZW5lcmljU2VydmljZXMpID8gQm9vbGVhbihvYmplY3QucGhwR2VuZXJpY1NlcnZpY2VzKSA6IGZhbHNlLFxuICAgICAgZGVwcmVjYXRlZDogaXNTZXQob2JqZWN0LmRlcHJlY2F0ZWQpID8gQm9vbGVhbihvYmplY3QuZGVwcmVjYXRlZCkgOiBmYWxzZSxcbiAgICAgIGNjRW5hYmxlQXJlbmFzOiBpc1NldChvYmplY3QuY2NFbmFibGVBcmVuYXMpID8gQm9vbGVhbihvYmplY3QuY2NFbmFibGVBcmVuYXMpIDogZmFsc2UsXG4gICAgICBvYmpjQ2xhc3NQcmVmaXg6IGlzU2V0KG9iamVjdC5vYmpjQ2xhc3NQcmVmaXgpID8gU3RyaW5nKG9iamVjdC5vYmpjQ2xhc3NQcmVmaXgpIDogXCJcIixcbiAgICAgIGNzaGFycE5hbWVzcGFjZTogaXNTZXQob2JqZWN0LmNzaGFycE5hbWVzcGFjZSkgPyBTdHJpbmcob2JqZWN0LmNzaGFycE5hbWVzcGFjZSkgOiBcIlwiLFxuICAgICAgc3dpZnRQcmVmaXg6IGlzU2V0KG9iamVjdC5zd2lmdFByZWZpeCkgPyBTdHJpbmcob2JqZWN0LnN3aWZ0UHJlZml4KSA6IFwiXCIsXG4gICAgICBwaHBDbGFzc1ByZWZpeDogaXNTZXQob2JqZWN0LnBocENsYXNzUHJlZml4KSA/IFN0cmluZyhvYmplY3QucGhwQ2xhc3NQcmVmaXgpIDogXCJcIixcbiAgICAgIHBocE5hbWVzcGFjZTogaXNTZXQob2JqZWN0LnBocE5hbWVzcGFjZSkgPyBTdHJpbmcob2JqZWN0LnBocE5hbWVzcGFjZSkgOiBcIlwiLFxuICAgICAgcGhwTWV0YWRhdGFOYW1lc3BhY2U6IGlzU2V0KG9iamVjdC5waHBNZXRhZGF0YU5hbWVzcGFjZSkgPyBTdHJpbmcob2JqZWN0LnBocE1ldGFkYXRhTmFtZXNwYWNlKSA6IFwiXCIsXG4gICAgICBydWJ5UGFja2FnZTogaXNTZXQob2JqZWN0LnJ1YnlQYWNrYWdlKSA/IFN0cmluZyhvYmplY3QucnVieVBhY2thZ2UpIDogXCJcIixcbiAgICAgIHVuaW50ZXJwcmV0ZWRPcHRpb246IEFycmF5LmlzQXJyYXkob2JqZWN0Py51bmludGVycHJldGVkT3B0aW9uKVxuICAgICAgICA/IG9iamVjdC51bmludGVycHJldGVkT3B0aW9uLm1hcCgoZTogYW55KSA9PiBVbmludGVycHJldGVkT3B0aW9uLmZyb21KU09OKGUpKVxuICAgICAgICA6IFtdLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IEZpbGVPcHRpb25zKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBtZXNzYWdlLmphdmFQYWNrYWdlICE9PSB1bmRlZmluZWQgJiYgKG9iai5qYXZhUGFja2FnZSA9IG1lc3NhZ2UuamF2YVBhY2thZ2UpO1xuICAgIG1lc3NhZ2UuamF2YU91dGVyQ2xhc3NuYW1lICE9PSB1bmRlZmluZWQgJiYgKG9iai5qYXZhT3V0ZXJDbGFzc25hbWUgPSBtZXNzYWdlLmphdmFPdXRlckNsYXNzbmFtZSk7XG4gICAgbWVzc2FnZS5qYXZhTXVsdGlwbGVGaWxlcyAhPT0gdW5kZWZpbmVkICYmIChvYmouamF2YU11bHRpcGxlRmlsZXMgPSBtZXNzYWdlLmphdmFNdWx0aXBsZUZpbGVzKTtcbiAgICBtZXNzYWdlLmphdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2ggIT09IHVuZGVmaW5lZCAmJlxuICAgICAgKG9iai5qYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoID0gbWVzc2FnZS5qYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoKTtcbiAgICBtZXNzYWdlLmphdmFTdHJpbmdDaGVja1V0ZjggIT09IHVuZGVmaW5lZCAmJiAob2JqLmphdmFTdHJpbmdDaGVja1V0ZjggPSBtZXNzYWdlLmphdmFTdHJpbmdDaGVja1V0ZjgpO1xuICAgIG1lc3NhZ2Uub3B0aW1pemVGb3IgIT09IHVuZGVmaW5lZCAmJiAob2JqLm9wdGltaXplRm9yID0gZmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlVG9KU09OKG1lc3NhZ2Uub3B0aW1pemVGb3IpKTtcbiAgICBtZXNzYWdlLmdvUGFja2FnZSAhPT0gdW5kZWZpbmVkICYmIChvYmouZ29QYWNrYWdlID0gbWVzc2FnZS5nb1BhY2thZ2UpO1xuICAgIG1lc3NhZ2UuY2NHZW5lcmljU2VydmljZXMgIT09IHVuZGVmaW5lZCAmJiAob2JqLmNjR2VuZXJpY1NlcnZpY2VzID0gbWVzc2FnZS5jY0dlbmVyaWNTZXJ2aWNlcyk7XG4gICAgbWVzc2FnZS5qYXZhR2VuZXJpY1NlcnZpY2VzICE9PSB1bmRlZmluZWQgJiYgKG9iai5qYXZhR2VuZXJpY1NlcnZpY2VzID0gbWVzc2FnZS5qYXZhR2VuZXJpY1NlcnZpY2VzKTtcbiAgICBtZXNzYWdlLnB5R2VuZXJpY1NlcnZpY2VzICE9PSB1bmRlZmluZWQgJiYgKG9iai5weUdlbmVyaWNTZXJ2aWNlcyA9IG1lc3NhZ2UucHlHZW5lcmljU2VydmljZXMpO1xuICAgIG1lc3NhZ2UucGhwR2VuZXJpY1NlcnZpY2VzICE9PSB1bmRlZmluZWQgJiYgKG9iai5waHBHZW5lcmljU2VydmljZXMgPSBtZXNzYWdlLnBocEdlbmVyaWNTZXJ2aWNlcyk7XG4gICAgbWVzc2FnZS5kZXByZWNhdGVkICE9PSB1bmRlZmluZWQgJiYgKG9iai5kZXByZWNhdGVkID0gbWVzc2FnZS5kZXByZWNhdGVkKTtcbiAgICBtZXNzYWdlLmNjRW5hYmxlQXJlbmFzICE9PSB1bmRlZmluZWQgJiYgKG9iai5jY0VuYWJsZUFyZW5hcyA9IG1lc3NhZ2UuY2NFbmFibGVBcmVuYXMpO1xuICAgIG1lc3NhZ2Uub2JqY0NsYXNzUHJlZml4ICE9PSB1bmRlZmluZWQgJiYgKG9iai5vYmpjQ2xhc3NQcmVmaXggPSBtZXNzYWdlLm9iamNDbGFzc1ByZWZpeCk7XG4gICAgbWVzc2FnZS5jc2hhcnBOYW1lc3BhY2UgIT09IHVuZGVmaW5lZCAmJiAob2JqLmNzaGFycE5hbWVzcGFjZSA9IG1lc3NhZ2UuY3NoYXJwTmFtZXNwYWNlKTtcbiAgICBtZXNzYWdlLnN3aWZ0UHJlZml4ICE9PSB1bmRlZmluZWQgJiYgKG9iai5zd2lmdFByZWZpeCA9IG1lc3NhZ2Uuc3dpZnRQcmVmaXgpO1xuICAgIG1lc3NhZ2UucGhwQ2xhc3NQcmVmaXggIT09IHVuZGVmaW5lZCAmJiAob2JqLnBocENsYXNzUHJlZml4ID0gbWVzc2FnZS5waHBDbGFzc1ByZWZpeCk7XG4gICAgbWVzc2FnZS5waHBOYW1lc3BhY2UgIT09IHVuZGVmaW5lZCAmJiAob2JqLnBocE5hbWVzcGFjZSA9IG1lc3NhZ2UucGhwTmFtZXNwYWNlKTtcbiAgICBtZXNzYWdlLnBocE1ldGFkYXRhTmFtZXNwYWNlICE9PSB1bmRlZmluZWQgJiYgKG9iai5waHBNZXRhZGF0YU5hbWVzcGFjZSA9IG1lc3NhZ2UucGhwTWV0YWRhdGFOYW1lc3BhY2UpO1xuICAgIG1lc3NhZ2UucnVieVBhY2thZ2UgIT09IHVuZGVmaW5lZCAmJiAob2JqLnJ1YnlQYWNrYWdlID0gbWVzc2FnZS5ydWJ5UGFja2FnZSk7XG4gICAgaWYgKG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbikge1xuICAgICAgb2JqLnVuaW50ZXJwcmV0ZWRPcHRpb24gPSBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24ubWFwKChlKSA9PiBlID8gVW5pbnRlcnByZXRlZE9wdGlvbi50b0pTT04oZSkgOiB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmoudW5pbnRlcnByZXRlZE9wdGlvbiA9IFtdO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8RmlsZU9wdGlvbnM+KTogRmlsZU9wdGlvbnMge1xuICAgIHJldHVybiBGaWxlT3B0aW9ucy5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcblxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPEZpbGVPcHRpb25zPik6IEZpbGVPcHRpb25zIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUZpbGVPcHRpb25zKCk7XG4gICAgbWVzc2FnZS5qYXZhUGFja2FnZSA9IG9iamVjdC5qYXZhUGFja2FnZSA/PyBcIlwiO1xuICAgIG1lc3NhZ2UuamF2YU91dGVyQ2xhc3NuYW1lID0gb2JqZWN0LmphdmFPdXRlckNsYXNzbmFtZSA/PyBcIlwiO1xuICAgIG1lc3NhZ2UuamF2YU11bHRpcGxlRmlsZXMgPSBvYmplY3QuamF2YU11bHRpcGxlRmlsZXMgPz8gZmFsc2U7XG4gICAgbWVzc2FnZS5qYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoID0gb2JqZWN0LmphdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2ggPz8gZmFsc2U7XG4gICAgbWVzc2FnZS5qYXZhU3RyaW5nQ2hlY2tVdGY4ID0gb2JqZWN0LmphdmFTdHJpbmdDaGVja1V0ZjggPz8gZmFsc2U7XG4gICAgbWVzc2FnZS5vcHRpbWl6ZUZvciA9IG9iamVjdC5vcHRpbWl6ZUZvciA/PyAxO1xuICAgIG1lc3NhZ2UuZ29QYWNrYWdlID0gb2JqZWN0LmdvUGFja2FnZSA/PyBcIlwiO1xuICAgIG1lc3NhZ2UuY2NHZW5lcmljU2VydmljZXMgPSBvYmplY3QuY2NHZW5lcmljU2VydmljZXMgPz8gZmFsc2U7XG4gICAgbWVzc2FnZS5qYXZhR2VuZXJpY1NlcnZpY2VzID0gb2JqZWN0LmphdmFHZW5lcmljU2VydmljZXMgPz8gZmFsc2U7XG4gICAgbWVzc2FnZS5weUdlbmVyaWNTZXJ2aWNlcyA9IG9iamVjdC5weUdlbmVyaWNTZXJ2aWNlcyA/PyBmYWxzZTtcbiAgICBtZXNzYWdlLnBocEdlbmVyaWNTZXJ2aWNlcyA9IG9iamVjdC5waHBHZW5lcmljU2VydmljZXMgPz8gZmFsc2U7XG4gICAgbWVzc2FnZS5kZXByZWNhdGVkID0gb2JqZWN0LmRlcHJlY2F0ZWQgPz8gZmFsc2U7XG4gICAgbWVzc2FnZS5jY0VuYWJsZUFyZW5hcyA9IG9iamVjdC5jY0VuYWJsZUFyZW5hcyA/PyBmYWxzZTtcbiAgICBtZXNzYWdlLm9iamNDbGFzc1ByZWZpeCA9IG9iamVjdC5vYmpjQ2xhc3NQcmVmaXggPz8gXCJcIjtcbiAgICBtZXNzYWdlLmNzaGFycE5hbWVzcGFjZSA9IG9iamVjdC5jc2hhcnBOYW1lc3BhY2UgPz8gXCJcIjtcbiAgICBtZXNzYWdlLnN3aWZ0UHJlZml4ID0gb2JqZWN0LnN3aWZ0UHJlZml4ID8/IFwiXCI7XG4gICAgbWVzc2FnZS5waHBDbGFzc1ByZWZpeCA9IG9iamVjdC5waHBDbGFzc1ByZWZpeCA/PyBcIlwiO1xuICAgIG1lc3NhZ2UucGhwTmFtZXNwYWNlID0gb2JqZWN0LnBocE5hbWVzcGFjZSA/PyBcIlwiO1xuICAgIG1lc3NhZ2UucGhwTWV0YWRhdGFOYW1lc3BhY2UgPSBvYmplY3QucGhwTWV0YWRhdGFOYW1lc3BhY2UgPz8gXCJcIjtcbiAgICBtZXNzYWdlLnJ1YnlQYWNrYWdlID0gb2JqZWN0LnJ1YnlQYWNrYWdlID8/IFwiXCI7XG4gICAgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uID0gb2JqZWN0LnVuaW50ZXJwcmV0ZWRPcHRpb24/Lm1hcCgoZSkgPT4gVW5pbnRlcnByZXRlZE9wdGlvbi5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlTWVzc2FnZU9wdGlvbnMoKTogTWVzc2FnZU9wdGlvbnMge1xuICByZXR1cm4ge1xuICAgIG1lc3NhZ2VTZXRXaXJlRm9ybWF0OiBmYWxzZSxcbiAgICBub1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29yOiBmYWxzZSxcbiAgICBkZXByZWNhdGVkOiBmYWxzZSxcbiAgICBtYXBFbnRyeTogZmFsc2UsXG4gICAgZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0czogZmFsc2UsXG4gICAgdW5pbnRlcnByZXRlZE9wdGlvbjogW10sXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBNZXNzYWdlT3B0aW9ucyA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IE1lc3NhZ2VPcHRpb25zLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UubWVzc2FnZVNldFdpcmVGb3JtYXQgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLm1lc3NhZ2VTZXRXaXJlRm9ybWF0KTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uubm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3NvciA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuYm9vbChtZXNzYWdlLm5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3IpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kZXByZWNhdGVkID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UuZGVwcmVjYXRlZCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1hcEVudHJ5ID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDU2KS5ib29sKG1lc3NhZ2UubWFwRW50cnkpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDg4KS5ib29sKG1lc3NhZ2UuZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cyk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24pIHtcbiAgICAgIFVuaW50ZXJwcmV0ZWRPcHRpb24uZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDc5OTQpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogTWVzc2FnZU9wdGlvbnMge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlTWVzc2FnZU9wdGlvbnMoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubWVzc2FnZVNldFdpcmVGb3JtYXQgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uubm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3NvciA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBpZiAodGFnICE9PSAyNCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5kZXByZWNhdGVkID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIGlmICh0YWcgIT09IDU2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm1hcEVudHJ5ID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICBpZiAodGFnICE9PSA4OCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5kZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA5OTk6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNzk5NCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uLnB1c2goVW5pbnRlcnByZXRlZE9wdGlvbi5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IE1lc3NhZ2VPcHRpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZVNldFdpcmVGb3JtYXQ6IGlzU2V0KG9iamVjdC5tZXNzYWdlU2V0V2lyZUZvcm1hdCkgPyBCb29sZWFuKG9iamVjdC5tZXNzYWdlU2V0V2lyZUZvcm1hdCkgOiBmYWxzZSxcbiAgICAgIG5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3I6IGlzU2V0KG9iamVjdC5ub1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29yKVxuICAgICAgICA/IEJvb2xlYW4ob2JqZWN0Lm5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3IpXG4gICAgICAgIDogZmFsc2UsXG4gICAgICBkZXByZWNhdGVkOiBpc1NldChvYmplY3QuZGVwcmVjYXRlZCkgPyBCb29sZWFuKG9iamVjdC5kZXByZWNhdGVkKSA6IGZhbHNlLFxuICAgICAgbWFwRW50cnk6IGlzU2V0KG9iamVjdC5tYXBFbnRyeSkgPyBCb29sZWFuKG9iamVjdC5tYXBFbnRyeSkgOiBmYWxzZSxcbiAgICAgIGRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHM6IGlzU2V0KG9iamVjdC5kZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzKVxuICAgICAgICA/IEJvb2xlYW4ob2JqZWN0LmRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHMpXG4gICAgICAgIDogZmFsc2UsXG4gICAgICB1bmludGVycHJldGVkT3B0aW9uOiBBcnJheS5pc0FycmF5KG9iamVjdD8udW5pbnRlcnByZXRlZE9wdGlvbilcbiAgICAgICAgPyBvYmplY3QudW5pbnRlcnByZXRlZE9wdGlvbi5tYXAoKGU6IGFueSkgPT4gVW5pbnRlcnByZXRlZE9wdGlvbi5mcm9tSlNPTihlKSlcbiAgICAgICAgOiBbXSxcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBNZXNzYWdlT3B0aW9ucyk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgbWVzc2FnZS5tZXNzYWdlU2V0V2lyZUZvcm1hdCAhPT0gdW5kZWZpbmVkICYmIChvYmoubWVzc2FnZVNldFdpcmVGb3JtYXQgPSBtZXNzYWdlLm1lc3NhZ2VTZXRXaXJlRm9ybWF0KTtcbiAgICBtZXNzYWdlLm5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3IgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgKG9iai5ub1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29yID0gbWVzc2FnZS5ub1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29yKTtcbiAgICBtZXNzYWdlLmRlcHJlY2F0ZWQgIT09IHVuZGVmaW5lZCAmJiAob2JqLmRlcHJlY2F0ZWQgPSBtZXNzYWdlLmRlcHJlY2F0ZWQpO1xuICAgIG1lc3NhZ2UubWFwRW50cnkgIT09IHVuZGVmaW5lZCAmJiAob2JqLm1hcEVudHJ5ID0gbWVzc2FnZS5tYXBFbnRyeSk7XG4gICAgbWVzc2FnZS5kZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIChvYmouZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cyA9IG1lc3NhZ2UuZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cyk7XG4gICAgaWYgKG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbikge1xuICAgICAgb2JqLnVuaW50ZXJwcmV0ZWRPcHRpb24gPSBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24ubWFwKChlKSA9PiBlID8gVW5pbnRlcnByZXRlZE9wdGlvbi50b0pTT04oZSkgOiB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmoudW5pbnRlcnByZXRlZE9wdGlvbiA9IFtdO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8TWVzc2FnZU9wdGlvbnM+KTogTWVzc2FnZU9wdGlvbnMge1xuICAgIHJldHVybiBNZXNzYWdlT3B0aW9ucy5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcblxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPE1lc3NhZ2VPcHRpb25zPik6IE1lc3NhZ2VPcHRpb25zIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZU1lc3NhZ2VPcHRpb25zKCk7XG4gICAgbWVzc2FnZS5tZXNzYWdlU2V0V2lyZUZvcm1hdCA9IG9iamVjdC5tZXNzYWdlU2V0V2lyZUZvcm1hdCA/PyBmYWxzZTtcbiAgICBtZXNzYWdlLm5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3IgPSBvYmplY3Qubm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3NvciA/PyBmYWxzZTtcbiAgICBtZXNzYWdlLmRlcHJlY2F0ZWQgPSBvYmplY3QuZGVwcmVjYXRlZCA/PyBmYWxzZTtcbiAgICBtZXNzYWdlLm1hcEVudHJ5ID0gb2JqZWN0Lm1hcEVudHJ5ID8/IGZhbHNlO1xuICAgIG1lc3NhZ2UuZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cyA9IG9iamVjdC5kZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzID8/IGZhbHNlO1xuICAgIG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbiA9IG9iamVjdC51bmludGVycHJldGVkT3B0aW9uPy5tYXAoKGUpID0+IFVuaW50ZXJwcmV0ZWRPcHRpb24uZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZUZpZWxkT3B0aW9ucygpOiBGaWVsZE9wdGlvbnMge1xuICByZXR1cm4ge1xuICAgIGN0eXBlOiAwLFxuICAgIHBhY2tlZDogZmFsc2UsXG4gICAganN0eXBlOiAwLFxuICAgIGxhenk6IGZhbHNlLFxuICAgIHVudmVyaWZpZWRMYXp5OiBmYWxzZSxcbiAgICBkZXByZWNhdGVkOiBmYWxzZSxcbiAgICB3ZWFrOiBmYWxzZSxcbiAgICBkZWJ1Z1JlZGFjdDogZmFsc2UsXG4gICAgcmV0ZW50aW9uOiAwLFxuICAgIHRhcmdldDogMCxcbiAgICB1bmludGVycHJldGVkT3B0aW9uOiBbXSxcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IEZpZWxkT3B0aW9ucyA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IEZpZWxkT3B0aW9ucywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmN0eXBlICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmludDMyKG1lc3NhZ2UuY3R5cGUpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWNrZWQgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmJvb2wobWVzc2FnZS5wYWNrZWQpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5qc3R5cGUgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDgpLmludDMyKG1lc3NhZ2UuanN0eXBlKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubGF6eSA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0MCkuYm9vbChtZXNzYWdlLmxhenkpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS51bnZlcmlmaWVkTGF6eSA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMjApLmJvb2wobWVzc2FnZS51bnZlcmlmaWVkTGF6eSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRlcHJlY2F0ZWQgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmJvb2wobWVzc2FnZS5kZXByZWNhdGVkKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uud2VhayA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4MCkuYm9vbChtZXNzYWdlLndlYWspO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kZWJ1Z1JlZGFjdCA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMjgpLmJvb2wobWVzc2FnZS5kZWJ1Z1JlZGFjdCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnJldGVudGlvbiAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMzYpLmludDMyKG1lc3NhZ2UucmV0ZW50aW9uKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudGFyZ2V0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE0NCkuaW50MzIobWVzc2FnZS50YXJnZXQpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uKSB7XG4gICAgICBVbmludGVycHJldGVkT3B0aW9uLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMig3OTk0KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IEZpZWxkT3B0aW9ucyB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VGaWVsZE9wdGlvbnMoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuY3R5cGUgPSByZWFkZXIuaW50MzIoKSBhcyBhbnk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5wYWNrZWQgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNDgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuanN0eXBlID0gcmVhZGVyLmludDMyKCkgYXMgYW55O1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNDApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubGF6eSA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTIwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnVudmVyaWZpZWRMYXp5ID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGlmICh0YWcgIT09IDI0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmRlcHJlY2F0ZWQgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIGlmICh0YWcgIT09IDgwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLndlYWsgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgIGlmICh0YWcgIT09IDEyOCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5kZWJ1Z1JlZGFjdCA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTM2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnJldGVudGlvbiA9IHJlYWRlci5pbnQzMigpIGFzIGFueTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICBpZiAodGFnICE9PSAxNDQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UudGFyZ2V0ID0gcmVhZGVyLmludDMyKCkgYXMgYW55O1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDk5OTpcbiAgICAgICAgICBpZiAodGFnICE9PSA3OTk0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24ucHVzaChVbmludGVycHJldGVkT3B0aW9uLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogRmllbGRPcHRpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3R5cGU6IGlzU2V0KG9iamVjdC5jdHlwZSkgPyBmaWVsZE9wdGlvbnNfQ1R5cGVGcm9tSlNPTihvYmplY3QuY3R5cGUpIDogMCxcbiAgICAgIHBhY2tlZDogaXNTZXQob2JqZWN0LnBhY2tlZCkgPyBCb29sZWFuKG9iamVjdC5wYWNrZWQpIDogZmFsc2UsXG4gICAgICBqc3R5cGU6IGlzU2V0KG9iamVjdC5qc3R5cGUpID8gZmllbGRPcHRpb25zX0pTVHlwZUZyb21KU09OKG9iamVjdC5qc3R5cGUpIDogMCxcbiAgICAgIGxhenk6IGlzU2V0KG9iamVjdC5sYXp5KSA/IEJvb2xlYW4ob2JqZWN0LmxhenkpIDogZmFsc2UsXG4gICAgICB1bnZlcmlmaWVkTGF6eTogaXNTZXQob2JqZWN0LnVudmVyaWZpZWRMYXp5KSA/IEJvb2xlYW4ob2JqZWN0LnVudmVyaWZpZWRMYXp5KSA6IGZhbHNlLFxuICAgICAgZGVwcmVjYXRlZDogaXNTZXQob2JqZWN0LmRlcHJlY2F0ZWQpID8gQm9vbGVhbihvYmplY3QuZGVwcmVjYXRlZCkgOiBmYWxzZSxcbiAgICAgIHdlYWs6IGlzU2V0KG9iamVjdC53ZWFrKSA/IEJvb2xlYW4ob2JqZWN0LndlYWspIDogZmFsc2UsXG4gICAgICBkZWJ1Z1JlZGFjdDogaXNTZXQob2JqZWN0LmRlYnVnUmVkYWN0KSA/IEJvb2xlYW4ob2JqZWN0LmRlYnVnUmVkYWN0KSA6IGZhbHNlLFxuICAgICAgcmV0ZW50aW9uOiBpc1NldChvYmplY3QucmV0ZW50aW9uKSA/IGZpZWxkT3B0aW9uc19PcHRpb25SZXRlbnRpb25Gcm9tSlNPTihvYmplY3QucmV0ZW50aW9uKSA6IDAsXG4gICAgICB0YXJnZXQ6IGlzU2V0KG9iamVjdC50YXJnZXQpID8gZmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGVGcm9tSlNPTihvYmplY3QudGFyZ2V0KSA6IDAsXG4gICAgICB1bmludGVycHJldGVkT3B0aW9uOiBBcnJheS5pc0FycmF5KG9iamVjdD8udW5pbnRlcnByZXRlZE9wdGlvbilcbiAgICAgICAgPyBvYmplY3QudW5pbnRlcnByZXRlZE9wdGlvbi5tYXAoKGU6IGFueSkgPT4gVW5pbnRlcnByZXRlZE9wdGlvbi5mcm9tSlNPTihlKSlcbiAgICAgICAgOiBbXSxcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBGaWVsZE9wdGlvbnMpOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIG1lc3NhZ2UuY3R5cGUgIT09IHVuZGVmaW5lZCAmJiAob2JqLmN0eXBlID0gZmllbGRPcHRpb25zX0NUeXBlVG9KU09OKG1lc3NhZ2UuY3R5cGUpKTtcbiAgICBtZXNzYWdlLnBhY2tlZCAhPT0gdW5kZWZpbmVkICYmIChvYmoucGFja2VkID0gbWVzc2FnZS5wYWNrZWQpO1xuICAgIG1lc3NhZ2UuanN0eXBlICE9PSB1bmRlZmluZWQgJiYgKG9iai5qc3R5cGUgPSBmaWVsZE9wdGlvbnNfSlNUeXBlVG9KU09OKG1lc3NhZ2UuanN0eXBlKSk7XG4gICAgbWVzc2FnZS5sYXp5ICE9PSB1bmRlZmluZWQgJiYgKG9iai5sYXp5ID0gbWVzc2FnZS5sYXp5KTtcbiAgICBtZXNzYWdlLnVudmVyaWZpZWRMYXp5ICE9PSB1bmRlZmluZWQgJiYgKG9iai51bnZlcmlmaWVkTGF6eSA9IG1lc3NhZ2UudW52ZXJpZmllZExhenkpO1xuICAgIG1lc3NhZ2UuZGVwcmVjYXRlZCAhPT0gdW5kZWZpbmVkICYmIChvYmouZGVwcmVjYXRlZCA9IG1lc3NhZ2UuZGVwcmVjYXRlZCk7XG4gICAgbWVzc2FnZS53ZWFrICE9PSB1bmRlZmluZWQgJiYgKG9iai53ZWFrID0gbWVzc2FnZS53ZWFrKTtcbiAgICBtZXNzYWdlLmRlYnVnUmVkYWN0ICE9PSB1bmRlZmluZWQgJiYgKG9iai5kZWJ1Z1JlZGFjdCA9IG1lc3NhZ2UuZGVidWdSZWRhY3QpO1xuICAgIG1lc3NhZ2UucmV0ZW50aW9uICE9PSB1bmRlZmluZWQgJiYgKG9iai5yZXRlbnRpb24gPSBmaWVsZE9wdGlvbnNfT3B0aW9uUmV0ZW50aW9uVG9KU09OKG1lc3NhZ2UucmV0ZW50aW9uKSk7XG4gICAgbWVzc2FnZS50YXJnZXQgIT09IHVuZGVmaW5lZCAmJiAob2JqLnRhcmdldCA9IGZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlVG9KU09OKG1lc3NhZ2UudGFyZ2V0KSk7XG4gICAgaWYgKG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbikge1xuICAgICAgb2JqLnVuaW50ZXJwcmV0ZWRPcHRpb24gPSBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24ubWFwKChlKSA9PiBlID8gVW5pbnRlcnByZXRlZE9wdGlvbi50b0pTT04oZSkgOiB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmoudW5pbnRlcnByZXRlZE9wdGlvbiA9IFtdO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8RmllbGRPcHRpb25zPik6IEZpZWxkT3B0aW9ucyB7XG4gICAgcmV0dXJuIEZpZWxkT3B0aW9ucy5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcblxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPEZpZWxkT3B0aW9ucz4pOiBGaWVsZE9wdGlvbnMge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRmllbGRPcHRpb25zKCk7XG4gICAgbWVzc2FnZS5jdHlwZSA9IG9iamVjdC5jdHlwZSA/PyAwO1xuICAgIG1lc3NhZ2UucGFja2VkID0gb2JqZWN0LnBhY2tlZCA/PyBmYWxzZTtcbiAgICBtZXNzYWdlLmpzdHlwZSA9IG9iamVjdC5qc3R5cGUgPz8gMDtcbiAgICBtZXNzYWdlLmxhenkgPSBvYmplY3QubGF6eSA/PyBmYWxzZTtcbiAgICBtZXNzYWdlLnVudmVyaWZpZWRMYXp5ID0gb2JqZWN0LnVudmVyaWZpZWRMYXp5ID8/IGZhbHNlO1xuICAgIG1lc3NhZ2UuZGVwcmVjYXRlZCA9IG9iamVjdC5kZXByZWNhdGVkID8/IGZhbHNlO1xuICAgIG1lc3NhZ2Uud2VhayA9IG9iamVjdC53ZWFrID8/IGZhbHNlO1xuICAgIG1lc3NhZ2UuZGVidWdSZWRhY3QgPSBvYmplY3QuZGVidWdSZWRhY3QgPz8gZmFsc2U7XG4gICAgbWVzc2FnZS5yZXRlbnRpb24gPSBvYmplY3QucmV0ZW50aW9uID8/IDA7XG4gICAgbWVzc2FnZS50YXJnZXQgPSBvYmplY3QudGFyZ2V0ID8/IDA7XG4gICAgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uID0gb2JqZWN0LnVuaW50ZXJwcmV0ZWRPcHRpb24/Lm1hcCgoZSkgPT4gVW5pbnRlcnByZXRlZE9wdGlvbi5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlT25lb2ZPcHRpb25zKCk6IE9uZW9mT3B0aW9ucyB7XG4gIHJldHVybiB7IHVuaW50ZXJwcmV0ZWRPcHRpb246IFtdIH07XG59XG5cbmV4cG9ydCBjb25zdCBPbmVvZk9wdGlvbnMgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBPbmVvZk9wdGlvbnMsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uKSB7XG4gICAgICBVbmludGVycHJldGVkT3B0aW9uLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMig3OTk0KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IE9uZW9mT3B0aW9ucyB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VPbmVvZk9wdGlvbnMoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSA5OTk6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNzk5NCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uLnB1c2goVW5pbnRlcnByZXRlZE9wdGlvbi5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IE9uZW9mT3B0aW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVuaW50ZXJwcmV0ZWRPcHRpb246IEFycmF5LmlzQXJyYXkob2JqZWN0Py51bmludGVycHJldGVkT3B0aW9uKVxuICAgICAgICA/IG9iamVjdC51bmludGVycHJldGVkT3B0aW9uLm1hcCgoZTogYW55KSA9PiBVbmludGVycHJldGVkT3B0aW9uLmZyb21KU09OKGUpKVxuICAgICAgICA6IFtdLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IE9uZW9mT3B0aW9ucyk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbikge1xuICAgICAgb2JqLnVuaW50ZXJwcmV0ZWRPcHRpb24gPSBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24ubWFwKChlKSA9PiBlID8gVW5pbnRlcnByZXRlZE9wdGlvbi50b0pTT04oZSkgOiB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmoudW5pbnRlcnByZXRlZE9wdGlvbiA9IFtdO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8T25lb2ZPcHRpb25zPik6IE9uZW9mT3B0aW9ucyB7XG4gICAgcmV0dXJuIE9uZW9mT3B0aW9ucy5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcblxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPE9uZW9mT3B0aW9ucz4pOiBPbmVvZk9wdGlvbnMge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlT25lb2ZPcHRpb25zKCk7XG4gICAgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uID0gb2JqZWN0LnVuaW50ZXJwcmV0ZWRPcHRpb24/Lm1hcCgoZSkgPT4gVW5pbnRlcnByZXRlZE9wdGlvbi5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlRW51bU9wdGlvbnMoKTogRW51bU9wdGlvbnMge1xuICByZXR1cm4geyBhbGxvd0FsaWFzOiBmYWxzZSwgZGVwcmVjYXRlZDogZmFsc2UsIGRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHM6IGZhbHNlLCB1bmludGVycHJldGVkT3B0aW9uOiBbXSB9O1xufVxuXG5leHBvcnQgY29uc3QgRW51bU9wdGlvbnMgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBFbnVtT3B0aW9ucywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmFsbG93QWxpYXMgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmJvb2wobWVzc2FnZS5hbGxvd0FsaWFzKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZGVwcmVjYXRlZCA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuYm9vbChtZXNzYWdlLmRlcHJlY2F0ZWQpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQ4KS5ib29sKG1lc3NhZ2UuZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cyk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24pIHtcbiAgICAgIFVuaW50ZXJwcmV0ZWRPcHRpb24uZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDc5OTQpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogRW51bU9wdGlvbnMge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRW51bU9wdGlvbnMoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGlmICh0YWcgIT09IDE2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmFsbG93QWxpYXMgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMjQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZGVwcmVjYXRlZCA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBpZiAodGFnICE9PSA0OCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5kZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA5OTk6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNzk5NCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uLnB1c2goVW5pbnRlcnByZXRlZE9wdGlvbi5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IEVudW1PcHRpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgYWxsb3dBbGlhczogaXNTZXQob2JqZWN0LmFsbG93QWxpYXMpID8gQm9vbGVhbihvYmplY3QuYWxsb3dBbGlhcykgOiBmYWxzZSxcbiAgICAgIGRlcHJlY2F0ZWQ6IGlzU2V0KG9iamVjdC5kZXByZWNhdGVkKSA/IEJvb2xlYW4ob2JqZWN0LmRlcHJlY2F0ZWQpIDogZmFsc2UsXG4gICAgICBkZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzOiBpc1NldChvYmplY3QuZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cylcbiAgICAgICAgPyBCb29sZWFuKG9iamVjdC5kZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzKVxuICAgICAgICA6IGZhbHNlLFxuICAgICAgdW5pbnRlcnByZXRlZE9wdGlvbjogQXJyYXkuaXNBcnJheShvYmplY3Q/LnVuaW50ZXJwcmV0ZWRPcHRpb24pXG4gICAgICAgID8gb2JqZWN0LnVuaW50ZXJwcmV0ZWRPcHRpb24ubWFwKChlOiBhbnkpID0+IFVuaW50ZXJwcmV0ZWRPcHRpb24uZnJvbUpTT04oZSkpXG4gICAgICAgIDogW10sXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogRW51bU9wdGlvbnMpOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIG1lc3NhZ2UuYWxsb3dBbGlhcyAhPT0gdW5kZWZpbmVkICYmIChvYmouYWxsb3dBbGlhcyA9IG1lc3NhZ2UuYWxsb3dBbGlhcyk7XG4gICAgbWVzc2FnZS5kZXByZWNhdGVkICE9PSB1bmRlZmluZWQgJiYgKG9iai5kZXByZWNhdGVkID0gbWVzc2FnZS5kZXByZWNhdGVkKTtcbiAgICBtZXNzYWdlLmRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgKG9iai5kZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzID0gbWVzc2FnZS5kZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzKTtcbiAgICBpZiAobWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uKSB7XG4gICAgICBvYmoudW5pbnRlcnByZXRlZE9wdGlvbiA9IG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbi5tYXAoKGUpID0+IGUgPyBVbmludGVycHJldGVkT3B0aW9uLnRvSlNPTihlKSA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai51bmludGVycHJldGVkT3B0aW9uID0gW107XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxFbnVtT3B0aW9ucz4pOiBFbnVtT3B0aW9ucyB7XG4gICAgcmV0dXJuIEVudW1PcHRpb25zLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8RW51bU9wdGlvbnM+KTogRW51bU9wdGlvbnMge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRW51bU9wdGlvbnMoKTtcbiAgICBtZXNzYWdlLmFsbG93QWxpYXMgPSBvYmplY3QuYWxsb3dBbGlhcyA/PyBmYWxzZTtcbiAgICBtZXNzYWdlLmRlcHJlY2F0ZWQgPSBvYmplY3QuZGVwcmVjYXRlZCA/PyBmYWxzZTtcbiAgICBtZXNzYWdlLmRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHMgPSBvYmplY3QuZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cyA/PyBmYWxzZTtcbiAgICBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24gPSBvYmplY3QudW5pbnRlcnByZXRlZE9wdGlvbj8ubWFwKChlKSA9PiBVbmludGVycHJldGVkT3B0aW9uLmZyb21QYXJ0aWFsKGUpKSB8fCBbXTtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VFbnVtVmFsdWVPcHRpb25zKCk6IEVudW1WYWx1ZU9wdGlvbnMge1xuICByZXR1cm4geyBkZXByZWNhdGVkOiBmYWxzZSwgdW5pbnRlcnByZXRlZE9wdGlvbjogW10gfTtcbn1cblxuZXhwb3J0IGNvbnN0IEVudW1WYWx1ZU9wdGlvbnMgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBFbnVtVmFsdWVPcHRpb25zLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuZGVwcmVjYXRlZCA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5ib29sKG1lc3NhZ2UuZGVwcmVjYXRlZCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24pIHtcbiAgICAgIFVuaW50ZXJwcmV0ZWRPcHRpb24uZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDc5OTQpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogRW51bVZhbHVlT3B0aW9ucyB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VFbnVtVmFsdWVPcHRpb25zKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSA4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmRlcHJlY2F0ZWQgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDk5OTpcbiAgICAgICAgICBpZiAodGFnICE9PSA3OTk0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24ucHVzaChVbmludGVycHJldGVkT3B0aW9uLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogRW51bVZhbHVlT3B0aW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRlcHJlY2F0ZWQ6IGlzU2V0KG9iamVjdC5kZXByZWNhdGVkKSA/IEJvb2xlYW4ob2JqZWN0LmRlcHJlY2F0ZWQpIDogZmFsc2UsXG4gICAgICB1bmludGVycHJldGVkT3B0aW9uOiBBcnJheS5pc0FycmF5KG9iamVjdD8udW5pbnRlcnByZXRlZE9wdGlvbilcbiAgICAgICAgPyBvYmplY3QudW5pbnRlcnByZXRlZE9wdGlvbi5tYXAoKGU6IGFueSkgPT4gVW5pbnRlcnByZXRlZE9wdGlvbi5mcm9tSlNPTihlKSlcbiAgICAgICAgOiBbXSxcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBFbnVtVmFsdWVPcHRpb25zKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBtZXNzYWdlLmRlcHJlY2F0ZWQgIT09IHVuZGVmaW5lZCAmJiAob2JqLmRlcHJlY2F0ZWQgPSBtZXNzYWdlLmRlcHJlY2F0ZWQpO1xuICAgIGlmIChtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24pIHtcbiAgICAgIG9iai51bmludGVycHJldGVkT3B0aW9uID0gbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uLm1hcCgoZSkgPT4gZSA/IFVuaW50ZXJwcmV0ZWRPcHRpb24udG9KU09OKGUpIDogdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqLnVuaW50ZXJwcmV0ZWRPcHRpb24gPSBbXTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPEVudW1WYWx1ZU9wdGlvbnM+KTogRW51bVZhbHVlT3B0aW9ucyB7XG4gICAgcmV0dXJuIEVudW1WYWx1ZU9wdGlvbnMuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG5cbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxFbnVtVmFsdWVPcHRpb25zPik6IEVudW1WYWx1ZU9wdGlvbnMge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRW51bVZhbHVlT3B0aW9ucygpO1xuICAgIG1lc3NhZ2UuZGVwcmVjYXRlZCA9IG9iamVjdC5kZXByZWNhdGVkID8/IGZhbHNlO1xuICAgIG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbiA9IG9iamVjdC51bmludGVycHJldGVkT3B0aW9uPy5tYXAoKGUpID0+IFVuaW50ZXJwcmV0ZWRPcHRpb24uZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZVNlcnZpY2VPcHRpb25zKCk6IFNlcnZpY2VPcHRpb25zIHtcbiAgcmV0dXJuIHsgZGVwcmVjYXRlZDogZmFsc2UsIHVuaW50ZXJwcmV0ZWRPcHRpb246IFtdIH07XG59XG5cbmV4cG9ydCBjb25zdCBTZXJ2aWNlT3B0aW9ucyA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFNlcnZpY2VPcHRpb25zLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuZGVwcmVjYXRlZCA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNjQpLmJvb2wobWVzc2FnZS5kZXByZWNhdGVkKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbikge1xuICAgICAgVW5pbnRlcnByZXRlZE9wdGlvbi5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoNzk5NCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBTZXJ2aWNlT3B0aW9ucyB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VTZXJ2aWNlT3B0aW9ucygpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDMzOlxuICAgICAgICAgIGlmICh0YWcgIT09IDI2NCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5kZXByZWNhdGVkID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA5OTk6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNzk5NCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uLnB1c2goVW5pbnRlcnByZXRlZE9wdGlvbi5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IFNlcnZpY2VPcHRpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGVwcmVjYXRlZDogaXNTZXQob2JqZWN0LmRlcHJlY2F0ZWQpID8gQm9vbGVhbihvYmplY3QuZGVwcmVjYXRlZCkgOiBmYWxzZSxcbiAgICAgIHVuaW50ZXJwcmV0ZWRPcHRpb246IEFycmF5LmlzQXJyYXkob2JqZWN0Py51bmludGVycHJldGVkT3B0aW9uKVxuICAgICAgICA/IG9iamVjdC51bmludGVycHJldGVkT3B0aW9uLm1hcCgoZTogYW55KSA9PiBVbmludGVycHJldGVkT3B0aW9uLmZyb21KU09OKGUpKVxuICAgICAgICA6IFtdLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IFNlcnZpY2VPcHRpb25zKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBtZXNzYWdlLmRlcHJlY2F0ZWQgIT09IHVuZGVmaW5lZCAmJiAob2JqLmRlcHJlY2F0ZWQgPSBtZXNzYWdlLmRlcHJlY2F0ZWQpO1xuICAgIGlmIChtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24pIHtcbiAgICAgIG9iai51bmludGVycHJldGVkT3B0aW9uID0gbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uLm1hcCgoZSkgPT4gZSA/IFVuaW50ZXJwcmV0ZWRPcHRpb24udG9KU09OKGUpIDogdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqLnVuaW50ZXJwcmV0ZWRPcHRpb24gPSBbXTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPFNlcnZpY2VPcHRpb25zPik6IFNlcnZpY2VPcHRpb25zIHtcbiAgICByZXR1cm4gU2VydmljZU9wdGlvbnMuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG5cbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxTZXJ2aWNlT3B0aW9ucz4pOiBTZXJ2aWNlT3B0aW9ucyB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VTZXJ2aWNlT3B0aW9ucygpO1xuICAgIG1lc3NhZ2UuZGVwcmVjYXRlZCA9IG9iamVjdC5kZXByZWNhdGVkID8/IGZhbHNlO1xuICAgIG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbiA9IG9iamVjdC51bmludGVycHJldGVkT3B0aW9uPy5tYXAoKGUpID0+IFVuaW50ZXJwcmV0ZWRPcHRpb24uZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZU1ldGhvZE9wdGlvbnMoKTogTWV0aG9kT3B0aW9ucyB7XG4gIHJldHVybiB7IGRlcHJlY2F0ZWQ6IGZhbHNlLCBpZGVtcG90ZW5jeUxldmVsOiAwLCB1bmludGVycHJldGVkT3B0aW9uOiBbXSB9O1xufVxuXG5leHBvcnQgY29uc3QgTWV0aG9kT3B0aW9ucyA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IE1ldGhvZE9wdGlvbnMsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5kZXByZWNhdGVkID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI2NCkuYm9vbChtZXNzYWdlLmRlcHJlY2F0ZWQpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5pZGVtcG90ZW5jeUxldmVsICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI3MikuaW50MzIobWVzc2FnZS5pZGVtcG90ZW5jeUxldmVsKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbikge1xuICAgICAgVW5pbnRlcnByZXRlZE9wdGlvbi5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoNzk5NCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBNZXRob2RPcHRpb25zIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZU1ldGhvZE9wdGlvbnMoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICBpZiAodGFnICE9PSAyNjQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZGVwcmVjYXRlZCA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMjcyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmlkZW1wb3RlbmN5TGV2ZWwgPSByZWFkZXIuaW50MzIoKSBhcyBhbnk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgOTk5OlxuICAgICAgICAgIGlmICh0YWcgIT09IDc5OTQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbi5wdXNoKFVuaW50ZXJwcmV0ZWRPcHRpb24uZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBNZXRob2RPcHRpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGVwcmVjYXRlZDogaXNTZXQob2JqZWN0LmRlcHJlY2F0ZWQpID8gQm9vbGVhbihvYmplY3QuZGVwcmVjYXRlZCkgOiBmYWxzZSxcbiAgICAgIGlkZW1wb3RlbmN5TGV2ZWw6IGlzU2V0KG9iamVjdC5pZGVtcG90ZW5jeUxldmVsKVxuICAgICAgICA/IG1ldGhvZE9wdGlvbnNfSWRlbXBvdGVuY3lMZXZlbEZyb21KU09OKG9iamVjdC5pZGVtcG90ZW5jeUxldmVsKVxuICAgICAgICA6IDAsXG4gICAgICB1bmludGVycHJldGVkT3B0aW9uOiBBcnJheS5pc0FycmF5KG9iamVjdD8udW5pbnRlcnByZXRlZE9wdGlvbilcbiAgICAgICAgPyBvYmplY3QudW5pbnRlcnByZXRlZE9wdGlvbi5tYXAoKGU6IGFueSkgPT4gVW5pbnRlcnByZXRlZE9wdGlvbi5mcm9tSlNPTihlKSlcbiAgICAgICAgOiBbXSxcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBNZXRob2RPcHRpb25zKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBtZXNzYWdlLmRlcHJlY2F0ZWQgIT09IHVuZGVmaW5lZCAmJiAob2JqLmRlcHJlY2F0ZWQgPSBtZXNzYWdlLmRlcHJlY2F0ZWQpO1xuICAgIG1lc3NhZ2UuaWRlbXBvdGVuY3lMZXZlbCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAob2JqLmlkZW1wb3RlbmN5TGV2ZWwgPSBtZXRob2RPcHRpb25zX0lkZW1wb3RlbmN5TGV2ZWxUb0pTT04obWVzc2FnZS5pZGVtcG90ZW5jeUxldmVsKSk7XG4gICAgaWYgKG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbikge1xuICAgICAgb2JqLnVuaW50ZXJwcmV0ZWRPcHRpb24gPSBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24ubWFwKChlKSA9PiBlID8gVW5pbnRlcnByZXRlZE9wdGlvbi50b0pTT04oZSkgOiB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmoudW5pbnRlcnByZXRlZE9wdGlvbiA9IFtdO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8TWV0aG9kT3B0aW9ucz4pOiBNZXRob2RPcHRpb25zIHtcbiAgICByZXR1cm4gTWV0aG9kT3B0aW9ucy5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcblxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPE1ldGhvZE9wdGlvbnM+KTogTWV0aG9kT3B0aW9ucyB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VNZXRob2RPcHRpb25zKCk7XG4gICAgbWVzc2FnZS5kZXByZWNhdGVkID0gb2JqZWN0LmRlcHJlY2F0ZWQgPz8gZmFsc2U7XG4gICAgbWVzc2FnZS5pZGVtcG90ZW5jeUxldmVsID0gb2JqZWN0LmlkZW1wb3RlbmN5TGV2ZWwgPz8gMDtcbiAgICBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24gPSBvYmplY3QudW5pbnRlcnByZXRlZE9wdGlvbj8ubWFwKChlKSA9PiBVbmludGVycHJldGVkT3B0aW9uLmZyb21QYXJ0aWFsKGUpKSB8fCBbXTtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VVbmludGVycHJldGVkT3B0aW9uKCk6IFVuaW50ZXJwcmV0ZWRPcHRpb24ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IFtdLFxuICAgIGlkZW50aWZpZXJWYWx1ZTogXCJcIixcbiAgICBwb3NpdGl2ZUludFZhbHVlOiAwLFxuICAgIG5lZ2F0aXZlSW50VmFsdWU6IDAsXG4gICAgZG91YmxlVmFsdWU6IDAsXG4gICAgc3RyaW5nVmFsdWU6IG5ldyBVaW50OEFycmF5KCksXG4gICAgYWdncmVnYXRlVmFsdWU6IFwiXCIsXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBVbmludGVycHJldGVkT3B0aW9uID0ge1xuICBlbmNvZGUobWVzc2FnZTogVW5pbnRlcnByZXRlZE9wdGlvbiwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLm5hbWUpIHtcbiAgICAgIFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQuZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5pZGVudGlmaWVyVmFsdWUgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjYpLnN0cmluZyhtZXNzYWdlLmlkZW50aWZpZXJWYWx1ZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBvc2l0aXZlSW50VmFsdWUgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzIpLnVpbnQ2NChtZXNzYWdlLnBvc2l0aXZlSW50VmFsdWUpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5uZWdhdGl2ZUludFZhbHVlICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQwKS5pbnQ2NChtZXNzYWdlLm5lZ2F0aXZlSW50VmFsdWUpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kb3VibGVWYWx1ZSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0OSkuZG91YmxlKG1lc3NhZ2UuZG91YmxlVmFsdWUpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zdHJpbmdWYWx1ZS5sZW5ndGggIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTgpLmJ5dGVzKG1lc3NhZ2Uuc3RyaW5nVmFsdWUpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5hZ2dyZWdhdGVWYWx1ZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMig2Nikuc3RyaW5nKG1lc3NhZ2UuYWdncmVnYXRlVmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFVuaW50ZXJwcmV0ZWRPcHRpb24ge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlVW5pbnRlcnByZXRlZE9wdGlvbigpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubmFtZS5wdXNoKFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBpZiAodGFnICE9PSAyNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5pZGVudGlmaWVyVmFsdWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBpZiAodGFnICE9PSAzMikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5wb3NpdGl2ZUludFZhbHVlID0gbG9uZ1RvTnVtYmVyKHJlYWRlci51aW50NjQoKSBhcyBMb25nKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGlmICh0YWcgIT09IDQwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm5lZ2F0aXZlSW50VmFsdWUgPSBsb25nVG9OdW1iZXIocmVhZGVyLmludDY0KCkgYXMgTG9uZyk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBpZiAodGFnICE9PSA0OSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5kb3VibGVWYWx1ZSA9IHJlYWRlci5kb3VibGUoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIGlmICh0YWcgIT09IDU4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnN0cmluZ1ZhbHVlID0gcmVhZGVyLmJ5dGVzKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICBpZiAodGFnICE9PSA2Nikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5hZ2dyZWdhdGVWYWx1ZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IFVuaW50ZXJwcmV0ZWRPcHRpb24ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBBcnJheS5pc0FycmF5KG9iamVjdD8ubmFtZSkgPyBvYmplY3QubmFtZS5tYXAoKGU6IGFueSkgPT4gVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydC5mcm9tSlNPTihlKSkgOiBbXSxcbiAgICAgIGlkZW50aWZpZXJWYWx1ZTogaXNTZXQob2JqZWN0LmlkZW50aWZpZXJWYWx1ZSkgPyBTdHJpbmcob2JqZWN0LmlkZW50aWZpZXJWYWx1ZSkgOiBcIlwiLFxuICAgICAgcG9zaXRpdmVJbnRWYWx1ZTogaXNTZXQob2JqZWN0LnBvc2l0aXZlSW50VmFsdWUpID8gTnVtYmVyKG9iamVjdC5wb3NpdGl2ZUludFZhbHVlKSA6IDAsXG4gICAgICBuZWdhdGl2ZUludFZhbHVlOiBpc1NldChvYmplY3QubmVnYXRpdmVJbnRWYWx1ZSkgPyBOdW1iZXIob2JqZWN0Lm5lZ2F0aXZlSW50VmFsdWUpIDogMCxcbiAgICAgIGRvdWJsZVZhbHVlOiBpc1NldChvYmplY3QuZG91YmxlVmFsdWUpID8gTnVtYmVyKG9iamVjdC5kb3VibGVWYWx1ZSkgOiAwLFxuICAgICAgc3RyaW5nVmFsdWU6IGlzU2V0KG9iamVjdC5zdHJpbmdWYWx1ZSkgPyBieXRlc0Zyb21CYXNlNjQob2JqZWN0LnN0cmluZ1ZhbHVlKSA6IG5ldyBVaW50OEFycmF5KCksXG4gICAgICBhZ2dyZWdhdGVWYWx1ZTogaXNTZXQob2JqZWN0LmFnZ3JlZ2F0ZVZhbHVlKSA/IFN0cmluZyhvYmplY3QuYWdncmVnYXRlVmFsdWUpIDogXCJcIixcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBVbmludGVycHJldGVkT3B0aW9uKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBpZiAobWVzc2FnZS5uYW1lKSB7XG4gICAgICBvYmoubmFtZSA9IG1lc3NhZ2UubmFtZS5tYXAoKGUpID0+IGUgPyBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0LnRvSlNPTihlKSA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai5uYW1lID0gW107XG4gICAgfVxuICAgIG1lc3NhZ2UuaWRlbnRpZmllclZhbHVlICE9PSB1bmRlZmluZWQgJiYgKG9iai5pZGVudGlmaWVyVmFsdWUgPSBtZXNzYWdlLmlkZW50aWZpZXJWYWx1ZSk7XG4gICAgbWVzc2FnZS5wb3NpdGl2ZUludFZhbHVlICE9PSB1bmRlZmluZWQgJiYgKG9iai5wb3NpdGl2ZUludFZhbHVlID0gTWF0aC5yb3VuZChtZXNzYWdlLnBvc2l0aXZlSW50VmFsdWUpKTtcbiAgICBtZXNzYWdlLm5lZ2F0aXZlSW50VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAob2JqLm5lZ2F0aXZlSW50VmFsdWUgPSBNYXRoLnJvdW5kKG1lc3NhZ2UubmVnYXRpdmVJbnRWYWx1ZSkpO1xuICAgIG1lc3NhZ2UuZG91YmxlVmFsdWUgIT09IHVuZGVmaW5lZCAmJiAob2JqLmRvdWJsZVZhbHVlID0gbWVzc2FnZS5kb3VibGVWYWx1ZSk7XG4gICAgbWVzc2FnZS5zdHJpbmdWYWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAob2JqLnN0cmluZ1ZhbHVlID0gYmFzZTY0RnJvbUJ5dGVzKG1lc3NhZ2Uuc3RyaW5nVmFsdWUgIT09IHVuZGVmaW5lZCA/IG1lc3NhZ2Uuc3RyaW5nVmFsdWUgOiBuZXcgVWludDhBcnJheSgpKSk7XG4gICAgbWVzc2FnZS5hZ2dyZWdhdGVWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIChvYmouYWdncmVnYXRlVmFsdWUgPSBtZXNzYWdlLmFnZ3JlZ2F0ZVZhbHVlKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8VW5pbnRlcnByZXRlZE9wdGlvbj4pOiBVbmludGVycHJldGVkT3B0aW9uIHtcbiAgICByZXR1cm4gVW5pbnRlcnByZXRlZE9wdGlvbi5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcblxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPFVuaW50ZXJwcmV0ZWRPcHRpb24+KTogVW5pbnRlcnByZXRlZE9wdGlvbiB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VVbmludGVycHJldGVkT3B0aW9uKCk7XG4gICAgbWVzc2FnZS5uYW1lID0gb2JqZWN0Lm5hbWU/Lm1hcCgoZSkgPT4gVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydC5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgbWVzc2FnZS5pZGVudGlmaWVyVmFsdWUgPSBvYmplY3QuaWRlbnRpZmllclZhbHVlID8/IFwiXCI7XG4gICAgbWVzc2FnZS5wb3NpdGl2ZUludFZhbHVlID0gb2JqZWN0LnBvc2l0aXZlSW50VmFsdWUgPz8gMDtcbiAgICBtZXNzYWdlLm5lZ2F0aXZlSW50VmFsdWUgPSBvYmplY3QubmVnYXRpdmVJbnRWYWx1ZSA/PyAwO1xuICAgIG1lc3NhZ2UuZG91YmxlVmFsdWUgPSBvYmplY3QuZG91YmxlVmFsdWUgPz8gMDtcbiAgICBtZXNzYWdlLnN0cmluZ1ZhbHVlID0gb2JqZWN0LnN0cmluZ1ZhbHVlID8/IG5ldyBVaW50OEFycmF5KCk7XG4gICAgbWVzc2FnZS5hZ2dyZWdhdGVWYWx1ZSA9IG9iamVjdC5hZ2dyZWdhdGVWYWx1ZSA/PyBcIlwiO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZVVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQoKTogVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydCB7XG4gIHJldHVybiB7IG5hbWVQYXJ0OiBcIlwiLCBpc0V4dGVuc2lvbjogZmFsc2UgfTtcbn1cblxuZXhwb3J0IGNvbnN0IFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0LCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UubmFtZVBhcnQgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLm5hbWVQYXJ0KTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaXNFeHRlbnNpb24gPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmJvb2wobWVzc2FnZS5pc0V4dGVuc2lvbik7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0KCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5uYW1lUGFydCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGlmICh0YWcgIT09IDE2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmlzRXh0ZW5zaW9uID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lUGFydDogaXNTZXQob2JqZWN0Lm5hbWVQYXJ0KSA/IFN0cmluZyhvYmplY3QubmFtZVBhcnQpIDogXCJcIixcbiAgICAgIGlzRXh0ZW5zaW9uOiBpc1NldChvYmplY3QuaXNFeHRlbnNpb24pID8gQm9vbGVhbihvYmplY3QuaXNFeHRlbnNpb24pIDogZmFsc2UsXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydCk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgbWVzc2FnZS5uYW1lUGFydCAhPT0gdW5kZWZpbmVkICYmIChvYmoubmFtZVBhcnQgPSBtZXNzYWdlLm5hbWVQYXJ0KTtcbiAgICBtZXNzYWdlLmlzRXh0ZW5zaW9uICE9PSB1bmRlZmluZWQgJiYgKG9iai5pc0V4dGVuc2lvbiA9IG1lc3NhZ2UuaXNFeHRlbnNpb24pO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0Pik6IFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQge1xuICAgIHJldHVybiBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0LmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8VW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydD4pOiBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0IHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQoKTtcbiAgICBtZXNzYWdlLm5hbWVQYXJ0ID0gb2JqZWN0Lm5hbWVQYXJ0ID8/IFwiXCI7XG4gICAgbWVzc2FnZS5pc0V4dGVuc2lvbiA9IG9iamVjdC5pc0V4dGVuc2lvbiA/PyBmYWxzZTtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VTb3VyY2VDb2RlSW5mbygpOiBTb3VyY2VDb2RlSW5mbyB7XG4gIHJldHVybiB7IGxvY2F0aW9uOiBbXSB9O1xufVxuXG5leHBvcnQgY29uc3QgU291cmNlQ29kZUluZm8gPSB7XG4gIGVuY29kZShtZXNzYWdlOiBTb3VyY2VDb2RlSW5mbywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLmxvY2F0aW9uKSB7XG4gICAgICBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbi5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogU291cmNlQ29kZUluZm8ge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlU291cmNlQ29kZUluZm8oKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmxvY2F0aW9uLnB1c2goU291cmNlQ29kZUluZm9fTG9jYXRpb24uZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBTb3VyY2VDb2RlSW5mbyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvY2F0aW9uOiBBcnJheS5pc0FycmF5KG9iamVjdD8ubG9jYXRpb24pXG4gICAgICAgID8gb2JqZWN0LmxvY2F0aW9uLm1hcCgoZTogYW55KSA9PiBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbi5mcm9tSlNPTihlKSlcbiAgICAgICAgOiBbXSxcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBTb3VyY2VDb2RlSW5mbyk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UubG9jYXRpb24pIHtcbiAgICAgIG9iai5sb2NhdGlvbiA9IG1lc3NhZ2UubG9jYXRpb24ubWFwKChlKSA9PiBlID8gU291cmNlQ29kZUluZm9fTG9jYXRpb24udG9KU09OKGUpIDogdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqLmxvY2F0aW9uID0gW107XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxTb3VyY2VDb2RlSW5mbz4pOiBTb3VyY2VDb2RlSW5mbyB7XG4gICAgcmV0dXJuIFNvdXJjZUNvZGVJbmZvLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8U291cmNlQ29kZUluZm8+KTogU291cmNlQ29kZUluZm8ge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlU291cmNlQ29kZUluZm8oKTtcbiAgICBtZXNzYWdlLmxvY2F0aW9uID0gb2JqZWN0LmxvY2F0aW9uPy5tYXAoKGUpID0+IFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uLmZyb21QYXJ0aWFsKGUpKSB8fCBbXTtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbigpOiBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbiB7XG4gIHJldHVybiB7IHBhdGg6IFtdLCBzcGFuOiBbXSwgbGVhZGluZ0NvbW1lbnRzOiBcIlwiLCB0cmFpbGluZ0NvbW1lbnRzOiBcIlwiLCBsZWFkaW5nRGV0YWNoZWRDb21tZW50czogW10gfTtcbn1cblxuZXhwb3J0IGNvbnN0IFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uID0ge1xuICBlbmNvZGUobWVzc2FnZTogU291cmNlQ29kZUluZm9fTG9jYXRpb24sIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICB3cml0ZXIudWludDMyKDEwKS5mb3JrKCk7XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UucGF0aCkge1xuICAgICAgd3JpdGVyLmludDMyKHYpO1xuICAgIH1cbiAgICB3cml0ZXIubGRlbGltKCk7XG4gICAgd3JpdGVyLnVpbnQzMigxOCkuZm9yaygpO1xuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnNwYW4pIHtcbiAgICAgIHdyaXRlci5pbnQzMih2KTtcbiAgICB9XG4gICAgd3JpdGVyLmxkZWxpbSgpO1xuICAgIGlmIChtZXNzYWdlLmxlYWRpbmdDb21tZW50cyAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNikuc3RyaW5nKG1lc3NhZ2UubGVhZGluZ0NvbW1lbnRzKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudHJhaWxpbmdDb21tZW50cyAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigzNCkuc3RyaW5nKG1lc3NhZ2UudHJhaWxpbmdDb21tZW50cyk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLmxlYWRpbmdEZXRhY2hlZENvbW1lbnRzKSB7XG4gICAgICB3cml0ZXIudWludDMyKDUwKS5zdHJpbmcodiEpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnID09PSA4KSB7XG4gICAgICAgICAgICBtZXNzYWdlLnBhdGgucHVzaChyZWFkZXIuaW50MzIoKSk7XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0YWcgPT09IDEwKSB7XG4gICAgICAgICAgICBjb25zdCBlbmQyID0gcmVhZGVyLnVpbnQzMigpICsgcmVhZGVyLnBvcztcbiAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kMikge1xuICAgICAgICAgICAgICBtZXNzYWdlLnBhdGgucHVzaChyZWFkZXIuaW50MzIoKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHRhZyA9PT0gMTYpIHtcbiAgICAgICAgICAgIG1lc3NhZ2Uuc3Bhbi5wdXNoKHJlYWRlci5pbnQzMigpKTtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRhZyA9PT0gMTgpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZDIgPSByZWFkZXIudWludDMyKCkgKyByZWFkZXIucG9zO1xuICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQyKSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2Uuc3Bhbi5wdXNoKHJlYWRlci5pbnQzMigpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBpZiAodGFnICE9PSAyNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5sZWFkaW5nQ29tbWVudHMgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBpZiAodGFnICE9PSAzNCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS50cmFpbGluZ0NvbW1lbnRzID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubGVhZGluZ0RldGFjaGVkQ29tbWVudHMucHVzaChyZWFkZXIuc3RyaW5nKCkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogU291cmNlQ29kZUluZm9fTG9jYXRpb24ge1xuICAgIHJldHVybiB7XG4gICAgICBwYXRoOiBBcnJheS5pc0FycmF5KG9iamVjdD8ucGF0aCkgPyBvYmplY3QucGF0aC5tYXAoKGU6IGFueSkgPT4gTnVtYmVyKGUpKSA6IFtdLFxuICAgICAgc3BhbjogQXJyYXkuaXNBcnJheShvYmplY3Q/LnNwYW4pID8gb2JqZWN0LnNwYW4ubWFwKChlOiBhbnkpID0+IE51bWJlcihlKSkgOiBbXSxcbiAgICAgIGxlYWRpbmdDb21tZW50czogaXNTZXQob2JqZWN0LmxlYWRpbmdDb21tZW50cykgPyBTdHJpbmcob2JqZWN0LmxlYWRpbmdDb21tZW50cykgOiBcIlwiLFxuICAgICAgdHJhaWxpbmdDb21tZW50czogaXNTZXQob2JqZWN0LnRyYWlsaW5nQ29tbWVudHMpID8gU3RyaW5nKG9iamVjdC50cmFpbGluZ0NvbW1lbnRzKSA6IFwiXCIsXG4gICAgICBsZWFkaW5nRGV0YWNoZWRDb21tZW50czogQXJyYXkuaXNBcnJheShvYmplY3Q/LmxlYWRpbmdEZXRhY2hlZENvbW1lbnRzKVxuICAgICAgICA/IG9iamVjdC5sZWFkaW5nRGV0YWNoZWRDb21tZW50cy5tYXAoKGU6IGFueSkgPT4gU3RyaW5nKGUpKVxuICAgICAgICA6IFtdLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBpZiAobWVzc2FnZS5wYXRoKSB7XG4gICAgICBvYmoucGF0aCA9IG1lc3NhZ2UucGF0aC5tYXAoKGUpID0+IE1hdGgucm91bmQoZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmoucGF0aCA9IFtdO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zcGFuKSB7XG4gICAgICBvYmouc3BhbiA9IG1lc3NhZ2Uuc3Bhbi5tYXAoKGUpID0+IE1hdGgucm91bmQoZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmouc3BhbiA9IFtdO1xuICAgIH1cbiAgICBtZXNzYWdlLmxlYWRpbmdDb21tZW50cyAhPT0gdW5kZWZpbmVkICYmIChvYmoubGVhZGluZ0NvbW1lbnRzID0gbWVzc2FnZS5sZWFkaW5nQ29tbWVudHMpO1xuICAgIG1lc3NhZ2UudHJhaWxpbmdDb21tZW50cyAhPT0gdW5kZWZpbmVkICYmIChvYmoudHJhaWxpbmdDb21tZW50cyA9IG1lc3NhZ2UudHJhaWxpbmdDb21tZW50cyk7XG4gICAgaWYgKG1lc3NhZ2UubGVhZGluZ0RldGFjaGVkQ29tbWVudHMpIHtcbiAgICAgIG9iai5sZWFkaW5nRGV0YWNoZWRDb21tZW50cyA9IG1lc3NhZ2UubGVhZGluZ0RldGFjaGVkQ29tbWVudHMubWFwKChlKSA9PiBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqLmxlYWRpbmdEZXRhY2hlZENvbW1lbnRzID0gW107XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbj4pOiBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbiB7XG4gICAgcmV0dXJuIFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8U291cmNlQ29kZUluZm9fTG9jYXRpb24+KTogU291cmNlQ29kZUluZm9fTG9jYXRpb24ge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlU291cmNlQ29kZUluZm9fTG9jYXRpb24oKTtcbiAgICBtZXNzYWdlLnBhdGggPSBvYmplY3QucGF0aD8ubWFwKChlKSA9PiBlKSB8fCBbXTtcbiAgICBtZXNzYWdlLnNwYW4gPSBvYmplY3Quc3Bhbj8ubWFwKChlKSA9PiBlKSB8fCBbXTtcbiAgICBtZXNzYWdlLmxlYWRpbmdDb21tZW50cyA9IG9iamVjdC5sZWFkaW5nQ29tbWVudHMgPz8gXCJcIjtcbiAgICBtZXNzYWdlLnRyYWlsaW5nQ29tbWVudHMgPSBvYmplY3QudHJhaWxpbmdDb21tZW50cyA/PyBcIlwiO1xuICAgIG1lc3NhZ2UubGVhZGluZ0RldGFjaGVkQ29tbWVudHMgPSBvYmplY3QubGVhZGluZ0RldGFjaGVkQ29tbWVudHM/Lm1hcCgoZSkgPT4gZSkgfHwgW107XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlR2VuZXJhdGVkQ29kZUluZm8oKTogR2VuZXJhdGVkQ29kZUluZm8ge1xuICByZXR1cm4geyBhbm5vdGF0aW9uOiBbXSB9O1xufVxuXG5leHBvcnQgY29uc3QgR2VuZXJhdGVkQ29kZUluZm8gPSB7XG4gIGVuY29kZShtZXNzYWdlOiBHZW5lcmF0ZWRDb2RlSW5mbywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLmFubm90YXRpb24pIHtcbiAgICAgIEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24uZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IEdlbmVyYXRlZENvZGVJbmZvIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUdlbmVyYXRlZENvZGVJbmZvKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5hbm5vdGF0aW9uLnB1c2goR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbi5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IEdlbmVyYXRlZENvZGVJbmZvIHtcbiAgICByZXR1cm4ge1xuICAgICAgYW5ub3RhdGlvbjogQXJyYXkuaXNBcnJheShvYmplY3Q/LmFubm90YXRpb24pXG4gICAgICAgID8gb2JqZWN0LmFubm90YXRpb24ubWFwKChlOiBhbnkpID0+IEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24uZnJvbUpTT04oZSkpXG4gICAgICAgIDogW10sXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogR2VuZXJhdGVkQ29kZUluZm8pOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIGlmIChtZXNzYWdlLmFubm90YXRpb24pIHtcbiAgICAgIG9iai5hbm5vdGF0aW9uID0gbWVzc2FnZS5hbm5vdGF0aW9uLm1hcCgoZSkgPT4gZSA/IEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24udG9KU09OKGUpIDogdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqLmFubm90YXRpb24gPSBbXTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPEdlbmVyYXRlZENvZGVJbmZvPik6IEdlbmVyYXRlZENvZGVJbmZvIHtcbiAgICByZXR1cm4gR2VuZXJhdGVkQ29kZUluZm8uZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG5cbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxHZW5lcmF0ZWRDb2RlSW5mbz4pOiBHZW5lcmF0ZWRDb2RlSW5mbyB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VHZW5lcmF0ZWRDb2RlSW5mbygpO1xuICAgIG1lc3NhZ2UuYW5ub3RhdGlvbiA9IG9iamVjdC5hbm5vdGF0aW9uPy5tYXAoKGUpID0+IEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24uZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZUdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24oKTogR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbiB7XG4gIHJldHVybiB7IHBhdGg6IFtdLCBzb3VyY2VGaWxlOiBcIlwiLCBiZWdpbjogMCwgZW5kOiAwLCBzZW1hbnRpYzogMCB9O1xufVxuXG5leHBvcnQgY29uc3QgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbiA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24sIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICB3cml0ZXIudWludDMyKDEwKS5mb3JrKCk7XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UucGF0aCkge1xuICAgICAgd3JpdGVyLmludDMyKHYpO1xuICAgIH1cbiAgICB3cml0ZXIubGRlbGltKCk7XG4gICAgaWYgKG1lc3NhZ2Uuc291cmNlRmlsZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxOCkuc3RyaW5nKG1lc3NhZ2Uuc291cmNlRmlsZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmJlZ2luICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5pbnQzMihtZXNzYWdlLmJlZ2luKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZW5kICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDMyKS5pbnQzMihtZXNzYWdlLmVuZCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNlbWFudGljICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQwKS5pbnQzMihtZXNzYWdlLnNlbWFudGljKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24oKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgPT09IDgpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UucGF0aC5wdXNoKHJlYWRlci5pbnQzMigpKTtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRhZyA9PT0gMTApIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZDIgPSByZWFkZXIudWludDMyKCkgKyByZWFkZXIucG9zO1xuICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQyKSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2UucGF0aC5wdXNoKHJlYWRlci5pbnQzMigpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxOCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5zb3VyY2VGaWxlID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMjQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuYmVnaW4gPSByZWFkZXIuaW50MzIoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGlmICh0YWcgIT09IDMyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmVuZCA9IHJlYWRlci5pbnQzMigpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNDApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uuc2VtYW50aWMgPSByZWFkZXIuaW50MzIoKSBhcyBhbnk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGF0aDogQXJyYXkuaXNBcnJheShvYmplY3Q/LnBhdGgpID8gb2JqZWN0LnBhdGgubWFwKChlOiBhbnkpID0+IE51bWJlcihlKSkgOiBbXSxcbiAgICAgIHNvdXJjZUZpbGU6IGlzU2V0KG9iamVjdC5zb3VyY2VGaWxlKSA/IFN0cmluZyhvYmplY3Quc291cmNlRmlsZSkgOiBcIlwiLFxuICAgICAgYmVnaW46IGlzU2V0KG9iamVjdC5iZWdpbikgPyBOdW1iZXIob2JqZWN0LmJlZ2luKSA6IDAsXG4gICAgICBlbmQ6IGlzU2V0KG9iamVjdC5lbmQpID8gTnVtYmVyKG9iamVjdC5lbmQpIDogMCxcbiAgICAgIHNlbWFudGljOiBpc1NldChvYmplY3Quc2VtYW50aWMpID8gZ2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9TZW1hbnRpY0Zyb21KU09OKG9iamVjdC5zZW1hbnRpYykgOiAwLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24pOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIGlmIChtZXNzYWdlLnBhdGgpIHtcbiAgICAgIG9iai5wYXRoID0gbWVzc2FnZS5wYXRoLm1hcCgoZSkgPT4gTWF0aC5yb3VuZChlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iai5wYXRoID0gW107XG4gICAgfVxuICAgIG1lc3NhZ2Uuc291cmNlRmlsZSAhPT0gdW5kZWZpbmVkICYmIChvYmouc291cmNlRmlsZSA9IG1lc3NhZ2Uuc291cmNlRmlsZSk7XG4gICAgbWVzc2FnZS5iZWdpbiAhPT0gdW5kZWZpbmVkICYmIChvYmouYmVnaW4gPSBNYXRoLnJvdW5kKG1lc3NhZ2UuYmVnaW4pKTtcbiAgICBtZXNzYWdlLmVuZCAhPT0gdW5kZWZpbmVkICYmIChvYmouZW5kID0gTWF0aC5yb3VuZChtZXNzYWdlLmVuZCkpO1xuICAgIG1lc3NhZ2Uuc2VtYW50aWMgIT09IHVuZGVmaW5lZCAmJiAob2JqLnNlbWFudGljID0gZ2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9TZW1hbnRpY1RvSlNPTihtZXNzYWdlLnNlbWFudGljKSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24+KTogR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbiB7XG4gICAgcmV0dXJuIEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24uZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG5cbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uPik6IEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24ge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbigpO1xuICAgIG1lc3NhZ2UucGF0aCA9IG9iamVjdC5wYXRoPy5tYXAoKGUpID0+IGUpIHx8IFtdO1xuICAgIG1lc3NhZ2Uuc291cmNlRmlsZSA9IG9iamVjdC5zb3VyY2VGaWxlID8/IFwiXCI7XG4gICAgbWVzc2FnZS5iZWdpbiA9IG9iamVjdC5iZWdpbiA/PyAwO1xuICAgIG1lc3NhZ2UuZW5kID0gb2JqZWN0LmVuZCA/PyAwO1xuICAgIG1lc3NhZ2Uuc2VtYW50aWMgPSBvYmplY3Quc2VtYW50aWMgPz8gMDtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmRlY2xhcmUgdmFyIHNlbGY6IGFueSB8IHVuZGVmaW5lZDtcbmRlY2xhcmUgdmFyIHdpbmRvdzogYW55IHwgdW5kZWZpbmVkO1xuZGVjbGFyZSB2YXIgZ2xvYmFsOiBhbnkgfCB1bmRlZmluZWQ7XG52YXIgdHNQcm90b0dsb2JhbFRoaXM6IGFueSA9ICgoKSA9PiB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiBnbG9iYWxUaGlzO1xuICB9XG4gIGlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiBzZWxmO1xuICB9XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiBnbG9iYWw7XG4gIH1cbiAgdGhyb3cgXCJVbmFibGUgdG8gbG9jYXRlIGdsb2JhbCBvYmplY3RcIjtcbn0pKCk7XG5cbmZ1bmN0aW9uIGJ5dGVzRnJvbUJhc2U2NChiNjQ6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICBpZiAodHNQcm90b0dsb2JhbFRoaXMuQnVmZmVyKSB7XG4gICAgcmV0dXJuIFVpbnQ4QXJyYXkuZnJvbSh0c1Byb3RvR2xvYmFsVGhpcy5CdWZmZXIuZnJvbShiNjQsIFwiYmFzZTY0XCIpKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBiaW4gPSB0c1Byb3RvR2xvYmFsVGhpcy5hdG9iKGI2NCk7XG4gICAgY29uc3QgYXJyID0gbmV3IFVpbnQ4QXJyYXkoYmluLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaW4ubGVuZ3RoOyArK2kpIHtcbiAgICAgIGFycltpXSA9IGJpbi5jaGFyQ29kZUF0KGkpO1xuICAgIH1cbiAgICByZXR1cm4gYXJyO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2U2NEZyb21CeXRlcyhhcnI6IFVpbnQ4QXJyYXkpOiBzdHJpbmcge1xuICBpZiAodHNQcm90b0dsb2JhbFRoaXMuQnVmZmVyKSB7XG4gICAgcmV0dXJuIHRzUHJvdG9HbG9iYWxUaGlzLkJ1ZmZlci5mcm9tKGFycikudG9TdHJpbmcoXCJiYXNlNjRcIik7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYmluOiBzdHJpbmdbXSA9IFtdO1xuICAgIGFyci5mb3JFYWNoKChieXRlKSA9PiB7XG4gICAgICBiaW4ucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGUpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdHNQcm90b0dsb2JhbFRoaXMuYnRvYShiaW4uam9pbihcIlwiKSk7XG4gIH1cbn1cblxudHlwZSBCdWlsdGluID0gRGF0ZSB8IEZ1bmN0aW9uIHwgVWludDhBcnJheSB8IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbmV4cG9ydCB0eXBlIERlZXBQYXJ0aWFsPFQ+ID0gVCBleHRlbmRzIEJ1aWx0aW4gPyBUXG4gIDogVCBleHRlbmRzIEFycmF5PGluZmVyIFU+ID8gQXJyYXk8RGVlcFBhcnRpYWw8VT4+IDogVCBleHRlbmRzIFJlYWRvbmx5QXJyYXk8aW5mZXIgVT4gPyBSZWFkb25seUFycmF5PERlZXBQYXJ0aWFsPFU+PlxuICA6IFQgZXh0ZW5kcyB7ICRjYXNlOiBzdHJpbmcgfSA/IHsgW0sgaW4ga2V5b2YgT21pdDxULCBcIiRjYXNlXCI+XT86IERlZXBQYXJ0aWFsPFRbS10+IH0gJiB7ICRjYXNlOiBUW1wiJGNhc2VcIl0gfVxuICA6IFQgZXh0ZW5kcyB7fSA/IHsgW0sgaW4ga2V5b2YgVF0/OiBEZWVwUGFydGlhbDxUW0tdPiB9XG4gIDogUGFydGlhbDxUPjtcblxuZnVuY3Rpb24gbG9uZ1RvTnVtYmVyKGxvbmc6IExvbmcpOiBudW1iZXIge1xuICBpZiAobG9uZy5ndChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikpIHtcbiAgICB0aHJvdyBuZXcgdHNQcm90b0dsb2JhbFRoaXMuRXJyb3IoXCJWYWx1ZSBpcyBsYXJnZXIgdGhhbiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlwiKTtcbiAgfVxuICByZXR1cm4gbG9uZy50b051bWJlcigpO1xufVxuXG5pZiAoX20wLnV0aWwuTG9uZyAhPT0gTG9uZykge1xuICBfbTAudXRpbC5Mb25nID0gTG9uZyBhcyBhbnk7XG4gIF9tMC5jb25maWd1cmUoKTtcbn1cblxuZnVuY3Rpb24gaXNTZXQodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZDtcbn1cbiJdfQ==
|
|
3705
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb3RvLW1vZGVscy9nb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsb0JBQW9CO0FBQ3BCLGdEQUF3QjtBQUN4QixpRUFBcUM7QUFFeEIsUUFBQSxlQUFlLEdBQUcsaUJBQWlCLENBQUM7QUF1S2pELElBQVkseUJBeUNYO0FBekNELFdBQVkseUJBQXlCO0lBQ25DOzs7T0FHRztJQUNILHVGQUFlLENBQUE7SUFDZixxRkFBYyxDQUFBO0lBQ2Q7OztPQUdHO0lBQ0gscUZBQWMsQ0FBQTtJQUNkLHVGQUFlLENBQUE7SUFDZjs7O09BR0c7SUFDSCxxRkFBYyxDQUFBO0lBQ2QseUZBQWdCLENBQUE7SUFDaEIseUZBQWdCLENBQUE7SUFDaEIsbUZBQWEsQ0FBQTtJQUNiLHVGQUFlLENBQUE7SUFDZjs7Ozs7T0FLRztJQUNILHNGQUFlLENBQUE7SUFDZixpREFBaUQ7SUFDakQsMEZBQWlCLENBQUE7SUFDakIscUNBQXFDO0lBQ3JDLHNGQUFlLENBQUE7SUFDZix3RkFBZ0IsQ0FBQTtJQUNoQixvRkFBYyxDQUFBO0lBQ2QsNEZBQWtCLENBQUE7SUFDbEIsNEZBQWtCLENBQUE7SUFDbEIsMENBQTBDO0lBQzFDLHdGQUFnQixDQUFBO0lBQ2hCLDBDQUEwQztJQUMxQyx3RkFBZ0IsQ0FBQTtBQUNsQixDQUFDLEVBekNXLHlCQUF5QixHQUF6QixpQ0FBeUIsS0FBekIsaUNBQXlCLFFBeUNwQztBQUVELFNBQWdCLGlDQUFpQyxDQUFDLE1BQVc7SUFDM0QsUUFBUSxNQUFNLEVBQUU7UUFDZCxLQUFLLENBQUMsQ0FBQztRQUNQLEtBQUssYUFBYTtZQUNoQixPQUFPLHlCQUF5QixDQUFDLFdBQVcsQ0FBQztRQUMvQyxLQUFLLENBQUMsQ0FBQztRQUNQLEtBQUssWUFBWTtZQUNmLE9BQU8seUJBQXlCLENBQUMsVUFB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QUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7WUFDN0QsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3RSxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztZQUN2RCxjQUFjLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztZQUNyRixVQUFVLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztZQUN6RSxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztZQUN2RCxXQUFXLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztZQUM1RSxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsb0NBQW9DLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9GLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMs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WUFBWSxDQUFDLElBQVU7SUFDOUIsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1FBQ3BDLE1BQU0sSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztLQUNuRjtJQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3pCLENBQUM7QUFFRCxJQUFJLGlCQUFHLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxjQUFJLEVBQUU7SUFDMUIsaUJBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLGNBQVcsQ0FBQztJQUM1QixpQkFBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO0NBQ2pCO0FBRUQsU0FBUyxLQUFLLENBQUMsS0FBVTtJQUN2QixPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsQ0FBQztBQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBMb25nIGZyb20gXCJsb25nXCI7XG5pbXBvcnQgX20wIGZyb20gXCJwcm90b2J1ZmpzL21pbmltYWxcIjtcblxuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9IFwiZ29vZ2xlLnByb3RvYnVmXCI7XG5cbi8qKlxuICogVGhlIHByb3RvY29sIGNvbXBpbGVyIGNhbiBvdXRwdXQgYSBGaWxlRGVzY3JpcHRvclNldCBjb250YWluaW5nIHRoZSAucHJvdG9cbiAqIGZpbGVzIGl0IHBhcnNlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlRGVzY3JpcHRvclNldCB7XG4gIGZpbGU6IEZpbGVEZXNjcmlwdG9yUHJvdG9bXTtcbn1cblxuLyoqIERlc2NyaWJlcyBhIGNvbXBsZXRlIC5wcm90byBmaWxlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlRGVzY3JpcHRvclByb3RvIHtcbiAgLyoqIGZpbGUgbmFtZSwgcmVsYXRpdmUgdG8gcm9vdCBvZiBzb3VyY2UgdHJlZSAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBlLmcuIFwiZm9vXCIsIFwiZm9vLmJhclwiLCBldGMuICovXG4gIHBhY2thZ2U6IHN0cmluZztcbiAgLyoqIE5hbWVzIG9mIGZpbGVzIGltcG9ydGVkIGJ5IHRoaXMgZmlsZS4gKi9cbiAgZGVwZW5kZW5jeTogc3RyaW5nW107XG4gIC8qKiBJbmRleGVzIG9mIHRoZSBwdWJsaWMgaW1wb3J0ZWQgZmlsZXMgaW4gdGhlIGRlcGVuZGVuY3kgbGlzdCBhYm92ZS4gKi9cbiAgcHVibGljRGVwZW5kZW5jeTogbnVtYmVyW107XG4gIC8qKlxuICAgKiBJbmRleGVzIG9mIHRoZSB3ZWFrIGltcG9ydGVkIGZpbGVzIGluIHRoZSBkZXBlbmRlbmN5IGxpc3QuXG4gICAqIEZvciBHb29nbGUtaW50ZXJuYWwgbWlncmF0aW9uIG9ubHkuIERvIG5vdCB1c2UuXG4gICAqL1xuICB3ZWFrRGVwZW5kZW5jeTogbnVtYmVyW107XG4gIC8qKiBBbGwgdG9wLWxldmVsIGRlZmluaXRpb25zIGluIHRoaXMgZmlsZS4gKi9cbiAgbWVzc2FnZVR5cGU6IERlc2NyaXB0b3JQcm90b1tdO1xuICBlbnVtVHlwZTogRW51bURlc2NyaXB0b3JQcm90b1tdO1xuICBzZXJ2aWNlOiBTZXJ2aWNlRGVzY3JpcHRvclByb3RvW107XG4gIGV4dGVuc2lvbjogRmllbGREZXNjcmlwdG9yUHJvdG9bXTtcbiAgb3B0aW9uczpcbiAgICB8IEZpbGVPcHRpb25zXG4gICAgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGlzIGZpZWxkIGNvbnRhaW5zIG9wdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcmlnaW5hbCBzb3VyY2UgY29kZS5cbiAgICogWW91IG1heSBzYWZlbHkgcmVtb3ZlIHRoaXMgZW50aXJlIGZpZWxkIHdpdGhvdXQgaGFybWluZyBydW50aW1lXG4gICAqIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGRlc2NyaXB0b3JzIC0tIHRoZSBpbmZvcm1hdGlvbiBpcyBuZWVkZWQgb25seSBieVxuICAgKiBkZXZlbG9wbWVudCB0b29scy5cbiAgICovXG4gIHNvdXJjZUNvZGVJbmZvOlxuICAgIHwgU291cmNlQ29kZUluZm9cbiAgICB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFRoZSBzeW50YXggb2YgdGhlIHByb3RvIGZpbGUuXG4gICAqIFRoZSBzdXBwb3J0ZWQgdmFsdWVzIGFyZSBcInByb3RvMlwiLCBcInByb3RvM1wiLCBhbmQgXCJlZGl0aW9uc1wiLlxuICAgKlxuICAgKiBJZiBgZWRpdGlvbmAgaXMgcHJlc2VudCwgdGhpcyB2YWx1ZSBtdXN0IGJlIFwiZWRpdGlvbnNcIi5cbiAgICovXG4gIHN5bnRheDogc3RyaW5nO1xuICAvKiogVGhlIGVkaXRpb24gb2YgdGhlIHByb3RvIGZpbGUsIHdoaWNoIGlzIGFuIG9wYXF1ZSBzdHJpbmcuICovXG4gIGVkaXRpb246IHN0cmluZztcbn1cblxuLyoqIERlc2NyaWJlcyBhIG1lc3NhZ2UgdHlwZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVzY3JpcHRvclByb3RvIHtcbiAgbmFtZTogc3RyaW5nO1xuICBmaWVsZDogRmllbGREZXNjcmlwdG9yUHJvdG9bXTtcbiAgZXh0ZW5zaW9uOiBGaWVsZERlc2NyaXB0b3JQcm90b1tdO1xuICBuZXN0ZWRUeXBlOiBEZXNjcmlwdG9yUHJvdG9bXTtcbiAgZW51bVR5cGU6IEVudW1EZXNjcmlwdG9yUHJvdG9bXTtcbiAgZXh0ZW5zaW9uUmFuZ2U6IERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZVtdO1xuICBvbmVvZkRlY2w6IE9uZW9mRGVzY3JpcHRvclByb3RvW107XG4gIG9wdGlvbnM6IE1lc3NhZ2VPcHRpb25zIHwgdW5kZWZpbmVkO1xuICByZXNlcnZlZFJhbmdlOiBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZVtdO1xuICAvKipcbiAgICogUmVzZXJ2ZWQgZmllbGQgbmFtZXMsIHdoaWNoIG1heSBub3QgYmUgdXNlZCBieSBmaWVsZHMgaW4gdGhlIHNhbWUgbWVzc2FnZS5cbiAgICogQSBnaXZlbiBuYW1lIG1heSBvbmx5IGJlIHJlc2VydmVkIG9uY2UuXG4gICAqL1xuICByZXNlcnZlZE5hbWU6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSB7XG4gIC8qKiBJbmNsdXNpdmUuICovXG4gIHN0YXJ0OiBudW1iZXI7XG4gIC8qKiBFeGNsdXNpdmUuICovXG4gIGVuZDogbnVtYmVyO1xuICBvcHRpb25zOiBFeHRlbnNpb25SYW5nZU9wdGlvbnMgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmFuZ2Ugb2YgcmVzZXJ2ZWQgdGFnIG51bWJlcnMuIFJlc2VydmVkIHRhZyBudW1iZXJzIG1heSBub3QgYmUgdXNlZCBieVxuICogZmllbGRzIG9yIGV4dGVuc2lvbiByYW5nZXMgaW4gdGhlIHNhbWUgbWVzc2FnZS4gUmVzZXJ2ZWQgcmFuZ2VzIG1heVxuICogbm90IG92ZXJsYXAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2Uge1xuICAvKiogSW5jbHVzaXZlLiAqL1xuICBzdGFydDogbnVtYmVyO1xuICAvKiogRXhjbHVzaXZlLiAqL1xuICBlbmQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHRlbnNpb25SYW5nZU9wdGlvbnMge1xuICAvKiogVGhlIHBhcnNlciBzdG9yZXMgb3B0aW9ucyBpdCBkb2Vzbid0IHJlY29nbml6ZSBoZXJlLiBTZWUgYWJvdmUuICovXG4gIHVuaW50ZXJwcmV0ZWRPcHRpb246IFVuaW50ZXJwcmV0ZWRPcHRpb25bXTtcbn1cblxuLyoqIERlc2NyaWJlcyBhIGZpZWxkIHdpdGhpbiBhIG1lc3NhZ2UuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkRGVzY3JpcHRvclByb3RvIHtcbiAgbmFtZTogc3RyaW5nO1xuICBudW1iZXI6IG51bWJlcjtcbiAgbGFiZWw6IEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsO1xuICAvKipcbiAgICogSWYgdHlwZV9uYW1lIGlzIHNldCwgdGhpcyBuZWVkIG5vdCBiZSBzZXQuICBJZiBib3RoIHRoaXMgYW5kIHR5cGVfbmFtZVxuICAgKiBhcmUgc2V0LCB0aGlzIG11c3QgYmUgb25lIG9mIFRZUEVfRU5VTSwgVFlQRV9NRVNTQUdFIG9yIFRZUEVfR1JPVVAuXG4gICAqL1xuICB0eXBlOiBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlO1xuICAvKipcbiAgICogRm9yIG1lc3NhZ2UgYW5kIGVudW0gdHlwZXMsIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIHR5cGUuICBJZiB0aGUgbmFtZVxuICAgKiBzdGFydHMgd2l0aCBhICcuJywgaXQgaXMgZnVsbHktcXVhbGlmaWVkLiAgT3RoZXJ3aXNlLCBDKystbGlrZSBzY29waW5nXG4gICAqIHJ1bGVzIGFyZSB1c2VkIHRvIGZpbmQgdGhlIHR5cGUgKGkuZS4gZmlyc3QgdGhlIG5lc3RlZCB0eXBlcyB3aXRoaW4gdGhpc1xuICAgKiBtZXNzYWdlIGFyZSBzZWFyY2hlZCwgdGhlbiB3aXRoaW4gdGhlIHBhcmVudCwgb24gdXAgdG8gdGhlIHJvb3RcbiAgICogbmFtZXNwYWNlKS5cbiAgICovXG4gIHR5cGVOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGb3IgZXh0ZW5zaW9ucywgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgdHlwZSBiZWluZyBleHRlbmRlZC4gIEl0IGlzXG4gICAqIHJlc29sdmVkIGluIHRoZSBzYW1lIG1hbm5lciBhcyB0eXBlX25hbWUuXG4gICAqL1xuICBleHRlbmRlZTogc3RyaW5nO1xuICAvKipcbiAgICogRm9yIG51bWVyaWMgdHlwZXMsIGNvbnRhaW5zIHRoZSBvcmlnaW5hbCB0ZXh0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZS5cbiAgICogRm9yIGJvb2xlYW5zLCBcInRydWVcIiBvciBcImZhbHNlXCIuXG4gICAqIEZvciBzdHJpbmdzLCBjb250YWlucyB0aGUgZGVmYXVsdCB0ZXh0IGNvbnRlbnRzIChub3QgZXNjYXBlZCBpbiBhbnkgd2F5KS5cbiAgICogRm9yIGJ5dGVzLCBjb250YWlucyB0aGUgQyBlc2NhcGVkIHZhbHVlLiAgQWxsIGJ5dGVzID49IDEyOCBhcmUgZXNjYXBlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogc3RyaW5nO1xuICAvKipcbiAgICogSWYgc2V0LCBnaXZlcyB0aGUgaW5kZXggb2YgYSBvbmVvZiBpbiB0aGUgY29udGFpbmluZyB0eXBlJ3Mgb25lb2ZfZGVjbFxuICAgKiBsaXN0LiAgVGhpcyBmaWVsZCBpcyBhIG1lbWJlciBvZiB0aGF0IG9uZW9mLlxuICAgKi9cbiAgb25lb2ZJbmRleDogbnVtYmVyO1xuICAvKipcbiAgICogSlNPTiBuYW1lIG9mIHRoaXMgZmllbGQuIFRoZSB2YWx1ZSBpcyBzZXQgYnkgcHJvdG9jb2wgY29tcGlsZXIuIElmIHRoZVxuICAgKiB1c2VyIGhhcyBzZXQgYSBcImpzb25fbmFtZVwiIG9wdGlvbiBvbiB0aGlzIGZpZWxkLCB0aGF0IG9wdGlvbidzIHZhbHVlXG4gICAqIHdpbGwgYmUgdXNlZC4gT3RoZXJ3aXNlLCBpdCdzIGRlZHVjZWQgZnJvbSB0aGUgZmllbGQncyBuYW1lIGJ5IGNvbnZlcnRpbmdcbiAgICogaXQgdG8gY2FtZWxDYXNlLlxuICAgKi9cbiAganNvbk5hbWU6IHN0cmluZztcbiAgb3B0aW9uczpcbiAgICB8IEZpZWxkT3B0aW9uc1xuICAgIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogSWYgdHJ1ZSwgdGhpcyBpcyBhIHByb3RvMyBcIm9wdGlvbmFsXCIuIFdoZW4gYSBwcm90bzMgZmllbGQgaXMgb3B0aW9uYWwsIGl0XG4gICAqIHRyYWNrcyBwcmVzZW5jZSByZWdhcmRsZXNzIG9mIGZpZWxkIHR5cGUuXG4gICAqXG4gICAqIFdoZW4gcHJvdG8zX29wdGlvbmFsIGlzIHRydWUsIHRoaXMgZmllbGQgbXVzdCBiZSBiZWxvbmcgdG8gYSBvbmVvZiB0b1xuICAgKiBzaWduYWwgdG8gb2xkIHByb3RvMyBjbGllbnRzIHRoYXQgcHJlc2VuY2UgaXMgdHJhY2tlZCBmb3IgdGhpcyBmaWVsZC4gVGhpc1xuICAgKiBvbmVvZiBpcyBrbm93biBhcyBhIFwic3ludGhldGljXCIgb25lb2YsIGFuZCB0aGlzIGZpZWxkIG11c3QgYmUgaXRzIHNvbGVcbiAgICogbWVtYmVyIChlYWNoIHByb3RvMyBvcHRpb25hbCBmaWVsZCBnZXRzIGl0cyBvd24gc3ludGhldGljIG9uZW9mKS4gU3ludGhldGljXG4gICAqIG9uZW9mcyBleGlzdCBpbiB0aGUgZGVzY3JpcHRvciBvbmx5LCBhbmQgZG8gbm90IGdlbmVyYXRlIGFueSBBUEkuIFN5bnRoZXRpY1xuICAgKiBvbmVvZnMgbXVzdCBiZSBvcmRlcmVkIGFmdGVyIGFsbCBcInJlYWxcIiBvbmVvZnMuXG4gICAqXG4gICAqIEZvciBtZXNzYWdlIGZpZWxkcywgcHJvdG8zX29wdGlvbmFsIGRvZXNuJ3QgY3JlYXRlIGFueSBzZW1hbnRpYyBjaGFuZ2UsXG4gICAqIHNpbmNlIG5vbi1yZXBlYXRlZCBtZXNzYWdlIGZpZWxkcyBhbHdheXMgdHJhY2sgcHJlc2VuY2UuIEhvd2V2ZXIgaXQgc3RpbGxcbiAgICogaW5kaWNhdGVzIHRoZSBzZW1hbnRpYyBkZXRhaWwgb2Ygd2hldGhlciB0aGUgdXNlciB3cm90ZSBcIm9wdGlvbmFsXCIgb3Igbm90LlxuICAgKiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIHJvdW5kLXRyaXBwaW5nIHRoZSAucHJvdG8gZmlsZS4gRm9yIGNvbnNpc3RlbmN5IHdlXG4gICAqIGdpdmUgbWVzc2FnZSBmaWVsZHMgYSBzeW50aGV0aWMgb25lb2YgYWxzbywgZXZlbiB0aG91Z2ggaXQgaXMgbm90IHJlcXVpcmVkXG4gICAqIHRvIHRyYWNrIHByZXNlbmNlLiBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGJlY2F1c2UgdGhlIHBhcnNlciBjYW4ndFxuICAgKiB0ZWxsIGlmIGEgZmllbGQgaXMgYSBtZXNzYWdlIG9yIGFuIGVudW0sIHNvIGl0IG11c3QgYWx3YXlzIGNyZWF0ZSBhXG4gICAqIHN5bnRoZXRpYyBvbmVvZi5cbiAgICpcbiAgICogUHJvdG8yIG9wdGlvbmFsIGZpZWxkcyBkbyBub3Qgc2V0IHRoaXMgZmxhZywgYmVjYXVzZSB0aGV5IGFscmVhZHkgaW5kaWNhdGVcbiAgICogb3B0aW9uYWwgd2l0aCBgTEFCRUxfT1BUSU9OQUxgLlxuICAgKi9cbiAgcHJvdG8zT3B0aW9uYWw6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBlbnVtIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUge1xuICAvKipcbiAgICogVFlQRV9ET1VCTEUgLSAwIGlzIHJlc2VydmVkIGZvciBlcnJvcnMuXG4gICAqIE9yZGVyIGlzIHdlaXJkIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMuXG4gICAqL1xuICBUWVBFX0RPVUJMRSA9IDEsXG4gIFRZUEVfRkxPQVQgPSAyLFxuICAvKipcbiAgICogVFlQRV9JTlQ2NCAtIE5vdCBaaWdaYWcgZW5jb2RlZC4gIE5lZ2F0aXZlIG51bWJlcnMgdGFrZSAxMCBieXRlcy4gIFVzZSBUWVBFX1NJTlQ2NCBpZlxuICAgKiBuZWdhdGl2ZSB2YWx1ZXMgYXJlIGxpa2VseS5cbiAgICovXG4gIFRZUEVfSU5UNjQgPSAzLFxuICBUWVBFX1VJTlQ2NCA9IDQsXG4gIC8qKlxuICAgKiBUWVBFX0lOVDMyIC0gTm90IFppZ1phZyBlbmNvZGVkLiAgTmVnYXRpdmUgbnVtYmVycyB0YWtlIDEwIGJ5dGVzLiAgVXNlIFRZUEVfU0lOVDMyIGlmXG4gICAqIG5lZ2F0aXZlIHZhbHVlcyBhcmUgbGlrZWx5LlxuICAgKi9cbiAgVFlQRV9JTlQzMiA9IDUsXG4gIFRZUEVfRklYRUQ2NCA9IDYsXG4gIFRZUEVfRklYRUQzMiA9IDcsXG4gIFRZUEVfQk9PTCA9IDgsXG4gIFRZUEVfU1RSSU5HID0gOSxcbiAgLyoqXG4gICAqIFRZUEVfR1JPVVAgLSBUYWctZGVsaW1pdGVkIGFnZ3JlZ2F0ZS5cbiAgICogR3JvdXAgdHlwZSBpcyBkZXByZWNhdGVkIGFuZCBub3Qgc3VwcG9ydGVkIGluIHByb3RvMy4gSG93ZXZlciwgUHJvdG8zXG4gICAqIGltcGxlbWVudGF0aW9ucyBzaG91bGQgc3RpbGwgYmUgYWJsZSB0byBwYXJzZSB0aGUgZ3JvdXAgd2lyZSBmb3JtYXQgYW5kXG4gICAqIHRyZWF0IGdyb3VwIGZpZWxkcyBhcyB1bmtub3duIGZpZWxkcy5cbiAgICovXG4gIFRZUEVfR1JPVVAgPSAxMCxcbiAgLyoqIFRZUEVfTUVTU0FHRSAtIExlbmd0aC1kZWxpbWl0ZWQgYWdncmVnYXRlLiAqL1xuICBUWVBFX01FU1NBR0UgPSAxMSxcbiAgLyoqIFRZUEVfQllURVMgLSBOZXcgaW4gdmVyc2lvbiAyLiAqL1xuICBUWVBFX0JZVEVTID0gMTIsXG4gIFRZUEVfVUlOVDMyID0gMTMsXG4gIFRZUEVfRU5VTSA9IDE0LFxuICBUWVBFX1NGSVhFRDMyID0gMTUsXG4gIFRZUEVfU0ZJWEVENjQgPSAxNixcbiAgLyoqIFRZUEVfU0lOVDMyIC0gVXNlcyBaaWdaYWcgZW5jb2RpbmcuICovXG4gIFRZUEVfU0lOVDMyID0gMTcsXG4gIC8qKiBUWVBFX1NJTlQ2NCAtIFVzZXMgWmlnWmFnIGVuY29kaW5nLiAqL1xuICBUWVBFX1NJTlQ2NCA9IDE4LFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZUZyb21KU09OKG9iamVjdDogYW55KTogRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZSB7XG4gIHN3aXRjaCAob2JqZWN0KSB7XG4gICAgY2FzZSAxOlxuICAgIGNhc2UgXCJUWVBFX0RPVUJMRVwiOlxuICAgICAgcmV0dXJuIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9ET1VCTEU7XG4gICAgY2FzZSAyOlxuICAgIGNhc2UgXCJUWVBFX0ZMT0FUXCI6XG4gICAgICByZXR1cm4gRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX0ZMT0FUO1xuICAgIGNhc2UgMzpcbiAgICBjYXNlIFwiVFlQRV9JTlQ2NFwiOlxuICAgICAgcmV0dXJuIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9JTlQ2NDtcbiAgICBjYXNlIDQ6XG4gICAgY2FzZSBcIlRZUEVfVUlOVDY0XCI6XG4gICAgICByZXR1cm4gRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX1VJTlQ2NDtcbiAgICBjYXNlIDU6XG4gICAgY2FzZSBcIlRZUEVfSU5UMzJcIjpcbiAgICAgIHJldHVybiBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfSU5UMzI7XG4gICAgY2FzZSA2OlxuICAgIGNhc2UgXCJUWVBFX0ZJWEVENjRcIjpcbiAgICAgIHJldHVybiBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfRklYRUQ2NDtcbiAgICBjYXNlIDc6XG4gICAgY2FzZSBcIlRZUEVfRklYRUQzMlwiOlxuICAgICAgcmV0dXJuIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9GSVhFRDMyO1xuICAgIGNhc2UgODpcbiAgICBjYXNlIFwiVFlQRV9CT09MXCI6XG4gICAgICByZXR1cm4gRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX0JPT0w7XG4gICAgY2FzZSA5OlxuICAgIGNhc2UgXCJUWVBFX1NUUklOR1wiOlxuICAgICAgcmV0dXJuIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9TVFJJTkc7XG4gICAgY2FzZSAxMDpcbiAgICBjYXNlIFwiVFlQRV9HUk9VUFwiOlxuICAgICAgcmV0dXJuIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9HUk9VUDtcbiAgICBjYXNlIDExOlxuICAgIGNhc2UgXCJUWVBFX01FU1NBR0VcIjpcbiAgICAgIHJldHVybiBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfTUVTU0FHRTtcbiAgICBjYXNlIDEyOlxuICAgIGNhc2UgXCJUWVBFX0JZVEVTXCI6XG4gICAgICByZXR1cm4gRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX0JZVEVTO1xuICAgIGNhc2UgMTM6XG4gICAgY2FzZSBcIlRZUEVfVUlOVDMyXCI6XG4gICAgICByZXR1cm4gRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX1VJTlQzMjtcbiAgICBjYXNlIDE0OlxuICAgIGNhc2UgXCJUWVBFX0VOVU1cIjpcbiAgICAgIHJldHVybiBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfRU5VTTtcbiAgICBjYXNlIDE1OlxuICAgIGNhc2UgXCJUWVBFX1NGSVhFRDMyXCI6XG4gICAgICByZXR1cm4gRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX1NGSVhFRDMyO1xuICAgIGNhc2UgMTY6XG4gICAgY2FzZSBcIlRZUEVfU0ZJWEVENjRcIjpcbiAgICAgIHJldHVybiBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfU0ZJWEVENjQ7XG4gICAgY2FzZSAxNzpcbiAgICBjYXNlIFwiVFlQRV9TSU5UMzJcIjpcbiAgICAgIHJldHVybiBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfU0lOVDMyO1xuICAgIGNhc2UgMTg6XG4gICAgY2FzZSBcIlRZUEVfU0lOVDY0XCI6XG4gICAgICByZXR1cm4gRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX1NJTlQ2NDtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IHRzUHJvdG9HbG9iYWxUaGlzLkVycm9yKFwiVW5yZWNvZ25pemVkIGVudW0gdmFsdWUgXCIgKyBvYmplY3QgKyBcIiBmb3IgZW51bSBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlXCIpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWVsZERlc2NyaXB0b3JQcm90b19UeXBlVG9KU09OKG9iamVjdDogRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZSk6IHN0cmluZyB7XG4gIHN3aXRjaCAob2JqZWN0KSB7XG4gICAgY2FzZSBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfRE9VQkxFOlxuICAgICAgcmV0dXJuIFwiVFlQRV9ET1VCTEVcIjtcbiAgICBjYXNlIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9GTE9BVDpcbiAgICAgIHJldHVybiBcIlRZUEVfRkxPQVRcIjtcbiAgICBjYXNlIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9JTlQ2NDpcbiAgICAgIHJldHVybiBcIlRZUEVfSU5UNjRcIjtcbiAgICBjYXNlIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9VSU5UNjQ6XG4gICAgICByZXR1cm4gXCJUWVBFX1VJTlQ2NFwiO1xuICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX0lOVDMyOlxuICAgICAgcmV0dXJuIFwiVFlQRV9JTlQzMlwiO1xuICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX0ZJWEVENjQ6XG4gICAgICByZXR1cm4gXCJUWVBFX0ZJWEVENjRcIjtcbiAgICBjYXNlIEZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGUuVFlQRV9GSVhFRDMyOlxuICAgICAgcmV0dXJuIFwiVFlQRV9GSVhFRDMyXCI7XG4gICAgY2FzZSBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfQk9PTDpcbiAgICAgIHJldHVybiBcIlRZUEVfQk9PTFwiO1xuICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX1NUUklORzpcbiAgICAgIHJldHVybiBcIlRZUEVfU1RSSU5HXCI7XG4gICAgY2FzZSBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfR1JPVVA6XG4gICAgICByZXR1cm4gXCJUWVBFX0dST1VQXCI7XG4gICAgY2FzZSBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfTUVTU0FHRTpcbiAgICAgIHJldHVybiBcIlRZUEVfTUVTU0FHRVwiO1xuICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX0JZVEVTOlxuICAgICAgcmV0dXJuIFwiVFlQRV9CWVRFU1wiO1xuICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX1VJTlQzMjpcbiAgICAgIHJldHVybiBcIlRZUEVfVUlOVDMyXCI7XG4gICAgY2FzZSBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfRU5VTTpcbiAgICAgIHJldHVybiBcIlRZUEVfRU5VTVwiO1xuICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX1NGSVhFRDMyOlxuICAgICAgcmV0dXJuIFwiVFlQRV9TRklYRUQzMlwiO1xuICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX1NGSVhFRDY0OlxuICAgICAgcmV0dXJuIFwiVFlQRV9TRklYRUQ2NFwiO1xuICAgIGNhc2UgRmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZS5UWVBFX1NJTlQzMjpcbiAgICAgIHJldHVybiBcIlRZUEVfU0lOVDMyXCI7XG4gICAgY2FzZSBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlLlRZUEVfU0lOVDY0OlxuICAgICAgcmV0dXJuIFwiVFlQRV9TSU5UNjRcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IHRzUHJvdG9HbG9iYWxUaGlzLkVycm9yKFwiVW5yZWNvZ25pemVkIGVudW0gdmFsdWUgXCIgKyBvYmplY3QgKyBcIiBmb3IgZW51bSBGaWVsZERlc2NyaXB0b3JQcm90b19UeXBlXCIpO1xuICB9XG59XG5cbmV4cG9ydCBlbnVtIEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsIHtcbiAgLyoqIExBQkVMX09QVElPTkFMIC0gMCBpcyByZXNlcnZlZCBmb3IgZXJyb3JzICovXG4gIExBQkVMX09QVElPTkFMID0gMSxcbiAgTEFCRUxfUkVRVUlSRUQgPSAyLFxuICBMQUJFTF9SRVBFQVRFRCA9IDMsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWVsZERlc2NyaXB0b3JQcm90b19MYWJlbEZyb21KU09OKG9iamVjdDogYW55KTogRmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWwge1xuICBzd2l0Y2ggKG9iamVjdCkge1xuICAgIGNhc2UgMTpcbiAgICBjYXNlIFwiTEFCRUxfT1BUSU9OQUxcIjpcbiAgICAgIHJldHVybiBGaWVsZERlc2NyaXB0b3JQcm90b19MYWJlbC5MQUJFTF9PUFRJT05BTDtcbiAgICBjYXNlIDI6XG4gICAgY2FzZSBcIkxBQkVMX1JFUVVJUkVEXCI6XG4gICAgICByZXR1cm4gRmllbGREZXNjcmlwdG9yUHJvdG9fTGFiZWwuTEFCRUxfUkVRVUlSRUQ7XG4gICAgY2FzZSAzOlxuICAgIGNhc2UgXCJMQUJFTF9SRVBFQVRFRFwiOlxuICAgICAgcmV0dXJuIEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsLkxBQkVMX1JFUEVBVEVEO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgdHNQcm90b0dsb2JhbFRoaXMuRXJyb3IoXCJVbnJlY29nbml6ZWQgZW51bSB2YWx1ZSBcIiArIG9iamVjdCArIFwiIGZvciBlbnVtIEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsXCIpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWVsZERlc2NyaXB0b3JQcm90b19MYWJlbFRvSlNPTihvYmplY3Q6IEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsKTogc3RyaW5nIHtcbiAgc3dpdGNoIChvYmplY3QpIHtcbiAgICBjYXNlIEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsLkxBQkVMX09QVElPTkFMOlxuICAgICAgcmV0dXJuIFwiTEFCRUxfT1BUSU9OQUxcIjtcbiAgICBjYXNlIEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsLkxBQkVMX1JFUVVJUkVEOlxuICAgICAgcmV0dXJuIFwiTEFCRUxfUkVRVUlSRURcIjtcbiAgICBjYXNlIEZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsLkxBQkVMX1JFUEVBVEVEOlxuICAgICAgcmV0dXJuIFwiTEFCRUxfUkVQRUFURURcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IHRzUHJvdG9HbG9iYWxUaGlzLkVycm9yKFwiVW5yZWNvZ25pemVkIGVudW0gdmFsdWUgXCIgKyBvYmplY3QgKyBcIiBmb3IgZW51bSBGaWVsZERlc2NyaXB0b3JQcm90b19MYWJlbFwiKTtcbiAgfVxufVxuXG4vKiogRGVzY3JpYmVzIGEgb25lb2YuICovXG5leHBvcnQgaW50ZXJmYWNlIE9uZW9mRGVzY3JpcHRvclByb3RvIHtcbiAgbmFtZTogc3RyaW5nO1xuICBvcHRpb25zOiBPbmVvZk9wdGlvbnMgfCB1bmRlZmluZWQ7XG59XG5cbi8qKiBEZXNjcmliZXMgYW4gZW51bSB0eXBlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnVtRGVzY3JpcHRvclByb3RvIHtcbiAgbmFtZTogc3RyaW5nO1xuICB2YWx1ZTogRW51bVZhbHVlRGVzY3JpcHRvclByb3RvW107XG4gIG9wdGlvbnM6XG4gICAgfCBFbnVtT3B0aW9uc1xuICAgIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogUmFuZ2Ugb2YgcmVzZXJ2ZWQgbnVtZXJpYyB2YWx1ZXMuIFJlc2VydmVkIG51bWVyaWMgdmFsdWVzIG1heSBub3QgYmUgdXNlZFxuICAgKiBieSBlbnVtIHZhbHVlcyBpbiB0aGUgc2FtZSBlbnVtIGRlY2xhcmF0aW9uLiBSZXNlcnZlZCByYW5nZXMgbWF5IG5vdFxuICAgKiBvdmVybGFwLlxuICAgKi9cbiAgcmVzZXJ2ZWRSYW5nZTogRW51bURlc2NyaXB0b3JQcm90b19FbnVtUmVzZXJ2ZWRSYW5nZVtdO1xuICAvKipcbiAgICogUmVzZXJ2ZWQgZW51bSB2YWx1ZSBuYW1lcywgd2hpY2ggbWF5IG5vdCBiZSByZXVzZWQuIEEgZ2l2ZW4gbmFtZSBtYXkgb25seVxuICAgKiBiZSByZXNlcnZlZCBvbmNlLlxuICAgKi9cbiAgcmVzZXJ2ZWROYW1lOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBSYW5nZSBvZiByZXNlcnZlZCBudW1lcmljIHZhbHVlcy4gUmVzZXJ2ZWQgdmFsdWVzIG1heSBub3QgYmUgdXNlZCBieVxuICogZW50cmllcyBpbiB0aGUgc2FtZSBlbnVtLiBSZXNlcnZlZCByYW5nZXMgbWF5IG5vdCBvdmVybGFwLlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIGlzIGRpc3RpbmN0IGZyb20gRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2UgaW4gdGhhdCBpdFxuICogaXMgaW5jbHVzaXZlIHN1Y2ggdGhhdCBpdCBjYW4gYXBwcm9wcmlhdGVseSByZXByZXNlbnQgdGhlIGVudGlyZSBpbnQzMlxuICogZG9tYWluLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudW1EZXNjcmlwdG9yUHJvdG9fRW51bVJlc2VydmVkUmFuZ2Uge1xuICAvKiogSW5jbHVzaXZlLiAqL1xuICBzdGFydDogbnVtYmVyO1xuICAvKiogSW5jbHVzaXZlLiAqL1xuICBlbmQ6IG51bWJlcjtcbn1cblxuLyoqIERlc2NyaWJlcyBhIHZhbHVlIHdpdGhpbiBhbiBlbnVtLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ge1xuICBuYW1lOiBzdHJpbmc7XG4gIG51bWJlcjogbnVtYmVyO1xuICBvcHRpb25zOiBFbnVtVmFsdWVPcHRpb25zIHwgdW5kZWZpbmVkO1xufVxuXG4vKiogRGVzY3JpYmVzIGEgc2VydmljZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZURlc2NyaXB0b3JQcm90byB7XG4gIG5hbWU6IHN0cmluZztcbiAgbWV0aG9kOiBNZXRob2REZXNjcmlwdG9yUHJvdG9bXTtcbiAgb3B0aW9uczogU2VydmljZU9wdGlvbnMgfCB1bmRlZmluZWQ7XG59XG5cbi8qKiBEZXNjcmliZXMgYSBtZXRob2Qgb2YgYSBzZXJ2aWNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXRob2REZXNjcmlwdG9yUHJvdG8ge1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJbnB1dCBhbmQgb3V0cHV0IHR5cGUgbmFtZXMuICBUaGVzZSBhcmUgcmVzb2x2ZWQgaW4gdGhlIHNhbWUgd2F5IGFzXG4gICAqIEZpZWxkRGVzY3JpcHRvclByb3RvLnR5cGVfbmFtZSwgYnV0IG11c3QgcmVmZXIgdG8gYSBtZXNzYWdlIHR5cGUuXG4gICAqL1xuICBpbnB1dFR5cGU6IHN0cmluZztcbiAgb3V0cHV0VHlwZTogc3RyaW5nO1xuICBvcHRpb25zOlxuICAgIHwgTWV0aG9kT3B0aW9uc1xuICAgIHwgdW5kZWZpbmVkO1xuICAvKiogSWRlbnRpZmllcyBpZiBjbGllbnQgc3RyZWFtcyBtdWx0aXBsZSBjbGllbnQgbWVzc2FnZXMgKi9cbiAgY2xpZW50U3RyZWFtaW5nOiBib29sZWFuO1xuICAvKiogSWRlbnRpZmllcyBpZiBzZXJ2ZXIgc3RyZWFtcyBtdWx0aXBsZSBzZXJ2ZXIgbWVzc2FnZXMgKi9cbiAgc2VydmVyU3RyZWFtaW5nOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNldHMgdGhlIEphdmEgcGFja2FnZSB3aGVyZSBjbGFzc2VzIGdlbmVyYXRlZCBmcm9tIHRoaXMgLnByb3RvIHdpbGwgYmVcbiAgICogcGxhY2VkLiAgQnkgZGVmYXVsdCwgdGhlIHByb3RvIHBhY2thZ2UgaXMgdXNlZCwgYnV0IHRoaXMgaXMgb2Z0ZW5cbiAgICogaW5hcHByb3ByaWF0ZSBiZWNhdXNlIHByb3RvIHBhY2thZ2VzIGRvIG5vdCBub3JtYWxseSBzdGFydCB3aXRoIGJhY2t3YXJkc1xuICAgKiBkb21haW4gbmFtZXMuXG4gICAqL1xuICBqYXZhUGFja2FnZTogc3RyaW5nO1xuICAvKipcbiAgICogQ29udHJvbHMgdGhlIG5hbWUgb2YgdGhlIHdyYXBwZXIgSmF2YSBjbGFzcyBnZW5lcmF0ZWQgZm9yIHRoZSAucHJvdG8gZmlsZS5cbiAgICogVGhhdCBjbGFzcyB3aWxsIGFsd2F5cyBjb250YWluIHRoZSAucHJvdG8gZmlsZSdzIGdldERlc2NyaXB0b3IoKSBtZXRob2QgYXNcbiAgICogd2VsbCBhcyBhbnkgdG9wLWxldmVsIGV4dGVuc2lvbnMgZGVmaW5lZCBpbiB0aGUgLnByb3RvIGZpbGUuXG4gICAqIElmIGphdmFfbXVsdGlwbGVfZmlsZXMgaXMgZGlzYWJsZWQsIHRoZW4gYWxsIHRoZSBvdGhlciBjbGFzc2VzIGZyb20gdGhlXG4gICAqIC5wcm90byBmaWxlIHdpbGwgYmUgbmVzdGVkIGluc2lkZSB0aGUgc2luZ2xlIHdyYXBwZXIgb3V0ZXIgY2xhc3MuXG4gICAqL1xuICBqYXZhT3V0ZXJDbGFzc25hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIElmIGVuYWJsZWQsIHRoZW4gdGhlIEphdmEgY29kZSBnZW5lcmF0b3Igd2lsbCBnZW5lcmF0ZSBhIHNlcGFyYXRlIC5qYXZhXG4gICAqIGZpbGUgZm9yIGVhY2ggdG9wLWxldmVsIG1lc3NhZ2UsIGVudW0sIGFuZCBzZXJ2aWNlIGRlZmluZWQgaW4gdGhlIC5wcm90b1xuICAgKiBmaWxlLiAgVGh1cywgdGhlc2UgdHlwZXMgd2lsbCAqbm90KiBiZSBuZXN0ZWQgaW5zaWRlIHRoZSB3cmFwcGVyIGNsYXNzXG4gICAqIG5hbWVkIGJ5IGphdmFfb3V0ZXJfY2xhc3NuYW1lLiAgSG93ZXZlciwgdGhlIHdyYXBwZXIgY2xhc3Mgd2lsbCBzdGlsbCBiZVxuICAgKiBnZW5lcmF0ZWQgdG8gY29udGFpbiB0aGUgZmlsZSdzIGdldERlc2NyaXB0b3IoKSBtZXRob2QgYXMgd2VsbCBhcyBhbnlcbiAgICogdG9wLWxldmVsIGV4dGVuc2lvbnMgZGVmaW5lZCBpbiB0aGUgZmlsZS5cbiAgICovXG4gIGphdmFNdWx0aXBsZUZpbGVzOiBib29sZWFuO1xuICAvKipcbiAgICogVGhpcyBvcHRpb24gZG9lcyBub3RoaW5nLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgamF2YUdlbmVyYXRlRXF1YWxzQW5kSGFzaDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElmIHNldCB0cnVlLCB0aGVuIHRoZSBKYXZhMiBjb2RlIGdlbmVyYXRvciB3aWxsIGdlbmVyYXRlIGNvZGUgdGhhdFxuICAgKiB0aHJvd3MgYW4gZXhjZXB0aW9uIHdoZW5ldmVyIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBhc3NpZ24gYSBub24tVVRGLThcbiAgICogYnl0ZSBzZXF1ZW5jZSB0byBhIHN0cmluZyBmaWVsZC5cbiAgICogTWVzc2FnZSByZWZsZWN0aW9uIHdpbGwgZG8gdGhlIHNhbWUuXG4gICAqIEhvd2V2ZXIsIGFuIGV4dGVuc2lvbiBmaWVsZCBzdGlsbCBhY2NlcHRzIG5vbi1VVEYtOCBieXRlIHNlcXVlbmNlcy5cbiAgICogVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB3aGVuIHVzZWQgd2l0aCB0aGUgbGl0ZSBydW50aW1lLlxuICAgKi9cbiAgamF2YVN0cmluZ0NoZWNrVXRmODogYm9vbGVhbjtcbiAgb3B0aW1pemVGb3I6IEZpbGVPcHRpb25zX09wdGltaXplTW9kZTtcbiAgLyoqXG4gICAqIFNldHMgdGhlIEdvIHBhY2thZ2Ugd2hlcmUgc3RydWN0cyBnZW5lcmF0ZWQgZnJvbSB0aGlzIC5wcm90byB3aWxsIGJlXG4gICAqIHBsYWNlZC4gSWYgb21pdHRlZCwgdGhlIEdvIHBhY2thZ2Ugd2lsbCBiZSBkZXJpdmVkIGZyb20gdGhlIGZvbGxvd2luZzpcbiAgICogICAtIFRoZSBiYXNlbmFtZSBvZiB0aGUgcGFja2FnZSBpbXBvcnQgcGF0aCwgaWYgcHJvdmlkZWQuXG4gICAqICAgLSBPdGhlcndpc2UsIHRoZSBwYWNrYWdlIHN0YXRlbWVudCBpbiB0aGUgLnByb3RvIGZpbGUsIGlmIHByZXNlbnQuXG4gICAqICAgLSBPdGhlcndpc2UsIHRoZSBiYXNlbmFtZSBvZiB0aGUgLnByb3RvIGZpbGUsIHdpdGhvdXQgZXh0ZW5zaW9uLlxuICAgKi9cbiAgZ29QYWNrYWdlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTaG91bGQgZ2VuZXJpYyBzZXJ2aWNlcyBiZSBnZW5lcmF0ZWQgaW4gZWFjaCBsYW5ndWFnZT8gIFwiR2VuZXJpY1wiIHNlcnZpY2VzXG4gICAqIGFyZSBub3Qgc3BlY2lmaWMgdG8gYW55IHBhcnRpY3VsYXIgUlBDIHN5c3RlbS4gIFRoZXkgYXJlIGdlbmVyYXRlZCBieSB0aGVcbiAgICogbWFpbiBjb2RlIGdlbmVyYXRvcnMgaW4gZWFjaCBsYW5ndWFnZSAod2l0aG91dCBhZGRpdGlvbmFsIHBsdWdpbnMpLlxuICAgKiBHZW5lcmljIHNlcnZpY2VzIHdlcmUgdGhlIG9ubHkga2luZCBvZiBzZXJ2aWNlIGdlbmVyYXRpb24gc3VwcG9ydGVkIGJ5XG4gICAqIGVhcmx5IHZlcnNpb25zIG9mIGdvb2dsZS5wcm90b2J1Zi5cbiAgICpcbiAgICogR2VuZXJpYyBzZXJ2aWNlcyBhcmUgbm93IGNvbnNpZGVyZWQgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB1c2luZyBwbHVnaW5zXG4gICAqIHRoYXQgZ2VuZXJhdGUgY29kZSBzcGVjaWZpYyB0byB5b3VyIHBhcnRpY3VsYXIgUlBDIHN5c3RlbS4gIFRoZXJlZm9yZSxcbiAgICogdGhlc2UgZGVmYXVsdCB0byBmYWxzZS4gIE9sZCBjb2RlIHdoaWNoIGRlcGVuZHMgb24gZ2VuZXJpYyBzZXJ2aWNlcyBzaG91bGRcbiAgICogZXhwbGljaXRseSBzZXQgdGhlbSB0byB0cnVlLlxuICAgKi9cbiAgY2NHZW5lcmljU2VydmljZXM6IGJvb2xlYW47XG4gIGphdmFHZW5lcmljU2VydmljZXM6IGJvb2xlYW47XG4gIHB5R2VuZXJpY1NlcnZpY2VzOiBib29sZWFuO1xuICBwaHBHZW5lcmljU2VydmljZXM6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJcyB0aGlzIGZpbGUgZGVwcmVjYXRlZD9cbiAgICogRGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0sIHRoaXMgY2FuIGVtaXQgRGVwcmVjYXRlZCBhbm5vdGF0aW9uc1xuICAgKiBmb3IgZXZlcnl0aGluZyBpbiB0aGUgZmlsZSwgb3IgaXQgd2lsbCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQ7IGluIHRoZSB2ZXJ5XG4gICAqIGxlYXN0LCB0aGlzIGlzIGEgZm9ybWFsaXphdGlvbiBmb3IgZGVwcmVjYXRpbmcgZmlsZXMuXG4gICAqL1xuICBkZXByZWNhdGVkOiBib29sZWFuO1xuICAvKipcbiAgICogRW5hYmxlcyB0aGUgdXNlIG9mIGFyZW5hcyBmb3IgdGhlIHByb3RvIG1lc3NhZ2VzIGluIHRoaXMgZmlsZS4gVGhpcyBhcHBsaWVzXG4gICAqIG9ubHkgdG8gZ2VuZXJhdGVkIGNsYXNzZXMgZm9yIEMrKy5cbiAgICovXG4gIGNjRW5hYmxlQXJlbmFzOiBib29sZWFuO1xuICAvKipcbiAgICogU2V0cyB0aGUgb2JqZWN0aXZlIGMgY2xhc3MgcHJlZml4IHdoaWNoIGlzIHByZXBlbmRlZCB0byBhbGwgb2JqZWN0aXZlIGNcbiAgICogZ2VuZXJhdGVkIGNsYXNzZXMgZnJvbSB0aGlzIC5wcm90by4gVGhlcmUgaXMgbm8gZGVmYXVsdC5cbiAgICovXG4gIG9iamNDbGFzc1ByZWZpeDogc3RyaW5nO1xuICAvKiogTmFtZXNwYWNlIGZvciBnZW5lcmF0ZWQgY2xhc3NlczsgZGVmYXVsdHMgdG8gdGhlIHBhY2thZ2UuICovXG4gIGNzaGFycE5hbWVzcGFjZTogc3RyaW5nO1xuICAvKipcbiAgICogQnkgZGVmYXVsdCBTd2lmdCBnZW5lcmF0b3JzIHdpbGwgdGFrZSB0aGUgcHJvdG8gcGFja2FnZSBhbmQgQ2FtZWxDYXNlIGl0XG4gICAqIHJlcGxhY2luZyAnLicgd2l0aCB1bmRlcnNjb3JlIGFuZCB1c2UgdGhhdCB0byBwcmVmaXggdGhlIHR5cGVzL3N5bWJvbHNcbiAgICogZGVmaW5lZC4gV2hlbiB0aGlzIG9wdGlvbnMgaXMgcHJvdmlkZWQsIHRoZXkgd2lsbCB1c2UgdGhpcyB2YWx1ZSBpbnN0ZWFkXG4gICAqIHRvIHByZWZpeCB0aGUgdHlwZXMvc3ltYm9scyBkZWZpbmVkLlxuICAgKi9cbiAgc3dpZnRQcmVmaXg6IHN0cmluZztcbiAgLyoqXG4gICAqIFNldHMgdGhlIHBocCBjbGFzcyBwcmVmaXggd2hpY2ggaXMgcHJlcGVuZGVkIHRvIGFsbCBwaHAgZ2VuZXJhdGVkIGNsYXNzZXNcbiAgICogZnJvbSB0aGlzIC5wcm90by4gRGVmYXVsdCBpcyBlbXB0eS5cbiAgICovXG4gIHBocENsYXNzUHJlZml4OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBvcHRpb24gdG8gY2hhbmdlIHRoZSBuYW1lc3BhY2Ugb2YgcGhwIGdlbmVyYXRlZCBjbGFzc2VzLiBEZWZhdWx0XG4gICAqIGlzIGVtcHR5LiBXaGVuIHRoaXMgb3B0aW9uIGlzIGVtcHR5LCB0aGUgcGFja2FnZSBuYW1lIHdpbGwgYmUgdXNlZCBmb3JcbiAgICogZGV0ZXJtaW5pbmcgdGhlIG5hbWVzcGFjZS5cbiAgICovXG4gIHBocE5hbWVzcGFjZTogc3RyaW5nO1xuICAvKipcbiAgICogVXNlIHRoaXMgb3B0aW9uIHRvIGNoYW5nZSB0aGUgbmFtZXNwYWNlIG9mIHBocCBnZW5lcmF0ZWQgbWV0YWRhdGEgY2xhc3Nlcy5cbiAgICogRGVmYXVsdCBpcyBlbXB0eS4gV2hlbiB0aGlzIG9wdGlvbiBpcyBlbXB0eSwgdGhlIHByb3RvIGZpbGUgbmFtZSB3aWxsIGJlXG4gICAqIHVzZWQgZm9yIGRldGVybWluaW5nIHRoZSBuYW1lc3BhY2UuXG4gICAqL1xuICBwaHBNZXRhZGF0YU5hbWVzcGFjZTogc3RyaW5nO1xuICAvKipcbiAgICogVXNlIHRoaXMgb3B0aW9uIHRvIGNoYW5nZSB0aGUgcGFja2FnZSBvZiBydWJ5IGdlbmVyYXRlZCBjbGFzc2VzLiBEZWZhdWx0XG4gICAqIGlzIGVtcHR5LiBXaGVuIHRoaXMgb3B0aW9uIGlzIG5vdCBzZXQsIHRoZSBwYWNrYWdlIG5hbWUgd2lsbCBiZSB1c2VkIGZvclxuICAgKiBkZXRlcm1pbmluZyB0aGUgcnVieSBwYWNrYWdlLlxuICAgKi9cbiAgcnVieVBhY2thZ2U6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBwYXJzZXIgc3RvcmVzIG9wdGlvbnMgaXQgZG9lc24ndCByZWNvZ25pemUgaGVyZS5cbiAgICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgXCJPcHRpb25zXCIgc2VjdGlvbiBhYm92ZS5cbiAgICovXG4gIHVuaW50ZXJwcmV0ZWRPcHRpb246IFVuaW50ZXJwcmV0ZWRPcHRpb25bXTtcbn1cblxuLyoqIEdlbmVyYXRlZCBjbGFzc2VzIGNhbiBiZSBvcHRpbWl6ZWQgZm9yIHNwZWVkIG9yIGNvZGUgc2l6ZS4gKi9cbmV4cG9ydCBlbnVtIEZpbGVPcHRpb25zX09wdGltaXplTW9kZSB7XG4gIC8qKiBTUEVFRCAtIEdlbmVyYXRlIGNvbXBsZXRlIGNvZGUgZm9yIHBhcnNpbmcsIHNlcmlhbGl6YXRpb24sICovXG4gIFNQRUVEID0gMSxcbiAgLyoqIENPREVfU0laRSAtIGV0Yy4gKi9cbiAgQ09ERV9TSVpFID0gMixcbiAgLyoqIExJVEVfUlVOVElNRSAtIEdlbmVyYXRlIGNvZGUgdXNpbmcgTWVzc2FnZUxpdGUgYW5kIHRoZSBsaXRlIHJ1bnRpbWUuICovXG4gIExJVEVfUlVOVElNRSA9IDMsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWxlT3B0aW9uc19PcHRpbWl6ZU1vZGVGcm9tSlNPTihvYmplY3Q6IGFueSk6IEZpbGVPcHRpb25zX09wdGltaXplTW9kZSB7XG4gIHN3aXRjaCAob2JqZWN0KSB7XG4gICAgY2FzZSAxOlxuICAgIGNhc2UgXCJTUEVFRFwiOlxuICAgICAgcmV0dXJuIEZpbGVPcHRpb25zX09wdGltaXplTW9kZS5TUEVFRDtcbiAgICBjYXNlIDI6XG4gICAgY2FzZSBcIkNPREVfU0laRVwiOlxuICAgICAgcmV0dXJuIEZpbGVPcHRpb25zX09wdGltaXplTW9kZS5DT0RFX1NJWkU7XG4gICAgY2FzZSAzOlxuICAgIGNhc2UgXCJMSVRFX1JVTlRJTUVcIjpcbiAgICAgIHJldHVybiBGaWxlT3B0aW9uc19PcHRpbWl6ZU1vZGUuTElURV9SVU5USU1FO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgdHNQcm90b0dsb2JhbFRoaXMuRXJyb3IoXCJVbnJlY29nbml6ZWQgZW51bSB2YWx1ZSBcIiArIG9iamVjdCArIFwiIGZvciBlbnVtIEZpbGVPcHRpb25zX09wdGltaXplTW9kZVwiKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlVG9KU09OKG9iamVjdDogRmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlKTogc3RyaW5nIHtcbiAgc3dpdGNoIChvYmplY3QpIHtcbiAgICBjYXNlIEZpbGVPcHRpb25zX09wdGltaXplTW9kZS5TUEVFRDpcbiAgICAgIHJldHVybiBcIlNQRUVEXCI7XG4gICAgY2FzZSBGaWxlT3B0aW9uc19PcHRpbWl6ZU1vZGUuQ09ERV9TSVpFOlxuICAgICAgcmV0dXJuIFwiQ09ERV9TSVpFXCI7XG4gICAgY2FzZSBGaWxlT3B0aW9uc19PcHRpbWl6ZU1vZGUuTElURV9SVU5USU1FOlxuICAgICAgcmV0dXJuIFwiTElURV9SVU5USU1FXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyB0c1Byb3RvR2xvYmFsVGhpcy5FcnJvcihcIlVucmVjb2duaXplZCBlbnVtIHZhbHVlIFwiICsgb2JqZWN0ICsgXCIgZm9yIGVudW0gRmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlXCIpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZU9wdGlvbnMge1xuICAvKipcbiAgICogU2V0IHRydWUgdG8gdXNlIHRoZSBvbGQgcHJvdG8xIE1lc3NhZ2VTZXQgd2lyZSBmb3JtYXQgZm9yIGV4dGVuc2lvbnMuXG4gICAqIFRoaXMgaXMgcHJvdmlkZWQgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IHdpdGggdGhlIE1lc3NhZ2VTZXQgd2lyZVxuICAgKiBmb3JtYXQuICBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBmb3IgYW55IG90aGVyIHJlYXNvbjogIEl0J3MgbGVzc1xuICAgKiBlZmZpY2llbnQsIGhhcyBmZXdlciBmZWF0dXJlcywgYW5kIGlzIG1vcmUgY29tcGxpY2F0ZWQuXG4gICAqXG4gICAqIFRoZSBtZXNzYWdlIG11c3QgYmUgZGVmaW5lZCBleGFjdGx5IGFzIGZvbGxvd3M6XG4gICAqICAgbWVzc2FnZSBGb28ge1xuICAgKiAgICAgb3B0aW9uIG1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0ID0gdHJ1ZTtcbiAgICogICAgIGV4dGVuc2lvbnMgNCB0byBtYXg7XG4gICAqICAgfVxuICAgKiBOb3RlIHRoYXQgdGhlIG1lc3NhZ2UgY2Fubm90IGhhdmUgYW55IGRlZmluZWQgZmllbGRzOyBNZXNzYWdlU2V0cyBvbmx5XG4gICAqIGhhdmUgZXh0ZW5zaW9ucy5cbiAgICpcbiAgICogQWxsIGV4dGVuc2lvbnMgb2YgeW91ciB0eXBlIG11c3QgYmUgc2luZ3VsYXIgbWVzc2FnZXM7IGUuZy4gdGhleSBjYW5ub3RcbiAgICogYmUgaW50MzJzLCBlbnVtcywgb3IgcmVwZWF0ZWQgbWVzc2FnZXMuXG4gICAqXG4gICAqIEJlY2F1c2UgdGhpcyBpcyBhbiBvcHRpb24sIHRoZSBhYm92ZSB0d28gcmVzdHJpY3Rpb25zIGFyZSBub3QgZW5mb3JjZWQgYnlcbiAgICogdGhlIHByb3RvY29sIGNvbXBpbGVyLlxuICAgKi9cbiAgbWVzc2FnZVNldFdpcmVGb3JtYXQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBEaXNhYmxlcyB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgc3RhbmRhcmQgXCJkZXNjcmlwdG9yKClcIiBhY2Nlc3Nvciwgd2hpY2ggY2FuXG4gICAqIGNvbmZsaWN0IHdpdGggYSBmaWVsZCBvZiB0aGUgc2FtZSBuYW1lLiAgVGhpcyBpcyBtZWFudCB0byBtYWtlIG1pZ3JhdGlvblxuICAgKiBmcm9tIHByb3RvMSBlYXNpZXI7IG5ldyBjb2RlIHNob3VsZCBhdm9pZCBmaWVsZHMgbmFtZWQgXCJkZXNjcmlwdG9yXCIuXG4gICAqL1xuICBub1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29yOiBib29sZWFuO1xuICAvKipcbiAgICogSXMgdGhpcyBtZXNzYWdlIGRlcHJlY2F0ZWQ/XG4gICAqIERlcGVuZGluZyBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtLCB0aGlzIGNhbiBlbWl0IERlcHJlY2F0ZWQgYW5ub3RhdGlvbnNcbiAgICogZm9yIHRoZSBtZXNzYWdlLCBvciBpdCB3aWxsIGJlIGNvbXBsZXRlbHkgaWdub3JlZDsgaW4gdGhlIHZlcnkgbGVhc3QsXG4gICAqIHRoaXMgaXMgYSBmb3JtYWxpemF0aW9uIGZvciBkZXByZWNhdGluZyBtZXNzYWdlcy5cbiAgICovXG4gIGRlcHJlY2F0ZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBOT1RFOiBEbyBub3Qgc2V0IHRoZSBvcHRpb24gaW4gLnByb3RvIGZpbGVzLiBBbHdheXMgdXNlIHRoZSBtYXBzIHN5bnRheFxuICAgKiBpbnN0ZWFkLiBUaGUgb3B0aW9uIHNob3VsZCBvbmx5IGJlIGltcGxpY2l0bHkgc2V0IGJ5IHRoZSBwcm90byBjb21waWxlclxuICAgKiBwYXJzZXIuXG4gICAqXG4gICAqIFdoZXRoZXIgdGhlIG1lc3NhZ2UgaXMgYW4gYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFwIGVudHJ5IHR5cGUgZm9yIHRoZVxuICAgKiBtYXBzIGZpZWxkLlxuICAgKlxuICAgKiBGb3IgbWFwcyBmaWVsZHM6XG4gICAqICAgICBtYXA8S2V5VHlwZSwgVmFsdWVUeXBlPiBtYXBfZmllbGQgPSAxO1xuICAgKiBUaGUgcGFyc2VkIGRlc2NyaXB0b3IgbG9va3MgbGlrZTpcbiAgICogICAgIG1lc3NhZ2UgTWFwRmllbGRFbnRyeSB7XG4gICAqICAgICAgICAgb3B0aW9uIG1hcF9lbnRyeSA9IHRydWU7XG4gICAqICAgICAgICAgb3B0aW9uYWwgS2V5VHlwZSBrZXkgPSAxO1xuICAgKiAgICAgICAgIG9wdGlvbmFsIFZhbHVlVHlwZSB2YWx1ZSA9IDI7XG4gICAqICAgICB9XG4gICAqICAgICByZXBlYXRlZCBNYXBGaWVsZEVudHJ5IG1hcF9maWVsZCA9IDE7XG4gICAqXG4gICAqIEltcGxlbWVudGF0aW9ucyBtYXkgY2hvb3NlIG5vdCB0byBnZW5lcmF0ZSB0aGUgbWFwX2VudHJ5PXRydWUgbWVzc2FnZSwgYnV0XG4gICAqIHVzZSBhIG5hdGl2ZSBtYXAgaW4gdGhlIHRhcmdldCBsYW5ndWFnZSB0byBob2xkIHRoZSBrZXlzIGFuZCB2YWx1ZXMuXG4gICAqIFRoZSByZWZsZWN0aW9uIEFQSXMgaW4gc3VjaCBpbXBsZW1lbnRhdGlvbnMgc3RpbGwgbmVlZCB0byB3b3JrIGFzXG4gICAqIGlmIHRoZSBmaWVsZCBpcyBhIHJlcGVhdGVkIG1lc3NhZ2UgZmllbGQuXG4gICAqL1xuICBtYXBFbnRyeTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEVuYWJsZSB0aGUgbGVnYWN5IGhhbmRsaW5nIG9mIEpTT04gZmllbGQgbmFtZSBjb25mbGljdHMuICBUaGlzIGxvd2VyY2FzZXNcbiAgICogYW5kIHN0cmlwcyB1bmRlcnNjb3JlZCBmcm9tIHRoZSBmaWVsZHMgYmVmb3JlIGNvbXBhcmlzb24gaW4gcHJvdG8zIG9ubHkuXG4gICAqIFRoZSBuZXcgYmVoYXZpb3IgdGFrZXMgYGpzb25fbmFtZWAgaW50byBhY2NvdW50IGFuZCBhcHBsaWVzIHRvIHByb3RvMiBhc1xuICAgKiB3ZWxsLlxuICAgKlxuICAgKiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgYXMgYSB0ZW1wb3JhcnkgbWVhc3VyZSBhZ2FpbnN0IGJyb2tlbiBidWlsZHMgZHVlXG4gICAqIHRvIHRoZSBjaGFuZ2UgaW4gYmVoYXZpb3IgZm9yIEpTT04gZmllbGQgbmFtZSBjb25mbGljdHMuXG4gICAqXG4gICAqIFRPRE8oYi8yNjE3NTAxOTApIFRoaXMgaXMgbGVnYWN5IGJlaGF2aW9yIHdlIHBsYW4gdG8gcmVtb3ZlIG9uY2UgZG93bnN0cmVhbVxuICAgKiB0ZWFtcyBoYXZlIGhhZCB0aW1lIHRvIG1pZ3JhdGUuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBkZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzOiBib29sZWFuO1xuICAvKiogVGhlIHBhcnNlciBzdG9yZXMgb3B0aW9ucyBpdCBkb2Vzbid0IHJlY29nbml6ZSBoZXJlLiBTZWUgYWJvdmUuICovXG4gIHVuaW50ZXJwcmV0ZWRPcHRpb246IFVuaW50ZXJwcmV0ZWRPcHRpb25bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWVsZE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGN0eXBlIG9wdGlvbiBpbnN0cnVjdHMgdGhlIEMrKyBjb2RlIGdlbmVyYXRvciB0byB1c2UgYSBkaWZmZXJlbnRcbiAgICogcmVwcmVzZW50YXRpb24gb2YgdGhlIGZpZWxkIHRoYW4gaXQgbm9ybWFsbHkgd291bGQuICBTZWUgdGhlIHNwZWNpZmljXG4gICAqIG9wdGlvbnMgYmVsb3cuICBUaGlzIG9wdGlvbiBpcyBub3QgeWV0IGltcGxlbWVudGVkIGluIHRoZSBvcGVuIHNvdXJjZVxuICAgKiByZWxlYXNlIC0tIHNvcnJ5LCB3ZSdsbCB0cnkgdG8gaW5jbHVkZSBpdCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIVxuICAgKi9cbiAgY3R5cGU6IEZpZWxkT3B0aW9uc19DVHlwZTtcbiAgLyoqXG4gICAqIFRoZSBwYWNrZWQgb3B0aW9uIGNhbiBiZSBlbmFibGVkIGZvciByZXBlYXRlZCBwcmltaXRpdmUgZmllbGRzIHRvIGVuYWJsZVxuICAgKiBhIG1vcmUgZWZmaWNpZW50IHJlcHJlc2VudGF0aW9uIG9uIHRoZSB3aXJlLiBSYXRoZXIgdGhhbiByZXBlYXRlZGx5XG4gICAqIHdyaXRpbmcgdGhlIHRhZyBhbmQgdHlwZSBmb3IgZWFjaCBlbGVtZW50LCB0aGUgZW50aXJlIGFycmF5IGlzIGVuY29kZWQgYXNcbiAgICogYSBzaW5nbGUgbGVuZ3RoLWRlbGltaXRlZCBibG9iLiBJbiBwcm90bzMsIG9ubHkgZXhwbGljaXQgc2V0dGluZyBpdCB0b1xuICAgKiBmYWxzZSB3aWxsIGF2b2lkIHVzaW5nIHBhY2tlZCBlbmNvZGluZy5cbiAgICovXG4gIHBhY2tlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSBqc3R5cGUgb3B0aW9uIGRldGVybWluZXMgdGhlIEphdmFTY3JpcHQgdHlwZSB1c2VkIGZvciB2YWx1ZXMgb2YgdGhlXG4gICAqIGZpZWxkLiAgVGhlIG9wdGlvbiBpcyBwZXJtaXR0ZWQgb25seSBmb3IgNjQgYml0IGludGVncmFsIGFuZCBmaXhlZCB0eXBlc1xuICAgKiAoaW50NjQsIHVpbnQ2NCwgc2ludDY0LCBmaXhlZDY0LCBzZml4ZWQ2NCkuICBBIGZpZWxkIHdpdGgganN0eXBlIEpTX1NUUklOR1xuICAgKiBpcyByZXByZXNlbnRlZCBhcyBKYXZhU2NyaXB0IHN0cmluZywgd2hpY2ggYXZvaWRzIGxvc3Mgb2YgcHJlY2lzaW9uIHRoYXRcbiAgICogY2FuIGhhcHBlbiB3aGVuIGEgbGFyZ2UgdmFsdWUgaXMgY29udmVydGVkIHRvIGEgZmxvYXRpbmcgcG9pbnQgSmF2YVNjcmlwdC5cbiAgICogU3BlY2lmeWluZyBKU19OVU1CRVIgZm9yIHRoZSBqc3R5cGUgY2F1c2VzIHRoZSBnZW5lcmF0ZWQgSmF2YVNjcmlwdCBjb2RlIHRvXG4gICAqIHVzZSB0aGUgSmF2YVNjcmlwdCBcIm51bWJlclwiIHR5cGUuICBUaGUgYmVoYXZpb3Igb2YgdGhlIGRlZmF1bHQgb3B0aW9uXG4gICAqIEpTX05PUk1BTCBpcyBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQuXG4gICAqXG4gICAqIFRoaXMgb3B0aW9uIGlzIGFuIGVudW0gdG8gcGVybWl0IGFkZGl0aW9uYWwgdHlwZXMgdG8gYmUgYWRkZWQsIGUuZy5cbiAgICogZ29vZy5tYXRoLkludGVnZXIuXG4gICAqL1xuICBqc3R5cGU6IEZpZWxkT3B0aW9uc19KU1R5cGU7XG4gIC8qKlxuICAgKiBTaG91bGQgdGhpcyBmaWVsZCBiZSBwYXJzZWQgbGF6aWx5PyAgTGF6eSBhcHBsaWVzIG9ubHkgdG8gbWVzc2FnZS10eXBlXG4gICAqIGZpZWxkcy4gIEl0IG1lYW5zIHRoYXQgd2hlbiB0aGUgb3V0ZXIgbWVzc2FnZSBpcyBpbml0aWFsbHkgcGFyc2VkLCB0aGVcbiAgICogaW5uZXIgbWVzc2FnZSdzIGNvbnRlbnRzIHdpbGwgbm90IGJlIHBhcnNlZCBidXQgaW5zdGVhZCBzdG9yZWQgaW4gZW5jb2RlZFxuICAgKiBmb3JtLiAgVGhlIGlubmVyIG1lc3NhZ2Ugd2lsbCBhY3R1YWxseSBiZSBwYXJzZWQgd2hlbiBpdCBpcyBmaXJzdCBhY2Nlc3NlZC5cbiAgICpcbiAgICogVGhpcyBpcyBvbmx5IGEgaGludC4gIEltcGxlbWVudGF0aW9ucyBhcmUgZnJlZSB0byBjaG9vc2Ugd2hldGhlciB0byB1c2VcbiAgICogZWFnZXIgb3IgbGF6eSBwYXJzaW5nIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9mIHRoaXMgb3B0aW9uLiAgSG93ZXZlcixcbiAgICogc2V0dGluZyB0aGlzIG9wdGlvbiB0cnVlIHN1Z2dlc3RzIHRoYXQgdGhlIHByb3RvY29sIGF1dGhvciBiZWxpZXZlcyB0aGF0XG4gICAqIHVzaW5nIGxhenkgcGFyc2luZyBvbiB0aGlzIGZpZWxkIGlzIHdvcnRoIHRoZSBhZGRpdGlvbmFsIGJvb2trZWVwaW5nXG4gICAqIG92ZXJoZWFkIHR5cGljYWxseSBuZWVkZWQgdG8gaW1wbGVtZW50IGl0LlxuICAgKlxuICAgKiBUaGlzIG9wdGlvbiBkb2VzIG5vdCBhZmZlY3QgdGhlIHB1YmxpYyBpbnRlcmZhY2Ugb2YgYW55IGdlbmVyYXRlZCBjb2RlO1xuICAgKiBhbGwgbWV0aG9kIHNpZ25hdHVyZXMgcmVtYWluIHRoZSBzYW1lLiAgRnVydGhlcm1vcmUsIHRocmVhZC1zYWZldHkgb2YgdGhlXG4gICAqIGludGVyZmFjZSBpcyBub3QgYWZmZWN0ZWQgYnkgdGhpcyBvcHRpb247IGNvbnN0IG1ldGhvZHMgcmVtYWluIHNhZmUgdG9cbiAgICogY2FsbCBmcm9tIG11bHRpcGxlIHRocmVhZHMgY29uY3VycmVudGx5LCB3aGlsZSBub24tY29uc3QgbWV0aG9kcyBjb250aW51ZVxuICAgKiB0byByZXF1aXJlIGV4Y2x1c2l2ZSBhY2Nlc3MuXG4gICAqXG4gICAqIE5vdGUgdGhhdCBpbXBsZW1lbnRhdGlvbnMgbWF5IGNob29zZSBub3QgdG8gY2hlY2sgcmVxdWlyZWQgZmllbGRzIHdpdGhpblxuICAgKiBhIGxhenkgc3ViLW1lc3NhZ2UuICBUaGF0IGlzLCBjYWxsaW5nIElzSW5pdGlhbGl6ZWQoKSBvbiB0aGUgb3V0ZXIgbWVzc2FnZVxuICAgKiBtYXkgcmV0dXJuIHRydWUgZXZlbiBpZiB0aGUgaW5uZXIgbWVzc2FnZSBoYXMgbWlzc2luZyByZXF1aXJlZCBmaWVsZHMuXG4gICAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBpbm5lciBtZXNzYWdlIHdvdWxkIGhhdmUgdG8gYmVcbiAgICogcGFyc2VkIGluIG9yZGVyIHRvIHBlcmZvcm0gdGhlIGNoZWNrLCBkZWZlYXRpbmcgdGhlIHB1cnBvc2Ugb2YgbGF6eVxuICAgKiBwYXJzaW5nLiAgQW4gaW1wbGVtZW50YXRpb24gd2hpY2ggY2hvb3NlcyBub3QgdG8gY2hlY2sgcmVxdWlyZWQgZmllbGRzXG4gICAqIG11c3QgYmUgY29uc2lzdGVudCBhYm91dCBpdC4gIFRoYXQgaXMsIGZvciBhbnkgcGFydGljdWxhciBzdWItbWVzc2FnZSwgdGhlXG4gICAqIGltcGxlbWVudGF0aW9uIG11c3QgZWl0aGVyICphbHdheXMqIGNoZWNrIGl0cyByZXF1aXJlZCBmaWVsZHMsIG9yICpuZXZlcipcbiAgICogY2hlY2sgaXRzIHJlcXVpcmVkIGZpZWxkcywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCB0aGUgbWVzc2FnZSBoYXNcbiAgICogYmVlbiBwYXJzZWQuXG4gICAqXG4gICAqIEFzIG9mIE1heSAyMDIyLCBsYXp5IHZlcmlmaWVzIHRoZSBjb250ZW50cyBvZiB0aGUgYnl0ZSBzdHJlYW0gZHVyaW5nXG4gICAqIHBhcnNpbmcuICBBbiBpbnZhbGlkIGJ5dGUgc3RyZWFtIHdpbGwgY2F1c2UgdGhlIG92ZXJhbGwgcGFyc2luZyB0byBmYWlsLlxuICAgKi9cbiAgbGF6eTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIHVudmVyaWZpZWRfbGF6eSBkb2VzIG5vIGNvcnJlY3RuZXNzIGNoZWNrcyBvbiB0aGUgYnl0ZSBzdHJlYW0uIFRoaXMgc2hvdWxkXG4gICAqIG9ubHkgYmUgdXNlZCB3aGVyZSBsYXp5IHdpdGggdmVyaWZpY2F0aW9uIGlzIHByb2hpYml0aXZlIGZvciBwZXJmb3JtYW5jZVxuICAgKiByZWFzb25zLlxuICAgKi9cbiAgdW52ZXJpZmllZExhenk6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJcyB0aGlzIGZpZWxkIGRlcHJlY2F0ZWQ/XG4gICAqIERlcGVuZGluZyBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtLCB0aGlzIGNhbiBlbWl0IERlcHJlY2F0ZWQgYW5ub3RhdGlvbnNcbiAgICogZm9yIGFjY2Vzc29ycywgb3IgaXQgd2lsbCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQ7IGluIHRoZSB2ZXJ5IGxlYXN0LCB0aGlzXG4gICAqIGlzIGEgZm9ybWFsaXphdGlvbiBmb3IgZGVwcmVjYXRpbmcgZmllbGRzLlxuICAgKi9cbiAgZGVwcmVjYXRlZDogYm9vbGVhbjtcbiAgLyoqIEZvciBHb29nbGUtaW50ZXJuYWwgbWlncmF0aW9uIG9ubHkuIERvIG5vdCB1c2UuICovXG4gIHdlYWs6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJbmRpY2F0ZSB0aGF0IHRoZSBmaWVsZCB2YWx1ZSBzaG91bGQgbm90IGJlIHByaW50ZWQgb3V0IHdoZW4gdXNpbmcgZGVidWdcbiAgICogZm9ybWF0cywgZS5nLiB3aGVuIHRoZSBmaWVsZCBjb250YWlucyBzZW5zaXRpdmUgY3JlZGVudGlhbHMuXG4gICAqL1xuICBkZWJ1Z1JlZGFjdDogYm9vbGVhbjtcbiAgcmV0ZW50aW9uOiBGaWVsZE9wdGlvbnNfT3B0aW9uUmV0ZW50aW9uO1xuICB0YXJnZXQ6IEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlO1xuICAvKiogVGhlIHBhcnNlciBzdG9yZXMgb3B0aW9ucyBpdCBkb2Vzbid0IHJlY29nbml6ZSBoZXJlLiBTZWUgYWJvdmUuICovXG4gIHVuaW50ZXJwcmV0ZWRPcHRpb246IFVuaW50ZXJwcmV0ZWRPcHRpb25bXTtcbn1cblxuZXhwb3J0IGVudW0gRmllbGRPcHRpb25zX0NUeXBlIHtcbiAgLyoqIFNUUklORyAtIERlZmF1bHQgbW9kZS4gKi9cbiAgU1RSSU5HID0gMCxcbiAgQ09SRCA9IDEsXG4gIFNUUklOR19QSUVDRSA9IDIsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWVsZE9wdGlvbnNfQ1R5cGVGcm9tSlNPTihvYmplY3Q6IGFueSk6IEZpZWxkT3B0aW9uc19DVHlwZSB7XG4gIHN3aXRjaCAob2JqZWN0KSB7XG4gICAgY2FzZSAwOlxuICAgIGNhc2UgXCJTVFJJTkdcIjpcbiAgICAgIHJldHVybiBGaWVsZE9wdGlvbnNfQ1R5cGUuU1RSSU5HO1xuICAgIGNhc2UgMTpcbiAgICBjYXNlIFwiQ09SRFwiOlxuICAgICAgcmV0dXJuIEZpZWxkT3B0aW9uc19DVHlwZS5DT1JEO1xuICAgIGNhc2UgMjpcbiAgICBjYXNlIFwiU1RSSU5HX1BJRUNFXCI6XG4gICAgICByZXR1cm4gRmllbGRPcHRpb25zX0NUeXBlLlNUUklOR19QSUVDRTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IHRzUHJvdG9HbG9iYWxUaGlzLkVycm9yKFwiVW5yZWNvZ25pemVkIGVudW0gdmFsdWUgXCIgKyBvYmplY3QgKyBcIiBmb3IgZW51bSBGaWVsZE9wdGlvbnNfQ1R5cGVcIik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpZWxkT3B0aW9uc19DVHlwZVRvSlNPTihvYmplY3Q6IEZpZWxkT3B0aW9uc19DVHlwZSk6IHN0cmluZyB7XG4gIHN3aXRjaCAob2JqZWN0KSB7XG4gICAgY2FzZSBGaWVsZE9wdGlvbnNfQ1R5cGUuU1RSSU5HOlxuICAgICAgcmV0dXJuIFwiU1RSSU5HXCI7XG4gICAgY2FzZSBGaWVsZE9wdGlvbnNfQ1R5cGUuQ09SRDpcbiAgICAgIHJldHVybiBcIkNPUkRcIjtcbiAgICBjYXNlIEZpZWxkT3B0aW9uc19DVHlwZS5TVFJJTkdfUElFQ0U6XG4gICAgICByZXR1cm4gXCJTVFJJTkdfUElFQ0VcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IHRzUHJvdG9HbG9iYWxUaGlzLkVycm9yKFwiVW5yZWNvZ25pemVkIGVudW0gdmFsdWUgXCIgKyBvYmplY3QgKyBcIiBmb3IgZW51bSBGaWVsZE9wdGlvbnNfQ1R5cGVcIik7XG4gIH1cbn1cblxuZXhwb3J0IGVudW0gRmllbGRPcHRpb25zX0pTVHlwZSB7XG4gIC8qKiBKU19OT1JNQUwgLSBVc2UgdGhlIGRlZmF1bHQgdHlwZS4gKi9cbiAgSlNfTk9STUFMID0gMCxcbiAgLyoqIEpTX1NUUklORyAtIFVzZSBKYXZhU2NyaXB0IHN0cmluZ3MuICovXG4gIEpTX1NUUklORyA9IDEsXG4gIC8qKiBKU19OVU1CRVIgLSBVc2UgSmF2YVNjcmlwdCBudW1iZXJzLiAqL1xuICBKU19OVU1CRVIgPSAyLFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmllbGRPcHRpb25zX0pTVHlwZUZyb21KU09OKG9iamVjdDogYW55KTogRmllbGRPcHRpb25zX0pTVHlwZSB7XG4gIHN3aXRjaCAob2JqZWN0KSB7XG4gICAgY2FzZSAwOlxuICAgIGNhc2UgXCJKU19OT1JNQUxcIjpcbiAgICAgIHJldHVybiBGaWVsZE9wdGlvbnNfSlNUeXBlLkpTX05PUk1BTDtcbiAgICBjYXNlIDE6XG4gICAgY2FzZSBcIkpTX1NUUklOR1wiOlxuICAgICAgcmV0dXJuIEZpZWxkT3B0aW9uc19KU1R5cGUuSlNfU1RSSU5HO1xuICAgIGNhc2UgMjpcbiAgICBjYXNlIFwiSlNfTlVNQkVSXCI6XG4gICAgICByZXR1cm4gRmllbGRPcHRpb25zX0pTVHlwZS5KU19OVU1CRVI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyB0c1Byb3RvR2xvYmFsVGhpcy5FcnJvcihcIlVucmVjb2duaXplZCBlbnVtIHZhbHVlIFwiICsgb2JqZWN0ICsgXCIgZm9yIGVudW0gRmllbGRPcHRpb25zX0pTVHlwZVwiKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmllbGRPcHRpb25zX0pTVHlwZVRvSlNPTihvYmplY3Q6IEZpZWxkT3B0aW9uc19KU1R5cGUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKG9iamVjdCkge1xuICAgIGNhc2UgRmllbGRPcHRpb25zX0pTVHlwZS5KU19OT1JNQUw6XG4gICAgICByZXR1cm4gXCJKU19OT1JNQUxcIjtcbiAgICBjYXNlIEZpZWxkT3B0aW9uc19KU1R5cGUuSlNfU1RSSU5HOlxuICAgICAgcmV0dXJuIFwiSlNfU1RSSU5HXCI7XG4gICAgY2FzZSBGaWVsZE9wdGlvbnNfSlNUeXBlLkpTX05VTUJFUjpcbiAgICAgIHJldHVybiBcIkpTX05VTUJFUlwiO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgdHNQcm90b0dsb2JhbFRoaXMuRXJyb3IoXCJVbnJlY29nbml6ZWQgZW51bSB2YWx1ZSBcIiArIG9iamVjdCArIFwiIGZvciBlbnVtIEZpZWxkT3B0aW9uc19KU1R5cGVcIik7XG4gIH1cbn1cblxuLyoqXG4gKiBJZiBzZXQgdG8gUkVURU5USU9OX1NPVVJDRSwgdGhlIG9wdGlvbiB3aWxsIGJlIG9taXR0ZWQgZnJvbSB0aGUgYmluYXJ5LlxuICogTm90ZTogYXMgb2YgSmFudWFyeSAyMDIzLCBzdXBwb3J0IGZvciB0aGlzIGlzIGluIHByb2dyZXNzIGFuZCBkb2VzIG5vdCB5ZXRcbiAqIGhhdmUgYW4gZWZmZWN0IChiLzI2NDU5MzQ4OSkuXG4gKi9cbmV4cG9ydCBlbnVtIEZpZWxkT3B0aW9uc19PcHRpb25SZXRlbnRpb24ge1xuICBSRVRFTlRJT05fVU5LTk9XTiA9IDAsXG4gIFJFVEVOVElPTl9SVU5USU1FID0gMSxcbiAgUkVURU5USU9OX1NPVVJDRSA9IDIsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWVsZE9wdGlvbnNfT3B0aW9uUmV0ZW50aW9uRnJvbUpTT04ob2JqZWN0OiBhbnkpOiBGaWVsZE9wdGlvbnNfT3B0aW9uUmV0ZW50aW9uIHtcbiAgc3dpdGNoIChvYmplY3QpIHtcbiAgICBjYXNlIDA6XG4gICAgY2FzZSBcIlJFVEVOVElPTl9VTktOT1dOXCI6XG4gICAgICByZXR1cm4gRmllbGRPcHRpb25zX09wdGlvblJldGVudGlvbi5SRVRFTlRJT05fVU5LTk9XTjtcbiAgICBjYXNlIDE6XG4gICAgY2FzZSBcIlJFVEVOVElPTl9SVU5USU1FXCI6XG4gICAgICByZXR1cm4gRmllbGRPcHRpb25zX09wdGlvblJldGVudGlvbi5SRVRFTlRJT05fUlVOVElNRTtcbiAgICBjYXNlIDI6XG4gICAgY2FzZSBcIlJFVEVOVElPTl9TT1VSQ0VcIjpcbiAgICAgIHJldHVybiBGaWVsZE9wdGlvbnNfT3B0aW9uUmV0ZW50aW9uLlJFVEVOVElPTl9TT1VSQ0U7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyB0c1Byb3RvR2xvYmFsVGhpcy5FcnJvcihcIlVucmVjb2duaXplZCBlbnVtIHZhbHVlIFwiICsgb2JqZWN0ICsgXCIgZm9yIGVudW0gRmllbGRPcHRpb25zX09wdGlvblJldGVudGlvblwiKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmllbGRPcHRpb25zX09wdGlvblJldGVudGlvblRvSlNPTihvYmplY3Q6IEZpZWxkT3B0aW9uc19PcHRpb25SZXRlbnRpb24pOiBzdHJpbmcge1xuICBzd2l0Y2ggKG9iamVjdCkge1xuICAgIGNhc2UgRmllbGRPcHRpb25zX09wdGlvblJldGVudGlvbi5SRVRFTlRJT05fVU5LTk9XTjpcbiAgICAgIHJldHVybiBcIlJFVEVOVElPTl9VTktOT1dOXCI7XG4gICAgY2FzZSBGaWVsZE9wdGlvbnNfT3B0aW9uUmV0ZW50aW9uLlJFVEVOVElPTl9SVU5USU1FOlxuICAgICAgcmV0dXJuIFwiUkVURU5USU9OX1JVTlRJTUVcIjtcbiAgICBjYXNlIEZpZWxkT3B0aW9uc19PcHRpb25SZXRlbnRpb24uUkVURU5USU9OX1NPVVJDRTpcbiAgICAgIHJldHVybiBcIlJFVEVOVElPTl9TT1VSQ0VcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IHRzUHJvdG9HbG9iYWxUaGlzLkVycm9yKFwiVW5yZWNvZ25pemVkIGVudW0gdmFsdWUgXCIgKyBvYmplY3QgKyBcIiBmb3IgZW51bSBGaWVsZE9wdGlvbnNfT3B0aW9uUmV0ZW50aW9uXCIpO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBpbmRpY2F0ZXMgdGhlIHR5cGVzIG9mIGVudGl0aWVzIHRoYXQgdGhlIGZpZWxkIG1heSBhcHBseSB0byB3aGVuIHVzZWRcbiAqIGFzIGFuIG9wdGlvbi4gSWYgaXQgaXMgdW5zZXQsIHRoZW4gdGhlIGZpZWxkIG1heSBiZSBmcmVlbHkgdXNlZCBhcyBhblxuICogb3B0aW9uIG9uIGFueSBraW5kIG9mIGVudGl0eS4gTm90ZTogYXMgb2YgSmFudWFyeSAyMDIzLCBzdXBwb3J0IGZvciB0aGlzIGlzXG4gKiBpbiBwcm9ncmVzcyBhbmQgZG9lcyBub3QgeWV0IGhhdmUgYW4gZWZmZWN0IChiLzI2NDU5MzQ4OSkuXG4gKi9cbmV4cG9ydCBlbnVtIEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlIHtcbiAgVEFSR0VUX1RZUEVfVU5LTk9XTiA9IDAsXG4gIFRBUkdFVF9UWVBFX0ZJTEUgPSAxLFxuICBUQVJHRVRfVFlQRV9FWFRFTlNJT05fUkFOR0UgPSAyLFxuICBUQVJHRVRfVFlQRV9NRVNTQUdFID0gMyxcbiAgVEFSR0VUX1RZUEVfRklFTEQgPSA0LFxuICBUQVJHRVRfVFlQRV9PTkVPRiA9IDUsXG4gIFRBUkdFVF9UWVBFX0VOVU0gPSA2LFxuICBUQVJHRVRfVFlQRV9FTlVNX0VOVFJZID0gNyxcbiAgVEFSR0VUX1RZUEVfU0VSVklDRSA9IDgsXG4gIFRBUkdFVF9UWVBFX01FVEhPRCA9IDksXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZUZyb21KU09OKG9iamVjdDogYW55KTogRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUge1xuICBzd2l0Y2ggKG9iamVjdCkge1xuICAgIGNhc2UgMDpcbiAgICBjYXNlIFwiVEFSR0VUX1RZUEVfVU5LTk9XTlwiOlxuICAgICAgcmV0dXJuIEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlLlRBUkdFVF9UWVBFX1VOS05PV047XG4gICAgY2FzZSAxOlxuICAgIGNhc2UgXCJUQVJHRVRfVFlQRV9GSUxFXCI6XG4gICAgICByZXR1cm4gRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUuVEFSR0VUX1RZUEVfRklMRTtcbiAgICBjYXNlIDI6XG4gICAgY2FzZSBcIlRBUkdFVF9UWVBFX0VYVEVOU0lPTl9SQU5HRVwiOlxuICAgICAgcmV0dXJuIEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlLlRBUkdFVF9UWVBFX0VYVEVOU0lPTl9SQU5HRTtcbiAgICBjYXNlIDM6XG4gICAgY2FzZSBcIlRBUkdFVF9UWVBFX01FU1NBR0VcIjpcbiAgICAgIHJldHVybiBGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZS5UQVJHRVRfVFlQRV9NRVNTQUdFO1xuICAgIGNhc2UgNDpcbiAgICBjYXNlIFwiVEFSR0VUX1RZUEVfRklFTERcIjpcbiAgICAgIHJldHVybiBGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZS5UQVJHRVRfVFlQRV9GSUVMRDtcbiAgICBjYXNlIDU6XG4gICAgY2FzZSBcIlRBUkdFVF9UWVBFX09ORU9GXCI6XG4gICAgICByZXR1cm4gRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUuVEFSR0VUX1RZUEVfT05FT0Y7XG4gICAgY2FzZSA2OlxuICAgIGNhc2UgXCJUQVJHRVRfVFlQRV9FTlVNXCI6XG4gICAgICByZXR1cm4gRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUuVEFSR0VUX1RZUEVfRU5VTTtcbiAgICBjYXNlIDc6XG4gICAgY2FzZSBcIlRBUkdFVF9UWVBFX0VOVU1fRU5UUllcIjpcbiAgICAgIHJldHVybiBGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZS5UQVJHRVRfVFlQRV9FTlVNX0VOVFJZO1xuICAgIGNhc2UgODpcbiAgICBjYXNlIFwiVEFSR0VUX1RZUEVfU0VSVklDRVwiOlxuICAgICAgcmV0dXJuIEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlLlRBUkdFVF9UWVBFX1NFUlZJQ0U7XG4gICAgY2FzZSA5OlxuICAgIGNhc2UgXCJUQVJHRVRfVFlQRV9NRVRIT0RcIjpcbiAgICAgIHJldHVybiBGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZS5UQVJHRVRfVFlQRV9NRVRIT0Q7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyB0c1Byb3RvR2xvYmFsVGhpcy5FcnJvcihcbiAgICAgICAgXCJVbnJlY29nbml6ZWQgZW51bSB2YWx1ZSBcIiArIG9iamVjdCArIFwiIGZvciBlbnVtIEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlXCIsXG4gICAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZVRvSlNPTihvYmplY3Q6IEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlKTogc3RyaW5nIHtcbiAgc3dpdGNoIChvYmplY3QpIHtcbiAgICBjYXNlIEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlLlRBUkdFVF9UWVBFX1VOS05PV046XG4gICAgICByZXR1cm4gXCJUQVJHRVRfVFlQRV9VTktOT1dOXCI7XG4gICAgY2FzZSBGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZS5UQVJHRVRfVFlQRV9GSUxFOlxuICAgICAgcmV0dXJuIFwiVEFSR0VUX1RZUEVfRklMRVwiO1xuICAgIGNhc2UgRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUuVEFSR0VUX1RZUEVfRVhURU5TSU9OX1JBTkdFOlxuICAgICAgcmV0dXJuIFwiVEFSR0VUX1RZUEVfRVhURU5TSU9OX1JBTkdFXCI7XG4gICAgY2FzZSBGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZS5UQVJHRVRfVFlQRV9NRVNTQUdFOlxuICAgICAgcmV0dXJuIFwiVEFSR0VUX1RZUEVfTUVTU0FHRVwiO1xuICAgIGNhc2UgRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUuVEFSR0VUX1RZUEVfRklFTEQ6XG4gICAgICByZXR1cm4gXCJUQVJHRVRfVFlQRV9GSUVMRFwiO1xuICAgIGNhc2UgRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUuVEFSR0VUX1RZUEVfT05FT0Y6XG4gICAgICByZXR1cm4gXCJUQVJHRVRfVFlQRV9PTkVPRlwiO1xuICAgIGNhc2UgRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUuVEFSR0VUX1RZUEVfRU5VTTpcbiAgICAgIHJldHVybiBcIlRBUkdFVF9UWVBFX0VOVU1cIjtcbiAgICBjYXNlIEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlLlRBUkdFVF9UWVBFX0VOVU1fRU5UUlk6XG4gICAgICByZXR1cm4gXCJUQVJHRVRfVFlQRV9FTlVNX0VOVFJZXCI7XG4gICAgY2FzZSBGaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZS5UQVJHRVRfVFlQRV9TRVJWSUNFOlxuICAgICAgcmV0dXJuIFwiVEFSR0VUX1RZUEVfU0VSVklDRVwiO1xuICAgIGNhc2UgRmllbGRPcHRpb25zX09wdGlvblRhcmdldFR5cGUuVEFSR0VUX1RZUEVfTUVUSE9EOlxuICAgICAgcmV0dXJuIFwiVEFSR0VUX1RZUEVfTUVUSE9EXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyB0c1Byb3RvR2xvYmFsVGhpcy5FcnJvcihcbiAgICAgICAgXCJVbnJlY29nbml6ZWQgZW51bSB2YWx1ZSBcIiArIG9iamVjdCArIFwiIGZvciBlbnVtIEZpZWxkT3B0aW9uc19PcHRpb25UYXJnZXRUeXBlXCIsXG4gICAgICApO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT25lb2ZPcHRpb25zIHtcbiAgLyoqIFRoZSBwYXJzZXIgc3RvcmVzIG9wdGlvbnMgaXQgZG9lc24ndCByZWNvZ25pemUgaGVyZS4gU2VlIGFib3ZlLiAqL1xuICB1bmludGVycHJldGVkT3B0aW9uOiBVbmludGVycHJldGVkT3B0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW51bU9wdGlvbnMge1xuICAvKipcbiAgICogU2V0IHRoaXMgb3B0aW9uIHRvIHRydWUgdG8gYWxsb3cgbWFwcGluZyBkaWZmZXJlbnQgdGFnIG5hbWVzIHRvIHRoZSBzYW1lXG4gICAqIHZhbHVlLlxuICAgKi9cbiAgYWxsb3dBbGlhczogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElzIHRoaXMgZW51bSBkZXByZWNhdGVkP1xuICAgKiBEZXBlbmRpbmcgb24gdGhlIHRhcmdldCBwbGF0Zm9ybSwgdGhpcyBjYW4gZW1pdCBEZXByZWNhdGVkIGFubm90YXRpb25zXG4gICAqIGZvciB0aGUgZW51bSwgb3IgaXQgd2lsbCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQ7IGluIHRoZSB2ZXJ5IGxlYXN0LCB0aGlzXG4gICAqIGlzIGEgZm9ybWFsaXphdGlvbiBmb3IgZGVwcmVjYXRpbmcgZW51bXMuXG4gICAqL1xuICBkZXByZWNhdGVkOiBib29sZWFuO1xuICAvKipcbiAgICogRW5hYmxlIHRoZSBsZWdhY3kgaGFuZGxpbmcgb2YgSlNPTiBmaWVsZCBuYW1lIGNvbmZsaWN0cy4gIFRoaXMgbG93ZXJjYXNlc1xuICAgKiBhbmQgc3RyaXBzIHVuZGVyc2NvcmVkIGZyb20gdGhlIGZpZWxkcyBiZWZvcmUgY29tcGFyaXNvbiBpbiBwcm90bzMgb25seS5cbiAgICogVGhlIG5ldyBiZWhhdmlvciB0YWtlcyBganNvbl9uYW1lYCBpbnRvIGFjY291bnQgYW5kIGFwcGxpZXMgdG8gcHJvdG8yIGFzXG4gICAqIHdlbGwuXG4gICAqIFRPRE8oYi8yNjE3NTAxOTApIFJlbW92ZSB0aGlzIGxlZ2FjeSBiZWhhdmlvciBvbmNlIGRvd25zdHJlYW0gdGVhbXMgaGF2ZVxuICAgKiBoYWQgdGltZSB0byBtaWdyYXRlLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0czogYm9vbGVhbjtcbiAgLyoqIFRoZSBwYXJzZXIgc3RvcmVzIG9wdGlvbnMgaXQgZG9lc24ndCByZWNvZ25pemUgaGVyZS4gU2VlIGFib3ZlLiAqL1xuICB1bmludGVycHJldGVkT3B0aW9uOiBVbmludGVycHJldGVkT3B0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW51bVZhbHVlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJcyB0aGlzIGVudW0gdmFsdWUgZGVwcmVjYXRlZD9cbiAgICogRGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0sIHRoaXMgY2FuIGVtaXQgRGVwcmVjYXRlZCBhbm5vdGF0aW9uc1xuICAgKiBmb3IgdGhlIGVudW0gdmFsdWUsIG9yIGl0IHdpbGwgYmUgY29tcGxldGVseSBpZ25vcmVkOyBpbiB0aGUgdmVyeSBsZWFzdCxcbiAgICogdGhpcyBpcyBhIGZvcm1hbGl6YXRpb24gZm9yIGRlcHJlY2F0aW5nIGVudW0gdmFsdWVzLlxuICAgKi9cbiAgZGVwcmVjYXRlZDogYm9vbGVhbjtcbiAgLyoqIFRoZSBwYXJzZXIgc3RvcmVzIG9wdGlvbnMgaXQgZG9lc24ndCByZWNvZ25pemUgaGVyZS4gU2VlIGFib3ZlLiAqL1xuICB1bmludGVycHJldGVkT3B0aW9uOiBVbmludGVycHJldGVkT3B0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZU9wdGlvbnMge1xuICAvKipcbiAgICogSXMgdGhpcyBzZXJ2aWNlIGRlcHJlY2F0ZWQ/XG4gICAqIERlcGVuZGluZyBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtLCB0aGlzIGNhbiBlbWl0IERlcHJlY2F0ZWQgYW5ub3RhdGlvbnNcbiAgICogZm9yIHRoZSBzZXJ2aWNlLCBvciBpdCB3aWxsIGJlIGNvbXBsZXRlbHkgaWdub3JlZDsgaW4gdGhlIHZlcnkgbGVhc3QsXG4gICAqIHRoaXMgaXMgYSBmb3JtYWxpemF0aW9uIGZvciBkZXByZWNhdGluZyBzZXJ2aWNlcy5cbiAgICovXG4gIGRlcHJlY2F0ZWQ6IGJvb2xlYW47XG4gIC8qKiBUaGUgcGFyc2VyIHN0b3JlcyBvcHRpb25zIGl0IGRvZXNuJ3QgcmVjb2duaXplIGhlcmUuIFNlZSBhYm92ZS4gKi9cbiAgdW5pbnRlcnByZXRlZE9wdGlvbjogVW5pbnRlcnByZXRlZE9wdGlvbltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1ldGhvZE9wdGlvbnMge1xuICAvKipcbiAgICogSXMgdGhpcyBtZXRob2QgZGVwcmVjYXRlZD9cbiAgICogRGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0sIHRoaXMgY2FuIGVtaXQgRGVwcmVjYXRlZCBhbm5vdGF0aW9uc1xuICAgKiBmb3IgdGhlIG1ldGhvZCwgb3IgaXQgd2lsbCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQ7IGluIHRoZSB2ZXJ5IGxlYXN0LFxuICAgKiB0aGlzIGlzIGEgZm9ybWFsaXphdGlvbiBmb3IgZGVwcmVjYXRpbmcgbWV0aG9kcy5cbiAgICovXG4gIGRlcHJlY2F0ZWQ6IGJvb2xlYW47XG4gIGlkZW1wb3RlbmN5TGV2ZWw6IE1ldGhvZE9wdGlvbnNfSWRlbXBvdGVuY3lMZXZlbDtcbiAgLyoqIFRoZSBwYXJzZXIgc3RvcmVzIG9wdGlvbnMgaXQgZG9lc24ndCByZWNvZ25pemUgaGVyZS4gU2VlIGFib3ZlLiAqL1xuICB1bmludGVycHJldGVkT3B0aW9uOiBVbmludGVycHJldGVkT3B0aW9uW107XG59XG5cbi8qKlxuICogSXMgdGhpcyBtZXRob2Qgc2lkZS1lZmZlY3QtZnJlZSAob3Igc2FmZSBpbiBIVFRQIHBhcmxhbmNlKSwgb3IgaWRlbXBvdGVudCxcbiAqIG9yIG5laXRoZXI/IEhUVFAgYmFzZWQgUlBDIGltcGxlbWVudGF0aW9uIG1heSBjaG9vc2UgR0VUIHZlcmIgZm9yIHNhZmVcbiAqIG1ldGhvZHMsIGFuZCBQVVQgdmVyYiBmb3IgaWRlbXBvdGVudCBtZXRob2RzIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgUE9TVC5cbiAqL1xuZXhwb3J0IGVudW0gTWV0aG9kT3B0aW9uc19JZGVtcG90ZW5jeUxldmVsIHtcbiAgSURFTVBPVEVOQ1lfVU5LTk9XTiA9IDAsXG4gIC8qKiBOT19TSURFX0VGRkVDVFMgLSBpbXBsaWVzIGlkZW1wb3RlbnQgKi9cbiAgTk9fU0lERV9FRkZFQ1RTID0gMSxcbiAgLyoqIElERU1QT1RFTlQgLSBpZGVtcG90ZW50LCBidXQgbWF5IGhhdmUgc2lkZSBlZmZlY3RzICovXG4gIElERU1QT1RFTlQgPSAyLFxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0aG9kT3B0aW9uc19JZGVtcG90ZW5jeUxldmVsRnJvbUpTT04ob2JqZWN0OiBhbnkpOiBNZXRob2RPcHRpb25zX0lkZW1wb3RlbmN5TGV2ZWwge1xuICBzd2l0Y2ggKG9iamVjdCkge1xuICAgIGNhc2UgMDpcbiAgICBjYXNlIFwiSURFTVBPVEVOQ1lfVU5LTk9XTlwiOlxuICAgICAgcmV0dXJuIE1ldGhvZE9wdGlvbnNfSWRlbXBvdGVuY3lMZXZlbC5JREVNUE9URU5DWV9VTktOT1dOO1xuICAgIGNhc2UgMTpcbiAgICBjYXNlIFwiTk9fU0lERV9FRkZFQ1RTXCI6XG4gICAgICByZXR1cm4gTWV0aG9kT3B0aW9uc19JZGVtcG90ZW5jeUxldmVsLk5PX1NJREVfRUZGRUNUUztcbiAgICBjYXNlIDI6XG4gICAgY2FzZSBcIklERU1QT1RFTlRcIjpcbiAgICAgIHJldHVybiBNZXRob2RPcHRpb25zX0lkZW1wb3RlbmN5TGV2ZWwuSURFTVBPVEVOVDtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IHRzUHJvdG9HbG9iYWxUaGlzLkVycm9yKFxuICAgICAgICBcIlVucmVjb2duaXplZCBlbnVtIHZhbHVlIFwiICsgb2JqZWN0ICsgXCIgZm9yIGVudW0gTWV0aG9kT3B0aW9uc19JZGVtcG90ZW5jeUxldmVsXCIsXG4gICAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRob2RPcHRpb25zX0lkZW1wb3RlbmN5TGV2ZWxUb0pTT04ob2JqZWN0OiBNZXRob2RPcHRpb25zX0lkZW1wb3RlbmN5TGV2ZWwpOiBzdHJpbmcge1xuICBzd2l0Y2ggKG9iamVjdCkge1xuICAgIGNhc2UgTWV0aG9kT3B0aW9uc19JZGVtcG90ZW5jeUxldmVsLklERU1QT1RFTkNZX1VOS05PV046XG4gICAgICByZXR1cm4gXCJJREVNUE9URU5DWV9VTktOT1dOXCI7XG4gICAgY2FzZSBNZXRob2RPcHRpb25zX0lkZW1wb3RlbmN5TGV2ZWwuTk9fU0lERV9FRkZFQ1RTOlxuICAgICAgcmV0dXJuIFwiTk9fU0lERV9FRkZFQ1RTXCI7XG4gICAgY2FzZSBNZXRob2RPcHRpb25zX0lkZW1wb3RlbmN5TGV2ZWwuSURFTVBPVEVOVDpcbiAgICAgIHJldHVybiBcIklERU1QT1RFTlRcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IHRzUHJvdG9HbG9iYWxUaGlzLkVycm9yKFxuICAgICAgICBcIlVucmVjb2duaXplZCBlbnVtIHZhbHVlIFwiICsgb2JqZWN0ICsgXCIgZm9yIGVudW0gTWV0aG9kT3B0aW9uc19JZGVtcG90ZW5jeUxldmVsXCIsXG4gICAgICApO1xuICB9XG59XG5cbi8qKlxuICogQSBtZXNzYWdlIHJlcHJlc2VudGluZyBhIG9wdGlvbiB0aGUgcGFyc2VyIGRvZXMgbm90IHJlY29nbml6ZS4gVGhpcyBvbmx5XG4gKiBhcHBlYXJzIGluIG9wdGlvbnMgcHJvdG9zIGNyZWF0ZWQgYnkgdGhlIGNvbXBpbGVyOjpQYXJzZXIgY2xhc3MuXG4gKiBEZXNjcmlwdG9yUG9vbCByZXNvbHZlcyB0aGVzZSB3aGVuIGJ1aWxkaW5nIERlc2NyaXB0b3Igb2JqZWN0cy4gVGhlcmVmb3JlLFxuICogb3B0aW9ucyBwcm90b3MgaW4gZGVzY3JpcHRvciBvYmplY3RzIChlLmcuIHJldHVybmVkIGJ5IERlc2NyaXB0b3I6Om9wdGlvbnMoKSxcbiAqIG9yIHByb2R1Y2VkIGJ5IERlc2NyaXB0b3I6OkNvcHlUbygpKSB3aWxsIG5ldmVyIGhhdmUgVW5pbnRlcnByZXRlZE9wdGlvbnNcbiAqIGluIHRoZW0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5pbnRlcnByZXRlZE9wdGlvbiB7XG4gIG5hbWU6IFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnRbXTtcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgdW5pbnRlcnByZXRlZCBvcHRpb24sIGluIHdoYXRldmVyIHR5cGUgdGhlIHRva2VuaXplclxuICAgKiBpZGVudGlmaWVkIGl0IGFzIGR1cmluZyBwYXJzaW5nLiBFeGFjdGx5IG9uZSBvZiB0aGVzZSBzaG91bGQgYmUgc2V0LlxuICAgKi9cbiAgaWRlbnRpZmllclZhbHVlOiBzdHJpbmc7XG4gIHBvc2l0aXZlSW50VmFsdWU6IG51bWJlcjtcbiAgbmVnYXRpdmVJbnRWYWx1ZTogbnVtYmVyO1xuICBkb3VibGVWYWx1ZTogbnVtYmVyO1xuICBzdHJpbmdWYWx1ZTogVWludDhBcnJheTtcbiAgYWdncmVnYXRlVmFsdWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgdW5pbnRlcnByZXRlZCBvcHRpb24uICBFYWNoIHN0cmluZyByZXByZXNlbnRzIGEgc2VnbWVudCBpblxuICogYSBkb3Qtc2VwYXJhdGVkIG5hbWUuICBpc19leHRlbnNpb24gaXMgdHJ1ZSBpZmYgYSBzZWdtZW50IHJlcHJlc2VudHMgYW5cbiAqIGV4dGVuc2lvbiAoZGVub3RlZCB3aXRoIHBhcmVudGhlc2VzIGluIG9wdGlvbnMgc3BlY3MgaW4gLnByb3RvIGZpbGVzKS5cbiAqIEUuZy4seyBbXCJmb29cIiwgZmFsc2VdLCBbXCJiYXIuYmF6XCIsIHRydWVdLCBbXCJtb29cIiwgZmFsc2VdIH0gcmVwcmVzZW50c1xuICogXCJmb28uKGJhci5iYXopLm1vb1wiLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQge1xuICBuYW1lUGFydDogc3RyaW5nO1xuICBpc0V4dGVuc2lvbjogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBFbmNhcHN1bGF0ZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIGZyb20gd2hpY2ggYVxuICogRmlsZURlc2NyaXB0b3JQcm90byB3YXMgZ2VuZXJhdGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvdXJjZUNvZGVJbmZvIHtcbiAgLyoqXG4gICAqIEEgTG9jYXRpb24gaWRlbnRpZmllcyBhIHBpZWNlIG9mIHNvdXJjZSBjb2RlIGluIGEgLnByb3RvIGZpbGUgd2hpY2hcbiAgICogY29ycmVzcG9uZHMgdG8gYSBwYXJ0aWN1bGFyIGRlZmluaXRpb24uICBUaGlzIGluZm9ybWF0aW9uIGlzIGludGVuZGVkXG4gICAqIHRvIGJlIHVzZWZ1bCB0byBJREVzLCBjb2RlIGluZGV4ZXJzLCBkb2N1bWVudGF0aW9uIGdlbmVyYXRvcnMsIGFuZCBzaW1pbGFyXG4gICAqIHRvb2xzLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgc2F5IHdlIGhhdmUgYSBmaWxlIGxpa2U6XG4gICAqICAgbWVzc2FnZSBGb28ge1xuICAgKiAgICAgb3B0aW9uYWwgc3RyaW5nIGZvbyA9IDE7XG4gICAqICAgfVxuICAgKiBMZXQncyBsb29rIGF0IGp1c3QgdGhlIGZpZWxkIGRlZmluaXRpb246XG4gICAqICAgb3B0aW9uYWwgc3RyaW5nIGZvbyA9IDE7XG4gICAqICAgXiAgICAgICBeXiAgICAgXl4gIF4gIF5eXlxuICAgKiAgIGEgICAgICAgYmMgICAgIGRlICBmICBnaGlcbiAgICogV2UgaGF2ZSB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcbiAgICogICBzcGFuICAgcGF0aCAgICAgICAgICAgICAgIHJlcHJlc2VudHNcbiAgICogICBbYSxpKSAgWyA0LCAwLCAyLCAwIF0gICAgIFRoZSB3aG9sZSBmaWVsZCBkZWZpbml0aW9uLlxuICAgKiAgIFthLGIpICBbIDQsIDAsIDIsIDAsIDQgXSAgVGhlIGxhYmVsIChvcHRpb25hbCkuXG4gICAqICAgW2MsZCkgIFsgNCwgMCwgMiwgMCwgNSBdICBUaGUgdHlwZSAoc3RyaW5nKS5cbiAgICogICBbZSxmKSAgWyA0LCAwLCAyLCAwLCAxIF0gIFRoZSBuYW1lIChmb28pLlxuICAgKiAgIFtnLGgpICBbIDQsIDAsIDIsIDAsIDMgXSAgVGhlIG51bWJlciAoMSkuXG4gICAqXG4gICAqIE5vdGVzOlxuICAgKiAtIEEgbG9jYXRpb24gbWF5IHJlZmVyIHRvIGEgcmVwZWF0ZWQgZmllbGQgaXRzZWxmIChpLmUuIG5vdCB0byBhbnlcbiAgICogICBwYXJ0aWN1bGFyIGluZGV4IHdpdGhpbiBpdCkuICBUaGlzIGlzIHVzZWQgd2hlbmV2ZXIgYSBzZXQgb2YgZWxlbWVudHMgYXJlXG4gICAqICAgbG9naWNhbGx5IGVuY2xvc2VkIGluIGEgc2luZ2xlIGNvZGUgc2VnbWVudC4gIEZvciBleGFtcGxlLCBhbiBlbnRpcmVcbiAgICogICBleHRlbmQgYmxvY2sgKHBvc3NpYmx5IGNvbnRhaW5pbmcgbXVsdGlwbGUgZXh0ZW5zaW9uIGRlZmluaXRpb25zKSB3aWxsXG4gICAqICAgaGF2ZSBhbiBvdXRlciBsb2NhdGlvbiB3aG9zZSBwYXRoIHJlZmVycyB0byB0aGUgXCJleHRlbnNpb25zXCIgcmVwZWF0ZWRcbiAgICogICBmaWVsZCB3aXRob3V0IGFuIGluZGV4LlxuICAgKiAtIE11bHRpcGxlIGxvY2F0aW9ucyBtYXkgaGF2ZSB0aGUgc2FtZSBwYXRoLiAgVGhpcyBoYXBwZW5zIHdoZW4gYSBzaW5nbGVcbiAgICogICBsb2dpY2FsIGRlY2xhcmF0aW9uIGlzIHNwcmVhZCBvdXQgYWNyb3NzIG11bHRpcGxlIHBsYWNlcy4gIFRoZSBtb3N0XG4gICAqICAgb2J2aW91cyBleGFtcGxlIGlzIHRoZSBcImV4dGVuZFwiIGJsb2NrIGFnYWluIC0tIHRoZXJlIG1heSBiZSBtdWx0aXBsZVxuICAgKiAgIGV4dGVuZCBibG9ja3MgaW4gdGhlIHNhbWUgc2NvcGUsIGVhY2ggb2Ygd2hpY2ggd2lsbCBoYXZlIHRoZSBzYW1lIHBhdGguXG4gICAqIC0gQSBsb2NhdGlvbidzIHNwYW4gaXMgbm90IGFsd2F5cyBhIHN1YnNldCBvZiBpdHMgcGFyZW50J3Mgc3Bhbi4gIEZvclxuICAgKiAgIGV4YW1wbGUsIHRoZSBcImV4dGVuZGVlXCIgb2YgYW4gZXh0ZW5zaW9uIGRlY2xhcmF0aW9uIGFwcGVhcnMgYXQgdGhlXG4gICAqICAgYmVnaW5uaW5nIG9mIHRoZSBcImV4dGVuZFwiIGJsb2NrIGFuZCBpcyBzaGFyZWQgYnkgYWxsIGV4dGVuc2lvbnMgd2l0aGluXG4gICAqICAgdGhlIGJsb2NrLlxuICAgKiAtIEp1c3QgYmVjYXVzZSBhIGxvY2F0aW9uJ3Mgc3BhbiBpcyBhIHN1YnNldCBvZiBzb21lIG90aGVyIGxvY2F0aW9uJ3Mgc3BhblxuICAgKiAgIGRvZXMgbm90IG1lYW4gdGhhdCBpdCBpcyBhIGRlc2NlbmRhbnQuICBGb3IgZXhhbXBsZSwgYSBcImdyb3VwXCIgZGVmaW5lc1xuICAgKiAgIGJvdGggYSB0eXBlIGFuZCBhIGZpZWxkIGluIGEgc2luZ2xlIGRlY2xhcmF0aW9uLiAgVGh1cywgdGhlIGxvY2F0aW9uc1xuICAgKiAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHR5cGUgYW5kIGZpZWxkIGFuZCB0aGVpciBjb21wb25lbnRzIHdpbGwgb3ZlcmxhcC5cbiAgICogLSBDb2RlIHdoaWNoIHRyaWVzIHRvIGludGVycHJldCBsb2NhdGlvbnMgc2hvdWxkIHByb2JhYmx5IGJlIGRlc2lnbmVkIHRvXG4gICAqICAgaWdub3JlIHRob3NlIHRoYXQgaXQgZG9lc24ndCB1bmRlcnN0YW5kLCBhcyBtb3JlIHR5cGVzIG9mIGxvY2F0aW9ucyBjb3VsZFxuICAgKiAgIGJlIHJlY29yZGVkIGluIHRoZSBmdXR1cmUuXG4gICAqL1xuICBsb2NhdGlvbjogU291cmNlQ29kZUluZm9fTG9jYXRpb25bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbiB7XG4gIC8qKlxuICAgKiBJZGVudGlmaWVzIHdoaWNoIHBhcnQgb2YgdGhlIEZpbGVEZXNjcmlwdG9yUHJvdG8gd2FzIGRlZmluZWQgYXQgdGhpc1xuICAgKiBsb2NhdGlvbi5cbiAgICpcbiAgICogRWFjaCBlbGVtZW50IGlzIGEgZmllbGQgbnVtYmVyIG9yIGFuIGluZGV4LiAgVGhleSBmb3JtIGEgcGF0aCBmcm9tXG4gICAqIHRoZSByb290IEZpbGVEZXNjcmlwdG9yUHJvdG8gdG8gdGhlIHBsYWNlIHdoZXJlIHRoZSBkZWZpbml0aW9uIG9jY3Vycy5cbiAgICogRm9yIGV4YW1wbGUsIHRoaXMgcGF0aDpcbiAgICogICBbIDQsIDMsIDIsIDcsIDEgXVxuICAgKiByZWZlcnMgdG86XG4gICAqICAgZmlsZS5tZXNzYWdlX3R5cGUoMykgIC8vIDQsIDNcbiAgICogICAgICAgLmZpZWxkKDcpICAgICAgICAgLy8gMiwgN1xuICAgKiAgICAgICAubmFtZSgpICAgICAgICAgICAvLyAxXG4gICAqIFRoaXMgaXMgYmVjYXVzZSBGaWxlRGVzY3JpcHRvclByb3RvLm1lc3NhZ2VfdHlwZSBoYXMgZmllbGQgbnVtYmVyIDQ6XG4gICAqICAgcmVwZWF0ZWQgRGVzY3JpcHRvclByb3RvIG1lc3NhZ2VfdHlwZSA9IDQ7XG4gICAqIGFuZCBEZXNjcmlwdG9yUHJvdG8uZmllbGQgaGFzIGZpZWxkIG51bWJlciAyOlxuICAgKiAgIHJlcGVhdGVkIEZpZWxkRGVzY3JpcHRvclByb3RvIGZpZWxkID0gMjtcbiAgICogYW5kIEZpZWxkRGVzY3JpcHRvclByb3RvLm5hbWUgaGFzIGZpZWxkIG51bWJlciAxOlxuICAgKiAgIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTtcbiAgICpcbiAgICogVGh1cywgdGhlIGFib3ZlIHBhdGggZ2l2ZXMgdGhlIGxvY2F0aW9uIG9mIGEgZmllbGQgbmFtZS4gIElmIHdlIHJlbW92ZWRcbiAgICogdGhlIGxhc3QgZWxlbWVudDpcbiAgICogICBbIDQsIDMsIDIsIDcgXVxuICAgKiB0aGlzIHBhdGggcmVmZXJzIHRvIHRoZSB3aG9sZSBmaWVsZCBkZWNsYXJhdGlvbiAoZnJvbSB0aGUgYmVnaW5uaW5nXG4gICAqIG9mIHRoZSBsYWJlbCB0byB0aGUgdGVybWluYXRpbmcgc2VtaWNvbG9uKS5cbiAgICovXG4gIHBhdGg6IG51bWJlcltdO1xuICAvKipcbiAgICogQWx3YXlzIGhhcyBleGFjdGx5IHRocmVlIG9yIGZvdXIgZWxlbWVudHM6IHN0YXJ0IGxpbmUsIHN0YXJ0IGNvbHVtbixcbiAgICogZW5kIGxpbmUgKG9wdGlvbmFsLCBvdGhlcndpc2UgYXNzdW1lZCBzYW1lIGFzIHN0YXJ0IGxpbmUpLCBlbmQgY29sdW1uLlxuICAgKiBUaGVzZSBhcmUgcGFja2VkIGludG8gYSBzaW5nbGUgZmllbGQgZm9yIGVmZmljaWVuY3kuICBOb3RlIHRoYXQgbGluZVxuICAgKiBhbmQgY29sdW1uIG51bWJlcnMgYXJlIHplcm8tYmFzZWQgLS0gdHlwaWNhbGx5IHlvdSB3aWxsIHdhbnQgdG8gYWRkXG4gICAqIDEgdG8gZWFjaCBiZWZvcmUgZGlzcGxheWluZyB0byBhIHVzZXIuXG4gICAqL1xuICBzcGFuOiBudW1iZXJbXTtcbiAgLyoqXG4gICAqIElmIHRoaXMgU291cmNlQ29kZUluZm8gcmVwcmVzZW50cyBhIGNvbXBsZXRlIGRlY2xhcmF0aW9uLCB0aGVzZSBhcmUgYW55XG4gICAqIGNvbW1lbnRzIGFwcGVhcmluZyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBkZWNsYXJhdGlvbiB3aGljaCBhcHBlYXIgdG8gYmVcbiAgICogYXR0YWNoZWQgdG8gdGhlIGRlY2xhcmF0aW9uLlxuICAgKlxuICAgKiBBIHNlcmllcyBvZiBsaW5lIGNvbW1lbnRzIGFwcGVhcmluZyBvbiBjb25zZWN1dGl2ZSBsaW5lcywgd2l0aCBubyBvdGhlclxuICAgKiB0b2tlbnMgYXBwZWFyaW5nIG9uIHRob3NlIGxpbmVzLCB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGUgY29tbWVudC5cbiAgICpcbiAgICogbGVhZGluZ19kZXRhY2hlZF9jb21tZW50cyB3aWxsIGtlZXAgcGFyYWdyYXBocyBvZiBjb21tZW50cyB0aGF0IGFwcGVhclxuICAgKiBiZWZvcmUgKGJ1dCBub3QgY29ubmVjdGVkIHRvKSB0aGUgY3VycmVudCBlbGVtZW50LiBFYWNoIHBhcmFncmFwaCxcbiAgICogc2VwYXJhdGVkIGJ5IGVtcHR5IGxpbmVzLCB3aWxsIGJlIG9uZSBjb21tZW50IGVsZW1lbnQgaW4gdGhlIHJlcGVhdGVkXG4gICAqIGZpZWxkLlxuICAgKlxuICAgKiBPbmx5IHRoZSBjb21tZW50IGNvbnRlbnQgaXMgcHJvdmlkZWQ7IGNvbW1lbnQgbWFya2VycyAoZS5nLiAvLykgYXJlXG4gICAqIHN0cmlwcGVkIG91dC4gIEZvciBibG9jayBjb21tZW50cywgbGVhZGluZyB3aGl0ZXNwYWNlIGFuZCBhbiBhc3Rlcmlza1xuICAgKiB3aWxsIGJlIHN0cmlwcGVkIGZyb20gdGhlIGJlZ2lubmluZyBvZiBlYWNoIGxpbmUgb3RoZXIgdGhhbiB0aGUgZmlyc3QuXG4gICAqIE5ld2xpbmVzIGFyZSBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0LlxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICBvcHRpb25hbCBpbnQzMiBmb28gPSAxOyAgLy8gQ29tbWVudCBhdHRhY2hlZCB0byBmb28uXG4gICAqICAgLy8gQ29tbWVudCBhdHRhY2hlZCB0byBiYXIuXG4gICAqICAgb3B0aW9uYWwgaW50MzIgYmFyID0gMjtcbiAgICpcbiAgICogICBvcHRpb25hbCBzdHJpbmcgYmF6ID0gMztcbiAgICogICAvLyBDb21tZW50IGF0dGFjaGVkIHRvIGJhei5cbiAgICogICAvLyBBbm90aGVyIGxpbmUgYXR0YWNoZWQgdG8gYmF6LlxuICAgKlxuICAgKiAgIC8vIENvbW1lbnQgYXR0YWNoZWQgdG8gbW9vLlxuICAgKiAgIC8vXG4gICAqICAgLy8gQW5vdGhlciBsaW5lIGF0dGFjaGVkIHRvIG1vby5cbiAgICogICBvcHRpb25hbCBkb3VibGUgbW9vID0gNDtcbiAgICpcbiAgICogICAvLyBEZXRhY2hlZCBjb21tZW50IGZvciBjb3JnZS4gVGhpcyBpcyBub3QgbGVhZGluZyBvciB0cmFpbGluZyBjb21tZW50c1xuICAgKiAgIC8vIHRvIG1vbyBvciBjb3JnZSBiZWNhdXNlIHRoZXJlIGFyZSBibGFuayBsaW5lcyBzZXBhcmF0aW5nIGl0IGZyb21cbiAgICogICAvLyBib3RoLlxuICAgKlxuICAgKiAgIC8vIERldGFjaGVkIGNvbW1lbnQgZm9yIGNvcmdlIHBhcmFncmFwaCAyLlxuICAgKlxuICAgKiAgIG9wdGlvbmFsIHN0cmluZyBjb3JnZSA9IDU7XG4gICAqICAgLyogQmxvY2sgY29tbWVudCBhdHRhY2hlZFxuICAgKiAgICAqIHRvIGNvcmdlLiAgTGVhZGluZyBhc3Rlcmlza3NcbiAgICogICAgKiB3aWxsIGJlIHJlbW92ZWQuICogL1xuICAgKiAgIC8qIEJsb2NrIGNvbW1lbnQgYXR0YWNoZWQgdG9cbiAgICogICAgKiBncmF1bHQuICogL1xuICAgKiAgIG9wdGlvbmFsIGludDMyIGdyYXVsdCA9IDY7XG4gICAqXG4gICAqICAgLy8gaWdub3JlZCBkZXRhY2hlZCBjb21tZW50cy5cbiAgICovXG4gIGxlYWRpbmdDb21tZW50czogc3RyaW5nO1xuICB0cmFpbGluZ0NvbW1lbnRzOiBzdHJpbmc7XG4gIGxlYWRpbmdEZXRhY2hlZENvbW1lbnRzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGdlbmVyYXRlZCBjb2RlIGFuZCBpdHMgb3JpZ2luYWwgc291cmNlXG4gKiBmaWxlLiBBIEdlbmVyYXRlZENvZGVJbmZvIG1lc3NhZ2UgaXMgYXNzb2NpYXRlZCB3aXRoIG9ubHkgb25lIGdlbmVyYXRlZFxuICogc291cmNlIGZpbGUsIGJ1dCBtYXkgY29udGFpbiByZWZlcmVuY2VzIHRvIGRpZmZlcmVudCBzb3VyY2UgLnByb3RvIGZpbGVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlZENvZGVJbmZvIHtcbiAgLyoqXG4gICAqIEFuIEFubm90YXRpb24gY29ubmVjdHMgc29tZSBzcGFuIG9mIHRleHQgaW4gZ2VuZXJhdGVkIGNvZGUgdG8gYW4gZWxlbWVudFxuICAgKiBvZiBpdHMgZ2VuZXJhdGluZyAucHJvdG8gZmlsZS5cbiAgICovXG4gIGFubm90YXRpb246IEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uIHtcbiAgLyoqXG4gICAqIElkZW50aWZpZXMgdGhlIGVsZW1lbnQgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSAucHJvdG8gZmlsZS4gVGhpcyBmaWVsZFxuICAgKiBpcyBmb3JtYXR0ZWQgdGhlIHNhbWUgYXMgU291cmNlQ29kZUluZm8uTG9jYXRpb24ucGF0aC5cbiAgICovXG4gIHBhdGg6IG51bWJlcltdO1xuICAvKiogSWRlbnRpZmllcyB0aGUgZmlsZXN5c3RlbSBwYXRoIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgLnByb3RvLiAqL1xuICBzb3VyY2VGaWxlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJZGVudGlmaWVzIHRoZSBzdGFydGluZyBvZmZzZXQgaW4gYnl0ZXMgaW4gdGhlIGdlbmVyYXRlZCBjb2RlXG4gICAqIHRoYXQgcmVsYXRlcyB0byB0aGUgaWRlbnRpZmllZCBvYmplY3QuXG4gICAqL1xuICBiZWdpbjogbnVtYmVyO1xuICAvKipcbiAgICogSWRlbnRpZmllcyB0aGUgZW5kaW5nIG9mZnNldCBpbiBieXRlcyBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUgdGhhdFxuICAgKiByZWxhdGVzIHRvIHRoZSBpZGVudGlmaWVkIG9iamVjdC4gVGhlIGVuZCBvZmZzZXQgc2hvdWxkIGJlIG9uZSBwYXN0XG4gICAqIHRoZSBsYXN0IHJlbGV2YW50IGJ5dGUgKHNvIHRoZSBsZW5ndGggb2YgdGhlIHRleHQgPSBlbmQgLSBiZWdpbikuXG4gICAqL1xuICBlbmQ6IG51bWJlcjtcbiAgc2VtYW50aWM6IEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25fU2VtYW50aWM7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgaWRlbnRpZmllZCBvYmplY3QncyBlZmZlY3Qgb24gdGhlIGVsZW1lbnQgaW4gdGhlIG9yaWdpbmFsXG4gKiAucHJvdG8gZmlsZS5cbiAqL1xuZXhwb3J0IGVudW0gR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9TZW1hbnRpYyB7XG4gIC8qKiBOT05FIC0gVGhlcmUgaXMgbm8gZWZmZWN0IG9yIHRoZSBlZmZlY3QgaXMgaW5kZXNjcmliYWJsZS4gKi9cbiAgTk9ORSA9IDAsXG4gIC8qKiBTRVQgLSBUaGUgZWxlbWVudCBpcyBzZXQgb3Igb3RoZXJ3aXNlIG11dGF0ZWQuICovXG4gIFNFVCA9IDEsXG4gIC8qKiBBTElBUyAtIEFuIGFsaWFzIHRvIHRoZSBlbGVtZW50IGlzIHJldHVybmVkLiAqL1xuICBBTElBUyA9IDIsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljRnJvbUpTT04ob2JqZWN0OiBhbnkpOiBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljIHtcbiAgc3dpdGNoIChvYmplY3QpIHtcbiAgICBjYXNlIDA6XG4gICAgY2FzZSBcIk5PTkVcIjpcbiAgICAgIHJldHVybiBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljLk5PTkU7XG4gICAgY2FzZSAxOlxuICAgIGNhc2UgXCJTRVRcIjpcbiAgICAgIHJldHVybiBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljLlNFVDtcbiAgICBjYXNlIDI6XG4gICAgY2FzZSBcIkFMSUFTXCI6XG4gICAgICByZXR1cm4gR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9TZW1hbnRpYy5BTElBUztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IHRzUHJvdG9HbG9iYWxUaGlzLkVycm9yKFxuICAgICAgICBcIlVucmVjb2duaXplZCBlbnVtIHZhbHVlIFwiICsgb2JqZWN0ICsgXCIgZm9yIGVudW0gR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9TZW1hbnRpY1wiLFxuICAgICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9TZW1hbnRpY1RvSlNPTihvYmplY3Q6IEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25fU2VtYW50aWMpOiBzdHJpbmcge1xuICBzd2l0Y2ggKG9iamVjdCkge1xuICAgIGNhc2UgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9TZW1hbnRpYy5OT05FOlxuICAgICAgcmV0dXJuIFwiTk9ORVwiO1xuICAgIGNhc2UgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9TZW1hbnRpYy5TRVQ6XG4gICAgICByZXR1cm4gXCJTRVRcIjtcbiAgICBjYXNlIEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25fU2VtYW50aWMuQUxJQVM6XG4gICAgICByZXR1cm4gXCJBTElBU1wiO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgdHNQcm90b0dsb2JhbFRoaXMuRXJyb3IoXG4gICAgICAgIFwiVW5yZWNvZ25pemVkIGVudW0gdmFsdWUgXCIgKyBvYmplY3QgKyBcIiBmb3IgZW51bSBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uX1NlbWFudGljXCIsXG4gICAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VGaWxlRGVzY3JpcHRvclNldCgpOiBGaWxlRGVzY3JpcHRvclNldCB7XG4gIHJldHVybiB7IGZpbGU6IFtdIH07XG59XG5cbmV4cG9ydCBjb25zdCBGaWxlRGVzY3JpcHRvclNldCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IEZpbGVEZXNjcmlwdG9yU2V0LCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UuZmlsZSkge1xuICAgICAgRmlsZURlc2NyaXB0b3JQcm90by5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogRmlsZURlc2NyaXB0b3JTZXQge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRmlsZURlc2NyaXB0b3JTZXQoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmZpbGUucHVzaChGaWxlRGVzY3JpcHRvclByb3RvLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogRmlsZURlc2NyaXB0b3JTZXQge1xuICAgIHJldHVybiB7IGZpbGU6IEFycmF5LmlzQXJyYXkob2JqZWN0Py5maWxlKSA/IG9iamVjdC5maWxlLm1hcCgoZTogYW55KSA9PiBGaWxlRGVzY3JpcHRvclByb3RvLmZyb21KU09OKGUpKSA6IFtdIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IEZpbGVEZXNjcmlwdG9yU2V0KTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBpZiAobWVzc2FnZS5maWxlPy5sZW5ndGgpIHtcbiAgICAgIG9iai5maWxlID0gbWVzc2FnZS5maWxlLm1hcCgoZSkgPT4gRmlsZURlc2NyaXB0b3JQcm90by50b0pTT04oZSkpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8RmlsZURlc2NyaXB0b3JTZXQ+KTogRmlsZURlc2NyaXB0b3JTZXQge1xuICAgIHJldHVybiBGaWxlRGVzY3JpcHRvclNldC5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxGaWxlRGVzY3JpcHRvclNldD4pOiBGaWxlRGVzY3JpcHRvclNldCB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VGaWxlRGVzY3JpcHRvclNldCgpO1xuICAgIG1lc3NhZ2UuZmlsZSA9IG9iamVjdC5maWxlPy5tYXAoKGUpID0+IEZpbGVEZXNjcmlwdG9yUHJvdG8uZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZUZpbGVEZXNjcmlwdG9yUHJvdG8oKTogRmlsZURlc2NyaXB0b3JQcm90byB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogXCJcIixcbiAgICBwYWNrYWdlOiBcIlwiLFxuICAgIGRlcGVuZGVuY3k6IFtdLFxuICAgIHB1YmxpY0RlcGVuZGVuY3k6IFtdLFxuICAgIHdlYWtEZXBlbmRlbmN5OiBbXSxcbiAgICBtZXNzYWdlVHlwZTogW10sXG4gICAgZW51bVR5cGU6IFtdLFxuICAgIHNlcnZpY2U6IFtdLFxuICAgIGV4dGVuc2lvbjogW10sXG4gICAgb3B0aW9uczogdW5kZWZpbmVkLFxuICAgIHNvdXJjZUNvZGVJbmZvOiB1bmRlZmluZWQsXG4gICAgc3ludGF4OiBcIlwiLFxuICAgIGVkaXRpb246IFwiXCIsXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBGaWxlRGVzY3JpcHRvclByb3RvID0ge1xuICBlbmNvZGUobWVzc2FnZTogRmlsZURlc2NyaXB0b3JQcm90bywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLm5hbWUgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLm5hbWUpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWNrYWdlICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE4KS5zdHJpbmcobWVzc2FnZS5wYWNrYWdlKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UuZGVwZW5kZW5jeSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNikuc3RyaW5nKHYhKTtcbiAgICB9XG4gICAgd3JpdGVyLnVpbnQzMig4MikuZm9yaygpO1xuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnB1YmxpY0RlcGVuZGVuY3kpIHtcbiAgICAgIHdyaXRlci5pbnQzMih2KTtcbiAgICB9XG4gICAgd3JpdGVyLmxkZWxpbSgpO1xuICAgIHdyaXRlci51aW50MzIoOTApLmZvcmsoKTtcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS53ZWFrRGVwZW5kZW5jeSkge1xuICAgICAgd3JpdGVyLmludDMyKHYpO1xuICAgIH1cbiAgICB3cml0ZXIubGRlbGltKCk7XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UubWVzc2FnZVR5cGUpIHtcbiAgICAgIERlc2NyaXB0b3JQcm90by5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLmVudW1UeXBlKSB7XG4gICAgICBFbnVtRGVzY3JpcHRvclByb3RvLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2Uuc2VydmljZSkge1xuICAgICAgU2VydmljZURlc2NyaXB0b3JQcm90by5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoNTApLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLmV4dGVuc2lvbikge1xuICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG8uZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDU4KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIEZpbGVPcHRpb25zLmVuY29kZShtZXNzYWdlLm9wdGlvbnMsIHdyaXRlci51aW50MzIoNjYpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNvdXJjZUNvZGVJbmZvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFNvdXJjZUNvZGVJbmZvLmVuY29kZShtZXNzYWdlLnNvdXJjZUNvZGVJbmZvLCB3cml0ZXIudWludDMyKDc0KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zeW50YXggIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOTgpLnN0cmluZyhtZXNzYWdlLnN5bnRheCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmVkaXRpb24gIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTA2KS5zdHJpbmcobWVzc2FnZS5lZGl0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBGaWxlRGVzY3JpcHRvclByb3RvIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUZpbGVEZXNjcmlwdG9yUHJvdG8oKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm5hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxOCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5wYWNrYWdlID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMjYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZGVwZW5kZW5jeS5wdXNoKHJlYWRlci5zdHJpbmcoKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgaWYgKHRhZyA9PT0gODApIHtcbiAgICAgICAgICAgIG1lc3NhZ2UucHVibGljRGVwZW5kZW5jeS5wdXNoKHJlYWRlci5pbnQzMigpKTtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRhZyA9PT0gODIpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZDIgPSByZWFkZXIudWludDMyKCkgKyByZWFkZXIucG9zO1xuICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQyKSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2UucHVibGljRGVwZW5kZW5jeS5wdXNoKHJlYWRlci5pbnQzMigpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgaWYgKHRhZyA9PT0gODgpIHtcbiAgICAgICAgICAgIG1lc3NhZ2Uud2Vha0RlcGVuZGVuY3kucHVzaChyZWFkZXIuaW50MzIoKSk7XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0YWcgPT09IDkwKSB7XG4gICAgICAgICAgICBjb25zdCBlbmQyID0gcmVhZGVyLnVpbnQzMigpICsgcmVhZGVyLnBvcztcbiAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kMikge1xuICAgICAgICAgICAgICBtZXNzYWdlLndlYWtEZXBlbmRlbmN5LnB1c2gocmVhZGVyLmludDMyKCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGlmICh0YWcgIT09IDM0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm1lc3NhZ2VUeXBlLnB1c2goRGVzY3JpcHRvclByb3RvLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNDIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZW51bVR5cGUucHVzaChFbnVtRGVzY3JpcHRvclByb3RvLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uuc2VydmljZS5wdXNoKFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8uZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBpZiAodGFnICE9PSA1OCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5leHRlbnNpb24ucHVzaChGaWVsZERlc2NyaXB0b3JQcm90by5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIGlmICh0YWcgIT09IDY2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm9wdGlvbnMgPSBGaWxlT3B0aW9ucy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNzQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uuc291cmNlQ29kZUluZm8gPSBTb3VyY2VDb2RlSW5mby5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgIGlmICh0YWcgIT09IDk4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnN5bnRheCA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMDYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZWRpdGlvbiA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IEZpbGVEZXNjcmlwdG9yUHJvdG8ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBpc1NldChvYmplY3QubmFtZSkgPyBTdHJpbmcob2JqZWN0Lm5hbWUpIDogXCJcIixcbiAgICAgIHBhY2thZ2U6IGlzU2V0KG9iamVjdC5wYWNrYWdlKSA/IFN0cmluZyhvYmplY3QucGFja2FnZSkgOiBcIlwiLFxuICAgICAgZGVwZW5kZW5jeTogQXJyYXkuaXNBcnJheShvYmplY3Q/LmRlcGVuZGVuY3kpID8gb2JqZWN0LmRlcGVuZGVuY3kubWFwKChlOiBhbnkpID0+IFN0cmluZyhlKSkgOiBbXSxcbiAgICAgIHB1YmxpY0RlcGVuZGVuY3k6IEFycmF5LmlzQXJyYXkob2JqZWN0Py5wdWJsaWNEZXBlbmRlbmN5KVxuICAgICAgICA/IG9iamVjdC5wdWJsaWNEZXBlbmRlbmN5Lm1hcCgoZTogYW55KSA9PiBOdW1iZXIoZSkpXG4gICAgICAgIDogW10sXG4gICAgICB3ZWFrRGVwZW5kZW5jeTogQXJyYXkuaXNBcnJheShvYmplY3Q/LndlYWtEZXBlbmRlbmN5KSA/IG9iamVjdC53ZWFrRGVwZW5kZW5jeS5tYXAoKGU6IGFueSkgPT4gTnVtYmVyKGUpKSA6IFtdLFxuICAgICAgbWVzc2FnZVR5cGU6IEFycmF5LmlzQXJyYXkob2JqZWN0Py5tZXNzYWdlVHlwZSlcbiAgICAgICAgPyBvYmplY3QubWVzc2FnZVR5cGUubWFwKChlOiBhbnkpID0+IERlc2NyaXB0b3JQcm90by5mcm9tSlNPTihlKSlcbiAgICAgICAgOiBbXSxcbiAgICAgIGVudW1UeXBlOiBBcnJheS5pc0FycmF5KG9iamVjdD8uZW51bVR5cGUpID8gb2JqZWN0LmVudW1UeXBlLm1hcCgoZTogYW55KSA9PiBFbnVtRGVzY3JpcHRvclByb3RvLmZyb21KU09OKGUpKSA6IFtdLFxuICAgICAgc2VydmljZTogQXJyYXkuaXNBcnJheShvYmplY3Q/LnNlcnZpY2UpID8gb2JqZWN0LnNlcnZpY2UubWFwKChlOiBhbnkpID0+IFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8uZnJvbUpTT04oZSkpIDogW10sXG4gICAgICBleHRlbnNpb246IEFycmF5LmlzQXJyYXkob2JqZWN0Py5leHRlbnNpb24pXG4gICAgICAgID8gb2JqZWN0LmV4dGVuc2lvbi5tYXAoKGU6IGFueSkgPT4gRmllbGREZXNjcmlwdG9yUHJvdG8uZnJvbUpTT04oZSkpXG4gICAgICAgIDogW10sXG4gICAgICBvcHRpb25zOiBpc1NldChvYmplY3Qub3B0aW9ucykgPyBGaWxlT3B0aW9ucy5mcm9tSlNPTihvYmplY3Qub3B0aW9ucykgOiB1bmRlZmluZWQsXG4gICAgICBzb3VyY2VDb2RlSW5mbzogaXNTZXQob2JqZWN0LnNvdXJjZUNvZGVJbmZvKSA/IFNvdXJjZUNvZGVJbmZvLmZyb21KU09OKG9iamVjdC5zb3VyY2VDb2RlSW5mbykgOiB1bmRlZmluZWQsXG4gICAgICBzeW50YXg6IGlzU2V0KG9iamVjdC5zeW50YXgpID8gU3RyaW5nKG9iamVjdC5zeW50YXgpIDogXCJcIixcbiAgICAgIGVkaXRpb246IGlzU2V0KG9iamVjdC5lZGl0aW9uKSA/IFN0cmluZyhvYmplY3QuZWRpdGlvbikgOiBcIlwiLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IEZpbGVEZXNjcmlwdG9yUHJvdG8pOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIGlmIChtZXNzYWdlLm5hbWUgIT09IFwiXCIpIHtcbiAgICAgIG9iai5uYW1lID0gbWVzc2FnZS5uYW1lO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWNrYWdlICE9PSBcIlwiKSB7XG4gICAgICBvYmoucGFja2FnZSA9IG1lc3NhZ2UucGFja2FnZTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZGVwZW5kZW5jeT8ubGVuZ3RoKSB7XG4gICAgICBvYmouZGVwZW5kZW5jeSA9IG1lc3NhZ2UuZGVwZW5kZW5jeTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucHVibGljRGVwZW5kZW5jeT8ubGVuZ3RoKSB7XG4gICAgICBvYmoucHVibGljRGVwZW5kZW5jeSA9IG1lc3NhZ2UucHVibGljRGVwZW5kZW5jeS5tYXAoKGUpID0+IE1hdGgucm91bmQoZSkpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS53ZWFrRGVwZW5kZW5jeT8ubGVuZ3RoKSB7XG4gICAgICBvYmoud2Vha0RlcGVuZGVuY3kgPSBtZXNzYWdlLndlYWtEZXBlbmRlbmN5Lm1hcCgoZSkgPT4gTWF0aC5yb3VuZChlKSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1lc3NhZ2VUeXBlPy5sZW5ndGgpIHtcbiAgICAgIG9iai5tZXNzYWdlVHlwZSA9IG1lc3NhZ2UubWVzc2FnZVR5cGUubWFwKChlKSA9PiBEZXNjcmlwdG9yUHJvdG8udG9KU09OKGUpKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZW51bVR5cGU/Lmxlbmd0aCkge1xuICAgICAgb2JqLmVudW1UeXBlID0gbWVzc2FnZS5lbnVtVHlwZS5tYXAoKGUpID0+IEVudW1EZXNjcmlwdG9yUHJvdG8udG9KU09OKGUpKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc2VydmljZT8ubGVuZ3RoKSB7XG4gICAgICBvYmouc2VydmljZSA9IG1lc3NhZ2Uuc2VydmljZS5tYXAoKGUpID0+IFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8udG9KU09OKGUpKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZXh0ZW5zaW9uPy5sZW5ndGgpIHtcbiAgICAgIG9iai5leHRlbnNpb24gPSBtZXNzYWdlLmV4dGVuc2lvbi5tYXAoKGUpID0+IEZpZWxkRGVzY3JpcHRvclByb3RvLnRvSlNPTihlKSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb2JqLm9wdGlvbnMgPSBGaWxlT3B0aW9ucy50b0pTT04obWVzc2FnZS5vcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc291cmNlQ29kZUluZm8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgb2JqLnNvdXJjZUNvZGVJbmZvID0gU291cmNlQ29kZUluZm8udG9KU09OKG1lc3NhZ2Uuc291cmNlQ29kZUluZm8pO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zeW50YXggIT09IFwiXCIpIHtcbiAgICAgIG9iai5zeW50YXggPSBtZXNzYWdlLnN5bnRheDtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZWRpdGlvbiAhPT0gXCJcIikge1xuICAgICAgb2JqLmVkaXRpb24gPSBtZXNzYWdlLmVkaXRpb247XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxGaWxlRGVzY3JpcHRvclByb3RvPik6IEZpbGVEZXNjcmlwdG9yUHJvdG8ge1xuICAgIHJldHVybiBGaWxlRGVzY3JpcHRvclByb3RvLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPEZpbGVEZXNjcmlwdG9yUHJvdG8+KTogRmlsZURlc2NyaXB0b3JQcm90byB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VGaWxlRGVzY3JpcHRvclByb3RvKCk7XG4gICAgbWVzc2FnZS5uYW1lID0gb2JqZWN0Lm5hbWUgPz8gXCJcIjtcbiAgICBtZXNzYWdlLnBhY2thZ2UgPSBvYmplY3QucGFja2FnZSA/PyBcIlwiO1xuICAgIG1lc3NhZ2UuZGVwZW5kZW5jeSA9IG9iamVjdC5kZXBlbmRlbmN5Py5tYXAoKGUpID0+IGUpIHx8IFtdO1xuICAgIG1lc3NhZ2UucHVibGljRGVwZW5kZW5jeSA9IG9iamVjdC5wdWJsaWNEZXBlbmRlbmN5Py5tYXAoKGUpID0+IGUpIHx8IFtdO1xuICAgIG1lc3NhZ2Uud2Vha0RlcGVuZGVuY3kgPSBvYmplY3Qud2Vha0RlcGVuZGVuY3k/Lm1hcCgoZSkgPT4gZSkgfHwgW107XG4gICAgbWVzc2FnZS5tZXNzYWdlVHlwZSA9IG9iamVjdC5tZXNzYWdlVHlwZT8ubWFwKChlKSA9PiBEZXNjcmlwdG9yUHJvdG8uZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIG1lc3NhZ2UuZW51bVR5cGUgPSBvYmplY3QuZW51bVR5cGU/Lm1hcCgoZSkgPT4gRW51bURlc2NyaXB0b3JQcm90by5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgbWVzc2FnZS5zZXJ2aWNlID0gb2JqZWN0LnNlcnZpY2U/Lm1hcCgoZSkgPT4gU2VydmljZURlc2NyaXB0b3JQcm90by5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgbWVzc2FnZS5leHRlbnNpb24gPSBvYmplY3QuZXh0ZW5zaW9uPy5tYXAoKGUpID0+IEZpZWxkRGVzY3JpcHRvclByb3RvLmZyb21QYXJ0aWFsKGUpKSB8fCBbXTtcbiAgICBtZXNzYWdlLm9wdGlvbnMgPSAob2JqZWN0Lm9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBvYmplY3Qub3B0aW9ucyAhPT0gbnVsbClcbiAgICAgID8gRmlsZU9wdGlvbnMuZnJvbVBhcnRpYWwob2JqZWN0Lm9wdGlvbnMpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBtZXNzYWdlLnNvdXJjZUNvZGVJbmZvID0gKG9iamVjdC5zb3VyY2VDb2RlSW5mbyAhPT0gdW5kZWZpbmVkICYmIG9iamVjdC5zb3VyY2VDb2RlSW5mbyAhPT0gbnVsbClcbiAgICAgID8gU291cmNlQ29kZUluZm8uZnJvbVBhcnRpYWwob2JqZWN0LnNvdXJjZUNvZGVJbmZvKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgbWVzc2FnZS5zeW50YXggPSBvYmplY3Quc3ludGF4ID8/IFwiXCI7XG4gICAgbWVzc2FnZS5lZGl0aW9uID0gb2JqZWN0LmVkaXRpb24gPz8gXCJcIjtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VEZXNjcmlwdG9yUHJvdG8oKTogRGVzY3JpcHRvclByb3RvIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBcIlwiLFxuICAgIGZpZWxkOiBbXSxcbiAgICBleHRlbnNpb246IFtdLFxuICAgIG5lc3RlZFR5cGU6IFtdLFxuICAgIGVudW1UeXBlOiBbXSxcbiAgICBleHRlbnNpb25SYW5nZTogW10sXG4gICAgb25lb2ZEZWNsOiBbXSxcbiAgICBvcHRpb25zOiB1bmRlZmluZWQsXG4gICAgcmVzZXJ2ZWRSYW5nZTogW10sXG4gICAgcmVzZXJ2ZWROYW1lOiBbXSxcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IERlc2NyaXB0b3JQcm90byA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IERlc2NyaXB0b3JQcm90bywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLm5hbWUgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLm5hbWUpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5maWVsZCkge1xuICAgICAgRmllbGREZXNjcmlwdG9yUHJvdG8uZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5leHRlbnNpb24pIHtcbiAgICAgIEZpZWxkRGVzY3JpcHRvclByb3RvLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UubmVzdGVkVHlwZSkge1xuICAgICAgRGVzY3JpcHRvclByb3RvLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UuZW51bVR5cGUpIHtcbiAgICAgIEVudW1EZXNjcmlwdG9yUHJvdG8uZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5leHRlbnNpb25SYW5nZSkge1xuICAgICAgRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMig0MikuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2Uub25lb2ZEZWNsKSB7XG4gICAgICBPbmVvZkRlc2NyaXB0b3JQcm90by5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoNjYpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgTWVzc2FnZU9wdGlvbnMuZW5jb2RlKG1lc3NhZ2Uub3B0aW9ucywgd3JpdGVyLnVpbnQzMig1OCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UucmVzZXJ2ZWRSYW5nZSkge1xuICAgICAgRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2UuZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDc0KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5yZXNlcnZlZE5hbWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoODIpLnN0cmluZyh2ISk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogRGVzY3JpcHRvclByb3RvIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZURlc2NyaXB0b3JQcm90bygpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubmFtZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGlmICh0YWcgIT09IDE4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmZpZWxkLnB1c2goRmllbGREZXNjcmlwdG9yUHJvdG8uZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBpZiAodGFnICE9PSA1MCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5leHRlbnNpb24ucHVzaChGaWVsZERlc2NyaXB0b3JQcm90by5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGlmICh0YWcgIT09IDI2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm5lc3RlZFR5cGUucHVzaChEZXNjcmlwdG9yUHJvdG8uZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBpZiAodGFnICE9PSAzNCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5lbnVtVHlwZS5wdXNoKEVudW1EZXNjcmlwdG9yUHJvdG8uZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBpZiAodGFnICE9PSA0Mikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5leHRlbnNpb25SYW5nZS5wdXNoKERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIGlmICh0YWcgIT09IDY2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm9uZW9mRGVjbC5wdXNoKE9uZW9mRGVzY3JpcHRvclByb3RvLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNTgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uub3B0aW9ucyA9IE1lc3NhZ2VPcHRpb25zLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICBpZiAodGFnICE9PSA3NCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5yZXNlcnZlZFJhbmdlLnB1c2goRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2UuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gODIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UucmVzZXJ2ZWROYW1lLnB1c2gocmVhZGVyLnN0cmluZygpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IERlc2NyaXB0b3JQcm90byB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IGlzU2V0KG9iamVjdC5uYW1lKSA/IFN0cmluZyhvYmplY3QubmFtZSkgOiBcIlwiLFxuICAgICAgZmllbGQ6IEFycmF5LmlzQXJyYXkob2JqZWN0Py5maWVsZCkgPyBvYmplY3QuZmllbGQubWFwKChlOiBhbnkpID0+IEZpZWxkRGVzY3JpcHRvclByb3RvLmZyb21KU09OKGUpKSA6IFtdLFxuICAgICAgZXh0ZW5zaW9uOiBBcnJheS5pc0FycmF5KG9iamVjdD8uZXh0ZW5zaW9uKVxuICAgICAgICA/IG9iamVjdC5leHRlbnNpb24ubWFwKChlOiBhbnkpID0+IEZpZWxkRGVzY3JpcHRvclByb3RvLmZyb21KU09OKGUpKVxuICAgICAgICA6IFtdLFxuICAgICAgbmVzdGVkVHlwZTogQXJyYXkuaXNBcnJheShvYmplY3Q/Lm5lc3RlZFR5cGUpXG4gICAgICAgID8gb2JqZWN0Lm5lc3RlZFR5cGUubWFwKChlOiBhbnkpID0+IERlc2NyaXB0b3JQcm90by5mcm9tSlNPTihlKSlcbiAgICAgICAgOiBbXSxcbiAgICAgIGVudW1UeXBlOiBBcnJheS5pc0FycmF5KG9iamVjdD8uZW51bVR5cGUpID8gb2JqZWN0LmVudW1UeXBlLm1hcCgoZTogYW55KSA9PiBFbnVtRGVzY3JpcHRvclByb3RvLmZyb21KU09OKGUpKSA6IFtdLFxuICAgICAgZXh0ZW5zaW9uUmFuZ2U6IEFycmF5LmlzQXJyYXkob2JqZWN0Py5leHRlbnNpb25SYW5nZSlcbiAgICAgICAgPyBvYmplY3QuZXh0ZW5zaW9uUmFuZ2UubWFwKChlOiBhbnkpID0+IERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZS5mcm9tSlNPTihlKSlcbiAgICAgICAgOiBbXSxcbiAgICAgIG9uZW9mRGVjbDogQXJyYXkuaXNBcnJheShvYmplY3Q/Lm9uZW9mRGVjbClcbiAgICAgICAgPyBvYmplY3Qub25lb2ZEZWNsLm1hcCgoZTogYW55KSA9PiBPbmVvZkRlc2NyaXB0b3JQcm90by5mcm9tSlNPTihlKSlcbiAgICAgICAgOiBbXSxcbiAgICAgIG9wdGlvbnM6IGlzU2V0KG9iamVjdC5vcHRpb25zKSA/IE1lc3NhZ2VPcHRpb25zLmZyb21KU09OKG9iamVjdC5vcHRpb25zKSA6IHVuZGVmaW5lZCxcbiAgICAgIHJlc2VydmVkUmFuZ2U6IEFycmF5LmlzQXJyYXkob2JqZWN0Py5yZXNlcnZlZFJhbmdlKVxuICAgICAgICA/IG9iamVjdC5yZXNlcnZlZFJhbmdlLm1hcCgoZTogYW55KSA9PiBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZS5mcm9tSlNPTihlKSlcbiAgICAgICAgOiBbXSxcbiAgICAgIHJlc2VydmVkTmFtZTogQXJyYXkuaXNBcnJheShvYmplY3Q/LnJlc2VydmVkTmFtZSkgPyBvYmplY3QucmVzZXJ2ZWROYW1lLm1hcCgoZTogYW55KSA9PiBTdHJpbmcoZSkpIDogW10sXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogRGVzY3JpcHRvclByb3RvKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBpZiAobWVzc2FnZS5uYW1lICE9PSBcIlwiKSB7XG4gICAgICBvYmoubmFtZSA9IG1lc3NhZ2UubmFtZTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZmllbGQ/Lmxlbmd0aCkge1xuICAgICAgb2JqLmZpZWxkID0gbWVzc2FnZS5maWVsZC5tYXAoKGUpID0+IEZpZWxkRGVzY3JpcHRvclByb3RvLnRvSlNPTihlKSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmV4dGVuc2lvbj8ubGVuZ3RoKSB7XG4gICAgICBvYmouZXh0ZW5zaW9uID0gbWVzc2FnZS5leHRlbnNpb24ubWFwKChlKSA9PiBGaWVsZERlc2NyaXB0b3JQcm90by50b0pTT04oZSkpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5uZXN0ZWRUeXBlPy5sZW5ndGgpIHtcbiAgICAgIG9iai5uZXN0ZWRUeXBlID0gbWVzc2FnZS5uZXN0ZWRUeXBlLm1hcCgoZSkgPT4gRGVzY3JpcHRvclByb3RvLnRvSlNPTihlKSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmVudW1UeXBlPy5sZW5ndGgpIHtcbiAgICAgIG9iai5lbnVtVHlwZSA9IG1lc3NhZ2UuZW51bVR5cGUubWFwKChlKSA9PiBFbnVtRGVzY3JpcHRvclByb3RvLnRvSlNPTihlKSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmV4dGVuc2lvblJhbmdlPy5sZW5ndGgpIHtcbiAgICAgIG9iai5leHRlbnNpb25SYW5nZSA9IG1lc3NhZ2UuZXh0ZW5zaW9uUmFuZ2UubWFwKChlKSA9PiBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2UudG9KU09OKGUpKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub25lb2ZEZWNsPy5sZW5ndGgpIHtcbiAgICAgIG9iai5vbmVvZkRlY2wgPSBtZXNzYWdlLm9uZW9mRGVjbC5tYXAoKGUpID0+IE9uZW9mRGVzY3JpcHRvclByb3RvLnRvSlNPTihlKSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb2JqLm9wdGlvbnMgPSBNZXNzYWdlT3B0aW9ucy50b0pTT04obWVzc2FnZS5vcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucmVzZXJ2ZWRSYW5nZT8ubGVuZ3RoKSB7XG4gICAgICBvYmoucmVzZXJ2ZWRSYW5nZSA9IG1lc3NhZ2UucmVzZXJ2ZWRSYW5nZS5tYXAoKGUpID0+IERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlLnRvSlNPTihlKSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnJlc2VydmVkTmFtZT8ubGVuZ3RoKSB7XG4gICAgICBvYmoucmVzZXJ2ZWROYW1lID0gbWVzc2FnZS5yZXNlcnZlZE5hbWU7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxEZXNjcmlwdG9yUHJvdG8+KTogRGVzY3JpcHRvclByb3RvIHtcbiAgICByZXR1cm4gRGVzY3JpcHRvclByb3RvLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPERlc2NyaXB0b3JQcm90bz4pOiBEZXNjcmlwdG9yUHJvdG8ge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRGVzY3JpcHRvclByb3RvKCk7XG4gICAgbWVzc2FnZS5uYW1lID0gb2JqZWN0Lm5hbWUgPz8gXCJcIjtcbiAgICBtZXNzYWdlLmZpZWxkID0gb2JqZWN0LmZpZWxkPy5tYXAoKGUpID0+IEZpZWxkRGVzY3JpcHRvclByb3RvLmZyb21QYXJ0aWFsKGUpKSB8fCBbXTtcbiAgICBtZXNzYWdlLmV4dGVuc2lvbiA9IG9iamVjdC5leHRlbnNpb24/Lm1hcCgoZSkgPT4gRmllbGREZXNjcmlwdG9yUHJvdG8uZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIG1lc3NhZ2UubmVzdGVkVHlwZSA9IG9iamVjdC5uZXN0ZWRUeXBlPy5tYXAoKGUpID0+IERlc2NyaXB0b3JQcm90by5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgbWVzc2FnZS5lbnVtVHlwZSA9IG9iamVjdC5lbnVtVHlwZT8ubWFwKChlKSA9PiBFbnVtRGVzY3JpcHRvclByb3RvLmZyb21QYXJ0aWFsKGUpKSB8fCBbXTtcbiAgICBtZXNzYWdlLmV4dGVuc2lvblJhbmdlID0gb2JqZWN0LmV4dGVuc2lvblJhbmdlPy5tYXAoKGUpID0+IERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZS5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgbWVzc2FnZS5vbmVvZkRlY2wgPSBvYmplY3Qub25lb2ZEZWNsPy5tYXAoKGUpID0+IE9uZW9mRGVzY3JpcHRvclByb3RvLmZyb21QYXJ0aWFsKGUpKSB8fCBbXTtcbiAgICBtZXNzYWdlLm9wdGlvbnMgPSAob2JqZWN0Lm9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBvYmplY3Qub3B0aW9ucyAhPT0gbnVsbClcbiAgICAgID8gTWVzc2FnZU9wdGlvbnMuZnJvbVBhcnRpYWwob2JqZWN0Lm9wdGlvbnMpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBtZXNzYWdlLnJlc2VydmVkUmFuZ2UgPSBvYmplY3QucmVzZXJ2ZWRSYW5nZT8ubWFwKChlKSA9PiBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZS5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgbWVzc2FnZS5yZXNlcnZlZE5hbWUgPSBvYmplY3QucmVzZXJ2ZWROYW1lPy5tYXAoKGUpID0+IGUpIHx8IFtdO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZURlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSgpOiBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2Uge1xuICByZXR1cm4geyBzdGFydDogMCwgZW5kOiAwLCBvcHRpb25zOiB1bmRlZmluZWQgfTtcbn1cblxuZXhwb3J0IGNvbnN0IERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnN0YXJ0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmludDMyKG1lc3NhZ2Uuc3RhcnQpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5lbmQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmludDMyKG1lc3NhZ2UuZW5kKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBFeHRlbnNpb25SYW5nZU9wdGlvbnMuZW5jb2RlKG1lc3NhZ2Uub3B0aW9ucywgd3JpdGVyLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2Uge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSA4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnN0YXJ0ID0gcmVhZGVyLmludDMyKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5lbmQgPSByZWFkZXIuaW50MzIoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGlmICh0YWcgIT09IDI2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm9wdGlvbnMgPSBFeHRlbnNpb25SYW5nZU9wdGlvbnMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiBpc1NldChvYmplY3Quc3RhcnQpID8gTnVtYmVyKG9iamVjdC5zdGFydCkgOiAwLFxuICAgICAgZW5kOiBpc1NldChvYmplY3QuZW5kKSA/IE51bWJlcihvYmplY3QuZW5kKSA6IDAsXG4gICAgICBvcHRpb25zOiBpc1NldChvYmplY3Qub3B0aW9ucykgPyBFeHRlbnNpb25SYW5nZU9wdGlvbnMuZnJvbUpTT04ob2JqZWN0Lm9wdGlvbnMpIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2Uuc3RhcnQgIT09IDApIHtcbiAgICAgIG9iai5zdGFydCA9IE1hdGgucm91bmQobWVzc2FnZS5zdGFydCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmVuZCAhPT0gMCkge1xuICAgICAgb2JqLmVuZCA9IE1hdGgucm91bmQobWVzc2FnZS5lbmQpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9iai5vcHRpb25zID0gRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLnRvSlNPTihtZXNzYWdlLm9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8RGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlPik6IERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSB7XG4gICAgcmV0dXJuIERlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZS5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxEZXNjcmlwdG9yUHJvdG9fRXh0ZW5zaW9uUmFuZ2U+KTogRGVzY3JpcHRvclByb3RvX0V4dGVuc2lvblJhbmdlIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZURlc2NyaXB0b3JQcm90b19FeHRlbnNpb25SYW5nZSgpO1xuICAgIG1lc3NhZ2Uuc3RhcnQgPSBvYmplY3Quc3RhcnQgPz8gMDtcbiAgICBtZXNzYWdlLmVuZCA9IG9iamVjdC5lbmQgPz8gMDtcbiAgICBtZXNzYWdlLm9wdGlvbnMgPSAob2JqZWN0Lm9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBvYmplY3Qub3B0aW9ucyAhPT0gbnVsbClcbiAgICAgID8gRXh0ZW5zaW9uUmFuZ2VPcHRpb25zLmZyb21QYXJ0aWFsKG9iamVjdC5vcHRpb25zKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2UoKTogRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2Uge1xuICByZXR1cm4geyBzdGFydDogMCwgZW5kOiAwIH07XG59XG5cbmV4cG9ydCBjb25zdCBEZXNjcmlwdG9yUHJvdG9fUmVzZXJ2ZWRSYW5nZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2Uuc3RhcnQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuaW50MzIobWVzc2FnZS5zdGFydCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmVuZCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuaW50MzIobWVzc2FnZS5lbmQpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZURlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSA4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnN0YXJ0ID0gcmVhZGVyLmludDMyKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5lbmQgPSByZWFkZXIuaW50MzIoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlIHtcbiAgICByZXR1cm4geyBzdGFydDogaXNTZXQob2JqZWN0LnN0YXJ0KSA/IE51bWJlcihvYmplY3Quc3RhcnQpIDogMCwgZW5kOiBpc1NldChvYmplY3QuZW5kKSA/IE51bWJlcihvYmplY3QuZW5kKSA6IDAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2UpOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIGlmIChtZXNzYWdlLnN0YXJ0ICE9PSAwKSB7XG4gICAgICBvYmouc3RhcnQgPSBNYXRoLnJvdW5kKG1lc3NhZ2Uuc3RhcnQpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5lbmQgIT09IDApIHtcbiAgICAgIG9iai5lbmQgPSBNYXRoLnJvdW5kKG1lc3NhZ2UuZW5kKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlPik6IERlc2NyaXB0b3JQcm90b19SZXNlcnZlZFJhbmdlIHtcbiAgICByZXR1cm4gRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2UuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8RGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2U+KTogRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2Uge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRGVzY3JpcHRvclByb3RvX1Jlc2VydmVkUmFuZ2UoKTtcbiAgICBtZXNzYWdlLnN0YXJ0ID0gb2JqZWN0LnN0YXJ0ID8/IDA7XG4gICAgbWVzc2FnZS5lbmQgPSBvYmplY3QuZW5kID8/IDA7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlRXh0ZW5zaW9uUmFuZ2VPcHRpb25zKCk6IEV4dGVuc2lvblJhbmdlT3B0aW9ucyB7XG4gIHJldHVybiB7IHVuaW50ZXJwcmV0ZWRPcHRpb246IFtdIH07XG59XG5cbmV4cG9ydCBjb25zdCBFeHRlbnNpb25SYW5nZU9wdGlvbnMgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBFeHRlbnNpb25SYW5nZU9wdGlvbnMsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uKSB7XG4gICAgICBVbmludGVycHJldGVkT3B0aW9uLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMig3OTk0KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IEV4dGVuc2lvblJhbmdlT3B0aW9ucyB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VFeHRlbnNpb25SYW5nZU9wdGlvbnMoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSA5OTk6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNzk5NCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uLnB1c2goVW5pbnRlcnByZXRlZE9wdGlvbi5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IEV4dGVuc2lvblJhbmdlT3B0aW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVuaW50ZXJwcmV0ZWRPcHRpb246IEFycmF5LmlzQXJyYXkob2JqZWN0Py51bmludGVycHJldGVkT3B0aW9uKVxuICAgICAgICA/IG9iamVjdC51bmludGVycHJldGVkT3B0aW9uLm1hcCgoZTogYW55KSA9PiBVbmludGVycHJldGVkT3B0aW9uLmZyb21KU09OKGUpKVxuICAgICAgICA6IFtdLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IEV4dGVuc2lvblJhbmdlT3B0aW9ucyk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbj8ubGVuZ3RoKSB7XG4gICAgICBvYmoudW5pbnRlcnByZXRlZE9wdGlvbiA9IG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbi5tYXAoKGUpID0+IFVuaW50ZXJwcmV0ZWRPcHRpb24udG9KU09OKGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPEV4dGVuc2lvblJhbmdlT3B0aW9ucz4pOiBFeHRlbnNpb25SYW5nZU9wdGlvbnMge1xuICAgIHJldHVybiBFeHRlbnNpb25SYW5nZU9wdGlvbnMuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8RXh0ZW5zaW9uUmFuZ2VPcHRpb25zPik6IEV4dGVuc2lvblJhbmdlT3B0aW9ucyB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VFeHRlbnNpb25SYW5nZU9wdGlvbnMoKTtcbiAgICBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24gPSBvYmplY3QudW5pbnRlcnByZXRlZE9wdGlvbj8ubWFwKChlKSA9PiBVbmludGVycHJldGVkT3B0aW9uLmZyb21QYXJ0aWFsKGUpKSB8fCBbXTtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VGaWVsZERlc2NyaXB0b3JQcm90bygpOiBGaWVsZERlc2NyaXB0b3JQcm90byB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogXCJcIixcbiAgICBudW1iZXI6IDAsXG4gICAgbGFiZWw6IDEsXG4gICAgdHlwZTogMSxcbiAgICB0eXBlTmFtZTogXCJcIixcbiAgICBleHRlbmRlZTogXCJcIixcbiAgICBkZWZhdWx0VmFsdWU6IFwiXCIsXG4gICAgb25lb2ZJbmRleDogMCxcbiAgICBqc29uTmFtZTogXCJcIixcbiAgICBvcHRpb25zOiB1bmRlZmluZWQsXG4gICAgcHJvdG8zT3B0aW9uYWw6IGZhbHNlLFxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgRmllbGREZXNjcmlwdG9yUHJvdG8gPSB7XG4gIGVuY29kZShtZXNzYWdlOiBGaWVsZERlc2NyaXB0b3JQcm90bywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLm5hbWUgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLm5hbWUpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5udW1iZXIgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmludDMyKG1lc3NhZ2UubnVtYmVyKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubGFiZWwgIT09IDEpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzIpLmludDMyKG1lc3NhZ2UubGFiZWwpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS50eXBlICE9PSAxKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQwKS5pbnQzMihtZXNzYWdlLnR5cGUpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS50eXBlTmFtZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMig1MCkuc3RyaW5nKG1lc3NhZ2UudHlwZU5hbWUpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5leHRlbmRlZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxOCkuc3RyaW5nKG1lc3NhZ2UuZXh0ZW5kZWUpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kZWZhdWx0VmFsdWUgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTgpLnN0cmluZyhtZXNzYWdlLmRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm9uZW9mSW5kZXggIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNzIpLmludDMyKG1lc3NhZ2Uub25lb2ZJbmRleCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmpzb25OYW1lICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgyKS5zdHJpbmcobWVzc2FnZS5qc29uTmFtZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgRmllbGRPcHRpb25zLmVuY29kZShtZXNzYWdlLm9wdGlvbnMsIHdyaXRlci51aW50MzIoNjYpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnByb3RvM09wdGlvbmFsID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEzNikuYm9vbChtZXNzYWdlLnByb3RvM09wdGlvbmFsKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBGaWVsZERlc2NyaXB0b3JQcm90byB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VGaWVsZERlc2NyaXB0b3JQcm90bygpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubmFtZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGlmICh0YWcgIT09IDI0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm51bWJlciA9IHJlYWRlci5pbnQzMigpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMzIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubGFiZWwgPSByZWFkZXIuaW50MzIoKSBhcyBhbnk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBpZiAodGFnICE9PSA0MCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS50eXBlID0gcmVhZGVyLmludDMyKCkgYXMgYW55O1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UudHlwZU5hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxOCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5leHRlbmRlZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIGlmICh0YWcgIT09IDU4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmRlZmF1bHRWYWx1ZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIGlmICh0YWcgIT09IDcyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm9uZW9mSW5kZXggPSByZWFkZXIuaW50MzIoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBpZiAodGFnICE9PSA4Mikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5qc29uTmFtZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIGlmICh0YWcgIT09IDY2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm9wdGlvbnMgPSBGaWVsZE9wdGlvbnMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMzYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UucHJvdG8zT3B0aW9uYWwgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogRmllbGREZXNjcmlwdG9yUHJvdG8ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBpc1NldChvYmplY3QubmFtZSkgPyBTdHJpbmcob2JqZWN0Lm5hbWUpIDogXCJcIixcbiAgICAgIG51bWJlcjogaXNTZXQob2JqZWN0Lm51bWJlcikgPyBOdW1iZXIob2JqZWN0Lm51bWJlcikgOiAwLFxuICAgICAgbGFiZWw6IGlzU2V0KG9iamVjdC5sYWJlbCkgPyBmaWVsZERlc2NyaXB0b3JQcm90b19MYWJlbEZyb21KU09OKG9iamVjdC5sYWJlbCkgOiAxLFxuICAgICAgdHlwZTogaXNTZXQob2JqZWN0LnR5cGUpID8gZmllbGREZXNjcmlwdG9yUHJvdG9fVHlwZUZyb21KU09OKG9iamVjdC50eXBlKSA6IDEsXG4gICAgICB0eXBlTmFtZTogaXNTZXQob2JqZWN0LnR5cGVOYW1lKSA/IFN0cmluZyhvYmplY3QudHlwZU5hbWUpIDogXCJcIixcbiAgICAgIGV4dGVuZGVlOiBpc1NldChvYmplY3QuZXh0ZW5kZWUpID8gU3RyaW5nKG9iamVjdC5leHRlbmRlZSkgOiBcIlwiLFxuICAgICAgZGVmYXVsdFZhbHVlOiBpc1NldChvYmplY3QuZGVmYXVsdFZhbHVlKSA/IFN0cmluZyhvYmplY3QuZGVmYXVsdFZhbHVlKSA6IFwiXCIsXG4gICAgICBvbmVvZkluZGV4OiBpc1NldChvYmplY3Qub25lb2ZJbmRleCkgPyBOdW1iZXIob2JqZWN0Lm9uZW9mSW5kZXgpIDogMCxcbiAgICAgIGpzb25OYW1lOiBpc1NldChvYmplY3QuanNvbk5hbWUpID8gU3RyaW5nKG9iamVjdC5qc29uTmFtZSkgOiBcIlwiLFxuICAgICAgb3B0aW9uczogaXNTZXQob2JqZWN0Lm9wdGlvbnMpID8gRmllbGRPcHRpb25zLmZyb21KU09OKG9iamVjdC5vcHRpb25zKSA6IHVuZGVmaW5lZCxcbiAgICAgIHByb3RvM09wdGlvbmFsOiBpc1NldChvYmplY3QucHJvdG8zT3B0aW9uYWwpID8gQm9vbGVhbihvYmplY3QucHJvdG8zT3B0aW9uYWwpIDogZmFsc2UsXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogRmllbGREZXNjcmlwdG9yUHJvdG8pOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIGlmIChtZXNzYWdlLm5hbWUgIT09IFwiXCIpIHtcbiAgICAgIG9iai5uYW1lID0gbWVzc2FnZS5uYW1lO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5udW1iZXIgIT09IDApIHtcbiAgICAgIG9iai5udW1iZXIgPSBNYXRoLnJvdW5kKG1lc3NhZ2UubnVtYmVyKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubGFiZWwgIT09IDEpIHtcbiAgICAgIG9iai5sYWJlbCA9IGZpZWxkRGVzY3JpcHRvclByb3RvX0xhYmVsVG9KU09OKG1lc3NhZ2UubGFiZWwpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS50eXBlICE9PSAxKSB7XG4gICAgICBvYmoudHlwZSA9IGZpZWxkRGVzY3JpcHRvclByb3RvX1R5cGVUb0pTT04obWVzc2FnZS50eXBlKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudHlwZU5hbWUgIT09IFwiXCIpIHtcbiAgICAgIG9iai50eXBlTmFtZSA9IG1lc3NhZ2UudHlwZU5hbWU7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmV4dGVuZGVlICE9PSBcIlwiKSB7XG4gICAgICBvYmouZXh0ZW5kZWUgPSBtZXNzYWdlLmV4dGVuZGVlO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kZWZhdWx0VmFsdWUgIT09IFwiXCIpIHtcbiAgICAgIG9iai5kZWZhdWx0VmFsdWUgPSBtZXNzYWdlLmRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub25lb2ZJbmRleCAhPT0gMCkge1xuICAgICAgb2JqLm9uZW9mSW5kZXggPSBNYXRoLnJvdW5kKG1lc3NhZ2Uub25lb2ZJbmRleCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmpzb25OYW1lICE9PSBcIlwiKSB7XG4gICAgICBvYmouanNvbk5hbWUgPSBtZXNzYWdlLmpzb25OYW1lO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9iai5vcHRpb25zID0gRmllbGRPcHRpb25zLnRvSlNPTihtZXNzYWdlLm9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wcm90bzNPcHRpb25hbCA9PT0gdHJ1ZSkge1xuICAgICAgb2JqLnByb3RvM09wdGlvbmFsID0gbWVzc2FnZS5wcm90bzNPcHRpb25hbDtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPEZpZWxkRGVzY3JpcHRvclByb3RvPik6IEZpZWxkRGVzY3JpcHRvclByb3RvIHtcbiAgICByZXR1cm4gRmllbGREZXNjcmlwdG9yUHJvdG8uZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8RmllbGREZXNjcmlwdG9yUHJvdG8+KTogRmllbGREZXNjcmlwdG9yUHJvdG8ge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRmllbGREZXNjcmlwdG9yUHJvdG8oKTtcbiAgICBtZXNzYWdlLm5hbWUgPSBvYmplY3QubmFtZSA/PyBcIlwiO1xuICAgIG1lc3NhZ2UubnVtYmVyID0gb2JqZWN0Lm51bWJlciA/PyAwO1xuICAgIG1lc3NhZ2UubGFiZWwgPSBvYmplY3QubGFiZWwgPz8gMTtcbiAgICBtZXNzYWdlLnR5cGUgPSBvYmplY3QudHlwZSA/PyAxO1xuICAgIG1lc3NhZ2UudHlwZU5hbWUgPSBvYmplY3QudHlwZU5hbWUgPz8gXCJcIjtcbiAgICBtZXNzYWdlLmV4dGVuZGVlID0gb2JqZWN0LmV4dGVuZGVlID8/IFwiXCI7XG4gICAgbWVzc2FnZS5kZWZhdWx0VmFsdWUgPSBvYmplY3QuZGVmYXVsdFZhbHVlID8/IFwiXCI7XG4gICAgbWVzc2FnZS5vbmVvZkluZGV4ID0gb2JqZWN0Lm9uZW9mSW5kZXggPz8gMDtcbiAgICBtZXNzYWdlLmpzb25OYW1lID0gb2JqZWN0Lmpzb25OYW1lID8/IFwiXCI7XG4gICAgbWVzc2FnZS5vcHRpb25zID0gKG9iamVjdC5vcHRpb25zICE9PSB1bmRlZmluZWQgJiYgb2JqZWN0Lm9wdGlvbnMgIT09IG51bGwpXG4gICAgICA/IEZpZWxkT3B0aW9ucy5mcm9tUGFydGlhbChvYmplY3Qub3B0aW9ucylcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIG1lc3NhZ2UucHJvdG8zT3B0aW9uYWwgPSBvYmplY3QucHJvdG8zT3B0aW9uYWwgPz8gZmFsc2U7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlT25lb2ZEZXNjcmlwdG9yUHJvdG8oKTogT25lb2ZEZXNjcmlwdG9yUHJvdG8ge1xuICByZXR1cm4geyBuYW1lOiBcIlwiLCBvcHRpb25zOiB1bmRlZmluZWQgfTtcbn1cblxuZXhwb3J0IGNvbnN0IE9uZW9mRGVzY3JpcHRvclByb3RvID0ge1xuICBlbmNvZGUobWVzc2FnZTogT25lb2ZEZXNjcmlwdG9yUHJvdG8sIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5uYW1lICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwKS5zdHJpbmcobWVzc2FnZS5uYW1lKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBPbmVvZk9wdGlvbnMuZW5jb2RlKG1lc3NhZ2Uub3B0aW9ucywgd3JpdGVyLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBPbmVvZkRlc2NyaXB0b3JQcm90byB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VPbmVvZkRlc2NyaXB0b3JQcm90bygpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubmFtZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGlmICh0YWcgIT09IDE4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm9wdGlvbnMgPSBPbmVvZk9wdGlvbnMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IE9uZW9mRGVzY3JpcHRvclByb3RvIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogaXNTZXQob2JqZWN0Lm5hbWUpID8gU3RyaW5nKG9iamVjdC5uYW1lKSA6IFwiXCIsXG4gICAgICBvcHRpb25zOiBpc1NldChvYmplY3Qub3B0aW9ucykgPyBPbmVvZk9wdGlvbnMuZnJvbUpTT04ob2JqZWN0Lm9wdGlvbnMpIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IE9uZW9mRGVzY3JpcHRvclByb3RvKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBpZiAobWVzc2FnZS5uYW1lICE9PSBcIlwiKSB7XG4gICAgICBvYmoubmFtZSA9IG1lc3NhZ2UubmFtZTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvYmoub3B0aW9ucyA9IE9uZW9mT3B0aW9ucy50b0pTT04obWVzc2FnZS5vcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPE9uZW9mRGVzY3JpcHRvclByb3RvPik6IE9uZW9mRGVzY3JpcHRvclByb3RvIHtcbiAgICByZXR1cm4gT25lb2ZEZXNjcmlwdG9yUHJvdG8uZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8T25lb2ZEZXNjcmlwdG9yUHJvdG8+KTogT25lb2ZEZXNjcmlwdG9yUHJvdG8ge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlT25lb2ZEZXNjcmlwdG9yUHJvdG8oKTtcbiAgICBtZXNzYWdlLm5hbWUgPSBvYmplY3QubmFtZSA/PyBcIlwiO1xuICAgIG1lc3NhZ2Uub3B0aW9ucyA9IChvYmplY3Qub3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIG9iamVjdC5vcHRpb25zICE9PSBudWxsKVxuICAgICAgPyBPbmVvZk9wdGlvbnMuZnJvbVBhcnRpYWwob2JqZWN0Lm9wdGlvbnMpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VFbnVtRGVzY3JpcHRvclByb3RvKCk6IEVudW1EZXNjcmlwdG9yUHJvdG8ge1xuICByZXR1cm4geyBuYW1lOiBcIlwiLCB2YWx1ZTogW10sIG9wdGlvbnM6IHVuZGVmaW5lZCwgcmVzZXJ2ZWRSYW5nZTogW10sIHJlc2VydmVkTmFtZTogW10gfTtcbn1cblxuZXhwb3J0IGNvbnN0IEVudW1EZXNjcmlwdG9yUHJvdG8gPSB7XG4gIGVuY29kZShtZXNzYWdlOiBFbnVtRGVzY3JpcHRvclByb3RvLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UubmFtZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UubmFtZSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnZhbHVlKSB7XG4gICAgICBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8uZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIEVudW1PcHRpb25zLmVuY29kZShtZXNzYWdlLm9wdGlvbnMsIHdyaXRlci51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnJlc2VydmVkUmFuZ2UpIHtcbiAgICAgIEVudW1EZXNjcmlwdG9yUHJvdG9fRW51bVJlc2VydmVkUmFuZ2UuZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5yZXNlcnZlZE5hbWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDIpLnN0cmluZyh2ISk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogRW51bURlc2NyaXB0b3JQcm90byB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VFbnVtRGVzY3JpcHRvclByb3RvKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UudmFsdWUucHVzaChFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8uZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBpZiAodGFnICE9PSAyNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5vcHRpb25zID0gRW51bU9wdGlvbnMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGlmICh0YWcgIT09IDM0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnJlc2VydmVkUmFuZ2UucHVzaChFbnVtRGVzY3JpcHRvclByb3RvX0VudW1SZXNlcnZlZFJhbmdlLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNDIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UucmVzZXJ2ZWROYW1lLnB1c2gocmVhZGVyLnN0cmluZygpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IEVudW1EZXNjcmlwdG9yUHJvdG8ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBpc1NldChvYmplY3QubmFtZSkgPyBTdHJpbmcob2JqZWN0Lm5hbWUpIDogXCJcIixcbiAgICAgIHZhbHVlOiBBcnJheS5pc0FycmF5KG9iamVjdD8udmFsdWUpID8gb2JqZWN0LnZhbHVlLm1hcCgoZTogYW55KSA9PiBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8uZnJvbUpTT04oZSkpIDogW10sXG4gICAgICBvcHRpb25zOiBpc1NldChvYmplY3Qub3B0aW9ucykgPyBFbnVtT3B0aW9ucy5mcm9tSlNPTihvYmplY3Qub3B0aW9ucykgOiB1bmRlZmluZWQsXG4gICAgICByZXNlcnZlZFJhbmdlOiBBcnJheS5pc0FycmF5KG9iamVjdD8ucmVzZXJ2ZWRSYW5nZSlcbiAgICAgICAgPyBvYmplY3QucmVzZXJ2ZWRSYW5nZS5tYXAoKGU6IGFueSkgPT4gRW51bURlc2NyaXB0b3JQcm90b19FbnVtUmVzZXJ2ZWRSYW5nZS5mcm9tSlNPTihlKSlcbiAgICAgICAgOiBbXSxcbiAgICAgIHJlc2VydmVkTmFtZTogQXJyYXkuaXNBcnJheShvYmplY3Q/LnJlc2VydmVkTmFtZSkgPyBvYmplY3QucmVzZXJ2ZWROYW1lLm1hcCgoZTogYW55KSA9PiBTdHJpbmcoZSkpIDogW10sXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogRW51bURlc2NyaXB0b3JQcm90byk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UubmFtZSAhPT0gXCJcIikge1xuICAgICAgb2JqLm5hbWUgPSBtZXNzYWdlLm5hbWU7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnZhbHVlPy5sZW5ndGgpIHtcbiAgICAgIG9iai52YWx1ZSA9IG1lc3NhZ2UudmFsdWUubWFwKChlKSA9PiBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8udG9KU09OKGUpKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvYmoub3B0aW9ucyA9IEVudW1PcHRpb25zLnRvSlNPTihtZXNzYWdlLm9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5yZXNlcnZlZFJhbmdlPy5sZW5ndGgpIHtcbiAgICAgIG9iai5yZXNlcnZlZFJhbmdlID0gbWVzc2FnZS5yZXNlcnZlZFJhbmdlLm1hcCgoZSkgPT4gRW51bURlc2NyaXB0b3JQcm90b19FbnVtUmVzZXJ2ZWRSYW5nZS50b0pTT04oZSkpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5yZXNlcnZlZE5hbWU/Lmxlbmd0aCkge1xuICAgICAgb2JqLnJlc2VydmVkTmFtZSA9IG1lc3NhZ2UucmVzZXJ2ZWROYW1lO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8RW51bURlc2NyaXB0b3JQcm90bz4pOiBFbnVtRGVzY3JpcHRvclByb3RvIHtcbiAgICByZXR1cm4gRW51bURlc2NyaXB0b3JQcm90by5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxFbnVtRGVzY3JpcHRvclByb3RvPik6IEVudW1EZXNjcmlwdG9yUHJvdG8ge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRW51bURlc2NyaXB0b3JQcm90bygpO1xuICAgIG1lc3NhZ2UubmFtZSA9IG9iamVjdC5uYW1lID8/IFwiXCI7XG4gICAgbWVzc2FnZS52YWx1ZSA9IG9iamVjdC52YWx1ZT8ubWFwKChlKSA9PiBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8uZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIG1lc3NhZ2Uub3B0aW9ucyA9IChvYmplY3Qub3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIG9iamVjdC5vcHRpb25zICE9PSBudWxsKVxuICAgICAgPyBFbnVtT3B0aW9ucy5mcm9tUGFydGlhbChvYmplY3Qub3B0aW9ucylcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIG1lc3NhZ2UucmVzZXJ2ZWRSYW5nZSA9IG9iamVjdC5yZXNlcnZlZFJhbmdlPy5tYXAoKGUpID0+IEVudW1EZXNjcmlwdG9yUHJvdG9fRW51bVJlc2VydmVkUmFuZ2UuZnJvbVBhcnRpYWwoZSkpIHx8XG4gICAgICBbXTtcbiAgICBtZXNzYWdlLnJlc2VydmVkTmFtZSA9IG9iamVjdC5yZXNlcnZlZE5hbWU/Lm1hcCgoZSkgPT4gZSkgfHwgW107XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlRW51bURlc2NyaXB0b3JQcm90b19FbnVtUmVzZXJ2ZWRSYW5nZSgpOiBFbnVtRGVzY3JpcHRvclByb3RvX0VudW1SZXNlcnZlZFJhbmdlIHtcbiAgcmV0dXJuIHsgc3RhcnQ6IDAsIGVuZDogMCB9O1xufVxuXG5leHBvcnQgY29uc3QgRW51bURlc2NyaXB0b3JQcm90b19FbnVtUmVzZXJ2ZWRSYW5nZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IEVudW1EZXNjcmlwdG9yUHJvdG9fRW51bVJlc2VydmVkUmFuZ2UsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5zdGFydCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5pbnQzMihtZXNzYWdlLnN0YXJ0KTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZW5kICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5pbnQzMihtZXNzYWdlLmVuZCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogRW51bURlc2NyaXB0b3JQcm90b19FbnVtUmVzZXJ2ZWRSYW5nZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VFbnVtRGVzY3JpcHRvclByb3RvX0VudW1SZXNlcnZlZFJhbmdlKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSA4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnN0YXJ0ID0gcmVhZGVyLmludDMyKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5lbmQgPSByZWFkZXIuaW50MzIoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IEVudW1EZXNjcmlwdG9yUHJvdG9fRW51bVJlc2VydmVkUmFuZ2Uge1xuICAgIHJldHVybiB7IHN0YXJ0OiBpc1NldChvYmplY3Quc3RhcnQpID8gTnVtYmVyKG9iamVjdC5zdGFydCkgOiAwLCBlbmQ6IGlzU2V0KG9iamVjdC5lbmQpID8gTnVtYmVyKG9iamVjdC5lbmQpIDogMCB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBFbnVtRGVzY3JpcHRvclByb3RvX0VudW1SZXNlcnZlZFJhbmdlKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBpZiAobWVzc2FnZS5zdGFydCAhPT0gMCkge1xuICAgICAgb2JqLnN0YXJ0ID0gTWF0aC5yb3VuZChtZXNzYWdlLnN0YXJ0KTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZW5kICE9PSAwKSB7XG4gICAgICBvYmouZW5kID0gTWF0aC5yb3VuZChtZXNzYWdlLmVuZCk7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxFbnVtRGVzY3JpcHRvclByb3RvX0VudW1SZXNlcnZlZFJhbmdlPik6IEVudW1EZXNjcmlwdG9yUHJvdG9fRW51bVJlc2VydmVkUmFuZ2Uge1xuICAgIHJldHVybiBFbnVtRGVzY3JpcHRvclByb3RvX0VudW1SZXNlcnZlZFJhbmdlLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPEVudW1EZXNjcmlwdG9yUHJvdG9fRW51bVJlc2VydmVkUmFuZ2U+KTogRW51bURlc2NyaXB0b3JQcm90b19FbnVtUmVzZXJ2ZWRSYW5nZSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VFbnVtRGVzY3JpcHRvclByb3RvX0VudW1SZXNlcnZlZFJhbmdlKCk7XG4gICAgbWVzc2FnZS5zdGFydCA9IG9iamVjdC5zdGFydCA/PyAwO1xuICAgIG1lc3NhZ2UuZW5kID0gb2JqZWN0LmVuZCA/PyAwO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZUVudW1WYWx1ZURlc2NyaXB0b3JQcm90bygpOiBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ge1xuICByZXR1cm4geyBuYW1lOiBcIlwiLCBudW1iZXI6IDAsIG9wdGlvbnM6IHVuZGVmaW5lZCB9O1xufVxuXG5leHBvcnQgY29uc3QgRW51bVZhbHVlRGVzY3JpcHRvclByb3RvID0ge1xuICBlbmNvZGUobWVzc2FnZTogRW51bVZhbHVlRGVzY3JpcHRvclByb3RvLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UubmFtZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UubmFtZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm51bWJlciAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuaW50MzIobWVzc2FnZS5udW1iZXIpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIEVudW1WYWx1ZU9wdGlvbnMuZW5jb2RlKG1lc3NhZ2Uub3B0aW9ucywgd3JpdGVyLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRW51bVZhbHVlRGVzY3JpcHRvclByb3RvKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubnVtYmVyID0gcmVhZGVyLmludDMyKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBpZiAodGFnICE9PSAyNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5vcHRpb25zID0gRW51bVZhbHVlT3B0aW9ucy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogRW51bVZhbHVlRGVzY3JpcHRvclByb3RvIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogaXNTZXQob2JqZWN0Lm5hbWUpID8gU3RyaW5nKG9iamVjdC5uYW1lKSA6IFwiXCIsXG4gICAgICBudW1iZXI6IGlzU2V0KG9iamVjdC5udW1iZXIpID8gTnVtYmVyKG9iamVjdC5udW1iZXIpIDogMCxcbiAgICAgIG9wdGlvbnM6IGlzU2V0KG9iamVjdC5vcHRpb25zKSA/IEVudW1WYWx1ZU9wdGlvbnMuZnJvbUpTT04ob2JqZWN0Lm9wdGlvbnMpIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IEVudW1WYWx1ZURlc2NyaXB0b3JQcm90byk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UubmFtZSAhPT0gXCJcIikge1xuICAgICAgb2JqLm5hbWUgPSBtZXNzYWdlLm5hbWU7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm51bWJlciAhPT0gMCkge1xuICAgICAgb2JqLm51bWJlciA9IE1hdGgucm91bmQobWVzc2FnZS5udW1iZXIpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9iai5vcHRpb25zID0gRW51bVZhbHVlT3B0aW9ucy50b0pTT04obWVzc2FnZS5vcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPEVudW1WYWx1ZURlc2NyaXB0b3JQcm90bz4pOiBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8ge1xuICAgIHJldHVybiBFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8uZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8RW51bVZhbHVlRGVzY3JpcHRvclByb3RvPik6IEVudW1WYWx1ZURlc2NyaXB0b3JQcm90byB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8oKTtcbiAgICBtZXNzYWdlLm5hbWUgPSBvYmplY3QubmFtZSA/PyBcIlwiO1xuICAgIG1lc3NhZ2UubnVtYmVyID0gb2JqZWN0Lm51bWJlciA/PyAwO1xuICAgIG1lc3NhZ2Uub3B0aW9ucyA9IChvYmplY3Qub3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIG9iamVjdC5vcHRpb25zICE9PSBudWxsKVxuICAgICAgPyBFbnVtVmFsdWVPcHRpb25zLmZyb21QYXJ0aWFsKG9iamVjdC5vcHRpb25zKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlU2VydmljZURlc2NyaXB0b3JQcm90bygpOiBTZXJ2aWNlRGVzY3JpcHRvclByb3RvIHtcbiAgcmV0dXJuIHsgbmFtZTogXCJcIiwgbWV0aG9kOiBbXSwgb3B0aW9uczogdW5kZWZpbmVkIH07XG59XG5cbmV4cG9ydCBjb25zdCBTZXJ2aWNlRGVzY3JpcHRvclByb3RvID0ge1xuICBlbmNvZGUobWVzc2FnZTogU2VydmljZURlc2NyaXB0b3JQcm90bywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLm5hbWUgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLm5hbWUpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5tZXRob2QpIHtcbiAgICAgIE1ldGhvZERlc2NyaXB0b3JQcm90by5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgU2VydmljZU9wdGlvbnMuZW5jb2RlKG1lc3NhZ2Uub3B0aW9ucywgd3JpdGVyLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBTZXJ2aWNlRGVzY3JpcHRvclByb3RvIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVNlcnZpY2VEZXNjcmlwdG9yUHJvdG8oKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm5hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxOCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5tZXRob2QucHVzaChNZXRob2REZXNjcmlwdG9yUHJvdG8uZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBpZiAodGFnICE9PSAyNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5vcHRpb25zID0gU2VydmljZU9wdGlvbnMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBpc1NldChvYmplY3QubmFtZSkgPyBTdHJpbmcob2JqZWN0Lm5hbWUpIDogXCJcIixcbiAgICAgIG1ldGhvZDogQXJyYXkuaXNBcnJheShvYmplY3Q/Lm1ldGhvZCkgPyBvYmplY3QubWV0aG9kLm1hcCgoZTogYW55KSA9PiBNZXRob2REZXNjcmlwdG9yUHJvdG8uZnJvbUpTT04oZSkpIDogW10sXG4gICAgICBvcHRpb25zOiBpc1NldChvYmplY3Qub3B0aW9ucykgPyBTZXJ2aWNlT3B0aW9ucy5mcm9tSlNPTihvYmplY3Qub3B0aW9ucykgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogU2VydmljZURlc2NyaXB0b3JQcm90byk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UubmFtZSAhPT0gXCJcIikge1xuICAgICAgb2JqLm5hbWUgPSBtZXNzYWdlLm5hbWU7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1ldGhvZD8ubGVuZ3RoKSB7XG4gICAgICBvYmoubWV0aG9kID0gbWVzc2FnZS5tZXRob2QubWFwKChlKSA9PiBNZXRob2REZXNjcmlwdG9yUHJvdG8udG9KU09OKGUpKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvYmoub3B0aW9ucyA9IFNlcnZpY2VPcHRpb25zLnRvSlNPTihtZXNzYWdlLm9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8U2VydmljZURlc2NyaXB0b3JQcm90bz4pOiBTZXJ2aWNlRGVzY3JpcHRvclByb3RvIHtcbiAgICByZXR1cm4gU2VydmljZURlc2NyaXB0b3JQcm90by5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxTZXJ2aWNlRGVzY3JpcHRvclByb3RvPik6IFNlcnZpY2VEZXNjcmlwdG9yUHJvdG8ge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlU2VydmljZURlc2NyaXB0b3JQcm90bygpO1xuICAgIG1lc3NhZ2UubmFtZSA9IG9iamVjdC5uYW1lID8/IFwiXCI7XG4gICAgbWVzc2FnZS5tZXRob2QgPSBvYmplY3QubWV0aG9kPy5tYXAoKGUpID0+IE1ldGhvZERlc2NyaXB0b3JQcm90by5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgbWVzc2FnZS5vcHRpb25zID0gKG9iamVjdC5vcHRpb25zICE9PSB1bmRlZmluZWQgJiYgb2JqZWN0Lm9wdGlvbnMgIT09IG51bGwpXG4gICAgICA/IFNlcnZpY2VPcHRpb25zLmZyb21QYXJ0aWFsKG9iamVjdC5vcHRpb25zKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlTWV0aG9kRGVzY3JpcHRvclByb3RvKCk6IE1ldGhvZERlc2NyaXB0b3JQcm90byB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogXCJcIixcbiAgICBpbnB1dFR5cGU6IFwiXCIsXG4gICAgb3V0cHV0VHlwZTogXCJcIixcbiAgICBvcHRpb25zOiB1bmRlZmluZWQsXG4gICAgY2xpZW50U3RyZWFtaW5nOiBmYWxzZSxcbiAgICBzZXJ2ZXJTdHJlYW1pbmc6IGZhbHNlLFxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgTWV0aG9kRGVzY3JpcHRvclByb3RvID0ge1xuICBlbmNvZGUobWVzc2FnZTogTWV0aG9kRGVzY3JpcHRvclByb3RvLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UubmFtZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UubmFtZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmlucHV0VHlwZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxOCkuc3RyaW5nKG1lc3NhZ2UuaW5wdXRUeXBlKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3V0cHV0VHlwZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNikuc3RyaW5nKG1lc3NhZ2Uub3V0cHV0VHlwZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgTWV0aG9kT3B0aW9ucy5lbmNvZGUobWVzc2FnZS5vcHRpb25zLCB3cml0ZXIudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5jbGllbnRTdHJlYW1pbmcgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDApLmJvb2wobWVzc2FnZS5jbGllbnRTdHJlYW1pbmcpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zZXJ2ZXJTdHJlYW1pbmcgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDgpLmJvb2wobWVzc2FnZS5zZXJ2ZXJTdHJlYW1pbmcpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IE1ldGhvZERlc2NyaXB0b3JQcm90byB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VNZXRob2REZXNjcmlwdG9yUHJvdG8oKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm5hbWUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxOCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5pbnB1dFR5cGUgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBpZiAodGFnICE9PSAyNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5vdXRwdXRUeXBlID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMzQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uub3B0aW9ucyA9IE1ldGhvZE9wdGlvbnMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGlmICh0YWcgIT09IDQwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmNsaWVudFN0cmVhbWluZyA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBpZiAodGFnICE9PSA0OCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5zZXJ2ZXJTdHJlYW1pbmcgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogTWV0aG9kRGVzY3JpcHRvclByb3RvIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogaXNTZXQob2JqZWN0Lm5hbWUpID8gU3RyaW5nKG9iamVjdC5uYW1lKSA6IFwiXCIsXG4gICAgICBpbnB1dFR5cGU6IGlzU2V0KG9iamVjdC5pbnB1dFR5cGUpID8gU3RyaW5nKG9iamVjdC5pbnB1dFR5cGUpIDogXCJcIixcbiAgICAgIG91dHB1dFR5cGU6IGlzU2V0KG9iamVjdC5vdXRwdXRUeXBlKSA/IFN0cmluZyhvYmplY3Qub3V0cHV0VHlwZSkgOiBcIlwiLFxuICAgICAgb3B0aW9uczogaXNTZXQob2JqZWN0Lm9wdGlvbnMpID8gTWV0aG9kT3B0aW9ucy5mcm9tSlNPTihvYmplY3Qub3B0aW9ucykgOiB1bmRlZmluZWQsXG4gICAgICBjbGllbnRTdHJlYW1pbmc6IGlzU2V0KG9iamVjdC5jbGllbnRTdHJlYW1pbmcpID8gQm9vbGVhbihvYmplY3QuY2xpZW50U3RyZWFtaW5nKSA6IGZhbHNlLFxuICAgICAgc2VydmVyU3RyZWFtaW5nOiBpc1NldChvYmplY3Quc2VydmVyU3RyZWFtaW5nKSA/IEJvb2xlYW4ob2JqZWN0LnNlcnZlclN0cmVhbWluZykgOiBmYWxzZSxcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBNZXRob2REZXNjcmlwdG9yUHJvdG8pOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIGlmIChtZXNzYWdlLm5hbWUgIT09IFwiXCIpIHtcbiAgICAgIG9iai5uYW1lID0gbWVzc2FnZS5uYW1lO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5pbnB1dFR5cGUgIT09IFwiXCIpIHtcbiAgICAgIG9iai5pbnB1dFR5cGUgPSBtZXNzYWdlLmlucHV0VHlwZTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3V0cHV0VHlwZSAhPT0gXCJcIikge1xuICAgICAgb2JqLm91dHB1dFR5cGUgPSBtZXNzYWdlLm91dHB1dFR5cGU7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb2JqLm9wdGlvbnMgPSBNZXRob2RPcHRpb25zLnRvSlNPTihtZXNzYWdlLm9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5jbGllbnRTdHJlYW1pbmcgPT09IHRydWUpIHtcbiAgICAgIG9iai5jbGllbnRTdHJlYW1pbmcgPSBtZXNzYWdlLmNsaWVudFN0cmVhbWluZztcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc2VydmVyU3RyZWFtaW5nID09PSB0cnVlKSB7XG4gICAgICBvYmouc2VydmVyU3RyZWFtaW5nID0gbWVzc2FnZS5zZXJ2ZXJTdHJlYW1pbmc7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxNZXRob2REZXNjcmlwdG9yUHJvdG8+KTogTWV0aG9kRGVzY3JpcHRvclByb3RvIHtcbiAgICByZXR1cm4gTWV0aG9kRGVzY3JpcHRvclByb3RvLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPE1ldGhvZERlc2NyaXB0b3JQcm90bz4pOiBNZXRob2REZXNjcmlwdG9yUHJvdG8ge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlTWV0aG9kRGVzY3JpcHRvclByb3RvKCk7XG4gICAgbWVzc2FnZS5uYW1lID0gb2JqZWN0Lm5hbWUgPz8gXCJcIjtcbiAgICBtZXNzYWdlLmlucHV0VHlwZSA9IG9iamVjdC5pbnB1dFR5cGUgPz8gXCJcIjtcbiAgICBtZXNzYWdlLm91dHB1dFR5cGUgPSBvYmplY3Qub3V0cHV0VHlwZSA/PyBcIlwiO1xuICAgIG1lc3NhZ2Uub3B0aW9ucyA9IChvYmplY3Qub3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIG9iamVjdC5vcHRpb25zICE9PSBudWxsKVxuICAgICAgPyBNZXRob2RPcHRpb25zLmZyb21QYXJ0aWFsKG9iamVjdC5vcHRpb25zKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgbWVzc2FnZS5jbGllbnRTdHJlYW1pbmcgPSBvYmplY3QuY2xpZW50U3RyZWFtaW5nID8/IGZhbHNlO1xuICAgIG1lc3NhZ2Uuc2VydmVyU3RyZWFtaW5nID0gb2JqZWN0LnNlcnZlclN0cmVhbWluZyA/PyBmYWxzZTtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VGaWxlT3B0aW9ucygpOiBGaWxlT3B0aW9ucyB7XG4gIHJldHVybiB7XG4gICAgamF2YVBhY2thZ2U6IFwiXCIsXG4gICAgamF2YU91dGVyQ2xhc3NuYW1lOiBcIlwiLFxuICAgIGphdmFNdWx0aXBsZUZpbGVzOiBmYWxzZSxcbiAgICBqYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoOiBmYWxzZSxcbiAgICBqYXZhU3RyaW5nQ2hlY2tVdGY4OiBmYWxzZSxcbiAgICBvcHRpbWl6ZUZvcjogMSxcbiAgICBnb1BhY2thZ2U6IFwiXCIsXG4gICAgY2NHZW5lcmljU2VydmljZXM6IGZhbHNlLFxuICAgIGphdmFHZW5lcmljU2VydmljZXM6IGZhbHNlLFxuICAgIHB5R2VuZXJpY1NlcnZpY2VzOiBmYWxzZSxcbiAgICBwaHBHZW5lcmljU2VydmljZXM6IGZhbHNlLFxuICAgIGRlcHJlY2F0ZWQ6IGZhbHNlLFxuICAgIGNjRW5hYmxlQXJlbmFzOiBmYWxzZSxcbiAgICBvYmpjQ2xhc3NQcmVmaXg6IFwiXCIsXG4gICAgY3NoYXJwTmFtZXNwYWNlOiBcIlwiLFxuICAgIHN3aWZ0UHJlZml4OiBcIlwiLFxuICAgIHBocENsYXNzUHJlZml4OiBcIlwiLFxuICAgIHBocE5hbWVzcGFjZTogXCJcIixcbiAgICBwaHBNZXRhZGF0YU5hbWVzcGFjZTogXCJcIixcbiAgICBydWJ5UGFja2FnZTogXCJcIixcbiAgICB1bmludGVycHJldGVkT3B0aW9uOiBbXSxcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IEZpbGVPcHRpb25zID0ge1xuICBlbmNvZGUobWVzc2FnZTogRmlsZU9wdGlvbnMsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5qYXZhUGFja2FnZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UuamF2YVBhY2thZ2UpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5qYXZhT3V0ZXJDbGFzc25hbWUgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNjYpLnN0cmluZyhtZXNzYWdlLmphdmFPdXRlckNsYXNzbmFtZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmphdmFNdWx0aXBsZUZpbGVzID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgwKS5ib29sKG1lc3NhZ2UuamF2YU11bHRpcGxlRmlsZXMpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5qYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2MCkuYm9vbChtZXNzYWdlLmphdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2gpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5qYXZhU3RyaW5nQ2hlY2tVdGY4ID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDIxNikuYm9vbChtZXNzYWdlLmphdmFTdHJpbmdDaGVja1V0ZjgpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vcHRpbWl6ZUZvciAhPT0gMSkge1xuICAgICAgd3JpdGVyLnVpbnQzMig3MikuaW50MzIobWVzc2FnZS5vcHRpbWl6ZUZvcik7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmdvUGFja2FnZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMig5MCkuc3RyaW5nKG1lc3NhZ2UuZ29QYWNrYWdlKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuY2NHZW5lcmljU2VydmljZXMgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTI4KS5ib29sKG1lc3NhZ2UuY2NHZW5lcmljU2VydmljZXMpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5qYXZhR2VuZXJpY1NlcnZpY2VzID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEzNikuYm9vbChtZXNzYWdlLmphdmFHZW5lcmljU2VydmljZXMpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5weUdlbmVyaWNTZXJ2aWNlcyA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNDQpLmJvb2wobWVzc2FnZS5weUdlbmVyaWNTZXJ2aWNlcyk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBocEdlbmVyaWNTZXJ2aWNlcyA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzMzYpLmJvb2wobWVzc2FnZS5waHBHZW5lcmljU2VydmljZXMpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kZXByZWNhdGVkID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE4NCkuYm9vbChtZXNzYWdlLmRlcHJlY2F0ZWQpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5jY0VuYWJsZUFyZW5hcyA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNDgpLmJvb2wobWVzc2FnZS5jY0VuYWJsZUFyZW5hcyk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm9iamNDbGFzc1ByZWZpeCAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigyOTApLnN0cmluZyhtZXNzYWdlLm9iamNDbGFzc1ByZWZpeCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmNzaGFycE5hbWVzcGFjZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigyOTgpLnN0cmluZyhtZXNzYWdlLmNzaGFycE5hbWVzcGFjZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnN3aWZ0UHJlZml4ICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDMxNCkuc3RyaW5nKG1lc3NhZ2Uuc3dpZnRQcmVmaXgpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5waHBDbGFzc1ByZWZpeCAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigzMjIpLnN0cmluZyhtZXNzYWdlLnBocENsYXNzUHJlZml4KTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGhwTmFtZXNwYWNlICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDMzMCkuc3RyaW5nKG1lc3NhZ2UucGhwTmFtZXNwYWNlKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGhwTWV0YWRhdGFOYW1lc3BhY2UgIT09IFwiXCIpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzU0KS5zdHJpbmcobWVzc2FnZS5waHBNZXRhZGF0YU5hbWVzcGFjZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnJ1YnlQYWNrYWdlICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDM2Mikuc3RyaW5nKG1lc3NhZ2UucnVieVBhY2thZ2UpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uKSB7XG4gICAgICBVbmludGVycHJldGVkT3B0aW9uLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMig3OTk0KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IEZpbGVPcHRpb25zIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUZpbGVPcHRpb25zKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5qYXZhUGFja2FnZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIGlmICh0YWcgIT09IDY2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmphdmFPdXRlckNsYXNzbmFtZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBpZiAodGFnICE9PSA4MCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5qYXZhTXVsdGlwbGVGaWxlcyA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTYwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmphdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2ggPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgIGlmICh0YWcgIT09IDIxNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5qYXZhU3RyaW5nQ2hlY2tVdGY4ID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIGlmICh0YWcgIT09IDcyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm9wdGltaXplRm9yID0gcmVhZGVyLmludDMyKCkgYXMgYW55O1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIGlmICh0YWcgIT09IDkwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmdvUGFja2FnZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMjgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuY2NHZW5lcmljU2VydmljZXMgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgIGlmICh0YWcgIT09IDEzNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5qYXZhR2VuZXJpY1NlcnZpY2VzID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICBpZiAodGFnICE9PSAxNDQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UucHlHZW5lcmljU2VydmljZXMgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgIGlmICh0YWcgIT09IDMzNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5waHBHZW5lcmljU2VydmljZXMgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgIGlmICh0YWcgIT09IDE4NCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5kZXByZWNhdGVkID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAyNDgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuY2NFbmFibGVBcmVuYXMgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDM2OlxuICAgICAgICAgIGlmICh0YWcgIT09IDI5MCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5vYmpjQ2xhc3NQcmVmaXggPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMzc6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMjk4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmNzaGFycE5hbWVzcGFjZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICBpZiAodGFnICE9PSAzMTQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uuc3dpZnRQcmVmaXggPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMzIyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnBocENsYXNzUHJlZml4ID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDMzMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5waHBOYW1lc3BhY2UgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMzU0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnBocE1ldGFkYXRhTmFtZXNwYWNlID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgIGlmICh0YWcgIT09IDM2Mikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5ydWJ5UGFja2FnZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA5OTk6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNzk5NCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uLnB1c2goVW5pbnRlcnByZXRlZE9wdGlvbi5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IEZpbGVPcHRpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgamF2YVBhY2thZ2U6IGlzU2V0KG9iamVjdC5qYXZhUGFja2FnZSkgPyBTdHJpbmcob2JqZWN0LmphdmFQYWNrYWdlKSA6IFwiXCIsXG4gICAgICBqYXZhT3V0ZXJDbGFzc25hbWU6IGlzU2V0KG9iamVjdC5qYXZhT3V0ZXJDbGFzc25hbWUpID8gU3RyaW5nKG9iamVjdC5qYXZhT3V0ZXJDbGFzc25hbWUpIDogXCJcIixcbiAgICAgIGphdmFNdWx0aXBsZUZpbGVzOiBpc1NldChvYmplY3QuamF2YU11bHRpcGxlRmlsZXMpID8gQm9vbGVhbihvYmplY3QuamF2YU11bHRpcGxlRmlsZXMpIDogZmFsc2UsXG4gICAgICBqYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoOiBpc1NldChvYmplY3QuamF2YUdlbmVyYXRlRXF1YWxzQW5kSGFzaClcbiAgICAgICAgPyBCb29sZWFuKG9iamVjdC5qYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoKVxuICAgICAgICA6IGZhbHNlLFxuICAgICAgamF2YVN0cmluZ0NoZWNrVXRmODogaXNTZXQob2JqZWN0LmphdmFTdHJpbmdDaGVja1V0ZjgpID8gQm9vbGVhbihvYmplY3QuamF2YVN0cmluZ0NoZWNrVXRmOCkgOiBmYWxzZSxcbiAgICAgIG9wdGltaXplRm9yOiBpc1NldChvYmplY3Qub3B0aW1pemVGb3IpID8gZmlsZU9wdGlvbnNfT3B0aW1pemVNb2RlRnJvbUpTT04ob2JqZWN0Lm9wdGltaXplRm9yKSA6IDEsXG4gICAgICBnb1BhY2thZ2U6IGlzU2V0KG9iamVjdC5nb1BhY2thZ2UpID8gU3RyaW5nKG9iamVjdC5nb1BhY2thZ2UpIDogXCJcIixcbiAgICAgIGNjR2VuZXJpY1NlcnZpY2VzOiBpc1NldChvYmplY3QuY2NHZW5lcmljU2VydmljZXMpID8gQm9vbGVhbihvYmplY3QuY2NHZW5lcmljU2VydmljZXMpIDogZmFsc2UsXG4gICAgICBqYXZhR2VuZXJpY1NlcnZpY2VzOiBpc1NldChvYmplY3QuamF2YUdlbmVyaWNTZXJ2aWNlcykgPyBCb29sZWFuKG9iamVjdC5qYXZhR2VuZXJpY1NlcnZpY2VzKSA6IGZhbHNlLFxuICAgICAgcHlHZW5lcmljU2VydmljZXM6IGlzU2V0KG9iamVjdC5weUdlbmVyaWNTZXJ2aWNlcykgPyBCb29sZWFuKG9iamVjdC5weUdlbmVyaWNTZXJ2aWNlcykgOiBmYWxzZSxcbiAgICAgIHBocEdlbmVyaWNTZXJ2aWNlczogaXNTZXQob2JqZWN0LnBocEdlbmVyaWNTZXJ2aWNlcykgPyBCb29sZWFuKG9iamVjdC5waHBHZW5lcmljU2VydmljZXMpIDogZmFsc2UsXG4gICAgICBkZXByZWNhdGVkOiBpc1NldChvYmplY3QuZGVwcmVjYXRlZCkgPyBCb29sZWFuKG9iamVjdC5kZXByZWNhdGVkKSA6IGZhbHNlLFxuICAgICAgY2NFbmFibGVBcmVuYXM6IGlzU2V0KG9iamVjdC5jY0VuYWJsZUFyZW5hcykgPyBCb29sZWFuKG9iamVjdC5jY0VuYWJsZUFyZW5hcykgOiBmYWxzZSxcbiAgICAgIG9iamNDbGFzc1ByZWZpeDogaXNTZXQob2JqZWN0Lm9iamNDbGFzc1ByZWZpeCkgPyBTdHJpbmcob2JqZWN0Lm9iamNDbGFzc1ByZWZpeCkgOiBcIlwiLFxuICAgICAgY3NoYXJwTmFtZXNwYWNlOiBpc1NldChvYmplY3QuY3NoYXJwTmFtZXNwYWNlKSA/IFN0cmluZyhvYmplY3QuY3NoYXJwTmFtZXNwYWNlKSA6IFwiXCIsXG4gICAgICBzd2lmdFByZWZpeDogaXNTZXQob2JqZWN0LnN3aWZ0UHJlZml4KSA/IFN0cmluZyhvYmplY3Quc3dpZnRQcmVmaXgpIDogXCJcIixcbiAgICAgIHBocENsYXNzUHJlZml4OiBpc1NldChvYmplY3QucGhwQ2xhc3NQcmVmaXgpID8gU3RyaW5nKG9iamVjdC5waHBDbGFzc1ByZWZpeCkgOiBcIlwiLFxuICAgICAgcGhwTmFtZXNwYWNlOiBpc1NldChvYmplY3QucGhwTmFtZXNwYWNlKSA/IFN0cmluZyhvYmplY3QucGhwTmFtZXNwYWNlKSA6IFwiXCIsXG4gICAgICBwaHBNZXRhZGF0YU5hbWVzcGFjZTogaXNTZXQob2JqZWN0LnBocE1ldGFkYXRhTmFtZXNwYWNlKSA/IFN0cmluZyhvYmplY3QucGhwTWV0YWRhdGFOYW1lc3BhY2UpIDogXCJcIixcbiAgICAgIHJ1YnlQYWNrYWdlOiBpc1NldChvYmplY3QucnVieVBhY2thZ2UpID8gU3RyaW5nKG9iamVjdC5ydWJ5UGFja2FnZSkgOiBcIlwiLFxuICAgICAgdW5pbnRlcnByZXRlZE9wdGlvbjogQXJyYXkuaXNBcnJheShvYmplY3Q/LnVuaW50ZXJwcmV0ZWRPcHRpb24pXG4gICAgICAgID8gb2JqZWN0LnVuaW50ZXJwcmV0ZWRPcHRpb24ubWFwKChlOiBhbnkpID0+IFVuaW50ZXJwcmV0ZWRPcHRpb24uZnJvbUpTT04oZSkpXG4gICAgICAgIDogW10sXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogRmlsZU9wdGlvbnMpOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIGlmIChtZXNzYWdlLmphdmFQYWNrYWdlICE9PSBcIlwiKSB7XG4gICAgICBvYmouamF2YVBhY2thZ2UgPSBtZXNzYWdlLmphdmFQYWNrYWdlO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5qYXZhT3V0ZXJDbGFzc25hbWUgIT09IFwiXCIpIHtcbiAgICAgIG9iai5qYXZhT3V0ZXJDbGFzc25hbWUgPSBtZXNzYWdlLmphdmFPdXRlckNsYXNzbmFtZTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuamF2YU11bHRpcGxlRmlsZXMgPT09IHRydWUpIHtcbiAgICAgIG9iai5qYXZhTXVsdGlwbGVGaWxlcyA9IG1lc3NhZ2UuamF2YU11bHRpcGxlRmlsZXM7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmphdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2ggPT09IHRydWUpIHtcbiAgICAgIG9iai5qYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoID0gbWVzc2FnZS5qYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5qYXZhU3RyaW5nQ2hlY2tVdGY4ID09PSB0cnVlKSB7XG4gICAgICBvYmouamF2YVN0cmluZ0NoZWNrVXRmOCA9IG1lc3NhZ2UuamF2YVN0cmluZ0NoZWNrVXRmODtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3B0aW1pemVGb3IgIT09IDEpIHtcbiAgICAgIG9iai5vcHRpbWl6ZUZvciA9IGZpbGVPcHRpb25zX09wdGltaXplTW9kZVRvSlNPTihtZXNzYWdlLm9wdGltaXplRm9yKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZ29QYWNrYWdlICE9PSBcIlwiKSB7XG4gICAgICBvYmouZ29QYWNrYWdlID0gbWVzc2FnZS5nb1BhY2thZ2U7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmNjR2VuZXJpY1NlcnZpY2VzID09PSB0cnVlKSB7XG4gICAgICBvYmouY2NHZW5lcmljU2VydmljZXMgPSBtZXNzYWdlLmNjR2VuZXJpY1NlcnZpY2VzO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5qYXZhR2VuZXJpY1NlcnZpY2VzID09PSB0cnVlKSB7XG4gICAgICBvYmouamF2YUdlbmVyaWNTZXJ2aWNlcyA9IG1lc3NhZ2UuamF2YUdlbmVyaWNTZXJ2aWNlcztcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucHlHZW5lcmljU2VydmljZXMgPT09IHRydWUpIHtcbiAgICAgIG9iai5weUdlbmVyaWNTZXJ2aWNlcyA9IG1lc3NhZ2UucHlHZW5lcmljU2VydmljZXM7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBocEdlbmVyaWNTZXJ2aWNlcyA9PT0gdHJ1ZSkge1xuICAgICAgb2JqLnBocEdlbmVyaWNTZXJ2aWNlcyA9IG1lc3NhZ2UucGhwR2VuZXJpY1NlcnZpY2VzO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kZXByZWNhdGVkID09PSB0cnVlKSB7XG4gICAgICBvYmouZGVwcmVjYXRlZCA9IG1lc3NhZ2UuZGVwcmVjYXRlZDtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuY2NFbmFibGVBcmVuYXMgPT09IHRydWUpIHtcbiAgICAgIG9iai5jY0VuYWJsZUFyZW5hcyA9IG1lc3NhZ2UuY2NFbmFibGVBcmVuYXM7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm9iamNDbGFzc1ByZWZpeCAhPT0gXCJcIikge1xuICAgICAgb2JqLm9iamNDbGFzc1ByZWZpeCA9IG1lc3NhZ2Uub2JqY0NsYXNzUHJlZml4O1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5jc2hhcnBOYW1lc3BhY2UgIT09IFwiXCIpIHtcbiAgICAgIG9iai5jc2hhcnBOYW1lc3BhY2UgPSBtZXNzYWdlLmNzaGFycE5hbWVzcGFjZTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc3dpZnRQcmVmaXggIT09IFwiXCIpIHtcbiAgICAgIG9iai5zd2lmdFByZWZpeCA9IG1lc3NhZ2Uuc3dpZnRQcmVmaXg7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBocENsYXNzUHJlZml4ICE9PSBcIlwiKSB7XG4gICAgICBvYmoucGhwQ2xhc3NQcmVmaXggPSBtZXNzYWdlLnBocENsYXNzUHJlZml4O1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5waHBOYW1lc3BhY2UgIT09IFwiXCIpIHtcbiAgICAgIG9iai5waHBOYW1lc3BhY2UgPSBtZXNzYWdlLnBocE5hbWVzcGFjZTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGhwTWV0YWRhdGFOYW1lc3BhY2UgIT09IFwiXCIpIHtcbiAgICAgIG9iai5waHBNZXRhZGF0YU5hbWVzcGFjZSA9IG1lc3NhZ2UucGhwTWV0YWRhdGFOYW1lc3BhY2U7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnJ1YnlQYWNrYWdlICE9PSBcIlwiKSB7XG4gICAgICBvYmoucnVieVBhY2thZ2UgPSBtZXNzYWdlLnJ1YnlQYWNrYWdlO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uPy5sZW5ndGgpIHtcbiAgICAgIG9iai51bmludGVycHJldGVkT3B0aW9uID0gbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uLm1hcCgoZSkgPT4gVW5pbnRlcnByZXRlZE9wdGlvbi50b0pTT04oZSkpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8RmlsZU9wdGlvbnM+KTogRmlsZU9wdGlvbnMge1xuICAgIHJldHVybiBGaWxlT3B0aW9ucy5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxGaWxlT3B0aW9ucz4pOiBGaWxlT3B0aW9ucyB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VGaWxlT3B0aW9ucygpO1xuICAgIG1lc3NhZ2UuamF2YVBhY2thZ2UgPSBvYmplY3QuamF2YVBhY2thZ2UgPz8gXCJcIjtcbiAgICBtZXNzYWdlLmphdmFPdXRlckNsYXNzbmFtZSA9IG9iamVjdC5qYXZhT3V0ZXJDbGFzc25hbWUgPz8gXCJcIjtcbiAgICBtZXNzYWdlLmphdmFNdWx0aXBsZUZpbGVzID0gb2JqZWN0LmphdmFNdWx0aXBsZUZpbGVzID8/IGZhbHNlO1xuICAgIG1lc3NhZ2UuamF2YUdlbmVyYXRlRXF1YWxzQW5kSGFzaCA9IG9iamVjdC5qYXZhR2VuZXJhdGVFcXVhbHNBbmRIYXNoID8/IGZhbHNlO1xuICAgIG1lc3NhZ2UuamF2YVN0cmluZ0NoZWNrVXRmOCA9IG9iamVjdC5qYXZhU3RyaW5nQ2hlY2tVdGY4ID8/IGZhbHNlO1xuICAgIG1lc3NhZ2Uub3B0aW1pemVGb3IgPSBvYmplY3Qub3B0aW1pemVGb3IgPz8gMTtcbiAgICBtZXNzYWdlLmdvUGFja2FnZSA9IG9iamVjdC5nb1BhY2thZ2UgPz8gXCJcIjtcbiAgICBtZXNzYWdlLmNjR2VuZXJpY1NlcnZpY2VzID0gb2JqZWN0LmNjR2VuZXJpY1NlcnZpY2VzID8/IGZhbHNlO1xuICAgIG1lc3NhZ2UuamF2YUdlbmVyaWNTZXJ2aWNlcyA9IG9iamVjdC5qYXZhR2VuZXJpY1NlcnZpY2VzID8/IGZhbHNlO1xuICAgIG1lc3NhZ2UucHlHZW5lcmljU2VydmljZXMgPSBvYmplY3QucHlHZW5lcmljU2VydmljZXMgPz8gZmFsc2U7XG4gICAgbWVzc2FnZS5waHBHZW5lcmljU2VydmljZXMgPSBvYmplY3QucGhwR2VuZXJpY1NlcnZpY2VzID8/IGZhbHNlO1xuICAgIG1lc3NhZ2UuZGVwcmVjYXRlZCA9IG9iamVjdC5kZXByZWNhdGVkID8/IGZhbHNlO1xuICAgIG1lc3NhZ2UuY2NFbmFibGVBcmVuYXMgPSBvYmplY3QuY2NFbmFibGVBcmVuYXMgPz8gZmFsc2U7XG4gICAgbWVzc2FnZS5vYmpjQ2xhc3NQcmVmaXggPSBvYmplY3Qub2JqY0NsYXNzUHJlZml4ID8/IFwiXCI7XG4gICAgbWVzc2FnZS5jc2hhcnBOYW1lc3BhY2UgPSBvYmplY3QuY3NoYXJwTmFtZXNwYWNlID8/IFwiXCI7XG4gICAgbWVzc2FnZS5zd2lmdFByZWZpeCA9IG9iamVjdC5zd2lmdFByZWZpeCA/PyBcIlwiO1xuICAgIG1lc3NhZ2UucGhwQ2xhc3NQcmVmaXggPSBvYmplY3QucGhwQ2xhc3NQcmVmaXggPz8gXCJcIjtcbiAgICBtZXNzYWdlLnBocE5hbWVzcGFjZSA9IG9iamVjdC5waHBOYW1lc3BhY2UgPz8gXCJcIjtcbiAgICBtZXNzYWdlLnBocE1ldGFkYXRhTmFtZXNwYWNlID0gb2JqZWN0LnBocE1ldGFkYXRhTmFtZXNwYWNlID8/IFwiXCI7XG4gICAgbWVzc2FnZS5ydWJ5UGFja2FnZSA9IG9iamVjdC5ydWJ5UGFja2FnZSA/PyBcIlwiO1xuICAgIG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbiA9IG9iamVjdC51bmludGVycHJldGVkT3B0aW9uPy5tYXAoKGUpID0+IFVuaW50ZXJwcmV0ZWRPcHRpb24uZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZU1lc3NhZ2VPcHRpb25zKCk6IE1lc3NhZ2VPcHRpb25zIHtcbiAgcmV0dXJuIHtcbiAgICBtZXNzYWdlU2V0V2lyZUZvcm1hdDogZmFsc2UsXG4gICAgbm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3NvcjogZmFsc2UsXG4gICAgZGVwcmVjYXRlZDogZmFsc2UsXG4gICAgbWFwRW50cnk6IGZhbHNlLFxuICAgIGRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHM6IGZhbHNlLFxuICAgIHVuaW50ZXJwcmV0ZWRPcHRpb246IFtdLFxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgTWVzc2FnZU9wdGlvbnMgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBNZXNzYWdlT3B0aW9ucywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLm1lc3NhZ2VTZXRXaXJlRm9ybWF0ID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmJvb2wobWVzc2FnZS5tZXNzYWdlU2V0V2lyZUZvcm1hdCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3IgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmJvb2wobWVzc2FnZS5ub1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29yKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZGVwcmVjYXRlZCA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuYm9vbChtZXNzYWdlLmRlcHJlY2F0ZWQpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5tYXBFbnRyeSA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMig1NikuYm9vbChtZXNzYWdlLm1hcEVudHJ5KTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cyA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4OCkuYm9vbChtZXNzYWdlLmRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHMpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uKSB7XG4gICAgICBVbmludGVycHJldGVkT3B0aW9uLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMig3OTk0KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IE1lc3NhZ2VPcHRpb25zIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZU1lc3NhZ2VPcHRpb25zKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSA4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm1lc3NhZ2VTZXRXaXJlRm9ybWF0ID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGlmICh0YWcgIT09IDE2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm5vU3RhbmRhcmREZXNjcmlwdG9yQWNjZXNzb3IgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMjQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZGVwcmVjYXRlZCA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBpZiAodGFnICE9PSA1Nikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5tYXBFbnRyeSA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gODgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cyA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgOTk5OlxuICAgICAgICAgIGlmICh0YWcgIT09IDc5OTQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbi5wdXNoKFVuaW50ZXJwcmV0ZWRPcHRpb24uZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBNZXNzYWdlT3B0aW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lc3NhZ2VTZXRXaXJlRm9ybWF0OiBpc1NldChvYmplY3QubWVzc2FnZVNldFdpcmVGb3JtYXQpID8gQm9vbGVhbihvYmplY3QubWVzc2FnZVNldFdpcmVGb3JtYXQpIDogZmFsc2UsXG4gICAgICBub1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29yOiBpc1NldChvYmplY3Qubm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3NvcilcbiAgICAgICAgPyBCb29sZWFuKG9iamVjdC5ub1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29yKVxuICAgICAgICA6IGZhbHNlLFxuICAgICAgZGVwcmVjYXRlZDogaXNTZXQob2JqZWN0LmRlcHJlY2F0ZWQpID8gQm9vbGVhbihvYmplY3QuZGVwcmVjYXRlZCkgOiBmYWxzZSxcbiAgICAgIG1hcEVudHJ5OiBpc1NldChvYmplY3QubWFwRW50cnkpID8gQm9vbGVhbihvYmplY3QubWFwRW50cnkpIDogZmFsc2UsXG4gICAgICBkZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzOiBpc1NldChvYmplY3QuZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cylcbiAgICAgICAgPyBCb29sZWFuKG9iamVjdC5kZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzKVxuICAgICAgICA6IGZhbHNlLFxuICAgICAgdW5pbnRlcnByZXRlZE9wdGlvbjogQXJyYXkuaXNBcnJheShvYmplY3Q/LnVuaW50ZXJwcmV0ZWRPcHRpb24pXG4gICAgICAgID8gb2JqZWN0LnVuaW50ZXJwcmV0ZWRPcHRpb24ubWFwKChlOiBhbnkpID0+IFVuaW50ZXJwcmV0ZWRPcHRpb24uZnJvbUpTT04oZSkpXG4gICAgICAgIDogW10sXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogTWVzc2FnZU9wdGlvbnMpOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIGlmIChtZXNzYWdlLm1lc3NhZ2VTZXRXaXJlRm9ybWF0ID09PSB0cnVlKSB7XG4gICAgICBvYmoubWVzc2FnZVNldFdpcmVGb3JtYXQgPSBtZXNzYWdlLm1lc3NhZ2VTZXRXaXJlRm9ybWF0O1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5ub1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29yID09PSB0cnVlKSB7XG4gICAgICBvYmoubm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3NvciA9IG1lc3NhZ2Uubm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3NvcjtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZGVwcmVjYXRlZCA9PT0gdHJ1ZSkge1xuICAgICAgb2JqLmRlcHJlY2F0ZWQgPSBtZXNzYWdlLmRlcHJlY2F0ZWQ7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1hcEVudHJ5ID09PSB0cnVlKSB7XG4gICAgICBvYmoubWFwRW50cnkgPSBtZXNzYWdlLm1hcEVudHJ5O1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzID09PSB0cnVlKSB7XG4gICAgICBvYmouZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cyA9IG1lc3NhZ2UuZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cztcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbj8ubGVuZ3RoKSB7XG4gICAgICBvYmoudW5pbnRlcnByZXRlZE9wdGlvbiA9IG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbi5tYXAoKGUpID0+IFVuaW50ZXJwcmV0ZWRPcHRpb24udG9KU09OKGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPE1lc3NhZ2VPcHRpb25zPik6IE1lc3NhZ2VPcHRpb25zIHtcbiAgICByZXR1cm4gTWVzc2FnZU9wdGlvbnMuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8TWVzc2FnZU9wdGlvbnM+KTogTWVzc2FnZU9wdGlvbnMge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlTWVzc2FnZU9wdGlvbnMoKTtcbiAgICBtZXNzYWdlLm1lc3NhZ2VTZXRXaXJlRm9ybWF0ID0gb2JqZWN0Lm1lc3NhZ2VTZXRXaXJlRm9ybWF0ID8/IGZhbHNlO1xuICAgIG1lc3NhZ2Uubm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3NvciA9IG9iamVjdC5ub1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29yID8/IGZhbHNlO1xuICAgIG1lc3NhZ2UuZGVwcmVjYXRlZCA9IG9iamVjdC5kZXByZWNhdGVkID8/IGZhbHNlO1xuICAgIG1lc3NhZ2UubWFwRW50cnkgPSBvYmplY3QubWFwRW50cnkgPz8gZmFsc2U7XG4gICAgbWVzc2FnZS5kZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzID0gb2JqZWN0LmRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHMgPz8gZmFsc2U7XG4gICAgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uID0gb2JqZWN0LnVuaW50ZXJwcmV0ZWRPcHRpb24/Lm1hcCgoZSkgPT4gVW5pbnRlcnByZXRlZE9wdGlvbi5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlRmllbGRPcHRpb25zKCk6IEZpZWxkT3B0aW9ucyB7XG4gIHJldHVybiB7XG4gICAgY3R5cGU6IDAsXG4gICAgcGFja2VkOiBmYWxzZSxcbiAgICBqc3R5cGU6IDAsXG4gICAgbGF6eTogZmFsc2UsXG4gICAgdW52ZXJpZmllZExhenk6IGZhbHNlLFxuICAgIGRlcHJlY2F0ZWQ6IGZhbHNlLFxuICAgIHdlYWs6IGZhbHNlLFxuICAgIGRlYnVnUmVkYWN0OiBmYWxzZSxcbiAgICByZXRlbnRpb246IDAsXG4gICAgdGFyZ2V0OiAwLFxuICAgIHVuaW50ZXJwcmV0ZWRPcHRpb246IFtdLFxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgRmllbGRPcHRpb25zID0ge1xuICBlbmNvZGUobWVzc2FnZTogRmllbGRPcHRpb25zLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuY3R5cGUgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuaW50MzIobWVzc2FnZS5jdHlwZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBhY2tlZCA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuYm9vbChtZXNzYWdlLnBhY2tlZCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmpzdHlwZSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0OCkuaW50MzIobWVzc2FnZS5qc3R5cGUpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5sYXp5ID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQwKS5ib29sKG1lc3NhZ2UubGF6eSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnVudmVyaWZpZWRMYXp5ID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEyMCkuYm9vbChtZXNzYWdlLnVudmVyaWZpZWRMYXp5KTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZGVwcmVjYXRlZCA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuYm9vbChtZXNzYWdlLmRlcHJlY2F0ZWQpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS53ZWFrID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgwKS5ib29sKG1lc3NhZ2Uud2Vhayk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRlYnVnUmVkYWN0ID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEyOCkuYm9vbChtZXNzYWdlLmRlYnVnUmVkYWN0KTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucmV0ZW50aW9uICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEzNikuaW50MzIobWVzc2FnZS5yZXRlbnRpb24pO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS50YXJnZXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTQ0KS5pbnQzMihtZXNzYWdlLnRhcmdldCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24pIHtcbiAgICAgIFVuaW50ZXJwcmV0ZWRPcHRpb24uZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDc5OTQpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogRmllbGRPcHRpb25zIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUZpZWxkT3B0aW9ucygpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gOCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5jdHlwZSA9IHJlYWRlci5pbnQzMigpIGFzIGFueTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGlmICh0YWcgIT09IDE2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnBhY2tlZCA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBpZiAodGFnICE9PSA0OCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5qc3R5cGUgPSByZWFkZXIuaW50MzIoKSBhcyBhbnk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBpZiAodGFnICE9PSA0MCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5sYXp5ID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMjApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UudW52ZXJpZmllZExhenkgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMjQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZGVwcmVjYXRlZCA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gODApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uud2VhayA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTI4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmRlYnVnUmVkYWN0ID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMzYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UucmV0ZW50aW9uID0gcmVhZGVyLmludDMyKCkgYXMgYW55O1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgIGlmICh0YWcgIT09IDE0NCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS50YXJnZXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgOTk5OlxuICAgICAgICAgIGlmICh0YWcgIT09IDc5OTQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbi5wdXNoKFVuaW50ZXJwcmV0ZWRPcHRpb24uZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBGaWVsZE9wdGlvbnMge1xuICAgIHJldHVybiB7XG4gICAgICBjdHlwZTogaXNTZXQob2JqZWN0LmN0eXBlKSA/IGZpZWxkT3B0aW9uc19DVHlwZUZyb21KU09OKG9iamVjdC5jdHlwZSkgOiAwLFxuICAgICAgcGFja2VkOiBpc1NldChvYmplY3QucGFja2VkKSA/IEJvb2xlYW4ob2JqZWN0LnBhY2tlZCkgOiBmYWxzZSxcbiAgICAgIGpzdHlwZTogaXNTZXQob2JqZWN0LmpzdHlwZSkgPyBmaWVsZE9wdGlvbnNfSlNUeXBlRnJvbUpTT04ob2JqZWN0LmpzdHlwZSkgOiAwLFxuICAgICAgbGF6eTogaXNTZXQob2JqZWN0LmxhenkpID8gQm9vbGVhbihvYmplY3QubGF6eSkgOiBmYWxzZSxcbiAgICAgIHVudmVyaWZpZWRMYXp5OiBpc1NldChvYmplY3QudW52ZXJpZmllZExhenkpID8gQm9vbGVhbihvYmplY3QudW52ZXJpZmllZExhenkpIDogZmFsc2UsXG4gICAgICBkZXByZWNhdGVkOiBpc1NldChvYmplY3QuZGVwcmVjYXRlZCkgPyBCb29sZWFuKG9iamVjdC5kZXByZWNhdGVkKSA6IGZhbHNlLFxuICAgICAgd2VhazogaXNTZXQob2JqZWN0LndlYWspID8gQm9vbGVhbihvYmplY3Qud2VhaykgOiBmYWxzZSxcbiAgICAgIGRlYnVnUmVkYWN0OiBpc1NldChvYmplY3QuZGVidWdSZWRhY3QpID8gQm9vbGVhbihvYmplY3QuZGVidWdSZWRhY3QpIDogZmFsc2UsXG4gICAgICByZXRlbnRpb246IGlzU2V0KG9iamVjdC5yZXRlbnRpb24pID8gZmllbGRPcHRpb25zX09wdGlvblJldGVudGlvbkZyb21KU09OKG9iamVjdC5yZXRlbnRpb24pIDogMCxcbiAgICAgIHRhcmdldDogaXNTZXQob2JqZWN0LnRhcmdldCkgPyBmaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZUZyb21KU09OKG9iamVjdC50YXJnZXQpIDogMCxcbiAgICAgIHVuaW50ZXJwcmV0ZWRPcHRpb246IEFycmF5LmlzQXJyYXkob2JqZWN0Py51bmludGVycHJldGVkT3B0aW9uKVxuICAgICAgICA/IG9iamVjdC51bmludGVycHJldGVkT3B0aW9uLm1hcCgoZTogYW55KSA9PiBVbmludGVycHJldGVkT3B0aW9uLmZyb21KU09OKGUpKVxuICAgICAgICA6IFtdLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IEZpZWxkT3B0aW9ucyk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UuY3R5cGUgIT09IDApIHtcbiAgICAgIG9iai5jdHlwZSA9IGZpZWxkT3B0aW9uc19DVHlwZVRvSlNPTihtZXNzYWdlLmN0eXBlKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGFja2VkID09PSB0cnVlKSB7XG4gICAgICBvYmoucGFja2VkID0gbWVzc2FnZS5wYWNrZWQ7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmpzdHlwZSAhPT0gMCkge1xuICAgICAgb2JqLmpzdHlwZSA9IGZpZWxkT3B0aW9uc19KU1R5cGVUb0pTT04obWVzc2FnZS5qc3R5cGUpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5sYXp5ID09PSB0cnVlKSB7XG4gICAgICBvYmoubGF6eSA9IG1lc3NhZ2UubGF6eTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudW52ZXJpZmllZExhenkgPT09IHRydWUpIHtcbiAgICAgIG9iai51bnZlcmlmaWVkTGF6eSA9IG1lc3NhZ2UudW52ZXJpZmllZExhenk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRlcHJlY2F0ZWQgPT09IHRydWUpIHtcbiAgICAgIG9iai5kZXByZWNhdGVkID0gbWVzc2FnZS5kZXByZWNhdGVkO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS53ZWFrID09PSB0cnVlKSB7XG4gICAgICBvYmoud2VhayA9IG1lc3NhZ2Uud2VhaztcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZGVidWdSZWRhY3QgPT09IHRydWUpIHtcbiAgICAgIG9iai5kZWJ1Z1JlZGFjdCA9IG1lc3NhZ2UuZGVidWdSZWRhY3Q7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnJldGVudGlvbiAhPT0gMCkge1xuICAgICAgb2JqLnJldGVudGlvbiA9IGZpZWxkT3B0aW9uc19PcHRpb25SZXRlbnRpb25Ub0pTT04obWVzc2FnZS5yZXRlbnRpb24pO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS50YXJnZXQgIT09IDApIHtcbiAgICAgIG9iai50YXJnZXQgPSBmaWVsZE9wdGlvbnNfT3B0aW9uVGFyZ2V0VHlwZVRvSlNPTihtZXNzYWdlLnRhcmdldCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24/Lmxlbmd0aCkge1xuICAgICAgb2JqLnVuaW50ZXJwcmV0ZWRPcHRpb24gPSBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24ubWFwKChlKSA9PiBVbmludGVycHJldGVkT3B0aW9uLnRvSlNPTihlKSk7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxGaWVsZE9wdGlvbnM+KTogRmllbGRPcHRpb25zIHtcbiAgICByZXR1cm4gRmllbGRPcHRpb25zLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPEZpZWxkT3B0aW9ucz4pOiBGaWVsZE9wdGlvbnMge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRmllbGRPcHRpb25zKCk7XG4gICAgbWVzc2FnZS5jdHlwZSA9IG9iamVjdC5jdHlwZSA/PyAwO1xuICAgIG1lc3NhZ2UucGFja2VkID0gb2JqZWN0LnBhY2tlZCA/PyBmYWxzZTtcbiAgICBtZXNzYWdlLmpzdHlwZSA9IG9iamVjdC5qc3R5cGUgPz8gMDtcbiAgICBtZXNzYWdlLmxhenkgPSBvYmplY3QubGF6eSA/PyBmYWxzZTtcbiAgICBtZXNzYWdlLnVudmVyaWZpZWRMYXp5ID0gb2JqZWN0LnVudmVyaWZpZWRMYXp5ID8/IGZhbHNlO1xuICAgIG1lc3NhZ2UuZGVwcmVjYXRlZCA9IG9iamVjdC5kZXByZWNhdGVkID8/IGZhbHNlO1xuICAgIG1lc3NhZ2Uud2VhayA9IG9iamVjdC53ZWFrID8/IGZhbHNlO1xuICAgIG1lc3NhZ2UuZGVidWdSZWRhY3QgPSBvYmplY3QuZGVidWdSZWRhY3QgPz8gZmFsc2U7XG4gICAgbWVzc2FnZS5yZXRlbnRpb24gPSBvYmplY3QucmV0ZW50aW9uID8/IDA7XG4gICAgbWVzc2FnZS50YXJnZXQgPSBvYmplY3QudGFyZ2V0ID8/IDA7XG4gICAgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uID0gb2JqZWN0LnVuaW50ZXJwcmV0ZWRPcHRpb24/Lm1hcCgoZSkgPT4gVW5pbnRlcnByZXRlZE9wdGlvbi5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlT25lb2ZPcHRpb25zKCk6IE9uZW9mT3B0aW9ucyB7XG4gIHJldHVybiB7IHVuaW50ZXJwcmV0ZWRPcHRpb246IFtdIH07XG59XG5cbmV4cG9ydCBjb25zdCBPbmVvZk9wdGlvbnMgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBPbmVvZk9wdGlvbnMsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uKSB7XG4gICAgICBVbmludGVycHJldGVkT3B0aW9uLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMig3OTk0KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IE9uZW9mT3B0aW9ucyB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VPbmVvZk9wdGlvbnMoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSA5OTk6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNzk5NCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uLnB1c2goVW5pbnRlcnByZXRlZE9wdGlvbi5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IE9uZW9mT3B0aW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVuaW50ZXJwcmV0ZWRPcHRpb246IEFycmF5LmlzQXJyYXkob2JqZWN0Py51bmludGVycHJldGVkT3B0aW9uKVxuICAgICAgICA/IG9iamVjdC51bmludGVycHJldGVkT3B0aW9uLm1hcCgoZTogYW55KSA9PiBVbmludGVycHJldGVkT3B0aW9uLmZyb21KU09OKGUpKVxuICAgICAgICA6IFtdLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IE9uZW9mT3B0aW9ucyk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbj8ubGVuZ3RoKSB7XG4gICAgICBvYmoudW5pbnRlcnByZXRlZE9wdGlvbiA9IG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbi5tYXAoKGUpID0+IFVuaW50ZXJwcmV0ZWRPcHRpb24udG9KU09OKGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPE9uZW9mT3B0aW9ucz4pOiBPbmVvZk9wdGlvbnMge1xuICAgIHJldHVybiBPbmVvZk9wdGlvbnMuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8T25lb2ZPcHRpb25zPik6IE9uZW9mT3B0aW9ucyB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VPbmVvZk9wdGlvbnMoKTtcbiAgICBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24gPSBvYmplY3QudW5pbnRlcnByZXRlZE9wdGlvbj8ubWFwKChlKSA9PiBVbmludGVycHJldGVkT3B0aW9uLmZyb21QYXJ0aWFsKGUpKSB8fCBbXTtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VFbnVtT3B0aW9ucygpOiBFbnVtT3B0aW9ucyB7XG4gIHJldHVybiB7IGFsbG93QWxpYXM6IGZhbHNlLCBkZXByZWNhdGVkOiBmYWxzZSwgZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0czogZmFsc2UsIHVuaW50ZXJwcmV0ZWRPcHRpb246IFtdIH07XG59XG5cbmV4cG9ydCBjb25zdCBFbnVtT3B0aW9ucyA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IEVudW1PcHRpb25zLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuYWxsb3dBbGlhcyA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuYm9vbChtZXNzYWdlLmFsbG93QWxpYXMpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kZXByZWNhdGVkID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UuZGVwcmVjYXRlZCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHMgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDgpLmJvb2wobWVzc2FnZS5kZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbikge1xuICAgICAgVW5pbnRlcnByZXRlZE9wdGlvbi5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoNzk5NCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBFbnVtT3B0aW9ucyB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VFbnVtT3B0aW9ucygpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuYWxsb3dBbGlhcyA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBpZiAodGFnICE9PSAyNCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5kZXByZWNhdGVkID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIGlmICh0YWcgIT09IDQ4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHMgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDk5OTpcbiAgICAgICAgICBpZiAodGFnICE9PSA3OTk0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24ucHVzaChVbmludGVycHJldGVkT3B0aW9uLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogRW51bU9wdGlvbnMge1xuICAgIHJldHVybiB7XG4gICAgICBhbGxvd0FsaWFzOiBpc1NldChvYmplY3QuYWxsb3dBbGlhcykgPyBCb29sZWFuKG9iamVjdC5hbGxvd0FsaWFzKSA6IGZhbHNlLFxuICAgICAgZGVwcmVjYXRlZDogaXNTZXQob2JqZWN0LmRlcHJlY2F0ZWQpID8gQm9vbGVhbihvYmplY3QuZGVwcmVjYXRlZCkgOiBmYWxzZSxcbiAgICAgIGRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHM6IGlzU2V0KG9iamVjdC5kZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzKVxuICAgICAgICA/IEJvb2xlYW4ob2JqZWN0LmRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHMpXG4gICAgICAgIDogZmFsc2UsXG4gICAgICB1bmludGVycHJldGVkT3B0aW9uOiBBcnJheS5pc0FycmF5KG9iamVjdD8udW5pbnRlcnByZXRlZE9wdGlvbilcbiAgICAgICAgPyBvYmplY3QudW5pbnRlcnByZXRlZE9wdGlvbi5tYXAoKGU6IGFueSkgPT4gVW5pbnRlcnByZXRlZE9wdGlvbi5mcm9tSlNPTihlKSlcbiAgICAgICAgOiBbXSxcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBFbnVtT3B0aW9ucyk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UuYWxsb3dBbGlhcyA9PT0gdHJ1ZSkge1xuICAgICAgb2JqLmFsbG93QWxpYXMgPSBtZXNzYWdlLmFsbG93QWxpYXM7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRlcHJlY2F0ZWQgPT09IHRydWUpIHtcbiAgICAgIG9iai5kZXByZWNhdGVkID0gbWVzc2FnZS5kZXByZWNhdGVkO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kZXByZWNhdGVkTGVnYWN5SnNvbkZpZWxkQ29uZmxpY3RzID09PSB0cnVlKSB7XG4gICAgICBvYmouZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cyA9IG1lc3NhZ2UuZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cztcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbj8ubGVuZ3RoKSB7XG4gICAgICBvYmoudW5pbnRlcnByZXRlZE9wdGlvbiA9IG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbi5tYXAoKGUpID0+IFVuaW50ZXJwcmV0ZWRPcHRpb24udG9KU09OKGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPEVudW1PcHRpb25zPik6IEVudW1PcHRpb25zIHtcbiAgICByZXR1cm4gRW51bU9wdGlvbnMuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8RW51bU9wdGlvbnM+KTogRW51bU9wdGlvbnMge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlRW51bU9wdGlvbnMoKTtcbiAgICBtZXNzYWdlLmFsbG93QWxpYXMgPSBvYmplY3QuYWxsb3dBbGlhcyA/PyBmYWxzZTtcbiAgICBtZXNzYWdlLmRlcHJlY2F0ZWQgPSBvYmplY3QuZGVwcmVjYXRlZCA/PyBmYWxzZTtcbiAgICBtZXNzYWdlLmRlcHJlY2F0ZWRMZWdhY3lKc29uRmllbGRDb25mbGljdHMgPSBvYmplY3QuZGVwcmVjYXRlZExlZ2FjeUpzb25GaWVsZENvbmZsaWN0cyA/PyBmYWxzZTtcbiAgICBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24gPSBvYmplY3QudW5pbnRlcnByZXRlZE9wdGlvbj8ubWFwKChlKSA9PiBVbmludGVycHJldGVkT3B0aW9uLmZyb21QYXJ0aWFsKGUpKSB8fCBbXTtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VFbnVtVmFsdWVPcHRpb25zKCk6IEVudW1WYWx1ZU9wdGlvbnMge1xuICByZXR1cm4geyBkZXByZWNhdGVkOiBmYWxzZSwgdW5pbnRlcnByZXRlZE9wdGlvbjogW10gfTtcbn1cblxuZXhwb3J0IGNvbnN0IEVudW1WYWx1ZU9wdGlvbnMgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBFbnVtVmFsdWVPcHRpb25zLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuZGVwcmVjYXRlZCA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5ib29sKG1lc3NhZ2UuZGVwcmVjYXRlZCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24pIHtcbiAgICAgIFVuaW50ZXJwcmV0ZWRPcHRpb24uZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDc5OTQpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogRW51bVZhbHVlT3B0aW9ucyB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VFbnVtVmFsdWVPcHRpb25zKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSA4KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmRlcHJlY2F0ZWQgPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDk5OTpcbiAgICAgICAgICBpZiAodGFnICE9PSA3OTk0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24ucHVzaChVbmludGVycHJldGVkT3B0aW9uLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogRW51bVZhbHVlT3B0aW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRlcHJlY2F0ZWQ6IGlzU2V0KG9iamVjdC5kZXByZWNhdGVkKSA/IEJvb2xlYW4ob2JqZWN0LmRlcHJlY2F0ZWQpIDogZmFsc2UsXG4gICAgICB1bmludGVycHJldGVkT3B0aW9uOiBBcnJheS5pc0FycmF5KG9iamVjdD8udW5pbnRlcnByZXRlZE9wdGlvbilcbiAgICAgICAgPyBvYmplY3QudW5pbnRlcnByZXRlZE9wdGlvbi5tYXAoKGU6IGFueSkgPT4gVW5pbnRlcnByZXRlZE9wdGlvbi5mcm9tSlNPTihlKSlcbiAgICAgICAgOiBbXSxcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBFbnVtVmFsdWVPcHRpb25zKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBpZiAobWVzc2FnZS5kZXByZWNhdGVkID09PSB0cnVlKSB7XG4gICAgICBvYmouZGVwcmVjYXRlZCA9IG1lc3NhZ2UuZGVwcmVjYXRlZDtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbj8ubGVuZ3RoKSB7XG4gICAgICBvYmoudW5pbnRlcnByZXRlZE9wdGlvbiA9IG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbi5tYXAoKGUpID0+IFVuaW50ZXJwcmV0ZWRPcHRpb24udG9KU09OKGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcblxuICBjcmVhdGUoYmFzZT86IERlZXBQYXJ0aWFsPEVudW1WYWx1ZU9wdGlvbnM+KTogRW51bVZhbHVlT3B0aW9ucyB7XG4gICAgcmV0dXJuIEVudW1WYWx1ZU9wdGlvbnMuZnJvbVBhcnRpYWwoYmFzZSA/PyB7fSk7XG4gIH0sXG4gIGZyb21QYXJ0aWFsKG9iamVjdDogRGVlcFBhcnRpYWw8RW51bVZhbHVlT3B0aW9ucz4pOiBFbnVtVmFsdWVPcHRpb25zIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUVudW1WYWx1ZU9wdGlvbnMoKTtcbiAgICBtZXNzYWdlLmRlcHJlY2F0ZWQgPSBvYmplY3QuZGVwcmVjYXRlZCA/PyBmYWxzZTtcbiAgICBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24gPSBvYmplY3QudW5pbnRlcnByZXRlZE9wdGlvbj8ubWFwKChlKSA9PiBVbmludGVycHJldGVkT3B0aW9uLmZyb21QYXJ0aWFsKGUpKSB8fCBbXTtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VTZXJ2aWNlT3B0aW9ucygpOiBTZXJ2aWNlT3B0aW9ucyB7XG4gIHJldHVybiB7IGRlcHJlY2F0ZWQ6IGZhbHNlLCB1bmludGVycHJldGVkT3B0aW9uOiBbXSB9O1xufVxuXG5leHBvcnQgY29uc3QgU2VydmljZU9wdGlvbnMgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBTZXJ2aWNlT3B0aW9ucywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmRlcHJlY2F0ZWQgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjY0KS5ib29sKG1lc3NhZ2UuZGVwcmVjYXRlZCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24pIHtcbiAgICAgIFVuaW50ZXJwcmV0ZWRPcHRpb24uZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDc5OTQpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogU2VydmljZU9wdGlvbnMge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlU2VydmljZU9wdGlvbnMoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICBpZiAodGFnICE9PSAyNjQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuZGVwcmVjYXRlZCA9IHJlYWRlci5ib29sKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgOTk5OlxuICAgICAgICAgIGlmICh0YWcgIT09IDc5OTQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UudW5pbnRlcnByZXRlZE9wdGlvbi5wdXNoKFVuaW50ZXJwcmV0ZWRPcHRpb24uZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBTZXJ2aWNlT3B0aW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRlcHJlY2F0ZWQ6IGlzU2V0KG9iamVjdC5kZXByZWNhdGVkKSA/IEJvb2xlYW4ob2JqZWN0LmRlcHJlY2F0ZWQpIDogZmFsc2UsXG4gICAgICB1bmludGVycHJldGVkT3B0aW9uOiBBcnJheS5pc0FycmF5KG9iamVjdD8udW5pbnRlcnByZXRlZE9wdGlvbilcbiAgICAgICAgPyBvYmplY3QudW5pbnRlcnByZXRlZE9wdGlvbi5tYXAoKGU6IGFueSkgPT4gVW5pbnRlcnByZXRlZE9wdGlvbi5mcm9tSlNPTihlKSlcbiAgICAgICAgOiBbXSxcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBTZXJ2aWNlT3B0aW9ucyk6IHVua25vd24ge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG4gICAgaWYgKG1lc3NhZ2UuZGVwcmVjYXRlZCA9PT0gdHJ1ZSkge1xuICAgICAgb2JqLmRlcHJlY2F0ZWQgPSBtZXNzYWdlLmRlcHJlY2F0ZWQ7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24/Lmxlbmd0aCkge1xuICAgICAgb2JqLnVuaW50ZXJwcmV0ZWRPcHRpb24gPSBtZXNzYWdlLnVuaW50ZXJwcmV0ZWRPcHRpb24ubWFwKChlKSA9PiBVbmludGVycHJldGVkT3B0aW9uLnRvSlNPTihlKSk7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxTZXJ2aWNlT3B0aW9ucz4pOiBTZXJ2aWNlT3B0aW9ucyB7XG4gICAgcmV0dXJuIFNlcnZpY2VPcHRpb25zLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPFNlcnZpY2VPcHRpb25zPik6IFNlcnZpY2VPcHRpb25zIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVNlcnZpY2VPcHRpb25zKCk7XG4gICAgbWVzc2FnZS5kZXByZWNhdGVkID0gb2JqZWN0LmRlcHJlY2F0ZWQgPz8gZmFsc2U7XG4gICAgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uID0gb2JqZWN0LnVuaW50ZXJwcmV0ZWRPcHRpb24/Lm1hcCgoZSkgPT4gVW5pbnRlcnByZXRlZE9wdGlvbi5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlTWV0aG9kT3B0aW9ucygpOiBNZXRob2RPcHRpb25zIHtcbiAgcmV0dXJuIHsgZGVwcmVjYXRlZDogZmFsc2UsIGlkZW1wb3RlbmN5TGV2ZWw6IDAsIHVuaW50ZXJwcmV0ZWRPcHRpb246IFtdIH07XG59XG5cbmV4cG9ydCBjb25zdCBNZXRob2RPcHRpb25zID0ge1xuICBlbmNvZGUobWVzc2FnZTogTWV0aG9kT3B0aW9ucywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmRlcHJlY2F0ZWQgPT09IHRydWUpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjY0KS5ib29sKG1lc3NhZ2UuZGVwcmVjYXRlZCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmlkZW1wb3RlbmN5TGV2ZWwgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjcyKS5pbnQzMihtZXNzYWdlLmlkZW1wb3RlbmN5TGV2ZWwpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uKSB7XG4gICAgICBVbmludGVycHJldGVkT3B0aW9uLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMig3OTk0KS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IE1ldGhvZE9wdGlvbnMge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlTWV0aG9kT3B0aW9ucygpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDMzOlxuICAgICAgICAgIGlmICh0YWcgIT09IDI2NCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5kZXByZWNhdGVkID0gcmVhZGVyLmJvb2woKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICBpZiAodGFnICE9PSAyNzIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuaWRlbXBvdGVuY3lMZXZlbCA9IHJlYWRlci5pbnQzMigpIGFzIGFueTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA5OTk6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNzk5NCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uLnB1c2goVW5pbnRlcnByZXRlZE9wdGlvbi5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICgodGFnICYgNykgPT09IDQgfHwgdGFnID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfSxcblxuICBmcm9tSlNPTihvYmplY3Q6IGFueSk6IE1ldGhvZE9wdGlvbnMge1xuICAgIHJldHVybiB7XG4gICAgICBkZXByZWNhdGVkOiBpc1NldChvYmplY3QuZGVwcmVjYXRlZCkgPyBCb29sZWFuKG9iamVjdC5kZXByZWNhdGVkKSA6IGZhbHNlLFxuICAgICAgaWRlbXBvdGVuY3lMZXZlbDogaXNTZXQob2JqZWN0LmlkZW1wb3RlbmN5TGV2ZWwpXG4gICAgICAgID8gbWV0aG9kT3B0aW9uc19JZGVtcG90ZW5jeUxldmVsRnJvbUpTT04ob2JqZWN0LmlkZW1wb3RlbmN5TGV2ZWwpXG4gICAgICAgIDogMCxcbiAgICAgIHVuaW50ZXJwcmV0ZWRPcHRpb246IEFycmF5LmlzQXJyYXkob2JqZWN0Py51bmludGVycHJldGVkT3B0aW9uKVxuICAgICAgICA/IG9iamVjdC51bmludGVycHJldGVkT3B0aW9uLm1hcCgoZTogYW55KSA9PiBVbmludGVycHJldGVkT3B0aW9uLmZyb21KU09OKGUpKVxuICAgICAgICA6IFtdLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IE1ldGhvZE9wdGlvbnMpOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIGlmIChtZXNzYWdlLmRlcHJlY2F0ZWQgPT09IHRydWUpIHtcbiAgICAgIG9iai5kZXByZWNhdGVkID0gbWVzc2FnZS5kZXByZWNhdGVkO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5pZGVtcG90ZW5jeUxldmVsICE9PSAwKSB7XG4gICAgICBvYmouaWRlbXBvdGVuY3lMZXZlbCA9IG1ldGhvZE9wdGlvbnNfSWRlbXBvdGVuY3lMZXZlbFRvSlNPTihtZXNzYWdlLmlkZW1wb3RlbmN5TGV2ZWwpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uPy5sZW5ndGgpIHtcbiAgICAgIG9iai51bmludGVycHJldGVkT3B0aW9uID0gbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uLm1hcCgoZSkgPT4gVW5pbnRlcnByZXRlZE9wdGlvbi50b0pTT04oZSkpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8TWV0aG9kT3B0aW9ucz4pOiBNZXRob2RPcHRpb25zIHtcbiAgICByZXR1cm4gTWV0aG9kT3B0aW9ucy5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxNZXRob2RPcHRpb25zPik6IE1ldGhvZE9wdGlvbnMge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlTWV0aG9kT3B0aW9ucygpO1xuICAgIG1lc3NhZ2UuZGVwcmVjYXRlZCA9IG9iamVjdC5kZXByZWNhdGVkID8/IGZhbHNlO1xuICAgIG1lc3NhZ2UuaWRlbXBvdGVuY3lMZXZlbCA9IG9iamVjdC5pZGVtcG90ZW5jeUxldmVsID8/IDA7XG4gICAgbWVzc2FnZS51bmludGVycHJldGVkT3B0aW9uID0gb2JqZWN0LnVuaW50ZXJwcmV0ZWRPcHRpb24/Lm1hcCgoZSkgPT4gVW5pbnRlcnByZXRlZE9wdGlvbi5mcm9tUGFydGlhbChlKSkgfHwgW107XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlVW5pbnRlcnByZXRlZE9wdGlvbigpOiBVbmludGVycHJldGVkT3B0aW9uIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBbXSxcbiAgICBpZGVudGlmaWVyVmFsdWU6IFwiXCIsXG4gICAgcG9zaXRpdmVJbnRWYWx1ZTogMCxcbiAgICBuZWdhdGl2ZUludFZhbHVlOiAwLFxuICAgIGRvdWJsZVZhbHVlOiAwLFxuICAgIHN0cmluZ1ZhbHVlOiBuZXcgVWludDhBcnJheSgwKSxcbiAgICBhZ2dyZWdhdGVWYWx1ZTogXCJcIixcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IFVuaW50ZXJwcmV0ZWRPcHRpb24gPSB7XG4gIGVuY29kZShtZXNzYWdlOiBVbmludGVycHJldGVkT3B0aW9uLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UubmFtZSkge1xuICAgICAgVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydC5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmlkZW50aWZpZXJWYWx1ZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNikuc3RyaW5nKG1lc3NhZ2UuaWRlbnRpZmllclZhbHVlKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucG9zaXRpdmVJbnRWYWx1ZSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzMikudWludDY0KG1lc3NhZ2UucG9zaXRpdmVJbnRWYWx1ZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm5lZ2F0aXZlSW50VmFsdWUgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDApLmludDY0KG1lc3NhZ2UubmVnYXRpdmVJbnRWYWx1ZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRvdWJsZVZhbHVlICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQ5KS5kb3VibGUobWVzc2FnZS5kb3VibGVWYWx1ZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnN0cmluZ1ZhbHVlLmxlbmd0aCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig1OCkuYnl0ZXMobWVzc2FnZS5zdHJpbmdWYWx1ZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmFnZ3JlZ2F0ZVZhbHVlICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDY2KS5zdHJpbmcobWVzc2FnZS5hZ2dyZWdhdGVWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogVW5pbnRlcnByZXRlZE9wdGlvbiB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VVbmludGVycHJldGVkT3B0aW9uKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxOCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5uYW1lLnB1c2goVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydC5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGlmICh0YWcgIT09IDI2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmlkZW50aWZpZXJWYWx1ZSA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGlmICh0YWcgIT09IDMyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnBvc2l0aXZlSW50VmFsdWUgPSBsb25nVG9OdW1iZXIocmVhZGVyLnVpbnQ2NCgpIGFzIExvbmcpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNDApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UubmVnYXRpdmVJbnRWYWx1ZSA9IGxvbmdUb051bWJlcihyZWFkZXIuaW50NjQoKSBhcyBMb25nKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIGlmICh0YWcgIT09IDQ5KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmRvdWJsZVZhbHVlID0gcmVhZGVyLmRvdWJsZSgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNTgpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uuc3RyaW5nVmFsdWUgPSByZWFkZXIuYnl0ZXMoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIGlmICh0YWcgIT09IDY2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmFnZ3JlZ2F0ZVZhbHVlID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogVW5pbnRlcnByZXRlZE9wdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IEFycmF5LmlzQXJyYXkob2JqZWN0Py5uYW1lKSA/IG9iamVjdC5uYW1lLm1hcCgoZTogYW55KSA9PiBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0LmZyb21KU09OKGUpKSA6IFtdLFxuICAgICAgaWRlbnRpZmllclZhbHVlOiBpc1NldChvYmplY3QuaWRlbnRpZmllclZhbHVlKSA/IFN0cmluZyhvYmplY3QuaWRlbnRpZmllclZhbHVlKSA6IFwiXCIsXG4gICAgICBwb3NpdGl2ZUludFZhbHVlOiBpc1NldChvYmplY3QucG9zaXRpdmVJbnRWYWx1ZSkgPyBOdW1iZXIob2JqZWN0LnBvc2l0aXZlSW50VmFsdWUpIDogMCxcbiAgICAgIG5lZ2F0aXZlSW50VmFsdWU6IGlzU2V0KG9iamVjdC5uZWdhdGl2ZUludFZhbHVlKSA/IE51bWJlcihvYmplY3QubmVnYXRpdmVJbnRWYWx1ZSkgOiAwLFxuICAgICAgZG91YmxlVmFsdWU6IGlzU2V0KG9iamVjdC5kb3VibGVWYWx1ZSkgPyBOdW1iZXIob2JqZWN0LmRvdWJsZVZhbHVlKSA6IDAsXG4gICAgICBzdHJpbmdWYWx1ZTogaXNTZXQob2JqZWN0LnN0cmluZ1ZhbHVlKSA/IGJ5dGVzRnJvbUJhc2U2NChvYmplY3Quc3RyaW5nVmFsdWUpIDogbmV3IFVpbnQ4QXJyYXkoMCksXG4gICAgICBhZ2dyZWdhdGVWYWx1ZTogaXNTZXQob2JqZWN0LmFnZ3JlZ2F0ZVZhbHVlKSA/IFN0cmluZyhvYmplY3QuYWdncmVnYXRlVmFsdWUpIDogXCJcIixcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBVbmludGVycHJldGVkT3B0aW9uKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBpZiAobWVzc2FnZS5uYW1lPy5sZW5ndGgpIHtcbiAgICAgIG9iai5uYW1lID0gbWVzc2FnZS5uYW1lLm1hcCgoZSkgPT4gVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydC50b0pTT04oZSkpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5pZGVudGlmaWVyVmFsdWUgIT09IFwiXCIpIHtcbiAgICAgIG9iai5pZGVudGlmaWVyVmFsdWUgPSBtZXNzYWdlLmlkZW50aWZpZXJWYWx1ZTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucG9zaXRpdmVJbnRWYWx1ZSAhPT0gMCkge1xuICAgICAgb2JqLnBvc2l0aXZlSW50VmFsdWUgPSBNYXRoLnJvdW5kKG1lc3NhZ2UucG9zaXRpdmVJbnRWYWx1ZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm5lZ2F0aXZlSW50VmFsdWUgIT09IDApIHtcbiAgICAgIG9iai5uZWdhdGl2ZUludFZhbHVlID0gTWF0aC5yb3VuZChtZXNzYWdlLm5lZ2F0aXZlSW50VmFsdWUpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kb3VibGVWYWx1ZSAhPT0gMCkge1xuICAgICAgb2JqLmRvdWJsZVZhbHVlID0gbWVzc2FnZS5kb3VibGVWYWx1ZTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc3RyaW5nVmFsdWUubGVuZ3RoICE9PSAwKSB7XG4gICAgICBvYmouc3RyaW5nVmFsdWUgPSBiYXNlNjRGcm9tQnl0ZXMobWVzc2FnZS5zdHJpbmdWYWx1ZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmFnZ3JlZ2F0ZVZhbHVlICE9PSBcIlwiKSB7XG4gICAgICBvYmouYWdncmVnYXRlVmFsdWUgPSBtZXNzYWdlLmFnZ3JlZ2F0ZVZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8VW5pbnRlcnByZXRlZE9wdGlvbj4pOiBVbmludGVycHJldGVkT3B0aW9uIHtcbiAgICByZXR1cm4gVW5pbnRlcnByZXRlZE9wdGlvbi5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxVbmludGVycHJldGVkT3B0aW9uPik6IFVuaW50ZXJwcmV0ZWRPcHRpb24ge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlVW5pbnRlcnByZXRlZE9wdGlvbigpO1xuICAgIG1lc3NhZ2UubmFtZSA9IG9iamVjdC5uYW1lPy5tYXAoKGUpID0+IFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQuZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIG1lc3NhZ2UuaWRlbnRpZmllclZhbHVlID0gb2JqZWN0LmlkZW50aWZpZXJWYWx1ZSA/PyBcIlwiO1xuICAgIG1lc3NhZ2UucG9zaXRpdmVJbnRWYWx1ZSA9IG9iamVjdC5wb3NpdGl2ZUludFZhbHVlID8/IDA7XG4gICAgbWVzc2FnZS5uZWdhdGl2ZUludFZhbHVlID0gb2JqZWN0Lm5lZ2F0aXZlSW50VmFsdWUgPz8gMDtcbiAgICBtZXNzYWdlLmRvdWJsZVZhbHVlID0gb2JqZWN0LmRvdWJsZVZhbHVlID8/IDA7XG4gICAgbWVzc2FnZS5zdHJpbmdWYWx1ZSA9IG9iamVjdC5zdHJpbmdWYWx1ZSA/PyBuZXcgVWludDhBcnJheSgwKTtcbiAgICBtZXNzYWdlLmFnZ3JlZ2F0ZVZhbHVlID0gb2JqZWN0LmFnZ3JlZ2F0ZVZhbHVlID8/IFwiXCI7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydCgpOiBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0IHtcbiAgcmV0dXJuIHsgbmFtZVBhcnQ6IFwiXCIsIGlzRXh0ZW5zaW9uOiBmYWxzZSB9O1xufVxuXG5leHBvcnQgY29uc3QgVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5uYW1lUGFydCAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UubmFtZVBhcnQpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5pc0V4dGVuc2lvbiA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuYm9vbChtZXNzYWdlLmlzRXh0ZW5zaW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0IHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQoKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgIT09IDEwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLm5hbWVQYXJ0ID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuaXNFeHRlbnNpb24gPSByZWFkZXIuYm9vbCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWVQYXJ0OiBpc1NldChvYmplY3QubmFtZVBhcnQpID8gU3RyaW5nKG9iamVjdC5uYW1lUGFydCkgOiBcIlwiLFxuICAgICAgaXNFeHRlbnNpb246IGlzU2V0KG9iamVjdC5pc0V4dGVuc2lvbikgPyBCb29sZWFuKG9iamVjdC5pc0V4dGVuc2lvbikgOiBmYWxzZSxcbiAgICB9O1xuICB9LFxuXG4gIHRvSlNPTihtZXNzYWdlOiBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0KTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBpZiAobWVzc2FnZS5uYW1lUGFydCAhPT0gXCJcIikge1xuICAgICAgb2JqLm5hbWVQYXJ0ID0gbWVzc2FnZS5uYW1lUGFydDtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaXNFeHRlbnNpb24gPT09IHRydWUpIHtcbiAgICAgIG9iai5pc0V4dGVuc2lvbiA9IG1lc3NhZ2UuaXNFeHRlbnNpb247XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0Pik6IFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQge1xuICAgIHJldHVybiBVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0LmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPFVuaW50ZXJwcmV0ZWRPcHRpb25fTmFtZVBhcnQ+KTogVW5pbnRlcnByZXRlZE9wdGlvbl9OYW1lUGFydCB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VVbmludGVycHJldGVkT3B0aW9uX05hbWVQYXJ0KCk7XG4gICAgbWVzc2FnZS5uYW1lUGFydCA9IG9iamVjdC5uYW1lUGFydCA/PyBcIlwiO1xuICAgIG1lc3NhZ2UuaXNFeHRlbnNpb24gPSBvYmplY3QuaXNFeHRlbnNpb24gPz8gZmFsc2U7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCYXNlU291cmNlQ29kZUluZm8oKTogU291cmNlQ29kZUluZm8ge1xuICByZXR1cm4geyBsb2NhdGlvbjogW10gfTtcbn1cblxuZXhwb3J0IGNvbnN0IFNvdXJjZUNvZGVJbmZvID0ge1xuICBlbmNvZGUobWVzc2FnZTogU291cmNlQ29kZUluZm8sIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5sb2NhdGlvbikge1xuICAgICAgU291cmNlQ29kZUluZm9fTG9jYXRpb24uZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyO1xuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFNvdXJjZUNvZGVJbmZvIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVNvdXJjZUNvZGVJbmZvKCk7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKTtcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAodGFnICE9PSAxMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5sb2NhdGlvbi5wdXNoKFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gNCB8fCB0YWcgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNyk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxuXG4gIGZyb21KU09OKG9iamVjdDogYW55KTogU291cmNlQ29kZUluZm8ge1xuICAgIHJldHVybiB7XG4gICAgICBsb2NhdGlvbjogQXJyYXkuaXNBcnJheShvYmplY3Q/LmxvY2F0aW9uKVxuICAgICAgICA/IG9iamVjdC5sb2NhdGlvbi5tYXAoKGU6IGFueSkgPT4gU291cmNlQ29kZUluZm9fTG9jYXRpb24uZnJvbUpTT04oZSkpXG4gICAgICAgIDogW10sXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogU291cmNlQ29kZUluZm8pOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIGlmIChtZXNzYWdlLmxvY2F0aW9uPy5sZW5ndGgpIHtcbiAgICAgIG9iai5sb2NhdGlvbiA9IG1lc3NhZ2UubG9jYXRpb24ubWFwKChlKSA9PiBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbi50b0pTT04oZSkpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8U291cmNlQ29kZUluZm8+KTogU291cmNlQ29kZUluZm8ge1xuICAgIHJldHVybiBTb3VyY2VDb2RlSW5mby5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxTb3VyY2VDb2RlSW5mbz4pOiBTb3VyY2VDb2RlSW5mbyB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VTb3VyY2VDb2RlSW5mbygpO1xuICAgIG1lc3NhZ2UubG9jYXRpb24gPSBvYmplY3QubG9jYXRpb24/Lm1hcCgoZSkgPT4gU291cmNlQ29kZUluZm9fTG9jYXRpb24uZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZVNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uKCk6IFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uIHtcbiAgcmV0dXJuIHsgcGF0aDogW10sIHNwYW46IFtdLCBsZWFkaW5nQ29tbWVudHM6IFwiXCIsIHRyYWlsaW5nQ29tbWVudHM6IFwiXCIsIGxlYWRpbmdEZXRhY2hlZENvbW1lbnRzOiBbXSB9O1xufVxuXG5leHBvcnQgY29uc3QgU291cmNlQ29kZUluZm9fTG9jYXRpb24gPSB7XG4gIGVuY29kZShtZXNzYWdlOiBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbiwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIHdyaXRlci51aW50MzIoMTApLmZvcmsoKTtcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5wYXRoKSB7XG4gICAgICB3cml0ZXIuaW50MzIodik7XG4gICAgfVxuICAgIHdyaXRlci5sZGVsaW0oKTtcbiAgICB3cml0ZXIudWludDMyKDE4KS5mb3JrKCk7XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2Uuc3Bhbikge1xuICAgICAgd3JpdGVyLmludDMyKHYpO1xuICAgIH1cbiAgICB3cml0ZXIubGRlbGltKCk7XG4gICAgaWYgKG1lc3NhZ2UubGVhZGluZ0NvbW1lbnRzICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI2KS5zdHJpbmcobWVzc2FnZS5sZWFkaW5nQ29tbWVudHMpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS50cmFpbGluZ0NvbW1lbnRzICE9PSBcIlwiKSB7XG4gICAgICB3cml0ZXIudWludDMyKDM0KS5zdHJpbmcobWVzc2FnZS50cmFpbGluZ0NvbW1lbnRzKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UubGVhZGluZ0RldGFjaGVkQ29tbWVudHMpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTApLnN0cmluZyh2ISk7XG4gICAgfVxuICAgIHJldHVybiB3cml0ZXI7XG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogU291cmNlQ29kZUluZm9fTG9jYXRpb24ge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogX20wLlJlYWRlci5jcmVhdGUoaW5wdXQpO1xuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlU291cmNlQ29kZUluZm9fTG9jYXRpb24oKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgPT09IDgpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UucGF0aC5wdXNoKHJlYWRlci5pbnQzMigpKTtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRhZyA9PT0gMTApIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZDIgPSByZWFkZXIudWludDMyKCkgKyByZWFkZXIucG9zO1xuICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQyKSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2UucGF0aC5wdXNoKHJlYWRlci5pbnQzMigpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnID09PSAxNikge1xuICAgICAgICAgICAgbWVzc2FnZS5zcGFuLnB1c2gocmVhZGVyLmludDMyKCkpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGFnID09PSAxOCkge1xuICAgICAgICAgICAgY29uc3QgZW5kMiA9IHJlYWRlci51aW50MzIoKSArIHJlYWRlci5wb3M7XG4gICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZDIpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZS5zcGFuLnB1c2gocmVhZGVyLmludDMyKCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGlmICh0YWcgIT09IDI2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmxlYWRpbmdDb21tZW50cyA9IHJlYWRlci5zdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGlmICh0YWcgIT09IDM0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLnRyYWlsaW5nQ29tbWVudHMgPSByZWFkZXIuc3RyaW5nKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBpZiAodGFnICE9PSA1MCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5sZWFkaW5nRGV0YWNoZWRDb21tZW50cy5wdXNoKHJlYWRlci5zdHJpbmcoKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhdGg6IEFycmF5LmlzQXJyYXkob2JqZWN0Py5wYXRoKSA/IG9iamVjdC5wYXRoLm1hcCgoZTogYW55KSA9PiBOdW1iZXIoZSkpIDogW10sXG4gICAgICBzcGFuOiBBcnJheS5pc0FycmF5KG9iamVjdD8uc3BhbikgPyBvYmplY3Quc3Bhbi5tYXAoKGU6IGFueSkgPT4gTnVtYmVyKGUpKSA6IFtdLFxuICAgICAgbGVhZGluZ0NvbW1lbnRzOiBpc1NldChvYmplY3QubGVhZGluZ0NvbW1lbnRzKSA/IFN0cmluZyhvYmplY3QubGVhZGluZ0NvbW1lbnRzKSA6IFwiXCIsXG4gICAgICB0cmFpbGluZ0NvbW1lbnRzOiBpc1NldChvYmplY3QudHJhaWxpbmdDb21tZW50cykgPyBTdHJpbmcob2JqZWN0LnRyYWlsaW5nQ29tbWVudHMpIDogXCJcIixcbiAgICAgIGxlYWRpbmdEZXRhY2hlZENvbW1lbnRzOiBBcnJheS5pc0FycmF5KG9iamVjdD8ubGVhZGluZ0RldGFjaGVkQ29tbWVudHMpXG4gICAgICAgID8gb2JqZWN0LmxlYWRpbmdEZXRhY2hlZENvbW1lbnRzLm1hcCgoZTogYW55KSA9PiBTdHJpbmcoZSkpXG4gICAgICAgIDogW10sXG4gICAgfTtcbiAgfSxcblxuICB0b0pTT04obWVzc2FnZTogU291cmNlQ29kZUluZm9fTG9jYXRpb24pOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIGlmIChtZXNzYWdlLnBhdGg/Lmxlbmd0aCkge1xuICAgICAgb2JqLnBhdGggPSBtZXNzYWdlLnBhdGgubWFwKChlKSA9PiBNYXRoLnJvdW5kKGUpKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc3Bhbj8ubGVuZ3RoKSB7XG4gICAgICBvYmouc3BhbiA9IG1lc3NhZ2Uuc3Bhbi5tYXAoKGUpID0+IE1hdGgucm91bmQoZSkpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5sZWFkaW5nQ29tbWVudHMgIT09IFwiXCIpIHtcbiAgICAgIG9iai5sZWFkaW5nQ29tbWVudHMgPSBtZXNzYWdlLmxlYWRpbmdDb21tZW50cztcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudHJhaWxpbmdDb21tZW50cyAhPT0gXCJcIikge1xuICAgICAgb2JqLnRyYWlsaW5nQ29tbWVudHMgPSBtZXNzYWdlLnRyYWlsaW5nQ29tbWVudHM7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmxlYWRpbmdEZXRhY2hlZENvbW1lbnRzPy5sZW5ndGgpIHtcbiAgICAgIG9iai5sZWFkaW5nRGV0YWNoZWRDb21tZW50cyA9IG1lc3NhZ2UubGVhZGluZ0RldGFjaGVkQ29tbWVudHM7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbj4pOiBTb3VyY2VDb2RlSW5mb19Mb2NhdGlvbiB7XG4gICAgcmV0dXJuIFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uPik6IFNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uIHtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVNvdXJjZUNvZGVJbmZvX0xvY2F0aW9uKCk7XG4gICAgbWVzc2FnZS5wYXRoID0gb2JqZWN0LnBhdGg/Lm1hcCgoZSkgPT4gZSkgfHwgW107XG4gICAgbWVzc2FnZS5zcGFuID0gb2JqZWN0LnNwYW4/Lm1hcCgoZSkgPT4gZSkgfHwgW107XG4gICAgbWVzc2FnZS5sZWFkaW5nQ29tbWVudHMgPSBvYmplY3QubGVhZGluZ0NvbW1lbnRzID8/IFwiXCI7XG4gICAgbWVzc2FnZS50cmFpbGluZ0NvbW1lbnRzID0gb2JqZWN0LnRyYWlsaW5nQ29tbWVudHMgPz8gXCJcIjtcbiAgICBtZXNzYWdlLmxlYWRpbmdEZXRhY2hlZENvbW1lbnRzID0gb2JqZWN0LmxlYWRpbmdEZXRhY2hlZENvbW1lbnRzPy5tYXAoKGUpID0+IGUpIHx8IFtdO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZUdlbmVyYXRlZENvZGVJbmZvKCk6IEdlbmVyYXRlZENvZGVJbmZvIHtcbiAgcmV0dXJuIHsgYW5ub3RhdGlvbjogW10gfTtcbn1cblxuZXhwb3J0IGNvbnN0IEdlbmVyYXRlZENvZGVJbmZvID0ge1xuICBlbmNvZGUobWVzc2FnZTogR2VuZXJhdGVkQ29kZUluZm8sIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5hbm5vdGF0aW9uKSB7XG4gICAgICBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBHZW5lcmF0ZWRDb2RlSW5mbyB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBfbTAuUmVhZGVyLmNyZWF0ZShpbnB1dCk7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGg7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VHZW5lcmF0ZWRDb2RlSW5mbygpO1xuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKCk7XG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMTApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuYW5ub3RhdGlvbi5wdXNoKEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24uZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBHZW5lcmF0ZWRDb2RlSW5mbyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFubm90YXRpb246IEFycmF5LmlzQXJyYXkob2JqZWN0Py5hbm5vdGF0aW9uKVxuICAgICAgICA/IG9iamVjdC5hbm5vdGF0aW9uLm1hcCgoZTogYW55KSA9PiBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uLmZyb21KU09OKGUpKVxuICAgICAgICA6IFtdLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IEdlbmVyYXRlZENvZGVJbmZvKTogdW5rbm93biB7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcbiAgICBpZiAobWVzc2FnZS5hbm5vdGF0aW9uPy5sZW5ndGgpIHtcbiAgICAgIG9iai5hbm5vdGF0aW9uID0gbWVzc2FnZS5hbm5vdGF0aW9uLm1hcCgoZSkgPT4gR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbi50b0pTT04oZSkpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuXG4gIGNyZWF0ZShiYXNlPzogRGVlcFBhcnRpYWw8R2VuZXJhdGVkQ29kZUluZm8+KTogR2VuZXJhdGVkQ29kZUluZm8ge1xuICAgIHJldHVybiBHZW5lcmF0ZWRDb2RlSW5mby5mcm9tUGFydGlhbChiYXNlID8/IHt9KTtcbiAgfSxcbiAgZnJvbVBhcnRpYWwob2JqZWN0OiBEZWVwUGFydGlhbDxHZW5lcmF0ZWRDb2RlSW5mbz4pOiBHZW5lcmF0ZWRDb2RlSW5mbyB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VHZW5lcmF0ZWRDb2RlSW5mbygpO1xuICAgIG1lc3NhZ2UuYW5ub3RhdGlvbiA9IG9iamVjdC5hbm5vdGF0aW9uPy5tYXAoKGUpID0+IEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24uZnJvbVBhcnRpYWwoZSkpIHx8IFtdO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQmFzZUdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24oKTogR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbiB7XG4gIHJldHVybiB7IHBhdGg6IFtdLCBzb3VyY2VGaWxlOiBcIlwiLCBiZWdpbjogMCwgZW5kOiAwLCBzZW1hbnRpYzogMCB9O1xufVxuXG5leHBvcnQgY29uc3QgR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbiA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24sIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICB3cml0ZXIudWludDMyKDEwKS5mb3JrKCk7XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UucGF0aCkge1xuICAgICAgd3JpdGVyLmludDMyKHYpO1xuICAgIH1cbiAgICB3cml0ZXIubGRlbGltKCk7XG4gICAgaWYgKG1lc3NhZ2Uuc291cmNlRmlsZSAhPT0gXCJcIikge1xuICAgICAgd3JpdGVyLnVpbnQzMigxOCkuc3RyaW5nKG1lc3NhZ2Uuc291cmNlRmlsZSk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmJlZ2luICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5pbnQzMihtZXNzYWdlLmJlZ2luKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZW5kICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDMyKS5pbnQzMihtZXNzYWdlLmVuZCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNlbWFudGljICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQwKS5pbnQzMihtZXNzYWdlLnNlbWFudGljKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlcjtcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IF9tMC5SZWFkZXIuY3JlYXRlKGlucHV0KTtcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aDtcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24oKTtcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpO1xuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICh0YWcgPT09IDgpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UucGF0aC5wdXNoKHJlYWRlci5pbnQzMigpKTtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRhZyA9PT0gMTApIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZDIgPSByZWFkZXIudWludDMyKCkgKyByZWFkZXIucG9zO1xuICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQyKSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2UucGF0aC5wdXNoKHJlYWRlci5pbnQzMigpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAodGFnICE9PSAxOCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVzc2FnZS5zb3VyY2VGaWxlID0gcmVhZGVyLnN0cmluZygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gMjQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2UuYmVnaW4gPSByZWFkZXIuaW50MzIoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGlmICh0YWcgIT09IDMyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXNzYWdlLmVuZCA9IHJlYWRlci5pbnQzMigpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgaWYgKHRhZyAhPT0gNDApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lc3NhZ2Uuc2VtYW50aWMgPSByZWFkZXIuaW50MzIoKSBhcyBhbnk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoKHRhZyAmIDcpID09PSA0IHx8IHRhZyA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0sXG5cbiAgZnJvbUpTT04ob2JqZWN0OiBhbnkpOiBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGF0aDogQXJyYXkuaXNBcnJheShvYmplY3Q/LnBhdGgpID8gb2JqZWN0LnBhdGgubWFwKChlOiBhbnkpID0+IE51bWJlcihlKSkgOiBbXSxcbiAgICAgIHNvdXJjZUZpbGU6IGlzU2V0KG9iamVjdC5zb3VyY2VGaWxlKSA/IFN0cmluZyhvYmplY3Quc291cmNlRmlsZSkgOiBcIlwiLFxuICAgICAgYmVnaW46IGlzU2V0KG9iamVjdC5iZWdpbikgPyBOdW1iZXIob2JqZWN0LmJlZ2luKSA6IDAsXG4gICAgICBlbmQ6IGlzU2V0KG9iamVjdC5lbmQpID8gTnVtYmVyKG9iamVjdC5lbmQpIDogMCxcbiAgICAgIHNlbWFudGljOiBpc1NldChvYmplY3Quc2VtYW50aWMpID8gZ2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbl9TZW1hbnRpY0Zyb21KU09OKG9iamVjdC5zZW1hbnRpYykgOiAwLFxuICAgIH07XG4gIH0sXG5cbiAgdG9KU09OKG1lc3NhZ2U6IEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24pOiB1bmtub3duIHtcbiAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xuICAgIGlmIChtZXNzYWdlLnBhdGg/Lmxlbmd0aCkge1xuICAgICAgb2JqLnBhdGggPSBtZXNzYWdlLnBhdGgubWFwKChlKSA9PiBNYXRoLnJvdW5kKGUpKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc291cmNlRmlsZSAhPT0gXCJcIikge1xuICAgICAgb2JqLnNvdXJjZUZpbGUgPSBtZXNzYWdlLnNvdXJjZUZpbGU7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmJlZ2luICE9PSAwKSB7XG4gICAgICBvYmouYmVnaW4gPSBNYXRoLnJvdW5kKG1lc3NhZ2UuYmVnaW4pO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5lbmQgIT09IDApIHtcbiAgICAgIG9iai5lbmQgPSBNYXRoLnJvdW5kKG1lc3NhZ2UuZW5kKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc2VtYW50aWMgIT09IDApIHtcbiAgICAgIG9iai5zZW1hbnRpYyA9IGdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb25fU2VtYW50aWNUb0pTT04obWVzc2FnZS5zZW1hbnRpYyk7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG5cbiAgY3JlYXRlKGJhc2U/OiBEZWVwUGFydGlhbDxHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uPik6IEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24ge1xuICAgIHJldHVybiBHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uLmZyb21QYXJ0aWFsKGJhc2UgPz8ge30pO1xuICB9LFxuICBmcm9tUGFydGlhbChvYmplY3Q6IERlZXBQYXJ0aWFsPEdlbmVyYXRlZENvZGVJbmZvX0Fubm90YXRpb24+KTogR2VuZXJhdGVkQ29kZUluZm9fQW5ub3RhdGlvbiB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VHZW5lcmF0ZWRDb2RlSW5mb19Bbm5vdGF0aW9uKCk7XG4gICAgbWVzc2FnZS5wYXRoID0gb2JqZWN0LnBhdGg/Lm1hcCgoZSkgPT4gZSkgfHwgW107XG4gICAgbWVzc2FnZS5zb3VyY2VGaWxlID0gb2JqZWN0LnNvdXJjZUZpbGUgPz8gXCJcIjtcbiAgICBtZXNzYWdlLmJlZ2luID0gb2JqZWN0LmJlZ2luID8/IDA7XG4gICAgbWVzc2FnZS5lbmQgPSBvYmplY3QuZW5kID8/IDA7XG4gICAgbWVzc2FnZS5zZW1hbnRpYyA9IG9iamVjdC5zZW1hbnRpYyA/PyAwO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9LFxufTtcblxuZGVjbGFyZSBjb25zdCBzZWxmOiBhbnkgfCB1bmRlZmluZWQ7XG5kZWNsYXJlIGNvbnN0IHdpbmRvdzogYW55IHwgdW5kZWZpbmVkO1xuZGVjbGFyZSBjb25zdCBnbG9iYWw6IGFueSB8IHVuZGVmaW5lZDtcbmNvbnN0IHRzUHJvdG9HbG9iYWxUaGlzOiBhbnkgPSAoKCkgPT4ge1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gZ2xvYmFsVGhpcztcbiAgfVxuICBpZiAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gc2VsZjtcbiAgfVxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cbiAgaWYgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gZ2xvYmFsO1xuICB9XG4gIHRocm93IFwiVW5hYmxlIHRvIGxvY2F0ZSBnbG9iYWwgb2JqZWN0XCI7XG59KSgpO1xuXG5mdW5jdGlvbiBieXRlc0Zyb21CYXNlNjQoYjY0OiBzdHJpbmcpOiBVaW50OEFycmF5IHtcbiAgaWYgKHRzUHJvdG9HbG9iYWxUaGlzLkJ1ZmZlcikge1xuICAgIHJldHVybiBVaW50OEFycmF5LmZyb20odHNQcm90b0dsb2JhbFRoaXMuQnVmZmVyLmZyb20oYjY0LCBcImJhc2U2NFwiKSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYmluID0gdHNQcm90b0dsb2JhbFRoaXMuYXRvYihiNjQpO1xuICAgIGNvbnN0IGFyciA9IG5ldyBVaW50OEFycmF5KGJpbi5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmluLmxlbmd0aDsgKytpKSB7XG4gICAgICBhcnJbaV0gPSBiaW4uY2hhckNvZGVBdChpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycjtcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlNjRGcm9tQnl0ZXMoYXJyOiBVaW50OEFycmF5KTogc3RyaW5nIHtcbiAgaWYgKHRzUHJvdG9HbG9iYWxUaGlzLkJ1ZmZlcikge1xuICAgIHJldHVybiB0c1Byb3RvR2xvYmFsVGhpcy5CdWZmZXIuZnJvbShhcnIpLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJpbjogc3RyaW5nW10gPSBbXTtcbiAgICBhcnIuZm9yRWFjaCgoYnl0ZSkgPT4ge1xuICAgICAgYmluLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShieXRlKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRzUHJvdG9HbG9iYWxUaGlzLmJ0b2EoYmluLmpvaW4oXCJcIikpO1xuICB9XG59XG5cbnR5cGUgQnVpbHRpbiA9IERhdGUgfCBGdW5jdGlvbiB8IFVpbnQ4QXJyYXkgfCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG5leHBvcnQgdHlwZSBEZWVwUGFydGlhbDxUPiA9IFQgZXh0ZW5kcyBCdWlsdGluID8gVFxuICA6IFQgZXh0ZW5kcyBBcnJheTxpbmZlciBVPiA/IEFycmF5PERlZXBQYXJ0aWFsPFU+PiA6IFQgZXh0ZW5kcyBSZWFkb25seUFycmF5PGluZmVyIFU+ID8gUmVhZG9ubHlBcnJheTxEZWVwUGFydGlhbDxVPj5cbiAgOiBUIGV4dGVuZHMgeyAkY2FzZTogc3RyaW5nIH0gPyB7IFtLIGluIGtleW9mIE9taXQ8VCwgXCIkY2FzZVwiPl0/OiBEZWVwUGFydGlhbDxUW0tdPiB9ICYgeyAkY2FzZTogVFtcIiRjYXNlXCJdIH1cbiAgOiBUIGV4dGVuZHMge30gPyB7IFtLIGluIGtleW9mIFRdPzogRGVlcFBhcnRpYWw8VFtLXT4gfVxuICA6IFBhcnRpYWw8VD47XG5cbmZ1bmN0aW9uIGxvbmdUb051bWJlcihsb25nOiBMb25nKTogbnVtYmVyIHtcbiAgaWYgKGxvbmcuZ3QoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKSB7XG4gICAgdGhyb3cgbmV3IHRzUHJvdG9HbG9iYWxUaGlzLkVycm9yKFwiVmFsdWUgaXMgbGFyZ2VyIHRoYW4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcIik7XG4gIH1cbiAgcmV0dXJuIGxvbmcudG9OdW1iZXIoKTtcbn1cblxuaWYgKF9tMC51dGlsLkxvbmcgIT09IExvbmcpIHtcbiAgX20wLnV0aWwuTG9uZyA9IExvbmcgYXMgYW55O1xuICBfbTAuY29uZmlndXJlKCk7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQ7XG59XG4iXX0=
|