@sapui5/sap.fe.controls 1.148.3 → 1.150.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/controls/.library +1 -1
  3. package/src/sap/fe/controls/easyFilter/EasyFilterBarContainer.js +87 -62
  4. package/src/sap/fe/controls/easyFilter/EasyFilterBarContainer.tsx +31 -5
  5. package/src/sap/fe/controls/easyFilter/EasyFilterInput.js +42 -14
  6. package/src/sap/fe/controls/easyFilter/EasyFilterInput.tsx +26 -0
  7. package/src/sap/fe/controls/easyFilter/Token.js +4 -4
  8. package/src/sap/fe/controls/easyFilter/innerControls/MenuWithSingleSelectFactory.js +2 -2
  9. package/src/sap/fe/controls/easyFilter/innerControls/ValueHelpPreviewFactory.js +7 -3
  10. package/src/sap/fe/controls/easyFilter/innerControls/ValueHelpPreviewFactory.ts +5 -0
  11. package/src/sap/fe/controls/library.js +1 -1
  12. package/src/sap/fe/controls/messagebundle.properties +2 -0
  13. package/src/sap/fe/controls/messagebundle_ar.properties +11 -3
  14. package/src/sap/fe/controls/messagebundle_bg.properties +11 -3
  15. package/src/sap/fe/controls/messagebundle_ca.properties +11 -3
  16. package/src/sap/fe/controls/messagebundle_cnr.properties +11 -3
  17. package/src/sap/fe/controls/messagebundle_cs.properties +11 -3
  18. package/src/sap/fe/controls/messagebundle_cy.properties +11 -3
  19. package/src/sap/fe/controls/messagebundle_da.properties +11 -3
  20. package/src/sap/fe/controls/messagebundle_de.properties +12 -4
  21. package/src/sap/fe/controls/messagebundle_el.properties +11 -3
  22. package/src/sap/fe/controls/messagebundle_en.properties +11 -3
  23. package/src/sap/fe/controls/messagebundle_en_GB.properties +11 -3
  24. package/src/sap/fe/controls/messagebundle_en_US_saprigi.properties +8 -3
  25. package/src/sap/fe/controls/messagebundle_es.properties +11 -3
  26. package/src/sap/fe/controls/messagebundle_es_MX.properties +11 -3
  27. package/src/sap/fe/controls/messagebundle_et.properties +11 -3
  28. package/src/sap/fe/controls/messagebundle_fi.properties +11 -3
  29. package/src/sap/fe/controls/messagebundle_fr.properties +11 -3
  30. package/src/sap/fe/controls/messagebundle_fr_CA.properties +11 -3
  31. package/src/sap/fe/controls/messagebundle_hi.properties +11 -3
  32. package/src/sap/fe/controls/messagebundle_hr.properties +11 -3
  33. package/src/sap/fe/controls/messagebundle_hu.properties +9 -1
  34. package/src/sap/fe/controls/messagebundle_id.properties +11 -3
  35. package/src/sap/fe/controls/messagebundle_it.properties +11 -3
  36. package/src/sap/fe/controls/messagebundle_iw.properties +11 -3
  37. package/src/sap/fe/controls/messagebundle_ja.properties +11 -3
  38. package/src/sap/fe/controls/messagebundle_kk.properties +11 -3
  39. package/src/sap/fe/controls/messagebundle_ko.properties +11 -3
  40. package/src/sap/fe/controls/messagebundle_lt.properties +11 -3
  41. package/src/sap/fe/controls/messagebundle_lv.properties +11 -3
  42. package/src/sap/fe/controls/messagebundle_mk.properties +11 -3
  43. package/src/sap/fe/controls/messagebundle_ms.properties +11 -3
  44. package/src/sap/fe/controls/messagebundle_nl.properties +11 -3
  45. package/src/sap/fe/controls/messagebundle_no.properties +9 -1
  46. package/src/sap/fe/controls/messagebundle_pl.properties +9 -1
  47. package/src/sap/fe/controls/messagebundle_pt.properties +11 -3
  48. package/src/sap/fe/controls/messagebundle_pt_PT.properties +11 -3
  49. package/src/sap/fe/controls/messagebundle_ro.properties +11 -3
  50. package/src/sap/fe/controls/messagebundle_ru.properties +11 -3
  51. package/src/sap/fe/controls/messagebundle_sh.properties +11 -3
  52. package/src/sap/fe/controls/messagebundle_sk.properties +11 -3
  53. package/src/sap/fe/controls/messagebundle_sl.properties +11 -3
  54. package/src/sap/fe/controls/messagebundle_sr.properties +11 -3
  55. package/src/sap/fe/controls/messagebundle_sv.properties +11 -3
  56. package/src/sap/fe/controls/messagebundle_th.properties +12 -4
  57. package/src/sap/fe/controls/messagebundle_tr.properties +11 -3
  58. package/src/sap/fe/controls/messagebundle_uk.properties +11 -3
  59. package/src/sap/fe/controls/messagebundle_vi.properties +11 -3
  60. package/src/sap/fe/controls/messagebundle_zh_CN.properties +11 -3
  61. package/src/sap/fe/controls/messagebundle_zh_TW.properties +11 -3
  62. package/src/sap/fe/controls/shortcuts/ShortcutExplanationProvider.js +2 -5
  63. package/src/sap/fe/controls/shortcuts/popup/ShortcutTool.js +5 -8
  64. package/src/sap/fe/controls/themes/base/EasyFill.less +6 -15
