@sapui5/sap.fe.test 1.140.0 → 1.141.0

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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.fe.test",
3
- "version": "1.140.0",
3
+ "version": "1.141.0",
4
4
  "description": "SAPUI5 Library sap.fe.test",
5
5
  "keywords": [
6
6
  "sapui5",
@@ -6,7 +6,7 @@
6
6
  SAP UI development toolkit for HTML5 (SAPUI5)
7
7
  (c) Copyright 2009-2021 SAP SE. All rights reserved
8
8
  </copyright>
9
- <version>1.140.0</version>
9
+ <version>1.141.0</version>
10
10
 
11
11
  <documentation>UI5 library: sap.fe.test</documentation>
12
12
 
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log", "sap/base/util/LoaderExtensions", "sap/base/util/uid", "sap/fe/base/jsx-runtime/jsx", "sap/fe/core/AppComponent", "sap/fe/core/PageController", "sap/fe/core/TemplateModel", "sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor", "sap/fe/core/converters/ConverterContext", "sap/fe/core/converters/ManifestWrapper", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/services/SideEffectsServiceFactory", "sap/fe/test/UI5MockHelper", "sap/m/Page", "sap/ui/base/BindingInfo", "sap/ui/base/BindingParser", "sap/ui/base/ManagedObjectMetadata", "sap/ui/core/Component", "sap/ui/core/InvisibleText", "sap/ui/core/XMLTemplateProcessor", "sap/ui/core/util/XMLPreprocessor", "sap/ui/core/util/serializer/Serializer", "sap/ui/fl/Utils", "sap/ui/fl/apply/_internal/flexState/FlexState", "sap/ui/fl/apply/_internal/preprocessors/XmlPreprocessor", "sap/ui/fl/initial/_internal/Loader", "sap/ui/fl/initial/_internal/Storage", "sap/ui/model/json/JSONModel", "sap/ui/model/odata/v4/ODataMetaModel", "sap/ui/model/odata/v4/ODataModel", "sap/ui/model/odata/v4/lib/_MetadataRequestor", "xpath", "./JestFlexibilityHelper", "sap/fe/base/jsx-runtime/jsx"], function (compiler, fs, htmljs_parser, path, Log, LoaderExtensions, uid, jsx, AppComponent, PageController, TemplateModel, BuildingBlockTemplateProcessor, ConverterContext, ManifestWrapper, MetaModelConverter, SideEffectsFactory, UI5MockHelper, Page, BindingInfo, BindingParser, ManagedObjectMetadata, Component, InvisibleText, XMLTemplateProcessor, XMLPreprocessor, Serializer, Utils, FlexState, XmlPreprocessor, Loader, AppStorage, JSONModel, ODataMetaModel, ODataModel, _MetadataRequestor, xpath, JestFlexibilityHelper, _jsx) {
5
+ sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log", "sap/base/util/LoaderExtensions", "sap/base/util/uid", "sap/fe/base/jsx-runtime/jsx", "sap/fe/core/AppComponent", "sap/fe/core/PageController", "sap/fe/core/TemplateModel", "sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor", "sap/fe/core/converters/ConverterContext", "sap/fe/core/converters/ManifestWrapper", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/formatters/ValueFormatter", "sap/fe/core/services/SideEffectsServiceFactory", "sap/fe/test/UI5MockHelper", "sap/m/Page", "sap/ui/base/BindingInfo", "sap/ui/base/BindingParser", "sap/ui/base/ManagedObjectMetadata", "sap/ui/core/Component", "sap/ui/core/InvisibleText", "sap/ui/core/XMLTemplateProcessor", "sap/ui/core/util/XMLPreprocessor", "sap/ui/core/util/serializer/Serializer", "sap/ui/fl/Utils", "sap/ui/fl/apply/_internal/flexState/FlexState", "sap/ui/fl/initial/_internal/Loader", "sap/ui/fl/initial/_internal/Storage", "sap/ui/fl/initial/_internal/preprocessors/XmlPreprocessor", "sap/ui/model/json/JSONModel", "sap/ui/model/odata/v4/ODataMetaModel", "sap/ui/model/odata/v4/ODataModel", "sap/ui/model/odata/v4/lib/_MetadataRequestor", "xpath", "./JestFlexibilityHelper", "sap/fe/base/jsx-runtime/jsx"], function (compiler, fs, htmljs_parser, path, Log, LoaderExtensions, uid, jsx, AppComponent, PageController, TemplateModel, BuildingBlockTemplateProcessor, ConverterContext, ManifestWrapper, MetaModelConverter, ValueFormatter, SideEffectsFactory, UI5MockHelper, Page, BindingInfo, BindingParser, ManagedObjectMetadata, Component, InvisibleText, XMLTemplateProcessor, XMLPreprocessor, Serializer, Utils, FlexState, Loader, AppStorage, XmlPreprocessor, JSONModel, ODataMetaModel, ODataModel, _MetadataRequestor, xpath, JestFlexibilityHelper, _jsx) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
@@ -449,7 +449,13 @@ sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log
449
449
  * @returns The evaluated binding.
450
450
  */
451
451
  function evaluateBindingWithModel(bindingString, modelContent, namedModelsContent) {
452
- const bindingElement = BindingInfo.parse(bindingString);
452
+ const bindingElement = BindingInfo.parse(bindingString, null, false, false, false, false, {
453
+ ".": {
454
+ _formatters: {
455
+ ValueFormatter: ValueFormatter
456
+ }
457
+ }
458
+ });
453
459
  const text = new InvisibleText();
454
460
  text.bindProperty("text", bindingElement);
455
461
  const defaultModel = new JSONModel(modelContent);
@@ -497,7 +503,10 @@ sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log
497
503
  };
498
504
  //fake changes
499
505
  jest.spyOn(AppStorage, "loadFlexData").mockReturnValue(Promise.resolve(changes));
500
- jest.spyOn(Loader, "loadFlexData").mockReturnValue(Promise.resolve(changes));
506
+ jest.spyOn(Loader, "getFlexData").mockReturnValue(Promise.resolve({
507
+ data: changes
508
+ }));
509
+ jest.spyOn(Loader, "getCachedFlexData").mockReturnValue(changes);
501
510
  jest.spyOn(Component, "getComponentById").mockReturnValue(oAppComponent);
502
511
  jest.spyOn(Utils, "getAppComponentForControl").mockReturnValue(oAppComponent);
