@media-quest/builder 0.0.11 → 0.0.13

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.
@@ -45,11 +45,11 @@ __export(public_api_exports, {
45
45
  RuleInput: () => RuleInput,
46
46
  RuleOptionSelectItem: () => RuleOptionSelectItem,
47
47
  RuleVariableSelectItem: () => RuleVariableSelectItem,
48
+ SchemaPrefix: () => SchemaPrefix,
48
49
  SingleSelectItem: () => SingleSelectItem,
49
50
  TagActionManager: () => TagActionManager,
50
51
  TagCollection: () => TagCollection,
51
- VarID: () => VarID,
52
- createRandomPrefix: () => createRandomPrefix
52
+ VarID: () => VarID
53
53
  });
54
54
  module.exports = __toCommonJS(public_api_exports);
55
55
 
@@ -119,38 +119,78 @@ var BuilderOptionTheme;
119
119
  const BTN_SHORT_WIDTH = 13.7;
120
120
  const FONT_WEIGHT = 600;
121
121
  const FONT_SIZE = 35;
122
- BuilderOptionTheme2.blueButton = () => ({
123
- name: "blue-button-theme",
124
- div: {
125
- css: {
126
- backgroundColor: BLUE,
127
- borderColor: BLUE,
128
- textColor: WHITE,
129
- fontSize: { _unit: "px", value: FONT_SIZE },
130
- borderWidth: { _unit: "px", value: BTN_BORDER_WIDTH },
131
- borderStyle: BTN_BORDER_STYLE,
132
- borderRadius: { value: BTN_BORDER_RADIUS, _unit: "px" },
133
- padding: { _unit: "px", value: 40 },
134
- h: BTN_HEIGHT,
135
- w: BTN_WIDTH,
136
- x: 10,
137
- y: 8,
138
- textAlign: "center"
122
+ BuilderOptionTheme2.blueButton = () => {
123
+ const optionTheme = {
124
+ name: "blue-button-theme",
125
+ normal: {
126
+ btn: {
127
+ css: {
128
+ backgroundColor: BLUE,
129
+ borderColor: BLUE,
130
+ textColor: WHITE,
131
+ fontSize: { _unit: "px", value: FONT_SIZE },
132
+ borderWidth: { _unit: "px", value: BTN_BORDER_WIDTH },
133
+ borderStyle: BTN_BORDER_STYLE,
134
+ borderRadius: { value: BTN_BORDER_RADIUS, _unit: "px" },
135
+ padding: { _unit: "px", value: 40 },
136
+ h: BTN_HEIGHT,
137
+ w: BTN_WIDTH,
138
+ x: 10,
139
+ y: 8,
140
+ textAlign: "center"
141
+ },
142
+ cssDisabled: { opacity: 0.3, cursor: "not-allowed" },
143
+ cssEnabled: { opacity: 1, cursor: "pointer" }
144
+ },
145
+ divider: {},
146
+ text1: {
147
+ y: 50,
148
+ transform: "translate(0%, 50%)",
149
+ textColor: WHITE,
150
+ fontSize: { _unit: "px", value: FONT_SIZE },
151
+ w: 84,
152
+ x: 8,
153
+ fontWeight: FONT_WEIGHT,
154
+ textAlign: "center"
155
+ },
156
+ text2: {}
139
157
  },
140
- cssDisabled: { opacity: 0.3, cursor: "not-allowed" },
141
- cssEnabled: { opacity: 1, cursor: "pointer" }
142
- },
143
- text1: {
144
- y: 50,
145
- transform: "translate(0%, 50%)",
146
- textColor: WHITE,
147
- fontSize: { _unit: "px", value: FONT_SIZE },
148
- w: 84,
149
- x: 8,
150
- fontWeight: FONT_WEIGHT,
151
- textAlign: "center"
152
- }
153
- });
158
+ dontKnow: {
159
+ btn: {
160
+ css: {
161
+ backgroundColor: WHITE,
162
+ borderColor: LIGHT_BLUE,
163
+ textColor: BLUE,
164
+ fontSize: { _unit: "px", value: FONT_SIZE },
165
+ borderWidth: { _unit: "px", value: BTN_BORDER_WIDTH },
166
+ borderStyle: BTN_BORDER_STYLE,
167
+ borderRadius: { value: BTN_BORDER_RADIUS, _unit: "px" },
168
+ padding: { _unit: "px", value: 40 },
169
+ h: BTN_HEIGHT,
170
+ w: BTN_SHORT_WIDTH,
171
+ x: 10,
172
+ y: 8,
173
+ textAlign: "center"
174
+ },
175
+ cssDisabled: { opacity: 0.3, cursor: "not-allowed" },
176
+ cssEnabled: { opacity: 1, cursor: "pointer" }
177
+ },
178
+ text1: {
179
+ y: 50,
180
+ transform: "translate(0%, 50%)",
181
+ textColor: BLUE,
182
+ fontSize: { _unit: "px", value: FONT_SIZE },
183
+ w: 84,
184
+ x: 8,
185
+ fontWeight: FONT_WEIGHT,
186
+ textAlign: "center"
187
+ },
188
+ text2: {},
189
+ divider: {}
190
+ }
191
+ };
192
+ return optionTheme;
193
+ };
154
194
  })(BuilderOptionTheme || (BuilderOptionTheme = {}));
155
195
  var DefaultTheme = {
156
196
  name: "default-theme",
@@ -2119,7 +2159,6 @@ var DefaultThemeCompiler = class extends AbstractThemeCompiler {
2119
2159
  compileButton(pageId, buttonDto, options) {
2120
2160
  const factsCollected = [];
2121
2161
  const { id, value, label } = buttonDto;
2122
- const { div, text1 } = DefaultTheme.responseButtons;
2123
2162
  if (options.kind === "response-button") {
2124
2163
  const fact = {
2125
2164
  kind: "numeric-fact",
@@ -2139,6 +2178,8 @@ var DefaultThemeCompiler = class extends AbstractThemeCompiler {
2139
2178
  factsCollected
2140
2179
  }
2141
2180
  };
2181
+ const btnStyles = value === 9 ? DefaultTheme.responseButtons.dontKnow : DefaultTheme.responseButtons.normal;
2182
+ console.log(btnStyles);
2142
2183
  const btn = {
2143
2184
  id,
2144
2185
  _tag: "div",
@@ -2147,17 +2188,17 @@ var DefaultThemeCompiler = class extends AbstractThemeCompiler {
2147
2188
  _tag: "p",
2148
2189
  id: U3.randomString(30),
2149
2190
  text: label,
2150
- style: text1
2191
+ style: btnStyles.text1
2151
2192
  }
2152
2193
  ],
2153
2194
  onStateChange: [
2154
2195
  {
2155
2196
  queryName: DStateProps._Queries.disableUserInputQuery.name,
2156
- whenFalse: [...ThemeUtils.enableClickCommands(id, div.cssEnabled)],
2157
- whenTrue: [...ThemeUtils.disableClickCommands(id, div.cssDisabled)]
2197
+ whenFalse: [...ThemeUtils.enableClickCommands(id, btnStyles.btn.cssEnabled)],
2198
+ whenTrue: [...ThemeUtils.disableClickCommands(id, btnStyles.btn.cssDisabled)]
2158
2199
  }
2159
2200
  ],
2160
- style: { ...div.css, ...div.cssEnabled },
2201
+ style: { ...btnStyles.btn.css, ...btnStyles.btn.cssEnabled },
2161
2202
  onClick: [onClickHandler]
2162
2203
  };
2163
2204
  if (options.kind === "next-button") {
@@ -2434,10 +2475,10 @@ var BuilderText = class _BuilderText extends BuilderObject {
2434
2475
  RuleInput,
2435
2476
  RuleOptionSelectItem,
2436
2477
  RuleVariableSelectItem,
2478
+ SchemaPrefix,
2437
2479
  SingleSelectItem,
2438
2480
  TagActionManager,
2439
2481
  TagCollection,
2440
- VarID,
2441
- createRandomPrefix
2482
+ VarID
2442
2483
  });
2443
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3B1YmxpYy1hcGkudHMiLCAiLi4vc3JjL0J1aWxkZXJPYmplY3QudHMiLCAiLi4vc3JjL3RoZW1lL2ljb24tdXJscy50cyIsICIuLi9zcmMvdGhlbWUvSURlZmF1bHRUaGVtZS50cyIsICIuLi9zcmMvQnVpbGRlci1vcHRpb24udHMiLCAiLi4vc3JjL0J1aWxkZXItcXVlc3Rpb24udHMiLCAiLi4vc3JjL0J1aWxkZXJNYWluVGV4dC50cyIsICIuLi9zcmMvcnVsZWJ1aWxkZXIvUnVsZVZhcmlhYmxlLnRzIiwgIi4uL3NyYy9CdWlsZGVyLXBhZ2UudHMiLCAiLi4vc3JjL3ByaW1pdGl2ZXMvc2NoZW1hLXByZWZpeC50cyIsICIuLi9zcmMvcHJpbWl0aXZlcy9wYWdlLXByZWZpeC50cyIsICIuLi9zcmMvcHJpbWl0aXZlcy92YXJJRC50cyIsICIuLi9zcmMvcnVsZWJ1aWxkZXIvU2luZ2xlU2VsZWN0SXRlbS50cyIsICIuLi9zcmMvcnVsZWJ1aWxkZXIvUnVsZUlucHV0LnRzIiwgIi4uL3NyYy9CdWlsZGVyVGFnLnRzIiwgIi4uL3NyYy9ydWxlYnVpbGRlci9jb25kaXRpb24vQnVpbGRlci1vcGVyYXRvci50cyIsICIuLi9zcmMvcnVsZWJ1aWxkZXIvY29uZGl0aW9uL0J1aWxkZXItY29uZGl0aW9uLnRzIiwgIi4uL3NyYy9ydWxlYnVpbGRlci9jb25kaXRpb24vQnVpbGRlci1jb25kaXRpb24tZ3JvdXAudHMiLCAiLi4vc3JjL3J1bGVidWlsZGVyL211bHRpLXNlbGVjdC1pdGVtLnRzIiwgIi4uL3NyYy9ydWxlYnVpbGRlci90YWctYWN0aW9uLW1hbmFnZXIudHMiLCAiLi4vc3JjL3J1bGVidWlsZGVyL3BhZ2UtYWN0aW9uLW1hbmFnZXIudHMiLCAiLi4vc3JjL3J1bGVidWlsZGVyL2p1bXAtdG8tYWN0aW9uLW1hbmFnZXIudHMiLCAiLi4vc3JjL3J1bGVidWlsZGVyL0J1aWxkZXItcnVsZS50cyIsICIuLi9zcmMvdGhlbWUvQWJzdHJhY3RUaGVtZUNvbXBpbGVyLnRzIiwgIi4uL3NyYy90aGVtZS9zdGFuZGFyZC1wcm9wcy50cyIsICIuLi9zcmMvdGhlbWUvdGhlbWUtdXRpbHMudHMiLCAiLi4vc3JjL3RoZW1lL2RlZmF1bHQtdGhlbWUtY29tcGlsZXIudHMiLCAiLi4vc3JjL0J1aWxkZXItc2NoZW1hLnRzIiwgIi4uL3NyYy9CdWlsZGVyLXRleHQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCB7IHR5cGUgQnVpbGRlck9wdGlvbkR0bywgQnVpbGRlck9wdGlvbiB9IGZyb20gXCIuL0J1aWxkZXItb3B0aW9uXCI7XG5leHBvcnQgeyB0eXBlIEJ1aWxkZXJQYWdlRHRvLCB0eXBlIEJ1aWxkZXJQYWdlVHlwZSwgQnVpbGRlclBhZ2UgfSBmcm9tIFwiLi9CdWlsZGVyLXBhZ2VcIjtcbmV4cG9ydCB7IHR5cGUgQnVpbGRlclF1ZXN0aW9uRHRvLCBCdWlsZGVyUXVlc3Rpb24sIHR5cGUgQnVpbGRlclF1ZXN0aW9uVHlwZSB9IGZyb20gXCIuL0J1aWxkZXItcXVlc3Rpb25cIjtcbmV4cG9ydCB7IEJ1aWxkZXJTY2hlbWEsIHR5cGUgQnVpbGRlclNjaGVtYUR0byB9IGZyb20gXCIuL0J1aWxkZXItc2NoZW1hXCI7XG5leHBvcnQgeyBCdWlsZGVyVGV4dCwgdHlwZSBCdWlsZGVyVGV4dER0byB9IGZyb20gXCIuL0J1aWxkZXItdGV4dFwiO1xuZXhwb3J0IHsgdHlwZSBCdWlsZGVyTWFpbkltYWdlRHRvIH0gZnJvbSBcIi4vQnVpbGRlck1haW5JbWFnZUR0b1wiO1xuZXhwb3J0IHsgQnVpbGRlck1haW5UZXh0LCB0eXBlIEJ1aWxkZXJNYWluVGV4dER0byB9IGZyb20gXCIuL0J1aWxkZXJNYWluVGV4dFwiO1xuZXhwb3J0IHsgdHlwZSBCdWlsZGVyTWFpblZpZGVvRHRvIH0gZnJvbSBcIi4vQnVpbGRlck1haW5WaWRlb0R0b1wiO1xuZXhwb3J0IHsgdHlwZSBCdWlsZGVyVGFnRHRvLCBCdWlsZGVyVGFnLCBUYWdDb2xsZWN0aW9uIH0gZnJvbSBcIi4vQnVpbGRlclRhZ1wiO1xuZXhwb3J0IHsgdHlwZSBBdWRpb0ZpbGUsIHR5cGUgSW1hZ2VGaWxlLCB0eXBlIFZpZGVvRmlsZSB9IGZyb20gXCIuL21lZGlhLWZpbGVzXCI7XG4vLyBQdWJsaWMgQXBpIG9mIHJ1bGUtYnVpbGRlclxuZXhwb3J0ICogZnJvbSBcIi4vcnVsZWJ1aWxkZXJcIjtcbmV4cG9ydCB7IFBhZ2VQcmVmaXggfSBmcm9tIFwiLi9wcmltaXRpdmVzL3BhZ2UtcHJlZml4XCI7XG5leHBvcnQgeyBjcmVhdGVSYW5kb21QcmVmaXggfSBmcm9tIFwiLi9wcmltaXRpdmVzL3BhZ2UtcHJlZml4XCI7XG5leHBvcnQgeyBQYWdlUHJlZml4VmFsdWUgfSBmcm9tIFwiLi9wcmltaXRpdmVzL3BhZ2UtcHJlZml4XCI7XG5leHBvcnQgeyBWYXJJRCB9IGZyb20gXCIuL3ByaW1pdGl2ZXMvdmFySURcIjtcbiIsICJpbXBvcnQgeyBEVXRpbCB9IGZyb20gXCJAbWVkaWEtcXVlc3QvZW5naW5lXCI7XG5cbmNvbnN0IFUgPSBEVXRpbDtcbi8qKlxuICogQnVpbGRlciBvYmplY3RzIGFyZSBjb21wbGV4IG9iamVjdHMgdGhhdCBhcmUgZW1iZWRkZWQgaW5zaWRlXG4gKiBhIEJ1aWxkZXItc2NoZW1hLCBhbmQgbmVlZHMgdG8gYmUgc2VyaWFsaXplZCB0byBqc29uLiBPZnRlbiB0aGVzZSBvYmplY3RzXG4gKiBhcmUgdXNlZCBpbiBjb2xsZWN0aW9ucywgYW5kIHRoYXQgaXMgd2h5IG1vc3Qgb2YgdGhlbSBuZWVkIGFuIGlkLlxuICovXG50eXBlIEJ1aWxkZXJPYmplY3RUeXBlID1cbiAgfCBcImJ1aWxkZXItcGFnZVwiXG4gIHwgXCJidWlsZGVyLXF1ZXN0aW9uLW9wdGlvblwiXG4gIHwgXCJidWlsZGVyLXF1ZXN0aW9uXCJcbiAgfCBcImJ1aWxkZXItbWFpbi10ZXh0XCJcbiAgfCBcImJ1aWxkZXItdGV4dFwiXG4gIHwgXCJidWlsZGVyLXJ1bGVcIlxuICB8IFwiYnVpbGRlci10YWdcIlxuICB8IFwiYnVpbGRlci1jb25kaXRpb25cIlxuICB8IFwiYnVpbGRlci12YXJpYWJsZVwiXG4gIHwgXCJidWlsZGVyLWNvbmRpdGlvbi1ncm91cFwiO1xuXG5leHBvcnQgbmFtZXNwYWNlIEJ1aWxkZXJPYmplY3RJZCB7XG4gIGV4cG9ydCB0eXBlIFF1ZXN0aW9uT3B0aW9uSUQgPSBzdHJpbmcgJiB7IF9fT1BUSU9OX19JRF9fOiB0cnVlIH07XG4gIGV4cG9ydCB0eXBlIFF1ZXN0aW9uSUQgPSBzdHJpbmcgJiB7IF9fUVVFU1RJT05fX0lEX186IHRydWUgfTtcbiAgZXhwb3J0IHR5cGUgVGV4dElEID0gc3RyaW5nICYgeyBfX1RFWFRfX0lEX186IHRydWUgfTtcbiAgZXhwb3J0IHR5cGUgTWFpblRleHRJRCA9IHN0cmluZyAmIHsgX19NQUlOX19URVhUX19JRF9fOiB0cnVlIH07XG4gIGV4cG9ydCB0eXBlIFRhZ0lkID0gc3RyaW5nICYgeyBfX1RBR19fSURfXzogdHJ1ZSB9O1xuICBleHBvcnQgY29uc3QgY3JlYXRlVGFnSWQgPSAoKTogVGFnSWQgPT4ge1xuICAgIHJldHVybiBjcmVhdGVJZChcImJ1aWxkZXItdGFnXCIpIGFzIFRhZ0lkO1xuICB9O1xuXG4gIGV4cG9ydCBjb25zdCBtYWluVGV4dElkID0gKCk6IE1haW5UZXh0SUQgPT4ge1xuICAgIHJldHVybiBjcmVhdGVJZChcImJ1aWxkZXItbWFpbi10ZXh0XCIpIGFzIE1haW5UZXh0SUQ7XG4gIH07XG4gIGV4cG9ydCBjb25zdCB0ZXh0SWQgPSAoKTogVGV4dElEID0+IHtcbiAgICByZXR1cm4gY3JlYXRlSWQoXCJidWlsZGVyLXRleHRcIikgYXMgVGV4dElEO1xuICB9O1xuXG4gIGV4cG9ydCBjb25zdCBxdWVzdGlvbk9wdGlvbklkID0gKCk6IFF1ZXN0aW9uT3B0aW9uSUQgPT4ge1xuICAgIHJldHVybiBjcmVhdGVJZChcImJ1aWxkZXItcXVlc3Rpb24tb3B0aW9uXCIpIGFzIFF1ZXN0aW9uT3B0aW9uSUQ7XG4gIH07XG4gIGV4cG9ydCBjb25zdCBxdWVzdGlvbklkID0gKCk6IFF1ZXN0aW9uSUQgPT4ge1xuICAgIHJldHVybiBjcmVhdGVJZChcImJ1aWxkZXItcXVlc3Rpb25cIikgYXMgUXVlc3Rpb25JRDtcbiAgfTtcblxuICBjb25zdCBjcmVhdGVJZCA9ICh0eXBlOiBCdWlsZGVyT2JqZWN0VHlwZSk6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgaWQgPSBVLnJhbmRvbVN0cmluZygyNCk7XG4gICAgcmV0dXJuIHR5cGUgKyBcIi1cIiArIGlkO1xuICB9O1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQnVpbGRlck9iamVjdDxUIGV4dGVuZHMgQnVpbGRlck9iamVjdFR5cGUsIER0byBleHRlbmRzIHt9PiB7XG4gIC8vIGFic3RyYWN0IHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIGFic3RyYWN0IHJlYWRvbmx5IG9iamVjdFR5cGU6IFQ7XG4gIGFic3RyYWN0IHRvSnNvbigpOiBEdG87XG4gIGFic3RyYWN0IGNsb25lKCk6IER0bztcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG9yaWdpbmFsRHRvOiBEdG87XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihkdG86IER0bykge1xuICAgIHRoaXMub3JpZ2luYWxEdG8gPSBkdG87XG4gICAgLy8gdGhpcy5vYmplY3RJZCA9IGR0by5vYmplY3RJZDtcbiAgfVxufVxuIiwgImV4cG9ydCBjb25zdCBJY29uVXJscyA9IHtcbiAgaXNwZVdoaXRlUG5nOlxuICAgICdodHRwczovL2ZpcmViYXNlc3RvcmFnZS5nb29nbGVhcGlzLmNvbS92MC9iL2lzcGUtYmFja2VuZC1kZXYuYXBwc3BvdC5jb20vby9wdWJsaWMtYXNzZXRzJTJGaXNwZS1odml0LnBuZz9hbHQ9bWVkaWEmdG9rZW49ZjZmZTYyOGItMmQ5OS00NzJkLWEyZWEtZTA2Mjg3M2UyZTIyJyxcbiAgcGF1c2VTdmc6XG4gICAgJ2h0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZwYXVzZS0yNHB4LnN2Zz9hbHQ9bWVkaWEmdG9rZW49NDczMzc0OTEtYmIwZC00YzU2LTljODktYTA3M2NlMTlmYWQ0JyxcbiAgcGF1c2VDaXJjbGVPdXRsaW5lU3ZnOlxuICAgICdodHRwczovL2ZpcmViYXNlc3RvcmFnZS5nb29nbGVhcGlzLmNvbS92MC9iL2lzcGUtYmFja2VuZC1kZXYuYXBwc3BvdC5jb20vby9wdWJsaWMtYXNzZXRzJTJGcGF1c2VfY2lyY2xlX291dGxpbmUtMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPTEzM2FhYmM4LWFiOWEtNGVhYS05OTE0LTRmMGY4MmMyMmVlMicsXG5cbiAgcGF1c2VDaXJjbGVGaWxsZWRTdmc6XG4gICAgJ2h0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZwYXVzZV9jaXJjbGVfZmlsbGVkLTI0cHguc3ZnP2FsdD1tZWRpYSZ0b2tlbj1hZjNmMTJjMy0zMTk5LTQwOTYtOGVkMi03NjM0N2I5YTBhMGEnLFxuICBwbGF5Q2lyY2xlUmVndWxhcjpcbiAgICAnaHR0cHM6Ly9maXJlYmFzZXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vdjAvYi9pc3BlLWJhY2tlbmQtZGV2LmFwcHNwb3QuY29tL28vcHVibGljLWFzc2V0cyUyRnBsYXktY2lyY2xlLXJlZ3VsYXIuc3ZnP2FsdD1tZWRpYSZ0b2tlbj0wODY3YjY5MC1kN2ZkLTQ3NWMtOGU5MS1iMmQ3YWVjYTU0ZDEnLFxuICBwbGF5QXJyb3dTdmc6XG4gICAgJ2h0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZwbGF5X2Fycm93LTI0cHguc3ZnP2FsdD1tZWRpYSZ0b2tlbj0yZmE5NWUxZi02MWY3LTRhMTgtYWZiMy0yMTBlYWJhZTgyMjcnLFxuICBwbGF5Q2lyY2xlT3V0bGluZTpcbiAgICAnaHR0cHM6Ly9maXJlYmFzZXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vdjAvYi9pc3BlLWJhY2tlbmQtZGV2LmFwcHNwb3QuY29tL28vcHVibGljLWFzc2V0cyUyRnBsYXlfY2lyY2xlX291dGxpbmUtMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPTNhOWY2MmM1LWRmYTItNDBlZi1hNTBlLWNmMWJkZDJkNDdmMicsXG5cbiAgc3RvcENpcmNsZVN2ZzpcbiAgICAnaHR0cHM6Ly9maXJlYmFzZXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vdjAvYi9pc3BlLWJhY2tlbmQtZGV2LmFwcHNwb3QuY29tL28vcHVibGljLWFzc2V0cyUyRnN0b3BfY2lyY2xlLTI0cHguc3ZnP2FsdD1tZWRpYSZ0b2tlbj04ZmJjOGI4OS0yOWJiLTQ5YWQtYWUxMS1iODg4MmJhM2NhNzcnLFxuICBzdG9wU3ZnOlxuICAgICdodHRwczovL2ZpcmViYXNlc3RvcmFnZS5nb29nbGVhcGlzLmNvbS92MC9iL2lzcGUtYmFja2VuZC1kZXYuYXBwc3BvdC5jb20vby9wdWJsaWMtYXNzZXRzJTJGc3RvcC0yNHB4LnN2Zz9hbHQ9bWVkaWEmdG9rZW49ZDJjZDQxZjEtMTMzMS00MjQzLTliN2EtZGMwZjBjY2QyNTVkJyxcbiAgcmVwbGF5Q2lyY2xlU3ZnOlxuICAgICdodHRwczovL2ZpcmViYXNlc3RvcmFnZS5nb29nbGVhcGlzLmNvbS92MC9iL2lzcGUtYmFja2VuZC1kZXYuYXBwc3BvdC5jb20vby9wdWJsaWMtYXNzZXRzJTJGcmVwbGF5LTI0cHguc3ZnP2FsdD1tZWRpYSZ0b2tlbj0zYzM1Y2NmNC1iNDY3LTRlODEtODVkNi1iMzZhYzY0NzM4YWQnLFxuXG4gIHZvbHVtZU9mZlN2ZzpcbiAgICAnaHR0cHM6Ly9maXJlYmFzZXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vdjAvYi9pc3BlLWJhY2tlbmQtZGV2LmFwcHNwb3QuY29tL28vcHVibGljLWFzc2V0cyUyRnZvbHVtZV9vZmYtMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPTRlNDFjYzEwLTlmNGItNDk2Ny1iNGRmLWVkMDY4MmU2NTdhOScsXG4gIHZvbHVtZVVwU3ZnOlxuICAgICdodHRwczovL2ZpcmViYXNlc3RvcmFnZS5nb29nbGVhcGlzLmNvbS92MC9iL2lzcGUtYmFja2VuZC1kZXYuYXBwc3BvdC5jb20vby9wdWJsaWMtYXNzZXRzJTJGdm9sdW1lX3VwLTI0cHguc3ZnP2FsdD1tZWRpYSZ0b2tlbj01NTFiZDBhNi1hNTE1LTRmODctYTI0NS1kYTQzM2Y0ODMzZjknXG59O1xuIiwgImltcG9ydCB0eXBlIHsgQ3NzVGhlbWUgfSBmcm9tIFwiLi9jc3MtdGhlbWVcIjtcbmltcG9ydCB7IERTdHlsZSwgRENzcyB9IGZyb20gXCJAbWVkaWEtcXVlc3QvZW5naW5lXCI7XG5pbXBvcnQgeyBJY29uVXJscyB9IGZyb20gXCIuL2ljb24tdXJsc1wiO1xuXG50eXBlIFBTdHlsZSA9IFBhcnRpYWw8RFN0eWxlPjtcbmV4cG9ydCBpbnRlcmZhY2UgSURlZmF1bHRUaGVtZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgaW1hZ2U6IHsgc3R5bGU6IFBTdHlsZSB9O1xuICB2aWRlb1BsYXllcjoge1xuICAgIHBsYXlCdXR0b246IHtcbiAgICAgIGljb25Vcmw6IHN0cmluZztcbiAgICAgIGNzczogUFN0eWxlO1xuICAgICAgY3NzRGlzYWJsZWQ6IFBTdHlsZTtcbiAgICAgIGNzc0VuYWJsZWQ6IFBTdHlsZTtcbiAgICB9O1xuICAgIHBhdXNlQnV0dG9uOiB7XG4gICAgICBpY29uVXJsOiBzdHJpbmc7XG4gICAgICBjc3M6IFBTdHlsZTtcbiAgICAgIGNzc0Rpc2FibGVkOiBQU3R5bGU7XG4gICAgICBjc3NFbmFibGVkOiBQU3R5bGU7XG4gICAgfTtcbiAgICB2aWRlb0VsZW1lbnQ6IHtcbiAgICAgIGNzczogUFN0eWxlO1xuICAgIH07XG4gIH07XG4gIG1haW5UZXh0OiB7XG4gICAgbm9NZWRpYToge1xuICAgICAgdGV4dDogeyBjc3M6IFBTdHlsZTsgY3NzRGlzYWJsZWQ6IFBTdHlsZTsgY3NzRW5hYmxlZDogUFN0eWxlIH07XG4gICAgICBhdWRpbzogeyBjc3M6IFBTdHlsZTsgY3NzRGlzYWJsZWQ6IFBTdHlsZTsgY3NzRW5hYmxlZDogUFN0eWxlIH07XG4gICAgfTtcbiAgICB3aXRoTWVkaWE6IHtcbiAgICAgIHRleHQ6IHsgY3NzOiBQU3R5bGU7IGNzc0Rpc2FibGVkOiBQU3R5bGU7IGNzc0VuYWJsZWQ6IFBTdHlsZSB9O1xuICAgICAgYXVkaW86IHsgY3NzOiBQU3R5bGU7IGNzc0Rpc2FibGVkOiBQU3R5bGU7IGNzc0VuYWJsZWQ6IFBTdHlsZSB9O1xuICAgIH07XG4gIH07XG4gIC8vIG1haW5UZXh0VGhlbWU6IEJ1aWxkZXJUZXh0VGhlbWU7XG4gIHJlc3BvbnNlQnV0dG9uczogQnVpbGRlck9wdGlvblRoZW1lO1xuICBuZXh0QnV0dG9uVGhlbWU6IEJ1aWxkZXJPcHRpb25UaGVtZTtcbiAgLy8gbWFpblF1ZXN0aW9uVGV4dDogQnVpbGRlclRleHRUaGVtZTtcbiAgZG9udEtub3dCdXR0b25UaGVtZT86IEJ1aWxkZXJPcHRpb25UaGVtZTtcbiAgYnV0dG9uVGhlbWVzPzogQXJyYXk8QnVpbGRlck9wdGlvblRoZW1lPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZGVyT3B0aW9uVGhlbWUge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRpdjogQ3NzVGhlbWU7XG4gIHRleHQxOiBQU3R5bGU7XG4gIHRleHQyPzogQ3NzVGhlbWU7XG59XG5cbm5hbWVzcGFjZSBCdWlsZGVyT3B0aW9uVGhlbWUge1xuICBjb25zdCBHUkVFTiA9IFwiIzcwQUQ0N1wiO1xuICBjb25zdCBZRUxMT1cgPSBcIiNGRkMwMDBcIjtcbiAgY29uc3QgT1JBTkdFID0gXCIjRjQ5MDJDXCI7XG4gIGNvbnN0IFJFRCA9IFwiI0ZGMDAwMFwiO1xuICBjb25zdCBMSUdIVF9CTFVFID0gXCIjNDI3MTlDXCI7XG4gIGNvbnN0IFdISVRFID0gXCIjZmZmZmZmXCI7XG4gIGNvbnN0IEJMVUUgPSBcIiMyRjU1OTdcIjtcbiAgY29uc3QgQlROX1dJRFRIID0gMTguNTtcbiAgY29uc3QgQlROX0JPUkRFUl9XSURUSCA9IDM7XG4gIGNvbnN0IEJUTl9CT1JERVJfUkFESVVTID0gMTA7XG4gIGNvbnN0IEJUTl9CT1JERVJfU1RZTEU6IERTdHlsZVtcImJvcmRlclN0eWxlXCJdID0gXCJzb2xpZFwiO1xuICBjb25zdCBCVE5fSEVJR0hUID0gOS4yO1xuICBjb25zdCBCVE5fU0hPUlRfV0lEVEggPSAxMy43O1xuICBjb25zdCBGT05UX1dFSUdIVDogRFN0eWxlW1wiZm9udFdlaWdodFwiXSA9IDYwMDtcbiAgY29uc3QgRk9OVF9TSVpFOiBEQ3NzLlB4W1widmFsdWVcIl0gPSAzNTtcblxuICBleHBvcnQgY29uc3QgYmx1ZUJ1dHRvbiA9ICgpOiBCdWlsZGVyT3B0aW9uVGhlbWUgPT4gKHtcbiAgICBuYW1lOiBcImJsdWUtYnV0dG9uLXRoZW1lXCIsXG4gICAgZGl2OiB7XG4gICAgICBjc3M6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBCTFVFLFxuICAgICAgICBib3JkZXJDb2xvcjogQkxVRSxcbiAgICAgICAgdGV4dENvbG9yOiBXSElURSxcbiAgICAgICAgZm9udFNpemU6IHsgX3VuaXQ6IFwicHhcIiwgdmFsdWU6IEZPTlRfU0laRSB9LFxuICAgICAgICBib3JkZXJXaWR0aDogeyBfdW5pdDogXCJweFwiLCB2YWx1ZTogQlROX0JPUkRFUl9XSURUSCB9LFxuICAgICAgICBib3JkZXJTdHlsZTogQlROX0JPUkRFUl9TVFlMRSxcbiAgICAgICAgYm9yZGVyUmFkaXVzOiB7IHZhbHVlOiBCVE5fQk9SREVSX1JBRElVUywgX3VuaXQ6IFwicHhcIiB9LFxuICAgICAgICBwYWRkaW5nOiB7IF91bml0OiBcInB4XCIsIHZhbHVlOiA0MCB9LFxuICAgICAgICBoOiBCVE5fSEVJR0hULFxuICAgICAgICB3OiBCVE5fV0lEVEgsXG4gICAgICAgIHg6IDEwLFxuICAgICAgICB5OiA4LFxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXG4gICAgICB9LFxuICAgICAgY3NzRGlzYWJsZWQ6IHsgb3BhY2l0eTogMC4zLCBjdXJzb3I6IFwibm90LWFsbG93ZWRcIiB9LFxuICAgICAgY3NzRW5hYmxlZDogeyBvcGFjaXR5OiAxLCBjdXJzb3I6IFwicG9pbnRlclwiIH0sXG4gICAgfSxcbiAgICB0ZXh0MToge1xuICAgICAgeTogNTAsXG4gICAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAlLCA1MCUpXCIsXG4gICAgICB0ZXh0Q29sb3I6IFdISVRFLFxuICAgICAgZm9udFNpemU6IHsgX3VuaXQ6IFwicHhcIiwgdmFsdWU6IEZPTlRfU0laRSB9LFxuICAgICAgdzogODQsXG4gICAgICB4OiA4LFxuICAgICAgZm9udFdlaWdodDogRk9OVF9XRUlHSFQsXG4gICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXG4gICAgfSxcbiAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBEZWZhdWx0VGhlbWU6IElEZWZhdWx0VGhlbWUgPSB7XG4gIG5hbWU6IFwiZGVmYXVsdC10aGVtZVwiLFxuICB2aWRlb1BsYXllcjoge1xuICAgIHBsYXlCdXR0b246IHtcbiAgICAgIGljb25Vcmw6IEljb25VcmxzLnBsYXlDaXJjbGVSZWd1bGFyLFxuICAgICAgY3NzOiB7IHc6IDUsIGg6IDUsIHk6IDQ4LCB4OiA0IH0sXG4gICAgICBjc3NEaXNhYmxlZDogeyBvcGFjaXR5OiAwLjMsIGN1cnNvcjogXCJub3QtYWxsb3dlZFwiIH0sXG4gICAgICBjc3NFbmFibGVkOiB7IG9wYWNpdHk6IDAuOCwgY3Vyc29yOiBcInBvaW50ZXJcIiB9LFxuICAgIH0sXG4gICAgcGF1c2VCdXR0b246IHtcbiAgICAgIGljb25Vcmw6IEljb25VcmxzLnBhdXNlU3ZnLFxuICAgICAgY3NzOiB7IHc6IDUsIGg6IDUsIHk6IDQ4LCB4OiA0IH0sXG4gICAgICBjc3NEaXNhYmxlZDogeyBvcGFjaXR5OiAwLjMsIGN1cnNvcjogXCJub3QtYWxsb3dlZFwiIH0sXG4gICAgICBjc3NFbmFibGVkOiB7IG9wYWNpdHk6IDAuOCwgY3Vyc29yOiBcInBvaW50ZXJcIiB9LFxuICAgIH0sXG4gICAgdmlkZW9FbGVtZW50OiB7IGNzczogeyB3OiAxMDAsIGg6IDQ1LCB5OiA1NSwgeDogMCB9IH0sXG4gIH0sXG4gIGltYWdlOiB7IHN0eWxlOiB7IGg6IDUwLCB3OiAxMDAsIHg6IDAgfSB9LFxuICBtYWluVGV4dDoge1xuICAgIG5vTWVkaWE6IHtcbiAgICAgIHRleHQ6IHtcbiAgICAgICAgY3NzOiB7XG4gICAgICAgICAgdzogODAsXG4gICAgICAgICAgeTogNjUsXG4gICAgICAgICAgeDogMTAsXG4gICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxuICAgICAgICAgIHRleHRDb2xvcjogXCJibGFja1wiLFxuICAgICAgICAgIGZvbnRTaXplOiB7IF91bml0OiBcInB4XCIsIHZhbHVlOiA0MCB9LFxuICAgICAgICB9LFxuICAgICAgICBjc3NEaXNhYmxlZDoge30sXG4gICAgICAgIGNzc0VuYWJsZWQ6IHt9LFxuICAgICAgfSxcbiAgICAgIGF1ZGlvOiB7XG4gICAgICAgIGNzczoge1xuICAgICAgICAgIGg6IDYsXG4gICAgICAgICAgdzogNixcbiAgICAgICAgICB4OiA0LFxuICAgICAgICAgIHk6IDMyLFxuICAgICAgICAgIGN1cnNvcjogXCJwb2ludGVyXCIsXG4gICAgICAgICAgb3BhY2l0eTogMC44LFxuICAgICAgICAgIHZpc2liaWxpdHk6IFwidmlzaWJsZVwiLFxuICAgICAgICB9LFxuICAgICAgICBjc3NEaXNhYmxlZDogeyBvcGFjaXR5OiAwLjMsIGN1cnNvcjogXCJub3QtYWxsb3dlZFwiIH0sXG4gICAgICAgIGNzc0VuYWJsZWQ6IHsgb3BhY2l0eTogMC44LCBjdXJzb3I6IFwicG9pbnRlclwiIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgd2l0aE1lZGlhOiB7XG4gICAgICB0ZXh0OiB7XG4gICAgICAgIGNzczoge1xuICAgICAgICAgIHc6IDgwLFxuICAgICAgICAgIHk6IDI3LFxuICAgICAgICAgIHg6IDEwLFxuICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgICB0ZXh0Q29sb3I6IFwiYmxhY2tcIixcbiAgICAgICAgICBmb250U2l6ZTogeyBfdW5pdDogXCJweFwiLCB2YWx1ZTogMzAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY3NzRGlzYWJsZWQ6IHt9LFxuICAgICAgICBjc3NFbmFibGVkOiB7fSxcbiAgICAgIH0sXG4gICAgICBhdWRpbzoge1xuICAgICAgICBjc3M6IHtcbiAgICAgICAgICBoOiA2LFxuICAgICAgICAgIHc6IDYsXG4gICAgICAgICAgeDogNCxcbiAgICAgICAgICB5OiAzMixcbiAgICAgICAgICBjdXJzb3I6IFwicG9pbnRlclwiLFxuICAgICAgICAgIG9wYWNpdHk6IDAuOCxcbiAgICAgICAgICB2aXNpYmlsaXR5OiBcInZpc2libGVcIixcbiAgICAgICAgfSxcbiAgICAgICAgY3NzRGlzYWJsZWQ6IHsgb3BhY2l0eTogMC4zLCBjdXJzb3I6IFwibm90LWFsbG93ZWRcIiB9LFxuICAgICAgICBjc3NFbmFibGVkOiB7IG9wYWNpdHk6IDAuOCwgY3Vyc29yOiBcInBvaW50ZXJcIiB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxuICBuZXh0QnV0dG9uVGhlbWU6IEJ1aWxkZXJPcHRpb25UaGVtZS5ibHVlQnV0dG9uKCksXG4gIHJlc3BvbnNlQnV0dG9uczogQnVpbGRlck9wdGlvblRoZW1lLmJsdWVCdXR0b24oKSxcbn07XG4iLCAiaW1wb3J0IHsgQnVpbGRlck9iamVjdElkLCBCdWlsZGVyT2JqZWN0IH0gZnJvbSBcIi4vQnVpbGRlck9iamVjdFwiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGVyT3B0aW9uVGhlbWUgfSBmcm9tIFwiLi90aGVtZS9JRGVmYXVsdFRoZW1lXCI7XG5pbXBvcnQgeyBEZWZhdWx0VGhlbWUgfSBmcm9tIFwiLi90aGVtZS9JRGVmYXVsdFRoZW1lXCI7XG5pbXBvcnQgeyBBdWRpb0ZpbGUgfSBmcm9tIFwiLi9tZWRpYS1maWxlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJPcHRpb25EdG8ge1xuICByZWFkb25seSBpZDogQnVpbGRlck9iamVjdElkLlF1ZXN0aW9uT3B0aW9uSUQ7XG4gIHJlYWRvbmx5IHZhbHVlOiBudW1iZXI7XG4gIHJlYWRvbmx5IGxhYmVsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxhYmVsQXVkaW8/OiBBdWRpb0ZpbGU7XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZGVyT3B0aW9uIGV4dGVuZHMgQnVpbGRlck9iamVjdDxcImJ1aWxkZXItcXVlc3Rpb24tb3B0aW9uXCIsIEJ1aWxkZXJPcHRpb25EdG8+IHtcbiAgcmVhZG9ubHkgb2JqZWN0VHlwZSA9IFwiYnVpbGRlci1xdWVzdGlvbi1vcHRpb25cIjtcbiAgdGhlbWU6IEJ1aWxkZXJPcHRpb25UaGVtZSA9IERlZmF1bHRUaGVtZS5yZXNwb25zZUJ1dHRvbnM7XG5cbiAgaWQ6IEJ1aWxkZXJPYmplY3RJZC5RdWVzdGlvbk9wdGlvbklEO1xuICB2YWx1ZTogbnVtYmVyO1xuICBsYWJlbCA9IFwiXCI7XG4gIHByaXZhdGUgX2xhYmVsQXVkaW9GaWxlOiBBdWRpb0ZpbGUgfCBmYWxzZSA9IGZhbHNlO1xuICBnZXQgbGFiZWxBdWRpb0ZpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xhYmVsQXVkaW9GaWxlO1xuICB9XG4gIHNldCBsYWJlbEF1ZGlvRmlsZShhdWRpb0ZpbGU6IEF1ZGlvRmlsZSB8IGZhbHNlKSB7XG4gICAgdGhpcy5fbGFiZWxBdWRpb0ZpbGUgPSBhdWRpb0ZpbGU7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGR0bzogQnVpbGRlck9wdGlvbkR0bykge1xuICAgIHN1cGVyKGR0byk7XG4gICAgdGhpcy5pZCA9IGR0by5pZDtcbiAgICB0aGlzLnZhbHVlID0gZHRvLnZhbHVlO1xuICAgIHRoaXMubGFiZWwgPSBkdG8ubGFiZWw7XG4gICAgLy8gdGhpcy50aGVtZSA9IGR0by50aGVtZTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZSh2YWx1ZTogbnVtYmVyLCBsYWJlbDogc3RyaW5nKSB7XG4gICAgY29uc3QgaWQgPSBCdWlsZGVyT2JqZWN0SWQucXVlc3Rpb25PcHRpb25JZCgpO1xuICAgIGNvbnN0IGR0bzogQnVpbGRlck9wdGlvbkR0byA9IHtcbiAgICAgIGlkLFxuICAgICAgdmFsdWUsXG4gICAgICBsYWJlbCxcbiAgICB9O1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEJ1aWxkZXJPcHRpb24oZHRvKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGZyb21Kc29uKGR0bzogQnVpbGRlck9wdGlvbkR0bykge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEJ1aWxkZXJPcHRpb24oZHRvKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICB0b0pzb24oKTogQnVpbGRlck9wdGlvbkR0byB7XG4gICAgY29uc3QgZHRvOiBCdWlsZGVyT3B0aW9uRHRvID0ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIGxhYmVsOiB0aGlzLmxhYmVsLFxuICAgIH07XG4gICAgcmV0dXJuIGR0bztcbiAgfVxuXG4gIGNsb25lKCk6IEJ1aWxkZXJPcHRpb25EdG8ge1xuICAgIGNvbnN0IGNsb25lSWQgPSBCdWlsZGVyT2JqZWN0SWQucXVlc3Rpb25PcHRpb25JZCgpO1xuICAgIGNvbnN0IGR0byA9IHRoaXMudG9Kc29uKCk7XG4gICAgY29uc3QgY2xvbmVEdG86IEJ1aWxkZXJPcHRpb25EdG8gPSB7IC4uLmR0bywgaWQ6IGNsb25lSWQgfTtcbiAgICByZXR1cm4gY2xvbmVEdG87XG4gIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IEJ1aWxkZXJPcHRpb25EdG8gfSBmcm9tIFwiLi9CdWlsZGVyLW9wdGlvblwiO1xuaW1wb3J0IHsgQnVpbGRlck9wdGlvbiB9IGZyb20gXCIuL0J1aWxkZXItb3B0aW9uXCI7XG5pbXBvcnQgeyBCdWlsZGVyT2JqZWN0LCBCdWlsZGVyT2JqZWN0SWQgfSBmcm9tIFwiLi9CdWlsZGVyT2JqZWN0XCI7XG5cbmV4cG9ydCB0eXBlIEJ1aWxkZXJRdWVzdGlvblR5cGUgPVxuICAgIHwgXCJzZWxlY3Qtb25lXCJcbiAgICB8IFwic2VsZWN0LW1hbnlcIlxuICAgIHwgXCJ0ZXh0XCJcbiAgICB8IFwiY29sb3JcIlxuICAgIHwgXCJyYWRpb1wiXG4gICAgfCBcImVtYWlsXCJcbiAgICB8IFwidGltZVwiXG4gICAgfCBcImNoZWNrYm94XCJcbiAgICB8IFwidGV4dGFyZWFcIlxuICAgIHwgXCJkYXRlXCJcbiAgICB8IFwibnVtZXJpYy1yYW5nZVwiXG4gICAgfCBcImR1cmF0aW9uXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlclF1ZXN0aW9uRHRvIHtcbiAgICByZWFkb25seSBpZDogQnVpbGRlck9iamVjdElkLlF1ZXN0aW9uSUQ7XG4gICAgX3R5cGU6IEJ1aWxkZXJRdWVzdGlvblR5cGU7XG4gICAgdGV4dDogc3RyaW5nO1xuICAgIG9wdGlvbnM6IFJlYWRvbmx5QXJyYXk8QnVpbGRlck9wdGlvbkR0bz47XG4gICAgcHJlZml4OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZGVyUXVlc3Rpb24gZXh0ZW5kcyBCdWlsZGVyT2JqZWN0PFwiYnVpbGRlci1xdWVzdGlvblwiLCBCdWlsZGVyUXVlc3Rpb25EdG8+IHtcbiAgICByZWFkb25seSBvYmplY3RUeXBlID0gXCJidWlsZGVyLXF1ZXN0aW9uXCI7XG4gICAgaWQ6IEJ1aWxkZXJPYmplY3RJZC5RdWVzdGlvbklEO1xuICAgIHR5cGU6IEJ1aWxkZXJRdWVzdGlvblR5cGU7XG4gICAgcXVlc3Rpb25UZXh0ID0gXCJcIjtcbiAgICBvcHRpb25zOiBCdWlsZGVyT3B0aW9uW10gPSBbXTtcbiAgICBwcmVmaXggPSBcIlwiO1xuXG4gICAgc3RhdGljIGNyZWF0ZSA9ICh0eXBlOiBCdWlsZGVyUXVlc3Rpb25UeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gQnVpbGRlck9iamVjdElkLnF1ZXN0aW9uSWQoKTtcblxuICAgICAgICByZXR1cm4gbmV3IEJ1aWxkZXJRdWVzdGlvbih7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIF90eXBlOiB0eXBlLFxuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgICAgcHJlZml4OiBcIlwiLFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgcHVibGljIHN0YXRpYyBmcm9tSnNvbihkdG86IEJ1aWxkZXJRdWVzdGlvbkR0byk6IEJ1aWxkZXJRdWVzdGlvbiB7XG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uID0gbmV3IEJ1aWxkZXJRdWVzdGlvbihkdG8pO1xuICAgICAgICByZXR1cm4gcXVlc3Rpb247XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihkdG86IEJ1aWxkZXJRdWVzdGlvbkR0bykge1xuICAgICAgICBzdXBlcihkdG8pO1xuICAgICAgICB0aGlzLmlkID0gZHRvLmlkIGFzIEJ1aWxkZXJPYmplY3RJZC5RdWVzdGlvbklEO1xuICAgICAgICB0aGlzLnR5cGUgPSBkdG8uX3R5cGU7XG4gICAgICAgIHRoaXMucXVlc3Rpb25UZXh0ID0gZHRvLnRleHQ7XG4gICAgICAgIHRoaXMucHJlZml4ID0gZHRvLnByZWZpeDtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gZHRvLm9wdGlvbnMubWFwKChvKSA9PiBCdWlsZGVyT3B0aW9uLmZyb21Kc29uKG8pKTtcbiAgICB9XG5cbiAgICBhZGRPcHRpb24obGFiZWw6IHN0cmluZywgdmFsdWU6IG51bWJlciwgYXRJbmRleCA9IC0xKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IEJ1aWxkZXJPcHRpb24uY3JlYXRlKHZhbHVlLCBsYWJlbCk7XG4gICAgICAgIGlmIChhdEluZGV4ID49IDAgJiYgYXRJbmRleCA8IHRoaXMub3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zcGxpY2UoYXRJbmRleCwgMCwgb3B0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wdXNoKG9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICB9XG5cbiAgICBkZWxldGVPcHRpb24ob3B0aW9uOiBCdWlsZGVyT3B0aW9uKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkID0gdGhpcy5vcHRpb25zLmZpbHRlcigobykgPT4gby5pZCAhPT0gb3B0aW9uLmlkKTtcbiAgICAgICAgY29uc3QgZGlkRGVsZXRlID0gZmlsdGVyZWQubGVuZ3RoID09PSB0aGlzLm9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gZmlsdGVyZWQ7XG4gICAgICAgIHJldHVybiBkaWREZWxldGU7XG4gICAgfVxuXG4gICAgdG9Kc29uKCkge1xuICAgICAgICBjb25zdCBvcHRpb25zSnNvbiA9IHRoaXMub3B0aW9ucy5tYXAoKG8pID0+IG8udG9Kc29uKCkpO1xuICAgICAgICBjb25zdCBkdG86IEJ1aWxkZXJRdWVzdGlvbkR0byA9IHtcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICAgICAgcHJlZml4OiB0aGlzLnByZWZpeCxcbiAgICAgICAgICAgIF90eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnF1ZXN0aW9uVGV4dCxcbiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnNKc29uLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZHRvO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEJ1aWxkZXJRdWVzdGlvbkR0byB7XG4gICAgICAgIGNvbnN0IGNsb25lSWQgPSBCdWlsZGVyT2JqZWN0SWQucXVlc3Rpb25JZCgpO1xuICAgICAgICBjb25zdCBkdG8gPSB0aGlzLnRvSnNvbigpO1xuICAgICAgICBjb25zdCBvcHRpb25zQ2xvbmUgPSB0aGlzLm9wdGlvbnMubWFwKChvKSA9PiBvLmNsb25lKCkpO1xuICAgICAgICBjb25zdCBjbG9uZWREdG86IEJ1aWxkZXJRdWVzdGlvbkR0byA9IHtcbiAgICAgICAgICAgIC4uLmR0byxcbiAgICAgICAgICAgIGlkOiBjbG9uZUlkLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uc0Nsb25lLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gY2xvbmVkRHRvO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBCdWlsZGVyT2JqZWN0IH0gZnJvbSBcIi4vQnVpbGRlck9iamVjdFwiO1xuaW1wb3J0IHsgQXVkaW9GaWxlIH0gZnJvbSBcIi4vbWVkaWEtZmlsZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZGVyTWFpblRleHREdG8ge1xuICAgIHRleHQ6IHN0cmluZztcbiAgICBhdWRpb0ZpbGU6IEF1ZGlvRmlsZSB8IGZhbHNlO1xuICAgIGF1dG9wbGF5OiBib29sZWFuO1xuICAgIGF1dG9wbGF5RGVsYXk6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkZXJNYWluVGV4dCBleHRlbmRzIEJ1aWxkZXJPYmplY3Q8XCJidWlsZGVyLW1haW4tdGV4dFwiLCBCdWlsZGVyTWFpblRleHREdG8+IHtcbiAgICByZWFkb25seSBvYmplY3RUeXBlOiBcImJ1aWxkZXItbWFpbi10ZXh0XCIgPSBcImJ1aWxkZXItbWFpbi10ZXh0XCI7XG4gICAgYXV0b3BsYXkgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9hdWRpb0ZpbGU6IEF1ZGlvRmlsZSB8IGZhbHNlID0gZmFsc2U7XG4gICAgYXV0b3BsYXlEZWxheSA9IDA7XG5cbiAgICB0ZXh0ID0gXCJcIjtcblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IoZHRvOiBCdWlsZGVyTWFpblRleHREdG8pIHtcbiAgICAgICAgc3VwZXIoZHRvKTtcbiAgICAgICAgdGhpcy5fYXVkaW9GaWxlID0gZHRvLmF1ZGlvRmlsZSA/PyBmYWxzZTtcbiAgICAgICAgdGhpcy5hdXRvcGxheSA9IGR0by5hdXRvcGxheSA/PyBmYWxzZTtcbiAgICAgICAgdGhpcy5hdXRvcGxheURlbGF5ID0gZHRvLmF1dG9wbGF5RGVsYXkgPz8gMDtcbiAgICAgICAgdGhpcy50ZXh0ID0gZHRvLnRleHQgPz8gXCJcIjtcbiAgICB9XG5cbiAgICBnZXQgYXV0b3BsYXlEZWxheUluU2Vjb25kcygpIHtcbiAgICAgICAgY29uc3QgZGVsYXkgPSB0aGlzLmF1dG9wbGF5RGVsYXk7XG4gICAgICAgIGNvbnN0IHMgPSBkZWxheSAvIDEwMDA7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IHMudG9GaXhlZCgxKTtcbiAgICAgICAgcmV0dXJuIGZvcm1hdHRlZDtcbiAgICB9XG5cbiAgICBnZXQgZHVyYXRpb25UYWcoKSB7XG4gICAgICAgIGlmICghdGhpcy5hdWRpb0ZpbGUpIHJldHVybiBcIlwiO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmF1ZGlvRmlsZS5kdXJhdGlvbik7XG4gICAgICAgIGNvbnN0IGR1ciA9IHRoaXMuYXVkaW9GaWxlLmR1cmF0aW9uLnRvRml4ZWQoMSk7XG4gICAgICAgIHJldHVybiBcImR1ciBcIiArIGR1ciArIFwiIHNcIjtcbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpzb24oZHRvOiBCdWlsZGVyTWFpblRleHREdG8pOiBCdWlsZGVyTWFpblRleHQge1xuICAgICAgICBjb25zdCBtYWluVGV4dCA9IG5ldyBCdWlsZGVyTWFpblRleHQoZHRvKTtcbiAgICAgICAgcmV0dXJuIG1haW5UZXh0O1xuICAgIH1cblxuICAgIHN0YXRpYyBjcmVhdGUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGR0bzogQnVpbGRlck1haW5UZXh0RHRvID0ge1xuICAgICAgICAgICAgYXV0b3BsYXk6IGZhbHNlLFxuICAgICAgICAgICAgYXV0b3BsYXlEZWxheTogMCxcbiAgICAgICAgICAgIGF1ZGlvRmlsZTogZmFsc2UsXG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbmV3IEJ1aWxkZXJNYWluVGV4dChkdG8pO1xuICAgIH07XG5cbiAgICBjbG9uZSgpOiBCdWlsZGVyTWFpblRleHREdG8ge1xuICAgICAgICBjb25zdCBkdG8gPSB0aGlzLnRvSnNvbigpO1xuICAgICAgICBjb25zdCBjbG9uZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZHRvKSk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICB0b0pzb24oKTogQnVpbGRlck1haW5UZXh0RHRvIHtcbiAgICAgICAgY29uc3QgZHRvOiBCdWlsZGVyTWFpblRleHREdG8gPSB7XG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnRleHQsXG4gICAgICAgICAgICBhdWRpb0ZpbGU6IHRoaXMuYXVkaW9GaWxlLFxuICAgICAgICAgICAgYXV0b3BsYXk6IHRoaXMuYXV0b3BsYXksXG4gICAgICAgICAgICBhdXRvcGxheURlbGF5OiB0aGlzLmF1dG9wbGF5RGVsYXksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBkdG87XG4gICAgfVxuICAgIGdldCBhdWRpb0ZpbGUoKTogQXVkaW9GaWxlIHwgZmFsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXVkaW9GaWxlO1xuICAgIH1cbiAgICBzZXQgYXVkaW9GaWxlKGF1ZGlvRmlsZTogQXVkaW9GaWxlIHwgZmFsc2UpIHtcbiAgICAgICAgaWYgKGF1ZGlvRmlsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b3BsYXlEZWxheSA9IDA7XG4gICAgICAgICAgICB0aGlzLmF1dG9wbGF5ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYXVkaW9GaWxlID0gYXVkaW9GaWxlO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBQYWdlUHJlZml4IH0gZnJvbSBcIi4uL3ByaW1pdGl2ZXMvcGFnZS1wcmVmaXhcIjtcbmltcG9ydCB7IFZhcklEIH0gZnJvbSBcIi4uL3ByaW1pdGl2ZXMvdmFySURcIjtcbmltcG9ydCB7IFNjaGVtYVByZWZpeCB9IGZyb20gXCIuLi9wcmltaXRpdmVzL3NjaGVtYS1wcmVmaXhcIjtcblxuY29uc3QgQnVpbGRlclZhcmlhYmxlVHlwZSA9IHtcbiAgbnVtZXJpY1dpdGhPcHRpb25zOiB0cnVlLFxuICBudW1lcmljOiB0cnVlLFxuICBudW1lcmljUmFuZ2U6IHRydWUsXG4gIHRleHQ6IHRydWUsXG4gIGRhdGU6IHRydWUsXG4gIGRhdGVSYW5nZTogdHJ1ZSxcbiAgdGltZTogdHJ1ZSxcbiAgZHVyYXRpb246IHRydWUsXG4gIGJvb2xlYW46IHRydWUsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBCdWlsZGVyVmFyaWFibGVUeXBlID0ga2V5b2YgdHlwZW9mIEJ1aWxkZXJWYXJpYWJsZVR5cGU7XG5cbmV4cG9ydCBjbGFzcyBCdWlsZGVyVmFyaWFibGVPcHRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBsYWJlbDogc3RyaW5nLFxuICAgIHJlYWRvbmx5IHZhbHVlOiBudW1iZXIsXG4gICkge31cbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uVmFyaWFibGUge1xuICByZWFkb25seSBraW5kOiBcInF1ZXN0aW9uLXZhcmlhYmxlXCIgPSBcInF1ZXN0aW9uLXZhcmlhYmxlXCI7XG4gIHJlYWRvbmx5IGRhdGFUeXBlOiBCdWlsZGVyVmFyaWFibGVUeXBlID0gXCJudW1lcmljV2l0aE9wdGlvbnNcIjtcbiAgY29uc3RydWN0b3IoXG4gICAgLy8gcHJpdmF0ZSBzY2hlbWFQcmVmaXg6IFNjaGVtYVByZWZpeCxcbiAgICAvLyBwcml2YXRlIHBhZ2VQcmVmaXg6IFBhZ2VQcmVmaXgsXG4gICAgcmVhZG9ubHkgdmFySWQ6IFZhcklELFxuICAgIHJlYWRvbmx5IGxhYmVsOiBzdHJpbmcsXG4gICAgcmVhZG9ubHkgb3B0aW9uczogUmVhZG9ubHlBcnJheTxCdWlsZGVyVmFyaWFibGVPcHRpb24+LFxuICAgIHJlYWRvbmx5IHBhZ2VOdW1iZXI6IG51bWJlcixcbiAgKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgQ3VzdG9tVmFyaWFibGUge1xuICByZWFkb25seSBraW5kOiBcImNvbmZpZ3VyYXRpb24tdmFyaWFibGVcIiA9IFwiY29uZmlndXJhdGlvbi12YXJpYWJsZVwiO1xuICByZWFkb25seSBkYXRhVHlwZTogQnVpbGRlclZhcmlhYmxlVHlwZSA9IFwibnVtZXJpY1dpdGhPcHRpb25zXCI7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IHZhcklkOiBWYXJJRCxcbiAgICByZWFkb25seSBsYWJlbDogc3RyaW5nLFxuICAgIHJlYWRvbmx5IG9wdGlvbnM6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclZhcmlhYmxlT3B0aW9uPixcbiAgKSB7fVxufVxuXG5leHBvcnQgdHlwZSBCdWlsZGVyVmFyaWFibGUgPSBRdWVzdGlvblZhcmlhYmxlIHwgQ3VzdG9tVmFyaWFibGU7XG4iLCAiaW1wb3J0IHR5cGUgeyBCdWlsZGVyUXVlc3Rpb25EdG8sIEJ1aWxkZXJRdWVzdGlvblR5cGUgfSBmcm9tIFwiLi9CdWlsZGVyLXF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBCdWlsZGVyUXVlc3Rpb24gfSBmcm9tIFwiLi9CdWlsZGVyLXF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBCdWlsZGVyT2JqZWN0IH0gZnJvbSBcIi4vQnVpbGRlck9iamVjdFwiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGVyT3B0aW9uRHRvIH0gZnJvbSBcIi4vQnVpbGRlci1vcHRpb25cIjtcbmltcG9ydCB7IEJ1aWxkZXJPcHRpb24gfSBmcm9tIFwiLi9CdWlsZGVyLW9wdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGVyTWFpblZpZGVvRHRvIH0gZnJvbSBcIi4vQnVpbGRlck1haW5WaWRlb0R0b1wiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGVyTWFpbkltYWdlRHRvIH0gZnJvbSBcIi4vQnVpbGRlck1haW5JbWFnZUR0b1wiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGVyTWFpblRleHREdG8gfSBmcm9tIFwiLi9CdWlsZGVyTWFpblRleHRcIjtcbmltcG9ydCB7IEJ1aWxkZXJNYWluVGV4dCB9IGZyb20gXCIuL0J1aWxkZXJNYWluVGV4dFwiO1xuaW1wb3J0IHsgQnVpbGRlclZhcmlhYmxlT3B0aW9uLCBRdWVzdGlvblZhcmlhYmxlIH0gZnJvbSBcIi4vcnVsZWJ1aWxkZXIvUnVsZVZhcmlhYmxlXCI7XG5pbXBvcnQgeyBEVXRpbCwgUGFnZUlEIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcbmltcG9ydCB7IFBhZ2VQcmVmaXgsIFBhZ2VQcmVmaXhWYWx1ZSB9IGZyb20gXCIuL3ByaW1pdGl2ZXMvcGFnZS1wcmVmaXhcIjtcbmltcG9ydCB7IFZhcklEIH0gZnJvbSBcIi4vcHJpbWl0aXZlcy92YXJJRFwiO1xuaW1wb3J0IHsgU2NoZW1hUHJlZml4LCBTY2hlbWFQcmVmaXhWYWx1ZSB9IGZyb20gXCIuL3ByaW1pdGl2ZXMvc2NoZW1hLXByZWZpeFwiO1xuXG5jb25zdCBVID0gRFV0aWw7XG5leHBvcnQgdHlwZSBCdWlsZGVyUGFnZVR5cGUgPSBcImluZm8tcGFnZVwiIHwgXCJxdWVzdGlvblwiIHwgXCJtdWx0aS1zZWxlY3RcIiB8IFwiZm9ybVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJQYWdlRHRvIHtcbiAgcmVhZG9ubHkgaWQ6IFBhZ2VJRDtcbiAgcmVhZG9ubHkgcHJlZml4OiBQYWdlUHJlZml4VmFsdWU7XG4gIF90eXBlOiBCdWlsZGVyUGFnZVR5cGU7XG4gIG1haW5UZXh0OiBCdWlsZGVyTWFpblRleHREdG87XG4gIG5leHRCdXR0b246IEJ1aWxkZXJPcHRpb25EdG87XG4gIGRlZmF1bHRRdWVzdGlvbjogQnVpbGRlclF1ZXN0aW9uRHRvO1xuICBxdWVzdGlvbnM6IEFycmF5PEJ1aWxkZXJRdWVzdGlvbkR0bz47XG4gIG1haW5NZWRpYT86IEJ1aWxkZXJNYWluSW1hZ2VEdG8gfCBCdWlsZGVyTWFpblZpZGVvRHRvO1xuICBhdXRvcGxheVNlcXVlbmNlOiBBcnJheTxzdHJpbmc+O1xuICB0YWdzOiBSZWFkb25seUFycmF5PHN0cmluZz47XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZGVyUGFnZSBleHRlbmRzIEJ1aWxkZXJPYmplY3Q8XCJidWlsZGVyLXBhZ2VcIiwgQnVpbGRlclBhZ2VEdG8+IHtcbiAgcmVhZG9ubHkgb2JqZWN0VHlwZTogXCJidWlsZGVyLXBhZ2VcIiA9IFwiYnVpbGRlci1wYWdlXCI7XG4gIHJlYWRvbmx5IGlkOiBQYWdlSUQ7XG4gIHByaXZhdGUgX3BhZ2VUeXBlOiBCdWlsZGVyUGFnZVR5cGU7XG4gIHByaXZhdGUgX3ByZWZpeDogUGFnZVByZWZpeDtcbiAgcHJpdmF0ZSBfcXVlc3Rpb25zOiBBcnJheTxCdWlsZGVyUXVlc3Rpb24+ID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RhZ3M6IFNldDxzdHJpbmc+O1xuICBwcml2YXRlIF9iYWNrZ3JvdW5kQ29sb3IgPSBcIiNGRkZGRkZcIjtcbiAgbWFpbk1lZGlhOiBCdWlsZGVyTWFpblZpZGVvRHRvIHwgQnVpbGRlck1haW5JbWFnZUR0byB8IGZhbHNlID0gZmFsc2U7XG4gIGRlZmF1bHRRdWVzdGlvbjogQnVpbGRlclF1ZXN0aW9uO1xuICBtYWluVGV4dDogQnVpbGRlck1haW5UZXh0O1xuICBuZXh0QnV0dG9uID0gQnVpbGRlck9wdGlvbi5jcmVhdGUoLTEsIFwiTmVzdGVcIik7XG5cbiAgcHVibGljIHN0YXRpYyBjcmVhdGUodHlwZTogQnVpbGRlclBhZ2VUeXBlLCBfcHJlZml4OiBQYWdlUHJlZml4VmFsdWUpIHtcbiAgICBjb25zdCBpZCA9IFBhZ2VJRC5jcmVhdGUoKTtcbiAgICBjb25zdCBtYWluVGV4dER0bzogQnVpbGRlck1haW5UZXh0RHRvID0ge1xuICAgICAgdGV4dDogXCJcIixcbiAgICAgIGF1ZGlvRmlsZTogZmFsc2UsXG4gICAgICBhdXRvcGxheTogZmFsc2UsXG4gICAgICBhdXRvcGxheURlbGF5OiAwLFxuICAgIH07XG4gICAgY29uc3QgbmV4dEJ1dHRvbkR0byA9IEJ1aWxkZXJPcHRpb24uY3JlYXRlKC0xLCBcInBhZ2UtbmV4dC1idXR0b24tdGV4dFwiKS50b0pzb24oKTtcbiAgICBjb25zdCBkZWZhdWx0UXVlc3Rpb25EdG8gPSBCdWlsZGVyUXVlc3Rpb24uY3JlYXRlKFwic2VsZWN0LW9uZVwiKS50b0pzb24oKTtcblxuICAgIGNvbnN0IGR0bzogQnVpbGRlclBhZ2VEdG8gPSB7XG4gICAgICBfdHlwZTogdHlwZSxcbiAgICAgIGF1dG9wbGF5U2VxdWVuY2U6IFtdLFxuICAgICAgZGVmYXVsdFF1ZXN0aW9uOiBkZWZhdWx0UXVlc3Rpb25EdG8sXG4gICAgICBpZCxcbiAgICAgIG5leHRCdXR0b246IG5leHRCdXR0b25EdG8sXG4gICAgICBtYWluVGV4dDogbWFpblRleHREdG8sXG4gICAgICBwcmVmaXg6IF9wcmVmaXgsXG4gICAgICBxdWVzdGlvbnM6IFtdLFxuICAgICAgdGFnczogW10sXG4gICAgfTtcblxuICAgIGNvbnN0IHBhZ2UgPSBuZXcgQnVpbGRlclBhZ2UoZHRvKTtcbiAgICByZXR1cm4gcGFnZTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGZyb21Kc29uKGR0bzogQnVpbGRlclBhZ2VEdG8pOiBCdWlsZGVyUGFnZSB7XG4gICAgY29uc3QgcGFnZSA9IG5ldyBCdWlsZGVyUGFnZShkdG8pO1xuICAgIHJldHVybiBwYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihkdG86IEJ1aWxkZXJQYWdlRHRvKSB7XG4gICAgc3VwZXIoZHRvKTtcbiAgICB0aGlzLmlkID0gZHRvLmlkO1xuICAgIHRoaXMuX3BhZ2VUeXBlID0gZHRvLl90eXBlO1xuICAgIGNvbnN0IHByZWZpeEluc3RhbmNlID0gUGFnZVByZWZpeC5jYXN0T3JDcmVhdGVSYW5kb20oZHRvLnByZWZpeCk7XG4gICAgdGhpcy5fcHJlZml4ID0gcHJlZml4SW5zdGFuY2U7XG4gICAgdGhpcy5tYWluVGV4dCA9IEJ1aWxkZXJNYWluVGV4dC5mcm9tSnNvbihkdG8ubWFpblRleHQpO1xuICAgIHRoaXMubmV4dEJ1dHRvbiA9IEJ1aWxkZXJPcHRpb24uZnJvbUpzb24oZHRvLm5leHRCdXR0b24pO1xuICAgIHRoaXMuZGVmYXVsdFF1ZXN0aW9uID0gQnVpbGRlclF1ZXN0aW9uLmZyb21Kc29uKGR0by5kZWZhdWx0UXVlc3Rpb24pO1xuICAgIHRoaXMuX3F1ZXN0aW9ucyA9IGR0by5xdWVzdGlvbnMubWFwKChxKSA9PiBCdWlsZGVyUXVlc3Rpb24uZnJvbUpzb24ocSkpO1xuICAgIGNvbnN0IHRhZ0xpc3Q6IHN0cmluZ1tdID0gQXJyYXkuaXNBcnJheShkdG8udGFncykgPyBkdG8udGFncyA6IFtdO1xuICAgIHRoaXMuX3RhZ3MgPSBuZXcgU2V0KHRhZ0xpc3QpO1xuICAgIGlmIChkdG8ubWFpbk1lZGlhKSB7XG4gICAgICB0aGlzLm1haW5NZWRpYSA9IGR0by5tYWluTWVkaWE7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlUm93cygpO1xuICB9XG5cbiAgaW5zZXJ0UXVlc3Rpb24ocXVlc3Rpb246IEJ1aWxkZXJRdWVzdGlvbiwgYXRJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsaWRJbmRleEZuID0gVS5pc0luUmFuZ2UoMCwgdGhpcy5fcXVlc3Rpb25zLmxlbmd0aCk7XG4gICAgaWYgKCF2YWxpZEluZGV4Rm4oYXRJbmRleCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgaGFzUXVlc3Rpb24gPSAhIXRoaXMuX3F1ZXN0aW9ucy5maW5kKChxKSA9PiBxLmlkID09PSBxdWVzdGlvbi5pZCk7XG4gICAgaWYgKGhhc1F1ZXN0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuX3F1ZXN0aW9ucy5zcGxpY2UoYXRJbmRleCwgMCwgcXVlc3Rpb24pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYWRkUXVlc3Rpb24odHlwZTogQnVpbGRlclF1ZXN0aW9uVHlwZSwgYXRJbmRleCA9IC0xKTogQnVpbGRlclF1ZXN0aW9uIHtcbiAgICBjb25zdCBxdWVzdGlvbiA9IEJ1aWxkZXJRdWVzdGlvbi5jcmVhdGUodHlwZSk7XG4gICAgaWYgKGF0SW5kZXggPCB0aGlzLl9xdWVzdGlvbnMubGVuZ3RoICYmIGF0SW5kZXggPj0gMCkge1xuICAgICAgdGhpcy5fcXVlc3Rpb25zLnNwbGljZShhdEluZGV4LCAwLCBxdWVzdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3F1ZXN0aW9ucy5wdXNoKHF1ZXN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgYSBxdWVzdGlvbiBpbiBxdWVzdGlvbnMtYXJyYXlcbiAgICogQHBhcmFtIHF1ZXN0aW9uIChyZWZlcmVuY2UpXG4gICAqIEBwYXJhbSB0b0luZGV4XG4gICAqL1xuICBtb3ZlUXVlc3Rpb24ocXVlc3Rpb246IEJ1aWxkZXJRdWVzdGlvbiwgdG9JbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsaWRUb0luZGV4Rm4gPSBVLmlzSW5SYW5nZSgwLCB0aGlzLl9xdWVzdGlvbnMubGVuZ3RoKTtcbiAgICBpZiAoIXZhbGlkVG9JbmRleEZuKHRvSW5kZXgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuX3F1ZXN0aW9ucy5pbmRleE9mKHF1ZXN0aW9uKTtcbiAgICBpZiAoY3VycmVudEluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLl9xdWVzdGlvbnMuc3BsaWNlKGN1cnJlbnRJbmRleCwgMSk7XG4gICAgdGhpcy5fcXVlc3Rpb25zLnNwbGljZSh0b0luZGV4LCAwLCBxdWVzdGlvbik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBkZWxldGVRdWVzdGlvbihxdWVzdGlvbjogQnVpbGRlclF1ZXN0aW9uKSB7XG4gICAgdGhpcy5fcXVlc3Rpb25zID0gdGhpcy5fcXVlc3Rpb25zLmZpbHRlcigocSkgPT4gcSAhPT0gcXVlc3Rpb24pO1xuICAgIC8vIFRPRE8gRU1JVCBERUxFVEVEIFFVRVNUSU9OLlxuICAgIHRoaXMudXBkYXRlUm93cygpO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlUm93cygpIHtcbiAgICBpZiAodGhpcy5fcGFnZVR5cGUgPT09IFwicXVlc3Rpb25cIiB8fCB0aGlzLl9wYWdlVHlwZSA9PT0gXCJpbmZvLXBhZ2VcIikge1xuICAgICAgdGhpcy5fcXVlc3Rpb25zID0gW107XG4gICAgfVxuICAgIGlmICh0aGlzLl9wYWdlVHlwZSA9PT0gXCJmb3JtXCIgJiYgdGhpcy5fcXVlc3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5fcXVlc3Rpb25zID0gW107XG4gICAgICB0aGlzLmFkZFF1ZXN0aW9uKFwidGV4dFwiKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3BhZ2VUeXBlID09PSBcIm11bHRpLXNlbGVjdFwiICYmIHRoaXMuX3F1ZXN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuX3F1ZXN0aW9ucyA9IFtdO1xuICAgICAgdGhpcy5hZGRRdWVzdGlvbihcInRleHRcIik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFkZFRhZyh0YWc6IHN0cmluZykge1xuICAgIHRoaXMuX3RhZ3MuYWRkKHRhZyk7XG4gIH1cbiAgcHVibGljIGRlbGV0ZVRhZyh0YWc6IHN0cmluZykge1xuICAgIHRoaXMuX3RhZ3MuZGVsZXRlKHRhZyk7XG4gIH1cblxuICBzZXQgcGFnZVR5cGUodmFsdWU6IEJ1aWxkZXJQYWdlVHlwZSkge1xuICAgIHRoaXMuX3BhZ2VUeXBlID0gdmFsdWU7XG4gICAgLy8gVE9ETyBFbWl0IEFsbCBxdWVzdGlvbnMgdGhhdCBhcmUgZGVsZXRlZD8gTGlzdGVuIGZvciByZW1vdmVkIHZhcmlhYmxlcz8/XG4gICAgdGhpcy51cGRhdGVSb3dzKCk7XG4gIH1cblxuICBnZXRRdWVzdGlvblZhcmlhYmxlcyhtb2R1bGVQcmVmaXg6IFNjaGVtYVByZWZpeCwgcGFnZU51bWJlcjogbnVtYmVyKTogUmVhZG9ubHlBcnJheTxRdWVzdGlvblZhcmlhYmxlPiB7XG4gICAgY29uc3QgdmFyaWFibGVzOiBRdWVzdGlvblZhcmlhYmxlW10gPSBbXTtcblxuICAgIGlmICh0aGlzLl9wYWdlVHlwZSA9PT0gXCJxdWVzdGlvblwiKSB7XG4gICAgICBjb25zdCBwYWdlUHJlZml4ID0gdGhpcy5wcmVmaXg7XG4gICAgICBjb25zdCB2YXJJZCA9IFZhcklELmNyZWF0ZShtb2R1bGVQcmVmaXgudmFsdWUsIHBhZ2VQcmVmaXgpO1xuICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLm1haW5UZXh0LnRleHQ7XG4gICAgICBjb25zdCBvcCA9IHRoaXMuZGVmYXVsdFF1ZXN0aW9uLm9wdGlvbnMubWFwKChvKSA9PiB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gby5sYWJlbDtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBvLnZhbHVlO1xuICAgICAgICByZXR1cm4gbmV3IEJ1aWxkZXJWYXJpYWJsZU9wdGlvbihsYWJlbCwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBzaW5nbGVWYXIgPSBuZXcgUXVlc3Rpb25WYXJpYWJsZSh2YXJJZCwgbGFiZWwsIG9wLCBwYWdlTnVtYmVyKTtcbiAgICAgIHZhcmlhYmxlcy5wdXNoKHNpbmdsZVZhcik7XG4gICAgfVxuICAgIHJldHVybiB2YXJpYWJsZXM7XG4gIH1cblxuICBnZXQgdGFncygpOiBSZWFkb25seUFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBbLi4udGhpcy5fdGFnc107XG4gIH1cbiAgZ2V0IHBhZ2VUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLl9wYWdlVHlwZTtcbiAgfVxuXG4gIGdldCBwcmVmaXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ByZWZpeC52YWx1ZTtcbiAgfVxuXG4gIHNldCBwcmVmaXgodmFsdWU6IFBhZ2VQcmVmaXhWYWx1ZSkge1xuICAgIHRoaXMuX3ByZWZpeC52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgdG9Kc29uKCk6IEJ1aWxkZXJQYWdlRHRvIHtcbiAgICBjb25zdCBxdWVzdGlvbnMgPSB0aGlzLl9xdWVzdGlvbnMubWFwKChxKSA9PiBxLnRvSnNvbigpKTtcbiAgICBjb25zdCBtYWluVGV4dCA9IHRoaXMubWFpblRleHQudG9Kc29uKCk7XG4gICAgY29uc3QgbmV4dEJ1dHRvbiA9IHRoaXMubmV4dEJ1dHRvbi50b0pzb24oKTtcbiAgICBjb25zdCBtYWluTWVkaWEgPSB0aGlzLm1haW5NZWRpYTtcbiAgICBjb25zdCBkdG86IEJ1aWxkZXJQYWdlRHRvID0ge1xuICAgICAgX3R5cGU6IHRoaXMucGFnZVR5cGUsXG4gICAgICBtYWluVGV4dCxcbiAgICAgIGF1dG9wbGF5U2VxdWVuY2U6IFtdLFxuICAgICAgbmV4dEJ1dHRvbixcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgdGFnczogWy4uLnRoaXMudGFnc10sXG4gICAgICBwcmVmaXg6IHRoaXMuX3ByZWZpeC52YWx1ZSxcbiAgICAgIGRlZmF1bHRRdWVzdGlvbjogdGhpcy5kZWZhdWx0UXVlc3Rpb24udG9Kc29uKCksXG4gICAgICBxdWVzdGlvbnMsXG4gICAgfTtcbiAgICBpZiAobWFpbk1lZGlhKSB7XG4gICAgICBkdG8ubWFpbk1lZGlhID0gbWFpbk1lZGlhO1xuICAgIH1cbiAgICByZXR1cm4gZHRvO1xuICB9XG5cbiAgY2xvbmUoKTogQnVpbGRlclBhZ2VEdG8ge1xuICAgIGNvbnN0IGR0byA9IHRoaXMudG9Kc29uKCk7XG4gICAgY29uc3QgZGVmYXVsdFF1ZXN0aW9uQ2xvbmUgPSB0aGlzLmRlZmF1bHRRdWVzdGlvbi5jbG9uZSgpO1xuICAgIGNvbnN0IG1haW5UZXh0Q2xvbmUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMubWFpblRleHQpKTtcbiAgICAvLyBjb25zdCBwYWdlc0Nsb25lID0gdGhpc1xuICAgIGNvbnN0IHF1ZXN0aW9uc0Nsb25lID0gdGhpcy5xdWVzdGlvbnMubWFwKChxKSA9PiBxLmNsb25lKCkpO1xuICAgIGNvbnN0IG5ld0lkID0gUGFnZUlELmNyZWF0ZSgpO1xuICAgIGNvbnN0IGNsb25lOiBCdWlsZGVyUGFnZUR0byA9IHtcbiAgICAgIC4uLmR0byxcbiAgICAgIGlkOiBuZXdJZCxcbiAgICAgIGRlZmF1bHRRdWVzdGlvbjogZGVmYXVsdFF1ZXN0aW9uQ2xvbmUsXG4gICAgICBtYWluVGV4dDogbWFpblRleHRDbG9uZSxcbiAgICAgIHF1ZXN0aW9uczogcXVlc3Rpb25zQ2xvbmUsXG4gICAgfTtcbiAgICAvLyBjb25zdCBjbG9uZUR0b1xuICAgIHJldHVybiBjbG9uZTtcbiAgfVxuXG4gIGdldCBiYWNrZ3JvdW5kQ29sb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvcjtcbiAgfVxuXG4gIHNldCBiYWNrZ3JvdW5kQ29sb3IoY29sb3I6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgY29sb3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IGNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIGdldCBxdWVzdGlvbnMoKTogUmVhZG9ubHlBcnJheTxCdWlsZGVyUXVlc3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcXVlc3Rpb25zO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlUmFuZG9tUHJlZml4IH0gZnJvbSBcIi4vcGFnZS1wcmVmaXhcIjtcblxuZXhwb3J0IHR5cGUgU2NoZW1hUHJlZml4VmFsdWUgPSBzdHJpbmcgJiB7IF9fU0NIRU1BX1BSRUZJWF9fOiB0cnVlIH07XG5cbmV4cG9ydCBjbGFzcyBTY2hlbWFQcmVmaXgge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1JTl9MRU5HVEggPSAxO1xuICBwcml2YXRlIHN0YXRpYyByYW5kb21MZW4gPSA1O1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BWF9MRU5HVEggPSAxNjtcblxuICBwdWJsaWMgc3RhdGljIGZyb21WYWx1ZSA9ICh2YWx1ZTogU2NoZW1hUHJlZml4VmFsdWUpOiBTY2hlbWFQcmVmaXggPT4ge1xuICAgIHJldHVybiBuZXcgU2NoZW1hUHJlZml4KHZhbHVlKTtcbiAgfTtcblxuICBwdWJsaWMgc3RhdGljIGZyb21WYWx1ZU9yVGhyb3cgPSAodmFsdWU6IHN0cmluZyk6IFNjaGVtYVByZWZpeCA9PiB7XG4gICAgaWYgKCFTY2hlbWFQcmVmaXguaXNWYWxpZCh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcHJlZml4XCIpO1xuICAgIHJldHVybiBuZXcgU2NoZW1hUHJlZml4KHZhbHVlKTtcbiAgfTtcbiAgcHVibGljIHN0YXRpYyBmcm9tU3RyaW5nID0gKHZhbHVlOiBzdHJpbmcpOiBTY2hlbWFQcmVmaXggfCBmYWxzZSA9PiB7XG4gICAgaWYgKCFTY2hlbWFQcmVmaXguaXNWYWxpZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gbmV3IFNjaGVtYVByZWZpeCh2YWx1ZSk7XG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgY2FzdE9yQ3JlYXRlUmFuZG9tID0gKHZhbHVlOiBzdHJpbmcpOiBTY2hlbWFQcmVmaXggPT4ge1xuICAgIGNvbnN0IHYgPSBTY2hlbWFQcmVmaXguaXNWYWxpZCh2YWx1ZSkgPyB2YWx1ZSA6IGNyZWF0ZVJhbmRvbVByZWZpeDxTY2hlbWFQcmVmaXhWYWx1ZT4oU2NoZW1hUHJlZml4LnJhbmRvbUxlbik7XG4gICAgcmV0dXJuIG5ldyBTY2hlbWFQcmVmaXgodik7XG4gIH07XG5cbiAgcHVibGljIHN0YXRpYyBpc1ZhbGlkID0gKHByZWZpeDogc3RyaW5nIHwgOTk5KTogcHJlZml4IGlzIFNjaGVtYVByZWZpeFZhbHVlID0+IHtcbiAgICBpZiAodHlwZW9mIHByZWZpeCAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChwcmVmaXgubGVuZ3RoIDwgU2NoZW1hUHJlZml4Lk1JTl9MRU5HVEgpIHJldHVybiBmYWxzZTtcbiAgICBpZiAocHJlZml4Lmxlbmd0aCA+IFNjaGVtYVByZWZpeC5NQVhfTEVOR1RIKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgdG9KU09OKCkge31cblxuICBnZXQgdmFsdWUoKTogU2NoZW1hUHJlZml4VmFsdWUge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHJldHVybiBTY2hlbWFQcmVmaXguaXNWYWxpZCh0aGlzLl92YWx1ZSk7XG4gIH1cblxuICBzZXQgdmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIGNvbnN0IGNhc3RlZCA9IHZhbHVlIGFzIHVua25vd247XG4gICAgaWYgKHR5cGVvZiBjYXN0ZWQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gY2FzdGVkIGFzIFNjaGVtYVByZWZpeFZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IocHJpdmF0ZSBfdmFsdWU6IFNjaGVtYVByZWZpeFZhbHVlKSB7fVxufVxuIiwgImltcG9ydCB7IFNjaGVtYVByZWZpeCB9IGZyb20gXCIuL3NjaGVtYS1wcmVmaXhcIjtcblxuZXhwb3J0IHR5cGUgUGFnZVByZWZpeFZhbHVlID0gc3RyaW5nICYgeyBfX1BBR0VfUFJFRklYX186IHRydWUgfTtcbmV4cG9ydCBjb25zdCBjcmVhdGVSYW5kb21QcmVmaXggPSA8Y29uc3QgUCBleHRlbmRzIHN0cmluZz4obGVuZ3RoOiBudW1iZXIpOiBQID0+IHtcbiAgY29uc3QgbGV0dGVycyA9IFwiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnl6XCI7XG4gIGNvbnN0IGFsbCA9IGxldHRlcnMgKyBsZXR0ZXJzLnRvVXBwZXJDYXNlKCk7XG4gIGxldCByZXN1bHQgPSBcIlwiO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hhciA9IGFsbC5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYWxsLmxlbmd0aCkpO1xuICAgIHJlc3VsdCArPSBjaGFyO1xuICB9XG4gIHJldHVybiByZXN1bHQgYXMgUDtcbn07XG5cbmV4cG9ydCBjbGFzcyBQYWdlUHJlZml4IHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNSU5fTEVOR1RIID0gMTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmFuZG9tTGVuID0gNTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNQVhfTEVOR1RIID0gMTY7XG5cbiAgcHVibGljIHN0YXRpYyBjcmVhdGUgPSAoKTogUGFnZVByZWZpeCA9PiB7XG4gICAgY29uc3QgdiA9IGNyZWF0ZVJhbmRvbVByZWZpeDxQYWdlUHJlZml4VmFsdWU+KFBhZ2VQcmVmaXgucmFuZG9tTGVuKTtcbiAgICByZXR1cm4gbmV3IFBhZ2VQcmVmaXgodik7XG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgZnJvbVN0cmluZyA9ICh2YWx1ZTogc3RyaW5nKTogUGFnZVByZWZpeCB8IGZhbHNlID0+IHtcbiAgICBpZiAoIVBhZ2VQcmVmaXguaXNWYWxpZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gbmV3IFBhZ2VQcmVmaXgodmFsdWUpO1xuICB9O1xuXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVN0cmluZ09yVGhyb3cgPSAodmFsdWU6IHN0cmluZyk6IFBhZ2VQcmVmaXhWYWx1ZSA9PiB7XG4gICAgaWYgKCFQYWdlUHJlZml4LmlzVmFsaWQodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHByZWZpeFwiKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgY2FzdE9yQ3JlYXRlUmFuZG9tID0gKHZhbHVlOiBzdHJpbmcpOiBQYWdlUHJlZml4ID0+IHtcbiAgICBjb25zdCB2ID0gUGFnZVByZWZpeC5pc1ZhbGlkKHZhbHVlKSA/IHZhbHVlIDogY3JlYXRlUmFuZG9tUHJlZml4PFBhZ2VQcmVmaXhWYWx1ZT4oUGFnZVByZWZpeC5yYW5kb21MZW4pO1xuICAgIHJldHVybiBuZXcgUGFnZVByZWZpeCh2KTtcbiAgfTtcblxuICBwdWJsaWMgc3RhdGljIGlzVmFsaWQgPSAocHJlZml4OiBzdHJpbmcgfCA5OTkpOiBwcmVmaXggaXMgUGFnZVByZWZpeFZhbHVlID0+IHtcbiAgICBpZiAodHlwZW9mIHByZWZpeCAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChwcmVmaXgubGVuZ3RoIDwgU2NoZW1hUHJlZml4Lk1JTl9MRU5HVEgpIHJldHVybiBmYWxzZTtcbiAgICBpZiAocHJlZml4Lmxlbmd0aCA+IFNjaGVtYVByZWZpeC5NQVhfTEVOR1RIKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgZ2V0IHZhbHVlKCk6IFBhZ2VQcmVmaXhWYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoIVBhZ2VQcmVmaXguaXNWYWxpZCh2YWx1ZSkpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiSU5WQUxJRCBQUkVGSVhcIiwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IocHJpdmF0ZSBfdmFsdWU6IFBhZ2VQcmVmaXhWYWx1ZSkge31cbn1cbiIsICJpbXBvcnQgeyBQYWdlUHJlZml4VmFsdWUgfSBmcm9tIFwiLi9wYWdlLXByZWZpeFwiO1xuXG5pbXBvcnQgeyBTY2hlbWFQcmVmaXhWYWx1ZSB9IGZyb20gXCIuL3NjaGVtYS1wcmVmaXhcIjtcblxuZXhwb3J0IHR5cGUgVmFySUQgPSBgJHtTY2hlbWFQcmVmaXhWYWx1ZX1fJHtQYWdlUHJlZml4VmFsdWV9YDtcbmV4cG9ydCBjb25zdCBWYXJJRCA9IHtcbiAgY3JlYXRlOiAoc2NoZW1hUHJlZml4OiBTY2hlbWFQcmVmaXhWYWx1ZSwgcGFnZVByZWZpeDogUGFnZVByZWZpeFZhbHVlKTogVmFySUQgPT4ge1xuICAgIGNvbnN0IHZhcklkID0gc2NoZW1hUHJlZml4ICsgXCJfXCIgKyBwYWdlUHJlZml4O1xuICAgIHJldHVybiB2YXJJZCBhcyBWYXJJRDtcbiAgfSxcbn07XG4iLCAiaW1wb3J0IHsgQnVpbGRlclZhcmlhYmxlLCBCdWlsZGVyVmFyaWFibGVPcHRpb24gfSBmcm9tIFwiLi9SdWxlVmFyaWFibGVcIjtcbmltcG9ydCB7IEJ1aWxkZXJPcGVyYXRvciB9IGZyb20gXCIuL2NvbmRpdGlvbi9CdWlsZGVyLW9wZXJhdG9yXCI7XG5pbXBvcnQgeyBKdW1wVG9QYWdlQWN0aW9uIH0gZnJvbSBcIi4vUnVsZUFjdGlvblwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2luZ2xlU2VsZWN0SXRlbTxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlbGVjdExhYmVsO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b29sVGlwO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZWFyY2hTdHJpbmc7XG4gIGdldCBzZWxlY3RMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RMYWJlbDtcbiAgfVxuICBnZXQgdG9vbHRpcCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdG9vbFRpcDtcbiAgfVxuXG4gIGdldCBzZWFyY2hTdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaFN0cmluZztcbiAgfVxuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihyZWFkb25seSBkYXRhOiBUKSB7XG4gICAgdGhpcy5fc2VsZWN0TGFiZWwgPSB0aGlzLmdldFNlbGVjdExhYmVsKCk7XG4gICAgdGhpcy5fdG9vbFRpcCA9IHRoaXMuZ2V0VG9vbHRpcCgpO1xuICAgIHRoaXMuX3NlYXJjaFN0cmluZyA9IHRoaXMuZ2V0U2VhcmNoU3RyaW5nKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFNlbGVjdExhYmVsKCk6IHN0cmluZztcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFRvb2x0aXAoKTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0U2VhcmNoU3RyaW5nKCk6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFJ1bGVWYXJpYWJsZVNlbGVjdEl0ZW0gZXh0ZW5kcyBTaW5nbGVTZWxlY3RJdGVtPEJ1aWxkZXJWYXJpYWJsZT4ge1xuICBwdWJsaWMgc3RhdGljIGNyZWF0ZSA9IChkYXRhOiBCdWlsZGVyVmFyaWFibGUpID0+IHtcbiAgICByZXR1cm4gbmV3IFJ1bGVWYXJpYWJsZVNlbGVjdEl0ZW0oZGF0YSk7XG4gIH07XG4gIHJlYWRvbmx5IG9wdGlvbnM6IFJlYWRvbmx5QXJyYXk8UnVsZU9wdGlvblNlbGVjdEl0ZW0+O1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBkYXRhOiBCdWlsZGVyVmFyaWFibGUpIHtcbiAgICBzdXBlcihkYXRhKTtcbiAgICB0aGlzLm9wdGlvbnMgPSBkYXRhLm9wdGlvbnMubWFwKFJ1bGVPcHRpb25TZWxlY3RJdGVtLmNyZWF0ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U2VhcmNoU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS52YXJJZCArIHRoaXMuZGF0YS5sYWJlbDtcbiAgfVxuXG4gIGdldFNlbGVjdExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS52YXJJZDtcbiAgfVxuXG4gIGdldFRvb2x0aXAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmxhYmVsO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSdWxlT3B0aW9uU2VsZWN0SXRlbSBleHRlbmRzIFNpbmdsZVNlbGVjdEl0ZW08QnVpbGRlclZhcmlhYmxlT3B0aW9uPiB7XG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlID0gKG9wdGlvbjogQnVpbGRlclZhcmlhYmxlT3B0aW9uKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBSdWxlT3B0aW9uU2VsZWN0SXRlbShvcHRpb24pO1xuICB9O1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKG9wdGlvbjogQnVpbGRlclZhcmlhYmxlT3B0aW9uKSB7XG4gICAgc3VwZXIob3B0aW9uKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U2VhcmNoU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U2VsZWN0TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmxhYmVsICsgXCIoXCIgKyB0aGlzLmRhdGEudmFsdWUgKyBcIilcIjtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9wZXJhdG9yU2VsZWN0SXRlbSBleHRlbmRzIFNpbmdsZVNlbGVjdEl0ZW08QnVpbGRlck9wZXJhdG9yIHwgXCJcIj4ge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVRID0gbmV3IE9wZXJhdG9yU2VsZWN0SXRlbShcImVxdWFsXCIpO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PVF9FUSA9IG5ldyBPcGVyYXRvclNlbGVjdEl0ZW0oXCJub3RFcXVhbFwiKTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBmcm9tU3ltYm9sID0gKFxuICAgIHN5bWJvbDogQnVpbGRlck9wZXJhdG9yIHwgT21pdDxzdHJpbmcsIEJ1aWxkZXJPcGVyYXRvcj4sXG4gICk6IE9wZXJhdG9yU2VsZWN0SXRlbSB8IGZhbHNlID0+IHtcbiAgICBpZiAoc3ltYm9sID09PSBcImVxdWFsXCIpIHtcbiAgICAgIHJldHVybiBPcGVyYXRvclNlbGVjdEl0ZW0uRVE7XG4gICAgfVxuICAgIGlmIChzeW1ib2wgPT09IFwibm90RXF1YWxcIikge1xuICAgICAgcmV0dXJuIE9wZXJhdG9yU2VsZWN0SXRlbS5OT1RfRVE7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihvcGVyYXRvcjogQnVpbGRlck9wZXJhdG9yKSB7XG4gICAgc3VwZXIob3BlcmF0b3IpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNlYXJjaFN0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNlbGVjdExhYmVsKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgb3BlcmF0b3IgPSB0aGlzLmRhdGE7XG4gICAgaWYgKG9wZXJhdG9yID09PSBcImVxdWFsXCIpIHtcbiAgICAgIHJldHVybiBcIkVxdWFsc1wiO1xuICAgIH1cbiAgICBpZiAob3BlcmF0b3IgPT09IFwibm90RXF1YWxcIikge1xuICAgICAgcmV0dXJuIFwiTm90IGVxdWFsc1wiO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgb3BlcmF0b3IgPSB0aGlzLmRhdGE7XG4gICAgaWYgKG9wZXJhdG9yID09PSBcImVxdWFsXCIpIHtcbiAgICAgIHJldHVybiBcIkVxdWFsc1wiO1xuICAgIH1cbiAgICBpZiAob3BlcmF0b3IgPT09IFwibm90RXF1YWxcIikge1xuICAgICAgcmV0dXJuIFwiTm90IGVxdWFsc1wiO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSnVtcFRvUGFnZVNlbGVjdEl0ZW0gZXh0ZW5kcyBTaW5nbGVTZWxlY3RJdGVtPEp1bXBUb1BhZ2VBY3Rpb24+IHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBjcmVhdGUgPSAocGFnZURhdGE6IEp1bXBUb1BhZ2VBY3Rpb24pID0+IG5ldyBKdW1wVG9QYWdlU2VsZWN0SXRlbShwYWdlRGF0YSk7XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihwYWdlRGF0YTogSnVtcFRvUGFnZUFjdGlvbikge1xuICAgIHN1cGVyKHBhZ2VEYXRhKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTZWFyY2hTdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLnBhZ2VQcmVmaXggKyB0aGlzLmRhdGEubWFpblRleHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U2VsZWN0TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLnBhZ2VQcmVmaXggKyBcIiAoXCIgKyB0aGlzLmRhdGEucGFnZU51bWJlciArIFwiKVwiO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFRvb2x0aXAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLm1haW5UZXh0O1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBRdWVzdGlvblZhcmlhYmxlLCBDdXN0b21WYXJpYWJsZSwgQnVpbGRlclZhcmlhYmxlIH0gZnJvbSBcIi4vUnVsZVZhcmlhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEV4Y2x1ZGVCeVBhZ2VBY3Rpb24sIEV4Y2x1ZGVCeVRhZ0FjdGlvbiwgSnVtcFRvUGFnZUFjdGlvbiB9IGZyb20gXCIuL1J1bGVBY3Rpb25cIjtcbmltcG9ydCB7IEp1bXBUb1BhZ2VTZWxlY3RJdGVtIH0gZnJvbSBcIi4vU2luZ2xlU2VsZWN0SXRlbVwiO1xuXG4vKipcbiAqIFRPRE8gQ3JhdGUgZmlsdGVycyBmb3IgXCJjYXJkaW5hbGl0eVwiIG9yIFwib3JkZXJcIiBvZiBhIHZhcmlhYmxlO1xuICogUmV0dXJuIGxlZ2FsIGxpc3RzIG9mIHZhcmlhYmxlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFJ1bGVJbnB1dCB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3F1ZXN0aW9uVmFyaWFibGVzOiBSZWFkb25seUFycmF5PFF1ZXN0aW9uVmFyaWFibGU+LFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9jdXN0b21WYXJpYWJsZXM6IFJlYWRvbmx5QXJyYXk8Q3VzdG9tVmFyaWFibGU+LFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlSWRBY3Rpb25zOiBSZWFkb25seUFycmF5PEV4Y2x1ZGVCeVBhZ2VBY3Rpb24+LFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF90YWdBY3Rpb25zOiBSZWFkb25seUFycmF5PEV4Y2x1ZGVCeVRhZ0FjdGlvbj4sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2p1bXBBY3Rpb25zOiBSZWFkb25seUFycmF5PEp1bXBUb1BhZ2VBY3Rpb24+XG4gICAgKSB7fVxuXG4gICAgZ2V0IHF1ZXN0aW9uVmFycygpOiBSZWFkb25seUFycmF5PFF1ZXN0aW9uVmFyaWFibGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3F1ZXN0aW9uVmFyaWFibGVzO1xuICAgIH1cblxuICAgIGdldENvbmRpdGlvbklucHV0KCk6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclZhcmlhYmxlPiB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5xdWVzdGlvblZhcnMsIC4uLnRoaXMuY3VzdG9tVmFyc107XG4gICAgfVxuXG4gICAgZ2V0SnVtcFRvUGFnZU9wdGlvbnMoKTogUmVhZG9ubHlBcnJheTxKdW1wVG9QYWdlU2VsZWN0SXRlbT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fanVtcEFjdGlvbnMubWFwKEp1bXBUb1BhZ2VTZWxlY3RJdGVtLmNyZWF0ZSk7XG4gICAgfVxuXG4gICAgZ2V0IGN1c3RvbVZhcnMoKTogUmVhZG9ubHlBcnJheTxDdXN0b21WYXJpYWJsZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VzdG9tVmFyaWFibGVzO1xuICAgIH1cblxuICAgIGdldCBleGNsdWRlQnlQYWdlSWRBY3Rpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFnZUlkQWN0aW9ucztcbiAgICB9XG5cbiAgICBnZXQgZXhjbHVkZUJ5VGFnQWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhZ0FjdGlvbnM7XG4gICAgfVxuICAgIGdldCBqdW1wVG9QYWdlQWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2p1bXBBY3Rpb25zO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBCdWlsZGVyT2JqZWN0SWQsIEJ1aWxkZXJPYmplY3QgfSBmcm9tICcuL0J1aWxkZXJPYmplY3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJUYWdEdG8ge1xuICByZWFkb25seSBpZDogQnVpbGRlck9iamVjdElkLlRhZ0lkO1xuICByZWFkb25seSB0YWc6IHN0cmluZztcbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkZXJUYWcgZXh0ZW5kcyBCdWlsZGVyT2JqZWN0PCdidWlsZGVyLXRhZycsIEJ1aWxkZXJUYWdEdG8+IHtcbiAgcmVhZG9ubHkgb2JqZWN0VHlwZTogJ2J1aWxkZXItdGFnJyA9ICdidWlsZGVyLXRhZyc7XG4gIHJlYWRvbmx5IGlkOiBCdWlsZGVyT2JqZWN0SWQuVGFnSWQ7XG4gIHRhZ1RleHQgPSAnJztcbiAgdGFnRGVzY3JpcHRpb24gPSAnJztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNQVhfTEVOR1RIID0gMjA7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUlOX0xFTkdUSCA9IDE7XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBjcmVhdGUgPSAodGFnOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcgPSAnJykgPT4ge1xuICAgIGNvbnN0IGlkID0gQnVpbGRlck9iamVjdElkLmNyZWF0ZVRhZ0lkKCk7XG4gICAgY29uc3QgZHRvOiBCdWlsZGVyVGFnRHRvID0ge1xuICAgICAgaWQsXG4gICAgICB0YWcsXG4gICAgICBkZXNjcmlwdGlvblxuICAgIH07XG4gICAgcmV0dXJuIG5ldyBCdWlsZGVyVGFnKGR0byk7XG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZnJvbUR0byA9IChkdG86IEJ1aWxkZXJUYWdEdG8pID0+IHtcbiAgICByZXR1cm4gbmV3IEJ1aWxkZXJUYWcoZHRvKTtcbiAgfTtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGR0bzogQnVpbGRlclRhZ0R0bykge1xuICAgIGNvbnN0IGlkID0gZHRvLmlkID8/IEJ1aWxkZXJPYmplY3RJZC5jcmVhdGVUYWdJZCgpO1xuICAgIGNvbnN0IHdpdGhJZCA9IHsgLi4uZHRvLCBpZCB9O1xuICAgIHN1cGVyKHdpdGhJZCk7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMudGFnVGV4dCA9IGR0by50YWcgPz8gJyc7XG4gICAgdGhpcy50YWdEZXNjcmlwdGlvbiA9IGR0by5kZXNjcmlwdGlvbiA/PyAnJztcbiAgfVxuICBjbG9uZSgpOiBCdWlsZGVyVGFnRHRvIHtcbiAgICByZXR1cm4gdGhpcy50b0pzb24oKTtcbiAgfVxuXG4gIHRvSnNvbigpOiBCdWlsZGVyVGFnRHRvIHtcbiAgICByZXR1cm4geyB0YWc6IHRoaXMudGFnVGV4dCwgZGVzY3JpcHRpb246IHRoaXMudGFnRGVzY3JpcHRpb24sIGlkOiB0aGlzLmlkIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRhZ0NvbGxlY3Rpb24gaW1wbGVtZW50cyBJdGVyYWJsZTxCdWlsZGVyVGFnPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RhZ3MgPSBuZXcgU2V0PEJ1aWxkZXJUYWc+KCk7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgY3JlYXRlID0gKCkgPT4ge1xuICAgIHJldHVybiBuZXcgVGFnQ29sbGVjdGlvbihbXSk7XG4gIH07XG5cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgY29uc3QgbGlzdCA9IFsuLi50aGlzLl90YWdzXTtcbiAgICByZXR1cm4gbGlzdFtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIH1cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihpbml0aWFsVGFnczogUmVhZG9ubHlBcnJheTxCdWlsZGVyVGFnPikge1xuICAgIGluaXRpYWxUYWdzLmZvckVhY2godGFnID0+IHtcbiAgICAgIHRoaXMuX3RhZ3MuYWRkKHRhZyk7XG4gICAgfSk7XG4gIH1cblxuICBpbml0KHRhZ3M6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclRhZ0R0bz4pIHtcbiAgICBjb25zdCBkdG9MaXN0OiBSZWFkb25seUFycmF5PEJ1aWxkZXJUYWdEdG8+ID0gQXJyYXkuaXNBcnJheSh0YWdzKVxuICAgICAgPyB0YWdzXG4gICAgICA6IFtdO1xuICAgIGNvbnN0IGFsbCA9IGR0b0xpc3QubWFwKEJ1aWxkZXJUYWcuZnJvbUR0byk7XG4gICAgYWxsLmZvckVhY2godGFnID0+IHtcbiAgICAgIHRoaXMuX3RhZ3MuYWRkKHRhZyk7XG4gICAgfSk7XG4gIH1cblxuICBhZGQodGFnOiBCdWlsZGVyVGFnKSB7XG4gICAgdGhpcy5fdGFncy5hZGQodGFnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgdGhpcyB0YWcgZnJvbSBjb2xsZWN0aW9uO1xuICAgKiBAcGFyYW0gdGFnXG4gICAqL1xuICBkZWxldGUodGFnOiBCdWlsZGVyVGFnKSB7XG4gICAgdGhpcy5fdGFncy5kZWxldGUodGFnKTtcbiAgfVxuXG4gIHRvSnNvbigpOiBSZWFkb25seUFycmF5PEJ1aWxkZXJUYWdEdG8+IHtcbiAgICBjb25zdCBsaXN0ID0gWy4uLnRoaXMuX3RhZ3NdO1xuICAgIGNvbnN0IGR0b0xpc3QgPSBsaXN0Lm1hcCh0ID0+IHQudG9Kc29uKCkpO1xuICAgIHJldHVybiBkdG9MaXN0O1xuICB9XG5cbiAgZGVsZXRlQWxsKHRhZ3M6IEl0ZXJhYmxlPEJ1aWxkZXJUYWc+KSB7XG4gICAgY29uc3QgbCA9IHRhZ3NbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgIGNvbnN0IGFzTGlzdCA9IFsuLi50YWdzXTtcbiAgICBhc0xpc3QuZm9yRWFjaCh0ID0+IHtcbiAgICAgIHRoaXMuZGVsZXRlKHQpO1xuICAgIH0pO1xuICB9XG59XG4iLCAiY29uc3QgQnVpbGRlck9wZXJhdG9yU3ltYm9scyA9IHtcbiAgZXF1YWw6IHRydWUsXG4gIG5vdEVxdWFsOiB0cnVlLFxuICBsZXNzVGhhbjogdHJ1ZSxcbiAgbGVzc1RoYW5PckVxdWFsOiB0cnVlLFxuICBncmVhdGVyVGhhbjogdHJ1ZSxcbiAgZ3JlYXRlclRoYW5PckVxdWFsOiB0cnVlLFxuICBiZXR3ZWVuOiB0cnVlLFxuICBub3RCZXR3ZWVuOiB0cnVlLFxuICBpbjogdHJ1ZSxcbiAgbm90SW46IHRydWUsXG4gIG1pc3Npbmc6IHRydWUsXG4gIG5vdE1pc3Npbmc6IHRydWUsXG4gIGNvbnRhaW5zOiB0cnVlLFxuICBub3RDb250YWluczogdHJ1ZSxcbiAgZW1wdHk6IHRydWUsXG4gIG5vdEVtcHR5OiB0cnVlLFxuICBzdGFydHNXaXRoOiB0cnVlLFxuICBlbmRzV2l0aDogdHJ1ZSxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIEJ1aWxkZXJPcGVyYXRvciA9IGtleW9mIHR5cGVvZiBCdWlsZGVyT3BlcmF0b3JTeW1ib2xzO1xuXG5leHBvcnQgbmFtZXNwYWNlIEJ1aWxkZXJPcGVyYXRvciB7XG4gIGV4cG9ydCBjb25zdCBpcyA9IChzeW1ib2w/OiBzdHJpbmcpOiBzeW1ib2wgaXMgQnVpbGRlck9wZXJhdG9yID0+IHtcbiAgICBpZiAodHlwZW9mIHN5bWJvbCAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoQnVpbGRlck9wZXJhdG9yU3ltYm9scykuaW5jbHVkZXMoc3ltYm9sKTtcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBCdWlsZGVyT2JqZWN0IH0gZnJvbSBcIi4uLy4uL0J1aWxkZXJPYmplY3RcIjtcbmltcG9ydCB7IEJ1aWxkZXJPcGVyYXRvciB9IGZyb20gXCIuL0J1aWxkZXItb3BlcmF0b3JcIjtcbmltcG9ydCB0eXBlIHsgQnVpbGRlclZhcmlhYmxlLCBCdWlsZGVyVmFyaWFibGVPcHRpb24gfSBmcm9tIFwiLi4vUnVsZVZhcmlhYmxlXCI7XG5pbXBvcnQgeyBPcGVyYXRvclNlbGVjdEl0ZW0sIFJ1bGVPcHRpb25TZWxlY3RJdGVtLCBSdWxlVmFyaWFibGVTZWxlY3RJdGVtIH0gZnJvbSBcIi4uL1NpbmdsZVNlbGVjdEl0ZW1cIjtcbmltcG9ydCB7IENvbmRpdGlvbiB9IGZyb20gXCJAbWVkaWEtcXVlc3QvZW5naW5lXCI7XG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJDb25kaXRpb25EdG8ge1xuICByZWFkb25seSBraW5kOiBcImNvbmRpdGlvblwiO1xuICByZWFkb25seSBvcGVyYXRvcjogQnVpbGRlck9wZXJhdG9yIHwgXCJcIjtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSB2YXJpYWJsZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZhbHVlOiBudW1iZXIgfCBzdHJpbmcgfCBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgQnVpbGRlckNvbmRpdGlvbiBleHRlbmRzIEJ1aWxkZXJPYmplY3Q8XCJidWlsZGVyLWNvbmRpdGlvblwiLCBCdWlsZGVyQ29uZGl0aW9uRHRvPiB7XG4gIHJlYWRvbmx5IG9iamVjdFR5cGU6IFwiYnVpbGRlci1jb25kaXRpb25cIiA9IFwiYnVpbGRlci1jb25kaXRpb25cIjtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOVU1CRVJfT1BFUkFUT1JTOiBSZWFkb25seUFycmF5PE9wZXJhdG9yU2VsZWN0SXRlbT4gPSBbXG4gICAgT3BlcmF0b3JTZWxlY3RJdGVtLkVRLFxuICAgIE9wZXJhdG9yU2VsZWN0SXRlbS5OT1RfRVEsXG4gIF07XG5cbiAgcHJpdmF0ZSBpbml0aWFsRHRvOiBCdWlsZGVyQ29uZGl0aW9uRHRvO1xuICBuYW1lID0gXCJcIjtcblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZSA9ICh2YXJpYWJsZUxpc3Q6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclZhcmlhYmxlPikgPT4ge1xuICAgIGNvbnN0IGNvbmRpdGlvbiA9IG5ldyBCdWlsZGVyQ29uZGl0aW9uKFxuICAgICAge1xuICAgICAgICBraW5kOiBcImNvbmRpdGlvblwiLFxuICAgICAgICBuYW1lOiBcIlwiLFxuICAgICAgICBvcGVyYXRvcjogXCJcIixcbiAgICAgICAgdmFyaWFibGVJZDogXCJcIixcbiAgICAgICAgdmFsdWU6IFwiXCIsXG4gICAgICB9LFxuICAgICAgdmFyaWFibGVMaXN0LFxuICAgICk7XG4gICAgcmV0dXJuIGNvbmRpdGlvbjtcbiAgfTtcblxuICBwdWJsaWMgc3RhdGljIGZyb21EdG8gPSAoZHRvOiBCdWlsZGVyQ29uZGl0aW9uRHRvLCB2YXJpYWJsZXM6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclZhcmlhYmxlPikgPT4ge1xuICAgIGNvbnN0IF9kdG86IEJ1aWxkZXJDb25kaXRpb25EdG8gPSB7XG4gICAgICBraW5kOiBcImNvbmRpdGlvblwiLFxuICAgICAgbmFtZTogZHRvLm5hbWUgPz8gXCJcIixcbiAgICAgIHZhbHVlOiBkdG8udmFsdWUgPz8gXCJcIixcbiAgICAgIG9wZXJhdG9yOiBkdG8ub3BlcmF0b3IgPz8gXCJcIixcbiAgICAgIHZhcmlhYmxlSWQ6IGR0by52YXJpYWJsZUlkID8/IFwiXCIsXG4gICAgfTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBCdWlsZGVyQ29uZGl0aW9uKF9kdG8sIHZhcmlhYmxlcyk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xuICBwcml2YXRlIF92YXJpYWJsZTogQnVpbGRlclZhcmlhYmxlIHwgZmFsc2UgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfb3BlcmF0b3I6IEJ1aWxkZXJPcGVyYXRvciB8IFwiXCIgPSBcIlwiO1xuICBwcml2YXRlIF92YWx1ZTogQnVpbGRlclZhcmlhYmxlT3B0aW9uIHwgZmFsc2UgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfdmFyaWFibGVMaXN0OiBSZWFkb25seUFycmF5PEJ1aWxkZXJWYXJpYWJsZT4gPSBbXTtcblxuICAvKipcbiAgICogQ2FuIG9ubHkgc2V0IHZhcmlhYmxlcyB0aGF0IGV4aXN0IGluIHZhcmlhYmxlTGlzdC5cbiAgICogQHBhcmFtIHZhcmlhYmxlXG4gICAqL1xuICBzZXQgdmFyaWFibGUodmFyaWFibGU6IEJ1aWxkZXJWYXJpYWJsZSB8IGZhbHNlKSB7XG4gICAgaWYgKHZhcmlhYmxlID09PSB0aGlzLl92YXJpYWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl92YXJpYWJsZSA9IHZhcmlhYmxlO1xuICAgIHRoaXMuX29wZXJhdG9yID0gXCJcIjtcbiAgICB0aGlzLl92YWx1ZSA9IGZhbHNlO1xuICB9XG5cbiAgZ2V0IHZhcmlhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLl92YXJpYWJsZTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2YXJpYWJsZVZhbHVlOiBCdWlsZGVyVmFyaWFibGVPcHRpb24gfCBmYWxzZSkge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFyaWFibGVWYWx1ZTtcbiAgfVxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgdmFsaWRhdGUoKTogeyBpc1ZhbGlkOiB0cnVlIH0gfCB7IGlzVmFsaWQ6IGZhbHNlOyBtZXNzYWdlOiBzdHJpbmcgfSB7XG4gICAgaWYgKHRoaXMuX3ZhcmlhYmxlTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBcIkhhcyBubyB2YXJpYWJsZUxpc3QgdG8gY2hlY2sgZHRvIGFnYWluc3QuXCIsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3ZhcmlhYmxlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogXCJWYXJpYWJsZSBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgZnJvbSB2YXJpYWJsZUxpc3QuXCIsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fb3BlcmF0b3IpIHtcbiAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBtZXNzYWdlOiBcIk9wZXJhdG9yIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZFwiIH07XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl92YWx1ZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IFwiVmFsdWUgKEJ1aWxkZXJWYXJpYWJsZU9wdGlvbikgaXMgbm90IGluaXRpYWxpemVkXCIsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUgfTtcbiAgfVxuXG4gIHRvRW5naW5lQ29uZGl0aW9uKCk6IENvbmRpdGlvbi5TaW1wbGUgfCBmYWxzZSB7XG4gICAgY29uc3QgdmFsID0gdGhpcy52YWx1ZTtcbiAgICBjb25zdCBvcCA9IHRoaXMuX29wZXJhdG9yO1xuICAgIGNvbnN0IHYgPSB0aGlzLl92YXJpYWJsZTtcbiAgICBpZiAoIXZhbCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghb3ApIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIXYpIHJldHVybiBmYWxzZTtcbiAgICBpZiAob3AgPT09IFwiZXF1YWxcIikge1xuICAgICAgY29uc3QgZW5naW5lQ29uZGl0aW9uOiBDb25kaXRpb24uU2ltcGxlID0ge1xuICAgICAgICBraW5kOiBcIm51bWVyaWMtY29uZGl0aW9uXCIsXG4gICAgICAgIHZhbHVlOiB2YWwudmFsdWUsXG4gICAgICAgIHZhbHVlTGFiZWw6IHZhbC5sYWJlbCxcbiAgICAgICAgcmVmZXJlbmNlSWQ6IHYudmFySWQsXG4gICAgICAgIHJlZmVyZW5jZUxhYmVsOiB2LmxhYmVsLFxuICAgICAgICBvcGVyYXRvcjogXCJlcVwiLFxuICAgICAgfTtcbiAgICAgIHJldHVybiBlbmdpbmVDb25kaXRpb247XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZFZhcmlhYmxlSW5Vbml2ZXJzZSh2YXJpYWJsZUlkOiBzdHJpbmcpOiBCdWlsZGVyVmFyaWFibGUgfCBmYWxzZSB7XG4gICAgY29uc3QgdiA9IHRoaXMuX3ZhcmlhYmxlTGlzdC5maW5kKCh2KSA9PiB2LnZhcklkID09PSB2YXJpYWJsZUlkKTtcbiAgICByZXR1cm4gdiA/PyBmYWxzZTtcbiAgfVxuXG4gIHNldCBvcGVyYXRvcihvcGVyYXRvcjogQnVpbGRlck9wZXJhdG9yIHwgXCJcIikge1xuICAgIGlmIChCdWlsZGVyT3BlcmF0b3IuaXMob3BlcmF0b3IpKSB7XG4gICAgICB0aGlzLl9vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vcGVyYXRvciA9IFwiXCI7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG9wZXJhdG9yKCkge1xuICAgIHJldHVybiB0aGlzLl9vcGVyYXRvcjtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoZHRvOiBCdWlsZGVyQ29uZGl0aW9uRHRvLCB2YXJpYWJsZXM6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclZhcmlhYmxlPikge1xuICAgIHN1cGVyKGR0byk7XG4gICAgdGhpcy5pbml0aWFsRHRvID0gZHRvO1xuICAgIHRoaXMubmFtZSA9IGR0by5uYW1lO1xuICAgIHRoaXMuX3NldFZhcmlhYmxlTGlzdCh2YXJpYWJsZXMpO1xuICB9XG5cbiAgZ2V0IHZhcmlhYmxlU2VsZWN0SXRlbXNJblVuaXZlcnNlKCk6IFJlYWRvbmx5QXJyYXk8UnVsZVZhcmlhYmxlU2VsZWN0SXRlbT4ge1xuICAgIHJldHVybiB0aGlzLl92YXJpYWJsZUxpc3QubWFwKFJ1bGVWYXJpYWJsZVNlbGVjdEl0ZW0uY3JlYXRlKTtcbiAgfVxuXG4gIGdldCBvcGVyYXRvcnNTZWxlY3RJdGVtcygpOiBSZWFkb25seUFycmF5PE9wZXJhdG9yU2VsZWN0SXRlbT4ge1xuICAgIHJldHVybiB0aGlzLl92YXJpYWJsZSA/IEJ1aWxkZXJDb25kaXRpb24uTlVNQkVSX09QRVJBVE9SUyA6IFtdO1xuICB9XG5cbiAgZ2V0IHNlbGVjdFZhbHVlSXRlbXMoKTogUmVhZG9ubHlBcnJheTxSdWxlT3B0aW9uU2VsZWN0SXRlbT4ge1xuICAgIGlmICghdGhpcy5fdmFyaWFibGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3Qgb3B0ID0gdGhpcy5fdmFyaWFibGUub3B0aW9ucy5tYXAoUnVsZU9wdGlvblNlbGVjdEl0ZW0uY3JlYXRlKTtcbiAgICByZXR1cm4gb3B0O1xuICB9XG5cbiAgY2xvbmUoKTogQnVpbGRlckNvbmRpdGlvbkR0byB7XG4gICAgcmV0dXJuIHRoaXMudG9Kc29uKCk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRWYXJpYWJsZUxpc3QodmFyaWFibGVzOiBSZWFkb25seUFycmF5PEJ1aWxkZXJWYXJpYWJsZT4pOiBib29sZWFuIHtcbiAgICB0aGlzLl92YXJpYWJsZUxpc3QgPSB2YXJpYWJsZXM7XG4gICAgY29uc3QgdiA9IHRoaXMuX3ZhcmlhYmxlTGlzdC5maW5kKCh2KSA9PiB2LnZhcklkID09PSB0aGlzLm9yaWdpbmFsRHRvLnZhcmlhYmxlSWQpO1xuICAgIGlmICghdikge1xuICAgICAgdGhpcy5fdmFyaWFibGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX29wZXJhdG9yID0gXCJcIjtcbiAgICAgIHRoaXMuX3ZhbHVlID0gZmFsc2U7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuX3ZhcmlhYmxlID0gdjtcbiAgICBjb25zdCBvcCA9IHRoaXMub3JpZ2luYWxEdG8ub3BlcmF0b3I7XG5cbiAgICBpZiAoIUJ1aWxkZXJPcGVyYXRvci5pcyhvcCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5fb3BlcmF0b3IgPSBvcDtcbiAgICBjb25zdCBtYXliZU9wdGlvbiA9IHYub3B0aW9ucy5maW5kKChvcCkgPT4gb3AudmFsdWUgPT09IHRoaXMub3JpZ2luYWxEdG8udmFsdWUpO1xuICAgIGlmICghbWF5YmVPcHRpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5fdmFsdWUgPSBtYXliZU9wdGlvbjtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHRvSnNvbigpOiBCdWlsZGVyQ29uZGl0aW9uRHRvIHtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5uYW1lO1xuICAgIGNvbnN0IHZhcmlhYmxlSWQgPSB0aGlzLl92YXJpYWJsZSA/IHRoaXMuX3ZhcmlhYmxlLnZhcklkIDogXCJcIjtcbiAgICBjb25zdCBvcGVyYXRvciA9IHRoaXMuX29wZXJhdG9yID8gdGhpcy5fb3BlcmF0b3IgOiBcIlwiO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fdmFsdWUgPyB0aGlzLl92YWx1ZS52YWx1ZSA6IFwiXCI7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtpbmQ6IFwiY29uZGl0aW9uXCIsXG4gICAgICBuYW1lLFxuICAgICAgb3BlcmF0b3IsXG4gICAgICB2YXJpYWJsZUlkLFxuICAgICAgdmFsdWUsXG4gICAgfTtcbiAgfVxufVxuIiwgImltcG9ydCB7IEJ1aWxkZXJDb25kaXRpb24sIHR5cGUgQnVpbGRlckNvbmRpdGlvbkR0byB9IGZyb20gXCIuL0J1aWxkZXItY29uZGl0aW9uXCI7XG5pbXBvcnQgeyBCdWlsZGVyT2JqZWN0IH0gZnJvbSBcIi4uLy4uL0J1aWxkZXJPYmplY3RcIjtcbmltcG9ydCB0eXBlIHsgQnVpbGRlclZhcmlhYmxlIH0gZnJvbSBcIi4uL1J1bGVWYXJpYWJsZVwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcblxuY29uc3QgQ29uZGl0aW9uR3JvdXBUeXBlID0ge1xuICBhbGw6IHRydWUsXG4gIGFueTogdHJ1ZSxcbiAgY291bnQ6IHRydWUsXG59O1xuXG5leHBvcnQgdHlwZSBDb25kaXRpb25Hcm91cFR5cGUgPSBrZXlvZiB0eXBlb2YgQ29uZGl0aW9uR3JvdXBUeXBlO1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZGVyQ29uZGl0aW9uR3JvdXBEdG8ge1xuICByZWFkb25seSBraW5kOiBcImNvbmRpdGlvbi1ncm91cFwiO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvdW50PzogbnVtYmVyO1xuICByZWFkb25seSB0eXBlOiBDb25kaXRpb25Hcm91cFR5cGU7XG4gIHJlYWRvbmx5IGNvbmRpdGlvbnM6IFJlYWRvbmx5QXJyYXk8QnVpbGRlckNvbmRpdGlvbkR0bz47XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZGVyQ29uZGl0aW9uR3JvdXAgZXh0ZW5kcyBCdWlsZGVyT2JqZWN0PFwiYnVpbGRlci1jb25kaXRpb24tZ3JvdXBcIiwgQnVpbGRlckNvbmRpdGlvbkdyb3VwRHRvPiB7XG4gIHN0YXRpYyByZWFkb25seSBpc0NvbmRpdGlvbkdyb3VwVHlwZSA9ICh2YWx1ZTogc3RyaW5nIHwgc3ltYm9sKTogdmFsdWUgaXMgQ29uZGl0aW9uR3JvdXBUeXBlID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkVmFsdWVzID0gT2JqZWN0LmtleXMoQ29uZGl0aW9uR3JvdXBUeXBlKTtcbiAgICByZXR1cm4gdmFsaWRWYWx1ZXMuaW5jbHVkZXModmFsdWUpO1xuICB9O1xuXG4gIHJlYWRvbmx5IG9iamVjdFR5cGU6IFwiYnVpbGRlci1jb25kaXRpb24tZ3JvdXBcIiA9IFwiYnVpbGRlci1jb25kaXRpb24tZ3JvdXBcIjtcbiAgcHJpdmF0ZSBfdHlwZTogQ29uZGl0aW9uR3JvdXBUeXBlO1xuICBuYW1lID0gXCJcIjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29uZGl0aW9uczogQXJyYXk8QnVpbGRlckNvbmRpdGlvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZhcmlhYmxlTGlzdDogUmVhZG9ubHlBcnJheTxCdWlsZGVyVmFyaWFibGU+O1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZnJvbUR0byA9IChkdG86IEJ1aWxkZXJDb25kaXRpb25Hcm91cER0bywgdmFyaWFibGVMaXN0OiBSZWFkb25seUFycmF5PEJ1aWxkZXJWYXJpYWJsZT4pID0+IHtcbiAgICByZXR1cm4gbmV3IEJ1aWxkZXJDb25kaXRpb25Hcm91cChkdG8sIHZhcmlhYmxlTGlzdCk7XG4gIH07XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihkdG86IEJ1aWxkZXJDb25kaXRpb25Hcm91cER0bywgdmFyaWFibGVMaXN0OiBSZWFkb25seUFycmF5PEJ1aWxkZXJWYXJpYWJsZT4pIHtcbiAgICBzdXBlcihkdG8pO1xuICAgIHRoaXMubmFtZSA9IGR0by5uYW1lO1xuICAgIHRoaXMuX3R5cGUgPSBkdG8udHlwZTtcbiAgICBjb25zdCBjb25kaXRpb25MaXN0ID0gQXJyYXkuaXNBcnJheShkdG8uY29uZGl0aW9ucykgPyBkdG8uY29uZGl0aW9ucyA6IFtdO1xuICAgIHRoaXMuX2NvbmRpdGlvbnMgPSBjb25kaXRpb25MaXN0Lm1hcCgoZHRvKSA9PiBCdWlsZGVyQ29uZGl0aW9uLmZyb21EdG8oZHRvLCB2YXJpYWJsZUxpc3QpKTtcbiAgICB0aGlzLl92YXJpYWJsZUxpc3QgPSB2YXJpYWJsZUxpc3Q7XG4gIH1cbiAgZ2V0IGNvbmRpdGlvbnMoKTogUmVhZG9ubHlBcnJheTxCdWlsZGVyQ29uZGl0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmRpdGlvbnM7XG4gIH1cblxuICBnZXQgY29uZGl0aW9uQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmRpdGlvbnMubGVuZ3RoO1xuICB9XG5cbiAgYWRkQ29uZGl0aW9uKCk6IEJ1aWxkZXJDb25kaXRpb24ge1xuICAgIGNvbnN0IG5ld0NvbmRpdGlvbnMgPSBCdWlsZGVyQ29uZGl0aW9uLmNyZWF0ZSh0aGlzLl92YXJpYWJsZUxpc3QpO1xuICAgIHRoaXMuX2NvbmRpdGlvbnMucHVzaChuZXdDb25kaXRpb25zKTtcbiAgICByZXR1cm4gbmV3Q29uZGl0aW9ucztcbiAgfVxuXG4gIHJlbW92ZUNvbmRpdGlvbihjb25kaXRpb246IEJ1aWxkZXJDb25kaXRpb24pOiBib29sZWFuIHtcbiAgICAvLyB0aGlzLl9jb25kaXRpb25zLlxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fY29uZGl0aW9ucy5pbmRleE9mKGNvbmRpdGlvbik7XG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLl9jb25kaXRpb25zLnNwbGljZShpbmRleCwgMSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjbG9uZSgpOiBCdWlsZGVyQ29uZGl0aW9uR3JvdXBEdG8ge1xuICAgIHJldHVybiB0aGlzLnRvSnNvbigpO1xuICB9XG5cbiAgdG9Kc29uKCk6IEJ1aWxkZXJDb25kaXRpb25Hcm91cER0byB7XG4gICAgY29uc3QgY29uZGl0aW9uczogUmVhZG9ubHlBcnJheTxCdWlsZGVyQ29uZGl0aW9uRHRvPiA9IFsuLi50aGlzLl9jb25kaXRpb25zLm1hcCgoYykgPT4gYy50b0pzb24oKSldO1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBjb25kaXRpb25zLFxuICAgICAgdHlwZTogdGhpcy5fdHlwZSxcbiAgICAgIGtpbmQ6IFwiY29uZGl0aW9uLWdyb3VwXCIsXG4gICAgfTtcbiAgfVxuXG4gIHRvRW5naW5lQ29uZGl0aW9uQ29tcGxleCgpOiBDb25kaXRpb24uQ29tcGxleCB8IGZhbHNlIHtcbiAgICBjb25zdCBjb21wOiBDb25kaXRpb24uQ29tcGxleCA9IHtcbiAgICAgIGtpbmQ6IFwiY29tcGxleC1jb25kaXRpb25cIixcbiAgICAgIGFsbDogW10sXG4gICAgICBzb21lOiBbXSxcbiAgICAgIG5hbWU6IFwiXCIsXG4gICAgfTtcbiAgICBjb25zdCBjb25kaXRpb25zOiBDb25kaXRpb24uU2ltcGxlW10gPSBbXTtcbiAgICB0aGlzLmNvbmRpdGlvbnMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgY29uc3QgbWF5YmVTaW1wbGUgPSBjLnRvRW5naW5lQ29uZGl0aW9uKCk7XG4gICAgICBpZiAobWF5YmVTaW1wbGUpIHtcbiAgICAgICAgY29uZGl0aW9ucy5wdXNoKG1heWJlU2ltcGxlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAodGhpcy5fdHlwZSA9PT0gXCJhbGxcIikge1xuICAgICAgcmV0dXJuIHsgLi4uY29tcCwgYWxsOiBjb25kaXRpb25zIH07XG4gICAgfVxuICAgIGlmICh0aGlzLl90eXBlID09PSBcImFueVwiKSB7XG4gICAgICByZXR1cm4geyAuLi5jb21wLCBzb21lOiBjb25kaXRpb25zIH07XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coXCJJTlZBTElEIENPTVBMRVggQ09ORElUSU9OLiBUT0RPIElNUExFTUVOVCByYW5nZSwgYW5kIGNvdW50LlwiKTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBnZXQgdHlwZSgpOiBDb25kaXRpb25Hcm91cFR5cGUge1xuICAgIHJldHVybiB0aGlzLl90eXBlO1xuICB9XG4gIHNldCB0eXBlKGNvbmRpdGlvbkdyb3VwVHlwZTogQ29uZGl0aW9uR3JvdXBUeXBlKSB7XG4gICAgaWYgKEJ1aWxkZXJDb25kaXRpb25Hcm91cC5pc0NvbmRpdGlvbkdyb3VwVHlwZShjb25kaXRpb25Hcm91cFR5cGUpKSB7XG4gICAgICB0aGlzLl90eXBlID0gY29uZGl0aW9uR3JvdXBUeXBlO1xuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7IEV4Y2x1ZGVCeVBhZ2VBY3Rpb24sIEV4Y2x1ZGVCeVRhZ0FjdGlvbiB9IGZyb20gXCIuL1J1bGVBY3Rpb25cIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE11bHRpU2VsZWN0SXRlbTxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzU2VsZWN0ZWRJbml0aWFsbHk6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlbGVjdExhYmVsO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b29sVGlwO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZWFyY2hTdHJpbmc7XG4gIHB1YmxpYyBpc1NlbGVjdGVkOiBib29sZWFuO1xuICBnZXQgc2VsZWN0TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0TGFiZWw7XG4gIH1cbiAgZ2V0IHRvb2x0aXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rvb2xUaXA7XG4gIH1cblxuICBnZXQgc2VhcmNoU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWFyY2hTdHJpbmc7XG4gIH1cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IGRhdGE6IFQsXG4gICAgaXNTZWxlY3RlZDogYm9vbGVhbixcbiAgKSB7XG4gICAgdGhpcy5faXNTZWxlY3RlZEluaXRpYWxseSA9IGlzU2VsZWN0ZWQ7XG4gICAgdGhpcy5pc1NlbGVjdGVkID0gaXNTZWxlY3RlZDtcbiAgICB0aGlzLl9zZWFyY2hTdHJpbmcgPSB0aGlzLmdldFNlYXJjaFN0cmluZygpO1xuICAgIHRoaXMuX3Rvb2xUaXAgPSB0aGlzLmdldFRvb2x0aXAoKTtcbiAgICB0aGlzLl9zZWxlY3RMYWJlbCA9IHRoaXMuZ2V0U2VsZWN0TGFiZWwoKTtcbiAgfVxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0U2VsZWN0TGFiZWwoKTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0VG9vbHRpcCgpOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRTZWFyY2hTdHJpbmcoKTogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgRXhjbHVkZUJ5VGFnU2VsZWN0SXRlbSBleHRlbmRzIE11bHRpU2VsZWN0SXRlbTxFeGNsdWRlQnlUYWdBY3Rpb24+IHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBjcmVhdGUgPSAodGFnRGF0YTogRXhjbHVkZUJ5VGFnQWN0aW9uLCBpc1NlbGVjdGVkOiBib29sZWFuKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBFeGNsdWRlQnlUYWdTZWxlY3RJdGVtKHRhZ0RhdGEsIGlzU2VsZWN0ZWQpO1xuICB9O1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoZGF0YTogRXhjbHVkZUJ5VGFnQWN0aW9uLCBpc1NlbGVjdGVkOiBib29sZWFuKSB7XG4gICAgc3VwZXIoZGF0YSwgaXNTZWxlY3RlZCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFNlYXJjaFN0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEudGFnO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNlbGVjdExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS50YWcgKyBcIiAoXCIgKyB0aGlzLmRhdGEucGFnZUNvdW50ICsgXCIpXCI7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0VG9vbHRpcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEudGFnICsgXCIgICh1c2VkIGluIFwiICsgdGhpcy5kYXRhLnBhZ2VDb3VudCArIFwiIHBhZ2VzKVwiO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFeGNsdWRlQnlQYWdlSWRTZWxlY3RJdGVtIGV4dGVuZHMgTXVsdGlTZWxlY3RJdGVtPEV4Y2x1ZGVCeVBhZ2VBY3Rpb24+IHtcbiAgcHVibGljIHN0YXRpYyBjcmVhdGUgPSAocnVsZUFjdGlvblBhZ2U6IEV4Y2x1ZGVCeVBhZ2VBY3Rpb24sIGlzU2VsZWN0ZWQ6IGJvb2xlYW4pID0+IHtcbiAgICByZXR1cm4gbmV3IEV4Y2x1ZGVCeVBhZ2VJZFNlbGVjdEl0ZW0ocnVsZUFjdGlvblBhZ2UsIGlzU2VsZWN0ZWQpO1xuICB9O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihkYXRhOiBFeGNsdWRlQnlQYWdlQWN0aW9uLCBpc1NlbGVjdGVkOiBib29sZWFuKSB7XG4gICAgc3VwZXIoZGF0YSwgaXNTZWxlY3RlZCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFNlYXJjaFN0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEucGFnZVByZWZpeCArIHRoaXMuZGF0YS5tYWluVGV4dDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTZWxlY3RMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEucGFnZVByZWZpeCArIFwiIChcIiArIHRoaXMuZGF0YS5wYWdlTnVtYmVyICsgXCIpXCI7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0VG9vbHRpcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEubWFpblRleHQ7XG4gIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IFJ1bGVJbnB1dCB9IGZyb20gXCIuL1J1bGVJbnB1dFwiO1xuaW1wb3J0IHsgRXhjbHVkZUJ5VGFnU2VsZWN0SXRlbSB9IGZyb20gXCIuL211bHRpLXNlbGVjdC1pdGVtXCI7XG5pbXBvcnQgeyBFeGNsdWRlQnlUYWdBY3Rpb24gfSBmcm9tIFwiLi9SdWxlQWN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBUYWdBY3Rpb25NYW5hZ2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfaW5pdGlhbFNlbGVjdGlvbjogU2V0PHN0cmluZz47XG4gIHJlYWRvbmx5IHNlbGVjdEl0ZW1zOiBSZWFkb25seUFycmF5PEV4Y2x1ZGVCeVRhZ1NlbGVjdEl0ZW0+O1xuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSB2YWxpZE9wdGlvbnM6IFJ1bGVJbnB1dFtcIl90YWdBY3Rpb25zXCJdLFxuICAgIHJlYWRvbmx5IGluaXRpYWxTZWxlY3Rpb246IFJlYWRvbmx5QXJyYXk8c3RyaW5nPixcbiAgKSB7XG4gICAgdGhpcy5faW5pdGlhbFNlbGVjdGlvbiA9IG5ldyBTZXQoWy4uLmluaXRpYWxTZWxlY3Rpb25dKTtcbiAgICB0aGlzLnNlbGVjdEl0ZW1zID0gdmFsaWRPcHRpb25zLm1hcCgob3B0KSA9PiB7XG4gICAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5faW5pdGlhbFNlbGVjdGlvbi5oYXMob3B0LnRhZyk7XG4gICAgICByZXR1cm4gRXhjbHVkZUJ5VGFnU2VsZWN0SXRlbS5jcmVhdGUob3B0LCBpc1NlbGVjdGVkKTtcbiAgICB9KTtcbiAgfVxuICBnZXRDdXJyZW50U2VsZWN0aW9uKCk6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPiB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdEl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5pc1NlbGVjdGVkKS5tYXAoKGl0bSkgPT4gaXRtLmRhdGEudGFnKTtcbiAgICByZXR1cm4gc2VsZWN0ZWQ7XG4gIH1cblxuICBnZXRFbmdpbmVBY3Rpb25zKCk6IFJlYWRvbmx5QXJyYXk8RXhjbHVkZUJ5VGFnQWN0aW9uPiB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdEl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5pc1NlbGVjdGVkKTtcbiAgICBjb25zdCB0YWdBY3Rpb25zID0gc2VsZWN0ZWQubWFwKChzKSA9PiBzLmRhdGEpO1xuICAgIHJldHVybiBbLi4udGFnQWN0aW9uc107XG4gIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IFJ1bGVJbnB1dCB9IGZyb20gXCIuL1J1bGVJbnB1dFwiO1xuaW1wb3J0IHsgRXhjbHVkZUJ5UGFnZUlkU2VsZWN0SXRlbSB9IGZyb20gXCIuL211bHRpLXNlbGVjdC1pdGVtXCI7XG5pbXBvcnQgeyBFeGNsdWRlQnlQYWdlQWN0aW9uIH0gZnJvbSBcIi4vUnVsZUFjdGlvblwiO1xuaW1wb3J0IHsgUGFnZUlEIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcblxuZXhwb3J0IGNsYXNzIFBhZ2VBY3Rpb25NYW5hZ2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfaW5pdGlhbFNlbGVjdGlvbjogU2V0PHN0cmluZz47XG4gIHJlYWRvbmx5IHNlbGVjdEl0ZW1zOiBSZWFkb25seUFycmF5PEV4Y2x1ZGVCeVBhZ2VJZFNlbGVjdEl0ZW0+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IHZhbGlkT3B0aW9uczogUnVsZUlucHV0W1wiX3BhZ2VJZEFjdGlvbnNcIl0sXG4gICAgcmVhZG9ubHkgaW5pdGlhbFNlbGVjdGlvbjogUmVhZG9ubHlBcnJheTxzdHJpbmc+LFxuICApIHtcbiAgICB0aGlzLl9pbml0aWFsU2VsZWN0aW9uID0gbmV3IFNldChbLi4uaW5pdGlhbFNlbGVjdGlvbl0pO1xuICAgIHRoaXMuc2VsZWN0SXRlbXMgPSB2YWxpZE9wdGlvbnMubWFwKChvcHQpID0+IHtcbiAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLl9pbml0aWFsU2VsZWN0aW9uLmhhcyhvcHQucGFnZUlkKTtcbiAgICAgIHJldHVybiBFeGNsdWRlQnlQYWdlSWRTZWxlY3RJdGVtLmNyZWF0ZShvcHQsIGlzU2VsZWN0ZWQpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q3VycmVudFNlbGVjdGlvbigpOiBSZWFkb25seUFycmF5PFBhZ2VJRD4ge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RJdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaXNTZWxlY3RlZCkubWFwKChpdG0pID0+IGl0bS5kYXRhLnBhZ2VJZCk7XG4gICAgcmV0dXJuIHNlbGVjdGVkO1xuICB9XG5cbiAgZ2V0RW5naW5lQWN0aW9uKCk6IFJlYWRvbmx5QXJyYXk8RXhjbHVkZUJ5UGFnZUFjdGlvbj4ge1xuICAgIGNvbnN0IHNlbGVjdEl0ZW1zID0gdGhpcy5zZWxlY3RJdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaXNTZWxlY3RlZCk7XG4gICAgY29uc3QgYWN0aW9ucyA9IHNlbGVjdEl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5kYXRhKTtcbiAgICByZXR1cm4gWy4uLmFjdGlvbnNdO1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBSdWxlSW5wdXQgfSBmcm9tIFwiLi9SdWxlSW5wdXRcIjtcbmltcG9ydCB7IEp1bXBUb1BhZ2VTZWxlY3RJdGVtIH0gZnJvbSBcIi4vU2luZ2xlU2VsZWN0SXRlbVwiO1xuXG5leHBvcnQgY2xhc3MgSnVtcFRvQWN0aW9uTWFuYWdlciB7XG4gIHJlYWRvbmx5IG9wdGlvbnM6IFJlYWRvbmx5QXJyYXk8SnVtcFRvUGFnZVNlbGVjdEl0ZW0+O1xuICBwcml2YXRlIF9zZWxlY3RlZDogSnVtcFRvUGFnZVNlbGVjdEl0ZW0gfCBmYWxzZTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB2YWxpZE9wdGlvbnM6IFJ1bGVJbnB1dFtcIl9qdW1wQWN0aW9uc1wiXSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluaXRpYWxTZWxlY3Rpb246IHN0cmluZyB8IGZhbHNlIHwgdW5kZWZpbmVkLFxuICApIHtcbiAgICB0aGlzLm9wdGlvbnMgPSB2YWxpZE9wdGlvbnMubWFwKEp1bXBUb1BhZ2VTZWxlY3RJdGVtLmNyZWF0ZSk7XG4gICAgdGhpcy5fc2VsZWN0ZWQgPSB0aGlzLmZpbmRTZWxlY3RlZChpbml0aWFsU2VsZWN0aW9uKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWQoKTogSnVtcFRvUGFnZVNlbGVjdEl0ZW0gfCBmYWxzZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xuICB9XG4gIHNldCBzZWxlY3RlZChzZWxlY3RlZDogSnVtcFRvUGFnZVNlbGVjdEl0ZW0gfCBmYWxzZSkge1xuICAgIHRoaXMuX3NlbGVjdGVkID0gdGhpcy5maW5kU2VsZWN0ZWQoc2VsZWN0ZWQpO1xuICB9XG4gIGdldFNlbGVjdGVkUGFnZUlkKCk6IHN0cmluZyB8IGZhbHNlIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQgPyB0aGlzLl9zZWxlY3RlZC5kYXRhLnBhZ2VJZCA6IGZhbHNlO1xuICB9XG4gIHByaXZhdGUgZmluZFNlbGVjdGVkKHZhbHVlOiB1bmtub3duKTogSnVtcFRvUGFnZVNlbGVjdEl0ZW0gfCBmYWxzZSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEp1bXBUb1BhZ2VTZWxlY3RJdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbmQoKHYpID0+IHYgPT09IHZhbHVlKSB8fCBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5maW5kKCh2KSA9PiB2LmRhdGEucGFnZUlkID09PSB2YWx1ZSkgfHwgZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIiwgImltcG9ydCB7IEJ1aWxkZXJDb25kaXRpb24sIHR5cGUgQnVpbGRlckNvbmRpdGlvbkR0byB9IGZyb20gXCIuL2NvbmRpdGlvbi9CdWlsZGVyLWNvbmRpdGlvblwiO1xuaW1wb3J0IHtcbiAgQnVpbGRlckNvbmRpdGlvbkdyb3VwLFxuICB0eXBlIEJ1aWxkZXJDb25kaXRpb25Hcm91cER0byxcbiAgdHlwZSBDb25kaXRpb25Hcm91cFR5cGUsXG59IGZyb20gXCIuL2NvbmRpdGlvbi9CdWlsZGVyLWNvbmRpdGlvbi1ncm91cFwiO1xuaW1wb3J0IHR5cGUgeyBSdWxlSW5wdXQgfSBmcm9tIFwiLi9SdWxlSW5wdXRcIjtcbmltcG9ydCB7IEJ1aWxkZXJPYmplY3QgfSBmcm9tIFwiLi4vQnVpbGRlck9iamVjdFwiO1xuaW1wb3J0IHsgVGFnQWN0aW9uTWFuYWdlciB9IGZyb20gXCIuL3RhZy1hY3Rpb24tbWFuYWdlclwiO1xuaW1wb3J0IHsgUGFnZUFjdGlvbk1hbmFnZXIgfSBmcm9tIFwiLi9wYWdlLWFjdGlvbi1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBKdW1wVG9BY3Rpb25NYW5hZ2VyIH0gZnJvbSBcIi4vanVtcC10by1hY3Rpb24tbWFuYWdlclwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uLCBQYWdlSUQsIFBhZ2VRdWVDb21tYW5kLCBQYWdlUXVlUnVsZXMgfSBmcm9tIFwiQG1lZGlhLXF1ZXN0L2VuZ2luZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJSdWxlRHRvIHtcbiAgcmVhZG9ubHkgdHlwZTogQ29uZGl0aW9uR3JvdXBUeXBlO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbmRpdGlvbnM6IFJlYWRvbmx5QXJyYXk8QnVpbGRlckNvbmRpdGlvbkR0byB8IEJ1aWxkZXJDb25kaXRpb25Hcm91cER0bz47XG4gIHJlYWRvbmx5IGV4Y2x1ZGVUYWdzOiBSZWFkb25seUFycmF5PHN0cmluZz47XG4gIHJlYWRvbmx5IGV4Y2x1ZGVQYWdlczogUmVhZG9ubHlBcnJheTxQYWdlSUQ+O1xuICByZWFkb25seSBqdW1wVG9QYWdlOiBzdHJpbmcgfCBmYWxzZTtcbn1cbmV4cG9ydCBjbGFzcyBCdWlsZGVyUnVsZSBleHRlbmRzIEJ1aWxkZXJPYmplY3Q8XCJidWlsZGVyLXJ1bGVcIiwgQnVpbGRlclJ1bGVEdG8+IHtcbiAgcmVhZG9ubHkgb2JqZWN0VHlwZTogXCJidWlsZGVyLXJ1bGVcIiA9IFwiYnVpbGRlci1ydWxlXCI7XG4gIHByaXZhdGUgX3R5cGU6IENvbmRpdGlvbkdyb3VwVHlwZSA9IFwiYWxsXCI7XG4gIHB1YmxpYyBuYW1lID0gXCJSdWxlIG5hbWVcIjtcbiAgLy8gcHVibGljIGNvdW50TnVtYmVyID0gMTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29uZGl0aW9uczogQXJyYXk8QnVpbGRlckNvbmRpdGlvbiB8IEJ1aWxkZXJDb25kaXRpb25Hcm91cD4gPSBbXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF90YWdBY3Rpb25NYW5hZ2VyOiBUYWdBY3Rpb25NYW5hZ2VyO1xuICBwcml2YXRlIF9wYWdlQWN0aW9uTWFuYWdlcjogUGFnZUFjdGlvbk1hbmFnZXI7XG4gIHJlYWRvbmx5IGp1bXBUb0FjdGlvbk1hbmFnZXI6IEp1bXBUb0FjdGlvbk1hbmFnZXI7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZnJvbUR0byA9IChkdG86IEJ1aWxkZXJSdWxlRHRvLCBpbnB1dDogUnVsZUlucHV0KTogQnVpbGRlclJ1bGUgPT4ge1xuICAgIHJldHVybiBuZXcgQnVpbGRlclJ1bGUoZHRvLCBpbnB1dCk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZHRvOiBCdWlsZGVyUnVsZUR0byxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9ydWxlSW5wdXQ6IFJ1bGVJbnB1dCxcbiAgKSB7XG4gICAgc3VwZXIoZHRvKTtcbiAgICBjb25zdCBjb25kaXRpb25JbnB1dCA9IHRoaXMuX3J1bGVJbnB1dC5nZXRDb25kaXRpb25JbnB1dCgpO1xuICAgIHRoaXMubmFtZSA9IGR0by5uYW1lID8/IFwiXCI7XG4gICAgdGhpcy5fdHlwZSA9IGR0by50eXBlID8/IFwiYW55XCI7XG4gICAgdGhpcy5fY29uZGl0aW9ucyA9IGR0by5jb25kaXRpb25zLnJlZHVjZTxBcnJheTxCdWlsZGVyQ29uZGl0aW9uIHwgQnVpbGRlckNvbmRpdGlvbkdyb3VwPj4oKGFjYywgY3VycikgPT4ge1xuICAgICAgaWYgKGN1cnIua2luZCA9PT0gXCJjb25kaXRpb25cIikge1xuICAgICAgICBjb25zdCBjb25kaXRpb24gPSBCdWlsZGVyQ29uZGl0aW9uLmZyb21EdG8oY3VyciwgY29uZGl0aW9uSW5wdXQpO1xuICAgICAgICBhY2MucHVzaChjb25kaXRpb24pO1xuICAgICAgfVxuICAgICAgaWYgKGN1cnIua2luZCA9PT0gXCJjb25kaXRpb24tZ3JvdXBcIikge1xuICAgICAgICBjb25zdCBjb25kaXRpb25Hcm91cCA9IEJ1aWxkZXJDb25kaXRpb25Hcm91cC5mcm9tRHRvKGN1cnIsIGNvbmRpdGlvbklucHV0KTtcbiAgICAgICAgYWNjLnB1c2goY29uZGl0aW9uR3JvdXApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSk7XG4gICAgLy8gVE9ETyBDSEVDSyBXSVRIIENVUlJFTlQgT1BUSU9OUy5cbiAgICB0aGlzLl9wYWdlQWN0aW9uTWFuYWdlciA9IG5ldyBQYWdlQWN0aW9uTWFuYWdlcihfcnVsZUlucHV0LmV4Y2x1ZGVCeVBhZ2VJZEFjdGlvbnMsIGR0by5leGNsdWRlUGFnZXMpO1xuICAgIC8vIHRoaXMuZXhjbHVkZUJ5UGFnZUlkRHRvTGlzdC5wdXNoKC4uLmR0by5leGNsdWRlUGFnZXMpO1xuICAgIHRoaXMuX3RhZ0FjdGlvbk1hbmFnZXIgPSBuZXcgVGFnQWN0aW9uTWFuYWdlcihfcnVsZUlucHV0LmV4Y2x1ZGVCeVRhZ0FjdGlvbnMsIGR0by5leGNsdWRlVGFncyk7XG5cbiAgICB0aGlzLmp1bXBUb0FjdGlvbk1hbmFnZXIgPSBuZXcgSnVtcFRvQWN0aW9uTWFuYWdlcihfcnVsZUlucHV0Lmp1bXBUb1BhZ2VBY3Rpb25zLCBkdG8uanVtcFRvUGFnZSk7XG4gIH1cblxuICBnZXQgY29uZGl0aW9ucygpOiBSZWFkb25seUFycmF5PEJ1aWxkZXJDb25kaXRpb25Hcm91cCB8IEJ1aWxkZXJDb25kaXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fY29uZGl0aW9ucztcbiAgfVxuXG4gIGdldFRhZ0FjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RhZ0FjdGlvbk1hbmFnZXIuc2VsZWN0SXRlbXM7XG4gIH1cblxuICBnZXRWYWxpZFBhZ2VBY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl9wYWdlQWN0aW9uTWFuYWdlci5zZWxlY3RJdGVtcztcbiAgfVxuXG4gIGdldCBjb25kaXRpb25Db3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZGl0aW9ucy5sZW5ndGg7XG4gIH1cblxuICBzZXQgdHlwZSh0eXBlOiBDb25kaXRpb25Hcm91cFR5cGUpIHtcbiAgICBpZiAoQnVpbGRlckNvbmRpdGlvbkdyb3VwLmlzQ29uZGl0aW9uR3JvdXBUeXBlKHR5cGUpKSB7XG4gICAgICB0aGlzLl90eXBlID0gdHlwZTtcbiAgICB9XG4gIH1cblxuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxuXG4gIGRlbGV0ZUNvbmRpdGlvbihjb25kaXRpb246IEJ1aWxkZXJDb25kaXRpb24gfCBCdWlsZGVyQ29uZGl0aW9uR3JvdXApOiBib29sZWFuIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2NvbmRpdGlvbnMuaW5kZXhPZihjb25kaXRpb24pO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5fY29uZGl0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYWRkQ29uZGl0aW9uKCk6IEJ1aWxkZXJDb25kaXRpb24ge1xuICAgIGNvbnN0IGNvbmRpdGlvbiA9IEJ1aWxkZXJDb25kaXRpb24uY3JlYXRlKHRoaXMuX3J1bGVJbnB1dC5nZXRDb25kaXRpb25JbnB1dCgpKTtcbiAgICB0aGlzLl9jb25kaXRpb25zLnB1c2goY29uZGl0aW9uKTtcbiAgICByZXR1cm4gY29uZGl0aW9uO1xuICB9XG5cbiAgYWRkQ29uZGl0aW9uR3JvdXAoKTogQnVpbGRlckNvbmRpdGlvbkdyb3VwIHtcbiAgICBjb25zdCBkdG86IEJ1aWxkZXJDb25kaXRpb25Hcm91cER0byA9IHtcbiAgICAgIGtpbmQ6IFwiY29uZGl0aW9uLWdyb3VwXCIsXG4gICAgICBuYW1lOiBcIlwiLFxuICAgICAgdHlwZTogXCJhbGxcIixcbiAgICAgIGNvbmRpdGlvbnM6IFtdLFxuICAgIH07XG4gICAgY29uc3QgbmV3R3JvdXAgPSBCdWlsZGVyQ29uZGl0aW9uR3JvdXAuZnJvbUR0byhkdG8sIHRoaXMuX3J1bGVJbnB1dC5xdWVzdGlvblZhcnMpO1xuICAgIHRoaXMuX2NvbmRpdGlvbnMucHVzaChuZXdHcm91cCk7XG4gICAgcmV0dXJuIG5ld0dyb3VwO1xuICB9XG5cbiAgY2xvbmUoKTogQnVpbGRlclJ1bGVEdG8ge1xuICAgIHJldHVybiB0aGlzLnRvSnNvbigpO1xuICB9XG5cbiAgdG9Kc29uKCk6IEJ1aWxkZXJSdWxlRHRvIHtcbiAgICBjb25zdCBjb25kaXRpb25zID0gdGhpcy5fY29uZGl0aW9ucy5tYXAoKGMpID0+IGMudG9Kc29uKCkpO1xuICAgIGNvbnN0IGV4Y2x1ZGVQYWdlcyA9IHRoaXMuX3BhZ2VBY3Rpb25NYW5hZ2VyLmdldEN1cnJlbnRTZWxlY3Rpb24oKTtcbiAgICBjb25zdCBleGNsdWRlVGFncyA9IHRoaXMuX3RhZ0FjdGlvbk1hbmFnZXIuZ2V0Q3VycmVudFNlbGVjdGlvbigpO1xuICAgIGNvbnN0IGp1bXBUb1BhZ2UgPSB0aGlzLmp1bXBUb0FjdGlvbk1hbmFnZXIuZ2V0U2VsZWN0ZWRQYWdlSWQoKTtcbiAgICBjb25zdCBkdG86IEJ1aWxkZXJSdWxlRHRvID0ge1xuICAgICAgdHlwZTogdGhpcy5fdHlwZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIGNvbmRpdGlvbnMsXG4gICAgICBleGNsdWRlUGFnZXMsXG4gICAgICBqdW1wVG9QYWdlLFxuICAgICAgZXhjbHVkZVRhZ3MsXG4gICAgfTtcbiAgICByZXR1cm4gZHRvO1xuICB9XG4gIHRvRW5naW5lUnVsZSgpOiBQYWdlUXVlUnVsZXMge1xuICAgIGNvbnN0IGNvbmRpdGlvbnM6IENvbmRpdGlvbltdID0gW107XG4gICAgdGhpcy5fY29uZGl0aW9ucy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICBpZiAoYykge1xuICAgICAgICBpZiAoYyBpbnN0YW5jZW9mIEJ1aWxkZXJDb25kaXRpb24pIHtcbiAgICAgICAgICBjb25zdCBzaW1wbGVDb25kaXRpb24gPSBjLnRvRW5naW5lQ29uZGl0aW9uKCk7XG4gICAgICAgICAgaWYgKHNpbXBsZUNvbmRpdGlvbikge1xuICAgICAgICAgICAgY29uZGl0aW9ucy5wdXNoKHNpbXBsZUNvbmRpdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjIGluc3RhbmNlb2YgQnVpbGRlckNvbmRpdGlvbkdyb3VwKSB7XG4gICAgICAgICAgY29uc3QgY29tcGxleENvbmRpdGlvbiA9IGMudG9FbmdpbmVDb25kaXRpb25Db21wbGV4KCk7XG4gICAgICAgICAgaWYgKGNvbXBsZXhDb25kaXRpb24pIGNvbmRpdGlvbnMucHVzaChjb21wbGV4Q29uZGl0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGxldCBhbGw6IENvbmRpdGlvbltdID0gW107XG4gICAgbGV0IHNvbWU6IENvbmRpdGlvbltdID0gW107XG5cbiAgICBpZiAodGhpcy50eXBlID09PSBcImFsbFwiKSB7XG4gICAgICBhbGwgPSBbLi4uY29uZGl0aW9uc107XG4gICAgfVxuICAgIGNvbnN0IHBhZ2VRdWVDb21tYW5kczogQXJyYXk8UGFnZVF1ZUNvbW1hbmQ+ID0gW107XG4gICAgY29uc3QgbWF5YmVKdW1wVG9QYWdlID0gdGhpcy5qdW1wVG9BY3Rpb25NYW5hZ2VyLnNlbGVjdGVkO1xuICAgIGlmIChtYXliZUp1bXBUb1BhZ2UpIHtcbiAgICAgIGNvbnN0IGp1bXBDb21tYW5kOiBQYWdlUXVlQ29tbWFuZCA9IHtcbiAgICAgICAga2luZDogXCJQQUdFX1FVRV9KVU1QX1RPX1BBR0VfQ09NTUFORFwiLFxuICAgICAgICB0YXJnZXQ6IFwiUEFHRV9RVUVcIixcbiAgICAgICAgdGFyZ2V0SWQ6IFwiUEFHRV9RVUVcIixcbiAgICAgICAgcGF5bG9hZDogeyBwYWdlSWQ6IG1heWJlSnVtcFRvUGFnZS5kYXRhLnBhZ2VJZCB9LFxuICAgICAgfTtcbiAgICAgIHBhZ2VRdWVDb21tYW5kcy5wdXNoKGp1bXBDb21tYW5kKTtcbiAgICB9XG5cbiAgICBjb25zdCBleGNsdWRlUGFnZUJ5SWRMaXN0ID0gdGhpcy5fcGFnZUFjdGlvbk1hbmFnZXIuZ2V0RW5naW5lQWN0aW9uKCkubWFwKChhKSA9PiBhLnBhZ2VJZCk7XG4gICAgaWYgKGV4Y2x1ZGVQYWdlQnlJZExpc3QubGVuZ3RoKSB7XG4gICAgICBjb25zdCBjb21tYW5kOiBQYWdlUXVlQ29tbWFuZCA9IHtcbiAgICAgICAga2luZDogXCJQQUdFX1FVRV9FWENMVURFX0JZX1BBR0VfSURfQ09NTUFORFwiLFxuICAgICAgICB0YXJnZXQ6IFwiUEFHRV9RVUVcIixcbiAgICAgICAgdGFyZ2V0SWQ6IFwiUEFHRV9RVUVcIixcbiAgICAgICAgcGF5bG9hZDogeyBwYWdlSWRzOiBbLi4uZXhjbHVkZVBhZ2VCeUlkTGlzdF0gfSxcbiAgICAgIH07XG4gICAgICBwYWdlUXVlQ29tbWFuZHMucHVzaChjb21tYW5kKTtcbiAgICB9XG4gICAgY29uc3QgZXhjbHVkZVRhZ3MgPSB0aGlzLl90YWdBY3Rpb25NYW5hZ2VyLmdldEVuZ2luZUFjdGlvbnMoKS5tYXAoKHRhZ0EpID0+IHRhZ0EudGFnKTtcbiAgICBpZiAoZXhjbHVkZVRhZ3MubGVuZ3RoKSB7XG4gICAgICBjb25zdCBleGNsdWRlVGFnc0NvbW1hbmQ6IFBhZ2VRdWVDb21tYW5kID0ge1xuICAgICAgICBraW5kOiBcIlBBR0VfUVVFX0VYQ0xVREVfQllfVEFHX0NPTU1BTkRcIixcbiAgICAgICAgdGFyZ2V0OiBcIlBBR0VfUVVFXCIsXG4gICAgICAgIHRhcmdldElkOiBcIlBBR0VfUVVFXCIsXG4gICAgICAgIHBheWxvYWQ6IHsgdGFnSWRzOiBbLi4uZXhjbHVkZVRhZ3NdIH0sXG4gICAgICB9O1xuICAgICAgcGFnZVF1ZUNvbW1hbmRzLnB1c2goZXhjbHVkZVRhZ3NDb21tYW5kKTtcbiAgICB9XG5cbiAgICBjb25zdCBydWxlOiBQYWdlUXVlUnVsZXMgPSB7XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5uYW1lLFxuICAgICAgYWxsLFxuICAgICAgc29tZSxcbiAgICAgIG9uRmFpbHVyZTogW10sXG4gICAgICBvblN1Y2Nlc3M6IHBhZ2VRdWVDb21tYW5kcyxcbiAgICB9O1xuICAgIHJldHVybiBydWxlO1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBCdWlsZGVyU2NoZW1hRHRvIH0gZnJvbSBcIi4uL0J1aWxkZXItc2NoZW1hXCI7XG5pbXBvcnQgeyBTY2hlbWFEdG8gfSBmcm9tIFwiQG1lZGlhLXF1ZXN0L2VuZ2luZVwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RUaGVtZUNvbXBpbGVyPFRoZW1lU2NoZW1hPiB7XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgdGhlbWU6IFRoZW1lU2NoZW1hKSB7fVxuICBhYnN0cmFjdCBjb21waWxlKHNjaGVtYTogQnVpbGRlclNjaGVtYUR0byk6IFNjaGVtYUR0bztcbn1cbiIsICJpbXBvcnQgeyBEU3RhdGUsIEJvb2xlYW5TdGF0ZVByb3BlcnR5IH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcblxuZXhwb3J0IG5hbWVzcGFjZSBEU3RhdGVQcm9wcyB7XG4gIGV4cG9ydCBjb25zdCBtZWRpYUJsb2NrZWRCeVNlcXVlbmNlID0gbmV3IEJvb2xlYW5TdGF0ZVByb3BlcnR5KFxuICAgIFwibWVkaWEtYmxvY2tlZC1ieS1hdXRvcGxheS1zZXF1ZW5jZVwiLFxuICAgIGZhbHNlLFxuICAgIFwiU2hvdWxkIGJlIHRydWUgaWYgdGhlIHBhZ2UgaXMgaW4gYSBhdXRvcGxheS1zZXF1ZW5jZS4gVGhlIGF1dG9wbGF5LXNlcXVlbmNlIHdpbGwgYWx3YXlzIGJsb2NrIG90aGVyIG1lZGlhLlwiLFxuICApO1xuICBleHBvcnQgY29uc3QgaW5wdXRCbG9ja2luZ0J5U2VxdWVuY2UgPSBuZXcgQm9vbGVhblN0YXRlUHJvcGVydHkoXCJpbnB1dC1ibG9ja2VkLWJ5LWF1dG9wbGF5LXNlcXVlbmNlXCIsIGZhbHNlLCBcIlwiKTtcbiAgZXhwb3J0IGNvbnN0IG1lZGlhQmxvY2tlZEJ5QXVkaW8gPSBuZXcgQm9vbGVhblN0YXRlUHJvcGVydHkoXCJtZWRpYS1ibG9ja2VkLWJ5LWF1ZGlvXCIsIGZhbHNlLCBcIlwiKTtcbiAgZXhwb3J0IGNvbnN0IGlucHV0QmxvY2tlZEJ5QXVkaW8gPSBuZXcgQm9vbGVhblN0YXRlUHJvcGVydHkoXCJpbnB1dC1ibG9ja2VkLWJ5LWF1ZGlvXCIsIGZhbHNlLCBcIlwiKTtcbiAgZXhwb3J0IGNvbnN0IG1lZGlhQmxvY2tlZEJ5VmlkZW8gPSBuZXcgQm9vbGVhblN0YXRlUHJvcGVydHkoXCJtZWRpYS1ibG9ja2VkLWJ5LXZpZGVvXCIsIGZhbHNlLCBcIlwiKTtcbiAgZXhwb3J0IGNvbnN0IGlucHV0QmxvY2tlZEJ5VmlkZW8gPSBuZXcgQm9vbGVhblN0YXRlUHJvcGVydHkoXG4gICAgXCJpbnB1dC1ibG9ja2VkLWJ5LXZpZGVvXCIsXG4gICAgZmFsc2UsXG4gICAgXCJTaG91bGQgYmUgdHJ1ZSBpZiBhIHZpZGVvIGlzIHBsYXlpbmcsIGFuZCB0aGlzIHZpZGVvIGlzIHN1cHBvc2UgdG8gYmxvY2sgdXNlci1pbnB1dC5cIixcbiAgKTtcbiAgZXhwb3J0IGNvbnN0IHVzZXJQYXVzZWRWaWRlbyA9IG5ldyBCb29sZWFuU3RhdGVQcm9wZXJ0eShcbiAgICBcInVzZXItcGF1c2VkLXZpZGVvXCIsXG4gICAgZmFsc2UsXG4gICAgXCJTaG91bGQgYmUgdHJ1ZSBpZiB1c2VyIHBhdXNlZCB0aGUgdmlkZW8gYnkgcHJlc3NpbmcgdGhlIHBhdXNlLWJ1dHRvbi5cIixcbiAgKTtcbiAgZXhwb3J0IGNvbnN0IHZpZGVvSXNQbGF5aW5nID0gbmV3IEJvb2xlYW5TdGF0ZVByb3BlcnR5KFxuICAgIFwidmlkZW8taXMtcGxheWluZ1wiLFxuICAgIGZhbHNlLFxuICAgIFwiU2hvdWxkIGJlIHRydWUgaWYgYW55IHZpZGVvIGlzIHBsYXlpbmcgb24gdGhlIHBhZ2UuXCIsXG4gICk7XG4gIGV4cG9ydCBjb25zdCBhdWRpb0lzUGxheWluZyA9IG5ldyBCb29sZWFuU3RhdGVQcm9wZXJ0eShcbiAgICBcImF1ZGlvLWlzLXBsYXlpbmdcIixcbiAgICBmYWxzZSxcbiAgICBcIlNob3VsZCBiZSB0cnUgaWYgYW55IGF1ZGlvIGlzIHBsYXlpbmcgb24gcGFnZVwiLFxuICApO1xuICBjb25zdCBfcHJvcHMgPSB7XG4gICAgaW5wdXRCbG9ja2VkQnlBdWRpbyxcbiAgICBtZWRpYUJsb2NrZWRCeUF1ZGlvLFxuICAgIGlucHV0QmxvY2tpbmdCeVNlcXVlbmNlLFxuICAgIG1lZGlhQmxvY2tlZEJ5U2VxdWVuY2UsXG4gICAgaW5wdXRCbG9ja2VkQnlWaWRlbyxcbiAgICBtZWRpYUJsb2NrZWRCeVZpZGVvLFxuICAgIHVzZXJQYXVzZWRWaWRlbyxcbiAgICB2aWRlb0lzUGxheWluZyxcbiAgfTtcblxuICBjb25zdCBkaXNhYmxlQXVkaW9JY29uUXVlcnk6IERTdGF0ZS5TdGF0ZVF1ZXJ5ID0ge1xuICAgIG5hbWU6IFwiZGlzYWJsZS1BdWRpb1wiLFxuICAgIGNvbmRpdGlvbjoge1xuICAgICAga2luZDogXCJjb21wbGV4LWNvbmRpdGlvblwiLFxuICAgICAgbmFtZTogXCJhdWRpby1jb250cm9scy1hcmUtYmxvY2tlZFwiLFxuICAgICAgc29tZTogW1xuICAgICAgICBtZWRpYUJsb2NrZWRCeVNlcXVlbmNlLmdldElzVHJ1ZUNvbmRpdGlvbigpLFxuICAgICAgICBtZWRpYUJsb2NrZWRCeUF1ZGlvLmdldElzVHJ1ZUNvbmRpdGlvbigpLFxuICAgICAgICBtZWRpYUJsb2NrZWRCeVZpZGVvLmdldElzVHJ1ZUNvbmRpdGlvbigpLFxuICAgICAgXSxcbiAgICAgIGFsbDogW10sXG4gICAgfSxcbiAgfTtcbiAgY29uc3QgaGlkZVZpZGVvUGxheVF1ZXJ5OiBEU3RhdGUuU3RhdGVRdWVyeSA9IHtcbiAgICBuYW1lOiBcImhpZGUtdmlkZW8tcGxheS1idXR0b25cIixcbiAgICBjb25kaXRpb246IHtcbiAgICAgIGtpbmQ6IFwiY29tcGxleC1jb25kaXRpb25cIixcbiAgICAgIG5hbWU6IFwidmlkZW8taXMtcGxheWluZy1jb25kaXRpb25cIixcbiAgICAgIGFsbDogW3ZpZGVvSXNQbGF5aW5nLmdldElzVHJ1ZUNvbmRpdGlvbigpXSxcbiAgICAgIHNvbWU6IFtdLFxuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgaGlkZVZpZGVvUGF1c2VRdWVyeTogRFN0YXRlLlN0YXRlUXVlcnkgPSB7XG4gICAgbmFtZTogXCJoaWRlLXZpZGVvLXBhdXNlLWJ1dHRvblwiLFxuICAgIGNvbmRpdGlvbjoge1xuICAgICAga2luZDogXCJjb21wbGV4LWNvbmRpdGlvblwiLFxuICAgICAgbmFtZTogXCJ2aWRlby1pcy1ub3QtcGxheWluZy1jb25kaXRpb25cIixcbiAgICAgIGFsbDogW3ZpZGVvSXNQbGF5aW5nLmdldElzRmFsc2VDb25kaXRpb24oKV0sXG4gICAgICBzb21lOiBbXSxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IGRpc2FibGVWaWRlb1BsYXlRdWVyeTogRFN0YXRlLlN0YXRlUXVlcnkgPSB7XG4gICAgbmFtZTogXCJkaXNhYmxlLXZpZGVvXCIsXG4gICAgY29uZGl0aW9uOiB7XG4gICAgICBraW5kOiBcImNvbXBsZXgtY29uZGl0aW9uXCIsXG4gICAgICBuYW1lOiBcInZpZGVvLXBsYXkgc2hhbGwgYmUgZGlzYWJsZWRcIixcbiAgICAgIGFsbDogW3VzZXJQYXVzZWRWaWRlby5nZXRJc0ZhbHNlQ29uZGl0aW9uKCldLFxuICAgICAgc29tZTogW1xuICAgICAgICBtZWRpYUJsb2NrZWRCeVNlcXVlbmNlLmdldElzVHJ1ZUNvbmRpdGlvbigpLFxuICAgICAgICBtZWRpYUJsb2NrZWRCeUF1ZGlvLmdldElzVHJ1ZUNvbmRpdGlvbigpLFxuICAgICAgICBtZWRpYUJsb2NrZWRCeVZpZGVvLmdldElzVHJ1ZUNvbmRpdGlvbigpLFxuICAgICAgICBhdWRpb0lzUGxheWluZy5nZXRJc1RydWVDb25kaXRpb24oKSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfTtcbiAgY29uc3QgZGlzYWJsZVVzZXJJbnB1dFF1ZXJ5OiBEU3RhdGUuU3RhdGVRdWVyeSA9IHtcbiAgICBuYW1lOiBcImRpc2FibGUtdXNlci1pbnB1dFwiLFxuICAgIGNvbmRpdGlvbjoge1xuICAgICAga2luZDogXCJjb21wbGV4LWNvbmRpdGlvblwiLFxuICAgICAgbmFtZTogXCJVc2VyIGlucHV0IHNoYWxsIGJlIGRpc2FibGVkIChSZXNwb25zZS1idXR0b25zLCBGb3JtQ29udHJvbHMuLi4pXCIsXG4gICAgICBhbGw6IFtdLFxuICAgICAgc29tZTogW1xuICAgICAgICBpbnB1dEJsb2NrZWRCeUF1ZGlvLmdldElzVHJ1ZUNvbmRpdGlvbigpLFxuICAgICAgICBpbnB1dEJsb2NrZWRCeVZpZGVvLmdldElzVHJ1ZUNvbmRpdGlvbigpLFxuICAgICAgICBpbnB1dEJsb2NraW5nQnlTZXF1ZW5jZS5nZXRJc1RydWVDb25kaXRpb24oKSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfTtcbiAgZXhwb3J0IGNvbnN0IF9RdWVyaWVzID0ge1xuICAgIGRpc2FibGVBdWRpb0ljb25RdWVyeSxcbiAgICBkaXNhYmxlVmlkZW9QbGF5UXVlcnksXG4gICAgZGlzYWJsZVVzZXJJbnB1dFF1ZXJ5LFxuICAgIGhpZGVWaWRlb1BhdXNlUXVlcnksXG4gICAgaGlkZVZpZGVvUGxheVF1ZXJ5LFxuICB9O1xuICBleHBvcnQgY29uc3QgYWxsRGVmYXVsdFByb3BlcnRpZXMgPSBPYmplY3QudmFsdWVzKF9wcm9wcyk7XG4gIGV4cG9ydCBjb25zdCBhbGxEZWZhdWx0UXVlcmllcyA9IE9iamVjdC52YWx1ZXMoX1F1ZXJpZXMpO1xufVxuIiwgImltcG9ydCB7IERDb21tYW5kLCBFbGVtZW50Q29tbWFuZCB9IGZyb20gXCJAbWVkaWEtcXVlc3QvZW5naW5lXCI7XG5pbXBvcnQgeyBEU3R5bGUgfSBmcm9tIFwiQG1lZGlhLXF1ZXN0L2VuZ2luZVwiO1xuaW1wb3J0IHsgREVsZW1lbnREdG8gfSBmcm9tIFwiQG1lZGlhLXF1ZXN0L2VuZ2luZVwiO1xuXG5leHBvcnQgbmFtZXNwYWNlIFRoZW1lVXRpbHMge1xuICBleHBvcnQgY29uc3QgZGlzYWJsZUNsaWNrQ29tbWFuZHMgPSAoZWxlbWVudElkOiBzdHJpbmcsIHN0eWxlQ2hhbmdlczogUGFydGlhbDxEU3R5bGU+KTogRWxlbWVudENvbW1hbmRbXSA9PiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAga2luZDogXCJFTEVNRU5UX0RJU0FCTEVfQ0xJQ0tfQ09NTUFORFwiLFxuICAgICAgICB0YXJnZXQ6IFwiRUxFTUVOVFwiLFxuICAgICAgICB0YXJnZXRJZDogZWxlbWVudElkLFxuICAgICAgICBwYXlsb2FkOiB7fSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtpbmQ6IFwiRUxFTUVOVF9TVFlMRV9DT01NQU5EXCIsXG4gICAgICAgIHRhcmdldDogXCJFTEVNRU5UXCIsXG4gICAgICAgIHRhcmdldElkOiBlbGVtZW50SWQsXG4gICAgICAgIHBheWxvYWQ6IHsgY2hhbmdlczogc3R5bGVDaGFuZ2VzIH0sXG4gICAgICB9LFxuICAgIF07XG4gIH07XG5cbiAgZXhwb3J0IGNvbnN0IGVuYWJsZUNsaWNrQ29tbWFuZHMgPSAoZWxlbWVudElkOiBzdHJpbmcsIHN0eWxlQ2hhbmdlczogUGFydGlhbDxEU3R5bGU+KTogRWxlbWVudENvbW1hbmRbXSA9PiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAga2luZDogXCJFTEVNRU5UX0VOQUJMRV9DTElDS19DT01NQU5EXCIsXG4gICAgICAgIHRhcmdldDogXCJFTEVNRU5UXCIsXG4gICAgICAgIHRhcmdldElkOiBlbGVtZW50SWQsXG4gICAgICAgIHBheWxvYWQ6IHt9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2luZDogXCJFTEVNRU5UX1NUWUxFX0NPTU1BTkRcIixcbiAgICAgICAgdGFyZ2V0OiBcIkVMRU1FTlRcIixcbiAgICAgICAgdGFyZ2V0SWQ6IGVsZW1lbnRJZCxcbiAgICAgICAgcGF5bG9hZDogeyBjaGFuZ2VzOiBzdHlsZUNoYW5nZXMgfSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfTtcbiAgZXhwb3J0IGNvbnN0IGhpZGVDb21tYW5kID0gKGVsZW1lbnRJZDogc3RyaW5nKTogRWxlbWVudENvbW1hbmQgPT4ge1xuICAgIGNvbnN0IGhpZGVDb21tYW5kOiBEQ29tbWFuZCA9IHtcbiAgICAgIGtpbmQ6IFwiRUxFTUVOVF9TVFlMRV9DT01NQU5EXCIsXG4gICAgICB0YXJnZXQ6IFwiRUxFTUVOVFwiLFxuICAgICAgdGFyZ2V0SWQ6IGVsZW1lbnRJZCxcbiAgICAgIHBheWxvYWQ6IHsgY2hhbmdlczogeyB2aXNpYmlsaXR5OiBcImhpZGRlblwiIH0gfSxcbiAgICB9O1xuICAgIHJldHVybiBoaWRlQ29tbWFuZDtcbiAgfTtcbiAgZXhwb3J0IGNvbnN0IHNob3dDb21tYW5kID0gKGVsZW1lbnRJZDogc3RyaW5nKTogRWxlbWVudENvbW1hbmQgPT4ge1xuICAgIGNvbnN0IHNob3dDb21tYW5kOiBEQ29tbWFuZCA9IHtcbiAgICAgIGtpbmQ6IFwiRUxFTUVOVF9TVFlMRV9DT01NQU5EXCIsXG4gICAgICB0YXJnZXQ6IFwiRUxFTUVOVFwiLFxuICAgICAgdGFyZ2V0SWQ6IGVsZW1lbnRJZCxcbiAgICAgIHBheWxvYWQ6IHsgY2hhbmdlczogeyB2aXNpYmlsaXR5OiBcInZpc2libGVcIiB9IH0sXG4gICAgfTtcbiAgICByZXR1cm4gc2hvd0NvbW1hbmQ7XG4gIH07XG5cbiAgZXhwb3J0IGNvbnN0IHNwYWNlRXZlbmx5WCA9IDxUIGV4dGVuZHMgUGljazxERWxlbWVudER0bywgXCJzdHlsZVwiPj4oXG4gICAgaXRlbXM6IFJlYWRvbmx5QXJyYXk8VD4sXG4gICAgb3B0aW9uczogeyBzdGFydEF0OiBudW1iZXI7IGVuZEF0OiBudW1iZXI7IGRlZmF1bHRJdGVtV2lkdGg6IG51bWJlciB9ID0ge1xuICAgICAgc3RhcnRBdDogMCxcbiAgICAgIGVuZEF0OiAxMDAsXG4gICAgICBkZWZhdWx0SXRlbVdpZHRoOiA1LFxuICAgIH0sXG4gICk6IFJlYWRvbmx5QXJyYXk8VD4gPT4ge1xuICAgIGNvbnN0IHN0YXJ0QXQgPSBvcHRpb25zPy5zdGFydEF0ID8/IDA7XG4gICAgY29uc3QgZW5kQXQgPSBvcHRpb25zPy5lbmRBdCA/PyAxMDA7XG4gICAgY29uc3QgcmFuZ2UgPSBNYXRoLmFicyhlbmRBdCAtIHN0YXJ0QXQpO1xuICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgbWFyZ2luQ291bnQgPSBpdGVtcy5sZW5ndGggKyAxO1xuICAgIGNvbnN0IGRlZmF1bHRXaWR0aCA9IG9wdGlvbnMuZGVmYXVsdEl0ZW1XaWR0aCA/PyAxNTAgLyBtYXJnaW5Db3VudDtcblxuICAgIGxldCB0b3RhbFdpZHRoT2ZFbGVtZW50cyA9IGl0ZW1zLnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xuICAgICAgY29uc3QgdyA9IGN1cnIuc3R5bGUudyA/PyBkZWZhdWx0V2lkdGg7XG4gICAgICByZXR1cm4gcHJldiArIHc7XG4gICAgfSwgMCk7XG5cbiAgICBsZXQgY3Vyc29yID0gc3RhcnRBdDtcbiAgICBjb25zdCByZXN0ID0gTWF0aC5tYXgocmFuZ2UgLSB0b3RhbFdpZHRoT2ZFbGVtZW50cywgMCk7XG4gICAgY29uc3QgbWFyZ2luID0gcmVzdCAvIG1hcmdpbkNvdW50O1xuXG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgY3Vyc29yID0gY3Vyc29yICsgbWFyZ2luO1xuICAgICAgY29uc3QgdyA9IGl0ZW0uc3R5bGUudyA/PyBkZWZhdWx0V2lkdGg7XG4gICAgICBjb25zdCB4ID0gY3Vyc29yO1xuICAgICAgY3Vyc29yID0gY3Vyc29yICsgdztcbiAgICAgIGl0ZW0uc3R5bGUudyA9IHc7XG4gICAgICBpdGVtLnN0eWxlLnggPSB4O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9O1xuXG4gIGV4cG9ydCBjb25zdCBjZW50ZXJZID0gKCk6IFBpY2s8RFN0eWxlLCBcInlcIiB8IFwidHJhbnNmb3JtXCI+ID0+ICh7XG4gICAgeTogNTAsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwJSwgNTAlKVwiLFxuICB9KTtcbiAgZXhwb3J0IGNvbnN0IGNlbnRlclggPSAoKTogUGljazxEU3R5bGUsIFwieFwiIHwgXCJ0cmFuc2Zvcm1cIj4gPT4gKHtcbiAgICB4OiA1MCxcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKC01MCUsIDAlKVwiLFxuICB9KTtcblxuICBleHBvcnQgY29uc3QgY2VudGVyWFkgPSAoKTogUGljazxEU3R5bGUsIFwieFwiIHwgXCJ5XCIgfCBcInRyYW5zZm9ybVwiPiA9PiAoe1xuICAgIHg6IDUwLFxuICAgIHk6IDUwLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoLTUwJSwgNTAlKVwiLFxuICB9KTtcbn1cbiIsICJpbXBvcnQgeyBBYnN0cmFjdFRoZW1lQ29tcGlsZXIgfSBmcm9tIFwiLi9BYnN0cmFjdFRoZW1lQ29tcGlsZXJcIjtcbmltcG9ydCB0eXBlIHsgQnVpbGRlclNjaGVtYUR0byB9IGZyb20gXCIuLi9CdWlsZGVyLXNjaGVtYVwiO1xuaW1wb3J0IHsgQnVpbGRlclNjaGVtYSB9IGZyb20gXCIuLi9CdWlsZGVyLXNjaGVtYVwiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGVyUGFnZUR0byB9IGZyb20gXCIuLi9CdWlsZGVyLXBhZ2VcIjtcbmltcG9ydCB7IERTdGF0ZVByb3BzIH0gZnJvbSBcIi4vc3RhbmRhcmQtcHJvcHNcIjtcbmltcG9ydCB7IFRoZW1lVXRpbHMgfSBmcm9tIFwiLi90aGVtZS11dGlsc1wiO1xuaW1wb3J0IHsgRGVmYXVsdFRoZW1lLCB0eXBlIElEZWZhdWx0VGhlbWUgfSBmcm9tIFwiLi9JRGVmYXVsdFRoZW1lXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJNYWluSW1hZ2VEdG8gfSBmcm9tIFwiLi4vQnVpbGRlck1haW5JbWFnZUR0b1wiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGVyTWFpblZpZGVvRHRvIH0gZnJvbSBcIi4uL0J1aWxkZXJNYWluVmlkZW9EdG9cIjtcbmltcG9ydCB7XG4gIERBdWRpb0R0byxcbiAgREF1dG9QbGF5U2VxdWVuY2UsXG4gIERDb21tYW5kLFxuICBERGl2RHRvLFxuICBERWxlbWVudER0byxcbiAgREltZ0R0byxcbiAgRFRleHREdG8sXG4gIERVdGlsLFxuICBEVmlkZW9EdG8sXG4gIEZhY3QsXG4gIFBhZ2VEdG8sXG4gIFBhZ2VRdWVDb21tYW5kLFxuICBSdWxlLFxuICBTY2hlbWFEdG8sXG59IGZyb20gXCJAbWVkaWEtcXVlc3QvZW5naW5lXCI7XG5pbXBvcnQgeyBBdWRpb0ZpbGUgfSBmcm9tIFwiLi4vbWVkaWEtZmlsZXNcIjtcbmltcG9ydCB7IEJ1aWxkZXJSdWxlIH0gZnJvbSBcIi4uL3J1bGVidWlsZGVyXCI7XG5cbmNvbnN0IFUgPSBEVXRpbDtcbmNvbnN0IGdlbmVyYXRlRWxlbWVudElkID0gKCkgPT4gVS5yYW5kb21TdHJpbmcoMzIpO1xuZXhwb3J0IGNsYXNzIERlZmF1bHRUaGVtZUNvbXBpbGVyIGV4dGVuZHMgQWJzdHJhY3RUaGVtZUNvbXBpbGVyPElEZWZhdWx0VGhlbWU+IHtcbiAgcmVhZG9ubHkgbmFtZSA9IFwiSXNwZSBkZWZhdWx0IHRoZW1lLlwiO1xuICBwcml2YXRlIHJlYWRvbmx5IFRBRyA9IFwiWyBERUZBVUxUX1RIRU1FX0NPTVBJTEVSIF06IFwiO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihEZWZhdWx0VGhlbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21waWxlUnVsZXMoc291cmNlOiBCdWlsZGVyU2NoZW1hRHRvKTogUnVsZTxQYWdlUXVlQ29tbWFuZCwgbmV2ZXI+W10ge1xuICAgIGNvbnN0IGJ1aWxkZXJTY2hlbWEgPSBCdWlsZGVyU2NoZW1hLmZyb21Kc29uKHNvdXJjZSk7XG4gICAgY29uc3QgcnVsZUlucHV0ID0gYnVpbGRlclNjaGVtYS5nZXRSdWxlSW5wdXQoKTtcbiAgICBjb25zdCBwYWdlUXVlUnVsZXM6IFJ1bGU8UGFnZVF1ZUNvbW1hbmQsIG5ldmVyPltdID0gW107XG4gICAgc291cmNlLnJ1bGVzLmZvckVhY2goKHJ1bGUpID0+IHtcbiAgICAgIGNvbnN0IGVuZ2luZVJ1bGUgPSBCdWlsZGVyUnVsZS5mcm9tRHRvKHJ1bGUsIHJ1bGVJbnB1dCkudG9FbmdpbmVSdWxlKCk7XG4gICAgICBpZiAoIVJ1bGUuaXNFbXB0eShlbmdpbmVSdWxlKSkge1xuICAgICAgICBwYWdlUXVlUnVsZXMucHVzaChlbmdpbmVSdWxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQodGhpcy5UQUcsIFwiVGhyb3dzIGF3YXkgZW1wdHkgcnVsZS5cIik7XG4gICAgICAgIGNvbnNvbGUubG9nKHJ1bGUpO1xuICAgICAgICBjb25zb2xlLmxvZyhydWxlSW5wdXQpO1xuICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHBhZ2VRdWVSdWxlcztcbiAgfVxuXG4gIGNvbXBpbGUoc291cmNlOiBCdWlsZGVyU2NoZW1hRHRvKTogU2NoZW1hRHRvIHtcbiAgICBjb25zdCBwYWdlcyA9IHNvdXJjZS5wYWdlcy5tYXAoKHApID0+IHRoaXMuY29tcGlsZVBhZ2UocCwgc291cmNlLnByZWZpeCkpO1xuICAgIGNvbnN0IHJ1bGVzID0gdGhpcy5jb21waWxlUnVsZXMoc291cmNlKTtcbiAgICAvLyBjb25zb2xlLmxvZyhwYWdlcy5tYXAoKHApID0+IHAudGFncykpO1xuXG4gICAgY29uc3QgZHRvOiBTY2hlbWFEdG8gPSB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHNvdXJjZS5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBiYXNlSGVpZ2h0OiBzb3VyY2UuYmFzZUhlaWdodCxcbiAgICAgIGJhc2VXaWR0aDogc291cmNlLmJhc2VXaWR0aCxcbiAgICAgIGlkOiBzb3VyY2UuaWQsXG4gICAgICBwYWdlU2VxdWVuY2VzOiBbXSxcbiAgICAgIHBhZ2VzLFxuICAgICAgcHJlZGVmaW5lZEZhY3RzOiBbXSxcbiAgICAgIHJ1bGVzLFxuICAgICAgc3RhdGVGcm9tRXZlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIG9uRXZlbnQ6IFwiVklERU9fRU5ERURfRVZFTlRcIixcbiAgICAgICAgICB0aGVuRXhlY3V0ZTogW1xuICAgICAgICAgICAgRFN0YXRlUHJvcHMudXNlclBhdXNlZFZpZGVvLmdldFNldEZhbHNlQ29tbWFuZCgpLFxuICAgICAgICAgICAgRFN0YXRlUHJvcHMubWVkaWFCbG9ja2VkQnlWaWRlby5nZXRTZXRGYWxzZUNvbW1hbmQoKSxcbiAgICAgICAgICAgIERTdGF0ZVByb3BzLnZpZGVvSXNQbGF5aW5nLmdldFNldEZhbHNlQ29tbWFuZCgpLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvbkV2ZW50OiBcIlZJREVPX1BBVVNFRF9FVkVOVFwiLFxuICAgICAgICAgIHRoZW5FeGVjdXRlOiBbXG4gICAgICAgICAgICBEU3RhdGVQcm9wcy52aWRlb0lzUGxheWluZy5nZXRTZXRGYWxzZUNvbW1hbmQoKSxcbiAgICAgICAgICAgIERTdGF0ZVByb3BzLm1lZGlhQmxvY2tlZEJ5VmlkZW8uZ2V0U2V0RmFsc2VDb21tYW5kKCksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG9uRXZlbnQ6IFwiVklERU9fUExBWV9FVkVOVFwiLFxuICAgICAgICAgIHRoZW5FeGVjdXRlOiBbXG4gICAgICAgICAgICBEU3RhdGVQcm9wcy52aWRlb0lzUGxheWluZy5nZXRTZXRUcnVlQ29tbWFuZCgpLFxuICAgICAgICAgICAgRFN0YXRlUHJvcHMudXNlclBhdXNlZFZpZGVvLmdldFNldEZhbHNlQ29tbWFuZCgpLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvbkV2ZW50OiBcIkFVRElPX1BMQVlfRVZFTlRcIixcbiAgICAgICAgICB0aGVuRXhlY3V0ZTogW1xuICAgICAgICAgICAgRFN0YXRlUHJvcHMuYXVkaW9Jc1BsYXlpbmcuZ2V0U2V0VHJ1ZUNvbW1hbmQoKSxcbiAgICAgICAgICAgIERTdGF0ZVByb3BzLm1lZGlhQmxvY2tlZEJ5QXVkaW8uZ2V0U2V0VHJ1ZUNvbW1hbmQoKSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb25FdmVudDogXCJBVURJT19FTkRFRF9FVkVOVFwiLFxuICAgICAgICAgIHRoZW5FeGVjdXRlOiBbXG4gICAgICAgICAgICBEU3RhdGVQcm9wcy5hdWRpb0lzUGxheWluZy5nZXRTZXRGYWxzZUNvbW1hbmQoKSxcbiAgICAgICAgICAgIERTdGF0ZVByb3BzLm1lZGlhQmxvY2tlZEJ5QXVkaW8uZ2V0U2V0RmFsc2VDb21tYW5kKCksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG9uRXZlbnQ6IFwiQVVESU9fUEFVU0VEX0VWRU5UXCIsXG4gICAgICAgICAgdGhlbkV4ZWN1dGU6IFtcbiAgICAgICAgICAgIERTdGF0ZVByb3BzLmF1ZGlvSXNQbGF5aW5nLmdldFNldEZhbHNlQ29tbWFuZCgpLFxuICAgICAgICAgICAgRFN0YXRlUHJvcHMubWVkaWFCbG9ja2VkQnlBdWRpby5nZXRTZXRGYWxzZUNvbW1hbmQoKSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHN0YXRlUHJvcHM6IERTdGF0ZVByb3BzLmFsbERlZmF1bHRQcm9wZXJ0aWVzLm1hcCgoZGVmKSA9PiBkZWYucHJvcERlZmluaXRpb24pLFxuICAgICAgc3RhdGVRdWVyaWVzOiBEU3RhdGVQcm9wcy5hbGxEZWZhdWx0UXVlcmllcyxcbiAgICB9O1xuICAgIHJldHVybiBkdG87XG4gIH1cbiAgcHJpdmF0ZSBjb21waWxlUGFnZShwYWdlOiBCdWlsZGVyUGFnZUR0bywgbW9kdWxlUHJlZml4OiBzdHJpbmcpOiBQYWdlRHRvIHtcbiAgICAvLyBjb25zb2xlLmxvZyhfbW9kdWxlSWQpO1xuICAgIC8vIGNvbnN0IHRleHRFbGVtZW50XG4gICAgY29uc3QgdGFncyA9IHBhZ2UudGFncyA/PyBbXTtcbiAgICBjb25zdCB7IG5leHRCdXR0b24sIG1haW5UZXh0LCBpZCwgbWFpbk1lZGlhLCBfdHlwZSB9ID0gcGFnZTtcbiAgICBjb25zdCBlbGVtZW50czogREVsZW1lbnREdG9bXSA9IFtdO1xuICAgIGNvbnN0IGF1ZGlvUmVzb3VyY2VzRHRvOiBEQXVkaW9EdG9bXSA9IFtdO1xuICAgIGNvbnN0IHZpZGVvUmVzb3VyY2VzOiBEVmlkZW9EdG9bXSA9IFtdO1xuICAgIGxldCBtYWluVmlkZW86IERWaWRlb0R0byB8IGZhbHNlID0gZmFsc2U7XG4gICAgbGV0IG1haW5UZXh0QXVkaW86IERBdWRpb0R0byB8IGZhbHNlID0gZmFsc2U7XG5cbiAgICBpZiAocGFnZS5tYWluVGV4dC5hdWRpb0ZpbGUpIHtcbiAgICAgIGNvbnN0IHJlcyA9IHRoaXMuY29tcGlsZU1haW5UZXh0QXVkaW8ocGFnZS5tYWluVGV4dC5hdWRpb0ZpbGUpO1xuICAgICAgZWxlbWVudHMucHVzaCguLi5yZXMuZWxlbWVudHMpO1xuICAgICAgYXVkaW9SZXNvdXJjZXNEdG8ucHVzaChyZXMuYXVkaW9EdG8pO1xuICAgICAgbWFpblRleHRBdWRpbyA9IHJlcy5hdWRpb0R0bztcbiAgICB9XG5cbiAgICBpZiAoX3R5cGUgPT09IFwicXVlc3Rpb25cIikge1xuICAgICAgY29uc3QgdmFyaWFibGVJZCA9IG1vZHVsZVByZWZpeCArIFwiX1wiICsgcGFnZS5wcmVmaXg7XG4gICAgICBjb25zdCB7IGJ1dHRvbnMsIHF1ZXN0aW9uIH0gPSB0aGlzLmNvbXBpbGVRdWVzdGlvbihpZCwgcGFnZSwgdmFyaWFibGVJZCk7XG4gICAgICAvLyBjb25zb2xlLmxvZyhxdWVzdGlvbik7XG4gICAgICBlbGVtZW50cy5wdXNoKC4uLmJ1dHRvbnMsIHF1ZXN0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAoX3R5cGUgPT09IFwiaW5mby1wYWdlXCIpIHtcbiAgICAgIGNvbnN0IGluZm9UZXh0ID0gbWFpblRleHQudGV4dDtcbiAgICAgIGNvbnN0IG5leHRCdG5FbGVtZW50OiBERWxlbWVudER0byA9IHRoaXMuY29tcGlsZUJ1dHRvbihpZCwgbmV4dEJ1dHRvbiwge1xuICAgICAgICBraW5kOiBcIm5leHQtYnV0dG9uXCIsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHRleHRTdHlsZSA9IG1haW5NZWRpYSA/IERlZmF1bHRUaGVtZS5tYWluVGV4dC53aXRoTWVkaWEudGV4dC5jc3MgOiBEZWZhdWx0VGhlbWUubWFpblRleHQubm9NZWRpYS50ZXh0LmNzcztcbiAgICAgIGNvbnN0IGVsZW1lbnQ6IERFbGVtZW50RHRvID0ge1xuICAgICAgICB0ZXh0OiBpbmZvVGV4dCxcbiAgICAgICAgX3RhZzogXCJwXCIsXG4gICAgICAgIGlkOiBnZW5lcmF0ZUVsZW1lbnRJZCgpLFxuICAgICAgICBzdHlsZTogdGV4dFN0eWxlLFxuICAgICAgfTtcbiAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgICBlbGVtZW50cy5wdXNoKG5leHRCdG5FbGVtZW50KTtcbiAgICB9XG4gICAgaWYgKG1haW5NZWRpYSAmJiBtYWluTWVkaWEua2luZCA9PT0gXCJtYWluLWltYWdlXCIpIHtcbiAgICAgIGNvbnN0IG1haW5JbWFnZUVsZW1lbnQgPSB0aGlzLmNvbXBpbGVJbWFnZShtYWluTWVkaWEpO1xuICAgICAgZWxlbWVudHMucHVzaChtYWluSW1hZ2VFbGVtZW50KTtcbiAgICB9XG5cbiAgICBpZiAobWFpbk1lZGlhICYmIG1haW5NZWRpYS5raW5kID09PSBcIm1haW4tdmlkZW9cIikge1xuICAgICAgY29uc3QgdmlkZW9PdXRwdXQgPSB0aGlzLmNvbXBpbGVWaWRlbyhtYWluTWVkaWEpO1xuICAgICAgbWFpblZpZGVvID0gdmlkZW9PdXRwdXQudmlkZW9EdG87XG4gICAgICBlbGVtZW50cy5wdXNoKC4uLnZpZGVvT3V0cHV0LmVsZW1lbnRzKTtcbiAgICAgIHZpZGVvUmVzb3VyY2VzLnB1c2godmlkZW9PdXRwdXQudmlkZW9EdG8pO1xuICAgIH1cbiAgICBjb25zdCBtYWluVmlkZW9JZCA9IG1haW5WaWRlbyA/IG1haW5WaWRlby5pZCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBhdXRvUGxheVNlcXVlbmNlOiBEQXV0b1BsYXlTZXF1ZW5jZSA9IHtcbiAgICAgIGJsb2NrVXNlcklucHV0OiB0cnVlLFxuICAgICAgaWQ6IFwiMVwiLFxuICAgICAgaXRlbXM6IFtdLFxuICAgICAgc3RhcnRDb21tYW5kczogW1xuICAgICAgICBEU3RhdGVQcm9wcy5tZWRpYUJsb2NrZWRCeVNlcXVlbmNlLmdldFNldFRydWVDb21tYW5kKCksXG4gICAgICAgIERTdGF0ZVByb3BzLmlucHV0QmxvY2tpbmdCeVNlcXVlbmNlLmdldFNldFRydWVDb21tYW5kKCksXG4gICAgICBdLFxuICAgICAgZW5kQ29tbWFuZHM6IFtcbiAgICAgICAgRFN0YXRlUHJvcHMubWVkaWFCbG9ja2VkQnlTZXF1ZW5jZS5nZXRTZXRGYWxzZUNvbW1hbmQoKSxcbiAgICAgICAgRFN0YXRlUHJvcHMuaW5wdXRCbG9ja2luZ0J5U2VxdWVuY2UuZ2V0U2V0RmFsc2VDb21tYW5kKCksXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBpZiAobWFpblZpZGVvICYmIHBhZ2UubWFpbk1lZGlhICYmIHBhZ2UubWFpbk1lZGlhLmtpbmQgPT09IFwibWFpbi12aWRlb1wiICYmIHBhZ2UubWFpbk1lZGlhLm1vZGUgPT09IFwiYXV0b3BsYXlcIikge1xuICAgICAgYXV0b1BsYXlTZXF1ZW5jZS5pdGVtcy5wdXNoKHtcbiAgICAgICAga2luZDogXCJhdXRvcGxheS12aWRlb1wiLFxuICAgICAgICB2aWRlb0lkOiBtYWluVmlkZW8uaWQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobWFpblRleHRBdWRpbyAmJiBwYWdlLm1haW5UZXh0LmF1dG9wbGF5KSB7XG4gICAgICBhdXRvUGxheVNlcXVlbmNlLml0ZW1zLnB1c2goe1xuICAgICAgICBraW5kOiBcImF1dG9wbGF5LWF1ZGlvXCIsXG4gICAgICAgIGF1ZGlvSWQ6IG1haW5UZXh0QXVkaW8uaWQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBwYWdlRHRvOiBQYWdlRHRvID0ge1xuICAgICAgYXVkaW86IGF1ZGlvUmVzb3VyY2VzRHRvLFxuICAgICAgYXV0b1BsYXlTZXF1ZW5jZTogYXV0b1BsYXlTZXF1ZW5jZSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogXCJyZWRcIixcbiAgICAgIGVsZW1lbnRzLFxuICAgICAgaWQsXG4gICAgICBtYWluVmlkZW9JZCxcbiAgICAgIHRhZ3M6IFsuLi50YWdzXSxcbiAgICAgIHZpZGVvOiB2aWRlb1Jlc291cmNlcyxcbiAgICB9O1xuICAgIHJldHVybiBwYWdlRHRvO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21waWxlSW1hZ2UoaW1hZ2U6IEJ1aWxkZXJNYWluSW1hZ2VEdG8pIHtcbiAgICBjb25zdCBpbWc6IERJbWdEdG8gPSB7XG4gICAgICBfdGFnOiBcImltZ1wiLFxuICAgICAgaWQ6IGltYWdlLmZpbGUuaWQsXG4gICAgICBzdHlsZTogdGhpcy50aGVtZS5pbWFnZS5zdHlsZSxcbiAgICAgIHVybDogaW1hZ2UuZmlsZS5kb3dubG9hZFVybCxcbiAgICB9O1xuICAgIHJldHVybiBpbWc7XG4gIH1cblxuICBwcml2YXRlIGNvbXBpbGVNYWluVGV4dEF1ZGlvKGF1ZGlvRmlsZTogQXVkaW9GaWxlKToge1xuICAgIGF1ZGlvRHRvOiBEQXVkaW9EdG87XG4gICAgZWxlbWVudHM6IERFbGVtZW50RHRvW107XG4gIH0ge1xuICAgIGNvbnN0IHQgPSB0aGlzLnRoZW1lLm1haW5UZXh0O1xuICAgIGNvbnN0IGF1ZGlvSWQgPSBhdWRpb0ZpbGUuaWQ7XG4gICAgY29uc3QgaWNvblVybCA9XG4gICAgICBcImh0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZ2b2x1bWVfdXAtMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPTU1MWJkMGE2LWE1MTUtNGY4Ny1hMjQ1LWRhNDMzZjQ4MzNmOVwiO1xuXG4gICAgY29uc3QgYnV0dG9uSWQgPSBVLnJhbmRvbVN0cmluZygzMCk7XG4gICAgY29uc3QgcGxheU1haW5UZXh0QXVkaW86IERJbWdEdG8gPSB7XG4gICAgICBfdGFnOiBcImltZ1wiLFxuICAgICAgaWQ6IGJ1dHRvbklkLFxuICAgICAgdXJsOiBpY29uVXJsLFxuICAgICAgc3R5bGU6IHsgLi4udC53aXRoTWVkaWEuYXVkaW8uY3NzIH0sXG4gICAgICBvbkNsaWNrOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBraW5kOiBcIkFVRElPX1BMQVlfQ09NTUFORFwiLFxuICAgICAgICAgIHRhcmdldDogXCJBVURJT1wiLFxuICAgICAgICAgIHRhcmdldElkOiBhdWRpb0lkLFxuICAgICAgICAgIHBheWxvYWQ6IHsgdm9sdW1lOiAxIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgb25TdGF0ZUNoYW5nZTogW1xuICAgICAgICB7XG4gICAgICAgICAgcXVlcnlOYW1lOiBEU3RhdGVQcm9wcy5fUXVlcmllcy5kaXNhYmxlQXVkaW9JY29uUXVlcnkubmFtZSxcbiAgICAgICAgICB3aGVuVHJ1ZTogWy4uLlRoZW1lVXRpbHMuZGlzYWJsZUNsaWNrQ29tbWFuZHMoYnV0dG9uSWQsIHQud2l0aE1lZGlhLmF1ZGlvLmNzc0Rpc2FibGVkKV0sXG4gICAgICAgICAgd2hlbkZhbHNlOiBbLi4uVGhlbWVVdGlscy5lbmFibGVDbGlja0NvbW1hbmRzKGJ1dHRvbklkLCB0LndpdGhNZWRpYS5hdWRpby5jc3NFbmFibGVkKV0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gICAgY29uc3QgYXVkaW9EdG86IERBdWRpb0R0byA9IHtcbiAgICAgIF90YWc6IFwiYXVkaW9cIixcbiAgICAgIC8vIGV2ZW50SGFuZGxlcnM6IFtdLFxuICAgICAgaWQ6IGF1ZGlvRmlsZS5pZCxcbiAgICAgIHVybDogYXVkaW9GaWxlLmRvd25sb2FkVXJsLFxuICAgIH07XG4gICAgcmV0dXJuIHsgYXVkaW9EdG8sIGVsZW1lbnRzOiBbcGxheU1haW5UZXh0QXVkaW9dIH07XG4gIH1cblxuICBwcml2YXRlIGNvbXBpbGVWaWRlbyh2aWRlbzogQnVpbGRlck1haW5WaWRlb0R0bykge1xuICAgIGNvbnN0IHQgPSB0aGlzLnRoZW1lLnZpZGVvUGxheWVyO1xuICAgIGNvbnN0IHZpZGVvSWQgPSB2aWRlby5maWxlLmlkO1xuICAgIGNvbnN0IHBsYXlCdXR0b25JZCA9IFwicGxheS1idG4tZm9yXCIgKyB2aWRlb0lkO1xuICAgIGNvbnN0IHBhdXNlQnV0dG9uSWQgPSBcInBhdXNlLWJ0bi1mb3JcIiArIHZpZGVvSWQ7XG4gICAgY29uc3QgZWxlbWVudHM6IERFbGVtZW50RHRvW10gPSBbXTtcbiAgICBjb25zdCB2aWRlb0R0bzogRFZpZGVvRHRvID0ge1xuICAgICAgX3RhZzogXCJ2aWRlb1wiLFxuICAgICAgaWQ6IHZpZGVvLmZpbGUuaWQsXG4gICAgICBzdHlsZTogdC52aWRlb0VsZW1lbnQuY3NzLFxuICAgICAgdXJsOiB2aWRlby5maWxlLmRvd25sb2FkVXJsLFxuICAgIH07XG4gICAgY29uc3QgcGxheUJ0bjogREltZ0R0byA9IHtcbiAgICAgIGlkOiBwbGF5QnV0dG9uSWQsXG4gICAgICBfdGFnOiBcImltZ1wiLFxuICAgICAgdXJsOiB0LnBsYXlCdXR0b24uaWNvblVybCxcbiAgICAgIHN0eWxlOiB7IC4uLnQucGxheUJ1dHRvbi5jc3MsIC4uLnQucGxheUJ1dHRvbi5jc3NFbmFibGVkIH0sXG4gICAgICBvbkNsaWNrOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBraW5kOiBcIlZJREVPX1BMQVlfQ09NTUFORFwiLFxuICAgICAgICAgIHRhcmdldDogXCJWSURFT1wiLFxuICAgICAgICAgIHRhcmdldElkOiB2aWRlb0lkLFxuICAgICAgICAgIHBheWxvYWQ6IHt9LFxuICAgICAgICB9LFxuICAgICAgICAvLyBUT0RPIENoZWNrIGlmIHRoaXMgdmlkZW8gc2hhbGwgYmxvY2sgb3RoZXIgbWVkaWEgZmlyc3Q/XG4gICAgICAgIERTdGF0ZVByb3BzLm1lZGlhQmxvY2tlZEJ5VmlkZW8uZ2V0U2V0VHJ1ZUNvbW1hbmQoKSxcbiAgICAgICAgRFN0YXRlUHJvcHMudXNlclBhdXNlZFZpZGVvLmdldFNldEZhbHNlQ29tbWFuZCgpLFxuICAgICAgXSxcbiAgICAgIG9uU3RhdGVDaGFuZ2U6IFtcbiAgICAgICAge1xuICAgICAgICAgIHF1ZXJ5TmFtZTogRFN0YXRlUHJvcHMuX1F1ZXJpZXMuZGlzYWJsZVZpZGVvUGxheVF1ZXJ5Lm5hbWUsXG4gICAgICAgICAgd2hlblRydWU6IFsuLi5UaGVtZVV0aWxzLmRpc2FibGVDbGlja0NvbW1hbmRzKHBsYXlCdXR0b25JZCwgdC5wbGF5QnV0dG9uLmNzc0Rpc2FibGVkKV0sXG4gICAgICAgICAgd2hlbkZhbHNlOiBbLi4uVGhlbWVVdGlscy5lbmFibGVDbGlja0NvbW1hbmRzKHBsYXlCdXR0b25JZCwgdC5wbGF5QnV0dG9uLmNzc0VuYWJsZWQpXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHF1ZXJ5TmFtZTogRFN0YXRlUHJvcHMuX1F1ZXJpZXMuaGlkZVZpZGVvUGxheVF1ZXJ5Lm5hbWUsXG4gICAgICAgICAgd2hlblRydWU6IFtUaGVtZVV0aWxzLmhpZGVDb21tYW5kKHBsYXlCdXR0b25JZCldLFxuICAgICAgICAgIHdoZW5GYWxzZTogW1RoZW1lVXRpbHMuc2hvd0NvbW1hbmQocGxheUJ1dHRvbklkKV0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gICAgY29uc3QgcGF1c2VCdG46IERJbWdEdG8gPSB7XG4gICAgICBpZDogcGF1c2VCdXR0b25JZCxcbiAgICAgIF90YWc6IFwiaW1nXCIsXG4gICAgICBzdHlsZToge1xuICAgICAgICAuLi50LnBhdXNlQnV0dG9uLmNzcyxcbiAgICAgICAgdmlzaWJpbGl0eTogXCJoaWRkZW5cIixcbiAgICAgICAgLi4udC5wYXVzZUJ1dHRvbi5jc3NFbmFibGVkLFxuICAgICAgfSxcbiAgICAgIHVybDogdC5wYXVzZUJ1dHRvbi5pY29uVXJsLFxuICAgICAgb25DbGljazogW1xuICAgICAgICB7XG4gICAgICAgICAga2luZDogXCJWSURFT19QQVVTRV9DT01NQU5EXCIsXG4gICAgICAgICAgdGFyZ2V0OiBcIlZJREVPXCIsXG4gICAgICAgICAgdGFyZ2V0SWQ6IHZpZGVvSWQsXG4gICAgICAgICAgcGF5bG9hZDoge30sXG4gICAgICAgIH0sXG4gICAgICAgIERTdGF0ZVByb3BzLm1lZGlhQmxvY2tlZEJ5VmlkZW8uZ2V0U2V0RmFsc2VDb21tYW5kKCksXG4gICAgICAgIERTdGF0ZVByb3BzLnVzZXJQYXVzZWRWaWRlby5nZXRTZXRUcnVlQ29tbWFuZCgpLFxuICAgICAgXSxcbiAgICAgIG9uU3RhdGVDaGFuZ2U6IFtcbiAgICAgICAge1xuICAgICAgICAgIHF1ZXJ5TmFtZTogRFN0YXRlUHJvcHMuX1F1ZXJpZXMuaGlkZVZpZGVvUGF1c2VRdWVyeS5uYW1lLFxuICAgICAgICAgIHdoZW5UcnVlOiBbVGhlbWVVdGlscy5oaWRlQ29tbWFuZChwYXVzZUJ1dHRvbklkKV0sXG4gICAgICAgICAgd2hlbkZhbHNlOiBbVGhlbWVVdGlscy5zaG93Q29tbWFuZChwYXVzZUJ1dHRvbklkKV0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gICAgZWxlbWVudHMucHVzaChwbGF5QnRuKTtcbiAgICBlbGVtZW50cy5wdXNoKHBhdXNlQnRuKTtcbiAgICByZXR1cm4geyB2aWRlb0R0bywgZWxlbWVudHMgfTtcbiAgfVxuICBwcml2YXRlIGNvbXBpbGVRdWVzdGlvbihcbiAgICBwYWdlSWQ6IHN0cmluZyxcbiAgICBwYWdlOiBCdWlsZGVyUGFnZUR0byxcbiAgICB2YXJpYWJsZUlkOiBzdHJpbmcsXG4gICk6IHtcbiAgICBxdWVzdGlvbjogRFRleHREdG87XG4gICAgYnV0dG9uczogRERpdkR0b1tdO1xuICB9IHtcbiAgICAvLyBUT0RPIFJFRkFDVE9SRSBERUZBVUxUIFFVRVNUSU9OIFRPIC0gKFJFTU9WRSBVU0UgVEVYVDEpXG4gICAgLy8gY29uc29sZS5sb2cocGFnZSk7XG4gICAgY29uc3QgcSA9IHBhZ2UuZGVmYXVsdFF1ZXN0aW9uO1xuICAgIGNvbnN0IHRleHQgPSBwYWdlLm1haW5UZXh0LnRleHQ7XG4gICAgY29uc3QgcXVlc3Rpb25TdHlsZSA9IHBhZ2UubWFpbk1lZGlhXG4gICAgICA/IERlZmF1bHRUaGVtZS5tYWluVGV4dC53aXRoTWVkaWEudGV4dC5jc3NcbiAgICAgIDogRGVmYXVsdFRoZW1lLm1haW5UZXh0Lm5vTWVkaWEudGV4dC5jc3M7XG4gICAgY29uc3QgcXVlc3Rpb246IERUZXh0RHRvID0ge1xuICAgICAgX3RhZzogXCJwXCIsXG4gICAgICB0ZXh0LFxuICAgICAgZXZlbnRIYW5kbGVyczogW10sXG4gICAgICBpZDogVS5yYW5kb21TdHJpbmcoMzApLFxuICAgICAgb25DbGljazogW10sXG4gICAgICBvblN0YXRlQ2hhbmdlOiBbXSxcbiAgICAgIHN0eWxlOiBxdWVzdGlvblN0eWxlLFxuICAgIH07XG4gICAgY29uc3QgYnV0dG9ucyA9IHEub3B0aW9ucy5tYXAoKG8pID0+IHtcbiAgICAgIGNvbnN0IGJ0bnMgPSB0aGlzLmNvbXBpbGVCdXR0b24ocGFnZUlkLCBvLCB7XG4gICAgICAgIGtpbmQ6IFwicmVzcG9uc2UtYnV0dG9uXCIsXG4gICAgICAgIHF1ZXN0aW9uSWQ6IHZhcmlhYmxlSWQsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBidG5zO1xuICAgIH0pO1xuICAgIFRoZW1lVXRpbHMuc3BhY2VFdmVubHlYKGJ1dHRvbnMpO1xuICAgIHJldHVybiB7IHF1ZXN0aW9uLCBidXR0b25zIH07XG4gIH1cblxuICBwcml2YXRlIGNvbXBpbGVCdXR0b24oXG4gICAgcGFnZUlkOiBzdHJpbmcsXG4gICAgYnV0dG9uRHRvOiBCdWlsZGVyUGFnZUR0b1tcIm5leHRCdXR0b25cIl0sXG4gICAgb3B0aW9uczogeyBraW5kOiBcInJlc3BvbnNlLWJ1dHRvblwiOyBxdWVzdGlvbklkOiBzdHJpbmcgfSB8IHsga2luZDogXCJuZXh0LWJ1dHRvblwiIH0sXG4gICkge1xuICAgIGNvbnN0IGZhY3RzQ29sbGVjdGVkOiBGYWN0W10gPSBbXTtcbiAgICBjb25zdCB7IGlkLCB2YWx1ZSwgbGFiZWwgfSA9IGJ1dHRvbkR0bztcblxuICAgIGNvbnN0IHsgZGl2LCB0ZXh0MSB9ID0gRGVmYXVsdFRoZW1lLnJlc3BvbnNlQnV0dG9ucztcbiAgICBpZiAob3B0aW9ucy5raW5kID09PSBcInJlc3BvbnNlLWJ1dHRvblwiKSB7XG4gICAgICBjb25zdCBmYWN0OiBGYWN0ID0ge1xuICAgICAgICBraW5kOiBcIm51bWVyaWMtZmFjdFwiLFxuICAgICAgICBsYWJlbDogbGFiZWwsXG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgcmVmZXJlbmNlSWQ6IG9wdGlvbnMucXVlc3Rpb25JZCxcbiAgICAgICAgcmVmZXJlbmNlTGFiZWw6IFwiUXVlc3Rpb25JZDogXCIgKyBvcHRpb25zLnF1ZXN0aW9uSWQsXG4gICAgICB9O1xuICAgICAgZmFjdHNDb2xsZWN0ZWQucHVzaChmYWN0KTtcbiAgICB9XG5cbiAgICBjb25zdCBvbkNsaWNrSGFuZGxlcjogRENvbW1hbmQgPSB7XG4gICAgICBraW5kOiBcIkVOR0lORV9MRUFWRV9QQUdFX0NPTU1BTkRcIixcbiAgICAgIHRhcmdldDogXCJFTkdJTkVcIixcbiAgICAgIHRhcmdldElkOiBcIkVOR0lORVwiLFxuICAgICAgcGF5bG9hZDoge1xuICAgICAgICBwYWdlSWQsXG4gICAgICAgIGZhY3RzQ29sbGVjdGVkLFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IGJ0bjogRERpdkR0byA9IHtcbiAgICAgIGlkLFxuICAgICAgX3RhZzogXCJkaXZcIixcbiAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBfdGFnOiBcInBcIixcbiAgICAgICAgICBpZDogVS5yYW5kb21TdHJpbmcoMzApLFxuICAgICAgICAgIHRleHQ6IGxhYmVsLFxuICAgICAgICAgIHN0eWxlOiB0ZXh0MSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBvblN0YXRlQ2hhbmdlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBxdWVyeU5hbWU6IERTdGF0ZVByb3BzLl9RdWVyaWVzLmRpc2FibGVVc2VySW5wdXRRdWVyeS5uYW1lLFxuICAgICAgICAgIHdoZW5GYWxzZTogWy4uLlRoZW1lVXRpbHMuZW5hYmxlQ2xpY2tDb21tYW5kcyhpZCwgZGl2LmNzc0VuYWJsZWQpXSxcbiAgICAgICAgICB3aGVuVHJ1ZTogWy4uLlRoZW1lVXRpbHMuZGlzYWJsZUNsaWNrQ29tbWFuZHMoaWQsIGRpdi5jc3NEaXNhYmxlZCldLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHN0eWxlOiB7IC4uLmRpdi5jc3MsIC4uLmRpdi5jc3NFbmFibGVkIH0sXG4gICAgICBvbkNsaWNrOiBbb25DbGlja0hhbmRsZXJdLFxuICAgIH07XG4gICAgaWYgKG9wdGlvbnMua2luZCA9PT0gXCJuZXh0LWJ1dHRvblwiKSB7XG4gICAgICBidG4uc3R5bGUueCA9IDUwO1xuICAgICAgYnRuLnN0eWxlLnkgPSA4O1xuICAgICAgYnRuLnN0eWxlLnRyYW5zZm9ybSA9IFwidHJhbnNsYXRlKC01MCUsIDAlKVwiO1xuICAgIH1cbiAgICByZXR1cm4gYnRuO1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBCdWlsZGVyUGFnZUR0bywgQnVpbGRlclBhZ2VUeXBlIH0gZnJvbSBcIi4vQnVpbGRlci1wYWdlXCI7XG5pbXBvcnQgeyBCdWlsZGVyUGFnZSB9IGZyb20gXCIuL0J1aWxkZXItcGFnZVwiO1xuaW1wb3J0IHsgUnVsZUlucHV0IH0gZnJvbSBcIi4vcnVsZWJ1aWxkZXIvUnVsZUlucHV0XCI7XG5pbXBvcnQgdHlwZSB7IFF1ZXN0aW9uVmFyaWFibGUgfSBmcm9tIFwiLi9ydWxlYnVpbGRlci9SdWxlVmFyaWFibGVcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tVmFyaWFibGUgfSBmcm9tIFwiLi9ydWxlYnVpbGRlclwiO1xuaW1wb3J0IHR5cGUgeyBFeGNsdWRlQnlQYWdlQWN0aW9uLCBFeGNsdWRlQnlUYWdBY3Rpb24sIEp1bXBUb1BhZ2VBY3Rpb24gfSBmcm9tIFwiLi9ydWxlYnVpbGRlclwiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGVyVGFnRHRvIH0gZnJvbSBcIi4vQnVpbGRlclRhZ1wiO1xuaW1wb3J0IHsgQnVpbGRlclRhZywgVGFnQ29sbGVjdGlvbiB9IGZyb20gXCIuL0J1aWxkZXJUYWdcIjtcbmltcG9ydCB0eXBlIHsgQnVpbGRlclJ1bGVEdG8gfSBmcm9tIFwiLi9ydWxlYnVpbGRlclwiO1xuaW1wb3J0IHsgQnVpbGRlclJ1bGUgfSBmcm9tIFwiLi9ydWxlYnVpbGRlclwiO1xuaW1wb3J0IHsgRGVmYXVsdFRoZW1lQ29tcGlsZXIgfSBmcm9tIFwiLi90aGVtZS9kZWZhdWx0LXRoZW1lLWNvbXBpbGVyXCI7XG5pbXBvcnQgeyBJbWFnZUZpbGUgfSBmcm9tIFwiLi9tZWRpYS1maWxlc1wiO1xuaW1wb3J0IHsgU2NoZW1hRHRvLCBEVXRpbCwgUGFnZUlELCBTY2hlbWFJRCB9IGZyb20gXCJAbWVkaWEtcXVlc3QvZW5naW5lXCI7XG5pbXBvcnQgeyBQYWdlUHJlZml4IH0gZnJvbSBcIi4vcHJpbWl0aXZlcy9wYWdlLXByZWZpeFwiO1xuaW1wb3J0IHsgU2NoZW1hUHJlZml4LCBTY2hlbWFQcmVmaXhWYWx1ZSB9IGZyb20gXCIuL3ByaW1pdGl2ZXMvc2NoZW1hLXByZWZpeFwiO1xuY29uc3QgVSA9IERVdGlsO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJTY2hlbWFEdG8ge1xuICByZWFkb25seSBpZDogU2NoZW1hSUQ7XG4gIHJlYWRvbmx5IHByZWZpeDogU2NoZW1hUHJlZml4VmFsdWU7XG4gIHJlYWRvbmx5IG1haW5JbWFnZTogSW1hZ2VGaWxlIHwgZmFsc2U7XG4gIHJlYWRvbmx5IGJhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhZ2VzOiBCdWlsZGVyUGFnZUR0b1tdO1xuICByZWFkb25seSBiYXNlSGVpZ2h0OiBudW1iZXI7XG4gIHJlYWRvbmx5IGJhc2VXaWR0aDogbnVtYmVyO1xuICByZWFkb25seSBydWxlczogUmVhZG9ubHlBcnJheTxCdWlsZGVyUnVsZUR0bz47XG4gIHJlYWRvbmx5IHRhZ3M6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclRhZ0R0bz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hQnVpbGRPdXRwdXQge1xuICBzY2hlbWE6IFNjaGVtYUR0bztcbiAgY29kZWJvb2s6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHNjaGVtYUNvbmZpZzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkZXJTY2hlbWEge1xuICByZWFkb25seSBwcmVmaXg6IFNjaGVtYVByZWZpeDtcbiAgYmFzZUhlaWdodCA9IDEzMDA7XG4gIGJhc2VXaWR0aCA9IDEwMjQ7XG4gIGJhY2tncm91bmRDb2xvciA9IFwiIzAwMDAwMFwiO1xuICBwYWdlczogQnVpbGRlclBhZ2VbXSA9IFtdO1xuICBtYWluSW1hZ2U6IEltYWdlRmlsZSB8IGZhbHNlID0gZmFsc2U7XG4gIHByaXZhdGUgX3J1bGVzOiBCdWlsZGVyUnVsZVtdID0gW107XG4gIGdldCBydWxlcygpOiBSZWFkb25seUFycmF5PEJ1aWxkZXJSdWxlPiB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9ydWxlc107XG4gIH1cblxuICAvLyBnZXQgcHJlZml4KCk6IFNjaGVtYVByZWZpeFZhbHVlIHtcbiAgLy8gICByZXR1cm4gdGhpcy5fcHJlZml4LnZhbHVlO1xuICAvLyB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdGFnQ29sbGVjdGlvbjogVGFnQ29sbGVjdGlvbiA9IFRhZ0NvbGxlY3Rpb24uY3JlYXRlKCk7XG4gIGdldCB0YWdzKCk6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclRhZz4ge1xuICAgIHJldHVybiBbLi4udGhpcy5fdGFnQ29sbGVjdGlvbl07XG4gIH1cbiAgcHVibGljIHN0YXRpYyBjcmVhdGUoaWQ6IFNjaGVtYUlELCBuYW1lOiBzdHJpbmcsIHByZWZpeDogU2NoZW1hUHJlZml4VmFsdWUpIHtcbiAgICBjb25zdCBzY2hlbWFQcmVmaXggPSBTY2hlbWFQcmVmaXguY2FzdE9yQ3JlYXRlUmFuZG9tKHByZWZpeCk7XG4gICAgcmV0dXJuIG5ldyBCdWlsZGVyU2NoZW1hKGlkLCBuYW1lLCBzY2hlbWFQcmVmaXgpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBmcm9tSnNvbihkdG86IEJ1aWxkZXJTY2hlbWFEdG8pOiBCdWlsZGVyU2NoZW1hIHtcbiAgICBjb25zdCBzY2hlbWFQcmVmaXggPSBTY2hlbWFQcmVmaXguY2FzdE9yQ3JlYXRlUmFuZG9tKGR0by5wcmVmaXgpO1xuICAgIGNvbnN0IHNjaGVtYSA9IG5ldyBCdWlsZGVyU2NoZW1hKGR0by5pZCwgZHRvLm5hbWUsIHNjaGVtYVByZWZpeCk7XG4gICAgY29uc3QgcGFnZXMgPSBkdG8ucGFnZXMubWFwKEJ1aWxkZXJQYWdlLmZyb21Kc29uKTtcbiAgICBzY2hlbWEuX3RhZ0NvbGxlY3Rpb24uaW5pdChkdG8udGFncyk7XG4gICAgc2NoZW1hLmJhY2tncm91bmRDb2xvciA9IGR0by5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgc2NoZW1hLmJhc2VIZWlnaHQgPSBkdG8uYmFzZUhlaWdodDtcbiAgICBzY2hlbWEuYmFzZVdpZHRoID0gZHRvLmJhc2VXaWR0aDtcbiAgICBzY2hlbWEucGFnZXMgPSBwYWdlcztcbiAgICBzY2hlbWEuYmFja2dyb3VuZENvbG9yID0gZHRvLmJhY2tncm91bmRDb2xvcjtcbiAgICBzY2hlbWEubWFpbkltYWdlID0gZHRvLm1haW5JbWFnZSA/PyBmYWxzZTtcbiAgICBjb25zdCBydWxlc0R0byA9IGR0by5ydWxlcyA/PyBbXTtcbiAgICBjb25zdCBydWxlSW5wdXQgPSBzY2hlbWEuZ2V0UnVsZUlucHV0KCk7XG4gICAgc2NoZW1hLl9ydWxlcyA9IHJ1bGVzRHRvLm1hcCgocikgPT4gQnVpbGRlclJ1bGUuZnJvbUR0byhyLCBydWxlSW5wdXQpKTtcbiAgICByZXR1cm4gc2NoZW1hO1xuICB9XG5cbiAgdG9Kc29uKCk6IEJ1aWxkZXJTY2hlbWFEdG8ge1xuICAgIGNvbnN0IHBhZ2VzID0gdGhpcy5wYWdlcy5tYXAoKHApID0+IHAudG9Kc29uKCkpO1xuICAgIGNvbnN0IHRhZ3MgPSB0aGlzLl90YWdDb2xsZWN0aW9uLnRvSnNvbigpO1xuICAgIGNvbnN0IHJ1bGVzID0gdGhpcy5fcnVsZXMubWFwKChydWxlKSA9PiBydWxlLnRvSnNvbigpKTtcblxuICAgIGNvbnN0IGR0bzogQnVpbGRlclNjaGVtYUR0byA9IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBiYXNlSGVpZ2h0OiB0aGlzLmJhc2VIZWlnaHQsXG4gICAgICBiYXNlV2lkdGg6IHRoaXMuYmFzZVdpZHRoLFxuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBwYWdlcyxcbiAgICAgIHJ1bGVzLFxuICAgICAgdGFncyxcbiAgICAgIG1haW5JbWFnZTogdGhpcy5tYWluSW1hZ2UsXG4gICAgICBwcmVmaXg6IHRoaXMucHJlZml4LnZhbHVlLFxuICAgIH07XG4gICAgcmV0dXJuIGR0bztcbiAgfVxuICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBpZDogU2NoZW1hSUQsXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyxcbiAgICBwcmVmaXg6IFNjaGVtYVByZWZpeCxcbiAgKSB7XG4gICAgdGhpcy5wcmVmaXggPSBwcmVmaXg7XG4gIH1cblxuICBhZGRQYWdlKHR5cGU6IEJ1aWxkZXJQYWdlVHlwZSwgYXRJbmRleCA9IC0xKTogQnVpbGRlclBhZ2Uge1xuICAgIGNvbnN0IHBhZ2VQcmVmaXggPSBQYWdlUHJlZml4LmNyZWF0ZSgpO1xuICAgIGNvbnN0IG5ld1BhZ2UgPSBCdWlsZGVyUGFnZS5jcmVhdGUodHlwZSwgcGFnZVByZWZpeC52YWx1ZSk7XG4gICAgaWYgKGF0SW5kZXggPj0gMCAmJiBhdEluZGV4IDwgdGhpcy5wYWdlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMucGFnZXMuc3BsaWNlKGF0SW5kZXgsIDAsIG5ld1BhZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhZ2VzLnB1c2gobmV3UGFnZSk7XG4gICAgfVxuICAgIHJldHVybiBuZXdQYWdlO1xuICB9XG5cbiAgaW5zZXJ0UGFnZShwYWdlOiBCdWlsZGVyUGFnZSwgYXRJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW5zZXJ0UGFnZUF0SW5kZXgocGFnZSwgYXRJbmRleCk7XG4gIH1cblxuICBwcml2YXRlIGluc2VydFBhZ2VBdEluZGV4KHBhZ2U6IEJ1aWxkZXJQYWdlLCBhdEluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBpc1ZhbGlkSW5kZXggPSBVLmlzSW5SYW5nZSgwLCB0aGlzLnBhZ2VzLmxlbmd0aCAtIDEpO1xuICAgIGlmICghaXNWYWxpZEluZGV4KGF0SW5kZXgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGV4aXN0cyA9ICEhdGhpcy5wYWdlcy5maW5kKChwKSA9PiBwLmlkID09PSBwYWdlLmlkKTtcbiAgICBpZiAoZXhpc3RzKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMucGFnZXMuc3BsaWNlKGF0SW5kZXgsIDAsIHBhZ2UpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYWRkUnVsZSgpIHtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMuZ2V0UnVsZUlucHV0KCk7XG4gICAgY29uc3QgY291bnQgPSB0aGlzLl9ydWxlcy5sZW5ndGggKyAxO1xuICAgIGNvbnN0IG5hbWUgPSBcIlJ1bGUtbnVtYmVyOiBcIiArIGNvdW50O1xuICAgIGNvbnN0IHJ1bGUgPSBCdWlsZGVyUnVsZS5mcm9tRHRvKFxuICAgICAge1xuICAgICAgICBjb25kaXRpb25zOiBbXSxcbiAgICAgICAgdHlwZTogXCJhbGxcIixcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZXhjbHVkZVRhZ3M6IFtdLFxuICAgICAgICBqdW1wVG9QYWdlOiBmYWxzZSxcbiAgICAgICAgZXhjbHVkZVBhZ2VzOiBbXSxcbiAgICAgIH0sXG4gICAgICBpbnB1dCxcbiAgICApO1xuICAgIHRoaXMuX3J1bGVzLnB1c2gocnVsZSk7XG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cbiAgZGVsZXRlUnVsZShydWxlOiBCdWlsZGVyUnVsZSkge1xuICAgIHRoaXMuX3J1bGVzID0gdGhpcy5fcnVsZXMuZmlsdGVyKChyKSA9PiByICE9PSBydWxlKTtcbiAgfVxuXG4gIG1vdmVQYWdlKHBhZ2U6IEJ1aWxkZXJQYWdlLCB0b0luZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMucGFnZXMuaW5kZXhPZihwYWdlKTtcbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGlzVmFsaWRJbmRleCA9IFUuaXNJblJhbmdlKDAsIHRoaXMucGFnZXMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKCFpc1ZhbGlkSW5kZXgodG9JbmRleCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coJ01vdmluZyBmcm9tIDonICsgaW5kZXggKyAnIHRvOiAnICsgdG9JbmRleCk7XG4gICAgdGhpcy5wYWdlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMucGFnZXMuc3BsaWNlKHRvSW5kZXgsIDAsIHBhZ2UpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZGVsZXRlUGFnZShwYWdlOiBCdWlsZGVyUGFnZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZpbHRlcmVkID0gdGhpcy5wYWdlcy5maWx0ZXIoKHApID0+IHAgIT09IHBhZ2UpO1xuICAgIGNvbnN0IGRpZERlbGV0ZSA9IGZpbHRlcmVkLmxlbmd0aCA9PT0gdGhpcy5wYWdlcy5sZW5ndGggLSAxO1xuICAgIHRoaXMucGFnZXMgPSBmaWx0ZXJlZDtcbiAgICByZXR1cm4gZGlkRGVsZXRlO1xuICB9XG5cbiAgcmVldmFsdWF0ZVJ1bGVzKCkge1xuICAgIGNvbnNvbGUubG9nKFwiUmVldmFsdWF0aW9uZyBydWxlc0lucHV0XCIpO1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5nZXRSdWxlSW5wdXQoKTtcbiAgICBjb25zdCBydWxlc0R0byA9IHRoaXMuX3J1bGVzLm1hcCgocikgPT4gci50b0pzb24oKSk7XG4gICAgdGhpcy5fcnVsZXMgPSBydWxlc0R0by5tYXAoKGR0bykgPT4gQnVpbGRlclJ1bGUuZnJvbUR0byhkdG8sIGlucHV0KSk7XG4gIH1cblxuICBnZXRSdWxlSW5wdXQoKTogUnVsZUlucHV0IHtcbiAgICBjb25zdCBxVmFyczogUXVlc3Rpb25WYXJpYWJsZVtdID0gW107XG4gICAgY29uc3QgY1ZhcnM6IEN1c3RvbVZhcmlhYmxlW10gPSBbXTtcbiAgICBjb25zdCBwYWdlSWRBY3Rpb25zOiBFeGNsdWRlQnlQYWdlQWN0aW9uW10gPSBbXTtcbiAgICBjb25zdCB0YWdBY3Rpb25zOiBFeGNsdWRlQnlUYWdBY3Rpb25bXSA9IHRoaXMudGFncy5tYXAoKHQpID0+IHtcbiAgICAgIGNvbnN0IHRhZyA9IHQudGFnVGV4dDtcbiAgICAgIGNvbnN0IHBhZ2VDb3VudCA9IHRoaXMucGFnZXMucmVkdWNlKChjb3VudCwgY3VycikgPT4ge1xuICAgICAgICByZXR1cm4gY3Vyci50YWdzLmluY2x1ZGVzKHRhZykgPyBjb3VudCArIDEgOiBjb3VudDtcbiAgICAgIH0sIDApO1xuICAgICAgY29uc3QgZXhjbHVkZUJ5VGFnRHRvOiBFeGNsdWRlQnlUYWdBY3Rpb24gPSB7XG4gICAgICAgIGtpbmQ6IFwiZXhjbHVkZS1ieS10YWdcIixcbiAgICAgICAgcGFnZUNvdW50LFxuICAgICAgICB0YWcsXG4gICAgICAgIGRlc2NyaXB0aW9uOiB0LnRhZ0Rlc2NyaXB0aW9uLFxuICAgICAgfTtcbiAgICAgIHJldHVybiBleGNsdWRlQnlUYWdEdG87XG4gICAgfSk7XG4gICAgY29uc3QganVtcEFjdGlvbnM6IEp1bXBUb1BhZ2VBY3Rpb25bXSA9IFtdO1xuICAgIHRoaXMucGFnZXMuZm9yRWFjaCgocGFnZSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHBhZ2VWYXJpYWJsZXMgPSBwYWdlLmdldFF1ZXN0aW9uVmFyaWFibGVzKHRoaXMucHJlZml4LCBpbmRleCk7XG4gICAgICBxVmFycy5wdXNoKC4uLnBhZ2VWYXJpYWJsZXMpO1xuICAgICAgY29uc3QgbWFpblRleHQgPSBwYWdlLm1haW5UZXh0LnRleHQ7XG4gICAgICBjb25zdCBwYWdlUHJlZml4ID0gcGFnZS5wcmVmaXg7XG4gICAgICBjb25zdCBqdW1wQWN0aW9uOiBKdW1wVG9QYWdlQWN0aW9uID0ge1xuICAgICAgICBraW5kOiBcImp1bXAtdG8tcGFnZVwiLFxuICAgICAgICBwYWdlSWQ6IHBhZ2UuaWQsXG4gICAgICAgIHBhZ2VQcmVmaXgsXG4gICAgICAgIHBhZ2VOdW1iZXI6IGluZGV4LFxuICAgICAgICBtYWluVGV4dDogcGFnZS5tYWluVGV4dC50ZXh0LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4Y2x1ZGVQYWdlQWN0aW9uOiBFeGNsdWRlQnlQYWdlQWN0aW9uID0ge1xuICAgICAgICBraW5kOiBcImV4Y2x1ZGUtYnktcGFnZUlkXCIsXG4gICAgICAgIHBhZ2VJZDogcGFnZS5pZCxcbiAgICAgICAgcGFnZVByZWZpeCxcbiAgICAgICAgcGFnZU51bWJlcjogaW5kZXgsXG4gICAgICAgIG1haW5UZXh0LFxuICAgICAgfTtcbiAgICAgIGp1bXBBY3Rpb25zLnB1c2goanVtcEFjdGlvbik7XG4gICAgICBwYWdlSWRBY3Rpb25zLnB1c2goZXhjbHVkZVBhZ2VBY3Rpb24pO1xuICAgIH0pO1xuICAgIGNvbnN0IHJ1bGVJbnB1dCA9IG5ldyBSdWxlSW5wdXQocVZhcnMsIGNWYXJzLCBwYWdlSWRBY3Rpb25zLCB0YWdBY3Rpb25zLCBqdW1wQWN0aW9ucyk7XG5cbiAgICByZXR1cm4gcnVsZUlucHV0O1xuICB9XG5cbiAgZGVsZXRlVGFncyh0YWdzOiBSZWFkb25seUFycmF5PEJ1aWxkZXJUYWc+KSB7XG4gICAgdGhpcy5fdGFnQ29sbGVjdGlvbi5kZWxldGVBbGwodGFncyk7XG4gIH1cblxuICBhZGRUYWcoYnVpbGRlclRhZzogQnVpbGRlclRhZykge1xuICAgIHRoaXMuX3RhZ0NvbGxlY3Rpb24uYWRkKGJ1aWxkZXJUYWcpO1xuICB9XG5cbiAgY29tcGlsZSgpOiBTY2hlbWFCdWlsZE91dHB1dCB7XG4gICAgY29uc3QgbW9kdWxlRHRvID0gdGhpcy50b0pzb24oKTtcbiAgICBjb25zdCBpbXAgPSBuZXcgRGVmYXVsdFRoZW1lQ29tcGlsZXIoKTtcbiAgICBjb25zdCBzY2hlbWEgPSBpbXAuY29tcGlsZShtb2R1bGVEdG8pO1xuXG4gICAgcmV0dXJuIHsgY29kZWJvb2s6IHt9LCBzY2hlbWEsIHNjaGVtYUNvbmZpZzoge30gfTtcbiAgfVxufVxuIiwgImltcG9ydCB7IEJ1aWxkZXJPYmplY3RJZCwgQnVpbGRlck9iamVjdCB9IGZyb20gJy4vQnVpbGRlck9iamVjdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlclRleHREdG8ge1xuICByZWFkb25seSBpZDogQnVpbGRlck9iamVjdElkLlRleHRJRDtcbiAgdGV4dDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIHRyYW5zbGF0aW9uUmVxdWlyZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZGVyVGV4dCBleHRlbmRzIEJ1aWxkZXJPYmplY3Q8J2J1aWxkZXItdGV4dCcsIEJ1aWxkZXJUZXh0RHRvPiB7XG4gIHJlYWRvbmx5IG9iamVjdFR5cGUgPSAnYnVpbGRlci10ZXh0JztcbiAgaWQ6IEJ1aWxkZXJPYmplY3RJZC5UZXh0SUQ7XG4gIHRleHQgPSAnJztcbiAgbmFtZSA9ICcnO1xuICB0cmFuc2xhdGVSZXF1aXJlZCA9IGZhbHNlO1xuICAvLyBhdWRpbzoge2lkOiBCfVxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGR0bzogQnVpbGRlclRleHREdG8pIHtcbiAgICBzdXBlcihkdG8pO1xuICAgIHRoaXMuaWQgPSBkdG8uaWQ7XG4gICAgdGhpcy50cmFuc2xhdGVSZXF1aXJlZCA9IGR0by50cmFuc2xhdGlvblJlcXVpcmVkO1xuICAgIHRoaXMubmFtZSA9IGR0by5uYW1lO1xuICAgIHRoaXMudGV4dCA9IGR0by50ZXh0O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjcmVhdGUobmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgaWQgPSBCdWlsZGVyT2JqZWN0SWQudGV4dElkKCk7XG4gICAgY29uc3QgZHRvOiBCdWlsZGVyVGV4dER0byA9IHtcbiAgICAgIGlkLFxuICAgICAgbmFtZSxcbiAgICAgIHRleHQ6ICcnLFxuICAgICAgdHJhbnNsYXRpb25SZXF1aXJlZDogZmFsc2VcbiAgICB9O1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEJ1aWxkZXJUZXh0KGR0byk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZnJvbUpzb24oZHRvOiBCdWlsZGVyVGV4dER0bykge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEJ1aWxkZXJUZXh0KGR0byk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgY2xvbmUoKTogQnVpbGRlclRleHREdG8ge1xuICAgIGNvbnN0IG5ld0lkID0gQnVpbGRlck9iamVjdElkLnRleHRJZCgpO1xuICAgIGNvbnN0IGR0byA9IHRoaXMudG9Kc29uKCk7XG4gICAgY29uc3Qgd2l0aE5ld0lkOiBCdWlsZGVyVGV4dER0byA9IHsgLi4uZHRvLCBpZDogbmV3SWQgfTtcbiAgICByZXR1cm4gd2l0aE5ld0lkO1xuICB9XG5cbiAgdG9Kc29uKCk6IEJ1aWxkZXJUZXh0RHRvIHtcbiAgICBjb25zdCBkdG86IEJ1aWxkZXJUZXh0RHRvID0ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICB0ZXh0OiB0aGlzLnRleHQsXG4gICAgICB0cmFuc2xhdGlvblJlcXVpcmVkOiB0aGlzLnRyYW5zbGF0ZVJlcXVpcmVkXG4gICAgfTtcbiAgICByZXR1cm4gZHRvO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUNBQSxvQkFBc0I7QUFFdEIsSUFBTSxJQUFJO0FBa0JILElBQVU7QUFBQSxDQUFWLENBQVVBLHFCQUFWO0FBTUUsRUFBTUEsaUJBQUEsY0FBYyxNQUFhO0FBQ3RDLFdB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U0FBUyxLQUFxQjtBQUMxQyxVQUFNLFdBQVcsSUFBSSxhQUFZLEdBQUc7QUFDcEMsV0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUVBLFFBQXdCO0FBQ3RCLFVBQU0sUUFBUSxnQkFBZ0IsT0FBTztBQUNyQyxVQUFNLE1BQU0sS0FBSyxPQUFPO0FBQ3hCLFVBQU0sWUFBNEIsRUFBRSxHQUFHLEtBQUssSUFBSSxNQUFNO0FBQ3RELFdBQU87QUFBQSxFQUNUO0FBQUEsRUFFQSxTQUF5QjtBQUN2QixVQUFNLE1BQXNCO0FBQUEsTUFDMUIsSUFBSSxLQUFLO0FBQUEsTUFDVCxNQUFNLEtBQUs7QUFBQSxNQUNYLE1BQU0sS0FBSztBQUFBLE1BQ1gscUJBQXFCLEtBQUs7QUFBQSxJQUM1QjtBQUNBLFdBQU87QUFBQSxFQUNUO0FBQ0Y7IiwKICAibmFtZXMiOiBbIkJ1aWxkZXJPYmplY3RJZCIsICJCdWlsZGVyT3B0aW9uVGhlbWUiLCAiaW1wb3J0X2VuZ2luZSIsICJVIiwgImxhYmVsIiwgIkJ1aWxkZXJPcGVyYXRvciIsICJ2IiwgIm9wIiwgImR0byIsICJpbXBvcnRfZW5naW5lIiwgIkRTdGF0ZVByb3BzIiwgIlRoZW1lVXRpbHMiLCAiaGlkZUNvbW1hbmQiLCAic2hvd0NvbW1hbmQiLCAiaW1wb3J0X2VuZ2luZSIsICJVIiwgImltcG9ydF9lbmdpbmUiLCAiVSJdCn0K
2484
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3B1YmxpYy1hcGkudHMiLCAiLi4vc3JjL0J1aWxkZXJPYmplY3QudHMiLCAiLi4vc3JjL3RoZW1lL2ljb24tdXJscy50cyIsICIuLi9zcmMvdGhlbWUvSURlZmF1bHRUaGVtZS50cyIsICIuLi9zcmMvQnVpbGRlci1vcHRpb24udHMiLCAiLi4vc3JjL0J1aWxkZXItcXVlc3Rpb24udHMiLCAiLi4vc3JjL0J1aWxkZXJNYWluVGV4dC50cyIsICIuLi9zcmMvcnVsZWJ1aWxkZXIvUnVsZVZhcmlhYmxlLnRzIiwgIi4uL3NyYy9CdWlsZGVyLXBhZ2UudHMiLCAiLi4vc3JjL3ByaW1pdGl2ZXMvc2NoZW1hLXByZWZpeC50cyIsICIuLi9zcmMvcHJpbWl0aXZlcy9wYWdlLXByZWZpeC50cyIsICIuLi9zcmMvcHJpbWl0aXZlcy92YXJJRC50cyIsICIuLi9zcmMvcnVsZWJ1aWxkZXIvU2luZ2xlU2VsZWN0SXRlbS50cyIsICIuLi9zcmMvcnVsZWJ1aWxkZXIvUnVsZUlucHV0LnRzIiwgIi4uL3NyYy9CdWlsZGVyVGFnLnRzIiwgIi4uL3NyYy9ydWxlYnVpbGRlci9jb25kaXRpb24vQnVpbGRlci1vcGVyYXRvci50cyIsICIuLi9zcmMvcnVsZWJ1aWxkZXIvY29uZGl0aW9uL0J1aWxkZXItY29uZGl0aW9uLnRzIiwgIi4uL3NyYy9ydWxlYnVpbGRlci9jb25kaXRpb24vQnVpbGRlci1jb25kaXRpb24tZ3JvdXAudHMiLCAiLi4vc3JjL3J1bGVidWlsZGVyL211bHRpLXNlbGVjdC1pdGVtLnRzIiwgIi4uL3NyYy9ydWxlYnVpbGRlci90YWctYWN0aW9uLW1hbmFnZXIudHMiLCAiLi4vc3JjL3J1bGVidWlsZGVyL3BhZ2UtYWN0aW9uLW1hbmFnZXIudHMiLCAiLi4vc3JjL3J1bGVidWlsZGVyL2p1bXAtdG8tYWN0aW9uLW1hbmFnZXIudHMiLCAiLi4vc3JjL3J1bGVidWlsZGVyL0J1aWxkZXItcnVsZS50cyIsICIuLi9zcmMvdGhlbWUvQWJzdHJhY3RUaGVtZUNvbXBpbGVyLnRzIiwgIi4uL3NyYy90aGVtZS9zdGFuZGFyZC1wcm9wcy50cyIsICIuLi9zcmMvdGhlbWUvdGhlbWUtdXRpbHMudHMiLCAiLi4vc3JjL3RoZW1lL2RlZmF1bHQtdGhlbWUtY29tcGlsZXIudHMiLCAiLi4vc3JjL0J1aWxkZXItc2NoZW1hLnRzIiwgIi4uL3NyYy9CdWlsZGVyLXRleHQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCB7IHR5cGUgQnVpbGRlck9wdGlvbkR0bywgQnVpbGRlck9wdGlvbiB9IGZyb20gXCIuL0J1aWxkZXItb3B0aW9uXCI7XG5leHBvcnQgeyB0eXBlIEJ1aWxkZXJQYWdlRHRvLCB0eXBlIEJ1aWxkZXJQYWdlVHlwZSwgQnVpbGRlclBhZ2UgfSBmcm9tIFwiLi9CdWlsZGVyLXBhZ2VcIjtcbmV4cG9ydCB7IHR5cGUgQnVpbGRlclF1ZXN0aW9uRHRvLCBCdWlsZGVyUXVlc3Rpb24sIHR5cGUgQnVpbGRlclF1ZXN0aW9uVHlwZSB9IGZyb20gXCIuL0J1aWxkZXItcXVlc3Rpb25cIjtcbmV4cG9ydCB7IEJ1aWxkZXJTY2hlbWEsIHR5cGUgQnVpbGRlclNjaGVtYUR0byB9IGZyb20gXCIuL0J1aWxkZXItc2NoZW1hXCI7XG5leHBvcnQgeyBCdWlsZGVyVGV4dCwgdHlwZSBCdWlsZGVyVGV4dER0byB9IGZyb20gXCIuL0J1aWxkZXItdGV4dFwiO1xuZXhwb3J0IHsgdHlwZSBCdWlsZGVyTWFpbkltYWdlRHRvIH0gZnJvbSBcIi4vQnVpbGRlck1haW5JbWFnZUR0b1wiO1xuZXhwb3J0IHsgQnVpbGRlck1haW5UZXh0LCB0eXBlIEJ1aWxkZXJNYWluVGV4dER0byB9IGZyb20gXCIuL0J1aWxkZXJNYWluVGV4dFwiO1xuZXhwb3J0IHsgdHlwZSBCdWlsZGVyTWFpblZpZGVvRHRvIH0gZnJvbSBcIi4vQnVpbGRlck1haW5WaWRlb0R0b1wiO1xuZXhwb3J0IHsgdHlwZSBCdWlsZGVyVGFnRHRvLCBCdWlsZGVyVGFnLCBUYWdDb2xsZWN0aW9uIH0gZnJvbSBcIi4vQnVpbGRlclRhZ1wiO1xuZXhwb3J0IHsgdHlwZSBBdWRpb0ZpbGUsIHR5cGUgSW1hZ2VGaWxlLCB0eXBlIFZpZGVvRmlsZSB9IGZyb20gXCIuL21lZGlhLWZpbGVzXCI7XG4vLyBQdWJsaWMgQXBpIG9mIHJ1bGUtYnVpbGRlclxuZXhwb3J0ICogZnJvbSBcIi4vcnVsZWJ1aWxkZXJcIjtcbmV4cG9ydCB7IFBhZ2VQcmVmaXgsIFBhZ2VQcmVmaXhWYWx1ZSB9IGZyb20gXCIuL3ByaW1pdGl2ZXMvcGFnZS1wcmVmaXhcIjtcbmV4cG9ydCB7IFNjaGVtYVByZWZpeCwgU2NoZW1hUHJlZml4VmFsdWUgfSBmcm9tIFwiLi9wcmltaXRpdmVzL3NjaGVtYS1wcmVmaXhcIjtcbmV4cG9ydCB7IFZhcklEIH0gZnJvbSBcIi4vcHJpbWl0aXZlcy92YXJJRFwiO1xuIiwgImltcG9ydCB7IERVdGlsIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcblxuY29uc3QgVSA9IERVdGlsO1xuLyoqXG4gKiBCdWlsZGVyIG9iamVjdHMgYXJlIGNvbXBsZXggb2JqZWN0cyB0aGF0IGFyZSBlbWJlZGRlZCBpbnNpZGVcbiAqIGEgQnVpbGRlci1zY2hlbWEsIGFuZCBuZWVkcyB0byBiZSBzZXJpYWxpemVkIHRvIGpzb24uIE9mdGVuIHRoZXNlIG9iamVjdHNcbiAqIGFyZSB1c2VkIGluIGNvbGxlY3Rpb25zLCBhbmQgdGhhdCBpcyB3aHkgbW9zdCBvZiB0aGVtIG5lZWQgYW4gaWQuXG4gKi9cbnR5cGUgQnVpbGRlck9iamVjdFR5cGUgPVxuICB8IFwiYnVpbGRlci1wYWdlXCJcbiAgfCBcImJ1aWxkZXItcXVlc3Rpb24tb3B0aW9uXCJcbiAgfCBcImJ1aWxkZXItcXVlc3Rpb25cIlxuICB8IFwiYnVpbGRlci1tYWluLXRleHRcIlxuICB8IFwiYnVpbGRlci10ZXh0XCJcbiAgfCBcImJ1aWxkZXItcnVsZVwiXG4gIHwgXCJidWlsZGVyLXRhZ1wiXG4gIHwgXCJidWlsZGVyLWNvbmRpdGlvblwiXG4gIHwgXCJidWlsZGVyLXZhcmlhYmxlXCJcbiAgfCBcImJ1aWxkZXItY29uZGl0aW9uLWdyb3VwXCI7XG5cbmV4cG9ydCBuYW1lc3BhY2UgQnVpbGRlck9iamVjdElkIHtcbiAgZXhwb3J0IHR5cGUgUXVlc3Rpb25PcHRpb25JRCA9IHN0cmluZyAmIHsgX19PUFRJT05fX0lEX186IHRydWUgfTtcbiAgZXhwb3J0IHR5cGUgUXVlc3Rpb25JRCA9IHN0cmluZyAmIHsgX19RVUVTVElPTl9fSURfXzogdHJ1ZSB9O1xuICBleHBvcnQgdHlwZSBUZXh0SUQgPSBzdHJpbmcgJiB7IF9fVEVYVF9fSURfXzogdHJ1ZSB9O1xuICBleHBvcnQgdHlwZSBNYWluVGV4dElEID0gc3RyaW5nICYgeyBfX01BSU5fX1RFWFRfX0lEX186IHRydWUgfTtcbiAgZXhwb3J0IHR5cGUgVGFnSWQgPSBzdHJpbmcgJiB7IF9fVEFHX19JRF9fOiB0cnVlIH07XG4gIGV4cG9ydCBjb25zdCBjcmVhdGVUYWdJZCA9ICgpOiBUYWdJZCA9PiB7XG4gICAgcmV0dXJuIGNyZWF0ZUlkKFwiYnVpbGRlci10YWdcIikgYXMgVGFnSWQ7XG4gIH07XG5cbiAgZXhwb3J0IGNvbnN0IG1haW5UZXh0SWQgPSAoKTogTWFpblRleHRJRCA9PiB7XG4gICAgcmV0dXJuIGNyZWF0ZUlkKFwiYnVpbGRlci1tYWluLXRleHRcIikgYXMgTWFpblRleHRJRDtcbiAgfTtcbiAgZXhwb3J0IGNvbnN0IHRleHRJZCA9ICgpOiBUZXh0SUQgPT4ge1xuICAgIHJldHVybiBjcmVhdGVJZChcImJ1aWxkZXItdGV4dFwiKSBhcyBUZXh0SUQ7XG4gIH07XG5cbiAgZXhwb3J0IGNvbnN0IHF1ZXN0aW9uT3B0aW9uSWQgPSAoKTogUXVlc3Rpb25PcHRpb25JRCA9PiB7XG4gICAgcmV0dXJuIGNyZWF0ZUlkKFwiYnVpbGRlci1xdWVzdGlvbi1vcHRpb25cIikgYXMgUXVlc3Rpb25PcHRpb25JRDtcbiAgfTtcbiAgZXhwb3J0IGNvbnN0IHF1ZXN0aW9uSWQgPSAoKTogUXVlc3Rpb25JRCA9PiB7XG4gICAgcmV0dXJuIGNyZWF0ZUlkKFwiYnVpbGRlci1xdWVzdGlvblwiKSBhcyBRdWVzdGlvbklEO1xuICB9O1xuXG4gIGNvbnN0IGNyZWF0ZUlkID0gKHR5cGU6IEJ1aWxkZXJPYmplY3RUeXBlKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBpZCA9IFUucmFuZG9tU3RyaW5nKDI0KTtcbiAgICByZXR1cm4gdHlwZSArIFwiLVwiICsgaWQ7XG4gIH07XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCdWlsZGVyT2JqZWN0PFQgZXh0ZW5kcyBCdWlsZGVyT2JqZWN0VHlwZSwgRHRvIGV4dGVuZHMge30+IHtcbiAgLy8gYWJzdHJhY3QgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgYWJzdHJhY3QgcmVhZG9ubHkgb2JqZWN0VHlwZTogVDtcbiAgYWJzdHJhY3QgdG9Kc29uKCk6IER0bztcbiAgYWJzdHJhY3QgY2xvbmUoKTogRHRvO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3JpZ2luYWxEdG86IER0bztcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGR0bzogRHRvKSB7XG4gICAgdGhpcy5vcmlnaW5hbER0byA9IGR0bztcbiAgICAvLyB0aGlzLm9iamVjdElkID0gZHRvLm9iamVjdElkO1xuICB9XG59XG4iLCAiZXhwb3J0IGNvbnN0IEljb25VcmxzID0ge1xuICBpc3BlV2hpdGVQbmc6XG4gICAgJ2h0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZpc3BlLWh2aXQucG5nP2FsdD1tZWRpYSZ0b2tlbj1mNmZlNjI4Yi0yZDk5LTQ3MmQtYTJlYS1lMDYyODczZTJlMjInLFxuICBwYXVzZVN2ZzpcbiAgICAnaHR0cHM6Ly9maXJlYmFzZXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vdjAvYi9pc3BlLWJhY2tlbmQtZGV2LmFwcHNwb3QuY29tL28vcHVibGljLWFzc2V0cyUyRnBhdXNlLTI0cHguc3ZnP2FsdD1tZWRpYSZ0b2tlbj00NzMzNzQ5MS1iYjBkLTRjNTYtOWM4OS1hMDczY2UxOWZhZDQnLFxuICBwYXVzZUNpcmNsZU91dGxpbmVTdmc6XG4gICAgJ2h0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZwYXVzZV9jaXJjbGVfb3V0bGluZS0yNHB4LnN2Zz9hbHQ9bWVkaWEmdG9rZW49MTMzYWFiYzgtYWI5YS00ZWFhLTk5MTQtNGYwZjgyYzIyZWUyJyxcblxuICBwYXVzZUNpcmNsZUZpbGxlZFN2ZzpcbiAgICAnaHR0cHM6Ly9maXJlYmFzZXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vdjAvYi9pc3BlLWJhY2tlbmQtZGV2LmFwcHNwb3QuY29tL28vcHVibGljLWFzc2V0cyUyRnBhdXNlX2NpcmNsZV9maWxsZWQtMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPWFmM2YxMmMzLTMxOTktNDA5Ni04ZWQyLTc2MzQ3YjlhMGEwYScsXG4gIHBsYXlDaXJjbGVSZWd1bGFyOlxuICAgICdodHRwczovL2ZpcmViYXNlc3RvcmFnZS5nb29nbGVhcGlzLmNvbS92MC9iL2lzcGUtYmFja2VuZC1kZXYuYXBwc3BvdC5jb20vby9wdWJsaWMtYXNzZXRzJTJGcGxheS1jaXJjbGUtcmVndWxhci5zdmc/YWx0PW1lZGlhJnRva2VuPTA4NjdiNjkwLWQ3ZmQtNDc1Yy04ZTkxLWIyZDdhZWNhNTRkMScsXG4gIHBsYXlBcnJvd1N2ZzpcbiAgICAnaHR0cHM6Ly9maXJlYmFzZXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vdjAvYi9pc3BlLWJhY2tlbmQtZGV2LmFwcHNwb3QuY29tL28vcHVibGljLWFzc2V0cyUyRnBsYXlfYXJyb3ctMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPTJmYTk1ZTFmLTYxZjctNGExOC1hZmIzLTIxMGVhYmFlODIyNycsXG4gIHBsYXlDaXJjbGVPdXRsaW5lOlxuICAgICdodHRwczovL2ZpcmViYXNlc3RvcmFnZS5nb29nbGVhcGlzLmNvbS92MC9iL2lzcGUtYmFja2VuZC1kZXYuYXBwc3BvdC5jb20vby9wdWJsaWMtYXNzZXRzJTJGcGxheV9jaXJjbGVfb3V0bGluZS0yNHB4LnN2Zz9hbHQ9bWVkaWEmdG9rZW49M2E5ZjYyYzUtZGZhMi00MGVmLWE1MGUtY2YxYmRkMmQ0N2YyJyxcblxuICBzdG9wQ2lyY2xlU3ZnOlxuICAgICdodHRwczovL2ZpcmViYXNlc3RvcmFnZS5nb29nbGVhcGlzLmNvbS92MC9iL2lzcGUtYmFja2VuZC1kZXYuYXBwc3BvdC5jb20vby9wdWJsaWMtYXNzZXRzJTJGc3RvcF9jaXJjbGUtMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPThmYmM4Yjg5LTI5YmItNDlhZC1hZTExLWI4ODgyYmEzY2E3NycsXG4gIHN0b3BTdmc6XG4gICAgJ2h0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZzdG9wLTI0cHguc3ZnP2FsdD1tZWRpYSZ0b2tlbj1kMmNkNDFmMS0xMzMxLTQyNDMtOWI3YS1kYzBmMGNjZDI1NWQnLFxuICByZXBsYXlDaXJjbGVTdmc6XG4gICAgJ2h0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZyZXBsYXktMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPTNjMzVjY2Y0LWI0NjctNGU4MS04NWQ2LWIzNmFjNjQ3MzhhZCcsXG5cbiAgdm9sdW1lT2ZmU3ZnOlxuICAgICdodHRwczovL2ZpcmViYXNlc3RvcmFnZS5nb29nbGVhcGlzLmNvbS92MC9iL2lzcGUtYmFja2VuZC1kZXYuYXBwc3BvdC5jb20vby9wdWJsaWMtYXNzZXRzJTJGdm9sdW1lX29mZi0yNHB4LnN2Zz9hbHQ9bWVkaWEmdG9rZW49NGU0MWNjMTAtOWY0Yi00OTY3LWI0ZGYtZWQwNjgyZTY1N2E5JyxcbiAgdm9sdW1lVXBTdmc6XG4gICAgJ2h0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZ2b2x1bWVfdXAtMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPTU1MWJkMGE2LWE1MTUtNGY4Ny1hMjQ1LWRhNDMzZjQ4MzNmOSdcbn07XG4iLCAiaW1wb3J0IHR5cGUgeyBDc3NUaGVtZSB9IGZyb20gXCIuL2Nzcy10aGVtZVwiO1xuaW1wb3J0IHsgRFN0eWxlLCBEQ3NzIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcbmltcG9ydCB7IEljb25VcmxzIH0gZnJvbSBcIi4vaWNvbi11cmxzXCI7XG5cbnR5cGUgUFN0eWxlID0gUGFydGlhbDxEU3R5bGU+O1xuZXhwb3J0IGludGVyZmFjZSBJRGVmYXVsdFRoZW1lIHtcbiAgbmFtZTogc3RyaW5nO1xuICBpbWFnZTogeyBzdHlsZTogUFN0eWxlIH07XG4gIHZpZGVvUGxheWVyOiB7XG4gICAgcGxheUJ1dHRvbjoge1xuICAgICAgaWNvblVybDogc3RyaW5nO1xuICAgICAgY3NzOiBQU3R5bGU7XG4gICAgICBjc3NEaXNhYmxlZDogUFN0eWxlO1xuICAgICAgY3NzRW5hYmxlZDogUFN0eWxlO1xuICAgIH07XG4gICAgcGF1c2VCdXR0b246IHtcbiAgICAgIGljb25Vcmw6IHN0cmluZztcbiAgICAgIGNzczogUFN0eWxlO1xuICAgICAgY3NzRGlzYWJsZWQ6IFBTdHlsZTtcbiAgICAgIGNzc0VuYWJsZWQ6IFBTdHlsZTtcbiAgICB9O1xuICAgIHZpZGVvRWxlbWVudDoge1xuICAgICAgY3NzOiBQU3R5bGU7XG4gICAgfTtcbiAgfTtcbiAgbWFpblRleHQ6IHtcbiAgICBub01lZGlhOiB7XG4gICAgICB0ZXh0OiB7IGNzczogUFN0eWxlOyBjc3NEaXNhYmxlZDogUFN0eWxlOyBjc3NFbmFibGVkOiBQU3R5bGUgfTtcbiAgICAgIGF1ZGlvOiB7IGNzczogUFN0eWxlOyBjc3NEaXNhYmxlZDogUFN0eWxlOyBjc3NFbmFibGVkOiBQU3R5bGUgfTtcbiAgICB9O1xuICAgIHdpdGhNZWRpYToge1xuICAgICAgdGV4dDogeyBjc3M6IFBTdHlsZTsgY3NzRGlzYWJsZWQ6IFBTdHlsZTsgY3NzRW5hYmxlZDogUFN0eWxlIH07XG4gICAgICBhdWRpbzogeyBjc3M6IFBTdHlsZTsgY3NzRGlzYWJsZWQ6IFBTdHlsZTsgY3NzRW5hYmxlZDogUFN0eWxlIH07XG4gICAgfTtcbiAgfTtcbiAgLy8gbWFpblRleHRUaGVtZTogQnVpbGRlclRleHRUaGVtZTtcbiAgcmVzcG9uc2VCdXR0b25zOiBCdWlsZGVyT3B0aW9uVGhlbWU7XG4gIG5leHRCdXR0b25UaGVtZTogQnVpbGRlck9wdGlvblRoZW1lO1xuICAvLyBtYWluUXVlc3Rpb25UZXh0OiBCdWlsZGVyVGV4dFRoZW1lO1xuICAvLyBkb250S25vd0J1dHRvblRoZW1lOiBCdWlsZGVyT3B0aW9uVGhlbWU7XG4gIGJ1dHRvblRoZW1lcz86IEFycmF5PEJ1aWxkZXJPcHRpb25UaGVtZT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlck9wdGlvblRoZW1lIHtcbiAgbmFtZTogc3RyaW5nO1xuICBub3JtYWw6IEJ1dHRvblRoZW1lO1xuICBkb250S25vdzogQnV0dG9uVGhlbWU7XG59XG5cbmludGVyZmFjZSBCdXR0b25UaGVtZSB7XG4gIGJ0bjogQ3NzVGhlbWU7XG4gIGRpdmlkZXI6IFBTdHlsZTtcbiAgdGV4dDE6IFBTdHlsZTtcbiAgdGV4dDI6IFBTdHlsZTtcbn1cblxubmFtZXNwYWNlIEJ1aWxkZXJPcHRpb25UaGVtZSB7XG4gIGNvbnN0IEdSRUVOID0gXCIjNzBBRDQ3XCI7XG4gIGNvbnN0IFlFTExPVyA9IFwiI0ZGQzAwMFwiO1xuICBjb25zdCBPUkFOR0UgPSBcIiNGNDkwMkNcIjtcbiAgY29uc3QgUkVEID0gXCIjRkYwMDAwXCI7XG4gIGNvbnN0IExJR0hUX0JMVUUgPSBcIiM0MjcxOUNcIjtcbiAgY29uc3QgV0hJVEUgPSBcIiNmZmZmZmZcIjtcbiAgY29uc3QgQkxVRSA9IFwiIzJGNTU5N1wiO1xuICBjb25zdCBCVE5fV0lEVEggPSAxOC41O1xuICBjb25zdCBCVE5fQk9SREVSX1dJRFRIID0gMztcbiAgY29uc3QgQlROX0JPUkRFUl9SQURJVVMgPSAxMDtcbiAgY29uc3QgQlROX0JPUkRFUl9TVFlMRTogRFN0eWxlW1wiYm9yZGVyU3R5bGVcIl0gPSBcInNvbGlkXCI7XG4gIGNvbnN0IEJUTl9IRUlHSFQgPSA5LjI7XG4gIGNvbnN0IEJUTl9TSE9SVF9XSURUSCA9IDEzLjc7XG4gIGNvbnN0IEZPTlRfV0VJR0hUOiBEU3R5bGVbXCJmb250V2VpZ2h0XCJdID0gNjAwO1xuICBjb25zdCBGT05UX1NJWkU6IERDc3MuUHhbXCJ2YWx1ZVwiXSA9IDM1O1xuXG4gIGV4cG9ydCBjb25zdCBibHVlQnV0dG9uID0gKCk6IEJ1aWxkZXJPcHRpb25UaGVtZSA9PiB7XG4gICAgY29uc3Qgb3B0aW9uVGhlbWU6IEJ1aWxkZXJPcHRpb25UaGVtZSA9IHtcbiAgICAgIG5hbWU6IFwiYmx1ZS1idXR0b24tdGhlbWVcIixcbiAgICAgIG5vcm1hbDoge1xuICAgICAgICBidG46IHtcbiAgICAgICAgICBjc3M6IHtcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogQkxVRSxcbiAgICAgICAgICAgIGJvcmRlckNvbG9yOiBCTFVFLFxuICAgICAgICAgICAgdGV4dENvbG9yOiBXSElURSxcbiAgICAgICAgICAgIGZvbnRTaXplOiB7IF91bml0OiBcInB4XCIsIHZhbHVlOiBGT05UX1NJWkUgfSxcbiAgICAgICAgICAgIGJvcmRlcldpZHRoOiB7IF91bml0OiBcInB4XCIsIHZhbHVlOiBCVE5fQk9SREVSX1dJRFRIIH0sXG4gICAgICAgICAgICBib3JkZXJTdHlsZTogQlROX0JPUkRFUl9TVFlMRSxcbiAgICAgICAgICAgIGJvcmRlclJhZGl1czogeyB2YWx1ZTogQlROX0JPUkRFUl9SQURJVVMsIF91bml0OiBcInB4XCIgfSxcbiAgICAgICAgICAgIHBhZGRpbmc6IHsgX3VuaXQ6IFwicHhcIiwgdmFsdWU6IDQwIH0sXG4gICAgICAgICAgICBoOiBCVE5fSEVJR0hULFxuICAgICAgICAgICAgdzogQlROX1dJRFRILFxuICAgICAgICAgICAgeDogMTAsXG4gICAgICAgICAgICB5OiA4LFxuICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY3NzRGlzYWJsZWQ6IHsgb3BhY2l0eTogMC4zLCBjdXJzb3I6IFwibm90LWFsbG93ZWRcIiB9LFxuICAgICAgICAgIGNzc0VuYWJsZWQ6IHsgb3BhY2l0eTogMSwgY3Vyc29yOiBcInBvaW50ZXJcIiB9LFxuICAgICAgICB9LFxuICAgICAgICBkaXZpZGVyOiB7fSxcbiAgICAgICAgdGV4dDE6IHtcbiAgICAgICAgICB5OiA1MCxcbiAgICAgICAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAlLCA1MCUpXCIsXG4gICAgICAgICAgdGV4dENvbG9yOiBXSElURSxcbiAgICAgICAgICBmb250U2l6ZTogeyBfdW5pdDogXCJweFwiLCB2YWx1ZTogRk9OVF9TSVpFIH0sXG4gICAgICAgICAgdzogODQsXG4gICAgICAgICAgeDogOCxcbiAgICAgICAgICBmb250V2VpZ2h0OiBGT05UX1dFSUdIVCxcbiAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHRleHQyOiB7fSxcbiAgICAgIH0sXG5cbiAgICAgIGRvbnRLbm93OiB7XG4gICAgICAgIGJ0bjoge1xuICAgICAgICAgIGNzczoge1xuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBXSElURSxcbiAgICAgICAgICAgIGJvcmRlckNvbG9yOiBMSUdIVF9CTFVFLFxuICAgICAgICAgICAgdGV4dENvbG9yOiBCTFVFLFxuICAgICAgICAgICAgZm9udFNpemU6IHsgX3VuaXQ6IFwicHhcIiwgdmFsdWU6IEZPTlRfU0laRSB9LFxuICAgICAgICAgICAgYm9yZGVyV2lkdGg6IHsgX3VuaXQ6IFwicHhcIiwgdmFsdWU6IEJUTl9CT1JERVJfV0lEVEggfSxcbiAgICAgICAgICAgIGJvcmRlclN0eWxlOiBCVE5fQk9SREVSX1NUWUxFLFxuICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiB7IHZhbHVlOiBCVE5fQk9SREVSX1JBRElVUywgX3VuaXQ6IFwicHhcIiB9LFxuICAgICAgICAgICAgcGFkZGluZzogeyBfdW5pdDogXCJweFwiLCB2YWx1ZTogNDAgfSxcbiAgICAgICAgICAgIGg6IEJUTl9IRUlHSFQsXG4gICAgICAgICAgICB3OiBCVE5fU0hPUlRfV0lEVEgsXG4gICAgICAgICAgICB4OiAxMCxcbiAgICAgICAgICAgIHk6IDgsXG4gICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjc3NEaXNhYmxlZDogeyBvcGFjaXR5OiAwLjMsIGN1cnNvcjogXCJub3QtYWxsb3dlZFwiIH0sXG4gICAgICAgICAgY3NzRW5hYmxlZDogeyBvcGFjaXR5OiAxLCBjdXJzb3I6IFwicG9pbnRlclwiIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHRleHQxOiB7XG4gICAgICAgICAgeTogNTAsXG4gICAgICAgICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwJSwgNTAlKVwiLFxuICAgICAgICAgIHRleHRDb2xvcjogQkxVRSxcbiAgICAgICAgICBmb250U2l6ZTogeyBfdW5pdDogXCJweFwiLCB2YWx1ZTogRk9OVF9TSVpFIH0sXG4gICAgICAgICAgdzogODQsXG4gICAgICAgICAgeDogOCxcbiAgICAgICAgICBmb250V2VpZ2h0OiBGT05UX1dFSUdIVCxcbiAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHRleHQyOiB7fSxcbiAgICAgICAgZGl2aWRlcjoge30sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICByZXR1cm4gb3B0aW9uVGhlbWU7XG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBEZWZhdWx0VGhlbWU6IElEZWZhdWx0VGhlbWUgPSB7XG4gIG5hbWU6IFwiZGVmYXVsdC10aGVtZVwiLFxuICB2aWRlb1BsYXllcjoge1xuICAgIHBsYXlCdXR0b246IHtcbiAgICAgIGljb25Vcmw6IEljb25VcmxzLnBsYXlDaXJjbGVSZWd1bGFyLFxuICAgICAgY3NzOiB7IHc6IDUsIGg6IDUsIHk6IDQ4LCB4OiA0IH0sXG4gICAgICBjc3NEaXNhYmxlZDogeyBvcGFjaXR5OiAwLjMsIGN1cnNvcjogXCJub3QtYWxsb3dlZFwiIH0sXG4gICAgICBjc3NFbmFibGVkOiB7IG9wYWNpdHk6IDAuOCwgY3Vyc29yOiBcInBvaW50ZXJcIiB9LFxuICAgIH0sXG4gICAgcGF1c2VCdXR0b246IHtcbiAgICAgIGljb25Vcmw6IEljb25VcmxzLnBhdXNlU3ZnLFxuICAgICAgY3NzOiB7IHc6IDUsIGg6IDUsIHk6IDQ4LCB4OiA0IH0sXG4gICAgICBjc3NEaXNhYmxlZDogeyBvcGFjaXR5OiAwLjMsIGN1cnNvcjogXCJub3QtYWxsb3dlZFwiIH0sXG4gICAgICBjc3NFbmFibGVkOiB7IG9wYWNpdHk6IDAuOCwgY3Vyc29yOiBcInBvaW50ZXJcIiB9LFxuICAgIH0sXG4gICAgdmlkZW9FbGVtZW50OiB7IGNzczogeyB3OiAxMDAsIGg6IDQ1LCB5OiA1NSwgeDogMCB9IH0sXG4gIH0sXG4gIGltYWdlOiB7IHN0eWxlOiB7IGg6IDUwLCB3OiAxMDAsIHg6IDAgfSB9LFxuICBtYWluVGV4dDoge1xuICAgIG5vTWVkaWE6IHtcbiAgICAgIHRleHQ6IHtcbiAgICAgICAgY3NzOiB7XG4gICAgICAgICAgdzogODAsXG4gICAgICAgICAgeTogNjUsXG4gICAgICAgICAgeDogMTAsXG4gICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxuICAgICAgICAgIHRleHRDb2xvcjogXCJibGFja1wiLFxuICAgICAgICAgIGZvbnRTaXplOiB7IF91bml0OiBcInB4XCIsIHZhbHVlOiA0MCB9LFxuICAgICAgICB9LFxuICAgICAgICBjc3NEaXNhYmxlZDoge30sXG4gICAgICAgIGNzc0VuYWJsZWQ6IHt9LFxuICAgICAgfSxcbiAgICAgIGF1ZGlvOiB7XG4gICAgICAgIGNzczoge1xuICAgICAgICAgIGg6IDYsXG4gICAgICAgICAgdzogNixcbiAgICAgICAgICB4OiA0LFxuICAgICAgICAgIHk6IDMyLFxuICAgICAgICAgIGN1cnNvcjogXCJwb2ludGVyXCIsXG4gICAgICAgICAgb3BhY2l0eTogMC44LFxuICAgICAgICAgIHZpc2liaWxpdHk6IFwidmlzaWJsZVwiLFxuICAgICAgICB9LFxuICAgICAgICBjc3NEaXNhYmxlZDogeyBvcGFjaXR5OiAwLjMsIGN1cnNvcjogXCJub3QtYWxsb3dlZFwiIH0sXG4gICAgICAgIGNzc0VuYWJsZWQ6IHsgb3BhY2l0eTogMC44LCBjdXJzb3I6IFwicG9pbnRlclwiIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgd2l0aE1lZGlhOiB7XG4gICAgICB0ZXh0OiB7XG4gICAgICAgIGNzczoge1xuICAgICAgICAgIHc6IDgwLFxuICAgICAgICAgIHk6IDI3LFxuICAgICAgICAgIHg6IDEwLFxuICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgICB0ZXh0Q29sb3I6IFwiYmxhY2tcIixcbiAgICAgICAgICBmb250U2l6ZTogeyBfdW5pdDogXCJweFwiLCB2YWx1ZTogMzAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY3NzRGlzYWJsZWQ6IHt9LFxuICAgICAgICBjc3NFbmFibGVkOiB7fSxcbiAgICAgIH0sXG4gICAgICBhdWRpbzoge1xuICAgICAgICBjc3M6IHtcbiAgICAgICAgICBoOiA2LFxuICAgICAgICAgIHc6IDYsXG4gICAgICAgICAgeDogNCxcbiAgICAgICAgICB5OiAzMixcbiAgICAgICAgICBjdXJzb3I6IFwicG9pbnRlclwiLFxuICAgICAgICAgIG9wYWNpdHk6IDAuOCxcbiAgICAgICAgICB2aXNpYmlsaXR5OiBcInZpc2libGVcIixcbiAgICAgICAgfSxcbiAgICAgICAgY3NzRGlzYWJsZWQ6IHsgb3BhY2l0eTogMC4zLCBjdXJzb3I6IFwibm90LWFsbG93ZWRcIiB9LFxuICAgICAgICBjc3NFbmFibGVkOiB7IG9wYWNpdHk6IDAuOCwgY3Vyc29yOiBcInBvaW50ZXJcIiB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxuICBuZXh0QnV0dG9uVGhlbWU6IEJ1aWxkZXJPcHRpb25UaGVtZS5ibHVlQnV0dG9uKCksXG4gIHJlc3BvbnNlQnV0dG9uczogQnVpbGRlck9wdGlvblRoZW1lLmJsdWVCdXR0b24oKSxcbn07XG4iLCAiaW1wb3J0IHsgQnVpbGRlck9iamVjdElkLCBCdWlsZGVyT2JqZWN0IH0gZnJvbSBcIi4vQnVpbGRlck9iamVjdFwiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGVyT3B0aW9uVGhlbWUgfSBmcm9tIFwiLi90aGVtZS9JRGVmYXVsdFRoZW1lXCI7XG5pbXBvcnQgeyBEZWZhdWx0VGhlbWUgfSBmcm9tIFwiLi90aGVtZS9JRGVmYXVsdFRoZW1lXCI7XG5pbXBvcnQgeyBBdWRpb0ZpbGUgfSBmcm9tIFwiLi9tZWRpYS1maWxlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJPcHRpb25EdG8ge1xuICByZWFkb25seSBpZDogQnVpbGRlck9iamVjdElkLlF1ZXN0aW9uT3B0aW9uSUQ7XG4gIHJlYWRvbmx5IHZhbHVlOiBudW1iZXI7XG4gIHJlYWRvbmx5IGxhYmVsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxhYmVsQXVkaW8/OiBBdWRpb0ZpbGU7XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZGVyT3B0aW9uIGV4dGVuZHMgQnVpbGRlck9iamVjdDxcImJ1aWxkZXItcXVlc3Rpb24tb3B0aW9uXCIsIEJ1aWxkZXJPcHRpb25EdG8+IHtcbiAgcmVhZG9ubHkgb2JqZWN0VHlwZSA9IFwiYnVpbGRlci1xdWVzdGlvbi1vcHRpb25cIjtcbiAgdGhlbWU6IEJ1aWxkZXJPcHRpb25UaGVtZSA9IERlZmF1bHRUaGVtZS5yZXNwb25zZUJ1dHRvbnM7XG5cbiAgaWQ6IEJ1aWxkZXJPYmplY3RJZC5RdWVzdGlvbk9wdGlvbklEO1xuICB2YWx1ZTogbnVtYmVyO1xuICBsYWJlbCA9IFwiXCI7XG4gIHByaXZhdGUgX2xhYmVsQXVkaW9GaWxlOiBBdWRpb0ZpbGUgfCBmYWxzZSA9IGZhbHNlO1xuICBnZXQgbGFiZWxBdWRpb0ZpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xhYmVsQXVkaW9GaWxlO1xuICB9XG4gIHNldCBsYWJlbEF1ZGlvRmlsZShhdWRpb0ZpbGU6IEF1ZGlvRmlsZSB8IGZhbHNlKSB7XG4gICAgdGhpcy5fbGFiZWxBdWRpb0ZpbGUgPSBhdWRpb0ZpbGU7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGR0bzogQnVpbGRlck9wdGlvbkR0bykge1xuICAgIHN1cGVyKGR0byk7XG4gICAgdGhpcy5pZCA9IGR0by5pZDtcbiAgICB0aGlzLnZhbHVlID0gZHRvLnZhbHVlO1xuICAgIHRoaXMubGFiZWwgPSBkdG8ubGFiZWw7XG4gICAgLy8gdGhpcy50aGVtZSA9IGR0by50aGVtZTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZSh2YWx1ZTogbnVtYmVyLCBsYWJlbDogc3RyaW5nKSB7XG4gICAgY29uc3QgaWQgPSBCdWlsZGVyT2JqZWN0SWQucXVlc3Rpb25PcHRpb25JZCgpO1xuICAgIGNvbnN0IGR0bzogQnVpbGRlck9wdGlvbkR0byA9IHtcbiAgICAgIGlkLFxuICAgICAgdmFsdWUsXG4gICAgICBsYWJlbCxcbiAgICB9O1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEJ1aWxkZXJPcHRpb24oZHRvKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGZyb21Kc29uKGR0bzogQnVpbGRlck9wdGlvbkR0bykge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEJ1aWxkZXJPcHRpb24oZHRvKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICB0b0pzb24oKTogQnVpbGRlck9wdGlvbkR0byB7XG4gICAgY29uc3QgZHRvOiBCdWlsZGVyT3B0aW9uRHRvID0ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIGxhYmVsOiB0aGlzLmxhYmVsLFxuICAgIH07XG4gICAgcmV0dXJuIGR0bztcbiAgfVxuXG4gIGNsb25lKCk6IEJ1aWxkZXJPcHRpb25EdG8ge1xuICAgIGNvbnN0IGNsb25lSWQgPSBCdWlsZGVyT2JqZWN0SWQucXVlc3Rpb25PcHRpb25JZCgpO1xuICAgIGNvbnN0IGR0byA9IHRoaXMudG9Kc29uKCk7XG4gICAgY29uc3QgY2xvbmVEdG86IEJ1aWxkZXJPcHRpb25EdG8gPSB7IC4uLmR0bywgaWQ6IGNsb25lSWQgfTtcbiAgICByZXR1cm4gY2xvbmVEdG87XG4gIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IEJ1aWxkZXJPcHRpb25EdG8gfSBmcm9tIFwiLi9CdWlsZGVyLW9wdGlvblwiO1xuaW1wb3J0IHsgQnVpbGRlck9wdGlvbiB9IGZyb20gXCIuL0J1aWxkZXItb3B0aW9uXCI7XG5pbXBvcnQgeyBCdWlsZGVyT2JqZWN0LCBCdWlsZGVyT2JqZWN0SWQgfSBmcm9tIFwiLi9CdWlsZGVyT2JqZWN0XCI7XG5cbmV4cG9ydCB0eXBlIEJ1aWxkZXJRdWVzdGlvblR5cGUgPVxuICAgIHwgXCJzZWxlY3Qtb25lXCJcbiAgICB8IFwic2VsZWN0LW1hbnlcIlxuICAgIHwgXCJ0ZXh0XCJcbiAgICB8IFwiY29sb3JcIlxuICAgIHwgXCJyYWRpb1wiXG4gICAgfCBcImVtYWlsXCJcbiAgICB8IFwidGltZVwiXG4gICAgfCBcImNoZWNrYm94XCJcbiAgICB8IFwidGV4dGFyZWFcIlxuICAgIHwgXCJkYXRlXCJcbiAgICB8IFwibnVtZXJpYy1yYW5nZVwiXG4gICAgfCBcImR1cmF0aW9uXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlclF1ZXN0aW9uRHRvIHtcbiAgICByZWFkb25seSBpZDogQnVpbGRlck9iamVjdElkLlF1ZXN0aW9uSUQ7XG4gICAgX3R5cGU6IEJ1aWxkZXJRdWVzdGlvblR5cGU7XG4gICAgdGV4dDogc3RyaW5nO1xuICAgIG9wdGlvbnM6IFJlYWRvbmx5QXJyYXk8QnVpbGRlck9wdGlvbkR0bz47XG4gICAgcHJlZml4OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZGVyUXVlc3Rpb24gZXh0ZW5kcyBCdWlsZGVyT2JqZWN0PFwiYnVpbGRlci1xdWVzdGlvblwiLCBCdWlsZGVyUXVlc3Rpb25EdG8+IHtcbiAgICByZWFkb25seSBvYmplY3RUeXBlID0gXCJidWlsZGVyLXF1ZXN0aW9uXCI7XG4gICAgaWQ6IEJ1aWxkZXJPYmplY3RJZC5RdWVzdGlvbklEO1xuICAgIHR5cGU6IEJ1aWxkZXJRdWVzdGlvblR5cGU7XG4gICAgcXVlc3Rpb25UZXh0ID0gXCJcIjtcbiAgICBvcHRpb25zOiBCdWlsZGVyT3B0aW9uW10gPSBbXTtcbiAgICBwcmVmaXggPSBcIlwiO1xuXG4gICAgc3RhdGljIGNyZWF0ZSA9ICh0eXBlOiBCdWlsZGVyUXVlc3Rpb25UeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gQnVpbGRlck9iamVjdElkLnF1ZXN0aW9uSWQoKTtcblxuICAgICAgICByZXR1cm4gbmV3IEJ1aWxkZXJRdWVzdGlvbih7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIF90eXBlOiB0eXBlLFxuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgICAgcHJlZml4OiBcIlwiLFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgcHVibGljIHN0YXRpYyBmcm9tSnNvbihkdG86IEJ1aWxkZXJRdWVzdGlvbkR0byk6IEJ1aWxkZXJRdWVzdGlvbiB7XG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uID0gbmV3IEJ1aWxkZXJRdWVzdGlvbihkdG8pO1xuICAgICAgICByZXR1cm4gcXVlc3Rpb247XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihkdG86IEJ1aWxkZXJRdWVzdGlvbkR0bykge1xuICAgICAgICBzdXBlcihkdG8pO1xuICAgICAgICB0aGlzLmlkID0gZHRvLmlkIGFzIEJ1aWxkZXJPYmplY3RJZC5RdWVzdGlvbklEO1xuICAgICAgICB0aGlzLnR5cGUgPSBkdG8uX3R5cGU7XG4gICAgICAgIHRoaXMucXVlc3Rpb25UZXh0ID0gZHRvLnRleHQ7XG4gICAgICAgIHRoaXMucHJlZml4ID0gZHRvLnByZWZpeDtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gZHRvLm9wdGlvbnMubWFwKChvKSA9PiBCdWlsZGVyT3B0aW9uLmZyb21Kc29uKG8pKTtcbiAgICB9XG5cbiAgICBhZGRPcHRpb24obGFiZWw6IHN0cmluZywgdmFsdWU6IG51bWJlciwgYXRJbmRleCA9IC0xKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IEJ1aWxkZXJPcHRpb24uY3JlYXRlKHZhbHVlLCBsYWJlbCk7XG4gICAgICAgIGlmIChhdEluZGV4ID49IDAgJiYgYXRJbmRleCA8IHRoaXMub3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zcGxpY2UoYXRJbmRleCwgMCwgb3B0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wdXNoKG9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICB9XG5cbiAgICBkZWxldGVPcHRpb24ob3B0aW9uOiBCdWlsZGVyT3B0aW9uKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkID0gdGhpcy5vcHRpb25zLmZpbHRlcigobykgPT4gby5pZCAhPT0gb3B0aW9uLmlkKTtcbiAgICAgICAgY29uc3QgZGlkRGVsZXRlID0gZmlsdGVyZWQubGVuZ3RoID09PSB0aGlzLm9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gZmlsdGVyZWQ7XG4gICAgICAgIHJldHVybiBkaWREZWxldGU7XG4gICAgfVxuXG4gICAgdG9Kc29uKCkge1xuICAgICAgICBjb25zdCBvcHRpb25zSnNvbiA9IHRoaXMub3B0aW9ucy5tYXAoKG8pID0+IG8udG9Kc29uKCkpO1xuICAgICAgICBjb25zdCBkdG86IEJ1aWxkZXJRdWVzdGlvbkR0byA9IHtcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICAgICAgcHJlZml4OiB0aGlzLnByZWZpeCxcbiAgICAgICAgICAgIF90eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnF1ZXN0aW9uVGV4dCxcbiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnNKc29uLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZHRvO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEJ1aWxkZXJRdWVzdGlvbkR0byB7XG4gICAgICAgIGNvbnN0IGNsb25lSWQgPSBCdWlsZGVyT2JqZWN0SWQucXVlc3Rpb25JZCgpO1xuICAgICAgICBjb25zdCBkdG8gPSB0aGlzLnRvSnNvbigpO1xuICAgICAgICBjb25zdCBvcHRpb25zQ2xvbmUgPSB0aGlzLm9wdGlvbnMubWFwKChvKSA9PiBvLmNsb25lKCkpO1xuICAgICAgICBjb25zdCBjbG9uZWREdG86IEJ1aWxkZXJRdWVzdGlvbkR0byA9IHtcbiAgICAgICAgICAgIC4uLmR0byxcbiAgICAgICAgICAgIGlkOiBjbG9uZUlkLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uc0Nsb25lLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gY2xvbmVkRHRvO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBCdWlsZGVyT2JqZWN0IH0gZnJvbSBcIi4vQnVpbGRlck9iamVjdFwiO1xuaW1wb3J0IHsgQXVkaW9GaWxlIH0gZnJvbSBcIi4vbWVkaWEtZmlsZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZGVyTWFpblRleHREdG8ge1xuICAgIHRleHQ6IHN0cmluZztcbiAgICBhdWRpb0ZpbGU6IEF1ZGlvRmlsZSB8IGZhbHNlO1xuICAgIGF1dG9wbGF5OiBib29sZWFuO1xuICAgIGF1dG9wbGF5RGVsYXk6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkZXJNYWluVGV4dCBleHRlbmRzIEJ1aWxkZXJPYmplY3Q8XCJidWlsZGVyLW1haW4tdGV4dFwiLCBCdWlsZGVyTWFpblRleHREdG8+IHtcbiAgICByZWFkb25seSBvYmplY3RUeXBlOiBcImJ1aWxkZXItbWFpbi10ZXh0XCIgPSBcImJ1aWxkZXItbWFpbi10ZXh0XCI7XG4gICAgYXV0b3BsYXkgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9hdWRpb0ZpbGU6IEF1ZGlvRmlsZSB8IGZhbHNlID0gZmFsc2U7XG4gICAgYXV0b3BsYXlEZWxheSA9IDA7XG5cbiAgICB0ZXh0ID0gXCJcIjtcblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IoZHRvOiBCdWlsZGVyTWFpblRleHREdG8pIHtcbiAgICAgICAgc3VwZXIoZHRvKTtcbiAgICAgICAgdGhpcy5fYXVkaW9GaWxlID0gZHRvLmF1ZGlvRmlsZSA/PyBmYWxzZTtcbiAgICAgICAgdGhpcy5hdXRvcGxheSA9IGR0by5hdXRvcGxheSA/PyBmYWxzZTtcbiAgICAgICAgdGhpcy5hdXRvcGxheURlbGF5ID0gZHRvLmF1dG9wbGF5RGVsYXkgPz8gMDtcbiAgICAgICAgdGhpcy50ZXh0ID0gZHRvLnRleHQgPz8gXCJcIjtcbiAgICB9XG5cbiAgICBnZXQgYXV0b3BsYXlEZWxheUluU2Vjb25kcygpIHtcbiAgICAgICAgY29uc3QgZGVsYXkgPSB0aGlzLmF1dG9wbGF5RGVsYXk7XG4gICAgICAgIGNvbnN0IHMgPSBkZWxheSAvIDEwMDA7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IHMudG9GaXhlZCgxKTtcbiAgICAgICAgcmV0dXJuIGZvcm1hdHRlZDtcbiAgICB9XG5cbiAgICBnZXQgZHVyYXRpb25UYWcoKSB7XG4gICAgICAgIGlmICghdGhpcy5hdWRpb0ZpbGUpIHJldHVybiBcIlwiO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmF1ZGlvRmlsZS5kdXJhdGlvbik7XG4gICAgICAgIGNvbnN0IGR1ciA9IHRoaXMuYXVkaW9GaWxlLmR1cmF0aW9uLnRvRml4ZWQoMSk7XG4gICAgICAgIHJldHVybiBcImR1ciBcIiArIGR1ciArIFwiIHNcIjtcbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpzb24oZHRvOiBCdWlsZGVyTWFpblRleHREdG8pOiBCdWlsZGVyTWFpblRleHQge1xuICAgICAgICBjb25zdCBtYWluVGV4dCA9IG5ldyBCdWlsZGVyTWFpblRleHQoZHRvKTtcbiAgICAgICAgcmV0dXJuIG1haW5UZXh0O1xuICAgIH1cblxuICAgIHN0YXRpYyBjcmVhdGUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGR0bzogQnVpbGRlck1haW5UZXh0RHRvID0ge1xuICAgICAgICAgICAgYXV0b3BsYXk6IGZhbHNlLFxuICAgICAgICAgICAgYXV0b3BsYXlEZWxheTogMCxcbiAgICAgICAgICAgIGF1ZGlvRmlsZTogZmFsc2UsXG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbmV3IEJ1aWxkZXJNYWluVGV4dChkdG8pO1xuICAgIH07XG5cbiAgICBjbG9uZSgpOiBCdWlsZGVyTWFpblRleHREdG8ge1xuICAgICAgICBjb25zdCBkdG8gPSB0aGlzLnRvSnNvbigpO1xuICAgICAgICBjb25zdCBjbG9uZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZHRvKSk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICB0b0pzb24oKTogQnVpbGRlck1haW5UZXh0RHRvIHtcbiAgICAgICAgY29uc3QgZHRvOiBCdWlsZGVyTWFpblRleHREdG8gPSB7XG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnRleHQsXG4gICAgICAgICAgICBhdWRpb0ZpbGU6IHRoaXMuYXVkaW9GaWxlLFxuICAgICAgICAgICAgYXV0b3BsYXk6IHRoaXMuYXV0b3BsYXksXG4gICAgICAgICAgICBhdXRvcGxheURlbGF5OiB0aGlzLmF1dG9wbGF5RGVsYXksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBkdG87XG4gICAgfVxuICAgIGdldCBhdWRpb0ZpbGUoKTogQXVkaW9GaWxlIHwgZmFsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXVkaW9GaWxlO1xuICAgIH1cbiAgICBzZXQgYXVkaW9GaWxlKGF1ZGlvRmlsZTogQXVkaW9GaWxlIHwgZmFsc2UpIHtcbiAgICAgICAgaWYgKGF1ZGlvRmlsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b3BsYXlEZWxheSA9IDA7XG4gICAgICAgICAgICB0aGlzLmF1dG9wbGF5ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYXVkaW9GaWxlID0gYXVkaW9GaWxlO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBQYWdlUHJlZml4IH0gZnJvbSBcIi4uL3ByaW1pdGl2ZXMvcGFnZS1wcmVmaXhcIjtcbmltcG9ydCB7IFZhcklEIH0gZnJvbSBcIi4uL3ByaW1pdGl2ZXMvdmFySURcIjtcbmltcG9ydCB7IFNjaGVtYVByZWZpeCB9IGZyb20gXCIuLi9wcmltaXRpdmVzL3NjaGVtYS1wcmVmaXhcIjtcblxuY29uc3QgQnVpbGRlclZhcmlhYmxlVHlwZSA9IHtcbiAgbnVtZXJpY1dpdGhPcHRpb25zOiB0cnVlLFxuICBudW1lcmljOiB0cnVlLFxuICBudW1lcmljUmFuZ2U6IHRydWUsXG4gIHRleHQ6IHRydWUsXG4gIGRhdGU6IHRydWUsXG4gIGRhdGVSYW5nZTogdHJ1ZSxcbiAgdGltZTogdHJ1ZSxcbiAgZHVyYXRpb246IHRydWUsXG4gIGJvb2xlYW46IHRydWUsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBCdWlsZGVyVmFyaWFibGVUeXBlID0ga2V5b2YgdHlwZW9mIEJ1aWxkZXJWYXJpYWJsZVR5cGU7XG5cbmV4cG9ydCBjbGFzcyBCdWlsZGVyVmFyaWFibGVPcHRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBsYWJlbDogc3RyaW5nLFxuICAgIHJlYWRvbmx5IHZhbHVlOiBudW1iZXIsXG4gICkge31cbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uVmFyaWFibGUge1xuICByZWFkb25seSBraW5kOiBcInF1ZXN0aW9uLXZhcmlhYmxlXCIgPSBcInF1ZXN0aW9uLXZhcmlhYmxlXCI7XG4gIHJlYWRvbmx5IGRhdGFUeXBlOiBCdWlsZGVyVmFyaWFibGVUeXBlID0gXCJudW1lcmljV2l0aE9wdGlvbnNcIjtcbiAgY29uc3RydWN0b3IoXG4gICAgLy8gcHJpdmF0ZSBzY2hlbWFQcmVmaXg6IFNjaGVtYVByZWZpeCxcbiAgICAvLyBwcml2YXRlIHBhZ2VQcmVmaXg6IFBhZ2VQcmVmaXgsXG4gICAgcmVhZG9ubHkgdmFySWQ6IFZhcklELFxuICAgIHJlYWRvbmx5IGxhYmVsOiBzdHJpbmcsXG4gICAgcmVhZG9ubHkgb3B0aW9uczogUmVhZG9ubHlBcnJheTxCdWlsZGVyVmFyaWFibGVPcHRpb24+LFxuICAgIHJlYWRvbmx5IHBhZ2VOdW1iZXI6IG51bWJlcixcbiAgKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgQ3VzdG9tVmFyaWFibGUge1xuICByZWFkb25seSBraW5kOiBcImNvbmZpZ3VyYXRpb24tdmFyaWFibGVcIiA9IFwiY29uZmlndXJhdGlvbi12YXJpYWJsZVwiO1xuICByZWFkb25seSBkYXRhVHlwZTogQnVpbGRlclZhcmlhYmxlVHlwZSA9IFwibnVtZXJpY1dpdGhPcHRpb25zXCI7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IHZhcklkOiBWYXJJRCxcbiAgICByZWFkb25seSBsYWJlbDogc3RyaW5nLFxuICAgIHJlYWRvbmx5IG9wdGlvbnM6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclZhcmlhYmxlT3B0aW9uPixcbiAgKSB7fVxufVxuXG5leHBvcnQgdHlwZSBCdWlsZGVyVmFyaWFibGUgPSBRdWVzdGlvblZhcmlhYmxlIHwgQ3VzdG9tVmFyaWFibGU7XG4iLCAiaW1wb3J0IHR5cGUgeyBCdWlsZGVyUXVlc3Rpb25EdG8sIEJ1aWxkZXJRdWVzdGlvblR5cGUgfSBmcm9tIFwiLi9CdWlsZGVyLXF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBCdWlsZGVyUXVlc3Rpb24gfSBmcm9tIFwiLi9CdWlsZGVyLXF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBCdWlsZGVyT2JqZWN0IH0gZnJvbSBcIi4vQnVpbGRlck9iamVjdFwiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGVyT3B0aW9uRHRvIH0gZnJvbSBcIi4vQnVpbGRlci1vcHRpb25cIjtcbmltcG9ydCB7IEJ1aWxkZXJPcHRpb24gfSBmcm9tIFwiLi9CdWlsZGVyLW9wdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGVyTWFpblZpZGVvRHRvIH0gZnJvbSBcIi4vQnVpbGRlck1haW5WaWRlb0R0b1wiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGVyTWFpbkltYWdlRHRvIH0gZnJvbSBcIi4vQnVpbGRlck1haW5JbWFnZUR0b1wiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGVyTWFpblRleHREdG8gfSBmcm9tIFwiLi9CdWlsZGVyTWFpblRleHRcIjtcbmltcG9ydCB7IEJ1aWxkZXJNYWluVGV4dCB9IGZyb20gXCIuL0J1aWxkZXJNYWluVGV4dFwiO1xuaW1wb3J0IHsgQnVpbGRlclZhcmlhYmxlT3B0aW9uLCBRdWVzdGlvblZhcmlhYmxlIH0gZnJvbSBcIi4vcnVsZWJ1aWxkZXIvUnVsZVZhcmlhYmxlXCI7XG5pbXBvcnQgeyBEVXRpbCwgUGFnZUlEIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcbmltcG9ydCB7IFBhZ2VQcmVmaXgsIFBhZ2VQcmVmaXhWYWx1ZSB9IGZyb20gXCIuL3ByaW1pdGl2ZXMvcGFnZS1wcmVmaXhcIjtcbmltcG9ydCB7IFZhcklEIH0gZnJvbSBcIi4vcHJpbWl0aXZlcy92YXJJRFwiO1xuaW1wb3J0IHsgU2NoZW1hUHJlZml4LCBTY2hlbWFQcmVmaXhWYWx1ZSB9IGZyb20gXCIuL3ByaW1pdGl2ZXMvc2NoZW1hLXByZWZpeFwiO1xuXG5jb25zdCBVID0gRFV0aWw7XG5leHBvcnQgdHlwZSBCdWlsZGVyUGFnZVR5cGUgPSBcImluZm8tcGFnZVwiIHwgXCJxdWVzdGlvblwiIHwgXCJtdWx0aS1zZWxlY3RcIiB8IFwiZm9ybVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJQYWdlRHRvIHtcbiAgcmVhZG9ubHkgaWQ6IFBhZ2VJRDtcbiAgcmVhZG9ubHkgcHJlZml4OiBQYWdlUHJlZml4VmFsdWU7XG4gIF90eXBlOiBCdWlsZGVyUGFnZVR5cGU7XG4gIG1haW5UZXh0OiBCdWlsZGVyTWFpblRleHREdG87XG4gIG5leHRCdXR0b246IEJ1aWxkZXJPcHRpb25EdG87XG4gIGRlZmF1bHRRdWVzdGlvbjogQnVpbGRlclF1ZXN0aW9uRHRvO1xuICBxdWVzdGlvbnM6IEFycmF5PEJ1aWxkZXJRdWVzdGlvbkR0bz47XG4gIG1haW5NZWRpYT86IEJ1aWxkZXJNYWluSW1hZ2VEdG8gfCBCdWlsZGVyTWFpblZpZGVvRHRvO1xuICBhdXRvcGxheVNlcXVlbmNlOiBBcnJheTxzdHJpbmc+O1xuICB0YWdzOiBSZWFkb25seUFycmF5PHN0cmluZz47XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZGVyUGFnZSBleHRlbmRzIEJ1aWxkZXJPYmplY3Q8XCJidWlsZGVyLXBhZ2VcIiwgQnVpbGRlclBhZ2VEdG8+IHtcbiAgcmVhZG9ubHkgb2JqZWN0VHlwZTogXCJidWlsZGVyLXBhZ2VcIiA9IFwiYnVpbGRlci1wYWdlXCI7XG4gIHJlYWRvbmx5IGlkOiBQYWdlSUQ7XG4gIHByaXZhdGUgX3BhZ2VUeXBlOiBCdWlsZGVyUGFnZVR5cGU7XG4gIHByaXZhdGUgX3ByZWZpeDogUGFnZVByZWZpeDtcbiAgcHJpdmF0ZSBfcXVlc3Rpb25zOiBBcnJheTxCdWlsZGVyUXVlc3Rpb24+ID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RhZ3M6IFNldDxzdHJpbmc+O1xuICBwcml2YXRlIF9iYWNrZ3JvdW5kQ29sb3IgPSBcIiNGRkZGRkZcIjtcbiAgbWFpbk1lZGlhOiBCdWlsZGVyTWFpblZpZGVvRHRvIHwgQnVpbGRlck1haW5JbWFnZUR0byB8IGZhbHNlID0gZmFsc2U7XG4gIGRlZmF1bHRRdWVzdGlvbjogQnVpbGRlclF1ZXN0aW9uO1xuICBtYWluVGV4dDogQnVpbGRlck1haW5UZXh0O1xuICBuZXh0QnV0dG9uID0gQnVpbGRlck9wdGlvbi5jcmVhdGUoLTEsIFwiTmVzdGVcIik7XG5cbiAgcHVibGljIHN0YXRpYyBjcmVhdGUodHlwZTogQnVpbGRlclBhZ2VUeXBlLCBfcHJlZml4OiBQYWdlUHJlZml4VmFsdWUpIHtcbiAgICBjb25zdCBpZCA9IFBhZ2VJRC5jcmVhdGUoKTtcbiAgICBjb25zdCBtYWluVGV4dER0bzogQnVpbGRlck1haW5UZXh0RHRvID0ge1xuICAgICAgdGV4dDogXCJcIixcbiAgICAgIGF1ZGlvRmlsZTogZmFsc2UsXG4gICAgICBhdXRvcGxheTogZmFsc2UsXG4gICAgICBhdXRvcGxheURlbGF5OiAwLFxuICAgIH07XG4gICAgY29uc3QgbmV4dEJ1dHRvbkR0byA9IEJ1aWxkZXJPcHRpb24uY3JlYXRlKC0xLCBcInBhZ2UtbmV4dC1idXR0b24tdGV4dFwiKS50b0pzb24oKTtcbiAgICBjb25zdCBkZWZhdWx0UXVlc3Rpb25EdG8gPSBCdWlsZGVyUXVlc3Rpb24uY3JlYXRlKFwic2VsZWN0LW9uZVwiKS50b0pzb24oKTtcblxuICAgIGNvbnN0IGR0bzogQnVpbGRlclBhZ2VEdG8gPSB7XG4gICAgICBfdHlwZTogdHlwZSxcbiAgICAgIGF1dG9wbGF5U2VxdWVuY2U6IFtdLFxuICAgICAgZGVmYXVsdFF1ZXN0aW9uOiBkZWZhdWx0UXVlc3Rpb25EdG8sXG4gICAgICBpZCxcbiAgICAgIG5leHRCdXR0b246IG5leHRCdXR0b25EdG8sXG4gICAgICBtYWluVGV4dDogbWFpblRleHREdG8sXG4gICAgICBwcmVmaXg6IF9wcmVmaXgsXG4gICAgICBxdWVzdGlvbnM6IFtdLFxuICAgICAgdGFnczogW10sXG4gICAgfTtcblxuICAgIGNvbnN0IHBhZ2UgPSBuZXcgQnVpbGRlclBhZ2UoZHRvKTtcbiAgICByZXR1cm4gcGFnZTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGZyb21Kc29uKGR0bzogQnVpbGRlclBhZ2VEdG8pOiBCdWlsZGVyUGFnZSB7XG4gICAgY29uc3QgcGFnZSA9IG5ldyBCdWlsZGVyUGFnZShkdG8pO1xuICAgIHJldHVybiBwYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihkdG86IEJ1aWxkZXJQYWdlRHRvKSB7XG4gICAgc3VwZXIoZHRvKTtcbiAgICB0aGlzLmlkID0gZHRvLmlkO1xuICAgIHRoaXMuX3BhZ2VUeXBlID0gZHRvLl90eXBlO1xuICAgIGNvbnN0IHByZWZpeEluc3RhbmNlID0gUGFnZVByZWZpeC5jYXN0T3JDcmVhdGVSYW5kb20oZHRvLnByZWZpeCk7XG4gICAgdGhpcy5fcHJlZml4ID0gcHJlZml4SW5zdGFuY2U7XG4gICAgdGhpcy5tYWluVGV4dCA9IEJ1aWxkZXJNYWluVGV4dC5mcm9tSnNvbihkdG8ubWFpblRleHQpO1xuICAgIHRoaXMubmV4dEJ1dHRvbiA9IEJ1aWxkZXJPcHRpb24uZnJvbUpzb24oZHRvLm5leHRCdXR0b24pO1xuICAgIHRoaXMuZGVmYXVsdFF1ZXN0aW9uID0gQnVpbGRlclF1ZXN0aW9uLmZyb21Kc29uKGR0by5kZWZhdWx0UXVlc3Rpb24pO1xuICAgIHRoaXMuX3F1ZXN0aW9ucyA9IGR0by5xdWVzdGlvbnMubWFwKChxKSA9PiBCdWlsZGVyUXVlc3Rpb24uZnJvbUpzb24ocSkpO1xuICAgIGNvbnN0IHRhZ0xpc3Q6IHN0cmluZ1tdID0gQXJyYXkuaXNBcnJheShkdG8udGFncykgPyBkdG8udGFncyA6IFtdO1xuICAgIHRoaXMuX3RhZ3MgPSBuZXcgU2V0KHRhZ0xpc3QpO1xuICAgIGlmIChkdG8ubWFpbk1lZGlhKSB7XG4gICAgICB0aGlzLm1haW5NZWRpYSA9IGR0by5tYWluTWVkaWE7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlUm93cygpO1xuICB9XG5cbiAgaW5zZXJ0UXVlc3Rpb24ocXVlc3Rpb246IEJ1aWxkZXJRdWVzdGlvbiwgYXRJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsaWRJbmRleEZuID0gVS5pc0luUmFuZ2UoMCwgdGhpcy5fcXVlc3Rpb25zLmxlbmd0aCk7XG4gICAgaWYgKCF2YWxpZEluZGV4Rm4oYXRJbmRleCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgaGFzUXVlc3Rpb24gPSAhIXRoaXMuX3F1ZXN0aW9ucy5maW5kKChxKSA9PiBxLmlkID09PSBxdWVzdGlvbi5pZCk7XG4gICAgaWYgKGhhc1F1ZXN0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuX3F1ZXN0aW9ucy5zcGxpY2UoYXRJbmRleCwgMCwgcXVlc3Rpb24pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYWRkUXVlc3Rpb24odHlwZTogQnVpbGRlclF1ZXN0aW9uVHlwZSwgYXRJbmRleCA9IC0xKTogQnVpbGRlclF1ZXN0aW9uIHtcbiAgICBjb25zdCBxdWVzdGlvbiA9IEJ1aWxkZXJRdWVzdGlvbi5jcmVhdGUodHlwZSk7XG4gICAgaWYgKGF0SW5kZXggPCB0aGlzLl9xdWVzdGlvbnMubGVuZ3RoICYmIGF0SW5kZXggPj0gMCkge1xuICAgICAgdGhpcy5fcXVlc3Rpb25zLnNwbGljZShhdEluZGV4LCAwLCBxdWVzdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3F1ZXN0aW9ucy5wdXNoKHF1ZXN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgYSBxdWVzdGlvbiBpbiBxdWVzdGlvbnMtYXJyYXlcbiAgICogQHBhcmFtIHF1ZXN0aW9uIChyZWZlcmVuY2UpXG4gICAqIEBwYXJhbSB0b0luZGV4XG4gICAqL1xuICBtb3ZlUXVlc3Rpb24ocXVlc3Rpb246IEJ1aWxkZXJRdWVzdGlvbiwgdG9JbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsaWRUb0luZGV4Rm4gPSBVLmlzSW5SYW5nZSgwLCB0aGlzLl9xdWVzdGlvbnMubGVuZ3RoKTtcbiAgICBpZiAoIXZhbGlkVG9JbmRleEZuKHRvSW5kZXgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuX3F1ZXN0aW9ucy5pbmRleE9mKHF1ZXN0aW9uKTtcbiAgICBpZiAoY3VycmVudEluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLl9xdWVzdGlvbnMuc3BsaWNlKGN1cnJlbnRJbmRleCwgMSk7XG4gICAgdGhpcy5fcXVlc3Rpb25zLnNwbGljZSh0b0luZGV4LCAwLCBxdWVzdGlvbik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBkZWxldGVRdWVzdGlvbihxdWVzdGlvbjogQnVpbGRlclF1ZXN0aW9uKSB7XG4gICAgdGhpcy5fcXVlc3Rpb25zID0gdGhpcy5fcXVlc3Rpb25zLmZpbHRlcigocSkgPT4gcSAhPT0gcXVlc3Rpb24pO1xuICAgIC8vIFRPRE8gRU1JVCBERUxFVEVEIFFVRVNUSU9OLlxuICAgIHRoaXMudXBkYXRlUm93cygpO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlUm93cygpIHtcbiAgICBpZiAodGhpcy5fcGFnZVR5cGUgPT09IFwicXVlc3Rpb25cIiB8fCB0aGlzLl9wYWdlVHlwZSA9PT0gXCJpbmZvLXBhZ2VcIikge1xuICAgICAgdGhpcy5fcXVlc3Rpb25zID0gW107XG4gICAgfVxuICAgIGlmICh0aGlzLl9wYWdlVHlwZSA9PT0gXCJmb3JtXCIgJiYgdGhpcy5fcXVlc3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5fcXVlc3Rpb25zID0gW107XG4gICAgICB0aGlzLmFkZFF1ZXN0aW9uKFwidGV4dFwiKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3BhZ2VUeXBlID09PSBcIm11bHRpLXNlbGVjdFwiICYmIHRoaXMuX3F1ZXN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuX3F1ZXN0aW9ucyA9IFtdO1xuICAgICAgdGhpcy5hZGRRdWVzdGlvbihcInRleHRcIik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFkZFRhZyh0YWc6IHN0cmluZykge1xuICAgIHRoaXMuX3RhZ3MuYWRkKHRhZyk7XG4gIH1cbiAgcHVibGljIGRlbGV0ZVRhZyh0YWc6IHN0cmluZykge1xuICAgIHRoaXMuX3RhZ3MuZGVsZXRlKHRhZyk7XG4gIH1cblxuICBzZXQgcGFnZVR5cGUodmFsdWU6IEJ1aWxkZXJQYWdlVHlwZSkge1xuICAgIHRoaXMuX3BhZ2VUeXBlID0gdmFsdWU7XG4gICAgLy8gVE9ETyBFbWl0IEFsbCBxdWVzdGlvbnMgdGhhdCBhcmUgZGVsZXRlZD8gTGlzdGVuIGZvciByZW1vdmVkIHZhcmlhYmxlcz8/XG4gICAgdGhpcy51cGRhdGVSb3dzKCk7XG4gIH1cblxuICBnZXRRdWVzdGlvblZhcmlhYmxlcyhtb2R1bGVQcmVmaXg6IFNjaGVtYVByZWZpeCwgcGFnZU51bWJlcjogbnVtYmVyKTogUmVhZG9ubHlBcnJheTxRdWVzdGlvblZhcmlhYmxlPiB7XG4gICAgY29uc3QgdmFyaWFibGVzOiBRdWVzdGlvblZhcmlhYmxlW10gPSBbXTtcblxuICAgIGlmICh0aGlzLl9wYWdlVHlwZSA9PT0gXCJxdWVzdGlvblwiKSB7XG4gICAgICBjb25zdCBwYWdlUHJlZml4ID0gdGhpcy5wcmVmaXg7XG4gICAgICBjb25zdCB2YXJJZCA9IFZhcklELmNyZWF0ZShtb2R1bGVQcmVmaXgudmFsdWUsIHBhZ2VQcmVmaXgpO1xuICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLm1haW5UZXh0LnRleHQ7XG4gICAgICBjb25zdCBvcCA9IHRoaXMuZGVmYXVsdFF1ZXN0aW9uLm9wdGlvbnMubWFwKChvKSA9PiB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gby5sYWJlbDtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBvLnZhbHVlO1xuICAgICAgICByZXR1cm4gbmV3IEJ1aWxkZXJWYXJpYWJsZU9wdGlvbihsYWJlbCwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBzaW5nbGVWYXIgPSBuZXcgUXVlc3Rpb25WYXJpYWJsZSh2YXJJZCwgbGFiZWwsIG9wLCBwYWdlTnVtYmVyKTtcbiAgICAgIHZhcmlhYmxlcy5wdXNoKHNpbmdsZVZhcik7XG4gICAgfVxuICAgIHJldHVybiB2YXJpYWJsZXM7XG4gIH1cblxuICBnZXQgdGFncygpOiBSZWFkb25seUFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBbLi4udGhpcy5fdGFnc107XG4gIH1cbiAgZ2V0IHBhZ2VUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLl9wYWdlVHlwZTtcbiAgfVxuXG4gIGdldCBwcmVmaXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ByZWZpeC52YWx1ZTtcbiAgfVxuXG4gIHNldCBwcmVmaXgodmFsdWU6IFBhZ2VQcmVmaXhWYWx1ZSkge1xuICAgIHRoaXMuX3ByZWZpeC52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgdG9Kc29uKCk6IEJ1aWxkZXJQYWdlRHRvIHtcbiAgICBjb25zdCBxdWVzdGlvbnMgPSB0aGlzLl9xdWVzdGlvbnMubWFwKChxKSA9PiBxLnRvSnNvbigpKTtcbiAgICBjb25zdCBtYWluVGV4dCA9IHRoaXMubWFpblRleHQudG9Kc29uKCk7XG4gICAgY29uc3QgbmV4dEJ1dHRvbiA9IHRoaXMubmV4dEJ1dHRvbi50b0pzb24oKTtcbiAgICBjb25zdCBtYWluTWVkaWEgPSB0aGlzLm1haW5NZWRpYTtcbiAgICBjb25zdCBkdG86IEJ1aWxkZXJQYWdlRHRvID0ge1xuICAgICAgX3R5cGU6IHRoaXMucGFnZVR5cGUsXG4gICAgICBtYWluVGV4dCxcbiAgICAgIGF1dG9wbGF5U2VxdWVuY2U6IFtdLFxuICAgICAgbmV4dEJ1dHRvbixcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgdGFnczogWy4uLnRoaXMudGFnc10sXG4gICAgICBwcmVmaXg6IHRoaXMuX3ByZWZpeC52YWx1ZSxcbiAgICAgIGRlZmF1bHRRdWVzdGlvbjogdGhpcy5kZWZhdWx0UXVlc3Rpb24udG9Kc29uKCksXG4gICAgICBxdWVzdGlvbnMsXG4gICAgfTtcbiAgICBpZiAobWFpbk1lZGlhKSB7XG4gICAgICBkdG8ubWFpbk1lZGlhID0gbWFpbk1lZGlhO1xuICAgIH1cbiAgICByZXR1cm4gZHRvO1xuICB9XG5cbiAgY2xvbmUoKTogQnVpbGRlclBhZ2VEdG8ge1xuICAgIGNvbnN0IGR0byA9IHRoaXMudG9Kc29uKCk7XG4gICAgY29uc3QgZGVmYXVsdFF1ZXN0aW9uQ2xvbmUgPSB0aGlzLmRlZmF1bHRRdWVzdGlvbi5jbG9uZSgpO1xuICAgIGNvbnN0IG1haW5UZXh0Q2xvbmUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMubWFpblRleHQpKTtcbiAgICAvLyBjb25zdCBwYWdlc0Nsb25lID0gdGhpc1xuICAgIGNvbnN0IHF1ZXN0aW9uc0Nsb25lID0gdGhpcy5xdWVzdGlvbnMubWFwKChxKSA9PiBxLmNsb25lKCkpO1xuICAgIGNvbnN0IG5ld0lkID0gUGFnZUlELmNyZWF0ZSgpO1xuICAgIGNvbnN0IGNsb25lOiBCdWlsZGVyUGFnZUR0byA9IHtcbiAgICAgIC4uLmR0byxcbiAgICAgIGlkOiBuZXdJZCxcbiAgICAgIGRlZmF1bHRRdWVzdGlvbjogZGVmYXVsdFF1ZXN0aW9uQ2xvbmUsXG4gICAgICBtYWluVGV4dDogbWFpblRleHRDbG9uZSxcbiAgICAgIHF1ZXN0aW9uczogcXVlc3Rpb25zQ2xvbmUsXG4gICAgfTtcbiAgICAvLyBjb25zdCBjbG9uZUR0b1xuICAgIHJldHVybiBjbG9uZTtcbiAgfVxuXG4gIGdldCBiYWNrZ3JvdW5kQ29sb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JhY2tncm91bmRDb2xvcjtcbiAgfVxuXG4gIHNldCBiYWNrZ3JvdW5kQ29sb3IoY29sb3I6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgY29sb3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuX2JhY2tncm91bmRDb2xvciA9IGNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIGdldCBxdWVzdGlvbnMoKTogUmVhZG9ubHlBcnJheTxCdWlsZGVyUXVlc3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcXVlc3Rpb25zO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlUmFuZG9tUHJlZml4IH0gZnJvbSBcIi4vcGFnZS1wcmVmaXhcIjtcblxuZXhwb3J0IHR5cGUgU2NoZW1hUHJlZml4VmFsdWUgPSBzdHJpbmcgJiB7IF9fU0NIRU1BX1BSRUZJWF9fOiB0cnVlIH07XG5cbmV4cG9ydCBjbGFzcyBTY2hlbWFQcmVmaXgge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1JTl9MRU5HVEggPSAxO1xuICBwcml2YXRlIHN0YXRpYyByYW5kb21MZW4gPSA1O1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BWF9MRU5HVEggPSAxNjtcblxuICBwdWJsaWMgc3RhdGljIGZyb21WYWx1ZSA9ICh2YWx1ZTogU2NoZW1hUHJlZml4VmFsdWUpOiBTY2hlbWFQcmVmaXggPT4ge1xuICAgIHJldHVybiBuZXcgU2NoZW1hUHJlZml4KHZhbHVlKTtcbiAgfTtcblxuICBwdWJsaWMgc3RhdGljIGZyb21WYWx1ZU9yVGhyb3cgPSAodmFsdWU6IHN0cmluZyk6IFNjaGVtYVByZWZpeCA9PiB7XG4gICAgaWYgKCFTY2hlbWFQcmVmaXguaXNWYWxpZCh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcHJlZml4XCIpO1xuICAgIHJldHVybiBuZXcgU2NoZW1hUHJlZml4KHZhbHVlKTtcbiAgfTtcbiAgcHVibGljIHN0YXRpYyBmcm9tU3RyaW5nID0gKHZhbHVlOiBzdHJpbmcpOiBTY2hlbWFQcmVmaXggfCBmYWxzZSA9PiB7XG4gICAgaWYgKCFTY2hlbWFQcmVmaXguaXNWYWxpZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gbmV3IFNjaGVtYVByZWZpeCh2YWx1ZSk7XG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgY2FzdE9yQ3JlYXRlUmFuZG9tID0gKHZhbHVlOiBzdHJpbmcpOiBTY2hlbWFQcmVmaXggPT4ge1xuICAgIGNvbnN0IHYgPSBTY2hlbWFQcmVmaXguaXNWYWxpZCh2YWx1ZSkgPyB2YWx1ZSA6IGNyZWF0ZVJhbmRvbVByZWZpeDxTY2hlbWFQcmVmaXhWYWx1ZT4oU2NoZW1hUHJlZml4LnJhbmRvbUxlbik7XG4gICAgcmV0dXJuIG5ldyBTY2hlbWFQcmVmaXgodik7XG4gIH07XG5cbiAgcHVibGljIHN0YXRpYyBpc1ZhbGlkID0gKHByZWZpeDogc3RyaW5nIHwgOTk5KTogcHJlZml4IGlzIFNjaGVtYVByZWZpeFZhbHVlID0+IHtcbiAgICBpZiAodHlwZW9mIHByZWZpeCAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChwcmVmaXgubGVuZ3RoIDwgU2NoZW1hUHJlZml4Lk1JTl9MRU5HVEgpIHJldHVybiBmYWxzZTtcbiAgICBpZiAocHJlZml4Lmxlbmd0aCA+IFNjaGVtYVByZWZpeC5NQVhfTEVOR1RIKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgdG9KU09OKCkge31cblxuICBnZXQgdmFsdWUoKTogU2NoZW1hUHJlZml4VmFsdWUge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHJldHVybiBTY2hlbWFQcmVmaXguaXNWYWxpZCh0aGlzLl92YWx1ZSk7XG4gIH1cblxuICBzZXQgdmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIGNvbnN0IGNhc3RlZCA9IHZhbHVlIGFzIHVua25vd247XG4gICAgaWYgKHR5cGVvZiBjYXN0ZWQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gY2FzdGVkIGFzIFNjaGVtYVByZWZpeFZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IocHJpdmF0ZSBfdmFsdWU6IFNjaGVtYVByZWZpeFZhbHVlKSB7fVxufVxuIiwgImltcG9ydCB7IFNjaGVtYVByZWZpeCB9IGZyb20gXCIuL3NjaGVtYS1wcmVmaXhcIjtcblxuZXhwb3J0IHR5cGUgUGFnZVByZWZpeFZhbHVlID0gc3RyaW5nICYgeyBfX1BBR0VfUFJFRklYX186IHRydWUgfTtcbmV4cG9ydCBjb25zdCBjcmVhdGVSYW5kb21QcmVmaXggPSA8Y29uc3QgUCBleHRlbmRzIHN0cmluZz4obGVuZ3RoOiBudW1iZXIpOiBQID0+IHtcbiAgY29uc3QgbGV0dGVycyA9IFwiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnl6XCI7XG4gIGNvbnN0IGFsbCA9IGxldHRlcnMgKyBsZXR0ZXJzLnRvVXBwZXJDYXNlKCk7XG4gIGxldCByZXN1bHQgPSBcIlwiO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hhciA9IGFsbC5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYWxsLmxlbmd0aCkpO1xuICAgIHJlc3VsdCArPSBjaGFyO1xuICB9XG4gIHJldHVybiByZXN1bHQgYXMgUDtcbn07XG5cbmV4cG9ydCBjbGFzcyBQYWdlUHJlZml4IHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNSU5fTEVOR1RIID0gMTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmFuZG9tTGVuID0gNTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNQVhfTEVOR1RIID0gMTY7XG5cbiAgcHVibGljIHN0YXRpYyBjcmVhdGUgPSAoKTogUGFnZVByZWZpeCA9PiB7XG4gICAgY29uc3QgdiA9IGNyZWF0ZVJhbmRvbVByZWZpeDxQYWdlUHJlZml4VmFsdWU+KFBhZ2VQcmVmaXgucmFuZG9tTGVuKTtcbiAgICByZXR1cm4gbmV3IFBhZ2VQcmVmaXgodik7XG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgZnJvbVN0cmluZyA9ICh2YWx1ZTogc3RyaW5nKTogUGFnZVByZWZpeCB8IGZhbHNlID0+IHtcbiAgICBpZiAoIVBhZ2VQcmVmaXguaXNWYWxpZCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gbmV3IFBhZ2VQcmVmaXgodmFsdWUpO1xuICB9O1xuXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVN0cmluZ09yVGhyb3cgPSAodmFsdWU6IHN0cmluZyk6IFBhZ2VQcmVmaXhWYWx1ZSA9PiB7XG4gICAgaWYgKCFQYWdlUHJlZml4LmlzVmFsaWQodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHByZWZpeFwiKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgY2FzdE9yQ3JlYXRlUmFuZG9tID0gKHZhbHVlOiBzdHJpbmcpOiBQYWdlUHJlZml4ID0+IHtcbiAgICBjb25zdCB2ID0gUGFnZVByZWZpeC5pc1ZhbGlkKHZhbHVlKSA/IHZhbHVlIDogY3JlYXRlUmFuZG9tUHJlZml4PFBhZ2VQcmVmaXhWYWx1ZT4oUGFnZVByZWZpeC5yYW5kb21MZW4pO1xuICAgIHJldHVybiBuZXcgUGFnZVByZWZpeCh2KTtcbiAgfTtcblxuICBwdWJsaWMgc3RhdGljIGlzVmFsaWQgPSAocHJlZml4OiBzdHJpbmcgfCA5OTkpOiBwcmVmaXggaXMgUGFnZVByZWZpeFZhbHVlID0+IHtcbiAgICBpZiAodHlwZW9mIHByZWZpeCAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChwcmVmaXgubGVuZ3RoIDwgU2NoZW1hUHJlZml4Lk1JTl9MRU5HVEgpIHJldHVybiBmYWxzZTtcbiAgICBpZiAocHJlZml4Lmxlbmd0aCA+IFNjaGVtYVByZWZpeC5NQVhfTEVOR1RIKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgZ2V0IHZhbHVlKCk6IFBhZ2VQcmVmaXhWYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoIVBhZ2VQcmVmaXguaXNWYWxpZCh2YWx1ZSkpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiSU5WQUxJRCBQUkVGSVhcIiwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IocHJpdmF0ZSBfdmFsdWU6IFBhZ2VQcmVmaXhWYWx1ZSkge31cbn1cbiIsICJpbXBvcnQgeyBQYWdlUHJlZml4VmFsdWUgfSBmcm9tIFwiLi9wYWdlLXByZWZpeFwiO1xuXG5pbXBvcnQgeyBTY2hlbWFQcmVmaXhWYWx1ZSB9IGZyb20gXCIuL3NjaGVtYS1wcmVmaXhcIjtcblxuZXhwb3J0IHR5cGUgVmFySUQgPSBgJHtTY2hlbWFQcmVmaXhWYWx1ZX1fJHtQYWdlUHJlZml4VmFsdWV9YDtcbmV4cG9ydCBjb25zdCBWYXJJRCA9IHtcbiAgY3JlYXRlOiAoc2NoZW1hUHJlZml4OiBTY2hlbWFQcmVmaXhWYWx1ZSwgcGFnZVByZWZpeDogUGFnZVByZWZpeFZhbHVlKTogVmFySUQgPT4ge1xuICAgIGNvbnN0IHZhcklkID0gc2NoZW1hUHJlZml4ICsgXCJfXCIgKyBwYWdlUHJlZml4O1xuICAgIHJldHVybiB2YXJJZCBhcyBWYXJJRDtcbiAgfSxcbn07XG4iLCAiaW1wb3J0IHsgQnVpbGRlclZhcmlhYmxlLCBCdWlsZGVyVmFyaWFibGVPcHRpb24gfSBmcm9tIFwiLi9SdWxlVmFyaWFibGVcIjtcbmltcG9ydCB7IEJ1aWxkZXJPcGVyYXRvciB9IGZyb20gXCIuL2NvbmRpdGlvbi9CdWlsZGVyLW9wZXJhdG9yXCI7XG5pbXBvcnQgeyBKdW1wVG9QYWdlQWN0aW9uIH0gZnJvbSBcIi4vUnVsZUFjdGlvblwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2luZ2xlU2VsZWN0SXRlbTxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlbGVjdExhYmVsO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b29sVGlwO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZWFyY2hTdHJpbmc7XG4gIGdldCBzZWxlY3RMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RMYWJlbDtcbiAgfVxuICBnZXQgdG9vbHRpcCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdG9vbFRpcDtcbiAgfVxuXG4gIGdldCBzZWFyY2hTdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaFN0cmluZztcbiAgfVxuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihyZWFkb25seSBkYXRhOiBUKSB7XG4gICAgdGhpcy5fc2VsZWN0TGFiZWwgPSB0aGlzLmdldFNlbGVjdExhYmVsKCk7XG4gICAgdGhpcy5fdG9vbFRpcCA9IHRoaXMuZ2V0VG9vbHRpcCgpO1xuICAgIHRoaXMuX3NlYXJjaFN0cmluZyA9IHRoaXMuZ2V0U2VhcmNoU3RyaW5nKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFNlbGVjdExhYmVsKCk6IHN0cmluZztcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFRvb2x0aXAoKTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0U2VhcmNoU3RyaW5nKCk6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFJ1bGVWYXJpYWJsZVNlbGVjdEl0ZW0gZXh0ZW5kcyBTaW5nbGVTZWxlY3RJdGVtPEJ1aWxkZXJWYXJpYWJsZT4ge1xuICBwdWJsaWMgc3RhdGljIGNyZWF0ZSA9IChkYXRhOiBCdWlsZGVyVmFyaWFibGUpID0+IHtcbiAgICByZXR1cm4gbmV3IFJ1bGVWYXJpYWJsZVNlbGVjdEl0ZW0oZGF0YSk7XG4gIH07XG4gIHJlYWRvbmx5IG9wdGlvbnM6IFJlYWRvbmx5QXJyYXk8UnVsZU9wdGlvblNlbGVjdEl0ZW0+O1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBkYXRhOiBCdWlsZGVyVmFyaWFibGUpIHtcbiAgICBzdXBlcihkYXRhKTtcbiAgICB0aGlzLm9wdGlvbnMgPSBkYXRhLm9wdGlvbnMubWFwKFJ1bGVPcHRpb25TZWxlY3RJdGVtLmNyZWF0ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U2VhcmNoU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS52YXJJZCArIHRoaXMuZGF0YS5sYWJlbDtcbiAgfVxuXG4gIGdldFNlbGVjdExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS52YXJJZDtcbiAgfVxuXG4gIGdldFRvb2x0aXAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmxhYmVsO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSdWxlT3B0aW9uU2VsZWN0SXRlbSBleHRlbmRzIFNpbmdsZVNlbGVjdEl0ZW08QnVpbGRlclZhcmlhYmxlT3B0aW9uPiB7XG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlID0gKG9wdGlvbjogQnVpbGRlclZhcmlhYmxlT3B0aW9uKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBSdWxlT3B0aW9uU2VsZWN0SXRlbShvcHRpb24pO1xuICB9O1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKG9wdGlvbjogQnVpbGRlclZhcmlhYmxlT3B0aW9uKSB7XG4gICAgc3VwZXIob3B0aW9uKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U2VhcmNoU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U2VsZWN0TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmxhYmVsICsgXCIoXCIgKyB0aGlzLmRhdGEudmFsdWUgKyBcIilcIjtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9wZXJhdG9yU2VsZWN0SXRlbSBleHRlbmRzIFNpbmdsZVNlbGVjdEl0ZW08QnVpbGRlck9wZXJhdG9yIHwgXCJcIj4ge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVRID0gbmV3IE9wZXJhdG9yU2VsZWN0SXRlbShcImVxdWFsXCIpO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PVF9FUSA9IG5ldyBPcGVyYXRvclNlbGVjdEl0ZW0oXCJub3RFcXVhbFwiKTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBmcm9tU3ltYm9sID0gKFxuICAgIHN5bWJvbDogQnVpbGRlck9wZXJhdG9yIHwgT21pdDxzdHJpbmcsIEJ1aWxkZXJPcGVyYXRvcj4sXG4gICk6IE9wZXJhdG9yU2VsZWN0SXRlbSB8IGZhbHNlID0+IHtcbiAgICBpZiAoc3ltYm9sID09PSBcImVxdWFsXCIpIHtcbiAgICAgIHJldHVybiBPcGVyYXRvclNlbGVjdEl0ZW0uRVE7XG4gICAgfVxuICAgIGlmIChzeW1ib2wgPT09IFwibm90RXF1YWxcIikge1xuICAgICAgcmV0dXJuIE9wZXJhdG9yU2VsZWN0SXRlbS5OT1RfRVE7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihvcGVyYXRvcjogQnVpbGRlck9wZXJhdG9yKSB7XG4gICAgc3VwZXIob3BlcmF0b3IpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNlYXJjaFN0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNlbGVjdExhYmVsKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgb3BlcmF0b3IgPSB0aGlzLmRhdGE7XG4gICAgaWYgKG9wZXJhdG9yID09PSBcImVxdWFsXCIpIHtcbiAgICAgIHJldHVybiBcIkVxdWFsc1wiO1xuICAgIH1cbiAgICBpZiAob3BlcmF0b3IgPT09IFwibm90RXF1YWxcIikge1xuICAgICAgcmV0dXJuIFwiTm90IGVxdWFsc1wiO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgb3BlcmF0b3IgPSB0aGlzLmRhdGE7XG4gICAgaWYgKG9wZXJhdG9yID09PSBcImVxdWFsXCIpIHtcbiAgICAgIHJldHVybiBcIkVxdWFsc1wiO1xuICAgIH1cbiAgICBpZiAob3BlcmF0b3IgPT09IFwibm90RXF1YWxcIikge1xuICAgICAgcmV0dXJuIFwiTm90IGVxdWFsc1wiO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSnVtcFRvUGFnZVNlbGVjdEl0ZW0gZXh0ZW5kcyBTaW5nbGVTZWxlY3RJdGVtPEp1bXBUb1BhZ2VBY3Rpb24+IHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBjcmVhdGUgPSAocGFnZURhdGE6IEp1bXBUb1BhZ2VBY3Rpb24pID0+IG5ldyBKdW1wVG9QYWdlU2VsZWN0SXRlbShwYWdlRGF0YSk7XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihwYWdlRGF0YTogSnVtcFRvUGFnZUFjdGlvbikge1xuICAgIHN1cGVyKHBhZ2VEYXRhKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTZWFyY2hTdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLnBhZ2VQcmVmaXggKyB0aGlzLmRhdGEubWFpblRleHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U2VsZWN0TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLnBhZ2VQcmVmaXggKyBcIiAoXCIgKyB0aGlzLmRhdGEucGFnZU51bWJlciArIFwiKVwiO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFRvb2x0aXAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLm1haW5UZXh0O1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBRdWVzdGlvblZhcmlhYmxlLCBDdXN0b21WYXJpYWJsZSwgQnVpbGRlclZhcmlhYmxlIH0gZnJvbSBcIi4vUnVsZVZhcmlhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEV4Y2x1ZGVCeVBhZ2VBY3Rpb24sIEV4Y2x1ZGVCeVRhZ0FjdGlvbiwgSnVtcFRvUGFnZUFjdGlvbiB9IGZyb20gXCIuL1J1bGVBY3Rpb25cIjtcbmltcG9ydCB7IEp1bXBUb1BhZ2VTZWxlY3RJdGVtIH0gZnJvbSBcIi4vU2luZ2xlU2VsZWN0SXRlbVwiO1xuXG4vKipcbiAqIFRPRE8gQ3JhdGUgZmlsdGVycyBmb3IgXCJjYXJkaW5hbGl0eVwiIG9yIFwib3JkZXJcIiBvZiBhIHZhcmlhYmxlO1xuICogUmV0dXJuIGxlZ2FsIGxpc3RzIG9mIHZhcmlhYmxlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFJ1bGVJbnB1dCB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3F1ZXN0aW9uVmFyaWFibGVzOiBSZWFkb25seUFycmF5PFF1ZXN0aW9uVmFyaWFibGU+LFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9jdXN0b21WYXJpYWJsZXM6IFJlYWRvbmx5QXJyYXk8Q3VzdG9tVmFyaWFibGU+LFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlSWRBY3Rpb25zOiBSZWFkb25seUFycmF5PEV4Y2x1ZGVCeVBhZ2VBY3Rpb24+LFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF90YWdBY3Rpb25zOiBSZWFkb25seUFycmF5PEV4Y2x1ZGVCeVRhZ0FjdGlvbj4sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2p1bXBBY3Rpb25zOiBSZWFkb25seUFycmF5PEp1bXBUb1BhZ2VBY3Rpb24+XG4gICAgKSB7fVxuXG4gICAgZ2V0IHF1ZXN0aW9uVmFycygpOiBSZWFkb25seUFycmF5PFF1ZXN0aW9uVmFyaWFibGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3F1ZXN0aW9uVmFyaWFibGVzO1xuICAgIH1cblxuICAgIGdldENvbmRpdGlvbklucHV0KCk6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclZhcmlhYmxlPiB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5xdWVzdGlvblZhcnMsIC4uLnRoaXMuY3VzdG9tVmFyc107XG4gICAgfVxuXG4gICAgZ2V0SnVtcFRvUGFnZU9wdGlvbnMoKTogUmVhZG9ubHlBcnJheTxKdW1wVG9QYWdlU2VsZWN0SXRlbT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fanVtcEFjdGlvbnMubWFwKEp1bXBUb1BhZ2VTZWxlY3RJdGVtLmNyZWF0ZSk7XG4gICAgfVxuXG4gICAgZ2V0IGN1c3RvbVZhcnMoKTogUmVhZG9ubHlBcnJheTxDdXN0b21WYXJpYWJsZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VzdG9tVmFyaWFibGVzO1xuICAgIH1cblxuICAgIGdldCBleGNsdWRlQnlQYWdlSWRBY3Rpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFnZUlkQWN0aW9ucztcbiAgICB9XG5cbiAgICBnZXQgZXhjbHVkZUJ5VGFnQWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhZ0FjdGlvbnM7XG4gICAgfVxuICAgIGdldCBqdW1wVG9QYWdlQWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2p1bXBBY3Rpb25zO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBCdWlsZGVyT2JqZWN0SWQsIEJ1aWxkZXJPYmplY3QgfSBmcm9tICcuL0J1aWxkZXJPYmplY3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJUYWdEdG8ge1xuICByZWFkb25seSBpZDogQnVpbGRlck9iamVjdElkLlRhZ0lkO1xuICByZWFkb25seSB0YWc6IHN0cmluZztcbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkZXJUYWcgZXh0ZW5kcyBCdWlsZGVyT2JqZWN0PCdidWlsZGVyLXRhZycsIEJ1aWxkZXJUYWdEdG8+IHtcbiAgcmVhZG9ubHkgb2JqZWN0VHlwZTogJ2J1aWxkZXItdGFnJyA9ICdidWlsZGVyLXRhZyc7XG4gIHJlYWRvbmx5IGlkOiBCdWlsZGVyT2JqZWN0SWQuVGFnSWQ7XG4gIHRhZ1RleHQgPSAnJztcbiAgdGFnRGVzY3JpcHRpb24gPSAnJztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNQVhfTEVOR1RIID0gMjA7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUlOX0xFTkdUSCA9IDE7XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBjcmVhdGUgPSAodGFnOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcgPSAnJykgPT4ge1xuICAgIGNvbnN0IGlkID0gQnVpbGRlck9iamVjdElkLmNyZWF0ZVRhZ0lkKCk7XG4gICAgY29uc3QgZHRvOiBCdWlsZGVyVGFnRHRvID0ge1xuICAgICAgaWQsXG4gICAgICB0YWcsXG4gICAgICBkZXNjcmlwdGlvblxuICAgIH07XG4gICAgcmV0dXJuIG5ldyBCdWlsZGVyVGFnKGR0byk7XG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZnJvbUR0byA9IChkdG86IEJ1aWxkZXJUYWdEdG8pID0+IHtcbiAgICByZXR1cm4gbmV3IEJ1aWxkZXJUYWcoZHRvKTtcbiAgfTtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGR0bzogQnVpbGRlclRhZ0R0bykge1xuICAgIGNvbnN0IGlkID0gZHRvLmlkID8/IEJ1aWxkZXJPYmplY3RJZC5jcmVhdGVUYWdJZCgpO1xuICAgIGNvbnN0IHdpdGhJZCA9IHsgLi4uZHRvLCBpZCB9O1xuICAgIHN1cGVyKHdpdGhJZCk7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMudGFnVGV4dCA9IGR0by50YWcgPz8gJyc7XG4gICAgdGhpcy50YWdEZXNjcmlwdGlvbiA9IGR0by5kZXNjcmlwdGlvbiA/PyAnJztcbiAgfVxuICBjbG9uZSgpOiBCdWlsZGVyVGFnRHRvIHtcbiAgICByZXR1cm4gdGhpcy50b0pzb24oKTtcbiAgfVxuXG4gIHRvSnNvbigpOiBCdWlsZGVyVGFnRHRvIHtcbiAgICByZXR1cm4geyB0YWc6IHRoaXMudGFnVGV4dCwgZGVzY3JpcHRpb246IHRoaXMudGFnRGVzY3JpcHRpb24sIGlkOiB0aGlzLmlkIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRhZ0NvbGxlY3Rpb24gaW1wbGVtZW50cyBJdGVyYWJsZTxCdWlsZGVyVGFnPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RhZ3MgPSBuZXcgU2V0PEJ1aWxkZXJUYWc+KCk7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgY3JlYXRlID0gKCkgPT4ge1xuICAgIHJldHVybiBuZXcgVGFnQ29sbGVjdGlvbihbXSk7XG4gIH07XG5cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgY29uc3QgbGlzdCA9IFsuLi50aGlzLl90YWdzXTtcbiAgICByZXR1cm4gbGlzdFtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIH1cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihpbml0aWFsVGFnczogUmVhZG9ubHlBcnJheTxCdWlsZGVyVGFnPikge1xuICAgIGluaXRpYWxUYWdzLmZvckVhY2godGFnID0+IHtcbiAgICAgIHRoaXMuX3RhZ3MuYWRkKHRhZyk7XG4gICAgfSk7XG4gIH1cblxuICBpbml0KHRhZ3M6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclRhZ0R0bz4pIHtcbiAgICBjb25zdCBkdG9MaXN0OiBSZWFkb25seUFycmF5PEJ1aWxkZXJUYWdEdG8+ID0gQXJyYXkuaXNBcnJheSh0YWdzKVxuICAgICAgPyB0YWdzXG4gICAgICA6IFtdO1xuICAgIGNvbnN0IGFsbCA9IGR0b0xpc3QubWFwKEJ1aWxkZXJUYWcuZnJvbUR0byk7XG4gICAgYWxsLmZvckVhY2godGFnID0+IHtcbiAgICAgIHRoaXMuX3RhZ3MuYWRkKHRhZyk7XG4gICAgfSk7XG4gIH1cblxuICBhZGQodGFnOiBCdWlsZGVyVGFnKSB7XG4gICAgdGhpcy5fdGFncy5hZGQodGFnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgdGhpcyB0YWcgZnJvbSBjb2xsZWN0aW9uO1xuICAgKiBAcGFyYW0gdGFnXG4gICAqL1xuICBkZWxldGUodGFnOiBCdWlsZGVyVGFnKSB7XG4gICAgdGhpcy5fdGFncy5kZWxldGUodGFnKTtcbiAgfVxuXG4gIHRvSnNvbigpOiBSZWFkb25seUFycmF5PEJ1aWxkZXJUYWdEdG8+IHtcbiAgICBjb25zdCBsaXN0ID0gWy4uLnRoaXMuX3RhZ3NdO1xuICAgIGNvbnN0IGR0b0xpc3QgPSBsaXN0Lm1hcCh0ID0+IHQudG9Kc29uKCkpO1xuICAgIHJldHVybiBkdG9MaXN0O1xuICB9XG5cbiAgZGVsZXRlQWxsKHRhZ3M6IEl0ZXJhYmxlPEJ1aWxkZXJUYWc+KSB7XG4gICAgY29uc3QgbCA9IHRhZ3NbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgIGNvbnN0IGFzTGlzdCA9IFsuLi50YWdzXTtcbiAgICBhc0xpc3QuZm9yRWFjaCh0ID0+IHtcbiAgICAgIHRoaXMuZGVsZXRlKHQpO1xuICAgIH0pO1xuICB9XG59XG4iLCAiY29uc3QgQnVpbGRlck9wZXJhdG9yU3ltYm9scyA9IHtcbiAgZXF1YWw6IHRydWUsXG4gIG5vdEVxdWFsOiB0cnVlLFxuICBsZXNzVGhhbjogdHJ1ZSxcbiAgbGVzc1RoYW5PckVxdWFsOiB0cnVlLFxuICBncmVhdGVyVGhhbjogdHJ1ZSxcbiAgZ3JlYXRlclRoYW5PckVxdWFsOiB0cnVlLFxuICBiZXR3ZWVuOiB0cnVlLFxuICBub3RCZXR3ZWVuOiB0cnVlLFxuICBpbjogdHJ1ZSxcbiAgbm90SW46IHRydWUsXG4gIG1pc3Npbmc6IHRydWUsXG4gIG5vdE1pc3Npbmc6IHRydWUsXG4gIGNvbnRhaW5zOiB0cnVlLFxuICBub3RDb250YWluczogdHJ1ZSxcbiAgZW1wdHk6IHRydWUsXG4gIG5vdEVtcHR5OiB0cnVlLFxuICBzdGFydHNXaXRoOiB0cnVlLFxuICBlbmRzV2l0aDogdHJ1ZSxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIEJ1aWxkZXJPcGVyYXRvciA9IGtleW9mIHR5cGVvZiBCdWlsZGVyT3BlcmF0b3JTeW1ib2xzO1xuXG5leHBvcnQgbmFtZXNwYWNlIEJ1aWxkZXJPcGVyYXRvciB7XG4gIGV4cG9ydCBjb25zdCBpcyA9IChzeW1ib2w/OiBzdHJpbmcpOiBzeW1ib2wgaXMgQnVpbGRlck9wZXJhdG9yID0+IHtcbiAgICBpZiAodHlwZW9mIHN5bWJvbCAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoQnVpbGRlck9wZXJhdG9yU3ltYm9scykuaW5jbHVkZXMoc3ltYm9sKTtcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBCdWlsZGVyT2JqZWN0IH0gZnJvbSBcIi4uLy4uL0J1aWxkZXJPYmplY3RcIjtcbmltcG9ydCB7IEJ1aWxkZXJPcGVyYXRvciB9IGZyb20gXCIuL0J1aWxkZXItb3BlcmF0b3JcIjtcbmltcG9ydCB0eXBlIHsgQnVpbGRlclZhcmlhYmxlLCBCdWlsZGVyVmFyaWFibGVPcHRpb24gfSBmcm9tIFwiLi4vUnVsZVZhcmlhYmxlXCI7XG5pbXBvcnQgeyBPcGVyYXRvclNlbGVjdEl0ZW0sIFJ1bGVPcHRpb25TZWxlY3RJdGVtLCBSdWxlVmFyaWFibGVTZWxlY3RJdGVtIH0gZnJvbSBcIi4uL1NpbmdsZVNlbGVjdEl0ZW1cIjtcbmltcG9ydCB7IENvbmRpdGlvbiB9IGZyb20gXCJAbWVkaWEtcXVlc3QvZW5naW5lXCI7XG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJDb25kaXRpb25EdG8ge1xuICByZWFkb25seSBraW5kOiBcImNvbmRpdGlvblwiO1xuICByZWFkb25seSBvcGVyYXRvcjogQnVpbGRlck9wZXJhdG9yIHwgXCJcIjtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSB2YXJpYWJsZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZhbHVlOiBudW1iZXIgfCBzdHJpbmcgfCBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgQnVpbGRlckNvbmRpdGlvbiBleHRlbmRzIEJ1aWxkZXJPYmplY3Q8XCJidWlsZGVyLWNvbmRpdGlvblwiLCBCdWlsZGVyQ29uZGl0aW9uRHRvPiB7XG4gIHJlYWRvbmx5IG9iamVjdFR5cGU6IFwiYnVpbGRlci1jb25kaXRpb25cIiA9IFwiYnVpbGRlci1jb25kaXRpb25cIjtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOVU1CRVJfT1BFUkFUT1JTOiBSZWFkb25seUFycmF5PE9wZXJhdG9yU2VsZWN0SXRlbT4gPSBbXG4gICAgT3BlcmF0b3JTZWxlY3RJdGVtLkVRLFxuICAgIE9wZXJhdG9yU2VsZWN0SXRlbS5OT1RfRVEsXG4gIF07XG5cbiAgcHJpdmF0ZSBpbml0aWFsRHRvOiBCdWlsZGVyQ29uZGl0aW9uRHRvO1xuICBuYW1lID0gXCJcIjtcblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZSA9ICh2YXJpYWJsZUxpc3Q6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclZhcmlhYmxlPikgPT4ge1xuICAgIGNvbnN0IGNvbmRpdGlvbiA9IG5ldyBCdWlsZGVyQ29uZGl0aW9uKFxuICAgICAge1xuICAgICAgICBraW5kOiBcImNvbmRpdGlvblwiLFxuICAgICAgICBuYW1lOiBcIlwiLFxuICAgICAgICBvcGVyYXRvcjogXCJcIixcbiAgICAgICAgdmFyaWFibGVJZDogXCJcIixcbiAgICAgICAgdmFsdWU6IFwiXCIsXG4gICAgICB9LFxuICAgICAgdmFyaWFibGVMaXN0LFxuICAgICk7XG4gICAgcmV0dXJuIGNvbmRpdGlvbjtcbiAgfTtcblxuICBwdWJsaWMgc3RhdGljIGZyb21EdG8gPSAoZHRvOiBCdWlsZGVyQ29uZGl0aW9uRHRvLCB2YXJpYWJsZXM6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclZhcmlhYmxlPikgPT4ge1xuICAgIGNvbnN0IF9kdG86IEJ1aWxkZXJDb25kaXRpb25EdG8gPSB7XG4gICAgICBraW5kOiBcImNvbmRpdGlvblwiLFxuICAgICAgbmFtZTogZHRvLm5hbWUgPz8gXCJcIixcbiAgICAgIHZhbHVlOiBkdG8udmFsdWUgPz8gXCJcIixcbiAgICAgIG9wZXJhdG9yOiBkdG8ub3BlcmF0b3IgPz8gXCJcIixcbiAgICAgIHZhcmlhYmxlSWQ6IGR0by52YXJpYWJsZUlkID8/IFwiXCIsXG4gICAgfTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBCdWlsZGVyQ29uZGl0aW9uKF9kdG8sIHZhcmlhYmxlcyk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xuICBwcml2YXRlIF92YXJpYWJsZTogQnVpbGRlclZhcmlhYmxlIHwgZmFsc2UgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfb3BlcmF0b3I6IEJ1aWxkZXJPcGVyYXRvciB8IFwiXCIgPSBcIlwiO1xuICBwcml2YXRlIF92YWx1ZTogQnVpbGRlclZhcmlhYmxlT3B0aW9uIHwgZmFsc2UgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfdmFyaWFibGVMaXN0OiBSZWFkb25seUFycmF5PEJ1aWxkZXJWYXJpYWJsZT4gPSBbXTtcblxuICAvKipcbiAgICogQ2FuIG9ubHkgc2V0IHZhcmlhYmxlcyB0aGF0IGV4aXN0IGluIHZhcmlhYmxlTGlzdC5cbiAgICogQHBhcmFtIHZhcmlhYmxlXG4gICAqL1xuICBzZXQgdmFyaWFibGUodmFyaWFibGU6IEJ1aWxkZXJWYXJpYWJsZSB8IGZhbHNlKSB7XG4gICAgaWYgKHZhcmlhYmxlID09PSB0aGlzLl92YXJpYWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl92YXJpYWJsZSA9IHZhcmlhYmxlO1xuICAgIHRoaXMuX29wZXJhdG9yID0gXCJcIjtcbiAgICB0aGlzLl92YWx1ZSA9IGZhbHNlO1xuICB9XG5cbiAgZ2V0IHZhcmlhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLl92YXJpYWJsZTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2YXJpYWJsZVZhbHVlOiBCdWlsZGVyVmFyaWFibGVPcHRpb24gfCBmYWxzZSkge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFyaWFibGVWYWx1ZTtcbiAgfVxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgdmFsaWRhdGUoKTogeyBpc1ZhbGlkOiB0cnVlIH0gfCB7IGlzVmFsaWQ6IGZhbHNlOyBtZXNzYWdlOiBzdHJpbmcgfSB7XG4gICAgaWYgKHRoaXMuX3ZhcmlhYmxlTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBcIkhhcyBubyB2YXJpYWJsZUxpc3QgdG8gY2hlY2sgZHRvIGFnYWluc3QuXCIsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3ZhcmlhYmxlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogXCJWYXJpYWJsZSBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgZnJvbSB2YXJpYWJsZUxpc3QuXCIsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fb3BlcmF0b3IpIHtcbiAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBtZXNzYWdlOiBcIk9wZXJhdG9yIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZFwiIH07XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl92YWx1ZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IFwiVmFsdWUgKEJ1aWxkZXJWYXJpYWJsZU9wdGlvbikgaXMgbm90IGluaXRpYWxpemVkXCIsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUgfTtcbiAgfVxuXG4gIHRvRW5naW5lQ29uZGl0aW9uKCk6IENvbmRpdGlvbi5TaW1wbGUgfCBmYWxzZSB7XG4gICAgY29uc3QgdmFsID0gdGhpcy52YWx1ZTtcbiAgICBjb25zdCBvcCA9IHRoaXMuX29wZXJhdG9yO1xuICAgIGNvbnN0IHYgPSB0aGlzLl92YXJpYWJsZTtcbiAgICBpZiAoIXZhbCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghb3ApIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIXYpIHJldHVybiBmYWxzZTtcbiAgICBpZiAob3AgPT09IFwiZXF1YWxcIikge1xuICAgICAgY29uc3QgZW5naW5lQ29uZGl0aW9uOiBDb25kaXRpb24uU2ltcGxlID0ge1xuICAgICAgICBraW5kOiBcIm51bWVyaWMtY29uZGl0aW9uXCIsXG4gICAgICAgIHZhbHVlOiB2YWwudmFsdWUsXG4gICAgICAgIHZhbHVlTGFiZWw6IHZhbC5sYWJlbCxcbiAgICAgICAgcmVmZXJlbmNlSWQ6IHYudmFySWQsXG4gICAgICAgIHJlZmVyZW5jZUxhYmVsOiB2LmxhYmVsLFxuICAgICAgICBvcGVyYXRvcjogXCJlcVwiLFxuICAgICAgfTtcbiAgICAgIHJldHVybiBlbmdpbmVDb25kaXRpb247XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZFZhcmlhYmxlSW5Vbml2ZXJzZSh2YXJpYWJsZUlkOiBzdHJpbmcpOiBCdWlsZGVyVmFyaWFibGUgfCBmYWxzZSB7XG4gICAgY29uc3QgdiA9IHRoaXMuX3ZhcmlhYmxlTGlzdC5maW5kKCh2KSA9PiB2LnZhcklkID09PSB2YXJpYWJsZUlkKTtcbiAgICByZXR1cm4gdiA/PyBmYWxzZTtcbiAgfVxuXG4gIHNldCBvcGVyYXRvcihvcGVyYXRvcjogQnVpbGRlck9wZXJhdG9yIHwgXCJcIikge1xuICAgIGlmIChCdWlsZGVyT3BlcmF0b3IuaXMob3BlcmF0b3IpKSB7XG4gICAgICB0aGlzLl9vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vcGVyYXRvciA9IFwiXCI7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG9wZXJhdG9yKCkge1xuICAgIHJldHVybiB0aGlzLl9vcGVyYXRvcjtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoZHRvOiBCdWlsZGVyQ29uZGl0aW9uRHRvLCB2YXJpYWJsZXM6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclZhcmlhYmxlPikge1xuICAgIHN1cGVyKGR0byk7XG4gICAgdGhpcy5pbml0aWFsRHRvID0gZHRvO1xuICAgIHRoaXMubmFtZSA9IGR0by5uYW1lO1xuICAgIHRoaXMuX3NldFZhcmlhYmxlTGlzdCh2YXJpYWJsZXMpO1xuICB9XG5cbiAgZ2V0IHZhcmlhYmxlU2VsZWN0SXRlbXNJblVuaXZlcnNlKCk6IFJlYWRvbmx5QXJyYXk8UnVsZVZhcmlhYmxlU2VsZWN0SXRlbT4ge1xuICAgIHJldHVybiB0aGlzLl92YXJpYWJsZUxpc3QubWFwKFJ1bGVWYXJpYWJsZVNlbGVjdEl0ZW0uY3JlYXRlKTtcbiAgfVxuXG4gIGdldCBvcGVyYXRvcnNTZWxlY3RJdGVtcygpOiBSZWFkb25seUFycmF5PE9wZXJhdG9yU2VsZWN0SXRlbT4ge1xuICAgIHJldHVybiB0aGlzLl92YXJpYWJsZSA/IEJ1aWxkZXJDb25kaXRpb24uTlVNQkVSX09QRVJBVE9SUyA6IFtdO1xuICB9XG5cbiAgZ2V0IHNlbGVjdFZhbHVlSXRlbXMoKTogUmVhZG9ubHlBcnJheTxSdWxlT3B0aW9uU2VsZWN0SXRlbT4ge1xuICAgIGlmICghdGhpcy5fdmFyaWFibGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3Qgb3B0ID0gdGhpcy5fdmFyaWFibGUub3B0aW9ucy5tYXAoUnVsZU9wdGlvblNlbGVjdEl0ZW0uY3JlYXRlKTtcbiAgICByZXR1cm4gb3B0O1xuICB9XG5cbiAgY2xvbmUoKTogQnVpbGRlckNvbmRpdGlvbkR0byB7XG4gICAgcmV0dXJuIHRoaXMudG9Kc29uKCk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRWYXJpYWJsZUxpc3QodmFyaWFibGVzOiBSZWFkb25seUFycmF5PEJ1aWxkZXJWYXJpYWJsZT4pOiBib29sZWFuIHtcbiAgICB0aGlzLl92YXJpYWJsZUxpc3QgPSB2YXJpYWJsZXM7XG4gICAgY29uc3QgdiA9IHRoaXMuX3ZhcmlhYmxlTGlzdC5maW5kKCh2KSA9PiB2LnZhcklkID09PSB0aGlzLm9yaWdpbmFsRHRvLnZhcmlhYmxlSWQpO1xuICAgIGlmICghdikge1xuICAgICAgdGhpcy5fdmFyaWFibGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX29wZXJhdG9yID0gXCJcIjtcbiAgICAgIHRoaXMuX3ZhbHVlID0gZmFsc2U7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuX3ZhcmlhYmxlID0gdjtcbiAgICBjb25zdCBvcCA9IHRoaXMub3JpZ2luYWxEdG8ub3BlcmF0b3I7XG5cbiAgICBpZiAoIUJ1aWxkZXJPcGVyYXRvci5pcyhvcCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5fb3BlcmF0b3IgPSBvcDtcbiAgICBjb25zdCBtYXliZU9wdGlvbiA9IHYub3B0aW9ucy5maW5kKChvcCkgPT4gb3AudmFsdWUgPT09IHRoaXMub3JpZ2luYWxEdG8udmFsdWUpO1xuICAgIGlmICghbWF5YmVPcHRpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5fdmFsdWUgPSBtYXliZU9wdGlvbjtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHRvSnNvbigpOiBCdWlsZGVyQ29uZGl0aW9uRHRvIHtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5uYW1lO1xuICAgIGNvbnN0IHZhcmlhYmxlSWQgPSB0aGlzLl92YXJpYWJsZSA/IHRoaXMuX3ZhcmlhYmxlLnZhcklkIDogXCJcIjtcbiAgICBjb25zdCBvcGVyYXRvciA9IHRoaXMuX29wZXJhdG9yID8gdGhpcy5fb3BlcmF0b3IgOiBcIlwiO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fdmFsdWUgPyB0aGlzLl92YWx1ZS52YWx1ZSA6IFwiXCI7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtpbmQ6IFwiY29uZGl0aW9uXCIsXG4gICAgICBuYW1lLFxuICAgICAgb3BlcmF0b3IsXG4gICAgICB2YXJpYWJsZUlkLFxuICAgICAgdmFsdWUsXG4gICAgfTtcbiAgfVxufVxuIiwgImltcG9ydCB7IEJ1aWxkZXJDb25kaXRpb24sIHR5cGUgQnVpbGRlckNvbmRpdGlvbkR0byB9IGZyb20gXCIuL0J1aWxkZXItY29uZGl0aW9uXCI7XG5pbXBvcnQgeyBCdWlsZGVyT2JqZWN0IH0gZnJvbSBcIi4uLy4uL0J1aWxkZXJPYmplY3RcIjtcbmltcG9ydCB0eXBlIHsgQnVpbGRlclZhcmlhYmxlIH0gZnJvbSBcIi4uL1J1bGVWYXJpYWJsZVwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcblxuY29uc3QgQ29uZGl0aW9uR3JvdXBUeXBlID0ge1xuICBhbGw6IHRydWUsXG4gIGFueTogdHJ1ZSxcbiAgY291bnQ6IHRydWUsXG59O1xuXG5leHBvcnQgdHlwZSBDb25kaXRpb25Hcm91cFR5cGUgPSBrZXlvZiB0eXBlb2YgQ29uZGl0aW9uR3JvdXBUeXBlO1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZGVyQ29uZGl0aW9uR3JvdXBEdG8ge1xuICByZWFkb25seSBraW5kOiBcImNvbmRpdGlvbi1ncm91cFwiO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvdW50PzogbnVtYmVyO1xuICByZWFkb25seSB0eXBlOiBDb25kaXRpb25Hcm91cFR5cGU7XG4gIHJlYWRvbmx5IGNvbmRpdGlvbnM6IFJlYWRvbmx5QXJyYXk8QnVpbGRlckNvbmRpdGlvbkR0bz47XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZGVyQ29uZGl0aW9uR3JvdXAgZXh0ZW5kcyBCdWlsZGVyT2JqZWN0PFwiYnVpbGRlci1jb25kaXRpb24tZ3JvdXBcIiwgQnVpbGRlckNvbmRpdGlvbkdyb3VwRHRvPiB7XG4gIHN0YXRpYyByZWFkb25seSBpc0NvbmRpdGlvbkdyb3VwVHlwZSA9ICh2YWx1ZTogc3RyaW5nIHwgc3ltYm9sKTogdmFsdWUgaXMgQ29uZGl0aW9uR3JvdXBUeXBlID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkVmFsdWVzID0gT2JqZWN0LmtleXMoQ29uZGl0aW9uR3JvdXBUeXBlKTtcbiAgICByZXR1cm4gdmFsaWRWYWx1ZXMuaW5jbHVkZXModmFsdWUpO1xuICB9O1xuXG4gIHJlYWRvbmx5IG9iamVjdFR5cGU6IFwiYnVpbGRlci1jb25kaXRpb24tZ3JvdXBcIiA9IFwiYnVpbGRlci1jb25kaXRpb24tZ3JvdXBcIjtcbiAgcHJpdmF0ZSBfdHlwZTogQ29uZGl0aW9uR3JvdXBUeXBlO1xuICBuYW1lID0gXCJcIjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29uZGl0aW9uczogQXJyYXk8QnVpbGRlckNvbmRpdGlvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZhcmlhYmxlTGlzdDogUmVhZG9ubHlBcnJheTxCdWlsZGVyVmFyaWFibGU+O1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZnJvbUR0byA9IChkdG86IEJ1aWxkZXJDb25kaXRpb25Hcm91cER0bywgdmFyaWFibGVMaXN0OiBSZWFkb25seUFycmF5PEJ1aWxkZXJWYXJpYWJsZT4pID0+IHtcbiAgICByZXR1cm4gbmV3IEJ1aWxkZXJDb25kaXRpb25Hcm91cChkdG8sIHZhcmlhYmxlTGlzdCk7XG4gIH07XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihkdG86IEJ1aWxkZXJDb25kaXRpb25Hcm91cER0bywgdmFyaWFibGVMaXN0OiBSZWFkb25seUFycmF5PEJ1aWxkZXJWYXJpYWJsZT4pIHtcbiAgICBzdXBlcihkdG8pO1xuICAgIHRoaXMubmFtZSA9IGR0by5uYW1lO1xuICAgIHRoaXMuX3R5cGUgPSBkdG8udHlwZTtcbiAgICBjb25zdCBjb25kaXRpb25MaXN0ID0gQXJyYXkuaXNBcnJheShkdG8uY29uZGl0aW9ucykgPyBkdG8uY29uZGl0aW9ucyA6IFtdO1xuICAgIHRoaXMuX2NvbmRpdGlvbnMgPSBjb25kaXRpb25MaXN0Lm1hcCgoZHRvKSA9PiBCdWlsZGVyQ29uZGl0aW9uLmZyb21EdG8oZHRvLCB2YXJpYWJsZUxpc3QpKTtcbiAgICB0aGlzLl92YXJpYWJsZUxpc3QgPSB2YXJpYWJsZUxpc3Q7XG4gIH1cbiAgZ2V0IGNvbmRpdGlvbnMoKTogUmVhZG9ubHlBcnJheTxCdWlsZGVyQ29uZGl0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmRpdGlvbnM7XG4gIH1cblxuICBnZXQgY29uZGl0aW9uQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmRpdGlvbnMubGVuZ3RoO1xuICB9XG5cbiAgYWRkQ29uZGl0aW9uKCk6IEJ1aWxkZXJDb25kaXRpb24ge1xuICAgIGNvbnN0IG5ld0NvbmRpdGlvbnMgPSBCdWlsZGVyQ29uZGl0aW9uLmNyZWF0ZSh0aGlzLl92YXJpYWJsZUxpc3QpO1xuICAgIHRoaXMuX2NvbmRpdGlvbnMucHVzaChuZXdDb25kaXRpb25zKTtcbiAgICByZXR1cm4gbmV3Q29uZGl0aW9ucztcbiAgfVxuXG4gIHJlbW92ZUNvbmRpdGlvbihjb25kaXRpb246IEJ1aWxkZXJDb25kaXRpb24pOiBib29sZWFuIHtcbiAgICAvLyB0aGlzLl9jb25kaXRpb25zLlxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fY29uZGl0aW9ucy5pbmRleE9mKGNvbmRpdGlvbik7XG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLl9jb25kaXRpb25zLnNwbGljZShpbmRleCwgMSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjbG9uZSgpOiBCdWlsZGVyQ29uZGl0aW9uR3JvdXBEdG8ge1xuICAgIHJldHVybiB0aGlzLnRvSnNvbigpO1xuICB9XG5cbiAgdG9Kc29uKCk6IEJ1aWxkZXJDb25kaXRpb25Hcm91cER0byB7XG4gICAgY29uc3QgY29uZGl0aW9uczogUmVhZG9ubHlBcnJheTxCdWlsZGVyQ29uZGl0aW9uRHRvPiA9IFsuLi50aGlzLl9jb25kaXRpb25zLm1hcCgoYykgPT4gYy50b0pzb24oKSldO1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBjb25kaXRpb25zLFxuICAgICAgdHlwZTogdGhpcy5fdHlwZSxcbiAgICAgIGtpbmQ6IFwiY29uZGl0aW9uLWdyb3VwXCIsXG4gICAgfTtcbiAgfVxuXG4gIHRvRW5naW5lQ29uZGl0aW9uQ29tcGxleCgpOiBDb25kaXRpb24uQ29tcGxleCB8IGZhbHNlIHtcbiAgICBjb25zdCBjb21wOiBDb25kaXRpb24uQ29tcGxleCA9IHtcbiAgICAgIGtpbmQ6IFwiY29tcGxleC1jb25kaXRpb25cIixcbiAgICAgIGFsbDogW10sXG4gICAgICBzb21lOiBbXSxcbiAgICAgIG5hbWU6IFwiXCIsXG4gICAgfTtcbiAgICBjb25zdCBjb25kaXRpb25zOiBDb25kaXRpb24uU2ltcGxlW10gPSBbXTtcbiAgICB0aGlzLmNvbmRpdGlvbnMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgY29uc3QgbWF5YmVTaW1wbGUgPSBjLnRvRW5naW5lQ29uZGl0aW9uKCk7XG4gICAgICBpZiAobWF5YmVTaW1wbGUpIHtcbiAgICAgICAgY29uZGl0aW9ucy5wdXNoKG1heWJlU2ltcGxlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAodGhpcy5fdHlwZSA9PT0gXCJhbGxcIikge1xuICAgICAgcmV0dXJuIHsgLi4uY29tcCwgYWxsOiBjb25kaXRpb25zIH07XG4gICAgfVxuICAgIGlmICh0aGlzLl90eXBlID09PSBcImFueVwiKSB7XG4gICAgICByZXR1cm4geyAuLi5jb21wLCBzb21lOiBjb25kaXRpb25zIH07XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coXCJJTlZBTElEIENPTVBMRVggQ09ORElUSU9OLiBUT0RPIElNUExFTUVOVCByYW5nZSwgYW5kIGNvdW50LlwiKTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBnZXQgdHlwZSgpOiBDb25kaXRpb25Hcm91cFR5cGUge1xuICAgIHJldHVybiB0aGlzLl90eXBlO1xuICB9XG4gIHNldCB0eXBlKGNvbmRpdGlvbkdyb3VwVHlwZTogQ29uZGl0aW9uR3JvdXBUeXBlKSB7XG4gICAgaWYgKEJ1aWxkZXJDb25kaXRpb25Hcm91cC5pc0NvbmRpdGlvbkdyb3VwVHlwZShjb25kaXRpb25Hcm91cFR5cGUpKSB7XG4gICAgICB0aGlzLl90eXBlID0gY29uZGl0aW9uR3JvdXBUeXBlO1xuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7IEV4Y2x1ZGVCeVBhZ2VBY3Rpb24sIEV4Y2x1ZGVCeVRhZ0FjdGlvbiB9IGZyb20gXCIuL1J1bGVBY3Rpb25cIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE11bHRpU2VsZWN0SXRlbTxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzU2VsZWN0ZWRJbml0aWFsbHk6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlbGVjdExhYmVsO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b29sVGlwO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZWFyY2hTdHJpbmc7XG4gIHB1YmxpYyBpc1NlbGVjdGVkOiBib29sZWFuO1xuICBnZXQgc2VsZWN0TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0TGFiZWw7XG4gIH1cbiAgZ2V0IHRvb2x0aXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rvb2xUaXA7XG4gIH1cblxuICBnZXQgc2VhcmNoU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWFyY2hTdHJpbmc7XG4gIH1cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IGRhdGE6IFQsXG4gICAgaXNTZWxlY3RlZDogYm9vbGVhbixcbiAgKSB7XG4gICAgdGhpcy5faXNTZWxlY3RlZEluaXRpYWxseSA9IGlzU2VsZWN0ZWQ7XG4gICAgdGhpcy5pc1NlbGVjdGVkID0gaXNTZWxlY3RlZDtcbiAgICB0aGlzLl9zZWFyY2hTdHJpbmcgPSB0aGlzLmdldFNlYXJjaFN0cmluZygpO1xuICAgIHRoaXMuX3Rvb2xUaXAgPSB0aGlzLmdldFRvb2x0aXAoKTtcbiAgICB0aGlzLl9zZWxlY3RMYWJlbCA9IHRoaXMuZ2V0U2VsZWN0TGFiZWwoKTtcbiAgfVxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0U2VsZWN0TGFiZWwoKTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0VG9vbHRpcCgpOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRTZWFyY2hTdHJpbmcoKTogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgRXhjbHVkZUJ5VGFnU2VsZWN0SXRlbSBleHRlbmRzIE11bHRpU2VsZWN0SXRlbTxFeGNsdWRlQnlUYWdBY3Rpb24+IHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBjcmVhdGUgPSAodGFnRGF0YTogRXhjbHVkZUJ5VGFnQWN0aW9uLCBpc1NlbGVjdGVkOiBib29sZWFuKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBFeGNsdWRlQnlUYWdTZWxlY3RJdGVtKHRhZ0RhdGEsIGlzU2VsZWN0ZWQpO1xuICB9O1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoZGF0YTogRXhjbHVkZUJ5VGFnQWN0aW9uLCBpc1NlbGVjdGVkOiBib29sZWFuKSB7XG4gICAgc3VwZXIoZGF0YSwgaXNTZWxlY3RlZCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFNlYXJjaFN0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEudGFnO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNlbGVjdExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS50YWcgKyBcIiAoXCIgKyB0aGlzLmRhdGEucGFnZUNvdW50ICsgXCIpXCI7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0VG9vbHRpcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEudGFnICsgXCIgICh1c2VkIGluIFwiICsgdGhpcy5kYXRhLnBhZ2VDb3VudCArIFwiIHBhZ2VzKVwiO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFeGNsdWRlQnlQYWdlSWRTZWxlY3RJdGVtIGV4dGVuZHMgTXVsdGlTZWxlY3RJdGVtPEV4Y2x1ZGVCeVBhZ2VBY3Rpb24+IHtcbiAgcHVibGljIHN0YXRpYyBjcmVhdGUgPSAocnVsZUFjdGlvblBhZ2U6IEV4Y2x1ZGVCeVBhZ2VBY3Rpb24sIGlzU2VsZWN0ZWQ6IGJvb2xlYW4pID0+IHtcbiAgICByZXR1cm4gbmV3IEV4Y2x1ZGVCeVBhZ2VJZFNlbGVjdEl0ZW0ocnVsZUFjdGlvblBhZ2UsIGlzU2VsZWN0ZWQpO1xuICB9O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihkYXRhOiBFeGNsdWRlQnlQYWdlQWN0aW9uLCBpc1NlbGVjdGVkOiBib29sZWFuKSB7XG4gICAgc3VwZXIoZGF0YSwgaXNTZWxlY3RlZCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFNlYXJjaFN0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEucGFnZVByZWZpeCArIHRoaXMuZGF0YS5tYWluVGV4dDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTZWxlY3RMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEucGFnZVByZWZpeCArIFwiIChcIiArIHRoaXMuZGF0YS5wYWdlTnVtYmVyICsgXCIpXCI7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0VG9vbHRpcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEubWFpblRleHQ7XG4gIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IFJ1bGVJbnB1dCB9IGZyb20gXCIuL1J1bGVJbnB1dFwiO1xuaW1wb3J0IHsgRXhjbHVkZUJ5VGFnU2VsZWN0SXRlbSB9IGZyb20gXCIuL211bHRpLXNlbGVjdC1pdGVtXCI7XG5pbXBvcnQgeyBFeGNsdWRlQnlUYWdBY3Rpb24gfSBmcm9tIFwiLi9SdWxlQWN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBUYWdBY3Rpb25NYW5hZ2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfaW5pdGlhbFNlbGVjdGlvbjogU2V0PHN0cmluZz47XG4gIHJlYWRvbmx5IHNlbGVjdEl0ZW1zOiBSZWFkb25seUFycmF5PEV4Y2x1ZGVCeVRhZ1NlbGVjdEl0ZW0+O1xuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSB2YWxpZE9wdGlvbnM6IFJ1bGVJbnB1dFtcIl90YWdBY3Rpb25zXCJdLFxuICAgIHJlYWRvbmx5IGluaXRpYWxTZWxlY3Rpb246IFJlYWRvbmx5QXJyYXk8c3RyaW5nPixcbiAgKSB7XG4gICAgdGhpcy5faW5pdGlhbFNlbGVjdGlvbiA9IG5ldyBTZXQoWy4uLmluaXRpYWxTZWxlY3Rpb25dKTtcbiAgICB0aGlzLnNlbGVjdEl0ZW1zID0gdmFsaWRPcHRpb25zLm1hcCgob3B0KSA9PiB7XG4gICAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5faW5pdGlhbFNlbGVjdGlvbi5oYXMob3B0LnRhZyk7XG4gICAgICByZXR1cm4gRXhjbHVkZUJ5VGFnU2VsZWN0SXRlbS5jcmVhdGUob3B0LCBpc1NlbGVjdGVkKTtcbiAgICB9KTtcbiAgfVxuICBnZXRDdXJyZW50U2VsZWN0aW9uKCk6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPiB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdEl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5pc1NlbGVjdGVkKS5tYXAoKGl0bSkgPT4gaXRtLmRhdGEudGFnKTtcbiAgICByZXR1cm4gc2VsZWN0ZWQ7XG4gIH1cblxuICBnZXRFbmdpbmVBY3Rpb25zKCk6IFJlYWRvbmx5QXJyYXk8RXhjbHVkZUJ5VGFnQWN0aW9uPiB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdEl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5pc1NlbGVjdGVkKTtcbiAgICBjb25zdCB0YWdBY3Rpb25zID0gc2VsZWN0ZWQubWFwKChzKSA9PiBzLmRhdGEpO1xuICAgIHJldHVybiBbLi4udGFnQWN0aW9uc107XG4gIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IFJ1bGVJbnB1dCB9IGZyb20gXCIuL1J1bGVJbnB1dFwiO1xuaW1wb3J0IHsgRXhjbHVkZUJ5UGFnZUlkU2VsZWN0SXRlbSB9IGZyb20gXCIuL211bHRpLXNlbGVjdC1pdGVtXCI7XG5pbXBvcnQgeyBFeGNsdWRlQnlQYWdlQWN0aW9uIH0gZnJvbSBcIi4vUnVsZUFjdGlvblwiO1xuaW1wb3J0IHsgUGFnZUlEIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcblxuZXhwb3J0IGNsYXNzIFBhZ2VBY3Rpb25NYW5hZ2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfaW5pdGlhbFNlbGVjdGlvbjogU2V0PHN0cmluZz47XG4gIHJlYWRvbmx5IHNlbGVjdEl0ZW1zOiBSZWFkb25seUFycmF5PEV4Y2x1ZGVCeVBhZ2VJZFNlbGVjdEl0ZW0+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IHZhbGlkT3B0aW9uczogUnVsZUlucHV0W1wiX3BhZ2VJZEFjdGlvbnNcIl0sXG4gICAgcmVhZG9ubHkgaW5pdGlhbFNlbGVjdGlvbjogUmVhZG9ubHlBcnJheTxzdHJpbmc+LFxuICApIHtcbiAgICB0aGlzLl9pbml0aWFsU2VsZWN0aW9uID0gbmV3IFNldChbLi4uaW5pdGlhbFNlbGVjdGlvbl0pO1xuICAgIHRoaXMuc2VsZWN0SXRlbXMgPSB2YWxpZE9wdGlvbnMubWFwKChvcHQpID0+IHtcbiAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLl9pbml0aWFsU2VsZWN0aW9uLmhhcyhvcHQucGFnZUlkKTtcbiAgICAgIHJldHVybiBFeGNsdWRlQnlQYWdlSWRTZWxlY3RJdGVtLmNyZWF0ZShvcHQsIGlzU2VsZWN0ZWQpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q3VycmVudFNlbGVjdGlvbigpOiBSZWFkb25seUFycmF5PFBhZ2VJRD4ge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RJdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaXNTZWxlY3RlZCkubWFwKChpdG0pID0+IGl0bS5kYXRhLnBhZ2VJZCk7XG4gICAgcmV0dXJuIHNlbGVjdGVkO1xuICB9XG5cbiAgZ2V0RW5naW5lQWN0aW9uKCk6IFJlYWRvbmx5QXJyYXk8RXhjbHVkZUJ5UGFnZUFjdGlvbj4ge1xuICAgIGNvbnN0IHNlbGVjdEl0ZW1zID0gdGhpcy5zZWxlY3RJdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaXNTZWxlY3RlZCk7XG4gICAgY29uc3QgYWN0aW9ucyA9IHNlbGVjdEl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5kYXRhKTtcbiAgICByZXR1cm4gWy4uLmFjdGlvbnNdO1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBSdWxlSW5wdXQgfSBmcm9tIFwiLi9SdWxlSW5wdXRcIjtcbmltcG9ydCB7IEp1bXBUb1BhZ2VTZWxlY3RJdGVtIH0gZnJvbSBcIi4vU2luZ2xlU2VsZWN0SXRlbVwiO1xuXG5leHBvcnQgY2xhc3MgSnVtcFRvQWN0aW9uTWFuYWdlciB7XG4gIHJlYWRvbmx5IG9wdGlvbnM6IFJlYWRvbmx5QXJyYXk8SnVtcFRvUGFnZVNlbGVjdEl0ZW0+O1xuICBwcml2YXRlIF9zZWxlY3RlZDogSnVtcFRvUGFnZVNlbGVjdEl0ZW0gfCBmYWxzZTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB2YWxpZE9wdGlvbnM6IFJ1bGVJbnB1dFtcIl9qdW1wQWN0aW9uc1wiXSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluaXRpYWxTZWxlY3Rpb246IHN0cmluZyB8IGZhbHNlIHwgdW5kZWZpbmVkLFxuICApIHtcbiAgICB0aGlzLm9wdGlvbnMgPSB2YWxpZE9wdGlvbnMubWFwKEp1bXBUb1BhZ2VTZWxlY3RJdGVtLmNyZWF0ZSk7XG4gICAgdGhpcy5fc2VsZWN0ZWQgPSB0aGlzLmZpbmRTZWxlY3RlZChpbml0aWFsU2VsZWN0aW9uKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWQoKTogSnVtcFRvUGFnZVNlbGVjdEl0ZW0gfCBmYWxzZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xuICB9XG4gIHNldCBzZWxlY3RlZChzZWxlY3RlZDogSnVtcFRvUGFnZVNlbGVjdEl0ZW0gfCBmYWxzZSkge1xuICAgIHRoaXMuX3NlbGVjdGVkID0gdGhpcy5maW5kU2VsZWN0ZWQoc2VsZWN0ZWQpO1xuICB9XG4gIGdldFNlbGVjdGVkUGFnZUlkKCk6IHN0cmluZyB8IGZhbHNlIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQgPyB0aGlzLl9zZWxlY3RlZC5kYXRhLnBhZ2VJZCA6IGZhbHNlO1xuICB9XG4gIHByaXZhdGUgZmluZFNlbGVjdGVkKHZhbHVlOiB1bmtub3duKTogSnVtcFRvUGFnZVNlbGVjdEl0ZW0gfCBmYWxzZSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEp1bXBUb1BhZ2VTZWxlY3RJdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbmQoKHYpID0+IHYgPT09IHZhbHVlKSB8fCBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5maW5kKCh2KSA9PiB2LmRhdGEucGFnZUlkID09PSB2YWx1ZSkgfHwgZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIiwgImltcG9ydCB7IEJ1aWxkZXJDb25kaXRpb24sIHR5cGUgQnVpbGRlckNvbmRpdGlvbkR0byB9IGZyb20gXCIuL2NvbmRpdGlvbi9CdWlsZGVyLWNvbmRpdGlvblwiO1xuaW1wb3J0IHtcbiAgQnVpbGRlckNvbmRpdGlvbkdyb3VwLFxuICB0eXBlIEJ1aWxkZXJDb25kaXRpb25Hcm91cER0byxcbiAgdHlwZSBDb25kaXRpb25Hcm91cFR5cGUsXG59IGZyb20gXCIuL2NvbmRpdGlvbi9CdWlsZGVyLWNvbmRpdGlvbi1ncm91cFwiO1xuaW1wb3J0IHR5cGUgeyBSdWxlSW5wdXQgfSBmcm9tIFwiLi9SdWxlSW5wdXRcIjtcbmltcG9ydCB7IEJ1aWxkZXJPYmplY3QgfSBmcm9tIFwiLi4vQnVpbGRlck9iamVjdFwiO1xuaW1wb3J0IHsgVGFnQWN0aW9uTWFuYWdlciB9IGZyb20gXCIuL3RhZy1hY3Rpb24tbWFuYWdlclwiO1xuaW1wb3J0IHsgUGFnZUFjdGlvbk1hbmFnZXIgfSBmcm9tIFwiLi9wYWdlLWFjdGlvbi1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBKdW1wVG9BY3Rpb25NYW5hZ2VyIH0gZnJvbSBcIi4vanVtcC10by1hY3Rpb24tbWFuYWdlclwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uLCBQYWdlSUQsIFBhZ2VRdWVDb21tYW5kLCBQYWdlUXVlUnVsZXMgfSBmcm9tIFwiQG1lZGlhLXF1ZXN0L2VuZ2luZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJSdWxlRHRvIHtcbiAgcmVhZG9ubHkgdHlwZTogQ29uZGl0aW9uR3JvdXBUeXBlO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbmRpdGlvbnM6IFJlYWRvbmx5QXJyYXk8QnVpbGRlckNvbmRpdGlvbkR0byB8IEJ1aWxkZXJDb25kaXRpb25Hcm91cER0bz47XG4gIHJlYWRvbmx5IGV4Y2x1ZGVUYWdzOiBSZWFkb25seUFycmF5PHN0cmluZz47XG4gIHJlYWRvbmx5IGV4Y2x1ZGVQYWdlczogUmVhZG9ubHlBcnJheTxQYWdlSUQ+O1xuICByZWFkb25seSBqdW1wVG9QYWdlOiBzdHJpbmcgfCBmYWxzZTtcbn1cbmV4cG9ydCBjbGFzcyBCdWlsZGVyUnVsZSBleHRlbmRzIEJ1aWxkZXJPYmplY3Q8XCJidWlsZGVyLXJ1bGVcIiwgQnVpbGRlclJ1bGVEdG8+IHtcbiAgcmVhZG9ubHkgb2JqZWN0VHlwZTogXCJidWlsZGVyLXJ1bGVcIiA9IFwiYnVpbGRlci1ydWxlXCI7XG4gIHByaXZhdGUgX3R5cGU6IENvbmRpdGlvbkdyb3VwVHlwZSA9IFwiYWxsXCI7XG4gIHB1YmxpYyBuYW1lID0gXCJSdWxlIG5hbWVcIjtcbiAgLy8gcHVibGljIGNvdW50TnVtYmVyID0gMTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29uZGl0aW9uczogQXJyYXk8QnVpbGRlckNvbmRpdGlvbiB8IEJ1aWxkZXJDb25kaXRpb25Hcm91cD4gPSBbXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF90YWdBY3Rpb25NYW5hZ2VyOiBUYWdBY3Rpb25NYW5hZ2VyO1xuICBwcml2YXRlIF9wYWdlQWN0aW9uTWFuYWdlcjogUGFnZUFjdGlvbk1hbmFnZXI7XG4gIHJlYWRvbmx5IGp1bXBUb0FjdGlvbk1hbmFnZXI6IEp1bXBUb0FjdGlvbk1hbmFnZXI7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZnJvbUR0byA9IChkdG86IEJ1aWxkZXJSdWxlRHRvLCBpbnB1dDogUnVsZUlucHV0KTogQnVpbGRlclJ1bGUgPT4ge1xuICAgIHJldHVybiBuZXcgQnVpbGRlclJ1bGUoZHRvLCBpbnB1dCk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZHRvOiBCdWlsZGVyUnVsZUR0byxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9ydWxlSW5wdXQ6IFJ1bGVJbnB1dCxcbiAgKSB7XG4gICAgc3VwZXIoZHRvKTtcbiAgICBjb25zdCBjb25kaXRpb25JbnB1dCA9IHRoaXMuX3J1bGVJbnB1dC5nZXRDb25kaXRpb25JbnB1dCgpO1xuICAgIHRoaXMubmFtZSA9IGR0by5uYW1lID8/IFwiXCI7XG4gICAgdGhpcy5fdHlwZSA9IGR0by50eXBlID8/IFwiYW55XCI7XG4gICAgdGhpcy5fY29uZGl0aW9ucyA9IGR0by5jb25kaXRpb25zLnJlZHVjZTxBcnJheTxCdWlsZGVyQ29uZGl0aW9uIHwgQnVpbGRlckNvbmRpdGlvbkdyb3VwPj4oKGFjYywgY3VycikgPT4ge1xuICAgICAgaWYgKGN1cnIua2luZCA9PT0gXCJjb25kaXRpb25cIikge1xuICAgICAgICBjb25zdCBjb25kaXRpb24gPSBCdWlsZGVyQ29uZGl0aW9uLmZyb21EdG8oY3VyciwgY29uZGl0aW9uSW5wdXQpO1xuICAgICAgICBhY2MucHVzaChjb25kaXRpb24pO1xuICAgICAgfVxuICAgICAgaWYgKGN1cnIua2luZCA9PT0gXCJjb25kaXRpb24tZ3JvdXBcIikge1xuICAgICAgICBjb25zdCBjb25kaXRpb25Hcm91cCA9IEJ1aWxkZXJDb25kaXRpb25Hcm91cC5mcm9tRHRvKGN1cnIsIGNvbmRpdGlvbklucHV0KTtcbiAgICAgICAgYWNjLnB1c2goY29uZGl0aW9uR3JvdXApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSk7XG4gICAgLy8gVE9ETyBDSEVDSyBXSVRIIENVUlJFTlQgT1BUSU9OUy5cbiAgICB0aGlzLl9wYWdlQWN0aW9uTWFuYWdlciA9IG5ldyBQYWdlQWN0aW9uTWFuYWdlcihfcnVsZUlucHV0LmV4Y2x1ZGVCeVBhZ2VJZEFjdGlvbnMsIGR0by5leGNsdWRlUGFnZXMpO1xuICAgIC8vIHRoaXMuZXhjbHVkZUJ5UGFnZUlkRHRvTGlzdC5wdXNoKC4uLmR0by5leGNsdWRlUGFnZXMpO1xuICAgIHRoaXMuX3RhZ0FjdGlvbk1hbmFnZXIgPSBuZXcgVGFnQWN0aW9uTWFuYWdlcihfcnVsZUlucHV0LmV4Y2x1ZGVCeVRhZ0FjdGlvbnMsIGR0by5leGNsdWRlVGFncyk7XG5cbiAgICB0aGlzLmp1bXBUb0FjdGlvbk1hbmFnZXIgPSBuZXcgSnVtcFRvQWN0aW9uTWFuYWdlcihfcnVsZUlucHV0Lmp1bXBUb1BhZ2VBY3Rpb25zLCBkdG8uanVtcFRvUGFnZSk7XG4gIH1cblxuICBnZXQgY29uZGl0aW9ucygpOiBSZWFkb25seUFycmF5PEJ1aWxkZXJDb25kaXRpb25Hcm91cCB8IEJ1aWxkZXJDb25kaXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fY29uZGl0aW9ucztcbiAgfVxuXG4gIGdldFRhZ0FjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RhZ0FjdGlvbk1hbmFnZXIuc2VsZWN0SXRlbXM7XG4gIH1cblxuICBnZXRWYWxpZFBhZ2VBY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl9wYWdlQWN0aW9uTWFuYWdlci5zZWxlY3RJdGVtcztcbiAgfVxuXG4gIGdldCBjb25kaXRpb25Db3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZGl0aW9ucy5sZW5ndGg7XG4gIH1cblxuICBzZXQgdHlwZSh0eXBlOiBDb25kaXRpb25Hcm91cFR5cGUpIHtcbiAgICBpZiAoQnVpbGRlckNvbmRpdGlvbkdyb3VwLmlzQ29uZGl0aW9uR3JvdXBUeXBlKHR5cGUpKSB7XG4gICAgICB0aGlzLl90eXBlID0gdHlwZTtcbiAgICB9XG4gIH1cblxuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxuXG4gIGRlbGV0ZUNvbmRpdGlvbihjb25kaXRpb246IEJ1aWxkZXJDb25kaXRpb24gfCBCdWlsZGVyQ29uZGl0aW9uR3JvdXApOiBib29sZWFuIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2NvbmRpdGlvbnMuaW5kZXhPZihjb25kaXRpb24pO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5fY29uZGl0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYWRkQ29uZGl0aW9uKCk6IEJ1aWxkZXJDb25kaXRpb24ge1xuICAgIGNvbnN0IGNvbmRpdGlvbiA9IEJ1aWxkZXJDb25kaXRpb24uY3JlYXRlKHRoaXMuX3J1bGVJbnB1dC5nZXRDb25kaXRpb25JbnB1dCgpKTtcbiAgICB0aGlzLl9jb25kaXRpb25zLnB1c2goY29uZGl0aW9uKTtcbiAgICByZXR1cm4gY29uZGl0aW9uO1xuICB9XG5cbiAgYWRkQ29uZGl0aW9uR3JvdXAoKTogQnVpbGRlckNvbmRpdGlvbkdyb3VwIHtcbiAgICBjb25zdCBkdG86IEJ1aWxkZXJDb25kaXRpb25Hcm91cER0byA9IHtcbiAgICAgIGtpbmQ6IFwiY29uZGl0aW9uLWdyb3VwXCIsXG4gICAgICBuYW1lOiBcIlwiLFxuICAgICAgdHlwZTogXCJhbGxcIixcbiAgICAgIGNvbmRpdGlvbnM6IFtdLFxuICAgIH07XG4gICAgY29uc3QgbmV3R3JvdXAgPSBCdWlsZGVyQ29uZGl0aW9uR3JvdXAuZnJvbUR0byhkdG8sIHRoaXMuX3J1bGVJbnB1dC5xdWVzdGlvblZhcnMpO1xuICAgIHRoaXMuX2NvbmRpdGlvbnMucHVzaChuZXdHcm91cCk7XG4gICAgcmV0dXJuIG5ld0dyb3VwO1xuICB9XG5cbiAgY2xvbmUoKTogQnVpbGRlclJ1bGVEdG8ge1xuICAgIHJldHVybiB0aGlzLnRvSnNvbigpO1xuICB9XG5cbiAgdG9Kc29uKCk6IEJ1aWxkZXJSdWxlRHRvIHtcbiAgICBjb25zdCBjb25kaXRpb25zID0gdGhpcy5fY29uZGl0aW9ucy5tYXAoKGMpID0+IGMudG9Kc29uKCkpO1xuICAgIGNvbnN0IGV4Y2x1ZGVQYWdlcyA9IHRoaXMuX3BhZ2VBY3Rpb25NYW5hZ2VyLmdldEN1cnJlbnRTZWxlY3Rpb24oKTtcbiAgICBjb25zdCBleGNsdWRlVGFncyA9IHRoaXMuX3RhZ0FjdGlvbk1hbmFnZXIuZ2V0Q3VycmVudFNlbGVjdGlvbigpO1xuICAgIGNvbnN0IGp1bXBUb1BhZ2UgPSB0aGlzLmp1bXBUb0FjdGlvbk1hbmFnZXIuZ2V0U2VsZWN0ZWRQYWdlSWQoKTtcbiAgICBjb25zdCBkdG86IEJ1aWxkZXJSdWxlRHRvID0ge1xuICAgICAgdHlwZTogdGhpcy5fdHlwZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIGNvbmRpdGlvbnMsXG4gICAgICBleGNsdWRlUGFnZXMsXG4gICAgICBqdW1wVG9QYWdlLFxuICAgICAgZXhjbHVkZVRhZ3MsXG4gICAgfTtcbiAgICByZXR1cm4gZHRvO1xuICB9XG4gIHRvRW5naW5lUnVsZSgpOiBQYWdlUXVlUnVsZXMge1xuICAgIGNvbnN0IGNvbmRpdGlvbnM6IENvbmRpdGlvbltdID0gW107XG4gICAgdGhpcy5fY29uZGl0aW9ucy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICBpZiAoYykge1xuICAgICAgICBpZiAoYyBpbnN0YW5jZW9mIEJ1aWxkZXJDb25kaXRpb24pIHtcbiAgICAgICAgICBjb25zdCBzaW1wbGVDb25kaXRpb24gPSBjLnRvRW5naW5lQ29uZGl0aW9uKCk7XG4gICAgICAgICAgaWYgKHNpbXBsZUNvbmRpdGlvbikge1xuICAgICAgICAgICAgY29uZGl0aW9ucy5wdXNoKHNpbXBsZUNvbmRpdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjIGluc3RhbmNlb2YgQnVpbGRlckNvbmRpdGlvbkdyb3VwKSB7XG4gICAgICAgICAgY29uc3QgY29tcGxleENvbmRpdGlvbiA9IGMudG9FbmdpbmVDb25kaXRpb25Db21wbGV4KCk7XG4gICAgICAgICAgaWYgKGNvbXBsZXhDb25kaXRpb24pIGNvbmRpdGlvbnMucHVzaChjb21wbGV4Q29uZGl0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGxldCBhbGw6IENvbmRpdGlvbltdID0gW107XG4gICAgbGV0IHNvbWU6IENvbmRpdGlvbltdID0gW107XG5cbiAgICBpZiAodGhpcy50eXBlID09PSBcImFsbFwiKSB7XG4gICAgICBhbGwgPSBbLi4uY29uZGl0aW9uc107XG4gICAgfVxuICAgIGNvbnN0IHBhZ2VRdWVDb21tYW5kczogQXJyYXk8UGFnZVF1ZUNvbW1hbmQ+ID0gW107XG4gICAgY29uc3QgbWF5YmVKdW1wVG9QYWdlID0gdGhpcy5qdW1wVG9BY3Rpb25NYW5hZ2VyLnNlbGVjdGVkO1xuICAgIGlmIChtYXliZUp1bXBUb1BhZ2UpIHtcbiAgICAgIGNvbnN0IGp1bXBDb21tYW5kOiBQYWdlUXVlQ29tbWFuZCA9IHtcbiAgICAgICAga2luZDogXCJQQUdFX1FVRV9KVU1QX1RPX1BBR0VfQ09NTUFORFwiLFxuICAgICAgICB0YXJnZXQ6IFwiUEFHRV9RVUVcIixcbiAgICAgICAgdGFyZ2V0SWQ6IFwiUEFHRV9RVUVcIixcbiAgICAgICAgcGF5bG9hZDogeyBwYWdlSWQ6IG1heWJlSnVtcFRvUGFnZS5kYXRhLnBhZ2VJZCB9LFxuICAgICAgfTtcbiAgICAgIHBhZ2VRdWVDb21tYW5kcy5wdXNoKGp1bXBDb21tYW5kKTtcbiAgICB9XG5cbiAgICBjb25zdCBleGNsdWRlUGFnZUJ5SWRMaXN0ID0gdGhpcy5fcGFnZUFjdGlvbk1hbmFnZXIuZ2V0RW5naW5lQWN0aW9uKCkubWFwKChhKSA9PiBhLnBhZ2VJZCk7XG4gICAgaWYgKGV4Y2x1ZGVQYWdlQnlJZExpc3QubGVuZ3RoKSB7XG4gICAgICBjb25zdCBjb21tYW5kOiBQYWdlUXVlQ29tbWFuZCA9IHtcbiAgICAgICAga2luZDogXCJQQUdFX1FVRV9FWENMVURFX0JZX1BBR0VfSURfQ09NTUFORFwiLFxuICAgICAgICB0YXJnZXQ6IFwiUEFHRV9RVUVcIixcbiAgICAgICAgdGFyZ2V0SWQ6IFwiUEFHRV9RVUVcIixcbiAgICAgICAgcGF5bG9hZDogeyBwYWdlSWRzOiBbLi4uZXhjbHVkZVBhZ2VCeUlkTGlzdF0gfSxcbiAgICAgIH07XG4gICAgICBwYWdlUXVlQ29tbWFuZHMucHVzaChjb21tYW5kKTtcbiAgICB9XG4gICAgY29uc3QgZXhjbHVkZVRhZ3MgPSB0aGlzLl90YWdBY3Rpb25NYW5hZ2VyLmdldEVuZ2luZUFjdGlvbnMoKS5tYXAoKHRhZ0EpID0+IHRhZ0EudGFnKTtcbiAgICBpZiAoZXhjbHVkZVRhZ3MubGVuZ3RoKSB7XG4gICAgICBjb25zdCBleGNsdWRlVGFnc0NvbW1hbmQ6IFBhZ2VRdWVDb21tYW5kID0ge1xuICAgICAgICBraW5kOiBcIlBBR0VfUVVFX0VYQ0xVREVfQllfVEFHX0NPTU1BTkRcIixcbiAgICAgICAgdGFyZ2V0OiBcIlBBR0VfUVVFXCIsXG4gICAgICAgIHRhcmdldElkOiBcIlBBR0VfUVVFXCIsXG4gICAgICAgIHBheWxvYWQ6IHsgdGFnSWRzOiBbLi4uZXhjbHVkZVRhZ3NdIH0sXG4gICAgICB9O1xuICAgICAgcGFnZVF1ZUNvbW1hbmRzLnB1c2goZXhjbHVkZVRhZ3NDb21tYW5kKTtcbiAgICB9XG5cbiAgICBjb25zdCBydWxlOiBQYWdlUXVlUnVsZXMgPSB7XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5uYW1lLFxuICAgICAgYWxsLFxuICAgICAgc29tZSxcbiAgICAgIG9uRmFpbHVyZTogW10sXG4gICAgICBvblN1Y2Nlc3M6IHBhZ2VRdWVDb21tYW5kcyxcbiAgICB9O1xuICAgIHJldHVybiBydWxlO1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBCdWlsZGVyU2NoZW1hRHRvIH0gZnJvbSBcIi4uL0J1aWxkZXItc2NoZW1hXCI7XG5pbXBvcnQgeyBTY2hlbWFEdG8gfSBmcm9tIFwiQG1lZGlhLXF1ZXN0L2VuZ2luZVwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RUaGVtZUNvbXBpbGVyPFRoZW1lU2NoZW1hPiB7XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgdGhlbWU6IFRoZW1lU2NoZW1hKSB7fVxuICBhYnN0cmFjdCBjb21waWxlKHNjaGVtYTogQnVpbGRlclNjaGVtYUR0byk6IFNjaGVtYUR0bztcbn1cbiIsICJpbXBvcnQgeyBEU3RhdGUsIEJvb2xlYW5TdGF0ZVByb3BlcnR5IH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcblxuZXhwb3J0IG5hbWVzcGFjZSBEU3RhdGVQcm9wcyB7XG4gIGV4cG9ydCBjb25zdCBtZWRpYUJsb2NrZWRCeVNlcXVlbmNlID0gbmV3IEJvb2xlYW5TdGF0ZVByb3BlcnR5KFxuICAgIFwibWVkaWEtYmxvY2tlZC1ieS1hdXRvcGxheS1zZXF1ZW5jZVwiLFxuICAgIGZhbHNlLFxuICAgIFwiU2hvdWxkIGJlIHRydWUgaWYgdGhlIHBhZ2UgaXMgaW4gYSBhdXRvcGxheS1zZXF1ZW5jZS4gVGhlIGF1dG9wbGF5LXNlcXVlbmNlIHdpbGwgYWx3YXlzIGJsb2NrIG90aGVyIG1lZGlhLlwiLFxuICApO1xuICBleHBvcnQgY29uc3QgaW5wdXRCbG9ja2luZ0J5U2VxdWVuY2UgPSBuZXcgQm9vbGVhblN0YXRlUHJvcGVydHkoXCJpbnB1dC1ibG9ja2VkLWJ5LWF1dG9wbGF5LXNlcXVlbmNlXCIsIGZhbHNlLCBcIlwiKTtcbiAgZXhwb3J0IGNvbnN0IG1lZGlhQmxvY2tlZEJ5QXVkaW8gPSBuZXcgQm9vbGVhblN0YXRlUHJvcGVydHkoXCJtZWRpYS1ibG9ja2VkLWJ5LWF1ZGlvXCIsIGZhbHNlLCBcIlwiKTtcbiAgZXhwb3J0IGNvbnN0IGlucHV0QmxvY2tlZEJ5QXVkaW8gPSBuZXcgQm9vbGVhblN0YXRlUHJvcGVydHkoXCJpbnB1dC1ibG9ja2VkLWJ5LWF1ZGlvXCIsIGZhbHNlLCBcIlwiKTtcbiAgZXhwb3J0IGNvbnN0IG1lZGlhQmxvY2tlZEJ5VmlkZW8gPSBuZXcgQm9vbGVhblN0YXRlUHJvcGVydHkoXCJtZWRpYS1ibG9ja2VkLWJ5LXZpZGVvXCIsIGZhbHNlLCBcIlwiKTtcbiAgZXhwb3J0IGNvbnN0IGlucHV0QmxvY2tlZEJ5VmlkZW8gPSBuZXcgQm9vbGVhblN0YXRlUHJvcGVydHkoXG4gICAgXCJpbnB1dC1ibG9ja2VkLWJ5LXZpZGVvXCIsXG4gICAgZmFsc2UsXG4gICAgXCJTaG91bGQgYmUgdHJ1ZSBpZiBhIHZpZGVvIGlzIHBsYXlpbmcsIGFuZCB0aGlzIHZpZGVvIGlzIHN1cHBvc2UgdG8gYmxvY2sgdXNlci1pbnB1dC5cIixcbiAgKTtcbiAgZXhwb3J0IGNvbnN0IHVzZXJQYXVzZWRWaWRlbyA9IG5ldyBCb29sZWFuU3RhdGVQcm9wZXJ0eShcbiAgICBcInVzZXItcGF1c2VkLXZpZGVvXCIsXG4gICAgZmFsc2UsXG4gICAgXCJTaG91bGQgYmUgdHJ1ZSBpZiB1c2VyIHBhdXNlZCB0aGUgdmlkZW8gYnkgcHJlc3NpbmcgdGhlIHBhdXNlLWJ1dHRvbi5cIixcbiAgKTtcbiAgZXhwb3J0IGNvbnN0IHZpZGVvSXNQbGF5aW5nID0gbmV3IEJvb2xlYW5TdGF0ZVByb3BlcnR5KFxuICAgIFwidmlkZW8taXMtcGxheWluZ1wiLFxuICAgIGZhbHNlLFxuICAgIFwiU2hvdWxkIGJlIHRydWUgaWYgYW55IHZpZGVvIGlzIHBsYXlpbmcgb24gdGhlIHBhZ2UuXCIsXG4gICk7XG4gIGV4cG9ydCBjb25zdCBhdWRpb0lzUGxheWluZyA9IG5ldyBCb29sZWFuU3RhdGVQcm9wZXJ0eShcbiAgICBcImF1ZGlvLWlzLXBsYXlpbmdcIixcbiAgICBmYWxzZSxcbiAgICBcIlNob3VsZCBiZSB0cnUgaWYgYW55IGF1ZGlvIGlzIHBsYXlpbmcgb24gcGFnZVwiLFxuICApO1xuICBjb25zdCBfcHJvcHMgPSB7XG4gICAgaW5wdXRCbG9ja2VkQnlBdWRpbyxcbiAgICBtZWRpYUJsb2NrZWRCeUF1ZGlvLFxuICAgIGlucHV0QmxvY2tpbmdCeVNlcXVlbmNlLFxuICAgIG1lZGlhQmxvY2tlZEJ5U2VxdWVuY2UsXG4gICAgaW5wdXRCbG9ja2VkQnlWaWRlbyxcbiAgICBtZWRpYUJsb2NrZWRCeVZpZGVvLFxuICAgIHVzZXJQYXVzZWRWaWRlbyxcbiAgICB2aWRlb0lzUGxheWluZyxcbiAgfTtcblxuICBjb25zdCBkaXNhYmxlQXVkaW9JY29uUXVlcnk6IERTdGF0ZS5TdGF0ZVF1ZXJ5ID0ge1xuICAgIG5hbWU6IFwiZGlzYWJsZS1BdWRpb1wiLFxuICAgIGNvbmRpdGlvbjoge1xuICAgICAga2luZDogXCJjb21wbGV4LWNvbmRpdGlvblwiLFxuICAgICAgbmFtZTogXCJhdWRpby1jb250cm9scy1hcmUtYmxvY2tlZFwiLFxuICAgICAgc29tZTogW1xuICAgICAgICBtZWRpYUJsb2NrZWRCeVNlcXVlbmNlLmdldElzVHJ1ZUNvbmRpdGlvbigpLFxuICAgICAgICBtZWRpYUJsb2NrZWRCeUF1ZGlvLmdldElzVHJ1ZUNvbmRpdGlvbigpLFxuICAgICAgICBtZWRpYUJsb2NrZWRCeVZpZGVvLmdldElzVHJ1ZUNvbmRpdGlvbigpLFxuICAgICAgXSxcbiAgICAgIGFsbDogW10sXG4gICAgfSxcbiAgfTtcbiAgY29uc3QgaGlkZVZpZGVvUGxheVF1ZXJ5OiBEU3RhdGUuU3RhdGVRdWVyeSA9IHtcbiAgICBuYW1lOiBcImhpZGUtdmlkZW8tcGxheS1idXR0b25cIixcbiAgICBjb25kaXRpb246IHtcbiAgICAgIGtpbmQ6IFwiY29tcGxleC1jb25kaXRpb25cIixcbiAgICAgIG5hbWU6IFwidmlkZW8taXMtcGxheWluZy1jb25kaXRpb25cIixcbiAgICAgIGFsbDogW3ZpZGVvSXNQbGF5aW5nLmdldElzVHJ1ZUNvbmRpdGlvbigpXSxcbiAgICAgIHNvbWU6IFtdLFxuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgaGlkZVZpZGVvUGF1c2VRdWVyeTogRFN0YXRlLlN0YXRlUXVlcnkgPSB7XG4gICAgbmFtZTogXCJoaWRlLXZpZGVvLXBhdXNlLWJ1dHRvblwiLFxuICAgIGNvbmRpdGlvbjoge1xuICAgICAga2luZDogXCJjb21wbGV4LWNvbmRpdGlvblwiLFxuICAgICAgbmFtZTogXCJ2aWRlby1pcy1ub3QtcGxheWluZy1jb25kaXRpb25cIixcbiAgICAgIGFsbDogW3ZpZGVvSXNQbGF5aW5nLmdldElzRmFsc2VDb25kaXRpb24oKV0sXG4gICAgICBzb21lOiBbXSxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IGRpc2FibGVWaWRlb1BsYXlRdWVyeTogRFN0YXRlLlN0YXRlUXVlcnkgPSB7XG4gICAgbmFtZTogXCJkaXNhYmxlLXZpZGVvXCIsXG4gICAgY29uZGl0aW9uOiB7XG4gICAgICBraW5kOiBcImNvbXBsZXgtY29uZGl0aW9uXCIsXG4gICAgICBuYW1lOiBcInZpZGVvLXBsYXkgc2hhbGwgYmUgZGlzYWJsZWRcIixcbiAgICAgIGFsbDogW3VzZXJQYXVzZWRWaWRlby5nZXRJc0ZhbHNlQ29uZGl0aW9uKCldLFxuICAgICAgc29tZTogW1xuICAgICAgICBtZWRpYUJsb2NrZWRCeVNlcXVlbmNlLmdldElzVHJ1ZUNvbmRpdGlvbigpLFxuICAgICAgICBtZWRpYUJsb2NrZWRCeUF1ZGlvLmdldElzVHJ1ZUNvbmRpdGlvbigpLFxuICAgICAgICBtZWRpYUJsb2NrZWRCeVZpZGVvLmdldElzVHJ1ZUNvbmRpdGlvbigpLFxuICAgICAgICBhdWRpb0lzUGxheWluZy5nZXRJc1RydWVDb25kaXRpb24oKSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfTtcbiAgY29uc3QgZGlzYWJsZVVzZXJJbnB1dFF1ZXJ5OiBEU3RhdGUuU3RhdGVRdWVyeSA9IHtcbiAgICBuYW1lOiBcImRpc2FibGUtdXNlci1pbnB1dFwiLFxuICAgIGNvbmRpdGlvbjoge1xuICAgICAga2luZDogXCJjb21wbGV4LWNvbmRpdGlvblwiLFxuICAgICAgbmFtZTogXCJVc2VyIGlucHV0IHNoYWxsIGJlIGRpc2FibGVkIChSZXNwb25zZS1idXR0b25zLCBGb3JtQ29udHJvbHMuLi4pXCIsXG4gICAgICBhbGw6IFtdLFxuICAgICAgc29tZTogW1xuICAgICAgICBpbnB1dEJsb2NrZWRCeUF1ZGlvLmdldElzVHJ1ZUNvbmRpdGlvbigpLFxuICAgICAgICBpbnB1dEJsb2NrZWRCeVZpZGVvLmdldElzVHJ1ZUNvbmRpdGlvbigpLFxuICAgICAgICBpbnB1dEJsb2NraW5nQnlTZXF1ZW5jZS5nZXRJc1RydWVDb25kaXRpb24oKSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfTtcbiAgZXhwb3J0IGNvbnN0IF9RdWVyaWVzID0ge1xuICAgIGRpc2FibGVBdWRpb0ljb25RdWVyeSxcbiAgICBkaXNhYmxlVmlkZW9QbGF5UXVlcnksXG4gICAgZGlzYWJsZVVzZXJJbnB1dFF1ZXJ5LFxuICAgIGhpZGVWaWRlb1BhdXNlUXVlcnksXG4gICAgaGlkZVZpZGVvUGxheVF1ZXJ5LFxuICB9O1xuICBleHBvcnQgY29uc3QgYWxsRGVmYXVsdFByb3BlcnRpZXMgPSBPYmplY3QudmFsdWVzKF9wcm9wcyk7XG4gIGV4cG9ydCBjb25zdCBhbGxEZWZhdWx0UXVlcmllcyA9IE9iamVjdC52YWx1ZXMoX1F1ZXJpZXMpO1xufVxuIiwgImltcG9ydCB7IERDb21tYW5kLCBFbGVtZW50Q29tbWFuZCB9IGZyb20gXCJAbWVkaWEtcXVlc3QvZW5naW5lXCI7XG5pbXBvcnQgeyBEU3R5bGUgfSBmcm9tIFwiQG1lZGlhLXF1ZXN0L2VuZ2luZVwiO1xuaW1wb3J0IHsgREVsZW1lbnREdG8gfSBmcm9tIFwiQG1lZGlhLXF1ZXN0L2VuZ2luZVwiO1xuXG5leHBvcnQgbmFtZXNwYWNlIFRoZW1lVXRpbHMge1xuICBleHBvcnQgY29uc3QgZGlzYWJsZUNsaWNrQ29tbWFuZHMgPSAoZWxlbWVudElkOiBzdHJpbmcsIHN0eWxlQ2hhbmdlczogUGFydGlhbDxEU3R5bGU+KTogRWxlbWVudENvbW1hbmRbXSA9PiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAga2luZDogXCJFTEVNRU5UX0RJU0FCTEVfQ0xJQ0tfQ09NTUFORFwiLFxuICAgICAgICB0YXJnZXQ6IFwiRUxFTUVOVFwiLFxuICAgICAgICB0YXJnZXRJZDogZWxlbWVudElkLFxuICAgICAgICBwYXlsb2FkOiB7fSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtpbmQ6IFwiRUxFTUVOVF9TVFlMRV9DT01NQU5EXCIsXG4gICAgICAgIHRhcmdldDogXCJFTEVNRU5UXCIsXG4gICAgICAgIHRhcmdldElkOiBlbGVtZW50SWQsXG4gICAgICAgIHBheWxvYWQ6IHsgY2hhbmdlczogc3R5bGVDaGFuZ2VzIH0sXG4gICAgICB9LFxuICAgIF07XG4gIH07XG5cbiAgZXhwb3J0IGNvbnN0IGVuYWJsZUNsaWNrQ29tbWFuZHMgPSAoZWxlbWVudElkOiBzdHJpbmcsIHN0eWxlQ2hhbmdlczogUGFydGlhbDxEU3R5bGU+KTogRWxlbWVudENvbW1hbmRbXSA9PiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAga2luZDogXCJFTEVNRU5UX0VOQUJMRV9DTElDS19DT01NQU5EXCIsXG4gICAgICAgIHRhcmdldDogXCJFTEVNRU5UXCIsXG4gICAgICAgIHRhcmdldElkOiBlbGVtZW50SWQsXG4gICAgICAgIHBheWxvYWQ6IHt9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2luZDogXCJFTEVNRU5UX1NUWUxFX0NPTU1BTkRcIixcbiAgICAgICAgdGFyZ2V0OiBcIkVMRU1FTlRcIixcbiAgICAgICAgdGFyZ2V0SWQ6IGVsZW1lbnRJZCxcbiAgICAgICAgcGF5bG9hZDogeyBjaGFuZ2VzOiBzdHlsZUNoYW5nZXMgfSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfTtcbiAgZXhwb3J0IGNvbnN0IGhpZGVDb21tYW5kID0gKGVsZW1lbnRJZDogc3RyaW5nKTogRWxlbWVudENvbW1hbmQgPT4ge1xuICAgIGNvbnN0IGhpZGVDb21tYW5kOiBEQ29tbWFuZCA9IHtcbiAgICAgIGtpbmQ6IFwiRUxFTUVOVF9TVFlMRV9DT01NQU5EXCIsXG4gICAgICB0YXJnZXQ6IFwiRUxFTUVOVFwiLFxuICAgICAgdGFyZ2V0SWQ6IGVsZW1lbnRJZCxcbiAgICAgIHBheWxvYWQ6IHsgY2hhbmdlczogeyB2aXNpYmlsaXR5OiBcImhpZGRlblwiIH0gfSxcbiAgICB9O1xuICAgIHJldHVybiBoaWRlQ29tbWFuZDtcbiAgfTtcbiAgZXhwb3J0IGNvbnN0IHNob3dDb21tYW5kID0gKGVsZW1lbnRJZDogc3RyaW5nKTogRWxlbWVudENvbW1hbmQgPT4ge1xuICAgIGNvbnN0IHNob3dDb21tYW5kOiBEQ29tbWFuZCA9IHtcbiAgICAgIGtpbmQ6IFwiRUxFTUVOVF9TVFlMRV9DT01NQU5EXCIsXG4gICAgICB0YXJnZXQ6IFwiRUxFTUVOVFwiLFxuICAgICAgdGFyZ2V0SWQ6IGVsZW1lbnRJZCxcbiAgICAgIHBheWxvYWQ6IHsgY2hhbmdlczogeyB2aXNpYmlsaXR5OiBcInZpc2libGVcIiB9IH0sXG4gICAgfTtcbiAgICByZXR1cm4gc2hvd0NvbW1hbmQ7XG4gIH07XG5cbiAgZXhwb3J0IGNvbnN0IHNwYWNlRXZlbmx5WCA9IDxUIGV4dGVuZHMgUGljazxERWxlbWVudER0bywgXCJzdHlsZVwiPj4oXG4gICAgaXRlbXM6IFJlYWRvbmx5QXJyYXk8VD4sXG4gICAgb3B0aW9uczogeyBzdGFydEF0OiBudW1iZXI7IGVuZEF0OiBudW1iZXI7IGRlZmF1bHRJdGVtV2lkdGg6IG51bWJlciB9ID0ge1xuICAgICAgc3RhcnRBdDogMCxcbiAgICAgIGVuZEF0OiAxMDAsXG4gICAgICBkZWZhdWx0SXRlbVdpZHRoOiA1LFxuICAgIH0sXG4gICk6IFJlYWRvbmx5QXJyYXk8VD4gPT4ge1xuICAgIGNvbnN0IHN0YXJ0QXQgPSBvcHRpb25zPy5zdGFydEF0ID8/IDA7XG4gICAgY29uc3QgZW5kQXQgPSBvcHRpb25zPy5lbmRBdCA/PyAxMDA7XG4gICAgY29uc3QgcmFuZ2UgPSBNYXRoLmFicyhlbmRBdCAtIHN0YXJ0QXQpO1xuICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgbWFyZ2luQ291bnQgPSBpdGVtcy5sZW5ndGggKyAxO1xuICAgIGNvbnN0IGRlZmF1bHRXaWR0aCA9IG9wdGlvbnMuZGVmYXVsdEl0ZW1XaWR0aCA/PyAxNTAgLyBtYXJnaW5Db3VudDtcblxuICAgIGxldCB0b3RhbFdpZHRoT2ZFbGVtZW50cyA9IGl0ZW1zLnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xuICAgICAgY29uc3QgdyA9IGN1cnIuc3R5bGUudyA/PyBkZWZhdWx0V2lkdGg7XG4gICAgICByZXR1cm4gcHJldiArIHc7XG4gICAgfSwgMCk7XG5cbiAgICBsZXQgY3Vyc29yID0gc3RhcnRBdDtcbiAgICBjb25zdCByZXN0ID0gTWF0aC5tYXgocmFuZ2UgLSB0b3RhbFdpZHRoT2ZFbGVtZW50cywgMCk7XG4gICAgY29uc3QgbWFyZ2luID0gcmVzdCAvIG1hcmdpbkNvdW50O1xuXG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgY3Vyc29yID0gY3Vyc29yICsgbWFyZ2luO1xuICAgICAgY29uc3QgdyA9IGl0ZW0uc3R5bGUudyA/PyBkZWZhdWx0V2lkdGg7XG4gICAgICBjb25zdCB4ID0gY3Vyc29yO1xuICAgICAgY3Vyc29yID0gY3Vyc29yICsgdztcbiAgICAgIGl0ZW0uc3R5bGUudyA9IHc7XG4gICAgICBpdGVtLnN0eWxlLnggPSB4O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9O1xuXG4gIGV4cG9ydCBjb25zdCBjZW50ZXJZID0gKCk6IFBpY2s8RFN0eWxlLCBcInlcIiB8IFwidHJhbnNmb3JtXCI+ID0+ICh7XG4gICAgeTogNTAsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwJSwgNTAlKVwiLFxuICB9KTtcbiAgZXhwb3J0IGNvbnN0IGNlbnRlclggPSAoKTogUGljazxEU3R5bGUsIFwieFwiIHwgXCJ0cmFuc2Zvcm1cIj4gPT4gKHtcbiAgICB4OiA1MCxcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKC01MCUsIDAlKVwiLFxuICB9KTtcblxuICBleHBvcnQgY29uc3QgY2VudGVyWFkgPSAoKTogUGljazxEU3R5bGUsIFwieFwiIHwgXCJ5XCIgfCBcInRyYW5zZm9ybVwiPiA9PiAoe1xuICAgIHg6IDUwLFxuICAgIHk6IDUwLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoLTUwJSwgNTAlKVwiLFxuICB9KTtcbn1cbiIsICJpbXBvcnQgeyBBYnN0cmFjdFRoZW1lQ29tcGlsZXIgfSBmcm9tIFwiLi9BYnN0cmFjdFRoZW1lQ29tcGlsZXJcIjtcbmltcG9ydCB0eXBlIHsgQnVpbGRlclNjaGVtYUR0byB9IGZyb20gXCIuLi9CdWlsZGVyLXNjaGVtYVwiO1xuaW1wb3J0IHsgQnVpbGRlclNjaGVtYSB9IGZyb20gXCIuLi9CdWlsZGVyLXNjaGVtYVwiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGVyUGFnZUR0byB9IGZyb20gXCIuLi9CdWlsZGVyLXBhZ2VcIjtcbmltcG9ydCB7IERTdGF0ZVByb3BzIH0gZnJvbSBcIi4vc3RhbmRhcmQtcHJvcHNcIjtcbmltcG9ydCB7IFRoZW1lVXRpbHMgfSBmcm9tIFwiLi90aGVtZS11dGlsc1wiO1xuaW1wb3J0IHsgRGVmYXVsdFRoZW1lLCB0eXBlIElEZWZhdWx0VGhlbWUgfSBmcm9tIFwiLi9JRGVmYXVsdFRoZW1lXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJNYWluSW1hZ2VEdG8gfSBmcm9tIFwiLi4vQnVpbGRlck1haW5JbWFnZUR0b1wiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGVyTWFpblZpZGVvRHRvIH0gZnJvbSBcIi4uL0J1aWxkZXJNYWluVmlkZW9EdG9cIjtcbmltcG9ydCB7XG4gIERBdWRpb0R0byxcbiAgREF1dG9QbGF5U2VxdWVuY2UsXG4gIERDb21tYW5kLFxuICBERGl2RHRvLFxuICBERWxlbWVudER0byxcbiAgREltZ0R0byxcbiAgRFRleHREdG8sXG4gIERVdGlsLFxuICBEVmlkZW9EdG8sXG4gIEZhY3QsXG4gIFBhZ2VEdG8sXG4gIFBhZ2VRdWVDb21tYW5kLFxuICBSdWxlLFxuICBTY2hlbWFEdG8sXG59IGZyb20gXCJAbWVkaWEtcXVlc3QvZW5naW5lXCI7XG5pbXBvcnQgeyBBdWRpb0ZpbGUgfSBmcm9tIFwiLi4vbWVkaWEtZmlsZXNcIjtcbmltcG9ydCB7IEJ1aWxkZXJSdWxlIH0gZnJvbSBcIi4uL3J1bGVidWlsZGVyXCI7XG5cbmNvbnN0IFUgPSBEVXRpbDtcbmNvbnN0IGdlbmVyYXRlRWxlbWVudElkID0gKCkgPT4gVS5yYW5kb21TdHJpbmcoMzIpO1xuZXhwb3J0IGNsYXNzIERlZmF1bHRUaGVtZUNvbXBpbGVyIGV4dGVuZHMgQWJzdHJhY3RUaGVtZUNvbXBpbGVyPElEZWZhdWx0VGhlbWU+IHtcbiAgcmVhZG9ubHkgbmFtZSA9IFwiSXNwZSBkZWZhdWx0IHRoZW1lLlwiO1xuICBwcml2YXRlIHJlYWRvbmx5IFRBRyA9IFwiWyBERUZBVUxUX1RIRU1FX0NPTVBJTEVSIF06IFwiO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihEZWZhdWx0VGhlbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21waWxlUnVsZXMoc291cmNlOiBCdWlsZGVyU2NoZW1hRHRvKTogUnVsZTxQYWdlUXVlQ29tbWFuZCwgbmV2ZXI+W10ge1xuICAgIGNvbnN0IGJ1aWxkZXJTY2hlbWEgPSBCdWlsZGVyU2NoZW1hLmZyb21Kc29uKHNvdXJjZSk7XG4gICAgY29uc3QgcnVsZUlucHV0ID0gYnVpbGRlclNjaGVtYS5nZXRSdWxlSW5wdXQoKTtcbiAgICBjb25zdCBwYWdlUXVlUnVsZXM6IFJ1bGU8UGFnZVF1ZUNvbW1hbmQsIG5ldmVyPltdID0gW107XG4gICAgc291cmNlLnJ1bGVzLmZvckVhY2goKHJ1bGUpID0+IHtcbiAgICAgIGNvbnN0IGVuZ2luZVJ1bGUgPSBCdWlsZGVyUnVsZS5mcm9tRHRvKHJ1bGUsIHJ1bGVJbnB1dCkudG9FbmdpbmVSdWxlKCk7XG4gICAgICBpZiAoIVJ1bGUuaXNFbXB0eShlbmdpbmVSdWxlKSkge1xuICAgICAgICBwYWdlUXVlUnVsZXMucHVzaChlbmdpbmVSdWxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQodGhpcy5UQUcsIFwiVGhyb3dzIGF3YXkgZW1wdHkgcnVsZS5cIik7XG4gICAgICAgIGNvbnNvbGUubG9nKHJ1bGUpO1xuICAgICAgICBjb25zb2xlLmxvZyhydWxlSW5wdXQpO1xuICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHBhZ2VRdWVSdWxlcztcbiAgfVxuXG4gIGNvbXBpbGUoc291cmNlOiBCdWlsZGVyU2NoZW1hRHRvKTogU2NoZW1hRHRvIHtcbiAgICBjb25zdCBwYWdlcyA9IHNvdXJjZS5wYWdlcy5tYXAoKHApID0+IHRoaXMuY29tcGlsZVBhZ2UocCwgc291cmNlLnByZWZpeCkpO1xuICAgIGNvbnN0IHJ1bGVzID0gdGhpcy5jb21waWxlUnVsZXMoc291cmNlKTtcbiAgICAvLyBjb25zb2xlLmxvZyhwYWdlcy5tYXAoKHApID0+IHAudGFncykpO1xuXG4gICAgY29uc3QgZHRvOiBTY2hlbWFEdG8gPSB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHNvdXJjZS5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBiYXNlSGVpZ2h0OiBzb3VyY2UuYmFzZUhlaWdodCxcbiAgICAgIGJhc2VXaWR0aDogc291cmNlLmJhc2VXaWR0aCxcbiAgICAgIGlkOiBzb3VyY2UuaWQsXG4gICAgICBwYWdlU2VxdWVuY2VzOiBbXSxcbiAgICAgIHBhZ2VzLFxuICAgICAgcHJlZGVmaW5lZEZhY3RzOiBbXSxcbiAgICAgIHJ1bGVzLFxuICAgICAgc3RhdGVGcm9tRXZlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIG9uRXZlbnQ6IFwiVklERU9fRU5ERURfRVZFTlRcIixcbiAgICAgICAgICB0aGVuRXhlY3V0ZTogW1xuICAgICAgICAgICAgRFN0YXRlUHJvcHMudXNlclBhdXNlZFZpZGVvLmdldFNldEZhbHNlQ29tbWFuZCgpLFxuICAgICAgICAgICAgRFN0YXRlUHJvcHMubWVkaWFCbG9ja2VkQnlWaWRlby5nZXRTZXRGYWxzZUNvbW1hbmQoKSxcbiAgICAgICAgICAgIERTdGF0ZVByb3BzLnZpZGVvSXNQbGF5aW5nLmdldFNldEZhbHNlQ29tbWFuZCgpLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvbkV2ZW50OiBcIlZJREVPX1BBVVNFRF9FVkVOVFwiLFxuICAgICAgICAgIHRoZW5FeGVjdXRlOiBbXG4gICAgICAgICAgICBEU3RhdGVQcm9wcy52aWRlb0lzUGxheWluZy5nZXRTZXRGYWxzZUNvbW1hbmQoKSxcbiAgICAgICAgICAgIERTdGF0ZVByb3BzLm1lZGlhQmxvY2tlZEJ5VmlkZW8uZ2V0U2V0RmFsc2VDb21tYW5kKCksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG9uRXZlbnQ6IFwiVklERU9fUExBWV9FVkVOVFwiLFxuICAgICAgICAgIHRoZW5FeGVjdXRlOiBbXG4gICAgICAgICAgICBEU3RhdGVQcm9wcy52aWRlb0lzUGxheWluZy5nZXRTZXRUcnVlQ29tbWFuZCgpLFxuICAgICAgICAgICAgRFN0YXRlUHJvcHMudXNlclBhdXNlZFZpZGVvLmdldFNldEZhbHNlQ29tbWFuZCgpLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvbkV2ZW50OiBcIkFVRElPX1BMQVlfRVZFTlRcIixcbiAgICAgICAgICB0aGVuRXhlY3V0ZTogW1xuICAgICAgICAgICAgRFN0YXRlUHJvcHMuYXVkaW9Jc1BsYXlpbmcuZ2V0U2V0VHJ1ZUNvbW1hbmQoKSxcbiAgICAgICAgICAgIERTdGF0ZVByb3BzLm1lZGlhQmxvY2tlZEJ5QXVkaW8uZ2V0U2V0VHJ1ZUNvbW1hbmQoKSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb25FdmVudDogXCJBVURJT19FTkRFRF9FVkVOVFwiLFxuICAgICAgICAgIHRoZW5FeGVjdXRlOiBbXG4gICAgICAgICAgICBEU3RhdGVQcm9wcy5hdWRpb0lzUGxheWluZy5nZXRTZXRGYWxzZUNvbW1hbmQoKSxcbiAgICAgICAgICAgIERTdGF0ZVByb3BzLm1lZGlhQmxvY2tlZEJ5QXVkaW8uZ2V0U2V0RmFsc2VDb21tYW5kKCksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG9uRXZlbnQ6IFwiQVVESU9fUEFVU0VEX0VWRU5UXCIsXG4gICAgICAgICAgdGhlbkV4ZWN1dGU6IFtcbiAgICAgICAgICAgIERTdGF0ZVByb3BzLmF1ZGlvSXNQbGF5aW5nLmdldFNldEZhbHNlQ29tbWFuZCgpLFxuICAgICAgICAgICAgRFN0YXRlUHJvcHMubWVkaWFCbG9ja2VkQnlBdWRpby5nZXRTZXRGYWxzZUNvbW1hbmQoKSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHN0YXRlUHJvcHM6IERTdGF0ZVByb3BzLmFsbERlZmF1bHRQcm9wZXJ0aWVzLm1hcCgoZGVmKSA9PiBkZWYucHJvcERlZmluaXRpb24pLFxuICAgICAgc3RhdGVRdWVyaWVzOiBEU3RhdGVQcm9wcy5hbGxEZWZhdWx0UXVlcmllcyxcbiAgICB9O1xuICAgIHJldHVybiBkdG87XG4gIH1cbiAgcHJpdmF0ZSBjb21waWxlUGFnZShwYWdlOiBCdWlsZGVyUGFnZUR0bywgbW9kdWxlUHJlZml4OiBzdHJpbmcpOiBQYWdlRHRvIHtcbiAgICAvLyBjb25zb2xlLmxvZyhfbW9kdWxlSWQpO1xuICAgIC8vIGNvbnN0IHRleHRFbGVtZW50XG4gICAgY29uc3QgdGFncyA9IHBhZ2UudGFncyA/PyBbXTtcbiAgICBjb25zdCB7IG5leHRCdXR0b24sIG1haW5UZXh0LCBpZCwgbWFpbk1lZGlhLCBfdHlwZSB9ID0gcGFnZTtcbiAgICBjb25zdCBlbGVtZW50czogREVsZW1lbnREdG9bXSA9IFtdO1xuICAgIGNvbnN0IGF1ZGlvUmVzb3VyY2VzRHRvOiBEQXVkaW9EdG9bXSA9IFtdO1xuICAgIGNvbnN0IHZpZGVvUmVzb3VyY2VzOiBEVmlkZW9EdG9bXSA9IFtdO1xuICAgIGxldCBtYWluVmlkZW86IERWaWRlb0R0byB8IGZhbHNlID0gZmFsc2U7XG4gICAgbGV0IG1haW5UZXh0QXVkaW86IERBdWRpb0R0byB8IGZhbHNlID0gZmFsc2U7XG5cbiAgICBpZiAocGFnZS5tYWluVGV4dC5hdWRpb0ZpbGUpIHtcbiAgICAgIGNvbnN0IHJlcyA9IHRoaXMuY29tcGlsZU1haW5UZXh0QXVkaW8ocGFnZS5tYWluVGV4dC5hdWRpb0ZpbGUpO1xuICAgICAgZWxlbWVudHMucHVzaCguLi5yZXMuZWxlbWVudHMpO1xuICAgICAgYXVkaW9SZXNvdXJjZXNEdG8ucHVzaChyZXMuYXVkaW9EdG8pO1xuICAgICAgbWFpblRleHRBdWRpbyA9IHJlcy5hdWRpb0R0bztcbiAgICB9XG5cbiAgICBpZiAoX3R5cGUgPT09IFwicXVlc3Rpb25cIikge1xuICAgICAgY29uc3QgdmFyaWFibGVJZCA9IG1vZHVsZVByZWZpeCArIFwiX1wiICsgcGFnZS5wcmVmaXg7XG4gICAgICBjb25zdCB7IGJ1dHRvbnMsIHF1ZXN0aW9uIH0gPSB0aGlzLmNvbXBpbGVRdWVzdGlvbihpZCwgcGFnZSwgdmFyaWFibGVJZCk7XG4gICAgICAvLyBjb25zb2xlLmxvZyhxdWVzdGlvbik7XG4gICAgICBlbGVtZW50cy5wdXNoKC4uLmJ1dHRvbnMsIHF1ZXN0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAoX3R5cGUgPT09IFwiaW5mby1wYWdlXCIpIHtcbiAgICAgIGNvbnN0IGluZm9UZXh0ID0gbWFpblRleHQudGV4dDtcbiAgICAgIGNvbnN0IG5leHRCdG5FbGVtZW50OiBERWxlbWVudER0byA9IHRoaXMuY29tcGlsZUJ1dHRvbihpZCwgbmV4dEJ1dHRvbiwge1xuICAgICAgICBraW5kOiBcIm5leHQtYnV0dG9uXCIsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHRleHRTdHlsZSA9IG1haW5NZWRpYSA/IERlZmF1bHRUaGVtZS5tYWluVGV4dC53aXRoTWVkaWEudGV4dC5jc3MgOiBEZWZhdWx0VGhlbWUubWFpblRleHQubm9NZWRpYS50ZXh0LmNzcztcbiAgICAgIGNvbnN0IGVsZW1lbnQ6IERFbGVtZW50RHRvID0ge1xuICAgICAgICB0ZXh0OiBpbmZvVGV4dCxcbiAgICAgICAgX3RhZzogXCJwXCIsXG4gICAgICAgIGlkOiBnZW5lcmF0ZUVsZW1lbnRJZCgpLFxuICAgICAgICBzdHlsZTogdGV4dFN0eWxlLFxuICAgICAgfTtcbiAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgICBlbGVtZW50cy5wdXNoKG5leHRCdG5FbGVtZW50KTtcbiAgICB9XG4gICAgaWYgKG1haW5NZWRpYSAmJiBtYWluTWVkaWEua2luZCA9PT0gXCJtYWluLWltYWdlXCIpIHtcbiAgICAgIGNvbnN0IG1haW5JbWFnZUVsZW1lbnQgPSB0aGlzLmNvbXBpbGVJbWFnZShtYWluTWVkaWEpO1xuICAgICAgZWxlbWVudHMucHVzaChtYWluSW1hZ2VFbGVtZW50KTtcbiAgICB9XG5cbiAgICBpZiAobWFpbk1lZGlhICYmIG1haW5NZWRpYS5raW5kID09PSBcIm1haW4tdmlkZW9cIikge1xuICAgICAgY29uc3QgdmlkZW9PdXRwdXQgPSB0aGlzLmNvbXBpbGVWaWRlbyhtYWluTWVkaWEpO1xuICAgICAgbWFpblZpZGVvID0gdmlkZW9PdXRwdXQudmlkZW9EdG87XG4gICAgICBlbGVtZW50cy5wdXNoKC4uLnZpZGVvT3V0cHV0LmVsZW1lbnRzKTtcbiAgICAgIHZpZGVvUmVzb3VyY2VzLnB1c2godmlkZW9PdXRwdXQudmlkZW9EdG8pO1xuICAgIH1cbiAgICBjb25zdCBtYWluVmlkZW9JZCA9IG1haW5WaWRlbyA/IG1haW5WaWRlby5pZCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBhdXRvUGxheVNlcXVlbmNlOiBEQXV0b1BsYXlTZXF1ZW5jZSA9IHtcbiAgICAgIGJsb2NrVXNlcklucHV0OiB0cnVlLFxuICAgICAgaWQ6IFwiMVwiLFxuICAgICAgaXRlbXM6IFtdLFxuICAgICAgc3RhcnRDb21tYW5kczogW1xuICAgICAgICBEU3RhdGVQcm9wcy5tZWRpYUJsb2NrZWRCeVNlcXVlbmNlLmdldFNldFRydWVDb21tYW5kKCksXG4gICAgICAgIERTdGF0ZVByb3BzLmlucHV0QmxvY2tpbmdCeVNlcXVlbmNlLmdldFNldFRydWVDb21tYW5kKCksXG4gICAgICBdLFxuICAgICAgZW5kQ29tbWFuZHM6IFtcbiAgICAgICAgRFN0YXRlUHJvcHMubWVkaWFCbG9ja2VkQnlTZXF1ZW5jZS5nZXRTZXRGYWxzZUNvbW1hbmQoKSxcbiAgICAgICAgRFN0YXRlUHJvcHMuaW5wdXRCbG9ja2luZ0J5U2VxdWVuY2UuZ2V0U2V0RmFsc2VDb21tYW5kKCksXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBpZiAobWFpblZpZGVvICYmIHBhZ2UubWFpbk1lZGlhICYmIHBhZ2UubWFpbk1lZGlhLmtpbmQgPT09IFwibWFpbi12aWRlb1wiICYmIHBhZ2UubWFpbk1lZGlhLm1vZGUgPT09IFwiYXV0b3BsYXlcIikge1xuICAgICAgYXV0b1BsYXlTZXF1ZW5jZS5pdGVtcy5wdXNoKHtcbiAgICAgICAga2luZDogXCJhdXRvcGxheS12aWRlb1wiLFxuICAgICAgICB2aWRlb0lkOiBtYWluVmlkZW8uaWQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobWFpblRleHRBdWRpbyAmJiBwYWdlLm1haW5UZXh0LmF1dG9wbGF5KSB7XG4gICAgICBhdXRvUGxheVNlcXVlbmNlLml0ZW1zLnB1c2goe1xuICAgICAgICBraW5kOiBcImF1dG9wbGF5LWF1ZGlvXCIsXG4gICAgICAgIGF1ZGlvSWQ6IG1haW5UZXh0QXVkaW8uaWQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBwYWdlRHRvOiBQYWdlRHRvID0ge1xuICAgICAgYXVkaW86IGF1ZGlvUmVzb3VyY2VzRHRvLFxuICAgICAgYXV0b1BsYXlTZXF1ZW5jZTogYXV0b1BsYXlTZXF1ZW5jZSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogXCJyZWRcIixcbiAgICAgIGVsZW1lbnRzLFxuICAgICAgaWQsXG4gICAgICBtYWluVmlkZW9JZCxcbiAgICAgIHRhZ3M6IFsuLi50YWdzXSxcbiAgICAgIHZpZGVvOiB2aWRlb1Jlc291cmNlcyxcbiAgICB9O1xuICAgIHJldHVybiBwYWdlRHRvO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21waWxlSW1hZ2UoaW1hZ2U6IEJ1aWxkZXJNYWluSW1hZ2VEdG8pIHtcbiAgICBjb25zdCBpbWc6IERJbWdEdG8gPSB7XG4gICAgICBfdGFnOiBcImltZ1wiLFxuICAgICAgaWQ6IGltYWdlLmZpbGUuaWQsXG4gICAgICBzdHlsZTogdGhpcy50aGVtZS5pbWFnZS5zdHlsZSxcbiAgICAgIHVybDogaW1hZ2UuZmlsZS5kb3dubG9hZFVybCxcbiAgICB9O1xuICAgIHJldHVybiBpbWc7XG4gIH1cblxuICBwcml2YXRlIGNvbXBpbGVNYWluVGV4dEF1ZGlvKGF1ZGlvRmlsZTogQXVkaW9GaWxlKToge1xuICAgIGF1ZGlvRHRvOiBEQXVkaW9EdG87XG4gICAgZWxlbWVudHM6IERFbGVtZW50RHRvW107XG4gIH0ge1xuICAgIGNvbnN0IHQgPSB0aGlzLnRoZW1lLm1haW5UZXh0O1xuICAgIGNvbnN0IGF1ZGlvSWQgPSBhdWRpb0ZpbGUuaWQ7XG4gICAgY29uc3QgaWNvblVybCA9XG4gICAgICBcImh0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZ2b2x1bWVfdXAtMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPTU1MWJkMGE2LWE1MTUtNGY4Ny1hMjQ1LWRhNDMzZjQ4MzNmOVwiO1xuXG4gICAgY29uc3QgYnV0dG9uSWQgPSBVLnJhbmRvbVN0cmluZygzMCk7XG4gICAgY29uc3QgcGxheU1haW5UZXh0QXVkaW86IERJbWdEdG8gPSB7XG4gICAgICBfdGFnOiBcImltZ1wiLFxuICAgICAgaWQ6IGJ1dHRvbklkLFxuICAgICAgdXJsOiBpY29uVXJsLFxuICAgICAgc3R5bGU6IHsgLi4udC53aXRoTWVkaWEuYXVkaW8uY3NzIH0sXG4gICAgICBvbkNsaWNrOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBraW5kOiBcIkFVRElPX1BMQVlfQ09NTUFORFwiLFxuICAgICAgICAgIHRhcmdldDogXCJBVURJT1wiLFxuICAgICAgICAgIHRhcmdldElkOiBhdWRpb0lkLFxuICAgICAgICAgIHBheWxvYWQ6IHsgdm9sdW1lOiAxIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgb25TdGF0ZUNoYW5nZTogW1xuICAgICAgICB7XG4gICAgICAgICAgcXVlcnlOYW1lOiBEU3RhdGVQcm9wcy5fUXVlcmllcy5kaXNhYmxlQXVkaW9JY29uUXVlcnkubmFtZSxcbiAgICAgICAgICB3aGVuVHJ1ZTogWy4uLlRoZW1lVXRpbHMuZGlzYWJsZUNsaWNrQ29tbWFuZHMoYnV0dG9uSWQsIHQud2l0aE1lZGlhLmF1ZGlvLmNzc0Rpc2FibGVkKV0sXG4gICAgICAgICAgd2hlbkZhbHNlOiBbLi4uVGhlbWVVdGlscy5lbmFibGVDbGlja0NvbW1hbmRzKGJ1dHRvbklkLCB0LndpdGhNZWRpYS5hdWRpby5jc3NFbmFibGVkKV0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gICAgY29uc3QgYXVkaW9EdG86IERBdWRpb0R0byA9IHtcbiAgICAgIF90YWc6IFwiYXVkaW9cIixcbiAgICAgIC8vIGV2ZW50SGFuZGxlcnM6IFtdLFxuICAgICAgaWQ6IGF1ZGlvRmlsZS5pZCxcbiAgICAgIHVybDogYXVkaW9GaWxlLmRvd25sb2FkVXJsLFxuICAgIH07XG4gICAgcmV0dXJuIHsgYXVkaW9EdG8sIGVsZW1lbnRzOiBbcGxheU1haW5UZXh0QXVkaW9dIH07XG4gIH1cblxuICBwcml2YXRlIGNvbXBpbGVWaWRlbyh2aWRlbzogQnVpbGRlck1haW5WaWRlb0R0bykge1xuICAgIGNvbnN0IHQgPSB0aGlzLnRoZW1lLnZpZGVvUGxheWVyO1xuICAgIGNvbnN0IHZpZGVvSWQgPSB2aWRlby5maWxlLmlkO1xuICAgIGNvbnN0IHBsYXlCdXR0b25JZCA9IFwicGxheS1idG4tZm9yXCIgKyB2aWRlb0lkO1xuICAgIGNvbnN0IHBhdXNlQnV0dG9uSWQgPSBcInBhdXNlLWJ0bi1mb3JcIiArIHZpZGVvSWQ7XG4gICAgY29uc3QgZWxlbWVudHM6IERFbGVtZW50RHRvW10gPSBbXTtcbiAgICBjb25zdCB2aWRlb0R0bzogRFZpZGVvRHRvID0ge1xuICAgICAgX3RhZzogXCJ2aWRlb1wiLFxuICAgICAgaWQ6IHZpZGVvLmZpbGUuaWQsXG4gICAgICBzdHlsZTogdC52aWRlb0VsZW1lbnQuY3NzLFxuICAgICAgdXJsOiB2aWRlby5maWxlLmRvd25sb2FkVXJsLFxuICAgIH07XG4gICAgY29uc3QgcGxheUJ0bjogREltZ0R0byA9IHtcbiAgICAgIGlkOiBwbGF5QnV0dG9uSWQsXG4gICAgICBfdGFnOiBcImltZ1wiLFxuICAgICAgdXJsOiB0LnBsYXlCdXR0b24uaWNvblVybCxcbiAgICAgIHN0eWxlOiB7IC4uLnQucGxheUJ1dHRvbi5jc3MsIC4uLnQucGxheUJ1dHRvbi5jc3NFbmFibGVkIH0sXG4gICAgICBvbkNsaWNrOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBraW5kOiBcIlZJREVPX1BMQVlfQ09NTUFORFwiLFxuICAgICAgICAgIHRhcmdldDogXCJWSURFT1wiLFxuICAgICAgICAgIHRhcmdldElkOiB2aWRlb0lkLFxuICAgICAgICAgIHBheWxvYWQ6IHt9LFxuICAgICAgICB9LFxuICAgICAgICAvLyBUT0RPIENoZWNrIGlmIHRoaXMgdmlkZW8gc2hhbGwgYmxvY2sgb3RoZXIgbWVkaWEgZmlyc3Q/XG4gICAgICAgIERTdGF0ZVByb3BzLm1lZGlhQmxvY2tlZEJ5VmlkZW8uZ2V0U2V0VHJ1ZUNvbW1hbmQoKSxcbiAgICAgICAgRFN0YXRlUHJvcHMudXNlclBhdXNlZFZpZGVvLmdldFNldEZhbHNlQ29tbWFuZCgpLFxuICAgICAgXSxcbiAgICAgIG9uU3RhdGVDaGFuZ2U6IFtcbiAgICAgICAge1xuICAgICAgICAgIHF1ZXJ5TmFtZTogRFN0YXRlUHJvcHMuX1F1ZXJpZXMuZGlzYWJsZVZpZGVvUGxheVF1ZXJ5Lm5hbWUsXG4gICAgICAgICAgd2hlblRydWU6IFsuLi5UaGVtZVV0aWxzLmRpc2FibGVDbGlja0NvbW1hbmRzKHBsYXlCdXR0b25JZCwgdC5wbGF5QnV0dG9uLmNzc0Rpc2FibGVkKV0sXG4gICAgICAgICAgd2hlbkZhbHNlOiBbLi4uVGhlbWVVdGlscy5lbmFibGVDbGlja0NvbW1hbmRzKHBsYXlCdXR0b25JZCwgdC5wbGF5QnV0dG9uLmNzc0VuYWJsZWQpXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHF1ZXJ5TmFtZTogRFN0YXRlUHJvcHMuX1F1ZXJpZXMuaGlkZVZpZGVvUGxheVF1ZXJ5Lm5hbWUsXG4gICAgICAgICAgd2hlblRydWU6IFtUaGVtZVV0aWxzLmhpZGVDb21tYW5kKHBsYXlCdXR0b25JZCldLFxuICAgICAgICAgIHdoZW5GYWxzZTogW1RoZW1lVXRpbHMuc2hvd0NvbW1hbmQocGxheUJ1dHRvbklkKV0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gICAgY29uc3QgcGF1c2VCdG46IERJbWdEdG8gPSB7XG4gICAgICBpZDogcGF1c2VCdXR0b25JZCxcbiAgICAgIF90YWc6IFwiaW1nXCIsXG4gICAgICBzdHlsZToge1xuICAgICAgICAuLi50LnBhdXNlQnV0dG9uLmNzcyxcbiAgICAgICAgdmlzaWJpbGl0eTogXCJoaWRkZW5cIixcbiAgICAgICAgLi4udC5wYXVzZUJ1dHRvbi5jc3NFbmFibGVkLFxuICAgICAgfSxcbiAgICAgIHVybDogdC5wYXVzZUJ1dHRvbi5pY29uVXJsLFxuICAgICAgb25DbGljazogW1xuICAgICAgICB7XG4gICAgICAgICAga2luZDogXCJWSURFT19QQVVTRV9DT01NQU5EXCIsXG4gICAgICAgICAgdGFyZ2V0OiBcIlZJREVPXCIsXG4gICAgICAgICAgdGFyZ2V0SWQ6IHZpZGVvSWQsXG4gICAgICAgICAgcGF5bG9hZDoge30sXG4gICAgICAgIH0sXG4gICAgICAgIERTdGF0ZVByb3BzLm1lZGlhQmxvY2tlZEJ5VmlkZW8uZ2V0U2V0RmFsc2VDb21tYW5kKCksXG4gICAgICAgIERTdGF0ZVByb3BzLnVzZXJQYXVzZWRWaWRlby5nZXRTZXRUcnVlQ29tbWFuZCgpLFxuICAgICAgXSxcbiAgICAgIG9uU3RhdGVDaGFuZ2U6IFtcbiAgICAgICAge1xuICAgICAgICAgIHF1ZXJ5TmFtZTogRFN0YXRlUHJvcHMuX1F1ZXJpZXMuaGlkZVZpZGVvUGF1c2VRdWVyeS5uYW1lLFxuICAgICAgICAgIHdoZW5UcnVlOiBbVGhlbWVVdGlscy5oaWRlQ29tbWFuZChwYXVzZUJ1dHRvbklkKV0sXG4gICAgICAgICAgd2hlbkZhbHNlOiBbVGhlbWVVdGlscy5zaG93Q29tbWFuZChwYXVzZUJ1dHRvbklkKV0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gICAgZWxlbWVudHMucHVzaChwbGF5QnRuKTtcbiAgICBlbGVtZW50cy5wdXNoKHBhdXNlQnRuKTtcbiAgICByZXR1cm4geyB2aWRlb0R0bywgZWxlbWVudHMgfTtcbiAgfVxuICBwcml2YXRlIGNvbXBpbGVRdWVzdGlvbihcbiAgICBwYWdlSWQ6IHN0cmluZyxcbiAgICBwYWdlOiBCdWlsZGVyUGFnZUR0byxcbiAgICB2YXJpYWJsZUlkOiBzdHJpbmcsXG4gICk6IHtcbiAgICBxdWVzdGlvbjogRFRleHREdG87XG4gICAgYnV0dG9uczogRERpdkR0b1tdO1xuICB9IHtcbiAgICAvLyBUT0RPIFJFRkFDVE9SRSBERUZBVUxUIFFVRVNUSU9OIFRPIC0gKFJFTU9WRSBVU0UgVEVYVDEpXG4gICAgLy8gY29uc29sZS5sb2cocGFnZSk7XG4gICAgY29uc3QgcSA9IHBhZ2UuZGVmYXVsdFF1ZXN0aW9uO1xuICAgIGNvbnN0IHRleHQgPSBwYWdlLm1haW5UZXh0LnRleHQ7XG4gICAgY29uc3QgcXVlc3Rpb25TdHlsZSA9IHBhZ2UubWFpbk1lZGlhXG4gICAgICA/IERlZmF1bHRUaGVtZS5tYWluVGV4dC53aXRoTWVkaWEudGV4dC5jc3NcbiAgICAgIDogRGVmYXVsdFRoZW1lLm1haW5UZXh0Lm5vTWVkaWEudGV4dC5jc3M7XG4gICAgY29uc3QgcXVlc3Rpb246IERUZXh0RHRvID0ge1xuICAgICAgX3RhZzogXCJwXCIsXG4gICAgICB0ZXh0LFxuICAgICAgZXZlbnRIYW5kbGVyczogW10sXG4gICAgICBpZDogVS5yYW5kb21TdHJpbmcoMzApLFxuICAgICAgb25DbGljazogW10sXG4gICAgICBvblN0YXRlQ2hhbmdlOiBbXSxcbiAgICAgIHN0eWxlOiBxdWVzdGlvblN0eWxlLFxuICAgIH07XG4gICAgY29uc3QgYnV0dG9ucyA9IHEub3B0aW9ucy5tYXAoKG8pID0+IHtcbiAgICAgIGNvbnN0IGJ0bnMgPSB0aGlzLmNvbXBpbGVCdXR0b24ocGFnZUlkLCBvLCB7XG4gICAgICAgIGtpbmQ6IFwicmVzcG9uc2UtYnV0dG9uXCIsXG4gICAgICAgIHF1ZXN0aW9uSWQ6IHZhcmlhYmxlSWQsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBidG5zO1xuICAgIH0pO1xuICAgIFRoZW1lVXRpbHMuc3BhY2VFdmVubHlYKGJ1dHRvbnMpO1xuICAgIHJldHVybiB7IHF1ZXN0aW9uLCBidXR0b25zIH07XG4gIH1cblxuICBwcml2YXRlIGNvbXBpbGVCdXR0b24oXG4gICAgcGFnZUlkOiBzdHJpbmcsXG4gICAgYnV0dG9uRHRvOiBCdWlsZGVyUGFnZUR0b1tcIm5leHRCdXR0b25cIl0sXG4gICAgb3B0aW9uczogeyBraW5kOiBcInJlc3BvbnNlLWJ1dHRvblwiOyBxdWVzdGlvbklkOiBzdHJpbmcgfSB8IHsga2luZDogXCJuZXh0LWJ1dHRvblwiIH0sXG4gICkge1xuICAgIGNvbnN0IGZhY3RzQ29sbGVjdGVkOiBGYWN0W10gPSBbXTtcbiAgICBjb25zdCB7IGlkLCB2YWx1ZSwgbGFiZWwgfSA9IGJ1dHRvbkR0bztcblxuICAgIC8vIGNvbnN0IHsgZGl2LCB0ZXh0MSwgZG9udEtub3cgfSA9IERlZmF1bHRUaGVtZS5yZXNwb25zZUJ1dHRvbnM7XG4gICAgaWYgKG9wdGlvbnMua2luZCA9PT0gXCJyZXNwb25zZS1idXR0b25cIikge1xuICAgICAgY29uc3QgZmFjdDogRmFjdCA9IHtcbiAgICAgICAga2luZDogXCJudW1lcmljLWZhY3RcIixcbiAgICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIHJlZmVyZW5jZUlkOiBvcHRpb25zLnF1ZXN0aW9uSWQsXG4gICAgICAgIHJlZmVyZW5jZUxhYmVsOiBcIlF1ZXN0aW9uSWQ6IFwiICsgb3B0aW9ucy5xdWVzdGlvbklkLFxuICAgICAgfTtcbiAgICAgIGZhY3RzQ29sbGVjdGVkLnB1c2goZmFjdCk7XG4gICAgfVxuXG4gICAgY29uc3Qgb25DbGlja0hhbmRsZXI6IERDb21tYW5kID0ge1xuICAgICAga2luZDogXCJFTkdJTkVfTEVBVkVfUEFHRV9DT01NQU5EXCIsXG4gICAgICB0YXJnZXQ6IFwiRU5HSU5FXCIsXG4gICAgICB0YXJnZXRJZDogXCJFTkdJTkVcIixcbiAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgcGFnZUlkLFxuICAgICAgICBmYWN0c0NvbGxlY3RlZCxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBidG5TdHlsZXMgPSB2YWx1ZSA9PT0gOSA/IERlZmF1bHRUaGVtZS5yZXNwb25zZUJ1dHRvbnMuZG9udEtub3cgOiBEZWZhdWx0VGhlbWUucmVzcG9uc2VCdXR0b25zLm5vcm1hbDtcbiAgICBjb25zb2xlLmxvZyhidG5TdHlsZXMpO1xuICAgIGNvbnN0IGJ0bjogRERpdkR0byA9IHtcbiAgICAgIGlkLFxuICAgICAgX3RhZzogXCJkaXZcIixcbiAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBfdGFnOiBcInBcIixcbiAgICAgICAgICBpZDogVS5yYW5kb21TdHJpbmcoMzApLFxuICAgICAgICAgIHRleHQ6IGxhYmVsLFxuICAgICAgICAgIHN0eWxlOiBidG5TdHlsZXMudGV4dDEsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgb25TdGF0ZUNoYW5nZTogW1xuICAgICAgICB7XG4gICAgICAgICAgcXVlcnlOYW1lOiBEU3RhdGVQcm9wcy5fUXVlcmllcy5kaXNhYmxlVXNlcklucHV0UXVlcnkubmFtZSxcbiAgICAgICAgICB3aGVuRmFsc2U6IFsuLi5UaGVtZVV0aWxzLmVuYWJsZUNsaWNrQ29tbWFuZHMoaWQsIGJ0blN0eWxlcy5idG4uY3NzRW5hYmxlZCldLFxuICAgICAgICAgIHdoZW5UcnVlOiBbLi4uVGhlbWVVdGlscy5kaXNhYmxlQ2xpY2tDb21tYW5kcyhpZCwgYnRuU3R5bGVzLmJ0bi5jc3NEaXNhYmxlZCldLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHN0eWxlOiB7IC4uLmJ0blN0eWxlcy5idG4uY3NzLCAuLi5idG5TdHlsZXMuYnRuLmNzc0VuYWJsZWQgfSxcbiAgICAgIG9uQ2xpY2s6IFtvbkNsaWNrSGFuZGxlcl0sXG4gICAgfTtcbiAgICBpZiAob3B0aW9ucy5raW5kID09PSBcIm5leHQtYnV0dG9uXCIpIHtcbiAgICAgIGJ0bi5zdHlsZS54ID0gNTA7XG4gICAgICBidG4uc3R5bGUueSA9IDg7XG4gICAgICBidG4uc3R5bGUudHJhbnNmb3JtID0gXCJ0cmFuc2xhdGUoLTUwJSwgMCUpXCI7XG4gICAgfVxuICAgIHJldHVybiBidG47XG4gIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IEJ1aWxkZXJQYWdlRHRvLCBCdWlsZGVyUGFnZVR5cGUgfSBmcm9tIFwiLi9CdWlsZGVyLXBhZ2VcIjtcbmltcG9ydCB7IEJ1aWxkZXJQYWdlIH0gZnJvbSBcIi4vQnVpbGRlci1wYWdlXCI7XG5pbXBvcnQgeyBSdWxlSW5wdXQgfSBmcm9tIFwiLi9ydWxlYnVpbGRlci9SdWxlSW5wdXRcIjtcbmltcG9ydCB0eXBlIHsgUXVlc3Rpb25WYXJpYWJsZSB9IGZyb20gXCIuL3J1bGVidWlsZGVyL1J1bGVWYXJpYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21WYXJpYWJsZSB9IGZyb20gXCIuL3J1bGVidWlsZGVyXCI7XG5pbXBvcnQgdHlwZSB7IEV4Y2x1ZGVCeVBhZ2VBY3Rpb24sIEV4Y2x1ZGVCeVRhZ0FjdGlvbiwgSnVtcFRvUGFnZUFjdGlvbiB9IGZyb20gXCIuL3J1bGVidWlsZGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJUYWdEdG8gfSBmcm9tIFwiLi9CdWlsZGVyVGFnXCI7XG5pbXBvcnQgeyBCdWlsZGVyVGFnLCBUYWdDb2xsZWN0aW9uIH0gZnJvbSBcIi4vQnVpbGRlclRhZ1wiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGVyUnVsZUR0byB9IGZyb20gXCIuL3J1bGVidWlsZGVyXCI7XG5pbXBvcnQgeyBCdWlsZGVyUnVsZSB9IGZyb20gXCIuL3J1bGVidWlsZGVyXCI7XG5pbXBvcnQgeyBEZWZhdWx0VGhlbWVDb21waWxlciB9IGZyb20gXCIuL3RoZW1lL2RlZmF1bHQtdGhlbWUtY29tcGlsZXJcIjtcbmltcG9ydCB7IEltYWdlRmlsZSB9IGZyb20gXCIuL21lZGlhLWZpbGVzXCI7XG5pbXBvcnQgeyBTY2hlbWFEdG8sIERVdGlsLCBQYWdlSUQsIFNjaGVtYUlEIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcbmltcG9ydCB7IFBhZ2VQcmVmaXggfSBmcm9tIFwiLi9wcmltaXRpdmVzL3BhZ2UtcHJlZml4XCI7XG5pbXBvcnQgeyBTY2hlbWFQcmVmaXgsIFNjaGVtYVByZWZpeFZhbHVlIH0gZnJvbSBcIi4vcHJpbWl0aXZlcy9zY2hlbWEtcHJlZml4XCI7XG5jb25zdCBVID0gRFV0aWw7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlclNjaGVtYUR0byB7XG4gIHJlYWRvbmx5IGlkOiBTY2hlbWFJRDtcbiAgcmVhZG9ubHkgcHJlZml4OiBTY2hlbWFQcmVmaXhWYWx1ZTtcbiAgcmVhZG9ubHkgbWFpbkltYWdlOiBJbWFnZUZpbGUgfCBmYWxzZTtcbiAgcmVhZG9ubHkgYmFja2dyb3VuZENvbG9yOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgcGFnZXM6IEJ1aWxkZXJQYWdlRHRvW107XG4gIHJlYWRvbmx5IGJhc2VIZWlnaHQ6IG51bWJlcjtcbiAgcmVhZG9ubHkgYmFzZVdpZHRoOiBudW1iZXI7XG4gIHJlYWRvbmx5IHJ1bGVzOiBSZWFkb25seUFycmF5PEJ1aWxkZXJSdWxlRHRvPjtcbiAgcmVhZG9ubHkgdGFnczogUmVhZG9ubHlBcnJheTxCdWlsZGVyVGFnRHRvPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY2hlbWFCdWlsZE91dHB1dCB7XG4gIHNjaGVtYTogU2NoZW1hRHRvO1xuICBjb2RlYm9vazogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgc2NoZW1hQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG5leHBvcnQgY2xhc3MgQnVpbGRlclNjaGVtYSB7XG4gIHJlYWRvbmx5IHByZWZpeDogU2NoZW1hUHJlZml4O1xuICBiYXNlSGVpZ2h0ID0gMTMwMDtcbiAgYmFzZVdpZHRoID0gMTAyNDtcbiAgYmFja2dyb3VuZENvbG9yID0gXCIjMDAwMDAwXCI7XG4gIHBhZ2VzOiBCdWlsZGVyUGFnZVtdID0gW107XG4gIG1haW5JbWFnZTogSW1hZ2VGaWxlIHwgZmFsc2UgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfcnVsZXM6IEJ1aWxkZXJSdWxlW10gPSBbXTtcbiAgZ2V0IHJ1bGVzKCk6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclJ1bGU+IHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX3J1bGVzXTtcbiAgfVxuXG4gIC8vIGdldCBwcmVmaXgoKTogU2NoZW1hUHJlZml4VmFsdWUge1xuICAvLyAgIHJldHVybiB0aGlzLl9wcmVmaXgudmFsdWU7XG4gIC8vIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF90YWdDb2xsZWN0aW9uOiBUYWdDb2xsZWN0aW9uID0gVGFnQ29sbGVjdGlvbi5jcmVhdGUoKTtcbiAgZ2V0IHRhZ3MoKTogUmVhZG9ubHlBcnJheTxCdWlsZGVyVGFnPiB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl90YWdDb2xsZWN0aW9uXTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZShpZDogU2NoZW1hSUQsIG5hbWU6IHN0cmluZywgcHJlZml4OiBTY2hlbWFQcmVmaXhWYWx1ZSkge1xuICAgIGNvbnN0IHNjaGVtYVByZWZpeCA9IFNjaGVtYVByZWZpeC5jYXN0T3JDcmVhdGVSYW5kb20ocHJlZml4KTtcbiAgICByZXR1cm4gbmV3IEJ1aWxkZXJTY2hlbWEoaWQsIG5hbWUsIHNjaGVtYVByZWZpeCk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGZyb21Kc29uKGR0bzogQnVpbGRlclNjaGVtYUR0byk6IEJ1aWxkZXJTY2hlbWEge1xuICAgIGNvbnN0IHNjaGVtYVByZWZpeCA9IFNjaGVtYVByZWZpeC5jYXN0T3JDcmVhdGVSYW5kb20oZHRvLnByZWZpeCk7XG4gICAgY29uc3Qgc2NoZW1hID0gbmV3IEJ1aWxkZXJTY2hlbWEoZHRvLmlkLCBkdG8ubmFtZSwgc2NoZW1hUHJlZml4KTtcbiAgICBjb25zdCBwYWdlcyA9IGR0by5wYWdlcy5tYXAoQnVpbGRlclBhZ2UuZnJvbUpzb24pO1xuICAgIHNjaGVtYS5fdGFnQ29sbGVjdGlvbi5pbml0KGR0by50YWdzKTtcbiAgICBzY2hlbWEuYmFja2dyb3VuZENvbG9yID0gZHRvLmJhY2tncm91bmRDb2xvcjtcbiAgICBzY2hlbWEuYmFzZUhlaWdodCA9IGR0by5iYXNlSGVpZ2h0O1xuICAgIHNjaGVtYS5iYXNlV2lkdGggPSBkdG8uYmFzZVdpZHRoO1xuICAgIHNjaGVtYS5wYWdlcyA9IHBhZ2VzO1xuICAgIHNjaGVtYS5iYWNrZ3JvdW5kQ29sb3IgPSBkdG8uYmFja2dyb3VuZENvbG9yO1xuICAgIHNjaGVtYS5tYWluSW1hZ2UgPSBkdG8ubWFpbkltYWdlID8/IGZhbHNlO1xuICAgIGNvbnN0IHJ1bGVzRHRvID0gZHRvLnJ1bGVzID8/IFtdO1xuICAgIGNvbnN0IHJ1bGVJbnB1dCA9IHNjaGVtYS5nZXRSdWxlSW5wdXQoKTtcbiAgICBzY2hlbWEuX3J1bGVzID0gcnVsZXNEdG8ubWFwKChyKSA9PiBCdWlsZGVyUnVsZS5mcm9tRHRvKHIsIHJ1bGVJbnB1dCkpO1xuICAgIHJldHVybiBzY2hlbWE7XG4gIH1cblxuICB0b0pzb24oKTogQnVpbGRlclNjaGVtYUR0byB7XG4gICAgY29uc3QgcGFnZXMgPSB0aGlzLnBhZ2VzLm1hcCgocCkgPT4gcC50b0pzb24oKSk7XG4gICAgY29uc3QgdGFncyA9IHRoaXMuX3RhZ0NvbGxlY3Rpb24udG9Kc29uKCk7XG4gICAgY29uc3QgcnVsZXMgPSB0aGlzLl9ydWxlcy5tYXAoKHJ1bGUpID0+IHJ1bGUudG9Kc29uKCkpO1xuXG4gICAgY29uc3QgZHRvOiBCdWlsZGVyU2NoZW1hRHRvID0ge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLmJhY2tncm91bmRDb2xvcixcbiAgICAgIGJhc2VIZWlnaHQ6IHRoaXMuYmFzZUhlaWdodCxcbiAgICAgIGJhc2VXaWR0aDogdGhpcy5iYXNlV2lkdGgsXG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIHBhZ2VzLFxuICAgICAgcnVsZXMsXG4gICAgICB0YWdzLFxuICAgICAgbWFpbkltYWdlOiB0aGlzLm1haW5JbWFnZSxcbiAgICAgIHByZWZpeDogdGhpcy5wcmVmaXgudmFsdWUsXG4gICAgfTtcbiAgICByZXR1cm4gZHRvO1xuICB9XG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGlkOiBTY2hlbWFJRCxcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nLFxuICAgIHByZWZpeDogU2NoZW1hUHJlZml4LFxuICApIHtcbiAgICB0aGlzLnByZWZpeCA9IHByZWZpeDtcbiAgfVxuXG4gIGFkZFBhZ2UodHlwZTogQnVpbGRlclBhZ2VUeXBlLCBhdEluZGV4ID0gLTEpOiBCdWlsZGVyUGFnZSB7XG4gICAgY29uc3QgcGFnZVByZWZpeCA9IFBhZ2VQcmVmaXguY3JlYXRlKCk7XG4gICAgY29uc3QgbmV3UGFnZSA9IEJ1aWxkZXJQYWdlLmNyZWF0ZSh0eXBlLCBwYWdlUHJlZml4LnZhbHVlKTtcbiAgICBpZiAoYXRJbmRleCA+PSAwICYmIGF0SW5kZXggPCB0aGlzLnBhZ2VzLmxlbmd0aCkge1xuICAgICAgdGhpcy5wYWdlcy5zcGxpY2UoYXRJbmRleCwgMCwgbmV3UGFnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFnZXMucHVzaChuZXdQYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1BhZ2U7XG4gIH1cblxuICBpbnNlcnRQYWdlKHBhZ2U6IEJ1aWxkZXJQYWdlLCBhdEluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pbnNlcnRQYWdlQXRJbmRleChwYWdlLCBhdEluZGV4KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5zZXJ0UGFnZUF0SW5kZXgocGFnZTogQnVpbGRlclBhZ2UsIGF0SW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IGlzVmFsaWRJbmRleCA9IFUuaXNJblJhbmdlKDAsIHRoaXMucGFnZXMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKCFpc1ZhbGlkSW5kZXgoYXRJbmRleCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZXhpc3RzID0gISF0aGlzLnBhZ2VzLmZpbmQoKHApID0+IHAuaWQgPT09IHBhZ2UuaWQpO1xuICAgIGlmIChleGlzdHMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5wYWdlcy5zcGxpY2UoYXRJbmRleCwgMCwgcGFnZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhZGRSdWxlKCkge1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5nZXRSdWxlSW5wdXQoKTtcbiAgICBjb25zdCBjb3VudCA9IHRoaXMuX3J1bGVzLmxlbmd0aCArIDE7XG4gICAgY29uc3QgbmFtZSA9IFwiUnVsZS1udW1iZXI6IFwiICsgY291bnQ7XG4gICAgY29uc3QgcnVsZSA9IEJ1aWxkZXJSdWxlLmZyb21EdG8oXG4gICAgICB7XG4gICAgICAgIGNvbmRpdGlvbnM6IFtdLFxuICAgICAgICB0eXBlOiBcImFsbFwiLFxuICAgICAgICBuYW1lLFxuICAgICAgICBleGNsdWRlVGFnczogW10sXG4gICAgICAgIGp1bXBUb1BhZ2U6IGZhbHNlLFxuICAgICAgICBleGNsdWRlUGFnZXM6IFtdLFxuICAgICAgfSxcbiAgICAgIGlucHV0LFxuICAgICk7XG4gICAgdGhpcy5fcnVsZXMucHVzaChydWxlKTtcbiAgICByZXR1cm4gcnVsZTtcbiAgfVxuICBkZWxldGVSdWxlKHJ1bGU6IEJ1aWxkZXJSdWxlKSB7XG4gICAgdGhpcy5fcnVsZXMgPSB0aGlzLl9ydWxlcy5maWx0ZXIoKHIpID0+IHIgIT09IHJ1bGUpO1xuICB9XG5cbiAgbW92ZVBhZ2UocGFnZTogQnVpbGRlclBhZ2UsIHRvSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wYWdlcy5pbmRleE9mKHBhZ2UpO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgaXNWYWxpZEluZGV4ID0gVS5pc0luUmFuZ2UoMCwgdGhpcy5wYWdlcy5sZW5ndGggLSAxKTtcbiAgICBpZiAoIWlzVmFsaWRJbmRleCh0b0luZGV4KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZygnTW92aW5nIGZyb20gOicgKyBpbmRleCArICcgdG86ICcgKyB0b0luZGV4KTtcbiAgICB0aGlzLnBhZ2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5wYWdlcy5zcGxpY2UodG9JbmRleCwgMCwgcGFnZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBkZWxldGVQYWdlKHBhZ2U6IEJ1aWxkZXJQYWdlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZmlsdGVyZWQgPSB0aGlzLnBhZ2VzLmZpbHRlcigocCkgPT4gcCAhPT0gcGFnZSk7XG4gICAgY29uc3QgZGlkRGVsZXRlID0gZmlsdGVyZWQubGVuZ3RoID09PSB0aGlzLnBhZ2VzLmxlbmd0aCAtIDE7XG4gICAgdGhpcy5wYWdlcyA9IGZpbHRlcmVkO1xuICAgIHJldHVybiBkaWREZWxldGU7XG4gIH1cblxuICByZWV2YWx1YXRlUnVsZXMoKSB7XG4gICAgY29uc29sZS5sb2coXCJSZWV2YWx1YXRpb25nIHJ1bGVzSW5wdXRcIik7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLmdldFJ1bGVJbnB1dCgpO1xuICAgIGNvbnN0IHJ1bGVzRHRvID0gdGhpcy5fcnVsZXMubWFwKChyKSA9PiByLnRvSnNvbigpKTtcbiAgICB0aGlzLl9ydWxlcyA9IHJ1bGVzRHRvLm1hcCgoZHRvKSA9PiBCdWlsZGVyUnVsZS5mcm9tRHRvKGR0bywgaW5wdXQpKTtcbiAgfVxuXG4gIGdldFJ1bGVJbnB1dCgpOiBSdWxlSW5wdXQge1xuICAgIGNvbnN0IHFWYXJzOiBRdWVzdGlvblZhcmlhYmxlW10gPSBbXTtcbiAgICBjb25zdCBjVmFyczogQ3VzdG9tVmFyaWFibGVbXSA9IFtdO1xuICAgIGNvbnN0IHBhZ2VJZEFjdGlvbnM6IEV4Y2x1ZGVCeVBhZ2VBY3Rpb25bXSA9IFtdO1xuICAgIGNvbnN0IHRhZ0FjdGlvbnM6IEV4Y2x1ZGVCeVRhZ0FjdGlvbltdID0gdGhpcy50YWdzLm1hcCgodCkgPT4ge1xuICAgICAgY29uc3QgdGFnID0gdC50YWdUZXh0O1xuICAgICAgY29uc3QgcGFnZUNvdW50ID0gdGhpcy5wYWdlcy5yZWR1Y2UoKGNvdW50LCBjdXJyKSA9PiB7XG4gICAgICAgIHJldHVybiBjdXJyLnRhZ3MuaW5jbHVkZXModGFnKSA/IGNvdW50ICsgMSA6IGNvdW50O1xuICAgICAgfSwgMCk7XG4gICAgICBjb25zdCBleGNsdWRlQnlUYWdEdG86IEV4Y2x1ZGVCeVRhZ0FjdGlvbiA9IHtcbiAgICAgICAga2luZDogXCJleGNsdWRlLWJ5LXRhZ1wiLFxuICAgICAgICBwYWdlQ291bnQsXG4gICAgICAgIHRhZyxcbiAgICAgICAgZGVzY3JpcHRpb246IHQudGFnRGVzY3JpcHRpb24sXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGV4Y2x1ZGVCeVRhZ0R0bztcbiAgICB9KTtcbiAgICBjb25zdCBqdW1wQWN0aW9uczogSnVtcFRvUGFnZUFjdGlvbltdID0gW107XG4gICAgdGhpcy5wYWdlcy5mb3JFYWNoKChwYWdlLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgcGFnZVZhcmlhYmxlcyA9IHBhZ2UuZ2V0UXVlc3Rpb25WYXJpYWJsZXModGhpcy5wcmVmaXgsIGluZGV4KTtcbiAgICAgIHFWYXJzLnB1c2goLi4ucGFnZVZhcmlhYmxlcyk7XG4gICAgICBjb25zdCBtYWluVGV4dCA9IHBhZ2UubWFpblRleHQudGV4dDtcbiAgICAgIGNvbnN0IHBhZ2VQcmVmaXggPSBwYWdlLnByZWZpeDtcbiAgICAgIGNvbnN0IGp1bXBBY3Rpb246IEp1bXBUb1BhZ2VBY3Rpb24gPSB7XG4gICAgICAgIGtpbmQ6IFwianVtcC10by1wYWdlXCIsXG4gICAgICAgIHBhZ2VJZDogcGFnZS5pZCxcbiAgICAgICAgcGFnZVByZWZpeCxcbiAgICAgICAgcGFnZU51bWJlcjogaW5kZXgsXG4gICAgICAgIG1haW5UZXh0OiBwYWdlLm1haW5UZXh0LnRleHQsXG4gICAgICB9O1xuICAgICAgY29uc3QgZXhjbHVkZVBhZ2VBY3Rpb246IEV4Y2x1ZGVCeVBhZ2VBY3Rpb24gPSB7XG4gICAgICAgIGtpbmQ6IFwiZXhjbHVkZS1ieS1wYWdlSWRcIixcbiAgICAgICAgcGFnZUlkOiBwYWdlLmlkLFxuICAgICAgICBwYWdlUHJlZml4LFxuICAgICAgICBwYWdlTnVtYmVyOiBpbmRleCxcbiAgICAgICAgbWFpblRleHQsXG4gICAgICB9O1xuICAgICAganVtcEFjdGlvbnMucHVzaChqdW1wQWN0aW9uKTtcbiAgICAgIHBhZ2VJZEFjdGlvbnMucHVzaChleGNsdWRlUGFnZUFjdGlvbik7XG4gICAgfSk7XG4gICAgY29uc3QgcnVsZUlucHV0ID0gbmV3IFJ1bGVJbnB1dChxVmFycywgY1ZhcnMsIHBhZ2VJZEFjdGlvbnMsIHRhZ0FjdGlvbnMsIGp1bXBBY3Rpb25zKTtcblxuICAgIHJldHVybiBydWxlSW5wdXQ7XG4gIH1cblxuICBkZWxldGVUYWdzKHRhZ3M6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclRhZz4pIHtcbiAgICB0aGlzLl90YWdDb2xsZWN0aW9uLmRlbGV0ZUFsbCh0YWdzKTtcbiAgfVxuXG4gIGFkZFRhZyhidWlsZGVyVGFnOiBCdWlsZGVyVGFnKSB7XG4gICAgdGhpcy5fdGFnQ29sbGVjdGlvbi5hZGQoYnVpbGRlclRhZyk7XG4gIH1cblxuICBjb21waWxlKCk6IFNjaGVtYUJ1aWxkT3V0cHV0IHtcbiAgICBjb25zdCBtb2R1bGVEdG8gPSB0aGlzLnRvSnNvbigpO1xuICAgIGNvbnN0IGltcCA9IG5ldyBEZWZhdWx0VGhlbWVDb21waWxlcigpO1xuICAgIGNvbnN0IHNjaGVtYSA9IGltcC5jb21waWxlKG1vZHVsZUR0byk7XG5cbiAgICByZXR1cm4geyBjb2RlYm9vazoge30sIHNjaGVtYSwgc2NoZW1hQ29uZmlnOiB7fSB9O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgQnVpbGRlck9iamVjdElkLCBCdWlsZGVyT2JqZWN0IH0gZnJvbSAnLi9CdWlsZGVyT2JqZWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZGVyVGV4dER0byB7XG4gIHJlYWRvbmx5IGlkOiBCdWlsZGVyT2JqZWN0SWQuVGV4dElEO1xuICB0ZXh0OiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgdHJhbnNsYXRpb25SZXF1aXJlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkZXJUZXh0IGV4dGVuZHMgQnVpbGRlck9iamVjdDwnYnVpbGRlci10ZXh0JywgQnVpbGRlclRleHREdG8+IHtcbiAgcmVhZG9ubHkgb2JqZWN0VHlwZSA9ICdidWlsZGVyLXRleHQnO1xuICBpZDogQnVpbGRlck9iamVjdElkLlRleHRJRDtcbiAgdGV4dCA9ICcnO1xuICBuYW1lID0gJyc7XG4gIHRyYW5zbGF0ZVJlcXVpcmVkID0gZmFsc2U7XG4gIC8vIGF1ZGlvOiB7aWQ6IEJ9XG4gIHByaXZhdGUgY29uc3RydWN0b3IoZHRvOiBCdWlsZGVyVGV4dER0bykge1xuICAgIHN1cGVyKGR0byk7XG4gICAgdGhpcy5pZCA9IGR0by5pZDtcbiAgICB0aGlzLnRyYW5zbGF0ZVJlcXVpcmVkID0gZHRvLnRyYW5zbGF0aW9uUmVxdWlyZWQ7XG4gICAgdGhpcy5uYW1lID0gZHRvLm5hbWU7XG4gICAgdGhpcy50ZXh0ID0gZHRvLnRleHQ7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZShuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpZCA9IEJ1aWxkZXJPYmplY3RJZC50ZXh0SWQoKTtcbiAgICBjb25zdCBkdG86IEJ1aWxkZXJUZXh0RHRvID0ge1xuICAgICAgaWQsXG4gICAgICBuYW1lLFxuICAgICAgdGV4dDogJycsXG4gICAgICB0cmFuc2xhdGlvblJlcXVpcmVkOiBmYWxzZVxuICAgIH07XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQnVpbGRlclRleHQoZHRvKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBmcm9tSnNvbihkdG86IEJ1aWxkZXJUZXh0RHRvKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQnVpbGRlclRleHQoZHRvKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICBjbG9uZSgpOiBCdWlsZGVyVGV4dER0byB7XG4gICAgY29uc3QgbmV3SWQgPSBCdWlsZGVyT2JqZWN0SWQudGV4dElkKCk7XG4gICAgY29uc3QgZHRvID0gdGhpcy50b0pzb24oKTtcbiAgICBjb25zdCB3aXRoTmV3SWQ6IEJ1aWxkZXJUZXh0RHRvID0geyAuLi5kdG8sIGlkOiBuZXdJZCB9O1xuICAgIHJldHVybiB3aXRoTmV3SWQ7XG4gIH1cblxuICB0b0pzb24oKTogQnVpbGRlclRleHREdG8ge1xuICAgIGNvbnN0IGR0bzogQnVpbGRlclRleHREdG8gPSB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIHRleHQ6IHRoaXMudGV4dCxcbiAgICAgIHRyYW5zbGF0aW9uUmVxdWlyZWQ6IHRoaXMudHJhbnNsYXRlUmVxdWlyZWRcbiAgICB9O1xuICAgIHJldHVybiBkdG87XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0FBLG9CQUFzQjtBQUV0QixJQUFNLElBQUk7QUFrQkgsSUFBVTtBQUFBLENBQVYsQ0FBVUEscUJBQVY7QUFNRSxFQUFNQSxpQkFBQSxjQUFjLE1BQWE7QUFDdEMsV0FBTyxTQUFTLGFBQWE7QUFBQSxFQUMvQjtBQUVPLEVBQU1BLGlCQUFBLGFBQWEsTUFBa0I7QUFDMUMsV0FBTyxTQUFTLG1CQUFtQjtBQUFBLEVBQ3JDO0FBQ08sRUFBTUEsaUJBQUEsU0FBUyxNQUFjO0FBQ2xDLFdBQU8sU0FBUyxjQUFjO0FBQUEsRUFDaEM7QUFFTyxFQUFNQSxpQkFBQSxtQkFBbUIsTUFBd0I7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QUVBLE9BQU8sWUFBd0I7QUFDN0IsU0FBSyxlQUFlLElBQUksVUFBVTtBQUFBLEVBQ3BDO0FBQUEsRUFFQSxVQUE2QjtBQUMzQixVQUFNLFlBQVksS0FBSyxPQUFPO0FBQzlCLFVBQU0sTUFBTSxJQUFJLHFCQUFxQjtBQUNyQyxVQUFNLFNBQVMsSUFBSSxRQUFRLFNBQVM7QUFFcEMsV0FBTyxFQUFFLFVBQVUsQ0FBQyxHQUFHLFFBQVEsY0FBYyxDQUFDLEVBQUU7QUFBQSxFQUNsRDtBQUNGOzs7QUMzT08sSUFBTSxjQUFOLE1BQU0scUJBQW9CLGNBQThDO0FBQUEsRUFDcEUsYUFBYTtBQUFBLEVBQ3RCO0FBQUEsRUFDQSxPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxvQkFBb0I7QUFBQTtBQUFBLEVBRVosWUFBWSxLQUFxQjtBQUN2QyxVQUFNLEdBQUc7QUFDVCxTQUFLLEtBQUssSUFBSTtBQUNkLFNBQUssb0JBQW9CLElBQUk7QUFDN0IsU0FBSyxPQUFPLElBQUk7QUFDaEIsU0FBSyxPQUFPLElBQUk7QUFBQSxFQUNsQjtBQUFBLEVBRUEsT0FBYyxPQUFPLE1BQWM7QUFDakMsVUFBTSxLQUFLLGdCQUFnQixPQUFPO0FBQ2xDLFVBQU0sTUFBc0I7QUFBQSxNQUMxQjtBQUFBLE1BQ0E7QUFBQSxNQUNBLE1BQU07QUFBQSxNQUNOLHFCQUFxQjtBQUFBLElBQ3ZCO0FBQ0EsVUFBTSxXQUFXLElBQUksYUFBWSxHQUFHO0FBQ3BDLFdBQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxPQUFjLFNBQVMsS0FBcUI7QUFDMUMsVUFBTSxXQUFXLElBQUksYUFBWSxHQUFHO0FBQ3BDLFdBQU87QUFBQSxFQUNUO0FBQUEsRUFFQSxRQUF3QjtBQUN0QixVQUFNLFFBQVEsZ0JBQWdCLE9BQU87QUFDckMsVUFBTSxNQUFNLEtBQUssT0FBTztBQUN4QixVQUFNLFlBQTRCLEVBQUUsR0FBRyxLQUFLLElBQUksTUFBTTtBQUN0RCxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBRUEsU0FBeUI7QUFDdkIsVUFBTSxNQUFzQjtBQUFBLE1BQzFCLElBQUksS0FBSztBQUFBLE1BQ1QsTUFBTSxLQUFLO0FBQUEsTUFDWCxNQUFNLEtBQUs7QUFBQSxNQUNYLHFCQUFxQixLQUFLO0FBQUEsSUFDNUI7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUNGOyIsCiAgIm5hbWVzIjogWyJCdWlsZGVyT2JqZWN0SWQiLCAiQnVpbGRlck9wdGlvblRoZW1lIiwgImltcG9ydF9lbmdpbmUiLCAiVSIsICJsYWJlbCIsICJCdWlsZGVyT3BlcmF0b3IiLCAidiIsICJvcCIsICJkdG8iLCAiaW1wb3J0X2VuZ2luZSIsICJEU3RhdGVQcm9wcyIsICJUaGVtZVV0aWxzIiwgImhpZGVDb21tYW5kIiwgInNob3dDb21tYW5kIiwgImltcG9ydF9lbmdpbmUiLCAiVSIsICJpbXBvcnRfZW5naW5lIiwgIlUiXQp9Cg==