@sapui5/sap.fe.templates 1.108.0 → 1.108.1

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.templates",
3
- "version": "1.108.0",
3
+ "version": "1.108.1",
4
4
  "description": "SAPUI5 Library sap.fe.templates",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "author": "SAP SE (https://www.sap.com)",
@@ -6,7 +6,7 @@
6
6
  <copyright>SAP UI development toolkit for HTML5 (SAPUI5)
7
7
  (c) Copyright 2009-2021 SAP SE. All rights reserved
8
8
  </copyright>
9
- <version>1.108.0</version>
9
+ <version>1.108.1</version>
10
10
 
11
11
  <documentation>UI5 library: sap.fe.templates</documentation>
12
12
 
@@ -49,12 +49,6 @@
49
49
  <control:CommandExecution execute=".handlers.onFilterSearch" command="FE_FilterSearch" />
50
50
  </template:then>
51
51
  </template:if>
52
- <control:CommandExecution
53
- execute=".handlers.handleShareShortcut.call($controller)"
54
- visible="{= ${fclhelper>/} ? ${fclhelper>/showShareIcon} : true }"
55
- enabled="{= ${fclhelper>/} ? ${fclhelper>/showShareIcon} : true }"
56
- command="Share"
57
- />
58
52
  </f:dependents>
59
53
  <f:title>
60
54
  <f:DynamicPageTitle stateChange=".handlers.onDynamicPageTitleStateChanged">
@@ -70,10 +70,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/ActionRu
70
70
  _initializerDefineProperty(_this, "massEdit", _descriptor10, _assertThisInitialized(_this));
71
71
 
