@secrecy/lib 1.0.0-dev.57 → 1.0.0-dev.59
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/BaseClient.js +5 -11
- package/dist/PopupTools.js +4 -4
- package/dist/ZeusThunder.js +3 -3
- package/dist/client/SecrecyAppClient.js +2 -4
- package/dist/client/SecrecyCloudClient.d.ts +1 -1
- package/dist/client/SecrecyCloudClient.js +25 -35
- package/dist/client/SecrecyDbClient.js +2 -2
- package/dist/client/SecrecyMailClient.js +10 -12
- package/dist/client/SecrecyPayClient.d.ts +7 -0
- package/dist/client/SecrecyPayClient.js +37 -0
- package/dist/client/SecrecyWalletClient.d.ts +30 -0
- package/dist/client/SecrecyWalletClient.js +76 -0
- package/dist/client/convert/file.js +2 -2
- package/dist/client/convert/node.js +5 -7
- package/dist/client/helpers.d.ts +5 -0
- package/dist/client/helpers.js +21 -9
- package/dist/client/index.d.ts +4 -0
- package/dist/client/index.js +5 -1
- package/dist/client/storage.js +4 -4
- package/dist/crypto/file.js +5 -5
- package/dist/minify/index.js +2 -2
- package/dist/worker/workerCodes.js +255 -3
- package/dist/zeus/const.js +27 -14
- package/dist/zeus/index.d.ts +74 -34
- package/dist/zeus/index.js +33 -41
- package/package.json +21 -19
|
@@ -392,7 +392,7 @@ export class SecrecyCloudClient {
|
|
|
392
392
|
formData.append(key, value);
|
|
393
393
|
}
|
|
394
394
|
|
|
395
|
-
formData.append("file", new Blob([chunk.data]), uploadFile.uploadFile.fileId
|
|
395
|
+
formData.append("file", new Blob([chunk.data]), `${uploadFile.uploadFile.fileId}-${chunk.order}`);
|
|
396
396
|
await axios.post(part.url, formData, {
|
|
397
397
|
onUploadProgress: progressEvent => onProgress(part.order, progressEvent),
|
|
398
398
|
signal
|
|
@@ -661,12 +661,12 @@ export class SecrecyCloudClient {
|
|
|
661
661
|
node = nodesCache.get(nodeId);
|
|
662
662
|
|
|
663
663
|
if (!node) {
|
|
664
|
-
throw new Error(
|
|
664
|
+
throw new Error(`Node (${nodeId}) does not exists`);
|
|
665
665
|
}
|
|
666
666
|
}
|
|
667
667
|
|
|
668
668
|
if (!((_node$access2 = node.access) != null && _node$access2.nameKey)) {
|
|
669
|
-
throw new Error(
|
|
669
|
+
throw new Error(`Can't have access to node ${nodeId}`);
|
|
670
670
|
}
|
|
671
671
|
|
|
672
672
|
customName = customName ? await encryptName(customName, node.access.nameKey) : null;
|
|
@@ -712,8 +712,6 @@ export class SecrecyCloudClient {
|
|
|
712
712
|
}
|
|
713
713
|
|
|
714
714
|
async deleteNodeCloudTrash(_ref8) {
|
|
715
|
-
var _deleteNodeCloudTrash;
|
|
716
|
-
|
|
717
715
|
let {
|
|
718
716
|
ids
|
|
719
717
|
} = _ref8;
|
|
@@ -744,12 +742,12 @@ export class SecrecyCloudClient {
|
|
|
744
742
|
|
|
745
743
|
return {
|
|
746
744
|
__typename: "SuccessResponse",
|
|
747
|
-
data:
|
|
745
|
+
data: deleteNodeCloudTrash.deleteNodeCloudTrash ?? false
|
|
748
746
|
};
|
|
749
747
|
}
|
|
750
748
|
|
|
751
749
|
async createFolder(_ref9) {
|
|
752
|
-
var _folder$parent
|
|
750
|
+
var _folder$parent, _folder$parent$users;
|
|
753
751
|
|
|
754
752
|
let {
|
|
755
753
|
name,
|
|
@@ -799,10 +797,10 @@ export class SecrecyCloudClient {
|
|
|
799
797
|
}
|
|
800
798
|
|
|
801
799
|
const folder = await gqlNodeToExternalNodeFull(createFolder.createFolder, _classPrivateFieldLooseBase(this, _keys)[_keys]);
|
|
802
|
-
const users = (
|
|
800
|
+
const users = ((_folder$parent = folder.parent) == null ? void 0 : (_folder$parent$users = _folder$parent.users) == null ? void 0 : _folder$parent$users.filter(_ref10 => {
|
|
803
801
|
let [u] = _ref10;
|
|
804
802
|
return u.publicKey !== _classPrivateFieldLooseBase(this, _keys)[_keys].publicKey;
|
|
805
|
-
}))
|
|
803
|
+
})) ?? [];
|
|
806
804
|
|
|
807
805
|
if (users.length) {
|
|
808
806
|
await Promise.all(users.map(_ref11 => {
|
|
@@ -863,7 +861,7 @@ export class SecrecyCloudClient {
|
|
|
863
861
|
};
|
|
864
862
|
}
|
|
865
863
|
|
|
866
|
-
async
|
|
864
|
+
async fileMetadata(_ref12) {
|
|
867
865
|
let {
|
|
868
866
|
id
|
|
869
867
|
} = _ref12;
|
|
@@ -904,8 +902,6 @@ export class SecrecyCloudClient {
|
|
|
904
902
|
}
|
|
905
903
|
|
|
906
904
|
async shareNode(_ref13) {
|
|
907
|
-
var _shareNodeFinish$shar;
|
|
908
|
-
|
|
909
905
|
let {
|
|
910
906
|
nodeId,
|
|
911
907
|
userId,
|
|
@@ -1007,7 +1003,7 @@ export class SecrecyCloudClient {
|
|
|
1007
1003
|
|
|
1008
1004
|
return {
|
|
1009
1005
|
__typename: "SuccessResponse",
|
|
1010
|
-
data:
|
|
1006
|
+
data: shareNodeFinish.shareNodeFinish ?? false
|
|
1011
1007
|
};
|
|
1012
1008
|
}
|
|
1013
1009
|
|
|
@@ -1029,12 +1025,12 @@ export class SecrecyCloudClient {
|
|
|
1029
1025
|
node = nodesCache.get(nodeId);
|
|
1030
1026
|
|
|
1031
1027
|
if (!node) {
|
|
1032
|
-
throw
|
|
1028
|
+
throw `Can't find Node ${nodeId}`;
|
|
1033
1029
|
}
|
|
1034
1030
|
}
|
|
1035
1031
|
|
|
1036
1032
|
if (!((_node$access3 = node.access) != null && _node$access3.nameKey)) {
|
|
1037
|
-
throw new Error(
|
|
1033
|
+
throw new Error(`Can't have access to node ${nodeId}`);
|
|
1038
1034
|
}
|
|
1039
1035
|
|
|
1040
1036
|
name = name ? (_node$access4 = node.access) != null && _node$access4.nameKey ? await encryptName(name, node.access.nameKey) : name : null;
|
|
@@ -1217,7 +1213,7 @@ export class SecrecyCloudClient {
|
|
|
1217
1213
|
const md5Part = await md5(buf);
|
|
1218
1214
|
|
|
1219
1215
|
if (md5Part !== part.md5) {
|
|
1220
|
-
throw new Error(
|
|
1216
|
+
throw new Error(`Invalid md5 for part ${part.order} of file ${fileId}`);
|
|
1221
1217
|
}
|
|
1222
1218
|
|
|
1223
1219
|
parts.push({
|
|
@@ -1235,7 +1231,7 @@ export class SecrecyCloudClient {
|
|
|
1235
1231
|
const md5Encrypted = await md5(encryptedContent);
|
|
1236
1232
|
|
|
1237
1233
|
if (md5Encrypted !== file.md5Encrypted) {
|
|
1238
|
-
throw new Error(
|
|
1234
|
+
throw new Error(`Encrypted content does not match`);
|
|
1239
1235
|
}
|
|
1240
1236
|
|
|
1241
1237
|
const key = decryptCryptoBox(sodium.from_hex(file.key), file.__typename === "FileContentReceivedMail" ? file.senderPublicKey : file.__typename === "FileContentCloud" ? file.publicKey : _classPrivateFieldLooseBase(this, _keys)[_keys].publicKey, _classPrivateFieldLooseBase(this, _keys)[_keys].privateKey);
|
|
@@ -1244,7 +1240,7 @@ export class SecrecyCloudClient {
|
|
|
1244
1240
|
const md5Content = await md5(src);
|
|
1245
1241
|
|
|
1246
1242
|
if (md5Content !== file.md5) {
|
|
1247
|
-
throw new Error(
|
|
1243
|
+
throw new Error(`Content does not match`);
|
|
1248
1244
|
}
|
|
1249
1245
|
|
|
1250
1246
|
return uncompress(src);
|
|
@@ -1377,8 +1373,6 @@ export class SecrecyCloudClient {
|
|
|
1377
1373
|
}
|
|
1378
1374
|
|
|
1379
1375
|
async recoverNode(id) {
|
|
1380
|
-
var _recoverNode$recoverN;
|
|
1381
|
-
|
|
1382
1376
|
const {
|
|
1383
1377
|
recoverNode
|
|
1384
1378
|
} = await _classPrivateFieldLooseBase(this, _thunder)[_thunder]("mutation")({
|
|
@@ -1414,13 +1408,11 @@ export class SecrecyCloudClient {
|
|
|
1414
1408
|
|
|
1415
1409
|
return {
|
|
1416
1410
|
__typename: "SuccessResponse",
|
|
1417
|
-
data:
|
|
1411
|
+
data: recoverNode.recoverNode ?? false
|
|
1418
1412
|
};
|
|
1419
1413
|
}
|
|
1420
1414
|
|
|
1421
1415
|
async moveNodes(_ref18) {
|
|
1422
|
-
var _moveNodes$moveNodes;
|
|
1423
|
-
|
|
1424
1416
|
let {
|
|
1425
1417
|
nodeIds,
|
|
1426
1418
|
parentNodeId
|
|
@@ -1453,7 +1445,7 @@ export class SecrecyCloudClient {
|
|
|
1453
1445
|
|
|
1454
1446
|
return {
|
|
1455
1447
|
__typename: "SuccessResponse",
|
|
1456
|
-
data:
|
|
1448
|
+
data: moveNodes.moveNodes ?? false
|
|
1457
1449
|
};
|
|
1458
1450
|
}
|
|
1459
1451
|
|
|
@@ -1474,7 +1466,7 @@ export class SecrecyCloudClient {
|
|
|
1474
1466
|
if (!nodesCache.has(nodeId)) {
|
|
1475
1467
|
return {
|
|
1476
1468
|
__typename: "ErrorBasic",
|
|
1477
|
-
message:
|
|
1469
|
+
message: `The node ${nodeId} does not exists`
|
|
1478
1470
|
};
|
|
1479
1471
|
}
|
|
1480
1472
|
}
|
|
@@ -1483,12 +1475,10 @@ export class SecrecyCloudClient {
|
|
|
1483
1475
|
const file = filesCache.get(fileId);
|
|
1484
1476
|
|
|
1485
1477
|
if (!file) {
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
await this.file({
|
|
1478
|
+
await this.fileMetadata({
|
|
1489
1479
|
id: fileId
|
|
1490
1480
|
});
|
|
1491
|
-
const file =
|
|
1481
|
+
const file = filesCache.get(fileId) ?? null;
|
|
1492
1482
|
|
|
1493
1483
|
if (!file) {
|
|
1494
1484
|
const receivedMails = await _classPrivateFieldLooseBase(this, _client)[_client].mail.receivedMails();
|
|
@@ -1506,7 +1496,7 @@ export class SecrecyCloudClient {
|
|
|
1506
1496
|
if (!mail) {
|
|
1507
1497
|
return {
|
|
1508
1498
|
__typename: "ErrorBasic",
|
|
1509
|
-
message:
|
|
1499
|
+
message: `Can't find mail with the file ${fileId}`
|
|
1510
1500
|
};
|
|
1511
1501
|
}
|
|
1512
1502
|
|
|
@@ -1515,7 +1505,7 @@ export class SecrecyCloudClient {
|
|
|
1515
1505
|
if (!fileMail) {
|
|
1516
1506
|
return {
|
|
1517
1507
|
__typename: "ErrorBasic",
|
|
1518
|
-
message:
|
|
1508
|
+
message: `Can't find mail with the file ${fileId}`
|
|
1519
1509
|
};
|
|
1520
1510
|
}
|
|
1521
1511
|
|
|
@@ -1611,12 +1601,12 @@ export class SecrecyCloudClient {
|
|
|
1611
1601
|
});
|
|
1612
1602
|
|
|
1613
1603
|
if (me && ["admin", "write"].includes(me[1])) {
|
|
1614
|
-
var _node$
|
|
1604
|
+
var _node$parent2;
|
|
1615
1605
|
|
|
1616
|
-
const others = (
|
|
1606
|
+
const others = ((_node$parent2 = node.parent) == null ? void 0 : _node$parent2.users.filter(_ref21 => {
|
|
1617
1607
|
let [u] = _ref21;
|
|
1618
1608
|
return u.publicKey !== _classPrivateFieldLooseBase(this, _keys)[_keys].publicKey;
|
|
1619
|
-
}))
|
|
1609
|
+
})) ?? [];
|
|
1620
1610
|
await Promise.all(others.map(_ref22 => {
|
|
1621
1611
|
let [u, rights] = _ref22;
|
|
1622
1612
|
return this.shareNode({
|
|
@@ -1634,4 +1624,4 @@ export class SecrecyCloudClient {
|
|
|
1634
1624
|
}
|
|
1635
1625
|
|
|
1636
1626
|
}
|
|
1637
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJheGlvcyIsImt5IiwiZW5jcnlwdE5hbWUiLCJub2Rlc0NhY2hlIiwiZmlsZXNDYWNoZSIsInNlY3JldHN0cmVhbUtleWdlbiIsImRlY3J5cHRDcnlwdG9Cb3giLCJlbmNyeXB0Q3J5cHRvQm94IiwiY29tcHJlc3MiLCJ1bmNvbXByZXNzIiwic29kaXVtIiwiZW51bWVyYXRlIiwiY2h1bmtzIiwicHJvbWlzZUFsbExpbWl0IiwiY29uY2F0ZW5hdGUiLCJtZDUiLCJkZWNyeXB0IiwiZW5jcnlwdCIsImdxbEZpbGVUb0V4dGVybmFsIiwiZ3FsTm9kZUZ1bGxUb0ludGVybmFsRnVsbCIsImdxbE5vZGVUb0V4dGVybmFsIiwiZ3FsTm9kZVRvRXh0ZXJuYWxOb2RlRnVsbCIsImludGVybmFsTm9kZVRvTm9kZSIsImZpbGVTZWxlY3RvciIsIm5vZGVGdWxsU2VsZWN0b3IiLCJub2RlU2VsZWN0b3IiLCJTZWNyZWN5Q2xvdWRDbGllbnQiLCJjb25zdHJ1Y3RvciIsImNsaWVudCIsImtleXMiLCJ0aHVuZGVyIiwicGVyTm9kZSIsIm5vZGVJZCIsInB1YmxpY0tleSIsIm5vZGUiLCJnZXQiLCJpZCIsIm5hbWVLZXkiLCJhY2Nlc3MiLCJ0b19oZXgiLCJmcm9tX2hleCIsInByaXZhdGVLZXkiLCJmaWxlcyIsImhpc3RvcnkiLCJtYXAiLCJmIiwia2V5IiwiYWRkRmlsZVRvSGlzdG9yeSIsImZpbGVJZCIsIl9fdHlwZW5hbWUiLCJtZXNzYWdlIiwiZmlsZSIsImZpbmQiLCJ1c2VycyIsImZpbHRlciIsInUiLCJpbnB1dCIsInNoYXJlRmlsZUluSGlzdG9yeSIsInJlc3VsdCIsImRhdGEiLCJ1cGxvYWRGaWxlIiwiZW5jcnlwdFByb2dyZXNzIiwidXBsb2FkUHJvZ3Jlc3MiLCJzaWduYWwiLCJmaWxlS2V5IiwiZmlsZUJ1ZmZlciIsIkZpbGUiLCJVaW50OEFycmF5IiwiYXJyYXlCdWZmZXIiLCJjb21wcmVzc2VkIiwiZW5jcnlwdGVkRmlsZSIsIm1kNUZpbGUiLCJtZDVFbmNyeXB0ZWQiLCJlbmNyeXB0ZWRGaWxlS2V5Iiwic2NhbGFycyIsIkpzb24iLCJlbmNvZGUiLCJlIiwiSlNPTiIsInN0cmluZ2lmeSIsImRlY29kZSIsInBhcnNlIiwiRGF0ZVRpbWUiLCJEYXRlIiwidG9JU09TdHJpbmciLCJCaWdJbnQiLCJ0b1N0cmluZyIsImZpbGVTaXplIiwiYnl0ZUxlbmd0aCIsImZpbGVTaXplQmVmb3JlIiwiZmlsZVBhcnRTaXplIiwicGFydHMiLCJmaWVsZHMiLCJvcmRlciIsInVybCIsInRvdGFsIiwiY3VycmVudCIsInBlcmNlbnQiLCJsZW5ndGgiLCJ1cGxvYWRQYXJ0RW5kZWQiLCJ1cGxvYWRGaWxlUGFydEVuZCIsInVwbG9hZEVuZGVkIiwidXBsb2FkRmlsZUVuZCIsImNodW5rUGFydHMiLCJBcnJheSIsImluZGV4IiwiY2h1bmsiLCJOdW1iZXIiLCJwdXNoIiwicHJvZ3Jlc3NQYXJ0cyIsIm9uUHJvZ3Jlc3MiLCJwYXJ0IiwicHJvZ3Jlc3NFdmVudCIsIk9iamVjdCIsInZhbHVlcyIsInJlZHVjZSIsInBydiIsImN1ciIsImxvYWRlZCIsImJ5UGFydCIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJwIiwidmFsdWUiLCJlbnRyaWVzIiwiYXBwZW5kIiwiQmxvYiIsInBvc3QiLCJvblVwbG9hZFByb2dyZXNzIiwidXBsb2FkRmlsZUluQ2xvdWQiLCJuYW1lIiwic2F2ZUluQ2xvdWQiLCJkZWxldGVkTm9kZXMiLCJub2RlcyIsInNoYXJlZE5vZGVzIiwiZm9sZGVyIiwibm9kZXNTaGFyZWRXaXRoTWUiLCJ0eXBlIiwiZGVsZXRlTm9kZVNoYXJpbmciLCJ1c2VySWQiLCJkdXBsaWNhdGVOb2RlIiwiZm9sZGVySWQiLCJjdXN0b21OYW1lIiwiRXJyb3IiLCJkZWxldGVOb2RlQ2xvdWRUcmFzaCIsImlkcyIsImNyZWF0ZUZvbGRlciIsInBhcmVudEZvbGRlcklkIiwiZW5jcnlwdGVkTmFtZSIsImVuY3J5cHRlZEtleSIsInBhcmVudCIsIlByb21pc2UiLCJhbGwiLCJyaWdodHMiLCJzaGFyZU5vZGUiLCJkZWxldGVkIiwidXNlciIsIndpdGhQdWJsaWNLZXkiLCJzaGFyZU5vZGVzIiwic2hhcmVOb2RlRmluaXNoIiwidXBkYXRlTm9kZSIsImlzRmF2b3JpdGUiLCJkZWxldGVkQXQiLCJmaWxlQ29udGVudCIsIm9uRG93bmxvYWRQcm9ncmVzcyIsInByb2dyZXNzRGVjcnlwdCIsIkJ5dGVzIiwiY29uc29sZSIsImxvZyIsImZyb20iLCJjb250ZW50VXJsIiwidG90YWxTaXplIiwiY29udGVudCIsIm1heWJlUGFydHMiLCJtYXliZUNvbnRlbnQiLCJzZW5kZXJQdWJsaWNLZXkiLCJ0cmFuc2ZlcnJlZEJ5dGVzIiwidG90YWxCeXRlcyIsImVuY3J5cHRlZENvbnRlbnRGcm9tUGFydHMiLCJmaWxlUGFydHMiLCJidWYiLCJ0aW1lb3V0IiwicHIiLCJtZDVQYXJ0Iiwic29ydCIsImEiLCJiIiwiZmluYWxpemUiLCJlbmNyeXB0ZWRDb250ZW50Iiwic3JjIiwibWQ1Q29udGVudCIsImRlbGV0ZUZpbGUiLCJkZWxldGVOb2RlIiwiZW1wdHlUcmFzaCIsImVtcHR5Q2xvdWRUcmFzaCIsInJlY292ZXJOb2RlIiwibW92ZU5vZGVzIiwibm9kZUlkcyIsInBhcmVudE5vZGVJZCIsImhhcyIsInJlY2VpdmVkTWFpbHMiLCJtYWlsIiwibSIsInNvbWUiLCJmaWxlTWFpbCIsInNlbmRlciIsImVuY3J5cHRlZE5hbWVLZXkiLCJmaWxlbmFtZSIsIm1lIiwiaW5jbHVkZXMiLCJvdGhlcnMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L1NlY3JlY3lDbG91ZENsaWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gKi9cbmltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCBreSBmcm9tIFwia3lcIjtcbmltcG9ydCB0eXBlIHtcbiAgRG93bmxvYWRQcm9ncmVzcyxcbiAgUHJvZ3Jlc3NDYWxsYmFjayxcbiAgU2VjcmVjeUNsaWVudCxcbiAgU3VjY2Vzc1Jlc3BvbnNlXG59IGZyb20gXCIuLi9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZW5jcnlwdE5hbWUgfSBmcm9tIFwiLi4vaW5kZXguanNcIjtcbmltcG9ydCB7IG5vZGVzQ2FjaGUsIGZpbGVzQ2FjaGUgfSBmcm9tIFwiLi4vY2FjaGUuanNcIjtcbmltcG9ydCB7IHNlY3JldHN0cmVhbUtleWdlbiB9IGZyb20gXCIuLi9jcnlwdG8vZmlsZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBLZXlQYWlyIH0gZnJvbSBcIi4uL2NyeXB0by9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZGVjcnlwdENyeXB0b0JveCB9IGZyb20gXCIuLi9jcnlwdG8vaW5kZXguanNcIjtcbmltcG9ydCB7IGVuY3J5cHRDcnlwdG9Cb3ggfSBmcm9tIFwiLi4vY3J5cHRvL2luZGV4LmpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEVycm9yQWNjZXNzRGVuaWVkLFxuICBFcnJvckJhc2ljLFxuICBFcnJvckxpbWl0LFxuICBFcnJvck5vdEV4aXN0LFxuICBFcnJvck5vdEZvdW5kXG59IGZyb20gXCIuLi9lcnJvci5qc1wiO1xuaW1wb3J0IHsgY29tcHJlc3MsIHVuY29tcHJlc3MgfSBmcm9tIFwiLi4vbWluaWZ5L2luZGV4LmpzXCI7XG5pbXBvcnQgeyBzb2RpdW0gfSBmcm9tIFwiLi4vc29kaXVtLmpzXCI7XG5pbXBvcnQge1xuICBlbnVtZXJhdGUsXG4gIGNodW5rcyxcbiAgcHJvbWlzZUFsbExpbWl0LFxuICBjb25jYXRlbmF0ZVxufSBmcm9tIFwiLi4vdXRpbHMvdXRpbHMuanNcIjtcbmltcG9ydCB7IG1kNSB9IGZyb20gXCIuLi93b3JrZXIvbWQ1LmpzXCI7XG5pbXBvcnQgeyBkZWNyeXB0LCBlbmNyeXB0IH0gZnJvbSBcIi4uL3dvcmtlci9zb2RpdW0uanNcIjtcbmltcG9ydCB0eXBlIHsgTm9kZVR5cGUsIFJpZ2h0cywgVGh1bmRlciB9IGZyb20gXCIuLi96ZXVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBncWxGaWxlVG9FeHRlcm5hbCB9IGZyb20gXCIuL2NvbnZlcnQvZmlsZS5qc1wiO1xuaW1wb3J0IHtcbiAgZ3FsTm9kZUZ1bGxUb0ludGVybmFsRnVsbCxcbiAgZ3FsTm9kZVRvRXh0ZXJuYWwsXG4gIGdxbE5vZGVUb0V4dGVybmFsTm9kZUZ1bGwsXG4gIGludGVybmFsTm9kZVRvTm9kZVxufSBmcm9tIFwiLi9jb252ZXJ0L25vZGUuanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgRmlsZUNvbnRlbnRQYXJ0LFxuICBGaWxlTWV0YWRhdGEsXG4gIEZpbGVQYXJ0UmVzcG9uc2UsXG4gIE5hbWVLZXlJbnB1dCxcbiAgTm9kZSxcbiAgTm9kZUZ1bGwsXG4gIFNoYXJlRmlsZUluSGlzdG9yeUlucHV0LFxuICBTaGFyZU5vZGVzSW5wdXRcbn0gZnJvbSBcIi4vdHlwZXMvaW5kZXguanNcIjtcbmltcG9ydCB7XG4gIGZpbGVTZWxlY3RvcixcbiAgbm9kZUZ1bGxTZWxlY3RvcixcbiAgbm9kZVNlbGVjdG9yXG59IGZyb20gXCIuL3R5cGVzL3NlbGVjdG9ycy5qc1wiO1xuLy8gaW1wb3J0IHsgbWQ1IH0gZnJvbSBcIi4uL3dvcmtlci9pbmRleC5qc1wiO1xuLy8gaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIG9mIH0gZnJvbSBcInJ4anNcIjtcblxuZXhwb3J0IGNsYXNzIFNlY3JlY3lDbG91ZENsaWVudCB7XG4gICNjbGllbnQ6IFNlY3JlY3lDbGllbnQ7XG5cbiAgI2tleXM6IEtleVBhaXI7XG5cbiAgI3RodW5kZXI6IFJldHVyblR5cGU8dHlwZW9mIFRodW5kZXI+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNsaWVudDogU2VjcmVjeUNsaWVudCxcbiAgICBrZXlzOiBLZXlQYWlyLFxuICAgIHRodW5kZXI6IFJldHVyblR5cGU8dHlwZW9mIFRodW5kZXI+XG4gICkge1xuICAgIHRoaXMuI2NsaWVudCA9IGNsaWVudDtcbiAgICB0aGlzLiNrZXlzID0ga2V5cztcbiAgICB0aGlzLiN0aHVuZGVyID0gdGh1bmRlcjtcbiAgfVxuXG4gIGFzeW5jIGFkZEZpbGVUb0hpc3Rvcnkoe1xuICAgIGZpbGVJZCxcbiAgICBub2RlSWRcbiAgfToge1xuICAgIGZpbGVJZDogc3RyaW5nO1xuICAgIG5vZGVJZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Tm9kZT4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yTm90RXhpc3QgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgYWRkRmlsZVRvSGlzdG9yeSB9ID0gYXdhaXQgdGhpcy4jdGh1bmRlcihcIm11dGF0aW9uXCIpKHtcbiAgICAgIGFkZEZpbGVUb0hpc3Rvcnk6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBub2RlSWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBBZGRGaWxlVG9IaXN0b3J5UmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGFkZEZpbGVUb0hpc3Rvcnk6IG5vZGVGdWxsU2VsZWN0b3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghYWRkRmlsZVRvSGlzdG9yeSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGFkZEZpbGVUb0hpc3RvcnkuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gYWRkRmlsZVRvSGlzdG9yeTtcbiAgICB9XG5cbiAgICBpZiAoYWRkRmlsZVRvSGlzdG9yeS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGFkZEZpbGVUb0hpc3Rvcnk7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZSA9IGF3YWl0IGdxbE5vZGVGdWxsVG9JbnRlcm5hbEZ1bGwoXG4gICAgICBhZGRGaWxlVG9IaXN0b3J5LmFkZEZpbGVUb0hpc3RvcnksXG4gICAgICB0aGlzLiNrZXlzXG4gICAgKTtcbiAgICBjb25zdCBmaWxlID0gbm9kZS5oaXN0b3J5LmZpbmQoZiA9PiBmLmlkID09PSBmaWxlSWQpO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICBjb25zdCB1c2VycyA9IG5vZGUudXNlcnMuZmlsdGVyKFxuICAgICAgICAoW3VdKSA9PiB1LnB1YmxpY0tleSAhPT0gdGhpcy4ja2V5cy5wdWJsaWNLZXlcbiAgICAgICk7XG4gICAgICBjb25zdCBpbnB1dDogU2hhcmVGaWxlSW5IaXN0b3J5SW5wdXQgPSB7XG4gICAgICAgIGZpbGVJZDogZmlsZS5pZCxcbiAgICAgICAgdXNlcnM6IHVzZXJzLm1hcCgoW3VdKSA9PiAoe1xuICAgICAgICAgIGlkOiB1LmlkLFxuICAgICAgICAgIGtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChmaWxlLmtleSksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIH0pKVxuICAgICAgfTtcblxuICAgICAgYXdhaXQgdGhpcy4jdGh1bmRlcihcIm11dGF0aW9uXCIpKHtcbiAgICAgICAgc2hhcmVGaWxlSW5IaXN0b3J5OiBbXG4gICAgICAgICAgeyBpbnB1dCwgbm9kZUlkIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCIuLi5vbiBTaGFyZUZpbGVJbkhpc3RvcnlSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIHNoYXJlRmlsZUluSGlzdG9yeTogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IGludGVybmFsTm9kZVRvTm9kZShub2RlKTtcbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHJlc3VsdFxuICAgIH07XG4gIH1cblxuICBhc3luYyB1cGxvYWRGaWxlKHtcbiAgICBmaWxlLFxuICAgIGVuY3J5cHRQcm9ncmVzcyxcbiAgICB1cGxvYWRQcm9ncmVzcyxcbiAgICBzaWduYWxcbiAgfToge1xuICAgIGZpbGU6IGdsb2JhbFRoaXMuRmlsZSB8IFVpbnQ4QXJyYXk7XG4gICAgZW5jcnlwdFByb2dyZXNzPzogUHJvZ3Jlc3NDYWxsYmFjaztcbiAgICB1cGxvYWRQcm9ncmVzcz86IFByb2dyZXNzQ2FsbGJhY2s7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPFxuICAgIHwgU3VjY2Vzc1Jlc3BvbnNlPHN0cmluZz5cbiAgICB8IEVycm9yQWNjZXNzRGVuaWVkXG4gICAgfCBFcnJvckxpbWl0XG4gICAgfCBFcnJvck5vdEZvdW5kXG4gICAgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IGZpbGVLZXkgPSBzZWNyZXRzdHJlYW1LZXlnZW4oKTtcbiAgICBjb25zdCBmaWxlQnVmZmVyID1cbiAgICAgIGZpbGUgaW5zdGFuY2VvZiBGaWxlID8gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgZmlsZS5hcnJheUJ1ZmZlcigpKSA6IGZpbGU7XG4gICAgY29uc3QgY29tcHJlc3NlZCA9IGNvbXByZXNzKGZpbGVCdWZmZXIpO1xuXG4gICAgY29uc3Qge1xuICAgICAgZGF0YTogZW5jcnlwdGVkRmlsZSxcbiAgICAgIG1kNTogbWQ1RmlsZSxcbiAgICAgIG1kNUVuY3J5cHRlZFxuICAgIH0gPSBhd2FpdCBlbmNyeXB0KGZpbGVLZXksIGNvbXByZXNzZWQsIGVuY3J5cHRQcm9ncmVzcywgc2lnbmFsKTtcblxuICAgIGNvbnN0IGVuY3J5cHRlZEZpbGVLZXkgPSBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgZmlsZUtleSxcbiAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgKTtcblxuICAgIGNvbnN0IHsgdXBsb2FkRmlsZSB9ID0gYXdhaXQgdGhpcy4jdGh1bmRlcihcIm11dGF0aW9uXCIsIHtcbiAgICAgIHNjYWxhcnM6IHtcbiAgICAgICAgSnNvbjoge1xuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IEpTT04uc3RyaW5naWZ5KGUpLFxuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IEpTT04ucGFyc2UoZSBhcyBzdHJpbmcpXG4gICAgICAgIH0sXG4gICAgICAgIERhdGVUaW1lOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gbmV3IERhdGUoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIERhdGUpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfSxcbiAgICAgICAgQmlnSW50OiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gQmlnSW50KGUgYXMgc3RyaW5nKSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBiaWdpbnQpLnRvU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKHtcbiAgICAgIHVwbG9hZEZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVTaXplOiBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICAgICAgZmlsZVNpemVCZWZvcmU6IGZpbGVCdWZmZXIuYnl0ZUxlbmd0aCxcbiAgICAgICAgICBmaWxlS2V5OiBzb2RpdW0udG9faGV4KGVuY3J5cHRlZEZpbGVLZXkpLFxuICAgICAgICAgIG1kNUVuY3J5cHRlZCxcbiAgICAgICAgICBtZDU6IG1kNUZpbGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JMaW1pdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFVwbG9hZEZpbGVSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdXBsb2FkRmlsZToge1xuICAgICAgICAgICAgICBmaWxlSWQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpbGVQYXJ0U2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgcGFydHM6IHtcbiAgICAgICAgICAgICAgICBmaWVsZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgb3JkZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgdXJsOiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXBsb2FkRmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVwbG9hZEZpbGUuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gdXBsb2FkRmlsZTtcbiAgICB9XG5cbiAgICBpZiAodXBsb2FkRmlsZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTGltaXRcIikge1xuICAgICAgcmV0dXJuIHVwbG9hZEZpbGU7XG4gICAgfVxuXG4gICAgaWYgKHVwbG9hZEZpbGUuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiB1cGxvYWRGaWxlO1xuICAgIH1cblxuICAgIGlmICghdXBsb2FkRmlsZS51cGxvYWRGaWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB1cGxvYWRQcm9ncmVzcz8uKHtcbiAgICAgIHRvdGFsOiBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICBjdXJyZW50OiAwLFxuICAgICAgcGVyY2VudDogMFxuICAgIH0pO1xuXG4gICAgaWYgKHVwbG9hZEZpbGUudXBsb2FkRmlsZS5wYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHVwbG9hZFByb2dyZXNzPy4oe1xuICAgICAgICB0b3RhbDogZW5jcnlwdGVkRmlsZS5ieXRlTGVuZ3RoLFxuICAgICAgICBjdXJyZW50OiBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICAgIHBlcmNlbnQ6IDFcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgICBkYXRhOiB1cGxvYWRGaWxlLnVwbG9hZEZpbGUuZmlsZUlkXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHVwbG9hZFBhcnRFbmRlZCA9IGFzeW5jIChcbiAgICAgIG1kNTogc3RyaW5nLFxuICAgICAgb3JkZXI6IG51bWJlclxuICAgICk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiA9PiB7XG4gICAgICBpZiAoIXVwbG9hZEZpbGUudXBsb2FkRmlsZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgdXBsb2FkRmlsZVBhcnRFbmQgfSA9IGF3YWl0IHRoaXMuI3RodW5kZXIoXCJtdXRhdGlvblwiKSh7XG4gICAgICAgIHVwbG9hZEZpbGVQYXJ0RW5kOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmlsZUlkOiB1cGxvYWRGaWxlLnVwbG9hZEZpbGUuZmlsZUlkLFxuICAgICAgICAgICAgbWQ1LFxuICAgICAgICAgICAgb3JkZXJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCIuLi5vbiBVcGxvYWRGaWxlUGFydEVuZFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgdXBsb2FkRmlsZVBhcnRFbmQ6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXVwbG9hZEZpbGVQYXJ0RW5kKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodXBsb2FkRmlsZVBhcnRFbmQuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICAgIHJldHVybiB1cGxvYWRGaWxlUGFydEVuZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgICAgZGF0YTogdXBsb2FkRmlsZVBhcnRFbmQudXBsb2FkRmlsZVBhcnRFbmRcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHVwbG9hZEVuZGVkID0gYXN5bmMgKCk6IFByb21pc2U8XG4gICAgICBTdWNjZXNzUmVzcG9uc2U8c3RyaW5nPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JOb3RGb3VuZCB8IG51bGxcbiAgICA+ID0+IHtcbiAgICAgIGlmICghdXBsb2FkRmlsZS51cGxvYWRGaWxlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgeyB1cGxvYWRGaWxlRW5kIH0gPSBhd2FpdCB0aGlzLiN0aHVuZGVyKFwibXV0YXRpb25cIikoe1xuICAgICAgICB1cGxvYWRGaWxlRW5kOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmlsZUlkOiB1cGxvYWRGaWxlLnVwbG9hZEZpbGUuZmlsZUlkXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIi4uLm9uIFVwbG9hZEZpbGVFbmRSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIHVwbG9hZEZpbGVFbmQ6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXVwbG9hZEZpbGVFbmQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh1cGxvYWRGaWxlRW5kLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgICByZXR1cm4gdXBsb2FkRmlsZUVuZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHVwbG9hZEZpbGVFbmQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgICAgcmV0dXJuIHVwbG9hZEZpbGVFbmQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghdXBsb2FkRmlsZUVuZC51cGxvYWRGaWxlRW5kKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgICBkYXRhOiB1cGxvYWRGaWxlRW5kLnVwbG9hZEZpbGVFbmRcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGNodW5rUGFydHMgPSBuZXcgQXJyYXk8e1xuICAgICAgb3JkZXI6IG51bWJlcjtcbiAgICAgIGRhdGE6IFVpbnQ4QXJyYXk7XG4gICAgICBtZDU6IHN0cmluZztcbiAgICB9PigpO1xuXG4gICAgZm9yIChjb25zdCBbaW5kZXgsIGNodW5rXSBvZiBlbnVtZXJhdGUoXG4gICAgICBjaHVua3MoZW5jcnlwdGVkRmlsZSwgTnVtYmVyKHVwbG9hZEZpbGUudXBsb2FkRmlsZS5maWxlUGFydFNpemUpKVxuICAgICkpIHtcbiAgICAgIGNodW5rUGFydHMucHVzaCh7XG4gICAgICAgIG9yZGVyOiBpbmRleCArIDEsXG4gICAgICAgIGRhdGE6IGNodW5rLFxuICAgICAgICBtZDU6IGF3YWl0IG1kNShjaHVuaylcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2dyZXNzUGFydHM6IFJlY29yZDxudW1iZXIsIFByb2dyZXNzRXZlbnQ+ID0ge307XG4gICAgY29uc3Qgb25Qcm9ncmVzcyA9IChwYXJ0OiBudW1iZXIsIHByb2dyZXNzRXZlbnQ6IFByb2dyZXNzRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIHByb2dyZXNzUGFydHNbcGFydF0gPSBwcm9ncmVzc0V2ZW50O1xuICAgICAgY29uc3QgY3VycmVudCA9IE9iamVjdC52YWx1ZXMocHJvZ3Jlc3NQYXJ0cykucmVkdWNlKFxuICAgICAgICAocHJ2LCBjdXIpID0+IHBydiArIGN1ci5sb2FkZWQsXG4gICAgICAgIDBcbiAgICAgICk7XG4gICAgICB1cGxvYWRQcm9ncmVzcz8uKHtcbiAgICAgICAgcGVyY2VudDogY3VycmVudCAvIGVuY3J5cHRlZEZpbGUuYnl0ZUxlbmd0aCxcbiAgICAgICAgdG90YWw6IGVuY3J5cHRlZEZpbGUuYnl0ZUxlbmd0aCxcbiAgICAgICAgY3VycmVudFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJ5UGFydCA9IGFzeW5jIChwYXJ0OiBGaWxlUGFydFJlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBpZiAoIXVwbG9hZEZpbGUudXBsb2FkRmlsZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgY29uc3QgY2h1bmsgPSBjaHVua1BhcnRzLmZpbmQocCA9PiBwLm9yZGVyID09PSBwYXJ0Lm9yZGVyKTtcbiAgICAgIGlmICghY2h1bmspIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFydC5maWVsZHMpKSB7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgXCJmaWxlXCIsXG4gICAgICAgIG5ldyBCbG9iKFtjaHVuay5kYXRhXSksXG4gICAgICAgIGAke3VwbG9hZEZpbGUudXBsb2FkRmlsZS5maWxlSWR9LSR7Y2h1bmsub3JkZXJ9YFxuICAgICAgKTtcblxuICAgICAgYXdhaXQgYXhpb3MucG9zdChwYXJ0LnVybCwgZm9ybURhdGEsIHtcbiAgICAgICAgb25VcGxvYWRQcm9ncmVzczogcHJvZ3Jlc3NFdmVudCA9PlxuICAgICAgICAgIG9uUHJvZ3Jlc3MocGFydC5vcmRlciwgcHJvZ3Jlc3NFdmVudCksXG4gICAgICAgIHNpZ25hbFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHVwbG9hZFBhcnRFbmRlZChjaHVuay5tZDUsIGNodW5rLm9yZGVyKTtcbiAgICAgIC8vIGlmICgoZSBhcyBhbnkpLnJlc3BvbnNlLnN0YXR1cyA9PT0gMCkge1xuICAgICAgLy8gICAvLyBUT0RPIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMva3kvaXNzdWVzLzMwNVxuICAgICAgLy8gfSBlbHNlIHtcbiAgICAgIC8vICAgdGhyb3cgZTtcbiAgICAgIC8vIH1cbiAgICB9O1xuXG4gICAgaWYgKCF1cGxvYWRGaWxlLnVwbG9hZEZpbGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGF3YWl0IHByb21pc2VBbGxMaW1pdChcbiAgICAgIDMsXG4gICAgICB1cGxvYWRGaWxlLnVwbG9hZEZpbGUucGFydHMubWFwKHAgPT4gKCk6IFByb21pc2U8dm9pZD4gPT4gYnlQYXJ0KHApKVxuICAgICk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB1cGxvYWRFbmRlZCgpO1xuXG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHQuZGF0YVxuICAgIH07XG4gIH1cblxuICBhc3luYyB1cGxvYWRGaWxlSW5DbG91ZCh7XG4gICAgZmlsZSxcbiAgICBuYW1lLFxuICAgIG5vZGVJZCxcbiAgICBlbmNyeXB0UHJvZ3Jlc3MsXG4gICAgdXBsb2FkUHJvZ3Jlc3MsXG4gICAgc2lnbmFsXG4gIH06IHtcbiAgICBmaWxlOiBnbG9iYWxUaGlzLkZpbGUgfCBVaW50OEFycmF5O1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBub2RlSWQ/OiBzdHJpbmc7XG4gICAgZW5jcnlwdFByb2dyZXNzPzogUHJvZ3Jlc3NDYWxsYmFjaztcbiAgICB1cGxvYWRQcm9ncmVzcz86IFByb2dyZXNzQ2FsbGJhY2s7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPFxuICAgIHwgU3VjY2Vzc1Jlc3BvbnNlPE5vZGVGdWxsPlxuICAgIHwgRXJyb3JBY2Nlc3NEZW5pZWRcbiAgICB8IEVycm9yTGltaXRcbiAgICB8IEVycm9yTm90Rm91bmRcbiAgICB8IEVycm9yQmFzaWNcbiAgICB8IEVycm9yTm90RXhpc3RcbiAgICB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgZmlsZUlkID0gYXdhaXQgdGhpcy51cGxvYWRGaWxlKHtcbiAgICAgIGZpbGUsXG4gICAgICBlbmNyeXB0UHJvZ3Jlc3MsXG4gICAgICB1cGxvYWRQcm9ncmVzcyxcbiAgICAgIHNpZ25hbFxuICAgIH0pO1xuXG4gICAgaWYgKCFmaWxlSWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChmaWxlSWQuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZmlsZUlkO1xuICAgIH1cblxuICAgIGlmIChmaWxlSWQuX190eXBlbmFtZSA9PT0gXCJFcnJvckxpbWl0XCIpIHtcbiAgICAgIHJldHVybiBmaWxlSWQ7XG4gICAgfVxuXG4gICAgaWYgKGZpbGVJZC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIGZpbGVJZDtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNhdmVJbkNsb3VkKHtcbiAgICAgIGZpbGVJZDogZmlsZUlkLmRhdGEsXG4gICAgICBuYW1lLFxuICAgICAgbm9kZUlkXG4gICAgfSk7XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JMaW1pdFwiKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZWROb2RlcygpOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxOb2RlW10+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgZGVsZXRlZE5vZGVzIH0gPSBhd2FpdCB0aGlzLiN0aHVuZGVyKFwicXVlcnlcIikoe1xuICAgICAgZGVsZXRlZE5vZGVzOiB7XG4gICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIERlbGV0ZWROb2Rlc1Jlc3BvbnNlXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIGRlbGV0ZWROb2Rlczogbm9kZVNlbGVjdG9yXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghZGVsZXRlZE5vZGVzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGVsZXRlZE5vZGVzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZWROb2RlcztcbiAgICB9XG5cbiAgICBjb25zdCBub2RlcyA9IG5ldyBBcnJheTxOb2RlPigpO1xuXG4gICAgZm9yIChjb25zdCBub2RlIG9mIGRlbGV0ZWROb2Rlcy5kZWxldGVkTm9kZXMpIHtcbiAgICAgIG5vZGVzLnB1c2goYXdhaXQgZ3FsTm9kZVRvRXh0ZXJuYWwobm9kZSwgdGhpcy4ja2V5cykpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogbm9kZXNcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgc2hhcmVkTm9kZXMoKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Tm9kZVtdPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IHNoYXJlZE5vZGVzIH0gPSBhd2FpdCB0aGlzLiN0aHVuZGVyKFwicXVlcnlcIikoe1xuICAgICAgc2hhcmVkTm9kZXM6IHtcbiAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gU2hhcmVkTm9kZXNSZXNwb25zZVwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBzaGFyZWROb2Rlczogbm9kZVNlbGVjdG9yXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghc2hhcmVkTm9kZXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChzaGFyZWROb2Rlcy5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBzaGFyZWROb2RlcztcbiAgICB9XG5cbiAgICBjb25zdCBub2RlcyA9IG5ldyBBcnJheTxOb2RlPigpO1xuXG4gICAgZm9yIChjb25zdCBmb2xkZXIgb2Ygc2hhcmVkTm9kZXMuc2hhcmVkTm9kZXMpIHtcbiAgICAgIG5vZGVzLnB1c2goYXdhaXQgZ3FsTm9kZVRvRXh0ZXJuYWwoZm9sZGVyLCB0aGlzLiNrZXlzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBub2Rlc1xuICAgIH07XG4gIH1cblxuICBhc3luYyBub2Rlc1NoYXJlZFdpdGhNZShcbiAgICB0eXBlPzogTm9kZVR5cGUgfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPE5vZGVbXT4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IG5vZGVzU2hhcmVkV2l0aE1lIH0gPSBhd2FpdCB0aGlzLiN0aHVuZGVyKFwicXVlcnlcIikoe1xuICAgICAgbm9kZXNTaGFyZWRXaXRoTWU6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gTm9kZXNTaGFyZWRXaXRoTWVSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbm9kZXNTaGFyZWRXaXRoTWU6IG5vZGVTZWxlY3RvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFub2Rlc1NoYXJlZFdpdGhNZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKG5vZGVzU2hhcmVkV2l0aE1lLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIG5vZGVzU2hhcmVkV2l0aE1lO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGVzID0gbmV3IEFycmF5PE5vZGU+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGZvbGRlciBvZiBub2Rlc1NoYXJlZFdpdGhNZS5ub2Rlc1NoYXJlZFdpdGhNZSkge1xuICAgICAgbm9kZXMucHVzaChhd2FpdCBncWxOb2RlVG9FeHRlcm5hbChmb2xkZXIsIHRoaXMuI2tleXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IG5vZGVzXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZU5vZGVTaGFyaW5nKHtcbiAgICBub2RlSWQsXG4gICAgdXNlcklkXG4gIH06IHtcbiAgICBub2RlSWQ6IHN0cmluZztcbiAgICB1c2VySWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBkZWxldGVOb2RlU2hhcmluZyB9ID0gYXdhaXQgdGhpcy4jdGh1bmRlcihcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZU5vZGVTaGFyaW5nOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBub2RlSWQsXG4gICAgICAgICAgdXNlcklkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERlbGV0ZU5vZGVTaGFyaW5nUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGRlbGV0ZU5vZGVTaGFyaW5nOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRlbGV0ZU5vZGVTaGFyaW5nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGVsZXRlTm9kZVNoYXJpbmcuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGVsZXRlTm9kZVNoYXJpbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkZWxldGVOb2RlU2hhcmluZy5kZWxldGVOb2RlU2hhcmluZ1xuICAgIH07XG4gIH1cblxuICBhc3luYyBkdXBsaWNhdGVOb2RlKHtcbiAgICBub2RlSWQsXG4gICAgZm9sZGVySWQsXG4gICAgY3VzdG9tTmFtZVxuICB9OiB7XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gICAgZm9sZGVySWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGN1c3RvbU5hbWU/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yTm90Rm91bmQgfCBudWxsXG4gID4ge1xuICAgIGxldCBub2RlID0gbm9kZXNDYWNoZS5nZXQobm9kZUlkKTtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIGF3YWl0IHRoaXMubm9kZSh7IGlkOiBub2RlSWQgfSk7XG4gICAgICBub2RlID0gbm9kZXNDYWNoZS5nZXQobm9kZUlkKTtcbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vZGUgKCR7bm9kZUlkfSkgZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghbm9kZS5hY2Nlc3M/Lm5hbWVLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgaGF2ZSBhY2Nlc3MgdG8gbm9kZSAke25vZGVJZH1gKTtcbiAgICB9XG4gICAgY3VzdG9tTmFtZSA9IGN1c3RvbU5hbWVcbiAgICAgID8gYXdhaXQgZW5jcnlwdE5hbWUoY3VzdG9tTmFtZSwgbm9kZS5hY2Nlc3MubmFtZUtleSlcbiAgICAgIDogbnVsbDtcblxuICAgIGNvbnN0IHsgZHVwbGljYXRlTm9kZSB9ID0gYXdhaXQgdGhpcy4jdGh1bmRlcihcIm11dGF0aW9uXCIpKHtcbiAgICAgIGR1cGxpY2F0ZU5vZGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5vZGVJZCxcbiAgICAgICAgICBmb2xkZXJJZCxcbiAgICAgICAgICBjdXN0b21OYW1lXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRHVwbGljYXRlTm9kZVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBkdXBsaWNhdGVOb2RlOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWR1cGxpY2F0ZU5vZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkdXBsaWNhdGVOb2RlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGR1cGxpY2F0ZU5vZGU7XG4gICAgfVxuXG4gICAgaWYgKGR1cGxpY2F0ZU5vZGUuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBkdXBsaWNhdGVOb2RlO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZHVwbGljYXRlTm9kZS5kdXBsaWNhdGVOb2RlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZU5vZGVDbG91ZFRyYXNoKHtcbiAgICBpZHNcbiAgfToge1xuICAgIGlkczogQXJyYXk8c3RyaW5nPjtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBkZWxldGVOb2RlQ2xvdWRUcmFzaCB9ID0gYXdhaXQgdGhpcy4jdGh1bmRlcihcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZU5vZGVDbG91ZFRyYXNoOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZHNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGVsZXRlTm9kZUNsb3VkVHJhc2hSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZGVsZXRlTm9kZUNsb3VkVHJhc2g6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGVsZXRlTm9kZUNsb3VkVHJhc2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkZWxldGVOb2RlQ2xvdWRUcmFzaC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkZWxldGVOb2RlQ2xvdWRUcmFzaDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRlbGV0ZU5vZGVDbG91ZFRyYXNoLmRlbGV0ZU5vZGVDbG91ZFRyYXNoID8/IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUZvbGRlcih7XG4gICAgbmFtZSxcbiAgICBwYXJlbnRGb2xkZXJJZFxuICB9OiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHBhcmVudEZvbGRlcklkPzogc3RyaW5nIHwgbnVsbDtcbiAgfSk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPE5vZGVGdWxsPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JOb3RFeGlzdCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3Qga2V5ID0gc2VjcmV0c3RyZWFtS2V5Z2VuKCk7XG4gICAgY29uc3QgZW5jcnlwdGVkTmFtZSA9IGF3YWl0IGVuY3J5cHROYW1lKG5hbWUsIHNvZGl1bS50b19oZXgoa2V5KSk7XG4gICAgY29uc3QgZW5jcnlwdGVkS2V5ID0gZW5jcnlwdENyeXB0b0JveChcbiAgICAgIGtleSxcbiAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgKTtcbiAgICBjb25zdCB7IGNyZWF0ZUZvbGRlciB9ID0gYXdhaXQgdGhpcy4jdGh1bmRlcihcIm11dGF0aW9uXCIpKHtcbiAgICAgIGNyZWF0ZUZvbGRlcjogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogZW5jcnlwdGVkTmFtZSxcbiAgICAgICAgICBwYXJlbnRGb2xkZXJJZCxcbiAgICAgICAgICBrZXk6IHNvZGl1bS50b19oZXgoZW5jcnlwdGVkS2V5KVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEV4aXN0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIENyZWF0ZUZvbGRlclJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBjcmVhdGVGb2xkZXI6IG5vZGVGdWxsU2VsZWN0b3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcbiAgICBpZiAoIWNyZWF0ZUZvbGRlcikge1xuICAgICAgLy90aHJvdyBuZXcgRXJyb3IoYENhbid0IGNyZWF0ZSBmb2xkZXJgKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChjcmVhdGVGb2xkZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gY3JlYXRlRm9sZGVyO1xuICAgIH1cblxuICAgIGlmIChjcmVhdGVGb2xkZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEV4aXN0XCIpIHtcbiAgICAgIHJldHVybiBjcmVhdGVGb2xkZXI7XG4gICAgfVxuXG4gICAgaWYgKCFjcmVhdGVGb2xkZXIuY3JlYXRlRm9sZGVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBmb2xkZXIgPSBhd2FpdCBncWxOb2RlVG9FeHRlcm5hbE5vZGVGdWxsKFxuICAgICAgY3JlYXRlRm9sZGVyLmNyZWF0ZUZvbGRlcixcbiAgICAgIHRoaXMuI2tleXNcbiAgICApO1xuXG4gICAgY29uc3QgdXNlcnMgPVxuICAgICAgZm9sZGVyLnBhcmVudD8udXNlcnM/LmZpbHRlcihcbiAgICAgICAgKFt1XSkgPT4gdS5wdWJsaWNLZXkgIT09IHRoaXMuI2tleXMucHVibGljS2V5XG4gICAgICApID8/IFtdO1xuXG4gICAgaWYgKHVzZXJzLmxlbmd0aCkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHVzZXJzLm1hcCgoW3UsIHJpZ2h0c10pID0+XG4gICAgICAgICAgdGhpcy5zaGFyZU5vZGUoe1xuICAgICAgICAgICAgbm9kZUlkOiBmb2xkZXIuaWQsXG4gICAgICAgICAgICByaWdodHMsXG4gICAgICAgICAgICB1c2VySWQ6IHUuaWRcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZm9sZGVyXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIG5vZGUoe1xuICAgIGlkLFxuICAgIGRlbGV0ZWRcbiAgfToge1xuICAgIGlkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBkZWxldGVkPzogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0gPSB7fSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPE5vZGVGdWxsPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgbm9kZSB9ID0gYXdhaXQgdGhpcy4jdGh1bmRlcihcInF1ZXJ5XCIpKHtcbiAgICAgIG5vZGU6IFtcbiAgICAgICAgeyBkZWxldGVkLCBpZCB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBOb2RlUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG5vZGU6IG5vZGVGdWxsU2VsZWN0b3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChub2RlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIGlmICghbm9kZS5ub2RlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBncWxOb2RlVG9FeHRlcm5hbE5vZGVGdWxsKG5vZGUubm9kZSwgdGhpcy4ja2V5cyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZmlsZSh7XG4gICAgaWRcbiAgfToge1xuICAgIGlkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxGaWxlTWV0YWRhdGE+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBmaWxlIH0gPSBhd2FpdCB0aGlzLiN0aHVuZGVyKFwicXVlcnlcIikoe1xuICAgICAgZmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgaWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRmlsZVF1ZXJ5UmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGZpbGU6IGZpbGVTZWxlY3RvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuICAgIGlmICghZmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGZpbGUuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZmlsZTtcbiAgICB9XG5cbiAgICBpZiAoIWZpbGUuZmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gZ3FsRmlsZVRvRXh0ZXJuYWwoZmlsZS5maWxlLCB0aGlzLiNrZXlzKTtcblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogcmVzdWx0XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHNoYXJlTm9kZSh7XG4gICAgbm9kZUlkLFxuICAgIHVzZXJJZCxcbiAgICByaWdodHNcbiAgfToge1xuICAgIG5vZGVJZDogc3RyaW5nO1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICAgIHJpZ2h0czogUmlnaHRzO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yTm90Rm91bmQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHVzZXIgPSBhd2FpdCB0aGlzLiNjbGllbnQudXNlcih7IHVzZXJJZCwgd2l0aFB1YmxpY0tleTogdHJ1ZSB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGNvbnN0IHsgc2hhcmVOb2RlIH0gPSBhd2FpdCB0aGlzLiN0aHVuZGVyKFwibXV0YXRpb25cIikoe1xuICAgICAgc2hhcmVOb2RlOiBbXG4gICAgICAgIHsgbm9kZUlkLCB1c2VySWQgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBTaGFyZU5vZGVSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbm9kZXM6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghc2hhcmVOb2RlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoc2hhcmVOb2RlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHNoYXJlTm9kZTtcbiAgICB9XG5cbiAgICBpZiAoc2hhcmVOb2RlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gc2hhcmVOb2RlO1xuICAgIH1cblxuICAgIGNvbnN0IHNoYXJlTm9kZXM6IFNoYXJlTm9kZXNJbnB1dCA9IHtcbiAgICAgIG5vZGVzOiBbXVxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IGlkIG9mIHNoYXJlTm9kZS5ub2Rlcykge1xuICAgICAgY29uc3QgbmFtZUtleSA9IGF3YWl0IHRoaXMucGVyTm9kZShpZCwgdXNlci5kYXRhLnB1YmxpY0tleSk7XG4gICAgICBpZiAobmFtZUtleSkge1xuICAgICAgICBzaGFyZU5vZGVzLm5vZGVzLnB1c2gobmFtZUtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyBzaGFyZU5vZGVGaW5pc2ggfSA9IGF3YWl0IHRoaXMuI3RodW5kZXIoXCJtdXRhdGlvblwiKSh7XG4gICAgICBzaGFyZU5vZGVGaW5pc2g6IFtcbiAgICAgICAge1xuICAgICAgICAgIHJpZ2h0cyxcbiAgICAgICAgICB1c2VySWQsXG4gICAgICAgICAgc2hhcmVOb2Rlc1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFNoYXJlTm9kZUZpbmlzaFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBzaGFyZU5vZGVGaW5pc2g6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghc2hhcmVOb2RlRmluaXNoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoc2hhcmVOb2RlRmluaXNoLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHNoYXJlTm9kZUZpbmlzaDtcbiAgICB9XG5cbiAgICBpZiAoc2hhcmVOb2RlRmluaXNoLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gc2hhcmVOb2RlRmluaXNoO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogc2hhcmVOb2RlRmluaXNoLnNoYXJlTm9kZUZpbmlzaCA/PyBmYWxzZVxuICAgIH07XG4gIH1cblxuICBhc3luYyB1cGRhdGVOb2RlKHtcbiAgICBub2RlSWQsXG4gICAgbmFtZSxcbiAgICBpc0Zhdm9yaXRlLFxuICAgIGRlbGV0ZWRBdFxuICB9OiB7XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gICAgbmFtZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgaXNGYXZvcml0ZT86IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGRlbGV0ZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Tm9kZUZ1bGw+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBFcnJvck5vdEV4aXN0IHwgbnVsbFxuICA+IHtcbiAgICBsZXQgbm9kZSA9IG5vZGVzQ2FjaGUuZ2V0KG5vZGVJZCk7XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICBhd2FpdCB0aGlzLm5vZGUoeyBpZDogbm9kZUlkIH0pO1xuICAgICAgbm9kZSA9IG5vZGVzQ2FjaGUuZ2V0KG5vZGVJZCk7XG4gICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgdGhyb3cgYENhbid0IGZpbmQgTm9kZSAke25vZGVJZH1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghbm9kZS5hY2Nlc3M/Lm5hbWVLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgaGF2ZSBhY2Nlc3MgdG8gbm9kZSAke25vZGVJZH1gKTtcbiAgICB9XG5cbiAgICBuYW1lID0gbmFtZVxuICAgICAgPyBub2RlLmFjY2Vzcz8ubmFtZUtleVxuICAgICAgICA/IGF3YWl0IGVuY3J5cHROYW1lKG5hbWUsIG5vZGUuYWNjZXNzLm5hbWVLZXkpXG4gICAgICAgIDogbmFtZVxuICAgICAgOiBudWxsO1xuXG4gICAgY29uc3QgeyB1cGRhdGVOb2RlIH0gPSBhd2FpdCB0aGlzLiN0aHVuZGVyKFwibXV0YXRpb25cIikoe1xuICAgICAgdXBkYXRlTm9kZTogW1xuICAgICAgICB7XG4gICAgICAgICAgbm9kZUlkLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgaXNGYXZvcml0ZSxcbiAgICAgICAgICBkZWxldGVkQXRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBVcGRhdGVOb2RlUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHVwZGF0ZU5vZGU6IG5vZGVGdWxsU2VsZWN0b3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXBkYXRlTm9kZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZU5vZGUuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gdXBkYXRlTm9kZTtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlTm9kZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIHVwZGF0ZU5vZGU7XG4gICAgfVxuXG4gICAgaWYgKCF1cGRhdGVOb2RlLnVwZGF0ZU5vZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdxbE5vZGVUb0V4dGVybmFsTm9kZUZ1bGwoXG4gICAgICB1cGRhdGVOb2RlLnVwZGF0ZU5vZGUsXG4gICAgICB0aGlzLiNrZXlzXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogcmVzdWx0XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGZpbGVDb250ZW50KHtcbiAgICBmaWxlSWQsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzLFxuICAgIHByb2dyZXNzRGVjcnlwdCxcbiAgICBzaWduYWxcbiAgfToge1xuICAgIGZpbGVJZDogc3RyaW5nO1xuICAgIG9uRG93bmxvYWRQcm9ncmVzcz86IChwcm9ncmVzczogRG93bmxvYWRQcm9ncmVzcykgPT4gdm9pZDtcbiAgICBwcm9ncmVzc0RlY3J5cHQ/OiBQcm9ncmVzc0NhbGxiYWNrO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8VWludDhBcnJheT4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yQmFzaWMgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgZmlsZUNvbnRlbnQgfSA9IGF3YWl0IHRoaXMuI3RodW5kZXIoXCJxdWVyeVwiLCB7XG4gICAgICBzY2FsYXJzOiB7XG4gICAgICAgIEJ5dGVzOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coZSwgdHlwZW9mIGUpO1xuICAgICAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkuZnJvbShbMSwgMiwgM10pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gKGUgYXMgVWludDhBcnJheSkudG9TdHJpbmcoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoe1xuICAgICAgZmlsZUNvbnRlbnQ6IFtcbiAgICAgICAgeyBmaWxlSWQgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBGaWxlQ29udGVudFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICAgIFwiLi4ub24gRmlsZUNvbnRlbnRDbG91ZFwiOiB7XG4gICAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwYXJ0czoge1xuICAgICAgICAgICAgICAgICAgY29udGVudFVybDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIG9yZGVyOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgbWQ1OiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBrZXk6IHRydWUsXG4gICAgICAgICAgICAgICAgcHVibGljS2V5OiB0cnVlLFxuICAgICAgICAgICAgICAgIHRvdGFsU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtZDU6IHRydWUsXG4gICAgICAgICAgICAgICAgbWQ1RW5jcnlwdGVkOiB0cnVlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFwiLi4ub24gRmlsZUNvbnRlbnRMaXRlXCI6IHtcbiAgICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgICAga2V5OiB0cnVlLFxuICAgICAgICAgICAgICAgIHB1YmxpY0tleTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtZDU6IHRydWUsXG4gICAgICAgICAgICAgICAgbWQ1RW5jcnlwdGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHRvdGFsU2l6ZTogdHJ1ZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBcIi4uLm9uIEZpbGVDb250ZW50UmVjZWl2ZWRNYWlsXCI6IHtcbiAgICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1heWJlUGFydHM6IHtcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnRVcmw6IHRydWUsXG4gICAgICAgICAgICAgICAgICBvcmRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIG1kNTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWF5YmVDb250ZW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGtleTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzZW5kZXJQdWJsaWNLZXk6IHRydWUsXG4gICAgICAgICAgICAgICAgdG90YWxTaXplOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1kNTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtZDVFbmNyeXB0ZWQ6IHRydWVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXCIuLi5vbiBGaWxlQ29udGVudFNlbnRNYWlsXCI6IHtcbiAgICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1heWJlUGFydHM6IHtcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnRVcmw6IHRydWUsXG4gICAgICAgICAgICAgICAgICBvcmRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIG1kNTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWF5YmVDb250ZW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGtleTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0b3RhbFNpemU6IHRydWUsXG4gICAgICAgICAgICAgICAgbWQ1OiB0cnVlLFxuICAgICAgICAgICAgICAgIG1kNUVuY3J5cHRlZDogdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWZpbGVDb250ZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZmlsZUNvbnRlbnQuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZmlsZUNvbnRlbnQ7XG4gICAgfVxuXG4gICAgaWYgKGZpbGVDb250ZW50Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JCYXNpY1wiKSB7XG4gICAgICByZXR1cm4gZmlsZUNvbnRlbnQ7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZSA9IGZpbGVDb250ZW50LmZpbGU7XG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9ncmVzc1BhcnRzOiBSZWNvcmQ8bnVtYmVyLCBEb3dubG9hZFByb2dyZXNzPiA9IHt9O1xuICAgIGNvbnN0IG9uUHJvZ3Jlc3MgPSAoXG4gICAgICBwYXJ0OiBudW1iZXIsXG4gICAgICBwcm9ncmVzc0V2ZW50OiBEb3dubG9hZFByb2dyZXNzXG4gICAgKTogdm9pZCA9PiB7XG4gICAgICBwcm9ncmVzc1BhcnRzW3BhcnRdID0gcHJvZ3Jlc3NFdmVudDtcbiAgICAgIGNvbnN0IHRyYW5zZmVycmVkQnl0ZXMgPSBPYmplY3QudmFsdWVzKHByb2dyZXNzUGFydHMpLnJlZHVjZShcbiAgICAgICAgKHBydiwgY3VyKSA9PiBwcnYgKyBjdXIudHJhbnNmZXJyZWRCeXRlcyxcbiAgICAgICAgMFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHRvdGFsQnl0ZXMgPSBOdW1iZXIoZmlsZS50b3RhbFNpemUpO1xuICAgICAgb25Eb3dubG9hZFByb2dyZXNzPy4oe1xuICAgICAgICBwZXJjZW50OiB0cmFuc2ZlcnJlZEJ5dGVzIC8gdG90YWxCeXRlcyxcbiAgICAgICAgdG90YWxCeXRlcyxcbiAgICAgICAgdHJhbnNmZXJyZWRCeXRlc1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGVuY3J5cHRlZENvbnRlbnRGcm9tUGFydHMgPSBhc3luYyAoXG4gICAgICBmaWxlUGFydHM6IEZpbGVDb250ZW50UGFydFtdXG4gICAgKTogUHJvbWlzZTxVaW50OEFycmF5PiA9PiB7XG4gICAgICBjb25zdCBwYXJ0cyA9IG5ldyBBcnJheTx7IGRhdGE6IFVpbnQ4QXJyYXk7IG9yZGVyOiBudW1iZXIgfT4oKTtcblxuICAgICAgY29uc3QgYnlQYXJ0ID0gYXN5bmMgKHBhcnQ6IEZpbGVDb250ZW50UGFydCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBjb25zdCBidWYgPSBuZXcgVWludDhBcnJheShcbiAgICAgICAgICBhd2FpdCBreVxuICAgICAgICAgICAgLmdldChwYXJ0LmNvbnRlbnRVcmwsIHtcbiAgICAgICAgICAgICAgdGltZW91dDogZmFsc2UsXG4gICAgICAgICAgICAgIG9uRG93bmxvYWRQcm9ncmVzczogcHIgPT4gb25Qcm9ncmVzcyhwYXJ0Lm9yZGVyLCBwciksXG4gICAgICAgICAgICAgIHNpZ25hbDogc2lnbmFsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmFycmF5QnVmZmVyKClcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbWQ1UGFydCA9IGF3YWl0IG1kNShidWYpO1xuICAgICAgICBpZiAobWQ1UGFydCAhPT0gcGFydC5tZDUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgSW52YWxpZCBtZDUgZm9yIHBhcnQgJHtwYXJ0Lm9yZGVyfSBvZiBmaWxlICR7ZmlsZUlkfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHBhcnRzLnB1c2goe1xuICAgICAgICAgIGRhdGE6IGJ1ZixcbiAgICAgICAgICBvcmRlcjogcGFydC5vcmRlclxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IHByb21pc2VBbGxMaW1pdChcbiAgICAgICAgMyxcbiAgICAgICAgZmlsZVBhcnRzLm1hcChwID0+ICgpOiBQcm9taXNlPHZvaWQ+ID0+IGJ5UGFydChwKSlcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBjb25jYXRlbmF0ZShcbiAgICAgICAgLi4ucGFydHMuc29ydCgoYSwgYikgPT4gYS5vcmRlciAtIGIub3JkZXIpLm1hcChwID0+IHAuZGF0YSlcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZpbmFsaXplID0gYXN5bmMgKFxuICAgICAgZW5jcnlwdGVkQ29udGVudDogVWludDhBcnJheVxuICAgICk6IFByb21pc2U8VWludDhBcnJheT4gPT4ge1xuICAgICAgLy8gY29uc3QgbWQ1RW5jcnlwdGVkID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20obWQ1KG9mKGVuY3J5cHRlZENvbnRlbnQpKSk7XG4gICAgICBjb25zdCBtZDVFbmNyeXB0ZWQgPSBhd2FpdCBtZDUoZW5jcnlwdGVkQ29udGVudCk7XG5cbiAgICAgIGlmIChtZDVFbmNyeXB0ZWQgIT09IGZpbGUubWQ1RW5jcnlwdGVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRW5jcnlwdGVkIGNvbnRlbnQgZG9lcyBub3QgbWF0Y2hgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5ID0gZGVjcnlwdENyeXB0b0JveChcbiAgICAgICAgc29kaXVtLmZyb21faGV4KGZpbGUua2V5KSxcbiAgICAgICAgZmlsZS5fX3R5cGVuYW1lID09PSBcIkZpbGVDb250ZW50UmVjZWl2ZWRNYWlsXCJcbiAgICAgICAgICA/IGZpbGUuc2VuZGVyUHVibGljS2V5XG4gICAgICAgICAgOiBmaWxlLl9fdHlwZW5hbWUgPT09IFwiRmlsZUNvbnRlbnRDbG91ZFwiXG4gICAgICAgICAgPyBmaWxlLnB1YmxpY0tleVxuICAgICAgICAgIDogdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgKTtcblxuICAgICAgY29uc3Qgc3JjID0gYXdhaXQgZGVjcnlwdChrZXksIGVuY3J5cHRlZENvbnRlbnQsIHByb2dyZXNzRGVjcnlwdCwgc2lnbmFsKTtcblxuICAgICAgLy8gY29uc3QgbWQ1Q29udGVudCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKG1kNShvZihzcmMpKSk7XG4gICAgICBjb25zdCBtZDVDb250ZW50ID0gYXdhaXQgbWQ1KHNyYyk7XG5cbiAgICAgIGlmIChtZDVDb250ZW50ICE9PSBmaWxlLm1kNSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbnRlbnQgZG9lcyBub3QgbWF0Y2hgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVuY29tcHJlc3Moc3JjKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZW5jcnlwdGVkQ29udGVudCA9XG4gICAgICBmaWxlLl9fdHlwZW5hbWUgPT09IFwiRmlsZUNvbnRlbnRMaXRlXCJcbiAgICAgICAgPyBmaWxlLmNvbnRlbnRcbiAgICAgICAgOiBmaWxlLl9fdHlwZW5hbWUgPT09IFwiRmlsZUNvbnRlbnRDbG91ZFwiXG4gICAgICAgID8gYXdhaXQgZW5jcnlwdGVkQ29udGVudEZyb21QYXJ0cyhmaWxlLnBhcnRzKVxuICAgICAgICA6IGZpbGUubWF5YmVDb250ZW50XG4gICAgICAgID8gZmlsZS5tYXliZUNvbnRlbnRcbiAgICAgICAgOiBmaWxlLm1heWJlUGFydHNcbiAgICAgICAgPyBhd2FpdCBlbmNyeXB0ZWRDb250ZW50RnJvbVBhcnRzKGZpbGUubWF5YmVQYXJ0cylcbiAgICAgICAgOiBudWxsO1xuXG4gICAgaWYgKCFlbmNyeXB0ZWRDb250ZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGF3YWl0IGZpbmFsaXplKGVuY3J5cHRlZENvbnRlbnQpXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUZpbGUoe1xuICAgIGZpbGVJZCxcbiAgICBub2RlSWRcbiAgfToge1xuICAgIGZpbGVJZDogc3RyaW5nO1xuICAgIG5vZGVJZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yTm90RXhpc3QgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgZGVsZXRlRmlsZSB9ID0gYXdhaXQgdGhpcy4jdGh1bmRlcihcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZUZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBub2RlSWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEZWxldGVGaWxlUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGRlbGV0ZUZpbGU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGVsZXRlRmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRlbGV0ZUZpbGUuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGVsZXRlRmlsZTtcbiAgICB9XG5cbiAgICBpZiAoZGVsZXRlRmlsZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZUZpbGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkZWxldGVGaWxlLmRlbGV0ZUZpbGVcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlTm9kZSh7XG4gICAgbm9kZUlkXG4gIH06IHtcbiAgICBub2RlSWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBkZWxldGVOb2RlIH0gPSBhd2FpdCB0aGlzLiN0aHVuZGVyKFwibXV0YXRpb25cIikoe1xuICAgICAgZGVsZXRlTm9kZTogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6IG5vZGVJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEZWxldGVOb2RlUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGRlbGV0ZU5vZGU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGVsZXRlTm9kZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRlbGV0ZU5vZGUuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGVsZXRlTm9kZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRlbGV0ZU5vZGUuZGVsZXRlTm9kZVxuICAgIH07XG4gIH1cblxuICBhc3luYyBlbXB0eVRyYXNoKCk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgZW1wdHlDbG91ZFRyYXNoIH0gPSBhd2FpdCB0aGlzLiN0aHVuZGVyKFwibXV0YXRpb25cIikoe1xuICAgICAgZW1wdHlDbG91ZFRyYXNoOiB7XG4gICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIEVtcHR5Q2xvdWRUcmFzaFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIGVtcHR5Q2xvdWRUcmFzaDogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIWVtcHR5Q2xvdWRUcmFzaCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGVtcHR5Q2xvdWRUcmFzaC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBlbXB0eUNsb3VkVHJhc2g7XG4gICAgfVxuXG4gICAgaWYgKCFlbXB0eUNsb3VkVHJhc2guZW1wdHlDbG91ZFRyYXNoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGVtcHR5Q2xvdWRUcmFzaC5lbXB0eUNsb3VkVHJhc2hcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgcmVjb3Zlck5vZGUoXG4gICAgaWQ6IHN0cmluZ1xuICApOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JOb3RFeGlzdCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyByZWNvdmVyTm9kZSB9ID0gYXdhaXQgdGhpcy4jdGh1bmRlcihcIm11dGF0aW9uXCIpKHtcbiAgICAgIHJlY292ZXJOb2RlOiBbXG4gICAgICAgIHsgaWQgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBSZWNvdmVyTm9kZVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICByZWNvdmVyTm9kZTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFyZWNvdmVyTm9kZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHJlY292ZXJOb2RlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHJlY292ZXJOb2RlO1xuICAgIH1cblxuICAgIGlmIChyZWNvdmVyTm9kZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIHJlY292ZXJOb2RlO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogcmVjb3Zlck5vZGUucmVjb3Zlck5vZGUgPz8gZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgbW92ZU5vZGVzKHtcbiAgICBub2RlSWRzLFxuICAgIHBhcmVudE5vZGVJZFxuICB9OiB7XG4gICAgbm9kZUlkczogc3RyaW5nW107XG4gICAgcGFyZW50Tm9kZUlkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBtb3ZlTm9kZXMgfSA9IGF3YWl0IHRoaXMuI3RodW5kZXIoXCJtdXRhdGlvblwiKSh7XG4gICAgICBtb3ZlTm9kZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5vZGVJZHMsXG4gICAgICAgICAgcGFyZW50Tm9kZUlkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIE1vdmVOb2Rlc1Jlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtb3ZlTm9kZXM6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghbW92ZU5vZGVzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAobW92ZU5vZGVzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIG1vdmVOb2RlcztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IG1vdmVOb2Rlcy5tb3ZlTm9kZXMgPz8gZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgc2F2ZUluQ2xvdWQoe1xuICAgIGZpbGVJZCxcbiAgICBuYW1lLFxuICAgIG5vZGVJZFxuICB9OiB7XG4gICAgZmlsZUlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIG5vZGVJZD86IHN0cmluZztcbiAgfSk6IFByb21pc2U8XG4gICAgfCBTdWNjZXNzUmVzcG9uc2U8Tm9kZUZ1bGw+XG4gICAgfCBFcnJvckFjY2Vzc0RlbmllZFxuICAgIHwgRXJyb3JCYXNpY1xuICAgIHwgRXJyb3JMaW1pdFxuICAgIHwgRXJyb3JOb3RGb3VuZFxuICAgIHwgRXJyb3JOb3RFeGlzdFxuICAgIHwgbnVsbFxuICA+IHtcbiAgICBpZiAobm9kZUlkICYmICFub2Rlc0NhY2hlLmhhcyhub2RlSWQpKSB7XG4gICAgICBhd2FpdCB0aGlzLm5vZGUoeyBpZDogbm9kZUlkIH0pO1xuICAgICAgaWYgKCFub2Rlc0NhY2hlLmhhcyhub2RlSWQpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgX190eXBlbmFtZTogXCJFcnJvckJhc2ljXCIsXG4gICAgICAgICAgbWVzc2FnZTogYFRoZSBub2RlICR7bm9kZUlkfSBkb2VzIG5vdCBleGlzdHNgXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGtleSA9IFwiXCI7XG5cbiAgICBjb25zdCBmaWxlID0gZmlsZXNDYWNoZS5nZXQoZmlsZUlkKTtcblxuICAgIGlmICghZmlsZSkge1xuICAgICAgYXdhaXQgdGhpcy5maWxlKHsgaWQ6IGZpbGVJZCB9KTtcbiAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc0NhY2hlLmdldChmaWxlSWQpID8/IG51bGw7XG4gICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgY29uc3QgcmVjZWl2ZWRNYWlscyA9IGF3YWl0IHRoaXMuI2NsaWVudC5tYWlsLnJlY2VpdmVkTWFpbHMoKTtcbiAgICAgICAgaWYgKCFyZWNlaXZlZE1haWxzKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlY2VpdmVkTWFpbHMuX190eXBlbmFtZSAhPT0gXCJTdWNjZXNzUmVzcG9uc2VcIikge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1haWwgPSByZWNlaXZlZE1haWxzLmRhdGEuZmluZChtID0+XG4gICAgICAgICAgbS5maWxlcy5zb21lKGYgPT4gZi5pZCA9PT0gZmlsZUlkKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghbWFpbCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiBcIkVycm9yQmFzaWNcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBDYW4ndCBmaW5kIG1haWwgd2l0aCB0aGUgZmlsZSAke2ZpbGVJZH1gXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVNYWlsID0gbWFpbC5maWxlcy5maW5kKGYgPT4gZi5pZCA9PT0gZmlsZUlkKTtcblxuICAgICAgICBpZiAoIWZpbGVNYWlsKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IFwiRXJyb3JCYXNpY1wiLFxuICAgICAgICAgICAgbWVzc2FnZTogYENhbid0IGZpbmQgbWFpbCB3aXRoIHRoZSBmaWxlICR7ZmlsZUlkfWBcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZUtleSA9IGRlY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgc29kaXVtLmZyb21faGV4KGZpbGVNYWlsLmtleSksXG4gICAgICAgICAgbWFpbC5zZW5kZXIucHVibGljS2V5LFxuICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICApO1xuXG4gICAgICAgIGtleSA9IHNvZGl1bS50b19oZXgoZmlsZUtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZXkgPSBmaWxlLmtleTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAga2V5ID0gZmlsZS5rZXk7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX190eXBlbmFtZTogXCJFcnJvckJhc2ljXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiVW5leHBlY3RlZCBlcnJvciAzXCJcbiAgICAgIH07XG4gICAgfVxuXG4gICAga2V5ID0gc29kaXVtLnRvX2hleChcbiAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgIHNvZGl1bS5mcm9tX2hleChrZXkpLFxuICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IG5hbWVLZXkgPSBzZWNyZXRzdHJlYW1LZXlnZW4oKTtcbiAgICBjb25zdCBlbmNyeXB0ZWROYW1lID0gYXdhaXQgZW5jcnlwdE5hbWUobmFtZSwgc29kaXVtLnRvX2hleChuYW1lS2V5KSk7XG4gICAgY29uc3QgZW5jcnlwdGVkTmFtZUtleSA9IHNvZGl1bS50b19oZXgoXG4gICAgICBlbmNyeXB0Q3J5cHRvQm94KG5hbWVLZXksIHRoaXMuI2tleXMucHVibGljS2V5LCB0aGlzLiNrZXlzLnByaXZhdGVLZXkpXG4gICAgKTtcblxuICAgIGNvbnN0IHsgc2F2ZUluQ2xvdWQgfSA9IGF3YWl0IHRoaXMuI3RodW5kZXIoXCJtdXRhdGlvblwiKSh7XG4gICAgICBzYXZlSW5DbG91ZDogW1xuICAgICAgICB7XG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIGtleSxcbiAgICAgICAgICBub2RlSWQsXG4gICAgICAgICAgZmlsZW5hbWU6IGVuY3J5cHRlZE5hbWUsXG4gICAgICAgICAgbmFtZUtleTogZW5jcnlwdGVkTmFtZUtleVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTGltaXRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEV4aXN0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFNhdmVJbkNsb3VkUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHNhdmVJbkNsb3VkOiBub2RlRnVsbFNlbGVjdG9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXNhdmVJbkNsb3VkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoc2F2ZUluQ2xvdWQuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gc2F2ZUluQ2xvdWQ7XG4gICAgfVxuXG4gICAgaWYgKHNhdmVJbkNsb3VkLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gc2F2ZUluQ2xvdWQ7XG4gICAgfVxuICAgIGlmIChzYXZlSW5DbG91ZC5fX3R5cGVuYW1lID09PSBcIkVycm9yTGltaXRcIikge1xuICAgICAgcmV0dXJuIHNhdmVJbkNsb3VkO1xuICAgIH1cblxuICAgIGlmIChzYXZlSW5DbG91ZC5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIHNhdmVJbkNsb3VkO1xuICAgIH1cblxuICAgIGlmIChzYXZlSW5DbG91ZC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIHNhdmVJbkNsb3VkO1xuICAgIH1cblxuICAgIGlmICghc2F2ZUluQ2xvdWQuc2F2ZUluQ2xvdWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGUgPSBhd2FpdCBncWxOb2RlVG9FeHRlcm5hbE5vZGVGdWxsKFxuICAgICAgc2F2ZUluQ2xvdWQuc2F2ZUluQ2xvdWQsXG4gICAgICB0aGlzLiNrZXlzXG4gICAgKTtcblxuICAgIGNvbnN0IG1lID0gbm9kZS5wYXJlbnQ/LnVzZXJzLmZpbmQoXG4gICAgICAoW3VdKSA9PiB1LnB1YmxpY0tleSA9PT0gdGhpcy4ja2V5cy5wdWJsaWNLZXlcbiAgICApO1xuXG4gICAgaWYgKG1lICYmIFtcImFkbWluXCIsIFwid3JpdGVcIl0uaW5jbHVkZXMobWVbMV0pKSB7XG4gICAgICBjb25zdCBvdGhlcnMgPVxuICAgICAgICBub2RlLnBhcmVudD8udXNlcnMuZmlsdGVyKFxuICAgICAgICAgIChbdV0pID0+IHUucHVibGljS2V5ICE9PSB0aGlzLiNrZXlzLnB1YmxpY0tleVxuICAgICAgICApID8/IFtdO1xuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgb3RoZXJzLm1hcCgoW3UsIHJpZ2h0c10pID0+XG4gICAgICAgICAgdGhpcy5zaGFyZU5vZGUoe1xuICAgICAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICAgICAgcmlnaHRzLFxuICAgICAgICAgICAgdXNlcklkOiB1LmlkXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IG5vZGVcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwZXJOb2RlID0gYXN5bmMgKFxuICAgIG5vZGVJZDogc3RyaW5nLFxuICAgIHB1YmxpY0tleTogc3RyaW5nXG4gICk6IFByb21pc2U8TmFtZUtleUlucHV0IHwgbnVsbD4gPT4ge1xuICAgIGxldCBub2RlID0gbm9kZXNDYWNoZS5nZXQobm9kZUlkKTtcblxuICAgIGlmICghbm9kZSkge1xuICAgICAgYXdhaXQgdGhpcy5ub2RlKHsgaWQ6IG5vZGVJZCB9KTtcbiAgICAgIG5vZGUgPSBub2Rlc0NhY2hlLmdldChub2RlSWQpO1xuXG4gICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZUtleSA9IG5vZGUuYWNjZXNzPy5uYW1lS2V5O1xuXG4gICAgaWYgKCFuYW1lS2V5KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IG5vZGUuaWQsXG4gICAgICBuYW1lS2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChuYW1lS2V5KSxcbiAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgIClcbiAgICAgICksXG4gICAgICBmaWxlczpcbiAgICAgICAgXCJoaXN0b3J5XCIgaW4gbm9kZVxuICAgICAgICAgID8gbm9kZS5oaXN0b3J5Lm1hcChmID0+ICh7XG4gICAgICAgICAgICAgIGlkOiBmLmlkLFxuICAgICAgICAgICAgICBrZXk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChmLmtleSksXG4gICAgICAgICAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIDogW11cbiAgICB9O1xuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBLE9BQU9BLEtBQVAsTUFBa0IsT0FBbEI7QUFDQSxPQUFPQyxFQUFQLE1BQWUs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
|
|
1627
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJheGlvcyIsImt5IiwiZW5jcnlwdE5hbWUiLCJub2Rlc0NhY2hlIiwiZmlsZXNDYWNoZSIsInNlY3JldHN0cmVhbUtleWdlbiIsImRlY3J5cHRDcnlwdG9Cb3giLCJlbmNyeXB0Q3J5cHRvQm94IiwiY29tcHJlc3MiLCJ1bmNvbXByZXNzIiwic29kaXVtIiwiZW51bWVyYXRlIiwiY2h1bmtzIiwicHJvbWlzZUFsbExpbWl0IiwiY29uY2F0ZW5hdGUiLCJtZDUiLCJkZWNyeXB0IiwiZW5jcnlwdCIsImdxbEZpbGVUb0V4dGVybmFsIiwiZ3FsTm9kZUZ1bGxUb0ludGVybmFsRnVsbCIsImdxbE5vZGVUb0V4dGVybmFsIiwiZ3FsTm9kZVRvRXh0ZXJuYWxOb2RlRnVsbCIsImludGVybmFsTm9kZVRvTm9kZSIsImZpbGVTZWxlY3RvciIsIm5vZGVGdWxsU2VsZWN0b3IiLCJub2RlU2VsZWN0b3IiLCJTZWNyZWN5Q2xvdWRDbGllbnQiLCJjb25zdHJ1Y3RvciIsImNsaWVudCIsImtleXMiLCJ0aHVuZGVyIiwicGVyTm9kZSIsIm5vZGVJZCIsInB1YmxpY0tleSIsIm5vZGUiLCJnZXQiLCJpZCIsIm5hbWVLZXkiLCJhY2Nlc3MiLCJ0b19oZXgiLCJmcm9tX2hleCIsInByaXZhdGVLZXkiLCJmaWxlcyIsImhpc3RvcnkiLCJtYXAiLCJmIiwia2V5IiwiYWRkRmlsZVRvSGlzdG9yeSIsImZpbGVJZCIsIl9fdHlwZW5hbWUiLCJtZXNzYWdlIiwiZmlsZSIsImZpbmQiLCJ1c2VycyIsImZpbHRlciIsInUiLCJpbnB1dCIsInNoYXJlRmlsZUluSGlzdG9yeSIsInJlc3VsdCIsImRhdGEiLCJ1cGxvYWRGaWxlIiwiZW5jcnlwdFByb2dyZXNzIiwidXBsb2FkUHJvZ3Jlc3MiLCJzaWduYWwiLCJmaWxlS2V5IiwiZmlsZUJ1ZmZlciIsIkZpbGUiLCJVaW50OEFycmF5IiwiYXJyYXlCdWZmZXIiLCJjb21wcmVzc2VkIiwiZW5jcnlwdGVkRmlsZSIsIm1kNUZpbGUiLCJtZDVFbmNyeXB0ZWQiLCJlbmNyeXB0ZWRGaWxlS2V5Iiwic2NhbGFycyIsIkpzb24iLCJlbmNvZGUiLCJlIiwiSlNPTiIsInN0cmluZ2lmeSIsImRlY29kZSIsInBhcnNlIiwiRGF0ZVRpbWUiLCJEYXRlIiwidG9JU09TdHJpbmciLCJCaWdJbnQiLCJ0b1N0cmluZyIsImZpbGVTaXplIiwiYnl0ZUxlbmd0aCIsImZpbGVTaXplQmVmb3JlIiwiZmlsZVBhcnRTaXplIiwicGFydHMiLCJmaWVsZHMiLCJvcmRlciIsInVybCIsInRvdGFsIiwiY3VycmVudCIsInBlcmNlbnQiLCJsZW5ndGgiLCJ1cGxvYWRQYXJ0RW5kZWQiLCJ1cGxvYWRGaWxlUGFydEVuZCIsInVwbG9hZEVuZGVkIiwidXBsb2FkRmlsZUVuZCIsImNodW5rUGFydHMiLCJBcnJheSIsImluZGV4IiwiY2h1bmsiLCJOdW1iZXIiLCJwdXNoIiwicHJvZ3Jlc3NQYXJ0cyIsIm9uUHJvZ3Jlc3MiLCJwYXJ0IiwicHJvZ3Jlc3NFdmVudCIsIk9iamVjdCIsInZhbHVlcyIsInJlZHVjZSIsInBydiIsImN1ciIsImxvYWRlZCIsImJ5UGFydCIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJwIiwidmFsdWUiLCJlbnRyaWVzIiwiYXBwZW5kIiwiQmxvYiIsInBvc3QiLCJvblVwbG9hZFByb2dyZXNzIiwidXBsb2FkRmlsZUluQ2xvdWQiLCJuYW1lIiwic2F2ZUluQ2xvdWQiLCJkZWxldGVkTm9kZXMiLCJub2RlcyIsInNoYXJlZE5vZGVzIiwiZm9sZGVyIiwibm9kZXNTaGFyZWRXaXRoTWUiLCJ0eXBlIiwiZGVsZXRlTm9kZVNoYXJpbmciLCJ1c2VySWQiLCJkdXBsaWNhdGVOb2RlIiwiZm9sZGVySWQiLCJjdXN0b21OYW1lIiwiRXJyb3IiLCJkZWxldGVOb2RlQ2xvdWRUcmFzaCIsImlkcyIsImNyZWF0ZUZvbGRlciIsInBhcmVudEZvbGRlcklkIiwiZW5jcnlwdGVkTmFtZSIsImVuY3J5cHRlZEtleSIsInBhcmVudCIsIlByb21pc2UiLCJhbGwiLCJyaWdodHMiLCJzaGFyZU5vZGUiLCJkZWxldGVkIiwiZmlsZU1ldGFkYXRhIiwidXNlciIsIndpdGhQdWJsaWNLZXkiLCJzaGFyZU5vZGVzIiwic2hhcmVOb2RlRmluaXNoIiwidXBkYXRlTm9kZSIsImlzRmF2b3JpdGUiLCJkZWxldGVkQXQiLCJmaWxlQ29udGVudCIsIm9uRG93bmxvYWRQcm9ncmVzcyIsInByb2dyZXNzRGVjcnlwdCIsIkJ5dGVzIiwiY29uc29sZSIsImxvZyIsImZyb20iLCJjb250ZW50VXJsIiwidG90YWxTaXplIiwiY29udGVudCIsIm1heWJlUGFydHMiLCJtYXliZUNvbnRlbnQiLCJzZW5kZXJQdWJsaWNLZXkiLCJ0cmFuc2ZlcnJlZEJ5dGVzIiwidG90YWxCeXRlcyIsImVuY3J5cHRlZENvbnRlbnRGcm9tUGFydHMiLCJmaWxlUGFydHMiLCJidWYiLCJ0aW1lb3V0IiwicHIiLCJtZDVQYXJ0Iiwic29ydCIsImEiLCJiIiwiZmluYWxpemUiLCJlbmNyeXB0ZWRDb250ZW50Iiwic3JjIiwibWQ1Q29udGVudCIsImRlbGV0ZUZpbGUiLCJkZWxldGVOb2RlIiwiZW1wdHlUcmFzaCIsImVtcHR5Q2xvdWRUcmFzaCIsInJlY292ZXJOb2RlIiwibW92ZU5vZGVzIiwibm9kZUlkcyIsInBhcmVudE5vZGVJZCIsImhhcyIsInJlY2VpdmVkTWFpbHMiLCJtYWlsIiwibSIsInNvbWUiLCJmaWxlTWFpbCIsInNlbmRlciIsImVuY3J5cHRlZE5hbWVLZXkiLCJmaWxlbmFtZSIsIm1lIiwiaW5jbHVkZXMiLCJvdGhlcnMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L1NlY3JlY3lDbG91ZENsaWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gKi9cbmltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCBreSBmcm9tIFwia3lcIjtcbmltcG9ydCB0eXBlIHtcbiAgRG93bmxvYWRQcm9ncmVzcyxcbiAgUHJvZ3Jlc3NDYWxsYmFjayxcbiAgU2VjcmVjeUNsaWVudCxcbiAgU3VjY2Vzc1Jlc3BvbnNlXG59IGZyb20gXCIuLi9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZW5jcnlwdE5hbWUgfSBmcm9tIFwiLi4vaW5kZXguanNcIjtcbmltcG9ydCB7IG5vZGVzQ2FjaGUsIGZpbGVzQ2FjaGUgfSBmcm9tIFwiLi4vY2FjaGUuanNcIjtcbmltcG9ydCB7IHNlY3JldHN0cmVhbUtleWdlbiB9IGZyb20gXCIuLi9jcnlwdG8vZmlsZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBLZXlQYWlyIH0gZnJvbSBcIi4uL2NyeXB0by9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZGVjcnlwdENyeXB0b0JveCB9IGZyb20gXCIuLi9jcnlwdG8vaW5kZXguanNcIjtcbmltcG9ydCB7IGVuY3J5cHRDcnlwdG9Cb3ggfSBmcm9tIFwiLi4vY3J5cHRvL2luZGV4LmpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEVycm9yQWNjZXNzRGVuaWVkLFxuICBFcnJvckJhc2ljLFxuICBFcnJvckxpbWl0LFxuICBFcnJvck5vdEV4aXN0LFxuICBFcnJvck5vdEZvdW5kXG59IGZyb20gXCIuLi9lcnJvci5qc1wiO1xuaW1wb3J0IHsgY29tcHJlc3MsIHVuY29tcHJlc3MgfSBmcm9tIFwiLi4vbWluaWZ5L2luZGV4LmpzXCI7XG5pbXBvcnQgeyBzb2RpdW0gfSBmcm9tIFwiLi4vc29kaXVtLmpzXCI7XG5pbXBvcnQge1xuICBlbnVtZXJhdGUsXG4gIGNodW5rcyxcbiAgcHJvbWlzZUFsbExpbWl0LFxuICBjb25jYXRlbmF0ZVxufSBmcm9tIFwiLi4vdXRpbHMvdXRpbHMuanNcIjtcbmltcG9ydCB7IG1kNSB9IGZyb20gXCIuLi93b3JrZXIvbWQ1LmpzXCI7XG5pbXBvcnQgeyBkZWNyeXB0LCBlbmNyeXB0IH0gZnJvbSBcIi4uL3dvcmtlci9zb2RpdW0uanNcIjtcbmltcG9ydCB0eXBlIHsgTm9kZVR5cGUsIFJpZ2h0cywgVGh1bmRlciB9IGZyb20gXCIuLi96ZXVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBncWxGaWxlVG9FeHRlcm5hbCB9IGZyb20gXCIuL2NvbnZlcnQvZmlsZS5qc1wiO1xuaW1wb3J0IHtcbiAgZ3FsTm9kZUZ1bGxUb0ludGVybmFsRnVsbCxcbiAgZ3FsTm9kZVRvRXh0ZXJuYWwsXG4gIGdxbE5vZGVUb0V4dGVybmFsTm9kZUZ1bGwsXG4gIGludGVybmFsTm9kZVRvTm9kZVxufSBmcm9tIFwiLi9jb252ZXJ0L25vZGUuanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgRmlsZUNvbnRlbnRQYXJ0LFxuICBGaWxlTWV0YWRhdGEsXG4gIEZpbGVQYXJ0UmVzcG9uc2UsXG4gIE5hbWVLZXlJbnB1dCxcbiAgTm9kZSxcbiAgTm9kZUZ1bGwsXG4gIFNoYXJlRmlsZUluSGlzdG9yeUlucHV0LFxuICBTaGFyZU5vZGVzSW5wdXRcbn0gZnJvbSBcIi4vdHlwZXMvaW5kZXguanNcIjtcbmltcG9ydCB7XG4gIGZpbGVTZWxlY3RvcixcbiAgbm9kZUZ1bGxTZWxlY3RvcixcbiAgbm9kZVNlbGVjdG9yXG59IGZyb20gXCIuL3R5cGVzL3NlbGVjdG9ycy5qc1wiO1xuLy8gaW1wb3J0IHsgbWQ1IH0gZnJvbSBcIi4uL3dvcmtlci9pbmRleC5qc1wiO1xuLy8gaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIG9mIH0gZnJvbSBcInJ4anNcIjtcblxuZXhwb3J0IGNsYXNzIFNlY3JlY3lDbG91ZENsaWVudCB7XG4gICNjbGllbnQ6IFNlY3JlY3lDbGllbnQ7XG5cbiAgI2tleXM6IEtleVBhaXI7XG5cbiAgI3RodW5kZXI6IFJldHVyblR5cGU8dHlwZW9mIFRodW5kZXI+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNsaWVudDogU2VjcmVjeUNsaWVudCxcbiAgICBrZXlzOiBLZXlQYWlyLFxuICAgIHRodW5kZXI6IFJldHVyblR5cGU8dHlwZW9mIFRodW5kZXI+XG4gICkge1xuICAgIHRoaXMuI2NsaWVudCA9IGNsaWVudDtcbiAgICB0aGlzLiNrZXlzID0ga2V5cztcbiAgICB0aGlzLiN0aHVuZGVyID0gdGh1bmRlcjtcbiAgfVxuXG4gIGFzeW5jIGFkZEZpbGVUb0hpc3Rvcnkoe1xuICAgIGZpbGVJZCxcbiAgICBub2RlSWRcbiAgfToge1xuICAgIGZpbGVJZDogc3RyaW5nO1xuICAgIG5vZGVJZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Tm9kZT4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yTm90RXhpc3QgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgYWRkRmlsZVRvSGlzdG9yeSB9ID0gYXdhaXQgdGhpcy4jdGh1bmRlcihcIm11dGF0aW9uXCIpKHtcbiAgICAgIGFkZEZpbGVUb0hpc3Rvcnk6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBub2RlSWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBBZGRGaWxlVG9IaXN0b3J5UmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGFkZEZpbGVUb0hpc3Rvcnk6IG5vZGVGdWxsU2VsZWN0b3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghYWRkRmlsZVRvSGlzdG9yeSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGFkZEZpbGVUb0hpc3RvcnkuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gYWRkRmlsZVRvSGlzdG9yeTtcbiAgICB9XG5cbiAgICBpZiAoYWRkRmlsZVRvSGlzdG9yeS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGFkZEZpbGVUb0hpc3Rvcnk7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZSA9IGF3YWl0IGdxbE5vZGVGdWxsVG9JbnRlcm5hbEZ1bGwoXG4gICAgICBhZGRGaWxlVG9IaXN0b3J5LmFkZEZpbGVUb0hpc3RvcnksXG4gICAgICB0aGlzLiNrZXlzXG4gICAgKTtcbiAgICBjb25zdCBmaWxlID0gbm9kZS5oaXN0b3J5LmZpbmQoZiA9PiBmLmlkID09PSBmaWxlSWQpO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICBjb25zdCB1c2VycyA9IG5vZGUudXNlcnMuZmlsdGVyKFxuICAgICAgICAoW3VdKSA9PiB1LnB1YmxpY0tleSAhPT0gdGhpcy4ja2V5cy5wdWJsaWNLZXlcbiAgICAgICk7XG4gICAgICBjb25zdCBpbnB1dDogU2hhcmVGaWxlSW5IaXN0b3J5SW5wdXQgPSB7XG4gICAgICAgIGZpbGVJZDogZmlsZS5pZCxcbiAgICAgICAgdXNlcnM6IHVzZXJzLm1hcCgoW3VdKSA9PiAoe1xuICAgICAgICAgIGlkOiB1LmlkLFxuICAgICAgICAgIGtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChmaWxlLmtleSksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIH0pKVxuICAgICAgfTtcblxuICAgICAgYXdhaXQgdGhpcy4jdGh1bmRlcihcIm11dGF0aW9uXCIpKHtcbiAgICAgICAgc2hhcmVGaWxlSW5IaXN0b3J5OiBbXG4gICAgICAgICAgeyBpbnB1dCwgbm9kZUlkIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCIuLi5vbiBTaGFyZUZpbGVJbkhpc3RvcnlSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIHNoYXJlRmlsZUluSGlzdG9yeTogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IGludGVybmFsTm9kZVRvTm9kZShub2RlKTtcbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHJlc3VsdFxuICAgIH07XG4gIH1cblxuICBhc3luYyB1cGxvYWRGaWxlKHtcbiAgICBmaWxlLFxuICAgIGVuY3J5cHRQcm9ncmVzcyxcbiAgICB1cGxvYWRQcm9ncmVzcyxcbiAgICBzaWduYWxcbiAgfToge1xuICAgIGZpbGU6IGdsb2JhbFRoaXMuRmlsZSB8IFVpbnQ4QXJyYXk7XG4gICAgZW5jcnlwdFByb2dyZXNzPzogUHJvZ3Jlc3NDYWxsYmFjaztcbiAgICB1cGxvYWRQcm9ncmVzcz86IFByb2dyZXNzQ2FsbGJhY2s7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPFxuICAgIHwgU3VjY2Vzc1Jlc3BvbnNlPHN0cmluZz5cbiAgICB8IEVycm9yQWNjZXNzRGVuaWVkXG4gICAgfCBFcnJvckxpbWl0XG4gICAgfCBFcnJvck5vdEZvdW5kXG4gICAgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IGZpbGVLZXkgPSBzZWNyZXRzdHJlYW1LZXlnZW4oKTtcbiAgICBjb25zdCBmaWxlQnVmZmVyID1cbiAgICAgIGZpbGUgaW5zdGFuY2VvZiBGaWxlID8gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgZmlsZS5hcnJheUJ1ZmZlcigpKSA6IGZpbGU7XG4gICAgY29uc3QgY29tcHJlc3NlZCA9IGNvbXByZXNzKGZpbGVCdWZmZXIpO1xuXG4gICAgY29uc3Qge1xuICAgICAgZGF0YTogZW5jcnlwdGVkRmlsZSxcbiAgICAgIG1kNTogbWQ1RmlsZSxcbiAgICAgIG1kNUVuY3J5cHRlZFxuICAgIH0gPSBhd2FpdCBlbmNyeXB0KGZpbGVLZXksIGNvbXByZXNzZWQsIGVuY3J5cHRQcm9ncmVzcywgc2lnbmFsKTtcblxuICAgIGNvbnN0IGVuY3J5cHRlZEZpbGVLZXkgPSBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgZmlsZUtleSxcbiAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgKTtcblxuICAgIGNvbnN0IHsgdXBsb2FkRmlsZSB9ID0gYXdhaXQgdGhpcy4jdGh1bmRlcihcIm11dGF0aW9uXCIsIHtcbiAgICAgIHNjYWxhcnM6IHtcbiAgICAgICAgSnNvbjoge1xuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IEpTT04uc3RyaW5naWZ5KGUpLFxuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IEpTT04ucGFyc2UoZSBhcyBzdHJpbmcpXG4gICAgICAgIH0sXG4gICAgICAgIERhdGVUaW1lOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gbmV3IERhdGUoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIERhdGUpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfSxcbiAgICAgICAgQmlnSW50OiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gQmlnSW50KGUgYXMgc3RyaW5nKSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBiaWdpbnQpLnRvU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKHtcbiAgICAgIHVwbG9hZEZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVTaXplOiBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICAgICAgZmlsZVNpemVCZWZvcmU6IGZpbGVCdWZmZXIuYnl0ZUxlbmd0aCxcbiAgICAgICAgICBmaWxlS2V5OiBzb2RpdW0udG9faGV4KGVuY3J5cHRlZEZpbGVLZXkpLFxuICAgICAgICAgIG1kNUVuY3J5cHRlZCxcbiAgICAgICAgICBtZDU6IG1kNUZpbGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JMaW1pdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFVwbG9hZEZpbGVSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdXBsb2FkRmlsZToge1xuICAgICAgICAgICAgICBmaWxlSWQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpbGVQYXJ0U2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgcGFydHM6IHtcbiAgICAgICAgICAgICAgICBmaWVsZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgb3JkZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgdXJsOiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXBsb2FkRmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVwbG9hZEZpbGUuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gdXBsb2FkRmlsZTtcbiAgICB9XG5cbiAgICBpZiAodXBsb2FkRmlsZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTGltaXRcIikge1xuICAgICAgcmV0dXJuIHVwbG9hZEZpbGU7XG4gICAgfVxuXG4gICAgaWYgKHVwbG9hZEZpbGUuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiB1cGxvYWRGaWxlO1xuICAgIH1cblxuICAgIGlmICghdXBsb2FkRmlsZS51cGxvYWRGaWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB1cGxvYWRQcm9ncmVzcz8uKHtcbiAgICAgIHRvdGFsOiBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICBjdXJyZW50OiAwLFxuICAgICAgcGVyY2VudDogMFxuICAgIH0pO1xuXG4gICAgaWYgKHVwbG9hZEZpbGUudXBsb2FkRmlsZS5wYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHVwbG9hZFByb2dyZXNzPy4oe1xuICAgICAgICB0b3RhbDogZW5jcnlwdGVkRmlsZS5ieXRlTGVuZ3RoLFxuICAgICAgICBjdXJyZW50OiBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICAgIHBlcmNlbnQ6IDFcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgICBkYXRhOiB1cGxvYWRGaWxlLnVwbG9hZEZpbGUuZmlsZUlkXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHVwbG9hZFBhcnRFbmRlZCA9IGFzeW5jIChcbiAgICAgIG1kNTogc3RyaW5nLFxuICAgICAgb3JkZXI6IG51bWJlclxuICAgICk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiA9PiB7XG4gICAgICBpZiAoIXVwbG9hZEZpbGUudXBsb2FkRmlsZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgdXBsb2FkRmlsZVBhcnRFbmQgfSA9IGF3YWl0IHRoaXMuI3RodW5kZXIoXCJtdXRhdGlvblwiKSh7XG4gICAgICAgIHVwbG9hZEZpbGVQYXJ0RW5kOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmlsZUlkOiB1cGxvYWRGaWxlLnVwbG9hZEZpbGUuZmlsZUlkLFxuICAgICAgICAgICAgbWQ1LFxuICAgICAgICAgICAgb3JkZXJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCIuLi5vbiBVcGxvYWRGaWxlUGFydEVuZFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgdXBsb2FkRmlsZVBhcnRFbmQ6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXVwbG9hZEZpbGVQYXJ0RW5kKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodXBsb2FkRmlsZVBhcnRFbmQuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICAgIHJldHVybiB1cGxvYWRGaWxlUGFydEVuZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgICAgZGF0YTogdXBsb2FkRmlsZVBhcnRFbmQudXBsb2FkRmlsZVBhcnRFbmRcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHVwbG9hZEVuZGVkID0gYXN5bmMgKCk6IFByb21pc2U8XG4gICAgICBTdWNjZXNzUmVzcG9uc2U8c3RyaW5nPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JOb3RGb3VuZCB8IG51bGxcbiAgICA+ID0+IHtcbiAgICAgIGlmICghdXBsb2FkRmlsZS51cGxvYWRGaWxlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgeyB1cGxvYWRGaWxlRW5kIH0gPSBhd2FpdCB0aGlzLiN0aHVuZGVyKFwibXV0YXRpb25cIikoe1xuICAgICAgICB1cGxvYWRGaWxlRW5kOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmlsZUlkOiB1cGxvYWRGaWxlLnVwbG9hZEZpbGUuZmlsZUlkXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIi4uLm9uIFVwbG9hZEZpbGVFbmRSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIHVwbG9hZEZpbGVFbmQ6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXVwbG9hZEZpbGVFbmQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh1cGxvYWRGaWxlRW5kLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgICByZXR1cm4gdXBsb2FkRmlsZUVuZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHVwbG9hZEZpbGVFbmQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgICAgcmV0dXJuIHVwbG9hZEZpbGVFbmQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghdXBsb2FkRmlsZUVuZC51cGxvYWRGaWxlRW5kKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgICBkYXRhOiB1cGxvYWRGaWxlRW5kLnVwbG9hZEZpbGVFbmRcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGNodW5rUGFydHMgPSBuZXcgQXJyYXk8e1xuICAgICAgb3JkZXI6IG51bWJlcjtcbiAgICAgIGRhdGE6IFVpbnQ4QXJyYXk7XG4gICAgICBtZDU6IHN0cmluZztcbiAgICB9PigpO1xuXG4gICAgZm9yIChjb25zdCBbaW5kZXgsIGNodW5rXSBvZiBlbnVtZXJhdGUoXG4gICAgICBjaHVua3MoZW5jcnlwdGVkRmlsZSwgTnVtYmVyKHVwbG9hZEZpbGUudXBsb2FkRmlsZS5maWxlUGFydFNpemUpKVxuICAgICkpIHtcbiAgICAgIGNodW5rUGFydHMucHVzaCh7XG4gICAgICAgIG9yZGVyOiBpbmRleCArIDEsXG4gICAgICAgIGRhdGE6IGNodW5rLFxuICAgICAgICBtZDU6IGF3YWl0IG1kNShjaHVuaylcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2dyZXNzUGFydHM6IFJlY29yZDxudW1iZXIsIFByb2dyZXNzRXZlbnQ+ID0ge307XG4gICAgY29uc3Qgb25Qcm9ncmVzcyA9IChwYXJ0OiBudW1iZXIsIHByb2dyZXNzRXZlbnQ6IFByb2dyZXNzRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIHByb2dyZXNzUGFydHNbcGFydF0gPSBwcm9ncmVzc0V2ZW50O1xuICAgICAgY29uc3QgY3VycmVudCA9IE9iamVjdC52YWx1ZXMocHJvZ3Jlc3NQYXJ0cykucmVkdWNlKFxuICAgICAgICAocHJ2LCBjdXIpID0+IHBydiArIGN1ci5sb2FkZWQsXG4gICAgICAgIDBcbiAgICAgICk7XG4gICAgICB1cGxvYWRQcm9ncmVzcz8uKHtcbiAgICAgICAgcGVyY2VudDogY3VycmVudCAvIGVuY3J5cHRlZEZpbGUuYnl0ZUxlbmd0aCxcbiAgICAgICAgdG90YWw6IGVuY3J5cHRlZEZpbGUuYnl0ZUxlbmd0aCxcbiAgICAgICAgY3VycmVudFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJ5UGFydCA9IGFzeW5jIChwYXJ0OiBGaWxlUGFydFJlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBpZiAoIXVwbG9hZEZpbGUudXBsb2FkRmlsZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgY29uc3QgY2h1bmsgPSBjaHVua1BhcnRzLmZpbmQocCA9PiBwLm9yZGVyID09PSBwYXJ0Lm9yZGVyKTtcbiAgICAgIGlmICghY2h1bmspIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFydC5maWVsZHMpKSB7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgXCJmaWxlXCIsXG4gICAgICAgIG5ldyBCbG9iKFtjaHVuay5kYXRhXSksXG4gICAgICAgIGAke3VwbG9hZEZpbGUudXBsb2FkRmlsZS5maWxlSWR9LSR7Y2h1bmsub3JkZXJ9YFxuICAgICAgKTtcblxuICAgICAgYXdhaXQgYXhpb3MucG9zdChwYXJ0LnVybCwgZm9ybURhdGEsIHtcbiAgICAgICAgb25VcGxvYWRQcm9ncmVzczogcHJvZ3Jlc3NFdmVudCA9PlxuICAgICAgICAgIG9uUHJvZ3Jlc3MocGFydC5vcmRlciwgcHJvZ3Jlc3NFdmVudCksXG4gICAgICAgIHNpZ25hbFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHVwbG9hZFBhcnRFbmRlZChjaHVuay5tZDUsIGNodW5rLm9yZGVyKTtcbiAgICAgIC8vIGlmICgoZSBhcyBhbnkpLnJlc3BvbnNlLnN0YXR1cyA9PT0gMCkge1xuICAgICAgLy8gICAvLyBUT0RPIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMva3kvaXNzdWVzLzMwNVxuICAgICAgLy8gfSBlbHNlIHtcbiAgICAgIC8vICAgdGhyb3cgZTtcbiAgICAgIC8vIH1cbiAgICB9O1xuXG4gICAgaWYgKCF1cGxvYWRGaWxlLnVwbG9hZEZpbGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGF3YWl0IHByb21pc2VBbGxMaW1pdChcbiAgICAgIDMsXG4gICAgICB1cGxvYWRGaWxlLnVwbG9hZEZpbGUucGFydHMubWFwKHAgPT4gKCk6IFByb21pc2U8dm9pZD4gPT4gYnlQYXJ0KHApKVxuICAgICk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB1cGxvYWRFbmRlZCgpO1xuXG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHQuZGF0YVxuICAgIH07XG4gIH1cblxuICBhc3luYyB1cGxvYWRGaWxlSW5DbG91ZCh7XG4gICAgZmlsZSxcbiAgICBuYW1lLFxuICAgIG5vZGVJZCxcbiAgICBlbmNyeXB0UHJvZ3Jlc3MsXG4gICAgdXBsb2FkUHJvZ3Jlc3MsXG4gICAgc2lnbmFsXG4gIH06IHtcbiAgICBmaWxlOiBnbG9iYWxUaGlzLkZpbGUgfCBVaW50OEFycmF5O1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBub2RlSWQ/OiBzdHJpbmc7XG4gICAgZW5jcnlwdFByb2dyZXNzPzogUHJvZ3Jlc3NDYWxsYmFjaztcbiAgICB1cGxvYWRQcm9ncmVzcz86IFByb2dyZXNzQ2FsbGJhY2s7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPFxuICAgIHwgU3VjY2Vzc1Jlc3BvbnNlPE5vZGVGdWxsPlxuICAgIHwgRXJyb3JBY2Nlc3NEZW5pZWRcbiAgICB8IEVycm9yTGltaXRcbiAgICB8IEVycm9yTm90Rm91bmRcbiAgICB8IEVycm9yQmFzaWNcbiAgICB8IEVycm9yTm90RXhpc3RcbiAgICB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgZmlsZUlkID0gYXdhaXQgdGhpcy51cGxvYWRGaWxlKHtcbiAgICAgIGZpbGUsXG4gICAgICBlbmNyeXB0UHJvZ3Jlc3MsXG4gICAgICB1cGxvYWRQcm9ncmVzcyxcbiAgICAgIHNpZ25hbFxuICAgIH0pO1xuXG4gICAgaWYgKCFmaWxlSWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChmaWxlSWQuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZmlsZUlkO1xuICAgIH1cblxuICAgIGlmIChmaWxlSWQuX190eXBlbmFtZSA9PT0gXCJFcnJvckxpbWl0XCIpIHtcbiAgICAgIHJldHVybiBmaWxlSWQ7XG4gICAgfVxuXG4gICAgaWYgKGZpbGVJZC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIGZpbGVJZDtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNhdmVJbkNsb3VkKHtcbiAgICAgIGZpbGVJZDogZmlsZUlkLmRhdGEsXG4gICAgICBuYW1lLFxuICAgICAgbm9kZUlkXG4gICAgfSk7XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JMaW1pdFwiKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZWROb2RlcygpOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxOb2RlW10+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgZGVsZXRlZE5vZGVzIH0gPSBhd2FpdCB0aGlzLiN0aHVuZGVyKFwicXVlcnlcIikoe1xuICAgICAgZGVsZXRlZE5vZGVzOiB7XG4gICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIERlbGV0ZWROb2Rlc1Jlc3BvbnNlXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIGRlbGV0ZWROb2Rlczogbm9kZVNlbGVjdG9yXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghZGVsZXRlZE5vZGVzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGVsZXRlZE5vZGVzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZWROb2RlcztcbiAgICB9XG5cbiAgICBjb25zdCBub2RlcyA9IG5ldyBBcnJheTxOb2RlPigpO1xuXG4gICAgZm9yIChjb25zdCBub2RlIG9mIGRlbGV0ZWROb2Rlcy5kZWxldGVkTm9kZXMpIHtcbiAgICAgIG5vZGVzLnB1c2goYXdhaXQgZ3FsTm9kZVRvRXh0ZXJuYWwobm9kZSwgdGhpcy4ja2V5cykpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogbm9kZXNcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgc2hhcmVkTm9kZXMoKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Tm9kZVtdPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IHNoYXJlZE5vZGVzIH0gPSBhd2FpdCB0aGlzLiN0aHVuZGVyKFwicXVlcnlcIikoe1xuICAgICAgc2hhcmVkTm9kZXM6IHtcbiAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gU2hhcmVkTm9kZXNSZXNwb25zZVwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBzaGFyZWROb2Rlczogbm9kZVNlbGVjdG9yXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghc2hhcmVkTm9kZXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChzaGFyZWROb2Rlcy5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBzaGFyZWROb2RlcztcbiAgICB9XG5cbiAgICBjb25zdCBub2RlcyA9IG5ldyBBcnJheTxOb2RlPigpO1xuXG4gICAgZm9yIChjb25zdCBmb2xkZXIgb2Ygc2hhcmVkTm9kZXMuc2hhcmVkTm9kZXMpIHtcbiAgICAgIG5vZGVzLnB1c2goYXdhaXQgZ3FsTm9kZVRvRXh0ZXJuYWwoZm9sZGVyLCB0aGlzLiNrZXlzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBub2Rlc1xuICAgIH07XG4gIH1cblxuICBhc3luYyBub2Rlc1NoYXJlZFdpdGhNZShcbiAgICB0eXBlPzogTm9kZVR5cGUgfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPE5vZGVbXT4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IG5vZGVzU2hhcmVkV2l0aE1lIH0gPSBhd2FpdCB0aGlzLiN0aHVuZGVyKFwicXVlcnlcIikoe1xuICAgICAgbm9kZXNTaGFyZWRXaXRoTWU6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gTm9kZXNTaGFyZWRXaXRoTWVSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbm9kZXNTaGFyZWRXaXRoTWU6IG5vZGVTZWxlY3RvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFub2Rlc1NoYXJlZFdpdGhNZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKG5vZGVzU2hhcmVkV2l0aE1lLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIG5vZGVzU2hhcmVkV2l0aE1lO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGVzID0gbmV3IEFycmF5PE5vZGU+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGZvbGRlciBvZiBub2Rlc1NoYXJlZFdpdGhNZS5ub2Rlc1NoYXJlZFdpdGhNZSkge1xuICAgICAgbm9kZXMucHVzaChhd2FpdCBncWxOb2RlVG9FeHRlcm5hbChmb2xkZXIsIHRoaXMuI2tleXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IG5vZGVzXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZU5vZGVTaGFyaW5nKHtcbiAgICBub2RlSWQsXG4gICAgdXNlcklkXG4gIH06IHtcbiAgICBub2RlSWQ6IHN0cmluZztcbiAgICB1c2VySWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBkZWxldGVOb2RlU2hhcmluZyB9ID0gYXdhaXQgdGhpcy4jdGh1bmRlcihcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZU5vZGVTaGFyaW5nOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBub2RlSWQsXG4gICAgICAgICAgdXNlcklkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERlbGV0ZU5vZGVTaGFyaW5nUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGRlbGV0ZU5vZGVTaGFyaW5nOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRlbGV0ZU5vZGVTaGFyaW5nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGVsZXRlTm9kZVNoYXJpbmcuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGVsZXRlTm9kZVNoYXJpbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkZWxldGVOb2RlU2hhcmluZy5kZWxldGVOb2RlU2hhcmluZ1xuICAgIH07XG4gIH1cblxuICBhc3luYyBkdXBsaWNhdGVOb2RlKHtcbiAgICBub2RlSWQsXG4gICAgZm9sZGVySWQsXG4gICAgY3VzdG9tTmFtZVxuICB9OiB7XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gICAgZm9sZGVySWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGN1c3RvbU5hbWU/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yTm90Rm91bmQgfCBudWxsXG4gID4ge1xuICAgIGxldCBub2RlID0gbm9kZXNDYWNoZS5nZXQobm9kZUlkKTtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIGF3YWl0IHRoaXMubm9kZSh7IGlkOiBub2RlSWQgfSk7XG4gICAgICBub2RlID0gbm9kZXNDYWNoZS5nZXQobm9kZUlkKTtcbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vZGUgKCR7bm9kZUlkfSkgZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghbm9kZS5hY2Nlc3M/Lm5hbWVLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgaGF2ZSBhY2Nlc3MgdG8gbm9kZSAke25vZGVJZH1gKTtcbiAgICB9XG4gICAgY3VzdG9tTmFtZSA9IGN1c3RvbU5hbWVcbiAgICAgID8gYXdhaXQgZW5jcnlwdE5hbWUoY3VzdG9tTmFtZSwgbm9kZS5hY2Nlc3MubmFtZUtleSlcbiAgICAgIDogbnVsbDtcblxuICAgIGNvbnN0IHsgZHVwbGljYXRlTm9kZSB9ID0gYXdhaXQgdGhpcy4jdGh1bmRlcihcIm11dGF0aW9uXCIpKHtcbiAgICAgIGR1cGxpY2F0ZU5vZGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5vZGVJZCxcbiAgICAgICAgICBmb2xkZXJJZCxcbiAgICAgICAgICBjdXN0b21OYW1lXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRHVwbGljYXRlTm9kZVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBkdXBsaWNhdGVOb2RlOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWR1cGxpY2F0ZU5vZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkdXBsaWNhdGVOb2RlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGR1cGxpY2F0ZU5vZGU7XG4gICAgfVxuXG4gICAgaWYgKGR1cGxpY2F0ZU5vZGUuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBkdXBsaWNhdGVOb2RlO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZHVwbGljYXRlTm9kZS5kdXBsaWNhdGVOb2RlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZU5vZGVDbG91ZFRyYXNoKHtcbiAgICBpZHNcbiAgfToge1xuICAgIGlkczogQXJyYXk8c3RyaW5nPjtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBkZWxldGVOb2RlQ2xvdWRUcmFzaCB9ID0gYXdhaXQgdGhpcy4jdGh1bmRlcihcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZU5vZGVDbG91ZFRyYXNoOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZHNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGVsZXRlTm9kZUNsb3VkVHJhc2hSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZGVsZXRlTm9kZUNsb3VkVHJhc2g6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGVsZXRlTm9kZUNsb3VkVHJhc2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkZWxldGVOb2RlQ2xvdWRUcmFzaC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkZWxldGVOb2RlQ2xvdWRUcmFzaDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRlbGV0ZU5vZGVDbG91ZFRyYXNoLmRlbGV0ZU5vZGVDbG91ZFRyYXNoID8/IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUZvbGRlcih7XG4gICAgbmFtZSxcbiAgICBwYXJlbnRGb2xkZXJJZFxuICB9OiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHBhcmVudEZvbGRlcklkPzogc3RyaW5nIHwgbnVsbDtcbiAgfSk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPE5vZGVGdWxsPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JOb3RFeGlzdCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3Qga2V5ID0gc2VjcmV0c3RyZWFtS2V5Z2VuKCk7XG4gICAgY29uc3QgZW5jcnlwdGVkTmFtZSA9IGF3YWl0IGVuY3J5cHROYW1lKG5hbWUsIHNvZGl1bS50b19oZXgoa2V5KSk7XG4gICAgY29uc3QgZW5jcnlwdGVkS2V5ID0gZW5jcnlwdENyeXB0b0JveChcbiAgICAgIGtleSxcbiAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgKTtcbiAgICBjb25zdCB7IGNyZWF0ZUZvbGRlciB9ID0gYXdhaXQgdGhpcy4jdGh1bmRlcihcIm11dGF0aW9uXCIpKHtcbiAgICAgIGNyZWF0ZUZvbGRlcjogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogZW5jcnlwdGVkTmFtZSxcbiAgICAgICAgICBwYXJlbnRGb2xkZXJJZCxcbiAgICAgICAgICBrZXk6IHNvZGl1bS50b19oZXgoZW5jcnlwdGVkS2V5KVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEV4aXN0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIENyZWF0ZUZvbGRlclJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBjcmVhdGVGb2xkZXI6IG5vZGVGdWxsU2VsZWN0b3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcbiAgICBpZiAoIWNyZWF0ZUZvbGRlcikge1xuICAgICAgLy90aHJvdyBuZXcgRXJyb3IoYENhbid0IGNyZWF0ZSBmb2xkZXJgKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChjcmVhdGVGb2xkZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gY3JlYXRlRm9sZGVyO1xuICAgIH1cblxuICAgIGlmIChjcmVhdGVGb2xkZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEV4aXN0XCIpIHtcbiAgICAgIHJldHVybiBjcmVhdGVGb2xkZXI7XG4gICAgfVxuXG4gICAgaWYgKCFjcmVhdGVGb2xkZXIuY3JlYXRlRm9sZGVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBmb2xkZXIgPSBhd2FpdCBncWxOb2RlVG9FeHRlcm5hbE5vZGVGdWxsKFxuICAgICAgY3JlYXRlRm9sZGVyLmNyZWF0ZUZvbGRlcixcbiAgICAgIHRoaXMuI2tleXNcbiAgICApO1xuXG4gICAgY29uc3QgdXNlcnMgPVxuICAgICAgZm9sZGVyLnBhcmVudD8udXNlcnM/LmZpbHRlcihcbiAgICAgICAgKFt1XSkgPT4gdS5wdWJsaWNLZXkgIT09IHRoaXMuI2tleXMucHVibGljS2V5XG4gICAgICApID8/IFtdO1xuXG4gICAgaWYgKHVzZXJzLmxlbmd0aCkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHVzZXJzLm1hcCgoW3UsIHJpZ2h0c10pID0+XG4gICAgICAgICAgdGhpcy5zaGFyZU5vZGUoe1xuICAgICAgICAgICAgbm9kZUlkOiBmb2xkZXIuaWQsXG4gICAgICAgICAgICByaWdodHMsXG4gICAgICAgICAgICB1c2VySWQ6IHUuaWRcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZm9sZGVyXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIG5vZGUoe1xuICAgIGlkLFxuICAgIGRlbGV0ZWRcbiAgfToge1xuICAgIGlkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBkZWxldGVkPzogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0gPSB7fSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPE5vZGVGdWxsPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgbm9kZSB9ID0gYXdhaXQgdGhpcy4jdGh1bmRlcihcInF1ZXJ5XCIpKHtcbiAgICAgIG5vZGU6IFtcbiAgICAgICAgeyBkZWxldGVkLCBpZCB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBOb2RlUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG5vZGU6IG5vZGVGdWxsU2VsZWN0b3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChub2RlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIGlmICghbm9kZS5ub2RlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBncWxOb2RlVG9FeHRlcm5hbE5vZGVGdWxsKG5vZGUubm9kZSwgdGhpcy4ja2V5cyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZmlsZU1ldGFkYXRhKHtcbiAgICBpZFxuICB9OiB7XG4gICAgaWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPEZpbGVNZXRhZGF0YT4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IGZpbGUgfSA9IGF3YWl0IHRoaXMuI3RodW5kZXIoXCJxdWVyeVwiKSh7XG4gICAgICBmaWxlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBGaWxlUXVlcnlSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZmlsZTogZmlsZVNlbGVjdG9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZmlsZS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBmaWxlO1xuICAgIH1cblxuICAgIGlmICghZmlsZS5maWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBncWxGaWxlVG9FeHRlcm5hbChmaWxlLmZpbGUsIHRoaXMuI2tleXMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgc2hhcmVOb2RlKHtcbiAgICBub2RlSWQsXG4gICAgdXNlcklkLFxuICAgIHJpZ2h0c1xuICB9OiB7XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gICAgdXNlcklkOiBzdHJpbmc7XG4gICAgcmlnaHRzOiBSaWdodHM7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JOb3RGb3VuZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgdXNlciA9IGF3YWl0IHRoaXMuI2NsaWVudC51c2VyKHsgdXNlcklkLCB3aXRoUHVibGljS2V5OiB0cnVlIH0pO1xuXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICByZXR1cm4gdXNlcjtcbiAgICB9XG5cbiAgICBpZiAodXNlci5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgY29uc3QgeyBzaGFyZU5vZGUgfSA9IGF3YWl0IHRoaXMuI3RodW5kZXIoXCJtdXRhdGlvblwiKSh7XG4gICAgICBzaGFyZU5vZGU6IFtcbiAgICAgICAgeyBub2RlSWQsIHVzZXJJZCB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFNoYXJlTm9kZVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBub2RlczogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFzaGFyZU5vZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChzaGFyZU5vZGUuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gc2hhcmVOb2RlO1xuICAgIH1cblxuICAgIGlmIChzaGFyZU5vZGUuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBzaGFyZU5vZGU7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hhcmVOb2RlczogU2hhcmVOb2Rlc0lucHV0ID0ge1xuICAgICAgbm9kZXM6IFtdXG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgaWQgb2Ygc2hhcmVOb2RlLm5vZGVzKSB7XG4gICAgICBjb25zdCBuYW1lS2V5ID0gYXdhaXQgdGhpcy5wZXJOb2RlKGlkLCB1c2VyLmRhdGEucHVibGljS2V5KTtcbiAgICAgIGlmIChuYW1lS2V5KSB7XG4gICAgICAgIHNoYXJlTm9kZXMubm9kZXMucHVzaChuYW1lS2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7IHNoYXJlTm9kZUZpbmlzaCB9ID0gYXdhaXQgdGhpcy4jdGh1bmRlcihcIm11dGF0aW9uXCIpKHtcbiAgICAgIHNoYXJlTm9kZUZpbmlzaDogW1xuICAgICAgICB7XG4gICAgICAgICAgcmlnaHRzLFxuICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICBzaGFyZU5vZGVzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gU2hhcmVOb2RlRmluaXNoUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHNoYXJlTm9kZUZpbmlzaDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFzaGFyZU5vZGVGaW5pc2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChzaGFyZU5vZGVGaW5pc2guX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gc2hhcmVOb2RlRmluaXNoO1xuICAgIH1cblxuICAgIGlmIChzaGFyZU5vZGVGaW5pc2guX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBzaGFyZU5vZGVGaW5pc2g7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBzaGFyZU5vZGVGaW5pc2guc2hhcmVOb2RlRmluaXNoID8/IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZU5vZGUoe1xuICAgIG5vZGVJZCxcbiAgICBuYW1lLFxuICAgIGlzRmF2b3JpdGUsXG4gICAgZGVsZXRlZEF0XG4gIH06IHtcbiAgICBub2RlSWQ6IHN0cmluZztcbiAgICBuYW1lPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBpc0Zhdm9yaXRlPzogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgZGVsZXRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxOb2RlRnVsbD4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yTm90RXhpc3QgfCBudWxsXG4gID4ge1xuICAgIGxldCBub2RlID0gbm9kZXNDYWNoZS5nZXQobm9kZUlkKTtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIGF3YWl0IHRoaXMubm9kZSh7IGlkOiBub2RlSWQgfSk7XG4gICAgICBub2RlID0gbm9kZXNDYWNoZS5nZXQobm9kZUlkKTtcbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICB0aHJvdyBgQ2FuJ3QgZmluZCBOb2RlICR7bm9kZUlkfWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFub2RlLmFjY2Vzcz8ubmFtZUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBoYXZlIGFjY2VzcyB0byBub2RlICR7bm9kZUlkfWApO1xuICAgIH1cblxuICAgIG5hbWUgPSBuYW1lXG4gICAgICA/IG5vZGUuYWNjZXNzPy5uYW1lS2V5XG4gICAgICAgID8gYXdhaXQgZW5jcnlwdE5hbWUobmFtZSwgbm9kZS5hY2Nlc3MubmFtZUtleSlcbiAgICAgICAgOiBuYW1lXG4gICAgICA6IG51bGw7XG5cbiAgICBjb25zdCB7IHVwZGF0ZU5vZGUgfSA9IGF3YWl0IHRoaXMuI3RodW5kZXIoXCJtdXRhdGlvblwiKSh7XG4gICAgICB1cGRhdGVOb2RlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBub2RlSWQsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBpc0Zhdm9yaXRlLFxuICAgICAgICAgIGRlbGV0ZWRBdFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEV4aXN0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFVwZGF0ZU5vZGVSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdXBkYXRlTm9kZTogbm9kZUZ1bGxTZWxlY3RvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGRhdGVOb2RlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlTm9kZS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiB1cGRhdGVOb2RlO1xuICAgIH1cblxuICAgIGlmICh1cGRhdGVOb2RlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RFeGlzdFwiKSB7XG4gICAgICByZXR1cm4gdXBkYXRlTm9kZTtcbiAgICB9XG5cbiAgICBpZiAoIXVwZGF0ZU5vZGUudXBkYXRlTm9kZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ3FsTm9kZVRvRXh0ZXJuYWxOb2RlRnVsbChcbiAgICAgIHVwZGF0ZU5vZGUudXBkYXRlTm9kZSxcbiAgICAgIHRoaXMuI2tleXNcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZmlsZUNvbnRlbnQoe1xuICAgIGZpbGVJZCxcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3MsXG4gICAgcHJvZ3Jlc3NEZWNyeXB0LFxuICAgIHNpZ25hbFxuICB9OiB7XG4gICAgZmlsZUlkOiBzdHJpbmc7XG4gICAgb25Eb3dubG9hZFByb2dyZXNzPzogKHByb2dyZXNzOiBEb3dubG9hZFByb2dyZXNzKSA9PiB2b2lkO1xuICAgIHByb2dyZXNzRGVjcnlwdD86IFByb2dyZXNzQ2FsbGJhY2s7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxVaW50OEFycmF5PiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JCYXNpYyB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBmaWxlQ29udGVudCB9ID0gYXdhaXQgdGhpcy4jdGh1bmRlcihcInF1ZXJ5XCIsIHtcbiAgICAgIHNjYWxhcnM6IHtcbiAgICAgICAgQnl0ZXM6IHtcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlLCB0eXBlb2YgZSk7XG4gICAgICAgICAgICByZXR1cm4gVWludDhBcnJheS5mcm9tKFsxLCAyLCAzXSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBVaW50OEFycmF5KS50b1N0cmluZygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSh7XG4gICAgICBmaWxlQ29udGVudDogW1xuICAgICAgICB7IGZpbGVJZCB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvckJhc2ljXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEZpbGVDb250ZW50UmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGZpbGU6IHtcbiAgICAgICAgICAgICAgXCIuLi5vbiBGaWxlQ29udGVudENsb3VkXCI6IHtcbiAgICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgIHBhcnRzOiB7XG4gICAgICAgICAgICAgICAgICBjb250ZW50VXJsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgb3JkZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgICBtZDU6IHRydWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGtleTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwdWJsaWNLZXk6IHRydWUsXG4gICAgICAgICAgICAgICAgdG90YWxTaXplOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1kNTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtZDVFbmNyeXB0ZWQ6IHRydWVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXCIuLi5vbiBGaWxlQ29udGVudExpdGVcIjoge1xuICAgICAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgY29udGVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBrZXk6IHRydWUsXG4gICAgICAgICAgICAgICAgcHVibGljS2V5OiB0cnVlLFxuICAgICAgICAgICAgICAgIG1kNTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtZDVFbmNyeXB0ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgdG90YWxTaXplOiB0cnVlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFwiLi4ub24gRmlsZUNvbnRlbnRSZWNlaXZlZE1haWxcIjoge1xuICAgICAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgbWF5YmVQYXJ0czoge1xuICAgICAgICAgICAgICAgICAgY29udGVudFVybDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIG9yZGVyOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgbWQ1OiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtYXliZUNvbnRlbnQ6IHRydWUsXG4gICAgICAgICAgICAgICAga2V5OiB0cnVlLFxuICAgICAgICAgICAgICAgIHNlbmRlclB1YmxpY0tleTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0b3RhbFNpemU6IHRydWUsXG4gICAgICAgICAgICAgICAgbWQ1OiB0cnVlLFxuICAgICAgICAgICAgICAgIG1kNUVuY3J5cHRlZDogdHJ1ZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBcIi4uLm9uIEZpbGVDb250ZW50U2VudE1haWxcIjoge1xuICAgICAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgbWF5YmVQYXJ0czoge1xuICAgICAgICAgICAgICAgICAgY29udGVudFVybDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIG9yZGVyOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgbWQ1OiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtYXliZUNvbnRlbnQ6IHRydWUsXG4gICAgICAgICAgICAgICAga2V5OiB0cnVlLFxuICAgICAgICAgICAgICAgIHRvdGFsU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtZDU6IHRydWUsXG4gICAgICAgICAgICAgICAgbWQ1RW5jcnlwdGVkOiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZmlsZUNvbnRlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChmaWxlQ29udGVudC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBmaWxlQ29udGVudDtcbiAgICB9XG5cbiAgICBpZiAoZmlsZUNvbnRlbnQuX190eXBlbmFtZSA9PT0gXCJFcnJvckJhc2ljXCIpIHtcbiAgICAgIHJldHVybiBmaWxlQ29udGVudDtcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlID0gZmlsZUNvbnRlbnQuZmlsZTtcbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2dyZXNzUGFydHM6IFJlY29yZDxudW1iZXIsIERvd25sb2FkUHJvZ3Jlc3M+ID0ge307XG4gICAgY29uc3Qgb25Qcm9ncmVzcyA9IChcbiAgICAgIHBhcnQ6IG51bWJlcixcbiAgICAgIHByb2dyZXNzRXZlbnQ6IERvd25sb2FkUHJvZ3Jlc3NcbiAgICApOiB2b2lkID0+IHtcbiAgICAgIHByb2dyZXNzUGFydHNbcGFydF0gPSBwcm9ncmVzc0V2ZW50O1xuICAgICAgY29uc3QgdHJhbnNmZXJyZWRCeXRlcyA9IE9iamVjdC52YWx1ZXMocHJvZ3Jlc3NQYXJ0cykucmVkdWNlKFxuICAgICAgICAocHJ2LCBjdXIpID0+IHBydiArIGN1ci50cmFuc2ZlcnJlZEJ5dGVzLFxuICAgICAgICAwXG4gICAgICApO1xuICAgICAgY29uc3QgdG90YWxCeXRlcyA9IE51bWJlcihmaWxlLnRvdGFsU2l6ZSk7XG4gICAgICBvbkRvd25sb2FkUHJvZ3Jlc3M/Lih7XG4gICAgICAgIHBlcmNlbnQ6IHRyYW5zZmVycmVkQnl0ZXMgLyB0b3RhbEJ5dGVzLFxuICAgICAgICB0b3RhbEJ5dGVzLFxuICAgICAgICB0cmFuc2ZlcnJlZEJ5dGVzXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZW5jcnlwdGVkQ29udGVudEZyb21QYXJ0cyA9IGFzeW5jIChcbiAgICAgIGZpbGVQYXJ0czogRmlsZUNvbnRlbnRQYXJ0W11cbiAgICApOiBQcm9taXNlPFVpbnQ4QXJyYXk+ID0+IHtcbiAgICAgIGNvbnN0IHBhcnRzID0gbmV3IEFycmF5PHsgZGF0YTogVWludDhBcnJheTsgb3JkZXI6IG51bWJlciB9PigpO1xuXG4gICAgICBjb25zdCBieVBhcnQgPSBhc3luYyAocGFydDogRmlsZUNvbnRlbnRQYXJ0KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IG5ldyBVaW50OEFycmF5KFxuICAgICAgICAgIGF3YWl0IGt5XG4gICAgICAgICAgICAuZ2V0KHBhcnQuY29udGVudFVybCwge1xuICAgICAgICAgICAgICB0aW1lb3V0OiBmYWxzZSxcbiAgICAgICAgICAgICAgb25Eb3dubG9hZFByb2dyZXNzOiBwciA9PiBvblByb2dyZXNzKHBhcnQub3JkZXIsIHByKSxcbiAgICAgICAgICAgICAgc2lnbmFsOiBzaWduYWxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXJyYXlCdWZmZXIoKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBtZDVQYXJ0ID0gYXdhaXQgbWQ1KGJ1Zik7XG4gICAgICAgIGlmIChtZDVQYXJ0ICE9PSBwYXJ0Lm1kNSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBJbnZhbGlkIG1kNSBmb3IgcGFydCAke3BhcnQub3JkZXJ9IG9mIGZpbGUgJHtmaWxlSWR9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcGFydHMucHVzaCh7XG4gICAgICAgICAgZGF0YTogYnVmLFxuICAgICAgICAgIG9yZGVyOiBwYXJ0Lm9yZGVyXG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgYXdhaXQgcHJvbWlzZUFsbExpbWl0KFxuICAgICAgICAzLFxuICAgICAgICBmaWxlUGFydHMubWFwKHAgPT4gKCk6IFByb21pc2U8dm9pZD4gPT4gYnlQYXJ0KHApKVxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIGNvbmNhdGVuYXRlKFxuICAgICAgICAuLi5wYXJ0cy5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIC0gYi5vcmRlcikubWFwKHAgPT4gcC5kYXRhKVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmluYWxpemUgPSBhc3luYyAoXG4gICAgICBlbmNyeXB0ZWRDb250ZW50OiBVaW50OEFycmF5XG4gICAgKTogUHJvbWlzZTxVaW50OEFycmF5PiA9PiB7XG4gICAgICAvLyBjb25zdCBtZDVFbmNyeXB0ZWQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShtZDUob2YoZW5jcnlwdGVkQ29udGVudCkpKTtcbiAgICAgIGNvbnN0IG1kNUVuY3J5cHRlZCA9IGF3YWl0IG1kNShlbmNyeXB0ZWRDb250ZW50KTtcblxuICAgICAgaWYgKG1kNUVuY3J5cHRlZCAhPT0gZmlsZS5tZDVFbmNyeXB0ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbmNyeXB0ZWQgY29udGVudCBkb2VzIG5vdCBtYXRjaGApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXkgPSBkZWNyeXB0Q3J5cHRvQm94KFxuICAgICAgICBzb2RpdW0uZnJvbV9oZXgoZmlsZS5rZXkpLFxuICAgICAgICBmaWxlLl9fdHlwZW5hbWUgPT09IFwiRmlsZUNvbnRlbnRSZWNlaXZlZE1haWxcIlxuICAgICAgICAgID8gZmlsZS5zZW5kZXJQdWJsaWNLZXlcbiAgICAgICAgICA6IGZpbGUuX190eXBlbmFtZSA9PT0gXCJGaWxlQ29udGVudENsb3VkXCJcbiAgICAgICAgICA/IGZpbGUucHVibGljS2V5XG4gICAgICAgICAgOiB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICApO1xuXG4gICAgICBjb25zdCBzcmMgPSBhd2FpdCBkZWNyeXB0KGtleSwgZW5jcnlwdGVkQ29udGVudCwgcHJvZ3Jlc3NEZWNyeXB0LCBzaWduYWwpO1xuXG4gICAgICAvLyBjb25zdCBtZDVDb250ZW50ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20obWQ1KG9mKHNyYykpKTtcbiAgICAgIGNvbnN0IG1kNUNvbnRlbnQgPSBhd2FpdCBtZDUoc3JjKTtcblxuICAgICAgaWYgKG1kNUNvbnRlbnQgIT09IGZpbGUubWQ1KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29udGVudCBkb2VzIG5vdCBtYXRjaGApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdW5jb21wcmVzcyhzcmMpO1xuICAgIH07XG5cbiAgICBjb25zdCBlbmNyeXB0ZWRDb250ZW50ID1cbiAgICAgIGZpbGUuX190eXBlbmFtZSA9PT0gXCJGaWxlQ29udGVudExpdGVcIlxuICAgICAgICA/IGZpbGUuY29udGVudFxuICAgICAgICA6IGZpbGUuX190eXBlbmFtZSA9PT0gXCJGaWxlQ29udGVudENsb3VkXCJcbiAgICAgICAgPyBhd2FpdCBlbmNyeXB0ZWRDb250ZW50RnJvbVBhcnRzKGZpbGUucGFydHMpXG4gICAgICAgIDogZmlsZS5tYXliZUNvbnRlbnRcbiAgICAgICAgPyBmaWxlLm1heWJlQ29udGVudFxuICAgICAgICA6IGZpbGUubWF5YmVQYXJ0c1xuICAgICAgICA/IGF3YWl0IGVuY3J5cHRlZENvbnRlbnRGcm9tUGFydHMoZmlsZS5tYXliZVBhcnRzKVxuICAgICAgICA6IG51bGw7XG5cbiAgICBpZiAoIWVuY3J5cHRlZENvbnRlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogYXdhaXQgZmluYWxpemUoZW5jcnlwdGVkQ29udGVudClcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRmlsZSh7XG4gICAgZmlsZUlkLFxuICAgIG5vZGVJZFxuICB9OiB7XG4gICAgZmlsZUlkOiBzdHJpbmc7XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JOb3RFeGlzdCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBkZWxldGVGaWxlIH0gPSBhd2FpdCB0aGlzLiN0aHVuZGVyKFwibXV0YXRpb25cIikoe1xuICAgICAgZGVsZXRlRmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIG5vZGVJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEV4aXN0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERlbGV0ZUZpbGVSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZGVsZXRlRmlsZTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkZWxldGVGaWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGVsZXRlRmlsZS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkZWxldGVGaWxlO1xuICAgIH1cblxuICAgIGlmIChkZWxldGVGaWxlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RFeGlzdFwiKSB7XG4gICAgICByZXR1cm4gZGVsZXRlRmlsZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRlbGV0ZUZpbGUuZGVsZXRlRmlsZVxuICAgIH07XG4gIH1cblxuICBhc3luYyBkZWxldGVOb2RlKHtcbiAgICBub2RlSWRcbiAgfToge1xuICAgIG5vZGVJZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IGRlbGV0ZU5vZGUgfSA9IGF3YWl0IHRoaXMuI3RodW5kZXIoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkZWxldGVOb2RlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogbm9kZUlkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERlbGV0ZU5vZGVSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZGVsZXRlTm9kZTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkZWxldGVOb2RlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGVsZXRlTm9kZS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkZWxldGVOb2RlO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGVsZXRlTm9kZS5kZWxldGVOb2RlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGVtcHR5VHJhc2goKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBlbXB0eUNsb3VkVHJhc2ggfSA9IGF3YWl0IHRoaXMuI3RodW5kZXIoXCJtdXRhdGlvblwiKSh7XG4gICAgICBlbXB0eUNsb3VkVHJhc2g6IHtcbiAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gRW1wdHlDbG91ZFRyYXNoUmVzcG9uc2VcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgZW1wdHlDbG91ZFRyYXNoOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghZW1wdHlDbG91ZFRyYXNoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZW1wdHlDbG91ZFRyYXNoLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGVtcHR5Q2xvdWRUcmFzaDtcbiAgICB9XG5cbiAgICBpZiAoIWVtcHR5Q2xvdWRUcmFzaC5lbXB0eUNsb3VkVHJhc2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZW1wdHlDbG91ZFRyYXNoLmVtcHR5Q2xvdWRUcmFzaFxuICAgIH07XG4gIH1cblxuICBhc3luYyByZWNvdmVyTm9kZShcbiAgICBpZDogc3RyaW5nXG4gICk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBFcnJvck5vdEV4aXN0IHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IHJlY292ZXJOb2RlIH0gPSBhd2FpdCB0aGlzLiN0aHVuZGVyKFwibXV0YXRpb25cIikoe1xuICAgICAgcmVjb3Zlck5vZGU6IFtcbiAgICAgICAgeyBpZCB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEV4aXN0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFJlY292ZXJOb2RlUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHJlY292ZXJOb2RlOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXJlY292ZXJOb2RlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAocmVjb3Zlck5vZGUuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gcmVjb3Zlck5vZGU7XG4gICAgfVxuXG4gICAgaWYgKHJlY292ZXJOb2RlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RFeGlzdFwiKSB7XG4gICAgICByZXR1cm4gcmVjb3Zlck5vZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZWNvdmVyTm9kZS5yZWNvdmVyTm9kZSA/PyBmYWxzZVxuICAgIH07XG4gIH1cblxuICBhc3luYyBtb3ZlTm9kZXMoe1xuICAgIG5vZGVJZHMsXG4gICAgcGFyZW50Tm9kZUlkXG4gIH06IHtcbiAgICBub2RlSWRzOiBzdHJpbmdbXTtcbiAgICBwYXJlbnROb2RlSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IG1vdmVOb2RlcyB9ID0gYXdhaXQgdGhpcy4jdGh1bmRlcihcIm11dGF0aW9uXCIpKHtcbiAgICAgIG1vdmVOb2RlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbm9kZUlkcyxcbiAgICAgICAgICBwYXJlbnROb2RlSWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gTW92ZU5vZGVzUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1vdmVOb2RlczogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFtb3ZlTm9kZXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChtb3ZlTm9kZXMuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gbW92ZU5vZGVzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogbW92ZU5vZGVzLm1vdmVOb2RlcyA/PyBmYWxzZVxuICAgIH07XG4gIH1cblxuICBhc3luYyBzYXZlSW5DbG91ZCh7XG4gICAgZmlsZUlkLFxuICAgIG5hbWUsXG4gICAgbm9kZUlkXG4gIH06IHtcbiAgICBmaWxlSWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgbm9kZUlkPzogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxcbiAgICB8IFN1Y2Nlc3NSZXNwb25zZTxOb2RlRnVsbD5cbiAgICB8IEVycm9yQWNjZXNzRGVuaWVkXG4gICAgfCBFcnJvckJhc2ljXG4gICAgfCBFcnJvckxpbWl0XG4gICAgfCBFcnJvck5vdEZvdW5kXG4gICAgfCBFcnJvck5vdEV4aXN0XG4gICAgfCBudWxsXG4gID4ge1xuICAgIGlmIChub2RlSWQgJiYgIW5vZGVzQ2FjaGUuaGFzKG5vZGVJZCkpIHtcbiAgICAgIGF3YWl0IHRoaXMubm9kZSh7IGlkOiBub2RlSWQgfSk7XG4gICAgICBpZiAoIW5vZGVzQ2FjaGUuaGFzKG5vZGVJZCkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiBcIkVycm9yQmFzaWNcIixcbiAgICAgICAgICBtZXNzYWdlOiBgVGhlIG5vZGUgJHtub2RlSWR9IGRvZXMgbm90IGV4aXN0c2BcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQga2V5ID0gXCJcIjtcblxuICAgIGNvbnN0IGZpbGUgPSBmaWxlc0NhY2hlLmdldChmaWxlSWQpO1xuXG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICBhd2FpdCB0aGlzLmZpbGVNZXRhZGF0YSh7IGlkOiBmaWxlSWQgfSk7XG4gICAgICBjb25zdCBmaWxlID0gZmlsZXNDYWNoZS5nZXQoZmlsZUlkKSA/PyBudWxsO1xuICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgIGNvbnN0IHJlY2VpdmVkTWFpbHMgPSBhd2FpdCB0aGlzLiNjbGllbnQubWFpbC5yZWNlaXZlZE1haWxzKCk7XG4gICAgICAgIGlmICghcmVjZWl2ZWRNYWlscykge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWNlaXZlZE1haWxzLl9fdHlwZW5hbWUgIT09IFwiU3VjY2Vzc1Jlc3BvbnNlXCIpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtYWlsID0gcmVjZWl2ZWRNYWlscy5kYXRhLmZpbmQobSA9PlxuICAgICAgICAgIG0uZmlsZXMuc29tZShmID0+IGYuaWQgPT09IGZpbGVJZClcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIW1haWwpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgX190eXBlbmFtZTogXCJFcnJvckJhc2ljXCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBgQ2FuJ3QgZmluZCBtYWlsIHdpdGggdGhlIGZpbGUgJHtmaWxlSWR9YFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlTWFpbCA9IG1haWwuZmlsZXMuZmluZChmID0+IGYuaWQgPT09IGZpbGVJZCk7XG5cbiAgICAgICAgaWYgKCFmaWxlTWFpbCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiBcIkVycm9yQmFzaWNcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBDYW4ndCBmaW5kIG1haWwgd2l0aCB0aGUgZmlsZSAke2ZpbGVJZH1gXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVLZXkgPSBkZWNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChmaWxlTWFpbC5rZXkpLFxuICAgICAgICAgIG1haWwuc2VuZGVyLnB1YmxpY0tleSxcbiAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgKTtcblxuICAgICAgICBrZXkgPSBzb2RpdW0udG9faGV4KGZpbGVLZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAga2V5ID0gZmlsZS5rZXk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleSA9IGZpbGUua2V5O1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09IFwiXCIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIF9fdHlwZW5hbWU6IFwiRXJyb3JCYXNpY1wiLFxuICAgICAgICBtZXNzYWdlOiBcIlVuZXhwZWN0ZWQgZXJyb3IgM1wiXG4gICAgICB9O1xuICAgIH1cblxuICAgIGtleSA9IHNvZGl1bS50b19oZXgoXG4gICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICBzb2RpdW0uZnJvbV9oZXgoa2V5KSxcbiAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCBuYW1lS2V5ID0gc2VjcmV0c3RyZWFtS2V5Z2VuKCk7XG4gICAgY29uc3QgZW5jcnlwdGVkTmFtZSA9IGF3YWl0IGVuY3J5cHROYW1lKG5hbWUsIHNvZGl1bS50b19oZXgobmFtZUtleSkpO1xuICAgIGNvbnN0IGVuY3J5cHRlZE5hbWVLZXkgPSBzb2RpdW0udG9faGV4KFxuICAgICAgZW5jcnlwdENyeXB0b0JveChuYW1lS2V5LCB0aGlzLiNrZXlzLnB1YmxpY0tleSwgdGhpcy4ja2V5cy5wcml2YXRlS2V5KVxuICAgICk7XG5cbiAgICBjb25zdCB7IHNhdmVJbkNsb3VkIH0gPSBhd2FpdCB0aGlzLiN0aHVuZGVyKFwibXV0YXRpb25cIikoe1xuICAgICAgc2F2ZUluQ2xvdWQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgbm9kZUlkLFxuICAgICAgICAgIGZpbGVuYW1lOiBlbmNyeXB0ZWROYW1lLFxuICAgICAgICAgIG5hbWVLZXk6IGVuY3J5cHRlZE5hbWVLZXlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvckxpbWl0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQmFzaWNcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBTYXZlSW5DbG91ZFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBzYXZlSW5DbG91ZDogbm9kZUZ1bGxTZWxlY3RvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFzYXZlSW5DbG91ZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHNhdmVJbkNsb3VkLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHNhdmVJbkNsb3VkO1xuICAgIH1cblxuICAgIGlmIChzYXZlSW5DbG91ZC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHNhdmVJbkNsb3VkO1xuICAgIH1cbiAgICBpZiAoc2F2ZUluQ2xvdWQuX190eXBlbmFtZSA9PT0gXCJFcnJvckxpbWl0XCIpIHtcbiAgICAgIHJldHVybiBzYXZlSW5DbG91ZDtcbiAgICB9XG5cbiAgICBpZiAoc2F2ZUluQ2xvdWQuX190eXBlbmFtZSA9PT0gXCJFcnJvckJhc2ljXCIpIHtcbiAgICAgIHJldHVybiBzYXZlSW5DbG91ZDtcbiAgICB9XG5cbiAgICBpZiAoc2F2ZUluQ2xvdWQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEV4aXN0XCIpIHtcbiAgICAgIHJldHVybiBzYXZlSW5DbG91ZDtcbiAgICB9XG5cbiAgICBpZiAoIXNhdmVJbkNsb3VkLnNhdmVJbkNsb3VkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlID0gYXdhaXQgZ3FsTm9kZVRvRXh0ZXJuYWxOb2RlRnVsbChcbiAgICAgIHNhdmVJbkNsb3VkLnNhdmVJbkNsb3VkLFxuICAgICAgdGhpcy4ja2V5c1xuICAgICk7XG5cbiAgICBjb25zdCBtZSA9IG5vZGUucGFyZW50Py51c2Vycy5maW5kKFxuICAgICAgKFt1XSkgPT4gdS5wdWJsaWNLZXkgPT09IHRoaXMuI2tleXMucHVibGljS2V5XG4gICAgKTtcblxuICAgIGlmIChtZSAmJiBbXCJhZG1pblwiLCBcIndyaXRlXCJdLmluY2x1ZGVzKG1lWzFdKSkge1xuICAgICAgY29uc3Qgb3RoZXJzID1cbiAgICAgICAgbm9kZS5wYXJlbnQ/LnVzZXJzLmZpbHRlcihcbiAgICAgICAgICAoW3VdKSA9PiB1LnB1YmxpY0tleSAhPT0gdGhpcy4ja2V5cy5wdWJsaWNLZXlcbiAgICAgICAgKSA/PyBbXTtcblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG90aGVycy5tYXAoKFt1LCByaWdodHNdKSA9PlxuICAgICAgICAgIHRoaXMuc2hhcmVOb2RlKHtcbiAgICAgICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgICAgIHJpZ2h0cyxcbiAgICAgICAgICAgIHVzZXJJZDogdS5pZFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBub2RlXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcGVyTm9kZSA9IGFzeW5jIChcbiAgICBub2RlSWQ6IHN0cmluZyxcbiAgICBwdWJsaWNLZXk6IHN0cmluZ1xuICApOiBQcm9taXNlPE5hbWVLZXlJbnB1dCB8IG51bGw+ID0+IHtcbiAgICBsZXQgbm9kZSA9IG5vZGVzQ2FjaGUuZ2V0KG5vZGVJZCk7XG5cbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIGF3YWl0IHRoaXMubm9kZSh7IGlkOiBub2RlSWQgfSk7XG4gICAgICBub2RlID0gbm9kZXNDYWNoZS5nZXQobm9kZUlkKTtcblxuICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG5hbWVLZXkgPSBub2RlLmFjY2Vzcz8ubmFtZUtleTtcblxuICAgIGlmICghbmFtZUtleSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBub2RlLmlkLFxuICAgICAgbmFtZUtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICBzb2RpdW0uZnJvbV9oZXgobmFtZUtleSksXG4gICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICApXG4gICAgICApLFxuICAgICAgZmlsZXM6XG4gICAgICAgIFwiaGlzdG9yeVwiIGluIG5vZGVcbiAgICAgICAgICA/IG5vZGUuaGlzdG9yeS5tYXAoZiA9PiAoe1xuICAgICAgICAgICAgICBpZDogZi5pZCxcbiAgICAgICAgICAgICAga2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9oZXgoZi5rZXkpLFxuICAgICAgICAgICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICA6IFtdXG4gICAgfTtcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFDQSxPQUFPQSxLQUFQLE1B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
|