503
512
  await FlexState.initialize({
@@ -963,6 +972,9 @@ sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log
963
972
  const id = options?.componentId ?? `sap.fe.test.${guid}`;
964
973
  const cdsContent = fs.readFileSync(cdsFile).toString();
965
974
  window.jestUI5.mockUrl(`/sap/fe/core/mock/${guid}/$metadata?sap-language=EN`, cdsContent);
975
+ if (!options?.pageContent) {
976
+ jest.spyOn(PageController.prototype, "_onInternalAfterBinding").mockImplementation(jest.fn());
977
+ }
966
978
  let DefaultPageContent = /*#__PURE__*/function (_PageController) {
967
979
  function DefaultPageContent() {
968
980
  return _PageController.apply(this, arguments) || this;
@@ -1091,4 +1103,4 @@ sap.ui.define(["@sap/cds-compiler", "fs", "htmljs-parser", "path", "sap/base/Log
1091
1103
  _exports.delayFor = delayFor;
1092
1104
  return _exports;
1093
1105
  }, false);
1094
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMb2ciLCJzZXRMZXZlbCIsImplc3QiLCJzZXRUaW1lb3V0IiwibmFtZVNwYWNlTWFwIiwibWFjcm8iLCJtYWNyb1NoYXJlIiwibWFjcm9zIiwiZmVCQiIsIm1hY3JvRmllbGQiLCJtYWNyb2RhdGEiLCJsb2ciLCJjdXN0b21EYXRhIiwiY29udHJvbCIsImNvbnRyb2xzIiwiY29yZSIsImR0IiwibSIsImYiLCJmbCIsImludGVybmFsTWFjcm8iLCJtZGMiLCJhY3Rpb250b29sYmFyIiwibWRjRmllbGQiLCJtZGNUYWJsZSIsInUiLCJ1eGFwIiwibWFjcm9NaWNyb0NoYXJ0IiwibWljcm9DaGFydCIsIm1hY3JvVGFibGUiLCJtZGN2YyIsIm1kY3YiLCJ2YWx1ZUhlbHAiLCJjb250ZW50U3dpdGNoZXIiLCJmaWx0ZXJCYXIiLCJkcmFmdEluZGljYXRvciIsInZpc3VhbEZpbHRlciIsImZpZWxkaGVscCIsInJldmVzZU5hbWVzcGFjZU1hcCIsIk9iamVjdCIsImtleXMiLCJyZWR1Y2UiLCJyZXZlcnNlTWFwIiwiY3VycmVudE5hbWUiLCJzZWxlY3QiLCJ4cGF0aCIsInVzZU5hbWVzcGFjZXMiLCJkZWZhdWx0RmFrZVNpZGVFZmZlY3RTZXJ2aWNlIiwiY29tcHV0ZUZpZWxkR3JvdXBJZHMiLCJfZ2V0VGVtcGxhdGVkU2VsZWN0b3IiLCJ4bWxkb20iLCJzZWxlY3RvciIsInJvb3RQYXRoIiwibm9kZU5hbWUiLCJzdGFydHNXaXRoIiwiX2J1aWxkUHJlUHJvY2Vzc29yU2V0dGluZ3MiLCJzTWV0YWRhdGFVcmwiLCJtQmluZGluZ0NvbnRleHRzIiwibU1vZGVscyIsImZha2VTaWRlRWZmZWN0U2VydmljZSIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJoYXNPd25Qcm9wZXJ0eSIsImFzc2lnbiIsImNvbnZlcnRlckNvbnRleHQiLCJUZW1wbGF0ZU1vZGVsIiwiZm9yRWFjaCIsInNNb2RlbE5hbWUiLCJpc1RlbXBsYXRlTW9kZWwiLCJkYXRhIiwic2V0dGluZ3MiLCJtb2RlbHMiLCJtZXRhTW9kZWwiLCJiaW5kaW5nQ29udGV4dHMiLCJhcHBDb21wb25lbnQiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJmbiIsImdldERpYWdub3N0aWNzIiwidW5kZWZpbmVkIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImdldE1hbmlmZXN0RW50cnkiLCJtb2NrUmV0dXJuVmFsdWUiLCJzS2V5IiwiZXhwZWN0IiwiZ2V0T2JqZWN0IiwidG9CZURlZmluZWQiLCJvTW9kZWwiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsIl9sb2FkUmVzb3VyY2VWaWV3Iiwidmlld05hbWUiLCJuYW1lIiwicmVwbGFjZSIsInZpZXciLCJMb2FkZXJFeHRlbnNpb25zIiwibG9hZFJlc291cmNlIiwiZG9jdW1lbnRFbGVtZW50IiwicnVuWFBhdGhRdWVyeSIsImV4dGVuZCIsInRvSGF2ZUNvbnRyb2wiLCJub2RlcyIsIm1lc3NhZ2UiLCJvdXRwdXRYbWwiLCJzZXJpYWxpemVYTUwiLCJwYXNzIiwibGVuZ3RoIiwidG9Ob3RIYXZlQ29udHJvbCIsInRvSGF2ZVRlbXBsYXRpbmdFcnJvcnMiLCJ4bWwiLCJ4bWxUZXh0IiwiYmFzZTY0RW50cmllcyIsIm1hdGNoIiwiZXJyb3JNZXNzYWdlcyIsIm1hcCIsImF0b2IiLCJzbGljZSIsImpvaW4iLCJfZXhwb3J0cyIsImZvcm1hdEJ1aWxkaW5nQmxvY2tYTUwiLCJ4bWxTdHJpbmciLCJBcnJheSIsImlzQXJyYXkiLCJmb3JtYXRYTUwiLCJnZXRDb250cm9sQXR0cmlidXRlIiwiY29udHJvbFNlbGVjdG9yIiwiYXR0cmlidXRlTmFtZSIsInhtbERvbSIsInNlcmlhbGl6ZXIiLCJ3aW5kb3ciLCJYTUxTZXJpYWxpemVyIiwibm9kZSIsInNlcmlhbGl6ZVRvU3RyaW5nIiwiU1RBUlQiLCJFTkQiLCJVSUQiLCJVSUQyIiwibGluZXMiLCJjdXJyZW50TGluZSIsImxldmVsIiwiYXR0cmlidXRlcyIsIm5ld2xpbmUiLCJwdXNoIiwicmVwZWF0IiwiYXBwZW5kQXR0cmlidXRlcyIsInNvcnQiLCJhIiwiYiIsImxvY2FsZUNvbXBhcmUiLCJpbmNsdWRlcyIsImF0dHJpYnV0ZSIsInZhbHVlIiwiYXBwZW5kIiwicGFyc2VyIiwicmVhZCIsImNyZWF0ZVBhcnNlciIsIm9uT3BlblRhZ1N0YXJ0Iiwib25PcGVuVGFnTmFtZSIsIm9uQXR0ck5hbWUiLCJ1bnNoaWZ0Iiwib25BdHRyVmFsdWUiLCJvbk9wZW5UYWdFbmQiLCJzZWxmQ2xvc2VkIiwib25DbG9zZVRhZ1N0YXJ0Iiwib25DbG9zZVRhZ05hbWUiLCJvbkNsb3NlVGFnRW5kIiwicGFyc2UiLCJ0cmltIiwiY29tcGlsZUNEUyIsImNkc1VybCIsIm9wdGlvbnMiLCJhcmd1bWVudHMiLCJjZHNTdHJpbmciLCJmcyIsInJlYWRGaWxlU3luYyIsImVkbXhDb250ZW50IiwiY2RzMmVkbXgiLCJkaXIiLCJwYXRoIiwicmVzb2x2ZSIsImFsbE9wdGlvbnMiLCJlbnRyaWVzIiwiZWRteEZpbGVOYW1lIiwiZmlsZW5hbWUiLCJfcmVmIiwib3B0aW9uS2V5Iiwib3B0aW9uVmFsdWUiLCJ0b1N0cmluZyIsImJhc2VuYW1lIiwiZWRteEZpbGVQYXRoIiwibWtkaXJTeW5jIiwicmVjdXJzaXZlIiwid3JpdGVGaWxlU3luYyIsImNkcyIsInNlcnZpY2UiLCJzb3VyY2VzIiwicmVxdWlyZSIsImNzbiIsImNvbXBpbGVyIiwiY29tcGlsZVNvdXJjZXMiLCJlZG14T3B0aW9ucyIsIm9kYXRhRm9yZWlnbktleXMiLCJvZGF0YUZvcm1hdCIsIm9kYXRhQ29udGFpbm1lbnQiLCJlZG14IiwidG8iLCJFcnJvciIsImdldEZha2VTaWRlRWZmZWN0c1NlcnZpY2UiLCJjbGFzc05hbWVPRGF0YU1vZGVsIiwic2NvcGVPYmplY3QiLCJnZXRNb2RlbCIsImlzQSIsImdldFNlcnZpY2VVcmwiLCJnZXRTZXJ2aWNlIiwiZ2V0Q2FwYWJpbGl0aWVzIiwic2VydmljZUluc3RhbmNlIiwiU2lkZUVmZmVjdHNGYWN0b3J5IiwiY3JlYXRlSW5zdGFuY2UiLCJzY29wZVR5cGUiLCJnZXRJbnRlcmZhY2UiLCJnZXRGYWtlRGlhZ25vc3RpY3MiLCJpc3N1ZXMiLCJhZGRJc3N1ZSIsImlzc3VlQ2F0ZWdvcnkiLCJpc3N1ZVNldmVyaXR5IiwiZGV0YWlscyIsImdldElzc3VlcyIsImNoZWNrSWZJc3N1ZUV4aXN0cyIsImZpbmQiLCJpc3N1ZSIsImdldENvbnZlcnRlckNvbnRleHRGb3JUZXN0IiwibWFuaWZlc3RTZXR0aW5ncyIsImNvbnZlcnRlZFR5cGVzIiwiY29udmVydFR5cGVzIiwiZGF0YU1vZGVsUGF0aCIsImNvbnRleHRQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZW50aXR5U2V0IiwiQ29udmVydGVyQ29udGV4dCIsIk1hbmlmZXN0V3JhcHBlciIsIm1ldGFNb2RlbENhY2hlIiwib1JlcXVlc3RvciIsIl9NZXRhZGF0YVJlcXVlc3RvciIsImNyZWF0ZSIsIk9EYXRhTWV0YU1vZGVsIiwiX3JlcXVlc3RBbm5vdGF0aW9uQ2hhbmdlcyIsImZldGNoRW50aXR5Q29udGFpbmVyIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5IiwicHJvcGVydHkiLCJ0YXJnZXRQYXRoIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsInRhcmdldE9iamVjdCIsInRhcmdldEVudGl0eVNldCIsInRhcmdldEVudGl0eVR5cGUiLCJlbnRpdHlUeXBlIiwiY29udGV4dExvY2F0aW9uIiwiZXZhbHVhdGVCaW5kaW5nIiwiYmluZGluZ1N0cmluZyIsImJpbmRpbmdFbGVtZW50IiwiQmluZGluZ0luZm8iLCJfbGVuIiwiYXJncyIsIl9rZXkiLCJmb3JtYXR0ZXIiLCJhcHBseSIsImV2YWx1YXRlQmluZGluZ1dpdGhNb2RlbCIsIm1vZGVsQ29udGVudCIsIm5hbWVkTW9kZWxzQ29udGVudCIsInRleHQiLCJJbnZpc2libGVUZXh0IiwiYmluZFByb3BlcnR5IiwiZGVmYXVsdE1vZGVsIiwiSlNPTk1vZGVsIiwic2V0TW9kZWwiLCJzZXRCaW5kaW5nQ29udGV4dCIsImNvbnRlbnQiLCJtb2RlbCIsImdldFRleHQiLCJURVNUVklFV0lEIiwiYXBwbHlGbGV4Q2hhbmdlcyIsImZsZXhDaGFuZ2VzIiwicmVzdWx0WE1MIiwicXVlcnlTZWxlY3RvckFsbCIsImlkIiwiY2hhbmdlcyIsImNyZWF0ZUZsZXhpYmlsaXR5Q2hhbmdlc09iamVjdCIsImFwcElkIiwib01hbmlmZXN0IiwidHlwZSIsImNyb3NzTmF2aWdhdGlvbiIsIm91dGJvdW5kcyIsIm9BcHBDb21wb25lbnQiLCJnZXRDb21wb25lbnREYXRhIiwiZ2V0TWFuaWZlc3RPYmplY3QiLCJnZXRFbnRyeSIsImdldExvY2FsSWQiLCJzSWQiLCJzcHlPbiIsIkFwcFN0b3JhZ2UiLCJQcm9taXNlIiwiTG9hZGVyIiwiQ29tcG9uZW50IiwiVXRpbHMiLCJGbGV4U3RhdGUiLCJpbml0aWFsaXplIiwiY29tcG9uZW50SWQiLCJYbWxQcmVwcm9jZXNzb3IiLCJwcm9jZXNzIiwiY2hhbmdlc0FwcGxpZWQiLCJnZXRDaGFuZ2VzRnJvbVhNTCIsInRvQmUiLCJ2YXJpYW50RGVwZW5kZW50Q29udHJvbENoYW5nZXMiLCJmbGF0TWFwIiwiZSIsImZpbHRlciIsImF0dHIiLCJnZXRUZW1wbGF0aW5nUmVzdWx0IiwieG1sSW5wdXQiLCJjcmVhdGVNb2NrUmVzb3VyY2VNb2RlbCIsInRlbXBsYXRlZFhtbCIsIkRPTVBhcnNlciIsInhtbERvYyIsInBhcnNlRnJvbVN0cmluZyIsIm9QcmVwcm9jZXNzb3JTZXR0aW5ncyIsIlhNTFByZXByb2Nlc3NvciIsImZpcnN0RWxlbWVudENoaWxkIiwiZ2V0VGVtcGxhdGVkWE1MIiwianN4IiwiZGVmaW5lWE1MTmFtZXNwYWNlTWFwIiwidGVtcGxhdGVkWE1MIiwic2VyaWFsaWVkWE1MIiwibm90IiwicHJvY2Vzc1ZpZXciLCJvVmlld0RvY3VtZW50Iiwib1ByZXByb2Nlc3NlZFZpZXciLCJhc0VsZW1lbnQiLCJhc1N0cmluZyIsIm91dGVySFRNTCIsInByb2Nlc3NGcmFnbWVudCIsInRlc3REYXRhIiwiaW5wdXRYbWwiLCJpbnB1dERvYyIsImpzb25Nb2RlbCIsInNldERhdGEiLCJyZXN1bHREb2MiLCJmcmFnbWVudHMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImZyYWdtZW50IiwiaW5uZXJIVE1MIiwieG1sUmVzdWx0IiwiY2hpbGRyZW4iLCJzZXJpYWxpemVDb250cm9sIiwiY29udHJvbFRvU2VyaWFsaXplIiwic2hvd0N1c3RvbVN0eWxlQ2xhc3NlcyIsInRhYkNvdW50IiwiQ09OVFJPTElEIiwiZ2V0VGFiIiwidG9BZGQiLCJ0YWIiLCJpIiwic2VyaWFsaXplRGVsZWdhdGUiLCJzdGFydCIsInNBZ2dyZWdhdGlvbk5hbWUiLCJjb250cm9sRGV0YWlsIiwiZ2V0UGFyZW50IiwiaW5kZXhJblBhcmVudCIsImdldEFnZ3JlZ2F0aW9uIiwiaW5kZXhPZiIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsImVuZCIsIm1pZGRsZSIsImdldElkIiwiTWFuYWdlZE9iamVjdE1ldGFkYXRhIiwiaXNHZW5lcmF0ZWRJZCIsIm9Db250cm9sS2V5IiwibVByb3BlcnRpZXMiLCJwcm9wZXJ0eVZhbHVlIiwiSlNPTiIsInN0cmluZ2lmeSIsIm1CaW5kaW5nSW5mb3MiLCJiaW5kaW5nRGV0YWlsIiwib091dHB1dEZvcm1hdCIsImJpbmRpbmciLCJtQXNzb2NpYXRpb25zIiwiYXNzb2NpYXRpb25WYWx1ZSIsImFzc29jaWF0aW9uVmFsdWVFbGVtZW50IiwiYUN1c3RvbVN0eWxlQ2xhc3NlcyIsIm1FdmVudFJlZ2lzdHJ5Iiwic3RhcnRBZ2dyZWdhdGlvbiIsInNOYW1lIiwib3V0IiwiZW5kQWdncmVnYXRpb24iLCJjb250cm9sVG9SZW5kZXIiLCJTZXJpYWxpemVyIiwic2VyaWFsaXplIiwic2VyaWFsaXplQ29udHJvbEFzWE1MIiwicHJlZmVyVmFsdWUiLCJkZWZpbmVkTmFtZXNwYWNlcyIsImdldE5hbWVzcGFjZUFsaWFzIiwiY2xhc3NOYW1lIiwibmFtZXNTcGxpdCIsInNwbGl0IiwibmFtZXNwYWNlIiwibmFtZXNwYWNlQWxpYXMiLCJuYW1lRnVsbCIsImhhc0FnZ3JlZ2F0aW9uIiwibUFnZ3JlZ2F0aW9uc0tleSIsIm1BZ2dyZWdhdGlvbnMiLCJwcm9wTmFtZSIsImNvbmNhdCIsInVuaXF1ZUtleXMiLCJTZXQiLCJmcm9tIiwidGVtcGxhdGUiLCJmRnVuY3Rpb24iLCJvdXRYTUwiLCJjcmVhdGVBd2FpdGVyIiwiZm5SZXNvbHZlIiwibXlQcm9taXNlIiwicHJvbWlzZSIsInJlZ2lzdGVyTW9ja0ZyYWdtZW50cyIsIl9sZW4yIiwiX2tleTIiLCJvcmlnaW5hbExvYWRUZW1wbGF0ZSIsIlhNTFRlbXBsYXRlUHJvY2Vzc29yIiwibG9hZFRlbXBsYXRlUHJvbWlzZSIsImxvYWRUZW1wbGF0ZVN0dWIiLCJtb2NrSW1wbGVtZW50YXRpb24iLCJ0ZW1wbGF0ZU5hbWUiLCJleHRlbnNpb24iLCJwYXJzZVhNTFN0cmluZyIsImluaXRpYWxpemVBcHBDb21wb25lbnQiLCJ2aWV3TGV2ZWwiLCJPRGF0YU1vZGVsIiwicHJvdG90eXBlIiwiY2RzRmlsZSIsIl9fZGlybmFtZSIsImd1aWQiLCJ1aWQiLCJjZHNDb250ZW50IiwiamVzdFVJNSIsIm1vY2tVcmwiLCJEZWZhdWx0UGFnZUNvbnRlbnQiLCJfUGFnZUNvbnRyb2xsZXIiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInJlbmRlciIsIl9qc3giLCJQYWdlIiwiUGFnZUNvbnRyb2xsZXIiLCJzYXAiLCJ1aSIsImRlZmluZSIsIl9BcHBDb21wb25lbnQiLCJBcHBDb21wb25lbnQiLCJtZXRhZGF0YSIsIm1hbmlmZXN0IiwidGl0bGUiLCJkYXRhU291cmNlcyIsIm1haW5TZXJ2aWNlIiwidXJpIiwib2RhdGFWZXJzaW9uIiwiZGF0YVNvdXJjZSIsInJvdXRpbmciLCJ0YXJnZXRzIiwiRGVmYXVsdCIsIm1haW5Db250ZXh0UGF0aCIsInZpZXdUeXBlIiwidmlld0NvbnRlbnQiLCJwYWdlQ29udGVudCIsInJvdXRlcyIsInBhdHRlcm4iLCJ0YXJnZXQiLCJmZU1hbmlmZXN0U2V0dGluZ3MiLCJtb2NrQXBwQ29tcG9uZW50IiwiaW5pdGlhbGl6ZWQiLCJ2IiwiZ2V0Um91dGVyIiwiZ2V0VGFyZ2V0IiwibG9hZCIsInRlbXBsYXRlQ29tcG9uZW50Iiwib2JqZWN0IiwiZmluZEVsZW1lbnQiLCJjb2xsZWN0aW9uIiwiZWxlbWVudCIsIml0ZW0iLCJ3YWl0Rm9yRXZlbnQiLCJldmVudE5hbWUiLCJhdHRhY2hFdmVudE9uY2UiLCJldmVudCIsImtlZXBCaW5kaW5nU3RyaW5nRm9yVGVzdCIsImVuYWJsZWQiLCJCaW5kaW5nUGFyc2VyIiwiX2tlZXBCaW5kaW5nU3RyaW5ncyIsImRlbGF5Rm9yIiwiZGVsYXkiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkplc3RUZW1wbGF0aW5nSGVscGVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFueUFubm90YXRpb24sIENvbnZlcnRlZE1ldGFkYXRhLCBFbnRpdHlTZXQsIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgY29tcGlsZXIgZnJvbSBcIkBzYXAvY2RzLWNvbXBpbGVyXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCB0eXBlIHsgUmFuZ2UsIFJhbmdlcyB9IGZyb20gXCJodG1sanMtcGFyc2VyXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzZXIgfSBmcm9tIFwiaHRtbGpzLXBhcnNlclwiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgTG9hZGVyRXh0ZW5zaW9ucyBmcm9tIFwic2FwL2Jhc2UvdXRpbC9Mb2FkZXJFeHRlbnNpb25zXCI7XG5pbXBvcnQgdWlkIGZyb20gXCJzYXAvYmFzZS91dGlsL3VpZFwiO1xuaW1wb3J0IGpzeCBmcm9tIFwic2FwL2ZlL2Jhc2UvanN4LXJ1bnRpbWUvanN4XCI7XG5pbXBvcnQgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFRlbXBsYXRlQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IFRlbXBsYXRlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlTW9kZWxcIjtcbmltcG9ydCB7IHBhcnNlWE1MU3RyaW5nIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzLCBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RXcmFwcGVyXCI7XG5pbXBvcnQgeyBjb252ZXJ0VHlwZXMsIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBJRGlhZ25vc3RpY3MsIFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IElzc3VlQ2F0ZWdvcnksIElzc3VlU2V2ZXJpdHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgeyBTaWRlRWZmZWN0c1NlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IFNpZGVFZmZlY3RzRmFjdG9yeSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgY3JlYXRlTW9ja1Jlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL3Rlc3QvVUk1TW9ja0hlbHBlclwiO1xuaW1wb3J0IFBhZ2UgZnJvbSBcInNhcC9tL1BhZ2VcIjtcbmltcG9ydCBCaW5kaW5nSW5mbyBmcm9tIFwic2FwL3VpL2Jhc2UvQmluZGluZ0luZm9cIjtcbmltcG9ydCBCaW5kaW5nUGFyc2VyIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nUGFyc2VyXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIEV2ZW50UHJvdmlkZXIgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50UHJvdmlkZXJcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIHsgQmFzZUFnZ3JlZ2F0aW9uQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3RNZXRhZGF0YSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdE1ldGFkYXRhXCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBJbnZpc2libGVUZXh0IGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVUZXh0XCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0Q29udGVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9NYW5pZmVzdFwiO1xuaW1wb3J0IFhNTFRlbXBsYXRlUHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS9YTUxUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBTZXJpYWxpemVyIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL3NlcmlhbGl6ZXIvU2VyaWFsaXplclwiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCJzYXAvdWkvZmwvVXRpbHNcIjtcbmltcG9ydCBGbGV4U3RhdGUgZnJvbSBcInNhcC91aS9mbC9hcHBseS9faW50ZXJuYWwvZmxleFN0YXRlL0ZsZXhTdGF0ZVwiO1xuaW1wb3J0IFhtbFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2ZsL2FwcGx5L19pbnRlcm5hbC9wcmVwcm9jZXNzb3JzL1htbFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IExvYWRlciBmcm9tIFwic2FwL3VpL2ZsL2luaXRpYWwvX2ludGVybmFsL0xvYWRlclwiO1xuaW1wb3J0IEFwcFN0b3JhZ2UgZnJvbSBcInNhcC91aS9mbC9pbml0aWFsL19pbnRlcm5hbC9TdG9yYWdlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTWV0YU1vZGVsXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCBfTWV0YWRhdGFSZXF1ZXN0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9saWIvX01ldGFkYXRhUmVxdWVzdG9yXCI7XG5pbXBvcnQgeHBhdGggZnJvbSBcInhwYXRoXCI7XG5pbXBvcnQgeyBjcmVhdGVGbGV4aWJpbGl0eUNoYW5nZXNPYmplY3QgfSBmcm9tIFwiLi9KZXN0RmxleGliaWxpdHlIZWxwZXJcIjtcblxudHlwZSBQcmVQcm9jZXNzb3JTZXR0aW5nc1R5cGUgPSB7XG5cdG1vZGVsczoge1xuXHRcdFtuYW1lOiBzdHJpbmddOiBKU09OTW9kZWwgfCBPRGF0YU1ldGFNb2RlbDtcblx0fTtcblx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0W25hbWU6IHN0cmluZ106IENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdH07XG59O1xudHlwZSBNb2NrRnJhZ21lbnQgPSB7XG5cdG5hbWU6IHN0cmluZztcblx0Y29udGVudDogc3RyaW5nO1xufTtcblxudHlwZSBKZXN0VGVtcGxhdGVkVmlldyA9IHtcblx0YXNFbGVtZW50OiBFbGVtZW50IHwgdW5kZWZpbmVkO1xuXHRhc1N0cmluZzogc3RyaW5nO1xufTtcblxuTG9nLnNldExldmVsKDEgYXMgYW55LCBcInNhcC51aS5jb3JlLnV0aWwuWE1MUHJlcHJvY2Vzc29yXCIpO1xuamVzdC5zZXRUaW1lb3V0KDQwMDAwKTtcblxuY29uc3QgbmFtZVNwYWNlTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuXHRtYWNybzogXCJzYXAuZmUubWFjcm9zXCIsXG5cdG1hY3JvU2hhcmU6IFwic2FwLmZlLm1hY3Jvcy5zaGFyZVwiLFxuXHRtYWNyb3M6IFwic2FwLmZlLm1hY3Jvc1wiLFxuXHRmZUJCOiBcInNhcC5mZS5jb3JlLmJ1aWxkaW5nQmxvY2tzLnRlbXBsYXRpbmdcIixcblx0bWFjcm9GaWVsZDogXCJzYXAuZmUubWFjcm9zLmZpZWxkXCIsXG5cdG1hY3JvZGF0YTogXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCIsXG5cdGxvZzogXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCIsXG5cdGN1c3RvbURhdGE6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiLFxuXHRjb250cm9sOiBcInNhcC5mZS5jb3JlLmNvbnRyb2xzXCIsXG5cdGNvbnRyb2xzOiBcInNhcC5mZS5tYWNyb3MuY29udHJvbHNcIixcblx0Y29yZTogXCJzYXAudWkuY29yZVwiLFxuXHRkdDogXCJzYXAudWkuZHRcIixcblx0bTogXCJzYXAubVwiLFxuXHRmOiBcInNhcC51aS5sYXlvdXQuZm9ybVwiLFxuXHRmbDogXCJzYXAudWkuZmxcIixcblx0aW50ZXJuYWxNYWNybzogXCJzYXAuZmUubWFjcm9zLmludGVybmFsXCIsXG5cdG1kYzogXCJzYXAudWkubWRjXCIsXG5cdGFjdGlvbnRvb2xiYXI6IFwic2FwLnVpLm1kYy5hY3Rpb250b29sYmFyXCIsXG5cdG1kY0ZpZWxkOiBcInNhcC51aS5tZGMuZmllbGRcIixcblx0bWRjVGFibGU6IFwic2FwLnVpLm1kYy50YWJsZVwiLFxuXHR1OiBcInNhcC51aS51bmlmaWVkXCIsXG5cdHV4YXA6IFwic2FwLnV4YXBcIixcblx0bWFjcm9NaWNyb0NoYXJ0OiBcInNhcC5mZS5tYWNyb3MubWljcm9jaGFydFwiLFxuXHRtaWNyb0NoYXJ0OiBcInNhcC5zdWl0ZS51aS5taWNyb2NoYXJ0XCIsXG5cdG1hY3JvVGFibGU6IFwic2FwLmZlLm1hY3Jvcy50YWJsZVwiLFxuXHRtZGN2YzogXCJzYXAudWkubWRjLnZhbHVlaGVscC5jb250ZW50XCIsXG5cdG1kY3Y6IFwic2FwLnVpLm1kYy52YWx1ZWhlbHBcIixcblx0dmFsdWVIZWxwOiBcInNhcC5mZS5tYWNyb3MudmFsdWVIZWxwXCIsXG5cdGNvbnRlbnRTd2l0Y2hlcjogXCJzYXAuZmUubWFjcm9zLmNvbnRlbnRTd2l0Y2hlclwiLFxuXHRmaWx0ZXJCYXI6IFwic2FwLmZlLm1hY3Jvcy5maWx0ZXJCYXJcIixcblx0ZHJhZnRJbmRpY2F0b3I6IFwic2FwLmZlLm1hY3Jvcy5kcmFmdEluZGljYXRvclwiLFxuXHR2aXN1YWxGaWx0ZXI6IFwic2FwLmZlLm1hY3Jvcy52aXN1YWxmaWx0ZXJzXCIsXG5cdGZpZWxkaGVscDogXCJzYXAudWkuY29yZS5maWVsZGhlbHBcIlxufTtcbmNvbnN0IHJldmVzZU5hbWVzcGFjZU1hcCA9IE9iamVjdC5rZXlzKG5hbWVTcGFjZU1hcCkucmVkdWNlKChyZXZlcnNlTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBjdXJyZW50TmFtZSkgPT4ge1xuXHRyZXZlcnNlTWFwW25hbWVTcGFjZU1hcFtjdXJyZW50TmFtZV1dID0gY3VycmVudE5hbWU7XG5cdHJldHVybiByZXZlcnNlTWFwO1xufSwge30pO1xuY29uc3Qgc2VsZWN0ID0geHBhdGgudXNlTmFtZXNwYWNlcyhuYW1lU3BhY2VNYXApO1xuXG5jb25zdCBkZWZhdWx0RmFrZVNpZGVFZmZlY3RTZXJ2aWNlID0geyBjb21wdXRlRmllbGRHcm91cElkczogKCkgPT4gW10gfTtcblxuZnVuY3Rpb24gX2dldFRlbXBsYXRlZFNlbGVjdG9yKHhtbGRvbTogTm9kZSwgc2VsZWN0b3I6IHN0cmluZyk6IHN0cmluZyB7XG5cdC8qKlxuXHQgKiBpZiBhIHJvb3QgZWxlbWVudCBoYXMgYmVlbiBhZGRlZCBkdXJpbmcgdGhlIHRlbXBsYXRpbmcgYnkgb3VyIEplc3QgVGVtcGxhdGluZyBtZXRob2RzXG5cdCAqIHRoZSByb290IGVsZW1lbnQgaXMgYWRkZWQgdG8gdGhlIHNlbGVjdG9yIHBhdGguXG5cdCAqL1xuXHRjb25zdCByb290UGF0aCA9IFwiL3Jvb3RcIjtcblx0cmV0dXJuIGAke3htbGRvbS5ub2RlTmFtZSA9PT0gXCJyb290XCIgJiYgIXNlbGVjdG9yLnN0YXJ0c1dpdGgocm9vdFBhdGgpID8gcm9vdFBhdGggOiBcIlwifSR7c2VsZWN0b3J9YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gX2J1aWxkUHJlUHJvY2Vzc29yU2V0dGluZ3MoXG5cdHNNZXRhZGF0YVVybDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtQmluZGluZ0NvbnRleHRzOiB7IFt4OiBzdHJpbmddOiBzdHJpbmcgfSxcblx0bU1vZGVsczogeyBbeDogc3RyaW5nXTogYW55IH0sXG5cdGZha2VTaWRlRWZmZWN0U2VydmljZT86IHVua25vd25cbik6IFByb21pc2U8UHJlUHJvY2Vzc29yU2V0dGluZ3NUeXBlPiB7XG5cdGxldCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCB8IHVuZGVmaW5lZDtcblx0aWYgKHNNZXRhZGF0YVVybCkge1xuXHRcdG9NZXRhTW9kZWwgPSBhd2FpdCBnZXRNZXRhTW9kZWwoc01ldGFkYXRhVXJsKTtcblx0XHQvLyBUbyBlbnN1cmUgb3VyIG1hY3JvIGNhbiB1c2UgI3NldEJpbmRpbmdDb250ZXh0IHdlIGVuc3VyZSB0aGVyZSBpcyBhIHByZSBleGlzdGluZyBKU09OTW9kZWwgZm9yIGNvbnZlcnRlckNvbnRleHRcblx0XHQvLyBpZiBub3QgYWxyZWFkeSBwYXNzZWQgdG8gdGVoIHRlbXBsYXRpbmdcblx0XHRpZiAoIW1Nb2RlbHMuaGFzT3duUHJvcGVydHkoXCJjb252ZXJ0ZXJDb250ZXh0XCIpKSB7XG5cdFx0XHRtTW9kZWxzID0gT2JqZWN0LmFzc2lnbihtTW9kZWxzLCB7IGNvbnZlcnRlckNvbnRleHQ6IG5ldyBUZW1wbGF0ZU1vZGVsKHt9LCBvTWV0YU1vZGVsISkgfSk7XG5cdFx0fVxuXG5cdFx0T2JqZWN0LmtleXMobU1vZGVscykuZm9yRWFjaChmdW5jdGlvbiAoc01vZGVsTmFtZSkge1xuXHRcdFx0aWYgKG1Nb2RlbHNbc01vZGVsTmFtZV0gJiYgbU1vZGVsc1tzTW9kZWxOYW1lXS5pc1RlbXBsYXRlTW9kZWwpIHtcblx0XHRcdFx0bU1vZGVsc1tzTW9kZWxOYW1lXSA9IG5ldyBUZW1wbGF0ZU1vZGVsKG1Nb2RlbHNbc01vZGVsTmFtZV0uZGF0YSwgb01ldGFNb2RlbCEpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Y29uc3Qgc2V0dGluZ3M6IGFueSA9IHtcblx0XHRtb2RlbHM6IE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7XG5cdFx0XHRcdG1ldGFNb2RlbDogb01ldGFNb2RlbFxuXHRcdFx0fSxcblx0XHRcdG1Nb2RlbHNcblx0XHQpLFxuXHRcdGJpbmRpbmdDb250ZXh0czoge30sXG5cdFx0YXBwQ29tcG9uZW50OiB7XG5cdFx0XHRnZXRTaWRlRWZmZWN0c1NlcnZpY2U6IGplc3QuZm4oKSxcblx0XHRcdGdldERpYWdub3N0aWNzOiAoKSA9PiB1bmRlZmluZWQsXG5cdFx0XHRnZXRTaGVsbFNlcnZpY2VzOiBqZXN0LmZuKCksXG5cdFx0XHRnZXRNYW5pZmVzdEVudHJ5OiAoKSA9PiB1bmRlZmluZWRcblx0XHR9XG5cdH07XG5cblx0c2V0dGluZ3MuYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZS5tb2NrUmV0dXJuVmFsdWUoZmFrZVNpZGVFZmZlY3RTZXJ2aWNlID8/IGRlZmF1bHRGYWtlU2lkZUVmZmVjdFNlcnZpY2UpO1xuXHQvL0luamVjdCBtb2RlbHMgYW5kIGJpbmRpbmdDb250ZXh0c1xuXHRPYmplY3Qua2V5cyhtQmluZGluZ0NvbnRleHRzKS5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5KSB7XG5cdFx0LyogQXNzZXJ0IHRvIG1ha2Ugc3VyZSB0aGUgYW5ub3RhdGlvbnMgYXJlIGluIHRoZSB0ZXN0IG1ldGFkYXRhIC0+IGF2b2lkIG1pc2xlYWRpbmcgdGVzdHMgKi9cblx0XHRleHBlY3QodHlwZW9mIG9NZXRhTW9kZWw/LmdldE9iamVjdChtQmluZGluZ0NvbnRleHRzW3NLZXldKSkudG9CZURlZmluZWQoKTtcblx0XHRjb25zdCBvTW9kZWwgPSBtTW9kZWxzW3NLZXldIHx8IG9NZXRhTW9kZWw7XG5cdFx0c2V0dGluZ3MuYmluZGluZ0NvbnRleHRzW3NLZXldID0gb01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KG1CaW5kaW5nQ29udGV4dHNbc0tleV0pOyAvL1ZhbHVlIGlzIHNQYXRoXG5cdFx0c2V0dGluZ3MubW9kZWxzW3NLZXldID0gb01vZGVsO1xuXHR9KTtcblx0cmV0dXJuIHNldHRpbmdzO1xufVxuXG5mdW5jdGlvbiBfbG9hZFJlc291cmNlVmlldyh2aWV3TmFtZTogc3RyaW5nKTogRWxlbWVudCB7XG5cdGNvbnN0IG5hbWUgPSB2aWV3TmFtZS5yZXBsYWNlKC9cXC4vZywgXCIvXCIpICsgXCIudmlldy54bWxcIjtcblx0Y29uc3QgdmlldyA9IExvYWRlckV4dGVuc2lvbnMubG9hZFJlc291cmNlKG5hbWUpO1xuXHRyZXR1cm4gdmlldy5kb2N1bWVudEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBjb25zdCBydW5YUGF0aFF1ZXJ5ID0gZnVuY3Rpb24gKHNlbGVjdG9yOiBzdHJpbmcsIHhtbGRvbTogTm9kZSB8IHVuZGVmaW5lZCkge1xuXHRyZXR1cm4gc2VsZWN0KHNlbGVjdG9yLCB4bWxkb20pO1xufTtcblxuZXhwZWN0LmV4dGVuZCh7XG5cdHRvSGF2ZUNvbnRyb2woeG1sZG9tLCBzZWxlY3Rvcikge1xuXHRcdGNvbnN0IG5vZGVzID0gcnVuWFBhdGhRdWVyeShfZ2V0VGVtcGxhdGVkU2VsZWN0b3IoeG1sZG9tLCBzZWxlY3RvciksIHhtbGRvbSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG1lc3NhZ2U6ICgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb3V0cHV0WG1sID0gc2VyaWFsaXplWE1MKHhtbGRvbSk7XG5cdFx0XHRcdHJldHVybiBgZGlkIG5vdCBmaW5kIGNvbnRyb2xzIG1hdGNoaW5nICR7c2VsZWN0b3J9IGluIGdlbmVyYXRlZCB4bWw6XFxuICR7b3V0cHV0WG1sfWA7XG5cdFx0XHR9LFxuXHRcdFx0cGFzczogbm9kZXMgJiYgbm9kZXMubGVuZ3RoID49IDFcblx0XHR9O1xuXHR9LFxuXHR0b05vdEhhdmVDb250cm9sKHhtbGRvbSwgc2VsZWN0b3IpIHtcblx0XHRjb25zdCBub2RlcyA9IHJ1blhQYXRoUXVlcnkoX2dldFRlbXBsYXRlZFNlbGVjdG9yKHhtbGRvbSwgc2VsZWN0b3IpLCB4bWxkb20pO1xuXHRcdHJldHVybiB7XG5cdFx0XHRtZXNzYWdlOiAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG91dHB1dFhtbCA9IHNlcmlhbGl6ZVhNTCh4bWxkb20pO1xuXHRcdFx0XHRyZXR1cm4gYFRoZXJlIGlzIGEgY29udHJvbCBtYXRjaGluZyAke3NlbGVjdG9yfSBpbiBnZW5lcmF0ZWQgeG1sOlxcbiAke291dHB1dFhtbH1gO1xuXHRcdFx0fSxcblx0XHRcdHBhc3M6IG5vZGVzICYmIG5vZGVzLmxlbmd0aCA9PT0gMFxuXHRcdH07XG5cdH0sXG5cdC8qKlxuXHQgKiBDaGVja3MgZm9yIGVycm9ycyBpbiBgeG1sYCBjcmVhdGVkIGR1cmluZyB0ZW1wbGF0aW5nIG9mIGFuIFhNTCBzdHJpbmcgb3Jcblx0ICogYW4gWE1MIG5vZGUuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gY2hlY2tlcyBmb3IgdGhlIHhtbCBlcnJvcnMgY3JlYXRlZCBieSB0aGVcblx0ICogZnVuY3Rpb24gW0J1aWxkaW5nQmxvY2tUZW1wbGF0ZVByb2Nlc3Nvci5jcmVhdGVFcnJvclhNTF17QGxpbmsgc2FwLmZlLmNvcmUuYnVpbGRpbmdCbG9ja3MudGVtcGxhdGluZy5CdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3IjY3JlYXRlRXJyb3JYTUx9LlxuXHQgKiBAcGFyYW0geG1sIFhNTCBTdHJpbmcgb3IgWE1MIE5vZGUgdG8gYmUgdGVzdGVkIGZvciBlcnJvcnNcblx0ICogQHJldHVybnMgSmVzdCBNYXRjaGVyIHJlc3VsdCBvYmplY3Rcblx0ICovXG5cdHRvSGF2ZVRlbXBsYXRpbmdFcnJvcnMoeG1sOiBzdHJpbmcgfCBOb2RlKSB7XG5cdFx0Y29uc3QgeG1sVGV4dCA9IHR5cGVvZiB4bWwgPT09IFwic3RyaW5nXCIgPyB4bWwgOiBzZXJpYWxpemVYTUwoeG1sKTtcblx0XHRjb25zdCBiYXNlNjRFbnRyaWVzOiBzdHJpbmdbXSA9IHhtbFRleHQubWF0Y2goL0JCRlxcLmJhc2U2NERlY29kZVxcKCcoW14nXSopJ1xcKS9nbSkgfHwgKFtdIGFzIHN0cmluZ1tdKTtcblx0XHRjb25zdCBlcnJvck1lc3NhZ2VzOiBzdHJpbmdbXSA9IGJhc2U2NEVudHJpZXMubWFwKChtZXNzYWdlOiBzdHJpbmcpID0+IHtcblx0XHRcdGlmIChtZXNzYWdlICYmIG1lc3NhZ2UubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRyZXR1cm4gYXRvYihtZXNzYWdlLm1hdGNoKC8oJ1teJ10qKS8pPy5bMF0/LnNsaWNlKDEpIHx8IFwiXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fSk7XG5cdFx0aWYgKGVycm9yTWVzc2FnZXMubGVuZ3RoIDw9IDApIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdG1lc3NhZ2U6ICgpID0+IGBYTUwgVGVtcGxhdGluZyB3aXRob3V0IGVycm9yc2AsXG5cdFx0XHRcdHBhc3M6IGZhbHNlXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRtZXNzYWdlOiAoKSA9PiBlcnJvck1lc3NhZ2VzLmpvaW4oXCJcXG5cIiksXG5cdFx0XHRcdHBhc3M6IHRydWVcblx0XHRcdH07XG5cdFx0fVxuXHR9XG59KTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdEJ1aWxkaW5nQmxvY2tYTUwgPSBmdW5jdGlvbiAoeG1sU3RyaW5nOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZyB7XG5cdGlmIChBcnJheS5pc0FycmF5KHhtbFN0cmluZykpIHtcblx0XHR4bWxTdHJpbmcgPSB4bWxTdHJpbmcuam9pbihcIlwiKTtcblx0fVxuXHRyZXR1cm4gZm9ybWF0WE1MKHhtbFN0cmluZyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udHJvbEF0dHJpYnV0ZSA9IGZ1bmN0aW9uIChjb250cm9sU2VsZWN0b3I6IHN0cmluZywgYXR0cmlidXRlTmFtZTogc3RyaW5nLCB4bWxEb206IE5vZGUpIHtcblx0Y29uc3Qgc2VsZWN0b3IgPSBgc3RyaW5nKCR7X2dldFRlbXBsYXRlZFNlbGVjdG9yKHhtbERvbSwgY29udHJvbFNlbGVjdG9yKX0vQCR7YXR0cmlidXRlTmFtZX0pYDtcblx0cmV0dXJuIHJ1blhQYXRoUXVlcnkoc2VsZWN0b3IsIHhtbERvbSk7XG59O1xuXG4vKipcbiAqIFNlcmlhbGl6ZSB0aGUgcGFydHMgb3IgdGhlIGNvbXBsZXRlIGdpdmVuIFhNTCBET00gdG8gc3RyaW5nLlxuICogQHBhcmFtIHhtbERvbSBET00gbm9kZSB0aGF0IGlzIHRvIGJlIHNlcmlhbGl6ZWQuXG4gKiBAcGFyYW0gc2VsZWN0b3IgT3B0aW9uYWwgc2VsZWN0b3Igb2Ygc3ViIG5vZGVzXG4gKiBAcmV0dXJucyBYTUwgc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBzZXJpYWxpemVYTUwgPSBmdW5jdGlvbiAoeG1sRG9tOiBOb2RlLCBzZWxlY3Rvcj86IHN0cmluZykge1xuXHRjb25zdCBzZXJpYWxpemVyID0gbmV3IHdpbmRvdy5YTUxTZXJpYWxpemVyKCk7XG5cdGxldCB4bWxTdHJpbmc6IHN0cmluZztcblx0aWYgKHNlbGVjdG9yKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBydW5YUGF0aFF1ZXJ5KHNlbGVjdG9yLCB4bWxEb20pIGFzIE5vZGVbXTtcblx0XHR4bWxTdHJpbmcgPSBub2Rlcy5tYXAoKG5vZGUpID0+IHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcobm9kZSkpLmpvaW4oXCJcXG5cIik7XG5cdH0gZWxzZSB7XG5cdFx0eG1sU3RyaW5nID0gc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyh4bWxEb20pO1xuXHR9XG5cdHJldHVybiBmb3JtYXRYTUwoeG1sU3RyaW5nKTtcbn07XG5cbi8qKlxuICogRm9ybWF0cyBhIHN0cmluZyBjb250YWluaW5nIGFuIFhNTCBkb2N1bWVudC5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIG9ubHkgY29uc2lkZXJzIFhNTCB0YWdzIGFuZCBhdHRyaWJ1dGVzLCBpZ25vcmluZyBldmVyeXRoaW5nIGVsc2UgKHRleHQsIGNvbW1lbnRzKS4gQWRkaXRpb25hbGx5LFxuICogYXR0cmlidXRlIHZhbHVlcyBjb250YWluaW5nIGEgdmFyeWluZyBVSUQgYXJlIHJlcGxhY2VkIHdpdGggYSBjb25zdGFudCB2YWx1ZS5cbiAqXG4gKiBBbiBcIlhNTFwiIHN0cmluZyBjb250YWluaW5nIG11bHRpcGxlIHJvb3QgZWxlbWVudHMgY2FuIGJlLlxuICogQHBhcmFtIHhtbFN0cmluZyAgVGhlIGlucHV0IFhNTCBzdHJpbmcuIFRoaXMgZnVuY3Rpb24gYWxzbyBhY2NlcHRzIFwiWE1MXCIgc3RyaW5ncyB3aXRoIG11bHRpcGxlIHJvb3QgZWxlbWVudHMuXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIFhNTCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtYXRYTUwgPSBmdW5jdGlvbiAoeG1sU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBTVEFSVCA9IFwiPF9fWE1MX18+XCIsXG5cdFx0RU5EID0gXCI8L19fWE1MX18+XCIsXG5cdFx0VUlEID0gL3VpZC0taWQtXFxkezEzfS1cXGR7MSwzfS8sXG5cdFx0VUlEMiA9IC9pZC1cXGR7MTN9LVxcZHsxLDN9Lyxcblx0XHRsaW5lczogc3RyaW5nW10gPSBbXTtcblxuXHRsZXQgY3VycmVudExpbmUgPSBcIlwiLFxuXHRcdGxldmVsID0gLTEsXG5cdFx0YXR0cmlidXRlczogeyBuYW1lOiBzdHJpbmc7IHZhbHVlPzogc3RyaW5nIH1bXSA9IFtdO1xuXG5cdGZ1bmN0aW9uIG5ld2xpbmUoKSB7XG5cdFx0aWYgKGN1cnJlbnRMaW5lICYmIGN1cnJlbnRMaW5lICE9PSBTVEFSVCkge1xuXHRcdFx0bGluZXMucHVzaChjdXJyZW50TGluZSk7XG5cdFx0fVxuXG5cdFx0Y3VycmVudExpbmUgPSBsZXZlbCA+IDAgPyBcIiAgXCIucmVwZWF0KGxldmVsKSA6IFwiXCI7XG5cdH1cblxuXHRmdW5jdGlvbiBhcHBlbmRBdHRyaWJ1dGVzKCkge1xuXHRcdGlmIChhdHRyaWJ1dGVzLmxlbmd0aCA+IDApIHtcblx0XHRcdGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLnNvcnQoKGEsIGIpID0+IHtcblx0XHRcdFx0aWYgKGEubmFtZS5zdGFydHNXaXRoKFwieG1sbnNcIikgJiYgIWIubmFtZS5zdGFydHNXaXRoKFwieG1sbnNcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIWEubmFtZS5zdGFydHNXaXRoKFwieG1sbnNcIikgJiYgYi5uYW1lLnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSkge1xuXHRcdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGEubmFtZS5zdGFydHNXaXRoKFwieG1sbnNcIikgJiYgYi5uYW1lLnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSkge1xuXHRcdFx0XHRcdHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGEubmFtZS5pbmNsdWRlcyhcIjpcIikgJiYgIWIubmFtZS5pbmNsdWRlcyhcIjpcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIWEubmFtZS5pbmNsdWRlcyhcIjpcIikgJiYgYi5uYW1lLmluY2x1ZGVzKFwiOlwiKSkge1xuXHRcdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0bGV2ZWwrKztcblx0XHRcdGZvciAoY29uc3QgYXR0cmlidXRlIG9mIGF0dHJpYnV0ZXMpIHtcblx0XHRcdFx0bmV3bGluZSgpO1xuXHRcdFx0XHRjdXJyZW50TGluZSArPSBhdHRyaWJ1dGUubmFtZTtcblx0XHRcdFx0aWYgKGF0dHJpYnV0ZS52YWx1ZSkgY3VycmVudExpbmUgKz0gYXR0cmlidXRlLnZhbHVlO1xuXHRcdFx0fVxuXHRcdFx0bGV2ZWwtLTtcblx0XHRcdGF0dHJpYnV0ZXMgPSBbXTtcblx0XHRcdG5ld2xpbmUoKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBhcHBlbmQoZGF0YTogUmFuZ2UpIHtcblx0XHRjdXJyZW50TGluZSArPSBwYXJzZXIucmVhZChkYXRhKTtcblx0fVxuXG5cdGNvbnN0IHBhcnNlciA9IGNyZWF0ZVBhcnNlcih7XG5cdFx0b25PcGVuVGFnU3RhcnQoZGF0YTogUmFuZ2UpIHtcblx0XHRcdG5ld2xpbmUoKTtcblx0XHRcdGFwcGVuZChkYXRhKTtcblx0XHR9LFxuXG5cdFx0b25PcGVuVGFnTmFtZTogYXBwZW5kLFxuXG5cdFx0b25BdHRyTmFtZShkYXRhOiBSYW5nZSkge1xuXHRcdFx0YXR0cmlidXRlcy51bnNoaWZ0KHsgbmFtZTogcGFyc2VyLnJlYWQoZGF0YSkgfSk7XG5cdFx0fSxcblxuXHRcdG9uQXR0clZhbHVlKGRhdGE6IFJhbmdlcy5BdHRyVmFsdWUpIHtcblx0XHRcdGF0dHJpYnV0ZXNbMF0udmFsdWUgPSBwYXJzZXIucmVhZChkYXRhKS5yZXBsYWNlKFVJRCwgXCJ1aWQtLWlkXCIpOyAvLyByZXBsYWNlIHZhcnlpbmcgVUlEcyB3aXRoIGEgY29uc3RhbnQgdmFsdWVcblx0XHRcdGF0dHJpYnV0ZXNbMF0udmFsdWUgPSBwYXJzZXIucmVhZChkYXRhKS5yZXBsYWNlKFVJRDIsIFwiaWRcIik7IC8vIHJlcGxhY2UgdmFyeWluZyBVSURzIHdpdGggYSBjb25zdGFudCB2YWx1ZVxuXHRcdH0sXG5cblx0XHRvbk9wZW5UYWdFbmQoZGF0YTogUmFuZ2VzLk9wZW5UYWdFbmQpIHtcblx0XHRcdGFwcGVuZEF0dHJpYnV0ZXMoKTtcblx0XHRcdGFwcGVuZChkYXRhKTtcblx0XHRcdGlmICghZGF0YS5zZWxmQ2xvc2VkKSBsZXZlbCsrO1xuXHRcdH0sXG5cblx0XHRvbkNsb3NlVGFnU3RhcnQoZGF0YTogUmFuZ2UpIHtcblx0XHRcdGxldmVsLS07XG5cdFx0XHRuZXdsaW5lKCk7XG5cdFx0XHRhcHBlbmQoZGF0YSk7XG5cdFx0fSxcblxuXHRcdG9uQ2xvc2VUYWdOYW1lOiBhcHBlbmQsXG5cdFx0b25DbG9zZVRhZ0VuZDogYXBwZW5kXG5cdH0pO1xuXG5cdHBhcnNlci5wYXJzZShTVEFSVCArIHhtbFN0cmluZyArIEVORCk7XG5cdHJldHVybiBsaW5lcy5qb2luKFwiXFxuXCIpLnRyaW0oKTtcbn07XG5cbi8qKlxuICogQ29tcGlsZSBhIENEUyBmaWxlIGludG8gYW4gRURNWCBmaWxlLlxuICogQHBhcmFtIGNkc1VybCBUaGUgcGF0aCB0byB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBDRFMgZGVmaW5pdGlvbi4gVGhpcyBmaWxlIG11c3QgZGVjbGFyZSB0aGUgbmFtZXNwYWNlXG4gKiBzYXAuZmUudGVzdCBhbmQgYSBzZXJ2aWNlIEplc3RTZXJ2aWNlXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBjcmVhdGluZyB0aGUgRURNWCBvdXRwdXRcbiAqIEByZXR1cm5zIFRoZSBwYXRoIG9mIHRoZSBnZW5lcmF0ZWQgRURNWFxuICovXG5leHBvcnQgY29uc3QgY29tcGlsZUNEUyA9IGZ1bmN0aW9uIChjZHNVcmw6IHN0cmluZywgb3B0aW9uczogY29tcGlsZXIuT0RhdGFPcHRpb25zID0ge30pIHtcblx0Y29uc3QgY2RzU3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGNkc1VybCwgXCJ1dGYtOFwiKTtcblx0Y29uc3QgZWRteENvbnRlbnQgPSBjZHMyZWRteChjZHNTdHJpbmcsIFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIiwgb3B0aW9ucyk7XG5cdGNvbnN0IGRpciA9IHBhdGgucmVzb2x2ZShjZHNVcmwsIFwiLi5cIiwgXCJnZW5cIik7XG5cblx0Ly8gSWYgdGhlIGNhbGxlciBwcm92aWRlZCBDRFMgY29tcGlsZXIgb3B0aW9uczogSW5jbHVkZSB0aGVtIGluIHRoZSBmaWxlbmFtZS4gVGhpcyBwcmV2ZW50cyB1bnByZWRpY3RhYmxlIHJlc3VsdHMgaWYgdGhlIHNhbWUgQ0RTIHNvdXJjZVxuXHQvLyBmaWxlIGlzIHVzZWQgc2ltdWx0YW5lb3VzbHkgd2l0aCBhIGRpZmZlcmVudCBzZXQgb2Ygb3B0aW9ucyAoZS5nLiBpbiBhIHRlc3QgcnVubmluZyBpbiBwYXJhbGxlbClcblx0Y29uc3QgYWxsT3B0aW9ucyA9IE9iamVjdC5lbnRyaWVzKG9wdGlvbnMpO1xuXHRhbGxPcHRpb25zLnNvcnQoKGEsIGIpID0+IGJbMF0ubG9jYWxlQ29tcGFyZShhWzBdKSk7XG5cblx0Y29uc3QgZWRteEZpbGVOYW1lID1cblx0XHRhbGxPcHRpb25zLnJlZHVjZShcblx0XHRcdChmaWxlbmFtZSwgW29wdGlvbktleSwgb3B0aW9uVmFsdWVdKSA9PiBgJHtmaWxlbmFtZX0jJHtvcHRpb25LZXl9PSR7b3B0aW9uVmFsdWUudG9TdHJpbmcoKX0jYCxcblx0XHRcdHBhdGguYmFzZW5hbWUoY2RzVXJsKS5yZXBsYWNlKFwiLmNkc1wiLCBcIlwiKVxuXHRcdCkgKyBcIi54bWxcIjtcblxuXHRjb25zdCBlZG14RmlsZVBhdGggPSBwYXRoLnJlc29sdmUoZGlyLCBlZG14RmlsZU5hbWUpO1xuXG5cdGZzLm1rZGlyU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG5cdGZzLndyaXRlRmlsZVN5bmMoZWRteEZpbGVQYXRoLCBlZG14Q29udGVudCk7XG5cdHJldHVybiBlZG14RmlsZVBhdGg7XG59O1xuXG4vKipcbiAqIENvbXBpbGUgQ0RTIHRvIEVETVguXG4gKiBAcGFyYW0gY2RzIFRoZSBDRFMgbW9kZWwuIEl0IG11c3QgZGVmaW5lIGF0IGxlYXN0IG9uZSBzZXJ2aWNlLlxuICogQHBhcmFtIHNlcnZpY2UgVGhlIGZ1bGx5LXF1YWxpZmllZCBuYW1lIG9mIHRoZSBzZXJ2aWNlIHRvIGJlIGNvbXBpbGVkLiBEZWZhdWx0cyB0byBcInNhcC5mZS50ZXN0Lkplc3RTZXJ2aWNlXCIuXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBjcmVhdGluZyB0aGUgRURNWCBvdXRwdXRcbiAqIEByZXR1cm5zIFRoZSBjb21waWxlZCBzZXJ2aWNlIG1vZGVsIGFzIEVETVguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjZHMyZWRteChjZHM6IHN0cmluZywgc2VydmljZSA9IFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIiwgb3B0aW9uczogY29tcGlsZXIuT0RhdGFPcHRpb25zID0ge30pIHtcblx0Y29uc3Qgc291cmNlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgXCJzb3VyY2UuY2RzXCI6IGNkcyB9O1xuXG5cdC8vIGFsbG93IHRvIGluY2x1ZGUgc3R1ZmYgZnJvbSBAc2FwL2Nkcy9jb21tb25cblx0aWYgKGNkcy5pbmNsdWRlcyhcIidAc2FwL2Nkcy9jb21tb24nXCIpKSB7XG5cdFx0c291cmNlc1tcImNvbW1vbi5jZHNcIl0gPSBmcy5yZWFkRmlsZVN5bmMocmVxdWlyZS5yZXNvbHZlKFwiQHNhcC9jZHMvY29tbW9uLmNkc1wiKSwgXCJ1dGYtOFwiKTtcblx0fVxuXG5cdGNvbnN0IGNzbiA9IGNvbXBpbGVyLmNvbXBpbGVTb3VyY2VzKHNvdXJjZXMsIHt9KTtcblxuXHRjb25zdCBlZG14T3B0aW9uczogY29tcGlsZXIuT0RhdGFPcHRpb25zID0ge1xuXHRcdG9kYXRhRm9yZWlnbktleXM6IHRydWUsXG5cdFx0b2RhdGFGb3JtYXQ6IFwic3RydWN0dXJlZFwiLFxuXHRcdG9kYXRhQ29udGFpbm1lbnQ6IHRydWUsXG5cdFx0Li4ub3B0aW9ucyxcblx0XHRzZXJ2aWNlOiBzZXJ2aWNlXG5cdH07XG5cblx0Y29uc3QgZWRteCA9IGNvbXBpbGVyLnRvLmVkbXgoY3NuLCBlZG14T3B0aW9ucyk7XG5cdGlmICghZWRteCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgQ29tcGlsYXRpb24gZmFpbGVkLiBIaW50OiBNYWtlIHN1cmUgdGhhdCB0aGUgQ0RTIG1vZGVsIGRlZmluZXMgc2VydmljZSAke3NlcnZpY2V9LmApO1xuXHR9XG5cdHJldHVybiBlZG14O1xufVxuXG5leHBvcnQgY29uc3QgZ2V0RmFrZVNpZGVFZmZlY3RzU2VydmljZSA9IGFzeW5jIGZ1bmN0aW9uIChcblx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0Y2xhc3NOYW1lT0RhdGFNb2RlbCA9IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWxcIlxuKTogUHJvbWlzZTxTaWRlRWZmZWN0c1NlcnZpY2U+IHtcblx0Y29uc3Qgc2NvcGVPYmplY3QgPSB7XG5cdFx0Z2V0TW9kZWw6ICgpID0+IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGlzQTogKCkgPT4gY2xhc3NOYW1lT0RhdGFNb2RlbCA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNb2RlbFwiLFxuXHRcdFx0XHRnZXRNZXRhTW9kZWw6ICgpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gbWV0YU1vZGVsO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRnZXRTZXJ2aWNlVXJsOiAoKSA9PiB1bmRlZmluZWRcblx0XHRcdH07XG5cdFx0fSxcblx0XHRnZXRTZXJ2aWNlOiAoKSA9PiB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRnZXRDYXBhYmlsaXRpZXM6ICgpID0+IHVuZGVmaW5lZFxuXHRcdFx0fTtcblx0XHR9XG5cdH07XG5cdGNvbnN0IHNlcnZpY2VJbnN0YW5jZSA9IGF3YWl0IG5ldyBTaWRlRWZmZWN0c0ZhY3RvcnkoKS5jcmVhdGVJbnN0YW5jZSh7IHNjb3BlT2JqZWN0LCBzY29wZVR5cGU6IFwiXCIsIHNldHRpbmdzOiB7fSB9KTtcblx0cmV0dXJuIHNlcnZpY2VJbnN0YW5jZS5nZXRJbnRlcmZhY2UoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGYWtlRGlhZ25vc3RpY3MgPSBmdW5jdGlvbiAoKTogSURpYWdub3N0aWNzIHtcblx0Y29uc3QgaXNzdWVzOiBhbnlbXSA9IFtdO1xuXHRyZXR1cm4ge1xuXHRcdGFkZElzc3VlKGlzc3VlQ2F0ZWdvcnk6IElzc3VlQ2F0ZWdvcnksIGlzc3VlU2V2ZXJpdHk6IElzc3VlU2V2ZXJpdHksIGRldGFpbHM6IHN0cmluZyk6IHZvaWQge1xuXHRcdFx0aXNzdWVzLnB1c2goe1xuXHRcdFx0XHRpc3N1ZUNhdGVnb3J5LFxuXHRcdFx0XHRpc3N1ZVNldmVyaXR5LFxuXHRcdFx0XHRkZXRhaWxzXG5cdFx0XHR9KTtcblx0XHR9LFxuXHRcdGdldElzc3VlcygpOiBhbnlbXSB7XG5cdFx0XHRyZXR1cm4gaXNzdWVzO1xuXHRcdH0sXG5cdFx0Y2hlY2tJZklzc3VlRXhpc3RzKGlzc3VlQ2F0ZWdvcnk6IElzc3VlQ2F0ZWdvcnksIGlzc3VlU2V2ZXJpdHk6IElzc3VlU2V2ZXJpdHksIGRldGFpbHM6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIGlzc3Vlcy5maW5kKChpc3N1ZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gaXNzdWUuaXNzdWVDYXRlZ29yeSA9PT0gaXNzdWVDYXRlZ29yeSAmJiBpc3N1ZS5pc3N1ZVNldmVyaXR5ID09PSBpc3N1ZVNldmVyaXR5ICYmIGlzc3VlLmRldGFpbHMgPT09IGRldGFpbHM7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVydGVyQ29udGV4dEZvclRlc3QgPSBmdW5jdGlvbiAoXG5cdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdG1hbmlmZXN0U2V0dGluZ3M6IExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzIHwgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3Ncbikge1xuXHRjb25zdCBjb252ZXJ0ZWRUeXBlcyA9IGNvbnZlcnRUeXBlcyhtZXRhTW9kZWwpO1xuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gbWFuaWZlc3RTZXR0aW5ncy5jb250ZXh0UGF0aFxuXHRcdD8gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4obWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KG1hbmlmZXN0U2V0dGluZ3MuY29udGV4dFBhdGgpIGFzIENvbnRleHQpXG5cdFx0OiBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PihtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYC8ke21hbmlmZXN0U2V0dGluZ3MuZW50aXR5U2V0fWApKTtcblx0cmV0dXJuIG5ldyBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4oXG5cdFx0Y29udmVydGVkVHlwZXMsXG5cdFx0bmV3IE1hbmlmZXN0V3JhcHBlcihtYW5pZmVzdFNldHRpbmdzKSxcblx0XHRnZXRGYWtlRGlhZ25vc3RpY3MoKSxcblx0XHRkYXRhTW9kZWxQYXRoXG5cdCk7XG59O1xuY29uc3QgbWV0YU1vZGVsQ2FjaGU6IGFueSA9IHt9O1xuZXhwb3J0IGNvbnN0IGdldE1ldGFNb2RlbCA9IGFzeW5jIGZ1bmN0aW9uIChzTWV0YWRhdGFVcmw6IHN0cmluZykge1xuXHRjb25zdCBvUmVxdWVzdG9yID0gX01ldGFkYXRhUmVxdWVzdG9yLmNyZWF0ZSh7fSwgXCI0LjBcIiwgdW5kZWZpbmVkLCB7fSwge30sIGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fSk7XG5cdGlmICghbWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXSkge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBuZXcgKE9EYXRhTWV0YU1vZGVsIGFzIGFueSkob1JlcXVlc3Rvciwgc01ldGFkYXRhVXJsLCB1bmRlZmluZWQsIHsgX3JlcXVlc3RBbm5vdGF0aW9uQ2hhbmdlczogKCkgPT4gW10gfSk7XG5cdFx0YXdhaXQgb01ldGFNb2RlbC5mZXRjaEVudGl0eUNvbnRhaW5lcigpO1xuXHRcdG1ldGFNb2RlbENhY2hlW3NNZXRhZGF0YVVybF0gPSBvTWV0YU1vZGVsO1xuXHR9XG5cblx0cmV0dXJuIG1ldGFNb2RlbENhY2hlW3NNZXRhZGF0YVVybF07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5ID0gZnVuY3Rpb24gPFQgPSBQcm9wZXJ0eSB8IEVudGl0eVNldCB8IEFueUFubm90YXRpb24+KFxuXHRlbnRpdHlTZXQ6IEVudGl0eVNldCxcblx0Y29udmVydGVkVHlwZXM6IENvbnZlcnRlZE1ldGFkYXRhLFxuXHRwcm9wZXJ0eT86IFRcbik6IERhdGFNb2RlbE9iamVjdFBhdGg8VD4ge1xuXHRjb25zdCB0YXJnZXRQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFQ+ID0ge1xuXHRcdHN0YXJ0aW5nRW50aXR5U2V0OiBlbnRpdHlTZXQsXG5cdFx0bmF2aWdhdGlvblByb3BlcnRpZXM6IFtdLFxuXHRcdHRhcmdldE9iamVjdDogcHJvcGVydHksXG5cdFx0dGFyZ2V0RW50aXR5U2V0OiBlbnRpdHlTZXQsXG5cdFx0dGFyZ2V0RW50aXR5VHlwZTogZW50aXR5U2V0LmVudGl0eVR5cGUsXG5cdFx0Y29udmVydGVkVHlwZXM6IGNvbnZlcnRlZFR5cGVzXG5cdH07XG5cdHRhcmdldFBhdGguY29udGV4dExvY2F0aW9uID0gdGFyZ2V0UGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD47XG5cdHJldHVybiB0YXJnZXRQYXRoO1xufTtcblxuZXhwb3J0IGNvbnN0IGV2YWx1YXRlQmluZGluZyA9IGZ1bmN0aW9uIChiaW5kaW5nU3RyaW5nOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSB7XG5cdGNvbnN0IGJpbmRpbmdFbGVtZW50ID0gQmluZGluZ0luZm8ucGFyc2UoYmluZGluZ1N0cmluZyk7XG5cdHJldHVybiBiaW5kaW5nRWxlbWVudC5mb3JtYXR0ZXIuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbn07XG5cbnR5cGUgTW9kZWxDb250ZW50ID0ge1xuXHRbbmFtZTogc3RyaW5nXTogYW55O1xufTtcblxuLyoqXG4gKiBFdmFsdWF0ZSBhIGJpbmRpbmcgYWdhaW5zdCBhIG1vZGVsLlxuICogQHBhcmFtIGJpbmRpbmdTdHJpbmcgVGhlIGJpbmRpbmcgc3RyaW5nLlxuICogQHBhcmFtIG1vZGVsQ29udGVudCBDb250ZW50IG9mIHRoZSBkZWZhdWx0IG1vZGVsIHRvIHVzZSBmb3IgZXZhbHVhdGlvbi5cbiAqIEBwYXJhbSBuYW1lZE1vZGVsc0NvbnRlbnQgQ29udGVudHMgb2YgYWRkaXRpb25hbCwgbmFtZWQgbW9kZWxzIHRvIHVzZS5cbiAqIEByZXR1cm5zIFRoZSBldmFsdWF0ZWQgYmluZGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2YWx1YXRlQmluZGluZ1dpdGhNb2RlbChcblx0YmluZGluZ1N0cmluZzogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtb2RlbENvbnRlbnQ6IE1vZGVsQ29udGVudCxcblx0bmFtZWRNb2RlbHNDb250ZW50PzogeyBbbW9kZWxOYW1lOiBzdHJpbmddOiBNb2RlbENvbnRlbnQgfVxuKTogc3RyaW5nIHtcblx0Y29uc3QgYmluZGluZ0VsZW1lbnQgPSBCaW5kaW5nSW5mby5wYXJzZShiaW5kaW5nU3RyaW5nKTtcblx0Y29uc3QgdGV4dCA9IG5ldyBJbnZpc2libGVUZXh0KCk7XG5cdHRleHQuYmluZFByb3BlcnR5KFwidGV4dFwiLCBiaW5kaW5nRWxlbWVudCk7XG5cblx0Y29uc3QgZGVmYXVsdE1vZGVsID0gbmV3IEpTT05Nb2RlbChtb2RlbENvbnRlbnQpO1xuXHR0ZXh0LnNldE1vZGVsKGRlZmF1bHRNb2RlbCk7XG5cdHRleHQuc2V0QmluZGluZ0NvbnRleHQoZGVmYXVsdE1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSk7XG5cblx0aWYgKG5hbWVkTW9kZWxzQ29udGVudCkge1xuXHRcdGZvciAoY29uc3QgW25hbWUsIGNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKG5hbWVkTW9kZWxzQ29udGVudCkpIHtcblx0XHRcdGNvbnN0IG1vZGVsID0gbmV3IEpTT05Nb2RlbChjb250ZW50KTtcblx0XHRcdHRleHQuc2V0TW9kZWwobW9kZWwsIG5hbWUpO1xuXHRcdFx0dGV4dC5zZXRCaW5kaW5nQ29udGV4dChtb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIiksIG5hbWUpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0ZXh0LmdldFRleHQoKTtcbn1cblxuY29uc3QgVEVTVFZJRVdJRCA9IFwidGVzdFZpZXdJZFwiO1xuXG5jb25zdCBhcHBseUZsZXhDaGFuZ2VzID0gYXN5bmMgZnVuY3Rpb24gKGZsZXhDaGFuZ2VzOiB7IFt4OiBzdHJpbmddOiBvYmplY3RbXSB9LCBvTWV0YU1vZGVsOiBNZXRhTW9kZWwsIHJlc3VsdFhNTDogYW55KSB7XG5cdC8vIHByZWZpeCBJZHNcblx0Wy4uLnJlc3VsdFhNTC5xdWVyeVNlbGVjdG9yQWxsKFwiW2lkXVwiKV0uZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdG5vZGUuaWQgPSBgJHtURVNUVklFV0lEfS0tJHtub2RlLmlkfWA7XG5cdH0pO1xuXHRjb25zdCBjaGFuZ2VzID0gY3JlYXRlRmxleGliaWxpdHlDaGFuZ2VzT2JqZWN0KFRFU1RWSUVXSUQsIGZsZXhDaGFuZ2VzKTtcblx0Y29uc3QgYXBwSWQgPSBcInNvbWVDb21wb25lbnRcIjtcblx0Y29uc3Qgb01hbmlmZXN0ID0ge1xuXHRcdFwic2FwLmFwcFwiOiB7XG5cdFx0XHRpZDogYXBwSWQsXG5cdFx0XHR0eXBlOiBcImFwcGxpY2F0aW9uXCIsXG5cdFx0XHRjcm9zc05hdmlnYXRpb246IHtcblx0XHRcdFx0b3V0Ym91bmRzOiBbXVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0Y29uc3Qgb0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50ID0ge1xuXHRcdGdldERpYWdub3N0aWNzOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKGdldEZha2VEaWFnbm9zdGljcygpKSxcblx0XHRnZXRNb2RlbDogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh7XG5cdFx0XHRnZXRNZXRhTW9kZWw6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUob01ldGFNb2RlbClcblx0XHR9KSxcblx0XHRnZXRDb21wb25lbnREYXRhOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHt9KSxcblx0XHRnZXRNYW5pZmVzdE9iamVjdDogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh7XG5cdFx0XHRnZXRFbnRyeTogZnVuY3Rpb24gKG5hbWU6IHN0cmluZykge1xuXHRcdFx0XHRyZXR1cm4gKG9NYW5pZmVzdCBhcyBhbnkpW25hbWVdO1xuXHRcdFx0fVxuXHRcdH0pLFxuXHRcdGdldExvY2FsSWQ6IGplc3QuZm4oKHNJZCkgPT4gc0lkKVxuXHR9IGFzIHVua25vd24gYXMgQXBwQ29tcG9uZW50O1xuXHQvL2Zha2UgY2hhbmdlc1xuXHRqZXN0LnNweU9uKEFwcFN0b3JhZ2UsIFwibG9hZEZsZXhEYXRhXCIpLm1vY2tSZXR1cm5WYWx1ZShQcm9taXNlLnJlc29sdmUoY2hhbmdlcykpO1xuXHRqZXN0LnNweU9uKExvYWRlciwgXCJsb2FkRmxleERhdGFcIikubW9ja1JldHVyblZhbHVlKFByb21pc2UucmVzb2x2ZShjaGFuZ2VzKSk7XG5cblx0amVzdC5zcHlPbihDb21wb25lbnQgYXMgdW5rbm93biBhcyB7IGdldENvbXBvbmVudEJ5SWQ6ICgpID0+IEFwcENvbXBvbmVudCB9LCBcImdldENvbXBvbmVudEJ5SWRcIikubW9ja1JldHVyblZhbHVlKG9BcHBDb21wb25lbnQpO1xuXHRqZXN0LnNweU9uKFV0aWxzLCBcImdldEFwcENvbXBvbmVudEZvckNvbnRyb2xcIikubW9ja1JldHVyblZhbHVlKG9BcHBDb21wb25lbnQpO1xuXHRhd2FpdCBGbGV4U3RhdGUuaW5pdGlhbGl6ZSh7XG5cdFx0Y29tcG9uZW50SWQ6IGFwcElkXG5cdH0pO1xuXHRyZXN1bHRYTUwgPSBhd2FpdCBYbWxQcmVwcm9jZXNzb3IucHJvY2VzcyhyZXN1bHRYTUwsIHsgbmFtZTogXCJUZXN0IEZyYWdtZW50XCIsIGNvbXBvbmVudElkOiBhcHBJZCwgaWQ6IFRFU1RWSUVXSUQgfSk7XG5cblx0Ly9Bc3NlcnQgdGhhdCBhbGwgY2hhbmdlcyBoYXZlIGJlZW4gYXBwbGllZFxuXHRjb25zdCBjaGFuZ2VzQXBwbGllZCA9IGdldENoYW5nZXNGcm9tWE1MKHJlc3VsdFhNTCk7XG5cdGV4cGVjdChjaGFuZ2VzQXBwbGllZC5sZW5ndGgpLnRvQmUoZmxleENoYW5nZXM/LmNoYW5nZXM/Lmxlbmd0aCA/PyAwICsgZmxleENoYW5nZXM/LnZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcz8ubGVuZ3RoID8/IDApO1xuXHRyZXR1cm4gcmVzdWx0WE1MO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENoYW5nZXNGcm9tWE1MID0gKHhtbDogYW55KSA9PlxuXHRbLi4ueG1sLnF1ZXJ5U2VsZWN0b3JBbGwoXCIqXCIpXVxuXHRcdC5mbGF0TWFwKChlKSA9PiBbLi4uZS5hdHRyaWJ1dGVzXS5tYXAoKGEpID0+IGEubmFtZSkpXG5cdFx0LmZpbHRlcigoYXR0cikgPT4gYXR0ci5pbmNsdWRlcyhcInNhcC51aS5mbC5hcHBsaWVkQ2hhbmdlc1wiKSk7XG5cbmV4cG9ydCBjb25zdCBnZXRUZW1wbGF0aW5nUmVzdWx0ID0gYXN5bmMgZnVuY3Rpb24gKFxuXHR4bWxJbnB1dDogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogYW55OyBlbnRpdHlTZXQ/OiBzdHJpbmcgfSxcblx0bU1vZGVsczogeyBbeDogc3RyaW5nXTogYW55IH0sXG5cdGZsZXhDaGFuZ2VzPzogeyBbeDogc3RyaW5nXTogb2JqZWN0W10gfSxcblx0ZmFrZVNpZGVFZmZlY3RTZXJ2aWNlPzogdW5rbm93blxuKSB7XG5cdGlmICghbU1vZGVsc1tcInNhcC5mZS5pMThuXCJdKSB7XG5cdFx0bU1vZGVsc1tcInNhcC5mZS5pMThuXCJdID0gY3JlYXRlTW9ja1Jlc291cmNlTW9kZWwoKTtcblx0fVxuXG5cdGNvbnN0IHRlbXBsYXRlZFhtbCA9IGA8cm9vdD4ke3htbElucHV0fTwvcm9vdD5gO1xuXHRjb25zdCBwYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpO1xuXHRjb25zdCB4bWxEb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHRlbXBsYXRlZFhtbCwgXCJ0ZXh0L3htbFwiKTtcblx0Ly8gVG8gZW5zdXJlIG91ciBtYWNybyBjYW4gdXNlICNzZXRCaW5kaW5nQ29udGV4dCB3ZSBlbnN1cmUgdGhlcmUgaXMgYSBwcmUgZXhpc3RpbmcgSlNPTk1vZGVsIGZvciBjb252ZXJ0ZXJDb250ZXh0XG5cdC8vIGlmIG5vdCBhbHJlYWR5IHBhc3NlZCB0byB0ZWggdGVtcGxhdGluZ1xuXG5cdGNvbnN0IG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IGF3YWl0IF9idWlsZFByZVByb2Nlc3NvclNldHRpbmdzKHNNZXRhZGF0YVVybCwgbUJpbmRpbmdDb250ZXh0cywgbU1vZGVscywgZmFrZVNpZGVFZmZlY3RTZXJ2aWNlKTtcblxuXHQvL1RoaXMgY29udGV4dCBmb3IgbWFjcm8gdGVzdGluZ1xuXHRpZiAob1ByZXByb2Nlc3NvclNldHRpbmdzLm1vZGVsc1tcInRoaXNcIl0pIHtcblx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzW1widGhpc1wiXSA9IG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5tb2RlbHNbXCJ0aGlzXCJdLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblx0fVxuXG5cdGxldCByZXN1bHRYTUwgPSAoYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoeG1sRG9jLmZpcnN0RWxlbWVudENoaWxkISwgeyBuYW1lOiBcIlRlc3QgRnJhZ21lbnRcIiB9LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MpKSBhcyBhbnk7XG5cblx0aWYgKHNNZXRhZGF0YVVybCAmJiBmbGV4Q2hhbmdlcykge1xuXHRcdC8vIGFwcGx5IGZsZXggY2hhbmdlc1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBhd2FpdCBnZXRNZXRhTW9kZWwoc01ldGFkYXRhVXJsKTtcblx0XHRyZXN1bHRYTUwgPSBhd2FpdCBhcHBseUZsZXhDaGFuZ2VzKGZsZXhDaGFuZ2VzLCBvTWV0YU1vZGVsLCByZXN1bHRYTUwpO1xuXHR9XG5cdHJldHVybiByZXN1bHRYTUw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGVtcGxhdGVkWE1MID0gYXN5bmMgZnVuY3Rpb24gKFxuXHR4bWxJbnB1dDogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9LFxuXHRmbGV4Q2hhbmdlcz86IHsgW3g6IHN0cmluZ106IG9iamVjdFtdIH0sXG5cdGZha2VTaWRlRWZmZWN0U2VydmljZT86IHVua25vd25cbik6IFByb21pc2U8c3RyaW5nPiB7XG5cdHJldHVybiBqc3guZGVmaW5lWE1MTmFtZXNwYWNlTWFwKHJldmVzZU5hbWVzcGFjZU1hcCwgYXN5bmMgKCkgPT4ge1xuXHRcdGNvbnN0IHRlbXBsYXRlZFhNTCA9IGF3YWl0IGdldFRlbXBsYXRpbmdSZXN1bHQoXG5cdFx0XHR4bWxJbnB1dCxcblx0XHRcdHNNZXRhZGF0YVVybCxcblx0XHRcdG1CaW5kaW5nQ29udGV4dHMsXG5cdFx0XHRtTW9kZWxzLFxuXHRcdFx0ZmxleENoYW5nZXMsXG5cdFx0XHRmYWtlU2lkZUVmZmVjdFNlcnZpY2Vcblx0XHQpO1xuXHRcdGNvbnN0IHNlcmlhbGllZFhNTCA9IHNlcmlhbGl6ZVhNTCh0ZW1wbGF0ZWRYTUwsIHVuZGVmaW5lZCk7XG5cdFx0ZXhwZWN0KHNlcmlhbGllZFhNTCkubm90LnRvSGF2ZVRlbXBsYXRpbmdFcnJvcnMoKTtcblx0XHRyZXR1cm4gc2VyaWFsaWVkWE1MO1xuXHR9KSBhcyB1bmtub3duIGFzIFByb21pc2U8c3RyaW5nPjtcbn07XG5cbi8qKlxuICogUHJvY2VzcyB0aGUgcmVxdWVzdGVkIHZpZXcgd2l0aCB0aGUgcHJvdmlkZWQgZGF0YS5cbiAqIEBwYXJhbSBuYW1lIEZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSB2aWV3IHRvIGJlIHRlc3RlZC5cbiAqIEBwYXJhbSBzTWV0YWRhdGFVcmwgVXJsIG9mIHRoZSBtZXRhZGF0YS5cbiAqIEBwYXJhbSBtQmluZGluZ0NvbnRleHRzIE1hcCBvZiB0aGUgYmluZGluZ0NvbnRleHRzIHRvIHNldCBvbiB0aGUgbW9kZWxzLlxuICogQHBhcmFtIG1Nb2RlbHMgTWFwIG9mIHRoZSBtb2RlbHMuXG4gKiBAcGFyYW0gZmxleENoYW5nZXMgT2JqZWN0IHdpdGggVUkgY2hhbmdlcyBsaWtlICdjaGFuZ2VzJyBvciAndmFyaWFudERlcGVuZGVudENvbnRyb2xDaGFuZ2VzJ1xuICogQHJldHVybnMgVGVtcGxhdGVkIHZpZXcgYXMgc3RyaW5nXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzVmlldyhcblx0bmFtZTogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9LFxuXHRmbGV4Q2hhbmdlcz86IHsgW3g6IHN0cmluZ106IG9iamVjdFtdIH1cbik6IFByb21pc2U8SmVzdFRlbXBsYXRlZFZpZXc+IHtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IGF3YWl0IGdldE1ldGFNb2RlbChzTWV0YWRhdGFVcmwpO1xuXHRjb25zdCBvVmlld0RvY3VtZW50ID0gX2xvYWRSZXNvdXJjZVZpZXcobmFtZSk7XG5cdGNvbnN0IG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IGF3YWl0IF9idWlsZFByZVByb2Nlc3NvclNldHRpbmdzKHNNZXRhZGF0YVVybCwgbUJpbmRpbmdDb250ZXh0cywgbU1vZGVscyk7XG5cdGxldCBvUHJlcHJvY2Vzc2VkVmlldyA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKG9WaWV3RG9jdW1lbnQsIHsgbmFtZTogbmFtZSB9LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MpO1xuXHRpZiAoZmxleENoYW5nZXMpIHtcblx0XHRvUHJlcHJvY2Vzc2VkVmlldyA9IGF3YWl0IGFwcGx5RmxleENoYW5nZXMoZmxleENoYW5nZXMgPz8gW10sIG9NZXRhTW9kZWwsIG9QcmVwcm9jZXNzZWRWaWV3KTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdGFzRWxlbWVudDogb1ByZXByb2Nlc3NlZFZpZXcsXG5cdFx0YXNTdHJpbmc6IGZvcm1hdFhNTChvUHJlcHJvY2Vzc2VkVmlldz8ub3V0ZXJIVE1MIHx8IFwiXCIpXG5cdH07XG59XG5cbi8qKlxuICogUHJvY2VzcyB0aGUgcmVxdWVzdGVkIFhNTCBmcmFnbWVudCB3aXRoIHRoZSBwcm92aWRlZCBkYXRhLlxuICogQHBhcmFtIG5hbWUgRnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGZyYWdtZW50IHRvIGJlIHRlc3RlZC5cbiAqIEBwYXJhbSB0ZXN0RGF0YSBUZXN0IGRhdGEgY29uc2lzdGluZ1xuICogQHJldHVybnMgVGVtcGxhdGVkIGZyYWdtZW50IGFzIHN0cmluZ1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0ZyYWdtZW50KG5hbWU6IHN0cmluZywgdGVzdERhdGE6IHsgW21vZGVsOiBzdHJpbmddOiBvYmplY3QgfSk6IFByb21pc2U8c3RyaW5nPiB7XG5cdGNvbnN0IGlucHV0WG1sID0gYDxyb290Pjxjb3JlOkZyYWdtZW50IGZyYWdtZW50TmFtZT1cIiR7bmFtZX1cIiB0eXBlPVwiWE1MXCIgeG1sbnM6Y29yZT1cInNhcC51aS5jb3JlXCIgLz48L3Jvb3Q+YDtcblx0Y29uc3QgcGFyc2VyID0gbmV3IHdpbmRvdy5ET01QYXJzZXIoKTtcblxuXHRjb25zdCBpbnB1dERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoaW5wdXRYbWwsIFwidGV4dC94bWxcIik7XG5cblx0Ly8gYnVpbGQgbW9kZWwgYW5kIGJpbmRpbmdzIGZvciBnaXZlbiB0ZXN0IGRhdGFcblx0Y29uc3Qgc2V0dGluZ3MgPSB7XG5cdFx0bW9kZWxzOiB7fSBhcyB7IFtuYW1lOiBzdHJpbmddOiBKU09OTW9kZWwgfSxcblx0XHRiaW5kaW5nQ29udGV4dHM6IHt9IGFzIHsgW25hbWU6IHN0cmluZ106IG9iamVjdCB9LFxuXHRcdGFwcENvbXBvbmVudDogeyBnZXRTaWRlRWZmZWN0c1NlcnZpY2U6IGplc3QuZm4oKSwgZ2V0RGlhZ25vc3RpY3M6ICgpID0+IHVuZGVmaW5lZCB9XG5cdH07XG5cdGZvciAoY29uc3QgbW9kZWwgaW4gdGVzdERhdGEpIHtcblx0XHRjb25zdCBqc29uTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0anNvbk1vZGVsLnNldERhdGEodGVzdERhdGFbbW9kZWxdKTtcblx0XHRzZXR0aW5ncy5tb2RlbHNbbW9kZWxdID0ganNvbk1vZGVsO1xuXHRcdHNldHRpbmdzLmJpbmRpbmdDb250ZXh0c1ttb2RlbF0gPSBzZXR0aW5ncy5tb2RlbHNbbW9kZWxdLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblx0fVxuXHRzZXR0aW5ncy5hcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlLm1vY2tSZXR1cm5WYWx1ZShkZWZhdWx0RmFrZVNpZGVFZmZlY3RTZXJ2aWNlKTtcblxuXHQvLyBleGVjdXRlIHRoZSBwcmUtcHJvY2Vzc29yXG5cdGNvbnN0IHJlc3VsdERvYyA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKGlucHV0RG9jLmZpcnN0RWxlbWVudENoaWxkLCB7IG5hbWUgfSwgc2V0dGluZ3MpO1xuXG5cdC8vIGV4Y2x1ZGUgbmVzdGVkIGZyYWdtZW50cyBmcm9tIHRlc3Qgc25hcHNob3RzXG5cdGNvbnN0IGZyYWdtZW50cyA9IHJlc3VsdERvYy5nZXRFbGVtZW50c0J5VGFnTmFtZShcImNvcmU6RnJhZ21lbnRcIikgYXMgYW55O1xuXHRpZiAoZnJhZ21lbnRzPy5sZW5ndGggPiAwKSB7XG5cdFx0Zm9yIChjb25zdCBmcmFnbWVudCBvZiBmcmFnbWVudHMpIHtcblx0XHRcdGZyYWdtZW50LmlubmVySFRNTCA9IFwiXCI7XG5cdFx0fVxuXHR9XG5cblx0Ly8gS2VlcCB0aGUgZnJhZ21lbnQgcmVzdWx0IGFzIGNoaWxkIG9mIHJvb3Qgbm9kZSB3aGVuIGZyYWdtZW50IGdlbmVyYXRlcyBtdWx0aXBsZSByb290IGNvbnRyb2xzXG5cdGNvbnN0IHhtbFJlc3VsdCA9IHJlc3VsdERvYy5jaGlsZHJlbi5sZW5ndGggPiAxID8gcmVzdWx0RG9jLm91dGVySFRNTCA6IHJlc3VsdERvYy5pbm5lckhUTUw7XG5cblx0cmV0dXJuIGZvcm1hdFhNTCh4bWxSZXN1bHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplQ29udHJvbChjb250cm9sVG9TZXJpYWxpemU/OiBVSTVFbGVtZW50IHwgVUk1RWxlbWVudFtdLCBzaG93Q3VzdG9tU3R5bGVDbGFzc2VzID0gZmFsc2UpIHtcblx0bGV0IHRhYkNvdW50ID0gMDtcblx0Y29uc3QgVUlEID0gL3VpZC0taWQtXFxkezEzfS1cXGR7MSwzfS87XG5cdGNvbnN0IENPTlRST0xJRCA9IC9pZC1cXGR7MTN9LVxcZHsxLDN9Lztcblx0ZnVuY3Rpb24gZ2V0VGFiKHRvQWRkID0gMCkge1xuXHRcdGxldCB0YWIgPSBcIlwiO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGFiQ291bnQgKyB0b0FkZDsgaSsrKSB7XG5cdFx0XHR0YWIgKz0gXCJcXHRcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHRhYjtcblx0fVxuXHRjb25zdCBzZXJpYWxpemVEZWxlZ2F0ZSA9IHtcblx0XHRzdGFydDogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSwgc0FnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRsZXQgY29udHJvbERldGFpbCA9IFwiXCI7XG5cdFx0XHRpZiAoc0FnZ3JlZ2F0aW9uTmFtZSkge1xuXHRcdFx0XHRpZiAoY29udHJvbC5nZXRQYXJlbnQoKSkge1xuXHRcdFx0XHRcdGNvbnN0IGluZGV4SW5QYXJlbnQgPSAoY29udHJvbC5nZXRQYXJlbnQoKS5nZXRBZ2dyZWdhdGlvbihzQWdncmVnYXRpb25OYW1lKSBhcyBNYW5hZ2VkT2JqZWN0W10pPy5pbmRleE9mPy4oY29udHJvbCk7XG5cdFx0XHRcdFx0aWYgKGluZGV4SW5QYXJlbnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRjb250cm9sRGV0YWlsICs9IGAsXFxuJHtnZXRUYWIoKX1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29udHJvbERldGFpbCArPSBgJHtjb250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfShgO1xuXHRcdFx0cmV0dXJuIGNvbnRyb2xEZXRhaWw7XG5cdFx0fSxcblx0XHRlbmQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBcIn0pXCI7XG5cdFx0fSxcblx0XHRtaWRkbGU6IGZ1bmN0aW9uIChjb250cm9sOiBhbnkpIHtcblx0XHRcdGxldCBpZCA9IGNvbnRyb2wuZ2V0SWQoKTtcblx0XHRcdGlkID0gdHlwZW9mIGlkID09PSBcInN0cmluZ1wiID8gaWQ/LnJlcGxhY2U/LihDT05UUk9MSUQsIFwiaWRcIikgOiBpZDtcblx0XHRcdGxldCBkYXRhID0gYHtpZDogJHtNYW5hZ2VkT2JqZWN0TWV0YWRhdGEuaXNHZW5lcmF0ZWRJZChpZCkgPyBcIl9fZHluYW1pY0lkXCIgOiBpZH1gO1xuXHRcdFx0Zm9yIChjb25zdCBvQ29udHJvbEtleSBpbiBjb250cm9sLm1Qcm9wZXJ0aWVzKSB7XG5cdFx0XHRcdGlmIChjb250cm9sLm1Qcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGxldCBwcm9wZXJ0eVZhbHVlID0gY29udHJvbC5tUHJvcGVydGllc1tvQ29udHJvbEtleV07XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSBcInN0cmluZ1wiID8gcHJvcGVydHlWYWx1ZT8ucmVwbGFjZT8uKFVJRCwgXCJ1aWQtLWlkXCIpIDogcHJvcGVydHlWYWx1ZTtcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdHlwZW9mIHByb3BlcnR5VmFsdWUgPT09IFwic3RyaW5nXCIgPyBwcm9wZXJ0eVZhbHVlPy5yZXBsYWNlPy4oQ09OVFJPTElELCBcImlkXCIpIDogcHJvcGVydHlWYWx1ZTtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSBcIm9iamVjdFwiID8gSlNPTi5zdHJpbmdpZnkocHJvcGVydHlWYWx1ZSkgOiBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdC8vIFN0cmluZ2lmeSBtYXkgZmFpbCBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyBidXQgaXQncyBub3QgdGhlIGVuZCBvZiB0aGUgd29ybGRcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRkYXRhICs9IGAsXFxuJHtnZXRUYWIoKX0gJHtvQ29udHJvbEtleX06ICR7cHJvcGVydHlWYWx1ZX1gO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wubUJpbmRpbmdJbmZvcy5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRjb25zdCBiaW5kaW5nRGV0YWlsID0geyAuLi5jb250cm9sLm1CaW5kaW5nSW5mb3Nbb0NvbnRyb2xLZXldIH07XG5cdFx0XHRcdFx0aWYgKGJpbmRpbmdEZXRhaWwudHlwZT8ub091dHB1dEZvcm1hdCkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIGJpbmRpbmdEZXRhaWwudHlwZS5vT3V0cHV0Rm9ybWF0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoYmluZGluZ0RldGFpbC5iaW5kaW5nKSB7XG5cdFx0XHRcdFx0XHRkZWxldGUgYmluZGluZ0RldGFpbC5iaW5kaW5nO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkYXRhICs9IGAsXFxuJHtnZXRUYWIoKX0gJHtvQ29udHJvbEtleX06ICR7SlNPTi5zdHJpbmdpZnkoYmluZGluZ0RldGFpbCl9YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Zm9yIChjb25zdCBvQ29udHJvbEtleSBpbiBjb250cm9sLm1Bc3NvY2lhdGlvbnMpIHtcblx0XHRcdFx0aWYgKGNvbnRyb2wubUFzc29jaWF0aW9ucy5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRsZXQgYXNzb2NpYXRpb25WYWx1ZSA9IGNvbnRyb2wubUFzc29jaWF0aW9uc1tvQ29udHJvbEtleV07XG5cdFx0XHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KGFzc29jaWF0aW9uVmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRhc3NvY2lhdGlvblZhbHVlID0gW2Fzc29jaWF0aW9uVmFsdWVdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhc3NvY2lhdGlvblZhbHVlID0gYXNzb2NpYXRpb25WYWx1ZS5tYXAoKGFzc29jaWF0aW9uVmFsdWVFbGVtZW50OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRcdGlmICh0eXBlb2YgYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIE1hbmFnZWRPYmplY3RNZXRhZGF0YS5pc0dlbmVyYXRlZElkKGFzc29jaWF0aW9uVmFsdWVFbGVtZW50KVxuXHRcdFx0XHRcdFx0XHRcdD8gXCJfX2R5bmFtaWNJZFwiXG5cdFx0XHRcdFx0XHRcdFx0OiBhc3NvY2lhdGlvblZhbHVlRWxlbWVudD8ucmVwbGFjZT8uKENPTlRST0xJRCwgXCJpZFwiKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhc3NvY2lhdGlvblZhbHVlRWxlbWVudDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGRhdGEgKz0gYCxcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fTogJHsoYXNzb2NpYXRpb25WYWx1ZT8uam9pbj8uKFwiLFwiKSA/PyBhc3NvY2lhdGlvblZhbHVlKSB8fCB1bmRlZmluZWR9YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHNob3dDdXN0b21TdHlsZUNsYXNzZXMgJiYgY29udHJvbC5hQ3VzdG9tU3R5bGVDbGFzc2VzPy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGRhdGEgKz0gYCxcXG4ke2dldFRhYigpfSBjdXN0b21TdHlsZUNsYXNzZXMgOiAke2NvbnRyb2wuYUN1c3RvbVN0eWxlQ2xhc3Nlcy5qb2luKFwiLCBcIil9YDtcblx0XHRcdH1cblx0XHRcdGZvciAoY29uc3Qgb0NvbnRyb2xLZXkgaW4gY29udHJvbC5tRXZlbnRSZWdpc3RyeSkge1xuXHRcdFx0XHRpZiAoY29udHJvbC5tRXZlbnRSZWdpc3RyeS5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRkYXRhICs9IGAsXFxuJHtnZXRUYWIoKX0gJHtvQ29udHJvbEtleX06IHRydWVgO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRkYXRhICs9IGBgO1xuXHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0fSxcblx0XHRzdGFydEFnZ3JlZ2F0aW9uOiBmdW5jdGlvbiAoY29udHJvbDogeyBtQmluZGluZ0luZm9zOiBSZWNvcmQ8c3RyaW5nLCBCYXNlQWdncmVnYXRpb25CaW5kaW5nSW5mbz4gfSwgc05hbWU6IHN0cmluZykge1xuXHRcdFx0bGV0IG91dCA9IGAsXFxuJHtnZXRUYWIoKX0ke3NOYW1lfWA7XG5cdFx0XHR0YWJDb3VudCsrO1xuXG5cdFx0XHRpZiAoY29udHJvbC5tQmluZGluZ0luZm9zW3NOYW1lXSkge1xuXHRcdFx0XHRvdXQgKz0gYD17IHBhdGg6JyR7Y29udHJvbC5tQmluZGluZ0luZm9zW3NOYW1lXS5wYXRofScsIHRlbXBsYXRlOlxcbiR7Z2V0VGFiKCl9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dCArPSBgPVtcXG4ke2dldFRhYigpfWA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb3V0O1xuXHRcdH0sXG5cdFx0ZW5kQWdncmVnYXRpb246IGZ1bmN0aW9uIChjb250cm9sOiBhbnksIHNOYW1lOiBzdHJpbmcpIHtcblx0XHRcdHRhYkNvdW50LS07XG5cdFx0XHRpZiAoY29udHJvbC5tQmluZGluZ0luZm9zW3NOYW1lXSkge1xuXHRcdFx0XHRyZXR1cm4gYFxcbiR7Z2V0VGFiKCl9fWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gYFxcbiR7Z2V0VGFiKCl9XWA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAoQXJyYXkuaXNBcnJheShjb250cm9sVG9TZXJpYWxpemUpKSB7XG5cdFx0cmV0dXJuIGNvbnRyb2xUb1NlcmlhbGl6ZS5tYXAoKGNvbnRyb2xUb1JlbmRlcjogVUk1RWxlbWVudCkgPT4ge1xuXHRcdFx0cmV0dXJuIG5ldyBTZXJpYWxpemVyKGNvbnRyb2xUb1JlbmRlciwgc2VyaWFsaXplRGVsZWdhdGUpLnNlcmlhbGl6ZSgpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBuZXcgU2VyaWFsaXplcihjb250cm9sVG9TZXJpYWxpemUsIHNlcmlhbGl6ZURlbGVnYXRlKS5zZXJpYWxpemUoKTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplQ29udHJvbEFzWE1MKFxuXHRjb250cm9sVG9TZXJpYWxpemU/OiBNYW5hZ2VkT2JqZWN0IHwgTWFuYWdlZE9iamVjdFtdIHwgbnVsbCxcblx0c2hvd0N1c3RvbVN0eWxlQ2xhc3NlcyA9IGZhbHNlLFxuXHRwcmVmZXJWYWx1ZSA9IGZhbHNlXG4pIHtcblx0bGV0IHRhYkNvdW50ID0gMDtcblx0Y29uc3QgVUlEID0gL3VpZC0taWQtXFxkezEzfS1cXGR7MSwzfS87XG5cdGNvbnN0IENPTlRST0xJRCA9IC9pZC1cXGR7MTN9LVxcZHsxLDN9Lztcblx0Y29uc3QgZGVmaW5lZE5hbWVzcGFjZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcblxuXHRmdW5jdGlvbiBnZXROYW1lc3BhY2VBbGlhcyhjbGFzc05hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgbmFtZXNTcGxpdCA9IGNsYXNzTmFtZS5zcGxpdChcIi5cIik7XG5cdFx0Y29uc3QgbmFtZXNwYWNlID0gbmFtZXNTcGxpdC5zbGljZSgwLCAtMSk7XG5cdFx0Y29uc3QgbmFtZSA9IG5hbWVzU3BsaXRbbmFtZXNTcGxpdC5sZW5ndGggLSAxXTtcblx0XHRsZXQgbmFtZXNwYWNlQWxpYXMgPSBuYW1lc3BhY2VbbmFtZXNwYWNlLmxlbmd0aCAtIDFdO1xuXHRcdGlmIChyZXZlc2VOYW1lc3BhY2VNYXBbbmFtZXNwYWNlLmpvaW4oXCIuXCIpXSkge1xuXHRcdFx0bmFtZXNwYWNlQWxpYXMgPSByZXZlc2VOYW1lc3BhY2VNYXBbbmFtZXNwYWNlLmpvaW4oXCIuXCIpXTtcblx0XHR9XG5cdFx0aWYgKG5hbWVzcGFjZUFsaWFzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG5hbWVzcGFjZUFsaWFzID0gXCJ0ZXN0XCI7XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lc3BhY2VBbGlhcztcblx0fVxuXG5cdGZ1bmN0aW9uIGdldFRhYih0b0FkZCA9IDApIHtcblx0XHRsZXQgdGFiID0gXCJcIjtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRhYkNvdW50ICsgdG9BZGQ7IGkrKykge1xuXHRcdFx0dGFiICs9IFwiXFx0XCI7XG5cdFx0fVxuXHRcdHJldHVybiB0YWI7XG5cdH1cblx0Y29uc3Qgc2VyaWFsaXplRGVsZWdhdGUgPSB7XG5cdFx0c3RhcnQ6IGZ1bmN0aW9uIChjb250cm9sOiBhbnksIHNBZ2dyZWdhdGlvbk5hbWU6IHN0cmluZykge1xuXHRcdFx0bGV0IGNvbnRyb2xEZXRhaWwgPSBcIlwiO1xuXHRcdFx0aWYgKHNBZ2dyZWdhdGlvbk5hbWUpIHtcblx0XHRcdFx0aWYgKGNvbnRyb2wuZ2V0UGFyZW50KCkpIHtcblx0XHRcdFx0XHRjb25zdCBpbmRleEluUGFyZW50ID0gKGNvbnRyb2wuZ2V0UGFyZW50KCkuZ2V0QWdncmVnYXRpb24oc0FnZ3JlZ2F0aW9uTmFtZSkgYXMgTWFuYWdlZE9iamVjdFtdKT8uaW5kZXhPZj8uKGNvbnRyb2wpO1xuXHRcdFx0XHRcdGlmIChpbmRleEluUGFyZW50ID4gMCkge1xuXHRcdFx0XHRcdFx0Y29udHJvbERldGFpbCArPSBgXFxuJHtnZXRUYWIoKX1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29uc3QgbmFtZUZ1bGwgPSBjb250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpO1xuXHRcdFx0Y29uc3QgbmFtZXNTcGxpdCA9IG5hbWVGdWxsLnNwbGl0KFwiLlwiKTtcblx0XHRcdGNvbnN0IG5hbWUgPSBuYW1lc1NwbGl0W25hbWVzU3BsaXQubGVuZ3RoIC0gMV07XG5cdFx0XHRjb25zdCBuYW1lc3BhY2VBbGlhcyA9IGdldE5hbWVzcGFjZUFsaWFzKG5hbWVGdWxsKTtcblx0XHRcdGNvbnRyb2xEZXRhaWwgKz0gYDwke25hbWVzcGFjZUFsaWFzfToke25hbWV9XFxuYDtcblx0XHRcdGlmICghZGVmaW5lZE5hbWVzcGFjZXNbbmFtZXNwYWNlQWxpYXNdKSB7XG5cdFx0XHRcdGRlZmluZWROYW1lc3BhY2VzW25hbWVzcGFjZUFsaWFzXSA9IDE7XG5cdFx0XHRcdGNvbnRyb2xEZXRhaWwgKz0gYCR7Z2V0VGFiKCl9eG1sbnM6JHtuYW1lc3BhY2VBbGlhc309XCIke25hbWVTcGFjZU1hcFtuYW1lc3BhY2VBbGlhc119XCJcXG5gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVmaW5lZE5hbWVzcGFjZXNbbmFtZXNwYWNlQWxpYXNdKys7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY29udHJvbERldGFpbDtcblx0XHR9LFxuXHRcdGVuZDogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSkge1xuXHRcdFx0Y29uc3QgbmFtZUZ1bGwgPSBjb250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpO1xuXHRcdFx0Y29uc3QgbmFtZXNTcGxpdCA9IG5hbWVGdWxsLnNwbGl0KFwiLlwiKTtcblx0XHRcdGNvbnN0IG5hbWUgPSBuYW1lc1NwbGl0W25hbWVzU3BsaXQubGVuZ3RoIC0gMV07XG5cdFx0XHRjb25zdCBuYW1lc3BhY2VBbGlhcyA9IGdldE5hbWVzcGFjZUFsaWFzKG5hbWVGdWxsKTtcblx0XHRcdGxldCBoYXNBZ2dyZWdhdGlvbiA9IGZhbHNlO1xuXHRcdFx0Zm9yIChjb25zdCBtQWdncmVnYXRpb25zS2V5IGluIGNvbnRyb2wubUFnZ3JlZ2F0aW9ucykge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0KCFBcnJheS5pc0FycmF5KGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XSkgJiZcblx0XHRcdFx0XHRcdGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XSAhPT0gbnVsbCAmJlxuXHRcdFx0XHRcdFx0Y29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldICE9PSB1bmRlZmluZWQpIHx8XG5cdFx0XHRcdFx0KEFycmF5LmlzQXJyYXkoY29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldKSAmJiBjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0ubGVuZ3RoID4gMClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0aGFzQWdncmVnYXRpb24gPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRkZWZpbmVkTmFtZXNwYWNlc1tuYW1lc3BhY2VBbGlhc10tLTtcblx0XHRcdGlmIChoYXNBZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gYDwvJHtuYW1lc3BhY2VBbGlhc306JHtuYW1lfT5gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGAvPmA7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRtaWRkbGU6IGZ1bmN0aW9uIChjb250cm9sOiBhbnkpIHtcblx0XHRcdGxldCBpZCA9IGNvbnRyb2wuZ2V0SWQoKTtcblx0XHRcdGlkID0gdHlwZW9mIGlkID09PSBcInN0cmluZ1wiID8gaWQ/LnJlcGxhY2U/LihDT05UUk9MSUQsIFwiaWRcIikgOiBpZDtcblx0XHRcdGxldCBkYXRhID0gXCJcIjtcblx0XHRcdGlmICghTWFuYWdlZE9iamVjdE1ldGFkYXRhLmlzR2VuZXJhdGVkSWQoaWQpKSB7XG5cdFx0XHRcdGRhdGEgPSBgaWQ9XCIke2lkfVwiYDtcblx0XHRcdH1cblx0XHRcdGxldCBrZXlzID0gT2JqZWN0LmtleXMoY29udHJvbC5tUHJvcGVydGllcylcblx0XHRcdFx0LmZpbHRlcigocHJvcE5hbWUpID0+IHByb3BOYW1lICE9PSBcImlkXCIpXG5cdFx0XHRcdC5jb25jYXQoT2JqZWN0LmtleXMoY29udHJvbC5tQmluZGluZ0luZm9zKSlcblx0XHRcdFx0LmNvbmNhdChPYmplY3Qua2V5cyhjb250cm9sLm1Bc3NvY2lhdGlvbnMpKVxuXHRcdFx0XHQuY29uY2F0KE9iamVjdC5rZXlzKGNvbnRyb2wubUV2ZW50UmVnaXN0cnkpKTtcblx0XHRcdGtleXMgPSBrZXlzLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG5cdFx0XHRjb25zdCB1bmlxdWVLZXlzID0gbmV3IFNldChrZXlzKTtcblx0XHRcdGtleXMgPSBBcnJheS5mcm9tKHVuaXF1ZUtleXMpO1xuXHRcdFx0Zm9yIChjb25zdCBvQ29udHJvbEtleSBvZiBrZXlzKSB7XG5cdFx0XHRcdGlmICghcHJlZmVyVmFsdWUgJiYgY29udHJvbC5tQmluZGluZ0luZm9zLmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGNvbnN0IGJpbmRpbmdEZXRhaWwgPSB7IC4uLmNvbnRyb2wubUJpbmRpbmdJbmZvc1tvQ29udHJvbEtleV0gfTtcblx0XHRcdFx0XHRpZiAoYmluZGluZ0RldGFpbC5iaW5kaW5nU3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRkYXRhICs9IGBcXG4ke2dldFRhYigpfSR7b0NvbnRyb2xLZXl9PVwiJHtiaW5kaW5nRGV0YWlsLmJpbmRpbmdTdHJpbmcucmVwbGFjZShcIj5cIiwgXCImZ3Q7XCIpfVwiYDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKGJpbmRpbmdEZXRhaWwudHlwZT8ub091dHB1dEZvcm1hdCkge1xuXHRcdFx0XHRcdFx0XHRkZWxldGUgYmluZGluZ0RldGFpbC50eXBlLm9PdXRwdXRGb3JtYXQ7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChiaW5kaW5nRGV0YWlsLmJpbmRpbmcpIHtcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIGJpbmRpbmdEZXRhaWwuYmluZGluZztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChiaW5kaW5nRGV0YWlsLnRlbXBsYXRlKSB7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBiaW5kaW5nRGV0YWlsLnRlbXBsYXRlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZGF0YSArPSBgXFxuJHtnZXRUYWIoKX0ke29Db250cm9sS2V5fT0nJHtKU09OLnN0cmluZ2lmeShiaW5kaW5nRGV0YWlsKX0nYDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5tUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkgJiYgY29udHJvbC5tUHJvcGVydGllc1tvQ29udHJvbEtleV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGxldCBwcm9wZXJ0eVZhbHVlID0gY29udHJvbC5tUHJvcGVydGllc1tvQ29udHJvbEtleV07XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlWYWx1ZS5yZXBsYWNlKFVJRCwgXCJ1aWQtLWlkXCIpLnJlcGxhY2UoQ09OVFJPTElELCBcImlkXCIpLnJlcGxhY2UoL1wiL2csIFwiJnF1b3Q7XCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9XG5cdFx0XHRcdFx0XHRcdHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSBcIm9iamVjdFwiID8gSlNPTi5zdHJpbmdpZnkocHJvcGVydHlWYWx1ZSkucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIikgOiBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdC8vIFN0cmluZ2lmeSBtYXkgZmFpbCBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyBidXQgaXQncyBub3QgdGhlIGVuZCBvZiB0aGUgd29ybGRcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRkYXRhICs9IGBcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fT1cIiR7cHJvcGVydHlWYWx1ZX1cImA7XG5cdFx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5tQXNzb2NpYXRpb25zLmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGxldCBhc3NvY2lhdGlvblZhbHVlID0gY29udHJvbC5tQXNzb2NpYXRpb25zW29Db250cm9sS2V5XTtcblx0XHRcdFx0XHRpZiAoIUFycmF5LmlzQXJyYXkoYXNzb2NpYXRpb25WYWx1ZSkpIHtcblx0XHRcdFx0XHRcdGFzc29jaWF0aW9uVmFsdWUgPSBbYXNzb2NpYXRpb25WYWx1ZV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGFzc29jaWF0aW9uVmFsdWUgPSBhc3NvY2lhdGlvblZhbHVlLm1hcCgoYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQ6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHR5cGVvZiBhc3NvY2lhdGlvblZhbHVlRWxlbWVudCA9PT0gXCJzdHJpbmdcIlxuXHRcdFx0XHRcdFx0XHQ/IGFzc29jaWF0aW9uVmFsdWVFbGVtZW50Py5yZXBsYWNlPy4oQ09OVFJPTElELCBcImlkXCIpXG5cdFx0XHRcdFx0XHRcdDogYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQ7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRkYXRhICs9IGBcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fT1cIiR7KGFzc29jaWF0aW9uVmFsdWU/LmpvaW4/LihcIixcIikgPz8gYXNzb2NpYXRpb25WYWx1ZSkgfHwgdW5kZWZpbmVkfVwiYDtcblx0XHRcdFx0fSBlbHNlIGlmIChjb250cm9sLm1FdmVudFJlZ2lzdHJ5Lmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGlmIChjb250cm9sLm1FdmVudFJlZ2lzdHJ5W29Db250cm9sS2V5XVswXT8uZkZ1bmN0aW9uPy5uYW1lKSB7XG5cdFx0XHRcdFx0XHRkYXRhICs9IGBcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fT1cIiR7Y29udHJvbC5tRXZlbnRSZWdpc3RyeVtvQ29udHJvbEtleV1bMF0/LmZGdW5jdGlvbj8ubmFtZX1cImA7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGRhdGEgKz0gYFxcbiR7Z2V0VGFiKCl9ICR7b0NvbnRyb2xLZXl9PVwic29tZUV2ZW50SGFuZGxlclwiYDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChzaG93Q3VzdG9tU3R5bGVDbGFzc2VzICYmIGNvbnRyb2wuYUN1c3RvbVN0eWxlQ2xhc3Nlcz8ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRkYXRhICs9IGBcXG4ke2dldFRhYigpfSBjdXN0b21TdHlsZUNsYXNzZXMgOiAke2NvbnRyb2wuYUN1c3RvbVN0eWxlQ2xhc3Nlcy5qb2luKFwiLCBcIil9YDtcblx0XHRcdH1cblx0XHRcdGRhdGEgKz0gYFxcbmA7XG5cdFx0XHRsZXQgaGFzQWdncmVnYXRpb24gPSBmYWxzZTtcblx0XHRcdGZvciAoY29uc3QgbUFnZ3JlZ2F0aW9uc0tleSBpbiBjb250cm9sLm1BZ2dyZWdhdGlvbnMpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCghQXJyYXkuaXNBcnJheShjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0pICYmXG5cdFx0XHRcdFx0XHRjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0gIT09IG51bGwgJiZcblx0XHRcdFx0XHRcdGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XSAhPT0gdW5kZWZpbmVkKSB8fFxuXHRcdFx0XHRcdChBcnJheS5pc0FycmF5KGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XSkgJiYgY29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldLmxlbmd0aCA+IDApXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGhhc0FnZ3JlZ2F0aW9uID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGhhc0FnZ3JlZ2F0aW9uKSB7XG5cdFx0XHRcdGRhdGEgKz0gXCI+XCI7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9LFxuXHRcdHN0YXJ0QWdncmVnYXRpb246IGZ1bmN0aW9uIChjb250cm9sOiBhbnksIHNOYW1lOiBzdHJpbmcpIHtcblx0XHRcdGNvbnN0IG5hbWVzcGFjZUFsaWFzID0gZ2V0TmFtZXNwYWNlQWxpYXMoY29udHJvbC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSk7XG5cdFx0XHRsZXQgb3V0ID0gYFxcbiR7Z2V0VGFiKCl9PCR7bmFtZXNwYWNlQWxpYXN9OiR7c05hbWV9PmA7XG5cdFx0XHR0YWJDb3VudCsrO1xuXHRcdFx0b3V0ICs9IGBcXG4ke2dldFRhYigpfWA7XG5cdFx0XHRyZXR1cm4gb3V0O1xuXHRcdH0sXG5cdFx0ZW5kQWdncmVnYXRpb246IGZ1bmN0aW9uIChjb250cm9sOiBhbnksIHNOYW1lOiBzdHJpbmcpIHtcblx0XHRcdHRhYkNvdW50LS07XG5cdFx0XHRjb25zdCBuYW1lc3BhY2VBbGlhcyA9IGdldE5hbWVzcGFjZUFsaWFzKGNvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkpO1xuXHRcdFx0aWYgKGNvbnRyb2wubUJpbmRpbmdJbmZvc1tzTmFtZV0pIHtcblx0XHRcdFx0cmV0dXJuIGBcXG4ke2dldFRhYigpfTwvJHtuYW1lc3BhY2VBbGlhc306JHtzTmFtZX0+XFxuYDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBgXFxuJHtnZXRUYWIoKX08LyR7bmFtZXNwYWNlQWxpYXN9OiR7c05hbWV9PlxcbmA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRsZXQgb3V0WE1MO1xuXHRpZiAoQXJyYXkuaXNBcnJheShjb250cm9sVG9TZXJpYWxpemUpKSB7XG5cdFx0b3V0WE1MID0gY29udHJvbFRvU2VyaWFsaXplLm1hcCgoY29udHJvbFRvUmVuZGVyOiBNYW5hZ2VkT2JqZWN0KSA9PiB7XG5cdFx0XHRyZXR1cm4gbmV3IFNlcmlhbGl6ZXIoY29udHJvbFRvUmVuZGVyLCBzZXJpYWxpemVEZWxlZ2F0ZSkuc2VyaWFsaXplKCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b3V0WE1MID0gbmV3IFNlcmlhbGl6ZXIoY29udHJvbFRvU2VyaWFsaXplLCBzZXJpYWxpemVEZWxlZ2F0ZSkuc2VyaWFsaXplKCk7XG5cdH1cblx0cmV0dXJuIGZvcm1hdFhNTChgPHJvb3Q+JHtvdXRYTUx9PC9yb290PmApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXdhaXRlcigpIHtcblx0bGV0IGZuUmVzb2x2ZSE6IEZ1bmN0aW9uO1xuXHRjb25zdCBteVByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdGZuUmVzb2x2ZSA9IHJlc29sdmU7XG5cdH0pO1xuXHRyZXR1cm4geyBwcm9taXNlOiBteVByb21pc2UsIHJlc29sdmU6IGZuUmVzb2x2ZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJNb2NrRnJhZ21lbnRzKC4uLmZyYWdtZW50czogTW9ja0ZyYWdtZW50W10pOiBqZXN0LlNweUluc3RhbmNlIHtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0Y29uc3Qgb3JpZ2luYWxMb2FkVGVtcGxhdGUgPSAoWE1MVGVtcGxhdGVQcm9jZXNzb3IgYXMgYW55KS5sb2FkVGVtcGxhdGVQcm9taXNlO1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXHRjb25zdCBsb2FkVGVtcGxhdGVTdHViID0gamVzdC5zcHlPbihYTUxUZW1wbGF0ZVByb2Nlc3NvciBhcyBhbnksIFwibG9hZFRlbXBsYXRlUHJvbWlzZVwiKTtcblx0bG9hZFRlbXBsYXRlU3R1Yi5tb2NrSW1wbGVtZW50YXRpb24oKCh0ZW1wbGF0ZU5hbWU6IHN0cmluZywgZXh0ZW5zaW9uOiBzdHJpbmcpID0+IHtcblx0XHRmb3IgKGNvbnN0IGZyYWdtZW50IG9mIGZyYWdtZW50cykge1xuXHRcdFx0aWYgKGZyYWdtZW50Lm5hbWUgPT09IHRlbXBsYXRlTmFtZSkge1xuXHRcdFx0XHRyZXR1cm4gcGFyc2VYTUxTdHJpbmcoZnJhZ21lbnQuY29udGVudClbMF07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvcmlnaW5hbExvYWRUZW1wbGF0ZSh0ZW1wbGF0ZU5hbWUsIGV4dGVuc2lvbik7XG5cdH0pIGFzICgoKSA9PiBFbGVtZW50KSB8IHVuZGVmaW5lZCk7XG5cdHJldHVybiBsb2FkVGVtcGxhdGVTdHViO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgYW4gYXBwQ29tcG9uZW50IGFuZCB0ZW1wbGF0ZUNvbXBvbmVudCB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICogQHBhcmFtIG9wdGlvbnNcbiAqIEBwYXJhbSBvcHRpb25zLmNkc0ZpbGUgVGhlIHBhdGggdG8gdGhlIENEUyBmaWxlIHRvIHVzZSBmb3IgdGhlIGFwcENvbXBvbmVudFxuICogQHBhcmFtIG9wdGlvbnMubWFpbkNvbnRleHRQYXRoIFRoZSBtYWluIGNvbnRleHQgcGF0aCB0byB1c2UgZm9yIHRoZSBhcHBDb21wb25lbnRcbiAqIEBwYXJhbSBvcHRpb25zLnBhZ2VDb250ZW50IFRoZSBwYWdlIGNvbnRlbnQgdG8gdXNlIGZvciB0aGUgYXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gb3B0aW9ucy5jb250ZW50IFRoZSBjb250ZW50IHRvIHVzZSBmb3IgdGhlIGFwcCBDb21wb25lbnRcbiAqIEBwYXJhbSBvcHRpb25zLmNvbXBvbmVudElkXG4gKiBAcGFyYW0gb3B0aW9ucy5tYW5pZmVzdFNldHRpbmdzXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSB0byB1c2UgZm9yIHRoZSBhcHBDb21wb25lbnRcbiAqIEBwYXJhbSB2aWV3TGV2ZWwgVGhlIHZpZXcgbGV2ZWwgdG8gdXNlIGZvciB0aGUgYXBwQ29tcG9uZW50XG4gKiBAcmV0dXJucyBUaGUgYXBwY29tcG9uZW50IGFuZCB0ZW1wbGF0ZUNvbXBvbmVudCB0byB1c2UgZm9yIHRlc3RpbmdcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluaXRpYWxpemVBcHBDb21wb25lbnQoXG5cdG9wdGlvbnM/OiB7XG5cdFx0Y2RzRmlsZT86IHN0cmluZztcblx0XHRjb21wb25lbnRJZD86IHN0cmluZztcblx0XHRtYWluQ29udGV4dFBhdGg/OiBzdHJpbmc7XG5cdFx0cGFnZUNvbnRlbnQ/OiBGdW5jdGlvbjtcblx0XHRtYW5pZmVzdFNldHRpbmdzPzogUGFydGlhbDxMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncyB8IE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzPjtcblx0XHRmZU1hbmlmZXN0U2V0dGluZ3M/OiBQYXJ0aWFsPE1hbmlmZXN0Q29udGVudFtcInNhcC5mZVwiXT47XG5cdFx0Y29udGVudD86IFBhcnRpYWw8TGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3NbXCJjb250ZW50XCJdIHwgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3NbXCJjb250ZW50XCJdPjtcblx0XHRndWlkPzogc3RyaW5nO1xuXHR9LFxuXHRuYW1lPzogc3RyaW5nLFxuXHR2aWV3TGV2ZWw/OiBudW1iZXJcbik6IFByb21pc2U8eyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDsgdGVtcGxhdGVDb21wb25lbnQ6IFRlbXBsYXRlQ29tcG9uZW50IH0+IHtcblx0amVzdC5zcHlPbihPRGF0YU1vZGVsLnByb3RvdHlwZSwgXCJzZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyXCIpLm1vY2tSZXR1cm5WYWx1ZSh1bmRlZmluZWQpO1xuXHRsZXQgY2RzRmlsZSA9IG9wdGlvbnM/LmNkc0ZpbGU7XG5cdGlmICghY2RzRmlsZSkge1xuXHRcdGNkc0ZpbGUgPSBjb21waWxlQ0RTKHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi9kYXRhL1Byb2R1Y3RzLmNkc1wiKSk7XG5cdH1cblx0Y29uc3QgZ3VpZCA9IG9wdGlvbnM/Lmd1aWQgPz8gdWlkKCk7XG5cdGNvbnN0IGlkID0gb3B0aW9ucz8uY29tcG9uZW50SWQgPz8gYHNhcC5mZS50ZXN0LiR7Z3VpZH1gO1xuXHRjb25zdCBjZHNDb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGNkc0ZpbGUpLnRvU3RyaW5nKCk7XG5cdHdpbmRvdy5qZXN0VUk1Lm1vY2tVcmwoYC9zYXAvZmUvY29yZS9tb2NrLyR7Z3VpZH0vJG1ldGFkYXRhP3NhcC1sYW5ndWFnZT1FTmAsIGNkc0NvbnRlbnQpO1xuXHRjbGFzcyBEZWZhdWx0UGFnZUNvbnRlbnQgZXh0ZW5kcyBQYWdlQ29udHJvbGxlciB7XG5cdFx0cmVuZGVyKCkge1xuXHRcdFx0cmV0dXJuIDxQYWdlPjwvUGFnZT47XG5cdFx0fVxuXHR9XG5cdHNhcC51aS5kZWZpbmUoYHNhcC9mZS90ZXN0LyR7Z3VpZH0vQ29tcG9uZW50YCwgW1wic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCJdLCBmdW5jdGlvbiAoX0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KSB7XG5cdFx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0XHRyZXR1cm4gQXBwQ29tcG9uZW50LmV4dGVuZChgc2FwLmZlLnRlc3QuJHtndWlkfS5Db21wb25lbnRgLCB7XG5cdFx0XHRtZXRhZGF0YToge1xuXHRcdFx0XHRtYW5pZmVzdDoge1xuXHRcdFx0XHRcdFwic2FwLmFwcFwiOiB7XG5cdFx0XHRcdFx0XHRpZDogYHRlc3Qke2d1aWR9YCxcblx0XHRcdFx0XHRcdHRpdGxlOiBcIkFwcCBUaXRsZVwiLFxuXHRcdFx0XHRcdFx0ZGF0YVNvdXJjZXM6IHtcblx0XHRcdFx0XHRcdFx0bWFpblNlcnZpY2U6IHtcblx0XHRcdFx0XHRcdFx0XHR1cmk6IGAvc2FwL2ZlL2NvcmUvbW9jay8ke2d1aWR9L2AsXG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJPRGF0YVwiLFxuXHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvZGF0YVZlcnNpb246IFwiNC4wXCJcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFwic2FwLnVpNVwiOiB7XG5cdFx0XHRcdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XHRcdFx0XCJcIjoge1xuXHRcdFx0XHRcdFx0XHRcdGRhdGFTb3VyY2U6IFwibWFpblNlcnZpY2VcIixcblx0XHRcdFx0XHRcdFx0XHRzZXR0aW5nczoge31cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHJvdXRpbmc6IHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0czoge1xuXHRcdFx0XHRcdFx0XHRcdERlZmF1bHQ6IHtcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiQ29tcG9uZW50XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lOiBuYW1lID8/IFwic2FwLmZlLmNvcmUuZnBtXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRpZDogXCJEZWZhdWx0XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHR2aWV3TGV2ZWw6IHZpZXdMZXZlbCxcblx0XHRcdFx0XHRcdFx0XHRcdG9wdGlvbnM6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3M6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuLi4ob3B0aW9ucz8ubWFuaWZlc3RTZXR0aW5ncyA/PyB7fSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg6IG9wdGlvbnM/Lm1haW5Db250ZXh0UGF0aCA/PyBcIi9Qcm9kdWN0c1wiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZpZXdUeXBlOiBcIkpTWFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZpZXdDb250ZW50OiBvcHRpb25zPy5wYWdlQ29udGVudCA/PyBEZWZhdWx0UGFnZUNvbnRlbnQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogb3B0aW9ucz8uY29udGVudFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRyb3V0ZXM6IFtcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiBcIjo/cXVlcnk6XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lOiBcIkRlZmF1bHRcIixcblx0XHRcdFx0XHRcdFx0XHRcdHRhcmdldDogXCJEZWZhdWx0XCJcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFwic2FwLmZlXCI6IG9wdGlvbnM/LmZlTWFuaWZlc3RTZXR0aW5ncyA/PyB7fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0pO1xuXHRjb25zdCBtb2NrQXBwQ29tcG9uZW50ID0gKGF3YWl0IENvbXBvbmVudC5jcmVhdGUoeyBuYW1lOiBgc2FwLmZlLnRlc3QuJHtndWlkfWAsIGlkOiBpZCB9KSkgYXMgQXBwQ29tcG9uZW50O1xuXG5cdGF3YWl0IG1vY2tBcHBDb21wb25lbnQuaW5pdGlhbGl6ZWQ7XG5cdGNvbnN0IHYgPSBhd2FpdCAobW9ja0FwcENvbXBvbmVudC5nZXRSb3V0ZXIoKS5nZXRUYXJnZXQoXCJEZWZhdWx0XCIpIGFzIHsgbG9hZD86IEZ1bmN0aW9uIH0pLmxvYWQ/LigpO1xuXHRyZXR1cm4geyBhcHBDb21wb25lbnQ6IG1vY2tBcHBDb21wb25lbnQsIHRlbXBsYXRlQ29tcG9uZW50OiB2Lm9iamVjdCB9O1xufVxuXG4vKipcbiAqIEZpbmQgYW4gZWxlbWVudCBpbiBhIGNvbGxlY3Rpb24gdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBzZWxlY3Rvci5cbiAqIEBwYXJhbSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gc2VsZWN0b3JcbiAqIEByZXR1cm5zIFRoZSBlbGVtZW50IHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3Igb3IgdW5kZWZpbmVkIGlmIG5vIGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2VsZWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRFbGVtZW50KGNvbGxlY3Rpb246IEhUTUxDb2xsZWN0aW9uLCBzZWxlY3RvcjogKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiBib29sZWFuKTogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGNvbGxlY3Rpb24ubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBlbGVtZW50ID0gY29sbGVjdGlvbi5pdGVtKGkpIGFzIEhUTUxFbGVtZW50O1xuXHRcdGlmIChzZWxlY3RvcihlbGVtZW50KSkge1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogV2FpdCBmb3IgYW4gZXZlbnQgdG8gYmUgcmVzb2x2ZWQgYmVmb3JlIGNvbnRpbnVpbmcuXG4gKiBAcGFyYW0gY29udHJvbFxuICogQHBhcmFtIGV2ZW50TmFtZVxuICogQHJldHVybnMgQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZXZlbnQgaXMgcmVjZWl2ZWRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JFdmVudDxUIGV4dGVuZHMge30+KGNvbnRyb2w6IEV2ZW50UHJvdmlkZXIsIGV2ZW50TmFtZTogc3RyaW5nKTogUHJvbWlzZTxVSTVFdmVudDxUPj4ge1xuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRjb250cm9sLmF0dGFjaEV2ZW50T25jZShldmVudE5hbWUsIChldmVudDogRXZlbnQpID0+IHtcblx0XHRcdHJlc29sdmUoZXZlbnQgYXMgdW5rbm93biBhcyBVSTVFdmVudDxUPik7XG5cdFx0fSk7XG5cdH0pO1xufVxuXG4vKipcbiAqIFRlbGwgdGhlIGJpbmRpbmcgcGFyc2VyIHRvIGtlZXAgdGhlIGJpbmRpbmcgc3RyaW5ncyBmb3IgdGVzdGluZy5cbiAqIEBwYXJhbSBlbmFibGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBrZWVwQmluZGluZ1N0cmluZ0ZvclRlc3QoZW5hYmxlZDogYm9vbGVhbik6IHZvaWQge1xuXHRCaW5kaW5nUGFyc2VyLl9rZWVwQmluZGluZ1N0cmluZ3MgPSBlbmFibGVkO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsYXlGb3IoZGVsYXk6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuXHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRzZXRUaW1lb3V0KHJlc29sdmUsIGRlbGF5KTtcblx0fSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7RUF3RUFBLEdBQUcsQ0FBQ0MsUUFBUSxDQUFDLENBQUMsRUFBUyxrQ0FBa0MsQ0FBQztFQUMxREMsSUFBSSxDQUFDQyxVQUFVLENBQUMsS0FBSyxDQUFDO0VBRXRCLE1BQU1DLFlBQW9DLEdBQUc7SUFDNUNDLEtBQUssRUFBRSxlQUFlO0lBQ3RCQyxVQUFVLEVBQUUscUJBQXFCO0lBQ2pDQyxNQUFNLEVBQUUsZUFBZTtJQUN2QkMsSUFBSSxFQUFF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
1106
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMb2ciLCJzZXRMZXZlbCIsImplc3QiLCJzZXRUaW1lb3V0IiwibmFtZVNwYWNlTWFwIiwibWFjcm8iLCJtYWNyb1NoYXJlIiwibWFjcm9zIiwiZmVCQiIsIm1hY3JvRmllbGQiLCJtYWNyb2RhdGEiLCJsb2ciLCJjdXN0b21EYXRhIiwiY29udHJvbCIsImNvbnRyb2xzIiwiY29yZSIsImR0IiwibSIsImYiLCJmbCIsImludGVybmFsTWFjcm8iLCJtZGMiLCJhY3Rpb250b29sYmFyIiwibWRjRmllbGQiLCJtZGNUYWJsZSIsInUiLCJ1eGFwIiwibWFjcm9NaWNyb0NoYXJ0IiwibWljcm9DaGFydCIsIm1hY3JvVGFibGUiLCJtZGN2YyIsIm1kY3YiLCJ2YWx1ZUhlbHAiLCJjb250ZW50U3dpdGNoZXIiLCJmaWx0ZXJCYXIiLCJkcmFmdEluZGljYXRvciIsInZpc3VhbEZpbHRlciIsImZpZWxkaGVscCIsInJldmVzZU5hbWVzcGFjZU1hcCIsIk9iamVjdCIsImtleXMiLCJyZWR1Y2UiLCJyZXZlcnNlTWFwIiwiY3VycmVudE5hbWUiLCJzZWxlY3QiLCJ4cGF0aCIsInVzZU5hbWVzcGFjZXMiLCJkZWZhdWx0RmFrZVNpZGVFZmZlY3RTZXJ2aWNlIiwiY29tcHV0ZUZpZWxkR3JvdXBJZHMiLCJfZ2V0VGVtcGxhdGVkU2VsZWN0b3IiLCJ4bWxkb20iLCJzZWxlY3RvciIsInJvb3RQYXRoIiwibm9kZU5hbWUiLCJzdGFydHNXaXRoIiwiX2J1aWxkUHJlUHJvY2Vzc29yU2V0dGluZ3MiLCJzTWV0YWRhdGFVcmwiLCJtQmluZGluZ0NvbnRleHRzIiwibU1vZGVscyIsImZha2VTaWRlRWZmZWN0U2VydmljZSIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJoYXNPd25Qcm9wZXJ0eSIsImFzc2lnbiIsImNvbnZlcnRlckNvbnRleHQiLCJUZW1wbGF0ZU1vZGVsIiwiZm9yRWFjaCIsInNNb2RlbE5hbWUiLCJpc1RlbXBsYXRlTW9kZWwiLCJkYXRhIiwic2V0dGluZ3MiLCJtb2RlbHMiLCJtZXRhTW9kZWwiLCJiaW5kaW5nQ29udGV4dHMiLCJhcHBDb21wb25lbnQiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJmbiIsImdldERpYWdub3N0aWNzIiwidW5kZWZpbmVkIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImdldE1hbmlmZXN0RW50cnkiLCJtb2NrUmV0dXJuVmFsdWUiLCJzS2V5IiwiZXhwZWN0IiwiZ2V0T2JqZWN0IiwidG9CZURlZmluZWQiLCJvTW9kZWwiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsIl9sb2FkUmVzb3VyY2VWaWV3Iiwidmlld05hbWUiLCJuYW1lIiwicmVwbGFjZSIsInZpZXciLCJMb2FkZXJFeHRlbnNpb25zIiwibG9hZFJlc291cmNlIiwiZG9jdW1lbnRFbGVtZW50IiwicnVuWFBhdGhRdWVyeSIsImV4dGVuZCIsInRvSGF2ZUNvbnRyb2wiLCJub2RlcyIsIm1lc3NhZ2UiLCJvdXRwdXRYbWwiLCJzZXJpYWxpemVYTUwiLCJwYXNzIiwibGVuZ3RoIiwidG9Ob3RIYXZlQ29udHJvbCIsInRvSGF2ZVRlbXBsYXRpbmdFcnJvcnMiLCJ4bWwiLCJ4bWxUZXh0IiwiYmFzZTY0RW50cmllcyIsIm1hdGNoIiwiZXJyb3JNZXNzYWdlcyIsIm1hcCIsImF0b2IiLCJzbGljZSIsImpvaW4iLCJfZXhwb3J0cyIsImZvcm1hdEJ1aWxkaW5nQmxvY2tYTUwiLCJ4bWxTdHJpbmciLCJBcnJheSIsImlzQXJyYXkiLCJmb3JtYXRYTUwiLCJnZXRDb250cm9sQXR0cmlidXRlIiwiY29udHJvbFNlbGVjdG9yIiwiYXR0cmlidXRlTmFtZSIsInhtbERvbSIsInNlcmlhbGl6ZXIiLCJ3aW5kb3ciLCJYTUxTZXJpYWxpemVyIiwibm9kZSIsInNlcmlhbGl6ZVRvU3RyaW5nIiwiU1RBUlQiLCJFTkQiLCJVSUQiLCJVSUQyIiwibGluZXMiLCJjdXJyZW50TGluZSIsImxldmVsIiwiYXR0cmlidXRlcyIsIm5ld2xpbmUiLCJwdXNoIiwicmVwZWF0IiwiYXBwZW5kQXR0cmlidXRlcyIsInNvcnQiLCJhIiwiYiIsImxvY2FsZUNvbXBhcmUiLCJpbmNsdWRlcyIsImF0dHJpYnV0ZSIsInZhbHVlIiwiYXBwZW5kIiwicGFyc2VyIiwicmVhZCIsImNyZWF0ZVBhcnNlciIsIm9uT3BlblRhZ1N0YXJ0Iiwib25PcGVuVGFnTmFtZSIsIm9uQXR0ck5hbWUiLCJ1bnNoaWZ0Iiwib25BdHRyVmFsdWUiLCJvbk9wZW5UYWdFbmQiLCJzZWxmQ2xvc2VkIiwib25DbG9zZVRhZ1N0YXJ0Iiwib25DbG9zZVRhZ05hbWUiLCJvbkNsb3NlVGFnRW5kIiwicGFyc2UiLCJ0cmltIiwiY29tcGlsZUNEUyIsImNkc1VybCIsIm9wdGlvbnMiLCJhcmd1bWVudHMiLCJjZHNTdHJpbmciLCJmcyIsInJlYWRGaWxlU3luYyIsImVkbXhDb250ZW50IiwiY2RzMmVkbXgiLCJkaXIiLCJwYXRoIiwicmVzb2x2ZSIsImFsbE9wdGlvbnMiLCJlbnRyaWVzIiwiZWRteEZpbGVOYW1lIiwiZmlsZW5hbWUiLCJfcmVmIiwib3B0aW9uS2V5Iiwib3B0aW9uVmFsdWUiLCJ0b1N0cmluZyIsImJhc2VuYW1lIiwiZWRteEZpbGVQYXRoIiwibWtkaXJTeW5jIiwicmVjdXJzaXZlIiwid3JpdGVGaWxlU3luYyIsImNkcyIsInNlcnZpY2UiLCJzb3VyY2VzIiwicmVxdWlyZSIsImNzbiIsImNvbXBpbGVyIiwiY29tcGlsZVNvdXJjZXMiLCJlZG14T3B0aW9ucyIsIm9kYXRhRm9yZWlnbktleXMiLCJvZGF0YUZvcm1hdCIsIm9kYXRhQ29udGFpbm1lbnQiLCJlZG14IiwidG8iLCJFcnJvciIsImdldEZha2VTaWRlRWZmZWN0c1NlcnZpY2UiLCJjbGFzc05hbWVPRGF0YU1vZGVsIiwic2NvcGVPYmplY3QiLCJnZXRNb2RlbCIsImlzQSIsImdldFNlcnZpY2VVcmwiLCJnZXRTZXJ2aWNlIiwiZ2V0Q2FwYWJpbGl0aWVzIiwic2VydmljZUluc3RhbmNlIiwiU2lkZUVmZmVjdHNGYWN0b3J5IiwiY3JlYXRlSW5zdGFuY2UiLCJzY29wZVR5cGUiLCJnZXRJbnRlcmZhY2UiLCJnZXRGYWtlRGlhZ25vc3RpY3MiLCJpc3N1ZXMiLCJhZGRJc3N1ZSIsImlzc3VlQ2F0ZWdvcnkiLCJpc3N1ZVNldmVyaXR5IiwiZGV0YWlscyIsImdldElzc3VlcyIsImNoZWNrSWZJc3N1ZUV4aXN0cyIsImZpbmQiLCJpc3N1ZSIsImdldENvbnZlcnRlckNvbnRleHRGb3JUZXN0IiwibWFuaWZlc3RTZXR0aW5ncyIsImNvbnZlcnRlZFR5cGVzIiwiY29udmVydFR5cGVzIiwiZGF0YU1vZGVsUGF0aCIsImNvbnRleHRQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZW50aXR5U2V0IiwiQ29udmVydGVyQ29udGV4dCIsIk1hbmlmZXN0V3JhcHBlciIsIm1ldGFNb2RlbENhY2hlIiwib1JlcXVlc3RvciIsIl9NZXRhZGF0YVJlcXVlc3RvciIsImNyZWF0ZSIsIk9EYXRhTWV0YU1vZGVsIiwiX3JlcXVlc3RBbm5vdGF0aW9uQ2hhbmdlcyIsImZldGNoRW50aXR5Q29udGFpbmVyIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5IiwicHJvcGVydHkiLCJ0YXJnZXRQYXRoIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsInRhcmdldE9iamVjdCIsInRhcmdldEVudGl0eVNldCIsInRhcmdldEVudGl0eVR5cGUiLCJlbnRpdHlUeXBlIiwiY29udGV4dExvY2F0aW9uIiwiZXZhbHVhdGVCaW5kaW5nIiwiYmluZGluZ1N0cmluZyIsImJpbmRpbmdFbGVtZW50IiwiQmluZGluZ0luZm8iLCJfbGVuIiwiYXJncyIsIl9rZXkiLCJmb3JtYXR0ZXIiLCJhcHBseSIsImV2YWx1YXRlQmluZGluZ1dpdGhNb2RlbCIsIm1vZGVsQ29udGVudCIsIm5hbWVkTW9kZWxzQ29udGVudCIsIl9mb3JtYXR0ZXJzIiwiVmFsdWVGb3JtYXR0ZXIiLCJ0ZXh0IiwiSW52aXNpYmxlVGV4dCIsImJpbmRQcm9wZXJ0eSIsImRlZmF1bHRNb2RlbCIsIkpTT05Nb2RlbCIsInNldE1vZGVsIiwic2V0QmluZGluZ0NvbnRleHQiLCJjb250ZW50IiwibW9kZWwiLCJnZXRUZXh0IiwiVEVTVFZJRVdJRCIsImFwcGx5RmxleENoYW5nZXMiLCJmbGV4Q2hhbmdlcyIsInJlc3VsdFhNTCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJpZCIsImNoYW5nZXMiLCJjcmVhdGVGbGV4aWJpbGl0eUNoYW5nZXNPYmplY3QiLCJhcHBJZCIsIm9NYW5pZmVzdCIsInR5cGUiLCJjcm9zc05hdmlnYXRpb24iLCJvdXRib3VuZHMiLCJvQXBwQ29tcG9uZW50IiwiZ2V0Q29tcG9uZW50RGF0YSIsImdldE1hbmlmZXN0T2JqZWN0IiwiZ2V0RW50cnkiLCJnZXRMb2NhbElkIiwic0lkIiwic3B5T24iLCJBcHBTdG9yYWdlIiwiUHJvbWlzZSIsIkxvYWRlciIsIkNvbXBvbmVudCIsIlV0aWxzIiwiRmxleFN0YXRlIiwiaW5pdGlhbGl6ZSIsImNvbXBvbmVudElkIiwiWG1sUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsImNoYW5nZXNBcHBsaWVkIiwiZ2V0Q2hhbmdlc0Zyb21YTUwiLCJ0b0JlIiwidmFyaWFudERlcGVuZGVudENvbnRyb2xDaGFuZ2VzIiwiZmxhdE1hcCIsImUiLCJmaWx0ZXIiLCJhdHRyIiwiZ2V0VGVtcGxhdGluZ1Jlc3VsdCIsInhtbElucHV0IiwiY3JlYXRlTW9ja1Jlc291cmNlTW9kZWwiLCJ0ZW1wbGF0ZWRYbWwiLCJET01QYXJzZXIiLCJ4bWxEb2MiLCJwYXJzZUZyb21TdHJpbmciLCJvUHJlcHJvY2Vzc29yU2V0dGluZ3MiLCJYTUxQcmVwcm9jZXNzb3IiLCJmaXJzdEVsZW1lbnRDaGlsZCIsImdldFRlbXBsYXRlZFhNTCIsImpzeCIsImRlZmluZVhNTE5hbWVzcGFjZU1hcCIsInRlbXBsYXRlZFhNTCIsInNlcmlhbGllZFhNTCIsIm5vdCIsInByb2Nlc3NWaWV3Iiwib1ZpZXdEb2N1bWVudCIsIm9QcmVwcm9jZXNzZWRWaWV3IiwiYXNFbGVtZW50IiwiYXNTdHJpbmciLCJvdXRlckhUTUwiLCJwcm9jZXNzRnJhZ21lbnQiLCJ0ZXN0RGF0YSIsImlucHV0WG1sIiwiaW5wdXREb2MiLCJqc29uTW9kZWwiLCJzZXREYXRhIiwicmVzdWx0RG9jIiwiZnJhZ21lbnRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJmcmFnbWVudCIsImlubmVySFRNTCIsInhtbFJlc3VsdCIsImNoaWxkcmVuIiwic2VyaWFsaXplQ29udHJvbCIsImNvbnRyb2xUb1NlcmlhbGl6ZSIsInNob3dDdXN0b21TdHlsZUNsYXNzZXMiLCJ0YWJDb3VudCIsIkNPTlRST0xJRCIsImdldFRhYiIsInRvQWRkIiwidGFiIiwiaSIsInNlcmlhbGl6ZURlbGVnYXRlIiwic3RhcnQiLCJzQWdncmVnYXRpb25OYW1lIiwiY29udHJvbERldGFpbCIsImdldFBhcmVudCIsImluZGV4SW5QYXJlbnQiLCJnZXRBZ2dyZWdhdGlvbiIsImluZGV4T2YiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJlbmQiLCJtaWRkbGUiLCJnZXRJZCIsIk1hbmFnZWRPYmplY3RNZXRhZGF0YSIsImlzR2VuZXJhdGVkSWQiLCJvQ29udHJvbEtleSIsIm1Qcm9wZXJ0aWVzIiwicHJvcGVydHlWYWx1ZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJtQmluZGluZ0luZm9zIiwiYmluZGluZ0RldGFpbCIsIm9PdXRwdXRGb3JtYXQiLCJiaW5kaW5nIiwibUFzc29jaWF0aW9ucyIsImFzc29jaWF0aW9uVmFsdWUiLCJhc3NvY2lhdGlvblZhbHVlRWxlbWVudCIsImFDdXN0b21TdHlsZUNsYXNzZXMiLCJtRXZlbnRSZWdpc3RyeSIsInN0YXJ0QWdncmVnYXRpb24iLCJzTmFtZSIsIm91dCIsImVuZEFnZ3JlZ2F0aW9uIiwiY29udHJvbFRvUmVuZGVyIiwiU2VyaWFsaXplciIsInNlcmlhbGl6ZSIsInNlcmlhbGl6ZUNvbnRyb2xBc1hNTCIsInByZWZlclZhbHVlIiwiZGVmaW5lZE5hbWVzcGFjZXMiLCJnZXROYW1lc3BhY2VBbGlhcyIsImNsYXNzTmFtZSIsIm5hbWVzU3BsaXQiLCJzcGxpdCIsIm5hbWVzcGFjZSIsIm5hbWVzcGFjZUFsaWFzIiwibmFtZUZ1bGwiLCJoYXNBZ2dyZWdhdGlvbiIsIm1BZ2dyZWdhdGlvbnNLZXkiLCJtQWdncmVnYXRpb25zIiwicHJvcE5hbWUiLCJjb25jYXQiLCJ1bmlxdWVLZXlzIiwiU2V0IiwiZnJvbSIsInRlbXBsYXRlIiwiZkZ1bmN0aW9uIiwib3V0WE1MIiwiY3JlYXRlQXdhaXRlciIsImZuUmVzb2x2ZSIsIm15UHJvbWlzZSIsInByb21pc2UiLCJyZWdpc3Rlck1vY2tGcmFnbWVudHMiLCJfbGVuMiIsIl9rZXkyIiwib3JpZ2luYWxMb2FkVGVtcGxhdGUiLCJYTUxUZW1wbGF0ZVByb2Nlc3NvciIsImxvYWRUZW1wbGF0ZVByb21pc2UiLCJsb2FkVGVtcGxhdGVTdHViIiwibW9ja0ltcGxlbWVudGF0aW9uIiwidGVtcGxhdGVOYW1lIiwiZXh0ZW5zaW9uIiwicGFyc2VYTUxTdHJpbmciLCJpbml0aWFsaXplQXBwQ29tcG9uZW50Iiwidmlld0xldmVsIiwiT0RhdGFNb2RlbCIsInByb3RvdHlwZSIsImNkc0ZpbGUiLCJfX2Rpcm5hbWUiLCJndWlkIiwidWlkIiwiY2RzQ29udGVudCIsImplc3RVSTUiLCJtb2NrVXJsIiwicGFnZUNvbnRlbnQiLCJQYWdlQ29udHJvbGxlciIsIkRlZmF1bHRQYWdlQ29udGVudCIsIl9QYWdlQ29udHJvbGxlciIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicmVuZGVyIiwiX2pzeCIsIlBhZ2UiLCJzYXAiLCJ1aSIsImRlZmluZSIsIl9BcHBDb21wb25lbnQiLCJBcHBDb21wb25lbnQiLCJtZXRhZGF0YSIsIm1hbmlmZXN0IiwidGl0bGUiLCJkYXRhU291cmNlcyIsIm1haW5TZXJ2aWNlIiwidXJpIiwib2RhdGFWZXJzaW9uIiwiZGF0YVNvdXJjZSIsInJvdXRpbmciLCJ0YXJnZXRzIiwiRGVmYXVsdCIsIm1haW5Db250ZXh0UGF0aCIsInZpZXdUeXBlIiwidmlld0NvbnRlbnQiLCJyb3V0ZXMiLCJwYXR0ZXJuIiwidGFyZ2V0IiwiZmVNYW5pZmVzdFNldHRpbmdzIiwibW9ja0FwcENvbXBvbmVudCIsImluaXRpYWxpemVkIiwidiIsImdldFJvdXRlciIsImdldFRhcmdldCIsImxvYWQiLCJ0ZW1wbGF0ZUNvbXBvbmVudCIsIm9iamVjdCIsImZpbmRFbGVtZW50IiwiY29sbGVjdGlvbiIsImVsZW1lbnQiLCJpdGVtIiwid2FpdEZvckV2ZW50IiwiZXZlbnROYW1lIiwiYXR0YWNoRXZlbnRPbmNlIiwiZXZlbnQiLCJrZWVwQmluZGluZ1N0cmluZ0ZvclRlc3QiLCJlbmFibGVkIiwiQmluZGluZ1BhcnNlciIsIl9rZWVwQmluZGluZ1N0cmluZ3MiLCJkZWxheUZvciIsImRlbGF5Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJKZXN0VGVtcGxhdGluZ0hlbHBlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBbnlBbm5vdGF0aW9uLCBDb252ZXJ0ZWRNZXRhZGF0YSwgRW50aXR5U2V0LCBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IGNvbXBpbGVyIGZyb20gXCJAc2FwL2Nkcy1jb21waWxlclwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgdHlwZSB7IFJhbmdlLCBSYW5nZXMgfSBmcm9tIFwiaHRtbGpzLXBhcnNlclwiO1xuaW1wb3J0IHsgY3JlYXRlUGFyc2VyIH0gZnJvbSBcImh0bWxqcy1wYXJzZXJcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IExvYWRlckV4dGVuc2lvbnMgZnJvbSBcInNhcC9iYXNlL3V0aWwvTG9hZGVyRXh0ZW5zaW9uc1wiO1xuaW1wb3J0IHVpZCBmcm9tIFwic2FwL2Jhc2UvdXRpbC91aWRcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCBUZW1wbGF0ZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZU1vZGVsXCI7XG5pbXBvcnQgeyBwYXJzZVhNTFN0cmluZyB9IGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncywgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgTWFuaWZlc3RXcmFwcGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0V3JhcHBlclwiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzLCBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgSURpYWdub3N0aWNzLCBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCBWYWx1ZUZvcm1hdHRlciBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IHR5cGUgeyBTaWRlRWZmZWN0c1NlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IFNpZGVFZmZlY3RzRmFjdG9yeSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgY3JlYXRlTW9ja1Jlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL3Rlc3QvVUk1TW9ja0hlbHBlclwiO1xuaW1wb3J0IFBhZ2UgZnJvbSBcInNhcC9tL1BhZ2VcIjtcbmltcG9ydCBCaW5kaW5nSW5mbyBmcm9tIFwic2FwL3VpL2Jhc2UvQmluZGluZ0luZm9cIjtcbmltcG9ydCBCaW5kaW5nUGFyc2VyIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nUGFyc2VyXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIEV2ZW50UHJvdmlkZXIgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50UHJvdmlkZXJcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIHsgQmFzZUFnZ3JlZ2F0aW9uQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3RNZXRhZGF0YSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdE1ldGFkYXRhXCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBJbnZpc2libGVUZXh0IGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVUZXh0XCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0Q29udGVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9NYW5pZmVzdFwiO1xuaW1wb3J0IFhNTFRlbXBsYXRlUHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS9YTUxUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBTZXJpYWxpemVyIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL3NlcmlhbGl6ZXIvU2VyaWFsaXplclwiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCJzYXAvdWkvZmwvVXRpbHNcIjtcbmltcG9ydCBGbGV4U3RhdGUgZnJvbSBcInNhcC91aS9mbC9hcHBseS9faW50ZXJuYWwvZmxleFN0YXRlL0ZsZXhTdGF0ZVwiO1xuaW1wb3J0IExvYWRlciBmcm9tIFwic2FwL3VpL2ZsL2luaXRpYWwvX2ludGVybmFsL0xvYWRlclwiO1xuaW1wb3J0IEFwcFN0b3JhZ2UgZnJvbSBcInNhcC91aS9mbC9pbml0aWFsL19pbnRlcm5hbC9TdG9yYWdlXCI7XG5pbXBvcnQgWG1sUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvZmwvaW5pdGlhbC9faW50ZXJuYWwvcHJlcHJvY2Vzc29ycy9YbWxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9NZXRhTW9kZWxcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IF9NZXRhZGF0YVJlcXVlc3RvciBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L2xpYi9fTWV0YWRhdGFSZXF1ZXN0b3JcIjtcbmltcG9ydCB4cGF0aCBmcm9tIFwieHBhdGhcIjtcbmltcG9ydCB7IGNyZWF0ZUZsZXhpYmlsaXR5Q2hhbmdlc09iamVjdCB9IGZyb20gXCIuL0plc3RGbGV4aWJpbGl0eUhlbHBlclwiO1xuXG50eXBlIFByZVByb2Nlc3NvclNldHRpbmdzVHlwZSA9IHtcblx0bW9kZWxzOiB7XG5cdFx0W25hbWU6IHN0cmluZ106IEpTT05Nb2RlbCB8IE9EYXRhTWV0YU1vZGVsO1xuXHR9O1xuXHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRbbmFtZTogc3RyaW5nXTogQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0fTtcbn07XG50eXBlIE1vY2tGcmFnbWVudCA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRjb250ZW50OiBzdHJpbmc7XG59O1xuXG50eXBlIEplc3RUZW1wbGF0ZWRWaWV3ID0ge1xuXHRhc0VsZW1lbnQ6IEVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cdGFzU3RyaW5nOiBzdHJpbmc7XG59O1xuXG5Mb2cuc2V0TGV2ZWwoMSBhcyBhbnksIFwic2FwLnVpLmNvcmUudXRpbC5YTUxQcmVwcm9jZXNzb3JcIik7XG5qZXN0LnNldFRpbWVvdXQoNDAwMDApO1xuXG5jb25zdCBuYW1lU3BhY2VNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG5cdG1hY3JvOiBcInNhcC5mZS5tYWNyb3NcIixcblx0bWFjcm9TaGFyZTogXCJzYXAuZmUubWFjcm9zLnNoYXJlXCIsXG5cdG1hY3JvczogXCJzYXAuZmUubWFjcm9zXCIsXG5cdGZlQkI6IFwic2FwLmZlLmNvcmUuYnVpbGRpbmdCbG9ja3MudGVtcGxhdGluZ1wiLFxuXHRtYWNyb0ZpZWxkOiBcInNhcC5mZS5tYWNyb3MuZmllbGRcIixcblx0bWFjcm9kYXRhOiBcImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcIixcblx0bG9nOiBcImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcIixcblx0Y3VzdG9tRGF0YTogXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCIsXG5cdGNvbnRyb2w6IFwic2FwLmZlLmNvcmUuY29udHJvbHNcIixcblx0Y29udHJvbHM6IFwic2FwLmZlLm1hY3Jvcy5jb250cm9sc1wiLFxuXHRjb3JlOiBcInNhcC51aS5jb3JlXCIsXG5cdGR0OiBcInNhcC51aS5kdFwiLFxuXHRtOiBcInNhcC5tXCIsXG5cdGY6IFwic2FwLnVpLmxheW91dC5mb3JtXCIsXG5cdGZsOiBcInNhcC51aS5mbFwiLFxuXHRpbnRlcm5hbE1hY3JvOiBcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWxcIixcblx0bWRjOiBcInNhcC51aS5tZGNcIixcblx0YWN0aW9udG9vbGJhcjogXCJzYXAudWkubWRjLmFjdGlvbnRvb2xiYXJcIixcblx0bWRjRmllbGQ6IFwic2FwLnVpLm1kYy5maWVsZFwiLFxuXHRtZGNUYWJsZTogXCJzYXAudWkubWRjLnRhYmxlXCIsXG5cdHU6IFwic2FwLnVpLnVuaWZpZWRcIixcblx0dXhhcDogXCJzYXAudXhhcFwiLFxuXHRtYWNyb01pY3JvQ2hhcnQ6IFwic2FwLmZlLm1hY3Jvcy5taWNyb2NoYXJ0XCIsXG5cdG1pY3JvQ2hhcnQ6IFwic2FwLnN1aXRlLnVpLm1pY3JvY2hhcnRcIixcblx0bWFjcm9UYWJsZTogXCJzYXAuZmUubWFjcm9zLnRhYmxlXCIsXG5cdG1kY3ZjOiBcInNhcC51aS5tZGMudmFsdWVoZWxwLmNvbnRlbnRcIixcblx0bWRjdjogXCJzYXAudWkubWRjLnZhbHVlaGVscFwiLFxuXHR2YWx1ZUhlbHA6IFwic2FwLmZlLm1hY3Jvcy52YWx1ZUhlbHBcIixcblx0Y29udGVudFN3aXRjaGVyOiBcInNhcC5mZS5tYWNyb3MuY29udGVudFN3aXRjaGVyXCIsXG5cdGZpbHRlckJhcjogXCJzYXAuZmUubWFjcm9zLmZpbHRlckJhclwiLFxuXHRkcmFmdEluZGljYXRvcjogXCJzYXAuZmUubWFjcm9zLmRyYWZ0SW5kaWNhdG9yXCIsXG5cdHZpc3VhbEZpbHRlcjogXCJzYXAuZmUubWFjcm9zLnZpc3VhbGZpbHRlcnNcIixcblx0ZmllbGRoZWxwOiBcInNhcC51aS5jb3JlLmZpZWxkaGVscFwiXG59O1xuY29uc3QgcmV2ZXNlTmFtZXNwYWNlTWFwID0gT2JqZWN0LmtleXMobmFtZVNwYWNlTWFwKS5yZWR1Y2UoKHJldmVyc2VNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIGN1cnJlbnROYW1lKSA9PiB7XG5cdHJldmVyc2VNYXBbbmFtZVNwYWNlTWFwW2N1cnJlbnROYW1lXV0gPSBjdXJyZW50TmFtZTtcblx0cmV0dXJuIHJldmVyc2VNYXA7XG59LCB7fSk7XG5jb25zdCBzZWxlY3QgPSB4cGF0aC51c2VOYW1lc3BhY2VzKG5hbWVTcGFjZU1hcCk7XG5cbmNvbnN0IGRlZmF1bHRGYWtlU2lkZUVmZmVjdFNlcnZpY2UgPSB7IGNvbXB1dGVGaWVsZEdyb3VwSWRzOiAoKSA9PiBbXSB9O1xuXG5mdW5jdGlvbiBfZ2V0VGVtcGxhdGVkU2VsZWN0b3IoeG1sZG9tOiBOb2RlLCBzZWxlY3Rvcjogc3RyaW5nKTogc3RyaW5nIHtcblx0LyoqXG5cdCAqIGlmIGEgcm9vdCBlbGVtZW50IGhhcyBiZWVuIGFkZGVkIGR1cmluZyB0aGUgdGVtcGxhdGluZyBieSBvdXIgSmVzdCBUZW1wbGF0aW5nIG1ldGhvZHNcblx0ICogdGhlIHJvb3QgZWxlbWVudCBpcyBhZGRlZCB0byB0aGUgc2VsZWN0b3IgcGF0aC5cblx0ICovXG5cdGNvbnN0IHJvb3RQYXRoID0gXCIvcm9vdFwiO1xuXHRyZXR1cm4gYCR7eG1sZG9tLm5vZGVOYW1lID09PSBcInJvb3RcIiAmJiAhc2VsZWN0b3Iuc3RhcnRzV2l0aChyb290UGF0aCkgPyByb290UGF0aCA6IFwiXCJ9JHtzZWxlY3Rvcn1gO1xufVxuXG5hc3luYyBmdW5jdGlvbiBfYnVpbGRQcmVQcm9jZXNzb3JTZXR0aW5ncyhcblx0c01ldGFkYXRhVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG1CaW5kaW5nQ29udGV4dHM6IHsgW3g6IHN0cmluZ106IHN0cmluZyB9LFxuXHRtTW9kZWxzOiB7IFt4OiBzdHJpbmddOiBhbnkgfSxcblx0ZmFrZVNpZGVFZmZlY3RTZXJ2aWNlPzogdW5rbm93blxuKTogUHJvbWlzZTxQcmVQcm9jZXNzb3JTZXR0aW5nc1R5cGU+IHtcblx0bGV0IG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsIHwgdW5kZWZpbmVkO1xuXHRpZiAoc01ldGFkYXRhVXJsKSB7XG5cdFx0b01ldGFNb2RlbCA9IGF3YWl0IGdldE1ldGFNb2RlbChzTWV0YWRhdGFVcmwpO1xuXHRcdC8vIFRvIGVuc3VyZSBvdXIgbWFjcm8gY2FuIHVzZSAjc2V0QmluZGluZ0NvbnRleHQgd2UgZW5zdXJlIHRoZXJlIGlzIGEgcHJlIGV4aXN0aW5nIEpTT05Nb2RlbCBmb3IgY29udmVydGVyQ29udGV4dFxuXHRcdC8vIGlmIG5vdCBhbHJlYWR5IHBhc3NlZCB0byB0ZWggdGVtcGxhdGluZ1xuXHRcdGlmICghbU1vZGVscy5oYXNPd25Qcm9wZXJ0eShcImNvbnZlcnRlckNvbnRleHRcIikpIHtcblx0XHRcdG1Nb2RlbHMgPSBPYmplY3QuYXNzaWduKG1Nb2RlbHMsIHsgY29udmVydGVyQ29udGV4dDogbmV3IFRlbXBsYXRlTW9kZWwoe30sIG9NZXRhTW9kZWwhKSB9KTtcblx0XHR9XG5cblx0XHRPYmplY3Qua2V5cyhtTW9kZWxzKS5mb3JFYWNoKGZ1bmN0aW9uIChzTW9kZWxOYW1lKSB7XG5cdFx0XHRpZiAobU1vZGVsc1tzTW9kZWxOYW1lXSAmJiBtTW9kZWxzW3NNb2RlbE5hbWVdLmlzVGVtcGxhdGVNb2RlbCkge1xuXHRcdFx0XHRtTW9kZWxzW3NNb2RlbE5hbWVdID0gbmV3IFRlbXBsYXRlTW9kZWwobU1vZGVsc1tzTW9kZWxOYW1lXS5kYXRhLCBvTWV0YU1vZGVsISk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRjb25zdCBzZXR0aW5nczogYW55ID0ge1xuXHRcdG1vZGVsczogT2JqZWN0LmFzc2lnbihcblx0XHRcdHtcblx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsXG5cdFx0XHR9LFxuXHRcdFx0bU1vZGVsc1xuXHRcdCksXG5cdFx0YmluZGluZ0NvbnRleHRzOiB7fSxcblx0XHRhcHBDb21wb25lbnQ6IHtcblx0XHRcdGdldFNpZGVFZmZlY3RzU2VydmljZTogamVzdC5mbigpLFxuXHRcdFx0Z2V0RGlhZ25vc3RpY3M6ICgpID0+IHVuZGVmaW5lZCxcblx0XHRcdGdldFNoZWxsU2VydmljZXM6IGplc3QuZm4oKSxcblx0XHRcdGdldE1hbmlmZXN0RW50cnk6ICgpID0+IHVuZGVmaW5lZFxuXHRcdH1cblx0fTtcblxuXHRzZXR0aW5ncy5hcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlLm1vY2tSZXR1cm5WYWx1ZShmYWtlU2lkZUVmZmVjdFNlcnZpY2UgPz8gZGVmYXVsdEZha2VTaWRlRWZmZWN0U2VydmljZSk7XG5cdC8vSW5qZWN0IG1vZGVscyBhbmQgYmluZGluZ0NvbnRleHRzXG5cdE9iamVjdC5rZXlzKG1CaW5kaW5nQ29udGV4dHMpLmZvckVhY2goZnVuY3Rpb24gKHNLZXkpIHtcblx0XHQvKiBBc3NlcnQgdG8gbWFrZSBzdXJlIHRoZSBhbm5vdGF0aW9ucyBhcmUgaW4gdGhlIHRlc3QgbWV0YWRhdGEgLT4gYXZvaWQgbWlzbGVhZGluZyB0ZXN0cyAqL1xuXHRcdGV4cGVjdCh0eXBlb2Ygb01ldGFNb2RlbD8uZ2V0T2JqZWN0KG1CaW5kaW5nQ29udGV4dHNbc0tleV0pKS50b0JlRGVmaW5lZCgpO1xuXHRcdGNvbnN0IG9Nb2RlbCA9IG1Nb2RlbHNbc0tleV0gfHwgb01ldGFNb2RlbDtcblx0XHRzZXR0aW5ncy5iaW5kaW5nQ29udGV4dHNbc0tleV0gPSBvTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQobUJpbmRpbmdDb250ZXh0c1tzS2V5XSk7IC8vVmFsdWUgaXMgc1BhdGhcblx0XHRzZXR0aW5ncy5tb2RlbHNbc0tleV0gPSBvTW9kZWw7XG5cdH0pO1xuXHRyZXR1cm4gc2V0dGluZ3M7XG59XG5cbmZ1bmN0aW9uIF9sb2FkUmVzb3VyY2VWaWV3KHZpZXdOYW1lOiBzdHJpbmcpOiBFbGVtZW50IHtcblx0Y29uc3QgbmFtZSA9IHZpZXdOYW1lLnJlcGxhY2UoL1xcLi9nLCBcIi9cIikgKyBcIi52aWV3LnhtbFwiO1xuXHRjb25zdCB2aWV3ID0gTG9hZGVyRXh0ZW5zaW9ucy5sb2FkUmVzb3VyY2UobmFtZSk7XG5cdHJldHVybiB2aWV3LmRvY3VtZW50RWxlbWVudDtcbn1cblxuZXhwb3J0IGNvbnN0IHJ1blhQYXRoUXVlcnkgPSBmdW5jdGlvbiAoc2VsZWN0b3I6IHN0cmluZywgeG1sZG9tOiBOb2RlIHwgdW5kZWZpbmVkKSB7XG5cdHJldHVybiBzZWxlY3Qoc2VsZWN0b3IsIHhtbGRvbSk7XG59O1xuXG5leHBlY3QuZXh0ZW5kKHtcblx0dG9IYXZlQ29udHJvbCh4bWxkb20sIHNlbGVjdG9yKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBydW5YUGF0aFF1ZXJ5KF9nZXRUZW1wbGF0ZWRTZWxlY3Rvcih4bWxkb20sIHNlbGVjdG9yKSwgeG1sZG9tKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bWVzc2FnZTogKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvdXRwdXRYbWwgPSBzZXJpYWxpemVYTUwoeG1sZG9tKTtcblx0XHRcdFx0cmV0dXJuIGBkaWQgbm90IGZpbmQgY29udHJvbHMgbWF0Y2hpbmcgJHtzZWxlY3Rvcn0gaW4gZ2VuZXJhdGVkIHhtbDpcXG4gJHtvdXRwdXRYbWx9YDtcblx0XHRcdH0sXG5cdFx0XHRwYXNzOiBub2RlcyAmJiBub2Rlcy5sZW5ndGggPj0gMVxuXHRcdH07XG5cdH0sXG5cdHRvTm90SGF2ZUNvbnRyb2woeG1sZG9tLCBzZWxlY3Rvcikge1xuXHRcdGNvbnN0IG5vZGVzID0gcnVuWFBhdGhRdWVyeShfZ2V0VGVtcGxhdGVkU2VsZWN0b3IoeG1sZG9tLCBzZWxlY3RvciksIHhtbGRvbSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG1lc3NhZ2U6ICgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb3V0cHV0WG1sID0gc2VyaWFsaXplWE1MKHhtbGRvbSk7XG5cdFx0XHRcdHJldHVybiBgVGhlcmUgaXMgYSBjb250cm9sIG1hdGNoaW5nICR7c2VsZWN0b3J9IGluIGdlbmVyYXRlZCB4bWw6XFxuICR7b3V0cHV0WG1sfWA7XG5cdFx0XHR9LFxuXHRcdFx0cGFzczogbm9kZXMgJiYgbm9kZXMubGVuZ3RoID09PSAwXG5cdFx0fTtcblx0fSxcblx0LyoqXG5cdCAqIENoZWNrcyBmb3IgZXJyb3JzIGluIGB4bWxgIGNyZWF0ZWQgZHVyaW5nIHRlbXBsYXRpbmcgb2YgYW4gWE1MIHN0cmluZyBvclxuXHQgKiBhbiBYTUwgbm9kZS5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBjaGVja2VzIGZvciB0aGUgeG1sIGVycm9ycyBjcmVhdGVkIGJ5IHRoZVxuXHQgKiBmdW5jdGlvbiBbQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yLmNyZWF0ZUVycm9yWE1MXXtAbGluayBzYXAuZmUuY29yZS5idWlsZGluZ0Jsb2Nrcy50ZW1wbGF0aW5nLkJ1aWxkaW5nQmxvY2tUZW1wbGF0ZVByb2Nlc3NvciNjcmVhdGVFcnJvclhNTH0uXG5cdCAqIEBwYXJhbSB4bWwgWE1MIFN0cmluZyBvciBYTUwgTm9kZSB0byBiZSB0ZXN0ZWQgZm9yIGVycm9yc1xuXHQgKiBAcmV0dXJucyBKZXN0IE1hdGNoZXIgcmVzdWx0IG9iamVjdFxuXHQgKi9cblx0dG9IYXZlVGVtcGxhdGluZ0Vycm9ycyh4bWw6IHN0cmluZyB8IE5vZGUpIHtcblx0XHRjb25zdCB4bWxUZXh0ID0gdHlwZW9mIHhtbCA9PT0gXCJzdHJpbmdcIiA/IHhtbCA6IHNlcmlhbGl6ZVhNTCh4bWwpO1xuXHRcdGNvbnN0IGJhc2U2NEVudHJpZXM6IHN0cmluZ1tdID0geG1sVGV4dC5tYXRjaCgvQkJGXFwuYmFzZTY0RGVjb2RlXFwoJyhbXiddKiknXFwpL2dtKSB8fCAoW10gYXMgc3RyaW5nW10pO1xuXHRcdGNvbnN0IGVycm9yTWVzc2FnZXM6IHN0cmluZ1tdID0gYmFzZTY0RW50cmllcy5tYXAoKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuXHRcdFx0aWYgKG1lc3NhZ2UgJiYgbWVzc2FnZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHJldHVybiBhdG9iKG1lc3NhZ2UubWF0Y2goLygnW14nXSopLyk/LlswXT8uc2xpY2UoMSkgfHwgXCJcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9KTtcblx0XHRpZiAoZXJyb3JNZXNzYWdlcy5sZW5ndGggPD0gMCkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0bWVzc2FnZTogKCkgPT4gYFhNTCBUZW1wbGF0aW5nIHdpdGhvdXQgZXJyb3JzYCxcblx0XHRcdFx0cGFzczogZmFsc2Vcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdG1lc3NhZ2U6ICgpID0+IGVycm9yTWVzc2FnZXMuam9pbihcIlxcblwiKSxcblx0XHRcdFx0cGFzczogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cbn0pO1xuXG5leHBvcnQgY29uc3QgZm9ybWF0QnVpbGRpbmdCbG9ja1hNTCA9IGZ1bmN0aW9uICh4bWxTdHJpbmc6IHN0cmluZyB8IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0aWYgKEFycmF5LmlzQXJyYXkoeG1sU3RyaW5nKSkge1xuXHRcdHhtbFN0cmluZyA9IHhtbFN0cmluZy5qb2luKFwiXCIpO1xuXHR9XG5cdHJldHVybiBmb3JtYXRYTUwoeG1sU3RyaW5nKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb250cm9sQXR0cmlidXRlID0gZnVuY3Rpb24gKGNvbnRyb2xTZWxlY3Rvcjogc3RyaW5nLCBhdHRyaWJ1dGVOYW1lOiBzdHJpbmcsIHhtbERvbTogTm9kZSkge1xuXHRjb25zdCBzZWxlY3RvciA9IGBzdHJpbmcoJHtfZ2V0VGVtcGxhdGVkU2VsZWN0b3IoeG1sRG9tLCBjb250cm9sU2VsZWN0b3IpfS9AJHthdHRyaWJ1dGVOYW1lfSlgO1xuXHRyZXR1cm4gcnVuWFBhdGhRdWVyeShzZWxlY3RvciwgeG1sRG9tKTtcbn07XG5cbi8qKlxuICogU2VyaWFsaXplIHRoZSBwYXJ0cyBvciB0aGUgY29tcGxldGUgZ2l2ZW4gWE1MIERPTSB0byBzdHJpbmcuXG4gKiBAcGFyYW0geG1sRG9tIERPTSBub2RlIHRoYXQgaXMgdG8gYmUgc2VyaWFsaXplZC5cbiAqIEBwYXJhbSBzZWxlY3RvciBPcHRpb25hbCBzZWxlY3RvciBvZiBzdWIgbm9kZXNcbiAqIEByZXR1cm5zIFhNTCBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IHNlcmlhbGl6ZVhNTCA9IGZ1bmN0aW9uICh4bWxEb206IE5vZGUsIHNlbGVjdG9yPzogc3RyaW5nKSB7XG5cdGNvbnN0IHNlcmlhbGl6ZXIgPSBuZXcgd2luZG93LlhNTFNlcmlhbGl6ZXIoKTtcblx0bGV0IHhtbFN0cmluZzogc3RyaW5nO1xuXHRpZiAoc2VsZWN0b3IpIHtcblx0XHRjb25zdCBub2RlcyA9IHJ1blhQYXRoUXVlcnkoc2VsZWN0b3IsIHhtbERvbSkgYXMgTm9kZVtdO1xuXHRcdHhtbFN0cmluZyA9IG5vZGVzLm1hcCgobm9kZSkgPT4gc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyhub2RlKSkuam9pbihcIlxcblwiKTtcblx0fSBlbHNlIHtcblx0XHR4bWxTdHJpbmcgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZVRvU3RyaW5nKHhtbERvbSk7XG5cdH1cblx0cmV0dXJuIGZvcm1hdFhNTCh4bWxTdHJpbmcpO1xufTtcblxuLyoqXG4gKiBGb3JtYXRzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYW4gWE1MIGRvY3VtZW50LlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gb25seSBjb25zaWRlcnMgWE1MIHRhZ3MgYW5kIGF0dHJpYnV0ZXMsIGlnbm9yaW5nIGV2ZXJ5dGhpbmcgZWxzZSAodGV4dCwgY29tbWVudHMpLiBBZGRpdGlvbmFsbHksXG4gKiBhdHRyaWJ1dGUgdmFsdWVzIGNvbnRhaW5pbmcgYSB2YXJ5aW5nIFVJRCBhcmUgcmVwbGFjZWQgd2l0aCBhIGNvbnN0YW50IHZhbHVlLlxuICpcbiAqIEFuIFwiWE1MXCIgc3RyaW5nIGNvbnRhaW5pbmcgbXVsdGlwbGUgcm9vdCBlbGVtZW50cyBjYW4gYmUuXG4gKiBAcGFyYW0geG1sU3RyaW5nICBUaGUgaW5wdXQgWE1MIHN0cmluZy4gVGhpcyBmdW5jdGlvbiBhbHNvIGFjY2VwdHMgXCJYTUxcIiBzdHJpbmdzIHdpdGggbXVsdGlwbGUgcm9vdCBlbGVtZW50cy5cbiAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgWE1MIHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGZvcm1hdFhNTCA9IGZ1bmN0aW9uICh4bWxTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IFNUQVJUID0gXCI8X19YTUxfXz5cIixcblx0XHRFTkQgPSBcIjwvX19YTUxfXz5cIixcblx0XHRVSUQgPSAvdWlkLS1pZC1cXGR7MTN9LVxcZHsxLDN9Lyxcblx0XHRVSUQyID0gL2lkLVxcZHsxM30tXFxkezEsM30vLFxuXHRcdGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdGxldCBjdXJyZW50TGluZSA9IFwiXCIsXG5cdFx0bGV2ZWwgPSAtMSxcblx0XHRhdHRyaWJ1dGVzOiB7IG5hbWU6IHN0cmluZzsgdmFsdWU/OiBzdHJpbmcgfVtdID0gW107XG5cblx0ZnVuY3Rpb24gbmV3bGluZSgpIHtcblx0XHRpZiAoY3VycmVudExpbmUgJiYgY3VycmVudExpbmUgIT09IFNUQVJUKSB7XG5cdFx0XHRsaW5lcy5wdXNoKGN1cnJlbnRMaW5lKTtcblx0XHR9XG5cblx0XHRjdXJyZW50TGluZSA9IGxldmVsID4gMCA/IFwiICBcIi5yZXBlYXQobGV2ZWwpIDogXCJcIjtcblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGVuZEF0dHJpYnV0ZXMoKSB7XG5cdFx0aWYgKGF0dHJpYnV0ZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0YXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMuc29ydCgoYSwgYikgPT4ge1xuXHRcdFx0XHRpZiAoYS5uYW1lLnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSAmJiAhYi5uYW1lLnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSkge1xuXHRcdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdFx0fSBlbHNlIGlmICghYS5uYW1lLnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSAmJiBiLm5hbWUuc3RhcnRzV2l0aChcInhtbG5zXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYS5uYW1lLnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSAmJiBiLm5hbWUuc3RhcnRzV2l0aChcInhtbG5zXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYS5uYW1lLmluY2x1ZGVzKFwiOlwiKSAmJiAhYi5uYW1lLmluY2x1ZGVzKFwiOlwiKSkge1xuXHRcdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdFx0fSBlbHNlIGlmICghYS5uYW1lLmluY2x1ZGVzKFwiOlwiKSAmJiBiLm5hbWUuaW5jbHVkZXMoXCI6XCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRsZXZlbCsrO1xuXHRcdFx0Zm9yIChjb25zdCBhdHRyaWJ1dGUgb2YgYXR0cmlidXRlcykge1xuXHRcdFx0XHRuZXdsaW5lKCk7XG5cdFx0XHRcdGN1cnJlbnRMaW5lICs9IGF0dHJpYnV0ZS5uYW1lO1xuXHRcdFx0XHRpZiAoYXR0cmlidXRlLnZhbHVlKSBjdXJyZW50TGluZSArPSBhdHRyaWJ1dGUudmFsdWU7XG5cdFx0XHR9XG5cdFx0XHRsZXZlbC0tO1xuXHRcdFx0YXR0cmlidXRlcyA9IFtdO1xuXHRcdFx0bmV3bGluZSgpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGVuZChkYXRhOiBSYW5nZSkge1xuXHRcdGN1cnJlbnRMaW5lICs9IHBhcnNlci5yZWFkKGRhdGEpO1xuXHR9XG5cblx0Y29uc3QgcGFyc2VyID0gY3JlYXRlUGFyc2VyKHtcblx0XHRvbk9wZW5UYWdTdGFydChkYXRhOiBSYW5nZSkge1xuXHRcdFx0bmV3bGluZSgpO1xuXHRcdFx0YXBwZW5kKGRhdGEpO1xuXHRcdH0sXG5cblx0XHRvbk9wZW5UYWdOYW1lOiBhcHBlbmQsXG5cblx0XHRvbkF0dHJOYW1lKGRhdGE6IFJhbmdlKSB7XG5cdFx0XHRhdHRyaWJ1dGVzLnVuc2hpZnQoeyBuYW1lOiBwYXJzZXIucmVhZChkYXRhKSB9KTtcblx0XHR9LFxuXG5cdFx0b25BdHRyVmFsdWUoZGF0YTogUmFuZ2VzLkF0dHJWYWx1ZSkge1xuXHRcdFx0YXR0cmlidXRlc1swXS52YWx1ZSA9IHBhcnNlci5yZWFkKGRhdGEpLnJlcGxhY2UoVUlELCBcInVpZC0taWRcIik7IC8vIHJlcGxhY2UgdmFyeWluZyBVSURzIHdpdGggYSBjb25zdGFudCB2YWx1ZVxuXHRcdFx0YXR0cmlidXRlc1swXS52YWx1ZSA9IHBhcnNlci5yZWFkKGRhdGEpLnJlcGxhY2UoVUlEMiwgXCJpZFwiKTsgLy8gcmVwbGFjZSB2YXJ5aW5nIFVJRHMgd2l0aCBhIGNvbnN0YW50IHZhbHVlXG5cdFx0fSxcblxuXHRcdG9uT3BlblRhZ0VuZChkYXRhOiBSYW5nZXMuT3BlblRhZ0VuZCkge1xuXHRcdFx0YXBwZW5kQXR0cmlidXRlcygpO1xuXHRcdFx0YXBwZW5kKGRhdGEpO1xuXHRcdFx0aWYgKCFkYXRhLnNlbGZDbG9zZWQpIGxldmVsKys7XG5cdFx0fSxcblxuXHRcdG9uQ2xvc2VUYWdTdGFydChkYXRhOiBSYW5nZSkge1xuXHRcdFx0bGV2ZWwtLTtcblx0XHRcdG5ld2xpbmUoKTtcblx0XHRcdGFwcGVuZChkYXRhKTtcblx0XHR9LFxuXG5cdFx0b25DbG9zZVRhZ05hbWU6IGFwcGVuZCxcblx0XHRvbkNsb3NlVGFnRW5kOiBhcHBlbmRcblx0fSk7XG5cblx0cGFyc2VyLnBhcnNlKFNUQVJUICsgeG1sU3RyaW5nICsgRU5EKTtcblx0cmV0dXJuIGxpbmVzLmpvaW4oXCJcXG5cIikudHJpbSgpO1xufTtcblxuLyoqXG4gKiBDb21waWxlIGEgQ0RTIGZpbGUgaW50byBhbiBFRE1YIGZpbGUuXG4gKiBAcGFyYW0gY2RzVXJsIFRoZSBwYXRoIHRvIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIENEUyBkZWZpbml0aW9uLiBUaGlzIGZpbGUgbXVzdCBkZWNsYXJlIHRoZSBuYW1lc3BhY2VcbiAqIHNhcC5mZS50ZXN0IGFuZCBhIHNlcnZpY2UgSmVzdFNlcnZpY2VcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoZSBFRE1YIG91dHB1dFxuICogQHJldHVybnMgVGhlIHBhdGggb2YgdGhlIGdlbmVyYXRlZCBFRE1YXG4gKi9cbmV4cG9ydCBjb25zdCBjb21waWxlQ0RTID0gZnVuY3Rpb24gKGNkc1VybDogc3RyaW5nLCBvcHRpb25zOiBjb21waWxlci5PRGF0YU9wdGlvbnMgPSB7fSkge1xuXHRjb25zdCBjZHNTdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoY2RzVXJsLCBcInV0Zi04XCIpO1xuXHRjb25zdCBlZG14Q29udGVudCA9IGNkczJlZG14KGNkc1N0cmluZywgXCJzYXAuZmUudGVzdC5KZXN0U2VydmljZVwiLCBvcHRpb25zKTtcblx0Y29uc3QgZGlyID0gcGF0aC5yZXNvbHZlKGNkc1VybCwgXCIuLlwiLCBcImdlblwiKTtcblxuXHQvLyBJZiB0aGUgY2FsbGVyIHByb3ZpZGVkIENEUyBjb21waWxlciBvcHRpb25zOiBJbmNsdWRlIHRoZW0gaW4gdGhlIGZpbGVuYW1lLiBUaGlzIHByZXZlbnRzIHVucHJlZGljdGFibGUgcmVzdWx0cyBpZiB0aGUgc2FtZSBDRFMgc291cmNlXG5cdC8vIGZpbGUgaXMgdXNlZCBzaW11bHRhbmVvdXNseSB3aXRoIGEgZGlmZmVyZW50IHNldCBvZiBvcHRpb25zIChlLmcuIGluIGEgdGVzdCBydW5uaW5nIGluIHBhcmFsbGVsKVxuXHRjb25zdCBhbGxPcHRpb25zID0gT2JqZWN0LmVudHJpZXMob3B0aW9ucyk7XG5cdGFsbE9wdGlvbnMuc29ydCgoYSwgYikgPT4gYlswXS5sb2NhbGVDb21wYXJlKGFbMF0pKTtcblxuXHRjb25zdCBlZG14RmlsZU5hbWUgPVxuXHRcdGFsbE9wdGlvbnMucmVkdWNlKFxuXHRcdFx0KGZpbGVuYW1lLCBbb3B0aW9uS2V5LCBvcHRpb25WYWx1ZV0pID0+IGAke2ZpbGVuYW1lfSMke29wdGlvbktleX09JHtvcHRpb25WYWx1ZS50b1N0cmluZygpfSNgLFxuXHRcdFx0cGF0aC5iYXNlbmFtZShjZHNVcmwpLnJlcGxhY2UoXCIuY2RzXCIsIFwiXCIpXG5cdFx0KSArIFwiLnhtbFwiO1xuXG5cdGNvbnN0IGVkbXhGaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShkaXIsIGVkbXhGaWxlTmFtZSk7XG5cblx0ZnMubWtkaXJTeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cblx0ZnMud3JpdGVGaWxlU3luYyhlZG14RmlsZVBhdGgsIGVkbXhDb250ZW50KTtcblx0cmV0dXJuIGVkbXhGaWxlUGF0aDtcbn07XG5cbi8qKlxuICogQ29tcGlsZSBDRFMgdG8gRURNWC5cbiAqIEBwYXJhbSBjZHMgVGhlIENEUyBtb2RlbC4gSXQgbXVzdCBkZWZpbmUgYXQgbGVhc3Qgb25lIHNlcnZpY2UuXG4gKiBAcGFyYW0gc2VydmljZSBUaGUgZnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHNlcnZpY2UgdG8gYmUgY29tcGlsZWQuIERlZmF1bHRzIHRvIFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIi5cbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoZSBFRE1YIG91dHB1dFxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIHNlcnZpY2UgbW9kZWwgYXMgRURNWC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNkczJlZG14KGNkczogc3RyaW5nLCBzZXJ2aWNlID0gXCJzYXAuZmUudGVzdC5KZXN0U2VydmljZVwiLCBvcHRpb25zOiBjb21waWxlci5PRGF0YU9wdGlvbnMgPSB7fSkge1xuXHRjb25zdCBzb3VyY2VzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyBcInNvdXJjZS5jZHNcIjogY2RzIH07XG5cblx0Ly8gYWxsb3cgdG8gaW5jbHVkZSBzdHVmZiBmcm9tIEBzYXAvY2RzL2NvbW1vblxuXHRpZiAoY2RzLmluY2x1ZGVzKFwiJ0BzYXAvY2RzL2NvbW1vbidcIikpIHtcblx0XHRzb3VyY2VzW1wiY29tbW9uLmNkc1wiXSA9IGZzLnJlYWRGaWxlU3luYyhyZXF1aXJlLnJlc29sdmUoXCJAc2FwL2Nkcy9jb21tb24uY2RzXCIpLCBcInV0Zi04XCIpO1xuXHR9XG5cblx0Y29uc3QgY3NuID0gY29tcGlsZXIuY29tcGlsZVNvdXJjZXMoc291cmNlcywge30pO1xuXG5cdGNvbnN0IGVkbXhPcHRpb25zOiBjb21waWxlci5PRGF0YU9wdGlvbnMgPSB7XG5cdFx0b2RhdGFGb3JlaWduS2V5czogdHJ1ZSxcblx0XHRvZGF0YUZvcm1hdDogXCJzdHJ1Y3R1cmVkXCIsXG5cdFx0b2RhdGFDb250YWlubWVudDogdHJ1ZSxcblx0XHQuLi5vcHRpb25zLFxuXHRcdHNlcnZpY2U6IHNlcnZpY2Vcblx0fTtcblxuXHRjb25zdCBlZG14ID0gY29tcGlsZXIudG8uZWRteChjc24sIGVkbXhPcHRpb25zKTtcblx0aWYgKCFlZG14KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBDb21waWxhdGlvbiBmYWlsZWQuIEhpbnQ6IE1ha2Ugc3VyZSB0aGF0IHRoZSBDRFMgbW9kZWwgZGVmaW5lcyBzZXJ2aWNlICR7c2VydmljZX0uYCk7XG5cdH1cblx0cmV0dXJuIGVkbXg7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRGYWtlU2lkZUVmZmVjdHNTZXJ2aWNlID0gYXN5bmMgZnVuY3Rpb24gKFxuXHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRjbGFzc05hbWVPRGF0YU1vZGVsID0gXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNb2RlbFwiXG4pOiBQcm9taXNlPFNpZGVFZmZlY3RzU2VydmljZT4ge1xuXHRjb25zdCBzY29wZU9iamVjdCA9IHtcblx0XHRnZXRNb2RlbDogKCkgPT4ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0aXNBOiAoKSA9PiBjbGFzc05hbWVPRGF0YU1vZGVsID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1vZGVsXCIsXG5cdFx0XHRcdGdldE1ldGFNb2RlbDogKCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBtZXRhTW9kZWw7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGdldFNlcnZpY2VVcmw6ICgpID0+IHVuZGVmaW5lZFxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGdldFNlcnZpY2U6ICgpID0+IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGdldENhcGFiaWxpdGllczogKCkgPT4gdW5kZWZpbmVkXG5cdFx0XHR9O1xuXHRcdH1cblx0fTtcblx0Y29uc3Qgc2VydmljZUluc3RhbmNlID0gYXdhaXQgbmV3IFNpZGVFZmZlY3RzRmFjdG9yeSgpLmNyZWF0ZUluc3RhbmNlKHsgc2NvcGVPYmplY3QsIHNjb3BlVHlwZTogXCJcIiwgc2V0dGluZ3M6IHt9IH0pO1xuXHRyZXR1cm4gc2VydmljZUluc3RhbmNlLmdldEludGVyZmFjZSgpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZha2VEaWFnbm9zdGljcyA9IGZ1bmN0aW9uICgpOiBJRGlhZ25vc3RpY3Mge1xuXHRjb25zdCBpc3N1ZXM6IGFueVtdID0gW107XG5cdHJldHVybiB7XG5cdFx0YWRkSXNzdWUoaXNzdWVDYXRlZ29yeTogSXNzdWVDYXRlZ29yeSwgaXNzdWVTZXZlcml0eTogSXNzdWVTZXZlcml0eSwgZGV0YWlsczogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRpc3N1ZXMucHVzaCh7XG5cdFx0XHRcdGlzc3VlQ2F0ZWdvcnksXG5cdFx0XHRcdGlzc3VlU2V2ZXJpdHksXG5cdFx0XHRcdGRldGFpbHNcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0Z2V0SXNzdWVzKCk6IGFueVtdIHtcblx0XHRcdHJldHVybiBpc3N1ZXM7XG5cdFx0fSxcblx0XHRjaGVja0lmSXNzdWVFeGlzdHMoaXNzdWVDYXRlZ29yeTogSXNzdWVDYXRlZ29yeSwgaXNzdWVTZXZlcml0eTogSXNzdWVTZXZlcml0eSwgZGV0YWlsczogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gaXNzdWVzLmZpbmQoKGlzc3VlKSA9PiB7XG5cdFx0XHRcdHJldHVybiBpc3N1ZS5pc3N1ZUNhdGVnb3J5ID09PSBpc3N1ZUNhdGVnb3J5ICYmIGlzc3VlLmlzc3VlU2V2ZXJpdHkgPT09IGlzc3VlU2V2ZXJpdHkgJiYgaXNzdWUuZGV0YWlscyA9PT0gZGV0YWlscztcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yVGVzdCA9IGZ1bmN0aW9uIChcblx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0bWFuaWZlc3RTZXR0aW5nczogTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MgfCBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5nc1xuKSB7XG5cdGNvbnN0IGNvbnZlcnRlZFR5cGVzID0gY29udmVydFR5cGVzKG1ldGFNb2RlbCk7XG5cdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBtYW5pZmVzdFNldHRpbmdzLmNvbnRleHRQYXRoXG5cdFx0PyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PihtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQobWFuaWZlc3RTZXR0aW5ncy5jb250ZXh0UGF0aCkgYXMgQ29udGV4dClcblx0XHQ6IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgLyR7bWFuaWZlc3RTZXR0aW5ncy5lbnRpdHlTZXR9YCkpO1xuXHRyZXR1cm4gbmV3IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pihcblx0XHRjb252ZXJ0ZWRUeXBlcyxcblx0XHRuZXcgTWFuaWZlc3RXcmFwcGVyKG1hbmlmZXN0U2V0dGluZ3MpLFxuXHRcdGdldEZha2VEaWFnbm9zdGljcygpLFxuXHRcdGRhdGFNb2RlbFBhdGhcblx0KTtcbn07XG5jb25zdCBtZXRhTW9kZWxDYWNoZTogYW55ID0ge307XG5leHBvcnQgY29uc3QgZ2V0TWV0YU1vZGVsID0gYXN5bmMgZnVuY3Rpb24gKHNNZXRhZGF0YVVybDogc3RyaW5nKSB7XG5cdGNvbnN0IG9SZXF1ZXN0b3IgPSBfTWV0YWRhdGFSZXF1ZXN0b3IuY3JlYXRlKHt9LCBcIjQuMFwiLCB1bmRlZmluZWQsIHt9LCB7fSwgZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9KTtcblx0aWYgKCFtZXRhTW9kZWxDYWNoZVtzTWV0YWRhdGFVcmxdKSB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG5ldyAoT0RhdGFNZXRhTW9kZWwgYXMgYW55KShvUmVxdWVzdG9yLCBzTWV0YWRhdGFVcmwsIHVuZGVmaW5lZCwgeyBfcmVxdWVzdEFubm90YXRpb25DaGFuZ2VzOiAoKSA9PiBbXSB9KTtcblx0XHRhd2FpdCBvTWV0YU1vZGVsLmZldGNoRW50aXR5Q29udGFpbmVyKCk7XG5cdFx0bWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXSA9IG9NZXRhTW9kZWw7XG5cdH1cblxuXHRyZXR1cm4gbWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yUHJvcGVydHkgPSBmdW5jdGlvbiA8VCA9IFByb3BlcnR5IHwgRW50aXR5U2V0IHwgQW55QW5ub3RhdGlvbj4oXG5cdGVudGl0eVNldDogRW50aXR5U2V0LFxuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGEsXG5cdHByb3BlcnR5PzogVFxuKTogRGF0YU1vZGVsT2JqZWN0UGF0aDxUPiB7XG5cdGNvbnN0IHRhcmdldFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8VD4gPSB7XG5cdFx0c3RhcnRpbmdFbnRpdHlTZXQ6IGVudGl0eVNldCxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllczogW10sXG5cdFx0dGFyZ2V0T2JqZWN0OiBwcm9wZXJ0eSxcblx0XHR0YXJnZXRFbnRpdHlTZXQ6IGVudGl0eVNldCxcblx0XHR0YXJnZXRFbnRpdHlUeXBlOiBlbnRpdHlTZXQuZW50aXR5VHlwZSxcblx0XHRjb252ZXJ0ZWRUeXBlczogY29udmVydGVkVHlwZXNcblx0fTtcblx0dGFyZ2V0UGF0aC5jb250ZXh0TG9jYXRpb24gPSB0YXJnZXRQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RW50aXR5U2V0Pjtcblx0cmV0dXJuIHRhcmdldFBhdGg7XG59O1xuXG5leHBvcnQgY29uc3QgZXZhbHVhdGVCaW5kaW5nID0gZnVuY3Rpb24gKGJpbmRpbmdTdHJpbmc6IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcblx0Y29uc3QgYmluZGluZ0VsZW1lbnQgPSBCaW5kaW5nSW5mby5wYXJzZShiaW5kaW5nU3RyaW5nKTtcblx0cmV0dXJuIGJpbmRpbmdFbGVtZW50LmZvcm1hdHRlci5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xufTtcblxudHlwZSBNb2RlbENvbnRlbnQgPSB7XG5cdFtuYW1lOiBzdHJpbmddOiBhbnk7XG59O1xuXG4vKipcbiAqIEV2YWx1YXRlIGEgYmluZGluZyBhZ2FpbnN0IGEgbW9kZWwuXG4gKiBAcGFyYW0gYmluZGluZ1N0cmluZyBUaGUgYmluZGluZyBzdHJpbmcuXG4gKiBAcGFyYW0gbW9kZWxDb250ZW50IENvbnRlbnQgb2YgdGhlIGRlZmF1bHQgbW9kZWwgdG8gdXNlIGZvciBldmFsdWF0aW9uLlxuICogQHBhcmFtIG5hbWVkTW9kZWxzQ29udGVudCBDb250ZW50cyBvZiBhZGRpdGlvbmFsLCBuYW1lZCBtb2RlbHMgdG8gdXNlLlxuICogQHJldHVybnMgVGhlIGV2YWx1YXRlZCBiaW5kaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXZhbHVhdGVCaW5kaW5nV2l0aE1vZGVsKFxuXHRiaW5kaW5nU3RyaW5nOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG1vZGVsQ29udGVudDogTW9kZWxDb250ZW50LFxuXHRuYW1lZE1vZGVsc0NvbnRlbnQ/OiB7IFttb2RlbE5hbWU6IHN0cmluZ106IE1vZGVsQ29udGVudCB9XG4pOiBzdHJpbmcge1xuXHRjb25zdCBiaW5kaW5nRWxlbWVudCA9IEJpbmRpbmdJbmZvLnBhcnNlKGJpbmRpbmdTdHJpbmcsIG51bGwsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB7XG5cdFx0XCIuXCI6IHtcblx0XHRcdF9mb3JtYXR0ZXJzOiB7XG5cdFx0XHRcdFZhbHVlRm9ybWF0dGVyOiBWYWx1ZUZvcm1hdHRlclxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdGNvbnN0IHRleHQgPSBuZXcgSW52aXNpYmxlVGV4dCgpO1xuXHR0ZXh0LmJpbmRQcm9wZXJ0eShcInRleHRcIiwgYmluZGluZ0VsZW1lbnQpO1xuXG5cdGNvbnN0IGRlZmF1bHRNb2RlbCA9IG5ldyBKU09OTW9kZWwobW9kZWxDb250ZW50KTtcblx0dGV4dC5zZXRNb2RlbChkZWZhdWx0TW9kZWwpO1xuXHR0ZXh0LnNldEJpbmRpbmdDb250ZXh0KGRlZmF1bHRNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIikpO1xuXG5cdGlmIChuYW1lZE1vZGVsc0NvbnRlbnQpIHtcblx0XHRmb3IgKGNvbnN0IFtuYW1lLCBjb250ZW50XSBvZiBPYmplY3QuZW50cmllcyhuYW1lZE1vZGVsc0NvbnRlbnQpKSB7XG5cdFx0XHRjb25zdCBtb2RlbCA9IG5ldyBKU09OTW9kZWwoY29udGVudCk7XG5cdFx0XHR0ZXh0LnNldE1vZGVsKG1vZGVsLCBuYW1lKTtcblx0XHRcdHRleHQuc2V0QmluZGluZ0NvbnRleHQobW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpLCBuYW1lKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGV4dC5nZXRUZXh0KCk7XG59XG5cbmNvbnN0IFRFU1RWSUVXSUQgPSBcInRlc3RWaWV3SWRcIjtcblxuY29uc3QgYXBwbHlGbGV4Q2hhbmdlcyA9IGFzeW5jIGZ1bmN0aW9uIChmbGV4Q2hhbmdlczogeyBbeDogc3RyaW5nXTogb2JqZWN0W10gfSwgb01ldGFNb2RlbDogTWV0YU1vZGVsLCByZXN1bHRYTUw6IGFueSkge1xuXHQvLyBwcmVmaXggSWRzXG5cdFsuLi5yZXN1bHRYTUwucXVlcnlTZWxlY3RvckFsbChcIltpZF1cIildLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRub2RlLmlkID0gYCR7VEVTVFZJRVdJRH0tLSR7bm9kZS5pZH1gO1xuXHR9KTtcblx0Y29uc3QgY2hhbmdlcyA9IGNyZWF0ZUZsZXhpYmlsaXR5Q2hhbmdlc09iamVjdChURVNUVklFV0lELCBmbGV4Q2hhbmdlcyk7XG5cdGNvbnN0IGFwcElkID0gXCJzb21lQ29tcG9uZW50XCI7XG5cdGNvbnN0IG9NYW5pZmVzdCA9IHtcblx0XHRcInNhcC5hcHBcIjoge1xuXHRcdFx0aWQ6IGFwcElkLFxuXHRcdFx0dHlwZTogXCJhcHBsaWNhdGlvblwiLFxuXHRcdFx0Y3Jvc3NOYXZpZ2F0aW9uOiB7XG5cdFx0XHRcdG91dGJvdW5kczogW11cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGNvbnN0IG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCA9IHtcblx0XHRnZXREaWFnbm9zdGljczogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShnZXRGYWtlRGlhZ25vc3RpY3MoKSksXG5cdFx0Z2V0TW9kZWw6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe1xuXHRcdFx0Z2V0TWV0YU1vZGVsOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKG9NZXRhTW9kZWwpXG5cdFx0fSksXG5cdFx0Z2V0Q29tcG9uZW50RGF0YTogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh7fSksXG5cdFx0Z2V0TWFuaWZlc3RPYmplY3Q6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe1xuXHRcdFx0Z2V0RW50cnk6IGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIChvTWFuaWZlc3QgYXMgYW55KVtuYW1lXTtcblx0XHRcdH1cblx0XHR9KSxcblx0XHRnZXRMb2NhbElkOiBqZXN0LmZuKChzSWQpID0+IHNJZClcblx0fSBhcyB1bmtub3duIGFzIEFwcENvbXBvbmVudDtcblx0Ly9mYWtlIGNoYW5nZXNcblx0amVzdC5zcHlPbihBcHBTdG9yYWdlLCBcImxvYWRGbGV4RGF0YVwiKS5tb2NrUmV0dXJuVmFsdWUoUHJvbWlzZS5yZXNvbHZlKGNoYW5nZXMpKTtcblx0amVzdC5zcHlPbihMb2FkZXIsIFwiZ2V0RmxleERhdGFcIikubW9ja1JldHVyblZhbHVlKFByb21pc2UucmVzb2x2ZSh7IGRhdGE6IGNoYW5nZXMgfSkpO1xuXHRqZXN0LnNweU9uKExvYWRlciwgXCJnZXRDYWNoZWRGbGV4RGF0YVwiKS5tb2NrUmV0dXJuVmFsdWUoY2hhbmdlcyk7XG5cblx0amVzdC5zcHlPbihDb21wb25lbnQgYXMgdW5rbm93biBhcyB7IGdldENvbXBvbmVudEJ5SWQ6ICgpID0+IEFwcENvbXBvbmVudCB9LCBcImdldENvbXBvbmVudEJ5SWRcIikubW9ja1JldHVyblZhbHVlKG9BcHBDb21wb25lbnQpO1xuXHRqZXN0LnNweU9uKFV0aWxzLCBcImdldEFwcENvbXBvbmVudEZvckNvbnRyb2xcIikubW9ja1JldHVyblZhbHVlKG9BcHBDb21wb25lbnQpO1xuXHRhd2FpdCBGbGV4U3RhdGUuaW5pdGlhbGl6ZSh7XG5cdFx0Y29tcG9uZW50SWQ6IGFwcElkXG5cdH0pO1xuXHRyZXN1bHRYTUwgPSBhd2FpdCBYbWxQcmVwcm9jZXNzb3IucHJvY2VzcyhyZXN1bHRYTUwsIHsgbmFtZTogXCJUZXN0IEZyYWdtZW50XCIsIGNvbXBvbmVudElkOiBhcHBJZCwgaWQ6IFRFU1RWSUVXSUQgfSk7XG5cblx0Ly9Bc3NlcnQgdGhhdCBhbGwgY2hhbmdlcyBoYXZlIGJlZW4gYXBwbGllZFxuXHRjb25zdCBjaGFuZ2VzQXBwbGllZCA9IGdldENoYW5nZXNGcm9tWE1MKHJlc3VsdFhNTCk7XG5cdGV4cGVjdChjaGFuZ2VzQXBwbGllZC5sZW5ndGgpLnRvQmUoZmxleENoYW5nZXM/LmNoYW5nZXM/Lmxlbmd0aCA/PyAwICsgZmxleENoYW5nZXM/LnZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcz8ubGVuZ3RoID8/IDApO1xuXHRyZXR1cm4gcmVzdWx0WE1MO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENoYW5nZXNGcm9tWE1MID0gKHhtbDogYW55KSA9PlxuXHRbLi4ueG1sLnF1ZXJ5U2VsZWN0b3JBbGwoXCIqXCIpXVxuXHRcdC5mbGF0TWFwKChlKSA9PiBbLi4uZS5hdHRyaWJ1dGVzXS5tYXAoKGEpID0+IGEubmFtZSkpXG5cdFx0LmZpbHRlcigoYXR0cikgPT4gYXR0ci5pbmNsdWRlcyhcInNhcC51aS5mbC5hcHBsaWVkQ2hhbmdlc1wiKSk7XG5cbmV4cG9ydCBjb25zdCBnZXRUZW1wbGF0aW5nUmVzdWx0ID0gYXN5bmMgZnVuY3Rpb24gKFxuXHR4bWxJbnB1dDogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogYW55OyBlbnRpdHlTZXQ/OiBzdHJpbmcgfSxcblx0bU1vZGVsczogeyBbeDogc3RyaW5nXTogYW55IH0sXG5cdGZsZXhDaGFuZ2VzPzogeyBbeDogc3RyaW5nXTogb2JqZWN0W10gfSxcblx0ZmFrZVNpZGVFZmZlY3RTZXJ2aWNlPzogdW5rbm93blxuKSB7XG5cdGlmICghbU1vZGVsc1tcInNhcC5mZS5pMThuXCJdKSB7XG5cdFx0bU1vZGVsc1tcInNhcC5mZS5pMThuXCJdID0gY3JlYXRlTW9ja1Jlc291cmNlTW9kZWwoKTtcblx0fVxuXG5cdGNvbnN0IHRlbXBsYXRlZFhtbCA9IGA8cm9vdD4ke3htbElucHV0fTwvcm9vdD5gO1xuXHRjb25zdCBwYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpO1xuXHRjb25zdCB4bWxEb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHRlbXBsYXRlZFhtbCwgXCJ0ZXh0L3htbFwiKTtcblx0Ly8gVG8gZW5zdXJlIG91ciBtYWNybyBjYW4gdXNlICNzZXRCaW5kaW5nQ29udGV4dCB3ZSBlbnN1cmUgdGhlcmUgaXMgYSBwcmUgZXhpc3RpbmcgSlNPTk1vZGVsIGZvciBjb252ZXJ0ZXJDb250ZXh0XG5cdC8vIGlmIG5vdCBhbHJlYWR5IHBhc3NlZCB0byB0ZWggdGVtcGxhdGluZ1xuXG5cdGNvbnN0IG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IGF3YWl0IF9idWlsZFByZVByb2Nlc3NvclNldHRpbmdzKHNNZXRhZGF0YVVybCwgbUJpbmRpbmdDb250ZXh0cywgbU1vZGVscywgZmFrZVNpZGVFZmZlY3RTZXJ2aWNlKTtcblxuXHQvL1RoaXMgY29udGV4dCBmb3IgbWFjcm8gdGVzdGluZ1xuXHRpZiAob1ByZXByb2Nlc3NvclNldHRpbmdzLm1vZGVsc1tcInRoaXNcIl0pIHtcblx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzW1widGhpc1wiXSA9IG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5tb2RlbHNbXCJ0aGlzXCJdLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblx0fVxuXG5cdGxldCByZXN1bHRYTUwgPSAoYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoeG1sRG9jLmZpcnN0RWxlbWVudENoaWxkISwgeyBuYW1lOiBcIlRlc3QgRnJhZ21lbnRcIiB9LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MpKSBhcyBhbnk7XG5cblx0aWYgKHNNZXRhZGF0YVVybCAmJiBmbGV4Q2hhbmdlcykge1xuXHRcdC8vIGFwcGx5IGZsZXggY2hhbmdlc1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBhd2FpdCBnZXRNZXRhTW9kZWwoc01ldGFkYXRhVXJsKTtcblx0XHRyZXN1bHRYTUwgPSBhd2FpdCBhcHBseUZsZXhDaGFuZ2VzKGZsZXhDaGFuZ2VzLCBvTWV0YU1vZGVsLCByZXN1bHRYTUwpO1xuXHR9XG5cdHJldHVybiByZXN1bHRYTUw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGVtcGxhdGVkWE1MID0gYXN5bmMgZnVuY3Rpb24gKFxuXHR4bWxJbnB1dDogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9LFxuXHRmbGV4Q2hhbmdlcz86IHsgW3g6IHN0cmluZ106IG9iamVjdFtdIH0sXG5cdGZha2VTaWRlRWZmZWN0U2VydmljZT86IHVua25vd25cbik6IFByb21pc2U8c3RyaW5nPiB7XG5cdHJldHVybiBqc3guZGVmaW5lWE1MTmFtZXNwYWNlTWFwKHJldmVzZU5hbWVzcGFjZU1hcCwgYXN5bmMgKCkgPT4ge1xuXHRcdGNvbnN0IHRlbXBsYXRlZFhNTCA9IGF3YWl0IGdldFRlbXBsYXRpbmdSZXN1bHQoXG5cdFx0XHR4bWxJbnB1dCxcblx0XHRcdHNNZXRhZGF0YVVybCxcblx0XHRcdG1CaW5kaW5nQ29udGV4dHMsXG5cdFx0XHRtTW9kZWxzLFxuXHRcdFx0ZmxleENoYW5nZXMsXG5cdFx0XHRmYWtlU2lkZUVmZmVjdFNlcnZpY2Vcblx0XHQpO1xuXHRcdGNvbnN0IHNlcmlhbGllZFhNTCA9IHNlcmlhbGl6ZVhNTCh0ZW1wbGF0ZWRYTUwsIHVuZGVmaW5lZCk7XG5cdFx0ZXhwZWN0KHNlcmlhbGllZFhNTCkubm90LnRvSGF2ZVRlbXBsYXRpbmdFcnJvcnMoKTtcblx0XHRyZXR1cm4gc2VyaWFsaWVkWE1MO1xuXHR9KSBhcyB1bmtub3duIGFzIFByb21pc2U8c3RyaW5nPjtcbn07XG5cbi8qKlxuICogUHJvY2VzcyB0aGUgcmVxdWVzdGVkIHZpZXcgd2l0aCB0aGUgcHJvdmlkZWQgZGF0YS5cbiAqIEBwYXJhbSBuYW1lIEZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSB2aWV3IHRvIGJlIHRlc3RlZC5cbiAqIEBwYXJhbSBzTWV0YWRhdGFVcmwgVXJsIG9mIHRoZSBtZXRhZGF0YS5cbiAqIEBwYXJhbSBtQmluZGluZ0NvbnRleHRzIE1hcCBvZiB0aGUgYmluZGluZ0NvbnRleHRzIHRvIHNldCBvbiB0aGUgbW9kZWxzLlxuICogQHBhcmFtIG1Nb2RlbHMgTWFwIG9mIHRoZSBtb2RlbHMuXG4gKiBAcGFyYW0gZmxleENoYW5nZXMgT2JqZWN0IHdpdGggVUkgY2hhbmdlcyBsaWtlICdjaGFuZ2VzJyBvciAndmFyaWFudERlcGVuZGVudENvbnRyb2xDaGFuZ2VzJ1xuICogQHJldHVybnMgVGVtcGxhdGVkIHZpZXcgYXMgc3RyaW5nXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzVmlldyhcblx0bmFtZTogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9LFxuXHRmbGV4Q2hhbmdlcz86IHsgW3g6IHN0cmluZ106IG9iamVjdFtdIH1cbik6IFByb21pc2U8SmVzdFRlbXBsYXRlZFZpZXc+IHtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IGF3YWl0IGdldE1ldGFNb2RlbChzTWV0YWRhdGFVcmwpO1xuXHRjb25zdCBvVmlld0RvY3VtZW50ID0gX2xvYWRSZXNvdXJjZVZpZXcobmFtZSk7XG5cdGNvbnN0IG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IGF3YWl0IF9idWlsZFByZVByb2Nlc3NvclNldHRpbmdzKHNNZXRhZGF0YVVybCwgbUJpbmRpbmdDb250ZXh0cywgbU1vZGVscyk7XG5cdGxldCBvUHJlcHJvY2Vzc2VkVmlldyA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKG9WaWV3RG9jdW1lbnQsIHsgbmFtZTogbmFtZSB9LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MpO1xuXHRpZiAoZmxleENoYW5nZXMpIHtcblx0XHRvUHJlcHJvY2Vzc2VkVmlldyA9IGF3YWl0IGFwcGx5RmxleENoYW5nZXMoZmxleENoYW5nZXMgPz8gW10sIG9NZXRhTW9kZWwsIG9QcmVwcm9jZXNzZWRWaWV3KTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdGFzRWxlbWVudDogb1ByZXByb2Nlc3NlZFZpZXcsXG5cdFx0YXNTdHJpbmc6IGZvcm1hdFhNTChvUHJlcHJvY2Vzc2VkVmlldz8ub3V0ZXJIVE1MIHx8IFwiXCIpXG5cdH07XG59XG5cbi8qKlxuICogUHJvY2VzcyB0aGUgcmVxdWVzdGVkIFhNTCBmcmFnbWVudCB3aXRoIHRoZSBwcm92aWRlZCBkYXRhLlxuICogQHBhcmFtIG5hbWUgRnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGZyYWdtZW50IHRvIGJlIHRlc3RlZC5cbiAqIEBwYXJhbSB0ZXN0RGF0YSBUZXN0IGRhdGEgY29uc2lzdGluZ1xuICogQHJldHVybnMgVGVtcGxhdGVkIGZyYWdtZW50IGFzIHN0cmluZ1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0ZyYWdtZW50KG5hbWU6IHN0cmluZywgdGVzdERhdGE6IHsgW21vZGVsOiBzdHJpbmddOiBvYmplY3QgfSk6IFByb21pc2U8c3RyaW5nPiB7XG5cdGNvbnN0IGlucHV0WG1sID0gYDxyb290Pjxjb3JlOkZyYWdtZW50IGZyYWdtZW50TmFtZT1cIiR7bmFtZX1cIiB0eXBlPVwiWE1MXCIgeG1sbnM6Y29yZT1cInNhcC51aS5jb3JlXCIgLz48L3Jvb3Q+YDtcblx0Y29uc3QgcGFyc2VyID0gbmV3IHdpbmRvdy5ET01QYXJzZXIoKTtcblxuXHRjb25zdCBpbnB1dERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoaW5wdXRYbWwsIFwidGV4dC94bWxcIik7XG5cblx0Ly8gYnVpbGQgbW9kZWwgYW5kIGJpbmRpbmdzIGZvciBnaXZlbiB0ZXN0IGRhdGFcblx0Y29uc3Qgc2V0dGluZ3MgPSB7XG5cdFx0bW9kZWxzOiB7fSBhcyB7IFtuYW1lOiBzdHJpbmddOiBKU09OTW9kZWwgfSxcblx0XHRiaW5kaW5nQ29udGV4dHM6IHt9IGFzIHsgW25hbWU6IHN0cmluZ106IG9iamVjdCB9LFxuXHRcdGFwcENvbXBvbmVudDogeyBnZXRTaWRlRWZmZWN0c1NlcnZpY2U6IGplc3QuZm4oKSwgZ2V0RGlhZ25vc3RpY3M6ICgpID0+IHVuZGVmaW5lZCB9XG5cdH07XG5cdGZvciAoY29uc3QgbW9kZWwgaW4gdGVzdERhdGEpIHtcblx0XHRjb25zdCBqc29uTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0anNvbk1vZGVsLnNldERhdGEodGVzdERhdGFbbW9kZWxdKTtcblx0XHRzZXR0aW5ncy5tb2RlbHNbbW9kZWxdID0ganNvbk1vZGVsO1xuXHRcdHNldHRpbmdzLmJpbmRpbmdDb250ZXh0c1ttb2RlbF0gPSBzZXR0aW5ncy5tb2RlbHNbbW9kZWxdLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblx0fVxuXHRzZXR0aW5ncy5hcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlLm1vY2tSZXR1cm5WYWx1ZShkZWZhdWx0RmFrZVNpZGVFZmZlY3RTZXJ2aWNlKTtcblxuXHQvLyBleGVjdXRlIHRoZSBwcmUtcHJvY2Vzc29yXG5cdGNvbnN0IHJlc3VsdERvYyA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKGlucHV0RG9jLmZpcnN0RWxlbWVudENoaWxkLCB7IG5hbWUgfSwgc2V0dGluZ3MpO1xuXG5cdC8vIGV4Y2x1ZGUgbmVzdGVkIGZyYWdtZW50cyBmcm9tIHRlc3Qgc25hcHNob3RzXG5cdGNvbnN0IGZyYWdtZW50cyA9IHJlc3VsdERvYy5nZXRFbGVtZW50c0J5VGFnTmFtZShcImNvcmU6RnJhZ21lbnRcIikgYXMgYW55O1xuXHRpZiAoZnJhZ21lbnRzPy5sZW5ndGggPiAwKSB7XG5cdFx0Zm9yIChjb25zdCBmcmFnbWVudCBvZiBmcmFnbWVudHMpIHtcblx0XHRcdGZyYWdtZW50LmlubmVySFRNTCA9IFwiXCI7XG5cdFx0fVxuXHR9XG5cblx0Ly8gS2VlcCB0aGUgZnJhZ21lbnQgcmVzdWx0IGFzIGNoaWxkIG9mIHJvb3Qgbm9kZSB3aGVuIGZyYWdtZW50IGdlbmVyYXRlcyBtdWx0aXBsZSByb290IGNvbnRyb2xzXG5cdGNvbnN0IHhtbFJlc3VsdCA9IHJlc3VsdERvYy5jaGlsZHJlbi5sZW5ndGggPiAxID8gcmVzdWx0RG9jLm91dGVySFRNTCA6IHJlc3VsdERvYy5pbm5lckhUTUw7XG5cblx0cmV0dXJuIGZvcm1hdFhNTCh4bWxSZXN1bHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplQ29udHJvbChjb250cm9sVG9TZXJpYWxpemU/OiBVSTVFbGVtZW50IHwgVUk1RWxlbWVudFtdLCBzaG93Q3VzdG9tU3R5bGVDbGFzc2VzID0gZmFsc2UpIHtcblx0bGV0IHRhYkNvdW50ID0gMDtcblx0Y29uc3QgVUlEID0gL3VpZC0taWQtXFxkezEzfS1cXGR7MSwzfS87XG5cdGNvbnN0IENPTlRST0xJRCA9IC9pZC1cXGR7MTN9LVxcZHsxLDN9Lztcblx0ZnVuY3Rpb24gZ2V0VGFiKHRvQWRkID0gMCkge1xuXHRcdGxldCB0YWIgPSBcIlwiO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGFiQ291bnQgKyB0b0FkZDsgaSsrKSB7XG5cdFx0XHR0YWIgKz0gXCJcXHRcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHRhYjtcblx0fVxuXHRjb25zdCBzZXJpYWxpemVEZWxlZ2F0ZSA9IHtcblx0XHRzdGFydDogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSwgc0FnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRsZXQgY29udHJvbERldGFpbCA9IFwiXCI7XG5cdFx0XHRpZiAoc0FnZ3JlZ2F0aW9uTmFtZSkge1xuXHRcdFx0XHRpZiAoY29udHJvbC5nZXRQYXJlbnQoKSkge1xuXHRcdFx0XHRcdGNvbnN0IGluZGV4SW5QYXJlbnQgPSAoY29udHJvbC5nZXRQYXJlbnQoKS5nZXRBZ2dyZWdhdGlvbihzQWdncmVnYXRpb25OYW1lKSBhcyBNYW5hZ2VkT2JqZWN0W10pPy5pbmRleE9mPy4oY29udHJvbCk7XG5cdFx0XHRcdFx0aWYgKGluZGV4SW5QYXJlbnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRjb250cm9sRGV0YWlsICs9IGAsXFxuJHtnZXRUYWIoKX1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29udHJvbERldGFpbCArPSBgJHtjb250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfShgO1xuXHRcdFx0cmV0dXJuIGNvbnRyb2xEZXRhaWw7XG5cdFx0fSxcblx0XHRlbmQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBcIn0pXCI7XG5cdFx0fSxcblx0XHRtaWRkbGU6IGZ1bmN0aW9uIChjb250cm9sOiBhbnkpIHtcblx0XHRcdGxldCBpZCA9IGNvbnRyb2wuZ2V0SWQoKTtcblx0XHRcdGlkID0gdHlwZW9mIGlkID09PSBcInN0cmluZ1wiID8gaWQ/LnJlcGxhY2U/LihDT05UUk9MSUQsIFwiaWRcIikgOiBpZDtcblx0XHRcdGxldCBkYXRhID0gYHtpZDogJHtNYW5hZ2VkT2JqZWN0TWV0YWRhdGEuaXNHZW5lcmF0ZWRJZChpZCkgPyBcIl9fZHluYW1pY0lkXCIgOiBpZH1gO1xuXHRcdFx0Zm9yIChjb25zdCBvQ29udHJvbEtleSBpbiBjb250cm9sLm1Qcm9wZXJ0aWVzKSB7XG5cdFx0XHRcdGlmIChjb250cm9sLm1Qcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGxldCBwcm9wZXJ0eVZhbHVlID0gY29udHJvbC5tUHJvcGVydGllc1tvQ29udHJvbEtleV07XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSBcInN0cmluZ1wiID8gcHJvcGVydHlWYWx1ZT8ucmVwbGFjZT8uKFVJRCwgXCJ1aWQtLWlkXCIpIDogcHJvcGVydHlWYWx1ZTtcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdHlwZW9mIHByb3BlcnR5VmFsdWUgPT09IFwic3RyaW5nXCIgPyBwcm9wZXJ0eVZhbHVlPy5yZXBsYWNlPy4oQ09OVFJPTElELCBcImlkXCIpIDogcHJvcGVydHlWYWx1ZTtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSBcIm9iamVjdFwiID8gSlNPTi5zdHJpbmdpZnkocHJvcGVydHlWYWx1ZSkgOiBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdC8vIFN0cmluZ2lmeSBtYXkgZmFpbCBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyBidXQgaXQncyBub3QgdGhlIGVuZCBvZiB0aGUgd29ybGRcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRkYXRhICs9IGAsXFxuJHtnZXRUYWIoKX0gJHtvQ29udHJvbEtleX06ICR7cHJvcGVydHlWYWx1ZX1gO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wubUJpbmRpbmdJbmZvcy5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRjb25zdCBiaW5kaW5nRGV0YWlsID0geyAuLi5jb250cm9sLm1CaW5kaW5nSW5mb3Nbb0NvbnRyb2xLZXldIH07XG5cdFx0XHRcdFx0aWYgKGJpbmRpbmdEZXRhaWwudHlwZT8ub091dHB1dEZvcm1hdCkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIGJpbmRpbmdEZXRhaWwudHlwZS5vT3V0cHV0Rm9ybWF0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoYmluZGluZ0RldGFpbC5iaW5kaW5nKSB7XG5cdFx0XHRcdFx0XHRkZWxldGUgYmluZGluZ0RldGFpbC5iaW5kaW5nO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkYXRhICs9IGAsXFxuJHtnZXRUYWIoKX0gJHtvQ29udHJvbEtleX06ICR7SlNPTi5zdHJpbmdpZnkoYmluZGluZ0RldGFpbCl9YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Zm9yIChjb25zdCBvQ29udHJvbEtleSBpbiBjb250cm9sLm1Bc3NvY2lhdGlvbnMpIHtcblx0XHRcdFx0aWYgKGNvbnRyb2wubUFzc29jaWF0aW9ucy5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRsZXQgYXNzb2NpYXRpb25WYWx1ZSA9IGNvbnRyb2wubUFzc29jaWF0aW9uc1tvQ29udHJvbEtleV07XG5cdFx0XHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KGFzc29jaWF0aW9uVmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRhc3NvY2lhdGlvblZhbHVlID0gW2Fzc29jaWF0aW9uVmFsdWVdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhc3NvY2lhdGlvblZhbHVlID0gYXNzb2NpYXRpb25WYWx1ZS5tYXAoKGFzc29jaWF0aW9uVmFsdWVFbGVtZW50OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRcdGlmICh0eXBlb2YgYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIE1hbmFnZWRPYmplY3RNZXRhZGF0YS5pc0dlbmVyYXRlZElkKGFzc29jaWF0aW9uVmFsdWVFbGVtZW50KVxuXHRcdFx0XHRcdFx0XHRcdD8gXCJfX2R5bmFtaWNJZFwiXG5cdFx0XHRcdFx0XHRcdFx0OiBhc3NvY2lhdGlvblZhbHVlRWxlbWVudD8ucmVwbGFjZT8uKENPTlRST0xJRCwgXCJpZFwiKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhc3NvY2lhdGlvblZhbHVlRWxlbWVudDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGRhdGEgKz0gYCxcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fTogJHsoYXNzb2NpYXRpb25WYWx1ZT8uam9pbj8uKFwiLFwiKSA/PyBhc3NvY2lhdGlvblZhbHVlKSB8fCB1bmRlZmluZWR9YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHNob3dDdXN0b21TdHlsZUNsYXNzZXMgJiYgY29udHJvbC5hQ3VzdG9tU3R5bGVDbGFzc2VzPy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGRhdGEgKz0gYCxcXG4ke2dldFRhYigpfSBjdXN0b21TdHlsZUNsYXNzZXMgOiAke2NvbnRyb2wuYUN1c3RvbVN0eWxlQ2xhc3Nlcy5qb2luKFwiLCBcIil9YDtcblx0XHRcdH1cblx0XHRcdGZvciAoY29uc3Qgb0NvbnRyb2xLZXkgaW4gY29udHJvbC5tRXZlbnRSZWdpc3RyeSkge1xuXHRcdFx0XHRpZiAoY29udHJvbC5tRXZlbnRSZWdpc3RyeS5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRkYXRhICs9IGAsXFxuJHtnZXRUYWIoKX0gJHtvQ29udHJvbEtleX06IHRydWVgO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRkYXRhICs9IGBgO1xuXHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0fSxcblx0XHRzdGFydEFnZ3JlZ2F0aW9uOiBmdW5jdGlvbiAoY29udHJvbDogeyBtQmluZGluZ0luZm9zOiBSZWNvcmQ8c3RyaW5nLCBCYXNlQWdncmVnYXRpb25CaW5kaW5nSW5mbz4gfSwgc05hbWU6IHN0cmluZykge1xuXHRcdFx0bGV0IG91dCA9IGAsXFxuJHtnZXRUYWIoKX0ke3NOYW1lfWA7XG5cdFx0XHR0YWJDb3VudCsrO1xuXG5cdFx0XHRpZiAoY29udHJvbC5tQmluZGluZ0luZm9zW3NOYW1lXSkge1xuXHRcdFx0XHRvdXQgKz0gYD17IHBhdGg6JyR7Y29udHJvbC5tQmluZGluZ0luZm9zW3NOYW1lXS5wYXRofScsIHRlbXBsYXRlOlxcbiR7Z2V0VGFiKCl9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dCArPSBgPVtcXG4ke2dldFRhYigpfWA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb3V0O1xuXHRcdH0sXG5cdFx0ZW5kQWdncmVnYXRpb246IGZ1bmN0aW9uIChjb250cm9sOiBhbnksIHNOYW1lOiBzdHJpbmcpIHtcblx0XHRcdHRhYkNvdW50LS07XG5cdFx0XHRpZiAoY29udHJvbC5tQmluZGluZ0luZm9zW3NOYW1lXSkge1xuXHRcdFx0XHRyZXR1cm4gYFxcbiR7Z2V0VGFiKCl9fWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gYFxcbiR7Z2V0VGFiKCl9XWA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAoQXJyYXkuaXNBcnJheShjb250cm9sVG9TZXJpYWxpemUpKSB7XG5cdFx0cmV0dXJuIGNvbnRyb2xUb1NlcmlhbGl6ZS5tYXAoKGNvbnRyb2xUb1JlbmRlcjogVUk1RWxlbWVudCkgPT4ge1xuXHRcdFx0cmV0dXJuIG5ldyBTZXJpYWxpemVyKGNvbnRyb2xUb1JlbmRlciwgc2VyaWFsaXplRGVsZWdhdGUpLnNlcmlhbGl6ZSgpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBuZXcgU2VyaWFsaXplcihjb250cm9sVG9TZXJpYWxpemUsIHNlcmlhbGl6ZURlbGVnYXRlKS5zZXJpYWxpemUoKTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplQ29udHJvbEFzWE1MKFxuXHRjb250cm9sVG9TZXJpYWxpemU/OiBNYW5hZ2VkT2JqZWN0IHwgTWFuYWdlZE9iamVjdFtdIHwgbnVsbCxcblx0c2hvd0N1c3RvbVN0eWxlQ2xhc3NlcyA9IGZhbHNlLFxuXHRwcmVmZXJWYWx1ZSA9IGZhbHNlXG4pIHtcblx0bGV0IHRhYkNvdW50ID0gMDtcblx0Y29uc3QgVUlEID0gL3VpZC0taWQtXFxkezEzfS1cXGR7MSwzfS87XG5cdGNvbnN0IENPTlRST0xJRCA9IC9pZC1cXGR7MTN9LVxcZHsxLDN9Lztcblx0Y29uc3QgZGVmaW5lZE5hbWVzcGFjZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcblxuXHRmdW5jdGlvbiBnZXROYW1lc3BhY2VBbGlhcyhjbGFzc05hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgbmFtZXNTcGxpdCA9IGNsYXNzTmFtZS5zcGxpdChcIi5cIik7XG5cdFx0Y29uc3QgbmFtZXNwYWNlID0gbmFtZXNTcGxpdC5zbGljZSgwLCAtMSk7XG5cdFx0Y29uc3QgbmFtZSA9IG5hbWVzU3BsaXRbbmFtZXNTcGxpdC5sZW5ndGggLSAxXTtcblx0XHRsZXQgbmFtZXNwYWNlQWxpYXMgPSBuYW1lc3BhY2VbbmFtZXNwYWNlLmxlbmd0aCAtIDFdO1xuXHRcdGlmIChyZXZlc2VOYW1lc3BhY2VNYXBbbmFtZXNwYWNlLmpvaW4oXCIuXCIpXSkge1xuXHRcdFx0bmFtZXNwYWNlQWxpYXMgPSByZXZlc2VOYW1lc3BhY2VNYXBbbmFtZXNwYWNlLmpvaW4oXCIuXCIpXTtcblx0XHR9XG5cdFx0aWYgKG5hbWVzcGFjZUFsaWFzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG5hbWVzcGFjZUFsaWFzID0gXCJ0ZXN0XCI7XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lc3BhY2VBbGlhcztcblx0fVxuXG5cdGZ1bmN0aW9uIGdldFRhYih0b0FkZCA9IDApIHtcblx0XHRsZXQgdGFiID0gXCJcIjtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRhYkNvdW50ICsgdG9BZGQ7IGkrKykge1xuXHRcdFx0dGFiICs9IFwiXFx0XCI7XG5cdFx0fVxuXHRcdHJldHVybiB0YWI7XG5cdH1cblx0Y29uc3Qgc2VyaWFsaXplRGVsZWdhdGUgPSB7XG5cdFx0c3RhcnQ6IGZ1bmN0aW9uIChjb250cm9sOiBhbnksIHNBZ2dyZWdhdGlvbk5hbWU6IHN0cmluZykge1xuXHRcdFx0bGV0IGNvbnRyb2xEZXRhaWwgPSBcIlwiO1xuXHRcdFx0aWYgKHNBZ2dyZWdhdGlvbk5hbWUpIHtcblx0XHRcdFx0aWYgKGNvbnRyb2wuZ2V0UGFyZW50KCkpIHtcblx0XHRcdFx0XHRjb25zdCBpbmRleEluUGFyZW50ID0gKGNvbnRyb2wuZ2V0UGFyZW50KCkuZ2V0QWdncmVnYXRpb24oc0FnZ3JlZ2F0aW9uTmFtZSkgYXMgTWFuYWdlZE9iamVjdFtdKT8uaW5kZXhPZj8uKGNvbnRyb2wpO1xuXHRcdFx0XHRcdGlmIChpbmRleEluUGFyZW50ID4gMCkge1xuXHRcdFx0XHRcdFx0Y29udHJvbERldGFpbCArPSBgXFxuJHtnZXRUYWIoKX1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29uc3QgbmFtZUZ1bGwgPSBjb250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpO1xuXHRcdFx0Y29uc3QgbmFtZXNTcGxpdCA9IG5hbWVGdWxsLnNwbGl0KFwiLlwiKTtcblx0XHRcdGNvbnN0IG5hbWUgPSBuYW1lc1NwbGl0W25hbWVzU3BsaXQubGVuZ3RoIC0gMV07XG5cdFx0XHRjb25zdCBuYW1lc3BhY2VBbGlhcyA9IGdldE5hbWVzcGFjZUFsaWFzKG5hbWVGdWxsKTtcblx0XHRcdGNvbnRyb2xEZXRhaWwgKz0gYDwke25hbWVzcGFjZUFsaWFzfToke25hbWV9XFxuYDtcblx0XHRcdGlmICghZGVmaW5lZE5hbWVzcGFjZXNbbmFtZXNwYWNlQWxpYXNdKSB7XG5cdFx0XHRcdGRlZmluZWROYW1lc3BhY2VzW25hbWVzcGFjZUFsaWFzXSA9IDE7XG5cdFx0XHRcdGNvbnRyb2xEZXRhaWwgKz0gYCR7Z2V0VGFiKCl9eG1sbnM6JHtuYW1lc3BhY2VBbGlhc309XCIke25hbWVTcGFjZU1hcFtuYW1lc3BhY2VBbGlhc119XCJcXG5gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVmaW5lZE5hbWVzcGFjZXNbbmFtZXNwYWNlQWxpYXNdKys7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY29udHJvbERldGFpbDtcblx0XHR9LFxuXHRcdGVuZDogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSkge1xuXHRcdFx0Y29uc3QgbmFtZUZ1bGwgPSBjb250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpO1xuXHRcdFx0Y29uc3QgbmFtZXNTcGxpdCA9IG5hbWVGdWxsLnNwbGl0KFwiLlwiKTtcblx0XHRcdGNvbnN0IG5hbWUgPSBuYW1lc1NwbGl0W25hbWVzU3BsaXQubGVuZ3RoIC0gMV07XG5cdFx0XHRjb25zdCBuYW1lc3BhY2VBbGlhcyA9IGdldE5hbWVzcGFjZUFsaWFzKG5hbWVGdWxsKTtcblx0XHRcdGxldCBoYXNBZ2dyZWdhdGlvbiA9IGZhbHNlO1xuXHRcdFx0Zm9yIChjb25zdCBtQWdncmVnYXRpb25zS2V5IGluIGNvbnRyb2wubUFnZ3JlZ2F0aW9ucykge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0KCFBcnJheS5pc0FycmF5KGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XSkgJiZcblx0XHRcdFx0XHRcdGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XSAhPT0gbnVsbCAmJlxuXHRcdFx0XHRcdFx0Y29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldICE9PSB1bmRlZmluZWQpIHx8XG5cdFx0XHRcdFx0KEFycmF5LmlzQXJyYXkoY29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldKSAmJiBjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0ubGVuZ3RoID4gMClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0aGFzQWdncmVnYXRpb24gPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRkZWZpbmVkTmFtZXNwYWNlc1tuYW1lc3BhY2VBbGlhc10tLTtcblx0XHRcdGlmIChoYXNBZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gYDwvJHtuYW1lc3BhY2VBbGlhc306JHtuYW1lfT5gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGAvPmA7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRtaWRkbGU6IGZ1bmN0aW9uIChjb250cm9sOiBhbnkpIHtcblx0XHRcdGxldCBpZCA9IGNvbnRyb2wuZ2V0SWQoKTtcblx0XHRcdGlkID0gdHlwZW9mIGlkID09PSBcInN0cmluZ1wiID8gaWQ/LnJlcGxhY2U/LihDT05UUk9MSUQsIFwiaWRcIikgOiBpZDtcblx0XHRcdGxldCBkYXRhID0gXCJcIjtcblx0XHRcdGlmICghTWFuYWdlZE9iamVjdE1ldGFkYXRhLmlzR2VuZXJhdGVkSWQoaWQpKSB7XG5cdFx0XHRcdGRhdGEgPSBgaWQ9XCIke2lkfVwiYDtcblx0XHRcdH1cblx0XHRcdGxldCBrZXlzID0gT2JqZWN0LmtleXMoY29udHJvbC5tUHJvcGVydGllcylcblx0XHRcdFx0LmZpbHRlcigocHJvcE5hbWUpID0+IHByb3BOYW1lICE9PSBcImlkXCIpXG5cdFx0XHRcdC5jb25jYXQoT2JqZWN0LmtleXMoY29udHJvbC5tQmluZGluZ0luZm9zKSlcblx0XHRcdFx0LmNvbmNhdChPYmplY3Qua2V5cyhjb250cm9sLm1Bc3NvY2lhdGlvbnMpKVxuXHRcdFx0XHQuY29uY2F0KE9iamVjdC5rZXlzKGNvbnRyb2wubUV2ZW50UmVnaXN0cnkpKTtcblx0XHRcdGtleXMgPSBrZXlzLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG5cdFx0XHRjb25zdCB1bmlxdWVLZXlzID0gbmV3IFNldChrZXlzKTtcblx0XHRcdGtleXMgPSBBcnJheS5mcm9tKHVuaXF1ZUtleXMpO1xuXHRcdFx0Zm9yIChjb25zdCBvQ29udHJvbEtleSBvZiBrZXlzKSB7XG5cdFx0XHRcdGlmICghcHJlZmVyVmFsdWUgJiYgY29udHJvbC5tQmluZGluZ0luZm9zLmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGNvbnN0IGJpbmRpbmdEZXRhaWwgPSB7IC4uLmNvbnRyb2wubUJpbmRpbmdJbmZvc1tvQ29udHJvbEtleV0gfTtcblx0XHRcdFx0XHRpZiAoYmluZGluZ0RldGFpbC5iaW5kaW5nU3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRkYXRhICs9IGBcXG4ke2dldFRhYigpfSR7b0NvbnRyb2xLZXl9PVwiJHtiaW5kaW5nRGV0YWlsLmJpbmRpbmdTdHJpbmcucmVwbGFjZShcIj5cIiwgXCImZ3Q7XCIpfVwiYDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKGJpbmRpbmdEZXRhaWwudHlwZT8ub091dHB1dEZvcm1hdCkge1xuXHRcdFx0XHRcdFx0XHRkZWxldGUgYmluZGluZ0RldGFpbC50eXBlLm9PdXRwdXRGb3JtYXQ7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChiaW5kaW5nRGV0YWlsLmJpbmRpbmcpIHtcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIGJpbmRpbmdEZXRhaWwuYmluZGluZztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChiaW5kaW5nRGV0YWlsLnRlbXBsYXRlKSB7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBiaW5kaW5nRGV0YWlsLnRlbXBsYXRlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZGF0YSArPSBgXFxuJHtnZXRUYWIoKX0ke29Db250cm9sS2V5fT0nJHtKU09OLnN0cmluZ2lmeShiaW5kaW5nRGV0YWlsKX0nYDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5tUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkgJiYgY29udHJvbC5tUHJvcGVydGllc1tvQ29udHJvbEtleV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGxldCBwcm9wZXJ0eVZhbHVlID0gY29udHJvbC5tUHJvcGVydGllc1tvQ29udHJvbEtleV07XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlWYWx1ZS5yZXBsYWNlKFVJRCwgXCJ1aWQtLWlkXCIpLnJlcGxhY2UoQ09OVFJPTElELCBcImlkXCIpLnJlcGxhY2UoL1wiL2csIFwiJnF1b3Q7XCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9XG5cdFx0XHRcdFx0XHRcdHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSBcIm9iamVjdFwiID8gSlNPTi5zdHJpbmdpZnkocHJvcGVydHlWYWx1ZSkucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIikgOiBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdC8vIFN0cmluZ2lmeSBtYXkgZmFpbCBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyBidXQgaXQncyBub3QgdGhlIGVuZCBvZiB0aGUgd29ybGRcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRkYXRhICs9IGBcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fT1cIiR7cHJvcGVydHlWYWx1ZX1cImA7XG5cdFx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5tQXNzb2NpYXRpb25zLmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGxldCBhc3NvY2lhdGlvblZhbHVlID0gY29udHJvbC5tQXNzb2NpYXRpb25zW29Db250cm9sS2V5XTtcblx0XHRcdFx0XHRpZiAoIUFycmF5LmlzQXJyYXkoYXNzb2NpYXRpb25WYWx1ZSkpIHtcblx0XHRcdFx0XHRcdGFzc29jaWF0aW9uVmFsdWUgPSBbYXNzb2NpYXRpb25WYWx1ZV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGFzc29jaWF0aW9uVmFsdWUgPSBhc3NvY2lhdGlvblZhbHVlLm1hcCgoYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQ6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHR5cGVvZiBhc3NvY2lhdGlvblZhbHVlRWxlbWVudCA9PT0gXCJzdHJpbmdcIlxuXHRcdFx0XHRcdFx0XHQ/IGFzc29jaWF0aW9uVmFsdWVFbGVtZW50Py5yZXBsYWNlPy4oQ09OVFJPTElELCBcImlkXCIpXG5cdFx0XHRcdFx0XHRcdDogYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQ7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRkYXRhICs9IGBcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fT1cIiR7KGFzc29jaWF0aW9uVmFsdWU/LmpvaW4/LihcIixcIikgPz8gYXNzb2NpYXRpb25WYWx1ZSkgfHwgdW5kZWZpbmVkfVwiYDtcblx0XHRcdFx0fSBlbHNlIGlmIChjb250cm9sLm1FdmVudFJlZ2lzdHJ5Lmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGlmIChjb250cm9sLm1FdmVudFJlZ2lzdHJ5W29Db250cm9sS2V5XVswXT8uZkZ1bmN0aW9uPy5uYW1lKSB7XG5cdFx0XHRcdFx0XHRkYXRhICs9IGBcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fT1cIiR7Y29udHJvbC5tRXZlbnRSZWdpc3RyeVtvQ29udHJvbEtleV1bMF0/LmZGdW5jdGlvbj8ubmFtZX1cImA7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGRhdGEgKz0gYFxcbiR7Z2V0VGFiKCl9ICR7b0NvbnRyb2xLZXl9PVwic29tZUV2ZW50SGFuZGxlclwiYDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChzaG93Q3VzdG9tU3R5bGVDbGFzc2VzICYmIGNvbnRyb2wuYUN1c3RvbVN0eWxlQ2xhc3Nlcz8ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRkYXRhICs9IGBcXG4ke2dldFRhYigpfSBjdXN0b21TdHlsZUNsYXNzZXMgOiAke2NvbnRyb2wuYUN1c3RvbVN0eWxlQ2xhc3Nlcy5qb2luKFwiLCBcIil9YDtcblx0XHRcdH1cblx0XHRcdGRhdGEgKz0gYFxcbmA7XG5cdFx0XHRsZXQgaGFzQWdncmVnYXRpb24gPSBmYWxzZTtcblx0XHRcdGZvciAoY29uc3QgbUFnZ3JlZ2F0aW9uc0tleSBpbiBjb250cm9sLm1BZ2dyZWdhdGlvbnMpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCghQXJyYXkuaXNBcnJheShjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0pICYmXG5cdFx0XHRcdFx0XHRjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0gIT09IG51bGwgJiZcblx0XHRcdFx0XHRcdGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XSAhPT0gdW5kZWZpbmVkKSB8fFxuXHRcdFx0XHRcdChBcnJheS5pc0FycmF5KGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XSkgJiYgY29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldLmxlbmd0aCA+IDApXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGhhc0FnZ3JlZ2F0aW9uID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGhhc0FnZ3JlZ2F0aW9uKSB7XG5cdFx0XHRcdGRhdGEgKz0gXCI+XCI7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9LFxuXHRcdHN0YXJ0QWdncmVnYXRpb246IGZ1bmN0aW9uIChjb250cm9sOiBhbnksIHNOYW1lOiBzdHJpbmcpIHtcblx0XHRcdGNvbnN0IG5hbWVzcGFjZUFsaWFzID0gZ2V0TmFtZXNwYWNlQWxpYXMoY29udHJvbC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSk7XG5cdFx0XHRsZXQgb3V0ID0gYFxcbiR7Z2V0VGFiKCl9PCR7bmFtZXNwYWNlQWxpYXN9OiR7c05hbWV9PmA7XG5cdFx0XHR0YWJDb3VudCsrO1xuXHRcdFx0b3V0ICs9IGBcXG4ke2dldFRhYigpfWA7XG5cdFx0XHRyZXR1cm4gb3V0O1xuXHRcdH0sXG5cdFx0ZW5kQWdncmVnYXRpb246IGZ1bmN0aW9uIChjb250cm9sOiBhbnksIHNOYW1lOiBzdHJpbmcpIHtcblx0XHRcdHRhYkNvdW50LS07XG5cdFx0XHRjb25zdCBuYW1lc3BhY2VBbGlhcyA9IGdldE5hbWVzcGFjZUFsaWFzKGNvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkpO1xuXHRcdFx0aWYgKGNvbnRyb2wubUJpbmRpbmdJbmZvc1tzTmFtZV0pIHtcblx0XHRcdFx0cmV0dXJuIGBcXG4ke2dldFRhYigpfTwvJHtuYW1lc3BhY2VBbGlhc306JHtzTmFtZX0+XFxuYDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBgXFxuJHtnZXRUYWIoKX08LyR7bmFtZXNwYWNlQWxpYXN9OiR7c05hbWV9PlxcbmA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRsZXQgb3V0WE1MO1xuXHRpZiAoQXJyYXkuaXNBcnJheShjb250cm9sVG9TZXJpYWxpemUpKSB7XG5cdFx0b3V0WE1MID0gY29udHJvbFRvU2VyaWFsaXplLm1hcCgoY29udHJvbFRvUmVuZGVyOiBNYW5hZ2VkT2JqZWN0KSA9PiB7XG5cdFx0XHRyZXR1cm4gbmV3IFNlcmlhbGl6ZXIoY29udHJvbFRvUmVuZGVyLCBzZXJpYWxpemVEZWxlZ2F0ZSkuc2VyaWFsaXplKCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b3V0WE1MID0gbmV3IFNlcmlhbGl6ZXIoY29udHJvbFRvU2VyaWFsaXplLCBzZXJpYWxpemVEZWxlZ2F0ZSkuc2VyaWFsaXplKCk7XG5cdH1cblx0cmV0dXJuIGZvcm1hdFhNTChgPHJvb3Q+JHtvdXRYTUx9PC9yb290PmApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXdhaXRlcigpIHtcblx0bGV0IGZuUmVzb2x2ZSE6IEZ1bmN0aW9uO1xuXHRjb25zdCBteVByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdGZuUmVzb2x2ZSA9IHJlc29sdmU7XG5cdH0pO1xuXHRyZXR1cm4geyBwcm9taXNlOiBteVByb21pc2UsIHJlc29sdmU6IGZuUmVzb2x2ZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJNb2NrRnJhZ21lbnRzKC4uLmZyYWdtZW50czogTW9ja0ZyYWdtZW50W10pOiBqZXN0LlNweUluc3RhbmNlIHtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0Y29uc3Qgb3JpZ2luYWxMb2FkVGVtcGxhdGUgPSAoWE1MVGVtcGxhdGVQcm9jZXNzb3IgYXMgYW55KS5sb2FkVGVtcGxhdGVQcm9taXNlO1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXHRjb25zdCBsb2FkVGVtcGxhdGVTdHViID0gamVzdC5zcHlPbihYTUxUZW1wbGF0ZVByb2Nlc3NvciBhcyBhbnksIFwibG9hZFRlbXBsYXRlUHJvbWlzZVwiKTtcblx0bG9hZFRlbXBsYXRlU3R1Yi5tb2NrSW1wbGVtZW50YXRpb24oKCh0ZW1wbGF0ZU5hbWU6IHN0cmluZywgZXh0ZW5zaW9uOiBzdHJpbmcpID0+IHtcblx0XHRmb3IgKGNvbnN0IGZyYWdtZW50IG9mIGZyYWdtZW50cykge1xuXHRcdFx0aWYgKGZyYWdtZW50Lm5hbWUgPT09IHRlbXBsYXRlTmFtZSkge1xuXHRcdFx0XHRyZXR1cm4gcGFyc2VYTUxTdHJpbmcoZnJhZ21lbnQuY29udGVudClbMF07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvcmlnaW5hbExvYWRUZW1wbGF0ZSh0ZW1wbGF0ZU5hbWUsIGV4dGVuc2lvbik7XG5cdH0pIGFzICgoKSA9PiBFbGVtZW50KSB8IHVuZGVmaW5lZCk7XG5cdHJldHVybiBsb2FkVGVtcGxhdGVTdHViO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgYW4gYXBwQ29tcG9uZW50IGFuZCB0ZW1wbGF0ZUNvbXBvbmVudCB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICogQHBhcmFtIG9wdGlvbnNcbiAqIEBwYXJhbSBvcHRpb25zLmNkc0ZpbGUgVGhlIHBhdGggdG8gdGhlIENEUyBmaWxlIHRvIHVzZSBmb3IgdGhlIGFwcENvbXBvbmVudFxuICogQHBhcmFtIG9wdGlvbnMubWFpbkNvbnRleHRQYXRoIFRoZSBtYWluIGNvbnRleHQgcGF0aCB0byB1c2UgZm9yIHRoZSBhcHBDb21wb25lbnRcbiAqIEBwYXJhbSBvcHRpb25zLnBhZ2VDb250ZW50IFRoZSBwYWdlIGNvbnRlbnQgdG8gdXNlIGZvciB0aGUgYXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gb3B0aW9ucy5jb250ZW50IFRoZSBjb250ZW50IHRvIHVzZSBmb3IgdGhlIGFwcCBDb21wb25lbnRcbiAqIEBwYXJhbSBvcHRpb25zLmNvbXBvbmVudElkXG4gKiBAcGFyYW0gb3B0aW9ucy5tYW5pZmVzdFNldHRpbmdzXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSB0byB1c2UgZm9yIHRoZSBhcHBDb21wb25lbnRcbiAqIEBwYXJhbSB2aWV3TGV2ZWwgVGhlIHZpZXcgbGV2ZWwgdG8gdXNlIGZvciB0aGUgYXBwQ29tcG9uZW50XG4gKiBAcmV0dXJucyBUaGUgYXBwY29tcG9uZW50IGFuZCB0ZW1wbGF0ZUNvbXBvbmVudCB0byB1c2UgZm9yIHRlc3RpbmdcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluaXRpYWxpemVBcHBDb21wb25lbnQoXG5cdG9wdGlvbnM/OiB7XG5cdFx0Y2RzRmlsZT86IHN0cmluZztcblx0XHRjb21wb25lbnRJZD86IHN0cmluZztcblx0XHRtYWluQ29udGV4dFBhdGg/OiBzdHJpbmc7XG5cdFx0cGFnZUNvbnRlbnQ/OiBGdW5jdGlvbjtcblx0XHRtYW5pZmVzdFNldHRpbmdzPzogUGFydGlhbDxMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncyB8IE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzPjtcblx0XHRmZU1hbmlmZXN0U2V0dGluZ3M/OiBQYXJ0aWFsPE1hbmlmZXN0Q29udGVudFtcInNhcC5mZVwiXT47XG5cdFx0Y29udGVudD86IFBhcnRpYWw8TGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3NbXCJjb250ZW50XCJdIHwgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3NbXCJjb250ZW50XCJdPjtcblx0XHRndWlkPzogc3RyaW5nO1xuXHR9LFxuXHRuYW1lPzogc3RyaW5nLFxuXHR2aWV3TGV2ZWw/OiBudW1iZXJcbik6IFByb21pc2U8eyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDsgdGVtcGxhdGVDb21wb25lbnQ6IFRlbXBsYXRlQ29tcG9uZW50IH0+IHtcblx0amVzdC5zcHlPbihPRGF0YU1vZGVsLnByb3RvdHlwZSwgXCJzZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyXCIpLm1vY2tSZXR1cm5WYWx1ZSh1bmRlZmluZWQpO1xuXHRsZXQgY2RzRmlsZSA9IG9wdGlvbnM/LmNkc0ZpbGU7XG5cdGlmICghY2RzRmlsZSkge1xuXHRcdGNkc0ZpbGUgPSBjb21waWxlQ0RTKHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi9kYXRhL1Byb2R1Y3RzLmNkc1wiKSk7XG5cdH1cblx0Y29uc3QgZ3VpZCA9IG9wdGlvbnM/Lmd1aWQgPz8gdWlkKCk7XG5cdGNvbnN0IGlkID0gb3B0aW9ucz8uY29tcG9uZW50SWQgPz8gYHNhcC5mZS50ZXN0LiR7Z3VpZH1gO1xuXHRjb25zdCBjZHNDb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGNkc0ZpbGUpLnRvU3RyaW5nKCk7XG5cdHdpbmRvdy5qZXN0VUk1Lm1vY2tVcmwoYC9zYXAvZmUvY29yZS9tb2NrLyR7Z3VpZH0vJG1ldGFkYXRhP3NhcC1sYW5ndWFnZT1FTmAsIGNkc0NvbnRlbnQpO1xuXHRpZiAoIW9wdGlvbnM/LnBhZ2VDb250ZW50KSB7XG5cdFx0amVzdC5zcHlPbihQYWdlQ29udHJvbGxlci5wcm90b3R5cGUsIFwiX29uSW50ZXJuYWxBZnRlckJpbmRpbmdcIikubW9ja0ltcGxlbWVudGF0aW9uKGplc3QuZm4oKSk7XG5cdH1cblx0Y2xhc3MgRGVmYXVsdFBhZ2VDb250ZW50IGV4dGVuZHMgUGFnZUNvbnRyb2xsZXIge1xuXHRcdHJlbmRlcigpIHtcblx0XHRcdHJldHVybiA8UGFnZT48L1BhZ2U+O1xuXHRcdH1cblx0fVxuXHRzYXAudWkuZGVmaW5lKGBzYXAvZmUvdGVzdC8ke2d1aWR9L0NvbXBvbmVudGAsIFtcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiXSwgZnVuY3Rpb24gKF9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCkge1xuXHRcdFwidXNlIHN0cmljdFwiO1xuXG5cdFx0cmV0dXJuIEFwcENvbXBvbmVudC5leHRlbmQoYHNhcC5mZS50ZXN0LiR7Z3VpZH0uQ29tcG9uZW50YCwge1xuXHRcdFx0bWV0YWRhdGE6IHtcblx0XHRcdFx0bWFuaWZlc3Q6IHtcblx0XHRcdFx0XHRcInNhcC5hcHBcIjoge1xuXHRcdFx0XHRcdFx0aWQ6IGB0ZXN0JHtndWlkfWAsXG5cdFx0XHRcdFx0XHR0aXRsZTogXCJBcHAgVGl0bGVcIixcblx0XHRcdFx0XHRcdGRhdGFTb3VyY2VzOiB7XG5cdFx0XHRcdFx0XHRcdG1haW5TZXJ2aWNlOiB7XG5cdFx0XHRcdFx0XHRcdFx0dXJpOiBgL3NhcC9mZS9jb3JlL21vY2svJHtndWlkfS9gLFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiT0RhdGFcIixcblx0XHRcdFx0XHRcdFx0XHRzZXR0aW5nczoge1xuXHRcdFx0XHRcdFx0XHRcdFx0b2RhdGFWZXJzaW9uOiBcIjQuMFwiXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcInNhcC51aTVcIjoge1xuXHRcdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRcdFwiXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRkYXRhU291cmNlOiBcIm1haW5TZXJ2aWNlXCIsXG5cdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3M6IHt9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRyb3V0aW5nOiB7XG5cdFx0XHRcdFx0XHRcdHRhcmdldHM6IHtcblx0XHRcdFx0XHRcdFx0XHREZWZhdWx0OiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIkNvbXBvbmVudFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogbmFtZSA/PyBcInNhcC5mZS5jb3JlLmZwbVwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0aWQ6IFwiRGVmYXVsdFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmlld0xldmVsOiB2aWV3TGV2ZWwsXG5cdFx0XHRcdFx0XHRcdFx0XHRvcHRpb25zOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Li4uKG9wdGlvbnM/Lm1hbmlmZXN0U2V0dGluZ3MgPz8ge30pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoOiBvcHRpb25zPy5tYWluQ29udGV4dFBhdGggPz8gXCIvUHJvZHVjdHNcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2aWV3VHlwZTogXCJKU1hcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2aWV3Q29udGVudDogb3B0aW9ucz8ucGFnZUNvbnRlbnQgPz8gRGVmYXVsdFBhZ2VDb250ZW50LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IG9wdGlvbnM/LmNvbnRlbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0cm91dGVzOiBbXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0cGF0dGVybjogXCI6P3F1ZXJ5OlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogXCJEZWZhdWx0XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHR0YXJnZXQ6IFwiRGVmYXVsdFwiXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcInNhcC5mZVwiOiBvcHRpb25zPy5mZU1hbmlmZXN0U2V0dGluZ3MgPz8ge31cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9KTtcblx0Y29uc3QgbW9ja0FwcENvbXBvbmVudCA9IChhd2FpdCBDb21wb25lbnQuY3JlYXRlKHsgbmFtZTogYHNhcC5mZS50ZXN0LiR7Z3VpZH1gLCBpZDogaWQgfSkpIGFzIEFwcENvbXBvbmVudDtcblxuXHRhd2FpdCBtb2NrQXBwQ29tcG9uZW50LmluaXRpYWxpemVkO1xuXHRjb25zdCB2ID0gYXdhaXQgKG1vY2tBcHBDb21wb25lbnQuZ2V0Um91dGVyKCkuZ2V0VGFyZ2V0KFwiRGVmYXVsdFwiKSBhcyB7IGxvYWQ/OiBGdW5jdGlvbiB9KS5sb2FkPy4oKTtcblx0cmV0dXJuIHsgYXBwQ29tcG9uZW50OiBtb2NrQXBwQ29tcG9uZW50LCB0ZW1wbGF0ZUNvbXBvbmVudDogdi5vYmplY3QgfTtcbn1cblxuLyoqXG4gKiBGaW5kIGFuIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gc2VsZWN0b3IuXG4gKiBAcGFyYW0gY29sbGVjdGlvblxuICogQHBhcmFtIHNlbGVjdG9yXG4gKiBAcmV0dXJucyBUaGUgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yIG9yIHVuZGVmaW5lZCBpZiBubyBlbGVtZW50IG1hdGNoZXMgdGhlIHNlbGVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWxlbWVudChjb2xsZWN0aW9uOiBIVE1MQ29sbGVjdGlvbiwgc2VsZWN0b3I6IChlbGVtZW50OiBIVE1MRWxlbWVudCkgPT4gYm9vbGVhbik6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjb2xsZWN0aW9uLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGNvbGxlY3Rpb24uaXRlbShpKSBhcyBIVE1MRWxlbWVudDtcblx0XHRpZiAoc2VsZWN0b3IoZWxlbWVudCkpIHtcblx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFdhaXQgZm9yIGFuIGV2ZW50IHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjb250aW51aW5nLlxuICogQHBhcmFtIGNvbnRyb2xcbiAqIEBwYXJhbSBldmVudE5hbWVcbiAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGV2ZW50IGlzIHJlY2VpdmVkXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yRXZlbnQ8VCBleHRlbmRzIHt9Pihjb250cm9sOiBFdmVudFByb3ZpZGVyLCBldmVudE5hbWU6IHN0cmluZyk6IFByb21pc2U8VUk1RXZlbnQ8VD4+IHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0Y29udHJvbC5hdHRhY2hFdmVudE9uY2UoZXZlbnROYW1lLCAoZXZlbnQ6IEV2ZW50KSA9PiB7XG5cdFx0XHRyZXNvbHZlKGV2ZW50IGFzIHVua25vd24gYXMgVUk1RXZlbnQ8VD4pO1xuXHRcdH0pO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUZWxsIHRoZSBiaW5kaW5nIHBhcnNlciB0byBrZWVwIHRoZSBiaW5kaW5nIHN0cmluZ3MgZm9yIHRlc3RpbmcuXG4gKiBAcGFyYW0gZW5hYmxlZFxuICovXG5leHBvcnQgZnVuY3Rpb24ga2VlcEJpbmRpbmdTdHJpbmdGb3JUZXN0KGVuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcblx0QmluZGluZ1BhcnNlci5fa2VlcEJpbmRpbmdTdHJpbmdzID0gZW5hYmxlZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbGF5Rm9yKGRlbGF5OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0c2V0VGltZW91dChyZXNvbHZlLCBkZWxheSk7XG5cdH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0VBeUVBQSxHQUFHLENBQUNDLFFBQVEsQ0FBQyxDQUFDLEVBQVMsa0NBQWtDLENBQUM7RUFDMURDLElBQUksQ0FBQ0MsVUFBVSxDQUFDLEtBQUssQ0FBQztFQUV0QixNQUFNQyxZQUFvQyxHQUFHO0lBQzVDQyxLQUFLLEVBQUUsZUFBZTtJQUN0QkMsVUFBVSxFQUFFLHFCQUFxQjtJQUNqQ0MsTUFBTSxFQUFFLGVBQWU7SUFDdkJDLElBQUksRUFBRSx1Q0FBdUM7SUFDN0NDLFVBQVUsRUFBRSxxQkFBcUI7SUFDakNDLFNBQVMsRUFBRSxrRUFBa0U7SUFDN0VDLEdBQUcsRUFBRSxrRUFBa0U7SUFDdkVDLFVBQVUsRUFBRSxrRUFBa0U7SUFDOUVDLE9BQU8sRUFBRSxzQkFBc0I7SUFDL0JDLFFBQVEsRUFBRSx3QkFBd0I7SUFDbENDLElBQUksRUFBRSxhQUFhO0lBQ25CQyxFQUFFLEVBQUUsV0FBVztJQUNmQyxDQUFDLEVBQUUsT0FBTztJQUNWQyxDQUFDLEVBQUUsb0JBQW9CO0lBQ3ZCQyxFQUFFLEVBQUUsV0FBVztJQUNmQyxhQUFhLEVBQUUsd0JBQXdCO0lBQ3ZDQyxHQUFHLEVBQUUsWUFBWTtJQUNqQkMsYUFBYSxFQUFFLDBCQUEwQjtJQUN6Q0MsUUFBUSxFQUFFLGtCQUFrQjtJQUM1QkMsUUFBUSxFQUFFLGtCQUFrQjtJQUM1QkMsQ0FBQyxFQUFFLGdCQUFnQjtJQUNuQkMsSUFBSSxFQUFFLFVBQVU7SUFDaEJDLGVBQWUsRUFBRSww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
@@ -19,6 +19,7 @@ import ManifestWrapper from "sap/fe/core/converters/ManifestWrapper";
19
19
  import { convertTypes, getInvolvedDataModelObjects } from "sap/fe/core/converters/MetaModelConverter";
20
20
  import type { IDiagnostics, PageContextPathTarget } from "sap/fe/core/converters/TemplateConverter";
21
21
  import type { IssueCategory, IssueSeverity } from "sap/fe/core/converters/helpers/IssueManager";
22
+ import ValueFormatter from "sap/fe/core/formatters/ValueFormatter";
22
23
  import type { SideEffectsService } from "sap/fe/core/services/SideEffectsServiceFactory";
23
24
  import SideEffectsFactory from "sap/fe/core/services/SideEffectsServiceFactory";
24
25
  import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
@@ -40,9 +41,9 @@ import XMLPreprocessor from "sap/ui/core/util/XMLPreprocessor";
40
41
  import Serializer from "sap/ui/core/util/serializer/Serializer";
41
42
  import Utils from "sap/ui/fl/Utils";
42
43
  import FlexState from "sap/ui/fl/apply/_internal/flexState/FlexState";
43
- import XmlPreprocessor from "sap/ui/fl/apply/_internal/preprocessors/XmlPreprocessor";
44
44
  import Loader from "sap/ui/fl/initial/_internal/Loader";
45
45
  import AppStorage from "sap/ui/fl/initial/_internal/Storage";
46
+ import XmlPreprocessor from "sap/ui/fl/initial/_internal/preprocessors/XmlPreprocessor";
46
47
  import type Context from "sap/ui/model/Context";
47
48
  import type MetaModel from "sap/ui/model/MetaModel";
48
49
  import JSONModel from "sap/ui/model/json/JSONModel";
@@ -543,7 +544,13 @@ export function evaluateBindingWithModel(
543
544
  modelContent: ModelContent,
544
545
  namedModelsContent?: { [modelName: string]: ModelContent }
545
546
  ): string {
546
- const bindingElement = BindingInfo.parse(bindingString);
547
+ const bindingElement = BindingInfo.parse(bindingString, null, false, false, false, false, {
548
+ ".": {
549
+ _formatters: {
550
+ ValueFormatter: ValueFormatter
551
+ }
552
+ }
553
+ });
547
554
  const text = new InvisibleText();
548
555
  text.bindProperty("text", bindingElement);
549
556
 
@@ -595,7 +602,8 @@ const applyFlexChanges = async function (flexChanges: { [x: string]: object[] },
595
602
  } as unknown as AppComponent;
596
603
  //fake changes
597
604
  jest.spyOn(AppStorage, "loadFlexData").mockReturnValue(Promise.resolve(changes));
598
- jest.spyOn(Loader, "loadFlexData").mockReturnValue(Promise.resolve(changes));
605
+ jest.spyOn(Loader, "getFlexData").mockReturnValue(Promise.resolve({ data: changes }));
606
+ jest.spyOn(Loader, "getCachedFlexData").mockReturnValue(changes);
599
607
 
600
608
  jest.spyOn(Component as unknown as { getComponentById: () => AppComponent }, "getComponentById").mockReturnValue(oAppComponent);
601
609
  jest.spyOn(Utils, "getAppComponentForControl").mockReturnValue(oAppComponent);
@@ -1111,6 +1119,9 @@ export async function initializeAppComponent(
1111
1119
  const id = options?.componentId ?? `sap.fe.test.${guid}`;
1112
1120
  const cdsContent = fs.readFileSync(cdsFile).toString();
1113
1121
  window.jestUI5.mockUrl(`/sap/fe/core/mock/${guid}/$metadata?sap-language=EN`, cdsContent);
1122
+ if (!options?.pageContent) {
1123
+ jest.spyOn(PageController.prototype, "_onInternalAfterBinding").mockImplementation(jest.fn());
1124
+ }
1114
1125
  class DefaultPageContent extends PageController {
1115
1126
  render() {
1116
1127
  return <Page></Page>;
@@ -22,7 +22,7 @@ sap.ui.define(["sap/ui/core/Lib", "sap/ui/core/library"], function (Library, _li
22
22
  controls: [],
23
23
  elements: [],
24
24
  // eslint-disable-next-line no-template-curly-in-string
25
- version: "1.140.0",
25
+ version: "1.141.0",
26
26
  noLibraryCSS: true
27
27
  });
28
28
  return thisLib;