@@ -5,7 +5,7 @@
5
5
  sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runtime/jsx", "sap/fe/controls/easyFilter/Token", "sap/m/Button", "sap/m/FlexBox", "sap/m/Popover", "sap/m/Text", "sap/m/Tokenizer", "sap/m/VBox", "sap/m/library", "sap/ui/core/Control", "sap/ui/core/CustomData", "sap/ui/core/Lib", "sap/ui/core/library", "sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/controls/AINotice", "sap/fe/controls/easyFilter/EasyFilterInput", "sap/m/HBox", "sap/m/MessageStrip", "sap/m/MessageToast", "sap/m/OverflowToolbar", "sap/m/ToggleButton", "sap/m/ToolbarSpacer", "sap/ui/core/InvisibleMessage", "sap/ui/core/message/MessageType", "sap/ui/model/FilterOperator", "sap/ui/performance/trace/FESRHelper", "./ErrorMessageHandler", "./PXFeedback", "./utils", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/Fragment", "sap/fe/base/jsx-runtime/jsxs"], function (Log, encodeXML, ClassSupport, jsx, Token, Button, FlexBox, Popover, Text, Tokenizer, VBox, library, Control, CustomData, Lib, coreLibrary, deepClone, BindingToolkit, AINotice, EasyFilterInput, HBox, MessageStrip, MessageToast, OverflowToolbar, ToggleButton, ToolbarSpacer, InvisibleMessage, MessageType, FilterOperator, FESRHelper, ErrorMessageHandler, PXFeedback, EasyFilterUtils, _jsx, _Fragment, _jsxs) {
6
6
  "use strict";
7
7
 
8
- var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _dec20, _dec21, _dec22, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21;
8
+ var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec0, _dec1, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _dec20, _dec21, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20;
9
9
  function __ui5_require_async(path) {
10
10
  return new Promise((resolve, reject) => {
11
11
  sap.ui.require([path], module => {
@@ -58,51 +58,56 @@ sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/Class
58
58
  let EasyFilterBarContainer = (_dec = defineUI5Class("sap.fe.controls.easyFilter.EasyFilterBarContainer"), _dec2 = property({
59
59
  type: "string"
60
60
  }), _dec3 = property({
61
- type: "string"
61
+ type: "int",
62
+ defaultValue: 1
62
63
  }), _dec4 = property({
63
64
  type: "string"
64
65
  }), _dec5 = property({
65
- type: "array"
66
+ type: "string"
66
67
  }), _dec6 = property({
67
68
  type: "array"
68
69
  }), _dec7 = property({
70
+ type: "array"
71
+ }), _dec8 = property({
69
72
  type: "function"
70
- }), _dec8 = defineReference(), _dec9 = defineReference(), _dec10 = aggregation({
73
+ }), _dec9 = defineReference(), _dec0 = defineReference(), _dec1 = aggregation({
71
74
  type: "sap.ui.core.Control"
72
- }), _dec11 = aggregation({
75
+ }), _dec10 = aggregation({
73
76
  type: "sap.ui.core.Control"
74
- }), _dec12 = event(), _dec13 = event(), _dec14 = event(), _dec15 = event(), _dec16 = event(), _dec17 = event(), _dec18 = event(), _dec19 = event(), _dec20 = event(), _dec21 = event(), _dec22 = defineState(), _dec(_class = (_class2 = /*#__PURE__*/function (_Control) {
77
+ }), _dec11 = event(), _dec12 = event(), _dec13 = event(), _dec14 = event(), _dec15 = event(), _dec16 = event(), _dec17 = event(), _dec18 = event(), _dec19 = event(), _dec20 = event(), _dec21 = defineState(), _dec(_class = (_class2 = /*#__PURE__*/function (_Control) {
75
78
  function EasyFilterBarContainer(properties, others) {
76
79
  var _this;
77
80
  _this = _Control.call(this, properties, others) || this;
78
81
  _initializerDefineProperty(_this, "contextPath", _descriptor, _this);
79
- _initializerDefineProperty(_this, "appId", _descriptor2, _this);
80
- _initializerDefineProperty(_this, "easyFilterLib", _descriptor3, _this);
81
- _initializerDefineProperty(_this, "filterBarMetadata", _descriptor4, _this);
82
- _initializerDefineProperty(_this, "recommendedValues", _descriptor5, _this);
83
- _initializerDefineProperty(_this, "dataFetcher", _descriptor6, _this);
84
- _initializerDefineProperty(_this, "easyFilterInput", _descriptor7, _this);
85
- _initializerDefineProperty(_this, "tokenizer", _descriptor8, _this);
86
- _initializerDefineProperty(_this, "content", _descriptor9, _this);
87
- _initializerDefineProperty(_this, "aiNotice", _descriptor10, _this);
88
- _initializerDefineProperty(_this, "tokensChanged", _descriptor11, _this);
89
- _initializerDefineProperty(_this, "sortersChanged", _descriptor12, _this);
90
- _initializerDefineProperty(_this, "groupLevelsChanged", _descriptor13, _this);
91
- _initializerDefineProperty(_this, "queryChanged", _descriptor14, _this);
92
- _initializerDefineProperty(_this, "showValueHelp", _descriptor15, _this);
93
- _initializerDefineProperty(_this, "liveChange", _descriptor16, _this);
82
+ _initializerDefineProperty(_this, "easyFilterVersion", _descriptor2, _this);
83
+ _initializerDefineProperty(_this, "appId", _descriptor3, _this);
84
+ _initializerDefineProperty(_this, "easyFilterLib", _descriptor4, _this);
85
+ _initializerDefineProperty(_this, "filterBarMetadata", _descriptor5, _this);
86
+ _initializerDefineProperty(_this, "recommendedValues", _descriptor6, _this);
87
+ _initializerDefineProperty(_this, "dataFetcher", _descriptor7, _this);
88
+ _initializerDefineProperty(_this, "easyFilterInput", _descriptor8, _this);
89
+ _initializerDefineProperty(_this, "tokenizer", _descriptor9, _this);
90
+ _initializerDefineProperty(_this, "content", _descriptor0, _this);
91
+ _initializerDefineProperty(_this, "aiNotice", _descriptor1, _this);
92
+ _initializerDefineProperty(_this, "tokensChanged", _descriptor10, _this);
93
+ _initializerDefineProperty(_this, "sortersChanged", _descriptor11, _this);
94
+ _initializerDefineProperty(_this, "groupLevelsChanged", _descriptor12, _this);
95
+ _initializerDefineProperty(_this, "queryChanged", _descriptor13, _this);
96
+ _initializerDefineProperty(_this, "showValueHelp", _descriptor14, _this);
97
+ _initializerDefineProperty(_this, "liveChange", _descriptor15, _this);
94
98
  /** Fires when the user manually removes or edits a filter token. Does not fire when tokens are set by the AI search result. */
95
- _initializerDefineProperty(_this, "tokensChangedByUser", _descriptor17, _this);
96
- _initializerDefineProperty(_this, "clearFilters", _descriptor18, _this);
97
- _initializerDefineProperty(_this, "beforeQueryProcessing", _descriptor19, _this);
98
- _initializerDefineProperty(_this, "afterQueryProcessing", _descriptor20, _this);
99
- _initializerDefineProperty(_this, "state", _descriptor21, _this);
99
+ _initializerDefineProperty(_this, "tokensChangedByUser", _descriptor16, _this);
100
+ _initializerDefineProperty(_this, "clearFilters", _descriptor17, _this);
101
+ _initializerDefineProperty(_this, "beforeQueryProcessing", _descriptor18, _this);
102
+ _initializerDefineProperty(_this, "afterQueryProcessing", _descriptor19, _this);
103
+ _initializerDefineProperty(_this, "state", _descriptor20, _this);
100
104
  _this.shouldTokenChangeEventFired = true;
101
105
  _this.isResettingToDefaultTokens = false;
102
106
  _this.inputFieldReady = new Promise(resolve => {
103
107
  _this.resolveContentReady = resolve;
104
108
  });
105
109
  _this.shouldMessageStripRemove = true;
110
+ _this.ariaLabelApplied = false;
106
111
  _this.supportsSorting = true;
107
112
  _this.supportsGrouping = true;
108
113
  _this.initialize();
@@ -159,7 +164,7 @@ sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/Class
159
164
  }
160
165
 
161
166
  // This method should be used before updating the state, once the state is updated the previous overridden default values would be gone forever
162
- ;
167
+ ;
163
168
  _proto.getDefaultTokens = function getDefaultTokens() {
164
169
  const tokens = [];
165
170
  if (!this.mandatoryKeyMap) {
@@ -193,13 +198,21 @@ sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/Class
193
198
  });
194
199
  return tokens;
195
200
  };
201
+ _proto.buildInputAriaLabel = function buildInputAriaLabel() {
202
+ const mandatoryFields = this.filterBarMetadata?.filter(f => f.required) ?? [];
203
+ if (mandatoryFields.length === 0) {
204
+ return "";
205
+ }
206
+ const fieldLabels = mandatoryFields.map(f => f.label).join(", ");
207
+ return this.resourceBundle.getText("M_EASY_FILTER_INPUT_REQUIRED_FIELDS", [fieldLabels]);
208
+ };
196
209
  _proto.onEnterPressed = function onEnterPressed(e) {
197
210
  this.onGoPress(e.getParameter("query"));
198
211
  }
199
212
 
200
213
  //Making it public because in live mode the app developer can decide whether to display the error ValueStateMessage
201
214
  //In non-live mode , we are already internally handling it on every time time a user clicks on GO/Enter buttons
202
- ;
215
+ ;
203
216
  _proto.checkIfAllMandatoryTokensFilled = function checkIfAllMandatoryTokensFilled() {
204
217
  const tokensInState = this.getUnSetMandatoryTokensInCurrentState();
205
218
  if (tokensInState.length !== 0) {
@@ -231,7 +244,7 @@ sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/Class
231
244
  }
232
245
  this.fireEvent("beforeQueryProcessing");
233
246
  const easyFilterMetadata = {
234
- version: 1,
247
+ version: this.easyFilterVersion ?? 1,
235
248
  entitySet: this.contextPath,
236
249
  fields: this.filterBarMetadata
237
250
  };
@@ -467,7 +480,7 @@ sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/Class
467
480
  }
468
481
 
469
482
  //every single select menu type should have only one value, else splice to one value and update the message strip
470
- ;
483
+ ;
471
484
  _proto.verifySingleSelectTokenValues = function verifySingleSelectTokenValues(tokens) {
472
485
  const singleSelectTokenLabels = [];
473
486
  tokens.forEach(token => {
@@ -580,8 +593,7 @@ sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/Class
580
593
  }
581
594
  });
582
595
  };
583
- _proto.onStateChange = function onStateChange() {
584
- let changedProps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
596
+ _proto.onStateChange = function onStateChange(changedProps = []) {
585
597
  if (changedProps.includes("tokens")) {
586
598
  if (this.shouldTokenChangeEventFired) {
587
599
  this.fireEvent("tokensChanged", {
@@ -619,11 +631,12 @@ sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/Class
619
631
  this.isMandatoryCheckRequired = false;
620
632
  this.shouldTokenChangeEventFired = true;
621
633
  this.isResettingToDefaultTokens = false;
622
-
623
- // onsapfocusleave method in sap.m.Tokenizer is automatically converting the rendermode of tokenizer to "Narrow" from "loose"
624
- // In this process there are multiple popover issues happening
625
- // So as a temporary fix overriding the function
626
- (this.tokenizer?.current).onsapfocusleave = () => {};
634
+ if (this.tokenizer?.current) {
635
+ // onsapfocusleave method in sap.m.Tokenizer is automatically converting the rendermode of tokenizer to "Narrow" from "loose"
636
+ // In this process there are multiple popover issues happening
637
+ // So as a temporary fix overriding the function
638
+ this.tokenizer.current.onsapfocusleave = () => {};
639
+ }
627
640
  };
628
641
  _proto.onThumbUpPressed = function onThumbUpPressed() {
629
642
  this.state.thumbUpButtonPressed = true;
@@ -849,9 +862,7 @@ sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/Class
849
862
  * @param clearAllFilters If true, fires the clearFilters event to notify consumers that filters should be cleared else just resets the tokens without firing the event
850
863
  * @param isResettingToDefaultTokens If true, indicates that the resetButton is restoring tokens to their default values
851
864
  */;
852
- _proto.resetState = function resetState() {
853
- let clearAllFilters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
854
- let isResettingToDefaultTokens = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
865
+ _proto.resetState = function resetState(clearAllFilters = true, isResettingToDefaultTokens = false) {
855
866
  if (clearAllFilters) {
856
867
  this.fireEvent("clearFilters");
857
868
  this.state.groupLevels = [];
@@ -878,7 +889,7 @@ sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/Class
878
889
  }
879
890
 
880
891
  //The below code updates the existing state by fetching the key and selectedValues
881
- ;
892
+ ;
882
893
  _proto.updateTokenArray = function updateTokenArray(changeType, newTokenSpecificValues, tokenKey) {
883
894
  const newTokens = this.state.tokens.map(token => ({
884
895
  ...token,
@@ -999,6 +1010,15 @@ sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/Class
999
1010
  const requiredKeys = tokens.map(token => token.key);
1000
1011
  return this.tokenizer.current?.getTokens().filter(token => requiredKeys.includes(token.getKey()));
1001
1012
  };
1013
+ _proto.onAfterRendering = function onAfterRendering() {
1014
+ if (!this.ariaLabelApplied && this.filterBarMetadata) {
1015
+ const ariaText = this.buildInputAriaLabel();
1016
+ if (ariaText) {
1017
+ this.easyFilterInput.current?.setAriaLabel(ariaText);
1018
+ }
1019
+ this.ariaLabelApplied = true;
1020
+ }
1021
+ };
1002
1022
  EasyFilterBarContainer.render = function render(rm, control) {
1003
1023
  return jsx.renderUsingRenderManager(rm, control, () => {
1004
1024
  return _jsx("span", {
@@ -1013,102 +1033,107 @@ sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/Class
1013
1033
  enumerable: true,
1014
1034
  writable: true,
1015
1035
  initializer: null
1016
- }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "appId", [_dec3], {
1036
+ }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "easyFilterVersion", [_dec3], {
1037
+ configurable: true,
1038
+ enumerable: true,
1039
+ writable: true,
1040
+ initializer: null
1041
+ }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "appId", [_dec4], {
1017
1042
  configurable: true,
1018
1043
  enumerable: true,
1019
1044
  writable: true,
1020
1045
  initializer: null
1021
- }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "easyFilterLib", [_dec4], {
1046
+ }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "easyFilterLib", [_dec5], {
1022
1047
  configurable: true,
1023
1048
  enumerable: true,
1024
1049
  writable: true,
1025
1050
  initializer: null
1026
- }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "filterBarMetadata", [_dec5], {
1051
+ }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "filterBarMetadata", [_dec6], {
1027
1052
  configurable: true,
1028
1053
  enumerable: true,
1029
1054
  writable: true,
1030
1055
  initializer: null
1031
- }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "recommendedValues", [_dec6], {
1056
+ }), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "recommendedValues", [_dec7], {
1032
1057
  configurable: true,
1033
1058
  enumerable: true,
1034
1059
  writable: true,
1035
1060
  initializer: null
1036
- }), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "dataFetcher", [_dec7], {
1061
+ }), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, "dataFetcher", [_dec8], {
1037
1062
  configurable: true,
1038
1063
  enumerable: true,
1039
1064
  writable: true,
1040
1065
  initializer: null
1041
- }), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, "easyFilterInput", [_dec8], {
1066
+ }), _descriptor8 = _applyDecoratedDescriptor(_class2.prototype, "easyFilterInput", [_dec9], {
1042
1067
  configurable: true,
1043
1068
  enumerable: true,
1044
1069
  writable: true,
1045
1070
  initializer: null
1046
- }), _descriptor8 = _applyDecoratedDescriptor(_class2.prototype, "tokenizer", [_dec9], {
1071
+ }), _descriptor9 = _applyDecoratedDescriptor(_class2.prototype, "tokenizer", [_dec0], {
1047
1072
  configurable: true,
1048
1073
  enumerable: true,
1049
1074
  writable: true,
1050
1075
  initializer: null
1051
- }), _descriptor9 = _applyDecoratedDescriptor(_class2.prototype, "content", [_dec10], {
1076
+ }), _descriptor0 = _applyDecoratedDescriptor(_class2.prototype, "content", [_dec1], {
1052
1077
  configurable: true,
1053
1078
  enumerable: true,
1054
1079
  writable: true,
1055
1080
  initializer: null
1056
- }), _descriptor10 = _applyDecoratedDescriptor(_class2.prototype, "aiNotice", [_dec11], {
1081
+ }), _descriptor1 = _applyDecoratedDescriptor(_class2.prototype, "aiNotice", [_dec10], {
1057
1082
  configurable: true,
1058
1083
  enumerable: true,
1059
1084
  writable: true,
1060
1085
  initializer: null
1061
- }), _descriptor11 = _applyDecoratedDescriptor(_class2.prototype, "tokensChanged", [_dec12], {
1086
+ }), _descriptor10 = _applyDecoratedDescriptor(_class2.prototype, "tokensChanged", [_dec11], {
1062
1087
  configurable: true,
1063
1088
  enumerable: true,
1064
1089
  writable: true,
1065
1090
  initializer: null
1066
- }), _descriptor12 = _applyDecoratedDescriptor(_class2.prototype, "sortersChanged", [_dec13], {
1091
+ }), _descriptor11 = _applyDecoratedDescriptor(_class2.prototype, "sortersChanged", [_dec12], {
1067
1092
  configurable: true,
1068
1093
  enumerable: true,
1069
1094
  writable: true,
1070
1095
  initializer: null
1071
- }), _descriptor13 = _applyDecoratedDescriptor(_class2.prototype, "groupLevelsChanged", [_dec14], {
1096
+ }), _descriptor12 = _applyDecoratedDescriptor(_class2.prototype, "groupLevelsChanged", [_dec13], {
1072
1097
  configurable: true,
1073
1098
  enumerable: true,
1074
1099
  writable: true,
1075
1100
  initializer: null
1076
- }), _descriptor14 = _applyDecoratedDescriptor(_class2.prototype, "queryChanged", [_dec15], {
1101
+ }), _descriptor13 = _applyDecoratedDescriptor(_class2.prototype, "queryChanged", [_dec14], {
1077
1102
  configurable: true,
1078
1103
  enumerable: true,
1079
1104
  writable: true,
1080
1105
  initializer: null
1081
- }), _descriptor15 = _applyDecoratedDescriptor(_class2.prototype, "showValueHelp", [_dec16], {
1106
+ }), _descriptor14 = _applyDecoratedDescriptor(_class2.prototype, "showValueHelp", [_dec15], {
1082
1107
  configurable: true,
1083
1108
  enumerable: true,
1084
1109
  writable: true,
1085
1110
  initializer: null
1086
- }), _descriptor16 = _applyDecoratedDescriptor(_class2.prototype, "liveChange", [_dec17], {
1111
+ }), _descriptor15 = _applyDecoratedDescriptor(_class2.prototype, "liveChange", [_dec16], {
1087
1112
  configurable: true,
1088
1113
  enumerable: true,
1089
1114
  writable: true,
1090
1115
  initializer: null
1091
- }), _descriptor17 = _applyDecoratedDescriptor(_class2.prototype, "tokensChangedByUser", [_dec18], {
1116
+ }), _descriptor16 = _applyDecoratedDescriptor(_class2.prototype, "tokensChangedByUser", [_dec17], {
1092
1117
  configurable: true,
1093
1118
  enumerable: true,
1094
1119
  writable: true,
1095
1120
  initializer: null
1096
- }), _descriptor18 = _applyDecoratedDescriptor(_class2.prototype, "clearFilters", [_dec19], {
1121
+ }), _descriptor17 = _applyDecoratedDescriptor(_class2.prototype, "clearFilters", [_dec18], {
1097
1122
  configurable: true,
1098
1123
  enumerable: true,
1099
1124
  writable: true,
1100
1125
  initializer: null
1101
- }), _descriptor19 = _applyDecoratedDescriptor(_class2.prototype, "beforeQueryProcessing", [_dec20], {
1126
+ }), _descriptor18 = _applyDecoratedDescriptor(_class2.prototype, "beforeQueryProcessing", [_dec19], {
1102
1127
  configurable: true,
1103
1128
  enumerable: true,
1104
1129
  writable: true,
1105
1130
  initializer: null
1106
- }), _descriptor20 = _applyDecoratedDescriptor(_class2.prototype, "afterQueryProcessing", [_dec21], {
1131
+ }), _descriptor19 = _applyDecoratedDescriptor(_class2.prototype, "afterQueryProcessing", [_dec20], {
1107
1132
  configurable: true,
1108
1133
  enumerable: true,
1109
1134
  writable: true,
1110
1135
  initializer: null
1111
- }), _descriptor21 = _applyDecoratedDescriptor(_class2.prototype, "state", [_dec22], {
1136
+ }), _descriptor20 = _applyDecoratedDescriptor(_class2.prototype, "state", [_dec21], {
1112
1137
  configurable: true,
1113
1138
  enumerable: true,
1114
1139
  writable: true,
@@ -1133,4 +1158,4 @@ sap.ui.define(["sap/base/Log", "sap/base/security/encodeXML", "sap/fe/base/Class
1133
1158
  _exports = EasyFilterBarContainer;
1134
1159
  return _exports;
1135
1160
  }, false);
1136
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFYXN5RmlsdGVyQmFyQ29udGFpbmVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJwcm9wZXJ0eSIsInR5cGUiLCJfZGVjMyIsIl9kZWM0IiwiX2RlYzUiLCJfZGVjNiIsIl9kZWM3IiwiX2RlYzgiLCJkZWZpbmVSZWZlcmVuY2UiLCJfZGVjOSIsIl9kZWMxMCIsImFnZ3JlZ2F0aW9uIiwiX2RlYzExIiwiX2RlYzEyIiwiZXZlbnQiLCJfZGVjMTMiLCJfZGVjMTQiLCJfZGVjMTUiLCJfZGVjMTYiLCJfZGVjMTciLCJfZGVjMTgiLCJfZGVjMTkiLCJfZGVjMjAiLCJfZGVjMjEiLCJfZGVjMjIiLCJkZWZpbmVTdGF0ZSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQ29udHJvbCIsInByb3BlcnRpZXMiLCJvdGhlcnMiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2Rlc2NyaXB0b3I5IiwiX2Rlc2NyaXB0b3IxMCIsIl9kZXNjcmlwdG9yMTEiLCJfZGVzY3JpcHRvcjEyIiwiX2Rlc2NyaXB0b3IxMyIsIl9kZXNjcmlwdG9yMTQiLCJfZGVzY3JpcHRvcjE1IiwiX2Rlc2NyaXB0b3IxNiIsIl9kZXNjcmlwdG9yMTciLCJfZGVzY3JpcHRvcjE4IiwiX2Rlc2NyaXB0b3IxOSIsIl9kZXNjcmlwdG9yMjAiLCJfZGVzY3JpcHRvcjIxIiwic2hvdWxkVG9rZW5DaGFuZ2VFdmVudEZpcmVkIiwiaXNSZXNldHRpbmdUb0RlZmF1bHRUb2tlbnMiLCJpbnB1dEZpZWxkUmVhZHkiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlc29sdmVDb250ZW50UmVhZHkiLCJzaG91bGRNZXNzYWdlU3RyaXBSZW1vdmUiLCJzdXBwb3J0c1NvcnRpbmciLCJzdXBwb3J0c0dyb3VwaW5nIiwiaW5pdGlhbGl6ZSIsImludmlzaWJsZU1lc3NhZ2UiLCJJbnZpc2libGVNZXNzYWdlIiwiZ2V0SW5zdGFuY2UiLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0RWFzeUZpbHRlckxpYiIsImVhc3lGaWx0ZXJMaWIiLCJzZXRQcm9wZXJ0eSIsImVhc3lmaWx0ZXIiLCJfX3VpNV9yZXF1aXJlX2FzeW5jIiwic2V0QXBwSWQiLCJhcHBJZCIsImVhc3lGaWx0ZXJJbnB1dCIsImN1cnJlbnQiLCJzZXRGaWx0ZXJCYXJNZXRhZGF0YSIsImZpbHRlckJhck1ldGFkYXRhIiwidG9rZW5zIiwiZ2V0RGVmYXVsdFRva2VucyIsImlubmVyQ29udHJvbFBvcG92ZXIiLCJjcmVhdGVQb3BvdmVyRm9ySW5uZXJDb250cm9scyIsImFkZERlcGVuZGVudCIsInN0YXRlIiwic2hvd1Jlc3VsdCIsImxlbmd0aCIsImlzTWFuZGF0b3J5Q2hlY2tSZXF1aXJlZCIsImluaXQiLCJyZXNvdXJjZUJ1bmRsZSIsIkxpYiIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiY29udGVudCIsImNyZWF0ZUNvbnRlbnQiLCJtYW5kYXRvcnlLZXlNYXAiLCJmb3JFYWNoIiwiZGF0YSIsImlzUmVxdWlyZWQiLCJyZXF1aXJlZCIsIm5hbWUiLCJwdXNoIiwia2V5IiwibGFiZWwiLCJrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzIiwiZGVmYXVsdFZhbHVlIiwiYnVzeSIsIm9uRW50ZXJQcmVzc2VkIiwiZSIsIm9uR29QcmVzcyIsImdldFBhcmFtZXRlciIsImNoZWNrSWZBbGxNYW5kYXRvcnlUb2tlbnNGaWxsZWQiLCJ0b2tlbnNJblN0YXRlIiwiZ2V0VW5TZXRNYW5kYXRvcnlUb2tlbnNJbkN1cnJlbnRTdGF0ZSIsImdldEFjdHVhbFRva2Vuc0Zyb21TdGF0ZSIsInRva2VuIiwiVmFsdWVTdGF0ZSIsIkVycm9yIiwiZ2V0VGV4dCIsIm9wZW5WYWx1ZVN0YXRlTWVzc2FnZSIsImNsb3NlQWxsTWFuZGF0b3J5VmFsdWVTdGF0ZU1lc3NhZ2VzIiwiZWFzeVRva2VucyIsInRva2VuaXplciIsImdldFRva2VucyIsImNsb3NlVmFsdWVTdGF0ZU1lc3NhZ2UiLCJtYWdpY1F1ZXJ5IiwicmVzZXRTdGF0ZSIsInRva2VuaXplckVkaXRhYmxlIiwiZmlyZUV2ZW50IiwiZWFzeUZpbHRlck1ldGFkYXRhIiwidmVyc2lvbiIsImVudGl0eVNldCIsImNvbnRleHRQYXRoIiwiZmllbGRzIiwiZWFzeUZpbHRlclJlc3VsdCIsImVhc3lGaWx0ZXIiLCJzdWNjZXNzIiwiaXNIaXN0b3J5RW5hYmxlZCIsImFkZFJlY2VudFF1ZXJ5Iiwic2V0UXVlcnlTdWNjZXNzIiwiaGFuZGxlVjFTdWNjZXNzIiwic2V0UXVlcnlGYWlsdXJlIiwicmVtb3ZlTm9uTWFuZGF0b3J5VG9rZW5zIiwic2V0TWVzc2FnZVN0cmlwIiwibWVzc2FnZSIsImFubm91bmNlIiwiSW52aXNpYmxlTWVzc2FnZU1vZGUiLCJBc3NlcnRpdmUiLCJtZXNzYWdlU3RyaXBUeXBlIiwiTWVzc2FnZVR5cGUiLCJXYXJuaW5nIiwiZ3JvdXBMZXZlbHMiLCJMb2ciLCJlcnJvciIsImZpbHRlciIsImRlYnVnIiwiSlNPTiIsInN0cmluZ2lmeSIsImNsZWFyTWVzc2FnZVN0cmlwIiwiRWFzeUZpbHRlclV0aWxzIiwiZm9ybWF0RGF0YSIsImJpbmQiLCJhbGxWYWx1ZUhlbHBUb2tlbnMiLCJyZXN1bHQiLCJyZXF1aXJlZFZhbHVlSGVscFRva2VucyIsInZhbHVlSGVscFRva2VuIiwiZmluZCIsImxsbVJlc3VsdCIsImRhdGFGZXRjaGVyIiwidXBkYXRlZFRva2VucyIsImtleVNwZWNpZmljVmFsdWUiLCJpZHgiLCJvcGVyYXRvciIsIkZpbHRlck9wZXJhdG9yIiwiQlQiLCJOQiIsInNlbGVjdGVkVmFsdWVzIiwidmFsdWUiLCJkZXNjcmlwdGlvbiIsInN1YkluZHgiLCJ2ZXJpZnlTaW5nbGVTZWxlY3RUb2tlblZhbHVlcyIsInNvcnRlcnMiLCJ2YWxpZGF0ZVNvcnRFeHByZXNzaW9ucyIsInRodW1iQnV0dG9uRW5hYmxlZCIsInRodW1iRG93bkJ1dHRvblByZXNzZWQiLCJ0aHVtYlVwQnV0dG9uUHJlc3NlZCIsImFwcGx5R3JvdXBMZXZlbHMiLCJzaG93VW5zdXBwb3J0ZWRDYXBhYmlsaXRpZXNXYXJuaW5nIiwiaGFzU29ydGVyc0Zyb21MTE0iLCJoYXNHcm91cExldmVsc0Zyb21MTE0iLCJzb3J0aW5nVW5zdXBwb3J0ZWQiLCJncm91cGluZ1Vuc3VwcG9ydGVkIiwiYXBwZW5kTWVzc2FnZVN0cmlwIiwic2V0UGVyc29uYWxpemF0aW9uU3VwcG9ydCIsInNvcnRpbmciLCJncm91cGluZyIsIm1ldGFkYXRhIiwicmVzb2x2ZUZpZWxkIiwiZ3JvdXBEZWYiLCJwcm9wZXJ0eU5hbWUiLCJyZXNvbHZlUHJvcGVydHlOYW1lIiwiZmllbGQiLCJmIiwiZW5kc1dpdGgiLCJ3YXJuaW5nIiwiZXJyb3JIYW5kbGVyIiwiRXJyb3JNZXNzYWdlSGFuZGxlciIsImlzR3JvdXBhYmxlIiwiaXNHcm91cGFibGVQcm9wZXJ0eSIsImhhc0Vycm9ycyIsImVuY29kZVhNTCIsImdldEVycm9yTWVzc2FnZSIsImZpcnN0R3JvdXBhYmxlRGVmIiwiZmlyc3RHcm91cGFibGVMYWJlbCIsInNvcnRFeHByZXNzaW9ucyIsIm5vblNvcnRhYmxlRmllbGRzIiwidmFsaWRTb3J0ZXJzIiwic29ydEV4cHJlc3Npb24iLCJmaWVsZE1ldGFkYXRhIiwiZmllbGROYW1lIiwic3BsaXQiLCJwb3AiLCJzb3J0YWJsZSIsIm1hcCIsImRlc2NlbmRpbmciLCJqb2luIiwic2luZ2xlU2VsZWN0VG9rZW5MYWJlbHMiLCJzcGxpY2UiLCJzaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcFRleHQiLCJzaG93U2luZ2xlVmFsdWVNZXNzYWdlU3RyaXAiLCJzaG93TWVzc2FnZVN0cmlwIiwibWVzc2FnZVN0cmlwVGV4dCIsImNsZWFyTWVzc2FnZVN0cmlwRm9yU2luZ2xlVmFsdWUiLCJ0ZXh0Iiwic2V0TWVzc2FnZVN0cmlwV2l0aFR5cGUiLCJjb21iaW5lZCIsIl9qc3giLCJQb3BvdmVyIiwiaWQiLCJnZXRJZCIsInNob3dBcnJvdyIsInNob3dIZWFkZXIiLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnRUeXBlIiwiQm90dG9tIiwiY2xhc3MiLCJjaGlsZHJlbiIsImZvb3RlciIsImdldFRvb2xiYXIiLCJ0b29sYmFyIiwib2tCdXR0b24iLCJnZXRPa0J1dHRvbiIsInNob3dBbGxCdXR0b24iLCJnZXRTaG93QWxsQnV0dG9uIiwiT3ZlcmZsb3dUb29sYmFyIiwiX2pzeHMiLCJfRnJhZ21lbnQiLCJUb29sYmFyU3BhY2VyIiwiQnV0dG9uIiwiQnV0dG9uVHlwZSIsIkVtcGhhc2l6ZWQiLCJmb3JtYXRUb2tlbnMiLCJ2YWwiLCJkZWVwQ2xvbmUiLCJvblN0YXRlQ2hhbmdlIiwiY2hhbmdlZFByb3BzIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiaW5jbHVkZXMiLCJyZXNldCIsIm9uc2FwZm9jdXNsZWF2ZSIsIm9uVGh1bWJVcFByZXNzZWQiLCJ0cmlnZ2VyUFhJbnRlZ3JhdGlvbiIsIm9uVGh1bWJQcmVzc2VkIiwib25UaHVtYkRvd25QcmVzc2VkIiwiTWVzc2FnZVRvYXN0Iiwic2hvdyIsIiR0b3BHb0J0biIsImNyZWF0ZVJlZmVyZW5jZSIsInRodW1iVXBCdXR0b25Ub2tlbml6ZXIiLCJUb2dnbGVCdXR0b24iLCJpY29uIiwidG9vbHRpcCIsInByZXNzIiwiZW5hYmxlZCIsImJpbmRTdGF0ZSIsInByZXNzZWQiLCJGRVNSSGVscGVyIiwic2V0U2VtYW50aWNTdGVwbmFtZSIsInRodW1iRG93bkJ1dHRvblRva2VuaXplciIsInRodW1iVXBCdXR0b25NZXNzYWdlU3RyaXBlIiwidGh1bWJEb3duQnV0dG9uTWVzc2FnZVN0cmlwZSIsImFpTm90aWNlQ29udHJvbCIsImFpTm90aWNlIiwiY2xvbmUiLCJBSU5vdGljZSIsIlZCb3giLCJUZXh0Iiwib3V0VkJveCIsIkZsZXhCb3giLCJyZW5kZXJUeXBlIiwiRWFzeUZpbHRlcklucHV0IiwicmVjb21tZW5kZWRWYWx1ZXMiLCJyZWYiLCJlbnRlclByZXNzZWQiLCJxdWVyeUNoYW5nZWQiLCJxdWVyeSIsImxpdmVDaGFuZ2UiLCJnZXRRdWVyeSIsIm9uR29CdXR0b25QcmVzcyIsInZpc2libGUiLCJhbGlnbkl0ZW1zIiwiRmxleEFsaWduSXRlbXMiLCJDZW50ZXIiLCJ3cmFwIiwiRmxleFdyYXAiLCJXcmFwIiwianVzdGlmeUNvbnRlbnQiLCJGbGV4SnVzdGlmeUNvbnRlbnQiLCJTcGFjZUJldHdlZW4iLCJUb2tlbml6ZXIiLCJlZGl0YWJsZSIsImFuZCIsInJlbmRlck1vZGUiLCJUb2tlbml6ZXJSZW5kZXJNb2RlIiwiTG9vc2UiLCJjdHgiLCJvYmplY3QiLCJnZXRPYmplY3QiLCJUb2tlbiIsIml0ZW1zIiwibWFuZGF0b3J5IiwiaXNLZXlNYW5kYXRvcnkiLCJkZWxldGUiLCJ0b2tlbkluZGV4IiwiZmluZEluZGV4IiwibmV3VG9rZW5zIiwiY29uY2F0IiwidXBkYXRlRmlsdGVySW5wdXQiLCJjdXN0b21EYXRhIiwiQ3VzdG9tRGF0YSIsImNvZGVMaXN0IiwiSEJveCIsIlRyYW5zcGFyZW50IiwiJHNlYXJjaElucHV0IiwiZm9jdXMiLCJNZXNzYWdlU3RyaXAiLCJzaG93SWNvbiIsImVuYWJsZUZvcm1hdHRlZFRleHQiLCJzaG93Q2xvc2VCdXR0b24iLCJjbG9zZSIsIm5vdCIsImN1cnJlbnRJbnB1dFZhbHVlIiwiZ2V0VmFsdWUiLCJjdXJyZW50SW5wdXRQbGFjZWhvbGRlciIsImdldFBsYWNlaG9sZGVyIiwic2V0VmFsdWUiLCJjbGVhckFsbEZpbHRlcnMiLCJOb25lIiwiY2xlYXJRdWVyeVN0YXR1cyIsImNsZWFyRmlsdGVyc0FuZFRva2VucyIsInVwZGF0ZVRva2VuQXJyYXkiLCJjaGFuZ2VUeXBlIiwibmV3VG9rZW5TcGVjaWZpY1ZhbHVlcyIsInRva2VuS2V5IiwidCIsInNldFNlbGVjdGVkVmFsdWVzIiwiY2xvc2VJbm5lckNvbnRyb2xQb3BvdmVyIiwiaGFzU29ydGVycyIsIm5ld1Rva2VuIiwiaGFzR3JvdXBMZXZlbHMiLCJub3RpZnlFeHRlcm5hbFRhYmxlU3RhdGVDaGFuZ2UiLCJzZXRRdWVyeSIsImN1cnJWYWx1ZSIsInNldFBsYWNlaG9sZGVyIiwiZ2V0VG9rZW5zSW5Jbml0aWFsU3RhdGUiLCJtYW5kYXRvcnlUb2tlbnMiLCJyZXF1aXJlZEtleXMiLCJnZXRLZXkiLCJyZW5kZXIiLCJybSIsImNvbnRyb2wiLCJqc3giLCJyZW5kZXJVc2luZ1JlbmRlck1hbmFnZXIiLCJnZXRBZ2dyZWdhdGlvbiIsIkNvbnRyb2wiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkVhc3lGaWx0ZXJCYXJDb250YWluZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGVuY29kZVhNTCBmcm9tIFwic2FwL2Jhc2Uvc2VjdXJpdHkvZW5jb2RlWE1MXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1LCBTdGF0ZU9mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHtcblx0YWdncmVnYXRpb24sXG5cdGNyZWF0ZVJlZmVyZW5jZSxcblx0ZGVmaW5lUmVmZXJlbmNlLFxuXHRkZWZpbmVTdGF0ZSxcblx0ZGVmaW5lVUk1Q2xhc3MsXG5cdGV2ZW50LFxuXHRwcm9wZXJ0eSxcblx0dHlwZSBQcm9wZXJ0aWVzT2Zcbn0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBSZWYgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvanN4LXJ1bnRpbWUvanN4XCI7XG5pbXBvcnQganN4IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCBUb2tlbiBmcm9tIFwic2FwL2ZlL2NvbnRyb2xzL2Vhc3lGaWx0ZXIvVG9rZW5cIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IEZsZXhCb3ggZnJvbSBcInNhcC9tL0ZsZXhCb3hcIjtcbmltcG9ydCBQb3BvdmVyIGZyb20gXCJzYXAvbS9Qb3BvdmVyXCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IFRva2VuaXplciBmcm9tIFwic2FwL20vVG9rZW5pemVyXCI7XG5pbXBvcnQgVkJveCBmcm9tIFwic2FwL20vVkJveFwiO1xuaW1wb3J0IHsgQnV0dG9uVHlwZSwgRmxleEFsaWduSXRlbXMsIEZsZXhKdXN0aWZ5Q29udGVudCwgRmxleFdyYXAsIFBsYWNlbWVudFR5cGUsIFRva2VuaXplclJlbmRlck1vZGUgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDdXN0b21EYXRhIGZyb20gXCJzYXAvdWkvY29yZS9DdXN0b21EYXRhXCI7XG5pbXBvcnQgTGliIGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIFJlbmRlck1hbmFnZXIgZnJvbSBcInNhcC91aS9jb3JlL1JlbmRlck1hbmFnZXJcIjtcbmltcG9ydCB7IEludmlzaWJsZU1lc3NhZ2VNb2RlLCBWYWx1ZVN0YXRlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5cbmltcG9ydCB0eXBlIHsgUHJpbWl0aXZlVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgeyBhbmQsIGJpbmRTdGF0ZSwgbm90IH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgQUlOb3RpY2UgZnJvbSBcInNhcC9mZS9jb250cm9scy9BSU5vdGljZVwiO1xuaW1wb3J0IEVhc3lGaWx0ZXJJbnB1dCBmcm9tIFwic2FwL2ZlL2NvbnRyb2xzL2Vhc3lGaWx0ZXIvRWFzeUZpbHRlcklucHV0XCI7XG5pbXBvcnQgdHlwZSBFYXN5RmlsdGVyVG9rZW4gZnJvbSBcInNhcC9mZS9jb250cm9scy9lYXN5RmlsdGVyL1Rva2VuXCI7XG5pbXBvcnQgSEJveCBmcm9tIFwic2FwL20vSEJveFwiO1xuaW1wb3J0IE1lc3NhZ2VTdHJpcCBmcm9tIFwic2FwL20vTWVzc2FnZVN0cmlwXCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCBPdmVyZmxvd1Rvb2xiYXIgZnJvbSBcInNhcC9tL092ZXJmbG93VG9vbGJhclwiO1xuaW1wb3J0IFRvZ2dsZUJ1dHRvbiBmcm9tIFwic2FwL20vVG9nZ2xlQnV0dG9uXCI7XG5pbXBvcnQgVG9vbGJhclNwYWNlciBmcm9tIFwic2FwL20vVG9vbGJhclNwYWNlclwiO1xuaW1wb3J0IEludmlzaWJsZU1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL0ludmlzaWJsZU1lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCBGRVNSSGVscGVyIGZyb20gXCJzYXAvdWkvcGVyZm9ybWFuY2UvdHJhY2UvRkVTUkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgRWFzeUZpbHRlciBmcm9tIFwidXgvZW5nL2Zpb3JpYWkvcmV1c2UvZWFzeWZpbHRlci9FYXN5RmlsdGVyXCI7XG5pbXBvcnQgdHlwZSB7IEVhc3lGaWx0ZXJNZXRhZGF0YSwgRWFzeUZpbHRlclJlc3VsdCwgUHJvcGVydHlNZXRhZGF0YSB9IGZyb20gXCJ1eC9lbmcvZmlvcmlhaS9yZXVzZS9lYXN5ZmlsdGVyL0Vhc3lGaWx0ZXJcIjtcbmltcG9ydCB0eXBlIHsgU3VjY2VzcyB9IGZyb20gXCJ1eC9lbmcvZmlvcmlhaS9yZXVzZS9zaGFyZWRcIjtcbmltcG9ydCB0eXBlIHsgRXZlbnRIYW5kbGVyIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0IEVycm9yTWVzc2FnZUhhbmRsZXIgZnJvbSBcIi4vRXJyb3JNZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IHsgdHJpZ2dlclBYSW50ZWdyYXRpb24gfSBmcm9tIFwiLi9QWEZlZWRiYWNrXCI7XG5pbXBvcnQgRWFzeUZpbHRlclV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XG5cbi8vRm9yIGN1cnJlbnQgcmVsZWFzZSB3ZSBhcmUgaWdub3JpbmcgXCJBbGxcIiBhbmQgXCJBbnlcIlxuLy9XZSBjYW4gaW5jb3Jwb3JhdGUgdGhlc2UgdmFsdWVzIGluIGZ1dHVyZVxuZXhwb3J0IHR5cGUgQmV0d2VlblNlbGVjdGVkVmFsdWVzID0gW2Jvb2xlYW4sIGJvb2xlYW5dIHwgW3N0cmluZywgc3RyaW5nXSB8IFtudW1iZXIsIG51bWJlcl0gfCBbRGF0ZSwgRGF0ZV07XG5cbnR5cGUgbGxtUmVzdWx0Rm9yU2VsZWN0ZWRWYWx1ZXNUeXBlID0gc3RyaW5nIHwgRGF0ZSB8IGJvb2xlYW4gfCBudW1iZXI7XG5cbmV4cG9ydCB0eXBlIENvZGVMaXN0VHlwZSA9IHtcblx0dmFsdWU6IFByaW1pdGl2ZVR5cGU7XG5cdGRlc2NyaXB0aW9uOiBsbG1SZXN1bHRGb3JTZWxlY3RlZFZhbHVlc1R5cGU7XG59O1xuXG5leHBvcnQgdHlwZSBWYWx1ZUhlbHBCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXMgPSBbQ29kZUxpc3RUeXBlLCBDb2RlTGlzdFR5cGVdO1xuXG5leHBvcnQgdHlwZSBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb24gPVxuXHR8IHtcblx0XHRcdG9wZXJhdG9yOiBFeGNsdWRlPEZpbHRlck9wZXJhdG9yLCBGaWx0ZXJPcGVyYXRvci5CVCB8IEZpbHRlck9wZXJhdG9yLk5CPjtcblx0XHRcdHNlbGVjdGVkVmFsdWVzOiBDb2RlTGlzdFR5cGVbXTtcblx0XHRcdG5vTWF0Y2g/OiBib29sZWFuO1xuXHQgIH1cblx0fCB7XG5cdFx0XHRvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuQlQgfCBGaWx0ZXJPcGVyYXRvci5OQjtcblx0XHRcdHNlbGVjdGVkVmFsdWVzOiBWYWx1ZUhlbHBCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXM7XG5cdFx0XHRub01hdGNoPzogYm9vbGVhbjtcblx0ICB9O1xuXG4vL1dlIHdpbGwgYmUgaGFuZGxpbmcgXCJBTExcIiBhbmQgXCJBTllcIiBhdCBsYXRlciBwb2ludCBvZiB0aW1lXG5leHBvcnQgdHlwZSBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbiA9XG5cdHwge1xuXHRcdFx0b3BlcmF0b3I6IEV4Y2x1ZGU8RmlsdGVyT3BlcmF0b3IsIEZpbHRlck9wZXJhdG9yLkJUIHwgRmlsdGVyT3BlcmF0b3IuTkI+O1xuXHRcdFx0c2VsZWN0ZWRWYWx1ZXM6IHN0cmluZ1tdIHwgYm9vbGVhbltdIHwgbnVtYmVyW10gfCBEYXRlW107XG5cdCAgfVxuXHR8IHtcblx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5CVCB8IEZpbHRlck9wZXJhdG9yLk5CO1xuXHRcdFx0c2VsZWN0ZWRWYWx1ZXM6IEJldHdlZW5TZWxlY3RlZFZhbHVlcztcblx0ICB9O1xuXG5leHBvcnQgdHlwZSBUb2tlblR5cGUgPSBcIk1lbnVXaXRoQ2hlY2tCb3hcIiB8IFwiQ2FsZW5kYXJcIiB8IFwiVGltZVwiIHwgXCJWYWx1ZUhlbHBcIiB8IFwiTWVudVdpdGhTaW5nbGVTZWxlY3RcIjtcblxuZXhwb3J0IHR5cGUgVmFsdWVIZWxwVG9rZW5EZWZpbml0aW9uID0ge1xuXHRrZXk6IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogVmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW107XG5cdHR5cGU6IFwiVmFsdWVIZWxwXCI7XG5cdGJ1c3k6IGJvb2xlYW47XG5cdGlzUmVxdWlyZWQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgTm9uVmFsdWVIZWxwVG9rZW5EZWZpbml0aW9uID0ge1xuXHRrZXk6IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXTtcblx0dHlwZTogRXhjbHVkZTxUb2tlblR5cGUsIFwiVmFsdWVIZWxwXCI+O1xuXHRpc1JlcXVpcmVkPzogYm9vbGVhbjtcblx0YnVzeTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRva2VuRGVmaW5pdGlvbiA9IFZhbHVlSGVscFRva2VuRGVmaW5pdGlvbiB8IE5vblZhbHVlSGVscFRva2VuRGVmaW5pdGlvbjtcblxuZXhwb3J0IHR5cGUgU29ydERlZmluaXRpb24gPSB7XG5cdGtleTogc3RyaW5nO1xuXHRkZXNjZW5kaW5nOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgVG9rZW5TZXR0ZXJzID0gXCJzZXRTZWxlY3RlZFZhbHVlc1wiO1xuXG5leHBvcnQgdHlwZSBHcm91cExldmVsRGVmaW5pdGlvbiA9IHtcblx0a2V5OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YSA9IFByb3BlcnR5TWV0YWRhdGEgJlxuXHQoXG5cdFx0fCB7XG5cdFx0XHRcdHR5cGU6IFwiVmFsdWVIZWxwXCI7XG5cdFx0XHRcdGRlZmF1bHRWYWx1ZT86IFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdO1xuXHRcdCAgfVxuXHRcdHwge1xuXHRcdFx0XHR0eXBlOiBFeGNsdWRlPFRva2VuVHlwZSwgXCJWYWx1ZUhlbHBcIj47XG5cdFx0XHRcdGRlZmF1bHRWYWx1ZT86IFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW107XG5cdFx0ICB9XG5cdCk7XG5cbi8vIFdlIG5lZWQgdGhlIHRoaXJkIGFyZ3VlbWVudCBiZWNhdXNlIHRoZXJlIG1pZ2h0IGJlIGEgY2hhbmNlIG9mIGNvbXBvc2l0ZSBrZXlzIHNjZW5hcmlvXG50eXBlIERhdGFGZXRjaGVyID0gKFxuXHRwcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0dmFsdWVPZkN1cnJlbnRQcm9wZXJ0eTogVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSxcblx0bGxtUmVzdWx0OiBTdWNjZXNzPEVhc3lGaWx0ZXJSZXN1bHQ+XG4pID0+IFByb21pc2U8VmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10+O1xuXG5pbnRlcmZhY2UgRm9jdXNIYW5kbGluZ0NvbnRyb2wge1xuXHRvbnNhcGZvY3VzbGVhdmU/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBFYXN5RmlsdGVyQmFyQ29udGFpbmVyJFNob3dWYWx1ZUhlbHBFdmVudCA9IFVJNUV2ZW50PFxuXHR7XG5cdFx0a2V5OiBzdHJpbmc7XG5cdFx0dmFsdWVzOiB1bmtub3duW107XG5cdFx0cmVzb2x2ZTogKHZhbHVlOiBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSkgPT4gdm9pZDtcblx0XHRyZWplY3Q6IChyZWFzb24/OiBFcnJvcikgPT4gdm9pZDtcblx0fSxcblx0RWFzeUZpbHRlckJhckNvbnRhaW5lclxuPjtcblxuLypcbiAqIERlbGl2ZXJ5IGZvciBiZXRhIHJlbGVhc2UgZm9yIHRoZSBlYXN5IGZpbHRlciBmZWF0dXJlLlxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29udHJvbHMuZWFzeUZpbHRlci5FYXN5RmlsdGVyQmFyQ29udGFpbmVyXCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFYXN5RmlsdGVyQmFyQ29udGFpbmVyIGV4dGVuZHMgQ29udHJvbCB7XG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0Y29udGV4dFBhdGg/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRhcHBJZD86IHN0cmluZztcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGVhc3lGaWx0ZXJMaWI/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJhcnJheVwiIH0pXG5cdGZpbHRlckJhck1ldGFkYXRhPzogRWFzeUZpbHRlclByb3BlcnR5TWV0YWRhdGFbXTtcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcImFycmF5XCIgfSlcblx0cmVjb21tZW5kZWRWYWx1ZXM/OiBzdHJpbmdbXTtcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcImZ1bmN0aW9uXCIgfSlcblx0ZGF0YUZldGNoZXI/OiBEYXRhRmV0Y2hlcjtcblxuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0ZWFzeUZpbHRlcklucHV0ITogUmVmPEVuaGFuY2VXaXRoVUk1PEVhc3lGaWx0ZXJJbnB1dD4+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHR0b2tlbml6ZXIhOiBSZWY8VG9rZW5pemVyPjtcblxuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC51aS5jb3JlLkNvbnRyb2xcIiB9KVxuXHRjb250ZW50PzogQ29udHJvbDtcblxuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC51aS5jb3JlLkNvbnRyb2xcIiB9KVxuXHRhaU5vdGljZT86IENvbnRyb2w7XG5cblx0QGV2ZW50KClcblx0dG9rZW5zQ2hhbmdlZD86IEV2ZW50SGFuZGxlcjxVSTVFdmVudDx7IHRva2VuczogVG9rZW5EZWZpbml0aW9uW107IHJlc2V0OiBib29sZWFuIH0sIEVhc3lGaWx0ZXJCYXJDb250YWluZXI+PjtcblxuXHRAZXZlbnQoKVxuXHRzb3J0ZXJzQ2hhbmdlZD86IEV2ZW50SGFuZGxlcjxVSTVFdmVudDx7IHNvcnRlcnM6IFNvcnREZWZpbml0aW9uW10gfSwgRWFzeUZpbHRlckJhckNvbnRhaW5lcj4+O1xuXG5cdEBldmVudCgpXG5cdGdyb3VwTGV2ZWxzQ2hhbmdlZD86IEV2ZW50SGFuZGxlcjxVSTVFdmVudDx7IGdyb3VwTGV2ZWxzOiBHcm91cExldmVsRGVmaW5pdGlvbltdIH0sIEVhc3lGaWx0ZXJCYXJDb250YWluZXI+PjtcblxuXHRAZXZlbnQoKVxuXHRxdWVyeUNoYW5nZWQ/OiBFdmVudEhhbmRsZXI8VUk1RXZlbnQ8eyBxdWVyeTogc3RyaW5nIH0sIEVhc3lGaWx0ZXJCYXJDb250YWluZXI+PjtcblxuXHRAZXZlbnQoKVxuXHRzaG93VmFsdWVIZWxwPzogRXZlbnRIYW5kbGVyPEVhc3lGaWx0ZXJCYXJDb250YWluZXIkU2hvd1ZhbHVlSGVscEV2ZW50PjtcblxuXHRAZXZlbnQoKVxuXHRsaXZlQ2hhbmdlPzogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PHsgcXVlcnk6IHN0cmluZyB9LCBFYXN5RmlsdGVyQmFyQ29udGFpbmVyPj47XG5cblx0LyoqIEZpcmVzIHdoZW4gdGhlIHVzZXIgbWFudWFsbHkgcmVtb3ZlcyBvciBlZGl0cyBhIGZpbHRlciB0b2tlbi4gRG9lcyBub3QgZmlyZSB3aGVuIHRva2VucyBhcmUgc2V0IGJ5IHRoZSBBSSBzZWFyY2ggcmVzdWx0LiAqL1xuXHRAZXZlbnQoKVxuXHR0b2tlbnNDaGFuZ2VkQnlVc2VyPzogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PHsgdG9rZW5zOiBUb2tlbkRlZmluaXRpb25bXSB9LCBFYXN5RmlsdGVyQmFyQ29udGFpbmVyPj47XG5cblx0QGV2ZW50KClcblx0Y2xlYXJGaWx0ZXJzPzogRXZlbnRIYW5kbGVyO1xuXG5cdEBldmVudCgpXG5cdGJlZm9yZVF1ZXJ5UHJvY2Vzc2luZz86IEV2ZW50SGFuZGxlcjtcblxuXHRAZXZlbnQoKVxuXHRhZnRlclF1ZXJ5UHJvY2Vzc2luZz86IEV2ZW50SGFuZGxlcjtcblxuXHRwcml2YXRlIHJlc291cmNlQnVuZGxlITogUmVzb3VyY2VCdW5kbGU7XG5cblx0QGRlZmluZVN0YXRlKClcblx0cHJvdGVjdGVkIHN0YXRlOiBTdGF0ZU9mPHtcblx0XHRzaG93UmVzdWx0OiBib29sZWFuO1xuXHRcdHRva2VuczogVG9rZW5EZWZpbml0aW9uW107XG5cdFx0c29ydGVyczogU29ydERlZmluaXRpb25bXTtcblx0XHRncm91cExldmVsczogR3JvdXBMZXZlbERlZmluaXRpb25bXTtcblx0XHR0b2tlbml6ZXJFZGl0YWJsZTogYm9vbGVhbjtcblx0XHRzaG93U2luZ2xlVmFsdWVNZXNzYWdlU3RyaXA/OiBib29sZWFuO1xuXHRcdHNpbmdsZVZhbHVlTWVzc2FnZVN0cmlwVGV4dD86IHN0cmluZztcblx0XHRtZXNzYWdlU3RyaXBUZXh0Pzogc3RyaW5nO1xuXHRcdHNob3dNZXNzYWdlU3RyaXA/OiBib29sZWFuO1xuXHRcdG1lc3NhZ2VTdHJpcFR5cGU6IE1lc3NhZ2VUeXBlO1xuXHRcdHRodW1iQnV0dG9uRW5hYmxlZDogYm9vbGVhbjtcblx0XHR0aHVtYlVwQnV0dG9uUHJlc3NlZDogYm9vbGVhbjtcblx0XHR0aHVtYkRvd25CdXR0b25QcmVzc2VkOiBib29sZWFuO1xuXHR9PiA9IHtcblx0XHRzaG93UmVzdWx0OiBmYWxzZSxcblx0XHR0b2tlbnM6IFtdIGFzIFRva2VuRGVmaW5pdGlvbltdLFxuXHRcdHNvcnRlcnM6IFtdIGFzIFNvcnREZWZpbml0aW9uW10sXG5cdFx0Z3JvdXBMZXZlbHM6IFtdIGFzIEdyb3VwTGV2ZWxEZWZpbml0aW9uW10sXG5cdFx0dG9rZW5pemVyRWRpdGFibGU6IHRydWUsXG5cdFx0c2hvd1NpbmdsZVZhbHVlTWVzc2FnZVN0cmlwOiBmYWxzZSxcblx0XHRzaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcFRleHQ6IFwiXCIsXG5cdFx0bWVzc2FnZVN0cmlwVGV4dDogXCJcIixcblx0XHRzaG93TWVzc2FnZVN0cmlwOiBmYWxzZSxcblx0XHRtZXNzYWdlU3RyaXBUeXBlOiBNZXNzYWdlVHlwZS5FcnJvcixcblx0XHR0aHVtYkJ1dHRvbkVuYWJsZWQ6IHRydWUsXG5cdFx0dGh1bWJVcEJ1dHRvblByZXNzZWQ6IGZhbHNlLFxuXHRcdHRodW1iRG93bkJ1dHRvblByZXNzZWQ6IGZhbHNlXG5cdH07XG5cblx0cHJpdmF0ZSBpbm5lckNvbnRyb2xQb3BvdmVyPzogUG9wb3ZlcjtcblxuXHRwcml2YXRlIG9rQnV0dG9uPzogQnV0dG9uO1xuXG5cdHByaXZhdGUgc2hvd0FsbEJ1dHRvbj86IEJ1dHRvbjtcblxuXHRwcml2YXRlIHRvb2xiYXI/OiBPdmVyZmxvd1Rvb2xiYXI7XG5cblx0cHJpdmF0ZSBtYW5kYXRvcnlLZXlNYXA/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcblxuXHQvL0lmIHNldCB0byB0cnVlIHRoZSBlcnJvciBzdGF0ZSBjYW4gYmUgc2VlbiBvbiB0aGUgdG9rZW5zXG5cdHByaXZhdGUgaXNNYW5kYXRvcnlDaGVja1JlcXVpcmVkPzogYm9vbGVhbjtcblxuXHRwcml2YXRlIHNob3VsZFRva2VuQ2hhbmdlRXZlbnRGaXJlZCA9IHRydWU7XG5cblx0cHJpdmF0ZSBpc1Jlc2V0dGluZ1RvRGVmYXVsdFRva2VucyA9IGZhbHNlO1xuXG5cdHByaXZhdGUgaW52aXNpYmxlTWVzc2FnZSE6IEludmlzaWJsZU1lc3NhZ2U7XG5cblx0ZWFzeWZpbHRlcj86IFByb21pc2U8dHlwZW9mIEVhc3lGaWx0ZXIgfCB1bmRlZmluZWQ+O1xuXG5cdHByaXZhdGUgcmVzb2x2ZUNvbnRlbnRSZWFkeSE6ICgpID0+IHZvaWQ7XG5cblx0cHJpdmF0ZSBpbnB1dEZpZWxkUmVhZHk6IFByb21pc2U8dm9pZD4gPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdHRoaXMucmVzb2x2ZUNvbnRlbnRSZWFkeSA9IHJlc29sdmU7XG5cdH0pO1xuXG5cdHByaXZhdGUgc2hvdWxkTWVzc2FnZVN0cmlwUmVtb3ZlID0gdHJ1ZTtcblxuXHRwcml2YXRlIHN1cHBvcnRzU29ydGluZyA9IHRydWU7XG5cblx0cHJpdmF0ZSBzdXBwb3J0c0dyb3VwaW5nID0gdHJ1ZTtcblxuXHRjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBzdHJpbmcgfCAoJENvbnRyb2xTZXR0aW5ncyAmIFByb3BlcnRpZXNPZjxFYXN5RmlsdGVyQmFyQ29udGFpbmVyPiksIG90aGVycz86ICRDb250cm9sU2V0dGluZ3MpIHtcblx0XHRzdXBlcihwcm9wZXJ0aWVzIGFzIHN0cmluZywgb3RoZXJzKTtcblx0XHR0aGlzLmluaXRpYWxpemUoKTtcblx0XHR0aGlzLmludmlzaWJsZU1lc3NhZ2UgPSBJbnZpc2libGVNZXNzYWdlLmdldEluc3RhbmNlKCk7XG5cdH1cblxuXHRzZXRFYXN5RmlsdGVyTGliKGVhc3lGaWx0ZXJMaWI6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuc2V0UHJvcGVydHkoXCJlYXN5RmlsdGVyTGliXCIsIGVhc3lGaWx0ZXJMaWIpO1xuXHRcdGlmICh0aGlzLmVhc3lGaWx0ZXJMaWIpIHtcblx0XHRcdHRoaXMuZWFzeWZpbHRlciA9IGltcG9ydCh0aGlzLmVhc3lGaWx0ZXJMaWIpO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIHNldEFwcElkKGFwcElkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoIXRoaXMuYXBwSWQpIHtcblx0XHRcdHRoaXMuc2V0UHJvcGVydHkoXCJhcHBJZFwiLCBhcHBJZCwgdHJ1ZSk7XG5cdFx0XHRhd2FpdCB0aGlzLmlucHV0RmllbGRSZWFkeTtcblx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LnNldFByb3BlcnR5KFwiYXBwSWRcIiwgYXBwSWQsIHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdHNldEZpbHRlckJhck1ldGFkYXRhKGZpbHRlckJhck1ldGFkYXRhOiBFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YVtdKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmZpbHRlckJhck1ldGFkYXRhKSB7XG5cdFx0XHR0aGlzLnNldFByb3BlcnR5KFwiZmlsdGVyQmFyTWV0YWRhdGFcIiwgZmlsdGVyQmFyTWV0YWRhdGEsIHRydWUpO1xuXHRcdFx0Ly8gcG9wdWxhdGUgdGhlIHRva2VucyB3aXRoIGRlZmF1bHQgdmFsdWVcblx0XHRcdGNvbnN0IHRva2VucyA9IHRoaXMuZ2V0RGVmYXVsdFRva2VucygpO1xuXHRcdFx0aWYgKCF0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIpIHtcblx0XHRcdFx0dGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyID0gdGhpcy5jcmVhdGVQb3BvdmVyRm9ySW5uZXJDb250cm9scygpO1xuXHRcdFx0XHR0aGlzLmFkZERlcGVuZGVudCh0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5zdGF0ZS50b2tlbnMgPSB0b2tlbnM7XG5cdFx0XHR0aGlzLnN0YXRlLnNob3dSZXN1bHQgPSB0b2tlbnMubGVuZ3RoID4gMDtcblx0XHRcdC8vL1dlIGRvbid0IHdhbnQgdG8gZGlzcGxheSBlcnJvciB2YWx1ZVN0YXRlTWVzc2FnZSBhcyBzb29uIHRoZSBjb250cm9sIHJlbmRlcnNcblx0XHRcdHRoaXMuaXNNYW5kYXRvcnlDaGVja1JlcXVpcmVkID0gdHJ1ZTtcblx0XHRcdC8vb25Ub2tlbkNoYW5nZSBldmVudCBzaG91bGQgbm90IGJlIGZpcmVkIHdoZW4gaW5pdGlhbCBzZXQgb2YgdG9rZW5zIGFyZSBzZXRcblx0XHRcdHRoaXMuc2hvdWxkVG9rZW5DaGFuZ2VFdmVudEZpcmVkID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLnJlc291cmNlQnVuZGxlID0gTGliLmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvbnRyb2xzXCIpITtcblx0fVxuXG5cdGluaXRpYWxpemUoKTogdm9pZCB7XG5cdFx0dGhpcy5jb250ZW50ID0gdGhpcy5jcmVhdGVDb250ZW50KCk7XG5cdFx0dGhpcy5yZXNvbHZlQ29udGVudFJlYWR5KCk7XG5cdFx0aWYgKCF0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIpIHtcblx0XHRcdHRoaXMuaW5uZXJDb250cm9sUG9wb3ZlciA9IHRoaXMuY3JlYXRlUG9wb3ZlckZvcklubmVyQ29udHJvbHMoKTtcblx0XHRcdHRoaXMuYWRkRGVwZW5kZW50KHRoaXMuaW5uZXJDb250cm9sUG9wb3Zlcik7XG5cdFx0fVxuXHRcdC8vV2UgZG9uJ3Qgd2FudCB0byBkaXNwbGF5IGVycm9yIHZhbHVlU3RhdGVNZXNzYWdlIGFzIHNvb24gdGhlIGNvbnRyb2wgcmVuZGVyc1xuXHRcdHRoaXMuaXNNYW5kYXRvcnlDaGVja1JlcXVpcmVkID0gdHJ1ZTtcblx0XHQvL29uVG9rZW5DaGFuZ2UgZXZlbnQgc2hvdWxkIG5vdCBiZSBmaXJlZCB3aGVuIGluaXRpYWwgc2V0IG9mIHRva2VucyBhcmUgc2V0XG5cdFx0dGhpcy5zaG91bGRUb2tlbkNoYW5nZUV2ZW50RmlyZWQgPSBmYWxzZTtcblx0fVxuXG5cdC8vIFRoaXMgbWV0aG9kIHNob3VsZCBiZSB1c2VkIGJlZm9yZSB1cGRhdGluZyB0aGUgc3RhdGUsIG9uY2UgdGhlIHN0YXRlIGlzIHVwZGF0ZWQgdGhlIHByZXZpb3VzIG92ZXJyaWRkZW4gZGVmYXVsdCB2YWx1ZXMgd291bGQgYmUgZ29uZSBmb3JldmVyXG5cdGdldERlZmF1bHRUb2tlbnMoKTogVG9rZW5EZWZpbml0aW9uW10ge1xuXHRcdGNvbnN0IHRva2VuczogVG9rZW5EZWZpbml0aW9uW10gPSBbXTtcblx0XHRpZiAoIXRoaXMubWFuZGF0b3J5S2V5TWFwKSB7XG5cdFx0XHR0aGlzLm1hbmRhdG9yeUtleU1hcCA9IHt9O1xuXHRcdH1cblx0XHR0aGlzLmZpbHRlckJhck1ldGFkYXRhPy5mb3JFYWNoKChkYXRhKSA9PiB7XG5cdFx0XHRjb25zdCBpc1JlcXVpcmVkID0gZGF0YS5yZXF1aXJlZDtcblx0XHRcdGlmIChpc1JlcXVpcmVkKSB7XG5cdFx0XHRcdCh0aGlzLm1hbmRhdG9yeUtleU1hcCBhcyBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPilbZGF0YS5uYW1lXSA9IHRydWU7XG5cdFx0XHRcdC8vQ2hlY2sgd2hldGhlciB0aGUga2V5cyBleGlzdCBpbiB0aGUgY3VycmVudCBzdGF0ZSBlbHNlIHB1c2ggaXQgYWNyb3NzXG5cdFx0XHRcdGlmIChkYXRhLnR5cGUgPT09IFwiVmFsdWVIZWxwXCIpIHtcblx0XHRcdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdFx0XHRrZXk6IGRhdGEubmFtZSxcblx0XHRcdFx0XHRcdGxhYmVsOiBkYXRhLmxhYmVsIGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IChkYXRhLmRlZmF1bHRWYWx1ZSBhcyBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSkgPz8gW10sXG5cdFx0XHRcdFx0XHR0eXBlOiBkYXRhLnR5cGUsXG5cdFx0XHRcdFx0XHRidXN5OiBmYWxzZSxcblx0XHRcdFx0XHRcdGlzUmVxdWlyZWRcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdFx0XHRrZXk6IGRhdGEubmFtZSxcblx0XHRcdFx0XHRcdGxhYmVsOiBkYXRhLmxhYmVsIGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IChkYXRhLmRlZmF1bHRWYWx1ZSBhcyBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdKSA/PyBbXSxcblx0XHRcdFx0XHRcdHR5cGU6IGRhdGEudHlwZSxcblx0XHRcdFx0XHRcdGJ1c3k6IGZhbHNlLFxuXHRcdFx0XHRcdFx0aXNSZXF1aXJlZFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHRva2Vucztcblx0fVxuXG5cdG9uRW50ZXJQcmVzc2VkKGU6IFVJNUV2ZW50PHsgcXVlcnk6IHN0cmluZyB9LCBFYXN5RmlsdGVySW5wdXQ+KTogdm9pZCB7XG5cdFx0dGhpcy5vbkdvUHJlc3MoZS5nZXRQYXJhbWV0ZXIoXCJxdWVyeVwiKSk7XG5cdH1cblxuXHQvL01ha2luZyBpdCBwdWJsaWMgYmVjYXVzZSBpbiBsaXZlIG1vZGUgdGhlIGFwcCBkZXZlbG9wZXIgY2FuIGRlY2lkZSB3aGV0aGVyIHRvIGRpc3BsYXkgdGhlIGVycm9yIFZhbHVlU3RhdGVNZXNzYWdlXG5cdC8vSW4gbm9uLWxpdmUgbW9kZSAsIHdlIGFyZSBhbHJlYWR5IGludGVybmFsbHkgaGFuZGxpbmcgaXQgb24gZXZlcnkgdGltZSB0aW1lIGEgdXNlciBjbGlja3Mgb24gR08vRW50ZXIgYnV0dG9uc1xuXHRwdWJsaWMgY2hlY2tJZkFsbE1hbmRhdG9yeVRva2Vuc0ZpbGxlZCgpOiBib29sZWFuIHtcblx0XHRjb25zdCB0b2tlbnNJblN0YXRlID0gdGhpcy5nZXRVblNldE1hbmRhdG9yeVRva2Vuc0luQ3VycmVudFN0YXRlKCk7XG5cdFx0aWYgKHRva2Vuc0luU3RhdGUubGVuZ3RoICE9PSAwKSB7XG5cdFx0XHRjb25zdCB0b2tlbnMgPSB0aGlzLmdldEFjdHVhbFRva2Vuc0Zyb21TdGF0ZSh0b2tlbnNJblN0YXRlKTtcblx0XHRcdHRva2Vucz8uZm9yRWFjaCgodG9rZW4pID0+IHtcblx0XHRcdFx0dG9rZW4uc2V0UHJvcGVydHkoXCJ2YWx1ZVN0YXRlXCIsIFZhbHVlU3RhdGUuRXJyb3IpO1xuXHRcdFx0XHR0b2tlbi5zZXRQcm9wZXJ0eShcInZhbHVlU3RhdGVUZXh0XCIsIHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfTUFOREFUT1JZX1RPS0VOX0VSUk9SXCIpKTtcblx0XHRcdFx0dG9rZW4ub3BlblZhbHVlU3RhdGVNZXNzYWdlKCk7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRwdWJsaWMgY2xvc2VBbGxNYW5kYXRvcnlWYWx1ZVN0YXRlTWVzc2FnZXMoKTogdm9pZCB7XG5cdFx0Y29uc3QgZWFzeVRva2VucyA9IHRoaXMudG9rZW5pemVyLmN1cnJlbnQ/LmdldFRva2VucygpIGFzIEVhc3lGaWx0ZXJUb2tlbltdO1xuXHRcdGVhc3lUb2tlbnMuZm9yRWFjaCgodG9rZW4pID0+IHRva2VuLmNsb3NlVmFsdWVTdGF0ZU1lc3NhZ2UoKSk7XG5cdH1cblxuXHRhc3luYyBvbkdvUHJlc3MobWFnaWNRdWVyeTogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKCFtYWdpY1F1ZXJ5KSB7XG5cdFx0XHR0aGlzLnJlc2V0U3RhdGUoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5zdGF0ZS50b2tlbml6ZXJFZGl0YWJsZSA9IHRydWU7XG5cblx0XHQvLyBDYWxsIEFJIHNlcnZpY2UgdG8gZ2V0IHRoZSBmaWx0ZXIgY3JpdGVyaWFcblx0XHRjb25zdCBlYXN5ZmlsdGVyID0gYXdhaXQgdGhpcy5lYXN5ZmlsdGVyO1xuXHRcdGlmICghZWFzeWZpbHRlcikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmZpcmVFdmVudChcImJlZm9yZVF1ZXJ5UHJvY2Vzc2luZ1wiKTtcblxuXHRcdGNvbnN0IGVhc3lGaWx0ZXJNZXRhZGF0YTogRWFzeUZpbHRlck1ldGFkYXRhID0ge1xuXHRcdFx0dmVyc2lvbjogMSxcblx0XHRcdGVudGl0eVNldDogdGhpcy5jb250ZXh0UGF0aCxcblx0XHRcdGZpZWxkczogdGhpcy5maWx0ZXJCYXJNZXRhZGF0YSBhcyBFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YVtdXG5cdFx0fTtcblxuXHRcdGNvbnN0IGVhc3lGaWx0ZXJSZXN1bHQgPSBhd2FpdCBlYXN5ZmlsdGVyLmVhc3lGaWx0ZXIobWFnaWNRdWVyeSwgZWFzeUZpbHRlck1ldGFkYXRhKTtcblxuXHRcdC8vV2Ugc2hvdWxkIG5vdCBjaGFuZ2UgdGhlIG1lc3NhZ2Ugc3RyaXAgZm9yIHRoZSBmaXJzdCB0aW1lIHdoZW4gdGhlIEdPIGJ1dHRvbiBpcyBwcmVzc2VkLCBiZWNhdXNlIGl0IGhhcyBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZCBpbiB0aGUgRWFzeUZpbHRlclV0aWxzLmZvcm1hdERhdGEgbWV0aG9kXG5cdFx0dGhpcy5zaG91bGRNZXNzYWdlU3RyaXBSZW1vdmUgPSBmYWxzZTtcblx0XHRpZiAoZWFzeUZpbHRlclJlc3VsdC5zdWNjZXNzKSB7XG5cdFx0XHQvL09ubHkgYWRkIHRoZSByZWNlbnQgcXVlcnkgd2hlbiB0aGUgY2FsbCBpcyBzdWNjZXNzXG5cdFx0XHQvL0RvIG5vdCB0cmFjayB0aGUgcmVjZW50IHF1ZXJpZXMgd2hlbiB0aGUgaXNIaXN0b3J5RW5hYmxlZCBpcyBzZXQgdG8gZmFsc2Vcblx0XHRcdC8vSXQgd291bGQgYmUgYSB2aW9sYXRpb24gdG8gdXNlcnMgcHJpdmFjeVxuXHRcdFx0aWYgKHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LmlzSGlzdG9yeUVuYWJsZWQoKSA/PyBmYWxzZSkge1xuXHRcdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5hZGRSZWNlbnRRdWVyeShtYWdpY1F1ZXJ5KTtcblx0XHRcdH1cblx0XHRcdC8vIFNldCBxdWVyeSBhcyBzdWNjZXNzZnVsIGluIHRoZSBpbnB1dCBmaWVsZFxuXHRcdFx0dGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uc2V0UXVlcnlTdWNjZXNzKG1hZ2ljUXVlcnkpO1xuXHRcdFx0aWYgKGVhc3lGaWx0ZXJSZXN1bHQuZGF0YS52ZXJzaW9uID09PSAxKSB7XG5cdFx0XHRcdHRoaXMuaGFuZGxlVjFTdWNjZXNzKGVhc3lGaWx0ZXJSZXN1bHQpO1xuXHRcdFx0fSBlbHNlIGlmIChlYXN5RmlsdGVyUmVzdWx0LmRhdGEudmVyc2lvbiA9PT0gMikge1xuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIHNhcC51aS5tb2RlbC5GaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIGFuZCBhcHBseSBpdCBkaXJlY3RseSB0byB0aGUgbGlzdCBiaW5kaW5nXG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGVycm9yXG5cdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5zZXRRdWVyeUZhaWx1cmUoKTtcblx0XHRcdHRoaXMucmVtb3ZlTm9uTWFuZGF0b3J5VG9rZW5zKCk7XG5cdFx0XHR0aGlzLnNldE1lc3NhZ2VTdHJpcChlYXN5RmlsdGVyUmVzdWx0Lm1lc3NhZ2UpO1xuXHRcdFx0dGhpcy5pbnZpc2libGVNZXNzYWdlLmFubm91bmNlKHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChlYXN5RmlsdGVyUmVzdWx0Lm1lc3NhZ2UpLCBJbnZpc2libGVNZXNzYWdlTW9kZS5Bc3NlcnRpdmUpO1xuXHRcdFx0dGhpcy5zdGF0ZS5tZXNzYWdlU3RyaXBUeXBlID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0XHRcdHRoaXMuc3RhdGUuZ3JvdXBMZXZlbHMgPSBbXTtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGdlbmVyYXRpbmcgZmlsdGVyIGNyaXRlcmlhOiBcIiwgZWFzeUZpbHRlclJlc3VsdC5tZXNzYWdlKTtcblx0XHR9XG5cblx0XHR0aGlzLmZpcmVFdmVudChcImFmdGVyUXVlcnlQcm9jZXNzaW5nXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIHN1Y2Nlc3MgcmVzcG9uc2UgZnJvbSB0aGUgQUkgc2VydmljZSBmb3IgdmVyc2lvbiAxIG9mIHRoZSBlYXN5IGZpbHRlci5cblx0ICogQHBhcmFtIGVhc3lGaWx0ZXJSZXN1bHQgVGhlIHJlc3VsdCBmcm9tIHRoZSBBSSBzZXJ2aWNlXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwcml2YXRlIGhhbmRsZVYxU3VjY2VzcyhlYXN5RmlsdGVyUmVzdWx0OiBTdWNjZXNzPEVhc3lGaWx0ZXIuRWFzeUZpbHRlclJlc3VsdD4pOiB2b2lkIHtcblx0XHRpZiAoZWFzeUZpbHRlclJlc3VsdC5kYXRhLmZpbHRlcikge1xuXHRcdFx0Ly8gV2UgbmVlZCB0byBzaG93IGEgbWVzc2FnZSB0byB0aGUgdXNlciB0aGF0IHRoZSBmaWx0ZXIgY3JpdGVyaWEgaGFzIGJlZW4gZ2VuZXJhdGVkXG5cdFx0XHRMb2cuZGVidWcoXCJGaWx0ZXIgY3JpdGVyaWEgZ2VuZXJhdGVkOiBcIiwgSlNPTi5zdHJpbmdpZnkoZWFzeUZpbHRlclJlc3VsdC5kYXRhLmZpbHRlciwgbnVsbCwgMikpO1xuXG5cdFx0XHRjb25zdCB0b2tlbnMgPSBbLi4udGhpcy5zdGF0ZS50b2tlbnNdLmZpbHRlcigodG9rZW4pID0+IHRva2VuLmlzUmVxdWlyZWQpO1xuXG5cdFx0XHQvLyBDbGVhciB0aGUgcHJldmlvdXMgbWVzc2FnZSBzdHJpcCBmb3IgdmFsaWRhdGVkIGZpbHRlcnNcblx0XHRcdHRoaXMuY2xlYXJNZXNzYWdlU3RyaXAoKTtcblxuXHRcdFx0Ly8gVmFsaWRhdGUgYW5kIGFwcGx5IHRoZSBmaWx0ZXIgY3JpdGVyaWFcblx0XHRcdEVhc3lGaWx0ZXJVdGlscy5mb3JtYXREYXRhKFxuXHRcdFx0XHR0b2tlbnMsXG5cdFx0XHRcdGVhc3lGaWx0ZXJSZXN1bHQuZGF0YS5maWx0ZXIsXG5cdFx0XHRcdHRoaXMuZmlsdGVyQmFyTWV0YWRhdGEgYXMgRWFzeUZpbHRlclByb3BlcnR5TWV0YWRhdGFbXSxcblx0XHRcdFx0dGhpcy5zZXRNZXNzYWdlU3RyaXAuYmluZCh0aGlzKVxuXHRcdFx0KTtcblxuXHRcdFx0Ly9XZSBvbmx5IGhhdmUgdG8gY2FsbCB0aGUgZGF0YUZldGNoZXIgb24gdGhlIFZIIHRva2VucyB3aGljaCBoYXZlIGJlZW4gYXNrZWQgYnkgdGhlIHVzZXJcblx0XHRcdC8vSW4gTWFkbmF0b3J5IHRva2VucyBjYXNlIHRoZSBkZWZhdWx0VmFsdWVzIGFyZSBhbHJlYWR5IGdpdmVuLCBzbyBubyBuZWVkIHRvIGNhbGwgZGF0YUZldGNoZXIgb24gaXRcblxuXHRcdFx0Y29uc3QgYWxsVmFsdWVIZWxwVG9rZW5zID0gdG9rZW5zLmZpbHRlcigocmVzdWx0KSA9PiByZXN1bHQudHlwZSA9PT0gXCJWYWx1ZUhlbHBcIik7XG5cdFx0XHRjb25zdCByZXF1aXJlZFZhbHVlSGVscFRva2VucyA9IGFsbFZhbHVlSGVscFRva2Vucy5maWx0ZXIoKHZhbHVlSGVscFRva2VuKSA9PiB7XG5cdFx0XHRcdHJldHVybiBlYXN5RmlsdGVyUmVzdWx0LmRhdGEuZmlsdGVyPy5maW5kKChsbG1SZXN1bHQpID0+IGxsbVJlc3VsdC5uYW1lID09PSB2YWx1ZUhlbHBUb2tlbi5rZXkpO1xuXHRcdFx0fSk7XG5cblx0XHRcdGlmICh0aGlzLmRhdGFGZXRjaGVyKSB7XG5cdFx0XHRcdChyZXF1aXJlZFZhbHVlSGVscFRva2VucyBhcyB1bmtub3duIGFzIFZhbHVlSGVscFRva2VuRGVmaW5pdGlvbltdKS5mb3JFYWNoKGFzeW5jICh2YWx1ZUhlbHBUb2tlbikgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZGF0YUZldGNoZXI/Lihcblx0XHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmtleSxcblx0XHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMgYXMgdW5rbm93biBhcyBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdLFxuXHRcdFx0XHRcdFx0ZWFzeUZpbHRlclJlc3VsdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0dmFsdWVIZWxwVG9rZW4uYnVzeSA9IGZhbHNlO1xuXHRcdFx0XHRcdGlmIChyZXN1bHQpIHtcblx0XHRcdFx0XHRcdC8vV2Ugc2hvdWxkIG5vdCBjaGFuZ2UgdGhlIG1lc3NhZ2Ugc3RyaXAgZm9yIHRoZSBmaXJzdCB0aW1lIHdoZW4gdGhlIEdPIGJ1dHRvbiBpcyBwcmVzc2VkLCBiZWNhdXNlIGl0IGhhcyBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZCBpbiB0aGUgRWFzeUZpbHRlclV0aWxzLmZvcm1hdERhdGEgbWV0aG9kXG5cdFx0XHRcdFx0XHR0aGlzLnNob3VsZE1lc3NhZ2VTdHJpcFJlbW92ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0dmFsdWVIZWxwVG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyA9IHJlc3VsdDtcblx0XHRcdFx0XHRcdHRoaXMuc3RhdGUuc2hvd1Jlc3VsdCA9IHRydWU7XG5cdFx0XHRcdFx0XHR0aGlzLnN0YXRlLnRva2VucyA9IHVwZGF0ZWRUb2tlbnM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vSWYgZGF0YUZldGNoZXIgaXMgbm90IHRoZXJlLCB0aGVuIG1vY2sgdGhlIHZhbHVlIGFuZCBkZXNjcmlwdGlvbiB3aXRoIHRoZSBzYW1lIHJlc3VsdCBjb21pbmcgZnJvbSB0aGUgTExNXG5cdFx0XHRcdHJlcXVpcmVkVmFsdWVIZWxwVG9rZW5zLmZvckVhY2goKHZhbHVlSGVscFRva2VuKSA9PiB7XG5cdFx0XHRcdFx0dmFsdWVIZWxwVG9rZW4uYnVzeSA9IGZhbHNlO1xuXHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMuZm9yRWFjaCgoa2V5U3BlY2lmaWNWYWx1ZSwgaWR4KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoa2V5U3BlY2lmaWNWYWx1ZS5vcGVyYXRvciA9PT0gRmlsdGVyT3BlcmF0b3IuQlQgfHwga2V5U3BlY2lmaWNWYWx1ZS5vcGVyYXRvciA9PT0gRmlsdGVyT3BlcmF0b3IuTkIpIHtcblx0XHRcdFx0XHRcdFx0dmFsdWVIZWxwVG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlc1tpZHhdLnNlbGVjdGVkVmFsdWVzID0gW1xuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBrZXlTcGVjaWZpY1ZhbHVlLnNlbGVjdGVkVmFsdWVzWzBdLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IGtleVNwZWNpZmljVmFsdWUuc2VsZWN0ZWRWYWx1ZXNbMF0gYXMgdW5rbm93biBhcyBsbG1SZXN1bHRGb3JTZWxlY3RlZFZhbHVlc1R5cGVcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBrZXlTcGVjaWZpY1ZhbHVlLnNlbGVjdGVkVmFsdWVzWzFdLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IGtleVNwZWNpZmljVmFsdWUuc2VsZWN0ZWRWYWx1ZXNbMV0gYXMgdW5rbm93biBhcyBsbG1SZXN1bHRGb3JTZWxlY3RlZFZhbHVlc1R5cGVcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdF07XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR2YWx1ZUhlbHBUb2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzW2lkeF0uc2VsZWN0ZWRWYWx1ZXMuZm9yRWFjaCgodmFsdWUsIHN1YkluZHgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZUhlbHBUb2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzW2lkeF0uc2VsZWN0ZWRWYWx1ZXNbc3ViSW5keF0gPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB2YWx1ZSBhcyB1bmtub3duIGFzIGxsbVJlc3VsdEZvclNlbGVjdGVkVmFsdWVzVHlwZVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgdXBkYXRlZFRva2VucyA9IHRoaXMudmVyaWZ5U2luZ2xlU2VsZWN0VG9rZW5WYWx1ZXModG9rZW5zKTtcblxuXHRcdFx0Ly8gVmFsaWRhdGUgYW5kIHN0b3JlIHNvcnQgZXhwcmVzc2lvbnMgKGFwcGxpZWQgdG8gdGFibGUgZGlyZWN0bHksIG5vdCBzaG93biBhcyB0b2tlbnMpXG5cdFx0XHR0aGlzLnN0YXRlLnNvcnRlcnMgPSB0aGlzLnN1cHBvcnRzU29ydGluZyA/IHRoaXMudmFsaWRhdGVTb3J0RXhwcmVzc2lvbnMoZWFzeUZpbHRlclJlc3VsdC5kYXRhLnNvcnRlcnMpIDogW107XG5cdFx0XHR0aGlzLnN0YXRlLnNob3dSZXN1bHQgPSB0cnVlO1xuXHRcdFx0dGhpcy5zdGF0ZS50aHVtYkJ1dHRvbkVuYWJsZWQgPSB0cnVlO1xuXHRcdFx0dGhpcy5zdGF0ZS50aHVtYkRvd25CdXR0b25QcmVzc2VkID0gZmFsc2U7XG5cdFx0XHR0aGlzLnN0YXRlLnRodW1iVXBCdXR0b25QcmVzc2VkID0gZmFsc2U7XG5cdFx0XHR0aGlzLnN0YXRlLnRva2VucyA9IHVwZGF0ZWRUb2tlbnM7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdGF0ZS5ncm91cExldmVscyA9IHRoaXMuc3VwcG9ydHNHcm91cGluZyA/IHRoaXMuYXBwbHlHcm91cExldmVscyhlYXN5RmlsdGVyUmVzdWx0LmRhdGEuZ3JvdXBMZXZlbHMpIDogW107XG5cblx0XHR0aGlzLnNob3dVbnN1cHBvcnRlZENhcGFiaWxpdGllc1dhcm5pbmcoZWFzeUZpbHRlclJlc3VsdC5kYXRhLnNvcnRlcnMsIGVhc3lGaWx0ZXJSZXN1bHQuZGF0YS5ncm91cExldmVscyk7XG5cdH1cblxuXHQvKipcblx0ICogU2hvd3MgYSB3YXJuaW5nIHdoZW4gdGhlIGFwcCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBMTE0ncyBzb3J0L2dyb3VwIGV4cHJlc3Npb25zLlxuXHQgKiBAcGFyYW0gc29ydGVycyBTb3J0IGV4cHJlc3Npb25zIGZyb20gdGhlIExMTS5cblx0ICogQHBhcmFtIGdyb3VwTGV2ZWxzIEdyb3VwIGxldmVscyBmcm9tIHRoZSBMTE0uXG5cdCAqL1xuXHRwcml2YXRlIHNob3dVbnN1cHBvcnRlZENhcGFiaWxpdGllc1dhcm5pbmcoXG5cdFx0c29ydGVyczogRWFzeUZpbHRlci5FYXN5RmlsdGVyU29ydEV4cHJlc3Npb25bXSB8IHVuZGVmaW5lZCxcblx0XHRncm91cExldmVsczogRWFzeUZpbHRlci5FYXN5RmlsdGVyR3JvdXBMZXZlbERlZmluaXRpb25bXSB8IHVuZGVmaW5lZFxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBoYXNTb3J0ZXJzRnJvbUxMTSA9IHNvcnRlcnMgJiYgc29ydGVycy5sZW5ndGggPiAwO1xuXHRcdGNvbnN0IGhhc0dyb3VwTGV2ZWxzRnJvbUxMTSA9IGdyb3VwTGV2ZWxzICYmIGdyb3VwTGV2ZWxzLmxlbmd0aCA+IDA7XG5cdFx0Y29uc3Qgc29ydGluZ1Vuc3VwcG9ydGVkID0gIXRoaXMuc3VwcG9ydHNTb3J0aW5nICYmIGhhc1NvcnRlcnNGcm9tTExNO1xuXHRcdGNvbnN0IGdyb3VwaW5nVW5zdXBwb3J0ZWQgPSAhdGhpcy5zdXBwb3J0c0dyb3VwaW5nICYmIGhhc0dyb3VwTGV2ZWxzRnJvbUxMTTtcblxuXHRcdGlmIChzb3J0aW5nVW5zdXBwb3J0ZWQgJiYgZ3JvdXBpbmdVbnN1cHBvcnRlZCkge1xuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlU3RyaXAodGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9TT1JUSU5HX0FORF9HUk9VUElOR19OT1RfU1VQUE9SVEVEXCIpLCBNZXNzYWdlVHlwZS5XYXJuaW5nKTtcblx0XHR9IGVsc2UgaWYgKHNvcnRpbmdVbnN1cHBvcnRlZCkge1xuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlU3RyaXAodGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9TT1JUSU5HX05PVF9TVVBQT1JURURcIiksIE1lc3NhZ2VUeXBlLldhcm5pbmcpO1xuXHRcdH0gZWxzZSBpZiAoZ3JvdXBpbmdVbnN1cHBvcnRlZCkge1xuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlU3RyaXAodGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9HUk9VUElOR19OT1RfU1VQUE9SVEVEXCIpLCBNZXNzYWdlVHlwZS5XYXJuaW5nKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyB3aGV0aGVyIHRoZSBhcHAgc3VwcG9ydHMgc29ydGluZyBhbmQgZ3JvdXBpbmcgYmFzZWQgb24gdGFibGUgcGVyc29uYWxpemF0aW9uIHNldHRpbmdzLlxuXHQgKiBAcGFyYW0gc29ydGluZyBXaGV0aGVyIHRoZSBhcHAgc3VwcG9ydHMgc29ydGluZy5cblx0ICogQHBhcmFtIGdyb3VwaW5nIFdoZXRoZXIgdGhlIGFwcCBzdXBwb3J0cyBncm91cGluZy5cblx0ICovXG5cdHB1YmxpYyBzZXRQZXJzb25hbGl6YXRpb25TdXBwb3J0KHNvcnRpbmc6IGJvb2xlYW4sIGdyb3VwaW5nOiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5zdXBwb3J0c1NvcnRpbmcgPSBzb3J0aW5nO1xuXHRcdHRoaXMuc3VwcG9ydHNHcm91cGluZyA9IGdyb3VwaW5nO1xuXHR9XG5cblx0LyoqXG5cdCAqICBWYWxpZGF0ZXMgYW5kIHRyaWdnZXJzIHRoZSBncm91cExldmVsc0NoYW5nZWQgZnVuY3Rpb24sIHdoaWNoIHdhcm5zIGFib3V0IG5vbi1ncm91cGFibGUgZmllbGRzLlxuXHQgKiBAcGFyYW0gZ3JvdXBMZXZlbHMgVGhlIGdyb3VwIGxldmVscyB0byB2YWxpZGF0ZSBhbmQgYXBwbHlcblx0ICogQHJldHVybnMgR3JvdXBMZXZlbERlZmluaXRpb25bXSBBbiBhcnJheSBvZiB2YWxpZCBncm91cCBsZXZlbCBkZWZpbml0aW9ucyB0byBiZSBhcHBsaWVkXG5cdCAqL1xuXHRwcml2YXRlIGFwcGx5R3JvdXBMZXZlbHMoZ3JvdXBMZXZlbHM6IEdyb3VwTGV2ZWxEZWZpbml0aW9uW10gfCB1bmRlZmluZWQpOiBHcm91cExldmVsRGVmaW5pdGlvbltdIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IHRoaXMuZmlsdGVyQmFyTWV0YWRhdGEgYXMgRWFzeUZpbHRlclByb3BlcnR5TWV0YWRhdGFbXTtcblxuXHRcdGlmICghbWV0YWRhdGEgfHwgIWdyb3VwTGV2ZWxzIHx8IGdyb3VwTGV2ZWxzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJlc29sdmVGaWVsZCA9IChncm91cERlZjogR3JvdXBMZXZlbERlZmluaXRpb24pOiBFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YSB8IHVuZGVmaW5lZCA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBFYXN5RmlsdGVyVXRpbHMucmVzb2x2ZVByb3BlcnR5TmFtZShncm91cERlZi5rZXkpO1xuXHRcdFx0Y29uc3QgZmllbGQgPSBtZXRhZGF0YS5maW5kKChmKSA9PiBmLm5hbWUgPT09IGdyb3VwRGVmLmtleSB8fCBmLm5hbWUuZW5kc1dpdGgoYC8ke3Byb3BlcnR5TmFtZX1gKSk7XG5cdFx0XHRpZiAoIWZpZWxkKSB7XG5cdFx0XHRcdExvZy53YXJuaW5nKGBFYXN5RmlsdGVyQmFyQ29udGFpbmVyOiBncm91cCBrZXkgXCIke2dyb3VwRGVmLmtleX1cIiBub3QgZm91bmQgaW4gZmlsdGVyIGJhciBtZXRhZGF0YSwgc2tpcHBpbmdgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmaWVsZDtcblx0XHR9O1xuXG5cdFx0aWYgKGdyb3VwTGV2ZWxzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gbmV3IEVycm9yTWVzc2FnZUhhbmRsZXIoKTtcblx0XHRcdGNvbnN0IGZpZWxkID0gcmVzb2x2ZUZpZWxkKGdyb3VwTGV2ZWxzWzBdKTtcblx0XHRcdGlmICghZmllbGQpIHJldHVybiBbXTtcblx0XHRcdGNvbnN0IGlzR3JvdXBhYmxlID0gZXJyb3JIYW5kbGVyLmlzR3JvdXBhYmxlUHJvcGVydHkoZmllbGQpO1xuXHRcdFx0aWYgKGVycm9ySGFuZGxlci5oYXNFcnJvcnMoKSkge1xuXHRcdFx0XHR0aGlzLmFwcGVuZE1lc3NhZ2VTdHJpcChlbmNvZGVYTUwoZXJyb3JIYW5kbGVyLmdldEVycm9yTWVzc2FnZSgpKSwgTWVzc2FnZVR5cGUuV2FybmluZyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gaXNHcm91cGFibGUgPyBbZ3JvdXBMZXZlbHNbMF1dIDogW107XG5cdFx0fVxuXG5cdFx0Ly8gTXVsdGlwbGUgZ3JvdXAgbGV2ZWxzOiBmaW5kIHRoZSBmaXJzdCB2YWxpZCBncm91cGFibGUgZmllbGRcblx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSBuZXcgRXJyb3JNZXNzYWdlSGFuZGxlcigpO1xuXHRcdGxldCBmaXJzdEdyb3VwYWJsZURlZjogR3JvdXBMZXZlbERlZmluaXRpb24gfCB1bmRlZmluZWQ7XG5cdFx0bGV0IGZpcnN0R3JvdXBhYmxlTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRcdGZvciAoY29uc3QgZ3JvdXBEZWYgb2YgZ3JvdXBMZXZlbHMpIHtcblx0XHRcdGNvbnN0IGZpZWxkID0gcmVzb2x2ZUZpZWxkKGdyb3VwRGVmKTtcblx0XHRcdGlmICghZmllbGQpIGNvbnRpbnVlO1xuXHRcdFx0aWYgKGVycm9ySGFuZGxlci5pc0dyb3VwYWJsZVByb3BlcnR5KGZpZWxkKSkge1xuXHRcdFx0XHRpZiAoIWZpcnN0R3JvdXBhYmxlRGVmKSB7XG5cdFx0XHRcdFx0Zmlyc3RHcm91cGFibGVEZWYgPSBncm91cERlZjtcblx0XHRcdFx0XHRmaXJzdEdyb3VwYWJsZUxhYmVsID0gZmllbGQubGFiZWwgPz8gZmllbGQubmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChmaXJzdEdyb3VwYWJsZURlZikge1xuXHRcdFx0Y29uc3Qgd2FybmluZyA9IHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfTVVMVElQTEVfR1JPVVBfV0FSTklOR1wiLCBbZmlyc3RHcm91cGFibGVMYWJlbF0pO1xuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlU3RyaXAoZW5jb2RlWE1MKHdhcm5pbmcpLCBNZXNzYWdlVHlwZS5XYXJuaW5nKTtcblx0XHRcdHJldHVybiBbZmlyc3RHcm91cGFibGVEZWZdO1xuXHRcdH1cblxuXHRcdC8vIEFsbCBmaWVsZHMgYXJlIG5vbi1ncm91cGFibGVcblx0XHRpZiAoZXJyb3JIYW5kbGVyLmhhc0Vycm9ycygpKSB7XG5cdFx0XHR0aGlzLmFwcGVuZE1lc3NhZ2VTdHJpcChlbmNvZGVYTUwoZXJyb3JIYW5kbGVyLmdldEVycm9yTWVzc2FnZSgpKSwgTWVzc2FnZVR5cGUuV2FybmluZyk7XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBWYWxpZGF0ZXMgc29ydCBleHByZXNzaW9ucyBmcm9tIHRoZSBBSSByZXN1bHQgYW5kIHJldHVybnMgdmFsaWQgc29ydCBkZWZpbml0aW9ucy5cblx0ICogQHBhcmFtIHNvcnRFeHByZXNzaW9ucyBUaGUgc29ydCBleHByZXNzaW9ucyBmcm9tIHRoZSBBQkFQIHNlcnZpY2UuXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRlZCBzb3J0IGRlZmluaXRpb25zLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHJpdmF0ZSB2YWxpZGF0ZVNvcnRFeHByZXNzaW9ucyhzb3J0RXhwcmVzc2lvbnM/OiBFYXN5RmlsdGVyLkVhc3lGaWx0ZXJTb3J0RXhwcmVzc2lvbltdKTogU29ydERlZmluaXRpb25bXSB7XG5cdFx0aWYgKCFzb3J0RXhwcmVzc2lvbnMgfHwgc29ydEV4cHJlc3Npb25zLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblxuXHRcdGNvbnN0IG5vblNvcnRhYmxlRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0Y29uc3QgdmFsaWRTb3J0ZXJzID0gc29ydEV4cHJlc3Npb25zXG5cdFx0XHQuZmlsdGVyKChzb3J0RXhwcmVzc2lvbikgPT4ge1xuXHRcdFx0XHQvLyBWYWxpZGF0ZSB0aGF0IHRoZSBmaWVsZCBleGlzdHMgaW4gbWV0YWRhdGEgYW5kIGlzIHNvcnRhYmxlXG5cdFx0XHRcdGNvbnN0IGZpZWxkTWV0YWRhdGEgPSB0aGlzLmZpbHRlckJhck1ldGFkYXRhPy5maW5kKChmaWVsZCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGZpZWxkTmFtZSA9IGZpZWxkLm5hbWUuc3BsaXQoXCIvXCIpLnBvcCgpO1xuXHRcdFx0XHRcdHJldHVybiBmaWVsZE5hbWUgPT09IHNvcnRFeHByZXNzaW9uLmtleSB8fCBmaWVsZC5uYW1lID09PSBzb3J0RXhwcmVzc2lvbi5rZXk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmICghZmllbGRNZXRhZGF0YSkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChmaWVsZE1ldGFkYXRhLnNvcnRhYmxlID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdG5vblNvcnRhYmxlRmllbGRzLnB1c2goZmllbGRNZXRhZGF0YS5sYWJlbCA/PyBzb3J0RXhwcmVzc2lvbi5rZXkpO1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSlcblx0XHRcdC5tYXAoKHNvcnRFeHByZXNzaW9uKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IHNvcnRFeHByZXNzaW9uLmtleS5zcGxpdChcIi9cIikucG9wKCkgPz8gc29ydEV4cHJlc3Npb24ua2V5O1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGtleTogcHJvcGVydHlOYW1lLFxuXHRcdFx0XHRcdGRlc2NlbmRpbmc6IHNvcnRFeHByZXNzaW9uLmRlc2NlbmRpbmdcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXG5cdFx0Ly8gU2hvdyB3YXJuaW5nIG1lc3NhZ2UgZm9yIG5vbi1zb3J0YWJsZSBmaWVsZHNcblx0XHRpZiAobm9uU29ydGFibGVGaWVsZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfTk9OX1NPUlRBQkxFXCIsIFtub25Tb3J0YWJsZUZpZWxkcy5qb2luKFwiLCBcIildKTtcblx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZVN0cmlwKG1lc3NhZ2UsIE1lc3NhZ2VUeXBlLldhcm5pbmcpO1xuXHRcdH1cblxuXHRcdHJldHVybiB2YWxpZFNvcnRlcnM7XG5cdH1cblxuXHQvL2V2ZXJ5IHNpbmdsZSBzZWxlY3QgbWVudSB0eXBlIHNob3VsZCBoYXZlIG9ubHkgb25lIHZhbHVlLCBlbHNlIHNwbGljZSB0byBvbmUgdmFsdWUgYW5kIHVwZGF0ZSB0aGUgIG1lc3NhZ2Ugc3RyaXBcblx0dmVyaWZ5U2luZ2xlU2VsZWN0VG9rZW5WYWx1ZXModG9rZW5zOiBUb2tlbkRlZmluaXRpb25bXSk6IFRva2VuRGVmaW5pdGlvbltdIHtcblx0XHRjb25zdCBzaW5nbGVTZWxlY3RUb2tlbkxhYmVsczogc3RyaW5nW10gPSBbXTtcblx0XHR0b2tlbnMuZm9yRWFjaCgodG9rZW4pID0+IHtcblx0XHRcdGlmICh0b2tlbi50eXBlID09PSBcIk1lbnVXaXRoU2luZ2xlU2VsZWN0XCIpIHtcblx0XHRcdFx0aWYgKHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXNbMF0uc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdHNpbmdsZVNlbGVjdFRva2VuTGFiZWxzLnB1c2godG9rZW4ubGFiZWwpO1xuXHRcdFx0XHRcdHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXNbMF0uc2VsZWN0ZWRWYWx1ZXMuc3BsaWNlKDEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0aWYgKHNpbmdsZVNlbGVjdFRva2VuTGFiZWxzLmxlbmd0aCkge1xuXHRcdFx0dGhpcy5zdGF0ZS5zaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcFRleHQgPSB0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1NJTkdMRV9WQUxVRV9NRVNTQUdFXCIsIFtcblx0XHRcdFx0YDxzdHJvbmc+JHtzaW5nbGVTZWxlY3RUb2tlbkxhYmVscy5qb2luKFwiLCBcIil9PC9zdHJvbmc+YFxuXHRcdFx0XSk7XG5cdFx0XHR0aGlzLnN0YXRlLnNob3dTaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcCA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiB0b2tlbnM7XG5cdH1cblxuXHRjbGVhck1lc3NhZ2VTdHJpcCgpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXRlLnRodW1iRG93bkJ1dHRvblByZXNzZWQgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXRlLnRodW1iVXBCdXR0b25QcmVzc2VkID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0ZS5zaG93TWVzc2FnZVN0cmlwID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0ZS5tZXNzYWdlU3RyaXBUZXh0ID0gXCJcIjtcblx0XHR0aGlzLnN0YXRlLm1lc3NhZ2VTdHJpcFR5cGUgPSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0fVxuXG5cdGNsZWFyTWVzc2FnZVN0cmlwRm9yU2luZ2xlVmFsdWUoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS5zaG93U2luZ2xlVmFsdWVNZXNzYWdlU3RyaXAgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXRlLnNpbmdsZVZhbHVlTWVzc2FnZVN0cmlwVGV4dCA9IFwiXCI7XG5cdH1cblxuXHRzZXRNZXNzYWdlU3RyaXAodGV4dDogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYkRvd25CdXR0b25QcmVzc2VkID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYlVwQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUudGh1bWJCdXR0b25FbmFibGVkID0gdHJ1ZTtcblx0XHR0aGlzLnN0YXRlLm1lc3NhZ2VTdHJpcFRleHQgPSB0ZXh0O1xuXHRcdHRoaXMuc3RhdGUuc2hvd01lc3NhZ2VTdHJpcCA9IHRydWU7XG5cdH1cblxuXHRzZXRNZXNzYWdlU3RyaXBXaXRoVHlwZSh0ZXh0OiBzdHJpbmcsIHR5cGU6IE1lc3NhZ2VUeXBlKTogdm9pZCB7XG5cdFx0dGhpcy5zZXRNZXNzYWdlU3RyaXAodGV4dCk7XG5cdFx0dGhpcy5zdGF0ZS5tZXNzYWdlU3RyaXBUeXBlID0gdHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBlbmRzIGEgbWVzc2FnZSB0byB0aGUgZXhpc3RpbmcgbWVzc2FnZSBzdHJpcCBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIGl0LlxuXHQgKiBAcGFyYW0gdGV4dCBUaGUgbWVzc2FnZSB0ZXh0IHRvIGFwcGVuZC5cblx0ICogQHBhcmFtIHR5cGUgVGhlIG1lc3NhZ2UgdHlwZSBmb3IgdGhpcyBtZXNzYWdlLlxuXHQgKi9cblx0YXBwZW5kTWVzc2FnZVN0cmlwKHRleHQ6IHN0cmluZywgdHlwZTogTWVzc2FnZVR5cGUpOiB2b2lkIHtcblx0XHRjb25zdCBjb21iaW5lZCA9IHRoaXMuc3RhdGUuc2hvd01lc3NhZ2VTdHJpcCAmJiB0aGlzLnN0YXRlLm1lc3NhZ2VTdHJpcFRleHQgPyBgJHt0aGlzLnN0YXRlLm1lc3NhZ2VTdHJpcFRleHR9PGJyPiR7dGV4dH1gIDogdGV4dDtcblx0XHR0aGlzLnNldE1lc3NhZ2VTdHJpcFdpdGhUeXBlKGNvbWJpbmVkLCB0eXBlKTtcblx0fVxuXG5cdGNyZWF0ZVBvcG92ZXJGb3JJbm5lckNvbnRyb2xzKCk6IFBvcG92ZXIge1xuXHRcdGlmICghdGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyKSB7XG5cdFx0XHR0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIgPSAoXG5cdFx0XHRcdDxQb3BvdmVyXG5cdFx0XHRcdFx0aWQ9e3RoaXMuZ2V0SWQoKSArIFwiLWlubmVyUG9wb3ZlclwifVxuXHRcdFx0XHRcdHNob3dBcnJvdz17ZmFsc2V9XG5cdFx0XHRcdFx0c2hvd0hlYWRlcj17dHJ1ZX1cblx0XHRcdFx0XHRwbGFjZW1lbnQ9e1BsYWNlbWVudFR5cGUuQm90dG9tfVxuXHRcdFx0XHRcdGNsYXNzPVwic2FwVWlNZWRpdW1NYXJnaW5Cb3R0b21cIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGZvb3RlcjogdGhpcy5nZXRUb29sYmFyKClcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L1BvcG92ZXI+XG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyIGFzIFBvcG92ZXI7XG5cdH1cblxuXHRnZXRUb29sYmFyKCk6IE92ZXJmbG93VG9vbGJhciB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCF0aGlzLnRvb2xiYXIpIHtcblx0XHRcdGNvbnN0IG9rQnV0dG9uID0gdGhpcy5nZXRPa0J1dHRvbigpO1xuXHRcdFx0Y29uc3Qgc2hvd0FsbEJ1dHRvbiA9IHRoaXMuZ2V0U2hvd0FsbEJ1dHRvbigpO1xuXHRcdFx0dGhpcy50b29sYmFyID0gKFxuXHRcdFx0XHQ8T3ZlcmZsb3dUb29sYmFyPlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjb250ZW50OiAoXG5cdFx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdFx0PFRvb2xiYXJTcGFjZXIgLz5cblx0XHRcdFx0XHRcdFx0XHR7b2tCdXR0b259XG5cdFx0XHRcdFx0XHRcdFx0e3Nob3dBbGxCdXR0b259XG5cdFx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvT3ZlcmZsb3dUb29sYmFyPlxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMudG9vbGJhcjtcblx0fVxuXG5cdGdldE9rQnV0dG9uKCk6IEJ1dHRvbiB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCF0aGlzLm9rQnV0dG9uKSB7XG5cdFx0XHR0aGlzLm9rQnV0dG9uID0gPEJ1dHRvbiB0ZXh0PXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BPUE9WRVJfT0tcIil9IHR5cGU9e0J1dHRvblR5cGUuRW1waGFzaXplZH0gLz47XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLm9rQnV0dG9uO1xuXHR9XG5cblx0Z2V0U2hvd0FsbEJ1dHRvbigpOiBCdXR0b24gfCB1bmRlZmluZWQge1xuXHRcdGlmICghdGhpcy5zaG93QWxsQnV0dG9uKSB7XG5cdFx0XHR0aGlzLnNob3dBbGxCdXR0b24gPSA8QnV0dG9uIHRleHQ9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUE9QT1ZFUl9TSE9XX0FMTF9JVEVNU1wiKX0gLz47XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnNob3dBbGxCdXR0b247XG5cdH1cblxuXHRmb3JtYXRUb2tlbnModG9rZW5zOiBUb2tlbkRlZmluaXRpb25bXSk6IFRva2VuRGVmaW5pdGlvbltdIHtcblx0XHRyZXR1cm4gdG9rZW5zLm1hcCgodG9rZW4pID0+IHtcblx0XHRcdGlmICh0b2tlbi50eXBlID09PSBcIlZhbHVlSGVscFwiKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0Li4udG9rZW4sXG5cdFx0XHRcdFx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogdG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcy5tYXAoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvL01ha2luZyBzdXJlIHRoYXQgb25seSB0aGUgaWQgcGFydCBpcyBwYXNzZWRcblx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdG9wZXJhdG9yOiB2YWx1ZS5vcGVyYXRvcixcblx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRWYWx1ZXM6IHZhbHVlLnNlbGVjdGVkVmFsdWVzLm1hcCgodmFsKSA9PiB2YWwudmFsdWUpXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH0gYXMgVG9rZW5EZWZpbml0aW9uO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGRlZXBDbG9uZSh0b2tlbik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRvblN0YXRlQ2hhbmdlKGNoYW5nZWRQcm9wczogc3RyaW5nW10gPSBbXSk6IHZvaWQge1xuXHRcdGlmIChjaGFuZ2VkUHJvcHMuaW5jbHVkZXMoXCJ0b2tlbnNcIikpIHtcblx0XHRcdGlmICh0aGlzLnNob3VsZFRva2VuQ2hhbmdlRXZlbnRGaXJlZCkge1xuXHRcdFx0XHR0aGlzLmZpcmVFdmVudChcInRva2Vuc0NoYW5nZWRcIiwge1xuXHRcdFx0XHRcdHRva2VuczogdGhpcy5mb3JtYXRUb2tlbnModGhpcy5zdGF0ZS50b2tlbnMgYXMgdW5rbm93biBhcyBUb2tlbkRlZmluaXRpb25bXSksXG5cdFx0XHRcdFx0cmVzZXQ6IHRoaXMuaXNSZXNldHRpbmdUb0RlZmF1bHRUb2tlbnNcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnN0YXRlLnNob3dSZXN1bHQgPSB0aGlzLnN0YXRlLnRva2Vucy5sZW5ndGggPiAwO1xuXHRcdFx0aWYgKCEodGhpcy5pc01hbmRhdG9yeUNoZWNrUmVxdWlyZWQgPz8gZmFsc2UpKSB7XG5cdFx0XHRcdHRoaXMuY2hlY2tJZkFsbE1hbmRhdG9yeVRva2Vuc0ZpbGxlZCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5zaG91bGRNZXNzYWdlU3RyaXBSZW1vdmUpIHtcblx0XHRcdFx0LyoqXG5cdFx0XHRcdCAqIFRoZSB1c2VyIGhhcyBhY2tub3dsZWRnZWQgdGhlIG1lc3NhZ2Ugc3RyaXAgYW5kIHVuZGVyc3Rvb2QgdGhlIGlzc3VlLlxuXHRcdFx0XHQgKiBXaGVuIHRoZSB0b2tlbnMgYXJlIHVwZGF0ZWQgbmV4dCB0aW1lLCBkaXNwbGF5aW5nIHRoZSBtZXNzYWdlIHN0cmlwIGFnYWluIHNlcnZlcyBubyBwdXJwb3NlLlxuXHRcdFx0XHQgKiBBZGRpdGlvbmFsbHksIG9uY2UgdGhlIHRva2VucyBhcmUgdXBkYXRlZCwgdGhlIGlucHV0IGZpZWxkIHRleHQgaXMgcmVtb3ZlZFxuXHRcdFx0XHQgKiByZW5kZXJpbmcgdGhlIG1lc3NhZ2Ugc3RyaXAgaXJyZWxldmFudC4gSG93ZXZlciwgdGhlIG1lc3NhZ2Ugc3RyaXAgaXMgZGlzcGxheWVkIGFnYWluIHRoZSBuZXh0IHRpbWUgdGhlIFwiR29cIiBidXR0b24gaXMgcHJlc3NlZC5cblx0XHRcdFx0ICovXG5cdFx0XHRcdHRoaXMuY2xlYXJNZXNzYWdlU3RyaXAoKTtcblx0XHRcdFx0dGhpcy5jbGVhck1lc3NhZ2VTdHJpcEZvclNpbmdsZVZhbHVlKCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnNob3VsZE1lc3NhZ2VTdHJpcFJlbW92ZSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKGNoYW5nZWRQcm9wcy5pbmNsdWRlcyhcInNvcnRlcnNcIikpIHtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KFwic29ydGVyc0NoYW5nZWRcIiwge1xuXHRcdFx0XHRzb3J0ZXJzOiB0aGlzLnN0YXRlLnNvcnRlcnNcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGlmIChjaGFuZ2VkUHJvcHMuaW5jbHVkZXMoXCJncm91cExldmVsc1wiKSkge1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoXCJncm91cExldmVsc0NoYW5nZWRcIiwge1xuXHRcdFx0XHRncm91cExldmVsczogdGhpcy5zdGF0ZS5ncm91cExldmVsc1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8vUmVzZXR0aW5nIHRvIGRlZmF1bHQgdmFsdWVzXG5cdFx0dGhpcy5pc01hbmRhdG9yeUNoZWNrUmVxdWlyZWQgPSBmYWxzZTtcblx0XHR0aGlzLnNob3VsZFRva2VuQ2hhbmdlRXZlbnRGaXJlZCA9IHRydWU7XG5cdFx0dGhpcy5pc1Jlc2V0dGluZ1RvRGVmYXVsdFRva2VucyA9IGZhbHNlO1xuXG5cdFx0Ly8gIG9uc2FwZm9jdXNsZWF2ZSBtZXRob2QgaW4gc2FwLm0uVG9rZW5pemVyIGlzIGF1dG9tYXRpY2FsbHkgY29udmVydGluZyB0aGUgcmVuZGVybW9kZSBvZiB0b2tlbml6ZXIgdG8gXCJOYXJyb3dcIiBmcm9tIFwibG9vc2VcIlxuXHRcdC8vICBJbiB0aGlzIHByb2Nlc3MgdGhlcmUgYXJlIG11bHRpcGxlIHBvcG92ZXIgaXNzdWVzIGhhcHBlbmluZ1xuXHRcdC8vICBTbyBhcyBhIHRlbXBvcmFyeSBmaXggb3ZlcnJpZGluZyB0aGUgZnVuY3Rpb25cblx0XHQodGhpcy50b2tlbml6ZXI/LmN1cnJlbnQgYXMgRm9jdXNIYW5kbGluZ0NvbnRyb2wpLm9uc2FwZm9jdXNsZWF2ZSA9ICgpOiB2b2lkID0+IHt9O1xuXHR9XG5cblx0cHJpdmF0ZSBvblRodW1iVXBQcmVzc2VkKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUudGh1bWJVcEJ1dHRvblByZXNzZWQgPSB0cnVlO1xuXHRcdHRoaXMuc3RhdGUudGh1bWJEb3duQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdHRyaWdnZXJQWEludGVncmF0aW9uKFwidGh1bWJVcFwiKTtcblx0XHR0aGlzLm9uVGh1bWJQcmVzc2VkKCk7XG5cdH1cblxuXHRwcml2YXRlIG9uVGh1bWJEb3duUHJlc3NlZCgpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXRlLnRodW1iRG93bkJ1dHRvblByZXNzZWQgPSB0cnVlO1xuXHRcdHRoaXMuc3RhdGUudGh1bWJVcEJ1dHRvblByZXNzZWQgPSBmYWxzZTtcblx0XHR0cmlnZ2VyUFhJbnRlZ3JhdGlvbihcInRodW1iRG93blwiKTtcblx0XHR0aGlzLm9uVGh1bWJQcmVzc2VkKCk7XG5cdH1cblxuXHRwcml2YXRlIG9uVGh1bWJQcmVzc2VkKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUudGh1bWJCdXR0b25FbmFibGVkID0gZmFsc2U7XG5cdFx0TWVzc2FnZVRvYXN0LnNob3codGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19FQVNZX0ZJTFRFUl9GRUVEQkFDS19TRU5UXCIpKTtcblx0fVxuXG5cdGNyZWF0ZUNvbnRlbnQoKTogVkJveCB7XG5cdFx0Y29uc3QgJHRvcEdvQnRuID0gY3JlYXRlUmVmZXJlbmNlPEJ1dHRvbj4oKTtcblx0XHRjb25zdCB0aHVtYlVwQnV0dG9uVG9rZW5pemVyID0gKFxuXHRcdFx0PFRvZ2dsZUJ1dHRvblxuXHRcdFx0XHRpY29uPXtcInNhcC1pY29uOi8vdGh1bWItdXBcIn1cblx0XHRcdFx0dG9vbHRpcD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19FQVNZX0ZJTFRFUl9USFVNQlNfVVBcIil9XG5cdFx0XHRcdHR5cGU9e1wiVHJhbnNwYXJlbnRcIn1cblx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vblRodW1iVXBQcmVzc2VkKCk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdGVuYWJsZWQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRodW1iQnV0dG9uRW5hYmxlZFwiKX1cblx0XHRcdFx0cHJlc3NlZD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidGh1bWJVcEJ1dHRvblByZXNzZWRcIil9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKHRodW1iVXBCdXR0b25Ub2tlbml6ZXIsIFwicHJlc3NcIiwgXCJmZTQ6ZWZ0OnQ6dGh1bWJVcFwiKTtcblx0XHRjb25zdCB0aHVtYkRvd25CdXR0b25Ub2tlbml6ZXIgPSAoXG5cdFx0XHQ8VG9nZ2xlQnV0dG9uXG5cdFx0XHRcdGljb249e1wic2FwLWljb246Ly90aHVtYi1kb3duXCJ9XG5cdFx0XHRcdHRvb2x0aXA9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfRUFTWV9GSUxURVJfVEhVTUJTX0RPV05cIil9XG5cdFx0XHRcdHR5cGU9e1wiVHJhbnNwYXJlbnRcIn1cblx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vblRodW1iRG93blByZXNzZWQoKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0ZW5hYmxlZD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidGh1bWJCdXR0b25FbmFibGVkXCIpfVxuXHRcdFx0XHRwcmVzc2VkPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0aHVtYkRvd25CdXR0b25QcmVzc2VkXCIpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZSh0aHVtYkRvd25CdXR0b25Ub2tlbml6ZXIsIFwicHJlc3NcIiwgXCJmZTQ6ZWZ0OnQ6dGh1bWJEb3duXCIpO1xuXHRcdGNvbnN0IHRodW1iVXBCdXR0b25NZXNzYWdlU3RyaXBlID0gKFxuXHRcdFx0PFRvZ2dsZUJ1dHRvblxuXHRcdFx0XHRpY29uPXtcInNhcC1pY29uOi8vdGh1bWItdXBcIn1cblx0XHRcdFx0dG9vbHRpcD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19FQVNZX0ZJTFRFUl9USFVNQlNfVVBcIil9XG5cdFx0XHRcdHR5cGU9e1wiVHJhbnNwYXJlbnRcIn1cblx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vblRodW1iVXBQcmVzc2VkKCk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdGVuYWJsZWQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRodW1iQnV0dG9uRW5hYmxlZFwiKX1cblx0XHRcdFx0cHJlc3NlZD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidGh1bWJVcEJ1dHRvblByZXNzZWRcIil9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKHRodW1iVXBCdXR0b25NZXNzYWdlU3RyaXBlLCBcInByZXNzXCIsIFwiZmU0OmVmdDptczp0aHVtYlVwXCIpO1xuXHRcdGNvbnN0IHRodW1iRG93bkJ1dHRvbk1lc3NhZ2VTdHJpcGUgPSAoXG5cdFx0XHQ8VG9nZ2xlQnV0dG9uXG5cdFx0XHRcdGljb249e1wic2FwLWljb246Ly90aHVtYi1kb3duXCJ9XG5cdFx0XHRcdHRvb2x0aXA9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfRUFTWV9GSUxURVJfVEhVTUJTX0RPV05cIil9XG5cdFx0XHRcdHR5cGU9e1wiVHJhbnNwYXJlbnRcIn1cblx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vblRodW1iRG93blByZXNzZWQoKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0ZW5hYmxlZD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidGh1bWJCdXR0b25FbmFibGVkXCIpfVxuXHRcdFx0XHRwcmVzc2VkPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0aHVtYkRvd25CdXR0b25QcmVzc2VkXCIpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZSh0aHVtYkRvd25CdXR0b25NZXNzYWdlU3RyaXBlLCBcInByZXNzXCIsIFwiZmU0OmVmdDptczp0aHVtYkRvd25cIik7XG5cdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWIuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29udHJvbHNcIikgYXMgUmVzb3VyY2VCdW5kbGU7XG5cdFx0Y29uc3QgYWlOb3RpY2VDb250cm9sID0gdGhpcy5haU5vdGljZSA/IChcblx0XHRcdHRoaXMuYWlOb3RpY2UuY2xvbmUoKVxuXHRcdCkgOiAoXG5cdFx0XHQ8QUlOb3RpY2UgdHlwZT1cIkJ1dHRvblwiPlxuXHRcdFx0XHQ8VkJveD5cblx0XHRcdFx0XHQ8VGV4dCBjbGFzcz1cInNhcEZlQ29udHJvbHNBaVBvcG92ZXJUZXh0MVwiIHRleHQ9e3Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX05PVElDRV9BSV9QT1BPVkVSX1RFWFRfMVwiKX0gLz5cblx0XHRcdFx0XHQ8VGV4dCBjbGFzcz1cInNhcEZlQ29udHJvbHNBaVBvcG92ZXJUZXh0MlwiIHRleHQ9e3Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX05PVElDRV9BSV9QT1BPVkVSX1RFWFRfMlwiKX0gLz5cblx0XHRcdFx0PC9WQm94PlxuXHRcdFx0PC9BSU5vdGljZT5cblx0XHQpO1xuXHRcdGNvbnN0IG91dFZCb3ggPSAoXG5cdFx0XHQ8VkJveD5cblx0XHRcdFx0PEZsZXhCb3ggcmVuZGVyVHlwZT1cIkJhcmVcIj5cblx0XHRcdFx0XHQ8RWFzeUZpbHRlcklucHV0XG5cdFx0XHRcdFx0XHRyZWNvbW1lbmRlZFZhbHVlcz17dGhpcy5yZWNvbW1lbmRlZFZhbHVlc31cblx0XHRcdFx0XHRcdHJlZj17dGhpcy5lYXN5RmlsdGVySW5wdXR9XG5cdFx0XHRcdFx0XHRlbnRlclByZXNzZWQ9e3RoaXMub25FbnRlclByZXNzZWQuYmluZCh0aGlzKX1cblx0XHRcdFx0XHRcdHF1ZXJ5Q2hhbmdlZD17KGUpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5maXJlRXZlbnQoXCJxdWVyeUNoYW5nZWRcIiwgeyBxdWVyeTogZS5nZXRQYXJhbWV0ZXIoXCJxdWVyeVwiKSB9KTtcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRsaXZlQ2hhbmdlPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUudG9rZW5pemVyRWRpdGFibGUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0dGhpcy5maXJlRXZlbnQoXCJsaXZlQ2hhbmdlXCIsIHsgcXVlcnk6IHRoaXMuZ2V0UXVlcnkoKSB9KTtcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0Lz5cblxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGljb249e1wic2FwLWljb246Ly9haVwifVxuXHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlTbWFsbE1hcmdpbkJlZ2luXCJ9XG5cdFx0XHRcdFx0XHRyZWY9eyR0b3BHb0J0bn1cblx0XHRcdFx0XHRcdHRleHQ9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfR09cIil9XG5cdFx0XHRcdFx0XHR0eXBlPXtCdXR0b25UeXBlLkVtcGhhc2l6ZWR9XG5cdFx0XHRcdFx0XHRwcmVzcz17dGhpcy5vbkdvQnV0dG9uUHJlc3MuYmluZCh0aGlzKX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdDxGbGV4Qm94XG5cdFx0XHRcdFx0cmVuZGVyVHlwZT1cIkJhcmVcIlxuXHRcdFx0XHRcdHZpc2libGU9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInNob3dSZXN1bHRcIil9XG5cdFx0XHRcdFx0YWxpZ25JdGVtcz17RmxleEFsaWduSXRlbXMuQ2VudGVyfVxuXHRcdFx0XHRcdHdyYXA9e0ZsZXhXcmFwLldyYXB9XG5cdFx0XHRcdFx0anVzdGlmeUNvbnRlbnQ9e0ZsZXhKdXN0aWZ5Q29udGVudC5TcGFjZUJldHdlZW59XG5cdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlUaW55TWFyZ2luVG9wXCJ9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8RmxleEJveCBjbGFzcz17XCJzYXBGZUNvbnRyb2xzR2FwOHB4XCJ9IHJlbmRlclR5cGU9XCJCYXJlXCIgYWxpZ25JdGVtcz17RmxleEFsaWduSXRlbXMuQ2VudGVyfSB3cmFwPXtGbGV4V3JhcC5XcmFwfT5cblx0XHRcdFx0XHRcdHthaU5vdGljZUNvbnRyb2x9XG5cdFx0XHRcdFx0XHQ8VG9rZW5pemVyXG5cdFx0XHRcdFx0XHRcdGVkaXRhYmxlPXthbmQoYmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidG9rZW5pemVyRWRpdGFibGVcIiksIHRydWUpfVxuXHRcdFx0XHRcdFx0XHRjbGFzcz17XCJzYXBGZUNvbnRyb2xzVG9rZW5pemVyXCJ9XG5cdFx0XHRcdFx0XHRcdHRva2Vucz17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidG9rZW5zXCIpfVxuXHRcdFx0XHRcdFx0XHRyZW5kZXJNb2RlPXtUb2tlbml6ZXJSZW5kZXJNb2RlLkxvb3NlfVxuXHRcdFx0XHRcdFx0XHRyZWY9e3RoaXMudG9rZW5pemVyfVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdHRva2VuczogKGlkeDogbnVtYmVyLCBjdHg6IENvbnRleHQpOiBUb2tlbiA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBvYmplY3QgPSBjdHguZ2V0T2JqZWN0KCkgYXMgVG9rZW5EZWZpbml0aW9uO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PFRva2VuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXt0aGlzLnN0YXRlLnRva2Vucy5rZXl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw9e3RoaXMuc3RhdGUudG9rZW5zLmxhYmVsfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1zPXt0aGlzLnN0YXRlLnRva2Vucy5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1hbmRhdG9yeT17dGhpcy5pc0tleU1hbmRhdG9yeShvYmplY3Qua2V5KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRidXN5PXt0aGlzLnN0YXRlLnRva2Vucy5idXN5fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlbGV0ZT17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgdG9rZW5JbmRleCA9IHRoaXMuc3RhdGUudG9rZW5zLmZpbmRJbmRleCgodG9rZW4pID0+IHRva2VuLmtleSA9PT0gb2JqZWN0LmtleSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBuZXdUb2tlbnMgPSB0aGlzLnN0YXRlLnRva2Vucy5jb25jYXQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5ld1Rva2Vucy5zcGxpY2UodG9rZW5JbmRleCwgMSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnN0YXRlLnRva2VucyA9IG5ld1Rva2Vucztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMudXBkYXRlRmlsdGVySW5wdXQoXCJ0b2tlblVwZGF0ZWRcIik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmZpcmVFdmVudChcInRva2Vuc0NoYW5nZWRCeVVzZXJcIiwgeyB0b2tlbnM6IFsuLi50aGlzLnN0YXRlLnRva2Vuc10gfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdXN0b21EYXRhOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxDdXN0b21EYXRhIGtleT1cIlRva2VuSW5mb1wiIHZhbHVlPXtvYmplY3R9IC8+LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q3VzdG9tRGF0YSBrZXk9XCJwb3BvdmVyXCIgdmFsdWU9e3RoaXMuaW5uZXJDb250cm9sUG9wb3Zlcn0gLz4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxDdXN0b21EYXRhIGtleT1cImVhc3lGaWx0ZXJCYXJDb250YWluZXJcIiB2YWx1ZT17dGhpc30gLz4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxDdXN0b21EYXRhXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PVwiY29kZUxpc3RcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXt0aGlzLmZpbHRlckJhck1ldGFkYXRhPy5maW5kKChkYXRhKSA9PiBkYXRhLm5hbWUgPT09IG9iamVjdC5rZXkpPy5jb2RlTGlzdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L1Rva2VuPlxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHQ8L1Rva2VuaXplcj5cblx0XHRcdFx0XHRcdDxIQm94PlxuXHRcdFx0XHRcdFx0XHR7dGh1bWJVcEJ1dHRvblRva2VuaXplcn0sIHt0aHVtYkRvd25CdXR0b25Ub2tlbml6ZXJ9XG5cdFx0XHRcdFx0XHQ8L0hCb3g+XG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdHRleHQ9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUkVTRVRcIil9XG5cdFx0XHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5yZXNldFN0YXRlKHRydWUsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdC8vUmV0YWluaW5nIHRoZSBmb2N1cyBvbiBwb3BvdmVyIGRvZXNuJ3QgbWFrZSB0aGUgcG9wb3ZlciBjbG9zZSBvbiBldmVyeSBpbnRlcmFjdGlvblxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LiRzZWFyY2hJbnB1dC5mb2N1cygpO1xuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdDwvRmxleEJveD5cblx0XHRcdFx0PFZCb3ggcmVuZGVyVHlwZT1cIkJhcmVcIiBjbGFzcz17XCJzYXBVaVRpbnlNYXJnaW5Ub3Agc2FwRmVDb250cm9sc0dhcDhweFwifT5cblx0XHRcdFx0XHQ8TWVzc2FnZVN0cmlwXG5cdFx0XHRcdFx0XHR0ZXh0PXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJzaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcFRleHRcIil9XG5cdFx0XHRcdFx0XHRzaG93SWNvbj17dHJ1ZX1cblx0XHRcdFx0XHRcdGVuYWJsZUZvcm1hdHRlZFRleHQ9e3RydWV9XG5cdFx0XHRcdFx0XHR2aXNpYmxlPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJzaG93U2luZ2xlVmFsdWVNZXNzYWdlU3RyaXBcIil9XG5cdFx0XHRcdFx0XHRzaG93Q2xvc2VCdXR0b249e3RydWV9XG5cdFx0XHRcdFx0XHRjbG9zZT17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmNsZWFyTWVzc2FnZVN0cmlwRm9yU2luZ2xlVmFsdWUoKTtcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0PjwvTWVzc2FnZVN0cmlwPlxuXHRcdFx0XHRcdDxGbGV4Qm94IHJlbmRlclR5cGU9XCJCYXJlXCIgY2xhc3M9e1wic2FwRmVDb250cm9sc0dhcDhweFwifT5cblx0XHRcdFx0XHRcdDxNZXNzYWdlU3RyaXBcblx0XHRcdFx0XHRcdFx0dHlwZT17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwibWVzc2FnZVN0cmlwVHlwZVwiKX1cblx0XHRcdFx0XHRcdFx0dGV4dD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwibWVzc2FnZVN0cmlwVGV4dFwiKX1cblx0XHRcdFx0XHRcdFx0c2hvd0ljb249e3RydWV9XG5cdFx0XHRcdFx0XHRcdGVuYWJsZUZvcm1hdHRlZFRleHQ9e3RydWV9XG5cdFx0XHRcdFx0XHRcdHNob3dDbG9zZUJ1dHRvbj17dHJ1ZX1cblx0XHRcdFx0XHRcdFx0Y2xvc2U9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmNsZWFyTWVzc2FnZVN0cmlwKCk7XG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdHZpc2libGU9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInNob3dNZXNzYWdlU3RyaXBcIil9XG5cdFx0XHRcdFx0XHQ+PC9NZXNzYWdlU3RyaXA+XG5cdFx0XHRcdFx0XHQ8SEJveCB2aXNpYmxlPXthbmQoYmluZFN0YXRlKHRoaXMuc3RhdGUsIFwic2hvd01lc3NhZ2VTdHJpcFwiKSwgbm90KGJpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInNob3dSZXN1bHRcIikpKX0+XG5cdFx0XHRcdFx0XHRcdHt0aHVtYlVwQnV0dG9uTWVzc2FnZVN0cmlwZX0sIHt0aHVtYkRvd25CdXR0b25NZXNzYWdlU3RyaXBlfVxuXHRcdFx0XHRcdFx0PC9IQm94PlxuXHRcdFx0XHRcdDwvRmxleEJveD5cblx0XHRcdFx0PC9WQm94PlxuXHRcdFx0PC9WQm94PlxuXHRcdCkgYXMgVkJveDtcblx0XHRGRVNSSGVscGVyLnNldFNlbWFudGljU3RlcG5hbWUoJHRvcEdvQnRuLmN1cnJlbnQhLCBcInByZXNzXCIsIFwiZmU6YWk6c2VhcmNoXCIpO1xuXHRcdGlmICh0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50KSB7XG5cdFx0XHRGRVNSSGVscGVyLnNldFNlbWFudGljU3RlcG5hbWUodGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudCwgXCJlbnRlclByZXNzZWRcIiwgXCJmZTphaTpzZWFyY2hcIik7XG5cdFx0fVxuXHRcdHJldHVybiBvdXRWQm94O1xuXHR9XG5cblx0YXN5bmMgb25Hb0J1dHRvblByZXNzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRoaXMuc3RhdGUudG9rZW5pemVyRWRpdGFibGUgPSB0cnVlO1xuXHRcdGxldCBjdXJyZW50SW5wdXRWYWx1ZSA9IHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LmdldFZhbHVlKCk7XG5cdFx0Y29uc3QgY3VycmVudElucHV0UGxhY2Vob2xkZXIgPSB0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5nZXRQbGFjZWhvbGRlcigpO1xuXG5cdFx0aWYgKGN1cnJlbnRJbnB1dFZhbHVlID09PSBcIlwiICYmIGN1cnJlbnRJbnB1dFBsYWNlaG9sZGVyICE9PSB0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BMQUNFSE9MREVSXCIpKSB7XG5cdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5zZXRWYWx1ZShjdXJyZW50SW5wdXRQbGFjZWhvbGRlciB8fCBcIlwiKTtcblx0XHRcdGN1cnJlbnRJbnB1dFZhbHVlID0gY3VycmVudElucHV0UGxhY2Vob2xkZXI7XG5cdFx0fVxuXHRcdGF3YWl0IHRoaXMub25Hb1ByZXNzKGN1cnJlbnRJbnB1dFZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNldHMgdGhlIHN0YXRlIG9mIHRoZSBFYXN5RmlsdGVyQmFyQ29udGFpbmVyIHRvIGl0cyBpbml0aWFsIGNvbmZpZ3VyYXRpb24uXG5cdCAqXG5cdCAqIFRoaXMgbWV0aG9kIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgYWN0aW9uczpcblx0ICogLSBDbGVhcnMgYWxsIG5vbi1tYW5kYXRvcnkgdG9rZW5zIGFuZCByZXNldHMgbWFuZGF0b3J5IHRva2VucyB0byB0aGVpciBkZWZhdWx0IHZhbHVlc1xuXHQgKiAtIFJlc2V0cyB0aGUgaW5wdXQgZmllbGQgdG8gaXRzIGRlZmF1bHQgcGxhY2Vob2xkZXIgdGV4dFxuXHQgKiAtIENsZWFycyBhbGwgZXJyb3IgdmFsdWUgc3RhdGVzIGFuZCBtZXNzYWdlcyBmcm9tIHRva2Vuc1xuXHQgKiAtIENsZWFycyBhbnkgZGlzcGxheWVkIG1lc3NhZ2Ugc3RyaXBzXG5cdCAqIC0gT3B0aW9uYWxseSBmaXJlcyB0aGUgY2xlYXJGaWx0ZXJzIGV2ZW50IHRvIG5vdGlmeSBjb25zdW1lcnNcblx0ICogQHBhcmFtIGNsZWFyQWxsRmlsdGVycyBJZiB0cnVlLCBmaXJlcyB0aGUgY2xlYXJGaWx0ZXJzIGV2ZW50IHRvIG5vdGlmeSBjb25zdW1lcnMgdGhhdCBmaWx0ZXJzIHNob3VsZCBiZSBjbGVhcmVkIGVsc2UganVzdCByZXNldHMgdGhlIHRva2VucyB3aXRob3V0IGZpcmluZyB0aGUgZXZlbnRcblx0ICogQHBhcmFtIGlzUmVzZXR0aW5nVG9EZWZhdWx0VG9rZW5zIElmIHRydWUsIGluZGljYXRlcyB0aGF0IHRoZSByZXNldEJ1dHRvbiBpcyByZXN0b3JpbmcgdG9rZW5zIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzXG5cdCAqL1xuXG5cdHJlc2V0U3RhdGUoY2xlYXJBbGxGaWx0ZXJzID0gdHJ1ZSwgaXNSZXNldHRpbmdUb0RlZmF1bHRUb2tlbnMgPSBmYWxzZSk6IHZvaWQge1xuXHRcdGlmIChjbGVhckFsbEZpbHRlcnMpIHtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KFwiY2xlYXJGaWx0ZXJzXCIpO1xuXHRcdFx0dGhpcy5zdGF0ZS5ncm91cExldmVscyA9IFtdO1xuXHRcdFx0dGhpcy5pc1Jlc2V0dGluZ1RvRGVmYXVsdFRva2VucyA9IGlzUmVzZXR0aW5nVG9EZWZhdWx0VG9rZW5zO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNob3VsZFRva2VuQ2hhbmdlRXZlbnRGaXJlZCA9IGZhbHNlO1xuXHRcdH1cblx0XHR0aGlzLnN0YXRlLnNvcnRlcnMgPSBbXTtcblx0XHR0aGlzLnN0YXRlLnRva2VucyA9IHRoaXMuZ2V0RGVmYXVsdFRva2VucygpO1xuXHRcdHRoaXMudXBkYXRlRmlsdGVySW5wdXQoXCJ0b2tlblJlc2V0XCIpO1xuXHRcdHRoaXMuc3RhdGUudG9rZW5pemVyRWRpdGFibGUgPSB0cnVlO1xuXHRcdHRoaXMuaXNNYW5kYXRvcnlDaGVja1JlcXVpcmVkID0gdHJ1ZTtcblx0XHQvL1NldCB0aGUgVmFsdWUgU3RhdGVzIG9mIGFsbCB0aGUgVG9rZW5zIGJhY2sgdG8gTm9uZVxuXHRcdHRoaXMudG9rZW5pemVyLmN1cnJlbnQ/LmdldFRva2VucygpLmZvckVhY2goKHRva2VuKSA9PiB0b2tlbi5zZXRQcm9wZXJ0eShcInZhbHVlU3RhdGVcIiwgVmFsdWVTdGF0ZS5Ob25lKSk7XG5cdFx0dGhpcy50b2tlbml6ZXIuY3VycmVudD8uZ2V0VG9rZW5zKCkuZm9yRWFjaCgodG9rZW4pID0+IHRva2VuLnNldFByb3BlcnR5KFwidmFsdWVTdGF0ZVRleHRcIiwgbnVsbCkpO1xuXHRcdHRoaXMuY2xlYXJNZXNzYWdlU3RyaXAoKTsgLy9jbGVhciB0aGUgbWVzc2FnZSBzdHJpcCBmb3IgdmFsaWRhdGVkIGZpbHRlcnNcblx0XHQvLyBDbGVhciBxdWVyeSBzdWNjZXNzIHN0YXR1c1xuXHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LmNsZWFyUXVlcnlTdGF0dXMoKTtcblx0fVxuXG5cdGNsZWFyRmlsdGVyc0FuZFRva2VucygpOiB2b2lkIHtcblx0XHR0aGlzLmZpcmVFdmVudChcImNsZWFyRmlsdGVyc1wiKTtcblx0XHR0aGlzLnNob3VsZFRva2VuQ2hhbmdlRXZlbnRGaXJlZCA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUudG9rZW5zID0gW107XG5cdH1cblxuXHQvL1RoZSBiZWxvdyBjb2RlIHVwZGF0ZXMgdGhlIGV4aXN0aW5nIHN0YXRlIGJ5IGZldGNoaW5nIHRoZSBrZXkgYW5kIHNlbGVjdGVkVmFsdWVzXG5cdHVwZGF0ZVRva2VuQXJyYXkoXG5cdFx0Y2hhbmdlVHlwZTogVG9rZW5TZXR0ZXJzLFxuXHRcdG5ld1Rva2VuU3BlY2lmaWNWYWx1ZXM6IFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10gfCBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSxcblx0XHR0b2tlbktleTogc3RyaW5nXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IG5ld1Rva2VucyA9IHRoaXMuc3RhdGUudG9rZW5zLm1hcCgodG9rZW4pID0+ICh7IC4uLnRva2VuLCBrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzOiBbLi4udG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlc10gfSkpO1xuXHRcdGNvbnN0IHRva2VuSW5kZXggPSBuZXdUb2tlbnMuZmluZEluZGV4KCh0KSA9PiB0LmtleSA9PT0gdG9rZW5LZXkpO1xuXHRcdGNvbnN0IHRva2VuID0gbmV3VG9rZW5zW3Rva2VuSW5kZXhdO1xuXHRcdGlmICh0b2tlbkluZGV4ICE9IC0xKSB7XG5cdFx0XHRzd2l0Y2ggKGNoYW5nZVR5cGUpIHtcblx0XHRcdFx0Y2FzZSBcInNldFNlbGVjdGVkVmFsdWVzXCI6XG5cdFx0XHRcdFx0dGhpcy5zZXRTZWxlY3RlZFZhbHVlcyh0b2tlbiBhcyBUb2tlbkRlZmluaXRpb24sIG5ld1Rva2VuU3BlY2lmaWNWYWx1ZXMsIHRva2VuSW5kZXgsIG5ld1Rva2VucyBhcyBUb2tlbkRlZmluaXRpb25bXSk7XG5cdFx0XHRcdFx0dG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyA9IG5ld1Rva2VuU3BlY2lmaWNWYWx1ZXM7XG5cdFx0XHRcdFx0Ly9SZW1vdmUgdGhlIHRva2VuIGVudGlyZWx5XG5cdFx0XHRcdFx0aWYgKCF0aGlzLmlzS2V5TWFuZGF0b3J5KHRva2VuLmtleSkgJiYgdG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRcdG5ld1Rva2Vucy5zcGxpY2UodG9rZW5JbmRleCwgMSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdExvZy5lcnJvcihcIlNwZWNpZnlpbmcgYSBzZXR0ZXIgdGhhdCBpcyBvdXQgb2YgdGhlIGJvdW5kYXJ5XCIpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Ly8gVXBkYXRlIHRoZSBzdGF0ZSBieSBhc3NpZ25pbmcgdGhlIG5ldyB0b2tlbnMgYXJyYXlcblx0XHRcdHRoaXMuc3RhdGUudG9rZW5zID0gbmV3VG9rZW5zIGFzIFRva2VuRGVmaW5pdGlvbltdO1xuXHRcdFx0dGhpcy5zdGF0ZS5zaG93UmVzdWx0ID0gbmV3VG9rZW5zLmxlbmd0aCA+IDA7XG5cdFx0XHR0aGlzLnVwZGF0ZUZpbHRlcklucHV0KFwidG9rZW5VcGRhdGVkXCIpO1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoXCJ0b2tlbnNDaGFuZ2VkQnlVc2VyXCIsIHsgdG9rZW5zOiBbLi4udGhpcy5zdGF0ZS50b2tlbnNdIH0pO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBjbG9zZUlubmVyQ29udHJvbFBvcG92ZXIoKTogdm9pZCB7XG5cdFx0dGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyPy5jbG9zZSgpO1xuXHR9XG5cblx0cHJpdmF0ZSBzZXRTZWxlY3RlZFZhbHVlcyhcblx0XHR0b2tlbjogVG9rZW5EZWZpbml0aW9uLFxuXHRcdG5ld1Rva2VuU3BlY2lmaWNWYWx1ZXM6IFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10gfCBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSxcblx0XHR0b2tlbkluZGV4OiBudW1iZXIsXG5cdFx0bmV3VG9rZW5zOiBUb2tlbkRlZmluaXRpb25bXVxuXHQpOiB2b2lkIHtcblx0XHR0b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzID0gbmV3VG9rZW5TcGVjaWZpY1ZhbHVlcztcblx0XHRpZiAoIXRoaXMuaXNLZXlNYW5kYXRvcnkodG9rZW4ua2V5KSAmJiB0b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0bmV3VG9rZW5zLnNwbGljZSh0b2tlbkluZGV4LCAxKTtcblx0XHR9XG5cdH1cblxuXHRpc0tleU1hbmRhdG9yeShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdGlmICghdGhpcy5tYW5kYXRvcnlLZXlNYXApIHtcblx0XHRcdHRoaXMubWFuZGF0b3J5S2V5TWFwID0ge307XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLm1hbmRhdG9yeUtleU1hcFtrZXldID8gdHJ1ZSA6IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IHN0YXRlIGhhcyBzb3J0IGRlZmluaXRpb25zIGZyb20gdGhlIGVhc3kgZmlsdGVyLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBjdXJyZW50IHN0YXRlIGNvbnRhaW5zIG9uZSBvciBtb3JlIHNvcnRlcnMuXG5cdCAqL1xuXHRwcml2YXRlIGhhc1NvcnRlcnMoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuc3RhdGUuc29ydGVycy5sZW5ndGggPiAwO1xuXHR9XG5cblx0cmVtb3ZlTm9uTWFuZGF0b3J5VG9rZW5zKCk6IHRoaXMge1xuXHRcdGNvbnN0IG5ld1Rva2VuOiBUb2tlbkRlZmluaXRpb25bXSA9IHRoaXMuc3RhdGUudG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHtcblx0XHRcdHJldHVybiB0aGlzLmlzS2V5TWFuZGF0b3J5KHRva2VuLmtleSk7XG5cdFx0fSk7XG5cdFx0dGhpcy5zdGF0ZS50b2tlbnMgPSBuZXdUb2tlbjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGhhc0dyb3VwTGV2ZWxzKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLnN0YXRlLmdyb3VwTGV2ZWxzLmxlbmd0aCA+IDA7XG5cdH1cblxuXHQvKipcblx0ICogTm90aWZpZXMgdGhlIGNvbnRhaW5lciB0aGF0IGFuIGV4dGVybmFsIHRhYmxlIHN0YXRlIGNoYW5nZSAoc29ydCBvciBncm91cCkgaGFzIGJlZW4gZGV0ZWN0ZWQuXG5cdCAqIElmIHRoZSBjb250YWluZXIgY3VycmVudGx5IGhhcyBhY3RpdmUgc29ydGVycyBvciBncm91cCBsZXZlbHMsIHRoZSBmaWx0ZXIgaW5wdXQgaXMgbWFya2VkIGRpcnR5XG5cdCAqIGJlY2F1c2UgdGhlIGV4dGVybmFsIGNoYW5nZSBtYWtlcyB0aGUgZWFzeSBmaWx0ZXIgcmVzdWx0IGluY29uc2lzdGVudC5cblx0ICovXG5cdG5vdGlmeUV4dGVybmFsVGFibGVTdGF0ZUNoYW5nZSgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5oYXNTb3J0ZXJzKCkgfHwgdGhpcy5oYXNHcm91cExldmVscygpKSB7XG5cdFx0XHR0aGlzLnVwZGF0ZUZpbHRlcklucHV0KFwidG9rZW5VcGRhdGVkXCIpO1xuXHRcdH1cblx0fVxuXG5cdGdldFF1ZXJ5KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LmdldFZhbHVlKCkgPz8gXCJcIjtcblx0fVxuXG5cdGdldFRva2VucygpOiBUb2tlbkRlZmluaXRpb25bXSB7XG5cdFx0cmV0dXJuIFsuLi50aGlzLnN0YXRlLnRva2Vuc107XG5cdH1cblxuXHRzZXRRdWVyeShxdWVyeTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uc2V0VmFsdWUocXVlcnkpO1xuXHR9XG5cblx0dXBkYXRlRmlsdGVySW5wdXQodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGN1cnJWYWx1ZTogc3RyaW5nID0gdGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uZ2V0VmFsdWUoKSB8fCBcIlwiO1xuXHRcdGlmICh2YWx1ZSA9PT0gXCJ0b2tlblVwZGF0ZWRcIiAmJiBjdXJyVmFsdWUgIT09IFwiXCIpIHtcblx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LnNldFZhbHVlKFwiXCIpO1xuXHRcdFx0dGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uc2V0UGxhY2Vob2xkZXIoY3VyclZhbHVlKTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlID09PSBcInRva2VuUmVzZXRcIikge1xuXHRcdFx0dGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uc2V0VmFsdWUoXCJcIik7XG5cdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5zZXRQbGFjZWhvbGRlcih0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BMQUNFSE9MREVSXCIpKTtcblx0XHR9XG5cdH1cblxuXHRnZXRUb2tlbnNJbkluaXRpYWxTdGF0ZSgpOiBUb2tlbkRlZmluaXRpb25bXSB7XG5cdFx0Y29uc3QgbmV3VG9rZW5zID0gdGhpcy5zdGF0ZS50b2tlbnMubWFwKCh0b2tlbikgPT4gKHsgLi4udG9rZW4sIGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IFsuLi50b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzXSB9KSk7XG5cdFx0Y29uc3QgbWFuZGF0b3J5VG9rZW5zID0gbmV3VG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHtcblx0XHRcdGlmICh0aGlzLmlzS2V5TWFuZGF0b3J5KHRva2VuLmtleSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG1hbmRhdG9yeVRva2Vucy5tYXAoKHRva2VuKSA9PiAoeyAuLi50b2tlbiwga2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogW10gfSkpO1xuXHR9XG5cblx0Z2V0VW5TZXRNYW5kYXRvcnlUb2tlbnNJbkN1cnJlbnRTdGF0ZSgpOiBUb2tlbkRlZmluaXRpb25bXSB7XG5cdFx0cmV0dXJuIHRoaXMuc3RhdGUudG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHtcblx0XHRcdGNvbnN0IGlzS2V5TWFuZGF0b3J5ID0gdGhpcy5pc0tleU1hbmRhdG9yeSh0b2tlbi5rZXkpO1xuXHRcdFx0aWYgKGlzS2V5TWFuZGF0b3J5KSB7XG5cdFx0XHRcdHJldHVybiB0b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzLmxlbmd0aCA9PT0gMDtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGdldEFjdHVhbFRva2Vuc0Zyb21TdGF0ZSh0b2tlbnM6IFRva2VuRGVmaW5pdGlvbltdKTogRWFzeUZpbHRlclRva2VuW10gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHJlcXVpcmVkS2V5cyA9IHRva2Vucy5tYXAoKHRva2VuKSA9PiB0b2tlbi5rZXkpO1xuXHRcdHJldHVybiB0aGlzLnRva2VuaXplci5jdXJyZW50Py5nZXRUb2tlbnMoKS5maWx0ZXIoKHRva2VuKSA9PiByZXF1aXJlZEtleXMuaW5jbHVkZXModG9rZW4uZ2V0S2V5KCkpKSBhc1xuXHRcdFx0fCBFYXN5RmlsdGVyVG9rZW5bXVxuXHRcdFx0fCB1bmRlZmluZWQ7XG5cdH1cblxuXHRzdGF0aWMgcmVuZGVyKHJtOiBSZW5kZXJNYW5hZ2VyLCBjb250cm9sOiBFYXN5RmlsdGVyQmFyQ29udGFpbmVyKTogdm9pZCB7XG5cdFx0cmV0dXJuIGpzeC5yZW5kZXJVc2luZ1JlbmRlck1hbmFnZXIocm0sIGNvbnRyb2wsICgpID0+IHtcblx0XHRcdHJldHVybiA8c3BhbiByZWY9e2NvbnRyb2x9Pntjb250cm9sLmdldEFnZ3JlZ2F0aW9uKFwiY29udGVudFwiKX08L3NwYW4+O1xuXHRcdH0pO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBeURBO0VBQ0E7RUF3QkE7RUF3REE7RUFxQkE7QUFDQTtBQUNBO0VBRkEsSUFJcUJBLHNCQUFzQixJQUFBQyxJQUFBLEdBRDFDQyxjQUFjLENBQUMsbURBQW1ELENBQUMsRUFB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
1161
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFYXN5RmlsdGVyQmFyQ29udGFpbmVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJwcm9wZXJ0eSIsInR5cGUiLCJfZGVjMyIsImRlZmF1bHRWYWx1ZSIsIl9kZWM0IiwiX2RlYzUiLCJfZGVjNiIsIl9kZWM3IiwiX2RlYzgiLCJfZGVjOSIsImRlZmluZVJlZmVyZW5jZSIsIl9kZWMwIiwiX2RlYzEiLCJhZ2dyZWdhdGlvbiIsIl9kZWMxMCIsIl9kZWMxMSIsImV2ZW50IiwiX2RlYzEyIiwiX2RlYzEzIiwiX2RlYzE0IiwiX2RlYzE1IiwiX2RlYzE2IiwiX2RlYzE3IiwiX2RlYzE4IiwiX2RlYzE5IiwiX2RlYzIwIiwiX2RlYzIxIiwiZGVmaW5lU3RhdGUiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0NvbnRyb2wiLCJwcm9wZXJ0aWVzIiwib3RoZXJzIiwiX3RoaXMiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMCIsIl9kZXNjcmlwdG9yMSIsIl9kZXNjcmlwdG9yMTAiLCJfZGVzY3JpcHRvcjExIiwiX2Rlc2NyaXB0b3IxMiIsIl9kZXNjcmlwdG9yMTMiLCJfZGVzY3JpcHRvcjE0IiwiX2Rlc2NyaXB0b3IxNSIsIl9kZXNjcmlwdG9yMTYiLCJfZGVzY3JpcHRvcjE3IiwiX2Rlc2NyaXB0b3IxOCIsIl9kZXNjcmlwdG9yMTkiLCJfZGVzY3JpcHRvcjIwIiwic2hvdWxkVG9rZW5DaGFuZ2VFdmVudEZpcmVkIiwiaXNSZXNldHRpbmdUb0RlZmF1bHRUb2tlbnMiLCJpbnB1dEZpZWxkUmVhZHkiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlc29sdmVDb250ZW50UmVhZHkiLCJzaG91bGRNZXNzYWdlU3RyaXBSZW1vdmUiLCJhcmlhTGFiZWxBcHBsaWVkIiwic3VwcG9ydHNTb3J0aW5nIiwic3VwcG9ydHNHcm91cGluZyIsImluaXRpYWxpemUiLCJpbnZpc2libGVNZXNzYWdlIiwiSW52aXNpYmxlTWVzc2FnZSIsImdldEluc3RhbmNlIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsInNldEVhc3lGaWx0ZXJMaWIiLCJlYXN5RmlsdGVyTGliIiwic2V0UHJvcGVydHkiLCJlYXN5ZmlsdGVyIiwiX191aTVfcmVxdWlyZV9hc3luYyIsInNldEFwcElkIiwiYXBwSWQiLCJlYXN5RmlsdGVySW5wdXQiLCJjdXJyZW50Iiwic2V0RmlsdGVyQmFyTWV0YWRhdGEiLCJmaWx0ZXJCYXJNZXRhZGF0YSIsInRva2VucyIsImdldERlZmF1bHRUb2tlbnMiLCJpbm5lckNvbnRyb2xQb3BvdmVyIiwiY3JlYXRlUG9wb3ZlckZvcklubmVyQ29udHJvbHMiLCJhZGREZXBlbmRlbnQiLCJzdGF0ZSIsInNob3dSZXN1bHQiLCJsZW5ndGgiLCJpc01hbmRhdG9yeUNoZWNrUmVxdWlyZWQiLCJpbml0IiwicmVzb3VyY2VCdW5kbGUiLCJMaWIiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsImNvbnRlbnQiLCJjcmVhdGVDb250ZW50IiwibWFuZGF0b3J5S2V5TWFwIiwiZm9yRWFjaCIsImRhdGEiLCJpc1JlcXVpcmVkIiwicmVxdWlyZWQiLCJuYW1lIiwicHVzaCIsImtleSIsImxhYmVsIiwia2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyIsImJ1c3kiLCJidWlsZElucHV0QXJpYUxhYmVsIiwibWFuZGF0b3J5RmllbGRzIiwiZmlsdGVyIiwiZiIsImZpZWxkTGFiZWxzIiwibWFwIiwiam9pbiIsImdldFRleHQiLCJvbkVudGVyUHJlc3NlZCIsImUiLCJvbkdvUHJlc3MiLCJnZXRQYXJhbWV0ZXIiLCJjaGVja0lmQWxsTWFuZGF0b3J5VG9rZW5zRmlsbGVkIiwidG9rZW5zSW5TdGF0ZSIsImdldFVuU2V0TWFuZGF0b3J5VG9rZW5zSW5DdXJyZW50U3RhdGUiLCJnZXRBY3R1YWxUb2tlbnNGcm9tU3RhdGUiLCJ0b2tlbiIsIlZhbHVlU3RhdGUiLCJFcnJvciIsIm9wZW5WYWx1ZVN0YXRlTWVzc2FnZSIsImNsb3NlQWxsTWFuZGF0b3J5VmFsdWVTdGF0ZU1lc3NhZ2VzIiwiZWFzeVRva2VucyIsInRva2VuaXplciIsImdldFRva2VucyIsImNsb3NlVmFsdWVTdGF0ZU1lc3NhZ2UiLCJtYWdpY1F1ZXJ5IiwicmVzZXRTdGF0ZSIsInRva2VuaXplckVkaXRhYmxlIiwiZmlyZUV2ZW50IiwiZWFzeUZpbHRlck1ldGFkYXRhIiwidmVyc2lvbiIsImVhc3lGaWx0ZXJWZXJzaW9uIiwiZW50aXR5U2V0IiwiY29udGV4dFBhdGgiLCJmaWVsZHMiLCJlYXN5RmlsdGVyUmVzdWx0IiwiZWFzeUZpbHRlciIsInN1Y2Nlc3MiLCJpc0hpc3RvcnlFbmFibGVkIiwiYWRkUmVjZW50UXVlcnkiLCJzZXRRdWVyeVN1Y2Nlc3MiLCJoYW5kbGVWMVN1Y2Nlc3MiLCJzZXRRdWVyeUZhaWx1cmUiLCJyZW1vdmVOb25NYW5kYXRvcnlUb2tlbnMiLCJzZXRNZXNzYWdlU3RyaXAiLCJtZXNzYWdlIiwiYW5ub3VuY2UiLCJJbnZpc2libGVNZXNzYWdlTW9kZSIsIkFzc2VydGl2ZSIsIm1lc3NhZ2VTdHJpcFR5cGUiLCJNZXNzYWdlVHlwZSIsIldhcm5pbmciLCJncm91cExldmVscyIsIkxvZyIsImVycm9yIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5IiwiY2xlYXJNZXNzYWdlU3RyaXAiLCJFYXN5RmlsdGVyVXRpbHMiLCJmb3JtYXREYXRhIiwiYmluZCIsImFsbFZhbHVlSGVscFRva2VucyIsInJlc3VsdCIsInJlcXVpcmVkVmFsdWVIZWxwVG9rZW5zIiwidmFsdWVIZWxwVG9rZW4iLCJmaW5kIiwibGxtUmVzdWx0IiwiZGF0YUZldGNoZXIiLCJ1cGRhdGVkVG9rZW5zIiwia2V5U3BlY2lmaWNWYWx1ZSIsImlkeCIsIm9wZXJhdG9yIiwiRmlsdGVyT3BlcmF0b3IiLCJCVCIsIk5CIiwic2VsZWN0ZWRWYWx1ZXMiLCJ2YWx1ZSIsImRlc2NyaXB0aW9uIiwic3ViSW5keCIsInZlcmlmeVNpbmdsZVNlbGVjdFRva2VuVmFsdWVzIiwic29ydGVycyIsInZhbGlkYXRlU29ydEV4cHJlc3Npb25zIiwidGh1bWJCdXR0b25FbmFibGVkIiwidGh1bWJEb3duQnV0dG9uUHJlc3NlZCIsInRodW1iVXBCdXR0b25QcmVzc2VkIiwiYXBwbHlHcm91cExldmVscyIsInNob3dVbnN1cHBvcnRlZENhcGFiaWxpdGllc1dhcm5pbmciLCJoYXNTb3J0ZXJzRnJvbUxMTSIsImhhc0dyb3VwTGV2ZWxzRnJvbUxMTSIsInNvcnRpbmdVbnN1cHBvcnRlZCIsImdyb3VwaW5nVW5zdXBwb3J0ZWQiLCJhcHBlbmRNZXNzYWdlU3RyaXAiLCJzZXRQZXJzb25hbGl6YXRpb25TdXBwb3J0Iiwic29ydGluZyIsImdyb3VwaW5nIiwibWV0YWRhdGEiLCJyZXNvbHZlRmllbGQiLCJncm91cERlZiIsInByb3BlcnR5TmFtZSIsInJlc29sdmVQcm9wZXJ0eU5hbWUiLCJmaWVsZCIsImVuZHNXaXRoIiwid2FybmluZyIsImVycm9ySGFuZGxlciIsIkVycm9yTWVzc2FnZUhhbmRsZXIiLCJpc0dyb3VwYWJsZSIsImlzR3JvdXBhYmxlUHJvcGVydHkiLCJoYXNFcnJvcnMiLCJlbmNvZGVYTUwiLCJnZXRFcnJvck1lc3NhZ2UiLCJmaXJzdEdyb3VwYWJsZURlZiIsImZpcnN0R3JvdXBhYmxlTGFiZWwiLCJzb3J0RXhwcmVzc2lvbnMiLCJub25Tb3J0YWJsZUZpZWxkcyIsInZhbGlkU29ydGVycyIsInNvcnRFeHByZXNzaW9uIiwiZmllbGRNZXRhZGF0YSIsImZpZWxkTmFtZSIsInNwbGl0IiwicG9wIiwic29ydGFibGUiLCJkZXNjZW5kaW5nIiwic2luZ2xlU2VsZWN0VG9rZW5MYWJlbHMiLCJzcGxpY2UiLCJzaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcFRleHQiLCJzaG93U2luZ2xlVmFsdWVNZXNzYWdlU3RyaXAiLCJzaG93TWVzc2FnZVN0cmlwIiwibWVzc2FnZVN0cmlwVGV4dCIsImNsZWFyTWVzc2FnZVN0cmlwRm9yU2luZ2xlVmFsdWUiLCJ0ZXh0Iiwic2V0TWVzc2FnZVN0cmlwV2l0aFR5cGUiLCJjb21iaW5lZCIsIl9qc3giLCJQb3BvdmVyIiwiaWQiLCJnZXRJZCIsInNob3dBcnJvdyIsInNob3dIZWFkZXIiLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnRUeXBlIiwiQm90dG9tIiwiY2xhc3MiLCJjaGlsZHJlbiIsImZvb3RlciIsImdldFRvb2xiYXIiLCJ0b29sYmFyIiwib2tCdXR0b24iLCJnZXRPa0J1dHRvbiIsInNob3dBbGxCdXR0b24iLCJnZXRTaG93QWxsQnV0dG9uIiwiT3ZlcmZsb3dUb29sYmFyIiwiX2pzeHMiLCJfRnJhZ21lbnQiLCJUb29sYmFyU3BhY2VyIiwiQnV0dG9uIiwiQnV0dG9uVHlwZSIsIkVtcGhhc2l6ZWQiLCJmb3JtYXRUb2tlbnMiLCJ2YWwiLCJkZWVwQ2xvbmUiLCJvblN0YXRlQ2hhbmdlIiwiY2hhbmdlZFByb3BzIiwiaW5jbHVkZXMiLCJyZXNldCIsIm9uc2FwZm9jdXNsZWF2ZSIsIm9uVGh1bWJVcFByZXNzZWQiLCJ0cmlnZ2VyUFhJbnRlZ3JhdGlvbiIsIm9uVGh1bWJQcmVzc2VkIiwib25UaHVtYkRvd25QcmVzc2VkIiwiTWVzc2FnZVRvYXN0Iiwic2hvdyIsIiR0b3BHb0J0biIsImNyZWF0ZVJlZmVyZW5jZSIsInRodW1iVXBCdXR0b25Ub2tlbml6ZXIiLCJUb2dnbGVCdXR0b24iLCJpY29uIiwidG9vbHRpcCIsInByZXNzIiwiZW5hYmxlZCIsImJpbmRTdGF0ZSIsInByZXNzZWQiLCJGRVNSSGVscGVyIiwic2V0U2VtYW50aWNTdGVwbmFtZSIsInRodW1iRG93bkJ1dHRvblRva2VuaXplciIsInRodW1iVXBCdXR0b25NZXNzYWdlU3RyaXBlIiwidGh1bWJEb3duQnV0dG9uTWVzc2FnZVN0cmlwZSIsImFpTm90aWNlQ29udHJvbCIsImFpTm90aWNlIiwiY2xvbmUiLCJBSU5vdGljZSIsIlZCb3giLCJUZXh0Iiwib3V0VkJveCIsIkZsZXhCb3giLCJyZW5kZXJUeXBlIiwiRWFzeUZpbHRlcklucHV0IiwicmVjb21tZW5kZWRWYWx1ZXMiLCJyZWYiLCJlbnRlclByZXNzZWQiLCJxdWVyeUNoYW5nZWQiLCJxdWVyeSIsImxpdmVDaGFuZ2UiLCJnZXRRdWVyeSIsIm9uR29CdXR0b25QcmVzcyIsInZpc2libGUiLCJhbGlnbkl0ZW1zIiwiRmxleEFsaWduSXRlbXMiLCJDZW50ZXIiLCJ3cmFwIiwiRmxleFdyYXAiLCJXcmFwIiwianVzdGlmeUNvbnRlbnQiLCJGbGV4SnVzdGlmeUNvbnRlbnQiLCJTcGFjZUJldHdlZW4iLCJUb2tlbml6ZXIiLCJlZGl0YWJsZSIsImFuZCIsInJlbmRlck1vZGUiLCJUb2tlbml6ZXJSZW5kZXJNb2RlIiwiTG9vc2UiLCJjdHgiLCJvYmplY3QiLCJnZXRPYmplY3QiLCJUb2tlbiIsIml0ZW1zIiwibWFuZGF0b3J5IiwiaXNLZXlNYW5kYXRvcnkiLCJkZWxldGUiLCJ0b2tlbkluZGV4IiwiZmluZEluZGV4IiwibmV3VG9rZW5zIiwiY29uY2F0IiwidXBkYXRlRmlsdGVySW5wdXQiLCJjdXN0b21EYXRhIiwiQ3VzdG9tRGF0YSIsImNvZGVMaXN0IiwiSEJveCIsIlRyYW5zcGFyZW50IiwiJHNlYXJjaElucHV0IiwiZm9jdXMiLCJNZXNzYWdlU3RyaXAiLCJzaG93SWNvbiIsImVuYWJsZUZvcm1hdHRlZFRleHQiLCJzaG93Q2xvc2VCdXR0b24iLCJjbG9zZSIsIm5vdCIsImN1cnJlbnRJbnB1dFZhbHVlIiwiZ2V0VmFsdWUiLCJjdXJyZW50SW5wdXRQbGFjZWhvbGRlciIsImdldFBsYWNlaG9sZGVyIiwic2V0VmFsdWUiLCJjbGVhckFsbEZpbHRlcnMiLCJOb25lIiwiY2xlYXJRdWVyeVN0YXR1cyIsImNsZWFyRmlsdGVyc0FuZFRva2VucyIsInVwZGF0ZVRva2VuQXJyYXkiLCJjaGFuZ2VUeXBlIiwibmV3VG9rZW5TcGVjaWZpY1ZhbHVlcyIsInRva2VuS2V5IiwidCIsInNldFNlbGVjdGVkVmFsdWVzIiwiY2xvc2VJbm5lckNvbnRyb2xQb3BvdmVyIiwiaGFzU29ydGVycyIsIm5ld1Rva2VuIiwiaGFzR3JvdXBMZXZlbHMiLCJub3RpZnlFeHRlcm5hbFRhYmxlU3RhdGVDaGFuZ2UiLCJzZXRRdWVyeSIsImN1cnJWYWx1ZSIsInNldFBsYWNlaG9sZGVyIiwiZ2V0VG9rZW5zSW5Jbml0aWFsU3RhdGUiLCJtYW5kYXRvcnlUb2tlbnMiLCJyZXF1aXJlZEtleXMiLCJnZXRLZXkiLCJvbkFmdGVyUmVuZGVyaW5nIiwiYXJpYVRleHQiLCJzZXRBcmlhTGFiZWwiLCJyZW5kZXIiLCJybSIsImNvbnRyb2wiLCJqc3giLCJyZW5kZXJVc2luZ1JlbmRlck1hbmFnZXIiLCJnZXRBZ2dyZWdhdGlvbiIsIkNvbnRyb2wiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkVhc3lGaWx0ZXJCYXJDb250YWluZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGVuY29kZVhNTCBmcm9tIFwic2FwL2Jhc2Uvc2VjdXJpdHkvZW5jb2RlWE1MXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1LCBTdGF0ZU9mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHtcblx0YWdncmVnYXRpb24sXG5cdGNyZWF0ZVJlZmVyZW5jZSxcblx0ZGVmaW5lUmVmZXJlbmNlLFxuXHRkZWZpbmVTdGF0ZSxcblx0ZGVmaW5lVUk1Q2xhc3MsXG5cdGV2ZW50LFxuXHRwcm9wZXJ0eSxcblx0dHlwZSBQcm9wZXJ0aWVzT2Zcbn0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBSZWYgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvanN4LXJ1bnRpbWUvanN4XCI7XG5pbXBvcnQganN4IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCBUb2tlbiBmcm9tIFwic2FwL2ZlL2NvbnRyb2xzL2Vhc3lGaWx0ZXIvVG9rZW5cIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IEZsZXhCb3ggZnJvbSBcInNhcC9tL0ZsZXhCb3hcIjtcbmltcG9ydCBQb3BvdmVyIGZyb20gXCJzYXAvbS9Qb3BvdmVyXCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IFRva2VuaXplciBmcm9tIFwic2FwL20vVG9rZW5pemVyXCI7XG5pbXBvcnQgVkJveCBmcm9tIFwic2FwL20vVkJveFwiO1xuaW1wb3J0IHsgQnV0dG9uVHlwZSwgRmxleEFsaWduSXRlbXMsIEZsZXhKdXN0aWZ5Q29udGVudCwgRmxleFdyYXAsIFBsYWNlbWVudFR5cGUsIFRva2VuaXplclJlbmRlck1vZGUgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDdXN0b21EYXRhIGZyb20gXCJzYXAvdWkvY29yZS9DdXN0b21EYXRhXCI7XG5pbXBvcnQgTGliIGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIFJlbmRlck1hbmFnZXIgZnJvbSBcInNhcC91aS9jb3JlL1JlbmRlck1hbmFnZXJcIjtcbmltcG9ydCB7IEludmlzaWJsZU1lc3NhZ2VNb2RlLCBWYWx1ZVN0YXRlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5cbmltcG9ydCB0eXBlIHsgUHJpbWl0aXZlVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgeyBhbmQsIGJpbmRTdGF0ZSwgbm90IH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgQUlOb3RpY2UgZnJvbSBcInNhcC9mZS9jb250cm9scy9BSU5vdGljZVwiO1xuaW1wb3J0IEVhc3lGaWx0ZXJJbnB1dCBmcm9tIFwic2FwL2ZlL2NvbnRyb2xzL2Vhc3lGaWx0ZXIvRWFzeUZpbHRlcklucHV0XCI7XG5pbXBvcnQgdHlwZSBFYXN5RmlsdGVyVG9rZW4gZnJvbSBcInNhcC9mZS9jb250cm9scy9lYXN5RmlsdGVyL1Rva2VuXCI7XG5pbXBvcnQgSEJveCBmcm9tIFwic2FwL20vSEJveFwiO1xuaW1wb3J0IE1lc3NhZ2VTdHJpcCBmcm9tIFwic2FwL20vTWVzc2FnZVN0cmlwXCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCBPdmVyZmxvd1Rvb2xiYXIgZnJvbSBcInNhcC9tL092ZXJmbG93VG9vbGJhclwiO1xuaW1wb3J0IFRvZ2dsZUJ1dHRvbiBmcm9tIFwic2FwL20vVG9nZ2xlQnV0dG9uXCI7XG5pbXBvcnQgVG9vbGJhclNwYWNlciBmcm9tIFwic2FwL20vVG9vbGJhclNwYWNlclwiO1xuaW1wb3J0IEludmlzaWJsZU1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL0ludmlzaWJsZU1lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCBGRVNSSGVscGVyIGZyb20gXCJzYXAvdWkvcGVyZm9ybWFuY2UvdHJhY2UvRkVTUkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgRWFzeUZpbHRlciBmcm9tIFwidXgvZW5nL2Zpb3JpYWkvcmV1c2UvZWFzeWZpbHRlci9FYXN5RmlsdGVyXCI7XG5pbXBvcnQgdHlwZSB7IEVhc3lGaWx0ZXJNZXRhZGF0YSwgRWFzeUZpbHRlclJlc3VsdCwgUHJvcGVydHlNZXRhZGF0YSB9IGZyb20gXCJ1eC9lbmcvZmlvcmlhaS9yZXVzZS9lYXN5ZmlsdGVyL0Vhc3lGaWx0ZXJcIjtcbmltcG9ydCB0eXBlIHsgU3VjY2VzcyB9IGZyb20gXCJ1eC9lbmcvZmlvcmlhaS9yZXVzZS9zaGFyZWRcIjtcbmltcG9ydCB0eXBlIHsgRXZlbnRIYW5kbGVyIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0IEVycm9yTWVzc2FnZUhhbmRsZXIgZnJvbSBcIi4vRXJyb3JNZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IHsgdHJpZ2dlclBYSW50ZWdyYXRpb24gfSBmcm9tIFwiLi9QWEZlZWRiYWNrXCI7XG5pbXBvcnQgRWFzeUZpbHRlclV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XG5cbi8vRm9yIGN1cnJlbnQgcmVsZWFzZSB3ZSBhcmUgaWdub3JpbmcgXCJBbGxcIiBhbmQgXCJBbnlcIlxuLy9XZSBjYW4gaW5jb3Jwb3JhdGUgdGhlc2UgdmFsdWVzIGluIGZ1dHVyZVxuZXhwb3J0IHR5cGUgQmV0d2VlblNlbGVjdGVkVmFsdWVzID0gW2Jvb2xlYW4sIGJvb2xlYW5dIHwgW3N0cmluZywgc3RyaW5nXSB8IFtudW1iZXIsIG51bWJlcl0gfCBbRGF0ZSwgRGF0ZV07XG5cbnR5cGUgbGxtUmVzdWx0Rm9yU2VsZWN0ZWRWYWx1ZXNUeXBlID0gc3RyaW5nIHwgRGF0ZSB8IGJvb2xlYW4gfCBudW1iZXI7XG5cbmV4cG9ydCB0eXBlIENvZGVMaXN0VHlwZSA9IHtcblx0dmFsdWU6IFByaW1pdGl2ZVR5cGU7XG5cdGRlc2NyaXB0aW9uOiBsbG1SZXN1bHRGb3JTZWxlY3RlZFZhbHVlc1R5cGU7XG59O1xuXG5leHBvcnQgdHlwZSBWYWx1ZUhlbHBCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXMgPSBbQ29kZUxpc3RUeXBlLCBDb2RlTGlzdFR5cGVdO1xuXG5leHBvcnQgdHlwZSBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb24gPVxuXHR8IHtcblx0XHRcdG9wZXJhdG9yOiBFeGNsdWRlPEZpbHRlck9wZXJhdG9yLCBGaWx0ZXJPcGVyYXRvci5CVCB8IEZpbHRlck9wZXJhdG9yLk5CPjtcblx0XHRcdHNlbGVjdGVkVmFsdWVzOiBDb2RlTGlzdFR5cGVbXTtcblx0XHRcdG5vTWF0Y2g/OiBib29sZWFuO1xuXHQgIH1cblx0fCB7XG5cdFx0XHRvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuQlQgfCBGaWx0ZXJPcGVyYXRvci5OQjtcblx0XHRcdHNlbGVjdGVkVmFsdWVzOiBWYWx1ZUhlbHBCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXM7XG5cdFx0XHRub01hdGNoPzogYm9vbGVhbjtcblx0ICB9O1xuXG4vL1dlIHdpbGwgYmUgaGFuZGxpbmcgXCJBTExcIiBhbmQgXCJBTllcIiBhdCBsYXRlciBwb2ludCBvZiB0aW1lXG5leHBvcnQgdHlwZSBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbiA9XG5cdHwge1xuXHRcdFx0b3BlcmF0b3I6IEV4Y2x1ZGU8RmlsdGVyT3BlcmF0b3IsIEZpbHRlck9wZXJhdG9yLkJUIHwgRmlsdGVyT3BlcmF0b3IuTkI+O1xuXHRcdFx0c2VsZWN0ZWRWYWx1ZXM6IHN0cmluZ1tdIHwgYm9vbGVhbltdIHwgbnVtYmVyW10gfCBEYXRlW107XG5cdCAgfVxuXHR8IHtcblx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5CVCB8IEZpbHRlck9wZXJhdG9yLk5CO1xuXHRcdFx0c2VsZWN0ZWRWYWx1ZXM6IEJldHdlZW5TZWxlY3RlZFZhbHVlcztcblx0ICB9O1xuXG5leHBvcnQgdHlwZSBUb2tlblR5cGUgPSBcIk1lbnVXaXRoQ2hlY2tCb3hcIiB8IFwiQ2FsZW5kYXJcIiB8IFwiVGltZVwiIHwgXCJWYWx1ZUhlbHBcIiB8IFwiTWVudVdpdGhTaW5nbGVTZWxlY3RcIjtcblxuZXhwb3J0IHR5cGUgVmFsdWVIZWxwVG9rZW5EZWZpbml0aW9uID0ge1xuXHRrZXk6IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogVmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW107XG5cdHR5cGU6IFwiVmFsdWVIZWxwXCI7XG5cdGJ1c3k6IGJvb2xlYW47XG5cdGlzUmVxdWlyZWQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgTm9uVmFsdWVIZWxwVG9rZW5EZWZpbml0aW9uID0ge1xuXHRrZXk6IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXTtcblx0dHlwZTogRXhjbHVkZTxUb2tlblR5cGUsIFwiVmFsdWVIZWxwXCI+O1xuXHRpc1JlcXVpcmVkPzogYm9vbGVhbjtcblx0YnVzeTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRva2VuRGVmaW5pdGlvbiA9IFZhbHVlSGVscFRva2VuRGVmaW5pdGlvbiB8IE5vblZhbHVlSGVscFRva2VuRGVmaW5pdGlvbjtcblxuZXhwb3J0IHR5cGUgU29ydERlZmluaXRpb24gPSB7XG5cdGtleTogc3RyaW5nO1xuXHRkZXNjZW5kaW5nOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgVG9rZW5TZXR0ZXJzID0gXCJzZXRTZWxlY3RlZFZhbHVlc1wiO1xuXG5leHBvcnQgdHlwZSBHcm91cExldmVsRGVmaW5pdGlvbiA9IHtcblx0a2V5OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YSA9IFByb3BlcnR5TWV0YWRhdGEgJlxuXHQoXG5cdFx0fCB7XG5cdFx0XHRcdHR5cGU6IFwiVmFsdWVIZWxwXCI7XG5cdFx0XHRcdGRlZmF1bHRWYWx1ZT86IFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdO1xuXHRcdCAgfVxuXHRcdHwge1xuXHRcdFx0XHR0eXBlOiBFeGNsdWRlPFRva2VuVHlwZSwgXCJWYWx1ZUhlbHBcIj47XG5cdFx0XHRcdGRlZmF1bHRWYWx1ZT86IFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW107XG5cdFx0ICB9XG5cdCk7XG5cbi8vIFdlIG5lZWQgdGhlIHRoaXJkIGFyZ3VlbWVudCBiZWNhdXNlIHRoZXJlIG1pZ2h0IGJlIGEgY2hhbmNlIG9mIGNvbXBvc2l0ZSBrZXlzIHNjZW5hcmlvXG50eXBlIERhdGFGZXRjaGVyID0gKFxuXHRwcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0dmFsdWVPZkN1cnJlbnRQcm9wZXJ0eTogVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSxcblx0bGxtUmVzdWx0OiBTdWNjZXNzPEVhc3lGaWx0ZXJSZXN1bHQ+XG4pID0+IFByb21pc2U8VmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10+O1xuXG5pbnRlcmZhY2UgRm9jdXNIYW5kbGluZ0NvbnRyb2wge1xuXHRvbnNhcGZvY3VzbGVhdmU/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBFYXN5RmlsdGVyQmFyQ29udGFpbmVyJFNob3dWYWx1ZUhlbHBFdmVudCA9IFVJNUV2ZW50PFxuXHR7XG5cdFx0a2V5OiBzdHJpbmc7XG5cdFx0dmFsdWVzOiB1bmtub3duW107XG5cdFx0cmVzb2x2ZTogKHZhbHVlOiBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSkgPT4gdm9pZDtcblx0XHRyZWplY3Q6IChyZWFzb24/OiBFcnJvcikgPT4gdm9pZDtcblx0fSxcblx0RWFzeUZpbHRlckJhckNvbnRhaW5lclxuPjtcblxuLypcbiAqIERlbGl2ZXJ5IGZvciBiZXRhIHJlbGVhc2UgZm9yIHRoZSBlYXN5IGZpbHRlciBmZWF0dXJlLlxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29udHJvbHMuZWFzeUZpbHRlci5FYXN5RmlsdGVyQmFyQ29udGFpbmVyXCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFYXN5RmlsdGVyQmFyQ29udGFpbmVyIGV4dGVuZHMgQ29udHJvbCB7XG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0Y29udGV4dFBhdGg/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJpbnRcIiwgZGVmYXVsdFZhbHVlOiAxIH0pXG5cdGVhc3lGaWx0ZXJWZXJzaW9uPzogMSB8IDI7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRhcHBJZD86IHN0cmluZztcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGVhc3lGaWx0ZXJMaWI/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJhcnJheVwiIH0pXG5cdGZpbHRlckJhck1ldGFkYXRhPzogRWFzeUZpbHRlclByb3BlcnR5TWV0YWRhdGFbXTtcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcImFycmF5XCIgfSlcblx0cmVjb21tZW5kZWRWYWx1ZXM/OiBzdHJpbmdbXTtcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcImZ1bmN0aW9uXCIgfSlcblx0ZGF0YUZldGNoZXI/OiBEYXRhRmV0Y2hlcjtcblxuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0ZWFzeUZpbHRlcklucHV0ITogUmVmPEVuaGFuY2VXaXRoVUk1PEVhc3lGaWx0ZXJJbnB1dD4+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHR0b2tlbml6ZXIhOiBSZWY8VG9rZW5pemVyPjtcblxuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC51aS5jb3JlLkNvbnRyb2xcIiB9KVxuXHRjb250ZW50PzogQ29udHJvbDtcblxuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC51aS5jb3JlLkNvbnRyb2xcIiB9KVxuXHRhaU5vdGljZT86IENvbnRyb2w7XG5cblx0QGV2ZW50KClcblx0dG9rZW5zQ2hhbmdlZD86IEV2ZW50SGFuZGxlcjxVSTVFdmVudDx7IHRva2VuczogVG9rZW5EZWZpbml0aW9uW107IHJlc2V0OiBib29sZWFuIH0sIEVhc3lGaWx0ZXJCYXJDb250YWluZXI+PjtcblxuXHRAZXZlbnQoKVxuXHRzb3J0ZXJzQ2hhbmdlZD86IEV2ZW50SGFuZGxlcjxVSTVFdmVudDx7IHNvcnRlcnM6IFNvcnREZWZpbml0aW9uW10gfSwgRWFzeUZpbHRlckJhckNvbnRhaW5lcj4+O1xuXG5cdEBldmVudCgpXG5cdGdyb3VwTGV2ZWxzQ2hhbmdlZD86IEV2ZW50SGFuZGxlcjxVSTVFdmVudDx7IGdyb3VwTGV2ZWxzOiBHcm91cExldmVsRGVmaW5pdGlvbltdIH0sIEVhc3lGaWx0ZXJCYXJDb250YWluZXI+PjtcblxuXHRAZXZlbnQoKVxuXHRxdWVyeUNoYW5nZWQ/OiBFdmVudEhhbmRsZXI8VUk1RXZlbnQ8eyBxdWVyeTogc3RyaW5nIH0sIEVhc3lGaWx0ZXJCYXJDb250YWluZXI+PjtcblxuXHRAZXZlbnQoKVxuXHRzaG93VmFsdWVIZWxwPzogRXZlbnRIYW5kbGVyPEVhc3lGaWx0ZXJCYXJDb250YWluZXIkU2hvd1ZhbHVlSGVscEV2ZW50PjtcblxuXHRAZXZlbnQoKVxuXHRsaXZlQ2hhbmdlPzogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PHsgcXVlcnk6IHN0cmluZyB9LCBFYXN5RmlsdGVyQmFyQ29udGFpbmVyPj47XG5cblx0LyoqIEZpcmVzIHdoZW4gdGhlIHVzZXIgbWFudWFsbHkgcmVtb3ZlcyBvciBlZGl0cyBhIGZpbHRlciB0b2tlbi4gRG9lcyBub3QgZmlyZSB3aGVuIHRva2VucyBhcmUgc2V0IGJ5IHRoZSBBSSBzZWFyY2ggcmVzdWx0LiAqL1xuXHRAZXZlbnQoKVxuXHR0b2tlbnNDaGFuZ2VkQnlVc2VyPzogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PHsgdG9rZW5zOiBUb2tlbkRlZmluaXRpb25bXSB9LCBFYXN5RmlsdGVyQmFyQ29udGFpbmVyPj47XG5cblx0QGV2ZW50KClcblx0Y2xlYXJGaWx0ZXJzPzogRXZlbnRIYW5kbGVyO1xuXG5cdEBldmVudCgpXG5cdGJlZm9yZVF1ZXJ5UHJvY2Vzc2luZz86IEV2ZW50SGFuZGxlcjtcblxuXHRAZXZlbnQoKVxuXHRhZnRlclF1ZXJ5UHJvY2Vzc2luZz86IEV2ZW50SGFuZGxlcjtcblxuXHRwcml2YXRlIHJlc291cmNlQnVuZGxlITogUmVzb3VyY2VCdW5kbGU7XG5cblx0QGRlZmluZVN0YXRlKClcblx0cHJvdGVjdGVkIHN0YXRlOiBTdGF0ZU9mPHtcblx0XHRzaG93UmVzdWx0OiBib29sZWFuO1xuXHRcdHRva2VuczogVG9rZW5EZWZpbml0aW9uW107XG5cdFx0c29ydGVyczogU29ydERlZmluaXRpb25bXTtcblx0XHRncm91cExldmVsczogR3JvdXBMZXZlbERlZmluaXRpb25bXTtcblx0XHR0b2tlbml6ZXJFZGl0YWJsZTogYm9vbGVhbjtcblx0XHRzaG93U2luZ2xlVmFsdWVNZXNzYWdlU3RyaXA/OiBib29sZWFuO1xuXHRcdHNpbmdsZVZhbHVlTWVzc2FnZVN0cmlwVGV4dD86IHN0cmluZztcblx0XHRtZXNzYWdlU3RyaXBUZXh0Pzogc3RyaW5nO1xuXHRcdHNob3dNZXNzYWdlU3RyaXA/OiBib29sZWFuO1xuXHRcdG1lc3NhZ2VTdHJpcFR5cGU6IE1lc3NhZ2VUeXBlO1xuXHRcdHRodW1iQnV0dG9uRW5hYmxlZDogYm9vbGVhbjtcblx0XHR0aHVtYlVwQnV0dG9uUHJlc3NlZDogYm9vbGVhbjtcblx0XHR0aHVtYkRvd25CdXR0b25QcmVzc2VkOiBib29sZWFuO1xuXHR9PiA9IHtcblx0XHRzaG93UmVzdWx0OiBmYWxzZSxcblx0XHR0b2tlbnM6IFtdIGFzIFRva2VuRGVmaW5pdGlvbltdLFxuXHRcdHNvcnRlcnM6IFtdIGFzIFNvcnREZWZpbml0aW9uW10sXG5cdFx0Z3JvdXBMZXZlbHM6IFtdIGFzIEdyb3VwTGV2ZWxEZWZpbml0aW9uW10sXG5cdFx0dG9rZW5pemVyRWRpdGFibGU6IHRydWUsXG5cdFx0c2hvd1NpbmdsZVZhbHVlTWVzc2FnZVN0cmlwOiBmYWxzZSxcblx0XHRzaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcFRleHQ6IFwiXCIsXG5cdFx0bWVzc2FnZVN0cmlwVGV4dDogXCJcIixcblx0XHRzaG93TWVzc2FnZVN0cmlwOiBmYWxzZSxcblx0XHRtZXNzYWdlU3RyaXBUeXBlOiBNZXNzYWdlVHlwZS5FcnJvcixcblx0XHR0aHVtYkJ1dHRvbkVuYWJsZWQ6IHRydWUsXG5cdFx0dGh1bWJVcEJ1dHRvblByZXNzZWQ6IGZhbHNlLFxuXHRcdHRodW1iRG93bkJ1dHRvblByZXNzZWQ6IGZhbHNlXG5cdH07XG5cblx0cHJpdmF0ZSBpbm5lckNvbnRyb2xQb3BvdmVyPzogUG9wb3ZlcjtcblxuXHRwcml2YXRlIG9rQnV0dG9uPzogQnV0dG9uO1xuXG5cdHByaXZhdGUgc2hvd0FsbEJ1dHRvbj86IEJ1dHRvbjtcblxuXHRwcml2YXRlIHRvb2xiYXI/OiBPdmVyZmxvd1Rvb2xiYXI7XG5cblx0cHJpdmF0ZSBtYW5kYXRvcnlLZXlNYXA/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcblxuXHQvL0lmIHNldCB0byB0cnVlIHRoZSBlcnJvciBzdGF0ZSBjYW4gYmUgc2VlbiBvbiB0aGUgdG9rZW5zXG5cdHByaXZhdGUgaXNNYW5kYXRvcnlDaGVja1JlcXVpcmVkPzogYm9vbGVhbjtcblxuXHRwcml2YXRlIHNob3VsZFRva2VuQ2hhbmdlRXZlbnRGaXJlZCA9IHRydWU7XG5cblx0cHJpdmF0ZSBpc1Jlc2V0dGluZ1RvRGVmYXVsdFRva2VucyA9IGZhbHNlO1xuXG5cdHByaXZhdGUgaW52aXNpYmxlTWVzc2FnZSE6IEludmlzaWJsZU1lc3NhZ2U7XG5cblx0ZWFzeWZpbHRlcj86IFByb21pc2U8dHlwZW9mIEVhc3lGaWx0ZXIgfCB1bmRlZmluZWQ+O1xuXG5cdHByaXZhdGUgcmVzb2x2ZUNvbnRlbnRSZWFkeSE6ICgpID0+IHZvaWQ7XG5cblx0cHJpdmF0ZSBpbnB1dEZpZWxkUmVhZHk6IFByb21pc2U8dm9pZD4gPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdHRoaXMucmVzb2x2ZUNvbnRlbnRSZWFkeSA9IHJlc29sdmU7XG5cdH0pO1xuXG5cdHByaXZhdGUgc2hvdWxkTWVzc2FnZVN0cmlwUmVtb3ZlID0gdHJ1ZTtcblxuXHRwcml2YXRlIGFyaWFMYWJlbEFwcGxpZWQgPSBmYWxzZTtcblxuXHRwcml2YXRlIHN1cHBvcnRzU29ydGluZyA9IHRydWU7XG5cblx0cHJpdmF0ZSBzdXBwb3J0c0dyb3VwaW5nID0gdHJ1ZTtcblxuXHRjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBzdHJpbmcgfCAoJENvbnRyb2xTZXR0aW5ncyAmIFByb3BlcnRpZXNPZjxFYXN5RmlsdGVyQmFyQ29udGFpbmVyPiksIG90aGVycz86ICRDb250cm9sU2V0dGluZ3MpIHtcblx0XHRzdXBlcihwcm9wZXJ0aWVzIGFzIHN0cmluZywgb3RoZXJzKTtcblx0XHR0aGlzLmluaXRpYWxpemUoKTtcblx0XHR0aGlzLmludmlzaWJsZU1lc3NhZ2UgPSBJbnZpc2libGVNZXNzYWdlLmdldEluc3RhbmNlKCk7XG5cdH1cblxuXHRzZXRFYXN5RmlsdGVyTGliKGVhc3lGaWx0ZXJMaWI6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuc2V0UHJvcGVydHkoXCJlYXN5RmlsdGVyTGliXCIsIGVhc3lGaWx0ZXJMaWIpO1xuXHRcdGlmICh0aGlzLmVhc3lGaWx0ZXJMaWIpIHtcblx0XHRcdHRoaXMuZWFzeWZpbHRlciA9IGltcG9ydCh0aGlzLmVhc3lGaWx0ZXJMaWIpO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIHNldEFwcElkKGFwcElkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoIXRoaXMuYXBwSWQpIHtcblx0XHRcdHRoaXMuc2V0UHJvcGVydHkoXCJhcHBJZFwiLCBhcHBJZCwgdHJ1ZSk7XG5cdFx0XHRhd2FpdCB0aGlzLmlucHV0RmllbGRSZWFkeTtcblx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LnNldFByb3BlcnR5KFwiYXBwSWRcIiwgYXBwSWQsIHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdHNldEZpbHRlckJhck1ldGFkYXRhKGZpbHRlckJhck1ldGFkYXRhOiBFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YVtdKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmZpbHRlckJhck1ldGFkYXRhKSB7XG5cdFx0XHR0aGlzLnNldFByb3BlcnR5KFwiZmlsdGVyQmFyTWV0YWRhdGFcIiwgZmlsdGVyQmFyTWV0YWRhdGEsIHRydWUpO1xuXHRcdFx0Ly8gcG9wdWxhdGUgdGhlIHRva2VucyB3aXRoIGRlZmF1bHQgdmFsdWVcblx0XHRcdGNvbnN0IHRva2VucyA9IHRoaXMuZ2V0RGVmYXVsdFRva2VucygpO1xuXHRcdFx0aWYgKCF0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIpIHtcblx0XHRcdFx0dGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyID0gdGhpcy5jcmVhdGVQb3BvdmVyRm9ySW5uZXJDb250cm9scygpO1xuXHRcdFx0XHR0aGlzLmFkZERlcGVuZGVudCh0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5zdGF0ZS50b2tlbnMgPSB0b2tlbnM7XG5cdFx0XHR0aGlzLnN0YXRlLnNob3dSZXN1bHQgPSB0b2tlbnMubGVuZ3RoID4gMDtcblx0XHRcdC8vL1dlIGRvbid0IHdhbnQgdG8gZGlzcGxheSBlcnJvciB2YWx1ZVN0YXRlTWVzc2FnZSBhcyBzb29uIHRoZSBjb250cm9sIHJlbmRlcnNcblx0XHRcdHRoaXMuaXNNYW5kYXRvcnlDaGVja1JlcXVpcmVkID0gdHJ1ZTtcblx0XHRcdC8vb25Ub2tlbkNoYW5nZSBldmVudCBzaG91bGQgbm90IGJlIGZpcmVkIHdoZW4gaW5pdGlhbCBzZXQgb2YgdG9rZW5zIGFyZSBzZXRcblx0XHRcdHRoaXMuc2hvdWxkVG9rZW5DaGFuZ2VFdmVudEZpcmVkID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLnJlc291cmNlQnVuZGxlID0gTGliLmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvbnRyb2xzXCIpITtcblx0fVxuXG5cdGluaXRpYWxpemUoKTogdm9pZCB7XG5cdFx0dGhpcy5jb250ZW50ID0gdGhpcy5jcmVhdGVDb250ZW50KCk7XG5cdFx0dGhpcy5yZXNvbHZlQ29udGVudFJlYWR5KCk7XG5cdFx0aWYgKCF0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIpIHtcblx0XHRcdHRoaXMuaW5uZXJDb250cm9sUG9wb3ZlciA9IHRoaXMuY3JlYXRlUG9wb3ZlckZvcklubmVyQ29udHJvbHMoKTtcblx0XHRcdHRoaXMuYWRkRGVwZW5kZW50KHRoaXMuaW5uZXJDb250cm9sUG9wb3Zlcik7XG5cdFx0fVxuXHRcdC8vV2UgZG9uJ3Qgd2FudCB0byBkaXNwbGF5IGVycm9yIHZhbHVlU3RhdGVNZXNzYWdlIGFzIHNvb24gdGhlIGNvbnRyb2wgcmVuZGVyc1xuXHRcdHRoaXMuaXNNYW5kYXRvcnlDaGVja1JlcXVpcmVkID0gdHJ1ZTtcblx0XHQvL29uVG9rZW5DaGFuZ2UgZXZlbnQgc2hvdWxkIG5vdCBiZSBmaXJlZCB3aGVuIGluaXRpYWwgc2V0IG9mIHRva2VucyBhcmUgc2V0XG5cdFx0dGhpcy5zaG91bGRUb2tlbkNoYW5nZUV2ZW50RmlyZWQgPSBmYWxzZTtcblx0fVxuXG5cdC8vIFRoaXMgbWV0aG9kIHNob3VsZCBiZSB1c2VkIGJlZm9yZSB1cGRhdGluZyB0aGUgc3RhdGUsIG9uY2UgdGhlIHN0YXRlIGlzIHVwZGF0ZWQgdGhlIHByZXZpb3VzIG92ZXJyaWRkZW4gZGVmYXVsdCB2YWx1ZXMgd291bGQgYmUgZ29uZSBmb3JldmVyXG5cdGdldERlZmF1bHRUb2tlbnMoKTogVG9rZW5EZWZpbml0aW9uW10ge1xuXHRcdGNvbnN0IHRva2VuczogVG9rZW5EZWZpbml0aW9uW10gPSBbXTtcblx0XHRpZiAoIXRoaXMubWFuZGF0b3J5S2V5TWFwKSB7XG5cdFx0XHR0aGlzLm1hbmRhdG9yeUtleU1hcCA9IHt9O1xuXHRcdH1cblx0XHR0aGlzLmZpbHRlckJhck1ldGFkYXRhPy5mb3JFYWNoKChkYXRhKSA9PiB7XG5cdFx0XHRjb25zdCBpc1JlcXVpcmVkID0gZGF0YS5yZXF1aXJlZDtcblx0XHRcdGlmIChpc1JlcXVpcmVkKSB7XG5cdFx0XHRcdCh0aGlzLm1hbmRhdG9yeUtleU1hcCBhcyBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPilbZGF0YS5uYW1lXSA9IHRydWU7XG5cdFx0XHRcdC8vQ2hlY2sgd2hldGhlciB0aGUga2V5cyBleGlzdCBpbiB0aGUgY3VycmVudCBzdGF0ZSBlbHNlIHB1c2ggaXQgYWNyb3NzXG5cdFx0XHRcdGlmIChkYXRhLnR5cGUgPT09IFwiVmFsdWVIZWxwXCIpIHtcblx0XHRcdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdFx0XHRrZXk6IGRhdGEubmFtZSxcblx0XHRcdFx0XHRcdGxhYmVsOiBkYXRhLmxhYmVsIGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IChkYXRhLmRlZmF1bHRWYWx1ZSBhcyBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSkgPz8gW10sXG5cdFx0XHRcdFx0XHR0eXBlOiBkYXRhLnR5cGUsXG5cdFx0XHRcdFx0XHRidXN5OiBmYWxzZSxcblx0XHRcdFx0XHRcdGlzUmVxdWlyZWRcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdFx0XHRrZXk6IGRhdGEubmFtZSxcblx0XHRcdFx0XHRcdGxhYmVsOiBkYXRhLmxhYmVsIGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IChkYXRhLmRlZmF1bHRWYWx1ZSBhcyBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdKSA/PyBbXSxcblx0XHRcdFx0XHRcdHR5cGU6IGRhdGEudHlwZSxcblx0XHRcdFx0XHRcdGJ1c3k6IGZhbHNlLFxuXHRcdFx0XHRcdFx0aXNSZXF1aXJlZFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHRva2Vucztcblx0fVxuXG5cdHByaXZhdGUgYnVpbGRJbnB1dEFyaWFMYWJlbCgpOiBzdHJpbmcge1xuXHRcdGNvbnN0IG1hbmRhdG9yeUZpZWxkcyA9IHRoaXMuZmlsdGVyQmFyTWV0YWRhdGE/LmZpbHRlcigoZikgPT4gZi5yZXF1aXJlZCkgPz8gW107XG5cdFx0aWYgKG1hbmRhdG9yeUZpZWxkcy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH1cblx0XHRjb25zdCBmaWVsZExhYmVscyA9IG1hbmRhdG9yeUZpZWxkcy5tYXAoKGYpID0+IGYubGFiZWwpLmpvaW4oXCIsIFwiKTtcblx0XHRyZXR1cm4gdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9JTlBVVF9SRVFVSVJFRF9GSUVMRFNcIiwgW2ZpZWxkTGFiZWxzXSk7XG5cdH1cblxuXHRvbkVudGVyUHJlc3NlZChlOiBVSTVFdmVudDx7IHF1ZXJ5OiBzdHJpbmcgfSwgRWFzeUZpbHRlcklucHV0Pik6IHZvaWQge1xuXHRcdHRoaXMub25Hb1ByZXNzKGUuZ2V0UGFyYW1ldGVyKFwicXVlcnlcIikpO1xuXHR9XG5cblx0Ly9NYWtpbmcgaXQgcHVibGljIGJlY2F1c2UgaW4gbGl2ZSBtb2RlIHRoZSBhcHAgZGV2ZWxvcGVyIGNhbiBkZWNpZGUgd2hldGhlciB0byBkaXNwbGF5IHRoZSBlcnJvciBWYWx1ZVN0YXRlTWVzc2FnZVxuXHQvL0luIG5vbi1saXZlIG1vZGUgLCB3ZSBhcmUgYWxyZWFkeSBpbnRlcm5hbGx5IGhhbmRsaW5nIGl0IG9uIGV2ZXJ5IHRpbWUgdGltZSBhIHVzZXIgY2xpY2tzIG9uIEdPL0VudGVyIGJ1dHRvbnNcblx0cHVibGljIGNoZWNrSWZBbGxNYW5kYXRvcnlUb2tlbnNGaWxsZWQoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgdG9rZW5zSW5TdGF0ZSA9IHRoaXMuZ2V0VW5TZXRNYW5kYXRvcnlUb2tlbnNJbkN1cnJlbnRTdGF0ZSgpO1xuXHRcdGlmICh0b2tlbnNJblN0YXRlLmxlbmd0aCAhPT0gMCkge1xuXHRcdFx0Y29uc3QgdG9rZW5zID0gdGhpcy5nZXRBY3R1YWxUb2tlbnNGcm9tU3RhdGUodG9rZW5zSW5TdGF0ZSk7XG5cdFx0XHR0b2tlbnM/LmZvckVhY2goKHRva2VuKSA9PiB7XG5cdFx0XHRcdHRva2VuLnNldFByb3BlcnR5KFwidmFsdWVTdGF0ZVwiLCBWYWx1ZVN0YXRlLkVycm9yKTtcblx0XHRcdFx0dG9rZW4uc2V0UHJvcGVydHkoXCJ2YWx1ZVN0YXRlVGV4dFwiLCB0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX01BTkRBVE9SWV9UT0tFTl9FUlJPUlwiKSk7XG5cdFx0XHRcdHRva2VuLm9wZW5WYWx1ZVN0YXRlTWVzc2FnZSgpO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cHVibGljIGNsb3NlQWxsTWFuZGF0b3J5VmFsdWVTdGF0ZU1lc3NhZ2VzKCk6IHZvaWQge1xuXHRcdGNvbnN0IGVhc3lUb2tlbnMgPSB0aGlzLnRva2VuaXplci5jdXJyZW50Py5nZXRUb2tlbnMoKSBhcyBFYXN5RmlsdGVyVG9rZW5bXTtcblx0XHRlYXN5VG9rZW5zLmZvckVhY2goKHRva2VuKSA9PiB0b2tlbi5jbG9zZVZhbHVlU3RhdGVNZXNzYWdlKCkpO1xuXHR9XG5cblx0YXN5bmMgb25Hb1ByZXNzKG1hZ2ljUXVlcnk6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghbWFnaWNRdWVyeSkge1xuXHRcdFx0dGhpcy5yZXNldFN0YXRlKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuc3RhdGUudG9rZW5pemVyRWRpdGFibGUgPSB0cnVlO1xuXG5cdFx0Ly8gQ2FsbCBBSSBzZXJ2aWNlIHRvIGdldCB0aGUgZmlsdGVyIGNyaXRlcmlhXG5cdFx0Y29uc3QgZWFzeWZpbHRlciA9IGF3YWl0IHRoaXMuZWFzeWZpbHRlcjtcblx0XHRpZiAoIWVhc3lmaWx0ZXIpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5maXJlRXZlbnQoXCJiZWZvcmVRdWVyeVByb2Nlc3NpbmdcIik7XG5cblx0XHRjb25zdCBlYXN5RmlsdGVyTWV0YWRhdGE6IEVhc3lGaWx0ZXJNZXRhZGF0YSA9IHtcblx0XHRcdHZlcnNpb246IHRoaXMuZWFzeUZpbHRlclZlcnNpb24gPz8gMSxcblx0XHRcdGVudGl0eVNldDogdGhpcy5jb250ZXh0UGF0aCxcblx0XHRcdGZpZWxkczogdGhpcy5maWx0ZXJCYXJNZXRhZGF0YSBhcyBFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YVtdXG5cdFx0fTtcblxuXHRcdGNvbnN0IGVhc3lGaWx0ZXJSZXN1bHQgPSBhd2FpdCBlYXN5ZmlsdGVyLmVhc3lGaWx0ZXIobWFnaWNRdWVyeSwgZWFzeUZpbHRlck1ldGFkYXRhKTtcblxuXHRcdC8vV2Ugc2hvdWxkIG5vdCBjaGFuZ2UgdGhlIG1lc3NhZ2Ugc3RyaXAgZm9yIHRoZSBmaXJzdCB0aW1lIHdoZW4gdGhlIEdPIGJ1dHRvbiBpcyBwcmVzc2VkLCBiZWNhdXNlIGl0IGhhcyBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZCBpbiB0aGUgRWFzeUZpbHRlclV0aWxzLmZvcm1hdERhdGEgbWV0aG9kXG5cdFx0dGhpcy5zaG91bGRNZXNzYWdlU3RyaXBSZW1vdmUgPSBmYWxzZTtcblx0XHRpZiAoZWFzeUZpbHRlclJlc3VsdC5zdWNjZXNzKSB7XG5cdFx0XHQvL09ubHkgYWRkIHRoZSByZWNlbnQgcXVlcnkgd2hlbiB0aGUgY2FsbCBpcyBzdWNjZXNzXG5cdFx0XHQvL0RvIG5vdCB0cmFjayB0aGUgcmVjZW50IHF1ZXJpZXMgd2hlbiB0aGUgaXNIaXN0b3J5RW5hYmxlZCBpcyBzZXQgdG8gZmFsc2Vcblx0XHRcdC8vSXQgd291bGQgYmUgYSB2aW9sYXRpb24gdG8gdXNlcnMgcHJpdmFjeVxuXHRcdFx0aWYgKHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LmlzSGlzdG9yeUVuYWJsZWQoKSA/PyBmYWxzZSkge1xuXHRcdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5hZGRSZWNlbnRRdWVyeShtYWdpY1F1ZXJ5KTtcblx0XHRcdH1cblx0XHRcdC8vIFNldCBxdWVyeSBhcyBzdWNjZXNzZnVsIGluIHRoZSBpbnB1dCBmaWVsZFxuXHRcdFx0dGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uc2V0UXVlcnlTdWNjZXNzKG1hZ2ljUXVlcnkpO1xuXHRcdFx0aWYgKGVhc3lGaWx0ZXJSZXN1bHQuZGF0YS52ZXJzaW9uID09PSAxKSB7XG5cdFx0XHRcdHRoaXMuaGFuZGxlVjFTdWNjZXNzKGVhc3lGaWx0ZXJSZXN1bHQpO1xuXHRcdFx0fSBlbHNlIGlmIChlYXN5RmlsdGVyUmVzdWx0LmRhdGEudmVyc2lvbiA9PT0gMikge1xuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIHNhcC51aS5tb2RlbC5GaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIGFuZCBhcHBseSBpdCBkaXJlY3RseSB0byB0aGUgbGlzdCBiaW5kaW5nXG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGVycm9yXG5cdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5zZXRRdWVyeUZhaWx1cmUoKTtcblx0XHRcdHRoaXMucmVtb3ZlTm9uTWFuZGF0b3J5VG9rZW5zKCk7XG5cdFx0XHR0aGlzLnNldE1lc3NhZ2VTdHJpcChlYXN5RmlsdGVyUmVzdWx0Lm1lc3NhZ2UpO1xuXHRcdFx0dGhpcy5pbnZpc2libGVNZXNzYWdlLmFubm91bmNlKHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChlYXN5RmlsdGVyUmVzdWx0Lm1lc3NhZ2UpLCBJbnZpc2libGVNZXNzYWdlTW9kZS5Bc3NlcnRpdmUpO1xuXHRcdFx0dGhpcy5zdGF0ZS5tZXNzYWdlU3RyaXBUeXBlID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0XHRcdHRoaXMuc3RhdGUuZ3JvdXBMZXZlbHMgPSBbXTtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGdlbmVyYXRpbmcgZmlsdGVyIGNyaXRlcmlhOiBcIiwgZWFzeUZpbHRlclJlc3VsdC5tZXNzYWdlKTtcblx0XHR9XG5cblx0XHR0aGlzLmZpcmVFdmVudChcImFmdGVyUXVlcnlQcm9jZXNzaW5nXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIHN1Y2Nlc3MgcmVzcG9uc2UgZnJvbSB0aGUgQUkgc2VydmljZSBmb3IgdmVyc2lvbiAxIG9mIHRoZSBlYXN5IGZpbHRlci5cblx0ICogQHBhcmFtIGVhc3lGaWx0ZXJSZXN1bHQgVGhlIHJlc3VsdCBmcm9tIHRoZSBBSSBzZXJ2aWNlXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwcml2YXRlIGhhbmRsZVYxU3VjY2VzcyhlYXN5RmlsdGVyUmVzdWx0OiBTdWNjZXNzPEVhc3lGaWx0ZXIuRWFzeUZpbHRlclJlc3VsdD4pOiB2b2lkIHtcblx0XHRpZiAoZWFzeUZpbHRlclJlc3VsdC5kYXRhLmZpbHRlcikge1xuXHRcdFx0Ly8gV2UgbmVlZCB0byBzaG93IGEgbWVzc2FnZSB0byB0aGUgdXNlciB0aGF0IHRoZSBmaWx0ZXIgY3JpdGVyaWEgaGFzIGJlZW4gZ2VuZXJhdGVkXG5cdFx0XHRMb2cuZGVidWcoXCJGaWx0ZXIgY3JpdGVyaWEgZ2VuZXJhdGVkOiBcIiwgSlNPTi5zdHJpbmdpZnkoZWFzeUZpbHRlclJlc3VsdC5kYXRhLmZpbHRlciwgbnVsbCwgMikpO1xuXG5cdFx0XHRjb25zdCB0b2tlbnMgPSBbLi4udGhpcy5zdGF0ZS50b2tlbnNdLmZpbHRlcigodG9rZW4pID0+IHRva2VuLmlzUmVxdWlyZWQpO1xuXG5cdFx0XHQvLyBDbGVhciB0aGUgcHJldmlvdXMgbWVzc2FnZSBzdHJpcCBmb3IgdmFsaWRhdGVkIGZpbHRlcnNcblx0XHRcdHRoaXMuY2xlYXJNZXNzYWdlU3RyaXAoKTtcblxuXHRcdFx0Ly8gVmFsaWRhdGUgYW5kIGFwcGx5IHRoZSBmaWx0ZXIgY3JpdGVyaWFcblx0XHRcdEVhc3lGaWx0ZXJVdGlscy5mb3JtYXREYXRhKFxuXHRcdFx0XHR0b2tlbnMsXG5cdFx0XHRcdGVhc3lGaWx0ZXJSZXN1bHQuZGF0YS5maWx0ZXIsXG5cdFx0XHRcdHRoaXMuZmlsdGVyQmFyTWV0YWRhdGEgYXMgRWFzeUZpbHRlclByb3BlcnR5TWV0YWRhdGFbXSxcblx0XHRcdFx0dGhpcy5zZXRNZXNzYWdlU3RyaXAuYmluZCh0aGlzKVxuXHRcdFx0KTtcblxuXHRcdFx0Ly9XZSBvbmx5IGhhdmUgdG8gY2FsbCB0aGUgZGF0YUZldGNoZXIgb24gdGhlIFZIIHRva2VucyB3aGljaCBoYXZlIGJlZW4gYXNrZWQgYnkgdGhlIHVzZXJcblx0XHRcdC8vSW4gTWFkbmF0b3J5IHRva2VucyBjYXNlIHRoZSBkZWZhdWx0VmFsdWVzIGFyZSBhbHJlYWR5IGdpdmVuLCBzbyBubyBuZWVkIHRvIGNhbGwgZGF0YUZldGNoZXIgb24gaXRcblxuXHRcdFx0Y29uc3QgYWxsVmFsdWVIZWxwVG9rZW5zID0gdG9rZW5zLmZpbHRlcigocmVzdWx0KSA9PiByZXN1bHQudHlwZSA9PT0gXCJWYWx1ZUhlbHBcIik7XG5cdFx0XHRjb25zdCByZXF1aXJlZFZhbHVlSGVscFRva2VucyA9IGFsbFZhbHVlSGVscFRva2Vucy5maWx0ZXIoKHZhbHVlSGVscFRva2VuKSA9PiB7XG5cdFx0XHRcdHJldHVybiBlYXN5RmlsdGVyUmVzdWx0LmRhdGEuZmlsdGVyPy5maW5kKChsbG1SZXN1bHQpID0+IGxsbVJlc3VsdC5uYW1lID09PSB2YWx1ZUhlbHBUb2tlbi5rZXkpO1xuXHRcdFx0fSk7XG5cblx0XHRcdGlmICh0aGlzLmRhdGFGZXRjaGVyKSB7XG5cdFx0XHRcdChyZXF1aXJlZFZhbHVlSGVscFRva2VucyBhcyB1bmtub3duIGFzIFZhbHVlSGVscFRva2VuRGVmaW5pdGlvbltdKS5mb3JFYWNoKGFzeW5jICh2YWx1ZUhlbHBUb2tlbikgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZGF0YUZldGNoZXI/Lihcblx0XHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmtleSxcblx0XHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMgYXMgdW5rbm93biBhcyBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdLFxuXHRcdFx0XHRcdFx0ZWFzeUZpbHRlclJlc3VsdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0dmFsdWVIZWxwVG9rZW4uYnVzeSA9IGZhbHNlO1xuXHRcdFx0XHRcdGlmIChyZXN1bHQpIHtcblx0XHRcdFx0XHRcdC8vV2Ugc2hvdWxkIG5vdCBjaGFuZ2UgdGhlIG1lc3NhZ2Ugc3RyaXAgZm9yIHRoZSBmaXJzdCB0aW1lIHdoZW4gdGhlIEdPIGJ1dHRvbiBpcyBwcmVzc2VkLCBiZWNhdXNlIGl0IGhhcyBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZCBpbiB0aGUgRWFzeUZpbHRlclV0aWxzLmZvcm1hdERhdGEgbWV0aG9kXG5cdFx0XHRcdFx0XHR0aGlzLnNob3VsZE1lc3NhZ2VTdHJpcFJlbW92ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0dmFsdWVIZWxwVG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyA9IHJlc3VsdDtcblx0XHRcdFx0XHRcdHRoaXMuc3RhdGUuc2hvd1Jlc3VsdCA9IHRydWU7XG5cdFx0XHRcdFx0XHR0aGlzLnN0YXRlLnRva2VucyA9IHVwZGF0ZWRUb2tlbnM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vSWYgZGF0YUZldGNoZXIgaXMgbm90IHRoZXJlLCB0aGVuIG1vY2sgdGhlIHZhbHVlIGFuZCBkZXNjcmlwdGlvbiB3aXRoIHRoZSBzYW1lIHJlc3VsdCBjb21pbmcgZnJvbSB0aGUgTExNXG5cdFx0XHRcdHJlcXVpcmVkVmFsdWVIZWxwVG9rZW5zLmZvckVhY2goKHZhbHVlSGVscFRva2VuKSA9PiB7XG5cdFx0XHRcdFx0dmFsdWVIZWxwVG9rZW4uYnVzeSA9IGZhbHNlO1xuXHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMuZm9yRWFjaCgoa2V5U3BlY2lmaWNWYWx1ZSwgaWR4KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoa2V5U3BlY2lmaWNWYWx1ZS5vcGVyYXRvciA9PT0gRmlsdGVyT3BlcmF0b3IuQlQgfHwga2V5U3BlY2lmaWNWYWx1ZS5vcGVyYXRvciA9PT0gRmlsdGVyT3BlcmF0b3IuTkIpIHtcblx0XHRcdFx0XHRcdFx0dmFsdWVIZWxwVG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlc1tpZHhdLnNlbGVjdGVkVmFsdWVzID0gW1xuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBrZXlTcGVjaWZpY1ZhbHVlLnNlbGVjdGVkVmFsdWVzWzBdLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IGtleVNwZWNpZmljVmFsdWUuc2VsZWN0ZWRWYWx1ZXNbMF0gYXMgdW5rbm93biBhcyBsbG1SZXN1bHRGb3JTZWxlY3RlZFZhbHVlc1R5cGVcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBrZXlTcGVjaWZpY1ZhbHVlLnNlbGVjdGVkVmFsdWVzWzFdLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IGtleVNwZWNpZmljVmFsdWUuc2VsZWN0ZWRWYWx1ZXNbMV0gYXMgdW5rbm93biBhcyBsbG1SZXN1bHRGb3JTZWxlY3RlZFZhbHVlc1R5cGVcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdF07XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR2YWx1ZUhlbHBUb2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzW2lkeF0uc2VsZWN0ZWRWYWx1ZXMuZm9yRWFjaCgodmFsdWUsIHN1YkluZHgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZUhlbHBUb2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzW2lkeF0uc2VsZWN0ZWRWYWx1ZXNbc3ViSW5keF0gPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB2YWx1ZSBhcyB1bmtub3duIGFzIGxsbVJlc3VsdEZvclNlbGVjdGVkVmFsdWVzVHlwZVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgdXBkYXRlZFRva2VucyA9IHRoaXMudmVyaWZ5U2luZ2xlU2VsZWN0VG9rZW5WYWx1ZXModG9rZW5zKTtcblxuXHRcdFx0Ly8gVmFsaWRhdGUgYW5kIHN0b3JlIHNvcnQgZXhwcmVzc2lvbnMgKGFwcGxpZWQgdG8gdGFibGUgZGlyZWN0bHksIG5vdCBzaG93biBhcyB0b2tlbnMpXG5cdFx0XHR0aGlzLnN0YXRlLnNvcnRlcnMgPSB0aGlzLnN1cHBvcnRzU29ydGluZyA/IHRoaXMudmFsaWRhdGVTb3J0RXhwcmVzc2lvbnMoZWFzeUZpbHRlclJlc3VsdC5kYXRhLnNvcnRlcnMpIDogW107XG5cdFx0XHR0aGlzLnN0YXRlLnNob3dSZXN1bHQgPSB0cnVlO1xuXHRcdFx0dGhpcy5zdGF0ZS50aHVtYkJ1dHRvbkVuYWJsZWQgPSB0cnVlO1xuXHRcdFx0dGhpcy5zdGF0ZS50aHVtYkRvd25CdXR0b25QcmVzc2VkID0gZmFsc2U7XG5cdFx0XHR0aGlzLnN0YXRlLnRodW1iVXBCdXR0b25QcmVzc2VkID0gZmFsc2U7XG5cdFx0XHR0aGlzLnN0YXRlLnRva2VucyA9IHVwZGF0ZWRUb2tlbnM7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdGF0ZS5ncm91cExldmVscyA9IHRoaXMuc3VwcG9ydHNHcm91cGluZyA/IHRoaXMuYXBwbHlHcm91cExldmVscyhlYXN5RmlsdGVyUmVzdWx0LmRhdGEuZ3JvdXBMZXZlbHMpIDogW107XG5cblx0XHR0aGlzLnNob3dVbnN1cHBvcnRlZENhcGFiaWxpdGllc1dhcm5pbmcoZWFzeUZpbHRlclJlc3VsdC5kYXRhLnNvcnRlcnMsIGVhc3lGaWx0ZXJSZXN1bHQuZGF0YS5ncm91cExldmVscyk7XG5cdH1cblxuXHQvKipcblx0ICogU2hvd3MgYSB3YXJuaW5nIHdoZW4gdGhlIGFwcCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBMTE0ncyBzb3J0L2dyb3VwIGV4cHJlc3Npb25zLlxuXHQgKiBAcGFyYW0gc29ydGVycyBTb3J0IGV4cHJlc3Npb25zIGZyb20gdGhlIExMTS5cblx0ICogQHBhcmFtIGdyb3VwTGV2ZWxzIEdyb3VwIGxldmVscyBmcm9tIHRoZSBMTE0uXG5cdCAqL1xuXHRwcml2YXRlIHNob3dVbnN1cHBvcnRlZENhcGFiaWxpdGllc1dhcm5pbmcoXG5cdFx0c29ydGVyczogRWFzeUZpbHRlci5FYXN5RmlsdGVyU29ydEV4cHJlc3Npb25bXSB8IHVuZGVmaW5lZCxcblx0XHRncm91cExldmVsczogRWFzeUZpbHRlci5FYXN5RmlsdGVyR3JvdXBMZXZlbERlZmluaXRpb25bXSB8IHVuZGVmaW5lZFxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBoYXNTb3J0ZXJzRnJvbUxMTSA9IHNvcnRlcnMgJiYgc29ydGVycy5sZW5ndGggPiAwO1xuXHRcdGNvbnN0IGhhc0dyb3VwTGV2ZWxzRnJvbUxMTSA9IGdyb3VwTGV2ZWxzICYmIGdyb3VwTGV2ZWxzLmxlbmd0aCA+IDA7XG5cdFx0Y29uc3Qgc29ydGluZ1Vuc3VwcG9ydGVkID0gIXRoaXMuc3VwcG9ydHNTb3J0aW5nICYmIGhhc1NvcnRlcnNGcm9tTExNO1xuXHRcdGNvbnN0IGdyb3VwaW5nVW5zdXBwb3J0ZWQgPSAhdGhpcy5zdXBwb3J0c0dyb3VwaW5nICYmIGhhc0dyb3VwTGV2ZWxzRnJvbUxMTTtcblxuXHRcdGlmIChzb3J0aW5nVW5zdXBwb3J0ZWQgJiYgZ3JvdXBpbmdVbnN1cHBvcnRlZCkge1xuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlU3RyaXAodGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9TT1JUSU5HX0FORF9HUk9VUElOR19OT1RfU1VQUE9SVEVEXCIpLCBNZXNzYWdlVHlwZS5XYXJuaW5nKTtcblx0XHR9IGVsc2UgaWYgKHNvcnRpbmdVbnN1cHBvcnRlZCkge1xuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlU3RyaXAodGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9TT1JUSU5HX05PVF9TVVBQT1JURURcIiksIE1lc3NhZ2VUeXBlLldhcm5pbmcpO1xuXHRcdH0gZWxzZSBpZiAoZ3JvdXBpbmdVbnN1cHBvcnRlZCkge1xuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlU3RyaXAodGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9HUk9VUElOR19OT1RfU1VQUE9SVEVEXCIpLCBNZXNzYWdlVHlwZS5XYXJuaW5nKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyB3aGV0aGVyIHRoZSBhcHAgc3VwcG9ydHMgc29ydGluZyBhbmQgZ3JvdXBpbmcgYmFzZWQgb24gdGFibGUgcGVyc29uYWxpemF0aW9uIHNldHRpbmdzLlxuXHQgKiBAcGFyYW0gc29ydGluZyBXaGV0aGVyIHRoZSBhcHAgc3VwcG9ydHMgc29ydGluZy5cblx0ICogQHBhcmFtIGdyb3VwaW5nIFdoZXRoZXIgdGhlIGFwcCBzdXBwb3J0cyBncm91cGluZy5cblx0ICovXG5cdHB1YmxpYyBzZXRQZXJzb25hbGl6YXRpb25TdXBwb3J0KHNvcnRpbmc6IGJvb2xlYW4sIGdyb3VwaW5nOiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5zdXBwb3J0c1NvcnRpbmcgPSBzb3J0aW5nO1xuXHRcdHRoaXMuc3VwcG9ydHNHcm91cGluZyA9IGdyb3VwaW5nO1xuXHR9XG5cblx0LyoqXG5cdCAqICBWYWxpZGF0ZXMgYW5kIHRyaWdnZXJzIHRoZSBncm91cExldmVsc0NoYW5nZWQgZnVuY3Rpb24sIHdoaWNoIHdhcm5zIGFib3V0IG5vbi1ncm91cGFibGUgZmllbGRzLlxuXHQgKiBAcGFyYW0gZ3JvdXBMZXZlbHMgVGhlIGdyb3VwIGxldmVscyB0byB2YWxpZGF0ZSBhbmQgYXBwbHlcblx0ICogQHJldHVybnMgR3JvdXBMZXZlbERlZmluaXRpb25bXSBBbiBhcnJheSBvZiB2YWxpZCBncm91cCBsZXZlbCBkZWZpbml0aW9ucyB0byBiZSBhcHBsaWVkXG5cdCAqL1xuXHRwcml2YXRlIGFwcGx5R3JvdXBMZXZlbHMoZ3JvdXBMZXZlbHM6IEdyb3VwTGV2ZWxEZWZpbml0aW9uW10gfCB1bmRlZmluZWQpOiBHcm91cExldmVsRGVmaW5pdGlvbltdIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IHRoaXMuZmlsdGVyQmFyTWV0YWRhdGEgYXMgRWFzeUZpbHRlclByb3BlcnR5TWV0YWRhdGFbXTtcblxuXHRcdGlmICghbWV0YWRhdGEgfHwgIWdyb3VwTGV2ZWxzIHx8IGdyb3VwTGV2ZWxzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJlc29sdmVGaWVsZCA9IChncm91cERlZjogR3JvdXBMZXZlbERlZmluaXRpb24pOiBFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YSB8IHVuZGVmaW5lZCA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBFYXN5RmlsdGVyVXRpbHMucmVzb2x2ZVByb3BlcnR5TmFtZShncm91cERlZi5rZXkpO1xuXHRcdFx0Y29uc3QgZmllbGQgPSBtZXRhZGF0YS5maW5kKChmKSA9PiBmLm5hbWUgPT09IGdyb3VwRGVmLmtleSB8fCBmLm5hbWUuZW5kc1dpdGgoYC8ke3Byb3BlcnR5TmFtZX1gKSk7XG5cdFx0XHRpZiAoIWZpZWxkKSB7XG5cdFx0XHRcdExvZy53YXJuaW5nKGBFYXN5RmlsdGVyQmFyQ29udGFpbmVyOiBncm91cCBrZXkgXCIke2dyb3VwRGVmLmtleX1cIiBub3QgZm91bmQgaW4gZmlsdGVyIGJhciBtZXRhZGF0YSwgc2tpcHBpbmdgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmaWVsZDtcblx0XHR9O1xuXG5cdFx0aWYgKGdyb3VwTGV2ZWxzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gbmV3IEVycm9yTWVzc2FnZUhhbmRsZXIoKTtcblx0XHRcdGNvbnN0IGZpZWxkID0gcmVzb2x2ZUZpZWxkKGdyb3VwTGV2ZWxzWzBdKTtcblx0XHRcdGlmICghZmllbGQpIHJldHVybiBbXTtcblx0XHRcdGNvbnN0IGlzR3JvdXBhYmxlID0gZXJyb3JIYW5kbGVyLmlzR3JvdXBhYmxlUHJvcGVydHkoZmllbGQpO1xuXHRcdFx0aWYgKGVycm9ySGFuZGxlci5oYXNFcnJvcnMoKSkge1xuXHRcdFx0XHR0aGlzLmFwcGVuZE1lc3NhZ2VTdHJpcChlbmNvZGVYTUwoZXJyb3JIYW5kbGVyLmdldEVycm9yTWVzc2FnZSgpKSwgTWVzc2FnZVR5cGUuV2FybmluZyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gaXNHcm91cGFibGUgPyBbZ3JvdXBMZXZlbHNbMF1dIDogW107XG5cdFx0fVxuXG5cdFx0Ly8gTXVsdGlwbGUgZ3JvdXAgbGV2ZWxzOiBmaW5kIHRoZSBmaXJzdCB2YWxpZCBncm91cGFibGUgZmllbGRcblx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSBuZXcgRXJyb3JNZXNzYWdlSGFuZGxlcigpO1xuXHRcdGxldCBmaXJzdEdyb3VwYWJsZURlZjogR3JvdXBMZXZlbERlZmluaXRpb24gfCB1bmRlZmluZWQ7XG5cdFx0bGV0IGZpcnN0R3JvdXBhYmxlTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRcdGZvciAoY29uc3QgZ3JvdXBEZWYgb2YgZ3JvdXBMZXZlbHMpIHtcblx0XHRcdGNvbnN0IGZpZWxkID0gcmVzb2x2ZUZpZWxkKGdyb3VwRGVmKTtcblx0XHRcdGlmICghZmllbGQpIGNvbnRpbnVlO1xuXHRcdFx0aWYgKGVycm9ySGFuZGxlci5pc0dyb3VwYWJsZVByb3BlcnR5KGZpZWxkKSkge1xuXHRcdFx0XHRpZiAoIWZpcnN0R3JvdXBhYmxlRGVmKSB7XG5cdFx0XHRcdFx0Zmlyc3RHcm91cGFibGVEZWYgPSBncm91cERlZjtcblx0XHRcdFx0XHRmaXJzdEdyb3VwYWJsZUxhYmVsID0gZmllbGQubGFiZWwgPz8gZmllbGQubmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChmaXJzdEdyb3VwYWJsZURlZikge1xuXHRcdFx0Y29uc3Qgd2FybmluZyA9IHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfTVVMVElQTEVfR1JPVVBfV0FSTklOR1wiLCBbZmlyc3RHcm91cGFibGVMYWJlbF0pO1xuXHRcdFx0dGhpcy5hcHBlbmRNZXNzYWdlU3RyaXAoZW5jb2RlWE1MKHdhcm5pbmcpLCBNZXNzYWdlVHlwZS5XYXJuaW5nKTtcblx0XHRcdHJldHVybiBbZmlyc3RHcm91cGFibGVEZWZdO1xuXHRcdH1cblxuXHRcdC8vIEFsbCBmaWVsZHMgYXJlIG5vbi1ncm91cGFibGVcblx0XHRpZiAoZXJyb3JIYW5kbGVyLmhhc0Vycm9ycygpKSB7XG5cdFx0XHR0aGlzLmFwcGVuZE1lc3NhZ2VTdHJpcChlbmNvZGVYTUwoZXJyb3JIYW5kbGVyLmdldEVycm9yTWVzc2FnZSgpKSwgTWVzc2FnZVR5cGUuV2FybmluZyk7XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBWYWxpZGF0ZXMgc29ydCBleHByZXNzaW9ucyBmcm9tIHRoZSBBSSByZXN1bHQgYW5kIHJldHVybnMgdmFsaWQgc29ydCBkZWZpbml0aW9ucy5cblx0ICogQHBhcmFtIHNvcnRFeHByZXNzaW9ucyBUaGUgc29ydCBleHByZXNzaW9ucyBmcm9tIHRoZSBBQkFQIHNlcnZpY2UuXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRlZCBzb3J0IGRlZmluaXRpb25zLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHJpdmF0ZSB2YWxpZGF0ZVNvcnRFeHByZXNzaW9ucyhzb3J0RXhwcmVzc2lvbnM/OiBFYXN5RmlsdGVyLkVhc3lGaWx0ZXJTb3J0RXhwcmVzc2lvbltdKTogU29ydERlZmluaXRpb25bXSB7XG5cdFx0aWYgKCFzb3J0RXhwcmVzc2lvbnMgfHwgc29ydEV4cHJlc3Npb25zLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblxuXHRcdGNvbnN0IG5vblNvcnRhYmxlRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0Y29uc3QgdmFsaWRTb3J0ZXJzID0gc29ydEV4cHJlc3Npb25zXG5cdFx0XHQuZmlsdGVyKChzb3J0RXhwcmVzc2lvbikgPT4ge1xuXHRcdFx0XHQvLyBWYWxpZGF0ZSB0aGF0IHRoZSBmaWVsZCBleGlzdHMgaW4gbWV0YWRhdGEgYW5kIGlzIHNvcnRhYmxlXG5cdFx0XHRcdGNvbnN0IGZpZWxkTWV0YWRhdGEgPSB0aGlzLmZpbHRlckJhck1ldGFkYXRhPy5maW5kKChmaWVsZCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGZpZWxkTmFtZSA9IGZpZWxkLm5hbWUuc3BsaXQoXCIvXCIpLnBvcCgpO1xuXHRcdFx0XHRcdHJldHVybiBmaWVsZE5hbWUgPT09IHNvcnRFeHByZXNzaW9uLmtleSB8fCBmaWVsZC5uYW1lID09PSBzb3J0RXhwcmVzc2lvbi5rZXk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmICghZmllbGRNZXRhZGF0YSkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChmaWVsZE1ldGFkYXRhLnNvcnRhYmxlID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdG5vblNvcnRhYmxlRmllbGRzLnB1c2goZmllbGRNZXRhZGF0YS5sYWJlbCA/PyBzb3J0RXhwcmVzc2lvbi5rZXkpO1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSlcblx0XHRcdC5tYXAoKHNvcnRFeHByZXNzaW9uKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IHNvcnRFeHByZXNzaW9uLmtleS5zcGxpdChcIi9cIikucG9wKCkgPz8gc29ydEV4cHJlc3Npb24ua2V5O1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGtleTogcHJvcGVydHlOYW1lLFxuXHRcdFx0XHRcdGRlc2NlbmRpbmc6IHNvcnRFeHByZXNzaW9uLmRlc2NlbmRpbmdcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXG5cdFx0Ly8gU2hvdyB3YXJuaW5nIG1lc3NhZ2UgZm9yIG5vbi1zb3J0YWJsZSBmaWVsZHNcblx0XHRpZiAobm9uU29ydGFibGVGaWVsZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfTk9OX1NPUlRBQkxFXCIsIFtub25Tb3J0YWJsZUZpZWxkcy5qb2luKFwiLCBcIildKTtcblx0XHRcdHRoaXMuYXBwZW5kTWVzc2FnZVN0cmlwKG1lc3NhZ2UsIE1lc3NhZ2VUeXBlLldhcm5pbmcpO1xuXHRcdH1cblxuXHRcdHJldHVybiB2YWxpZFNvcnRlcnM7XG5cdH1cblxuXHQvL2V2ZXJ5IHNpbmdsZSBzZWxlY3QgbWVudSB0eXBlIHNob3VsZCBoYXZlIG9ubHkgb25lIHZhbHVlLCBlbHNlIHNwbGljZSB0byBvbmUgdmFsdWUgYW5kIHVwZGF0ZSB0aGUgIG1lc3NhZ2Ugc3RyaXBcblx0dmVyaWZ5U2luZ2xlU2VsZWN0VG9rZW5WYWx1ZXModG9rZW5zOiBUb2tlbkRlZmluaXRpb25bXSk6IFRva2VuRGVmaW5pdGlvbltdIHtcblx0XHRjb25zdCBzaW5nbGVTZWxlY3RUb2tlbkxhYmVsczogc3RyaW5nW10gPSBbXTtcblx0XHR0b2tlbnMuZm9yRWFjaCgodG9rZW4pID0+IHtcblx0XHRcdGlmICh0b2tlbi50eXBlID09PSBcIk1lbnVXaXRoU2luZ2xlU2VsZWN0XCIpIHtcblx0XHRcdFx0aWYgKHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXNbMF0uc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdHNpbmdsZVNlbGVjdFRva2VuTGFiZWxzLnB1c2godG9rZW4ubGFiZWwpO1xuXHRcdFx0XHRcdHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXNbMF0uc2VsZWN0ZWRWYWx1ZXMuc3BsaWNlKDEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0aWYgKHNpbmdsZVNlbGVjdFRva2VuTGFiZWxzLmxlbmd0aCkge1xuXHRcdFx0dGhpcy5zdGF0ZS5zaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcFRleHQgPSB0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1NJTkdMRV9WQUxVRV9NRVNTQUdFXCIsIFtcblx0XHRcdFx0YDxzdHJvbmc+JHtzaW5nbGVTZWxlY3RUb2tlbkxhYmVscy5qb2luKFwiLCBcIil9PC9zdHJvbmc+YFxuXHRcdFx0XSk7XG5cdFx0XHR0aGlzLnN0YXRlLnNob3dTaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcCA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiB0b2tlbnM7XG5cdH1cblxuXHRjbGVhck1lc3NhZ2VTdHJpcCgpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXRlLnRodW1iRG93bkJ1dHRvblByZXNzZWQgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXRlLnRodW1iVXBCdXR0b25QcmVzc2VkID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0ZS5zaG93TWVzc2FnZVN0cmlwID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0ZS5tZXNzYWdlU3RyaXBUZXh0ID0gXCJcIjtcblx0XHR0aGlzLnN0YXRlLm1lc3NhZ2VTdHJpcFR5cGUgPSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0fVxuXG5cdGNsZWFyTWVzc2FnZVN0cmlwRm9yU2luZ2xlVmFsdWUoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS5zaG93U2luZ2xlVmFsdWVNZXNzYWdlU3RyaXAgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXRlLnNpbmdsZVZhbHVlTWVzc2FnZVN0cmlwVGV4dCA9IFwiXCI7XG5cdH1cblxuXHRzZXRNZXNzYWdlU3RyaXAodGV4dDogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYkRvd25CdXR0b25QcmVzc2VkID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYlVwQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUudGh1bWJCdXR0b25FbmFibGVkID0gdHJ1ZTtcblx0XHR0aGlzLnN0YXRlLm1lc3NhZ2VTdHJpcFRleHQgPSB0ZXh0O1xuXHRcdHRoaXMuc3RhdGUuc2hvd01lc3NhZ2VTdHJpcCA9IHRydWU7XG5cdH1cblxuXHRzZXRNZXNzYWdlU3RyaXBXaXRoVHlwZSh0ZXh0OiBzdHJpbmcsIHR5cGU6IE1lc3NhZ2VUeXBlKTogdm9pZCB7XG5cdFx0dGhpcy5zZXRNZXNzYWdlU3RyaXAodGV4dCk7XG5cdFx0dGhpcy5zdGF0ZS5tZXNzYWdlU3RyaXBUeXBlID0gdHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBlbmRzIGEgbWVzc2FnZSB0byB0aGUgZXhpc3RpbmcgbWVzc2FnZSBzdHJpcCBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIGl0LlxuXHQgKiBAcGFyYW0gdGV4dCBUaGUgbWVzc2FnZSB0ZXh0IHRvIGFwcGVuZC5cblx0ICogQHBhcmFtIHR5cGUgVGhlIG1lc3NhZ2UgdHlwZSBmb3IgdGhpcyBtZXNzYWdlLlxuXHQgKi9cblx0YXBwZW5kTWVzc2FnZVN0cmlwKHRleHQ6IHN0cmluZywgdHlwZTogTWVzc2FnZVR5cGUpOiB2b2lkIHtcblx0XHRjb25zdCBjb21iaW5lZCA9IHRoaXMuc3RhdGUuc2hvd01lc3NhZ2VTdHJpcCAmJiB0aGlzLnN0YXRlLm1lc3NhZ2VTdHJpcFRleHQgPyBgJHt0aGlzLnN0YXRlLm1lc3NhZ2VTdHJpcFRleHR9PGJyPiR7dGV4dH1gIDogdGV4dDtcblx0XHR0aGlzLnNldE1lc3NhZ2VTdHJpcFdpdGhUeXBlKGNvbWJpbmVkLCB0eXBlKTtcblx0fVxuXG5cdGNyZWF0ZVBvcG92ZXJGb3JJbm5lckNvbnRyb2xzKCk6IFBvcG92ZXIge1xuXHRcdGlmICghdGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyKSB7XG5cdFx0XHR0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIgPSAoXG5cdFx0XHRcdDxQb3BvdmVyXG5cdFx0XHRcdFx0aWQ9e3RoaXMuZ2V0SWQoKSArIFwiLWlubmVyUG9wb3ZlclwifVxuXHRcdFx0XHRcdHNob3dBcnJvdz17ZmFsc2V9XG5cdFx0XHRcdFx0c2hvd0hlYWRlcj17dHJ1ZX1cblx0XHRcdFx0XHRwbGFjZW1lbnQ9e1BsYWNlbWVudFR5cGUuQm90dG9tfVxuXHRcdFx0XHRcdGNsYXNzPVwic2FwVWlNZWRpdW1NYXJnaW5Cb3R0b21cIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGZvb3RlcjogdGhpcy5nZXRUb29sYmFyKClcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L1BvcG92ZXI+XG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyIGFzIFBvcG92ZXI7XG5cdH1cblxuXHRnZXRUb29sYmFyKCk6IE92ZXJmbG93VG9vbGJhciB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCF0aGlzLnRvb2xiYXIpIHtcblx0XHRcdGNvbnN0IG9rQnV0dG9uID0gdGhpcy5nZXRPa0J1dHRvbigpO1xuXHRcdFx0Y29uc3Qgc2hvd0FsbEJ1dHRvbiA9IHRoaXMuZ2V0U2hvd0FsbEJ1dHRvbigpO1xuXHRcdFx0dGhpcy50b29sYmFyID0gKFxuXHRcdFx0XHQ8T3ZlcmZsb3dUb29sYmFyPlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjb250ZW50OiAoXG5cdFx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdFx0PFRvb2xiYXJTcGFjZXIgLz5cblx0XHRcdFx0XHRcdFx0XHR7b2tCdXR0b259XG5cdFx0XHRcdFx0XHRcdFx0e3Nob3dBbGxCdXR0b259XG5cdFx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvT3ZlcmZsb3dUb29sYmFyPlxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMudG9vbGJhcjtcblx0fVxuXG5cdGdldE9rQnV0dG9uKCk6IEJ1dHRvbiB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCF0aGlzLm9rQnV0dG9uKSB7XG5cdFx0XHR0aGlzLm9rQnV0dG9uID0gPEJ1dHRvbiB0ZXh0PXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BPUE9WRVJfT0tcIil9IHR5cGU9e0J1dHRvblR5cGUuRW1waGFzaXplZH0gLz47XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLm9rQnV0dG9uO1xuXHR9XG5cblx0Z2V0U2hvd0FsbEJ1dHRvbigpOiBCdXR0b24gfCB1bmRlZmluZWQge1xuXHRcdGlmICghdGhpcy5zaG93QWxsQnV0dG9uKSB7XG5cdFx0XHR0aGlzLnNob3dBbGxCdXR0b24gPSA8QnV0dG9uIHRleHQ9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUE9QT1ZFUl9TSE9XX0FMTF9JVEVNU1wiKX0gLz47XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnNob3dBbGxCdXR0b247XG5cdH1cblxuXHRmb3JtYXRUb2tlbnModG9rZW5zOiBUb2tlbkRlZmluaXRpb25bXSk6IFRva2VuRGVmaW5pdGlvbltdIHtcblx0XHRyZXR1cm4gdG9rZW5zLm1hcCgodG9rZW4pID0+IHtcblx0XHRcdGlmICh0b2tlbi50eXBlID09PSBcIlZhbHVlSGVscFwiKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0Li4udG9rZW4sXG5cdFx0XHRcdFx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogdG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcy5tYXAoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvL01ha2luZyBzdXJlIHRoYXQgb25seSB0aGUgaWQgcGFydCBpcyBwYXNzZWRcblx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdG9wZXJhdG9yOiB2YWx1ZS5vcGVyYXRvcixcblx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRWYWx1ZXM6IHZhbHVlLnNlbGVjdGVkVmFsdWVzLm1hcCgodmFsKSA9PiB2YWwudmFsdWUpXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH0gYXMgVG9rZW5EZWZpbml0aW9uO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGRlZXBDbG9uZSh0b2tlbik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRvblN0YXRlQ2hhbmdlKGNoYW5nZWRQcm9wczogc3RyaW5nW10gPSBbXSk6IHZvaWQge1xuXHRcdGlmIChjaGFuZ2VkUHJvcHMuaW5jbHVkZXMoXCJ0b2tlbnNcIikpIHtcblx0XHRcdGlmICh0aGlzLnNob3VsZFRva2VuQ2hhbmdlRXZlbnRGaXJlZCkge1xuXHRcdFx0XHR0aGlzLmZpcmVFdmVudChcInRva2Vuc0NoYW5nZWRcIiwge1xuXHRcdFx0XHRcdHRva2VuczogdGhpcy5mb3JtYXRUb2tlbnModGhpcy5zdGF0ZS50b2tlbnMgYXMgdW5rbm93biBhcyBUb2tlbkRlZmluaXRpb25bXSksXG5cdFx0XHRcdFx0cmVzZXQ6IHRoaXMuaXNSZXNldHRpbmdUb0RlZmF1bHRUb2tlbnNcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnN0YXRlLnNob3dSZXN1bHQgPSB0aGlzLnN0YXRlLnRva2Vucy5sZW5ndGggPiAwO1xuXHRcdFx0aWYgKCEodGhpcy5pc01hbmRhdG9yeUNoZWNrUmVxdWlyZWQgPz8gZmFsc2UpKSB7XG5cdFx0XHRcdHRoaXMuY2hlY2tJZkFsbE1hbmRhdG9yeVRva2Vuc0ZpbGxlZCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5zaG91bGRNZXNzYWdlU3RyaXBSZW1vdmUpIHtcblx0XHRcdFx0LyoqXG5cdFx0XHRcdCAqIFRoZSB1c2VyIGhhcyBhY2tub3dsZWRnZWQgdGhlIG1lc3NhZ2Ugc3RyaXAgYW5kIHVuZGVyc3Rvb2QgdGhlIGlzc3VlLlxuXHRcdFx0XHQgKiBXaGVuIHRoZSB0b2tlbnMgYXJlIHVwZGF0ZWQgbmV4dCB0aW1lLCBkaXNwbGF5aW5nIHRoZSBtZXNzYWdlIHN0cmlwIGFnYWluIHNlcnZlcyBubyBwdXJwb3NlLlxuXHRcdFx0XHQgKiBBZGRpdGlvbmFsbHksIG9uY2UgdGhlIHRva2VucyBhcmUgdXBkYXRlZCwgdGhlIGlucHV0IGZpZWxkIHRleHQgaXMgcmVtb3ZlZFxuXHRcdFx0XHQgKiByZW5kZXJpbmcgdGhlIG1lc3NhZ2Ugc3RyaXAgaXJyZWxldmFudC4gSG93ZXZlciwgdGhlIG1lc3NhZ2Ugc3RyaXAgaXMgZGlzcGxheWVkIGFnYWluIHRoZSBuZXh0IHRpbWUgdGhlIFwiR29cIiBidXR0b24gaXMgcHJlc3NlZC5cblx0XHRcdFx0ICovXG5cdFx0XHRcdHRoaXMuY2xlYXJNZXNzYWdlU3RyaXAoKTtcblx0XHRcdFx0dGhpcy5jbGVhck1lc3NhZ2VTdHJpcEZvclNpbmdsZVZhbHVlKCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnNob3VsZE1lc3NhZ2VTdHJpcFJlbW92ZSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKGNoYW5nZWRQcm9wcy5pbmNsdWRlcyhcInNvcnRlcnNcIikpIHtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KFwic29ydGVyc0NoYW5nZWRcIiwge1xuXHRcdFx0XHRzb3J0ZXJzOiB0aGlzLnN0YXRlLnNvcnRlcnNcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGlmIChjaGFuZ2VkUHJvcHMuaW5jbHVkZXMoXCJncm91cExldmVsc1wiKSkge1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoXCJncm91cExldmVsc0NoYW5nZWRcIiwge1xuXHRcdFx0XHRncm91cExldmVsczogdGhpcy5zdGF0ZS5ncm91cExldmVsc1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8vUmVzZXR0aW5nIHRvIGRlZmF1bHQgdmFsdWVzXG5cdFx0dGhpcy5pc01hbmRhdG9yeUNoZWNrUmVxdWlyZWQgPSBmYWxzZTtcblx0XHR0aGlzLnNob3VsZFRva2VuQ2hhbmdlRXZlbnRGaXJlZCA9IHRydWU7XG5cdFx0dGhpcy5pc1Jlc2V0dGluZ1RvRGVmYXVsdFRva2VucyA9IGZhbHNlO1xuXG5cdFx0aWYgKHRoaXMudG9rZW5pemVyPy5jdXJyZW50KSB7XG5cdFx0XHQvLyAgb25zYXBmb2N1c2xlYXZlIG1ldGhvZCBpbiBzYXAubS5Ub2tlbml6ZXIgaXMgYXV0b21hdGljYWxseSBjb252ZXJ0aW5nIHRoZSByZW5kZXJtb2RlIG9mIHRva2VuaXplciB0byBcIk5hcnJvd1wiIGZyb20gXCJsb29zZVwiXG5cdFx0XHQvLyAgSW4gdGhpcyBwcm9jZXNzIHRoZXJlIGFyZSBtdWx0aXBsZSBwb3BvdmVyIGlzc3VlcyBoYXBwZW5pbmdcblx0XHRcdC8vICBTbyBhcyBhIHRlbXBvcmFyeSBmaXggb3ZlcnJpZGluZyB0aGUgZnVuY3Rpb25cblx0XHRcdCh0aGlzLnRva2VuaXplci5jdXJyZW50IGFzIEZvY3VzSGFuZGxpbmdDb250cm9sKS5vbnNhcGZvY3VzbGVhdmUgPSAoKTogdm9pZCA9PiB7fTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIG9uVGh1bWJVcFByZXNzZWQoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYlVwQnV0dG9uUHJlc3NlZCA9IHRydWU7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYkRvd25CdXR0b25QcmVzc2VkID0gZmFsc2U7XG5cdFx0dHJpZ2dlclBYSW50ZWdyYXRpb24oXCJ0aHVtYlVwXCIpO1xuXHRcdHRoaXMub25UaHVtYlByZXNzZWQoKTtcblx0fVxuXG5cdHByaXZhdGUgb25UaHVtYkRvd25QcmVzc2VkKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUudGh1bWJEb3duQnV0dG9uUHJlc3NlZCA9IHRydWU7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYlVwQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdHRyaWdnZXJQWEludGVncmF0aW9uKFwidGh1bWJEb3duXCIpO1xuXHRcdHRoaXMub25UaHVtYlByZXNzZWQoKTtcblx0fVxuXG5cdHByaXZhdGUgb25UaHVtYlByZXNzZWQoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYkJ1dHRvbkVuYWJsZWQgPSBmYWxzZTtcblx0XHRNZXNzYWdlVG9hc3Quc2hvdyh0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0VBU1lfRklMVEVSX0ZFRURCQUNLX1NFTlRcIikpO1xuXHR9XG5cblx0Y3JlYXRlQ29udGVudCgpOiBWQm94IHtcblx0XHRjb25zdCAkdG9wR29CdG4gPSBjcmVhdGVSZWZlcmVuY2U8QnV0dG9uPigpO1xuXHRcdGNvbnN0IHRodW1iVXBCdXR0b25Ub2tlbml6ZXIgPSAoXG5cdFx0XHQ8VG9nZ2xlQnV0dG9uXG5cdFx0XHRcdGljb249e1wic2FwLWljb246Ly90aHVtYi11cFwifVxuXHRcdFx0XHR0b29sdGlwPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0VBU1lfRklMVEVSX1RIVU1CU19VUFwiKX1cblx0XHRcdFx0dHlwZT17XCJUcmFuc3BhcmVudFwifVxuXHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLm9uVGh1bWJVcFByZXNzZWQoKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0ZW5hYmxlZD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidGh1bWJCdXR0b25FbmFibGVkXCIpfVxuXHRcdFx0XHRwcmVzc2VkPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0aHVtYlVwQnV0dG9uUHJlc3NlZFwiKX1cblx0XHRcdC8+XG5cdFx0KTtcblx0XHRGRVNSSGVscGVyLnNldFNlbWFudGljU3RlcG5hbWUodGh1bWJVcEJ1dHRvblRva2VuaXplciwgXCJwcmVzc1wiLCBcImZlNDplZnQ6dDp0aHVtYlVwXCIpO1xuXHRcdGNvbnN0IHRodW1iRG93bkJ1dHRvblRva2VuaXplciA9IChcblx0XHRcdDxUb2dnbGVCdXR0b25cblx0XHRcdFx0aWNvbj17XCJzYXAtaWNvbjovL3RodW1iLWRvd25cIn1cblx0XHRcdFx0dG9vbHRpcD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19FQVNZX0ZJTFRFUl9USFVNQlNfRE9XTlwiKX1cblx0XHRcdFx0dHlwZT17XCJUcmFuc3BhcmVudFwifVxuXHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLm9uVGh1bWJEb3duUHJlc3NlZCgpO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRlbmFibGVkPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0aHVtYkJ1dHRvbkVuYWJsZWRcIil9XG5cdFx0XHRcdHByZXNzZWQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRodW1iRG93bkJ1dHRvblByZXNzZWRcIil9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKHRodW1iRG93bkJ1dHRvblRva2VuaXplciwgXCJwcmVzc1wiLCBcImZlNDplZnQ6dDp0aHVtYkRvd25cIik7XG5cdFx0Y29uc3QgdGh1bWJVcEJ1dHRvbk1lc3NhZ2VTdHJpcGUgPSAoXG5cdFx0XHQ8VG9nZ2xlQnV0dG9uXG5cdFx0XHRcdGljb249e1wic2FwLWljb246Ly90aHVtYi11cFwifVxuXHRcdFx0XHR0b29sdGlwPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0VBU1lfRklMVEVSX1RIVU1CU19VUFwiKX1cblx0XHRcdFx0dHlwZT17XCJUcmFuc3BhcmVudFwifVxuXHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLm9uVGh1bWJVcFByZXNzZWQoKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0ZW5hYmxlZD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidGh1bWJCdXR0b25FbmFibGVkXCIpfVxuXHRcdFx0XHRwcmVzc2VkPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0aHVtYlVwQnV0dG9uUHJlc3NlZFwiKX1cblx0XHRcdC8+XG5cdFx0KTtcblx0XHRGRVNSSGVscGVyLnNldFNlbWFudGljU3RlcG5hbWUodGh1bWJVcEJ1dHRvbk1lc3NhZ2VTdHJpcGUsIFwicHJlc3NcIiwgXCJmZTQ6ZWZ0Om1zOnRodW1iVXBcIik7XG5cdFx0Y29uc3QgdGh1bWJEb3duQnV0dG9uTWVzc2FnZVN0cmlwZSA9IChcblx0XHRcdDxUb2dnbGVCdXR0b25cblx0XHRcdFx0aWNvbj17XCJzYXAtaWNvbjovL3RodW1iLWRvd25cIn1cblx0XHRcdFx0dG9vbHRpcD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19FQVNZX0ZJTFRFUl9USFVNQlNfRE9XTlwiKX1cblx0XHRcdFx0dHlwZT17XCJUcmFuc3BhcmVudFwifVxuXHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLm9uVGh1bWJEb3duUHJlc3NlZCgpO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRlbmFibGVkPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0aHVtYkJ1dHRvbkVuYWJsZWRcIil9XG5cdFx0XHRcdHByZXNzZWQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRodW1iRG93bkJ1dHRvblByZXNzZWRcIil9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKHRodW1iRG93bkJ1dHRvbk1lc3NhZ2VTdHJpcGUsIFwicHJlc3NcIiwgXCJmZTQ6ZWZ0Om1zOnRodW1iRG93blwiKTtcblx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYi5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb250cm9sc1wiKSBhcyBSZXNvdXJjZUJ1bmRsZTtcblx0XHRjb25zdCBhaU5vdGljZUNvbnRyb2wgPSB0aGlzLmFpTm90aWNlID8gKFxuXHRcdFx0dGhpcy5haU5vdGljZS5jbG9uZSgpXG5cdFx0KSA6IChcblx0XHRcdDxBSU5vdGljZSB0eXBlPVwiQnV0dG9uXCI+XG5cdFx0XHRcdDxWQm94PlxuXHRcdFx0XHRcdDxUZXh0IGNsYXNzPVwic2FwRmVDb250cm9sc0FpUG9wb3ZlclRleHQxXCIgdGV4dD17cmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fTk9USUNFX0FJX1BPUE9WRVJfVEVYVF8xXCIpfSAvPlxuXHRcdFx0XHRcdDxUZXh0IGNsYXNzPVwic2FwRmVDb250cm9sc0FpUG9wb3ZlclRleHQyXCIgdGV4dD17cmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fTk9USUNFX0FJX1BPUE9WRVJfVEVYVF8yXCIpfSAvPlxuXHRcdFx0XHQ8L1ZCb3g+XG5cdFx0XHQ8L0FJTm90aWNlPlxuXHRcdCk7XG5cdFx0Y29uc3Qgb3V0VkJveCA9IChcblx0XHRcdDxWQm94PlxuXHRcdFx0XHQ8RmxleEJveCByZW5kZXJUeXBlPVwiQmFyZVwiPlxuXHRcdFx0XHRcdDxFYXN5RmlsdGVySW5wdXRcblx0XHRcdFx0XHRcdHJlY29tbWVuZGVkVmFsdWVzPXt0aGlzLnJlY29tbWVuZGVkVmFsdWVzfVxuXHRcdFx0XHRcdFx0cmVmPXt0aGlzLmVhc3lGaWx0ZXJJbnB1dH1cblx0XHRcdFx0XHRcdGVudGVyUHJlc3NlZD17dGhpcy5vbkVudGVyUHJlc3NlZC5iaW5kKHRoaXMpfVxuXHRcdFx0XHRcdFx0cXVlcnlDaGFuZ2VkPXsoZSk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmZpcmVFdmVudChcInF1ZXJ5Q2hhbmdlZFwiLCB7IHF1ZXJ5OiBlLmdldFBhcmFtZXRlcihcInF1ZXJ5XCIpIH0pO1xuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdGxpdmVDaGFuZ2U9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS50b2tlbml6ZXJFZGl0YWJsZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHR0aGlzLmZpcmVFdmVudChcImxpdmVDaGFuZ2VcIiwgeyBxdWVyeTogdGhpcy5nZXRRdWVyeSgpIH0pO1xuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQvPlxuXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0aWNvbj17XCJzYXAtaWNvbjovL2FpXCJ9XG5cdFx0XHRcdFx0XHRjbGFzcz17XCJzYXBVaVNtYWxsTWFyZ2luQmVnaW5cIn1cblx0XHRcdFx0XHRcdHJlZj17JHRvcEdvQnRufVxuXHRcdFx0XHRcdFx0dGV4dD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9HT1wiKX1cblx0XHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuRW1waGFzaXplZH1cblx0XHRcdFx0XHRcdHByZXNzPXt0aGlzLm9uR29CdXR0b25QcmVzcy5iaW5kKHRoaXMpfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvRmxleEJveD5cblx0XHRcdFx0PEZsZXhCb3hcblx0XHRcdFx0XHRyZW5kZXJUeXBlPVwiQmFyZVwiXG5cdFx0XHRcdFx0dmlzaWJsZT17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwic2hvd1Jlc3VsdFwiKX1cblx0XHRcdFx0XHRhbGlnbkl0ZW1zPXtGbGV4QWxpZ25JdGVtcy5DZW50ZXJ9XG5cdFx0XHRcdFx0d3JhcD17RmxleFdyYXAuV3JhcH1cblx0XHRcdFx0XHRqdXN0aWZ5Q29udGVudD17RmxleEp1c3RpZnlDb250ZW50LlNwYWNlQmV0d2Vlbn1cblx0XHRcdFx0XHRjbGFzcz17XCJzYXBVaVRpbnlNYXJnaW5Ub3BcIn1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxGbGV4Qm94IGNsYXNzPXtcInNhcEZlQ29udHJvbHNHYXA4cHhcIn0gcmVuZGVyVHlwZT1cIkJhcmVcIiBhbGlnbkl0ZW1zPXtGbGV4QWxpZ25JdGVtcy5DZW50ZXJ9IHdyYXA9e0ZsZXhXcmFwLldyYXB9PlxuXHRcdFx0XHRcdFx0e2FpTm90aWNlQ29udHJvbH1cblx0XHRcdFx0XHRcdDxUb2tlbml6ZXJcblx0XHRcdFx0XHRcdFx0ZWRpdGFibGU9e2FuZChiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0b2tlbml6ZXJFZGl0YWJsZVwiKSwgdHJ1ZSl9XG5cdFx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcEZlQ29udHJvbHNUb2tlbml6ZXJcIn1cblx0XHRcdFx0XHRcdFx0dG9rZW5zPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0b2tlbnNcIil9XG5cdFx0XHRcdFx0XHRcdHJlbmRlck1vZGU9e1Rva2VuaXplclJlbmRlck1vZGUuTG9vc2V9XG5cdFx0XHRcdFx0XHRcdHJlZj17dGhpcy50b2tlbml6ZXJ9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0dG9rZW5zOiAoaWR4OiBudW1iZXIsIGN0eDogQ29udGV4dCk6IFRva2VuID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9iamVjdCA9IGN0eC5nZXRPYmplY3QoKSBhcyBUb2tlbkRlZmluaXRpb247XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8VG9rZW5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e3RoaXMuc3RhdGUudG9rZW5zLmtleX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbD17dGhpcy5zdGF0ZS50b2tlbnMubGFiZWx9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXRlbXM9e3RoaXMuc3RhdGUudG9rZW5zLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXN9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWFuZGF0b3J5PXt0aGlzLmlzS2V5TWFuZGF0b3J5KG9iamVjdC5rZXkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJ1c3k9e3RoaXMuc3RhdGUudG9rZW5zLmJ1c3l9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVsZXRlPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCB0b2tlbkluZGV4ID0gdGhpcy5zdGF0ZS50b2tlbnMuZmluZEluZGV4KCh0b2tlbikgPT4gdG9rZW4ua2V5ID09PSBvYmplY3Qua2V5KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG5ld1Rva2VucyA9IHRoaXMuc3RhdGUudG9rZW5zLmNvbmNhdCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bmV3VG9rZW5zLnNwbGljZSh0b2tlbkluZGV4LCAxKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUudG9rZW5zID0gbmV3VG9rZW5zO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy51cGRhdGVGaWx0ZXJJbnB1dChcInRva2VuVXBkYXRlZFwiKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZmlyZUV2ZW50KFwidG9rZW5zQ2hhbmdlZEJ5VXNlclwiLCB7IHRva2VuczogWy4uLnRoaXMuc3RhdGUudG9rZW5zXSB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGN1c3RvbURhdGE6IFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEN1c3RvbURhdGEga2V5PVwiVG9rZW5JbmZvXCIgdmFsdWU9e29iamVjdH0gLz4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxDdXN0b21EYXRhIGtleT1cInBvcG92ZXJcIiB2YWx1ZT17dGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyfSAvPixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEN1c3RvbURhdGEga2V5PVwiZWFzeUZpbHRlckJhckNvbnRhaW5lclwiIHZhbHVlPXt0aGlzfSAvPixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEN1c3RvbURhdGFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9XCJjb2RlTGlzdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e3RoaXMuZmlsdGVyQmFyTWV0YWRhdGE/LmZpbmQoKGRhdGEpID0+IGRhdGEubmFtZSA9PT0gb2JqZWN0LmtleSk/LmNvZGVMaXN0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvVG9rZW4+XG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdDwvVG9rZW5pemVyPlxuXHRcdFx0XHRcdFx0PEhCb3g+XG5cdFx0XHRcdFx0XHRcdHt0aHVtYlVwQnV0dG9uVG9rZW5pemVyfSwge3RodW1iRG93bkJ1dHRvblRva2VuaXplcn1cblx0XHRcdFx0XHRcdDwvSEJveD5cblx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0dGV4dD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9SRVNFVFwiKX1cblx0XHRcdFx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnJlc2V0U3RhdGUodHJ1ZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0Ly9SZXRhaW5pbmcgdGhlIGZvY3VzIG9uIHBvcG92ZXIgZG9lc24ndCBtYWtlIHRoZSBwb3BvdmVyIGNsb3NlIG9uIGV2ZXJ5IGludGVyYWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uJHNlYXJjaElucHV0LmZvY3VzKCk7XG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvRmxleEJveD5cblx0XHRcdFx0PC9GbGV4Qm94PlxuXHRcdFx0XHQ8VkJveCByZW5kZXJUeXBlPVwiQmFyZVwiIGNsYXNzPXtcInNhcFVpVGlueU1hcmdpblRvcCBzYXBGZUNvbnRyb2xzR2FwOHB4XCJ9PlxuXHRcdFx0XHRcdDxNZXNzYWdlU3RyaXBcblx0XHRcdFx0XHRcdHRleHQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInNpbmdsZVZhbHVlTWVzc2FnZVN0cmlwVGV4dFwiKX1cblx0XHRcdFx0XHRcdHNob3dJY29uPXt0cnVlfVxuXHRcdFx0XHRcdFx0ZW5hYmxlRm9ybWF0dGVkVGV4dD17dHJ1ZX1cblx0XHRcdFx0XHRcdHZpc2libGU9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInNob3dTaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcFwiKX1cblx0XHRcdFx0XHRcdHNob3dDbG9zZUJ1dHRvbj17dHJ1ZX1cblx0XHRcdFx0XHRcdGNsb3NlPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuY2xlYXJNZXNzYWdlU3RyaXBGb3JTaW5nbGVWYWx1ZSgpO1xuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQ+PC9NZXNzYWdlU3RyaXA+XG5cdFx0XHRcdFx0PEZsZXhCb3ggcmVuZGVyVHlwZT1cIkJhcmVcIiBjbGFzcz17XCJzYXBGZUNvbnRyb2xzR2FwOHB4XCJ9PlxuXHRcdFx0XHRcdFx0PE1lc3NhZ2VTdHJpcFxuXHRcdFx0XHRcdFx0XHR0eXBlPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJtZXNzYWdlU3RyaXBUeXBlXCIpfVxuXHRcdFx0XHRcdFx0XHR0ZXh0PXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJtZXNzYWdlU3RyaXBUZXh0XCIpfVxuXHRcdFx0XHRcdFx0XHRzaG93SWNvbj17dHJ1ZX1cblx0XHRcdFx0XHRcdFx0ZW5hYmxlRm9ybWF0dGVkVGV4dD17dHJ1ZX1cblx0XHRcdFx0XHRcdFx0c2hvd0Nsb3NlQnV0dG9uPXt0cnVlfVxuXHRcdFx0XHRcdFx0XHRjbG9zZT17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuY2xlYXJNZXNzYWdlU3RyaXAoKTtcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0dmlzaWJsZT17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwic2hvd01lc3NhZ2VTdHJpcFwiKX1cblx0XHRcdFx0XHRcdD48L01lc3NhZ2VTdHJpcD5cblx0XHRcdFx0XHRcdDxIQm94IHZpc2libGU9e2FuZChiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJzaG93TWVzc2FnZVN0cmlwXCIpLCBub3QoYmluZFN0YXRlKHRoaXMuc3RhdGUsIFwic2hvd1Jlc3VsdFwiKSkpfT5cblx0XHRcdFx0XHRcdFx0e3RodW1iVXBCdXR0b25NZXNzYWdlU3RyaXBlfSwge3RodW1iRG93bkJ1dHRvbk1lc3NhZ2VTdHJpcGV9XG5cdFx0XHRcdFx0XHQ8L0hCb3g+XG5cdFx0XHRcdFx0PC9GbGV4Qm94PlxuXHRcdFx0XHQ8L1ZCb3g+XG5cdFx0XHQ8L1ZCb3g+XG5cdFx0KSBhcyBWQm94O1xuXHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZSgkdG9wR29CdG4uY3VycmVudCEsIFwicHJlc3NcIiwgXCJmZTphaTpzZWFyY2hcIik7XG5cdFx0aWYgKHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQpIHtcblx0XHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZSh0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50LCBcImVudGVyUHJlc3NlZFwiLCBcImZlOmFpOnNlYXJjaFwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIG91dFZCb3g7XG5cdH1cblxuXHRhc3luYyBvbkdvQnV0dG9uUHJlc3MoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dGhpcy5zdGF0ZS50b2tlbml6ZXJFZGl0YWJsZSA9IHRydWU7XG5cdFx0bGV0IGN1cnJlbnRJbnB1dFZhbHVlID0gdGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uZ2V0VmFsdWUoKTtcblx0XHRjb25zdCBjdXJyZW50SW5wdXRQbGFjZWhvbGRlciA9IHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LmdldFBsYWNlaG9sZGVyKCk7XG5cblx0XHRpZiAoY3VycmVudElucHV0VmFsdWUgPT09IFwiXCIgJiYgY3VycmVudElucHV0UGxhY2Vob2xkZXIgIT09IHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUExBQ0VIT0xERVJcIikpIHtcblx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LnNldFZhbHVlKGN1cnJlbnRJbnB1dFBsYWNlaG9sZGVyIHx8IFwiXCIpO1xuXHRcdFx0Y3VycmVudElucHV0VmFsdWUgPSBjdXJyZW50SW5wdXRQbGFjZWhvbGRlcjtcblx0XHR9XG5cdFx0YXdhaXQgdGhpcy5vbkdvUHJlc3MoY3VycmVudElucHV0VmFsdWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlc2V0cyB0aGUgc3RhdGUgb2YgdGhlIEVhc3lGaWx0ZXJCYXJDb250YWluZXIgdG8gaXRzIGluaXRpYWwgY29uZmlndXJhdGlvbi5cblx0ICpcblx0ICogVGhpcyBtZXRob2QgcGVyZm9ybXMgdGhlIGZvbGxvd2luZyBhY3Rpb25zOlxuXHQgKiAtIENsZWFycyBhbGwgbm9uLW1hbmRhdG9yeSB0b2tlbnMgYW5kIHJlc2V0cyBtYW5kYXRvcnkgdG9rZW5zIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzXG5cdCAqIC0gUmVzZXRzIHRoZSBpbnB1dCBmaWVsZCB0byBpdHMgZGVmYXVsdCBwbGFjZWhvbGRlciB0ZXh0XG5cdCAqIC0gQ2xlYXJzIGFsbCBlcnJvciB2YWx1ZSBzdGF0ZXMgYW5kIG1lc3NhZ2VzIGZyb20gdG9rZW5zXG5cdCAqIC0gQ2xlYXJzIGFueSBkaXNwbGF5ZWQgbWVzc2FnZSBzdHJpcHNcblx0ICogLSBPcHRpb25hbGx5IGZpcmVzIHRoZSBjbGVhckZpbHRlcnMgZXZlbnQgdG8gbm90aWZ5IGNvbnN1bWVyc1xuXHQgKiBAcGFyYW0gY2xlYXJBbGxGaWx0ZXJzIElmIHRydWUsIGZpcmVzIHRoZSBjbGVhckZpbHRlcnMgZXZlbnQgdG8gbm90aWZ5IGNvbnN1bWVycyB0aGF0IGZpbHRlcnMgc2hvdWxkIGJlIGNsZWFyZWQgZWxzZSBqdXN0IHJlc2V0cyB0aGUgdG9rZW5zIHdpdGhvdXQgZmlyaW5nIHRoZSBldmVudFxuXHQgKiBAcGFyYW0gaXNSZXNldHRpbmdUb0RlZmF1bHRUb2tlbnMgSWYgdHJ1ZSwgaW5kaWNhdGVzIHRoYXQgdGhlIHJlc2V0QnV0dG9uIGlzIHJlc3RvcmluZyB0b2tlbnMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXNcblx0ICovXG5cblx0cmVzZXRTdGF0ZShjbGVhckFsbEZpbHRlcnMgPSB0cnVlLCBpc1Jlc2V0dGluZ1RvRGVmYXVsdFRva2VucyA9IGZhbHNlKTogdm9pZCB7XG5cdFx0aWYgKGNsZWFyQWxsRmlsdGVycykge1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoXCJjbGVhckZpbHRlcnNcIik7XG5cdFx0XHR0aGlzLnN0YXRlLmdyb3VwTGV2ZWxzID0gW107XG5cdFx0XHR0aGlzLmlzUmVzZXR0aW5nVG9EZWZhdWx0VG9rZW5zID0gaXNSZXNldHRpbmdUb0RlZmF1bHRUb2tlbnM7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2hvdWxkVG9rZW5DaGFuZ2VFdmVudEZpcmVkID0gZmFsc2U7XG5cdFx0fVxuXHRcdHRoaXMuc3RhdGUuc29ydGVycyA9IFtdO1xuXHRcdHRoaXMuc3RhdGUudG9rZW5zID0gdGhpcy5nZXREZWZhdWx0VG9rZW5zKCk7XG5cdFx0dGhpcy51cGRhdGVGaWx0ZXJJbnB1dChcInRva2VuUmVzZXRcIik7XG5cdFx0dGhpcy5zdGF0ZS50b2tlbml6ZXJFZGl0YWJsZSA9IHRydWU7XG5cdFx0dGhpcy5pc01hbmRhdG9yeUNoZWNrUmVxdWlyZWQgPSB0cnVlO1xuXHRcdC8vU2V0IHRoZSBWYWx1ZSBTdGF0ZXMgb2YgYWxsIHRoZSBUb2tlbnMgYmFjayB0byBOb25lXG5cdFx0dGhpcy50b2tlbml6ZXIuY3VycmVudD8uZ2V0VG9rZW5zKCkuZm9yRWFjaCgodG9rZW4pID0+IHRva2VuLnNldFByb3BlcnR5KFwidmFsdWVTdGF0ZVwiLCBWYWx1ZVN0YXRlLk5vbmUpKTtcblx0XHR0aGlzLnRva2VuaXplci5jdXJyZW50Py5nZXRUb2tlbnMoKS5mb3JFYWNoKCh0b2tlbikgPT4gdG9rZW4uc2V0UHJvcGVydHkoXCJ2YWx1ZVN0YXRlVGV4dFwiLCBudWxsKSk7XG5cdFx0dGhpcy5jbGVhck1lc3NhZ2VTdHJpcCgpOyAvL2NsZWFyIHRoZSBtZXNzYWdlIHN0cmlwIGZvciB2YWxpZGF0ZWQgZmlsdGVyc1xuXHRcdC8vIENsZWFyIHF1ZXJ5IHN1Y2Nlc3Mgc3RhdHVzXG5cdFx0dGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uY2xlYXJRdWVyeVN0YXR1cygpO1xuXHR9XG5cblx0Y2xlYXJGaWx0ZXJzQW5kVG9rZW5zKCk6IHZvaWQge1xuXHRcdHRoaXMuZmlyZUV2ZW50KFwiY2xlYXJGaWx0ZXJzXCIpO1xuXHRcdHRoaXMuc2hvdWxkVG9rZW5DaGFuZ2VFdmVudEZpcmVkID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0ZS50b2tlbnMgPSBbXTtcblx0fVxuXG5cdC8vVGhlIGJlbG93IGNvZGUgdXBkYXRlcyB0aGUgZXhpc3Rpbmcgc3RhdGUgYnkgZmV0Y2hpbmcgdGhlIGtleSBhbmQgc2VsZWN0ZWRWYWx1ZXNcblx0dXBkYXRlVG9rZW5BcnJheShcblx0XHRjaGFuZ2VUeXBlOiBUb2tlblNldHRlcnMsXG5cdFx0bmV3VG9rZW5TcGVjaWZpY1ZhbHVlczogVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSB8IFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdLFxuXHRcdHRva2VuS2V5OiBzdHJpbmdcblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgbmV3VG9rZW5zID0gdGhpcy5zdGF0ZS50b2tlbnMubWFwKCh0b2tlbikgPT4gKHsgLi4udG9rZW4sIGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IFsuLi50b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzXSB9KSk7XG5cdFx0Y29uc3QgdG9rZW5JbmRleCA9IG5ld1Rva2Vucy5maW5kSW5kZXgoKHQpID0+IHQua2V5ID09PSB0b2tlbktleSk7XG5cdFx0Y29uc3QgdG9rZW4gPSBuZXdUb2tlbnNbdG9rZW5JbmRleF07XG5cdFx0aWYgKHRva2VuSW5kZXggIT0gLTEpIHtcblx0XHRcdHN3aXRjaCAoY2hhbmdlVHlwZSkge1xuXHRcdFx0XHRjYXNlIFwic2V0U2VsZWN0ZWRWYWx1ZXNcIjpcblx0XHRcdFx0XHR0aGlzLnNldFNlbGVjdGVkVmFsdWVzKHRva2VuIGFzIFRva2VuRGVmaW5pdGlvbiwgbmV3VG9rZW5TcGVjaWZpY1ZhbHVlcywgdG9rZW5JbmRleCwgbmV3VG9rZW5zIGFzIFRva2VuRGVmaW5pdGlvbltdKTtcblx0XHRcdFx0XHR0b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzID0gbmV3VG9rZW5TcGVjaWZpY1ZhbHVlcztcblx0XHRcdFx0XHQvL1JlbW92ZSB0aGUgdG9rZW4gZW50aXJlbHlcblx0XHRcdFx0XHRpZiAoIXRoaXMuaXNLZXlNYW5kYXRvcnkodG9rZW4ua2V5KSAmJiB0b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdFx0bmV3VG9rZW5zLnNwbGljZSh0b2tlbkluZGV4LCAxKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiU3BlY2lmeWluZyBhIHNldHRlciB0aGF0IGlzIG91dCBvZiB0aGUgYm91bmRhcnlcIik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHQvLyBVcGRhdGUgdGhlIHN0YXRlIGJ5IGFzc2lnbmluZyB0aGUgbmV3IHRva2VucyBhcnJheVxuXHRcdFx0dGhpcy5zdGF0ZS50b2tlbnMgPSBuZXdUb2tlbnMgYXMgVG9rZW5EZWZpbml0aW9uW107XG5cdFx0XHR0aGlzLnN0YXRlLnNob3dSZXN1bHQgPSBuZXdUb2tlbnMubGVuZ3RoID4gMDtcblx0XHRcdHRoaXMudXBkYXRlRmlsdGVySW5wdXQoXCJ0b2tlblVwZGF0ZWRcIik7XG5cdFx0XHR0aGlzLmZpcmVFdmVudChcInRva2Vuc0NoYW5nZWRCeVVzZXJcIiwgeyB0b2tlbnM6IFsuLi50aGlzLnN0YXRlLnRva2Vuc10gfSk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGNsb3NlSW5uZXJDb250cm9sUG9wb3ZlcigpOiB2b2lkIHtcblx0XHR0aGlzLmlubmVyQ29udHJvbFBvcG92ZXI/LmNsb3NlKCk7XG5cdH1cblxuXHRwcml2YXRlIHNldFNlbGVjdGVkVmFsdWVzKFxuXHRcdHRva2VuOiBUb2tlbkRlZmluaXRpb24sXG5cdFx0bmV3VG9rZW5TcGVjaWZpY1ZhbHVlczogVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSB8IFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdLFxuXHRcdHRva2VuSW5kZXg6IG51bWJlcixcblx0XHRuZXdUb2tlbnM6IFRva2VuRGVmaW5pdGlvbltdXG5cdCk6IHZvaWQge1xuXHRcdHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMgPSBuZXdUb2tlblNwZWNpZmljVmFsdWVzO1xuXHRcdGlmICghdGhpcy5pc0tleU1hbmRhdG9yeSh0b2tlbi5rZXkpICYmIHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRuZXdUb2tlbnMuc3BsaWNlKHRva2VuSW5kZXgsIDEpO1xuXHRcdH1cblx0fVxuXG5cdGlzS2V5TWFuZGF0b3J5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0aWYgKCF0aGlzLm1hbmRhdG9yeUtleU1hcCkge1xuXHRcdFx0dGhpcy5tYW5kYXRvcnlLZXlNYXAgPSB7fTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMubWFuZGF0b3J5S2V5TWFwW2tleV0gPyB0cnVlIDogZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgc3RhdGUgaGFzIHNvcnQgZGVmaW5pdGlvbnMgZnJvbSB0aGUgZWFzeSBmaWx0ZXIuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGN1cnJlbnQgc3RhdGUgY29udGFpbnMgb25lIG9yIG1vcmUgc29ydGVycy5cblx0ICovXG5cdHByaXZhdGUgaGFzU29ydGVycygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5zdGF0ZS5zb3J0ZXJzLmxlbmd0aCA+IDA7XG5cdH1cblxuXHRyZW1vdmVOb25NYW5kYXRvcnlUb2tlbnMoKTogdGhpcyB7XG5cdFx0Y29uc3QgbmV3VG9rZW46IFRva2VuRGVmaW5pdGlvbltdID0gdGhpcy5zdGF0ZS50b2tlbnMuZmlsdGVyKCh0b2tlbikgPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuaXNLZXlNYW5kYXRvcnkodG9rZW4ua2V5KTtcblx0XHR9KTtcblx0XHR0aGlzLnN0YXRlLnRva2VucyA9IG5ld1Rva2VuO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0aGFzR3JvdXBMZXZlbHMoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuc3RhdGUuZ3JvdXBMZXZlbHMubGVuZ3RoID4gMDtcblx0fVxuXG5cdC8qKlxuXHQgKiBOb3RpZmllcyB0aGUgY29udGFpbmVyIHRoYXQgYW4gZXh0ZXJuYWwgdGFibGUgc3RhdGUgY2hhbmdlIChzb3J0IG9yIGdyb3VwKSBoYXMgYmVlbiBkZXRlY3RlZC5cblx0ICogSWYgdGhlIGNvbnRhaW5lciBjdXJyZW50bHkgaGFzIGFjdGl2ZSBzb3J0ZXJzIG9yIGdyb3VwIGxldmVscywgdGhlIGZpbHRlciBpbnB1dCBpcyBtYXJrZWQgZGlydHlcblx0ICogYmVjYXVzZSB0aGUgZXh0ZXJuYWwgY2hhbmdlIG1ha2VzIHRoZSBlYXN5IGZpbHRlciByZXN1bHQgaW5jb25zaXN0ZW50LlxuXHQgKi9cblx0bm90aWZ5RXh0ZXJuYWxUYWJsZVN0YXRlQ2hhbmdlKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmhhc1NvcnRlcnMoKSB8fCB0aGlzLmhhc0dyb3VwTGV2ZWxzKCkpIHtcblx0XHRcdHRoaXMudXBkYXRlRmlsdGVySW5wdXQoXCJ0b2tlblVwZGF0ZWRcIik7XG5cdFx0fVxuXHR9XG5cblx0Z2V0UXVlcnkoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uZ2V0VmFsdWUoKSA/PyBcIlwiO1xuXHR9XG5cblx0Z2V0VG9rZW5zKCk6IFRva2VuRGVmaW5pdGlvbltdIHtcblx0XHRyZXR1cm4gWy4uLnRoaXMuc3RhdGUudG9rZW5zXTtcblx0fVxuXG5cdHNldFF1ZXJ5KHF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5zZXRWYWx1ZShxdWVyeSk7XG5cdH1cblxuXHR1cGRhdGVGaWx0ZXJJbnB1dCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgY3VyclZhbHVlOiBzdHJpbmcgPSB0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5nZXRWYWx1ZSgpIHx8IFwiXCI7XG5cdFx0aWYgKHZhbHVlID09PSBcInRva2VuVXBkYXRlZFwiICYmIGN1cnJWYWx1ZSAhPT0gXCJcIikge1xuXHRcdFx0dGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uc2V0VmFsdWUoXCJcIik7XG5cdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5zZXRQbGFjZWhvbGRlcihjdXJyVmFsdWUpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgPT09IFwidG9rZW5SZXNldFwiKSB7XG5cdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5zZXRWYWx1ZShcIlwiKTtcblx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LnNldFBsYWNlaG9sZGVyKHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUExBQ0VIT0xERVJcIikpO1xuXHRcdH1cblx0fVxuXG5cdGdldFRva2Vuc0luSW5pdGlhbFN0YXRlKCk6IFRva2VuRGVmaW5pdGlvbltdIHtcblx0XHRjb25zdCBuZXdUb2tlbnMgPSB0aGlzLnN0YXRlLnRva2Vucy5tYXAoKHRva2VuKSA9PiAoeyAuLi50b2tlbiwga2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogWy4uLnRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXNdIH0pKTtcblx0XHRjb25zdCBtYW5kYXRvcnlUb2tlbnMgPSBuZXdUb2tlbnMuZmlsdGVyKCh0b2tlbikgPT4ge1xuXHRcdFx0aWYgKHRoaXMuaXNLZXlNYW5kYXRvcnkodG9rZW4ua2V5KSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gbWFuZGF0b3J5VG9rZW5zLm1hcCgodG9rZW4pID0+ICh7IC4uLnRva2VuLCBrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzOiBbXSB9KSk7XG5cdH1cblxuXHRnZXRVblNldE1hbmRhdG9yeVRva2Vuc0luQ3VycmVudFN0YXRlKCk6IFRva2VuRGVmaW5pdGlvbltdIHtcblx0XHRyZXR1cm4gdGhpcy5zdGF0ZS50b2tlbnMuZmlsdGVyKCh0b2tlbikgPT4ge1xuXHRcdFx0Y29uc3QgaXNLZXlNYW5kYXRvcnkgPSB0aGlzLmlzS2V5TWFuZGF0b3J5KHRva2VuLmtleSk7XG5cdFx0XHRpZiAoaXNLZXlNYW5kYXRvcnkpIHtcblx0XHRcdFx0cmV0dXJuIHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID09PSAwO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Z2V0QWN0dWFsVG9rZW5zRnJvbVN0YXRlKHRva2VuczogVG9rZW5EZWZpbml0aW9uW10pOiBFYXN5RmlsdGVyVG9rZW5bXSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgcmVxdWlyZWRLZXlzID0gdG9rZW5zLm1hcCgodG9rZW4pID0+IHRva2VuLmtleSk7XG5cdFx0cmV0dXJuIHRoaXMudG9rZW5pemVyLmN1cnJlbnQ/LmdldFRva2VucygpLmZpbHRlcigodG9rZW4pID0+IHJlcXVpcmVkS2V5cy5pbmNsdWRlcyh0b2tlbi5nZXRLZXkoKSkpIGFzXG5cdFx0XHR8IEVhc3lGaWx0ZXJUb2tlbltdXG5cdFx0XHR8IHVuZGVmaW5lZDtcblx0fVxuXG5cdG9uQWZ0ZXJSZW5kZXJpbmcoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmFyaWFMYWJlbEFwcGxpZWQgJiYgdGhpcy5maWx0ZXJCYXJNZXRhZGF0YSkge1xuXHRcdFx0Y29uc3QgYXJpYVRleHQgPSB0aGlzLmJ1aWxkSW5wdXRBcmlhTGFiZWwoKTtcblx0XHRcdGlmIChhcmlhVGV4dCkge1xuXHRcdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5zZXRBcmlhTGFiZWwoYXJpYVRleHQpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5hcmlhTGFiZWxBcHBsaWVkID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHRzdGF0aWMgcmVuZGVyKHJtOiBSZW5kZXJNYW5hZ2VyLCBjb250cm9sOiBFYXN5RmlsdGVyQmFyQ29udGFpbmVyKTogdm9pZCB7XG5cdFx0cmV0dXJuIGpzeC5yZW5kZXJVc2luZ1JlbmRlck1hbmFnZXIocm0sIGNvbnRyb2wsICgpID0+IHtcblx0XHRcdHJldHVybiA8c3BhbiByZWY9e2NvbnRyb2x9Pntjb250cm9sLmdldEFnZ3JlZ2F0aW9uKFwiY29udGVudFwiKX08L3NwYW4+O1xuXHRcdH0pO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBeURB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