72
72
  _this.handlers = {
73
- handleShareShortcut: function () {
74
- var shareAPI = this.getView().byId("fe::Share");
75
- shareAPI.openMenu();
76
- },
77
73
  onFilterSearch: function () {
78
74
  this._getFilterBarControl().triggerSearch();
79
75
  },
@@ -941,4 +937,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/ActionRu
941
937
  }), _applyDecoratedDescriptor(_class2.prototype, "getExtensionAPI", [_dec12, _dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "getExtensionAPI"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPageReady", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "onPageReady"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onViewNeedsRefresh", [_dec16, _dec17], Object.getOwnPropertyDescriptor(_class2.prototype, "onViewNeedsRefresh"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPendingFilters", [_dec18, _dec19], Object.getOwnPropertyDescriptor(_class2.prototype, "onPendingFilters"), _class2.prototype)), _class2)) || _class);
942
938
  return ListReportController;
943
939
  }, false);
944
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiQ29yZUxpYnJhcnkiLCJJbml0aWFsTG9hZE1vZGUiLCJMaXN0UmVwb3J0Q29udHJvbGxlciIsImRlZmluZVVJNUNsYXNzIiwidXNpbmdFeHRlbnNpb24iLCJJbnRlcm5hbFJvdXRpbmciLCJvdmVycmlkZSIsIm9uQWZ0ZXJCaW5kaW5nIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJfb25BZnRlckJpbmRpbmciLCJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldEVudGl0eVNldCIsImJhc2UiLCJnZXRDdXJyZW50RW50aXR5U2V0IiwiU2lkZUVmZmVjdHMiLCJJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSIsIlNoYXJlIiwiU2hhcmVPdmVycmlkZXMiLCJFZGl0RmxvdyIsIkVkaXRGbG93T3ZlcnJpZGVzIiwiVmlld1N0YXRlIiwiVmlld1N0YXRlT3ZlcnJpZGVzIiwiS1BJTWFuYWdlbWVudCIsIlBsYWNlaG9sZGVyIiwiTWFzc0VkaXQiLCJwdWJsaWNFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsInByaXZhdGVFeHRlbnNpb24iLCJleHRlbnNpYmxlIiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsImhhbmRsZXJzIiwiaGFuZGxlU2hhcmVTaG9ydGN1dCIsInNoYXJlQVBJIiwiYnlJZCIsIm9wZW5NZW51Iiwib25GaWx0ZXJTZWFyY2giLCJfZ2V0RmlsdGVyQmFyQ29udHJvbCIsInRyaWdnZXJTZWFyY2giLCJvbkZpbHRlcnNDaGFuZ2VkIiwib0V2ZW50Iiwib0ZpbHRlckJhciIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwib25QZW5kaW5nRmlsdGVycyIsInNldFByb3BlcnR5IiwiZ2V0QXNzaWduZWRGaWx0ZXJzVGV4dCIsImZpbHRlcnNUZXh0IiwiZ2V0UGFyYW1ldGVyIiwib25WYXJpYW50U2VsZWN0ZWQiLCJvVk0iLCJnZXRTb3VyY2UiLCJjdXJyZW50VmFyaWFudEtleSIsIm9NdWx0aU1vZGVDb250cm9sIiwiX2dldE11bHRpTW9kZUNvbnRyb2wiLCJpbnZhbGlkYXRlQ29udGVudCIsInNldEZyZWV6ZUNvbnRlbnQiLCJzZXRUaW1lb3V0IiwiX3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoIiwiX2dldEFwcGx5QXV0b21hdGljYWxseU9uVmFyaWFudCIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwib25WYXJpYW50U2F2ZWQiLCJvblNlYXJjaCIsIm9NZGNDaGFydCIsImdldENoYXJ0Q29udHJvbCIsImJIaWRlRHJhZnQiLCJGaWx0ZXJVdGlscyIsImdldEVkaXRTdGF0ZUlzSGlkZURyYWZ0IiwiZ2V0Q29uZGl0aW9ucyIsIl91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzIiwib1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dCIsInNUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiZ2V0UHJvcGVydHkiLCJnZXRQYXRoIiwiQ2hhcnQiLCJoYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzIiwiVGFibGUiLCJoYXNQZW5kaW5nVGFibGVDaGFuZ2VzIiwiU3RhdGVVdGlsIiwicmV0cmlldmVFeHRlcm5hbFN0YXRlIiwidGhlbiIsIm9FeHRlcm5hbFN0YXRlIiwiZmlsdGVyQmFyQ29uZGl0aW9ucyIsImZpbHRlciIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJnZXRWaWV3RGF0YSIsImxpdmVNb2RlIiwic3lzdGVtIiwicGhvbmUiLCJvRHluYW1pY1BhZ2UiLCJfZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sIiwic2V0SGVhZGVyRXhwYW5kZWQiLCJvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQiLCJvQ29udHJvbGxlciIsInNPdXRib3VuZFRhcmdldCIsIm9Db250ZXh0Iiwic0NyZWF0ZVBhdGgiLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwib25DaGFydFNlbGVjdGlvbkNoYW5nZWQiLCJnZXRDb250ZW50Iiwib1RhYmxlIiwiX2dldFRhYmxlIiwiYURhdGEiLCJDaGFydFJ1bnRpbWUiLCJmblVwZGF0ZUNoYXJ0IiwiQ2hhcnRVdGlscyIsInNldENoYXJ0RmlsdGVycyIsInJlYmluZCIsIm9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZCIsInNTZWxlY3RlZEtleSIsIm1QYXJhbWV0ZXJzIiwia2V5Iiwib0NoYXJ0Iiwib1NlZ21lbnRlZEJ1dHRvbkRlbGVnYXRlIiwib25BZnRlclJlbmRlcmluZyIsImFJdGVtcyIsIm9TZWdtZW50ZWRCdXR0b24iLCJnZXRJdGVtcyIsImZvckVhY2giLCJvSXRlbSIsImdldEtleSIsImZvY3VzIiwicmVtb3ZlRXZlbnREZWxlZ2F0ZSIsIl9nZXRTZWdtZW50ZWRCdXR0b24iLCJhZGRFdmVudERlbGVnYXRlIiwiX3VwZGF0ZVRhYmxlIiwiX3VwZGF0ZUNoYXJ0IiwiSHlicmlkIiwib25GaWx0ZXJzU2VnbWVudGVkQnV0dG9uUHJlc3NlZCIsImlzQ29tcGFjdCIsInNldFZpc2libGUiLCJfZ2V0VmlzdWFsRmlsdGVyQmFyQ29udHJvbCIsIm9uU3RhdGVDaGFuZ2UiLCJvbkR5bmFtaWNQYWdlVGl0bGVTdGF0ZUNoYW5nZWQiLCJmaWx0ZXJCYXIiLCJnZXRTZWdtZW50ZWRCdXR0b24iLCJmb3JtYXR0ZXJzIiwic2V0QUxQQ29udHJvbE1lc3NhZ2VTdHJpcCIsImFJZ25vcmVkRmllbGRzIiwiYklzQ2hhcnQiLCJvQXBwbHlTdXBwb3J0ZWQiLCJzVGV4dCIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsImFJZ25vcmVkTGFiZWxzIiwiTWVzc2FnZVN0cmlwIiwiZ2V0TGFiZWxzIiwiZGF0YSIsIm9SZXNvdXJjZUJ1bmRsZSIsImJJc1NlYXJjaElnbm9yZWQiLCJlbmFibGVTZWFyY2giLCJnZXRBTFBUZXh0IiwiZ2V0VGV4dCIsIkRlbGVnYXRlVXRpbCIsImdldExvY2FsaXplZFRleHQiLCJleHRlbnNpb25BUEkiLCJFeHRlbnNpb25BUEkiLCJvbkluaXQiLCJQYWdlQ29udHJvbGxlciIsInByb3RvdHlwZSIsImFwcGx5IiwiX2hhc011bHRpVmlzdWFsaXphdGlvbnMiLCJhbHBDb250ZW50VmlldyIsIl9nZXREZWZhdWx0UGF0aCIsImRlc2t0b3AiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRSb3V0ZXJQcm94eSIsIndhaXRGb3JSb3V0ZU1hdGNoQmVmb3JlTmF2aWdhdGlvbiIsIl9zZXRJbml0TG9hZCIsIm9uRXhpdCIsImRlc3Ryb3kiLCJhVGFibGVzIiwiX2dldENvbnRyb2xzIiwiRWRpdFN0YXRlIiwiaXNFZGl0U3RhdGVEaXJ0eSIsIm9UYWJsZUJpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwiQ29tbW9uVXRpbHMiLCJfaXNGY2xFbmFibGVkIiwicmVmcmVzaCIsInNVcGRhdGVUaW1lciIsImZuVXBkYXRlVGFibGVBY3Rpb25zIiwiX3VwZGF0ZVRhYmxlQWN0aW9ucyIsImRldGFjaERhdGFSZWNlaXZlZCIsImF0dGFjaERhdGFSZWNlaXZlZCIsInNldEVkaXRTdGF0ZVByb2Nlc3NlZCIsInBhZ2VSZWFkeSIsIndhaXRGb3IiLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJhcHBseUFwcFN0YXRlIiwib25CZWZvcmVSZW5kZXJpbmciLCJnZXRNb2RlbCIsImdldFJlc291cmNlQnVuZGxlIiwicmVzcG9uc2UiLCJzRW50aXR5U2V0IiwiZW50aXR5U2V0IiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJ1bmRlZmluZWQiLCJzZXROb0RhdGEiLCJvblBhZ2VSZWFkeSIsImZvcmNlRm9jdXMiLCJfc2V0SW5pdGlhbEZvY3VzIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInNldEJhY2tOYXZpZ2F0aW9uIiwib25WaWV3TmVlZHNSZWZyZXNoIiwic2xpY2UiLCJhSUJOQWN0aW9ucyIsImdldElCTkFjdGlvbnMiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiSlNPTiIsInBhcnNlIiwiQ29tbW9uSGVscGVyIiwicGFyc2VDdXN0b21EYXRhIiwiZ2V0Q3VzdG9tRGF0YSIsImFTZWxlY3RlZENvbnRleHRzIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsIlRhYmxlSGVscGVyIiwiaGFuZGxlVGFibGVEZWxldGVFbmFibGVtZW50Rm9yU2lkZUVmZmVjdHMiLCJBY3Rpb25SdW50aW1lIiwic2V0QWN0aW9uRW5hYmxlbWVudCIsInVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5IiwiX3Njcm9sbFRhYmxlc1RvUm93Iiwic1Jvd1BhdGgiLCJUYWJsZVNjcm9sbGVyIiwic2Nyb2xsVGFibGVUb1JvdyIsImR5bmFtaWNQYWdlIiwiaXNIZWFkZXJFeHBhbmRlZCIsImdldEhlYWRlckV4cGFuZGVkIiwiZ2V0U2hvd01lc3NhZ2VzIiwic2V0U2hvd01lc3NhZ2VzIiwiZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkIiwiZ2V0RmlsdGVySXRlbXMiLCJmaW5kIiwib0ZpbHRlckl0ZW0iLCJnZXRSZXF1aXJlZCIsIl9pc0luaXRMb2FkRW5hYmxlZCIsIl9nZXRGaWx0ZXJCYXJDb250cm9sSWQiLCJmb2N1c1JvdyIsIl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbiIsIm9NYW5pZmVzdEVudHJ5IiwiZ2V0TWFuaWZlc3RFbnRyeSIsInRpdGxlIiwic3VidGl0bGUiLCJhcHBTdWJUaXRsZSIsImludGVudCIsImljb24iLCJfZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sSWQiLCJfZ2V0QWRhcHRhdGlvbkZpbHRlckJhckNvbnRyb2wiLCJhZGFwdGF0aW9uRmlsdGVyQmFyIiwiZ2V0SW5idWlsdEZpbHRlciIsImdldFBhcmVudCIsInNDb250cm9sIiwic1NlZ21lbnRlZEJ1dHRvbklkIiwiX2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkiLCJzUGF0aCIsImNvbnRyb2xJZCIsIl9nZXRQYWdlTW9kZWwiLCJwYWdlQ29tcG9uZW50IiwiQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnRGb3IiLCJzVmlzdWFsRmlsdGVyQmFySWQiLCJTdGFibGVJZEhlbHBlciIsImdlbmVyYXRlIiwiX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sIiwiX2lzTXVsdGlNb2RlIiwib0NvbnRyb2wiLCJnZXRTZWxlY3RlZElubmVyQ29udHJvbCIsImNvbnRlbnQiLCJpc0EiLCJzS2V5IiwiYUNvbnRyb2xzIiwib1RhYk11bHRpTW9kZSIsImluZGV4T2YiLCJwdXNoIiwiZGVmYXVsdFBhdGgiLCJMaXN0UmVwb3J0VGVtcGxhdGluZyIsImdldERlZmF1bHRQYXRoIiwiaW5pdExvYWRNb2RlIiwiaW5pdGlhbExvYWQiLCJFbmFibGVkIiwiX2Rpc2FibGVJbml0TG9hZCIsInNldFN1c3BlbmRTZWxlY3Rpb24iLCJfYXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQiLCJ2YXJpYW50TWFuYWdlbWVudElkIiwiZ2V0VmFyaWFudEJhY2tSZWZlcmVuY2UiLCJ2YXJpYW50TWFuYWdlbWVudCIsInJlZ2lzdGVyQXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQiLCJiaW5kIiwiX3NldFNoYXJlTW9kZWwiLCJmbkdldFVzZXIiLCJPYmplY3RQYXRoIiwiZ2V0Iiwib1NoYXJlSW5mbyIsImJvb2ttYXJrVGl0bGUiLCJkb2N1bWVudCIsImJvb2ttYXJrQ3VzdG9tVXJsIiwic0hhc2giLCJoYXNoZXIiLCJnZXRIYXNoIiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwiaXNTaGFyZUluSmFtQWN0aXZlIiwiaXNKYW1BY3RpdmUiLCJvVGVtcGxhdGVQcml2YXRlTW9kZWwiLCJnZXRPd25lckNvbXBvbmVudCIsIm1DYWNoZSIsImlnbm9yZWRGaWVsZHMiLCJhQ2hhcnRzIiwic0NoYXJ0RW50aXR5UGF0aCIsInNDaGFydEVudGl0eVNldCIsInNDYWNoZUtleSIsImdldE5vdEFwcGxpY2FibGVGaWx0ZXJzIiwiX2lzRmlsdGVyQmFySGlkZGVuIiwiaGlkZUZpbHRlckJhciIsIlZhcmlhbnRNYW5hZ2VtZW50IiwidmFyaWFudHMiLCJnZXRWYXJpYW50cyIsImN1cnJlbnRWYXJpYW50IiwidmFyaWFudCIsImV4ZWN1dGVPblNlbGVjdCIsIkF1dG8iLCJnZXRTdGFuZGFyZFZhcmlhbnRLZXkiLCJnZXRDdXJyZW50VmFyaWFudEtleSIsIm9Db25kaXRpb25zIiwic3RhcnRzV2l0aCIsInN0YW5kYXJkVmFyaWFudCIsImlzVGFibGVCb3VuZCIsIm9Jbm5lckNoYXJ0IiwiZ2V0Q29udHJvbERlbGVnYXRlIiwiX2dldENoYXJ0IiwiaXNCb3VuZCIsImdldEJpbmRpbmdJbmZvIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJMaXN0UmVwb3J0Q29udHJvbGxlci5jb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBPYmplY3RQYXRoIGZyb20gXCJzYXAvYmFzZS91dGlsL09iamVjdFBhdGhcIjtcbmltcG9ydCB0eXBlIER5bmFtaWNQYWdlIGZyb20gXCJzYXAvZi9EeW5hbWljUGFnZVwiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBFZGl0RmxvdyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvRWRpdEZsb3dcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgS1BJTWFuYWdlbWVudCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvS1BJTWFuYWdlbWVudFwiO1xuaW1wb3J0IE1hc3NFZGl0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NYXNzRWRpdFwiO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QbGFjZWhvbGRlclwiO1xuaW1wb3J0IFNoYXJlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaGFyZVwiO1xuaW1wb3J0IFNpZGVFZmZlY3RzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaWRlRWZmZWN0c1wiO1xuaW1wb3J0IFZpZXdTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0ZpbHRlckJhclwiO1xuaW1wb3J0IHtcblx0ZGVmaW5lVUk1Q2xhc3MsXG5cdGV4dGVuc2libGUsXG5cdGZpbmFsRXh0ZW5zaW9uLFxuXHRwcml2YXRlRXh0ZW5zaW9uLFxuXHRwdWJsaWNFeHRlbnNpb24sXG5cdHVzaW5nRXh0ZW5zaW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEVkaXRTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9FZGl0U3RhdGVcIjtcbmltcG9ydCBNZXNzYWdlU3RyaXAgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWVzc2FnZVN0cmlwXCI7XG5pbXBvcnQgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgKiBhcyBTdGFibGVJZEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IENvcmVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ2hhcnRSdW50aW1lIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0NoYXJ0UnVudGltZVwiO1xuaW1wb3J0IENoYXJ0VXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQ2hhcnRVdGlsc1wiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCBEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgRmlsdGVyVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyL0ZpbHRlclV0aWxzXCI7XG5pbXBvcnQgU2hhcmVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3Mvc2hhcmUvU2hhcmVBUElcIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IE11bHRpcGxlTW9kZUNvbnRyb2wgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9jb250cm9scy9NdWx0aXBsZU1vZGVDb250cm9sXCI7XG5pbXBvcnQgRXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgRWRpdEZsb3dPdmVycmlkZXMgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvUm9vdENvbnRhaW5lci9vdmVycmlkZXMvRWRpdEZsb3dcIjtcbmltcG9ydCBUYWJsZVNjcm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL1RhYmxlU2Nyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFNlZ21lbnRlZEJ1dHRvbiBmcm9tIFwic2FwL20vU2VnbWVudGVkQnV0dG9uXCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgeyBzeXN0ZW0gfSBmcm9tIFwic2FwL3VpL0RldmljZVwiO1xuaW1wb3J0IFN0YXRlVXRpbCBmcm9tIFwic2FwL3VpL21kYy9wMTNuL1N0YXRlVXRpbFwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvcmVzb3VyY2UvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IGhhc2hlciBmcm9tIFwic2FwL3VpL3RoaXJkcGFydHkvaGFzaGVyXCI7XG5pbXBvcnQgdHlwZSB7IFY0Q29udGV4dCB9IGZyb20gXCJ0eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCAqIGFzIExpc3RSZXBvcnRUZW1wbGF0aW5nIGZyb20gXCIuL0xpc3RSZXBvcnRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IFNoYXJlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvVmlld1N0YXRlXCI7XG5cbmNvbnN0IFRlbXBsYXRlQ29udGVudFZpZXcgPSBDb3JlTGlicmFyeS5UZW1wbGF0ZUNvbnRlbnRWaWV3LFxuXHRJbml0aWFsTG9hZE1vZGUgPSBDb3JlTGlicmFyeS5Jbml0aWFsTG9hZE1vZGU7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydC5MaXN0UmVwb3J0Q29udHJvbGxlclwiKVxuY2xhc3MgTGlzdFJlcG9ydENvbnRyb2xsZXIgZXh0ZW5kcyBQYWdlQ29udHJvbGxlciB7XG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRJbnRlcm5hbFJvdXRpbmcub3ZlcnJpZGUoe1xuXHRcdFx0b25BZnRlckJpbmRpbmc6IGZ1bmN0aW9uICh0aGlzOiBJbnRlcm5hbFJvdXRpbmcpIHtcblx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcikuX29uQWZ0ZXJCaW5kaW5nKCk7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfcm91dGluZyE6IEludGVybmFsUm91dGluZztcblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKHtcblx0XHRcdGdldEVudGl0eVNldDogZnVuY3Rpb24gKHRoaXM6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdHJldHVybiAodGhpcy5iYXNlIGFzIExpc3RSZXBvcnRDb250cm9sbGVyKS5nZXRDdXJyZW50RW50aXR5U2V0KCk7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfaW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cdEB1c2luZ0V4dGVuc2lvbihTaWRlRWZmZWN0cylcblx0c2lkZUVmZmVjdHMhOiBTaWRlRWZmZWN0cztcblxuXHRAdXNpbmdFeHRlbnNpb24oSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlKSlcblx0aW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihTaGFyZS5vdmVycmlkZShTaGFyZU92ZXJyaWRlcykpXG5cdHNoYXJlITogU2hhcmU7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKEVkaXRGbG93Lm92ZXJyaWRlKEVkaXRGbG93T3ZlcnJpZGVzKSlcblx0ZWRpdEZsb3chOiBFZGl0RmxvdztcblxuXHRAdXNpbmdFeHRlbnNpb24oVmlld1N0YXRlLm92ZXJyaWRlKFZpZXdTdGF0ZU92ZXJyaWRlcykpXG5cdHZpZXdTdGF0ZSE6IFZpZXdTdGF0ZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oS1BJTWFuYWdlbWVudClcblx0a3BpTWFuYWdlbWVudCE6IEtQSU1hbmFnZW1lbnQ7XG5cdEB1c2luZ0V4dGVuc2lvbihQbGFjZWhvbGRlcilcblx0cGxhY2Vob2xkZXIhOiBQbGFjZWhvbGRlcjtcblx0QHVzaW5nRXh0ZW5zaW9uKE1hc3NFZGl0KVxuXHRtYXNzRWRpdCE6IE1hc3NFZGl0O1xuXHRwcm90ZWN0ZWQgZXh0ZW5zaW9uQVBJPzogRXh0ZW5zaW9uQVBJO1xuXHRwcml2YXRlIGZpbHRlckJhckNvbmRpdGlvbnM/OiBhbnk7XG5cdHByaXZhdGUgc1VwZGF0ZVRpbWVyPzogYW55O1xuXHRwcml2YXRlIG9SZXNvdXJjZUJ1bmRsZT86IFJlc291cmNlQnVuZGxlO1xuXHRwcml2YXRlIGhhc1BlbmRpbmdDaGFydENoYW5nZXM/OiBib29sZWFuO1xuXHRwcml2YXRlIGhhc1BlbmRpbmdUYWJsZUNoYW5nZXM/OiBib29sZWFuO1xuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRFeHRlbnNpb25BUEkoKTogRXh0ZW5zaW9uQVBJIHtcblx0XHRpZiAoIXRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHR0aGlzLmV4dGVuc2lvbkFQSSA9IG5ldyBFeHRlbnNpb25BUEkodGhpcyk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmV4dGVuc2lvbkFQSTtcblx0fVxuXG5cdG9uSW5pdCgpIHtcblx0XHRQYWdlQ29udHJvbGxlci5wcm90b3R5cGUub25Jbml0LmFwcGx5KHRoaXMpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCB0cnVlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJhcHBsaWVkRmlsdGVyc1wiLCBcIlwiKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoaWRlRHJhZnRJbmZvXCIsIGZhbHNlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJ1b21cIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNjYWxlZmFjdG9yXCIsIHt9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzY2FsZWZhY3Rvck51bWJlclwiLCB7fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3VycmVuY3lcIiwge30pO1xuXG5cdFx0aWYgKHRoaXMuX2hhc011bHRpVmlzdWFsaXphdGlvbnMoKSkge1xuXHRcdFx0bGV0IGFscENvbnRlbnRWaWV3ID0gdGhpcy5fZ2V0RGVmYXVsdFBhdGgoKTtcblx0XHRcdGlmICghc3lzdGVtLmRlc2t0b3AgJiYgYWxwQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuSHlicmlkKSB7XG5cdFx0XHRcdGFscENvbnRlbnRWaWV3ID0gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydDtcblx0XHRcdH1cblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImFscENvbnRlbnRWaWV3XCIsIGFscENvbnRlbnRWaWV3KTtcblx0XHR9XG5cblx0XHQvLyBTdG9yZSBjb25kaXRpb25zIGZyb20gZmlsdGVyIGJhclxuXHRcdC8vIHRoaXMgaXMgbGF0ZXIgdXNlZCBiZWZvcmUgbmF2aWdhdGlvbiB0byBnZXQgY29uZGl0aW9ucyBhcHBsaWVkIG9uIHRoZSBmaWx0ZXIgYmFyXG5cdFx0dGhpcy5maWx0ZXJCYXJDb25kaXRpb25zID0ge307XG5cblx0XHQvLyBBcyBBcHBTdGF0ZUhhbmRsZXIuYXBwbHlBcHBTdGF0ZSB0cmlnZ2VycyBhIG5hdmlnYXRpb24gd2Ugd2FudCB0byBtYWtlIHN1cmUgaXQgd2lsbFxuXHRcdC8vIGhhcHBlbiBhZnRlciB0aGUgcm91dGVNYXRjaCBldmVudCBoYXMgYmVlbiBwcm9jZXNzZWQgKG90aGVyd2lzZSB0aGUgcm91dGVyIGdldHMgYnJva2VuKVxuXHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGVyUHJveHkoKS53YWl0Rm9yUm91dGVNYXRjaEJlZm9yZU5hdmlnYXRpb24oKTtcblxuXHRcdC8vIENvbmZpZ3VyZSB0aGUgaW5pdGlhbCBsb2FkIHNldHRpbmdzXG5cdFx0dGhpcy5fc2V0SW5pdExvYWQoKTtcblx0fVxuXG5cdG9uRXhpdCgpIHtcblx0XHRkZWxldGUgdGhpcy5maWx0ZXJCYXJDb25kaXRpb25zO1xuXHRcdGlmICh0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0dGhpcy5leHRlbnNpb25BUEkuZGVzdHJveSgpO1xuXHRcdH1cblx0XHRkZWxldGUgdGhpcy5leHRlbnNpb25BUEk7XG5cdH1cblxuXHRfb25BZnRlckJpbmRpbmcoKSB7XG5cdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2dldENvbnRyb2xzKFwidGFibGVcIik7XG5cdFx0aWYgKEVkaXRTdGF0ZS5pc0VkaXRTdGF0ZURpcnR5KCkpIHtcblx0XHRcdHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKT8uaW52YWxpZGF0ZUNvbnRlbnQoKTtcblx0XHRcdGNvbnN0IG9UYWJsZUJpbmRpbmcgPSB0aGlzLl9nZXRUYWJsZSgpPy5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRpZiAob1RhYmxlQmluZGluZykge1xuXHRcdFx0XHRpZiAoQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0VmlldygpKS5faXNGY2xFbmFibGVkKCkpIHtcblx0XHRcdFx0XHQvLyB0aGVyZSBpcyBhbiBpc3N1ZSBpZiB3ZSB1c2UgYSB0aW1lb3V0IHdpdGggYSBrZXB0IGFsaXZlIGNvbnRleHQgdXNlZCBvbiBhbm90aGVyIHBhZ2Vcblx0XHRcdFx0XHRvVGFibGVCaW5kaW5nLnJlZnJlc2goKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAoIXRoaXMuc1VwZGF0ZVRpbWVyKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNVcGRhdGVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRvVGFibGVCaW5kaW5nLnJlZnJlc2goKTtcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIHRoaXMuc1VwZGF0ZVRpbWVyO1xuXHRcdFx0XHRcdFx0fSwgMCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gVXBkYXRlIGFjdGlvbiBlbmFibGVtZW50IGFuZCB2aXNpYmlsaXR5IHVwb24gdGFibGUgZGF0YSB1cGRhdGUuXG5cdFx0XHRcdFx0Y29uc3QgZm5VcGRhdGVUYWJsZUFjdGlvbnMgPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVUYWJsZUFjdGlvbnMoYVRhYmxlcyk7XG5cdFx0XHRcdFx0XHRvVGFibGVCaW5kaW5nLmRldGFjaERhdGFSZWNlaXZlZChmblVwZGF0ZVRhYmxlQWN0aW9ucyk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRvVGFibGVCaW5kaW5nLmF0dGFjaERhdGFSZWNlaXZlZChmblVwZGF0ZVRhYmxlQWN0aW9ucyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdEVkaXRTdGF0ZS5zZXRFZGl0U3RhdGVQcm9jZXNzZWQoKTtcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMuc1VwZGF0ZVRpbWVyKSB7XG5cdFx0XHR0aGlzLl91cGRhdGVUYWJsZUFjdGlvbnMoYVRhYmxlcyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5wYWdlUmVhZHkud2FpdEZvcih0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldEFwcFN0YXRlSGFuZGxlcigpLmFwcGx5QXBwU3RhdGUoKSk7XG5cdH1cblxuXHRvbkJlZm9yZVJlbmRlcmluZygpIHtcblx0XHRQYWdlQ29udHJvbGxlci5wcm90b3R5cGUub25CZWZvcmVSZW5kZXJpbmcuYXBwbHkodGhpcyk7XG5cdH1cblxuXHRvbkFmdGVyUmVuZGVyaW5nKCkge1xuXHRcdCgodGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJzYXAuZmUuaTE4blwiKSBhcyBSZXNvdXJjZU1vZGVsKS5nZXRSZXNvdXJjZUJ1bmRsZSgpIGFzIFByb21pc2U8UmVzb3VyY2VCdW5kbGU+KVxuXHRcdFx0LnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcblx0XHRcdFx0dGhpcy5vUmVzb3VyY2VCdW5kbGUgPSByZXNwb25zZTtcblx0XHRcdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2dldENvbnRyb2xzKCkgYXMgVGFibGVbXTtcblx0XHRcdFx0Y29uc3Qgc0VudGl0eVNldCA9ICh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkuZW50aXR5U2V0O1xuXHRcdFx0XHRjb25zdCBzVGV4dCA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFx0XHRcdFwiVF9UQUJMRV9BTkRfQ0hBUlRfTk9fREFUQV9URVhUXCIsXG5cdFx0XHRcdFx0dGhpcy5vUmVzb3VyY2VCdW5kbGUgYXMgUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHNFbnRpdHlTZXRcblx0XHRcdFx0KTtcblx0XHRcdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlKSB7XG5cdFx0XHRcdFx0b1RhYmxlLnNldE5vRGF0YShzVGV4dCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgcmVzb3VyY2UgYnVuZGxlXCIsIG9FcnJvcik7XG5cdFx0XHR9KTtcblx0fVxuXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uUGFnZVJlYWR5KG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRpZiAobVBhcmFtZXRlcnMuZm9yY2VGb2N1cykge1xuXHRcdFx0dGhpcy5fc2V0SW5pdGlhbEZvY3VzKCk7XG5cdFx0fVxuXHRcdC8vIFJlbW92ZSB0aGUgaGFuZGxlciBvbiBiYWNrIG5hdmlnYXRpb24gdGhhdCBkaXNwbGF5cyBEcmFmdCBjb25maXJtYXRpb25cblx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKS5zZXRCYWNrTmF2aWdhdGlvbih1bmRlZmluZWQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgY29udGVudCBvZiBhIGxpc3QgcmVwb3J0IHZpZXcgbmVlZHMgdG8gYmUgcmVmcmVzaGVkLlxuXHQgKiBUaGlzIGhhcHBlbnMgZWl0aGVyIHdoZW4gdGhlcmUgaXMgYSBjaGFuZ2Ugb24gdGhlIEZpbHRlckJhciBhbmQgdGhlIHNlYXJjaCBpcyB0cmlnZ2VyZWQsXG5cdCAqIG9yIHdoZW4gYSB0YWIgd2l0aCBjdXN0b20gY29udGVudCBpcyBzZWxlY3RlZC5cblx0ICogVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbiBpbiBjYXNlIG9mIGN1c3RvbWl6YXRpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVycyBNYXAgY29udGFpbmluZyB0aGUgZmlsdGVyIGNvbmRpdGlvbnMgb2YgdGhlIEZpbHRlckJhciwgdGhlIGN1cnJlbnRUYWJJRFxuXHQgKiBhbmQgdGhlIHZpZXcgcmVmcmVzaCBjYXVzZSAodGFiQ2hhbmdlZCBvciBzZWFyY2gpLlxuXHQgKiBUaGUgbWFwIGxvb2tzIGxpa2UgdGhpczpcblx0ICogPGNvZGU+PHByZT5cblx0ICogXHR7XG5cdCAqIFx0XHRmaWx0ZXJDb25kaXRpb25zOiB7XG5cdCAqIFx0XHRcdENvdW50cnk6IFtcblx0ICogXHRcdFx0XHR7XG5cdCAqIFx0XHRcdFx0XHRvcGVyYXRvcjogXCJFUVwiXG5cdCAqXHRcdFx0XHRcdHZhbGlkYXRlZDogXCJOb3RWYWxpZGF0ZWRcIlxuXHQgKlx0XHRcdFx0XHR2YWx1ZXM6IFtcIkdlcm1hbnlcIiwgLi4uXVxuXHQgKiBcdFx0XHRcdH0sXG5cdCAqIFx0XHRcdFx0Li4uXG5cdCAqIFx0XHRcdF1cblx0ICogXHRcdFx0Li4uXG5cdCAqIFx0XHR9LFxuXHQgKlx0XHRjdXJyZW50VGFiSWQ6IFwiZmU6OkN1c3RvbVRhYjo6dGFiMVwiLFxuXHQgKlx0XHRyZWZyZXNoQ2F1c2U6IFwidGFiQ2hhbmdlZFwiIHwgXCJzZWFyY2hcIlxuXHQgKlx0fVxuXHQgKiA8L3ByZT48L2NvZGU+XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRvblZpZXdOZWVkc1JlZnJlc2gobVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdC8qIFRvIGJlIG92ZXJyaWRlbiAqL1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCBjYWxsZWQgd2hlbiBhIGZpbHRlciBvciBzZWFyY2ggdmFsdWUgaGFzIGJlZW4gY2hhbmdlZCBpbiB0aGUgRmlsdGVyQmFyLFxuXHQgKiBidXQgaGFzIG5vdCBiZWVuIHZhbGlkYXRlZCB5ZXQgYnkgdGhlIGVuZCB1c2VyICh3aXRoIHRoZSAnR28nIG9yICdTZWFyY2gnIGJ1dHRvbikuXG5cdCAqIFR5cGljYWxseSwgdGhlIGNvbnRlbnQgb2YgdGhlIGN1cnJlbnQgdGFiIGlzIGdyZXllZCBvdXQgdW50aWwgdGhlIGZpbHRlcnMgYXJlIHZhbGlkYXRlZC5cblx0ICogVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbiBpbiBjYXNlIG9mIGN1c3RvbWl6YXRpb24uXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0b25QZW5kaW5nRmlsdGVycygpIHtcblx0XHQvKiBUbyBiZSBvdmVycmlkZW4gKi9cblx0fVxuXG5cdGdldEN1cnJlbnRFbnRpdHlTZXQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFRhYmxlKCk/LmRhdGEoXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKS5zbGljZSgxKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpbml0aWF0ZXMgdGhlIHVwZGF0ZSBvZiB0aGUgZW5hYmxlZCBzdGF0ZSBvZiB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCB0aGUgdmlzaWJsZSBzdGF0ZSBvZiB0aGUgRGF0YUZpZWxkRm9ySUJOIGJ1dHRvbnMuXG5cdCAqXG5cdCAqIEBwYXJhbSBhVGFibGVzIEFycmF5IG9mIHRhYmxlcyBpbiB0aGUgbGlzdCByZXBvcnRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF91cGRhdGVUYWJsZUFjdGlvbnMoYVRhYmxlczogYW55KSB7XG5cdFx0bGV0IGFJQk5BY3Rpb25zOiBhbnlbXSA9IFtdO1xuXHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBhbnkpIHtcblx0XHRcdGFJQk5BY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvVGFibGUsIGFJQk5BY3Rpb25zKTtcblx0XHRcdC8vIFVwZGF0ZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgRGF0YUZpZWxkRm9yQWN0aW9uIGJ1dHRvbnMgb24gdGFibGUgdG9vbGJhclxuXHRcdFx0Ly8gVGhlIHNhbWUgaXMgYWxzbyBwZXJmb3JtZWQgb24gVGFibGUgc2VsZWN0aW9uQ2hhbmdlIGV2ZW50XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSxcblx0XHRcdFx0b0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IEpTT04ucGFyc2UoXG5cdFx0XHRcdFx0Q29tbW9uSGVscGVyLnBhcnNlQ3VzdG9tRGF0YShEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YShvVGFibGUsIFwib3BlcmF0aW9uQXZhaWxhYmxlTWFwXCIpKVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRhU2VsZWN0ZWRDb250ZXh0cyA9IG9UYWJsZS5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIiwgYVNlbGVjdGVkQ29udGV4dHMpO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIGFTZWxlY3RlZENvbnRleHRzLmxlbmd0aCk7XG5cdFx0XHRUYWJsZUhlbHBlci5oYW5kbGVUYWJsZURlbGV0ZUVuYWJsZW1lbnRGb3JTaWRlRWZmZWN0cyhvVGFibGUsIG9JbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0LCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBhU2VsZWN0ZWRDb250ZXh0cywgXCJ0YWJsZVwiKTtcblx0XHR9KTtcblx0XHRDb21tb25VdGlscy51cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eShhSUJOQWN0aW9ucywgdGhpcy5nZXRWaWV3KCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHNjcm9sbHMgdG8gYSBzcGVjaWZpYyByb3cgb24gYWxsIHRoZSBhdmFpbGFibGUgdGFibGVzLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0Lkxpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXIjX3Njcm9sbFRhYmxlc1RvUm93XG5cdCAqIEBwYXJhbSBzUm93UGF0aCBUaGUgcGF0aCBvZiB0aGUgdGFibGUgcm93IGNvbnRleHQgdG8gYmUgc2Nyb2xsZWQgdG9cblx0ICovXG5cdF9zY3JvbGxUYWJsZXNUb1JvdyhzUm93UGF0aDogc3RyaW5nKSB7XG5cdFx0dGhpcy5fZ2V0Q29udHJvbHMoXCJ0YWJsZVwiKS5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IGFueSkge1xuXHRcdFx0VGFibGVTY3JvbGxlci5zY3JvbGxUYWJsZVRvUm93KG9UYWJsZSwgc1Jvd1BhdGgpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHNldCB0aGUgaW5pdGlhbCBmb2N1cyB3aXRoaW4gdGhlIExpc3QgUmVwb3J0IGFjY29yZGluZyB0byB0aGUgVVggZ3VpZGUgbGluZXMuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnQuTGlzdFJlcG9ydENvbnRyb2xsZXIuY29udHJvbGxlciNfc2V0SW5pdGlhbEZvY3VzXG5cdCAqL1xuXHRfc2V0SW5pdGlhbEZvY3VzKCkge1xuXHRcdGNvbnN0IGR5bmFtaWNQYWdlID0gdGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sKCksXG5cdFx0XHRpc0hlYWRlckV4cGFuZGVkID0gZHluYW1pY1BhZ2UuZ2V0SGVhZGVyRXhwYW5kZWQoKSxcblx0XHRcdGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSBhcyBhbnk7XG5cdFx0aWYgKGZpbHRlckJhcikge1xuXHRcdFx0aWYgKGlzSGVhZGVyRXhwYW5kZWQpIHtcblx0XHRcdFx0Ly9FbmFibGluZyBtYW5kYXRvcnkgZmlsdGVyIGZpZWxkcyBtZXNzYWdlIGRpYWxvZ1xuXHRcdFx0XHRpZiAoIWZpbHRlckJhci5nZXRTaG93TWVzc2FnZXMoKSkge1xuXHRcdFx0XHRcdGZpbHRlckJhci5zZXRTaG93TWVzc2FnZXModHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkID0gZmlsdGVyQmFyLmdldEZpbHRlckl0ZW1zKCkuZmluZChmdW5jdGlvbiAob0ZpbHRlckl0ZW06IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBvRmlsdGVySXRlbS5nZXRSZXF1aXJlZCgpICYmIG9GaWx0ZXJJdGVtLmdldENvbmRpdGlvbnMoKS5sZW5ndGggPT09IDA7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHQvL0ZvY3VzaW5nIG9uIHRoZSBmaXJzdCBlbXB0eSBtYW5kYXRvcnkgZmlsdGVyIGZpZWxkLCBvciBvbiB0aGUgZmlyc3QgZmlsdGVyIGZpZWxkIGlmIHRoZSB0YWJsZSBkYXRhIGlzIGxvYWRlZFxuXHRcdFx0XHRpZiAoZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkKSB7XG5cdFx0XHRcdFx0Zmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkLmZvY3VzKCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5faXNJbml0TG9hZEVuYWJsZWQoKSkge1xuXHRcdFx0XHRcdGZpbHRlckJhci5nZXRGaWx0ZXJJdGVtcygpWzBdLmZvY3VzKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly9Gb2N1c2luZyBvbiB0aGUgR28gYnV0dG9uXG5cdFx0XHRcdFx0dGhpcy5nZXRWaWV3KCkuYnlJZChgJHt0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKX0tYnRuU2VhcmNoYCkuZm9jdXMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICh0aGlzLl9pc0luaXRMb2FkRW5hYmxlZCgpKSB7XG5cdFx0XHRcdHRoaXMuX2dldFRhYmxlKCk/LmZvY3VzUm93KDApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9nZXRUYWJsZSgpPy5mb2N1c1JvdygwKTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24oKSB7XG5cdFx0Y29uc3Qgb01hbmlmZXN0RW50cnkgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldE1hbmlmZXN0RW50cnkoXCJzYXAuYXBwXCIpO1xuXHRcdHJldHVybiB7XG5cdFx0XHR0aXRsZTogb01hbmlmZXN0RW50cnkudGl0bGUsXG5cdFx0XHRzdWJ0aXRsZTogb01hbmlmZXN0RW50cnkuYXBwU3ViVGl0bGUgfHwgXCJcIixcblx0XHRcdGludGVudDogXCJcIixcblx0XHRcdGljb246IFwiXCJcblx0XHR9O1xuXHR9XG5cblx0X2dldEZpbHRlckJhckNvbnRyb2woKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbElkKCkpIGFzIEZpbHRlckJhcjtcblx0fVxuXG5cdF9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5fZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sSWQoKSkgYXMgRHluYW1pY1BhZ2U7XG5cdH1cblxuXHRfZ2V0QWRhcHRhdGlvbkZpbHRlckJhckNvbnRyb2woKSB7XG5cdFx0Ly8gSWYgdGhlIGFkYXB0YXRpb24gZmlsdGVyIGJhciBpcyBwYXJ0IG9mIHRoZSBET00gdHJlZSwgdGhlIFwiQWRhcHQgRmlsdGVyXCIgZGlhbG9nIGlzIG9wZW4sXG5cdFx0Ly8gYW5kIHdlIHJldHVybiB0aGUgYWRhcHRhdGlvbiBmaWx0ZXIgYmFyIGFzIGFuIGFjdGl2ZSBjb250cm9sICh2aXNpYmxlIGZvciB0aGUgdXNlcilcblx0XHRjb25zdCBhZGFwdGF0aW9uRmlsdGVyQmFyID0gKHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSBhcyBhbnkpLmdldEluYnVpbHRGaWx0ZXIoKTtcblx0XHRyZXR1cm4gYWRhcHRhdGlvbkZpbHRlckJhcj8uZ2V0UGFyZW50KCkgPyBhZGFwdGF0aW9uRmlsdGVyQmFyIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0X2dldFNlZ21lbnRlZEJ1dHRvbihzQ29udHJvbDogYW55KSB7XG5cdFx0Y29uc3Qgc1NlZ21lbnRlZEJ1dHRvbklkID0gKHNDb250cm9sID09PSBcIkNoYXJ0XCIgPyB0aGlzLmdldENoYXJ0Q29udHJvbCgpIDogdGhpcy5fZ2V0VGFibGUoKSk/LmRhdGEoXCJzZWdtZW50ZWRCdXR0b25JZFwiKTtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZChzU2VnbWVudGVkQnV0dG9uSWQpO1xuXHR9XG5cblx0X2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkoc1BhdGg6IHN0cmluZykge1xuXHRcdGNvbnN0IGNvbnRyb2xJZCA9IHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShzUGF0aCk7XG5cdFx0cmV0dXJuIGNvbnRyb2xJZCAmJiB0aGlzLmdldFZpZXcoKS5ieUlkKGNvbnRyb2xJZCk7XG5cdH1cblxuXHRfZ2V0UGFnZU1vZGVsKCk6IEpTT05Nb2RlbCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgcGFnZUNvbXBvbmVudCA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcih0aGlzLmdldFZpZXcoKSkgYXMgYW55O1xuXHRcdHJldHVybiBwYWdlQ29tcG9uZW50LmdldE1vZGVsKFwiX3BhZ2VNb2RlbFwiKTtcblx0fVxuXG5cdF9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2xJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvZHluYW1pY0xpc3RSZXBvcnRJZFwiKSB8fCBcIlwiO1xuXHR9XG5cblx0X2dldEZpbHRlckJhckNvbnRyb2xJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvZmlsdGVyQmFySWRcIikgfHwgXCJcIjtcblx0fVxuXG5cdGdldENoYXJ0Q29udHJvbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0Q29udHJvbEZyb21QYWdlTW9kZWxQcm9wZXJ0eShcIi9zaW5nbGVDaGFydElkXCIpO1xuXHR9XG5cblx0X2dldFZpc3VhbEZpbHRlckJhckNvbnRyb2woKSB7XG5cdFx0Y29uc3Qgc1Zpc3VhbEZpbHRlckJhcklkID0gU3RhYmxlSWRIZWxwZXIuZ2VuZXJhdGUoW1widmlzdWFsRmlsdGVyXCIsIHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2xJZCgpXSk7XG5cdFx0cmV0dXJuIHNWaXN1YWxGaWx0ZXJCYXJJZCAmJiB0aGlzLmdldFZpZXcoKS5ieUlkKHNWaXN1YWxGaWx0ZXJCYXJJZCk7XG5cdH1cblx0X2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sKCkge1xuXHRcdHJldHVybiB0aGlzLl9nZXRDb250cm9sRnJvbVBhZ2VNb2RlbFByb3BlcnR5KFwiL3ZhcmlhbnRNYW5hZ2VtZW50L2lkXCIpO1xuXHR9XG5cblx0X2dldE11bHRpTW9kZUNvbnRyb2woKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6VGFiTXVsdGlwbGVNb2RlOjpDb250cm9sXCIpIGFzIE11bHRpcGxlTW9kZUNvbnRyb2w7XG5cdH1cblxuXHRfZ2V0VGFibGUoKTogVGFibGUgfCB1bmRlZmluZWQge1xuXHRcdGlmICh0aGlzLl9pc011bHRpTW9kZSgpKSB7XG5cdFx0XHRjb25zdCBvQ29udHJvbCA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKT8uZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2woKT8uY29udGVudDtcblx0XHRcdHJldHVybiBvQ29udHJvbD8uaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSA/IChvQ29udHJvbCBhcyBUYWJsZSkgOiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLl9nZXRDb250cm9sRnJvbVBhZ2VNb2RlbFByb3BlcnR5KFwiL3NpbmdsZVRhYmxlSWRcIikgYXMgVGFibGU7XG5cdFx0fVxuXHR9XG5cdF9nZXRDb250cm9scyhzS2V5PzogYW55KSB7XG5cdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdGNvbnN0IGFDb250cm9sczogYW55W10gPSBbXTtcblx0XHRcdGNvbnN0IG9UYWJNdWx0aU1vZGUgPSB0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCkuY29udGVudDtcblx0XHRcdG9UYWJNdWx0aU1vZGUuZ2V0SXRlbXMoKS5mb3JFYWNoKChvSXRlbTogYW55KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9Db250cm9sID0gdGhpcy5nZXRWaWV3KCkuYnlJZChvSXRlbS5nZXRLZXkoKSk7XG5cdFx0XHRcdGlmIChvQ29udHJvbCAmJiBzS2V5KSB7XG5cdFx0XHRcdFx0aWYgKG9JdGVtLmdldEtleSgpLmluZGV4T2YoYGZlOjoke3NLZXl9YCkgPiAtMSkge1xuXHRcdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2gob0NvbnRyb2wpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChvQ29udHJvbCAhPT0gdW5kZWZpbmVkICYmIG9Db250cm9sICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2gob0NvbnRyb2wpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBhQ29udHJvbHM7XG5cdFx0fSBlbHNlIGlmIChzS2V5ID09PSBcIkNoYXJ0XCIpIHtcblx0XHRcdGNvbnN0IG9DaGFydCA9IHRoaXMuZ2V0Q2hhcnRDb250cm9sKCk7XG5cdFx0XHRyZXR1cm4gb0NoYXJ0ID8gW29DaGFydF0gOiBbXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgb1RhYmxlID0gdGhpcy5fZ2V0VGFibGUoKTtcblx0XHRcdHJldHVybiBvVGFibGUgPyBbb1RhYmxlXSA6IFtdO1xuXHRcdH1cblx0fVxuXG5cdF9nZXREZWZhdWx0UGF0aCgpIHtcblx0XHRjb25zdCBkZWZhdWx0UGF0aCA9IExpc3RSZXBvcnRUZW1wbGF0aW5nLmdldERlZmF1bHRQYXRoKHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi92aWV3c1wiKSB8fCBbXSk7XG5cdFx0c3dpdGNoIChkZWZhdWx0UGF0aCkge1xuXHRcdFx0Y2FzZSBcInByaW1hcnlcIjpcblx0XHRcdFx0cmV0dXJuIFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQ7XG5cdFx0XHRjYXNlIFwic2Vjb25kYXJ5XCI6XG5cdFx0XHRcdHJldHVybiBUZW1wbGF0ZUNvbnRlbnRWaWV3LlRhYmxlO1xuXHRcdFx0Y2FzZSBcImJvdGhcIjpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBUZW1wbGF0ZUNvbnRlbnRWaWV3Lkh5YnJpZDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGtub3cgaWYgTGlzdFJlcG9ydCBpcyBjb25maWd1cmVkIHdpdGggTXVsdGlwbGUgVGFibGUgbW9kZS5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9pc011bHRpTW9kZVxuXHQgKiBAcmV0dXJucyBJcyBNdWx0aXBsZSBUYWJsZSBtb2RlIHNldD9cblx0ICovXG5cdF9pc011bHRpTW9kZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISF0aGlzLl9nZXRQYWdlTW9kZWwoKT8uZ2V0UHJvcGVydHkoXCIvbXVsdGlWaWV3c0NvbnRyb2xcIik7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGtub3cgaWYgTGlzdFJlcG9ydCBpcyBjb25maWd1cmVkIHRvIGxvYWQgZGF0YSBhdCBzdGFydCB1cC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9pc0luaXRMb2FkRGlzYWJsZWRcblx0ICogQHJldHVybnMgSXMgSW5pdExvYWQgZW5hYmxlZD9cblx0ICovXG5cdF9pc0luaXRMb2FkRW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRjb25zdCBpbml0TG9hZE1vZGUgPSAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLmluaXRpYWxMb2FkO1xuXHRcdHJldHVybiBpbml0TG9hZE1vZGUgPT09IEluaXRpYWxMb2FkTW9kZS5FbmFibGVkO1xuXHR9XG5cblx0X2hhc011bHRpVmlzdWFsaXphdGlvbnMoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi9oYXNNdWx0aVZpc3VhbGl6YXRpb25zXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBzdXNwZW5kIHNlYXJjaCBvbiB0aGUgZmlsdGVyIGJhci4gVGhlIGluaXRpYWwgbG9hZGluZyBvZiBkYXRhIGlzIGRpc2FibGVkIGJhc2VkIG9uIHRoZSBtYW5pZmVzdCBjb25maWd1cmF0aW9uIEluaXRMb2FkIC0gRGlzYWJsZWQvQXV0by5cblx0ICogSXQgaXMgZW5hYmxlZCBsYXRlciB3aGVuIHRoZSB2aWV3IHN0YXRlIGlzIHNldCwgd2hlbiBpdCBpcyBwb3NzaWJsZSB0byByZWFsaXplIGlmIHRoZXJlIGFyZSBkZWZhdWx0IGZpbHRlcnMuXG5cdCAqL1xuXHRfZGlzYWJsZUluaXRMb2FkKCkge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHQvLyBjaGVjayBmb3IgZmlsdGVyIGJhciBoaWRkZW5cblx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHRmaWx0ZXJCYXIuc2V0U3VzcGVuZFNlbGVjdGlvbih0cnVlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIGNhbGxlZCBieSBmbGV4IHRvIGRldGVybWluZSBpZiB0aGUgYXBwbHlBdXRvbWF0aWNhbGx5IHNldHRpbmcgb24gdGhlIHZhcmlhbnQgaXMgdmFsaWQuXG5cdCAqIENhbGxlZCBvbmx5IGZvciBTdGFuZGFyZCBWYXJpYW50IGFuZCBvbmx5IHdoZW4gdGhlcmUgaXMgZGlzcGxheSB0ZXh0IHNldCBmb3IgYXBwbHlBdXRvbWF0aWNhbGx5IChGRSBvbmx5IHNldHMgaXQgZm9yIEF1dG8pLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBCb29sZWFuIHRydWUgaWYgZGF0YSBzaG91bGQgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHksIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0X2FwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50KCkge1xuXHRcdC8vIFdlIGFsd2F5cyByZXR1cm4gZmFsc2UgYW5kIHRha2UgY2FyZSBvZiBpdCB3aGVuIHZpZXcgc3RhdGUgaXMgc2V0XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbmZpZ3VyZSB0aGUgc2V0dGluZ3MgZm9yIGluaXRpYWwgbG9hZCBiYXNlZCBvblxuXHQgKiAtIG1hbmlmZXN0IHNldHRpbmcgaW5pdExvYWQgLSBFbmFibGVkL0Rpc2FibGVkL0F1dG9cblx0ICogLSB1c2VyJ3Mgc2V0dGluZyBvZiBhcHBseUF1dG9tYXRpY2FsbHkgb24gdmFyaWFudFxuXHQgKiAtIGlmIHRoZXJlIGFyZSBkZWZhdWx0IGZpbHRlcnNcblx0ICogV2UgZGlzYWJsZSB0aGUgZmlsdGVyIGJhciBzZWFyY2ggYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5hYmxlIGl0IHdoZW4gdmlldyBzdGF0ZSBpcyBzZXQuXG5cdCAqL1xuXHRfc2V0SW5pdExvYWQoKSB7XG5cdFx0Ly8gaWYgaW5pdExvYWQgaXMgRGlzYWJsZWQgb3IgQXV0bywgc3dpdGNoIG9mZiBmaWx0ZXIgYmFyIHNlYXJjaCB0ZW1wb3JhcmlseSBhdCBzdGFydFxuXHRcdGlmICghdGhpcy5faXNJbml0TG9hZEVuYWJsZWQoKSkge1xuXHRcdFx0dGhpcy5fZGlzYWJsZUluaXRMb2FkKCk7XG5cdFx0fVxuXHRcdC8vIHNldCBob29rIGZvciBmbGV4IGZvciB3aGVuIHN0YW5kYXJkIHZhcmlhbnQgaXMgc2V0IChhdCBzdGFydCBvciBieSB1c2VyIGF0IHJ1bnRpbWUpXG5cdFx0Ly8gcmVxdWlyZWQgdG8gb3ZlcnJpZGUgdGhlIHVzZXIgc2V0dGluZyAnYXBwbHkgYXV0b21hdGljYWxseScgYmVoYXZpb3VyIGlmIHRoZXJlIGFyZSBubyBmaWx0ZXJzXG5cdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnRJZDogYW55ID0gTGlzdFJlcG9ydFRlbXBsYXRpbmcuZ2V0VmFyaWFudEJhY2tSZWZlcmVuY2UodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSwgdGhpcy5fZ2V0UGFnZU1vZGVsKCkpO1xuXHRcdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50ID0gdmFyaWFudE1hbmFnZW1lbnRJZCAmJiB0aGlzLmdldFZpZXcoKS5ieUlkKHZhcmlhbnRNYW5hZ2VtZW50SWQpO1xuXHRcdGlmICh2YXJpYW50TWFuYWdlbWVudCkge1xuXHRcdFx0dmFyaWFudE1hbmFnZW1lbnQucmVnaXN0ZXJBcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudCh0aGlzLl9hcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudC5iaW5kKHRoaXMpKTtcblx0XHR9XG5cdH1cblxuXHRfc2V0U2hhcmVNb2RlbCgpIHtcblx0XHQvLyBUT0RPOiBkZWFjdGl2YXRlZCBmb3Igbm93IC0gY3VycmVudGx5IHRoZXJlIGlzIG5vIF90ZW1wbFByaXYgYW55bW9yZSwgdG8gYmUgZGlzY3Vzc2VkXG5cdFx0Ly8gdGhpcyBtZXRob2QgaXMgY3VycmVudGx5IG5vdCBjYWxsZWQgYW55bW9yZSBmcm9tIHRoZSBpbml0IG1ldGhvZFxuXG5cdFx0Y29uc3QgZm5HZXRVc2VyID0gT2JqZWN0UGF0aC5nZXQoXCJzYXAudXNoZWxsLkNvbnRhaW5lci5nZXRVc2VyXCIpO1xuXHRcdC8vdmFyIG9NYW5pZmVzdCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRBcHBDb21wb25lbnQoKS5nZXRNZXRhZGF0YSgpLmdldE1hbmlmZXN0RW50cnkoXCJzYXAudWlcIik7XG5cdFx0Ly92YXIgc0Jvb2ttYXJrSWNvbiA9IChvTWFuaWZlc3QgJiYgb01hbmlmZXN0Lmljb25zICYmIG9NYW5pZmVzdC5pY29ucy5pY29uKSB8fCBcIlwiO1xuXG5cdFx0Ly9zaGFyZU1vZGVsOiBIb2xkcyBhbGwgdGhlIHNoYXJpbmcgcmVsZXZhbnQgaW5mb3JtYXRpb24gYW5kIGluZm8gdXNlZCBpbiBYTUwgdmlld1xuXHRcdGNvbnN0IG9TaGFyZUluZm8gPSB7XG5cdFx0XHRib29rbWFya1RpdGxlOiBkb2N1bWVudC50aXRsZSwgLy9UbyBuYW1lIHRoZSBib29rbWFyayBhY2NvcmRpbmcgdG8gdGhlIGFwcCB0aXRsZS5cblx0XHRcdGJvb2ttYXJrQ3VzdG9tVXJsOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGNvbnN0IHNIYXNoID0gaGFzaGVyLmdldEhhc2goKTtcblx0XHRcdFx0cmV0dXJuIHNIYXNoID8gYCMke3NIYXNofWAgOiB3aW5kb3cubG9jYXRpb24uaHJlZjtcblx0XHRcdH0sXG5cdFx0XHQvKlxuXHRcdFx0XHRcdFx0XHRUbyBiZSBhY3RpdmF0ZWQgb25jZSB0aGUgRkxQIHNob3dzIHRoZSBjb3VudCAtIHNlZSBjb21tZW50IGFib3ZlXG5cdFx0XHRcdFx0XHRcdGJvb2ttYXJrU2VydmljZVVybDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly92YXIgb1RhYmxlID0gb1RhYmxlLmdldElubmVyVGFibGUoKTsgb1RhYmxlIGlzIGFscmVhZHkgdGhlIHNhcC5mZSB0YWJsZSAoYnV0IG5vdCB0aGUgaW5uZXIgb25lKVxuXHRcdFx0XHRcdFx0XHRcdC8vIHdlIHNob3VsZCB1c2UgdGFibGUuZ2V0TGlzdEJpbmRpbmdJbmZvIGluc3RlYWQgb2YgdGhlIGJpbmRpbmdcblx0XHRcdFx0XHRcdFx0XHR2YXIgb0JpbmRpbmcgPSBvVGFibGUuZ2V0QmluZGluZyhcInJvd3NcIikgfHwgb1RhYmxlLmdldEJpbmRpbmcoXCJpdGVtc1wiKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb0JpbmRpbmcgPyBmbkdldERvd25sb2FkVXJsKG9CaW5kaW5nKSA6IFwiXCI7XG5cdFx0XHRcdFx0XHRcdH0sKi9cblx0XHRcdGlzU2hhcmVJbkphbUFjdGl2ZTogISFmbkdldFVzZXIgJiYgZm5HZXRVc2VyKCkuaXNKYW1BY3RpdmUoKVxuXHRcdH07XG5cblx0XHRjb25zdCBvVGVtcGxhdGVQcml2YXRlTW9kZWwgPSB0aGlzLmdldE93bmVyQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJfdGVtcGxQcml2XCIpIGFzIEpTT05Nb2RlbDtcblx0XHRvVGVtcGxhdGVQcml2YXRlTW9kZWwuc2V0UHJvcGVydHkoXCIvbGlzdFJlcG9ydC9zaGFyZVwiLCBvU2hhcmVJbmZvKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gdXBkYXRlIHRoZSBsb2NhbCBVSSBtb2RlbCBvZiB0aGUgcGFnZSB3aXRoIHRoZSBmaWVsZHMgdGhhdCBhcmUgbm90IGFwcGxpY2FibGUgdG8gdGhlIGZpbHRlciBiYXIgKHRoaXMgaXMgc3BlY2lmaWMgdG8gdGhlIEFMUCBzY2VuYXJpbykuXG5cdCAqXG5cdCAqIEBwYXJhbSBvSW50ZXJuYWxNb2RlbENvbnRleHQgVGhlIGludGVybmFsIG1vZGVsIGNvbnRleHRcblx0ICogQHBhcmFtIG9GaWx0ZXJCYXIgTURDIGZpbHRlciBiYXJcblx0ICovXG5cdF91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsIG9GaWx0ZXJCYXI6IEZpbHRlckJhcikge1xuXHRcdGNvbnN0IG1DYWNoZTogYW55ID0ge307XG5cdFx0Y29uc3QgaWdub3JlZEZpZWxkczogYW55ID0ge30sXG5cdFx0XHRhVGFibGVzID0gdGhpcy5fZ2V0Q29udHJvbHMoXCJ0YWJsZVwiKSxcblx0XHRcdGFDaGFydHMgPSB0aGlzLl9nZXRDb250cm9scyhcIkNoYXJ0XCIpO1xuXG5cdFx0aWYgKCFhVGFibGVzLmxlbmd0aCB8fCAhYUNoYXJ0cy5sZW5ndGgpIHtcblx0XHRcdC8vIElmIHRoZXJlJ3Mgbm90IGEgdGFibGUgYW5kIGEgY2hhcnQsIHdlJ3JlIG5vdCBpbiB0aGUgQUxQIGNhc2Vcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBGb3IgdGhlIG1vbWVudCwgdGhlcmUncyBub3RoaW5nIGZvciB0YWJsZXMuLi5cblx0XHRhQ2hhcnRzLmZvckVhY2goZnVuY3Rpb24gKG9DaGFydDogYW55KSB7XG5cdFx0XHRjb25zdCBzQ2hhcnRFbnRpdHlQYXRoID0gb0NoYXJ0LmRhdGEoXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKSxcblx0XHRcdFx0c0NoYXJ0RW50aXR5U2V0ID0gc0NoYXJ0RW50aXR5UGF0aC5zbGljZSgxKSxcblx0XHRcdFx0c0NhY2hlS2V5ID0gYCR7c0NoYXJ0RW50aXR5U2V0fUNoYXJ0YDtcblx0XHRcdGlmICghbUNhY2hlW3NDYWNoZUtleV0pIHtcblx0XHRcdFx0bUNhY2hlW3NDYWNoZUtleV0gPSBGaWx0ZXJVdGlscy5nZXROb3RBcHBsaWNhYmxlRmlsdGVycyhvRmlsdGVyQmFyLCBvQ2hhcnQpO1xuXHRcdFx0fVxuXHRcdFx0aWdub3JlZEZpZWxkc1tzQ2FjaGVLZXldID0gbUNhY2hlW3NDYWNoZUtleV07XG5cdFx0fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY29udHJvbHMvaWdub3JlZEZpZWxkc1wiLCBpZ25vcmVkRmllbGRzKTtcblx0fVxuXG5cdF9pc0ZpbHRlckJhckhpZGRlbigpIHtcblx0XHRyZXR1cm4gKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5oaWRlRmlsdGVyQmFyO1xuXHR9XG5cblx0X2dldEFwcGx5QXV0b21hdGljYWxseU9uVmFyaWFudChWYXJpYW50TWFuYWdlbWVudDogYW55LCBrZXk6IHN0cmluZyk6IEJvb2xlYW4ge1xuXHRcdGlmICghVmFyaWFudE1hbmFnZW1lbnQgfHwgIWtleSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRjb25zdCB2YXJpYW50cyA9IFZhcmlhbnRNYW5hZ2VtZW50LmdldFZhcmlhbnRzKCk7XG5cdFx0Y29uc3QgY3VycmVudFZhcmlhbnQgPSB2YXJpYW50cy5maW5kKGZ1bmN0aW9uICh2YXJpYW50OiBhbnkpIHtcblx0XHRcdHJldHVybiB2YXJpYW50ICYmIHZhcmlhbnQua2V5ID09PSBrZXk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIChjdXJyZW50VmFyaWFudCAmJiBjdXJyZW50VmFyaWFudC5leGVjdXRlT25TZWxlY3QpIHx8IGZhbHNlO1xuXHR9XG5cblx0X3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoKG9WTTogYW55KSB7XG5cdFx0aWYgKFxuXHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5pbml0aWFsTG9hZCA9PT0gSW5pdGlhbExvYWRNb2RlLkF1dG8gJiZcblx0XHRcdCghb1ZNIHx8IG9WTS5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKSA9PT0gb1ZNLmdldEN1cnJlbnRWYXJpYW50S2V5KCkpXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKG9GaWx0ZXJCYXIpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbmRpdGlvbnMgPSBvRmlsdGVyQmFyLmdldENvbmRpdGlvbnMoKTtcblx0XHRcdFx0Zm9yIChjb25zdCBzS2V5IGluIG9Db25kaXRpb25zKSB7XG5cdFx0XHRcdFx0Ly8gaWdub3JlIGZpbHRlcnMgc3RhcnRpbmcgd2l0aCAkIChlLmcuICRzZWFyY2gsICRlZGl0U3RhdGUpXG5cdFx0XHRcdFx0aWYgKCFzS2V5LnN0YXJ0c1dpdGgoXCIkXCIpICYmIEFycmF5LmlzQXJyYXkob0NvbmRpdGlvbnNbc0tleV0pICYmIG9Db25kaXRpb25zW3NLZXldLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Ly8gbG9hZCBkYXRhIGFzIHBlciB1c2VyJ3Mgc2V0dGluZyBvZiBhcHBseUF1dG9tYXRpY2FsbHkgb24gdGhlIHZhcmlhbnRcblx0XHRcdFx0XHRcdGNvbnN0IHN0YW5kYXJkVmFyaWFudDogYW55ID0gb1ZNLmdldFZhcmlhbnRzKCkuZmluZCgodmFyaWFudDogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YXJpYW50LmtleSA9PT0gb1ZNLmdldEN1cnJlbnRWYXJpYW50S2V5KCk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJldHVybiBzdGFuZGFyZFZhcmlhbnQgJiYgc3RhbmRhcmRWYXJpYW50LmV4ZWN1dGVPblNlbGVjdDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0X3VwZGF0ZVRhYmxlKG9UYWJsZTogYW55KSB7XG5cdFx0aWYgKCFvVGFibGUuaXNUYWJsZUJvdW5kKCkgfHwgdGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzKSB7XG5cdFx0XHRvVGFibGUucmViaW5kKCk7XG5cdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRfdXBkYXRlQ2hhcnQob0NoYXJ0OiBhbnkpIHtcblx0XHRjb25zdCBvSW5uZXJDaGFydCA9IG9DaGFydC5nZXRDb250cm9sRGVsZWdhdGUoKS5fZ2V0Q2hhcnQob0NoYXJ0KTtcblx0XHRpZiAoIShvSW5uZXJDaGFydCAmJiBvSW5uZXJDaGFydC5pc0JvdW5kKFwiZGF0YVwiKSkgfHwgdGhpcy5oYXNQZW5kaW5nVGFibGVDaGFuZ2VzKSB7XG5cdFx0XHRvQ2hhcnQuZ2V0Q29udHJvbERlbGVnYXRlKCkucmViaW5kKG9DaGFydCwgb0lubmVyQ2hhcnQuZ2V0QmluZGluZ0luZm8oXCJkYXRhXCIpKTtcblx0XHRcdHRoaXMuaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcyA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGhhbmRsZXJzID0ge1xuXHRcdGhhbmRsZVNoYXJlU2hvcnRjdXQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIpIHtcblx0XHRcdGNvbnN0IHNoYXJlQVBJOiBTaGFyZUFQSSA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6U2hhcmVcIikgYXMgU2hhcmVBUEk7XG5cdFx0XHRzaGFyZUFQSS5vcGVuTWVudSgpO1xuXHRcdH0sXG5cdFx0b25GaWx0ZXJTZWFyY2godGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIpIHtcblx0XHRcdHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKS50cmlnZ2VyU2VhcmNoKCk7XG5cdFx0fSxcblx0XHRvbkZpbHRlcnNDaGFuZ2VkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGlmIChvRmlsdGVyQmFyKSB7XG5cdFx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRcdC8vIFBlbmRpbmcgZmlsdGVycyBpbnRvIEZpbHRlckJhciB0byBiZSB1c2VkIGZvciBjdXN0b20gdmlld3Ncblx0XHRcdFx0dGhpcy5vblBlbmRpbmdGaWx0ZXJzKCk7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImFwcGxpZWRGaWx0ZXJzXCIsIG9GaWx0ZXJCYXIuZ2V0QXNzaWduZWRGaWx0ZXJzVGV4dCgpLmZpbHRlcnNUZXh0KTtcblx0XHRcdFx0aWYgKG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJjb25kaXRpb25zQmFzZWRcIikpIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25WYXJpYW50U2VsZWN0ZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHRjb25zdCBvVk0gPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0XHRjb25zdCBjdXJyZW50VmFyaWFudEtleSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJrZXlcIik7XG5cdFx0XHRjb25zdCBvTXVsdGlNb2RlQ29udHJvbCA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKTtcblxuXHRcdFx0b011bHRpTW9kZUNvbnRyb2w/LmludmFsaWRhdGVDb250ZW50KCk7XG5cdFx0XHRvTXVsdGlNb2RlQ29udHJvbD8uc2V0RnJlZXplQ29udGVudCh0cnVlKTtcblx0XHRcdC8vIHNldFRpbWVvdXQgY2F1c2UgdGhlIHZhcmlhbnQgbmVlZHMgdG8gYmUgYXBwbGllZCBiZWZvcmUganVkZ2luZyB0aGUgYXV0byBzZWFyY2ggb3IgdXBkYXRpbmcgdGhlIGFwcCBzdGF0ZVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLl9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaChvVk0pKSB7XG5cdFx0XHRcdFx0Ly8gdGhlIGFwcCBzdGF0ZSB3aWxsIGJlIHVwZGF0ZWQgdmlhIG9uU2VhcmNoIGhhbmRsZXJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpLnRyaWdnZXJTZWFyY2goKTtcblx0XHRcdFx0fSBlbHNlIGlmICghdGhpcy5fZ2V0QXBwbHlBdXRvbWF0aWNhbGx5T25WYXJpYW50KG9WTSwgY3VycmVudFZhcmlhbnRLZXkpKSB7XG5cdFx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCAwKTtcblx0XHR9LFxuXHRcdG9uVmFyaWFudFNhdmVkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyKSB7XG5cdFx0XHQvL1RPRE86IFNob3VsZCByZW1vdmUgdGhpcyBzZXRUaW1lT3V0IG9uY2UgVmFyaWFudCBNYW5hZ2VtZW50IHByb3ZpZGVzIGFuIGFwaSB0byBmZXRjaCB0aGUgY3VycmVudCB2YXJpYW50IGtleSBvbiBzYXZlISEhXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0fSwgMTAwMCk7XG5cdFx0fSxcblx0XHRvblNlYXJjaCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcikge1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRjb25zdCBvTWRjQ2hhcnQgPSB0aGlzLmdldENoYXJ0Q29udHJvbCgpO1xuXHRcdFx0Y29uc3QgYkhpZGVEcmFmdCA9IEZpbHRlclV0aWxzLmdldEVkaXRTdGF0ZUlzSGlkZURyYWZ0KG9GaWx0ZXJCYXIuZ2V0Q29uZGl0aW9ucygpKTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhhc1BlbmRpbmdGaWx0ZXJzXCIsIGZhbHNlKTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhpZGVEcmFmdEluZm9cIiwgYkhpZGVEcmFmdCk7XG5cblx0XHRcdGlmICghdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpKSB7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUFMUE5vdEFwcGxpY2FibGVGaWVsZHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBvRmlsdGVyQmFyKTtcblx0XHRcdH1cblx0XHRcdGlmIChvTWRjQ2hhcnQpIHtcblx0XHRcdFx0Ly8gZGlzYWJsZSBib3VuZCBhY3Rpb25zIFRPRE86IHRoaXMgY2xlYXJzIGV2ZXJ5dGhpbmcgZm9yIHRoZSBjaGFydD9cblx0XHRcdFx0KG9NZGNDaGFydC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0KS5zZXRQcm9wZXJ0eShcIlwiLCB7fSk7XG5cblx0XHRcdFx0Y29uc3Qgb1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9NZGNDaGFydC5nZXRCaW5kaW5nQ29udGV4dChcInBhZ2VJbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdFx0Y29uc3Qgc1RlbXBsYXRlQ29udGVudFZpZXcgPSBvUGFnZUludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGAke29QYWdlSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9hbHBDb250ZW50Vmlld2ApO1xuXHRcdFx0XHRpZiAoc1RlbXBsYXRlQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQpIHtcblx0XHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChzVGVtcGxhdGVDb250ZW50VmlldyA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZSkge1xuXHRcdFx0XHRcdHRoaXMuaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcyA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIHN0b3JlIGZpbHRlciBiYXIgY29uZGl0aW9ucyB0byB1c2UgbGF0ZXIgd2hpbGUgbmF2aWdhdGlvblxuXHRcdFx0U3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShvRmlsdGVyQmFyKVxuXHRcdFx0XHQudGhlbigob0V4dGVybmFsU3RhdGU6IGFueSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucyA9IG9FeHRlcm5hbFN0YXRlLmZpbHRlcjtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIGV4dGVybmFsIHN0YXRlXCIsIG9FcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdFx0aWYgKCh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkubGl2ZU1vZGUgPT09IGZhbHNlKSB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHN5c3RlbS5waG9uZSkge1xuXHRcdFx0XHRjb25zdCBvRHluYW1pY1BhZ2UgPSB0aGlzLl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKTtcblx0XHRcdFx0b0R5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIFRyaWdnZXJzIGFuIG91dGJvdW5kIG5hdmlnYXRpb24gd2hlbiBhIHVzZXIgY2hvb3NlcyB0aGUgY2hldnJvbi5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSBvQ29udHJvbGxlclxuXHRcdCAqIEBwYXJhbSBzT3V0Ym91bmRUYXJnZXQgTmFtZSBvZiB0aGUgb3V0Ym91bmQgdGFyZ2V0IChuZWVkcyB0byBiZSBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdClcblx0XHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBjb250YWlucyB0aGUgZGF0YSBmb3IgdGhlIHRhcmdldCBhcHBcblx0XHQgKiBAcGFyYW0gc0NyZWF0ZVBhdGggQ3JlYXRlIHBhdGggd2hlbiB0aGUgY2hldnJvbiBpcyBjcmVhdGVkLlxuXHRcdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgb25jZSB0aGUgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWRcblx0XHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQoXG5cdFx0XHRvQ29udHJvbGxlcjogTGlzdFJlcG9ydENvbnRyb2xsZXIsXG5cdFx0XHRzT3V0Ym91bmRUYXJnZXQ6IHN0cmluZyxcblx0XHRcdG9Db250ZXh0OiBWNENvbnRleHQsXG5cdFx0XHRzQ3JlYXRlUGF0aDogc3RyaW5nXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5vbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQob0NvbnRyb2xsZXIsIHNPdXRib3VuZFRhcmdldCwgb0NvbnRleHQsIHNDcmVhdGVQYXRoKTtcblx0XHR9LFxuXHRcdG9uQ2hhcnRTZWxlY3Rpb25DaGFuZ2VkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IGFueSkge1xuXHRcdFx0Y29uc3Qgb01kY0NoYXJ0ID0gb0V2ZW50LmdldFNvdXJjZSgpLmdldENvbnRlbnQoKSxcblx0XHRcdFx0b1RhYmxlID0gdGhpcy5fZ2V0VGFibGUoKSxcblx0XHRcdFx0YURhdGEgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiZGF0YVwiKSxcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGlmIChhRGF0YSkge1xuXHRcdFx0XHQvLyB1cGRhdGUgYWN0aW9uIGJ1dHRvbnMgZW5hYmxlbWVudCAvIGRpc2FibGVtZW50XG5cdFx0XHRcdENoYXJ0UnVudGltZS5mblVwZGF0ZUNoYXJ0KG9FdmVudCk7XG5cdFx0XHRcdC8vIHVwZGF0ZSBzZWxlY3Rpb25zIG9uIHNlbGVjdGlvbiBvciBkZXNlbGVjdGlvblxuXHRcdFx0XHRDaGFydFV0aWxzLnNldENoYXJ0RmlsdGVycyhvTWRjQ2hhcnQpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc1RlbXBsYXRlQ29udGVudFZpZXcgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYCR7b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vYWxwQ29udGVudFZpZXdgKTtcblx0XHRcdGlmIChzVGVtcGxhdGVDb250ZW50VmlldyA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydCkge1xuXHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChvVGFibGUpIHtcblx0XHRcdFx0KG9UYWJsZSBhcyBhbnkpLnJlYmluZCgpO1xuXHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBhbnkpIHtcblx0XHRcdGNvbnN0IHNTZWxlY3RlZEtleSA9IG9FdmVudC5tUGFyYW1ldGVycy5rZXkgPyBvRXZlbnQubVBhcmFtZXRlcnMua2V5IDogbnVsbDtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJhbHBDb250ZW50Vmlld1wiLCBzU2VsZWN0ZWRLZXkpO1xuXHRcdFx0Y29uc3Qgb0NoYXJ0ID0gdGhpcy5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdGNvbnN0IG9UYWJsZSA9IHRoaXMuX2dldFRhYmxlKCk7XG5cdFx0XHRjb25zdCBvU2VnbWVudGVkQnV0dG9uRGVsZWdhdGUgPSB7XG5cdFx0XHRcdG9uQWZ0ZXJSZW5kZXJpbmcoKSB7XG5cdFx0XHRcdFx0Y29uc3QgYUl0ZW1zID0gb1NlZ21lbnRlZEJ1dHRvbi5nZXRJdGVtcygpO1xuXHRcdFx0XHRcdGFJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChvSXRlbTogYW55KSB7XG5cdFx0XHRcdFx0XHRpZiAob0l0ZW0uZ2V0S2V5KCkgPT09IHNTZWxlY3RlZEtleSkge1xuXHRcdFx0XHRcdFx0XHRvSXRlbS5mb2N1cygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdG9TZWdtZW50ZWRCdXR0b24ucmVtb3ZlRXZlbnREZWxlZ2F0ZShvU2VnbWVudGVkQnV0dG9uRGVsZWdhdGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgb1NlZ21lbnRlZEJ1dHRvbiA9IChcblx0XHRcdFx0c1NlbGVjdGVkS2V5ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3LlRhYmxlID8gdGhpcy5fZ2V0U2VnbWVudGVkQnV0dG9uKFwiVGFibGVcIikgOiB0aGlzLl9nZXRTZWdtZW50ZWRCdXR0b24oXCJDaGFydFwiKVxuXHRcdFx0KSBhcyBTZWdtZW50ZWRCdXR0b247XG5cdFx0XHRpZiAob1NlZ21lbnRlZEJ1dHRvbiAhPT0gb0V2ZW50LmdldFNvdXJjZSgpKSB7XG5cdFx0XHRcdG9TZWdtZW50ZWRCdXR0b24uYWRkRXZlbnREZWxlZ2F0ZShvU2VnbWVudGVkQnV0dG9uRGVsZWdhdGUpO1xuXHRcdFx0fVxuXHRcdFx0c3dpdGNoIChzU2VsZWN0ZWRLZXkpIHtcblx0XHRcdFx0Y2FzZSBUZW1wbGF0ZUNvbnRlbnRWaWV3LlRhYmxlOlxuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlKG9UYWJsZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydDpcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVDaGFydChvQ2hhcnQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFRlbXBsYXRlQ29udGVudFZpZXcuSHlicmlkOlxuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlKG9UYWJsZSk7XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlQ2hhcnQob0NoYXJ0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHR9LFxuXHRcdG9uRmlsdGVyc1NlZ21lbnRlZEJ1dHRvblByZXNzZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHRjb25zdCBpc0NvbXBhY3QgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwia2V5XCIpID09PSBcIkNvbXBhY3RcIjtcblx0XHRcdHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKS5zZXRWaXNpYmxlKGlzQ29tcGFjdCk7XG5cdFx0XHQodGhpcy5fZ2V0VmlzdWFsRmlsdGVyQmFyQ29udHJvbCgpIGFzIENvbnRyb2wpLnNldFZpc2libGUoIWlzQ29tcGFjdCk7XG5cdFx0fSxcblx0XHRvblN0YXRlQ2hhbmdlKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyKSB7XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0fSxcblx0XHRvbkR5bmFtaWNQYWdlVGl0bGVTdGF0ZUNoYW5nZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJCYXI6IGFueSA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGlmIChmaWx0ZXJCYXIgJiYgZmlsdGVyQmFyLmdldFNlZ21lbnRlZEJ1dHRvbigpKSB7XG5cdFx0XHRcdGlmIChvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiaXNFeHBhbmRlZFwiKSkge1xuXHRcdFx0XHRcdGZpbHRlckJhci5nZXRTZWdtZW50ZWRCdXR0b24oKS5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZpbHRlckJhci5nZXRTZWdtZW50ZWRCdXR0b24oKS5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0Zm9ybWF0dGVycyA9IHtcblx0XHRzZXRBTFBDb250cm9sTWVzc2FnZVN0cmlwKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBhSWdub3JlZEZpZWxkczogYW55W10sIGJJc0NoYXJ0OiBhbnksIG9BcHBseVN1cHBvcnRlZD86IGFueSkge1xuXHRcdFx0bGV0IHNUZXh0ID0gXCJcIjtcblx0XHRcdGJJc0NoYXJ0ID0gYklzQ2hhcnQgPT09IFwidHJ1ZVwiIHx8IGJJc0NoYXJ0ID09PSB0cnVlO1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGlmIChvRmlsdGVyQmFyICYmIEFycmF5LmlzQXJyYXkoYUlnbm9yZWRGaWVsZHMpICYmIGFJZ25vcmVkRmllbGRzLmxlbmd0aCA+IDAgJiYgYklzQ2hhcnQpIHtcblx0XHRcdFx0Y29uc3QgYUlnbm9yZWRMYWJlbHMgPSBNZXNzYWdlU3RyaXAuZ2V0TGFiZWxzKFxuXHRcdFx0XHRcdGFJZ25vcmVkRmllbGRzLFxuXHRcdFx0XHRcdG9GaWx0ZXJCYXIuZGF0YShcImVudGl0eVR5cGVcIiksXG5cdFx0XHRcdFx0b0ZpbHRlckJhcixcblx0XHRcdFx0XHR0aGlzLm9SZXNvdXJjZUJ1bmRsZSBhcyBSZXNvdXJjZUJ1bmRsZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBiSXNTZWFyY2hJZ25vcmVkID0gIW9BcHBseVN1cHBvcnRlZC5lbmFibGVTZWFyY2g7XG5cdFx0XHRcdHNUZXh0ID0gYklzQ2hhcnRcblx0XHRcdFx0XHQ/IE1lc3NhZ2VTdHJpcC5nZXRBTFBUZXh0KGFJZ25vcmVkTGFiZWxzLCBvRmlsdGVyQmFyLCBiSXNTZWFyY2hJZ25vcmVkKVxuXHRcdFx0XHRcdDogTWVzc2FnZVN0cmlwLmdldFRleHQoYUlnbm9yZWRMYWJlbHMsIG9GaWx0ZXJCYXIsIFwiXCIsIERlbGVnYXRlVXRpbC5nZXRMb2NhbGl6ZWRUZXh0KTtcblx0XHRcdFx0cmV0dXJuIHNUZXh0O1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFJlcG9ydENvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBMERBLElBQU1BLG1CQUFtQixHQUFHQyxXQUFXLENBQUNELG1CQUF4QztFQUFBLElBQ0NFLGVBQWUsR0FBR0QsV0FBVyxDQUFDQyxlQUQvQjtNQUlNQyxvQixXQURMQyxjQUFjLENBQUMsa0RBQUQsQyxVQUViQyxjQUFjLENBQ2RDLGVBQWUsQ0FBQ0MsUUFBaEIsQ0FBeUI7SUFDeEJDLGNBQWMsRUFBRSxZQUFpQztNQUMvQyxLQUFLQyxPQUFMLEdBQWVDLGFBQWYsRUFBRCxDQUF5REMsZUFBekQ7SUFDQTtFQUh1QixDQUF6QixDQURjLEMsVUFRZE4sY0FBYyxDQUNkTyw2QkFBNkIsQ0FBQ0wsUUFBOUIsQ0FBdUM7SUFDdENNLFlBQVksRUFBRSxZQUErQztNQUM1RCxPQUFRLEtBQUtDLElBQU4sQ0FBb0NDLG1CQUFwQyxFQUFQO0lBQ0E7RUFIcUMsQ0FBdkMsQ0FEYyxDLFVBUWRWLGNBQWMsQ0FBQ1csV0FBRCxDLFVBR2RYLGNBQWMsQ0FBQ1kscUJBQXFCLENBQUNWLFFBQXRCLENBQStCVyw2QkFBL0IsQ0FBRCxDLFVBR2RiLGNBQWMsQ0FBQ2MsS0FBSyxDQUFDWixRQUFOLENBQWVhLGNBQWYsQ0FBRCxDLFVBR2RmLGNBQWMsQ0FBQ2dCLFFBQVEsQ0FBQ2QsUUFBVCxDQUFrQmUsaUJBQWxCLENBQUQsQyxVQUdkakIsY0FBYyxDQUFDa0IsU0FBUyxDQUFDaEIsUUFBVixDQUFtQmlCLGtCQUFuQixDQUFELEMsVUFHZG5CLGNBQWMsQ0FBQ29CLGFBQUQsQyxXQUVkcEIsY0FBYyxDQUFDcUIsV0FBRCxDLFdBRWRyQixjQUFjLENBQUNzQixRQUFELEMsV0FTZEMsZUFBZSxFLFdBQ2ZDLGNBQWMsRSxXQTRHZEMsZ0JBQWdCLEUsV0FDaEJDLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLEtBQW5CLEMsV0FxQ1ZMLGVBQWUsRSxXQUNmRyxVQUFVLENBQUNDLGlCQUFpQixDQUFDQyxLQUFuQixDLFdBY1ZMLGVBQWUsRSxXQUNmRyxVQUFVLENBQUNDLGlCQUFpQixDQUFDQyxLQUFuQixDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztZQXlYWEMsUSxHQUFXO1FBQ1ZDLG1CQURVLGNBQ3NDO1VBQy9DLElBQU1DLFFBQWtCLEdBQUcsS0FBSzNCLE9BQUwsR0FBZTRCLElBQWYsQ0FBb0IsV0FBcEIsQ0FBM0I7VUFDQUQsUUFBUSxDQUFDRSxRQUFUO1FBQ0EsQ0FKUztRQUtWQyxjQUxVLGNBS2lDO1VBQzFDLEtBQUtDLG9CQUFMLEdBQTRCQyxhQUE1QjtRQUNBLENBUFM7UUFRVkMsZ0JBUlUsWUFRbUNDLE1BUm5DLEVBUWdEO1VBQ3pELElBQU1DLFVBQVUsR0FBRyxLQUFLSixvQkFBTCxFQUFuQjs7VUFDQSxJQUFJSSxVQUFKLEVBQWdCO1lBQ2YsSUFBTUMscUJBQXFCLEdBQUcsS0FBS3BDLE9BQUwsR0FBZXFDLGlCQUFmLENBQWlDLFVBQWpDLENBQTlCLENBRGUsQ0FFZjs7WUFDQSxLQUFLQyxnQkFBTDtZQUNBRixxQkFBcUIsQ0FBQ0csV0FBdEIsQ0FBa0MsZ0JBQWxDLEVBQW9ESixVQUFVLENBQUNLLHNCQUFYLEdBQW9DQyxXQUF4Rjs7WUFDQSxJQUFJUCxNQUFNLENBQUNRLFlBQVAsQ0FBb0IsaUJBQXBCLENBQUosRUFBNEM7Y0FDM0NOLHFCQUFxQixDQUFDRyxXQUF0QixDQUFrQyxtQkFBbEMsRUFBdUQsSUFBdkQ7WUFDQTtVQUNEO1FBQ0QsQ0FuQlM7UUFvQlZJLGlCQXBCVSxZQW9Cb0NULE1BcEJwQyxFQW9CaUQ7VUFBQTs7VUFDMUQsSUFBTVUsR0FBRyxHQUFHVixNQUFNLENBQUNXLFNBQVAsRUFBWjtVQUNBLElBQU1DLGlCQUFpQixHQUFHWixNQUFNLENBQUNRLFlBQVAsQ0FBb0IsS0FBcEIsQ0FBMUI7O1VBQ0EsSUFBTUssaUJBQWlCLEdBQUcsS0FBS0Msb0JBQUwsRUFBMUI7O1VBRUFELGlCQUFpQixTQUFqQixJQUFBQSxpQkFBaUIsV0FBakIsWUFBQUEsaUJBQWlCLENBQUVFLGlCQUFuQjtVQUNBRixpQkFBaUIsU0FBakIsSUFBQUEsaUJBQWlCLFdBQWpCLFlBQUFBLGlCQUFpQixDQUFFRyxnQkFBbkIsQ0FBb0MsSUFBcEMsRUFOMEQsQ0FPMUQ7O1VBQ0FDLFVBQVUsQ0FBQyxZQUFNO1lBQ2hCLElBQUksTUFBSSxDQUFDQyx3QkFBTCxDQUE4QlIsR0FBOUIsQ0FBSixFQUF3QztjQUN2QztjQUNBLE9BQU8sTUFBSSxDQUFDYixvQkFBTCxHQUE0QkMsYUFBNUIsRUFBUDtZQUNBLENBSEQsTUFHTyxJQUFJLENBQUMsTUFBSSxDQUFDcUIsK0JBQUwsQ0FBcUNULEdBQXJDLEVBQTBDRSxpQkFBMUMsQ0FBTCxFQUFtRTtjQUN6RSxNQUFJLENBQUNRLGVBQUwsR0FBdUJDLGNBQXZCO1lBQ0E7VUFDRCxDQVBTLEVBT1AsQ0FQTyxDQUFWO1FBUUEsQ0FwQ1M7UUFxQ1ZDLGNBckNVLGNBcUNpQztVQUFBOztVQUMxQztVQUNBTCxVQUFVLENBQUMsWUFBTTtZQUNoQixNQUFJLENBQUNHLGVBQUwsR0FBdUJDLGNBQXZCO1VBQ0EsQ0FGUyxFQUVQLElBRk8sQ0FBVjtRQUdBLENBMUNTO1FBMkNWRSxRQTNDVSxjQTJDMkI7VUFBQTs7VUFDcEMsSUFBTXRCLFVBQVUsR0FBRyxLQUFLSixvQkFBTCxFQUFuQjs7VUFDQSxJQUFNSyxxQkFBcUIsR0FBRyxLQUFLcEMsT0FBTCxHQUFlcUMsaUJBQWYsQ0FBaUMsVUFBakMsQ0FBOUI7VUFDQSxJQUFNcUIsU0FBUyxHQUFHLEtBQUtDLGVBQUwsRUFBbEI7VUFDQSxJQUFNQyxVQUFVLEdBQUdDLFdBQVcsQ0FBQ0MsdUJBQVosQ0FBb0MzQixVQUFVLENBQUM0QixhQUFYLEVBQXBDLENBQW5CO1VBQ0EzQixxQkFBcUIsQ0FBQ0csV0FBdEIsQ0FBa0MsbUJBQWxDLEVBQXVELEtBQXZEO1VBQ0FILHFCQUFxQixDQUFDRyxXQUF0QixDQUFrQyxlQUFsQyxFQUFtRHFCLFVBQW5EOztVQUVBLElBQUksQ0FBQyxLQUFLWixvQkFBTCxFQUFMLEVBQWtDO1lBQ2pDLEtBQUtnQiw2QkFBTCxDQUFtQzVCLHFCQUFuQyxFQUEwREQsVUFBMUQ7VUFDQTs7VUFDRCxJQUFJdUIsU0FBSixFQUFlO1lBQ2Q7WUFDQ0EsU0FBUyxDQUFDckIsaUJBQVYsQ0FBNEIsVUFBNUIsQ0FBRCxDQUFrRUUsV0FBbEUsQ0FBOEUsRUFBOUUsRUFBa0YsRUFBbEY7WUFFQSxJQUFNMEIseUJBQXlCLEdBQUdQLFNBQVMsQ0FBQ3JCLGlCQUFWLENBQTRCLGNBQTVCLENBQWxDO1lBQ0EsSUFBTTZCLG9CQUFvQixHQUFHRCx5QkFBeUIsQ0FBQ0UsV0FBMUIsV0FBeUNGLHlCQUF5QixDQUFDRyxPQUExQixFQUF6QyxxQkFBN0I7O1lBQ0EsSUFBSUYsb0JBQW9CLEtBQUszRSxtQkFBbUIsQ0FBQzhFLEtBQWpELEVBQXdEO2NBQ3ZELEtBQUtDLHNCQUFMLEdBQThCLElBQTlCO1lBQ0E7O1lBQ0QsSUFBSUosb0JBQW9CLEtBQUszRSxtQkFBbUIsQ0FBQ2dGLEtBQWpELEVBQXdEO2NBQ3ZELEtBQUtDLHNCQUFMLEdBQThCLElBQTlCO1lBQ0E7VUFDRCxDQXZCbUMsQ0F3QnBDOzs7VUFDQUMsU0FBUyxDQUFDQyxxQkFBVixDQUFnQ3ZDLFVBQWhDLEVBQ0V3QyxJQURGLENBQ08sVUFBQ0MsY0FBRCxFQUF5QjtZQUM5QixNQUFJLENBQUNDLG1CQUFMLEdBQTJCRCxjQUFjLENBQUNFLE1BQTFDO1VBQ0EsQ0FIRixFQUlFQyxLQUpGLENBSVEsVUFBVUMsTUFBVixFQUF1QjtZQUM3QkMsR0FBRyxDQUFDQyxLQUFKLENBQVUsMkNBQVYsRUFBdURGLE1BQXZEO1VBQ0EsQ0FORjs7VUFPQSxJQUFLLEtBQUtoRixPQUFMLEdBQWVtRixXQUFmLEVBQUQsQ0FBc0NDLFFBQXRDLEtBQW1ELEtBQXZELEVBQThEO1lBQzdELEtBQUs5QixlQUFMLEdBQXVCQyxjQUF2QjtVQUNBOztVQUVELElBQUk4QixNQUFNLENBQUNDLEtBQVgsRUFBa0I7WUFDakIsSUFBTUMsWUFBWSxHQUFHLEtBQUtDLDRCQUFMLEVBQXJCOztZQUNBRCxZQUFZLENBQUNFLGlCQUFiLENBQStCLEtBQS9CO1VBQ0E7UUFDRCxDQW5GUzs7UUFvRlY7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtRQUNFQyw4QkEvRlUsWUFnR1RDLFdBaEdTLEVBaUdUQyxlQWpHUyxFQWtHVEMsUUFsR1MsRUFtR1RDLFdBbkdTLEVBb0dSO1VBQ0QsT0FBT0gsV0FBVyxDQUFDSSxzQkFBWixDQUFtQ0wsOEJBQW5DLENBQWtFQyxXQUFsRSxFQUErRUMsZUFBL0UsRUFBZ0dDLFFBQWhHLEVBQTBHQyxXQUExRyxDQUFQO1FBQ0EsQ0F0R1M7UUF1R1ZFLHVCQXZHVSxZQXVHMEM5RCxNQXZHMUMsRUF1R3VEO1VBQ2hFLElBQU13QixTQUFTLEdBQUd4QixNQUFNLENBQUNXLFNBQVAsR0FBbUJvRCxVQUFuQixFQUFsQjtVQUFBLElBQ0NDLE1BQU0sR0FBRyxLQUFLQyxTQUFMLEVBRFY7VUFBQSxJQUVDQyxLQUFLLEdBQUdsRSxNQUFNLENBQUNRLFlBQVAsQ0FBb0IsTUFBcEIsQ0FGVDtVQUFBLElBR0NOLHFCQUFxQixHQUFHLEtBQUtwQyxPQUFMLEdBQWVxQyxpQkFBZixDQUFpQyxVQUFqQyxDQUh6Qjs7VUFJQSxJQUFJK0QsS0FBSixFQUFXO1lBQ1Y7WUFDQUMsWUFBWSxDQUFDQyxhQUFiLENBQTJCcEUsTUFBM0IsRUFGVSxDQUdWOztZQUNBcUUsVUFBVSxDQUFDQyxlQUFYLENBQTJCOUMsU0FBM0I7VUFDQTs7VUFDRCxJQUFNUSxvQkFBb0IsR0FBRzlCLHFCQUFxQixDQUFDK0IsV0FBdEIsV0FBcUMvQixxQkFBcUIsQ0FBQ2dDLE9BQXRCLEVBQXJDLHFCQUE3Qjs7VUFDQSxJQUFJRixvQkFBb0IsS0FBSzNFLG1CQUFtQixDQUFDOEUsS0FBakQsRUFBd0Q7WUFDdkQsS0FBS0Msc0JBQUwsR0FBOEIsSUFBOUI7VUFDQSxDQUZELE1BRU8sSUFBSTRCLE1BQUosRUFBWTtZQUNqQkEsTUFBRCxDQUFnQk8sTUFBaEI7WUFDQSxLQUFLbkMsc0JBQUwsR0FBOEIsS0FBOUI7VUFDQTtRQUNELENBekhTO1FBMEhWb0Msd0JBMUhVLFlBMEgyQ3hFLE1BMUgzQyxFQTBId0Q7VUFDakUsSUFBTXlFLFlBQVksR0FBR3pFLE1BQU0sQ0FBQzBFLFdBQVAsQ0FBbUJDLEdBQW5CLEdBQXlCM0UsTUFBTSxDQUFDMEUsV0FBUCxDQUFtQkMsR0FBNUMsR0FBa0QsSUFBdkU7VUFDQSxJQUFNekUscUJBQXFCLEdBQUcsS0FBS3BDLE9BQUwsR0FBZXFDLGlCQUFmLENBQWlDLFVBQWpDLENBQTlCO1VBQ0FELHFCQUFxQixDQUFDRyxXQUF0QixDQUFrQyxnQkFBbEMsRUFBb0RvRSxZQUFwRDtVQUNBLElBQU1HLE1BQU0sR0FBRyxLQUFLbkQsZUFBTCxFQUFmOztVQUNBLElBQU11QyxNQUFNLEdBQUcsS0FBS0MsU0FBTCxFQUFmOztVQUNBLElBQU1ZLHdCQUF3QixHQUFHO1lBQ2hDQyxnQkFEZ0MsY0FDYjtjQUNsQixJQUFNQyxNQUFNLEdBQUdDLGdCQUFnQixDQUFDQyxRQUFqQixFQUFmO2NBQ0FGLE1BQU0sQ0FBQ0csT0FBUCxDQUFlLFVBQVVDLEtBQVYsRUFBc0I7Z0JBQ3BDLElBQUlBLEtBQUssQ0FBQ0MsTUFBTixPQUFtQlgsWUFBdkIsRUFBcUM7a0JBQ3BDVSxLQUFLLENBQUNFLEtBQU47Z0JBQ0E7Y0FDRCxDQUpEO2NBS0FMLGdCQUFnQixDQUFDTSxtQkFBakIsQ0FBcUNULHdCQUFyQztZQUNBO1VBVCtCLENBQWpDO1VBV0EsSUFBTUcsZ0JBQWdCLEdBQ3JCUCxZQUFZLEtBQUtwSCxtQkFBbUIsQ0FBQ2dGLEtBQXJDLEdBQTZDLEtBQUtrRCxtQkFBTCxDQUF5QixPQUF6QixDQUE3QyxHQUFpRixLQUFLQSxtQkFBTCxDQUF5QixPQUF6QixDQURsRjs7VUFHQSxJQUFJUCxnQkFBZ0IsS0FBS2hGLE1BQU0sQ0FBQ1csU0FBUCxFQUF6QixFQUE2QztZQUM1Q3FFLGdCQUFnQixDQUFDUSxnQkFBakIsQ0FBa0NYLHdCQUFsQztVQUNBOztVQUNELFFBQVFKLFlBQVI7WUFDQyxLQUFLcEgsbUJBQW1CLENBQUNnRixLQUF6QjtjQUNDLEtBQUtvRCxZQUFMLENBQWtCekIsTUFBbEI7O2NBQ0E7O1lBQ0QsS0FBSzNHLG1CQUFtQixDQUFDOEUsS0FBekI7Y0FDQyxLQUFLdUQsWUFBTCxDQUFrQmQsTUFBbEI7O2NBQ0E7O1lBQ0QsS0FBS3ZILG1CQUFtQixDQUFDc0ksTUFBekI7Y0FDQyxLQUFLRixZQUFMLENBQWtCekIsTUFBbEI7O2NBQ0EsS0FBSzBCLFlBQUwsQ0FBa0JkLE1BQWxCOztjQUNBOztZQUNEO2NBQ0M7VUFaRjs7VUFjQSxLQUFLeEQsZUFBTCxHQUF1QkMsY0FBdkI7UUFDQSxDQWhLUztRQWlLVnVFLCtCQWpLVSxZQWlLa0Q1RixNQWpLbEQsRUFpSytEO1VBQ3hFLElBQU02RixTQUFTLEdBQUc3RixNQUFNLENBQUNRLFlBQVAsQ0FBb0IsS0FBcEIsTUFBK0IsU0FBakQ7O1VBQ0EsS0FBS1gsb0JBQUwsR0FBNEJpRyxVQUE1QixDQUF1Q0QsU0FBdkM7O1VBQ0MsS0FBS0UsMEJBQUwsRUFBRCxDQUErQ0QsVUFBL0MsQ0FBMEQsQ0FBQ0QsU0FBM0Q7UUFDQSxDQXJLUztRQXNLVkcsYUF0S1UsY0FzS2dDO1VBQ3pDLEtBQUs1RSxlQUFMLEdBQXVCQyxjQUF2QjtRQUNBLENBeEtTO1FBeUtWNEUsOEJBektVLFlBeUtpRGpHLE1BektqRCxFQXlLOEQ7VUFDdkUsSUFBTWtHLFNBQWMsR0FBRyxLQUFLckcsb0JBQUwsRUFBdkI7O1VBQ0EsSUFBSXFHLFNBQVMsSUFBSUEsU0FBUyxDQUFDQyxrQkFBVixFQUFqQixFQUFpRDtZQUNoRCxJQUFJbkcsTUFBTSxDQUFDUSxZQUFQLENBQW9CLFlBQXBCLENBQUosRUFBdUM7Y0FDdEMwRixTQUFTLENBQUNDLGtCQUFWLEdBQStCTCxVQUEvQixDQUEwQyxJQUExQztZQUNBLENBRkQsTUFFTztjQUNOSSxTQUFTLENBQUNDLGtCQUFWLEdBQStCTCxVQUEvQixDQUEwQyxLQUExQztZQUNBO1VBQ0Q7UUFDRDtNQWxMUyxDO1lBb0xYTSxVLEdBQWE7UUFDWkMseUJBRFksWUFDMENDLGNBRDFDLEVBQ2lFQyxRQURqRSxFQUNnRkMsZUFEaEYsRUFDdUc7VUFDbEgsSUFBSUMsS0FBSyxHQUFHLEVBQVo7VUFDQUYsUUFBUSxHQUFHQSxRQUFRLEtBQUssTUFBYixJQUF1QkEsUUFBUSxLQUFLLElBQS9DOztVQUNBLElBQU10RyxVQUFVLEdBQUcsS0FBS0osb0JBQUwsRUFBbkI7O1VBQ0EsSUFBSUksVUFBVSxJQUFJeUcsS0FBSyxDQUFDQyxPQUFOLENBQWNMLGNBQWQsQ0FBZCxJQUErQ0EsY0FBYyxDQUFDTSxNQUFmLEdBQXdCLENBQXZFLElBQTRFTCxRQUFoRixFQUEwRjtZQUN6RixJQUFNTSxjQUFjLEdBQUdDLFlBQVksQ0FBQ0MsU0FBYixDQUN0QlQsY0FEc0IsRUFFdEJyRyxVQUFVLENBQUMrRyxJQUFYLENBQWdCLFlBQWhCLENBRnNCLEVBR3RCL0csVUFIc0IsRUFJdEIsS0FBS2dILGVBSmlCLENBQXZCO1lBTUEsSUFBTUMsZ0JBQWdCLEdBQUcsQ0FBQ1YsZUFBZSxDQUFDVyxZQUExQztZQUNBVixLQUFLLEdBQUdGLFFBQVEsR0FDYk8sWUFBWSxDQUFDTSxVQUFiLENBQXdCUCxjQUF4QixFQUF3QzVHLFVBQXhDLEVBQW9EaUgsZ0JBQXBELENBRGEsR0FFYkosWUFBWSxDQUFDTyxPQUFiLENBQXFCUixjQUFyQixFQUFxQzVHLFVBQXJDLEVBQWlELEVBQWpELEVBQXFEcUgsWUFBWSxDQUFDQyxnQkFBbEUsQ0FGSDtZQUdBLE9BQU9kLEtBQVA7VUFDQTtRQUNEO01BbEJXLEM7Ozs7OztXQTlzQmJyRixlLEdBRkEsMkJBRWdDO01BQy9CLElBQUksQ0FBQyxLQUFLb0csWUFBVixFQUF3QjtRQUN2QixLQUFLQSxZQUFMLEdBQW9CLElBQUlDLFlBQUosQ0FBaUIsSUFBakIsQ0FBcEI7TUFDQTs7TUFDRCxPQUFPLEtBQUtELFlBQVo7SUFDQSxDOztXQUVERSxNLEdBQUEsa0JBQVM7TUFDUkMsY0FBYyxDQUFDQyxTQUFmLENBQXlCRixNQUF6QixDQUFnQ0csS0FBaEMsQ0FBc0MsSUFBdEM7TUFDQSxJQUFNM0gscUJBQXFCLEdBQUcsS0FBS3BDLE9BQUwsR0FBZXFDLGlCQUFmLENBQWlDLFVBQWpDLENBQTlCO01BRUFELHFCQUFxQixDQUFDRyxXQUF0QixDQUFrQyxtQkFBbEMsRUFBdUQsSUFBdkQ7TUFDQUgscUJBQXFCLENBQUNHLFdBQXRCLENBQWtDLGdCQUFsQyxFQUFvRCxFQUFwRDtNQUNBSCxxQkFBcUIsQ0FBQ0csV0FBdEIsQ0FBa0MsZUFBbEMsRUFBbUQsS0FBbkQ7TUFDQUgscUJBQXFCLENBQUNHLFdBQXRCLENBQWtDLEtBQWxDLEVBQXlDLEVBQXpDO01BQ0FILHFCQUFxQixDQUFDRyxXQUF0QixDQUFrQyxhQUFsQyxFQUFpRCxFQUFqRDtNQUNBSCxxQkFBcUIsQ0FBQ0csV0FBdEIsQ0FBa0MsbUJBQWxDLEVBQXVELEVBQXZEO01BQ0FILHFCQUFxQixDQUFDRyxXQUF0QixDQUFrQyxVQUFsQyxFQUE4QyxFQUE5Qzs7TUFFQSxJQUFJLEtBQUt5SCx1QkFBTCxFQUFKLEVBQW9DO1FBQ25DLElBQUlDLGNBQWMsR0FBRyxLQUFLQyxlQUFMLEVBQXJCOztRQUNBLElBQUksQ0FBQzdFLE1BQU0sQ0FBQzhFLE9BQVIsSUFBbUJGLGNBQWMsS0FBSzFLLG1CQUFtQixDQUFDc0ksTUFBOUQsRUFBc0U7VUFDckVvQyxjQUFjLEdBQUcxSyxtQkFBbUIsQ0FBQzhFLEtBQXJDO1FBQ0E7O1FBQ0RqQyxxQkFBcUIsQ0FBQ0csV0FBdEIsQ0FBa0MsZ0JBQWxDLEVBQW9EMEgsY0FBcEQ7TUFDQSxDQWxCTyxDQW9CUjtNQUNBOzs7TUFDQSxLQUFLcEYsbUJBQUwsR0FBMkIsRUFBM0IsQ0F0QlEsQ0F3QlI7TUFDQTs7TUFDQSxLQUFLdUYsZUFBTCxHQUF1QkMsY0FBdkIsR0FBd0NDLGlDQUF4QyxHQTFCUSxDQTRCUjs7TUFDQSxLQUFLQyxZQUFMO0lBQ0EsQzs7V0FFREMsTSxHQUFBLGtCQUFTO01BQ1IsT0FBTyxLQUFLM0YsbUJBQVo7O01BQ0EsSUFBSSxLQUFLNkUsWUFBVCxFQUF1QjtRQUN0QixLQUFLQSxZQUFMLENBQWtCZSxPQUFsQjtNQUNBOztNQUNELE9BQU8sS0FBS2YsWUFBWjtJQUNBLEM7O1dBRUR4SixlLEdBQUEsMkJBQWtCO01BQUE7O01BQ2pCLElBQU13SyxPQUFPLEdBQUcsS0FBS0MsWUFBTCxDQUFrQixPQUFsQixDQUFoQjs7TUFDQSxJQUFJQyxTQUFTLENBQUNDLGdCQUFWLEVBQUosRUFBa0M7UUFBQTs7UUFDakMsOEJBQUs3SCxvQkFBTCxrRkFBNkJDLGlCQUE3QjtRQUNBLElBQU02SCxhQUFhLHNCQUFHLEtBQUszRSxTQUFMLEVBQUgsb0RBQUcsZ0JBQWtCNEUsYUFBbEIsRUFBdEI7O1FBQ0EsSUFBSUQsYUFBSixFQUFtQjtVQUNsQixJQUFJRSxXQUFXLENBQUNaLGVBQVosQ0FBNEIsS0FBS3BLLE9BQUwsRUFBNUIsRUFBNENpTCxhQUE1QyxFQUFKLEVBQWlFO1lBQ2hFO1lBQ0FILGFBQWEsQ0FBQ0ksT0FBZDtVQUNBLENBSEQsTUFHTztZQUNOLElBQUksQ0FBQyxLQUFLQyxZQUFWLEVBQXdCO2NBQ3ZCLEtBQUtBLFlBQUwsR0FBb0JoSSxVQUFVLENBQUMsWUFBTTtnQkFDcEMySCxhQUFhLENBQUNJLE9BQWQ7Z0JBQ0EsT0FBTyxNQUFJLENBQUNDLFlBQVo7Y0FDQSxDQUg2QixFQUczQixDQUgyQixDQUE5QjtZQUlBLENBTkssQ0FRTjs7O1lBQ0EsSUFBTUMsb0JBQW9CLEdBQUcsWUFBTTtjQUNsQyxNQUFJLENBQUNDLG1CQUFMLENBQXlCWCxPQUF6Qjs7Y0FDQUksYUFBYSxDQUFDUSxrQkFBZCxDQUFpQ0Ysb0JBQWpDO1lBQ0EsQ0FIRDs7WUFJQU4sYUFBYSxDQUFDUyxrQkFBZCxDQUFpQ0gsb0JBQWpDO1VBQ0E7UUFDRDs7UUFDRFIsU0FBUyxDQUFDWSxxQkFBVjtNQUNBOztNQUVELElBQUksQ0FBQyxLQUFLTCxZQUFWLEVBQXdCO1FBQ3ZCLEtBQUtFLG1CQUFMLENBQXlCWCxPQUF6QjtNQUNBOztNQUVELEtBQUtlLFNBQUwsQ0FBZUMsT0FBZixDQUF1QixLQUFLdEIsZUFBTCxHQUF1QnVCLGtCQUF2QixHQUE0Q0MsYUFBNUMsRUFBdkI7SUFDQSxDOztXQUVEQyxpQixHQUFBLDZCQUFvQjtNQUNuQmhDLGNBQWMsQ0FBQ0MsU0FBZixDQUF5QitCLGlCQUF6QixDQUEyQzlCLEtBQTNDLENBQWlELElBQWpEO0lBQ0EsQzs7V0FFRC9DLGdCLEdBQUEsNEJBQW1CO01BQUE7O01BQ2hCLEtBQUtoSCxPQUFMLEdBQWU4TCxRQUFmLENBQXdCLGFBQXhCLENBQUQsQ0FBMERDLGlCQUExRCxFQUFELENBQ0VwSCxJQURGLENBQ08sVUFBQ3FILFFBQUQsRUFBbUI7UUFDeEIsTUFBSSxDQUFDN0MsZUFBTCxHQUF1QjZDLFFBQXZCOztRQUNBLElBQU10QixPQUFPLEdBQUcsTUFBSSxDQUFDQyxZQUFMLEVBQWhCOztRQUNBLElBQU1zQixVQUFVLEdBQUksTUFBSSxDQUFDak0sT0FBTCxHQUFlbUYsV0FBZixFQUFELENBQXNDK0csU0FBekQ7O1FBQ0EsSUFBTXZELEtBQUssR0FBR3FDLFdBQVcsQ0FBQ21CLGlCQUFaLENBQ2IsZ0NBRGEsRUFFYixNQUFJLENBQUNoRCxlQUZRLEVBR2JpRCxTQUhhLEVBSWJILFVBSmEsQ0FBZDtRQU1BdkIsT0FBTyxDQUFDdEQsT0FBUixDQUFnQixVQUFVbEIsTUFBVixFQUF5QjtVQUN4Q0EsTUFBTSxDQUFDbUcsU0FBUCxDQUFpQjFELEtBQWpCO1FBQ0EsQ0FGRDtNQUdBLENBZEYsRUFlRTVELEtBZkYsQ0FlUSxVQUFVQyxNQUFWLEVBQXVCO1FBQzdCQyxHQUFHLENBQUNDLEtBQUosQ0FBVSw0Q0FBVixFQUF3REYsTUFBeEQ7TUFDQSxDQWpCRjtJQWtCQSxDOztXQUlEc0gsVyxHQUZBLHFCQUVZMUYsV0FGWixFQUU4QjtNQUM3QixJQUFJQSxXQUFXLENBQUMyRixVQUFoQixFQUE0QjtRQUMzQixLQUFLQyxnQkFBTDtNQUNBLENBSDRCLENBSTdCOzs7TUFDQSxLQUFLcEMsZUFBTCxHQUF1QnFDLGdCQUF2QixHQUEwQ0MsaUJBQTFDLENBQTRETixTQUE1RDtJQUNBO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztZQUdDO0lBQ0FPLGtCLEdBSEEsNEJBR21CL0YsV0FIbkIsRUFHcUM7TUFDcEM7SUFDQTtJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztXQUdDdEUsZ0IsR0FGQSw0QkFFbUI7TUFDbEI7SUFDQSxDOztXQUVEaEMsbUIsR0FBQSwrQkFBc0I7TUFBQTs7TUFDckIsMkJBQU8sS0FBSzZGLFNBQUwsRUFBUCxxREFBTyxpQkFBa0IrQyxJQUFsQixDQUF1QixzQkFBdkIsRUFBK0MwRCxLQUEvQyxDQUFxRCxDQUFyRCxDQUFQO0lBQ0E7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztXQUNDdkIsbUIsR0FBQSw2QkFBb0JYLE9BQXBCLEVBQWtDO01BQ2pDLElBQUltQyxXQUFrQixHQUFHLEVBQXpCO01BQ0FuQyxPQUFPLENBQUN0RCxPQUFSLENBQWdCLFVBQVVsQixNQUFWLEVBQXVCO1FBQ3RDMkcsV0FBVyxHQUFHN0IsV0FBVyxDQUFDOEIsYUFBWixDQUEwQjVHLE1BQTFCLEVBQWtDMkcsV0FBbEMsQ0FBZCxDQURzQyxDQUV0QztRQUNBOztRQUNBLElBQU16SyxxQkFBcUIsR0FBRzhELE1BQU0sQ0FBQzdELGlCQUFQLENBQXlCLFVBQXpCLENBQTlCO1FBQUEsSUFDQzBLLDRCQUE0QixHQUFHQyxJQUFJLENBQUNDLEtBQUwsQ0FDOUJDLFlBQVksQ0FBQ0MsZUFBYixDQUE2QjNELFlBQVksQ0FBQzRELGFBQWIsQ0FBMkJsSCxNQUEzQixFQUFtQyx1QkFBbkMsQ0FBN0IsQ0FEOEIsQ0FEaEM7UUFBQSxJQUlDbUgsaUJBQWlCLEdBQUduSCxNQUFNLENBQUNvSCxtQkFBUCxFQUpyQjtRQU1BbEwscUJBQXFCLENBQUNHLFdBQXRCLENBQWtDLGtCQUFsQyxFQUFzRDhLLGlCQUF0RDtRQUNBakwscUJBQXFCLENBQUNHLFdBQXRCLENBQWtDLDBCQUFsQyxFQUE4RDhLLGlCQUFpQixDQUFDdkUsTUFBaEY7UUFDQXlFLFdBQVcsQ0FBQ0MseUNBQVosQ0FBc0R0SCxNQUF0RCxFQUE4RDlELHFCQUE5RDtRQUNBcUwsYUFBYSxDQUFDQyxtQkFBZCxDQUFrQ3RMLHFCQUFsQyxFQUF5RDJLLDRCQUF6RCxFQUF1Rk0saUJBQXZGLEVBQTBHLE9BQTFHO01BQ0EsQ0FkRDtNQWVBckMsV0FBVyxDQUFDMkMsc0NBQVosQ0FBbURkLFdBQW5ELEVBQWdFLEtBQUs3TSxPQUFMLEVBQWhFO0lBQ0E7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O1dBQ0M0TixrQixHQUFBLDRCQUFtQkMsUUFBbkIsRUFBcUM7TUFDcEMsS0FBS2xELFlBQUwsQ0FBa0IsT0FBbEIsRUFBMkJ2RCxPQUEzQixDQUFtQyxVQUFVbEIsTUFBVixFQUF1QjtRQUN6RDRILGFBQWEsQ0FBQ0MsZ0JBQWQsQ0FBK0I3SCxNQUEvQixFQUF1QzJILFFBQXZDO01BQ0EsQ0FGRDtJQUdBO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7V0FDQ3JCLGdCLEdBQUEsNEJBQW1CO01BQ2xCLElBQU13QixXQUFXLEdBQUcsS0FBS3hJLDRCQUFMLEVBQXBCO01BQUEsSUFDQ3lJLGdCQUFnQixHQUFHRCxXQUFXLENBQUNFLGlCQUFaLEVBRHBCO01BQUEsSUFFQzlGLFNBQVMsR0FBRyxLQUFLckcsb0JBQUwsRUFGYjs7TUFHQSxJQUFJcUcsU0FBSixFQUFlO1FBQ2QsSUFBSTZGLGdCQUFKLEVBQXNCO1VBQ3JCO1VBQ0EsSUFBSSxDQUFDN0YsU0FBUyxDQUFDK0YsZUFBVixFQUFMLEVBQWtDO1lBQ2pDL0YsU0FBUyxDQUFDZ0csZUFBVixDQUEwQixJQUExQjtVQUNBOztVQUNELElBQU1DLHdCQUF3QixHQUFHakcsU0FBUyxDQUFDa0csY0FBVixHQUEyQkMsSUFBM0IsQ0FBZ0MsVUFBVUMsV0FBVixFQUE0QjtZQUM1RixPQUFPQSxXQUFXLENBQUNDLFdBQVosTUFBNkJELFdBQVcsQ0FBQ3pLLGFBQVosR0FBNEIrRSxNQUE1QixLQUF1QyxDQUEzRTtVQUNBLENBRmdDLENBQWpDLENBTHFCLENBUXJCOztVQUNBLElBQUl1Rix3QkFBSixFQUE4QjtZQUM3QkEsd0JBQXdCLENBQUM5RyxLQUF6QjtVQUNBLENBRkQsTUFFTyxJQUFJLEtBQUttSCxrQkFBTCxFQUFKLEVBQStCO1lBQ3JDdEcsU0FBUyxDQUFDa0csY0FBVixHQUEyQixDQUEzQixFQUE4Qi9HLEtBQTlCO1VBQ0EsQ0FGTSxNQUVBO1lBQ047WUFDQSxLQUFLdkgsT0FBTCxHQUFlNEIsSUFBZixXQUF1QixLQUFLK00sc0JBQUwsRUFBdkIsaUJBQWtFcEgsS0FBbEU7VUFDQTtRQUNELENBakJELE1BaUJPLElBQUksS0FBS21ILGtCQUFMLEVBQUosRUFBK0I7VUFBQTs7VUFDckMseUJBQUt2SSxTQUFMLHdFQUFrQnlJLFFBQWxCLENBQTJCLENBQTNCO1FBQ0E7TUFDRCxDQXJCRCxNQXFCTztRQUFBOztRQUNOLHlCQUFLekksU0FBTCx3RUFBa0J5SSxRQUFsQixDQUEyQixDQUEzQjtNQUNBO0lBQ0QsQzs7V0FFREMsd0IsR0FBQSxvQ0FBMkI7TUFDMUIsSUFBTUMsY0FBYyxHQUFHLEtBQUsxRSxlQUFMLEdBQXVCMkUsZ0JBQXZCLENBQXdDLFNBQXhDLENBQXZCO01BQ0EsT0FBTztRQUNOQyxLQUFLLEVBQUVGLGNBQWMsQ0FBQ0UsS0FEaEI7UUFFTkMsUUFBUSxFQUFFSCxjQUFjLENBQUNJLFdBQWYsSUFBOEIsRUFGbEM7UUFHTkMsTUFBTSxFQUFFLEVBSEY7UUFJTkMsSUFBSSxFQUFFO01BSkEsQ0FBUDtJQU1BLEM7O1dBRURyTixvQixHQUFBLGdDQUF1QjtNQUN0QixPQUFPLEtBQUsvQixPQUFMLEdBQWU0QixJQUFmLENBQW9CLEtBQUsrTSxzQkFBTCxFQUFwQixDQUFQO0lBQ0EsQzs7V0FFRG5KLDRCLEdBQUEsd0NBQStCO01BQzlCLE9BQU8sS0FBS3hGLE9BQUwsR0FBZTRCLElBQWYsQ0FBb0IsS0FBS3lOLDhCQUFMLEVBQXBCLENBQVA7SUFDQSxDOztXQUVEQyw4QixHQUFBLDBDQUFpQztNQUNoQztNQUNBO01BQ0EsSUFBTUMsbUJBQW1CLEdBQUksS0FBS3hOLG9CQUFMLEVBQUQsQ0FBcUN5TixnQkFBckMsRUFBNUI7O01BQ0EsT0FBT0QsbUJBQW1CLFNBQW5CLElBQUFBLG1CQUFtQixXQUFuQixJQUFBQSxtQkFBbUIsQ0FBRUUsU0FBckIsS0FBbUNGLG1CQUFuQyxHQUF5RG5ELFNBQWhFO0lBQ0EsQzs7V0FFRDNFLG1CLEdBQUEsNkJBQW9CaUksUUFBcEIsRUFBbUM7TUFBQTs7TUFDbEMsSUFBTUMsa0JBQWtCLFdBQUlELFFBQVEsS0FBSyxPQUFiLEdBQXVCLEtBQUsvTCxlQUFMLEVBQXZCLEdBQWdELEtBQUt3QyxTQUFMLEVBQXBELHlDQUFHLEtBQW9FK0MsSUFBcEUsQ0FBeUUsbUJBQXpFLENBQTNCO01BQ0EsT0FBTyxLQUFLbEosT0FBTCxHQUFlNEIsSUFBZixDQUFvQitOLGtCQUFwQixDQUFQO0lBQ0EsQzs7V0FFREMsZ0MsR0FBQSwwQ0FBaUNDLEtBQWpDLEVBQWdEO01BQUE7O01BQy9DLElBQU1DLFNBQVMsMEJBQUcsS0FBS0MsYUFBTCxFQUFILHdEQUFHLG9CQUFzQjVMLFdBQXRCLENBQWtDMEwsS0FBbEMsQ0FBbEI7TUFDQSxPQUFPQyxTQUFTLElBQUksS0FBSzlQLE9BQUwsR0FBZTRCLElBQWYsQ0FBb0JrTyxTQUFwQixDQUFwQjtJQUNBLEM7O1dBRURDLGEsR0FBQSx5QkFBdUM7TUFDdEMsSUFBTUMsYUFBYSxHQUFHQyxTQUFTLENBQUNDLG9CQUFWLENBQStCLEtBQUtsUSxPQUFMLEVBQS9CLENBQXRCO01BQ0EsT0FBT2dRLGFBQWEsQ0FBQ2xFLFFBQWQsQ0FBdUIsWUFBdkIsQ0FBUDtJQUNBLEM7O1dBRUR1RCw4QixHQUFBLDBDQUF5QztNQUFBOztNQUN4QyxPQUFPLDhCQUFLVSxhQUFMLGdGQUFzQjVMLFdBQXRCLENBQWtDLHNCQUFsQyxNQUE2RCxFQUFwRTtJQUNBLEM7O1dBRUR3SyxzQixHQUFBLGtDQUFpQztNQUFBOztNQUNoQyxPQUFPLDhCQUFLb0IsYUFBTCxnRkFBc0I1TCxXQUF0QixDQUFrQyxjQUFsQyxNQUFxRCxFQUE1RDtJQUNBLEM7O1dBRURSLGUsR0FBQSwyQkFBa0I7TUFDakIsT0FBTyxLQUFLaU0sZ0NBQUwsQ0FBc0MsZ0JBQXRDLENBQVA7SUFDQSxDOztXQUVEM0gsMEIsR0FBQSxzQ0FBNkI7TUFDNUIsSUFBTWtJLGtCQUFrQixHQUFHQyxjQUFjLENBQUNDLFFBQWYsQ0FBd0IsQ0FBQyxjQUFELEVBQWlCLEtBQUsxQixzQkFBTCxFQUFqQixDQUF4QixDQUEzQjtNQUNBLE9BQU93QixrQkFBa0IsSUFBSSxLQUFLblEsT0FBTCxHQUFlNEIsSUFBZixDQUFvQnVPLGtCQUFwQixDQUE3QjtJQUNBLEM7O1dBQ0RHLDJCLEdBQUEsdUNBQThCO01BQzdCLE9BQU8sS0FBS1YsZ0NBQUwsQ0FBc0MsdUJBQXRDLENBQVA7SUFDQSxDOztXQUVENU0sb0IsR0FBQSxnQ0FBdUI7TUFDdEIsT0FBTyxLQUFLaEQsT0FBTCxHQUFlNEIsSUFBZixDQUFvQiw4QkFBcEIsQ0FBUDtJQUNBLEM7O1dBRUR1RSxTLEdBQUEscUJBQStCO01BQzlCLElBQUksS0FBS29LLFlBQUwsRUFBSixFQUF5QjtRQUFBOztRQUN4QixJQUFNQyxRQUFRLDZCQUFHLEtBQUt4TixvQkFBTCxFQUFILHFGQUFHLHVCQUE2QnlOLHVCQUE3QixFQUFILDJEQUFHLHVCQUF3REMsT0FBekU7UUFDQSxPQUFPRixRQUFRLFNBQVIsSUFBQUEsUUFBUSxXQUFSLElBQUFBLFFBQVEsQ0FBRUcsR0FBVixDQUFjLGtCQUFkLElBQXFDSCxRQUFyQyxHQUEwRHBFLFNBQWpFO01BQ0EsQ0FIRCxNQUdPO1FBQ04sT0FBTyxLQUFLd0QsZ0NBQUwsQ0FBc0MsZ0JBQXRDLENBQVA7TUFDQTtJQUNELEM7O1dBQ0RqRixZLEdBQUEsc0JBQWFpRyxJQUFiLEVBQXlCO01BQUE7O01BQ3hCLElBQUksS0FBS0wsWUFBTCxFQUFKLEVBQXlCO1FBQ3hCLElBQU1NLFNBQWdCLEdBQUcsRUFBekI7O1FBQ0EsSUFBTUMsYUFBYSxHQUFHLEtBQUs5TixvQkFBTCxHQUE0QjBOLE9BQWxEOztRQUNBSSxhQUFhLENBQUMzSixRQUFkLEdBQXlCQyxPQUF6QixDQUFpQyxVQUFDQyxLQUFELEVBQWdCO1VBQ2hELElBQU1tSixRQUFRLEdBQUcsTUFBSSxDQUFDeFEsT0FBTCxHQUFlNEIsSUFBZixDQUFvQnlGLEtBQUssQ0FBQ0MsTUFBTixFQUFwQixDQUFqQjs7VUFDQSxJQUFJa0osUUFBUSxJQUFJSSxJQUFoQixFQUFzQjtZQUNyQixJQUFJdkosS0FBSyxDQUFDQyxNQUFOLEdBQWV5SixPQUFmLGVBQThCSCxJQUE5QixLQUF3QyxDQUFDLENBQTdDLEVBQWdEO2NBQy9DQyxTQUFTLENBQUNHLElBQVYsQ0FBZVIsUUFBZjtZQUNBO1VBQ0QsQ0FKRCxNQUlPLElBQUlBLFFBQVEsS0FBS3BFLFNBQWIsSUFBMEJvRSxRQUFRLEtBQUssSUFBM0MsRUFBaUQ7WUFDdkRLLFNBQVMsQ0FBQ0csSUFBVixDQUFlUixRQUFmO1VBQ0E7UUFDRCxDQVREO1FBVUEsT0FBT0ssU0FBUDtNQUNBLENBZEQsTUFjTyxJQUFJRCxJQUFJLEtBQUssT0FBYixFQUFzQjtRQUM1QixJQUFNOUosTUFBTSxHQUFHLEtBQUtuRCxlQUFMLEVBQWY7UUFDQSxPQUFPbUQsTUFBTSxHQUFHLENBQUNBLE1BQUQsQ0FBSCxHQUFjLEVBQTNCO01BQ0EsQ0FITSxNQUdBO1FBQ04sSUFBTVosTUFBTSxHQUFHLEtBQUtDLFNBQUwsRUFBZjs7UUFDQSxPQUFPRCxNQUFNLEdBQUcsQ0FBQ0EsTUFBRCxDQUFILEdBQWMsRUFBM0I7TUFDQTtJQUNELEM7O1dBRURnRSxlLEdBQUEsMkJBQWtCO01BQUE7O01BQ2pCLElBQU0rRyxXQUFXLEdBQUdDLG9CQUFvQixDQUFDQyxjQUFyQixDQUFvQyw4QkFBS3BCLGFBQUwsZ0ZBQXNCNUwsV0FBdEIsQ0FBa0MsUUFBbEMsTUFBK0MsRUFBbkYsQ0FBcEI7O01BQ0EsUUFBUThNLFdBQVI7UUFDQyxLQUFLLFNBQUw7VUFDQyxPQUFPMVIsbUJBQW1CLENBQUM4RSxLQUEzQjs7UUFDRCxLQUFLLFdBQUw7VUFDQyxPQUFPOUUsbUJBQW1CLENBQUNnRixLQUEzQjs7UUFDRCxLQUFLLE1BQUw7UUFDQTtVQUNDLE9BQU9oRixtQkFBbUIsQ0FBQ3NJLE1BQTNCO01BUEY7SUFTQTtJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7V0FDQzBJLFksR0FBQSx3QkFBd0I7TUFBQTs7TUFDdkIsT0FBTyxDQUFDLDBCQUFDLEtBQUtSLGFBQUwsRUFBRCxpREFBQyxxQkFBc0I1TCxXQUF0QixDQUFrQyxvQkFBbEMsQ0FBRCxDQUFSO0lBQ0E7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O1dBQ0N1SyxrQixHQUFBLDhCQUE4QjtNQUM3QixJQUFNMEMsWUFBWSxHQUFJLEtBQUtwUixPQUFMLEdBQWVtRixXQUFmLEVBQUQsQ0FBc0NrTSxXQUEzRDtNQUNBLE9BQU9ELFlBQVksS0FBSzNSLGVBQWUsQ0FBQzZSLE9BQXhDO0lBQ0EsQzs7V0FFRHRILHVCLEdBQUEsbUNBQW1DO01BQUE7O01BQ2xDLCtCQUFPLEtBQUsrRixhQUFMLEVBQVAseURBQU8scUJBQXNCNUwsV0FBdEIsQ0FBa0MseUJBQWxDLENBQVA7SUFDQTtJQUVEO0FBQ0Q7QUFDQTtBQUNBOzs7V0FDQ29OLGdCLEdBQUEsNEJBQW1CO01BQ2xCLElBQU1uSixTQUFTLEdBQUcsS0FBS3JHLG9CQUFMLEVBQWxCLENBRGtCLENBRWxCOzs7TUFDQSxJQUFJcUcsU0FBSixFQUFlO1FBQ2RBLFNBQVMsQ0FBQ29KLG1CQUFWLENBQThCLElBQTlCO01BQ0E7SUFDRDtJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O1dBQ0NDLG9DLEdBQUEsZ0RBQXVDO01BQ3RDO01BQ0EsT0FBTyxLQUFQO0lBQ0E7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O1dBQ0NsSCxZLEdBQUEsd0JBQWU7TUFDZDtNQUNBLElBQUksQ0FBQyxLQUFLbUUsa0JBQUwsRUFBTCxFQUFnQztRQUMvQixLQUFLNkMsZ0JBQUw7TUFDQSxDQUphLENBS2Q7TUFDQTs7O01BQ0EsSUFBTUcsbUJBQXdCLEdBQUdSLG9CQUFvQixDQUFDUyx1QkFBckIsQ0FBNkMsS0FBSzNSLE9BQUwsR0FBZW1GLFdBQWYsRUFBN0MsRUFBMkUsS0FBSzRLLGFBQUwsRUFBM0UsQ0FBakM7TUFDQSxJQUFNNkIsaUJBQWlCLEdBQUdGLG1CQUFtQixJQUFJLEtBQUsxUixPQUFMLEdBQWU0QixJQUFmLENBQW9COFAsbUJBQXBCLENBQWpEOztNQUNBLElBQUlFLGlCQUFKLEVBQXVCO1FBQ3RCQSxpQkFBaUIsQ0FBQ0MsMkNBQWxCLENBQThELEtBQUtKLG9DQUFMLENBQTBDSyxJQUExQyxDQUErQyxJQUEvQyxDQUE5RDtNQUNBO0lBQ0QsQzs7V0FFREMsYyxHQUFBLDBCQUFpQjtNQUNoQjtNQUNBO01BRUEsSUFBTUMsU0FBUyxHQUFHQyxVQUFVLENBQUNDLEdBQVgsQ0FBZSw4QkFBZixDQUFsQixDQUpnQixDQUtoQjtNQUNBO01BRUE7O01BQ0EsSUFBTUMsVUFBVSxHQUFHO1FBQ2xCQyxhQUFhLEVBQUVDLFFBQVEsQ0FBQ3JELEtBRE47UUFDYTtRQUMvQnNELGlCQUFpQixFQUFFLFlBQVk7VUFDOUIsSUFBTUMsS0FBSyxHQUFHQyxNQUFNLENBQUNDLE9BQVAsRUFBZDtVQUNBLE9BQU9GLEtBQUssY0FBT0EsS0FBUCxJQUFpQkcsTUFBTSxDQUFDQyxRQUFQLENBQWdCQyxJQUE3QztRQUNBLENBTGlCOztRQU1sQjtBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO1FBQ0dDLGtCQUFrQixFQUFFLENBQUMsQ0FBQ2IsU0FBRixJQUFlQSxTQUFTLEdBQUdjLFdBQVo7TUFkakIsQ0FBbkI7TUFpQkEsSUFBTUMscUJBQXFCLEdBQUcsS0FBS0MsaUJBQUwsR0FBeUJsSCxRQUF6QixDQUFrQyxZQUFsQyxDQUE5QjtNQUNBaUgscUJBQXFCLENBQUN4USxXQUF0QixDQUFrQyxtQkFBbEMsRUFBdUQ0UCxVQUF2RDtJQUNBO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7V0FDQ25PLDZCLEdBQUEsdUNBQThCNUIscUJBQTlCLEVBQTJFRCxVQUEzRSxFQUFrRztNQUNqRyxJQUFNOFEsTUFBVyxHQUFHLEVBQXBCOztNQUNBLElBQU1DLGFBQWtCLEdBQUcsRUFBM0I7TUFBQSxJQUNDeEksT0FBTyxHQUFHLEtBQUtDLFlBQUwsQ0FBa0IsT0FBbEIsQ0FEWDtNQUFBLElBRUN3SSxPQUFPLEdBQUcsS0FBS3hJLFlBQUwsQ0FBa0IsT0FBbEIsQ0FGWDs7TUFJQSxJQUFJLENBQUNELE9BQU8sQ0FBQzVCLE1BQVQsSUFBbUIsQ0FBQ3FLLE9BQU8sQ0FBQ3JLLE1BQWhDLEVBQXdDO1FBQ3ZDO1FBQ0E7TUFDQSxDQVRnRyxDQVdqRzs7O01BQ0FxSyxPQUFPLENBQUMvTCxPQUFSLENBQWdCLFVBQVVOLE1BQVYsRUFBdUI7UUFDdEMsSUFBTXNNLGdCQUFnQixHQUFHdE0sTUFBTSxDQUFDb0MsSUFBUCxDQUFZLHNCQUFaLENBQXpCO1FBQUEsSUFDQ21LLGVBQWUsR0FBR0QsZ0JBQWdCLENBQUN4RyxLQUFqQixDQUF1QixDQUF2QixDQURuQjtRQUFBLElBRUMwRyxTQUFTLGFBQU1ELGVBQU4sVUFGVjs7UUFHQSxJQUFJLENBQUNKLE1BQU0sQ0FBQ0ssU0FBRCxDQUFYLEVBQXdCO1VBQ3ZCTCxNQUFNLENBQUNLLFNBQUQsQ0FBTixHQUFvQnpQLFdBQVcsQ0FBQzBQLHVCQUFaLENBQW9DcFIsVUFBcEMsRUFBZ0QyRSxNQUFoRCxDQUFwQjtRQUNBOztRQUNEb00sYUFBYSxDQUFDSSxTQUFELENBQWIsR0FBMkJMLE1BQU0sQ0FBQ0ssU0FBRCxDQUFqQztNQUNBLENBUkQ7TUFTQWxSLHFCQUFxQixDQUFDRyxXQUF0QixDQUFrQyx3QkFBbEMsRUFBNEQyUSxhQUE1RDtJQUNBLEM7O1dBRURNLGtCLEdBQUEsOEJBQXFCO01BQ3BCLE9BQVEsS0FBS3hULE9BQUwsR0FBZW1GLFdBQWYsRUFBRCxDQUFzQ3NPLGFBQTdDO0lBQ0EsQzs7V0FFRHBRLCtCLEdBQUEseUNBQWdDcVEsaUJBQWhDLEVBQXdEN00sR0FBeEQsRUFBOEU7TUFDN0UsSUFBSSxDQUFDNk0saUJBQUQsSUFBc0IsQ0FBQzdNLEdBQTNCLEVBQWdDO1FBQy9CLE9BQU8sS0FBUDtNQUNBOztNQUNELElBQU04TSxRQUFRLEdBQUdELGlCQUFpQixDQUFDRSxXQUFsQixFQUFqQjtNQUNBLElBQU1DLGNBQWMsR0FBR0YsUUFBUSxDQUFDcEYsSUFBVCxDQUFjLFVBQVV1RixPQUFWLEVBQXdCO1FBQzVELE9BQU9BLE9BQU8sSUFBSUEsT0FBTyxDQUFDak4sR0FBUixLQUFnQkEsR0FBbEM7TUFDQSxDQUZzQixDQUF2QjtNQUdBLE9BQVFnTixjQUFjLElBQUlBLGNBQWMsQ0FBQ0UsZUFBbEMsSUFBc0QsS0FBN0Q7SUFDQSxDOztXQUVEM1Esd0IsR0FBQSxrQ0FBeUJSLEdBQXpCLEVBQW1DO01BQ2xDLElBQ0UsS0FBSzVDLE9BQUwsR0FBZW1GLFdBQWYsRUFBRCxDQUFzQ2tNLFdBQXRDLEtBQXNENVIsZUFBZSxDQUFDdVUsSUFBdEUsS0FDQyxDQUFDcFIsR0FBRCxJQUFRQSxHQUFHLENBQUNxUixxQkFBSixPQUFnQ3JSLEdBQUcsQ0FBQ3NSLG9CQUFKLEVBRHpDLENBREQsRUFHRTtRQUNELElBQU0vUixVQUFVLEdBQUcsS0FBS0osb0JBQUwsRUFBbkI7O1FBQ0EsSUFBSUksVUFBSixFQUFnQjtVQUNmLElBQU1nUyxXQUFXLEdBQUdoUyxVQUFVLENBQUM0QixhQUFYLEVBQXBCOztVQUNBLEtBQUssSUFBTTZNLElBQVgsSUFBbUJ1RCxXQUFuQixFQUFnQztZQUMvQjtZQUNBLElBQUksQ0FBQ3ZELElBQUksQ0FBQ3dELFVBQUwsQ0FBZ0IsR0FBaEIsQ0FBRCxJQUF5QnhMLEtBQUssQ0FBQ0MsT0FBTixDQUFjc0wsV0FBVyxDQUFDdkQsSUFBRCxDQUF6QixDQUF6QixJQUE2RHVELFdBQVcsQ0FBQ3ZELElBQUQsQ0FBWCxDQUFrQjlILE1BQW5GLEVBQTJGO2NBQzFGO2NBQ0EsSUFBTXVMLGVBQW9CLEdBQUd6UixHQUFHLENBQUNnUixXQUFKLEdBQWtCckYsSUFBbEIsQ0FBdUIsVUFBQ3VGLE9BQUQsRUFBa0I7Z0JBQ3JFLE9BQU9BLE9BQU8sQ0FBQ2pOLEdBQVIsS0FBZ0JqRSxHQUFHLENBQUNzUixvQkFBSixFQUF2QjtjQUNBLENBRjRCLENBQTdCO2NBR0EsT0FBT0csZUFBZSxJQUFJQSxlQUFlLENBQUNOLGVBQTFDO1lBQ0E7VUFDRDtRQUNEO01BQ0Q7O01BQ0QsT0FBTyxLQUFQO0lBQ0EsQzs7V0FFRHBNLFksR0FBQSxzQkFBYXpCLE1BQWIsRUFBMEI7TUFDekIsSUFBSSxDQUFDQSxNQUFNLENBQUNvTyxZQUFQLEVBQUQsSUFBMEIsS0FBS2hRLHNCQUFuQyxFQUEyRDtRQUMxRDRCLE1BQU0sQ0FBQ08sTUFBUDtRQUNBLEtBQUtuQyxzQkFBTCxHQUE4QixLQUE5QjtNQUNBO0lBQ0QsQzs7V0FFRHNELFksR0FBQSxzQkFBYWQsTUFBYixFQUEwQjtNQUN6QixJQUFNeU4sV0FBVyxHQUFHek4sTUFBTSxDQUFDME4sa0JBQVAsR0FBNEJDLFNBQTVCLENBQXNDM04sTUFBdEMsQ0FBcEI7O01BQ0EsSUFBSSxFQUFFeU4sV0FBVyxJQUFJQSxXQUFXLENBQUNHLE9BQVosQ0FBb0IsTUFBcEIsQ0FBakIsS0FBaUQsS0FBS2xRLHNCQUExRCxFQUFrRjtRQUNqRnNDLE1BQU0sQ0FBQzBOLGtCQUFQLEdBQTRCL04sTUFBNUIsQ0FBbUNLLE1BQW5DLEVBQTJDeU4sV0FBVyxDQUFDSSxjQUFaLENBQTJCLE1BQTNCLENBQTNDO1FBQ0EsS0FBS25RLHNCQUFMLEdBQThCLEtBQTlCO01BQ0E7SUFDRCxDOzs7SUF2a0JpQ3FGLGM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztTQW14QnBCbkssb0IifQ==
940
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiQ29yZUxpYnJhcnkiLCJJbml0aWFsTG9hZE1vZGUiLCJMaXN0UmVwb3J0Q29udHJvbGxlciIsImRlZmluZVVJNUNsYXNzIiwidXNpbmdFeHRlbnNpb24iLCJJbnRlcm5hbFJvdXRpbmciLCJvdmVycmlkZSIsIm9uQWZ0ZXJCaW5kaW5nIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJfb25BZnRlckJpbmRpbmciLCJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldEVudGl0eVNldCIsImJhc2UiLCJnZXRDdXJyZW50RW50aXR5U2V0IiwiU2lkZUVmZmVjdHMiLCJJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSIsIlNoYXJlIiwiU2hhcmVPdmVycmlkZXMiLCJFZGl0RmxvdyIsIkVkaXRGbG93T3ZlcnJpZGVzIiwiVmlld1N0YXRlIiwiVmlld1N0YXRlT3ZlcnJpZGVzIiwiS1BJTWFuYWdlbWVudCIsIlBsYWNlaG9sZGVyIiwiTWFzc0VkaXQiLCJwdWJsaWNFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsInByaXZhdGVFeHRlbnNpb24iLCJleHRlbnNpYmxlIiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsImhhbmRsZXJzIiwib25GaWx0ZXJTZWFyY2giLCJfZ2V0RmlsdGVyQmFyQ29udHJvbCIsInRyaWdnZXJTZWFyY2giLCJvbkZpbHRlcnNDaGFuZ2VkIiwib0V2ZW50Iiwib0ZpbHRlckJhciIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwib25QZW5kaW5nRmlsdGVycyIsInNldFByb3BlcnR5IiwiZ2V0QXNzaWduZWRGaWx0ZXJzVGV4dCIsImZpbHRlcnNUZXh0IiwiZ2V0UGFyYW1ldGVyIiwib25WYXJpYW50U2VsZWN0ZWQiLCJvVk0iLCJnZXRTb3VyY2UiLCJjdXJyZW50VmFyaWFudEtleSIsIm9NdWx0aU1vZGVDb250cm9sIiwiX2dldE11bHRpTW9kZUNvbnRyb2wiLCJpbnZhbGlkYXRlQ29udGVudCIsInNldEZyZWV6ZUNvbnRlbnQiLCJzZXRUaW1lb3V0IiwiX3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoIiwiX2dldEFwcGx5QXV0b21hdGljYWxseU9uVmFyaWFudCIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwib25WYXJpYW50U2F2ZWQiLCJvblNlYXJjaCIsIm9NZGNDaGFydCIsImdldENoYXJ0Q29udHJvbCIsImJIaWRlRHJhZnQiLCJGaWx0ZXJVdGlscyIsImdldEVkaXRTdGF0ZUlzSGlkZURyYWZ0IiwiZ2V0Q29uZGl0aW9ucyIsIl91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzIiwib1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dCIsInNUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiZ2V0UHJvcGVydHkiLCJnZXRQYXRoIiwiQ2hhcnQiLCJoYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzIiwiVGFibGUiLCJoYXNQZW5kaW5nVGFibGVDaGFuZ2VzIiwiU3RhdGVVdGlsIiwicmV0cmlldmVFeHRlcm5hbFN0YXRlIiwidGhlbiIsIm9FeHRlcm5hbFN0YXRlIiwiZmlsdGVyQmFyQ29uZGl0aW9ucyIsImZpbHRlciIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJnZXRWaWV3RGF0YSIsImxpdmVNb2RlIiwic3lzdGVtIiwicGhvbmUiLCJvRHluYW1pY1BhZ2UiLCJfZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sIiwic2V0SGVhZGVyRXhwYW5kZWQiLCJvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQiLCJvQ29udHJvbGxlciIsInNPdXRib3VuZFRhcmdldCIsIm9Db250ZXh0Iiwic0NyZWF0ZVBhdGgiLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwib25DaGFydFNlbGVjdGlvbkNoYW5nZWQiLCJnZXRDb250ZW50Iiwib1RhYmxlIiwiX2dldFRhYmxlIiwiYURhdGEiLCJDaGFydFJ1bnRpbWUiLCJmblVwZGF0ZUNoYXJ0IiwiQ2hhcnRVdGlscyIsInNldENoYXJ0RmlsdGVycyIsInJlYmluZCIsIm9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZCIsInNTZWxlY3RlZEtleSIsIm1QYXJhbWV0ZXJzIiwia2V5Iiwib0NoYXJ0Iiwib1NlZ21lbnRlZEJ1dHRvbkRlbGVnYXRlIiwib25BZnRlclJlbmRlcmluZyIsImFJdGVtcyIsIm9TZWdtZW50ZWRCdXR0b24iLCJnZXRJdGVtcyIsImZvckVhY2giLCJvSXRlbSIsImdldEtleSIsImZvY3VzIiwicmVtb3ZlRXZlbnREZWxlZ2F0ZSIsIl9nZXRTZWdtZW50ZWRCdXR0b24iLCJhZGRFdmVudERlbGVnYXRlIiwiX3VwZGF0ZVRhYmxlIiwiX3VwZGF0ZUNoYXJ0IiwiSHlicmlkIiwib25GaWx0ZXJzU2VnbWVudGVkQnV0dG9uUHJlc3NlZCIsImlzQ29tcGFjdCIsInNldFZpc2libGUiLCJfZ2V0VmlzdWFsRmlsdGVyQmFyQ29udHJvbCIsIm9uU3RhdGVDaGFuZ2UiLCJvbkR5bmFtaWNQYWdlVGl0bGVTdGF0ZUNoYW5nZWQiLCJmaWx0ZXJCYXIiLCJnZXRTZWdtZW50ZWRCdXR0b24iLCJmb3JtYXR0ZXJzIiwic2V0QUxQQ29udHJvbE1lc3NhZ2VTdHJpcCIsImFJZ25vcmVkRmllbGRzIiwiYklzQ2hhcnQiLCJvQXBwbHlTdXBwb3J0ZWQiLCJzVGV4dCIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsImFJZ25vcmVkTGFiZWxzIiwiTWVzc2FnZVN0cmlwIiwiZ2V0TGFiZWxzIiwiZGF0YSIsIm9SZXNvdXJjZUJ1bmRsZSIsImJJc1NlYXJjaElnbm9yZWQiLCJlbmFibGVTZWFyY2giLCJnZXRBTFBUZXh0IiwiZ2V0VGV4dCIsIkRlbGVnYXRlVXRpbCIsImdldExvY2FsaXplZFRleHQiLCJleHRlbnNpb25BUEkiLCJFeHRlbnNpb25BUEkiLCJvbkluaXQiLCJQYWdlQ29udHJvbGxlciIsInByb3RvdHlwZSIsImFwcGx5IiwiX2hhc011bHRpVmlzdWFsaXphdGlvbnMiLCJhbHBDb250ZW50VmlldyIsIl9nZXREZWZhdWx0UGF0aCIsImRlc2t0b3AiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRSb3V0ZXJQcm94eSIsIndhaXRGb3JSb3V0ZU1hdGNoQmVmb3JlTmF2aWdhdGlvbiIsIl9zZXRJbml0TG9hZCIsIm9uRXhpdCIsImRlc3Ryb3kiLCJhVGFibGVzIiwiX2dldENvbnRyb2xzIiwiRWRpdFN0YXRlIiwiaXNFZGl0U3RhdGVEaXJ0eSIsIm9UYWJsZUJpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwiQ29tbW9uVXRpbHMiLCJfaXNGY2xFbmFibGVkIiwicmVmcmVzaCIsInNVcGRhdGVUaW1lciIsImZuVXBkYXRlVGFibGVBY3Rpb25zIiwiX3VwZGF0ZVRhYmxlQWN0aW9ucyIsImRldGFjaERhdGFSZWNlaXZlZCIsImF0dGFjaERhdGFSZWNlaXZlZCIsInNldEVkaXRTdGF0ZVByb2Nlc3NlZCIsInBhZ2VSZWFkeSIsIndhaXRGb3IiLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJhcHBseUFwcFN0YXRlIiwib25CZWZvcmVSZW5kZXJpbmciLCJnZXRNb2RlbCIsImdldFJlc291cmNlQnVuZGxlIiwicmVzcG9uc2UiLCJzRW50aXR5U2V0IiwiZW50aXR5U2V0IiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJ1bmRlZmluZWQiLCJzZXROb0RhdGEiLCJvblBhZ2VSZWFkeSIsImZvcmNlRm9jdXMiLCJfc2V0SW5pdGlhbEZvY3VzIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInNldEJhY2tOYXZpZ2F0aW9uIiwib25WaWV3TmVlZHNSZWZyZXNoIiwic2xpY2UiLCJhSUJOQWN0aW9ucyIsImdldElCTkFjdGlvbnMiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiSlNPTiIsInBhcnNlIiwiQ29tbW9uSGVscGVyIiwicGFyc2VDdXN0b21EYXRhIiwiZ2V0Q3VzdG9tRGF0YSIsImFTZWxlY3RlZENvbnRleHRzIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsIlRhYmxlSGVscGVyIiwiaGFuZGxlVGFibGVEZWxldGVFbmFibGVtZW50Rm9yU2lkZUVmZmVjdHMiLCJBY3Rpb25SdW50aW1lIiwic2V0QWN0aW9uRW5hYmxlbWVudCIsInVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5IiwiX3Njcm9sbFRhYmxlc1RvUm93Iiwic1Jvd1BhdGgiLCJUYWJsZVNjcm9sbGVyIiwic2Nyb2xsVGFibGVUb1JvdyIsImR5bmFtaWNQYWdlIiwiaXNIZWFkZXJFeHBhbmRlZCIsImdldEhlYWRlckV4cGFuZGVkIiwiZ2V0U2hvd01lc3NhZ2VzIiwic2V0U2hvd01lc3NhZ2VzIiwiZmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkIiwiZ2V0RmlsdGVySXRlbXMiLCJmaW5kIiwib0ZpbHRlckl0ZW0iLCJnZXRSZXF1aXJlZCIsIl9pc0luaXRMb2FkRW5hYmxlZCIsImJ5SWQiLCJfZ2V0RmlsdGVyQmFyQ29udHJvbElkIiwiZm9jdXNSb3ciLCJfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24iLCJvTWFuaWZlc3RFbnRyeSIsImdldE1hbmlmZXN0RW50cnkiLCJ0aXRsZSIsInN1YnRpdGxlIiwiYXBwU3ViVGl0bGUiLCJpbnRlbnQiLCJpY29uIiwiX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbElkIiwiX2dldEFkYXB0YXRpb25GaWx0ZXJCYXJDb250cm9sIiwiYWRhcHRhdGlvbkZpbHRlckJhciIsImdldEluYnVpbHRGaWx0ZXIiLCJnZXRQYXJlbnQiLCJzQ29udHJvbCIsInNTZWdtZW50ZWRCdXR0b25JZCIsIl9nZXRDb250cm9sRnJvbVBhZ2VNb2RlbFByb3BlcnR5Iiwic1BhdGgiLCJjb250cm9sSWQiLCJfZ2V0UGFnZU1vZGVsIiwicGFnZUNvbXBvbmVudCIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwic1Zpc3VhbEZpbHRlckJhcklkIiwiU3RhYmxlSWRIZWxwZXIiLCJnZW5lcmF0ZSIsIl9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbCIsIl9pc011bHRpTW9kZSIsIm9Db250cm9sIiwiZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2wiLCJjb250ZW50IiwiaXNBIiwic0tleSIsImFDb250cm9scyIsIm9UYWJNdWx0aU1vZGUiLCJpbmRleE9mIiwicHVzaCIsImRlZmF1bHRQYXRoIiwiTGlzdFJlcG9ydFRlbXBsYXRpbmciLCJnZXREZWZhdWx0UGF0aCIsImluaXRMb2FkTW9kZSIsImluaXRpYWxMb2FkIiwiRW5hYmxlZCIsIl9kaXNhYmxlSW5pdExvYWQiLCJzZXRTdXNwZW5kU2VsZWN0aW9uIiwiX2FwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50IiwidmFyaWFudE1hbmFnZW1lbnRJZCIsImdldFZhcmlhbnRCYWNrUmVmZXJlbmNlIiwidmFyaWFudE1hbmFnZW1lbnQiLCJyZWdpc3RlckFwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50IiwiYmluZCIsIl9zZXRTaGFyZU1vZGVsIiwiZm5HZXRVc2VyIiwiT2JqZWN0UGF0aCIsImdldCIsIm9TaGFyZUluZm8iLCJib29rbWFya1RpdGxlIiwiZG9jdW1lbnQiLCJib29rbWFya0N1c3RvbVVybCIsInNIYXNoIiwiaGFzaGVyIiwiZ2V0SGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsImlzU2hhcmVJbkphbUFjdGl2ZSIsImlzSmFtQWN0aXZlIiwib1RlbXBsYXRlUHJpdmF0ZU1vZGVsIiwiZ2V0T3duZXJDb21wb25lbnQiLCJtQ2FjaGUiLCJpZ25vcmVkRmllbGRzIiwiYUNoYXJ0cyIsInNDaGFydEVudGl0eVBhdGgiLCJzQ2hhcnRFbnRpdHlTZXQiLCJzQ2FjaGVLZXkiLCJnZXROb3RBcHBsaWNhYmxlRmlsdGVycyIsIl9pc0ZpbHRlckJhckhpZGRlbiIsImhpZGVGaWx0ZXJCYXIiLCJWYXJpYW50TWFuYWdlbWVudCIsInZhcmlhbnRzIiwiZ2V0VmFyaWFudHMiLCJjdXJyZW50VmFyaWFudCIsInZhcmlhbnQiLCJleGVjdXRlT25TZWxlY3QiLCJBdXRvIiwiZ2V0U3RhbmRhcmRWYXJpYW50S2V5IiwiZ2V0Q3VycmVudFZhcmlhbnRLZXkiLCJvQ29uZGl0aW9ucyIsInN0YXJ0c1dpdGgiLCJzdGFuZGFyZFZhcmlhbnQiLCJpc1RhYmxlQm91bmQiLCJvSW5uZXJDaGFydCIsImdldENvbnRyb2xEZWxlZ2F0ZSIsIl9nZXRDaGFydCIsImlzQm91bmQiLCJnZXRCaW5kaW5nSW5mbyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiTGlzdFJlcG9ydENvbnRyb2xsZXIuY29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgdHlwZSBEeW5hbWljUGFnZSBmcm9tIFwic2FwL2YvRHluYW1pY1BhZ2VcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgRWRpdEZsb3cgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0VkaXRGbG93XCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IEtQSU1hbmFnZW1lbnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0tQSU1hbmFnZW1lbnRcIjtcbmltcG9ydCBNYXNzRWRpdCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWFzc0VkaXRcIjtcbmltcG9ydCBQbGFjZWhvbGRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGxhY2Vob2xkZXJcIjtcbmltcG9ydCBTaGFyZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2hhcmVcIjtcbmltcG9ydCBTaWRlRWZmZWN0cyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2lkZUVmZmVjdHNcIjtcbmltcG9ydCBWaWV3U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9GaWx0ZXJCYXJcIjtcbmltcG9ydCB7XG5cdGRlZmluZVVJNUNsYXNzLFxuXHRleHRlbnNpYmxlLFxuXHRmaW5hbEV4dGVuc2lvbixcblx0cHJpdmF0ZUV4dGVuc2lvbixcblx0cHVibGljRXh0ZW5zaW9uLFxuXHR1c2luZ0V4dGVuc2lvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBFZGl0U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRWRpdFN0YXRlXCI7XG5pbXBvcnQgTWVzc2FnZVN0cmlwIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0ICogYXMgU3RhYmxlSWRIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCBDb3JlTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IENoYXJ0UnVudGltZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9DaGFydFJ1bnRpbWVcIjtcbmltcG9ydCBDaGFydFV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0NoYXJ0VXRpbHNcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IEZpbHRlclV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IFRhYmxlSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlSGVscGVyXCI7XG5pbXBvcnQgTXVsdGlwbGVNb2RlQ29udHJvbCBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L2NvbnRyb2xzL011bHRpcGxlTW9kZUNvbnRyb2xcIjtcbmltcG9ydCBFeHRlbnNpb25BUEkgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9FeHRlbnNpb25BUElcIjtcbmltcG9ydCBFZGl0Rmxvd092ZXJyaWRlcyBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9Sb290Q29udGFpbmVyL292ZXJyaWRlcy9FZGl0Rmxvd1wiO1xuaW1wb3J0IFRhYmxlU2Nyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvVGFibGVTY3JvbGxlclwiO1xuaW1wb3J0IHR5cGUgU2VnbWVudGVkQnV0dG9uIGZyb20gXCJzYXAvbS9TZWdtZW50ZWRCdXR0b25cIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB7IHN5c3RlbSB9IGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgU3RhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL3AxM24vU3RhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9yZXNvdXJjZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgaGFzaGVyIGZyb20gXCJzYXAvdWkvdGhpcmRwYXJ0eS9oYXNoZXJcIjtcbmltcG9ydCB0eXBlIHsgVjRDb250ZXh0IH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0ICogYXMgTGlzdFJlcG9ydFRlbXBsYXRpbmcgZnJvbSBcIi4vTGlzdFJlcG9ydFRlbXBsYXRpbmdcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgU2hhcmVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1NoYXJlXCI7XG5pbXBvcnQgVmlld1N0YXRlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9WaWV3U3RhdGVcIjtcblxuY29uc3QgVGVtcGxhdGVDb250ZW50VmlldyA9IENvcmVMaWJyYXJ5LlRlbXBsYXRlQ29udGVudFZpZXcsXG5cdEluaXRpYWxMb2FkTW9kZSA9IENvcmVMaWJyYXJ5LkluaXRpYWxMb2FkTW9kZTtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0Lkxpc3RSZXBvcnRDb250cm9sbGVyXCIpXG5jbGFzcyBMaXN0UmVwb3J0Q29udHJvbGxlciBleHRlbmRzIFBhZ2VDb250cm9sbGVyIHtcblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsUm91dGluZy5vdmVycmlkZSh7XG5cdFx0XHRvbkFmdGVyQmluZGluZzogZnVuY3Rpb24gKHRoaXM6IEludGVybmFsUm91dGluZykge1xuXHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIExpc3RSZXBvcnRDb250cm9sbGVyKS5fb25BZnRlckJpbmRpbmcoKTtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdF9yb3V0aW5nITogSW50ZXJuYWxSb3V0aW5nO1xuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0SW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoe1xuXHRcdFx0Z2V0RW50aXR5U2V0OiBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0cmV0dXJuICh0aGlzLmJhc2UgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIpLmdldEN1cnJlbnRFbnRpdHlTZXQoKTtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdF9pbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbjtcblx0QHVzaW5nRXh0ZW5zaW9uKFNpZGVFZmZlY3RzKVxuXHRzaWRlRWZmZWN0cyE6IFNpZGVFZmZlY3RzO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUpKVxuXHRpbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFNoYXJlLm92ZXJyaWRlKFNoYXJlT3ZlcnJpZGVzKSlcblx0c2hhcmUhOiBTaGFyZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oRWRpdEZsb3cub3ZlcnJpZGUoRWRpdEZsb3dPdmVycmlkZXMpKVxuXHRlZGl0RmxvdyE6IEVkaXRGbG93O1xuXG5cdEB1c2luZ0V4dGVuc2lvbihWaWV3U3RhdGUub3ZlcnJpZGUoVmlld1N0YXRlT3ZlcnJpZGVzKSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihLUElNYW5hZ2VtZW50KVxuXHRrcGlNYW5hZ2VtZW50ITogS1BJTWFuYWdlbWVudDtcblx0QHVzaW5nRXh0ZW5zaW9uKFBsYWNlaG9sZGVyKVxuXHRwbGFjZWhvbGRlciE6IFBsYWNlaG9sZGVyO1xuXHRAdXNpbmdFeHRlbnNpb24oTWFzc0VkaXQpXG5cdG1hc3NFZGl0ITogTWFzc0VkaXQ7XG5cdHByb3RlY3RlZCBleHRlbnNpb25BUEk/OiBFeHRlbnNpb25BUEk7XG5cdHByaXZhdGUgZmlsdGVyQmFyQ29uZGl0aW9ucz86IGFueTtcblx0cHJpdmF0ZSBzVXBkYXRlVGltZXI/OiBhbnk7XG5cdHByaXZhdGUgb1Jlc291cmNlQnVuZGxlPzogUmVzb3VyY2VCdW5kbGU7XG5cdHByaXZhdGUgaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcz86IGJvb2xlYW47XG5cdHByaXZhdGUgaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcz86IGJvb2xlYW47XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldEV4dGVuc2lvbkFQSSgpOiBFeHRlbnNpb25BUEkge1xuXHRcdGlmICghdGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJID0gbmV3IEV4dGVuc2lvbkFQSSh0aGlzKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXHR9XG5cblx0b25Jbml0KCkge1xuXHRcdFBhZ2VDb250cm9sbGVyLnByb3RvdHlwZS5vbkluaXQuYXBwbHkodGhpcyk7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhhc1BlbmRpbmdGaWx0ZXJzXCIsIHRydWUpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImFwcGxpZWRGaWx0ZXJzXCIsIFwiXCIpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhpZGVEcmFmdEluZm9cIiwgZmFsc2UpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInVvbVwiLCB7fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2NhbGVmYWN0b3JcIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNjYWxlZmFjdG9yTnVtYmVyXCIsIHt9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjdXJyZW5jeVwiLCB7fSk7XG5cblx0XHRpZiAodGhpcy5faGFzTXVsdGlWaXN1YWxpemF0aW9ucygpKSB7XG5cdFx0XHRsZXQgYWxwQ29udGVudFZpZXcgPSB0aGlzLl9nZXREZWZhdWx0UGF0aCgpO1xuXHRcdFx0aWYgKCFzeXN0ZW0uZGVza3RvcCAmJiBhbHBDb250ZW50VmlldyA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5IeWJyaWQpIHtcblx0XHRcdFx0YWxwQ29udGVudFZpZXcgPSBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0O1xuXHRcdFx0fVxuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiYWxwQ29udGVudFZpZXdcIiwgYWxwQ29udGVudFZpZXcpO1xuXHRcdH1cblxuXHRcdC8vIFN0b3JlIGNvbmRpdGlvbnMgZnJvbSBmaWx0ZXIgYmFyXG5cdFx0Ly8gdGhpcyBpcyBsYXRlciB1c2VkIGJlZm9yZSBuYXZpZ2F0aW9uIHRvIGdldCBjb25kaXRpb25zIGFwcGxpZWQgb24gdGhlIGZpbHRlciBiYXJcblx0XHR0aGlzLmZpbHRlckJhckNvbmRpdGlvbnMgPSB7fTtcblxuXHRcdC8vIEFzIEFwcFN0YXRlSGFuZGxlci5hcHBseUFwcFN0YXRlIHRyaWdnZXJzIGEgbmF2aWdhdGlvbiB3ZSB3YW50IHRvIG1ha2Ugc3VyZSBpdCB3aWxsXG5cdFx0Ly8gaGFwcGVuIGFmdGVyIHRoZSByb3V0ZU1hdGNoIGV2ZW50IGhhcyBiZWVuIHByb2Nlc3NlZCAob3RoZXJ3aXNlIHRoZSByb3V0ZXIgZ2V0cyBicm9rZW4pXG5cdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0ZXJQcm94eSgpLndhaXRGb3JSb3V0ZU1hdGNoQmVmb3JlTmF2aWdhdGlvbigpO1xuXG5cdFx0Ly8gQ29uZmlndXJlIHRoZSBpbml0aWFsIGxvYWQgc2V0dGluZ3Ncblx0XHR0aGlzLl9zZXRJbml0TG9hZCgpO1xuXHR9XG5cblx0b25FeGl0KCkge1xuXHRcdGRlbGV0ZSB0aGlzLmZpbHRlckJhckNvbmRpdGlvbnM7XG5cdFx0aWYgKHRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHR0aGlzLmV4dGVuc2lvbkFQSS5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdGRlbGV0ZSB0aGlzLmV4dGVuc2lvbkFQSTtcblx0fVxuXG5cdF9vbkFmdGVyQmluZGluZygpIHtcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZ2V0Q29udHJvbHMoXCJ0YWJsZVwiKTtcblx0XHRpZiAoRWRpdFN0YXRlLmlzRWRpdFN0YXRlRGlydHkoKSkge1xuXHRcdFx0dGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpPy5pbnZhbGlkYXRlQ29udGVudCgpO1xuXHRcdFx0Y29uc3Qgb1RhYmxlQmluZGluZyA9IHRoaXMuX2dldFRhYmxlKCk/LmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdGlmIChvVGFibGVCaW5kaW5nKSB7XG5cdFx0XHRcdGlmIChDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRWaWV3KCkpLl9pc0ZjbEVuYWJsZWQoKSkge1xuXHRcdFx0XHRcdC8vIHRoZXJlIGlzIGFuIGlzc3VlIGlmIHdlIHVzZSBhIHRpbWVvdXQgd2l0aCBhIGtlcHQgYWxpdmUgY29udGV4dCB1c2VkIG9uIGFub3RoZXIgcGFnZVxuXHRcdFx0XHRcdG9UYWJsZUJpbmRpbmcucmVmcmVzaCgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmICghdGhpcy5zVXBkYXRlVGltZXIpIHtcblx0XHRcdFx0XHRcdHRoaXMuc1VwZGF0ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdG9UYWJsZUJpbmRpbmcucmVmcmVzaCgpO1xuXHRcdFx0XHRcdFx0XHRkZWxldGUgdGhpcy5zVXBkYXRlVGltZXI7XG5cdFx0XHRcdFx0XHR9LCAwKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBVcGRhdGUgYWN0aW9uIGVuYWJsZW1lbnQgYW5kIHZpc2liaWxpdHkgdXBvbiB0YWJsZSBkYXRhIHVwZGF0ZS5cblx0XHRcdFx0XHRjb25zdCBmblVwZGF0ZVRhYmxlQWN0aW9ucyA9ICgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzKTtcblx0XHRcdFx0XHRcdG9UYWJsZUJpbmRpbmcuZGV0YWNoRGF0YVJlY2VpdmVkKGZuVXBkYXRlVGFibGVBY3Rpb25zKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdG9UYWJsZUJpbmRpbmcuYXR0YWNoRGF0YVJlY2VpdmVkKGZuVXBkYXRlVGFibGVBY3Rpb25zKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0RWRpdFN0YXRlLnNldEVkaXRTdGF0ZVByb2Nlc3NlZCgpO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy5zVXBkYXRlVGltZXIpIHtcblx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzKTtcblx0XHR9XG5cblx0XHR0aGlzLnBhZ2VSZWFkeS53YWl0Rm9yKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0QXBwU3RhdGVIYW5kbGVyKCkuYXBwbHlBcHBTdGF0ZSgpKTtcblx0fVxuXG5cdG9uQmVmb3JlUmVuZGVyaW5nKCkge1xuXHRcdFBhZ2VDb250cm9sbGVyLnByb3RvdHlwZS5vbkJlZm9yZVJlbmRlcmluZy5hcHBseSh0aGlzKTtcblx0fVxuXG5cdG9uQWZ0ZXJSZW5kZXJpbmcoKSB7XG5cdFx0KCh0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInNhcC5mZS5pMThuXCIpIGFzIFJlc291cmNlTW9kZWwpLmdldFJlc291cmNlQnVuZGxlKCkgYXMgUHJvbWlzZTxSZXNvdXJjZUJ1bmRsZT4pXG5cdFx0XHQudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xuXHRcdFx0XHR0aGlzLm9SZXNvdXJjZUJ1bmRsZSA9IHJlc3BvbnNlO1xuXHRcdFx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZ2V0Q29udHJvbHMoKSBhcyBUYWJsZVtdO1xuXHRcdFx0XHRjb25zdCBzRW50aXR5U2V0ID0gKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5lbnRpdHlTZXQ7XG5cdFx0XHRcdGNvbnN0IHNUZXh0ID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXG5cdFx0XHRcdFx0XCJUX1RBQkxFX0FORF9DSEFSVF9OT19EQVRBX1RFWFRcIixcblx0XHRcdFx0XHR0aGlzLm9SZXNvdXJjZUJ1bmRsZSBhcyBSZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0c0VudGl0eVNldFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRhVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogVGFibGUpIHtcblx0XHRcdFx0XHRvVGFibGUuc2V0Tm9EYXRhKHNUZXh0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXRyaWV2aW5nIHRoZSByZXNvdXJjZSBidW5kbGVcIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0b25QYWdlUmVhZHkobVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdGlmIChtUGFyYW1ldGVycy5mb3JjZUZvY3VzKSB7XG5cdFx0XHR0aGlzLl9zZXRJbml0aWFsRm9jdXMoKTtcblx0XHR9XG5cdFx0Ly8gUmVtb3ZlIHRoZSBoYW5kbGVyIG9uIGJhY2sgbmF2aWdhdGlvbiB0aGF0IGRpc3BsYXlzIERyYWZ0IGNvbmZpcm1hdGlvblxuXHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldEJhY2tOYXZpZ2F0aW9uKHVuZGVmaW5lZCk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBjb250ZW50IG9mIGEgbGlzdCByZXBvcnQgdmlldyBuZWVkcyB0byBiZSByZWZyZXNoZWQuXG5cdCAqIFRoaXMgaGFwcGVucyBlaXRoZXIgd2hlbiB0aGVyZSBpcyBhIGNoYW5nZSBvbiB0aGUgRmlsdGVyQmFyIGFuZCB0aGUgc2VhcmNoIGlzIHRyaWdnZXJlZCxcblx0ICogb3Igd2hlbiBhIHRhYiB3aXRoIGN1c3RvbSBjb250ZW50IGlzIHNlbGVjdGVkLlxuXHQgKiBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGluIGNhc2Ugb2YgY3VzdG9taXphdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzIE1hcCBjb250YWluaW5nIHRoZSBmaWx0ZXIgY29uZGl0aW9ucyBvZiB0aGUgRmlsdGVyQmFyLCB0aGUgY3VycmVudFRhYklEXG5cdCAqIGFuZCB0aGUgdmlldyByZWZyZXNoIGNhdXNlICh0YWJDaGFuZ2VkIG9yIHNlYXJjaCkuXG5cdCAqIFRoZSBtYXAgbG9va3MgbGlrZSB0aGlzOlxuXHQgKiA8Y29kZT48cHJlPlxuXHQgKiBcdHtcblx0ICogXHRcdGZpbHRlckNvbmRpdGlvbnM6IHtcblx0ICogXHRcdFx0Q291bnRyeTogW1xuXHQgKiBcdFx0XHRcdHtcblx0ICogXHRcdFx0XHRcdG9wZXJhdG9yOiBcIkVRXCJcblx0ICpcdFx0XHRcdFx0dmFsaWRhdGVkOiBcIk5vdFZhbGlkYXRlZFwiXG5cdCAqXHRcdFx0XHRcdHZhbHVlczogW1wiR2VybWFueVwiLCAuLi5dXG5cdCAqIFx0XHRcdFx0fSxcblx0ICogXHRcdFx0XHQuLi5cblx0ICogXHRcdFx0XVxuXHQgKiBcdFx0XHQuLi5cblx0ICogXHRcdH0sXG5cdCAqXHRcdGN1cnJlbnRUYWJJZDogXCJmZTo6Q3VzdG9tVGFiOjp0YWIxXCIsXG5cdCAqXHRcdHJlZnJlc2hDYXVzZTogXCJ0YWJDaGFuZ2VkXCIgfCBcInNlYXJjaFwiXG5cdCAqXHR9XG5cdCAqIDwvcHJlPjwvY29kZT5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdG9uVmlld05lZWRzUmVmcmVzaChtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0LyogVG8gYmUgb3ZlcnJpZGVuICovXG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIGNhbGxlZCB3aGVuIGEgZmlsdGVyIG9yIHNlYXJjaCB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIGluIHRoZSBGaWx0ZXJCYXIsXG5cdCAqIGJ1dCBoYXMgbm90IGJlZW4gdmFsaWRhdGVkIHlldCBieSB0aGUgZW5kIHVzZXIgKHdpdGggdGhlICdHbycgb3IgJ1NlYXJjaCcgYnV0dG9uKS5cblx0ICogVHlwaWNhbGx5LCB0aGUgY29udGVudCBvZiB0aGUgY3VycmVudCB0YWIgaXMgZ3JleWVkIG91dCB1bnRpbCB0aGUgZmlsdGVycyBhcmUgdmFsaWRhdGVkLlxuXHQgKiBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGluIGNhc2Ugb2YgY3VzdG9taXphdGlvbi5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblBlbmRpbmdGaWx0ZXJzKCkge1xuXHRcdC8qIFRvIGJlIG92ZXJyaWRlbiAqL1xuXHR9XG5cblx0Z2V0Q3VycmVudEVudGl0eVNldCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0VGFibGUoKT8uZGF0YShcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpLnNsaWNlKDEpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGluaXRpYXRlcyB0aGUgdXBkYXRlIG9mIHRoZSBlbmFibGVkIHN0YXRlIG9mIHRoZSBEYXRhRmllbGRGb3JBY3Rpb24gYW5kIHRoZSB2aXNpYmxlIHN0YXRlIG9mIHRoZSBEYXRhRmllbGRGb3JJQk4gYnV0dG9ucy5cblx0ICpcblx0ICogQHBhcmFtIGFUYWJsZXMgQXJyYXkgb2YgdGFibGVzIGluIHRoZSBsaXN0IHJlcG9ydFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzOiBhbnkpIHtcblx0XHRsZXQgYUlCTkFjdGlvbnM6IGFueVtdID0gW107XG5cdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IGFueSkge1xuXHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9UYWJsZSwgYUlCTkFjdGlvbnMpO1xuXHRcdFx0Ly8gVXBkYXRlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiBEYXRhRmllbGRGb3JBY3Rpb24gYnV0dG9ucyBvbiB0YWJsZSB0b29sYmFyXG5cdFx0XHQvLyBUaGUgc2FtZSBpcyBhbHNvIHBlcmZvcm1lZCBvbiBUYWJsZSBzZWxlY3Rpb25DaGFuZ2UgZXZlbnRcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpLFxuXHRcdFx0XHRvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gSlNPTi5wYXJzZShcblx0XHRcdFx0XHRDb21tb25IZWxwZXIucGFyc2VDdXN0b21EYXRhKERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKG9UYWJsZSwgXCJvcGVyYXRpb25BdmFpbGFibGVNYXBcIikpXG5cdFx0XHRcdCksXG5cdFx0XHRcdGFTZWxlY3RlZENvbnRleHRzID0gb1RhYmxlLmdldFNlbGVjdGVkQ29udGV4dHMoKTtcblxuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiLCBhU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgYVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoKTtcblx0XHRcdFRhYmxlSGVscGVyLmhhbmRsZVRhYmxlRGVsZXRlRW5hYmxlbWVudEZvclNpZGVFZmZlY3RzKG9UYWJsZSwgb0ludGVybmFsTW9kZWxDb250ZXh0KTtcblx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChvSW50ZXJuYWxNb2RlbENvbnRleHQsIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAsIGFTZWxlY3RlZENvbnRleHRzLCBcInRhYmxlXCIpO1xuXHRcdH0pO1xuXHRcdENvbW1vblV0aWxzLnVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5KGFJQk5BY3Rpb25zLCB0aGlzLmdldFZpZXcoKSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2Qgc2Nyb2xscyB0byBhIHNwZWNpZmljIHJvdyBvbiBhbGwgdGhlIGF2YWlsYWJsZSB0YWJsZXMuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnQuTGlzdFJlcG9ydENvbnRyb2xsZXIuY29udHJvbGxlciNfc2Nyb2xsVGFibGVzVG9Sb3dcblx0ICogQHBhcmFtIHNSb3dQYXRoIFRoZSBwYXRoIG9mIHRoZSB0YWJsZSByb3cgY29udGV4dCB0byBiZSBzY3JvbGxlZCB0b1xuXHQgKi9cblx0X3Njcm9sbFRhYmxlc1RvUm93KHNSb3dQYXRoOiBzdHJpbmcpIHtcblx0XHR0aGlzLl9nZXRDb250cm9scyhcInRhYmxlXCIpLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogYW55KSB7XG5cdFx0XHRUYWJsZVNjcm9sbGVyLnNjcm9sbFRhYmxlVG9Sb3cob1RhYmxlLCBzUm93UGF0aCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2Qgc2V0IHRoZSBpbml0aWFsIGZvY3VzIHdpdGhpbiB0aGUgTGlzdCBSZXBvcnQgYWNjb3JkaW5nIHRvIHRoZSBVWCBndWlkZSBsaW5lcy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIHNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydC5MaXN0UmVwb3J0Q29udHJvbGxlci5jb250cm9sbGVyI19zZXRJbml0aWFsRm9jdXNcblx0ICovXG5cdF9zZXRJbml0aWFsRm9jdXMoKSB7XG5cdFx0Y29uc3QgZHluYW1pY1BhZ2UgPSB0aGlzLl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKSxcblx0XHRcdGlzSGVhZGVyRXhwYW5kZWQgPSBkeW5hbWljUGFnZS5nZXRIZWFkZXJFeHBhbmRlZCgpLFxuXHRcdFx0ZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpIGFzIGFueTtcblx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHRpZiAoaXNIZWFkZXJFeHBhbmRlZCkge1xuXHRcdFx0XHQvL0VuYWJsaW5nIG1hbmRhdG9yeSBmaWx0ZXIgZmllbGRzIG1lc3NhZ2UgZGlhbG9nXG5cdFx0XHRcdGlmICghZmlsdGVyQmFyLmdldFNob3dNZXNzYWdlcygpKSB7XG5cdFx0XHRcdFx0ZmlsdGVyQmFyLnNldFNob3dNZXNzYWdlcyh0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQgPSBmaWx0ZXJCYXIuZ2V0RmlsdGVySXRlbXMoKS5maW5kKGZ1bmN0aW9uIChvRmlsdGVySXRlbTogYW55KSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9GaWx0ZXJJdGVtLmdldFJlcXVpcmVkKCkgJiYgb0ZpbHRlckl0ZW0uZ2V0Q29uZGl0aW9ucygpLmxlbmd0aCA9PT0gMDtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdC8vRm9jdXNpbmcgb24gdGhlIGZpcnN0IGVtcHR5IG1hbmRhdG9yeSBmaWx0ZXIgZmllbGQsIG9yIG9uIHRoZSBmaXJzdCBmaWx0ZXIgZmllbGQgaWYgdGhlIHRhYmxlIGRhdGEgaXMgbG9hZGVkXG5cdFx0XHRcdGlmIChmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQpIHtcblx0XHRcdFx0XHRmaXJzdEVtcHR5TWFuZGF0b3J5RmllbGQuZm9jdXMoKTtcblx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLl9pc0luaXRMb2FkRW5hYmxlZCgpKSB7XG5cdFx0XHRcdFx0ZmlsdGVyQmFyLmdldEZpbHRlckl0ZW1zKClbMF0uZm9jdXMoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvL0ZvY3VzaW5nIG9uIHRoZSBHbyBidXR0b25cblx0XHRcdFx0XHR0aGlzLmdldFZpZXcoKS5ieUlkKGAke3RoaXMuX2dldEZpbHRlckJhckNvbnRyb2xJZCgpfS1idG5TZWFyY2hgKS5mb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuX2lzSW5pdExvYWRFbmFibGVkKCkpIHtcblx0XHRcdFx0dGhpcy5fZ2V0VGFibGUoKT8uZm9jdXNSb3coMCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX2dldFRhYmxlKCk/LmZvY3VzUm93KDApO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbigpIHtcblx0XHRjb25zdCBvTWFuaWZlc3RFbnRyeSA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5hcHBcIik7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRpdGxlOiBvTWFuaWZlc3RFbnRyeS50aXRsZSxcblx0XHRcdHN1YnRpdGxlOiBvTWFuaWZlc3RFbnRyeS5hcHBTdWJUaXRsZSB8fCBcIlwiLFxuXHRcdFx0aW50ZW50OiBcIlwiLFxuXHRcdFx0aWNvbjogXCJcIlxuXHRcdH07XG5cdH1cblxuXHRfZ2V0RmlsdGVyQmFyQ29udHJvbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZCh0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKSkgYXMgRmlsdGVyQmFyO1xuXHR9XG5cblx0X2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZCh0aGlzLl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2xJZCgpKSBhcyBEeW5hbWljUGFnZTtcblx0fVxuXG5cdF9nZXRBZGFwdGF0aW9uRmlsdGVyQmFyQ29udHJvbCgpIHtcblx0XHQvLyBJZiB0aGUgYWRhcHRhdGlvbiBmaWx0ZXIgYmFyIGlzIHBhcnQgb2YgdGhlIERPTSB0cmVlLCB0aGUgXCJBZGFwdCBGaWx0ZXJcIiBkaWFsb2cgaXMgb3Blbixcblx0XHQvLyBhbmQgd2UgcmV0dXJuIHRoZSBhZGFwdGF0aW9uIGZpbHRlciBiYXIgYXMgYW4gYWN0aXZlIGNvbnRyb2wgKHZpc2libGUgZm9yIHRoZSB1c2VyKVxuXHRcdGNvbnN0IGFkYXB0YXRpb25GaWx0ZXJCYXIgPSAodGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpIGFzIGFueSkuZ2V0SW5idWlsdEZpbHRlcigpO1xuXHRcdHJldHVybiBhZGFwdGF0aW9uRmlsdGVyQmFyPy5nZXRQYXJlbnQoKSA/IGFkYXB0YXRpb25GaWx0ZXJCYXIgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0U2VnbWVudGVkQnV0dG9uKHNDb250cm9sOiBhbnkpIHtcblx0XHRjb25zdCBzU2VnbWVudGVkQnV0dG9uSWQgPSAoc0NvbnRyb2wgPT09IFwiQ2hhcnRcIiA/IHRoaXMuZ2V0Q2hhcnRDb250cm9sKCkgOiB0aGlzLl9nZXRUYWJsZSgpKT8uZGF0YShcInNlZ21lbnRlZEJ1dHRvbklkXCIpO1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKHNTZWdtZW50ZWRCdXR0b25JZCk7XG5cdH1cblxuXHRfZ2V0Q29udHJvbEZyb21QYWdlTW9kZWxQcm9wZXJ0eShzUGF0aDogc3RyaW5nKSB7XG5cdFx0Y29uc3QgY29udHJvbElkID0gdGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KHNQYXRoKTtcblx0XHRyZXR1cm4gY29udHJvbElkICYmIHRoaXMuZ2V0VmlldygpLmJ5SWQoY29udHJvbElkKTtcblx0fVxuXG5cdF9nZXRQYWdlTW9kZWwoKTogSlNPTk1vZGVsIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBwYWdlQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKHRoaXMuZ2V0VmlldygpKSBhcyBhbnk7XG5cdFx0cmV0dXJuIHBhZ2VDb21wb25lbnQuZ2V0TW9kZWwoXCJfcGFnZU1vZGVsXCIpO1xuXHR9XG5cblx0X2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbElkKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi9keW5hbWljTGlzdFJlcG9ydElkXCIpIHx8IFwiXCI7XG5cdH1cblxuXHRfZ2V0RmlsdGVyQmFyQ29udHJvbElkKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi9maWx0ZXJCYXJJZFwiKSB8fCBcIlwiO1xuXHR9XG5cblx0Z2V0Q2hhcnRDb250cm9sKCkge1xuXHRcdHJldHVybiB0aGlzLl9nZXRDb250cm9sRnJvbVBhZ2VNb2RlbFByb3BlcnR5KFwiL3NpbmdsZUNoYXJ0SWRcIik7XG5cdH1cblxuXHRfZ2V0VmlzdWFsRmlsdGVyQmFyQ29udHJvbCgpIHtcblx0XHRjb25zdCBzVmlzdWFsRmlsdGVyQmFySWQgPSBTdGFibGVJZEhlbHBlci5nZW5lcmF0ZShbXCJ2aXN1YWxGaWx0ZXJcIiwgdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbElkKCldKTtcblx0XHRyZXR1cm4gc1Zpc3VhbEZpbHRlckJhcklkICYmIHRoaXMuZ2V0VmlldygpLmJ5SWQoc1Zpc3VhbEZpbHRlckJhcklkKTtcblx0fVxuXHRfZ2V0RmlsdGVyQmFyVmFyaWFudENvbnRyb2woKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkoXCIvdmFyaWFudE1hbmFnZW1lbnQvaWRcIik7XG5cdH1cblxuXHRfZ2V0TXVsdGlNb2RlQ29udHJvbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZChcImZlOjpUYWJNdWx0aXBsZU1vZGU6OkNvbnRyb2xcIikgYXMgTXVsdGlwbGVNb2RlQ29udHJvbDtcblx0fVxuXG5cdF9nZXRUYWJsZSgpOiBUYWJsZSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdGNvbnN0IG9Db250cm9sID0gdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpPy5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpPy5jb250ZW50O1xuXHRcdFx0cmV0dXJuIG9Db250cm9sPy5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpID8gKG9Db250cm9sIGFzIFRhYmxlKSA6IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2dldENvbnRyb2xGcm9tUGFnZU1vZGVsUHJvcGVydHkoXCIvc2luZ2xlVGFibGVJZFwiKSBhcyBUYWJsZTtcblx0XHR9XG5cdH1cblx0X2dldENvbnRyb2xzKHNLZXk/OiBhbnkpIHtcblx0XHRpZiAodGhpcy5faXNNdWx0aU1vZGUoKSkge1xuXHRcdFx0Y29uc3QgYUNvbnRyb2xzOiBhbnlbXSA9IFtdO1xuXHRcdFx0Y29uc3Qgb1RhYk11bHRpTW9kZSA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKS5jb250ZW50O1xuXHRcdFx0b1RhYk11bHRpTW9kZS5nZXRJdGVtcygpLmZvckVhY2goKG9JdGVtOiBhbnkpID0+IHtcblx0XHRcdFx0Y29uc3Qgb0NvbnRyb2wgPSB0aGlzLmdldFZpZXcoKS5ieUlkKG9JdGVtLmdldEtleSgpKTtcblx0XHRcdFx0aWYgKG9Db250cm9sICYmIHNLZXkpIHtcblx0XHRcdFx0XHRpZiAob0l0ZW0uZ2V0S2V5KCkuaW5kZXhPZihgZmU6OiR7c0tleX1gKSA+IC0xKSB7XG5cdFx0XHRcdFx0XHRhQ29udHJvbHMucHVzaChvQ29udHJvbCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKG9Db250cm9sICE9PSB1bmRlZmluZWQgJiYgb0NvbnRyb2wgIT09IG51bGwpIHtcblx0XHRcdFx0XHRhQ29udHJvbHMucHVzaChvQ29udHJvbCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGFDb250cm9scztcblx0XHR9IGVsc2UgaWYgKHNLZXkgPT09IFwiQ2hhcnRcIikge1xuXHRcdFx0Y29uc3Qgb0NoYXJ0ID0gdGhpcy5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdHJldHVybiBvQ2hhcnQgPyBbb0NoYXJ0XSA6IFtdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBvVGFibGUgPSB0aGlzLl9nZXRUYWJsZSgpO1xuXHRcdFx0cmV0dXJuIG9UYWJsZSA/IFtvVGFibGVdIDogW107XG5cdFx0fVxuXHR9XG5cblx0X2dldERlZmF1bHRQYXRoKCkge1xuXHRcdGNvbnN0IGRlZmF1bHRQYXRoID0gTGlzdFJlcG9ydFRlbXBsYXRpbmcuZ2V0RGVmYXVsdFBhdGgodGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KFwiL3ZpZXdzXCIpIHx8IFtdKTtcblx0XHRzd2l0Y2ggKGRlZmF1bHRQYXRoKSB7XG5cdFx0XHRjYXNlIFwicHJpbWFyeVwiOlxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydDtcblx0XHRcdGNhc2UgXCJzZWNvbmRhcnlcIjpcblx0XHRcdFx0cmV0dXJuIFRlbXBsYXRlQ29udGVudFZpZXcuVGFibGU7XG5cdFx0XHRjYXNlIFwiYm90aFwiOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIFRlbXBsYXRlQ29udGVudFZpZXcuSHlicmlkO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8ga25vdyBpZiBMaXN0UmVwb3J0IGlzIGNvbmZpZ3VyZWQgd2l0aCBNdWx0aXBsZSBUYWJsZSBtb2RlLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX2lzTXVsdGlNb2RlXG5cdCAqIEByZXR1cm5zIElzIE11bHRpcGxlIFRhYmxlIG1vZGUgc2V0P1xuXHQgKi9cblx0X2lzTXVsdGlNb2RlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIXRoaXMuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi9tdWx0aVZpZXdzQ29udHJvbFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8ga25vdyBpZiBMaXN0UmVwb3J0IGlzIGNvbmZpZ3VyZWQgdG8gbG9hZCBkYXRhIGF0IHN0YXJ0IHVwLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX2lzSW5pdExvYWREaXNhYmxlZFxuXHQgKiBAcmV0dXJucyBJcyBJbml0TG9hZCBlbmFibGVkP1xuXHQgKi9cblx0X2lzSW5pdExvYWRFbmFibGVkKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGluaXRMb2FkTW9kZSA9ICh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkuaW5pdGlhbExvYWQ7XG5cdFx0cmV0dXJuIGluaXRMb2FkTW9kZSA9PT0gSW5pdGlhbExvYWRNb2RlLkVuYWJsZWQ7XG5cdH1cblxuXHRfaGFzTXVsdGlWaXN1YWxpemF0aW9ucygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KFwiL2hhc011bHRpVmlzdWFsaXphdGlvbnNcIik7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHN1c3BlbmQgc2VhcmNoIG9uIHRoZSBmaWx0ZXIgYmFyLiBUaGUgaW5pdGlhbCBsb2FkaW5nIG9mIGRhdGEgaXMgZGlzYWJsZWQgYmFzZWQgb24gdGhlIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24gSW5pdExvYWQgLSBEaXNhYmxlZC9BdXRvLlxuXHQgKiBJdCBpcyBlbmFibGVkIGxhdGVyIHdoZW4gdGhlIHZpZXcgc3RhdGUgaXMgc2V0LCB3aGVuIGl0IGlzIHBvc3NpYmxlIHRvIHJlYWxpemUgaWYgdGhlcmUgYXJlIGRlZmF1bHQgZmlsdGVycy5cblx0ICovXG5cdF9kaXNhYmxlSW5pdExvYWQoKSB7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdC8vIGNoZWNrIGZvciBmaWx0ZXIgYmFyIGhpZGRlblxuXHRcdGlmIChmaWx0ZXJCYXIpIHtcblx0XHRcdGZpbHRlckJhci5zZXRTdXNwZW5kU2VsZWN0aW9uKHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIGJ5IGZsZXggdG8gZGV0ZXJtaW5lIGlmIHRoZSBhcHBseUF1dG9tYXRpY2FsbHkgc2V0dGluZyBvbiB0aGUgdmFyaWFudCBpcyB2YWxpZC5cblx0ICogQ2FsbGVkIG9ubHkgZm9yIFN0YW5kYXJkIFZhcmlhbnQgYW5kIG9ubHkgd2hlbiB0aGVyZSBpcyBkaXNwbGF5IHRleHQgc2V0IGZvciBhcHBseUF1dG9tYXRpY2FsbHkgKEZFIG9ubHkgc2V0cyBpdCBmb3IgQXV0bykuXG5cdCAqXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gdHJ1ZSBpZiBkYXRhIHNob3VsZCBiZSBsb2FkZWQgYXV0b21hdGljYWxseSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRfYXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQoKSB7XG5cdFx0Ly8gV2UgYWx3YXlzIHJldHVybiBmYWxzZSBhbmQgdGFrZSBjYXJlIG9mIGl0IHdoZW4gdmlldyBzdGF0ZSBpcyBzZXRcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29uZmlndXJlIHRoZSBzZXR0aW5ncyBmb3IgaW5pdGlhbCBsb2FkIGJhc2VkIG9uXG5cdCAqIC0gbWFuaWZlc3Qgc2V0dGluZyBpbml0TG9hZCAtIEVuYWJsZWQvRGlzYWJsZWQvQXV0b1xuXHQgKiAtIHVzZXIncyBzZXR0aW5nIG9mIGFwcGx5QXV0b21hdGljYWxseSBvbiB2YXJpYW50XG5cdCAqIC0gaWYgdGhlcmUgYXJlIGRlZmF1bHQgZmlsdGVyc1xuXHQgKiBXZSBkaXNhYmxlIHRoZSBmaWx0ZXIgYmFyIHNlYXJjaCBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmFibGUgaXQgd2hlbiB2aWV3IHN0YXRlIGlzIHNldC5cblx0ICovXG5cdF9zZXRJbml0TG9hZCgpIHtcblx0XHQvLyBpZiBpbml0TG9hZCBpcyBEaXNhYmxlZCBvciBBdXRvLCBzd2l0Y2ggb2ZmIGZpbHRlciBiYXIgc2VhcmNoIHRlbXBvcmFyaWx5IGF0IHN0YXJ0XG5cdFx0aWYgKCF0aGlzLl9pc0luaXRMb2FkRW5hYmxlZCgpKSB7XG5cdFx0XHR0aGlzLl9kaXNhYmxlSW5pdExvYWQoKTtcblx0XHR9XG5cdFx0Ly8gc2V0IGhvb2sgZm9yIGZsZXggZm9yIHdoZW4gc3RhbmRhcmQgdmFyaWFudCBpcyBzZXQgKGF0IHN0YXJ0IG9yIGJ5IHVzZXIgYXQgcnVudGltZSlcblx0XHQvLyByZXF1aXJlZCB0byBvdmVycmlkZSB0aGUgdXNlciBzZXR0aW5nICdhcHBseSBhdXRvbWF0aWNhbGx5JyBiZWhhdmlvdXIgaWYgdGhlcmUgYXJlIG5vIGZpbHRlcnNcblx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudElkOiBhbnkgPSBMaXN0UmVwb3J0VGVtcGxhdGluZy5nZXRWYXJpYW50QmFja1JlZmVyZW5jZSh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLCB0aGlzLl9nZXRQYWdlTW9kZWwoKSk7XG5cdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQgPSB2YXJpYW50TWFuYWdlbWVudElkICYmIHRoaXMuZ2V0VmlldygpLmJ5SWQodmFyaWFudE1hbmFnZW1lbnRJZCk7XG5cdFx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHR2YXJpYW50TWFuYWdlbWVudC5yZWdpc3RlckFwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50KHRoaXMuX2FwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50LmJpbmQodGhpcykpO1xuXHRcdH1cblx0fVxuXG5cdF9zZXRTaGFyZU1vZGVsKCkge1xuXHRcdC8vIFRPRE86IGRlYWN0aXZhdGVkIGZvciBub3cgLSBjdXJyZW50bHkgdGhlcmUgaXMgbm8gX3RlbXBsUHJpdiBhbnltb3JlLCB0byBiZSBkaXNjdXNzZWRcblx0XHQvLyB0aGlzIG1ldGhvZCBpcyBjdXJyZW50bHkgbm90IGNhbGxlZCBhbnltb3JlIGZyb20gdGhlIGluaXQgbWV0aG9kXG5cblx0XHRjb25zdCBmbkdldFVzZXIgPSBPYmplY3RQYXRoLmdldChcInNhcC51c2hlbGwuQ29udGFpbmVyLmdldFVzZXJcIik7XG5cdFx0Ly92YXIgb01hbmlmZXN0ID0gdGhpcy5nZXRPd25lckNvbXBvbmVudCgpLmdldEFwcENvbXBvbmVudCgpLmdldE1ldGFkYXRhKCkuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC51aVwiKTtcblx0XHQvL3ZhciBzQm9va21hcmtJY29uID0gKG9NYW5pZmVzdCAmJiBvTWFuaWZlc3QuaWNvbnMgJiYgb01hbmlmZXN0Lmljb25zLmljb24pIHx8IFwiXCI7XG5cblx0XHQvL3NoYXJlTW9kZWw6IEhvbGRzIGFsbCB0aGUgc2hhcmluZyByZWxldmFudCBpbmZvcm1hdGlvbiBhbmQgaW5mbyB1c2VkIGluIFhNTCB2aWV3XG5cdFx0Y29uc3Qgb1NoYXJlSW5mbyA9IHtcblx0XHRcdGJvb2ttYXJrVGl0bGU6IGRvY3VtZW50LnRpdGxlLCAvL1RvIG5hbWUgdGhlIGJvb2ttYXJrIGFjY29yZGluZyB0byB0aGUgYXBwIHRpdGxlLlxuXHRcdFx0Ym9va21hcmtDdXN0b21Vcmw6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0Y29uc3Qgc0hhc2ggPSBoYXNoZXIuZ2V0SGFzaCgpO1xuXHRcdFx0XHRyZXR1cm4gc0hhc2ggPyBgIyR7c0hhc2h9YCA6IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuXHRcdFx0fSxcblx0XHRcdC8qXG5cdFx0XHRcdFx0XHRcdFRvIGJlIGFjdGl2YXRlZCBvbmNlIHRoZSBGTFAgc2hvd3MgdGhlIGNvdW50IC0gc2VlIGNvbW1lbnQgYWJvdmVcblx0XHRcdFx0XHRcdFx0Ym9va21hcmtTZXJ2aWNlVXJsOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHQvL3ZhciBvVGFibGUgPSBvVGFibGUuZ2V0SW5uZXJUYWJsZSgpOyBvVGFibGUgaXMgYWxyZWFkeSB0aGUgc2FwLmZlIHRhYmxlIChidXQgbm90IHRoZSBpbm5lciBvbmUpXG5cdFx0XHRcdFx0XHRcdFx0Ly8gd2Ugc2hvdWxkIHVzZSB0YWJsZS5nZXRMaXN0QmluZGluZ0luZm8gaW5zdGVhZCBvZiB0aGUgYmluZGluZ1xuXHRcdFx0XHRcdFx0XHRcdHZhciBvQmluZGluZyA9IG9UYWJsZS5nZXRCaW5kaW5nKFwicm93c1wiKSB8fCBvVGFibGUuZ2V0QmluZGluZyhcIml0ZW1zXCIpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBvQmluZGluZyA/IGZuR2V0RG93bmxvYWRVcmwob0JpbmRpbmcpIDogXCJcIjtcblx0XHRcdFx0XHRcdFx0fSwqL1xuXHRcdFx0aXNTaGFyZUluSmFtQWN0aXZlOiAhIWZuR2V0VXNlciAmJiBmbkdldFVzZXIoKS5pc0phbUFjdGl2ZSgpXG5cdFx0fTtcblxuXHRcdGNvbnN0IG9UZW1wbGF0ZVByaXZhdGVNb2RlbCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRNb2RlbChcIl90ZW1wbFByaXZcIikgYXMgSlNPTk1vZGVsO1xuXHRcdG9UZW1wbGF0ZVByaXZhdGVNb2RlbC5zZXRQcm9wZXJ0eShcIi9saXN0UmVwb3J0L3NoYXJlXCIsIG9TaGFyZUluZm8pO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byB1cGRhdGUgdGhlIGxvY2FsIFVJIG1vZGVsIG9mIHRoZSBwYWdlIHdpdGggdGhlIGZpZWxkcyB0aGF0IGFyZSBub3QgYXBwbGljYWJsZSB0byB0aGUgZmlsdGVyIGJhciAodGhpcyBpcyBzcGVjaWZpYyB0byB0aGUgQUxQIHNjZW5hcmlvKS5cblx0ICpcblx0ICogQHBhcmFtIG9JbnRlcm5hbE1vZGVsQ29udGV4dCBUaGUgaW50ZXJuYWwgbW9kZWwgY29udGV4dFxuXHQgKiBAcGFyYW0gb0ZpbHRlckJhciBNREMgZmlsdGVyIGJhclxuXHQgKi9cblx0X3VwZGF0ZUFMUE5vdEFwcGxpY2FibGVGaWVsZHMob0ludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCwgb0ZpbHRlckJhcjogRmlsdGVyQmFyKSB7XG5cdFx0Y29uc3QgbUNhY2hlOiBhbnkgPSB7fTtcblx0XHRjb25zdCBpZ25vcmVkRmllbGRzOiBhbnkgPSB7fSxcblx0XHRcdGFUYWJsZXMgPSB0aGlzLl9nZXRDb250cm9scyhcInRhYmxlXCIpLFxuXHRcdFx0YUNoYXJ0cyA9IHRoaXMuX2dldENvbnRyb2xzKFwiQ2hhcnRcIik7XG5cblx0XHRpZiAoIWFUYWJsZXMubGVuZ3RoIHx8ICFhQ2hhcnRzLmxlbmd0aCkge1xuXHRcdFx0Ly8gSWYgdGhlcmUncyBub3QgYSB0YWJsZSBhbmQgYSBjaGFydCwgd2UncmUgbm90IGluIHRoZSBBTFAgY2FzZVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZvciB0aGUgbW9tZW50LCB0aGVyZSdzIG5vdGhpbmcgZm9yIHRhYmxlcy4uLlxuXHRcdGFDaGFydHMuZm9yRWFjaChmdW5jdGlvbiAob0NoYXJ0OiBhbnkpIHtcblx0XHRcdGNvbnN0IHNDaGFydEVudGl0eVBhdGggPSBvQ2hhcnQuZGF0YShcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpLFxuXHRcdFx0XHRzQ2hhcnRFbnRpdHlTZXQgPSBzQ2hhcnRFbnRpdHlQYXRoLnNsaWNlKDEpLFxuXHRcdFx0XHRzQ2FjaGVLZXkgPSBgJHtzQ2hhcnRFbnRpdHlTZXR9Q2hhcnRgO1xuXHRcdFx0aWYgKCFtQ2FjaGVbc0NhY2hlS2V5XSkge1xuXHRcdFx0XHRtQ2FjaGVbc0NhY2hlS2V5XSA9IEZpbHRlclV0aWxzLmdldE5vdEFwcGxpY2FibGVGaWx0ZXJzKG9GaWx0ZXJCYXIsIG9DaGFydCk7XG5cdFx0XHR9XG5cdFx0XHRpZ25vcmVkRmllbGRzW3NDYWNoZUtleV0gPSBtQ2FjaGVbc0NhY2hlS2V5XTtcblx0XHR9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjb250cm9scy9pZ25vcmVkRmllbGRzXCIsIGlnbm9yZWRGaWVsZHMpO1xuXHR9XG5cblx0X2lzRmlsdGVyQmFySGlkZGVuKCkge1xuXHRcdHJldHVybiAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLmhpZGVGaWx0ZXJCYXI7XG5cdH1cblxuXHRfZ2V0QXBwbHlBdXRvbWF0aWNhbGx5T25WYXJpYW50KFZhcmlhbnRNYW5hZ2VtZW50OiBhbnksIGtleTogc3RyaW5nKTogQm9vbGVhbiB7XG5cdFx0aWYgKCFWYXJpYW50TWFuYWdlbWVudCB8fCAha2V5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IHZhcmlhbnRzID0gVmFyaWFudE1hbmFnZW1lbnQuZ2V0VmFyaWFudHMoKTtcblx0XHRjb25zdCBjdXJyZW50VmFyaWFudCA9IHZhcmlhbnRzLmZpbmQoZnVuY3Rpb24gKHZhcmlhbnQ6IGFueSkge1xuXHRcdFx0cmV0dXJuIHZhcmlhbnQgJiYgdmFyaWFudC5rZXkgPT09IGtleTtcblx0XHR9KTtcblx0XHRyZXR1cm4gKGN1cnJlbnRWYXJpYW50ICYmIGN1cnJlbnRWYXJpYW50LmV4ZWN1dGVPblNlbGVjdCkgfHwgZmFsc2U7XG5cdH1cblxuXHRfc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2gob1ZNOiBhbnkpIHtcblx0XHRpZiAoXG5cdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLmluaXRpYWxMb2FkID09PSBJbml0aWFsTG9hZE1vZGUuQXV0byAmJlxuXHRcdFx0KCFvVk0gfHwgb1ZNLmdldFN0YW5kYXJkVmFyaWFudEtleSgpID09PSBvVk0uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKSlcblx0XHQpIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0XHRpZiAob0ZpbHRlckJhcikge1xuXHRcdFx0XHRjb25zdCBvQ29uZGl0aW9ucyA9IG9GaWx0ZXJCYXIuZ2V0Q29uZGl0aW9ucygpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gb0NvbmRpdGlvbnMpIHtcblx0XHRcdFx0XHQvLyBpZ25vcmUgZmlsdGVycyBzdGFydGluZyB3aXRoICQgKGUuZy4gJHNlYXJjaCwgJGVkaXRTdGF0ZSlcblx0XHRcdFx0XHRpZiAoIXNLZXkuc3RhcnRzV2l0aChcIiRcIikgJiYgQXJyYXkuaXNBcnJheShvQ29uZGl0aW9uc1tzS2V5XSkgJiYgb0NvbmRpdGlvbnNbc0tleV0ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHQvLyBsb2FkIGRhdGEgYXMgcGVyIHVzZXIncyBzZXR0aW5nIG9mIGFwcGx5QXV0b21hdGljYWxseSBvbiB0aGUgdmFyaWFudFxuXHRcdFx0XHRcdFx0Y29uc3Qgc3RhbmRhcmRWYXJpYW50OiBhbnkgPSBvVk0uZ2V0VmFyaWFudHMoKS5maW5kKCh2YXJpYW50OiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhcmlhbnQua2V5ID09PSBvVk0uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHN0YW5kYXJkVmFyaWFudCAmJiBzdGFuZGFyZFZhcmlhbnQuZXhlY3V0ZU9uU2VsZWN0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRfdXBkYXRlVGFibGUob1RhYmxlOiBhbnkpIHtcblx0XHRpZiAoIW9UYWJsZS5pc1RhYmxlQm91bmQoKSB8fCB0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMpIHtcblx0XHRcdG9UYWJsZS5yZWJpbmQoKTtcblx0XHRcdHRoaXMuaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcyA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdF91cGRhdGVDaGFydChvQ2hhcnQ6IGFueSkge1xuXHRcdGNvbnN0IG9Jbm5lckNoYXJ0ID0gb0NoYXJ0LmdldENvbnRyb2xEZWxlZ2F0ZSgpLl9nZXRDaGFydChvQ2hhcnQpO1xuXHRcdGlmICghKG9Jbm5lckNoYXJ0ICYmIG9Jbm5lckNoYXJ0LmlzQm91bmQoXCJkYXRhXCIpKSB8fCB0aGlzLmhhc1BlbmRpbmdUYWJsZUNoYW5nZXMpIHtcblx0XHRcdG9DaGFydC5nZXRDb250cm9sRGVsZWdhdGUoKS5yZWJpbmQob0NoYXJ0LCBvSW5uZXJDaGFydC5nZXRCaW5kaW5nSW5mbyhcImRhdGFcIikpO1xuXHRcdFx0dGhpcy5oYXNQZW5kaW5nVGFibGVDaGFuZ2VzID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aGFuZGxlcnMgPSB7XG5cdFx0b25GaWx0ZXJTZWFyY2godGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIpIHtcblx0XHRcdHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKS50cmlnZ2VyU2VhcmNoKCk7XG5cdFx0fSxcblx0XHRvbkZpbHRlcnNDaGFuZ2VkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGlmIChvRmlsdGVyQmFyKSB7XG5cdFx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRcdC8vIFBlbmRpbmcgZmlsdGVycyBpbnRvIEZpbHRlckJhciB0byBiZSB1c2VkIGZvciBjdXN0b20gdmlld3Ncblx0XHRcdFx0dGhpcy5vblBlbmRpbmdGaWx0ZXJzKCk7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImFwcGxpZWRGaWx0ZXJzXCIsIG9GaWx0ZXJCYXIuZ2V0QXNzaWduZWRGaWx0ZXJzVGV4dCgpLmZpbHRlcnNUZXh0KTtcblx0XHRcdFx0aWYgKG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJjb25kaXRpb25zQmFzZWRcIikpIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25WYXJpYW50U2VsZWN0ZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHRjb25zdCBvVk0gPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0XHRjb25zdCBjdXJyZW50VmFyaWFudEtleSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJrZXlcIik7XG5cdFx0XHRjb25zdCBvTXVsdGlNb2RlQ29udHJvbCA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKTtcblxuXHRcdFx0b011bHRpTW9kZUNvbnRyb2w/LmludmFsaWRhdGVDb250ZW50KCk7XG5cdFx0XHRvTXVsdGlNb2RlQ29udHJvbD8uc2V0RnJlZXplQ29udGVudCh0cnVlKTtcblx0XHRcdC8vIHNldFRpbWVvdXQgY2F1c2UgdGhlIHZhcmlhbnQgbmVlZHMgdG8gYmUgYXBwbGllZCBiZWZvcmUganVkZ2luZyB0aGUgYXV0byBzZWFyY2ggb3IgdXBkYXRpbmcgdGhlIGFwcCBzdGF0ZVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLl9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaChvVk0pKSB7XG5cdFx0XHRcdFx0Ly8gdGhlIGFwcCBzdGF0ZSB3aWxsIGJlIHVwZGF0ZWQgdmlhIG9uU2VhcmNoIGhhbmRsZXJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpLnRyaWdnZXJTZWFyY2goKTtcblx0XHRcdFx0fSBlbHNlIGlmICghdGhpcy5fZ2V0QXBwbHlBdXRvbWF0aWNhbGx5T25WYXJpYW50KG9WTSwgY3VycmVudFZhcmlhbnRLZXkpKSB7XG5cdFx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCAwKTtcblx0XHR9LFxuXHRcdG9uVmFyaWFudFNhdmVkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyKSB7XG5cdFx0XHQvL1RPRE86IFNob3VsZCByZW1vdmUgdGhpcyBzZXRUaW1lT3V0IG9uY2UgVmFyaWFudCBNYW5hZ2VtZW50IHByb3ZpZGVzIGFuIGFwaSB0byBmZXRjaCB0aGUgY3VycmVudCB2YXJpYW50IGtleSBvbiBzYXZlISEhXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0fSwgMTAwMCk7XG5cdFx0fSxcblx0XHRvblNlYXJjaCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcikge1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRjb25zdCBvTWRjQ2hhcnQgPSB0aGlzLmdldENoYXJ0Q29udHJvbCgpO1xuXHRcdFx0Y29uc3QgYkhpZGVEcmFmdCA9IEZpbHRlclV0aWxzLmdldEVkaXRTdGF0ZUlzSGlkZURyYWZ0KG9GaWx0ZXJCYXIuZ2V0Q29uZGl0aW9ucygpKTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhhc1BlbmRpbmdGaWx0ZXJzXCIsIGZhbHNlKTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhpZGVEcmFmdEluZm9cIiwgYkhpZGVEcmFmdCk7XG5cblx0XHRcdGlmICghdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpKSB7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUFMUE5vdEFwcGxpY2FibGVGaWVsZHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBvRmlsdGVyQmFyKTtcblx0XHRcdH1cblx0XHRcdGlmIChvTWRjQ2hhcnQpIHtcblx0XHRcdFx0Ly8gZGlzYWJsZSBib3VuZCBhY3Rpb25zIFRPRE86IHRoaXMgY2xlYXJzIGV2ZXJ5dGhpbmcgZm9yIHRoZSBjaGFydD9cblx0XHRcdFx0KG9NZGNDaGFydC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0KS5zZXRQcm9wZXJ0eShcIlwiLCB7fSk7XG5cblx0XHRcdFx0Y29uc3Qgb1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9NZGNDaGFydC5nZXRCaW5kaW5nQ29udGV4dChcInBhZ2VJbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdFx0Y29uc3Qgc1RlbXBsYXRlQ29udGVudFZpZXcgPSBvUGFnZUludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGAke29QYWdlSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9hbHBDb250ZW50Vmlld2ApO1xuXHRcdFx0XHRpZiAoc1RlbXBsYXRlQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQpIHtcblx0XHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChzVGVtcGxhdGVDb250ZW50VmlldyA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZSkge1xuXHRcdFx0XHRcdHRoaXMuaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcyA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIHN0b3JlIGZpbHRlciBiYXIgY29uZGl0aW9ucyB0byB1c2UgbGF0ZXIgd2hpbGUgbmF2aWdhdGlvblxuXHRcdFx0U3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShvRmlsdGVyQmFyKVxuXHRcdFx0XHQudGhlbigob0V4dGVybmFsU3RhdGU6IGFueSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucyA9IG9FeHRlcm5hbFN0YXRlLmZpbHRlcjtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIGV4dGVybmFsIHN0YXRlXCIsIG9FcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdFx0aWYgKCh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkubGl2ZU1vZGUgPT09IGZhbHNlKSB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHN5c3RlbS5waG9uZSkge1xuXHRcdFx0XHRjb25zdCBvRHluYW1pY1BhZ2UgPSB0aGlzLl9nZXREeW5hbWljTGlzdFJlcG9ydENvbnRyb2woKTtcblx0XHRcdFx0b0R5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIFRyaWdnZXJzIGFuIG91dGJvdW5kIG5hdmlnYXRpb24gd2hlbiBhIHVzZXIgY2hvb3NlcyB0aGUgY2hldnJvbi5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSBvQ29udHJvbGxlclxuXHRcdCAqIEBwYXJhbSBzT3V0Ym91bmRUYXJnZXQgTmFtZSBvZiB0aGUgb3V0Ym91bmQgdGFyZ2V0IChuZWVkcyB0byBiZSBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdClcblx0XHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBjb250YWlucyB0aGUgZGF0YSBmb3IgdGhlIHRhcmdldCBhcHBcblx0XHQgKiBAcGFyYW0gc0NyZWF0ZVBhdGggQ3JlYXRlIHBhdGggd2hlbiB0aGUgY2hldnJvbiBpcyBjcmVhdGVkLlxuXHRcdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgb25jZSB0aGUgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWRcblx0XHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQoXG5cdFx0XHRvQ29udHJvbGxlcjogTGlzdFJlcG9ydENvbnRyb2xsZXIsXG5cdFx0XHRzT3V0Ym91bmRUYXJnZXQ6IHN0cmluZyxcblx0XHRcdG9Db250ZXh0OiBWNENvbnRleHQsXG5cdFx0XHRzQ3JlYXRlUGF0aDogc3RyaW5nXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5vbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQob0NvbnRyb2xsZXIsIHNPdXRib3VuZFRhcmdldCwgb0NvbnRleHQsIHNDcmVhdGVQYXRoKTtcblx0XHR9LFxuXHRcdG9uQ2hhcnRTZWxlY3Rpb25DaGFuZ2VkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IGFueSkge1xuXHRcdFx0Y29uc3Qgb01kY0NoYXJ0ID0gb0V2ZW50LmdldFNvdXJjZSgpLmdldENvbnRlbnQoKSxcblx0XHRcdFx0b1RhYmxlID0gdGhpcy5fZ2V0VGFibGUoKSxcblx0XHRcdFx0YURhdGEgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiZGF0YVwiKSxcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGlmIChhRGF0YSkge1xuXHRcdFx0XHQvLyB1cGRhdGUgYWN0aW9uIGJ1dHRvbnMgZW5hYmxlbWVudCAvIGRpc2FibGVtZW50XG5cdFx0XHRcdENoYXJ0UnVudGltZS5mblVwZGF0ZUNoYXJ0KG9FdmVudCk7XG5cdFx0XHRcdC8vIHVwZGF0ZSBzZWxlY3Rpb25zIG9uIHNlbGVjdGlvbiBvciBkZXNlbGVjdGlvblxuXHRcdFx0XHRDaGFydFV0aWxzLnNldENoYXJ0RmlsdGVycyhvTWRjQ2hhcnQpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc1RlbXBsYXRlQ29udGVudFZpZXcgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYCR7b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vYWxwQ29udGVudFZpZXdgKTtcblx0XHRcdGlmIChzVGVtcGxhdGVDb250ZW50VmlldyA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydCkge1xuXHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChvVGFibGUpIHtcblx0XHRcdFx0KG9UYWJsZSBhcyBhbnkpLnJlYmluZCgpO1xuXHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBhbnkpIHtcblx0XHRcdGNvbnN0IHNTZWxlY3RlZEtleSA9IG9FdmVudC5tUGFyYW1ldGVycy5rZXkgPyBvRXZlbnQubVBhcmFtZXRlcnMua2V5IDogbnVsbDtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJhbHBDb250ZW50Vmlld1wiLCBzU2VsZWN0ZWRLZXkpO1xuXHRcdFx0Y29uc3Qgb0NoYXJ0ID0gdGhpcy5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdGNvbnN0IG9UYWJsZSA9IHRoaXMuX2dldFRhYmxlKCk7XG5cdFx0XHRjb25zdCBvU2VnbWVudGVkQnV0dG9uRGVsZWdhdGUgPSB7XG5cdFx0XHRcdG9uQWZ0ZXJSZW5kZXJpbmcoKSB7XG5cdFx0XHRcdFx0Y29uc3QgYUl0ZW1zID0gb1NlZ21lbnRlZEJ1dHRvbi5nZXRJdGVtcygpO1xuXHRcdFx0XHRcdGFJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChvSXRlbTogYW55KSB7XG5cdFx0XHRcdFx0XHRpZiAob0l0ZW0uZ2V0S2V5KCkgPT09IHNTZWxlY3RlZEtleSkge1xuXHRcdFx0XHRcdFx0XHRvSXRlbS5mb2N1cygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdG9TZWdtZW50ZWRCdXR0b24ucmVtb3ZlRXZlbnREZWxlZ2F0ZShvU2VnbWVudGVkQnV0dG9uRGVsZWdhdGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgb1NlZ21lbnRlZEJ1dHRvbiA9IChcblx0XHRcdFx0c1NlbGVjdGVkS2V5ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3LlRhYmxlID8gdGhpcy5fZ2V0U2VnbWVudGVkQnV0dG9uKFwiVGFibGVcIikgOiB0aGlzLl9nZXRTZWdtZW50ZWRCdXR0b24oXCJDaGFydFwiKVxuXHRcdFx0KSBhcyBTZWdtZW50ZWRCdXR0b247XG5cdFx0XHRpZiAob1NlZ21lbnRlZEJ1dHRvbiAhPT0gb0V2ZW50LmdldFNvdXJjZSgpKSB7XG5cdFx0XHRcdG9TZWdtZW50ZWRCdXR0b24uYWRkRXZlbnREZWxlZ2F0ZShvU2VnbWVudGVkQnV0dG9uRGVsZWdhdGUpO1xuXHRcdFx0fVxuXHRcdFx0c3dpdGNoIChzU2VsZWN0ZWRLZXkpIHtcblx0XHRcdFx0Y2FzZSBUZW1wbGF0ZUNvbnRlbnRWaWV3LlRhYmxlOlxuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlKG9UYWJsZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydDpcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVDaGFydChvQ2hhcnQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFRlbXBsYXRlQ29udGVudFZpZXcuSHlicmlkOlxuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlKG9UYWJsZSk7XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlQ2hhcnQob0NoYXJ0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHR9LFxuXHRcdG9uRmlsdGVyc1NlZ21lbnRlZEJ1dHRvblByZXNzZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHRjb25zdCBpc0NvbXBhY3QgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwia2V5XCIpID09PSBcIkNvbXBhY3RcIjtcblx0XHRcdHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKS5zZXRWaXNpYmxlKGlzQ29tcGFjdCk7XG5cdFx0XHQodGhpcy5fZ2V0VmlzdWFsRmlsdGVyQmFyQ29udHJvbCgpIGFzIENvbnRyb2wpLnNldFZpc2libGUoIWlzQ29tcGFjdCk7XG5cdFx0fSxcblx0XHRvblN0YXRlQ2hhbmdlKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyKSB7XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0fSxcblx0XHRvbkR5bmFtaWNQYWdlVGl0bGVTdGF0ZUNoYW5nZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJCYXI6IGFueSA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGlmIChmaWx0ZXJCYXIgJiYgZmlsdGVyQmFyLmdldFNlZ21lbnRlZEJ1dHRvbigpKSB7XG5cdFx0XHRcdGlmIChvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiaXNFeHBhbmRlZFwiKSkge1xuXHRcdFx0XHRcdGZpbHRlckJhci5nZXRTZWdtZW50ZWRCdXR0b24oKS5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZpbHRlckJhci5nZXRTZWdtZW50ZWRCdXR0b24oKS5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0Zm9ybWF0dGVycyA9IHtcblx0XHRzZXRBTFBDb250cm9sTWVzc2FnZVN0cmlwKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBhSWdub3JlZEZpZWxkczogYW55W10sIGJJc0NoYXJ0OiBhbnksIG9BcHBseVN1cHBvcnRlZD86IGFueSkge1xuXHRcdFx0bGV0IHNUZXh0ID0gXCJcIjtcblx0XHRcdGJJc0NoYXJ0ID0gYklzQ2hhcnQgPT09IFwidHJ1ZVwiIHx8IGJJc0NoYXJ0ID09PSB0cnVlO1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGlmIChvRmlsdGVyQmFyICYmIEFycmF5LmlzQXJyYXkoYUlnbm9yZWRGaWVsZHMpICYmIGFJZ25vcmVkRmllbGRzLmxlbmd0aCA+IDAgJiYgYklzQ2hhcnQpIHtcblx0XHRcdFx0Y29uc3QgYUlnbm9yZWRMYWJlbHMgPSBNZXNzYWdlU3RyaXAuZ2V0TGFiZWxzKFxuXHRcdFx0XHRcdGFJZ25vcmVkRmllbGRzLFxuXHRcdFx0XHRcdG9GaWx0ZXJCYXIuZGF0YShcImVudGl0eVR5cGVcIiksXG5cdFx0XHRcdFx0b0ZpbHRlckJhcixcblx0XHRcdFx0XHR0aGlzLm9SZXNvdXJjZUJ1bmRsZSBhcyBSZXNvdXJjZUJ1bmRsZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBiSXNTZWFyY2hJZ25vcmVkID0gIW9BcHBseVN1cHBvcnRlZC5lbmFibGVTZWFyY2g7XG5cdFx0XHRcdHNUZXh0ID0gYklzQ2hhcnRcblx0XHRcdFx0XHQ/IE1lc3NhZ2VTdHJpcC5nZXRBTFBUZXh0KGFJZ25vcmVkTGFiZWxzLCBvRmlsdGVyQmFyLCBiSXNTZWFyY2hJZ25vcmVkKVxuXHRcdFx0XHRcdDogTWVzc2FnZVN0cmlwLmdldFRleHQoYUlnbm9yZWRMYWJlbHMsIG9GaWx0ZXJCYXIsIFwiXCIsIERlbGVnYXRlVXRpbC5nZXRMb2NhbGl6ZWRUZXh0KTtcblx0XHRcdFx0cmV0dXJuIHNUZXh0O1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFJlcG9ydENvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7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
@@ -34,7 +34,6 @@ import ChartUtils from "sap/fe/macros/chart/ChartUtils";
34
34
  import CommonHelper from "sap/fe/macros/CommonHelper";
35
35
  import DelegateUtil from "sap/fe/macros/DelegateUtil";
36
36
  import FilterUtils from "sap/fe/macros/filter/FilterUtils";
37
- import ShareAPI from "sap/fe/macros/share/ShareAPI";
38
37
  import TableHelper from "sap/fe/macros/table/TableHelper";
39
38
  import MultipleModeControl from "sap/fe/templates/ListReport/controls/MultipleModeControl";
40
39
  import ExtensionAPI from "sap/fe/templates/ListReport/ExtensionAPI";
@@ -646,10 +645,6 @@ class ListReportController extends PageController {
646
645
  }
647
646
 
648
647
  handlers = {
649
- handleShareShortcut(this: ListReportController) {
650
- const shareAPI: ShareAPI = this.getView().byId("fe::Share") as ShareAPI;
651
- shareAPI.openMenu();
652
- },
653
648
  onFilterSearch(this: ListReportController) {
654
649
  this._getFilterBarControl().triggerSearch();
655
650
  },