@agilemotion/oui-react-js 2.0.20 → 2.0.21
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.
|
@@ -546,17 +546,19 @@ const Form = /*#__PURE__*/_react.default.memo(props => {
|
|
|
546
546
|
};
|
|
547
547
|
function doValidateParent(field, invalid) {
|
|
548
548
|
let updateErrors = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
|
549
|
-
if (
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
549
|
+
if (field) {
|
|
550
|
+
if (!_Utils.default.isNull(field === null || field === void 0 ? void 0 : field.parentId)) {
|
|
551
|
+
let isParentInvalid = invalid;
|
|
552
|
+
for (let i = 0; i < fields.length; i++) {
|
|
553
|
+
if (fields[i] !== field && fields[i].parentId === field.parentId) {
|
|
554
|
+
isParentInvalid = isParentInvalid || !(_Utils.default.isNull(fields[i].error) || fields[i].error.length === 0);
|
|
555
|
+
}
|
|
554
556
|
}
|
|
557
|
+
fieldParentErrors[field.parentId] = isParentInvalid;
|
|
558
|
+
}
|
|
559
|
+
if (updateErrors && !_Utils.default.isNull(containerErrorCallback.current) && _ApplicationManager.default.isFormMarkersEnabled()) {
|
|
560
|
+
containerErrorCallback.current(fieldParentErrors);
|
|
555
561
|
}
|
|
556
|
-
fieldParentErrors[field.parentId] = isParentInvalid;
|
|
557
|
-
}
|
|
558
|
-
if (updateErrors && !_Utils.default.isNull(containerErrorCallback.current) && _ApplicationManager.default.isFormMarkersEnabled()) {
|
|
559
|
-
containerErrorCallback.current(fieldParentErrors);
|
|
560
562
|
}
|
|
561
563
|
return fieldParentErrors;
|
|
562
564
|
}
|
|
@@ -716,4 +718,4 @@ const Form = /*#__PURE__*/_react.default.memo(props => {
|
|
|
716
718
|
}, !_Utils.default.isNull(props.config.id) ? render(props.config) : /*#__PURE__*/_react.default.createElement("div", null, "ERROR: A form must have an ID"));
|
|
717
719
|
});
|
|
718
720
|
var _default = exports.default = Form;
|
|
719
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9zdHlsZXMiLCJfVXRpbHMiLCJfU2VjdGlvbiIsIl9SZXN0U2VydmljZSIsIl9hc3luY011dGV4IiwiX09ic2VydmFibGUiLCJfQXBwbGljYXRpb25NYW5hZ2VyIiwiX1NlcnZpY2VDYWxsQWN0aW9uSGFuZGxlciIsIl9EeW5hbWljSlMiLCJfRXZlbnRUeXBlIiwiX0V2ZW50IiwiX2NsZWFyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwib3duS2V5cyIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsInVzZVN0eWxlcyIsIm1ha2VTdHlsZXMiLCJ0aGVtZSIsImNvbnRhaW5lciIsImRpc3BsYXkiLCJmbGV4V3JhcCIsIndpZHRoIiwidmVydGljYWxBbGlnbiIsInNlbGVjdCIsIm1hcmdpbiIsInNwYWNpbmciLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsInNlbGVjdEVtcHR5IiwibWFyZ2luVG9wIiwicm9vdCIsIkZvcm0iLCJSZWFjdCIsIm1lbW8iLCJwcm9wcyIsInZhbHVlcyIsInVzZVJlZiIsIlV0aWxzIiwiaXNOdWxsIiwibWFzdGVyVmFsdWVzIiwic2V0TWFzdGVyVmFsdWVzIiwidXNlU3RhdGUiLCJjb25maWciLCJzZXRDb25maWciLCJwYXJzZUNvbmZpZyIsInZpZXdJZCIsImJpbmRlciIsImZpZWxkcyIsImNvbnRhaW5lckVycm9yQ2FsbGJhY2siLCJzZWN0aW9uSGFuZGxlcyIsImZpZWxkUGFyZW50RXJyb3JzIiwidmlzaWJsZSIsInNldFZpc2libGUiLCJsb2FkaW5nUmVmIiwiZmllbGRWYWxpZGl0eSIsIk1hcCIsInNlY3Rpb25Db3VudGVyIiwiYXBpIiwiaWQiLCJkb1VwZGF0ZVZhbHVlIiwibmFtZSIsInVwZGF0ZVZhbHVlIiwiY2xlYXIiLCJkb0NsZWFyIiwic2V0VmFsdWUiLCJkb0hhbmRsZUNoYW5nZSIsImhhbmRsZVNlbGVjdEl0ZW1DaGFuZ2UiLCJvcHRpb25zIiwic2VsZWN0ZWRJZCIsImhhbmRsZUNoYW5nZSIsImdldFZhbHVlUGF0aCIsImFkZEZpZWxkIiwicmVmIiwicGFyZW50SWQiLCJiaW5kVmFsdWVUb0Zvcm0iLCJyZW1vdmVGaWVsZCIsInNldEZpZWxkVmFsaWRpdHkiLCJyZXN1bHQiLCJjdXJyZW50Iiwic2V0IiwiY2xlYXJGaWVsZFZhbGlkaXR5IiwiZGVsZXRlIiwidmFsaWRhdGVBbGwiLCJmaWVsZCIsImhhbmRsZSIsInBhdGgiLCJjdXJyZW50VmFsdWUiLCJ2YWx1ZU9iamVjdCIsInZhbHVlUHJvcGVydHkiLCJ2YWxpZGF0ZSIsImZpcnN0SW52YWxpZCIsInYiLCJnZXQiLCJ2YWxpZCIsImRvVmFsaWRhdGVQYXJlbnQiLCJzY3JvbGxUbyIsImFwcGxpY2F0aW9uTWFuYWdlciIsImlzRm9ybU1hcmtlcnNFbmFibGVkIiwibG9hZERhdGEiLCJhY3Rpb25Db25maWciLCJldmVudCIsImRhdGEiLCJiaW5kRGF0YSIsImRvQmluZERhdGEiLCJ2YWxpZGF0ZVBhcmVudCIsImludmFsaWQiLCJnZXRGaWVsZCIsImZpZWxkRGF0YUJpbmRpbmdzIiwiZmllbGROYW1lcyIsInNlY3Rpb25zIiwic2VjdGlvbiIsImoiLCJjb21wb25lbnRzIiwiY29tcG9uZW50IiwidHlwZSIsImdldEZpZWxkc0Zyb21UYWIiLCJrIiwiZGF0YUJpbmRpbmciLCJzZXRDb250YWluZXJFcnJvckhhbmRsZXIiLCJjYWxsYmFjayIsIm1vZGVsIiwicGFyc2VWYWx1ZXMiLCJ0cmFuc2Zvcm1EYXRhT2JqZWN0IiwiZm9ybVZhbGlkIiwidW5kZWZpbmVkIiwib25WYWxpZGl0eUNoYW5nZSIsIm1lc3NhZ2UiLCJwYXJzZVZhbHVlIiwic2V0RmllbGRFcnJvciIsImVycm9yIiwiZ2V0Q2hpbGRyZW4iLCJjaGlsZHJlbiIsIm1vcmVDaGlsZHJlbiIsInByb3BlcnRpZXMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwicHJvcGVydHkiLCJzZWN0aW9uSGFuZGxlIiwiY2hpbGQiLCJyZWZyZXNoIiwicGFyc2VkQ29uZmlnIiwiZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbiIsImNyZWF0ZVNlY3Rpb25IYW5kbGUiLCJ1cGRhdGVWaWV3VGl0bGUiLCJ2aWV3IiwiZ2V0VmlldyIsInRpdGxlIiwiaW5jbHVkZXMiLCJ1cGRhdGVBcHBCYXJUaXRsZSIsImhhbmRsZURhdGFBcnJpdmVkIiwiRXZlbnQiLCJldmVudE1hbmFnZXIiLCJmaXJlRXZlbnQiLCJFdmVudFR5cGUiLCJEQVRBX0FSUklWRUQiLCJwcm9jZXNzU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9ucyIsImV2ZW50Q29uZmlnIiwiY29tcG9uZW50Q29uZmlnIiwiZXZlbnREYXRhIiwic2VydmljZSIsImRhdGFTZXJ2aWNlIiwiY29tcG9uZW50VmFsdWUiLCJyZXNvbHZlUGFyYW1ldGVyQ29uZmlnVmFsdWUiLCJpbnZva2VScGMiLCJ0aGVuIiwiY29uc29sZSIsImNhdGNoIiwiZXJyb3JUeXBlIiwicHVibGlzaEVycm9yTWVzc2FnZSIsInNlcnZpY2VDYWxsQWN0aW9uSGFuZGxlciIsImV4ZWN1dGUiLCJwYXJhbWV0ZXIiLCJpc0V4cHJlc3Npb24iLCJmaWxsRXZlbnREYXRhVmFsdWUiLCJpc0V2ZW50RGF0YSIsInRvU3RyaW5nIiwic3RhcnRzV2l0aCIsImdldFByb3BlcnR5Q2hhaW5QYXRoIiwiYWRkU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9uIiwiZHluYW1pY0pTIiwiZXhlY3V0ZVNjcmlwdCIsImNvbmNhdCIsInZhbCIsIm1hcCIsInJlc29sdmVFeHByZXNzaW9uVmFsdWUiLCJ1c2VFZmZlY3QiLCJldmVudEhhbmRsaW5nQ29uZmlnIiwic3Vic2NyaXB0aW9ucyIsImF1dG9Mb2FkRGF0YSIsImdldENvbXBvbmVudEF0dHJpYnV0ZSIsInN1YnNjcmlwdGlvbiIsImV2ZW50VHlwZSIsIkNPTVBPTkVOVF9MT0FEIiwiYWN0aW9ucyIsImFjdGlvblR5cGUiLCJhZGRTdWJzY3JpcHRpb25zIiwiYWRkU3lzdGVtU3Vic2NyaXB0aW9ucyIsImhhbmRsZUxvYWRDb21wbGV0ZSIsImVuYWJsZUZvcm1NYXJrZXJzIiwiY2xlYXJDb21wb25lbnRFdmVudExpc3RlbmVycyIsInRhYiIsInRhYlBhZ2UiLCJ0YWJQYWdlcyIsImZpZWxkc2V0IiwiZm9ybVZhbHVlcyIsInRva2VucyIsInNwbGl0Iiwidm8iLCJ0b2tlbiIsInZhbHVlQ2hhbmdlSGFuZGxlciIsIm1vZGVsQ2hhbmdlSGFuZGxlciIsImtleSIsInBhcnNlZFZhbHVlcyIsIkpTT04iLCJwYXJzZSIsInN0cmluZ2lmeSIsIm9iamVjdFZhbHVlIiwiZGF0YUFycml2ZWRIYW5kbGVyIiwic3BsaWNlIiwidXBkYXRlRXJyb3JzIiwiaXNQYXJlbnRJbnZhbGlkIiwidmFsaWRhdGVGaWVsZCIsInZhbHMiLCJjdXJyZW50VmFsdWVzIiwiZ3JvdXBGaWVsZCIsInZhbGlkYXRpb25Hcm91cCIsImdldFZhbGlkYXRpb25Hcm91cCIsImdyb3VwRmllbGRJZCIsImdyaWRGaWVsZFBhdGgiLCJncm91cEZpZWxkVmFsIiwibG9nIiwiVkFMVUVfQ0hBTkdFIiwic2VsZWN0aW9uIiwic2VsZWN0ZWRWYWx1ZSIsInJlbmRlciIsImZvcm0iLCJjcmVhdGVFbGVtZW50Iiwia2V5SGFuZGxlciIsImRpc2FibGVkIiwiY2xhc3NOYW1lIiwic3R5bGUiLCJtZXJnZVN0eWxlcyIsInBhZGRpbmciLCJvdmVyZmxvdyIsIm1heEhlaWdodCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL0Zvcm0uanN4Il0sInNvdXJjZXNDb250ZW50IjpbIu+7v2ltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge21ha2VTdHlsZXN9IGZyb20gJ0BtdWkvc3R5bGVzJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi9VdGlscyc7XG5pbXBvcnQgU2VjdGlvbiBmcm9tICcuL1NlY3Rpb24nO1xuaW1wb3J0ICcuL0Zvcm0uY3NzJztcbmltcG9ydCB7aW52b2tlUnBjfSBmcm9tICcuLi8uLi9SZXN0U2VydmljZSc7XG5pbXBvcnQge011dGV4fSBmcm9tICdhc3luYy1tdXRleCc7XG5pbXBvcnQgZXZlbnRNYW5hZ2VyIGZyb20gJy4uLy4uL2V2ZW50L09ic2VydmFibGUnO1xuaW1wb3J0IGFwcGxpY2F0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9BcHBsaWNhdGlvbk1hbmFnZXInO1xuaW1wb3J0IHNlcnZpY2VDYWxsQWN0aW9uSGFuZGxlciBmcm9tICcuLi8uLi9ldmVudC9TZXJ2aWNlQ2FsbEFjdGlvbkhhbmRsZXInO1xuaW1wb3J0IGR5bmFtaWNKUyBmcm9tICcuLi8uLi9EeW5hbWljSlMnO1xuaW1wb3J0IEV2ZW50VHlwZSBmcm9tICcuLi8uLi9ldmVudC9FdmVudFR5cGUnO1xuaW1wb3J0IEV2ZW50IGZyb20gJy4uLy4uL2V2ZW50L0V2ZW50JztcbmltcG9ydCB7Y2xlYXJ9IGZyb20gXCJAdGVzdGluZy1saWJyYXJ5L3VzZXItZXZlbnQvZGlzdC9jbGVhclwiO1xuXG5jb25zdCB1c2VTdHlsZXMgPSBtYWtlU3R5bGVzKHRoZW1lID0+ICh7XG4gICAgY29udGFpbmVyOiB7XG4gICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgZmxleFdyYXA6ICd3cmFwJyxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgJyYgdHIgdGQnOiB7XG4gICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiAndG9wJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICBzZWxlY3Q6IHtcbiAgICAgICAgbWFyZ2luOiB0aGVtZS5zcGFjaW5nKDEpLFxuICAgICAgICBtaW5XaWR0aDogMTIwLFxuICAgICAgICBtaW5IZWlnaHQ6IDQ4XG4gICAgfSxcbiAgICBzZWxlY3RFbXB0eToge1xuICAgICAgICBtYXJnaW5Ub3A6IHRoZW1lLnNwYWNpbmcoMiksXG4gICAgfSxcbiAgICByb290OiB7fVxufSkpO1xuXG5jb25zdCBGb3JtID0gUmVhY3QubWVtbygocHJvcHMpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gUmVhY3QudXNlUmVmKCFVdGlscy5pc051bGwocHJvcHMudmFsdWVzKSA/IHByb3BzLnZhbHVlcyA6IHt9KTtcbiAgICAgICAgY29uc3QgW21hc3RlclZhbHVlcywgc2V0TWFzdGVyVmFsdWVzXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgICAgICBjb25zdCBbY29uZmlnLCBzZXRDb25maWddID0gUmVhY3QudXNlU3RhdGUoVXRpbHMucGFyc2VDb25maWcocHJvcHMuY29uZmlnLCBwcm9wcy52aWV3SWQpKTtcbiAgICAgICAgY29uc3QgW2JpbmRlcl0gPSBSZWFjdC51c2VTdGF0ZShVdGlscy5pc051bGwocHJvcHMuY29uZmlnLmJpbmRlcikgPyAnUExBSU5fT0JKRUNUJyA6IHByb3BzLmNvbmZpZy5iaW5kZXIpO1xuICAgICAgICBjb25zdCBbZmllbGRzXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgICAgICAgY29uc3QgY29udGFpbmVyRXJyb3JDYWxsYmFjayA9IFJlYWN0LnVzZVJlZigpO1xuICAgICAgICBjb25zdCBbc2VjdGlvbkhhbmRsZXNdID0gUmVhY3QudXNlU3RhdGUoe30pO1xuICAgICAgICBjb25zdCBbZmllbGRQYXJlbnRFcnJvcnNdID0gUmVhY3QudXNlU3RhdGUoe30pO1xuICAgICAgICBjb25zdCBbdmlzaWJsZSwgc2V0VmlzaWJsZV0gPSBSZWFjdC51c2VTdGF0ZSh0cnVlKTtcbiAgICAgICAgY29uc3QgbG9hZGluZ1JlZiA9IFJlYWN0LnVzZVJlZih0cnVlKTtcbiAgICAgICAgLy8gVmFsaWRpdHkgcmVnaXN0ZXI6IE1hcDxmaWVsZElkLCB7IHZhbGlkLCBtZXNzYWdlLCBmb3JjZU1hcmtlciB9Pi5cbiAgICAgICAgLy8gU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgXCJpcyB0aGlzIGZpZWxkIHZhbGlkP1wiLiBCYXNlRmllbGQgd3JpdGVzXG4gICAgICAgIC8vIGhlcmUgZnJvbSBkb1ZhbGlkYXRpb247IGZvcm0udmFsdWUgcmVhZHMgaGVyZSB3aXRob3V0IGludm9raW5nIGFueVxuICAgICAgICAvLyBmaWVsZCBtZXRob2RzIChraWxscyB0aGUgYmktZGlyZWN0aW9uYWwgcmVuZGVyLXRpbWUgY2hhaW4gdGhhdFxuICAgICAgICAvLyBwcm9kdWNlZCBSZWFjdCAjMTg1KS5cbiAgICAgICAgY29uc3QgZmllbGRWYWxpZGl0eSA9IFJlYWN0LnVzZVJlZihuZXcgTWFwKCkpO1xuICAgICAgICBsZXQgc2VjdGlvbkNvdW50ZXIgPSAwO1xuXG4gICAgICAgIGNvbnN0IGFwaSA9ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZ2V0IGlkKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMuY29uZmlnLmlkO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZG9VcGRhdGVWYWx1ZTogKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjbGVhcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb0NsZWFyKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRWYWx1ZTogKGlkLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb0hhbmRsZUNoYW5nZShpZCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0SXRlbUNoYW5nZTogKG5hbWUsIG9wdGlvbnMsIHNlbGVjdGVkSWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVNlbGVjdEl0ZW1DaGFuZ2UobmFtZSwgb3B0aW9ucywgc2VsZWN0ZWRJZCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoYW5kbGVDaGFuZ2U6IChpZCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9IYW5kbGVDaGFuZ2UoaWQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGdldFZhbHVlUGF0aDogKGlkLCB2YWx1ZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFZhbHVlUGF0aChpZCwgdmFsdWVzKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFkZEZpZWxkOiAoaWQsIHJlZiwgcGFyZW50SWQsIGJpbmRWYWx1ZVRvRm9ybSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkRmllbGQoaWQsIHJlZiwgcGFyZW50SWQsIGJpbmRWYWx1ZVRvRm9ybSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZW1vdmVGaWVsZDogKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUZpZWxkKGlkKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldEZpZWxkVmFsaWRpdHk6IChpZCwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkVmFsaWRpdHkuY3VycmVudC5zZXQoaWQsIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjbGVhckZpZWxkVmFsaWRpdHk6IChpZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZFZhbGlkaXR5LmN1cnJlbnQuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHZhbGlkYXRlQWxsOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4cGxpY2l0IFwiZm9yY2UtdmFsaWRhdGUgZXZlcnkgZmllbGRcIiBjb21tYW5kLiBSZXBsYWNlcyB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gb2xkIGhhY2sgb2YgcmVhZGluZyBmb3JtLnZhbHVlIHB1cmVseSBmb3IgaXRzIHNpZGUgZWZmZWN0cy5cbiAgICAgICAgICAgICAgICAgICAgLy8gRmllbGRzIHdyaXRlIGludG8gZmllbGRWYWxpZGl0eSB2aWEgZG9WYWxpZGF0aW9uIGFzIGEgc2lkZVxuICAgICAgICAgICAgICAgICAgICAvLyBlZmZlY3Qgb2YgdmFsaWRhdGU7IHdlIHRoZW4gd2FsayB0aGUgcmVnaXN0ZXIgZm9yIGludmFsaWRcbiAgICAgICAgICAgICAgICAgICAgLy8gZmllbGRzIHRvIGRyaXZlIFVYIChzY3JvbGxUbyBmaXJzdCwgcmVmcmVzaCBjb250YWluZXIgZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgLy8gY2FsbGJhY2spIOKAlCBzYW1lIFVYIHRoZSBnZXR0ZXIgdXNlZCB0byBwcm92aWRlLCBub3cgb3B0LWluLlxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmllbGQuaGFuZGxlKSAmJiAhVXRpbHMuaXNOdWxsKGZpZWxkLmhhbmRsZS5hcGkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFzcyB0aGUgYWN0dWFsIGN1cnJlbnQgdmFsdWUgc28gZG9WYWxpZGF0aW9uJ3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoY3VycmVudFZhbHVlLCByZXF1aXJlZCwgbWFya2VycykgY2FjaGUga2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVmbGVjdHMgcmVhbGl0eS4gV2l0aG91dCB0aGlzIHdlIHdlcmUgcGFzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG51bGwsIHdoaWNoIG1hZGUgY2FjaGUgaGl0cyBvcGFxdWUgaW4gbG9ncyBhbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3JjZWQgVXRpbHMudmFsaWRhdGVGaWVsZCB0byBmYWxsIGJhY2sgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZXNbaWRdIGV2ZXJ5IHRpbWUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IGdldFZhbHVlUGF0aChmaWVsZC5pZCwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gIVV0aWxzLmlzTnVsbChwYXRoKSAmJiAhVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcGF0aC52YWx1ZU9iamVjdFtwYXRoLnZhbHVlUHJvcGVydHldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5oYW5kbGUuYXBpLnZhbGlkYXRlKHZhbHVlcy5jdXJyZW50LCBjdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxldCBmaXJzdEludmFsaWQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmJpbmRWYWx1ZVRvRm9ybSA9PT0gZmFsc2UpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdiA9IGZpZWxkVmFsaWRpdHkuY3VycmVudC5nZXQoZmllbGQuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgJiYgdi52YWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1ZhbGlkYXRlUGFyZW50KGZpZWxkLCB0cnVlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0SW52YWxpZCA9PT0gbnVsbCkgZmlyc3RJbnZhbGlkID0gZmllbGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmlyc3RJbnZhbGlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgIVV0aWxzLmlzTnVsbChmaXJzdEludmFsaWQuaGFuZGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgIVV0aWxzLmlzTnVsbChmaXJzdEludmFsaWQuaGFuZGxlLmFwaSlcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHR5cGVvZiBmaXJzdEludmFsaWQuaGFuZGxlLmFwaS5zY3JvbGxUbyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RJbnZhbGlkLmhhbmRsZS5hcGkuc2Nyb2xsVG8oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChjb250YWluZXJFcnJvckNhbGxiYWNrLmN1cnJlbnQpICYmIGFwcGxpY2F0aW9uTWFuYWdlci5pc0Zvcm1NYXJrZXJzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJFcnJvckNhbGxiYWNrLmN1cnJlbnQoZmllbGRQYXJlbnRFcnJvcnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBsb2FkRGF0YTogKGFjdGlvbkNvbmZpZywgZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbG9hZERhdGEoYWN0aW9uQ29uZmlnLCBjb25maWcsIGV2ZW50ID8gZXZlbnQuZGF0YSA6IG51bGwpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYmluZERhdGE6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvQmluZERhdGEoZGF0YSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZVBhcmVudDogKGlkLCBpbnZhbGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvVmFsaWRhdGVQYXJlbnQoZ2V0RmllbGQoaWQpLCBpbnZhbGlkKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGdldCBmaWVsZERhdGFCaW5kaW5ncygpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkTmFtZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5jb25maWcuc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWN0aW9uID0gcHJvcHMuY29uZmlnLnNlY3Rpb25zW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzZWN0aW9uLmNvbXBvbmVudHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29tcG9uZW50ID0gc2VjdGlvbi5jb21wb25lbnRzW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZHMgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudC50eXBlID09PSAndGFiJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHMgPSBnZXRGaWVsZHNGcm9tVGFiKGNvbXBvbmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzID0gY29tcG9uZW50LmZpZWxkcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGZpZWxkcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBmaWVsZHNba107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZXMucHVzaCghVXRpbHMuaXNOdWxsKGZpZWxkLmRhdGFCaW5kaW5nKSA/IGZpZWxkLmRhdGFCaW5kaW5nIDogZmllbGQuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZE5hbWVzO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0Q29udGFpbmVyRXJyb3JIYW5kbGVyKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckVycm9yQ2FsbGJhY2suY3VycmVudCA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZ2V0IG1vZGVsKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXQgbW9kZWwobW9kZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChtb2RlbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVmFsdWVzKHt9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyh7fSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVZhbHVlcyh0cmFuc2Zvcm1EYXRhT2JqZWN0KG1vZGVsKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXN0ZXJWYWx1ZXMobW9kZWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlYWQgcmV0dXJucyB2YWx1ZXMuY3VycmVudCBpZmYgZXZlcnkgYm91bmQgZmllbGQnc1xuICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciBlbnRyeSBpcyB2YWxpZC4gU2lkZSBlZmZlY3Q6IGludm9rZXMgZWFjaFxuICAgICAgICAgICAgICAgICAgICAvLyBmaWVsZCdzIGNhY2hlZCBvblZhbGlkaXR5Q2hhbmdlIHRvIHJlZnJlc2ggbWFya2VyIFVJXG4gICAgICAgICAgICAgICAgICAgIC8vIGZyb20gcmVnaXN0ZXIgc3RhdGUg4oCUIG5vIHJlLXZhbGlkYXRpb24sIG5vIHNldEZpZWxkVmFsaWRpdHlcbiAgICAgICAgICAgICAgICAgICAgLy8gd3JpdGVzLiBTeW1tZXRyaWMgKGZpcmVzIGZvciB2YWxpZCArIGludmFsaWQpIHNvIGEgZmllbGRcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hvc2UgVUkgZ290IG91dCBvZiBzeW5jIHdpdGggdGhlIHJlZ2lzdGVyIChzdGFsZSBoYXNFcnJvclxuICAgICAgICAgICAgICAgICAgICAvLyBmcm9tIHNvbWUgbm9uLWRvSGFuZGxlQ2hhbmdlIHBhdGgpIGlzIHJlcGFpbnRlZCB0byBtYXRjaC5cbiAgICAgICAgICAgICAgICAgICAgLy8gc2V0U3RhdGVzIGFyZSBpZGVtcG90ZW50IChSZWFjdCBiYWlscyBvbiBzYW1lIHZhbHVlKSwgc29cbiAgICAgICAgICAgICAgICAgICAgLy8gcmVwZWF0ZWQgZm9ybS52YWx1ZSByZWFkcyBjb3N0IHplcm8gcmUtcmVuZGVycyBhZnRlciB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gZmlyc3QgcGFpbnQuIFRoZSBtYXJrZXJzIGdhdGUgaW5zaWRlIHRoZSBjYWxsYmFjayBlbnN1cmVzXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlZnJlc2hlcyBvbmx5IHBhaW50IHdoZW4gZ2xvYmFsIG1hcmtlcnMgYXJlIGVuYWJsZWQuXG4gICAgICAgICAgICAgICAgICAgIGxldCBmb3JtVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAobG9hZGluZ1JlZi5jdXJyZW50ID09PSBmYWxzZSAmJiB2YWx1ZXMuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuYmluZFZhbHVlVG9Gb3JtID09PSBmYWxzZSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdiA9IGZpZWxkVmFsaWRpdHkuY3VycmVudC5nZXQoZmllbGQuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1WYWxpZCA9IGZvcm1WYWxpZCAmJiAodiA9PT0gdW5kZWZpbmVkIHx8IHYudmFsaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ICYmIHR5cGVvZiB2Lm9uVmFsaWRpdHlDaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi5vblZhbGlkaXR5Q2hhbmdlKHYudmFsaWQsIHYubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE91dGJvdW5kLW5vcm1hbGl6ZSB0aGUgc3RvcmVkIHZhbHVlIHNvIG5vbi1zdHJpbmcgZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0eXBlcyAoRGF0ZSBmb3IgRGF0ZVBpY2tlciwgbG9va3VwIG9iamVjdHMsIGV0Yy4pIHNlcmlhbGl6ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHdpcmUgZm9ybWF0IG9uIEpTT04uc3RyaW5naWZ5LiBSZXN0b3JlcyB0aGUgYmVoYXZpb3IgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2xkIGdldHRlciBwcm92aWRlZCB2aWEgcGFyc2VWYWx1ZShfLCBmYWxzZSkuIElkZW1wb3RlbnQgZm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHlwZWQgdmFsdWVQYXJzZXJzIOKAlCByZXBlYXQgcmVhZHMgc2VlIHRoZSBhbHJlYWR5LW5vcm1hbGl6ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZSBhbmQgcmUtZW1pdCB0aGUgc2FtZSBzdHJpbmcuIHBhcnNlVmFsdWUgaXMgYSBwdXJlIEpTXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNmb3JtIHdpdGggbm8gUmVhY3Qgc3RhdGUgc2lkZSBlZmZlY3RzLCBzbyB1bmxpa2UgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFsaWRhdGUgY2FsbCB3ZSByZW1vdmVkIGluIHNlcT00NCwgdGhpcyBjYW4ndCBkcml2ZSBhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmUtcmVuZGVyIGxvb3AuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmllbGQuaGFuZGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhVXRpbHMuaXNOdWxsKGZpZWxkLmhhbmRsZS5hcGkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHR5cGVvZiBmaWVsZC5oYW5kbGUuYXBpLnBhcnNlVmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IGdldFZhbHVlUGF0aChmaWVsZC5pZCwgdmFsdWVzLmN1cnJlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXRoKSAmJiAhVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlT2JqZWN0W3BhdGgudmFsdWVQcm9wZXJ0eV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmhhbmRsZS5hcGkucGFyc2VWYWx1ZShwYXRoLnZhbHVlT2JqZWN0W3BhdGgudmFsdWVQcm9wZXJ0eV0sIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3JtVmFsaWQgPyB2YWx1ZXMuY3VycmVudCA6IG51bGw7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRGaWVsZEVycm9yOiAoaWQsIGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRGaWVsZEVycm9yKGlkLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXRDaGlsZHJlbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGZpZWxkc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goZmllbGQuaGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtb3JlQ2hpbGRyZW4gPSBmaWVsZC5oYW5kbGUuYXBpLmdldENoaWxkcmVuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1vcmVDaGlsZHJlbi5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2gobW9yZUNoaWxkcmVuW2pdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc2VjdGlvbkhhbmRsZXMpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWN0aW9uSGFuZGxlID0gc2VjdGlvbkhhbmRsZXNbcHJvcGVydHldO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChzZWN0aW9uSGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygc2VjdGlvbkhhbmRsZS5hcGkuZ2V0Q2hpbGRyZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVmcmVzaCgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BlcnRpZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzZWN0aW9uSGFuZGxlcyk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNlY3Rpb25IYW5kbGUgPSBzZWN0aW9uSGFuZGxlc1twcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbkhhbmRsZS5hcGkucmVmcmVzaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25IYW5kbGUuYXBpLnJlZnJlc2goKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJzZWRDb25maWcgPSBVdGlscy5wYXJzZUNvbmZpZyhwcm9wcy5jb25maWcsIHByb3BzLnZpZXdJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhcnNlZENvbmZpZy52aXNpYmxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmlzaWJsZShVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHBhcnNlZENvbmZpZy52aXNpYmxlLCBwYXJzZWRDb25maWcuaWQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgY3JlYXRlU2VjdGlvbkhhbmRsZSA9IChzZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHNlY3Rpb25IYW5kbGVzW3NlY3Rpb24uaWRdKSkge1xuICAgICAgICAgICAgICAgIGxldCBoYW5kbGUgPSB7fTtcbiAgICAgICAgICAgICAgICBzZWN0aW9uSGFuZGxlc1tzZWN0aW9uLmlkXSA9IGhhbmRsZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc2VjdGlvbkhhbmRsZXNbc2VjdGlvbi5pZF07XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlVmlld1RpdGxlKCkge1xuICAgICAgICAgICAgaWYgKHByb3BzLnZpZXdJZCkge1xuICAgICAgICAgICAgICAgIGxldCB2aWV3ID0gYXBwbGljYXRpb25NYW5hZ2VyLmdldFZpZXcocHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgICAgICBpZiAodmlldykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSB2aWV3LmNvbmZpZy50aXRsZTtcblxuICAgICAgICAgICAgICAgICAgICBpZih0aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpdGxlLmluY2x1ZGVzKHByb3BzLmNvbmZpZy5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIudXBkYXRlQXBwQmFyVGl0bGUodmlldy5jb25maWcuaWQsIHRpdGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZURhdGFBcnJpdmVkKGRhdGEpIHtcbiAgICAgICAgICAgIHVwZGF0ZVZpZXdUaXRsZSgpO1xuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChkYXRhKSkge1xuICAgICAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChwcm9wcy5oYW5kbGUsIHByb3BzLnZpZXdJZCwgZGF0YSk7XG4gICAgICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuREFUQV9BUlJJVkVELCBldmVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5wcm9jZXNzU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9ucyhwcm9wcy5jb25maWcuaWQpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIucHJvY2Vzc1N5c3RlbUdlbmVyYXRlZFN1YnNjcmlwdGlvbnMoZmllbGQuaGFuZGxlLmFwaS5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBsb2FkRGF0YShldmVudENvbmZpZywgY29tcG9uZW50Q29uZmlnLCBldmVudERhdGEgPSBudWxsKSB7XG4gICAgICAgICAgICBsZXQgc2VydmljZSA9ICFVdGlscy5pc051bGwoY29tcG9uZW50Q29uZmlnLmRhdGFTZXJ2aWNlKSA/IGNvbXBvbmVudENvbmZpZy5kYXRhU2VydmljZSA6XG4gICAgICAgICAgICAgICAgZXZlbnRDb25maWcgIT09IG51bGwgPyBldmVudENvbmZpZy5kYXRhU2VydmljZSA6IG51bGw7XG4gICAgICAgICAgICBsZXQgY29tcG9uZW50VmFsdWUgPSAhVXRpbHMuaXNOdWxsKGNvbXBvbmVudENvbmZpZy52YWx1ZSkgPyBhcHBsaWNhdGlvbk1hbmFnZXIucmVzb2x2ZVBhcmFtZXRlckNvbmZpZ1ZhbHVlKGNvbXBvbmVudENvbmZpZy52YWx1ZSwgZXZlbnREYXRhKSA6XG4gICAgICAgICAgICAgICAgIVV0aWxzLmlzTnVsbChldmVudENvbmZpZykgPyBhcHBsaWNhdGlvbk1hbmFnZXIucmVzb2x2ZVBhcmFtZXRlckNvbmZpZ1ZhbHVlKGV2ZW50Q29uZmlnLnZhbHVlLCBldmVudERhdGEpIDogbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoc2VydmljZSkpIHtcbiAgICAgICAgICAgICAgICBkb0NsZWFyKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlcnZpY2UudHlwZSA9PT0gJ3JwYycpIHtcbiAgICAgICAgICAgICAgICAgICAgaW52b2tlUnBjKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2U6IHNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHByb3BzLmhhbmRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJZDogcHJvcHMudmlld0lkXG4gICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChyZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVmFsdWVzKHRyYW5zZm9ybURhdGFPYmplY3QocmVzdWx0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyhyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSAmJiBlLmVycm9yVHlwZSA9PT0gJ0lOVkFMSURfUEFSQU1FVEVSJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZURhdGFBcnJpdmVkKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnB1Ymxpc2hFcnJvck1lc3NhZ2UoZSwgcHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKGV2ZW50Q29uZmlnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRDb25maWcgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50Q29uZmlnLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPIDogSW1wbGVtZW50IHRoZSBpbnZhbGlkIHBhcmFtZW50ZXIgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZUNhbGxBY3Rpb25IYW5kbGVyLmV4ZWN1dGUoZXZlbnRDb25maWcsIG51bGwsIG51bGwsIHByb3BzLnZpZXdJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXModHJhbnNmb3JtRGF0YU9iamVjdChkYXRhKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyhkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIChwYXJhbWV0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVEYXRhQXJyaXZlZChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChjb21wb25lbnRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhcHBsaWNhdGlvbk1hbmFnZXIuaXNFeHByZXNzaW9uKGNvbXBvbmVudFZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50VmFsdWUgPSBhcHBsaWNhdGlvbk1hbmFnZXIuZmlsbEV2ZW50RGF0YVZhbHVlKGNvbXBvbmVudFZhbHVlLCBldmVudERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGlzRXZlbnREYXRhID0gY29tcG9uZW50VmFsdWUudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXJ0c1dpdGgoJyRldmVudC5kYXRhJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcHBsaWNhdGlvbk1hbmFnZXIuaXNFeHByZXNzaW9uKGNvbXBvbmVudFZhbHVlKSAmJiAhaXNFdmVudERhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgoY29tcG9uZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGF0aC52YWx1ZU9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIuYWRkU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9uKHByb3BzLnZpZXdJZCwgcHJvcHMudmlld0lkLCBwcm9wcy5jb25maWcuaWQsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZHluYW1pY0pTLmV4ZWN1dGVTY3JpcHQoYCR7cHJvcHMuY29uZmlnLmlkfVZhbHVlRXZhbHVhdG9yYCwgY29tcG9uZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWwgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaW5kZXIgPT09ICdNQVBfT0JKRUNUJyAmJiBVdGlscy5pc051bGwodmFsdWUubWFwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbC5tYXAgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXModHJhbnNmb3JtRGF0YU9iamVjdCh2YWwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyh2YWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsID0gaXNFdmVudERhdGEgPyBhcHBsaWNhdGlvbk1hbmFnZXIucmVzb2x2ZUV4cHJlc3Npb25WYWx1ZShjb21wb25lbnRWYWx1ZSwgZXZlbnREYXRhKSA6IGNvbXBvbmVudFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpbmRlciA9PT0gJ01BUF9PQkpFQ1QnICYmIFV0aWxzLmlzTnVsbChjb21wb25lbnRWYWx1ZS5tYXApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsLm1hcCA9IGNvbXBvbmVudFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVZhbHVlcyh0cmFuc2Zvcm1EYXRhT2JqZWN0KHZhbCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWFzdGVyVmFsdWVzKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVWaWV3VGl0bGUoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBwcm9wcy5oYW5kbGUuYXBpID0gbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgcHJvcHMuaGFuZGxlLmFwaSA9IGFwaSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgcHJvcHMuaGFuZGxlLmFwaSA9IGFwaSgpO1xuICAgICAgICAgICAgbGV0IGV2ZW50SGFuZGxpbmdDb25maWcgPSBVdGlscy5pc051bGwoY29uZmlnLmV2ZW50SGFuZGxpbmdDb25maWcpID8ge30gOiBjb25maWcuZXZlbnRIYW5kbGluZ0NvbmZpZztcbiAgICAgICAgICAgIGV2ZW50SGFuZGxpbmdDb25maWcuc3Vic2NyaXB0aW9ucyA9IFV0aWxzLmlzTnVsbChldmVudEhhbmRsaW5nQ29uZmlnLnN1YnNjcmlwdGlvbnMpID8gW10gOiBldmVudEhhbmRsaW5nQ29uZmlnLnN1YnNjcmlwdGlvbnM7XG5cbiAgICAgICAgICAgIGxldCBhdXRvTG9hZERhdGEgPSBVdGlscy5nZXRDb21wb25lbnRBdHRyaWJ1dGUoY29uZmlnLCAnYXV0b0xvYWREYXRhJywgbnVsbCk7XG4gICAgICAgICAgICBpZiAoYXV0b0xvYWREYXRhID09PSBudWxsIHx8IGF1dG9Mb2FkRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGxldCBzdWJzY3JpcHRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogRXZlbnRUeXBlLkNPTVBPTkVOVF9MT0FELFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZTogJ2xvYWREYXRhJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxpbmdDb25maWcuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGhhbmRsZURhdGFBcnJpdmVkKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5hZGRTdWJzY3JpcHRpb25zKGV2ZW50SGFuZGxpbmdDb25maWcsIHByb3BzLmhhbmRsZSwgcHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5hZGRTeXN0ZW1TdWJzY3JpcHRpb25zKHByb3BzLnZpZXdJZCwgY29uZmlnKTtcbiAgICAgICAgICAgIHNldENvbmZpZyhjb25maWcpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICAgICAgICAgIGxldCBoYW5kbGUgPSBmaWVsZC5oYW5kbGU7XG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoaGFuZGxlKSkge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGUuYXBpLmhhbmRsZUxvYWRDb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbG9hZGluZ1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgZXZlbnQgPSBuZXcgRXZlbnQocHJvcHMuaGFuZGxlLCBwcm9wcy52aWV3SWQsIG51bGwpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuQ09NUE9ORU5UX0xPQUQsIGV2ZW50KTtcblxuICAgICAgICAgICAgLy8gSW5pdGlhbCBsb2FkIGNvbXBsZXRlLiBFbmFibGUgbWFya2VycyBnbG9iYWxseSBzbyBhbGwgc3Vic2VxdWVudFxuICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmbG93cyAoc2F2ZSBjbGljaywgdmFsdWUgY2hhbmdlcywgYnV0dG9uLWRyaXZlblxuICAgICAgICAgICAgLy8gdmFsaWRhdGVBbGwpIHN1cmZhY2UgZXJyb3IgVUkuIEJhc2VGaWVsZCBzZWxmLXZhbGlkYXRpb24gZHVyaW5nXG4gICAgICAgICAgICAvLyBpbml0aWFsIGxvYWQgbG9jYWxseSBzdXBwcmVzc2VzIG1hcmtlcnMgaW4gaXRzIG93biB0cnkvZmluYWxseSxcbiAgICAgICAgICAgIC8vIHNvIHRoaXMgcmUtZW5hYmxlIGRvZXNuJ3QgY2F1c2UgYSBsb2FkLXRpbWUgZmxhc2ggZm9yIGZpZWxkc1xuICAgICAgICAgICAgLy8gdGhhdCBtb3VudCBkdXJpbmcgdGhpcyBzYW1lIGVmZmVjdCBjeWNsZS4gQXN5bmMgZGF0YSBhcnJpdmluZ1xuICAgICAgICAgICAgLy8gbGF0ZXIgd2lsbCByZS12YWxpZGF0ZSB2aWEgQmFzZUZpZWxkJ3MgW3Byb3BzLnZhbHVlcywgY29uZmlnXVxuICAgICAgICAgICAgLy8gdXNlRWZmZWN0LCB3aGljaCBhbHNvIGxvY2FsbHkgc3VwcHJlc3NlcyBtYXJrZXJzLlxuICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLmVuYWJsZUZvcm1NYXJrZXJzKHRydWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50TWFuYWdlci5jbGVhckNvbXBvbmVudEV2ZW50TGlzdGVuZXJzKHByb3BzLmhhbmRsZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZykgJiYgIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXMocHJvcHMudmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgW3Byb3BzLmNvbmZpZywgcHJvcHMudmFsdWVzXSk7XG5cbiAgICAgICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKG1hc3RlclZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVEYXRhQXJyaXZlZChtYXN0ZXJWYWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBbbWFzdGVyVmFsdWVzXSk7XG5cbiAgICAgICAgY29uc3QgZ2V0RmllbGRzRnJvbVRhYiA9ICh0YWIpID0+IHtcbiAgICAgICAgICAgIGxldCBmaWVsZHMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdGFiUGFnZSBvZiB0YWIudGFiUGFnZXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0YWJQYWdlLmNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudC50eXBlID09PSAnZm9ybVNlY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkc2V0IG9mIGNvbXBvbmVudC5jb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzID0gZmllbGRzLmNvbmNhdChmaWVsZHNldC5maWVsZHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybURhdGFPYmplY3QgPSAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgbGV0IGZvcm1WYWx1ZXMgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoYmluZGVyID09PSAnTUFQX09CSkVDVCcpIHtcbiAgICAgICAgICAgICAgICBmb3JtVmFsdWVzID0ge307XG5cbiAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBtYXAgPSBkYXRhLm1hcDtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChtYXApKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobWFwKTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdG9rZW5zID0gcHJvcGVydHkuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2byA9IGZvcm1WYWx1ZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdG9rZW5zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRva2VuID0gdG9rZW5zW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqIDwgdG9rZW5zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbCh2b1t0b2tlbl0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b1t0b2tlbl0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvID0gdm9bdG9rZW5dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvW3Rva2VuXSA9IG1hcFtwcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3JtVmFsdWVzID0gZGF0YTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZvcm1WYWx1ZXM7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gZG9DbGVhcigpIHtcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5lbmFibGVGb3JtTWFya2VycyhmYWxzZSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGZpZWxkc1tpXTtcbiAgICAgICAgICAgICAgICBmaWVsZC5oYW5kbGUuYXBpLmNsZWFyKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhbHVlcy5jdXJyZW50ID0ge307XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKHt9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMubW9kZWxDaGFuZ2VIYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgIHByb3BzLm1vZGVsQ2hhbmdlSGFuZGxlcih7fSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5lbmFibGVGb3JtTWFya2Vycyh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGRvQmluZERhdGEoZGF0YSkge1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBnZXRGaWVsZChrZXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmhhbmRsZS5hcGkudmFsdWUgPSBmaWVsZC5oYW5kbGUuYXBpLnBhcnNlVmFsdWUoZGF0YVtrZXldLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVmFsdWVzKGRhdGEpIHtcbiAgICAgICAgICAgIGxldCBwYXJzZWRWYWx1ZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZpZWxkID0gZmllbGRzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwYXRoID0gZ2V0VmFsdWVQYXRoKGZpZWxkLmlkLCBwYXJzZWRWYWx1ZXMpO1xuICAgICAgICAgICAgICAgIGxldCBvYmplY3RWYWx1ZSA9IHBhdGgudmFsdWVPYmplY3RbcGF0aC52YWx1ZVByb3BlcnR5XTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWVsZC5oYW5kbGUuYXBpKSkge1xuICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlT2JqZWN0W3BhdGgudmFsdWVQcm9wZXJ0eV0gPSBmaWVsZC5oYW5kbGUuYXBpLnBhcnNlVmFsdWUob2JqZWN0VmFsdWUsIHRydWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ05VTEwgZmllbGQgcmVmZXJlbmNlIHdoaWxlIHBhcnNpbmcgZm9ybSB2YWx1ZSAtICcgKyBmaWVsZC5pZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YWx1ZXMuY3VycmVudCA9IHBhcnNlZFZhbHVlcztcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLmRhdGFBcnJpdmVkSGFuZGxlcikpIHtcbiAgICAgICAgICAgICAgICBwcm9wcy5kYXRhQXJyaXZlZEhhbmRsZXIocGFyc2VkVmFsdWVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9pZiAoIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgICAgLy9wcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIocGFyc2VkVmFsdWVzKTtcbiAgICAgICAgICAgIC8vfVxuICAgICAgICB9XG5cbiAgICAgICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBwYXJzZVZhbHVlcyhwcm9wcy52YWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBbcHJvcHMudmFsdWVzXSk7XG5cbiAgICAgICAgY29uc3QgZ2V0RmllbGQgPSAoaWQpID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkc1tpXS5pZCA9PT0gaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlbW92ZUZpZWxkID0gKGlkKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbaV0uaWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGRWYWxpZGl0eS5jdXJyZW50LmRlbGV0ZShpZCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gZG9WYWxpZGF0ZVBhcmVudChmaWVsZCwgaW52YWxpZCwgdXBkYXRlRXJyb3JzID0gdHJ1ZSkge1xuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWVsZC5wYXJlbnRJZCkpIHtcbiAgICAgICAgICAgICAgICBsZXQgaXNQYXJlbnRJbnZhbGlkID0gaW52YWxpZDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRzW2ldICE9PSBmaWVsZCAmJiBmaWVsZHNbaV0ucGFyZW50SWQgPT09IGZpZWxkLnBhcmVudElkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc1BhcmVudEludmFsaWQgPSBpc1BhcmVudEludmFsaWQgfHwgIShVdGlscy5pc051bGwoZmllbGRzW2ldLmVycm9yKSB8fCBmaWVsZHNbaV0uZXJyb3IubGVuZ3RoID09PSAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZpZWxkUGFyZW50RXJyb3JzW2ZpZWxkLnBhcmVudElkXSA9IGlzUGFyZW50SW52YWxpZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHVwZGF0ZUVycm9ycyAmJiAhVXRpbHMuaXNOdWxsKGNvbnRhaW5lckVycm9yQ2FsbGJhY2suY3VycmVudCkgJiYgYXBwbGljYXRpb25NYW5hZ2VyLmlzRm9ybU1hcmtlcnNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXJFcnJvckNhbGxiYWNrLmN1cnJlbnQoZmllbGRQYXJlbnRFcnJvcnMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmllbGRQYXJlbnRFcnJvcnM7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWxpZGF0ZUZpZWxkID0gKGZpZWxkLCBpZCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmIChsb2FkaW5nUmVmLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgICAgIGxldCBpbnZhbGlkID0gZmllbGQuaGFuZGxlLmFwaS52YWxpZGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIC4uLnZhbHVlcy5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICBbaWRdOiB2YWx1ZVxuICAgICAgICAgICAgICAgIH0sIHZhbHVlKSA9PT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZG9WYWxpZGF0ZVBhcmVudChmaWVsZCwgaW52YWxpZCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gaW52YWxpZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZ2V0VmFsdWVQYXRoID0gKGlkLCB2YWxzKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGF0aCA9IHt9O1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRWYWx1ZXMgPSB2YWxzO1xuICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbCh2YWxzKSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZXMgPSB2YWx1ZXMuY3VycmVudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoY3VycmVudFZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBsZXQgdG9rZW5zID0gaWQuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlT2JqZWN0ID0gY3VycmVudFZhbHVlcztcbiAgICAgICAgICAgICAgICAgICAgcGF0aC52YWx1ZVByb3BlcnR5ID0gdG9rZW5zWzBdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW5zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZvID0gY3VycmVudFZhbHVlcztcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbCh2b1t0b2tlbnNbaV1dKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvID0gdm9bdG9rZW5zW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9bdG9rZW5zW2ldXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvID0gdm9bdG9rZW5zW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZvKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC52YWx1ZU9iamVjdCA9IHZvO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC52YWx1ZVByb3BlcnR5ID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZG9IYW5kbGVDaGFuZ2UgPSAoaWQsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGF0aCA9IGdldFZhbHVlUGF0aChpZCwgbnVsbCk7XG5cbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpICYmICFVdGlscy5pc051bGwocGF0aC52YWx1ZVByb3BlcnR5KSAmJiBsb2FkaW5nUmVmLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcGF0aC52YWx1ZU9iamVjdFtwYXRoLnZhbHVlUHJvcGVydHldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgbGV0IGludmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBnZXRGaWVsZChpZCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaW52YWxpZCA9IHZhbGlkYXRlRmllbGQoZmllbGQsIGlkLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZ3JvdXBGaWVsZCA9IGZpZWxkc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWxpZGF0aW9uR3JvdXAgPSBncm91cEZpZWxkLmhhbmRsZS5hcGkuZ2V0VmFsaWRhdGlvbkdyb3VwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbCh2YWxpZGF0aW9uR3JvdXApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkICE9PSBncm91cEZpZWxkICYmIHZhbGlkYXRpb25Hcm91cCA9PT0gZmllbGQuaGFuZGxlLmFwaS5nZXRWYWxpZGF0aW9uR3JvdXAoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZ3JvdXBGaWVsZElkID0gZ3JvdXBGaWVsZC5oYW5kbGUuYXBpLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZ3JpZEZpZWxkUGF0aCA9IGdldFZhbHVlUGF0aChncm91cEZpZWxkSWQsIG51bGwpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGdyaWRGaWVsZFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZ3JvdXBGaWVsZFZhbCA9IGdyaWRGaWVsZFBhdGgudmFsdWVPYmplY3RbZ3JpZEZpZWxkUGF0aC52YWx1ZVByb3BlcnR5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSRS1WYWxpZGF0aW5nIGZvcm0nLCBncm91cEZpZWxkVmFsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlRmllbGQoZ3JvdXBGaWVsZCwgZ3JvdXBGaWVsZElkLCBncm91cEZpZWxkVmFsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlQ2hhbmdlSGFuZGxlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKGludmFsaWQgPyBudWxsIDogdmFsdWVzLmN1cnJlbnQsIGlkLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMubW9kZWxDaGFuZ2VIYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wcy5tb2RlbENoYW5nZUhhbmRsZXIodmFsdWVzLmN1cnJlbnQsIGlkLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIuZW5hYmxlRm9ybU1hcmtlcnMoZmFsc2UpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLnByb2Nlc3NTeXN0ZW1HZW5lcmF0ZWRTdWJzY3JpcHRpb25zKHByb3BzLmNvbmZpZy5pZCk7XG5cbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChwcm9wcy5oYW5kbGUsIHByb3BzLnZpZXdJZCwgdmFsdWVzLmN1cnJlbnQpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuVkFMVUVfQ0hBTkdFLCBldmVudCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgc2V0RmllbGRFcnJvciA9IChpZCwgZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGxldCBmaWVsZCA9IGdldEZpZWxkKGlkKTtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGZpZWxkKSkge1xuICAgICAgICAgICAgICAgIGZpZWxkLmVycm9yID0gZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgYWRkRmllbGQgPSAoaWQsIGhhbmRsZSwgcGFyZW50SWQsIGJpbmRWYWx1ZVRvRm9ybSkgPT4ge1xuICAgICAgICAgICAgbGV0IGZpZWxkID0gZ2V0RmllbGQoaWQpO1xuICAgICAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBmaWVsZC5lcnJvcjtcbiAgICAgICAgICAgICAgICByZW1vdmVGaWVsZChpZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpZWxkID0ge307XG4gICAgICAgICAgICBmaWVsZC5pZCA9IGlkO1xuICAgICAgICAgICAgZmllbGQuaGFuZGxlID0gaGFuZGxlO1xuICAgICAgICAgICAgZmllbGQuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICAgIGZpZWxkLmJpbmRWYWx1ZVRvRm9ybSA9IGJpbmRWYWx1ZVRvRm9ybTtcbiAgICAgICAgICAgIGZpZWxkLnBhcmVudElkID0gcGFyZW50SWQ7XG4gICAgICAgICAgICBmaWVsZHMucHVzaChmaWVsZCk7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZXMuY3VycmVudCkge1xuICAgICAgICAgICAgICAgIHBhcnNlVmFsdWVzKHZhbHVlcy5jdXJyZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGhhbmRsZVNlbGVjdEl0ZW1DaGFuZ2UgPSAobmFtZSwgb3B0aW9ucywgc2VsZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZih0eXBlb2Ygc2VsZWN0aW9uID09PSAnb2JqZWN0JyAmJiAoVXRpbHMuaXNOdWxsKG9wdGlvbnMpIHx8IG9wdGlvbnMubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBzZWxlY3RlZFZhbHVlID0gbnVsbDtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnNbaV0uaWQgPT09IHNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFZhbHVlID0gb3B0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRvSGFuZGxlQ2hhbmdlKG5hbWUsIHNlbGVjdGVkVmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGVkVmFsdWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgdXBkYXRlVmFsdWUgPSAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIHByb3BzLnZhbHVlQ2hhbmdlSGFuZGxlcih7XG4gICAgICAgICAgICAgICAgLi4udmFsdWVzLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgW25hbWVdOiB2YWx1ZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmKHByb3BzLm1vZGVsQ2hhbmdlSGFuZGxlcikge1xuICAgICAgICAgICAgICAgIHByb3BzLm1vZGVsQ2hhbmdlSGFuZGxlcih7XG4gICAgICAgICAgICAgICAgICAgIC4uLnZhbHVlcy5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICBbbmFtZV06IHZhbHVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gcmVuZGVyKGZvcm0pIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKFV0aWxzLmlzTnVsbChmb3JtLnNlY3Rpb25zKSB8fCBmb3JtLnNlY3Rpb25zLmxlbmd0aCA9PT0gMCkgP1xuICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLnNlY3Rpb25zLm1hcCgoc2VjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHNlY3Rpb24uaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLmlkID0gc2VjdGlvbkNvdW50ZXIgKyAnLWZvcm0tc2VjdGlvbic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGRpdiBrZXk9e3NlY3Rpb25Db3VudGVyKyt9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlY3Rpb24ga2V5SGFuZGxlcj17cHJvcHMua2V5SGFuZGxlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZz17c2VjdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5kaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZT17Y3JlYXRlU2VjdGlvbkhhbmRsZShzZWN0aW9uKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm09eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIVV0aWxzLmlzTnVsbChwcm9wcy5oYW5kbGUuYXBpKSA/IHByb3BzLmhhbmRsZS5hcGkgOiBhcGkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3SWQ9e3Byb3BzLnZpZXdJZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz17dmFsdWVzLmN1cnJlbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHZpc2libGUgJiZcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtwcm9wcy5jbGFzc05hbWV9IGlkPXtwcm9wcy5jb25maWcuaWR9IHN0eWxlPXtcbiAgICAgICAgICAgICAgICBwcm9wcy5jbGFzc05hbWUgPT09ICdkZWZhdWx0Rm9ybScgP1xuICAgICAgICAgICAgICAgICAgICBVdGlscy5tZXJnZVN0eWxlcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTZweCAwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogJzAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogJzcwdmgnXG4gICAgICAgICAgICAgICAgICAgIH0sIHByb3BzLmNvbmZpZylcbiAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICB9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgIVV0aWxzLmlzTnVsbChwcm9wcy5jb25maWcuaWQpID9cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcihwcm9wcy5jb25maWcpXG4gICAgICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PkVSUk9SOiBBIGZvcm0gbXVzdCBoYXZlIGFuIElEPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+KTtcbiAgICB9KVxuO1xuXG5leHBvcnQgZGVmYXVsdCBGb3JtO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQyxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDRCxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxNQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxRQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQUEsT0FBQTtBQUNBLElBQUFJLFlBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFdBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFdBQUEsR0FB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
|
|
721
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9zdHlsZXMiLCJfVXRpbHMiLCJfU2VjdGlvbiIsIl9SZXN0U2VydmljZSIsIl9hc3luY011dGV4IiwiX09ic2VydmFibGUiLCJfQXBwbGljYXRpb25NYW5hZ2VyIiwiX1NlcnZpY2VDYWxsQWN0aW9uSGFuZGxlciIsIl9EeW5hbWljSlMiLCJfRXZlbnRUeXBlIiwiX0V2ZW50IiwiX2NsZWFyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwib3duS2V5cyIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsInVzZVN0eWxlcyIsIm1ha2VTdHlsZXMiLCJ0aGVtZSIsImNvbnRhaW5lciIsImRpc3BsYXkiLCJmbGV4V3JhcCIsIndpZHRoIiwidmVydGljYWxBbGlnbiIsInNlbGVjdCIsIm1hcmdpbiIsInNwYWNpbmciLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsInNlbGVjdEVtcHR5IiwibWFyZ2luVG9wIiwicm9vdCIsIkZvcm0iLCJSZWFjdCIsIm1lbW8iLCJwcm9wcyIsInZhbHVlcyIsInVzZVJlZiIsIlV0aWxzIiwiaXNOdWxsIiwibWFzdGVyVmFsdWVzIiwic2V0TWFzdGVyVmFsdWVzIiwidXNlU3RhdGUiLCJjb25maWciLCJzZXRDb25maWciLCJwYXJzZUNvbmZpZyIsInZpZXdJZCIsImJpbmRlciIsImZpZWxkcyIsImNvbnRhaW5lckVycm9yQ2FsbGJhY2siLCJzZWN0aW9uSGFuZGxlcyIsImZpZWxkUGFyZW50RXJyb3JzIiwidmlzaWJsZSIsInNldFZpc2libGUiLCJsb2FkaW5nUmVmIiwiZmllbGRWYWxpZGl0eSIsIk1hcCIsInNlY3Rpb25Db3VudGVyIiwiYXBpIiwiaWQiLCJkb1VwZGF0ZVZhbHVlIiwibmFtZSIsInVwZGF0ZVZhbHVlIiwiY2xlYXIiLCJkb0NsZWFyIiwic2V0VmFsdWUiLCJkb0hhbmRsZUNoYW5nZSIsImhhbmRsZVNlbGVjdEl0ZW1DaGFuZ2UiLCJvcHRpb25zIiwic2VsZWN0ZWRJZCIsImhhbmRsZUNoYW5nZSIsImdldFZhbHVlUGF0aCIsImFkZEZpZWxkIiwicmVmIiwicGFyZW50SWQiLCJiaW5kVmFsdWVUb0Zvcm0iLCJyZW1vdmVGaWVsZCIsInNldEZpZWxkVmFsaWRpdHkiLCJyZXN1bHQiLCJjdXJyZW50Iiwic2V0IiwiY2xlYXJGaWVsZFZhbGlkaXR5IiwiZGVsZXRlIiwidmFsaWRhdGVBbGwiLCJmaWVsZCIsImhhbmRsZSIsInBhdGgiLCJjdXJyZW50VmFsdWUiLCJ2YWx1ZU9iamVjdCIsInZhbHVlUHJvcGVydHkiLCJ2YWxpZGF0ZSIsImZpcnN0SW52YWxpZCIsInYiLCJnZXQiLCJ2YWxpZCIsImRvVmFsaWRhdGVQYXJlbnQiLCJzY3JvbGxUbyIsImFwcGxpY2F0aW9uTWFuYWdlciIsImlzRm9ybU1hcmtlcnNFbmFibGVkIiwibG9hZERhdGEiLCJhY3Rpb25Db25maWciLCJldmVudCIsImRhdGEiLCJiaW5kRGF0YSIsImRvQmluZERhdGEiLCJ2YWxpZGF0ZVBhcmVudCIsImludmFsaWQiLCJnZXRGaWVsZCIsImZpZWxkRGF0YUJpbmRpbmdzIiwiZmllbGROYW1lcyIsInNlY3Rpb25zIiwic2VjdGlvbiIsImoiLCJjb21wb25lbnRzIiwiY29tcG9uZW50IiwidHlwZSIsImdldEZpZWxkc0Zyb21UYWIiLCJrIiwiZGF0YUJpbmRpbmciLCJzZXRDb250YWluZXJFcnJvckhhbmRsZXIiLCJjYWxsYmFjayIsIm1vZGVsIiwicGFyc2VWYWx1ZXMiLCJ0cmFuc2Zvcm1EYXRhT2JqZWN0IiwiZm9ybVZhbGlkIiwidW5kZWZpbmVkIiwib25WYWxpZGl0eUNoYW5nZSIsIm1lc3NhZ2UiLCJwYXJzZVZhbHVlIiwic2V0RmllbGRFcnJvciIsImVycm9yIiwiZ2V0Q2hpbGRyZW4iLCJjaGlsZHJlbiIsIm1vcmVDaGlsZHJlbiIsInByb3BlcnRpZXMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwicHJvcGVydHkiLCJzZWN0aW9uSGFuZGxlIiwiY2hpbGQiLCJyZWZyZXNoIiwicGFyc2VkQ29uZmlnIiwiZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbiIsImNyZWF0ZVNlY3Rpb25IYW5kbGUiLCJ1cGRhdGVWaWV3VGl0bGUiLCJ2aWV3IiwiZ2V0VmlldyIsInRpdGxlIiwiaW5jbHVkZXMiLCJ1cGRhdGVBcHBCYXJUaXRsZSIsImhhbmRsZURhdGFBcnJpdmVkIiwiRXZlbnQiLCJldmVudE1hbmFnZXIiLCJmaXJlRXZlbnQiLCJFdmVudFR5cGUiLCJEQVRBX0FSUklWRUQiLCJwcm9jZXNzU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9ucyIsImV2ZW50Q29uZmlnIiwiY29tcG9uZW50Q29uZmlnIiwiZXZlbnREYXRhIiwic2VydmljZSIsImRhdGFTZXJ2aWNlIiwiY29tcG9uZW50VmFsdWUiLCJyZXNvbHZlUGFyYW1ldGVyQ29uZmlnVmFsdWUiLCJpbnZva2VScGMiLCJ0aGVuIiwiY29uc29sZSIsImNhdGNoIiwiZXJyb3JUeXBlIiwicHVibGlzaEVycm9yTWVzc2FnZSIsInNlcnZpY2VDYWxsQWN0aW9uSGFuZGxlciIsImV4ZWN1dGUiLCJwYXJhbWV0ZXIiLCJpc0V4cHJlc3Npb24iLCJmaWxsRXZlbnREYXRhVmFsdWUiLCJpc0V2ZW50RGF0YSIsInRvU3RyaW5nIiwic3RhcnRzV2l0aCIsImdldFByb3BlcnR5Q2hhaW5QYXRoIiwiYWRkU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9uIiwiZHluYW1pY0pTIiwiZXhlY3V0ZVNjcmlwdCIsImNvbmNhdCIsInZhbCIsIm1hcCIsInJlc29sdmVFeHByZXNzaW9uVmFsdWUiLCJ1c2VFZmZlY3QiLCJldmVudEhhbmRsaW5nQ29uZmlnIiwic3Vic2NyaXB0aW9ucyIsImF1dG9Mb2FkRGF0YSIsImdldENvbXBvbmVudEF0dHJpYnV0ZSIsInN1YnNjcmlwdGlvbiIsImV2ZW50VHlwZSIsIkNPTVBPTkVOVF9MT0FEIiwiYWN0aW9ucyIsImFjdGlvblR5cGUiLCJhZGRTdWJzY3JpcHRpb25zIiwiYWRkU3lzdGVtU3Vic2NyaXB0aW9ucyIsImhhbmRsZUxvYWRDb21wbGV0ZSIsImVuYWJsZUZvcm1NYXJrZXJzIiwiY2xlYXJDb21wb25lbnRFdmVudExpc3RlbmVycyIsInRhYiIsInRhYlBhZ2UiLCJ0YWJQYWdlcyIsImZpZWxkc2V0IiwiZm9ybVZhbHVlcyIsInRva2VucyIsInNwbGl0Iiwidm8iLCJ0b2tlbiIsInZhbHVlQ2hhbmdlSGFuZGxlciIsIm1vZGVsQ2hhbmdlSGFuZGxlciIsImtleSIsInBhcnNlZFZhbHVlcyIsIkpTT04iLCJwYXJzZSIsInN0cmluZ2lmeSIsIm9iamVjdFZhbHVlIiwiZGF0YUFycml2ZWRIYW5kbGVyIiwic3BsaWNlIiwidXBkYXRlRXJyb3JzIiwiaXNQYXJlbnRJbnZhbGlkIiwidmFsaWRhdGVGaWVsZCIsInZhbHMiLCJjdXJyZW50VmFsdWVzIiwiZ3JvdXBGaWVsZCIsInZhbGlkYXRpb25Hcm91cCIsImdldFZhbGlkYXRpb25Hcm91cCIsImdyb3VwRmllbGRJZCIsImdyaWRGaWVsZFBhdGgiLCJncm91cEZpZWxkVmFsIiwibG9nIiwiVkFMVUVfQ0hBTkdFIiwic2VsZWN0aW9uIiwic2VsZWN0ZWRWYWx1ZSIsInJlbmRlciIsImZvcm0iLCJjcmVhdGVFbGVtZW50Iiwia2V5SGFuZGxlciIsImRpc2FibGVkIiwiY2xhc3NOYW1lIiwic3R5bGUiLCJtZXJnZVN0eWxlcyIsInBhZGRpbmciLCJvdmVyZmxvdyIsIm1heEhlaWdodCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL0Zvcm0uanN4Il0sInNvdXJjZXNDb250ZW50IjpbIu+7v2ltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge21ha2VTdHlsZXN9IGZyb20gJ0BtdWkvc3R5bGVzJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi9VdGlscyc7XG5pbXBvcnQgU2VjdGlvbiBmcm9tICcuL1NlY3Rpb24nO1xuaW1wb3J0ICcuL0Zvcm0uY3NzJztcbmltcG9ydCB7aW52b2tlUnBjfSBmcm9tICcuLi8uLi9SZXN0U2VydmljZSc7XG5pbXBvcnQge011dGV4fSBmcm9tICdhc3luYy1tdXRleCc7XG5pbXBvcnQgZXZlbnRNYW5hZ2VyIGZyb20gJy4uLy4uL2V2ZW50L09ic2VydmFibGUnO1xuaW1wb3J0IGFwcGxpY2F0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9BcHBsaWNhdGlvbk1hbmFnZXInO1xuaW1wb3J0IHNlcnZpY2VDYWxsQWN0aW9uSGFuZGxlciBmcm9tICcuLi8uLi9ldmVudC9TZXJ2aWNlQ2FsbEFjdGlvbkhhbmRsZXInO1xuaW1wb3J0IGR5bmFtaWNKUyBmcm9tICcuLi8uLi9EeW5hbWljSlMnO1xuaW1wb3J0IEV2ZW50VHlwZSBmcm9tICcuLi8uLi9ldmVudC9FdmVudFR5cGUnO1xuaW1wb3J0IEV2ZW50IGZyb20gJy4uLy4uL2V2ZW50L0V2ZW50JztcbmltcG9ydCB7Y2xlYXJ9IGZyb20gXCJAdGVzdGluZy1saWJyYXJ5L3VzZXItZXZlbnQvZGlzdC9jbGVhclwiO1xuXG5jb25zdCB1c2VTdHlsZXMgPSBtYWtlU3R5bGVzKHRoZW1lID0+ICh7XG4gICAgY29udGFpbmVyOiB7XG4gICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgZmxleFdyYXA6ICd3cmFwJyxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgJyYgdHIgdGQnOiB7XG4gICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiAndG9wJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICBzZWxlY3Q6IHtcbiAgICAgICAgbWFyZ2luOiB0aGVtZS5zcGFjaW5nKDEpLFxuICAgICAgICBtaW5XaWR0aDogMTIwLFxuICAgICAgICBtaW5IZWlnaHQ6IDQ4XG4gICAgfSxcbiAgICBzZWxlY3RFbXB0eToge1xuICAgICAgICBtYXJnaW5Ub3A6IHRoZW1lLnNwYWNpbmcoMiksXG4gICAgfSxcbiAgICByb290OiB7fVxufSkpO1xuXG5jb25zdCBGb3JtID0gUmVhY3QubWVtbygocHJvcHMpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gUmVhY3QudXNlUmVmKCFVdGlscy5pc051bGwocHJvcHMudmFsdWVzKSA/IHByb3BzLnZhbHVlcyA6IHt9KTtcbiAgICAgICAgY29uc3QgW21hc3RlclZhbHVlcywgc2V0TWFzdGVyVmFsdWVzXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgICAgICBjb25zdCBbY29uZmlnLCBzZXRDb25maWddID0gUmVhY3QudXNlU3RhdGUoVXRpbHMucGFyc2VDb25maWcocHJvcHMuY29uZmlnLCBwcm9wcy52aWV3SWQpKTtcbiAgICAgICAgY29uc3QgW2JpbmRlcl0gPSBSZWFjdC51c2VTdGF0ZShVdGlscy5pc051bGwocHJvcHMuY29uZmlnLmJpbmRlcikgPyAnUExBSU5fT0JKRUNUJyA6IHByb3BzLmNvbmZpZy5iaW5kZXIpO1xuICAgICAgICBjb25zdCBbZmllbGRzXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgICAgICAgY29uc3QgY29udGFpbmVyRXJyb3JDYWxsYmFjayA9IFJlYWN0LnVzZVJlZigpO1xuICAgICAgICBjb25zdCBbc2VjdGlvbkhhbmRsZXNdID0gUmVhY3QudXNlU3RhdGUoe30pO1xuICAgICAgICBjb25zdCBbZmllbGRQYXJlbnRFcnJvcnNdID0gUmVhY3QudXNlU3RhdGUoe30pO1xuICAgICAgICBjb25zdCBbdmlzaWJsZSwgc2V0VmlzaWJsZV0gPSBSZWFjdC51c2VTdGF0ZSh0cnVlKTtcbiAgICAgICAgY29uc3QgbG9hZGluZ1JlZiA9IFJlYWN0LnVzZVJlZih0cnVlKTtcbiAgICAgICAgLy8gVmFsaWRpdHkgcmVnaXN0ZXI6IE1hcDxmaWVsZElkLCB7IHZhbGlkLCBtZXNzYWdlLCBmb3JjZU1hcmtlciB9Pi5cbiAgICAgICAgLy8gU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgXCJpcyB0aGlzIGZpZWxkIHZhbGlkP1wiLiBCYXNlRmllbGQgd3JpdGVzXG4gICAgICAgIC8vIGhlcmUgZnJvbSBkb1ZhbGlkYXRpb247IGZvcm0udmFsdWUgcmVhZHMgaGVyZSB3aXRob3V0IGludm9raW5nIGFueVxuICAgICAgICAvLyBmaWVsZCBtZXRob2RzIChraWxscyB0aGUgYmktZGlyZWN0aW9uYWwgcmVuZGVyLXRpbWUgY2hhaW4gdGhhdFxuICAgICAgICAvLyBwcm9kdWNlZCBSZWFjdCAjMTg1KS5cbiAgICAgICAgY29uc3QgZmllbGRWYWxpZGl0eSA9IFJlYWN0LnVzZVJlZihuZXcgTWFwKCkpO1xuICAgICAgICBsZXQgc2VjdGlvbkNvdW50ZXIgPSAwO1xuXG4gICAgICAgIGNvbnN0IGFwaSA9ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZ2V0IGlkKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMuY29uZmlnLmlkO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZG9VcGRhdGVWYWx1ZTogKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjbGVhcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb0NsZWFyKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRWYWx1ZTogKGlkLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb0hhbmRsZUNoYW5nZShpZCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0SXRlbUNoYW5nZTogKG5hbWUsIG9wdGlvbnMsIHNlbGVjdGVkSWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVNlbGVjdEl0ZW1DaGFuZ2UobmFtZSwgb3B0aW9ucywgc2VsZWN0ZWRJZCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoYW5kbGVDaGFuZ2U6IChpZCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9IYW5kbGVDaGFuZ2UoaWQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGdldFZhbHVlUGF0aDogKGlkLCB2YWx1ZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFZhbHVlUGF0aChpZCwgdmFsdWVzKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFkZEZpZWxkOiAoaWQsIHJlZiwgcGFyZW50SWQsIGJpbmRWYWx1ZVRvRm9ybSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkRmllbGQoaWQsIHJlZiwgcGFyZW50SWQsIGJpbmRWYWx1ZVRvRm9ybSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZW1vdmVGaWVsZDogKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUZpZWxkKGlkKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldEZpZWxkVmFsaWRpdHk6IChpZCwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkVmFsaWRpdHkuY3VycmVudC5zZXQoaWQsIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjbGVhckZpZWxkVmFsaWRpdHk6IChpZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZFZhbGlkaXR5LmN1cnJlbnQuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHZhbGlkYXRlQWxsOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4cGxpY2l0IFwiZm9yY2UtdmFsaWRhdGUgZXZlcnkgZmllbGRcIiBjb21tYW5kLiBSZXBsYWNlcyB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gb2xkIGhhY2sgb2YgcmVhZGluZyBmb3JtLnZhbHVlIHB1cmVseSBmb3IgaXRzIHNpZGUgZWZmZWN0cy5cbiAgICAgICAgICAgICAgICAgICAgLy8gRmllbGRzIHdyaXRlIGludG8gZmllbGRWYWxpZGl0eSB2aWEgZG9WYWxpZGF0aW9uIGFzIGEgc2lkZVxuICAgICAgICAgICAgICAgICAgICAvLyBlZmZlY3Qgb2YgdmFsaWRhdGU7IHdlIHRoZW4gd2FsayB0aGUgcmVnaXN0ZXIgZm9yIGludmFsaWRcbiAgICAgICAgICAgICAgICAgICAgLy8gZmllbGRzIHRvIGRyaXZlIFVYIChzY3JvbGxUbyBmaXJzdCwgcmVmcmVzaCBjb250YWluZXIgZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgLy8gY2FsbGJhY2spIOKAlCBzYW1lIFVYIHRoZSBnZXR0ZXIgdXNlZCB0byBwcm92aWRlLCBub3cgb3B0LWluLlxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmllbGQuaGFuZGxlKSAmJiAhVXRpbHMuaXNOdWxsKGZpZWxkLmhhbmRsZS5hcGkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFzcyB0aGUgYWN0dWFsIGN1cnJlbnQgdmFsdWUgc28gZG9WYWxpZGF0aW9uJ3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoY3VycmVudFZhbHVlLCByZXF1aXJlZCwgbWFya2VycykgY2FjaGUga2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVmbGVjdHMgcmVhbGl0eS4gV2l0aG91dCB0aGlzIHdlIHdlcmUgcGFzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG51bGwsIHdoaWNoIG1hZGUgY2FjaGUgaGl0cyBvcGFxdWUgaW4gbG9ncyBhbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3JjZWQgVXRpbHMudmFsaWRhdGVGaWVsZCB0byBmYWxsIGJhY2sgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZXNbaWRdIGV2ZXJ5IHRpbWUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IGdldFZhbHVlUGF0aChmaWVsZC5pZCwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gIVV0aWxzLmlzTnVsbChwYXRoKSAmJiAhVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcGF0aC52YWx1ZU9iamVjdFtwYXRoLnZhbHVlUHJvcGVydHldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5oYW5kbGUuYXBpLnZhbGlkYXRlKHZhbHVlcy5jdXJyZW50LCBjdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxldCBmaXJzdEludmFsaWQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmJpbmRWYWx1ZVRvRm9ybSA9PT0gZmFsc2UpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdiA9IGZpZWxkVmFsaWRpdHkuY3VycmVudC5nZXQoZmllbGQuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgJiYgdi52YWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1ZhbGlkYXRlUGFyZW50KGZpZWxkLCB0cnVlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0SW52YWxpZCA9PT0gbnVsbCkgZmlyc3RJbnZhbGlkID0gZmllbGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmlyc3RJbnZhbGlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgIVV0aWxzLmlzTnVsbChmaXJzdEludmFsaWQuaGFuZGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgIVV0aWxzLmlzTnVsbChmaXJzdEludmFsaWQuaGFuZGxlLmFwaSlcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHR5cGVvZiBmaXJzdEludmFsaWQuaGFuZGxlLmFwaS5zY3JvbGxUbyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RJbnZhbGlkLmhhbmRsZS5hcGkuc2Nyb2xsVG8oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChjb250YWluZXJFcnJvckNhbGxiYWNrLmN1cnJlbnQpICYmIGFwcGxpY2F0aW9uTWFuYWdlci5pc0Zvcm1NYXJrZXJzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJFcnJvckNhbGxiYWNrLmN1cnJlbnQoZmllbGRQYXJlbnRFcnJvcnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBsb2FkRGF0YTogKGFjdGlvbkNvbmZpZywgZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbG9hZERhdGEoYWN0aW9uQ29uZmlnLCBjb25maWcsIGV2ZW50ID8gZXZlbnQuZGF0YSA6IG51bGwpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYmluZERhdGE6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvQmluZERhdGEoZGF0YSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZVBhcmVudDogKGlkLCBpbnZhbGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvVmFsaWRhdGVQYXJlbnQoZ2V0RmllbGQoaWQpLCBpbnZhbGlkKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGdldCBmaWVsZERhdGFCaW5kaW5ncygpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkTmFtZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5jb25maWcuc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWN0aW9uID0gcHJvcHMuY29uZmlnLnNlY3Rpb25zW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzZWN0aW9uLmNvbXBvbmVudHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29tcG9uZW50ID0gc2VjdGlvbi5jb21wb25lbnRzW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZHMgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudC50eXBlID09PSAndGFiJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHMgPSBnZXRGaWVsZHNGcm9tVGFiKGNvbXBvbmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzID0gY29tcG9uZW50LmZpZWxkcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGZpZWxkcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBmaWVsZHNba107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZXMucHVzaCghVXRpbHMuaXNOdWxsKGZpZWxkLmRhdGFCaW5kaW5nKSA/IGZpZWxkLmRhdGFCaW5kaW5nIDogZmllbGQuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZE5hbWVzO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0Q29udGFpbmVyRXJyb3JIYW5kbGVyKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckVycm9yQ2FsbGJhY2suY3VycmVudCA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZ2V0IG1vZGVsKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXQgbW9kZWwobW9kZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChtb2RlbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVmFsdWVzKHt9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyh7fSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVZhbHVlcyh0cmFuc2Zvcm1EYXRhT2JqZWN0KG1vZGVsKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXN0ZXJWYWx1ZXMobW9kZWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlYWQgcmV0dXJucyB2YWx1ZXMuY3VycmVudCBpZmYgZXZlcnkgYm91bmQgZmllbGQnc1xuICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciBlbnRyeSBpcyB2YWxpZC4gU2lkZSBlZmZlY3Q6IGludm9rZXMgZWFjaFxuICAgICAgICAgICAgICAgICAgICAvLyBmaWVsZCdzIGNhY2hlZCBvblZhbGlkaXR5Q2hhbmdlIHRvIHJlZnJlc2ggbWFya2VyIFVJXG4gICAgICAgICAgICAgICAgICAgIC8vIGZyb20gcmVnaXN0ZXIgc3RhdGUg4oCUIG5vIHJlLXZhbGlkYXRpb24sIG5vIHNldEZpZWxkVmFsaWRpdHlcbiAgICAgICAgICAgICAgICAgICAgLy8gd3JpdGVzLiBTeW1tZXRyaWMgKGZpcmVzIGZvciB2YWxpZCArIGludmFsaWQpIHNvIGEgZmllbGRcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hvc2UgVUkgZ290IG91dCBvZiBzeW5jIHdpdGggdGhlIHJlZ2lzdGVyIChzdGFsZSBoYXNFcnJvclxuICAgICAgICAgICAgICAgICAgICAvLyBmcm9tIHNvbWUgbm9uLWRvSGFuZGxlQ2hhbmdlIHBhdGgpIGlzIHJlcGFpbnRlZCB0byBtYXRjaC5cbiAgICAgICAgICAgICAgICAgICAgLy8gc2V0U3RhdGVzIGFyZSBpZGVtcG90ZW50IChSZWFjdCBiYWlscyBvbiBzYW1lIHZhbHVlKSwgc29cbiAgICAgICAgICAgICAgICAgICAgLy8gcmVwZWF0ZWQgZm9ybS52YWx1ZSByZWFkcyBjb3N0IHplcm8gcmUtcmVuZGVycyBhZnRlciB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gZmlyc3QgcGFpbnQuIFRoZSBtYXJrZXJzIGdhdGUgaW5zaWRlIHRoZSBjYWxsYmFjayBlbnN1cmVzXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlZnJlc2hlcyBvbmx5IHBhaW50IHdoZW4gZ2xvYmFsIG1hcmtlcnMgYXJlIGVuYWJsZWQuXG4gICAgICAgICAgICAgICAgICAgIGxldCBmb3JtVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAobG9hZGluZ1JlZi5jdXJyZW50ID09PSBmYWxzZSAmJiB2YWx1ZXMuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuYmluZFZhbHVlVG9Gb3JtID09PSBmYWxzZSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdiA9IGZpZWxkVmFsaWRpdHkuY3VycmVudC5nZXQoZmllbGQuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1WYWxpZCA9IGZvcm1WYWxpZCAmJiAodiA9PT0gdW5kZWZpbmVkIHx8IHYudmFsaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ICYmIHR5cGVvZiB2Lm9uVmFsaWRpdHlDaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi5vblZhbGlkaXR5Q2hhbmdlKHYudmFsaWQsIHYubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE91dGJvdW5kLW5vcm1hbGl6ZSB0aGUgc3RvcmVkIHZhbHVlIHNvIG5vbi1zdHJpbmcgZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0eXBlcyAoRGF0ZSBmb3IgRGF0ZVBpY2tlciwgbG9va3VwIG9iamVjdHMsIGV0Yy4pIHNlcmlhbGl6ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHdpcmUgZm9ybWF0IG9uIEpTT04uc3RyaW5naWZ5LiBSZXN0b3JlcyB0aGUgYmVoYXZpb3IgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2xkIGdldHRlciBwcm92aWRlZCB2aWEgcGFyc2VWYWx1ZShfLCBmYWxzZSkuIElkZW1wb3RlbnQgZm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHlwZWQgdmFsdWVQYXJzZXJzIOKAlCByZXBlYXQgcmVhZHMgc2VlIHRoZSBhbHJlYWR5LW5vcm1hbGl6ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZSBhbmQgcmUtZW1pdCB0aGUgc2FtZSBzdHJpbmcuIHBhcnNlVmFsdWUgaXMgYSBwdXJlIEpTXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNmb3JtIHdpdGggbm8gUmVhY3Qgc3RhdGUgc2lkZSBlZmZlY3RzLCBzbyB1bmxpa2UgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFsaWRhdGUgY2FsbCB3ZSByZW1vdmVkIGluIHNlcT00NCwgdGhpcyBjYW4ndCBkcml2ZSBhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmUtcmVuZGVyIGxvb3AuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmllbGQuaGFuZGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhVXRpbHMuaXNOdWxsKGZpZWxkLmhhbmRsZS5hcGkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHR5cGVvZiBmaWVsZC5oYW5kbGUuYXBpLnBhcnNlVmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IGdldFZhbHVlUGF0aChmaWVsZC5pZCwgdmFsdWVzLmN1cnJlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXRoKSAmJiAhVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlT2JqZWN0W3BhdGgudmFsdWVQcm9wZXJ0eV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmhhbmRsZS5hcGkucGFyc2VWYWx1ZShwYXRoLnZhbHVlT2JqZWN0W3BhdGgudmFsdWVQcm9wZXJ0eV0sIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3JtVmFsaWQgPyB2YWx1ZXMuY3VycmVudCA6IG51bGw7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRGaWVsZEVycm9yOiAoaWQsIGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRGaWVsZEVycm9yKGlkLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXRDaGlsZHJlbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGZpZWxkc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goZmllbGQuaGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtb3JlQ2hpbGRyZW4gPSBmaWVsZC5oYW5kbGUuYXBpLmdldENoaWxkcmVuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1vcmVDaGlsZHJlbi5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2gobW9yZUNoaWxkcmVuW2pdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc2VjdGlvbkhhbmRsZXMpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWN0aW9uSGFuZGxlID0gc2VjdGlvbkhhbmRsZXNbcHJvcGVydHldO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChzZWN0aW9uSGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygc2VjdGlvbkhhbmRsZS5hcGkuZ2V0Q2hpbGRyZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVmcmVzaCgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BlcnRpZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzZWN0aW9uSGFuZGxlcyk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNlY3Rpb25IYW5kbGUgPSBzZWN0aW9uSGFuZGxlc1twcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbkhhbmRsZS5hcGkucmVmcmVzaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25IYW5kbGUuYXBpLnJlZnJlc2goKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJzZWRDb25maWcgPSBVdGlscy5wYXJzZUNvbmZpZyhwcm9wcy5jb25maWcsIHByb3BzLnZpZXdJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhcnNlZENvbmZpZy52aXNpYmxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmlzaWJsZShVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHBhcnNlZENvbmZpZy52aXNpYmxlLCBwYXJzZWRDb25maWcuaWQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgY3JlYXRlU2VjdGlvbkhhbmRsZSA9IChzZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHNlY3Rpb25IYW5kbGVzW3NlY3Rpb24uaWRdKSkge1xuICAgICAgICAgICAgICAgIGxldCBoYW5kbGUgPSB7fTtcbiAgICAgICAgICAgICAgICBzZWN0aW9uSGFuZGxlc1tzZWN0aW9uLmlkXSA9IGhhbmRsZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc2VjdGlvbkhhbmRsZXNbc2VjdGlvbi5pZF07XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlVmlld1RpdGxlKCkge1xuICAgICAgICAgICAgaWYgKHByb3BzLnZpZXdJZCkge1xuICAgICAgICAgICAgICAgIGxldCB2aWV3ID0gYXBwbGljYXRpb25NYW5hZ2VyLmdldFZpZXcocHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgICAgICBpZiAodmlldykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSB2aWV3LmNvbmZpZy50aXRsZTtcblxuICAgICAgICAgICAgICAgICAgICBpZih0aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpdGxlLmluY2x1ZGVzKHByb3BzLmNvbmZpZy5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIudXBkYXRlQXBwQmFyVGl0bGUodmlldy5jb25maWcuaWQsIHRpdGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZURhdGFBcnJpdmVkKGRhdGEpIHtcbiAgICAgICAgICAgIHVwZGF0ZVZpZXdUaXRsZSgpO1xuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChkYXRhKSkge1xuICAgICAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChwcm9wcy5oYW5kbGUsIHByb3BzLnZpZXdJZCwgZGF0YSk7XG4gICAgICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuREFUQV9BUlJJVkVELCBldmVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5wcm9jZXNzU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9ucyhwcm9wcy5jb25maWcuaWQpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIucHJvY2Vzc1N5c3RlbUdlbmVyYXRlZFN1YnNjcmlwdGlvbnMoZmllbGQuaGFuZGxlLmFwaS5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBsb2FkRGF0YShldmVudENvbmZpZywgY29tcG9uZW50Q29uZmlnLCBldmVudERhdGEgPSBudWxsKSB7XG4gICAgICAgICAgICBsZXQgc2VydmljZSA9ICFVdGlscy5pc051bGwoY29tcG9uZW50Q29uZmlnLmRhdGFTZXJ2aWNlKSA/IGNvbXBvbmVudENvbmZpZy5kYXRhU2VydmljZSA6XG4gICAgICAgICAgICAgICAgZXZlbnRDb25maWcgIT09IG51bGwgPyBldmVudENvbmZpZy5kYXRhU2VydmljZSA6IG51bGw7XG4gICAgICAgICAgICBsZXQgY29tcG9uZW50VmFsdWUgPSAhVXRpbHMuaXNOdWxsKGNvbXBvbmVudENvbmZpZy52YWx1ZSkgPyBhcHBsaWNhdGlvbk1hbmFnZXIucmVzb2x2ZVBhcmFtZXRlckNvbmZpZ1ZhbHVlKGNvbXBvbmVudENvbmZpZy52YWx1ZSwgZXZlbnREYXRhKSA6XG4gICAgICAgICAgICAgICAgIVV0aWxzLmlzTnVsbChldmVudENvbmZpZykgPyBhcHBsaWNhdGlvbk1hbmFnZXIucmVzb2x2ZVBhcmFtZXRlckNvbmZpZ1ZhbHVlKGV2ZW50Q29uZmlnLnZhbHVlLCBldmVudERhdGEpIDogbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoc2VydmljZSkpIHtcbiAgICAgICAgICAgICAgICBkb0NsZWFyKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlcnZpY2UudHlwZSA9PT0gJ3JwYycpIHtcbiAgICAgICAgICAgICAgICAgICAgaW52b2tlUnBjKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2U6IHNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHByb3BzLmhhbmRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJZDogcHJvcHMudmlld0lkXG4gICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChyZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVmFsdWVzKHRyYW5zZm9ybURhdGFPYmplY3QocmVzdWx0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyhyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSAmJiBlLmVycm9yVHlwZSA9PT0gJ0lOVkFMSURfUEFSQU1FVEVSJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZURhdGFBcnJpdmVkKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnB1Ymxpc2hFcnJvck1lc3NhZ2UoZSwgcHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKGV2ZW50Q29uZmlnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRDb25maWcgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50Q29uZmlnLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPIDogSW1wbGVtZW50IHRoZSBpbnZhbGlkIHBhcmFtZW50ZXIgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZUNhbGxBY3Rpb25IYW5kbGVyLmV4ZWN1dGUoZXZlbnRDb25maWcsIG51bGwsIG51bGwsIHByb3BzLnZpZXdJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXModHJhbnNmb3JtRGF0YU9iamVjdChkYXRhKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyhkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIChwYXJhbWV0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVEYXRhQXJyaXZlZChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChjb21wb25lbnRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhcHBsaWNhdGlvbk1hbmFnZXIuaXNFeHByZXNzaW9uKGNvbXBvbmVudFZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50VmFsdWUgPSBhcHBsaWNhdGlvbk1hbmFnZXIuZmlsbEV2ZW50RGF0YVZhbHVlKGNvbXBvbmVudFZhbHVlLCBldmVudERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGlzRXZlbnREYXRhID0gY29tcG9uZW50VmFsdWUudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXJ0c1dpdGgoJyRldmVudC5kYXRhJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcHBsaWNhdGlvbk1hbmFnZXIuaXNFeHByZXNzaW9uKGNvbXBvbmVudFZhbHVlKSAmJiAhaXNFdmVudERhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgoY29tcG9uZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGF0aC52YWx1ZU9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIuYWRkU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9uKHByb3BzLnZpZXdJZCwgcHJvcHMudmlld0lkLCBwcm9wcy5jb25maWcuaWQsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZHluYW1pY0pTLmV4ZWN1dGVTY3JpcHQoYCR7cHJvcHMuY29uZmlnLmlkfVZhbHVlRXZhbHVhdG9yYCwgY29tcG9uZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWwgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaW5kZXIgPT09ICdNQVBfT0JKRUNUJyAmJiBVdGlscy5pc051bGwodmFsdWUubWFwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbC5tYXAgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXModHJhbnNmb3JtRGF0YU9iamVjdCh2YWwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyh2YWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsID0gaXNFdmVudERhdGEgPyBhcHBsaWNhdGlvbk1hbmFnZXIucmVzb2x2ZUV4cHJlc3Npb25WYWx1ZShjb21wb25lbnRWYWx1ZSwgZXZlbnREYXRhKSA6IGNvbXBvbmVudFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpbmRlciA9PT0gJ01BUF9PQkpFQ1QnICYmIFV0aWxzLmlzTnVsbChjb21wb25lbnRWYWx1ZS5tYXApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsLm1hcCA9IGNvbXBvbmVudFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVZhbHVlcyh0cmFuc2Zvcm1EYXRhT2JqZWN0KHZhbCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWFzdGVyVmFsdWVzKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVWaWV3VGl0bGUoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBwcm9wcy5oYW5kbGUuYXBpID0gbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgcHJvcHMuaGFuZGxlLmFwaSA9IGFwaSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgcHJvcHMuaGFuZGxlLmFwaSA9IGFwaSgpO1xuICAgICAgICAgICAgbGV0IGV2ZW50SGFuZGxpbmdDb25maWcgPSBVdGlscy5pc051bGwoY29uZmlnLmV2ZW50SGFuZGxpbmdDb25maWcpID8ge30gOiBjb25maWcuZXZlbnRIYW5kbGluZ0NvbmZpZztcbiAgICAgICAgICAgIGV2ZW50SGFuZGxpbmdDb25maWcuc3Vic2NyaXB0aW9ucyA9IFV0aWxzLmlzTnVsbChldmVudEhhbmRsaW5nQ29uZmlnLnN1YnNjcmlwdGlvbnMpID8gW10gOiBldmVudEhhbmRsaW5nQ29uZmlnLnN1YnNjcmlwdGlvbnM7XG5cbiAgICAgICAgICAgIGxldCBhdXRvTG9hZERhdGEgPSBVdGlscy5nZXRDb21wb25lbnRBdHRyaWJ1dGUoY29uZmlnLCAnYXV0b0xvYWREYXRhJywgbnVsbCk7XG4gICAgICAgICAgICBpZiAoYXV0b0xvYWREYXRhID09PSBudWxsIHx8IGF1dG9Mb2FkRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGxldCBzdWJzY3JpcHRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogRXZlbnRUeXBlLkNPTVBPTkVOVF9MT0FELFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZTogJ2xvYWREYXRhJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxpbmdDb25maWcuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGhhbmRsZURhdGFBcnJpdmVkKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5hZGRTdWJzY3JpcHRpb25zKGV2ZW50SGFuZGxpbmdDb25maWcsIHByb3BzLmhhbmRsZSwgcHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5hZGRTeXN0ZW1TdWJzY3JpcHRpb25zKHByb3BzLnZpZXdJZCwgY29uZmlnKTtcbiAgICAgICAgICAgIHNldENvbmZpZyhjb25maWcpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICAgICAgICAgIGxldCBoYW5kbGUgPSBmaWVsZC5oYW5kbGU7XG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoaGFuZGxlKSkge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGUuYXBpLmhhbmRsZUxvYWRDb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbG9hZGluZ1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgZXZlbnQgPSBuZXcgRXZlbnQocHJvcHMuaGFuZGxlLCBwcm9wcy52aWV3SWQsIG51bGwpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuQ09NUE9ORU5UX0xPQUQsIGV2ZW50KTtcblxuICAgICAgICAgICAgLy8gSW5pdGlhbCBsb2FkIGNvbXBsZXRlLiBFbmFibGUgbWFya2VycyBnbG9iYWxseSBzbyBhbGwgc3Vic2VxdWVudFxuICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmbG93cyAoc2F2ZSBjbGljaywgdmFsdWUgY2hhbmdlcywgYnV0dG9uLWRyaXZlblxuICAgICAgICAgICAgLy8gdmFsaWRhdGVBbGwpIHN1cmZhY2UgZXJyb3IgVUkuIEJhc2VGaWVsZCBzZWxmLXZhbGlkYXRpb24gZHVyaW5nXG4gICAgICAgICAgICAvLyBpbml0aWFsIGxvYWQgbG9jYWxseSBzdXBwcmVzc2VzIG1hcmtlcnMgaW4gaXRzIG93biB0cnkvZmluYWxseSxcbiAgICAgICAgICAgIC8vIHNvIHRoaXMgcmUtZW5hYmxlIGRvZXNuJ3QgY2F1c2UgYSBsb2FkLXRpbWUgZmxhc2ggZm9yIGZpZWxkc1xuICAgICAgICAgICAgLy8gdGhhdCBtb3VudCBkdXJpbmcgdGhpcyBzYW1lIGVmZmVjdCBjeWNsZS4gQXN5bmMgZGF0YSBhcnJpdmluZ1xuICAgICAgICAgICAgLy8gbGF0ZXIgd2lsbCByZS12YWxpZGF0ZSB2aWEgQmFzZUZpZWxkJ3MgW3Byb3BzLnZhbHVlcywgY29uZmlnXVxuICAgICAgICAgICAgLy8gdXNlRWZmZWN0LCB3aGljaCBhbHNvIGxvY2FsbHkgc3VwcHJlc3NlcyBtYXJrZXJzLlxuICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLmVuYWJsZUZvcm1NYXJrZXJzKHRydWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50TWFuYWdlci5jbGVhckNvbXBvbmVudEV2ZW50TGlzdGVuZXJzKHByb3BzLmhhbmRsZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZykgJiYgIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXMocHJvcHMudmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgW3Byb3BzLmNvbmZpZywgcHJvcHMudmFsdWVzXSk7XG5cbiAgICAgICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKG1hc3RlclZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVEYXRhQXJyaXZlZChtYXN0ZXJWYWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBbbWFzdGVyVmFsdWVzXSk7XG5cbiAgICAgICAgY29uc3QgZ2V0RmllbGRzRnJvbVRhYiA9ICh0YWIpID0+IHtcbiAgICAgICAgICAgIGxldCBmaWVsZHMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdGFiUGFnZSBvZiB0YWIudGFiUGFnZXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0YWJQYWdlLmNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudC50eXBlID09PSAnZm9ybVNlY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkc2V0IG9mIGNvbXBvbmVudC5jb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzID0gZmllbGRzLmNvbmNhdChmaWVsZHNldC5maWVsZHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybURhdGFPYmplY3QgPSAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgbGV0IGZvcm1WYWx1ZXMgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoYmluZGVyID09PSAnTUFQX09CSkVDVCcpIHtcbiAgICAgICAgICAgICAgICBmb3JtVmFsdWVzID0ge307XG5cbiAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBtYXAgPSBkYXRhLm1hcDtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChtYXApKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobWFwKTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdG9rZW5zID0gcHJvcGVydHkuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2byA9IGZvcm1WYWx1ZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdG9rZW5zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRva2VuID0gdG9rZW5zW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqIDwgdG9rZW5zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbCh2b1t0b2tlbl0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b1t0b2tlbl0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvID0gdm9bdG9rZW5dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvW3Rva2VuXSA9IG1hcFtwcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3JtVmFsdWVzID0gZGF0YTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZvcm1WYWx1ZXM7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gZG9DbGVhcigpIHtcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5lbmFibGVGb3JtTWFya2VycyhmYWxzZSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGZpZWxkc1tpXTtcbiAgICAgICAgICAgICAgICBmaWVsZC5oYW5kbGUuYXBpLmNsZWFyKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhbHVlcy5jdXJyZW50ID0ge307XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKHt9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMubW9kZWxDaGFuZ2VIYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgIHByb3BzLm1vZGVsQ2hhbmdlSGFuZGxlcih7fSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5lbmFibGVGb3JtTWFya2Vycyh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGRvQmluZERhdGEoZGF0YSkge1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBnZXRGaWVsZChrZXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmhhbmRsZS5hcGkudmFsdWUgPSBmaWVsZC5oYW5kbGUuYXBpLnBhcnNlVmFsdWUoZGF0YVtrZXldLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVmFsdWVzKGRhdGEpIHtcbiAgICAgICAgICAgIGxldCBwYXJzZWRWYWx1ZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZpZWxkID0gZmllbGRzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwYXRoID0gZ2V0VmFsdWVQYXRoKGZpZWxkLmlkLCBwYXJzZWRWYWx1ZXMpO1xuICAgICAgICAgICAgICAgIGxldCBvYmplY3RWYWx1ZSA9IHBhdGgudmFsdWVPYmplY3RbcGF0aC52YWx1ZVByb3BlcnR5XTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWVsZC5oYW5kbGUuYXBpKSkge1xuICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlT2JqZWN0W3BhdGgudmFsdWVQcm9wZXJ0eV0gPSBmaWVsZC5oYW5kbGUuYXBpLnBhcnNlVmFsdWUob2JqZWN0VmFsdWUsIHRydWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ05VTEwgZmllbGQgcmVmZXJlbmNlIHdoaWxlIHBhcnNpbmcgZm9ybSB2YWx1ZSAtICcgKyBmaWVsZC5pZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YWx1ZXMuY3VycmVudCA9IHBhcnNlZFZhbHVlcztcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLmRhdGFBcnJpdmVkSGFuZGxlcikpIHtcbiAgICAgICAgICAgICAgICBwcm9wcy5kYXRhQXJyaXZlZEhhbmRsZXIocGFyc2VkVmFsdWVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9pZiAoIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgICAgLy9wcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIocGFyc2VkVmFsdWVzKTtcbiAgICAgICAgICAgIC8vfVxuICAgICAgICB9XG5cbiAgICAgICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBwYXJzZVZhbHVlcyhwcm9wcy52YWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBbcHJvcHMudmFsdWVzXSk7XG5cbiAgICAgICAgY29uc3QgZ2V0RmllbGQgPSAoaWQpID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkc1tpXS5pZCA9PT0gaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlbW92ZUZpZWxkID0gKGlkKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbaV0uaWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGRWYWxpZGl0eS5jdXJyZW50LmRlbGV0ZShpZCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gZG9WYWxpZGF0ZVBhcmVudChmaWVsZCwgaW52YWxpZCwgdXBkYXRlRXJyb3JzID0gdHJ1ZSkge1xuXG4gICAgICAgICAgICBpZihmaWVsZCkge1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGZpZWxkPy5wYXJlbnRJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlzUGFyZW50SW52YWxpZCA9IGludmFsaWQ7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRzW2ldICE9PSBmaWVsZCAmJiBmaWVsZHNbaV0ucGFyZW50SWQgPT09IGZpZWxkLnBhcmVudElkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQYXJlbnRJbnZhbGlkID0gaXNQYXJlbnRJbnZhbGlkIHx8ICEoVXRpbHMuaXNOdWxsKGZpZWxkc1tpXS5lcnJvcikgfHwgZmllbGRzW2ldLmVycm9yLmxlbmd0aCA9PT0gMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmaWVsZFBhcmVudEVycm9yc1tmaWVsZC5wYXJlbnRJZF0gPSBpc1BhcmVudEludmFsaWQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZUVycm9ycyAmJiAhVXRpbHMuaXNOdWxsKGNvbnRhaW5lckVycm9yQ2FsbGJhY2suY3VycmVudCkgJiYgYXBwbGljYXRpb25NYW5hZ2VyLmlzRm9ybU1hcmtlcnNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyRXJyb3JDYWxsYmFjay5jdXJyZW50KGZpZWxkUGFyZW50RXJyb3JzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmaWVsZFBhcmVudEVycm9ycztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbGlkYXRlRmllbGQgPSAoZmllbGQsIGlkLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGxvYWRpbmdSZWYuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC5lcnJvciA9IG51bGw7XG4gICAgICAgICAgICAgICAgbGV0IGludmFsaWQgPSBmaWVsZC5oYW5kbGUuYXBpLnZhbGlkYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgLi4udmFsdWVzLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgIFtpZF06IHZhbHVlXG4gICAgICAgICAgICAgICAgfSwgdmFsdWUpID09PSBmYWxzZTtcbiAgICAgICAgICAgICAgICBkb1ZhbGlkYXRlUGFyZW50KGZpZWxkLCBpbnZhbGlkKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBpbnZhbGlkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBnZXRWYWx1ZVBhdGggPSAoaWQsIHZhbHMpID0+IHtcbiAgICAgICAgICAgIGxldCBwYXRoID0ge307XG4gICAgICAgICAgICBsZXQgY3VycmVudFZhbHVlcyA9IHZhbHM7XG4gICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHZhbHMpKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlcyA9IHZhbHVlcy5jdXJyZW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChjdXJyZW50VmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGxldCB0b2tlbnMgPSBpZC5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgIGlmICh0b2tlbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3QgPSBjdXJyZW50VmFsdWVzO1xuICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlUHJvcGVydHkgPSB0b2tlbnNbMF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlbnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdm8gPSBjdXJyZW50VmFsdWVzO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZvW3Rva2Vuc1tpXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm8gPSB2b1t0b2tlbnNbaV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b1t0b2tlbnNbaV1dID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm8gPSB2b1t0b2tlbnNbaV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwodm8pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlT2JqZWN0ID0gdm87XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlUHJvcGVydHkgPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBkb0hhbmRsZUNoYW5nZSA9IChpZCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIGxldCBwYXRoID0gZ2V0VmFsdWVQYXRoKGlkLCBudWxsKTtcblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGF0aC52YWx1ZU9iamVjdCkgJiYgIVV0aWxzLmlzTnVsbChwYXRoLnZhbHVlUHJvcGVydHkpICYmIGxvYWRpbmdSZWYuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBwYXRoLnZhbHVlT2JqZWN0W3BhdGgudmFsdWVQcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBsZXQgaW52YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGdldEZpZWxkKGlkKTtcblxuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGZpZWxkKSkge1xuICAgICAgICAgICAgICAgICAgICBpbnZhbGlkID0gdmFsaWRhdGVGaWVsZChmaWVsZCwgaWQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBncm91cEZpZWxkID0gZmllbGRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbGlkYXRpb25Hcm91cCA9IGdyb3VwRmllbGQuaGFuZGxlLmFwaS5nZXRWYWxpZGF0aW9uR3JvdXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZhbGlkYXRpb25Hcm91cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQgIT09IGdyb3VwRmllbGQgJiYgdmFsaWRhdGlvbkdyb3VwID09PSBmaWVsZC5oYW5kbGUuYXBpLmdldFZhbGlkYXRpb25Hcm91cCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBncm91cEZpZWxkSWQgPSBncm91cEZpZWxkLmhhbmRsZS5hcGkuaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBncmlkRmllbGRQYXRoID0gZ2V0VmFsdWVQYXRoKGdyb3VwRmllbGRJZCwgbnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZ3JpZEZpZWxkUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBncm91cEZpZWxkVmFsID0gZ3JpZEZpZWxkUGF0aC52YWx1ZU9iamVjdFtncmlkRmllbGRQYXRoLnZhbHVlUHJvcGVydHldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1JFLVZhbGlkYXRpbmcgZm9ybScsIGdyb3VwRmllbGRWYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVGaWVsZChncm91cEZpZWxkLCBncm91cEZpZWxkSWQsIGdyb3VwRmllbGRWYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIoaW52YWxpZCA/IG51bGwgOiB2YWx1ZXMuY3VycmVudCwgaWQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy5tb2RlbENoYW5nZUhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLm1vZGVsQ2hhbmdlSGFuZGxlcih2YWx1ZXMuY3VycmVudCwgaWQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5lbmFibGVGb3JtTWFya2VycyhmYWxzZSk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIucHJvY2Vzc1N5c3RlbUdlbmVyYXRlZFN1YnNjcmlwdGlvbnMocHJvcHMuY29uZmlnLmlkKTtcblxuICAgICAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KHByb3BzLmhhbmRsZSwgcHJvcHMudmlld0lkLCB2YWx1ZXMuY3VycmVudCk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5WQUxVRV9DSEFOR0UsIGV2ZW50KTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBzZXRGaWVsZEVycm9yID0gKGlkLCBlcnJvcikgPT4ge1xuICAgICAgICAgICAgbGV0IGZpZWxkID0gZ2V0RmllbGQoaWQpO1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBhZGRGaWVsZCA9IChpZCwgaGFuZGxlLCBwYXJlbnRJZCwgYmluZFZhbHVlVG9Gb3JtKSA9PiB7XG4gICAgICAgICAgICBsZXQgZmllbGQgPSBnZXRGaWVsZChpZCk7XG4gICAgICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IGZpZWxkLmVycm9yO1xuICAgICAgICAgICAgICAgIHJlbW92ZUZpZWxkKGlkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmllbGQgPSB7fTtcbiAgICAgICAgICAgIGZpZWxkLmlkID0gaWQ7XG4gICAgICAgICAgICBmaWVsZC5oYW5kbGUgPSBoYW5kbGU7XG4gICAgICAgICAgICBmaWVsZC5lcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgZmllbGQuYmluZFZhbHVlVG9Gb3JtID0gYmluZFZhbHVlVG9Gb3JtO1xuICAgICAgICAgICAgZmllbGQucGFyZW50SWQgPSBwYXJlbnRJZDtcbiAgICAgICAgICAgIGZpZWxkcy5wdXNoKGZpZWxkKTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlcy5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXModmFsdWVzLmN1cnJlbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGFuZGxlU2VsZWN0SXRlbUNoYW5nZSA9IChuYW1lLCBvcHRpb25zLCBzZWxlY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHR5cGVvZiBzZWxlY3Rpb24gPT09ICdvYmplY3QnICYmIChVdGlscy5pc051bGwob3B0aW9ucykgfHwgb3B0aW9ucy5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHNlbGVjdGVkVmFsdWUgPSBudWxsO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uc1tpXS5pZCA9PT0gc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkVmFsdWUgPSBvcHRpb25zW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZG9IYW5kbGVDaGFuZ2UobmFtZSwgc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRWYWx1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCB1cGRhdGVWYWx1ZSA9IChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgcHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKHtcbiAgICAgICAgICAgICAgICAuLi52YWx1ZXMuY3VycmVudCxcbiAgICAgICAgICAgICAgICBbbmFtZV06IHZhbHVlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYocHJvcHMubW9kZWxDaGFuZ2VIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMubW9kZWxDaGFuZ2VIYW5kbGVyKHtcbiAgICAgICAgICAgICAgICAgICAgLi4udmFsdWVzLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXTogdmFsdWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiByZW5kZXIoZm9ybSkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAoVXRpbHMuaXNOdWxsKGZvcm0uc2VjdGlvbnMpIHx8IGZvcm0uc2VjdGlvbnMubGVuZ3RoID09PSAwKSA/XG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uc2VjdGlvbnMubWFwKChzZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwoc2VjdGlvbi5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uaWQgPSBzZWN0aW9uQ291bnRlciArICctZm9ybS1zZWN0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IGtleT17c2VjdGlvbkNvdW50ZXIrK30+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VjdGlvbiBrZXlIYW5kbGVyPXtwcm9wcy5rZXlIYW5kbGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnPXtzZWN0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLmRpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlPXtjcmVhdGVTZWN0aW9uSGFuZGxlKHNlY3Rpb24pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybT17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhVXRpbHMuaXNOdWxsKHByb3BzLmhhbmRsZS5hcGkpID8gcHJvcHMuaGFuZGxlLmFwaSA6IGFwaSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJZD17cHJvcHMudmlld0lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPXt2YWx1ZXMuY3VycmVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdmlzaWJsZSAmJlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3Byb3BzLmNsYXNzTmFtZX0gaWQ9e3Byb3BzLmNvbmZpZy5pZH0gc3R5bGU9e1xuICAgICAgICAgICAgICAgIHByb3BzLmNsYXNzTmFtZSA9PT0gJ2RlZmF1bHRGb3JtJyA/XG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLm1lcmdlU3R5bGVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICcxNnB4IDAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAnMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2F1dG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiAnNzB2aCdcbiAgICAgICAgICAgICAgICAgICAgfSwgcHJvcHMuY29uZmlnKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgIH0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAhVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZy5pZCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyKHByb3BzLmNvbmZpZylcbiAgICAgICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+RVJST1I6IEEgZm9ybSBtdXN0IGhhdmUgYW4gSUQ8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj4pO1xuICAgIH0pXG47XG5cbmV4cG9ydCBkZWZhdWx0IEZvcm07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFDLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNELElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE1BQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLFFBQUEsR0FBQUosc0JBQUEsQ0FBQUMs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
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.default = void 0;
|
|
6
|
+
exports.default = exports.REJOIN_ALERT_MESSAGE = void 0;
|
|
7
|
+
exports.isRtpCollisionError = isRtpCollisionError;
|
|
7
8
|
var _mediasoupClient = require("mediasoup-client");
|
|
8
9
|
var _VCEventType = require("./VCEventType");
|
|
9
10
|
var _SocketManager = _interopRequireDefault(require("../SocketManager"));
|
|
@@ -12,6 +13,20 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
12
13
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
13
14
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
14
15
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
16
|
+
// A recycled m-section can make Chrome reject the SDP with an RTP header-extension id
|
|
17
|
+
// collision (video-orientation vs transport-wide-cc). It surfaces as InvalidAccessError
|
|
18
|
+
// (consume / setRemoteDescription) or OperationError (produce / createOffer) and is fatal
|
|
19
|
+
// for that RTCPeerConnection — the only reliable recovery is for the user to rejoin.
|
|
20
|
+
function isRtpCollisionError(e) {
|
|
21
|
+
if (!e) return false;
|
|
22
|
+
const name = e.name || '';
|
|
23
|
+
const message = e.message || '';
|
|
24
|
+
return name === 'InvalidAccessError' || name === 'OperationError' || /RTP extension ID reassignment|collision on active MID/i.test(message);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// User-facing prompt fired (via SYSTEM_ALERT) when a fatal media error is detected, so the
|
|
28
|
+
// meeting UI can ask the participant to leave, refresh and rejoin.
|
|
29
|
+
const REJOIN_ALERT_MESSAGE = exports.REJOIN_ALERT_MESSAGE = "A media connection error occurred. Please leave the meeting, refresh your browser, and rejoin.";
|
|
15
30
|
class MediaSoupHelper {
|
|
16
31
|
constructor() {
|
|
17
32
|
_defineProperty(this, "getParticipantDevice", async routerRtpCapabilities => {
|
|
@@ -68,6 +83,13 @@ class MediaSoupHelper {
|
|
|
68
83
|
};
|
|
69
84
|
} catch (e) {
|
|
70
85
|
console.error(e);
|
|
86
|
+
if (isRtpCollisionError(e)) {
|
|
87
|
+
_VCEventManager.default.fireEvent(_VCEventType.VCEventType.SYSTEM_ALERT, {
|
|
88
|
+
payload: {
|
|
89
|
+
message: REJOIN_ALERT_MESSAGE
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}
|
|
71
93
|
}
|
|
72
94
|
}
|
|
73
95
|
}
|
|
@@ -203,4 +225,4 @@ class MediaSoupHelper {
|
|
|
203
225
|
const instance = new MediaSoupHelper();
|
|
204
226
|
Object.freeze(instance);
|
|
205
227
|
var _default = exports.default = instance;
|
|
206
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWVkaWFzb3VwQ2xpZW50IiwicmVxdWlyZSIsIl9WQ0V2ZW50VHlwZSIsIl9Tb2NrZXRNYW5hZ2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9WQ0V2ZW50TWFuYWdlciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIl9kZWZpbmVQcm9wZXJ0eSIsInIiLCJ0IiwiX3RvUHJvcGVydHlLZXkiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIk1lZGlhU291cEhlbHBlciIsImNvbnN0cnVjdG9yIiwicm91dGVyUnRwQ2FwYWJpbGl0aWVzIiwiZGV2aWNlIiwiRGV2aWNlIiwiZXJyb3IiLCJjb25zb2xlIiwiRXJyb3IiLCJsb2FkIiwicHJvZHVjZXJJZCIsInJ0cENhcGFiaWxpdGllcyIsImNvbnN1bWVyVHJhbnNwb3J0Iiwicm9vbUlkIiwidXNlcklkIiwidHlwZSIsImxvZyIsImRhdGEiLCJzb2NrZXRNYW5hZ2VyIiwiZW1pdEV2ZW50IiwiVkNFdmVudFR5cGUiLCJDT05TVU1FIiwiY29uc3VtZXJUcmFuc3BvcnRJZCIsImlkIiwia2luZCIsInBhcmFtcyIsInJ0cFBhcmFtZXRlcnMiLCJjb2RlY09wdGlvbnMiLCJjb25zdW1lciIsImNvbnN1bWUiLCJzdHJlYW0iLCJNZWRpYVN0cmVhbSIsImFkZFRyYWNrIiwidHJhY2siLCJpbml0Q29uc3VtZXJUcmFuc3BvcnQiLCJsYWJlbCIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsInRvVXBwZXJDYXNlIiwiQ1JFQVRFX1dFQlJUQ19UUkFOU1BPUlQiLCJmb3JjZVRjcCIsInZjQXBwTWFuYWdlciIsImZpcmVFdmVudCIsIkNSRUFURV9UUkFOU1BPUlRfRkFJTEVEIiwic3RhdHVzIiwiY3JlYXRlUmVjdlRyYW5zcG9ydCIsIm9uIiwiX3JlZiIsImNhbGxiYWNrIiwiZXJyYmFjayIsImR0bHNQYXJhbWV0ZXJzIiwiQ09OTkVDVF9UUkFOU1BPUlQiLCJ0cmFuc3BvcnRJZCIsInRoZW4iLCJjYXRjaCIsImJpbmQiLCJzdGF0ZSIsIkNPTlNVTUVSX1RSQU5TUE9SVF9GQUlMRUQiLCJpbml0UHJvZHVjZXJUcmFuc3BvcnQiLCJwcm9kdWNlclRyYW5zcG9ydCIsImNyZWF0ZVNlbmRUcmFuc3BvcnQiLCJfcmVmMiIsIl9yZWYzIiwiYXBwRGF0YSIsIlBST0RVQ0UiLCJwcm9kdWNlclRyYW5zcG9ydElkIiwiZXJyIiwiUFJPRFVDRVJfVFJBTlNQT1JUX0ZBSUxFRCIsImNsb3NlIiwiaW5zdGFuY2UiLCJmcmVlemUiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbWVkaWEvTWVkaWFTb3VwSGVscGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGV2aWNlfSBmcm9tIFwibWVkaWFzb3VwLWNsaWVudFwiO1xuaW1wb3J0IHtWQ0V2ZW50VHlwZX0gZnJvbSBcIi4vVkNFdmVudFR5cGVcIjtcbmltcG9ydCBzb2NrZXRNYW5hZ2VyIGZyb20gXCIuLi9Tb2NrZXRNYW5hZ2VyXCI7XG5pbXBvcnQgdmNBcHBNYW5hZ2VyIGZyb20gXCIuL1ZDRXZlbnRNYW5hZ2VyXCI7XG5cbmNsYXNzIE1lZGlhU291cEhlbHBlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgfVxuXG4gICAgZ2V0UGFydGljaXBhbnREZXZpY2UgPSBhc3luYyAocm91dGVyUnRwQ2FwYWJpbGl0aWVzKSA9PiB7XG4gICAgICAgIGxldCBkZXZpY2U7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRldmljZSA9IG5ldyBEZXZpY2UoKVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG5ldyBEZXZpY2UoKSB0aHJvd3Mgb24gdW5zdXBwb3J0ZWQgYnJvd3NlcnMg4oCUIGJhaWwgd2l0aCBhIGNsZWFyIGVycm9yXG4gICAgICAgIC8vIGluc3RlYWQgb2YgZGVyZWZlcmVuY2luZyB1bmRlZmluZWQgb24gdGhlIG5leHQgbGluZS5cbiAgICAgICAgaWYgKCFkZXZpY2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWVkaWFzb3VwIERldmljZSBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlcicpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgZGV2aWNlLmxvYWQoe1xuICAgICAgICAgICAgcm91dGVyUnRwQ2FwYWJpbGl0aWVzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBkZXZpY2VcbiAgICB9O1xuXG4gICAgYXN5bmMgaW5pdENvbnN1bWVyVHJhbnNwb3J0KGRldmljZSwgcm9vbUlkLCB1c2VySWQsIGxhYmVsID0gJycpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJDUkVBVElORyBcIiArIChsYWJlbCA/IGxhYmVsLnRvVXBwZXJDYXNlKCkgKyBcIiBcIiA6IFwiXCIpICsgXCJDT05TVU1FUiBUUkFOU1BPUlQgRk9SIDogXCIgKyB1c2VySWQgKyBcIiBST09NIFwiICsgcm9vbUlkKTtcbiAgICAgICAgbGV0IGRhdGEgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZGF0YSA9IGF3YWl0IHNvY2tldE1hbmFnZXIuZW1pdEV2ZW50KFZDRXZlbnRUeXBlLkNSRUFURV9XRUJSVENfVFJBTlNQT1JULCB7XG4gICAgICAgICAgICAgICAgZm9yY2VUY3A6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICAgICAgICByb29tSWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB2Y0FwcE1hbmFnZXIuZmlyZUV2ZW50KFZDRXZlbnRUeXBlLkNSRUFURV9UUkFOU1BPUlRfRkFJTEVELCB7fSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRhdGEgfHwgZGF0YS5zdGF0dXMgPT09ICdFUlJPUicpIHtcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihkYXRhLmVycm9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmNBcHBNYW5hZ2VyLmZpcmVFdmVudChWQ0V2ZW50VHlwZS5DUkVBVEVfVFJBTlNQT1JUX0ZBSUxFRCwge30pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNvbnN1bWVyVHJhbnNwb3J0ID0gZGV2aWNlLmNyZWF0ZVJlY3ZUcmFuc3BvcnQoZGF0YS5wYXJhbXMpO1xuICAgICAgICBjb25zdW1lclRyYW5zcG9ydC5vbihcbiAgICAgICAgICAgICdjb25uZWN0JyxcbiAgICAgICAgICAgIGZ1bmN0aW9uICh7ZHRsc1BhcmFtZXRlcnN9LCBjYWxsYmFjaywgZXJyYmFjaykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ09OU1VNRVIgQ09OTkVDVCBEVExTIFBBUkFNUyA6IFwiLCBkdGxzUGFyYW1ldGVycyk7XG4gICAgICAgICAgICAgICAgc29ja2V0TWFuYWdlci5lbWl0RXZlbnQoVkNFdmVudFR5cGUuQ09OTkVDVF9UUkFOU1BPUlQsIHtcbiAgICAgICAgICAgICAgICAgICAgZHRsc1BhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydElkOiBkYXRhLnBhcmFtcy5pZCxcbiAgICAgICAgICAgICAgICAgICAgdXNlcklkLFxuICAgICAgICAgICAgICAgICAgICByb29tSWRcbiAgICAgICAgICAgICAgICB9KS50aGVuKGNhbGxiYWNrKVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZXJyYmFjayk7XG4gICAgICAgICAgICB9LmJpbmQodGhpcylcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdW1lclRyYW5zcG9ydC5vbihcbiAgICAgICAgICAgICdjb25uZWN0aW9uc3RhdGVjaGFuZ2UnLFxuICAgICAgICAgICAgYXN5bmMgZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChzdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdjb25uZWN0aW5nJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICB2Y0FwcE1hbmFnZXIuZmlyZUV2ZW50KFZDRXZlbnRUeXBlLkNPTlNVTUVSX1RSQU5TUE9SVF9GQUlMRUQsIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LmJpbmQodGhpcylcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gY29uc3VtZXJUcmFuc3BvcnQ7XG4gICAgfVxuXG4gICAgYXN5bmMgaW5pdFByb2R1Y2VyVHJhbnNwb3J0KGRldmljZSwgcm9vbUlkLCB1c2VySWQpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJDUkVBVElORyBQUk9EVUNFUiBUUkFOU1BPUlQgRk9SIDogXCIgKyB1c2VySWQgKyBcIiBST09NIDogXCIgKyByb29tSWQpO1xuICAgICAgICBsZXQgZGF0YSA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkYXRhID0gYXdhaXQgc29ja2V0TWFuYWdlci5lbWl0RXZlbnQoVkNFdmVudFR5cGUuQ1JFQVRFX1dFQlJUQ19UUkFOU1BPUlQsIHtcbiAgICAgICAgICAgICAgICBmb3JjZVRjcDogZmFsc2UsXG4gICAgICAgICAgICAgICAgcnRwQ2FwYWJpbGl0aWVzOiBkZXZpY2UucnRwQ2FwYWJpbGl0aWVzLFxuICAgICAgICAgICAgICAgIHJvb21JZCxcbiAgICAgICAgICAgICAgICB1c2VySWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB2Y0FwcE1hbmFnZXIuZmlyZUV2ZW50KFZDRXZlbnRUeXBlLkNSRUFURV9UUkFOU1BPUlRfRkFJTEVELCB7fSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRhdGEgfHwgZGF0YS5zdGF0dXMgPT09ICdFUlJPUicpIHtcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihkYXRhLmVycm9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmNBcHBNYW5hZ2VyLmZpcmVFdmVudChWQ0V2ZW50VHlwZS5DUkVBVEVfVFJBTlNQT1JUX0ZBSUxFRCwge30pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHByb2R1Y2VyVHJhbnNwb3J0ID0gZGV2aWNlLmNyZWF0ZVNlbmRUcmFuc3BvcnQoZGF0YS5wYXJhbXMpO1xuICAgICAgICBwcm9kdWNlclRyYW5zcG9ydC5vbihcbiAgICAgICAgICAgICdjb25uZWN0JyxcbiAgICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uICh7ZHRsc1BhcmFtZXRlcnN9LCBjYWxsYmFjaywgZXJyYmFjaykge1xuICAgICAgICAgICAgICAgIHNvY2tldE1hbmFnZXIuZW1pdEV2ZW50KFZDRXZlbnRUeXBlLkNPTk5FQ1RfVFJBTlNQT1JULCB7XG4gICAgICAgICAgICAgICAgICAgIGR0bHNQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRJZDogZGF0YS5wYXJhbXMuaWQsXG4gICAgICAgICAgICAgICAgICAgIHJvb21JZCxcbiAgICAgICAgICAgICAgICAgICAgdXNlcklkXG4gICAgICAgICAgICAgICAgfSkudGhlbihjYWxsYmFjaylcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGVycmJhY2spO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXG4gICAgICAgICk7XG5cbiAgICAgICAgcHJvZHVjZXJUcmFuc3BvcnQub24oXG4gICAgICAgICAgICAncHJvZHVjZScsXG4gICAgICAgICAgICBhc3luYyBmdW5jdGlvbiAoe2tpbmQsIHJ0cFBhcmFtZXRlcnMsIGFwcERhdGF9LCBjYWxsYmFjaywgZXJyYmFjaykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHtwcm9kdWNlcklkfSA9IGF3YWl0IHNvY2tldE1hbmFnZXIuZW1pdEV2ZW50KFZDRXZlbnRUeXBlLlBST0RVQ0UsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2VyVHJhbnNwb3J0SWQ6IHByb2R1Y2VyVHJhbnNwb3J0LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAga2luZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ0cFBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICByb29tSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VySWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBEYXRhXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBwcm9kdWNlcklkXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycmJhY2soZXJyKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzKVxuICAgICAgICApO1xuXG4gICAgICAgIHByb2R1Y2VyVHJhbnNwb3J0Lm9uKFxuICAgICAgICAgICAgJ2Nvbm5lY3Rpb25zdGF0ZWNoYW5nZScsXG4gICAgICAgICAgICBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Nvbm5lY3RpbmcnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1pcnJvciB0aGUgY29uc3VtZXIgdHJhbnNwb3J0OiBzdXJmYWNlIHRoZSBmYWlsdXJlIChzbyB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJvb20gY2FuIHJlYWN0L3JlY292ZXIpIGluc3RlYWQgb2YgY2xvc2luZyBzaWxlbnRseS5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BST0RVQ0VSIFRSQU5TUE9SVCBGQUlMRUQgZm9yICcgKyB1c2VySWQgKyAnIHJvb20gJyArIHJvb21JZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2Y0FwcE1hbmFnZXIuZmlyZUV2ZW50KFZDRXZlbnRUeXBlLlBST0RVQ0VSX1RSQU5TUE9SVF9GQUlMRUQsIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2VyVHJhbnNwb3J0LmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHByb2R1Y2VyVHJhbnNwb3J0O1xuICAgIH1cblxuICAgIGdldENvbnN1bWVTdHJlYW0gPSBhc3luYyAocHJvZHVjZXJJZCwgcnRwQ2FwYWJpbGl0aWVzLCBjb25zdW1lclRyYW5zcG9ydCwgcm9vbUlkLCB1c2VySWQsIHR5cGUpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCJDT05TVU1JTkcgRlJPTSA6IFwiICsgcHJvZHVjZXJJZCArIFwiIFJPT00gOiBcIiArIHJvb21JZCk7XG5cbiAgICAgICAgaWYgKGNvbnN1bWVyVHJhbnNwb3J0KSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgc29ja2V0TWFuYWdlci5lbWl0RXZlbnQoVkNFdmVudFR5cGUuQ09OU1VNRSwge1xuICAgICAgICAgICAgICAgIHJ0cENhcGFiaWxpdGllcyxcbiAgICAgICAgICAgICAgICBjb25zdW1lclRyYW5zcG9ydElkOiBjb25zdW1lclRyYW5zcG9ydC5pZCxcbiAgICAgICAgICAgICAgICBwcm9kdWNlcklkLFxuICAgICAgICAgICAgICAgIHJvb21JZCxcbiAgICAgICAgICAgICAgICB1c2VySWQsXG4gICAgICAgICAgICAgICAga2luZDogdHlwZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLnBhcmFtcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHtpZCwga2luZCwgcnRwUGFyYW1ldGVyc30gPSBkYXRhLnBhcmFtcztcblxuICAgICAgICAgICAgICAgIGxldCBjb2RlY09wdGlvbnMgPSB7fTtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnN1bWVyID0gYXdhaXQgY29uc3VtZXJUcmFuc3BvcnQuY29uc3VtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2VySWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBraW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgcnRwUGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVjT3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjb25zdW1lcik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmVhbSA9IG5ldyBNZWRpYVN0cmVhbSgpO1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW0uYWRkVHJhY2soY29uc3VtZXIudHJhY2spO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtpbmRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge307XG4gICAgfVxufVxuXG5jb25zdCBpbnN0YW5jZSA9IG5ldyBNZWRpYVNvdXBIZWxwZXIoKTtcbk9iamVjdC5mcmVlemUoaW5zdGFuY2UpO1xuZXhwb3J0IGRlZmF1bHQgaW5zdGFuY2U7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLGdCQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxZQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxjQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxlQUFBLEdBQUFELHNCQUFBLENBQUFILE9BQUE7QUFBNEMsU0FBQUcsdUJBQUFFLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFB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
|
|
228
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWVkaWFzb3VwQ2xpZW50IiwicmVxdWlyZSIsIl9WQ0V2ZW50VHlwZSIsIl9Tb2NrZXRNYW5hZ2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9WQ0V2ZW50TWFuYWdlciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIl9kZWZpbmVQcm9wZXJ0eSIsInIiLCJ0IiwiX3RvUHJvcGVydHlLZXkiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsImlzUnRwQ29sbGlzaW9uRXJyb3IiLCJuYW1lIiwibWVzc2FnZSIsInRlc3QiLCJSRUpPSU5fQUxFUlRfTUVTU0FHRSIsImV4cG9ydHMiLCJNZWRpYVNvdXBIZWxwZXIiLCJjb25zdHJ1Y3RvciIsInJvdXRlclJ0cENhcGFiaWxpdGllcyIsImRldmljZSIsIkRldmljZSIsImVycm9yIiwiY29uc29sZSIsIkVycm9yIiwibG9hZCIsInByb2R1Y2VySWQiLCJydHBDYXBhYmlsaXRpZXMiLCJjb25zdW1lclRyYW5zcG9ydCIsInJvb21JZCIsInVzZXJJZCIsInR5cGUiLCJsb2ciLCJkYXRhIiwic29ja2V0TWFuYWdlciIsImVtaXRFdmVudCIsIlZDRXZlbnRUeXBlIiwiQ09OU1VNRSIsImNvbnN1bWVyVHJhbnNwb3J0SWQiLCJpZCIsImtpbmQiLCJwYXJhbXMiLCJydHBQYXJhbWV0ZXJzIiwiY29kZWNPcHRpb25zIiwiY29uc3VtZXIiLCJjb25zdW1lIiwic3RyZWFtIiwiTWVkaWFTdHJlYW0iLCJhZGRUcmFjayIsInRyYWNrIiwidmNBcHBNYW5hZ2VyIiwiZmlyZUV2ZW50IiwiU1lTVEVNX0FMRVJUIiwicGF5bG9hZCIsImluaXRDb25zdW1lclRyYW5zcG9ydCIsImxhYmVsIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwidG9VcHBlckNhc2UiLCJDUkVBVEVfV0VCUlRDX1RSQU5TUE9SVCIsImZvcmNlVGNwIiwiQ1JFQVRFX1RSQU5TUE9SVF9GQUlMRUQiLCJzdGF0dXMiLCJjcmVhdGVSZWN2VHJhbnNwb3J0Iiwib24iLCJfcmVmIiwiY2FsbGJhY2siLCJlcnJiYWNrIiwiZHRsc1BhcmFtZXRlcnMiLCJDT05ORUNUX1RSQU5TUE9SVCIsInRyYW5zcG9ydElkIiwidGhlbiIsImNhdGNoIiwiYmluZCIsInN0YXRlIiwiQ09OU1VNRVJfVFJBTlNQT1JUX0ZBSUxFRCIsImluaXRQcm9kdWNlclRyYW5zcG9ydCIsInByb2R1Y2VyVHJhbnNwb3J0IiwiY3JlYXRlU2VuZFRyYW5zcG9ydCIsIl9yZWYyIiwiX3JlZjMiLCJhcHBEYXRhIiwiUFJPRFVDRSIsInByb2R1Y2VyVHJhbnNwb3J0SWQiLCJlcnIiLCJQUk9EVUNFUl9UUkFOU1BPUlRfRkFJTEVEIiwiY2xvc2UiLCJpbnN0YW5jZSIsImZyZWV6ZSIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL21lZGlhL01lZGlhU291cEhlbHBlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RldmljZX0gZnJvbSBcIm1lZGlhc291cC1jbGllbnRcIjtcbmltcG9ydCB7VkNFdmVudFR5cGV9IGZyb20gXCIuL1ZDRXZlbnRUeXBlXCI7XG5pbXBvcnQgc29ja2V0TWFuYWdlciBmcm9tIFwiLi4vU29ja2V0TWFuYWdlclwiO1xuaW1wb3J0IHZjQXBwTWFuYWdlciBmcm9tIFwiLi9WQ0V2ZW50TWFuYWdlclwiO1xuXG4vLyBBIHJlY3ljbGVkIG0tc2VjdGlvbiBjYW4gbWFrZSBDaHJvbWUgcmVqZWN0IHRoZSBTRFAgd2l0aCBhbiBSVFAgaGVhZGVyLWV4dGVuc2lvbiBpZFxuLy8gY29sbGlzaW9uICh2aWRlby1vcmllbnRhdGlvbiB2cyB0cmFuc3BvcnQtd2lkZS1jYykuIEl0IHN1cmZhY2VzIGFzIEludmFsaWRBY2Nlc3NFcnJvclxuLy8gKGNvbnN1bWUgLyBzZXRSZW1vdGVEZXNjcmlwdGlvbikgb3IgT3BlcmF0aW9uRXJyb3IgKHByb2R1Y2UgLyBjcmVhdGVPZmZlcikgYW5kIGlzIGZhdGFsXG4vLyBmb3IgdGhhdCBSVENQZWVyQ29ubmVjdGlvbiDigJQgdGhlIG9ubHkgcmVsaWFibGUgcmVjb3ZlcnkgaXMgZm9yIHRoZSB1c2VyIHRvIHJlam9pbi5cbmV4cG9ydCBmdW5jdGlvbiBpc1J0cENvbGxpc2lvbkVycm9yKGUpIHtcbiAgICBpZiAoIWUpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBuYW1lID0gZS5uYW1lIHx8ICcnO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlLm1lc3NhZ2UgfHwgJyc7XG4gICAgcmV0dXJuIG5hbWUgPT09ICdJbnZhbGlkQWNjZXNzRXJyb3InIHx8IG5hbWUgPT09ICdPcGVyYXRpb25FcnJvcidcbiAgICAgICAgfHwgL1JUUCBleHRlbnNpb24gSUQgcmVhc3NpZ25tZW50fGNvbGxpc2lvbiBvbiBhY3RpdmUgTUlEL2kudGVzdChtZXNzYWdlKTtcbn1cblxuLy8gVXNlci1mYWNpbmcgcHJvbXB0IGZpcmVkICh2aWEgU1lTVEVNX0FMRVJUKSB3aGVuIGEgZmF0YWwgbWVkaWEgZXJyb3IgaXMgZGV0ZWN0ZWQsIHNvIHRoZVxuLy8gbWVldGluZyBVSSBjYW4gYXNrIHRoZSBwYXJ0aWNpcGFudCB0byBsZWF2ZSwgcmVmcmVzaCBhbmQgcmVqb2luLlxuZXhwb3J0IGNvbnN0IFJFSk9JTl9BTEVSVF9NRVNTQUdFID1cbiAgICBcIkEgbWVkaWEgY29ubmVjdGlvbiBlcnJvciBvY2N1cnJlZC4gUGxlYXNlIGxlYXZlIHRoZSBtZWV0aW5nLCByZWZyZXNoIHlvdXIgYnJvd3NlciwgYW5kIHJlam9pbi5cIjtcblxuY2xhc3MgTWVkaWFTb3VwSGVscGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICB9XG5cbiAgICBnZXRQYXJ0aWNpcGFudERldmljZSA9IGFzeW5jIChyb3V0ZXJSdHBDYXBhYmlsaXRpZXMpID0+IHtcbiAgICAgICAgbGV0IGRldmljZTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZGV2aWNlID0gbmV3IERldmljZSgpXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gbmV3IERldmljZSgpIHRocm93cyBvbiB1bnN1cHBvcnRlZCBicm93c2VycyDigJQgYmFpbCB3aXRoIGEgY2xlYXIgZXJyb3JcbiAgICAgICAgLy8gaW5zdGVhZCBvZiBkZXJlZmVyZW5jaW5nIHVuZGVmaW5lZCBvbiB0aGUgbmV4dCBsaW5lLlxuICAgICAgICBpZiAoIWRldmljZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtZWRpYXNvdXAgRGV2aWNlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyJyk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBkZXZpY2UubG9hZCh7XG4gICAgICAgICAgICByb3V0ZXJSdHBDYXBhYmlsaXRpZXNcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGRldmljZVxuICAgIH07XG5cbiAgICBhc3luYyBpbml0Q29uc3VtZXJUcmFuc3BvcnQoZGV2aWNlLCByb29tSWQsIHVzZXJJZCwgbGFiZWwgPSAnJykge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkNSRUFUSU5HIFwiICsgKGxhYmVsID8gbGFiZWwudG9VcHBlckNhc2UoKSArIFwiIFwiIDogXCJcIikgKyBcIkNPTlNVTUVSIFRSQU5TUE9SVCBGT1IgOiBcIiArIHVzZXJJZCArIFwiIFJPT00gXCIgKyByb29tSWQpO1xuICAgICAgICBsZXQgZGF0YSA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkYXRhID0gYXdhaXQgc29ja2V0TWFuYWdlci5lbWl0RXZlbnQoVkNFdmVudFR5cGUuQ1JFQVRFX1dFQlJUQ19UUkFOU1BPUlQsIHtcbiAgICAgICAgICAgICAgICBmb3JjZVRjcDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdXNlcklkLFxuICAgICAgICAgICAgICAgIHJvb21JZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHZjQXBwTWFuYWdlci5maXJlRXZlbnQoVkNFdmVudFR5cGUuQ1JFQVRFX1RSQU5TUE9SVF9GQUlMRUQsIHt9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGF0YSB8fCBkYXRhLnN0YXR1cyA9PT0gJ0VSUk9SJykge1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGRhdGEuZXJyb3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2Y0FwcE1hbmFnZXIuZmlyZUV2ZW50KFZDRXZlbnRUeXBlLkNSRUFURV9UUkFOU1BPUlRfRkFJTEVELCB7fSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY29uc3VtZXJUcmFuc3BvcnQgPSBkZXZpY2UuY3JlYXRlUmVjdlRyYW5zcG9ydChkYXRhLnBhcmFtcyk7XG4gICAgICAgIGNvbnN1bWVyVHJhbnNwb3J0Lm9uKFxuICAgICAgICAgICAgJ2Nvbm5lY3QnLFxuICAgICAgICAgICAgZnVuY3Rpb24gKHtkdGxzUGFyYW1ldGVyc30sIGNhbGxiYWNrLCBlcnJiYWNrKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDT05TVU1FUiBDT05ORUNUIERUTFMgUEFSQU1TIDogXCIsIGR0bHNQYXJhbWV0ZXJzKTtcbiAgICAgICAgICAgICAgICBzb2NrZXRNYW5hZ2VyLmVtaXRFdmVudChWQ0V2ZW50VHlwZS5DT05ORUNUX1RSQU5TUE9SVCwge1xuICAgICAgICAgICAgICAgICAgICBkdGxzUGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0SWQ6IGRhdGEucGFyYW1zLmlkLFxuICAgICAgICAgICAgICAgICAgICB1c2VySWQsXG4gICAgICAgICAgICAgICAgICAgIHJvb21JZFxuICAgICAgICAgICAgICAgIH0pLnRoZW4oY2FsbGJhY2spXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlcnJiYWNrKTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN1bWVyVHJhbnNwb3J0Lm9uKFxuICAgICAgICAgICAgJ2Nvbm5lY3Rpb25zdGF0ZWNoYW5nZScsXG4gICAgICAgICAgICBhc3luYyBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Nvbm5lY3RpbmcnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHZjQXBwTWFuYWdlci5maXJlRXZlbnQoVkNFdmVudFR5cGUuQ09OU1VNRVJfVFJBTlNQT1JUX0ZBSUxFRCwge30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzKVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBjb25zdW1lclRyYW5zcG9ydDtcbiAgICB9XG5cbiAgICBhc3luYyBpbml0UHJvZHVjZXJUcmFuc3BvcnQoZGV2aWNlLCByb29tSWQsIHVzZXJJZCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkNSRUFUSU5HIFBST0RVQ0VSIFRSQU5TUE9SVCBGT1IgOiBcIiArIHVzZXJJZCArIFwiIFJPT00gOiBcIiArIHJvb21JZCk7XG4gICAgICAgIGxldCBkYXRhID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRhdGEgPSBhd2FpdCBzb2NrZXRNYW5hZ2VyLmVtaXRFdmVudChWQ0V2ZW50VHlwZS5DUkVBVEVfV0VCUlRDX1RSQU5TUE9SVCwge1xuICAgICAgICAgICAgICAgIGZvcmNlVGNwOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBydHBDYXBhYmlsaXRpZXM6IGRldmljZS5ydHBDYXBhYmlsaXRpZXMsXG4gICAgICAgICAgICAgICAgcm9vbUlkLFxuICAgICAgICAgICAgICAgIHVzZXJJZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHZjQXBwTWFuYWdlci5maXJlRXZlbnQoVkNFdmVudFR5cGUuQ1JFQVRFX1RSQU5TUE9SVF9GQUlMRUQsIHt9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGF0YSB8fCBkYXRhLnN0YXR1cyA9PT0gJ0VSUk9SJykge1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGRhdGEuZXJyb3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2Y0FwcE1hbmFnZXIuZmlyZUV2ZW50KFZDRXZlbnRUeXBlLkNSRUFURV9UUkFOU1BPUlRfRkFJTEVELCB7fSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcHJvZHVjZXJUcmFuc3BvcnQgPSBkZXZpY2UuY3JlYXRlU2VuZFRyYW5zcG9ydChkYXRhLnBhcmFtcyk7XG4gICAgICAgIHByb2R1Y2VyVHJhbnNwb3J0Lm9uKFxuICAgICAgICAgICAgJ2Nvbm5lY3QnLFxuICAgICAgICAgICAgYXN5bmMgZnVuY3Rpb24gKHtkdGxzUGFyYW1ldGVyc30sIGNhbGxiYWNrLCBlcnJiYWNrKSB7XG4gICAgICAgICAgICAgICAgc29ja2V0TWFuYWdlci5lbWl0RXZlbnQoVkNFdmVudFR5cGUuQ09OTkVDVF9UUkFOU1BPUlQsIHtcbiAgICAgICAgICAgICAgICAgICAgZHRsc1BhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydElkOiBkYXRhLnBhcmFtcy5pZCxcbiAgICAgICAgICAgICAgICAgICAgcm9vbUlkLFxuICAgICAgICAgICAgICAgICAgICB1c2VySWRcbiAgICAgICAgICAgICAgICB9KS50aGVuKGNhbGxiYWNrKVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZXJyYmFjayk7XG4gICAgICAgICAgICB9LmJpbmQodGhpcylcbiAgICAgICAgKTtcblxuICAgICAgICBwcm9kdWNlclRyYW5zcG9ydC5vbihcbiAgICAgICAgICAgICdwcm9kdWNlJyxcbiAgICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uICh7a2luZCwgcnRwUGFyYW1ldGVycywgYXBwRGF0YX0sIGNhbGxiYWNrLCBlcnJiYWNrKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qge3Byb2R1Y2VySWR9ID0gYXdhaXQgc29ja2V0TWFuYWdlci5lbWl0RXZlbnQoVkNFdmVudFR5cGUuUFJPRFVDRSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjZXJUcmFuc3BvcnRJZDogcHJvZHVjZXJUcmFuc3BvcnQuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBraW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgcnRwUGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb21JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcERhdGFcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHByb2R1Y2VySWRcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyYmFjayhlcnIpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXG4gICAgICAgICk7XG5cbiAgICAgICAgcHJvZHVjZXJUcmFuc3BvcnQub24oXG4gICAgICAgICAgICAnY29ubmVjdGlvbnN0YXRlY2hhbmdlJyxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnY29ubmVjdGluZyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnY29ubmVjdGVkJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWlycm9yIHRoZSBjb25zdW1lciB0cmFuc3BvcnQ6IHN1cmZhY2UgdGhlIGZhaWx1cmUgKHNvIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcm9vbSBjYW4gcmVhY3QvcmVjb3ZlcikgaW5zdGVhZCBvZiBjbG9zaW5nIHNpbGVudGx5LlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignUFJPRFVDRVIgVFJBTlNQT1JUIEZBSUxFRCBmb3IgJyArIHVzZXJJZCArICcgcm9vbSAnICsgcm9vbUlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZjQXBwTWFuYWdlci5maXJlRXZlbnQoVkNFdmVudFR5cGUuUFJPRFVDRVJfVFJBTlNQT1JUX0ZBSUxFRCwge30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjZXJUcmFuc3BvcnQuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LmJpbmQodGhpcylcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gcHJvZHVjZXJUcmFuc3BvcnQ7XG4gICAgfVxuXG4gICAgZ2V0Q29uc3VtZVN0cmVhbSA9IGFzeW5jIChwcm9kdWNlcklkLCBydHBDYXBhYmlsaXRpZXMsIGNvbnN1bWVyVHJhbnNwb3J0LCByb29tSWQsIHVzZXJJZCwgdHlwZSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkNPTlNVTUlORyBGUk9NIDogXCIgKyBwcm9kdWNlcklkICsgXCIgUk9PTSA6IFwiICsgcm9vbUlkKTtcblxuICAgICAgICBpZiAoY29uc3VtZXJUcmFuc3BvcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBzb2NrZXRNYW5hZ2VyLmVtaXRFdmVudChWQ0V2ZW50VHlwZS5DT05TVU1FLCB7XG4gICAgICAgICAgICAgICAgcnRwQ2FwYWJpbGl0aWVzLFxuICAgICAgICAgICAgICAgIGNvbnN1bWVyVHJhbnNwb3J0SWQ6IGNvbnN1bWVyVHJhbnNwb3J0LmlkLFxuICAgICAgICAgICAgICAgIHByb2R1Y2VySWQsXG4gICAgICAgICAgICAgICAgcm9vbUlkLFxuICAgICAgICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICAgICAgICBraW5kOiB0eXBlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGRhdGEucGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qge2lkLCBraW5kLCBydHBQYXJhbWV0ZXJzfSA9IGRhdGEucGFyYW1zO1xuXG4gICAgICAgICAgICAgICAgbGV0IGNvZGVjT3B0aW9ucyA9IHt9O1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29uc3VtZXIgPSBhd2FpdCBjb25zdW1lclRyYW5zcG9ydC5jb25zdW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjZXJJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQsXG4gICAgICAgICAgICAgICAgICAgICAgICBydHBQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZWNPcHRpb25zXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNvbnN1bWVyKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyZWFtID0gbmV3IE1lZGlhU3RyZWFtKCk7XG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbS5hZGRUcmFjayhjb25zdW1lci50cmFjayk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAga2luZFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNSdHBDb2xsaXNpb25FcnJvcihlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmNBcHBNYW5hZ2VyLmZpcmVFdmVudChWQ0V2ZW50VHlwZS5TWVNURU1fQUxFUlQsIHtwYXlsb2FkOiB7bWVzc2FnZTogUkVKT0lOX0FMRVJUX01FU1NBR0V9fSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge307XG4gICAgfVxufVxuXG5jb25zdCBpbnN0YW5jZSA9IG5ldyBNZWRpYVNvdXBIZWxwZXIoKTtcbk9iamVjdC5mcmVlemUoaW5zdGFuY2UpO1xuZXhwb3J0IGRlZmF1bHQgaW5zdGFuY2U7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxnQkFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsWUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsY0FBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksZUFBQSxHQUFBRCxzQkFBQSxDQUFBSCxPQUFBO0FBQTRDLFNBQUFHLHVCQUFBRSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBQUEsU0FBQUcsZ0JBQUFILENBQUEsRUFBQUksQ0FBQSxFQUFBQyxDQUFBLFlBQUFELENBQUEsR0FBQUUsY0FBQSxDQUFBRixDQUFBLE1BQUFKLENBQUEsR0FBQU8sTUFBQSxDQUFBQyxjQUFBLENBQUFSLENBQUEsRUFBQUksQ0FBQSxJQUFBSyxLQUFBLEVBQUFKLENBQUEsRUFBQUssVUFBQSxNQUFBQyxZQUFBLE1BQUFDLFFBQUEsVUFBQVosQ0FBQSxDQUFBSSxDQUFBLElBQUFDLENBQUEsRUFBQUwsQ0FBQTtBQUFBLFNBQUFNLGVBQUFELENBQUEsUUFBQVEsQ0FBQSxHQUFBQyxZQUFBLENBQUFULENBQUEsdUNBQUFRLENBQUEsR0FBQUEsQ0FBQSxHQUFBQSxDQUFBO0FBQUEsU0FBQUMsYUFBQVQsQ0FBQSxFQUFBRCxDQUFBLDJCQUFBQyxDQUFBLEtBQUFBLENBQUEsU0FBQUEsQ0FBQSxNQUFBTCxDQUFBLEdBQUFLLENBQUEsQ0FBQVUsTUFBQSxDQUFBQyxXQUFBLGtCQUFBaEIsQ0FBQSxRQUFBYSxDQUFBLEdBQUFiLENBQUEsQ0FBQWlCLElBQUEsQ0FBQVosQ0FBQSxFQUFBRCxDQUFBLHVDQUFBUyxDQUFBLFNBQUFBLENBQUEsWUFBQUss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S0FBSyxDQUFDTCxPQUFPLENBQUM7SUFDdkIsQ0FBQyxDQUFDTSxJQUFJLENBQUMsSUFBSSxDQUNmLENBQUM7SUFFREksaUJBQWlCLENBQUNiLEVBQUUsQ0FDaEIsU0FBUyxFQUNULGdCQUFBZ0IsS0FBQSxFQUFnRGQsUUFBUSxFQUFFQyxPQUFPLEVBQUU7TUFBQSxJQUFuRDtRQUFDNUIsSUFBSTtRQUFFRSxhQUFhO1FBQUV3QztNQUFPLENBQUMsR0FBQUQsS0FBQTtNQUMxQyxJQUFJO1FBQ0EsTUFBTTtVQUFDdkQ7UUFBVSxDQUFDLEdBQUcsTUFBTVEsc0JBQWEsQ0FBQ0MsU0FBUyxDQUFDQyx3QkFBVyxDQUFDK0MsT0FBTyxFQUFFO1VBQ3BFQyxtQkFBbUIsRUFBRU4saUJBQWlCLENBQUN2QyxFQUFFO1VBQ3pDQyxJQUFJO1VBQ0pFLGFBQWE7VUFDYmIsTUFBTTtVQUNOQyxNQUFNO1VBQ05vRDtRQUNKLENBQUMsQ0FBQztRQUVGZixRQUFRLENBQUM7VUFDTDVCLEVBQUUsRUFBRWI7UUFDUixDQUFDLENBQUM7TUFDTixDQUFDLENBQUMsT0FBTzJELEdBQUcsRUFBRTtRQUNWakIsT0FBTyxDQUFDaUIsR0FBRyxDQUFDO01BQ2hCO0lBQ0osQ0FBQyxDQUFDWCxJQUFJLENBQUMsSUFBSSxDQUNmLENBQUM7SUFFREksaUJBQWlCLENBQUNiLEVBQUUsQ0FDaEIsdUJBQXVCLEVBQ3ZCLFVBQVVVLEtBQUssRUFBRTtNQUNiLFFBQVFBLEtBQUs7UUFDVCxLQUFLLFlBQVk7VUFDYjtRQUNKLEtBQUssV0FBVztVQUNaO1FBQ0osS0FBSyxRQUFRO1VBQ1Q7VUFDQTtVQUNBcEQsT0FBTyxDQUFDRCxLQUFLLENBQUMsZ0NBQWdDLEdBQUdRLE1BQU0sR0FBRyxRQUFRLEdBQUdELE1BQU0sQ0FBQztVQUM1RXFCLHVCQUFZLENBQUNDLFNBQVMsQ0FBQ2Ysd0JBQVcsQ0FBQ2tELHlCQUF5QixFQUFFLENBQUMsQ0FBQyxDQUFDO1VBQ2pFUixpQkFBaUIsQ0FBQ1MsS0FBSyxDQUFDLENBQUM7VUFDekI7UUFDSjtVQUNJO01BQ1I7SUFDSixDQUFDLENBQUNiLElBQUksQ0FBQyxJQUFJLENBQ2YsQ0FBQztJQUVELE9BQU9JLGlCQUFpQjtFQUM1QjtBQWlESjtBQUVBLE1BQU1VLFFBQVEsR0FBRyxJQUFJdkUsZUFBZSxDQUFDLENBQUM7QUFDdENwQixNQUFNLENBQUM0RixNQUFNLENBQUNELFFBQVEsQ0FBQztBQUFDLElBQUFFLFFBQUEsR0FBQTFFLE9BQUEsQ0FBQXhCLE9BQUEsR0FDVGdHLFFBQVEiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -10,7 +10,7 @@ var _Utils = _interopRequireDefault(require("../../Utils"));
|
|
|
10
10
|
var _VCEventType = require("./VCEventType");
|
|
11
11
|
var _VCEventManager = _interopRequireDefault(require("./VCEventManager"));
|
|
12
12
|
var _VCRoomRecorder = _interopRequireDefault(require("./VCRoomRecorder"));
|
|
13
|
-
var _MediaSoupHelper =
|
|
13
|
+
var _MediaSoupHelper = _interopRequireWildcard(require("./MediaSoupHelper"));
|
|
14
14
|
var _Tracks = _interopRequireDefault(require("./Tracks"));
|
|
15
15
|
var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
|
|
16
16
|
var _Icon = _interopRequireDefault(require("../Icon"));
|
|
@@ -176,24 +176,26 @@ const VCRoomParticipant = props => {
|
|
|
176
176
|
const onAVSettingsChange = payload => {
|
|
177
177
|
if (props.data.userId === payload.userId) {
|
|
178
178
|
if (props.isCurrentUser) {
|
|
179
|
+
// The icon must reflect the ACTUAL producer, not the requested state:
|
|
180
|
+
// - mute: flip the icon only once stopProducing confirms the producer is
|
|
181
|
+
// closed and the track stopped (its success callback) — so we never show
|
|
182
|
+
// "muted" while audio is still going out.
|
|
183
|
+
// - unmute: produce() flips the icon off only after the producer is created.
|
|
179
184
|
if (payload.audioMuted) {
|
|
180
|
-
stopProducing('audio');
|
|
181
|
-
} else {
|
|
182
|
-
|
|
183
|
-
produce('audio');
|
|
184
|
-
}
|
|
185
|
+
stopProducing('audio', () => setAudioMuted(true));
|
|
186
|
+
} else if (device) {
|
|
187
|
+
produce('audio');
|
|
185
188
|
}
|
|
186
189
|
if (payload.videoMuted) {
|
|
187
|
-
stopProducing('video');
|
|
188
|
-
} else {
|
|
189
|
-
|
|
190
|
-
produce('video');
|
|
191
|
-
}
|
|
190
|
+
stopProducing('video', () => setVideoMuted(true));
|
|
191
|
+
} else if (device) {
|
|
192
|
+
produce('video');
|
|
192
193
|
}
|
|
194
|
+
} else {
|
|
195
|
+
setAudioMuted(payload.audioMuted);
|
|
196
|
+
setVideoMuted(payload.videoMuted);
|
|
193
197
|
}
|
|
194
|
-
|
|
195
|
-
setVideoMuted(payload.videoMuted);
|
|
196
|
-
} else if (props.isCurrentUser) {}
|
|
198
|
+
}
|
|
197
199
|
};
|
|
198
200
|
(0, _react.useEffect)(() => {
|
|
199
201
|
if (props.data && !_Utils.default.isNull(props.data.avatarId) && props.data.avatarId !== 'undefined' && props.data.avatarId !== 'null') {
|
|
@@ -201,10 +203,18 @@ const VCRoomParticipant = props => {
|
|
|
201
203
|
}
|
|
202
204
|
}, [props.data]);
|
|
203
205
|
(0, _react.useEffect)(() => {
|
|
204
|
-
|
|
206
|
+
// Remote tiles reflect the peer's reported state. The CURRENT user's icon is NOT
|
|
207
|
+
// synced from props — it is driven only by the actual producer (mute shows once the
|
|
208
|
+
// producer is confirmed stopped; unmute once produce() succeeds), so the icon can
|
|
209
|
+
// never claim "muted" while audio is still being produced.
|
|
210
|
+
if (!props.isCurrentUser) {
|
|
211
|
+
setAudioMuted(props.audioMuted);
|
|
212
|
+
}
|
|
205
213
|
}, [props.audioMuted]);
|
|
206
214
|
(0, _react.useEffect)(() => {
|
|
207
|
-
|
|
215
|
+
if (!props.isCurrentUser) {
|
|
216
|
+
setVideoMuted(props.videoMuted);
|
|
217
|
+
}
|
|
208
218
|
}, [props.videoMuted]);
|
|
209
219
|
(0, _react.useEffect)(() => {
|
|
210
220
|
if (producerTransport) {
|
|
@@ -387,8 +397,28 @@ const VCRoomParticipant = props => {
|
|
|
387
397
|
producer = await producerTransport.produce(params);
|
|
388
398
|
} catch (e) {
|
|
389
399
|
console.log(e);
|
|
400
|
+
// Stop the just-captured track so the mic/cam isn't left live after a failed produce.
|
|
401
|
+
track.stop();
|
|
402
|
+
// A fatal RTP-extension collision on createOffer can't be recovered in-place;
|
|
403
|
+
// ask the user to rejoin. The icon is NOT flipped to unmuted (produce failed).
|
|
404
|
+
if ((0, _MediaSoupHelper.isRtpCollisionError)(e)) {
|
|
405
|
+
_VCEventManager.default.fireEvent(_VCEventType.VCEventType.SYSTEM_ALERT, {
|
|
406
|
+
payload: {
|
|
407
|
+
message: _MediaSoupHelper.REJOIN_ALERT_MESSAGE
|
|
408
|
+
}
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
return;
|
|
390
412
|
}
|
|
391
413
|
if (producer) {
|
|
414
|
+
// Producing is confirmed — now (and only now) clear the muted icon for this kind.
|
|
415
|
+
if (props.isCurrentUser) {
|
|
416
|
+
if (type === 'audio') {
|
|
417
|
+
setAudioMuted(false);
|
|
418
|
+
} else if (type === 'video') {
|
|
419
|
+
setVideoMuted(false);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
392
422
|
producerTransport.getStats().then(data => console.log(data));
|
|
393
423
|
producers.set(type, producer);
|
|
394
424
|
if (type === 'video') {
|
|
@@ -424,6 +454,11 @@ const VCRoomParticipant = props => {
|
|
|
424
454
|
const stopProducing = (type, callback) => {
|
|
425
455
|
if (!producers.has(type)) {
|
|
426
456
|
console.log('There is no producer for this type ' + type);
|
|
457
|
+
// Nothing is being produced, so the stop is trivially satisfied — let the
|
|
458
|
+
// caller (e.g. the mute toggle) treat this as a confirmed "stopped".
|
|
459
|
+
if (callback) {
|
|
460
|
+
callback();
|
|
461
|
+
}
|
|
427
462
|
return;
|
|
428
463
|
}
|
|
429
464
|
let producerId = producers.get(type).id;
|
|
@@ -820,4 +855,4 @@ const VCRoomParticipant = props => {
|
|
|
820
855
|
})));
|
|
821
856
|
};
|
|
822
857
|
var _default = exports.default = VCRoomParticipant;
|
|
823
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX1ZDRXZlbnRUeXBlIiwiX1ZDRXZlbnRNYW5hZ2VyIiwiX1ZDUm9vbVJlY29yZGVyIiwiX01lZGlhU291cEhlbHBlciIsIl9UcmFja3MiLCJfSWNvbkJ1dHRvbiIsIl9JY29uIiwiX2ljb25zTWF0ZXJpYWwiLCJfVG9vbHRpcCIsIl9tYXRlcmlhbCIsIl9Tb2NrZXRNYW5hZ2VyIiwiX0J1dHRvbiIsIl9BcHBsaWNhdGlvbk1hbmFnZXIiLCJfYXVkaW9MZXZlbE1ldGVyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwidCIsIldlYWtNYXAiLCJyIiwibiIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiU1BFQUtJTkdfTEVWRUwiLCJWSURFT19DT0RFQ19PUFRJT05TIiwiZXhwb3J0cyIsInZpZGVvR29vZ2xlU3RhcnRCaXRyYXRlIiwiVklERU9fQ09OU1RSQUlOVFMiLCJhdWRpbyIsInZpZGVvIiwid2lkdGgiLCJtaW4iLCJpZGVhbCIsImhlaWdodCIsIlZJREVPX0VOQ09ESU5HUyIsInJpZCIsIm1heEJpdHJhdGUiLCJzY2FsYWJpbGl0eU1vZGUiLCJsb2NhdGlvbiIsIndpbmRvdyIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJWQ1Jvb21QYXJ0aWNpcGFudCIsInByb3BzIiwiaGFuZFJhaXNlZCIsInNldEhhbmRSYWlzZWQiLCJSZWFjdCIsInVzZVN0YXRlIiwidmlkZW9NdXRlZCIsInNldFZpZGVvTXV0ZWQiLCJhdWRpb011dGVkIiwic2V0QXVkaW9NdXRlZCIsInByb2R1Y2VyVHJhbnNwb3J0Iiwic2V0UHJvZHVjZXJUcmFuc3BvcnQiLCJ2aWRlb1JlZnJlc2hlciIsInNldFZpZGVvUmVmcmVzaGVyIiwicHJvZHVjZXJzIiwiTWFwIiwiZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0IiwiYXVkaW9EZXZpY2VzIiwic2V0QXVkaW9EZXZpY2VzIiwic2VsZWN0ZWRBdWRpb0RldmljZSIsInNldFNlbGVjdGVkQXVkaW9EZXZpY2UiLCJjb25zdW1lcnMiLCJzb3VuZExldmVsIiwic2V0U291bmRMZXZlbCIsImV2ZW50SGFuZGxlciIsInZpZGVvUmVmIiwidXNlUmVmIiwidmlkZW9TdHJlYW0iLCJhdWRpb1JlZiIsInRyYWNrcyIsIlRyYWNrcyIsInNvdW5kTGV2ZWxDb3VudGVyIiwibWV0ZXJzIiwidW5tb3VudGVkUmVmIiwic2hvd1ZpZGVvIiwiZGV2aWNlIiwicGFydGljaXBhbnRzIiwibnVtYmVyT2ZJblZpZXdQYXJ0aWNpcGFudHMiLCJhbmNob3JFbCIsInNldEFuY2hvckVsIiwib3Blbk1vcmVBY3Rpb25zIiwiQm9vbGVhbiIsImRvd25sb2FkVXJsIiwic2V0RG93bmxvYWRVcmwiLCJoYW5kbGVyIiwiaWQiLCJkYXRhIiwidXNlcklkIiwib24iLCJldmVudFR5cGUiLCJiZSIsIlZDRXZlbnRUeXBlIiwiQVVESU9fVklTVUFMX1NFVFRJTkdTX0NIQU5HRUQiLCJvbkFWU2V0dGluZ3NDaGFuZ2UiLCJwYXlsb2FkIiwiUkFJU0VfSEFORCIsIm9uUmFpc2VIYW5kIiwiTE9XRVJfSEFORCIsIm9uTG93ZXJIYW5kIiwiTkVXX1BST0RVQ0VSUyIsIm9uTmV3UHJvZHVjZXJzIiwiQ09OU1VNRVJfQ0xPU0VEIiwiY29uc3VtZXJJZCIsInJlbW92ZUNvbnN1bWVyIiwia2luZCIsIkFVRElPX0xFVkVMIiwibGV2ZWwiLCJoYW5kbGVDbGlja0RldmljZXNJY29uIiwiZXZlbnQiLCJjdXJyZW50VGFyZ2V0IiwiY2hhbmdlQXVkaW9EZXZpY2UiLCJ1c2VFZmZlY3QiLCJhcGkiLCJjdXJyZW50Iiwic3JjT2JqZWN0Iiwic291bmRNb25pdG9yIiwiaW5WaWV3IiwiaGFuZGxlQ2xvc2VEZXZpY2VNZW51IiwiaXNDdXJyZW50VXNlciIsInN0b3BQcm9kdWNpbmciLCJwcm9kdWNlIiwiVXRpbHMiLCJpc051bGwiLCJhdmF0YXJJZCIsImFwcGxpY2F0aW9uTWFuYWdlciIsImdldENvbnRleHRSb290Iiwic2Vzc2lvblN0b3JhZ2UiLCJnZXRJdGVtIiwib25BdWRpb0RldmljZUNoYW5nZSIsImNyZWF0ZVByb2R1Y2VyVHJhbnNwb3J0IiwiY29uc29sZSIsImxvZyIsInNwbGljZSIsImxlbmd0aCIsIm1lZGlhU291cEhlbHBlciIsImluaXRQcm9kdWNlclRyYW5zcG9ydCIsIm1lZXRpbmdJZCIsImdldFVzZXJEZXRhaWxzIiwidXNlcm5hbWUiLCJoYW5kbGVEZXZpY2VzQ2hhbmdlZCIsImRldmljZXMiLCJhdWRpb0RldmljZUxpc3QiLCJmb3JFYWNoIiwicHVzaCIsImRldmljZUlkIiwibGFiZWwiLCJ2Y0V2ZW50TWFuYWdlciIsInJlbW92ZVN1YnNjcmlwdGlvbnMiLCJhZGRTdWJzY3JpcHRpb25zIiwibmF2aWdhdG9yIiwibWVkaWFEZXZpY2VzIiwib25kZXZpY2VjaGFuZ2UiLCJlbnVtZXJhdGVEZXZpY2VzIiwidGhlbiIsImNvbnN1bWVGYWlsZWRQcm9kdWNlcnMiLCJrZXkiLCJ2YWx1ZSIsInN0b3AiLCJjbGVhciIsInN0YXJ0TWV0ZXIiLCJzdHJlYW0iLCJzdG9wTWV0ZXIiLCJzdGFydEF1ZGlvTGV2ZWxNZXRlciIsImZpcmVFdmVudCIsImRlbGV0ZSIsInR5cGUiLCJlcnJvciIsImNhblByb2R1Y2UiLCJtZWRpYUNvbnN0cmFpbnRzIiwiZ2V0VXNlck1lZGlhIiwidHJhY2siLCJnZXRBdWRpb1RyYWNrcyIsImdldFZpZGVvVHJhY2tzIiwicGFyYW1zIiwiaXNIb3N0IiwibWVkaWFSZWNvcmRlciIsImFkZFRyYWNrIiwic2V0QXVkaW9UcmFjayIsImVuY29kaW5ncyIsImNvZGVjT3B0aW9ucyIsInNldFZpZGVvVHJhY2siLCJwcm9kdWNlciIsImdldFN0YXRzIiwiZ2V0VHJhY2tzIiwic2V0VGltZW91dCIsImNhbGxiYWNrIiwicHJvZHVjZXJJZCIsImNsb3NlIiwic3RvcFZpZGVvVHJhY2siLCJzdG9wQXVkaW9UcmFjayIsInNvY2tldE1hbmFnZXIiLCJlbWl0RXZlbnQiLCJQUk9EVUNFUl9DTE9TRUQiLCJyb29tSWQiLCJjYXRjaCIsImxvYWRpbmciLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJKU09OIiwic3RyaW5naWZ5Iiwic2NyZWVuU2hhcmluZyIsImNvbnN1bWUiLCJhdWRpb0VsZW1lbnQiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwicmVtb3ZlVHJhY2siLCJlbGVtZW50QnlJZCIsInJlbW92ZUNoaWxkIiwicmV0cnlDb25zdW1lIiwicmV0cmllcyIsInRyYW5zcG9ydCIsImdldFJlY3ZUcmFuc3BvcnQiLCJFcnJvciIsImdldENvbnN1bWVTdHJlYW0iLCJydHBDYXBhYmlsaXRpZXMiLCJfcmVmIiwiY29uc3VtZXIiLCJjcmVhdGVFbGVtZW50IiwicGxheXNpbmxpbmUiLCJhdXRvcGxheSIsImFwcGVuZENoaWxkIiwidHJhY2tFbmRlZFBhcnRpY2lwYW50IiwiZmluZCIsInAiLCJnZXRQYXJ0aWNpcGFudE5hbWUiLCJuYW1lIiwiY29uY2F0IiwiRnJhZ21lbnQiLCJjbGFzc05hbWUiLCJzdHlsZSIsInBhZGRpbmciLCJwb3NpdGlvbiIsImJvcmRlclJhZGl1cyIsIm92ZXJmbG93IiwiYm94U2l6aW5nIiwiYmFja2dyb3VuZENvbG9yIiwiYm9yZGVyIiwiZ2V0QXBwbGljYXRpb25QcmltYXJ5Q29sb3IiLCJib3hTaGFkb3ciLCJ0cmFuc2l0aW9uIiwibWFyZ2luQm90dG9tIiwic2l6aW5nIiwiY29sb3IiLCJmb250U2l6ZSIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kU2l6ZSIsImJhY2tncm91bmRQb3NpdGlvbiIsImJhY2tncm91bmRJbWFnZSIsImdldEluaXRpYWxzIiwiYXV0b1BsYXkiLCJyZWYiLCJtdXRlZCIsIm9iamVjdEZpdCIsInRyYW5zZm9ybSIsInpJbmRleCIsImRpc3BsYXkiLCJsZWZ0IiwiYm90dG9tIiwiYWxpZ25JdGVtcyIsImdhcCIsIm1heFdpZHRoIiwiZm9udFdlaWdodCIsImxpbmVIZWlnaHQiLCJ3aGl0ZVNwYWNlIiwidGV4dE92ZXJmbG93IiwibWFyZ2luTGVmdCIsIm1hcmdpblJpZ2h0IiwianVzdGlmeUNvbnRlbnQiLCJvbkNsaWNrIiwib25Ib3N0QXVkaW9NdXRlIiwib25Ib3N0VmlkZW9NdXRlIiwidGl0bGUiLCJQYW5Ub29sIiwiTWVudSIsIm9wZW4iLCJvbkNsb3NlIiwiUGFwZXJQcm9wcyIsImVsZXZhdGlvbiIsInN4IiwiZmlsdGVyIiwibXQiLCJtbCIsIm1yIiwiY29udGVudCIsInRvcCIsInJpZ2h0IiwiYmdjb2xvciIsInRyYW5zZm9ybU9yaWdpbiIsImhvcml6b250YWwiLCJ2ZXJ0aWNhbCIsImFuY2hvck9yaWdpbiIsIm1hcCIsImluZGV4IiwiTWVudUl0ZW0iLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9tZWRpYS9WQ1Jvb21QYXJ0aWNpcGFudC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzICovXG5pbXBvcnQgUmVhY3QsIHt1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCAnLi9WQ1Jvb21QYXJ0aWNpcGFudC5jc3MnO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4uLy4uL1V0aWxzJztcbmltcG9ydCB7VkNFdmVudFR5cGV9IGZyb20gJy4vVkNFdmVudFR5cGUnO1xuaW1wb3J0IHZjRXZlbnRNYW5hZ2VyIGZyb20gJy4vVkNFdmVudE1hbmFnZXInO1xuaW1wb3J0IG1lZGlhUmVjb3JkZXIgZnJvbSAnLi9WQ1Jvb21SZWNvcmRlcic7XG5pbXBvcnQgbWVkaWFTb3VwSGVscGVyIGZyb20gJy4vTWVkaWFTb3VwSGVscGVyJztcbmltcG9ydCBUcmFja3MgZnJvbSAnLi9UcmFja3MnO1xuaW1wb3J0IEljb25CdXR0b24gZnJvbSAnQG11aS9tYXRlcmlhbC9JY29uQnV0dG9uJztcbmltcG9ydCBJY29uIGZyb20gJy4uL0ljb24nO1xuaW1wb3J0IHtQYW5Ub29sfSBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsJztcbmltcG9ydCBUb29sdGlwIGZyb20gJ0BtdWkvbWF0ZXJpYWwvVG9vbHRpcCc7XG5pbXBvcnQge01lbnUsIE1lbnVJdGVtfSBmcm9tICdAbXVpL21hdGVyaWFsJztcbmltcG9ydCBzb2NrZXRNYW5hZ2VyIGZyb20gJy4uL1NvY2tldE1hbmFnZXInO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdAbXVpL21hdGVyaWFsL0J1dHRvbic7XG5pbXBvcnQgYXBwbGljYXRpb25NYW5hZ2VyIGZyb20gJy4uLy4uL0FwcGxpY2F0aW9uTWFuYWdlcic7XG5pbXBvcnQge3N0YXJ0QXVkaW9MZXZlbE1ldGVyfSBmcm9tICcuL2F1ZGlvTGV2ZWxNZXRlcic7XG5cbmNvbnN0IFNQRUFLSU5HX0xFVkVMID0gNjtcblxuZXhwb3J0IGNvbnN0IFZJREVPX0NPREVDX09QVElPTlMgPSB7XG4gICAgdmlkZW9Hb29nbGVTdGFydEJpdHJhdGU6IDEwMDBcbn07XG5cbmV4cG9ydCBjb25zdCBWSURFT19DT05TVFJBSU5UUyA9IHtcbiAgICBhdWRpbzogZmFsc2UsXG4gICAgdmlkZW86IHtcbiAgICAgICAgd2lkdGg6IHtcbiAgICAgICAgICAgIG1pbjogNjQwLFxuICAgICAgICAgICAgaWRlYWw6IDE5MjBcbiAgICAgICAgfSxcbiAgICAgICAgaGVpZ2h0OiB7XG4gICAgICAgICAgICBtaW46IDQwMCxcbiAgICAgICAgICAgIGlkZWFsOiAxMDgwXG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgVklERU9fRU5DT0RJTkdTID0gW1xuICAgIHtcbiAgICAgICAgcmlkOiAncjAnLFxuICAgICAgICBtYXhCaXRyYXRlOiAyMDAwMCxcbiAgICAgICAgLy9zY2FsZVJlc29sdXRpb25Eb3duQnk6IDEwLjAsXG4gICAgICAgIHNjYWxhYmlsaXR5TW9kZTogJ1MxVDMnXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHJpZDogJ3IxJyxcbiAgICAgICAgbWF4Qml0cmF0ZTogMTUwMDAwLFxuICAgICAgICBzY2FsYWJpbGl0eU1vZGU6ICdTMVQzJ1xuICAgIH0sXG4gICAge1xuICAgICAgICByaWQ6ICdyMicsXG4gICAgICAgIG1heEJpdHJhdGU6IDQ1MDAwMCxcbiAgICAgICAgc2NhbGFiaWxpdHlNb2RlOiAnUzFUMydcbiAgICB9XG5dO1xuXG5jb25zdCBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7XG5jb25zdCBWQ1Jvb21QYXJ0aWNpcGFudCA9IChwcm9wcykgPT4ge1xuICAgIGNvbnN0IFtoYW5kUmFpc2VkLCBzZXRIYW5kUmFpc2VkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbdmlkZW9NdXRlZCwgc2V0VmlkZW9NdXRlZF0gPSBSZWFjdC51c2VTdGF0ZShwcm9wcy52aWRlb011dGVkKTtcbiAgICBjb25zdCBbYXVkaW9NdXRlZCwgc2V0QXVkaW9NdXRlZF0gPSBSZWFjdC51c2VTdGF0ZShwcm9wcy5hdWRpb011dGVkKTtcbiAgICBjb25zdCBbcHJvZHVjZXJUcmFuc3BvcnQsIHNldFByb2R1Y2VyVHJhbnNwb3J0XSA9IFJlYWN0LnVzZVN0YXRlKHByb3BzLnByb2R1Y2VyVHJhbnNwb3J0KTtcbiAgICBjb25zdCBbdmlkZW9SZWZyZXNoZXIsIHNldFZpZGVvUmVmcmVzaGVyXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbcHJvZHVjZXJzXSA9IFJlYWN0LnVzZVN0YXRlKG5ldyBNYXAoKSk7XG4gICAgY29uc3QgW2ZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydF0gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW2F1ZGlvRGV2aWNlcywgc2V0QXVkaW9EZXZpY2VzXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbc2VsZWN0ZWRBdWRpb0RldmljZSwgc2V0U2VsZWN0ZWRBdWRpb0RldmljZV0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbY29uc3VtZXJzXSA9IFJlYWN0LnVzZVN0YXRlKG5ldyBNYXAoKSk7XG4gICAgY29uc3QgW3NvdW5kTGV2ZWwsIHNldFNvdW5kTGV2ZWxdID0gUmVhY3QudXNlU3RhdGUoMCk7XG4gICAgY29uc3QgW2V2ZW50SGFuZGxlcl0gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgdmlkZW9SZWYgPSB1c2VSZWYoKTtcbiAgICBjb25zdCB2aWRlb1N0cmVhbSA9IHVzZVJlZigpO1xuICAgIGNvbnN0IGF1ZGlvUmVmID0gdXNlUmVmKCk7XG4gICAgY29uc3QgdHJhY2tzID0gdXNlUmVmKG5ldyBUcmFja3MoKSk7XG4gICAgY29uc3Qgc291bmRMZXZlbENvdW50ZXIgPSB1c2VSZWYoMCk7XG4gICAgLy8gQWN0aXZlLXNwZWFrZXIgbWV0ZXJzOiB0aGlzIChzZWxmKSB0aWxlIGlzIHRoZSBhdWRpbyBodWIg4oCUIGl0IGNvbnN1bWVzXG4gICAgLy8gZXZlcnkgcGFydGljaXBhbnQncyBhdWRpbyArIHByb2R1Y2VzIHRoZSBsb2NhbCBtaWMg4oCUIHNvIGl0IHJ1bnMgdGhlIGxldmVsXG4gICAgLy8gbWV0ZXJzIGFuZCBicm9hZGNhc3RzIHt1c2VySWQsIGxldmVsfSBmb3IgZWFjaCB0aWxlIHRvIGhpZ2hsaWdodCBpdHNlbGYuXG4gICAgY29uc3QgbWV0ZXJzID0gdXNlUmVmKG5ldyBNYXAoKSk7XG4gICAgLy8gU2V0IG9uIHVubW91bnQgc28gdGhlIHJlY3Vyc2l2ZSBjb25zdW1lL3JldHJ5IHNldFRpbWVvdXQgbG9vcHMgc3RvcFxuICAgIC8vIHJlLXNjaGVkdWxpbmcgKG90aGVyd2lzZSB0aGV5IHBvbGwvcmV0cnkgZm9yZXZlciBhZnRlciB0aGUgdGlsZSBpcyBnb25lKS5cbiAgICBjb25zdCB1bm1vdW50ZWRSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICAgIGNvbnN0IHNob3dWaWRlbyA9IHRydWU7XG4gICAgY29uc3Qge1xuICAgICAgICBkZXZpY2UsXG4gICAgICAgIHBhcnRpY2lwYW50c1xuICAgIH0gPSBwcm9wcztcbiAgICBjb25zdCB7bnVtYmVyT2ZJblZpZXdQYXJ0aWNpcGFudHN9ID0gcHJvcHM7XG4gICAgY29uc3QgW2FuY2hvckVsLCBzZXRBbmNob3JFbF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBvcGVuTW9yZUFjdGlvbnMgPSBCb29sZWFuKGFuY2hvckVsKTtcblxuICAgIGNvbnN0IFtkb3dubG9hZFVybCwgc2V0RG93bmxvYWRVcmxdID0gdXNlU3RhdGUobnVsbCk7XG5cbiAgICBjb25zdCBoYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZ2V0IGlkKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnbWVldGluZy1wYXJ0aWNpcGFudC0nICsgcHJvcHMuZGF0YS51c2VySWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb246IChldmVudFR5cGUsIGJlKSA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5BVURJT19WSVNVQUxfU0VUVElOR1NfQ0hBTkdFRDpcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQVZTZXR0aW5nc0NoYW5nZShiZS5wYXlsb2FkID8gYmUucGF5bG9hZCA6IGJlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLlJBSVNFX0hBTkQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBvblJhaXNlSGFuZChiZS5wYXlsb2FkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLkxPV0VSX0hBTkQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkxvd2VySGFuZChiZS5wYXlsb2FkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLk5FV19QUk9EVUNFUlM6XG4gICAgICAgICAgICAgICAgICAgICAgICBvbk5ld1Byb2R1Y2VycyhiZS5wYXlsb2FkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFZDRXZlbnRUeXBlLkNPTlNVTUVSX0NMT1NFRDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdW1lcnMuaGFzKGJlLnBheWxvYWQuY29uc3VtZXJJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDb25zdW1lcihiZS5wYXlsb2FkLmNvbnN1bWVySWQsIGJlLnBheWxvYWQua2luZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5BVURJT19MRVZFTDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiZS5wYXlsb2FkICYmIGJlLnBheWxvYWQudXNlcklkID09PSBwcm9wcy5kYXRhLnVzZXJJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNvdW5kTGV2ZWwoYmUucGF5bG9hZC5sZXZlbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZUNsaWNrRGV2aWNlc0ljb24gPSAoZXZlbnQpID0+IHtcbiAgICAgICAgc2V0QW5jaG9yRWwoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNoYW5nZUF1ZGlvRGV2aWNlID0gKGRldmljZSkgPT4ge1xuICAgICAgICBzZXRTZWxlY3RlZEF1ZGlvRGV2aWNlKGRldmljZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uUmFpc2VIYW5kID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKHBheWxvYWQgJiYgcGF5bG9hZC51c2VySWQgPT09IHByb3BzLmRhdGEudXNlcklkKSB7XG4gICAgICAgICAgICBzZXRIYW5kUmFpc2VkKHRydWUpO1xuICAgICAgICAgICAgcHJvcHMuZGF0YS5oYW5kUmFpc2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvbkxvd2VySGFuZCA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChwYXlsb2FkICYmIHBheWxvYWQudXNlcklkID09PSBwcm9wcy5kYXRhLnVzZXJJZCkge1xuICAgICAgICAgICAgc2V0SGFuZFJhaXNlZChmYWxzZSk7XG4gICAgICAgICAgICBwcm9wcy5kYXRhLmhhbmRSYWlzZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBldmVudEhhbmRsZXIuYXBpID0gaGFuZGxlcigpO1xuICAgIH0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHZpZGVvUmVmLmN1cnJlbnQgJiYgdmlkZW9TdHJlYW0uY3VycmVudCkge1xuICAgICAgICAgICAgdmlkZW9SZWYuY3VycmVudC5zcmNPYmplY3QgPSB2aWRlb1N0cmVhbS5jdXJyZW50O1xuICAgICAgICB9XG4gICAgfSwgW3ZpZGVvUmVmLmN1cnJlbnRdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5zb3VuZE1vbml0b3IgJiYgIXByb3BzLmluVmlldykge1xuICAgICAgICAgICAgaWYgKHNvdW5kTGV2ZWwgPiAzKSB7XG4gICAgICAgICAgICAgICAgc291bmRMZXZlbENvdW50ZXIuY3VycmVudCA9IDEwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzb3VuZExldmVsQ291bnRlci5jdXJyZW50ID4gMCkge1xuICAgICAgICAgICAgICAgIHNvdW5kTGV2ZWxDb3VudGVyLmN1cnJlbnQtLTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvcHMuc291bmRNb25pdG9yKHByb3BzLmRhdGEudXNlcklkLCBzb3VuZExldmVsQ291bnRlci5jdXJyZW50ID09PSAwIHx8IGF1ZGlvTXV0ZWQpO1xuICAgICAgICB9XG4gICAgfSwgW3NvdW5kTGV2ZWxdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChhdWRpb011dGVkKSB7XG4gICAgICAgICAgICBzZXRTb3VuZExldmVsKDApO1xuICAgICAgICAgICAgaWYgKHByb3BzLnNvdW5kTW9uaXRvciAmJiAhcHJvcHMuaW5WaWV3KSB7XG4gICAgICAgICAgICAgICAgcHJvcHMuc291bmRNb25pdG9yKHByb3BzLmRhdGEudXNlcklkLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIFthdWRpb011dGVkXSk7XG5cbiAgICBjb25zdCBoYW5kbGVDbG9zZURldmljZU1lbnUgPSAoKSA9PiB7XG4gICAgICAgIHNldEFuY2hvckVsKG51bGwpO1xuICAgIH07XG5cbiAgICBjb25zdCBvbkFWU2V0dGluZ3NDaGFuZ2UgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAocHJvcHMuZGF0YS51c2VySWQgPT09IHBheWxvYWQudXNlcklkKSB7XG4gICAgICAgICAgICBpZiAocHJvcHMuaXNDdXJyZW50VXNlcikge1xuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmF1ZGlvTXV0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcFByb2R1Y2luZygnYXVkaW8nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGV2aWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWNlKCdhdWRpbycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQudmlkZW9NdXRlZCkge1xuICAgICAgICAgICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCd2aWRlbycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXZpY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2UoJ3ZpZGVvJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNldEF1ZGlvTXV0ZWQocGF5bG9hZC5hdWRpb011dGVkKTtcbiAgICAgICAgICAgIHNldFZpZGVvTXV0ZWQocGF5bG9hZC52aWRlb011dGVkKTtcblxuICAgICAgICB9IGVsc2UgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIpIHtcblxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5kYXRhICYmICFVdGlscy5pc051bGwocHJvcHMuZGF0YS5hdmF0YXJJZClcbiAgICAgICAgICAgICYmIHByb3BzLmRhdGEuYXZhdGFySWQgIT09ICd1bmRlZmluZWQnICYmIHByb3BzLmRhdGEuYXZhdGFySWQgIT09ICdudWxsJykge1xuICAgICAgICAgICAgc2V0RG93bmxvYWRVcmwobG9jYXRpb24gKyBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0Q29udGV4dFJvb3QoKSArICcvZG9jcy9hcGkvdjEvbWFuYWdlci9kb3dubG9hZC8nICsgcHJvcHMuZGF0YS5hdmF0YXJJZCArXG4gICAgICAgICAgICAgICAgJz9hY2Nlc3NfdG9rZW49JyArIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FjY2Vzc1Rva2VuJykgKyAnJmlkVG9rZW49JyArIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2lkVG9rZW4nKSk7XG4gICAgICAgIH1cbiAgICB9LCBbcHJvcHMuZGF0YV0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgc2V0QXVkaW9NdXRlZChwcm9wcy5hdWRpb011dGVkKTtcbiAgICB9LCBbcHJvcHMuYXVkaW9NdXRlZF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgc2V0VmlkZW9NdXRlZChwcm9wcy52aWRlb011dGVkKTtcbiAgICB9LCBbcHJvcHMudmlkZW9NdXRlZF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHByb2R1Y2VyVHJhbnNwb3J0KSB7XG4gICAgICAgICAgICAvLyBBIChyZSlhc3NpZ25lZCB0cmFuc3BvcnQgbWVhbnMgZXhpc3RpbmcgcHJvZHVjZXJzIGxpdmVkIG9uIHRoZSBvbGRcbiAgICAgICAgICAgIC8vIChub3ctY2xvc2VkKSB0cmFuc3BvcnQuIFRlYXIgdGhlbSBkb3duIHByb3Blcmx5IOKAlCBjbG9zZSArIHN0b3AgdGhlXG4gICAgICAgICAgICAvLyBsb2NhbCB0cmFja3MgKyBub3RpZnkgdGhlIHNlcnZlciDigJQgc28gcHJvZHVjZSgpIHJlY3JlYXRlcyB0aGVtIG9uIHRoZVxuICAgICAgICAgICAgLy8gbmV3IHRyYW5zcG9ydCBpbnN0ZWFkIG9mIGVhcmx5LXJldHVybmluZy4gTm8tb3Agb24gZmlyc3QgbW91bnQuXG4gICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCd2aWRlbycpO1xuICAgICAgICAgICAgc3RvcFByb2R1Y2luZygnYXVkaW8nKTtcblxuICAgICAgICAgICAgaWYgKCFwcm9wcy52aWRlb011dGVkKSB7XG4gICAgICAgICAgICAgICAgcHJvZHVjZSgndmlkZW8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcHJvcHMuYXVkaW9NdXRlZCkge1xuICAgICAgICAgICAgICAgIHByb2R1Y2UoJ2F1ZGlvJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbcHJvZHVjZXJUcmFuc3BvcnRdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHNldFByb2R1Y2VyVHJhbnNwb3J0KHByb3BzLnByb2R1Y2VyVHJhbnNwb3J0KTtcbiAgICB9LCBbcHJvcHMucHJvZHVjZXJUcmFuc3BvcnRdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICBwcm9wcy5vbkF1ZGlvRGV2aWNlQ2hhbmdlKHNlbGVjdGVkQXVkaW9EZXZpY2UpO1xuICAgICAgICAgICAgc3RvcFByb2R1Y2luZygnYXVkaW8nLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkQXVkaW9EZXZpY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9kdWNlclRyYW5zcG9ydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlUHJvZHVjZXJUcmFuc3BvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghYXVkaW9NdXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjZSgnYXVkaW8nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSwgW3NlbGVjdGVkQXVkaW9EZXZpY2VdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIC8vIE9uY2UgdGhlIERldmljZSBpcyByZWFkeSwgY29uc3VtZSB0aGUgcHJvZHVjZXJzIHdlIGFscmVhZHkga25vdyBhYm91dFxuICAgICAgICAvLyBhbmQgcmVwbGF5IGFueSB0aGF0IGFycml2ZWQgYmVmb3JlIHdlIHdlcmUgcmVhZHkuIFJlY3YgdHJhbnNwb3J0c1xuICAgICAgICAvLyB0aGVtc2VsdmVzIGFyZSBjcmVhdGVkIGp1c3QtaW4tdGltZSBpbnNpZGUgY29uc3VtZSgpIChwZXIga2luZCksIHNvIHRoZVxuICAgICAgICAvLyB0cmlnZ2VyIGhlcmUgaXMgdGhlIERldmljZSwgbm90IGEgdHJhbnNwb3J0LlxuICAgICAgICBpZiAoZGV2aWNlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnREVWSUNFIFJFQURZIFdJVEggUFJPRFVDRVJTIDogJywgcHJvcHMuZGF0YS5wcm9kdWNlcnMpO1xuICAgICAgICAgICAgaWYgKHByb3BzLmRhdGEucHJvZHVjZXJzKSB7XG4gICAgICAgICAgICAgICAgb25OZXdQcm9kdWNlcnMocHJvcHMuZGF0YS5wcm9kdWNlcnMsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvbk5ld1Byb2R1Y2VycyhmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQsIHRydWUpO1xuICAgICAgICAgICAgZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0LnNwbGljZSgwLCBmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgIH0sIFtkZXZpY2VdKTtcblxuICAgIGNvbnN0IGNyZWF0ZVByb2R1Y2VyVHJhbnNwb3J0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBzZXRQcm9kdWNlclRyYW5zcG9ydChhd2FpdCBtZWRpYVNvdXBIZWxwZXIuaW5pdFByb2R1Y2VyVHJhbnNwb3J0KHByb3BzLmRldmljZSwgcHJvcHMubWVldGluZ0lkLFxuICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLmdldFVzZXJEZXRhaWxzKCkudXNlcm5hbWUpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlRGV2aWNlc0NoYW5nZWQgPSAoZGV2aWNlcykgPT4ge1xuICAgICAgICBsZXQgYXVkaW9EZXZpY2VMaXN0ID0gW107XG4gICAgICAgIGRldmljZXMuZm9yRWFjaCgoZGV2aWNlKSA9PiB7XG4gICAgICAgICAgICBpZiAoJ2F1ZGlvaW5wdXQnID09PSBkZXZpY2Uua2luZCkge1xuICAgICAgICAgICAgICAgIGF1ZGlvRGV2aWNlTGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGRldmljZS5kZXZpY2VJZCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGRldmljZS5sYWJlbFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBzZXRBdWRpb0RldmljZXMoYXVkaW9EZXZpY2VMaXN0KTtcblxuICAgICAgICBpZiAoYXVkaW9EZXZpY2VMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkQXVkaW9EZXZpY2UoYXVkaW9EZXZpY2VMaXN0WzBdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkQXVkaW9EZXZpY2UobnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgdmNFdmVudE1hbmFnZXIucmVtb3ZlU3Vic2NyaXB0aW9ucyhldmVudEhhbmRsZXIpO1xuICAgICAgICB2Y0V2ZW50TWFuYWdlci5hZGRTdWJzY3JpcHRpb25zKGV2ZW50SGFuZGxlciwgVkNFdmVudFR5cGUuQVVESU9fVklTVUFMX1NFVFRJTkdTX0NIQU5HRUQsXG4gICAgICAgICAgICBWQ0V2ZW50VHlwZS5SQUlTRV9IQU5ELCBWQ0V2ZW50VHlwZS5MT1dFUl9IQU5ELCBWQ0V2ZW50VHlwZS5ORVdfUFJPRFVDRVJTLCBWQ0V2ZW50VHlwZS5DT05TVU1FUl9DTE9TRUQsXG4gICAgICAgICAgICBWQ0V2ZW50VHlwZS5BVURJT19MRVZFTCk7XG5cbiAgICAgICAgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIpIHtcbiAgICAgICAgICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMub25kZXZpY2VjaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzKClcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKGRldmljZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVEZXZpY2VzQ2hhbmdlZChkZXZpY2VzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcygpXG4gICAgICAgICAgICAgICAgLnRoZW4oKGRldmljZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZURldmljZXNDaGFuZ2VkKGRldmljZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICBjb25zdW1lRmFpbGVkUHJvZHVjZXJzKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJz09PT09PT09PT09PT09PT09PT09PT1ERVNUUk9ZSU5HIFBBUlRJQ0lQQU5UPT09PT09PT09PT09PT09PT09PT09PT09PSA6ICcgKyBwcm9wcy5kYXRhLnVzZXJJZCk7XG4gICAgICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVsZWFzZSB0aGUgZ2xvYmFsIGRldmljZWNoYW5nZSBoYW5kbGVyIHRoaXMgY29tcG9uZW50IGluc3RhbGxlZCDigJRcbiAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgaXQgc3Vydml2ZXMgdW5tb3VudCBhbmQgZmlyZXMgaW50byBzdGFsZSBjb21wb25lbnQgc3RhdGUuXG4gICAgICAgICAgICAgICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5vbmRldmljZWNoYW5nZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgc3RvcFByb2R1Y2luZygnYXVkaW8nKTtcbiAgICAgICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCd2aWRlbycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgY29uc3VtZXJzKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlQ29uc3VtZXIoa2V5LCAndmlkZW8nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU3RvcCBldmVyeSBhdWRpby1sZXZlbCBtZXRlciAoc2VsZiBtaWMgKyBhbGwgY29uc3VtZWQgc3RyZWFtcykuXG4gICAgICAgICAgICBtZXRlcnMuY3VycmVudC5mb3JFYWNoKChzdG9wKSA9PiBzdG9wKCkpO1xuICAgICAgICAgICAgbWV0ZXJzLmN1cnJlbnQuY2xlYXIoKTtcblxuICAgICAgICAgICAgdmNFdmVudE1hbmFnZXIucmVtb3ZlU3Vic2NyaXB0aW9ucyhldmVudEhhbmRsZXIpO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcblxuICAgIC8vIE1ldGVyIGEgc3RyZWFtIGFuZCBicm9hZGNhc3QgaXRzIGxldmVsIHVuZGVyIGB1c2VySWRgLiBLZXllZCBzbyB3ZSBjYW5cbiAgICAvLyBzdG9wL3JlcGxhY2UgaXQgd2hlbiB0aGUgY29uc3VtZXIgY2xvc2VzIG9yIHRoZSBwcm9kdWNlciByZXN0YXJ0cy5cbiAgICBjb25zdCBzdGFydE1ldGVyID0gKGtleSwgc3RyZWFtLCB1c2VySWQpID0+IHtcbiAgICAgICAgc3RvcE1ldGVyKGtleSk7XG4gICAgICAgIGNvbnN0IHN0b3AgPSBzdGFydEF1ZGlvTGV2ZWxNZXRlcihzdHJlYW0sIChsZXZlbCkgPT4ge1xuICAgICAgICAgICAgdmNFdmVudE1hbmFnZXIuZmlyZUV2ZW50KFZDRXZlbnRUeXBlLkFVRElPX0xFVkVMLCB7cGF5bG9hZDoge3VzZXJJZCwgbGV2ZWx9fSk7XG4gICAgICAgIH0pO1xuICAgICAgICBtZXRlcnMuY3VycmVudC5zZXQoa2V5LCBzdG9wKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc3RvcE1ldGVyID0gKGtleSkgPT4ge1xuICAgICAgICBjb25zdCBzdG9wID0gbWV0ZXJzLmN1cnJlbnQuZ2V0KGtleSk7XG4gICAgICAgIGlmIChzdG9wKSB7XG4gICAgICAgICAgICBzdG9wKCk7XG4gICAgICAgICAgICBtZXRlcnMuY3VycmVudC5kZWxldGUoa2V5KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBwcm9kdWNlID0gYXN5bmMgKHR5cGUpID0+IHtcbiAgICAgICAgaWYgKCFkZXZpY2UpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIGF2YWlsYWJsZSBkZXZpY2UnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGV2aWNlLmNhblByb2R1Y2UoJ3ZpZGVvJykgJiYgdHlwZSA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ2Fubm90IHByb2R1Y2UgdmlkZW8nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc2VsZWN0ZWRBdWRpb0RldmljZSAmJiB0eXBlID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdObyBhdWRpbyBkZXZpY2Ugc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9kdWNlcnMuaGFzKHR5cGUpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUHJvZHVjZXIgYWxyZWFkeSBleGlzdHMgZm9yIHRoaXMgdHlwZSAnICsgdHlwZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbWVkaWFDb25zdHJhaW50cztcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdhdWRpbyc6XG4gICAgICAgICAgICAgICAgbWVkaWFDb25zdHJhaW50cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGV2aWNlSWQ6IHNlbGVjdGVkQXVkaW9EZXZpY2UuaWQsXG4gICAgICAgICAgICAgICAgICAgIGF1ZGlvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB2aWRlbzogZmFsc2VcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd2aWRlbyc6XG4gICAgICAgICAgICAgICAgbWVkaWFDb25zdHJhaW50cyA9IFZJREVPX0NPTlNUUkFJTlRTO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3RyZWFtID0gYXdhaXQgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEobWVkaWFDb25zdHJhaW50cyk7XG4gICAgICAgIGNvbnN0IHRyYWNrID0gdHlwZSA9PT0gJ2F1ZGlvJyA/IHN0cmVhbS5nZXRBdWRpb1RyYWNrcygpWzBdIDogc3RyZWFtLmdldFZpZGVvVHJhY2tzKClbMF07XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgIHRyYWNrXG4gICAgICAgIH07XG5cbiAgICAgICAgYXVkaW9SZWYuY3VycmVudCA9IHN0cmVhbTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgIC8vIE1ldGVyIHRoZSBsb2NhbCBtaWMgc28gdGhlIHNlbGYgdGlsZSBoaWdobGlnaHRzIHdoZW4geW91IHNwZWFrLlxuICAgICAgICAgICAgc3RhcnRNZXRlcignc2VsZi1hdWRpbycsIHN0cmVhbSwgcHJvcHMuZGF0YS51c2VySWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5pc0hvc3QgJiYgdHlwZSA9PT0gJ2F1ZGlvJykge1xuICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5hZGRUcmFjayhwcm9wcy5kYXRhLnVzZXJJZCwgdHJhY2spO1xuICAgICAgICAgICAgdHJhY2tzLmN1cnJlbnQuc2V0QXVkaW9UcmFjayh0cmFjayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZSA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgcGFyYW1zLmVuY29kaW5ncyA9IFZJREVPX0VOQ09ESU5HUztcbiAgICAgICAgICAgIHBhcmFtcy5jb2RlY09wdGlvbnMgPSBWSURFT19DT0RFQ19PUFRJT05TO1xuICAgICAgICAgICAgdHJhY2tzLmN1cnJlbnQuc2V0VmlkZW9UcmFjayh0cmFjayk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcHJvZHVjZXI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwcm9kdWNlciA9IGF3YWl0IHByb2R1Y2VyVHJhbnNwb3J0LnByb2R1Y2UocGFyYW1zKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvZHVjZXIpIHtcbiAgICAgICAgICAgIHByb2R1Y2VyVHJhbnNwb3J0LmdldFN0YXRzKClcbiAgICAgICAgICAgICAgICAudGhlbigoZGF0YSkgPT4gY29uc29sZS5sb2coZGF0YSkpO1xuICAgICAgICAgICAgcHJvZHVjZXJzLnNldCh0eXBlLCBwcm9kdWNlcik7XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09PSAndmlkZW8nKSB7XG4gICAgICAgICAgICAgICAgdmlkZW9SZWYuY3VycmVudC5zcmNPYmplY3QgPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgdmlkZW9TdHJlYW0uY3VycmVudCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICBzZXRWaWRlb1JlZnJlc2hlcighdmlkZW9SZWZyZXNoZXIpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHN0cmVhbSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb2R1Y2VyLm9uKCd0cmFuc3BvcnRjbG9zZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICBzdHJlYW0uc3JjT2JqZWN0LmdldFRyYWNrcygpXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uICh0cmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2suc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHByb2R1Y2Vycy5kZWxldGUodHlwZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcHJvZHVjZXIub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0cmVhbS5zcmNPYmplY3QuZ2V0VHJhY2tzKClcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcHJvZHVjZXJzLmRlbGV0ZSh0eXBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbnN1bWVGYWlsZWRQcm9kdWNlcnMgPSAoKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHVubW91bnRlZFJlZi5jdXJyZW50KSByZXR1cm47XG4gICAgICAgICAgICBpZiAoZGV2aWNlKSB7XG4gICAgICAgICAgICAgICAgb25OZXdQcm9kdWNlcnMoZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0LCB0cnVlKTtcbiAgICAgICAgICAgICAgICBmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQuc3BsaWNlKDAsIGZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGNvbnN1bWVGYWlsZWRQcm9kdWNlcnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgNTAwMCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RvcFByb2R1Y2luZyA9ICh0eXBlLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBpZiAoIXByb2R1Y2Vycy5oYXModHlwZSkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdUaGVyZSBpcyBubyBwcm9kdWNlciBmb3IgdGhpcyB0eXBlICcgKyB0eXBlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwcm9kdWNlcklkID0gcHJvZHVjZXJzLmdldCh0eXBlKS5pZDtcbiAgICAgICAgY29uc29sZS5sb2coJ0Nsb3NlIHByb2R1Y2VyJywgcHJvZHVjZXJJZCk7XG5cbiAgICAgICAgcHJvZHVjZXJzLmdldCh0eXBlKVxuICAgICAgICAgICAgLmNsb3NlKCk7XG4gICAgICAgIHByb2R1Y2Vycy5kZWxldGUodHlwZSk7XG4gICAgICAgIGlmICh0eXBlID09PSAndmlkZW8nKSB7XG4gICAgICAgICAgICB0cmFja3MuY3VycmVudC5zdG9wVmlkZW9UcmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgIHRyYWNrcy5jdXJyZW50LnN0b3BBdWRpb1RyYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZygnQ0xPU0lORyBQUk9EVUNFUiBPRiBJRCA6ICcgKyBwcm9kdWNlcklkKTtcbiAgICAgICAgc29ja2V0TWFuYWdlci5lbWl0RXZlbnQoVkNFdmVudFR5cGUuUFJPRFVDRVJfQ0xPU0VELCB7XG4gICAgICAgICAgICB1c2VySWQ6IHByb3BzLmRhdGEudXNlcklkLFxuICAgICAgICAgICAgcHJvZHVjZXJJZCxcbiAgICAgICAgICAgIHJvb21JZDogcHJvcHMubWVldGluZ0lkXG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4gY29uc29sZS5sb2coJ1BST0RVQ0VSX0NMT1NFRCBFUlJPUiA6ICcsIGUpKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25OZXdQcm9kdWNlcnMgPSAocHJvZHVjZXJzLCBsb2FkaW5nID0gZmFsc2UpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCI9PT09PT0gUFJPRFVDRVJTIFJFQ0VJVkVEIDogWyBcIiArIEpTT04uc3RyaW5naWZ5KHByb2R1Y2VycykgKyBcIiBdID09PT09PT1cIik7XG4gICAgICAgIGZvciAoY29uc3QgcHJvZHVjZXIgb2YgcHJvZHVjZXJzKSB7XG4gICAgICAgICAgICBpZiAoZGV2aWNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2R1Y2VyLnVzZXJJZCA9PT0gcHJvcHMuZGF0YS51c2VySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2R1Y2VyLmtpbmQgPT09ICd2aWRlbycgJiYgIXByb2R1Y2VyLnNjcmVlblNoYXJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDQUxMSU5HIENPTlNVTUUgRlJPTSBPTiBORVcgUFJPRFVDRVJTIEZPUiA6ICcgKyBwcm9wcy5kYXRhLnVzZXJJZCArICcgLSAnICsgcHJvZHVjZXIucHJvZHVjZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKHByb2R1Y2VyLnByb2R1Y2VySWQsIHByb2R1Y2VyLmtpbmQsIGxvYWRpbmcsIHByb2R1Y2VyLnVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocHJvcHMuaXNDdXJyZW50VXNlciB8fCBsb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBzbWFsbCBwYXJ0aWNpcGFudCBib3ggYXQgdGhlIGJvdHRvbSBiZWxvbmdpbmcgdG8gdGhlIGN1cnJlbnQgdXNlciBtdXN0IGNvbnN1bWUgYWxsIGF1ZGlvXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0byBkaXN0dXJiIHRoZSBhdWRpbyBkdWUgdG8gYW55IHJlbmRlcmluZyBzdWNoIGFzIEJyaW5nIHRvIHZpZXdcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2R1Y2VyLmtpbmQgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUocHJvZHVjZXIucHJvZHVjZXJJZCwgcHJvZHVjZXIua2luZCwgbG9hZGluZywgcHJvZHVjZXIudXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0LnB1c2gocHJvZHVjZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKFwiPT09PT09IFBST0RVQ0VSUyBUSEFUIENPVUxEIE5PVCBCRSBDT05TVU1FUyA6IFsgXCIgKyBKU09OLnN0cmluZ2lmeShmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQpICsgXCIgXSA9PT09PT09XCIpO1xuICAgIH07XG5cbiAgICBjb25zdCByZW1vdmVDb25zdW1lciA9IChjb25zdW1lcklkLCBraW5kLCB1c2VySWQpID0+IHtcbiAgICAgICAgLy8gU3RvcCBhbnkgYWN0aXZlLXNwZWFrZXIgbWV0ZXIgYXR0YWNoZWQgdG8gdGhpcyBjb25zdW1lcidzIHN0cmVhbS5cbiAgICAgICAgc3RvcE1ldGVyKGNvbnN1bWVySWQpO1xuICAgICAgICBpZiAoa2luZCA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgaWYgKHZpZGVvU3RyZWFtLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAodmlkZW9TdHJlYW0uY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICB2aWRlb1N0cmVhbS5jdXJyZW50LmdldFRyYWNrcygpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gJ2F1ZGlvJykge1xuICAgICAgICAgICAgbGV0IGF1ZGlvRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbnN1bWVySWQpO1xuICAgICAgICAgICAgaWYgKGF1ZGlvRWxlbWVudCAmJiBhdWRpb0VsZW1lbnQuc3JjT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgYXVkaW9FbGVtZW50LnNyY09iamVjdC5nZXRUcmFja3MoKVxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodXNlcklkICYmIG1lZGlhUmVjb3JkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5yZW1vdmVUcmFjayh1c2VySWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudEJ5SWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy5kYXRhLnVzZXJJZCArICctYXVkaW8tZWwtY29udGFpbmVyJyk7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRCeUlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRCeUlkLnJlbW92ZUNoaWxkKGF1ZGlvRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3VtZXJzLmRlbGV0ZShjb25zdW1lcklkKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcmV0cnlDb25zdW1lKGtpbmQsIHVzZXJJZCwgZSwgcmV0cmllcywgcHJvZHVjZXJJZCwgbG9hZGluZykge1xuICAgICAgICBjb25zb2xlLmxvZygnRkFJTEVEIFRPIENPTlNVTUUgJyArIGtpbmQgKyAnIEZST00gJyArIHVzZXJJZCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGUpO1xuXG4gICAgICAgIGlmIChyZXRyaWVzIDwgMTApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSRS1UUllJTkcgWycgKyByZXRyaWVzICsgJ10nKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICh1bm1vdW50ZWRSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN1bWUocHJvZHVjZXJJZCwga2luZCwgbG9hZGluZywgdXNlcklkLCByZXRyaWVzKTtcbiAgICAgICAgICAgIH0sIDUwMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0NPTVBMRVRFTFkgRkFJTEVEIFRPIENPTlNVTUUgJyArIGtpbmQgKyAnIEZST00gJyArIHVzZXJJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb25zdW1lID0gYXN5bmMgKHByb2R1Y2VySWQsIGtpbmQsIGxvYWRpbmcsIHVzZXJJZCwgcmV0cmllcyA9IDApID0+IHtcbiAgICAgICAgLy8gR2V0IChhbmQgbGF6aWx5IGNyZWF0ZSkgdGhlIHJlY3YgdHJhbnNwb3J0IGZvciB0aGlzIGtpbmQuIGF1ZGlvIGFuZFxuICAgICAgICAvLyB2aWRlbyByaWRlIHNlcGFyYXRlIHRyYW5zcG9ydHMsIHNvIGEgY2xvc2VkIGNvbnN1bWVyJ3MgbS1zZWN0aW9uIGlzXG4gICAgICAgIC8vIG5ldmVyIHJlY3ljbGVkIGFjcm9zcyBraW5kcyDigJQgd2hpY2ggaXMgd2hhdCB0cmlnZ2VyZWQgdGhlIFJUUFxuICAgICAgICAvLyBleHRlbnNpb24taWQgY29sbGlzaW9uLlxuICAgICAgICBjb25zdCB0cmFuc3BvcnQgPSBhd2FpdCBwcm9wcy5nZXRSZWN2VHJhbnNwb3J0KGtpbmQpO1xuICAgICAgICBpZiAoIXRyYW5zcG9ydCkge1xuICAgICAgICAgICAgcmV0cnlDb25zdW1lKGtpbmQsIHVzZXJJZCwgbmV3IEVycm9yKCdyZWN2IHRyYW5zcG9ydCB1bmF2YWlsYWJsZSBmb3IgJyArIGtpbmQpLCByZXRyaWVzLCBwcm9kdWNlcklkLCBsb2FkaW5nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBtZWRpYVNvdXBIZWxwZXIuZ2V0Q29uc3VtZVN0cmVhbShwcm9kdWNlcklkLCBkZXZpY2UucnRwQ2FwYWJpbGl0aWVzLCB0cmFuc3BvcnQsIHByb3BzLm1lZXRpbmdJZCxcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lLCBraW5kKVxuICAgICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyLFxuICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAga2luZFxuICAgICAgICAgICAgICAgICB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25zdW1lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXJzLnNldChjb25zdW1lci5pZCwgY29uc3VtZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PUNPTlNVTUU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IDogJyArIGtpbmQgKyAnIEZPUiA6ICcgKyB1c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmlkZW9SZWYuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb1N0cmVhbS5jdXJyZW50ID0gc3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmlkZW9NdXRlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmlkZW9SZWZyZXNoZXIoIXZpZGVvUmVmcmVzaGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja3MuY3VycmVudC5zZXRWaWRlb1RyYWNrKHN0cmVhbS5nZXRWaWRlb1RyYWNrcygpWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIgfHwgbG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXVkaW9FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYXVkaW8nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9FbGVtZW50LnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9FbGVtZW50LmlkID0gY29uc3VtZXIuaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvRWxlbWVudC5wbGF5c2lubGluZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb0VsZW1lbnQuYXV0b3BsYXkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVldGluZy1hdWRpby1lbC1jb250YWluZXInKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZENoaWxkKGF1ZGlvRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWV0ZXIgdGhpcyBwYXJ0aWNpcGFudCdzIGF1ZGlvIGZvciBhY3RpdmUtc3BlYWtlciBoaWdobGlnaHQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0TWV0ZXIoY29uc3VtZXIuaWQsIHN0cmVhbSwgdXNlcklkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcHMuaXNIb3N0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYVJlY29yZGVyLmFkZFRyYWNrKHVzZXJJZCwgc3RyZWFtLmdldEF1ZGlvVHJhY2tzKClbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lci5vbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhY2tlbmRlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhraW5kICsgXCIgQ09OU1VNRVIgVFJBQ0sgRU5ERUQgRk9SIFwiICsgdXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ29uc3VtZXIoY29uc3VtZXIuaWQsIGtpbmQsIHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEd1YXJkOiB0aGUgcGFydGljaXBhbnQgbWF5IGhhdmUgbGVmdCwgc28gZmluZCgpIGNhbiBiZSB1bmRlZmluZWQg4oCUXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlYWRpbmcgLnZpZGVvTXV0ZWQvLmF1ZGlvTXV0ZWQgb24gaXQgdGhyZXcuIE5vIHBhcnRpY2lwYW50IOKGkiBubyByZXRyeS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhY2tFbmRlZFBhcnRpY2lwYW50ID0gcGFydGljaXBhbnRzLmZpbmQoKHApID0+IHAudXNlcklkID09PSB1c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhY2tFbmRlZFBhcnRpY2lwYW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKGtpbmQgPT09ICd2aWRlbycgJiYgIXRyYWNrRW5kZWRQYXJ0aWNpcGFudC52aWRlb011dGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChraW5kID09PSAnYXVkaW8nICYmICF0cmFja0VuZGVkUGFydGljaXBhbnQuYXVkaW9NdXRlZCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyeUNvbnN1bWUoa2luZCwgdXNlcklkLCBuZXcgRXJyb3IoJ3RyYWNrZW5kZWQgd2hpbGUgJyArIGtpbmQgKyAnIGlzIE5PVCBtdXRlZCcpLCByZXRyaWVzLCBwcm9kdWNlcklkLCBsb2FkaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyLm9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFuc3BvcnRjbG9zZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhraW5kICsgXCIgQ09OU1VNRVIgQ0xPU0VEIEZPUiBcIiArIHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNvbnN1bWVyKGNvbnN1bWVyLmlkLCBraW5kLCB1c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICByZXRyeUNvbnN1bWUoa2luZCwgdXNlcklkLCBlLCByZXRyaWVzLCBwcm9kdWNlcklkLCBsb2FkaW5nKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldFBhcnRpY2lwYW50TmFtZSA9ICgpID0+IHtcbiAgICAgICAgbGV0IG5hbWUgPSBwcm9wcy5kYXRhLm5hbWU7XG5cbiAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChwcm9wcy5kYXRhLnVzZXJJZCkpIHtcbiAgICAgICAgICAgIG5hbWUgPSBgJHtuYW1lfSAoR3Vlc3QpYDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHsnY29sLSotKiAnICsgKHByb3BzLmlzQ3VycmVudFVzZXIgPyAnbWVldGluZy1wYXJ0aWNpcGFudC1jb250YWluZXItY3VycmVudC11c2VyJyA6ICdtZWV0aW5nLXBhcnRpY2lwYW50LWNvbnRhaW5lcicpfWB9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBwcm9wcy5wYWRkaW5nID8gcHJvcHMucGFkZGluZyA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHByb3BzLmhlaWdodCA/IHByb3BzLmhlaWdodCA6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzEycHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHByb3BzLmlzQ3VycmVudFVzZXIgPyAnIzFmMjkzNycgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBwcm9wcy5pc0N1cnJlbnRVc2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnMnB4IHNvbGlkICcgKyAoYXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uUHJpbWFyeUNvbG9yKCkgfHwgJyMxYTNjNWUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJzFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDYpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFjdGl2ZS1zcGVha2VyIGhpZ2hsaWdodDogYW4gaW5zZXQgcmluZyAodGhlIHRpbGUgY2xpcHNcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG92ZXJmbG93LCBzbyBhbiBvdXRzZXQgc2hhZG93IHdvdWxkIGJlIGN1dCBvZmYpLlxuICAgICAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiAoIWF1ZGlvTXV0ZWQgJiYgc291bmRMZXZlbCA+IFNQRUFLSU5HX0xFVkVMKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2luc2V0IDAgMCAwIDNweCAnICsgKGFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvblByaW1hcnlDb2xvcigpIHx8ICcjMjJjNTVlJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb246ICdib3gtc2hhZG93IDEyMG1zIGVhc2Utb3V0J1xuICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2aWRlb011dGVkIHx8ICF2aWRlb1JlZi5jdXJyZW50IHx8ICF2aWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eydjZW50ZXJlZC1mbGV4LWJveCd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkJvdHRvbTogcHJvcHMuc2l6aW5nID09PSAnc20nID8gJzhweCcgOiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3Byb3BzLnNpemluZyA9PT0gJ3NtJyA/ICdhdmF0YXItd3JhcHBlci1zbScgOiAnYXZhdGFyLXdyYXBwZXInfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogKHByb3BzLnNpemluZyA9PT0gJ3NtJyA/IDcyIDogMTEyKSArICdweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAocHJvcHMuc2l6aW5nID09PSAnc20nID8gNzIgOiAxMTIpICsgJ3B4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3hTaGFkb3c6ICFhdWRpb011dGVkICYmIHNvdW5kTGV2ZWwgPiAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJzAgMCAwICcgKyAoMyArIHNvdW5kTGV2ZWwgLyAxMikgKyAncHggJyArIChhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb25QcmltYXJ5Q29sb3IoKSB8fCAnIzAwNDc2YScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb246ICdib3gtc2hhZG93IDkwbXMgbGluZWFyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjM2E0NjU0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtwcm9wcy5zaXppbmcgPT09ICdtZCcgPyAnYXZhdGFyIGF2YXRhci1tZCcgOiBwcm9wcy5zaXppbmcgPT09ICdzbScgPyAnYXZhdGFyIGF2YXRhci1zbScgOiAnYXZhdGFyJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBwcm9wcy5zaXppbmcgPT09ICdzbScgPyAnMjBweCcgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkVXJsID8gPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZFJlcGVhdDogJ25vLXJlcGVhdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZFNpemU6ICdjb3ZlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZFBvc2l0aW9uOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6IGB1cmwoJHtkb3dubG9hZFVybH0pYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+IDogVXRpbHMuZ2V0SW5pdGlhbHMocHJvcHMuZGF0YS5uYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e3Byb3BzLmRhdGEudXNlcklkICsgJy12aWRlbyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17NjQwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXszMjB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvUGxheSByZWY9e3ZpZGVvUmVmfSBtdXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdEZpdDogJ2NvdmVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHByb3BzLmlzQ3VycmVudFVzZXIgPyAnc2NhbGVYKC0xKScgOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgekluZGV4OiAnMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogKHZpZGVvTXV0ZWQgfHwgIXZpZGVvUmVmLmN1cnJlbnQgfHwgIXZpZGVvUmVmLmN1cnJlbnQuc3JjT2JqZWN0KSA/ICdub25lJyA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypXZSBuZWVkIHRoaXMgZWxlbWVudCB0byBjYXB0dXJlIHJlY29yZGluZyBzb3VuZCovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmlzSG9zdCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXVkaW9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtwcm9wcy5kYXRhLnVzZXJJZCArICctYXVkaW8nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1BsYXkgcmVmPXthdWRpb1JlZn0gbXV0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ25vbmUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17cHJvcHMuc2l6aW5nID09PSAnc20nID8gJ25hbWUtbGFiZWwtc20nIDogJ25hbWUtbGFiZWwnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAnMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IHByb3BzLnNpemluZyA9PT0gJ3NtJyA/ICc2cHgnIDogJzhweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnZmxleC1lbmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYXA6ICc0cHgnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6ICc3MCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogcHJvcHMuc2l6aW5nID09PSAnc20nID8gJzFweCA4cHgnIDogJzJweCAxMHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzZweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsMCwwLDAuNTUpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogcHJvcHMuc2l6aW5nID09PSAnc20nID8gJzExcHgnIDogJzEzcHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogNTAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZUhlaWdodDogMS40LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6ICdhdXRvJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHshcHJvcHMuaXNDdXJyZW50VXNlciAmJiBnZXRQYXJ0aWNpcGFudE5hbWUoKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9wcy5pc0N1cnJlbnRVc2VyICYmICdZb3UnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXByb3BzLmlzQ3VycmVudFVzZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3ttYXJnaW5MZWZ0OiAnNHB4JywgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCcsIGdhcDogJzRweCd9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmlzSG9zdCAmJiAhYXVkaW9NdXRlZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLm9uSG9zdEF1ZGlvTXV0ZShwcm9wcy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMjRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsMCwwLDAuNTUpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNnB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaWQ9eydNSUMnfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGF1ZGlvTXV0ZWQgPyAnaW5saW5lLWZsZXgnIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjU1KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNnB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMnB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaWQ9eydNSUNfT0ZGJ30vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmlzSG9zdCAmJiAhdmlkZW9NdXRlZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5vbkhvc3RWaWRlb011dGUocHJvcHMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjU1KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNnB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaWQ9eydDQU1FUkEnfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5pc0N1cnJlbnRVc2VyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7ZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCd9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT1cIk15IGRldmljZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrRGV2aWNlc0ljb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWNvbnRyb2xzPXtvcGVuTW9yZUFjdGlvbnMgPyAnZGV2aWNlLW1lbnUnIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD17b3Blbk1vcmVBY3Rpb25zID8gJ3RydWUnIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjU1KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNnB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gaWQ9eydTRVRUSU5HUyd9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFwcm9wcy5pc0N1cnJlbnRVc2VyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e21hcmdpbkxlZnQ6ICc0cHgnfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtoYW5kUmFpc2VkICYmIDxQYW5Ub29sIGZvbnRTaXplPXsnc21hbGwnfSBzdHlsZT17e2NvbG9yOiAnI2UyYjAzMCd9fS8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5pc0N1cnJlbnRVc2VyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9eydtZWV0aW5nLWF1ZGlvLWVsLWNvbnRhaW5lcid9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPE1lbnVcbiAgICAgICAgICAgICAgICBhbmNob3JFbD17YW5jaG9yRWx9XG4gICAgICAgICAgICAgICAgaWQ9XCJkZXZpY2VzLW1lbnVcIlxuICAgICAgICAgICAgICAgIG9wZW49e29wZW5Nb3JlQWN0aW9uc31cbiAgICAgICAgICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZURldmljZU1lbnV9XG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xvc2VEZXZpY2VNZW51fVxuICAgICAgICAgICAgICAgIFBhcGVyUHJvcHM9e3tcbiAgICAgICAgICAgICAgICAgICAgZWxldmF0aW9uOiAwLFxuICAgICAgICAgICAgICAgICAgICBzeDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICd2aXNpYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogJ2Ryb3Atc2hhZG93KDBweCAycHggOHB4IHJnYmEoMCwwLDAsMC4zMikpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG10OiAxLjUsXG4gICAgICAgICAgICAgICAgICAgICAgICAnJiAuTXVpTGlzdC1yb290Jzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTFlMWUxJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc0cHgnXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgJyYgLk11aUF2YXRhci1yb290Jzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAzMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDMyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1sOiAtMC41LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1yOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICcmOmJlZm9yZSc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnXCJcIicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IDE0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJnY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC01MCUpIHJvdGF0ZSg0NWRlZyknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpJbmRleDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW49e3tcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbDogMjAsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsOiAxMzZcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGFuY2hvck9yaWdpbj17e1xuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsOiAncmlnaHQnLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbDogJ3RvcCdcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYXVkaW9EZXZpY2VzLm1hcCgoZGV2aWNlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxNZW51SXRlbSBvbkNsaWNrPXsoKSA9PiBjaGFuZ2VBdWRpb0RldmljZShkZXZpY2UpfSBrZXk9e2luZGV4fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e2NvbG9yOiBzZWxlY3RlZEF1ZGlvRGV2aWNlICYmIHNlbGVjdGVkQXVkaW9EZXZpY2UuaWQgPT09IGRldmljZS5pZCA/ICcjMTk4NzU0JyA6IG51bGx9fT5cbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UubGFiZWxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9NZW51SXRlbT47XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9NZW51PlxuICAgICAgICA8Lz5cbiAgICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVkNSb29tUGFydGljaXBhbnQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBQSxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsWUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksZUFBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUssZUFBQSxHQUFBSCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU0sZ0JBQUEsR0FBQUosc0JBQUEs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
|
|
858
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX1ZDRXZlbnRUeXBlIiwiX1ZDRXZlbnRNYW5hZ2VyIiwiX1ZDUm9vbVJlY29yZGVyIiwiX01lZGlhU291cEhlbHBlciIsIl9UcmFja3MiLCJfSWNvbkJ1dHRvbiIsIl9JY29uIiwiX2ljb25zTWF0ZXJpYWwiLCJfVG9vbHRpcCIsIl9tYXRlcmlhbCIsIl9Tb2NrZXRNYW5hZ2VyIiwiX0J1dHRvbiIsIl9BcHBsaWNhdGlvbk1hbmFnZXIiLCJfYXVkaW9MZXZlbE1ldGVyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwidCIsIldlYWtNYXAiLCJyIiwibiIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiU1BFQUtJTkdfTEVWRUwiLCJWSURFT19DT0RFQ19PUFRJT05TIiwiZXhwb3J0cyIsInZpZGVvR29vZ2xlU3RhcnRCaXRyYXRlIiwiVklERU9fQ09OU1RSQUlOVFMiLCJhdWRpbyIsInZpZGVvIiwid2lkdGgiLCJtaW4iLCJpZGVhbCIsImhlaWdodCIsIlZJREVPX0VOQ09ESU5HUyIsInJpZCIsIm1heEJpdHJhdGUiLCJzY2FsYWJpbGl0eU1vZGUiLCJsb2NhdGlvbiIsIndpbmRvdyIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJWQ1Jvb21QYXJ0aWNpcGFudCIsInByb3BzIiwiaGFuZFJhaXNlZCIsInNldEhhbmRSYWlzZWQiLCJSZWFjdCIsInVzZVN0YXRlIiwidmlkZW9NdXRlZCIsInNldFZpZGVvTXV0ZWQiLCJhdWRpb011dGVkIiwic2V0QXVkaW9NdXRlZCIsInByb2R1Y2VyVHJhbnNwb3J0Iiwic2V0UHJvZHVjZXJUcmFuc3BvcnQiLCJ2aWRlb1JlZnJlc2hlciIsInNldFZpZGVvUmVmcmVzaGVyIiwicHJvZHVjZXJzIiwiTWFwIiwiZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0IiwiYXVkaW9EZXZpY2VzIiwic2V0QXVkaW9EZXZpY2VzIiwic2VsZWN0ZWRBdWRpb0RldmljZSIsInNldFNlbGVjdGVkQXVkaW9EZXZpY2UiLCJjb25zdW1lcnMiLCJzb3VuZExldmVsIiwic2V0U291bmRMZXZlbCIsImV2ZW50SGFuZGxlciIsInZpZGVvUmVmIiwidXNlUmVmIiwidmlkZW9TdHJlYW0iLCJhdWRpb1JlZiIsInRyYWNrcyIsIlRyYWNrcyIsInNvdW5kTGV2ZWxDb3VudGVyIiwibWV0ZXJzIiwidW5tb3VudGVkUmVmIiwic2hvd1ZpZGVvIiwiZGV2aWNlIiwicGFydGljaXBhbnRzIiwibnVtYmVyT2ZJblZpZXdQYXJ0aWNpcGFudHMiLCJhbmNob3JFbCIsInNldEFuY2hvckVsIiwib3Blbk1vcmVBY3Rpb25zIiwiQm9vbGVhbiIsImRvd25sb2FkVXJsIiwic2V0RG93bmxvYWRVcmwiLCJoYW5kbGVyIiwiaWQiLCJkYXRhIiwidXNlcklkIiwib24iLCJldmVudFR5cGUiLCJiZSIsIlZDRXZlbnRUeXBlIiwiQVVESU9fVklTVUFMX1NFVFRJTkdTX0NIQU5HRUQiLCJvbkFWU2V0dGluZ3NDaGFuZ2UiLCJwYXlsb2FkIiwiUkFJU0VfSEFORCIsIm9uUmFpc2VIYW5kIiwiTE9XRVJfSEFORCIsIm9uTG93ZXJIYW5kIiwiTkVXX1BST0RVQ0VSUyIsIm9uTmV3UHJvZHVjZXJzIiwiQ09OU1VNRVJfQ0xPU0VEIiwiY29uc3VtZXJJZCIsInJlbW92ZUNvbnN1bWVyIiwia2luZCIsIkFVRElPX0xFVkVMIiwibGV2ZWwiLCJoYW5kbGVDbGlja0RldmljZXNJY29uIiwiZXZlbnQiLCJjdXJyZW50VGFyZ2V0IiwiY2hhbmdlQXVkaW9EZXZpY2UiLCJ1c2VFZmZlY3QiLCJhcGkiLCJjdXJyZW50Iiwic3JjT2JqZWN0Iiwic291bmRNb25pdG9yIiwiaW5WaWV3IiwiaGFuZGxlQ2xvc2VEZXZpY2VNZW51IiwiaXNDdXJyZW50VXNlciIsInN0b3BQcm9kdWNpbmciLCJwcm9kdWNlIiwiVXRpbHMiLCJpc051bGwiLCJhdmF0YXJJZCIsImFwcGxpY2F0aW9uTWFuYWdlciIsImdldENvbnRleHRSb290Iiwic2Vzc2lvblN0b3JhZ2UiLCJnZXRJdGVtIiwib25BdWRpb0RldmljZUNoYW5nZSIsImNyZWF0ZVByb2R1Y2VyVHJhbnNwb3J0IiwiY29uc29sZSIsImxvZyIsInNwbGljZSIsImxlbmd0aCIsIm1lZGlhU291cEhlbHBlciIsImluaXRQcm9kdWNlclRyYW5zcG9ydCIsIm1lZXRpbmdJZCIsImdldFVzZXJEZXRhaWxzIiwidXNlcm5hbWUiLCJoYW5kbGVEZXZpY2VzQ2hhbmdlZCIsImRldmljZXMiLCJhdWRpb0RldmljZUxpc3QiLCJmb3JFYWNoIiwicHVzaCIsImRldmljZUlkIiwibGFiZWwiLCJ2Y0V2ZW50TWFuYWdlciIsInJlbW92ZVN1YnNjcmlwdGlvbnMiLCJhZGRTdWJzY3JpcHRpb25zIiwibmF2aWdhdG9yIiwibWVkaWFEZXZpY2VzIiwib25kZXZpY2VjaGFuZ2UiLCJlbnVtZXJhdGVEZXZpY2VzIiwidGhlbiIsImNvbnN1bWVGYWlsZWRQcm9kdWNlcnMiLCJrZXkiLCJ2YWx1ZSIsInN0b3AiLCJjbGVhciIsInN0YXJ0TWV0ZXIiLCJzdHJlYW0iLCJzdG9wTWV0ZXIiLCJzdGFydEF1ZGlvTGV2ZWxNZXRlciIsImZpcmVFdmVudCIsImRlbGV0ZSIsInR5cGUiLCJlcnJvciIsImNhblByb2R1Y2UiLCJtZWRpYUNvbnN0cmFpbnRzIiwiZ2V0VXNlck1lZGlhIiwidHJhY2siLCJnZXRBdWRpb1RyYWNrcyIsImdldFZpZGVvVHJhY2tzIiwicGFyYW1zIiwiaXNIb3N0IiwibWVkaWFSZWNvcmRlciIsImFkZFRyYWNrIiwic2V0QXVkaW9UcmFjayIsImVuY29kaW5ncyIsImNvZGVjT3B0aW9ucyIsInNldFZpZGVvVHJhY2siLCJwcm9kdWNlciIsImlzUnRwQ29sbGlzaW9uRXJyb3IiLCJTWVNURU1fQUxFUlQiLCJtZXNzYWdlIiwiUkVKT0lOX0FMRVJUX01FU1NBR0UiLCJnZXRTdGF0cyIsImdldFRyYWNrcyIsInNldFRpbWVvdXQiLCJjYWxsYmFjayIsInByb2R1Y2VySWQiLCJjbG9zZSIsInN0b3BWaWRlb1RyYWNrIiwic3RvcEF1ZGlvVHJhY2siLCJzb2NrZXRNYW5hZ2VyIiwiZW1pdEV2ZW50IiwiUFJPRFVDRVJfQ0xPU0VEIiwicm9vbUlkIiwiY2F0Y2giLCJsb2FkaW5nIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiSlNPTiIsInN0cmluZ2lmeSIsInNjcmVlblNoYXJpbmciLCJjb25zdW1lIiwiYXVkaW9FbGVtZW50IiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInJlbW92ZVRyYWNrIiwiZWxlbWVudEJ5SWQiLCJyZW1vdmVDaGlsZCIsInJldHJ5Q29uc3VtZSIsInJldHJpZXMiLCJ0cmFuc3BvcnQiLCJnZXRSZWN2VHJhbnNwb3J0IiwiRXJyb3IiLCJnZXRDb25zdW1lU3RyZWFtIiwicnRwQ2FwYWJpbGl0aWVzIiwiX3JlZiIsImNvbnN1bWVyIiwiY3JlYXRlRWxlbWVudCIsInBsYXlzaW5saW5lIiwiYXV0b3BsYXkiLCJhcHBlbmRDaGlsZCIsInRyYWNrRW5kZWRQYXJ0aWNpcGFudCIsImZpbmQiLCJwIiwiZ2V0UGFydGljaXBhbnROYW1lIiwibmFtZSIsImNvbmNhdCIsIkZyYWdtZW50IiwiY2xhc3NOYW1lIiwic3R5bGUiLCJwYWRkaW5nIiwicG9zaXRpb24iLCJib3JkZXJSYWRpdXMiLCJvdmVyZmxvdyIsImJveFNpemluZyIsImJhY2tncm91bmRDb2xvciIsImJvcmRlciIsImdldEFwcGxpY2F0aW9uUHJpbWFyeUNvbG9yIiwiYm94U2hhZG93IiwidHJhbnNpdGlvbiIsIm1hcmdpbkJvdHRvbSIsInNpemluZyIsImNvbG9yIiwiZm9udFNpemUiLCJiYWNrZ3JvdW5kUmVwZWF0IiwiYmFja2dyb3VuZFNpemUiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJiYWNrZ3JvdW5kSW1hZ2UiLCJnZXRJbml0aWFscyIsImF1dG9QbGF5IiwicmVmIiwibXV0ZWQiLCJvYmplY3RGaXQiLCJ0cmFuc2Zvcm0iLCJ6SW5kZXgiLCJkaXNwbGF5IiwibGVmdCIsImJvdHRvbSIsImFsaWduSXRlbXMiLCJnYXAiLCJtYXhXaWR0aCIsImZvbnRXZWlnaHQiLCJsaW5lSGVpZ2h0Iiwid2hpdGVTcGFjZSIsInRleHRPdmVyZmxvdyIsIm1hcmdpbkxlZnQiLCJtYXJnaW5SaWdodCIsImp1c3RpZnlDb250ZW50Iiwib25DbGljayIsIm9uSG9zdEF1ZGlvTXV0ZSIsIm9uSG9zdFZpZGVvTXV0ZSIsInRpdGxlIiwiUGFuVG9vbCIsIk1lbnUiLCJvcGVuIiwib25DbG9zZSIsIlBhcGVyUHJvcHMiLCJlbGV2YXRpb24iLCJzeCIsImZpbHRlciIsIm10IiwibWwiLCJtciIsImNvbnRlbnQiLCJ0b3AiLCJyaWdodCIsImJnY29sb3IiLCJ0cmFuc2Zvcm1PcmlnaW4iLCJob3Jpem9udGFsIiwidmVydGljYWwiLCJhbmNob3JPcmlnaW4iLCJtYXAiLCJpbmRleCIsIk1lbnVJdGVtIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbWVkaWEvVkNSb29tUGFydGljaXBhbnQuanN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwcyAqL1xuaW1wb3J0IFJlYWN0LCB7dXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgJy4vVkNSb29tUGFydGljaXBhbnQuY3NzJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi9VdGlscyc7XG5pbXBvcnQge1ZDRXZlbnRUeXBlfSBmcm9tICcuL1ZDRXZlbnRUeXBlJztcbmltcG9ydCB2Y0V2ZW50TWFuYWdlciBmcm9tICcuL1ZDRXZlbnRNYW5hZ2VyJztcbmltcG9ydCBtZWRpYVJlY29yZGVyIGZyb20gJy4vVkNSb29tUmVjb3JkZXInO1xuaW1wb3J0IG1lZGlhU291cEhlbHBlciwge2lzUnRwQ29sbGlzaW9uRXJyb3IsIFJFSk9JTl9BTEVSVF9NRVNTQUdFfSBmcm9tICcuL01lZGlhU291cEhlbHBlcic7XG5pbXBvcnQgVHJhY2tzIGZyb20gJy4vVHJhY2tzJztcbmltcG9ydCBJY29uQnV0dG9uIGZyb20gJ0BtdWkvbWF0ZXJpYWwvSWNvbkJ1dHRvbic7XG5pbXBvcnQgSWNvbiBmcm9tICcuLi9JY29uJztcbmltcG9ydCB7UGFuVG9vbH0gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbCc7XG5pbXBvcnQgVG9vbHRpcCBmcm9tICdAbXVpL21hdGVyaWFsL1Rvb2x0aXAnO1xuaW1wb3J0IHtNZW51LCBNZW51SXRlbX0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XG5pbXBvcnQgc29ja2V0TWFuYWdlciBmcm9tICcuLi9Tb2NrZXRNYW5hZ2VyJztcbmltcG9ydCBCdXR0b24gZnJvbSAnQG11aS9tYXRlcmlhbC9CdXR0b24nO1xuaW1wb3J0IGFwcGxpY2F0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9BcHBsaWNhdGlvbk1hbmFnZXInO1xuaW1wb3J0IHtzdGFydEF1ZGlvTGV2ZWxNZXRlcn0gZnJvbSAnLi9hdWRpb0xldmVsTWV0ZXInO1xuXG5jb25zdCBTUEVBS0lOR19MRVZFTCA9IDY7XG5cbmV4cG9ydCBjb25zdCBWSURFT19DT0RFQ19PUFRJT05TID0ge1xuICAgIHZpZGVvR29vZ2xlU3RhcnRCaXRyYXRlOiAxMDAwXG59O1xuXG5leHBvcnQgY29uc3QgVklERU9fQ09OU1RSQUlOVFMgPSB7XG4gICAgYXVkaW86IGZhbHNlLFxuICAgIHZpZGVvOiB7XG4gICAgICAgIHdpZHRoOiB7XG4gICAgICAgICAgICBtaW46IDY0MCxcbiAgICAgICAgICAgIGlkZWFsOiAxOTIwXG4gICAgICAgIH0sXG4gICAgICAgIGhlaWdodDoge1xuICAgICAgICAgICAgbWluOiA0MDAsXG4gICAgICAgICAgICBpZGVhbDogMTA4MFxuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IFZJREVPX0VOQ09ESU5HUyA9IFtcbiAgICB7XG4gICAgICAgIHJpZDogJ3IwJyxcbiAgICAgICAgbWF4Qml0cmF0ZTogMjAwMDAsXG4gICAgICAgIC8vc2NhbGVSZXNvbHV0aW9uRG93bkJ5OiAxMC4wLFxuICAgICAgICBzY2FsYWJpbGl0eU1vZGU6ICdTMVQzJ1xuICAgIH0sXG4gICAge1xuICAgICAgICByaWQ6ICdyMScsXG4gICAgICAgIG1heEJpdHJhdGU6IDE1MDAwMCxcbiAgICAgICAgc2NhbGFiaWxpdHlNb2RlOiAnUzFUMydcbiAgICB9LFxuICAgIHtcbiAgICAgICAgcmlkOiAncjInLFxuICAgICAgICBtYXhCaXRyYXRlOiA0NTAwMDAsXG4gICAgICAgIHNjYWxhYmlsaXR5TW9kZTogJ1MxVDMnXG4gICAgfVxuXTtcblxuY29uc3QgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xuY29uc3QgVkNSb29tUGFydGljaXBhbnQgPSAocHJvcHMpID0+IHtcbiAgICBjb25zdCBbaGFuZFJhaXNlZCwgc2V0SGFuZFJhaXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3ZpZGVvTXV0ZWQsIHNldFZpZGVvTXV0ZWRdID0gUmVhY3QudXNlU3RhdGUocHJvcHMudmlkZW9NdXRlZCk7XG4gICAgY29uc3QgW2F1ZGlvTXV0ZWQsIHNldEF1ZGlvTXV0ZWRdID0gUmVhY3QudXNlU3RhdGUocHJvcHMuYXVkaW9NdXRlZCk7XG4gICAgY29uc3QgW3Byb2R1Y2VyVHJhbnNwb3J0LCBzZXRQcm9kdWNlclRyYW5zcG9ydF0gPSBSZWFjdC51c2VTdGF0ZShwcm9wcy5wcm9kdWNlclRyYW5zcG9ydCk7XG4gICAgY29uc3QgW3ZpZGVvUmVmcmVzaGVyLCBzZXRWaWRlb1JlZnJlc2hlcl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3Byb2R1Y2Vyc10gPSBSZWFjdC51c2VTdGF0ZShuZXcgTWFwKCkpO1xuICAgIGNvbnN0IFtmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnRdID0gUmVhY3QudXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFthdWRpb0RldmljZXMsIHNldEF1ZGlvRGV2aWNlc10gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW3NlbGVjdGVkQXVkaW9EZXZpY2UsIHNldFNlbGVjdGVkQXVkaW9EZXZpY2VdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW2NvbnN1bWVyc10gPSBSZWFjdC51c2VTdGF0ZShuZXcgTWFwKCkpO1xuICAgIGNvbnN0IFtzb3VuZExldmVsLCBzZXRTb3VuZExldmVsXSA9IFJlYWN0LnVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtldmVudEhhbmRsZXJdID0gdXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IHZpZGVvUmVmID0gdXNlUmVmKCk7XG4gICAgY29uc3QgdmlkZW9TdHJlYW0gPSB1c2VSZWYoKTtcbiAgICBjb25zdCBhdWRpb1JlZiA9IHVzZVJlZigpO1xuICAgIGNvbnN0IHRyYWNrcyA9IHVzZVJlZihuZXcgVHJhY2tzKCkpO1xuICAgIGNvbnN0IHNvdW5kTGV2ZWxDb3VudGVyID0gdXNlUmVmKDApO1xuICAgIC8vIEFjdGl2ZS1zcGVha2VyIG1ldGVyczogdGhpcyAoc2VsZikgdGlsZSBpcyB0aGUgYXVkaW8gaHViIOKAlCBpdCBjb25zdW1lc1xuICAgIC8vIGV2ZXJ5IHBhcnRpY2lwYW50J3MgYXVkaW8gKyBwcm9kdWNlcyB0aGUgbG9jYWwgbWljIOKAlCBzbyBpdCBydW5zIHRoZSBsZXZlbFxuICAgIC8vIG1ldGVycyBhbmQgYnJvYWRjYXN0cyB7dXNlcklkLCBsZXZlbH0gZm9yIGVhY2ggdGlsZSB0byBoaWdobGlnaHQgaXRzZWxmLlxuICAgIGNvbnN0IG1ldGVycyA9IHVzZVJlZihuZXcgTWFwKCkpO1xuICAgIC8vIFNldCBvbiB1bm1vdW50IHNvIHRoZSByZWN1cnNpdmUgY29uc3VtZS9yZXRyeSBzZXRUaW1lb3V0IGxvb3BzIHN0b3BcbiAgICAvLyByZS1zY2hlZHVsaW5nIChvdGhlcndpc2UgdGhleSBwb2xsL3JldHJ5IGZvcmV2ZXIgYWZ0ZXIgdGhlIHRpbGUgaXMgZ29uZSkuXG4gICAgY29uc3QgdW5tb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICBjb25zdCBzaG93VmlkZW8gPSB0cnVlO1xuICAgIGNvbnN0IHtcbiAgICAgICAgZGV2aWNlLFxuICAgICAgICBwYXJ0aWNpcGFudHNcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3Qge251bWJlck9mSW5WaWV3UGFydGljaXBhbnRzfSA9IHByb3BzO1xuICAgIGNvbnN0IFthbmNob3JFbCwgc2V0QW5jaG9yRWxdID0gdXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3Qgb3Blbk1vcmVBY3Rpb25zID0gQm9vbGVhbihhbmNob3JFbCk7XG5cbiAgICBjb25zdCBbZG93bmxvYWRVcmwsIHNldERvd25sb2FkVXJsXSA9IHVzZVN0YXRlKG51bGwpO1xuXG4gICAgY29uc3QgaGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGdldCBpZCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21lZXRpbmctcGFydGljaXBhbnQtJyArIHByb3BzLmRhdGEudXNlcklkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uOiAoZXZlbnRUeXBlLCBiZSkgPT4ge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuQVVESU9fVklTVUFMX1NFVFRJTkdTX0NIQU5HRUQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkFWU2V0dGluZ3NDaGFuZ2UoYmUucGF5bG9hZCA/IGJlLnBheWxvYWQgOiBiZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5SQUlTRV9IQU5EOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25SYWlzZUhhbmQoYmUucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5MT1dFUl9IQU5EOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25Mb3dlckhhbmQoYmUucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5ORVdfUFJPRFVDRVJTOlxuICAgICAgICAgICAgICAgICAgICAgICAgb25OZXdQcm9kdWNlcnMoYmUucGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBWQ0V2ZW50VHlwZS5DT05TVU1FUl9DTE9TRUQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3VtZXJzLmhhcyhiZS5wYXlsb2FkLmNvbnN1bWVySWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ29uc3VtZXIoYmUucGF5bG9hZC5jb25zdW1lcklkLCBiZS5wYXlsb2FkLmtpbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgVkNFdmVudFR5cGUuQVVESU9fTEVWRUw6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmUucGF5bG9hZCAmJiBiZS5wYXlsb2FkLnVzZXJJZCA9PT0gcHJvcHMuZGF0YS51c2VySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTb3VuZExldmVsKGJlLnBheWxvYWQubGV2ZWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVDbGlja0RldmljZXNJY29uID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIHNldEFuY2hvckVsKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgIH07XG5cbiAgICBjb25zdCBjaGFuZ2VBdWRpb0RldmljZSA9IChkZXZpY2UpID0+IHtcbiAgICAgICAgc2V0U2VsZWN0ZWRBdWRpb0RldmljZShkZXZpY2UpO1xuICAgIH07XG5cbiAgICBjb25zdCBvblJhaXNlSGFuZCA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChwYXlsb2FkICYmIHBheWxvYWQudXNlcklkID09PSBwcm9wcy5kYXRhLnVzZXJJZCkge1xuICAgICAgICAgICAgc2V0SGFuZFJhaXNlZCh0cnVlKTtcbiAgICAgICAgICAgIHByb3BzLmRhdGEuaGFuZFJhaXNlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25Mb3dlckhhbmQgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAocGF5bG9hZCAmJiBwYXlsb2FkLnVzZXJJZCA9PT0gcHJvcHMuZGF0YS51c2VySWQpIHtcbiAgICAgICAgICAgIHNldEhhbmRSYWlzZWQoZmFsc2UpO1xuICAgICAgICAgICAgcHJvcHMuZGF0YS5oYW5kUmFpc2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgZXZlbnRIYW5kbGVyLmFwaSA9IGhhbmRsZXIoKTtcbiAgICB9KTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICh2aWRlb1JlZi5jdXJyZW50ICYmIHZpZGVvU3RyZWFtLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHZpZGVvUmVmLmN1cnJlbnQuc3JjT2JqZWN0ID0gdmlkZW9TdHJlYW0uY3VycmVudDtcbiAgICAgICAgfVxuICAgIH0sIFt2aWRlb1JlZi5jdXJyZW50XSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAocHJvcHMuc291bmRNb25pdG9yICYmICFwcm9wcy5pblZpZXcpIHtcbiAgICAgICAgICAgIGlmIChzb3VuZExldmVsID4gMykge1xuICAgICAgICAgICAgICAgIHNvdW5kTGV2ZWxDb3VudGVyLmN1cnJlbnQgPSAxMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc291bmRMZXZlbENvdW50ZXIuY3VycmVudCA+IDApIHtcbiAgICAgICAgICAgICAgICBzb3VuZExldmVsQ291bnRlci5jdXJyZW50LS07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb3BzLnNvdW5kTW9uaXRvcihwcm9wcy5kYXRhLnVzZXJJZCwgc291bmRMZXZlbENvdW50ZXIuY3VycmVudCA9PT0gMCB8fCBhdWRpb011dGVkKTtcbiAgICAgICAgfVxuICAgIH0sIFtzb3VuZExldmVsXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoYXVkaW9NdXRlZCkge1xuICAgICAgICAgICAgc2V0U291bmRMZXZlbCgwKTtcbiAgICAgICAgICAgIGlmIChwcm9wcy5zb3VuZE1vbml0b3IgJiYgIXByb3BzLmluVmlldykge1xuICAgICAgICAgICAgICAgIHByb3BzLnNvdW5kTW9uaXRvcihwcm9wcy5kYXRhLnVzZXJJZCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbYXVkaW9NdXRlZF0pO1xuXG4gICAgY29uc3QgaGFuZGxlQ2xvc2VEZXZpY2VNZW51ID0gKCkgPT4ge1xuICAgICAgICBzZXRBbmNob3JFbChudWxsKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25BVlNldHRpbmdzQ2hhbmdlID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKHByb3BzLmRhdGEudXNlcklkID09PSBwYXlsb2FkLnVzZXJJZCkge1xuICAgICAgICAgICAgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgaWNvbiBtdXN0IHJlZmxlY3QgdGhlIEFDVFVBTCBwcm9kdWNlciwgbm90IHRoZSByZXF1ZXN0ZWQgc3RhdGU6XG4gICAgICAgICAgICAgICAgLy8gLSBtdXRlOiBmbGlwIHRoZSBpY29uIG9ubHkgb25jZSBzdG9wUHJvZHVjaW5nIGNvbmZpcm1zIHRoZSBwcm9kdWNlciBpc1xuICAgICAgICAgICAgICAgIC8vICAgY2xvc2VkIGFuZCB0aGUgdHJhY2sgc3RvcHBlZCAoaXRzIHN1Y2Nlc3MgY2FsbGJhY2spIOKAlCBzbyB3ZSBuZXZlciBzaG93XG4gICAgICAgICAgICAgICAgLy8gICBcIm11dGVkXCIgd2hpbGUgYXVkaW8gaXMgc3RpbGwgZ29pbmcgb3V0LlxuICAgICAgICAgICAgICAgIC8vIC0gdW5tdXRlOiBwcm9kdWNlKCkgZmxpcHMgdGhlIGljb24gb2ZmIG9ubHkgYWZ0ZXIgdGhlIHByb2R1Y2VyIGlzIGNyZWF0ZWQuXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuYXVkaW9NdXRlZCkge1xuICAgICAgICAgICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCdhdWRpbycsICgpID0+IHNldEF1ZGlvTXV0ZWQodHJ1ZSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGV2aWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y2UoJ2F1ZGlvJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQudmlkZW9NdXRlZCkge1xuICAgICAgICAgICAgICAgICAgICBzdG9wUHJvZHVjaW5nKCd2aWRlbycsICgpID0+IHNldFZpZGVvTXV0ZWQodHJ1ZSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGV2aWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y2UoJ3ZpZGVvJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRBdWRpb011dGVkKHBheWxvYWQuYXVkaW9NdXRlZCk7XG4gICAgICAgICAgICAgICAgc2V0VmlkZW9NdXRlZChwYXlsb2FkLnZpZGVvTXV0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5kYXRhICYmICFVdGlscy5pc051bGwocHJvcHMuZGF0YS5hdmF0YXJJZClcbiAgICAgICAgICAgICYmIHByb3BzLmRhdGEuYXZhdGFySWQgIT09ICd1bmRlZmluZWQnICYmIHByb3BzLmRhdGEuYXZhdGFySWQgIT09ICdudWxsJykge1xuICAgICAgICAgICAgc2V0RG93bmxvYWRVcmwobG9jYXRpb24gKyBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0Q29udGV4dFJvb3QoKSArICcvZG9jcy9hcGkvdjEvbWFuYWdlci9kb3dubG9hZC8nICsgcHJvcHMuZGF0YS5hdmF0YXJJZCArXG4gICAgICAgICAgICAgICAgJz9hY2Nlc3NfdG9rZW49JyArIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FjY2Vzc1Rva2VuJykgKyAnJmlkVG9rZW49JyArIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2lkVG9rZW4nKSk7XG4gICAgICAgIH1cbiAgICB9LCBbcHJvcHMuZGF0YV0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgLy8gUmVtb3RlIHRpbGVzIHJlZmxlY3QgdGhlIHBlZXIncyByZXBvcnRlZCBzdGF0ZS4gVGhlIENVUlJFTlQgdXNlcidzIGljb24gaXMgTk9UXG4gICAgICAgIC8vIHN5bmNlZCBmcm9tIHByb3BzIOKAlCBpdCBpcyBkcml2ZW4gb25seSBieSB0aGUgYWN0dWFsIHByb2R1Y2VyIChtdXRlIHNob3dzIG9uY2UgdGhlXG4gICAgICAgIC8vIHByb2R1Y2VyIGlzIGNvbmZpcm1lZCBzdG9wcGVkOyB1bm11dGUgb25jZSBwcm9kdWNlKCkgc3VjY2VlZHMpLCBzbyB0aGUgaWNvbiBjYW5cbiAgICAgICAgLy8gbmV2ZXIgY2xhaW0gXCJtdXRlZFwiIHdoaWxlIGF1ZGlvIGlzIHN0aWxsIGJlaW5nIHByb2R1Y2VkLlxuICAgICAgICBpZiAoIXByb3BzLmlzQ3VycmVudFVzZXIpIHtcbiAgICAgICAgICAgIHNldEF1ZGlvTXV0ZWQocHJvcHMuYXVkaW9NdXRlZCk7XG4gICAgICAgIH1cbiAgICB9LCBbcHJvcHMuYXVkaW9NdXRlZF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICBzZXRWaWRlb011dGVkKHByb3BzLnZpZGVvTXV0ZWQpO1xuICAgICAgICB9XG4gICAgfSwgW3Byb3BzLnZpZGVvTXV0ZWRdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChwcm9kdWNlclRyYW5zcG9ydCkge1xuICAgICAgICAgICAgLy8gQSAocmUpYXNzaWduZWQgdHJhbnNwb3J0IG1lYW5zIGV4aXN0aW5nIHByb2R1Y2VycyBsaXZlZCBvbiB0aGUgb2xkXG4gICAgICAgICAgICAvLyAobm93LWNsb3NlZCkgdHJhbnNwb3J0LiBUZWFyIHRoZW0gZG93biBwcm9wZXJseSDigJQgY2xvc2UgKyBzdG9wIHRoZVxuICAgICAgICAgICAgLy8gbG9jYWwgdHJhY2tzICsgbm90aWZ5IHRoZSBzZXJ2ZXIg4oCUIHNvIHByb2R1Y2UoKSByZWNyZWF0ZXMgdGhlbSBvbiB0aGVcbiAgICAgICAgICAgIC8vIG5ldyB0cmFuc3BvcnQgaW5zdGVhZCBvZiBlYXJseS1yZXR1cm5pbmcuIE5vLW9wIG9uIGZpcnN0IG1vdW50LlxuICAgICAgICAgICAgc3RvcFByb2R1Y2luZygndmlkZW8nKTtcbiAgICAgICAgICAgIHN0b3BQcm9kdWNpbmcoJ2F1ZGlvJyk7XG5cbiAgICAgICAgICAgIGlmICghcHJvcHMudmlkZW9NdXRlZCkge1xuICAgICAgICAgICAgICAgIHByb2R1Y2UoJ3ZpZGVvJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXByb3BzLmF1ZGlvTXV0ZWQpIHtcbiAgICAgICAgICAgICAgICBwcm9kdWNlKCdhdWRpbycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgW3Byb2R1Y2VyVHJhbnNwb3J0XSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzZXRQcm9kdWNlclRyYW5zcG9ydChwcm9wcy5wcm9kdWNlclRyYW5zcG9ydCk7XG4gICAgfSwgW3Byb3BzLnByb2R1Y2VyVHJhbnNwb3J0XSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAocHJvcHMuaXNDdXJyZW50VXNlcikge1xuICAgICAgICAgICAgcHJvcHMub25BdWRpb0RldmljZUNoYW5nZShzZWxlY3RlZEF1ZGlvRGV2aWNlKTtcbiAgICAgICAgICAgIHN0b3BQcm9kdWNpbmcoJ2F1ZGlvJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZEF1ZGlvRGV2aWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJvZHVjZXJUcmFuc3BvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVByb2R1Y2VyVHJhbnNwb3J0KCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWF1ZGlvTXV0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2UoJ2F1ZGlvJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sIFtzZWxlY3RlZEF1ZGlvRGV2aWNlXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAvLyBPbmNlIHRoZSBEZXZpY2UgaXMgcmVhZHksIGNvbnN1bWUgdGhlIHByb2R1Y2VycyB3ZSBhbHJlYWR5IGtub3cgYWJvdXRcbiAgICAgICAgLy8gYW5kIHJlcGxheSBhbnkgdGhhdCBhcnJpdmVkIGJlZm9yZSB3ZSB3ZXJlIHJlYWR5LiBSZWN2IHRyYW5zcG9ydHNcbiAgICAgICAgLy8gdGhlbXNlbHZlcyBhcmUgY3JlYXRlZCBqdXN0LWluLXRpbWUgaW5zaWRlIGNvbnN1bWUoKSAocGVyIGtpbmQpLCBzbyB0aGVcbiAgICAgICAgLy8gdHJpZ2dlciBoZXJlIGlzIHRoZSBEZXZpY2UsIG5vdCBhIHRyYW5zcG9ydC5cbiAgICAgICAgaWYgKGRldmljZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0RFVklDRSBSRUFEWSBXSVRIIFBST0RVQ0VSUyA6ICcsIHByb3BzLmRhdGEucHJvZHVjZXJzKTtcbiAgICAgICAgICAgIGlmIChwcm9wcy5kYXRhLnByb2R1Y2Vycykge1xuICAgICAgICAgICAgICAgIG9uTmV3UHJvZHVjZXJzKHByb3BzLmRhdGEucHJvZHVjZXJzLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb25OZXdQcm9kdWNlcnMoZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0LCB0cnVlKTtcbiAgICAgICAgICAgIGZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydC5zcGxpY2UoMCwgZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9LCBbZGV2aWNlXSk7XG5cbiAgICBjb25zdCBjcmVhdGVQcm9kdWNlclRyYW5zcG9ydCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgc2V0UHJvZHVjZXJUcmFuc3BvcnQoYXdhaXQgbWVkaWFTb3VwSGVscGVyLmluaXRQcm9kdWNlclRyYW5zcG9ydChwcm9wcy5kZXZpY2UsIHByb3BzLm1lZXRpbmdJZCxcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5nZXRVc2VyRGV0YWlscygpLnVzZXJuYW1lKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZURldmljZXNDaGFuZ2VkID0gKGRldmljZXMpID0+IHtcbiAgICAgICAgbGV0IGF1ZGlvRGV2aWNlTGlzdCA9IFtdO1xuICAgICAgICBkZXZpY2VzLmZvckVhY2goKGRldmljZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCdhdWRpb2lucHV0JyA9PT0gZGV2aWNlLmtpbmQpIHtcbiAgICAgICAgICAgICAgICBhdWRpb0RldmljZUxpc3QucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBkZXZpY2UuZGV2aWNlSWQsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBkZXZpY2UubGFiZWxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2V0QXVkaW9EZXZpY2VzKGF1ZGlvRGV2aWNlTGlzdCk7XG5cbiAgICAgICAgaWYgKGF1ZGlvRGV2aWNlTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZEF1ZGlvRGV2aWNlKGF1ZGlvRGV2aWNlTGlzdFswXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZEF1ZGlvRGV2aWNlKG51bGwpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHZjRXZlbnRNYW5hZ2VyLnJlbW92ZVN1YnNjcmlwdGlvbnMoZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgdmNFdmVudE1hbmFnZXIuYWRkU3Vic2NyaXB0aW9ucyhldmVudEhhbmRsZXIsIFZDRXZlbnRUeXBlLkFVRElPX1ZJU1VBTF9TRVRUSU5HU19DSEFOR0VELFxuICAgICAgICAgICAgVkNFdmVudFR5cGUuUkFJU0VfSEFORCwgVkNFdmVudFR5cGUuTE9XRVJfSEFORCwgVkNFdmVudFR5cGUuTkVXX1BST0RVQ0VSUywgVkNFdmVudFR5cGUuQ09OU1VNRVJfQ0xPU0VELFxuICAgICAgICAgICAgVkNFdmVudFR5cGUuQVVESU9fTEVWRUwpO1xuXG4gICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLm9uZGV2aWNlY2hhbmdlID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcygpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKChkZXZpY2VzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlRGV2aWNlc0NoYW5nZWQoZGV2aWNlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKVxuICAgICAgICAgICAgICAgIC50aGVuKChkZXZpY2VzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVEZXZpY2VzQ2hhbmdlZChkZXZpY2VzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcHMuaXNDdXJyZW50VXNlcikge1xuICAgICAgICAgICAgY29uc3VtZUZhaWxlZFByb2R1Y2VycygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCc9PT09PT09PT09PT09PT09PT09PT09REVTVFJPWUlORyBQQVJUSUNJUEFOVD09PT09PT09PT09PT09PT09PT09PT09PT0gOiAnICsgcHJvcHMuZGF0YS51c2VySWQpO1xuICAgICAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAocHJvcHMuaXNDdXJyZW50VXNlcikge1xuICAgICAgICAgICAgICAgIC8vIFJlbGVhc2UgdGhlIGdsb2JhbCBkZXZpY2VjaGFuZ2UgaGFuZGxlciB0aGlzIGNvbXBvbmVudCBpbnN0YWxsZWQg4oCUXG4gICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0IHN1cnZpdmVzIHVubW91bnQgYW5kIGZpcmVzIGludG8gc3RhbGUgY29tcG9uZW50IHN0YXRlLlxuICAgICAgICAgICAgICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMub25kZXZpY2VjaGFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIHN0b3BQcm9kdWNpbmcoJ2F1ZGlvJyk7XG4gICAgICAgICAgICAgICAgc3RvcFByb2R1Y2luZygndmlkZW8nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIGNvbnN1bWVycykge1xuICAgICAgICAgICAgICAgIHJlbW92ZUNvbnN1bWVyKGtleSwgJ3ZpZGVvJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFN0b3AgZXZlcnkgYXVkaW8tbGV2ZWwgbWV0ZXIgKHNlbGYgbWljICsgYWxsIGNvbnN1bWVkIHN0cmVhbXMpLlxuICAgICAgICAgICAgbWV0ZXJzLmN1cnJlbnQuZm9yRWFjaCgoc3RvcCkgPT4gc3RvcCgpKTtcbiAgICAgICAgICAgIG1ldGVycy5jdXJyZW50LmNsZWFyKCk7XG5cbiAgICAgICAgICAgIHZjRXZlbnRNYW5hZ2VyLnJlbW92ZVN1YnNjcmlwdGlvbnMoZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG5cbiAgICAvLyBNZXRlciBhIHN0cmVhbSBhbmQgYnJvYWRjYXN0IGl0cyBsZXZlbCB1bmRlciBgdXNlcklkYC4gS2V5ZWQgc28gd2UgY2FuXG4gICAgLy8gc3RvcC9yZXBsYWNlIGl0IHdoZW4gdGhlIGNvbnN1bWVyIGNsb3NlcyBvciB0aGUgcHJvZHVjZXIgcmVzdGFydHMuXG4gICAgY29uc3Qgc3RhcnRNZXRlciA9IChrZXksIHN0cmVhbSwgdXNlcklkKSA9PiB7XG4gICAgICAgIHN0b3BNZXRlcihrZXkpO1xuICAgICAgICBjb25zdCBzdG9wID0gc3RhcnRBdWRpb0xldmVsTWV0ZXIoc3RyZWFtLCAobGV2ZWwpID0+IHtcbiAgICAgICAgICAgIHZjRXZlbnRNYW5hZ2VyLmZpcmVFdmVudChWQ0V2ZW50VHlwZS5BVURJT19MRVZFTCwge3BheWxvYWQ6IHt1c2VySWQsIGxldmVsfX0pO1xuICAgICAgICB9KTtcbiAgICAgICAgbWV0ZXJzLmN1cnJlbnQuc2V0KGtleSwgc3RvcCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHN0b3BNZXRlciA9IChrZXkpID0+IHtcbiAgICAgICAgY29uc3Qgc3RvcCA9IG1ldGVycy5jdXJyZW50LmdldChrZXkpO1xuICAgICAgICBpZiAoc3RvcCkge1xuICAgICAgICAgICAgc3RvcCgpO1xuICAgICAgICAgICAgbWV0ZXJzLmN1cnJlbnQuZGVsZXRlKGtleSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcHJvZHVjZSA9IGFzeW5jICh0eXBlKSA9PiB7XG4gICAgICAgIGlmICghZGV2aWNlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdObyBhdmFpbGFibGUgZGV2aWNlJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRldmljZS5jYW5Qcm9kdWNlKCd2aWRlbycpICYmIHR5cGUgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCBwcm9kdWNlIHZpZGVvJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNlbGVjdGVkQXVkaW9EZXZpY2UgJiYgdHlwZSA9PT0gJ2F1ZGlvJykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignTm8gYXVkaW8gZGV2aWNlIHNlbGVjdGVkJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvZHVjZXJzLmhhcyh0eXBlKSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1Byb2R1Y2VyIGFscmVhZHkgZXhpc3RzIGZvciB0aGlzIHR5cGUgJyArIHR5cGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG1lZGlhQ29uc3RyYWludHM7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnYXVkaW8nOlxuICAgICAgICAgICAgICAgIG1lZGlhQ29uc3RyYWludHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRldmljZUlkOiBzZWxlY3RlZEF1ZGlvRGV2aWNlLmlkLFxuICAgICAgICAgICAgICAgICAgICBhdWRpbzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmlkZW86IGZhbHNlXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndmlkZW8nOlxuICAgICAgICAgICAgICAgIG1lZGlhQ29uc3RyYWludHMgPSBWSURFT19DT05TVFJBSU5UUztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKG1lZGlhQ29uc3RyYWludHMpO1xuICAgICAgICBjb25zdCB0cmFjayA9IHR5cGUgPT09ICdhdWRpbycgPyBzdHJlYW0uZ2V0QXVkaW9UcmFja3MoKVswXSA6IHN0cmVhbS5nZXRWaWRlb1RyYWNrcygpWzBdO1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgICB0cmFja1xuICAgICAgICB9O1xuXG4gICAgICAgIGF1ZGlvUmVmLmN1cnJlbnQgPSBzdHJlYW07XG4gICAgICAgIGlmICh0eXBlID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICAvLyBNZXRlciB0aGUgbG9jYWwgbWljIHNvIHRoZSBzZWxmIHRpbGUgaGlnaGxpZ2h0cyB3aGVuIHlvdSBzcGVhay5cbiAgICAgICAgICAgIHN0YXJ0TWV0ZXIoJ3NlbGYtYXVkaW8nLCBzdHJlYW0sIHByb3BzLmRhdGEudXNlcklkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcHMuaXNIb3N0ICYmIHR5cGUgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgIG1lZGlhUmVjb3JkZXIuYWRkVHJhY2socHJvcHMuZGF0YS51c2VySWQsIHRyYWNrKTtcbiAgICAgICAgICAgIHRyYWNrcy5jdXJyZW50LnNldEF1ZGlvVHJhY2sodHJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgIHBhcmFtcy5lbmNvZGluZ3MgPSBWSURFT19FTkNPRElOR1M7XG4gICAgICAgICAgICBwYXJhbXMuY29kZWNPcHRpb25zID0gVklERU9fQ09ERUNfT1BUSU9OUztcbiAgICAgICAgICAgIHRyYWNrcy5jdXJyZW50LnNldFZpZGVvVHJhY2sodHJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHByb2R1Y2VyO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcHJvZHVjZXIgPSBhd2FpdCBwcm9kdWNlclRyYW5zcG9ydC5wcm9kdWNlKHBhcmFtcyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICAgICAgLy8gU3RvcCB0aGUganVzdC1jYXB0dXJlZCB0cmFjayBzbyB0aGUgbWljL2NhbSBpc24ndCBsZWZ0IGxpdmUgYWZ0ZXIgYSBmYWlsZWQgcHJvZHVjZS5cbiAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgIC8vIEEgZmF0YWwgUlRQLWV4dGVuc2lvbiBjb2xsaXNpb24gb24gY3JlYXRlT2ZmZXIgY2FuJ3QgYmUgcmVjb3ZlcmVkIGluLXBsYWNlO1xuICAgICAgICAgICAgLy8gYXNrIHRoZSB1c2VyIHRvIHJlam9pbi4gVGhlIGljb24gaXMgTk9UIGZsaXBwZWQgdG8gdW5tdXRlZCAocHJvZHVjZSBmYWlsZWQpLlxuICAgICAgICAgICAgaWYgKGlzUnRwQ29sbGlzaW9uRXJyb3IoZSkpIHtcbiAgICAgICAgICAgICAgICB2Y0V2ZW50TWFuYWdlci5maXJlRXZlbnQoVkNFdmVudFR5cGUuU1lTVEVNX0FMRVJULCB7cGF5bG9hZDoge21lc3NhZ2U6IFJFSk9JTl9BTEVSVF9NRVNTQUdFfX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb2R1Y2VyKSB7XG4gICAgICAgICAgICAvLyBQcm9kdWNpbmcgaXMgY29uZmlybWVkIOKAlCBub3cgKGFuZCBvbmx5IG5vdykgY2xlYXIgdGhlIG11dGVkIGljb24gZm9yIHRoaXMga2luZC5cbiAgICAgICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0QXVkaW9NdXRlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAndmlkZW8nKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFZpZGVvTXV0ZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvZHVjZXJUcmFuc3BvcnQuZ2V0U3RhdHMoKVxuICAgICAgICAgICAgICAgIC50aGVuKChkYXRhKSA9PiBjb25zb2xlLmxvZyhkYXRhKSk7XG4gICAgICAgICAgICBwcm9kdWNlcnMuc2V0KHR5cGUsIHByb2R1Y2VyKTtcblxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgICAgICB2aWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICB2aWRlb1N0cmVhbS5jdXJyZW50ID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgIHNldFZpZGVvUmVmcmVzaGVyKCF2aWRlb1JlZnJlc2hlcik7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coc3RyZWFtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvZHVjZXIub24oJ3RyYW5zcG9ydGNsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0cmVhbS5zcmNPYmplY3QuZ2V0VHJhY2tzKClcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcHJvZHVjZXJzLmRlbGV0ZSh0eXBlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBwcm9kdWNlci5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLnNyY09iamVjdC5nZXRUcmFja3MoKVxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBwcm9kdWNlcnMuZGVsZXRlKHR5cGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY29uc3VtZUZhaWxlZFByb2R1Y2VycyA9ICgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodW5tb3VudGVkUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChkZXZpY2UpIHtcbiAgICAgICAgICAgICAgICBvbk5ld1Byb2R1Y2VycyhmYWlsZWRQcm9kdWNlcnNEdWVUb051bGxUcmFuc3BvcnQsIHRydWUpO1xuICAgICAgICAgICAgICAgIGZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydC5zcGxpY2UoMCwgZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgY29uc3VtZUZhaWxlZFByb2R1Y2VycygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCA1MDAwKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdG9wUHJvZHVjaW5nID0gKHR5cGUsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGlmICghcHJvZHVjZXJzLmhhcyh0eXBlKSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1RoZXJlIGlzIG5vIHByb2R1Y2VyIGZvciB0aGlzIHR5cGUgJyArIHR5cGUpO1xuICAgICAgICAgICAgLy8gTm90aGluZyBpcyBiZWluZyBwcm9kdWNlZCwgc28gdGhlIHN0b3AgaXMgdHJpdmlhbGx5IHNhdGlzZmllZCDigJQgbGV0IHRoZVxuICAgICAgICAgICAgLy8gY2FsbGVyIChlLmcuIHRoZSBtdXRlIHRvZ2dsZSkgdHJlYXQgdGhpcyBhcyBhIGNvbmZpcm1lZCBcInN0b3BwZWRcIi5cbiAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcHJvZHVjZXJJZCA9IHByb2R1Y2Vycy5nZXQodHlwZSkuaWQ7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDbG9zZSBwcm9kdWNlcicsIHByb2R1Y2VySWQpO1xuXG4gICAgICAgIHByb2R1Y2Vycy5nZXQodHlwZSlcbiAgICAgICAgICAgIC5jbG9zZSgpO1xuICAgICAgICBwcm9kdWNlcnMuZGVsZXRlKHR5cGUpO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgdHJhY2tzLmN1cnJlbnQuc3RvcFZpZGVvVHJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICB0cmFja3MuY3VycmVudC5zdG9wQXVkaW9UcmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coJ0NMT1NJTkcgUFJPRFVDRVIgT0YgSUQgOiAnICsgcHJvZHVjZXJJZCk7XG4gICAgICAgIHNvY2tldE1hbmFnZXIuZW1pdEV2ZW50KFZDRXZlbnRUeXBlLlBST0RVQ0VSX0NMT1NFRCwge1xuICAgICAgICAgICAgdXNlcklkOiBwcm9wcy5kYXRhLnVzZXJJZCxcbiAgICAgICAgICAgIHByb2R1Y2VySWQsXG4gICAgICAgICAgICByb29tSWQ6IHByb3BzLm1lZXRpbmdJZFxuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IGNvbnNvbGUubG9nKCdQUk9EVUNFUl9DTE9TRUQgRVJST1IgOiAnLCBlKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uTmV3UHJvZHVjZXJzID0gKHByb2R1Y2VycywgbG9hZGluZyA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiPT09PT09IFBST0RVQ0VSUyBSRUNFSVZFRCA6IFsgXCIgKyBKU09OLnN0cmluZ2lmeShwcm9kdWNlcnMpICsgXCIgXSA9PT09PT09XCIpO1xuICAgICAgICBmb3IgKGNvbnN0IHByb2R1Y2VyIG9mIHByb2R1Y2Vycykge1xuICAgICAgICAgICAgaWYgKGRldmljZSkge1xuICAgICAgICAgICAgICAgIGlmIChwcm9kdWNlci51c2VySWQgPT09IHByb3BzLmRhdGEudXNlcklkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9kdWNlci5raW5kID09PSAndmlkZW8nICYmICFwcm9kdWNlci5zY3JlZW5TaGFyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQ0FMTElORyBDT05TVU1FIEZST00gT04gTkVXIFBST0RVQ0VSUyBGT1IgOiAnICsgcHJvcHMuZGF0YS51c2VySWQgKyAnIC0gJyArIHByb2R1Y2VyLnByb2R1Y2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZShwcm9kdWNlci5wcm9kdWNlcklkLCBwcm9kdWNlci5raW5kLCBsb2FkaW5nLCBwcm9kdWNlci51c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHByb3BzLmlzQ3VycmVudFVzZXIgfHwgbG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgc21hbGwgcGFydGljaXBhbnQgYm94IGF0IHRoZSBib3R0b20gYmVsb25naW5nIHRvIHRoZSBjdXJyZW50IHVzZXIgbXVzdCBjb25zdW1lIGFsbCBhdWRpb1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGJlY2F1c2Ugd2UgZG8gbm90IHdhbnQgdG8gZGlzdHVyYiB0aGUgYXVkaW8gZHVlIHRvIGFueSByZW5kZXJpbmcgc3VjaCBhcyBCcmluZyB0byB2aWV3XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9kdWNlci5raW5kID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKHByb2R1Y2VyLnByb2R1Y2VySWQsIHByb2R1Y2VyLmtpbmQsIGxvYWRpbmcsIHByb2R1Y2VyLnVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZhaWxlZFByb2R1Y2Vyc0R1ZVRvTnVsbFRyYW5zcG9ydC5wdXNoKHByb2R1Y2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhcIj09PT09PSBQUk9EVUNFUlMgVEhBVCBDT1VMRCBOT1QgQkUgQ09OU1VNRVMgOiBbIFwiICsgSlNPTi5zdHJpbmdpZnkoZmFpbGVkUHJvZHVjZXJzRHVlVG9OdWxsVHJhbnNwb3J0KSArIFwiIF0gPT09PT09PVwiKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVtb3ZlQ29uc3VtZXIgPSAoY29uc3VtZXJJZCwga2luZCwgdXNlcklkKSA9PiB7XG4gICAgICAgIC8vIFN0b3AgYW55IGFjdGl2ZS1zcGVha2VyIG1ldGVyIGF0dGFjaGVkIHRvIHRoaXMgY29uc3VtZXIncyBzdHJlYW0uXG4gICAgICAgIHN0b3BNZXRlcihjb25zdW1lcklkKTtcbiAgICAgICAgaWYgKGtpbmQgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICAgIGlmICh2aWRlb1N0cmVhbS5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKHZpZGVvU3RyZWFtLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmlkZW9TdHJlYW0uY3VycmVudC5nZXRUcmFja3MoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2suc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgIGxldCBhdWRpb0VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjb25zdW1lcklkKTtcbiAgICAgICAgICAgIGlmIChhdWRpb0VsZW1lbnQgJiYgYXVkaW9FbGVtZW50LnNyY09iamVjdCkge1xuICAgICAgICAgICAgICAgIGF1ZGlvRWxlbWVudC5zcmNPYmplY3QuZ2V0VHJhY2tzKClcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHVzZXJJZCAmJiBtZWRpYVJlY29yZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lZGlhUmVjb3JkZXIucmVtb3ZlVHJhY2sodXNlcklkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnRCeUlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJvcHMuZGF0YS51c2VySWQgKyAnLWF1ZGlvLWVsLWNvbnRhaW5lcicpO1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50QnlJZCkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50QnlJZC5yZW1vdmVDaGlsZChhdWRpb0VsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN1bWVycy5kZWxldGUoY29uc3VtZXJJZCk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHJldHJ5Q29uc3VtZShraW5kLCB1c2VySWQsIGUsIHJldHJpZXMsIHByb2R1Y2VySWQsIGxvYWRpbmcpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0ZBSUxFRCBUTyBDT05TVU1FICcgKyBraW5kICsgJyBGUk9NICcgKyB1c2VySWQpO1xuICAgICAgICBjb25zb2xlLmxvZyhlKTtcblxuICAgICAgICBpZiAocmV0cmllcyA8IDEwKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUkUtVFJZSU5HIFsnICsgcmV0cmllcyArICddJyk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodW5tb3VudGVkUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb25zdW1lKHByb2R1Y2VySWQsIGtpbmQsIGxvYWRpbmcsIHVzZXJJZCwgcmV0cmllcyk7XG4gICAgICAgICAgICB9LCA1MDAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDT01QTEVURUxZIEZBSUxFRCBUTyBDT05TVU1FICcgKyBraW5kICsgJyBGUk9NICcgKyB1c2VySWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY29uc3VtZSA9IGFzeW5jIChwcm9kdWNlcklkLCBraW5kLCBsb2FkaW5nLCB1c2VySWQsIHJldHJpZXMgPSAwKSA9PiB7XG4gICAgICAgIC8vIEdldCAoYW5kIGxhemlseSBjcmVhdGUpIHRoZSByZWN2IHRyYW5zcG9ydCBmb3IgdGhpcyBraW5kLiBhdWRpbyBhbmRcbiAgICAgICAgLy8gdmlkZW8gcmlkZSBzZXBhcmF0ZSB0cmFuc3BvcnRzLCBzbyBhIGNsb3NlZCBjb25zdW1lcidzIG0tc2VjdGlvbiBpc1xuICAgICAgICAvLyBuZXZlciByZWN5Y2xlZCBhY3Jvc3Mga2luZHMg4oCUIHdoaWNoIGlzIHdoYXQgdHJpZ2dlcmVkIHRoZSBSVFBcbiAgICAgICAgLy8gZXh0ZW5zaW9uLWlkIGNvbGxpc2lvbi5cbiAgICAgICAgY29uc3QgdHJhbnNwb3J0ID0gYXdhaXQgcHJvcHMuZ2V0UmVjdlRyYW5zcG9ydChraW5kKTtcbiAgICAgICAgaWYgKCF0cmFuc3BvcnQpIHtcbiAgICAgICAgICAgIHJldHJ5Q29uc3VtZShraW5kLCB1c2VySWQsIG5ldyBFcnJvcigncmVjdiB0cmFuc3BvcnQgdW5hdmFpbGFibGUgZm9yICcgKyBraW5kKSwgcmV0cmllcywgcHJvZHVjZXJJZCwgbG9hZGluZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbWVkaWFTb3VwSGVscGVyLmdldENvbnN1bWVTdHJlYW0ocHJvZHVjZXJJZCwgZGV2aWNlLnJ0cENhcGFiaWxpdGllcywgdHJhbnNwb3J0LCBwcm9wcy5tZWV0aW5nSWQsXG4gICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0VXNlckRldGFpbHMoKS51c2VybmFtZSwga2luZClcbiAgICAgICAgICAgIC50aGVuKFxuICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICAgICBjb25zdW1lcixcbiAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSxcbiAgICAgICAgICAgICAgICAgICAgIGtpbmRcbiAgICAgICAgICAgICAgICAgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3VtZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVycy5zZXQoY29uc3VtZXIuaWQsIGNvbnN1bWVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1DT05TVU1FPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA6ICcgKyBraW5kICsgJyBGT1IgOiAnICsgdXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChraW5kID09PSAndmlkZW8nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZpZGVvUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9SZWYuY3VycmVudC5zcmNPYmplY3QgPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9TdHJlYW0uY3VycmVudCA9IHN0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFZpZGVvTXV0ZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFZpZGVvUmVmcmVzaGVyKCF2aWRlb1JlZnJlc2hlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2tzLmN1cnJlbnQuc2V0VmlkZW9UcmFjayhzdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wcy5pc0N1cnJlbnRVc2VyIHx8IGxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGF1ZGlvRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2F1ZGlvJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvRWxlbWVudC5zcmNPYmplY3QgPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvRWxlbWVudC5pZCA9IGNvbnN1bWVyLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb0VsZW1lbnQucGxheXNpbmxpbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9FbGVtZW50LmF1dG9wbGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21lZXRpbmctYXVkaW8tZWwtY29udGFpbmVyJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmRDaGlsZChhdWRpb0VsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ldGVyIHRoaXMgcGFydGljaXBhbnQncyBhdWRpbyBmb3IgYWN0aXZlLXNwZWFrZXIgaGlnaGxpZ2h0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydE1ldGVyKGNvbnN1bWVyLmlkLCBzdHJlYW0sIHVzZXJJZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BzLmlzSG9zdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5hZGRUcmFjayh1c2VySWQsIHN0cmVhbS5nZXRBdWRpb1RyYWNrcygpWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXIub24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYWNrZW5kZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coa2luZCArIFwiIENPTlNVTUVSIFRSQUNLIEVOREVEIEZPUiBcIiArIHVzZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNvbnN1bWVyKGNvbnN1bWVyLmlkLCBraW5kLCB1c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHdWFyZDogdGhlIHBhcnRpY2lwYW50IG1heSBoYXZlIGxlZnQsIHNvIGZpbmQoKSBjYW4gYmUgdW5kZWZpbmVkIOKAlFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWFkaW5nIC52aWRlb011dGVkLy5hdWRpb011dGVkIG9uIGl0IHRocmV3LiBObyBwYXJ0aWNpcGFudCDihpIgbm8gcmV0cnkuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYWNrRW5kZWRQYXJ0aWNpcGFudCA9IHBhcnRpY2lwYW50cy5maW5kKChwKSA9PiBwLnVzZXJJZCA9PT0gdXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYWNrRW5kZWRQYXJ0aWNpcGFudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKChraW5kID09PSAndmlkZW8nICYmICF0cmFja0VuZGVkUGFydGljaXBhbnQudmlkZW9NdXRlZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoa2luZCA9PT0gJ2F1ZGlvJyAmJiAhdHJhY2tFbmRlZFBhcnRpY2lwYW50LmF1ZGlvTXV0ZWQpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnlDb25zdW1lKGtpbmQsIHVzZXJJZCwgbmV3IEVycm9yKCd0cmFja2VuZGVkIHdoaWxlICcgKyBraW5kICsgJyBpcyBOT1QgbXV0ZWQnKSwgcmV0cmllcywgcHJvZHVjZXJJZCwgbG9hZGluZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lci5vbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhbnNwb3J0Y2xvc2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coa2luZCArIFwiIENPTlNVTUVSIENMT1NFRCBGT1IgXCIgKyB1c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDb25zdW1lcihjb25zdW1lci5pZCwga2luZCwgdXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgcmV0cnlDb25zdW1lKGtpbmQsIHVzZXJJZCwgZSwgcmV0cmllcywgcHJvZHVjZXJJZCwgbG9hZGluZyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRQYXJ0aWNpcGFudE5hbWUgPSAoKSA9PiB7XG4gICAgICAgIGxldCBuYW1lID0gcHJvcHMuZGF0YS5uYW1lO1xuXG4gICAgICAgIGlmIChVdGlscy5pc051bGwocHJvcHMuZGF0YS51c2VySWQpKSB7XG4gICAgICAgICAgICBuYW1lID0gYCR7bmFtZX0gKEd1ZXN0KWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7J2NvbC0qLSogJyArIChwcm9wcy5pc0N1cnJlbnRVc2VyID8gJ21lZXRpbmctcGFydGljaXBhbnQtY29udGFpbmVyLWN1cnJlbnQtdXNlcicgOiAnbWVldGluZy1wYXJ0aWNpcGFudC1jb250YWluZXInKX1gfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogcHJvcHMucGFkZGluZyA/IHByb3BzLnBhZGRpbmcgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBwcm9wcy5oZWlnaHQgPyBwcm9wcy5oZWlnaHQgOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICcxMnB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBwcm9wcy5pc0N1cnJlbnRVc2VyID8gJyMxZjI5MzcnIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogcHJvcHMuaXNDdXJyZW50VXNlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJzJweCBzb2xpZCAnICsgKGFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvblByaW1hcnlDb2xvcigpIHx8ICcjMWEzYzVlJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA2KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBY3RpdmUtc3BlYWtlciBoaWdobGlnaHQ6IGFuIGluc2V0IHJpbmcgKHRoZSB0aWxlIGNsaXBzXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvdmVyZmxvdywgc28gYW4gb3V0c2V0IHNoYWRvdyB3b3VsZCBiZSBjdXQgb2ZmKS5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJveFNoYWRvdzogKCFhdWRpb011dGVkICYmIHNvdW5kTGV2ZWwgPiBTUEVBS0lOR19MRVZFTClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdpbnNldCAwIDAgMCAzcHggJyArIChhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb25QcmltYXJ5Q29sb3IoKSB8fCAnIzIyYzU1ZScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiAnYm94LXNoYWRvdyAxMjBtcyBlYXNlLW91dCdcbiAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmlkZW9NdXRlZCB8fCAhdmlkZW9SZWYuY3VycmVudCB8fCAhdmlkZW9SZWYuY3VycmVudC5zcmNPYmplY3QpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXsnY2VudGVyZWQtZmxleC1ib3gnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Cb3R0b206IHByb3BzLnNpemluZyA9PT0gJ3NtJyA/ICc4cHgnIDogMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtwcm9wcy5zaXppbmcgPT09ICdzbScgPyAnYXZhdGFyLXdyYXBwZXItc20nIDogJ2F2YXRhci13cmFwcGVyJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IChwcm9wcy5zaXppbmcgPT09ICdzbScgPyA3MiA6IDExMikgKyAncHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogKHByb3BzLnNpemluZyA9PT0gJ3NtJyA/IDcyIDogMTEyKSArICdweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiAhYXVkaW9NdXRlZCAmJiBzb3VuZExldmVsID4gM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcwIDAgMCAnICsgKDMgKyBzb3VuZExldmVsIC8gMTIpICsgJ3B4ICcgKyAoYXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uUHJpbWFyeUNvbG9yKCkgfHwgJyMwMDQ3NmEnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiAnYm94LXNoYWRvdyA5MG1zIGxpbmVhcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnIzNhNDY1NCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjZmZmJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17cHJvcHMuc2l6aW5nID09PSAnbWQnID8gJ2F2YXRhciBhdmF0YXItbWQnIDogcHJvcHMuc2l6aW5nID09PSAnc20nID8gJ2F2YXRhciBhdmF0YXItc20nIDogJ2F2YXRhcid9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogcHJvcHMuc2l6aW5nID09PSAnc20nID8gJzIwcHgnIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZFVybCA/IDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRSZXBlYXQ6ICduby1yZXBlYXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRTaXplOiAnY292ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRQb3NpdGlvbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZEltYWdlOiBgdXJsKCR7ZG93bmxvYWRVcmx9KWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPiA6IFV0aWxzLmdldEluaXRpYWxzKHByb3BzLmRhdGEubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmlkZW9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtwcm9wcy5kYXRhLnVzZXJJZCArICctdmlkZW8nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezY0MH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17MzIwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1BsYXkgcmVmPXt2aWRlb1JlZn0gbXV0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RGaXQ6ICdjb3ZlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBwcm9wcy5pc0N1cnJlbnRVc2VyID8gJ3NjYWxlWCgtMSknIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpJbmRleDogJzAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICh2aWRlb011dGVkIHx8ICF2aWRlb1JlZi5jdXJyZW50IHx8ICF2aWRlb1JlZi5jdXJyZW50LnNyY09iamVjdCkgPyAnbm9uZScgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qV2UgbmVlZCB0aGlzIGVsZW1lbnQgdG8gY2FwdHVyZSByZWNvcmRpbmcgc291bmQqL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5pc0hvc3QgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGF1ZGlvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17cHJvcHMuZGF0YS51c2VySWQgKyAnLWF1ZGlvJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QbGF5IHJlZj17YXVkaW9SZWZ9IG11dGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdub25lJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3Byb3BzLnNpemluZyA9PT0gJ3NtJyA/ICduYW1lLWxhYmVsLXNtJyA6ICduYW1lLWxhYmVsJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbTogJzAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBwcm9wcy5zaXppbmcgPT09ICdzbScgPyAnNnB4JyA6ICc4cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2ZsZXgtZW5kJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FwOiAnNHB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiAnNzAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IHByb3BzLnNpemluZyA9PT0gJ3NtJyA/ICcxcHggOHB4JyA6ICcycHggMTBweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc2cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjU1KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IHByb3BzLnNpemluZyA9PT0gJ3NtJyA/ICcxMXB4JyA6ICcxM3B4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDUwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IDEuNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpblJpZ2h0OiAnYXV0bydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IXByb3BzLmlzQ3VycmVudFVzZXIgJiYgZ2V0UGFydGljaXBhbnROYW1lKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cHJvcHMuaXNDdXJyZW50VXNlciAmJiAnWW91J31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFwcm9wcy5pc0N1cnJlbnRVc2VyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7bWFyZ2luTGVmdDogJzRweCcsIGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGp1c3RpZnlDb250ZW50OiAnZmxleC1lbmQnLCBnYXA6ICc0cHgnfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5pc0hvc3QgJiYgIWF1ZGlvTXV0ZWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5vbkhvc3RBdWRpb011dGUocHJvcHMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcyNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjU1KScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzZweCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGlkPXsnTUlDJ30vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBhdWRpb011dGVkID8gJ2lubGluZS1mbGV4JyA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsMC41NSknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzZweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogJzJweCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGlkPXsnTUlDX09GRid9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5pc0hvc3QgJiYgIXZpZGVvTXV0ZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMub25Ib3N0VmlkZW9NdXRlKHByb3BzLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcyNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcyNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsMC41NSknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzZweCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGlkPXsnQ0FNRVJBJ30vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMuaXNDdXJyZW50VXNlciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e2Rpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGp1c3RpZnlDb250ZW50OiAnZmxleC1lbmQnfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9XCJNeSBkZXZpY2VzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja0RldmljZXNJY29ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1jb250cm9scz17b3Blbk1vcmVBY3Rpb25zID8gJ2RldmljZS1tZW51JyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9e29wZW5Nb3JlQWN0aW9ucyA/ICd0cnVlJyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcyNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcyNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsMC41NSknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzZweCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGlkPXsnU0VUVElOR1MnfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcHJvcHMuaXNDdXJyZW50VXNlciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3ttYXJnaW5MZWZ0OiAnNHB4J319PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7aGFuZFJhaXNlZCAmJiA8UGFuVG9vbCBmb250U2l6ZT17J3NtYWxsJ30gc3R5bGU9e3tjb2xvcjogJyNlMmIwMzAnfX0vPn1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMuaXNDdXJyZW50VXNlciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPXsnbWVldGluZy1hdWRpby1lbC1jb250YWluZXInfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxNZW51XG4gICAgICAgICAgICAgICAgYW5jaG9yRWw9e2FuY2hvckVsfVxuICAgICAgICAgICAgICAgIGlkPVwiZGV2aWNlcy1tZW51XCJcbiAgICAgICAgICAgICAgICBvcGVuPXtvcGVuTW9yZUFjdGlvbnN9XG4gICAgICAgICAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2VEZXZpY2VNZW51fVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsb3NlRGV2aWNlTWVudX1cbiAgICAgICAgICAgICAgICBQYXBlclByb3BzPXt7XG4gICAgICAgICAgICAgICAgICAgIGVsZXZhdGlvbjogMCxcbiAgICAgICAgICAgICAgICAgICAgc3g6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAndmlzaWJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6ICdkcm9wLXNoYWRvdygwcHggMnB4IDhweCByZ2JhKDAsMCwwLDAuMzIpKScsXG4gICAgICAgICAgICAgICAgICAgICAgICBtdDogMS41LFxuICAgICAgICAgICAgICAgICAgICAgICAgJyYgLk11aUxpc3Qtcm9vdCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6ICcxcHggc29saWQgI2UxZTFlMScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNHB4J1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICcmIC5NdWlBdmF0YXItcm9vdCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMzIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAzMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtbDogLTAuNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcjogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAnJjpiZWZvcmUnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ1wiXCInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAxNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yOiAncHJpbWFyeScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtNTAlKSByb3RhdGUoNDVkZWcpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6SW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtT3JpZ2luPXt7XG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWw6IDIwLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbDogMTM2XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBhbmNob3JPcmlnaW49e3tcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbDogJ3JpZ2h0JyxcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWw6ICd0b3AnXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGF1ZGlvRGV2aWNlcy5tYXAoKGRldmljZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8TWVudUl0ZW0gb25DbGljaz17KCkgPT4gY2hhbmdlQXVkaW9EZXZpY2UoZGV2aWNlKX0ga2V5PXtpbmRleH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tjb2xvcjogc2VsZWN0ZWRBdWRpb0RldmljZSAmJiBzZWxlY3RlZEF1ZGlvRGV2aWNlLmlkID09PSBkZXZpY2UuaWQgPyAnIzE5ODc1NCcgOiBudWxsfX0+XG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgZGV2aWNlLmxhYmVsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvTWVudUl0ZW0+O1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvTWVudT5cbiAgICAgICAgPC8+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFZDUm9vbVBhcnRpY2lwYW50O1xuIl0sIm1h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
|
package/package.json
CHANGED