@sapui5/sap.fe.core 1.102.6 → 1.102.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
package/src/sap/fe/core/.library
CHANGED
|
@@ -25,7 +25,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
25
25
|
return undefined;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
return sSearchTerm.replace(/"/g, " ").
|
|
28
|
+
return sSearchTerm.replace(/"/g, " ").replace(/\\/g, "\\\\") //escape backslash characters. Can be removed if odata/binding handles backend errors responds.
|
|
29
|
+
.split(/\s+/).reduce(function (sNormalized, sCurrentWord) {
|
|
29
30
|
if (sCurrentWord !== "") {
|
|
30
31
|
sNormalized = (sNormalized ? sNormalized + " " : "") + '"' + sCurrentWord + '"';
|
|
31
32
|
}
|
|
@@ -2217,4 +2218,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
2217
2218
|
};
|
|
2218
2219
|
return CommonUtils;
|
|
2219
2220
|
}, false);
|
|
2220
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbW1vblV0aWxzLnRzIl0sIm5hbWVzIjpbImFWYWxpZFR5cGVzIiwibm9ybWFsaXplU2VhcmNoVGVybSIsInNTZWFyY2hUZXJtIiwidW5kZWZpbmVkIiwicmVwbGFjZSIsInNwbGl0IiwicmVkdWNlIiwic05vcm1hbGl6ZWQiLCJzQ3VycmVudFdvcmQiLCJnZXRQcm9wZXJ0eURhdGFUeXBlIiwib05hdmlnYXRpb25Db250ZXh0Iiwic0RhdGFUeXBlIiwiZ2V0UHJvcGVydHkiLCJzQW5ub3RhdGlvblBhdGgiLCJpbmRleE9mIiwiZm5IYXNUcmFuc2llbnRDb250ZXh0cyIsIm9MaXN0QmluZGluZyIsImJIYXNUcmFuc2llbnRDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsImZvckVhY2giLCJvQ29udGV4dCIsImlzVHJhbnNpZW50IiwiZ2V0U2VhcmNoUmVzdHJpY3Rpb25zIiwic0Z1bGxQYXRoIiwib01ldGFNb2RlbCIsImkiLCJhTmF2aWdhdGlvblBhcnRzIiwic1BhdGgiLCJsZW5ndGgiLCJvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsImdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJnZXRPYmplY3QiLCJvTW9kZWwiLCJzRW50aXR5U2V0UGF0aCIsInNOYXZpZ2F0aW9uUGF0aCIsImFSZXN0cmljdGVkUHJvcGVydGllcyIsIlJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwiZmluZCIsIm9SZXN0cmljdGVkUHJvcGVydHkiLCJOYXZpZ2F0aW9uUHJvcGVydHkiLCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aCIsIl9pc0luTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJzQ29udGV4dFBhdGgiLCJiSXNOb3RGaWx0ZXJhYmxlIiwib0Fubm90YXRpb24iLCJOb25GaWx0ZXJhYmxlUHJvcGVydGllcyIsInNvbWUiLCJwcm9wZXJ0eSIsIiRQcm9wZXJ0eVBhdGgiLCJfaXNDb250ZXh0UGF0aEZpbHRlcmFibGUiLCJzQ29udGV4UGF0aCIsImFFU1BhcnRzIiwic3BsaWNlIiwiYUNvbnRleHQiLCJzQ29udGV4dCIsImpvaW4iLCJpdGVtIiwiaW5kZXgiLCJhcnJheSIsIm9GaWx0ZXJSZXN0cmljdGlvbnMiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJhTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJzVGFyZ2V0UHJvcGVydHlQYXRoIiwib1Byb3BlcnR5UGF0aCIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwic1Byb3BlcnR5IiwiYlNraXBIaWRkZW5GaWx0ZXIiLCJFcnJvciIsImJJc0ZpbHRlcmFibGUiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsInNIaWRkZW5QYXRoIiwic0hpZGRlbkZpbHRlclBhdGgiLCJjb21waWxlQmluZGluZyIsIm5vdCIsIm9yIiwiYmluZGluZ0V4cHJlc3Npb24iLCJzUHJvcGVydHlEYXRhVHlwZSIsImdldFNoZWxsU2VydmljZXMiLCJvQ29udHJvbCIsImdldEFwcENvbXBvbmVudCIsImdldEhhc2giLCJzSGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaGFzaCIsIl9nZXRTT0ludGVudHMiLCJvT2JqZWN0UGFnZUxheW91dCIsIm9TZW1hbnRpY09iamVjdCIsIm9QYXJhbSIsIm9TaGVsbFNlcnZpY2VIZWxwZXIiLCJDb21tb25VdGlscyIsImdldExpbmtzIiwic2VtYW50aWNPYmplY3QiLCJwYXJhbXMiLCJfY3JlYXRlTWFwcGluZ3MiLCJvTWFwcGluZyIsImFTT01hcHBpbmdzIiwiYU1hcHBpbmdLZXlzIiwiT2JqZWN0Iiwia2V5cyIsIm9TZW1hbnRpY01hcHBpbmciLCJwdXNoIiwiX2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zIiwiYUxpbmtzIiwiYUV4Y2x1ZGVkQWN0aW9ucyIsIm9UYXJnZXRQYXJhbXMiLCJhSXRlbXMiLCJvTGluayIsInNJbnRlbnQiLCJpbnRlbnQiLCJzQWN0aW9uIiwidGV4dCIsInRhcmdldFNlbU9iamVjdCIsInRhcmdldEFjdGlvbiIsInRhcmdldFBhcmFtcyIsIl9nZXRSZWxhdGVkSW50ZW50cyIsIm9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzIiwib0JpbmRpbmdDb250ZXh0IiwiYU1hbmlmZXN0U09JdGVtcyIsInVuYXZhaWxhYmxlQWN0aW9ucyIsIm1hcHBpbmciLCJuYXZpZ2F0aW9uQ29udGV4dHMiLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJ1cGRhdGVSZWxhdGVBcHBzTW9kZWwiLCJvRW50cnkiLCJhU2VtS2V5cyIsIm9NZXRhUGF0aCIsInNDdXJyZW50U2VtT2JqIiwic0N1cnJlbnRBY3Rpb24iLCJvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyIsImFSZWxhdGVkQXBwc01lbnVJdGVtcyIsImoiLCJzU2VtS2V5IiwidmFsdWUiLCJhVGVjaG5pY2FsS2V5cyIsImtleSIsInNPYmpLZXkiLCJvTWFuaWZlc3REYXRhIiwiZ2V0VGFyZ2V0VmlldyIsImdldFZpZXdEYXRhIiwiYWRkaXRpb25hbFNlbWFudGljT2JqZWN0cyIsImFNYW5pZmVzdFNPS2V5cyIsInRoZW4iLCJiaW5kIiwiY2F0Y2giLCJvRXJyb3IiLCJMb2ciLCJlcnJvciIsImZuR2V0UGFyc2VTaGVsbEhhc2hBbmRHZXRMaW5rcyIsIm9QYXJzZWRVcmwiLCJwYXJzZVNoZWxsSGFzaCIsImRvY3VtZW50IiwiYWN0aW9uIiwiYUFubm90YXRpb25zU09JdGVtcyIsInNFbnRpdHlUeXBlUGF0aCIsIm9FbnRpdHlTZXRBbm5vdGF0aW9ucyIsIl9nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zIiwiYkhhc0VudGl0eVNldFNPIiwib0VudGl0eVR5cGVBbm5vdGF0aW9ucyIsImFVbmF2YWlsYWJsZUFjdGlvbnMiLCJhTWFwcGluZ3MiLCJjb25jYXQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNldFByb3BlcnR5Iiwib0VudGl0eUFubm90YXRpb25zIiwic0Fubm90YXRpb25NYXBwaW5nVGVybSIsInNBbm5vdGF0aW9uQWN0aW9uVGVybSIsInNRdWFsaWZpZXIiLCJmblVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwib1BhdGgiLCJnZXRQYXRoIiwiZ2V0TWV0YVBhdGgiLCJzU2VtYW50aWNLZXlWb2NhYnVsYXJ5IiwicmVxdWVzdE9iamVjdCIsImZuRmlyZUJ1dHRvblByZXNzIiwib0J1dHRvbiIsImFBdXRob3JpemVkVHlwZXMiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJnZXRWaXNpYmxlIiwiZ2V0RW5hYmxlZCIsImZpcmVQcmVzcyIsImZuUmVzb2x2ZVN0cmluZ3RvQm9vbGVhbiIsInNWYWx1ZSIsImlzQSIsIm9Pd25lciIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwiZ2V0Q29tcG9uZW50SW5zdGFuY2UiLCJnZXRSb290Q29udHJvbCIsIlZpZXciLCJnZXRQYXJlbnQiLCJpc0ZpZWxkQ29udHJvbFBhdGhJbmFwcGxpY2FibGUiLCJzRmllbGRDb250cm9sUGF0aCIsIm9BdHRyaWJ1dGUiLCJiSW5hcHBsaWNhYmxlIiwiYVBhcnRzIiwiaGFzT3duUHJvcGVydHkiLCJyZW1vdmVTZW5zaXRpdmVEYXRhIiwiYUF0dHJpYnV0ZXMiLCJhT3V0QXR0cmlidXRlcyIsInNFbnRpdHlTZXQiLCJlbnRpdHlTZXQiLCJjb250ZXh0RGF0YSIsImFQcm9wZXJ0aWVzIiwic1Byb3AiLCJhUHJvcGVydHlBbm5vdGF0aW9ucyIsIm9GaWVsZENvbnRyb2wiLCJfZm5DaGVja0lzTWF0Y2giLCJvT2JqZWN0Iiwib0tleXNUb0NoZWNrIiwic0tleSIsImZuR2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzIiwib0ZpbHRlciIsIm9FbnRpdHlUeXBlIiwib1Byb3BlcnRpZXMiLCJ0ZXN0IiwiJGtpbmQiLCJmbkdldE1hbmRhdG9yeUZpbHRlckZpZWxkcyIsImFNYW5kYXRvcnlGaWx0ZXJGaWVsZHMiLCJmbkdldElCTkFjdGlvbnMiLCJhSUJOQWN0aW9ucyIsImFBY3Rpb25zIiwiZ2V0QWN0aW9ucyIsIm9BY3Rpb24iLCJnZXRBY3Rpb24iLCJkYXRhIiwiZm5VcGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSIsIm9WaWV3Iiwib1BhcmFtcyIsImZuR2V0TGlua3MiLCJvRGF0YSIsImFLZXlzIiwib0lCTkFjdGlvbiIsInNTZW1hbnRpY09iamVjdCIsImFMaW5rIiwic2V0VmlzaWJsZSIsImdldFRyYW5zbGF0ZWRUZXh0Iiwic0ZyYW1ld29ya0tleSIsIm9SZXNvdXJjZUJ1bmRsZSIsInNFbnRpdHlTZXROYW1lIiwic1Jlc291cmNlS2V5IiwiYlJlc291cmNlS2V5RXhpc3RzIiwiX2NoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyIsImFDdXN0b21CdW5kbGVzIiwiZ2V0VGV4dCIsIkNvcmUiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJoYXNUZXh0IiwiZ2V0QWN0aW9uUGF0aCIsImJSZXR1cm5Pbmx5UGF0aCIsInNBY3Rpb25OYW1lIiwiYkNoZWNrU3RhdGljVmFsdWUiLCJzRW50aXR5VHlwZU5hbWUiLCIkVHlwZSIsInNFbnRpdHlOYW1lIiwiZ2V0RW50aXR5U2V0TmFtZSIsInNCaW5kaW5nUGFyYW1ldGVyIiwic0VudGl0eVR5cGUiLCJvRW50aXR5Q29udGFpbmVyIiwiY29tcHV0ZURpc3BsYXlNb2RlIiwib1Byb3BlcnR5QW5ub3RhdGlvbnMiLCJvQ29sbGVjdGlvbkFubm90YXRpb25zIiwib1RleHRBbm5vdGF0aW9uIiwib1RleHRBcnJhbmdlbWVudEFubm90YXRpb24iLCIkRW51bU1lbWJlciIsIl9nZXRFbnRpdHlUeXBlIiwiX3JlcXVlc3RPYmplY3QiLCJvU2VsZWN0ZWRDb250ZXh0IiwibkJyYWNrZXRJbmRleCIsInNUYXJnZXRUeXBlIiwic2xpY2UiLCJzQ3VycmVudFR5cGUiLCJnZXRCaW5kaW5nIiwiZ2V0Q29udGV4dCIsIndhcm5pbmciLCJQcm9taXNlIiwicmVzb2x2ZSIsIl9yZXF1ZXN0UHJvcGVydHkiLCJzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoIiwib1Byb21pc2UiLCJyZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkiLCJ2UHJvcGVydHlWYWx1ZSIsIl9zZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJhUmVxdWVzdFByb21pc2VzIiwiYWxsIiwiYVJlc3VsdHMiLCJhQXBwbGljYWJsZUNvbnRleHRzIiwiYU5vdEFwcGxpY2FibGVDb250ZXh0cyIsImFSZXN1bHQiLCJfc2V0RHluYW1pY0FjdGlvbkNvbnRleHRzIiwidHJhY2UiLCJhQXBwbGljYWJsZSIsImFOb3RBcHBsaWNhYmxlIiwic0R5bmFtaWNBY3Rpb25QYXRoUHJlZml4Iiwib0ludGVybmFsTW9kZWwiLCJzZXRBY3Rpb25FbmFibGVtZW50Iiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsImFTZWxlY3RlZENvbnRleHRzIiwiYVByb21pc2VzIiwiYkVuYWJsZWQiLCJvQ29udGV4dERhdGEiLCJvVHJhbnNmb3JtZWRCaW5kaW5nIiwidHJhbnNmb3JtUmVjdXJzaXZlbHkiLCJvQmluZGluZ0V4cHJlc3Npb24iLCJjb25zdGFudCIsInBhdGgiLCJzUmVzdWx0Iiwic2V0T2JqZWN0TWFwcGluZ3MiLCJhU2VtYW50aWNPYmplY3RNYXBwaW5ncyIsIm9JdGVtIiwib01hcHBpbmdzIiwiaXRlbXMiLCJzTG9jYWxQcm9wZXJ0eSIsInNTZW1hbnRpY09iamVjdFByb3BlcnR5IiwiX2dldERlZmF1bHRPcGVyYXRvcnMiLCJzUHJvcGVydHlUeXBlIiwib0RhdGFDbGFzcyIsIlR5cGVVdGlsIiwiZ2V0RGF0YVR5cGVDbGFzc05hbWUiLCJvQmFzZVR5cGUiLCJnZXRCYXNlVHlwZSIsIkZpbHRlck9wZXJhdG9yVXRpbCIsImdldE9wZXJhdG9yc0ZvclR5cGUiLCJfZ2V0UmVzdHJpY3Rpb25zIiwiYURlZmF1bHRPcHMiLCJhRXhwcmVzc2lvbk9wcyIsImFPcGVyYXRvcnMiLCJmaWx0ZXIiLCJzRWxlbWVudCIsInRvU3RyaW5nIiwiZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbiIsImFFeHByZXNzaW9ucyIsImFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eSIsIkFsbG93ZWRFeHByZXNzaW9uc1ByaW8iLCJzb3J0IiwiYSIsImIiLCJnZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eSIsInNUeXBlIiwiYlVzZVNlbWFudGljRGF0ZVJhbmdlIiwic1NldHRpbmdzIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoIiwiYUVxdWFsc09wcyIsImFTaW5nbGVSYW5nZU9wcyIsImFTaW5nbGVSYW5nZURUQmFzaWNPcHMiLCJhU2luZ2xlVmFsdWVEYXRlT3BzIiwiYUJhc2ljRGF0ZVRpbWVPcHMiLCJhTXVsdGlSYW5nZU9wcyIsImFTZWFyY2hFeHByZXNzaW9uT3BzIiwiYVNlbWFudGljRGF0ZU9wc0V4dCIsIlNlbWFudGljRGF0ZU9wZXJhdG9ycyIsImdldFN1cHBvcnRlZE9wZXJhdGlvbnMiLCJiU2VtYW50aWNEYXRlUmFuZ2UiLCJhU2VtYW50aWNEYXRlT3BzIiwib1NldHRpbmdzIiwiSlNPTiIsInBhcnNlIiwiY3VzdG9tRGF0YSIsIm9wZXJhdG9yQ29uZmlndXJhdGlvbiIsImdldEZpbHRlck9wZXJhdGlvbnMiLCJnZXRTZW1hbnRpY0RhdGVPcGVyYXRpb25zIiwiYVNpbmdsZVJhbmdlRGF0ZVRpbWVPcHMiLCJzT3BlcmF0b3IiLCJhRGVmYXVsdE9wZXJhdG9ycyIsInNSZXN0cmljdGlvbnMiLCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMiLCJzQWxsb3dlZEV4cHJlc3Npb24iLCJhU2luZ2xlVmFsdWVPcHMiLCJzT3BlcmF0b3JzIiwiZ2V0T3BlcmF0b3JzRm9yRGF0ZVByb3BlcnR5IiwicHJvcGVydHlUeXBlIiwiZ2V0UGFyYW1ldGVySW5mbyIsInNQYXJhbWV0ZXJDb250ZXh0UGF0aCIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiYlJlc3VsdENvbnRleHQiLCJvUGFyYW1ldGVySW5mbyIsImNvbnRleHRQYXRoIiwicGFyYW1ldGVyUHJvcGVydGllcyIsImdldENvbnRleHRQYXRoUHJvcGVydGllcyIsImFkZFNlbGVjdE9wdGlvblRvQ29uZGl0aW9ucyIsIm9Qcm9wZXJ0eU1ldGFkYXRhIiwiYVZhbGlkT3BlcmF0b3JzIiwiYUN1bXVsYXRpdmVDb25kaXRpb25zIiwib1NlbGVjdE9wdGlvbiIsIm9Db25kaXRpb24iLCJnZXRDb25kaXRpb25zIiwib3BlcmF0b3IiLCJhZGRTZWxlY3RPcHRpb25zVG9Db25kaXRpb25zIiwib1NlbGVjdGlvblZhcmlhbnQiLCJzU2VsZWN0T3B0aW9uUHJvcCIsIm9Db25kaXRpb25zIiwic0NvbmRpdGlvblBhdGgiLCJzQ29uZGl0aW9uUHJvcCIsIm9WYWxpZFByb3BlcnRpZXMiLCJpc1BhcmFtZXRlciIsImFDb25kaXRpb25zIiwiYVNlbGVjdE9wdGlvbnMiLCJnZXRTZWxlY3RPcHRpb24iLCJhZGRTZWxlY3Rpb25WYXJpYW50VG9Db25kaXRpb25zIiwiYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzIiwiZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMiLCJhTWV0YWRhdFByb3BlcnRpZXMiLCJvVmFsaWRQYXJhbWV0ZXJQcm9wZXJ0aWVzIiwiYkhhc1BhcmFtZXRlcnMiLCJhTWV0YWRhdGFQYXJhbWV0ZXJzIiwic01ldGFkYXRhUGFyYW1ldGVyIiwic1NlbGVjdE9wdGlvbk5hbWUiLCJpbmNsdWRlcyIsInN0YXJ0c1dpdGgiLCJzTWV0YWRhdGFQcm9wZXJ0eSIsInNTZWxlY3RPcHRpb24iLCJzRnVsbENvbnRleHRQYXRoIiwicmVwbGFjZUFsbCIsIl9jcmVhdGVDb25kaXRpb25zRm9yTmF2UHJvcGVydGllcyIsInNNYWluRW50aXR5U2V0UGF0aCIsImFOYXZPYmplY3ROYW1lcyIsInNOYXZQYXRoIiwic1Byb3BlcnR5TmFtZSIsIiRpc0NvbGxlY3Rpb24iLCJzTmF2UHJvcGVydHlQYXRoIiwiYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQiLCJtUGFnZUNvbnRleHQiLCJvQXBwQ29tcG9uZW50Iiwib05hdmlnYXRpb25TZXJ2aWNlIiwiZ2V0TmF2aWdhdGlvblNlcnZpY2UiLCJtaXhBdHRyaWJ1dGVzQW5kU2VsZWN0aW9uVmFyaWFudCIsInRvSlNPTlN0cmluZyIsImFkZEV4dGVybmFsU3RhdGVGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50IiwibUZpbHRlcnMiLCJvVGFyZ2V0SW5mbyIsIm9GaWx0ZXJJbmZvIiwic0ZpbHRlciIsInNMb3ciLCJzSGlnaCIsImZuR2V0U2lnbkFuZE9wdGlvbiIsInNMb3dWYWx1ZSIsInNIaWdoVmFsdWUiLCJvU2VsZWN0T3B0aW9uU3RhdGUiLCJvcHRpb24iLCJzaWduIiwibG93IiwiaGlnaCIsIm9GaWx0ZXJDb25kaXRpb25zIiwiZmlsdGVyQ29uZGl0aW9ucyIsIm9GaWx0ZXJzV2l0aG91dENvbmZsaWN0IiwiZmlsdGVyQ29uZGl0aW9uc1dpdGhvdXRDb25mbGljdCIsIm9UYWJsZVByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QiLCJwcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0IiwiYWRkRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudCIsInNGaWx0ZXJOYW1lIiwiYUZpbHRlcnMiLCJ2YWx1ZXMiLCJhRmlsdGVyIiwib1ZhbHVlMSIsIm9TZWxlY3RPcHRpb25WYWx1ZXMiLCJhZGRTZWxlY3RPcHRpb24iLCJpc1N0aWNreUVkaXRNb2RlIiwiYklzU3RpY2t5TW9kZSIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiYlVJRWRpdGFibGUiLCJhZGREZWZhdWx0RGlzcGxheUN1cnJlbmN5Iiwib1NlbGVjdGlvblZhcmlhbnREZWZhdWx0cyIsImFTVk9wdGlvbiIsImFEZWZhdWx0U1ZPcHRpb24iLCJkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb24iLCJzU2lnbiIsInNPcHRpb24iLCJnZXROb25Db21wdXRlZFZpc2libGVGaWVsZHMiLCIkS2V5IiwiYU5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcyIsIm9Bbm5vdGF0aW9ucyIsImJJc0tleSIsImJJc0ltbXV0YWJsZSIsImJJc05vbkNvbXB1dGVkIiwiYklzVmlzaWJsZSIsImJJc0NvbXB1dGVkRGVmYXVsdFZhbHVlIiwiYklzS2V5Q29tcHV0ZWREZWZhdWx0VmFsdWVXaXRoVGV4dCIsIm9EaWFnbm9zdGljcyIsImdldERpYWdub3N0aWNzIiwic01lc3NhZ2UiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIk1lZGl1bSIsIklzc3VlQ2F0ZWdvcnlUeXBlIiwiQW5ub3RhdGlvbnMiLCJJZ25vcmVkQW5ub3RhdGlvbiIsInNldFVzZXJEZWZhdWx0cyIsImFQYXJhbWV0ZXJzIiwiYklzQWN0aW9uIiwiYklzQ3JlYXRlIiwib0FjdGlvbkRlZmF1bHRWYWx1ZXMiLCJvQ29tcG9uZW50RGF0YSIsImdldENvbXBvbmVudERhdGEiLCJvU3RhcnR1cFBhcmFtZXRlcnMiLCJzdGFydHVwUGFyYW1ldGVycyIsIm9TaGVsbFNlcnZpY2VzIiwiaGFzVVNoZWxsIiwib1BhcmFtZXRlciIsIiROYW1lIiwic1BhcmFtZXRlck5hbWUiLCJnZXRTdGFydHVwQXBwU3RhdGUiLCJvU3RhcnR1cEFwcFN0YXRlIiwiZ2V0RGF0YSIsImFFeHRlbmRlZFBhcmFtZXRlcnMiLCJzZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0T3B0aW9ucyIsIm9FeHRlbmRlZFBhcmFtZXRlciIsIlByb3BlcnR5TmFtZSIsIm9SYW5nZSIsIlJhbmdlcyIsIlNpZ24iLCJPcHRpb24iLCJMb3ciLCJnZXRBZGRpdGlvbmFsUGFyYW1zRm9yQ3JlYXRlIiwib0luYm91bmRQYXJhbWV0ZXJzIiwib0luYm91bmRzIiwiYUNyZWF0ZVBhcmFtZXRlcnMiLCJzUGFyYW1ldGVyIiwidXNlRm9yQ3JlYXRlIiwib1JldCIsInNDcmVhdGVQYXJhbWV0ZXIiLCJhVmFsdWVzIiwiY3JlYXRlIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwib091dGJvdW5kIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZyIsInBhcmFtZXRlcnMiLCJzUGFyYW0iLCJmb3JtYXQiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJvVmlld0RhdGEiLCJvQ3Jvc3NOYXYiLCJvSGVhZGVyRmFjZXRJdGVtcyIsInNJZCIsIm9Db250cm9sQ29uZmlnIiwiY29udHJvbENvbmZpZ3VyYXRpb24iLCJjb25maWciLCJuYXZpZ2F0aW9uIiwidGFyZ2V0T3V0Ym91bmQiLCJvdXRib3VuZCIsInNPdXRib3VuZCIsImdlbmVyYXRlIiwic2V0U2VtYW50aWNPYmplY3RNYXBwaW5ncyIsInZNYXBwaW5ncyIsInJlbW92ZVNlbGVjdE9wdGlvbiIsIm1hc3NBZGRTZWxlY3RPcHRpb24iLCJmbkdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoIiwiYVNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zIiwiYVNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3MiLCJzZW1hbnRpY09iamVjdFBhdGgiLCJzZW1hbnRpY09iamVjdEZvckdldExpbmtzIiwiZm5VcGRhdGVTZW1hbnRpY1RhcmdldHNNb2RlbCIsImFHZXRMaW5rc1Byb21pc2VzIiwiYVNlbWFudGljT2JqZWN0cyIsInNDdXJyZW50SGFzaCIsIl9vTGluayIsIl9zTGlua0ludGVudEFjdGlvbiIsImFGaW5hbExpbmtzIiwib0ZpbmFsU2VtYW50aWNPYmplY3RzIiwiYkludGVudEhhc0FjdGlvbnMiLCJrIiwib1RtcCIsInNBbHRlcm5hdGVQYXRoIiwiaGFzVGFyZ2V0c05vdEZpbHRlcmVkIiwiaGFzVGFyZ2V0cyIsImlMaW5rQ291bnQiLCJIYXNUYXJnZXRzIiwiSGFzVGFyZ2V0c05vdEZpbHRlcmVkIiwiYXNzaWduIiwic1NlbWFudGljT2JqZWN0TmFtZSIsIm1lcmdlT2JqZWN0cyIsImZuR2V0U2VtYW50aWNPYmplY3RQcm9taXNlIiwiZ2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgiLCJmbkdldFNlbWFudGljVGFyZ2V0c0Zyb21QYWdlTW9kZWwiLCJvQ29udHJvbGxlciIsInNQYWdlTW9kZWwiLCJfZm5maW5kVmFsdWVzSGVscGVyIiwib2JqIiwibGlzdCIsIkFycmF5IiwiY2hpbGRyZW4iLCJfZm5maW5kVmFsdWVzIiwiX2ZuRGVsZXRlRHVwbGljYXRlU2VtYW50aWNPYmplY3RzIiwiYVNlbWFudGljT2JqZWN0UGF0aCIsImdldFZpZXciLCJhU2VtYW50aWNPYmplY3RzUHJvbWlzZXMiLCJvQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnQiLCJvUGFnZU1vZGVsIiwic3RyaW5naWZ5IiwiX2dldE9iamVjdCIsImFTZW1hbnRpY09iamVjdHNGb3VuZCIsImFTZW1hbnRpY09iamVjdHNGb3JHZXRMaW5rcyIsIl9vU2VtYW50aWNPYmplY3QiLCJnZXRTZW1hbnRpY09iamVjdFByb21pc2UiLCJzU2VtT2JqRXhwcmVzc2lvbiIsImFTZW1hbnRpY09iamVjdHNSZXNvbHZlZCIsImVsZW1lbnQiLCIkUGF0aCIsImdldExpbmtzV2l0aENhY2hlIiwidXBkYXRlU2VtYW50aWNUYXJnZXRzIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zIiwib0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24iLCJzUmVzdHJpY3Rpb24iLCJSRVFVSVJFRF9QUk9QRVJUSUVTIiwiTk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFUyIsImFQcm9wcyIsIm1hcCIsIm9Qcm9wZXJ0eSIsIkFMTE9XRURfRVhQUkVTU0lPTlMiLCJtQWxsb3dlZEV4cHJlc3Npb25zIiwiRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyIsIlByb3BlcnR5IiwiQWxsb3dlZEV4cHJlc3Npb25zIiwiYVBhdGhQYXJ0cyIsInNQYXJlbnRFbnRpdHlTZXRQYXRoIiwib05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMiLCJ0ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudCIsInNGcmFnbWVudE5hbWUiLCJvUHJlcHJvY2Vzc29yU2V0dGluZ3MiLCJvT3B0aW9ucyIsIm9Nb2RpZmllciIsInZpZXciLCJvRnJhZ21lbnQiLCJ0YXJnZXRzIiwibG9hZE1hY3JvTGlicmFyeSIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJYTUxUZW1wbGF0ZVByb2Nlc3NvciIsImxvYWRUZW1wbGF0ZSIsIm5hbWUiLCJmaXJzdEVsZW1lbnRDaGlsZCIsImlzWE1MIiwiRnJhZ21lbnQiLCJsb2FkIiwiaWQiLCJkZWZpbml0aW9uIiwiY29udHJvbGxlciIsImdldFNpbmdsZXRvblBhdGgiLCJtZXRhTW9kZWwiLCJwYXJ0cyIsIkJvb2xlYW4iLCJwcm9wZXJ0eU5hbWUiLCJwb3AiLCJuYXZpZ2F0aW9uUGF0aCIsInNpbmdsZXRvbk5hbWUiLCJtb2RlbCIsInJlc29sdmVkUGF0aCIsInByb3BlcnR5QmluZGluZyIsImJpbmRQcm9wZXJ0eSIsInJlcXVlc3RWYWx1ZSIsImFkZEV2ZW50VG9CaW5kaW5nSW5mbyIsInNFdmVudE5hbWUiLCJmSGFuZGxlciIsIm9CaW5kaW5nSW5mbyIsInNldEJpbmRpbmdJbmZvIiwiZXZlbnRzIiwiZk9yaWdpbmFsSGFuZGxlciIsImFyZ3MiLCJhcHBseSIsImlubmVyQ2hhcnRCb3VuZCIsImdldENvbnRyb2xEZWxlZ2F0ZSIsIl9nZXRDaGFydCIsImdldEJpbmRpbmdJbmZvIiwic0Vycm9yIiwic2FwIiwidWkiLCJyZXF1aXJlIiwiZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkIiwic0dyb3VwSWQiLCJhY3Rpb25OYW1lIiwiYU1lc3NhZ2VzIiwibG9jYWxJMThuUmVmIiwic0NhbmNlbEJ1dHRvblR4dCIsIm1lc3NhZ2UiLCJkaWFsb2dQcm9taXNlIiwiTWVzc2FnZUJveCIsInRpdGxlIiwiYWN0aW9ucyIsImVtcGhhc2l6ZWRBY3Rpb24iLCJvbkNsb3NlIiwic3VibWl0QmF0Y2giLCJvTWVzc2FnZURpYWxvZ01vZGVsIiwiSlNPTk1vZGVsIiwic2V0RGF0YSIsImJTdHJpY3RIYW5kbGluZ0Zsb3ciLCJvTWVzc2FnZU9iamVjdCIsIm1lc3NhZ2VIYW5kbGluZyIsInByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyIsIm9EaWFsb2ciLCJEaWFsb2ciLCJyZXNpemFibGUiLCJjb250ZW50Iiwib01lc3NhZ2VWaWV3Iiwic3RhdGUiLCJjdXN0b21IZWFkZXIiLCJCYXIiLCJjb250ZW50TGVmdCIsIm9CYWNrQnV0dG9uIiwiY29udGVudE1pZGRsZSIsIlRpdGxlIiwiY29udGVudEhlaWdodCIsImNvbnRlbnRXaWR0aCIsInZlcnRpY2FsU2Nyb2xsaW5nIiwic2V0QmVnaW5CdXR0b24iLCJCdXR0b24iLCJwcmVzcyIsImNsb3NlIiwidHlwZSIsInNldEVuZEJ1dHRvbiIsIm9wZW4iLCJnZXRNZXNzYWdlQ29sdW1uIiwiaGVhZGVySW5mb1RpdGxlUGF0aCIsImdldFRhYmxlRGVmaW5pdGlvbiIsImhlYWRlckluZm9UaXRsZSIsInNDdXJyZW50RW50aXR5U2V0TmFtZSIsImFGaWx0ZXJlZFRlY2huaWNhbEtleXMiLCJ0ZWNobmljYWxLZXkiLCJzZW1hbnRpY0tleUNvbHVtbnMiLCJzZW1hbnRpY0tleXMiLCJhVmlzaWJsZUNvbHVtbnMiLCJhVGFibGVDb2x1bW5zIiwiZ2V0Q29sdW1ucyIsIm9Db2x1bW4iLCJjb2x1bW5QYXRoU3BsaXQiLCJnZXRJZCIsInN1YnRpdGxlQ29sdW1uIiwiZ2V0TWVzc2FnZVN0cmlwVGV4dCIsImFJZ25vcmVkTGFiZWxzIiwib0ZpbHRlckJhciIsImJJc0NoYXJ0IiwiYklzU2VhcmNoSWdub3JlZCIsInNUYWJUaXRsZSIsImZuR2V0TG9jYWxpemVkVGV4dCIsInNUZXh0Iiwib0NoYXJ0IiwiZ2V0Q29udHJvbGxlciIsImdldENoYXJ0Q29udHJvbCIsImJJc0RyYWZ0U3VwcG9ydGVkIiwib01hY3JvUmVzb3VyY2VCdW5kbGUiLCJzUmVzb3VyY2UiLCJzeXN0ZW0iLCJkZXNrdG9wIiwic0xvY2FsaXplZFRhYmxlVGl0bGUiLCJnZXRQYXJhbWV0ZXJQYXRoIiwiYUFjdGlvbiIsImZpcmVCdXR0b25QcmVzcyIsImhhc1RyYW5zaWVudENvbnRleHQiLCJ1cGRhdGVSZWxhdGVkQXBwc0RldGFpbHMiLCJyZXNvbHZlU3RyaW5ndG9Cb29sZWFuIiwiZ2V0TWFuZGF0b3J5RmlsdGVyRmllbGRzIiwidXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJnZXRJQk5BY3Rpb25zIiwiZ2V0U2VtYW50aWNUYXJnZXRzRnJvbVBhZ2VNb2RlbCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFzQ0EsTUFBTUEsV0FBVyxHQUFHLENBQ25CLGFBRG1CLEVBRW5CLFVBRm1CLEVBR25CLFVBSG1CLEVBSW5CLGNBSm1CLEVBS25CLG9CQUxtQixFQU1uQixhQU5tQixFQU9uQixZQVBtQixFQVFuQixXQVJtQixFQVNuQixVQVRtQixFQVVuQixXQVZtQixFQVduQixXQVhtQixFQVluQixXQVptQixFQWFuQixXQWJtQixFQWNuQixZQWRtQixFQWVuQixZQWZtQixFQWdCbkIsVUFoQm1CLEVBaUJuQixlQWpCbUIsQ0FBcEI7O0FBb0JBLFdBQVNDLG1CQUFULENBQTZCQyxXQUE3QixFQUFrRDtBQUNqRCxRQUFJLENBQUNBLFdBQUwsRUFBa0I7QUFDakIsYUFBT0MsU0FBUDtBQUNBOztBQUVELFdBQU9ELFdBQVcsQ0FDaEJFLE9BREssQ0FDRyxJQURILEVBQ1MsR0FEVCxFQUVMQyxLQUZLLENBRUMsS0FGRCxFQUdMQyxNQUhLLENBR0UsVUFBVUMsV0FBVixFQUEyQ0MsWUFBM0MsRUFBaUU7QUFDeEUsVUFBSUEsWUFBWSxLQUFLLEVBQXJCLEVBQXlCO0FBQ3hCRCxRQUFBQSxXQUFXLEdBQUcsQ0FBQ0EsV0FBVyxHQUFHQSxXQUFXLEdBQUcsR0FBakIsR0FBdUIsRUFBbkMsSUFBeUMsR0FBekMsR0FBK0NDLFlBQS9DLEdBQThELEdBQTVFO0FBQ0E7O0FBQ0QsYUFBT0QsV0FBUDtBQUNBLEtBUkssRUFRSEosU0FSRyxDQUFQO0FBU0E7O0FBRUQsV0FBU00sbUJBQVQsQ0FBNkJDLGtCQUE3QixFQUFzRDtBQUNyRCxRQUFJQyxTQUFTLEdBQUdELGtCQUFrQixDQUFDRSxXQUFuQixDQUErQixPQUEvQixDQUFoQixDQURxRCxDQUVyRDs7QUFDQSxRQUFJLENBQUNGLGtCQUFrQixDQUFDRSxXQUFuQixDQUErQixPQUEvQixDQUFMLEVBQThDO0FBQzdDLGNBQVFELFNBQVI7QUFDQyxhQUFLLCtDQUFMO0FBQ0EsYUFBSyw4REFBTDtBQUNDQSxVQUFBQSxTQUFTLEdBQUdSLFNBQVo7QUFDQTs7QUFFRCxhQUFLLHNDQUFMO0FBQ0EsYUFBSyx3REFBTDtBQUNBLGFBQUssNkNBQUw7QUFDQSxhQUFLLCtEQUFMO0FBQ0EsYUFBSyxnREFBTDtBQUNDUSxVQUFBQSxTQUFTLEdBQUdELGtCQUFrQixDQUFDRSxXQUFuQixDQUErQixtQkFBL0IsQ0FBWjtBQUNBOztBQUVELGFBQUssbURBQUw7QUFDQTtBQUNDLGNBQU1DLGVBQWUsR0FBR0gsa0JBQWtCLENBQUNFLFdBQW5CLENBQStCLHdCQUEvQixDQUF4Qjs7QUFDQSxjQUFJQyxlQUFKLEVBQXFCO0FBQ3BCLGdCQUFJQSxlQUFlLENBQUNDLE9BQWhCLENBQXdCLCtDQUF4QixJQUEyRSxDQUFDLENBQWhGLEVBQW1GO0FBQ2xGSCxjQUFBQSxTQUFTLEdBQUdELGtCQUFrQixDQUFDRSxXQUFuQixDQUErQix1Q0FBL0IsQ0FBWjtBQUNBLGFBRkQsTUFFTyxJQUFJQyxlQUFlLENBQUNDLE9BQWhCLENBQXdCLHNDQUF4QixJQUFrRSxDQUFDLENBQXZFLEVBQTBFO0FBQ2hGSCxjQUFBQSxTQUFTLEdBQUdELGtCQUFrQixDQUFDRSxXQUFuQixDQUErQixtQkFBL0IsQ0FBWjtBQUNBLGFBRk0sTUFFQTtBQUNOO0FBQ0FELGNBQUFBLFNBQVMsR0FBR1IsU0FBWjtBQUNBO0FBQ0QsV0FURCxNQVNPO0FBQ05RLFlBQUFBLFNBQVMsR0FBR1IsU0FBWjtBQUNBOztBQUNEO0FBN0JGO0FBK0JBOztBQUVELFdBQU9RLFNBQVA7QUFDQTs7QUFDRCxXQUFTSSxzQkFBVCxDQUFnQ0MsWUFBaEMsRUFBbUQ7QUFDbEQsUUFBSUMscUJBQXFCLEdBQUcsS0FBNUI7O0FBQ0EsUUFBSUQsWUFBSixFQUFrQjtBQUNqQkEsTUFBQUEsWUFBWSxDQUFDRSxrQkFBYixHQUFrQ0MsT0FBbEMsQ0FBMEMsVUFBVUMsUUFBVixFQUF5QjtBQUNsRSxZQUFJQSxRQUFRLElBQUlBLFFBQVEsQ0FBQ0MsV0FBVCxFQUFoQixFQUF3QztBQUN2Q0osVUFBQUEscUJBQXFCLEdBQUcsSUFBeEI7QUFDQTtBQUNELE9BSkQ7QUFLQTs7QUFDRCxXQUFPQSxxQkFBUDtBQUNBOztBQUNELFdBQVNLLHFCQUFULENBQStCQyxTQUEvQixFQUErQ0MsVUFBL0MsRUFBZ0U7QUFDL0QsUUFBSUMsQ0FBQyxHQUFHLENBQVI7QUFDQSxRQUFNQyxnQkFBZ0IsR0FBR0gsU0FBUyxDQUFDbEIsS0FBVixDQUFnQiw4QkFBaEIsQ0FBekI7O0FBQ0EsU0FBSyxJQUFJc0IsS0FBSyxHQUFHRCxnQkFBZ0IsQ0FBQyxDQUFELENBQWpDLEVBQXNDRCxDQUFDLEdBQUdDLGdCQUFnQixDQUFDRSxNQUFqQixHQUEwQixDQUFwRSxFQUF1RUgsQ0FBQyxFQUF4RSxFQUE0RTtBQUMzRSxVQUFNSSx1QkFBdUIsR0FBR0MseUJBQXlCLENBQUNOLFVBQUQsRUFBYUcsS0FBYixFQUFvQkQsZ0JBQWdCLENBQUNELENBQUMsR0FBRyxDQUFMLENBQXBDLENBQXpEOztBQUNBLFVBQUlJLHVCQUF1QixJQUFJQSx1QkFBdUIsQ0FBQyxvQkFBRCxDQUF0RCxFQUE4RTtBQUM3RSxlQUFPQSx1QkFBdUIsQ0FBQyxvQkFBRCxDQUE5QjtBQUNBOztBQUNERixNQUFBQSxLQUFLLEdBQUdBLEtBQUssR0FBRyw4QkFBUixHQUF5Q0QsZ0JBQWdCLENBQUNELENBQUQsQ0FBakU7QUFDQTs7QUFDRCxXQUFPRCxVQUFVLENBQUNPLFNBQVgsQ0FBcUJSLFNBQVMsR0FBRywrQ0FBakMsQ0FBUDtBQUNBOztBQUNELFdBQVNPLHlCQUFULENBQW1DRSxNQUFuQyxFQUFnREMsY0FBaEQsRUFBcUVDLGVBQXJFLEVBQTJGO0FBQzFGLFFBQU1MLHVCQUF1QixHQUFHRyxNQUFNLENBQUNELFNBQVAsQ0FBaUJFLGNBQWMsR0FBRyxtREFBbEMsQ0FBaEM7QUFDQSxRQUFNRSxxQkFBcUIsR0FBR04sdUJBQXVCLElBQUlBLHVCQUF1QixDQUFDTyxvQkFBakY7QUFDQSxXQUNDRCxxQkFBcUIsSUFDckJBLHFCQUFxQixDQUFDRSxJQUF0QixDQUEyQixVQUFVQyxtQkFBVixFQUFvQztBQUM5RCxhQUNDQSxtQkFBbUIsSUFDbkJBLG1CQUFtQixDQUFDQyxrQkFEcEIsSUFFQUQsbUJBQW1CLENBQUNDLGtCQUFwQixDQUF1Q0MsdUJBQXZDLEtBQW1FTixlQUhwRTtBQUtBLEtBTkQsQ0FGRDtBQVVBOztBQUNELFdBQVNPLDRCQUFULENBQXNDVCxNQUF0QyxFQUFtREMsY0FBbkQsRUFBd0VTLFlBQXhFLEVBQTJGO0FBQzFGLFFBQUlDLGdCQUFnQixHQUFHLEtBQXZCO0FBQ0EsUUFBTUMsV0FBVyxHQUFHWixNQUFNLENBQUNELFNBQVAsQ0FBaUJFLGNBQWMsR0FBRywrQ0FBbEMsQ0FBcEI7O0FBQ0EsUUFBSVcsV0FBVyxJQUFJQSxXQUFXLENBQUNDLHVCQUEvQixFQUF3RDtBQUN2REYsTUFBQUEsZ0JBQWdCLEdBQUdDLFdBQVcsQ0FBQ0MsdUJBQVosQ0FBb0NDLElBQXBDLENBQXlDLFVBQVVDLFFBQVYsRUFBeUI7QUFDcEYsZUFBT0EsUUFBUSxDQUFDUCx1QkFBVCxLQUFxQ0UsWUFBckMsSUFBcURLLFFBQVEsQ0FBQ0MsYUFBVCxLQUEyQk4sWUFBdkY7QUFDQSxPQUZrQixDQUFuQjtBQUdBOztBQUNELFdBQU9DLGdCQUFQO0FBQ0EsRyxDQUNEOzs7QUFDQSxXQUFTTSx3QkFBVCxDQUFrQ2pCLE1BQWxDLEVBQStDQyxjQUEvQyxFQUFvRWlCLFdBQXBFLEVBQXNGO0FBQ3JGLFFBQU0zQixTQUFTLEdBQUdVLGNBQWMsR0FBRyxHQUFqQixHQUF1QmlCLFdBQXpDO0FBQUEsUUFDQ0MsUUFBUSxHQUFHNUIsU0FBUyxDQUFDbEIsS0FBVixDQUFnQixHQUFoQixFQUFxQitDLE1BQXJCLENBQTRCLENBQTVCLEVBQStCLENBQS9CLENBRFo7QUFBQSxRQUVDQyxRQUFRLEdBQUc5QixTQUFTLENBQUNsQixLQUFWLENBQWdCLEdBQWhCLEVBQXFCK0MsTUFBckIsQ0FBNEIsQ0FBNUIsQ0FGWjtBQUdBLFFBQUlULGdCQUFnQixHQUFHLEtBQXZCO0FBQUEsUUFDQ1csUUFBUSxHQUFHLEVBRFo7QUFHQXJCLElBQUFBLGNBQWMsR0FBR2tCLFFBQVEsQ0FBQ0ksSUFBVCxDQUFjLEdBQWQsQ0FBakI7QUFFQVosSUFBQUEsZ0JBQWdCLEdBQUdVLFFBQVEsQ0FBQ1AsSUFBVCxDQUFjLFVBQVVVLElBQVYsRUFBd0JDLEtBQXhCLEVBQXVDQyxLQUF2QyxFQUF3RDtBQUN4RixVQUFJSixRQUFRLENBQUMxQixNQUFULEdBQWtCLENBQXRCLEVBQXlCO0FBQ3hCMEIsUUFBQUEsUUFBUSxJQUFJLE1BQU1FLElBQWxCO0FBQ0EsT0FGRCxNQUVPO0FBQ05GLFFBQUFBLFFBQVEsR0FBR0UsSUFBWDtBQUNBOztBQUNELFVBQUlDLEtBQUssS0FBS0MsS0FBSyxDQUFDOUIsTUFBTixHQUFlLENBQTdCLEVBQWdDO0FBQy9CO0FBQ0EsWUFBTUMsdUJBQXVCLEdBQUdDLHlCQUF5QixDQUFDRSxNQUFELEVBQVNDLGNBQVQsRUFBeUJ1QixJQUF6QixDQUF6RDtBQUNBLFlBQU1HLG1CQUFtQixHQUFHOUIsdUJBQXVCLElBQUlBLHVCQUF1QixDQUFDK0Isa0JBQS9FO0FBQ0EsWUFBTUMsd0JBQXdCLEdBQUdGLG1CQUFtQixJQUFJQSxtQkFBbUIsQ0FBQ2QsdUJBQTVFO0FBQ0EsWUFBTWlCLG1CQUFtQixHQUFHSixLQUFLLENBQUNBLEtBQUssQ0FBQzlCLE1BQU4sR0FBZSxDQUFoQixDQUFqQzs7QUFDQSxZQUNDaUMsd0JBQXdCLElBQ3hCQSx3QkFBd0IsQ0FBQ3hCLElBQXpCLENBQThCLFVBQVUwQixhQUFWLEVBQThCO0FBQzNELGlCQUFPQSxhQUFhLENBQUNmLGFBQWQsS0FBZ0NjLG1CQUF2QztBQUNBLFNBRkQsQ0FGRCxFQUtFO0FBQ0QsaUJBQU8sSUFBUDtBQUNBO0FBQ0Q7O0FBQ0QsVUFBSUwsS0FBSyxLQUFLQyxLQUFLLENBQUM5QixNQUFOLEdBQWUsQ0FBN0IsRUFBZ0M7QUFDL0I7QUFDQWUsUUFBQUEsZ0JBQWdCLEdBQUdGLDRCQUE0QixDQUFDVCxNQUFELEVBQVNDLGNBQVQsRUFBeUJxQixRQUF6QixDQUEvQztBQUNBLE9BSEQsTUFHTyxJQUFJdEIsTUFBTSxDQUFDRCxTQUFQLENBQWlCRSxjQUFjLEdBQUcsOEJBQWpCLEdBQWtEdUIsSUFBbkUsQ0FBSixFQUE4RTtBQUNwRjtBQUNBYixRQUFBQSxnQkFBZ0IsR0FBR0YsNEJBQTRCLENBQUNULE1BQUQsRUFBU0MsY0FBVCxFQUF5QnFCLFFBQXpCLENBQS9DO0FBQ0FBLFFBQUFBLFFBQVEsR0FBRyxFQUFYLENBSG9GLENBSXBGOztBQUNBckIsUUFBQUEsY0FBYyxHQUFHLE1BQU1ELE1BQU0sQ0FBQ0QsU0FBUCxDQUFpQkUsY0FBYyxHQUFHLDhCQUFqQixHQUFrRHVCLElBQW5FLENBQXZCO0FBQ0E7O0FBQ0QsYUFBT2IsZ0JBQWdCLEtBQUssSUFBNUI7QUFDQSxLQWhDa0IsQ0FBbkI7QUFpQ0EsV0FBT0EsZ0JBQVA7QUFDQSxHLENBQ0Q7OztBQUNBLFdBQVNxQixvQkFBVCxDQUNDaEMsTUFERCxFQUVDQyxjQUZELEVBR0NnQyxTQUhELEVBSUNDLGlCQUpELEVBS3VDO0FBQ3RDLFFBQUksT0FBT0QsU0FBUCxLQUFxQixRQUF6QixFQUFtQztBQUNsQyxZQUFNLElBQUlFLEtBQUosQ0FBVSxzQ0FBVixDQUFOO0FBQ0E7O0FBQ0QsUUFBSUMsYUFBSixDQUpzQyxDQU10Qzs7QUFDQSxRQUFJcEMsTUFBTSxDQUFDRCxTQUFQLENBQWlCRSxjQUFjLEdBQUcsZ0RBQWxDLE1BQXdGLElBQTVGLEVBQWtHO0FBQ2pHLGFBQU8sSUFBUDtBQUNBOztBQUVELFFBQU12QixrQkFBa0IsR0FBR3NCLE1BQU0sQ0FBQ3FDLG9CQUFQLENBQTRCcEMsY0FBYyxHQUFHLEdBQWpCLEdBQXVCZ0MsU0FBbkQsQ0FBM0I7O0FBRUEsUUFBSSxDQUFDQyxpQkFBTCxFQUF3QjtBQUN2QixVQUNDeEQsa0JBQWtCLENBQUNFLFdBQW5CLENBQStCLG9DQUEvQixNQUF5RSxJQUF6RSxJQUNBRixrQkFBa0IsQ0FBQ0UsV0FBbkIsQ0FBK0IsMENBQS9CLE1BQStFLElBRmhGLEVBR0U7QUFDRCxlQUFPLEtBQVA7QUFDQTs7QUFDRCxVQUFNMEQsV0FBVyxHQUFHNUQsa0JBQWtCLENBQUNFLFdBQW5CLENBQStCLDBDQUEvQixDQUFwQjtBQUNBLFVBQU0yRCxpQkFBaUIsR0FBRzdELGtCQUFrQixDQUFDRSxXQUFuQixDQUErQixnREFBL0IsQ0FBMUI7O0FBRUEsVUFBSTBELFdBQVcsSUFBSUMsaUJBQW5CLEVBQXNDO0FBQ3JDLGVBQU9DLGNBQWMsQ0FBQ0MsR0FBRyxDQUFDQyxFQUFFLENBQUNDLGlCQUFpQixDQUFDTCxXQUFELENBQWxCLEVBQWlDSyxpQkFBaUIsQ0FBQ0osaUJBQUQsQ0FBbEQsQ0FBSCxDQUFKLENBQXJCO0FBQ0EsT0FGRCxNQUVPLElBQUlELFdBQUosRUFBaUI7QUFDdkIsZUFBT0UsY0FBYyxDQUFDQyxHQUFHLENBQUNFLGlCQUFpQixDQUFDTCxXQUFELENBQWxCLENBQUosQ0FBckI7QUFDQSxPQUZNLE1BRUEsSUFBSUMsaUJBQUosRUFBdUI7QUFDN0IsZUFBT0MsY0FBYyxDQUFDQyxHQUFHLENBQUNFLGlCQUFpQixDQUFDSixpQkFBRCxDQUFsQixDQUFKLENBQXJCO0FBQ0E7QUFDRDs7QUFFRCxRQUFJdEMsY0FBYyxDQUFDNUIsS0FBZixDQUFxQixHQUFyQixFQUEwQnVCLE1BQTFCLEtBQXFDLENBQXJDLElBQTBDcUMsU0FBUyxDQUFDbkQsT0FBVixDQUFrQixHQUFsQixJQUF5QixDQUF2RSxFQUEwRTtBQUN6RTtBQUNBc0QsTUFBQUEsYUFBYSxHQUFHLENBQUMzQiw0QkFBNEIsQ0FBQ1QsTUFBRCxFQUFTQyxjQUFULEVBQXlCZ0MsU0FBekIsQ0FBN0M7QUFDQSxLQUhELE1BR087QUFDTkcsTUFBQUEsYUFBYSxHQUFHLENBQUNuQix3QkFBd0IsQ0FBQ2pCLE1BQUQsRUFBU0MsY0FBVCxFQUF5QmdDLFNBQXpCLENBQXpDO0FBQ0EsS0FyQ3FDLENBc0N0Qzs7O0FBQ0EsUUFBSUcsYUFBYSxJQUFJMUQsa0JBQXJCLEVBQXlDO0FBQ3hDLFVBQU1rRSxpQkFBaUIsR0FBR25FLG1CQUFtQixDQUFDQyxrQkFBRCxDQUE3Qzs7QUFDQSxVQUFJa0UsaUJBQUosRUFBdUI7QUFDdEJSLFFBQUFBLGFBQWEsR0FBR3BFLFdBQVcsQ0FBQ2MsT0FBWixDQUFvQjhELGlCQUFwQixNQUEyQyxDQUFDLENBQTVEO0FBQ0EsT0FGRCxNQUVPO0FBQ05SLFFBQUFBLGFBQWEsR0FBRyxLQUFoQjtBQUNBO0FBQ0Q7O0FBRUQsV0FBT0EsYUFBUDtBQUNBOztBQUNELFdBQVNTLGdCQUFULENBQTBCQyxRQUExQixFQUF5QztBQUN4QyxXQUFPQyxlQUFlLENBQUNELFFBQUQsQ0FBZixDQUEwQkQsZ0JBQTFCLEVBQVA7QUFDQTs7QUFDRCxXQUFTRyxPQUFULEdBQW1CO0FBQ2xCLFFBQU1DLEtBQUssR0FBR0MsTUFBTSxDQUFDQyxRQUFQLENBQWdCQyxJQUE5QjtBQUNBLFdBQU9ILEtBQUssQ0FBQzVFLEtBQU4sQ0FBWSxHQUFaLEVBQWlCLENBQWpCLENBQVA7QUFDQTs7QUFDRCxXQUFTZ0YsYUFBVCxDQUF1QkMsaUJBQXZCLEVBQStDQyxlQUEvQyxFQUFxRUMsTUFBckUsRUFBa0Y7QUFDakYsUUFBTUMsbUJBQW1CLEdBQUdDLFdBQVcsQ0FBQ2IsZ0JBQVosQ0FBNkJTLGlCQUE3QixDQUE1QjtBQUNBLFdBQU9HLG1CQUFtQixDQUFDRSxRQUFwQixDQUE2QjtBQUNuQ0MsTUFBQUEsY0FBYyxFQUFFTCxlQURtQjtBQUVuQ00sTUFBQUEsTUFBTSxFQUFFTDtBQUYyQixLQUE3QixDQUFQO0FBSUEsRyxDQUNEOzs7QUFDQSxXQUFTTSxlQUFULENBQXlCQyxRQUF6QixFQUF3QztBQUN2QyxRQUFNQyxXQUFXLEdBQUcsRUFBcEI7QUFDQSxRQUFNQyxZQUFZLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZSixRQUFaLENBQXJCO0FBQ0EsUUFBSUssZ0JBQUo7O0FBQ0EsU0FBSyxJQUFJM0UsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR3dFLFlBQVksQ0FBQ3JFLE1BQWpDLEVBQXlDSCxDQUFDLEVBQTFDLEVBQThDO0FBQzdDMkUsTUFBQUEsZ0JBQWdCLEdBQUc7QUFDbEIseUJBQWlCO0FBQ2hCLDJCQUFpQkgsWUFBWSxDQUFDeEUsQ0FBRDtBQURiLFNBREM7QUFJbEIsa0NBQTBCc0UsUUFBUSxDQUFDRSxZQUFZLENBQUN4RSxDQUFELENBQWI7QUFKaEIsT0FBbkI7QUFNQXVFLE1BQUFBLFdBQVcsQ0FBQ0ssSUFBWixDQUFpQkQsZ0JBQWpCO0FBQ0E7O0FBRUQsV0FBT0osV0FBUDtBQUNBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxXQUFTTSx3QkFBVCxDQUFrQ0MsTUFBbEMsRUFBK0NDLGdCQUEvQyxFQUFzRUMsYUFBdEUsRUFBMEZDLE1BQTFGLEVBQXVHO0FBQ3RHLFNBQUssSUFBSWpGLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUc4RSxNQUFNLENBQUMzRSxNQUEzQixFQUFtQ0gsQ0FBQyxFQUFwQyxFQUF3QztBQUN2QyxVQUFNa0YsS0FBSyxHQUFHSixNQUFNLENBQUM5RSxDQUFELENBQXBCO0FBQ0EsVUFBTW1GLE9BQU8sR0FBR0QsS0FBSyxDQUFDRSxNQUF0QjtBQUNBLFVBQU1DLE9BQU8sR0FBR0YsT0FBTyxDQUFDdkcsS0FBUixDQUFjLEdBQWQsRUFBbUIsQ0FBbkIsRUFBc0JBLEtBQXRCLENBQTRCLEdBQTVCLEVBQWlDLENBQWpDLENBQWhCOztBQUNBLFVBQUltRyxnQkFBZ0IsSUFBSUEsZ0JBQWdCLENBQUMxRixPQUFqQixDQUF5QmdHLE9BQXpCLE1BQXNDLENBQUMsQ0FBL0QsRUFBa0U7QUFDakVKLFFBQUFBLE1BQU0sQ0FBQ0wsSUFBUCxDQUFZO0FBQ1hVLFVBQUFBLElBQUksRUFBRUosS0FBSyxDQUFDSSxJQUREO0FBRVhDLFVBQUFBLGVBQWUsRUFBRUosT0FBTyxDQUFDdkcsS0FBUixDQUFjLEdBQWQsRUFBbUIsQ0FBbkIsRUFBc0JBLEtBQXRCLENBQTRCLEdBQTVCLEVBQWlDLENBQWpDLENBRk47QUFHWDRHLFVBQUFBLFlBQVksRUFBRUgsT0FBTyxDQUFDekcsS0FBUixDQUFjLEdBQWQsRUFBbUIsQ0FBbkIsQ0FISDtBQUlYNkcsVUFBQUEsWUFBWSxFQUFFVDtBQUpILFNBQVo7QUFNQTtBQUNEO0FBQ0Q7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFdBQVNVLGtCQUFULENBQTRCQywwQkFBNUIsRUFBNkRDLGVBQTdELEVBQW1GQyxnQkFBbkYsRUFBMEdmLE1BQTFHLEVBQXVIO0FBQ3RILFFBQUlBLE1BQU0sSUFBSUEsTUFBTSxDQUFDM0UsTUFBUCxHQUFnQixDQUE5QixFQUFpQztBQUNoQyxVQUFNNEUsZ0JBQWdCLEdBQUdZLDBCQUEwQixDQUFDRyxrQkFBM0IsR0FBZ0RILDBCQUEwQixDQUFDRyxrQkFBM0UsR0FBZ0csRUFBekg7QUFDQSxVQUFNdkIsV0FBVyxHQUFHb0IsMEJBQTBCLENBQUNJLE9BQTNCLEdBQXFDMUIsZUFBZSxDQUFDc0IsMEJBQTBCLENBQUNJLE9BQTVCLENBQXBELEdBQTJGLEVBQS9HO0FBQ0EsVUFBTWYsYUFBYSxHQUFHO0FBQUVnQixRQUFBQSxrQkFBa0IsRUFBRUosZUFBdEI7QUFBdUNLLFFBQUFBLHFCQUFxQixFQUFFMUI7QUFBOUQsT0FBdEI7O0FBQ0FNLE1BQUFBLHdCQUF3QixDQUFDQyxNQUFELEVBQVNDLGdCQUFULEVBQTJCQyxhQUEzQixFQUEwQ2EsZ0JBQTFDLENBQXhCO0FBQ0E7QUFDRDs7QUFDRCxXQUFTSyxxQkFBVCxDQUVDTixlQUZELEVBR0NPLE1BSEQsRUFJQ3RDLGlCQUpELEVBS0N1QyxRQUxELEVBTUNyRyxVQU5ELEVBT0NzRyxTQVBELEVBUUU7QUFDRCxRQUFNckMsbUJBQW1CLEdBQUdaLGdCQUFnQixDQUFDUyxpQkFBRCxDQUE1QztBQUNBLFFBQU1FLE1BQVcsR0FBRyxFQUFwQjtBQUNBLFFBQUl1QyxjQUFjLEdBQUcsRUFBckI7QUFBQSxRQUNDQyxjQUFjLEdBQUcsRUFEbEI7QUFFQSxRQUFJQywwQkFBSjtBQUNBLFFBQUlDLHFCQUE0QixHQUFHLEVBQW5DO0FBQ0EsUUFBSTFCLGdCQUF1QixHQUFHLEVBQTlCOztBQUVBLFFBQUlvQixNQUFKLEVBQVk7QUFDWCxVQUFJQyxRQUFRLElBQUlBLFFBQVEsQ0FBQ2pHLE1BQVQsR0FBa0IsQ0FBbEMsRUFBcUM7QUFDcEMsYUFBSyxJQUFJdUcsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR04sUUFBUSxDQUFDakcsTUFBN0IsRUFBcUN1RyxDQUFDLEVBQXRDLEVBQTBDO0FBQ3pDLGNBQU1DLE9BQU8sR0FBR1AsUUFBUSxDQUFDTSxDQUFELENBQVIsQ0FBWW5GLGFBQTVCOztBQUNBLGNBQUksQ0FBQ3dDLE1BQU0sQ0FBQzRDLE9BQUQsQ0FBWCxFQUFzQjtBQUNyQjVDLFlBQUFBLE1BQU0sQ0FBQzRDLE9BQUQsQ0FBTixHQUFrQjtBQUFFQyxjQUFBQSxLQUFLLEVBQUVULE1BQU0sQ0FBQ1EsT0FBRDtBQUFmLGFBQWxCO0FBQ0E7QUFDRDtBQUNELE9BUEQsTUFPTztBQUNOO0FBQ0EsWUFBTUUsY0FBYyxHQUFHOUcsVUFBVSxDQUFDTyxTQUFYLENBQXFCK0YsU0FBUyxHQUFHLGFBQWpDLENBQXZCOztBQUNBLGFBQUssSUFBTVMsR0FBWCxJQUFrQkQsY0FBbEIsRUFBa0M7QUFDakMsY0FBTUUsT0FBTyxHQUFHRixjQUFjLENBQUNDLEdBQUQsQ0FBOUI7O0FBQ0EsY0FBSSxDQUFDL0MsTUFBTSxDQUFDZ0QsT0FBRCxDQUFYLEVBQXNCO0FBQ3JCaEQsWUFBQUEsTUFBTSxDQUFDZ0QsT0FBRCxDQUFOLEdBQWtCO0FBQUVILGNBQUFBLEtBQUssRUFBRVQsTUFBTSxDQUFDWSxPQUFEO0FBQWYsYUFBbEI7QUFDQTtBQUNEO0FBQ0Q7QUFDRCxLQTNCQSxDQTRCRDs7O0FBRUEsUUFBTUMsYUFBYSxHQUFHQyxhQUFhLENBQUNwRCxpQkFBRCxDQUFiLENBQWlDcUQsV0FBakMsRUFBdEI7QUFDQSxRQUFNckIsZ0JBQXVCLEdBQUcsRUFBaEM7O0FBQ0EsUUFBSW1CLGFBQWEsQ0FBQ0cseUJBQWxCLEVBQTZDO0FBQzVDLFVBQU1DLGVBQWUsR0FBRzNDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZc0MsYUFBYSxDQUFDRyx5QkFBMUIsQ0FBeEI7O0FBQ0EsV0FBSyxJQUFJTCxJQUFHLEdBQUcsQ0FBZixFQUFrQkEsSUFBRyxHQUFHTSxlQUFlLENBQUNqSCxNQUF4QyxFQUFnRDJHLElBQUcsRUFBbkQsRUFBdUQ7QUFDdERsRCxRQUFBQSxhQUFhLENBQUNDLGlCQUFELEVBQW9CdUQsZUFBZSxDQUFDTixJQUFELENBQW5DLEVBQTBDL0MsTUFBMUMsQ0FBYixDQUNFc0QsSUFERixDQUVFM0Isa0JBQWtCLENBQUM0QixJQUFuQixDQUNDLElBREQsRUFFQ04sYUFBYSxDQUFDRyx5QkFBZCxDQUF3Q0MsZUFBZSxDQUFDTixJQUFELENBQXZELENBRkQsRUFHQ2xCLGVBSEQsRUFJQ0MsZ0JBSkQsQ0FGRixFQVNFMEIsS0FURixDQVNRLFVBQVVDLE1BQVYsRUFBdUI7QUFDN0JDLFVBQUFBLEdBQUcsQ0FBQ0MsS0FBSixDQUFVLG1DQUFWLEVBQStDRixNQUEvQztBQUNBLFNBWEY7QUFZQTtBQUNEOztBQUVELGFBQVNHLDhCQUFULEdBQTBDO0FBQ3pDLFVBQU1DLFVBQVUsR0FBRzVELG1CQUFtQixDQUFDNkQsY0FBcEIsQ0FBbUNDLFFBQVEsQ0FBQ3BFLFFBQVQsQ0FBa0JDLElBQXJELENBQW5CO0FBQ0EyQyxNQUFBQSxjQUFjLEdBQUdzQixVQUFVLENBQUN6RCxjQUE1QixDQUZ5QyxDQUVHOztBQUM1Q29DLE1BQUFBLGNBQWMsR0FBR3FCLFVBQVUsQ0FBQ0csTUFBNUI7QUFDQSxhQUFPbkUsYUFBYSxDQUFDQyxpQkFBRCxFQUFvQnlDLGNBQXBCLEVBQW9DdkMsTUFBcEMsQ0FBcEI7QUFDQTs7QUFFRDRELElBQUFBLDhCQUE4QixHQUM1Qk4sSUFERixDQUNPLFVBQVV2QyxNQUFWLEVBQXVCO0FBQzVCLFVBQUlBLE1BQU0sSUFBSUEsTUFBTSxDQUFDM0UsTUFBUCxHQUFnQixDQUE5QixFQUFpQztBQUNoQyxZQUFNNkUsYUFBa0IsR0FBRyxFQUEzQjtBQUNBLFlBQU1nRCxtQkFBMEIsR0FBRyxFQUFuQztBQUNBLFlBQU14SCxjQUFjLEdBQUc2RixTQUFTLEdBQUcsR0FBbkM7QUFDQSxZQUFNNEIsZUFBZSxHQUFHNUIsU0FBUyxHQUFHLElBQXBDO0FBQ0EsWUFBTTZCLHFCQUFxQixHQUFHbkksVUFBVSxDQUFDTyxTQUFYLENBQXFCRSxjQUFyQixDQUE5QjtBQUNBZ0csUUFBQUEsMEJBQTBCLEdBQUcyQiw2QkFBNkIsQ0FBQ0QscUJBQUQsRUFBd0I1QixjQUF4QixDQUExRDs7QUFDQSxZQUFJLENBQUNFLDBCQUEwQixDQUFDNEIsZUFBaEMsRUFBaUQ7QUFDaEQsY0FBTUMsc0JBQXNCLEdBQUd0SSxVQUFVLENBQUNPLFNBQVgsQ0FBcUIySCxlQUFyQixDQUEvQjtBQUNBekIsVUFBQUEsMEJBQTBCLEdBQUcyQiw2QkFBNkIsQ0FBQ0Usc0JBQUQsRUFBeUIvQixjQUF6QixDQUExRDtBQUNBOztBQUNEdkIsUUFBQUEsZ0JBQWdCLEdBQUd5QiwwQkFBMEIsQ0FBQzhCLG1CQUE5QyxDQVhnQyxDQVloQzs7QUFDQXZELFFBQUFBLGdCQUFnQixDQUFDSCxJQUFqQixDQUFzQjJCLGNBQXRCO0FBQ0F2QixRQUFBQSxhQUFhLENBQUNnQixrQkFBZCxHQUFtQ0osZUFBbkM7QUFDQVosUUFBQUEsYUFBYSxDQUFDaUIscUJBQWQsR0FBc0NPLDBCQUEwQixDQUFDK0IsU0FBakU7O0FBQ0ExRCxRQUFBQSx3QkFBd0IsQ0FBQ0MsTUFBRCxFQUFTQyxnQkFBVCxFQUEyQkMsYUFBM0IsRUFBMENnRCxtQkFBMUMsQ0FBeEI7O0FBQ0F2QixRQUFBQSxxQkFBcUIsR0FBR3VCLG1CQUFtQixDQUFDUSxNQUFwQixDQUEyQjNDLGdCQUEzQixDQUF4QixDQWpCZ0MsQ0FrQmhDOztBQUNBaEMsUUFBQUEsaUJBQWlCLENBQUM0RSxpQkFBbEIsQ0FBb0MsVUFBcEMsRUFBZ0RDLFdBQWhELENBQTRELHdCQUE1RCxFQUFzRmpDLHFCQUFxQixDQUFDdEcsTUFBdEIsR0FBK0IsQ0FBckg7QUFDQTBELFFBQUFBLGlCQUFpQixDQUFDNEUsaUJBQWxCLENBQW9DLFVBQXBDLEVBQWdEQyxXQUFoRCxDQUE0RCxtQkFBNUQsRUFBaUZqQyxxQkFBakY7QUFDQSxPQXJCRCxNQXFCTztBQUNONUMsUUFBQUEsaUJBQWlCLENBQUM0RSxpQkFBbEIsQ0FBb0MsVUFBcEMsRUFBZ0RDLFdBQWhELENBQTRELHdCQUE1RCxFQUFzRixLQUF0RjtBQUNBO0FBQ0QsS0ExQkYsRUEyQkVuQixLQTNCRixDQTJCUSxVQUFVQyxNQUFWLEVBQXVCO0FBQzdCQyxNQUFBQSxHQUFHLENBQUNDLEtBQUosQ0FBVSxtQkFBVixFQUErQkYsTUFBL0I7QUFDQSxLQTdCRjtBQThCQSxXQUFPZixxQkFBUDtBQUNBOztBQUNELFdBQVMwQiw2QkFBVCxDQUF1Q1Esa0JBQXZDLEVBQWdFckMsY0FBaEUsRUFBcUY7QUFDcEYsUUFBTUUsMEJBQTBCLEdBQUc7QUFDbEM0QixNQUFBQSxlQUFlLEVBQUUsS0FEaUI7QUFFbENFLE1BQUFBLG1CQUFtQixFQUFFLEVBRmE7QUFHbENDLE1BQUFBLFNBQVMsRUFBRTtBQUh1QixLQUFuQztBQUtBLFFBQUlLLHNCQUFKLEVBQTRCQyxxQkFBNUI7QUFDQSxRQUFJQyxVQUFKOztBQUNBLFNBQUssSUFBTWhDLEdBQVgsSUFBa0I2QixrQkFBbEIsRUFBc0M7QUFDckMsVUFBSTdCLEdBQUcsQ0FBQ3pILE9BQUosQ0FBWSwrQ0FBWixJQUErRCxDQUFDLENBQWhFLElBQXFFc0osa0JBQWtCLENBQUM3QixHQUFELENBQWxCLEtBQTRCUixjQUFyRyxFQUFxSDtBQUNwSEUsUUFBQUEsMEJBQTBCLENBQUM0QixlQUEzQixHQUE2QyxJQUE3QztBQUNBUSxRQUFBQSxzQkFBc0IsR0FBRyx1REFBekI7QUFDQUMsUUFBQUEscUJBQXFCLEdBQUcsa0VBQXhCOztBQUVBLFlBQUkvQixHQUFHLENBQUN6SCxPQUFKLENBQVksR0FBWixJQUFtQixDQUFDLENBQXhCLEVBQTJCO0FBQzFCeUosVUFBQUEsVUFBVSxHQUFHaEMsR0FBRyxDQUFDbEksS0FBSixDQUFVLEdBQVYsRUFBZSxDQUFmLENBQWI7QUFDQWdLLFVBQUFBLHNCQUFzQixHQUFHQSxzQkFBc0IsR0FBRyxHQUF6QixHQUErQkUsVUFBeEQ7QUFDQUQsVUFBQUEscUJBQXFCLEdBQUdBLHFCQUFxQixHQUFHLEdBQXhCLEdBQThCQyxVQUF0RDtBQUNBOztBQUVEdEMsUUFBQUEsMEJBQTBCLENBQUMrQixTQUEzQixHQUF1Qy9CLDBCQUEwQixDQUFDK0IsU0FBM0IsQ0FBcUNDLE1BQXJDLENBQTRDRyxrQkFBa0IsQ0FBQ0Msc0JBQUQsQ0FBOUQsQ0FBdkM7QUFDQXBDLFFBQUFBLDBCQUEwQixDQUFDOEIsbUJBQTNCLEdBQWlEOUIsMEJBQTBCLENBQUM4QixtQkFBM0IsQ0FBK0NFLE1BQS9DLENBQ2hERyxrQkFBa0IsQ0FBQ0UscUJBQUQsQ0FEOEIsQ0FBakQ7QUFJQTtBQUNBO0FBQ0Q7O0FBQ0QsV0FBT3JDLDBCQUFQO0FBQ0E7O0FBQ0QsV0FBU3VDLDBCQUFULENBQW9DbEYsaUJBQXBDLEVBQTREO0FBQzNELFFBQU05RCxVQUFVLEdBQUc4RCxpQkFBaUIsQ0FBQ21GLFFBQWxCLEdBQTZCQyxZQUE3QixFQUFuQjtBQUNBLFFBQU1yRCxlQUFlLEdBQUcvQixpQkFBaUIsQ0FBQzRFLGlCQUFsQixFQUF4QjtBQUNBLFFBQU1TLEtBQUssR0FBR3RELGVBQWUsSUFBSUEsZUFBZSxDQUFDdUQsT0FBaEIsRUFBakM7QUFDQSxRQUFNOUMsU0FBUyxHQUFHdEcsVUFBVSxDQUFDcUosV0FBWCxDQUF1QkYsS0FBdkIsQ0FBbEIsQ0FKMkQsQ0FLM0Q7O0FBQ0EsUUFBTUcsc0JBQXNCLEdBQUdoRCxTQUFTLEdBQUcsR0FBWixHQUFrQiw2Q0FBakQsQ0FOMkQsQ0FPM0Q7O0FBQ0EsUUFBTUQsUUFBUSxHQUFHckcsVUFBVSxDQUFDTyxTQUFYLENBQXFCK0ksc0JBQXJCLENBQWpCLENBUjJELENBUzNEOztBQUNBLFFBQU1sRCxNQUFNLEdBQUdQLGVBQWUsQ0FBQ3RGLFNBQWhCLEVBQWY7O0FBQ0EsUUFBSSxDQUFDNkYsTUFBTCxFQUFhO0FBQ1pQLE1BQUFBLGVBQWUsQ0FDYjBELGFBREYsR0FFRWpDLElBRkYsQ0FFTyxVQUFVbEIsTUFBVixFQUF1QjtBQUM1QixlQUFPRCxxQkFBcUIsQ0FBQ04sZUFBRCxFQUFrQk8sTUFBbEIsRUFBMEJ0QyxpQkFBMUIsRUFBNkN1QyxRQUE3QyxFQUF1RHJHLFVBQXZELEVBQW1Fc0csU0FBbkUsQ0FBNUI7QUFDQSxPQUpGLEVBS0VrQixLQUxGLENBS1EsVUFBVUMsTUFBVixFQUF1QjtBQUM3QkMsUUFBQUEsR0FBRyxDQUFDQyxLQUFKLENBQVUsdUNBQVYsRUFBbURGLE1BQW5EO0FBQ0EsT0FQRjtBQVFBLEtBVEQsTUFTTztBQUNOLGFBQU90QixxQkFBcUIsQ0FBQ04sZUFBRCxFQUFrQk8sTUFBbEIsRUFBMEJ0QyxpQkFBMUIsRUFBNkN1QyxRQUE3QyxFQUF1RHJHLFVBQXZELEVBQW1Fc0csU0FBbkUsQ0FBNUI7QUFDQTtBQUNEO0FBQ0Q7QUFDQTtBQUNBOzs7QUFDQSxXQUFTa0QsaUJBQVQsQ0FBMkJDLE9BQTNCLEVBQXlDO0FBQ3hDLFFBQU1DLGdCQUFnQixHQUFHLENBQUMsY0FBRCxFQUFpQiw2QkFBakIsQ0FBekI7O0FBQ0EsUUFBSUQsT0FBTyxJQUFJQyxnQkFBZ0IsQ0FBQ3BLLE9BQWpCLENBQXlCbUssT0FBTyxDQUFDRSxXQUFSLEdBQXNCQyxPQUF0QixFQUF6QixNQUE4RCxDQUFDLENBQTFFLElBQStFSCxPQUFPLENBQUNJLFVBQVIsRUFBL0UsSUFBdUdKLE9BQU8sQ0FBQ0ssVUFBUixFQUEzRyxFQUFpSTtBQUNoSUwsTUFBQUEsT0FBTyxDQUFDTSxTQUFSO0FBQ0E7QUFDRDs7QUFDRCxXQUFTQyx3QkFBVCxDQUFrQ0MsTUFBbEMsRUFBK0M7QUFDOUMsUUFBSUEsTUFBTSxLQUFLLE1BQVgsSUFBcUJBLE1BQU0sS0FBSyxJQUFwQyxFQUEwQztBQUN6QyxhQUFPLElBQVA7QUFDQSxLQUZELE1BRU87QUFDTixhQUFPLEtBQVA7QUFDQTtBQUNEOztBQUNELFdBQVMxRyxlQUFULENBQXlCRCxRQUF6QixFQUFzRDtBQUNyRCxRQUFJQSxRQUFRLENBQUM0RyxHQUFULENBQWEsMEJBQWIsQ0FBSixFQUE4QztBQUM3QyxhQUFPNUcsUUFBUDtBQUNBOztBQUNELFFBQU02RyxNQUFNLEdBQUdDLFNBQVMsQ0FBQ0Msb0JBQVYsQ0FBK0IvRyxRQUEvQixDQUFmOztBQUNBLFFBQUksQ0FBQzZHLE1BQUwsRUFBYTtBQUNaLGFBQU83RyxRQUFQO0FBQ0EsS0FGRCxNQUVPO0FBQ04sYUFBT0MsZUFBZSxDQUFDNEcsTUFBRCxDQUF0QjtBQUNBO0FBQ0Q7O0FBQ0QsV0FBU2pELGFBQVQsQ0FBdUI1RCxRQUF2QixFQUFzQztBQUNyQyxRQUFJQSxRQUFRLElBQUlBLFFBQVEsQ0FBQzRHLEdBQVQsQ0FBYSxnQ0FBYixDQUFoQixFQUFnRTtBQUMvRDVHLE1BQUFBLFFBQVEsR0FBR0EsUUFBUSxDQUFDZ0gsb0JBQVQsRUFBWDtBQUNBaEgsTUFBQUEsUUFBUSxHQUFHQSxRQUFRLElBQUlBLFFBQVEsQ0FBQ2lILGNBQVQsRUFBdkI7QUFDQTs7QUFDRCxXQUFPakgsUUFBUSxJQUFJLEVBQUVBLFFBQVEsWUFBWWtILElBQXRCLENBQW5CLEVBQWdEO0FBQy9DbEgsTUFBQUEsUUFBUSxHQUFHQSxRQUFRLENBQUNtSCxTQUFULEVBQVg7QUFDQTs7QUFDRCxXQUFPbkgsUUFBUDtBQUNBOztBQUVELFdBQVNvSCw4QkFBVCxDQUF3Q0MsaUJBQXhDLEVBQW1FQyxVQUFuRSxFQUFvRjtBQUNuRixRQUFJQyxhQUFhLEdBQUcsS0FBcEI7QUFDQSxRQUFNQyxNQUFNLEdBQUdILGlCQUFpQixDQUFDOUwsS0FBbEIsQ0FBd0IsR0FBeEIsQ0FBZixDQUZtRixDQUduRjs7QUFDQSxRQUFJaU0sTUFBTSxDQUFDMUssTUFBUCxHQUFnQixDQUFwQixFQUF1QjtBQUN0QnlLLE1BQUFBLGFBQWEsR0FBR0QsVUFBVSxDQUFDRSxNQUFNLENBQUMsQ0FBRCxDQUFQLENBQVYsSUFBeUJGLFVBQVUsQ0FBQ0UsTUFBTSxDQUFDLENBQUQsQ0FBUCxDQUFWLENBQXNCQyxjQUF0QixDQUFxQ0QsTUFBTSxDQUFDLENBQUQsQ0FBM0MsQ0FBekIsSUFBNEVGLFVBQVUsQ0FBQ0UsTUFBTSxDQUFDLENBQUQsQ0FBUCxDQUFWLENBQXNCQSxNQUFNLENBQUMsQ0FBRCxDQUE1QixNQUFxQyxDQUFqSTtBQUNBLEtBRkQsTUFFTztBQUNORCxNQUFBQSxhQUFhLEdBQUdELFVBQVUsQ0FBQ0QsaUJBQUQsQ0FBVixLQUFrQyxDQUFsRDtBQUNBOztBQUNELFdBQU9FLGFBQVA7QUFDQTs7QUFDRCxXQUFTRyxtQkFBVCxDQUE2QkMsV0FBN0IsRUFBaURqTCxVQUFqRCxFQUE2RTtBQUM1RSxRQUFNa0wsY0FBYyxHQUFHLEVBQXZCOztBQUNBLFNBQUssSUFBSWpMLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdnTCxXQUFXLENBQUM3SyxNQUFoQyxFQUF3Q0gsQ0FBQyxFQUF6QyxFQUE2QztBQUM1QyxVQUFNa0wsVUFBVSxHQUFHRixXQUFXLENBQUNoTCxDQUFELENBQVgsQ0FBZW1MLFNBQWxDO0FBQUEsVUFDQ1IsVUFBVSxHQUFHSyxXQUFXLENBQUNoTCxDQUFELENBQVgsQ0FBZW9MLFdBRDdCO0FBR0EsYUFBT1QsVUFBVSxDQUFDLGdCQUFELENBQWpCO0FBQ0EsYUFBT0EsVUFBVSxDQUFDLGtCQUFELENBQWpCO0FBQ0EsYUFBT0EsVUFBVSxDQUFDLHFCQUFELENBQWpCO0FBQ0EsYUFBT0EsVUFBVSxDQUFDLHVCQUFELENBQWpCO0FBQ0EsYUFBT0EsVUFBVSxDQUFDLGVBQUQsQ0FBakI7QUFDQSxVQUFNVSxXQUFXLEdBQUc1RyxNQUFNLENBQUNDLElBQVAsQ0FBWWlHLFVBQVosQ0FBcEI7O0FBQ0EsV0FBSyxJQUFJakUsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBRzJFLFdBQVcsQ0FBQ2xMLE1BQWhDLEVBQXdDdUcsQ0FBQyxFQUF6QyxFQUE2QztBQUM1QyxZQUFNNEUsS0FBSyxHQUFHRCxXQUFXLENBQUMzRSxDQUFELENBQXpCO0FBQUEsWUFDQzZFLG9CQUFvQixHQUFHeEwsVUFBVSxDQUFDTyxTQUFYLENBQXFCLE1BQU00SyxVQUFOLEdBQW1CLEdBQW5CLEdBQXlCSSxLQUF6QixHQUFpQyxHQUF0RCxDQUR4Qjs7QUFFQSxZQUFJQyxvQkFBSixFQUEwQjtBQUN6QixjQUNDQSxvQkFBb0IsQ0FBQyw4REFBRCxDQUFwQixJQUNBQSxvQkFBb0IsQ0FBQywwREFBRCxDQURwQixJQUVBQSxvQkFBb0IsQ0FBQyw0Q0FBRCxDQUhyQixFQUlFO0FBQ0QsbUJBQU9aLFVBQVUsQ0FBQ1csS0FBRCxDQUFqQjtBQUNBLFdBTkQsTUFNTyxJQUFJQyxvQkFBb0IsQ0FBQyw4Q0FBRCxDQUF4QixFQUEwRTtBQUNoRixnQkFBTUMsYUFBYSxHQUFHRCxvQkFBb0IsQ0FBQyw4Q0FBRCxDQUExQzs7QUFDQSxnQkFBSUMsYUFBYSxDQUFDLGFBQUQsQ0FBYixJQUFnQ0EsYUFBYSxDQUFDLGFBQUQsQ0FBYixDQUE2QjVNLEtBQTdCLENBQW1DLEdBQW5DLEVBQXdDLENBQXhDLE1BQStDLGNBQW5GLEVBQW1HO0FBQ2xHLHFCQUFPK0wsVUFBVSxDQUFDVyxLQUFELENBQWpCO0FBQ0EsYUFGRCxNQUVPLElBQUlFLGFBQWEsQ0FBQyxPQUFELENBQWIsSUFBMEJ2SCxXQUFXLENBQUN3Ryw4QkFBWixDQUEyQ2UsYUFBYSxDQUFDLE9BQUQsQ0FBeEQsRUFBbUViLFVBQW5FLENBQTlCLEVBQThHO0FBQ3BILHFCQUFPQSxVQUFVLENBQUNXLEtBQUQsQ0FBakI7QUFDQTtBQUNEO0FBQ0Q7QUFDRDs7QUFDREwsTUFBQUEsY0FBYyxDQUFDckcsSUFBZixDQUFvQitGLFVBQXBCO0FBQ0E7O0FBRUQsV0FBT00sY0FBUDtBQUNBOztBQUNELFdBQVNRLGVBQVQsQ0FBeUJDLE9BQXpCLEVBQXVDQyxZQUF2QyxFQUEwRDtBQUN6RCxTQUFLLElBQU1DLElBQVgsSUFBbUJELFlBQW5CLEVBQWlDO0FBQ2hDLFVBQUlBLFlBQVksQ0FBQ0MsSUFBRCxDQUFaLEtBQXVCRixPQUFPLENBQUNFLElBQUQsQ0FBbEMsRUFBMEM7QUFDekMsZUFBTyxLQUFQO0FBQ0E7QUFDRDs7QUFDRCxXQUFPLElBQVA7QUFDQTs7QUFDRCxXQUFTQywwQkFBVCxDQUFvQzlMLFVBQXBDLEVBQWdFa0IsWUFBaEUsRUFBc0Y2SyxPQUF0RixFQUF3RztBQUN2RyxRQUFNQyxXQUFXLEdBQUdoTSxVQUFVLENBQUNPLFNBQVgsQ0FBcUJXLFlBQVksR0FBRyxHQUFwQyxLQUE0QyxFQUFoRTtBQUFBLFFBQ0MrSyxXQUFnQixHQUFHLEVBRHBCOztBQUdBLFNBQUssSUFBTUosSUFBWCxJQUFtQkcsV0FBbkIsRUFBZ0M7QUFDL0IsVUFDQ0EsV0FBVyxDQUFDakIsY0FBWixDQUEyQmMsSUFBM0IsS0FDQSxDQUFDLE9BQU9LLElBQVAsQ0FBWUwsSUFBWixDQURELElBRUFHLFdBQVcsQ0FBQ0gsSUFBRCxDQUFYLENBQWtCTSxLQUZsQixJQUdBVCxlQUFlLENBQUNNLFdBQVcsQ0FBQ0gsSUFBRCxDQUFaLEVBQW9CRSxPQUFPLElBQUk7QUFBRUksUUFBQUEsS0FBSyxFQUFFO0FBQVQsT0FBL0IsQ0FKaEIsRUFLRTtBQUNERixRQUFBQSxXQUFXLENBQUNKLElBQUQsQ0FBWCxHQUFvQkcsV0FBVyxDQUFDSCxJQUFELENBQS9CO0FBQ0E7QUFDRDs7QUFDRCxXQUFPSSxXQUFQO0FBQ0E7O0FBQ0QsV0FBU0csMEJBQVQsQ0FBb0NwTSxVQUFwQyxFQUFnRWtCLFlBQWhFLEVBQXNGO0FBQ3JGLFFBQUltTCxzQkFBSjs7QUFDQSxRQUFJck0sVUFBVSxJQUFJa0IsWUFBbEIsRUFBZ0M7QUFDL0JtTCxNQUFBQSxzQkFBc0IsR0FBR3JNLFVBQVUsQ0FBQ08sU0FBWCxDQUFxQlcsWUFBWSxHQUFHLGtFQUFwQyxDQUF6QjtBQUNBOztBQUNELFdBQU9tTCxzQkFBUDtBQUNBOztBQUNELFdBQVNDLGVBQVQsQ0FBeUJoSixRQUF6QixFQUF3Q2lKLFdBQXhDLEVBQTREO0FBQzNELFFBQU1DLFFBQVEsR0FBR2xKLFFBQVEsSUFBSUEsUUFBUSxDQUFDbUosVUFBVCxFQUE3Qjs7QUFDQSxRQUFJRCxRQUFKLEVBQWM7QUFDYkEsTUFBQUEsUUFBUSxDQUFDN00sT0FBVCxDQUFpQixVQUFVK00sT0FBVixFQUF3QjtBQUN4QyxZQUFJQSxPQUFPLENBQUN4QyxHQUFSLENBQVksOENBQVosQ0FBSixFQUFpRTtBQUNoRXdDLFVBQUFBLE9BQU8sR0FBR0EsT0FBTyxDQUFDQyxTQUFSLEVBQVY7QUFDQTs7QUFDRCxZQUFJRCxPQUFPLENBQUNFLElBQVIsQ0FBYSxTQUFiLENBQUosRUFBNkI7QUFDNUJMLFVBQUFBLFdBQVcsQ0FBQzFILElBQVosQ0FBaUI2SCxPQUFqQjtBQUNBO0FBQ0QsT0FQRDtBQVFBOztBQUNELFdBQU9ILFdBQVA7QUFDQTtBQUNEO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxXQUFTTSx3Q0FBVCxDQUFrRE4sV0FBbEQsRUFBc0VPLEtBQXRFLEVBQW1GO0FBQ2xGLFFBQU1DLE9BQVksR0FBRyxFQUFyQjs7QUFDQSxRQUFNQyxVQUFVLEdBQUcsVUFBVUMsS0FBVixFQUF1QjtBQUN6QyxVQUFJQSxLQUFKLEVBQVc7QUFDVixZQUFNQyxLQUFLLEdBQUd4SSxNQUFNLENBQUNDLElBQVAsQ0FBWXNJLEtBQVosQ0FBZDtBQUNBQyxRQUFBQSxLQUFLLENBQUN2TixPQUFOLENBQWMsVUFBVWtNLElBQVYsRUFBd0I7QUFDckMsY0FBSUEsSUFBSSxDQUFDdk0sT0FBTCxDQUFhLEdBQWIsTUFBc0IsQ0FBdEIsSUFBMkJ1TSxJQUFJLENBQUN2TSxPQUFMLENBQWEsZUFBYixNQUFrQyxDQUFDLENBQWxFLEVBQXFFO0FBQ3BFeU4sWUFBQUEsT0FBTyxDQUFDbEIsSUFBRCxDQUFQLEdBQWdCO0FBQUVoRixjQUFBQSxLQUFLLEVBQUVvRyxLQUFLLENBQUNwQixJQUFEO0FBQWQsYUFBaEI7QUFDQTtBQUNELFNBSkQ7QUFLQTs7QUFDRCxVQUFJVSxXQUFXLENBQUNuTSxNQUFoQixFQUF3QjtBQUN2Qm1NLFFBQUFBLFdBQVcsQ0FBQzVNLE9BQVosQ0FBb0IsVUFBVXdOLFVBQVYsRUFBMkI7QUFDOUMsY0FBTUMsZUFBZSxHQUFHRCxVQUFVLENBQUNQLElBQVgsQ0FBZ0IsU0FBaEIsRUFBMkJ4SSxjQUFuRDtBQUNBLGNBQU1rQixPQUFPLEdBQUc2SCxVQUFVLENBQUNQLElBQVgsQ0FBZ0IsU0FBaEIsRUFBMkI1RSxNQUEzQztBQUNBOUQsVUFBQUEsV0FBVyxDQUFDYixnQkFBWixDQUE2QnlKLEtBQTdCLEVBQ0UzSSxRQURGLENBQ1c7QUFDVEMsWUFBQUEsY0FBYyxFQUFFZ0osZUFEUDtBQUVUcEYsWUFBQUEsTUFBTSxFQUFFMUMsT0FGQztBQUdUakIsWUFBQUEsTUFBTSxFQUFFMEk7QUFIQyxXQURYLEVBTUV6RixJQU5GLENBTU8sVUFBVStGLEtBQVYsRUFBc0I7QUFDM0JGLFlBQUFBLFVBQVUsQ0FBQ0csVUFBWCxDQUFzQkgsVUFBVSxDQUFDdEQsVUFBWCxNQUEyQndELEtBQTNCLElBQW9DQSxLQUFLLENBQUNqTixNQUFOLEtBQWlCLENBQTNFO0FBQ0EsV0FSRixFQVNFb0gsS0FURixDQVNRLFVBQVVDLE1BQVYsRUFBdUI7QUFDN0JDLFlBQUFBLEdBQUcsQ0FBQ0MsS0FBSixDQUFVLGtEQUFWLEVBQThERixNQUE5RDtBQUNBLFdBWEY7QUFZQSxTQWZEO0FBZ0JBO0FBQ0QsS0EzQkQ7O0FBNEJBLFFBQUlxRixLQUFLLElBQUlBLEtBQUssQ0FBQ3BFLGlCQUFOLEVBQWIsRUFBd0M7QUFBQTs7QUFDdkMsK0JBQUNvRSxLQUFLLENBQUNwRSxpQkFBTixFQUFELGdGQUNHYSxhQURILEdBRUVqQyxJQUZGLENBRU8sVUFBVTJGLEtBQVYsRUFBc0I7QUFDM0IsZUFBT0QsVUFBVSxDQUFDQyxLQUFELENBQWpCO0FBQ0EsT0FKRixFQUtFekYsS0FMRixDQUtRLFVBQVVDLE1BQVYsRUFBdUI7QUFDN0JDLFFBQUFBLEdBQUcsQ0FBQ0MsS0FBSixDQUFVLGtEQUFWLEVBQThERixNQUE5RDtBQUNBLE9BUEY7QUFRQSxLQVRELE1BU087QUFDTnVGLE1BQUFBLFVBQVU7QUFDVjtBQUNEOztBQUNELFdBQVNPLGlCQUFULENBQTJCQyxhQUEzQixFQUFrREMsZUFBbEQsRUFBbUZWLE9BQW5GLEVBQWtHVyxjQUFsRyxFQUEySDtBQUMxSCxRQUFJQyxZQUFZLEdBQUdILGFBQW5COztBQUNBLFFBQUlDLGVBQUosRUFBcUI7QUFDcEIsVUFBSUMsY0FBSixFQUFvQjtBQUNuQjtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0EsWUFBTUUsa0JBQWtCLEdBQUdDLHlCQUF5QixDQUNsREosZUFBRCxDQUF5QkssY0FEMEIsRUFFbkROLGFBQWEsR0FBRyxHQUFoQixHQUFzQkUsY0FGNkIsQ0FBcEQsQ0FQbUIsQ0FZbkI7QUFDQTs7O0FBQ0FDLFFBQUFBLFlBQVksR0FBR0Msa0JBQWtCLEdBQUdKLGFBQWEsR0FBRyxHQUFoQixHQUFzQkUsY0FBekIsR0FBMENGLGFBQTNFO0FBQ0E7O0FBQ0QsYUFBT0MsZUFBZSxDQUFDTSxPQUFoQixDQUF3QkosWUFBeEIsRUFBc0NaLE9BQXRDLENBQVA7QUFDQSxLQXBCeUgsQ0FzQjFIOzs7QUFDQVUsSUFBQUEsZUFBZSxHQUFJTyxJQUFELENBQWlCQyx3QkFBakIsQ0FBMEMsYUFBMUMsQ0FBbEI7QUFDQSxXQUFPUixlQUFlLENBQUNNLE9BQWhCLENBQXdCSixZQUF4QixFQUFzQ1osT0FBdEMsQ0FBUDtBQUNBOztBQUNELFdBQVNjLHlCQUFULENBQW1DQyxjQUFuQyxFQUF3RGpDLElBQXhELEVBQW1FO0FBQ2xFLFFBQUlpQyxjQUFjLENBQUMxTixNQUFuQixFQUEyQjtBQUMxQixXQUFLLElBQUlILENBQUMsR0FBRzZOLGNBQWMsQ0FBQzFOLE1BQWYsR0FBd0IsQ0FBckMsRUFBd0NILENBQUMsSUFBSSxDQUE3QyxFQUFnREEsQ0FBQyxFQUFqRCxFQUFxRDtBQUNwRCxZQUFNZ0ssTUFBTSxHQUFHNkQsY0FBYyxDQUFDN04sQ0FBRCxDQUFkLENBQWtCaU8sT0FBbEIsQ0FBMEJyQyxJQUExQixDQUFmLENBRG9ELENBRXBEOztBQUNBLFlBQUk1QixNQUFKLEVBQVk7QUFDWCxpQkFBTyxJQUFQO0FBQ0E7O0FBQ0Q0RCxRQUFBQSx5QkFBeUIsQ0FBQ0MsY0FBYyxDQUFDN04sQ0FBRCxDQUFkLENBQWtCNk4sY0FBbkIsRUFBbUNqQyxJQUFuQyxDQUF6QjtBQUNBO0FBQ0Q7O0FBQ0QsV0FBTyxLQUFQO0FBQ0E7O0FBQ0QsV0FBU3NDLGFBQVQsQ0FBdUJ6QixPQUF2QixFQUFxQzBCLGVBQXJDLEVBQStEQyxXQUEvRCxFQUFxRkMsaUJBQXJGLEVBQWtIO0FBQ2pIRCxJQUFBQSxXQUFXLEdBQUcsQ0FBQ0EsV0FBRCxHQUFlM0IsT0FBTyxDQUFDbk0sU0FBUixDQUFrQm1NLE9BQU8sQ0FBQ3RELE9BQVIsRUFBbEIsQ0FBZixHQUFzRGlGLFdBQXBFO0FBQ0EsUUFBSW5OLFlBQVksR0FBR3dMLE9BQU8sQ0FBQ3RELE9BQVIsR0FBa0J2SyxLQUFsQixDQUF3QixJQUF4QixFQUE4QixDQUE5QixDQUFuQjtBQUNBLFFBQU0wUCxlQUFlLEdBQUc3QixPQUFPLENBQUNuTSxTQUFSLENBQWtCVyxZQUFsQixFQUFnQ3NOLEtBQXhEO0FBQ0EsUUFBTUMsV0FBVyxHQUFHQyxnQkFBZ0IsQ0FBQ2hDLE9BQU8sQ0FBQ3pELFFBQVIsRUFBRCxFQUFxQnNGLGVBQXJCLENBQXBDOztBQUNBLFFBQUlFLFdBQUosRUFBaUI7QUFDaEJ2TixNQUFBQSxZQUFZLEdBQUcsTUFBTXVOLFdBQXJCO0FBQ0E7O0FBQ0QsUUFBSUgsaUJBQUosRUFBdUI7QUFDdEIsYUFBTzVCLE9BQU8sQ0FBQ25NLFNBQVIsQ0FBa0JXLFlBQVksR0FBRyxHQUFmLEdBQXFCbU4sV0FBckIsR0FBbUMsdUNBQXJELENBQVA7QUFDQTs7QUFDRCxRQUFJRCxlQUFKLEVBQXFCO0FBQ3BCLGFBQU9sTixZQUFZLEdBQUcsR0FBZixHQUFxQm1OLFdBQTVCO0FBQ0EsS0FGRCxNQUVPO0FBQ04sYUFBTztBQUNObk4sUUFBQUEsWUFBWSxFQUFFQSxZQURSO0FBRU51QixRQUFBQSxTQUFTLEVBQUVpSyxPQUFPLENBQUNuTSxTQUFSLENBQWtCVyxZQUFZLEdBQUcsR0FBZixHQUFxQm1OLFdBQXJCLEdBQW1DLDZDQUFyRCxDQUZMO0FBR05NLFFBQUFBLGlCQUFpQixFQUFFakMsT0FBTyxDQUFDbk0sU0FBUixDQUFrQlcsWUFBWSxHQUFHLEdBQWYsR0FBcUJtTixXQUFyQixHQUFtQyxzQ0FBckQ7QUFIYixPQUFQO0FBS0E7QUFDRDs7QUFDRCxXQUFTSyxnQkFBVCxDQUEwQjFPLFVBQTFCLEVBQTJDNE8sV0FBM0MsRUFBNkQ7QUFDNUQsUUFBTUMsZ0JBQWdCLEdBQUc3TyxVQUFVLENBQUNPLFNBQVgsQ0FBcUIsR0FBckIsQ0FBekI7O0FBQ0EsU0FBSyxJQUFNd0csR0FBWCxJQUFrQjhILGdCQUFsQixFQUFvQztBQUNuQyxVQUFJLE9BQU9BLGdCQUFnQixDQUFDOUgsR0FBRCxDQUF2QixLQUFpQyxRQUFqQyxJQUE2QzhILGdCQUFnQixDQUFDOUgsR0FBRCxDQUFoQixDQUFzQnlILEtBQXRCLEtBQWdDSSxXQUFqRixFQUE4RjtBQUM3RixlQUFPN0gsR0FBUDtBQUNBO0FBQ0Q7QUFDRDs7QUFDRCxXQUFTK0gsa0JBQVQsQ0FBNEJDLG9CQUE1QixFQUF1REMsc0JBQXZELEVBQXFGO0FBQ3BGLFFBQU1DLGVBQWUsR0FBR0Ysb0JBQW9CLENBQUMsc0NBQUQsQ0FBNUM7QUFBQSxRQUNDRywwQkFBMEIsR0FDekJELGVBQWUsS0FDYkYsb0JBQW9CLElBQ3JCQSxvQkFBb0IsQ0FBQyxpRkFBRCxDQURwQixJQUVDQyxzQkFBc0IsSUFBSUEsc0JBQXNCLENBQUMsNkNBQUQsQ0FIbkMsQ0FGakI7O0FBT0EsUUFBSUUsMEJBQUosRUFBZ0M7QUFDL0IsVUFBSUEsMEJBQTBCLENBQUNDLFdBQTNCLEtBQTJDLHlEQUEvQyxFQUEwRztBQUN6RyxlQUFPLGFBQVA7QUFDQSxPQUZELE1BRU8sSUFBSUQsMEJBQTBCLENBQUNDLFdBQTNCLEtBQTJDLHlEQUEvQyxFQUEwRztBQUNoSCxlQUFPLGtCQUFQO0FBQ0EsT0FGTSxNQUVBLElBQUlELDBCQUEwQixDQUFDQyxXQUEzQixLQUEyQyw2REFBL0MsRUFBOEc7QUFDcEgsZUFBTyxPQUFQO0FBQ0EsT0FQOEIsQ0FRL0I7OztBQUNBLGFBQU8sa0JBQVA7QUFDQTs7QUFDRCxXQUFPRixlQUFlLEdBQUcsa0JBQUgsR0FBd0IsT0FBOUM7QUFDQTs7QUFDRCxXQUFTRyxjQUFULENBQXdCeFAsUUFBeEIsRUFBdUM7QUFDdEMsUUFBTUksVUFBVSxHQUFHSixRQUFRLENBQUNxSixRQUFULEdBQW9CQyxZQUFwQixFQUFuQjtBQUNBLFdBQU9sSixVQUFVLENBQUNPLFNBQVgsQ0FBcUJQLFVBQVUsQ0FBQ3FKLFdBQVgsQ0FBdUJ6SixRQUFRLENBQUN3SixPQUFULEVBQXZCLElBQTZDLFFBQWxFLENBQVA7QUFDQTs7QUFDRCxXQUFTaUcsY0FBVCxDQUF3Qi9KLE9BQXhCLEVBQXNDZ0ssZ0JBQXRDLEVBQTZEN00sU0FBN0QsRUFBNkU7QUFDNUUsUUFBSTdDLFFBQVEsR0FBRzBQLGdCQUFmO0FBQ0EsUUFBTUMsYUFBYSxHQUFHakssT0FBTyxDQUFDaEcsT0FBUixDQUFnQixHQUFoQixDQUF0Qjs7QUFFQSxRQUFJaVEsYUFBYSxHQUFHLENBQUMsQ0FBckIsRUFBd0I7QUFDdkIsVUFBTUMsV0FBVyxHQUFHbEssT0FBTyxDQUFDbUssS0FBUixDQUFjRixhQUFhLEdBQUcsQ0FBOUIsRUFBaUMsQ0FBQyxDQUFsQyxDQUFwQjs7QUFDQSxVQUFJRyxZQUFZLEdBQUdOLGNBQWMsQ0FBQ3hQLFFBQUQsQ0FBakM7O0FBRUEsYUFBTzhQLFlBQVksS0FBS0YsV0FBeEIsRUFBcUM7QUFDcEM7QUFDQTVQLFFBQUFBLFFBQVEsR0FBR0EsUUFBUSxDQUFDK1AsVUFBVCxHQUFzQkMsVUFBdEIsRUFBWDs7QUFDQSxZQUFJaFEsUUFBSixFQUFjO0FBQ2I4UCxVQUFBQSxZQUFZLEdBQUdOLGNBQWMsQ0FBQ3hQLFFBQUQsQ0FBN0I7QUFDQSxTQUZELE1BRU87QUFDTjhILFVBQUFBLEdBQUcsQ0FBQ21JLE9BQUosQ0FBWSxvRkFBWjtBQUNBLGlCQUFPQyxPQUFPLENBQUNDLE9BQVIsQ0FBZ0JwUixTQUFoQixDQUFQO0FBQ0E7QUFDRDtBQUNEOztBQUVELFdBQU9pQixRQUFRLENBQUMySixhQUFULENBQXVCOUcsU0FBdkIsQ0FBUDtBQUNBOztBQUNELFdBQVN1TixnQkFBVCxDQUEwQlYsZ0JBQTFCLEVBQWlEaEssT0FBakQsRUFBK0Q3QyxTQUEvRCxFQUErRXdOLHlCQUEvRSxFQUErRztBQUM5RyxRQUFNQyxRQUFRLEdBQ2J6TixTQUFTLElBQUlBLFNBQVMsQ0FBQ25ELE9BQVYsQ0FBa0IsR0FBbEIsTUFBMkIsQ0FBeEMsR0FDRzZRLHdCQUF3QixDQUFDMU4sU0FBRCxFQUFZNk0sZ0JBQWdCLENBQUNyRyxRQUFqQixFQUFaLENBRDNCLEdBRUdvRyxjQUFjLENBQUMvSixPQUFELEVBQVVnSyxnQkFBVixFQUE0QjdNLFNBQTVCLENBSGxCO0FBS0EsV0FBT3lOLFFBQVEsQ0FBQzVJLElBQVQsQ0FBYyxVQUFVOEksY0FBVixFQUErQjtBQUNuRCxhQUFPTixPQUFPLENBQUNDLE9BQVIsQ0FBZ0I7QUFDdEJLLFFBQUFBLGNBQWMsRUFBRUEsY0FETTtBQUV0QmQsUUFBQUEsZ0JBQWdCLEVBQUVBLGdCQUZJO0FBR3RCaEssUUFBQUEsT0FBTyxFQUFFQSxPQUhhO0FBSXRCMkssUUFBQUEseUJBQXlCLEVBQUVBO0FBSkwsT0FBaEIsQ0FBUDtBQU1BLEtBUE0sQ0FBUDtBQVFBOztBQUNELFdBQVNJLHFDQUFULENBQStDQyxxQkFBL0MsRUFBMkVDLGdCQUEzRSxFQUFrRztBQUNqRyxXQUFPVCxPQUFPLENBQUNVLEdBQVIsQ0FBWUQsZ0JBQVosRUFDTGpKLElBREssQ0FDQSxVQUFVbUosUUFBVixFQUEyQjtBQUNoQyxVQUFJQSxRQUFRLENBQUNyUSxNQUFiLEVBQXFCO0FBQ3BCLFlBQU1zUSxtQkFBMEIsR0FBRyxFQUFuQztBQUFBLFlBQ0NDLHNCQUE2QixHQUFHLEVBRGpDO0FBRUFGLFFBQUFBLFFBQVEsQ0FBQzlRLE9BQVQsQ0FBaUIsVUFBVWlSLE9BQVYsRUFBd0I7QUFDeEMsY0FBSUEsT0FBSixFQUFhO0FBQ1osZ0JBQUlBLE9BQU8sQ0FBQ1IsY0FBWixFQUE0QjtBQUMzQkUsY0FBQUEscUJBQXFCLENBQUNySCxRQUF0QixHQUFpQ04sV0FBakMsQ0FBNkNpSSxPQUFPLENBQUNYLHlCQUFyRCxFQUFnRixJQUFoRjtBQUNBUyxjQUFBQSxtQkFBbUIsQ0FBQzdMLElBQXBCLENBQXlCK0wsT0FBTyxDQUFDdEIsZ0JBQWpDO0FBQ0EsYUFIRCxNQUdPO0FBQ05xQixjQUFBQSxzQkFBc0IsQ0FBQzlMLElBQXZCLENBQTRCK0wsT0FBTyxDQUFDdEIsZ0JBQXBDO0FBQ0E7QUFDRDtBQUNELFNBVEQ7O0FBVUF1QixRQUFBQSx5QkFBeUIsQ0FBQ1AscUJBQUQsRUFBd0JHLFFBQVEsQ0FBQyxDQUFELENBQVIsQ0FBWW5MLE9BQXBDLEVBQTZDb0wsbUJBQTdDLEVBQWtFQyxzQkFBbEUsQ0FBekI7QUFDQTtBQUNELEtBakJLLEVBa0JMbkosS0FsQkssQ0FrQkMsVUFBVUMsTUFBVixFQUF1QjtBQUM3QkMsTUFBQUEsR0FBRyxDQUFDb0osS0FBSixDQUFVLDBDQUFWLEVBQXNEckosTUFBdEQ7QUFDQSxLQXBCSyxDQUFQO0FBcUJBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxXQUFTb0oseUJBQVQsQ0FBbUNQLHFCQUFuQyxFQUErRGhMLE9BQS9ELEVBQTZFeUwsV0FBN0UsRUFBK0ZDLGNBQS9GLEVBQW9IO0FBQ25ILFFBQU1DLHdCQUF3QixHQUFHWCxxQkFBcUIsQ0FBQ2xILE9BQXRCLEtBQWtDLGtCQUFsQyxHQUF1RDlELE9BQXhGO0FBQUEsUUFDQzRMLGNBQWMsR0FBR1oscUJBQXFCLENBQUNySCxRQUF0QixFQURsQjtBQUVBaUksSUFBQUEsY0FBYyxDQUFDdkksV0FBZixDQUEyQnNJLHdCQUF3QixHQUFHLGNBQXRELEVBQXNFRixXQUF0RTtBQUNBRyxJQUFBQSxjQUFjLENBQUN2SSxXQUFmLENBQTJCc0ksd0JBQXdCLEdBQUcsaUJBQXRELEVBQXlFRCxjQUF6RTtBQUNBOztBQUNELFdBQVNHLG1CQUFULENBQTZCYixxQkFBN0IsRUFBeURjLDRCQUF6RCxFQUE0RkMsaUJBQTVGLEVBQW9IO0FBQ25ILFFBQU1DLFNBQVMsR0FBRyxFQUFsQjs7QUFDQSxTQUFLLElBQU1oTSxPQUFYLElBQXNCOEwsNEJBQXRCLEVBQW9EO0FBQ25EO0FBQ0FkLE1BQUFBLHFCQUFxQixDQUFDM0gsV0FBdEIsQ0FBa0Msb0JBQW9CckQsT0FBdEQsRUFBK0Q7QUFDOURpTSxRQUFBQSxRQUFRLEVBQUUsS0FEb0Q7QUFFOURSLFFBQUFBLFdBQVcsRUFBRSxFQUZpRDtBQUc5REMsUUFBQUEsY0FBYyxFQUFFO0FBSDhDLE9BQS9ELEVBRm1ELENBT25EO0FBQ0E7QUFDQTs7QUFDQSxVQUFNRCxXQUFXLEdBQUcsRUFBcEI7QUFBQSxVQUNDQyxjQUFjLEdBQUcsRUFEbEI7QUFBQSxVQUVDdk8sU0FBUyxHQUFHMk8sNEJBQTRCLENBQUM5TCxPQUFELENBRnpDO0FBQUEsVUFHQzJLLHlCQUF5QixHQUFHSyxxQkFBcUIsQ0FBQ2xILE9BQXRCLEtBQWtDLGtCQUFsQyxHQUF1RDlELE9BQXZELEdBQWlFLFdBSDlGOztBQUtBLFVBQUksT0FBTzdDLFNBQVAsS0FBcUIsUUFBckIsSUFBaUNBLFNBQVMsS0FBSyxJQUEvQyxJQUF1REEsU0FBUyxLQUFLOUQsU0FBekUsRUFBb0Y7QUFDbkYsYUFBSyxJQUFJc0IsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR29SLGlCQUFpQixDQUFDalIsTUFBdEMsRUFBOENILENBQUMsRUFBL0MsRUFBbUQ7QUFDbEQsY0FBTXFQLGdCQUFnQixHQUFHK0IsaUJBQWlCLENBQUNwUixDQUFELENBQTFDOztBQUNBLGNBQUlxUCxnQkFBSixFQUFzQjtBQUFBO0FBQ3JCLGtCQUFNa0MsWUFBWSxHQUFHbEMsZ0JBQWdCLENBQUMvTyxTQUFqQixFQUFyQjtBQUNBLGtCQUFNa1IsbUJBQW1CLEdBQUdDLG9CQUFvQixDQUMvQ2pQLFNBRCtDLEVBRS9DLFNBRitDLEVBRy9DO0FBQ0Esd0JBQVVrUCxrQkFBVixFQUFtQztBQUNsQyx1QkFBT0MsUUFBUSxDQUFDSixZQUFZLENBQUNHLGtCQUFrQixDQUFDRSxJQUFwQixDQUFiLENBQWY7QUFDQSxlQU44QyxFQU8vQyxJQVArQyxDQUFoRDtBQVNBLGtCQUFNQyxPQUFPLEdBQUc5TyxjQUFjLENBQUN5TyxtQkFBRCxDQUE5Qjs7QUFDQSxrQkFBSUssT0FBTyxLQUFLLE1BQWhCLEVBQXdCO0FBQ3ZCeEIsZ0JBQUFBLHFCQUFxQixDQUFDckgsUUFBdEIsR0FBaUNOLFdBQWpDLENBQTZDc0gseUJBQTdDLEVBQXdFLElBQXhFO0FBQ0FjLGdCQUFBQSxXQUFXLENBQUNsTSxJQUFaLENBQWlCeUssZ0JBQWpCO0FBQ0EsZUFIRCxNQUdPO0FBQ04wQixnQkFBQUEsY0FBYyxDQUFDbk0sSUFBZixDQUFvQnlLLGdCQUFwQjtBQUNBO0FBakJvQjtBQWtCckI7QUFDRDs7QUFDRHVCLFFBQUFBLHlCQUF5QixDQUFDUCxxQkFBRCxFQUF3QmhMLE9BQXhCLEVBQWlDeUwsV0FBakMsRUFBOENDLGNBQTlDLENBQXpCO0FBQ0EsT0F4QkQsTUF3Qk87QUFDTixZQUFNVCxnQkFBZ0IsR0FBRyxFQUF6Qjs7QUFDQSxhQUFLLElBQUl0USxFQUFDLEdBQUcsQ0FBYixFQUFnQkEsRUFBQyxHQUFHb1IsaUJBQWlCLENBQUNqUixNQUF0QyxFQUE4Q0gsRUFBQyxFQUEvQyxFQUFtRDtBQUNsRCxjQUFNcVAsaUJBQWdCLEdBQUcrQixpQkFBaUIsQ0FBQ3BSLEVBQUQsQ0FBMUM7O0FBQ0EsY0FBSXFQLGlCQUFKLEVBQXNCO0FBQ3JCLGdCQUFNa0MsWUFBWSxHQUFHbEMsaUJBQWdCLENBQUMvTyxTQUFqQixFQUFyQjs7QUFDQSxnQkFBSWtDLFNBQVMsS0FBSyxJQUFkLElBQXNCLENBQUMsQ0FBQytPLFlBQVksQ0FBQyxNQUFNbE0sT0FBUCxDQUF4QyxFQUF5RDtBQUN4RDtBQUNBZ0wsY0FBQUEscUJBQXFCLENBQUNySCxRQUF0QixHQUFpQ04sV0FBakMsQ0FBNkNzSCx5QkFBN0MsRUFBd0UsSUFBeEU7QUFDQTtBQUNBLGFBSkQsTUFJTztBQUNOO0FBQ0FNLGNBQUFBLGdCQUFnQixDQUFDMUwsSUFBakIsQ0FBc0JtTCxnQkFBZ0IsQ0FBQ1YsaUJBQUQsRUFBbUJoSyxPQUFuQixFQUE0QjdDLFNBQTVCLEVBQXVDd04seUJBQXZDLENBQXRDO0FBQ0E7QUFDRDtBQUNELFNBZkssQ0FpQk47QUFDQTtBQUNBOzs7QUFDQXFCLFFBQUFBLFNBQVMsQ0FBQ3pNLElBQVYsQ0FBZXdMLHFDQUFxQyxDQUFDQyxxQkFBRCxFQUF3QkMsZ0JBQXhCLENBQXBEO0FBQ0E7QUFDRDs7QUFDRCxXQUFPVCxPQUFPLENBQUNVLEdBQVIsQ0FBWWMsU0FBWixDQUFQO0FBQ0E7O0FBRUQsV0FBU1MsaUJBQVQsQ0FBMkIzRSxlQUEzQixFQUFvREwsT0FBcEQsRUFBa0VpRix1QkFBbEUsRUFBZ0c7QUFDL0ZBLElBQUFBLHVCQUF1QixDQUFDclMsT0FBeEIsQ0FBZ0MsVUFBVXNTLEtBQVYsRUFBc0I7QUFDckQsVUFBSTdFLGVBQWUsS0FBSzZFLEtBQUssQ0FBQzdOLGNBQTlCLEVBQThDO0FBQzdDLFlBQU04TixTQUFTLEdBQUdELEtBQUssQ0FBQ0UsS0FBeEI7O0FBQ0EsYUFBSyxJQUFJbFMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR2lTLFNBQVMsQ0FBQzlSLE1BQTlCLEVBQXNDSCxDQUFDLEVBQXZDLEVBQTJDO0FBQzFDLGNBQU1tUyxjQUFjLEdBQUdGLFNBQVMsQ0FBQ2pTLENBQUQsQ0FBVCxDQUFhOEcsR0FBcEM7QUFDQSxjQUFNc0wsdUJBQXVCLEdBQUdILFNBQVMsQ0FBQ2pTLENBQUQsQ0FBVCxDQUFhNEcsS0FBN0M7O0FBQ0EsY0FBSWtHLE9BQU8sQ0FBQ3FGLGNBQUQsQ0FBWCxFQUE2QjtBQUM1QnJGLFlBQUFBLE9BQU8sQ0FBQ3NGLHVCQUFELENBQVAsR0FBbUN0RixPQUFPLENBQUNxRixjQUFELENBQTFDO0FBQ0E7QUFDRDtBQUNEO0FBQ0QsS0FYRDtBQVlBLFdBQU9yRixPQUFQO0FBQ0E7O0FBRUQsV0FBU3VGLG9CQUFULENBQThCQyxhQUE5QixFQUFxRDtBQUNwRDtBQUNBO0FBQ0EsUUFBTUMsVUFBVSxHQUFHQyxRQUFRLENBQUNDLG9CQUFULENBQThCSCxhQUE5QixDQUFuQixDQUhvRCxDQUlwRDs7QUFDQSxRQUFNSSxTQUFTLEdBQUdGLFFBQVEsQ0FBQ0csV0FBVCxDQUFxQkosVUFBckIsRUFBaUMsRUFBakMsRUFBcUMsRUFBckMsQ0FBbEI7QUFDQSxXQUFPSyxrQkFBa0IsQ0FBQ0MsbUJBQW5CLENBQXVDSCxTQUF2QyxDQUFQO0FBQ0E7O0FBQ0QsV0FBU0ksZ0JBQVQsQ0FBMEJDLFdBQTFCLEVBQTRDQyxjQUE1QyxFQUFpRTtBQUNoRTtBQUNBO0FBQ0EsUUFBTUMsVUFBVSxHQUFHRixXQUFXLENBQUNHLE1BQVosQ0FBbUIsVUFBVUMsUUFBVixFQUF5QjtBQUM5RCxhQUFPSCxjQUFjLENBQUMzVCxPQUFmLENBQXVCOFQsUUFBdkIsSUFBbUMsQ0FBQyxDQUEzQztBQUNBLEtBRmtCLENBQW5CO0FBR0EsV0FBT0YsVUFBVSxDQUFDRyxRQUFYLE1BQXlCMVUsU0FBaEM7QUFDQTs7QUFDRCxXQUFTMlUsNEJBQVQsQ0FBc0NDLFlBQXRDLEVBQXlEO0FBQ3hELFFBQU1DLDJCQUEyQixHQUFHdFAsV0FBVyxDQUFDdVAsc0JBQWhEO0FBRUFGLElBQUFBLFlBQVksQ0FBQ0csSUFBYixDQUFrQixVQUFVQyxDQUFWLEVBQWtCQyxDQUFsQixFQUEwQjtBQUMzQyxhQUFPSiwyQkFBMkIsQ0FBQ2xVLE9BQTVCLENBQW9DcVUsQ0FBcEMsSUFBeUNILDJCQUEyQixDQUFDbFUsT0FBNUIsQ0FBb0NzVSxDQUFwQyxDQUFoRDtBQUNBLEtBRkQ7QUFJQSxXQUFPTCxZQUFZLENBQUMsQ0FBRCxDQUFuQjtBQUNBO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxXQUFTTSx1QkFBVCxDQUNDcFIsU0FERCxFQUVDaEMsY0FGRCxFQUdDYixRQUhELEVBSUNrVSxLQUpELEVBS0NDLHFCQUxELEVBTUNDLFNBTkQsRUFPRTtBQUNELFFBQU03UixtQkFBbUIsR0FBRytCLFdBQVcsQ0FBQytQLDJCQUFaLENBQXdDeFQsY0FBeEMsRUFBd0RiLFFBQXhELENBQTVCO0FBQ0EsUUFBTXNVLFVBQVUsR0FBRyxDQUFDLElBQUQsQ0FBbkI7QUFDQSxRQUFNQyxlQUFlLEdBQUcsQ0FBQyxJQUFELEVBQU8sSUFBUCxFQUFhLElBQWIsRUFBbUIsSUFBbkIsRUFBeUIsSUFBekIsRUFBK0IsSUFBL0IsRUFBcUMsT0FBckMsRUFBOEMsT0FBOUMsRUFBdUQsT0FBdkQsRUFBZ0UsT0FBaEUsQ0FBeEI7QUFDQSxRQUFNQyxzQkFBc0IsR0FBRyxDQUFDLElBQUQsRUFBTyxJQUFQLENBQS9CO0FBQ0EsUUFBTUMsbUJBQW1CLEdBQUcsQ0FDM0IsT0FEMkIsRUFFM0IsVUFGMkIsRUFHM0IsV0FIMkIsRUFJM0IsTUFKMkIsRUFLM0IsY0FMMkIsRUFNM0IsYUFOMkIsRUFPM0IsZUFQMkIsRUFRM0IsY0FSMkIsRUFTM0IsaUJBVDJCLEVBVTNCLGdCQVYyQixFQVczQixjQVgyQixFQVkzQixhQVoyQixDQUE1QjtBQWNBLFFBQU1DLGlCQUFpQixHQUFHLENBQUMsSUFBRCxFQUFPLElBQVAsRUFBYSxJQUFiLEVBQW1CLElBQW5CLENBQTFCO0FBQ0EsUUFBTUMsY0FBYyxHQUFHLENBQUMsSUFBRCxFQUFPLElBQVAsRUFBYSxJQUFiLEVBQW1CLElBQW5CLEVBQXlCLElBQXpCLEVBQStCLElBQS9CLEVBQXFDLElBQXJDLEVBQTJDLE9BQTNDLEVBQW9ELE9BQXBELEVBQTZELE9BQTdELEVBQXNFLE9BQXRFLEVBQStFLE9BQS9FLENBQXZCO0FBQ0EsUUFBTUMsb0JBQW9CLEdBQUcsQ0FBQyxVQUFELEVBQWEsYUFBYixFQUE0QixZQUE1QixFQUEwQyxlQUExQyxFQUEyRCxVQUEzRCxFQUF1RSxhQUF2RSxDQUE3QjtBQUNBLFFBQU1DLG1CQUFtQixHQUFHQyxxQkFBcUIsQ0FBQ0Msc0JBQXRCLEVBQTVCO0FBQ0EsUUFBTUMsa0JBQWtCLEdBQUdiLHFCQUFxQixLQUFLLE1BQTFCLElBQW9DQSxxQkFBcUIsS0FBSyxJQUF6RjtBQUNBLFFBQUljLGdCQUF1QixHQUFHLEVBQTlCO0FBQ0EsUUFBTUMsU0FBUyxHQUFHLE9BQU9kLFNBQVAsS0FBcUIsUUFBckIsR0FBZ0NlLElBQUksQ0FBQ0MsS0FBTCxDQUFXaEIsU0FBWCxFQUFzQmlCLFVBQXRELEdBQW1FakIsU0FBckY7O0FBRUEsUUFBSXBVLFFBQVEsQ0FBQ1csU0FBVCxDQUFtQkUsY0FBYyxHQUFHLGdEQUFwQyxNQUEwRixJQUE5RixFQUFvRztBQUNuRyxhQUFPeVQsVUFBVSxDQUFDYixRQUFYLEVBQVA7QUFDQTs7QUFFRCxRQUFJeUIsU0FBUyxJQUFJQSxTQUFTLENBQUNJLHFCQUF2QixJQUFnREosU0FBUyxDQUFDSSxxQkFBVixDQUFnQzlVLE1BQWhDLEdBQXlDLENBQTdGLEVBQWdHO0FBQy9GeVUsTUFBQUEsZ0JBQWdCLEdBQUdILHFCQUFxQixDQUFDUyxtQkFBdEIsQ0FBMENMLFNBQVMsQ0FBQ0kscUJBQXBELENBQW5CO0FBQ0EsS0FGRCxNQUVPO0FBQ05MLE1BQUFBLGdCQUFnQixHQUFHSCxxQkFBcUIsQ0FBQ1UseUJBQXRCLEVBQW5CO0FBQ0E7O0FBQ0QsUUFBTUMsdUJBQXVCLEdBQUdSLGdCQUFnQixDQUFDMUIsTUFBakIsQ0FBd0IsVUFBVW1DLFNBQVYsRUFBcUI7QUFDNUUsYUFBT0EsU0FBUyxLQUFLLE1BQWQsSUFBd0JBLFNBQVMsS0FBSyxXQUF0QyxJQUFxREEsU0FBUyxLQUFLLE1BQW5FLElBQTZFQSxTQUFTLEtBQUssSUFBbEc7QUFDQSxLQUYrQixDQUFoQyxDQXBDQyxDQXVDRDs7QUFDQSxRQUFJQyxpQkFBaUIsR0FBR2pELG9CQUFvQixDQUFDd0IsS0FBRCxDQUE1Qzs7QUFDQSxRQUFJMEIsYUFBSixDQXpDQyxDQTBDRDs7QUFDQSxRQUFJclQsbUJBQW1CLElBQUlBLG1CQUFtQixDQUFDc1Qsd0JBQTNDLElBQXVFdFQsbUJBQW1CLENBQUNzVCx3QkFBcEIsQ0FBNkNoVCxTQUE3QyxDQUEzRSxFQUFvSTtBQUNuSTtBQUNBLFVBQUltUyxrQkFBSixFQUF3QjtBQUN2QlcsUUFBQUEsaUJBQWlCLEdBQUdkLG1CQUFtQixDQUFDaE0sTUFBcEIsQ0FBMkI4TSxpQkFBM0IsQ0FBcEI7QUFDQTs7QUFDRCxVQUFNRyxrQkFBa0IsR0FBR3hSLFdBQVcsQ0FBQ29QLDRCQUFaLENBQXlDblIsbUJBQW1CLENBQUNzVCx3QkFBcEIsQ0FBNkNoVCxTQUE3QyxDQUF6QyxDQUEzQixDQUxtSSxDQU9uSTtBQUNBO0FBRUE7O0FBQ0EsY0FBUWlULGtCQUFSO0FBQ0MsYUFBSyxhQUFMO0FBQ0MsY0FBTUMsZUFBZSxHQUFHN0IsS0FBSyxLQUFLLFVBQVYsSUFBd0JjLGtCQUF4QixHQUE2Q1AsbUJBQTdDLEdBQW1FSCxVQUEzRjtBQUNBc0IsVUFBQUEsYUFBYSxHQUFHekMsZ0JBQWdCLENBQUN3QyxpQkFBRCxFQUFvQkksZUFBcEIsQ0FBaEM7QUFDQTs7QUFDRCxhQUFLLFlBQUw7QUFDQ0gsVUFBQUEsYUFBYSxHQUFHekMsZ0JBQWdCLENBQUN3QyxpQkFBRCxFQUFvQnJCLFVBQXBCLENBQWhDO0FBQ0E7O0FBQ0QsYUFBSyxhQUFMO0FBQ0MsY0FBTWpCLGNBQWMsR0FBRzJCLGtCQUFrQixHQUN0Q2QsS0FBSyxLQUFLLFVBQVYsR0FDQ2UsZ0JBREQsR0FFQ2YsS0FBSyxLQUFLLG9CQUFWLEdBQ0F1Qix1QkFBdUIsQ0FBQzVNLE1BQXhCLENBQStCNkwsaUJBQS9CLENBREEsR0FFQUgsZUFMcUMsR0FNdENMLEtBQUssS0FBSyxvQkFBVixHQUNBTSxzQkFEQSxHQUVBRCxlQVJIOztBQVNBLGNBQU15QixVQUFVLEdBQUc3QyxnQkFBZ0IsQ0FBQ3dDLGlCQUFELEVBQW9CdEMsY0FBcEIsQ0FBbkM7O0FBQ0F1QyxVQUFBQSxhQUFhLEdBQUdJLFVBQVUsR0FBR0EsVUFBSCxHQUFnQixFQUExQztBQUNBOztBQUNELGFBQUssWUFBTDtBQUNDSixVQUFBQSxhQUFhLEdBQUd6QyxnQkFBZ0IsQ0FBQ3dDLGlCQUFELEVBQW9CaEIsY0FBcEIsQ0FBaEM7QUFDQTs7QUFDRCxhQUFLLGtCQUFMO0FBQ0NpQixVQUFBQSxhQUFhLEdBQUd6QyxnQkFBZ0IsQ0FBQ3dDLGlCQUFELEVBQW9CZixvQkFBcEIsQ0FBaEM7QUFDQTs7QUFDRCxhQUFLLDhCQUFMO0FBQ0NnQixVQUFBQSxhQUFhLEdBQUd6QyxnQkFBZ0IsQ0FBQ3dDLGlCQUFELEVBQW9CZixvQkFBb0IsQ0FBQy9MLE1BQXJCLENBQTRCOEwsY0FBNUIsQ0FBcEIsQ0FBaEM7QUFDQTs7QUFFRDtBQUNDO0FBaENGLE9BWG1JLENBNkNuSTtBQUNBOztBQUNBOztBQUNELFdBQU9pQixhQUFQO0FBQ0E7O0FBRUQsV0FBU0ssMkJBQVQsQ0FBcUNDLFlBQXJDLEVBQW1FO0FBQ2xFO0FBQ0E7QUFDQSxRQUFNUCxpQkFBaUIsR0FBR2pELG9CQUFvQixDQUFDd0QsWUFBRCxDQUE5Qzs7QUFDQSxRQUFNdkIsY0FBYyxHQUFHLENBQUMsSUFBRCxFQUFPLElBQVAsRUFBYSxJQUFiLEVBQW1CLElBQW5CLEVBQXlCLElBQXpCLEVBQStCLElBQS9CLEVBQXFDLElBQXJDLEVBQTJDLE9BQTNDLEVBQW9ELE9BQXBELEVBQTZELE9BQTdELEVBQXNFLE9BQXRFLEVBQStFLE9BQS9FLENBQXZCO0FBQ0EsV0FBT3hCLGdCQUFnQixDQUFDd0MsaUJBQUQsRUFBb0JoQixjQUFwQixDQUF2QjtBQUNBOztBQUVELFdBQVN3QixnQkFBVCxDQUEwQi9WLFVBQTFCLEVBQTJDa0IsWUFBM0MsRUFBOEQ7QUFDN0QsUUFBTThVLHFCQUFxQixHQUFHOVUsWUFBWSxDQUFDK1UsU0FBYixDQUF1QixDQUF2QixFQUEwQi9VLFlBQVksQ0FBQ2dWLFdBQWIsQ0FBeUIsR0FBekIsQ0FBMUIsQ0FBOUI7QUFDQSxRQUFNQyxjQUFjLEdBQUduVyxVQUFVLENBQUNPLFNBQVgsQ0FBcUJ5VixxQkFBcUIsR0FBRyxnREFBN0MsQ0FBdkI7QUFDQSxRQUFNSSxjQUFtQixHQUFHLEVBQTVCOztBQUNBLFFBQUlELGNBQWMsSUFBSUgscUJBQXFCLEtBQUs5VSxZQUFoRCxFQUE4RDtBQUM3RGtWLE1BQUFBLGNBQWMsQ0FBQ0MsV0FBZixHQUE2QkwscUJBQTdCO0FBQ0FJLE1BQUFBLGNBQWMsQ0FBQ0UsbUJBQWYsR0FBcUNwUyxXQUFXLENBQUNxUyx3QkFBWixDQUFxQ3ZXLFVBQXJDLEVBQWlEZ1cscUJBQWpELENBQXJDO0FBQ0E7O0FBQ0QsV0FBT0ksY0FBUDtBQUNBOztBQUNELFdBQVNJLDJCQUFULENBQXFDQyxpQkFBckMsRUFBNkRDLGVBQTdELEVBQW1GQyxxQkFBbkYsRUFBK0dDLGFBQS9HLEVBQW1JO0FBQ2xJLFFBQU1DLFVBQVUsR0FBR0MsYUFBYSxDQUFDRixhQUFELEVBQWdCSCxpQkFBaEIsQ0FBaEM7O0FBQ0EsUUFBSUksVUFBSixFQUFnQjtBQUNmLFVBQUksQ0FBQ0gsZUFBRCxJQUFvQkEsZUFBZSxDQUFDcFgsT0FBaEIsQ0FBd0J1WCxVQUFVLENBQUNFLFFBQW5DLElBQStDLENBQUMsQ0FBeEUsRUFBMkU7QUFDMUVKLFFBQUFBLHFCQUFxQixDQUFDOVIsSUFBdEIsQ0FBMkJnUyxVQUEzQjtBQUNBO0FBQ0Q7O0FBQ0QsV0FBT0YscUJBQVA7QUFDQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFdBQVNLLDRCQUFULENBQ0M5VixZQURELEVBRUMrVixpQkFGRCxFQUdDQyxpQkFIRCxFQUlDQyxXQUpELEVBS0NDLGNBTEQsRUFNQ0MsY0FORCxFQU9DQyxnQkFQRCxFQVFDdFgsVUFSRCxFQVNDdVgsV0FURCxFQVVFO0FBQ0QsUUFBSUMsV0FBa0IsR0FBRyxFQUF6QjtBQUFBLFFBQ0NDLGNBREQ7QUFBQSxRQUVDZixlQUZEOztBQUlBLFFBQUlhLFdBQVcsSUFBSXJULFdBQVcsQ0FBQzFCLG9CQUFaLENBQWlDeEMsVUFBakMsRUFBNkNrQixZQUE3QyxFQUEyRG1XLGNBQTNELEVBQTJFLElBQTNFLENBQW5CLEVBQXFHO0FBQ3BHSSxNQUFBQSxjQUFjLEdBQUdSLGlCQUFpQixDQUFDUyxlQUFsQixDQUFrQ1IsaUJBQWxDLENBQWpCO0FBQ0FSLE1BQUFBLGVBQWUsR0FBR2EsV0FBVyxHQUFHLENBQUMsSUFBRCxDQUFILEdBQVlyVCxXQUFXLENBQUMyUCx1QkFBWixDQUFvQ3dELGNBQXBDLEVBQW9EblcsWUFBcEQsRUFBa0VsQixVQUFsRSxDQUF6QztBQUNBLFVBQU15VyxpQkFBaUIsR0FBR2EsZ0JBQWdCLENBQUNELGNBQUQsQ0FBMUMsQ0FIb0csQ0FJcEc7O0FBQ0FHLE1BQUFBLFdBQVcsR0FBR0QsV0FBVyxHQUN0QmYsMkJBQTJCLENBQUNDLGlCQUFELEVBQW9CQyxlQUFwQixFQUFxQ2MsV0FBckMsRUFBa0RDLGNBQWMsQ0FBQyxDQUFELENBQWhFLENBREwsR0FFdEJBLGNBQWMsQ0FBQzNZLE1BQWYsQ0FBc0IwWCwyQkFBMkIsQ0FBQ2pQLElBQTVCLENBQWlDLElBQWpDLEVBQXVDa1AsaUJBQXZDLEVBQTBEQyxlQUExRCxDQUF0QixFQUFrR2MsV0FBbEcsQ0FGSDs7QUFHQSxVQUFJQSxXQUFXLENBQUNwWCxNQUFoQixFQUF3QjtBQUN2QixZQUFJZ1gsY0FBSixFQUFvQjtBQUNuQkQsVUFBQUEsV0FBVyxDQUFDQyxjQUFjLEdBQUdDLGNBQWxCLENBQVgsR0FBK0NGLFdBQVcsQ0FBQ3BNLGNBQVosQ0FBMkJxTSxjQUFjLEdBQUdDLGNBQTVDLElBQzVDRixXQUFXLENBQUNDLGNBQWMsR0FBR0MsY0FBbEIsQ0FBWCxDQUE2QzVPLE1BQTdDLENBQW9EK08sV0FBcEQsQ0FENEMsR0FFNUNBLFdBRkg7QUFHQSxTQUpELE1BSU87QUFDTkwsVUFBQUEsV0FBVyxDQUFDRSxjQUFELENBQVgsR0FBOEJGLFdBQVcsQ0FBQ3BNLGNBQVosQ0FBMkJzTSxjQUEzQixJQUMzQkYsV0FBVyxDQUFDRSxjQUFELENBQVgsQ0FBNEI1TyxNQUE1QixDQUFtQytPLFdBQW5DLENBRDJCLEdBRTNCQSxXQUZIO0FBR0E7QUFDRDtBQUNEO0FBQ0Q7O0FBRUQsV0FBU0csK0JBQVQsQ0FBeUNWLGlCQUF6QyxFQUFpRUUsV0FBakUsRUFBc0ZuWCxVQUF0RixFQUFrSGtCLFlBQWxILEVBQXdJO0FBQ3ZJLFFBQU0wVywyQkFBMkIsR0FBR1gsaUJBQWlCLENBQUNZLDZCQUFsQixFQUFwQztBQUFBLFFBQ0NQLGdCQUFnQixHQUFHcFQsV0FBVyxDQUFDcVMsd0JBQVosQ0FBcUN2VyxVQUFyQyxFQUFpRGtCLFlBQWpELENBRHBCO0FBQUEsUUFFQzRXLGtCQUFrQixHQUFHcFQsTUFBTSxDQUFDQyxJQUFQLENBQVkyUyxnQkFBWixDQUZ0QjtBQUFBLFFBR0NsQixjQUFjLEdBQUdsUyxXQUFXLENBQUM2UixnQkFBWixDQUE2Qi9WLFVBQTdCLEVBQXlDa0IsWUFBekMsQ0FIbEI7QUFBQSxRQUlDOFUscUJBQXFCLEdBQUdJLGNBQWMsQ0FBQ0MsV0FKeEM7QUFBQSxRQUtDMEIseUJBQXlCLEdBQUczQixjQUFjLENBQUNFLG1CQUw1QztBQUFBLFFBTUMwQixjQUFjLEdBQUcsQ0FBQyxDQUFDNUIsY0FBYyxDQUFDQyxXQUFqQixJQUFnQzBCLHlCQUFoQyxJQUE2RHJULE1BQU0sQ0FBQ0MsSUFBUCxDQUFZb1QseUJBQVosRUFBdUMzWCxNQUF2QyxHQUFnRCxDQU4vSDs7QUFRQSxRQUFJNFgsY0FBSixFQUFvQjtBQUNuQixVQUFNQyxtQkFBbUIsR0FBR3ZULE1BQU0sQ0FBQ0MsSUFBUCxDQUFZb1QseUJBQVosQ0FBNUI7QUFDQUUsTUFBQUEsbUJBQW1CLENBQUN0WSxPQUFwQixDQUE0QixVQUFVdVksa0JBQVYsRUFBc0M7QUFDakUsWUFBSUMsaUJBQUo7O0FBQ0EsWUFBSVAsMkJBQTJCLENBQUNRLFFBQTVCLENBQXFDLGdCQUFnQkYsa0JBQXJELENBQUosRUFBOEU7QUFDN0VDLFVBQUFBLGlCQUFpQixHQUFHLGdCQUFnQkQsa0JBQXBDO0FBQ0EsU0FGRCxNQUVPLElBQUlOLDJCQUEyQixDQUFDUSxRQUE1QixDQUFxQ0Ysa0JBQXJDLENBQUosRUFBOEQ7QUFDcEVDLFVBQUFBLGlCQUFpQixHQUFHRCxrQkFBcEI7QUFDQSxTQUZNLE1BRUEsSUFDTkEsa0JBQWtCLENBQUNHLFVBQW5CLENBQThCLElBQTlCLEtBQ0FULDJCQUEyQixDQUFDUSxRQUE1QixDQUFxQyxnQkFBZ0JGLGtCQUFrQixDQUFDekksS0FBbkIsQ0FBeUIsQ0FBekIsRUFBNEJ5SSxrQkFBa0IsQ0FBQzlYLE1BQS9DLENBQXJELENBRk0sRUFHTDtBQUNEK1gsVUFBQUEsaUJBQWlCLEdBQUcsZ0JBQWdCRCxrQkFBa0IsQ0FBQ3pJLEtBQW5CLENBQXlCLENBQXpCLEVBQTRCeUksa0JBQWtCLENBQUM5WCxNQUEvQyxDQUFwQztBQUNBLFNBTE0sTUFLQSxJQUNOOFgsa0JBQWtCLENBQUNHLFVBQW5CLENBQThCLElBQTlCLEtBQ0FULDJCQUEyQixDQUFDUSxRQUE1QixDQUFxQ0Ysa0JBQWtCLENBQUN6SSxLQUFuQixDQUF5QixDQUF6QixFQUE0QnlJLGtCQUFrQixDQUFDOVgsTUFBL0MsQ0FBckMsQ0FGTSxFQUdMO0FBQ0QrWCxVQUFBQSxpQkFBaUIsR0FBR0Qsa0JBQWtCLENBQUN6SSxLQUFuQixDQUF5QixDQUF6QixFQUE0QnlJLGtCQUFrQixDQUFDOVgsTUFBL0MsQ0FBcEI7QUFDQSxTQUxNLE1BS0EsSUFBSXdYLDJCQUEyQixDQUFDUSxRQUE1QixDQUFxQyxrQkFBa0JGLGtCQUF2RCxDQUFKLEVBQWdGO0FBQ3RGQyxVQUFBQSxpQkFBaUIsR0FBRyxrQkFBa0JELGtCQUF0QztBQUNBLFNBRk0sTUFFQSxJQUFJTiwyQkFBMkIsQ0FBQ1EsUUFBNUIsQ0FBcUMsT0FBT0Ysa0JBQTVDLENBQUosRUFBcUU7QUFDM0VDLFVBQUFBLGlCQUFpQixHQUFHLE9BQU9ELGtCQUEzQjtBQUNBOztBQUVELFlBQUlDLGlCQUFKLEVBQXVCO0FBQ3RCbkIsVUFBQUEsNEJBQTRCLENBQzNCaEIscUJBRDJCLEVBRTNCaUIsaUJBRjJCLEVBRzNCa0IsaUJBSDJCLEVBSTNCaEIsV0FKMkIsRUFLM0J4WSxTQUwyQixFQU0zQnVaLGtCQU4yQixFQU8zQkgseUJBUDJCLEVBUTNCL1gsVUFSMkIsRUFTM0IsSUFUMkIsQ0FBNUI7QUFXQTtBQUNELE9BbkNEO0FBb0NBOztBQUNEOFgsSUFBQUEsa0JBQWtCLENBQUNuWSxPQUFuQixDQUEyQixVQUFVMlksaUJBQVYsRUFBcUM7QUFDL0QsVUFBSUgsaUJBQUo7O0FBQ0EsVUFBSVAsMkJBQTJCLENBQUNRLFFBQTVCLENBQXFDRSxpQkFBckMsQ0FBSixFQUE2RDtBQUM1REgsUUFBQUEsaUJBQWlCLEdBQUdHLGlCQUFwQjtBQUNBLE9BRkQsTUFFTyxJQUNOQSxpQkFBaUIsQ0FBQ0QsVUFBbEIsQ0FBNkIsSUFBN0IsS0FDQVQsMkJBQTJCLENBQUNRLFFBQTVCLENBQXFDRSxpQkFBaUIsQ0FBQzdJLEtBQWxCLENBQXdCLENBQXhCLEVBQTJCNkksaUJBQWlCLENBQUNsWSxNQUE3QyxDQUFyQyxDQUZNLEVBR0w7QUFDRCtYLFFBQUFBLGlCQUFpQixHQUFHRyxpQkFBaUIsQ0FBQzdJLEtBQWxCLENBQXdCLENBQXhCLEVBQTJCNkksaUJBQWlCLENBQUNsWSxNQUE3QyxDQUFwQjtBQUNBLE9BTE0sTUFLQSxJQUFJd1gsMkJBQTJCLENBQUNRLFFBQTVCLENBQXFDLE9BQU9FLGlCQUE1QyxDQUFKLEVBQW9FO0FBQzFFSCxRQUFBQSxpQkFBaUIsR0FBRyxPQUFPRyxpQkFBM0I7QUFDQTs7QUFDRCxVQUFJSCxpQkFBSixFQUF1QjtBQUN0Qm5CLFFBQUFBLDRCQUE0QixDQUMzQjlWLFlBRDJCLEVBRTNCK1YsaUJBRjJCLEVBRzNCa0IsaUJBSDJCLEVBSTNCaEIsV0FKMkIsRUFLM0J4WSxTQUwyQixFQU0zQjJaLGlCQU4yQixFQU8zQmhCLGdCQVAyQixFQVEzQnRYLFVBUjJCLEVBUzNCLEtBVDJCLENBQTVCO0FBV0E7QUFDRCxLQXpCRDtBQTJCQTRYLElBQUFBLDJCQUEyQixDQUFDalksT0FBNUIsQ0FBb0MsVUFBVTRZLGFBQVYsRUFBOEI7QUFDakUsVUFBSUEsYUFBYSxDQUFDalosT0FBZCxDQUFzQixHQUF0QixJQUE2QixDQUE3QixJQUFrQyxDQUFDaVosYUFBYSxDQUFDSCxRQUFkLENBQXVCLFlBQXZCLENBQXZDLEVBQTZFO0FBQzVFLFlBQU1JLGdCQUFnQixHQUFHLENBQUMsTUFBTUQsYUFBYSxDQUFDRSxVQUFkLENBQXlCLEdBQXpCLEVBQThCLEdBQTlCLENBQVAsRUFBMkNKLFVBQTNDLENBQXNEblgsWUFBdEQsSUFDdEIsTUFBTXFYLGFBQWEsQ0FBQ0UsVUFBZCxDQUF5QixHQUF6QixFQUE4QixHQUE5QixDQURnQixHQUV0QnZYLFlBQVksR0FBRyxHQUFmLEdBQXFCcVgsYUFBYSxDQUFDRSxVQUFkLENBQXlCLEdBQXpCLEVBQThCLEdBQTlCLENBRnhCLENBRDRFLENBR2hCOztBQUM1RCxZQUFJelksVUFBVSxDQUFDTyxTQUFYLENBQXFCaVksZ0JBQWdCLENBQUM1WixPQUFqQixDQUF5QixJQUF6QixFQUErQixFQUEvQixDQUFyQixDQUFKLEVBQThEO0FBQzdEOFosVUFBQUEsaUNBQWlDLENBQ2hDRixnQkFEZ0MsRUFFaEN0WCxZQUZnQyxFQUdoQytWLGlCQUhnQyxFQUloQ3NCLGFBSmdDLEVBS2hDdlksVUFMZ0MsRUFNaENtWCxXQU5nQyxDQUFqQztBQVFBO0FBQ0Q7QUFDRCxLQWhCRDtBQWlCQSxXQUFPQSxXQUFQO0FBQ0E7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxXQUFTdUIsaUNBQVQsQ0FDQ0YsZ0JBREQsRUFFQ0csa0JBRkQsRUFHQzFCLGlCQUhELEVBSUNzQixhQUpELEVBS0N2WSxVQUxELEVBTUNtWCxXQU5ELEVBT0U7QUFDRCxRQUFJeUIsZUFBZSxHQUFHTCxhQUFhLENBQUMxWixLQUFkLENBQW9CLEdBQXBCLENBQXRCLENBREMsQ0FFRDs7QUFDQSxRQUFJLENBQUMsTUFBTTBaLGFBQWEsQ0FBQ0UsVUFBZCxDQUF5QixHQUF6QixFQUE4QixHQUE5QixDQUFQLEVBQTJDSixVQUEzQyxDQUFzRE0sa0JBQXRELENBQUosRUFBK0U7QUFDOUUsVUFBTTVZLFNBQVMsR0FBRyxDQUFFLE1BQU13WSxhQUFSLEVBQStCRSxVQUEvQixDQUEwQyxHQUExQyxFQUErQyxHQUEvQyxDQUFsQjtBQUFBLFVBQ0NJLFFBQVEsR0FBRzlZLFNBQVMsQ0FBQ25CLE9BQVYsQ0FBa0IrWixrQkFBa0IsR0FBRyxHQUF2QyxFQUE0QyxFQUE1QyxDQURaO0FBRUFDLE1BQUFBLGVBQWUsR0FBR0MsUUFBUSxDQUFDaGEsS0FBVCxDQUFlLEdBQWYsQ0FBbEI7QUFDQTs7QUFDRCxRQUFJdVksY0FBYyxHQUFHLEVBQXJCO0FBQ0EsUUFBTTBCLGFBQWEsR0FBR0YsZUFBZSxDQUFDQSxlQUFlLENBQUN4WSxNQUFoQixHQUF5QixDQUExQixDQUFyQyxDQVRDLENBU2tFOztBQUNuRSxTQUFLLElBQUlILENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUcyWSxlQUFlLENBQUN4WSxNQUFoQixHQUF5QixDQUE3QyxFQUFnREgsQ0FBQyxFQUFqRCxFQUFxRDtBQUNwRCxVQUFJRCxVQUFVLENBQUNPLFNBQVgsQ0FBcUJvWSxrQkFBa0IsR0FBRyxHQUFyQixHQUEyQkMsZUFBZSxDQUFDM1ksQ0FBRCxDQUFmLENBQW1CckIsT0FBbkIsQ0FBMkIsSUFBM0IsRUFBaUMsRUFBakMsQ0FBaEQsRUFBc0ZtYSxhQUExRixFQUF5RztBQUN4RzNCLFFBQUFBLGNBQWMsR0FBR0EsY0FBYyxHQUFHd0IsZUFBZSxDQUFDM1ksQ0FBRCxDQUFoQyxHQUFzQyxJQUF2RCxDQUR3RyxDQUMzQztBQUM3RCxPQUZELE1BRU87QUFDTm1YLFFBQUFBLGNBQWMsR0FBR0EsY0FBYyxHQUFHd0IsZUFBZSxDQUFDM1ksQ0FBRCxDQUFoQyxHQUFzQyxHQUF2RCxDQURNLENBQ3NEO0FBQzVEOztBQUNEMFksTUFBQUEsa0JBQWtCLEdBQUdBLGtCQUFrQixHQUFHLEdBQXJCLEdBQTJCQyxlQUFlLENBQUMzWSxDQUFELENBQS9EO0FBQ0E7O0FBQ0QsUUFBTStZLGdCQUFnQixHQUFHUixnQkFBZ0IsQ0FBQy9JLEtBQWpCLENBQXVCLENBQXZCLEVBQTBCK0ksZ0JBQWdCLENBQUN0QyxXQUFqQixDQUE2QixHQUE3QixDQUExQixDQUF6QjtBQUFBLFFBQ0NvQixnQkFBZ0IsR0FBR3BULFdBQVcsQ0FBQ3FTLHdCQUFaLENBQXFDdlcsVUFBckMsRUFBaURnWixnQkFBakQsQ0FEcEI7QUFBQSxRQUVDcEIsMkJBQTJCLEdBQUdYLGlCQUFpQixDQUFDWSw2QkFBbEIsRUFGL0I7QUFHQSxRQUFJTSxpQkFBaUIsR0FBR1csYUFBeEI7O0FBQ0EsUUFBSXhCLGdCQUFnQixDQUFDd0IsYUFBRCxDQUFwQixFQUFxQztBQUNwQ1gsTUFBQUEsaUJBQWlCLEdBQUdXLGFBQXBCO0FBQ0EsS0FGRCxNQUVPLElBQUlBLGFBQWEsQ0FBQ1QsVUFBZCxDQUF5QixJQUF6QixLQUFrQ2YsZ0JBQWdCLENBQUN3QixhQUFhLENBQUNsYSxPQUFkLENBQXNCLElBQXRCLEVBQTRCLEVBQTVCLENBQUQsQ0FBdEQsRUFBeUY7QUFDL0Z1WixNQUFBQSxpQkFBaUIsR0FBR1csYUFBYSxDQUFDbGEsT0FBZCxDQUFzQixJQUF0QixFQUE0QixFQUE1QixDQUFwQjtBQUNBLEtBRk0sTUFFQSxJQUFJMFksZ0JBQWdCLENBQUMsT0FBT3dCLGFBQVIsQ0FBaEIsSUFBMENsQiwyQkFBMkIsQ0FBQ1EsUUFBNUIsQ0FBcUMsT0FBT1UsYUFBNUMsQ0FBOUMsRUFBMEc7QUFDaEhYLE1BQUFBLGlCQUFpQixHQUFHLE9BQU9XLGFBQTNCO0FBQ0E7O0FBQ0QsUUFBSUEsYUFBYSxDQUFDVCxVQUFkLENBQXlCLElBQXpCLEtBQWtDbEIsV0FBVyxDQUFDQyxjQUFjLEdBQUdlLGlCQUFsQixDQUFqRCxFQUF1RjtBQUN0RjtBQUNBO0FBQ0EsS0FIRCxNQUdPLElBQUksQ0FBQ1csYUFBYSxDQUFDVCxVQUFkLENBQXlCLElBQXpCLENBQUQsSUFBbUNsQixXQUFXLENBQUNDLGNBQWMsR0FBR2UsaUJBQWxCLENBQWxELEVBQXdGO0FBQzlGLGFBQU9oQixXQUFXLENBQUNDLGNBQWMsR0FBR2UsaUJBQWxCLENBQWxCO0FBQ0FuQixNQUFBQSw0QkFBNEIsQ0FDM0JnQyxnQkFEMkIsRUFFM0IvQixpQkFGMkIsRUFHM0JzQixhQUgyQixFQUkzQnBCLFdBSjJCLEVBSzNCQyxjQUwyQixFQU0zQmUsaUJBTjJCLEVBTzNCYixnQkFQMkIsRUFRM0J0WCxVQVIyQixFQVMzQixLQVQyQixDQUE1QjtBQVdBLEtBYk0sTUFhQTtBQUNOZ1gsTUFBQUEsNEJBQTRCLENBQzNCZ0MsZ0JBRDJCLEVBRTNCL0IsaUJBRjJCLEVBRzNCc0IsYUFIMkIsRUFJM0JwQixXQUoyQixFQUszQkMsY0FMMkIsRUFNM0JlLGlCQU4yQixFQU8zQmIsZ0JBUDJCLEVBUTNCdFgsVUFSMkIsRUFTM0IsS0FUMkIsQ0FBNUI7QUFXQTtBQUNEOztBQUNELFdBQVNpWixnQ0FBVCxDQUEwQ2hDLGlCQUExQyxFQUFrRWlDLFlBQWxFLEVBQXVGcE0sS0FBdkYsRUFBbUc7QUFDbEcsUUFBTXFNLGFBQWEsR0FBR2pWLFdBQVcsQ0FBQ1gsZUFBWixDQUE0QnVKLEtBQTVCLENBQXRCO0FBQ0EsUUFBTXNNLGtCQUFrQixHQUFHRCxhQUFhLENBQUNFLG9CQUFkLEVBQTNCO0FBQ0EsV0FBT0Qsa0JBQWtCLENBQUNFLGdDQUFuQixDQUFvREosWUFBcEQsRUFBa0VqQyxpQkFBaUIsQ0FBQ3NDLFlBQWxCLEVBQWxFLENBQVA7QUFDQTs7QUFDRCxXQUFTQyx5Q0FBVCxDQUFtRHZDLGlCQUFuRCxFQUEyRXdDLFFBQTNFLEVBQTBGQyxXQUExRixFQUE0R0MsV0FBNUcsRUFBK0g7QUFDOUgsUUFBSUMsT0FBSjtBQUFBLFFBQ0NDLElBQUksR0FBRyxFQURSO0FBQUEsUUFFQ0MsS0FBSyxHQUFHLElBRlQ7O0FBR0EsUUFBTUMsa0JBQWtCLEdBQUcsVUFBVXpFLFNBQVYsRUFBMEIwRSxTQUExQixFQUEwQ0MsVUFBMUMsRUFBMkQ7QUFDckYsVUFBTUMsa0JBQWtCLEdBQUc7QUFDMUJDLFFBQUFBLE1BQU0sRUFBRSxFQURrQjtBQUUxQkMsUUFBQUEsSUFBSSxFQUFFLEdBRm9CO0FBRzFCQyxRQUFBQSxHQUFHLEVBQUVMLFNBSHFCO0FBSTFCTSxRQUFBQSxJQUFJLEVBQUVMO0FBSm9CLE9BQTNCOztBQU1BLGNBQVEzRSxTQUFSO0FBQ0MsYUFBSyxVQUFMO0FBQ0M0RSxVQUFBQSxrQkFBa0IsQ0FBQ0MsTUFBbkIsR0FBNEIsSUFBNUI7QUFDQTs7QUFDRCxhQUFLLFlBQUw7QUFDQ0QsVUFBQUEsa0JBQWtCLENBQUNDLE1BQW5CLEdBQTRCLElBQTVCO0FBQ0FELFVBQUFBLGtCQUFrQixDQUFDRyxHQUFuQixJQUEwQixHQUExQjtBQUNBOztBQUNELGFBQUssVUFBTDtBQUNDSCxVQUFBQSxrQkFBa0IsQ0FBQ0MsTUFBbkIsR0FBNEIsSUFBNUI7QUFDQUQsVUFBQUEsa0JBQWtCLENBQUNHLEdBQW5CLEdBQXlCLE1BQU1ILGtCQUFrQixDQUFDRyxHQUFsRDtBQUNBOztBQUNELGFBQUssSUFBTDtBQUNBLGFBQUssSUFBTDtBQUNBLGFBQUssSUFBTDtBQUNBLGFBQUssSUFBTDtBQUNBLGFBQUssSUFBTDtBQUNBLGFBQUssSUFBTDtBQUNDSCxVQUFBQSxrQkFBa0IsQ0FBQ0MsTUFBbkIsR0FBNEI3RSxTQUE1QjtBQUNBOztBQUNELGFBQUssT0FBTDtBQUNBLGFBQUssTUFBTDtBQUNDNEUsVUFBQUEsa0JBQWtCLENBQUNDLE1BQW5CLEdBQTRCLElBQTVCO0FBQ0E7O0FBQ0QsYUFBSyxLQUFMO0FBQ0NELFVBQUFBLGtCQUFrQixDQUFDQyxNQUFuQixHQUE0QixJQUE1QjtBQUNBOztBQUNELGFBQUssT0FBTDtBQUNDRCxVQUFBQSxrQkFBa0IsQ0FBQ0MsTUFBbkIsR0FBNEIsSUFBNUI7QUFDQUQsVUFBQUEsa0JBQWtCLENBQUNHLEdBQW5CLEdBQXlCLEVBQXpCO0FBQ0E7O0FBQ0QsYUFBSyxhQUFMO0FBQ0NILFVBQUFBLGtCQUFrQixDQUFDQyxNQUFuQixHQUE0QixJQUE1QjtBQUNBRCxVQUFBQSxrQkFBa0IsQ0FBQ0UsSUFBbkIsR0FBMEIsR0FBMUI7QUFDQTs7QUFDRCxhQUFLLE9BQUw7QUFDQ0YsVUFBQUEsa0JBQWtCLENBQUNDLE1BQW5CLEdBQTRCLElBQTVCO0FBQ0FELFVBQUFBLGtCQUFrQixDQUFDRSxJQUFuQixHQUEwQixHQUExQjtBQUNBOztBQUNELGFBQUssZUFBTDtBQUNDRixVQUFBQSxrQkFBa0IsQ0FBQ0MsTUFBbkIsR0FBNEIsSUFBNUI7QUFDQUQsVUFBQUEsa0JBQWtCLENBQUNHLEdBQW5CLElBQTBCLEdBQTFCO0FBQ0FILFVBQUFBLGtCQUFrQixDQUFDRSxJQUFuQixHQUEwQixHQUExQjtBQUNBOztBQUNELGFBQUssYUFBTDtBQUNDRixVQUFBQSxrQkFBa0IsQ0FBQ0MsTUFBbkIsR0FBNEIsSUFBNUI7QUFDQUQsVUFBQUEsa0JBQWtCLENBQUNHLEdBQW5CLEdBQXlCLE1BQU1ILGtCQUFrQixDQUFDRyxHQUFsRDtBQUNBSCxVQUFBQSxrQkFBa0IsQ0FBQ0UsSUFBbkIsR0FBMEIsR0FBMUI7QUFDQTs7QUFDRCxhQUFLLFVBQUw7QUFDQ0YsVUFBQUEsa0JBQWtCLENBQUNDLE1BQW5CLEdBQTRCLElBQTVCO0FBQ0FELFVBQUFBLGtCQUFrQixDQUFDRyxHQUFuQixHQUF5QixFQUF6QjtBQUNBOztBQUNELGFBQUssT0FBTDtBQUNDSCxVQUFBQSxrQkFBa0IsQ0FBQ0MsTUFBbkIsR0FBNEIsSUFBNUI7QUFDQUQsVUFBQUEsa0JBQWtCLENBQUNFLElBQW5CLEdBQTBCLEdBQTFCO0FBQ0E7O0FBQ0QsYUFBSyxPQUFMO0FBQ0NGLFVBQUFBLGtCQUFrQixDQUFDQyxNQUFuQixHQUE0QixJQUE1QjtBQUNBRCxVQUFBQSxrQkFBa0IsQ0FBQ0UsSUFBbkIsR0FBMEIsR0FBMUI7QUFDQTs7QUFDRCxhQUFLLE9BQUw7QUFDQ0YsVUFBQUEsa0JBQWtCLENBQUNDLE1BQW5CLEdBQTRCLElBQTVCO0FBQ0FELFVBQUFBLGtCQUFrQixDQUFDRSxJQUFuQixHQUEwQixHQUExQjtBQUNBOztBQUNELGFBQUssT0FBTDtBQUNDRixVQUFBQSxrQkFBa0IsQ0FBQ0MsTUFBbkIsR0FBNEIsSUFBNUI7QUFDQUQsVUFBQUEsa0JBQWtCLENBQUNFLElBQW5CLEdBQTBCLEdBQTFCO0FBQ0E7O0FBQ0Q7QUFDQzFTLFVBQUFBLEdBQUcsQ0FBQ21JLE9BQUosQ0FBWXlGLFNBQVMsR0FBRyxxQkFBWixHQUFvQ3NFLE9BQXBDLEdBQThDLCtDQUExRDtBQXRFRjs7QUF3RUEsYUFBT00sa0JBQVA7QUFDQSxLQWhGRDs7QUFpRkEsUUFBTUssaUJBQWlCLEdBQUdkLFFBQVEsQ0FBQ2UsZ0JBQW5DO0FBQ0EsUUFBTUMsdUJBQXVCLEdBQUdoQixRQUFRLENBQUNpQiwrQkFBVCxHQUEyQ2pCLFFBQVEsQ0FBQ2lCLCtCQUFwRCxHQUFzRixFQUF0SDtBQUNBLFFBQU1DLCtCQUErQixHQUFHakIsV0FBVyxDQUFDa0IseUJBQVosR0FBd0NsQixXQUFXLENBQUNrQix5QkFBcEQsR0FBZ0YsRUFBeEg7O0FBQ0EsUUFBTUMsNEJBQTRCLEdBQUcsVUFBVTVELGlCQUFWLEVBQWtDNkQsV0FBbEMsRUFBb0QzYSxLQUFwRCxFQUFpRTtBQUNyRyxVQUFNNGEsUUFBUSxHQUFHUixpQkFBaUIsQ0FBQ08sV0FBRCxDQUFsQzs7QUFDQSxXQUFLLElBQU05WSxJQUFYLElBQW1CK1ksUUFBbkIsRUFBNkI7QUFDNUIsWUFBTWhQLE9BQU8sR0FBR2dQLFFBQVEsQ0FBQy9ZLElBQUQsQ0FBeEI7QUFDQTZYLFFBQUFBLElBQUksR0FBSTlOLE9BQU8sQ0FBQ2lQLE1BQVIsQ0FBZSxDQUFmLEtBQXFCalAsT0FBTyxDQUFDaVAsTUFBUixDQUFlLENBQWYsRUFBa0IzSCxRQUFsQixFQUF0QixJQUF1RCxFQUE5RDtBQUNBeUcsUUFBQUEsS0FBSyxHQUFJL04sT0FBTyxDQUFDaVAsTUFBUixDQUFlLENBQWYsS0FBcUJqUCxPQUFPLENBQUNpUCxNQUFSLENBQWUsQ0FBZixFQUFrQjNILFFBQWxCLEVBQXRCLElBQXVELElBQS9EOztBQUNBLFlBQUl0SCxPQUFPLENBQUNnTCxRQUFSLEtBQXFCLE9BQXJCLElBQWdDaEwsT0FBTyxDQUFDZ0wsUUFBUixLQUFxQixNQUF6RCxFQUFpRTtBQUNoRSxjQUFNa0UsT0FBTyxHQUFHdEIsV0FBVyxDQUFDLENBQUQsQ0FBWCxDQUFlb0IsUUFBZixDQUF3QjVILE1BQXhCLENBQStCLFVBQVVwSCxPQUFWLEVBQXdCO0FBQ3RFLG1CQUFPQSxPQUFPLENBQUM1TCxLQUFSLEtBQWtCMmEsV0FBekI7QUFDQSxXQUZlLENBQWhCO0FBR0FqQixVQUFBQSxJQUFJLEdBQUdvQixPQUFPLENBQUMsQ0FBRCxDQUFQLENBQVdDLE9BQVgsSUFBc0IsRUFBN0I7QUFDQXBCLFVBQUFBLEtBQUssR0FBRyxJQUFSO0FBQ0E7O0FBQ0QsWUFBTXFCLG1CQUFtQixHQUFHcEIsa0JBQWtCLENBQUNoTyxPQUFPLENBQUNnTCxRQUFULEVBQW1COEMsSUFBbkIsRUFBeUJDLEtBQXpCLENBQTlDOztBQUNBLFlBQUlxQixtQkFBbUIsQ0FBQ2hCLE1BQXhCLEVBQWdDO0FBQy9CbEQsVUFBQUEsaUJBQWlCLENBQUNtRSxlQUFsQixDQUNDamIsS0FBSyxHQUFHQSxLQUFILEdBQVcyYSxXQURqQixFQUVDSyxtQkFBbUIsQ0FBQ2YsSUFGckIsRUFHQ2UsbUJBQW1CLENBQUNoQixNQUhyQixFQUlDZ0IsbUJBQW1CLENBQUNkLEdBSnJCLEVBS0NjLG1CQUFtQixDQUFDYixJQUxyQjtBQU9BO0FBQ0Q7QUFDRCxLQXhCRDs7QUEwQkEsU0FBS1YsT0FBTCxJQUFnQlcsaUJBQWhCLEVBQW1DO0FBQ2xDO0FBQ0EsVUFBSSxDQUFDdEQsaUJBQWlCLENBQUNTLGVBQWxCLENBQWtDa0MsT0FBbEMsQ0FBTCxFQUFpRDtBQUNoRDtBQUNBLFlBQUlBLE9BQU8sS0FBSyxZQUFoQixFQUE4QjtBQUM3QjtBQUNBOztBQUNEaUIsUUFBQUEsNEJBQTRCLENBQUM1RCxpQkFBRCxFQUFvQjJDLE9BQXBCLENBQTVCO0FBQ0EsT0FORCxNQU1PO0FBQ04sWUFBSWUsK0JBQStCLElBQUlmLE9BQU8sSUFBSWUsK0JBQWxELEVBQW1GO0FBQ2xGRSxVQUFBQSw0QkFBNEIsQ0FBQzVELGlCQUFELEVBQW9CMkMsT0FBcEIsRUFBNkJlLCtCQUErQixDQUFDZixPQUFELENBQTVELENBQTVCO0FBQ0EsU0FISyxDQUlOOzs7QUFDQSxZQUFJQSxPQUFPLElBQUlhLHVCQUFmLEVBQXdDO0FBQ3ZDSSxVQUFBQSw0QkFBNEIsQ0FBQzVELGlCQUFELEVBQW9CMkMsT0FBcEIsRUFBNkJhLHVCQUF1QixDQUFDYixPQUFELENBQXBELENBQTVCO0FBQ0E7QUFDRDtBQUNEOztBQUNELFdBQU8zQyxpQkFBUDtBQUNBOztBQUNELFdBQVNvRSxnQkFBVCxDQUEwQi9YLFFBQTFCLEVBQTZDO0FBQzVDLFFBQU1nWSxhQUFhLEdBQUdDLFdBQVcsQ0FBQ0Msd0JBQVosQ0FBc0NsWSxRQUFRLENBQUMyRixRQUFULEVBQUQsQ0FBb0NDLFlBQXBDLEVBQXJDLENBQXRCO0FBQ0EsUUFBTXVTLFdBQVcsR0FBR25ZLFFBQVEsQ0FBQzJGLFFBQVQsQ0FBa0IsSUFBbEIsRUFBd0I3SixXQUF4QixDQUFvQyxhQUFwQyxDQUFwQjtBQUNBLFdBQU9rYyxhQUFhLElBQUlHLFdBQXhCO0FBQ0E7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxXQUFTQyx5QkFBVCxDQUFtQ3JQLHNCQUFuQyxFQUFrRTRLLGlCQUFsRSxFQUEwRjBFLHlCQUExRixFQUEwSDtBQUN6SCxRQUFJMUUsaUJBQWlCLElBQUk1SyxzQkFBckIsSUFBK0NBLHNCQUFzQixDQUFDak0sTUFBMUUsRUFBa0Y7QUFDakYsV0FBSyxJQUFJSCxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHb00sc0JBQXNCLENBQUNqTSxNQUEzQyxFQUFtREgsQ0FBQyxFQUFwRCxFQUF3RDtBQUN2RCxZQUFNMmIsU0FBUyxHQUFHM0UsaUJBQWlCLENBQUNTLGVBQWxCLENBQWtDLGlCQUFsQyxDQUFsQjtBQUFBLFlBQ0NtRSxnQkFBZ0IsR0FBR0YseUJBQXlCLElBQUlBLHlCQUF5QixDQUFDakUsZUFBMUIsQ0FBMEMsaUJBQTFDLENBRGpEOztBQUVBLFlBQ0NyTCxzQkFBc0IsQ0FBQ3BNLENBQUQsQ0FBdEIsQ0FBMEJ1QixhQUExQixLQUE0QyxpQkFBNUMsS0FDQyxDQUFDb2EsU0FBRCxJQUFjLENBQUNBLFNBQVMsQ0FBQ3hiLE1BRDFCLEtBRUF5YixnQkFGQSxJQUdBQSxnQkFBZ0IsQ0FBQ3piLE1BSmxCLEVBS0U7QUFDRCxjQUFNMGIsMkJBQTJCLEdBQUdELGdCQUFnQixDQUFDLENBQUQsQ0FBcEQ7QUFDQSxjQUFNRSxLQUFLLEdBQUdELDJCQUEyQixDQUFDLE1BQUQsQ0FBekM7QUFDQSxjQUFNRSxPQUFPLEdBQUdGLDJCQUEyQixDQUFDLFFBQUQsQ0FBM0M7QUFDQSxjQUFNakMsSUFBSSxHQUFHaUMsMkJBQTJCLENBQUMsS0FBRCxDQUF4QztBQUNBLGNBQU1oQyxLQUFLLEdBQUdnQywyQkFBMkIsQ0FBQyxNQUFELENBQXpDO0FBQ0E3RSxVQUFBQSxpQkFBaUIsQ0FBQ21FLGVBQWxCLENBQWtDLGlCQUFsQyxFQUFxRFcsS0FBckQsRUFBNERDLE9BQTVELEVBQXFFbkMsSUFBckUsRUFBMkVDLEtBQTNFO0FBQ0E7QUFDRDtBQUNEO0FBQ0Q7O0FBQ0QsV0FBU21DLDJCQUFULENBQXFDamMsVUFBckMsRUFBaUVHLEtBQWpFLEVBQTZFMk0sS0FBN0UsRUFBMEY7QUFDekYsUUFBTWhHLGNBQWMsR0FBRzlHLFVBQVUsQ0FBQ08sU0FBWCxDQUFxQkosS0FBSyxHQUFHLEdBQTdCLEVBQWtDK2IsSUFBekQ7QUFDQSxRQUFNQyx5QkFBeUIsR0FBRyxFQUFsQztBQUNBLFFBQU1uUSxXQUFXLEdBQUdoTSxVQUFVLENBQUNPLFNBQVgsQ0FBcUJKLEtBQUssR0FBRyxHQUE3QixDQUFwQjs7QUFDQSxTQUFLLElBQU02QixJQUFYLElBQW1CZ0ssV0FBbkIsRUFBZ0M7QUFDL0IsVUFBSUEsV0FBVyxDQUFDaEssSUFBRCxDQUFYLENBQWtCbUssS0FBbEIsSUFBMkJILFdBQVcsQ0FBQ2hLLElBQUQsQ0FBWCxDQUFrQm1LLEtBQWxCLEtBQTRCLFVBQTNELEVBQXVFO0FBQ3RFLFlBQU1pUSxZQUFZLEdBQUdwYyxVQUFVLENBQUNPLFNBQVgsQ0FBcUJKLEtBQUssR0FBRyxHQUFSLEdBQWM2QixJQUFkLEdBQXFCLEdBQTFDLEtBQWtELEVBQXZFO0FBQUEsWUFDQ3FhLE1BQU0sR0FBR3ZWLGNBQWMsQ0FBQ3hILE9BQWYsQ0FBdUIwQyxJQUF2QixJQUErQixDQUFDLENBRDFDO0FBQUEsWUFFQ3NhLFlBQVksR0FBR0YsWUFBWSxDQUFDLDhCQUFELENBRjVCO0FBQUEsWUFHQ0csY0FBYyxHQUFHLENBQUNILFlBQVksQ0FBQyw2QkFBRCxDQUgvQjtBQUFBLFlBSUNJLFVBQVUsR0FBRyxDQUFDSixZQUFZLENBQUMsb0NBQUQsQ0FKM0I7QUFBQSxZQUtDSyx1QkFBdUIsR0FBR0wsWUFBWSxDQUFDLHlDQUFELENBTHZDO0FBQUEsWUFNQ00sa0NBQWtDLEdBQ2pDTCxNQUFNLElBQUlyUSxXQUFXLENBQUNoSyxJQUFELENBQVgsQ0FBa0J3TSxLQUFsQixLQUE0QixVQUF0QyxHQUNHaU8sdUJBQXVCLElBQUlMLFlBQVksQ0FBQyxzQ0FBRCxDQUQxQyxHQUVHLEtBVEw7O0FBVUEsWUFDQyxDQUFDRSxZQUFZLElBQUlJLGtDQUFoQixJQUF1REwsTUFBTSxJQUFJclEsV0FBVyxDQUFDaEssSUFBRCxDQUFYLENBQWtCd00sS0FBbEIsS0FBNEIsVUFBOUYsS0FDQStOLGNBREEsSUFFQUMsVUFIRCxFQUlFO0FBQ0RMLFVBQUFBLHlCQUF5QixDQUFDdFgsSUFBMUIsQ0FBK0I3QyxJQUEvQjtBQUNBOztBQUVELFlBQUksQ0FBQ3VhLGNBQUQsSUFBbUJFLHVCQUFuQixJQUE4QzNQLEtBQWxELEVBQXlEO0FBQUE7O0FBQ3hELGNBQU02UCxZQUFZLEdBQUdwWixlQUFlLENBQUN1SixLQUFELENBQWYsQ0FBdUI4UCxjQUF2QixFQUFyQjtBQUNBLGNBQU1DLFFBQVEsR0FBRyw4RUFBakI7QUFDQUYsVUFBQUEsWUFBWSxDQUFDRyxRQUFiLENBQ0NDLGFBQWEsQ0FBQ0MsVUFEZixFQUVDQyxhQUFhLENBQUNDLE1BRmYsRUFHQ0wsUUFIRCxFQUlDTSxpQkFKRCxFQUtDQSxpQkFMRCxhQUtDQSxpQkFMRCxnREFLQ0EsaUJBQWlCLENBQUVDLFdBTHBCLDBEQUtDLHNCQUFnQ0MsaUJBTGpDO0FBT0E7QUFDRDtBQUNEOztBQUNELFdBQU9sQix5QkFBUDtBQUNBOztBQUNELFdBQVNtQixlQUFULENBQ0NuRSxhQURELEVBRUNvRSxXQUZELEVBR0MvYyxNQUhELEVBSUNnZCxTQUpELEVBS0NDLFNBTEQsRUFNQ0Msb0JBTkQsRUFPRTtBQUNELFdBQU8sSUFBSTVOLE9BQUosQ0FBWSxVQUFVQyxPQUFWLEVBQXlDO0FBQzNELFVBQU00TixjQUFjLEdBQUd4RSxhQUFhLENBQUN5RSxnQkFBZCxFQUF2QjtBQUFBLFVBQ0NDLGtCQUFrQixHQUFJRixjQUFjLElBQUlBLGNBQWMsQ0FBQ0csaUJBQWxDLElBQXdELEVBRDlFO0FBQUEsVUFFQ0MsY0FBYyxHQUFHNUUsYUFBYSxDQUFDOVYsZ0JBQWQsRUFGbEI7O0FBR0EsVUFBSSxDQUFDMGEsY0FBYyxDQUFDQyxTQUFmLEVBQUwsRUFBaUM7QUFDaENULFFBQUFBLFdBQVcsQ0FBQzVkLE9BQVosQ0FBb0IsVUFBVXNlLFVBQVYsRUFBMkI7QUFDOUMsY0FBTW5GLGFBQWEsR0FBRzBFLFNBQVMsR0FDNUIsTUFBTVMsVUFBVSxDQUFDQyxLQURXLEdBRTVCRCxVQUFVLENBQUM3VSxPQUFYLEdBQXFCcUcsS0FBckIsQ0FBMkJ3TyxVQUFVLENBQUM3VSxPQUFYLEdBQXFCOE0sV0FBckIsQ0FBaUMsR0FBakMsSUFBd0MsQ0FBbkUsQ0FGSDtBQUdBLGNBQU1pSSxjQUFjLEdBQUdYLFNBQVMsR0FBRzFFLGFBQWEsQ0FBQ3JKLEtBQWQsQ0FBb0IsQ0FBcEIsQ0FBSCxHQUE0QnFKLGFBQTVEOztBQUNBLGNBQUk0RSxvQkFBb0IsSUFBSUQsU0FBNUIsRUFBdUM7QUFDdEMsZ0JBQUlDLG9CQUFvQixDQUFDUyxjQUFELENBQXhCLEVBQTBDO0FBQ3pDM2QsY0FBQUEsTUFBTSxDQUFDbUksV0FBUCxDQUFtQm1RLGFBQW5CLEVBQWtDNEUsb0JBQW9CLENBQUNTLGNBQUQsQ0FBdEQ7QUFDQTtBQUNELFdBSkQsTUFJTyxJQUFJTixrQkFBa0IsQ0FBQ00sY0FBRCxDQUF0QixFQUF3QztBQUM5QzNkLFlBQUFBLE1BQU0sQ0FBQ21JLFdBQVAsQ0FBbUJtUSxhQUFuQixFQUFrQytFLGtCQUFrQixDQUFDTSxjQUFELENBQWxCLENBQW1DLENBQW5DLENBQWxDO0FBQ0E7QUFDRCxTQVpEO0FBYUEsZUFBT3BPLE9BQU8sQ0FBQyxJQUFELENBQWQ7QUFDQTs7QUFDRCxhQUFPZ08sY0FBYyxDQUFDSyxrQkFBZixDQUFrQ2pGLGFBQWxDLEVBQWlEN1IsSUFBakQsQ0FBc0QsVUFBVStXLGdCQUFWLEVBQWlDO0FBQzdGLFlBQU1wUixLQUFLLEdBQUdvUixnQkFBZ0IsQ0FBQ0MsT0FBakIsTUFBOEIsRUFBNUM7QUFBQSxZQUNDQyxtQkFBbUIsR0FBSXRSLEtBQUssQ0FBQ3VSLGdCQUFOLElBQTBCdlIsS0FBSyxDQUFDdVIsZ0JBQU4sQ0FBdUJDLGFBQWxELElBQW9FLEVBRDNGO0FBRUFsQixRQUFBQSxXQUFXLENBQUM1ZCxPQUFaLENBQW9CLFVBQVVzZSxVQUFWLEVBQTJCO0FBQzlDLGNBQU1uRixhQUFhLEdBQUcwRSxTQUFTLEdBQzVCLE1BQU1TLFVBQVUsQ0FBQ0MsS0FEVyxHQUU1QkQsVUFBVSxDQUFDN1UsT0FBWCxHQUFxQnFHLEtBQXJCLENBQTJCd08sVUFBVSxDQUFDN1UsT0FBWCxHQUFxQjhNLFdBQXJCLENBQWlDLEdBQWpDLElBQXdDLENBQW5FLENBRkg7QUFHQSxjQUFNaUksY0FBYyxHQUFHWCxTQUFTLEdBQUcxRSxhQUFhLENBQUNySixLQUFkLENBQW9CLENBQXBCLENBQUgsR0FBNEJxSixhQUE1RDs7QUFDQSxjQUFJNEUsb0JBQW9CLElBQUlELFNBQTVCLEVBQXVDO0FBQ3RDLGdCQUFJQyxvQkFBb0IsQ0FBQ1MsY0FBRCxDQUF4QixFQUEwQztBQUN6QzNkLGNBQUFBLE1BQU0sQ0FBQ21JLFdBQVAsQ0FBbUJtUSxhQUFuQixFQUFrQzRFLG9CQUFvQixDQUFDUyxjQUFELENBQXREO0FBQ0E7QUFDRCxXQUpELE1BSU8sSUFBSU4sa0JBQWtCLENBQUNNLGNBQUQsQ0FBdEIsRUFBd0M7QUFDOUMzZCxZQUFBQSxNQUFNLENBQUNtSSxXQUFQLENBQW1CbVEsYUFBbkIsRUFBa0MrRSxrQkFBa0IsQ0FBQ00sY0FBRCxDQUFsQixDQUFtQyxDQUFuQyxDQUFsQztBQUNBLFdBRk0sTUFFQSxJQUFJSSxtQkFBbUIsQ0FBQ25lLE1BQXBCLEdBQTZCLENBQWpDLEVBQW9DO0FBQzFDLGlCQUFLLElBQU1ILENBQVgsSUFBZ0JzZSxtQkFBaEIsRUFBcUM7QUFDcEMsa0JBQU1HLGtCQUFrQixHQUFHSCxtQkFBbUIsQ0FBQ3RlLENBQUQsQ0FBOUM7O0FBQ0Esa0JBQUl5ZSxrQkFBa0IsQ0FBQ0MsWUFBbkIsS0FBb0NSLGNBQXhDLEVBQXdEO0FBQ3ZELG9CQUFNUyxNQUFNLEdBQUdGLGtCQUFrQixDQUFDRyxNQUFuQixDQUEwQnplLE1BQTFCLEdBQ1pzZSxrQkFBa0IsQ0FBQ0csTUFBbkIsQ0FBMEJILGtCQUFrQixDQUFDRyxNQUFuQixDQUEwQnplLE1BQTFCLEdBQW1DLENBQTdELENBRFksR0FFWnpCLFNBRkg7O0FBR0Esb0JBQUlpZ0IsTUFBTSxJQUFJQSxNQUFNLENBQUNFLElBQVAsS0FBZ0IsR0FBMUIsSUFBaUNGLE1BQU0sQ0FBQ0csTUFBUCxLQUFrQixJQUF2RCxFQUE2RDtBQUM1RHZlLGtCQUFBQSxNQUFNLENBQUNtSSxXQUFQLENBQW1CbVEsYUFBbkIsRUFBa0M4RixNQUFNLENBQUNJLEdBQXpDLEVBRDRELENBQ2I7QUFDL0M7QUFDRDtBQUNEO0FBQ0Q7QUFDRCxTQXhCRDtBQXlCQSxlQUFPalAsT0FBTyxDQUFDLElBQUQsQ0FBZDtBQUNBLE9BN0JNLENBQVA7QUE4QkEsS0FsRE0sQ0FBUDtBQW1EQTs7QUFDRCxXQUFTa1AsNEJBQVQsQ0FBc0NwQixrQkFBdEMsRUFBK0RxQixrQkFBL0QsRUFBd0Y7QUFDdkYsUUFBTUMsU0FBUyxHQUFHRCxrQkFBbEI7QUFBQSxRQUNDRSxpQkFBaUIsR0FBR0QsU0FBUyxHQUMxQnphLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZd2EsU0FBWixFQUF1QmhNLE1BQXZCLENBQThCLFVBQVVrTSxVQUFWLEVBQThCO0FBQzVELGFBQU9GLFNBQVMsQ0FBQ0UsVUFBRCxDQUFULENBQXNCQyxZQUE3QjtBQUNDLEtBRkQsQ0FEMEIsR0FJMUIsRUFMSjtBQU1BLFFBQUlDLElBQUo7O0FBQ0EsU0FBSyxJQUFJdGYsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR21mLGlCQUFpQixDQUFDaGYsTUFBdEMsRUFBOENILENBQUMsRUFBL0MsRUFBbUQ7QUFDbEQsVUFBTXVmLGdCQUFnQixHQUFHSixpQkFBaUIsQ0FBQ25mLENBQUQsQ0FBMUM7QUFDQSxVQUFNd2YsT0FBTyxHQUFHNUIsa0JBQWtCLElBQUlBLGtCQUFrQixDQUFDMkIsZ0JBQUQsQ0FBeEQ7O0FBQ0EsVUFBSUMsT0FBTyxJQUFJQSxPQUFPLENBQUNyZixNQUFSLEtBQW1CLENBQWxDLEVBQXFDO0FBQ3BDbWYsUUFBQUEsSUFBSSxHQUFHQSxJQUFJLElBQUk3YSxNQUFNLENBQUNnYixNQUFQLENBQWMsSUFBZCxDQUFmO0FBQ0FILFFBQUFBLElBQUksQ0FBQ0MsZ0JBQUQsQ0FBSixHQUF5QkMsT0FBTyxDQUFDLENBQUQsQ0FBaEM7QUFDQTtBQUNEOztBQUNELFdBQU9GLElBQVA7QUFDQTs7QUFDRCxXQUFTSSx3QkFBVCxDQUFrQ0MsU0FBbEMsRUFBa0Q7QUFDakQsUUFBTUMsc0JBQTZCLEdBQUcsRUFBdEM7O0FBQ0EsUUFBSUQsU0FBUyxDQUFDRSxVQUFkLEVBQTBCO0FBQ3pCLFVBQU12QyxXQUFXLEdBQUc3WSxNQUFNLENBQUNDLElBQVAsQ0FBWWliLFNBQVMsQ0FBQ0UsVUFBdEIsS0FBcUMsRUFBekQ7O0FBQ0EsVUFBSXZDLFdBQVcsQ0FBQ25kLE1BQVosR0FBcUIsQ0FBekIsRUFBNEI7QUFDM0JtZCxRQUFBQSxXQUFXLENBQUM1ZCxPQUFaLENBQW9CLFVBQVVvZ0IsTUFBVixFQUEwQjtBQUM3QyxjQUFNeGIsUUFBUSxHQUFHcWIsU0FBUyxDQUFDRSxVQUFWLENBQXFCQyxNQUFyQixDQUFqQjs7QUFDQSxjQUFJeGIsUUFBUSxDQUFDc0MsS0FBVCxJQUFrQnRDLFFBQVEsQ0FBQ3NDLEtBQVQsQ0FBZUEsS0FBakMsSUFBMEN0QyxRQUFRLENBQUNzQyxLQUFULENBQWVtWixNQUFmLEtBQTBCLFNBQXhFLEVBQW1GO0FBQ2xGO0FBQ0EsZ0JBQU1wYixnQkFBZ0IsR0FBRztBQUN4QiwrQkFBaUI7QUFDaEIsaUNBQWlCTCxRQUFRLENBQUNzQyxLQUFULENBQWVBO0FBRGhCLGVBRE87QUFJeEIsd0NBQTBCa1o7QUFKRixhQUF6Qjs7QUFPQSxnQkFBSUYsc0JBQXNCLENBQUN6ZixNQUF2QixHQUFnQyxDQUFwQyxFQUF1QztBQUN0QztBQUNBLG1CQUFLLElBQUlILENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUc0ZixzQkFBc0IsQ0FBQ3pmLE1BQTNDLEVBQW1ESCxDQUFDLEVBQXBELEVBQXdEO0FBQ3ZELG9CQUNDNGYsc0JBQXNCLENBQUM1ZixDQUFELENBQXRCLENBQTBCLGVBQTFCLEVBQTJDLGVBQTNDLE1BQ0EyRSxnQkFBZ0IsQ0FBQyxlQUFELENBQWhCLENBQWtDLGVBQWxDLENBRkQsRUFHRTtBQUNEaWIsa0JBQUFBLHNCQUFzQixDQUFDaGIsSUFBdkIsQ0FBNEJELGdCQUE1QjtBQUNBO0FBQ0Q7QUFDRCxhQVZELE1BVU87QUFDTmliLGNBQUFBLHNCQUFzQixDQUFDaGIsSUFBdkIsQ0FBNEJELGdCQUE1QjtBQUNBO0FBQ0Q7QUFDRCxTQXpCRDtBQTBCQTtBQUNEOztBQUNELFdBQU9pYixzQkFBUDtBQUNBOztBQUNELFdBQVNJLDZDQUFULENBQXVEQyxTQUF2RCxFQUF1RUMsU0FBdkUsRUFBdUY7QUFDdEYsUUFBTUMsaUJBQXNCLEdBQUcsRUFBL0I7QUFDQSxRQUFJQyxHQUFKO0FBQ0EsUUFBTUMsY0FBYyxHQUFHSixTQUFTLENBQUNLLG9CQUFqQzs7QUFDQSxTQUFLLElBQU1DLE1BQVgsSUFBcUJGLGNBQXJCLEVBQXFDO0FBQ3BDLFVBQUlFLE1BQU0sQ0FBQ2xoQixPQUFQLENBQWUsdUNBQWYsSUFBMEQsQ0FBQyxDQUEzRCxJQUFnRWtoQixNQUFNLENBQUNsaEIsT0FBUCxDQUFlLG1DQUFmLElBQXNELENBQUMsQ0FBM0gsRUFBOEg7QUFDN0gsWUFDQ2doQixjQUFjLENBQUNFLE1BQUQsQ0FBZCxDQUF1QkMsVUFBdkIsSUFDQUgsY0FBYyxDQUFDRSxNQUFELENBQWQsQ0FBdUJDLFVBQXZCLENBQWtDQyxjQURsQyxJQUVBSixjQUFjLENBQUNFLE1BQUQsQ0FBZCxDQUF1QkMsVUFBdkIsQ0FBa0NDLGNBQWxDLENBQWlEQyxRQUhsRCxFQUlFO0FBQ0QsY0FBTUMsU0FBUyxHQUFHTixjQUFjLENBQUNFLE1BQUQsQ0FBZCxDQUF1QkMsVUFBdkIsQ0FBa0NDLGNBQWxDLENBQWlEQyxRQUFuRTtBQUNBLGNBQU1mLFNBQVMsR0FBR08sU0FBUyxDQUFDUyxTQUFELENBQTNCOztBQUNBLGNBQUloQixTQUFTLENBQUN4YixjQUFWLElBQTRCd2IsU0FBUyxDQUFDNVgsTUFBMUMsRUFBa0Q7QUFDakQsZ0JBQUl3WSxNQUFNLENBQUNsaEIsT0FBUCxDQUFlLE9BQWYsSUFBMEIsQ0FBQyxDQUEvQixFQUFrQztBQUNqQytnQixjQUFBQSxHQUFHLEdBQUdRLFFBQVEsQ0FBQyxDQUFDLElBQUQsRUFBTyxnQkFBUCxFQUF5QkwsTUFBekIsQ0FBRCxDQUFkO0FBQ0EsYUFGRCxNQUVPO0FBQ05ILGNBQUFBLEdBQUcsR0FBR1EsUUFBUSxDQUFDLENBQUMsSUFBRCxFQUFPLGNBQVAsRUFBdUJMLE1BQXZCLENBQUQsQ0FBZDtBQUNBOztBQUNELGdCQUFNWCxzQkFBc0IsR0FBRzNiLFdBQVcsQ0FBQ3liLHdCQUFaLENBQXFDQyxTQUFyQyxDQUEvQjtBQUNBUSxZQUFBQSxpQkFBaUIsQ0FBQ0MsR0FBRCxDQUFqQixHQUF5QjtBQUN4QmpjLGNBQUFBLGNBQWMsRUFBRXdiLFNBQVMsQ0FBQ3hiLGNBREY7QUFFeEI0RCxjQUFBQSxNQUFNLEVBQUU0WCxTQUFTLENBQUM1WCxNQUZNO0FBR3hCOUIsY0FBQUEscUJBQXFCLEVBQUUyWjtBQUhDLGFBQXpCO0FBS0EsV0FaRCxNQVlPO0FBQ05uWSxZQUFBQSxHQUFHLENBQUNDLEtBQUosQ0FBVSxvRkFBb0ZpWixTQUE5RjtBQUNBO0FBQ0Q7QUFDRDtBQUNEOztBQUNELFdBQU9SLGlCQUFQO0FBQ0E7O0FBQ0QsV0FBU1UseUJBQVQsQ0FBbUM3SixpQkFBbkMsRUFBMkQ4SixTQUEzRCxFQUE4RTtBQUM3RSxRQUFNN08sU0FBUyxHQUFHLE9BQU82TyxTQUFQLEtBQXFCLFFBQXJCLEdBQWdDaE0sSUFBSSxDQUFDQyxLQUFMLENBQVcrTCxTQUFYLENBQWhDLEdBQXdEQSxTQUExRTs7QUFDQSxTQUFLLElBQUk5Z0IsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR2lTLFNBQVMsQ0FBQzlSLE1BQTlCLEVBQXNDSCxDQUFDLEVBQXZDLEVBQTJDO0FBQzFDLFVBQU1tUyxjQUFjLEdBQ2xCRixTQUFTLENBQUNqUyxDQUFELENBQVQsQ0FBYSxlQUFiLEtBQWlDaVMsU0FBUyxDQUFDalMsQ0FBRCxDQUFULENBQWEsZUFBYixFQUE4QixlQUE5QixDQUFsQyxJQUNDaVMsU0FBUyxDQUFDalMsQ0FBRCxDQUFULENBQWEsK0NBQWIsS0FDQWlTLFNBQVMsQ0FBQ2pTLENBQUQsQ0FBVCxDQUFhLCtDQUFiLEVBQThELE9BQTlELENBSEY7QUFJQSxVQUFNb1MsdUJBQXVCLEdBQzVCSCxTQUFTLENBQUNqUyxDQUFELENBQVQsQ0FBYSx3QkFBYixLQUEwQ2lTLFNBQVMsQ0FBQ2pTLENBQUQsQ0FBVCxDQUFhLHdEQUFiLENBRDNDOztBQUVBLFVBQUlnWCxpQkFBaUIsQ0FBQ1MsZUFBbEIsQ0FBa0N0RixjQUFsQyxDQUFKLEVBQXVEO0FBQ3RELFlBQU13RSxhQUFhLEdBQUdLLGlCQUFpQixDQUFDUyxlQUFsQixDQUFrQ3RGLGNBQWxDLENBQXRCLENBRHNELENBR3REOztBQUNBNkUsUUFBQUEsaUJBQWlCLENBQUMrSixrQkFBbEIsQ0FBcUM1TyxjQUFyQztBQUNBNkUsUUFBQUEsaUJBQWlCLENBQUNnSyxtQkFBbEIsQ0FBc0M1Tyx1QkFBdEMsRUFBK0R1RSxhQUEvRDtBQUNBO0FBQ0Q7O0FBQ0QsV0FBT0ssaUJBQVA7QUFDQTs7QUFDRCxXQUFTaUssNEJBQVQsQ0FBc0NsaEIsVUFBdEMsRUFBdURHLEtBQXZELEVBQW1FO0FBQ2xFLFdBQU8sSUFBSTJQLE9BQUosQ0FBWSxVQUFVQyxPQUFWLEVBQXlDO0FBQzNELFVBQU0zQyxlQUFlLEdBQUdwTixVQUFVLENBQUNPLFNBQVgsQ0FBcUJKLEtBQUssR0FBRyxnREFBN0IsQ0FBeEI7QUFDQSxVQUFNZ2hCLGlDQUFpQyxHQUFHbmhCLFVBQVUsQ0FBQ08sU0FBWCxDQUN6Q0osS0FBSyxHQUFHLGtFQURpQyxDQUExQztBQUdBLFVBQU1paEIsMEJBQTBCLEdBQUcsQ0FBQztBQUFFaGQsUUFBQUEsY0FBYyxFQUFFZ0o7QUFBbEIsT0FBRCxDQUFuQztBQUNBLFVBQU1ySixlQUFlLEdBQUc7QUFDdkJLLFFBQUFBLGNBQWMsRUFBRWdKO0FBRE8sT0FBeEI7QUFHQTJDLE1BQUFBLE9BQU8sQ0FBQztBQUNQc1IsUUFBQUEsa0JBQWtCLEVBQUVsaEIsS0FEYjtBQUVQbWhCLFFBQUFBLHlCQUF5QixFQUFFRiwwQkFGcEI7QUFHUGhkLFFBQUFBLGNBQWMsRUFBRUwsZUFIVDtBQUlQZ0MsUUFBQUEsa0JBQWtCLEVBQUVvYjtBQUpiLE9BQUQsQ0FBUDtBQU1BLEtBZk0sRUFlSjNaLEtBZkksQ0FlRSxVQUFVQyxNQUFWLEVBQXVCO0FBQy9CQyxNQUFBQSxHQUFHLENBQUNDLEtBQUosQ0FBVSx1Q0FBVixFQUFtREYsTUFBbkQ7QUFDQSxLQWpCTSxDQUFQO0FBa0JBOztBQUNELFdBQVM4Wiw0QkFBVCxDQUFzQ0MsaUJBQXRDLEVBQThEQyxnQkFBOUQsRUFBcUZuUixxQkFBckYsRUFBaUhvUixZQUFqSCxFQUFvSTtBQUNuSSxXQUFPNVIsT0FBTyxDQUFDVSxHQUFSLENBQVlnUixpQkFBWixFQUNMbGEsSUFESyxDQUNBLFVBQVVtWSxPQUFWLEVBQTBCO0FBQy9CLFVBQUkxYSxNQUFKO0FBQUEsVUFDQzRjLE1BREQ7QUFBQSxVQUVDQyxrQkFGRDtBQUFBLFVBR0NDLFdBQWtCLEdBQUcsRUFIdEI7O0FBSUEsVUFBSUMscUJBQTBCLEdBQUcsRUFBakM7O0FBQ0EsVUFBTUMsaUJBQWlCLEdBQUcsVUFBVTNjLE9BQVYsRUFBd0JvSCxRQUF4QixFQUF1QztBQUNoRSxhQUFLLElBQU1uSCxNQUFYLElBQXFCbUgsUUFBckIsRUFBK0I7QUFDOUIsY0FBSW5ILE1BQU0sS0FBS0QsT0FBZixFQUF3QjtBQUN2QixtQkFBTyxJQUFQO0FBQ0EsV0FGRCxNQUVPO0FBQ04sbUJBQU8sS0FBUDtBQUNBO0FBQ0Q7QUFDRCxPQVJEOztBQVVBLFdBQUssSUFBSTRjLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUd2QyxPQUFPLENBQUNyZixNQUE1QixFQUFvQzRoQixDQUFDLEVBQXJDLEVBQXlDO0FBQ3hDamQsUUFBQUEsTUFBTSxHQUFHMGEsT0FBTyxDQUFDdUMsQ0FBRCxDQUFoQjs7QUFDQSxZQUFJamQsTUFBTSxJQUFJQSxNQUFNLENBQUMzRSxNQUFQLEdBQWdCLENBQTFCLElBQStCMkUsTUFBTSxDQUFDLENBQUQsQ0FBTixLQUFjcEcsU0FBakQsRUFBNEQ7QUFDM0QsY0FBTW9GLGVBQW9CLEdBQUcsRUFBN0I7QUFDQSxjQUFJa2UsSUFBSSxHQUFHLEVBQVg7QUFDQSxjQUFJQyxjQUFjLFNBQWxCOztBQUNBLGVBQUssSUFBSWppQixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHOEUsTUFBTSxDQUFDM0UsTUFBM0IsRUFBbUNILENBQUMsRUFBcEMsRUFBd0M7QUFDdkM0aEIsWUFBQUEsV0FBVyxDQUFDaGQsSUFBWixDQUFpQixFQUFqQjtBQUNBLGdCQUFJc2QscUJBQXFCLEdBQUcsS0FBNUI7QUFDQSxnQkFBSUMsVUFBVSxHQUFHLEtBQWpCOztBQUNBLGlCQUFLLElBQUlDLFVBQVUsR0FBRyxDQUF0QixFQUF5QkEsVUFBVSxHQUFHdGQsTUFBTSxDQUFDOUUsQ0FBRCxDQUFOLENBQVUsQ0FBVixFQUFhRyxNQUFuRCxFQUEyRGlpQixVQUFVLEVBQXJFLEVBQXlFO0FBQ3hFVixjQUFBQSxNQUFNLEdBQUc1YyxNQUFNLENBQUM5RSxDQUFELENBQU4sQ0FBVSxDQUFWLEVBQWFvaUIsVUFBYixDQUFUO0FBQ0FULGNBQUFBLGtCQUFrQixHQUFHRCxNQUFNLElBQUlBLE1BQU0sQ0FBQ3RjLE1BQVAsQ0FBY3hHLEtBQWQsQ0FBb0IsR0FBcEIsRUFBeUIsQ0FBekIsRUFBNEJBLEtBQTVCLENBQWtDLEdBQWxDLEVBQXVDLENBQXZDLENBQS9COztBQUVBLGtCQUFJLEVBQUU4aUIsTUFBTSxJQUFJQSxNQUFNLENBQUN0YyxNQUFqQixJQUEyQnNjLE1BQU0sQ0FBQ3RjLE1BQVAsQ0FBYy9GLE9BQWQsQ0FBc0JvaUIsWUFBdEIsTUFBd0MsQ0FBckUsQ0FBSixFQUE2RTtBQUM1RVMsZ0JBQUFBLHFCQUFxQixHQUFHLElBQXhCOztBQUNBLG9CQUFJLENBQUNKLGlCQUFpQixDQUFDSCxrQkFBRCxFQUFxQkgsZ0JBQWdCLENBQUNPLENBQUQsQ0FBaEIsQ0FBb0JqYyxrQkFBekMsQ0FBdEIsRUFBb0Y7QUFDbkY4YixrQkFBQUEsV0FBVyxDQUFDNWhCLENBQUQsQ0FBWCxDQUFlNEUsSUFBZixDQUFvQjhjLE1BQXBCO0FBQ0FTLGtCQUFBQSxVQUFVLEdBQUcsSUFBYjtBQUNBO0FBQ0Q7QUFDRDs7QUFDREgsWUFBQUEsSUFBSSxHQUFHO0FBQ043ZCxjQUFBQSxjQUFjLEVBQUVxZCxnQkFBZ0IsQ0FBQ08sQ0FBRCxDQUFoQixDQUFvQjVkLGNBRDlCO0FBRU55TixjQUFBQSxJQUFJLEVBQUU0UCxnQkFBZ0IsQ0FBQ08sQ0FBRCxDQUFoQixDQUFvQm5RLElBRnBCO0FBR055USxjQUFBQSxVQUFVLEVBQUVGLFVBSE47QUFJTkcsY0FBQUEscUJBQXFCLEVBQUVKO0FBSmpCLGFBQVA7O0FBTUEsZ0JBQUlwZSxlQUFlLENBQUMwZCxnQkFBZ0IsQ0FBQ08sQ0FBRCxDQUFoQixDQUFvQjVkLGNBQXJCLENBQWYsS0FBd0R6RixTQUE1RCxFQUF1RTtBQUN0RW9GLGNBQUFBLGVBQWUsQ0FBQzBkLGdCQUFnQixDQUFDTyxDQUFELENBQWhCLENBQW9CNWQsY0FBckIsQ0FBZixHQUFzRCxFQUF0RDtBQUNBOztBQUNEOGQsWUFBQUEsY0FBYyxHQUFHVCxnQkFBZ0IsQ0FBQ08sQ0FBRCxDQUFoQixDQUFvQm5RLElBQXBCLENBQXlCalQsT0FBekIsQ0FBaUMsS0FBakMsRUFBd0MsR0FBeEMsQ0FBakI7O0FBQ0EsZ0JBQUltRixlQUFlLENBQUMwZCxnQkFBZ0IsQ0FBQ08sQ0FBRCxDQUFoQixDQUFvQjVkLGNBQXJCLENBQWYsQ0FBb0Q4ZCxjQUFwRCxNQUF3RXZqQixTQUE1RSxFQUF1RjtBQUN0Rm9GLGNBQUFBLGVBQWUsQ0FBQzBkLGdCQUFnQixDQUFDTyxDQUFELENBQWhCLENBQW9CNWQsY0FBckIsQ0FBZixDQUFvRDhkLGNBQXBELElBQXNFLEVBQXRFO0FBQ0E7O0FBQ0RuZSxZQUFBQSxlQUFlLENBQUMwZCxnQkFBZ0IsQ0FBQ08sQ0FBRCxDQUFoQixDQUFvQjVkLGNBQXJCLENBQWYsQ0FBb0Q4ZCxjQUFwRCxJQUFzRXhkLE1BQU0sQ0FBQzhkLE1BQVAsQ0FDckV6ZSxlQUFlLENBQUMwZCxnQkFBZ0IsQ0FBQ08sQ0FBRCxDQUFoQixDQUFvQjVkLGNBQXJCLENBQWYsQ0FBb0Q4ZCxjQUFwRCxDQURxRSxFQUVyRUQsSUFGcUUsQ0FBdEU7QUFJQTs7QUFDRCxjQUFNUSxtQkFBbUIsR0FBRy9kLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZWixlQUFaLEVBQTZCLENBQTdCLENBQTVCOztBQUNBLGNBQUlXLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZbWQscUJBQVosRUFBbUMxSixRQUFuQyxDQUE0Q3FLLG1CQUE1QyxDQUFKLEVBQXNFO0FBQ3JFWCxZQUFBQSxxQkFBcUIsQ0FBQ1csbUJBQUQsQ0FBckIsR0FBNkMvZCxNQUFNLENBQUM4ZCxNQUFQLENBQzVDVixxQkFBcUIsQ0FBQ1csbUJBQUQsQ0FEdUIsRUFFNUMxZSxlQUFlLENBQUMwZSxtQkFBRCxDQUY2QixDQUE3QztBQUlBLFdBTEQsTUFLTztBQUNOWCxZQUFBQSxxQkFBcUIsR0FBR3BkLE1BQU0sQ0FBQzhkLE1BQVAsQ0FBY1YscUJBQWQsRUFBcUMvZCxlQUFyQyxDQUF4QjtBQUNBOztBQUNEOGQsVUFBQUEsV0FBVyxHQUFHLEVBQWQ7QUFDQTtBQUNEOztBQUNELFVBQUluZCxNQUFNLENBQUNDLElBQVAsQ0FBWW1kLHFCQUFaLEVBQW1DMWhCLE1BQW5DLEdBQTRDLENBQWhELEVBQW1EO0FBQ2xEa1EsUUFBQUEscUJBQXFCLENBQUMzSCxXQUF0QixDQUNDLGtCQURELEVBRUMrWixZQUFZLENBQUNaLHFCQUFELEVBQXdCeFIscUJBQXFCLENBQUNsUixXQUF0QixDQUFrQyxrQkFBbEMsQ0FBeEIsQ0FGYjtBQUlBLGVBQU8waUIscUJBQVA7QUFDQTtBQUNELEtBNUVLLEVBNkVMdGEsS0E3RUssQ0E2RUMsVUFBVUMsTUFBVixFQUF1QjtBQUM3QkMsTUFBQUEsR0FBRyxDQUFDQyxLQUFKLENBQVUsaURBQVYsRUFBNkRGLE1BQTdEO0FBQ0EsS0EvRUssQ0FBUDtBQWdGQTs7QUFDRCxXQUFTa2IsMEJBQVQsQ0FBb0N4SixhQUFwQyxFQUF3RHJNLEtBQXhELEVBQW9FOU0sVUFBcEUsRUFBcUZHLEtBQXJGLEVBQWlHO0FBQ2hHLFdBQU8rRCxXQUFXLENBQUMwZSwwQkFBWixDQUF1QzVpQixVQUF2QyxFQUFtREcsS0FBbkQsQ0FBUDtBQUNBOztBQUNELFdBQVMwaUIsaUNBQVQsQ0FBMkNDLFdBQTNDLEVBQTZEQyxVQUE3RCxFQUFpRjtBQUNoRixRQUFNQyxtQkFBbUIsR0FBRyxVQUFVQyxHQUFWLEVBQW9CbGMsR0FBcEIsRUFBOEJtYyxJQUE5QixFQUF5QztBQUNwRSxVQUFJLENBQUNELEdBQUwsRUFBVTtBQUNULGVBQU9DLElBQVA7QUFDQTs7QUFDRCxVQUFJRCxHQUFHLFlBQVlFLEtBQW5CLEVBQTBCO0FBQ3pCLGFBQUssSUFBTWxqQixDQUFYLElBQWdCZ2pCLEdBQWhCLEVBQXFCO0FBQ3BCQyxVQUFBQSxJQUFJLEdBQUdBLElBQUksQ0FBQ3phLE1BQUwsQ0FBWXVhLG1CQUFtQixDQUFDQyxHQUFHLENBQUNoakIsQ0FBRCxDQUFKLEVBQVM4RyxHQUFULEVBQWMsRUFBZCxDQUEvQixDQUFQO0FBQ0E7O0FBQ0QsZUFBT21jLElBQVA7QUFDQTs7QUFDRCxVQUFJRCxHQUFHLENBQUNsYyxHQUFELENBQVAsRUFBYztBQUNibWMsUUFBQUEsSUFBSSxDQUFDcmUsSUFBTCxDQUFVb2UsR0FBRyxDQUFDbGMsR0FBRCxDQUFiO0FBQ0E7O0FBRUQsVUFBSSxPQUFPa2MsR0FBUCxJQUFjLFFBQWQsSUFBMEJBLEdBQUcsS0FBSyxJQUF0QyxFQUE0QztBQUMzQyxZQUFNRyxRQUFRLEdBQUcxZSxNQUFNLENBQUNDLElBQVAsQ0FBWXNlLEdBQVosQ0FBakI7O0FBQ0EsWUFBSUcsUUFBUSxDQUFDaGpCLE1BQVQsR0FBa0IsQ0FBdEIsRUFBeUI7QUFDeEIsZUFBSyxJQUFJSCxHQUFDLEdBQUcsQ0FBYixFQUFnQkEsR0FBQyxHQUFHbWpCLFFBQVEsQ0FBQ2hqQixNQUE3QixFQUFxQ0gsR0FBQyxFQUF0QyxFQUEwQztBQUN6Q2lqQixZQUFBQSxJQUFJLEdBQUdBLElBQUksQ0FBQ3phLE1BQUwsQ0FBWXVhLG1CQUFtQixDQUFDQyxHQUFHLENBQUNHLFFBQVEsQ0FBQ25qQixHQUFELENBQVQsQ0FBSixFQUFtQjhHLEdBQW5CLEVBQXdCLEVBQXhCLENBQS9CLENBQVA7QUFDQTtBQUNEO0FBQ0Q7O0FBQ0QsYUFBT21jLElBQVA7QUFDQSxLQXZCRDs7QUF3QkEsUUFBTUcsYUFBYSxHQUFHLFVBQVVKLEdBQVYsRUFBb0JsYyxHQUFwQixFQUE4QjtBQUNuRCxhQUFPaWMsbUJBQW1CLENBQUNDLEdBQUQsRUFBTWxjLEdBQU4sRUFBVyxFQUFYLENBQTFCO0FBQ0EsS0FGRDs7QUFHQSxRQUFNdWMsaUNBQWlDLEdBQUcsVUFBVUMsbUJBQVYsRUFBb0M7QUFDN0UsYUFBT0EsbUJBQW1CLENBQUNwUSxNQUFwQixDQUEyQixVQUFVdE0sS0FBVixFQUFzQjVFLEtBQXRCLEVBQWtDO0FBQ25FLGVBQU9zaEIsbUJBQW1CLENBQUNqa0IsT0FBcEIsQ0FBNEJ1SCxLQUE1QixNQUF1QzVFLEtBQTlDO0FBQ0EsT0FGTSxDQUFQO0FBR0EsS0FKRDs7QUFLQSxRQUFNNkssS0FBSyxHQUFHZ1csV0FBVyxDQUFDVSxPQUFaLEVBQWQ7QUFDQSxRQUFNbFQscUJBQXFCLEdBQUd4RCxLQUFLLENBQUNwRSxpQkFBTixDQUF3QixVQUF4QixDQUE5Qjs7QUFFQSxRQUFJNEgscUJBQUosRUFBMkI7QUFDMUIsVUFBTW1ULHdCQUF3QixHQUFHLEVBQWpDO0FBQ0EsVUFBTUMsVUFBVSxHQUFHWixXQUFXLENBQUNhLGlCQUFaLEVBQW5CO0FBQ0EsVUFBTXhLLGFBQWEsR0FBRy9PLFNBQVMsQ0FBQ0Msb0JBQVYsQ0FBK0JxWixVQUEvQixDQUF0QjtBQUNBLFVBQU0xakIsVUFBVSxHQUFHbVosYUFBYSxDQUFDalEsWUFBZCxFQUFuQjtBQUNBLFVBQUkwYSxVQUFVLEdBQUdGLFVBQVUsQ0FBQ3phLFFBQVgsQ0FBb0I4WixVQUFwQixFQUFnQ3pFLE9BQWhDLEVBQWpCOztBQUNBLFVBQUl2SixJQUFJLENBQUM4TyxTQUFMLENBQWVELFVBQWYsTUFBK0IsSUFBbkMsRUFBeUM7QUFDeENBLFFBQUFBLFVBQVUsR0FBR0YsVUFBVSxDQUFDemEsUUFBWCxDQUFvQjhaLFVBQXBCLEVBQWdDZSxVQUFoQyxDQUEyQyxHQUEzQyxFQUFnRG5sQixTQUFoRCxDQUFiO0FBQ0E7O0FBQ0QsVUFBSW9sQixxQkFBcUIsR0FBR1YsYUFBYSxDQUFDTyxVQUFELEVBQWEsb0JBQWIsQ0FBekM7O0FBQ0FHLE1BQUFBLHFCQUFxQixHQUFHVCxpQ0FBaUMsQ0FBQ1MscUJBQUQsQ0FBekQ7QUFDQSxVQUFNOWYsbUJBQW1CLEdBQUdDLFdBQVcsQ0FBQ2IsZ0JBQVosQ0FBNkI4VixhQUE3QixDQUE1QjtBQUNBLFVBQUl1SSxZQUFZLEdBQUd4ZCxXQUFXLENBQUNWLE9BQVosRUFBbkI7QUFDQSxVQUFNd2dCLDJCQUEyQixHQUFHLEVBQXBDO0FBQ0EsVUFBTXZDLGdCQUF1QixHQUFHLEVBQWhDO0FBQ0EsVUFBSXRoQixLQUFKOztBQUNBLFVBQUk4akIsZ0JBQUo7O0FBRUEsVUFBSXZDLFlBQVksSUFBSUEsWUFBWSxDQUFDcGlCLE9BQWIsQ0FBcUIsR0FBckIsTUFBOEIsQ0FBQyxDQUFuRCxFQUFzRDtBQUNyRDtBQUNBb2lCLFFBQUFBLFlBQVksR0FBR0EsWUFBWSxDQUFDN2lCLEtBQWIsQ0FBbUIsR0FBbkIsRUFBd0IsQ0FBeEIsQ0FBZjtBQUNBOztBQUVELFdBQUssSUFBSW9CLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUc4akIscUJBQXFCLENBQUMzakIsTUFBMUMsRUFBa0RILENBQUMsRUFBbkQsRUFBdUQ7QUFDdERFLFFBQUFBLEtBQUssR0FBRzRqQixxQkFBcUIsQ0FBQzlqQixDQUFELENBQTdCO0FBQ0F3akIsUUFBQUEsd0JBQXdCLENBQUM1ZSxJQUF6QixDQUE4QlgsV0FBVyxDQUFDZ2dCLHdCQUFaLENBQXFDL0ssYUFBckMsRUFBb0RyTSxLQUFwRCxFQUEyRDlNLFVBQTNELEVBQXVFRyxLQUF2RSxDQUE5QjtBQUNBOztBQUVELFVBQUlzakIsd0JBQXdCLENBQUNyakIsTUFBekIsS0FBb0MsQ0FBeEMsRUFBMkM7QUFDMUMsZUFBTzBQLE9BQU8sQ0FBQ0MsT0FBUixFQUFQO0FBQ0EsT0FGRCxNQUVPO0FBQ05ELFFBQUFBLE9BQU8sQ0FBQ1UsR0FBUixDQUFZaVQsd0JBQVosRUFDRW5jLElBREYsQ0FDTyxVQUFVbVksT0FBVixFQUEwQjtBQUMvQixjQUFNK0IsaUJBQWlCLEdBQUcsRUFBMUI7QUFDQSxjQUFJMkMsaUJBQUo7QUFDQSxjQUFNQyx3QkFBd0IsR0FBRzNFLE9BQU8sQ0FBQ3RNLE1BQVIsQ0FBZSxVQUFVa1IsT0FBVixFQUF3QjtBQUN2RSxnQkFDQ0EsT0FBTyxDQUFDamdCLGNBQVIsS0FBMkJ6RixTQUEzQixJQUNBMGxCLE9BQU8sQ0FBQ2pnQixjQUFSLENBQXVCQSxjQUR2QixJQUVBLE9BQU9pZ0IsT0FBTyxDQUFDamdCLGNBQVIsQ0FBdUJBLGNBQTlCLEtBQWlELFFBSGxELEVBSUU7QUFDRCtmLGNBQUFBLGlCQUFpQixHQUFHbmhCLGNBQWMsQ0FBQ0csaUJBQWlCLENBQUNraEIsT0FBTyxDQUFDamdCLGNBQVIsQ0FBdUJBLGNBQXZCLENBQXNDa2dCLEtBQXZDLENBQWxCLENBQWxDO0FBQ0FELGNBQUFBLE9BQU8sQ0FBQ2pnQixjQUFSLENBQXVCQSxjQUF2QixHQUF3QytmLGlCQUF4QztBQUNBRSxjQUFBQSxPQUFPLENBQUMvQyx5QkFBUixDQUFrQyxDQUFsQyxFQUFxQ2xkLGNBQXJDLEdBQXNEK2YsaUJBQXREO0FBQ0EscUJBQU8sSUFBUDtBQUNBLGFBVEQsTUFTTyxJQUFJRSxPQUFKLEVBQWE7QUFDbkIscUJBQU9BLE9BQU8sQ0FBQ2pnQixjQUFSLEtBQTJCekYsU0FBbEM7QUFDQSxhQUZNLE1BRUE7QUFDTixxQkFBTyxLQUFQO0FBQ0E7QUFDRCxXQWZnQyxDQUFqQzs7QUFnQkEsZUFBSyxJQUFJZ0ksQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR3lkLHdCQUF3QixDQUFDaGtCLE1BQTdDLEVBQXFEdUcsQ0FBQyxFQUF0RCxFQUEwRDtBQUN6RHNkLFlBQUFBLGdCQUFnQixHQUFHRyx3QkFBd0IsQ0FBQ3pkLENBQUQsQ0FBM0M7O0FBQ0EsZ0JBQ0NzZCxnQkFBZ0IsSUFDaEJBLGdCQUFnQixDQUFDN2YsY0FEakIsSUFFQSxFQUFFNmYsZ0JBQWdCLENBQUM3ZixjQUFqQixDQUFnQ0EsY0FBaEMsQ0FBK0M5RSxPQUEvQyxDQUF1RCxHQUF2RCxNQUFnRSxDQUFsRSxDQUhELEVBSUU7QUFDRDBrQixjQUFBQSwyQkFBMkIsQ0FBQ25mLElBQTVCLENBQWlDb2YsZ0JBQWdCLENBQUMzQyx5QkFBbEQ7QUFDQUcsY0FBQUEsZ0JBQWdCLENBQUM1YyxJQUFqQixDQUFzQjtBQUNyQlQsZ0JBQUFBLGNBQWMsRUFBRTZmLGdCQUFnQixDQUFDN2YsY0FBakIsQ0FBZ0NBLGNBRDNCO0FBRXJCMkIsZ0JBQUFBLGtCQUFrQixFQUFFa2UsZ0JBQWdCLENBQUNsZSxrQkFGaEI7QUFHckI4TCxnQkFBQUEsSUFBSSxFQUFFdVMsd0JBQXdCLENBQUN6ZCxDQUFELENBQXhCLENBQTRCMGE7QUFIYixlQUF0QjtBQUtBRyxjQUFBQSxpQkFBaUIsQ0FBQzNjLElBQWxCLENBQXVCWixtQkFBbUIsQ0FBQ3NnQixpQkFBcEIsQ0FBc0MsQ0FBQ04sZ0JBQWdCLENBQUMzQyx5QkFBbEIsQ0FBdEMsQ0FBdkI7QUFDQTtBQUNEOztBQUNELGlCQUFPcGQsV0FBVyxDQUFDc2dCLHFCQUFaLENBQWtDaEQsaUJBQWxDLEVBQXFEQyxnQkFBckQsRUFBdUVuUixxQkFBdkUsRUFBOEZvUixZQUE5RixDQUFQO0FBQ0EsU0FyQ0YsRUFzQ0VsYSxLQXRDRixDQXNDUSxVQUFVQyxNQUFWLEVBQXVCO0FBQzdCQyxVQUFBQSxHQUFHLENBQUNDLEtBQUosQ0FBVSw0REFBVixFQUF3RUYsTUFBeEU7QUFDQSxTQXhDRjtBQXlDQTtBQUNELEtBekVELE1BeUVPO0FBQ04sYUFBT3FJLE9BQU8sQ0FBQ0MsT0FBUixFQUFQO0FBQ0E7QUFDRDs7QUFDRCxXQUFTMFUscUJBQVQsQ0FBK0JDLDZCQUEvQixFQUFtRUMsWUFBbkUsRUFBc0Y7QUFDckYsUUFBTXZpQixrQkFBa0IsR0FBRzhCLFdBQVcsQ0FBQzlCLGtCQUF2Qzs7QUFDQSxRQUFJdWlCLFlBQVksS0FBS3ZpQixrQkFBa0IsQ0FBQ3dpQixtQkFBcEMsSUFBMkRELFlBQVksS0FBS3ZpQixrQkFBa0IsQ0FBQ3lpQix5QkFBbkcsRUFBOEg7QUFDN0gsVUFBSUMsTUFBTSxHQUFHLEVBQWI7O0FBQ0EsVUFBSUosNkJBQTZCLElBQUlBLDZCQUE2QixDQUFDQyxZQUFELENBQWxFLEVBQWtGO0FBQ2pGRyxRQUFBQSxNQUFNLEdBQUdKLDZCQUE2QixDQUFDQyxZQUFELENBQTdCLENBQTRDSSxHQUE1QyxDQUFnRCxVQUFVQyxTQUFWLEVBQTBCO0FBQ2xGLGlCQUFPQSxTQUFTLENBQUN4akIsYUFBakI7QUFDQSxTQUZRLENBQVQ7QUFHQTs7QUFDRCxhQUFPc2pCLE1BQVA7QUFDQSxLQVJELE1BUU8sSUFBSUgsWUFBWSxLQUFLdmlCLGtCQUFrQixDQUFDNmlCLG1CQUF4QyxFQUE2RDtBQUNuRSxVQUFNQyxtQkFBd0IsR0FBRyxFQUFqQzs7QUFDQSxVQUFJUiw2QkFBNkIsSUFBSUEsNkJBQTZCLENBQUNTLDRCQUFuRSxFQUFpRztBQUNoR1QsUUFBQUEsNkJBQTZCLENBQUNTLDRCQUE5QixDQUEyRHhsQixPQUEzRCxDQUFtRSxVQUFVcWxCLFNBQVYsRUFBMEI7QUFDNUY7QUFDQSxjQUFJRSxtQkFBbUIsQ0FBQ0YsU0FBUyxDQUFDSSxRQUFWLENBQW1CNWpCLGFBQXBCLENBQXZCLEVBQTJEO0FBQzFEMGpCLFlBQUFBLG1CQUFtQixDQUFDRixTQUFTLENBQUNJLFFBQVYsQ0FBbUI1akIsYUFBcEIsQ0FBbkIsQ0FBc0RxRCxJQUF0RCxDQUEyRG1nQixTQUFTLENBQUNLLGtCQUFyRTtBQUNBLFdBRkQsTUFFTztBQUNOSCxZQUFBQSxtQkFBbUIsQ0FBQ0YsU0FBUyxDQUFDSSxRQUFWLENBQW1CNWpCLGFBQXBCLENBQW5CLEdBQXdELENBQUN3akIsU0FBUyxDQUFDSyxrQkFBWCxDQUF4RDtBQUNBO0FBQ0QsU0FQRDtBQVFBOztBQUNELGFBQU9ILG1CQUFQO0FBQ0EsS0F2Qm9GLENBd0JyRjs7O0FBQ0EsV0FBT1IsNkJBQVA7QUFDQTs7QUFDRCxXQUFTelEsMkJBQVQsQ0FBcUN4VCxjQUFyQyxFQUEwRFQsVUFBMUQsRUFBMkU7QUFDMUUsUUFBTXVmLElBQVMsR0FBRyxFQUFsQjtBQUFBLFFBQ0NuZCxrQkFBa0IsR0FBRzhCLFdBQVcsQ0FBQzlCLGtCQURsQztBQUFBLFFBRUNELG1CQUFtQixHQUFHMUIsY0FBYyxHQUFHVCxVQUFVLENBQUNPLFNBQVgsQ0FBcUJFLGNBQWMsR0FBRywrQ0FBdEMsQ0FBSCxHQUE0RixFQUZqSTtBQUdBOGUsSUFBQUEsSUFBSSxDQUFDbmQsa0JBQWtCLENBQUN3aUIsbUJBQXBCLENBQUosR0FBK0NILHFCQUFxQixDQUFDdGlCLG1CQUFELEVBQXNCQyxrQkFBa0IsQ0FBQ3dpQixtQkFBekMsQ0FBckIsSUFBc0YsRUFBckk7QUFDQXJGLElBQUFBLElBQUksQ0FBQ25kLGtCQUFrQixDQUFDeWlCLHlCQUFwQixDQUFKLEdBQ0NKLHFCQUFxQixDQUFDdGlCLG1CQUFELEVBQXNCQyxrQkFBa0IsQ0FBQ3lpQix5QkFBekMsQ0FBckIsSUFBNEYsRUFEN0YsQ0FMMEUsQ0FPMUU7O0FBQ0F0RixJQUFBQSxJQUFJLENBQUNuZCxrQkFBa0IsQ0FBQzZpQixtQkFBcEIsQ0FBSixHQUErQ1IscUJBQXFCLENBQUN0aUIsbUJBQUQsRUFBc0JDLGtCQUFrQixDQUFDNmlCLG1CQUF6QyxDQUFyQixJQUFzRixFQUFySTtBQUVBLFFBQU1LLFVBQVUsR0FBRzdrQixjQUFjLENBQUM1QixLQUFmLENBQXFCLEdBQXJCLENBQW5COztBQUVBLFFBQUl5bUIsVUFBVSxDQUFDbGxCLE1BQVgsR0FBb0IsQ0FBeEIsRUFBMkI7QUFDMUI7QUFDQTtBQUNBLFVBQU1NLGVBQWUsR0FBRzRrQixVQUFVLENBQUNBLFVBQVUsQ0FBQ2xsQixNQUFYLEdBQW9CLENBQXJCLENBQWxDO0FBQ0FrbEIsTUFBQUEsVUFBVSxDQUFDMWpCLE1BQVgsQ0FBa0IsQ0FBQyxDQUFuQixFQUFzQixDQUF0QixFQUowQixDQUlBOztBQUMxQixVQUFNMmpCLG9CQUFvQixHQUFHRCxVQUFVLENBQUN2akIsSUFBWCxDQUFnQixHQUFoQixDQUE3QjtBQUNBLFVBQU0xQix1QkFBdUIsR0FBRzZELFdBQVcsQ0FBQzVELHlCQUFaLENBQXNDTixVQUF0QyxFQUFrRHVsQixvQkFBbEQsRUFBd0U3a0IsZUFBeEUsQ0FBaEM7QUFDQSxVQUFNOGtCLDZCQUE2QixHQUFHbmxCLHVCQUF1QixJQUFJQSx1QkFBdUIsQ0FBQyxvQkFBRCxDQUF4RjtBQUNBa2YsTUFBQUEsSUFBSSxDQUFDbmQsa0JBQWtCLENBQUN3aUIsbUJBQXBCLENBQUosQ0FBNkNuYyxNQUE3QyxDQUNDZ2MscUJBQXFCLENBQUNlLDZCQUFELEVBQWdDcGpCLGtCQUFrQixDQUFDd2lCLG1CQUFuRCxDQUFyQixJQUFnRyxFQURqRztBQUdBckYsTUFBQUEsSUFBSSxDQUFDbmQsa0JBQWtCLENBQUN5aUIseUJBQXBCLENBQUosQ0FBbURwYyxNQUFuRCxDQUNDZ2MscUJBQXFCLENBQUNlLDZCQUFELEVBQWdDcGpCLGtCQUFrQixDQUFDeWlCLHlCQUFuRCxDQUFyQixJQUFzRyxFQUR2RyxFQVgwQixDQWMxQjs7QUFDQXRGLE1BQUFBLElBQUksQ0FBQ25kLGtCQUFrQixDQUFDNmlCLG1CQUFwQixDQUFKLEdBQStDdkMsWUFBWSxDQUMxRCxFQUQwRCxFQUUxRCtCLHFCQUFxQixDQUFDZSw2QkFBRCxFQUFnQ3BqQixrQkFBa0IsQ0FBQzZpQixtQkFBbkQsQ0FBckIsSUFBZ0csRUFGdEMsRUFHMUQxRixJQUFJLENBQUNuZCxrQkFBa0IsQ0FBQzZpQixtQkFBcEIsQ0FIc0QsQ0FBM0Q7QUFLQTs7QUFFRCxXQUFPMUYsSUFBUDtBQUNBOztBQUNELFdBQVNrRyx1QkFBVCxDQUFpQ0MsYUFBakMsRUFBcURDLHFCQUFyRCxFQUFpRkMsUUFBakYsRUFBZ0dDLFNBQWhHLEVBQWlIO0FBQ2hIRCxJQUFBQSxRQUFRLEdBQUdBLFFBQVEsSUFBSSxFQUF2Qjs7QUFDQSxRQUFJQyxTQUFKLEVBQWU7QUFDZCxhQUFPQSxTQUFTLENBQUNKLHVCQUFWLENBQWtDQyxhQUFsQyxFQUFpREMscUJBQWpELEVBQXdFQyxRQUFRLENBQUNFLElBQWpGLEVBQXVGeGUsSUFBdkYsQ0FBNEYsVUFBVXllLFNBQVYsRUFBMEI7QUFDNUg7QUFDQSxlQUFPRixTQUFTLENBQUNHLE9BQVYsS0FBc0IsU0FBdEIsSUFBbUNELFNBQVMsQ0FBQzNsQixNQUFWLEdBQW1CLENBQXRELEdBQTBEMmxCLFNBQVMsQ0FBQyxDQUFELENBQW5FLEdBQXlFQSxTQUFoRjtBQUNBLE9BSE0sQ0FBUDtBQUlBLEtBTEQsTUFLTztBQUNOLGFBQU9FLGdCQUFnQixHQUNyQjNlLElBREssQ0FDQSxZQUFZO0FBQ2pCLGVBQU80ZSxlQUFlLENBQUNDLE9BQWhCLENBQ05DLG9CQUFvQixDQUFDQyxZQUFyQixDQUFrQ1gsYUFBbEMsRUFBaUQsVUFBakQsQ0FETSxFQUVOO0FBQUVZLFVBQUFBLElBQUksRUFBRVo7QUFBUixTQUZNLEVBR05DLHFCQUhNLENBQVA7QUFLQSxPQVBLLEVBUUxyZSxJQVJLLENBUUEsVUFBVXllLFNBQVYsRUFBMEI7QUFDL0IsWUFBTXppQixRQUFRLEdBQUd5aUIsU0FBUyxDQUFDUSxpQkFBM0I7O0FBQ0EsWUFBSSxDQUFDLENBQUNYLFFBQVEsQ0FBQ1ksS0FBWCxJQUFvQmxqQixRQUF4QixFQUFrQztBQUNqQyxpQkFBT0EsUUFBUDtBQUNBOztBQUNELGVBQU9takIsUUFBUSxDQUFDQyxJQUFULENBQWM7QUFDcEJDLFVBQUFBLEVBQUUsRUFBRWYsUUFBUSxDQUFDZSxFQURPO0FBRXBCQyxVQUFBQSxVQUFVLEVBQUViLFNBRlE7QUFHcEJjLFVBQUFBLFVBQVUsRUFBRWpCLFFBQVEsQ0FBQ2lCO0FBSEQsU0FBZCxDQUFQO0FBS0EsT0FsQkssQ0FBUDtBQW1CQTtBQUNEOztBQUNELFdBQVNDLGdCQUFULENBQTBCalYsSUFBMUIsRUFBd0NrVixTQUF4QyxFQUF1RjtBQUN0RixRQUFNQyxLQUFLLEdBQUduVixJQUFJLENBQUNoVCxLQUFMLENBQVcsR0FBWCxFQUFnQnNVLE1BQWhCLENBQXVCOFQsT0FBdkIsQ0FBZDtBQUFBLFFBQ0NDLFlBQVksR0FBR0YsS0FBSyxDQUFDRyxHQUFOLEVBRGhCO0FBQUEsUUFFQ0MsY0FBYyxHQUFHSixLQUFLLENBQUNqbEIsSUFBTixDQUFXLEdBQVgsQ0FGbEI7QUFBQSxRQUdDcUosU0FBUyxHQUFHZ2MsY0FBYyxJQUFJTCxTQUFTLENBQUN4bUIsU0FBVixDQUFvQixNQUFNNm1CLGNBQTFCLENBSC9COztBQUlBLFFBQUksQ0FBQWhjLFNBQVMsU0FBVCxJQUFBQSxTQUFTLFdBQVQsWUFBQUEsU0FBUyxDQUFFZSxLQUFYLE1BQXFCLFdBQXpCLEVBQXNDO0FBQ3JDLFVBQU1rYixhQUFhLEdBQUdMLEtBQUssQ0FBQ0EsS0FBSyxDQUFDNW1CLE1BQU4sR0FBZSxDQUFoQixDQUEzQjtBQUNBLGFBQU8sTUFBTWluQixhQUFOLEdBQXNCLEdBQXRCLEdBQTRCSCxZQUFuQztBQUNBOztBQUNELFdBQU92b0IsU0FBUDtBQUNBOztBQUNELFdBQVN3Uix3QkFBVCxDQUFrQzBCLElBQWxDLEVBQWdEeVYsS0FBaEQsRUFBbUU7QUFDbEUsUUFBSSxDQUFDelYsSUFBRCxJQUFTLENBQUN5VixLQUFkLEVBQXFCO0FBQ3BCLGFBQU94WCxPQUFPLENBQUNDLE9BQVIsQ0FBZ0IsSUFBaEIsQ0FBUDtBQUNBOztBQUNELFFBQU1nWCxTQUFTLEdBQUdPLEtBQUssQ0FBQ3BlLFlBQU4sRUFBbEIsQ0FKa0UsQ0FLbEU7O0FBQ0EsUUFBTXFlLFlBQVksR0FBR1QsZ0JBQWdCLENBQUNqVixJQUFELEVBQU9rVixTQUFQLENBQXJDOztBQUNBLFFBQUlRLFlBQUosRUFBa0I7QUFDakIsVUFBTUMsZUFBZSxHQUFHRixLQUFLLENBQUNHLFlBQU4sQ0FBbUJGLFlBQW5CLENBQXhCO0FBQ0EsYUFBT0MsZUFBZSxDQUFDRSxZQUFoQixFQUFQO0FBQ0E7O0FBRUQsV0FBTzVYLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixJQUFoQixDQUFQO0FBQ0E7O0FBQ0QsV0FBUzRYLHFCQUFULENBQStCcmtCLFFBQS9CLEVBQWtEc2tCLFVBQWxELEVBQXNFQyxRQUF0RSxFQUEwRjtBQUN6RixRQUFJQyxZQUFKOztBQUNBLFFBQU1DLGNBQWMsR0FBRyxZQUFZO0FBQ2xDLFVBQUlELFlBQUosRUFBa0I7QUFDakIsWUFBSSxDQUFDQSxZQUFZLENBQUNFLE1BQWxCLEVBQTBCO0FBQ3pCRixVQUFBQSxZQUFZLENBQUNFLE1BQWIsR0FBc0IsRUFBdEI7QUFDQTs7QUFDRCxZQUFJLENBQUNGLFlBQVksQ0FBQ0UsTUFBYixDQUFvQkosVUFBcEIsQ0FBTCxFQUFzQztBQUNyQ0UsVUFBQUEsWUFBWSxDQUFDRSxNQUFiLENBQW9CSixVQUFwQixJQUFrQ0MsUUFBbEM7QUFDQSxTQUZELE1BRU87QUFDTixjQUFNSSxnQkFBZ0IsR0FBR0gsWUFBWSxDQUFDRSxNQUFiLENBQW9CSixVQUFwQixDQUF6Qjs7QUFDQUUsVUFBQUEsWUFBWSxDQUFDRSxNQUFiLENBQW9CSixVQUFwQixJQUFrQyxZQUEwQjtBQUFBLDhDQUFiTSxJQUFhO0FBQWJBLGNBQUFBLElBQWE7QUFBQTs7QUFDM0RMLFlBQUFBLFFBQVEsQ0FBQ00sS0FBVCxPQUFBTixRQUFRLEdBQU8sSUFBUCxTQUFnQkssSUFBaEIsRUFBUjtBQUNBRCxZQUFBQSxnQkFBZ0IsQ0FBQ0UsS0FBakIsT0FBQUYsZ0JBQWdCLEdBQU8sSUFBUCxTQUFnQkMsSUFBaEIsRUFBaEI7QUFDQSxXQUhEO0FBSUE7QUFDRDtBQUNELEtBZkQ7O0FBZ0JBLFFBQUk1a0IsUUFBUSxDQUFDNEcsR0FBVCxDQUFhLGtCQUFiLENBQUosRUFBc0M7QUFDcEM1RyxNQUFBQSxRQUFELENBQ0U4a0IsZUFERixHQUVFOWdCLElBRkYsQ0FFTyxZQUFZO0FBQ2pCd2dCLFFBQUFBLFlBQVksR0FBSXhrQixRQUFELENBQWtCK2tCLGtCQUFsQixHQUF1Q0MsU0FBdkMsQ0FBaURobEIsUUFBakQsRUFBMkRpbEIsY0FBM0QsQ0FBMEUsTUFBMUUsQ0FBZjtBQUNBUixRQUFBQSxjQUFjO0FBQ2QsT0FMRixFQU1FdmdCLEtBTkYsQ0FNUSxVQUFVZ2hCLE1BQVYsRUFBdUI7QUFDN0I5Z0IsUUFBQUEsR0FBRyxDQUFDQyxLQUFKLENBQVU2Z0IsTUFBVjtBQUNBLE9BUkY7QUFTQSxLQVZELE1BVU87QUFDTlYsTUFBQUEsWUFBWSxHQUFHeGtCLFFBQVEsQ0FBQ3NKLElBQVQsQ0FBYyxpQkFBZCxDQUFmO0FBQ0FtYixNQUFBQSxjQUFjO0FBQ2Q7QUFDRDs7QUFDRCxXQUFTOUIsZ0JBQVQsR0FBNEI7QUFDM0IsV0FBTyxJQUFJblcsT0FBSixDQUFrQixVQUFVQyxPQUFWLEVBQW1CO0FBQzNDMFksTUFBQUEsR0FBRyxDQUFDQyxFQUFKLENBQU9DLE9BQVAsQ0FBZSxDQUFDLDRCQUFELENBQWYsRUFBK0M7QUFBVTtBQUFWLFNBQTRCO0FBQzFFNVksUUFBQUEsT0FBTztBQUNQLE9BRkQ7QUFHQSxLQUpNLENBQVA7QUFLQTs7QUFFRCxXQUFTNlksd0JBQVQsQ0FBa0NDLFFBQWxDLEVBQW9EQyxVQUFwRCxFQUF3RXRvQixNQUF4RSxFQUE0RnVvQixTQUE1RixFQUE4RztBQUM3RyxRQUFNQyxZQUFZLEdBQUloYixJQUFELENBQWlCQyx3QkFBakIsQ0FBMEMsYUFBMUMsQ0FBckI7QUFBQSxRQUNDSSxXQUFXLEdBQUd5YSxVQURmO0FBQUEsUUFFQ0csZ0JBQWdCLEdBQUdELFlBQVksQ0FBQ2piLE9BQWIsQ0FBcUIsUUFBckIsQ0FGcEI7O0FBR0EsUUFBSWdiLFNBQVMsQ0FBQzNvQixNQUFWLEtBQXFCLENBQXpCLEVBQTRCO0FBQzNCLFVBQU15YyxRQUFRLEdBQUdrTSxTQUFTLENBQUMsQ0FBRCxDQUFULENBQWFHLE9BQWIsR0FBdUIsSUFBdkIsR0FBOEJGLFlBQVksQ0FBQ2piLE9BQWIsQ0FBcUIsU0FBckIsQ0FBL0M7QUFDQSxVQUFNb2IsYUFBYSxHQUFHLElBQUlyWixPQUFKLENBQVksVUFBVUMsT0FBVixFQUFtQjtBQUNwRHFaLFFBQUFBLFVBQVUsQ0FBQ3ZaLE9BQVgsQ0FBbUJnTixRQUFuQixFQUE2QjtBQUM1QndNLFVBQUFBLEtBQUssRUFBRUwsWUFBWSxDQUFDamIsT0FBYixDQUFxQixTQUFyQixDQURxQjtBQUU1QnViLFVBQUFBLE9BQU8sRUFBRSxDQUFDamIsV0FBRCxFQUFjNGEsZ0JBQWQsQ0FGbUI7QUFHNUJNLFVBQUFBLGdCQUFnQixFQUFFbGIsV0FIVTtBQUk1Qm1iLFVBQUFBLE9BQU8sRUFBRSxVQUFVbGtCLE9BQVYsRUFBMkI7QUFDbkMsZ0JBQUlBLE9BQU8sS0FBSytJLFdBQWhCLEVBQTZCO0FBQzVCMEIsY0FBQUEsT0FBTyxDQUFDLElBQUQsQ0FBUDtBQUNBdlAsY0FBQUEsTUFBTSxDQUFDaXBCLFdBQVAsQ0FBbUJaLFFBQW5CO0FBQ0EsYUFIRCxNQUdPO0FBQ045WSxjQUFBQSxPQUFPLENBQUMsS0FBRCxDQUFQO0FBQ0E7QUFDRDtBQVgyQixTQUE3QjtBQWFBLE9BZHFCLENBQXRCO0FBZUEsYUFBT29aLGFBQVA7QUFDQTs7QUFDRCxXQUFPLElBQUlyWixPQUFKLENBQVksVUFBVUMsT0FBVixFQUFtQjtBQUNyQyxVQUFNMlosbUJBQW1CLEdBQUcsSUFBSUMsU0FBSixFQUE1QjtBQUNBRCxNQUFBQSxtQkFBbUIsQ0FBQ0UsT0FBcEIsQ0FBNEJiLFNBQTVCO0FBQ0EsVUFBTWMsbUJBQW1CLEdBQUcsSUFBNUI7QUFDQSxVQUFNQyxjQUFjLEdBQUdDLGVBQWUsQ0FBQ0MsMkJBQWhCLENBQTRDTixtQkFBNUMsRUFBaUVHLG1CQUFqRSxDQUF2QjtBQUNBLFVBQU1JLE9BQU8sR0FBRyxJQUFJQyxNQUFKLENBQVc7QUFDMUJDLFFBQUFBLFNBQVMsRUFBRSxJQURlO0FBRTFCQyxRQUFBQSxPQUFPLEVBQUVOLGNBQWMsQ0FBQ08sWUFGRTtBQUcxQkMsUUFBQUEsS0FBSyxFQUFFLFNBSG1CO0FBSTFCQyxRQUFBQSxZQUFZLEVBQUUsSUFBSUMsR0FBSixDQUFRO0FBQ3JCQyxVQUFBQSxXQUFXLEVBQUUsQ0FBQ1gsY0FBYyxDQUFDWSxXQUFoQixDQURRO0FBRXJCQyxVQUFBQSxhQUFhLEVBQUUsQ0FBQyxJQUFJQyxLQUFKLENBQVU7QUFBRXJsQixZQUFBQSxJQUFJLEVBQUU7QUFBUixXQUFWLENBQUQ7QUFGTSxTQUFSLENBSlk7QUFRMUJzbEIsUUFBQUEsYUFBYSxFQUFFLEtBUlc7QUFTMUJDLFFBQUFBLFlBQVksRUFBRSxLQVRZO0FBVTFCQyxRQUFBQSxpQkFBaUIsRUFBRTtBQVZPLE9BQVgsQ0FBaEI7QUFZQWQsTUFBQUEsT0FBTyxDQUFDZSxjQUFSLENBQ0MsSUFBSUMsTUFBSixDQUFXO0FBQ1ZDLFFBQUFBLEtBQUssRUFBRSxZQUFZO0FBQ2xCbmIsVUFBQUEsT0FBTyxDQUFDLElBQUQsQ0FBUDtBQUNBdlAsVUFBQUEsTUFBTSxDQUFDaXBCLFdBQVAsQ0FBbUJaLFFBQW5CO0FBQ0FvQixVQUFBQSxPQUFPLENBQUNrQixLQUFSO0FBQ0EsU0FMUztBQU1WQyxRQUFBQSxJQUFJLEVBQUUsWUFOSTtBQU9WN2xCLFFBQUFBLElBQUksRUFBRWdJLGlCQUFpQixDQUFDLFFBQUQsRUFBV3liLFlBQVgsRUFBeUIzYSxXQUF6QjtBQVBiLE9BQVgsQ0FERDtBQVdBNGIsTUFBQUEsT0FBTyxDQUFDb0IsWUFBUixDQUNDLElBQUlKLE1BQUosQ0FBVztBQUNWQyxRQUFBQSxLQUFLLEVBQUUsWUFBWTtBQUNsQm5iLFVBQUFBLE9BQU8sQ0FBQyxLQUFELENBQVA7QUFDQWthLFVBQUFBLE9BQU8sQ0FBQ2tCLEtBQVI7QUFDQSxTQUpTO0FBS1Y1bEIsUUFBQUEsSUFBSSxFQUFFMGpCO0FBTEksT0FBWCxDQUREO0FBU0FnQixNQUFBQSxPQUFPLENBQUNxQixJQUFSO0FBQ0EsS0F0Q00sQ0FBUDtBQXVDQTs7QUFFRCxXQUFTQyxnQkFBVCxDQUEwQmpvQixRQUExQixFQUFpRDtBQUNoRCxRQUFJLENBQUNBLFFBQUQsSUFBYUEsUUFBUSxDQUFDNEcsR0FBVCxDQUFhLHlCQUFiLENBQWpCLEVBQTBEO0FBQ3pELGFBQU8sRUFBUDtBQUNBOztBQUNELFFBQU1zaEIsbUJBQW1CLEdBQUdsb0IsUUFBUSxDQUFDbUgsU0FBVCxHQUFxQmdoQixrQkFBckIsR0FBMENDLGVBQXRFO0FBQ0EsUUFBTTFyQixVQUFVLEdBQUdzRCxRQUFRLElBQUtBLFFBQVEsQ0FBQzJGLFFBQVQsR0FBb0JDLFlBQXBCLEVBQWhDO0FBQUEsUUFDQ3lpQixxQkFBcUIsR0FBR3JvQixRQUFRLENBQUNzSixJQUFULENBQWMsVUFBZCxDQUR6QjtBQUVBLFFBQU05RixjQUFjLEdBQUc5RyxVQUFVLENBQUNPLFNBQVgsQ0FBcUJvckIscUJBQXFCLEdBQUcsYUFBN0MsQ0FBdkI7QUFDQSxRQUFNQyxzQkFBZ0MsR0FBRyxFQUF6QztBQUVBOWtCLElBQUFBLGNBQWMsQ0FBQ25ILE9BQWYsQ0FBdUIsVUFBVWtzQixZQUFWLEVBQWdDO0FBQ3RELFVBQUlBLFlBQVksS0FBSyxnQkFBckIsRUFBdUM7QUFDdENELFFBQUFBLHNCQUFzQixDQUFDL21CLElBQXZCLENBQTRCZ25CLFlBQTVCO0FBQ0E7QUFDRCxLQUpEO0FBS0EsUUFBTUMsa0JBQWtCLEdBQUd4b0IsUUFBUSxDQUFDbUgsU0FBVCxHQUFxQmdoQixrQkFBckIsR0FBMENNLFlBQXJFO0FBRUEsUUFBTUMsZUFBb0IsR0FBRyxFQUE3QjtBQUNBLFFBQU1DLGFBQWEsR0FBRzNvQixRQUFRLENBQUM0b0IsVUFBVCxFQUF0QjtBQUNBRCxJQUFBQSxhQUFhLENBQUN0c0IsT0FBZCxDQUFzQixVQUFVd3NCLE9BQVYsRUFBd0I7QUFDN0MsVUFBTUMsZUFBZSxHQUFHRCxPQUFPLENBQUNFLEtBQVIsR0FBZ0J4dEIsS0FBaEIsQ0FBc0IsSUFBdEIsQ0FBeEI7QUFDQW10QixNQUFBQSxlQUFlLENBQUNubkIsSUFBaEIsQ0FBcUJ1bkIsZUFBZSxDQUFDQSxlQUFlLENBQUNoc0IsTUFBaEIsR0FBeUIsQ0FBMUIsQ0FBcEM7QUFDQSxLQUhEO0FBSUEsUUFBSWtzQixjQUFzQixHQUFHLEVBQTdCLENBdkJnRCxDQXVCZjs7QUFDakMsUUFBSWQsbUJBQW1CLEtBQUs3c0IsU0FBeEIsSUFBcUNxdEIsZUFBZSxDQUFDMXNCLE9BQWhCLENBQXdCa3NCLG1CQUF4QixNQUFpRCxDQUFDLENBQTNGLEVBQThGO0FBQzdGYyxNQUFBQSxjQUFjLEdBQUdkLG1CQUFqQjtBQUNBLEtBRkQsTUFFTyxJQUNOTSxrQkFBa0IsS0FBS250QixTQUF2QixJQUNBbXRCLGtCQUFrQixDQUFDMXJCLE1BQW5CLEtBQThCLENBRDlCLElBRUE0ckIsZUFBZSxDQUFDMXNCLE9BQWhCLENBQXdCd3NCLGtCQUFrQixDQUFDLENBQUQsQ0FBMUMsTUFBbUQsQ0FBQyxDQUg5QyxFQUlMO0FBQ0RRLE1BQUFBLGNBQWMsR0FBR1Isa0JBQWtCLENBQUMsQ0FBRCxDQUFuQztBQUNBLEtBTk0sQ0FPUDtBQVBPLFNBUUYsSUFBSUYsc0JBQXNCLEtBQUtqdEIsU0FBM0IsSUFBd0NpdEIsc0JBQXNCLENBQUN4ckIsTUFBdkIsS0FBa0MsQ0FBOUUsRUFBaUY7QUFDckZrc0IsTUFBQUEsY0FBYyxHQUFHVixzQkFBc0IsQ0FBQyxDQUFELENBQXZDO0FBQ0E7O0FBQ0QsV0FBT1UsY0FBUDtBQUNBOztBQUVELFdBQVNDLG1CQUFULENBQ0N6RyxJQURELEVBRUMwRyxjQUZELEVBR0NDLFVBSEQsRUFJQ0MsUUFKRCxFQUtDQyxnQkFMRCxFQU1DQyxTQU5ELEVBT0NuZixlQVBELEVBUUNvZixrQkFSRCxFQVNVO0FBQ1QsUUFBSUMsS0FBSyxHQUFHLEVBQVo7O0FBQ0EsUUFBSUosUUFBSixFQUFjO0FBQ2IsVUFBTUssTUFBTSxHQUFHakgsSUFBSSxDQUFDa0gsYUFBTCxHQUFxQkMsZUFBckIsRUFBZjtBQUNBLFVBQU1DLGlCQUFpQixHQUFHSCxNQUFNLENBQUNuZ0IsSUFBUCxDQUFZLGdCQUFaLE1BQWtDLE1BQTVEO0FBQ0EsVUFBTXVnQixvQkFBb0IsR0FBR25mLElBQUksQ0FBQ0Msd0JBQUwsQ0FBOEIsZUFBOUIsQ0FBN0I7QUFDQTBlLE1BQUFBLGdCQUFnQixHQUFHQSxnQkFBZ0IsSUFBSUgsY0FBYyxDQUFDcFUsUUFBZixDQUF3QitVLG9CQUFvQixDQUFDcGYsT0FBckIsQ0FBNkIsb0JBQTdCLENBQXhCLENBQXZDOztBQUNBLFVBQUl5ZSxjQUFjLENBQUNwc0IsTUFBZixLQUEwQixDQUExQixJQUErQnVzQixnQkFBL0IsSUFBbURPLGlCQUF2RCxFQUEwRTtBQUN6RUosUUFBQUEsS0FBSyxHQUFHcmYsZUFBZSxDQUFDTSxPQUFoQixDQUF3QiwwREFBeEIsQ0FBUjtBQUNBLE9BRkQsTUFFTyxJQUFJeWUsY0FBYyxDQUFDcHNCLE1BQWYsS0FBMEIsQ0FBMUIsSUFBK0I4c0IsaUJBQW5DLEVBQXNEO0FBQzVESixRQUFBQSxLQUFLLEdBQUdyZixlQUFlLENBQUNNLE9BQWhCLENBQXdCLDRDQUF4QixDQUFSO0FBQ0EsT0FGTSxNQUVBO0FBQ04sWUFBTXFmLFNBQVMsR0FDZCwwQkFDQ1osY0FBYyxDQUFDcHNCLE1BQWYsS0FBMEIsQ0FBMUIsR0FBOEIsUUFBOUIsR0FBeUMsT0FEMUMsSUFFQSxrQkFGQSxJQUdDaXRCLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQixPQUFqQixHQUEyQixPQUg1QixDQUREO0FBS0FSLFFBQUFBLEtBQUssR0FBR3JmLGVBQWUsQ0FBQ00sT0FBaEIsQ0FBd0JxZixTQUF4QixFQUFtQyxDQUFDWixjQUFjLENBQUN6cUIsSUFBZixDQUFvQixJQUFwQixDQUFELENBQW5DLENBQVI7QUFDQTtBQUNELEtBakJELE1BaUJPO0FBQ04sVUFBTXFyQixVQUFTLEdBQ2IsdUJBQ0NaLGNBQWMsQ0FBQ3BzQixNQUFmLEtBQTBCLENBQTFCLEdBQThCLFFBQTlCLEdBQXlDLE9BRDFDLElBRUEsa0JBRkEsSUFHQ2l0QixNQUFNLENBQUNDLE9BQVAsR0FBaUIsT0FBakIsR0FBMkIsT0FINUIsQ0FERjtBQUFBLFVBS0NDLG9CQUFvQixHQUFHVixrQkFBa0IsQ0FBQ0QsU0FBRCxFQUFZSCxVQUFaLENBTDFDOztBQU1BSyxNQUFBQSxLQUFLLEdBQUdyZixlQUFlLENBQUNNLE9BQWhCLENBQXdCcWYsVUFBeEIsRUFBbUMsQ0FBQ1osY0FBYyxDQUFDenFCLElBQWYsQ0FBb0IsSUFBcEIsQ0FBRCxFQUE0QndyQixvQkFBNUIsQ0FBbkMsQ0FBUjtBQUNBOztBQUNELFdBQU9ULEtBQVA7QUFDQSxHLENBRUQ7OztBQUNBLFdBQVNVLGdCQUFULENBQTBCcnRCLEtBQTFCLEVBQXNDa2YsVUFBdEMsRUFBdUQ7QUFDdEQsUUFBSXZkLFFBQUo7O0FBQ0EsUUFBSTNCLEtBQUssQ0FBQ2IsT0FBTixDQUFjLGdCQUFkLElBQWtDLENBQUMsQ0FBdkMsRUFBMEM7QUFDekN3QyxNQUFBQSxRQUFRLEdBQUczQixLQUFLLENBQUN0QixLQUFOLENBQVksZ0JBQVosRUFBOEIsQ0FBOUIsQ0FBWDtBQUNBLEtBRkQsTUFFTztBQUNOO0FBQ0EsVUFBTTR1QixPQUFPLEdBQUd0dEIsS0FBSyxDQUFDdEIsS0FBTixDQUFZLElBQVosRUFBa0IsQ0FBbEIsRUFBcUJBLEtBQXJCLENBQTJCLEdBQTNCLENBQWhCO0FBQ0FpRCxNQUFBQSxRQUFRLGNBQU8yckIsT0FBTyxDQUFDQSxPQUFPLENBQUNydEIsTUFBUixHQUFpQixDQUFsQixDQUFkLE1BQVI7QUFDQTs7QUFDRCxXQUFPMEIsUUFBUSxHQUFHdWQsVUFBbEI7QUFDQTs7QUFFRCxNQUFNbmIsV0FBVyxHQUFHO0FBQ25CMUIsSUFBQUEsb0JBQW9CLEVBQUVBLG9CQURIO0FBRW5Ca0ksSUFBQUEsOEJBQThCLEVBQUVBLDhCQUZiO0FBR25CTSxJQUFBQSxtQkFBbUIsRUFBRUEsbUJBSEY7QUFJbkIwaUIsSUFBQUEsZUFBZSxFQUFFbGtCLGlCQUpFO0FBS25CdEMsSUFBQUEsYUFBYSxFQUFFQSxhQUxJO0FBTW5CeW1CLElBQUFBLG1CQUFtQixFQUFFcHVCLHNCQU5GO0FBT25CcXVCLElBQUFBLHdCQUF3QixFQUFFNWtCLDBCQVBQO0FBUW5CNmtCLElBQUFBLHNCQUFzQixFQUFFN2pCLHdCQVJMO0FBU25CekcsSUFBQUEsZUFBZSxFQUFFQSxlQVRFO0FBVW5CdXFCLElBQUFBLHdCQUF3QixFQUFFMWhCLDBCQVZQO0FBV25CbUssSUFBQUEsd0JBQXdCLEVBQUV6SywwQkFYUDtBQVluQmlLLElBQUFBLGdCQUFnQixFQUFFQSxnQkFaQztBQWFuQmdZLElBQUFBLHNDQUFzQyxFQUFFbGhCLHdDQWJyQjtBQWNuQlUsSUFBQUEsaUJBQWlCLEVBQUVBLGlCQWRBO0FBZW5CbUIsSUFBQUEsZ0JBQWdCLEVBQUVBLGdCQWZDO0FBZ0JuQlAsSUFBQUEsYUFBYSxFQUFFQSxhQWhCSTtBQWlCbkJXLElBQUFBLGtCQUFrQixFQUFFQSxrQkFqQkQ7QUFrQm5CcUMsSUFBQUEsbUJBQW1CLEVBQUVBLG1CQWxCRjtBQW1CbkJrSyxJQUFBQSxnQkFBZ0IsRUFBRUEsZ0JBbkJDO0FBb0JuQnhILElBQUFBLHVCQUF1QixFQUFFQSx1QkFwQk47QUFxQm5COEQsSUFBQUEsK0JBQStCLEVBQUVBLCtCQXJCZDtBQXNCbkI2QixJQUFBQSx5Q0FBeUMsRUFBRUEseUNBdEJ4QjtBQXVCbkJQLElBQUFBLGdDQUFnQyxFQUFFQSxnQ0F2QmY7QUF3Qm5CeUMsSUFBQUEseUJBQXlCLEVBQUVBLHlCQXhCUjtBQXlCbkJPLElBQUFBLDJCQUEyQixFQUFFQSwyQkF6QlY7QUEwQm5CcUIsSUFBQUEsZUFBZSxFQUFFQSxlQTFCRTtBQTJCbkJqYSxJQUFBQSxnQkFBZ0IsRUFBRUEsZ0JBM0JDO0FBNEJuQkcsSUFBQUEsT0FBTyxFQUFFQSxPQTVCVTtBQTZCbkJ3cUIsSUFBQUEsYUFBYSxFQUFFMWhCLGVBN0JJO0FBOEJuQjJULElBQUFBLDZDQUE2QyxFQUFFQSw2Q0E5QjVCO0FBK0JuQk4sSUFBQUEsd0JBQXdCLEVBQUVBLHdCQS9CUDtBQWdDbkJtQixJQUFBQSx5QkFBeUIsRUFBRUEseUJBaENSO0FBaUNuQm9ELElBQUFBLHdCQUF3QixFQUFFdkIsMEJBakNQO0FBa0NuQnNMLElBQUFBLCtCQUErQixFQUFFcEwsaUNBbENkO0FBbUNuQkQsSUFBQUEsMEJBQTBCLEVBQUUxQiw0QkFuQ1Q7QUFvQ25Cc0QsSUFBQUEscUJBQXFCLEVBQUVqRCw0QkFwQ0o7QUFxQ25CdGlCLElBQUFBLG1CQUFtQixFQUFFQSxtQkFyQ0Y7QUFzQ25CcUIsSUFBQUEseUJBQXlCLEVBQUVBLHlCQXRDUjtBQXVDbkJSLElBQUFBLHFCQUFxQixFQUFFQSxxQkF2Q0o7QUF3Q25CbVUsSUFBQUEsMkJBQTJCLEVBQUVBLDJCQXhDVjtBQXlDbkJYLElBQUFBLDRCQUE0QixFQUFFQSw0QkF6Q1g7QUEwQ25CMkwsSUFBQUEsNEJBQTRCLEVBQUVBLDRCQTFDWDtBQTJDbkI5TyxJQUFBQSx3QkFBd0IsRUFBRUEsd0JBM0NQO0FBNENuQnNWLElBQUFBLHVCQUF1QixFQUFFQSx1QkE1Q047QUE2Q25Ca0MsSUFBQUEscUJBQXFCLEVBQUVBLHFCQTdDSjtBQThDbkI1VixJQUFBQSxpQkFBaUIsRUFBRUEsaUJBOUNBO0FBK0NuQjNQLElBQUFBLGtCQUFrQixFQUFFO0FBQ25Cd2lCLE1BQUFBLG1CQUFtQixFQUFFLG9CQURGO0FBRW5CQyxNQUFBQSx5QkFBeUIsRUFBRSx5QkFGUjtBQUduQkksTUFBQUEsbUJBQW1CLEVBQUU7QUFIRixLQS9DRDtBQW9EbkJ4UixJQUFBQSxzQkFBc0IsRUFBRSxDQUFDLGFBQUQsRUFBZ0IsWUFBaEIsRUFBOEIsYUFBOUIsRUFBNkMsWUFBN0MsRUFBMkQsa0JBQTNELEVBQStFLDhCQUEvRSxDQXBETDtBQXFEbkJoVixJQUFBQSxtQkFBbUIsRUFBRUEsbUJBckRGO0FBc0RuQm1xQixJQUFBQSx3QkFBd0IsRUFBRUEsd0JBdERQO0FBdURuQjlCLElBQUFBLGdCQUFnQixFQUFFQSxnQkF2REM7QUF3RG5CeUYsSUFBQUEsbUJBQW1CLEVBQUVBLG1CQXhERjtBQXlEbkJoQixJQUFBQSxnQkFBZ0IsRUFBRUEsZ0JBekRDO0FBMERuQmlDLElBQUFBLGdCQUFnQixFQUFFQSxnQkExREM7QUEyRG5CM1gsSUFBQUEsMkJBQTJCLEVBQUVBO0FBM0RWLEdBQXBCO1NBOERlM1IsVyIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZU9iamVjdHMgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVDYXRlZ29yeVR5cGUsIElzc3VlU2V2ZXJpdHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHtcblx0QmluZGluZ0V4cHJlc3Npb24sXG5cdGJpbmRpbmdFeHByZXNzaW9uLFxuXHRjb21waWxlQmluZGluZyxcblx0Y29uc3RhbnQsXG5cdG5vdCxcblx0b3IsXG5cdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5XG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdFeHByZXNzaW9uXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBTZW1hbnRpY0RhdGVPcGVyYXRvcnMgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU2VtYW50aWNEYXRlT3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgQmFyIGZyb20gXCJzYXAvbS9CYXJcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IFRpdGxlIGZyb20gXCJzYXAvbS9UaXRsZVwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCBGcmFnbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRnJhZ21lbnRcIjtcbmltcG9ydCBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBYTUxUZW1wbGF0ZVByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvWE1MVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCB7IHN5c3RlbSB9IGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3JVdGlsIGZyb20gXCJzYXAvdWkvbWRjL2NvbmRpdGlvbi9GaWx0ZXJPcGVyYXRvclV0aWxcIjtcbmltcG9ydCBUeXBlVXRpbCBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC9UeXBlVXRpbFwiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB7IENvcmVFeCB9IGZyb20gXCJ0eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCBtZXNzYWdlSGFuZGxpbmcgZnJvbSBcIi4vY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgeyBnZXRDb25kaXRpb25zIH0gZnJvbSBcIi4vdGVtcGxhdGluZy9GaWx0ZXJIZWxwZXJcIjtcblxuY29uc3QgYVZhbGlkVHlwZXMgPSBbXG5cdFwiRWRtLkJvb2xlYW5cIixcblx0XCJFZG0uQnl0ZVwiLFxuXHRcIkVkbS5EYXRlXCIsXG5cdFwiRWRtLkRhdGVUaW1lXCIsXG5cdFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIsXG5cdFwiRWRtLkRlY2ltYWxcIixcblx0XCJFZG0uRG91YmxlXCIsXG5cdFwiRWRtLkZsb2F0XCIsXG5cdFwiRWRtLkd1aWRcIixcblx0XCJFZG0uSW50MTZcIixcblx0XCJFZG0uSW50MzJcIixcblx0XCJFZG0uSW50NjRcIixcblx0XCJFZG0uU0J5dGVcIixcblx0XCJFZG0uU2luZ2xlXCIsXG5cdFwiRWRtLlN0cmluZ1wiLFxuXHRcIkVkbS5UaW1lXCIsXG5cdFwiRWRtLlRpbWVPZkRheVwiXG5dO1xuXG5mdW5jdGlvbiBub3JtYWxpemVTZWFyY2hUZXJtKHNTZWFyY2hUZXJtOiBzdHJpbmcpIHtcblx0aWYgKCFzU2VhcmNoVGVybSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRyZXR1cm4gc1NlYXJjaFRlcm1cblx0XHQucmVwbGFjZSgvXCIvZywgXCIgXCIpXG5cdFx0LnNwbGl0KC9cXHMrLylcblx0XHQucmVkdWNlKGZ1bmN0aW9uIChzTm9ybWFsaXplZDogc3RyaW5nIHwgdW5kZWZpbmVkLCBzQ3VycmVudFdvcmQ6IHN0cmluZykge1xuXHRcdFx0aWYgKHNDdXJyZW50V29yZCAhPT0gXCJcIikge1xuXHRcdFx0XHRzTm9ybWFsaXplZCA9IChzTm9ybWFsaXplZCA/IHNOb3JtYWxpemVkICsgXCIgXCIgOiBcIlwiKSArICdcIicgKyBzQ3VycmVudFdvcmQgKyAnXCInO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHNOb3JtYWxpemVkO1xuXHRcdH0sIHVuZGVmaW5lZCk7XG59XG5cbmZ1bmN0aW9uIGdldFByb3BlcnR5RGF0YVR5cGUob05hdmlnYXRpb25Db250ZXh0OiBhbnkpIHtcblx0bGV0IHNEYXRhVHlwZSA9IG9OYXZpZ2F0aW9uQ29udGV4dC5nZXRQcm9wZXJ0eShcIiRUeXBlXCIpO1xuXHQvLyBpZiAka2luZCBleGlzdHMsIGl0J3Mgbm90IGEgRGF0YUZpZWxkIGFuZCB3ZSBoYXZlIHRoZSBmaW5hbCB0eXBlIGFscmVhZHlcblx0aWYgKCFvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCIka2luZFwiKSkge1xuXHRcdHN3aXRjaCAoc0RhdGFUeXBlKSB7XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRcdHNEYXRhVHlwZSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRcIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGhcIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoVXJsXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvblwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhBY3Rpb25cIjpcblx0XHRcdFx0c0RhdGFUeXBlID0gb05hdmlnYXRpb25Db250ZXh0LmdldFByb3BlcnR5KFwiVmFsdWUvJFBhdGgvJFR5cGVcIik7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQW5ub3RhdGlvblwiOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0Y29uc3Qgc0Fubm90YXRpb25QYXRoID0gb05hdmlnYXRpb25Db250ZXh0LmdldFByb3BlcnR5KFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aFwiKTtcblx0XHRcdFx0aWYgKHNBbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0XHRcdGlmIChzQW5ub3RhdGlvblBhdGguaW5kZXhPZihcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQ29udGFjdFwiKSA+IC0xKSB7XG5cdFx0XHRcdFx0XHRzRGF0YVR5cGUgPSBvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL2ZuLyRQYXRoLyRUeXBlXCIpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoc0Fubm90YXRpb25QYXRoLmluZGV4T2YoXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnRcIikgPiAtMSkge1xuXHRcdFx0XHRcdFx0c0RhdGFUeXBlID0gb05hdmlnYXRpb25Db250ZXh0LmdldFByb3BlcnR5KFwiVmFsdWUvJFBhdGgvJFR5cGVcIik7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIGUuZy4gRmllbGRHcm91cCBvciBDaGFydFxuXHRcdFx0XHRcdFx0c0RhdGFUeXBlID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzRGF0YVR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHNEYXRhVHlwZTtcbn1cbmZ1bmN0aW9uIGZuSGFzVHJhbnNpZW50Q29udGV4dHMob0xpc3RCaW5kaW5nOiBhbnkpIHtcblx0bGV0IGJIYXNUcmFuc2llbnRDb250ZXh0cyA9IGZhbHNlO1xuXHRpZiAob0xpc3RCaW5kaW5nKSB7XG5cdFx0b0xpc3RCaW5kaW5nLmdldEN1cnJlbnRDb250ZXh0cygpLmZvckVhY2goZnVuY3Rpb24gKG9Db250ZXh0OiBhbnkpIHtcblx0XHRcdGlmIChvQ29udGV4dCAmJiBvQ29udGV4dC5pc1RyYW5zaWVudCgpKSB7XG5cdFx0XHRcdGJIYXNUcmFuc2llbnRDb250ZXh0cyA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGJIYXNUcmFuc2llbnRDb250ZXh0cztcbn1cbmZ1bmN0aW9uIGdldFNlYXJjaFJlc3RyaWN0aW9ucyhzRnVsbFBhdGg6IGFueSwgb01ldGFNb2RlbDogYW55KSB7XG5cdGxldCBpID0gMDtcblx0Y29uc3QgYU5hdmlnYXRpb25QYXJ0cyA9IHNGdWxsUGF0aC5zcGxpdChcIi8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy9cIik7XG5cdGZvciAobGV0IHNQYXRoID0gYU5hdmlnYXRpb25QYXJ0c1swXTsgaSA8IGFOYXZpZ2F0aW9uUGFydHMubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0Y29uc3Qgb05hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zKG9NZXRhTW9kZWwsIHNQYXRoLCBhTmF2aWdhdGlvblBhcnRzW2kgKyAxXSk7XG5cdFx0aWYgKG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zICYmIG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zW1wiU2VhcmNoUmVzdHJpY3Rpb25zXCJdKSB7XG5cdFx0XHRyZXR1cm4gb05hdmlnYXRpb25SZXN0cmljdGlvbnNbXCJTZWFyY2hSZXN0cmljdGlvbnNcIl07XG5cdFx0fVxuXHRcdHNQYXRoID0gc1BhdGggKyBcIi8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy9cIiArIGFOYXZpZ2F0aW9uUGFydHNbaV07XG5cdH1cblx0cmV0dXJuIG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNGdWxsUGF0aCArIFwiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU2VhcmNoUmVzdHJpY3Rpb25zXCIpO1xufVxuZnVuY3Rpb24gZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhvTW9kZWw6IGFueSwgc0VudGl0eVNldFBhdGg6IGFueSwgc05hdmlnYXRpb25QYXRoOiBhbnkpIHtcblx0Y29uc3Qgb05hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBvTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlTZXRQYXRoICsgXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zXCIpO1xuXHRjb25zdCBhUmVzdHJpY3RlZFByb3BlcnRpZXMgPSBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyAmJiBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucy5SZXN0cmljdGVkUHJvcGVydGllcztcblx0cmV0dXJuIChcblx0XHRhUmVzdHJpY3RlZFByb3BlcnRpZXMgJiZcblx0XHRhUmVzdHJpY3RlZFByb3BlcnRpZXMuZmluZChmdW5jdGlvbiAob1Jlc3RyaWN0ZWRQcm9wZXJ0eTogYW55KSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRvUmVzdHJpY3RlZFByb3BlcnR5ICYmXG5cdFx0XHRcdG9SZXN0cmljdGVkUHJvcGVydHkuTmF2aWdhdGlvblByb3BlcnR5ICYmXG5cdFx0XHRcdG9SZXN0cmljdGVkUHJvcGVydHkuTmF2aWdhdGlvblByb3BlcnR5LiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoID09PSBzTmF2aWdhdGlvblBhdGhcblx0XHRcdCk7XG5cdFx0fSlcblx0KTtcbn1cbmZ1bmN0aW9uIF9pc0luTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMob01vZGVsOiBhbnksIHNFbnRpdHlTZXRQYXRoOiBhbnksIHNDb250ZXh0UGF0aDogYW55KSB7XG5cdGxldCBiSXNOb3RGaWx0ZXJhYmxlID0gZmFsc2U7XG5cdGNvbnN0IG9Bbm5vdGF0aW9uID0gb01vZGVsLmdldE9iamVjdChzRW50aXR5U2V0UGF0aCArIFwiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRmlsdGVyUmVzdHJpY3Rpb25zXCIpO1xuXHRpZiAob0Fubm90YXRpb24gJiYgb0Fubm90YXRpb24uTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMpIHtcblx0XHRiSXNOb3RGaWx0ZXJhYmxlID0gb0Fubm90YXRpb24uTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMuc29tZShmdW5jdGlvbiAocHJvcGVydHk6IGFueSkge1xuXHRcdFx0cmV0dXJuIHByb3BlcnR5LiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoID09PSBzQ29udGV4dFBhdGggfHwgcHJvcGVydHkuJFByb3BlcnR5UGF0aCA9PT0gc0NvbnRleHRQYXRoO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBiSXNOb3RGaWx0ZXJhYmxlO1xufVxuLy8gVE9ETyByZXdvcmsgdGhpcyFcbmZ1bmN0aW9uIF9pc0NvbnRleHRQYXRoRmlsdGVyYWJsZShvTW9kZWw6IGFueSwgc0VudGl0eVNldFBhdGg6IGFueSwgc0NvbnRleFBhdGg6IGFueSkge1xuXHRjb25zdCBzRnVsbFBhdGggPSBzRW50aXR5U2V0UGF0aCArIFwiL1wiICsgc0NvbnRleFBhdGgsXG5cdFx0YUVTUGFydHMgPSBzRnVsbFBhdGguc3BsaXQoXCIvXCIpLnNwbGljZSgwLCAyKSxcblx0XHRhQ29udGV4dCA9IHNGdWxsUGF0aC5zcGxpdChcIi9cIikuc3BsaWNlKDIpO1xuXHRsZXQgYklzTm90RmlsdGVyYWJsZSA9IGZhbHNlLFxuXHRcdHNDb250ZXh0ID0gXCJcIjtcblxuXHRzRW50aXR5U2V0UGF0aCA9IGFFU1BhcnRzLmpvaW4oXCIvXCIpO1xuXG5cdGJJc05vdEZpbHRlcmFibGUgPSBhQ29udGV4dC5zb21lKGZ1bmN0aW9uIChpdGVtOiBzdHJpbmcsIGluZGV4OiBudW1iZXIsIGFycmF5OiBzdHJpbmdbXSkge1xuXHRcdGlmIChzQ29udGV4dC5sZW5ndGggPiAwKSB7XG5cdFx0XHRzQ29udGV4dCArPSBcIi9cIiArIGl0ZW07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNDb250ZXh0ID0gaXRlbTtcblx0XHR9XG5cdFx0aWYgKGluZGV4ID09PSBhcnJheS5sZW5ndGggLSAyKSB7XG5cdFx0XHQvLyBJbiBjYXNlIG9mIFwiL0N1c3RvbWVyL1NldC9Qcm9wZXJ0eVwiIHRoaXMgaXMgdG8gY2hlY2sgbmF2aWdhdGlvbiByZXN0cmljdGlvbnMgb2YgXCJDdXN0b21lclwiIGZvciBub24tZmlsdGVyYWJsZSBwcm9wZXJ0aWVzIGluIFwiU2V0XCJcblx0XHRcdGNvbnN0IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhvTW9kZWwsIHNFbnRpdHlTZXRQYXRoLCBpdGVtKTtcblx0XHRcdGNvbnN0IG9GaWx0ZXJSZXN0cmljdGlvbnMgPSBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyAmJiBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucy5GaWx0ZXJSZXN0cmljdGlvbnM7XG5cdFx0XHRjb25zdCBhTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMgPSBvRmlsdGVyUmVzdHJpY3Rpb25zICYmIG9GaWx0ZXJSZXN0cmljdGlvbnMuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXM7XG5cdFx0XHRjb25zdCBzVGFyZ2V0UHJvcGVydHlQYXRoID0gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGFOb25GaWx0ZXJhYmxlUHJvcGVydGllcyAmJlxuXHRcdFx0XHRhTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMuZmluZChmdW5jdGlvbiAob1Byb3BlcnR5UGF0aDogYW55KSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9Qcm9wZXJ0eVBhdGguJFByb3BlcnR5UGF0aCA9PT0gc1RhcmdldFByb3BlcnR5UGF0aDtcblx0XHRcdFx0fSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGluZGV4ID09PSBhcnJheS5sZW5ndGggLSAxKSB7XG5cdFx0XHQvL2xhc3QgcGF0aCBzZWdtZW50XG5cdFx0XHRiSXNOb3RGaWx0ZXJhYmxlID0gX2lzSW5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyhvTW9kZWwsIHNFbnRpdHlTZXRQYXRoLCBzQ29udGV4dCk7XG5cdFx0fSBlbHNlIGlmIChvTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlTZXRQYXRoICsgXCIvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvXCIgKyBpdGVtKSkge1xuXHRcdFx0Ly9jaGVjayBleGlzdGluZyBjb250ZXh0IHBhdGggYW5kIGluaXRpYWxpemUgaXRcblx0XHRcdGJJc05vdEZpbHRlcmFibGUgPSBfaXNJbk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzKG9Nb2RlbCwgc0VudGl0eVNldFBhdGgsIHNDb250ZXh0KTtcblx0XHRcdHNDb250ZXh0ID0gXCJcIjtcblx0XHRcdC8vc2V0IHRoZSBuZXcgRW50aXR5U2V0XG5cdFx0XHRzRW50aXR5U2V0UGF0aCA9IFwiL1wiICsgb01vZGVsLmdldE9iamVjdChzRW50aXR5U2V0UGF0aCArIFwiLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nL1wiICsgaXRlbSk7XG5cdFx0fVxuXHRcdHJldHVybiBiSXNOb3RGaWx0ZXJhYmxlID09PSB0cnVlO1xuXHR9KTtcblx0cmV0dXJuIGJJc05vdEZpbHRlcmFibGU7XG59XG4vLyBUT0RPIGNoZWNrIHVzZWQgcGxhY2VzIGFuZCByZXdvcmsgdGhpc1xuZnVuY3Rpb24gaXNQcm9wZXJ0eUZpbHRlcmFibGUoXG5cdG9Nb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdHNFbnRpdHlTZXRQYXRoOiBzdHJpbmcsXG5cdHNQcm9wZXJ0eTogc3RyaW5nLFxuXHRiU2tpcEhpZGRlbkZpbHRlcj86IGJvb2xlYW5cbik6IGJvb2xlYW4gfCBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0aWYgKHR5cGVvZiBzUHJvcGVydHkgIT09IFwic3RyaW5nXCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzUHJvcGVydHkgcGFyYW1ldGVyIG11c3QgYmUgYSBzdHJpbmdcIik7XG5cdH1cblx0bGV0IGJJc0ZpbHRlcmFibGU7XG5cblx0Ly8gUGFyYW1ldGVycyBzaG91bGQgYmUgcmVuZGVyZWQgYXMgZmlsdGVyZmllbGRzXG5cdGlmIChvTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlTZXRQYXRoICsgXCIvQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0XCIpID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRjb25zdCBvTmF2aWdhdGlvbkNvbnRleHQgPSBvTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0VudGl0eVNldFBhdGggKyBcIi9cIiArIHNQcm9wZXJ0eSkgYXMgQ29udGV4dDtcblxuXHRpZiAoIWJTa2lwSGlkZGVuRmlsdGVyKSB7XG5cdFx0aWYgKFxuXHRcdFx0b05hdmlnYXRpb25Db250ZXh0LmdldFByb3BlcnR5KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiKSA9PT0gdHJ1ZSB8fFxuXHRcdFx0b05hdmlnYXRpb25Db250ZXh0LmdldFByb3BlcnR5KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlbkZpbHRlclwiKSA9PT0gdHJ1ZVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRjb25zdCBzSGlkZGVuUGF0aCA9IG9OYXZpZ2F0aW9uQ29udGV4dC5nZXRQcm9wZXJ0eShcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW4vJFBhdGhcIik7XG5cdFx0Y29uc3Qgc0hpZGRlbkZpbHRlclBhdGggPSBvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuRmlsdGVyLyRQYXRoXCIpO1xuXG5cdFx0aWYgKHNIaWRkZW5QYXRoICYmIHNIaWRkZW5GaWx0ZXJQYXRoKSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcobm90KG9yKGJpbmRpbmdFeHByZXNzaW9uKHNIaWRkZW5QYXRoKSwgYmluZGluZ0V4cHJlc3Npb24oc0hpZGRlbkZpbHRlclBhdGgpKSkpO1xuXHRcdH0gZWxzZSBpZiAoc0hpZGRlblBhdGgpIHtcblx0XHRcdHJldHVybiBjb21waWxlQmluZGluZyhub3QoYmluZGluZ0V4cHJlc3Npb24oc0hpZGRlblBhdGgpKSk7XG5cdFx0fSBlbHNlIGlmIChzSGlkZGVuRmlsdGVyUGF0aCkge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKG5vdChiaW5kaW5nRXhwcmVzc2lvbihzSGlkZGVuRmlsdGVyUGF0aCkpKTtcblx0XHR9XG5cdH1cblxuXHRpZiAoc0VudGl0eVNldFBhdGguc3BsaXQoXCIvXCIpLmxlbmd0aCA9PT0gMiAmJiBzUHJvcGVydHkuaW5kZXhPZihcIi9cIikgPCAwKSB7XG5cdFx0Ly8gdGhlcmUgaXMgbm8gbmF2aWdhdGlvbiBpbiBlbnRpdHlTZXQgcGF0aCBhbmQgcHJvcGVydHkgcGF0aFxuXHRcdGJJc0ZpbHRlcmFibGUgPSAhX2lzSW5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyhvTW9kZWwsIHNFbnRpdHlTZXRQYXRoLCBzUHJvcGVydHkpO1xuXHR9IGVsc2Uge1xuXHRcdGJJc0ZpbHRlcmFibGUgPSAhX2lzQ29udGV4dFBhdGhGaWx0ZXJhYmxlKG9Nb2RlbCwgc0VudGl0eVNldFBhdGgsIHNQcm9wZXJ0eSk7XG5cdH1cblx0Ly8gY2hlY2sgaWYgdHlwZSBjYW4gYmUgdXNlZCBmb3IgZmlsdGVyaW5nXG5cdGlmIChiSXNGaWx0ZXJhYmxlICYmIG9OYXZpZ2F0aW9uQ29udGV4dCkge1xuXHRcdGNvbnN0IHNQcm9wZXJ0eURhdGFUeXBlID0gZ2V0UHJvcGVydHlEYXRhVHlwZShvTmF2aWdhdGlvbkNvbnRleHQpO1xuXHRcdGlmIChzUHJvcGVydHlEYXRhVHlwZSkge1xuXHRcdFx0YklzRmlsdGVyYWJsZSA9IGFWYWxpZFR5cGVzLmluZGV4T2Yoc1Byb3BlcnR5RGF0YVR5cGUpICE9PSAtMTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YklzRmlsdGVyYWJsZSA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBiSXNGaWx0ZXJhYmxlO1xufVxuZnVuY3Rpb24gZ2V0U2hlbGxTZXJ2aWNlcyhvQ29udHJvbDogYW55KSB7XG5cdHJldHVybiBnZXRBcHBDb21wb25lbnQob0NvbnRyb2wpLmdldFNoZWxsU2VydmljZXMoKTtcbn1cbmZ1bmN0aW9uIGdldEhhc2goKSB7XG5cdGNvbnN0IHNIYXNoID0gd2luZG93LmxvY2F0aW9uLmhhc2g7XG5cdHJldHVybiBzSGFzaC5zcGxpdChcIiZcIilbMF07XG59XG5mdW5jdGlvbiBfZ2V0U09JbnRlbnRzKG9PYmplY3RQYWdlTGF5b3V0OiBhbnksIG9TZW1hbnRpY09iamVjdDogYW55LCBvUGFyYW06IGFueSkge1xuXHRjb25zdCBvU2hlbGxTZXJ2aWNlSGVscGVyID0gQ29tbW9uVXRpbHMuZ2V0U2hlbGxTZXJ2aWNlcyhvT2JqZWN0UGFnZUxheW91dCk7XG5cdHJldHVybiBvU2hlbGxTZXJ2aWNlSGVscGVyLmdldExpbmtzKHtcblx0XHRzZW1hbnRpY09iamVjdDogb1NlbWFudGljT2JqZWN0LFxuXHRcdHBhcmFtczogb1BhcmFtXG5cdH0pO1xufVxuLy8gVE8tRE8gYWRkIHRoaXMgYXMgcGFydCBvZiBhcHBseVNlbWFudGljT2JqZWN0bWFwcGluZ3MgbG9naWMgaW4gSW50ZW50QmFzZWRuYXZpZ2F0aW9uIGNvbnRyb2xsZXIgZXh0ZW5zaW9uXG5mdW5jdGlvbiBfY3JlYXRlTWFwcGluZ3Mob01hcHBpbmc6IGFueSkge1xuXHRjb25zdCBhU09NYXBwaW5ncyA9IFtdO1xuXHRjb25zdCBhTWFwcGluZ0tleXMgPSBPYmplY3Qua2V5cyhvTWFwcGluZyk7XG5cdGxldCBvU2VtYW50aWNNYXBwaW5nO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGFNYXBwaW5nS2V5cy5sZW5ndGg7IGkrKykge1xuXHRcdG9TZW1hbnRpY01hcHBpbmcgPSB7XG5cdFx0XHRcIkxvY2FsUHJvcGVydHlcIjoge1xuXHRcdFx0XHRcIiRQcm9wZXJ0eVBhdGhcIjogYU1hcHBpbmdLZXlzW2ldXG5cdFx0XHR9LFxuXHRcdFx0XCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCI6IG9NYXBwaW5nW2FNYXBwaW5nS2V5c1tpXV1cblx0XHR9O1xuXHRcdGFTT01hcHBpbmdzLnB1c2gob1NlbWFudGljTWFwcGluZyk7XG5cdH1cblxuXHRyZXR1cm4gYVNPTWFwcGluZ3M7XG59XG4vKipcbiAqIEBwYXJhbSBhTGlua3NcbiAqIEBwYXJhbSBhRXhjbHVkZWRBY3Rpb25zXG4gKiBAcGFyYW0gb1RhcmdldFBhcmFtc1xuICogQHBhcmFtIGFJdGVtc1xuICovXG5mdW5jdGlvbiBfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMoYUxpbmtzOiBhbnksIGFFeGNsdWRlZEFjdGlvbnM6IGFueSwgb1RhcmdldFBhcmFtczogYW55LCBhSXRlbXM6IGFueSkge1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGFMaW5rcy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IG9MaW5rID0gYUxpbmtzW2ldO1xuXHRcdGNvbnN0IHNJbnRlbnQgPSBvTGluay5pbnRlbnQ7XG5cdFx0Y29uc3Qgc0FjdGlvbiA9IHNJbnRlbnQuc3BsaXQoXCItXCIpWzFdLnNwbGl0KFwiP1wiKVswXTtcblx0XHRpZiAoYUV4Y2x1ZGVkQWN0aW9ucyAmJiBhRXhjbHVkZWRBY3Rpb25zLmluZGV4T2Yoc0FjdGlvbikgPT09IC0xKSB7XG5cdFx0XHRhSXRlbXMucHVzaCh7XG5cdFx0XHRcdHRleHQ6IG9MaW5rLnRleHQsXG5cdFx0XHRcdHRhcmdldFNlbU9iamVjdDogc0ludGVudC5zcGxpdChcIiNcIilbMV0uc3BsaXQoXCItXCIpWzBdLFxuXHRcdFx0XHR0YXJnZXRBY3Rpb246IHNBY3Rpb24uc3BsaXQoXCJ+XCIpWzBdLFxuXHRcdFx0XHR0YXJnZXRQYXJhbXM6IG9UYXJnZXRQYXJhbXNcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufVxuLyoqXG4gKiBAcGFyYW0gb0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHNcbiAqIEBwYXJhbSBvQmluZGluZ0NvbnRleHRcbiAqIEBwYXJhbSBhTWFuaWZlc3RTT0l0ZW1zXG4gKiBAcGFyYW0gYUxpbmtzXG4gKi9cbmZ1bmN0aW9uIF9nZXRSZWxhdGVkSW50ZW50cyhvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0czogYW55LCBvQmluZGluZ0NvbnRleHQ6IGFueSwgYU1hbmlmZXN0U09JdGVtczogYW55LCBhTGlua3M6IGFueSkge1xuXHRpZiAoYUxpbmtzICYmIGFMaW5rcy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgYUV4Y2x1ZGVkQWN0aW9ucyA9IG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzLnVuYXZhaWxhYmxlQWN0aW9ucyA/IG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzLnVuYXZhaWxhYmxlQWN0aW9ucyA6IFtdO1xuXHRcdGNvbnN0IGFTT01hcHBpbmdzID0gb0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMubWFwcGluZyA/IF9jcmVhdGVNYXBwaW5ncyhvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cy5tYXBwaW5nKSA6IFtdO1xuXHRcdGNvbnN0IG9UYXJnZXRQYXJhbXMgPSB7IG5hdmlnYXRpb25Db250ZXh0czogb0JpbmRpbmdDb250ZXh0LCBzZW1hbnRpY09iamVjdE1hcHBpbmc6IGFTT01hcHBpbmdzIH07XG5cdFx0X2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zKGFMaW5rcywgYUV4Y2x1ZGVkQWN0aW9ucywgb1RhcmdldFBhcmFtcywgYU1hbmlmZXN0U09JdGVtcyk7XG5cdH1cbn1cbmZ1bmN0aW9uIHVwZGF0ZVJlbGF0ZUFwcHNNb2RlbChcblx0dGhpczogYW55LFxuXHRvQmluZGluZ0NvbnRleHQ6IGFueSxcblx0b0VudHJ5OiBhbnksXG5cdG9PYmplY3RQYWdlTGF5b3V0OiBhbnksXG5cdGFTZW1LZXlzOiBhbnksXG5cdG9NZXRhTW9kZWw6IGFueSxcblx0b01ldGFQYXRoOiBhbnlcbikge1xuXHRjb25zdCBvU2hlbGxTZXJ2aWNlSGVscGVyID0gZ2V0U2hlbGxTZXJ2aWNlcyhvT2JqZWN0UGFnZUxheW91dCk7XG5cdGNvbnN0IG9QYXJhbTogYW55ID0ge307XG5cdGxldCBzQ3VycmVudFNlbU9iaiA9IFwiXCIsXG5cdFx0c0N1cnJlbnRBY3Rpb24gPSBcIlwiO1xuXHRsZXQgb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnM7XG5cdGxldCBhUmVsYXRlZEFwcHNNZW51SXRlbXM6IGFueVtdID0gW107XG5cdGxldCBhRXhjbHVkZWRBY3Rpb25zOiBhbnlbXSA9IFtdO1xuXG5cdGlmIChvRW50cnkpIHtcblx0XHRpZiAoYVNlbUtleXMgJiYgYVNlbUtleXMubGVuZ3RoID4gMCkge1xuXHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBhU2VtS2V5cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRjb25zdCBzU2VtS2V5ID0gYVNlbUtleXNbal0uJFByb3BlcnR5UGF0aDtcblx0XHRcdFx0aWYgKCFvUGFyYW1bc1NlbUtleV0pIHtcblx0XHRcdFx0XHRvUGFyYW1bc1NlbUtleV0gPSB7IHZhbHVlOiBvRW50cnlbc1NlbUtleV0gfTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBmYWxsYmFjayB0byBUZWNobmljYWwgS2V5cyBpZiBubyBTZW1hbnRpYyBLZXkgaXMgcHJlc2VudFxuXHRcdFx0Y29uc3QgYVRlY2huaWNhbEtleXMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChvTWV0YVBhdGggKyBcIi8kVHlwZS8kS2V5XCIpO1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gYVRlY2huaWNhbEtleXMpIHtcblx0XHRcdFx0Y29uc3Qgc09iaktleSA9IGFUZWNobmljYWxLZXlzW2tleV07XG5cdFx0XHRcdGlmICghb1BhcmFtW3NPYmpLZXldKSB7XG5cdFx0XHRcdFx0b1BhcmFtW3NPYmpLZXldID0geyB2YWx1ZTogb0VudHJ5W3NPYmpLZXldIH07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Ly8gTG9naWMgdG8gcmVhZCBhZGRpdGlvbmFsIFNPIGZyb20gbWFuaWZlc3QgYW5kIHVwZGF0ZWQgcmVsYXRlZGFwcHMgbW9kZWxcblxuXHRjb25zdCBvTWFuaWZlc3REYXRhID0gZ2V0VGFyZ2V0VmlldyhvT2JqZWN0UGFnZUxheW91dCkuZ2V0Vmlld0RhdGEoKTtcblx0Y29uc3QgYU1hbmlmZXN0U09JdGVtczogYW55W10gPSBbXTtcblx0aWYgKG9NYW5pZmVzdERhdGEuYWRkaXRpb25hbFNlbWFudGljT2JqZWN0cykge1xuXHRcdGNvbnN0IGFNYW5pZmVzdFNPS2V5cyA9IE9iamVjdC5rZXlzKG9NYW5pZmVzdERhdGEuYWRkaXRpb25hbFNlbWFudGljT2JqZWN0cyk7XG5cdFx0Zm9yIChsZXQga2V5ID0gMDsga2V5IDwgYU1hbmlmZXN0U09LZXlzLmxlbmd0aDsga2V5KyspIHtcblx0XHRcdF9nZXRTT0ludGVudHMob09iamVjdFBhZ2VMYXlvdXQsIGFNYW5pZmVzdFNPS2V5c1trZXldLCBvUGFyYW0pXG5cdFx0XHRcdC50aGVuKFxuXHRcdFx0XHRcdF9nZXRSZWxhdGVkSW50ZW50cy5iaW5kKFxuXHRcdFx0XHRcdFx0dGhpcyBhcyBhbnksXG5cdFx0XHRcdFx0XHRvTWFuaWZlc3REYXRhLmFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHNbYU1hbmlmZXN0U09LZXlzW2tleV1dLFxuXHRcdFx0XHRcdFx0b0JpbmRpbmdDb250ZXh0LFxuXHRcdFx0XHRcdFx0YU1hbmlmZXN0U09JdGVtc1xuXHRcdFx0XHRcdClcblx0XHRcdFx0KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyBTTyBJbnRlbnRzXCIsIG9FcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGZuR2V0UGFyc2VTaGVsbEhhc2hBbmRHZXRMaW5rcygpIHtcblx0XHRjb25zdCBvUGFyc2VkVXJsID0gb1NoZWxsU2VydmljZUhlbHBlci5wYXJzZVNoZWxsSGFzaChkb2N1bWVudC5sb2NhdGlvbi5oYXNoKTtcblx0XHRzQ3VycmVudFNlbU9iaiA9IG9QYXJzZWRVcmwuc2VtYW50aWNPYmplY3Q7IC8vIEN1cnJlbnQgU2VtYW50aWMgT2JqZWN0XG5cdFx0c0N1cnJlbnRBY3Rpb24gPSBvUGFyc2VkVXJsLmFjdGlvbjtcblx0XHRyZXR1cm4gX2dldFNPSW50ZW50cyhvT2JqZWN0UGFnZUxheW91dCwgc0N1cnJlbnRTZW1PYmosIG9QYXJhbSk7XG5cdH1cblxuXHRmbkdldFBhcnNlU2hlbGxIYXNoQW5kR2V0TGlua3MoKVxuXHRcdC50aGVuKGZ1bmN0aW9uIChhTGlua3M6IGFueSkge1xuXHRcdFx0aWYgKGFMaW5rcyAmJiBhTGlua3MubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb25zdCBvVGFyZ2V0UGFyYW1zOiBhbnkgPSB7fTtcblx0XHRcdFx0Y29uc3QgYUFubm90YXRpb25zU09JdGVtczogYW55W10gPSBbXTtcblx0XHRcdFx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBvTWV0YVBhdGggKyBcIkBcIjtcblx0XHRcdFx0Y29uc3Qgc0VudGl0eVR5cGVQYXRoID0gb01ldGFQYXRoICsgXCIvQFwiO1xuXHRcdFx0XHRjb25zdCBvRW50aXR5U2V0QW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzRW50aXR5U2V0UGF0aCk7XG5cdFx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zID0gX2dldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMob0VudGl0eVNldEFubm90YXRpb25zLCBzQ3VycmVudFNlbU9iaik7XG5cdFx0XHRcdGlmICghb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYkhhc0VudGl0eVNldFNPKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0VudGl0eVR5cGVBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlUeXBlUGF0aCk7XG5cdFx0XHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMgPSBfZ2V0U2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyhvRW50aXR5VHlwZUFubm90YXRpb25zLCBzQ3VycmVudFNlbU9iaik7XG5cdFx0XHRcdH1cblx0XHRcdFx0YUV4Y2x1ZGVkQWN0aW9ucyA9IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFVbmF2YWlsYWJsZUFjdGlvbnM7XG5cdFx0XHRcdC8vU2tpcCBzYW1lIGFwcGxpY2F0aW9uIGZyb20gUmVsYXRlZCBBcHBzXG5cdFx0XHRcdGFFeGNsdWRlZEFjdGlvbnMucHVzaChzQ3VycmVudEFjdGlvbik7XG5cdFx0XHRcdG9UYXJnZXRQYXJhbXMubmF2aWdhdGlvbkNvbnRleHRzID0gb0JpbmRpbmdDb250ZXh0O1xuXHRcdFx0XHRvVGFyZ2V0UGFyYW1zLnNlbWFudGljT2JqZWN0TWFwcGluZyA9IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFNYXBwaW5ncztcblx0XHRcdFx0X2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zKGFMaW5rcywgYUV4Y2x1ZGVkQWN0aW9ucywgb1RhcmdldFBhcmFtcywgYUFubm90YXRpb25zU09JdGVtcyk7XG5cdFx0XHRcdGFSZWxhdGVkQXBwc01lbnVJdGVtcyA9IGFBbm5vdGF0aW9uc1NPSXRlbXMuY29uY2F0KGFNYW5pZmVzdFNPSXRlbXMpO1xuXHRcdFx0XHQvLyBJZiBubyBhcHAgaW4gbGlzdCwgcmVsYXRlZCBhcHBzIGJ1dHRvbiB3aWxsIGJlIGhpZGRlblxuXHRcdFx0XHRvT2JqZWN0UGFnZUxheW91dC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpLnNldFByb3BlcnR5KFwicmVsYXRlZEFwcHMvdmlzaWJpbGl0eVwiLCBhUmVsYXRlZEFwcHNNZW51SXRlbXMubGVuZ3RoID4gMCk7XG5cdFx0XHRcdG9PYmplY3RQYWdlTGF5b3V0LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikuc2V0UHJvcGVydHkoXCJyZWxhdGVkQXBwcy9pdGVtc1wiLCBhUmVsYXRlZEFwcHNNZW51SXRlbXMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b09iamVjdFBhZ2VMYXlvdXQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKS5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzL3Zpc2liaWxpdHlcIiwgZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJlYWQgbGlua3NcIiwgb0Vycm9yKTtcblx0XHR9KTtcblx0cmV0dXJuIGFSZWxhdGVkQXBwc01lbnVJdGVtcztcbn1cbmZ1bmN0aW9uIF9nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zKG9FbnRpdHlBbm5vdGF0aW9uczogYW55LCBzQ3VycmVudFNlbU9iajogYW55KSB7XG5cdGNvbnN0IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zID0ge1xuXHRcdGJIYXNFbnRpdHlTZXRTTzogZmFsc2UsXG5cdFx0YVVuYXZhaWxhYmxlQWN0aW9uczogW10sXG5cdFx0YU1hcHBpbmdzOiBbXVxuXHR9O1xuXHRsZXQgc0Fubm90YXRpb25NYXBwaW5nVGVybSwgc0Fubm90YXRpb25BY3Rpb25UZXJtO1xuXHRsZXQgc1F1YWxpZmllcjtcblx0Zm9yIChjb25zdCBrZXkgaW4gb0VudGl0eUFubm90YXRpb25zKSB7XG5cdFx0aWYgKGtleS5pbmRleE9mKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljT2JqZWN0XCIpID4gLTEgJiYgb0VudGl0eUFubm90YXRpb25zW2tleV0gPT09IHNDdXJyZW50U2VtT2JqKSB7XG5cdFx0XHRvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5iSGFzRW50aXR5U2V0U08gPSB0cnVlO1xuXHRcdFx0c0Fubm90YXRpb25NYXBwaW5nVGVybSA9IFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdE1hcHBpbmdcIjtcblx0XHRcdHNBbm5vdGF0aW9uQWN0aW9uVGVybSA9IFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc1wiO1xuXG5cdFx0XHRpZiAoa2V5LmluZGV4T2YoXCIjXCIpID4gLTEpIHtcblx0XHRcdFx0c1F1YWxpZmllciA9IGtleS5zcGxpdChcIiNcIilbMV07XG5cdFx0XHRcdHNBbm5vdGF0aW9uTWFwcGluZ1Rlcm0gPSBzQW5ub3RhdGlvbk1hcHBpbmdUZXJtICsgXCIjXCIgKyBzUXVhbGlmaWVyO1xuXHRcdFx0XHRzQW5ub3RhdGlvbkFjdGlvblRlcm0gPSBzQW5ub3RhdGlvbkFjdGlvblRlcm0gKyBcIiNcIiArIHNRdWFsaWZpZXI7XG5cdFx0XHR9XG5cblx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFNYXBwaW5ncyA9IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFNYXBwaW5ncy5jb25jYXQob0VudGl0eUFubm90YXRpb25zW3NBbm5vdGF0aW9uTWFwcGluZ1Rlcm1dKTtcblx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFVbmF2YWlsYWJsZUFjdGlvbnMgPSBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hVW5hdmFpbGFibGVBY3Rpb25zLmNvbmNhdChcblx0XHRcdFx0b0VudGl0eUFubm90YXRpb25zW3NBbm5vdGF0aW9uQWN0aW9uVGVybV1cblx0XHRcdCk7XG5cblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnM7XG59XG5mdW5jdGlvbiBmblVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyhvT2JqZWN0UGFnZUxheW91dDogYW55KSB7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvT2JqZWN0UGFnZUxheW91dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSBvT2JqZWN0UGFnZUxheW91dC5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRjb25zdCBvUGF0aCA9IG9CaW5kaW5nQ29udGV4dCAmJiBvQmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRjb25zdCBvTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9QYXRoKTtcblx0Ly8gU2VtYW50aWMgS2V5IFZvY2FidWxhcnlcblx0Y29uc3Qgc1NlbWFudGljS2V5Vm9jYWJ1bGFyeSA9IG9NZXRhUGF0aCArIFwiL1wiICsgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljS2V5XCI7XG5cdC8vU2VtYW50aWMgS2V5c1xuXHRjb25zdCBhU2VtS2V5cyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNTZW1hbnRpY0tleVZvY2FidWxhcnkpO1xuXHQvLyBVbmF2YWlsYWJsZSBBY3Rpb25zXG5cdGNvbnN0IG9FbnRyeSA9IG9CaW5kaW5nQ29udGV4dC5nZXRPYmplY3QoKTtcblx0aWYgKCFvRW50cnkpIHtcblx0XHRvQmluZGluZ0NvbnRleHRcblx0XHRcdC5yZXF1ZXN0T2JqZWN0KClcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChvRW50cnk6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gdXBkYXRlUmVsYXRlQXBwc01vZGVsKG9CaW5kaW5nQ29udGV4dCwgb0VudHJ5LCBvT2JqZWN0UGFnZUxheW91dCwgYVNlbUtleXMsIG9NZXRhTW9kZWwsIG9NZXRhUGF0aCk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgdXBkYXRlIHRoZSByZWxhdGVkIGFwcCBkZXRhaWxzXCIsIG9FcnJvcik7XG5cdFx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdXBkYXRlUmVsYXRlQXBwc01vZGVsKG9CaW5kaW5nQ29udGV4dCwgb0VudHJ5LCBvT2JqZWN0UGFnZUxheW91dCwgYVNlbUtleXMsIG9NZXRhTW9kZWwsIG9NZXRhUGF0aCk7XG5cdH1cbn1cbi8qKlxuICogQHBhcmFtIG9CdXR0b25cbiAqL1xuZnVuY3Rpb24gZm5GaXJlQnV0dG9uUHJlc3Mob0J1dHRvbjogYW55KSB7XG5cdGNvbnN0IGFBdXRob3JpemVkVHlwZXMgPSBbXCJzYXAubS5CdXR0b25cIiwgXCJzYXAubS5PdmVyZmxvd1Rvb2xiYXJCdXR0b25cIl07XG5cdGlmIChvQnV0dG9uICYmIGFBdXRob3JpemVkVHlwZXMuaW5kZXhPZihvQnV0dG9uLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpKSAhPT0gLTEgJiYgb0J1dHRvbi5nZXRWaXNpYmxlKCkgJiYgb0J1dHRvbi5nZXRFbmFibGVkKCkpIHtcblx0XHRvQnV0dG9uLmZpcmVQcmVzcygpO1xuXHR9XG59XG5mdW5jdGlvbiBmblJlc29sdmVTdHJpbmd0b0Jvb2xlYW4oc1ZhbHVlOiBhbnkpIHtcblx0aWYgKHNWYWx1ZSA9PT0gXCJ0cnVlXCIgfHwgc1ZhbHVlID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5mdW5jdGlvbiBnZXRBcHBDb21wb25lbnQob0NvbnRyb2w6IGFueSk6IEFwcENvbXBvbmVudCB7XG5cdGlmIChvQ29udHJvbC5pc0EoXCJzYXAuZmUuY29yZS5BcHBDb21wb25lbnRcIikpIHtcblx0XHRyZXR1cm4gb0NvbnRyb2w7XG5cdH1cblx0Y29uc3Qgb093bmVyID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKG9Db250cm9sKTtcblx0aWYgKCFvT3duZXIpIHtcblx0XHRyZXR1cm4gb0NvbnRyb2w7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGdldEFwcENvbXBvbmVudChvT3duZXIpO1xuXHR9XG59XG5mdW5jdGlvbiBnZXRUYXJnZXRWaWV3KG9Db250cm9sOiBhbnkpIHtcblx0aWYgKG9Db250cm9sICYmIG9Db250cm9sLmlzQShcInNhcC51aS5jb3JlLkNvbXBvbmVudENvbnRhaW5lclwiKSkge1xuXHRcdG9Db250cm9sID0gb0NvbnRyb2wuZ2V0Q29tcG9uZW50SW5zdGFuY2UoKTtcblx0XHRvQ29udHJvbCA9IG9Db250cm9sICYmIG9Db250cm9sLmdldFJvb3RDb250cm9sKCk7XG5cdH1cblx0d2hpbGUgKG9Db250cm9sICYmICEob0NvbnRyb2wgaW5zdGFuY2VvZiBWaWV3KSkge1xuXHRcdG9Db250cm9sID0gb0NvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdH1cblx0cmV0dXJuIG9Db250cm9sO1xufVxuXG5mdW5jdGlvbiBpc0ZpZWxkQ29udHJvbFBhdGhJbmFwcGxpY2FibGUoc0ZpZWxkQ29udHJvbFBhdGg6IHN0cmluZywgb0F0dHJpYnV0ZTogYW55KSB7XG5cdGxldCBiSW5hcHBsaWNhYmxlID0gZmFsc2U7XG5cdGNvbnN0IGFQYXJ0cyA9IHNGaWVsZENvbnRyb2xQYXRoLnNwbGl0KFwiL1wiKTtcblx0Ly8gc2Vuc2l0aXZlIGRhdGEgaXMgcmVtb3ZlZCBvbmx5IGlmIHRoZSBwYXRoIGhhcyBhbHJlYWR5IGJlZW4gcmVzb2x2ZWQuXG5cdGlmIChhUGFydHMubGVuZ3RoID4gMSkge1xuXHRcdGJJbmFwcGxpY2FibGUgPSBvQXR0cmlidXRlW2FQYXJ0c1swXV0gJiYgb0F0dHJpYnV0ZVthUGFydHNbMF1dLmhhc093blByb3BlcnR5KGFQYXJ0c1sxXSkgJiYgb0F0dHJpYnV0ZVthUGFydHNbMF1dW2FQYXJ0c1sxXV0gPT09IDA7XG5cdH0gZWxzZSB7XG5cdFx0YkluYXBwbGljYWJsZSA9IG9BdHRyaWJ1dGVbc0ZpZWxkQ29udHJvbFBhdGhdID09PSAwO1xuXHR9XG5cdHJldHVybiBiSW5hcHBsaWNhYmxlO1xufVxuZnVuY3Rpb24gcmVtb3ZlU2Vuc2l0aXZlRGF0YShhQXR0cmlidXRlczogYW55W10sIG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKSB7XG5cdGNvbnN0IGFPdXRBdHRyaWJ1dGVzID0gW107XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYUF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBzRW50aXR5U2V0ID0gYUF0dHJpYnV0ZXNbaV0uZW50aXR5U2V0LFxuXHRcdFx0b0F0dHJpYnV0ZSA9IGFBdHRyaWJ1dGVzW2ldLmNvbnRleHREYXRhO1xuXG5cdFx0ZGVsZXRlIG9BdHRyaWJ1dGVbXCJAb2RhdGEuY29udGV4dFwiXTtcblx0XHRkZWxldGUgb0F0dHJpYnV0ZVtcIiU0MG9kYXRhLmNvbnRleHRcIl07XG5cdFx0ZGVsZXRlIG9BdHRyaWJ1dGVbXCJAb2RhdGEubWV0YWRhdGFFdGFnXCJdO1xuXHRcdGRlbGV0ZSBvQXR0cmlidXRlW1wiJTQwb2RhdGEubWV0YWRhdGFFdGFnXCJdO1xuXHRcdGRlbGV0ZSBvQXR0cmlidXRlW1wiU0FQX19NZXNzYWdlc1wiXTtcblx0XHRjb25zdCBhUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKG9BdHRyaWJ1dGUpO1xuXHRcdGZvciAobGV0IGogPSAwOyBqIDwgYVByb3BlcnRpZXMubGVuZ3RoOyBqKyspIHtcblx0XHRcdGNvbnN0IHNQcm9wID0gYVByb3BlcnRpZXNbal0sXG5cdFx0XHRcdGFQcm9wZXJ0eUFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXCIvXCIgKyBzRW50aXR5U2V0ICsgXCIvXCIgKyBzUHJvcCArIFwiQFwiKTtcblx0XHRcdGlmIChhUHJvcGVydHlBbm5vdGF0aW9ucykge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0YVByb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLklzUG90ZW50aWFsbHlTZW5zaXRpdmVcIl0gfHxcblx0XHRcdFx0XHRhUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5FeGNsdWRlRnJvbU5hdmlnYXRpb25Db250ZXh0XCJdIHx8XG5cdFx0XHRcdFx0YVByb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLk1lYXN1cmVcIl1cblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0ZGVsZXRlIG9BdHRyaWJ1dGVbc1Byb3BdO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFQcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xcIl0pIHtcblx0XHRcdFx0XHRjb25zdCBvRmllbGRDb250cm9sID0gYVByb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFwiXTtcblx0XHRcdFx0XHRpZiAob0ZpZWxkQ29udHJvbFtcIiRFbnVtTWVtYmVyXCJdICYmIG9GaWVsZENvbnRyb2xbXCIkRW51bU1lbWJlclwiXS5zcGxpdChcIi9cIilbMV0gPT09IFwiSW5hcHBsaWNhYmxlXCIpIHtcblx0XHRcdFx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlW3NQcm9wXTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKG9GaWVsZENvbnRyb2xbXCIkUGF0aFwiXSAmJiBDb21tb25VdGlscy5pc0ZpZWxkQ29udHJvbFBhdGhJbmFwcGxpY2FibGUob0ZpZWxkQ29udHJvbFtcIiRQYXRoXCJdLCBvQXR0cmlidXRlKSkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIG9BdHRyaWJ1dGVbc1Byb3BdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRhT3V0QXR0cmlidXRlcy5wdXNoKG9BdHRyaWJ1dGUpO1xuXHR9XG5cblx0cmV0dXJuIGFPdXRBdHRyaWJ1dGVzO1xufVxuZnVuY3Rpb24gX2ZuQ2hlY2tJc01hdGNoKG9PYmplY3Q6IGFueSwgb0tleXNUb0NoZWNrOiBhbnkpIHtcblx0Zm9yIChjb25zdCBzS2V5IGluIG9LZXlzVG9DaGVjaykge1xuXHRcdGlmIChvS2V5c1RvQ2hlY2tbc0tleV0gIT09IG9PYmplY3Rbc0tleV0pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBmbkdldENvbnRleHRQYXRoUHJvcGVydGllcyhvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc0NvbnRleHRQYXRoOiBzdHJpbmcsIG9GaWx0ZXI/OiBvYmplY3QpIHtcblx0Y29uc3Qgb0VudGl0eVR5cGUgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzQ29udGV4dFBhdGggKyBcIi9cIikgfHwge30sXG5cdFx0b1Byb3BlcnRpZXM6IGFueSA9IHt9O1xuXG5cdGZvciAoY29uc3Qgc0tleSBpbiBvRW50aXR5VHlwZSkge1xuXHRcdGlmIChcblx0XHRcdG9FbnRpdHlUeXBlLmhhc093blByb3BlcnR5KHNLZXkpICYmXG5cdFx0XHQhL15cXCQvaS50ZXN0KHNLZXkpICYmXG5cdFx0XHRvRW50aXR5VHlwZVtzS2V5XS4ka2luZCAmJlxuXHRcdFx0X2ZuQ2hlY2tJc01hdGNoKG9FbnRpdHlUeXBlW3NLZXldLCBvRmlsdGVyIHx8IHsgJGtpbmQ6IFwiUHJvcGVydHlcIiB9KVxuXHRcdCkge1xuXHRcdFx0b1Byb3BlcnRpZXNbc0tleV0gPSBvRW50aXR5VHlwZVtzS2V5XTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9Qcm9wZXJ0aWVzO1xufVxuZnVuY3Rpb24gZm5HZXRNYW5kYXRvcnlGaWx0ZXJGaWVsZHMob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIHNDb250ZXh0UGF0aDogc3RyaW5nKSB7XG5cdGxldCBhTWFuZGF0b3J5RmlsdGVyRmllbGRzO1xuXHRpZiAob01ldGFNb2RlbCAmJiBzQ29udGV4dFBhdGgpIHtcblx0XHRhTWFuZGF0b3J5RmlsdGVyRmllbGRzID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0NvbnRleHRQYXRoICsgXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnMvUmVxdWlyZWRQcm9wZXJ0aWVzXCIpO1xuXHR9XG5cdHJldHVybiBhTWFuZGF0b3J5RmlsdGVyRmllbGRzO1xufVxuZnVuY3Rpb24gZm5HZXRJQk5BY3Rpb25zKG9Db250cm9sOiBhbnksIGFJQk5BY3Rpb25zOiBhbnlbXSkge1xuXHRjb25zdCBhQWN0aW9ucyA9IG9Db250cm9sICYmIG9Db250cm9sLmdldEFjdGlvbnMoKTtcblx0aWYgKGFBY3Rpb25zKSB7XG5cdFx0YUFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob0FjdGlvbjogYW55KSB7XG5cdFx0XHRpZiAob0FjdGlvbi5pc0EoXCJzYXAudWkubWRjLmFjdGlvbnRvb2xiYXIuQWN0aW9uVG9vbGJhckFjdGlvblwiKSkge1xuXHRcdFx0XHRvQWN0aW9uID0gb0FjdGlvbi5nZXRBY3Rpb24oKTtcblx0XHRcdH1cblx0XHRcdGlmIChvQWN0aW9uLmRhdGEoXCJJQk5EYXRhXCIpKSB7XG5cdFx0XHRcdGFJQk5BY3Rpb25zLnB1c2gob0FjdGlvbik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGFJQk5BY3Rpb25zO1xufVxuLyoqXG4gKiBAcGFyYW0gYUlCTkFjdGlvbnNcbiAqIEBwYXJhbSBvVmlld1xuICovXG5mdW5jdGlvbiBmblVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5KGFJQk5BY3Rpb25zOiBhbnlbXSwgb1ZpZXc6IFZpZXcpIHtcblx0Y29uc3Qgb1BhcmFtczogYW55ID0ge307XG5cdGNvbnN0IGZuR2V0TGlua3MgPSBmdW5jdGlvbiAob0RhdGE/OiBhbnkpIHtcblx0XHRpZiAob0RhdGEpIHtcblx0XHRcdGNvbnN0IGFLZXlzID0gT2JqZWN0LmtleXMob0RhdGEpO1xuXHRcdFx0YUtleXMuZm9yRWFjaChmdW5jdGlvbiAoc0tleTogc3RyaW5nKSB7XG5cdFx0XHRcdGlmIChzS2V5LmluZGV4T2YoXCJfXCIpICE9PSAwICYmIHNLZXkuaW5kZXhPZihcIm9kYXRhLmNvbnRleHRcIikgPT09IC0xKSB7XG5cdFx0XHRcdFx0b1BhcmFtc1tzS2V5XSA9IHsgdmFsdWU6IG9EYXRhW3NLZXldIH07XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAoYUlCTkFjdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRhSUJOQWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvSUJOQWN0aW9uOiBhbnkpIHtcblx0XHRcdFx0Y29uc3Qgc1NlbWFudGljT2JqZWN0ID0gb0lCTkFjdGlvbi5kYXRhKFwiSUJORGF0YVwiKS5zZW1hbnRpY09iamVjdDtcblx0XHRcdFx0Y29uc3Qgc0FjdGlvbiA9IG9JQk5BY3Rpb24uZGF0YShcIklCTkRhdGFcIikuYWN0aW9uO1xuXHRcdFx0XHRDb21tb25VdGlscy5nZXRTaGVsbFNlcnZpY2VzKG9WaWV3KVxuXHRcdFx0XHRcdC5nZXRMaW5rcyh7XG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogc1NlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0YWN0aW9uOiBzQWN0aW9uLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiBvUGFyYW1zXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQudGhlbihmdW5jdGlvbiAoYUxpbms6IGFueSkge1xuXHRcdFx0XHRcdFx0b0lCTkFjdGlvbi5zZXRWaXNpYmxlKG9JQk5BY3Rpb24uZ2V0VmlzaWJsZSgpICYmIGFMaW5rICYmIGFMaW5rLmxlbmd0aCA9PT0gMSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgcmV0cmlldmUgdGhlIGxpbmtzIGZyb20gdGhlIHNoZWxsIHNlcnZpY2VcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblx0aWYgKG9WaWV3ICYmIG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkpIHtcblx0XHQob1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBhbnkpXG5cdFx0XHQ/LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9EYXRhOiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIGZuR2V0TGlua3Mob0RhdGEpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIHRoZSBsaW5rcyBmcm9tIHRoZSBzaGVsbCBzZXJ2aWNlXCIsIG9FcnJvcik7XG5cdFx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRmbkdldExpbmtzKCk7XG5cdH1cbn1cbmZ1bmN0aW9uIGdldFRyYW5zbGF0ZWRUZXh0KHNGcmFtZXdvcmtLZXk6IHN0cmluZywgb1Jlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSwgb1BhcmFtcz86IGFueSwgc0VudGl0eVNldE5hbWU/OiBzdHJpbmcpIHtcblx0bGV0IHNSZXNvdXJjZUtleSA9IHNGcmFtZXdvcmtLZXk7XG5cdGlmIChvUmVzb3VyY2VCdW5kbGUpIHtcblx0XHRpZiAoc0VudGl0eVNldE5hbWUpIHtcblx0XHRcdC8vIFRoZXJlIGFyZSBjb25zb2xlIGVycm9ycyBsb2dnZWQgd2hlbiBtYWtpbmcgY2FsbHMgdG8gZ2V0VGV4dCBmb3Iga2V5cyB0aGF0IGFyZSBub3QgZGVmaW5lZCBpbiB0aGUgcmVzb3VyY2UgYnVuZGxlXG5cdFx0XHQvLyBmb3IgaW5zdGFuY2Uga2V5cyB3aGljaCBhcmUgc3VwcG9zZWQgdG8gYmUgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uLCBlLmcsIDxrZXk+fDxlbnRpdHlTZXQ+IHRvIG92ZXJyaWRlIGluc3RhbmNlIHNwZWNpZmljIHRleHRcblx0XHRcdC8vIGhlbmNlIGNoZWNrIGlmIHRleHQgZXhpc3RzICh1c2luZyBcImhhc1RleHRcIikgaW4gdGhlIHJlc291cmNlIGJ1bmRsZSBiZWZvcmUgY2FsbGluZyBcImdldFRleHRcIlxuXG5cdFx0XHQvLyBcImhhc1RleHRcIiBvbmx5IGNoZWNrcyBmb3IgdGhlIGtleSBpbiB0aGUgaW1tZWRpYXRlIHJlc291cmNlIGJ1bmRsZSBhbmQgbm90IGl0J3MgY3VzdG9tIGJ1bmRsZXNcblx0XHRcdC8vIGhlbmNlIHdlIG5lZWQgdG8gZG8gdGhpcyByZWN1cnJzaXZlbHkgdG8gY2hlY2sgaWYgdGhlIGtleSBleGlzdHMgaW4gYW55IG9mIHRoZSBidW5kbGVzIHRoZSBmb3JtcyB0aGUgRkUgcmVzb3VyY2UgYnVuZGxlXG5cdFx0XHRjb25zdCBiUmVzb3VyY2VLZXlFeGlzdHMgPSBfY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKFxuXHRcdFx0XHQob1Jlc291cmNlQnVuZGxlIGFzIGFueSkuYUN1c3RvbUJ1bmRsZXMsXG5cdFx0XHRcdHNGcmFtZXdvcmtLZXkgKyBcInxcIiArIHNFbnRpdHlTZXROYW1lXG5cdFx0XHQpO1xuXG5cdFx0XHQvLyBpZiByZXNvdXJjZSBrZXkgd2l0aCBlbnRpdHkgc2V0IG5hbWUgZm9yIGluc3RhbmNlIHNwZWNpZmljIHRleHQgb3ZlcnJpZGluZyBpcyBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb25cblx0XHRcdC8vIHRoZW4gdXNlIHRoZSBzYW1lIGtleSBvdGhlcndpc2UgdXNlIHRoZSBGcmFtZXdvcmsga2V5XG5cdFx0XHRzUmVzb3VyY2VLZXkgPSBiUmVzb3VyY2VLZXlFeGlzdHMgPyBzRnJhbWV3b3JrS2V5ICsgXCJ8XCIgKyBzRW50aXR5U2V0TmFtZSA6IHNGcmFtZXdvcmtLZXk7XG5cdFx0fVxuXHRcdHJldHVybiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChzUmVzb3VyY2VLZXksIG9QYXJhbXMpO1xuXHR9XG5cblx0Ly8gZG8gbm90IGFsbG93IG92ZXJyaWRlIHNvIGdldCB0ZXh0IGZyb20gdGhlIGludGVybmFsIGJ1bmRsZSBkaXJlY3RseVxuXHRvUmVzb3VyY2VCdW5kbGUgPSAoQ29yZSBhcyBDb3JlRXgpLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpO1xuXHRyZXR1cm4gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoc1Jlc291cmNlS2V5LCBvUGFyYW1zKTtcbn1cbmZ1bmN0aW9uIF9jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoYUN1c3RvbUJ1bmRsZXM6IGFueSwgc0tleTogYW55KSB7XG5cdGlmIChhQ3VzdG9tQnVuZGxlcy5sZW5ndGgpIHtcblx0XHRmb3IgKGxldCBpID0gYUN1c3RvbUJ1bmRsZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdGNvbnN0IHNWYWx1ZSA9IGFDdXN0b21CdW5kbGVzW2ldLmhhc1RleHQoc0tleSk7XG5cdFx0XHQvLyB0ZXh0IGZvdW5kIHJldHVybiB0cnVlXG5cdFx0XHRpZiAoc1ZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0X2NoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhhQ3VzdG9tQnVuZGxlc1tpXS5hQ3VzdG9tQnVuZGxlcywgc0tleSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGdldEFjdGlvblBhdGgob0FjdGlvbjogYW55LCBiUmV0dXJuT25seVBhdGg6IGJvb2xlYW4sIHNBY3Rpb25OYW1lPzogc3RyaW5nLCBiQ2hlY2tTdGF0aWNWYWx1ZT86IGJvb2xlYW4pIHtcblx0c0FjdGlvbk5hbWUgPSAhc0FjdGlvbk5hbWUgPyBvQWN0aW9uLmdldE9iamVjdChvQWN0aW9uLmdldFBhdGgoKSkgOiBzQWN0aW9uTmFtZTtcblx0bGV0IHNDb250ZXh0UGF0aCA9IG9BY3Rpb24uZ2V0UGF0aCgpLnNwbGl0KFwiL0BcIilbMF07XG5cdGNvbnN0IHNFbnRpdHlUeXBlTmFtZSA9IG9BY3Rpb24uZ2V0T2JqZWN0KHNDb250ZXh0UGF0aCkuJFR5cGU7XG5cdGNvbnN0IHNFbnRpdHlOYW1lID0gZ2V0RW50aXR5U2V0TmFtZShvQWN0aW9uLmdldE1vZGVsKCksIHNFbnRpdHlUeXBlTmFtZSk7XG5cdGlmIChzRW50aXR5TmFtZSkge1xuXHRcdHNDb250ZXh0UGF0aCA9IFwiL1wiICsgc0VudGl0eU5hbWU7XG5cdH1cblx0aWYgKGJDaGVja1N0YXRpY1ZhbHVlKSB7XG5cdFx0cmV0dXJuIG9BY3Rpb24uZ2V0T2JqZWN0KHNDb250ZXh0UGF0aCArIFwiL1wiICsgc0FjdGlvbk5hbWUgKyBcIkBPcmcuT0RhdGEuQ29yZS5WMS5PcGVyYXRpb25BdmFpbGFibGVcIik7XG5cdH1cblx0aWYgKGJSZXR1cm5Pbmx5UGF0aCkge1xuXHRcdHJldHVybiBzQ29udGV4dFBhdGggKyBcIi9cIiArIHNBY3Rpb25OYW1lO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzQ29udGV4dFBhdGg6IHNDb250ZXh0UGF0aCxcblx0XHRcdHNQcm9wZXJ0eTogb0FjdGlvbi5nZXRPYmplY3Qoc0NvbnRleHRQYXRoICsgXCIvXCIgKyBzQWN0aW9uTmFtZSArIFwiQE9yZy5PRGF0YS5Db3JlLlYxLk9wZXJhdGlvbkF2YWlsYWJsZS8kUGF0aFwiKSxcblx0XHRcdHNCaW5kaW5nUGFyYW1ldGVyOiBvQWN0aW9uLmdldE9iamVjdChzQ29udGV4dFBhdGggKyBcIi9cIiArIHNBY3Rpb25OYW1lICsgXCIvQCR1aTUub3ZlcmxvYWQvMC8kUGFyYW1ldGVyLzAvJE5hbWVcIilcblx0XHR9O1xuXHR9XG59XG5mdW5jdGlvbiBnZXRFbnRpdHlTZXROYW1lKG9NZXRhTW9kZWw6IGFueSwgc0VudGl0eVR5cGU6IGFueSkge1xuXHRjb25zdCBvRW50aXR5Q29udGFpbmVyID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHRmb3IgKGNvbnN0IGtleSBpbiBvRW50aXR5Q29udGFpbmVyKSB7XG5cdFx0aWYgKHR5cGVvZiBvRW50aXR5Q29udGFpbmVyW2tleV0gPT09IFwib2JqZWN0XCIgJiYgb0VudGl0eUNvbnRhaW5lcltrZXldLiRUeXBlID09PSBzRW50aXR5VHlwZSkge1xuXHRcdFx0cmV0dXJuIGtleTtcblx0XHR9XG5cdH1cbn1cbmZ1bmN0aW9uIGNvbXB1dGVEaXNwbGF5TW9kZShvUHJvcGVydHlBbm5vdGF0aW9uczogYW55LCBvQ29sbGVjdGlvbkFubm90YXRpb25zPzogYW55KSB7XG5cdGNvbnN0IG9UZXh0QW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCJdLFxuXHRcdG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uID1cblx0XHRcdG9UZXh0QW5ub3RhdGlvbiAmJlxuXHRcdFx0KChvUHJvcGVydHlBbm5vdGF0aW9ucyAmJlxuXHRcdFx0XHRvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIl0pIHx8XG5cdFx0XHRcdChvQ29sbGVjdGlvbkFubm90YXRpb25zICYmIG9Db2xsZWN0aW9uQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCJdKSk7XG5cblx0aWYgKG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uKSB7XG5cdFx0aWYgKG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dE9ubHlcIikge1xuXHRcdFx0cmV0dXJuIFwiRGVzY3JpcHRpb25cIjtcblx0XHR9IGVsc2UgaWYgKG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dExhc3RcIikge1xuXHRcdFx0cmV0dXJuIFwiVmFsdWVEZXNjcmlwdGlvblwiO1xuXHRcdH0gZWxzZSBpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0U2VwYXJhdGVcIikge1xuXHRcdFx0cmV0dXJuIFwiVmFsdWVcIjtcblx0XHR9XG5cdFx0Ly9EZWZhdWx0IHNob3VsZCBiZSBUZXh0Rmlyc3QgaWYgdGhlcmUgaXMgYSBUZXh0IGFubm90YXRpb24gYW5kIG5laXRoZXIgVGV4dE9ubHkgbm9yIFRleHRMYXN0IGFyZSBzZXRcblx0XHRyZXR1cm4gXCJEZXNjcmlwdGlvblZhbHVlXCI7XG5cdH1cblx0cmV0dXJuIG9UZXh0QW5ub3RhdGlvbiA/IFwiRGVzY3JpcHRpb25WYWx1ZVwiIDogXCJWYWx1ZVwiO1xufVxuZnVuY3Rpb24gX2dldEVudGl0eVR5cGUob0NvbnRleHQ6IGFueSkge1xuXHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0cmV0dXJuIG9NZXRhTW9kZWwuZ2V0T2JqZWN0KG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgob0NvbnRleHQuZ2V0UGF0aCgpKSArIFwiLyRUeXBlXCIpO1xufVxuZnVuY3Rpb24gX3JlcXVlc3RPYmplY3Qoc0FjdGlvbjogYW55LCBvU2VsZWN0ZWRDb250ZXh0OiBhbnksIHNQcm9wZXJ0eTogYW55KSB7XG5cdGxldCBvQ29udGV4dCA9IG9TZWxlY3RlZENvbnRleHQ7XG5cdGNvbnN0IG5CcmFja2V0SW5kZXggPSBzQWN0aW9uLmluZGV4T2YoXCIoXCIpO1xuXG5cdGlmIChuQnJhY2tldEluZGV4ID4gLTEpIHtcblx0XHRjb25zdCBzVGFyZ2V0VHlwZSA9IHNBY3Rpb24uc2xpY2UobkJyYWNrZXRJbmRleCArIDEsIC0xKTtcblx0XHRsZXQgc0N1cnJlbnRUeXBlID0gX2dldEVudGl0eVR5cGUob0NvbnRleHQpO1xuXG5cdFx0d2hpbGUgKHNDdXJyZW50VHlwZSAhPT0gc1RhcmdldFR5cGUpIHtcblx0XHRcdC8vIEZpbmQgcGFyZW50IGJpbmRpbmcgY29udGV4dCBhbmQgcmV0cmlldmUgZW50aXR5IHR5cGVcblx0XHRcdG9Db250ZXh0ID0gb0NvbnRleHQuZ2V0QmluZGluZygpLmdldENvbnRleHQoKTtcblx0XHRcdGlmIChvQ29udGV4dCkge1xuXHRcdFx0XHRzQ3VycmVudFR5cGUgPSBfZ2V0RW50aXR5VHlwZShvQ29udGV4dCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRMb2cud2FybmluZyhcIkNhbm5vdCBkZXRlcm1pbmUgdGFyZ2V0IHR5cGUgdG8gcmVxdWVzdCBwcm9wZXJ0eSB2YWx1ZSBmb3IgYm91bmQgYWN0aW9uIGludm9jYXRpb25cIik7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb0NvbnRleHQucmVxdWVzdE9iamVjdChzUHJvcGVydHkpO1xufVxuZnVuY3Rpb24gX3JlcXVlc3RQcm9wZXJ0eShvU2VsZWN0ZWRDb250ZXh0OiBhbnksIHNBY3Rpb246IGFueSwgc1Byb3BlcnR5OiBhbnksIHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGg6IGFueSkge1xuXHRjb25zdCBvUHJvbWlzZSA9XG5cdFx0c1Byb3BlcnR5ICYmIHNQcm9wZXJ0eS5pbmRleE9mKFwiL1wiKSA9PT0gMFxuXHRcdFx0PyByZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkoc1Byb3BlcnR5LCBvU2VsZWN0ZWRDb250ZXh0LmdldE1vZGVsKCkpXG5cdFx0XHQ6IF9yZXF1ZXN0T2JqZWN0KHNBY3Rpb24sIG9TZWxlY3RlZENvbnRleHQsIHNQcm9wZXJ0eSk7XG5cblx0cmV0dXJuIG9Qcm9taXNlLnRoZW4oZnVuY3Rpb24gKHZQcm9wZXJ0eVZhbHVlOiBhbnkpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcblx0XHRcdHZQcm9wZXJ0eVZhbHVlOiB2UHJvcGVydHlWYWx1ZSxcblx0XHRcdG9TZWxlY3RlZENvbnRleHQ6IG9TZWxlY3RlZENvbnRleHQsXG5cdFx0XHRzQWN0aW9uOiBzQWN0aW9uLFxuXHRcdFx0c0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aDogc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aFxuXHRcdH0pO1xuXHR9KTtcbn1cbmZ1bmN0aW9uIF9zZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUob0ludGVybmFsTW9kZWxDb250ZXh0OiBhbnksIGFSZXF1ZXN0UHJvbWlzZXM6IGFueSkge1xuXHRyZXR1cm4gUHJvbWlzZS5hbGwoYVJlcXVlc3RQcm9taXNlcylcblx0XHQudGhlbihmdW5jdGlvbiAoYVJlc3VsdHM6IGFueVtdKSB7XG5cdFx0XHRpZiAoYVJlc3VsdHMubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IGFBcHBsaWNhYmxlQ29udGV4dHM6IGFueVtdID0gW10sXG5cdFx0XHRcdFx0YU5vdEFwcGxpY2FibGVDb250ZXh0czogYW55W10gPSBbXTtcblx0XHRcdFx0YVJlc3VsdHMuZm9yRWFjaChmdW5jdGlvbiAoYVJlc3VsdDogYW55KSB7XG5cdFx0XHRcdFx0aWYgKGFSZXN1bHQpIHtcblx0XHRcdFx0XHRcdGlmIChhUmVzdWx0LnZQcm9wZXJ0eVZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRNb2RlbCgpLnNldFByb3BlcnR5KGFSZXN1bHQuc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdGFBcHBsaWNhYmxlQ29udGV4dHMucHVzaChhUmVzdWx0Lm9TZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0YU5vdEFwcGxpY2FibGVDb250ZXh0cy5wdXNoKGFSZXN1bHQub1NlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0X3NldER5bmFtaWNBY3Rpb25Db250ZXh0cyhvSW50ZXJuYWxNb2RlbENvbnRleHQsIGFSZXN1bHRzWzBdLnNBY3Rpb24sIGFBcHBsaWNhYmxlQ29udGV4dHMsIGFOb3RBcHBsaWNhYmxlQ29udGV4dHMpO1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0TG9nLnRyYWNlKFwiQ2Fubm90IHJldHJpZXZlIHByb3BlcnR5IHZhbHVlIGZyb20gcGF0aFwiLCBvRXJyb3IpO1xuXHRcdH0pO1xufVxuLyoqXG4gKiBAcGFyYW0gb0ludGVybmFsTW9kZWxDb250ZXh0XG4gKiBAcGFyYW0gc0FjdGlvblxuICogQHBhcmFtIGFBcHBsaWNhYmxlXG4gKiBAcGFyYW0gYU5vdEFwcGxpY2FibGVcbiAqL1xuZnVuY3Rpb24gX3NldER5bmFtaWNBY3Rpb25Db250ZXh0cyhvSW50ZXJuYWxNb2RlbENvbnRleHQ6IGFueSwgc0FjdGlvbjogYW55LCBhQXBwbGljYWJsZTogYW55LCBhTm90QXBwbGljYWJsZTogYW55KSB7XG5cdGNvbnN0IHNEeW5hbWljQWN0aW9uUGF0aFByZWZpeCA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCkgKyBcIi9keW5hbWljQWN0aW9ucy9cIiArIHNBY3Rpb24sXG5cdFx0b0ludGVybmFsTW9kZWwgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0TW9kZWwoKTtcblx0b0ludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoc0R5bmFtaWNBY3Rpb25QYXRoUHJlZml4ICsgXCIvYUFwcGxpY2FibGVcIiwgYUFwcGxpY2FibGUpO1xuXHRvSW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShzRHluYW1pY0FjdGlvblBhdGhQcmVmaXggKyBcIi9hTm90QXBwbGljYWJsZVwiLCBhTm90QXBwbGljYWJsZSk7XG59XG5mdW5jdGlvbiBzZXRBY3Rpb25FbmFibGVtZW50KG9JbnRlcm5hbE1vZGVsQ29udGV4dDogYW55LCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBhbnksIGFTZWxlY3RlZENvbnRleHRzOiBhbnkpIHtcblx0Y29uc3QgYVByb21pc2VzID0gW107XG5cdGZvciAoY29uc3Qgc0FjdGlvbiBpbiBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwKSB7XG5cdFx0Ly8gUmVzZXQgYWxsIHByb3BlcnRpZXMgYmVmb3JlIGNvbXB1dGF0aW9uXG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZHluYW1pY0FjdGlvbnMvXCIgKyBzQWN0aW9uLCB7XG5cdFx0XHRiRW5hYmxlZDogZmFsc2UsXG5cdFx0XHRhQXBwbGljYWJsZTogW10sXG5cdFx0XHRhTm90QXBwbGljYWJsZTogW11cblx0XHR9KTtcblx0XHQvLyBOb3RlIHRoYXQgbm9uIGR5bmFtaWMgYWN0aW9ucyBhcmUgbm90IHByb2Nlc3NlZCBoZXJlLiBUaGV5IGFyZSBlbmFibGVkIGJlY2F1c2Vcblx0XHQvLyBvbmUgb3IgbW9yZSBhcmUgc2VsZWN0ZWQgYW5kIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgY29uZGl0aW9uIGluIHRoZSB0ZW1wbGF0aW5nXG5cdFx0Ly8gaXMgdGhlbiB1bmRlZmluZWQgYW5kIHRodXMgdGhlIGJ1dHRvbiB0YWtlcyB0aGUgZGVmYXVsdCBlbmFibGluZywgd2hpY2ggaXMgdHJ1ZSFcblx0XHRjb25zdCBhQXBwbGljYWJsZSA9IFtdLFxuXHRcdFx0YU5vdEFwcGxpY2FibGUgPSBbXSxcblx0XHRcdHNQcm9wZXJ0eSA9IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXBbc0FjdGlvbl0sXG5cdFx0XHRzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKSArIFwiL2R5bmFtaWNBY3Rpb25zL1wiICsgc0FjdGlvbiArIFwiL2JFbmFibGVkXCI7XG5cblx0XHRpZiAodHlwZW9mIHNQcm9wZXJ0eSA9PT0gXCJvYmplY3RcIiAmJiBzUHJvcGVydHkgIT09IG51bGwgJiYgc1Byb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3Qgb1NlbGVjdGVkQ29udGV4dCA9IGFTZWxlY3RlZENvbnRleHRzW2ldO1xuXHRcdFx0XHRpZiAob1NlbGVjdGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdGNvbnN0IG9Db250ZXh0RGF0YSA9IG9TZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0Y29uc3Qgb1RyYW5zZm9ybWVkQmluZGluZyA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdFx0c1Byb3BlcnR5LFxuXHRcdFx0XHRcdFx0XCJCaW5kaW5nXCIsXG5cdFx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG5cdFx0XHRcdFx0XHRmdW5jdGlvbiAob0JpbmRpbmdFeHByZXNzaW9uOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KG9Db250ZXh0RGF0YVtvQmluZGluZ0V4cHJlc3Npb24ucGF0aF0pO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGNvbnN0IHNSZXN1bHQgPSBjb21waWxlQmluZGluZyhvVHJhbnNmb3JtZWRCaW5kaW5nKTtcblx0XHRcdFx0XHRpZiAoc1Jlc3VsdCA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRNb2RlbCgpLnNldFByb3BlcnR5KHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgsIHRydWUpO1xuXHRcdFx0XHRcdFx0YUFwcGxpY2FibGUucHVzaChvU2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YU5vdEFwcGxpY2FibGUucHVzaChvU2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdF9zZXREeW5hbWljQWN0aW9uQ29udGV4dHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBzQWN0aW9uLCBhQXBwbGljYWJsZSwgYU5vdEFwcGxpY2FibGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBhUmVxdWVzdFByb21pc2VzID0gW107XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFTZWxlY3RlZENvbnRleHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IG9TZWxlY3RlZENvbnRleHQgPSBhU2VsZWN0ZWRDb250ZXh0c1tpXTtcblx0XHRcdFx0aWYgKG9TZWxlY3RlZENvbnRleHQpIHtcblx0XHRcdFx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvU2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdGlmIChzUHJvcGVydHkgPT09IG51bGwgJiYgISFvQ29udGV4dERhdGFbXCIjXCIgKyBzQWN0aW9uXSkge1xuXHRcdFx0XHRcdFx0Ly9sb29rIGZvciBhY3Rpb24gYWR2ZXJ0aXNlbWVudCBpZiBwcmVzZW50IGFuZCBpdHMgdmFsdWUgaXMgbm90IG51bGxcblx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRNb2RlbCgpLnNldFByb3BlcnR5KHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgsIHRydWUpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIENvbGxlY3QgcHJvbWlzZXMgdG8gcmV0cmlldmUgc2luZ2xldG9uIG9yIG5vcm1hbCBwcm9wZXJ0eSB2YWx1ZSBhc3luY2hyb25vdXNseVxuXHRcdFx0XHRcdFx0YVJlcXVlc3RQcm9taXNlcy5wdXNoKF9yZXF1ZXN0UHJvcGVydHkob1NlbGVjdGVkQ29udGV4dCwgc0FjdGlvbiwgc1Byb3BlcnR5LCBzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFdoZW4gYWxsIHByb3BlcnR5IHZhbHVlcyBoYXZlIGJlZW4gcmV0cmlldmVkLCBzZXRcblx0XHRcdC8vIFRoZSBhcHBsaWNhYmxlIGFuZCBub3QtYXBwbGljYWJsZSBzZWxlY3RlZCBjb250ZXh0cyBmb3IgZWFjaCBhY3Rpb24gYW5kXG5cdFx0XHQvLyBUaGUgZW5hYmxlZCBwcm9wZXJ0eSBvZiB0aGUgZHluYW1pYyBhY3Rpb24gaW4gaW50ZXJuYWwgbW9kZWwgY29udGV4dC5cblx0XHRcdGFQcm9taXNlcy5wdXNoKF9zZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUob0ludGVybmFsTW9kZWxDb250ZXh0LCBhUmVxdWVzdFByb21pc2VzKSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBQcm9taXNlLmFsbChhUHJvbWlzZXMpO1xufVxuXG5mdW5jdGlvbiBzZXRPYmplY3RNYXBwaW5ncyhzU2VtYW50aWNPYmplY3Q6IHN0cmluZywgb1BhcmFtczogYW55LCBhU2VtYW50aWNPYmplY3RNYXBwaW5nczogYW55KSB7XG5cdGFTZW1hbnRpY09iamVjdE1hcHBpbmdzLmZvckVhY2goZnVuY3Rpb24gKG9JdGVtOiBhbnkpIHtcblx0XHRpZiAoc1NlbWFudGljT2JqZWN0ID09PSBvSXRlbS5zZW1hbnRpY09iamVjdCkge1xuXHRcdFx0Y29uc3Qgb01hcHBpbmdzID0gb0l0ZW0uaXRlbXM7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG9NYXBwaW5ncy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBzTG9jYWxQcm9wZXJ0eSA9IG9NYXBwaW5nc1tpXS5rZXk7XG5cdFx0XHRcdGNvbnN0IHNTZW1hbnRpY09iamVjdFByb3BlcnR5ID0gb01hcHBpbmdzW2ldLnZhbHVlO1xuXHRcdFx0XHRpZiAob1BhcmFtc1tzTG9jYWxQcm9wZXJ0eV0pIHtcblx0XHRcdFx0XHRvUGFyYW1zW3NTZW1hbnRpY09iamVjdFByb3BlcnR5XSA9IG9QYXJhbXNbc0xvY2FsUHJvcGVydHldO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIG9QYXJhbXM7XG59XG5cbmZ1bmN0aW9uIF9nZXREZWZhdWx0T3BlcmF0b3JzKHNQcm9wZXJ0eVR5cGU6IHN0cmluZykge1xuXHQvLyBtZGMgZGVmaW5lcyB0aGUgZnVsbCBzZXQgb2Ygb3BlcmF0aW9ucyB0aGF0IGFyZSBtZWFuaW5nZnVsIGZvciBlYWNoIEVkbSBUeXBlXG5cdC8vIFRPRE8gUmVwbGFjZSB3aXRoIG1vZGVsIC8gaW50ZXJuYWwgd2F5IG9mIHJldHJpZXZpbmcgdGhlIGFjdHVhbCBtb2RlbCB0eXBlIHVzZWQgZm9yIHRoZSBwcm9wZXJ0eVxuXHRjb25zdCBvRGF0YUNsYXNzID0gVHlwZVV0aWwuZ2V0RGF0YVR5cGVDbGFzc05hbWUoc1Byb3BlcnR5VHlwZSk7XG5cdC8vIFRPRE8gbmVlZCB0byBwYXNzIHByb3BlciBmb3JtYXRPcHRpb25zLCBjb25zdHJhaW50cyBoZXJlXG5cdGNvbnN0IG9CYXNlVHlwZSA9IFR5cGVVdGlsLmdldEJhc2VUeXBlKG9EYXRhQ2xhc3MsIHt9LCB7fSk7XG5cdHJldHVybiBGaWx0ZXJPcGVyYXRvclV0aWwuZ2V0T3BlcmF0b3JzRm9yVHlwZShvQmFzZVR5cGUpO1xufVxuZnVuY3Rpb24gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wczogYW55LCBhRXhwcmVzc2lvbk9wczogYW55KSB7XG5cdC8vIEZyb20gdGhlIGRlZmF1bHQgc2V0IG9mIE9wZXJhdG9ycyBmb3IgdGhlIEJhc2UgVHlwZSwgc2VsZWN0IHRob3NlIHRoYXQgYXJlIGRlZmluZWQgaW4gdGhlIEFsbG93ZWQgVmFsdWUuXG5cdC8vIEluIGNhc2UgdGhhdCBubyBvcGVyYXRvcnMgYXJlIGZvdW5kLCByZXR1cm4gdW5kZWZpbmVkIHNvIHRoYXQgdGhlIGRlZmF1bHQgc2V0IGlzIHVzZWQuXG5cdGNvbnN0IGFPcGVyYXRvcnMgPSBhRGVmYXVsdE9wcy5maWx0ZXIoZnVuY3Rpb24gKHNFbGVtZW50OiBhbnkpIHtcblx0XHRyZXR1cm4gYUV4cHJlc3Npb25PcHMuaW5kZXhPZihzRWxlbWVudCkgPiAtMTtcblx0fSk7XG5cdHJldHVybiBhT3BlcmF0b3JzLnRvU3RyaW5nKCkgfHwgdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbihhRXhwcmVzc2lvbnM6IGFueSkge1xuXHRjb25zdCBhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkgPSBDb21tb25VdGlscy5BbGxvd2VkRXhwcmVzc2lvbnNQcmlvO1xuXG5cdGFFeHByZXNzaW9ucy5zb3J0KGZ1bmN0aW9uIChhOiBhbnksIGI6IGFueSkge1xuXHRcdHJldHVybiBhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkuaW5kZXhPZihhKSAtIGFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eS5pbmRleE9mKGIpO1xuXHR9KTtcblxuXHRyZXR1cm4gYUV4cHJlc3Npb25zWzBdO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byBmZXRjaCB0aGUgY29ycmVjdCBvcGVyYXRvcnMgYmFzZWQgb24gdGhlIGZpbHRlciByZXN0cmljdGlvbnMgdGhhdCBjYW4gYmUgYW5ub3RhdGVkIG9uIGFuIGVudGl0eSBzZXQgb3IgYSBuYXZpZ2F0aW9uIHByb3BlcnR5LlxuICogV2UgcmV0dXJuIHRoZSBjb3JyZWN0IG9wZXJhdG9ycyBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHJlc3RyaWN0aW9uIGFuZCBhbHNvIGNoZWNrIGZvciB0aGUgb3BlcmF0b3JzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IHRvIGluY2x1ZGUgb3IgZXhjbHVkZSB0aGVtLlxuICpcbiAqIEBwYXJhbSBzUHJvcGVydHkgU3RyaW5nIG5hbWUgb2YgdGhlIHByb3BlcnR5XG4gKiBAcGFyYW0gc0VudGl0eVNldFBhdGggU3RyaW5nIHBhdGggdG8gdGhlIGVudGl0eSBzZXRcbiAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IHVzZWQgZHVyaW5nIHRlbXBsYXRpbmdcbiAqIEBwYXJhbSBzVHlwZSBTdHJpbmcgZGF0YSB0eXBlIG9kIHRoZSBwcm9wZXJ0eSwgZm9yIGV4YW1wbGUgZWRtLkRhdGVcbiAqIEBwYXJhbSBiVXNlU2VtYW50aWNEYXRlUmFuZ2UgQm9vbGVhbiBwYXNzZWQgZnJvbSB0aGUgbWFuaWZlc3QgZm9yIHNlbWFudGljIGRhdGUgcmFuZ2VcbiAqIEBwYXJhbSBzU2V0dGluZ3MgU3RyaW5naWZpZWQgb2JqZWN0IG9mIHRoZSBwcm9wZXJ0eSBzZXR0aW5nc1xuICogQHJldHVybnMgU3RyaW5nIGNvbnRhaW5pbmcgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygb3BlcmF0b3JzIGZvciBmaWx0ZXJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHkoXG5cdHNQcm9wZXJ0eTogYW55LFxuXHRzRW50aXR5U2V0UGF0aDogYW55LFxuXHRvQ29udGV4dDogYW55LFxuXHRzVHlwZT86IGFueSxcblx0YlVzZVNlbWFudGljRGF0ZVJhbmdlPzogYW55LFxuXHRzU2V0dGluZ3M/OiBhbnlcbikge1xuXHRjb25zdCBvRmlsdGVyUmVzdHJpY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoKHNFbnRpdHlTZXRQYXRoLCBvQ29udGV4dCk7XG5cdGNvbnN0IGFFcXVhbHNPcHMgPSBbXCJFUVwiXTtcblx0Y29uc3QgYVNpbmdsZVJhbmdlT3BzID0gW1wiRVFcIiwgXCJHRVwiLCBcIkxFXCIsIFwiTFRcIiwgXCJHVFwiLCBcIkJUXCIsIFwiTk9UTEVcIiwgXCJOT1RMVFwiLCBcIk5PVEdFXCIsIFwiTk9UR1RcIl07XG5cdGNvbnN0IGFTaW5nbGVSYW5nZURUQmFzaWNPcHMgPSBbXCJFUVwiLCBcIkJUXCJdO1xuXHRjb25zdCBhU2luZ2xlVmFsdWVEYXRlT3BzID0gW1xuXHRcdFwiVE9EQVlcIixcblx0XHRcIlRPTU9SUk9XXCIsXG5cdFx0XCJZRVNURVJEQVlcIixcblx0XHRcIkRBVEVcIixcblx0XHRcIkZJUlNUREFZV0VFS1wiLFxuXHRcdFwiTEFTVERBWVdFRUtcIixcblx0XHRcIkZJUlNUREFZTU9OVEhcIixcblx0XHRcIkxBU1REQVlNT05USFwiLFxuXHRcdFwiRklSU1REQVlRVUFSVEVSXCIsXG5cdFx0XCJMQVNUREFZUVVBUlRFUlwiLFxuXHRcdFwiRklSU1REQVlZRUFSXCIsXG5cdFx0XCJMQVNUREFZWUVBUlwiXG5cdF07XG5cdGNvbnN0IGFCYXNpY0RhdGVUaW1lT3BzID0gW1wiRVFcIiwgXCJMRVwiLCBcIkdFXCIsIFwiQlRcIl07XG5cdGNvbnN0IGFNdWx0aVJhbmdlT3BzID0gW1wiRVFcIiwgXCJHRVwiLCBcIkxFXCIsIFwiTFRcIiwgXCJHVFwiLCBcIkJUXCIsIFwiTkVcIiwgXCJOT1RCVFwiLCBcIk5PVExFXCIsIFwiTk9UTFRcIiwgXCJOT1RHRVwiLCBcIk5PVEdUXCJdO1xuXHRjb25zdCBhU2VhcmNoRXhwcmVzc2lvbk9wcyA9IFtcIkNvbnRhaW5zXCIsIFwiTm90Q29udGFpbnNcIiwgXCJTdGFydHNXaXRoXCIsIFwiTm90U3RhcnRzV2l0aFwiLCBcIkVuZHNXaXRoXCIsIFwiTm90RW5kc1dpdGhcIl07XG5cdGNvbnN0IGFTZW1hbnRpY0RhdGVPcHNFeHQgPSBTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0U3VwcG9ydGVkT3BlcmF0aW9ucygpO1xuXHRjb25zdCBiU2VtYW50aWNEYXRlUmFuZ2UgPSBiVXNlU2VtYW50aWNEYXRlUmFuZ2UgPT09IFwidHJ1ZVwiIHx8IGJVc2VTZW1hbnRpY0RhdGVSYW5nZSA9PT0gdHJ1ZTtcblx0bGV0IGFTZW1hbnRpY0RhdGVPcHM6IGFueVtdID0gW107XG5cdGNvbnN0IG9TZXR0aW5ncyA9IHR5cGVvZiBzU2V0dGluZ3MgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHNTZXR0aW5ncykuY3VzdG9tRGF0YSA6IHNTZXR0aW5ncztcblxuXHRpZiAob0NvbnRleHQuZ2V0T2JqZWN0KHNFbnRpdHlTZXRQYXRoICsgXCIvQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0XCIpID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuIGFFcXVhbHNPcHMudG9TdHJpbmcoKTtcblx0fVxuXG5cdGlmIChvU2V0dGluZ3MgJiYgb1NldHRpbmdzLm9wZXJhdG9yQ29uZmlndXJhdGlvbiAmJiBvU2V0dGluZ3Mub3BlcmF0b3JDb25maWd1cmF0aW9uLmxlbmd0aCA+IDApIHtcblx0XHRhU2VtYW50aWNEYXRlT3BzID0gU2VtYW50aWNEYXRlT3BlcmF0b3JzLmdldEZpbHRlck9wZXJhdGlvbnMob1NldHRpbmdzLm9wZXJhdG9yQ29uZmlndXJhdGlvbik7XG5cdH0gZWxzZSB7XG5cdFx0YVNlbWFudGljRGF0ZU9wcyA9IFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRTZW1hbnRpY0RhdGVPcGVyYXRpb25zKCk7XG5cdH1cblx0Y29uc3QgYVNpbmdsZVJhbmdlRGF0ZVRpbWVPcHMgPSBhU2VtYW50aWNEYXRlT3BzLmZpbHRlcihmdW5jdGlvbiAoc09wZXJhdG9yKSB7XG5cdFx0cmV0dXJuIHNPcGVyYXRvciAhPT0gXCJEQVRFXCIgJiYgc09wZXJhdG9yICE9PSBcIkRBVEVSQU5HRVwiICYmIHNPcGVyYXRvciAhPT0gXCJGUk9NXCIgJiYgc09wZXJhdG9yICE9PSBcIlRPXCI7XG5cdH0pO1xuXHQvLyBHZXQgdGhlIGRlZmF1bHQgT3BlcmF0b3JzIGZvciB0aGlzIFByb3BlcnR5IFR5cGVcblx0bGV0IGFEZWZhdWx0T3BlcmF0b3JzID0gX2dldERlZmF1bHRPcGVyYXRvcnMoc1R5cGUpO1xuXHRsZXQgc1Jlc3RyaWN0aW9ucztcblx0Ly8gSXMgdGhlcmUgYSBGaWx0ZXIgUmVzdHJpY3Rpb24gZGVmaW5lZCBmb3IgdGhpcyBwcm9wZXJ0eT9cblx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnMgJiYgb0ZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgJiYgb0ZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNbc1Byb3BlcnR5XSkge1xuXHRcdC8vIEV4dGVuZGluZyB0aGUgZGVmYXVsdCBvcGVyYXRvcnMgbGlzdCB3aXRoIFNlbWFudGljIERhdGUgb3B0aW9ucyBEQVRFUkFOR0UsIERBVEUsIEZST00gYW5kIFRPXG5cdFx0aWYgKGJTZW1hbnRpY0RhdGVSYW5nZSkge1xuXHRcdFx0YURlZmF1bHRPcGVyYXRvcnMgPSBhU2VtYW50aWNEYXRlT3BzRXh0LmNvbmNhdChhRGVmYXVsdE9wZXJhdG9ycyk7XG5cdFx0fVxuXHRcdGNvbnN0IHNBbGxvd2VkRXhwcmVzc2lvbiA9IENvbW1vblV0aWxzLmdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24ob0ZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNbc1Byb3BlcnR5XSk7XG5cblx0XHQvLyBJbiBjYXNlIG1vcmUgdGhhbiBvbmUgQWxsb3dlZCBFeHByZXNzaW9ucyBoYXMgYmVlbiBkZWZpbmVkIGZvciBhIHByb3BlcnR5XG5cdFx0Ly8gY2hvb3NlIHRoZSBtb3N0IHJlc3RyaWN0aXZlIEFsbG93ZWQgRXhwcmVzc2lvblxuXG5cdFx0Ly8gTXVsdGlWYWx1ZSBoYXMgc2FtZSBPcGVyYXRvciBhcyBTaW5nbGVWYWx1ZSwgYnV0IHRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIChtYXhDb25kaXRpb25zKVxuXHRcdHN3aXRjaCAoc0FsbG93ZWRFeHByZXNzaW9uKSB7XG5cdFx0XHRjYXNlIFwiU2luZ2xlVmFsdWVcIjpcblx0XHRcdFx0Y29uc3QgYVNpbmdsZVZhbHVlT3BzID0gc1R5cGUgPT09IFwiRWRtLkRhdGVcIiAmJiBiU2VtYW50aWNEYXRlUmFuZ2UgPyBhU2luZ2xlVmFsdWVEYXRlT3BzIDogYUVxdWFsc09wcztcblx0XHRcdFx0c1Jlc3RyaWN0aW9ucyA9IF9nZXRSZXN0cmljdGlvbnMoYURlZmF1bHRPcGVyYXRvcnMsIGFTaW5nbGVWYWx1ZU9wcyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIk11bHRpVmFsdWVcIjpcblx0XHRcdFx0c1Jlc3RyaWN0aW9ucyA9IF9nZXRSZXN0cmljdGlvbnMoYURlZmF1bHRPcGVyYXRvcnMsIGFFcXVhbHNPcHMpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJTaW5nbGVSYW5nZVwiOlxuXHRcdFx0XHRjb25zdCBhRXhwcmVzc2lvbk9wcyA9IGJTZW1hbnRpY0RhdGVSYW5nZVxuXHRcdFx0XHRcdD8gc1R5cGUgPT09IFwiRWRtLkRhdGVcIlxuXHRcdFx0XHRcdFx0PyBhU2VtYW50aWNEYXRlT3BzXG5cdFx0XHRcdFx0XHQ6IHNUeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiXG5cdFx0XHRcdFx0XHQ/IGFTaW5nbGVSYW5nZURhdGVUaW1lT3BzLmNvbmNhdChhQmFzaWNEYXRlVGltZU9wcylcblx0XHRcdFx0XHRcdDogYVNpbmdsZVJhbmdlT3BzXG5cdFx0XHRcdFx0OiBzVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIlxuXHRcdFx0XHRcdD8gYVNpbmdsZVJhbmdlRFRCYXNpY09wc1xuXHRcdFx0XHRcdDogYVNpbmdsZVJhbmdlT3BzO1xuXHRcdFx0XHRjb25zdCBzT3BlcmF0b3JzID0gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wZXJhdG9ycywgYUV4cHJlc3Npb25PcHMpO1xuXHRcdFx0XHRzUmVzdHJpY3Rpb25zID0gc09wZXJhdG9ycyA/IHNPcGVyYXRvcnMgOiBcIlwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJNdWx0aVJhbmdlXCI6XG5cdFx0XHRcdHNSZXN0cmljdGlvbnMgPSBfZ2V0UmVzdHJpY3Rpb25zKGFEZWZhdWx0T3BlcmF0b3JzLCBhTXVsdGlSYW5nZU9wcyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIlNlYXJjaEV4cHJlc3Npb25cIjpcblx0XHRcdFx0c1Jlc3RyaWN0aW9ucyA9IF9nZXRSZXN0cmljdGlvbnMoYURlZmF1bHRPcGVyYXRvcnMsIGFTZWFyY2hFeHByZXNzaW9uT3BzKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblwiOlxuXHRcdFx0XHRzUmVzdHJpY3Rpb25zID0gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wZXJhdG9ycywgYVNlYXJjaEV4cHJlc3Npb25PcHMuY29uY2F0KGFNdWx0aVJhbmdlT3BzKSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0Ly8gSW4gY2FzZSBBbGxvd2VkRXhwcmVzc2lvbnMgaXMgbm90IHJlY29nbmlzZWQsIHVuZGVmaW5lZCBpbiByZXR1cm4gcmVzdWx0cyBpbiB0aGUgZGVmYXVsdCBzZXQgb2Zcblx0XHQvLyBvcGVyYXRvcnMgZm9yIHRoZSB0eXBlLlxuXHR9XG5cdHJldHVybiBzUmVzdHJpY3Rpb25zO1xufVxuXG5mdW5jdGlvbiBnZXRPcGVyYXRvcnNGb3JEYXRlUHJvcGVydHkocHJvcGVydHlUeXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuXHQvLyBJbiBjYXNlIEFsbG93ZWRFeHByZXNzaW9ucyBpcyBub3QgcHJvdmlkZWQgZm9yIHR5cGUgRWRtLkRhdGUgdGhlbiBhbGwgdGhlIGRlZmF1bHRcblx0Ly8gb3BlcmF0b3JzIGZvciB0aGUgdHlwZSBzaG91bGQgYmUgcmV0dXJuZWQgZXhjbHVkaW5nIHNlbWFudGljIG9wZXJhdG9ycyBmcm9tIHRoZSBsaXN0LlxuXHRjb25zdCBhRGVmYXVsdE9wZXJhdG9ycyA9IF9nZXREZWZhdWx0T3BlcmF0b3JzKHByb3BlcnR5VHlwZSk7XG5cdGNvbnN0IGFNdWx0aVJhbmdlT3BzID0gW1wiRVFcIiwgXCJHRVwiLCBcIkxFXCIsIFwiTFRcIiwgXCJHVFwiLCBcIkJUXCIsIFwiTkVcIiwgXCJOT1RCVFwiLCBcIk5PVExFXCIsIFwiTk9UTFRcIiwgXCJOT1RHRVwiLCBcIk5PVEdUXCJdO1xuXHRyZXR1cm4gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wZXJhdG9ycywgYU11bHRpUmFuZ2VPcHMpO1xufVxuXG5mdW5jdGlvbiBnZXRQYXJhbWV0ZXJJbmZvKG9NZXRhTW9kZWw6IGFueSwgc0NvbnRleHRQYXRoOiBhbnkpIHtcblx0Y29uc3Qgc1BhcmFtZXRlckNvbnRleHRQYXRoID0gc0NvbnRleHRQYXRoLnN1YnN0cmluZygwLCBzQ29udGV4dFBhdGgubGFzdEluZGV4T2YoXCIvXCIpKTtcblx0Y29uc3QgYlJlc3VsdENvbnRleHQgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzUGFyYW1ldGVyQ29udGV4dFBhdGggKyBcIi9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlc3VsdENvbnRleHRcIik7XG5cdGNvbnN0IG9QYXJhbWV0ZXJJbmZvOiBhbnkgPSB7fTtcblx0aWYgKGJSZXN1bHRDb250ZXh0ICYmIHNQYXJhbWV0ZXJDb250ZXh0UGF0aCAhPT0gc0NvbnRleHRQYXRoKSB7XG5cdFx0b1BhcmFtZXRlckluZm8uY29udGV4dFBhdGggPSBzUGFyYW1ldGVyQ29udGV4dFBhdGg7XG5cdFx0b1BhcmFtZXRlckluZm8ucGFyYW1ldGVyUHJvcGVydGllcyA9IENvbW1vblV0aWxzLmdldENvbnRleHRQYXRoUHJvcGVydGllcyhvTWV0YU1vZGVsLCBzUGFyYW1ldGVyQ29udGV4dFBhdGgpO1xuXHR9XG5cdHJldHVybiBvUGFyYW1ldGVySW5mbztcbn1cbmZ1bmN0aW9uIGFkZFNlbGVjdE9wdGlvblRvQ29uZGl0aW9ucyhvUHJvcGVydHlNZXRhZGF0YTogYW55LCBhVmFsaWRPcGVyYXRvcnM6IGFueSwgYUN1bXVsYXRpdmVDb25kaXRpb25zOiBhbnksIG9TZWxlY3RPcHRpb246IGFueSkge1xuXHRjb25zdCBvQ29uZGl0aW9uID0gZ2V0Q29uZGl0aW9ucyhvU2VsZWN0T3B0aW9uLCBvUHJvcGVydHlNZXRhZGF0YSk7XG5cdGlmIChvQ29uZGl0aW9uKSB7XG5cdFx0aWYgKCFhVmFsaWRPcGVyYXRvcnMgfHwgYVZhbGlkT3BlcmF0b3JzLmluZGV4T2Yob0NvbmRpdGlvbi5vcGVyYXRvcikgPiAtMSkge1xuXHRcdFx0YUN1bXVsYXRpdmVDb25kaXRpb25zLnB1c2gob0NvbmRpdGlvbik7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhQ3VtdWxhdGl2ZUNvbmRpdGlvbnM7XG59XG4vKipcbiAqIEBwYXJhbSBzQ29udGV4dFBhdGhcbiAqIEBwYXJhbSBvU2VsZWN0aW9uVmFyaWFudFxuICogQHBhcmFtIHNTZWxlY3RPcHRpb25Qcm9wXG4gKiBAcGFyYW0gb0NvbmRpdGlvbnNcbiAqIEBwYXJhbSBzQ29uZGl0aW9uUGF0aFxuICogQHBhcmFtIHNDb25kaXRpb25Qcm9wXG4gKiBAcGFyYW0gb1ZhbGlkUHJvcGVydGllc1xuICogQHBhcmFtIG9NZXRhTW9kZWxcbiAqIEBwYXJhbSBpc1BhcmFtZXRlclxuICovXG5mdW5jdGlvbiBhZGRTZWxlY3RPcHRpb25zVG9Db25kaXRpb25zKFxuXHRzQ29udGV4dFBhdGg6IGFueSxcblx0b1NlbGVjdGlvblZhcmlhbnQ6IGFueSxcblx0c1NlbGVjdE9wdGlvblByb3A6IGFueSxcblx0b0NvbmRpdGlvbnM6IGFueSxcblx0c0NvbmRpdGlvblBhdGg6IGFueSxcblx0c0NvbmRpdGlvblByb3A6IGFueSxcblx0b1ZhbGlkUHJvcGVydGllczogYW55LFxuXHRvTWV0YU1vZGVsOiBhbnksXG5cdGlzUGFyYW1ldGVyOiBhbnlcbikge1xuXHRsZXQgYUNvbmRpdGlvbnM6IGFueVtdID0gW10sXG5cdFx0YVNlbGVjdE9wdGlvbnMsXG5cdFx0YVZhbGlkT3BlcmF0b3JzO1xuXG5cdGlmIChpc1BhcmFtZXRlciB8fCBDb21tb25VdGlscy5pc1Byb3BlcnR5RmlsdGVyYWJsZShvTWV0YU1vZGVsLCBzQ29udGV4dFBhdGgsIHNDb25kaXRpb25Qcm9wLCB0cnVlKSkge1xuXHRcdGFTZWxlY3RPcHRpb25zID0gb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uKHNTZWxlY3RPcHRpb25Qcm9wKTtcblx0XHRhVmFsaWRPcGVyYXRvcnMgPSBpc1BhcmFtZXRlciA/IFtcIkVRXCJdIDogQ29tbW9uVXRpbHMuZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHkoc0NvbmRpdGlvblByb3AsIHNDb250ZXh0UGF0aCwgb01ldGFNb2RlbCk7XG5cdFx0Y29uc3Qgb1Byb3BlcnR5TWV0YWRhdGEgPSBvVmFsaWRQcm9wZXJ0aWVzW3NDb25kaXRpb25Qcm9wXTtcblx0XHQvLyBDcmVhdGUgY29uZGl0aW9ucyBmb3IgYWxsIHRoZSBzZWxlY3RPcHRpb25zIG9mIHRoZSBwcm9wZXJ0eVxuXHRcdGFDb25kaXRpb25zID0gaXNQYXJhbWV0ZXJcblx0XHRcdD8gYWRkU2VsZWN0T3B0aW9uVG9Db25kaXRpb25zKG9Qcm9wZXJ0eU1ldGFkYXRhLCBhVmFsaWRPcGVyYXRvcnMsIGFDb25kaXRpb25zLCBhU2VsZWN0T3B0aW9uc1swXSlcblx0XHRcdDogYVNlbGVjdE9wdGlvbnMucmVkdWNlKGFkZFNlbGVjdE9wdGlvblRvQ29uZGl0aW9ucy5iaW5kKG51bGwsIG9Qcm9wZXJ0eU1ldGFkYXRhLCBhVmFsaWRPcGVyYXRvcnMpLCBhQ29uZGl0aW9ucyk7XG5cdFx0aWYgKGFDb25kaXRpb25zLmxlbmd0aCkge1xuXHRcdFx0aWYgKHNDb25kaXRpb25QYXRoKSB7XG5cdFx0XHRcdG9Db25kaXRpb25zW3NDb25kaXRpb25QYXRoICsgc0NvbmRpdGlvblByb3BdID0gb0NvbmRpdGlvbnMuaGFzT3duUHJvcGVydHkoc0NvbmRpdGlvblBhdGggKyBzQ29uZGl0aW9uUHJvcClcblx0XHRcdFx0XHQ/IG9Db25kaXRpb25zW3NDb25kaXRpb25QYXRoICsgc0NvbmRpdGlvblByb3BdLmNvbmNhdChhQ29uZGl0aW9ucylcblx0XHRcdFx0XHQ6IGFDb25kaXRpb25zO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b0NvbmRpdGlvbnNbc0NvbmRpdGlvblByb3BdID0gb0NvbmRpdGlvbnMuaGFzT3duUHJvcGVydHkoc0NvbmRpdGlvblByb3ApXG5cdFx0XHRcdFx0PyBvQ29uZGl0aW9uc1tzQ29uZGl0aW9uUHJvcF0uY29uY2F0KGFDb25kaXRpb25zKVxuXHRcdFx0XHRcdDogYUNvbmRpdGlvbnM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGFkZFNlbGVjdGlvblZhcmlhbnRUb0NvbmRpdGlvbnMob1NlbGVjdGlvblZhcmlhbnQ6IGFueSwgb0NvbmRpdGlvbnM6IG9iamVjdCwgb01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIHNDb250ZXh0UGF0aDogc3RyaW5nKSB7XG5cdGNvbnN0IGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcyA9IG9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzKCksXG5cdFx0b1ZhbGlkUHJvcGVydGllcyA9IENvbW1vblV0aWxzLmdldENvbnRleHRQYXRoUHJvcGVydGllcyhvTWV0YU1vZGVsLCBzQ29udGV4dFBhdGgpLFxuXHRcdGFNZXRhZGF0UHJvcGVydGllcyA9IE9iamVjdC5rZXlzKG9WYWxpZFByb3BlcnRpZXMpLFxuXHRcdG9QYXJhbWV0ZXJJbmZvID0gQ29tbW9uVXRpbHMuZ2V0UGFyYW1ldGVySW5mbyhvTWV0YU1vZGVsLCBzQ29udGV4dFBhdGgpLFxuXHRcdHNQYXJhbWV0ZXJDb250ZXh0UGF0aCA9IG9QYXJhbWV0ZXJJbmZvLmNvbnRleHRQYXRoLFxuXHRcdG9WYWxpZFBhcmFtZXRlclByb3BlcnRpZXMgPSBvUGFyYW1ldGVySW5mby5wYXJhbWV0ZXJQcm9wZXJ0aWVzLFxuXHRcdGJIYXNQYXJhbWV0ZXJzID0gISFvUGFyYW1ldGVySW5mby5jb250ZXh0UGF0aCAmJiBvVmFsaWRQYXJhbWV0ZXJQcm9wZXJ0aWVzICYmIE9iamVjdC5rZXlzKG9WYWxpZFBhcmFtZXRlclByb3BlcnRpZXMpLmxlbmd0aCA+IDA7XG5cblx0aWYgKGJIYXNQYXJhbWV0ZXJzKSB7XG5cdFx0Y29uc3QgYU1ldGFkYXRhUGFyYW1ldGVycyA9IE9iamVjdC5rZXlzKG9WYWxpZFBhcmFtZXRlclByb3BlcnRpZXMpO1xuXHRcdGFNZXRhZGF0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAoc01ldGFkYXRhUGFyYW1ldGVyOiBzdHJpbmcpIHtcblx0XHRcdGxldCBzU2VsZWN0T3B0aW9uTmFtZTtcblx0XHRcdGlmIChhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoXCIkUGFyYW1ldGVyLlwiICsgc01ldGFkYXRhUGFyYW1ldGVyKSkge1xuXHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IFwiJFBhcmFtZXRlci5cIiArIHNNZXRhZGF0YVBhcmFtZXRlcjtcblx0XHRcdH0gZWxzZSBpZiAoYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKHNNZXRhZGF0YVBhcmFtZXRlcikpIHtcblx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBzTWV0YWRhdGFQYXJhbWV0ZXI7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRzTWV0YWRhdGFQYXJhbWV0ZXIuc3RhcnRzV2l0aChcIlBfXCIpICYmXG5cdFx0XHRcdGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhcIiRQYXJhbWV0ZXIuXCIgKyBzTWV0YWRhdGFQYXJhbWV0ZXIuc2xpY2UoMiwgc01ldGFkYXRhUGFyYW1ldGVyLmxlbmd0aCkpXG5cdFx0XHQpIHtcblx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBcIiRQYXJhbWV0ZXIuXCIgKyBzTWV0YWRhdGFQYXJhbWV0ZXIuc2xpY2UoMiwgc01ldGFkYXRhUGFyYW1ldGVyLmxlbmd0aCk7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRzTWV0YWRhdGFQYXJhbWV0ZXIuc3RhcnRzV2l0aChcIlBfXCIpICYmXG5cdFx0XHRcdGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhzTWV0YWRhdGFQYXJhbWV0ZXIuc2xpY2UoMiwgc01ldGFkYXRhUGFyYW1ldGVyLmxlbmd0aCkpXG5cdFx0XHQpIHtcblx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBzTWV0YWRhdGFQYXJhbWV0ZXIuc2xpY2UoMiwgc01ldGFkYXRhUGFyYW1ldGVyLmxlbmd0aCk7XG5cdFx0XHR9IGVsc2UgaWYgKGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhcIiRQYXJhbWV0ZXIuUF9cIiArIHNNZXRhZGF0YVBhcmFtZXRlcikpIHtcblx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBcIiRQYXJhbWV0ZXIuUF9cIiArIHNNZXRhZGF0YVBhcmFtZXRlcjtcblx0XHRcdH0gZWxzZSBpZiAoYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKFwiUF9cIiArIHNNZXRhZGF0YVBhcmFtZXRlcikpIHtcblx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBcIlBfXCIgKyBzTWV0YWRhdGFQYXJhbWV0ZXI7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzU2VsZWN0T3B0aW9uTmFtZSkge1xuXHRcdFx0XHRhZGRTZWxlY3RPcHRpb25zVG9Db25kaXRpb25zKFxuXHRcdFx0XHRcdHNQYXJhbWV0ZXJDb250ZXh0UGF0aCxcblx0XHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSxcblx0XHRcdFx0XHRvQ29uZGl0aW9ucyxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0c01ldGFkYXRhUGFyYW1ldGVyLFxuXHRcdFx0XHRcdG9WYWxpZFBhcmFtZXRlclByb3BlcnRpZXMsXG5cdFx0XHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0YU1ldGFkYXRQcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKHNNZXRhZGF0YVByb3BlcnR5OiBzdHJpbmcpIHtcblx0XHRsZXQgc1NlbGVjdE9wdGlvbk5hbWU7XG5cdFx0aWYgKGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhzTWV0YWRhdGFQcm9wZXJ0eSkpIHtcblx0XHRcdHNTZWxlY3RPcHRpb25OYW1lID0gc01ldGFkYXRhUHJvcGVydHk7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdHNNZXRhZGF0YVByb3BlcnR5LnN0YXJ0c1dpdGgoXCJQX1wiKSAmJlxuXHRcdFx0YVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKHNNZXRhZGF0YVByb3BlcnR5LnNsaWNlKDIsIHNNZXRhZGF0YVByb3BlcnR5Lmxlbmd0aCkpXG5cdFx0KSB7XG5cdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IHNNZXRhZGF0YVByb3BlcnR5LnNsaWNlKDIsIHNNZXRhZGF0YVByb3BlcnR5Lmxlbmd0aCk7XG5cdFx0fSBlbHNlIGlmIChhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoXCJQX1wiICsgc01ldGFkYXRhUHJvcGVydHkpKSB7XG5cdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IFwiUF9cIiArIHNNZXRhZGF0YVByb3BlcnR5O1xuXHRcdH1cblx0XHRpZiAoc1NlbGVjdE9wdGlvbk5hbWUpIHtcblx0XHRcdGFkZFNlbGVjdE9wdGlvbnNUb0NvbmRpdGlvbnMoXG5cdFx0XHRcdHNDb250ZXh0UGF0aCxcblx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRcdHNTZWxlY3RPcHRpb25OYW1lLFxuXHRcdFx0XHRvQ29uZGl0aW9ucyxcblx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRzTWV0YWRhdGFQcm9wZXJ0eSxcblx0XHRcdFx0b1ZhbGlkUHJvcGVydGllcyxcblx0XHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdFx0ZmFsc2Vcblx0XHRcdCk7XG5cdFx0fVxuXHR9KTtcblxuXHRhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuZm9yRWFjaChmdW5jdGlvbiAoc1NlbGVjdE9wdGlvbjogYW55KSB7XG5cdFx0aWYgKHNTZWxlY3RPcHRpb24uaW5kZXhPZihcIi5cIikgPiAwICYmICFzU2VsZWN0T3B0aW9uLmluY2x1ZGVzKFwiJFBhcmFtZXRlclwiKSkge1xuXHRcdFx0Y29uc3Qgc0Z1bGxDb250ZXh0UGF0aCA9IChcIi9cIiArIHNTZWxlY3RPcHRpb24ucmVwbGFjZUFsbChcIi5cIiwgXCIvXCIpKS5zdGFydHNXaXRoKHNDb250ZXh0UGF0aClcblx0XHRcdFx0PyBcIi9cIiArIHNTZWxlY3RPcHRpb24ucmVwbGFjZUFsbChcIi5cIiwgXCIvXCIpXG5cdFx0XHRcdDogc0NvbnRleHRQYXRoICsgXCIvXCIgKyBzU2VsZWN0T3B0aW9uLnJlcGxhY2VBbGwoXCIuXCIsIFwiL1wiKTsgLy8gY2hlY2sgaWYgdGhlIGZ1bGwgcGF0aCwgZWcgU2FsZXNPcmRlck1hbmFnZS5fSXRlbS5NYXRlcmlhbCBleGlzdHMgaW4gdGhlIG1ldGFtb2RlbFxuXHRcdFx0aWYgKG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNGdWxsQ29udGV4dFBhdGgucmVwbGFjZShcIlBfXCIsIFwiXCIpKSkge1xuXHRcdFx0XHRfY3JlYXRlQ29uZGl0aW9uc0Zvck5hdlByb3BlcnRpZXMoXG5cdFx0XHRcdFx0c0Z1bGxDb250ZXh0UGF0aCxcblx0XHRcdFx0XHRzQ29udGV4dFBhdGgsXG5cdFx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRcdFx0c1NlbGVjdE9wdGlvbixcblx0XHRcdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdG9Db25kaXRpb25zXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIG9Db25kaXRpb25zO1xufVxuLyoqXG4gKiBAcGFyYW0gc0Z1bGxDb250ZXh0UGF0aFxuICogQHBhcmFtIHNNYWluRW50aXR5U2V0UGF0aFxuICogQHBhcmFtIG9TZWxlY3Rpb25WYXJpYW50XG4gKiBAcGFyYW0gc1NlbGVjdE9wdGlvblxuICogQHBhcmFtIG9NZXRhTW9kZWxcbiAqIEBwYXJhbSBvQ29uZGl0aW9uc1xuICovXG5mdW5jdGlvbiBfY3JlYXRlQ29uZGl0aW9uc0Zvck5hdlByb3BlcnRpZXMoXG5cdHNGdWxsQ29udGV4dFBhdGg6IGFueSxcblx0c01haW5FbnRpdHlTZXRQYXRoOiBhbnksXG5cdG9TZWxlY3Rpb25WYXJpYW50OiBhbnksXG5cdHNTZWxlY3RPcHRpb246IGFueSxcblx0b01ldGFNb2RlbDogYW55LFxuXHRvQ29uZGl0aW9uczogYW55XG4pIHtcblx0bGV0IGFOYXZPYmplY3ROYW1lcyA9IHNTZWxlY3RPcHRpb24uc3BsaXQoXCIuXCIpO1xuXHQvLyBFZzogXCJTYWxlc09yZGVyTWFuYWdlLl9JdGVtLl9NYXRlcmlhbC5NYXRlcmlhbFwiIG9yIFwiX0l0ZW0uTWF0ZXJpYWxcIlxuXHRpZiAoKFwiL1wiICsgc1NlbGVjdE9wdGlvbi5yZXBsYWNlQWxsKFwiLlwiLCBcIi9cIikpLnN0YXJ0c1dpdGgoc01haW5FbnRpdHlTZXRQYXRoKSkge1xuXHRcdGNvbnN0IHNGdWxsUGF0aCA9ICgoXCIvXCIgKyBzU2VsZWN0T3B0aW9uKSBhcyBhbnkpLnJlcGxhY2VBbGwoXCIuXCIsIFwiL1wiKSxcblx0XHRcdHNOYXZQYXRoID0gc0Z1bGxQYXRoLnJlcGxhY2Uoc01haW5FbnRpdHlTZXRQYXRoICsgXCIvXCIsIFwiXCIpO1xuXHRcdGFOYXZPYmplY3ROYW1lcyA9IHNOYXZQYXRoLnNwbGl0KFwiL1wiKTtcblx0fVxuXHRsZXQgc0NvbmRpdGlvblBhdGggPSBcIlwiO1xuXHRjb25zdCBzUHJvcGVydHlOYW1lID0gYU5hdk9iamVjdE5hbWVzW2FOYXZPYmplY3ROYW1lcy5sZW5ndGggLSAxXTsgLy8gTWF0ZXJpYWwgZnJvbSBTYWxlc09yZGVyTWFuYWdlLl9JdGVtLk1hdGVyaWFsXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYU5hdk9iamVjdE5hbWVzLmxlbmd0aCAtIDE7IGkrKykge1xuXHRcdGlmIChvTWV0YU1vZGVsLmdldE9iamVjdChzTWFpbkVudGl0eVNldFBhdGggKyBcIi9cIiArIGFOYXZPYmplY3ROYW1lc1tpXS5yZXBsYWNlKFwiUF9cIiwgXCJcIikpLiRpc0NvbGxlY3Rpb24pIHtcblx0XHRcdHNDb25kaXRpb25QYXRoID0gc0NvbmRpdGlvblBhdGggKyBhTmF2T2JqZWN0TmFtZXNbaV0gKyBcIiovXCI7IC8vIF9JdGVtKi8gaW4gY2FzZSBvZiAxOm4gY2FyZGluYWxpdHlcblx0XHR9IGVsc2Uge1xuXHRcdFx0c0NvbmRpdGlvblBhdGggPSBzQ29uZGl0aW9uUGF0aCArIGFOYXZPYmplY3ROYW1lc1tpXSArIFwiL1wiOyAvLyBfSXRlbS8gaW4gY2FzZSBvZiAxOjEgY2FyZGluYWxpdHlcblx0XHR9XG5cdFx0c01haW5FbnRpdHlTZXRQYXRoID0gc01haW5FbnRpdHlTZXRQYXRoICsgXCIvXCIgKyBhTmF2T2JqZWN0TmFtZXNbaV07XG5cdH1cblx0Y29uc3Qgc05hdlByb3BlcnR5UGF0aCA9IHNGdWxsQ29udGV4dFBhdGguc2xpY2UoMCwgc0Z1bGxDb250ZXh0UGF0aC5sYXN0SW5kZXhPZihcIi9cIikpLFxuXHRcdG9WYWxpZFByb3BlcnRpZXMgPSBDb21tb25VdGlscy5nZXRDb250ZXh0UGF0aFByb3BlcnRpZXMob01ldGFNb2RlbCwgc05hdlByb3BlcnR5UGF0aCksXG5cdFx0YVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzID0gb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMoKTtcblx0bGV0IHNTZWxlY3RPcHRpb25OYW1lID0gc1Byb3BlcnR5TmFtZTtcblx0aWYgKG9WYWxpZFByb3BlcnRpZXNbc1Byb3BlcnR5TmFtZV0pIHtcblx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IHNQcm9wZXJ0eU5hbWU7XG5cdH0gZWxzZSBpZiAoc1Byb3BlcnR5TmFtZS5zdGFydHNXaXRoKFwiUF9cIikgJiYgb1ZhbGlkUHJvcGVydGllc1tzUHJvcGVydHlOYW1lLnJlcGxhY2UoXCJQX1wiLCBcIlwiKV0pIHtcblx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IHNQcm9wZXJ0eU5hbWUucmVwbGFjZShcIlBfXCIsIFwiXCIpO1xuXHR9IGVsc2UgaWYgKG9WYWxpZFByb3BlcnRpZXNbXCJQX1wiICsgc1Byb3BlcnR5TmFtZV0gJiYgYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKFwiUF9cIiArIHNQcm9wZXJ0eU5hbWUpKSB7XG5cdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBcIlBfXCIgKyBzUHJvcGVydHlOYW1lO1xuXHR9XG5cdGlmIChzUHJvcGVydHlOYW1lLnN0YXJ0c1dpdGgoXCJQX1wiKSAmJiBvQ29uZGl0aW9uc1tzQ29uZGl0aW9uUGF0aCArIHNTZWxlY3RPcHRpb25OYW1lXSkge1xuXHRcdC8vIGlmIHRoZXJlIGlzIG5vIFNhbGVzT3JkZXJNYW5hZ2UuX0l0ZW0uTWF0ZXJpYWwgeWV0IGluIHRoZSBvQ29uZGl0aW9uc1xuXHRcdHJldHVybjtcblx0fSBlbHNlIGlmICghc1Byb3BlcnR5TmFtZS5zdGFydHNXaXRoKFwiUF9cIikgJiYgb0NvbmRpdGlvbnNbc0NvbmRpdGlvblBhdGggKyBzU2VsZWN0T3B0aW9uTmFtZV0pIHtcblx0XHRkZWxldGUgb0NvbmRpdGlvbnNbc0NvbmRpdGlvblBhdGggKyBzU2VsZWN0T3B0aW9uTmFtZV07XG5cdFx0YWRkU2VsZWN0T3B0aW9uc1RvQ29uZGl0aW9ucyhcblx0XHRcdHNOYXZQcm9wZXJ0eVBhdGgsXG5cdFx0XHRvU2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdHNTZWxlY3RPcHRpb24sXG5cdFx0XHRvQ29uZGl0aW9ucyxcblx0XHRcdHNDb25kaXRpb25QYXRoLFxuXHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUsXG5cdFx0XHRvVmFsaWRQcm9wZXJ0aWVzLFxuXHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdGZhbHNlXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRhZGRTZWxlY3RPcHRpb25zVG9Db25kaXRpb25zKFxuXHRcdFx0c05hdlByb3BlcnR5UGF0aCxcblx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0c1NlbGVjdE9wdGlvbixcblx0XHRcdG9Db25kaXRpb25zLFxuXHRcdFx0c0NvbmRpdGlvblBhdGgsXG5cdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSxcblx0XHRcdG9WYWxpZFByb3BlcnRpZXMsXG5cdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0ZmFsc2Vcblx0XHQpO1xuXHR9XG59XG5mdW5jdGlvbiBhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudChvU2VsZWN0aW9uVmFyaWFudDogYW55LCBtUGFnZUNvbnRleHQ6IGFueVtdLCBvVmlldzogYW55KSB7XG5cdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRjb25zdCBvTmF2aWdhdGlvblNlcnZpY2UgPSBvQXBwQ29tcG9uZW50LmdldE5hdmlnYXRpb25TZXJ2aWNlKCk7XG5cdHJldHVybiBvTmF2aWdhdGlvblNlcnZpY2UubWl4QXR0cmlidXRlc0FuZFNlbGVjdGlvblZhcmlhbnQobVBhZ2VDb250ZXh0LCBvU2VsZWN0aW9uVmFyaWFudC50b0pTT05TdHJpbmcoKSk7XG59XG5mdW5jdGlvbiBhZGRFeHRlcm5hbFN0YXRlRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudChvU2VsZWN0aW9uVmFyaWFudDogYW55LCBtRmlsdGVyczogYW55LCBvVGFyZ2V0SW5mbzogYW55LCBvRmlsdGVySW5mbz86IGFueSkge1xuXHRsZXQgc0ZpbHRlcjogYW55LFxuXHRcdHNMb3cgPSBcIlwiLFxuXHRcdHNIaWdoID0gbnVsbDtcblx0Y29uc3QgZm5HZXRTaWduQW5kT3B0aW9uID0gZnVuY3Rpb24gKHNPcGVyYXRvcjogYW55LCBzTG93VmFsdWU6IGFueSwgc0hpZ2hWYWx1ZTogYW55KSB7XG5cdFx0Y29uc3Qgb1NlbGVjdE9wdGlvblN0YXRlID0ge1xuXHRcdFx0b3B0aW9uOiBcIlwiLFxuXHRcdFx0c2lnbjogXCJJXCIsXG5cdFx0XHRsb3c6IHNMb3dWYWx1ZSxcblx0XHRcdGhpZ2g6IHNIaWdoVmFsdWVcblx0XHR9O1xuXHRcdHN3aXRjaCAoc09wZXJhdG9yKSB7XG5cdFx0XHRjYXNlIFwiQ29udGFpbnNcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiQ1BcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiU3RhcnRzV2l0aFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJDUFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUubG93ICs9IFwiKlwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJFbmRzV2l0aFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJDUFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUubG93ID0gXCIqXCIgKyBvU2VsZWN0T3B0aW9uU3RhdGUubG93O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJCVFwiOlxuXHRcdFx0Y2FzZSBcIkxFXCI6XG5cdFx0XHRjYXNlIFwiTFRcIjpcblx0XHRcdGNhc2UgXCJHVFwiOlxuXHRcdFx0Y2FzZSBcIk5FXCI6XG5cdFx0XHRjYXNlIFwiRVFcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IHNPcGVyYXRvcjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiVE9EQVlcIjpcblx0XHRcdGNhc2UgXCJEQVRFXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkVRXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVFUVwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJFUVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJFbXB0eVwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJFUVwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUubG93ID0gXCJcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTm90Q29udGFpbnNcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiQ1BcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTk9UQlRcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiQlRcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTm90U3RhcnRzV2l0aFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJDUFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUubG93ICs9IFwiKlwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOb3RFbmRzV2l0aFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJDUFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUubG93ID0gXCIqXCIgKyBvU2VsZWN0T3B0aW9uU3RhdGUubG93O1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOb3RFbXB0eVwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJORVwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUubG93ID0gXCJcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTk9UTEVcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiTEVcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTk9UR0VcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiR0VcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTk9UTFRcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiTFRcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTk9UR1RcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiR1RcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRMb2cud2FybmluZyhzT3BlcmF0b3IgKyBcIiBpcyBub3Qgc3VwcG9ydGVkLiBcIiArIHNGaWx0ZXIgKyBcIiBjb3VsZCBub3QgYmUgYWRkZWQgdG8gdGhlIG5hdmlnYXRpb24gY29udGV4dFwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9TZWxlY3RPcHRpb25TdGF0ZTtcblx0fTtcblx0Y29uc3Qgb0ZpbHRlckNvbmRpdGlvbnMgPSBtRmlsdGVycy5maWx0ZXJDb25kaXRpb25zO1xuXHRjb25zdCBvRmlsdGVyc1dpdGhvdXRDb25mbGljdCA9IG1GaWx0ZXJzLmZpbHRlckNvbmRpdGlvbnNXaXRob3V0Q29uZmxpY3QgPyBtRmlsdGVycy5maWx0ZXJDb25kaXRpb25zV2l0aG91dENvbmZsaWN0IDoge307XG5cdGNvbnN0IG9UYWJsZVByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QgPSBvVGFyZ2V0SW5mby5wcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0ID8gb1RhcmdldEluZm8ucHJvcGVydGllc1dpdGhvdXRDb25mbGljdCA6IHt9O1xuXHRjb25zdCBhZGRGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50ID0gZnVuY3Rpb24gKG9TZWxlY3Rpb25WYXJpYW50OiBhbnksIHNGaWx0ZXJOYW1lOiBhbnksIHNQYXRoPzogYW55KSB7XG5cdFx0Y29uc3QgYUZpbHRlcnMgPSBvRmlsdGVyQ29uZGl0aW9uc1tzRmlsdGVyTmFtZV07XG5cdFx0Zm9yIChjb25zdCBpdGVtIGluIGFGaWx0ZXJzKSB7XG5cdFx0XHRjb25zdCBvRmlsdGVyID0gYUZpbHRlcnNbaXRlbV07XG5cdFx0XHRzTG93ID0gKG9GaWx0ZXIudmFsdWVzWzBdICYmIG9GaWx0ZXIudmFsdWVzWzBdLnRvU3RyaW5nKCkpIHx8IFwiXCI7XG5cdFx0XHRzSGlnaCA9IChvRmlsdGVyLnZhbHVlc1sxXSAmJiBvRmlsdGVyLnZhbHVlc1sxXS50b1N0cmluZygpKSB8fCBudWxsO1xuXHRcdFx0aWYgKG9GaWx0ZXIub3BlcmF0b3IgPT09IFwiVE9EQVlcIiB8fCBvRmlsdGVyLm9wZXJhdG9yID09PSBcIkRBVEVcIikge1xuXHRcdFx0XHRjb25zdCBhRmlsdGVyID0gb0ZpbHRlckluZm9bMF0uYUZpbHRlcnMuZmlsdGVyKGZ1bmN0aW9uIChvRmlsdGVyOiBhbnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0ZpbHRlci5zUGF0aCA9PT0gc0ZpbHRlck5hbWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRzTG93ID0gYUZpbHRlclswXS5vVmFsdWUxIHx8IFwiXCI7XG5cdFx0XHRcdHNIaWdoID0gbnVsbDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG9TZWxlY3RPcHRpb25WYWx1ZXMgPSBmbkdldFNpZ25BbmRPcHRpb24ob0ZpbHRlci5vcGVyYXRvciwgc0xvdywgc0hpZ2gpO1xuXHRcdFx0aWYgKG9TZWxlY3RPcHRpb25WYWx1ZXMub3B0aW9uKSB7XG5cdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LmFkZFNlbGVjdE9wdGlvbihcblx0XHRcdFx0XHRzUGF0aCA/IHNQYXRoIDogc0ZpbHRlck5hbWUsXG5cdFx0XHRcdFx0b1NlbGVjdE9wdGlvblZhbHVlcy5zaWduLFxuXHRcdFx0XHRcdG9TZWxlY3RPcHRpb25WYWx1ZXMub3B0aW9uLFxuXHRcdFx0XHRcdG9TZWxlY3RPcHRpb25WYWx1ZXMubG93LFxuXHRcdFx0XHRcdG9TZWxlY3RPcHRpb25WYWx1ZXMuaGlnaFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRmb3IgKHNGaWx0ZXIgaW4gb0ZpbHRlckNvbmRpdGlvbnMpIHtcblx0XHQvLyBvbmx5IGFkZCB0aGUgZmlsdGVyIHZhbHVlcyBpZiBpdCBpcyBub3QgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBTViBhbHJlYWR5XG5cdFx0aWYgKCFvU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb24oc0ZpbHRlcikpIHtcblx0XHRcdC8vIFRPRE8gOiBjdXN0b20gZmlsdGVycyBzaG91bGQgYmUgaWdub3JlZCBtb3JlIGdlbmVyaWNhbGx5XG5cdFx0XHRpZiAoc0ZpbHRlciA9PT0gXCIkZWRpdFN0YXRlXCIpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRhZGRGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50KG9TZWxlY3Rpb25WYXJpYW50LCBzRmlsdGVyKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKG9UYWJsZVByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QgJiYgc0ZpbHRlciBpbiBvVGFibGVQcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0KSB7XG5cdFx0XHRcdGFkZEZpbHRlcnNUb1NlbGVjdGlvblZhcmlhbnQob1NlbGVjdGlvblZhcmlhbnQsIHNGaWx0ZXIsIG9UYWJsZVByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Rbc0ZpbHRlcl0pO1xuXHRcdFx0fVxuXHRcdFx0Ly8gaWYgcHJvcGVydHkgd2FzIHdpdGhvdXQgY29uZmxpY3QgaW4gcGFnZSBjb250ZXh0IHRoZW4gYWRkIHBhdGggZnJvbSBwYWdlIGNvbnRleHQgdG8gU1Zcblx0XHRcdGlmIChzRmlsdGVyIGluIG9GaWx0ZXJzV2l0aG91dENvbmZsaWN0KSB7XG5cdFx0XHRcdGFkZEZpbHRlcnNUb1NlbGVjdGlvblZhcmlhbnQob1NlbGVjdGlvblZhcmlhbnQsIHNGaWx0ZXIsIG9GaWx0ZXJzV2l0aG91dENvbmZsaWN0W3NGaWx0ZXJdKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIG9TZWxlY3Rpb25WYXJpYW50O1xufVxuZnVuY3Rpb24gaXNTdGlja3lFZGl0TW9kZShvQ29udHJvbDogQ29udHJvbCkge1xuXHRjb25zdCBiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKChvQ29udHJvbC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpKTtcblx0Y29uc3QgYlVJRWRpdGFibGUgPSBvQ29udHJvbC5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cdHJldHVybiBiSXNTdGlja3lNb2RlICYmIGJVSUVkaXRhYmxlO1xufVxuLyoqXG4gKiBAcGFyYW0gYU1hbmRhdG9yeUZpbHRlckZpZWxkc1xuICogQHBhcmFtIG9TZWxlY3Rpb25WYXJpYW50XG4gKiBAcGFyYW0gb1NlbGVjdGlvblZhcmlhbnREZWZhdWx0c1xuICovXG5mdW5jdGlvbiBhZGREZWZhdWx0RGlzcGxheUN1cnJlbmN5KGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHM6IGFueVtdLCBvU2VsZWN0aW9uVmFyaWFudDogYW55LCBvU2VsZWN0aW9uVmFyaWFudERlZmF1bHRzOiBhbnkpIHtcblx0aWYgKG9TZWxlY3Rpb25WYXJpYW50ICYmIGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHMgJiYgYU1hbmRhdG9yeUZpbHRlckZpZWxkcy5sZW5ndGgpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGFTVk9wdGlvbiA9IG9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbihcIkRpc3BsYXlDdXJyZW5jeVwiKSxcblx0XHRcdFx0YURlZmF1bHRTVk9wdGlvbiA9IG9TZWxlY3Rpb25WYXJpYW50RGVmYXVsdHMgJiYgb1NlbGVjdGlvblZhcmlhbnREZWZhdWx0cy5nZXRTZWxlY3RPcHRpb24oXCJEaXNwbGF5Q3VycmVuY3lcIik7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHNbaV0uJFByb3BlcnR5UGF0aCA9PT0gXCJEaXNwbGF5Q3VycmVuY3lcIiAmJlxuXHRcdFx0XHQoIWFTVk9wdGlvbiB8fCAhYVNWT3B0aW9uLmxlbmd0aCkgJiZcblx0XHRcdFx0YURlZmF1bHRTVk9wdGlvbiAmJlxuXHRcdFx0XHRhRGVmYXVsdFNWT3B0aW9uLmxlbmd0aFxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbiA9IGFEZWZhdWx0U1ZPcHRpb25bMF07XG5cdFx0XHRcdGNvbnN0IHNTaWduID0gZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uW1wiU2lnblwiXTtcblx0XHRcdFx0Y29uc3Qgc09wdGlvbiA9IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbltcIk9wdGlvblwiXTtcblx0XHRcdFx0Y29uc3Qgc0xvdyA9IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbltcIkxvd1wiXTtcblx0XHRcdFx0Y29uc3Qgc0hpZ2ggPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJIaWdoXCJdO1xuXHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5hZGRTZWxlY3RPcHRpb24oXCJEaXNwbGF5Q3VycmVuY3lcIiwgc1NpZ24sIHNPcHRpb24sIHNMb3csIHNIaWdoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbmZ1bmN0aW9uIGdldE5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcyhvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc1BhdGg6IGFueSwgb1ZpZXc/OiBhbnkpIHtcblx0Y29uc3QgYVRlY2huaWNhbEtleXMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzUGF0aCArIFwiL1wiKS4kS2V5O1xuXHRjb25zdCBhTm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzID0gW107XG5cdGNvbnN0IG9FbnRpdHlUeXBlID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc1BhdGggKyBcIi9cIik7XG5cdGZvciAoY29uc3QgaXRlbSBpbiBvRW50aXR5VHlwZSkge1xuXHRcdGlmIChvRW50aXR5VHlwZVtpdGVtXS4ka2luZCAmJiBvRW50aXR5VHlwZVtpdGVtXS4ka2luZCA9PT0gXCJQcm9wZXJ0eVwiKSB7XG5cdFx0XHRjb25zdCBvQW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzUGF0aCArIFwiL1wiICsgaXRlbSArIFwiQFwiKSB8fCB7fSxcblx0XHRcdFx0YklzS2V5ID0gYVRlY2huaWNhbEtleXMuaW5kZXhPZihpdGVtKSA+IC0xLFxuXHRcdFx0XHRiSXNJbW11dGFibGUgPSBvQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNvcmUuVjEuSW1tdXRhYmxlXCJdLFxuXHRcdFx0XHRiSXNOb25Db21wdXRlZCA9ICFvQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNvcmUuVjEuQ29tcHV0ZWRcIl0sXG5cdFx0XHRcdGJJc1Zpc2libGUgPSAhb0Fubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiXSxcblx0XHRcdFx0YklzQ29tcHV0ZWREZWZhdWx0VmFsdWUgPSBvQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNvcmUuVjEuQ29tcHV0ZWREZWZhdWx0VmFsdWVcIl0sXG5cdFx0XHRcdGJJc0tleUNvbXB1dGVkRGVmYXVsdFZhbHVlV2l0aFRleHQgPVxuXHRcdFx0XHRcdGJJc0tleSAmJiBvRW50aXR5VHlwZVtpdGVtXS4kVHlwZSA9PT0gXCJFZG0uR3VpZFwiXG5cdFx0XHRcdFx0XHQ/IGJJc0NvbXB1dGVkRGVmYXVsdFZhbHVlICYmIG9Bbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXVxuXHRcdFx0XHRcdFx0OiBmYWxzZTtcblx0XHRcdGlmIChcblx0XHRcdFx0KGJJc0ltbXV0YWJsZSB8fCBiSXNLZXlDb21wdXRlZERlZmF1bHRWYWx1ZVdpdGhUZXh0IHx8IChiSXNLZXkgJiYgb0VudGl0eVR5cGVbaXRlbV0uJFR5cGUgIT09IFwiRWRtLkd1aWRcIikpICYmXG5cdFx0XHRcdGJJc05vbkNvbXB1dGVkICYmXG5cdFx0XHRcdGJJc1Zpc2libGVcblx0XHRcdCkge1xuXHRcdFx0XHRhTm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzLnB1c2goaXRlbSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghYklzTm9uQ29tcHV0ZWQgJiYgYklzQ29tcHV0ZWREZWZhdWx0VmFsdWUgJiYgb1ZpZXcpIHtcblx0XHRcdFx0Y29uc3Qgb0RpYWdub3N0aWNzID0gZ2V0QXBwQ29tcG9uZW50KG9WaWV3KS5nZXREaWFnbm9zdGljcygpO1xuXHRcdFx0XHRjb25zdCBzTWVzc2FnZSA9IFwiQ29yZS5Db21wdXRlZERlZmF1bHRWYWx1ZSBpcyBpZ25vcmVkIGFzIENvcmUuQ29tcHV0ZWQgaXMgYWxyZWFkeSBzZXQgdG8gdHJ1ZVwiO1xuXHRcdFx0XHRvRGlhZ25vc3RpY3MuYWRkSXNzdWUoXG5cdFx0XHRcdFx0SXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRcdElzc3VlU2V2ZXJpdHkuTWVkaXVtLFxuXHRcdFx0XHRcdHNNZXNzYWdlLFxuXHRcdFx0XHRcdElzc3VlQ2F0ZWdvcnlUeXBlLFxuXHRcdFx0XHRcdElzc3VlQ2F0ZWdvcnlUeXBlPy5Bbm5vdGF0aW9ucz8uSWdub3JlZEFubm90YXRpb25cblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGFOb25Db21wdXRlZFZpc2libGVGaWVsZHM7XG59XG5mdW5jdGlvbiBzZXRVc2VyRGVmYXVsdHMoXG5cdG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0YVBhcmFtZXRlcnM6IGFueVtdLFxuXHRvTW9kZWw6IEpTT05Nb2RlbCxcblx0YklzQWN0aW9uOiBib29sZWFuLFxuXHRiSXNDcmVhdGU/OiBib29sZWFuLFxuXHRvQWN0aW9uRGVmYXVsdFZhbHVlcz86IGFueVxuKSB7XG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogKHZhbHVlOiBhbnkpID0+IHZvaWQpIHtcblx0XHRjb25zdCBvQ29tcG9uZW50RGF0YSA9IG9BcHBDb21wb25lbnQuZ2V0Q29tcG9uZW50RGF0YSgpLFxuXHRcdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzID0gKG9Db21wb25lbnREYXRhICYmIG9Db21wb25lbnREYXRhLnN0YXJ0dXBQYXJhbWV0ZXJzKSB8fCB7fSxcblx0XHRcdG9TaGVsbFNlcnZpY2VzID0gb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0aWYgKCFvU2hlbGxTZXJ2aWNlcy5oYXNVU2hlbGwoKSkge1xuXHRcdFx0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAob1BhcmFtZXRlcjogYW55KSB7XG5cdFx0XHRcdGNvbnN0IHNQcm9wZXJ0eU5hbWUgPSBiSXNBY3Rpb25cblx0XHRcdFx0XHQ/IFwiL1wiICsgb1BhcmFtZXRlci4kTmFtZVxuXHRcdFx0XHRcdDogb1BhcmFtZXRlci5nZXRQYXRoKCkuc2xpY2Uob1BhcmFtZXRlci5nZXRQYXRoKCkubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG5cdFx0XHRcdGNvbnN0IHNQYXJhbWV0ZXJOYW1lID0gYklzQWN0aW9uID8gc1Byb3BlcnR5TmFtZS5zbGljZSgxKSA6IHNQcm9wZXJ0eU5hbWU7XG5cdFx0XHRcdGlmIChvQWN0aW9uRGVmYXVsdFZhbHVlcyAmJiBiSXNDcmVhdGUpIHtcblx0XHRcdFx0XHRpZiAob0FjdGlvbkRlZmF1bHRWYWx1ZXNbc1BhcmFtZXRlck5hbWVdKSB7XG5cdFx0XHRcdFx0XHRvTW9kZWwuc2V0UHJvcGVydHkoc1Byb3BlcnR5TmFtZSwgb0FjdGlvbkRlZmF1bHRWYWx1ZXNbc1BhcmFtZXRlck5hbWVdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAob1N0YXJ0dXBQYXJhbWV0ZXJzW3NQYXJhbWV0ZXJOYW1lXSkge1xuXHRcdFx0XHRcdG9Nb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCBvU3RhcnR1cFBhcmFtZXRlcnNbc1BhcmFtZXRlck5hbWVdWzBdKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gcmVzb2x2ZSh0cnVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9TaGVsbFNlcnZpY2VzLmdldFN0YXJ0dXBBcHBTdGF0ZShvQXBwQ29tcG9uZW50KS50aGVuKGZ1bmN0aW9uIChvU3RhcnR1cEFwcFN0YXRlOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9EYXRhID0gb1N0YXJ0dXBBcHBTdGF0ZS5nZXREYXRhKCkgfHwge30sXG5cdFx0XHRcdGFFeHRlbmRlZFBhcmFtZXRlcnMgPSAob0RhdGEuc2VsZWN0aW9uVmFyaWFudCAmJiBvRGF0YS5zZWxlY3Rpb25WYXJpYW50LlNlbGVjdE9wdGlvbnMpIHx8IFtdO1xuXHRcdFx0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAob1BhcmFtZXRlcjogYW55KSB7XG5cdFx0XHRcdGNvbnN0IHNQcm9wZXJ0eU5hbWUgPSBiSXNBY3Rpb25cblx0XHRcdFx0XHQ/IFwiL1wiICsgb1BhcmFtZXRlci4kTmFtZVxuXHRcdFx0XHRcdDogb1BhcmFtZXRlci5nZXRQYXRoKCkuc2xpY2Uob1BhcmFtZXRlci5nZXRQYXRoKCkubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG5cdFx0XHRcdGNvbnN0IHNQYXJhbWV0ZXJOYW1lID0gYklzQWN0aW9uID8gc1Byb3BlcnR5TmFtZS5zbGljZSgxKSA6IHNQcm9wZXJ0eU5hbWU7XG5cdFx0XHRcdGlmIChvQWN0aW9uRGVmYXVsdFZhbHVlcyAmJiBiSXNDcmVhdGUpIHtcblx0XHRcdFx0XHRpZiAob0FjdGlvbkRlZmF1bHRWYWx1ZXNbc1BhcmFtZXRlck5hbWVdKSB7XG5cdFx0XHRcdFx0XHRvTW9kZWwuc2V0UHJvcGVydHkoc1Byb3BlcnR5TmFtZSwgb0FjdGlvbkRlZmF1bHRWYWx1ZXNbc1BhcmFtZXRlck5hbWVdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAob1N0YXJ0dXBQYXJhbWV0ZXJzW3NQYXJhbWV0ZXJOYW1lXSkge1xuXHRcdFx0XHRcdG9Nb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCBvU3RhcnR1cFBhcmFtZXRlcnNbc1BhcmFtZXRlck5hbWVdWzBdKTtcblx0XHRcdFx0fSBlbHNlIGlmIChhRXh0ZW5kZWRQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGkgaW4gYUV4dGVuZGVkUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0V4dGVuZGVkUGFyYW1ldGVyID0gYUV4dGVuZGVkUGFyYW1ldGVyc1tpXTtcblx0XHRcdFx0XHRcdGlmIChvRXh0ZW5kZWRQYXJhbWV0ZXIuUHJvcGVydHlOYW1lID09PSBzUGFyYW1ldGVyTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvUmFuZ2UgPSBvRXh0ZW5kZWRQYXJhbWV0ZXIuUmFuZ2VzLmxlbmd0aFxuXHRcdFx0XHRcdFx0XHRcdD8gb0V4dGVuZGVkUGFyYW1ldGVyLlJhbmdlc1tvRXh0ZW5kZWRQYXJhbWV0ZXIuUmFuZ2VzLmxlbmd0aCAtIDFdXG5cdFx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdGlmIChvUmFuZ2UgJiYgb1JhbmdlLlNpZ24gPT09IFwiSVwiICYmIG9SYW5nZS5PcHRpb24gPT09IFwiRVFcIikge1xuXHRcdFx0XHRcdFx0XHRcdG9Nb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCBvUmFuZ2UuTG93KTsgLy8gaGlnaCBpcyBpZ25vcmVkIHdoZW4gT3B0aW9uPUVRXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIHJlc29sdmUodHJ1ZSk7XG5cdFx0fSk7XG5cdH0pO1xufVxuZnVuY3Rpb24gZ2V0QWRkaXRpb25hbFBhcmFtc0ZvckNyZWF0ZShvU3RhcnR1cFBhcmFtZXRlcnM6IGFueSwgb0luYm91bmRQYXJhbWV0ZXJzOiBhbnkpIHtcblx0Y29uc3Qgb0luYm91bmRzID0gb0luYm91bmRQYXJhbWV0ZXJzLFxuXHRcdGFDcmVhdGVQYXJhbWV0ZXJzID0gb0luYm91bmRzXG5cdFx0XHQ/IE9iamVjdC5rZXlzKG9JbmJvdW5kcykuZmlsdGVyKGZ1bmN0aW9uIChzUGFyYW1ldGVyOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0luYm91bmRzW3NQYXJhbWV0ZXJdLnVzZUZvckNyZWF0ZTtcblx0XHRcdCAgfSlcblx0XHRcdDogW107XG5cdGxldCBvUmV0O1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGFDcmVhdGVQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3Qgc0NyZWF0ZVBhcmFtZXRlciA9IGFDcmVhdGVQYXJhbWV0ZXJzW2ldO1xuXHRcdGNvbnN0IGFWYWx1ZXMgPSBvU3RhcnR1cFBhcmFtZXRlcnMgJiYgb1N0YXJ0dXBQYXJhbWV0ZXJzW3NDcmVhdGVQYXJhbWV0ZXJdO1xuXHRcdGlmIChhVmFsdWVzICYmIGFWYWx1ZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRvUmV0ID0gb1JldCB8fCBPYmplY3QuY3JlYXRlKG51bGwpO1xuXHRcdFx0b1JldFtzQ3JlYXRlUGFyYW1ldGVyXSA9IGFWYWx1ZXNbMF07XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvUmV0O1xufVxuZnVuY3Rpb24gZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKG9PdXRib3VuZDogYW55KSB7XG5cdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmc6IGFueVtdID0gW107XG5cdGlmIChvT3V0Ym91bmQucGFyYW1ldGVycykge1xuXHRcdGNvbnN0IGFQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob091dGJvdW5kLnBhcmFtZXRlcnMpIHx8IFtdO1xuXHRcdGlmIChhUGFyYW1ldGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRhUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChzUGFyYW06IHN0cmluZykge1xuXHRcdFx0XHRjb25zdCBvTWFwcGluZyA9IG9PdXRib3VuZC5wYXJhbWV0ZXJzW3NQYXJhbV07XG5cdFx0XHRcdGlmIChvTWFwcGluZy52YWx1ZSAmJiBvTWFwcGluZy52YWx1ZS52YWx1ZSAmJiBvTWFwcGluZy52YWx1ZS5mb3JtYXQgPT09IFwiYmluZGluZ1wiKSB7XG5cdFx0XHRcdFx0Ly8gdXNpbmcgdGhlIGZvcm1hdCBvZiBVSS5NYXBwaW5nXG5cdFx0XHRcdFx0Y29uc3Qgb1NlbWFudGljTWFwcGluZyA9IHtcblx0XHRcdFx0XHRcdFwiTG9jYWxQcm9wZXJ0eVwiOiB7XG5cdFx0XHRcdFx0XHRcdFwiJFByb3BlcnR5UGF0aFwiOiBvTWFwcGluZy52YWx1ZS52YWx1ZVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFwiU2VtYW50aWNPYmplY3RQcm9wZXJ0eVwiOiBzUGFyYW1cblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0aWYgKGFTZW1hbnRpY09iamVjdE1hcHBpbmcubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0Ly8gVG8gY2hlY2sgaWYgdGhlIHNlbWFudGljT2JqZWN0IE1hcHBpbmcgaXMgZG9uZSBmb3IgdGhlIHNhbWUgbG9jYWwgcHJvcGVydHkgbW9yZSB0aGF0IG9uY2UgdGhlbiBmaXJzdCBvbmUgd2lsbCBiZSBjb25zaWRlcmVkXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFTZW1hbnRpY09iamVjdE1hcHBpbmcubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdGFTZW1hbnRpY09iamVjdE1hcHBpbmdbaV1bXCJMb2NhbFByb3BlcnR5XCJdW1wiJFByb3BlcnR5UGF0aFwiXSAhPT1cblx0XHRcdFx0XHRcdFx0XHRvU2VtYW50aWNNYXBwaW5nW1wiTG9jYWxQcm9wZXJ0eVwiXVtcIiRQcm9wZXJ0eVBhdGhcIl1cblx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZy5wdXNoKG9TZW1hbnRpY01hcHBpbmcpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGFTZW1hbnRpY09iamVjdE1hcHBpbmcucHVzaChvU2VtYW50aWNNYXBwaW5nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYVNlbWFudGljT2JqZWN0TWFwcGluZztcbn1cbmZ1bmN0aW9uIGdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbihvVmlld0RhdGE6IGFueSwgb0Nyb3NzTmF2OiBhbnkpIHtcblx0Y29uc3Qgb0hlYWRlckZhY2V0SXRlbXM6IGFueSA9IHt9O1xuXHRsZXQgc0lkO1xuXHRjb25zdCBvQ29udHJvbENvbmZpZyA9IG9WaWV3RGF0YS5jb250cm9sQ29uZmlndXJhdGlvbjtcblx0Zm9yIChjb25zdCBjb25maWcgaW4gb0NvbnRyb2xDb25maWcpIHtcblx0XHRpZiAoY29uZmlnLmluZGV4T2YoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50XCIpID4gLTEgfHwgY29uZmlnLmluZGV4T2YoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnRcIikgPiAtMSkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRvQ29udHJvbENvbmZpZ1tjb25maWddLm5hdmlnYXRpb24gJiZcblx0XHRcdFx0b0NvbnRyb2xDb25maWdbY29uZmlnXS5uYXZpZ2F0aW9uLnRhcmdldE91dGJvdW5kICYmXG5cdFx0XHRcdG9Db250cm9sQ29uZmlnW2NvbmZpZ10ubmF2aWdhdGlvbi50YXJnZXRPdXRib3VuZC5vdXRib3VuZFxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IHNPdXRib3VuZCA9IG9Db250cm9sQ29uZmlnW2NvbmZpZ10ubmF2aWdhdGlvbi50YXJnZXRPdXRib3VuZC5vdXRib3VuZDtcblx0XHRcdFx0Y29uc3Qgb091dGJvdW5kID0gb0Nyb3NzTmF2W3NPdXRib3VuZF07XG5cdFx0XHRcdGlmIChvT3V0Ym91bmQuc2VtYW50aWNPYmplY3QgJiYgb091dGJvdW5kLmFjdGlvbikge1xuXHRcdFx0XHRcdGlmIChjb25maWcuaW5kZXhPZihcIkNoYXJ0XCIpID4gLTEpIHtcblx0XHRcdFx0XHRcdHNJZCA9IGdlbmVyYXRlKFtcImZlXCIsIFwiTWljcm9DaGFydExpbmtcIiwgY29uZmlnXSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNJZCA9IGdlbmVyYXRlKFtcImZlXCIsIFwiSGVhZGVyRFBMaW5rXCIsIGNvbmZpZ10pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RNYXBwaW5nID0gQ29tbW9uVXRpbHMuZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKG9PdXRib3VuZCk7XG5cdFx0XHRcdFx0b0hlYWRlckZhY2V0SXRlbXNbc0lkXSA9IHtcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvT3V0Ym91bmQuc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRhY3Rpb246IG9PdXRib3VuZC5hY3Rpb24sXG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc6IGFTZW1hbnRpY09iamVjdE1hcHBpbmdcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkNyb3NzIG5hdmlnYXRpb24gb3V0Ym91bmQgaXMgY29uZmlndXJlZCB3aXRob3V0IHNlbWFudGljIG9iamVjdCBhbmQgYWN0aW9uIGZvciBcIiArIHNPdXRib3VuZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIG9IZWFkZXJGYWNldEl0ZW1zO1xufVxuZnVuY3Rpb24gc2V0U2VtYW50aWNPYmplY3RNYXBwaW5ncyhvU2VsZWN0aW9uVmFyaWFudDogYW55LCB2TWFwcGluZ3M6IG9iamVjdCkge1xuXHRjb25zdCBvTWFwcGluZ3MgPSB0eXBlb2Ygdk1hcHBpbmdzID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZSh2TWFwcGluZ3MpIDogdk1hcHBpbmdzO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IG9NYXBwaW5ncy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IHNMb2NhbFByb3BlcnR5ID1cblx0XHRcdChvTWFwcGluZ3NbaV1bXCJMb2NhbFByb3BlcnR5XCJdICYmIG9NYXBwaW5nc1tpXVtcIkxvY2FsUHJvcGVydHlcIl1bXCIkUHJvcGVydHlQYXRoXCJdKSB8fFxuXHRcdFx0KG9NYXBwaW5nc1tpXVtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTG9jYWxQcm9wZXJ0eVwiXSAmJlxuXHRcdFx0XHRvTWFwcGluZ3NbaV1bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxvY2FsUHJvcGVydHlcIl1bXCIkUGF0aFwiXSk7XG5cdFx0Y29uc3Qgc1NlbWFudGljT2JqZWN0UHJvcGVydHkgPVxuXHRcdFx0b01hcHBpbmdzW2ldW1wiU2VtYW50aWNPYmplY3RQcm9wZXJ0eVwiXSB8fCBvTWFwcGluZ3NbaV1bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljT2JqZWN0UHJvcGVydHlcIl07XG5cdFx0aWYgKG9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbihzTG9jYWxQcm9wZXJ0eSkpIHtcblx0XHRcdGNvbnN0IG9TZWxlY3RPcHRpb24gPSBvU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb24oc0xvY2FsUHJvcGVydHkpO1xuXG5cdFx0XHQvL0NyZWF0ZSBhIG5ldyBTZWxlY3RPcHRpb24gd2l0aCBzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSBhcyB0aGUgcHJvcGVydHkgTmFtZSBhbmQgcmVtb3ZlIHRoZSBvbGRlciBvbmVcblx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LnJlbW92ZVNlbGVjdE9wdGlvbihzTG9jYWxQcm9wZXJ0eSk7XG5cdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5tYXNzQWRkU2VsZWN0T3B0aW9uKHNTZW1hbnRpY09iamVjdFByb3BlcnR5LCBvU2VsZWN0T3B0aW9uKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9TZWxlY3Rpb25WYXJpYW50O1xufVxuZnVuY3Rpb24gZm5HZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aChvTWV0YU1vZGVsOiBhbnksIHNQYXRoOiBhbnkpIHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAodmFsdWU6IGFueSkgPT4gdm9pZCkge1xuXHRcdGNvbnN0IHNTZW1hbnRpY09iamVjdCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNQYXRoICsgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljT2JqZWN0XCIpO1xuXHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0c1BhdGggKyBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnNcIlxuXHRcdCk7XG5cdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3MgPSBbeyBzZW1hbnRpY09iamVjdDogc1NlbWFudGljT2JqZWN0IH1dO1xuXHRcdGNvbnN0IG9TZW1hbnRpY09iamVjdCA9IHtcblx0XHRcdHNlbWFudGljT2JqZWN0OiBzU2VtYW50aWNPYmplY3Rcblx0XHR9O1xuXHRcdHJlc29sdmUoe1xuXHRcdFx0c2VtYW50aWNPYmplY3RQYXRoOiBzUGF0aCxcblx0XHRcdHNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3M6IGFTZW1hbnRpY09iamVjdEZvckdldExpbmtzLFxuXHRcdFx0c2VtYW50aWNPYmplY3Q6IG9TZW1hbnRpY09iamVjdCxcblx0XHRcdHVuYXZhaWxhYmxlQWN0aW9uczogYVNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zXG5cdFx0fSk7XG5cdH0pLmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdExvZy5lcnJvcihcIkVycm9yIGluIGZuR2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGhcIiwgb0Vycm9yKTtcblx0fSk7XG59XG5mdW5jdGlvbiBmblVwZGF0ZVNlbWFudGljVGFyZ2V0c01vZGVsKGFHZXRMaW5rc1Byb21pc2VzOiBhbnksIGFTZW1hbnRpY09iamVjdHM6IGFueSwgb0ludGVybmFsTW9kZWxDb250ZXh0OiBhbnksIHNDdXJyZW50SGFzaDogYW55KSB7XG5cdHJldHVybiBQcm9taXNlLmFsbChhR2V0TGlua3NQcm9taXNlcylcblx0XHQudGhlbihmdW5jdGlvbiAoYVZhbHVlczogYW55W10pIHtcblx0XHRcdGxldCBhTGlua3MsXG5cdFx0XHRcdF9vTGluayxcblx0XHRcdFx0X3NMaW5rSW50ZW50QWN0aW9uLFxuXHRcdFx0XHRhRmluYWxMaW5rczogYW55W10gPSBbXTtcblx0XHRcdGxldCBvRmluYWxTZW1hbnRpY09iamVjdHM6IGFueSA9IHt9O1xuXHRcdFx0Y29uc3QgYkludGVudEhhc0FjdGlvbnMgPSBmdW5jdGlvbiAoc0ludGVudDogYW55LCBhQWN0aW9uczogYW55KSB7XG5cdFx0XHRcdGZvciAoY29uc3QgaW50ZW50IGluIGFBY3Rpb25zKSB7XG5cdFx0XHRcdFx0aWYgKGludGVudCA9PT0gc0ludGVudCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRcdGZvciAobGV0IGsgPSAwOyBrIDwgYVZhbHVlcy5sZW5ndGg7IGsrKykge1xuXHRcdFx0XHRhTGlua3MgPSBhVmFsdWVzW2tdO1xuXHRcdFx0XHRpZiAoYUxpbmtzICYmIGFMaW5rcy5sZW5ndGggPiAwICYmIGFMaW5rc1swXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1NlbWFudGljT2JqZWN0OiBhbnkgPSB7fTtcblx0XHRcdFx0XHRsZXQgb1RtcCA9IHt9O1xuXHRcdFx0XHRcdGxldCBzQWx0ZXJuYXRlUGF0aDtcblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFMaW5rcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0YUZpbmFsTGlua3MucHVzaChbXSk7XG5cdFx0XHRcdFx0XHRsZXQgaGFzVGFyZ2V0c05vdEZpbHRlcmVkID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRsZXQgaGFzVGFyZ2V0cyA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0Zm9yIChsZXQgaUxpbmtDb3VudCA9IDA7IGlMaW5rQ291bnQgPCBhTGlua3NbaV1bMF0ubGVuZ3RoOyBpTGlua0NvdW50KyspIHtcblx0XHRcdFx0XHRcdFx0X29MaW5rID0gYUxpbmtzW2ldWzBdW2lMaW5rQ291bnRdO1xuXHRcdFx0XHRcdFx0XHRfc0xpbmtJbnRlbnRBY3Rpb24gPSBfb0xpbmsgJiYgX29MaW5rLmludGVudC5zcGxpdChcIj9cIilbMF0uc3BsaXQoXCItXCIpWzFdO1xuXG5cdFx0XHRcdFx0XHRcdGlmICghKF9vTGluayAmJiBfb0xpbmsuaW50ZW50ICYmIF9vTGluay5pbnRlbnQuaW5kZXhPZihzQ3VycmVudEhhc2gpID09PSAwKSkge1xuXHRcdFx0XHRcdFx0XHRcdGhhc1RhcmdldHNOb3RGaWx0ZXJlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFiSW50ZW50SGFzQWN0aW9ucyhfc0xpbmtJbnRlbnRBY3Rpb24sIGFTZW1hbnRpY09iamVjdHNba10udW5hdmFpbGFibGVBY3Rpb25zKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0YUZpbmFsTGlua3NbaV0ucHVzaChfb0xpbmspO1xuXHRcdFx0XHRcdFx0XHRcdFx0aGFzVGFyZ2V0cyA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRvVG1wID0ge1xuXHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogYVNlbWFudGljT2JqZWN0c1trXS5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdFx0cGF0aDogYVNlbWFudGljT2JqZWN0c1trXS5wYXRoLFxuXHRcdFx0XHRcdFx0XHRIYXNUYXJnZXRzOiBoYXNUYXJnZXRzLFxuXHRcdFx0XHRcdFx0XHRIYXNUYXJnZXRzTm90RmlsdGVyZWQ6IGhhc1RhcmdldHNOb3RGaWx0ZXJlZFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdGlmIChvU2VtYW50aWNPYmplY3RbYVNlbWFudGljT2JqZWN0c1trXS5zZW1hbnRpY09iamVjdF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRvU2VtYW50aWNPYmplY3RbYVNlbWFudGljT2JqZWN0c1trXS5zZW1hbnRpY09iamVjdF0gPSB7fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHNBbHRlcm5hdGVQYXRoID0gYVNlbWFudGljT2JqZWN0c1trXS5wYXRoLnJlcGxhY2UoL1xcLy9nLCBcIl9cIik7XG5cdFx0XHRcdFx0XHRpZiAob1NlbWFudGljT2JqZWN0W2FTZW1hbnRpY09iamVjdHNba10uc2VtYW50aWNPYmplY3RdW3NBbHRlcm5hdGVQYXRoXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdFthU2VtYW50aWNPYmplY3RzW2tdLnNlbWFudGljT2JqZWN0XVtzQWx0ZXJuYXRlUGF0aF0gPSB7fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdFthU2VtYW50aWNPYmplY3RzW2tdLnNlbWFudGljT2JqZWN0XVtzQWx0ZXJuYXRlUGF0aF0gPSBPYmplY3QuYXNzaWduKFxuXHRcdFx0XHRcdFx0XHRvU2VtYW50aWNPYmplY3RbYVNlbWFudGljT2JqZWN0c1trXS5zZW1hbnRpY09iamVjdF1bc0FsdGVybmF0ZVBhdGhdLFxuXHRcdFx0XHRcdFx0XHRvVG1wXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBzU2VtYW50aWNPYmplY3ROYW1lID0gT2JqZWN0LmtleXMob1NlbWFudGljT2JqZWN0KVswXTtcblx0XHRcdFx0XHRpZiAoT2JqZWN0LmtleXMob0ZpbmFsU2VtYW50aWNPYmplY3RzKS5pbmNsdWRlcyhzU2VtYW50aWNPYmplY3ROYW1lKSkge1xuXHRcdFx0XHRcdFx0b0ZpbmFsU2VtYW50aWNPYmplY3RzW3NTZW1hbnRpY09iamVjdE5hbWVdID0gT2JqZWN0LmFzc2lnbihcblx0XHRcdFx0XHRcdFx0b0ZpbmFsU2VtYW50aWNPYmplY3RzW3NTZW1hbnRpY09iamVjdE5hbWVdLFxuXHRcdFx0XHRcdFx0XHRvU2VtYW50aWNPYmplY3Rbc1NlbWFudGljT2JqZWN0TmFtZV1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9GaW5hbFNlbWFudGljT2JqZWN0cyA9IE9iamVjdC5hc3NpZ24ob0ZpbmFsU2VtYW50aWNPYmplY3RzLCBvU2VtYW50aWNPYmplY3QpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhRmluYWxMaW5rcyA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoT2JqZWN0LmtleXMob0ZpbmFsU2VtYW50aWNPYmplY3RzKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcblx0XHRcdFx0XHRcInNlbWFudGljc1RhcmdldHNcIixcblx0XHRcdFx0XHRtZXJnZU9iamVjdHMob0ZpbmFsU2VtYW50aWNPYmplY3RzLCBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJzZW1hbnRpY3NUYXJnZXRzXCIpKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm4gb0ZpbmFsU2VtYW50aWNPYmplY3RzO1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0TG9nLmVycm9yKFwiZm5VcGRhdGVTZW1hbnRpY1RhcmdldHNNb2RlbDogQ2Fubm90IHJlYWQgbGlua3NcIiwgb0Vycm9yKTtcblx0XHR9KTtcbn1cbmZ1bmN0aW9uIGZuR2V0U2VtYW50aWNPYmplY3RQcm9taXNlKG9BcHBDb21wb25lbnQ6IGFueSwgb1ZpZXc6IGFueSwgb01ldGFNb2RlbDogYW55LCBzUGF0aDogYW55KSB7XG5cdHJldHVybiBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aChvTWV0YU1vZGVsLCBzUGF0aCk7XG59XG5mdW5jdGlvbiBmbkdldFNlbWFudGljVGFyZ2V0c0Zyb21QYWdlTW9kZWwob0NvbnRyb2xsZXI6IGFueSwgc1BhZ2VNb2RlbDogc3RyaW5nKSB7XG5cdGNvbnN0IF9mbmZpbmRWYWx1ZXNIZWxwZXIgPSBmdW5jdGlvbiAob2JqOiBhbnksIGtleTogYW55LCBsaXN0OiBhbnkpIHtcblx0XHRpZiAoIW9iaikge1xuXHRcdFx0cmV0dXJuIGxpc3Q7XG5cdFx0fVxuXHRcdGlmIChvYmogaW5zdGFuY2VvZiBBcnJheSkge1xuXHRcdFx0Zm9yIChjb25zdCBpIGluIG9iaikge1xuXHRcdFx0XHRsaXN0ID0gbGlzdC5jb25jYXQoX2ZuZmluZFZhbHVlc0hlbHBlcihvYmpbaV0sIGtleSwgW10pKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBsaXN0O1xuXHRcdH1cblx0XHRpZiAob2JqW2tleV0pIHtcblx0XHRcdGxpc3QucHVzaChvYmpba2V5XSk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBvYmogPT0gXCJvYmplY3RcIiAmJiBvYmogIT09IG51bGwpIHtcblx0XHRcdGNvbnN0IGNoaWxkcmVuID0gT2JqZWN0LmtleXMob2JqKTtcblx0XHRcdGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRsaXN0ID0gbGlzdC5jb25jYXQoX2ZuZmluZFZhbHVlc0hlbHBlcihvYmpbY2hpbGRyZW5baV1dLCBrZXksIFtdKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGxpc3Q7XG5cdH07XG5cdGNvbnN0IF9mbmZpbmRWYWx1ZXMgPSBmdW5jdGlvbiAob2JqOiBhbnksIGtleTogYW55KSB7XG5cdFx0cmV0dXJuIF9mbmZpbmRWYWx1ZXNIZWxwZXIob2JqLCBrZXksIFtdKTtcblx0fTtcblx0Y29uc3QgX2ZuRGVsZXRlRHVwbGljYXRlU2VtYW50aWNPYmplY3RzID0gZnVuY3Rpb24gKGFTZW1hbnRpY09iamVjdFBhdGg6IGFueSkge1xuXHRcdHJldHVybiBhU2VtYW50aWNPYmplY3RQYXRoLmZpbHRlcihmdW5jdGlvbiAodmFsdWU6IGFueSwgaW5kZXg6IGFueSkge1xuXHRcdFx0cmV0dXJuIGFTZW1hbnRpY09iamVjdFBhdGguaW5kZXhPZih2YWx1ZSkgPT09IGluZGV4O1xuXHRcdH0pO1xuXHR9O1xuXHRjb25zdCBvVmlldyA9IG9Db250cm9sbGVyLmdldFZpZXcoKTtcblx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblxuXHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0c1Byb21pc2VzID0gW107XG5cdFx0Y29uc3Qgb0NvbXBvbmVudCA9IG9Db250cm9sbGVyLmdldE93bmVyQ29tcG9uZW50KCk7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihvQ29tcG9uZW50KSBhcyBBcHBDb21wb25lbnQ7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9BcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0bGV0IG9QYWdlTW9kZWwgPSBvQ29tcG9uZW50LmdldE1vZGVsKHNQYWdlTW9kZWwpLmdldERhdGEoKTtcblx0XHRpZiAoSlNPTi5zdHJpbmdpZnkob1BhZ2VNb2RlbCkgPT09IFwie31cIikge1xuXHRcdFx0b1BhZ2VNb2RlbCA9IG9Db21wb25lbnQuZ2V0TW9kZWwoc1BhZ2VNb2RlbCkuX2dldE9iamVjdChcIi9cIiwgdW5kZWZpbmVkKTtcblx0XHR9XG5cdFx0bGV0IGFTZW1hbnRpY09iamVjdHNGb3VuZCA9IF9mbmZpbmRWYWx1ZXMob1BhZ2VNb2RlbCwgXCJzZW1hbnRpY09iamVjdFBhdGhcIik7XG5cdFx0YVNlbWFudGljT2JqZWN0c0ZvdW5kID0gX2ZuRGVsZXRlRHVwbGljYXRlU2VtYW50aWNPYmplY3RzKGFTZW1hbnRpY09iamVjdHNGb3VuZCk7XG5cdFx0Y29uc3Qgb1NoZWxsU2VydmljZUhlbHBlciA9IENvbW1vblV0aWxzLmdldFNoZWxsU2VydmljZXMob0FwcENvbXBvbmVudCk7XG5cdFx0bGV0IHNDdXJyZW50SGFzaCA9IENvbW1vblV0aWxzLmdldEhhc2goKTtcblx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RzRm9yR2V0TGlua3MgPSBbXTtcblx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RzOiBhbnlbXSA9IFtdO1xuXHRcdGxldCBzUGF0aDtcblx0XHRsZXQgX29TZW1hbnRpY09iamVjdDtcblxuXHRcdGlmIChzQ3VycmVudEhhc2ggJiYgc0N1cnJlbnRIYXNoLmluZGV4T2YoXCI/XCIpICE9PSAtMSkge1xuXHRcdFx0Ly8gc0N1cnJlbnRIYXNoIGNhbiBjb250YWluIHF1ZXJ5IHN0cmluZywgY3V0IGl0IG9mZiFcblx0XHRcdHNDdXJyZW50SGFzaCA9IHNDdXJyZW50SGFzaC5zcGxpdChcIj9cIilbMF07XG5cdFx0fVxuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhU2VtYW50aWNPYmplY3RzRm91bmQubGVuZ3RoOyBpKyspIHtcblx0XHRcdHNQYXRoID0gYVNlbWFudGljT2JqZWN0c0ZvdW5kW2ldO1xuXHRcdFx0YVNlbWFudGljT2JqZWN0c1Byb21pc2VzLnB1c2goQ29tbW9uVXRpbHMuZ2V0U2VtYW50aWNPYmplY3RQcm9taXNlKG9BcHBDb21wb25lbnQsIG9WaWV3LCBvTWV0YU1vZGVsLCBzUGF0aCkpO1xuXHRcdH1cblxuXHRcdGlmIChhU2VtYW50aWNPYmplY3RzUHJvbWlzZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFByb21pc2UuYWxsKGFTZW1hbnRpY09iamVjdHNQcm9taXNlcylcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKGFWYWx1ZXM6IGFueVtdKSB7XG5cdFx0XHRcdFx0Y29uc3QgYUdldExpbmtzUHJvbWlzZXMgPSBbXTtcblx0XHRcdFx0XHRsZXQgc1NlbU9iakV4cHJlc3Npb247XG5cdFx0XHRcdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0c1Jlc29sdmVkID0gYVZhbHVlcy5maWx0ZXIoZnVuY3Rpb24gKGVsZW1lbnQ6IGFueSkge1xuXHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRlbGVtZW50LnNlbWFudGljT2JqZWN0ICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5zZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdCAmJlxuXHRcdFx0XHRcdFx0XHR0eXBlb2YgZWxlbWVudC5zZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdCA9PT0gXCJvYmplY3RcIlxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdHNTZW1PYmpFeHByZXNzaW9uID0gY29tcGlsZUJpbmRpbmcoYmluZGluZ0V4cHJlc3Npb24oZWxlbWVudC5zZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdC4kUGF0aCkpO1xuXHRcdFx0XHRcdFx0XHRlbGVtZW50LnNlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0ID0gc1NlbU9iakV4cHJlc3Npb247XG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuc2VtYW50aWNPYmplY3RGb3JHZXRMaW5rc1swXS5zZW1hbnRpY09iamVjdCA9IHNTZW1PYmpFeHByZXNzaW9uO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZWxlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZWxlbWVudC5zZW1hbnRpY09iamVjdCAhPT0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgYVNlbWFudGljT2JqZWN0c1Jlc29sdmVkLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRfb1NlbWFudGljT2JqZWN0ID0gYVNlbWFudGljT2JqZWN0c1Jlc29sdmVkW2pdO1xuXHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRfb1NlbWFudGljT2JqZWN0ICYmXG5cdFx0XHRcdFx0XHRcdF9vU2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3QgJiZcblx0XHRcdFx0XHRcdFx0IShfb1NlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0LmluZGV4T2YoXCJ7XCIpID09PSAwKVxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdGFTZW1hbnRpY09iamVjdHNGb3JHZXRMaW5rcy5wdXNoKF9vU2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3RGb3JHZXRMaW5rcyk7XG5cdFx0XHRcdFx0XHRcdGFTZW1hbnRpY09iamVjdHMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IF9vU2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRcdFx0dW5hdmFpbGFibGVBY3Rpb25zOiBfb1NlbWFudGljT2JqZWN0LnVuYXZhaWxhYmxlQWN0aW9ucyxcblx0XHRcdFx0XHRcdFx0XHRwYXRoOiBhU2VtYW50aWNPYmplY3RzUmVzb2x2ZWRbal0uc2VtYW50aWNPYmplY3RQYXRoXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRhR2V0TGlua3NQcm9taXNlcy5wdXNoKG9TaGVsbFNlcnZpY2VIZWxwZXIuZ2V0TGlua3NXaXRoQ2FjaGUoW19vU2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3RGb3JHZXRMaW5rc10pKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIENvbW1vblV0aWxzLnVwZGF0ZVNlbWFudGljVGFyZ2V0cyhhR2V0TGlua3NQcm9taXNlcywgYVNlbWFudGljT2JqZWN0cywgb0ludGVybmFsTW9kZWxDb250ZXh0LCBzQ3VycmVudEhhc2gpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiZm5HZXRTZW1hbnRpY1RhcmdldHNGcm9tVGFibGU6IENhbm5vdCBnZXQgU2VtYW50aWMgT2JqZWN0c1wiLCBvRXJyb3IpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG59XG5mdW5jdGlvbiBnZXRGaWx0ZXJSZXN0cmljdGlvbnMob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb246IGFueSwgc1Jlc3RyaWN0aW9uOiBhbnkpIHtcblx0Y29uc3QgRmlsdGVyUmVzdHJpY3Rpb25zID0gQ29tbW9uVXRpbHMuRmlsdGVyUmVzdHJpY3Rpb25zO1xuXHRpZiAoc1Jlc3RyaWN0aW9uID09PSBGaWx0ZXJSZXN0cmljdGlvbnMuUkVRVUlSRURfUFJPUEVSVElFUyB8fCBzUmVzdHJpY3Rpb24gPT09IEZpbHRlclJlc3RyaWN0aW9ucy5OT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTKSB7XG5cdFx0bGV0IGFQcm9wcyA9IFtdO1xuXHRcdGlmIChvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiAmJiBvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbltzUmVzdHJpY3Rpb25dKSB7XG5cdFx0XHRhUHJvcHMgPSBvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbltzUmVzdHJpY3Rpb25dLm1hcChmdW5jdGlvbiAob1Byb3BlcnR5OiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIG9Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBhUHJvcHM7XG5cdH0gZWxzZSBpZiAoc1Jlc3RyaWN0aW9uID09PSBGaWx0ZXJSZXN0cmljdGlvbnMuQUxMT1dFRF9FWFBSRVNTSU9OUykge1xuXHRcdGNvbnN0IG1BbGxvd2VkRXhwcmVzc2lvbnM6IGFueSA9IHt9O1xuXHRcdGlmIChvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiAmJiBvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbi5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKSB7XG5cdFx0XHRvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbi5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKG9Qcm9wZXJ0eTogYW55KSB7XG5cdFx0XHRcdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0XHRcdFx0aWYgKG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5LiRQcm9wZXJ0eVBhdGhdKSB7XG5cdFx0XHRcdFx0bUFsbG93ZWRFeHByZXNzaW9uc1tvUHJvcGVydHkuUHJvcGVydHkuJFByb3BlcnR5UGF0aF0ucHVzaChvUHJvcGVydHkuQWxsb3dlZEV4cHJlc3Npb25zKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoXSA9IFtvUHJvcGVydHkuQWxsb3dlZEV4cHJlc3Npb25zXTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBtQWxsb3dlZEV4cHJlc3Npb25zO1xuXHR9XG5cdC8vIERlZmF1bHQgcmV0dXJuIHRoZSBGaWx0ZXJSZXN0cmljdGlvbnMgQW5ub3RhdGlvblxuXHRyZXR1cm4gb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb247XG59XG5mdW5jdGlvbiBnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgoc0VudGl0eVNldFBhdGg6IGFueSwgb01ldGFNb2RlbDogYW55KSB7XG5cdGNvbnN0IG9SZXQ6IGFueSA9IHt9LFxuXHRcdEZpbHRlclJlc3RyaWN0aW9ucyA9IENvbW1vblV0aWxzLkZpbHRlclJlc3RyaWN0aW9ucyxcblx0XHRvRmlsdGVyUmVzdHJpY3Rpb25zID0gc0VudGl0eVNldFBhdGggPyBvTWV0YU1vZGVsLmdldE9iamVjdChzRW50aXR5U2V0UGF0aCArIFwiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRmlsdGVyUmVzdHJpY3Rpb25zXCIpIDoge307XG5cdG9SZXRbRmlsdGVyUmVzdHJpY3Rpb25zLlJFUVVJUkVEX1BST1BFUlRJRVNdID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIEZpbHRlclJlc3RyaWN0aW9ucy5SRVFVSVJFRF9QUk9QRVJUSUVTKSB8fCBbXTtcblx0b1JldFtGaWx0ZXJSZXN0cmljdGlvbnMuTk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFU10gPVxuXHRcdGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zLCBGaWx0ZXJSZXN0cmljdGlvbnMuTk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFUykgfHwgW107XG5cdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0b1JldFtGaWx0ZXJSZXN0cmljdGlvbnMuQUxMT1dFRF9FWFBSRVNTSU9OU10gPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMob0ZpbHRlclJlc3RyaWN0aW9ucywgRmlsdGVyUmVzdHJpY3Rpb25zLkFMTE9XRURfRVhQUkVTU0lPTlMpIHx8IHt9O1xuXG5cdGNvbnN0IGFQYXRoUGFydHMgPSBzRW50aXR5U2V0UGF0aC5zcGxpdChcIi9cIik7XG5cblx0aWYgKGFQYXRoUGFydHMubGVuZ3RoID4gMikge1xuXHRcdC8vIEluIG5vcm1hbCBmaWx0ZXJiYXIgc2NlbmFyaW9zIHNFbnRpdHlTZXRQYXRoIGlzIG9mIHRoZSBmb3JtYXQgXCIvQ3VzdG9tZXJcIi5cblx0XHQvLyBCdXQsIEluIGNhc2Ugb2Ygc0VudGl0eVNldFBhdGggb2YgZm9ybWF0IFwiL0N1c3RvbWVyL1NldFwiIHRoaXMgaXMgdG8gY2hlY2sgbmF2aWdhdGlvbiByZXN0cmljdGlvbnMgb2YgXCJDdXN0b21lclwiIGZvciBub24tZmlsdGVyYWJsZSBwcm9wZXJ0aWVzIGluIFwiU2V0XCJcblx0XHRjb25zdCBzTmF2aWdhdGlvblBhdGggPSBhUGF0aFBhcnRzW2FQYXRoUGFydHMubGVuZ3RoIC0gMV07XG5cdFx0YVBhdGhQYXJ0cy5zcGxpY2UoLTEsIDEpOyAvLyByZW1vdmluZyBOYXZpZ2F0aW9uUHJvcGVydHkgZnJvbSB0aGUgZW5kLlxuXHRcdGNvbnN0IHNQYXJlbnRFbnRpdHlTZXRQYXRoID0gYVBhdGhQYXJ0cy5qb2luKFwiL1wiKTtcblx0XHRjb25zdCBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyA9IENvbW1vblV0aWxzLmdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMob01ldGFNb2RlbCwgc1BhcmVudEVudGl0eVNldFBhdGgsIHNOYXZpZ2F0aW9uUGF0aCk7XG5cdFx0Y29uc3Qgb05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMgPSBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyAmJiBvTmF2aWdhdGlvblJlc3RyaWN0aW9uc1tcIkZpbHRlclJlc3RyaWN0aW9uc1wiXTtcblx0XHRvUmV0W0ZpbHRlclJlc3RyaWN0aW9ucy5SRVFVSVJFRF9QUk9QRVJUSUVTXS5jb25jYXQoXG5cdFx0XHRnZXRGaWx0ZXJSZXN0cmljdGlvbnMob05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMsIEZpbHRlclJlc3RyaWN0aW9ucy5SRVFVSVJFRF9QUk9QRVJUSUVTKSB8fCBbXVxuXHRcdCk7XG5cdFx0b1JldFtGaWx0ZXJSZXN0cmljdGlvbnMuTk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFU10uY29uY2F0KFxuXHRcdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zLCBGaWx0ZXJSZXN0cmljdGlvbnMuTk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFUykgfHwgW11cblx0XHQpO1xuXHRcdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0XHRvUmV0W0ZpbHRlclJlc3RyaWN0aW9ucy5BTExPV0VEX0VYUFJFU1NJT05TXSA9IG1lcmdlT2JqZWN0cyhcblx0XHRcdHt9LFxuXHRcdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zLCBGaWx0ZXJSZXN0cmljdGlvbnMuQUxMT1dFRF9FWFBSRVNTSU9OUykgfHwge30sXG5cdFx0XHRvUmV0W0ZpbHRlclJlc3RyaWN0aW9ucy5BTExPV0VEX0VYUFJFU1NJT05TXVxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gb1JldDtcbn1cbmZ1bmN0aW9uIHRlbXBsYXRlQ29udHJvbEZyYWdtZW50KHNGcmFnbWVudE5hbWU6IGFueSwgb1ByZXByb2Nlc3NvclNldHRpbmdzOiBhbnksIG9PcHRpb25zOiBhbnksIG9Nb2RpZmllcj86IGFueSkge1xuXHRvT3B0aW9ucyA9IG9PcHRpb25zIHx8IHt9O1xuXHRpZiAob01vZGlmaWVyKSB7XG5cdFx0cmV0dXJuIG9Nb2RpZmllci50ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudChzRnJhZ21lbnROYW1lLCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MsIG9PcHRpb25zLnZpZXcpLnRoZW4oZnVuY3Rpb24gKG9GcmFnbWVudDogYW55KSB7XG5cdFx0XHQvLyBUaGlzIGlzIHJlcXVpcmVkIGFzIEZsZXggcmV0dXJucyBhbiBIVE1MQ29sbGVjdGlvbiBhcyB0ZW1wbGF0aW5nIHJlc3VsdCBpbiBYTUwgdGltZS5cblx0XHRcdHJldHVybiBvTW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJ4bWxUcmVlXCIgJiYgb0ZyYWdtZW50Lmxlbmd0aCA+IDAgPyBvRnJhZ21lbnRbMF0gOiBvRnJhZ21lbnQ7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGxvYWRNYWNyb0xpYnJhcnkoKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoXG5cdFx0XHRcdFx0WE1MVGVtcGxhdGVQcm9jZXNzb3IubG9hZFRlbXBsYXRlKHNGcmFnbWVudE5hbWUsIFwiZnJhZ21lbnRcIiksXG5cdFx0XHRcdFx0eyBuYW1lOiBzRnJhZ21lbnROYW1lIH0sXG5cdFx0XHRcdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzXG5cdFx0XHRcdCk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9GcmFnbWVudDogYW55KSB7XG5cdFx0XHRcdGNvbnN0IG9Db250cm9sID0gb0ZyYWdtZW50LmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdFx0XHRpZiAoISFvT3B0aW9ucy5pc1hNTCAmJiBvQ29udHJvbCkge1xuXHRcdFx0XHRcdHJldHVybiBvQ29udHJvbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gRnJhZ21lbnQubG9hZCh7XG5cdFx0XHRcdFx0aWQ6IG9PcHRpb25zLmlkLFxuXHRcdFx0XHRcdGRlZmluaXRpb246IG9GcmFnbWVudCxcblx0XHRcdFx0XHRjb250cm9sbGVyOiBvT3B0aW9ucy5jb250cm9sbGVyXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdH1cbn1cbmZ1bmN0aW9uIGdldFNpbmdsZXRvblBhdGgocGF0aDogc3RyaW5nLCBtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbiksXG5cdFx0cHJvcGVydHlOYW1lID0gcGFydHMucG9wKCksXG5cdFx0bmF2aWdhdGlvblBhdGggPSBwYXJ0cy5qb2luKFwiL1wiKSxcblx0XHRlbnRpdHlTZXQgPSBuYXZpZ2F0aW9uUGF0aCAmJiBtZXRhTW9kZWwuZ2V0T2JqZWN0KFwiL1wiICsgbmF2aWdhdGlvblBhdGgpO1xuXHRpZiAoZW50aXR5U2V0Py4ka2luZCA9PT0gXCJTaW5nbGV0b25cIikge1xuXHRcdGNvbnN0IHNpbmdsZXRvbk5hbWUgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcblx0XHRyZXR1cm4gXCIvXCIgKyBzaW5nbGV0b25OYW1lICsgXCIvXCIgKyBwcm9wZXJ0eU5hbWU7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIHJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eShwYXRoOiBzdHJpbmcsIG1vZGVsOiBPRGF0YU1vZGVsKSB7XG5cdGlmICghcGF0aCB8fCAhbW9kZWwpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHR9XG5cdGNvbnN0IG1ldGFNb2RlbCA9IG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHQvLyBGaW5kIHRoZSB1bmRlcmx5aW5nIGVudGl0eSBzZXQgZnJvbSB0aGUgcHJvcGVydHkgcGF0aCBhbmQgY2hlY2sgd2hldGhlciBpdCBpcyBhIHNpbmdsZXRvbi5cblx0Y29uc3QgcmVzb2x2ZWRQYXRoID0gZ2V0U2luZ2xldG9uUGF0aChwYXRoLCBtZXRhTW9kZWwpO1xuXHRpZiAocmVzb2x2ZWRQYXRoKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlCaW5kaW5nID0gbW9kZWwuYmluZFByb3BlcnR5KHJlc29sdmVkUGF0aCk7XG5cdFx0cmV0dXJuIHByb3BlcnR5QmluZGluZy5yZXF1ZXN0VmFsdWUoKTtcblx0fVxuXG5cdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG59XG5mdW5jdGlvbiBhZGRFdmVudFRvQmluZGluZ0luZm8ob0NvbnRyb2w6IENvbnRyb2wsIHNFdmVudE5hbWU6IHN0cmluZywgZkhhbmRsZXI6IEZ1bmN0aW9uKSB7XG5cdGxldCBvQmluZGluZ0luZm86IGFueTtcblx0Y29uc3Qgc2V0QmluZGluZ0luZm8gPSBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKG9CaW5kaW5nSW5mbykge1xuXHRcdFx0aWYgKCFvQmluZGluZ0luZm8uZXZlbnRzKSB7XG5cdFx0XHRcdG9CaW5kaW5nSW5mby5ldmVudHMgPSB7fTtcblx0XHRcdH1cblx0XHRcdGlmICghb0JpbmRpbmdJbmZvLmV2ZW50c1tzRXZlbnROYW1lXSkge1xuXHRcdFx0XHRvQmluZGluZ0luZm8uZXZlbnRzW3NFdmVudE5hbWVdID0gZkhhbmRsZXI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmT3JpZ2luYWxIYW5kbGVyID0gb0JpbmRpbmdJbmZvLmV2ZW50c1tzRXZlbnROYW1lXTtcblx0XHRcdFx0b0JpbmRpbmdJbmZvLmV2ZW50c1tzRXZlbnROYW1lXSA9IGZ1bmN0aW9uICguLi5hcmdzOiBhbnlbXSkge1xuXHRcdFx0XHRcdGZIYW5kbGVyLmFwcGx5KHRoaXMsIC4uLmFyZ3MpO1xuXHRcdFx0XHRcdGZPcmlnaW5hbEhhbmRsZXIuYXBwbHkodGhpcywgLi4uYXJncyk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAob0NvbnRyb2wuaXNBKFwic2FwLnVpLm1kYy5DaGFydFwiKSkge1xuXHRcdChvQ29udHJvbCBhcyBhbnkpXG5cdFx0XHQuaW5uZXJDaGFydEJvdW5kKClcblx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0b0JpbmRpbmdJbmZvID0gKG9Db250cm9sIGFzIGFueSkuZ2V0Q29udHJvbERlbGVnYXRlKCkuX2dldENoYXJ0KG9Db250cm9sKS5nZXRCaW5kaW5nSW5mbyhcImRhdGFcIik7XG5cdFx0XHRcdHNldEJpbmRpbmdJbmZvKCk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChzRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3Ioc0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9CaW5kaW5nSW5mbyA9IG9Db250cm9sLmRhdGEoXCJyb3dzQmluZGluZ0luZm9cIik7XG5cdFx0c2V0QmluZGluZ0luZm8oKTtcblx0fVxufVxuZnVuY3Rpb24gbG9hZE1hY3JvTGlicmFyeSgpIHtcblx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cdFx0c2FwLnVpLnJlcXVpcmUoW1wic2FwL2ZlL21hY3Jvcy9tYWNyb0xpYnJhcnlcIl0sIGZ1bmN0aW9uICgvKm1hY3JvTGlicmFyeSovKSB7XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fSk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBmbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQoc0dyb3VwSWQ6IHN0cmluZywgYWN0aW9uTmFtZTogc3RyaW5nLCBvTW9kZWw6IE9EYXRhTW9kZWwsIGFNZXNzYWdlczogYW55W10pIHtcblx0Y29uc3QgbG9jYWxJMThuUmVmID0gKENvcmUgYXMgQ29yZUV4KS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKSxcblx0XHRzQWN0aW9uTmFtZSA9IGFjdGlvbk5hbWUsXG5cdFx0c0NhbmNlbEJ1dHRvblR4dCA9IGxvY2FsSTE4blJlZi5nZXRUZXh0KFwiQ0FOQ0VMXCIpO1xuXHRpZiAoYU1lc3NhZ2VzLmxlbmd0aCA9PT0gMSkge1xuXHRcdGNvbnN0IHNNZXNzYWdlID0gYU1lc3NhZ2VzWzBdLm1lc3NhZ2UgKyBcIlxcblwiICsgbG9jYWxJMThuUmVmLmdldFRleHQoXCJQUk9DRUVEXCIpO1xuXHRcdGNvbnN0IGRpYWxvZ1Byb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdFx0TWVzc2FnZUJveC53YXJuaW5nKHNNZXNzYWdlLCB7XG5cdFx0XHRcdHRpdGxlOiBsb2NhbEkxOG5SZWYuZ2V0VGV4dChcIldBUk5JTkdcIiksXG5cdFx0XHRcdGFjdGlvbnM6IFtzQWN0aW9uTmFtZSwgc0NhbmNlbEJ1dHRvblR4dF0sXG5cdFx0XHRcdGVtcGhhc2l6ZWRBY3Rpb246IHNBY3Rpb25OYW1lLFxuXHRcdFx0XHRvbkNsb3NlOiBmdW5jdGlvbiAoc0FjdGlvbjogc3RyaW5nKSB7XG5cdFx0XHRcdFx0aWYgKHNBY3Rpb24gPT09IHNBY3Rpb25OYW1lKSB7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdFx0XHRcdFx0b01vZGVsLnN1Ym1pdEJhdGNoKHNHcm91cElkKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHRyZXR1cm4gZGlhbG9nUHJvbWlzZTtcblx0fVxuXHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRjb25zdCBvTWVzc2FnZURpYWxvZ01vZGVsID0gbmV3IEpTT05Nb2RlbCgpO1xuXHRcdG9NZXNzYWdlRGlhbG9nTW9kZWwuc2V0RGF0YShhTWVzc2FnZXMpO1xuXHRcdGNvbnN0IGJTdHJpY3RIYW5kbGluZ0Zsb3cgPSB0cnVlO1xuXHRcdGNvbnN0IG9NZXNzYWdlT2JqZWN0ID0gbWVzc2FnZUhhbmRsaW5nLnByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyhvTWVzc2FnZURpYWxvZ01vZGVsLCBiU3RyaWN0SGFuZGxpbmdGbG93KTtcblx0XHRjb25zdCBvRGlhbG9nID0gbmV3IERpYWxvZyh7XG5cdFx0XHRyZXNpemFibGU6IHRydWUsXG5cdFx0XHRjb250ZW50OiBvTWVzc2FnZU9iamVjdC5vTWVzc2FnZVZpZXcsXG5cdFx0XHRzdGF0ZTogXCJXYXJuaW5nXCIsXG5cdFx0XHRjdXN0b21IZWFkZXI6IG5ldyBCYXIoe1xuXHRcdFx0XHRjb250ZW50TGVmdDogW29NZXNzYWdlT2JqZWN0Lm9CYWNrQnV0dG9uXSxcblx0XHRcdFx0Y29udGVudE1pZGRsZTogW25ldyBUaXRsZSh7IHRleHQ6IFwiV2FybmluZ1wiIH0pXVxuXHRcdFx0fSksXG5cdFx0XHRjb250ZW50SGVpZ2h0OiBcIjUwJVwiLFxuXHRcdFx0Y29udGVudFdpZHRoOiBcIjUwJVwiLFxuXHRcdFx0dmVydGljYWxTY3JvbGxpbmc6IGZhbHNlXG5cdFx0fSk7XG5cdFx0b0RpYWxvZy5zZXRCZWdpbkJ1dHRvbihcblx0XHRcdG5ldyBCdXR0b24oe1xuXHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHRcdFx0b01vZGVsLnN1Ym1pdEJhdGNoKHNHcm91cElkKTtcblx0XHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHR5cGU6IFwiRW1waGFzaXplZFwiLFxuXHRcdFx0XHR0ZXh0OiBnZXRUcmFuc2xhdGVkVGV4dChcIklHTk9SRVwiLCBsb2NhbEkxOG5SZWYsIHNBY3Rpb25OYW1lKVxuXHRcdFx0fSlcblx0XHQpO1xuXHRcdG9EaWFsb2cuc2V0RW5kQnV0dG9uKFxuXHRcdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0ZXh0OiBzQ2FuY2VsQnV0dG9uVHh0XG5cdFx0XHR9KVxuXHRcdCk7XG5cdFx0b0RpYWxvZy5vcGVuKCk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBnZXRNZXNzYWdlQ29sdW1uKG9Db250cm9sOiBhbnkpOiBzdHJpbmcge1xuXHRpZiAoIW9Db250cm9sIHx8IG9Db250cm9sLmlzQShcInNhcC51aS5jb3JlLm12Yy5YTUxWaWV3XCIpKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblx0Y29uc3QgaGVhZGVySW5mb1RpdGxlUGF0aCA9IG9Db250cm9sLmdldFBhcmVudCgpLmdldFRhYmxlRGVmaW5pdGlvbigpLmhlYWRlckluZm9UaXRsZTtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250cm9sICYmIChvQ29udHJvbC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIGFueSksXG5cdFx0c0N1cnJlbnRFbnRpdHlTZXROYW1lID0gb0NvbnRyb2wuZGF0YShcIm1ldGFQYXRoXCIpO1xuXHRjb25zdCBhVGVjaG5pY2FsS2V5cyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNDdXJyZW50RW50aXR5U2V0TmFtZSArIFwiLyRUeXBlLyRLZXlcIik7XG5cdGNvbnN0IGFGaWx0ZXJlZFRlY2huaWNhbEtleXM6IHN0cmluZ1tdID0gW107XG5cblx0YVRlY2huaWNhbEtleXMuZm9yRWFjaChmdW5jdGlvbiAodGVjaG5pY2FsS2V5OiBzdHJpbmcpIHtcblx0XHRpZiAodGVjaG5pY2FsS2V5ICE9PSBcIklzQWN0aXZlRW50aXR5XCIpIHtcblx0XHRcdGFGaWx0ZXJlZFRlY2huaWNhbEtleXMucHVzaCh0ZWNobmljYWxLZXkpO1xuXHRcdH1cblx0fSk7XG5cdGNvbnN0IHNlbWFudGljS2V5Q29sdW1ucyA9IG9Db250cm9sLmdldFBhcmVudCgpLmdldFRhYmxlRGVmaW5pdGlvbigpLnNlbWFudGljS2V5cztcblxuXHRjb25zdCBhVmlzaWJsZUNvbHVtbnM6IGFueSA9IFtdO1xuXHRjb25zdCBhVGFibGVDb2x1bW5zID0gb0NvbnRyb2wuZ2V0Q29sdW1ucygpO1xuXHRhVGFibGVDb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKG9Db2x1bW46IGFueSkge1xuXHRcdGNvbnN0IGNvbHVtblBhdGhTcGxpdCA9IG9Db2x1bW4uZ2V0SWQoKS5zcGxpdChcIjo6XCIpO1xuXHRcdGFWaXNpYmxlQ29sdW1ucy5wdXNoKGNvbHVtblBhdGhTcGxpdFtjb2x1bW5QYXRoU3BsaXQubGVuZ3RoIC0gMV0pO1xuXHR9KTtcblx0bGV0IHN1YnRpdGxlQ29sdW1uOiBzdHJpbmcgPSBcIlwiOyAvL3NldCB0aGUgY29ycmVzc3BvbmRpbmcgc3VidGl0bGUgY29sdW1uXG5cdGlmIChoZWFkZXJJbmZvVGl0bGVQYXRoICE9PSB1bmRlZmluZWQgJiYgYVZpc2libGVDb2x1bW5zLmluZGV4T2YoaGVhZGVySW5mb1RpdGxlUGF0aCkgIT09IC0xKSB7XG5cdFx0c3VidGl0bGVDb2x1bW4gPSBoZWFkZXJJbmZvVGl0bGVQYXRoO1xuXHR9IGVsc2UgaWYgKFxuXHRcdHNlbWFudGljS2V5Q29sdW1ucyAhPT0gdW5kZWZpbmVkICYmXG5cdFx0c2VtYW50aWNLZXlDb2x1bW5zLmxlbmd0aCA9PT0gMSAmJlxuXHRcdGFWaXNpYmxlQ29sdW1ucy5pbmRleE9mKHNlbWFudGljS2V5Q29sdW1uc1swXSkgIT09IC0xXG5cdCkge1xuXHRcdHN1YnRpdGxlQ29sdW1uID0gc2VtYW50aWNLZXlDb2x1bW5zWzBdO1xuXHR9XG5cdC8vIHNldCBjb3JyZWN0IGNvbnRleHQgdG8gY29ycmVjdCBtZXNzYWdlIGluIG1lc3NhZ2UgbW9kZWxcblx0ZWxzZSBpZiAoYUZpbHRlcmVkVGVjaG5pY2FsS2V5cyAhPT0gdW5kZWZpbmVkICYmIGFGaWx0ZXJlZFRlY2huaWNhbEtleXMubGVuZ3RoID09PSAxKSB7XG5cdFx0c3VidGl0bGVDb2x1bW4gPSBhRmlsdGVyZWRUZWNobmljYWxLZXlzWzBdO1xuXHR9XG5cdHJldHVybiBzdWJ0aXRsZUNvbHVtbjtcbn1cblxuZnVuY3Rpb24gZ2V0TWVzc2FnZVN0cmlwVGV4dChcblx0dmlldzogYW55LFxuXHRhSWdub3JlZExhYmVsczogYW55LFxuXHRvRmlsdGVyQmFyOiBhbnksXG5cdGJJc0NoYXJ0OiBhbnksXG5cdGJJc1NlYXJjaElnbm9yZWQ6IGFueSxcblx0c1RhYlRpdGxlOiBhbnksXG5cdG9SZXNvdXJjZUJ1bmRsZTogYW55LFxuXHRmbkdldExvY2FsaXplZFRleHQ6IGFueVxuKTogc3RyaW5nIHtcblx0bGV0IHNUZXh0ID0gXCJcIjtcblx0aWYgKGJJc0NoYXJ0KSB7XG5cdFx0Y29uc3Qgb0NoYXJ0ID0gdmlldy5nZXRDb250cm9sbGVyKCkuZ2V0Q2hhcnRDb250cm9sKCk7XG5cdFx0Y29uc3QgYklzRHJhZnRTdXBwb3J0ZWQgPSBvQ2hhcnQuZGF0YShcImRyYWZ0U3VwcG9ydGVkXCIpID09PSBcInRydWVcIjtcblx0XHRjb25zdCBvTWFjcm9SZXNvdXJjZUJ1bmRsZSA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLm1hY3Jvc1wiKSBhcyBSZXNvdXJjZUJ1bmRsZTtcblx0XHRiSXNTZWFyY2hJZ25vcmVkID0gYklzU2VhcmNoSWdub3JlZCAmJiBhSWdub3JlZExhYmVscy5pbmNsdWRlcyhvTWFjcm9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9GSUxURVJCQVJfU0VBUkNIXCIpKTtcblx0XHRpZiAoYUlnbm9yZWRMYWJlbHMubGVuZ3RoID09PSAyICYmIGJJc1NlYXJjaElnbm9yZWQgJiYgYklzRHJhZnRTdXBwb3J0ZWQpIHtcblx0XHRcdHNUZXh0ID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0xSX01VTFRJVklaX0NIQVJUX0lHTk9SRURfRklMVEVSX0RSQUZUX0RBVEFfQU5EX1NFQVJDSFwiKTtcblx0XHR9IGVsc2UgaWYgKGFJZ25vcmVkTGFiZWxzLmxlbmd0aCA9PT0gMSAmJiBiSXNEcmFmdFN1cHBvcnRlZCkge1xuXHRcdFx0c1RleHQgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTVVMVElWSVpfQ0hBUlRfSUdOT1JFRF9GSUxURVJfRFJBRlRfREFUQVwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgc1Jlc291cmNlID1cblx0XHRcdFx0XCJDX0xSX01VTFRJVklaX0NIQVJUX1wiICtcblx0XHRcdFx0KGFJZ25vcmVkTGFiZWxzLmxlbmd0aCA9PT0gMSA/IFwiU0lOR0xFXCIgOiBcIk1VTFRJXCIpICtcblx0XHRcdFx0XCJfSUdOT1JFRF9GSUxURVJfXCIgK1xuXHRcdFx0XHQoc3lzdGVtLmRlc2t0b3AgPyBcIkxBUkdFXCIgOiBcIlNNQUxMXCIpO1xuXHRcdFx0c1RleHQgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChzUmVzb3VyY2UsIFthSWdub3JlZExhYmVscy5qb2luKFwiLCBcIildKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3Qgc1Jlc291cmNlID1cblx0XHRcdFx0XCJDX0xSX01VTFRJVEFCTEVTX1wiICtcblx0XHRcdFx0KGFJZ25vcmVkTGFiZWxzLmxlbmd0aCA9PT0gMSA/IFwiU0lOR0xFXCIgOiBcIk1VTFRJXCIpICtcblx0XHRcdFx0XCJfSUdOT1JFRF9GSUxURVJfXCIgK1xuXHRcdFx0XHQoc3lzdGVtLmRlc2t0b3AgPyBcIkxBUkdFXCIgOiBcIlNNQUxMXCIpLFxuXHRcdFx0c0xvY2FsaXplZFRhYmxlVGl0bGUgPSBmbkdldExvY2FsaXplZFRleHQoc1RhYlRpdGxlLCBvRmlsdGVyQmFyKTtcblx0XHRzVGV4dCA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KHNSZXNvdXJjZSwgW2FJZ25vcmVkTGFiZWxzLmpvaW4oXCIsIFwiKSwgc0xvY2FsaXplZFRhYmxlVGl0bGVdKTtcblx0fVxuXHRyZXR1cm4gc1RleHQ7XG59XG5cbi8vIEdldCB0aGUgcGF0aCBmb3IgYWN0aW9uIHBhcmFtZXRlcnMgdGhhdCBpcyBuZWVkZWQgdG8gcmVhZCB0aGUgYW5ub3RhdGlvbnNcbmZ1bmN0aW9uIGdldFBhcmFtZXRlclBhdGgoc1BhdGg6IGFueSwgc1BhcmFtZXRlcjogYW55KSB7XG5cdGxldCBzQ29udGV4dDtcblx0aWYgKHNQYXRoLmluZGV4T2YoXCJAJHVpNS5vdmVybG9hZFwiKSA+IC0xKSB7XG5cdFx0c0NvbnRleHQgPSBzUGF0aC5zcGxpdChcIkAkdWk1Lm92ZXJsb2FkXCIpWzBdO1xuXHR9IGVsc2Uge1xuXHRcdC8vIEZvciBVbmJvdW5kIEFjdGlvbnMgaW4gQWN0aW9uIFBhcmFtZXRlciBEaWFsb2dzXG5cdFx0Y29uc3QgYUFjdGlvbiA9IHNQYXRoLnNwbGl0KFwiLzBcIilbMF0uc3BsaXQoXCIuXCIpO1xuXHRcdHNDb250ZXh0ID0gYC8ke2FBY3Rpb25bYUFjdGlvbi5sZW5ndGggLSAxXX0vYDtcblx0fVxuXHRyZXR1cm4gc0NvbnRleHQgKyBzUGFyYW1ldGVyO1xufVxuXG5jb25zdCBDb21tb25VdGlscyA9IHtcblx0aXNQcm9wZXJ0eUZpbHRlcmFibGU6IGlzUHJvcGVydHlGaWx0ZXJhYmxlLFxuXHRpc0ZpZWxkQ29udHJvbFBhdGhJbmFwcGxpY2FibGU6IGlzRmllbGRDb250cm9sUGF0aEluYXBwbGljYWJsZSxcblx0cmVtb3ZlU2Vuc2l0aXZlRGF0YTogcmVtb3ZlU2Vuc2l0aXZlRGF0YSxcblx0ZmlyZUJ1dHRvblByZXNzOiBmbkZpcmVCdXR0b25QcmVzcyxcblx0Z2V0VGFyZ2V0VmlldzogZ2V0VGFyZ2V0Vmlldyxcblx0aGFzVHJhbnNpZW50Q29udGV4dDogZm5IYXNUcmFuc2llbnRDb250ZXh0cyxcblx0dXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzOiBmblVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyxcblx0cmVzb2x2ZVN0cmluZ3RvQm9vbGVhbjogZm5SZXNvbHZlU3RyaW5ndG9Cb29sZWFuLFxuXHRnZXRBcHBDb21wb25lbnQ6IGdldEFwcENvbXBvbmVudCxcblx0Z2V0TWFuZGF0b3J5RmlsdGVyRmllbGRzOiBmbkdldE1hbmRhdG9yeUZpbHRlckZpZWxkcyxcblx0Z2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzOiBmbkdldENvbnRleHRQYXRoUHJvcGVydGllcyxcblx0Z2V0UGFyYW1ldGVySW5mbzogZ2V0UGFyYW1ldGVySW5mbyxcblx0dXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHk6IGZuVXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHksXG5cdGdldFRyYW5zbGF0ZWRUZXh0OiBnZXRUcmFuc2xhdGVkVGV4dCxcblx0Z2V0RW50aXR5U2V0TmFtZTogZ2V0RW50aXR5U2V0TmFtZSxcblx0Z2V0QWN0aW9uUGF0aDogZ2V0QWN0aW9uUGF0aCxcblx0Y29tcHV0ZURpc3BsYXlNb2RlOiBjb21wdXRlRGlzcGxheU1vZGUsXG5cdHNldEFjdGlvbkVuYWJsZW1lbnQ6IHNldEFjdGlvbkVuYWJsZW1lbnQsXG5cdGlzU3RpY2t5RWRpdE1vZGU6IGlzU3RpY2t5RWRpdE1vZGUsXG5cdGdldE9wZXJhdG9yc0ZvclByb3BlcnR5OiBnZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eSxcblx0YWRkU2VsZWN0aW9uVmFyaWFudFRvQ29uZGl0aW9uczogYWRkU2VsZWN0aW9uVmFyaWFudFRvQ29uZGl0aW9ucyxcblx0YWRkRXh0ZXJuYWxTdGF0ZUZpbHRlcnNUb1NlbGVjdGlvblZhcmlhbnQ6IGFkZEV4dGVybmFsU3RhdGVGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50LFxuXHRhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudDogYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQsXG5cdGFkZERlZmF1bHREaXNwbGF5Q3VycmVuY3k6IGFkZERlZmF1bHREaXNwbGF5Q3VycmVuY3ksXG5cdGdldE5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkczogZ2V0Tm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzLFxuXHRzZXRVc2VyRGVmYXVsdHM6IHNldFVzZXJEZWZhdWx0cyxcblx0Z2V0U2hlbGxTZXJ2aWNlczogZ2V0U2hlbGxTZXJ2aWNlcyxcblx0Z2V0SGFzaDogZ2V0SGFzaCxcblx0Z2V0SUJOQWN0aW9uczogZm5HZXRJQk5BY3Rpb25zLFxuXHRnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb246IGdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbixcblx0Z2V0U2VtYW50aWNPYmplY3RNYXBwaW5nOiBnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdHNldFNlbWFudGljT2JqZWN0TWFwcGluZ3M6IHNldFNlbWFudGljT2JqZWN0TWFwcGluZ3MsXG5cdGdldFNlbWFudGljT2JqZWN0UHJvbWlzZTogZm5HZXRTZW1hbnRpY09iamVjdFByb21pc2UsXG5cdGdldFNlbWFudGljVGFyZ2V0c0Zyb21QYWdlTW9kZWw6IGZuR2V0U2VtYW50aWNUYXJnZXRzRnJvbVBhZ2VNb2RlbCxcblx0Z2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGg6IGZuR2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgsXG5cdHVwZGF0ZVNlbWFudGljVGFyZ2V0czogZm5VcGRhdGVTZW1hbnRpY1RhcmdldHNNb2RlbCxcblx0Z2V0UHJvcGVydHlEYXRhVHlwZTogZ2V0UHJvcGVydHlEYXRhVHlwZSxcblx0Z2V0TmF2aWdhdGlvblJlc3RyaWN0aW9uczogZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyxcblx0Z2V0U2VhcmNoUmVzdHJpY3Rpb25zOiBnZXRTZWFyY2hSZXN0cmljdGlvbnMsXG5cdGdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aDogZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoLFxuXHRnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uOiBnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uLFxuXHRnZXRBZGRpdGlvbmFsUGFyYW1zRm9yQ3JlYXRlOiBnZXRBZGRpdGlvbmFsUGFyYW1zRm9yQ3JlYXRlLFxuXHRyZXF1ZXN0U2luZ2xldG9uUHJvcGVydHk6IHJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eSxcblx0dGVtcGxhdGVDb250cm9sRnJhZ21lbnQ6IHRlbXBsYXRlQ29udHJvbEZyYWdtZW50LFxuXHRhZGRFdmVudFRvQmluZGluZ0luZm86IGFkZEV2ZW50VG9CaW5kaW5nSW5mbyxcblx0c2V0T2JqZWN0TWFwcGluZ3M6IHNldE9iamVjdE1hcHBpbmdzLFxuXHRGaWx0ZXJSZXN0cmljdGlvbnM6IHtcblx0XHRSRVFVSVJFRF9QUk9QRVJUSUVTOiBcIlJlcXVpcmVkUHJvcGVydGllc1wiLFxuXHRcdE5PTl9GSUxURVJBQkxFX1BST1BFUlRJRVM6IFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIixcblx0XHRBTExPV0VEX0VYUFJFU1NJT05TOiBcIkZpbHRlckFsbG93ZWRFeHByZXNzaW9uc1wiXG5cdH0sXG5cdEFsbG93ZWRFeHByZXNzaW9uc1ByaW86IFtcIlNpbmdsZVZhbHVlXCIsIFwiTXVsdGlWYWx1ZVwiLCBcIlNpbmdsZVJhbmdlXCIsIFwiTXVsdGlSYW5nZVwiLCBcIlNlYXJjaEV4cHJlc3Npb25cIiwgXCJNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXCJdLFxuXHRub3JtYWxpemVTZWFyY2hUZXJtOiBub3JtYWxpemVTZWFyY2hUZXJtLFxuXHRmbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQ6IGZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZCxcblx0Z2V0U2luZ2xldG9uUGF0aDogZ2V0U2luZ2xldG9uUGF0aCxcblx0Z2V0TWVzc2FnZVN0cmlwVGV4dDogZ2V0TWVzc2FnZVN0cmlwVGV4dCxcblx0Z2V0TWVzc2FnZUNvbHVtbjogZ2V0TWVzc2FnZUNvbHVtbixcblx0Z2V0UGFyYW1ldGVyUGF0aDogZ2V0UGFyYW1ldGVyUGF0aCxcblx0Z2V0T3BlcmF0b3JzRm9yRGF0ZVByb3BlcnR5OiBnZXRPcGVyYXRvcnNGb3JEYXRlUHJvcGVydHlcbn07XG5cbmV4cG9ydCBkZWZhdWx0IENvbW1vblV0aWxzO1xuIl19
|
|
2221
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbW1vblV0aWxzLnRzIl0sIm5hbWVzIjpbImFWYWxpZFR5cGVzIiwibm9ybWFsaXplU2VhcmNoVGVybSIsInNTZWFyY2hUZXJtIiwidW5kZWZpbmVkIiwicmVwbGFjZSIsInNwbGl0IiwicmVkdWNlIiwic05vcm1hbGl6ZWQiLCJzQ3VycmVudFdvcmQiLCJnZXRQcm9wZXJ0eURhdGFUeXBlIiwib05hdmlnYXRpb25Db250ZXh0Iiwic0RhdGFUeXBlIiwiZ2V0UHJvcGVydHkiLCJzQW5ub3RhdGlvblBhdGgiLCJpbmRleE9mIiwiZm5IYXNUcmFuc2llbnRDb250ZXh0cyIsIm9MaXN0QmluZGluZyIsImJIYXNUcmFuc2llbnRDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsImZvckVhY2giLCJvQ29udGV4dCIsImlzVHJhbnNpZW50IiwiZ2V0U2VhcmNoUmVzdHJpY3Rpb25zIiwic0Z1bGxQYXRoIiwib01ldGFNb2RlbCIsImkiLCJhTmF2aWdhdGlvblBhcnRzIiwic1BhdGgiLCJsZW5ndGgiLCJvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsImdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJnZXRPYmplY3QiLCJvTW9kZWwiLCJzRW50aXR5U2V0UGF0aCIsInNOYXZpZ2F0aW9uUGF0aCIsImFSZXN0cmljdGVkUHJvcGVydGllcyIsIlJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwiZmluZCIsIm9SZXN0cmljdGVkUHJvcGVydHkiLCJOYXZpZ2F0aW9uUHJvcGVydHkiLCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aCIsIl9pc0luTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJzQ29udGV4dFBhdGgiLCJiSXNOb3RGaWx0ZXJhYmxlIiwib0Fubm90YXRpb24iLCJOb25GaWx0ZXJhYmxlUHJvcGVydGllcyIsInNvbWUiLCJwcm9wZXJ0eSIsIiRQcm9wZXJ0eVBhdGgiLCJfaXNDb250ZXh0UGF0aEZpbHRlcmFibGUiLCJzQ29udGV4UGF0aCIsImFFU1BhcnRzIiwic3BsaWNlIiwiYUNvbnRleHQiLCJzQ29udGV4dCIsImpvaW4iLCJpdGVtIiwiaW5kZXgiLCJhcnJheSIsIm9GaWx0ZXJSZXN0cmljdGlvbnMiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJhTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJzVGFyZ2V0UHJvcGVydHlQYXRoIiwib1Byb3BlcnR5UGF0aCIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwic1Byb3BlcnR5IiwiYlNraXBIaWRkZW5GaWx0ZXIiLCJFcnJvciIsImJJc0ZpbHRlcmFibGUiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsInNIaWRkZW5QYXRoIiwic0hpZGRlbkZpbHRlclBhdGgiLCJjb21waWxlQmluZGluZyIsIm5vdCIsIm9yIiwiYmluZGluZ0V4cHJlc3Npb24iLCJzUHJvcGVydHlEYXRhVHlwZSIsImdldFNoZWxsU2VydmljZXMiLCJvQ29udHJvbCIsImdldEFwcENvbXBvbmVudCIsImdldEhhc2giLCJzSGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaGFzaCIsIl9nZXRTT0ludGVudHMiLCJvT2JqZWN0UGFnZUxheW91dCIsIm9TZW1hbnRpY09iamVjdCIsIm9QYXJhbSIsIm9TaGVsbFNlcnZpY2VIZWxwZXIiLCJDb21tb25VdGlscyIsImdldExpbmtzIiwic2VtYW50aWNPYmplY3QiLCJwYXJhbXMiLCJfY3JlYXRlTWFwcGluZ3MiLCJvTWFwcGluZyIsImFTT01hcHBpbmdzIiwiYU1hcHBpbmdLZXlzIiwiT2JqZWN0Iiwia2V5cyIsIm9TZW1hbnRpY01hcHBpbmciLCJwdXNoIiwiX2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zIiwiYUxpbmtzIiwiYUV4Y2x1ZGVkQWN0aW9ucyIsIm9UYXJnZXRQYXJhbXMiLCJhSXRlbXMiLCJvTGluayIsInNJbnRlbnQiLCJpbnRlbnQiLCJzQWN0aW9uIiwidGV4dCIsInRhcmdldFNlbU9iamVjdCIsInRhcmdldEFjdGlvbiIsInRhcmdldFBhcmFtcyIsIl9nZXRSZWxhdGVkSW50ZW50cyIsIm9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzIiwib0JpbmRpbmdDb250ZXh0IiwiYU1hbmlmZXN0U09JdGVtcyIsInVuYXZhaWxhYmxlQWN0aW9ucyIsIm1hcHBpbmciLCJuYXZpZ2F0aW9uQ29udGV4dHMiLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJ1cGRhdGVSZWxhdGVBcHBzTW9kZWwiLCJvRW50cnkiLCJhU2VtS2V5cyIsIm9NZXRhUGF0aCIsInNDdXJyZW50U2VtT2JqIiwic0N1cnJlbnRBY3Rpb24iLCJvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyIsImFSZWxhdGVkQXBwc01lbnVJdGVtcyIsImoiLCJzU2VtS2V5IiwidmFsdWUiLCJhVGVjaG5pY2FsS2V5cyIsImtleSIsInNPYmpLZXkiLCJvTWFuaWZlc3REYXRhIiwiZ2V0VGFyZ2V0VmlldyIsImdldFZpZXdEYXRhIiwiYWRkaXRpb25hbFNlbWFudGljT2JqZWN0cyIsImFNYW5pZmVzdFNPS2V5cyIsInRoZW4iLCJiaW5kIiwiY2F0Y2giLCJvRXJyb3IiLCJMb2ciLCJlcnJvciIsImZuR2V0UGFyc2VTaGVsbEhhc2hBbmRHZXRMaW5rcyIsIm9QYXJzZWRVcmwiLCJwYXJzZVNoZWxsSGFzaCIsImRvY3VtZW50IiwiYWN0aW9uIiwiYUFubm90YXRpb25zU09JdGVtcyIsInNFbnRpdHlUeXBlUGF0aCIsIm9FbnRpdHlTZXRBbm5vdGF0aW9ucyIsIl9nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zIiwiYkhhc0VudGl0eVNldFNPIiwib0VudGl0eVR5cGVBbm5vdGF0aW9ucyIsImFVbmF2YWlsYWJsZUFjdGlvbnMiLCJhTWFwcGluZ3MiLCJjb25jYXQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNldFByb3BlcnR5Iiwib0VudGl0eUFubm90YXRpb25zIiwic0Fubm90YXRpb25NYXBwaW5nVGVybSIsInNBbm5vdGF0aW9uQWN0aW9uVGVybSIsInNRdWFsaWZpZXIiLCJmblVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwib1BhdGgiLCJnZXRQYXRoIiwiZ2V0TWV0YVBhdGgiLCJzU2VtYW50aWNLZXlWb2NhYnVsYXJ5IiwicmVxdWVzdE9iamVjdCIsImZuRmlyZUJ1dHRvblByZXNzIiwib0J1dHRvbiIsImFBdXRob3JpemVkVHlwZXMiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJnZXRWaXNpYmxlIiwiZ2V0RW5hYmxlZCIsImZpcmVQcmVzcyIsImZuUmVzb2x2ZVN0cmluZ3RvQm9vbGVhbiIsInNWYWx1ZSIsImlzQSIsIm9Pd25lciIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwiZ2V0Q29tcG9uZW50SW5zdGFuY2UiLCJnZXRSb290Q29udHJvbCIsIlZpZXciLCJnZXRQYXJlbnQiLCJpc0ZpZWxkQ29udHJvbFBhdGhJbmFwcGxpY2FibGUiLCJzRmllbGRDb250cm9sUGF0aCIsIm9BdHRyaWJ1dGUiLCJiSW5hcHBsaWNhYmxlIiwiYVBhcnRzIiwiaGFzT3duUHJvcGVydHkiLCJyZW1vdmVTZW5zaXRpdmVEYXRhIiwiYUF0dHJpYnV0ZXMiLCJhT3V0QXR0cmlidXRlcyIsInNFbnRpdHlTZXQiLCJlbnRpdHlTZXQiLCJjb250ZXh0RGF0YSIsImFQcm9wZXJ0aWVzIiwic1Byb3AiLCJhUHJvcGVydHlBbm5vdGF0aW9ucyIsIm9GaWVsZENvbnRyb2wiLCJfZm5DaGVja0lzTWF0Y2giLCJvT2JqZWN0Iiwib0tleXNUb0NoZWNrIiwic0tleSIsImZuR2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzIiwib0ZpbHRlciIsIm9FbnRpdHlUeXBlIiwib1Byb3BlcnRpZXMiLCJ0ZXN0IiwiJGtpbmQiLCJmbkdldE1hbmRhdG9yeUZpbHRlckZpZWxkcyIsImFNYW5kYXRvcnlGaWx0ZXJGaWVsZHMiLCJmbkdldElCTkFjdGlvbnMiLCJhSUJOQWN0aW9ucyIsImFBY3Rpb25zIiwiZ2V0QWN0aW9ucyIsIm9BY3Rpb24iLCJnZXRBY3Rpb24iLCJkYXRhIiwiZm5VcGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSIsIm9WaWV3Iiwib1BhcmFtcyIsImZuR2V0TGlua3MiLCJvRGF0YSIsImFLZXlzIiwib0lCTkFjdGlvbiIsInNTZW1hbnRpY09iamVjdCIsImFMaW5rIiwic2V0VmlzaWJsZSIsImdldFRyYW5zbGF0ZWRUZXh0Iiwic0ZyYW1ld29ya0tleSIsIm9SZXNvdXJjZUJ1bmRsZSIsInNFbnRpdHlTZXROYW1lIiwic1Jlc291cmNlS2V5IiwiYlJlc291cmNlS2V5RXhpc3RzIiwiX2NoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyIsImFDdXN0b21CdW5kbGVzIiwiZ2V0VGV4dCIsIkNvcmUiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJoYXNUZXh0IiwiZ2V0QWN0aW9uUGF0aCIsImJSZXR1cm5Pbmx5UGF0aCIsInNBY3Rpb25OYW1lIiwiYkNoZWNrU3RhdGljVmFsdWUiLCJzRW50aXR5VHlwZU5hbWUiLCIkVHlwZSIsInNFbnRpdHlOYW1lIiwiZ2V0RW50aXR5U2V0TmFtZSIsInNCaW5kaW5nUGFyYW1ldGVyIiwic0VudGl0eVR5cGUiLCJvRW50aXR5Q29udGFpbmVyIiwiY29tcHV0ZURpc3BsYXlNb2RlIiwib1Byb3BlcnR5QW5ub3RhdGlvbnMiLCJvQ29sbGVjdGlvbkFubm90YXRpb25zIiwib1RleHRBbm5vdGF0aW9uIiwib1RleHRBcnJhbmdlbWVudEFubm90YXRpb24iLCIkRW51bU1lbWJlciIsIl9nZXRFbnRpdHlUeXBlIiwiX3JlcXVlc3RPYmplY3QiLCJvU2VsZWN0ZWRDb250ZXh0IiwibkJyYWNrZXRJbmRleCIsInNUYXJnZXRUeXBlIiwic2xpY2UiLCJzQ3VycmVudFR5cGUiLCJnZXRCaW5kaW5nIiwiZ2V0Q29udGV4dCIsIndhcm5pbmciLCJQcm9taXNlIiwicmVzb2x2ZSIsIl9yZXF1ZXN0UHJvcGVydHkiLCJzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoIiwib1Byb21pc2UiLCJyZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkiLCJ2UHJvcGVydHlWYWx1ZSIsIl9zZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJhUmVxdWVzdFByb21pc2VzIiwiYWxsIiwiYVJlc3VsdHMiLCJhQXBwbGljYWJsZUNvbnRleHRzIiwiYU5vdEFwcGxpY2FibGVDb250ZXh0cyIsImFSZXN1bHQiLCJfc2V0RHluYW1pY0FjdGlvbkNvbnRleHRzIiwidHJhY2UiLCJhQXBwbGljYWJsZSIsImFOb3RBcHBsaWNhYmxlIiwic0R5bmFtaWNBY3Rpb25QYXRoUHJlZml4Iiwib0ludGVybmFsTW9kZWwiLCJzZXRBY3Rpb25FbmFibGVtZW50Iiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsImFTZWxlY3RlZENvbnRleHRzIiwiYVByb21pc2VzIiwiYkVuYWJsZWQiLCJvQ29udGV4dERhdGEiLCJvVHJhbnNmb3JtZWRCaW5kaW5nIiwidHJhbnNmb3JtUmVjdXJzaXZlbHkiLCJvQmluZGluZ0V4cHJlc3Npb24iLCJjb25zdGFudCIsInBhdGgiLCJzUmVzdWx0Iiwic2V0T2JqZWN0TWFwcGluZ3MiLCJhU2VtYW50aWNPYmplY3RNYXBwaW5ncyIsIm9JdGVtIiwib01hcHBpbmdzIiwiaXRlbXMiLCJzTG9jYWxQcm9wZXJ0eSIsInNTZW1hbnRpY09iamVjdFByb3BlcnR5IiwiX2dldERlZmF1bHRPcGVyYXRvcnMiLCJzUHJvcGVydHlUeXBlIiwib0RhdGFDbGFzcyIsIlR5cGVVdGlsIiwiZ2V0RGF0YVR5cGVDbGFzc05hbWUiLCJvQmFzZVR5cGUiLCJnZXRCYXNlVHlwZSIsIkZpbHRlck9wZXJhdG9yVXRpbCIsImdldE9wZXJhdG9yc0ZvclR5cGUiLCJfZ2V0UmVzdHJpY3Rpb25zIiwiYURlZmF1bHRPcHMiLCJhRXhwcmVzc2lvbk9wcyIsImFPcGVyYXRvcnMiLCJmaWx0ZXIiLCJzRWxlbWVudCIsInRvU3RyaW5nIiwiZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbiIsImFFeHByZXNzaW9ucyIsImFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eSIsIkFsbG93ZWRFeHByZXNzaW9uc1ByaW8iLCJzb3J0IiwiYSIsImIiLCJnZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eSIsInNUeXBlIiwiYlVzZVNlbWFudGljRGF0ZVJhbmdlIiwic1NldHRpbmdzIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoIiwiYUVxdWFsc09wcyIsImFTaW5nbGVSYW5nZU9wcyIsImFTaW5nbGVSYW5nZURUQmFzaWNPcHMiLCJhU2luZ2xlVmFsdWVEYXRlT3BzIiwiYUJhc2ljRGF0ZVRpbWVPcHMiLCJhTXVsdGlSYW5nZU9wcyIsImFTZWFyY2hFeHByZXNzaW9uT3BzIiwiYVNlbWFudGljRGF0ZU9wc0V4dCIsIlNlbWFudGljRGF0ZU9wZXJhdG9ycyIsImdldFN1cHBvcnRlZE9wZXJhdGlvbnMiLCJiU2VtYW50aWNEYXRlUmFuZ2UiLCJhU2VtYW50aWNEYXRlT3BzIiwib1NldHRpbmdzIiwiSlNPTiIsInBhcnNlIiwiY3VzdG9tRGF0YSIsIm9wZXJhdG9yQ29uZmlndXJhdGlvbiIsImdldEZpbHRlck9wZXJhdGlvbnMiLCJnZXRTZW1hbnRpY0RhdGVPcGVyYXRpb25zIiwiYVNpbmdsZVJhbmdlRGF0ZVRpbWVPcHMiLCJzT3BlcmF0b3IiLCJhRGVmYXVsdE9wZXJhdG9ycyIsInNSZXN0cmljdGlvbnMiLCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMiLCJzQWxsb3dlZEV4cHJlc3Npb24iLCJhU2luZ2xlVmFsdWVPcHMiLCJzT3BlcmF0b3JzIiwiZ2V0T3BlcmF0b3JzRm9yRGF0ZVByb3BlcnR5IiwicHJvcGVydHlUeXBlIiwiZ2V0UGFyYW1ldGVySW5mbyIsInNQYXJhbWV0ZXJDb250ZXh0UGF0aCIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiYlJlc3VsdENvbnRleHQiLCJvUGFyYW1ldGVySW5mbyIsImNvbnRleHRQYXRoIiwicGFyYW1ldGVyUHJvcGVydGllcyIsImdldENvbnRleHRQYXRoUHJvcGVydGllcyIsImFkZFNlbGVjdE9wdGlvblRvQ29uZGl0aW9ucyIsIm9Qcm9wZXJ0eU1ldGFkYXRhIiwiYVZhbGlkT3BlcmF0b3JzIiwiYUN1bXVsYXRpdmVDb25kaXRpb25zIiwib1NlbGVjdE9wdGlvbiIsIm9Db25kaXRpb24iLCJnZXRDb25kaXRpb25zIiwib3BlcmF0b3IiLCJhZGRTZWxlY3RPcHRpb25zVG9Db25kaXRpb25zIiwib1NlbGVjdGlvblZhcmlhbnQiLCJzU2VsZWN0T3B0aW9uUHJvcCIsIm9Db25kaXRpb25zIiwic0NvbmRpdGlvblBhdGgiLCJzQ29uZGl0aW9uUHJvcCIsIm9WYWxpZFByb3BlcnRpZXMiLCJpc1BhcmFtZXRlciIsImFDb25kaXRpb25zIiwiYVNlbGVjdE9wdGlvbnMiLCJnZXRTZWxlY3RPcHRpb24iLCJhZGRTZWxlY3Rpb25WYXJpYW50VG9Db25kaXRpb25zIiwiYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzIiwiZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMiLCJhTWV0YWRhdFByb3BlcnRpZXMiLCJvVmFsaWRQYXJhbWV0ZXJQcm9wZXJ0aWVzIiwiYkhhc1BhcmFtZXRlcnMiLCJhTWV0YWRhdGFQYXJhbWV0ZXJzIiwic01ldGFkYXRhUGFyYW1ldGVyIiwic1NlbGVjdE9wdGlvbk5hbWUiLCJpbmNsdWRlcyIsInN0YXJ0c1dpdGgiLCJzTWV0YWRhdGFQcm9wZXJ0eSIsInNTZWxlY3RPcHRpb24iLCJzRnVsbENvbnRleHRQYXRoIiwicmVwbGFjZUFsbCIsIl9jcmVhdGVDb25kaXRpb25zRm9yTmF2UHJvcGVydGllcyIsInNNYWluRW50aXR5U2V0UGF0aCIsImFOYXZPYmplY3ROYW1lcyIsInNOYXZQYXRoIiwic1Byb3BlcnR5TmFtZSIsIiRpc0NvbGxlY3Rpb24iLCJzTmF2UHJvcGVydHlQYXRoIiwiYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQiLCJtUGFnZUNvbnRleHQiLCJvQXBwQ29tcG9uZW50Iiwib05hdmlnYXRpb25TZXJ2aWNlIiwiZ2V0TmF2aWdhdGlvblNlcnZpY2UiLCJtaXhBdHRyaWJ1dGVzQW5kU2VsZWN0aW9uVmFyaWFudCIsInRvSlNPTlN0cmluZyIsImFkZEV4dGVybmFsU3RhdGVGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50IiwibUZpbHRlcnMiLCJvVGFyZ2V0SW5mbyIsIm9GaWx0ZXJJbmZvIiwic0ZpbHRlciIsInNMb3ciLCJzSGlnaCIsImZuR2V0U2lnbkFuZE9wdGlvbiIsInNMb3dWYWx1ZSIsInNIaWdoVmFsdWUiLCJvU2VsZWN0T3B0aW9uU3RhdGUiLCJvcHRpb24iLCJzaWduIiwibG93IiwiaGlnaCIsIm9GaWx0ZXJDb25kaXRpb25zIiwiZmlsdGVyQ29uZGl0aW9ucyIsIm9GaWx0ZXJzV2l0aG91dENvbmZsaWN0IiwiZmlsdGVyQ29uZGl0aW9uc1dpdGhvdXRDb25mbGljdCIsIm9UYWJsZVByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QiLCJwcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0IiwiYWRkRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudCIsInNGaWx0ZXJOYW1lIiwiYUZpbHRlcnMiLCJ2YWx1ZXMiLCJhRmlsdGVyIiwib1ZhbHVlMSIsIm9TZWxlY3RPcHRpb25WYWx1ZXMiLCJhZGRTZWxlY3RPcHRpb24iLCJpc1N0aWNreUVkaXRNb2RlIiwiYklzU3RpY2t5TW9kZSIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiYlVJRWRpdGFibGUiLCJhZGREZWZhdWx0RGlzcGxheUN1cnJlbmN5Iiwib1NlbGVjdGlvblZhcmlhbnREZWZhdWx0cyIsImFTVk9wdGlvbiIsImFEZWZhdWx0U1ZPcHRpb24iLCJkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb24iLCJzU2lnbiIsInNPcHRpb24iLCJnZXROb25Db21wdXRlZFZpc2libGVGaWVsZHMiLCIkS2V5IiwiYU5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcyIsIm9Bbm5vdGF0aW9ucyIsImJJc0tleSIsImJJc0ltbXV0YWJsZSIsImJJc05vbkNvbXB1dGVkIiwiYklzVmlzaWJsZSIsImJJc0NvbXB1dGVkRGVmYXVsdFZhbHVlIiwiYklzS2V5Q29tcHV0ZWREZWZhdWx0VmFsdWVXaXRoVGV4dCIsIm9EaWFnbm9zdGljcyIsImdldERpYWdub3N0aWNzIiwic01lc3NhZ2UiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIk1lZGl1bSIsIklzc3VlQ2F0ZWdvcnlUeXBlIiwiQW5ub3RhdGlvbnMiLCJJZ25vcmVkQW5ub3RhdGlvbiIsInNldFVzZXJEZWZhdWx0cyIsImFQYXJhbWV0ZXJzIiwiYklzQWN0aW9uIiwiYklzQ3JlYXRlIiwib0FjdGlvbkRlZmF1bHRWYWx1ZXMiLCJvQ29tcG9uZW50RGF0YSIsImdldENvbXBvbmVudERhdGEiLCJvU3RhcnR1cFBhcmFtZXRlcnMiLCJzdGFydHVwUGFyYW1ldGVycyIsIm9TaGVsbFNlcnZpY2VzIiwiaGFzVVNoZWxsIiwib1BhcmFtZXRlciIsIiROYW1lIiwic1BhcmFtZXRlck5hbWUiLCJnZXRTdGFydHVwQXBwU3RhdGUiLCJvU3RhcnR1cEFwcFN0YXRlIiwiZ2V0RGF0YSIsImFFeHRlbmRlZFBhcmFtZXRlcnMiLCJzZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0T3B0aW9ucyIsIm9FeHRlbmRlZFBhcmFtZXRlciIsIlByb3BlcnR5TmFtZSIsIm9SYW5nZSIsIlJhbmdlcyIsIlNpZ24iLCJPcHRpb24iLCJMb3ciLCJnZXRBZGRpdGlvbmFsUGFyYW1zRm9yQ3JlYXRlIiwib0luYm91bmRQYXJhbWV0ZXJzIiwib0luYm91bmRzIiwiYUNyZWF0ZVBhcmFtZXRlcnMiLCJzUGFyYW1ldGVyIiwidXNlRm9yQ3JlYXRlIiwib1JldCIsInNDcmVhdGVQYXJhbWV0ZXIiLCJhVmFsdWVzIiwiY3JlYXRlIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwib091dGJvdW5kIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZyIsInBhcmFtZXRlcnMiLCJzUGFyYW0iLCJmb3JtYXQiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJvVmlld0RhdGEiLCJvQ3Jvc3NOYXYiLCJvSGVhZGVyRmFjZXRJdGVtcyIsInNJZCIsIm9Db250cm9sQ29uZmlnIiwiY29udHJvbENvbmZpZ3VyYXRpb24iLCJjb25maWciLCJuYXZpZ2F0aW9uIiwidGFyZ2V0T3V0Ym91bmQiLCJvdXRib3VuZCIsInNPdXRib3VuZCIsImdlbmVyYXRlIiwic2V0U2VtYW50aWNPYmplY3RNYXBwaW5ncyIsInZNYXBwaW5ncyIsInJlbW92ZVNlbGVjdE9wdGlvbiIsIm1hc3NBZGRTZWxlY3RPcHRpb24iLCJmbkdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoIiwiYVNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zIiwiYVNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3MiLCJzZW1hbnRpY09iamVjdFBhdGgiLCJzZW1hbnRpY09iamVjdEZvckdldExpbmtzIiwiZm5VcGRhdGVTZW1hbnRpY1RhcmdldHNNb2RlbCIsImFHZXRMaW5rc1Byb21pc2VzIiwiYVNlbWFudGljT2JqZWN0cyIsInNDdXJyZW50SGFzaCIsIl9vTGluayIsIl9zTGlua0ludGVudEFjdGlvbiIsImFGaW5hbExpbmtzIiwib0ZpbmFsU2VtYW50aWNPYmplY3RzIiwiYkludGVudEhhc0FjdGlvbnMiLCJrIiwib1RtcCIsInNBbHRlcm5hdGVQYXRoIiwiaGFzVGFyZ2V0c05vdEZpbHRlcmVkIiwiaGFzVGFyZ2V0cyIsImlMaW5rQ291bnQiLCJIYXNUYXJnZXRzIiwiSGFzVGFyZ2V0c05vdEZpbHRlcmVkIiwiYXNzaWduIiwic1NlbWFudGljT2JqZWN0TmFtZSIsIm1lcmdlT2JqZWN0cyIsImZuR2V0U2VtYW50aWNPYmplY3RQcm9taXNlIiwiZ2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgiLCJmbkdldFNlbWFudGljVGFyZ2V0c0Zyb21QYWdlTW9kZWwiLCJvQ29udHJvbGxlciIsInNQYWdlTW9kZWwiLCJfZm5maW5kVmFsdWVzSGVscGVyIiwib2JqIiwibGlzdCIsIkFycmF5IiwiY2hpbGRyZW4iLCJfZm5maW5kVmFsdWVzIiwiX2ZuRGVsZXRlRHVwbGljYXRlU2VtYW50aWNPYmplY3RzIiwiYVNlbWFudGljT2JqZWN0UGF0aCIsImdldFZpZXciLCJhU2VtYW50aWNPYmplY3RzUHJvbWlzZXMiLCJvQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnQiLCJvUGFnZU1vZGVsIiwic3RyaW5naWZ5IiwiX2dldE9iamVjdCIsImFTZW1hbnRpY09iamVjdHNGb3VuZCIsImFTZW1hbnRpY09iamVjdHNGb3JHZXRMaW5rcyIsIl9vU2VtYW50aWNPYmplY3QiLCJnZXRTZW1hbnRpY09iamVjdFByb21pc2UiLCJzU2VtT2JqRXhwcmVzc2lvbiIsImFTZW1hbnRpY09iamVjdHNSZXNvbHZlZCIsImVsZW1lbnQiLCIkUGF0aCIsImdldExpbmtzV2l0aENhY2hlIiwidXBkYXRlU2VtYW50aWNUYXJnZXRzIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zIiwib0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24iLCJzUmVzdHJpY3Rpb24iLCJSRVFVSVJFRF9QUk9QRVJUSUVTIiwiTk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFUyIsImFQcm9wcyIsIm1hcCIsIm9Qcm9wZXJ0eSIsIkFMTE9XRURfRVhQUkVTU0lPTlMiLCJtQWxsb3dlZEV4cHJlc3Npb25zIiwiRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyIsIlByb3BlcnR5IiwiQWxsb3dlZEV4cHJlc3Npb25zIiwiYVBhdGhQYXJ0cyIsInNQYXJlbnRFbnRpdHlTZXRQYXRoIiwib05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMiLCJ0ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudCIsInNGcmFnbWVudE5hbWUiLCJvUHJlcHJvY2Vzc29yU2V0dGluZ3MiLCJvT3B0aW9ucyIsIm9Nb2RpZmllciIsInZpZXciLCJvRnJhZ21lbnQiLCJ0YXJnZXRzIiwibG9hZE1hY3JvTGlicmFyeSIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJYTUxUZW1wbGF0ZVByb2Nlc3NvciIsImxvYWRUZW1wbGF0ZSIsIm5hbWUiLCJmaXJzdEVsZW1lbnRDaGlsZCIsImlzWE1MIiwiRnJhZ21lbnQiLCJsb2FkIiwiaWQiLCJkZWZpbml0aW9uIiwiY29udHJvbGxlciIsImdldFNpbmdsZXRvblBhdGgiLCJtZXRhTW9kZWwiLCJwYXJ0cyIsIkJvb2xlYW4iLCJwcm9wZXJ0eU5hbWUiLCJwb3AiLCJuYXZpZ2F0aW9uUGF0aCIsInNpbmdsZXRvbk5hbWUiLCJtb2RlbCIsInJlc29sdmVkUGF0aCIsInByb3BlcnR5QmluZGluZyIsImJpbmRQcm9wZXJ0eSIsInJlcXVlc3RWYWx1ZSIsImFkZEV2ZW50VG9CaW5kaW5nSW5mbyIsInNFdmVudE5hbWUiLCJmSGFuZGxlciIsIm9CaW5kaW5nSW5mbyIsInNldEJpbmRpbmdJbmZvIiwiZXZlbnRzIiwiZk9yaWdpbmFsSGFuZGxlciIsImFyZ3MiLCJhcHBseSIsImlubmVyQ2hhcnRCb3VuZCIsImdldENvbnRyb2xEZWxlZ2F0ZSIsIl9nZXRDaGFydCIsImdldEJpbmRpbmdJbmZvIiwic0Vycm9yIiwic2FwIiwidWkiLCJyZXF1aXJlIiwiZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkIiwic0dyb3VwSWQiLCJhY3Rpb25OYW1lIiwiYU1lc3NhZ2VzIiwibG9jYWxJMThuUmVmIiwic0NhbmNlbEJ1dHRvblR4dCIsIm1lc3NhZ2UiLCJkaWFsb2dQcm9taXNlIiwiTWVzc2FnZUJveCIsInRpdGxlIiwiYWN0aW9ucyIsImVtcGhhc2l6ZWRBY3Rpb24iLCJvbkNsb3NlIiwic3VibWl0QmF0Y2giLCJvTWVzc2FnZURpYWxvZ01vZGVsIiwiSlNPTk1vZGVsIiwic2V0RGF0YSIsImJTdHJpY3RIYW5kbGluZ0Zsb3ciLCJvTWVzc2FnZU9iamVjdCIsIm1lc3NhZ2VIYW5kbGluZyIsInByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyIsIm9EaWFsb2ciLCJEaWFsb2ciLCJyZXNpemFibGUiLCJjb250ZW50Iiwib01lc3NhZ2VWaWV3Iiwic3RhdGUiLCJjdXN0b21IZWFkZXIiLCJCYXIiLCJjb250ZW50TGVmdCIsIm9CYWNrQnV0dG9uIiwiY29udGVudE1pZGRsZSIsIlRpdGxlIiwiY29udGVudEhlaWdodCIsImNvbnRlbnRXaWR0aCIsInZlcnRpY2FsU2Nyb2xsaW5nIiwic2V0QmVnaW5CdXR0b24iLCJCdXR0b24iLCJwcmVzcyIsImNsb3NlIiwidHlwZSIsInNldEVuZEJ1dHRvbiIsIm9wZW4iLCJnZXRNZXNzYWdlQ29sdW1uIiwiaGVhZGVySW5mb1RpdGxlUGF0aCIsImdldFRhYmxlRGVmaW5pdGlvbiIsImhlYWRlckluZm9UaXRsZSIsInNDdXJyZW50RW50aXR5U2V0TmFtZSIsImFGaWx0ZXJlZFRlY2huaWNhbEtleXMiLCJ0ZWNobmljYWxLZXkiLCJzZW1hbnRpY0tleUNvbHVtbnMiLCJzZW1hbnRpY0tleXMiLCJhVmlzaWJsZUNvbHVtbnMiLCJhVGFibGVDb2x1bW5zIiwiZ2V0Q29sdW1ucyIsIm9Db2x1bW4iLCJjb2x1bW5QYXRoU3BsaXQiLCJnZXRJZCIsInN1YnRpdGxlQ29sdW1uIiwiZ2V0TWVzc2FnZVN0cmlwVGV4dCIsImFJZ25vcmVkTGFiZWxzIiwib0ZpbHRlckJhciIsImJJc0NoYXJ0IiwiYklzU2VhcmNoSWdub3JlZCIsInNUYWJUaXRsZSIsImZuR2V0TG9jYWxpemVkVGV4dCIsInNUZXh0Iiwib0NoYXJ0IiwiZ2V0Q29udHJvbGxlciIsImdldENoYXJ0Q29udHJvbCIsImJJc0RyYWZ0U3VwcG9ydGVkIiwib01hY3JvUmVzb3VyY2VCdW5kbGUiLCJzUmVzb3VyY2UiLCJzeXN0ZW0iLCJkZXNrdG9wIiwic0xvY2FsaXplZFRhYmxlVGl0bGUiLCJnZXRQYXJhbWV0ZXJQYXRoIiwiYUFjdGlvbiIsImZpcmVCdXR0b25QcmVzcyIsImhhc1RyYW5zaWVudENvbnRleHQiLCJ1cGRhdGVSZWxhdGVkQXBwc0RldGFpbHMiLCJyZXNvbHZlU3RyaW5ndG9Cb29sZWFuIiwiZ2V0TWFuZGF0b3J5RmlsdGVyRmllbGRzIiwidXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJnZXRJQk5BY3Rpb25zIiwiZ2V0U2VtYW50aWNUYXJnZXRzRnJvbVBhZ2VNb2RlbCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFzQ0EsTUFBTUEsV0FBVyxHQUFHLENBQ25CLGFBRG1CLEVBRW5CLFVBRm1CLEVBR25CLFVBSG1CLEVBSW5CLGNBSm1CLEVBS25CLG9CQUxtQixFQU1uQixhQU5tQixFQU9uQixZQVBtQixFQVFuQixXQVJtQixFQVNuQixVQVRtQixFQVVuQixXQVZtQixFQVduQixXQVhtQixFQVluQixXQVptQixFQWFuQixXQWJtQixFQWNuQixZQWRtQixFQWVuQixZQWZtQixFQWdCbkIsVUFoQm1CLEVBaUJuQixlQWpCbUIsQ0FBcEI7O0FBb0JBLFdBQVNDLG1CQUFULENBQTZCQyxXQUE3QixFQUFrRDtBQUNqRCxRQUFJLENBQUNBLFdBQUwsRUFBa0I7QUFDakIsYUFBT0MsU0FBUDtBQUNBOztBQUVELFdBQU9ELFdBQVcsQ0FDaEJFLE9BREssQ0FDRyxJQURILEVBQ1MsR0FEVCxFQUVMQSxPQUZLLENBRUcsS0FGSCxFQUVVLE1BRlYsRUFFa0I7QUFGbEIsS0FHTEMsS0FISyxDQUdDLEtBSEQsRUFJTEMsTUFKSyxDQUlFLFVBQVVDLFdBQVYsRUFBMkNDLFlBQTNDLEVBQWlFO0FBQ3hFLFVBQUlBLFlBQVksS0FBSyxFQUFyQixFQUF5QjtBQUN4QkQsUUFBQUEsV0FBVyxHQUFHLENBQUNBLFdBQVcsR0FBR0EsV0FBVyxHQUFHLEdBQWpCLEdBQXVCLEVBQW5DLElBQXlDLEdBQXpDLEdBQStDQyxZQUEvQyxHQUE4RCxHQUE1RTtBQUNBOztBQUNELGFBQU9ELFdBQVA7QUFDQSxLQVRLLEVBU0hKLFNBVEcsQ0FBUDtBQVVBOztBQUVELFdBQVNNLG1CQUFULENBQTZCQyxrQkFBN0IsRUFBc0Q7QUFDckQsUUFBSUMsU0FBUyxHQUFHRCxrQkFBa0IsQ0FBQ0UsV0FBbkIsQ0FBK0IsT0FBL0IsQ0FBaEIs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Q0o7QUE4Q25CNVYsSUFBQUEsaUJBQWlCLEVBQUVBLGlCQTlDQTtBQStDbkIzUCxJQUFBQSxrQkFBa0IsRUFBRTtBQUNuQndpQixNQUFBQSxtQkFBbUIsRUFBRSxvQkFERjtBQUVuQkMsTUFBQUEseUJBQXlCLEVBQUUseUJBRlI7QUFHbkJJLE1BQUFBLG1CQUFtQixFQUFFO0FBSEYsS0EvQ0Q7QUFvRG5CeFIsSUFBQUEsc0JBQXNCLEVBQUUsQ0FBQyxhQUFELEVBQWdCLFlBQWhCLEVBQThCLGFBQTlCLEVBQTZDLFlBQTdDLEVBQTJELGtCQUEzRCxFQUErRSw4QkFBL0UsQ0FwREw7QUFxRG5CaFYsSUFBQUEsbUJBQW1CLEVBQUVBLG1CQXJERjtBQXNEbkJtcUIsSUFBQUEsd0JBQXdCLEVBQUVBLHdCQXREUDtBQXVEbkI5QixJQUFBQSxnQkFBZ0IsRUFBRUEsZ0JBdkRDO0FBd0RuQnlGLElBQUFBLG1CQUFtQixFQUFFQSxtQkF4REY7QUF5RG5CaEIsSUFBQUEsZ0JBQWdCLEVBQUVBLGdCQXpEQztBQTBEbkJpQyxJQUFBQSxnQkFBZ0IsRUFBRUEsZ0JBMURDO0FBMkRuQjNYLElBQUFBLDJCQUEyQixFQUFFQTtBQTNEVixHQUFwQjtTQThEZTNSLFciLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2VPYmplY3RzIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB7IElzc3VlQ2F0ZWdvcnksIElzc3VlQ2F0ZWdvcnlUeXBlLCBJc3N1ZVNldmVyaXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7XG5cdEJpbmRpbmdFeHByZXNzaW9uLFxuXHRiaW5kaW5nRXhwcmVzc2lvbixcblx0Y29tcGlsZUJpbmRpbmcsXG5cdGNvbnN0YW50LFxuXHRub3QsXG5cdG9yLFxuXHR0cmFuc2Zvcm1SZWN1cnNpdmVseVxufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nRXhwcmVzc2lvblwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgU2VtYW50aWNEYXRlT3BlcmF0b3JzIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1NlbWFudGljRGF0ZU9wZXJhdG9yc1wiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IEJhciBmcm9tIFwic2FwL20vQmFyXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBUaXRsZSBmcm9tIFwic2FwL20vVGl0bGVcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgRnJhZ21lbnQgZnJvbSBcInNhcC91aS9jb3JlL0ZyYWdtZW50XCI7XG5pbXBvcnQgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBYTUxQcmVwcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvWE1MUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgWE1MVGVtcGxhdGVQcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL1hNTFRlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgeyBzeXN0ZW0gfSBmcm9tIFwic2FwL3VpL0RldmljZVwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yVXRpbCBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vRmlsdGVyT3BlcmF0b3JVdGlsXCI7XG5pbXBvcnQgVHlwZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvb2RhdGEvdjQvVHlwZVV0aWxcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgeyBDb3JlRXggfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCIuL2NvbnRyb2xsZXJleHRlbnNpb25zL21lc3NhZ2VIYW5kbGVyL21lc3NhZ2VIYW5kbGluZ1wiO1xuaW1wb3J0IHsgZ2V0Q29uZGl0aW9ucyB9IGZyb20gXCIuL3RlbXBsYXRpbmcvRmlsdGVySGVscGVyXCI7XG5cbmNvbnN0IGFWYWxpZFR5cGVzID0gW1xuXHRcIkVkbS5Cb29sZWFuXCIsXG5cdFwiRWRtLkJ5dGVcIixcblx0XCJFZG0uRGF0ZVwiLFxuXHRcIkVkbS5EYXRlVGltZVwiLFxuXHRcIkVkbS5EYXRlVGltZU9mZnNldFwiLFxuXHRcIkVkbS5EZWNpbWFsXCIsXG5cdFwiRWRtLkRvdWJsZVwiLFxuXHRcIkVkbS5GbG9hdFwiLFxuXHRcIkVkbS5HdWlkXCIsXG5cdFwiRWRtLkludDE2XCIsXG5cdFwiRWRtLkludDMyXCIsXG5cdFwiRWRtLkludDY0XCIsXG5cdFwiRWRtLlNCeXRlXCIsXG5cdFwiRWRtLlNpbmdsZVwiLFxuXHRcIkVkbS5TdHJpbmdcIixcblx0XCJFZG0uVGltZVwiLFxuXHRcIkVkbS5UaW1lT2ZEYXlcIlxuXTtcblxuZnVuY3Rpb24gbm9ybWFsaXplU2VhcmNoVGVybShzU2VhcmNoVGVybTogc3RyaW5nKSB7XG5cdGlmICghc1NlYXJjaFRlcm0pIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0cmV0dXJuIHNTZWFyY2hUZXJtXG5cdFx0LnJlcGxhY2UoL1wiL2csIFwiIFwiKVxuXHRcdC5yZXBsYWNlKC9cXFxcL2csIFwiXFxcXFxcXFxcIikgLy9lc2NhcGUgYmFja3NsYXNoIGNoYXJhY3RlcnMuIENhbiBiZSByZW1vdmVkIGlmIG9kYXRhL2JpbmRpbmcgaGFuZGxlcyBiYWNrZW5kIGVycm9ycyByZXNwb25kcy5cblx0XHQuc3BsaXQoL1xccysvKVxuXHRcdC5yZWR1Y2UoZnVuY3Rpb24gKHNOb3JtYWxpemVkOiBzdHJpbmcgfCB1bmRlZmluZWQsIHNDdXJyZW50V29yZDogc3RyaW5nKSB7XG5cdFx0XHRpZiAoc0N1cnJlbnRXb3JkICE9PSBcIlwiKSB7XG5cdFx0XHRcdHNOb3JtYWxpemVkID0gKHNOb3JtYWxpemVkID8gc05vcm1hbGl6ZWQgKyBcIiBcIiA6IFwiXCIpICsgJ1wiJyArIHNDdXJyZW50V29yZCArICdcIic7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc05vcm1hbGl6ZWQ7XG5cdFx0fSwgdW5kZWZpbmVkKTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcGVydHlEYXRhVHlwZShvTmF2aWdhdGlvbkNvbnRleHQ6IGFueSkge1xuXHRsZXQgc0RhdGFUeXBlID0gb05hdmlnYXRpb25Db250ZXh0LmdldFByb3BlcnR5KFwiJFR5cGVcIik7XG5cdC8vIGlmICRraW5kIGV4aXN0cywgaXQncyBub3QgYSBEYXRhRmllbGQgYW5kIHdlIGhhdmUgdGhlIGZpbmFsIHR5cGUgYWxyZWFkeVxuXHRpZiAoIW9OYXZpZ2F0aW9uQ29udGV4dC5nZXRQcm9wZXJ0eShcIiRraW5kXCIpKSB7XG5cdFx0c3dpdGNoIChzRGF0YVR5cGUpIHtcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjpcblx0XHRcdFx0c0RhdGFUeXBlID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhVcmxcIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aEFjdGlvblwiOlxuXHRcdFx0XHRzRGF0YVR5cGUgPSBvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJWYWx1ZS8kUGF0aC8kVHlwZVwiKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBbm5vdGF0aW9uXCI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRjb25zdCBzQW5ub3RhdGlvblBhdGggPSBvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoXCIpO1xuXHRcdFx0XHRpZiAoc0Fubm90YXRpb25QYXRoKSB7XG5cdFx0XHRcdFx0aWYgKHNBbm5vdGF0aW9uUGF0aC5pbmRleE9mKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5Db250YWN0XCIpID4gLTEpIHtcblx0XHRcdFx0XHRcdHNEYXRhVHlwZSA9IG9OYXZpZ2F0aW9uQ29udGV4dC5nZXRQcm9wZXJ0eShcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvZm4vJFBhdGgvJFR5cGVcIik7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChzQW5ub3RhdGlvblBhdGguaW5kZXhPZihcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludFwiKSA+IC0xKSB7XG5cdFx0XHRcdFx0XHRzRGF0YVR5cGUgPSBvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJWYWx1ZS8kUGF0aC8kVHlwZVwiKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gZS5nLiBGaWVsZEdyb3VwIG9yIENoYXJ0XG5cdFx0XHRcdFx0XHRzRGF0YVR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNEYXRhVHlwZSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gc0RhdGFUeXBlO1xufVxuZnVuY3Rpb24gZm5IYXNUcmFuc2llbnRDb250ZXh0cyhvTGlzdEJpbmRpbmc6IGFueSkge1xuXHRsZXQgYkhhc1RyYW5zaWVudENvbnRleHRzID0gZmFsc2U7XG5cdGlmIChvTGlzdEJpbmRpbmcpIHtcblx0XHRvTGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCkuZm9yRWFjaChmdW5jdGlvbiAob0NvbnRleHQ6IGFueSkge1xuXHRcdFx0aWYgKG9Db250ZXh0ICYmIG9Db250ZXh0LmlzVHJhbnNpZW50KCkpIHtcblx0XHRcdFx0Ykhhc1RyYW5zaWVudENvbnRleHRzID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYkhhc1RyYW5zaWVudENvbnRleHRzO1xufVxuZnVuY3Rpb24gZ2V0U2VhcmNoUmVzdHJpY3Rpb25zKHNGdWxsUGF0aDogYW55LCBvTWV0YU1vZGVsOiBhbnkpIHtcblx0bGV0IGkgPSAwO1xuXHRjb25zdCBhTmF2aWdhdGlvblBhcnRzID0gc0Z1bGxQYXRoLnNwbGl0KFwiLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nL1wiKTtcblx0Zm9yIChsZXQgc1BhdGggPSBhTmF2aWdhdGlvblBhcnRzWzBdOyBpIDwgYU5hdmlnYXRpb25QYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRjb25zdCBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyA9IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMob01ldGFNb2RlbCwgc1BhdGgsIGFOYXZpZ2F0aW9uUGFydHNbaSArIDFdKTtcblx0XHRpZiAob05hdmlnYXRpb25SZXN0cmljdGlvbnMgJiYgb05hdmlnYXRpb25SZXN0cmljdGlvbnNbXCJTZWFyY2hSZXN0cmljdGlvbnNcIl0pIHtcblx0XHRcdHJldHVybiBvTmF2aWdhdGlvblJlc3RyaWN0aW9uc1tcIlNlYXJjaFJlc3RyaWN0aW9uc1wiXTtcblx0XHR9XG5cdFx0c1BhdGggPSBzUGF0aCArIFwiLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nL1wiICsgYU5hdmlnYXRpb25QYXJ0c1tpXTtcblx0fVxuXHRyZXR1cm4gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0Z1bGxQYXRoICsgXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TZWFyY2hSZXN0cmljdGlvbnNcIik7XG59XG5mdW5jdGlvbiBnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zKG9Nb2RlbDogYW55LCBzRW50aXR5U2V0UGF0aDogYW55LCBzTmF2aWdhdGlvblBhdGg6IGFueSkge1xuXHRjb25zdCBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyA9IG9Nb2RlbC5nZXRPYmplY3Qoc0VudGl0eVNldFBhdGggKyBcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk5hdmlnYXRpb25SZXN0cmljdGlvbnNcIik7XG5cdGNvbnN0IGFSZXN0cmljdGVkUHJvcGVydGllcyA9IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zICYmIG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zLlJlc3RyaWN0ZWRQcm9wZXJ0aWVzO1xuXHRyZXR1cm4gKFxuXHRcdGFSZXN0cmljdGVkUHJvcGVydGllcyAmJlxuXHRcdGFSZXN0cmljdGVkUHJvcGVydGllcy5maW5kKGZ1bmN0aW9uIChvUmVzdHJpY3RlZFByb3BlcnR5OiBhbnkpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdG9SZXN0cmljdGVkUHJvcGVydHkgJiZcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eS5OYXZpZ2F0aW9uUHJvcGVydHkgJiZcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eS5OYXZpZ2F0aW9uUHJvcGVydHkuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPT09IHNOYXZpZ2F0aW9uUGF0aFxuXHRcdFx0KTtcblx0XHR9KVxuXHQpO1xufVxuZnVuY3Rpb24gX2lzSW5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyhvTW9kZWw6IGFueSwgc0VudGl0eVNldFBhdGg6IGFueSwgc0NvbnRleHRQYXRoOiBhbnkpIHtcblx0bGV0IGJJc05vdEZpbHRlcmFibGUgPSBmYWxzZTtcblx0Y29uc3Qgb0Fubm90YXRpb24gPSBvTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlTZXRQYXRoICsgXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnNcIik7XG5cdGlmIChvQW5ub3RhdGlvbiAmJiBvQW5ub3RhdGlvbi5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcykge1xuXHRcdGJJc05vdEZpbHRlcmFibGUgPSBvQW5ub3RhdGlvbi5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcy5zb21lKGZ1bmN0aW9uIChwcm9wZXJ0eTogYW55KSB7XG5cdFx0XHRyZXR1cm4gcHJvcGVydHkuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPT09IHNDb250ZXh0UGF0aCB8fCBwcm9wZXJ0eS4kUHJvcGVydHlQYXRoID09PSBzQ29udGV4dFBhdGg7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGJJc05vdEZpbHRlcmFibGU7XG59XG4vLyBUT0RPIHJld29yayB0aGlzIVxuZnVuY3Rpb24gX2lzQ29udGV4dFBhdGhGaWx0ZXJhYmxlKG9Nb2RlbDogYW55LCBzRW50aXR5U2V0UGF0aDogYW55LCBzQ29udGV4UGF0aDogYW55KSB7XG5cdGNvbnN0IHNGdWxsUGF0aCA9IHNFbnRpdHlTZXRQYXRoICsgXCIvXCIgKyBzQ29udGV4UGF0aCxcblx0XHRhRVNQYXJ0cyA9IHNGdWxsUGF0aC5zcGxpdChcIi9cIikuc3BsaWNlKDAsIDIpLFxuXHRcdGFDb250ZXh0ID0gc0Z1bGxQYXRoLnNwbGl0KFwiL1wiKS5zcGxpY2UoMik7XG5cdGxldCBiSXNOb3RGaWx0ZXJhYmxlID0gZmFsc2UsXG5cdFx0c0NvbnRleHQgPSBcIlwiO1xuXG5cdHNFbnRpdHlTZXRQYXRoID0gYUVTUGFydHMuam9pbihcIi9cIik7XG5cblx0YklzTm90RmlsdGVyYWJsZSA9IGFDb250ZXh0LnNvbWUoZnVuY3Rpb24gKGl0ZW06IHN0cmluZywgaW5kZXg6IG51bWJlciwgYXJyYXk6IHN0cmluZ1tdKSB7XG5cdFx0aWYgKHNDb250ZXh0Lmxlbmd0aCA+IDApIHtcblx0XHRcdHNDb250ZXh0ICs9IFwiL1wiICsgaXRlbTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c0NvbnRleHQgPSBpdGVtO1xuXHRcdH1cblx0XHRpZiAoaW5kZXggPT09IGFycmF5Lmxlbmd0aCAtIDIpIHtcblx0XHRcdC8vIEluIGNhc2Ugb2YgXCIvQ3VzdG9tZXIvU2V0L1Byb3BlcnR5XCIgdGhpcyBpcyB0byBjaGVjayBuYXZpZ2F0aW9uIHJlc3RyaWN0aW9ucyBvZiBcIkN1c3RvbWVyXCIgZm9yIG5vbi1maWx0ZXJhYmxlIHByb3BlcnRpZXMgaW4gXCJTZXRcIlxuXHRcdFx0Y29uc3Qgb05hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zKG9Nb2RlbCwgc0VudGl0eVNldFBhdGgsIGl0ZW0pO1xuXHRcdFx0Y29uc3Qgb0ZpbHRlclJlc3RyaWN0aW9ucyA9IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zICYmIG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zLkZpbHRlclJlc3RyaWN0aW9ucztcblx0XHRcdGNvbnN0IGFOb25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IG9GaWx0ZXJSZXN0cmljdGlvbnMgJiYgb0ZpbHRlclJlc3RyaWN0aW9ucy5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcztcblx0XHRcdGNvbnN0IHNUYXJnZXRQcm9wZXJ0eVBhdGggPSBhcnJheVthcnJheS5sZW5ndGggLSAxXTtcblx0XHRcdGlmIChcblx0XHRcdFx0YU5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzICYmXG5cdFx0XHRcdGFOb25GaWx0ZXJhYmxlUHJvcGVydGllcy5maW5kKGZ1bmN0aW9uIChvUHJvcGVydHlQYXRoOiBhbnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gb1Byb3BlcnR5UGF0aC4kUHJvcGVydHlQYXRoID09PSBzVGFyZ2V0UHJvcGVydHlQYXRoO1xuXHRcdFx0XHR9KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoaW5kZXggPT09IGFycmF5Lmxlbmd0aCAtIDEpIHtcblx0XHRcdC8vbGFzdCBwYXRoIHNlZ21lbnRcblx0XHRcdGJJc05vdEZpbHRlcmFibGUgPSBfaXNJbk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzKG9Nb2RlbCwgc0VudGl0eVNldFBhdGgsIHNDb250ZXh0KTtcblx0XHR9IGVsc2UgaWYgKG9Nb2RlbC5nZXRPYmplY3Qoc0VudGl0eVNldFBhdGggKyBcIi8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy9cIiArIGl0ZW0pKSB7XG5cdFx0XHQvL2NoZWNrIGV4aXN0aW5nIGNvbnRleHQgcGF0aCBhbmQgaW5pdGlhbGl6ZSBpdFxuXHRcdFx0YklzTm90RmlsdGVyYWJsZSA9IF9pc0luTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMob01vZGVsLCBzRW50aXR5U2V0UGF0aCwgc0NvbnRleHQpO1xuXHRcdFx0c0NvbnRleHQgPSBcIlwiO1xuXHRcdFx0Ly9zZXQgdGhlIG5ldyBFbnRpdHlTZXRcblx0XHRcdHNFbnRpdHlTZXRQYXRoID0gXCIvXCIgKyBvTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlTZXRQYXRoICsgXCIvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvXCIgKyBpdGVtKTtcblx0XHR9XG5cdFx0cmV0dXJuIGJJc05vdEZpbHRlcmFibGUgPT09IHRydWU7XG5cdH0pO1xuXHRyZXR1cm4gYklzTm90RmlsdGVyYWJsZTtcbn1cbi8vIFRPRE8gY2hlY2sgdXNlZCBwbGFjZXMgYW5kIHJld29yayB0aGlzXG5mdW5jdGlvbiBpc1Byb3BlcnR5RmlsdGVyYWJsZShcblx0b01vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0c0VudGl0eVNldFBhdGg6IHN0cmluZyxcblx0c1Byb3BlcnR5OiBzdHJpbmcsXG5cdGJTa2lwSGlkZGVuRmlsdGVyPzogYm9vbGVhblxuKTogYm9vbGVhbiB8IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRpZiAodHlwZW9mIHNQcm9wZXJ0eSAhPT0gXCJzdHJpbmdcIikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInNQcm9wZXJ0eSBwYXJhbWV0ZXIgbXVzdCBiZSBhIHN0cmluZ1wiKTtcblx0fVxuXHRsZXQgYklzRmlsdGVyYWJsZTtcblxuXHQvLyBQYXJhbWV0ZXJzIHNob3VsZCBiZSByZW5kZXJlZCBhcyBmaWx0ZXJmaWVsZHNcblx0aWYgKG9Nb2RlbC5nZXRPYmplY3Qoc0VudGl0eVNldFBhdGggKyBcIi9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlc3VsdENvbnRleHRcIikgPT09IHRydWUpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGNvbnN0IG9OYXZpZ2F0aW9uQ29udGV4dCA9IG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRW50aXR5U2V0UGF0aCArIFwiL1wiICsgc1Byb3BlcnR5KSBhcyBDb250ZXh0O1xuXG5cdGlmICghYlNraXBIaWRkZW5GaWx0ZXIpIHtcblx0XHRpZiAoXG5cdFx0XHRvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCIpID09PSB0cnVlIHx8XG5cdFx0XHRvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuRmlsdGVyXCIpID09PSB0cnVlXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IHNIaWRkZW5QYXRoID0gb05hdmlnYXRpb25Db250ZXh0LmdldFByb3BlcnR5KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlbi8kUGF0aFwiKTtcblx0XHRjb25zdCBzSGlkZGVuRmlsdGVyUGF0aCA9IG9OYXZpZ2F0aW9uQ29udGV4dC5nZXRQcm9wZXJ0eShcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5GaWx0ZXIvJFBhdGhcIik7XG5cblx0XHRpZiAoc0hpZGRlblBhdGggJiYgc0hpZGRlbkZpbHRlclBhdGgpIHtcblx0XHRcdHJldHVybiBjb21waWxlQmluZGluZyhub3Qob3IoYmluZGluZ0V4cHJlc3Npb24oc0hpZGRlblBhdGgpLCBiaW5kaW5nRXhwcmVzc2lvbihzSGlkZGVuRmlsdGVyUGF0aCkpKSk7XG5cdFx0fSBlbHNlIGlmIChzSGlkZGVuUGF0aCkge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKG5vdChiaW5kaW5nRXhwcmVzc2lvbihzSGlkZGVuUGF0aCkpKTtcblx0XHR9IGVsc2UgaWYgKHNIaWRkZW5GaWx0ZXJQYXRoKSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcobm90KGJpbmRpbmdFeHByZXNzaW9uKHNIaWRkZW5GaWx0ZXJQYXRoKSkpO1xuXHRcdH1cblx0fVxuXG5cdGlmIChzRW50aXR5U2V0UGF0aC5zcGxpdChcIi9cIikubGVuZ3RoID09PSAyICYmIHNQcm9wZXJ0eS5pbmRleE9mKFwiL1wiKSA8IDApIHtcblx0XHQvLyB0aGVyZSBpcyBubyBuYXZpZ2F0aW9uIGluIGVudGl0eVNldCBwYXRoIGFuZCBwcm9wZXJ0eSBwYXRoXG5cdFx0YklzRmlsdGVyYWJsZSA9ICFfaXNJbk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzKG9Nb2RlbCwgc0VudGl0eVNldFBhdGgsIHNQcm9wZXJ0eSk7XG5cdH0gZWxzZSB7XG5cdFx0YklzRmlsdGVyYWJsZSA9ICFfaXNDb250ZXh0UGF0aEZpbHRlcmFibGUob01vZGVsLCBzRW50aXR5U2V0UGF0aCwgc1Byb3BlcnR5KTtcblx0fVxuXHQvLyBjaGVjayBpZiB0eXBlIGNhbiBiZSB1c2VkIGZvciBmaWx0ZXJpbmdcblx0aWYgKGJJc0ZpbHRlcmFibGUgJiYgb05hdmlnYXRpb25Db250ZXh0KSB7XG5cdFx0Y29uc3Qgc1Byb3BlcnR5RGF0YVR5cGUgPSBnZXRQcm9wZXJ0eURhdGFUeXBlKG9OYXZpZ2F0aW9uQ29udGV4dCk7XG5cdFx0aWYgKHNQcm9wZXJ0eURhdGFUeXBlKSB7XG5cdFx0XHRiSXNGaWx0ZXJhYmxlID0gYVZhbGlkVHlwZXMuaW5kZXhPZihzUHJvcGVydHlEYXRhVHlwZSkgIT09IC0xO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRiSXNGaWx0ZXJhYmxlID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGJJc0ZpbHRlcmFibGU7XG59XG5mdW5jdGlvbiBnZXRTaGVsbFNlcnZpY2VzKG9Db250cm9sOiBhbnkpIHtcblx0cmV0dXJuIGdldEFwcENvbXBvbmVudChvQ29udHJvbCkuZ2V0U2hlbGxTZXJ2aWNlcygpO1xufVxuZnVuY3Rpb24gZ2V0SGFzaCgpIHtcblx0Y29uc3Qgc0hhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaDtcblx0cmV0dXJuIHNIYXNoLnNwbGl0KFwiJlwiKVswXTtcbn1cbmZ1bmN0aW9uIF9nZXRTT0ludGVudHMob09iamVjdFBhZ2VMYXlvdXQ6IGFueSwgb1NlbWFudGljT2JqZWN0OiBhbnksIG9QYXJhbTogYW55KSB7XG5cdGNvbnN0IG9TaGVsbFNlcnZpY2VIZWxwZXIgPSBDb21tb25VdGlscy5nZXRTaGVsbFNlcnZpY2VzKG9PYmplY3RQYWdlTGF5b3V0KTtcblx0cmV0dXJuIG9TaGVsbFNlcnZpY2VIZWxwZXIuZ2V0TGlua3Moe1xuXHRcdHNlbWFudGljT2JqZWN0OiBvU2VtYW50aWNPYmplY3QsXG5cdFx0cGFyYW1zOiBvUGFyYW1cblx0fSk7XG59XG4vLyBUTy1ETyBhZGQgdGhpcyBhcyBwYXJ0IG9mIGFwcGx5U2VtYW50aWNPYmplY3RtYXBwaW5ncyBsb2dpYyBpbiBJbnRlbnRCYXNlZG5hdmlnYXRpb24gY29udHJvbGxlciBleHRlbnNpb25cbmZ1bmN0aW9uIF9jcmVhdGVNYXBwaW5ncyhvTWFwcGluZzogYW55KSB7XG5cdGNvbnN0IGFTT01hcHBpbmdzID0gW107XG5cdGNvbnN0IGFNYXBwaW5nS2V5cyA9IE9iamVjdC5rZXlzKG9NYXBwaW5nKTtcblx0bGV0IG9TZW1hbnRpY01hcHBpbmc7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYU1hcHBpbmdLZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0b1NlbWFudGljTWFwcGluZyA9IHtcblx0XHRcdFwiTG9jYWxQcm9wZXJ0eVwiOiB7XG5cdFx0XHRcdFwiJFByb3BlcnR5UGF0aFwiOiBhTWFwcGluZ0tleXNbaV1cblx0XHRcdH0sXG5cdFx0XHRcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIjogb01hcHBpbmdbYU1hcHBpbmdLZXlzW2ldXVxuXHRcdH07XG5cdFx0YVNPTWFwcGluZ3MucHVzaChvU2VtYW50aWNNYXBwaW5nKTtcblx0fVxuXG5cdHJldHVybiBhU09NYXBwaW5ncztcbn1cbi8qKlxuICogQHBhcmFtIGFMaW5rc1xuICogQHBhcmFtIGFFeGNsdWRlZEFjdGlvbnNcbiAqIEBwYXJhbSBvVGFyZ2V0UGFyYW1zXG4gKiBAcGFyYW0gYUl0ZW1zXG4gKi9cbmZ1bmN0aW9uIF9nZXRSZWxhdGVkQXBwc01lbnVJdGVtcyhhTGlua3M6IGFueSwgYUV4Y2x1ZGVkQWN0aW9uczogYW55LCBvVGFyZ2V0UGFyYW1zOiBhbnksIGFJdGVtczogYW55KSB7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYUxpbmtzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3Qgb0xpbmsgPSBhTGlua3NbaV07XG5cdFx0Y29uc3Qgc0ludGVudCA9IG9MaW5rLmludGVudDtcblx0XHRjb25zdCBzQWN0aW9uID0gc0ludGVudC5zcGxpdChcIi1cIilbMV0uc3BsaXQoXCI/XCIpWzBdO1xuXHRcdGlmIChhRXhjbHVkZWRBY3Rpb25zICYmIGFFeGNsdWRlZEFjdGlvbnMuaW5kZXhPZihzQWN0aW9uKSA9PT0gLTEpIHtcblx0XHRcdGFJdGVtcy5wdXNoKHtcblx0XHRcdFx0dGV4dDogb0xpbmsudGV4dCxcblx0XHRcdFx0dGFyZ2V0U2VtT2JqZWN0OiBzSW50ZW50LnNwbGl0KFwiI1wiKVsxXS5zcGxpdChcIi1cIilbMF0sXG5cdFx0XHRcdHRhcmdldEFjdGlvbjogc0FjdGlvbi5zcGxpdChcIn5cIilbMF0sXG5cdFx0XHRcdHRhcmdldFBhcmFtczogb1RhcmdldFBhcmFtc1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59XG4vKipcbiAqIEBwYXJhbSBvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0c1xuICogQHBhcmFtIG9CaW5kaW5nQ29udGV4dFxuICogQHBhcmFtIGFNYW5pZmVzdFNPSXRlbXNcbiAqIEBwYXJhbSBhTGlua3NcbiAqL1xuZnVuY3Rpb24gX2dldFJlbGF0ZWRJbnRlbnRzKG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzOiBhbnksIG9CaW5kaW5nQ29udGV4dDogYW55LCBhTWFuaWZlc3RTT0l0ZW1zOiBhbnksIGFMaW5rczogYW55KSB7XG5cdGlmIChhTGlua3MgJiYgYUxpbmtzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBhRXhjbHVkZWRBY3Rpb25zID0gb0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMudW5hdmFpbGFibGVBY3Rpb25zID8gb0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMudW5hdmFpbGFibGVBY3Rpb25zIDogW107XG5cdFx0Y29uc3QgYVNPTWFwcGluZ3MgPSBvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cy5tYXBwaW5nID8gX2NyZWF0ZU1hcHBpbmdzKG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzLm1hcHBpbmcpIDogW107XG5cdFx0Y29uc3Qgb1RhcmdldFBhcmFtcyA9IHsgbmF2aWdhdGlvbkNvbnRleHRzOiBvQmluZGluZ0NvbnRleHQsIHNlbWFudGljT2JqZWN0TWFwcGluZzogYVNPTWFwcGluZ3MgfTtcblx0XHRfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMoYUxpbmtzLCBhRXhjbHVkZWRBY3Rpb25zLCBvVGFyZ2V0UGFyYW1zLCBhTWFuaWZlc3RTT0l0ZW1zKTtcblx0fVxufVxuZnVuY3Rpb24gdXBkYXRlUmVsYXRlQXBwc01vZGVsKFxuXHR0aGlzOiBhbnksXG5cdG9CaW5kaW5nQ29udGV4dDogYW55LFxuXHRvRW50cnk6IGFueSxcblx0b09iamVjdFBhZ2VMYXlvdXQ6IGFueSxcblx0YVNlbUtleXM6IGFueSxcblx0b01ldGFNb2RlbDogYW55LFxuXHRvTWV0YVBhdGg6IGFueVxuKSB7XG5cdGNvbnN0IG9TaGVsbFNlcnZpY2VIZWxwZXIgPSBnZXRTaGVsbFNlcnZpY2VzKG9PYmplY3RQYWdlTGF5b3V0KTtcblx0Y29uc3Qgb1BhcmFtOiBhbnkgPSB7fTtcblx0bGV0IHNDdXJyZW50U2VtT2JqID0gXCJcIixcblx0XHRzQ3VycmVudEFjdGlvbiA9IFwiXCI7XG5cdGxldCBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucztcblx0bGV0IGFSZWxhdGVkQXBwc01lbnVJdGVtczogYW55W10gPSBbXTtcblx0bGV0IGFFeGNsdWRlZEFjdGlvbnM6IGFueVtdID0gW107XG5cblx0aWYgKG9FbnRyeSkge1xuXHRcdGlmIChhU2VtS2V5cyAmJiBhU2VtS2V5cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGFTZW1LZXlzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGNvbnN0IHNTZW1LZXkgPSBhU2VtS2V5c1tqXS4kUHJvcGVydHlQYXRoO1xuXHRcdFx0XHRpZiAoIW9QYXJhbVtzU2VtS2V5XSkge1xuXHRcdFx0XHRcdG9QYXJhbVtzU2VtS2V5XSA9IHsgdmFsdWU6IG9FbnRyeVtzU2VtS2V5XSB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGZhbGxiYWNrIHRvIFRlY2huaWNhbCBLZXlzIGlmIG5vIFNlbWFudGljIEtleSBpcyBwcmVzZW50XG5cdFx0XHRjb25zdCBhVGVjaG5pY2FsS2V5cyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KG9NZXRhUGF0aCArIFwiLyRUeXBlLyRLZXlcIik7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBhVGVjaG5pY2FsS2V5cykge1xuXHRcdFx0XHRjb25zdCBzT2JqS2V5ID0gYVRlY2huaWNhbEtleXNba2V5XTtcblx0XHRcdFx0aWYgKCFvUGFyYW1bc09iaktleV0pIHtcblx0XHRcdFx0XHRvUGFyYW1bc09iaktleV0gPSB7IHZhbHVlOiBvRW50cnlbc09iaktleV0gfTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHQvLyBMb2dpYyB0byByZWFkIGFkZGl0aW9uYWwgU08gZnJvbSBtYW5pZmVzdCBhbmQgdXBkYXRlZCByZWxhdGVkYXBwcyBtb2RlbFxuXG5cdGNvbnN0IG9NYW5pZmVzdERhdGEgPSBnZXRUYXJnZXRWaWV3KG9PYmplY3RQYWdlTGF5b3V0KS5nZXRWaWV3RGF0YSgpO1xuXHRjb25zdCBhTWFuaWZlc3RTT0l0ZW1zOiBhbnlbXSA9IFtdO1xuXHRpZiAob01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzKSB7XG5cdFx0Y29uc3QgYU1hbmlmZXN0U09LZXlzID0gT2JqZWN0LmtleXMob01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzKTtcblx0XHRmb3IgKGxldCBrZXkgPSAwOyBrZXkgPCBhTWFuaWZlc3RTT0tleXMubGVuZ3RoOyBrZXkrKykge1xuXHRcdFx0X2dldFNPSW50ZW50cyhvT2JqZWN0UGFnZUxheW91dCwgYU1hbmlmZXN0U09LZXlzW2tleV0sIG9QYXJhbSlcblx0XHRcdFx0LnRoZW4oXG5cdFx0XHRcdFx0X2dldFJlbGF0ZWRJbnRlbnRzLmJpbmQoXG5cdFx0XHRcdFx0XHR0aGlzIGFzIGFueSxcblx0XHRcdFx0XHRcdG9NYW5pZmVzdERhdGEuYWRkaXRpb25hbFNlbWFudGljT2JqZWN0c1thTWFuaWZlc3RTT0tleXNba2V5XV0sXG5cdFx0XHRcdFx0XHRvQmluZGluZ0NvbnRleHQsXG5cdFx0XHRcdFx0XHRhTWFuaWZlc3RTT0l0ZW1zXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXRyaWV2aW5nIFNPIEludGVudHNcIiwgb0Vycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gZm5HZXRQYXJzZVNoZWxsSGFzaEFuZEdldExpbmtzKCkge1xuXHRcdGNvbnN0IG9QYXJzZWRVcmwgPSBvU2hlbGxTZXJ2aWNlSGVscGVyLnBhcnNlU2hlbGxIYXNoKGRvY3VtZW50LmxvY2F0aW9uLmhhc2gpO1xuXHRcdHNDdXJyZW50U2VtT2JqID0gb1BhcnNlZFVybC5zZW1hbnRpY09iamVjdDsgLy8gQ3VycmVudCBTZW1hbnRpYyBPYmplY3Rcblx0XHRzQ3VycmVudEFjdGlvbiA9IG9QYXJzZWRVcmwuYWN0aW9uO1xuXHRcdHJldHVybiBfZ2V0U09JbnRlbnRzKG9PYmplY3RQYWdlTGF5b3V0LCBzQ3VycmVudFNlbU9iaiwgb1BhcmFtKTtcblx0fVxuXG5cdGZuR2V0UGFyc2VTaGVsbEhhc2hBbmRHZXRMaW5rcygpXG5cdFx0LnRoZW4oZnVuY3Rpb24gKGFMaW5rczogYW55KSB7XG5cdFx0XHRpZiAoYUxpbmtzICYmIGFMaW5rcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbnN0IG9UYXJnZXRQYXJhbXM6IGFueSA9IHt9O1xuXHRcdFx0XHRjb25zdCBhQW5ub3RhdGlvbnNTT0l0ZW1zOiBhbnlbXSA9IFtdO1xuXHRcdFx0XHRjb25zdCBzRW50aXR5U2V0UGF0aCA9IG9NZXRhUGF0aCArIFwiQFwiO1xuXHRcdFx0XHRjb25zdCBzRW50aXR5VHlwZVBhdGggPSBvTWV0YVBhdGggKyBcIi9AXCI7XG5cdFx0XHRcdGNvbnN0IG9FbnRpdHlTZXRBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlTZXRQYXRoKTtcblx0XHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMgPSBfZ2V0U2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyhvRW50aXR5U2V0QW5ub3RhdGlvbnMsIHNDdXJyZW50U2VtT2JqKTtcblx0XHRcdFx0aWYgKCFvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5iSGFzRW50aXR5U2V0U08pIHtcblx0XHRcdFx0XHRjb25zdCBvRW50aXR5VHlwZUFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0VudGl0eVR5cGVQYXRoKTtcblx0XHRcdFx0XHRvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyA9IF9nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zKG9FbnRpdHlUeXBlQW5ub3RhdGlvbnMsIHNDdXJyZW50U2VtT2JqKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhRXhjbHVkZWRBY3Rpb25zID0gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYVVuYXZhaWxhYmxlQWN0aW9ucztcblx0XHRcdFx0Ly9Ta2lwIHNhbWUgYXBwbGljYXRpb24gZnJvbSBSZWxhdGVkIEFwcHNcblx0XHRcdFx0YUV4Y2x1ZGVkQWN0aW9ucy5wdXNoKHNDdXJyZW50QWN0aW9uKTtcblx0XHRcdFx0b1RhcmdldFBhcmFtcy5uYXZpZ2F0aW9uQ29udGV4dHMgPSBvQmluZGluZ0NvbnRleHQ7XG5cdFx0XHRcdG9UYXJnZXRQYXJhbXMuc2VtYW50aWNPYmplY3RNYXBwaW5nID0gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYU1hcHBpbmdzO1xuXHRcdFx0XHRfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMoYUxpbmtzLCBhRXhjbHVkZWRBY3Rpb25zLCBvVGFyZ2V0UGFyYW1zLCBhQW5ub3RhdGlvbnNTT0l0ZW1zKTtcblx0XHRcdFx0YVJlbGF0ZWRBcHBzTWVudUl0ZW1zID0gYUFubm90YXRpb25zU09JdGVtcy5jb25jYXQoYU1hbmlmZXN0U09JdGVtcyk7XG5cdFx0XHRcdC8vIElmIG5vIGFwcCBpbiBsaXN0LCByZWxhdGVkIGFwcHMgYnV0dG9uIHdpbGwgYmUgaGlkZGVuXG5cdFx0XHRcdG9PYmplY3RQYWdlTGF5b3V0LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikuc2V0UHJvcGVydHkoXCJyZWxhdGVkQXBwcy92aXNpYmlsaXR5XCIsIGFSZWxhdGVkQXBwc01lbnVJdGVtcy5sZW5ndGggPiAwKTtcblx0XHRcdFx0b09iamVjdFBhZ2VMYXlvdXQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKS5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzL2l0ZW1zXCIsIGFSZWxhdGVkQXBwc01lbnVJdGVtcyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvT2JqZWN0UGFnZUxheW91dC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpLnNldFByb3BlcnR5KFwicmVsYXRlZEFwcHMvdmlzaWJpbGl0eVwiLCBmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSlcblx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgcmVhZCBsaW5rc1wiLCBvRXJyb3IpO1xuXHRcdH0pO1xuXHRyZXR1cm4gYVJlbGF0ZWRBcHBzTWVudUl0ZW1zO1xufVxuZnVuY3Rpb24gX2dldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMob0VudGl0eUFubm90YXRpb25zOiBhbnksIHNDdXJyZW50U2VtT2JqOiBhbnkpIHtcblx0Y29uc3Qgb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMgPSB7XG5cdFx0Ykhhc0VudGl0eVNldFNPOiBmYWxzZSxcblx0XHRhVW5hdmFpbGFibGVBY3Rpb25zOiBbXSxcblx0XHRhTWFwcGluZ3M6IFtdXG5cdH07XG5cdGxldCBzQW5ub3RhdGlvbk1hcHBpbmdUZXJtLCBzQW5ub3RhdGlvbkFjdGlvblRlcm07XG5cdGxldCBzUXVhbGlmaWVyO1xuXHRmb3IgKGNvbnN0IGtleSBpbiBvRW50aXR5QW5ub3RhdGlvbnMpIHtcblx0XHRpZiAoa2V5LmluZGV4T2YoXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNPYmplY3RcIikgPiAtMSAmJiBvRW50aXR5QW5ub3RhdGlvbnNba2V5XSA9PT0gc0N1cnJlbnRTZW1PYmopIHtcblx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmJIYXNFbnRpdHlTZXRTTyA9IHRydWU7XG5cdFx0XHRzQW5ub3RhdGlvbk1hcHBpbmdUZXJtID0gXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljT2JqZWN0TWFwcGluZ1wiO1xuXHRcdFx0c0Fubm90YXRpb25BY3Rpb25UZXJtID0gXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zXCI7XG5cblx0XHRcdGlmIChrZXkuaW5kZXhPZihcIiNcIikgPiAtMSkge1xuXHRcdFx0XHRzUXVhbGlmaWVyID0ga2V5LnNwbGl0KFwiI1wiKVsxXTtcblx0XHRcdFx0c0Fubm90YXRpb25NYXBwaW5nVGVybSA9IHNBbm5vdGF0aW9uTWFwcGluZ1Rlcm0gKyBcIiNcIiArIHNRdWFsaWZpZXI7XG5cdFx0XHRcdHNBbm5vdGF0aW9uQWN0aW9uVGVybSA9IHNBbm5vdGF0aW9uQWN0aW9uVGVybSArIFwiI1wiICsgc1F1YWxpZmllcjtcblx0XHRcdH1cblxuXHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYU1hcHBpbmdzID0gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYU1hcHBpbmdzLmNvbmNhdChvRW50aXR5QW5ub3RhdGlvbnNbc0Fubm90YXRpb25NYXBwaW5nVGVybV0pO1xuXHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYVVuYXZhaWxhYmxlQWN0aW9ucyA9IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFVbmF2YWlsYWJsZUFjdGlvbnMuY29uY2F0KFxuXHRcdFx0XHRvRW50aXR5QW5ub3RhdGlvbnNbc0Fubm90YXRpb25BY3Rpb25UZXJtXVxuXHRcdFx0KTtcblxuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucztcbn1cbmZ1bmN0aW9uIGZuVXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzKG9PYmplY3RQYWdlTGF5b3V0OiBhbnkpIHtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9PYmplY3RQYWdlTGF5b3V0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9PYmplY3RQYWdlTGF5b3V0LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdGNvbnN0IG9QYXRoID0gb0JpbmRpbmdDb250ZXh0ICYmIG9CaW5kaW5nQ29udGV4dC5nZXRQYXRoKCk7XG5cdGNvbnN0IG9NZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgob1BhdGgpO1xuXHQvLyBTZW1hbnRpYyBLZXkgVm9jYWJ1bGFyeVxuXHRjb25zdCBzU2VtYW50aWNLZXlWb2NhYnVsYXJ5ID0gb01ldGFQYXRoICsgXCIvXCIgKyBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNLZXlcIjtcblx0Ly9TZW1hbnRpYyBLZXlzXG5cdGNvbnN0IGFTZW1LZXlzID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc1NlbWFudGljS2V5Vm9jYWJ1bGFyeSk7XG5cdC8vIFVuYXZhaWxhYmxlIEFjdGlvbnNcblx0Y29uc3Qgb0VudHJ5ID0gb0JpbmRpbmdDb250ZXh0LmdldE9iamVjdCgpO1xuXHRpZiAoIW9FbnRyeSkge1xuXHRcdG9CaW5kaW5nQ29udGV4dFxuXHRcdFx0LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9FbnRyeTogYW55KSB7XG5cdFx0XHRcdHJldHVybiB1cGRhdGVSZWxhdGVBcHBzTW9kZWwob0JpbmRpbmdDb250ZXh0LCBvRW50cnksIG9PYmplY3RQYWdlTGF5b3V0LCBhU2VtS2V5cywgb01ldGFNb2RlbCwgb01ldGFQYXRoKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCB1cGRhdGUgdGhlIHJlbGF0ZWQgYXBwIGRldGFpbHNcIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1cGRhdGVSZWxhdGVBcHBzTW9kZWwob0JpbmRpbmdDb250ZXh0LCBvRW50cnksIG9PYmplY3RQYWdlTGF5b3V0LCBhU2VtS2V5cywgb01ldGFNb2RlbCwgb01ldGFQYXRoKTtcblx0fVxufVxuLyoqXG4gKiBAcGFyYW0gb0J1dHRvblxuICovXG5mdW5jdGlvbiBmbkZpcmVCdXR0b25QcmVzcyhvQnV0dG9uOiBhbnkpIHtcblx0Y29uc3QgYUF1dGhvcml6ZWRUeXBlcyA9IFtcInNhcC5tLkJ1dHRvblwiLCBcInNhcC5tLk92ZXJmbG93VG9vbGJhckJ1dHRvblwiXTtcblx0aWYgKG9CdXR0b24gJiYgYUF1dGhvcml6ZWRUeXBlcy5pbmRleE9mKG9CdXR0b24uZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkpICE9PSAtMSAmJiBvQnV0dG9uLmdldFZpc2libGUoKSAmJiBvQnV0dG9uLmdldEVuYWJsZWQoKSkge1xuXHRcdG9CdXR0b24uZmlyZVByZXNzKCk7XG5cdH1cbn1cbmZ1bmN0aW9uIGZuUmVzb2x2ZVN0cmluZ3RvQm9vbGVhbihzVmFsdWU6IGFueSkge1xuXHRpZiAoc1ZhbHVlID09PSBcInRydWVcIiB8fCBzVmFsdWUgPT09IHRydWUpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cbmZ1bmN0aW9uIGdldEFwcENvbXBvbmVudChvQ29udHJvbDogYW55KTogQXBwQ29tcG9uZW50IHtcblx0aWYgKG9Db250cm9sLmlzQShcInNhcC5mZS5jb3JlLkFwcENvbXBvbmVudFwiKSkge1xuXHRcdHJldHVybiBvQ29udHJvbDtcblx0fVxuXHRjb25zdCBvT3duZXIgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3Iob0NvbnRyb2wpO1xuXHRpZiAoIW9Pd25lcikge1xuXHRcdHJldHVybiBvQ29udHJvbDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZ2V0QXBwQ29tcG9uZW50KG9Pd25lcik7XG5cdH1cbn1cbmZ1bmN0aW9uIGdldFRhcmdldFZpZXcob0NvbnRyb2w6IGFueSkge1xuXHRpZiAob0NvbnRyb2wgJiYgb0NvbnRyb2wuaXNBKFwic2FwLnVpLmNvcmUuQ29tcG9uZW50Q29udGFpbmVyXCIpKSB7XG5cdFx0b0NvbnRyb2wgPSBvQ29udHJvbC5nZXRDb21wb25lbnRJbnN0YW5jZSgpO1xuXHRcdG9Db250cm9sID0gb0NvbnRyb2wgJiYgb0NvbnRyb2wuZ2V0Um9vdENvbnRyb2woKTtcblx0fVxuXHR3aGlsZSAob0NvbnRyb2wgJiYgIShvQ29udHJvbCBpbnN0YW5jZW9mIFZpZXcpKSB7XG5cdFx0b0NvbnRyb2wgPSBvQ29udHJvbC5nZXRQYXJlbnQoKTtcblx0fVxuXHRyZXR1cm4gb0NvbnRyb2w7XG59XG5cbmZ1bmN0aW9uIGlzRmllbGRDb250cm9sUGF0aEluYXBwbGljYWJsZShzRmllbGRDb250cm9sUGF0aDogc3RyaW5nLCBvQXR0cmlidXRlOiBhbnkpIHtcblx0bGV0IGJJbmFwcGxpY2FibGUgPSBmYWxzZTtcblx0Y29uc3QgYVBhcnRzID0gc0ZpZWxkQ29udHJvbFBhdGguc3BsaXQoXCIvXCIpO1xuXHQvLyBzZW5zaXRpdmUgZGF0YSBpcyByZW1vdmVkIG9ubHkgaWYgdGhlIHBhdGggaGFzIGFscmVhZHkgYmVlbiByZXNvbHZlZC5cblx0aWYgKGFQYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0YkluYXBwbGljYWJsZSA9IG9BdHRyaWJ1dGVbYVBhcnRzWzBdXSAmJiBvQXR0cmlidXRlW2FQYXJ0c1swXV0uaGFzT3duUHJvcGVydHkoYVBhcnRzWzFdKSAmJiBvQXR0cmlidXRlW2FQYXJ0c1swXV1bYVBhcnRzWzFdXSA9PT0gMDtcblx0fSBlbHNlIHtcblx0XHRiSW5hcHBsaWNhYmxlID0gb0F0dHJpYnV0ZVtzRmllbGRDb250cm9sUGF0aF0gPT09IDA7XG5cdH1cblx0cmV0dXJuIGJJbmFwcGxpY2FibGU7XG59XG5mdW5jdGlvbiByZW1vdmVTZW5zaXRpdmVEYXRhKGFBdHRyaWJ1dGVzOiBhbnlbXSwgb01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpIHtcblx0Y29uc3QgYU91dEF0dHJpYnV0ZXMgPSBbXTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhQXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IHNFbnRpdHlTZXQgPSBhQXR0cmlidXRlc1tpXS5lbnRpdHlTZXQsXG5cdFx0XHRvQXR0cmlidXRlID0gYUF0dHJpYnV0ZXNbaV0uY29udGV4dERhdGE7XG5cblx0XHRkZWxldGUgb0F0dHJpYnV0ZVtcIkBvZGF0YS5jb250ZXh0XCJdO1xuXHRcdGRlbGV0ZSBvQXR0cmlidXRlW1wiJTQwb2RhdGEuY29udGV4dFwiXTtcblx0XHRkZWxldGUgb0F0dHJpYnV0ZVtcIkBvZGF0YS5tZXRhZGF0YUV0YWdcIl07XG5cdFx0ZGVsZXRlIG9BdHRyaWJ1dGVbXCIlNDBvZGF0YS5tZXRhZGF0YUV0YWdcIl07XG5cdFx0ZGVsZXRlIG9BdHRyaWJ1dGVbXCJTQVBfX01lc3NhZ2VzXCJdO1xuXHRcdGNvbnN0IGFQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMob0F0dHJpYnV0ZSk7XG5cdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBhUHJvcGVydGllcy5sZW5ndGg7IGorKykge1xuXHRcdFx0Y29uc3Qgc1Byb3AgPSBhUHJvcGVydGllc1tqXSxcblx0XHRcdFx0YVByb3BlcnR5QW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChcIi9cIiArIHNFbnRpdHlTZXQgKyBcIi9cIiArIHNQcm9wICsgXCJAXCIpO1xuXHRcdFx0aWYgKGFQcm9wZXJ0eUFubm90YXRpb25zKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRhUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5QZXJzb25hbERhdGEudjEuSXNQb3RlbnRpYWxseVNlbnNpdGl2ZVwiXSB8fFxuXHRcdFx0XHRcdGFQcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkV4Y2x1ZGVGcm9tTmF2aWdhdGlvbkNvbnRleHRcIl0gfHxcblx0XHRcdFx0XHRhUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuTWVhc3VyZVwiXVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRkZWxldGUgb0F0dHJpYnV0ZVtzUHJvcF07XG5cdFx0XHRcdH0gZWxzZSBpZiAoYVByb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFwiXSkge1xuXHRcdFx0XHRcdGNvbnN0IG9GaWVsZENvbnRyb2wgPSBhUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sXCJdO1xuXHRcdFx0XHRcdGlmIChvRmllbGRDb250cm9sW1wiJEVudW1NZW1iZXJcIl0gJiYgb0ZpZWxkQ29udHJvbFtcIiRFbnVtTWVtYmVyXCJdLnNwbGl0KFwiL1wiKVsxXSA9PT0gXCJJbmFwcGxpY2FibGVcIikge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIG9BdHRyaWJ1dGVbc1Byb3BdO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAob0ZpZWxkQ29udHJvbFtcIiRQYXRoXCJdICYmIENvbW1vblV0aWxzLmlzRmllbGRDb250cm9sUGF0aEluYXBwbGljYWJsZShvRmllbGRDb250cm9sW1wiJFBhdGhcIl0sIG9BdHRyaWJ1dGUpKSB7XG5cdFx0XHRcdFx0XHRkZWxldGUgb0F0dHJpYnV0ZVtzUHJvcF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGFPdXRBdHRyaWJ1dGVzLnB1c2gob0F0dHJpYnV0ZSk7XG5cdH1cblxuXHRyZXR1cm4gYU91dEF0dHJpYnV0ZXM7XG59XG5mdW5jdGlvbiBfZm5DaGVja0lzTWF0Y2gob09iamVjdDogYW55LCBvS2V5c1RvQ2hlY2s6IGFueSkge1xuXHRmb3IgKGNvbnN0IHNLZXkgaW4gb0tleXNUb0NoZWNrKSB7XG5cdFx0aWYgKG9LZXlzVG9DaGVja1tzS2V5XSAhPT0gb09iamVjdFtzS2V5XSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGZuR2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzQ29udGV4dFBhdGg6IHN0cmluZywgb0ZpbHRlcj86IG9iamVjdCkge1xuXHRjb25zdCBvRW50aXR5VHlwZSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNDb250ZXh0UGF0aCArIFwiL1wiKSB8fCB7fSxcblx0XHRvUHJvcGVydGllczogYW55ID0ge307XG5cblx0Zm9yIChjb25zdCBzS2V5IGluIG9FbnRpdHlUeXBlKSB7XG5cdFx0aWYgKFxuXHRcdFx0b0VudGl0eVR5cGUuaGFzT3duUHJvcGVydHkoc0tleSkgJiZcblx0XHRcdCEvXlxcJC9pLnRlc3Qoc0tleSkgJiZcblx0XHRcdG9FbnRpdHlUeXBlW3NLZXldLiRraW5kICYmXG5cdFx0XHRfZm5DaGVja0lzTWF0Y2gob0VudGl0eVR5cGVbc0tleV0sIG9GaWx0ZXIgfHwgeyAka2luZDogXCJQcm9wZXJ0eVwiIH0pXG5cdFx0KSB7XG5cdFx0XHRvUHJvcGVydGllc1tzS2V5XSA9IG9FbnRpdHlUeXBlW3NLZXldO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1Byb3BlcnRpZXM7XG59XG5mdW5jdGlvbiBmbkdldE1hbmRhdG9yeUZpbHRlckZpZWxkcyhvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc0NvbnRleHRQYXRoOiBzdHJpbmcpIHtcblx0bGV0IGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHM7XG5cdGlmIChvTWV0YU1vZGVsICYmIHNDb250ZXh0UGF0aCkge1xuXHRcdGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzQ29udGV4dFBhdGggKyBcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlclJlc3RyaWN0aW9ucy9SZXF1aXJlZFByb3BlcnRpZXNcIik7XG5cdH1cblx0cmV0dXJuIGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHM7XG59XG5mdW5jdGlvbiBmbkdldElCTkFjdGlvbnMob0NvbnRyb2w6IGFueSwgYUlCTkFjdGlvbnM6IGFueVtdKSB7XG5cdGNvbnN0IGFBY3Rpb25zID0gb0NvbnRyb2wgJiYgb0NvbnRyb2wuZ2V0QWN0aW9ucygpO1xuXHRpZiAoYUFjdGlvbnMpIHtcblx0XHRhQWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvQWN0aW9uOiBhbnkpIHtcblx0XHRcdGlmIChvQWN0aW9uLmlzQShcInNhcC51aS5tZGMuYWN0aW9udG9vbGJhci5BY3Rpb25Ub29sYmFyQWN0aW9uXCIpKSB7XG5cdFx0XHRcdG9BY3Rpb24gPSBvQWN0aW9uLmdldEFjdGlvbigpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9BY3Rpb24uZGF0YShcIklCTkRhdGFcIikpIHtcblx0XHRcdFx0YUlCTkFjdGlvbnMucHVzaChvQWN0aW9uKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYUlCTkFjdGlvbnM7XG59XG4vKipcbiAqIEBwYXJhbSBhSUJOQWN0aW9uc1xuICogQHBhcmFtIG9WaWV3XG4gKi9cbmZ1bmN0aW9uIGZuVXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnM6IGFueVtdLCBvVmlldzogVmlldykge1xuXHRjb25zdCBvUGFyYW1zOiBhbnkgPSB7fTtcblx0Y29uc3QgZm5HZXRMaW5rcyA9IGZ1bmN0aW9uIChvRGF0YT86IGFueSkge1xuXHRcdGlmIChvRGF0YSkge1xuXHRcdFx0Y29uc3QgYUtleXMgPSBPYmplY3Qua2V5cyhvRGF0YSk7XG5cdFx0XHRhS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5OiBzdHJpbmcpIHtcblx0XHRcdFx0aWYgKHNLZXkuaW5kZXhPZihcIl9cIikgIT09IDAgJiYgc0tleS5pbmRleE9mKFwib2RhdGEuY29udGV4dFwiKSA9PT0gLTEpIHtcblx0XHRcdFx0XHRvUGFyYW1zW3NLZXldID0geyB2YWx1ZTogb0RhdGFbc0tleV0gfTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmIChhSUJOQWN0aW9ucy5sZW5ndGgpIHtcblx0XHRcdGFJQk5BY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKG9JQk5BY3Rpb246IGFueSkge1xuXHRcdFx0XHRjb25zdCBzU2VtYW50aWNPYmplY3QgPSBvSUJOQWN0aW9uLmRhdGEoXCJJQk5EYXRhXCIpLnNlbWFudGljT2JqZWN0O1xuXHRcdFx0XHRjb25zdCBzQWN0aW9uID0gb0lCTkFjdGlvbi5kYXRhKFwiSUJORGF0YVwiKS5hY3Rpb247XG5cdFx0XHRcdENvbW1vblV0aWxzLmdldFNoZWxsU2VydmljZXMob1ZpZXcpXG5cdFx0XHRcdFx0LmdldExpbmtzKHtcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBzU2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRhY3Rpb246IHNBY3Rpb24sXG5cdFx0XHRcdFx0XHRwYXJhbXM6IG9QYXJhbXNcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChhTGluazogYW55KSB7XG5cdFx0XHRcdFx0XHRvSUJOQWN0aW9uLnNldFZpc2libGUob0lCTkFjdGlvbi5nZXRWaXNpYmxlKCkgJiYgYUxpbmsgJiYgYUxpbmsubGVuZ3RoID09PSAxKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZXRyaWV2ZSB0aGUgbGlua3MgZnJvbSB0aGUgc2hlbGwgc2VydmljZVwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXHRpZiAob1ZpZXcgJiYgb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdChvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIGFueSlcblx0XHRcdD8ucmVxdWVzdE9iamVjdCgpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAob0RhdGE6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gZm5HZXRMaW5rcyhvRGF0YSk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgcmV0cmlldmUgdGhlIGxpbmtzIGZyb20gdGhlIHNoZWxsIHNlcnZpY2VcIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGZuR2V0TGlua3MoKTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0VHJhbnNsYXRlZFRleHQoc0ZyYW1ld29ya0tleTogc3RyaW5nLCBvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlLCBvUGFyYW1zPzogYW55LCBzRW50aXR5U2V0TmFtZT86IHN0cmluZykge1xuXHRsZXQgc1Jlc291cmNlS2V5ID0gc0ZyYW1ld29ya0tleTtcblx0aWYgKG9SZXNvdXJjZUJ1bmRsZSkge1xuXHRcdGlmIChzRW50aXR5U2V0TmFtZSkge1xuXHRcdFx0Ly8gVGhlcmUgYXJlIGNvbnNvbGUgZXJyb3JzIGxvZ2dlZCB3aGVuIG1ha2luZyBjYWxscyB0byBnZXRUZXh0IGZvciBrZXlzIHRoYXQgYXJlIG5vdCBkZWZpbmVkIGluIHRoZSByZXNvdXJjZSBidW5kbGVcblx0XHRcdC8vIGZvciBpbnN0YW5jZSBrZXlzIHdoaWNoIGFyZSBzdXBwb3NlZCB0byBiZSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24sIGUuZywgPGtleT58PGVudGl0eVNldD4gdG8gb3ZlcnJpZGUgaW5zdGFuY2Ugc3BlY2lmaWMgdGV4dFxuXHRcdFx0Ly8gaGVuY2UgY2hlY2sgaWYgdGV4dCBleGlzdHMgKHVzaW5nIFwiaGFzVGV4dFwiKSBpbiB0aGUgcmVzb3VyY2UgYnVuZGxlIGJlZm9yZSBjYWxsaW5nIFwiZ2V0VGV4dFwiXG5cblx0XHRcdC8vIFwiaGFzVGV4dFwiIG9ubHkgY2hlY2tzIGZvciB0aGUga2V5IGluIHRoZSBpbW1lZGlhdGUgcmVzb3VyY2UgYnVuZGxlIGFuZCBub3QgaXQncyBjdXN0b20gYnVuZGxlc1xuXHRcdFx0Ly8gaGVuY2Ugd2UgbmVlZCB0byBkbyB0aGlzIHJlY3VycnNpdmVseSB0byBjaGVjayBpZiB0aGUga2V5IGV4aXN0cyBpbiBhbnkgb2YgdGhlIGJ1bmRsZXMgdGhlIGZvcm1zIHRoZSBGRSByZXNvdXJjZSBidW5kbGVcblx0XHRcdGNvbnN0IGJSZXNvdXJjZUtleUV4aXN0cyA9IF9jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoXG5cdFx0XHRcdChvUmVzb3VyY2VCdW5kbGUgYXMgYW55KS5hQ3VzdG9tQnVuZGxlcyxcblx0XHRcdFx0c0ZyYW1ld29ya0tleSArIFwifFwiICsgc0VudGl0eVNldE5hbWVcblx0XHRcdCk7XG5cblx0XHRcdC8vIGlmIHJlc291cmNlIGtleSB3aXRoIGVudGl0eSBzZXQgbmFtZSBmb3IgaW5zdGFuY2Ugc3BlY2lmaWMgdGV4dCBvdmVycmlkaW5nIGlzIHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvblxuXHRcdFx0Ly8gdGhlbiB1c2UgdGhlIHNhbWUga2V5IG90aGVyd2lzZSB1c2UgdGhlIEZyYW1ld29yayBrZXlcblx0XHRcdHNSZXNvdXJjZUtleSA9IGJSZXNvdXJjZUtleUV4aXN0cyA/IHNGcmFtZXdvcmtLZXkgKyBcInxcIiArIHNFbnRpdHlTZXROYW1lIDogc0ZyYW1ld29ya0tleTtcblx0XHR9XG5cdFx0cmV0dXJuIG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KHNSZXNvdXJjZUtleSwgb1BhcmFtcyk7XG5cdH1cblxuXHQvLyBkbyBub3QgYWxsb3cgb3ZlcnJpZGUgc28gZ2V0IHRleHQgZnJvbSB0aGUgaW50ZXJuYWwgYnVuZGxlIGRpcmVjdGx5XG5cdG9SZXNvdXJjZUJ1bmRsZSA9IChDb3JlIGFzIENvcmVFeCkuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cdHJldHVybiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChzUmVzb3VyY2VLZXksIG9QYXJhbXMpO1xufVxuZnVuY3Rpb24gX2NoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhhQ3VzdG9tQnVuZGxlczogYW55LCBzS2V5OiBhbnkpIHtcblx0aWYgKGFDdXN0b21CdW5kbGVzLmxlbmd0aCkge1xuXHRcdGZvciAobGV0IGkgPSBhQ3VzdG9tQnVuZGxlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFx0Y29uc3Qgc1ZhbHVlID0gYUN1c3RvbUJ1bmRsZXNbaV0uaGFzVGV4dChzS2V5KTtcblx0XHRcdC8vIHRleHQgZm91bmQgcmV0dXJuIHRydWVcblx0XHRcdGlmIChzVmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRfY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGFDdXN0b21CdW5kbGVzW2ldLmFDdXN0b21CdW5kbGVzLCBzS2V5KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZ2V0QWN0aW9uUGF0aChvQWN0aW9uOiBhbnksIGJSZXR1cm5Pbmx5UGF0aDogYm9vbGVhbiwgc0FjdGlvbk5hbWU/OiBzdHJpbmcsIGJDaGVja1N0YXRpY1ZhbHVlPzogYm9vbGVhbikge1xuXHRzQWN0aW9uTmFtZSA9ICFzQWN0aW9uTmFtZSA/IG9BY3Rpb24uZ2V0T2JqZWN0KG9BY3Rpb24uZ2V0UGF0aCgpKSA6IHNBY3Rpb25OYW1lO1xuXHRsZXQgc0NvbnRleHRQYXRoID0gb0FjdGlvbi5nZXRQYXRoKCkuc3BsaXQoXCIvQFwiKVswXTtcblx0Y29uc3Qgc0VudGl0eVR5cGVOYW1lID0gb0FjdGlvbi5nZXRPYmplY3Qoc0NvbnRleHRQYXRoKS4kVHlwZTtcblx0Y29uc3Qgc0VudGl0eU5hbWUgPSBnZXRFbnRpdHlTZXROYW1lKG9BY3Rpb24uZ2V0TW9kZWwoKSwgc0VudGl0eVR5cGVOYW1lKTtcblx0aWYgKHNFbnRpdHlOYW1lKSB7XG5cdFx0c0NvbnRleHRQYXRoID0gXCIvXCIgKyBzRW50aXR5TmFtZTtcblx0fVxuXHRpZiAoYkNoZWNrU3RhdGljVmFsdWUpIHtcblx0XHRyZXR1cm4gb0FjdGlvbi5nZXRPYmplY3Qoc0NvbnRleHRQYXRoICsgXCIvXCIgKyBzQWN0aW9uTmFtZSArIFwiQE9yZy5PRGF0YS5Db3JlLlYxLk9wZXJhdGlvbkF2YWlsYWJsZVwiKTtcblx0fVxuXHRpZiAoYlJldHVybk9ubHlQYXRoKSB7XG5cdFx0cmV0dXJuIHNDb250ZXh0UGF0aCArIFwiL1wiICsgc0FjdGlvbk5hbWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNDb250ZXh0UGF0aDogc0NvbnRleHRQYXRoLFxuXHRcdFx0c1Byb3BlcnR5OiBvQWN0aW9uLmdldE9iamVjdChzQ29udGV4dFBhdGggKyBcIi9cIiArIHNBY3Rpb25OYW1lICsgXCJAT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlLyRQYXRoXCIpLFxuXHRcdFx0c0JpbmRpbmdQYXJhbWV0ZXI6IG9BY3Rpb24uZ2V0T2JqZWN0KHNDb250ZXh0UGF0aCArIFwiL1wiICsgc0FjdGlvbk5hbWUgKyBcIi9AJHVpNS5vdmVybG9hZC8wLyRQYXJhbWV0ZXIvMC8kTmFtZVwiKVxuXHRcdH07XG5cdH1cbn1cbmZ1bmN0aW9uIGdldEVudGl0eVNldE5hbWUob01ldGFNb2RlbDogYW55LCBzRW50aXR5VHlwZTogYW55KSB7XG5cdGNvbnN0IG9FbnRpdHlDb250YWluZXIgPSBvTWV0YU1vZGVsLmdldE9iamVjdChcIi9cIik7XG5cdGZvciAoY29uc3Qga2V5IGluIG9FbnRpdHlDb250YWluZXIpIHtcblx0XHRpZiAodHlwZW9mIG9FbnRpdHlDb250YWluZXJba2V5XSA9PT0gXCJvYmplY3RcIiAmJiBvRW50aXR5Q29udGFpbmVyW2tleV0uJFR5cGUgPT09IHNFbnRpdHlUeXBlKSB7XG5cdFx0XHRyZXR1cm4ga2V5O1xuXHRcdH1cblx0fVxufVxuZnVuY3Rpb24gY29tcHV0ZURpc3BsYXlNb2RlKG9Qcm9wZXJ0eUFubm90YXRpb25zOiBhbnksIG9Db2xsZWN0aW9uQW5ub3RhdGlvbnM/OiBhbnkpIHtcblx0Y29uc3Qgb1RleHRBbm5vdGF0aW9uID0gb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl0sXG5cdFx0b1RleHRBcnJhbmdlbWVudEFubm90YXRpb24gPVxuXHRcdFx0b1RleHRBbm5vdGF0aW9uICYmXG5cdFx0XHQoKG9Qcm9wZXJ0eUFubm90YXRpb25zICYmXG5cdFx0XHRcdG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiXSkgfHxcblx0XHRcdFx0KG9Db2xsZWN0aW9uQW5ub3RhdGlvbnMgJiYgb0NvbGxlY3Rpb25Bbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIl0pKTtcblxuXHRpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24pIHtcblx0XHRpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0T25seVwiKSB7XG5cdFx0XHRyZXR1cm4gXCJEZXNjcmlwdGlvblwiO1xuXHRcdH0gZWxzZSBpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0TGFzdFwiKSB7XG5cdFx0XHRyZXR1cm4gXCJWYWx1ZURlc2NyaXB0aW9uXCI7XG5cdFx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRTZXBhcmF0ZVwiKSB7XG5cdFx0XHRyZXR1cm4gXCJWYWx1ZVwiO1xuXHRcdH1cblx0XHQvL0RlZmF1bHQgc2hvdWxkIGJlIFRleHRGaXJzdCBpZiB0aGVyZSBpcyBhIFRleHQgYW5ub3RhdGlvbiBhbmQgbmVpdGhlciBUZXh0T25seSBub3IgVGV4dExhc3QgYXJlIHNldFxuXHRcdHJldHVybiBcIkRlc2NyaXB0aW9uVmFsdWVcIjtcblx0fVxuXHRyZXR1cm4gb1RleHRBbm5vdGF0aW9uID8gXCJEZXNjcmlwdGlvblZhbHVlXCIgOiBcIlZhbHVlXCI7XG59XG5mdW5jdGlvbiBfZ2V0RW50aXR5VHlwZShvQ29udGV4dDogYW55KSB7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRyZXR1cm4gb01ldGFNb2RlbC5nZXRPYmplY3Qob01ldGFNb2RlbC5nZXRNZXRhUGF0aChvQ29udGV4dC5nZXRQYXRoKCkpICsgXCIvJFR5cGVcIik7XG59XG5mdW5jdGlvbiBfcmVxdWVzdE9iamVjdChzQWN0aW9uOiBhbnksIG9TZWxlY3RlZENvbnRleHQ6IGFueSwgc1Byb3BlcnR5OiBhbnkpIHtcblx0bGV0IG9Db250ZXh0ID0gb1NlbGVjdGVkQ29udGV4dDtcblx0Y29uc3QgbkJyYWNrZXRJbmRleCA9IHNBY3Rpb24uaW5kZXhPZihcIihcIik7XG5cblx0aWYgKG5CcmFja2V0SW5kZXggPiAtMSkge1xuXHRcdGNvbnN0IHNUYXJnZXRUeXBlID0gc0FjdGlvbi5zbGljZShuQnJhY2tldEluZGV4ICsgMSwgLTEpO1xuXHRcdGxldCBzQ3VycmVudFR5cGUgPSBfZ2V0RW50aXR5VHlwZShvQ29udGV4dCk7XG5cblx0XHR3aGlsZSAoc0N1cnJlbnRUeXBlICE9PSBzVGFyZ2V0VHlwZSkge1xuXHRcdFx0Ly8gRmluZCBwYXJlbnQgYmluZGluZyBjb250ZXh0IGFuZCByZXRyaWV2ZSBlbnRpdHkgdHlwZVxuXHRcdFx0b0NvbnRleHQgPSBvQ29udGV4dC5nZXRCaW5kaW5nKCkuZ2V0Q29udGV4dCgpO1xuXHRcdFx0aWYgKG9Db250ZXh0KSB7XG5cdFx0XHRcdHNDdXJyZW50VHlwZSA9IF9nZXRFbnRpdHlUeXBlKG9Db250ZXh0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdExvZy53YXJuaW5nKFwiQ2Fubm90IGRldGVybWluZSB0YXJnZXQgdHlwZSB0byByZXF1ZXN0IHByb3BlcnR5IHZhbHVlIGZvciBib3VuZCBhY3Rpb24gaW52b2NhdGlvblwiKTtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBvQ29udGV4dC5yZXF1ZXN0T2JqZWN0KHNQcm9wZXJ0eSk7XG59XG5mdW5jdGlvbiBfcmVxdWVzdFByb3BlcnR5KG9TZWxlY3RlZENvbnRleHQ6IGFueSwgc0FjdGlvbjogYW55LCBzUHJvcGVydHk6IGFueSwgc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aDogYW55KSB7XG5cdGNvbnN0IG9Qcm9taXNlID1cblx0XHRzUHJvcGVydHkgJiYgc1Byb3BlcnR5LmluZGV4T2YoXCIvXCIpID09PSAwXG5cdFx0XHQ/IHJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eShzUHJvcGVydHksIG9TZWxlY3RlZENvbnRleHQuZ2V0TW9kZWwoKSlcblx0XHRcdDogX3JlcXVlc3RPYmplY3Qoc0FjdGlvbiwgb1NlbGVjdGVkQ29udGV4dCwgc1Byb3BlcnR5KTtcblxuXHRyZXR1cm4gb1Byb21pc2UudGhlbihmdW5jdGlvbiAodlByb3BlcnR5VmFsdWU6IGFueSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuXHRcdFx0dlByb3BlcnR5VmFsdWU6IHZQcm9wZXJ0eVZhbHVlLFxuXHRcdFx0b1NlbGVjdGVkQ29udGV4dDogb1NlbGVjdGVkQ29udGV4dCxcblx0XHRcdHNBY3Rpb246IHNBY3Rpb24sXG5cdFx0XHRzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoOiBzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoXG5cdFx0fSk7XG5cdH0pO1xufVxuZnVuY3Rpb24gX3NldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZShvSW50ZXJuYWxNb2RlbENvbnRleHQ6IGFueSwgYVJlcXVlc3RQcm9taXNlczogYW55KSB7XG5cdHJldHVybiBQcm9taXNlLmFsbChhUmVxdWVzdFByb21pc2VzKVxuXHRcdC50aGVuKGZ1bmN0aW9uIChhUmVzdWx0czogYW55W10pIHtcblx0XHRcdGlmIChhUmVzdWx0cy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgYUFwcGxpY2FibGVDb250ZXh0czogYW55W10gPSBbXSxcblx0XHRcdFx0XHRhTm90QXBwbGljYWJsZUNvbnRleHRzOiBhbnlbXSA9IFtdO1xuXHRcdFx0XHRhUmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uIChhUmVzdWx0OiBhbnkpIHtcblx0XHRcdFx0XHRpZiAoYVJlc3VsdCkge1xuXHRcdFx0XHRcdFx0aWYgKGFSZXN1bHQudlByb3BlcnR5VmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCkuc2V0UHJvcGVydHkoYVJlc3VsdC5zRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0YUFwcGxpY2FibGVDb250ZXh0cy5wdXNoKGFSZXN1bHQub1NlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhTm90QXBwbGljYWJsZUNvbnRleHRzLnB1c2goYVJlc3VsdC5vU2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRfc2V0RHluYW1pY0FjdGlvbkNvbnRleHRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgYVJlc3VsdHNbMF0uc0FjdGlvbiwgYUFwcGxpY2FibGVDb250ZXh0cywgYU5vdEFwcGxpY2FibGVDb250ZXh0cyk7XG5cdFx0XHR9XG5cdFx0fSlcblx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRMb2cudHJhY2UoXCJDYW5ub3QgcmV0cmlldmUgcHJvcGVydHkgdmFsdWUgZnJvbSBwYXRoXCIsIG9FcnJvcik7XG5cdFx0fSk7XG59XG4vKipcbiAqIEBwYXJhbSBvSW50ZXJuYWxNb2RlbENvbnRleHRcbiAqIEBwYXJhbSBzQWN0aW9uXG4gKiBAcGFyYW0gYUFwcGxpY2FibGVcbiAqIEBwYXJhbSBhTm90QXBwbGljYWJsZVxuICovXG5mdW5jdGlvbiBfc2V0RHluYW1pY0FjdGlvbkNvbnRleHRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dDogYW55LCBzQWN0aW9uOiBhbnksIGFBcHBsaWNhYmxlOiBhbnksIGFOb3RBcHBsaWNhYmxlOiBhbnkpIHtcblx0Y29uc3Qgc0R5bmFtaWNBY3Rpb25QYXRoUHJlZml4ID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKSArIFwiL2R5bmFtaWNBY3Rpb25zL1wiICsgc0FjdGlvbixcblx0XHRvSW50ZXJuYWxNb2RlbCA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRNb2RlbCgpO1xuXHRvSW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShzRHluYW1pY0FjdGlvblBhdGhQcmVmaXggKyBcIi9hQXBwbGljYWJsZVwiLCBhQXBwbGljYWJsZSk7XG5cdG9JbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KHNEeW5hbWljQWN0aW9uUGF0aFByZWZpeCArIFwiL2FOb3RBcHBsaWNhYmxlXCIsIGFOb3RBcHBsaWNhYmxlKTtcbn1cbmZ1bmN0aW9uIHNldEFjdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0OiBhbnksIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXA6IGFueSwgYVNlbGVjdGVkQ29udGV4dHM6IGFueSkge1xuXHRjb25zdCBhUHJvbWlzZXMgPSBbXTtcblx0Zm9yIChjb25zdCBzQWN0aW9uIGluIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXApIHtcblx0XHQvLyBSZXNldCBhbGwgcHJvcGVydGllcyBiZWZvcmUgY29tcHV0YXRpb25cblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkeW5hbWljQWN0aW9ucy9cIiArIHNBY3Rpb24sIHtcblx0XHRcdGJFbmFibGVkOiBmYWxzZSxcblx0XHRcdGFBcHBsaWNhYmxlOiBbXSxcblx0XHRcdGFOb3RBcHBsaWNhYmxlOiBbXVxuXHRcdH0pO1xuXHRcdC8vIE5vdGUgdGhhdCBub24gZHluYW1pYyBhY3Rpb25zIGFyZSBub3QgcHJvY2Vzc2VkIGhlcmUuIFRoZXkgYXJlIGVuYWJsZWQgYmVjYXVzZVxuXHRcdC8vIG9uZSBvciBtb3JlIGFyZSBzZWxlY3RlZCBhbmQgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBjb25kaXRpb24gaW4gdGhlIHRlbXBsYXRpbmdcblx0XHQvLyBpcyB0aGVuIHVuZGVmaW5lZCBhbmQgdGh1cyB0aGUgYnV0dG9uIHRha2VzIHRoZSBkZWZhdWx0IGVuYWJsaW5nLCB3aGljaCBpcyB0cnVlIVxuXHRcdGNvbnN0IGFBcHBsaWNhYmxlID0gW10sXG5cdFx0XHRhTm90QXBwbGljYWJsZSA9IFtdLFxuXHRcdFx0c1Byb3BlcnR5ID0gb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcFtzQWN0aW9uXSxcblx0XHRcdHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGggPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpICsgXCIvZHluYW1pY0FjdGlvbnMvXCIgKyBzQWN0aW9uICsgXCIvYkVuYWJsZWRcIjtcblxuXHRcdGlmICh0eXBlb2Ygc1Byb3BlcnR5ID09PSBcIm9iamVjdFwiICYmIHNQcm9wZXJ0eSAhPT0gbnVsbCAmJiBzUHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBvU2VsZWN0ZWRDb250ZXh0ID0gYVNlbGVjdGVkQ29udGV4dHNbaV07XG5cdFx0XHRcdGlmIChvU2VsZWN0ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRjb25zdCBvVHJhbnNmb3JtZWRCaW5kaW5nID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0XHRzUHJvcGVydHksXG5cdFx0XHRcdFx0XHRcIkJpbmRpbmdcIixcblx0XHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcblx0XHRcdFx0XHRcdGZ1bmN0aW9uIChvQmluZGluZ0V4cHJlc3Npb246IGFueSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQob0NvbnRleHREYXRhW29CaW5kaW5nRXhwcmVzc2lvbi5wYXRoXSk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3Qgc1Jlc3VsdCA9IGNvbXBpbGVCaW5kaW5nKG9UcmFuc2Zvcm1lZEJpbmRpbmcpO1xuXHRcdFx0XHRcdGlmIChzUmVzdWx0ID09PSBcInRydWVcIikge1xuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCkuc2V0UHJvcGVydHkoc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRhQXBwbGljYWJsZS5wdXNoKG9TZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRhTm90QXBwbGljYWJsZS5wdXNoKG9TZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0X3NldER5bmFtaWNBY3Rpb25Db250ZXh0cyhvSW50ZXJuYWxNb2RlbENvbnRleHQsIHNBY3Rpb24sIGFBcHBsaWNhYmxlLCBhTm90QXBwbGljYWJsZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGFSZXF1ZXN0UHJvbWlzZXMgPSBbXTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3Qgb1NlbGVjdGVkQ29udGV4dCA9IGFTZWxlY3RlZENvbnRleHRzW2ldO1xuXHRcdFx0XHRpZiAob1NlbGVjdGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdGNvbnN0IG9Db250ZXh0RGF0YSA9IG9TZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0aWYgKHNQcm9wZXJ0eSA9PT0gbnVsbCAmJiAhIW9Db250ZXh0RGF0YVtcIiNcIiArIHNBY3Rpb25dKSB7XG5cdFx0XHRcdFx0XHQvL2xvb2sgZm9yIGFjdGlvbiBhZHZlcnRpc2VtZW50IGlmIHByZXNlbnQgYW5kIGl0cyB2YWx1ZSBpcyBub3QgbnVsbFxuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCkuc2V0UHJvcGVydHkoc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gQ29sbGVjdCBwcm9taXNlcyB0byByZXRyaWV2ZSBzaW5nbGV0b24gb3Igbm9ybWFsIHByb3BlcnR5IHZhbHVlIGFzeW5jaHJvbm91c2x5XG5cdFx0XHRcdFx0XHRhUmVxdWVzdFByb21pc2VzLnB1c2goX3JlcXVlc3RQcm9wZXJ0eShvU2VsZWN0ZWRDb250ZXh0LCBzQWN0aW9uLCBzUHJvcGVydHksIHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gV2hlbiBhbGwgcHJvcGVydHkgdmFsdWVzIGhhdmUgYmVlbiByZXRyaWV2ZWQsIHNldFxuXHRcdFx0Ly8gVGhlIGFwcGxpY2FibGUgYW5kIG5vdC1hcHBsaWNhYmxlIHNlbGVjdGVkIGNvbnRleHRzIGZvciBlYWNoIGFjdGlvbiBhbmRcblx0XHRcdC8vIFRoZSBlbmFibGVkIHByb3BlcnR5IG9mIHRoZSBkeW5hbWljIGFjdGlvbiBpbiBpbnRlcm5hbCBtb2RlbCBjb250ZXh0LlxuXHRcdFx0YVByb21pc2VzLnB1c2goX3NldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZShvSW50ZXJuYWxNb2RlbENvbnRleHQsIGFSZXF1ZXN0UHJvbWlzZXMpKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIFByb21pc2UuYWxsKGFQcm9taXNlcyk7XG59XG5cbmZ1bmN0aW9uIHNldE9iamVjdE1hcHBpbmdzKHNTZW1hbnRpY09iamVjdDogc3RyaW5nLCBvUGFyYW1zOiBhbnksIGFTZW1hbnRpY09iamVjdE1hcHBpbmdzOiBhbnkpIHtcblx0YVNlbWFudGljT2JqZWN0TWFwcGluZ3MuZm9yRWFjaChmdW5jdGlvbiAob0l0ZW06IGFueSkge1xuXHRcdGlmIChzU2VtYW50aWNPYmplY3QgPT09IG9JdGVtLnNlbWFudGljT2JqZWN0KSB7XG5cdFx0XHRjb25zdCBvTWFwcGluZ3MgPSBvSXRlbS5pdGVtcztcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgb01hcHBpbmdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IHNMb2NhbFByb3BlcnR5ID0gb01hcHBpbmdzW2ldLmtleTtcblx0XHRcdFx0Y29uc3Qgc1NlbWFudGljT2JqZWN0UHJvcGVydHkgPSBvTWFwcGluZ3NbaV0udmFsdWU7XG5cdFx0XHRcdGlmIChvUGFyYW1zW3NMb2NhbFByb3BlcnR5XSkge1xuXHRcdFx0XHRcdG9QYXJhbXNbc1NlbWFudGljT2JqZWN0UHJvcGVydHldID0gb1BhcmFtc1tzTG9jYWxQcm9wZXJ0eV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gb1BhcmFtcztcbn1cblxuZnVuY3Rpb24gX2dldERlZmF1bHRPcGVyYXRvcnMoc1Byb3BlcnR5VHlwZTogc3RyaW5nKSB7XG5cdC8vIG1kYyBkZWZpbmVzIHRoZSBmdWxsIHNldCBvZiBvcGVyYXRpb25zIHRoYXQgYXJlIG1lYW5pbmdmdWwgZm9yIGVhY2ggRWRtIFR5cGVcblx0Ly8gVE9ETyBSZXBsYWNlIHdpdGggbW9kZWwgLyBpbnRlcm5hbCB3YXkgb2YgcmV0cmlldmluZyB0aGUgYWN0dWFsIG1vZGVsIHR5cGUgdXNlZCBmb3IgdGhlIHByb3BlcnR5XG5cdGNvbnN0IG9EYXRhQ2xhc3MgPSBUeXBlVXRpbC5nZXREYXRhVHlwZUNsYXNzTmFtZShzUHJvcGVydHlUeXBlKTtcblx0Ly8gVE9ETyBuZWVkIHRvIHBhc3MgcHJvcGVyIGZvcm1hdE9wdGlvbnMsIGNvbnN0cmFpbnRzIGhlcmVcblx0Y29uc3Qgb0Jhc2VUeXBlID0gVHlwZVV0aWwuZ2V0QmFzZVR5cGUob0RhdGFDbGFzcywge30sIHt9KTtcblx0cmV0dXJuIEZpbHRlck9wZXJhdG9yVXRpbC5nZXRPcGVyYXRvcnNGb3JUeXBlKG9CYXNlVHlwZSk7XG59XG5mdW5jdGlvbiBfZ2V0UmVzdHJpY3Rpb25zKGFEZWZhdWx0T3BzOiBhbnksIGFFeHByZXNzaW9uT3BzOiBhbnkpIHtcblx0Ly8gRnJvbSB0aGUgZGVmYXVsdCBzZXQgb2YgT3BlcmF0b3JzIGZvciB0aGUgQmFzZSBUeXBlLCBzZWxlY3QgdGhvc2UgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUgQWxsb3dlZCBWYWx1ZS5cblx0Ly8gSW4gY2FzZSB0aGF0IG5vIG9wZXJhdG9ycyBhcmUgZm91bmQsIHJldHVybiB1bmRlZmluZWQgc28gdGhhdCB0aGUgZGVmYXVsdCBzZXQgaXMgdXNlZC5cblx0Y29uc3QgYU9wZXJhdG9ycyA9IGFEZWZhdWx0T3BzLmZpbHRlcihmdW5jdGlvbiAoc0VsZW1lbnQ6IGFueSkge1xuXHRcdHJldHVybiBhRXhwcmVzc2lvbk9wcy5pbmRleE9mKHNFbGVtZW50KSA+IC0xO1xuXHR9KTtcblx0cmV0dXJuIGFPcGVyYXRvcnMudG9TdHJpbmcoKSB8fCB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uKGFFeHByZXNzaW9uczogYW55KSB7XG5cdGNvbnN0IGFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eSA9IENvbW1vblV0aWxzLkFsbG93ZWRFeHByZXNzaW9uc1ByaW87XG5cblx0YUV4cHJlc3Npb25zLnNvcnQoZnVuY3Rpb24gKGE6IGFueSwgYjogYW55KSB7XG5cdFx0cmV0dXJuIGFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eS5pbmRleE9mKGEpIC0gYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5LmluZGV4T2YoYik7XG5cdH0pO1xuXG5cdHJldHVybiBhRXhwcmVzc2lvbnNbMF07XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGZldGNoIHRoZSBjb3JyZWN0IG9wZXJhdG9ycyBiYXNlZCBvbiB0aGUgZmlsdGVyIHJlc3RyaWN0aW9ucyB0aGF0IGNhbiBiZSBhbm5vdGF0ZWQgb24gYW4gZW50aXR5IHNldCBvciBhIG5hdmlnYXRpb24gcHJvcGVydHkuXG4gKiBXZSByZXR1cm4gdGhlIGNvcnJlY3Qgb3BlcmF0b3JzIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgcmVzdHJpY3Rpb24gYW5kIGFsc28gY2hlY2sgZm9yIHRoZSBvcGVyYXRvcnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgdG8gaW5jbHVkZSBvciBleGNsdWRlIHRoZW0uXG4gKlxuICogQHBhcmFtIHNQcm9wZXJ0eSBTdHJpbmcgbmFtZSBvZiB0aGUgcHJvcGVydHlcbiAqIEBwYXJhbSBzRW50aXR5U2V0UGF0aCBTdHJpbmcgcGF0aCB0byB0aGUgZW50aXR5IHNldFxuICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgdXNlZCBkdXJpbmcgdGVtcGxhdGluZ1xuICogQHBhcmFtIHNUeXBlIFN0cmluZyBkYXRhIHR5cGUgb2QgdGhlIHByb3BlcnR5LCBmb3IgZXhhbXBsZSBlZG0uRGF0ZVxuICogQHBhcmFtIGJVc2VTZW1hbnRpY0RhdGVSYW5nZSBCb29sZWFuIHBhc3NlZCBmcm9tIHRoZSBtYW5pZmVzdCBmb3Igc2VtYW50aWMgZGF0ZSByYW5nZVxuICogQHBhcmFtIHNTZXR0aW5ncyBTdHJpbmdpZmllZCBvYmplY3Qgb2YgdGhlIHByb3BlcnR5IHNldHRpbmdzXG4gKiBAcmV0dXJucyBTdHJpbmcgY29udGFpbmluZyBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBvcGVyYXRvcnMgZm9yIGZpbHRlcmluZ1xuICovXG5mdW5jdGlvbiBnZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eShcblx0c1Byb3BlcnR5OiBhbnksXG5cdHNFbnRpdHlTZXRQYXRoOiBhbnksXG5cdG9Db250ZXh0OiBhbnksXG5cdHNUeXBlPzogYW55LFxuXHRiVXNlU2VtYW50aWNEYXRlUmFuZ2U/OiBhbnksXG5cdHNTZXR0aW5ncz86IGFueVxuKSB7XG5cdGNvbnN0IG9GaWx0ZXJSZXN0cmljdGlvbnMgPSBDb21tb25VdGlscy5nZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgoc0VudGl0eVNldFBhdGgsIG9Db250ZXh0KTtcblx0Y29uc3QgYUVxdWFsc09wcyA9IFtcIkVRXCJdO1xuXHRjb25zdCBhU2luZ2xlUmFuZ2VPcHMgPSBbXCJFUVwiLCBcIkdFXCIsIFwiTEVcIiwgXCJMVFwiLCBcIkdUXCIsIFwiQlRcIiwgXCJOT1RMRVwiLCBcIk5PVExUXCIsIFwiTk9UR0VcIiwgXCJOT1RHVFwiXTtcblx0Y29uc3QgYVNpbmdsZVJhbmdlRFRCYXNpY09wcyA9IFtcIkVRXCIsIFwiQlRcIl07XG5cdGNvbnN0IGFTaW5nbGVWYWx1ZURhdGVPcHMgPSBbXG5cdFx0XCJUT0RBWVwiLFxuXHRcdFwiVE9NT1JST1dcIixcblx0XHRcIllFU1RFUkRBWVwiLFxuXHRcdFwiREFURVwiLFxuXHRcdFwiRklSU1REQVlXRUVLXCIsXG5cdFx0XCJMQVNUREFZV0VFS1wiLFxuXHRcdFwiRklSU1REQVlNT05USFwiLFxuXHRcdFwiTEFTVERBWU1PTlRIXCIsXG5cdFx0XCJGSVJTVERBWVFVQVJURVJcIixcblx0XHRcIkxBU1REQVlRVUFSVEVSXCIsXG5cdFx0XCJGSVJTVERBWVlFQVJcIixcblx0XHRcIkxBU1REQVlZRUFSXCJcblx0XTtcblx0Y29uc3QgYUJhc2ljRGF0ZVRpbWVPcHMgPSBbXCJFUVwiLCBcIkxFXCIsIFwiR0VcIiwgXCJCVFwiXTtcblx0Y29uc3QgYU11bHRpUmFuZ2VPcHMgPSBbXCJFUVwiLCBcIkdFXCIsIFwiTEVcIiwgXCJMVFwiLCBcIkdUXCIsIFwiQlRcIiwgXCJORVwiLCBcIk5PVEJUXCIsIFwiTk9UTEVcIiwgXCJOT1RMVFwiLCBcIk5PVEdFXCIsIFwiTk9UR1RcIl07XG5cdGNvbnN0IGFTZWFyY2hFeHByZXNzaW9uT3BzID0gW1wiQ29udGFpbnNcIiwgXCJOb3RDb250YWluc1wiLCBcIlN0YXJ0c1dpdGhcIiwgXCJOb3RTdGFydHNXaXRoXCIsIFwiRW5kc1dpdGhcIiwgXCJOb3RFbmRzV2l0aFwiXTtcblx0Y29uc3QgYVNlbWFudGljRGF0ZU9wc0V4dCA9IFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRTdXBwb3J0ZWRPcGVyYXRpb25zKCk7XG5cdGNvbnN0IGJTZW1hbnRpY0RhdGVSYW5nZSA9IGJVc2VTZW1hbnRpY0RhdGVSYW5nZSA9PT0gXCJ0cnVlXCIgfHwgYlVzZVNlbWFudGljRGF0ZVJhbmdlID09PSB0cnVlO1xuXHRsZXQgYVNlbWFudGljRGF0ZU9wczogYW55W10gPSBbXTtcblx0Y29uc3Qgb1NldHRpbmdzID0gdHlwZW9mIHNTZXR0aW5ncyA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2Uoc1NldHRpbmdzKS5jdXN0b21EYXRhIDogc1NldHRpbmdzO1xuXG5cdGlmIChvQ29udGV4dC5nZXRPYmplY3Qoc0VudGl0eVNldFBhdGggKyBcIi9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlc3VsdENvbnRleHRcIikgPT09IHRydWUpIHtcblx0XHRyZXR1cm4gYUVxdWFsc09wcy50b1N0cmluZygpO1xuXHR9XG5cblx0aWYgKG9TZXR0aW5ncyAmJiBvU2V0dGluZ3Mub3BlcmF0b3JDb25maWd1cmF0aW9uICYmIG9TZXR0aW5ncy5vcGVyYXRvckNvbmZpZ3VyYXRpb24ubGVuZ3RoID4gMCkge1xuXHRcdGFTZW1hbnRpY0RhdGVPcHMgPSBTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0RmlsdGVyT3BlcmF0aW9ucyhvU2V0dGluZ3Mub3BlcmF0b3JDb25maWd1cmF0aW9uKTtcblx0fSBlbHNlIHtcblx0XHRhU2VtYW50aWNEYXRlT3BzID0gU2VtYW50aWNEYXRlT3BlcmF0b3JzLmdldFNlbWFudGljRGF0ZU9wZXJhdGlvbnMoKTtcblx0fVxuXHRjb25zdCBhU2luZ2xlUmFuZ2VEYXRlVGltZU9wcyA9IGFTZW1hbnRpY0RhdGVPcHMuZmlsdGVyKGZ1bmN0aW9uIChzT3BlcmF0b3IpIHtcblx0XHRyZXR1cm4gc09wZXJhdG9yICE9PSBcIkRBVEVcIiAmJiBzT3BlcmF0b3IgIT09IFwiREFURVJBTkdFXCIgJiYgc09wZXJhdG9yICE9PSBcIkZST01cIiAmJiBzT3BlcmF0b3IgIT09IFwiVE9cIjtcblx0fSk7XG5cdC8vIEdldCB0aGUgZGVmYXVsdCBPcGVyYXRvcnMgZm9yIHRoaXMgUHJvcGVydHkgVHlwZVxuXHRsZXQgYURlZmF1bHRPcGVyYXRvcnMgPSBfZ2V0RGVmYXVsdE9wZXJhdG9ycyhzVHlwZSk7XG5cdGxldCBzUmVzdHJpY3Rpb25zO1xuXHQvLyBJcyB0aGVyZSBhIEZpbHRlciBSZXN0cmljdGlvbiBkZWZpbmVkIGZvciB0aGlzIHByb3BlcnR5P1xuXHRpZiAob0ZpbHRlclJlc3RyaWN0aW9ucyAmJiBvRmlsdGVyUmVzdHJpY3Rpb25zLkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyAmJiBvRmlsdGVyUmVzdHJpY3Rpb25zLkZpbHRlckFsbG93ZWRFeHByZXNzaW9uc1tzUHJvcGVydHldKSB7XG5cdFx0Ly8gRXh0ZW5kaW5nIHRoZSBkZWZhdWx0IG9wZXJhdG9ycyBsaXN0IHdpdGggU2VtYW50aWMgRGF0ZSBvcHRpb25zIERBVEVSQU5HRSwgREFURSwgRlJPTSBhbmQgVE9cblx0XHRpZiAoYlNlbWFudGljRGF0ZVJhbmdlKSB7XG5cdFx0XHRhRGVmYXVsdE9wZXJhdG9ycyA9IGFTZW1hbnRpY0RhdGVPcHNFeHQuY29uY2F0KGFEZWZhdWx0T3BlcmF0b3JzKTtcblx0XHR9XG5cdFx0Y29uc3Qgc0FsbG93ZWRFeHByZXNzaW9uID0gQ29tbW9uVXRpbHMuZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbihvRmlsdGVyUmVzdHJpY3Rpb25zLkZpbHRlckFsbG93ZWRFeHByZXNzaW9uc1tzUHJvcGVydHldKTtcblxuXHRcdC8vIEluIGNhc2UgbW9yZSB0aGFuIG9uZSBBbGxvd2VkIEV4cHJlc3Npb25zIGhhcyBiZWVuIGRlZmluZWQgZm9yIGEgcHJvcGVydHlcblx0XHQvLyBjaG9vc2UgdGhlIG1vc3QgcmVzdHJpY3RpdmUgQWxsb3dlZCBFeHByZXNzaW9uXG5cblx0XHQvLyBNdWx0aVZhbHVlIGhhcyBzYW1lIE9wZXJhdG9yIGFzIFNpbmdsZVZhbHVlLCBidXQgdGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgKG1heENvbmRpdGlvbnMpXG5cdFx0c3dpdGNoIChzQWxsb3dlZEV4cHJlc3Npb24pIHtcblx0XHRcdGNhc2UgXCJTaW5nbGVWYWx1ZVwiOlxuXHRcdFx0XHRjb25zdCBhU2luZ2xlVmFsdWVPcHMgPSBzVHlwZSA9PT0gXCJFZG0uRGF0ZVwiICYmIGJTZW1hbnRpY0RhdGVSYW5nZSA/IGFTaW5nbGVWYWx1ZURhdGVPcHMgOiBhRXF1YWxzT3BzO1xuXHRcdFx0XHRzUmVzdHJpY3Rpb25zID0gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wZXJhdG9ycywgYVNpbmdsZVZhbHVlT3BzKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTXVsdGlWYWx1ZVwiOlxuXHRcdFx0XHRzUmVzdHJpY3Rpb25zID0gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wZXJhdG9ycywgYUVxdWFsc09wcyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIlNpbmdsZVJhbmdlXCI6XG5cdFx0XHRcdGNvbnN0IGFFeHByZXNzaW9uT3BzID0gYlNlbWFudGljRGF0ZVJhbmdlXG5cdFx0XHRcdFx0PyBzVHlwZSA9PT0gXCJFZG0uRGF0ZVwiXG5cdFx0XHRcdFx0XHQ/IGFTZW1hbnRpY0RhdGVPcHNcblx0XHRcdFx0XHRcdDogc1R5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCJcblx0XHRcdFx0XHRcdD8gYVNpbmdsZVJhbmdlRGF0ZVRpbWVPcHMuY29uY2F0KGFCYXNpY0RhdGVUaW1lT3BzKVxuXHRcdFx0XHRcdFx0OiBhU2luZ2xlUmFuZ2VPcHNcblx0XHRcdFx0XHQ6IHNUeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiXG5cdFx0XHRcdFx0PyBhU2luZ2xlUmFuZ2VEVEJhc2ljT3BzXG5cdFx0XHRcdFx0OiBhU2luZ2xlUmFuZ2VPcHM7XG5cdFx0XHRcdGNvbnN0IHNPcGVyYXRvcnMgPSBfZ2V0UmVzdHJpY3Rpb25zKGFEZWZhdWx0T3BlcmF0b3JzLCBhRXhwcmVzc2lvbk9wcyk7XG5cdFx0XHRcdHNSZXN0cmljdGlvbnMgPSBzT3BlcmF0b3JzID8gc09wZXJhdG9ycyA6IFwiXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIk11bHRpUmFuZ2VcIjpcblx0XHRcdFx0c1Jlc3RyaWN0aW9ucyA9IF9nZXRSZXN0cmljdGlvbnMoYURlZmF1bHRPcGVyYXRvcnMsIGFNdWx0aVJhbmdlT3BzKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiU2VhcmNoRXhwcmVzc2lvblwiOlxuXHRcdFx0XHRzUmVzdHJpY3Rpb25zID0gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wZXJhdG9ycywgYVNlYXJjaEV4cHJlc3Npb25PcHMpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXCI6XG5cdFx0XHRcdHNSZXN0cmljdGlvbnMgPSBfZ2V0UmVzdHJpY3Rpb25zKGFEZWZhdWx0T3BlcmF0b3JzLCBhU2VhcmNoRXhwcmVzc2lvbk9wcy5jb25jYXQoYU11bHRpUmFuZ2VPcHMpKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHQvLyBJbiBjYXNlIEFsbG93ZWRFeHByZXNzaW9ucyBpcyBub3QgcmVjb2duaXNlZCwgdW5kZWZpbmVkIGluIHJldHVybiByZXN1bHRzIGluIHRoZSBkZWZhdWx0IHNldCBvZlxuXHRcdC8vIG9wZXJhdG9ycyBmb3IgdGhlIHR5cGUuXG5cdH1cblx0cmV0dXJuIHNSZXN0cmljdGlvbnM7XG59XG5cbmZ1bmN0aW9uIGdldE9wZXJhdG9yc0ZvckRhdGVQcm9wZXJ0eShwcm9wZXJ0eVR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG5cdC8vIEluIGNhc2UgQWxsb3dlZEV4cHJlc3Npb25zIGlzIG5vdCBwcm92aWRlZCBmb3IgdHlwZSBFZG0uRGF0ZSB0aGVuIGFsbCB0aGUgZGVmYXVsdFxuXHQvLyBvcGVyYXRvcnMgZm9yIHRoZSB0eXBlIHNob3VsZCBiZSByZXR1cm5lZCBleGNsdWRpbmcgc2VtYW50aWMgb3BlcmF0b3JzIGZyb20gdGhlIGxpc3QuXG5cdGNvbnN0IGFEZWZhdWx0T3BlcmF0b3JzID0gX2dldERlZmF1bHRPcGVyYXRvcnMocHJvcGVydHlUeXBlKTtcblx0Y29uc3QgYU11bHRpUmFuZ2VPcHMgPSBbXCJFUVwiLCBcIkdFXCIsIFwiTEVcIiwgXCJMVFwiLCBcIkdUXCIsIFwiQlRcIiwgXCJORVwiLCBcIk5PVEJUXCIsIFwiTk9UTEVcIiwgXCJOT1RMVFwiLCBcIk5PVEdFXCIsIFwiTk9UR1RcIl07XG5cdHJldHVybiBfZ2V0UmVzdHJpY3Rpb25zKGFEZWZhdWx0T3BlcmF0b3JzLCBhTXVsdGlSYW5nZU9wcyk7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmFtZXRlckluZm8ob01ldGFNb2RlbDogYW55LCBzQ29udGV4dFBhdGg6IGFueSkge1xuXHRjb25zdCBzUGFyYW1ldGVyQ29udGV4dFBhdGggPSBzQ29udGV4dFBhdGguc3Vic3RyaW5nKDAsIHNDb250ZXh0UGF0aC5sYXN0SW5kZXhPZihcIi9cIikpO1xuXHRjb25zdCBiUmVzdWx0Q29udGV4dCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNQYXJhbWV0ZXJDb250ZXh0UGF0aCArIFwiL0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dFwiKTtcblx0Y29uc3Qgb1BhcmFtZXRlckluZm86IGFueSA9IHt9O1xuXHRpZiAoYlJlc3VsdENvbnRleHQgJiYgc1BhcmFtZXRlckNvbnRleHRQYXRoICE9PSBzQ29udGV4dFBhdGgpIHtcblx0XHRvUGFyYW1ldGVySW5mby5jb250ZXh0UGF0aCA9IHNQYXJhbWV0ZXJDb250ZXh0UGF0aDtcblx0XHRvUGFyYW1ldGVySW5mby5wYXJhbWV0ZXJQcm9wZXJ0aWVzID0gQ29tbW9uVXRpbHMuZ2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzKG9NZXRhTW9kZWwsIHNQYXJhbWV0ZXJDb250ZXh0UGF0aCk7XG5cdH1cblx0cmV0dXJuIG9QYXJhbWV0ZXJJbmZvO1xufVxuZnVuY3Rpb24gYWRkU2VsZWN0T3B0aW9uVG9Db25kaXRpb25zKG9Qcm9wZXJ0eU1ldGFkYXRhOiBhbnksIGFWYWxpZE9wZXJhdG9yczogYW55LCBhQ3VtdWxhdGl2ZUNvbmRpdGlvbnM6IGFueSwgb1NlbGVjdE9wdGlvbjogYW55KSB7XG5cdGNvbnN0IG9Db25kaXRpb24gPSBnZXRDb25kaXRpb25zKG9TZWxlY3RPcHRpb24sIG9Qcm9wZXJ0eU1ldGFkYXRhKTtcblx0aWYgKG9Db25kaXRpb24pIHtcblx0XHRpZiAoIWFWYWxpZE9wZXJhdG9ycyB8fCBhVmFsaWRPcGVyYXRvcnMuaW5kZXhPZihvQ29uZGl0aW9uLm9wZXJhdG9yKSA+IC0xKSB7XG5cdFx0XHRhQ3VtdWxhdGl2ZUNvbmRpdGlvbnMucHVzaChvQ29uZGl0aW9uKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFDdW11bGF0aXZlQ29uZGl0aW9ucztcbn1cbi8qKlxuICogQHBhcmFtIHNDb250ZXh0UGF0aFxuICogQHBhcmFtIG9TZWxlY3Rpb25WYXJpYW50XG4gKiBAcGFyYW0gc1NlbGVjdE9wdGlvblByb3BcbiAqIEBwYXJhbSBvQ29uZGl0aW9uc1xuICogQHBhcmFtIHNDb25kaXRpb25QYXRoXG4gKiBAcGFyYW0gc0NvbmRpdGlvblByb3BcbiAqIEBwYXJhbSBvVmFsaWRQcm9wZXJ0aWVzXG4gKiBAcGFyYW0gb01ldGFNb2RlbFxuICogQHBhcmFtIGlzUGFyYW1ldGVyXG4gKi9cbmZ1bmN0aW9uIGFkZFNlbGVjdE9wdGlvbnNUb0NvbmRpdGlvbnMoXG5cdHNDb250ZXh0UGF0aDogYW55LFxuXHRvU2VsZWN0aW9uVmFyaWFudDogYW55LFxuXHRzU2VsZWN0T3B0aW9uUHJvcDogYW55LFxuXHRvQ29uZGl0aW9uczogYW55LFxuXHRzQ29uZGl0aW9uUGF0aDogYW55LFxuXHRzQ29uZGl0aW9uUHJvcDogYW55LFxuXHRvVmFsaWRQcm9wZXJ0aWVzOiBhbnksXG5cdG9NZXRhTW9kZWw6IGFueSxcblx0aXNQYXJhbWV0ZXI6IGFueVxuKSB7XG5cdGxldCBhQ29uZGl0aW9uczogYW55W10gPSBbXSxcblx0XHRhU2VsZWN0T3B0aW9ucyxcblx0XHRhVmFsaWRPcGVyYXRvcnM7XG5cblx0aWYgKGlzUGFyYW1ldGVyIHx8IENvbW1vblV0aWxzLmlzUHJvcGVydHlGaWx0ZXJhYmxlKG9NZXRhTW9kZWwsIHNDb250ZXh0UGF0aCwgc0NvbmRpdGlvblByb3AsIHRydWUpKSB7XG5cdFx0YVNlbGVjdE9wdGlvbnMgPSBvU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb24oc1NlbGVjdE9wdGlvblByb3ApO1xuXHRcdGFWYWxpZE9wZXJhdG9ycyA9IGlzUGFyYW1ldGVyID8gW1wiRVFcIl0gOiBDb21tb25VdGlscy5nZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eShzQ29uZGl0aW9uUHJvcCwgc0NvbnRleHRQYXRoLCBvTWV0YU1vZGVsKTtcblx0XHRjb25zdCBvUHJvcGVydHlNZXRhZGF0YSA9IG9WYWxpZFByb3BlcnRpZXNbc0NvbmRpdGlvblByb3BdO1xuXHRcdC8vIENyZWF0ZSBjb25kaXRpb25zIGZvciBhbGwgdGhlIHNlbGVjdE9wdGlvbnMgb2YgdGhlIHByb3BlcnR5XG5cdFx0YUNvbmRpdGlvbnMgPSBpc1BhcmFtZXRlclxuXHRcdFx0PyBhZGRTZWxlY3RPcHRpb25Ub0NvbmRpdGlvbnMob1Byb3BlcnR5TWV0YWRhdGEsIGFWYWxpZE9wZXJhdG9ycywgYUNvbmRpdGlvbnMsIGFTZWxlY3RPcHRpb25zWzBdKVxuXHRcdFx0OiBhU2VsZWN0T3B0aW9ucy5yZWR1Y2UoYWRkU2VsZWN0T3B0aW9uVG9Db25kaXRpb25zLmJpbmQobnVsbCwgb1Byb3BlcnR5TWV0YWRhdGEsIGFWYWxpZE9wZXJhdG9ycyksIGFDb25kaXRpb25zKTtcblx0XHRpZiAoYUNvbmRpdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRpZiAoc0NvbmRpdGlvblBhdGgpIHtcblx0XHRcdFx0b0NvbmRpdGlvbnNbc0NvbmRpdGlvblBhdGggKyBzQ29uZGl0aW9uUHJvcF0gPSBvQ29uZGl0aW9ucy5oYXNPd25Qcm9wZXJ0eShzQ29uZGl0aW9uUGF0aCArIHNDb25kaXRpb25Qcm9wKVxuXHRcdFx0XHRcdD8gb0NvbmRpdGlvbnNbc0NvbmRpdGlvblBhdGggKyBzQ29uZGl0aW9uUHJvcF0uY29uY2F0KGFDb25kaXRpb25zKVxuXHRcdFx0XHRcdDogYUNvbmRpdGlvbnM7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvQ29uZGl0aW9uc1tzQ29uZGl0aW9uUHJvcF0gPSBvQ29uZGl0aW9ucy5oYXNPd25Qcm9wZXJ0eShzQ29uZGl0aW9uUHJvcClcblx0XHRcdFx0XHQ/IG9Db25kaXRpb25zW3NDb25kaXRpb25Qcm9wXS5jb25jYXQoYUNvbmRpdGlvbnMpXG5cdFx0XHRcdFx0OiBhQ29uZGl0aW9ucztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gYWRkU2VsZWN0aW9uVmFyaWFudFRvQ29uZGl0aW9ucyhvU2VsZWN0aW9uVmFyaWFudDogYW55LCBvQ29uZGl0aW9uczogb2JqZWN0LCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc0NvbnRleHRQYXRoOiBzdHJpbmcpIHtcblx0Y29uc3QgYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzID0gb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMoKSxcblx0XHRvVmFsaWRQcm9wZXJ0aWVzID0gQ29tbW9uVXRpbHMuZ2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzKG9NZXRhTW9kZWwsIHNDb250ZXh0UGF0aCksXG5cdFx0YU1ldGFkYXRQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMob1ZhbGlkUHJvcGVydGllcyksXG5cdFx0b1BhcmFtZXRlckluZm8gPSBDb21tb25VdGlscy5nZXRQYXJhbWV0ZXJJbmZvKG9NZXRhTW9kZWwsIHNDb250ZXh0UGF0aCksXG5cdFx0c1BhcmFtZXRlckNvbnRleHRQYXRoID0gb1BhcmFtZXRlckluZm8uY29udGV4dFBhdGgsXG5cdFx0b1ZhbGlkUGFyYW1ldGVyUHJvcGVydGllcyA9IG9QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlclByb3BlcnRpZXMsXG5cdFx0Ykhhc1BhcmFtZXRlcnMgPSAhIW9QYXJhbWV0ZXJJbmZvLmNvbnRleHRQYXRoICYmIG9WYWxpZFBhcmFtZXRlclByb3BlcnRpZXMgJiYgT2JqZWN0LmtleXMob1ZhbGlkUGFyYW1ldGVyUHJvcGVydGllcykubGVuZ3RoID4gMDtcblxuXHRpZiAoYkhhc1BhcmFtZXRlcnMpIHtcblx0XHRjb25zdCBhTWV0YWRhdGFQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob1ZhbGlkUGFyYW1ldGVyUHJvcGVydGllcyk7XG5cdFx0YU1ldGFkYXRhUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChzTWV0YWRhdGFQYXJhbWV0ZXI6IHN0cmluZykge1xuXHRcdFx0bGV0IHNTZWxlY3RPcHRpb25OYW1lO1xuXHRcdFx0aWYgKGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhcIiRQYXJhbWV0ZXIuXCIgKyBzTWV0YWRhdGFQYXJhbWV0ZXIpKSB7XG5cdFx0XHRcdHNTZWxlY3RPcHRpb25OYW1lID0gXCIkUGFyYW1ldGVyLlwiICsgc01ldGFkYXRhUGFyYW1ldGVyO1xuXHRcdFx0fSBlbHNlIGlmIChhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoc01ldGFkYXRhUGFyYW1ldGVyKSkge1xuXHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IHNNZXRhZGF0YVBhcmFtZXRlcjtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdHNNZXRhZGF0YVBhcmFtZXRlci5zdGFydHNXaXRoKFwiUF9cIikgJiZcblx0XHRcdFx0YVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKFwiJFBhcmFtZXRlci5cIiArIHNNZXRhZGF0YVBhcmFtZXRlci5zbGljZSgyLCBzTWV0YWRhdGFQYXJhbWV0ZXIubGVuZ3RoKSlcblx0XHRcdCkge1xuXHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IFwiJFBhcmFtZXRlci5cIiArIHNNZXRhZGF0YVBhcmFtZXRlci5zbGljZSgyLCBzTWV0YWRhdGFQYXJhbWV0ZXIubGVuZ3RoKTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdHNNZXRhZGF0YVBhcmFtZXRlci5zdGFydHNXaXRoKFwiUF9cIikgJiZcblx0XHRcdFx0YVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKHNNZXRhZGF0YVBhcmFtZXRlci5zbGljZSgyLCBzTWV0YWRhdGFQYXJhbWV0ZXIubGVuZ3RoKSlcblx0XHRcdCkge1xuXHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IHNNZXRhZGF0YVBhcmFtZXRlci5zbGljZSgyLCBzTWV0YWRhdGFQYXJhbWV0ZXIubGVuZ3RoKTtcblx0XHRcdH0gZWxzZSBpZiAoYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKFwiJFBhcmFtZXRlci5QX1wiICsgc01ldGFkYXRhUGFyYW1ldGVyKSkge1xuXHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IFwiJFBhcmFtZXRlci5QX1wiICsgc01ldGFkYXRhUGFyYW1ldGVyO1xuXHRcdFx0fSBlbHNlIGlmIChhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoXCJQX1wiICsgc01ldGFkYXRhUGFyYW1ldGVyKSkge1xuXHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IFwiUF9cIiArIHNNZXRhZGF0YVBhcmFtZXRlcjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNTZWxlY3RPcHRpb25OYW1lKSB7XG5cdFx0XHRcdGFkZFNlbGVjdE9wdGlvbnNUb0NvbmRpdGlvbnMoXG5cdFx0XHRcdFx0c1BhcmFtZXRlckNvbnRleHRQYXRoLFxuXHRcdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0XHRcdHNTZWxlY3RPcHRpb25OYW1lLFxuXHRcdFx0XHRcdG9Db25kaXRpb25zLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRzTWV0YWRhdGFQYXJhbWV0ZXIsXG5cdFx0XHRcdFx0b1ZhbGlkUGFyYW1ldGVyUHJvcGVydGllcyxcblx0XHRcdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRhTWV0YWRhdFByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAoc01ldGFkYXRhUHJvcGVydHk6IHN0cmluZykge1xuXHRcdGxldCBzU2VsZWN0T3B0aW9uTmFtZTtcblx0XHRpZiAoYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKHNNZXRhZGF0YVByb3BlcnR5KSkge1xuXHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBzTWV0YWRhdGFQcm9wZXJ0eTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0c01ldGFkYXRhUHJvcGVydHkuc3RhcnRzV2l0aChcIlBfXCIpICYmXG5cdFx0XHRhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoc01ldGFkYXRhUHJvcGVydHkuc2xpY2UoMiwgc01ldGFkYXRhUHJvcGVydHkubGVuZ3RoKSlcblx0XHQpIHtcblx0XHRcdHNTZWxlY3RPcHRpb25OYW1lID0gc01ldGFkYXRhUHJvcGVydHkuc2xpY2UoMiwgc01ldGFkYXRhUHJvcGVydHkubGVuZ3RoKTtcblx0XHR9IGVsc2UgaWYgKGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhcIlBfXCIgKyBzTWV0YWRhdGFQcm9wZXJ0eSkpIHtcblx0XHRcdHNTZWxlY3RPcHRpb25OYW1lID0gXCJQX1wiICsgc01ldGFkYXRhUHJvcGVydHk7XG5cdFx0fVxuXHRcdGlmIChzU2VsZWN0T3B0aW9uTmFtZSkge1xuXHRcdFx0YWRkU2VsZWN0T3B0aW9uc1RvQ29uZGl0aW9ucyhcblx0XHRcdFx0c0NvbnRleHRQYXRoLFxuXHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUsXG5cdFx0XHRcdG9Db25kaXRpb25zLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdHNNZXRhZGF0YVByb3BlcnR5LFxuXHRcdFx0XHRvVmFsaWRQcm9wZXJ0aWVzLFxuXHRcdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0XHRmYWxzZVxuXHRcdFx0KTtcblx0XHR9XG5cdH0pO1xuXG5cdGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChzU2VsZWN0T3B0aW9uOiBhbnkpIHtcblx0XHRpZiAoc1NlbGVjdE9wdGlvbi5pbmRleE9mKFwiLlwiKSA+IDAgJiYgIXNTZWxlY3RPcHRpb24uaW5jbHVkZXMoXCIkUGFyYW1ldGVyXCIpKSB7XG5cdFx0XHRjb25zdCBzRnVsbENvbnRleHRQYXRoID0gKFwiL1wiICsgc1NlbGVjdE9wdGlvbi5yZXBsYWNlQWxsKFwiLlwiLCBcIi9cIikpLnN0YXJ0c1dpdGgoc0NvbnRleHRQYXRoKVxuXHRcdFx0XHQ/IFwiL1wiICsgc1NlbGVjdE9wdGlvbi5yZXBsYWNlQWxsKFwiLlwiLCBcIi9cIilcblx0XHRcdFx0OiBzQ29udGV4dFBhdGggKyBcIi9cIiArIHNTZWxlY3RPcHRpb24ucmVwbGFjZUFsbChcIi5cIiwgXCIvXCIpOyAvLyBjaGVjayBpZiB0aGUgZnVsbCBwYXRoLCBlZyBTYWxlc09yZGVyTWFuYWdlLl9JdGVtLk1hdGVyaWFsIGV4aXN0cyBpbiB0aGUgbWV0YW1vZGVsXG5cdFx0XHRpZiAob01ldGFNb2RlbC5nZXRPYmplY3Qoc0Z1bGxDb250ZXh0UGF0aC5yZXBsYWNlKFwiUF9cIiwgXCJcIikpKSB7XG5cdFx0XHRcdF9jcmVhdGVDb25kaXRpb25zRm9yTmF2UHJvcGVydGllcyhcblx0XHRcdFx0XHRzRnVsbENvbnRleHRQYXRoLFxuXHRcdFx0XHRcdHNDb250ZXh0UGF0aCxcblx0XHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdFx0XHRzU2VsZWN0T3B0aW9uLFxuXHRcdFx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0b0NvbmRpdGlvbnNcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gb0NvbmRpdGlvbnM7XG59XG4vKipcbiAqIEBwYXJhbSBzRnVsbENvbnRleHRQYXRoXG4gKiBAcGFyYW0gc01haW5FbnRpdHlTZXRQYXRoXG4gKiBAcGFyYW0gb1NlbGVjdGlvblZhcmlhbnRcbiAqIEBwYXJhbSBzU2VsZWN0T3B0aW9uXG4gKiBAcGFyYW0gb01ldGFNb2RlbFxuICogQHBhcmFtIG9Db25kaXRpb25zXG4gKi9cbmZ1bmN0aW9uIF9jcmVhdGVDb25kaXRpb25zRm9yTmF2UHJvcGVydGllcyhcblx0c0Z1bGxDb250ZXh0UGF0aDogYW55LFxuXHRzTWFpbkVudGl0eVNldFBhdGg6IGFueSxcblx0b1NlbGVjdGlvblZhcmlhbnQ6IGFueSxcblx0c1NlbGVjdE9wdGlvbjogYW55LFxuXHRvTWV0YU1vZGVsOiBhbnksXG5cdG9Db25kaXRpb25zOiBhbnlcbikge1xuXHRsZXQgYU5hdk9iamVjdE5hbWVzID0gc1NlbGVjdE9wdGlvbi5zcGxpdChcIi5cIik7XG5cdC8vIEVnOiBcIlNhbGVzT3JkZXJNYW5hZ2UuX0l0ZW0uX01hdGVyaWFsLk1hdGVyaWFsXCIgb3IgXCJfSXRlbS5NYXRlcmlhbFwiXG5cdGlmICgoXCIvXCIgKyBzU2VsZWN0T3B0aW9uLnJlcGxhY2VBbGwoXCIuXCIsIFwiL1wiKSkuc3RhcnRzV2l0aChzTWFpbkVudGl0eVNldFBhdGgpKSB7XG5cdFx0Y29uc3Qgc0Z1bGxQYXRoID0gKChcIi9cIiArIHNTZWxlY3RPcHRpb24pIGFzIGFueSkucmVwbGFjZUFsbChcIi5cIiwgXCIvXCIpLFxuXHRcdFx0c05hdlBhdGggPSBzRnVsbFBhdGgucmVwbGFjZShzTWFpbkVudGl0eVNldFBhdGggKyBcIi9cIiwgXCJcIik7XG5cdFx0YU5hdk9iamVjdE5hbWVzID0gc05hdlBhdGguc3BsaXQoXCIvXCIpO1xuXHR9XG5cdGxldCBzQ29uZGl0aW9uUGF0aCA9IFwiXCI7XG5cdGNvbnN0IHNQcm9wZXJ0eU5hbWUgPSBhTmF2T2JqZWN0TmFtZXNbYU5hdk9iamVjdE5hbWVzLmxlbmd0aCAtIDFdOyAvLyBNYXRlcmlhbCBmcm9tIFNhbGVzT3JkZXJNYW5hZ2UuX0l0ZW0uTWF0ZXJpYWxcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhTmF2T2JqZWN0TmFtZXMubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0aWYgKG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNNYWluRW50aXR5U2V0UGF0aCArIFwiL1wiICsgYU5hdk9iamVjdE5hbWVzW2ldLnJlcGxhY2UoXCJQX1wiLCBcIlwiKSkuJGlzQ29sbGVjdGlvbikge1xuXHRcdFx0c0NvbmRpdGlvblBhdGggPSBzQ29uZGl0aW9uUGF0aCArIGFOYXZPYmplY3ROYW1lc1tpXSArIFwiKi9cIjsgLy8gX0l0ZW0qLyBpbiBjYXNlIG9mIDE6biBjYXJkaW5hbGl0eVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzQ29uZGl0aW9uUGF0aCA9IHNDb25kaXRpb25QYXRoICsgYU5hdk9iamVjdE5hbWVzW2ldICsgXCIvXCI7IC8vIF9JdGVtLyBpbiBjYXNlIG9mIDE6MSBjYXJkaW5hbGl0eVxuXHRcdH1cblx0XHRzTWFpbkVudGl0eVNldFBhdGggPSBzTWFpbkVudGl0eVNldFBhdGggKyBcIi9cIiArIGFOYXZPYmplY3ROYW1lc1tpXTtcblx0fVxuXHRjb25zdCBzTmF2UHJvcGVydHlQYXRoID0gc0Z1bGxDb250ZXh0UGF0aC5zbGljZSgwLCBzRnVsbENvbnRleHRQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSksXG5cdFx0b1ZhbGlkUHJvcGVydGllcyA9IENvbW1vblV0aWxzLmdldENvbnRleHRQYXRoUHJvcGVydGllcyhvTWV0YU1vZGVsLCBzTmF2UHJvcGVydHlQYXRoKSxcblx0XHRhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMgPSBvU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpO1xuXHRsZXQgc1NlbGVjdE9wdGlvbk5hbWUgPSBzUHJvcGVydHlOYW1lO1xuXHRpZiAob1ZhbGlkUHJvcGVydGllc1tzUHJvcGVydHlOYW1lXSkge1xuXHRcdHNTZWxlY3RPcHRpb25OYW1lID0gc1Byb3BlcnR5TmFtZTtcblx0fSBlbHNlIGlmIChzUHJvcGVydHlOYW1lLnN0YXJ0c1dpdGgoXCJQX1wiKSAmJiBvVmFsaWRQcm9wZXJ0aWVzW3NQcm9wZXJ0eU5hbWUucmVwbGFjZShcIlBfXCIsIFwiXCIpXSkge1xuXHRcdHNTZWxlY3RPcHRpb25OYW1lID0gc1Byb3BlcnR5TmFtZS5yZXBsYWNlKFwiUF9cIiwgXCJcIik7XG5cdH0gZWxzZSBpZiAob1ZhbGlkUHJvcGVydGllc1tcIlBfXCIgKyBzUHJvcGVydHlOYW1lXSAmJiBhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoXCJQX1wiICsgc1Byb3BlcnR5TmFtZSkpIHtcblx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IFwiUF9cIiArIHNQcm9wZXJ0eU5hbWU7XG5cdH1cblx0aWYgKHNQcm9wZXJ0eU5hbWUuc3RhcnRzV2l0aChcIlBfXCIpICYmIG9Db25kaXRpb25zW3NDb25kaXRpb25QYXRoICsgc1NlbGVjdE9wdGlvbk5hbWVdKSB7XG5cdFx0Ly8gaWYgdGhlcmUgaXMgbm8gU2FsZXNPcmRlck1hbmFnZS5fSXRlbS5NYXRlcmlhbCB5ZXQgaW4gdGhlIG9Db25kaXRpb25zXG5cdFx0cmV0dXJuO1xuXHR9IGVsc2UgaWYgKCFzUHJvcGVydHlOYW1lLnN0YXJ0c1dpdGgoXCJQX1wiKSAmJiBvQ29uZGl0aW9uc1tzQ29uZGl0aW9uUGF0aCArIHNTZWxlY3RPcHRpb25OYW1lXSkge1xuXHRcdGRlbGV0ZSBvQ29uZGl0aW9uc1tzQ29uZGl0aW9uUGF0aCArIHNTZWxlY3RPcHRpb25OYW1lXTtcblx0XHRhZGRTZWxlY3RPcHRpb25zVG9Db25kaXRpb25zKFxuXHRcdFx0c05hdlByb3BlcnR5UGF0aCxcblx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0c1NlbGVjdE9wdGlvbixcblx0XHRcdG9Db25kaXRpb25zLFxuXHRcdFx0c0NvbmRpdGlvblBhdGgsXG5cdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSxcblx0XHRcdG9WYWxpZFByb3BlcnRpZXMsXG5cdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0ZmFsc2Vcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdGFkZFNlbGVjdE9wdGlvbnNUb0NvbmRpdGlvbnMoXG5cdFx0XHRzTmF2UHJvcGVydHlQYXRoLFxuXHRcdFx0b1NlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRzU2VsZWN0T3B0aW9uLFxuXHRcdFx0b0NvbmRpdGlvbnMsXG5cdFx0XHRzQ29uZGl0aW9uUGF0aCxcblx0XHRcdHNTZWxlY3RPcHRpb25OYW1lLFxuXHRcdFx0b1ZhbGlkUHJvcGVydGllcyxcblx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRmYWxzZVxuXHRcdCk7XG5cdH1cbn1cbmZ1bmN0aW9uIGFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50KG9TZWxlY3Rpb25WYXJpYW50OiBhbnksIG1QYWdlQ29udGV4dDogYW55W10sIG9WaWV3OiBhbnkpIHtcblx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvVmlldyk7XG5cdGNvbnN0IG9OYXZpZ2F0aW9uU2VydmljZSA9IG9BcHBDb21wb25lbnQuZ2V0TmF2aWdhdGlvblNlcnZpY2UoKTtcblx0cmV0dXJuIG9OYXZpZ2F0aW9uU2VydmljZS5taXhBdHRyaWJ1dGVzQW5kU2VsZWN0aW9uVmFyaWFudChtUGFnZUNvbnRleHQsIG9TZWxlY3Rpb25WYXJpYW50LnRvSlNPTlN0cmluZygpKTtcbn1cbmZ1bmN0aW9uIGFkZEV4dGVybmFsU3RhdGVGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50KG9TZWxlY3Rpb25WYXJpYW50OiBhbnksIG1GaWx0ZXJzOiBhbnksIG9UYXJnZXRJbmZvOiBhbnksIG9GaWx0ZXJJbmZvPzogYW55KSB7XG5cdGxldCBzRmlsdGVyOiBhbnksXG5cdFx0c0xvdyA9IFwiXCIsXG5cdFx0c0hpZ2ggPSBudWxsO1xuXHRjb25zdCBmbkdldFNpZ25BbmRPcHRpb24gPSBmdW5jdGlvbiAoc09wZXJhdG9yOiBhbnksIHNMb3dWYWx1ZTogYW55LCBzSGlnaFZhbHVlOiBhbnkpIHtcblx0XHRjb25zdCBvU2VsZWN0T3B0aW9uU3RhdGUgPSB7XG5cdFx0XHRvcHRpb246IFwiXCIsXG5cdFx0XHRzaWduOiBcIklcIixcblx0XHRcdGxvdzogc0xvd1ZhbHVlLFxuXHRcdFx0aGlnaDogc0hpZ2hWYWx1ZVxuXHRcdH07XG5cdFx0c3dpdGNoIChzT3BlcmF0b3IpIHtcblx0XHRcdGNhc2UgXCJDb250YWluc1wiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJDUFwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJTdGFydHNXaXRoXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkNQXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5sb3cgKz0gXCIqXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVuZHNXaXRoXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkNQXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5sb3cgPSBcIipcIiArIG9TZWxlY3RPcHRpb25TdGF0ZS5sb3c7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkJUXCI6XG5cdFx0XHRjYXNlIFwiTEVcIjpcblx0XHRcdGNhc2UgXCJMVFwiOlxuXHRcdFx0Y2FzZSBcIkdUXCI6XG5cdFx0XHRjYXNlIFwiTkVcIjpcblx0XHRcdGNhc2UgXCJFUVwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gc09wZXJhdG9yO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJUT0RBWVwiOlxuXHRcdFx0Y2FzZSBcIkRBVEVcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiRVFcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRUVRXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkVRXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVtcHR5XCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkVRXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5sb3cgPSBcIlwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOb3RDb250YWluc1wiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJDUFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOT1RCVFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJCVFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOb3RTdGFydHNXaXRoXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkNQXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5sb3cgKz0gXCIqXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5zaWduID0gXCJFXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIk5vdEVuZHNXaXRoXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkNQXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5sb3cgPSBcIipcIiArIG9TZWxlY3RPcHRpb25TdGF0ZS5sb3c7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5zaWduID0gXCJFXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIk5vdEVtcHR5XCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIk5FXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5sb3cgPSBcIlwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOT1RMRVwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJMRVwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOT1RHRVwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJHRVwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOT1RMVFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJMVFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOT1RHVFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJHVFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdExvZy53YXJuaW5nKHNPcGVyYXRvciArIFwiIGlzIG5vdCBzdXBwb3J0ZWQuIFwiICsgc0ZpbHRlciArIFwiIGNvdWxkIG5vdCBiZSBhZGRlZCB0byB0aGUgbmF2aWdhdGlvbiBjb250ZXh0XCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gb1NlbGVjdE9wdGlvblN0YXRlO1xuXHR9O1xuXHRjb25zdCBvRmlsdGVyQ29uZGl0aW9ucyA9IG1GaWx0ZXJzLmZpbHRlckNvbmRpdGlvbnM7XG5cdGNvbnN0IG9GaWx0ZXJzV2l0aG91dENvbmZsaWN0ID0gbUZpbHRlcnMuZmlsdGVyQ29uZGl0aW9uc1dpdGhvdXRDb25mbGljdCA/IG1GaWx0ZXJzLmZpbHRlckNvbmRpdGlvbnNXaXRob3V0Q29uZmxpY3QgOiB7fTtcblx0Y29uc3Qgb1RhYmxlUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCA9IG9UYXJnZXRJbmZvLnByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QgPyBvVGFyZ2V0SW5mby5wcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0IDoge307XG5cdGNvbnN0IGFkZEZpbHRlcnNUb1NlbGVjdGlvblZhcmlhbnQgPSBmdW5jdGlvbiAob1NlbGVjdGlvblZhcmlhbnQ6IGFueSwgc0ZpbHRlck5hbWU6IGFueSwgc1BhdGg/OiBhbnkpIHtcblx0XHRjb25zdCBhRmlsdGVycyA9IG9GaWx0ZXJDb25kaXRpb25zW3NGaWx0ZXJOYW1lXTtcblx0XHRmb3IgKGNvbnN0IGl0ZW0gaW4gYUZpbHRlcnMpIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXIgPSBhRmlsdGVyc1tpdGVtXTtcblx0XHRcdHNMb3cgPSAob0ZpbHRlci52YWx1ZXNbMF0gJiYgb0ZpbHRlci52YWx1ZXNbMF0udG9TdHJpbmcoKSkgfHwgXCJcIjtcblx0XHRcdHNIaWdoID0gKG9GaWx0ZXIudmFsdWVzWzFdICYmIG9GaWx0ZXIudmFsdWVzWzFdLnRvU3RyaW5nKCkpIHx8IG51bGw7XG5cdFx0XHRpZiAob0ZpbHRlci5vcGVyYXRvciA9PT0gXCJUT0RBWVwiIHx8IG9GaWx0ZXIub3BlcmF0b3IgPT09IFwiREFURVwiKSB7XG5cdFx0XHRcdGNvbnN0IGFGaWx0ZXIgPSBvRmlsdGVySW5mb1swXS5hRmlsdGVycy5maWx0ZXIoZnVuY3Rpb24gKG9GaWx0ZXI6IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBvRmlsdGVyLnNQYXRoID09PSBzRmlsdGVyTmFtZTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHNMb3cgPSBhRmlsdGVyWzBdLm9WYWx1ZTEgfHwgXCJcIjtcblx0XHRcdFx0c0hpZ2ggPSBudWxsO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgb1NlbGVjdE9wdGlvblZhbHVlcyA9IGZuR2V0U2lnbkFuZE9wdGlvbihvRmlsdGVyLm9wZXJhdG9yLCBzTG93LCBzSGlnaCk7XG5cdFx0XHRpZiAob1NlbGVjdE9wdGlvblZhbHVlcy5vcHRpb24pIHtcblx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQuYWRkU2VsZWN0T3B0aW9uKFxuXHRcdFx0XHRcdHNQYXRoID8gc1BhdGggOiBzRmlsdGVyTmFtZSxcblx0XHRcdFx0XHRvU2VsZWN0T3B0aW9uVmFsdWVzLnNpZ24sXG5cdFx0XHRcdFx0b1NlbGVjdE9wdGlvblZhbHVlcy5vcHRpb24sXG5cdFx0XHRcdFx0b1NlbGVjdE9wdGlvblZhbHVlcy5sb3csXG5cdFx0XHRcdFx0b1NlbGVjdE9wdGlvblZhbHVlcy5oaWdoXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdGZvciAoc0ZpbHRlciBpbiBvRmlsdGVyQ29uZGl0aW9ucykge1xuXHRcdC8vIG9ubHkgYWRkIHRoZSBmaWx0ZXIgdmFsdWVzIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIFNWIGFscmVhZHlcblx0XHRpZiAoIW9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbihzRmlsdGVyKSkge1xuXHRcdFx0Ly8gVE9ETyA6IGN1c3RvbSBmaWx0ZXJzIHNob3VsZCBiZSBpZ25vcmVkIG1vcmUgZ2VuZXJpY2FsbHlcblx0XHRcdGlmIChzRmlsdGVyID09PSBcIiRlZGl0U3RhdGVcIikge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGFkZEZpbHRlcnNUb1NlbGVjdGlvblZhcmlhbnQob1NlbGVjdGlvblZhcmlhbnQsIHNGaWx0ZXIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAob1RhYmxlUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCAmJiBzRmlsdGVyIGluIG9UYWJsZVByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QpIHtcblx0XHRcdFx0YWRkRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudChvU2VsZWN0aW9uVmFyaWFudCwgc0ZpbHRlciwgb1RhYmxlUHJvcGVydGllc1dpdGhvdXRDb25mbGljdFtzRmlsdGVyXSk7XG5cdFx0XHR9XG5cdFx0XHQvLyBpZiBwcm9wZXJ0eSB3YXMgd2l0aG91dCBjb25mbGljdCBpbiBwYWdlIGNvbnRleHQgdGhlbiBhZGQgcGF0aCBmcm9tIHBhZ2UgY29udGV4dCB0byBTVlxuXHRcdFx0aWYgKHNGaWx0ZXIgaW4gb0ZpbHRlcnNXaXRob3V0Q29uZmxpY3QpIHtcblx0XHRcdFx0YWRkRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudChvU2VsZWN0aW9uVmFyaWFudCwgc0ZpbHRlciwgb0ZpbHRlcnNXaXRob3V0Q29uZmxpY3Rbc0ZpbHRlcl0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1NlbGVjdGlvblZhcmlhbnQ7XG59XG5mdW5jdGlvbiBpc1N0aWNreUVkaXRNb2RlKG9Db250cm9sOiBDb250cm9sKSB7XG5cdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQoKG9Db250cm9sLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRjb25zdCBiVUlFZGl0YWJsZSA9IG9Db250cm9sLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblx0cmV0dXJuIGJJc1N0aWNreU1vZGUgJiYgYlVJRWRpdGFibGU7XG59XG4vKipcbiAqIEBwYXJhbSBhTWFuZGF0b3J5RmlsdGVyRmllbGRzXG4gKiBAcGFyYW0gb1NlbGVjdGlvblZhcmlhbnRcbiAqIEBwYXJhbSBvU2VsZWN0aW9uVmFyaWFudERlZmF1bHRzXG4gKi9cbmZ1bmN0aW9uIGFkZERlZmF1bHREaXNwbGF5Q3VycmVuY3koYU1hbmRhdG9yeUZpbHRlckZpZWxkczogYW55W10sIG9TZWxlY3Rpb25WYXJpYW50OiBhbnksIG9TZWxlY3Rpb25WYXJpYW50RGVmYXVsdHM6IGFueSkge1xuXHRpZiAob1NlbGVjdGlvblZhcmlhbnQgJiYgYU1hbmRhdG9yeUZpbHRlckZpZWxkcyAmJiBhTWFuZGF0b3J5RmlsdGVyRmllbGRzLmxlbmd0aCkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYU1hbmRhdG9yeUZpbHRlckZpZWxkcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgYVNWT3B0aW9uID0gb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uKFwiRGlzcGxheUN1cnJlbmN5XCIpLFxuXHRcdFx0XHRhRGVmYXVsdFNWT3B0aW9uID0gb1NlbGVjdGlvblZhcmlhbnREZWZhdWx0cyAmJiBvU2VsZWN0aW9uVmFyaWFudERlZmF1bHRzLmdldFNlbGVjdE9wdGlvbihcIkRpc3BsYXlDdXJyZW5jeVwiKTtcblx0XHRcdGlmIChcblx0XHRcdFx0YU1hbmRhdG9yeUZpbHRlckZpZWxkc1tpXS4kUHJvcGVydHlQYXRoID09PSBcIkRpc3BsYXlDdXJyZW5jeVwiICYmXG5cdFx0XHRcdCghYVNWT3B0aW9uIHx8ICFhU1ZPcHRpb24ubGVuZ3RoKSAmJlxuXHRcdFx0XHRhRGVmYXVsdFNWT3B0aW9uICYmXG5cdFx0XHRcdGFEZWZhdWx0U1ZPcHRpb24ubGVuZ3RoXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3QgZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uID0gYURlZmF1bHRTVk9wdGlvblswXTtcblx0XHRcdFx0Y29uc3Qgc1NpZ24gPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJTaWduXCJdO1xuXHRcdFx0XHRjb25zdCBzT3B0aW9uID0gZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uW1wiT3B0aW9uXCJdO1xuXHRcdFx0XHRjb25zdCBzTG93ID0gZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uW1wiTG93XCJdO1xuXHRcdFx0XHRjb25zdCBzSGlnaCA9IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbltcIkhpZ2hcIl07XG5cdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LmFkZFNlbGVjdE9wdGlvbihcIkRpc3BsYXlDdXJyZW5jeVwiLCBzU2lnbiwgc09wdGlvbiwgc0xvdywgc0hpZ2gpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuZnVuY3Rpb24gZ2V0Tm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzUGF0aDogYW55LCBvVmlldz86IGFueSkge1xuXHRjb25zdCBhVGVjaG5pY2FsS2V5cyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNQYXRoICsgXCIvXCIpLiRLZXk7XG5cdGNvbnN0IGFOb25Db21wdXRlZFZpc2libGVGaWVsZHMgPSBbXTtcblx0Y29uc3Qgb0VudGl0eVR5cGUgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzUGF0aCArIFwiL1wiKTtcblx0Zm9yIChjb25zdCBpdGVtIGluIG9FbnRpdHlUeXBlKSB7XG5cdFx0aWYgKG9FbnRpdHlUeXBlW2l0ZW1dLiRraW5kICYmIG9FbnRpdHlUeXBlW2l0ZW1dLiRraW5kID09PSBcIlByb3BlcnR5XCIpIHtcblx0XHRcdGNvbnN0IG9Bbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNQYXRoICsgXCIvXCIgKyBpdGVtICsgXCJAXCIpIHx8IHt9LFxuXHRcdFx0XHRiSXNLZXkgPSBhVGVjaG5pY2FsS2V5cy5pbmRleE9mKGl0ZW0pID4gLTEsXG5cdFx0XHRcdGJJc0ltbXV0YWJsZSA9IG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5JbW11dGFibGVcIl0sXG5cdFx0XHRcdGJJc05vbkNvbXB1dGVkID0gIW9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZFwiXSxcblx0XHRcdFx0YklzVmlzaWJsZSA9ICFvQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCJdLFxuXHRcdFx0XHRiSXNDb21wdXRlZERlZmF1bHRWYWx1ZSA9IG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZERlZmF1bHRWYWx1ZVwiXSxcblx0XHRcdFx0YklzS2V5Q29tcHV0ZWREZWZhdWx0VmFsdWVXaXRoVGV4dCA9XG5cdFx0XHRcdFx0YklzS2V5ICYmIG9FbnRpdHlUeXBlW2l0ZW1dLiRUeXBlID09PSBcIkVkbS5HdWlkXCJcblx0XHRcdFx0XHRcdD8gYklzQ29tcHV0ZWREZWZhdWx0VmFsdWUgJiYgb0Fubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCJdXG5cdFx0XHRcdFx0XHQ6IGZhbHNlO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQoYklzSW1tdXRhYmxlIHx8IGJJc0tleUNvbXB1dGVkRGVmYXVsdFZhbHVlV2l0aFRleHQgfHwgKGJJc0tleSAmJiBvRW50aXR5VHlwZVtpdGVtXS4kVHlwZSAhPT0gXCJFZG0uR3VpZFwiKSkgJiZcblx0XHRcdFx0YklzTm9uQ29tcHV0ZWQgJiZcblx0XHRcdFx0YklzVmlzaWJsZVxuXHRcdFx0KSB7XG5cdFx0XHRcdGFOb25Db21wdXRlZFZpc2libGVGaWVsZHMucHVzaChpdGVtKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFiSXNOb25Db21wdXRlZCAmJiBiSXNDb21wdXRlZERlZmF1bHRWYWx1ZSAmJiBvVmlldykge1xuXHRcdFx0XHRjb25zdCBvRGlhZ25vc3RpY3MgPSBnZXRBcHBDb21wb25lbnQob1ZpZXcpLmdldERpYWdub3N0aWNzKCk7XG5cdFx0XHRcdGNvbnN0IHNNZXNzYWdlID0gXCJDb3JlLkNvbXB1dGVkRGVmYXVsdFZhbHVlIGlzIGlnbm9yZWQgYXMgQ29yZS5Db21wdXRlZCBpcyBhbHJlYWR5IHNldCB0byB0cnVlXCI7XG5cdFx0XHRcdG9EaWFnbm9zdGljcy5hZGRJc3N1ZShcblx0XHRcdFx0XHRJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sXG5cdFx0XHRcdFx0SXNzdWVTZXZlcml0eS5NZWRpdW0sXG5cdFx0XHRcdFx0c01lc3NhZ2UsXG5cdFx0XHRcdFx0SXNzdWVDYXRlZ29yeVR5cGUsXG5cdFx0XHRcdFx0SXNzdWVDYXRlZ29yeVR5cGU/LkFubm90YXRpb25zPy5JZ25vcmVkQW5ub3RhdGlvblxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gYU5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcztcbn1cbmZ1bmN0aW9uIHNldFVzZXJEZWZhdWx0cyhcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRhUGFyYW1ldGVyczogYW55W10sXG5cdG9Nb2RlbDogSlNPTk1vZGVsLFxuXHRiSXNBY3Rpb246IGJvb2xlYW4sXG5cdGJJc0NyZWF0ZT86IGJvb2xlYW4sXG5cdG9BY3Rpb25EZWZhdWx0VmFsdWVzPzogYW55XG4pIHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAodmFsdWU6IGFueSkgPT4gdm9pZCkge1xuXHRcdGNvbnN0IG9Db21wb25lbnREYXRhID0gb0FwcENvbXBvbmVudC5nZXRDb21wb25lbnREYXRhKCksXG5cdFx0XHRvU3RhcnR1cFBhcmFtZXRlcnMgPSAob0NvbXBvbmVudERhdGEgJiYgb0NvbXBvbmVudERhdGEuc3RhcnR1cFBhcmFtZXRlcnMpIHx8IHt9LFxuXHRcdFx0b1NoZWxsU2VydmljZXMgPSBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRpZiAoIW9TaGVsbFNlcnZpY2VzLmhhc1VTaGVsbCgpKSB7XG5cdFx0XHRhUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChvUGFyYW1ldGVyOiBhbnkpIHtcblx0XHRcdFx0Y29uc3Qgc1Byb3BlcnR5TmFtZSA9IGJJc0FjdGlvblxuXHRcdFx0XHRcdD8gXCIvXCIgKyBvUGFyYW1ldGVyLiROYW1lXG5cdFx0XHRcdFx0OiBvUGFyYW1ldGVyLmdldFBhdGgoKS5zbGljZShvUGFyYW1ldGVyLmdldFBhdGgoKS5sYXN0SW5kZXhPZihcIi9cIikgKyAxKTtcblx0XHRcdFx0Y29uc3Qgc1BhcmFtZXRlck5hbWUgPSBiSXNBY3Rpb24gPyBzUHJvcGVydHlOYW1lLnNsaWNlKDEpIDogc1Byb3BlcnR5TmFtZTtcblx0XHRcdFx0aWYgKG9BY3Rpb25EZWZhdWx0VmFsdWVzICYmIGJJc0NyZWF0ZSkge1xuXHRcdFx0XHRcdGlmIChvQWN0aW9uRGVmYXVsdFZhbHVlc1tzUGFyYW1ldGVyTmFtZV0pIHtcblx0XHRcdFx0XHRcdG9Nb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCBvQWN0aW9uRGVmYXVsdFZhbHVlc1tzUGFyYW1ldGVyTmFtZV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChvU3RhcnR1cFBhcmFtZXRlcnNbc1BhcmFtZXRlck5hbWVdKSB7XG5cdFx0XHRcdFx0b01vZGVsLnNldFByb3BlcnR5KHNQcm9wZXJ0eU5hbWUsIG9TdGFydHVwUGFyYW1ldGVyc1tzUGFyYW1ldGVyTmFtZV1bMF0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiByZXNvbHZlKHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gb1NoZWxsU2VydmljZXMuZ2V0U3RhcnR1cEFwcFN0YXRlKG9BcHBDb21wb25lbnQpLnRoZW4oZnVuY3Rpb24gKG9TdGFydHVwQXBwU3RhdGU6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0RhdGEgPSBvU3RhcnR1cEFwcFN0YXRlLmdldERhdGEoKSB8fCB7fSxcblx0XHRcdFx0YUV4dGVuZGVkUGFyYW1ldGVycyA9IChvRGF0YS5zZWxlY3Rpb25WYXJpYW50ICYmIG9EYXRhLnNlbGVjdGlvblZhcmlhbnQuU2VsZWN0T3B0aW9ucykgfHwgW107XG5cdFx0XHRhUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChvUGFyYW1ldGVyOiBhbnkpIHtcblx0XHRcdFx0Y29uc3Qgc1Byb3BlcnR5TmFtZSA9IGJJc0FjdGlvblxuXHRcdFx0XHRcdD8gXCIvXCIgKyBvUGFyYW1ldGVyLiROYW1lXG5cdFx0XHRcdFx0OiBvUGFyYW1ldGVyLmdldFBhdGgoKS5zbGljZShvUGFyYW1ldGVyLmdldFBhdGgoKS5sYXN0SW5kZXhPZihcIi9cIikgKyAxKTtcblx0XHRcdFx0Y29uc3Qgc1BhcmFtZXRlck5hbWUgPSBiSXNBY3Rpb24gPyBzUHJvcGVydHlOYW1lLnNsaWNlKDEpIDogc1Byb3BlcnR5TmFtZTtcblx0XHRcdFx0aWYgKG9BY3Rpb25EZWZhdWx0VmFsdWVzICYmIGJJc0NyZWF0ZSkge1xuXHRcdFx0XHRcdGlmIChvQWN0aW9uRGVmYXVsdFZhbHVlc1tzUGFyYW1ldGVyTmFtZV0pIHtcblx0XHRcdFx0XHRcdG9Nb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCBvQWN0aW9uRGVmYXVsdFZhbHVlc1tzUGFyYW1ldGVyTmFtZV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChvU3RhcnR1cFBhcmFtZXRlcnNbc1BhcmFtZXRlck5hbWVdKSB7XG5cdFx0XHRcdFx0b01vZGVsLnNldFByb3BlcnR5KHNQcm9wZXJ0eU5hbWUsIG9TdGFydHVwUGFyYW1ldGVyc1tzUGFyYW1ldGVyTmFtZV1bMF0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFFeHRlbmRlZFBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgaSBpbiBhRXh0ZW5kZWRQYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvRXh0ZW5kZWRQYXJhbWV0ZXIgPSBhRXh0ZW5kZWRQYXJhbWV0ZXJzW2ldO1xuXHRcdFx0XHRcdFx0aWYgKG9FeHRlbmRlZFBhcmFtZXRlci5Qcm9wZXJ0eU5hbWUgPT09IHNQYXJhbWV0ZXJOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9SYW5nZSA9IG9FeHRlbmRlZFBhcmFtZXRlci5SYW5nZXMubGVuZ3RoXG5cdFx0XHRcdFx0XHRcdFx0PyBvRXh0ZW5kZWRQYXJhbWV0ZXIuUmFuZ2VzW29FeHRlbmRlZFBhcmFtZXRlci5SYW5nZXMubGVuZ3RoIC0gMV1cblx0XHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0aWYgKG9SYW5nZSAmJiBvUmFuZ2UuU2lnbiA9PT0gXCJJXCIgJiYgb1JhbmdlLk9wdGlvbiA9PT0gXCJFUVwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0b01vZGVsLnNldFByb3BlcnR5KHNQcm9wZXJ0eU5hbWUsIG9SYW5nZS5Mb3cpOyAvLyBoaWdoIGlzIGlnbm9yZWQgd2hlbiBPcHRpb249RVFcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gcmVzb2x2ZSh0cnVlKTtcblx0XHR9KTtcblx0fSk7XG59XG5mdW5jdGlvbiBnZXRBZGRpdGlvbmFsUGFyYW1zRm9yQ3JlYXRlKG9TdGFydHVwUGFyYW1ldGVyczogYW55LCBvSW5ib3VuZFBhcmFtZXRlcnM6IGFueSkge1xuXHRjb25zdCBvSW5ib3VuZHMgPSBvSW5ib3VuZFBhcmFtZXRlcnMsXG5cdFx0YUNyZWF0ZVBhcmFtZXRlcnMgPSBvSW5ib3VuZHNcblx0XHRcdD8gT2JqZWN0LmtleXMob0luYm91bmRzKS5maWx0ZXIoZnVuY3Rpb24gKHNQYXJhbWV0ZXI6IHN0cmluZykge1xuXHRcdFx0XHRcdHJldHVybiBvSW5ib3VuZHNbc1BhcmFtZXRlcl0udXNlRm9yQ3JlYXRlO1xuXHRcdFx0ICB9KVxuXHRcdFx0OiBbXTtcblx0bGV0IG9SZXQ7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYUNyZWF0ZVBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBzQ3JlYXRlUGFyYW1ldGVyID0gYUNyZWF0ZVBhcmFtZXRlcnNbaV07XG5cdFx0Y29uc3QgYVZhbHVlcyA9IG9TdGFydHVwUGFyYW1ldGVycyAmJiBvU3RhcnR1cFBhcmFtZXRlcnNbc0NyZWF0ZVBhcmFtZXRlcl07XG5cdFx0aWYgKGFWYWx1ZXMgJiYgYVZhbHVlcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdG9SZXQgPSBvUmV0IHx8IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cdFx0XHRvUmV0W3NDcmVhdGVQYXJhbWV0ZXJdID0gYVZhbHVlc1swXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9SZXQ7XG59XG5mdW5jdGlvbiBnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob091dGJvdW5kOiBhbnkpIHtcblx0Y29uc3QgYVNlbWFudGljT2JqZWN0TWFwcGluZzogYW55W10gPSBbXTtcblx0aWYgKG9PdXRib3VuZC5wYXJhbWV0ZXJzKSB7XG5cdFx0Y29uc3QgYVBhcmFtZXRlcnMgPSBPYmplY3Qua2V5cyhvT3V0Ym91bmQucGFyYW1ldGVycykgfHwgW107XG5cdFx0aWYgKGFQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdGFQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKHNQYXJhbTogc3RyaW5nKSB7XG5cdFx0XHRcdGNvbnN0IG9NYXBwaW5nID0gb091dGJvdW5kLnBhcmFtZXRlcnNbc1BhcmFtXTtcblx0XHRcdFx0aWYgKG9NYXBwaW5nLnZhbHVlICYmIG9NYXBwaW5nLnZhbHVlLnZhbHVlICYmIG9NYXBwaW5nLnZhbHVlLmZvcm1hdCA9PT0gXCJiaW5kaW5nXCIpIHtcblx0XHRcdFx0XHQvLyB1c2luZyB0aGUgZm9ybWF0IG9mIFVJLk1hcHBpbmdcblx0XHRcdFx0XHRjb25zdCBvU2VtYW50aWNNYXBwaW5nID0ge1xuXHRcdFx0XHRcdFx0XCJMb2NhbFByb3BlcnR5XCI6IHtcblx0XHRcdFx0XHRcdFx0XCIkUHJvcGVydHlQYXRoXCI6IG9NYXBwaW5nLnZhbHVlLnZhbHVlXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCI6IHNQYXJhbVxuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRpZiAoYVNlbWFudGljT2JqZWN0TWFwcGluZy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHQvLyBUbyBjaGVjayBpZiB0aGUgc2VtYW50aWNPYmplY3QgTWFwcGluZyBpcyBkb25lIGZvciB0aGUgc2FtZSBsb2NhbCBwcm9wZXJ0eSBtb3JlIHRoYXQgb25jZSB0aGVuIGZpcnN0IG9uZSB3aWxsIGJlIGNvbnNpZGVyZWRcblx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVNlbWFudGljT2JqZWN0TWFwcGluZy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZ1tpXVtcIkxvY2FsUHJvcGVydHlcIl1bXCIkUHJvcGVydHlQYXRoXCJdICE9PVxuXHRcdFx0XHRcdFx0XHRcdG9TZW1hbnRpY01hcHBpbmdbXCJMb2NhbFByb3BlcnR5XCJdW1wiJFByb3BlcnR5UGF0aFwiXVxuXHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRhU2VtYW50aWNPYmplY3RNYXBwaW5nLnB1c2gob1NlbWFudGljTWFwcGluZyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZy5wdXNoKG9TZW1hbnRpY01hcHBpbmcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhU2VtYW50aWNPYmplY3RNYXBwaW5nO1xufVxuZnVuY3Rpb24gZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKG9WaWV3RGF0YTogYW55LCBvQ3Jvc3NOYXY6IGFueSkge1xuXHRjb25zdCBvSGVhZGVyRmFjZXRJdGVtczogYW55ID0ge307XG5cdGxldCBzSWQ7XG5cdGNvbnN0IG9Db250cm9sQ29uZmlnID0gb1ZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uO1xuXHRmb3IgKGNvbnN0IGNvbmZpZyBpbiBvQ29udHJvbENvbmZpZykge1xuXHRcdGlmIChjb25maWcuaW5kZXhPZihcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnRcIikgPiAtMSB8fCBjb25maWcuaW5kZXhPZihcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydFwiKSA+IC0xKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG9Db250cm9sQ29uZmlnW2NvbmZpZ10ubmF2aWdhdGlvbiAmJlxuXHRcdFx0XHRvQ29udHJvbENvbmZpZ1tjb25maWddLm5hdmlnYXRpb24udGFyZ2V0T3V0Ym91bmQgJiZcblx0XHRcdFx0b0NvbnRyb2xDb25maWdbY29uZmlnXS5uYXZpZ2F0aW9uLnRhcmdldE91dGJvdW5kLm91dGJvdW5kXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3Qgc091dGJvdW5kID0gb0NvbnRyb2xDb25maWdbY29uZmlnXS5uYXZpZ2F0aW9uLnRhcmdldE91dGJvdW5kLm91dGJvdW5kO1xuXHRcdFx0XHRjb25zdCBvT3V0Ym91bmQgPSBvQ3Jvc3NOYXZbc091dGJvdW5kXTtcblx0XHRcdFx0aWYgKG9PdXRib3VuZC5zZW1hbnRpY09iamVjdCAmJiBvT3V0Ym91bmQuYWN0aW9uKSB7XG5cdFx0XHRcdFx0aWYgKGNvbmZpZy5pbmRleE9mKFwiQ2hhcnRcIikgPiAtMSkge1xuXHRcdFx0XHRcdFx0c0lkID0gZ2VuZXJhdGUoW1wiZmVcIiwgXCJNaWNyb0NoYXJ0TGlua1wiLCBjb25maWddKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c0lkID0gZ2VuZXJhdGUoW1wiZmVcIiwgXCJIZWFkZXJEUExpbmtcIiwgY29uZmlnXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob091dGJvdW5kKTtcblx0XHRcdFx0XHRvSGVhZGVyRmFjZXRJdGVtc1tzSWRdID0ge1xuXHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG9PdXRib3VuZC5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdGFjdGlvbjogb091dGJvdW5kLmFjdGlvbixcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogYVNlbWFudGljT2JqZWN0TWFwcGluZ1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiQ3Jvc3MgbmF2aWdhdGlvbiBvdXRib3VuZCBpcyBjb25maWd1cmVkIHdpdGhvdXQgc2VtYW50aWMgb2JqZWN0IGFuZCBhY3Rpb24gZm9yIFwiICsgc091dGJvdW5kKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gb0hlYWRlckZhY2V0SXRlbXM7XG59XG5mdW5jdGlvbiBzZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzKG9TZWxlY3Rpb25WYXJpYW50OiBhbnksIHZNYXBwaW5nczogb2JqZWN0KSB7XG5cdGNvbnN0IG9NYXBwaW5ncyA9IHR5cGVvZiB2TWFwcGluZ3MgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHZNYXBwaW5ncykgOiB2TWFwcGluZ3M7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgb01hcHBpbmdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3Qgc0xvY2FsUHJvcGVydHkgPVxuXHRcdFx0KG9NYXBwaW5nc1tpXVtcIkxvY2FsUHJvcGVydHlcIl0gJiYgb01hcHBpbmdzW2ldW1wiTG9jYWxQcm9wZXJ0eVwiXVtcIiRQcm9wZXJ0eVBhdGhcIl0pIHx8XG5cdFx0XHQob01hcHBpbmdzW2ldW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Mb2NhbFByb3BlcnR5XCJdICYmXG5cdFx0XHRcdG9NYXBwaW5nc1tpXVtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTG9jYWxQcm9wZXJ0eVwiXVtcIiRQYXRoXCJdKTtcblx0XHRjb25zdCBzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSA9XG5cdFx0XHRvTWFwcGluZ3NbaV1bXCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCJdIHx8IG9NYXBwaW5nc1tpXVtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNPYmplY3RQcm9wZXJ0eVwiXTtcblx0XHRpZiAob1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uKHNMb2NhbFByb3BlcnR5KSkge1xuXHRcdFx0Y29uc3Qgb1NlbGVjdE9wdGlvbiA9IG9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbihzTG9jYWxQcm9wZXJ0eSk7XG5cblx0XHRcdC8vQ3JlYXRlIGEgbmV3IFNlbGVjdE9wdGlvbiB3aXRoIHNTZW1hbnRpY09iamVjdFByb3BlcnR5IGFzIHRoZSBwcm9wZXJ0eSBOYW1lIGFuZCByZW1vdmUgdGhlIG9sZGVyIG9uZVxuXHRcdFx0b1NlbGVjdGlvblZhcmlhbnQucmVtb3ZlU2VsZWN0T3B0aW9uKHNMb2NhbFByb3BlcnR5KTtcblx0XHRcdG9TZWxlY3Rpb25WYXJpYW50Lm1hc3NBZGRTZWxlY3RPcHRpb24oc1NlbWFudGljT2JqZWN0UHJvcGVydHksIG9TZWxlY3RPcHRpb24pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1NlbGVjdGlvblZhcmlhbnQ7XG59XG5mdW5jdGlvbiBmbkdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoKG9NZXRhTW9kZWw6IGFueSwgc1BhdGg6IGFueSkge1xuXHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkKSB7XG5cdFx0Y29uc3Qgc1NlbWFudGljT2JqZWN0ID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc1BhdGggKyBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNPYmplY3RcIik7XG5cdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRzUGF0aCArIFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc1wiXG5cdFx0KTtcblx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RGb3JHZXRMaW5rcyA9IFt7IHNlbWFudGljT2JqZWN0OiBzU2VtYW50aWNPYmplY3QgfV07XG5cdFx0Y29uc3Qgb1NlbWFudGljT2JqZWN0ID0ge1xuXHRcdFx0c2VtYW50aWNPYmplY3Q6IHNTZW1hbnRpY09iamVjdFxuXHRcdH07XG5cdFx0cmVzb2x2ZSh7XG5cdFx0XHRzZW1hbnRpY09iamVjdFBhdGg6IHNQYXRoLFxuXHRcdFx0c2VtYW50aWNPYmplY3RGb3JHZXRMaW5rczogYVNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3MsXG5cdFx0XHRzZW1hbnRpY09iamVjdDogb1NlbWFudGljT2JqZWN0LFxuXHRcdFx0dW5hdmFpbGFibGVBY3Rpb25zOiBhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnNcblx0XHR9KTtcblx0fSkuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0TG9nLmVycm9yKFwiRXJyb3IgaW4gZm5HZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aFwiLCBvRXJyb3IpO1xuXHR9KTtcbn1cbmZ1bmN0aW9uIGZuVXBkYXRlU2VtYW50aWNUYXJnZXRzTW9kZWwoYUdldExpbmtzUHJvbWlzZXM6IGFueSwgYVNlbWFudGljT2JqZWN0czogYW55LCBvSW50ZXJuYWxNb2RlbENvbnRleHQ6IGFueSwgc0N1cnJlbnRIYXNoOiBhbnkpIHtcblx0cmV0dXJuIFByb21pc2UuYWxsKGFHZXRMaW5rc1Byb21pc2VzKVxuXHRcdC50aGVuKGZ1bmN0aW9uIChhVmFsdWVzOiBhbnlbXSkge1xuXHRcdFx0bGV0IGFMaW5rcyxcblx0XHRcdFx0X29MaW5rLFxuXHRcdFx0XHRfc0xpbmtJbnRlbnRBY3Rpb24sXG5cdFx0XHRcdGFGaW5hbExpbmtzOiBhbnlbXSA9IFtdO1xuXHRcdFx0bGV0IG9GaW5hbFNlbWFudGljT2JqZWN0czogYW55ID0ge307XG5cdFx0XHRjb25zdCBiSW50ZW50SGFzQWN0aW9ucyA9IGZ1bmN0aW9uIChzSW50ZW50OiBhbnksIGFBY3Rpb25zOiBhbnkpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBpbnRlbnQgaW4gYUFjdGlvbnMpIHtcblx0XHRcdFx0XHRpZiAoaW50ZW50ID09PSBzSW50ZW50KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdFx0Zm9yIChsZXQgayA9IDA7IGsgPCBhVmFsdWVzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHRcdGFMaW5rcyA9IGFWYWx1ZXNba107XG5cdFx0XHRcdGlmIChhTGlua3MgJiYgYUxpbmtzLmxlbmd0aCA+IDAgJiYgYUxpbmtzWzBdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRjb25zdCBvU2VtYW50aWNPYmplY3Q6IGFueSA9IHt9O1xuXHRcdFx0XHRcdGxldCBvVG1wID0ge307XG5cdFx0XHRcdFx0bGV0IHNBbHRlcm5hdGVQYXRoO1xuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYUxpbmtzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRhRmluYWxMaW5rcy5wdXNoKFtdKTtcblx0XHRcdFx0XHRcdGxldCBoYXNUYXJnZXRzTm90RmlsdGVyZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGxldCBoYXNUYXJnZXRzID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRmb3IgKGxldCBpTGlua0NvdW50ID0gMDsgaUxpbmtDb3VudCA8IGFMaW5rc1tpXVswXS5sZW5ndGg7IGlMaW5rQ291bnQrKykge1xuXHRcdFx0XHRcdFx0XHRfb0xpbmsgPSBhTGlua3NbaV1bMF1baUxpbmtDb3VudF07XG5cdFx0XHRcdFx0XHRcdF9zTGlua0ludGVudEFjdGlvbiA9IF9vTGluayAmJiBfb0xpbmsuaW50ZW50LnNwbGl0KFwiP1wiKVswXS5zcGxpdChcIi1cIilbMV07XG5cblx0XHRcdFx0XHRcdFx0aWYgKCEoX29MaW5rICYmIF9vTGluay5pbnRlbnQgJiYgX29MaW5rLmludGVudC5pbmRleE9mKHNDdXJyZW50SGFzaCkgPT09IDApKSB7XG5cdFx0XHRcdFx0XHRcdFx0aGFzVGFyZ2V0c05vdEZpbHRlcmVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIWJJbnRlbnRIYXNBY3Rpb25zKF9zTGlua0ludGVudEFjdGlvbiwgYVNlbWFudGljT2JqZWN0c1trXS51bmF2YWlsYWJsZUFjdGlvbnMpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRhRmluYWxMaW5rc1tpXS5wdXNoKF9vTGluayk7XG5cdFx0XHRcdFx0XHRcdFx0XHRoYXNUYXJnZXRzID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG9UbXAgPSB7XG5cdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBhU2VtYW50aWNPYmplY3RzW2tdLnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRwYXRoOiBhU2VtYW50aWNPYmplY3RzW2tdLnBhdGgsXG5cdFx0XHRcdFx0XHRcdEhhc1RhcmdldHM6IGhhc1RhcmdldHMsXG5cdFx0XHRcdFx0XHRcdEhhc1RhcmdldHNOb3RGaWx0ZXJlZDogaGFzVGFyZ2V0c05vdEZpbHRlcmVkXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0aWYgKG9TZW1hbnRpY09iamVjdFthU2VtYW50aWNPYmplY3RzW2tdLnNlbWFudGljT2JqZWN0XSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdFthU2VtYW50aWNPYmplY3RzW2tdLnNlbWFudGljT2JqZWN0XSA9IHt9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0c0FsdGVybmF0ZVBhdGggPSBhU2VtYW50aWNPYmplY3RzW2tdLnBhdGgucmVwbGFjZSgvXFwvL2csIFwiX1wiKTtcblx0XHRcdFx0XHRcdGlmIChvU2VtYW50aWNPYmplY3RbYVNlbWFudGljT2JqZWN0c1trXS5zZW1hbnRpY09iamVjdF1bc0FsdGVybmF0ZVBhdGhdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0b1NlbWFudGljT2JqZWN0W2FTZW1hbnRpY09iamVjdHNba10uc2VtYW50aWNPYmplY3RdW3NBbHRlcm5hdGVQYXRoXSA9IHt9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0b1NlbWFudGljT2JqZWN0W2FTZW1hbnRpY09iamVjdHNba10uc2VtYW50aWNPYmplY3RdW3NBbHRlcm5hdGVQYXRoXSA9IE9iamVjdC5hc3NpZ24oXG5cdFx0XHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdFthU2VtYW50aWNPYmplY3RzW2tdLnNlbWFudGljT2JqZWN0XVtzQWx0ZXJuYXRlUGF0aF0sXG5cdFx0XHRcdFx0XHRcdG9UbXBcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IHNTZW1hbnRpY09iamVjdE5hbWUgPSBPYmplY3Qua2V5cyhvU2VtYW50aWNPYmplY3QpWzBdO1xuXHRcdFx0XHRcdGlmIChPYmplY3Qua2V5cyhvRmluYWxTZW1hbnRpY09iamVjdHMpLmluY2x1ZGVzKHNTZW1hbnRpY09iamVjdE5hbWUpKSB7XG5cdFx0XHRcdFx0XHRvRmluYWxTZW1hbnRpY09iamVjdHNbc1NlbWFudGljT2JqZWN0TmFtZV0gPSBPYmplY3QuYXNzaWduKFxuXHRcdFx0XHRcdFx0XHRvRmluYWxTZW1hbnRpY09iamVjdHNbc1NlbWFudGljT2JqZWN0TmFtZV0sXG5cdFx0XHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdFtzU2VtYW50aWNPYmplY3ROYW1lXVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b0ZpbmFsU2VtYW50aWNPYmplY3RzID0gT2JqZWN0LmFzc2lnbihvRmluYWxTZW1hbnRpY09iamVjdHMsIG9TZW1hbnRpY09iamVjdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGFGaW5hbExpbmtzID0gW107XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChPYmplY3Qua2V5cyhvRmluYWxTZW1hbnRpY09iamVjdHMpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFxuXHRcdFx0XHRcdFwic2VtYW50aWNzVGFyZ2V0c1wiLFxuXHRcdFx0XHRcdG1lcmdlT2JqZWN0cyhvRmluYWxTZW1hbnRpY09iamVjdHMsIG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInNlbWFudGljc1RhcmdldHNcIikpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybiBvRmluYWxTZW1hbnRpY09iamVjdHM7XG5cdFx0XHR9XG5cdFx0fSlcblx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJmblVwZGF0ZVNlbWFudGljVGFyZ2V0c01vZGVsOiBDYW5ub3QgcmVhZCBsaW5rc1wiLCBvRXJyb3IpO1xuXHRcdH0pO1xufVxuZnVuY3Rpb24gZm5HZXRTZW1hbnRpY09iamVjdFByb21pc2Uob0FwcENvbXBvbmVudDogYW55LCBvVmlldzogYW55LCBvTWV0YU1vZGVsOiBhbnksIHNQYXRoOiBhbnkpIHtcblx0cmV0dXJuIENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoKG9NZXRhTW9kZWwsIHNQYXRoKTtcbn1cbmZ1bmN0aW9uIGZuR2V0U2VtYW50aWNUYXJnZXRzRnJvbVBhZ2VNb2RlbChvQ29udHJvbGxlcjogYW55LCBzUGFnZU1vZGVsOiBzdHJpbmcpIHtcblx0Y29uc3QgX2ZuZmluZFZhbHVlc0hlbHBlciA9IGZ1bmN0aW9uIChvYmo6IGFueSwga2V5OiBhbnksIGxpc3Q6IGFueSkge1xuXHRcdGlmICghb2JqKSB7XG5cdFx0XHRyZXR1cm4gbGlzdDtcblx0XHR9XG5cdFx0aWYgKG9iaiBpbnN0YW5jZW9mIEFycmF5KSB7XG5cdFx0XHRmb3IgKGNvbnN0IGkgaW4gb2JqKSB7XG5cdFx0XHRcdGxpc3QgPSBsaXN0LmNvbmNhdChfZm5maW5kVmFsdWVzSGVscGVyKG9ialtpXSwga2V5LCBbXSkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGxpc3Q7XG5cdFx0fVxuXHRcdGlmIChvYmpba2V5XSkge1xuXHRcdFx0bGlzdC5wdXNoKG9ialtrZXldKTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIG9iaiA9PSBcIm9iamVjdFwiICYmIG9iaiAhPT0gbnVsbCkge1xuXHRcdFx0Y29uc3QgY2hpbGRyZW4gPSBPYmplY3Qua2V5cyhvYmopO1xuXHRcdFx0aWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGxpc3QgPSBsaXN0LmNvbmNhdChfZm5maW5kVmFsdWVzSGVscGVyKG9ialtjaGlsZHJlbltpXV0sIGtleSwgW10pKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbGlzdDtcblx0fTtcblx0Y29uc3QgX2ZuZmluZFZhbHVlcyA9IGZ1bmN0aW9uIChvYmo6IGFueSwga2V5OiBhbnkpIHtcblx0XHRyZXR1cm4gX2ZuZmluZFZhbHVlc0hlbHBlcihvYmosIGtleSwgW10pO1xuXHR9O1xuXHRjb25zdCBfZm5EZWxldGVEdXBsaWNhdGVTZW1hbnRpY09iamVjdHMgPSBmdW5jdGlvbiAoYVNlbWFudGljT2JqZWN0UGF0aDogYW55KSB7XG5cdFx0cmV0dXJuIGFTZW1hbnRpY09iamVjdFBhdGguZmlsdGVyKGZ1bmN0aW9uICh2YWx1ZTogYW55LCBpbmRleDogYW55KSB7XG5cdFx0XHRyZXR1cm4gYVNlbWFudGljT2JqZWN0UGF0aC5pbmRleE9mKHZhbHVlKSA9PT0gaW5kZXg7XG5cdFx0fSk7XG5cdH07XG5cdGNvbnN0IG9WaWV3ID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpO1xuXHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXG5cdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RzUHJvbWlzZXMgPSBbXTtcblx0XHRjb25zdCBvQ29tcG9uZW50ID0gb0NvbnRyb2xsZXIuZ2V0T3duZXJDb21wb25lbnQoKTtcblx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKG9Db21wb25lbnQpIGFzIEFwcENvbXBvbmVudDtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0FwcENvbXBvbmVudC5nZXRNZXRhTW9kZWwoKTtcblx0XHRsZXQgb1BhZ2VNb2RlbCA9IG9Db21wb25lbnQuZ2V0TW9kZWwoc1BhZ2VNb2RlbCkuZ2V0RGF0YSgpO1xuXHRcdGlmIChKU09OLnN0cmluZ2lmeShvUGFnZU1vZGVsKSA9PT0gXCJ7fVwiKSB7XG5cdFx0XHRvUGFnZU1vZGVsID0gb0NvbXBvbmVudC5nZXRNb2RlbChzUGFnZU1vZGVsKS5fZ2V0T2JqZWN0KFwiL1wiLCB1bmRlZmluZWQpO1xuXHRcdH1cblx0XHRsZXQgYVNlbWFudGljT2JqZWN0c0ZvdW5kID0gX2ZuZmluZFZhbHVlcyhvUGFnZU1vZGVsLCBcInNlbWFudGljT2JqZWN0UGF0aFwiKTtcblx0XHRhU2VtYW50aWNPYmplY3RzRm91bmQgPSBfZm5EZWxldGVEdXBsaWNhdGVTZW1hbnRpY09iamVjdHMoYVNlbWFudGljT2JqZWN0c0ZvdW5kKTtcblx0XHRjb25zdCBvU2hlbGxTZXJ2aWNlSGVscGVyID0gQ29tbW9uVXRpbHMuZ2V0U2hlbGxTZXJ2aWNlcyhvQXBwQ29tcG9uZW50KTtcblx0XHRsZXQgc0N1cnJlbnRIYXNoID0gQ29tbW9uVXRpbHMuZ2V0SGFzaCgpO1xuXHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdHNGb3JHZXRMaW5rcyA9IFtdO1xuXHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdHM6IGFueVtdID0gW107XG5cdFx0bGV0IHNQYXRoO1xuXHRcdGxldCBfb1NlbWFudGljT2JqZWN0O1xuXG5cdFx0aWYgKHNDdXJyZW50SGFzaCAmJiBzQ3VycmVudEhhc2guaW5kZXhPZihcIj9cIikgIT09IC0xKSB7XG5cdFx0XHQvLyBzQ3VycmVudEhhc2ggY2FuIGNvbnRhaW4gcXVlcnkgc3RyaW5nLCBjdXQgaXQgb2ZmIVxuXHRcdFx0c0N1cnJlbnRIYXNoID0gc0N1cnJlbnRIYXNoLnNwbGl0KFwiP1wiKVswXTtcblx0XHR9XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFTZW1hbnRpY09iamVjdHNGb3VuZC5sZW5ndGg7IGkrKykge1xuXHRcdFx0c1BhdGggPSBhU2VtYW50aWNPYmplY3RzRm91bmRbaV07XG5cdFx0XHRhU2VtYW50aWNPYmplY3RzUHJvbWlzZXMucHVzaChDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdFByb21pc2Uob0FwcENvbXBvbmVudCwgb1ZpZXcsIG9NZXRhTW9kZWwsIHNQYXRoKSk7XG5cdFx0fVxuXG5cdFx0aWYgKGFTZW1hbnRpY09iamVjdHNQcm9taXNlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0UHJvbWlzZS5hbGwoYVNlbWFudGljT2JqZWN0c1Byb21pc2VzKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAoYVZhbHVlczogYW55W10pIHtcblx0XHRcdFx0XHRjb25zdCBhR2V0TGlua3NQcm9taXNlcyA9IFtdO1xuXHRcdFx0XHRcdGxldCBzU2VtT2JqRXhwcmVzc2lvbjtcblx0XHRcdFx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQgPSBhVmFsdWVzLmZpbHRlcihmdW5jdGlvbiAoZWxlbWVudDogYW55KSB7XG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuc2VtYW50aWNPYmplY3QgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHRcdFx0XHRlbGVtZW50LnNlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0ICYmXG5cdFx0XHRcdFx0XHRcdHR5cGVvZiBlbGVtZW50LnNlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0ID09PSBcIm9iamVjdFwiXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0c1NlbU9iakV4cHJlc3Npb24gPSBjb21waWxlQmluZGluZyhiaW5kaW5nRXhwcmVzc2lvbihlbGVtZW50LnNlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0LiRQYXRoKSk7XG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuc2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3QgPSBzU2VtT2JqRXhwcmVzc2lvbjtcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5zZW1hbnRpY09iamVjdEZvckdldExpbmtzWzBdLnNlbWFudGljT2JqZWN0ID0gc1NlbU9iakV4cHJlc3Npb247XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChlbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBlbGVtZW50LnNlbWFudGljT2JqZWN0ICE9PSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBhU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdF9vU2VtYW50aWNPYmplY3QgPSBhU2VtYW50aWNPYmplY3RzUmVzb2x2ZWRbal07XG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdF9vU2VtYW50aWNPYmplY3QgJiZcblx0XHRcdFx0XHRcdFx0X29TZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdCAmJlxuXHRcdFx0XHRcdFx0XHQhKF9vU2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3QuaW5kZXhPZihcIntcIikgPT09IDApXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0c0ZvckdldExpbmtzLnB1c2goX29TZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdEZvckdldExpbmtzKTtcblx0XHRcdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0cy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogX29TZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdFx0XHR1bmF2YWlsYWJsZUFjdGlvbnM6IF9vU2VtYW50aWNPYmplY3QudW5hdmFpbGFibGVBY3Rpb25zLFxuXHRcdFx0XHRcdFx0XHRcdHBhdGg6IGFTZW1hbnRpY09iamVjdHNSZXNvbHZlZFtqXS5zZW1hbnRpY09iamVjdFBhdGhcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdGFHZXRMaW5rc1Byb21pc2VzLnB1c2gob1NoZWxsU2VydmljZUhlbHBlci5nZXRMaW5rc1dpdGhDYWNoZShbX29TZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdEZvckdldExpbmtzXSkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gQ29tbW9uVXRpbHMudXBkYXRlU2VtYW50aWNUYXJnZXRzKGFHZXRMaW5rc1Byb21pc2VzLCBhU2VtYW50aWNPYmplY3RzLCBvSW50ZXJuYWxNb2RlbENvbnRleHQsIHNDdXJyZW50SGFzaCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJmbkdldFNlbWFudGljVGFyZ2V0c0Zyb21UYWJsZTogQ2Fubm90IGdldCBTZW1hbnRpYyBPYmplY3RzXCIsIG9FcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cbn1cbmZ1bmN0aW9uIGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbjogYW55LCBzUmVzdHJpY3Rpb246IGFueSkge1xuXHRjb25zdCBGaWx0ZXJSZXN0cmljdGlvbnMgPSBDb21tb25VdGlscy5GaWx0ZXJSZXN0cmljdGlvbnM7XG5cdGlmIChzUmVzdHJpY3Rpb24gPT09IEZpbHRlclJlc3RyaWN0aW9ucy5SRVFVSVJFRF9QUk9QRVJUSUVTIHx8IHNSZXN0cmljdGlvbiA9PT0gRmlsdGVyUmVzdHJpY3Rpb25zLk5PTl9GSUxURVJBQkxFX1BST1BFUlRJRVMpIHtcblx0XHRsZXQgYVByb3BzID0gW107XG5cdFx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uICYmIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uW3NSZXN0cmljdGlvbl0pIHtcblx0XHRcdGFQcm9wcyA9IG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uW3NSZXN0cmljdGlvbl0ubWFwKGZ1bmN0aW9uIChvUHJvcGVydHk6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gb1Byb3BlcnR5LiRQcm9wZXJ0eVBhdGg7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFQcm9wcztcblx0fSBlbHNlIGlmIChzUmVzdHJpY3Rpb24gPT09IEZpbHRlclJlc3RyaWN0aW9ucy5BTExPV0VEX0VYUFJFU1NJT05TKSB7XG5cdFx0Y29uc3QgbUFsbG93ZWRFeHByZXNzaW9uczogYW55ID0ge307XG5cdFx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uICYmIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMpIHtcblx0XHRcdG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob1Byb3BlcnR5OiBhbnkpIHtcblx0XHRcdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdFx0XHRpZiAobUFsbG93ZWRFeHByZXNzaW9uc1tvUHJvcGVydHkuUHJvcGVydHkuJFByb3BlcnR5UGF0aF0pIHtcblx0XHRcdFx0XHRtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoXS5wdXNoKG9Qcm9wZXJ0eS5BbGxvd2VkRXhwcmVzc2lvbnMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5LiRQcm9wZXJ0eVBhdGhdID0gW29Qcm9wZXJ0eS5BbGxvd2VkRXhwcmVzc2lvbnNdO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIG1BbGxvd2VkRXhwcmVzc2lvbnM7XG5cdH1cblx0Ly8gRGVmYXVsdCByZXR1cm4gdGhlIEZpbHRlclJlc3RyaWN0aW9ucyBBbm5vdGF0aW9uXG5cdHJldHVybiBvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbjtcbn1cbmZ1bmN0aW9uIGdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aChzRW50aXR5U2V0UGF0aDogYW55LCBvTWV0YU1vZGVsOiBhbnkpIHtcblx0Y29uc3Qgb1JldDogYW55ID0ge30sXG5cdFx0RmlsdGVyUmVzdHJpY3Rpb25zID0gQ29tbW9uVXRpbHMuRmlsdGVyUmVzdHJpY3Rpb25zLFxuXHRcdG9GaWx0ZXJSZXN0cmljdGlvbnMgPSBzRW50aXR5U2V0UGF0aCA/IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlTZXRQYXRoICsgXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnNcIikgOiB7fTtcblx0b1JldFtGaWx0ZXJSZXN0cmljdGlvbnMuUkVRVUlSRURfUFJPUEVSVElFU10gPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMob0ZpbHRlclJlc3RyaWN0aW9ucywgRmlsdGVyUmVzdHJpY3Rpb25zLlJFUVVJUkVEX1BST1BFUlRJRVMpIHx8IFtdO1xuXHRvUmV0W0ZpbHRlclJlc3RyaWN0aW9ucy5OT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTXSA9XG5cdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIEZpbHRlclJlc3RyaWN0aW9ucy5OT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTKSB8fCBbXTtcblx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRvUmV0W0ZpbHRlclJlc3RyaWN0aW9ucy5BTExPV0VEX0VYUFJFU1NJT05TXSA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zLCBGaWx0ZXJSZXN0cmljdGlvbnMuQUxMT1dFRF9FWFBSRVNTSU9OUykgfHwge307XG5cblx0Y29uc3QgYVBhdGhQYXJ0cyA9IHNFbnRpdHlTZXRQYXRoLnNwbGl0KFwiL1wiKTtcblxuXHRpZiAoYVBhdGhQYXJ0cy5sZW5ndGggPiAyKSB7XG5cdFx0Ly8gSW4gbm9ybWFsIGZpbHRlcmJhciBzY2VuYXJpb3Mgc0VudGl0eVNldFBhdGggaXMgb2YgdGhlIGZvcm1hdCBcIi9DdXN0b21lclwiLlxuXHRcdC8vIEJ1dCwgSW4gY2FzZSBvZiBzRW50aXR5U2V0UGF0aCBvZiBmb3JtYXQgXCIvQ3VzdG9tZXIvU2V0XCIgdGhpcyBpcyB0byBjaGVjayBuYXZpZ2F0aW9uIHJlc3RyaWN0aW9ucyBvZiBcIkN1c3RvbWVyXCIgZm9yIG5vbi1maWx0ZXJhYmxlIHByb3BlcnRpZXMgaW4gXCJTZXRcIlxuXHRcdGNvbnN0IHNOYXZpZ2F0aW9uUGF0aCA9IGFQYXRoUGFydHNbYVBhdGhQYXJ0cy5sZW5ndGggLSAxXTtcblx0XHRhUGF0aFBhcnRzLnNwbGljZSgtMSwgMSk7IC8vIHJlbW92aW5nIE5hdmlnYXRpb25Qcm9wZXJ0eSBmcm9tIHRoZSBlbmQuXG5cdFx0Y29uc3Qgc1BhcmVudEVudGl0eVNldFBhdGggPSBhUGF0aFBhcnRzLmpvaW4oXCIvXCIpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhvTWV0YU1vZGVsLCBzUGFyZW50RW50aXR5U2V0UGF0aCwgc05hdmlnYXRpb25QYXRoKTtcblx0XHRjb25zdCBvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucyA9IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zICYmIG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zW1wiRmlsdGVyUmVzdHJpY3Rpb25zXCJdO1xuXHRcdG9SZXRbRmlsdGVyUmVzdHJpY3Rpb25zLlJFUVVJUkVEX1BST1BFUlRJRVNdLmNvbmNhdChcblx0XHRcdGdldEZpbHRlclJlc3RyaWN0aW9ucyhvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucywgRmlsdGVyUmVzdHJpY3Rpb25zLlJFUVVJUkVEX1BST1BFUlRJRVMpIHx8IFtdXG5cdFx0KTtcblx0XHRvUmV0W0ZpbHRlclJlc3RyaWN0aW9ucy5OT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTXS5jb25jYXQoXG5cdFx0XHRnZXRGaWx0ZXJSZXN0cmljdGlvbnMob05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMsIEZpbHRlclJlc3RyaWN0aW9ucy5OT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTKSB8fCBbXVxuXHRcdCk7XG5cdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdG9SZXRbRmlsdGVyUmVzdHJpY3Rpb25zLkFMTE9XRURfRVhQUkVTU0lPTlNdID0gbWVyZ2VPYmplY3RzKFxuXHRcdFx0e30sXG5cdFx0XHRnZXRGaWx0ZXJSZXN0cmljdGlvbnMob05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMsIEZpbHRlclJlc3RyaWN0aW9ucy5BTExPV0VEX0VYUFJFU1NJT05TKSB8fCB7fSxcblx0XHRcdG9SZXRbRmlsdGVyUmVzdHJpY3Rpb25zLkFMTE9XRURfRVhQUkVTU0lPTlNdXG5cdFx0KTtcblx0fVxuXG5cdHJldHVybiBvUmV0O1xufVxuZnVuY3Rpb24gdGVtcGxhdGVDb250cm9sRnJhZ21lbnQoc0ZyYWdtZW50TmFtZTogYW55LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3M6IGFueSwgb09wdGlvbnM6IGFueSwgb01vZGlmaWVyPzogYW55KSB7XG5cdG9PcHRpb25zID0gb09wdGlvbnMgfHwge307XG5cdGlmIChvTW9kaWZpZXIpIHtcblx0XHRyZXR1cm4gb01vZGlmaWVyLnRlbXBsYXRlQ29udHJvbEZyYWdtZW50KHNGcmFnbWVudE5hbWUsIG9QcmVwcm9jZXNzb3JTZXR0aW5ncywgb09wdGlvbnMudmlldykudGhlbihmdW5jdGlvbiAob0ZyYWdtZW50OiBhbnkpIHtcblx0XHRcdC8vIFRoaXMgaXMgcmVxdWlyZWQgYXMgRmxleCByZXR1cm5zIGFuIEhUTUxDb2xsZWN0aW9uIGFzIHRlbXBsYXRpbmcgcmVzdWx0IGluIFhNTCB0aW1lLlxuXHRcdFx0cmV0dXJuIG9Nb2RpZmllci50YXJnZXRzID09PSBcInhtbFRyZWVcIiAmJiBvRnJhZ21lbnQubGVuZ3RoID4gMCA/IG9GcmFnbWVudFswXSA6IG9GcmFnbWVudDtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbG9hZE1hY3JvTGlicmFyeSgpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBYTUxQcmVwcm9jZXNzb3IucHJvY2Vzcyhcblx0XHRcdFx0XHRYTUxUZW1wbGF0ZVByb2Nlc3Nvci5sb2FkVGVtcGxhdGUoc0ZyYWdtZW50TmFtZSwgXCJmcmFnbWVudFwiKSxcblx0XHRcdFx0XHR7IG5hbWU6IHNGcmFnbWVudE5hbWUgfSxcblx0XHRcdFx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3Ncblx0XHRcdFx0KTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAob0ZyYWdtZW50OiBhbnkpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbnRyb2wgPSBvRnJhZ21lbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0XHRcdGlmICghIW9PcHRpb25zLmlzWE1MICYmIG9Db250cm9sKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9Db250cm9sO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBGcmFnbWVudC5sb2FkKHtcblx0XHRcdFx0XHRpZDogb09wdGlvbnMuaWQsXG5cdFx0XHRcdFx0ZGVmaW5pdGlvbjogb0ZyYWdtZW50LFxuXHRcdFx0XHRcdGNvbnRyb2xsZXI6IG9PcHRpb25zLmNvbnRyb2xsZXJcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0U2luZ2xldG9uUGF0aChwYXRoOiBzdHJpbmcsIG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKSxcblx0XHRwcm9wZXJ0eU5hbWUgPSBwYXJ0cy5wb3AoKSxcblx0XHRuYXZpZ2F0aW9uUGF0aCA9IHBhcnRzLmpvaW4oXCIvXCIpLFxuXHRcdGVudGl0eVNldCA9IG5hdmlnYXRpb25QYXRoICYmIG1ldGFNb2RlbC5nZXRPYmplY3QoXCIvXCIgKyBuYXZpZ2F0aW9uUGF0aCk7XG5cdGlmIChlbnRpdHlTZXQ/LiRraW5kID09PSBcIlNpbmdsZXRvblwiKSB7XG5cdFx0Y29uc3Qgc2luZ2xldG9uTmFtZSA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xuXHRcdHJldHVybiBcIi9cIiArIHNpbmdsZXRvbk5hbWUgKyBcIi9cIiArIHByb3BlcnR5TmFtZTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gcmVxdWVzdFNpbmdsZXRvblByb3BlcnR5KHBhdGg6IHN0cmluZywgbW9kZWw6IE9EYXRhTW9kZWwpIHtcblx0aWYgKCFwYXRoIHx8ICFtb2RlbCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdH1cblx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdC8vIEZpbmQgdGhlIHVuZGVybHlpbmcgZW50aXR5IHNldCBmcm9tIHRoZSBwcm9wZXJ0eSBwYXRoIGFuZCBjaGVjayB3aGV0aGVyIGl0IGlzIGEgc2luZ2xldG9uLlxuXHRjb25zdCByZXNvbHZlZFBhdGggPSBnZXRTaW5nbGV0b25QYXRoKHBhdGgsIG1ldGFNb2RlbCk7XG5cdGlmIChyZXNvbHZlZFBhdGgpIHtcblx0XHRjb25zdCBwcm9wZXJ0eUJpbmRpbmcgPSBtb2RlbC5iaW5kUHJvcGVydHkocmVzb2x2ZWRQYXRoKTtcblx0XHRyZXR1cm4gcHJvcGVydHlCaW5kaW5nLnJlcXVlc3RWYWx1ZSgpO1xuXHR9XG5cblx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbn1cbmZ1bmN0aW9uIGFkZEV2ZW50VG9CaW5kaW5nSW5mbyhvQ29udHJvbDogQ29udHJvbCwgc0V2ZW50TmFtZTogc3RyaW5nLCBmSGFuZGxlcjogRnVuY3Rpb24pIHtcblx0bGV0IG9CaW5kaW5nSW5mbzogYW55O1xuXHRjb25zdCBzZXRCaW5kaW5nSW5mbyA9IGZ1bmN0aW9uICgpIHtcblx0XHRpZiAob0JpbmRpbmdJbmZvKSB7XG5cdFx0XHRpZiAoIW9CaW5kaW5nSW5mby5ldmVudHMpIHtcblx0XHRcdFx0b0JpbmRpbmdJbmZvLmV2ZW50cyA9IHt9O1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFvQmluZGluZ0luZm8uZXZlbnRzW3NFdmVudE5hbWVdKSB7XG5cdFx0XHRcdG9CaW5kaW5nSW5mby5ldmVudHNbc0V2ZW50TmFtZV0gPSBmSGFuZGxlcjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGZPcmlnaW5hbEhhbmRsZXIgPSBvQmluZGluZ0luZm8uZXZlbnRzW3NFdmVudE5hbWVdO1xuXHRcdFx0XHRvQmluZGluZ0luZm8uZXZlbnRzW3NFdmVudE5hbWVdID0gZnVuY3Rpb24gKC4uLmFyZ3M6IGFueVtdKSB7XG5cdFx0XHRcdFx0ZkhhbmRsZXIuYXBwbHkodGhpcywgLi4uYXJncyk7XG5cdFx0XHRcdFx0Zk9yaWdpbmFsSGFuZGxlci5hcHBseSh0aGlzLCAuLi5hcmdzKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGlmIChvQ29udHJvbC5pc0EoXCJzYXAudWkubWRjLkNoYXJ0XCIpKSB7XG5cdFx0KG9Db250cm9sIGFzIGFueSlcblx0XHRcdC5pbm5lckNoYXJ0Qm91bmQoKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRvQmluZGluZ0luZm8gPSAob0NvbnRyb2wgYXMgYW55KS5nZXRDb250cm9sRGVsZWdhdGUoKS5fZ2V0Q2hhcnQob0NvbnRyb2wpLmdldEJpbmRpbmdJbmZvKFwiZGF0YVwiKTtcblx0XHRcdFx0c2V0QmluZGluZ0luZm8oKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKHNFcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihzRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b0JpbmRpbmdJbmZvID0gb0NvbnRyb2wuZGF0YShcInJvd3NCaW5kaW5nSW5mb1wiKTtcblx0XHRzZXRCaW5kaW5nSW5mbygpO1xuXHR9XG59XG5mdW5jdGlvbiBsb2FkTWFjcm9MaWJyYXJ5KCkge1xuXHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRzYXAudWkucmVxdWlyZShbXCJzYXAvZmUvbWFjcm9zL21hY3JvTGlicmFyeVwiXSwgZnVuY3Rpb24gKC8qbWFjcm9MaWJyYXJ5Ki8pIHtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9KTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZChzR3JvdXBJZDogc3RyaW5nLCBhY3Rpb25OYW1lOiBzdHJpbmcsIG9Nb2RlbDogT0RhdGFNb2RlbCwgYU1lc3NhZ2VzOiBhbnlbXSkge1xuXHRjb25zdCBsb2NhbEkxOG5SZWYgPSAoQ29yZSBhcyBDb3JlRXgpLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpLFxuXHRcdHNBY3Rpb25OYW1lID0gYWN0aW9uTmFtZSxcblx0XHRzQ2FuY2VsQnV0dG9uVHh0ID0gbG9jYWxJMThuUmVmLmdldFRleHQoXCJDQU5DRUxcIik7XG5cdGlmIChhTWVzc2FnZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0Y29uc3Qgc01lc3NhZ2UgPSBhTWVzc2FnZXNbMF0ubWVzc2FnZSArIFwiXFxuXCIgKyBsb2NhbEkxOG5SZWYuZ2V0VGV4dChcIlBST0NFRURcIik7XG5cdFx0Y29uc3QgZGlhbG9nUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cdFx0XHRNZXNzYWdlQm94Lndhcm5pbmcoc01lc3NhZ2UsIHtcblx0XHRcdFx0dGl0bGU6IGxvY2FsSTE4blJlZi5nZXRUZXh0KFwiV0FSTklOR1wiKSxcblx0XHRcdFx0YWN0aW9uczogW3NBY3Rpb25OYW1lLCBzQ2FuY2VsQnV0dG9uVHh0XSxcblx0XHRcdFx0ZW1waGFzaXplZEFjdGlvbjogc0FjdGlvbk5hbWUsXG5cdFx0XHRcdG9uQ2xvc2U6IGZ1bmN0aW9uIChzQWN0aW9uOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRpZiAoc0FjdGlvbiA9PT0gc0FjdGlvbk5hbWUpIHtcblx0XHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHRcdFx0XHRvTW9kZWwuc3VibWl0QmF0Y2goc0dyb3VwSWQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdHJldHVybiBkaWFsb2dQcm9taXNlO1xuXHR9XG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdGNvbnN0IG9NZXNzYWdlRGlhbG9nTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKGFNZXNzYWdlcyk7XG5cdFx0Y29uc3QgYlN0cmljdEhhbmRsaW5nRmxvdyA9IHRydWU7XG5cdFx0Y29uc3Qgb01lc3NhZ2VPYmplY3QgPSBtZXNzYWdlSGFuZGxpbmcucHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nKG9NZXNzYWdlRGlhbG9nTW9kZWwsIGJTdHJpY3RIYW5kbGluZ0Zsb3cpO1xuXHRcdGNvbnN0IG9EaWFsb2cgPSBuZXcgRGlhbG9nKHtcblx0XHRcdHJlc2l6YWJsZTogdHJ1ZSxcblx0XHRcdGNvbnRlbnQ6IG9NZXNzYWdlT2JqZWN0Lm9NZXNzYWdlVmlldyxcblx0XHRcdHN0YXRlOiBcIldhcm5pbmdcIixcblx0XHRcdGN1c3RvbUhlYWRlcjogbmV3IEJhcih7XG5cdFx0XHRcdGNvbnRlbnRMZWZ0OiBbb01lc3NhZ2VPYmplY3Qub0JhY2tCdXR0b25dLFxuXHRcdFx0XHRjb250ZW50TWlkZGxlOiBbbmV3IFRpdGxlKHsgdGV4dDogXCJXYXJuaW5nXCIgfSldXG5cdFx0XHR9KSxcblx0XHRcdGNvbnRlbnRIZWlnaHQ6IFwiNTAlXCIsXG5cdFx0XHRjb250ZW50V2lkdGg6IFwiNTAlXCIsXG5cdFx0XHR2ZXJ0aWNhbFNjcm9sbGluZzogZmFsc2Vcblx0XHR9KTtcblx0XHRvRGlhbG9nLnNldEJlZ2luQnV0dG9uKFxuXHRcdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0XHRvTW9kZWwuc3VibWl0QmF0Y2goc0dyb3VwSWQpO1xuXHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dHlwZTogXCJFbXBoYXNpemVkXCIsXG5cdFx0XHRcdHRleHQ6IGdldFRyYW5zbGF0ZWRUZXh0KFwiSUdOT1JFXCIsIGxvY2FsSTE4blJlZiwgc0FjdGlvbk5hbWUpXG5cdFx0XHR9KVxuXHRcdCk7XG5cdFx0b0RpYWxvZy5zZXRFbmRCdXR0b24oXG5cdFx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRleHQ6IHNDYW5jZWxCdXR0b25UeHRcblx0XHRcdH0pXG5cdFx0KTtcblx0XHRvRGlhbG9nLm9wZW4oKTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGdldE1lc3NhZ2VDb2x1bW4ob0NvbnRyb2w6IGFueSk6IHN0cmluZyB7XG5cdGlmICghb0NvbnRyb2wgfHwgb0NvbnRyb2wuaXNBKFwic2FwLnVpLmNvcmUubXZjLlhNTFZpZXdcIikpIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXHRjb25zdCBoZWFkZXJJbmZvVGl0bGVQYXRoID0gb0NvbnRyb2wuZ2V0UGFyZW50KCkuZ2V0VGFibGVEZWZpbml0aW9uKCkuaGVhZGVySW5mb1RpdGxlO1xuXHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRyb2wgJiYgKG9Db250cm9sLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkgYXMgYW55KSxcblx0XHRzQ3VycmVudEVudGl0eVNldE5hbWUgPSBvQ29udHJvbC5kYXRhKFwibWV0YVBhdGhcIik7XG5cdGNvbnN0IGFUZWNobmljYWxLZXlzID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0N1cnJlbnRFbnRpdHlTZXROYW1lICsgXCIvJFR5cGUvJEtleVwiKTtcblx0Y29uc3QgYUZpbHRlcmVkVGVjaG5pY2FsS2V5czogc3RyaW5nW10gPSBbXTtcblxuXHRhVGVjaG5pY2FsS2V5cy5mb3JFYWNoKGZ1bmN0aW9uICh0ZWNobmljYWxLZXk6IHN0cmluZykge1xuXHRcdGlmICh0ZWNobmljYWxLZXkgIT09IFwiSXNBY3RpdmVFbnRpdHlcIikge1xuXHRcdFx0YUZpbHRlcmVkVGVjaG5pY2FsS2V5cy5wdXNoKHRlY2huaWNhbEtleSk7XG5cdFx0fVxuXHR9KTtcblx0Y29uc3Qgc2VtYW50aWNLZXlDb2x1bW5zID0gb0NvbnRyb2wuZ2V0UGFyZW50KCkuZ2V0VGFibGVEZWZpbml0aW9uKCkuc2VtYW50aWNLZXlzO1xuXG5cdGNvbnN0IGFWaXNpYmxlQ29sdW1uczogYW55ID0gW107XG5cdGNvbnN0IGFUYWJsZUNvbHVtbnMgPSBvQ29udHJvbC5nZXRDb2x1bW5zKCk7XG5cdGFUYWJsZUNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAob0NvbHVtbjogYW55KSB7XG5cdFx0Y29uc3QgY29sdW1uUGF0aFNwbGl0ID0gb0NvbHVtbi5nZXRJZCgpLnNwbGl0KFwiOjpcIik7XG5cdFx0YVZpc2libGVDb2x1bW5zLnB1c2goY29sdW1uUGF0aFNwbGl0W2NvbHVtblBhdGhTcGxpdC5sZW5ndGggLSAxXSk7XG5cdH0pO1xuXHRsZXQgc3VidGl0bGVDb2x1bW46IHN0cmluZyA9IFwiXCI7IC8vc2V0IHRoZSBjb3JyZXNzcG9uZGluZyBzdWJ0aXRsZSBjb2x1bW5cblx0aWYgKGhlYWRlckluZm9UaXRsZVBhdGggIT09IHVuZGVmaW5lZCAmJiBhVmlzaWJsZUNvbHVtbnMuaW5kZXhPZihoZWFkZXJJbmZvVGl0bGVQYXRoKSAhPT0gLTEpIHtcblx0XHRzdWJ0aXRsZUNvbHVtbiA9IGhlYWRlckluZm9UaXRsZVBhdGg7XG5cdH0gZWxzZSBpZiAoXG5cdFx0c2VtYW50aWNLZXlDb2x1bW5zICE9PSB1bmRlZmluZWQgJiZcblx0XHRzZW1hbnRpY0tleUNvbHVtbnMubGVuZ3RoID09PSAxICYmXG5cdFx0YVZpc2libGVDb2x1bW5zLmluZGV4T2Yoc2VtYW50aWNLZXlDb2x1bW5zWzBdKSAhPT0gLTFcblx0KSB7XG5cdFx0c3VidGl0bGVDb2x1bW4gPSBzZW1hbnRpY0tleUNvbHVtbnNbMF07XG5cdH1cblx0Ly8gc2V0IGNvcnJlY3QgY29udGV4dCB0byBjb3JyZWN0IG1lc3NhZ2UgaW4gbWVzc2FnZSBtb2RlbFxuXHRlbHNlIGlmIChhRmlsdGVyZWRUZWNobmljYWxLZXlzICE9PSB1bmRlZmluZWQgJiYgYUZpbHRlcmVkVGVjaG5pY2FsS2V5cy5sZW5ndGggPT09IDEpIHtcblx0XHRzdWJ0aXRsZUNvbHVtbiA9IGFGaWx0ZXJlZFRlY2huaWNhbEtleXNbMF07XG5cdH1cblx0cmV0dXJuIHN1YnRpdGxlQ29sdW1uO1xufVxuXG5mdW5jdGlvbiBnZXRNZXNzYWdlU3RyaXBUZXh0KFxuXHR2aWV3OiBhbnksXG5cdGFJZ25vcmVkTGFiZWxzOiBhbnksXG5cdG9GaWx0ZXJCYXI6IGFueSxcblx0YklzQ2hhcnQ6IGFueSxcblx0YklzU2VhcmNoSWdub3JlZDogYW55LFxuXHRzVGFiVGl0bGU6IGFueSxcblx0b1Jlc291cmNlQnVuZGxlOiBhbnksXG5cdGZuR2V0TG9jYWxpemVkVGV4dDogYW55XG4pOiBzdHJpbmcge1xuXHRsZXQgc1RleHQgPSBcIlwiO1xuXHRpZiAoYklzQ2hhcnQpIHtcblx0XHRjb25zdCBvQ2hhcnQgPSB2aWV3LmdldENvbnRyb2xsZXIoKS5nZXRDaGFydENvbnRyb2woKTtcblx0XHRjb25zdCBiSXNEcmFmdFN1cHBvcnRlZCA9IG9DaGFydC5kYXRhKFwiZHJhZnRTdXBwb3J0ZWRcIikgPT09IFwidHJ1ZVwiO1xuXHRcdGNvbnN0IG9NYWNyb1Jlc291cmNlQnVuZGxlID0gQ29yZS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUubWFjcm9zXCIpIGFzIFJlc291cmNlQnVuZGxlO1xuXHRcdGJJc1NlYXJjaElnbm9yZWQgPSBiSXNTZWFyY2hJZ25vcmVkICYmIGFJZ25vcmVkTGFiZWxzLmluY2x1ZGVzKG9NYWNyb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0ZJTFRFUkJBUl9TRUFSQ0hcIikpO1xuXHRcdGlmIChhSWdub3JlZExhYmVscy5sZW5ndGggPT09IDIgJiYgYklzU2VhcmNoSWdub3JlZCAmJiBiSXNEcmFmdFN1cHBvcnRlZCkge1xuXHRcdFx0c1RleHQgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTFJfTVVMVElWSVpfQ0hBUlRfSUdOT1JFRF9GSUxURVJfRFJBRlRfREFUQV9BTkRfU0VBUkNIXCIpO1xuXHRcdH0gZWxzZSBpZiAoYUlnbm9yZWRMYWJlbHMubGVuZ3RoID09PSAxICYmIGJJc0RyYWZ0U3VwcG9ydGVkKSB7XG5cdFx0XHRzVGV4dCA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NVUxUSVZJWl9DSEFSVF9JR05PUkVEX0ZJTFRFUl9EUkFGVF9EQVRBXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBzUmVzb3VyY2UgPVxuXHRcdFx0XHRcIkNfTFJfTVVMVElWSVpfQ0hBUlRfXCIgK1xuXHRcdFx0XHQoYUlnbm9yZWRMYWJlbHMubGVuZ3RoID09PSAxID8gXCJTSU5HTEVcIiA6IFwiTVVMVElcIikgK1xuXHRcdFx0XHRcIl9JR05PUkVEX0ZJTFRFUl9cIiArXG5cdFx0XHRcdChzeXN0ZW0uZGVza3RvcCA/IFwiTEFSR0VcIiA6IFwiU01BTExcIik7XG5cdFx0XHRzVGV4dCA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KHNSZXNvdXJjZSwgW2FJZ25vcmVkTGFiZWxzLmpvaW4oXCIsIFwiKV0pO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb25zdCBzUmVzb3VyY2UgPVxuXHRcdFx0XHRcIkNfTFJfTVVMVElUQUJMRVNfXCIgK1xuXHRcdFx0XHQoYUlnbm9yZWRMYWJlbHMubGVuZ3RoID09PSAxID8gXCJTSU5HTEVcIiA6IFwiTVVMVElcIikgK1xuXHRcdFx0XHRcIl9JR05PUkVEX0ZJTFRFUl9cIiArXG5cdFx0XHRcdChzeXN0ZW0uZGVza3RvcCA/IFwiTEFSR0VcIiA6IFwiU01BTExcIiksXG5cdFx0XHRzTG9jYWxpemVkVGFibGVUaXRsZSA9IGZuR2V0TG9jYWxpemVkVGV4dChzVGFiVGl0bGUsIG9GaWx0ZXJCYXIpO1xuXHRcdHNUZXh0ID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoc1Jlc291cmNlLCBbYUlnbm9yZWRMYWJlbHMuam9pbihcIiwgXCIpLCBzTG9jYWxpemVkVGFibGVUaXRsZV0pO1xuXHR9XG5cdHJldHVybiBzVGV4dDtcbn1cblxuLy8gR2V0IHRoZSBwYXRoIGZvciBhY3Rpb24gcGFyYW1ldGVycyB0aGF0IGlzIG5lZWRlZCB0byByZWFkIHRoZSBhbm5vdGF0aW9uc1xuZnVuY3Rpb24gZ2V0UGFyYW1ldGVyUGF0aChzUGF0aDogYW55LCBzUGFyYW1ldGVyOiBhbnkpIHtcblx0bGV0IHNDb250ZXh0O1xuXHRpZiAoc1BhdGguaW5kZXhPZihcIkAkdWk1Lm92ZXJsb2FkXCIpID4gLTEpIHtcblx0XHRzQ29udGV4dCA9IHNQYXRoLnNwbGl0KFwiQCR1aTUub3ZlcmxvYWRcIilbMF07XG5cdH0gZWxzZSB7XG5cdFx0Ly8gRm9yIFVuYm91bmQgQWN0aW9ucyBpbiBBY3Rpb24gUGFyYW1ldGVyIERpYWxvZ3Ncblx0XHRjb25zdCBhQWN0aW9uID0gc1BhdGguc3BsaXQoXCIvMFwiKVswXS5zcGxpdChcIi5cIik7XG5cdFx0c0NvbnRleHQgPSBgLyR7YUFjdGlvblthQWN0aW9uLmxlbmd0aCAtIDFdfS9gO1xuXHR9XG5cdHJldHVybiBzQ29udGV4dCArIHNQYXJhbWV0ZXI7XG59XG5cbmNvbnN0IENvbW1vblV0aWxzID0ge1xuXHRpc1Byb3BlcnR5RmlsdGVyYWJsZTogaXNQcm9wZXJ0eUZpbHRlcmFibGUsXG5cdGlzRmllbGRDb250cm9sUGF0aEluYXBwbGljYWJsZTogaXNGaWVsZENvbnRyb2xQYXRoSW5hcHBsaWNhYmxlLFxuXHRyZW1vdmVTZW5zaXRpdmVEYXRhOiByZW1vdmVTZW5zaXRpdmVEYXRhLFxuXHRmaXJlQnV0dG9uUHJlc3M6IGZuRmlyZUJ1dHRvblByZXNzLFxuXHRnZXRUYXJnZXRWaWV3OiBnZXRUYXJnZXRWaWV3LFxuXHRoYXNUcmFuc2llbnRDb250ZXh0OiBmbkhhc1RyYW5zaWVudENvbnRleHRzLFxuXHR1cGRhdGVSZWxhdGVkQXBwc0RldGFpbHM6IGZuVXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzLFxuXHRyZXNvbHZlU3RyaW5ndG9Cb29sZWFuOiBmblJlc29sdmVTdHJpbmd0b0Jvb2xlYW4sXG5cdGdldEFwcENvbXBvbmVudDogZ2V0QXBwQ29tcG9uZW50LFxuXHRnZXRNYW5kYXRvcnlGaWx0ZXJGaWVsZHM6IGZuR2V0TWFuZGF0b3J5RmlsdGVyRmllbGRzLFxuXHRnZXRDb250ZXh0UGF0aFByb3BlcnRpZXM6IGZuR2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzLFxuXHRnZXRQYXJhbWV0ZXJJbmZvOiBnZXRQYXJhbWV0ZXJJbmZvLFxuXHR1cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eTogZm5VcGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSxcblx0Z2V0VHJhbnNsYXRlZFRleHQ6IGdldFRyYW5zbGF0ZWRUZXh0LFxuXHRnZXRFbnRpdHlTZXROYW1lOiBnZXRFbnRpdHlTZXROYW1lLFxuXHRnZXRBY3Rpb25QYXRoOiBnZXRBY3Rpb25QYXRoLFxuXHRjb21wdXRlRGlzcGxheU1vZGU6IGNvbXB1dGVEaXNwbGF5TW9kZSxcblx0c2V0QWN0aW9uRW5hYmxlbWVudDogc2V0QWN0aW9uRW5hYmxlbWVudCxcblx0aXNTdGlja3lFZGl0TW9kZTogaXNTdGlja3lFZGl0TW9kZSxcblx0Z2V0T3BlcmF0b3JzRm9yUHJvcGVydHk6IGdldE9wZXJhdG9yc0ZvclByb3BlcnR5LFxuXHRhZGRTZWxlY3Rpb25WYXJpYW50VG9Db25kaXRpb25zOiBhZGRTZWxlY3Rpb25WYXJpYW50VG9Db25kaXRpb25zLFxuXHRhZGRFeHRlcm5hbFN0YXRlRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudDogYWRkRXh0ZXJuYWxTdGF0ZUZpbHRlcnNUb1NlbGVjdGlvblZhcmlhbnQsXG5cdGFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50OiBhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudCxcblx0YWRkRGVmYXVsdERpc3BsYXlDdXJyZW5jeTogYWRkRGVmYXVsdERpc3BsYXlDdXJyZW5jeSxcblx0Z2V0Tm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzOiBnZXROb25Db21wdXRlZFZpc2libGVGaWVsZHMsXG5cdHNldFVzZXJEZWZhdWx0czogc2V0VXNlckRlZmF1bHRzLFxuXHRnZXRTaGVsbFNlcnZpY2VzOiBnZXRTaGVsbFNlcnZpY2VzLFxuXHRnZXRIYXNoOiBnZXRIYXNoLFxuXHRnZXRJQk5BY3Rpb25zOiBmbkdldElCTkFjdGlvbnMsXG5cdGdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbjogZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uLFxuXHRnZXRTZW1hbnRpY09iamVjdE1hcHBpbmc6IGdldFNlbWFudGljT2JqZWN0TWFwcGluZyxcblx0c2V0U2VtYW50aWNPYmplY3RNYXBwaW5nczogc2V0U2VtYW50aWNPYmplY3RNYXBwaW5ncyxcblx0Z2V0U2VtYW50aWNPYmplY3RQcm9taXNlOiBmbkdldFNlbWFudGljT2JqZWN0UHJvbWlzZSxcblx0Z2V0U2VtYW50aWNUYXJnZXRzRnJvbVBhZ2VNb2RlbDogZm5HZXRTZW1hbnRpY1RhcmdldHNGcm9tUGFnZU1vZGVsLFxuXHRnZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aDogZm5HZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aCxcblx0dXBkYXRlU2VtYW50aWNUYXJnZXRzOiBmblVwZGF0ZVNlbWFudGljVGFyZ2V0c01vZGVsLFxuXHRnZXRQcm9wZXJ0eURhdGFUeXBlOiBnZXRQcm9wZXJ0eURhdGFUeXBlLFxuXHRnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zOiBnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zLFxuXHRnZXRTZWFyY2hSZXN0cmljdGlvbnM6IGdldFNlYXJjaFJlc3RyaWN0aW9ucyxcblx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoOiBnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgsXG5cdGdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb246IGdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24sXG5cdGdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGU6IGdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGUsXG5cdHJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eTogcmVxdWVzdFNpbmdsZXRvblByb3BlcnR5LFxuXHR0ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudDogdGVtcGxhdGVDb250cm9sRnJhZ21lbnQsXG5cdGFkZEV2ZW50VG9CaW5kaW5nSW5mbzogYWRkRXZlbnRUb0JpbmRpbmdJbmZvLFxuXHRzZXRPYmplY3RNYXBwaW5nczogc2V0T2JqZWN0TWFwcGluZ3MsXG5cdEZpbHRlclJlc3RyaWN0aW9uczoge1xuXHRcdFJFUVVJUkVEX1BST1BFUlRJRVM6IFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIsXG5cdFx0Tk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFUzogXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiLFxuXHRcdEFMTE9XRURfRVhQUkVTU0lPTlM6IFwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zXCJcblx0fSxcblx0QWxsb3dlZEV4cHJlc3Npb25zUHJpbzogW1wiU2luZ2xlVmFsdWVcIiwgXCJNdWx0aVZhbHVlXCIsIFwiU2luZ2xlUmFuZ2VcIiwgXCJNdWx0aVJhbmdlXCIsIFwiU2VhcmNoRXhwcmVzc2lvblwiLCBcIk11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cIl0sXG5cdG5vcm1hbGl6ZVNlYXJjaFRlcm06IG5vcm1hbGl6ZVNlYXJjaFRlcm0sXG5cdGZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZDogZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkLFxuXHRnZXRTaW5nbGV0b25QYXRoOiBnZXRTaW5nbGV0b25QYXRoLFxuXHRnZXRNZXNzYWdlU3RyaXBUZXh0OiBnZXRNZXNzYWdlU3RyaXBUZXh0LFxuXHRnZXRNZXNzYWdlQ29sdW1uOiBnZXRNZXNzYWdlQ29sdW1uLFxuXHRnZXRQYXJhbWV0ZXJQYXRoOiBnZXRQYXJhbWV0ZXJQYXRoLFxuXHRnZXRPcGVyYXRvcnNGb3JEYXRlUHJvcGVydHk6IGdldE9wZXJhdG9yc0ZvckRhdGVQcm9wZXJ0eVxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ29tbW9uVXRpbHM7XG4iXX0=
|
|
@@ -65,6 +65,7 @@ function normalizeSearchTerm(sSearchTerm: string) {
|
|
|
65
65
|
|
|
66
66
|
return sSearchTerm
|
|
67
67
|
.replace(/"/g, " ")
|
|
68
|
+
.replace(/\\/g, "\\\\") //escape backslash characters. Can be removed if odata/binding handles backend errors responds.
|
|
68
69
|
.split(/\s+/)
|
|
69
70
|
.reduce(function (sNormalized: string | undefined, sCurrentWord: string) {
|
|
70
71
|
if (sCurrentWord !== "") {
|
|
@@ -67,7 +67,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/formatters/FPMFormatter", "sap/fe/co
|
|
|
67
67
|
interfaces: [],
|
|
68
68
|
controls: [],
|
|
69
69
|
elements: [],
|
|
70
|
-
version: "1.102.
|
|
70
|
+
version: "1.102.7",
|
|
71
71
|
noLibraryCSS: true,
|
|
72
72
|
extensions: {
|
|
73
73
|
//Configuration used for rule loading of Support Assistant
|