@sapui5/sap.fe.core 1.108.12 → 1.108.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
package/src/sap/fe/core/.library
CHANGED
|
@@ -608,29 +608,24 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonU
|
|
|
608
608
|
});
|
|
609
609
|
messageManager.removeMessages(relevantMessages);
|
|
610
610
|
};
|
|
611
|
-
var
|
|
611
|
+
var _validateProperties = function (oResourceBundle) {
|
|
612
612
|
try {
|
|
613
|
-
|
|
614
|
-
return actionParameterInfo.field.getRequired();
|
|
615
|
-
});
|
|
616
|
-
// before validation of required fields is not complete, we cannot know the values and thus cannot validate they are provided
|
|
617
|
-
return Promise.resolve(Promise.allSettled(requiredParameterInfos.map(function (actionParameterInfo) {
|
|
613
|
+
return Promise.resolve(Promise.allSettled(actionParameterInfos.map(function (actionParameterInfo) {
|
|
618
614
|
return actionParameterInfo.validationPromise;
|
|
619
|
-
}))).then(function (
|
|
620
|
-
var
|
|
621
|
-
return
|
|
622
|
-
validationResult: validationResult,
|
|
623
|
-
index: index
|
|
624
|
-
};
|
|
625
|
-
}).filter(function (validationResult) {
|
|
626
|
-
return validationResult.validationResult.status === "fulfilled";
|
|
627
|
-
}).map(function (validationResult) {
|
|
628
|
-
return requiredParameterInfos[validationResult.index];
|
|
615
|
+
}))).then(function () {
|
|
616
|
+
var requiredParameterInfos = actionParameterInfos.filter(function (actionParameterInfo) {
|
|
617
|
+
return actionParameterInfo.field.getRequired();
|
|
629
618
|
});
|
|
630
|
-
|
|
631
|
-
|
|
619
|
+
/* Hint: The boolean false is a valid value */
|
|
620
|
+
|
|
621
|
+
var emptyRequiredFields = requiredParameterInfos.filter(function (requiredParameterInfo) {
|
|
622
|
+
if (requiredParameterInfo.isMultiValue) {
|
|
623
|
+
return requiredParameterInfo.value === undefined || !requiredParameterInfo.value.length;
|
|
624
|
+
} else {
|
|
625
|
+
var fieldValue = requiredParameterInfo.field.getValue();
|
|
626
|
+
return fieldValue === undefined || fieldValue === null || fieldValue === "";
|
|
627
|
+
}
|
|
632
628
|
});
|
|
633
|
-
if (!emptyRequiredFields.length) return true;
|
|
634
629
|
|
|
635
630
|
// message contains label per field for historical reason (originally, it was shown in additional popup, now it's directly added to the field)
|
|
636
631
|
// if this was not the case (and hopefully, in future this might be subject to change), interface of _addMessageForActionParameter could be simplified to just pass emptyRequiredFields and a constant message here
|
|
@@ -642,9 +637,18 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonU
|
|
|
642
637
|
};
|
|
643
638
|
}));
|
|
644
639
|
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
640
|
+
/* Check value state of all parameter */
|
|
641
|
+
var firstInvalidActionParameter = actionParameterInfos.find(
|
|
642
|
+
// unfortunately, _addMessageForActionParameter sets valueState only asynchroneously, thus checking emptyRequiredFields additionally
|
|
643
|
+
function (actionParameterInfo) {
|
|
644
|
+
return actionParameterInfo.field.getValueState() === "Error" || emptyRequiredFields.includes(actionParameterInfo);
|
|
645
|
+
});
|
|
646
|
+
if (firstInvalidActionParameter) {
|
|
647
|
+
firstInvalidActionParameter.field.focus();
|
|
648
|
+
return false;
|
|
649
|
+
} else {
|
|
650
|
+
return true;
|
|
651
|
+
}
|
|
648
652
|
});
|
|
649
653
|
} catch (e) {
|
|
650
654
|
return Promise.reject(e);
|
|
@@ -746,8 +750,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonU
|
|
|
746
750
|
var _exit3 = false;
|
|
747
751
|
return Promise.resolve(_finallyRethrows(function () {
|
|
748
752
|
var _exit2 = false;
|
|
749
|
-
return Promise.resolve(
|
|
750
|
-
if (!
|
|
753
|
+
return Promise.resolve(_validateProperties(oResourceBundle)).then(function (_validateProperties2) {
|
|
754
|
+
if (!_validateProperties2) {
|
|
751
755
|
_exit3 = true;
|
|
752
756
|
return;
|
|
753
757
|
}
|
|
@@ -1136,9 +1140,37 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonU
|
|
|
1136
1140
|
path: "/",
|
|
1137
1141
|
model: "paramsModel"
|
|
1138
1142
|
});
|
|
1143
|
+
|
|
1139
1144
|
// empty model to add elements dynamically depending on number of MVF fields defined on the dialog
|
|
1140
1145
|
var oMVFModel = new JSONModel({});
|
|
1141
1146
|
oDialog.setModel(oMVFModel, "mvfview");
|
|
1147
|
+
|
|
1148
|
+
/* Event needed for removing messages of valid changed field */
|
|
1149
|
+
var _iterator2 = _createForOfIteratorHelper(actionParameterInfos),
|
|
1150
|
+
_step2;
|
|
1151
|
+
try {
|
|
1152
|
+
var _loop3 = function () {
|
|
1153
|
+
var actionParameterInfo = _step2.value;
|
|
1154
|
+
if (actionParameterInfo.isMultiValue) {
|
|
1155
|
+
var _actionParameterInfo$3, _actionParameterInfo$4;
|
|
1156
|
+
actionParameterInfo === null || actionParameterInfo === void 0 ? void 0 : (_actionParameterInfo$3 = actionParameterInfo.field) === null || _actionParameterInfo$3 === void 0 ? void 0 : (_actionParameterInfo$4 = _actionParameterInfo$3.getBinding("items")) === null || _actionParameterInfo$4 === void 0 ? void 0 : _actionParameterInfo$4.attachChange(function () {
|
|
1157
|
+
_removeMessagesForActionParamter(actionParameterInfo.parameter);
|
|
1158
|
+
});
|
|
1159
|
+
} else {
|
|
1160
|
+
var _actionParameterInfo$5, _actionParameterInfo$6;
|
|
1161
|
+
actionParameterInfo === null || actionParameterInfo === void 0 ? void 0 : (_actionParameterInfo$5 = actionParameterInfo.field) === null || _actionParameterInfo$5 === void 0 ? void 0 : (_actionParameterInfo$6 = _actionParameterInfo$5.getBinding("value")) === null || _actionParameterInfo$6 === void 0 ? void 0 : _actionParameterInfo$6.attachChange(function () {
|
|
1162
|
+
_removeMessagesForActionParamter(actionParameterInfo.parameter);
|
|
1163
|
+
});
|
|
1164
|
+
}
|
|
1165
|
+
};
|
|
1166
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
1167
|
+
_loop3();
|
|
1168
|
+
}
|
|
1169
|
+
} catch (err) {
|
|
1170
|
+
_iterator2.e(err);
|
|
1171
|
+
} finally {
|
|
1172
|
+
_iterator2.f();
|
|
1173
|
+
}
|
|
1142
1174
|
var sActionPath = "".concat(sActionName, "(...)");
|
|
1143
1175
|
if (!aContexts.length) {
|
|
1144
1176
|
sActionPath = "/".concat(sActionPath);
|
|
@@ -1456,11 +1488,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonU
|
|
|
1456
1488
|
if (parameterValues) {
|
|
1457
1489
|
// If showDialog is false but there are parameters from the invokeAction call, we need to check that values have been
|
|
1458
1490
|
// provided for all of them
|
|
1459
|
-
var
|
|
1460
|
-
|
|
1491
|
+
var _iterator3 = _createForOfIteratorHelper(actionParameters),
|
|
1492
|
+
_step3;
|
|
1461
1493
|
try {
|
|
1462
|
-
var
|
|
1463
|
-
var actionParameter =
|
|
1494
|
+
var _loop4 = function () {
|
|
1495
|
+
var actionParameter = _step3.value;
|
|
1464
1496
|
if (actionParameter.$Name !== "ResultIsActiveEntity" && !(parameterValues !== null && parameterValues !== void 0 && parameterValues.find(function (element) {
|
|
1465
1497
|
return element.name === actionParameter.$Name;
|
|
1466
1498
|
}))) {
|
|
@@ -1470,32 +1502,32 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonU
|
|
|
1470
1502
|
};
|
|
1471
1503
|
}
|
|
1472
1504
|
};
|
|
1473
|
-
for (
|
|
1474
|
-
var _ret =
|
|
1505
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
1506
|
+
var _ret = _loop4();
|
|
1475
1507
|
if (typeof _ret === "object") return _ret.v;
|
|
1476
1508
|
}
|
|
1477
1509
|
} catch (err) {
|
|
1478
|
-
|
|
1510
|
+
_iterator3.e(err);
|
|
1479
1511
|
} finally {
|
|
1480
|
-
|
|
1512
|
+
_iterator3.f();
|
|
1481
1513
|
}
|
|
1482
1514
|
} else if (isCreateAction && startupParameters) {
|
|
1483
1515
|
// If parameters have been provided during application launch, we need to check if the set is complete
|
|
1484
1516
|
// If not, the parameter dialog still needs to be shown.
|
|
1485
|
-
var
|
|
1486
|
-
|
|
1517
|
+
var _iterator4 = _createForOfIteratorHelper(actionParameters),
|
|
1518
|
+
_step4;
|
|
1487
1519
|
try {
|
|
1488
|
-
for (
|
|
1489
|
-
var actionParameter =
|
|
1520
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
1521
|
+
var actionParameter = _step4.value;
|
|
1490
1522
|
if (!startupParameters[actionParameter.$Name]) {
|
|
1491
1523
|
// At least for one parameter no value has been provided, so we can't skip the dialog
|
|
1492
1524
|
return false;
|
|
1493
1525
|
}
|
|
1494
1526
|
}
|
|
1495
1527
|
} catch (err) {
|
|
1496
|
-
|
|
1528
|
+
_iterator4.e(err);
|
|
1497
1529
|
} finally {
|
|
1498
|
-
|
|
1530
|
+
_iterator4.f();
|
|
1499
1531
|
}
|
|
1500
1532
|
}
|
|
1501
1533
|
return true;
|
|
@@ -1550,7 +1582,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonU
|
|
|
1550
1582
|
getActionParameterActionName: _getActionParameterActionName,
|
|
1551
1583
|
actionParameterShowMessageCallback: actionParameterShowMessageCallback,
|
|
1552
1584
|
afterActionResolution: afterActionResolution
|
|
1585
|
+
// ActionParameterInfo: ActionParameterInfo,
|
|
1586
|
+
// _validateProperties, _validateProperties
|
|
1553
1587
|
};
|
|
1554
1588
|
return operations;
|
|
1555
1589
|
}, false);
|
|
1556
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiZmluYWxpemVyIiwiYmluZCIsImV4ZWN1dGVBUE1BY3Rpb24iLCJvQXBwQ29tcG9uZW50IiwibVBhcmFtZXRlcnMiLCJvUGFyZW50Q29udHJvbCIsIm1lc3NhZ2VIYW5kbGVyIiwiYUNvbnRleHRzIiwib0RpYWxvZyIsImFmdGVyNDEyIiwiX2V4ZWN1dGVBY3Rpb24iLCJhUmVzdWx0Iiwic29tZSIsIm9TaW5nbGVSZXN1bHQiLCJzdGF0dXMiLCJtZXNzYWdlcyIsIkNvcmUiLCJnZXRNZXNzYWdlTWFuYWdlciIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsImdldFByb3BlcnR5IiwibGVuZ3RoIiwic2V0UHJvcGVydHkiLCJjb25jYXQiLCJhZGRNZXNzYWdlcyIsInNob3dNZXNzYWdlRGlhbG9nIiwib25CZWZvcmVTaG93TWVzc2FnZSIsImFNZXNzYWdlcyIsInNob3dNZXNzYWdlUGFyYW1ldGVyc0luIiwiYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayIsImlzQWN0aW9uUGFyYW1ldGVyRGlhbG9nT3BlbiIsImlzT3BlbiIsIkNvbnN0YW50cyIsIkZFTGlicmFyeSIsIkludm9jYXRpb25Hcm91cGluZyIsIkFjdGlvbiIsIk1lc3NhZ2VCb3giLCJjYWxsQm91bmRBY3Rpb24iLCJzQWN0aW9uTmFtZSIsImNvbnRleHRzIiwib01vZGVsIiwiUHJvbWlzZSIsInJlamVjdCIsImlzQ2FsbGVkV2l0aEFycmF5IiwiQXJyYXkiLCJpc0FycmF5Iiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInNBY3Rpb25QYXRoIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwib0JvdW5kQWN0aW9uIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJpc0NyaXRpY2FsQWN0aW9uIiwiZ2V0SXNBY3Rpb25Dcml0aWNhbCIsImV4dHJhY3RTaW5nbGVSZXN1bHQiLCJ2YWx1ZSIsInJlYXNvbiIsImNhbGxBY3Rpb24iLCJjYWxsQWN0aW9uSW1wb3J0IiwiYmluZENvbnRleHQiLCJvQWN0aW9uSW1wb3J0IiwiZ2V0T2JqZWN0IiwiY2FsbEJvdW5kRnVuY3Rpb24iLCJzRnVuY3Rpb25OYW1lIiwiY29udGV4dCIsInNGdW5jdGlvblBhdGgiLCJvQm91bmRGdW5jdGlvbiIsIl9leGVjdXRlRnVuY3Rpb24iLCJjYWxsRnVuY3Rpb25JbXBvcnQiLCJyZXNvbHZlIiwib0Z1bmN0aW9uSW1wb3J0Iiwib0Z1bmN0aW9uIiwic0dyb3VwSWQiLCJFcnJvciIsIm9GdW5jdGlvblByb21pc2UiLCJleGVjdXRlIiwic3VibWl0QmF0Y2giLCJnZXRCb3VuZENvbnRleHQiLCJvQWN0aW9uIiwibUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMiLCJmbkRpYWxvZyIsIm9BY3Rpb25Qcm9taXNlIiwic0FjdGlvbkxhYmVsIiwibGFiZWwiLCJiU2tpcFBhcmFtZXRlckRpYWxvZyIsInNraXBQYXJhbWV0ZXJEaWFsb2ciLCJiSXNDcmVhdGVBY3Rpb24iLCJiSXNDcml0aWNhbEFjdGlvbiIsInNNZXRhUGF0aCIsInNNZXNzYWdlc1BhdGgiLCJpTWVzc2FnZVNpZGVFZmZlY3QiLCJiSXNTYW1lRW50aXR5Iiwib1JldHVyblR5cGUiLCJiVmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzIiwiYWN0aW9uRGVmaW5pdGlvbiIsImFBY3Rpb25QYXJhbWV0ZXJzIiwiZ2V0QWN0aW9uUGFyYW1ldGVycyIsImJBY3Rpb25OZWVkc1BhcmFtZXRlckRpYWxvZyIsIiROYW1lIiwiYVBhcmFtZXRlclZhbHVlcyIsInBhcmFtZXRlclZhbHVlcyIsIm9Db21wb25lbnREYXRhIiwiZ2V0Q29tcG9uZW50RGF0YSIsIm9TdGFydHVwUGFyYW1ldGVycyIsInN0YXJ0dXBQYXJhbWV0ZXJzIiwiX3ZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycyIsInNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJjb25maXJtQ3JpdGljYWxBY3Rpb24iLCJmbk9uU3VibWl0dGVkIiwib25TdWJtaXR0ZWQiLCJmbk9uUmVzcG9uc2UiLCJvblJlc3BvbnNlIiwiYWN0aW9uTmFtZSIsIm1vZGVsIiwiYkdldEJvdW5kQ29udGV4dCIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsInNlbGVjdGVkSXRlbXMiLCJhZGRpdGlvbmFsU2lkZUVmZmVjdCIsInBhdGhFeHByZXNzaW9ucyIsImZpbmRJbmRleCIsImV4cCIsIiRpc0NvbGxlY3Rpb24iLCJnZXRNb2RlbCIsIiRUeXBlIiwibUJpbmRpbmdQYXJhbWV0ZXJzIiwiJHNlbGVjdCIsInNwbGl0IiwiaW5kZXhPZiIsInB1c2giLCJ0cmlnZ2VyQWN0aW9ucyIsInNwbGljZSIsImJHcm91cGVkIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwiQ2hhbmdlU2V0Iiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiaXNDcmVhdGVBY3Rpb24iLCJiT2JqZWN0UGFnZSIsImNvbnRyb2xJZCIsImNvbnRyb2wiLCJwYXJlbnRDb250cm9sIiwiYnlJZCIsImlzU3RhdGljIiwiJFBhcmFtZXRlciIsImFQYXJhbWV0ZXIiLCIkRW50aXR5U2V0UGF0aCIsIiRJc0JvdW5kIiwiZW50aXR5U2V0TmFtZSIsIm9PcGVyYXRpb25SZXN1bHQiLCJhZnRlckFjdGlvblJlc29sdXRpb24iLCJjYXRjaCIsImkiLCJmaW5kIiwiZWxlbWVudCIsIm5hbWUiLCJzdHJpY3RIYW5kbGluZ0ZhaWxzIiwiYUZhaWxlZENvbnRleHRzIiwiZm9yRWFjaCIsImZhaWwiLCJnZXRDb250ZXh0Iiwib0ZhaWxlZE9wZXJhdGlvblJlc3VsdCIsIm9BY3Rpb25Db250ZXh0IiwiYm91bmRBY3Rpb25OYW1lIiwic3VmZml4UmVzb3VyY2VLZXkiLCJvUmVzb3VyY2VCdW5kbGUiLCJnZXRDb250cm9sbGVyIiwic0NvbmZpcm1hdGlvblRleHQiLCJDb21tb25VdGlscyIsImdldFRyYW5zbGF0ZWRUZXh0IiwiY29uZmlybSIsIm9uQ2xvc2UiLCJzQWN0aW9uIiwiT0siLCJvT3BlcmF0aW9uIiwib0Vycm9yIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJKU09OIiwicGFyc2UiLCJvQ29udHJvbCIsImlzQSIsImFTZWxlY3RlZENvbnRleHRzIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsInNob3dNZXNzYWdlQm94IiwidW5ib3VuZE1lc3NhZ2VzIiwiZmlsdGVyIiwibWVzc2FnZSIsImdldFRhcmdldCIsIkFQRG1lc3NhZ2VzIiwiYWN0aW9uUGFyYW0iLCJBUERNZXNzYWdlIiwiaXNBUERUYXJnZXQiLCJlcnJvclRhcmdldHNJbkFQRCIsImNsb3NlIiwiZGVzdHJveSIsImZpbHRlcmVkTWVzc2FnZXMiLCJiSXNBUERPcGVuIiwidW5kZWZpbmVkIiwiZm5HZXRNZXNzYWdlU3VidGl0bGUiLCJtZXNzYWdlSGFuZGxpbmciLCJzZXRNZXNzYWdlU3VidGl0bGUiLCJzUGF0aCIsIl9nZXRQYXRoIiwibWV0YU1vZGVsIiwiZW50aXR5U2V0Q29udGV4dCIsInNBY3Rpb25OYW1lUGF0aCIsImFjdGlvbk5hbWVDb250ZXh0Iiwic0ZyYWdtZW50TmFtZSIsImFjdGlvblBhcmFtZXRlckluZm9zIiwibWVzc2FnZU1hbmFnZXIiLCJfYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlciIsIm1lc3NhZ2VQYXJhbWV0ZXJzIiwibWFwIiwibWVzc2FnZVBhcmFtZXRlciIsImJpbmRpbmciLCJhY3Rpb25QYXJhbWV0ZXJJbmZvIiwiZmllbGQiLCJnZXRCaW5kaW5nIiwiaXNNdWx0aVZhbHVlIiwiTWVzc2FnZSIsInR5cGUiLCJwcm9jZXNzb3IiLCJwZXJzaXN0ZW50IiwidGFyZ2V0IiwiZ2V0UmVzb2x2ZWRQYXRoIiwiX3JlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW10ZXIiLCJwYXJhbWV0ZXIiLCJhbGxNZXNzYWdlcyIsImdlbmVyYXRlIiwicmVsZXZhbnRNZXNzYWdlcyIsIm1zZyIsImdldENvbnRyb2xJZHMiLCJpZCIsImluY2x1ZGVzIiwicmVtb3ZlTWVzc2FnZXMiLCJfdmFsaWRhdGVSZXF1aXJlZFByb3BlcnRpZXMiLCJyZXF1aXJlZFBhcmFtZXRlckluZm9zIiwiZ2V0UmVxdWlyZWQiLCJhbGxTZXR0bGVkIiwidmFsaWRhdGlvblByb21pc2UiLCJ2YWxpZGF0aW9uUmVzdWx0cyIsInZhbGlkUmVxdWlyZWRGaWVsZHMiLCJ2YWxpZGF0aW9uUmVzdWx0IiwiaW5kZXgiLCJlbXB0eVJlcXVpcmVkRmllbGRzIiwiZ2V0UGFyZW50IiwiZ2V0QWdncmVnYXRpb24iLCJnZXRUZXh0IiwiZm9jdXMiLCJvQ29udHJvbGxlciIsImhhbmRsZUNoYW5nZSIsIm9FdmVudCIsImdldFNvdXJjZSIsImdldFBhcmFtZXRlciIsImVycm9yIiwib0ZyYWdtZW50IiwiWE1MVGVtcGxhdGVQcm9jZXNzb3IiLCJsb2FkVGVtcGxhdGUiLCJvUGFyYW1ldGVyTW9kZWwiLCJKU09OTW9kZWwiLCIkZGlzcGxheU1vZGUiLCJYTUxQcmVwcm9jZXNzb3IiLCJwcm9jZXNzIiwiYmluZGluZ0NvbnRleHRzIiwiYWN0aW9uIiwiZW50aXR5U2V0IiwibW9kZWxzIiwiY3JlYXRlZEZyYWdtZW50IiwiYUZ1bmN0aW9uUGFyYW1zIiwib09wZXJhdGlvbkJpbmRpbmciLCJzZXRVc2VyRGVmYXVsdHMiLCJGcmFnbWVudCIsImxvYWQiLCJkZWZpbml0aW9uIiwiY29udHJvbGxlciIsIm9EaWFsb2dDb250ZW50IiwiYWN0aW9uUGFyYW1ldGVyIiwiYWN0aW9uUmVzdWx0IiwiZGlhbG9nQ2FuY2VsbGVkIiwiRGlhbG9nIiwidGl0bGUiLCJjb250ZW50IiwiZXNjYXBlSGFuZGxlciIsImJlZ2luQnV0dG9uIiwiQnV0dG9uIiwidGV4dCIsIl9nZXRBY3Rpb25QYXJhbWV0ZXJBY3Rpb25OYW1lIiwicHJlc3MiLCJCdXN5TG9ja2VyIiwibG9jayIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsInZQYXJhbWV0ZXJWYWx1ZSIsIm9QYXJhbWV0ZXJDb250ZXh0IiwiZ2V0UGFyYW1ldGVyQ29udGV4dCIsImFNVkZDb250ZW50IiwiYUtleVZhbHVlcyIsImoiLCJLZXkiLCJzYXAiLCJ1aSIsImdldENvcmUiLCJpc0xvY2tlZCIsInVubG9jayIsInNob3dNZXNzYWdlcyIsIm1lc3NhZ2VQYWdlTmF2aWdhdGlvbkNhbGxiYWNrIiwic2hvd01lc3NhZ2VQYXJhbWV0ZXJzIiwiZW5kQnV0dG9uIiwiYmVmb3JlT3BlbiIsIm9DbG9uZUV2ZW50IiwiT2JqZWN0IiwiYXNzaWduIiwiZ2V0RGVmYXVsdFZhbHVlc0Z1bmN0aW9uIiwic0RlZmF1bHRWYWx1ZXNGdW5jdGlvbiIsImZuU2V0RGVmYXVsdHNBbmRPcGVuRGlhbG9nIiwic0JpbmRpbmdQYXJhbWV0ZXIiLCJzQm91bmRGdW5jdGlvbk5hbWUiLCJwcmVmaWxsUGFyYW1ldGVyIiwic1BhcmFtTmFtZSIsInZQYXJhbURlZmF1bHRWYWx1ZSIsIiRQYXRoIiwicmVxdWVzdFNpbmdsZXRvblByb3BlcnR5IiwidlBhcmFtVmFsdWUiLCJzUGF0aEZvckNvbnRleHQiLCJyZXBsYWNlIiwicGFyYW1OYW1lIiwiYk5vUG9zc2libGVWYWx1ZSIsInJlcXVlc3RQcm9wZXJ0eSIsIkxvZyIsImJMYXRlUHJvcGVydHlFcnJvciIsIm9EYXRhIiwiZ2V0UGFyYW1ldGVyRGVmYXVsdFZhbHVlIiwic0FjdGlvblBhcmFtZXRlckFubm90YXRpb25QYXRoIiwiZ2V0UGFyYW1ldGVyUGF0aCIsIm9QYXJhbWV0ZXJBbm5vdGF0aW9ucyIsIm9QYXJhbWV0ZXJEZWZhdWx0VmFsdWUiLCJhQ3VycmVudFBhcmFtRGVmYXVsdFZhbHVlIiwidlBhcmFtZXRlckRlZmF1bHRWYWx1ZSIsImFQcmVmaWxsUGFyYW1Qcm9taXNlcyIsImFsbCIsImFFeGVjRnVuY3Rpb25Qcm9taXNlcyIsIm9FeGVjRnVuY3Rpb25Gcm9tTWFuaWZlc3RQcm9taXNlIiwic01vZHVsZSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiRlBNSGVscGVyIiwiYWN0aW9uV3JhcHBlciIsImFQcm9taXNlcyIsImN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZSIsImZ1bmN0aW9uUGFyYW1zIiwib0Z1bmN0aW9uUGFyYW1zRnJvbU1hbmlmZXN0Iiwic0RpYWxvZ1BhcmFtTmFtZSIsInZQYXJhbWV0ZXJQcm92aWRlZFZhbHVlIiwic2V0UGFyYW1ldGVyIiwiaGFzT3duUHJvcGVydHkiLCJiRXJyb3JGb3VuZCIsIm9WYWx1ZSIsInNUZXh0Iiwid2FybmluZyIsImNvbnRlbnRXaWR0aCIsImZuQXN5bmNCZWZvcmVPcGVuIiwiYVBhcmFtZXRlcnMiLCJyZXF1ZXN0T2JqZWN0Iiwib0NvbnRleHRPYmplY3QiLCJnZXRJdGVtcyIsImdldFZhbHVlIiwiYWZ0ZXJDbG9zZSIsIkNhbmNlbEFjdGlvbkRpYWxvZyIsInNldE1vZGVsIiwiYmluZEVsZW1lbnQiLCJwYXRoIiwib01WRk1vZGVsIiwiYWRkRGVwZW5kZW50Iiwic2V0QmluZGluZ0NvbnRleHQiLCJnZXRPYmplY3RCaW5kaW5nIiwib3BlbiIsInNsaWNlIiwidkFjdGlvbkNyaXRpY2FsIiwic0NyaXRpY2FsUGF0aCIsImFCaW5kaW5nUGFyYW1zIiwiYVBhdGhzIiwiYkNvbmRpdGlvbiIsIm9QYXJhbXMiLCJqb2luIiwic0VudGl0eVNldE5hbWUiLCJhQWN0aW9uTmFtZSIsInNLZXkiLCJiUmVzb3VyY2VLZXlFeGlzdHMiLCJjaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMiLCJhQ3VzdG9tQnVuZGxlcyIsImhhbmRsZTQxMkZhaWxlZFRyYW5zaXRpb25zIiwiY3VycmVudF9jb250ZXh0X2luZGV4IiwiaUNvbnRleHRMZW5ndGgiLCJwcm9jZXNzZWRNZXNzYWdlSWRzIiwidHJhbnNpdGlvbk1lc3NhZ2VzIiwiaXNEdXBsaWNhdGUiLCJnZXRJZCIsImdldFR5cGUiLCJNZXNzYWdlVHlwZSIsIlN1Y2Nlc3MiLCJnZXRQZXJzaXN0ZW50IiwiZ3JvdXBJZCIsIm9wZXJhdGlvbnNIZWxwZXIiLCJyZW5kZXJNZXNzYWdlVmlldyIsImV4ZWN1dGVEZXBlbmRpbmdPblNlbGVjdGVkQ29udGV4dHMiLCJiRW5hYmxlU3RyaWN0SGFuZGxpbmciLCJvUHJvcGVydHkiLCIka2luZCIsImZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZCIsIm9wZXJhdGlvbnMiLCJBY3Rpb25FeGVjdXRpb25GYWlsZWQiLCJzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWUiLCJmbkV4ZWN1dGVTZXF1ZW50aWFsbHkiLCJjb250ZXh0c1RvRXhlY3V0ZSIsInByb2Nlc3NPbmVBY3Rpb24iLCJhY3Rpb25JbmRleCIsImZuRXhlY3V0ZVNpbmdsZUFjdGlvbiIsIm5vb3AiLCJhQWN0aW9uUHJvbWlzZXMiLCJyZWR1Y2UiLCJwcm9taXNlIiwiZm5IYW5kbGVSZXN1bHRzIiwiZm5FeGVjdXRlQWN0aW9uIiwiYWN0aW9uQ29udGV4dCIsIm9TaWRlRWZmZWN0IiwiZ2V0VXBkYXRlR3JvdXBJZCIsInJlcXVlc3RTaWRlRWZmZWN0cyIsImZuUmVxdWVzdFNpZGVFZmZlY3RzIiwiYUxvY2FsUHJvbWlzZSIsImZpbmFsbHkiLCJhY3Rpb25QYXJhbWV0ZXJzIiwib1NpZGVFZmZlY3RzU2VydmljZSIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsIm9Mb2NhbFByb21pc2UiLCJzVHJpZ2dlckFjdGlvbiIsImV4ZWN1dGVBY3Rpb24iLCJ2YWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnMiLCJnZXRBY3Rpb25QYXJhbWV0ZXJBY3Rpb25OYW1lIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJvcGVyYXRpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgQWN0aW9uUnVudGltZSBmcm9tIFwic2FwL2ZlL2NvcmUvQWN0aW9uUnVudGltZVwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCBtZXNzYWdlSGFuZGxpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL21lc3NhZ2VIYW5kbGVyL21lc3NhZ2VIYW5kbGluZ1wiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCBGRUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgdHlwZSBMYWJlbCBmcm9tIFwic2FwL20vTGFiZWxcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgRnJhZ21lbnQgZnJvbSBcInNhcC91aS9jb3JlL0ZyYWdtZW50XCI7XG5pbXBvcnQgeyBNZXNzYWdlVHlwZSB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IFhNTFRlbXBsYXRlUHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS9YTUxUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCB0eXBlIE11bHRpVmFsdWVGaWVsZEl0ZW0gZnJvbSBcInNhcC91aS9tZGMvZmllbGQvTXVsdGlWYWx1ZUZpZWxkSXRlbVwiO1xuaW1wb3J0IHR5cGUgTXVsdGlWYWx1ZUZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL011bHRpVmFsdWVGaWVsZFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCIuLi8uLi9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBvcGVyYXRpb25zSGVscGVyIGZyb20gXCIuLi8uLi9vcGVyYXRpb25zSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlSGFuZGxlciBmcm9tIFwiLi4vTWVzc2FnZUhhbmRsZXJcIjtcblxuY29uc3QgQ29uc3RhbnRzID0gRkVMaWJyYXJ5LkNvbnN0YW50cyxcblx0SW52b2NhdGlvbkdyb3VwaW5nID0gRkVMaWJyYXJ5Lkludm9jYXRpb25Hcm91cGluZztcbmNvbnN0IEFjdGlvbiA9IChNZXNzYWdlQm94IGFzIGFueSkuQWN0aW9uO1xuXG4vKipcbiAqIENhbGxzIGEgYm91bmQgYWN0aW9uIGZvciBvbmUgb3IgbXVsdGlwbGUgY29udGV4dHMuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAc3RhdGljXG4gKiBAbmFtZSBzYXAuZmUuY29yZS5hY3Rpb25zLm9wZXJhdGlvbnMuY2FsbEJvdW5kQWN0aW9uXG4gKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuYWN0aW9ucy5vcGVyYXRpb25zXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0byBiZSBjYWxsZWRcbiAqIEBwYXJhbSBjb250ZXh0cyBFaXRoZXIgb25lIGNvbnRleHQgb3IgYW4gYXJyYXkgd2l0aCBjb250ZXh0cyBmb3Igd2hpY2ggdGhlIGFjdGlvbiBpcyB0byBiZSBiZSBjYWxsZWRcbiAqIEBwYXJhbSBvTW9kZWwgT0RhdGEgTW9kZWxcbiAqIEBwYXJhbSBvQXBwQ29tcG9uZW50IFRoZSBBcHBDb21wb25lbnRcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnNdIE9wdGlvbmFsLCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLnBhcmFtZXRlclZhbHVlc10gQSBtYXAgb2YgYWN0aW9uIHBhcmFtZXRlciBuYW1lcyBhbmQgcHJvdmlkZWQgdmFsdWVzXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVyc10gQSBtYXAgb2YgYmluZGluZyBwYXJhbWV0ZXJzIHRoYXQgd291bGQgYmUgcGFydCBvZiAkc2VsZWN0IGFuZCAkZXhwYW5kIGNvbWluZyBmcm9tIHNpZGUgZWZmZWN0cyBmb3IgYm91bmQgYWN0aW9uc1xuICogQHBhcmFtIFttUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdF0gQXJyYXkgb2YgcHJvcGVydHkgcGF0aHMgdG8gYmUgcmVxdWVzdGVkIGluIGFkZGl0aW9uIHRvIGFjdHVhbCB0YXJnZXQgcHJvcGVydGllcyBvZiB0aGUgc2lkZSBlZmZlY3RcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuc2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZ10gSWYgc2V0IGFuZCBpZiBwYXJhbWV0ZXJzIGV4aXN0IHRoZSB1c2VyIHJldHJpZXZlcyBhIGRpYWxvZyB0byBmaWxsIGluIHBhcmFtZXRlcnMsIGlmIGFjdGlvblBhcmFtZXRlcnMgYXJlIHBhc3NlZCB0aGV5IGFyZSBzaG93biB0byB0aGUgdXNlclxuICogQHBhcmFtIFttUGFyYW1ldGVycy5sYWJlbF0gQSBodW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhlIGFjdGlvblxuICogQHBhcmFtIFttUGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmddIE1vZGUgaG93IGFjdGlvbnMgYXJlIHRvIGJlIGNhbGxlZDogQ2hhbmdlc2V0IHRvIHB1dCBhbGwgYWN0aW9uIGNhbGxzIGludG8gb25lIGNoYW5nZXNldCwgSXNvbGF0ZWQgdG8gcHV0IHRoZW0gaW50byBzZXBhcmF0ZSBjaGFuZ2VzZXRzLCBkZWZhdWx0cyB0byBJc29sYXRlZFxuICogQHBhcmFtIFttUGFyYW1ldGVycy5vblN1Ym1pdHRlZF0gRnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIG9uY2UgdGhlIGFjdGlvbnMgYXJlIHN1Ym1pdHRlZCB3aXRoIGFuIGFycmF5IG9mIHByb21pc2VzXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmRlZmF1bHRQYXJhbWV0ZXJzXSBDYW4gY29udGFpbiBkZWZhdWx0IHBhcmFtZXRlcnMgZnJvbSBGTFAgdXNlciBkZWZhdWx0c1xuICogQHBhcmFtIFttUGFyYW1ldGVycy5wYXJlbnRDb250cm9sXSBJZiBzcGVjaWZpZWQsIHRoZSBkaWFsb2dzIGFyZSBhZGRlZCBhcyBkZXBlbmRlbnQgb2YgdGhlIHBhcmVudCBjb250cm9sXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmJHZXRCb3VuZENvbnRleHRdIElmIHNwZWNpZmllZCwgdGhlIGFjdGlvbiBwcm9taXNlIHJldHVybnMgdGhlIGJvdW5kIGNvbnRleHRcbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiByZXNwb25zZSBvYmplY3RzIChUT0RPOiB0byBiZSBjaGFuZ2VkKVxuICogQHByaXZhdGVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5mdW5jdGlvbiBjYWxsQm91bmRBY3Rpb24oc0FjdGlvbk5hbWU6IHN0cmluZywgY29udGV4dHM6IGFueSwgb01vZGVsOiBhbnksIG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRpZiAoIWNvbnRleHRzIHx8IGNvbnRleHRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdC8vSW4gRnJlZXN0eWxlIGFwcHMgYm91bmQgYWN0aW9ucyBjYW4gaGF2ZSBubyBjb250ZXh0XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFwiQm91bmQgYWN0aW9ucyBhbHdheXMgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGNvbnRleHRcIik7XG5cdH1cblx0Ly8gdGhpcyBtZXRob2QgZWl0aGVyIGFjY2VwdHMgc2luZ2xlIGNvbnRleHQgb3IgYW4gYXJyYXkgb2YgY29udGV4dHNcblx0Ly8gVE9ETzogUmVmYWN0b3IgdG8gYW4gdW5hbWJpZ3VvcyBBUElcblx0Y29uc3QgaXNDYWxsZWRXaXRoQXJyYXkgPSBBcnJheS5pc0FycmF5KGNvbnRleHRzKTtcblxuXHQvLyBpbiBjYXNlIG9mIHNpbmdsZSBjb250ZXh0IHdyYXAgaW50byBhbiBhcnJheSBmb3IgY2FsbGVkIG1ldGhvZHMgKGVzcC4gY2FsbEFjdGlvbilcblx0bVBhcmFtZXRlcnMuYUNvbnRleHRzID0gaXNDYWxsZWRXaXRoQXJyYXkgPyBjb250ZXh0cyA6IFtjb250ZXh0c107XG5cblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHQvLyBBbmFseXppbmcgbWV0YU1vZGVsUGF0aCBmb3IgYWN0aW9uIG9ubHkgZnJvbSBmaXJzdCBjb250ZXh0IHNlZW1zIHdlaXJkLCBidXQgcHJvYmFibHkgd29ya3MgaW4gYWxsIGV4aXN0aW5nIHN6ZW5hcmlvcyAtIGlmIHNldmVyYWwgY29udGV4dHMgYXJlIHBhc3NlZCwgdGhleSBwcm9iYWJseVxuXHRcdC8vIGJlbG9uZyB0byB0aGUgc2FtZSBtZXRhbW9kZWxwYXRoLiBUT0RPOiBDaGVjaywgd2hldGhlciB0aGlzIGNhbiBiZSBpbXByb3ZlZCAvIHN6ZW5hcmlvcyB3aXRoIGRpZmZlcmVudCBtZXRhTW9kZWxQYXRocyBtaWdodCBleGlzdFxuXHRcdHNBY3Rpb25QYXRoID0gYCR7b01ldGFNb2RlbC5nZXRNZXRhUGF0aChtUGFyYW1ldGVycy5hQ29udGV4dHNbMF0uZ2V0UGF0aCgpKX0vJHtzQWN0aW9uTmFtZX1gLFxuXHRcdG9Cb3VuZEFjdGlvbiA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7c0FjdGlvblBhdGh9L0AkdWk1Lm92ZXJsb2FkLzBgKTtcblx0bVBhcmFtZXRlcnMuaXNDcml0aWNhbEFjdGlvbiA9IGdldElzQWN0aW9uQ3JpdGljYWwob01ldGFNb2RlbCwgc0FjdGlvblBhdGgsIG1QYXJhbWV0ZXJzLmFDb250ZXh0cywgb0JvdW5kQWN0aW9uKTtcblxuXHQvLyBQcm9taXNlIHJldHVybmVkIGJ5IGNhbGxBY3Rpb24gY3VycmVudGx5IGlzIHJlamVjdGVkIGluIGNhc2Ugb2YgZXhlY3V0aW9uIGZvciBtdWx0aXBsZSBjb250ZXh0cyBwYXJ0bHkgZmFpbGluZy4gVGhpcyBzaG91bGQgYmUgY2hhbmdlZCAoc29tZSBmYWlsaW5nIGNvbnRleHRzIGRvIG5vdCBtZWFuXG5cdC8vIHRoYXQgZnVuY3Rpb24gZGlkIG5vdCBmdWxmaWxsIGl0cyB0YXNrKSwgYnV0IGFzIHRoaXMgaXMgYSBiaWdnZXIgcmVmYWN0b3JpbmcsIGZvciB0aGUgdGltZSBiZWluZyB3ZSBuZWVkIHRvIGRlYWwgd2l0aCB0aGF0IGF0IHRoZSBjYWxsaW5nIHBsYWNlIChpLmUuIGhlcmUpXG5cdC8vID0+IHByb3ZpZGUgdGhlIHNhbWUgaGFuZGxlciAobWFwcGluZyBiYWNrIGZyb20gYXJyYXkgdG8gc2luZ2xlIHJlc3VsdC9lcnJvciBpZiBuZWVkZWQpIGZvciByZXNvbHZlZC9yZWplY3RlZCBjYXNlXG5cdGNvbnN0IGV4dHJhY3RTaW5nbGVSZXN1bHQgPSBmdW5jdGlvbiAocmVzdWx0OiBhbnkpIHtcblx0XHQvLyBzaW5nbGUgYWN0aW9uIGNvdWxkIGJlIHJlc29sdmVkIG9yIHJlamVjdGVkXG5cdFx0aWYgKHJlc3VsdFswXS5zdGF0dXMgPT09IFwiZnVsZmlsbGVkXCIpIHtcblx0XHRcdHJldHVybiByZXN1bHRbMF0udmFsdWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEluIGNhc2Ugb2YgZGlhbG9nIGNhbmNlbGxhdGlvbiwgbm8gYXJyYXkgaXMgcmV0dXJuZWQgPT4gdGhyb3cgdGhlIHJlc3VsdC5cblx0XHRcdC8vIElkZWFsbHksIGRpZmZlcmVudGlhdGluZyBzaG91bGQgbm90IGJlIG5lZWRlZCBoZXJlID0+IFRPRE86IEZpbmQgYmV0dGVyIHNvbHV0aW9uIHdoZW4gc2VwYXJhdGluZyBkaWFsb2cgaGFuZGxpbmcgKHNpbmdsZSBvYmplY3Qgd2l0aCBzaW5nbGUgcmVzdWx0KSBmcm9tIGJhY2tlbmRcblx0XHRcdC8vIGV4ZWN1dGlvbiAocG90ZW50aWFsbHkgbXVsdGlwbGUgb2JqZWN0cylcblx0XHRcdHRocm93IHJlc3VsdFswXS5yZWFzb24gfHwgcmVzdWx0O1xuXHRcdH1cblx0fTtcblxuXHRyZXR1cm4gY2FsbEFjdGlvbihzQWN0aW9uTmFtZSwgb01vZGVsLCBvQm91bmRBY3Rpb24sIG9BcHBDb21wb25lbnQsIG1QYXJhbWV0ZXJzKS50aGVuKFxuXHRcdChyZXN1bHQ6IGFueSkgPT4ge1xuXHRcdFx0aWYgKGlzQ2FsbGVkV2l0aEFycmF5KSB7XG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZXh0cmFjdFNpbmdsZVJlc3VsdChyZXN1bHQpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0KHJlc3VsdDogYW55KSA9PiB7XG5cdFx0XHRpZiAoaXNDYWxsZWRXaXRoQXJyYXkpIHtcblx0XHRcdFx0dGhyb3cgcmVzdWx0O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGV4dHJhY3RTaW5nbGVSZXN1bHQocmVzdWx0KTtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG59XG4vKipcbiAqIENhbGxzIGFuIGFjdGlvbiBpbXBvcnQuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAc3RhdGljXG4gKiBAbmFtZSBzYXAuZmUuY29yZS5hY3Rpb25zLm9wZXJhdGlvbnMuY2FsbEFjdGlvbkltcG9ydFxuICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmFjdGlvbnMub3BlcmF0aW9uc1xuICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24gaW1wb3J0IHRvIGJlIGNhbGxlZFxuICogQHBhcmFtIG9Nb2RlbCBBbiBpbnN0YW5jZSBvZiBhbiBPRGF0YSBWNCBtb2RlbFxuICogQHBhcmFtIG9BcHBDb21wb25lbnQgVGhlIEFwcENvbXBvbmVudFxuICogQHBhcmFtIFttUGFyYW1ldGVyc10gT3B0aW9uYWwsIGNhbiBjb250YWluIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMucGFyYW1ldGVyVmFsdWVzXSBBIG1hcCBvZiBhY3Rpb24gcGFyYW1ldGVyIG5hbWVzIGFuZCBwcm92aWRlZCB2YWx1ZXNcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMubGFiZWxdIEEgaHVtYW4tcmVhZGFibGUgbGFiZWwgZm9yIHRoZSBhY3Rpb25cbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuc2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZ10gSWYgc2V0IGFuZCBpZiBwYXJhbWV0ZXJzIGV4aXN0IHRoZSB1c2VyIHJldHJpZXZlcyBhIGRpYWxvZyB0byBmaWxsIGluIHBhcmFtZXRlcnMsIGlmIGFjdGlvblBhcmFtZXRlcnMgYXJlIHBhc3NlZCB0aGV5IGFyZSBzaG93biB0byB0aGUgdXNlclxuICogQHBhcmFtIFttUGFyYW1ldGVycy5vblN1Ym1pdHRlZF0gRnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIG9uY2UgdGhlIGFjdGlvbnMgYXJlIHN1Ym1pdHRlZCB3aXRoIGFuIGFycmF5IG9mIHByb21pc2VzXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmRlZmF1bHRQYXJhbWV0ZXJzXSBDYW4gY29udGFpbiBkZWZhdWx0IHBhcmFtZXRlcnMgZnJvbSBGTFAgdXNlciBkZWZhdWx0c1xuICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyB3aXRoIGFuIGFycmF5IG9mIHJlc3BvbnNlIG9iamVjdHMgKFRPRE86IHRvIGJlIGNoYW5nZWQpXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIGNhbGxBY3Rpb25JbXBvcnQoc0FjdGlvbk5hbWU6IHN0cmluZywgb01vZGVsOiBhbnksIG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRpZiAoIW9Nb2RlbCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdChcIkFjdGlvbiBleHBlY3RzIGEgbW9kZWwvY29udGV4dCBmb3IgZXhlY3V0aW9uXCIpO1xuXHR9XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0c0FjdGlvblBhdGggPSBvTW9kZWwuYmluZENvbnRleHQoYC8ke3NBY3Rpb25OYW1lfWApLmdldFBhdGgoKSxcblx0XHRvQWN0aW9uSW1wb3J0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgLyR7b01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzQWN0aW9uUGF0aCkuZ2V0T2JqZWN0KFwiJEFjdGlvblwiKX0vMGApO1xuXHRtUGFyYW1ldGVycy5pc0NyaXRpY2FsQWN0aW9uID0gZ2V0SXNBY3Rpb25Dcml0aWNhbChvTWV0YU1vZGVsLCBgJHtzQWN0aW9uUGF0aH0vQCR1aTUub3ZlcmxvYWRgKTtcblx0cmV0dXJuIGNhbGxBY3Rpb24oc0FjdGlvbk5hbWUsIG9Nb2RlbCwgb0FjdGlvbkltcG9ydCwgb0FwcENvbXBvbmVudCwgbVBhcmFtZXRlcnMpO1xufVxuZnVuY3Rpb24gY2FsbEJvdW5kRnVuY3Rpb24oc0Z1bmN0aW9uTmFtZTogc3RyaW5nLCBjb250ZXh0OiBhbnksIG9Nb2RlbDogYW55KSB7XG5cdGlmICghY29udGV4dCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdChcIkJvdW5kIGZ1bmN0aW9ucyBhbHdheXMgcmVxdWlyZXMgYSBjb250ZXh0XCIpO1xuXHR9XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0c0Z1bmN0aW9uUGF0aCA9IGAke29NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoY29udGV4dC5nZXRQYXRoKCkpfS8ke3NGdW5jdGlvbk5hbWV9YCxcblx0XHRvQm91bmRGdW5jdGlvbiA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0Z1bmN0aW9uUGF0aCk7XG5cdHJldHVybiBfZXhlY3V0ZUZ1bmN0aW9uKHNGdW5jdGlvbk5hbWUsIG9Nb2RlbCwgb0JvdW5kRnVuY3Rpb24sIGNvbnRleHQpO1xufVxuLyoqXG4gKiBDYWxscyBhIGZ1bmN0aW9uIGltcG9ydC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBzdGF0aWNcbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMub3BlcmF0aW9ucy5jYWxsRnVuY3Rpb25JbXBvcnRcbiAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5hY3Rpb25zLm9wZXJhdGlvbnNcbiAqIEBwYXJhbSBzRnVuY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWRcbiAqIEBwYXJhbSBvTW9kZWwgQW4gaW5zdGFuY2Ugb2YgYW4gT0RhdGEgdjQgbW9kZWxcbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXNcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNhbGxGdW5jdGlvbkltcG9ydChzRnVuY3Rpb25OYW1lOiBzdHJpbmcsIG9Nb2RlbDogYW55KSB7XG5cdGlmICghc0Z1bmN0aW9uTmFtZSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxuXHRjb25zdCBvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdHNGdW5jdGlvblBhdGggPSBvTW9kZWwuYmluZENvbnRleHQoYC8ke3NGdW5jdGlvbk5hbWV9YCkuZ2V0UGF0aCgpLFxuXHRcdG9GdW5jdGlvbkltcG9ydCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYC8ke29NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0Z1bmN0aW9uUGF0aCkuZ2V0T2JqZWN0KFwiJEZ1bmN0aW9uXCIpfS8wYCk7XG5cdHJldHVybiBfZXhlY3V0ZUZ1bmN0aW9uKHNGdW5jdGlvbk5hbWUsIG9Nb2RlbCwgb0Z1bmN0aW9uSW1wb3J0KTtcbn1cbmZ1bmN0aW9uIF9leGVjdXRlRnVuY3Rpb24oc0Z1bmN0aW9uTmFtZTogYW55LCBvTW9kZWw6IGFueSwgb0Z1bmN0aW9uOiBhbnksIGNvbnRleHQ/OiBhbnkpIHtcblx0bGV0IHNHcm91cElkO1xuXHRpZiAoIW9GdW5jdGlvbiB8fCAhb0Z1bmN0aW9uLmdldE9iamVjdCgpKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgRnVuY3Rpb24gJHtzRnVuY3Rpb25OYW1lfSBub3QgZm91bmRgKSk7XG5cdH1cblx0aWYgKGNvbnRleHQpIHtcblx0XHRvRnVuY3Rpb24gPSBvTW9kZWwuYmluZENvbnRleHQoYCR7c0Z1bmN0aW9uTmFtZX0oLi4uKWAsIGNvbnRleHQpO1xuXHRcdHNHcm91cElkID0gXCJmdW5jdGlvbkdyb3VwXCI7XG5cdH0gZWxzZSB7XG5cdFx0b0Z1bmN0aW9uID0gb01vZGVsLmJpbmRDb250ZXh0KGAvJHtzRnVuY3Rpb25OYW1lfSguLi4pYCk7XG5cdFx0c0dyb3VwSWQgPSBcImZ1bmN0aW9uSW1wb3J0XCI7XG5cdH1cblx0Y29uc3Qgb0Z1bmN0aW9uUHJvbWlzZSA9IG9GdW5jdGlvbi5leGVjdXRlKHNHcm91cElkKTtcblx0b01vZGVsLnN1Ym1pdEJhdGNoKHNHcm91cElkKTtcblx0cmV0dXJuIG9GdW5jdGlvblByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIG9GdW5jdGlvbi5nZXRCb3VuZENvbnRleHQoKTtcblx0fSk7XG59XG5mdW5jdGlvbiBjYWxsQWN0aW9uKHNBY3Rpb25OYW1lOiBhbnksIG9Nb2RlbDogYW55LCBvQWN0aW9uOiBhbnksIG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkLCByZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQpIHtcblx0XHRsZXQgbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnM6IGFueSA9IHt9O1xuXHRcdGxldCBmbkRpYWxvZztcblx0XHRsZXQgb0FjdGlvblByb21pc2U7XG5cdFx0Ly9sZXQgZmFpbGVkQWN0aW9uUHJvbWlzZTogYW55O1xuXHRcdGNvbnN0IHNBY3Rpb25MYWJlbCA9IG1QYXJhbWV0ZXJzLmxhYmVsO1xuXHRcdGNvbnN0IGJTa2lwUGFyYW1ldGVyRGlhbG9nID0gbVBhcmFtZXRlcnMuc2tpcFBhcmFtZXRlckRpYWxvZztcblx0XHRjb25zdCBhQ29udGV4dHMgPSBtUGFyYW1ldGVycy5hQ29udGV4dHM7XG5cdFx0Y29uc3QgYklzQ3JlYXRlQWN0aW9uID0gbVBhcmFtZXRlcnMuYklzQ3JlYXRlQWN0aW9uO1xuXHRcdGNvbnN0IGJJc0NyaXRpY2FsQWN0aW9uID0gbVBhcmFtZXRlcnMuaXNDcml0aWNhbEFjdGlvbjtcblx0XHRsZXQgb01ldGFNb2RlbDtcblx0XHRsZXQgc01ldGFQYXRoO1xuXHRcdGxldCBzTWVzc2FnZXNQYXRoOiBhbnk7XG5cdFx0bGV0IGlNZXNzYWdlU2lkZUVmZmVjdDtcblx0XHRsZXQgYklzU2FtZUVudGl0eTtcblx0XHRsZXQgb1JldHVyblR5cGU7XG5cdFx0bGV0IGJWYWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnM7XG5cdFx0Y29uc3QgYWN0aW9uRGVmaW5pdGlvbiA9IG9BY3Rpb24uZ2V0T2JqZWN0KCk7XG5cdFx0aWYgKCFvQWN0aW9uIHx8ICFvQWN0aW9uLmdldE9iamVjdCgpKSB7XG5cdFx0XHRyZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgQWN0aW9uICR7c0FjdGlvbk5hbWV9IG5vdCBmb3VuZGApKTtcblx0XHR9XG5cblx0XHQvLyBHZXQgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGFjdGlvblxuXHRcdGNvbnN0IGFBY3Rpb25QYXJhbWV0ZXJzID0gZ2V0QWN0aW9uUGFyYW1ldGVycyhvQWN0aW9uKTtcblxuXHRcdC8vIENoZWNrIGlmIHRoZSBhY3Rpb24gaGFzIHBhcmFtZXRlcnMgYW5kIHdvdWxkIG5lZWQgYSBwYXJhbWV0ZXIgZGlhbG9nXG5cdFx0Ly8gVGhlIHBhcmFtZXRlciBSZXN1bHRJc0FjdGl2ZUVudGl0eSBpcyBhbHdheXMgaGlkZGVuIGluIHRoZSBkaWFsb2chIEhlbmNlIGlmXG5cdFx0Ly8gdGhpcyBpcyB0aGUgb25seSBwYXJhbWV0ZXIsIHRoaXMgaXMgdHJlYXRlZCBhcyBubyBwYXJhbWV0ZXIgaGVyZSBiZWNhdXNlIHRoZVxuXHRcdC8vIGRpYWxvZyB3b3VsZCBiZSBlbXB0eSFcblx0XHQvLyBGSVhNRTogU2hvdWxkIG9ubHkgaWdub3JlIHRoaXMgaWYgdGhpcyBpcyBhICdjcmVhdGUnIGFjdGlvbiwgb3RoZXJ3aXNlIGl0IGlzIGp1c3Qgc29tZSBub3JtYWwgcGFyYW1ldGVyIHRoYXQgaGFwcGVucyB0byBoYXZlIHRoaXMgbmFtZVxuXHRcdGNvbnN0IGJBY3Rpb25OZWVkc1BhcmFtZXRlckRpYWxvZyA9XG5cdFx0XHRhQWN0aW9uUGFyYW1ldGVycy5sZW5ndGggPiAwICYmICEoYUFjdGlvblBhcmFtZXRlcnMubGVuZ3RoID09PSAxICYmIGFBY3Rpb25QYXJhbWV0ZXJzWzBdLiROYW1lID09PSBcIlJlc3VsdElzQWN0aXZlRW50aXR5XCIpO1xuXG5cdFx0Ly8gUHJvdmlkZWQgdmFsdWVzIGZvciB0aGUgYWN0aW9uIHBhcmFtZXRlcnMgZnJvbSBpbnZva2VBY3Rpb24gY2FsbFxuXHRcdGNvbnN0IGFQYXJhbWV0ZXJWYWx1ZXMgPSBtUGFyYW1ldGVycy5wYXJhbWV0ZXJWYWx1ZXM7XG5cblx0XHQvLyBEZXRlcm1pbmUgc3RhcnR1cCBwYXJhbWV0ZXJzIGlmIHByb3ZpZGVkXG5cdFx0Y29uc3Qgb0NvbXBvbmVudERhdGEgPSBvQXBwQ29tcG9uZW50LmdldENvbXBvbmVudERhdGEoKTtcblx0XHRjb25zdCBvU3RhcnR1cFBhcmFtZXRlcnMgPSAob0NvbXBvbmVudERhdGEgJiYgb0NvbXBvbmVudERhdGEuc3RhcnR1cFBhcmFtZXRlcnMpIHx8IHt9O1xuXG5cdFx0Ly8gSW4gY2FzZSBhbiBhY3Rpb24gcGFyYW1ldGVyIGlzIG5lZWRlZCwgYW5kIHdlIHNoYWxsIHNraXAgdGhlIGRpYWxvZywgY2hlY2sgaWYgdmFsdWVzIGFyZSBwcm92aWRlZCBmb3IgYWxsIHBhcmFtZXRlcnNcblx0XHRpZiAoYkFjdGlvbk5lZWRzUGFyYW1ldGVyRGlhbG9nICYmIGJTa2lwUGFyYW1ldGVyRGlhbG9nKSB7XG5cdFx0XHRiVmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzID0gX3ZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycyhcblx0XHRcdFx0YklzQ3JlYXRlQWN0aW9uLFxuXHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0YVBhcmFtZXRlclZhbHVlcyxcblx0XHRcdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdC8vIERlcGVuZGluZyBvbiB0aGUgcHJldmlvdXNseSBkZXRlcm1pbmVkIGRhdGEsIGVpdGhlciBzZXQgYSBkaWFsb2cgb3IgbGVhdmUgaXQgZW1wdHkgd2hpY2hcblx0XHQvLyB3aWxsIGxlYWQgdG8gZGlyZWN0IGV4ZWN1dGlvbiBvZiB0aGUgYWN0aW9uIHdpdGhvdXQgYSBkaWFsb2dcblx0XHRmbkRpYWxvZyA9IG51bGw7XG5cdFx0aWYgKGJBY3Rpb25OZWVkc1BhcmFtZXRlckRpYWxvZykge1xuXHRcdFx0aWYgKCEoYlNraXBQYXJhbWV0ZXJEaWFsb2cgJiYgYlZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycykpIHtcblx0XHRcdFx0Zm5EaWFsb2cgPSBzaG93QWN0aW9uUGFyYW1ldGVyRGlhbG9nO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoYklzQ3JpdGljYWxBY3Rpb24pIHtcblx0XHRcdGZuRGlhbG9nID0gY29uZmlybUNyaXRpY2FsQWN0aW9uO1xuXHRcdH1cblxuXHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzID0ge1xuXHRcdFx0Zm5PblN1Ym1pdHRlZDogbVBhcmFtZXRlcnMub25TdWJtaXR0ZWQsXG5cdFx0XHRmbk9uUmVzcG9uc2U6IG1QYXJhbWV0ZXJzLm9uUmVzcG9uc2UsXG5cdFx0XHRhY3Rpb25OYW1lOiBzQWN0aW9uTmFtZSxcblx0XHRcdG1vZGVsOiBvTW9kZWwsXG5cdFx0XHRhQWN0aW9uUGFyYW1ldGVyczogYUFjdGlvblBhcmFtZXRlcnMsXG5cdFx0XHRiR2V0Qm91bmRDb250ZXh0OiBtUGFyYW1ldGVycy5iR2V0Qm91bmRDb250ZXh0LFxuXHRcdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBtUGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24sXG5cdFx0XHRsYWJlbDogbVBhcmFtZXRlcnMubGFiZWwsXG5cdFx0XHRzZWxlY3RlZEl0ZW1zOiBtUGFyYW1ldGVycy5zZWxlY3RlZEl0ZW1zXG5cdFx0fTtcblx0XHRpZiAob0FjdGlvbi5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKSkge1xuXHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0ICYmIG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucykge1xuXHRcdFx0XHRvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0XHRzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKGFDb250ZXh0c1swXS5nZXRQYXRoKCkpO1xuXHRcdFx0XHRzTWVzc2FnZXNQYXRoID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk1lc3NhZ2VzLyRQYXRoYCk7XG5cblx0XHRcdFx0aWYgKHNNZXNzYWdlc1BhdGgpIHtcblx0XHRcdFx0XHRpTWVzc2FnZVNpZGVFZmZlY3QgPSBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMuZmluZEluZGV4KGZ1bmN0aW9uIChleHA6IGFueSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHR5cGVvZiBleHAgPT09IFwic3RyaW5nXCIgJiYgZXhwID09PSBzTWVzc2FnZXNQYXRoO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0Ly8gQWRkIFNBUF9NZXNzYWdlcyBieSBkZWZhdWx0IGlmIG5vdCBhbm5vdGF0ZWQgYnkgc2lkZSBlZmZlY3RzLCBhY3Rpb24gZG9lcyBub3QgcmV0dXJuIGEgY29sbGVjdGlvbiBhbmRcblx0XHRcdFx0XHQvLyB0aGUgcmV0dXJuIHR5cGUgaXMgdGhlIHNhbWUgYXMgdGhlIGJvdW5kIHR5cGVcblx0XHRcdFx0XHRvUmV0dXJuVHlwZSA9IG9BY3Rpb24uZ2V0T2JqZWN0KFwiJFJldHVyblR5cGVcIik7XG5cdFx0XHRcdFx0YklzU2FtZUVudGl0eSA9XG5cdFx0XHRcdFx0XHRvUmV0dXJuVHlwZSAmJiAhb1JldHVyblR5cGUuJGlzQ29sbGVjdGlvbiAmJiBvQWN0aW9uLmdldE1vZGVsKCkuZ2V0T2JqZWN0KHNNZXRhUGF0aCkuJFR5cGUgPT09IG9SZXR1cm5UeXBlLiRUeXBlO1xuXG5cdFx0XHRcdFx0aWYgKGlNZXNzYWdlU2lkZUVmZmVjdCA+IC0xIHx8IGJJc1NhbWVFbnRpdHkpIHtcblx0XHRcdFx0XHRcdC8vIHRoZSBtZXNzYWdlIHBhdGggaXMgYW5ub3RhdGVkIGFzIHNpZGUgZWZmZWN0LiBBcyB0aGVyZSdzIG5vIGJpbmRpbmcgZm9yIGl0IGFuZCB0aGUgbW9kZWwgZG9lcyBjdXJyZW50bHkgbm90IGFsbG93XG5cdFx0XHRcdFx0XHQvLyB0byBhZGQgaXQgYXQgYSBsYXRlciBwb2ludCBvZiB0aW1lIHdlIGhhdmUgdG8gdGFrZSBjYXJlIGl0J3MgcGFydCBvZiB0aGUgJHNlbGVjdCBvZiB0aGUgUE9TVCwgdGhlcmVmb3JlIG1vdmluZyBpdC5cblx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycyA9IG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycyB8fCB7fTtcblxuXHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRvQWN0aW9uLmdldE9iamVjdChgJFJldHVyblR5cGUvJFR5cGUvJHtzTWVzc2FnZXNQYXRofWApICYmXG5cdFx0XHRcdFx0XHRcdCghbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3QgfHxcblx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdC5zcGxpdChcIixcIikuaW5kZXhPZihzTWVzc2FnZXNQYXRoKSA9PT0gLTEpXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3QgPSBtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdFxuXHRcdFx0XHRcdFx0XHRcdD8gYCR7bVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3R9LCR7c01lc3NhZ2VzUGF0aH1gXG5cdFx0XHRcdFx0XHRcdFx0OiBzTWVzc2FnZXNQYXRoO1xuXHRcdFx0XHRcdFx0XHQvLyBBZGQgc2lkZSBlZmZlY3RzIGF0IGVudGl0eSBsZXZlbCBiZWNhdXNlICRzZWxlY3Qgc3RvcHMgdGhlc2UgYmVpbmcgcmV0dXJuZWQgYnkgdGhlIGFjdGlvblxuXHRcdFx0XHRcdFx0XHQvLyBPbmx5IGlmIG5vIG90aGVyIHNpZGUgZWZmZWN0cyB3ZXJlIGFkZGVkIGZvciBNZXNzYWdlc1xuXHRcdFx0XHRcdFx0XHRpZiAoaU1lc3NhZ2VTaWRlRWZmZWN0ID09PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucy5wdXNoKFwiKlwiKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC50cmlnZ2VyQWN0aW9ucy5sZW5ndGggPT09IDAgJiYgaU1lc3NhZ2VTaWRlRWZmZWN0ID4gLTEpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBubyB0cmlnZ2VyIGFjdGlvbiB0aGVyZWZvcmUgbm8gbmVlZCB0byByZXF1ZXN0IG1lc3NhZ2VzIGFnYWluXG5cdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLnNwbGljZShpTWVzc2FnZVNpZGVFZmZlY3QsIDEpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFDb250ZXh0cyA9IGFDb250ZXh0cztcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycyA9IG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycztcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0ID0gbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3Q7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5iR3JvdXBlZCA9IG1QYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyA9PT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldDtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0ID0gbVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXAgPSBtUGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXA7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pc0NyZWF0ZUFjdGlvbiA9IGJJc0NyZWF0ZUFjdGlvbjtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmJPYmplY3RQYWdlID0gbVBhcmFtZXRlcnMuYk9iamVjdFBhZ2U7XG5cdFx0XHRpZiAobVBhcmFtZXRlcnMuY29udHJvbElkKSB7XG5cdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmNvbnRyb2wgPSBtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sLmJ5SWQobVBhcmFtZXRlcnMuY29udHJvbElkKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmNvbnRyb2wgPSBtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoYklzQ3JlYXRlQWN0aW9uKSB7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5iSXNDcmVhdGVBY3Rpb24gPSBiSXNDcmVhdGVBY3Rpb247XG5cdFx0fVxuXHRcdC8vY2hlY2sgZm9yIHNraXBwaW5nIHN0YXRpYyBhY3Rpb25zXG5cdFx0Y29uc3QgaXNTdGF0aWMgPSAoYWN0aW9uRGVmaW5pdGlvbi4kUGFyYW1ldGVyIHx8IFtdKS5zb21lKChhUGFyYW1ldGVyOiBhbnkpID0+IHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdCgoYWN0aW9uRGVmaW5pdGlvbi4kRW50aXR5U2V0UGF0aCAmJiBhY3Rpb25EZWZpbml0aW9uLiRFbnRpdHlTZXRQYXRoID09PSBhUGFyYW1ldGVyLiROYW1lKSB8fCBhY3Rpb25EZWZpbml0aW9uLiRJc0JvdW5kKSAmJlxuXHRcdFx0XHRhUGFyYW1ldGVyLiRpc0NvbGxlY3Rpb25cblx0XHRcdCk7XG5cdFx0fSk7XG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaXNTdGF0aWMgPSBpc1N0YXRpYztcblx0XHRpZiAoZm5EaWFsb2cpIHtcblx0XHRcdG9BY3Rpb25Qcm9taXNlID0gZm5EaWFsb2coXG5cdFx0XHRcdHNBY3Rpb25OYW1lLFxuXHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRzQWN0aW9uTGFiZWwsXG5cdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0YVBhcmFtZXRlclZhbHVlcyxcblx0XHRcdFx0b0FjdGlvbixcblx0XHRcdFx0bVBhcmFtZXRlcnMucGFyZW50Q29udHJvbCxcblx0XHRcdFx0bVBhcmFtZXRlcnMuZW50aXR5U2V0TmFtZSxcblx0XHRcdFx0bVBhcmFtZXRlcnMubWVzc2FnZUhhbmRsZXJcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gb0FjdGlvblByb21pc2Vcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9PcGVyYXRpb25SZXN1bHQ6IGFueSkge1xuXHRcdFx0XHRcdGFmdGVyQWN0aW9uUmVzb2x1dGlvbihtUGFyYW1ldGVycywgbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMsIGFjdGlvbkRlZmluaXRpb24pO1xuXHRcdFx0XHRcdHJlc29sdmUob09wZXJhdGlvblJlc3VsdCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob09wZXJhdGlvblJlc3VsdDogYW55KSB7XG5cdFx0XHRcdFx0cmVqZWN0KG9PcGVyYXRpb25SZXN1bHQpO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gVGFrZSBvdmVyIGFsbCBwcm92aWRlZCBwYXJhbWV0ZXIgdmFsdWVzIGFuZCBjYWxsIHRoZSBhY3Rpb24uXG5cdFx0XHQvLyBUaGlzIHNoYWxsIG9ubHkgaGFwcGVuIGlmIHZhbHVlcyBhcmUgcHJvdmlkZWQgZm9yIGFsbCB0aGUgcGFyYW1ldGVycywgb3RoZXJ3aXNlIHRoZSBwYXJhbWV0ZXIgZGlhbG9nIHNoYWxsIGJlIHNob3duIHdoaWNoIGlzIGVuc3VyZWQgZWFybGllclxuXHRcdFx0aWYgKGFQYXJhbWV0ZXJWYWx1ZXMpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBpIGluIG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFBY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnNbaV0udmFsdWUgPSBhUGFyYW1ldGVyVmFsdWVzPy5maW5kKFxuXHRcdFx0XHRcdFx0KGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudC5uYW1lID09PSBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZVxuXHRcdFx0XHRcdCk/LnZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGkgaW4gbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVyc1tpXS52YWx1ZSA9XG5cdFx0XHRcdFx0XHRvU3RhcnR1cFBhcmFtZXRlcnNbbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWVdPy5bMF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGxldCBvT3BlcmF0aW9uUmVzdWx0OiBhbnk7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycz8uaW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiNDEyRXhlY3V0ZWRcIiwgZmFsc2UpO1xuXHRcdFx0XHRvT3BlcmF0aW9uUmVzdWx0ID0gYXdhaXQgX2V4ZWN1dGVBY3Rpb24oXG5cdFx0XHRcdFx0b0FwcENvbXBvbmVudCxcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0XHRtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sLFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLm1lc3NhZ2VIYW5kbGVyXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Y29uc3QgbWVzc2FnZXMgPSBDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCkuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQgJiZcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcIjQxMkV4ZWN1dGVkXCIpICYmXG5cdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJzdHJpY3RIYW5kbGluZ0ZhaWxzXCIpPy5sZW5ndGhcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXG5cdFx0XHRcdFx0XHRcIkRlbGF5TWVzc2FnZXNcIixcblx0XHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiRGVsYXlNZXNzYWdlc1wiKS5jb25jYXQobWVzc2FnZXMpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhZnRlckFjdGlvblJlc29sdXRpb24obVBhcmFtZXRlcnMsIG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLCBhY3Rpb25EZWZpbml0aW9uKTtcblx0XHRcdFx0cmVzb2x2ZShvT3BlcmF0aW9uUmVzdWx0KTtcblx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRyZWplY3Qob09wZXJhdGlvblJlc3VsdCk7XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQgJiZcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcIjQxMkV4ZWN1dGVkXCIpICYmXG5cdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJzdHJpY3RIYW5kbGluZ0ZhaWxzXCIpPy5sZW5ndGhcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGNvbnN0IHN0cmljdEhhbmRsaW5nRmFpbHMgPSBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInN0cmljdEhhbmRsaW5nRmFpbHNcIik7XG5cdFx0XHRcdFx0XHRjb25zdCBhRmFpbGVkQ29udGV4dHMgPSBbXSBhcyBhbnk7XG5cdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ0ZhaWxzLmZvckVhY2goZnVuY3Rpb24gKGZhaWw6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRhRmFpbGVkQ29udGV4dHMucHVzaChmYWlsLm9BY3Rpb24uZ2V0Q29udGV4dCgpKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUNvbnRleHRzID0gYUZhaWxlZENvbnRleHRzO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0ZhaWxlZE9wZXJhdGlvblJlc3VsdCA9IGF3YWl0IF9leGVjdXRlQWN0aW9uKFxuXHRcdFx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMucGFyZW50Q29udHJvbCxcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMubWVzc2FnZUhhbmRsZXJcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCkuYWRkTWVzc2FnZXMobUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJEZWxheU1lc3NhZ2VzXCIpKTtcblx0XHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic3RyaWN0SGFuZGxpbmdGYWlsc1wiLCBbXSk7XG5cdFx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInByb2Nlc3NlZE1lc3NhZ2VJZHNcIiwgW10pO1xuXHRcdFx0XHRcdFx0YWZ0ZXJBY3Rpb25SZXNvbHV0aW9uKG1QYXJhbWV0ZXJzLCBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycywgYWN0aW9uRGVmaW5pdGlvbik7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKG9GYWlsZWRPcGVyYXRpb25SZXN1bHQpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKG9GYWlsZWRPcGVyYXRpb25SZXN1bHQpIHtcblx0XHRcdFx0XHRcdHJlamVjdChvRmFpbGVkT3BlcmF0aW9uUmVzdWx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0bVBhcmFtZXRlcnM/Lm1lc3NhZ2VIYW5kbGVyPy5zaG93TWVzc2FnZURpYWxvZygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59XG5mdW5jdGlvbiBjb25maXJtQ3JpdGljYWxBY3Rpb24oXG5cdHNBY3Rpb25OYW1lOiBhbnksXG5cdG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0c0FjdGlvbkxhYmVsOiBhbnksXG5cdG1QYXJhbWV0ZXJzOiBhbnksXG5cdGFBY3Rpb25QYXJhbWV0ZXJzOiBhbnksXG5cdGFQYXJhbWV0ZXJWYWx1ZXM6IGFueSxcblx0b0FjdGlvbkNvbnRleHQ6IGFueSxcblx0b1BhcmVudENvbnRyb2w6IGFueSxcblx0ZW50aXR5U2V0TmFtZTogYW55LFxuXHRtZXNzYWdlSGFuZGxlcjogYW55XG4pIHtcblx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRsZXQgYm91bmRBY3Rpb25OYW1lID0gc0FjdGlvbk5hbWUgPyBzQWN0aW9uTmFtZSA6IG51bGw7XG5cdFx0Ym91bmRBY3Rpb25OYW1lID1cblx0XHRcdGJvdW5kQWN0aW9uTmFtZS5pbmRleE9mKFwiLlwiKSA+PSAwID8gYm91bmRBY3Rpb25OYW1lLnNwbGl0KFwiLlwiKVtib3VuZEFjdGlvbk5hbWUuc3BsaXQoXCIuXCIpLmxlbmd0aCAtIDFdIDogYm91bmRBY3Rpb25OYW1lO1xuXHRcdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gYm91bmRBY3Rpb25OYW1lICYmIGVudGl0eVNldE5hbWUgPyBgJHtlbnRpdHlTZXROYW1lfXwke2JvdW5kQWN0aW9uTmFtZX1gIDogXCJcIjtcblx0XHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBvUGFyZW50Q29udHJvbC5nZXRDb250cm9sbGVyKCkub1Jlc291cmNlQnVuZGxlO1xuXHRcdGNvbnN0IHNDb25maXJtYXRpb25UZXh0ID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXG5cdFx0XHRcIkNfT1BFUkFUSU9OU19BQ1RJT05fQ09ORklSTV9NRVNTQUdFXCIsXG5cdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRudWxsLFxuXHRcdFx0c3VmZml4UmVzb3VyY2VLZXlcblx0XHQpO1xuXG5cdFx0TWVzc2FnZUJveC5jb25maXJtKHNDb25maXJtYXRpb25UZXh0LCB7XG5cdFx0XHRvbkNsb3NlOiBhc3luYyBmdW5jdGlvbiAoc0FjdGlvbjogYW55KSB7XG5cdFx0XHRcdGlmIChzQWN0aW9uID09PSBBY3Rpb24uT0spIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb09wZXJhdGlvbiA9IGF3YWl0IF9leGVjdXRlQWN0aW9uKG9BcHBDb21wb25lbnQsIG1QYXJhbWV0ZXJzLCBvUGFyZW50Q29udHJvbCwgbWVzc2FnZUhhbmRsZXIpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShvT3BlcmF0aW9uKTtcblx0XHRcdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VEaWFsb2coKTtcblx0XHRcdFx0XHRcdFx0cmVqZWN0KG9FcnJvcik7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRcdHJlamVjdChvRXJyb3IpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVBUE1BY3Rpb24oXG5cdG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0bVBhcmFtZXRlcnM6IGFueSxcblx0b1BhcmVudENvbnRyb2w6IGFueSxcblx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyLFxuXHRhQ29udGV4dHM6IGFueSxcblx0b0RpYWxvZzogYW55LFxuXHRhZnRlcjQxMjogYm9vbGVhblxuKSB7XG5cdGNvbnN0IGFSZXN1bHQgPSBhd2FpdCBfZXhlY3V0ZUFjdGlvbihvQXBwQ29tcG9uZW50LCBtUGFyYW1ldGVycywgb1BhcmVudENvbnRyb2wsIG1lc3NhZ2VIYW5kbGVyKTtcblx0Ly8gSWYgc29tZSBlbnRyaWVzIHdlcmUgc3VjY2Vzc2Z1bCwgYW5kIG90aGVycyBoYXZlIGZhaWxlZCwgdGhlIG92ZXJhbGwgcHJvY2VzcyBpcyBzdGlsbCBzdWNjZXNzZnVsLiBIb3dldmVyLCB0aGlzIHdhcyB0cmVhdGVkIGFzIHJlamVjdGlvblxuXHQvLyBiZWZvcmUsIGFuZCB0aGlzIGN1cnJlbnRseSBpcyBzdGlsbCBrZXB0LCBhcyBsb25nIGFzIGRpYWxvZyBoYW5kbGluZyBpcyBtaXhlZCB3aXRoIGJhY2tlbmQgcHJvY2VzcyBoYW5kbGluZy5cblx0Ly8gVE9ETzogUmVmYWN0b3IgdG8gb25seSByZWplY3QgaW4gY2FzZSBvZiBvdmVyYWxsIHByb2Nlc3MgZXJyb3IuXG5cdC8vIEZvciB0aGUgdGltZSBiZWluZzogbWFwIHRvIG9sZCBsb2dpYyB0byByZWplY3QgaWYgYXQgbGVhc3Qgb25lIGVudHJ5IGhhcyBmYWlsZWRcblx0aWYgKGFSZXN1bHQ/LnNvbWUoKG9TaW5nbGVSZXN1bHQ6IGFueSkgPT4gb1NpbmdsZVJlc3VsdC5zdGF0dXMgPT09IFwicmVqZWN0ZWRcIikpIHtcblx0XHR0aHJvdyBhUmVzdWx0O1xuXHR9XG5cblx0Y29uc3QgbWVzc2FnZXMgPSBDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCkuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRpZiAoXG5cdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQgJiZcblx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcIjQxMkV4ZWN1dGVkXCIpICYmXG5cdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJzdHJpY3RIYW5kbGluZ0ZhaWxzXCIpPy5sZW5ndGhcblx0KSB7XG5cdFx0aWYgKCFhZnRlcjQxMikge1xuXHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXG5cdFx0XHRcdFwiRGVsYXlNZXNzYWdlc1wiLFxuXHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcIkRlbGF5TWVzc2FnZXNcIikuY29uY2F0KG1lc3NhZ2VzKVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Q29yZS5nZXRNZXNzYWdlTWFuYWdlcigpLmFkZE1lc3NhZ2VzKG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiRGVsYXlNZXNzYWdlc1wiKSk7XG5cdFx0XHRpZiAobWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0XHRcdC8vIEJPVU5EIFRSQU5TSVRJT04gQVMgUEFSVCBPRiBTQVBfTUVTU0FHRVxuXHRcdFx0XHRtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZyh7XG5cdFx0XHRcdFx0b25CZWZvcmVTaG93TWVzc2FnZTogZnVuY3Rpb24gKGFNZXNzYWdlczogYW55LCBzaG93TWVzc2FnZVBhcmFtZXRlcnNJbjogYW55KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayhtUGFyYW1ldGVycywgYUNvbnRleHRzLCBvRGlhbG9nLCBhTWVzc2FnZXMsIHNob3dNZXNzYWdlUGFyYW1ldGVyc0luKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIGlmIChtZXNzYWdlcy5sZW5ndGgpIHtcblx0XHQvLyBCT1VORCBUUkFOU0lUSU9OIEFTIFBBUlQgT0YgU0FQX01FU1NBR0Vcblx0XHRtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZyh7XG5cdFx0XHRpc0FjdGlvblBhcmFtZXRlckRpYWxvZ09wZW46IG1QYXJhbWV0ZXJzPy5vRGlhbG9nLmlzT3BlbigpLFxuXHRcdFx0b25CZWZvcmVTaG93TWVzc2FnZTogZnVuY3Rpb24gKGFNZXNzYWdlczogYW55LCBzaG93TWVzc2FnZVBhcmFtZXRlcnNJbjogYW55KSB7XG5cdFx0XHRcdHJldHVybiBhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrKG1QYXJhbWV0ZXJzLCBhQ29udGV4dHMsIG9EaWFsb2csIGFNZXNzYWdlcywgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW4pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIGFSZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGFmdGVyQWN0aW9uUmVzb2x1dGlvbihtUGFyYW1ldGVyczogYW55LCBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVyczogYW55LCBhY3Rpb25EZWZpbml0aW9uOiBhbnkpIHtcblx0aWYgKFxuXHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0ICYmXG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwICYmXG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUNvbnRleHRzICYmXG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUNvbnRleHRzLmxlbmd0aCAmJlxuXHRcdGFjdGlvbkRlZmluaXRpb24uJElzQm91bmRcblx0KSB7XG5cdFx0Ly9jaGVjayBmb3Igc2tpcHBpbmcgc3RhdGljIGFjdGlvbnNcblx0XHRjb25zdCBpc1N0YXRpYyA9IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmlzU3RhdGljO1xuXHRcdGlmICghaXNTdGF0aWMpIHtcblx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChcblx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdEpTT04ucGFyc2UobUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRcdFx0bVBhcmFtZXRlcnMuc2VsZWN0ZWRJdGVtcyxcblx0XHRcdFx0XCJ0YWJsZVwiXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAobUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuY29udHJvbCkge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2wgPSBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5jb250cm9sO1xuXHRcdFx0aWYgKG9Db250cm9sLmlzQShcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0Y29uc3QgYVNlbGVjdGVkQ29udGV4dHMgPSBvQ29udHJvbC5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRKU09OLnBhcnNlKG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0XHRcdFx0YVNlbGVjdGVkQ29udGV4dHMsXG5cdFx0XHRcdFx0XCJ0YWJsZVwiXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGFjdGlvblBhcmFtZXRlclNob3dNZXNzYWdlQ2FsbGJhY2soXG5cdG1QYXJhbWV0ZXJzOiBhbnksXG5cdGFDb250ZXh0czogYW55LFxuXHRvRGlhbG9nOiBhbnksXG5cdG1lc3NhZ2VzOiBhbnksXG5cdHNob3dNZXNzYWdlUGFyYW1ldGVyc0luOiB7IHNob3dNZXNzYWdlQm94OiBib29sZWFuOyBzaG93TWVzc2FnZURpYWxvZzogYm9vbGVhbiB9XG4pOiB7IGZuR2V0TWVzc2FnZVN1YnRpdGxlOiBGdW5jdGlvbiB8IHVuZGVmaW5lZDsgc2hvd01lc3NhZ2VCb3g6IGJvb2xlYW47IHNob3dNZXNzYWdlRGlhbG9nOiBib29sZWFuOyBmaWx0ZXJlZE1lc3NhZ2VzOiBhbnlbXSB9IHtcblx0bGV0IHNob3dNZXNzYWdlQm94ID0gc2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW4uc2hvd01lc3NhZ2VCb3gsXG5cdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBzaG93TWVzc2FnZVBhcmFtZXRlcnNJbi5zaG93TWVzc2FnZURpYWxvZztcblx0Y29uc3Qgb0NvbnRyb2wgPSBtUGFyYW1ldGVycy5jb250cm9sO1xuXHRjb25zdCB1bmJvdW5kTWVzc2FnZXMgPSBtZXNzYWdlcy5maWx0ZXIoZnVuY3Rpb24gKG1lc3NhZ2U6IGFueSkge1xuXHRcdHJldHVybiBtZXNzYWdlLmdldFRhcmdldCgpID09PSBcIlwiO1xuXHR9KTtcblx0Y29uc3QgQVBEbWVzc2FnZXMgPSBtZXNzYWdlcy5maWx0ZXIoZnVuY3Rpb24gKG1lc3NhZ2U6IGFueSkge1xuXHRcdHJldHVybiAoXG5cdFx0XHRtZXNzYWdlLmdldFRhcmdldCAmJlxuXHRcdFx0bWVzc2FnZS5nZXRUYXJnZXQoKS5pbmRleE9mKG1QYXJhbWV0ZXJzLmFjdGlvbk5hbWUpICE9PSAtMSAmJlxuXHRcdFx0bVBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnMuc29tZShmdW5jdGlvbiAoYWN0aW9uUGFyYW06IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUYXJnZXQoKS5pbmRleE9mKGFjdGlvblBhcmFtLiROYW1lKSAhPT0gLTE7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH0pO1xuXHRBUERtZXNzYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChBUERNZXNzYWdlOiBhbnkpIHtcblx0XHRBUERNZXNzYWdlLmlzQVBEVGFyZ2V0ID0gdHJ1ZTtcblx0fSk7XG5cblx0Y29uc3QgZXJyb3JUYXJnZXRzSW5BUEQgPSBBUERtZXNzYWdlcy5sZW5ndGggPyB0cnVlIDogZmFsc2U7XG5cdGlmIChvRGlhbG9nLmlzT3BlbigpICYmIGFDb250ZXh0cy5sZW5ndGggIT09IDAgJiYgIW1QYXJhbWV0ZXJzLmlzU3RhdGljKSB7XG5cdFx0aWYgKCFtUGFyYW1ldGVycy5iR3JvdXBlZCkge1xuXHRcdFx0Ly9pc29sYXRlZFxuXHRcdFx0aWYgKGFDb250ZXh0cy5sZW5ndGggPiAxIHx8ICFlcnJvclRhcmdldHNJbkFQRCkge1xuXHRcdFx0XHQvLyBkb2VzIG5vdCBtYXR0ZXIgaWYgZXJyb3IgaXMgaW4gQVBEIG9yIG5vdCwgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGNvbnRleHRzIHNlbGVjdGVkIG9yIGlmIHRoZSBlcnJvciBpcyBub3QgdGhlIEFQRCwgd2UgY2xvc2UgaXQuXG5cdFx0XHRcdC8vIFRPRE86IERpbGFvZyBoYW5kbGluZyBzaG91bGQgbm90IGJlIHBhcnQgb2YgbWVzc2FnZSBoYW5kbGluZy4gUmVmYWN0b3IgYWNjb3JkaW5nbHkgLSBkaWFsb2cgc2hvdWxkIG5vdCBiZSBuZWVkZWQgaW5zaWRlIHRoaXMgbWV0aG9kIC0gbmVpdGhlclxuXHRcdFx0XHQvLyB0byBhc2sgd2hldGhlciBpdCdzIG9wZW4sIG5vciB0byBjbG9zZS9kZXN0cm95IGl0IVxuXHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdG9EaWFsb2cuZGVzdHJveSgpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoIWVycm9yVGFyZ2V0c0luQVBEKSB7XG5cdFx0XHQvL2NoYW5nZXNldFxuXHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0b0RpYWxvZy5kZXN0cm95KCk7XG5cdFx0fVxuXHR9XG5cdGxldCBmaWx0ZXJlZE1lc3NhZ2VzOiBhbnlbXSA9IFtdO1xuXHRjb25zdCBiSXNBUERPcGVuID0gb0RpYWxvZy5pc09wZW4oKTtcblx0aWYgKG1lc3NhZ2VzLmxlbmd0aCA9PT0gMSAmJiBtZXNzYWdlc1swXS5nZXRUYXJnZXQgJiYgbWVzc2FnZXNbMF0uZ2V0VGFyZ2V0KCkgIT09IHVuZGVmaW5lZCAmJiBtZXNzYWdlc1swXS5nZXRUYXJnZXQoKSAhPT0gXCJcIikge1xuXHRcdGlmICgob0NvbnRyb2wgJiYgb0NvbnRyb2wuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpID09PSBmYWxzZSkgfHwgIW9Db250cm9sKSB7XG5cdFx0XHQvLyBPUCBlZGl0IG9yIExSXG5cdFx0XHRzaG93TWVzc2FnZUJveCA9ICFlcnJvclRhcmdldHNJbkFQRDtcblx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gZmFsc2U7XG5cdFx0fSBlbHNlIGlmIChvQ29udHJvbCAmJiBvQ29udHJvbC5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikgPT09IHRydWUpIHtcblx0XHRcdHNob3dNZXNzYWdlQm94ID0gZmFsc2U7XG5cdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IGZhbHNlO1xuXHRcdH1cblx0fSBlbHNlIGlmIChvQ29udHJvbCkge1xuXHRcdGlmIChvQ29udHJvbC5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikgPT09IGZhbHNlKSB7XG5cdFx0XHRpZiAoYklzQVBET3BlbiAmJiBlcnJvclRhcmdldHNJbkFQRCkge1xuXHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2wuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpID09PSB0cnVlKSB7XG5cdFx0XHRpZiAoIWJJc0FQRE9wZW4gJiYgZXJyb3JUYXJnZXRzSW5BUEQpIHtcblx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSB0cnVlO1xuXHRcdFx0XHRmaWx0ZXJlZE1lc3NhZ2VzID0gdW5ib3VuZE1lc3NhZ2VzLmNvbmNhdChBUERtZXNzYWdlcyk7XG5cdFx0XHR9IGVsc2UgaWYgKCFiSXNBUERPcGVuICYmIHVuYm91bmRNZXNzYWdlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0Ly8gZXJyb3IgdGFyZ2V0cyBpbiBBUEQgPT4gdGhlcmUgaXMgYXRsZWFzdCBvbmUgYm91bmQgbWVzc2FnZS4gSWYgdGhlcmUgYXJlIHVuYm91bmQgbWVzc2FnZXMsIGRpYWxvZyBtdXN0IGJlIHNob3duLlxuXHRcdFx0XHQvLyBmb3IgZHJhZnQgZW50aXR5LCB3ZSBhbHJlYWR5IGNsb3NlZCB0aGUgQVBEXG5cdFx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRzaG93TWVzc2FnZUJveDogc2hvd01lc3NhZ2VCb3gsXG5cdFx0c2hvd01lc3NhZ2VEaWFsb2c6IHNob3dNZXNzYWdlRGlhbG9nLFxuXHRcdGZpbHRlcmVkTWVzc2FnZXM6IGZpbHRlcmVkTWVzc2FnZXMubGVuZ3RoID8gZmlsdGVyZWRNZXNzYWdlcyA6IG1lc3NhZ2VzLFxuXHRcdGZuR2V0TWVzc2FnZVN1YnRpdGxlOlxuXHRcdFx0b0NvbnRyb2wgJiYgb0NvbnRyb2wuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSAmJiBtZXNzYWdlSGFuZGxpbmcuc2V0TWVzc2FnZVN1YnRpdGxlLmJpbmQoe30sIG9Db250cm9sLCBhQ29udGV4dHMpXG5cdH07XG59XG5cbi8qXG4gKiBDdXJyZW50bHksIHRoaXMgbWV0aG9kIGlzIHJlc3BvbnNpYmxlIGZvciBzaG93aW5nIHRoZSBkaWFsb2cgYW5kIGV4ZWN1dGluZyB0aGUgYWN0aW9uLiBUaGUgcHJvbWlzZSByZXR1cm5lZCBpcyBwZW5kaW5nIHdoaWxlIHdhaXRpbmcgZm9yIHVzZXIgaW5wdXQsIGFzIHdlbGwgYXMgd2hpbGUgdGhlXG4gKiBiYWNrLWVuZCByZXF1ZXN0IGlzIHJ1bm5pbmcuIFRoZSBwcm9taXNlIGlzIHJlamVjdGVkIHdoZW4gdGhlIHVzZXIgY2FuY2VscyB0aGUgZGlhbG9nIGFuZCBhbHNvIHdoZW4gdGhlIGJhY2stZW5kIHJlcXVlc3QgZmFpbHMuXG4gKiBUT0RPOiBSZWZhY3RvcmluZzogU2VwYXJhdGUgZGlhbG9nIGhhbmRsaW5nIGZyb20gYmFja2VuZCBwcm9jZXNzaW5nLiBEaWFsb2cgaGFuZGxpbmcgc2hvdWxkIHJldHVybiBhIFByb21pc2UgcmVzb2x2aW5nIHRvIHBhcmFtZXRlcnMgdG8gYmUgcHJvdmlkZWQgdG8gYmFja2VuZC4gSWYgZGlhbG9nIGlzXG4gKiBjYW5jZWxsZWQsIHRoYXQgcHJvbWlzZSBjYW4gYmUgcmVqZWN0ZWQuIE1ldGhvZCByZXNwb25zaWJsZSBmb3IgYmFja2VuZCBwcm9jZXNzaW5nIG5lZWQgdG8gZGVhbCB3aXRoIG11bHRpcGxlIGNvbnRleHRzIC0gaS5lLiBpdCBzaG91bGQgZWl0aGVyIHJldHVybiBhbiBhcnJheSBvZiBQcm9taXNlcyBvclxuICogYSBQcm9taXNlIHJlc29sdmluZyB0byBhbiBhcnJheS4gSW4gdGhlIGxhdHRlciBjYXNlLCB0aGF0IFByb21pc2Ugc2hvdWxkIGJlIHJlc29sdmVkIGFsc28gd2hlbiBzb21lIG9yIGV2ZW4gYWxsIGNvbnRleHRzIGZhaWxlZCBpbiBiYWNrZW5kIC0gdGhlIG92ZXJhbGwgcHJvY2VzcyBzdGlsbCB3YXNcbiAqIHN1Y2Nlc3NmdWwuXG4gKlxuICovXG5cbi8vIHRoaXMgdHlwZSBpcyBtZWFudCB0byBkZXNjcmliZSB0aGUgbWV0YSBpbmZvcm1hdGlvbiBmb3Igb25lIEFjdGlvblBhcmFtZXRlciAoaS5lLiBpdHMgb2JqZWN0IGluIG1ldGFNb2RlbClcbnR5cGUgQWN0aW9uUGFyYW1ldGVyID0ge1xuXHQkTmFtZTogc3RyaW5nO1xuXHQkaXNDb2xsZWN0aW9uOiBib29sZWFuO1xuXHQvLyBjdXJyZW50bHkgcnVudGltZSBpbmZvcm1hdGlvbiBpcyB3cml0dGVuIGludG8gdGhlIG1ldGFtb2RlbDpcblx0Ly8gLSBpbiB0aGUgcHJlc3MgaGFuZGxlciBvZiB0aGUgYWN0aW9uIGJ1dHRvbiBvbiB0aGUgcGFyYW1ldGVyIGRpYWxvZywgdGhlIHZhbHVlIG9mIGVhY2ggcGFyYW1ldGVyIGlzIGFkZGVkXG5cdC8vIC0gaW4gc2V0QWN0aW9uUGFyYW1ldGVyRGVmYXVsdFZhbHVlLCB0aGlzIGluZm9ybWF0aW9uIGlzIHVzZWQgYW5kIHRyYW5zZmVycmVkIHRvIHRoZSBjb250ZXh0IChpbiBPRGF0YU1vZGVsKSBjcmVhdGVkIGZvciB0aGUgYWN0aW9uIGV4ZWN1dGlvblxuXHQvLyB0aGlzIGlzIHF1aXRlIG9kZCwgYW5kIGl0IHdvdWxkIG1ha2UgbXVjaCBtb3JlIHNlbnNlIHRvIHRha2UgdGhlIHZhbHVlIGZyb20gYWN0aW9uUGFyYW1ldGVySW5mb3Ncblx0Ly8gLSBob3dldmVyLCBzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWUgKG9yIHJhdGhlciB0aGUgc3Vycm91bmRpbmcgX2V4ZWN1dGVBY3Rpb24pIGlzIGFsc28gY2FsbGVkIGZyb20gb3RoZXIgcGxhY2VzXG5cdC8vID0+IGZvciB0aGUgdGltZSBiZWluZywgYWRkaW5nIHZhbHVlIGhlcmUgdG8gYXZvaWQgdHMgZXJyb3JzLCBzdWJqZWN0IHRvIHJlZmFjdG9yaW5nXG5cdC8vIGluIGNhc2Ugb2YgRmllbGQsIHRoZSB2YWx1ZSBpcyBzdHJpbmcsIGluIGNhc2Ugb2YgTXVsdGlWYWx1ZUZpZWxkLCBpdCdzIE11bHRpVmFsdWVGaWVsZEl0ZW1bXVxuXHR2YWx1ZTogc3RyaW5nIHwgTXVsdGlWYWx1ZUZpZWxkSXRlbVtdO1xufTtcblxuZnVuY3Rpb24gc2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZyhcblx0c0FjdGlvbk5hbWU6IGFueSxcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRzQWN0aW9uTGFiZWw6IGFueSxcblx0bVBhcmFtZXRlcnM6IGFueSxcblx0YUFjdGlvblBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcltdLFxuXHRhUGFyYW1ldGVyVmFsdWVzOiBhbnksXG5cdG9BY3Rpb25Db250ZXh0OiBhbnksXG5cdG9QYXJlbnRDb250cm9sOiBhbnksXG5cdGVudGl0eVNldE5hbWU6IGFueSxcblx0bWVzc2FnZUhhbmRsZXI6IGFueVxuKSB7XG5cdGNvbnN0IHNQYXRoID0gX2dldFBhdGgob0FjdGlvbkNvbnRleHQsIHNBY3Rpb25OYW1lKSxcblx0XHRtZXRhTW9kZWwgPSBvQWN0aW9uQ29udGV4dC5nZXRNb2RlbCgpLm9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRlbnRpdHlTZXRDb250ZXh0ID0gbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNQYXRoKSxcblx0XHRzQWN0aW9uTmFtZVBhdGggPSBvQWN0aW9uQ29udGV4dC5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKVxuXHRcdFx0PyBvQWN0aW9uQ29udGV4dC5nZXRQYXRoKCkuc3BsaXQoXCIvQCR1aTUub3ZlcmxvYWQvMFwiKVswXVxuXHRcdFx0OiBvQWN0aW9uQ29udGV4dC5nZXRQYXRoKCkuc3BsaXQoXCIvMFwiKVswXSxcblx0XHRhY3Rpb25OYW1lQ29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzQWN0aW9uTmFtZVBhdGgpLFxuXHRcdGJJc0NyZWF0ZUFjdGlvbiA9IG1QYXJhbWV0ZXJzLmlzQ3JlYXRlQWN0aW9uLFxuXHRcdHNGcmFnbWVudE5hbWUgPSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0FjdGlvblBhcmFtZXRlckRpYWxvZ1wiO1xuXHRyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdHR5cGUgQWN0aW9uUGFyYW1ldGVySW5mbyA9IHtcblx0XHRcdHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyO1xuXHRcdFx0ZmllbGQ6IEZpZWxkIHwgTXVsdGlWYWx1ZUZpZWxkO1xuXHRcdFx0aXNNdWx0aVZhbHVlOiBib29sZWFuO1xuXHRcdFx0dmFsdWU/OiBzdHJpbmcgfCBNdWx0aVZhbHVlRmllbGRJdGVtW107XG5cdFx0XHR2YWxpZGF0aW9uUHJvbWlzZT86IFByb21pc2U8c3RyaW5nIHwgTXVsdGlWYWx1ZUZpZWxkSXRlbVtdPjtcblx0XHR9O1xuXHRcdGxldCBhY3Rpb25QYXJhbWV0ZXJJbmZvczogQWN0aW9uUGFyYW1ldGVySW5mb1tdOyAvLyB0byBiZSBmaWxsZWQgYWZ0ZXIgZnJhZ21lbnQgKGZvciBhY3Rpb24gcGFyYW1ldGVyIGRpYWxvZykgaXMgbG9hZGVkLiBBY3R1YWxseSBvbmx5IG5lZWRlZCBkdXJpbmcgZGlhbG9nIHByb2Nlc3NpbmcsIGkuZS4gY291bGQgYmUgbW92ZWQgaW50byB0aGUgY29udHJvbGxlciBhbmQgZGlyZWN0bHkgaW5pdGlhbGl6ZWQgdGhlcmUsIGJ1dCBvbmx5IGFmdGVyIG1vdmluZyBhbGwgaGFuZGxlcnMgKGVzcC4gcHJlc3MgaGFuZGxlciBmb3IgYWN0aW9uIGJ1dHRvbikgdG8gY29udHJvbGxlci5cblxuXHRcdGNvbnN0IG1lc3NhZ2VNYW5hZ2VyID0gQ29yZS5nZXRNZXNzYWdlTWFuYWdlcigpO1xuXG5cdFx0Ly8gaW4gY2FzZSBvZiBtaXNzaW5nIG1hbmRhb3RvcnkgcGFyYW1ldGVyLCBtZXNzYWdlIGN1cnJlbnRseSBkaWZmZXJzIHBlciBwYXJhbWV0ZXIsIGFzIGl0IHN1cGVyZmx1b3VzbHkgY29udGFpbnMgdGhlIGxhYmVsIGFzIHBhcmFtZXRlci4gUG9zc2libGt5IHRoaXMgY291bGQgYmUgcmVtb3ZlZCBpbiBmdXR1cmUsIGluIHRoYXQgY2FzZSwgaW50ZXJmYWNlIGNvdWxkIGJlIHNpbXBsaWZpZWQgdG8gQWN0aW9uUGFyYW1ldGVySW5mb1tdLCBzdHJpbmdcblx0XHRjb25zdCBfYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlciA9IChtZXNzYWdlUGFyYW1ldGVyczogeyBhY3Rpb25QYXJhbWV0ZXJJbmZvOiBBY3Rpb25QYXJhbWV0ZXJJbmZvOyBtZXNzYWdlOiBzdHJpbmcgfVtdKSA9PiB7XG5cdFx0XHRtZXNzYWdlTWFuYWdlci5hZGRNZXNzYWdlcyhcblx0XHRcdFx0bWVzc2FnZVBhcmFtZXRlcnMubWFwKChtZXNzYWdlUGFyYW1ldGVyKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgYmluZGluZyA9IG1lc3NhZ2VQYXJhbWV0ZXIuYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZC5nZXRCaW5kaW5nKFxuXHRcdFx0XHRcdFx0bWVzc2FnZVBhcmFtZXRlci5hY3Rpb25QYXJhbWV0ZXJJbmZvLmlzTXVsdGlWYWx1ZSA/IFwiaXRlbXNcIiA6IFwidmFsdWVcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0cmV0dXJuIG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0XHRcdG1lc3NhZ2U6IG1lc3NhZ2VQYXJhbWV0ZXIubWVzc2FnZSxcblx0XHRcdFx0XHRcdHR5cGU6IFwiRXJyb3JcIixcblx0XHRcdFx0XHRcdHByb2Nlc3NvcjogYmluZGluZz8uZ2V0TW9kZWwoKSxcblx0XHRcdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWUsXG5cdFx0XHRcdFx0XHR0YXJnZXQ6IGJpbmRpbmc/LmdldFJlc29sdmVkUGF0aCgpXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdH07XG5cblx0XHRjb25zdCBfcmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbXRlciA9IChwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcikgPT4ge1xuXHRcdFx0Y29uc3QgYWxsTWVzc2FnZXMgPSBtZXNzYWdlTWFuYWdlci5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0XHRjb25zdCBjb250cm9sSWQgPSBnZW5lcmF0ZShbXCJBUERfXCIsIHBhcmFtZXRlci4kTmFtZV0pO1xuXHRcdFx0Ly8gYWxzbyByZW1vdmUgbWVzc2FnZXMgYXNzaWduZWQgdG8gaW5uZXIgY29udHJvbHMsIGJ1dCBhdm9pZCByZW1vdmluZyBtZXNzYWdlcyBmb3IgZGlmZmVyZW50IHBhcmFtdGVycyAod2l0aCBuYW1lIGJlaW5nIHN1YnN0cmluZyBvZiBhbm90aGVyIHBhcmFtZXRlciBuYW1lKVxuXHRcdFx0Y29uc3QgcmVsZXZhbnRNZXNzYWdlcyA9IGFsbE1lc3NhZ2VzLmZpbHRlcigobXNnOiBNZXNzYWdlKSA9PlxuXHRcdFx0XHRtc2cuZ2V0Q29udHJvbElkcygpLnNvbWUoKGlkOiBzdHJpbmcpID0+IGNvbnRyb2xJZC5zcGxpdChcIi1cIikuaW5jbHVkZXMoaWQpKVxuXHRcdFx0KTtcblx0XHRcdG1lc3NhZ2VNYW5hZ2VyLnJlbW92ZU1lc3NhZ2VzKHJlbGV2YW50TWVzc2FnZXMpO1xuXHRcdH07XG5cblx0XHRjb25zdCBfdmFsaWRhdGVSZXF1aXJlZFByb3BlcnRpZXMgPSBhc3luYyBmdW5jdGlvbiAob1Jlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSkge1xuXHRcdFx0Y29uc3QgcmVxdWlyZWRQYXJhbWV0ZXJJbmZvcyA9IGFjdGlvblBhcmFtZXRlckluZm9zLmZpbHRlcigoYWN0aW9uUGFyYW1ldGVySW5mbykgPT4gYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZC5nZXRSZXF1aXJlZCgpKTtcblx0XHRcdC8vIGJlZm9yZSB2YWxpZGF0aW9uIG9mIHJlcXVpcmVkIGZpZWxkcyBpcyBub3QgY29tcGxldGUsIHdlIGNhbm5vdCBrbm93IHRoZSB2YWx1ZXMgYW5kIHRodXMgY2Fubm90IHZhbGlkYXRlIHRoZXkgYXJlIHByb3ZpZGVkXG5cdFx0XHRjb25zdCB2YWxpZGF0aW9uUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcblx0XHRcdFx0cmVxdWlyZWRQYXJhbWV0ZXJJbmZvcy5tYXAoKGFjdGlvblBhcmFtZXRlckluZm8pID0+IGFjdGlvblBhcmFtZXRlckluZm8udmFsaWRhdGlvblByb21pc2UpXG5cdFx0XHQpO1xuXG5cdFx0XHRjb25zdCB2YWxpZFJlcXVpcmVkRmllbGRzID0gdmFsaWRhdGlvblJlc3VsdHNcblx0XHRcdFx0Lm1hcCgodmFsaWRhdGlvblJlc3VsdCwgaW5kZXgpID0+ICh7XG5cdFx0XHRcdFx0dmFsaWRhdGlvblJlc3VsdDogdmFsaWRhdGlvblJlc3VsdCxcblx0XHRcdFx0XHRpbmRleDogaW5kZXhcblx0XHRcdFx0fSkpXG5cdFx0XHRcdC5maWx0ZXIoKHZhbGlkYXRpb25SZXN1bHQpID0+IHZhbGlkYXRpb25SZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdGF0dXMgPT09IFwiZnVsZmlsbGVkXCIpXG5cdFx0XHRcdC5tYXAoKHZhbGlkYXRpb25SZXN1bHQpID0+IHJlcXVpcmVkUGFyYW1ldGVySW5mb3NbdmFsaWRhdGlvblJlc3VsdC5pbmRleF0pO1xuXG5cdFx0XHRjb25zdCBlbXB0eVJlcXVpcmVkRmllbGRzID0gdmFsaWRSZXF1aXJlZEZpZWxkcy5maWx0ZXIoKGFjdGlvblBhcmFtZXRlckluZm8pID0+XG5cdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm8uaXNNdWx0aVZhbHVlID8gIShhY3Rpb25QYXJhbWV0ZXJJbmZvLnZhbHVlIGFzIE11bHRpVmFsdWVGaWVsZEl0ZW1bXSkubGVuZ3RoIDogIWFjdGlvblBhcmFtZXRlckluZm8udmFsdWVcblx0XHRcdCk7XG5cdFx0XHRpZiAoIWVtcHR5UmVxdWlyZWRGaWVsZHMubGVuZ3RoKSByZXR1cm4gdHJ1ZTtcblxuXHRcdFx0Ly8gbWVzc2FnZSBjb250YWlucyBsYWJlbCBwZXIgZmllbGQgZm9yIGhpc3RvcmljYWwgcmVhc29uIChvcmlnaW5hbGx5LCBpdCB3YXMgc2hvd24gaW4gYWRkaXRpb25hbCBwb3B1cCwgbm93IGl0J3MgZGlyZWN0bHkgYWRkZWQgdG8gdGhlIGZpZWxkKVxuXHRcdFx0Ly8gaWYgdGhpcyB3YXMgbm90IHRoZSBjYXNlIChhbmQgaG9wZWZ1bGx5LCBpbiBmdXR1cmUgdGhpcyBtaWdodCBiZSBzdWJqZWN0IHRvIGNoYW5nZSksIGludGVyZmFjZSBvZiBfYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlciBjb3VsZCBiZSBzaW1wbGlmaWVkIHRvIGp1c3QgcGFzcyBlbXB0eVJlcXVpcmVkRmllbGRzIGFuZCBhIGNvbnN0YW50IG1lc3NhZ2UgaGVyZVxuXHRcdFx0X2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIoXG5cdFx0XHRcdGVtcHR5UmVxdWlyZWRGaWVsZHMubWFwKChhY3Rpb25QYXJhbWV0ZXJJbmZvKSA9PiAoe1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm86IGFjdGlvblBhcmFtZXRlckluZm8sXG5cdFx0XHRcdFx0bWVzc2FnZTogQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX09QRVJBVElPTlNfQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfTUlTU0lOR19NQU5EQVRPUllfTVNHXCIsIG9SZXNvdXJjZUJ1bmRsZSwgW1xuXHRcdFx0XHRcdFx0KGFjdGlvblBhcmFtZXRlckluZm8uZmllbGQuZ2V0UGFyZW50KCk/LmdldEFnZ3JlZ2F0aW9uKFwibGFiZWxcIikgYXMgTGFiZWwpLmdldFRleHQoKVxuXHRcdFx0XHRcdF0pXG5cdFx0XHRcdH0pKVxuXHRcdFx0KTtcblxuXHRcdFx0Ly8gU2V0IHRoZSBmb2N1cyBvbiB0aGUgZGlhbG9nJ3MgZmlyc3QgZXJyb25lb3VzIHJlcXVpcmVkIGNvbnRyb2xcblx0XHRcdGVtcHR5UmVxdWlyZWRGaWVsZHNbMF0uZmllbGQuZm9jdXMoKTtcblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cblx0XHRjb25zdCBvQ29udHJvbGxlciA9IHtcblx0XHRcdGhhbmRsZUNoYW5nZTogYXN5bmMgZnVuY3Rpb24gKG9FdmVudDogRXZlbnQpIHtcblx0XHRcdFx0Y29uc3QgZmllbGQgPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0XHRcdGNvbnN0IGFjdGlvblBhcmFtZXRlckluZm8gPSBhY3Rpb25QYXJhbWV0ZXJJbmZvcy5maW5kKFxuXHRcdFx0XHRcdChhY3Rpb25QYXJhbWV0ZXJJbmZvKSA9PiBhY3Rpb25QYXJhbWV0ZXJJbmZvLmZpZWxkID09PSBmaWVsZFxuXHRcdFx0XHQpIGFzIEFjdGlvblBhcmFtZXRlckluZm87XG5cdFx0XHRcdC8vIGZpZWxkIHZhbHVlIGlzIGJlaW5nIGNoYW5nZWQsIHRodXMgZXhpc3RpbmcgbWVzc2FnZXMgcmVsYXRlZCB0byB0aGF0IGZpZWxkIGFyZSBub3QgdmFsaWQgYW55bW9yZVxuXHRcdFx0XHRfcmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbXRlcihhY3Rpb25QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlcik7XG5cdFx0XHRcdC8vIGFkYXB0IGluZm8uIFByb21pc2UgaXMgcmVzb2x2ZWQgdG8gdmFsdWUgb3IgcmVqZWN0ZWQgd2l0aCBleGNlcHRpb24gY29udGFpbmluZyBtZXNzYWdlXG5cdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm8udmFsaWRhdGlvblByb21pc2UgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwicHJvbWlzZVwiKSBhcyBQcm9taXNlPHN0cmluZz47XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvLnZhbHVlID0gYXdhaXQgYWN0aW9uUGFyYW1ldGVySW5mby52YWxpZGF0aW9uUHJvbWlzZTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRkZWxldGUgYWN0aW9uUGFyYW1ldGVySW5mby52YWx1ZTtcblx0XHRcdFx0XHRfYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlcihbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm86IGFjdGlvblBhcmFtZXRlckluZm8sXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2U6IChlcnJvciBhcyB7IG1lc3NhZ2U6IHN0cmluZyB9KS5tZXNzYWdlXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Y29uc3Qgb0ZyYWdtZW50ID0gWE1MVGVtcGxhdGVQcm9jZXNzb3IubG9hZFRlbXBsYXRlKHNGcmFnbWVudE5hbWUsIFwiZnJhZ21lbnRcIik7XG5cdFx0Y29uc3Qgb1BhcmFtZXRlck1vZGVsID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHQkZGlzcGxheU1vZGU6IHt9XG5cdFx0fSk7XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgY3JlYXRlZEZyYWdtZW50ID0gYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoXG5cdFx0XHRcdG9GcmFnbWVudCxcblx0XHRcdFx0eyBuYW1lOiBzRnJhZ21lbnROYW1lIH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHRcdGFjdGlvbjogb0FjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0XHRhY3Rpb25OYW1lOiBhY3Rpb25OYW1lQ29udGV4dCxcblx0XHRcdFx0XHRcdGVudGl0eVNldDogZW50aXR5U2V0Q29udGV4dFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRhY3Rpb246IG9BY3Rpb25Db250ZXh0LmdldE1vZGVsKCksXG5cdFx0XHRcdFx0XHRhY3Rpb25OYW1lOiBhY3Rpb25OYW1lQ29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBlbnRpdHlTZXRDb250ZXh0LmdldE1vZGVsKCksXG5cdFx0XHRcdFx0XHRtZXRhTW9kZWw6IGVudGl0eVNldENvbnRleHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHRcdC8vIFRPRE86IG1vdmUgdGhlIGRpYWxvZyBpbnRvIHRoZSBmcmFnbWVudCBhbmQgbW92ZSB0aGUgaGFuZGxlcnMgdG8gdGhlIG9Db250cm9sbGVyXG5cdFx0XHRjb25zdCBhQ29udGV4dHM6IGFueVtdID0gbVBhcmFtZXRlcnMuYUNvbnRleHRzIHx8IFtdO1xuXHRcdFx0Y29uc3QgYUZ1bmN0aW9uUGFyYW1zOiBhbnlbXSA9IFtdO1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuXHRcdFx0bGV0IG9PcGVyYXRpb25CaW5kaW5nOiBhbnk7XG5cdFx0XHRhd2FpdCBDb21tb25VdGlscy5zZXRVc2VyRGVmYXVsdHMob0FwcENvbXBvbmVudCwgYUFjdGlvblBhcmFtZXRlcnMsIG9QYXJhbWV0ZXJNb2RlbCwgdHJ1ZSk7XG5cdFx0XHRjb25zdCBvRGlhbG9nQ29udGVudCA9IChhd2FpdCBGcmFnbWVudC5sb2FkKHtcblx0XHRcdFx0ZGVmaW5pdGlvbjogY3JlYXRlZEZyYWdtZW50LFxuXHRcdFx0XHRjb250cm9sbGVyOiBvQ29udHJvbGxlclxuXHRcdFx0fSkpIGFzIENvbnRyb2w7XG5cblx0XHRcdGFjdGlvblBhcmFtZXRlckluZm9zID0gYUFjdGlvblBhcmFtZXRlcnMubWFwKChhY3Rpb25QYXJhbWV0ZXIpID0+IHtcblx0XHRcdFx0Y29uc3QgZmllbGQgPSBDb3JlLmJ5SWQoZ2VuZXJhdGUoW1wiQVBEX1wiLCBhY3Rpb25QYXJhbWV0ZXIuJE5hbWVdKSkgYXMgRmllbGQgfCBNdWx0aVZhbHVlRmllbGQ7XG5cdFx0XHRcdGNvbnN0IGlzTXVsdGlWYWx1ZSA9IGZpZWxkLmlzQShcInNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkXCIpO1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHBhcmFtZXRlcjogYWN0aW9uUGFyYW1ldGVyLFxuXHRcdFx0XHRcdGZpZWxkOiBmaWVsZCxcblx0XHRcdFx0XHRpc011bHRpVmFsdWU6IGlzTXVsdGlWYWx1ZVxuXHRcdFx0XHR9O1xuXHRcdFx0fSk7XG5cblx0XHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IG9QYXJlbnRDb250cm9sLmdldENvbnRyb2xsZXIoKS5vUmVzb3VyY2VCdW5kbGU7XG5cdFx0XHRsZXQgYWN0aW9uUmVzdWx0ID0ge1xuXHRcdFx0XHRkaWFsb2dDYW5jZWxsZWQ6IHRydWUsIC8vIHRvIGJlIHNldCB0byBmYWxzZSBpbiBjYXNlIG9mIHN1Y2Nlc3NmdWwgYWN0aW9uIGV4ZWN0aW9uXG5cdFx0XHRcdHJlc3VsdDogdW5kZWZpbmVkXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgb0RpYWxvZyA9IG5ldyBEaWFsb2codW5kZWZpbmVkLCB7XG5cdFx0XHRcdHRpdGxlOiBzQWN0aW9uTGFiZWwgfHwgQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX09QRVJBVElPTlNfQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfVElUTEVcIiwgb1Jlc291cmNlQnVuZGxlKSxcblx0XHRcdFx0Y29udGVudDogW29EaWFsb2dDb250ZW50XSxcblx0XHRcdFx0ZXNjYXBlSGFuZGxlcjogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdC8vIGVzY2FwZSBoYW5kbGVyIGlzIG1lYW50IHRvIHBvc3NpYmx5IHN1cHByZXNzIG9yIHBvc3Rwb25lIGNsb3NpbmcgdGhlIGRpYWxvZyBvbiBlc2NhcGUgKGJ5IGNhbGxpbmcgXCJyZWplY3RcIiBvbiB0aGUgcHJvdmlkZWQgb2JqZWN0LCBvciBcInJlc29sdmVcIiBvbmx5IHdoZW5cblx0XHRcdFx0XHQvLyBkb25lIHdpdGggYWxsIHRhc2tzIHRvIGhhcHBlbiBiZWZvcmUgZGlhbG9nIGNhbiBiZSBjbG9zZWQpLiBJdCdzIG5vdCBpbnRlbmRlZCB0byBleHBsaWNldGx5IGNsb3NlIHRoZSBkaWFsb2cgaGVyZSAodGhhdCBoYXBwZW5zIGF1dG9tYXRpY2FsbHkgd2hlbiBub1xuXHRcdFx0XHRcdC8vIGVzY2FwZUhhbmRsZXIgaXMgcHJvdmlkZWQgb3IgdGhlIHJlc29sdmUtY2FsbGJhY2sgaXMgY2FsbGVkKSBvciBmb3Igb3duIHdyYXAgdXAgdGFza3MgKGxpa2UgcmVtb3ZpbmcgdmFsaWRpdGlvbiBtZXNzYWdlcyAtIHRoaXMgc2hvdWxkIGhhcHBlbiBpbiB0aGVcblx0XHRcdFx0XHQvLyBhZnRlckNsb3NlKS5cblx0XHRcdFx0XHQvLyBUT0RPOiBNb3ZlIHdyYXAgdXAgdGFza3MgdG8gYWZ0ZXJDbG9zZSwgYW5kIHJlbW92ZSB0aGlzIG1ldGhvZCBjb21wbGV0ZWx5LiBUYWtlIGNhcmUgdG8gYWxzbyBhZGFwdCBlbmQgYnV0dG9uIHByZXNzIGhhbmRsZXIgYWNjb3JkaW5nbHkuXG5cdFx0XHRcdFx0Ly8gQ3VycmVudGx5IG9ubHkgc3RpbGwgbmVlZGVkIHRvIGRpZmZlcmVudGlhdGUgY2xvc2luZyBkaWFsb2cgYWZ0ZXIgc3VjY2Vzc2Z1bCBleGVjdXRpb24gKHVzZXMgcmVzb2x2ZSkgZnJvbSB1c2VyIGNhbmNlbGxhdGlvbiAodXNpbmcgcmVqZWN0KVxuXHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHQvL1x0XHRyZWplY3QoQ29uc3RhbnRzLkNhbmNlbEFjdGlvbkRpYWxvZyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJlZ2luQnV0dG9uOiBuZXcgQnV0dG9uKGdlbmVyYXRlKFtcImZlXCIsIFwiQVBEX1wiLCBzQWN0aW9uTmFtZSwgXCJBY3Rpb25cIiwgXCJPa1wiXSksIHtcblx0XHRcdFx0XHR0ZXh0OiBiSXNDcmVhdGVBY3Rpb25cblx0XHRcdFx0XHRcdD8gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9TQVBGRV9BQ1RJT05fQ1JFQVRFX0JVVFRPTlwiLCBvUmVzb3VyY2VCdW5kbGUpXG5cdFx0XHRcdFx0XHQ6IF9nZXRBY3Rpb25QYXJhbWV0ZXJBY3Rpb25OYW1lKG9SZXNvdXJjZUJ1bmRsZSwgc0FjdGlvbkxhYmVsLCBzQWN0aW9uTmFtZSwgZW50aXR5U2V0TmFtZSksXG5cdFx0XHRcdFx0dHlwZTogXCJFbXBoYXNpemVkXCIsXG5cdFx0XHRcdFx0cHJlc3M6IGFzeW5jIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGlmICghKGF3YWl0IF92YWxpZGF0ZVJlcXVpcmVkUHJvcGVydGllcyhvUmVzb3VyY2VCdW5kbGUpKSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdEJ1c3lMb2NrZXIubG9jayhvRGlhbG9nKTtcblxuXHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFRPRE86IGR1ZSB0byB1c2luZyB0aGUgc2VhcmNoIGFuZCB2YWx1ZSBoZWxwcyBvbiB0aGUgYWN0aW9uIGRpYWxvZyB0cmFuc2llbnQgbWVzc2FnZXMgY291bGQgYXBwZWFyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gd2UgbmVlZCBhbiBVWCBkZXNpZ24gZm9yIHRob3NlIHRvIHNob3cgdGhlbSB0byB0aGUgdXNlciAtIGZvciBub3cgcmVtb3ZlIHRoZW0gYmVmb3JlIGNvbnRpbnVpbmdcblx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHRcdFx0XHQvLyBtb3ZlIHBhcmFtZXRlciB2YWx1ZXMgZnJvbSBEaWFsb2cgKFNpbXBsZUZvcm0pIHRvIG1QYXJhbWV0ZXJzLmFjdGlvblBhcmFtZXRlcnMgc28gdGhhdCB0aGV5IGFyZSBhdmFpbGFibGUgaW4gdGhlIG9wZXJhdGlvbiBiaW5kaW5ncyBmb3IgYWxsIGNvbnRleHRzXG5cdFx0XHRcdFx0XHRcdFx0bGV0IHZQYXJhbWV0ZXJWYWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvUGFyYW1ldGVyQ29udGV4dCA9IG9PcGVyYXRpb25CaW5kaW5nICYmIG9PcGVyYXRpb25CaW5kaW5nLmdldFBhcmFtZXRlckNvbnRleHQoKTtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGkgaW4gYUFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChhQWN0aW9uUGFyYW1ldGVyc1tpXS4kaXNDb2xsZWN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFNVkZDb250ZW50ID0gb0RpYWxvZy5nZXRNb2RlbChcIm12ZnZpZXdcIikuZ2V0UHJvcGVydHkoYC8ke2FBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lfWApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFLZXlWYWx1ZXMgPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBqIGluIGFNVkZDb250ZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUtleVZhbHVlcy5wdXNoKGFNVkZDb250ZW50W2pdLktleSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dlBhcmFtZXRlclZhbHVlID0gYUtleVZhbHVlcztcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZQYXJhbWV0ZXJWYWx1ZSA9IG9QYXJhbWV0ZXJDb250ZXh0LmdldFByb3BlcnR5KGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2ldLnZhbHVlID0gdlBhcmFtZXRlclZhbHVlOyAvLyB3cml0aW5nIHRoZSBjdXJyZW50IHZhbHVlICh1ZXNlciBpbnB1dCEpIGludG8gdGhlIG1ldGFtb2RlbCA9PiBzaG91bGQgYmUgcmVmYWN0b3JlZCB0byB1c2UgQWN0aW9uUGFyYW1ldGVySW5mb3MgaW5zdGVhZC4gVXNlZCBpbiBzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWVcblx0XHRcdFx0XHRcdFx0XHRcdHZQYXJhbWV0ZXJWYWx1ZSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMubGFiZWwgPSBzQWN0aW9uTGFiZWw7XG5cdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzPy5pbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCI0MTJFeGVjdXRlZFwiLCBmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhUmVzdWx0ID0gYXdhaXQgZXhlY3V0ZUFQTUFjdGlvbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0b0FwcENvbXBvbmVudCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9QYXJlbnRDb250cm9sLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRcdFx0XHRcdFx0YUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdGFjdGlvblJlc3VsdCA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlhbG9nQ2FuY2VsbGVkOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0OiBhUmVzdWx0XG5cdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBtZXNzYWdlcyA9IHNhcC51aS5nZXRDb3JlKCkuZ2V0TWVzc2FnZU1hbmFnZXIoKS5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0ICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiNDEyRXhlY3V0ZWRcIikgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJzdHJpY3RIYW5kbGluZ0ZhaWxzXCIpPy5sZW5ndGhcblx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIkRlbGF5TWVzc2FnZXNcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcIkRlbGF5TWVzc2FnZXNcIikuY29uY2F0KG1lc3NhZ2VzKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgb0Vycm9yO1xuXHRcdFx0XHRcdFx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0ICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiNDEyRXhlY3V0ZWRcIikgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJzdHJpY3RIYW5kbGluZ0ZhaWxzXCIpPy5sZW5ndGhcblx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHN0cmljdEhhbmRsaW5nRmFpbHMgPSBtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInN0cmljdEhhbmRsaW5nRmFpbHNcIik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYUZhaWxlZENvbnRleHRzID0gW10gYXMgYW55O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nRmFpbHMuZm9yRWFjaChmdW5jdGlvbiAoZmFpbDogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhRmFpbGVkQ29udGV4dHMucHVzaChmYWlsLm9BY3Rpb24uZ2V0Q29udGV4dCgpKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5hQ29udGV4dHMgPSBhRmFpbGVkQ29udGV4dHM7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYVJlc3VsdCA9IGF3YWl0IGV4ZWN1dGVBUE1BY3Rpb24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvUGFyZW50Q29udHJvbCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0RpYWxvZyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzdHJpY3RIYW5kbGluZ0ZhaWxzXCIsIFtdKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInByb2Nlc3NlZE1lc3NhZ2VJZHNcIiwgW10pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFjdGlvblJlc3VsdCA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpYWxvZ0NhbmNlbGxlZDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQ6IGFSZXN1bHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCI0MTJFeGVjdXRlZFwiKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJzdHJpY3RIYW5kbGluZ0ZhaWxzXCIpPy5sZW5ndGhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKS5hZGRNZXNzYWdlcyhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJEZWxheU1lc3NhZ2VzXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZyh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpc0FjdGlvblBhcmFtZXRlckRpYWxvZ09wZW46IG9EaWFsb2cuaXNPcGVuKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkJlZm9yZVNob3dNZXNzYWdlOiBmdW5jdGlvbiAoYU1lc3NhZ2VzOiBhbnksIHNob3dNZXNzYWdlUGFyYW1ldGVyc0luOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGFjdGlvblBhcmFtZXRlclNob3dNZXNzYWdlQ2FsbGJhY2soXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9EaWFsb2csXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YU1lc3NhZ2VzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dNZXNzYWdlUGFyYW1ldGVyc0luXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGlmIChCdXN5TG9ja2VyLmlzTG9ja2VkKG9EaWFsb2cpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG9EaWFsb2cpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRsZXQgc2hvd01lc3NhZ2VEaWFsb2cgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdGF3YWl0IG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlcyh7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0OiBtUGFyYW1ldGVycy5hQ29udGV4dHNbMF0sXG5cdFx0XHRcdFx0XHRcdFx0XHRpc0FjdGlvblBhcmFtZXRlckRpYWxvZ09wZW46IG9EaWFsb2cuaXNPcGVuKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlUGFnZU5hdmlnYXRpb25DYWxsYmFjazogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0b25CZWZvcmVTaG93TWVzc2FnZTogZnVuY3Rpb24gKGFNZXNzYWdlczogYW55LCBzaG93TWVzc2FnZVBhcmFtZXRlcnNJbjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFdoeSBpcyB0aGlzIGltcGxlbWVudGVkIGFzIGNhbGxiYWNrPyBBcHBhcmVudGx5LCBhbGwgbmVlZGVkIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBiZWZvcmVoYW5kXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFRPRE86IHJlZmFjdG9yIGFjY29yZGluZ2x5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHNob3dNZXNzYWdlUGFyYW1ldGVycyA9IGFjdGlvblBhcmFtZXRlclNob3dNZXNzYWdlQ2FsbGJhY2soXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9EaWFsb2csXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YU1lc3NhZ2VzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dNZXNzYWdlUGFyYW1ldGVyc0luXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gc2hvd01lc3NhZ2VQYXJhbWV0ZXJzLnNob3dNZXNzYWdlRGlhbG9nO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2hvd01lc3NhZ2VQYXJhbWV0ZXJzO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gSW4gY2FzZSBvZiBiYWNrZW5kIHZhbGlkYXRpb24gZXJyb3Iocz8pLCBtZXNzYWdlIHNoYWxsIG5vdCBiZSBzaG93biBpbiBtZXNzYWdlIGRpYWxvZyBidXQgbmV4dCB0byB0aGUgZmllbGQgb24gcGFyYW1ldGVyIGRpYWxvZywgd2hpY2ggc2hvdWxkXG5cdFx0XHRcdFx0XHRcdFx0Ly8gc3RheSBvcGVuIGluIHRoaXMgY2FzZSA9PiBpbiB0aGlzIGNhc2UsIHdlIG11c3Qgbm90IHJlc29sdmUgb3IgcmVqZWN0IHRoZSBwcm9taXNlIGNvbnRyb2xsaW5nIHRoZSBwYXJhbWV0ZXIgZGlhbG9nLlxuXHRcdFx0XHRcdFx0XHRcdC8vIEluIGFsbCBvdGhlciBjYXNlcyAoZS5nLiBvdGhlciBiYWNrZW5kIGVycm9ycyBvciB1c2VyIGNhbmNlbGxhdGlvbiksIHRoZSBwcm9taXNlIGNvbnRyb2xsaW5nIHRoZSBwYXJhbWV0ZXIgZGlhbG9nIG5lZWRzIHRvIGJlIHJlamVjdGVkIHRvIGFsbG93XG5cdFx0XHRcdFx0XHRcdFx0Ly8gY2FsbGVycyB0byByZWFjdC4gKEV4YW1wbGU6IElmIGNyZWF0aW9uIGluIGJhY2tlbmQgYWZ0ZXIgbmF2aWdhdGlvbiB0byB0cmFuc2llbnQgY29udGV4dCBmYWlscywgYmFjayBuYXZpZ2F0aW9uIG5lZWRzIHRvIGJlIHRyaWdnZXJlZClcblx0XHRcdFx0XHRcdFx0XHQvLyBUT0RPOiBSZWZhY3RvciB0byBzZXBhcmF0ZSBkaWFsb2cgaGFuZGxpbmcgZnJvbSBiYWNrZW5kIHJlcXVlc3QgaXN0ZWFkIG9mIHRha2luZyBkZWNpc2lvbiBiYXNlZCBvbiBtZXNzYWdlIGhhbmRsaW5nXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHNob3dNZXNzYWdlRGlhbG9nKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZWplY3Qob0Vycm9yKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdFx0XHRcdGlmIChCdXN5TG9ja2VyLmlzTG9ja2VkKG9EaWFsb2cpKSB7XG5cdFx0XHRcdFx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sob0RpYWxvZyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlbmRCdXR0b246IG5ldyBCdXR0b24oZ2VuZXJhdGUoW1wiZmVcIiwgXCJBUERfXCIsIHNBY3Rpb25OYW1lLCBcIkFjdGlvblwiLCBcIkNhbmNlbFwiXSksIHtcblx0XHRcdFx0XHR0ZXh0OiBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfQ09NTU9OX0FDVElPTl9QQVJBTUVURVJfRElBTE9HX0NBTkNFTFwiLCBvUmVzb3VyY2VCdW5kbGUpLFxuXHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHQvLyBUT0RPOiBjYW5jZWwgYnV0dG9uIHNob3VsZCBqdXN0IGNsb3NlIHRoZSBkaWFsb2cgKHNpbWlsYXIgdG8gdXNpbmcgZXNjYXBlKS4gQWxsIHdyYXAgdXAgdGFza3Mgc2hvdWxkIGJlIG1vdmVkIHRvIGFmdGVyQ2xvc2UuXG5cdFx0XHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0Ly8gVE9ETzogYmVmb3JlT3BlbiBpcyBqdXN0IGFuIGV2ZW50LCBpLmUuIG5vdCB3YWl0aW5nIGZvciB0aGUgUHJvbWlzZSB0byBiZSByZXNvbHZlZC4gQ2hlY2sgaWYgdGFza3Mgb2YgdGhpcyBmdW5jdGlvbiBuZWVkIHRvIGJlIGRvbmUgYmVmb3JlIG9wZW5pbmcgdGhlIGRpYWxvZ1xuXHRcdFx0XHQvLyAtIGlmIHllcywgdGhleSBuZWVkIHRvIGJlIG1vdmVkIG91dHNpZGUuXG5cdFx0XHRcdC8vIEFzc3VtcHRpb246IFNvbWV0aW1lcyBkaWFsb2cgY2FuIGJlIHNlZW4gd2l0aG91dCBhbnkgZmllbGRzIGZvciBhIHNob3J0IHRpbWUgLSBtYXliZSB0aGlzIGlzIGNhdXNlZCBieSB0aGlzIGFzeW5jaHJvbml0eVxuXHRcdFx0XHRiZWZvcmVPcGVuOiBhc3luYyBmdW5jdGlvbiAob0V2ZW50OiBhbnkpIHtcblx0XHRcdFx0XHQvLyBjbG9uZSBldmVudCBmb3IgYWN0aW9uV3JhcHBlciBhcyBvRXZlbnQub1NvdXJjZSBnZXRzIGxvc3QgZHVyaW5nIHByb2Nlc3Npbmcgb2YgYmVmb3JlT3BlbiBldmVudCBoYW5kbGVyXG5cdFx0XHRcdFx0Y29uc3Qgb0Nsb25lRXZlbnQgPSBPYmplY3QuYXNzaWduKHt9LCBvRXZlbnQpO1xuXG5cdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0Y29uc3QgZ2V0RGVmYXVsdFZhbHVlc0Z1bmN0aW9uID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9EaWFsb2cuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdFx0XHRcdFx0c0FjdGlvblBhdGggPSBvQWN0aW9uQ29udGV4dC5zUGF0aCAmJiBvQWN0aW9uQ29udGV4dC5zUGF0aC5zcGxpdChcIi9AXCIpWzBdLFxuXHRcdFx0XHRcdFx0XHRzRGVmYXVsdFZhbHVlc0Z1bmN0aW9uID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdFx0XHRcdFx0YCR7c0FjdGlvblBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EZWZhdWx0VmFsdWVzRnVuY3Rpb25gXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc0RlZmF1bHRWYWx1ZXNGdW5jdGlvbjtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGNvbnN0IGZuU2V0RGVmYXVsdHNBbmRPcGVuRGlhbG9nID0gYXN5bmMgZnVuY3Rpb24gKHNCaW5kaW5nUGFyYW1ldGVyPzogYW55KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzQm91bmRGdW5jdGlvbk5hbWUgPSBnZXREZWZhdWx0VmFsdWVzRnVuY3Rpb24oKTtcblx0XHRcdFx0XHRcdGNvbnN0IHByZWZpbGxQYXJhbWV0ZXIgPSBhc3luYyBmdW5jdGlvbiAoc1BhcmFtTmFtZTogYW55LCB2UGFyYW1EZWZhdWx0VmFsdWU6IGFueSkge1xuXHRcdFx0XHRcdFx0XHQvLyBDYXNlIDE6IFRoZXJlIGlzIGEgUGFyYW1ldGVyRGVmYXVsdFZhbHVlIGFubm90YXRpb25cblx0XHRcdFx0XHRcdFx0aWYgKHZQYXJhbURlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFDb250ZXh0cy5sZW5ndGggPiAwICYmIHZQYXJhbURlZmF1bHRWYWx1ZS4kUGF0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IHZQYXJhbVZhbHVlID0gYXdhaXQgQ29tbW9uVXRpbHMucmVxdWVzdFNpbmdsZXRvblByb3BlcnR5KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZQYXJhbURlZmF1bHRWYWx1ZS4kUGF0aCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvT3BlcmF0aW9uQmluZGluZy5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh2UGFyYW1WYWx1ZSA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZQYXJhbVZhbHVlID0gYXdhaXQgb09wZXJhdGlvbkJpbmRpbmdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5nZXRQYXJhbWV0ZXJDb250ZXh0KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5yZXF1ZXN0UHJvcGVydHkodlBhcmFtRGVmYXVsdFZhbHVlLiRQYXRoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBGb3IgbXVsdGkgc2VsZWN0LCBuZWVkIHRvIGxvb3Agb3ZlciBhQ29udGV4dHMgKGFzIGNvbnRleHRzIGNhbm5vdCBiZSByZXRyaWV2ZWQgdmlhIGJpbmRpbmcgcGFyYW1ldGVyIG9mIHRoZSBvcGVyYXRpb24gYmluZGluZylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgc1BhdGhGb3JDb250ZXh0ID0gdlBhcmFtRGVmYXVsdFZhbHVlLiRQYXRoO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChzUGF0aEZvckNvbnRleHQuaW5kZXhPZihgJHtzQmluZGluZ1BhcmFtZXRlcn0vYCkgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNQYXRoRm9yQ29udGV4dCA9IHNQYXRoRm9yQ29udGV4dC5yZXBsYWNlKGAke3NCaW5kaW5nUGFyYW1ldGVyfS9gLCBcIlwiKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDE7IGkgPCBhQ29udGV4dHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChhQ29udGV4dHNbaV0uZ2V0UHJvcGVydHkoc1BhdGhGb3JDb250ZXh0KSAhPT0gdlBhcmFtVmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaWYgdGhlIHZhbHVlcyBmcm9tIHRoZSBjb250ZXh0cyBhcmUgbm90IGFsbCB0aGUgc2FtZSwgZG8gbm90IHByZWZpbGxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbU5hbWU6IHNQYXJhbU5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRiTm9Qb3NzaWJsZVZhbHVlOiB0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7IHBhcmFtTmFtZTogc1BhcmFtTmFtZSwgdmFsdWU6IHZQYXJhbVZhbHVlIH07XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoIChvRXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVhZGluZyBkZWZhdWx0IGFjdGlvbiBwYXJhbWV0ZXJcIiwgc1BhcmFtTmFtZSwgbVBhcmFtZXRlcnMuYWN0aW9uTmFtZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1OYW1lOiBzUGFyYW1OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YkxhdGVQcm9wZXJ0eUVycm9yOiB0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIENhc2UgMS4yOiBQYXJhbWV0ZXJEZWZhdWx0VmFsdWUgZGVmaW5lcyBhIGZpeGVkIHN0cmluZyB2YWx1ZSAoaS5lLiB2UGFyYW1EZWZhdWx0VmFsdWUgPSAnc29tZVN0cmluZycpXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4geyBwYXJhbU5hbWU6IHNQYXJhbU5hbWUsIHZhbHVlOiB2UGFyYW1EZWZhdWx0VmFsdWUgfTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAob1BhcmFtZXRlck1vZGVsICYmIChvUGFyYW1ldGVyTW9kZWwgYXMgYW55KS5vRGF0YVtzUGFyYW1OYW1lXSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIENhc2UgMjogVGhlcmUgaXMgbm8gUGFyYW1ldGVyRGVmYXVsdFZhbHVlIGFubm90YXRpb24gKD0+IGxvb2sgaW50byB0aGUgRkxQIFVzZXIgRGVmYXVsdHMpXG5cblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1OYW1lOiBzUGFyYW1OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IChvUGFyYW1ldGVyTW9kZWwgYXMgYW55KS5vRGF0YVtzUGFyYW1OYW1lXVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHsgcGFyYW1OYW1lOiBzUGFyYW1OYW1lLCB2YWx1ZTogdW5kZWZpbmVkIH07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdGNvbnN0IGdldFBhcmFtZXRlckRlZmF1bHRWYWx1ZSA9IGZ1bmN0aW9uIChzUGFyYW1OYW1lOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9EaWFsb2cuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdFx0XHRcdFx0XHRzQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvblBhdGggPSBDb21tb25VdGlscy5nZXRQYXJhbWV0ZXJQYXRoKG9BY3Rpb25Db250ZXh0LmdldFBhdGgoKSwgc1BhcmFtTmFtZSkgKyBcIkBcIixcblx0XHRcdFx0XHRcdFx0XHRvUGFyYW1ldGVyQW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvblBhdGgpLFxuXHRcdFx0XHRcdFx0XHRcdG9QYXJhbWV0ZXJEZWZhdWx0VmFsdWUgPVxuXHRcdFx0XHRcdFx0XHRcdFx0b1BhcmFtZXRlckFubm90YXRpb25zICYmIG9QYXJhbWV0ZXJBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5QYXJhbWV0ZXJEZWZhdWx0VmFsdWVcIl07IC8vIGVpdGhlciB7ICRQYXRoOiAnc29tZVBhdGgnIH0gb3IgJ3NvbWVTdHJpbmcnXG5cdFx0XHRcdFx0XHRcdHJldHVybiBvUGFyYW1ldGVyRGVmYXVsdFZhbHVlO1xuXHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0Y29uc3QgYUN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZSA9IFtdO1xuXHRcdFx0XHRcdFx0bGV0IHNQYXJhbU5hbWUsIHZQYXJhbWV0ZXJEZWZhdWx0VmFsdWU7XG5cdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGkgaW4gYUFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRcdFx0c1BhcmFtTmFtZSA9IGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lO1xuXHRcdFx0XHRcdFx0XHR2UGFyYW1ldGVyRGVmYXVsdFZhbHVlID0gZ2V0UGFyYW1ldGVyRGVmYXVsdFZhbHVlKHNQYXJhbU5hbWUpO1xuXHRcdFx0XHRcdFx0XHRhQ3VycmVudFBhcmFtRGVmYXVsdFZhbHVlLnB1c2gocHJlZmlsbFBhcmFtZXRlcihzUGFyYW1OYW1lLCB2UGFyYW1ldGVyRGVmYXVsdFZhbHVlKSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChvQWN0aW9uQ29udGV4dC5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKSAmJiBhQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRpZiAoc0JvdW5kRnVuY3Rpb25OYW1lICYmIHNCb3VuZEZ1bmN0aW9uTmFtZS5sZW5ndGggPiAwICYmIHR5cGVvZiBzQm91bmRGdW5jdGlvbk5hbWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGkgaW4gYUNvbnRleHRzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRhRnVuY3Rpb25QYXJhbXMucHVzaChjYWxsQm91bmRGdW5jdGlvbihzQm91bmRGdW5jdGlvbk5hbWUsIGFDb250ZXh0c1tpXSwgbVBhcmFtZXRlcnMubW9kZWwpKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgYVByZWZpbGxQYXJhbVByb21pc2VzID0gUHJvbWlzZS5hbGwoYUN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZSk7XG5cdFx0XHRcdFx0XHRsZXQgYUV4ZWNGdW5jdGlvblByb21pc2VzOiBQcm9taXNlPGFueVtdPiA9IFByb21pc2UucmVzb2x2ZShbXSk7XG5cdFx0XHRcdFx0XHRsZXQgb0V4ZWNGdW5jdGlvbkZyb21NYW5pZmVzdFByb21pc2U7XG5cdFx0XHRcdFx0XHRpZiAoYUZ1bmN0aW9uUGFyYW1zICYmIGFGdW5jdGlvblBhcmFtcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGFFeGVjRnVuY3Rpb25Qcm9taXNlcyA9IFByb21pc2UuYWxsKGFGdW5jdGlvblBhcmFtcyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAobVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNNb2R1bGUgPSBtUGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRcdC5zdWJzdHJpbmcoMCwgbVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLmxhc3RJbmRleE9mKFwiLlwiKSB8fCAtMSlcblx0XHRcdFx0XHRcdFx0XHRcdC5yZXBsYWNlKC9cXC4vZ2ksIFwiL1wiKSxcblx0XHRcdFx0XHRcdFx0XHRzRnVuY3Rpb25OYW1lID0gbVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLnN1YnN0cmluZyhcblx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5sYXN0SW5kZXhPZihcIi5cIikgKyAxLFxuXHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLmxlbmd0aFxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdG9FeGVjRnVuY3Rpb25Gcm9tTWFuaWZlc3RQcm9taXNlID0gRlBNSGVscGVyLmFjdGlvbldyYXBwZXIob0Nsb25lRXZlbnQsIHNNb2R1bGUsIHNGdW5jdGlvbk5hbWUsIHtcblx0XHRcdFx0XHRcdFx0XHRcImNvbnRleHRzXCI6IGFDb250ZXh0c1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYVByb21pc2VzID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuXHRcdFx0XHRcdFx0XHRcdGFQcmVmaWxsUGFyYW1Qcm9taXNlcyxcblx0XHRcdFx0XHRcdFx0XHRhRXhlY0Z1bmN0aW9uUHJvbWlzZXMsXG5cdFx0XHRcdFx0XHRcdFx0b0V4ZWNGdW5jdGlvbkZyb21NYW5pZmVzdFByb21pc2Vcblx0XHRcdFx0XHRcdFx0XSk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZTogYW55ID0gYVByb21pc2VzWzBdO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBmdW5jdGlvblBhcmFtcyA9IGFQcm9taXNlc1sxXTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0Z1bmN0aW9uUGFyYW1zRnJvbU1hbmlmZXN0ID0gYVByb21pc2VzWzJdO1xuXHRcdFx0XHRcdFx0XHRsZXQgc0RpYWxvZ1BhcmFtTmFtZTogc3RyaW5nO1xuXG5cdFx0XHRcdFx0XHRcdC8vIEZpbGwgdGhlIGRpYWxvZyB3aXRoIHRoZSBlYXJsaWVyIGRldGVybWluZWQgcGFyYW1ldGVyIHZhbHVlcyBmcm9tIHRoZSBkaWZmZXJlbnQgc291cmNlc1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGkgaW4gYUFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRcdFx0XHRzRGlhbG9nUGFyYW1OYW1lID0gYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gUGFyYW1ldGVyIHZhbHVlcyBwcm92aWRlZCBpbiB0aGUgY2FsbCBvZiBpbnZva2VBY3Rpb24gb3ZlcnJ1bGUgb3RoZXIgc291cmNlc1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHZQYXJhbWV0ZXJQcm92aWRlZFZhbHVlID0gYVBhcmFtZXRlclZhbHVlcz8uZmluZChcblx0XHRcdFx0XHRcdFx0XHRcdChlbGVtZW50OiBhbnkpID0+IGVsZW1lbnQubmFtZSA9PT0gYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWVcblx0XHRcdFx0XHRcdFx0XHQpPy52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRpZiAodlBhcmFtZXRlclByb3ZpZGVkVmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9PcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZSwgdlBhcmFtZXRlclByb3ZpZGVkVmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAob0Z1bmN0aW9uUGFyYW1zRnJvbU1hbmlmZXN0ICYmIG9GdW5jdGlvblBhcmFtc0Zyb21NYW5pZmVzdC5oYXNPd25Qcm9wZXJ0eShzRGlhbG9nUGFyYW1OYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b09wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0b0Z1bmN0aW9uUGFyYW1zRnJvbU1hbmlmZXN0W3NEaWFsb2dQYXJhbU5hbWVdXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoY3VycmVudFBhcmFtRGVmYXVsdFZhbHVlW2ldICYmIGN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZVtpXS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvT3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIoYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWUsIGN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZVtpXS52YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBpZiB0aGUgZGVmYXVsdCB2YWx1ZSBoYWQgbm90IGJlZW4gcHJldmlvdXNseSBkZXRlcm1pbmVkIGR1ZSB0byBkaWZmZXJlbnQgY29udGV4dHMsIHdlIGRvIG5vdGhpbmcgZWxzZVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoc0JvdW5kRnVuY3Rpb25OYW1lICYmICFjdXJyZW50UGFyYW1EZWZhdWx0VmFsdWVbaV0uYk5vUG9zc2libGVWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFDb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIHdlIGNoZWNrIGlmIHRoZSBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIHNhbWUgcGFyYW0gdmFsdWUgZm9yIGFsbCB0aGUgY29udGV4dHM6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxldCBqID0gMDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0d2hpbGUgKGogPCBhQ29udGV4dHMubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uUGFyYW1zW2pdICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvblBhcmFtc1tqICsgMV0gJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uUGFyYW1zW2pdLmdldE9iamVjdChzRGlhbG9nUGFyYW1OYW1lKSA9PT1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb25QYXJhbXNbaiArIDFdLmdldE9iamVjdChzRGlhbG9nUGFyYW1OYW1lKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aisrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly9wYXJhbSB2YWx1ZXMgYXJlIGFsbCB0aGUgc2FtZTpcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGogPT09IGFDb250ZXh0cy5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b09wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvblBhcmFtc1tqXS5nZXRPYmplY3Qoc0RpYWxvZ1BhcmFtTmFtZSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGZ1bmN0aW9uUGFyYW1zWzBdICYmIGZ1bmN0aW9uUGFyYW1zWzBdLmdldE9iamVjdChzRGlhbG9nUGFyYW1OYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQvL09ubHkgb25lIGNvbnRleHQsIHRoZW4gdGhlIGRlZmF1bHQgcGFyYW0gdmFsdWVzIGFyZSB0byBiZSB2ZXJpZmllZCBmcm9tIHRoZSBmdW5jdGlvbjpcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvT3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb25QYXJhbXNbMF0uZ2V0T2JqZWN0KHNEaWFsb2dQYXJhbU5hbWUpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGJFcnJvckZvdW5kID0gY3VycmVudFBhcmFtRGVmYXVsdFZhbHVlLnNvbWUoZnVuY3Rpb24gKG9WYWx1ZTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG9WYWx1ZS5iTGF0ZVByb3BlcnR5RXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBvVmFsdWUuYkxhdGVQcm9wZXJ0eUVycm9yO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdC8vIElmIGF0IGxlYXN0IG9uZSBEZWZhdWx0IFByb3BlcnR5IGlzIGEgTGF0ZSBQcm9wZXJ0eSBhbmQgYW4gZVRhZyBlcnJvciB3YXMgcmFpc2VkLlxuXHRcdFx0XHRcdFx0XHRpZiAoYkVycm9yRm91bmQpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBzVGV4dCA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19BUFBfQ09NUE9ORU5UX1NBUEZFX0VUQUdfTEFURV9QUk9QRVJUWVwiLCBvUmVzb3VyY2VCdW5kbGUpO1xuXHRcdFx0XHRcdFx0XHRcdE1lc3NhZ2VCb3gud2FybmluZyhzVGV4dCwgeyBjb250ZW50V2lkdGg6IFwiMjVlbVwiIH0gYXMgYW55KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgcGFyYW1ldGVyXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRjb25zdCBmbkFzeW5jQmVmb3JlT3BlbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGlmIChvQWN0aW9uQ29udGV4dC5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKSAmJiBhQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhUGFyYW1ldGVycyA9IG9BY3Rpb25Db250ZXh0LmdldE9iamVjdChcIiRQYXJhbWV0ZXJcIik7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNCaW5kaW5nUGFyYW1ldGVyID0gYVBhcmFtZXRlcnNbMF0gJiYgYVBhcmFtZXRlcnNbMF0uJE5hbWU7XG5cblx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvQ29udGV4dE9iamVjdCA9IGF3YWl0IGFDb250ZXh0c1swXS5yZXF1ZXN0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG9Db250ZXh0T2JqZWN0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvT3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIoc0JpbmRpbmdQYXJhbWV0ZXIsIG9Db250ZXh0T2JqZWN0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YXdhaXQgZm5TZXREZWZhdWx0c0FuZE9wZW5EaWFsb2coc0JpbmRpbmdQYXJhbWV0ZXIpO1xuXHRcdFx0XHRcdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIHBhcmFtZXRlclwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhd2FpdCBmblNldERlZmF1bHRzQW5kT3BlbkRpYWxvZygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRhd2FpdCBmbkFzeW5jQmVmb3JlT3BlbigpO1xuXG5cdFx0XHRcdFx0Ly8gYWRkaW5nIGRlZmF1bHRlZCB2YWx1ZXMgb25seSBoZXJlIGFmdGVyIHRoZXkgYXJlIG5vdCBzZXQgdG8gdGhlIGZpZWxkc1xuXHRcdFx0XHRcdGZvciAoY29uc3QgYWN0aW9uUGFyYW1ldGVySW5mbyBvZiBhY3Rpb25QYXJhbWV0ZXJJbmZvcykge1xuXHRcdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSBhY3Rpb25QYXJhbWV0ZXJJbmZvLmlzTXVsdGlWYWx1ZVxuXHRcdFx0XHRcdFx0XHQ/IChhY3Rpb25QYXJhbWV0ZXJJbmZvLmZpZWxkIGFzIE11bHRpVmFsdWVGaWVsZCkuZ2V0SXRlbXMoKVxuXHRcdFx0XHRcdFx0XHQ6IChhY3Rpb25QYXJhbWV0ZXJJbmZvLmZpZWxkIGFzIEZpZWxkKS5nZXRWYWx1ZSgpO1xuXHRcdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mby52YWx1ZSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mby52YWxpZGF0aW9uUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh2YWx1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhZnRlckNsb3NlOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0Ly8gd2hlbiB0aGUgZGlhbG9nIGlzIGNhbmNlbGxlZCwgbWVzc2FnZXMgbmVlZCB0byBiZSByZW1vdmVkIGluIGNhc2UgdGhlIHNhbWUgYWN0aW9uIHNob3VsZCBiZSBleGVjdXRlZCBhZ2FpblxuXHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzLmZvckVhY2goX3JlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW10ZXIpO1xuXHRcdFx0XHRcdG9EaWFsb2cuZGVzdHJveSgpO1xuXHRcdFx0XHRcdGlmIChhY3Rpb25SZXN1bHQuZGlhbG9nQ2FuY2VsbGVkKSB7XG5cdFx0XHRcdFx0XHRyZWplY3QoQ29uc3RhbnRzLkNhbmNlbEFjdGlvbkRpYWxvZyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJlc29sdmUoYWN0aW9uUmVzdWx0LnJlc3VsdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdG1QYXJhbWV0ZXJzLm9EaWFsb2cgPSBvRGlhbG9nO1xuXHRcdFx0b0RpYWxvZy5zZXRNb2RlbChvQWN0aW9uQ29udGV4dC5nZXRNb2RlbCgpLm9Nb2RlbCk7XG5cdFx0XHRvRGlhbG9nLnNldE1vZGVsKG9QYXJhbWV0ZXJNb2RlbCwgXCJwYXJhbXNNb2RlbFwiKTtcblx0XHRcdG9EaWFsb2cuYmluZEVsZW1lbnQoe1xuXHRcdFx0XHRwYXRoOiBcIi9cIixcblx0XHRcdFx0bW9kZWw6IFwicGFyYW1zTW9kZWxcIlxuXHRcdFx0fSk7XG5cdFx0XHQvLyBlbXB0eSBtb2RlbCB0byBhZGQgZWxlbWVudHMgZHluYW1pY2FsbHkgZGVwZW5kaW5nIG9uIG51bWJlciBvZiBNVkYgZmllbGRzIGRlZmluZWQgb24gdGhlIGRpYWxvZ1xuXHRcdFx0Y29uc3Qgb01WRk1vZGVsID0gbmV3IEpTT05Nb2RlbCh7fSk7XG5cdFx0XHRvRGlhbG9nLnNldE1vZGVsKG9NVkZNb2RlbCwgXCJtdmZ2aWV3XCIpO1xuXG5cdFx0XHRsZXQgc0FjdGlvblBhdGggPSBgJHtzQWN0aW9uTmFtZX0oLi4uKWA7XG5cdFx0XHRpZiAoIWFDb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0c0FjdGlvblBhdGggPSBgLyR7c0FjdGlvblBhdGh9YDtcblx0XHRcdH1cblx0XHRcdG9EaWFsb2cuYmluZEVsZW1lbnQoe1xuXHRcdFx0XHRwYXRoOiBzQWN0aW9uUGF0aFxuXHRcdFx0fSk7XG5cdFx0XHRpZiAob1BhcmVudENvbnRyb2wpIHtcblx0XHRcdFx0Ly8gaWYgdGhlcmUgaXMgYSBwYXJlbnQgY29udHJvbCBzcGVjaWZpZWQgYWRkIHRoZSBkaWFsb2cgYXMgZGVwZW5kZW50XG5cdFx0XHRcdG9QYXJlbnRDb250cm9sLmFkZERlcGVuZGVudChvRGlhbG9nKTtcblx0XHRcdH1cblx0XHRcdGlmIChhQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRvRGlhbG9nLnNldEJpbmRpbmdDb250ZXh0KGFDb250ZXh0c1swXSk7IC8vIHVzZSBjb250ZXh0IG9mIGZpcnN0IHNlbGVjdGVkIGxpbmUgaXRlbVxuXHRcdFx0fVxuXHRcdFx0b09wZXJhdGlvbkJpbmRpbmcgPSBvRGlhbG9nLmdldE9iamVjdEJpbmRpbmcoKTtcblx0XHRcdG9EaWFsb2cub3BlbigpO1xuXHRcdH0gY2F0Y2ggKG9FcnJvcjogYW55KSB7XG5cdFx0XHRyZWplY3Qob0Vycm9yKTtcblx0XHR9XG5cdH0pO1xufVxuZnVuY3Rpb24gZ2V0QWN0aW9uUGFyYW1ldGVycyhvQWN0aW9uOiBhbnkpIHtcblx0Y29uc3QgYVBhcmFtZXRlcnMgPSBvQWN0aW9uLmdldE9iamVjdChcIiRQYXJhbWV0ZXJcIikgfHwgW107XG5cdGlmIChhUGFyYW1ldGVycyAmJiBhUGFyYW1ldGVycy5sZW5ndGgpIHtcblx0XHRpZiAob0FjdGlvbi5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKSkge1xuXHRcdFx0Ly9pbiBjYXNlIG9mIGJvdW5kIGFjdGlvbnMsIGlnbm9yZSB0aGUgZmlyc3QgcGFyYW1ldGVyIGFuZCBjb25zaWRlciB0aGUgcmVzdFxuXHRcdFx0cmV0dXJuIGFQYXJhbWV0ZXJzLnNsaWNlKDEsIGFQYXJhbWV0ZXJzLmxlbmd0aCkgfHwgW107XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhUGFyYW1ldGVycztcbn1cbmZ1bmN0aW9uIGdldElzQWN0aW9uQ3JpdGljYWwob01ldGFNb2RlbDogYW55LCBzUGF0aDogYW55LCBjb250ZXh0cz86IGFueSwgb0JvdW5kQWN0aW9uPzogYW55KSB7XG5cdGNvbnN0IHZBY3Rpb25Dcml0aWNhbCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNBY3Rpb25Dcml0aWNhbGApO1xuXHRsZXQgc0NyaXRpY2FsUGF0aCA9IHZBY3Rpb25Dcml0aWNhbCAmJiB2QWN0aW9uQ3JpdGljYWwuJFBhdGg7XG5cdGlmICghc0NyaXRpY2FsUGF0aCkge1xuXHRcdC8vIHRoZSBzdGF0aWMgdmFsdWUgc2NlbmFyaW8gZm9yIGlzQWN0aW9uQ3JpdGljYWxcblx0XHRyZXR1cm4gISF2QWN0aW9uQ3JpdGljYWw7XG5cdH1cblx0Y29uc3QgYUJpbmRpbmdQYXJhbXMgPSBvQm91bmRBY3Rpb24gJiYgb0JvdW5kQWN0aW9uLmdldE9iamVjdChcIiRQYXJhbWV0ZXJcIiksXG5cdFx0YVBhdGhzID0gc0NyaXRpY2FsUGF0aCAmJiBzQ3JpdGljYWxQYXRoLnNwbGl0KFwiL1wiKSxcblx0XHRiQ29uZGl0aW9uID1cblx0XHRcdGFCaW5kaW5nUGFyYW1zICYmIGFCaW5kaW5nUGFyYW1zLmxlbmd0aCAmJiB0eXBlb2YgYUJpbmRpbmdQYXJhbXMgPT09IFwib2JqZWN0XCIgJiYgc0NyaXRpY2FsUGF0aCAmJiBjb250ZXh0cyAmJiBjb250ZXh0cy5sZW5ndGg7XG5cdGlmIChiQ29uZGl0aW9uKSB7XG5cdFx0Ly9pbiBjYXNlIGJpbmRpbmcgcGF0YW1ldGVycyBhcmUgdGhlcmUgaW4gcGF0aCBuZWVkIHRvIHJlbW92ZSBlZzogLSBfaXQvaXNWZXJpZmllZCA9PiBuZWVkIHRvIHJlbW92ZSBfaXQgYW5kIHRoZSBwYXRoIHNob3VsZCBiZSBpc1ZlcmlmaWVkXG5cdFx0YUJpbmRpbmdQYXJhbXMuZmlsdGVyKGZ1bmN0aW9uIChvUGFyYW1zOiBhbnkpIHtcblx0XHRcdGNvbnN0IGluZGV4ID0gYVBhdGhzICYmIGFQYXRocy5pbmRleE9mKG9QYXJhbXMuJE5hbWUpO1xuXHRcdFx0aWYgKGluZGV4ID4gLTEpIHtcblx0XHRcdFx0YVBhdGhzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0c0NyaXRpY2FsUGF0aCA9IGFQYXRocy5qb2luKFwiL1wiKTtcblx0XHRyZXR1cm4gY29udGV4dHNbMF0uZ2V0T2JqZWN0KHNDcml0aWNhbFBhdGgpO1xuXHR9IGVsc2UgaWYgKHNDcml0aWNhbFBhdGgpIHtcblx0XHQvL2lmIHNjZW5hcmlvIGlzIHBhdGggYmFzZWQgcmV0dXJuIHRoZSBwYXRoIHZhbHVlXG5cdFx0cmV0dXJuIGNvbnRleHRzWzBdLmdldE9iamVjdChzQ3JpdGljYWxQYXRoKTtcblx0fVxufVxuXG5mdW5jdGlvbiBfZ2V0QWN0aW9uUGFyYW1ldGVyQWN0aW9uTmFtZShvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlLCBzQWN0aW9uTGFiZWw6IHN0cmluZywgc0FjdGlvbk5hbWU6IHN0cmluZywgc0VudGl0eVNldE5hbWU6IHN0cmluZykge1xuXHRsZXQgYm91bmRBY3Rpb25OYW1lOiBhbnkgPSBzQWN0aW9uTmFtZSA/IHNBY3Rpb25OYW1lIDogbnVsbDtcblx0Y29uc3QgYUFjdGlvbk5hbWUgPSBib3VuZEFjdGlvbk5hbWUuc3BsaXQoXCIuXCIpO1xuXHRib3VuZEFjdGlvbk5hbWUgPSBib3VuZEFjdGlvbk5hbWUuaW5kZXhPZihcIi5cIikgPj0gMCA/IGFBY3Rpb25OYW1lW2FBY3Rpb25OYW1lLmxlbmd0aCAtIDFdIDogYm91bmRBY3Rpb25OYW1lO1xuXHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGJvdW5kQWN0aW9uTmFtZSAmJiBzRW50aXR5U2V0TmFtZSA/IGAke3NFbnRpdHlTZXROYW1lfXwke2JvdW5kQWN0aW9uTmFtZX1gIDogXCJcIjtcblx0Y29uc3Qgc0tleSA9IFwiQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfQUNUSU9OX05BTUVcIjtcblx0Y29uc3QgYlJlc291cmNlS2V5RXhpc3RzID1cblx0XHRvUmVzb3VyY2VCdW5kbGUgJiYgQ29tbW9uVXRpbHMuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKChvUmVzb3VyY2VCdW5kbGUgYXMgYW55KS5hQ3VzdG9tQnVuZGxlcywgYCR7c0tleX18JHtzdWZmaXhSZXNvdXJjZUtleX1gKTtcblx0aWYgKHNBY3Rpb25MYWJlbCkge1xuXHRcdGlmIChiUmVzb3VyY2VLZXlFeGlzdHMpIHtcblx0XHRcdHJldHVybiBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChzS2V5LCBvUmVzb3VyY2VCdW5kbGUsIG51bGwsIHN1ZmZpeFJlc291cmNlS2V5KTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0b1Jlc291cmNlQnVuZGxlICYmXG5cdFx0XHRDb21tb25VdGlscy5jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoKG9SZXNvdXJjZUJ1bmRsZSBhcyBhbnkpLmFDdXN0b21CdW5kbGVzLCBgJHtzS2V5fXwke3NFbnRpdHlTZXROYW1lfWApXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoc0tleSwgb1Jlc291cmNlQnVuZGxlLCBudWxsLCBgJHtzRW50aXR5U2V0TmFtZX1gKTtcblx0XHR9IGVsc2UgaWYgKG9SZXNvdXJjZUJ1bmRsZSAmJiBDb21tb25VdGlscy5jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoKG9SZXNvdXJjZUJ1bmRsZSBhcyBhbnkpLmFDdXN0b21CdW5kbGVzLCBgJHtzS2V5fWApKSB7XG5cdFx0XHRyZXR1cm4gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoc0tleSwgb1Jlc291cmNlQnVuZGxlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHNBY3Rpb25MYWJlbDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19DT01NT05fRElBTE9HX09LXCIsIG9SZXNvdXJjZUJ1bmRsZSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlNDEyRmFpbGVkVHJhbnNpdGlvbnMoXG5cdG1QYXJhbWV0ZXJzOiBhbnksXG5cdG9BY3Rpb246IGFueSxcblx0c0dyb3VwSWQ6IHN0cmluZyxcblx0Y3VycmVudF9jb250ZXh0X2luZGV4OiBudW1iZXIgfCBudWxsLFxuXHRpQ29udGV4dExlbmd0aDogbnVtYmVyIHwgbnVsbCxcblx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyIHwgdW5kZWZpbmVkLFxuXHRvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlXG4pIHtcblx0aWYgKG1QYXJhbWV0ZXJzLmFDb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0bGV0IHN0cmljdEhhbmRsaW5nRmFpbHM6IGFueTtcblx0XHRjb25zdCBtZXNzYWdlcyA9IHNhcC51aS5nZXRDb3JlKCkuZ2V0TWVzc2FnZU1hbmFnZXIoKS5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0Y29uc3QgcHJvY2Vzc2VkTWVzc2FnZUlkcyA9IG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwicHJvY2Vzc2VkTWVzc2FnZUlkc1wiKTtcblx0XHRjb25zdCB0cmFuc2l0aW9uTWVzc2FnZXMgPSBtZXNzYWdlcy5maWx0ZXIoZnVuY3Rpb24gKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcblx0XHRcdGNvbnN0IGlzRHVwbGljYXRlID0gcHJvY2Vzc2VkTWVzc2FnZUlkcy5maW5kKGZ1bmN0aW9uIChpZDogc3RyaW5nKSB7XG5cdFx0XHRcdHJldHVybiBtZXNzYWdlLmdldElkKCkgPT09IGlkO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAoIWlzRHVwbGljYXRlKSB7XG5cdFx0XHRcdHByb2Nlc3NlZE1lc3NhZ2VJZHMucHVzaChtZXNzYWdlLmdldElkKCkpO1xuXHRcdFx0XHRpZiAobWVzc2FnZS5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLlN1Y2Nlc3MpIHtcblx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcblx0XHRcdFx0XHRcdFwiRGVsYXlNZXNzYWdlc1wiLFxuXHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJEZWxheU1lc3NhZ2VzXCIpLmNvbmNhdChtZXNzYWdlKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBtZXNzYWdlLmdldFBlcnNpc3RlbnQoKSA9PT0gdHJ1ZSAmJiBtZXNzYWdlLmdldFR5cGUoKSAhPT0gTWVzc2FnZVR5cGUuU3VjY2VzcyAmJiAhaXNEdXBsaWNhdGU7XG5cdFx0fSk7XG5cdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJwcm9jZXNzZWRNZXNzYWdlSWRzXCIsIHByb2Nlc3NlZE1lc3NhZ2VJZHMpO1xuXHRcdGlmICh0cmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0XHRpZiAobVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdFx0c3RyaWN0SGFuZGxpbmdGYWlscyA9IG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwic3RyaWN0SGFuZGxpbmdGYWlsc1wiKTtcblx0XHRcdFx0c3RyaWN0SGFuZGxpbmdGYWlscy5wdXNoKHtcblx0XHRcdFx0XHRvQWN0aW9uOiBvQWN0aW9uLFxuXHRcdFx0XHRcdGdyb3VwSWQ6IHNHcm91cElkXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInN0cmljdEhhbmRsaW5nRmFpbHNcIiwgc3RyaWN0SGFuZGxpbmdGYWlscyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKFxuXHRcdGN1cnJlbnRfY29udGV4dF9pbmRleCA9PT0gaUNvbnRleHRMZW5ndGggJiZcblx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCAmJlxuXHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiNDEyTWVzc2FnZXNcIik/Lmxlbmd0aFxuXHQpIHtcblx0XHRvcGVyYXRpb25zSGVscGVyLnJlbmRlck1lc3NhZ2VWaWV3KFxuXHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiNDEyTWVzc2FnZXNcIiksXG5cdFx0XHR0cnVlXG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzKFxuXHRvQWN0aW9uOiBhbnksXG5cdG1QYXJhbWV0ZXJzOiBhbnksXG5cdGJHZXRCb3VuZENvbnRleHQ6IGJvb2xlYW4sXG5cdHNHcm91cElkOiBzdHJpbmcsXG5cdG9SZXNvdXJjZUJ1bmRsZTogUmVzb3VyY2VCdW5kbGUsXG5cdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlciB8IHVuZGVmaW5lZCxcblx0aUNvbnRleHRMZW5ndGg6IG51bWJlciB8IG51bGwsXG5cdGN1cnJlbnRfY29udGV4dF9pbmRleDogbnVtYmVyIHwgbnVsbFxuKSB7XG5cdGxldCBvQWN0aW9uUHJvbWlzZSxcblx0XHRiRW5hYmxlU3RyaWN0SGFuZGxpbmcgPSB0cnVlO1xuXHRpZiAoYkdldEJvdW5kQ29udGV4dCkge1xuXHRcdGNvbnN0IHNQYXRoID0gb0FjdGlvbi5nZXRCb3VuZENvbnRleHQoKS5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgc01ldGFQYXRoID0gb0FjdGlvbi5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE1ldGFQYXRoKHNQYXRoKTtcblx0XHRjb25zdCBvUHJvcGVydHkgPSBvQWN0aW9uLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KHNNZXRhUGF0aCk7XG5cdFx0aWYgKG9Qcm9wZXJ0eSAmJiBvUHJvcGVydHlbMF0/LiRraW5kICE9PSBcIkFjdGlvblwiKSB7XG5cdFx0XHQvL2RvIG5vdCBlbmFibGUgdGhlIHN0cmljdCBoYW5kbGluZyBpZiBpdHMgbm90IGFuIGFjdGlvblxuXHRcdFx0YkVuYWJsZVN0cmljdEhhbmRsaW5nID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCFiRW5hYmxlU3RyaWN0SGFuZGxpbmcpIHtcblx0XHRvQWN0aW9uUHJvbWlzZSA9IGJHZXRCb3VuZENvbnRleHRcblx0XHRcdD8gb0FjdGlvbi5leGVjdXRlKHNHcm91cElkKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0FjdGlvbi5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdCAgfSlcblx0XHRcdDogb0FjdGlvbi5leGVjdXRlKHNHcm91cElkKTtcblx0fSBlbHNlIHtcblx0XHRvQWN0aW9uUHJvbWlzZSA9IGJHZXRCb3VuZENvbnRleHRcblx0XHRcdD8gb0FjdGlvblxuXHRcdFx0XHRcdC5leGVjdXRlKFxuXHRcdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRvcGVyYXRpb25zSGVscGVyLmZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZC5iaW5kKFxuXHRcdFx0XHRcdFx0XHRvcGVyYXRpb25zLFxuXHRcdFx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0XHRcdFx0Y3VycmVudF9jb250ZXh0X2luZGV4LFxuXHRcdFx0XHRcdFx0XHRvQWN0aW9uLmdldENvbnRleHQoKSxcblx0XHRcdFx0XHRcdFx0aUNvbnRleHRMZW5ndGgsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGhhbmRsZTQxMkZhaWxlZFRyYW5zaXRpb25zKFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0b0FjdGlvbixcblx0XHRcdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleCxcblx0XHRcdFx0XHRcdFx0aUNvbnRleHRMZW5ndGgsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGVcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG9BY3Rpb24uZ2V0Qm91bmRDb250ZXh0KCkpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGhhbmRsZTQxMkZhaWxlZFRyYW5zaXRpb25zKFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0b0FjdGlvbixcblx0XHRcdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleCxcblx0XHRcdFx0XHRcdFx0aUNvbnRleHRMZW5ndGgsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGVcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHQ6IG9BY3Rpb25cblx0XHRcdFx0XHQuZXhlY3V0ZShcblx0XHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0b3BlcmF0aW9uc0hlbHBlci5mbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQuYmluZChcblx0XHRcdFx0XHRcdFx0b3BlcmF0aW9ucyxcblx0XHRcdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleCxcblx0XHRcdFx0XHRcdFx0b0FjdGlvbi5nZXRDb250ZXh0KCksXG5cdFx0XHRcdFx0XHRcdGlDb250ZXh0TGVuZ3RoLFxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlclxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdClcblx0XHRcdFx0XHQudGhlbihmdW5jdGlvbiAocmVzdWx0OiBhbnkpIHtcblx0XHRcdFx0XHRcdGhhbmRsZTQxMkZhaWxlZFRyYW5zaXRpb25zKFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0b0FjdGlvbixcblx0XHRcdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleCxcblx0XHRcdFx0XHRcdFx0aUNvbnRleHRMZW5ndGgsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGVcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0aGFuZGxlNDEyRmFpbGVkVHJhbnNpdGlvbnMoXG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRvQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRcdFx0Y3VycmVudF9jb250ZXh0X2luZGV4LFxuXHRcdFx0XHRcdFx0XHRpQ29udGV4dExlbmd0aCxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuXHRcdFx0XHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIG9BY3Rpb25Qcm9taXNlLmNhdGNoKCgpID0+IHtcblx0XHR0aHJvdyBDb25zdGFudHMuQWN0aW9uRXhlY3V0aW9uRmFpbGVkO1xuXHR9KTtcbn1cbmZ1bmN0aW9uIF9leGVjdXRlQWN0aW9uKG9BcHBDb21wb25lbnQ6IGFueSwgbVBhcmFtZXRlcnM6IGFueSwgb1BhcmVudENvbnRyb2w/OiBhbnksIG1lc3NhZ2VIYW5kbGVyPzogTWVzc2FnZUhhbmRsZXIpIHtcblx0Y29uc3QgYUNvbnRleHRzID0gbVBhcmFtZXRlcnMuYUNvbnRleHRzIHx8IFtdO1xuXHRjb25zdCBvTW9kZWwgPSBtUGFyYW1ldGVycy5tb2RlbDtcblx0Y29uc3QgYUFjdGlvblBhcmFtZXRlcnMgPSBtUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVycyB8fCBbXTtcblx0Y29uc3Qgc0FjdGlvbk5hbWUgPSBtUGFyYW1ldGVycy5hY3Rpb25OYW1lO1xuXHRjb25zdCBmbk9uU3VibWl0dGVkID0gbVBhcmFtZXRlcnMuZm5PblN1Ym1pdHRlZDtcblx0Y29uc3QgZm5PblJlc3BvbnNlID0gbVBhcmFtZXRlcnMuZm5PblJlc3BvbnNlO1xuXHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBvUGFyZW50Q29udHJvbCAmJiBvUGFyZW50Q29udHJvbC5pc0EoXCJzYXAudWkuY29yZS5tdmMuVmlld1wiKSAmJiBvUGFyZW50Q29udHJvbC5nZXRDb250cm9sbGVyKCkub1Jlc291cmNlQnVuZGxlO1xuXHRsZXQgb0FjdGlvbjogYW55O1xuXG5cdGZ1bmN0aW9uIHNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSgpIHtcblx0XHRpZiAoYUFjdGlvblBhcmFtZXRlcnMgJiYgYUFjdGlvblBhcmFtZXRlcnMubGVuZ3RoKSB7XG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGFBY3Rpb25QYXJhbWV0ZXJzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGlmICghYUFjdGlvblBhcmFtZXRlcnNbal0udmFsdWUpIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGFBY3Rpb25QYXJhbWV0ZXJzW2pdLiRUeXBlKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLlN0cmluZ1wiOlxuXHRcdFx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVyc1tqXS52YWx1ZSA9IFwiXCI7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5Cb29sZWFuXCI6XG5cdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2pdLnZhbHVlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5CeXRlXCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkludDE2XCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkludDMyXCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkludDY0XCI6XG5cdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2pdLnZhbHVlID0gMDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHQvLyB0YmNcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRvQWN0aW9uLnNldFBhcmFtZXRlcihhQWN0aW9uUGFyYW1ldGVyc1tqXS4kTmFtZSwgYUFjdGlvblBhcmFtZXRlcnNbal0udmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChhQ29udGV4dHMubGVuZ3RoKSB7XG5cdFx0Ly8gVE9ETzogcmVmYWN0b3IgdG8gZGlyZWN0IHVzZSBvZiBQcm9taXNlLmFsbFNldHRsZWRcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkKSB7XG5cdFx0XHRjb25zdCBtQmluZGluZ1BhcmFtZXRlcnMgPSBtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnM7XG5cdFx0XHRjb25zdCBiR3JvdXBlZCA9IG1QYXJhbWV0ZXJzLmJHcm91cGVkO1xuXHRcdFx0Y29uc3QgYkdldEJvdW5kQ29udGV4dCA9IG1QYXJhbWV0ZXJzLmJHZXRCb3VuZENvbnRleHQ7XG5cdFx0XHRpZiAobVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQgJiYgIW1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiNDEyRXhlY3V0ZWRcIikpIHtcblx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzdHJpY3RIYW5kbGluZ1Byb21pc2VzXCIsIFtdKTtcblx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzdHJpY3RIYW5kbGluZ0ZhaWxzXCIsIFtdKTtcblx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCI0MTJNZXNzYWdlc1wiLCBbXSk7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwicHJvY2Vzc2VkTWVzc2FnZUlkc1wiLCBbXSk7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiRGVsYXlNZXNzYWdlc1wiLCBbXSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBhQWN0aW9uUHJvbWlzZXM6IGFueVtdID0gW107XG5cdFx0XHRsZXQgb0FjdGlvblByb21pc2U7XG5cdFx0XHRsZXQgaTtcblx0XHRcdGxldCBzR3JvdXBJZDogc3RyaW5nO1xuXHRcdFx0Y29uc3QgZm5FeGVjdXRlQWN0aW9uID0gZnVuY3Rpb24gKGFjdGlvbkNvbnRleHQ6IGFueSwgY3VycmVudF9jb250ZXh0X2luZGV4OiBhbnksIG9TaWRlRWZmZWN0OiBhbnksIGlDb250ZXh0TGVuZ3RoOiBhbnkpIHtcblx0XHRcdFx0c2V0QWN0aW9uUGFyYW1ldGVyRGVmYXVsdFZhbHVlKCk7XG5cdFx0XHRcdC8vIEZvciBpbnZvY2F0aW9uIGdyb3VwaW5nIFwiaXNvbGF0ZWRcIiBuZWVkIGJhdGNoIGdyb3VwIHBlciBhY3Rpb24gY2FsbFxuXHRcdFx0XHRzR3JvdXBJZCA9ICFiR3JvdXBlZCA/IGAkYXV0by4ke2N1cnJlbnRfY29udGV4dF9pbmRleH1gIDogYWN0aW9uQ29udGV4dC5nZXRVcGRhdGVHcm91cElkKCk7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLnJlcXVlc3RTaWRlRWZmZWN0cyA9IGZuUmVxdWVzdFNpZGVFZmZlY3RzLmJpbmQob3BlcmF0aW9ucywgb0FwcENvbXBvbmVudCwgb1NpZGVFZmZlY3QsIG1QYXJhbWV0ZXJzKTtcblx0XHRcdFx0b0FjdGlvblByb21pc2UgPSBleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzKFxuXHRcdFx0XHRcdGFjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0YkdldEJvdW5kQ29udGV4dCxcblx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0aUNvbnRleHRMZW5ndGgsXG5cdFx0XHRcdFx0Y3VycmVudF9jb250ZXh0X2luZGV4XG5cdFx0XHRcdCk7XG5cdFx0XHRcdGFBY3Rpb25Qcm9taXNlcy5wdXNoKG9BY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0Zm5SZXF1ZXN0U2lkZUVmZmVjdHMob0FwcENvbXBvbmVudCwgb1NpZGVFZmZlY3QsIG1QYXJhbWV0ZXJzLCBzR3JvdXBJZCk7XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgZm5FeGVjdXRlU2luZ2xlQWN0aW9uID0gZnVuY3Rpb24gKGFjdGlvbkNvbnRleHQ6IGFueSwgY3VycmVudF9jb250ZXh0X2luZGV4OiBhbnksIG9TaWRlRWZmZWN0OiBhbnksIGlDb250ZXh0TGVuZ3RoOiBhbnkpIHtcblx0XHRcdFx0Y29uc3QgYUxvY2FsUHJvbWlzZTogYW55ID0gW107XG5cdFx0XHRcdHNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSgpO1xuXHRcdFx0XHQvLyBGb3IgaW52b2NhdGlvbiBncm91cGluZyBcImlzb2xhdGVkXCIgbmVlZCBiYXRjaCBncm91cCBwZXIgYWN0aW9uIGNhbGxcblx0XHRcdFx0c0dyb3VwSWQgPSBgYXBpTW9kZSR7Y3VycmVudF9jb250ZXh0X2luZGV4fWA7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLnJlcXVlc3RTaWRlRWZmZWN0cyA9IGZuUmVxdWVzdFNpZGVFZmZlY3RzLmJpbmQoXG5cdFx0XHRcdFx0b3BlcmF0aW9ucyxcblx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdG9TaWRlRWZmZWN0LFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdGFMb2NhbFByb21pc2Vcblx0XHRcdFx0KTtcblx0XHRcdFx0b0FjdGlvblByb21pc2UgPSBleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzKFxuXHRcdFx0XHRcdGFjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0YkdldEJvdW5kQ29udGV4dCxcblx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0aUNvbnRleHRMZW5ndGgsXG5cdFx0XHRcdFx0Y3VycmVudF9jb250ZXh0X2luZGV4XG5cdFx0XHRcdCk7XG5cdFx0XHRcdGFBY3Rpb25Qcm9taXNlcy5wdXNoKG9BY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0YUxvY2FsUHJvbWlzZS5wdXNoKG9BY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0Zm5SZXF1ZXN0U2lkZUVmZmVjdHMob0FwcENvbXBvbmVudCwgb1NpZGVFZmZlY3QsIG1QYXJhbWV0ZXJzLCBzR3JvdXBJZCwgYUxvY2FsUHJvbWlzZSk7XG5cdFx0XHRcdG9Nb2RlbC5zdWJtaXRCYXRjaChzR3JvdXBJZCk7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbFNldHRsZWQoYUxvY2FsUHJvbWlzZSk7XG5cdFx0XHR9O1xuXG5cdFx0XHRhc3luYyBmdW5jdGlvbiBmbkV4ZWN1dGVTZXF1ZW50aWFsbHkoY29udGV4dHNUb0V4ZWN1dGU6IENvbnRleHRbXSkge1xuXHRcdFx0XHQvLyBPbmUgYWN0aW9uIGFuZCBpdHMgc2lkZSBlZmZlY3RzIGFyZSBjb21wbGV0ZWQgYmVmb3JlIHRoZSBuZXh0IGFjdGlvbiBpcyBleGVjdXRlZFxuXHRcdFx0XHQoXG5cdFx0XHRcdFx0Zm5PblN1Ym1pdHRlZCB8fFxuXHRcdFx0XHRcdGZ1bmN0aW9uIG5vb3AoKSB7XG5cdFx0XHRcdFx0XHQvKiovXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpKGFBY3Rpb25Qcm9taXNlcyk7XG5cdFx0XHRcdGZ1bmN0aW9uIHByb2Nlc3NPbmVBY3Rpb24oY29udGV4dDogYW55LCBhY3Rpb25JbmRleDogYW55LCBpQ29udGV4dExlbmd0aDogYW55KSB7XG5cdFx0XHRcdFx0b0FjdGlvbiA9IG9Nb2RlbC5iaW5kQ29udGV4dChgJHtzQWN0aW9uTmFtZX0oLi4uKWAsIGNvbnRleHQsIG1CaW5kaW5nUGFyYW1ldGVycyk7XG5cdFx0XHRcdFx0cmV0dXJuIGZuRXhlY3V0ZVNpbmdsZUFjdGlvbihcblx0XHRcdFx0XHRcdG9BY3Rpb24sXG5cdFx0XHRcdFx0XHRhY3Rpb25JbmRleCxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0Y29udGV4dDogY29udGV4dCxcblx0XHRcdFx0XHRcdFx0cGF0aEV4cHJlc3Npb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMsXG5cdFx0XHRcdFx0XHRcdHRyaWdnZXJBY3Rpb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC50cmlnZ2VyQWN0aW9uc1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGlDb250ZXh0TGVuZ3RoXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIHNlcmlhbGl6YXRpb246IHByb2Nlc3NPbmVBY3Rpb24gdG8gYmUgY2FsbGVkIGZvciBlYWNoIGVudHJ5IGluIGNvbnRleHRzVG9FeGVjdXRlIG9ubHkgYWZ0ZXIgdGhlIHByb21pc2UgcmV0dXJuZWQgZnJvbSB0aGUgb25lIGJlZm9yZSBoYXMgYmVlbiByZXNvbHZlZFxuXHRcdFx0XHRhd2FpdCBjb250ZXh0c1RvRXhlY3V0ZS5yZWR1Y2UoYXN5bmMgKHByb21pc2U6IFByb21pc2U8dm9pZD4sIGNvbnRleHQ6IENvbnRleHQsIGlkOiBpbnQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRcdFx0XHRhd2FpdCBwcm9taXNlO1xuXHRcdFx0XHRcdGF3YWl0IHByb2Nlc3NPbmVBY3Rpb24oY29udGV4dCwgaWQgKyAxLCBhQ29udGV4dHMubGVuZ3RoKTtcblx0XHRcdFx0fSwgUHJvbWlzZS5yZXNvbHZlKCkpO1xuXG5cdFx0XHRcdGZuSGFuZGxlUmVzdWx0cygpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWJHcm91cGVkKSB7XG5cdFx0XHRcdC8vIEZvciBpbnZvY2F0aW9uIGdyb3VwaW5nIFwiaXNvbGF0ZWRcIiwgZW5zdXJlIHRoYXQgZWFjaCBhY3Rpb24gYW5kIG1hdGNoaW5nIHNpZGUgZWZmZWN0c1xuXHRcdFx0XHQvLyBhcmUgcHJvY2Vzc2VkIGJlZm9yZSB0aGUgbmV4dCBzZXQgaXMgc3VibWl0dGVkLiBXb3JrYXJvdW5kIHVudGlsIEpTT04gYmF0Y2ggaXMgYXZhaWxhYmxlLlxuXHRcdFx0XHQvLyBBbGxvdyBhbHNvIGZvciBMaXN0IFJlcG9ydC5cblx0XHRcdFx0Zm5FeGVjdXRlU2VxdWVudGlhbGx5KGFDb250ZXh0cyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgYUNvbnRleHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0b0FjdGlvbiA9IG9Nb2RlbC5iaW5kQ29udGV4dChgJHtzQWN0aW9uTmFtZX0oLi4uKWAsIGFDb250ZXh0c1tpXSwgbUJpbmRpbmdQYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHRmbkV4ZWN1dGVBY3Rpb24oXG5cdFx0XHRcdFx0XHRvQWN0aW9uLFxuXHRcdFx0XHRcdFx0YUNvbnRleHRzLmxlbmd0aCA8PSAxID8gbnVsbCA6IGksXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGNvbnRleHQ6IGFDb250ZXh0c1tpXSxcblx0XHRcdFx0XHRcdFx0cGF0aEV4cHJlc3Npb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMsXG5cdFx0XHRcdFx0XHRcdHRyaWdnZXJBY3Rpb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC50cmlnZ2VyQWN0aW9uc1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGFDb250ZXh0cy5sZW5ndGhcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdChcblx0XHRcdFx0XHRmbk9uU3VibWl0dGVkIHx8XG5cdFx0XHRcdFx0ZnVuY3Rpb24gbm9vcCgpIHtcblx0XHRcdFx0XHRcdC8qKi9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdCkoYUFjdGlvblByb21pc2VzKTtcblx0XHRcdFx0Zm5IYW5kbGVSZXN1bHRzKCk7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGZuSGFuZGxlUmVzdWx0cygpIHtcblx0XHRcdFx0Ly8gUHJvbWlzZS5hbGxTZXR0bGVkIHdpbGwgbmV2ZXIgYmUgcmVqZWN0ZWQuIEhvd2V2ZXIsIGVzbGludCByZXF1aXJlcyBlaXRoZXIgY2F0Y2ggb3IgcmV0dXJuIC0gdGh1cyB3ZSByZXR1cm4gdGhlIHJlc3VsdGluZyBQcm9taXNlIGFsdGhvdWdoIG5vIG9uZSB3aWxsIHVzZSBpdC5cblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZChhQWN0aW9uUHJvbWlzZXMpLnRoZW4ocmVzb2x2ZSk7XG5cdFx0XHR9XG5cdFx0fSkuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHQoXG5cdFx0XHRcdGZuT25SZXNwb25zZSB8fFxuXHRcdFx0XHRmdW5jdGlvbiBub29wKCkge1xuXHRcdFx0XHRcdC8qKi9cblx0XHRcdFx0fVxuXHRcdFx0KSgpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9BY3Rpb24gPSBvTW9kZWwuYmluZENvbnRleHQoYC8ke3NBY3Rpb25OYW1lfSguLi4pYCk7XG5cdFx0c2V0QWN0aW9uUGFyYW1ldGVyRGVmYXVsdFZhbHVlKCk7XG5cdFx0Y29uc3Qgc0dyb3VwSWQgPSBcImFjdGlvbkltcG9ydFwiO1xuXHRcdGNvbnN0IG9BY3Rpb25Qcm9taXNlID0gb0FjdGlvbi5leGVjdXRlKFxuXHRcdFx0c0dyb3VwSWQsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRvcGVyYXRpb25zSGVscGVyLmZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZC5iaW5kKFxuXHRcdFx0XHRvcGVyYXRpb25zLFxuXHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0eyBsYWJlbDogbVBhcmFtZXRlcnMubGFiZWwsIG1vZGVsOiBvTW9kZWwgfSxcblx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRtZXNzYWdlSGFuZGxlclxuXHRcdFx0KVxuXHRcdCk7XG5cdFx0b01vZGVsLnN1Ym1pdEJhdGNoKHNHcm91cElkKTtcblx0XHQvLyB0cmlnZ2VyIG9uU3VibWl0dGVkIFwiZXZlbnRcIlxuXHRcdChcblx0XHRcdGZuT25TdWJtaXR0ZWQgfHxcblx0XHRcdGZ1bmN0aW9uIG5vb3AoKSB7XG5cdFx0XHRcdC8qKi9cblx0XHRcdH1cblx0XHQpKG9BY3Rpb25Qcm9taXNlKTtcblx0XHRyZXR1cm4gb0FjdGlvblByb21pc2UuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHQoXG5cdFx0XHRcdGZuT25SZXNwb25zZSB8fFxuXHRcdFx0XHRmdW5jdGlvbiBub29wKCkge1xuXHRcdFx0XHRcdC8qKi9cblx0XHRcdFx0fVxuXHRcdFx0KSgpO1xuXHRcdH0pO1xuXHR9XG59XG5mdW5jdGlvbiBfZ2V0UGF0aChvQWN0aW9uQ29udGV4dDogYW55LCBzQWN0aW9uTmFtZTogYW55KSB7XG5cdGxldCBzUGF0aCA9IG9BY3Rpb25Db250ZXh0LmdldFBhdGgoKTtcblx0c1BhdGggPSBvQWN0aW9uQ29udGV4dC5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKSA/IHNQYXRoLnNwbGl0KFwiQCR1aTUub3ZlcmxvYWRcIilbMF0gOiBzUGF0aC5zcGxpdChcIi8wXCIpWzBdO1xuXHRyZXR1cm4gc1BhdGguc3BsaXQoYC8ke3NBY3Rpb25OYW1lfWApWzBdO1xufVxuXG5mdW5jdGlvbiBfdmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzKFxuXHRpc0NyZWF0ZUFjdGlvbjogYm9vbGVhbixcblx0YWN0aW9uUGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgYW55PltdLFxuXHRwYXJhbWV0ZXJWYWx1ZXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+W10sXG5cdHN0YXJ0dXBQYXJhbWV0ZXJzPzogYW55XG4pOiBib29sZWFuIHtcblx0aWYgKHBhcmFtZXRlclZhbHVlcykge1xuXHRcdC8vIElmIHNob3dEaWFsb2cgaXMgZmFsc2UgYnV0IHRoZXJlIGFyZSBwYXJhbWV0ZXJzIGZyb20gdGhlIGludm9rZUFjdGlvbiBjYWxsLCB3ZSBuZWVkIHRvIGNoZWNrIHRoYXQgdmFsdWVzIGhhdmUgYmVlblxuXHRcdC8vIHByb3ZpZGVkIGZvciBhbGwgb2YgdGhlbVxuXHRcdGZvciAoY29uc3QgYWN0aW9uUGFyYW1ldGVyIG9mIGFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0YWN0aW9uUGFyYW1ldGVyLiROYW1lICE9PSBcIlJlc3VsdElzQWN0aXZlRW50aXR5XCIgJiZcblx0XHRcdFx0IXBhcmFtZXRlclZhbHVlcz8uZmluZCgoZWxlbWVudDogYW55KSA9PiBlbGVtZW50Lm5hbWUgPT09IGFjdGlvblBhcmFtZXRlci4kTmFtZSlcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBBdCBsZWFzdCBmb3Igb25lIHBhcmFtZXRlciBubyB2YWx1ZSBoYXMgYmVlbiBwcm92aWRlZCwgc28gd2UgY2FuJ3Qgc2tpcCB0aGUgZGlhbG9nXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSBpZiAoaXNDcmVhdGVBY3Rpb24gJiYgc3RhcnR1cFBhcmFtZXRlcnMpIHtcblx0XHQvLyBJZiBwYXJhbWV0ZXJzIGhhdmUgYmVlbiBwcm92aWRlZCBkdXJpbmcgYXBwbGljYXRpb24gbGF1bmNoLCB3ZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBzZXQgaXMgY29tcGxldGVcblx0XHQvLyBJZiBub3QsIHRoZSBwYXJhbWV0ZXIgZGlhbG9nIHN0aWxsIG5lZWRzIHRvIGJlIHNob3duLlxuXHRcdGZvciAoY29uc3QgYWN0aW9uUGFyYW1ldGVyIG9mIGFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdGlmICghc3RhcnR1cFBhcmFtZXRlcnNbYWN0aW9uUGFyYW1ldGVyLiROYW1lXSkge1xuXHRcdFx0XHQvLyBBdCBsZWFzdCBmb3Igb25lIHBhcmFtZXRlciBubyB2YWx1ZSBoYXMgYmVlbiBwcm92aWRlZCwgc28gd2UgY2FuJ3Qgc2tpcCB0aGUgZGlhbG9nXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGZuUmVxdWVzdFNpZGVFZmZlY3RzKG9BcHBDb21wb25lbnQ6IGFueSwgb1NpZGVFZmZlY3Q6IGFueSwgbVBhcmFtZXRlcnM6IGFueSwgc0dyb3VwSWQ6IGFueSwgYUxvY2FsUHJvbWlzZT86IGFueSkge1xuXHRjb25zdCBvU2lkZUVmZmVjdHNTZXJ2aWNlID0gb0FwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblx0bGV0IG9Mb2NhbFByb21pc2U7XG5cdC8vIHRyaWdnZXIgYWN0aW9ucyBmcm9tIHNpZGUgZWZmZWN0c1xuXHRpZiAob1NpZGVFZmZlY3QgJiYgb1NpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnMgJiYgb1NpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnMubGVuZ3RoKSB7XG5cdFx0b1NpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoc1RyaWdnZXJBY3Rpb246IGFueSkge1xuXHRcdFx0aWYgKHNUcmlnZ2VyQWN0aW9uKSB7XG5cdFx0XHRcdG9Mb2NhbFByb21pc2UgPSBvU2lkZUVmZmVjdHNTZXJ2aWNlLmV4ZWN1dGVBY3Rpb24oc1RyaWdnZXJBY3Rpb24sIG9TaWRlRWZmZWN0LmNvbnRleHQsIHNHcm91cElkKTtcblx0XHRcdFx0aWYgKGFMb2NhbFByb21pc2UpIHtcblx0XHRcdFx0XHRhTG9jYWxQcm9taXNlLnB1c2gob0xvY2FsUHJvbWlzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHQvLyByZXF1ZXN0IHNpZGUgZWZmZWN0cyBmb3IgdGhpcyBhY3Rpb25cblx0Ly8gYXMgd2UgbW92ZSB0aGUgbWVzc2FnZXMgcmVxdWVzdCB0byBQT1NUICRzZWxlY3Qgd2UgbmVlZCB0byBiZSBwcmVwYXJlZCBmb3IgYW4gZW1wdHkgYXJyYXlcblx0aWYgKG9TaWRlRWZmZWN0ICYmIG9TaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucyAmJiBvU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMubGVuZ3RoID4gMCkge1xuXHRcdG9Mb2NhbFByb21pc2UgPSBvU2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0cyhvU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMsIG9TaWRlRWZmZWN0LmNvbnRleHQsIHNHcm91cElkKTtcblx0XHRpZiAoYUxvY2FsUHJvbWlzZSkge1xuXHRcdFx0YUxvY2FsUHJvbWlzZS5wdXNoKG9Mb2NhbFByb21pc2UpO1xuXHRcdH1cblx0XHRvTG9jYWxQcm9taXNlXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmIChtUGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXAgJiYgbVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQoXG5cdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRcdEpTT04ucGFyc2UobVBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLnNlbGVjdGVkSXRlbXMsXG5cdFx0XHRcdFx0XHRcInRhYmxlXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXF1ZXN0aW5nIHNpZGUgZWZmZWN0c1wiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH1cbn1cblxuLyoqXG4gKiBTdGF0aWMgZnVuY3Rpb25zIHRvIGNhbGwgT0RhdGEgYWN0aW9ucyAoYm91bmQvaW1wb3J0KSBhbmQgZnVuY3Rpb25zIChib3VuZC9pbXBvcnQpXG4gKlxuICogQG5hbWVzcGFjZVxuICogQGFsaWFzIHNhcC5mZS5jb3JlLmFjdGlvbnMub3BlcmF0aW9uc1xuICogQHByaXZhdGVcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtb2R1bGUgaXMgb25seSBmb3IgZXhwZXJpbWVudGFsIHVzZSEgPGJyLz48Yj5UaGlzIGlzIG9ubHkgYSBQT0MgYW5kIG1heWJlIGRlbGV0ZWQ8L2I+XG4gKiBAc2luY2UgMS41Ni4wXG4gKi9cbmNvbnN0IG9wZXJhdGlvbnMgPSB7XG5cdGNhbGxCb3VuZEFjdGlvbjogY2FsbEJvdW5kQWN0aW9uLFxuXHRjYWxsQWN0aW9uSW1wb3J0OiBjYWxsQWN0aW9uSW1wb3J0LFxuXHRjYWxsQm91bmRGdW5jdGlvbjogY2FsbEJvdW5kRnVuY3Rpb24sXG5cdGNhbGxGdW5jdGlvbkltcG9ydDogY2FsbEZ1bmN0aW9uSW1wb3J0LFxuXHRleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzOiBleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzLFxuXHR2YWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnM6IF92YWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnMsXG5cdGdldEFjdGlvblBhcmFtZXRlckFjdGlvbk5hbWU6IF9nZXRBY3Rpb25QYXJhbWV0ZXJBY3Rpb25OYW1lLFxuXHRhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrOiBhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrLFxuXHRhZnRlckFjdGlvblJlc29sdXRpb246IGFmdGVyQWN0aW9uUmVzb2x1dGlvblxufTtcblxuZXhwb3J0IGRlZmF1bHQgb3BlcmF0aW9ucztcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7O0VBa2pCTyxnQkFBZ0JBLElBQUksRUFBRUMsT0FBTyxFQUFFO0lBQ3JDLElBQUk7TUFDSCxJQUFJQyxNQUFNLEdBQUdGLElBQUksRUFBRTtJQUNwQixDQUFDLENBQUMsT0FBTUcsQ0FBQyxFQUFFO01BQ1YsT0FBT0YsT0FBTyxDQUFDRSxDQUFDLENBQUM7SUFDbEI7SUFDQSxJQUFJRCxNQUFNLElBQUlBLE1BQU0sQ0FBQ0UsSUFBSSxFQUFFO01BQzFCLE9BQU9GLE1BQU0sQ0FBQ0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFSCxPQUFPLENBQUM7SUFDcEM7SUFDQSxPQUFPQyxNQUFNO0VBQ2Q7RUFHTywwQkFBMEJGLElBQUksRUFBRUssU0FBUyxFQUFFO0lBQ2pELElBQUk7TUFDSCxJQUFJSCxNQUFNLEdBQUdGLElBQUksRUFBRTtJQUNwQixDQUFDLENBQUMsT0FBT0csQ0FBQyxFQUFFO01BQ1gsT0FBT0UsU0FBUyxDQUFDLElBQUksRUFBRUYsQ0FBQyxDQUFDO0lBQzFCO0lBQ0EsSUFBSUQsTUFBTSxJQUFJQSxNQUFNLENBQUNFLElBQUksRUFBRTtNQUMxQixPQUFPRixNQUFNLENBQUNFLElBQUksQ0FBQ0MsU0FBUyxDQUFDQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFRCxTQUFTLENBQUNDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUU7SUFDQSxPQUFPRCxTQUFTLENBQUMsS0FBSyxFQUFFSCxNQUFNLENBQUM7RUFDaEM7RUFBQyxJQWhIY0ssZ0JBQWdCLGFBQzlCQyxhQUEyQixFQUMzQkMsV0FBZ0IsRUFDaEJDLGNBQW1CLEVBQ25CQyxjQUE4QixFQUM5QkMsU0FBYyxFQUNkQyxPQUFZLEVB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
|
|
1590
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiZmluYWxpemVyIiwiYmluZCIsImV4ZWN1dGVBUE1BY3Rpb24iLCJvQXBwQ29tcG9uZW50IiwibVBhcmFtZXRlcnMiLCJvUGFyZW50Q29udHJvbCIsIm1lc3NhZ2VIYW5kbGVyIiwiYUNvbnRleHRzIiwib0RpYWxvZyIsImFmdGVyNDEyIiwiX2V4ZWN1dGVBY3Rpb24iLCJhUmVzdWx0Iiwic29tZSIsIm9TaW5nbGVSZXN1bHQiLCJzdGF0dXMiLCJtZXNzYWdlcyIsIkNvcmUiLCJnZXRNZXNzYWdlTWFuYWdlciIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsImdldFByb3BlcnR5IiwibGVuZ3RoIiwic2V0UHJvcGVydHkiLCJjb25jYXQiLCJhZGRNZXNzYWdlcyIsInNob3dNZXNzYWdlRGlhbG9nIiwib25CZWZvcmVTaG93TWVzc2FnZSIsImFNZXNzYWdlcyIsInNob3dNZXNzYWdlUGFyYW1ldGVyc0luIiwiYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayIsImlzQWN0aW9uUGFyYW1ldGVyRGlhbG9nT3BlbiIsImlzT3BlbiIsIkNvbnN0YW50cyIsIkZFTGlicmFyeSIsIkludm9jYXRpb25Hcm91cGluZyIsIkFjdGlvbiIsIk1lc3NhZ2VCb3giLCJjYWxsQm91bmRBY3Rpb24iLCJzQWN0aW9uTmFtZSIsImNvbnRleHRzIiwib01vZGVsIiwiUHJvbWlzZSIsInJlamVjdCIsImlzQ2FsbGVkV2l0aEFycmF5IiwiQXJyYXkiLCJpc0FycmF5Iiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInNBY3Rpb25QYXRoIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwib0JvdW5kQWN0aW9uIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJpc0NyaXRpY2FsQWN0aW9uIiwiZ2V0SXNBY3Rpb25Dcml0aWNhbCIsImV4dHJhY3RTaW5nbGVSZXN1bHQiLCJ2YWx1ZSIsInJlYXNvbiIsImNhbGxBY3Rpb24iLCJjYWxsQWN0aW9uSW1wb3J0IiwiYmluZENvbnRleHQiLCJvQWN0aW9uSW1wb3J0IiwiZ2V0T2JqZWN0IiwiY2FsbEJvdW5kRnVuY3Rpb24iLCJzRnVuY3Rpb25OYW1lIiwiY29udGV4dCIsInNGdW5jdGlvblBhdGgiLCJvQm91bmRGdW5jdGlvbiIsIl9leGVjdXRlRnVuY3Rpb24iLCJjYWxsRnVuY3Rpb25JbXBvcnQiLCJyZXNvbHZlIiwib0Z1bmN0aW9uSW1wb3J0Iiwib0Z1bmN0aW9uIiwic0dyb3VwSWQiLCJFcnJvciIsIm9GdW5jdGlvblByb21pc2UiLCJleGVjdXRlIiwic3VibWl0QmF0Y2giLCJnZXRCb3VuZENvbnRleHQiLCJvQWN0aW9uIiwibUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMiLCJmbkRpYWxvZyIsIm9BY3Rpb25Qcm9taXNlIiwic0FjdGlvbkxhYmVsIiwibGFiZWwiLCJiU2tpcFBhcmFtZXRlckRpYWxvZyIsInNraXBQYXJhbWV0ZXJEaWFsb2ciLCJiSXNDcmVhdGVBY3Rpb24iLCJiSXNDcml0aWNhbEFjdGlvbiIsInNNZXRhUGF0aCIsInNNZXNzYWdlc1BhdGgiLCJpTWVzc2FnZVNpZGVFZmZlY3QiLCJiSXNTYW1lRW50aXR5Iiwib1JldHVyblR5cGUiLCJiVmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzIiwiYWN0aW9uRGVmaW5pdGlvbiIsImFBY3Rpb25QYXJhbWV0ZXJzIiwiZ2V0QWN0aW9uUGFyYW1ldGVycyIsImJBY3Rpb25OZWVkc1BhcmFtZXRlckRpYWxvZyIsIiROYW1lIiwiYVBhcmFtZXRlclZhbHVlcyIsInBhcmFtZXRlclZhbHVlcyIsIm9Db21wb25lbnREYXRhIiwiZ2V0Q29tcG9uZW50RGF0YSIsIm9TdGFydHVwUGFyYW1ldGVycyIsInN0YXJ0dXBQYXJhbWV0ZXJzIiwiX3ZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycyIsInNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJjb25maXJtQ3JpdGljYWxBY3Rpb24iLCJmbk9uU3VibWl0dGVkIiwib25TdWJtaXR0ZWQiLCJmbk9uUmVzcG9uc2UiLCJvblJlc3BvbnNlIiwiYWN0aW9uTmFtZSIsIm1vZGVsIiwiYkdldEJvdW5kQ29udGV4dCIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsInNlbGVjdGVkSXRlbXMiLCJhZGRpdGlvbmFsU2lkZUVmZmVjdCIsInBhdGhFeHByZXNzaW9ucyIsImZpbmRJbmRleCIsImV4cCIsIiRpc0NvbGxlY3Rpb24iLCJnZXRNb2RlbCIsIiRUeXBlIiwibUJpbmRpbmdQYXJhbWV0ZXJzIiwiJHNlbGVjdCIsInNwbGl0IiwiaW5kZXhPZiIsInB1c2giLCJ0cmlnZ2VyQWN0aW9ucyIsInNwbGljZSIsImJHcm91cGVkIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwiQ2hhbmdlU2V0Iiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiaXNDcmVhdGVBY3Rpb24iLCJiT2JqZWN0UGFnZSIsImNvbnRyb2xJZCIsImNvbnRyb2wiLCJwYXJlbnRDb250cm9sIiwiYnlJZCIsImlzU3RhdGljIiwiJFBhcmFtZXRlciIsImFQYXJhbWV0ZXIiLCIkRW50aXR5U2V0UGF0aCIsIiRJc0JvdW5kIiwiZW50aXR5U2V0TmFtZSIsIm9PcGVyYXRpb25SZXN1bHQiLCJhZnRlckFjdGlvblJlc29sdXRpb24iLCJjYXRjaCIsImkiLCJmaW5kIiwiZWxlbWVudCIsIm5hbWUiLCJzdHJpY3RIYW5kbGluZ0ZhaWxzIiwiYUZhaWxlZENvbnRleHRzIiwiZm9yRWFjaCIsImZhaWwiLCJnZXRDb250ZXh0Iiwib0ZhaWxlZE9wZXJhdGlvblJlc3VsdCIsIm9BY3Rpb25Db250ZXh0IiwiYm91bmRBY3Rpb25OYW1lIiwic3VmZml4UmVzb3VyY2VLZXkiLCJvUmVzb3VyY2VCdW5kbGUiLCJnZXRDb250cm9sbGVyIiwic0NvbmZpcm1hdGlvblRleHQiLCJDb21tb25VdGlscyIsImdldFRyYW5zbGF0ZWRUZXh0IiwiY29uZmlybSIsIm9uQ2xvc2UiLCJzQWN0aW9uIiwiT0siLCJvT3BlcmF0aW9uIiwib0Vycm9yIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJKU09OIiwicGFyc2UiLCJvQ29udHJvbCIsImlzQSIsImFTZWxlY3RlZENvbnRleHRzIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsInNob3dNZXNzYWdlQm94IiwidW5ib3VuZE1lc3NhZ2VzIiwiZmlsdGVyIiwibWVzc2FnZSIsImdldFRhcmdldCIsIkFQRG1lc3NhZ2VzIiwiYWN0aW9uUGFyYW0iLCJBUERNZXNzYWdlIiwiaXNBUERUYXJnZXQiLCJlcnJvclRhcmdldHNJbkFQRCIsImNsb3NlIiwiZGVzdHJveSIsImZpbHRlcmVkTWVzc2FnZXMiLCJiSXNBUERPcGVuIiwidW5kZWZpbmVkIiwiZm5HZXRNZXNzYWdlU3VidGl0bGUiLCJtZXNzYWdlSGFuZGxpbmciLCJzZXRNZXNzYWdlU3VidGl0bGUiLCJzUGF0aCIsIl9nZXRQYXRoIiwibWV0YU1vZGVsIiwiZW50aXR5U2V0Q29udGV4dCIsInNBY3Rpb25OYW1lUGF0aCIsImFjdGlvbk5hbWVDb250ZXh0Iiwic0ZyYWdtZW50TmFtZSIsImFjdGlvblBhcmFtZXRlckluZm9zIiwibWVzc2FnZU1hbmFnZXIiLCJfYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlciIsIm1lc3NhZ2VQYXJhbWV0ZXJzIiwibWFwIiwibWVzc2FnZVBhcmFtZXRlciIsImJpbmRpbmciLCJhY3Rpb25QYXJhbWV0ZXJJbmZvIiwiZmllbGQiLCJnZXRCaW5kaW5nIiwiaXNNdWx0aVZhbHVlIiwiTWVzc2FnZSIsInR5cGUiLCJwcm9jZXNzb3IiLCJwZXJzaXN0ZW50IiwidGFyZ2V0IiwiZ2V0UmVzb2x2ZWRQYXRoIiwiX3JlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW10ZXIiLCJwYXJhbWV0ZXIiLCJhbGxNZXNzYWdlcyIsImdlbmVyYXRlIiwicmVsZXZhbnRNZXNzYWdlcyIsIm1zZyIsImdldENvbnRyb2xJZHMiLCJpZCIsImluY2x1ZGVzIiwicmVtb3ZlTWVzc2FnZXMiLCJfdmFsaWRhdGVQcm9wZXJ0aWVzIiwiYWxsU2V0dGxlZCIsInZhbGlkYXRpb25Qcm9taXNlIiwicmVxdWlyZWRQYXJhbWV0ZXJJbmZvcyIsImdldFJlcXVpcmVkIiwiZW1wdHlSZXF1aXJlZEZpZWxkcyIsInJlcXVpcmVkUGFyYW1ldGVySW5mbyIsImZpZWxkVmFsdWUiLCJnZXRWYWx1ZSIsImdldFBhcmVudCIsImdldEFnZ3JlZ2F0aW9uIiwiZ2V0VGV4dCIsImZpcnN0SW52YWxpZEFjdGlvblBhcmFtZXRlciIsImdldFZhbHVlU3RhdGUiLCJmb2N1cyIsIm9Db250cm9sbGVyIiwiaGFuZGxlQ2hhbmdlIiwib0V2ZW50IiwiZ2V0U291cmNlIiwiZ2V0UGFyYW1ldGVyIiwiZXJyb3IiLCJvRnJhZ21lbnQiLCJYTUxUZW1wbGF0ZVByb2Nlc3NvciIsImxvYWRUZW1wbGF0ZSIsIm9QYXJhbWV0ZXJNb2RlbCIsIkpTT05Nb2RlbCIsIiRkaXNwbGF5TW9kZSIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJiaW5kaW5nQ29udGV4dHMiLCJhY3Rpb24iLCJlbnRpdHlTZXQiLCJtb2RlbHMiLCJjcmVhdGVkRnJhZ21lbnQiLCJhRnVuY3Rpb25QYXJhbXMiLCJvT3BlcmF0aW9uQmluZGluZyIsInNldFVzZXJEZWZhdWx0cyIsIkZyYWdtZW50IiwibG9hZCIsImRlZmluaXRpb24iLCJjb250cm9sbGVyIiwib0RpYWxvZ0NvbnRlbnQiLCJhY3Rpb25QYXJhbWV0ZXIiLCJhY3Rpb25SZXN1bHQiLCJkaWFsb2dDYW5jZWxsZWQiLCJEaWFsb2ciLCJ0aXRsZSIsImNvbnRlbnQiLCJlc2NhcGVIYW5kbGVyIiwiYmVnaW5CdXR0b24iLCJCdXR0b24iLCJ0ZXh0IiwiX2dldEFjdGlvblBhcmFtZXRlckFjdGlvbk5hbWUiLCJwcmVzcyIsIkJ1c3lMb2NrZXIiLCJsb2NrIiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwidlBhcmFtZXRlclZhbHVlIiwib1BhcmFtZXRlckNvbnRleHQiLCJnZXRQYXJhbWV0ZXJDb250ZXh0IiwiYU1WRkNvbnRlbnQiLCJhS2V5VmFsdWVzIiwiaiIsIktleSIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImlzTG9ja2VkIiwidW5sb2NrIiwic2hvd01lc3NhZ2VzIiwibWVzc2FnZVBhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2siLCJzaG93TWVzc2FnZVBhcmFtZXRlcnMiLCJlbmRCdXR0b24iLCJiZWZvcmVPcGVuIiwib0Nsb25lRXZlbnQiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXREZWZhdWx0VmFsdWVzRnVuY3Rpb24iLCJzRGVmYXVsdFZhbHVlc0Z1bmN0aW9uIiwiZm5TZXREZWZhdWx0c0FuZE9wZW5EaWFsb2ciLCJzQmluZGluZ1BhcmFtZXRlciIsInNCb3VuZEZ1bmN0aW9uTmFtZSIsInByZWZpbGxQYXJhbWV0ZXIiLCJzUGFyYW1OYW1lIiwidlBhcmFtRGVmYXVsdFZhbHVlIiwiJFBhdGgiLCJyZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkiLCJ2UGFyYW1WYWx1ZSIsInNQYXRoRm9yQ29udGV4dCIsInJlcGxhY2UiLCJwYXJhbU5hbWUiLCJiTm9Qb3NzaWJsZVZhbHVlIiwicmVxdWVzdFByb3BlcnR5IiwiTG9nIiwiYkxhdGVQcm9wZXJ0eUVycm9yIiwib0RhdGEiLCJnZXRQYXJhbWV0ZXJEZWZhdWx0VmFsdWUiLCJzQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvblBhdGgiLCJnZXRQYXJhbWV0ZXJQYXRoIiwib1BhcmFtZXRlckFubm90YXRpb25zIiwib1BhcmFtZXRlckRlZmF1bHRWYWx1ZSIsImFDdXJyZW50UGFyYW1EZWZhdWx0VmFsdWUiLCJ2UGFyYW1ldGVyRGVmYXVsdFZhbHVlIiwiYVByZWZpbGxQYXJhbVByb21pc2VzIiwiYWxsIiwiYUV4ZWNGdW5jdGlvblByb21pc2VzIiwib0V4ZWNGdW5jdGlvbkZyb21NYW5pZmVzdFByb21pc2UiLCJzTW9kdWxlIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJGUE1IZWxwZXIiLCJhY3Rpb25XcmFwcGVyIiwiYVByb21pc2VzIiwiY3VycmVudFBhcmFtRGVmYXVsdFZhbHVlIiwiZnVuY3Rpb25QYXJhbXMiLCJvRnVuY3Rpb25QYXJhbXNGcm9tTWFuaWZlc3QiLCJzRGlhbG9nUGFyYW1OYW1lIiwidlBhcmFtZXRlclByb3ZpZGVkVmFsdWUiLCJzZXRQYXJhbWV0ZXIiLCJoYXNPd25Qcm9wZXJ0eSIsImJFcnJvckZvdW5kIiwib1ZhbHVlIiwic1RleHQiLCJ3YXJuaW5nIiwiY29udGVudFdpZHRoIiwiZm5Bc3luY0JlZm9yZU9wZW4iLCJhUGFyYW1ldGVycyIsInJlcXVlc3RPYmplY3QiLCJvQ29udGV4dE9iamVjdCIsImdldEl0ZW1zIiwiYWZ0ZXJDbG9zZSIsIkNhbmNlbEFjdGlvbkRpYWxvZyIsInNldE1vZGVsIiwiYmluZEVsZW1lbnQiLCJwYXRoIiwib01WRk1vZGVsIiwiYXR0YWNoQ2hhbmdlIiwiYWRkRGVwZW5kZW50Iiwic2V0QmluZGluZ0NvbnRleHQiLCJnZXRPYmplY3RCaW5kaW5nIiwib3BlbiIsInNsaWNlIiwidkFjdGlvbkNyaXRpY2FsIiwic0NyaXRpY2FsUGF0aCIsImFCaW5kaW5nUGFyYW1zIiwiYVBhdGhzIiwiYkNvbmRpdGlvbiIsIm9QYXJhbXMiLCJpbmRleCIsImpvaW4iLCJzRW50aXR5U2V0TmFtZSIsImFBY3Rpb25OYW1lIiwic0tleSIsImJSZXNvdXJjZUtleUV4aXN0cyIsImNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyIsImFDdXN0b21CdW5kbGVzIiwiaGFuZGxlNDEyRmFpbGVkVHJhbnNpdGlvbnMiLCJjdXJyZW50X2NvbnRleHRfaW5kZXgiLCJpQ29udGV4dExlbmd0aCIsInByb2Nlc3NlZE1lc3NhZ2VJZHMiLCJ0cmFuc2l0aW9uTWVzc2FnZXMiLCJpc0R1cGxpY2F0ZSIsImdldElkIiwiZ2V0VHlwZSIsIk1lc3NhZ2VUeXBlIiwiU3VjY2VzcyIsImdldFBlcnNpc3RlbnQiLCJncm91cElkIiwib3BlcmF0aW9uc0hlbHBlciIsInJlbmRlck1lc3NhZ2VWaWV3IiwiZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0cyIsImJFbmFibGVTdHJpY3RIYW5kbGluZyIsIm9Qcm9wZXJ0eSIsIiRraW5kIiwiZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkIiwib3BlcmF0aW9ucyIsIkFjdGlvbkV4ZWN1dGlvbkZhaWxlZCIsInNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSIsImZuRXhlY3V0ZVNlcXVlbnRpYWxseSIsImNvbnRleHRzVG9FeGVjdXRlIiwicHJvY2Vzc09uZUFjdGlvbiIsImFjdGlvbkluZGV4IiwiZm5FeGVjdXRlU2luZ2xlQWN0aW9uIiwibm9vcCIsImFBY3Rpb25Qcm9taXNlcyIsInJlZHVjZSIsInByb21pc2UiLCJmbkhhbmRsZVJlc3VsdHMiLCJmbkV4ZWN1dGVBY3Rpb24iLCJhY3Rpb25Db250ZXh0Iiwib1NpZGVFZmZlY3QiLCJnZXRVcGRhdGVHcm91cElkIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiZm5SZXF1ZXN0U2lkZUVmZmVjdHMiLCJhTG9jYWxQcm9taXNlIiwiZmluYWxseSIsImFjdGlvblBhcmFtZXRlcnMiLCJvU2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwib0xvY2FsUHJvbWlzZSIsInNUcmlnZ2VyQWN0aW9uIiwiZXhlY3V0ZUFjdGlvbiIsInZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycyIsImdldEFjdGlvblBhcmFtZXRlckFjdGlvbk5hbWUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIm9wZXJhdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgRlBNSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCB0eXBlIExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCBGcmFnbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRnJhZ21lbnRcIjtcbmltcG9ydCB7IE1lc3NhZ2VUeXBlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBYTUxQcmVwcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvWE1MUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgWE1MVGVtcGxhdGVQcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL1hNTFRlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgdHlwZSBGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgTXVsdGlWYWx1ZUZpZWxkSXRlbSBmcm9tIFwic2FwL3VpL21kYy9maWVsZC9NdWx0aVZhbHVlRmllbGRJdGVtXCI7XG5pbXBvcnQgdHlwZSBNdWx0aVZhbHVlRmllbGQgZnJvbSBcInNhcC91aS9tZGMvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcIi4uLy4uL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IG9wZXJhdGlvbnNIZWxwZXIgZnJvbSBcIi4uLy4uL29wZXJhdGlvbnNIZWxwZXJcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VIYW5kbGVyIGZyb20gXCIuLi9NZXNzYWdlSGFuZGxlclwiO1xuXG5jb25zdCBDb25zdGFudHMgPSBGRUxpYnJhcnkuQ29uc3RhbnRzLFxuXHRJbnZvY2F0aW9uR3JvdXBpbmcgPSBGRUxpYnJhcnkuSW52b2NhdGlvbkdyb3VwaW5nO1xuY29uc3QgQWN0aW9uID0gKE1lc3NhZ2VCb3ggYXMgYW55KS5BY3Rpb247XG5cbi8qKlxuICogQ2FsbHMgYSBib3VuZCBhY3Rpb24gZm9yIG9uZSBvciBtdWx0aXBsZSBjb250ZXh0cy5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBzdGF0aWNcbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMub3BlcmF0aW9ucy5jYWxsQm91bmRBY3Rpb25cbiAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5hY3Rpb25zLm9wZXJhdGlvbnNcbiAqIEBwYXJhbSBzQWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRvIGJlIGNhbGxlZFxuICogQHBhcmFtIGNvbnRleHRzIEVpdGhlciBvbmUgY29udGV4dCBvciBhbiBhcnJheSB3aXRoIGNvbnRleHRzIGZvciB3aGljaCB0aGUgYWN0aW9uIGlzIHRvIGJlIGJlIGNhbGxlZFxuICogQHBhcmFtIG9Nb2RlbCBPRGF0YSBNb2RlbFxuICogQHBhcmFtIG9BcHBDb21wb25lbnQgVGhlIEFwcENvbXBvbmVudFxuICogQHBhcmFtIFttUGFyYW1ldGVyc10gT3B0aW9uYWwsIGNhbiBjb250YWluIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMucGFyYW1ldGVyVmFsdWVzXSBBIG1hcCBvZiBhY3Rpb24gcGFyYW1ldGVyIG5hbWVzIGFuZCBwcm92aWRlZCB2YWx1ZXNcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzXSBBIG1hcCBvZiBiaW5kaW5nIHBhcmFtZXRlcnMgdGhhdCB3b3VsZCBiZSBwYXJ0IG9mICRzZWxlY3QgYW5kICRleHBhbmQgY29taW5nIGZyb20gc2lkZSBlZmZlY3RzIGZvciBib3VuZCBhY3Rpb25zXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0XSBBcnJheSBvZiBwcm9wZXJ0eSBwYXRocyB0byBiZSByZXF1ZXN0ZWQgaW4gYWRkaXRpb24gdG8gYWN0dWFsIHRhcmdldCBwcm9wZXJ0aWVzIG9mIHRoZSBzaWRlIGVmZmVjdFxuICogQHBhcmFtIFttUGFyYW1ldGVycy5zaG93QWN0aW9uUGFyYW1ldGVyRGlhbG9nXSBJZiBzZXQgYW5kIGlmIHBhcmFtZXRlcnMgZXhpc3QgdGhlIHVzZXIgcmV0cmlldmVzIGEgZGlhbG9nIHRvIGZpbGwgaW4gcGFyYW1ldGVycywgaWYgYWN0aW9uUGFyYW1ldGVycyBhcmUgcGFzc2VkIHRoZXkgYXJlIHNob3duIHRvIHRoZSB1c2VyXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmxhYmVsXSBBIGh1bWFuLXJlYWRhYmxlIGxhYmVsIGZvciB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZ10gTW9kZSBob3cgYWN0aW9ucyBhcmUgdG8gYmUgY2FsbGVkOiBDaGFuZ2VzZXQgdG8gcHV0IGFsbCBhY3Rpb24gY2FsbHMgaW50byBvbmUgY2hhbmdlc2V0LCBJc29sYXRlZCB0byBwdXQgdGhlbSBpbnRvIHNlcGFyYXRlIGNoYW5nZXNldHMsIGRlZmF1bHRzIHRvIElzb2xhdGVkXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLm9uU3VibWl0dGVkXSBGdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgb25jZSB0aGUgYWN0aW9ucyBhcmUgc3VibWl0dGVkIHdpdGggYW4gYXJyYXkgb2YgcHJvbWlzZXNcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuZGVmYXVsdFBhcmFtZXRlcnNdIENhbiBjb250YWluIGRlZmF1bHQgcGFyYW1ldGVycyBmcm9tIEZMUCB1c2VyIGRlZmF1bHRzXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2xdIElmIHNwZWNpZmllZCwgdGhlIGRpYWxvZ3MgYXJlIGFkZGVkIGFzIGRlcGVuZGVudCBvZiB0aGUgcGFyZW50IGNvbnRyb2xcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuYkdldEJvdW5kQ29udGV4dF0gSWYgc3BlY2lmaWVkLCB0aGUgYWN0aW9uIHByb21pc2UgcmV0dXJucyB0aGUgYm91bmQgY29udGV4dFxuICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyB3aXRoIGFuIGFycmF5IG9mIHJlc3BvbnNlIG9iamVjdHMgKFRPRE86IHRvIGJlIGNoYW5nZWQpXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIGNhbGxCb3VuZEFjdGlvbihzQWN0aW9uTmFtZTogc3RyaW5nLCBjb250ZXh0czogYW55LCBvTW9kZWw6IGFueSwgb0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdGlmICghY29udGV4dHMgfHwgY29udGV4dHMubGVuZ3RoID09PSAwKSB7XG5cdFx0Ly9JbiBGcmVlc3R5bGUgYXBwcyBib3VuZCBhY3Rpb25zIGNhbiBoYXZlIG5vIGNvbnRleHRcblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJCb3VuZCBhY3Rpb25zIGFsd2F5cyByZXF1aXJlcyBhdCBsZWFzdCBvbmUgY29udGV4dFwiKTtcblx0fVxuXHQvLyB0aGlzIG1ldGhvZCBlaXRoZXIgYWNjZXB0cyBzaW5nbGUgY29udGV4dCBvciBhbiBhcnJheSBvZiBjb250ZXh0c1xuXHQvLyBUT0RPOiBSZWZhY3RvciB0byBhbiB1bmFtYmlndW9zIEFQSVxuXHRjb25zdCBpc0NhbGxlZFdpdGhBcnJheSA9IEFycmF5LmlzQXJyYXkoY29udGV4dHMpO1xuXG5cdC8vIGluIGNhc2Ugb2Ygc2luZ2xlIGNvbnRleHQgd3JhcCBpbnRvIGFuIGFycmF5IGZvciBjYWxsZWQgbWV0aG9kcyAoZXNwLiBjYWxsQWN0aW9uKVxuXHRtUGFyYW1ldGVycy5hQ29udGV4dHMgPSBpc0NhbGxlZFdpdGhBcnJheSA/IGNvbnRleHRzIDogW2NvbnRleHRzXTtcblxuXHRjb25zdCBvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdC8vIEFuYWx5emluZyBtZXRhTW9kZWxQYXRoIGZvciBhY3Rpb24gb25seSBmcm9tIGZpcnN0IGNvbnRleHQgc2VlbXMgd2VpcmQsIGJ1dCBwcm9iYWJseSB3b3JrcyBpbiBhbGwgZXhpc3Rpbmcgc3plbmFyaW9zIC0gaWYgc2V2ZXJhbCBjb250ZXh0cyBhcmUgcGFzc2VkLCB0aGV5IHByb2JhYmx5XG5cdFx0Ly8gYmVsb25nIHRvIHRoZSBzYW1lIG1ldGFtb2RlbHBhdGguIFRPRE86IENoZWNrLCB3aGV0aGVyIHRoaXMgY2FuIGJlIGltcHJvdmVkIC8gc3plbmFyaW9zIHdpdGggZGlmZmVyZW50IG1ldGFNb2RlbFBhdGhzIG1pZ2h0IGV4aXN0XG5cdFx0c0FjdGlvblBhdGggPSBgJHtvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG1QYXJhbWV0ZXJzLmFDb250ZXh0c1swXS5nZXRQYXRoKCkpfS8ke3NBY3Rpb25OYW1lfWAsXG5cdFx0b0JvdW5kQWN0aW9uID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtzQWN0aW9uUGF0aH0vQCR1aTUub3ZlcmxvYWQvMGApO1xuXHRtUGFyYW1ldGVycy5pc0NyaXRpY2FsQWN0aW9uID0gZ2V0SXNBY3Rpb25Dcml0aWNhbChvTWV0YU1vZGVsLCBzQWN0aW9uUGF0aCwgbVBhcmFtZXRlcnMuYUNvbnRleHRzLCBvQm91bmRBY3Rpb24pO1xuXG5cdC8vIFByb21pc2UgcmV0dXJuZWQgYnkgY2FsbEFjdGlvbiBjdXJyZW50bHkgaXMgcmVqZWN0ZWQgaW4gY2FzZSBvZiBleGVjdXRpb24gZm9yIG11bHRpcGxlIGNvbnRleHRzIHBhcnRseSBmYWlsaW5nLiBUaGlzIHNob3VsZCBiZSBjaGFuZ2VkIChzb21lIGZhaWxpbmcgY29udGV4dHMgZG8gbm90IG1lYW5cblx0Ly8gdGhhdCBmdW5jdGlvbiBkaWQgbm90IGZ1bGZpbGwgaXRzIHRhc2spLCBidXQgYXMgdGhpcyBpcyBhIGJpZ2dlciByZWZhY3RvcmluZywgZm9yIHRoZSB0aW1lIGJlaW5nIHdlIG5lZWQgdG8gZGVhbCB3aXRoIHRoYXQgYXQgdGhlIGNhbGxpbmcgcGxhY2UgKGkuZS4gaGVyZSlcblx0Ly8gPT4gcHJvdmlkZSB0aGUgc2FtZSBoYW5kbGVyIChtYXBwaW5nIGJhY2sgZnJvbSBhcnJheSB0byBzaW5nbGUgcmVzdWx0L2Vycm9yIGlmIG5lZWRlZCkgZm9yIHJlc29sdmVkL3JlamVjdGVkIGNhc2Vcblx0Y29uc3QgZXh0cmFjdFNpbmdsZVJlc3VsdCA9IGZ1bmN0aW9uIChyZXN1bHQ6IGFueSkge1xuXHRcdC8vIHNpbmdsZSBhY3Rpb24gY291bGQgYmUgcmVzb2x2ZWQgb3IgcmVqZWN0ZWRcblx0XHRpZiAocmVzdWx0WzBdLnN0YXR1cyA9PT0gXCJmdWxmaWxsZWRcIikge1xuXHRcdFx0cmV0dXJuIHJlc3VsdFswXS52YWx1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gSW4gY2FzZSBvZiBkaWFsb2cgY2FuY2VsbGF0aW9uLCBubyBhcnJheSBpcyByZXR1cm5lZCA9PiB0aHJvdyB0aGUgcmVzdWx0LlxuXHRcdFx0Ly8gSWRlYWxseSwgZGlmZmVyZW50aWF0aW5nIHNob3VsZCBub3QgYmUgbmVlZGVkIGhlcmUgPT4gVE9ETzogRmluZCBiZXR0ZXIgc29sdXRpb24gd2hlbiBzZXBhcmF0aW5nIGRpYWxvZyBoYW5kbGluZyAoc2luZ2xlIG9iamVjdCB3aXRoIHNpbmdsZSByZXN1bHQpIGZyb20gYmFja2VuZFxuXHRcdFx0Ly8gZXhlY3V0aW9uIChwb3RlbnRpYWxseSBtdWx0aXBsZSBvYmplY3RzKVxuXHRcdFx0dGhyb3cgcmVzdWx0WzBdLnJlYXNvbiB8fCByZXN1bHQ7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiBjYWxsQWN0aW9uKHNBY3Rpb25OYW1lLCBvTW9kZWwsIG9Cb3VuZEFjdGlvbiwgb0FwcENvbXBvbmVudCwgbVBhcmFtZXRlcnMpLnRoZW4oXG5cdFx0KHJlc3VsdDogYW55KSA9PiB7XG5cdFx0XHRpZiAoaXNDYWxsZWRXaXRoQXJyYXkpIHtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBleHRyYWN0U2luZ2xlUmVzdWx0KHJlc3VsdCk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQocmVzdWx0OiBhbnkpID0+IHtcblx0XHRcdGlmIChpc0NhbGxlZFdpdGhBcnJheSkge1xuXHRcdFx0XHR0aHJvdyByZXN1bHQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZXh0cmFjdFNpbmdsZVJlc3VsdChyZXN1bHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcbn1cbi8qKlxuICogQ2FsbHMgYW4gYWN0aW9uIGltcG9ydC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBzdGF0aWNcbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMub3BlcmF0aW9ucy5jYWxsQWN0aW9uSW1wb3J0XG4gKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuYWN0aW9ucy5vcGVyYXRpb25zXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiBpbXBvcnQgdG8gYmUgY2FsbGVkXG4gKiBAcGFyYW0gb01vZGVsIEFuIGluc3RhbmNlIG9mIGFuIE9EYXRhIFY0IG1vZGVsXG4gKiBAcGFyYW0gb0FwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzXSBPcHRpb25hbCwgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICogQHBhcmFtIFttUGFyYW1ldGVycy5wYXJhbWV0ZXJWYWx1ZXNdIEEgbWFwIG9mIGFjdGlvbiBwYXJhbWV0ZXIgbmFtZXMgYW5kIHByb3ZpZGVkIHZhbHVlc1xuICogQHBhcmFtIFttUGFyYW1ldGVycy5sYWJlbF0gQSBodW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhlIGFjdGlvblxuICogQHBhcmFtIFttUGFyYW1ldGVycy5zaG93QWN0aW9uUGFyYW1ldGVyRGlhbG9nXSBJZiBzZXQgYW5kIGlmIHBhcmFtZXRlcnMgZXhpc3QgdGhlIHVzZXIgcmV0cmlldmVzIGEgZGlhbG9nIHRvIGZpbGwgaW4gcGFyYW1ldGVycywgaWYgYWN0aW9uUGFyYW1ldGVycyBhcmUgcGFzc2VkIHRoZXkgYXJlIHNob3duIHRvIHRoZSB1c2VyXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLm9uU3VibWl0dGVkXSBGdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgb25jZSB0aGUgYWN0aW9ucyBhcmUgc3VibWl0dGVkIHdpdGggYW4gYXJyYXkgb2YgcHJvbWlzZXNcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuZGVmYXVsdFBhcmFtZXRlcnNdIENhbiBjb250YWluIGRlZmF1bHQgcGFyYW1ldGVycyBmcm9tIEZMUCB1c2VyIGRlZmF1bHRzXG4gKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2YgcmVzcG9uc2Ugb2JqZWN0cyAoVE9ETzogdG8gYmUgY2hhbmdlZClcbiAqIEBwcml2YXRlXG4gKiBAdWk1LXJlc3RyaWN0ZWRcbiAqL1xuZnVuY3Rpb24gY2FsbEFjdGlvbkltcG9ydChzQWN0aW9uTmFtZTogc3RyaW5nLCBvTW9kZWw6IGFueSwgb0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdGlmICghb01vZGVsKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFwiQWN0aW9uIGV4cGVjdHMgYSBtb2RlbC9jb250ZXh0IGZvciBleGVjdXRpb25cIik7XG5cdH1cblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRzQWN0aW9uUGF0aCA9IG9Nb2RlbC5iaW5kQ29udGV4dChgLyR7c0FjdGlvbk5hbWV9YCkuZ2V0UGF0aCgpLFxuXHRcdG9BY3Rpb25JbXBvcnQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAvJHtvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNBY3Rpb25QYXRoKS5nZXRPYmplY3QoXCIkQWN0aW9uXCIpfS8wYCk7XG5cdG1QYXJhbWV0ZXJzLmlzQ3JpdGljYWxBY3Rpb24gPSBnZXRJc0FjdGlvbkNyaXRpY2FsKG9NZXRhTW9kZWwsIGAke3NBY3Rpb25QYXRofS9AJHVpNS5vdmVybG9hZGApO1xuXHRyZXR1cm4gY2FsbEFjdGlvbihzQWN0aW9uTmFtZSwgb01vZGVsLCBvQWN0aW9uSW1wb3J0LCBvQXBwQ29tcG9uZW50LCBtUGFyYW1ldGVycyk7XG59XG5mdW5jdGlvbiBjYWxsQm91bmRGdW5jdGlvbihzRnVuY3Rpb25OYW1lOiBzdHJpbmcsIGNvbnRleHQ6IGFueSwgb01vZGVsOiBhbnkpIHtcblx0aWYgKCFjb250ZXh0KSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFwiQm91bmQgZnVuY3Rpb25zIGFsd2F5cyByZXF1aXJlcyBhIGNvbnRleHRcIik7XG5cdH1cblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRzRnVuY3Rpb25QYXRoID0gYCR7b01ldGFNb2RlbC5nZXRNZXRhUGF0aChjb250ZXh0LmdldFBhdGgoKSl9LyR7c0Z1bmN0aW9uTmFtZX1gLFxuXHRcdG9Cb3VuZEZ1bmN0aW9uID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRnVuY3Rpb25QYXRoKTtcblx0cmV0dXJuIF9leGVjdXRlRnVuY3Rpb24oc0Z1bmN0aW9uTmFtZSwgb01vZGVsLCBvQm91bmRGdW5jdGlvbiwgY29udGV4dCk7XG59XG4vKipcbiAqIENhbGxzIGEgZnVuY3Rpb24gaW1wb3J0LlxuICpcbiAqIEBmdW5jdGlvblxuICogQHN0YXRpY1xuICogQG5hbWUgc2FwLmZlLmNvcmUuYWN0aW9ucy5vcGVyYXRpb25zLmNhbGxGdW5jdGlvbkltcG9ydFxuICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmFjdGlvbnMub3BlcmF0aW9uc1xuICogQHBhcmFtIHNGdW5jdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZFxuICogQHBhcmFtIG9Nb2RlbCBBbiBpbnN0YW5jZSBvZiBhbiBPRGF0YSB2NCBtb2RlbFxuICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlc1xuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2FsbEZ1bmN0aW9uSW1wb3J0KHNGdW5jdGlvbk5hbWU6IHN0cmluZywgb01vZGVsOiBhbnkpIHtcblx0aWYgKCFzRnVuY3Rpb25OYW1lKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0c0Z1bmN0aW9uUGF0aCA9IG9Nb2RlbC5iaW5kQ29udGV4dChgLyR7c0Z1bmN0aW9uTmFtZX1gKS5nZXRQYXRoKCksXG5cdFx0b0Z1bmN0aW9uSW1wb3J0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgLyR7b01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRnVuY3Rpb25QYXRoKS5nZXRPYmplY3QoXCIkRnVuY3Rpb25cIil9LzBgKTtcblx0cmV0dXJuIF9leGVjdXRlRnVuY3Rpb24oc0Z1bmN0aW9uTmFtZSwgb01vZGVsLCBvRnVuY3Rpb25JbXBvcnQpO1xufVxuZnVuY3Rpb24gX2V4ZWN1dGVGdW5jdGlvbihzRnVuY3Rpb25OYW1lOiBhbnksIG9Nb2RlbDogYW55LCBvRnVuY3Rpb246IGFueSwgY29udGV4dD86IGFueSkge1xuXHRsZXQgc0dyb3VwSWQ7XG5cdGlmICghb0Z1bmN0aW9uIHx8ICFvRnVuY3Rpb24uZ2V0T2JqZWN0KCkpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBGdW5jdGlvbiAke3NGdW5jdGlvbk5hbWV9IG5vdCBmb3VuZGApKTtcblx0fVxuXHRpZiAoY29udGV4dCkge1xuXHRcdG9GdW5jdGlvbiA9IG9Nb2RlbC5iaW5kQ29udGV4dChgJHtzRnVuY3Rpb25OYW1lfSguLi4pYCwgY29udGV4dCk7XG5cdFx0c0dyb3VwSWQgPSBcImZ1bmN0aW9uR3JvdXBcIjtcblx0fSBlbHNlIHtcblx0XHRvRnVuY3Rpb24gPSBvTW9kZWwuYmluZENvbnRleHQoYC8ke3NGdW5jdGlvbk5hbWV9KC4uLilgKTtcblx0XHRzR3JvdXBJZCA9IFwiZnVuY3Rpb25JbXBvcnRcIjtcblx0fVxuXHRjb25zdCBvRnVuY3Rpb25Qcm9taXNlID0gb0Z1bmN0aW9uLmV4ZWN1dGUoc0dyb3VwSWQpO1xuXHRvTW9kZWwuc3VibWl0QmF0Y2goc0dyb3VwSWQpO1xuXHRyZXR1cm4gb0Z1bmN0aW9uUHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gb0Z1bmN0aW9uLmdldEJvdW5kQ29udGV4dCgpO1xuXHR9KTtcbn1cbmZ1bmN0aW9uIGNhbGxBY3Rpb24oc0FjdGlvbk5hbWU6IGFueSwgb01vZGVsOiBhbnksIG9BY3Rpb246IGFueSwgb0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdHJldHVybiBuZXcgUHJvbWlzZShhc3luYyBmdW5jdGlvbiAocmVzb2x2ZTogKHZhbHVlOiBhbnkpID0+IHZvaWQsIHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZCkge1xuXHRcdGxldCBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVyczogYW55ID0ge307XG5cdFx0bGV0IGZuRGlhbG9nO1xuXHRcdGxldCBvQWN0aW9uUHJvbWlzZTtcblx0XHQvL2xldCBmYWlsZWRBY3Rpb25Qcm9taXNlOiBhbnk7XG5cdFx0Y29uc3Qgc0FjdGlvbkxhYmVsID0gbVBhcmFtZXRlcnMubGFiZWw7XG5cdFx0Y29uc3QgYlNraXBQYXJhbWV0ZXJEaWFsb2cgPSBtUGFyYW1ldGVycy5za2lwUGFyYW1ldGVyRGlhbG9nO1xuXHRcdGNvbnN0IGFDb250ZXh0cyA9IG1QYXJhbWV0ZXJzLmFDb250ZXh0cztcblx0XHRjb25zdCBiSXNDcmVhdGVBY3Rpb24gPSBtUGFyYW1ldGVycy5iSXNDcmVhdGVBY3Rpb247XG5cdFx0Y29uc3QgYklzQ3JpdGljYWxBY3Rpb24gPSBtUGFyYW1ldGVycy5pc0NyaXRpY2FsQWN0aW9uO1xuXHRcdGxldCBvTWV0YU1vZGVsO1xuXHRcdGxldCBzTWV0YVBhdGg7XG5cdFx0bGV0IHNNZXNzYWdlc1BhdGg6IGFueTtcblx0XHRsZXQgaU1lc3NhZ2VTaWRlRWZmZWN0O1xuXHRcdGxldCBiSXNTYW1lRW50aXR5O1xuXHRcdGxldCBvUmV0dXJuVHlwZTtcblx0XHRsZXQgYlZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycztcblx0XHRjb25zdCBhY3Rpb25EZWZpbml0aW9uID0gb0FjdGlvbi5nZXRPYmplY3QoKTtcblx0XHRpZiAoIW9BY3Rpb24gfHwgIW9BY3Rpb24uZ2V0T2JqZWN0KCkpIHtcblx0XHRcdHJldHVybiByZWplY3QobmV3IEVycm9yKGBBY3Rpb24gJHtzQWN0aW9uTmFtZX0gbm90IGZvdW5kYCkpO1xuXHRcdH1cblxuXHRcdC8vIEdldCB0aGUgcGFyYW1ldGVycyBvZiB0aGUgYWN0aW9uXG5cdFx0Y29uc3QgYUFjdGlvblBhcmFtZXRlcnMgPSBnZXRBY3Rpb25QYXJhbWV0ZXJzKG9BY3Rpb24pO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIGFjdGlvbiBoYXMgcGFyYW1ldGVycyBhbmQgd291bGQgbmVlZCBhIHBhcmFtZXRlciBkaWFsb2dcblx0XHQvLyBUaGUgcGFyYW1ldGVyIFJlc3VsdElzQWN0aXZlRW50aXR5IGlzIGFsd2F5cyBoaWRkZW4gaW4gdGhlIGRpYWxvZyEgSGVuY2UgaWZcblx0XHQvLyB0aGlzIGlzIHRoZSBvbmx5IHBhcmFtZXRlciwgdGhpcyBpcyB0cmVhdGVkIGFzIG5vIHBhcmFtZXRlciBoZXJlIGJlY2F1c2UgdGhlXG5cdFx0Ly8gZGlhbG9nIHdvdWxkIGJlIGVtcHR5IVxuXHRcdC8vIEZJWE1FOiBTaG91bGQgb25seSBpZ25vcmUgdGhpcyBpZiB0aGlzIGlzIGEgJ2NyZWF0ZScgYWN0aW9uLCBvdGhlcndpc2UgaXQgaXMganVzdCBzb21lIG5vcm1hbCBwYXJhbWV0ZXIgdGhhdCBoYXBwZW5zIHRvIGhhdmUgdGhpcyBuYW1lXG5cdFx0Y29uc3QgYkFjdGlvbk5lZWRzUGFyYW1ldGVyRGlhbG9nID1cblx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzLmxlbmd0aCA+IDAgJiYgIShhQWN0aW9uUGFyYW1ldGVycy5sZW5ndGggPT09IDEgJiYgYUFjdGlvblBhcmFtZXRlcnNbMF0uJE5hbWUgPT09IFwiUmVzdWx0SXNBY3RpdmVFbnRpdHlcIik7XG5cblx0XHQvLyBQcm92aWRlZCB2YWx1ZXMgZm9yIHRoZSBhY3Rpb24gcGFyYW1ldGVycyBmcm9tIGludm9rZUFjdGlvbiBjYWxsXG5cdFx0Y29uc3QgYVBhcmFtZXRlclZhbHVlcyA9IG1QYXJhbWV0ZXJzLnBhcmFtZXRlclZhbHVlcztcblxuXHRcdC8vIERldGVybWluZSBzdGFydHVwIHBhcmFtZXRlcnMgaWYgcHJvdmlkZWRcblx0XHRjb25zdCBvQ29tcG9uZW50RGF0YSA9IG9BcHBDb21wb25lbnQuZ2V0Q29tcG9uZW50RGF0YSgpO1xuXHRcdGNvbnN0IG9TdGFydHVwUGFyYW1ldGVycyA9IChvQ29tcG9uZW50RGF0YSAmJiBvQ29tcG9uZW50RGF0YS5zdGFydHVwUGFyYW1ldGVycykgfHwge307XG5cblx0XHQvLyBJbiBjYXNlIGFuIGFjdGlvbiBwYXJhbWV0ZXIgaXMgbmVlZGVkLCBhbmQgd2Ugc2hhbGwgc2tpcCB0aGUgZGlhbG9nLCBjaGVjayBpZiB2YWx1ZXMgYXJlIHByb3ZpZGVkIGZvciBhbGwgcGFyYW1ldGVyc1xuXHRcdGlmIChiQWN0aW9uTmVlZHNQYXJhbWV0ZXJEaWFsb2cgJiYgYlNraXBQYXJhbWV0ZXJEaWFsb2cpIHtcblx0XHRcdGJWYWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnMgPSBfdmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzKFxuXHRcdFx0XHRiSXNDcmVhdGVBY3Rpb24sXG5cdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRhUGFyYW1ldGVyVmFsdWVzLFxuXHRcdFx0XHRvU3RhcnR1cFBhcmFtZXRlcnNcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Ly8gRGVwZW5kaW5nIG9uIHRoZSBwcmV2aW91c2x5IGRldGVybWluZWQgZGF0YSwgZWl0aGVyIHNldCBhIGRpYWxvZyBvciBsZWF2ZSBpdCBlbXB0eSB3aGljaFxuXHRcdC8vIHdpbGwgbGVhZCB0byBkaXJlY3QgZXhlY3V0aW9uIG9mIHRoZSBhY3Rpb24gd2l0aG91dCBhIGRpYWxvZ1xuXHRcdGZuRGlhbG9nID0gbnVsbDtcblx0XHRpZiAoYkFjdGlvbk5lZWRzUGFyYW1ldGVyRGlhbG9nKSB7XG5cdFx0XHRpZiAoIShiU2tpcFBhcmFtZXRlckRpYWxvZyAmJiBiVmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzKSkge1xuXHRcdFx0XHRmbkRpYWxvZyA9IHNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2c7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChiSXNDcml0aWNhbEFjdGlvbikge1xuXHRcdFx0Zm5EaWFsb2cgPSBjb25maXJtQ3JpdGljYWxBY3Rpb247XG5cdFx0fVxuXG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMgPSB7XG5cdFx0XHRmbk9uU3VibWl0dGVkOiBtUGFyYW1ldGVycy5vblN1Ym1pdHRlZCxcblx0XHRcdGZuT25SZXNwb25zZTogbVBhcmFtZXRlcnMub25SZXNwb25zZSxcblx0XHRcdGFjdGlvbk5hbWU6IHNBY3Rpb25OYW1lLFxuXHRcdFx0bW9kZWw6IG9Nb2RlbCxcblx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzOiBhQWN0aW9uUGFyYW1ldGVycyxcblx0XHRcdGJHZXRCb3VuZENvbnRleHQ6IG1QYXJhbWV0ZXJzLmJHZXRCb3VuZENvbnRleHQsXG5cdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IG1QYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbixcblx0XHRcdGxhYmVsOiBtUGFyYW1ldGVycy5sYWJlbCxcblx0XHRcdHNlbGVjdGVkSXRlbXM6IG1QYXJhbWV0ZXJzLnNlbGVjdGVkSXRlbXNcblx0XHR9O1xuXHRcdGlmIChvQWN0aW9uLmdldE9iamVjdChcIiRJc0JvdW5kXCIpKSB7XG5cdFx0XHRpZiAobVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QgJiYgbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zKSB7XG5cdFx0XHRcdG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRcdHNNZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoYUNvbnRleHRzWzBdLmdldFBhdGgoKSk7XG5cdFx0XHRcdHNNZXNzYWdlc1BhdGggPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YVBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWVzc2FnZXMvJFBhdGhgKTtcblxuXHRcdFx0XHRpZiAoc01lc3NhZ2VzUGF0aCkge1xuXHRcdFx0XHRcdGlNZXNzYWdlU2lkZUVmZmVjdCA9IG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucy5maW5kSW5kZXgoZnVuY3Rpb24gKGV4cDogYW55KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHlwZW9mIGV4cCA9PT0gXCJzdHJpbmdcIiAmJiBleHAgPT09IHNNZXNzYWdlc1BhdGg7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHQvLyBBZGQgU0FQX01lc3NhZ2VzIGJ5IGRlZmF1bHQgaWYgbm90IGFubm90YXRlZCBieSBzaWRlIGVmZmVjdHMsIGFjdGlvbiBkb2VzIG5vdCByZXR1cm4gYSBjb2xsZWN0aW9uIGFuZFxuXHRcdFx0XHRcdC8vIHRoZSByZXR1cm4gdHlwZSBpcyB0aGUgc2FtZSBhcyB0aGUgYm91bmQgdHlwZVxuXHRcdFx0XHRcdG9SZXR1cm5UeXBlID0gb0FjdGlvbi5nZXRPYmplY3QoXCIkUmV0dXJuVHlwZVwiKTtcblx0XHRcdFx0XHRiSXNTYW1lRW50aXR5ID1cblx0XHRcdFx0XHRcdG9SZXR1cm5UeXBlICYmICFvUmV0dXJuVHlwZS4kaXNDb2xsZWN0aW9uICYmIG9BY3Rpb24uZ2V0TW9kZWwoKS5nZXRPYmplY3Qoc01ldGFQYXRoKS4kVHlwZSA9PT0gb1JldHVyblR5cGUuJFR5cGU7XG5cblx0XHRcdFx0XHRpZiAoaU1lc3NhZ2VTaWRlRWZmZWN0ID4gLTEgfHwgYklzU2FtZUVudGl0eSkge1xuXHRcdFx0XHRcdFx0Ly8gdGhlIG1lc3NhZ2UgcGF0aCBpcyBhbm5vdGF0ZWQgYXMgc2lkZSBlZmZlY3QuIEFzIHRoZXJlJ3Mgbm8gYmluZGluZyBmb3IgaXQgYW5kIHRoZSBtb2RlbCBkb2VzIGN1cnJlbnRseSBub3QgYWxsb3dcblx0XHRcdFx0XHRcdC8vIHRvIGFkZCBpdCBhdCBhIGxhdGVyIHBvaW50IG9mIHRpbWUgd2UgaGF2ZSB0byB0YWtlIGNhcmUgaXQncyBwYXJ0IG9mIHRoZSAkc2VsZWN0IG9mIHRoZSBQT1NULCB0aGVyZWZvcmUgbW92aW5nIGl0LlxuXHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzID0gbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzIHx8IHt9O1xuXG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdG9BY3Rpb24uZ2V0T2JqZWN0KGAkUmV0dXJuVHlwZS8kVHlwZS8ke3NNZXNzYWdlc1BhdGh9YCkgJiZcblx0XHRcdFx0XHRcdFx0KCFtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdCB8fFxuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0LnNwbGl0KFwiLFwiKS5pbmRleE9mKHNNZXNzYWdlc1BhdGgpID09PSAtMSlcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdCA9IG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0XG5cdFx0XHRcdFx0XHRcdFx0PyBgJHttUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdH0sJHtzTWVzc2FnZXNQYXRofWBcblx0XHRcdFx0XHRcdFx0XHQ6IHNNZXNzYWdlc1BhdGg7XG5cdFx0XHRcdFx0XHRcdC8vIEFkZCBzaWRlIGVmZmVjdHMgYXQgZW50aXR5IGxldmVsIGJlY2F1c2UgJHNlbGVjdCBzdG9wcyB0aGVzZSBiZWluZyByZXR1cm5lZCBieSB0aGUgYWN0aW9uXG5cdFx0XHRcdFx0XHRcdC8vIE9ubHkgaWYgbm8gb3RoZXIgc2lkZSBlZmZlY3RzIHdlcmUgYWRkZWQgZm9yIE1lc3NhZ2VzXG5cdFx0XHRcdFx0XHRcdGlmIChpTWVzc2FnZVNpZGVFZmZlY3QgPT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLnB1c2goXCIqXCIpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb25zLmxlbmd0aCA9PT0gMCAmJiBpTWVzc2FnZVNpZGVFZmZlY3QgPiAtMSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIG5vIHRyaWdnZXIgYWN0aW9uIHRoZXJlZm9yZSBubyBuZWVkIHRvIHJlcXVlc3QgbWVzc2FnZXMgYWdhaW5cblx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMuc3BsaWNlKGlNZXNzYWdlU2lkZUVmZmVjdCwgMSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUNvbnRleHRzID0gYUNvbnRleHRzO1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzID0gbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzO1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QgPSBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdDtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmJHcm91cGVkID0gbVBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nID09PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0O1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQgPSBtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IG1QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcDtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmlzQ3JlYXRlQWN0aW9uID0gYklzQ3JlYXRlQWN0aW9uO1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYk9iamVjdFBhZ2UgPSBtUGFyYW1ldGVycy5iT2JqZWN0UGFnZTtcblx0XHRcdGlmIChtUGFyYW1ldGVycy5jb250cm9sSWQpIHtcblx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuY29udHJvbCA9IG1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wuYnlJZChtUGFyYW1ldGVycy5jb250cm9sSWQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuY29udHJvbCA9IG1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2w7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChiSXNDcmVhdGVBY3Rpb24pIHtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmJJc0NyZWF0ZUFjdGlvbiA9IGJJc0NyZWF0ZUFjdGlvbjtcblx0XHR9XG5cdFx0Ly9jaGVjayBmb3Igc2tpcHBpbmcgc3RhdGljIGFjdGlvbnNcblx0XHRjb25zdCBpc1N0YXRpYyA9IChhY3Rpb25EZWZpbml0aW9uLiRQYXJhbWV0ZXIgfHwgW10pLnNvbWUoKGFQYXJhbWV0ZXI6IGFueSkgPT4ge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0KChhY3Rpb25EZWZpbml0aW9uLiRFbnRpdHlTZXRQYXRoICYmIGFjdGlvbkRlZmluaXRpb24uJEVudGl0eVNldFBhdGggPT09IGFQYXJhbWV0ZXIuJE5hbWUpIHx8IGFjdGlvbkRlZmluaXRpb24uJElzQm91bmQpICYmXG5cdFx0XHRcdGFQYXJhbWV0ZXIuJGlzQ29sbGVjdGlvblxuXHRcdFx0KTtcblx0XHR9KTtcblx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pc1N0YXRpYyA9IGlzU3RhdGljO1xuXHRcdGlmIChmbkRpYWxvZykge1xuXHRcdFx0b0FjdGlvblByb21pc2UgPSBmbkRpYWxvZyhcblx0XHRcdFx0c0FjdGlvbk5hbWUsXG5cdFx0XHRcdG9BcHBDb21wb25lbnQsXG5cdFx0XHRcdHNBY3Rpb25MYWJlbCxcblx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRhUGFyYW1ldGVyVmFsdWVzLFxuXHRcdFx0XHRvQWN0aW9uLFxuXHRcdFx0XHRtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sLFxuXHRcdFx0XHRtUGFyYW1ldGVycy5lbnRpdHlTZXROYW1lLFxuXHRcdFx0XHRtUGFyYW1ldGVycy5tZXNzYWdlSGFuZGxlclxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBvQWN0aW9uUHJvbWlzZVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAob09wZXJhdGlvblJlc3VsdDogYW55KSB7XG5cdFx0XHRcdFx0YWZ0ZXJBY3Rpb25SZXNvbHV0aW9uKG1QYXJhbWV0ZXJzLCBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycywgYWN0aW9uRGVmaW5pdGlvbik7XG5cdFx0XHRcdFx0cmVzb2x2ZShvT3BlcmF0aW9uUmVzdWx0KTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvT3BlcmF0aW9uUmVzdWx0OiBhbnkpIHtcblx0XHRcdFx0XHRyZWplY3Qob09wZXJhdGlvblJlc3VsdCk7XG5cdFx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBUYWtlIG92ZXIgYWxsIHByb3ZpZGVkIHBhcmFtZXRlciB2YWx1ZXMgYW5kIGNhbGwgdGhlIGFjdGlvbi5cblx0XHRcdC8vIFRoaXMgc2hhbGwgb25seSBoYXBwZW4gaWYgdmFsdWVzIGFyZSBwcm92aWRlZCBmb3IgYWxsIHRoZSBwYXJhbWV0ZXJzLCBvdGhlcndpc2UgdGhlIHBhcmFtZXRlciBkaWFsb2cgc2hhbGwgYmUgc2hvd24gd2hpY2ggaXMgZW5zdXJlZCBlYXJsaWVyXG5cdFx0XHRpZiAoYVBhcmFtZXRlclZhbHVlcykge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGkgaW4gbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVyc1tpXS52YWx1ZSA9IGFQYXJhbWV0ZXJWYWx1ZXM/LmZpbmQoXG5cdFx0XHRcdFx0XHQoZWxlbWVudDogYW55KSA9PiBlbGVtZW50Lm5hbWUgPT09IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lXG5cdFx0XHRcdFx0KT8udmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAoY29uc3QgaSBpbiBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFBY3Rpb25QYXJhbWV0ZXJzW2ldLnZhbHVlID1cblx0XHRcdFx0XHRcdG9TdGFydHVwUGFyYW1ldGVyc1ttQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZV0/LlswXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0bGV0IG9PcGVyYXRpb25SZXN1bHQ6IGFueTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzPy5pbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCI0MTJFeGVjdXRlZFwiLCBmYWxzZSk7XG5cdFx0XHRcdG9PcGVyYXRpb25SZXN1bHQgPSBhd2FpdCBfZXhlY3V0ZUFjdGlvbihcblx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wsXG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMubWVzc2FnZUhhbmRsZXJcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRjb25zdCBtZXNzYWdlcyA9IENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKS5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCAmJlxuXHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiNDEyRXhlY3V0ZWRcIikgJiZcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInN0cmljdEhhbmRsaW5nRmFpbHNcIik/Lmxlbmd0aFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcblx0XHRcdFx0XHRcdFwiRGVsYXlNZXNzYWdlc1wiLFxuXHRcdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJEZWxheU1lc3NhZ2VzXCIpLmNvbmNhdChtZXNzYWdlcylcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFmdGVyQWN0aW9uUmVzb2x1dGlvbihtUGFyYW1ldGVycywgbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMsIGFjdGlvbkRlZmluaXRpb24pO1xuXHRcdFx0XHRyZXNvbHZlKG9PcGVyYXRpb25SZXN1bHQpO1xuXHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdHJlamVjdChvT3BlcmF0aW9uUmVzdWx0KTtcblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCAmJlxuXHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiNDEyRXhlY3V0ZWRcIikgJiZcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInN0cmljdEhhbmRsaW5nRmFpbHNcIik/Lmxlbmd0aFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc3RyaWN0SGFuZGxpbmdGYWlscyA9IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwic3RyaWN0SGFuZGxpbmdGYWlsc1wiKTtcblx0XHRcdFx0XHRcdGNvbnN0IGFGYWlsZWRDb250ZXh0cyA9IFtdIGFzIGFueTtcblx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nRmFpbHMuZm9yRWFjaChmdW5jdGlvbiAoZmFpbDogYW55KSB7XG5cdFx0XHRcdFx0XHRcdGFGYWlsZWRDb250ZXh0cy5wdXNoKGZhaWwub0FjdGlvbi5nZXRDb250ZXh0KCkpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQ29udGV4dHMgPSBhRmFpbGVkQ29udGV4dHM7XG5cdFx0XHRcdFx0XHRjb25zdCBvRmFpbGVkT3BlcmF0aW9uUmVzdWx0ID0gYXdhaXQgX2V4ZWN1dGVBY3Rpb24oXG5cdFx0XHRcdFx0XHRcdG9BcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sLFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5tZXNzYWdlSGFuZGxlclxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKS5hZGRNZXNzYWdlcyhtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcIkRlbGF5TWVzc2FnZXNcIikpO1xuXHRcdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzdHJpY3RIYW5kbGluZ0ZhaWxzXCIsIFtdKTtcblx0XHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwicHJvY2Vzc2VkTWVzc2FnZUlkc1wiLCBbXSk7XG5cdFx0XHRcdFx0XHRhZnRlckFjdGlvblJlc29sdXRpb24obVBhcmFtZXRlcnMsIG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLCBhY3Rpb25EZWZpbml0aW9uKTtcblx0XHRcdFx0XHRcdHJlc29sdmUob0ZhaWxlZE9wZXJhdGlvblJlc3VsdCk7XG5cdFx0XHRcdFx0fSBjYXRjaCAob0ZhaWxlZE9wZXJhdGlvblJlc3VsdCkge1xuXHRcdFx0XHRcdFx0cmVqZWN0KG9GYWlsZWRPcGVyYXRpb25SZXN1bHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRtUGFyYW1ldGVycz8ubWVzc2FnZUhhbmRsZXI/LnNob3dNZXNzYWdlRGlhbG9nKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cbmZ1bmN0aW9uIGNvbmZpcm1Dcml0aWNhbEFjdGlvbihcblx0c0FjdGlvbk5hbWU6IGFueSxcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRzQWN0aW9uTGFiZWw6IGFueSxcblx0bVBhcmFtZXRlcnM6IGFueSxcblx0YUFjdGlvblBhcmFtZXRlcnM6IGFueSxcblx0YVBhcmFtZXRlclZhbHVlczogYW55LFxuXHRvQWN0aW9uQ29udGV4dDogYW55LFxuXHRvUGFyZW50Q29udHJvbDogYW55LFxuXHRlbnRpdHlTZXROYW1lOiBhbnksXG5cdG1lc3NhZ2VIYW5kbGVyOiBhbnlcbikge1xuXHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdGxldCBib3VuZEFjdGlvbk5hbWUgPSBzQWN0aW9uTmFtZSA/IHNBY3Rpb25OYW1lIDogbnVsbDtcblx0XHRib3VuZEFjdGlvbk5hbWUgPVxuXHRcdFx0Ym91bmRBY3Rpb25OYW1lLmluZGV4T2YoXCIuXCIpID49IDAgPyBib3VuZEFjdGlvbk5hbWUuc3BsaXQoXCIuXCIpW2JvdW5kQWN0aW9uTmFtZS5zcGxpdChcIi5cIikubGVuZ3RoIC0gMV0gOiBib3VuZEFjdGlvbk5hbWU7XG5cdFx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBib3VuZEFjdGlvbk5hbWUgJiYgZW50aXR5U2V0TmFtZSA/IGAke2VudGl0eVNldE5hbWV9fCR7Ym91bmRBY3Rpb25OYW1lfWAgOiBcIlwiO1xuXHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IG9QYXJlbnRDb250cm9sLmdldENvbnRyb2xsZXIoKS5vUmVzb3VyY2VCdW5kbGU7XG5cdFx0Y29uc3Qgc0NvbmZpcm1hdGlvblRleHQgPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcblx0XHRcdFwiQ19PUEVSQVRJT05TX0FDVElPTl9DT05GSVJNX01FU1NBR0VcIixcblx0XHRcdG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdG51bGwsXG5cdFx0XHRzdWZmaXhSZXNvdXJjZUtleVxuXHRcdCk7XG5cblx0XHRNZXNzYWdlQm94LmNvbmZpcm0oc0NvbmZpcm1hdGlvblRleHQsIHtcblx0XHRcdG9uQ2xvc2U6IGFzeW5jIGZ1bmN0aW9uIChzQWN0aW9uOiBhbnkpIHtcblx0XHRcdFx0aWYgKHNBY3Rpb24gPT09IEFjdGlvbi5PSykge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvT3BlcmF0aW9uID0gYXdhaXQgX2V4ZWN1dGVBY3Rpb24ob0FwcENvbXBvbmVudCwgbVBhcmFtZXRlcnMsIG9QYXJlbnRDb250cm9sLCBtZXNzYWdlSGFuZGxlcik7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKG9PcGVyYXRpb24pO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZygpO1xuXHRcdFx0XHRcdFx0XHRyZWplY3Qob0Vycm9yKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0cmVqZWN0KG9FcnJvcik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUFQTUFjdGlvbihcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRtUGFyYW1ldGVyczogYW55LFxuXHRvUGFyZW50Q29udHJvbDogYW55LFxuXHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsXG5cdGFDb250ZXh0czogYW55LFxuXHRvRGlhbG9nOiBhbnksXG5cdGFmdGVyNDEyOiBib29sZWFuXG4pIHtcblx0Y29uc3QgYVJlc3VsdCA9IGF3YWl0IF9leGVjdXRlQWN0aW9uKG9BcHBDb21wb25lbnQsIG1QYXJhbWV0ZXJzLCBvUGFyZW50Q29udHJvbCwgbWVzc2FnZUhhbmRsZXIpO1xuXHQvLyBJZiBzb21lIGVudHJpZXMgd2VyZSBzdWNjZXNzZnVsLCBhbmQgb3RoZXJzIGhhdmUgZmFpbGVkLCB0aGUgb3ZlcmFsbCBwcm9jZXNzIGlzIHN0aWxsIHN1Y2Nlc3NmdWwuIEhvd2V2ZXIsIHRoaXMgd2FzIHRyZWF0ZWQgYXMgcmVqZWN0aW9uXG5cdC8vIGJlZm9yZSwgYW5kIHRoaXMgY3VycmVudGx5IGlzIHN0aWxsIGtlcHQsIGFzIGxvbmcgYXMgZGlhbG9nIGhhbmRsaW5nIGlzIG1peGVkIHdpdGggYmFja2VuZCBwcm9jZXNzIGhhbmRsaW5nLlxuXHQvLyBUT0RPOiBSZWZhY3RvciB0byBvbmx5IHJlamVjdCBpbiBjYXNlIG9mIG92ZXJhbGwgcHJvY2VzcyBlcnJvci5cblx0Ly8gRm9yIHRoZSB0aW1lIGJlaW5nOiBtYXAgdG8gb2xkIGxvZ2ljIHRvIHJlamVjdCBpZiBhdCBsZWFzdCBvbmUgZW50cnkgaGFzIGZhaWxlZFxuXHRpZiAoYVJlc3VsdD8uc29tZSgob1NpbmdsZVJlc3VsdDogYW55KSA9PiBvU2luZ2xlUmVzdWx0LnN0YXR1cyA9PT0gXCJyZWplY3RlZFwiKSkge1xuXHRcdHRocm93IGFSZXN1bHQ7XG5cdH1cblxuXHRjb25zdCBtZXNzYWdlcyA9IENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKS5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdGlmIChcblx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCAmJlxuXHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiNDEyRXhlY3V0ZWRcIikgJiZcblx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInN0cmljdEhhbmRsaW5nRmFpbHNcIik/Lmxlbmd0aFxuXHQpIHtcblx0XHRpZiAoIWFmdGVyNDEyKSB7XG5cdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcblx0XHRcdFx0XCJEZWxheU1lc3NhZ2VzXCIsXG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiRGVsYXlNZXNzYWdlc1wiKS5jb25jYXQobWVzc2FnZXMpXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCkuYWRkTWVzc2FnZXMobVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJEZWxheU1lc3NhZ2VzXCIpKTtcblx0XHRcdGlmIChtZXNzYWdlcy5sZW5ndGgpIHtcblx0XHRcdFx0Ly8gQk9VTkQgVFJBTlNJVElPTiBBUyBQQVJUIE9GIFNBUF9NRVNTQUdFXG5cdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlRGlhbG9nKHtcblx0XHRcdFx0XHRvbkJlZm9yZVNob3dNZXNzYWdlOiBmdW5jdGlvbiAoYU1lc3NhZ2VzOiBhbnksIHNob3dNZXNzYWdlUGFyYW1ldGVyc0luOiBhbnkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrKG1QYXJhbWV0ZXJzLCBhQ29udGV4dHMsIG9EaWFsb2csIGFNZXNzYWdlcywgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW4pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG1lc3NhZ2VzLmxlbmd0aCkge1xuXHRcdC8vIEJPVU5EIFRSQU5TSVRJT04gQVMgUEFSVCBPRiBTQVBfTUVTU0FHRVxuXHRcdG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlRGlhbG9nKHtcblx0XHRcdGlzQWN0aW9uUGFyYW1ldGVyRGlhbG9nT3BlbjogbVBhcmFtZXRlcnM/Lm9EaWFsb2cuaXNPcGVuKCksXG5cdFx0XHRvbkJlZm9yZVNob3dNZXNzYWdlOiBmdW5jdGlvbiAoYU1lc3NhZ2VzOiBhbnksIHNob3dNZXNzYWdlUGFyYW1ldGVyc0luOiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIGFjdGlvblBhcmFtZXRlclNob3dNZXNzYWdlQ2FsbGJhY2sobVBhcmFtZXRlcnMsIGFDb250ZXh0cywgb0RpYWxvZywgYU1lc3NhZ2VzLCBzaG93TWVzc2FnZVBhcmFtZXRlcnNJbik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gYVJlc3VsdDtcbn1cblxuZnVuY3Rpb24gYWZ0ZXJBY3Rpb25SZXNvbHV0aW9uKG1QYXJhbWV0ZXJzOiBhbnksIG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzOiBhbnksIGFjdGlvbkRlZmluaXRpb246IGFueSkge1xuXHRpZiAoXG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQgJiZcblx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXAgJiZcblx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQ29udGV4dHMgJiZcblx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQ29udGV4dHMubGVuZ3RoICYmXG5cdFx0YWN0aW9uRGVmaW5pdGlvbi4kSXNCb3VuZFxuXHQpIHtcblx0XHQvL2NoZWNrIGZvciBza2lwcGluZyBzdGF0aWMgYWN0aW9uc1xuXHRcdGNvbnN0IGlzU3RhdGljID0gbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaXNTdGF0aWM7XG5cdFx0aWYgKCFpc1N0YXRpYykge1xuXHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KFxuXHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0SlNPTi5wYXJzZShtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXApLFxuXHRcdFx0XHRtUGFyYW1ldGVycy5zZWxlY3RlZEl0ZW1zLFxuXHRcdFx0XHRcInRhYmxlXCJcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5jb250cm9sKSB7XG5cdFx0XHRjb25zdCBvQ29udHJvbCA9IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmNvbnRyb2w7XG5cdFx0XHRpZiAob0NvbnRyb2wuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRjb25zdCBhU2VsZWN0ZWRDb250ZXh0cyA9IG9Db250cm9sLmdldFNlbGVjdGVkQ29udGV4dHMoKTtcblx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KFxuXHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdEpTT04ucGFyc2UobUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRcdFx0XHRhU2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdFx0XHRcInRhYmxlXCJcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayhcblx0bVBhcmFtZXRlcnM6IGFueSxcblx0YUNvbnRleHRzOiBhbnksXG5cdG9EaWFsb2c6IGFueSxcblx0bWVzc2FnZXM6IGFueSxcblx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW46IHsgc2hvd01lc3NhZ2VCb3g6IGJvb2xlYW47IHNob3dNZXNzYWdlRGlhbG9nOiBib29sZWFuIH1cbik6IHsgZm5HZXRNZXNzYWdlU3VidGl0bGU6IEZ1bmN0aW9uIHwgdW5kZWZpbmVkOyBzaG93TWVzc2FnZUJveDogYm9vbGVhbjsgc2hvd01lc3NhZ2VEaWFsb2c6IGJvb2xlYW47IGZpbHRlcmVkTWVzc2FnZXM6IGFueVtdIH0ge1xuXHRsZXQgc2hvd01lc3NhZ2VCb3ggPSBzaG93TWVzc2FnZVBhcmFtZXRlcnNJbi5zaG93TWVzc2FnZUJveCxcblx0XHRzaG93TWVzc2FnZURpYWxvZyA9IHNob3dNZXNzYWdlUGFyYW1ldGVyc0luLnNob3dNZXNzYWdlRGlhbG9nO1xuXHRjb25zdCBvQ29udHJvbCA9IG1QYXJhbWV0ZXJzLmNvbnRyb2w7XG5cdGNvbnN0IHVuYm91bmRNZXNzYWdlcyA9IG1lc3NhZ2VzLmZpbHRlcihmdW5jdGlvbiAobWVzc2FnZTogYW55KSB7XG5cdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VGFyZ2V0KCkgPT09IFwiXCI7XG5cdH0pO1xuXHRjb25zdCBBUERtZXNzYWdlcyA9IG1lc3NhZ2VzLmZpbHRlcihmdW5jdGlvbiAobWVzc2FnZTogYW55KSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdG1lc3NhZ2UuZ2V0VGFyZ2V0ICYmXG5cdFx0XHRtZXNzYWdlLmdldFRhcmdldCgpLmluZGV4T2YobVBhcmFtZXRlcnMuYWN0aW9uTmFtZSkgIT09IC0xICYmXG5cdFx0XHRtUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVycy5zb21lKGZ1bmN0aW9uIChhY3Rpb25QYXJhbTogYW55KSB7XG5cdFx0XHRcdHJldHVybiBtZXNzYWdlLmdldFRhcmdldCgpLmluZGV4T2YoYWN0aW9uUGFyYW0uJE5hbWUpICE9PSAtMTtcblx0XHRcdH0pXG5cdFx0KTtcblx0fSk7XG5cdEFQRG1lc3NhZ2VzLmZvckVhY2goZnVuY3Rpb24gKEFQRE1lc3NhZ2U6IGFueSkge1xuXHRcdEFQRE1lc3NhZ2UuaXNBUERUYXJnZXQgPSB0cnVlO1xuXHR9KTtcblxuXHRjb25zdCBlcnJvclRhcmdldHNJbkFQRCA9IEFQRG1lc3NhZ2VzLmxlbmd0aCA/IHRydWUgOiBmYWxzZTtcblx0aWYgKG9EaWFsb2cuaXNPcGVuKCkgJiYgYUNvbnRleHRzLmxlbmd0aCAhPT0gMCAmJiAhbVBhcmFtZXRlcnMuaXNTdGF0aWMpIHtcblx0XHRpZiAoIW1QYXJhbWV0ZXJzLmJHcm91cGVkKSB7XG5cdFx0XHQvL2lzb2xhdGVkXG5cdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA+IDEgfHwgIWVycm9yVGFyZ2V0c0luQVBEKSB7XG5cdFx0XHRcdC8vIGRvZXMgbm90IG1hdHRlciBpZiBlcnJvciBpcyBpbiBBUEQgb3Igbm90LCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgY29udGV4dHMgc2VsZWN0ZWQgb3IgaWYgdGhlIGVycm9yIGlzIG5vdCB0aGUgQVBELCB3ZSBjbG9zZSBpdC5cblx0XHRcdFx0Ly8gVE9ETzogRGlsYW9nIGhhbmRsaW5nIHNob3VsZCBub3QgYmUgcGFydCBvZiBtZXNzYWdlIGhhbmRsaW5nLiBSZWZhY3RvciBhY2NvcmRpbmdseSAtIGRpYWxvZyBzaG91bGQgbm90IGJlIG5lZWRlZCBpbnNpZGUgdGhpcyBtZXRob2QgLSBuZWl0aGVyXG5cdFx0XHRcdC8vIHRvIGFzayB3aGV0aGVyIGl0J3Mgb3Blbiwgbm9yIHRvIGNsb3NlL2Rlc3Ryb3kgaXQhXG5cdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0b0RpYWxvZy5kZXN0cm95KCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICghZXJyb3JUYXJnZXRzSW5BUEQpIHtcblx0XHRcdC8vY2hhbmdlc2V0XG5cdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRvRGlhbG9nLmRlc3Ryb3koKTtcblx0XHR9XG5cdH1cblx0bGV0IGZpbHRlcmVkTWVzc2FnZXM6IGFueVtdID0gW107XG5cdGNvbnN0IGJJc0FQRE9wZW4gPSBvRGlhbG9nLmlzT3BlbigpO1xuXHRpZiAobWVzc2FnZXMubGVuZ3RoID09PSAxICYmIG1lc3NhZ2VzWzBdLmdldFRhcmdldCAmJiBtZXNzYWdlc1swXS5nZXRUYXJnZXQoKSAhPT0gdW5kZWZpbmVkICYmIG1lc3NhZ2VzWzBdLmdldFRhcmdldCgpICE9PSBcIlwiKSB7XG5cdFx0aWYgKChvQ29udHJvbCAmJiBvQ29udHJvbC5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikgPT09IGZhbHNlKSB8fCAhb0NvbnRyb2wpIHtcblx0XHRcdC8vIE9QIGVkaXQgb3IgTFJcblx0XHRcdHNob3dNZXNzYWdlQm94ID0gIWVycm9yVGFyZ2V0c0luQVBEO1xuXHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBmYWxzZTtcblx0XHR9IGVsc2UgaWYgKG9Db250cm9sICYmIG9Db250cm9sLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0c2hvd01lc3NhZ2VCb3ggPSBmYWxzZTtcblx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gZmFsc2U7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG9Db250cm9sKSB7XG5cdFx0aWYgKG9Db250cm9sLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSA9PT0gZmFsc2UpIHtcblx0XHRcdGlmIChiSXNBUERPcGVuICYmIGVycm9yVGFyZ2V0c0luQVBEKSB7XG5cdFx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChvQ29udHJvbC5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikgPT09IHRydWUpIHtcblx0XHRcdGlmICghYklzQVBET3BlbiAmJiBlcnJvclRhcmdldHNJbkFQRCkge1xuXHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IHRydWU7XG5cdFx0XHRcdGZpbHRlcmVkTWVzc2FnZXMgPSB1bmJvdW5kTWVzc2FnZXMuY29uY2F0KEFQRG1lc3NhZ2VzKTtcblx0XHRcdH0gZWxzZSBpZiAoIWJJc0FQRE9wZW4gJiYgdW5ib3VuZE1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHQvLyBlcnJvciB0YXJnZXRzIGluIEFQRCA9PiB0aGVyZSBpcyBhdGxlYXN0IG9uZSBib3VuZCBtZXNzYWdlLiBJZiB0aGVyZSBhcmUgdW5ib3VuZCBtZXNzYWdlcywgZGlhbG9nIG11c3QgYmUgc2hvd24uXG5cdFx0XHRcdC8vIGZvciBkcmFmdCBlbnRpdHksIHdlIGFscmVhZHkgY2xvc2VkIHRoZSBBUERcblx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdHNob3dNZXNzYWdlQm94OiBzaG93TWVzc2FnZUJveCxcblx0XHRzaG93TWVzc2FnZURpYWxvZzogc2hvd01lc3NhZ2VEaWFsb2csXG5cdFx0ZmlsdGVyZWRNZXNzYWdlczogZmlsdGVyZWRNZXNzYWdlcy5sZW5ndGggPyBmaWx0ZXJlZE1lc3NhZ2VzIDogbWVzc2FnZXMsXG5cdFx0Zm5HZXRNZXNzYWdlU3VidGl0bGU6XG5cdFx0XHRvQ29udHJvbCAmJiBvQ29udHJvbC5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpICYmIG1lc3NhZ2VIYW5kbGluZy5zZXRNZXNzYWdlU3VidGl0bGUuYmluZCh7fSwgb0NvbnRyb2wsIGFDb250ZXh0cylcblx0fTtcbn1cblxuLypcbiAqIEN1cnJlbnRseSwgdGhpcyBtZXRob2QgaXMgcmVzcG9uc2libGUgZm9yIHNob3dpbmcgdGhlIGRpYWxvZyBhbmQgZXhlY3V0aW5nIHRoZSBhY3Rpb24uIFRoZSBwcm9taXNlIHJldHVybmVkIGlzIHBlbmRpbmcgd2hpbGUgd2FpdGluZyBmb3IgdXNlciBpbnB1dCwgYXMgd2VsbCBhcyB3aGlsZSB0aGVcbiAqIGJhY2stZW5kIHJlcXVlc3QgaXMgcnVubmluZy4gVGhlIHByb21pc2UgaXMgcmVqZWN0ZWQgd2hlbiB0aGUgdXNlciBjYW5jZWxzIHRoZSBkaWFsb2cgYW5kIGFsc28gd2hlbiB0aGUgYmFjay1lbmQgcmVxdWVzdCBmYWlscy5cbiAqIFRPRE86IFJlZmFjdG9yaW5nOiBTZXBhcmF0ZSBkaWFsb2cgaGFuZGxpbmcgZnJvbSBiYWNrZW5kIHByb2Nlc3NpbmcuIERpYWxvZyBoYW5kbGluZyBzaG91bGQgcmV0dXJuIGEgUHJvbWlzZSByZXNvbHZpbmcgdG8gcGFyYW1ldGVycyB0byBiZSBwcm92aWRlZCB0byBiYWNrZW5kLiBJZiBkaWFsb2cgaXNcbiAqIGNhbmNlbGxlZCwgdGhhdCBwcm9taXNlIGNhbiBiZSByZWplY3RlZC4gTWV0aG9kIHJlc3BvbnNpYmxlIGZvciBiYWNrZW5kIHByb2Nlc3NpbmcgbmVlZCB0byBkZWFsIHdpdGggbXVsdGlwbGUgY29udGV4dHMgLSBpLmUuIGl0IHNob3VsZCBlaXRoZXIgcmV0dXJuIGFuIGFycmF5IG9mIFByb21pc2VzIG9yXG4gKiBhIFByb21pc2UgcmVzb2x2aW5nIHRvIGFuIGFycmF5LiBJbiB0aGUgbGF0dGVyIGNhc2UsIHRoYXQgUHJvbWlzZSBzaG91bGQgYmUgcmVzb2x2ZWQgYWxzbyB3aGVuIHNvbWUgb3IgZXZlbiBhbGwgY29udGV4dHMgZmFpbGVkIGluIGJhY2tlbmQgLSB0aGUgb3ZlcmFsbCBwcm9jZXNzIHN0aWxsIHdhc1xuICogc3VjY2Vzc2Z1bC5cbiAqXG4gKi9cblxuLy8gdGhpcyB0eXBlIGlzIG1lYW50IHRvIGRlc2NyaWJlIHRoZSBtZXRhIGluZm9ybWF0aW9uIGZvciBvbmUgQWN0aW9uUGFyYW1ldGVyIChpLmUuIGl0cyBvYmplY3QgaW4gbWV0YU1vZGVsKVxudHlwZSBBY3Rpb25QYXJhbWV0ZXIgPSB7XG5cdCROYW1lOiBzdHJpbmc7XG5cdCRpc0NvbGxlY3Rpb246IGJvb2xlYW47XG5cdC8vIGN1cnJlbnRseSBydW50aW1lIGluZm9ybWF0aW9uIGlzIHdyaXR0ZW4gaW50byB0aGUgbWV0YW1vZGVsOlxuXHQvLyAtIGluIHRoZSBwcmVzcyBoYW5kbGVyIG9mIHRoZSBhY3Rpb24gYnV0dG9uIG9uIHRoZSBwYXJhbWV0ZXIgZGlhbG9nLCB0aGUgdmFsdWUgb2YgZWFjaCBwYXJhbWV0ZXIgaXMgYWRkZWRcblx0Ly8gLSBpbiBzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWUsIHRoaXMgaW5mb3JtYXRpb24gaXMgdXNlZCBhbmQgdHJhbnNmZXJyZWQgdG8gdGhlIGNvbnRleHQgKGluIE9EYXRhTW9kZWwpIGNyZWF0ZWQgZm9yIHRoZSBhY3Rpb24gZXhlY3V0aW9uXG5cdC8vIHRoaXMgaXMgcXVpdGUgb2RkLCBhbmQgaXQgd291bGQgbWFrZSBtdWNoIG1vcmUgc2Vuc2UgdG8gdGFrZSB0aGUgdmFsdWUgZnJvbSBhY3Rpb25QYXJhbWV0ZXJJbmZvc1xuXHQvLyAtIGhvd2V2ZXIsIHNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSAob3IgcmF0aGVyIHRoZSBzdXJyb3VuZGluZyBfZXhlY3V0ZUFjdGlvbikgaXMgYWxzbyBjYWxsZWQgZnJvbSBvdGhlciBwbGFjZXNcblx0Ly8gPT4gZm9yIHRoZSB0aW1lIGJlaW5nLCBhZGRpbmcgdmFsdWUgaGVyZSB0byBhdm9pZCB0cyBlcnJvcnMsIHN1YmplY3QgdG8gcmVmYWN0b3Jpbmdcblx0Ly8gaW4gY2FzZSBvZiBGaWVsZCwgdGhlIHZhbHVlIGlzIHN0cmluZywgaW4gY2FzZSBvZiBNdWx0aVZhbHVlRmllbGQsIGl0J3MgTXVsdGlWYWx1ZUZpZWxkSXRlbVtdXG5cdHZhbHVlOiBzdHJpbmcgfCBNdWx0aVZhbHVlRmllbGRJdGVtW107XG59O1xuXG5mdW5jdGlvbiBzaG93QWN0aW9uUGFyYW1ldGVyRGlhbG9nKFxuXHRzQWN0aW9uTmFtZTogYW55LFxuXHRvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdHNBY3Rpb25MYWJlbDogYW55LFxuXHRtUGFyYW1ldGVyczogYW55LFxuXHRhQWN0aW9uUGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyW10sXG5cdGFQYXJhbWV0ZXJWYWx1ZXM6IGFueSxcblx0b0FjdGlvbkNvbnRleHQ6IGFueSxcblx0b1BhcmVudENvbnRyb2w6IGFueSxcblx0ZW50aXR5U2V0TmFtZTogYW55LFxuXHRtZXNzYWdlSGFuZGxlcjogYW55XG4pIHtcblx0Y29uc3Qgc1BhdGggPSBfZ2V0UGF0aChvQWN0aW9uQ29udGV4dCwgc0FjdGlvbk5hbWUpLFxuXHRcdG1ldGFNb2RlbCA9IG9BY3Rpb25Db250ZXh0LmdldE1vZGVsKCkub01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdGVudGl0eVNldENvbnRleHQgPSBtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc1BhdGgpLFxuXHRcdHNBY3Rpb25OYW1lUGF0aCA9IG9BY3Rpb25Db250ZXh0LmdldE9iamVjdChcIiRJc0JvdW5kXCIpXG5cdFx0XHQ/IG9BY3Rpb25Db250ZXh0LmdldFBhdGgoKS5zcGxpdChcIi9AJHVpNS5vdmVybG9hZC8wXCIpWzBdXG5cdFx0XHQ6IG9BY3Rpb25Db250ZXh0LmdldFBhdGgoKS5zcGxpdChcIi8wXCIpWzBdLFxuXHRcdGFjdGlvbk5hbWVDb250ZXh0ID0gbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNBY3Rpb25OYW1lUGF0aCksXG5cdFx0YklzQ3JlYXRlQWN0aW9uID0gbVBhcmFtZXRlcnMuaXNDcmVhdGVBY3Rpb24sXG5cdFx0c0ZyYWdtZW50TmFtZSA9IFwic2FwL2ZlL2NvcmUvY29udHJvbHMvQWN0aW9uUGFyYW1ldGVyRGlhbG9nXCI7XG5cdHJldHVybiBuZXcgUHJvbWlzZShhc3luYyBmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0dHlwZSBBY3Rpb25QYXJhbWV0ZXJJbmZvID0ge1xuXHRcdFx0cGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXI7XG5cdFx0XHRmaWVsZDogRmllbGQgfCBNdWx0aVZhbHVlRmllbGQ7XG5cdFx0XHRpc011bHRpVmFsdWU6IGJvb2xlYW47XG5cdFx0XHR2YWx1ZT86IHN0cmluZyB8IE11bHRpVmFsdWVGaWVsZEl0ZW1bXTtcblx0XHRcdHZhbGlkYXRpb25Qcm9taXNlPzogUHJvbWlzZTxzdHJpbmcgfCBNdWx0aVZhbHVlRmllbGRJdGVtW10+O1xuXHRcdH07XG5cdFx0bGV0IGFjdGlvblBhcmFtZXRlckluZm9zOiBBY3Rpb25QYXJhbWV0ZXJJbmZvW107IC8vIHRvIGJlIGZpbGxlZCBhZnRlciBmcmFnbWVudCAoZm9yIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nKSBpcyBsb2FkZWQuIEFjdHVhbGx5IG9ubHkgbmVlZGVkIGR1cmluZyBkaWFsb2cgcHJvY2Vzc2luZywgaS5lLiBjb3VsZCBiZSBtb3ZlZCBpbnRvIHRoZSBjb250cm9sbGVyIGFuZCBkaXJlY3RseSBpbml0aWFsaXplZCB0aGVyZSwgYnV0IG9ubHkgYWZ0ZXIgbW92aW5nIGFsbCBoYW5kbGVycyAoZXNwLiBwcmVzcyBoYW5kbGVyIGZvciBhY3Rpb24gYnV0dG9uKSB0byBjb250cm9sbGVyLlxuXG5cdFx0Y29uc3QgbWVzc2FnZU1hbmFnZXIgPSBDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCk7XG5cblx0XHQvLyBpbiBjYXNlIG9mIG1pc3NpbmcgbWFuZGFvdG9yeSBwYXJhbWV0ZXIsIG1lc3NhZ2UgY3VycmVudGx5IGRpZmZlcnMgcGVyIHBhcmFtZXRlciwgYXMgaXQgc3VwZXJmbHVvdXNseSBjb250YWlucyB0aGUgbGFiZWwgYXMgcGFyYW1ldGVyLiBQb3NzaWJsa3kgdGhpcyBjb3VsZCBiZSByZW1vdmVkIGluIGZ1dHVyZSwgaW4gdGhhdCBjYXNlLCBpbnRlcmZhY2UgY291bGQgYmUgc2ltcGxpZmllZCB0byBBY3Rpb25QYXJhbWV0ZXJJbmZvW10sIHN0cmluZ1xuXHRcdGNvbnN0IF9hZGRNZXNzYWdlRm9yQWN0aW9uUGFyYW1ldGVyID0gKG1lc3NhZ2VQYXJhbWV0ZXJzOiB7IGFjdGlvblBhcmFtZXRlckluZm86IEFjdGlvblBhcmFtZXRlckluZm87IG1lc3NhZ2U6IHN0cmluZyB9W10pID0+IHtcblx0XHRcdG1lc3NhZ2VNYW5hZ2VyLmFkZE1lc3NhZ2VzKFxuXHRcdFx0XHRtZXNzYWdlUGFyYW1ldGVycy5tYXAoKG1lc3NhZ2VQYXJhbWV0ZXIpID0+IHtcblx0XHRcdFx0XHRjb25zdCBiaW5kaW5nID0gbWVzc2FnZVBhcmFtZXRlci5hY3Rpb25QYXJhbWV0ZXJJbmZvLmZpZWxkLmdldEJpbmRpbmcoXG5cdFx0XHRcdFx0XHRtZXNzYWdlUGFyYW1ldGVyLmFjdGlvblBhcmFtZXRlckluZm8uaXNNdWx0aVZhbHVlID8gXCJpdGVtc1wiIDogXCJ2YWx1ZVwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRyZXR1cm4gbmV3IE1lc3NhZ2Uoe1xuXHRcdFx0XHRcdFx0bWVzc2FnZTogbWVzc2FnZVBhcmFtZXRlci5tZXNzYWdlLFxuXHRcdFx0XHRcdFx0dHlwZTogXCJFcnJvclwiLFxuXHRcdFx0XHRcdFx0cHJvY2Vzc29yOiBiaW5kaW5nPy5nZXRNb2RlbCgpLFxuXHRcdFx0XHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdFx0XHRcdHRhcmdldDogYmluZGluZz8uZ2V0UmVzb2x2ZWRQYXRoKClcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0fTtcblxuXHRcdGNvbnN0IF9yZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtdGVyID0gKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKSA9PiB7XG5cdFx0XHRjb25zdCBhbGxNZXNzYWdlcyA9IG1lc3NhZ2VNYW5hZ2VyLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRcdGNvbnN0IGNvbnRyb2xJZCA9IGdlbmVyYXRlKFtcIkFQRF9cIiwgcGFyYW1ldGVyLiROYW1lXSk7XG5cdFx0XHQvLyBhbHNvIHJlbW92ZSBtZXNzYWdlcyBhc3NpZ25lZCB0byBpbm5lciBjb250cm9scywgYnV0IGF2b2lkIHJlbW92aW5nIG1lc3NhZ2VzIGZvciBkaWZmZXJlbnQgcGFyYW10ZXJzICh3aXRoIG5hbWUgYmVpbmcgc3Vic3RyaW5nIG9mIGFub3RoZXIgcGFyYW1ldGVyIG5hbWUpXG5cdFx0XHRjb25zdCByZWxldmFudE1lc3NhZ2VzID0gYWxsTWVzc2FnZXMuZmlsdGVyKChtc2c6IE1lc3NhZ2UpID0+XG5cdFx0XHRcdG1zZy5nZXRDb250cm9sSWRzKCkuc29tZSgoaWQ6IHN0cmluZykgPT4gY29udHJvbElkLnNwbGl0KFwiLVwiKS5pbmNsdWRlcyhpZCkpXG5cdFx0XHQpO1xuXHRcdFx0bWVzc2FnZU1hbmFnZXIucmVtb3ZlTWVzc2FnZXMocmVsZXZhbnRNZXNzYWdlcyk7XG5cdFx0fTtcblxuXHRcdGNvbnN0IF92YWxpZGF0ZVByb3BlcnRpZXMgPSBhc3luYyBmdW5jdGlvbiAob1Jlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSkge1xuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKGFjdGlvblBhcmFtZXRlckluZm9zLm1hcCgoYWN0aW9uUGFyYW1ldGVySW5mbykgPT4gYWN0aW9uUGFyYW1ldGVySW5mby52YWxpZGF0aW9uUHJvbWlzZSkpO1xuXHRcdFx0Y29uc3QgcmVxdWlyZWRQYXJhbWV0ZXJJbmZvcyA9IGFjdGlvblBhcmFtZXRlckluZm9zLmZpbHRlcigoYWN0aW9uUGFyYW1ldGVySW5mbykgPT4gYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZC5nZXRSZXF1aXJlZCgpKTtcblx0XHRcdC8qIEhpbnQ6IFRoZSBib29sZWFuIGZhbHNlIGlzIGEgdmFsaWQgdmFsdWUgKi9cblxuXHRcdFx0Y29uc3QgZW1wdHlSZXF1aXJlZEZpZWxkcyA9IHJlcXVpcmVkUGFyYW1ldGVySW5mb3MuZmlsdGVyKChyZXF1aXJlZFBhcmFtZXRlckluZm8pID0+IHtcblx0XHRcdFx0aWYgKHJlcXVpcmVkUGFyYW1ldGVySW5mby5pc011bHRpVmFsdWUpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVxdWlyZWRQYXJhbWV0ZXJJbmZvLnZhbHVlID09PSB1bmRlZmluZWQgfHwgIXJlcXVpcmVkUGFyYW1ldGVySW5mby52YWx1ZS5sZW5ndGg7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3QgZmllbGRWYWx1ZSA9IChyZXF1aXJlZFBhcmFtZXRlckluZm8uZmllbGQgYXMgRmllbGQpLmdldFZhbHVlKCk7XG5cdFx0XHRcdFx0cmV0dXJuIGZpZWxkVmFsdWUgPT09IHVuZGVmaW5lZCB8fCBmaWVsZFZhbHVlID09PSBudWxsIHx8IGZpZWxkVmFsdWUgPT09IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBtZXNzYWdlIGNvbnRhaW5zIGxhYmVsIHBlciBmaWVsZCBmb3IgaGlzdG9yaWNhbCByZWFzb24gKG9yaWdpbmFsbHksIGl0IHdhcyBzaG93biBpbiBhZGRpdGlvbmFsIHBvcHVwLCBub3cgaXQncyBkaXJlY3RseSBhZGRlZCB0byB0aGUgZmllbGQpXG5cdFx0XHQvLyBpZiB0aGlzIHdhcyBub3QgdGhlIGNhc2UgKGFuZCBob3BlZnVsbHksIGluIGZ1dHVyZSB0aGlzIG1pZ2h0IGJlIHN1YmplY3QgdG8gY2hhbmdlKSwgaW50ZXJmYWNlIG9mIF9hZGRNZXNzYWdlRm9yQWN0aW9uUGFyYW1ldGVyIGNvdWxkIGJlIHNpbXBsaWZpZWQgdG8ganVzdCBwYXNzIGVtcHR5UmVxdWlyZWRGaWVsZHMgYW5kIGEgY29uc3RhbnQgbWVzc2FnZSBoZXJlXG5cdFx0XHRfYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlcihcblx0XHRcdFx0ZW1wdHlSZXF1aXJlZEZpZWxkcy5tYXAoKGFjdGlvblBhcmFtZXRlckluZm8pID0+ICh7XG5cdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mbzogYWN0aW9uUGFyYW1ldGVySW5mbyxcblx0XHRcdFx0XHRtZXNzYWdlOiBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfT1BFUkFUSU9OU19BQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19NSVNTSU5HX01BTkRBVE9SWV9NU0dcIiwgb1Jlc291cmNlQnVuZGxlLCBbXG5cdFx0XHRcdFx0XHQoYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZC5nZXRQYXJlbnQoKT8uZ2V0QWdncmVnYXRpb24oXCJsYWJlbFwiKSBhcyBMYWJlbCkuZ2V0VGV4dCgpXG5cdFx0XHRcdFx0XSlcblx0XHRcdFx0fSkpXG5cdFx0XHQpO1xuXG5cdFx0XHQvKiBDaGVjayB2YWx1ZSBzdGF0ZSBvZiBhbGwgcGFyYW1ldGVyICovXG5cdFx0XHRjb25zdCBmaXJzdEludmFsaWRBY3Rpb25QYXJhbWV0ZXIgPSBhY3Rpb25QYXJhbWV0ZXJJbmZvcy5maW5kKFxuXHRcdFx0XHQvLyB1bmZvcnR1bmF0ZWx5LCBfYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlciBzZXRzIHZhbHVlU3RhdGUgb25seSBhc3luY2hyb25lb3VzbHksIHRodXMgY2hlY2tpbmcgZW1wdHlSZXF1aXJlZEZpZWxkcyBhZGRpdGlvbmFsbHlcblx0XHRcdFx0KGFjdGlvblBhcmFtZXRlckluZm8pID0+XG5cdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mby5maWVsZC5nZXRWYWx1ZVN0YXRlKCkgPT09IFwiRXJyb3JcIiB8fCBlbXB0eVJlcXVpcmVkRmllbGRzLmluY2x1ZGVzKGFjdGlvblBhcmFtZXRlckluZm8pXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoZmlyc3RJbnZhbGlkQWN0aW9uUGFyYW1ldGVyKSB7XG5cdFx0XHRcdGZpcnN0SW52YWxpZEFjdGlvblBhcmFtZXRlci5maWVsZC5mb2N1cygpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSB7XG5cdFx0XHRoYW5kbGVDaGFuZ2U6IGFzeW5jIGZ1bmN0aW9uIChvRXZlbnQ6IEV2ZW50KSB7XG5cdFx0XHRcdGNvbnN0IGZpZWxkID0gb0V2ZW50LmdldFNvdXJjZSgpO1xuXHRcdFx0XHRjb25zdCBhY3Rpb25QYXJhbWV0ZXJJbmZvID0gYWN0aW9uUGFyYW1ldGVySW5mb3MuZmluZChcblx0XHRcdFx0XHQoYWN0aW9uUGFyYW1ldGVySW5mbykgPT4gYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZCA9PT0gZmllbGRcblx0XHRcdFx0KSBhcyBBY3Rpb25QYXJhbWV0ZXJJbmZvO1xuXHRcdFx0XHQvLyBmaWVsZCB2YWx1ZSBpcyBiZWluZyBjaGFuZ2VkLCB0aHVzIGV4aXN0aW5nIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gdGhhdCBmaWVsZCBhcmUgbm90IHZhbGlkIGFueW1vcmVcblx0XHRcdFx0X3JlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW10ZXIoYWN0aW9uUGFyYW1ldGVySW5mby5wYXJhbWV0ZXIpO1xuXHRcdFx0XHQvLyBhZGFwdCBpbmZvLiBQcm9taXNlIGlzIHJlc29sdmVkIHRvIHZhbHVlIG9yIHJlamVjdGVkIHdpdGggZXhjZXB0aW9uIGNvbnRhaW5pbmcgbWVzc2FnZVxuXHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvLnZhbGlkYXRpb25Qcm9taXNlID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInByb21pc2VcIikgYXMgUHJvbWlzZTxzdHJpbmc+O1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm8udmFsdWUgPSBhd2FpdCBhY3Rpb25QYXJhbWV0ZXJJbmZvLnZhbGlkYXRpb25Qcm9taXNlO1xuXHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdGRlbGV0ZSBhY3Rpb25QYXJhbWV0ZXJJbmZvLnZhbHVlO1xuXHRcdFx0XHRcdF9hZGRNZXNzYWdlRm9yQWN0aW9uUGFyYW1ldGVyKFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mbzogYWN0aW9uUGFyYW1ldGVySW5mbyxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZTogKGVycm9yIGFzIHsgbWVzc2FnZTogc3RyaW5nIH0pLm1lc3NhZ2Vcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRjb25zdCBvRnJhZ21lbnQgPSBYTUxUZW1wbGF0ZVByb2Nlc3Nvci5sb2FkVGVtcGxhdGUoc0ZyYWdtZW50TmFtZSwgXCJmcmFnbWVudFwiKTtcblx0XHRjb25zdCBvUGFyYW1ldGVyTW9kZWwgPSBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdCRkaXNwbGF5TW9kZToge31cblx0XHR9KTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBjcmVhdGVkRnJhZ21lbnQgPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2Vzcyhcblx0XHRcdFx0b0ZyYWdtZW50LFxuXHRcdFx0XHR7IG5hbWU6IHNGcmFnbWVudE5hbWUgfSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHRcdFx0YWN0aW9uOiBvQWN0aW9uQ29udGV4dCxcblx0XHRcdFx0XHRcdGFjdGlvbk5hbWU6IGFjdGlvbk5hbWVDb250ZXh0LFxuXHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBlbnRpdHlTZXRDb250ZXh0XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XHRcdGFjdGlvbjogb0FjdGlvbkNvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRcdFx0XHRcdGFjdGlvbk5hbWU6IGFjdGlvbk5hbWVDb250ZXh0LmdldE1vZGVsKCksXG5cdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IGVudGl0eVNldENvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRcdFx0XHRcdG1ldGFNb2RlbDogZW50aXR5U2V0Q29udGV4dC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdFx0Ly8gVE9ETzogbW92ZSB0aGUgZGlhbG9nIGludG8gdGhlIGZyYWdtZW50IGFuZCBtb3ZlIHRoZSBoYW5kbGVycyB0byB0aGUgb0NvbnRyb2xsZXJcblx0XHRcdGNvbnN0IGFDb250ZXh0czogYW55W10gPSBtUGFyYW1ldGVycy5hQ29udGV4dHMgfHwgW107XG5cdFx0XHRjb25zdCBhRnVuY3Rpb25QYXJhbXM6IGFueVtdID0gW107XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG5cdFx0XHRsZXQgb09wZXJhdGlvbkJpbmRpbmc6IGFueTtcblx0XHRcdGF3YWl0IENvbW1vblV0aWxzLnNldFVzZXJEZWZhdWx0cyhvQXBwQ29tcG9uZW50LCBhQWN0aW9uUGFyYW1ldGVycywgb1BhcmFtZXRlck1vZGVsLCB0cnVlKTtcblx0XHRcdGNvbnN0IG9EaWFsb2dDb250ZW50ID0gKGF3YWl0IEZyYWdtZW50LmxvYWQoe1xuXHRcdFx0XHRkZWZpbml0aW9uOiBjcmVhdGVkRnJhZ21lbnQsXG5cdFx0XHRcdGNvbnRyb2xsZXI6IG9Db250cm9sbGVyXG5cdFx0XHR9KSkgYXMgQ29udHJvbDtcblxuXHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mb3MgPSBhQWN0aW9uUGFyYW1ldGVycy5tYXAoKGFjdGlvblBhcmFtZXRlcikgPT4ge1xuXHRcdFx0XHRjb25zdCBmaWVsZCA9IENvcmUuYnlJZChnZW5lcmF0ZShbXCJBUERfXCIsIGFjdGlvblBhcmFtZXRlci4kTmFtZV0pKSBhcyBGaWVsZCB8IE11bHRpVmFsdWVGaWVsZDtcblx0XHRcdFx0Y29uc3QgaXNNdWx0aVZhbHVlID0gZmllbGQuaXNBKFwic2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGRcIik7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0cGFyYW1ldGVyOiBhY3Rpb25QYXJhbWV0ZXIsXG5cdFx0XHRcdFx0ZmllbGQ6IGZpZWxkLFxuXHRcdFx0XHRcdGlzTXVsdGlWYWx1ZTogaXNNdWx0aVZhbHVlXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblxuXHRcdFx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gb1BhcmVudENvbnRyb2wuZ2V0Q29udHJvbGxlcigpLm9SZXNvdXJjZUJ1bmRsZTtcblx0XHRcdGxldCBhY3Rpb25SZXN1bHQgPSB7XG5cdFx0XHRcdGRpYWxvZ0NhbmNlbGxlZDogdHJ1ZSwgLy8gdG8gYmUgc2V0IHRvIGZhbHNlIGluIGNhc2Ugb2Ygc3VjY2Vzc2Z1bCBhY3Rpb24gZXhlY3Rpb25cblx0XHRcdFx0cmVzdWx0OiB1bmRlZmluZWRcblx0XHRcdH07XG5cdFx0XHRjb25zdCBvRGlhbG9nID0gbmV3IERpYWxvZyh1bmRlZmluZWQsIHtcblx0XHRcdFx0dGl0bGU6IHNBY3Rpb25MYWJlbCB8fCBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfT1BFUkFUSU9OU19BQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19USVRMRVwiLCBvUmVzb3VyY2VCdW5kbGUpLFxuXHRcdFx0XHRjb250ZW50OiBbb0RpYWxvZ0NvbnRlbnRdLFxuXHRcdFx0XHRlc2NhcGVIYW5kbGVyOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0Ly8gZXNjYXBlIGhhbmRsZXIgaXMgbWVhbnQgdG8gcG9zc2libHkgc3VwcHJlc3Mgb3IgcG9zdHBvbmUgY2xvc2luZyB0aGUgZGlhbG9nIG9uIGVzY2FwZSAoYnkgY2FsbGluZyBcInJlamVjdFwiIG9uIHRoZSBwcm92aWRlZCBvYmplY3QsIG9yIFwicmVzb2x2ZVwiIG9ubHkgd2hlblxuXHRcdFx0XHRcdC8vIGRvbmUgd2l0aCBhbGwgdGFza3MgdG8gaGFwcGVuIGJlZm9yZSBkaWFsb2cgY2FuIGJlIGNsb3NlZCkuIEl0J3Mgbm90IGludGVuZGVkIHRvIGV4cGxpY2V0bHkgY2xvc2UgdGhlIGRpYWxvZyBoZXJlICh0aGF0IGhhcHBlbnMgYXV0b21hdGljYWxseSB3aGVuIG5vXG5cdFx0XHRcdFx0Ly8gZXNjYXBlSGFuZGxlciBpcyBwcm92aWRlZCBvciB0aGUgcmVzb2x2ZS1jYWxsYmFjayBpcyBjYWxsZWQpIG9yIGZvciBvd24gd3JhcCB1cCB0YXNrcyAobGlrZSByZW1vdmluZyB2YWxpZGl0aW9uIG1lc3NhZ2VzIC0gdGhpcyBzaG91bGQgaGFwcGVuIGluIHRoZVxuXHRcdFx0XHRcdC8vIGFmdGVyQ2xvc2UpLlxuXHRcdFx0XHRcdC8vIFRPRE86IE1vdmUgd3JhcCB1cCB0YXNrcyB0byBhZnRlckNsb3NlLCBhbmQgcmVtb3ZlIHRoaXMgbWV0aG9kIGNvbXBsZXRlbHkuIFRha2UgY2FyZSB0byBhbHNvIGFkYXB0IGVuZCBidXR0b24gcHJlc3MgaGFuZGxlciBhY2NvcmRpbmdseS5cblx0XHRcdFx0XHQvLyBDdXJyZW50bHkgb25seSBzdGlsbCBuZWVkZWQgdG8gZGlmZmVyZW50aWF0ZSBjbG9zaW5nIGRpYWxvZyBhZnRlciBzdWNjZXNzZnVsIGV4ZWN1dGlvbiAodXNlcyByZXNvbHZlKSBmcm9tIHVzZXIgY2FuY2VsbGF0aW9uICh1c2luZyByZWplY3QpXG5cdFx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdC8vXHRcdHJlamVjdChDb25zdGFudHMuQ2FuY2VsQWN0aW9uRGlhbG9nKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0YmVnaW5CdXR0b246IG5ldyBCdXR0b24oZ2VuZXJhdGUoW1wiZmVcIiwgXCJBUERfXCIsIHNBY3Rpb25OYW1lLCBcIkFjdGlvblwiLCBcIk9rXCJdKSwge1xuXHRcdFx0XHRcdHRleHQ6IGJJc0NyZWF0ZUFjdGlvblxuXHRcdFx0XHRcdFx0PyBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX1NBUEZFX0FDVElPTl9DUkVBVEVfQlVUVE9OXCIsIG9SZXNvdXJjZUJ1bmRsZSlcblx0XHRcdFx0XHRcdDogX2dldEFjdGlvblBhcmFtZXRlckFjdGlvbk5hbWUob1Jlc291cmNlQnVuZGxlLCBzQWN0aW9uTGFiZWwsIHNBY3Rpb25OYW1lLCBlbnRpdHlTZXROYW1lKSxcblx0XHRcdFx0XHR0eXBlOiBcIkVtcGhhc2l6ZWRcIixcblx0XHRcdFx0XHRwcmVzczogYXN5bmMgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0aWYgKCEoYXdhaXQgX3ZhbGlkYXRlUHJvcGVydGllcyhvUmVzb3VyY2VCdW5kbGUpKSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdEJ1c3lMb2NrZXIubG9jayhvRGlhbG9nKTtcblxuXHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFRPRE86IGR1ZSB0byB1c2luZyB0aGUgc2VhcmNoIGFuZCB2YWx1ZSBoZWxwcyBvbiB0aGUgYWN0aW9uIGRpYWxvZyB0cmFuc2llbnQgbWVzc2FnZXMgY291bGQgYXBwZWFyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gd2UgbmVlZCBhbiBVWCBkZXNpZ24gZm9yIHRob3NlIHRvIHNob3cgdGhlbSB0byB0aGUgdXNlciAtIGZvciBub3cgcmVtb3ZlIHRoZW0gYmVmb3JlIGNvbnRpbnVpbmdcblx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHRcdFx0XHQvLyBtb3ZlIHBhcmFtZXRlciB2YWx1ZXMgZnJvbSBEaWFsb2cgKFNpbXBsZUZvcm0pIHRvIG1QYXJhbWV0ZXJzLmFjdGlvblBhcmFtZXRlcnMgc28gdGhhdCB0aGV5IGFyZSBhdmFpbGFibGUgaW4gdGhlIG9wZXJhdGlvbiBiaW5kaW5ncyBmb3IgYWxsIGNvbnRleHRzXG5cdFx0XHRcdFx0XHRcdFx0bGV0IHZQYXJhbWV0ZXJWYWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvUGFyYW1ldGVyQ29udGV4dCA9IG9PcGVyYXRpb25CaW5kaW5nICYmIG9PcGVyYXRpb25CaW5kaW5nLmdldFBhcmFtZXRlckNvbnRleHQoKTtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGkgaW4gYUFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChhQWN0aW9uUGFyYW1ldGVyc1tpXS4kaXNDb2xsZWN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFNVkZDb250ZW50ID0gb0RpYWxvZy5nZXRNb2RlbChcIm12ZnZpZXdcIikuZ2V0UHJvcGVydHkoYC8ke2FBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lfWApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFLZXlWYWx1ZXMgPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBqIGluIGFNVkZDb250ZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUtleVZhbHVlcy5wdXNoKGFNVkZDb250ZW50W2pdLktleSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dlBhcmFtZXRlclZhbHVlID0gYUtleVZhbHVlcztcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZQYXJhbWV0ZXJWYWx1ZSA9IG9QYXJhbWV0ZXJDb250ZXh0LmdldFByb3BlcnR5KGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2ldLnZhbHVlID0gdlBhcmFtZXRlclZhbHVlOyAvLyB3cml0aW5nIHRoZSBjdXJyZW50IHZhbHVlICh1ZXNlciBpbnB1dCEpIGludG8gdGhlIG1ldGFtb2RlbCA9PiBzaG91bGQgYmUgcmVmYWN0b3JlZCB0byB1c2UgQWN0aW9uUGFyYW1ldGVySW5mb3MgaW5zdGVhZC4gVXNlZCBpbiBzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWVcblx0XHRcdFx0XHRcdFx0XHRcdHZQYXJhbWV0ZXJWYWx1ZSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMubGFiZWwgPSBzQWN0aW9uTGFiZWw7XG5cdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzPy5pbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCI0MTJFeGVjdXRlZFwiLCBmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhUmVzdWx0ID0gYXdhaXQgZXhlY3V0ZUFQTUFjdGlvbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0b0FwcENvbXBvbmVudCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9QYXJlbnRDb250cm9sLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRcdFx0XHRcdFx0YUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdGFjdGlvblJlc3VsdCA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlhbG9nQ2FuY2VsbGVkOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0OiBhUmVzdWx0XG5cdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBtZXNzYWdlcyA9IHNhcC51aS5nZXRDb3JlKCkuZ2V0TWVzc2FnZU1hbmFnZXIoKS5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0ICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiNDEyRXhlY3V0ZWRcIikgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJzdHJpY3RIYW5kbGluZ0ZhaWxzXCIpPy5sZW5ndGhcblx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIkRlbGF5TWVzc2FnZXNcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcIkRlbGF5TWVzc2FnZXNcIikuY29uY2F0KG1lc3NhZ2VzKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgb0Vycm9yO1xuXHRcdFx0XHRcdFx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0ICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiNDEyRXhlY3V0ZWRcIikgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJzdHJpY3RIYW5kbGluZ0ZhaWxzXCIpPy5sZW5ndGhcblx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHN0cmljdEhhbmRsaW5nRmFpbHMgPSBtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInN0cmljdEhhbmRsaW5nRmFpbHNcIik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYUZhaWxlZENvbnRleHRzID0gW10gYXMgYW55O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nRmFpbHMuZm9yRWFjaChmdW5jdGlvbiAoZmFpbDogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhRmFpbGVkQ29udGV4dHMucHVzaChmYWlsLm9BY3Rpb24uZ2V0Q29udGV4dCgpKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5hQ29udGV4dHMgPSBhRmFpbGVkQ29udGV4dHM7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYVJlc3VsdCA9IGF3YWl0IGV4ZWN1dGVBUE1BY3Rpb24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvUGFyZW50Q29udHJvbCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0RpYWxvZyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzdHJpY3RIYW5kbGluZ0ZhaWxzXCIsIFtdKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInByb2Nlc3NlZE1lc3NhZ2VJZHNcIiwgW10pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFjdGlvblJlc3VsdCA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpYWxvZ0NhbmNlbGxlZDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQ6IGFSZXN1bHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCI0MTJFeGVjdXRlZFwiKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJzdHJpY3RIYW5kbGluZ0ZhaWxzXCIpPy5sZW5ndGhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKS5hZGRNZXNzYWdlcyhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJEZWxheU1lc3NhZ2VzXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZyh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpc0FjdGlvblBhcmFtZXRlckRpYWxvZ09wZW46IG9EaWFsb2cuaXNPcGVuKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkJlZm9yZVNob3dNZXNzYWdlOiBmdW5jdGlvbiAoYU1lc3NhZ2VzOiBhbnksIHNob3dNZXNzYWdlUGFyYW1ldGVyc0luOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGFjdGlvblBhcmFtZXRlclNob3dNZXNzYWdlQ2FsbGJhY2soXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9EaWFsb2csXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YU1lc3NhZ2VzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dNZXNzYWdlUGFyYW1ldGVyc0luXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGlmIChCdXN5TG9ja2VyLmlzTG9ja2VkKG9EaWFsb2cpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG9EaWFsb2cpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRsZXQgc2hvd01lc3NhZ2VEaWFsb2cgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdGF3YWl0IG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlcyh7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0OiBtUGFyYW1ldGVycy5hQ29udGV4dHNbMF0sXG5cdFx0XHRcdFx0XHRcdFx0XHRpc0FjdGlvblBhcmFtZXRlckRpYWxvZ09wZW46IG9EaWFsb2cuaXNPcGVuKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlUGFnZU5hdmlnYXRpb25DYWxsYmFjazogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0b25CZWZvcmVTaG93TWVzc2FnZTogZnVuY3Rpb24gKGFNZXNzYWdlczogYW55LCBzaG93TWVzc2FnZVBhcmFtZXRlcnNJbjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFdoeSBpcyB0aGlzIGltcGxlbWVudGVkIGFzIGNhbGxiYWNrPyBBcHBhcmVudGx5LCBhbGwgbmVlZGVkIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBiZWZvcmVoYW5kXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFRPRE86IHJlZmFjdG9yIGFjY29yZGluZ2x5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHNob3dNZXNzYWdlUGFyYW1ldGVycyA9IGFjdGlvblBhcmFtZXRlclNob3dNZXNzYWdlQ2FsbGJhY2soXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9EaWFsb2csXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YU1lc3NhZ2VzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dNZXNzYWdlUGFyYW1ldGVyc0luXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gc2hvd01lc3NhZ2VQYXJhbWV0ZXJzLnNob3dNZXNzYWdlRGlhbG9nO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2hvd01lc3NhZ2VQYXJhbWV0ZXJzO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gSW4gY2FzZSBvZiBiYWNrZW5kIHZhbGlkYXRpb24gZXJyb3Iocz8pLCBtZXNzYWdlIHNoYWxsIG5vdCBiZSBzaG93biBpbiBtZXNzYWdlIGRpYWxvZyBidXQgbmV4dCB0byB0aGUgZmllbGQgb24gcGFyYW1ldGVyIGRpYWxvZywgd2hpY2ggc2hvdWxkXG5cdFx0XHRcdFx0XHRcdFx0Ly8gc3RheSBvcGVuIGluIHRoaXMgY2FzZSA9PiBpbiB0aGlzIGNhc2UsIHdlIG11c3Qgbm90IHJlc29sdmUgb3IgcmVqZWN0IHRoZSBwcm9taXNlIGNvbnRyb2xsaW5nIHRoZSBwYXJhbWV0ZXIgZGlhbG9nLlxuXHRcdFx0XHRcdFx0XHRcdC8vIEluIGFsbCBvdGhlciBjYXNlcyAoZS5nLiBvdGhlciBiYWNrZW5kIGVycm9ycyBvciB1c2VyIGNhbmNlbGxhdGlvbiksIHRoZSBwcm9taXNlIGNvbnRyb2xsaW5nIHRoZSBwYXJhbWV0ZXIgZGlhbG9nIG5lZWRzIHRvIGJlIHJlamVjdGVkIHRvIGFsbG93XG5cdFx0XHRcdFx0XHRcdFx0Ly8gY2FsbGVycyB0byByZWFjdC4gKEV4YW1wbGU6IElmIGNyZWF0aW9uIGluIGJhY2tlbmQgYWZ0ZXIgbmF2aWdhdGlvbiB0byB0cmFuc2llbnQgY29udGV4dCBmYWlscywgYmFjayBuYXZpZ2F0aW9uIG5lZWRzIHRvIGJlIHRyaWdnZXJlZClcblx0XHRcdFx0XHRcdFx0XHQvLyBUT0RPOiBSZWZhY3RvciB0byBzZXBhcmF0ZSBkaWFsb2cgaGFuZGxpbmcgZnJvbSBiYWNrZW5kIHJlcXVlc3QgaXN0ZWFkIG9mIHRha2luZyBkZWNpc2lvbiBiYXNlZCBvbiBtZXNzYWdlIGhhbmRsaW5nXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHNob3dNZXNzYWdlRGlhbG9nKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZWplY3Qob0Vycm9yKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdFx0XHRcdGlmIChCdXN5TG9ja2VyLmlzTG9ja2VkKG9EaWFsb2cpKSB7XG5cdFx0XHRcdFx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sob0RpYWxvZyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlbmRCdXR0b246IG5ldyBCdXR0b24oZ2VuZXJhdGUoW1wiZmVcIiwgXCJBUERfXCIsIHNBY3Rpb25OYW1lLCBcIkFjdGlvblwiLCBcIkNhbmNlbFwiXSksIHtcblx0XHRcdFx0XHR0ZXh0OiBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfQ09NTU9OX0FDVElPTl9QQVJBTUVURVJfRElBTE9HX0NBTkNFTFwiLCBvUmVzb3VyY2VCdW5kbGUpLFxuXHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHQvLyBUT0RPOiBjYW5jZWwgYnV0dG9uIHNob3VsZCBqdXN0IGNsb3NlIHRoZSBkaWFsb2cgKHNpbWlsYXIgdG8gdXNpbmcgZXNjYXBlKS4gQWxsIHdyYXAgdXAgdGFza3Mgc2hvdWxkIGJlIG1vdmVkIHRvIGFmdGVyQ2xvc2UuXG5cdFx0XHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0Ly8gVE9ETzogYmVmb3JlT3BlbiBpcyBqdXN0IGFuIGV2ZW50LCBpLmUuIG5vdCB3YWl0aW5nIGZvciB0aGUgUHJvbWlzZSB0byBiZSByZXNvbHZlZC4gQ2hlY2sgaWYgdGFza3Mgb2YgdGhpcyBmdW5jdGlvbiBuZWVkIHRvIGJlIGRvbmUgYmVmb3JlIG9wZW5pbmcgdGhlIGRpYWxvZ1xuXHRcdFx0XHQvLyAtIGlmIHllcywgdGhleSBuZWVkIHRvIGJlIG1vdmVkIG91dHNpZGUuXG5cdFx0XHRcdC8vIEFzc3VtcHRpb246IFNvbWV0aW1lcyBkaWFsb2cgY2FuIGJlIHNlZW4gd2l0aG91dCBhbnkgZmllbGRzIGZvciBhIHNob3J0IHRpbWUgLSBtYXliZSB0aGlzIGlzIGNhdXNlZCBieSB0aGlzIGFzeW5jaHJvbml0eVxuXHRcdFx0XHRiZWZvcmVPcGVuOiBhc3luYyBmdW5jdGlvbiAob0V2ZW50OiBhbnkpIHtcblx0XHRcdFx0XHQvLyBjbG9uZSBldmVudCBmb3IgYWN0aW9uV3JhcHBlciBhcyBvRXZlbnQub1NvdXJjZSBnZXRzIGxvc3QgZHVyaW5nIHByb2Nlc3Npbmcgb2YgYmVmb3JlT3BlbiBldmVudCBoYW5kbGVyXG5cdFx0XHRcdFx0Y29uc3Qgb0Nsb25lRXZlbnQgPSBPYmplY3QuYXNzaWduKHt9LCBvRXZlbnQpO1xuXG5cdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0Y29uc3QgZ2V0RGVmYXVsdFZhbHVlc0Z1bmN0aW9uID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9EaWFsb2cuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdFx0XHRcdFx0c0FjdGlvblBhdGggPSBvQWN0aW9uQ29udGV4dC5zUGF0aCAmJiBvQWN0aW9uQ29udGV4dC5zUGF0aC5zcGxpdChcIi9AXCIpWzBdLFxuXHRcdFx0XHRcdFx0XHRzRGVmYXVsdFZhbHVlc0Z1bmN0aW9uID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdFx0XHRcdFx0YCR7c0FjdGlvblBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EZWZhdWx0VmFsdWVzRnVuY3Rpb25gXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc0RlZmF1bHRWYWx1ZXNGdW5jdGlvbjtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGNvbnN0IGZuU2V0RGVmYXVsdHNBbmRPcGVuRGlhbG9nID0gYXN5bmMgZnVuY3Rpb24gKHNCaW5kaW5nUGFyYW1ldGVyPzogYW55KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzQm91bmRGdW5jdGlvbk5hbWUgPSBnZXREZWZhdWx0VmFsdWVzRnVuY3Rpb24oKTtcblx0XHRcdFx0XHRcdGNvbnN0IHByZWZpbGxQYXJhbWV0ZXIgPSBhc3luYyBmdW5jdGlvbiAoc1BhcmFtTmFtZTogYW55LCB2UGFyYW1EZWZhdWx0VmFsdWU6IGFueSkge1xuXHRcdFx0XHRcdFx0XHQvLyBDYXNlIDE6IFRoZXJlIGlzIGEgUGFyYW1ldGVyRGVmYXVsdFZhbHVlIGFubm90YXRpb25cblx0XHRcdFx0XHRcdFx0aWYgKHZQYXJhbURlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFDb250ZXh0cy5sZW5ndGggPiAwICYmIHZQYXJhbURlZmF1bHRWYWx1ZS4kUGF0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IHZQYXJhbVZhbHVlID0gYXdhaXQgQ29tbW9uVXRpbHMucmVxdWVzdFNpbmdsZXRvblByb3BlcnR5KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZQYXJhbURlZmF1bHRWYWx1ZS4kUGF0aCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvT3BlcmF0aW9uQmluZGluZy5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICh2UGFyYW1WYWx1ZSA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZQYXJhbVZhbHVlID0gYXdhaXQgb09wZXJhdGlvbkJpbmRpbmdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5nZXRQYXJhbWV0ZXJDb250ZXh0KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5yZXF1ZXN0UHJvcGVydHkodlBhcmFtRGVmYXVsdFZhbHVlLiRQYXRoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBGb3IgbXVsdGkgc2VsZWN0LCBuZWVkIHRvIGxvb3Agb3ZlciBhQ29udGV4dHMgKGFzIGNvbnRleHRzIGNhbm5vdCBiZSByZXRyaWV2ZWQgdmlhIGJpbmRpbmcgcGFyYW1ldGVyIG9mIHRoZSBvcGVyYXRpb24gYmluZGluZylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgc1BhdGhGb3JDb250ZXh0ID0gdlBhcmFtRGVmYXVsdFZhbHVlLiRQYXRoO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChzUGF0aEZvckNvbnRleHQuaW5kZXhPZihgJHtzQmluZGluZ1BhcmFtZXRlcn0vYCkgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNQYXRoRm9yQ29udGV4dCA9IHNQYXRoRm9yQ29udGV4dC5yZXBsYWNlKGAke3NCaW5kaW5nUGFyYW1ldGVyfS9gLCBcIlwiKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDE7IGkgPCBhQ29udGV4dHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChhQ29udGV4dHNbaV0uZ2V0UHJvcGVydHkoc1BhdGhGb3JDb250ZXh0KSAhPT0gdlBhcmFtVmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaWYgdGhlIHZhbHVlcyBmcm9tIHRoZSBjb250ZXh0cyBhcmUgbm90IGFsbCB0aGUgc2FtZSwgZG8gbm90IHByZWZpbGxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbU5hbWU6IHNQYXJhbU5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRiTm9Qb3NzaWJsZVZhbHVlOiB0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7IHBhcmFtTmFtZTogc1BhcmFtTmFtZSwgdmFsdWU6IHZQYXJhbVZhbHVlIH07XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoIChvRXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVhZGluZyBkZWZhdWx0IGFjdGlvbiBwYXJhbWV0ZXJcIiwgc1BhcmFtTmFtZSwgbVBhcmFtZXRlcnMuYWN0aW9uTmFtZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1OYW1lOiBzUGFyYW1OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YkxhdGVQcm9wZXJ0eUVycm9yOiB0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIENhc2UgMS4yOiBQYXJhbWV0ZXJEZWZhdWx0VmFsdWUgZGVmaW5lcyBhIGZpeGVkIHN0cmluZyB2YWx1ZSAoaS5lLiB2UGFyYW1EZWZhdWx0VmFsdWUgPSAnc29tZVN0cmluZycpXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4geyBwYXJhbU5hbWU6IHNQYXJhbU5hbWUsIHZhbHVlOiB2UGFyYW1EZWZhdWx0VmFsdWUgfTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAob1BhcmFtZXRlck1vZGVsICYmIChvUGFyYW1ldGVyTW9kZWwgYXMgYW55KS5vRGF0YVtzUGFyYW1OYW1lXSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIENhc2UgMjogVGhlcmUgaXMgbm8gUGFyYW1ldGVyRGVmYXVsdFZhbHVlIGFubm90YXRpb24gKD0+IGxvb2sgaW50byB0aGUgRkxQIFVzZXIgRGVmYXVsdHMpXG5cblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1OYW1lOiBzUGFyYW1OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IChvUGFyYW1ldGVyTW9kZWwgYXMgYW55KS5vRGF0YVtzUGFyYW1OYW1lXVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHsgcGFyYW1OYW1lOiBzUGFyYW1OYW1lLCB2YWx1ZTogdW5kZWZpbmVkIH07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdGNvbnN0IGdldFBhcmFtZXRlckRlZmF1bHRWYWx1ZSA9IGZ1bmN0aW9uIChzUGFyYW1OYW1lOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9EaWFsb2cuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdFx0XHRcdFx0XHRzQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvblBhdGggPSBDb21tb25VdGlscy5nZXRQYXJhbWV0ZXJQYXRoKG9BY3Rpb25Db250ZXh0LmdldFBhdGgoKSwgc1BhcmFtTmFtZSkgKyBcIkBcIixcblx0XHRcdFx0XHRcdFx0XHRvUGFyYW1ldGVyQW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvblBhdGgpLFxuXHRcdFx0XHRcdFx0XHRcdG9QYXJhbWV0ZXJEZWZhdWx0VmFsdWUgPVxuXHRcdFx0XHRcdFx0XHRcdFx0b1BhcmFtZXRlckFubm90YXRpb25zICYmIG9QYXJhbWV0ZXJBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5QYXJhbWV0ZXJEZWZhdWx0VmFsdWVcIl07IC8vIGVpdGhlciB7ICRQYXRoOiAnc29tZVBhdGgnIH0gb3IgJ3NvbWVTdHJpbmcnXG5cdFx0XHRcdFx0XHRcdHJldHVybiBvUGFyYW1ldGVyRGVmYXVsdFZhbHVlO1xuXHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0Y29uc3QgYUN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZSA9IFtdO1xuXHRcdFx0XHRcdFx0bGV0IHNQYXJhbU5hbWUsIHZQYXJhbWV0ZXJEZWZhdWx0VmFsdWU7XG5cdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGkgaW4gYUFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRcdFx0c1BhcmFtTmFtZSA9IGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lO1xuXHRcdFx0XHRcdFx0XHR2UGFyYW1ldGVyRGVmYXVsdFZhbHVlID0gZ2V0UGFyYW1ldGVyRGVmYXVsdFZhbHVlKHNQYXJhbU5hbWUpO1xuXHRcdFx0XHRcdFx0XHRhQ3VycmVudFBhcmFtRGVmYXVsdFZhbHVlLnB1c2gocHJlZmlsbFBhcmFtZXRlcihzUGFyYW1OYW1lLCB2UGFyYW1ldGVyRGVmYXVsdFZhbHVlKSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChvQWN0aW9uQ29udGV4dC5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKSAmJiBhQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRpZiAoc0JvdW5kRnVuY3Rpb25OYW1lICYmIHNCb3VuZEZ1bmN0aW9uTmFtZS5sZW5ndGggPiAwICYmIHR5cGVvZiBzQm91bmRGdW5jdGlvbk5hbWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGkgaW4gYUNvbnRleHRzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRhRnVuY3Rpb25QYXJhbXMucHVzaChjYWxsQm91bmRGdW5jdGlvbihzQm91bmRGdW5jdGlvbk5hbWUsIGFDb250ZXh0c1tpXSwgbVBhcmFtZXRlcnMubW9kZWwpKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgYVByZWZpbGxQYXJhbVByb21pc2VzID0gUHJvbWlzZS5hbGwoYUN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZSk7XG5cdFx0XHRcdFx0XHRsZXQgYUV4ZWNGdW5jdGlvblByb21pc2VzOiBQcm9taXNlPGFueVtdPiA9IFByb21pc2UucmVzb2x2ZShbXSk7XG5cdFx0XHRcdFx0XHRsZXQgb0V4ZWNGdW5jdGlvbkZyb21NYW5pZmVzdFByb21pc2U7XG5cdFx0XHRcdFx0XHRpZiAoYUZ1bmN0aW9uUGFyYW1zICYmIGFGdW5jdGlvblBhcmFtcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGFFeGVjRnVuY3Rpb25Qcm9taXNlcyA9IFByb21pc2UuYWxsKGFGdW5jdGlvblBhcmFtcyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAobVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNNb2R1bGUgPSBtUGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRcdC5zdWJzdHJpbmcoMCwgbVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLmxhc3RJbmRleE9mKFwiLlwiKSB8fCAtMSlcblx0XHRcdFx0XHRcdFx0XHRcdC5yZXBsYWNlKC9cXC4vZ2ksIFwiL1wiKSxcblx0XHRcdFx0XHRcdFx0XHRzRnVuY3Rpb25OYW1lID0gbVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLnN1YnN0cmluZyhcblx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5sYXN0SW5kZXhPZihcIi5cIikgKyAxLFxuXHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLmxlbmd0aFxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdG9FeGVjRnVuY3Rpb25Gcm9tTWFuaWZlc3RQcm9taXNlID0gRlBNSGVscGVyLmFjdGlvbldyYXBwZXIob0Nsb25lRXZlbnQsIHNNb2R1bGUsIHNGdW5jdGlvbk5hbWUsIHtcblx0XHRcdFx0XHRcdFx0XHRcImNvbnRleHRzXCI6IGFDb250ZXh0c1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYVByb21pc2VzID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuXHRcdFx0XHRcdFx0XHRcdGFQcmVmaWxsUGFyYW1Qcm9taXNlcyxcblx0XHRcdFx0XHRcdFx0XHRhRXhlY0Z1bmN0aW9uUHJvbWlzZXMsXG5cdFx0XHRcdFx0XHRcdFx0b0V4ZWNGdW5jdGlvbkZyb21NYW5pZmVzdFByb21pc2Vcblx0XHRcdFx0XHRcdFx0XSk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZTogYW55ID0gYVByb21pc2VzWzBdO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBmdW5jdGlvblBhcmFtcyA9IGFQcm9taXNlc1sxXTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0Z1bmN0aW9uUGFyYW1zRnJvbU1hbmlmZXN0ID0gYVByb21pc2VzWzJdO1xuXHRcdFx0XHRcdFx0XHRsZXQgc0RpYWxvZ1BhcmFtTmFtZTogc3RyaW5nO1xuXG5cdFx0XHRcdFx0XHRcdC8vIEZpbGwgdGhlIGRpYWxvZyB3aXRoIHRoZSBlYXJsaWVyIGRldGVybWluZWQgcGFyYW1ldGVyIHZhbHVlcyBmcm9tIHRoZSBkaWZmZXJlbnQgc291cmNlc1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGkgaW4gYUFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRcdFx0XHRzRGlhbG9nUGFyYW1OYW1lID0gYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gUGFyYW1ldGVyIHZhbHVlcyBwcm92aWRlZCBpbiB0aGUgY2FsbCBvZiBpbnZva2VBY3Rpb24gb3ZlcnJ1bGUgb3RoZXIgc291cmNlc1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHZQYXJhbWV0ZXJQcm92aWRlZFZhbHVlID0gYVBhcmFtZXRlclZhbHVlcz8uZmluZChcblx0XHRcdFx0XHRcdFx0XHRcdChlbGVtZW50OiBhbnkpID0+IGVsZW1lbnQubmFtZSA9PT0gYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWVcblx0XHRcdFx0XHRcdFx0XHQpPy52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRpZiAodlBhcmFtZXRlclByb3ZpZGVkVmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9PcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZSwgdlBhcmFtZXRlclByb3ZpZGVkVmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAob0Z1bmN0aW9uUGFyYW1zRnJvbU1hbmlmZXN0ICYmIG9GdW5jdGlvblBhcmFtc0Zyb21NYW5pZmVzdC5oYXNPd25Qcm9wZXJ0eShzRGlhbG9nUGFyYW1OYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b09wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0b0Z1bmN0aW9uUGFyYW1zRnJvbU1hbmlmZXN0W3NEaWFsb2dQYXJhbU5hbWVdXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoY3VycmVudFBhcmFtRGVmYXVsdFZhbHVlW2ldICYmIGN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZVtpXS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvT3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIoYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWUsIGN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZVtpXS52YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBpZiB0aGUgZGVmYXVsdCB2YWx1ZSBoYWQgbm90IGJlZW4gcHJldmlvdXNseSBkZXRlcm1pbmVkIGR1ZSB0byBkaWZmZXJlbnQgY29udGV4dHMsIHdlIGRvIG5vdGhpbmcgZWxzZVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoc0JvdW5kRnVuY3Rpb25OYW1lICYmICFjdXJyZW50UGFyYW1EZWZhdWx0VmFsdWVbaV0uYk5vUG9zc2libGVWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFDb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIHdlIGNoZWNrIGlmIHRoZSBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIHNhbWUgcGFyYW0gdmFsdWUgZm9yIGFsbCB0aGUgY29udGV4dHM6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxldCBqID0gMDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0d2hpbGUgKGogPCBhQ29udGV4dHMubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uUGFyYW1zW2pdICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvblBhcmFtc1tqICsgMV0gJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uUGFyYW1zW2pdLmdldE9iamVjdChzRGlhbG9nUGFyYW1OYW1lKSA9PT1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb25QYXJhbXNbaiArIDFdLmdldE9iamVjdChzRGlhbG9nUGFyYW1OYW1lKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aisrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly9wYXJhbSB2YWx1ZXMgYXJlIGFsbCB0aGUgc2FtZTpcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGogPT09IGFDb250ZXh0cy5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b09wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvblBhcmFtc1tqXS5nZXRPYmplY3Qoc0RpYWxvZ1BhcmFtTmFtZSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGZ1bmN0aW9uUGFyYW1zWzBdICYmIGZ1bmN0aW9uUGFyYW1zWzBdLmdldE9iamVjdChzRGlhbG9nUGFyYW1OYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQvL09ubHkgb25lIGNvbnRleHQsIHRoZW4gdGhlIGRlZmF1bHQgcGFyYW0gdmFsdWVzIGFyZSB0byBiZSB2ZXJpZmllZCBmcm9tIHRoZSBmdW5jdGlvbjpcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvT3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb25QYXJhbXNbMF0uZ2V0T2JqZWN0KHNEaWFsb2dQYXJhbU5hbWUpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGJFcnJvckZvdW5kID0gY3VycmVudFBhcmFtRGVmYXVsdFZhbHVlLnNvbWUoZnVuY3Rpb24gKG9WYWx1ZTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG9WYWx1ZS5iTGF0ZVByb3BlcnR5RXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBvVmFsdWUuYkxhdGVQcm9wZXJ0eUVycm9yO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdC8vIElmIGF0IGxlYXN0IG9uZSBEZWZhdWx0IFByb3BlcnR5IGlzIGEgTGF0ZSBQcm9wZXJ0eSBhbmQgYW4gZVRhZyBlcnJvciB3YXMgcmFpc2VkLlxuXHRcdFx0XHRcdFx0XHRpZiAoYkVycm9yRm91bmQpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBzVGV4dCA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19BUFBfQ09NUE9ORU5UX1NBUEZFX0VUQUdfTEFURV9QUk9QRVJUWVwiLCBvUmVzb3VyY2VCdW5kbGUpO1xuXHRcdFx0XHRcdFx0XHRcdE1lc3NhZ2VCb3gud2FybmluZyhzVGV4dCwgeyBjb250ZW50V2lkdGg6IFwiMjVlbVwiIH0gYXMgYW55KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgcGFyYW1ldGVyXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRjb25zdCBmbkFzeW5jQmVmb3JlT3BlbiA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGlmIChvQWN0aW9uQ29udGV4dC5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKSAmJiBhQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhUGFyYW1ldGVycyA9IG9BY3Rpb25Db250ZXh0LmdldE9iamVjdChcIiRQYXJhbWV0ZXJcIik7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNCaW5kaW5nUGFyYW1ldGVyID0gYVBhcmFtZXRlcnNbMF0gJiYgYVBhcmFtZXRlcnNbMF0uJE5hbWU7XG5cblx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvQ29udGV4dE9iamVjdCA9IGF3YWl0IGFDb250ZXh0c1swXS5yZXF1ZXN0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG9Db250ZXh0T2JqZWN0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvT3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIoc0JpbmRpbmdQYXJhbWV0ZXIsIG9Db250ZXh0T2JqZWN0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YXdhaXQgZm5TZXREZWZhdWx0c0FuZE9wZW5EaWFsb2coc0JpbmRpbmdQYXJhbWV0ZXIpO1xuXHRcdFx0XHRcdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIHBhcmFtZXRlclwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhd2FpdCBmblNldERlZmF1bHRzQW5kT3BlbkRpYWxvZygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRhd2FpdCBmbkFzeW5jQmVmb3JlT3BlbigpO1xuXG5cdFx0XHRcdFx0Ly8gYWRkaW5nIGRlZmF1bHRlZCB2YWx1ZXMgb25seSBoZXJlIGFmdGVyIHRoZXkgYXJlIG5vdCBzZXQgdG8gdGhlIGZpZWxkc1xuXHRcdFx0XHRcdGZvciAoY29uc3QgYWN0aW9uUGFyYW1ldGVySW5mbyBvZiBhY3Rpb25QYXJhbWV0ZXJJbmZvcykge1xuXHRcdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSBhY3Rpb25QYXJhbWV0ZXJJbmZvLmlzTXVsdGlWYWx1ZVxuXHRcdFx0XHRcdFx0XHQ/IChhY3Rpb25QYXJhbWV0ZXJJbmZvLmZpZWxkIGFzIE11bHRpVmFsdWVGaWVsZCkuZ2V0SXRlbXMoKVxuXHRcdFx0XHRcdFx0XHQ6IChhY3Rpb25QYXJhbWV0ZXJJbmZvLmZpZWxkIGFzIEZpZWxkKS5nZXRWYWx1ZSgpO1xuXHRcdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mby52YWx1ZSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mby52YWxpZGF0aW9uUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh2YWx1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhZnRlckNsb3NlOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0Ly8gd2hlbiB0aGUgZGlhbG9nIGlzIGNhbmNlbGxlZCwgbWVzc2FnZXMgbmVlZCB0byBiZSByZW1vdmVkIGluIGNhc2UgdGhlIHNhbWUgYWN0aW9uIHNob3VsZCBiZSBleGVjdXRlZCBhZ2FpblxuXHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzLmZvckVhY2goX3JlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW10ZXIpO1xuXHRcdFx0XHRcdG9EaWFsb2cuZGVzdHJveSgpO1xuXHRcdFx0XHRcdGlmIChhY3Rpb25SZXN1bHQuZGlhbG9nQ2FuY2VsbGVkKSB7XG5cdFx0XHRcdFx0XHRyZWplY3QoQ29uc3RhbnRzLkNhbmNlbEFjdGlvbkRpYWxvZyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJlc29sdmUoYWN0aW9uUmVzdWx0LnJlc3VsdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdG1QYXJhbWV0ZXJzLm9EaWFsb2cgPSBvRGlhbG9nO1xuXHRcdFx0b0RpYWxvZy5zZXRNb2RlbChvQWN0aW9uQ29udGV4dC5nZXRNb2RlbCgpLm9Nb2RlbCk7XG5cdFx0XHRvRGlhbG9nLnNldE1vZGVsKG9QYXJhbWV0ZXJNb2RlbCwgXCJwYXJhbXNNb2RlbFwiKTtcblx0XHRcdG9EaWFsb2cuYmluZEVsZW1lbnQoe1xuXHRcdFx0XHRwYXRoOiBcIi9cIixcblx0XHRcdFx0bW9kZWw6IFwicGFyYW1zTW9kZWxcIlxuXHRcdFx0fSk7XG5cblx0XHRcdC8vIGVtcHR5IG1vZGVsIHRvIGFkZCBlbGVtZW50cyBkeW5hbWljYWxseSBkZXBlbmRpbmcgb24gbnVtYmVyIG9mIE1WRiBmaWVsZHMgZGVmaW5lZCBvbiB0aGUgZGlhbG9nXG5cdFx0XHRjb25zdCBvTVZGTW9kZWwgPSBuZXcgSlNPTk1vZGVsKHt9KTtcblx0XHRcdG9EaWFsb2cuc2V0TW9kZWwob01WRk1vZGVsLCBcIm12ZnZpZXdcIik7XG5cblx0XHRcdC8qIEV2ZW50IG5lZWRlZCBmb3IgcmVtb3ZpbmcgbWVzc2FnZXMgb2YgdmFsaWQgY2hhbmdlZCBmaWVsZCAqL1xuXHRcdFx0Zm9yIChjb25zdCBhY3Rpb25QYXJhbWV0ZXJJbmZvIG9mIGFjdGlvblBhcmFtZXRlckluZm9zKSB7XG5cdFx0XHRcdGlmIChhY3Rpb25QYXJhbWV0ZXJJbmZvLmlzTXVsdGlWYWx1ZSkge1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm8/LmZpZWxkPy5nZXRCaW5kaW5nKFwiaXRlbXNcIik/LmF0dGFjaENoYW5nZSgoKSA9PiB7XG5cdFx0XHRcdFx0XHRfcmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbXRlcihhY3Rpb25QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mbz8uZmllbGQ/LmdldEJpbmRpbmcoXCJ2YWx1ZVwiKT8uYXR0YWNoQ2hhbmdlKCgpID0+IHtcblx0XHRcdFx0XHRcdF9yZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtdGVyKGFjdGlvblBhcmFtZXRlckluZm8ucGFyYW1ldGVyKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRsZXQgc0FjdGlvblBhdGggPSBgJHtzQWN0aW9uTmFtZX0oLi4uKWA7XG5cdFx0XHRpZiAoIWFDb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0c0FjdGlvblBhdGggPSBgLyR7c0FjdGlvblBhdGh9YDtcblx0XHRcdH1cblx0XHRcdG9EaWFsb2cuYmluZEVsZW1lbnQoe1xuXHRcdFx0XHRwYXRoOiBzQWN0aW9uUGF0aFxuXHRcdFx0fSk7XG5cdFx0XHRpZiAob1BhcmVudENvbnRyb2wpIHtcblx0XHRcdFx0Ly8gaWYgdGhlcmUgaXMgYSBwYXJlbnQgY29udHJvbCBzcGVjaWZpZWQgYWRkIHRoZSBkaWFsb2cgYXMgZGVwZW5kZW50XG5cdFx0XHRcdG9QYXJlbnRDb250cm9sLmFkZERlcGVuZGVudChvRGlhbG9nKTtcblx0XHRcdH1cblx0XHRcdGlmIChhQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRvRGlhbG9nLnNldEJpbmRpbmdDb250ZXh0KGFDb250ZXh0c1swXSk7IC8vIHVzZSBjb250ZXh0IG9mIGZpcnN0IHNlbGVjdGVkIGxpbmUgaXRlbVxuXHRcdFx0fVxuXHRcdFx0b09wZXJhdGlvbkJpbmRpbmcgPSBvRGlhbG9nLmdldE9iamVjdEJpbmRpbmcoKTtcblx0XHRcdG9EaWFsb2cub3BlbigpO1xuXHRcdH0gY2F0Y2ggKG9FcnJvcjogYW55KSB7XG5cdFx0XHRyZWplY3Qob0Vycm9yKTtcblx0XHR9XG5cdH0pO1xufVxuZnVuY3Rpb24gZ2V0QWN0aW9uUGFyYW1ldGVycyhvQWN0aW9uOiBhbnkpIHtcblx0Y29uc3QgYVBhcmFtZXRlcnMgPSBvQWN0aW9uLmdldE9iamVjdChcIiRQYXJhbWV0ZXJcIikgfHwgW107XG5cdGlmIChhUGFyYW1ldGVycyAmJiBhUGFyYW1ldGVycy5sZW5ndGgpIHtcblx0XHRpZiAob0FjdGlvbi5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKSkge1xuXHRcdFx0Ly9pbiBjYXNlIG9mIGJvdW5kIGFjdGlvbnMsIGlnbm9yZSB0aGUgZmlyc3QgcGFyYW1ldGVyIGFuZCBjb25zaWRlciB0aGUgcmVzdFxuXHRcdFx0cmV0dXJuIGFQYXJhbWV0ZXJzLnNsaWNlKDEsIGFQYXJhbWV0ZXJzLmxlbmd0aCkgfHwgW107XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhUGFyYW1ldGVycztcbn1cbmZ1bmN0aW9uIGdldElzQWN0aW9uQ3JpdGljYWwob01ldGFNb2RlbDogYW55LCBzUGF0aDogYW55LCBjb250ZXh0cz86IGFueSwgb0JvdW5kQWN0aW9uPzogYW55KSB7XG5cdGNvbnN0IHZBY3Rpb25Dcml0aWNhbCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNBY3Rpb25Dcml0aWNhbGApO1xuXHRsZXQgc0NyaXRpY2FsUGF0aCA9IHZBY3Rpb25Dcml0aWNhbCAmJiB2QWN0aW9uQ3JpdGljYWwuJFBhdGg7XG5cdGlmICghc0NyaXRpY2FsUGF0aCkge1xuXHRcdC8vIHRoZSBzdGF0aWMgdmFsdWUgc2NlbmFyaW8gZm9yIGlzQWN0aW9uQ3JpdGljYWxcblx0XHRyZXR1cm4gISF2QWN0aW9uQ3JpdGljYWw7XG5cdH1cblx0Y29uc3QgYUJpbmRpbmdQYXJhbXMgPSBvQm91bmRBY3Rpb24gJiYgb0JvdW5kQWN0aW9uLmdldE9iamVjdChcIiRQYXJhbWV0ZXJcIiksXG5cdFx0YVBhdGhzID0gc0NyaXRpY2FsUGF0aCAmJiBzQ3JpdGljYWxQYXRoLnNwbGl0KFwiL1wiKSxcblx0XHRiQ29uZGl0aW9uID1cblx0XHRcdGFCaW5kaW5nUGFyYW1zICYmIGFCaW5kaW5nUGFyYW1zLmxlbmd0aCAmJiB0eXBlb2YgYUJpbmRpbmdQYXJhbXMgPT09IFwib2JqZWN0XCIgJiYgc0NyaXRpY2FsUGF0aCAmJiBjb250ZXh0cyAmJiBjb250ZXh0cy5sZW5ndGg7XG5cdGlmIChiQ29uZGl0aW9uKSB7XG5cdFx0Ly9pbiBjYXNlIGJpbmRpbmcgcGF0YW1ldGVycyBhcmUgdGhlcmUgaW4gcGF0aCBuZWVkIHRvIHJlbW92ZSBlZzogLSBfaXQvaXNWZXJpZmllZCA9PiBuZWVkIHRvIHJlbW92ZSBfaXQgYW5kIHRoZSBwYXRoIHNob3VsZCBiZSBpc1ZlcmlmaWVkXG5cdFx0YUJpbmRpbmdQYXJhbXMuZmlsdGVyKGZ1bmN0aW9uIChvUGFyYW1zOiBhbnkpIHtcblx0XHRcdGNvbnN0IGluZGV4ID0gYVBhdGhzICYmIGFQYXRocy5pbmRleE9mKG9QYXJhbXMuJE5hbWUpO1xuXHRcdFx0aWYgKGluZGV4ID4gLTEpIHtcblx0XHRcdFx0YVBhdGhzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0c0NyaXRpY2FsUGF0aCA9IGFQYXRocy5qb2luKFwiL1wiKTtcblx0XHRyZXR1cm4gY29udGV4dHNbMF0uZ2V0T2JqZWN0KHNDcml0aWNhbFBhdGgpO1xuXHR9IGVsc2UgaWYgKHNDcml0aWNhbFBhdGgpIHtcblx0XHQvL2lmIHNjZW5hcmlvIGlzIHBhdGggYmFzZWQgcmV0dXJuIHRoZSBwYXRoIHZhbHVlXG5cdFx0cmV0dXJuIGNvbnRleHRzWzBdLmdldE9iamVjdChzQ3JpdGljYWxQYXRoKTtcblx0fVxufVxuXG5mdW5jdGlvbiBfZ2V0QWN0aW9uUGFyYW1ldGVyQWN0aW9uTmFtZShvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlLCBzQWN0aW9uTGFiZWw6IHN0cmluZywgc0FjdGlvbk5hbWU6IHN0cmluZywgc0VudGl0eVNldE5hbWU6IHN0cmluZykge1xuXHRsZXQgYm91bmRBY3Rpb25OYW1lOiBhbnkgPSBzQWN0aW9uTmFtZSA/IHNBY3Rpb25OYW1lIDogbnVsbDtcblx0Y29uc3QgYUFjdGlvbk5hbWUgPSBib3VuZEFjdGlvbk5hbWUuc3BsaXQoXCIuXCIpO1xuXHRib3VuZEFjdGlvbk5hbWUgPSBib3VuZEFjdGlvbk5hbWUuaW5kZXhPZihcIi5cIikgPj0gMCA/IGFBY3Rpb25OYW1lW2FBY3Rpb25OYW1lLmxlbmd0aCAtIDFdIDogYm91bmRBY3Rpb25OYW1lO1xuXHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGJvdW5kQWN0aW9uTmFtZSAmJiBzRW50aXR5U2V0TmFtZSA/IGAke3NFbnRpdHlTZXROYW1lfXwke2JvdW5kQWN0aW9uTmFtZX1gIDogXCJcIjtcblx0Y29uc3Qgc0tleSA9IFwiQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfQUNUSU9OX05BTUVcIjtcblx0Y29uc3QgYlJlc291cmNlS2V5RXhpc3RzID1cblx0XHRvUmVzb3VyY2VCdW5kbGUgJiYgQ29tbW9uVXRpbHMuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKChvUmVzb3VyY2VCdW5kbGUgYXMgYW55KS5hQ3VzdG9tQnVuZGxlcywgYCR7c0tleX18JHtzdWZmaXhSZXNvdXJjZUtleX1gKTtcblx0aWYgKHNBY3Rpb25MYWJlbCkge1xuXHRcdGlmIChiUmVzb3VyY2VLZXlFeGlzdHMpIHtcblx0XHRcdHJldHVybiBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChzS2V5LCBvUmVzb3VyY2VCdW5kbGUsIG51bGwsIHN1ZmZpeFJlc291cmNlS2V5KTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0b1Jlc291cmNlQnVuZGxlICYmXG5cdFx0XHRDb21tb25VdGlscy5jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoKG9SZXNvdXJjZUJ1bmRsZSBhcyBhbnkpLmFDdXN0b21CdW5kbGVzLCBgJHtzS2V5fXwke3NFbnRpdHlTZXROYW1lfWApXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoc0tleSwgb1Jlc291cmNlQnVuZGxlLCBudWxsLCBgJHtzRW50aXR5U2V0TmFtZX1gKTtcblx0XHR9IGVsc2UgaWYgKG9SZXNvdXJjZUJ1bmRsZSAmJiBDb21tb25VdGlscy5jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoKG9SZXNvdXJjZUJ1bmRsZSBhcyBhbnkpLmFDdXN0b21CdW5kbGVzLCBgJHtzS2V5fWApKSB7XG5cdFx0XHRyZXR1cm4gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoc0tleSwgb1Jlc291cmNlQnVuZGxlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHNBY3Rpb25MYWJlbDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19DT01NT05fRElBTE9HX09LXCIsIG9SZXNvdXJjZUJ1bmRsZSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlNDEyRmFpbGVkVHJhbnNpdGlvbnMoXG5cdG1QYXJhbWV0ZXJzOiBhbnksXG5cdG9BY3Rpb246IGFueSxcblx0c0dyb3VwSWQ6IHN0cmluZyxcblx0Y3VycmVudF9jb250ZXh0X2luZGV4OiBudW1iZXIgfCBudWxsLFxuXHRpQ29udGV4dExlbmd0aDogbnVtYmVyIHwgbnVsbCxcblx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyIHwgdW5kZWZpbmVkLFxuXHRvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlXG4pIHtcblx0aWYgKG1QYXJhbWV0ZXJzLmFDb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0bGV0IHN0cmljdEhhbmRsaW5nRmFpbHM6IGFueTtcblx0XHRjb25zdCBtZXNzYWdlcyA9IHNhcC51aS5nZXRDb3JlKCkuZ2V0TWVzc2FnZU1hbmFnZXIoKS5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0Y29uc3QgcHJvY2Vzc2VkTWVzc2FnZUlkcyA9IG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwicHJvY2Vzc2VkTWVzc2FnZUlkc1wiKTtcblx0XHRjb25zdCB0cmFuc2l0aW9uTWVzc2FnZXMgPSBtZXNzYWdlcy5maWx0ZXIoZnVuY3Rpb24gKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcblx0XHRcdGNvbnN0IGlzRHVwbGljYXRlID0gcHJvY2Vzc2VkTWVzc2FnZUlkcy5maW5kKGZ1bmN0aW9uIChpZDogc3RyaW5nKSB7XG5cdFx0XHRcdHJldHVybiBtZXNzYWdlLmdldElkKCkgPT09IGlkO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAoIWlzRHVwbGljYXRlKSB7XG5cdFx0XHRcdHByb2Nlc3NlZE1lc3NhZ2VJZHMucHVzaChtZXNzYWdlLmdldElkKCkpO1xuXHRcdFx0XHRpZiAobWVzc2FnZS5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLlN1Y2Nlc3MpIHtcblx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcblx0XHRcdFx0XHRcdFwiRGVsYXlNZXNzYWdlc1wiLFxuXHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJEZWxheU1lc3NhZ2VzXCIpLmNvbmNhdChtZXNzYWdlKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBtZXNzYWdlLmdldFBlcnNpc3RlbnQoKSA9PT0gdHJ1ZSAmJiBtZXNzYWdlLmdldFR5cGUoKSAhPT0gTWVzc2FnZVR5cGUuU3VjY2VzcyAmJiAhaXNEdXBsaWNhdGU7XG5cdFx0fSk7XG5cdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJwcm9jZXNzZWRNZXNzYWdlSWRzXCIsIHByb2Nlc3NlZE1lc3NhZ2VJZHMpO1xuXHRcdGlmICh0cmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0XHRpZiAobVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdFx0c3RyaWN0SGFuZGxpbmdGYWlscyA9IG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwic3RyaWN0SGFuZGxpbmdGYWlsc1wiKTtcblx0XHRcdFx0c3RyaWN0SGFuZGxpbmdGYWlscy5wdXNoKHtcblx0XHRcdFx0XHRvQWN0aW9uOiBvQWN0aW9uLFxuXHRcdFx0XHRcdGdyb3VwSWQ6IHNHcm91cElkXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInN0cmljdEhhbmRsaW5nRmFpbHNcIiwgc3RyaWN0SGFuZGxpbmdGYWlscyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKFxuXHRcdGN1cnJlbnRfY29udGV4dF9pbmRleCA9PT0gaUNvbnRleHRMZW5ndGggJiZcblx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCAmJlxuXHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiNDEyTWVzc2FnZXNcIik/Lmxlbmd0aFxuXHQpIHtcblx0XHRvcGVyYXRpb25zSGVscGVyLnJlbmRlck1lc3NhZ2VWaWV3KFxuXHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiNDEyTWVzc2FnZXNcIiksXG5cdFx0XHR0cnVlXG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzKFxuXHRvQWN0aW9uOiBhbnksXG5cdG1QYXJhbWV0ZXJzOiBhbnksXG5cdGJHZXRCb3VuZENvbnRleHQ6IGJvb2xlYW4sXG5cdHNHcm91cElkOiBzdHJpbmcsXG5cdG9SZXNvdXJjZUJ1bmRsZTogUmVzb3VyY2VCdW5kbGUsXG5cdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlciB8IHVuZGVmaW5lZCxcblx0aUNvbnRleHRMZW5ndGg6IG51bWJlciB8IG51bGwsXG5cdGN1cnJlbnRfY29udGV4dF9pbmRleDogbnVtYmVyIHwgbnVsbFxuKSB7XG5cdGxldCBvQWN0aW9uUHJvbWlzZSxcblx0XHRiRW5hYmxlU3RyaWN0SGFuZGxpbmcgPSB0cnVlO1xuXHRpZiAoYkdldEJvdW5kQ29udGV4dCkge1xuXHRcdGNvbnN0IHNQYXRoID0gb0FjdGlvbi5nZXRCb3VuZENvbnRleHQoKS5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgc01ldGFQYXRoID0gb0FjdGlvbi5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE1ldGFQYXRoKHNQYXRoKTtcblx0XHRjb25zdCBvUHJvcGVydHkgPSBvQWN0aW9uLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KHNNZXRhUGF0aCk7XG5cdFx0aWYgKG9Qcm9wZXJ0eSAmJiBvUHJvcGVydHlbMF0/LiRraW5kICE9PSBcIkFjdGlvblwiKSB7XG5cdFx0XHQvL2RvIG5vdCBlbmFibGUgdGhlIHN0cmljdCBoYW5kbGluZyBpZiBpdHMgbm90IGFuIGFjdGlvblxuXHRcdFx0YkVuYWJsZVN0cmljdEhhbmRsaW5nID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCFiRW5hYmxlU3RyaWN0SGFuZGxpbmcpIHtcblx0XHRvQWN0aW9uUHJvbWlzZSA9IGJHZXRCb3VuZENvbnRleHRcblx0XHRcdD8gb0FjdGlvbi5leGVjdXRlKHNHcm91cElkKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0FjdGlvbi5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdCAgfSlcblx0XHRcdDogb0FjdGlvbi5leGVjdXRlKHNHcm91cElkKTtcblx0fSBlbHNlIHtcblx0XHRvQWN0aW9uUHJvbWlzZSA9IGJHZXRCb3VuZENvbnRleHRcblx0XHRcdD8gb0FjdGlvblxuXHRcdFx0XHRcdC5leGVjdXRlKFxuXHRcdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRvcGVyYXRpb25zSGVscGVyLmZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZC5iaW5kKFxuXHRcdFx0XHRcdFx0XHRvcGVyYXRpb25zLFxuXHRcdFx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0XHRcdFx0Y3VycmVudF9jb250ZXh0X2luZGV4LFxuXHRcdFx0XHRcdFx0XHRvQWN0aW9uLmdldENvbnRleHQoKSxcblx0XHRcdFx0XHRcdFx0aUNvbnRleHRMZW5ndGgsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGhhbmRsZTQxMkZhaWxlZFRyYW5zaXRpb25zKFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0b0FjdGlvbixcblx0XHRcdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleCxcblx0XHRcdFx0XHRcdFx0aUNvbnRleHRMZW5ndGgsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGVcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG9BY3Rpb24uZ2V0Qm91bmRDb250ZXh0KCkpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGhhbmRsZTQxMkZhaWxlZFRyYW5zaXRpb25zKFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0b0FjdGlvbixcblx0XHRcdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleCxcblx0XHRcdFx0XHRcdFx0aUNvbnRleHRMZW5ndGgsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGVcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHQ6IG9BY3Rpb25cblx0XHRcdFx0XHQuZXhlY3V0ZShcblx0XHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0b3BlcmF0aW9uc0hlbHBlci5mbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQuYmluZChcblx0XHRcdFx0XHRcdFx0b3BlcmF0aW9ucyxcblx0XHRcdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleCxcblx0XHRcdFx0XHRcdFx0b0FjdGlvbi5nZXRDb250ZXh0KCksXG5cdFx0XHRcdFx0XHRcdGlDb250ZXh0TGVuZ3RoLFxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlclxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdClcblx0XHRcdFx0XHQudGhlbihmdW5jdGlvbiAocmVzdWx0OiBhbnkpIHtcblx0XHRcdFx0XHRcdGhhbmRsZTQxMkZhaWxlZFRyYW5zaXRpb25zKFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0b0FjdGlvbixcblx0XHRcdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleCxcblx0XHRcdFx0XHRcdFx0aUNvbnRleHRMZW5ndGgsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGVcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0aGFuZGxlNDEyRmFpbGVkVHJhbnNpdGlvbnMoXG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRvQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRcdFx0Y3VycmVudF9jb250ZXh0X2luZGV4LFxuXHRcdFx0XHRcdFx0XHRpQ29udGV4dExlbmd0aCxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuXHRcdFx0XHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIG9BY3Rpb25Qcm9taXNlLmNhdGNoKCgpID0+IHtcblx0XHR0aHJvdyBDb25zdGFudHMuQWN0aW9uRXhlY3V0aW9uRmFpbGVkO1xuXHR9KTtcbn1cbmZ1bmN0aW9uIF9leGVjdXRlQWN0aW9uKG9BcHBDb21wb25lbnQ6IGFueSwgbVBhcmFtZXRlcnM6IGFueSwgb1BhcmVudENvbnRyb2w/OiBhbnksIG1lc3NhZ2VIYW5kbGVyPzogTWVzc2FnZUhhbmRsZXIpIHtcblx0Y29uc3QgYUNvbnRleHRzID0gbVBhcmFtZXRlcnMuYUNvbnRleHRzIHx8IFtdO1xuXHRjb25zdCBvTW9kZWwgPSBtUGFyYW1ldGVycy5tb2RlbDtcblx0Y29uc3QgYUFjdGlvblBhcmFtZXRlcnMgPSBtUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVycyB8fCBbXTtcblx0Y29uc3Qgc0FjdGlvbk5hbWUgPSBtUGFyYW1ldGVycy5hY3Rpb25OYW1lO1xuXHRjb25zdCBmbk9uU3VibWl0dGVkID0gbVBhcmFtZXRlcnMuZm5PblN1Ym1pdHRlZDtcblx0Y29uc3QgZm5PblJlc3BvbnNlID0gbVBhcmFtZXRlcnMuZm5PblJlc3BvbnNlO1xuXHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBvUGFyZW50Q29udHJvbCAmJiBvUGFyZW50Q29udHJvbC5pc0EoXCJzYXAudWkuY29yZS5tdmMuVmlld1wiKSAmJiBvUGFyZW50Q29udHJvbC5nZXRDb250cm9sbGVyKCkub1Jlc291cmNlQnVuZGxlO1xuXHRsZXQgb0FjdGlvbjogYW55O1xuXG5cdGZ1bmN0aW9uIHNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSgpIHtcblx0XHRpZiAoYUFjdGlvblBhcmFtZXRlcnMgJiYgYUFjdGlvblBhcmFtZXRlcnMubGVuZ3RoKSB7XG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGFBY3Rpb25QYXJhbWV0ZXJzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGlmICghYUFjdGlvblBhcmFtZXRlcnNbal0udmFsdWUpIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGFBY3Rpb25QYXJhbWV0ZXJzW2pdLiRUeXBlKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLlN0cmluZ1wiOlxuXHRcdFx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVyc1tqXS52YWx1ZSA9IFwiXCI7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5Cb29sZWFuXCI6XG5cdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2pdLnZhbHVlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5CeXRlXCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkludDE2XCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkludDMyXCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkludDY0XCI6XG5cdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2pdLnZhbHVlID0gMDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHQvLyB0YmNcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRvQWN0aW9uLnNldFBhcmFtZXRlcihhQWN0aW9uUGFyYW1ldGVyc1tqXS4kTmFtZSwgYUFjdGlvblBhcmFtZXRlcnNbal0udmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChhQ29udGV4dHMubGVuZ3RoKSB7XG5cdFx0Ly8gVE9ETzogcmVmYWN0b3IgdG8gZGlyZWN0IHVzZSBvZiBQcm9taXNlLmFsbFNldHRsZWRcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkKSB7XG5cdFx0XHRjb25zdCBtQmluZGluZ1BhcmFtZXRlcnMgPSBtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnM7XG5cdFx0XHRjb25zdCBiR3JvdXBlZCA9IG1QYXJhbWV0ZXJzLmJHcm91cGVkO1xuXHRcdFx0Y29uc3QgYkdldEJvdW5kQ29udGV4dCA9IG1QYXJhbWV0ZXJzLmJHZXRCb3VuZENvbnRleHQ7XG5cdFx0XHRpZiAobVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQgJiYgIW1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiNDEyRXhlY3V0ZWRcIikpIHtcblx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzdHJpY3RIYW5kbGluZ1Byb21pc2VzXCIsIFtdKTtcblx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzdHJpY3RIYW5kbGluZ0ZhaWxzXCIsIFtdKTtcblx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCI0MTJNZXNzYWdlc1wiLCBbXSk7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwicHJvY2Vzc2VkTWVzc2FnZUlkc1wiLCBbXSk7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiRGVsYXlNZXNzYWdlc1wiLCBbXSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBhQWN0aW9uUHJvbWlzZXM6IGFueVtdID0gW107XG5cdFx0XHRsZXQgb0FjdGlvblByb21pc2U7XG5cdFx0XHRsZXQgaTtcblx0XHRcdGxldCBzR3JvdXBJZDogc3RyaW5nO1xuXHRcdFx0Y29uc3QgZm5FeGVjdXRlQWN0aW9uID0gZnVuY3Rpb24gKGFjdGlvbkNvbnRleHQ6IGFueSwgY3VycmVudF9jb250ZXh0X2luZGV4OiBhbnksIG9TaWRlRWZmZWN0OiBhbnksIGlDb250ZXh0TGVuZ3RoOiBhbnkpIHtcblx0XHRcdFx0c2V0QWN0aW9uUGFyYW1ldGVyRGVmYXVsdFZhbHVlKCk7XG5cdFx0XHRcdC8vIEZvciBpbnZvY2F0aW9uIGdyb3VwaW5nIFwiaXNvbGF0ZWRcIiBuZWVkIGJhdGNoIGdyb3VwIHBlciBhY3Rpb24gY2FsbFxuXHRcdFx0XHRzR3JvdXBJZCA9ICFiR3JvdXBlZCA/IGAkYXV0by4ke2N1cnJlbnRfY29udGV4dF9pbmRleH1gIDogYWN0aW9uQ29udGV4dC5nZXRVcGRhdGVHcm91cElkKCk7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLnJlcXVlc3RTaWRlRWZmZWN0cyA9IGZuUmVxdWVzdFNpZGVFZmZlY3RzLmJpbmQob3BlcmF0aW9ucywgb0FwcENvbXBvbmVudCwgb1NpZGVFZmZlY3QsIG1QYXJhbWV0ZXJzKTtcblx0XHRcdFx0b0FjdGlvblByb21pc2UgPSBleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzKFxuXHRcdFx0XHRcdGFjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0YkdldEJvdW5kQ29udGV4dCxcblx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0aUNvbnRleHRMZW5ndGgsXG5cdFx0XHRcdFx0Y3VycmVudF9jb250ZXh0X2luZGV4XG5cdFx0XHRcdCk7XG5cdFx0XHRcdGFBY3Rpb25Qcm9taXNlcy5wdXNoKG9BY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0Zm5SZXF1ZXN0U2lkZUVmZmVjdHMob0FwcENvbXBvbmVudCwgb1NpZGVFZmZlY3QsIG1QYXJhbWV0ZXJzLCBzR3JvdXBJZCk7XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgZm5FeGVjdXRlU2luZ2xlQWN0aW9uID0gZnVuY3Rpb24gKGFjdGlvbkNvbnRleHQ6IGFueSwgY3VycmVudF9jb250ZXh0X2luZGV4OiBhbnksIG9TaWRlRWZmZWN0OiBhbnksIGlDb250ZXh0TGVuZ3RoOiBhbnkpIHtcblx0XHRcdFx0Y29uc3QgYUxvY2FsUHJvbWlzZTogYW55ID0gW107XG5cdFx0XHRcdHNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSgpO1xuXHRcdFx0XHQvLyBGb3IgaW52b2NhdGlvbiBncm91cGluZyBcImlzb2xhdGVkXCIgbmVlZCBiYXRjaCBncm91cCBwZXIgYWN0aW9uIGNhbGxcblx0XHRcdFx0c0dyb3VwSWQgPSBgYXBpTW9kZSR7Y3VycmVudF9jb250ZXh0X2luZGV4fWA7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLnJlcXVlc3RTaWRlRWZmZWN0cyA9IGZuUmVxdWVzdFNpZGVFZmZlY3RzLmJpbmQoXG5cdFx0XHRcdFx0b3BlcmF0aW9ucyxcblx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdG9TaWRlRWZmZWN0LFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdGFMb2NhbFByb21pc2Vcblx0XHRcdFx0KTtcblx0XHRcdFx0b0FjdGlvblByb21pc2UgPSBleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzKFxuXHRcdFx0XHRcdGFjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0YkdldEJvdW5kQ29udGV4dCxcblx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0aUNvbnRleHRMZW5ndGgsXG5cdFx0XHRcdFx0Y3VycmVudF9jb250ZXh0X2luZGV4XG5cdFx0XHRcdCk7XG5cdFx0XHRcdGFBY3Rpb25Qcm9taXNlcy5wdXNoKG9BY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0YUxvY2FsUHJvbWlzZS5wdXNoKG9BY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0Zm5SZXF1ZXN0U2lkZUVmZmVjdHMob0FwcENvbXBvbmVudCwgb1NpZGVFZmZlY3QsIG1QYXJhbWV0ZXJzLCBzR3JvdXBJZCwgYUxvY2FsUHJvbWlzZSk7XG5cdFx0XHRcdG9Nb2RlbC5zdWJtaXRCYXRjaChzR3JvdXBJZCk7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbFNldHRsZWQoYUxvY2FsUHJvbWlzZSk7XG5cdFx0XHR9O1xuXG5cdFx0XHRhc3luYyBmdW5jdGlvbiBmbkV4ZWN1dGVTZXF1ZW50aWFsbHkoY29udGV4dHNUb0V4ZWN1dGU6IENvbnRleHRbXSkge1xuXHRcdFx0XHQvLyBPbmUgYWN0aW9uIGFuZCBpdHMgc2lkZSBlZmZlY3RzIGFyZSBjb21wbGV0ZWQgYmVmb3JlIHRoZSBuZXh0IGFjdGlvbiBpcyBleGVjdXRlZFxuXHRcdFx0XHQoXG5cdFx0XHRcdFx0Zm5PblN1Ym1pdHRlZCB8fFxuXHRcdFx0XHRcdGZ1bmN0aW9uIG5vb3AoKSB7XG5cdFx0XHRcdFx0XHQvKiovXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpKGFBY3Rpb25Qcm9taXNlcyk7XG5cdFx0XHRcdGZ1bmN0aW9uIHByb2Nlc3NPbmVBY3Rpb24oY29udGV4dDogYW55LCBhY3Rpb25JbmRleDogYW55LCBpQ29udGV4dExlbmd0aDogYW55KSB7XG5cdFx0XHRcdFx0b0FjdGlvbiA9IG9Nb2RlbC5iaW5kQ29udGV4dChgJHtzQWN0aW9uTmFtZX0oLi4uKWAsIGNvbnRleHQsIG1CaW5kaW5nUGFyYW1ldGVycyk7XG5cdFx0XHRcdFx0cmV0dXJuIGZuRXhlY3V0ZVNpbmdsZUFjdGlvbihcblx0XHRcdFx0XHRcdG9BY3Rpb24sXG5cdFx0XHRcdFx0XHRhY3Rpb25JbmRleCxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0Y29udGV4dDogY29udGV4dCxcblx0XHRcdFx0XHRcdFx0cGF0aEV4cHJlc3Npb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMsXG5cdFx0XHRcdFx0XHRcdHRyaWdnZXJBY3Rpb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC50cmlnZ2VyQWN0aW9uc1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGlDb250ZXh0TGVuZ3RoXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIHNlcmlhbGl6YXRpb246IHByb2Nlc3NPbmVBY3Rpb24gdG8gYmUgY2FsbGVkIGZvciBlYWNoIGVudHJ5IGluIGNvbnRleHRzVG9FeGVjdXRlIG9ubHkgYWZ0ZXIgdGhlIHByb21pc2UgcmV0dXJuZWQgZnJvbSB0aGUgb25lIGJlZm9yZSBoYXMgYmVlbiByZXNvbHZlZFxuXHRcdFx0XHRhd2FpdCBjb250ZXh0c1RvRXhlY3V0ZS5yZWR1Y2UoYXN5bmMgKHByb21pc2U6IFByb21pc2U8dm9pZD4sIGNvbnRleHQ6IENvbnRleHQsIGlkOiBpbnQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRcdFx0XHRhd2FpdCBwcm9taXNlO1xuXHRcdFx0XHRcdGF3YWl0IHByb2Nlc3NPbmVBY3Rpb24oY29udGV4dCwgaWQgKyAxLCBhQ29udGV4dHMubGVuZ3RoKTtcblx0XHRcdFx0fSwgUHJvbWlzZS5yZXNvbHZlKCkpO1xuXG5cdFx0XHRcdGZuSGFuZGxlUmVzdWx0cygpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWJHcm91cGVkKSB7XG5cdFx0XHRcdC8vIEZvciBpbnZvY2F0aW9uIGdyb3VwaW5nIFwiaXNvbGF0ZWRcIiwgZW5zdXJlIHRoYXQgZWFjaCBhY3Rpb24gYW5kIG1hdGNoaW5nIHNpZGUgZWZmZWN0c1xuXHRcdFx0XHQvLyBhcmUgcHJvY2Vzc2VkIGJlZm9yZSB0aGUgbmV4dCBzZXQgaXMgc3VibWl0dGVkLiBXb3JrYXJvdW5kIHVudGlsIEpTT04gYmF0Y2ggaXMgYXZhaWxhYmxlLlxuXHRcdFx0XHQvLyBBbGxvdyBhbHNvIGZvciBMaXN0IFJlcG9ydC5cblx0XHRcdFx0Zm5FeGVjdXRlU2VxdWVudGlhbGx5KGFDb250ZXh0cyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgYUNvbnRleHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0b0FjdGlvbiA9IG9Nb2RlbC5iaW5kQ29udGV4dChgJHtzQWN0aW9uTmFtZX0oLi4uKWAsIGFDb250ZXh0c1tpXSwgbUJpbmRpbmdQYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHRmbkV4ZWN1dGVBY3Rpb24oXG5cdFx0XHRcdFx0XHRvQWN0aW9uLFxuXHRcdFx0XHRcdFx0YUNvbnRleHRzLmxlbmd0aCA8PSAxID8gbnVsbCA6IGksXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGNvbnRleHQ6IGFDb250ZXh0c1tpXSxcblx0XHRcdFx0XHRcdFx0cGF0aEV4cHJlc3Npb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMsXG5cdFx0XHRcdFx0XHRcdHRyaWdnZXJBY3Rpb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC50cmlnZ2VyQWN0aW9uc1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGFDb250ZXh0cy5sZW5ndGhcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdChcblx0XHRcdFx0XHRmbk9uU3VibWl0dGVkIHx8XG5cdFx0XHRcdFx0ZnVuY3Rpb24gbm9vcCgpIHtcblx0XHRcdFx0XHRcdC8qKi9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdCkoYUFjdGlvblByb21pc2VzKTtcblx0XHRcdFx0Zm5IYW5kbGVSZXN1bHRzKCk7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGZuSGFuZGxlUmVzdWx0cygpIHtcblx0XHRcdFx0Ly8gUHJvbWlzZS5hbGxTZXR0bGVkIHdpbGwgbmV2ZXIgYmUgcmVqZWN0ZWQuIEhvd2V2ZXIsIGVzbGludCByZXF1aXJlcyBlaXRoZXIgY2F0Y2ggb3IgcmV0dXJuIC0gdGh1cyB3ZSByZXR1cm4gdGhlIHJlc3VsdGluZyBQcm9taXNlIGFsdGhvdWdoIG5vIG9uZSB3aWxsIHVzZSBpdC5cblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZChhQWN0aW9uUHJvbWlzZXMpLnRoZW4ocmVzb2x2ZSk7XG5cdFx0XHR9XG5cdFx0fSkuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHQoXG5cdFx0XHRcdGZuT25SZXNwb25zZSB8fFxuXHRcdFx0XHRmdW5jdGlvbiBub29wKCkge1xuXHRcdFx0XHRcdC8qKi9cblx0XHRcdFx0fVxuXHRcdFx0KSgpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9BY3Rpb24gPSBvTW9kZWwuYmluZENvbnRleHQoYC8ke3NBY3Rpb25OYW1lfSguLi4pYCk7XG5cdFx0c2V0QWN0aW9uUGFyYW1ldGVyRGVmYXVsdFZhbHVlKCk7XG5cdFx0Y29uc3Qgc0dyb3VwSWQgPSBcImFjdGlvbkltcG9ydFwiO1xuXHRcdGNvbnN0IG9BY3Rpb25Qcm9taXNlID0gb0FjdGlvbi5leGVjdXRlKFxuXHRcdFx0c0dyb3VwSWQsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRvcGVyYXRpb25zSGVscGVyLmZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZC5iaW5kKFxuXHRcdFx0XHRvcGVyYXRpb25zLFxuXHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0eyBsYWJlbDogbVBhcmFtZXRlcnMubGFiZWwsIG1vZGVsOiBvTW9kZWwgfSxcblx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRtZXNzYWdlSGFuZGxlclxuXHRcdFx0KVxuXHRcdCk7XG5cdFx0b01vZGVsLnN1Ym1pdEJhdGNoKHNHcm91cElkKTtcblx0XHQvLyB0cmlnZ2VyIG9uU3VibWl0dGVkIFwiZXZlbnRcIlxuXHRcdChcblx0XHRcdGZuT25TdWJtaXR0ZWQgfHxcblx0XHRcdGZ1bmN0aW9uIG5vb3AoKSB7XG5cdFx0XHRcdC8qKi9cblx0XHRcdH1cblx0XHQpKG9BY3Rpb25Qcm9taXNlKTtcblx0XHRyZXR1cm4gb0FjdGlvblByb21pc2UuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHQoXG5cdFx0XHRcdGZuT25SZXNwb25zZSB8fFxuXHRcdFx0XHRmdW5jdGlvbiBub29wKCkge1xuXHRcdFx0XHRcdC8qKi9cblx0XHRcdFx0fVxuXHRcdFx0KSgpO1xuXHRcdH0pO1xuXHR9XG59XG5mdW5jdGlvbiBfZ2V0UGF0aChvQWN0aW9uQ29udGV4dDogYW55LCBzQWN0aW9uTmFtZTogYW55KSB7XG5cdGxldCBzUGF0aCA9IG9BY3Rpb25Db250ZXh0LmdldFBhdGgoKTtcblx0c1BhdGggPSBvQWN0aW9uQ29udGV4dC5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKSA/IHNQYXRoLnNwbGl0KFwiQCR1aTUub3ZlcmxvYWRcIilbMF0gOiBzUGF0aC5zcGxpdChcIi8wXCIpWzBdO1xuXHRyZXR1cm4gc1BhdGguc3BsaXQoYC8ke3NBY3Rpb25OYW1lfWApWzBdO1xufVxuXG5mdW5jdGlvbiBfdmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzKFxuXHRpc0NyZWF0ZUFjdGlvbjogYm9vbGVhbixcblx0YWN0aW9uUGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgYW55PltdLFxuXHRwYXJhbWV0ZXJWYWx1ZXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+W10sXG5cdHN0YXJ0dXBQYXJhbWV0ZXJzPzogYW55XG4pOiBib29sZWFuIHtcblx0aWYgKHBhcmFtZXRlclZhbHVlcykge1xuXHRcdC8vIElmIHNob3dEaWFsb2cgaXMgZmFsc2UgYnV0IHRoZXJlIGFyZSBwYXJhbWV0ZXJzIGZyb20gdGhlIGludm9rZUFjdGlvbiBjYWxsLCB3ZSBuZWVkIHRvIGNoZWNrIHRoYXQgdmFsdWVzIGhhdmUgYmVlblxuXHRcdC8vIHByb3ZpZGVkIGZvciBhbGwgb2YgdGhlbVxuXHRcdGZvciAoY29uc3QgYWN0aW9uUGFyYW1ldGVyIG9mIGFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0YWN0aW9uUGFyYW1ldGVyLiROYW1lICE9PSBcIlJlc3VsdElzQWN0aXZlRW50aXR5XCIgJiZcblx0XHRcdFx0IXBhcmFtZXRlclZhbHVlcz8uZmluZCgoZWxlbWVudDogYW55KSA9PiBlbGVtZW50Lm5hbWUgPT09IGFjdGlvblBhcmFtZXRlci4kTmFtZSlcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBBdCBsZWFzdCBmb3Igb25lIHBhcmFtZXRlciBubyB2YWx1ZSBoYXMgYmVlbiBwcm92aWRlZCwgc28gd2UgY2FuJ3Qgc2tpcCB0aGUgZGlhbG9nXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSBpZiAoaXNDcmVhdGVBY3Rpb24gJiYgc3RhcnR1cFBhcmFtZXRlcnMpIHtcblx0XHQvLyBJZiBwYXJhbWV0ZXJzIGhhdmUgYmVlbiBwcm92aWRlZCBkdXJpbmcgYXBwbGljYXRpb24gbGF1bmNoLCB3ZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBzZXQgaXMgY29tcGxldGVcblx0XHQvLyBJZiBub3QsIHRoZSBwYXJhbWV0ZXIgZGlhbG9nIHN0aWxsIG5lZWRzIHRvIGJlIHNob3duLlxuXHRcdGZvciAoY29uc3QgYWN0aW9uUGFyYW1ldGVyIG9mIGFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdGlmICghc3RhcnR1cFBhcmFtZXRlcnNbYWN0aW9uUGFyYW1ldGVyLiROYW1lXSkge1xuXHRcdFx0XHQvLyBBdCBsZWFzdCBmb3Igb25lIHBhcmFtZXRlciBubyB2YWx1ZSBoYXMgYmVlbiBwcm92aWRlZCwgc28gd2UgY2FuJ3Qgc2tpcCB0aGUgZGlhbG9nXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGZuUmVxdWVzdFNpZGVFZmZlY3RzKG9BcHBDb21wb25lbnQ6IGFueSwgb1NpZGVFZmZlY3Q6IGFueSwgbVBhcmFtZXRlcnM6IGFueSwgc0dyb3VwSWQ6IGFueSwgYUxvY2FsUHJvbWlzZT86IGFueSkge1xuXHRjb25zdCBvU2lkZUVmZmVjdHNTZXJ2aWNlID0gb0FwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblx0bGV0IG9Mb2NhbFByb21pc2U7XG5cdC8vIHRyaWdnZXIgYWN0aW9ucyBmcm9tIHNpZGUgZWZmZWN0c1xuXHRpZiAob1NpZGVFZmZlY3QgJiYgb1NpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnMgJiYgb1NpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnMubGVuZ3RoKSB7XG5cdFx0b1NpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoc1RyaWdnZXJBY3Rpb246IGFueSkge1xuXHRcdFx0aWYgKHNUcmlnZ2VyQWN0aW9uKSB7XG5cdFx0XHRcdG9Mb2NhbFByb21pc2UgPSBvU2lkZUVmZmVjdHNTZXJ2aWNlLmV4ZWN1dGVBY3Rpb24oc1RyaWdnZXJBY3Rpb24sIG9TaWRlRWZmZWN0LmNvbnRleHQsIHNHcm91cElkKTtcblx0XHRcdFx0aWYgKGFMb2NhbFByb21pc2UpIHtcblx0XHRcdFx0XHRhTG9jYWxQcm9taXNlLnB1c2gob0xvY2FsUHJvbWlzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHQvLyByZXF1ZXN0IHNpZGUgZWZmZWN0cyBmb3IgdGhpcyBhY3Rpb25cblx0Ly8gYXMgd2UgbW92ZSB0aGUgbWVzc2FnZXMgcmVxdWVzdCB0byBQT1NUICRzZWxlY3Qgd2UgbmVlZCB0byBiZSBwcmVwYXJlZCBmb3IgYW4gZW1wdHkgYXJyYXlcblx0aWYgKG9TaWRlRWZmZWN0ICYmIG9TaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucyAmJiBvU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMubGVuZ3RoID4gMCkge1xuXHRcdG9Mb2NhbFByb21pc2UgPSBvU2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0cyhvU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMsIG9TaWRlRWZmZWN0LmNvbnRleHQsIHNHcm91cElkKTtcblx0XHRpZiAoYUxvY2FsUHJvbWlzZSkge1xuXHRcdFx0YUxvY2FsUHJvbWlzZS5wdXNoKG9Mb2NhbFByb21pc2UpO1xuXHRcdH1cblx0XHRvTG9jYWxQcm9taXNlXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmIChtUGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXAgJiYgbVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQoXG5cdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRcdEpTT04ucGFyc2UobVBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLnNlbGVjdGVkSXRlbXMsXG5cdFx0XHRcdFx0XHRcInRhYmxlXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXF1ZXN0aW5nIHNpZGUgZWZmZWN0c1wiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH1cbn1cblxuLyoqXG4gKiBTdGF0aWMgZnVuY3Rpb25zIHRvIGNhbGwgT0RhdGEgYWN0aW9ucyAoYm91bmQvaW1wb3J0KSBhbmQgZnVuY3Rpb25zIChib3VuZC9pbXBvcnQpXG4gKlxuICogQG5hbWVzcGFjZVxuICogQGFsaWFzIHNhcC5mZS5jb3JlLmFjdGlvbnMub3BlcmF0aW9uc1xuICogQHByaXZhdGVcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtb2R1bGUgaXMgb25seSBmb3IgZXhwZXJpbWVudGFsIHVzZSEgPGJyLz48Yj5UaGlzIGlzIG9ubHkgYSBQT0MgYW5kIG1heWJlIGRlbGV0ZWQ8L2I+XG4gKiBAc2luY2UgMS41Ni4wXG4gKi9cbmNvbnN0IG9wZXJhdGlvbnMgPSB7XG5cdGNhbGxCb3VuZEFjdGlvbjogY2FsbEJvdW5kQWN0aW9uLFxuXHRjYWxsQWN0aW9uSW1wb3J0OiBjYWxsQWN0aW9uSW1wb3J0LFxuXHRjYWxsQm91bmRGdW5jdGlvbjogY2FsbEJvdW5kRnVuY3Rpb24sXG5cdGNhbGxGdW5jdGlvbkltcG9ydDogY2FsbEZ1bmN0aW9uSW1wb3J0LFxuXHRleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzOiBleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzLFxuXHR2YWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnM6IF92YWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnMsXG5cdGdldEFjdGlvblBhcmFtZXRlckFjdGlvbk5hbWU6IF9nZXRBY3Rpb25QYXJhbWV0ZXJBY3Rpb25OYW1lLFxuXHRhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrOiBhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrLFxuXHRhZnRlckFjdGlvblJlc29sdXRpb246IGFmdGVyQWN0aW9uUmVzb2x1dGlvblxuXHQvLyBBY3Rpb25QYXJhbWV0ZXJJbmZvOiBBY3Rpb25QYXJhbWV0ZXJJbmZvLFxuXHQvLyAgX3ZhbGlkYXRlUHJvcGVydGllcywgX3ZhbGlkYXRlUHJvcGVydGllc1xufTtcblxuZXhwb3J0IGRl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
|
|
@@ -721,25 +721,19 @@ function showActionParameterDialog(
|
|
|
721
721
|
messageManager.removeMessages(relevantMessages);
|
|
722
722
|
};
|
|
723
723
|
|
|
724
|
-
const
|
|
724
|
+
const _validateProperties = async function (oResourceBundle: ResourceBundle) {
|
|
725
|
+
await Promise.allSettled(actionParameterInfos.map((actionParameterInfo) => actionParameterInfo.validationPromise));
|
|
725
726
|
const requiredParameterInfos = actionParameterInfos.filter((actionParameterInfo) => actionParameterInfo.field.getRequired());
|
|
726
|
-
|
|
727
|
-
const validationResults = await Promise.allSettled(
|
|
728
|
-
requiredParameterInfos.map((actionParameterInfo) => actionParameterInfo.validationPromise)
|
|
729
|
-
);
|
|
730
|
-
|
|
731
|
-
const validRequiredFields = validationResults
|
|
732
|
-
.map((validationResult, index) => ({
|
|
733
|
-
validationResult: validationResult,
|
|
734
|
-
index: index
|
|
735
|
-
}))
|
|
736
|
-
.filter((validationResult) => validationResult.validationResult.status === "fulfilled")
|
|
737
|
-
.map((validationResult) => requiredParameterInfos[validationResult.index]);
|
|
727
|
+
/* Hint: The boolean false is a valid value */
|
|
738
728
|
|
|
739
|
-
const emptyRequiredFields =
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
729
|
+
const emptyRequiredFields = requiredParameterInfos.filter((requiredParameterInfo) => {
|
|
730
|
+
if (requiredParameterInfo.isMultiValue) {
|
|
731
|
+
return requiredParameterInfo.value === undefined || !requiredParameterInfo.value.length;
|
|
732
|
+
} else {
|
|
733
|
+
const fieldValue = (requiredParameterInfo.field as Field).getValue();
|
|
734
|
+
return fieldValue === undefined || fieldValue === null || fieldValue === "";
|
|
735
|
+
}
|
|
736
|
+
});
|
|
743
737
|
|
|
744
738
|
// message contains label per field for historical reason (originally, it was shown in additional popup, now it's directly added to the field)
|
|
745
739
|
// if this was not the case (and hopefully, in future this might be subject to change), interface of _addMessageForActionParameter could be simplified to just pass emptyRequiredFields and a constant message here
|
|
@@ -752,10 +746,19 @@ function showActionParameterDialog(
|
|
|
752
746
|
}))
|
|
753
747
|
);
|
|
754
748
|
|
|
755
|
-
|
|
756
|
-
|
|
749
|
+
/* Check value state of all parameter */
|
|
750
|
+
const firstInvalidActionParameter = actionParameterInfos.find(
|
|
751
|
+
// unfortunately, _addMessageForActionParameter sets valueState only asynchroneously, thus checking emptyRequiredFields additionally
|
|
752
|
+
(actionParameterInfo) =>
|
|
753
|
+
actionParameterInfo.field.getValueState() === "Error" || emptyRequiredFields.includes(actionParameterInfo)
|
|
754
|
+
);
|
|
757
755
|
|
|
758
|
-
|
|
756
|
+
if (firstInvalidActionParameter) {
|
|
757
|
+
firstInvalidActionParameter.field.focus();
|
|
758
|
+
return false;
|
|
759
|
+
} else {
|
|
760
|
+
return true;
|
|
761
|
+
}
|
|
759
762
|
};
|
|
760
763
|
|
|
761
764
|
const oController = {
|
|
@@ -768,7 +771,6 @@ function showActionParameterDialog(
|
|
|
768
771
|
_removeMessagesForActionParamter(actionParameterInfo.parameter);
|
|
769
772
|
// adapt info. Promise is resolved to value or rejected with exception containing message
|
|
770
773
|
actionParameterInfo.validationPromise = oEvent.getParameter("promise") as Promise<string>;
|
|
771
|
-
|
|
772
774
|
try {
|
|
773
775
|
actionParameterInfo.value = await actionParameterInfo.validationPromise;
|
|
774
776
|
} catch (error) {
|
|
@@ -852,7 +854,7 @@ function showActionParameterDialog(
|
|
|
852
854
|
type: "Emphasized",
|
|
853
855
|
press: async function () {
|
|
854
856
|
try {
|
|
855
|
-
if (!(await
|
|
857
|
+
if (!(await _validateProperties(oResourceBundle))) {
|
|
856
858
|
return;
|
|
857
859
|
}
|
|
858
860
|
|
|
@@ -1253,10 +1255,24 @@ function showActionParameterDialog(
|
|
|
1253
1255
|
path: "/",
|
|
1254
1256
|
model: "paramsModel"
|
|
1255
1257
|
});
|
|
1258
|
+
|
|
1256
1259
|
// empty model to add elements dynamically depending on number of MVF fields defined on the dialog
|
|
1257
1260
|
const oMVFModel = new JSONModel({});
|
|
1258
1261
|
oDialog.setModel(oMVFModel, "mvfview");
|
|
1259
1262
|
|
|
1263
|
+
/* Event needed for removing messages of valid changed field */
|
|
1264
|
+
for (const actionParameterInfo of actionParameterInfos) {
|
|
1265
|
+
if (actionParameterInfo.isMultiValue) {
|
|
1266
|
+
actionParameterInfo?.field?.getBinding("items")?.attachChange(() => {
|
|
1267
|
+
_removeMessagesForActionParamter(actionParameterInfo.parameter);
|
|
1268
|
+
});
|
|
1269
|
+
} else {
|
|
1270
|
+
actionParameterInfo?.field?.getBinding("value")?.attachChange(() => {
|
|
1271
|
+
_removeMessagesForActionParamter(actionParameterInfo.parameter);
|
|
1272
|
+
});
|
|
1273
|
+
}
|
|
1274
|
+
}
|
|
1275
|
+
|
|
1260
1276
|
let sActionPath = `${sActionName}(...)`;
|
|
1261
1277
|
if (!aContexts.length) {
|
|
1262
1278
|
sActionPath = `/${sActionPath}`;
|
|
@@ -1815,6 +1831,8 @@ const operations = {
|
|
|
1815
1831
|
getActionParameterActionName: _getActionParameterActionName,
|
|
1816
1832
|
actionParameterShowMessageCallback: actionParameterShowMessageCallback,
|
|
1817
1833
|
afterActionResolution: afterActionResolution
|
|
1834
|
+
// ActionParameterInfo: ActionParameterInfo,
|
|
1835
|
+
// _validateProperties, _validateProperties
|
|
1818
1836
|
};
|
|
1819
1837
|
|
|
1820
1838
|
export default operations;
|
|
@@ -68,7 +68,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/formatters/FPMFormatter", "sap/fe/co
|
|
|
68
68
|
controls: [],
|
|
69
69
|
elements: [],
|
|
70
70
|
// eslint-disable-next-line no-template-curly-in-string
|
|
71
|
-
version: "1.108.
|
|
71
|
+
version: "1.108.14",
|
|
72
72
|
noLibraryCSS: true,
|
|
73
73
|
extensions: {
|
|
74
74
|
//Configuration used for rule loading of Support Assistant
|