gitlab-ci-local 4.41.0 → 4.41.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "Tired of pushing to test your .gitlab-ci.yml?",
4
4
  "main": "src/index.js",
5
5
  "bin": "src/index.js",
6
- "version": "4.41.0",
6
+ "version": "4.41.2",
7
7
  "scripts": {
8
8
  "pkg-linux": "pkg src/index.js --public -t node18-linux-x64 -o bin/linux/gitlab-ci-local && chmod +x bin/linux/gitlab-ci-local && gzip -c bin/linux/gitlab-ci-local > bin/linux.gz",
9
9
  "pkg-macos": "pkg src/index.js --public -t node18-macos-x64 -o bin/macos/gitlab-ci-local && gzip -c bin/macos/gitlab-ci-local > bin/macos.gz",
@@ -28,7 +28,7 @@
28
28
  "deep-extend": "0.6.0",
29
29
  "dotenv": "16.0.3",
30
30
  "execa": "5.1.1",
31
- "fs-extra": "10.1.0",
31
+ "fs-extra": "11.1.1",
32
32
  "globby": "11.1.0",
33
33
  "js-yaml": "4.1.0",
34
34
  "object-traversal": "1.0.1",
@@ -42,8 +42,7 @@
42
42
  "@types/camelcase": "5.2.0",
43
43
  "@types/checksum": "0.1.33",
44
44
  "@types/deep-extend": "0.6.0",
45
- "@types/fs-extra": "9.0.13",
46
- "@types/jest": "29.5.1",
45
+ "@types/fs-extra": "11.0.1",
47
46
  "@types/jest-when": "3.5.2",
48
47
  "@types/js-yaml": "4.0.5",
49
48
  "@types/pretty-hrtime": "1.0.1",
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.flattenLists = exports.defaults = exports.image = exports.services = exports.cache = exports.needs = exports.globalVariables = exports.imageComplex = exports.servicesComplex = exports.cacheComplex = exports.needsComplex = exports.complexObjects = exports.reference = exports.jobExtends = void 0;
29
+ exports.flattenLists = exports.globalVariables = exports.defaults = exports.imageEach = exports.imageComplex = exports.servicesEach = exports.servicesComplex = exports.cacheEach = exports.cacheComplex = exports.needsEach = exports.needsComplex = exports.extendsEach = exports.complexObjects = exports.reference = exports.jobExtends = void 0;
30
30
  const chalk_1 = __importDefault(require("chalk"));
31
31
  const deep_extend_1 = __importDefault(require("deep-extend"));
32
32
  const assert_1 = __importStar(require("assert"));
@@ -50,7 +50,6 @@ function jobExtends(gitlabData) {
50
50
  continue;
51
51
  if (Object.getPrototypeOf(jobData) !== Object.prototype)
52
52
  continue;
53
- jobData.extends = typeof jobData.extends === "string" ? [jobData.extends] : jobData.extends ?? [];
54
53
  const parentDatas = extendsRecurse(gitlabData, jobName, jobData, [], 0);
55
54
  gitlabData[jobName] = (0, deep_extend_1.default)({}, ...parentDatas, jobData);
56
55
  }
@@ -102,15 +101,25 @@ function complexObjects(gitlabData) {
102
101
  continue;
103
102
  if (typeof jobData === "string")
104
103
  continue;
105
- needs(jobName, gitlabData);
106
- cache(jobName, gitlabData);
107
- services(jobName, gitlabData);
108
- image(jobName, gitlabData);
104
+ extendsEach(jobName, gitlabData);
105
+ needsEach(jobName, gitlabData);
106
+ cacheEach(jobName, gitlabData);
107
+ servicesEach(jobName, gitlabData);
108
+ imageEach(jobName, gitlabData);
109
109
  if (jobData.script)
110
110
  jobData.script = typeof jobData.script === "string" ? [jobData.script] : jobData.script;
111
111
  }
112
112
  }
113
113
  exports.complexObjects = complexObjects;
114
+ function extendsEach(jobName, gitlabData) {
115
+ const jobData = gitlabData[jobName];
116
+ if (!jobData.extends)
117
+ return;
118
+ jobData.extends = typeof jobData.extends === "string" ? [jobData.extends] : jobData.extends;
119
+ reference(gitlabData, jobData.extends);
120
+ jobData.extends = jobData.extends.flat(5);
121
+ }
122
+ exports.extendsEach = extendsEach;
114
123
  function needsComplex(data) {
115
124
  return {
116
125
  job: data.job ?? data,
@@ -121,43 +130,7 @@ function needsComplex(data) {
121
130
  };
122
131
  }
123
132
  exports.needsComplex = needsComplex;
124
- function cacheComplex(data) {
125
- return {
126
- key: data.key,
127
- paths: data.paths,
128
- policy: data.policy ?? "pull-push",
129
- when: data.when ?? "on_success",
130
- };
131
- }
132
- exports.cacheComplex = cacheComplex;
133
- function servicesComplex(data) {
134
- return {
135
- name: typeof data === "string" ? data : data.name,
136
- entrypoint: data.entrypoint,
137
- command: data.command,
138
- alias: data.alias,
139
- variables: data.variables,
140
- };
141
- }
142
- exports.servicesComplex = servicesComplex;
143
- function imageComplex(data) {
144
- if (data == null)
145
- return data;
146
- return {
147
- name: typeof data === "string" ? data : data.name,
148
- entrypoint: data.entrypoint,
149
- };
150
- }
151
- exports.imageComplex = imageComplex;
152
- function globalVariables(gitlabData) {
153
- for (const [key, value] of Object.entries(gitlabData.variables ?? {})) {
154
- if (typeof value == "object" && !Array.isArray(value)) {
155
- gitlabData.variables[key] = value["value"];
156
- }
157
- }
158
- }
159
- exports.globalVariables = globalVariables;
160
- function needs(jobName, gitlabData) {
133
+ function needsEach(jobName, gitlabData) {
161
134
  const jobData = gitlabData[jobName];
162
135
  if (!jobData.needs)
163
136
  return;
@@ -167,8 +140,17 @@ function needs(jobName, gitlabData) {
167
140
  jobData.needs[i] = needsComplex(n);
168
141
  }
169
142
  }
170
- exports.needs = needs;
171
- function cache(jobName, gitlabData) {
143
+ exports.needsEach = needsEach;
144
+ function cacheComplex(data) {
145
+ return {
146
+ key: data.key,
147
+ paths: data.paths,
148
+ policy: data.policy ?? "pull-push",
149
+ when: data.when ?? "on_success",
150
+ };
151
+ }
152
+ exports.cacheComplex = cacheComplex;
153
+ function cacheEach(jobName, gitlabData) {
172
154
  const jobData = gitlabData[jobName];
173
155
  const cache = jobData.cache;
174
156
  if (!cache)
@@ -180,8 +162,18 @@ function cache(jobName, gitlabData) {
180
162
  jobData.cache[i] = cacheComplex(c);
181
163
  }
182
164
  }
183
- exports.cache = cache;
184
- function services(jobName, gitlabData) {
165
+ exports.cacheEach = cacheEach;
166
+ function servicesComplex(data) {
167
+ return {
168
+ name: typeof data === "string" ? data : data.name,
169
+ entrypoint: data.entrypoint,
170
+ command: data.command,
171
+ alias: data.alias,
172
+ variables: data.variables,
173
+ };
174
+ }
175
+ exports.servicesComplex = servicesComplex;
176
+ function servicesEach(jobName, gitlabData) {
185
177
  const jobData = gitlabData[jobName];
186
178
  const services = jobData.services;
187
179
  if (!services)
@@ -193,16 +185,25 @@ function services(jobName, gitlabData) {
193
185
  jobData.services[i] = servicesComplex(s);
194
186
  }
195
187
  }
196
- exports.services = services;
197
- function image(jobName, gitlabData) {
188
+ exports.servicesEach = servicesEach;
189
+ function imageComplex(data) {
190
+ if (data == null)
191
+ return data;
192
+ return {
193
+ name: typeof data === "string" ? data : data.name,
194
+ entrypoint: data.entrypoint,
195
+ };
196
+ }
197
+ exports.imageComplex = imageComplex;
198
+ function imageEach(jobName, gitlabData) {
198
199
  const jobData = gitlabData[jobName];
199
200
  const image = jobData.image;
200
201
  if (!image)
201
202
  return;
202
- reference(gitlabData, jobData.image);
203
+ reference(gitlabData, jobData);
203
204
  jobData.image = imageComplex(jobData.image);
204
205
  }
205
- exports.image = image;
206
+ exports.imageEach = imageEach;
206
207
  function defaults(gitlabData) {
207
208
  const cacheData = gitlabData.default?.cache ?? gitlabData.cache;
208
209
  let cache = null;
@@ -244,6 +245,14 @@ function defaults(gitlabData) {
244
245
  }
245
246
  }
246
247
  exports.defaults = defaults;
248
+ function globalVariables(gitlabData) {
249
+ for (const [key, value] of Object.entries(gitlabData.variables ?? {})) {
250
+ if (typeof value == "object" && !Array.isArray(value)) {
251
+ gitlabData.variables[key] = value["value"];
252
+ }
253
+ }
254
+ }
255
+ exports.globalVariables = globalVariables;
247
256
  function flattenLists(gitlabData) {
248
257
  (0, object_traversal_1.traverse)(gitlabData, ({ parent, key, value }) => {
249
258
  if (!Array.isArray(value) || parent == null || typeof key != "string")
@@ -252,4 +261,4 @@ function flattenLists(gitlabData) {
252
261
  });
253
262
  }
254
263
  exports.flattenLists = flattenLists;
255
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1leHBhbmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRhdGEtZXhwYW5kZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrREFBMEI7QUFDMUIsOERBQXFDO0FBQ3JDLGlEQUE4QztBQUM5QywrQkFBMEI7QUFDMUIsdURBQTBDO0FBRTFDLE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQztBQUMzQixNQUFNLGNBQWMsR0FBRyxDQUFDLFVBQWUsRUFBRSxPQUFlLEVBQUUsT0FBWSxFQUFFLE9BQWMsRUFBRSxLQUFhLEVBQUUsRUFBRTtJQUNyRyxJQUFBLGdCQUFNLEVBQUMsS0FBSyxHQUFHLGVBQWUsRUFBRSxJQUFBLGVBQUssRUFBQSxlQUFlLE9BQU8sZ0RBQWdELENBQUMsQ0FBQztJQUM3RyxLQUFLLEVBQUUsQ0FBQztJQUNSLEtBQUssTUFBTSxVQUFVLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxFQUFFO1FBQzlDLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQyxJQUFBLGdCQUFNLEVBQUMsVUFBVSxJQUFJLElBQUksRUFBRSxJQUFBLGVBQUssRUFBQSxlQUFlLFVBQVUseUNBQXlDLE9BQU8sV0FBVyxDQUFDLENBQUM7UUFDdEgsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNuRSxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQzVCO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDbkIsQ0FBQyxDQUFDO0FBRUYsU0FBZ0IsVUFBVSxDQUFFLFVBQWU7SUFDdkMsS0FBSyxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQU0sVUFBVSxDQUFDLEVBQUU7UUFDOUQsSUFBSSxTQUFH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LENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUxELG9DQUtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IGRlZXBFeHRlbmQgZnJvbSBcImRlZXAtZXh0ZW5kXCI7XG5pbXBvcnQgYXNzZXJ0LCB7QXNzZXJ0aW9uRXJyb3J9IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7Sm9ifSBmcm9tIFwiLi9qb2JcIjtcbmltcG9ydCB7dHJhdmVyc2V9IGZyb20gXCJvYmplY3QtdHJhdmVyc2FsXCI7XG5cbmNvbnN0IGV4dGVuZHNNYXhEZXB0aCA9IDExO1xuY29uc3QgZXh0ZW5kc1JlY3Vyc2UgPSAoZ2l0bGFiRGF0YTogYW55LCBqb2JOYW1lOiBzdHJpbmcsIGpvYkRhdGE6IGFueSwgcGFyZW50czogYW55W10sIGRlcHRoOiBudW1iZXIpID0+IHtcbiAgICBhc3NlcnQoZGVwdGggPCBleHRlbmRzTWF4RGVwdGgsIGNoYWxrYHtibHVlQnJpZ2h0ICR7am9iTmFtZX19OiBjaXJjdWxhciBkZXBlbmRlbmN5IGRldGVjdGVkIGluIFxcYGV4dGVuZHNcXGBgKTtcbiAgICBkZXB0aCsrO1xuICAgIGZvciAoY29uc3QgcGFyZW50TmFtZSBvZiAoam9iRGF0YS5leHRlbmRzIHx8IFtdKSkge1xuICAgICAgICBjb25zdCBwYXJlbnREYXRhID0gZ2l0bGFiRGF0YVtwYXJlbnROYW1lXTtcbiAgICAgICAgYXNzZXJ0KHBhcmVudERhdGEgIT0gbnVsbCwgY2hhbGtge2JsdWVCcmlnaHQgJHtwYXJlbnROYW1lfX0gaXMgdW5zcGVjaWZpZWQsIHVzZWQgYnkge2JsdWVCcmlnaHQgJHtqb2JOYW1lfX0gZXh0ZW5kc2ApO1xuICAgICAgICBleHRlbmRzUmVjdXJzZShnaXRsYWJEYXRhLCBwYXJlbnROYW1lLCBwYXJlbnREYXRhLCBwYXJlbnRzLCBkZXB0aCk7XG4gICAgICAgIHBhcmVudHMucHVzaChwYXJlbnREYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmVudHM7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gam9iRXh0ZW5kcyAoZ2l0bGFiRGF0YTogYW55KSB7XG4gICAgZm9yIChjb25zdCBbam9iTmFtZSwgam9iRGF0YV0gb2YgT2JqZWN0LmVudHJpZXM8YW55PihnaXRsYWJEYXRhKSkge1xuICAgICAgICBpZiAoSm9iLmlsbGVnYWxKb2JOYW1lcy5oYXMoam9iTmFtZSkpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKGpvYkRhdGEpICE9PSBPYmplY3QucHJvdG90eXBlKSBjb250aW51ZTtcbiAgICAgICAgam9iRGF0YS5leHRlbmRzID0gdHlwZW9mIGpvYkRhdGEuZXh0ZW5kcyA9PT0gXCJzdHJpbmdcIiA/IFtqb2JEYXRhLmV4dGVuZHNdIDogam9iRGF0YS5leHRlbmRzID8/IFtdO1xuICAgICAgICBjb25zdCBwYXJlbnREYXRhcyA9IGV4dGVuZHNSZWN1cnNlKGdpdGxhYkRhdGEsIGpvYk5hbWUsIGpvYkRhdGEsIFtdLCAwKTtcbiAgICAgICAgZ2l0bGFiRGF0YVtqb2JOYW1lXSA9IGRlZXBFeHRlbmQoe30sIC4uLnBhcmVudERhdGFzLCBqb2JEYXRhKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtqb2JOYW1lLCBqb2JEYXRhXSBvZiBPYmplY3QuZW50cmllczxhbnk+KGdpdGxhYkRhdGEpKSB7XG4gICAgICAgIGlmIChKb2IuaWxsZWdhbEpvYk5hbWVzLmhhcyhqb2JOYW1lKSkgY29udGludWU7XG4gICAgICAgIGlmIChPYmplY3QuZ2V0UHJvdG90eXBlT2Yoam9iRGF0YSkgIT09IE9iamVjdC5wcm90b3R5cGUpIGNvbnRpbnVlO1xuICAgICAgICBkZWxldGUgam9iRGF0YS5leHRlbmRzO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZSAoZ2l0bGFiRGF0YTogYW55LCByZWN1cnNlRGF0YTogYW55KSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXM8YW55PihyZWN1cnNlRGF0YSB8fCB7fSkpIHtcbiAgICAgICAgaWYgKHZhbHVlPy5yZWZlcmVuY2VEYXRhKSB7XG4gICAgICAgICAgICByZWN1cnNlRGF0YVtrZXldID0gZ2V0U3ViRGF0YUJ5UmVmZXJlbmNlKGdpdGxhYkRhdGEsIHZhbHVlLnJlZmVyZW5jZURhdGEpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmVmZXJlbmNlKGdpdGxhYkRhdGEsIHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNDaXJjdWxhckNoYWluKHJlY3Vyc2VEYXRhKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKHttZXNzYWdlOiBgIXJlZmVyZW5jZSBjaXJjdWxhciBjaGFpbiBkZXRlY3RlZCBbJHt2YWx1ZS5yZWZlcmVuY2VEYXRhfV1gfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNvbnN0IGdldFN1YkRhdGFCeVJlZmVyZW5jZSA9IChnaXRsYWJEYXRhOiBhbnksIHJlZmVyZW5jZURhdGE6IHN0cmluZ1tdKSA9PiB7XG4gICAgbGV0IGdpdGxhYlN1YkRhdGEgPSBnaXRsYWJEYXRhO1xuICAgIHJlZmVyZW5jZURhdGEuZm9yRWFjaCgocmVmZXJlbmNlUG9pbnRlcikgPT4ge1xuICAgICAgICBhc3NlcnQoZ2l0bGFiU3ViRGF0YVtyZWZlcmVuY2VQb2ludGVyXSAhPSBudWxsLCBgIXJlZmVyZW5jZSBbJHtyZWZlcmVuY2VEYXRhLmpvaW4oXCIsIFwiKX1dIGlzIHVuZGVmaW5lZGApO1xuICAgICAgICBnaXRsYWJTdWJEYXRhID0gZ2l0bGFiU3ViRGF0YVtyZWZlcmVuY2VQb2ludGVyXTtcbiAgICB9KTtcbiAgICByZXR1cm4gZ2l0bGFiU3ViRGF0YTtcbn07XG5cbmZ1bmN0aW9uIGhhc0NpcmN1bGFyQ2hhaW4gKGRhdGE6IGFueSkge1xuICAgIHRyeSB7XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBUeXBlRXJyb3IgJiYgZS5tZXNzYWdlLnN0YXJ0c1dpdGgoXCJDb252ZXJ0aW5nIGNpcmN1bGFyIHN0cnVjdHVyZSB0byBKU09OXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wbGV4T2JqZWN0cyAoZ2l0bGFiRGF0YTogYW55KSB7XG4gICAgZm9yIChjb25zdCBbam9iTmFtZSwgam9iRGF0YV0gb2YgT2JqZWN0LmVudHJpZXM8YW55PihnaXRsYWJEYXRhKSkge1xuICAgICAgICBpZiAoSm9iLmlsbGVnYWxKb2JOYW1lcy5oYXMoam9iTmFtZSkpIGNvbnRpbnVlO1xuICAgICAgICBpZiAodHlwZW9mIGpvYkRhdGEgPT09IFwic3RyaW5nXCIpIGNvbnRpbnVlO1xuICAgICAgICBuZWVkcyhqb2JOYW1lLCBnaXRsYWJEYXRhKTtcbiAgICAgICAgY2FjaGUoam9iTmFtZSwgZ2l0bGFiRGF0YSk7XG4gICAgICAgIHNlcnZpY2VzKGpvYk5hbWUsIGdpdGxhYkRhdGEpO1xuICAgICAgICBpbWFnZShqb2JOYW1lLCBnaXRsYWJEYXRhKTtcbiAgICAgICAgaWYgKGpvYkRhdGEuc2NyaXB0KSBqb2JEYXRhLnNjcmlwdCA9IHR5cGVvZiBqb2JEYXRhLnNjcmlwdCA9PT0gXCJzdHJpbmdcIiA/IFtqb2JEYXRhLnNjcmlwdF0gOiBqb2JEYXRhLnNjcmlwdDtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWVkc0NvbXBsZXggKGRhdGE6IGFueSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGpvYjogZGF0YS5qb2IgPz8gZGF0YSxcbiAgICAgICAgYXJ0aWZhY3RzOiBkYXRhLmFydGlmYWN0cyA/PyB0cnVlLFxuICAgICAgICBvcHRpb25hbDogZGF0YS5vcHRpb25hbCA/PyBmYWxzZSxcbiAgICAgICAgcGlwZWxpbmU6IGRhdGEucGlwZWxpbmUgPz8gbnVsbCxcbiAgICAgICAgcHJvamVjdDogZGF0YS5wcm9qZWN0ID8/IG51bGwsXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlQ29tcGxleCAoZGF0YTogYW55KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBkYXRhLmtleSxcbiAgICAgICAgcGF0aHM6IGRhdGEucGF0aHMsXG4gICAgICAgIHBvbGljeTogZGF0YS5wb2xpY3kgPz8gXCJwdWxsLXB1c2hcIixcbiAgICAgICAgd2hlbjogZGF0YS53aGVuID8/IFwib25fc3VjY2Vzc1wiLFxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2aWNlc0NvbXBsZXggKGRhdGE6IGFueSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiID8gZGF0YSA6IGRhdGEubmFtZSxcbiAgICAgICAgZW50cnlwb2ludDogZGF0YS5lbnRyeXBvaW50LFxuICAgICAgICBjb21tYW5kOiBkYXRhLmNvbW1hbmQsXG4gICAgICAgIGFsaWFzOiBkYXRhLmFsaWFzLFxuICAgICAgICB2YXJpYWJsZXM6IGRhdGEudmFyaWFibGVzLFxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbWFnZUNvbXBsZXggKGRhdGE6IGFueSkge1xuICAgIGlmIChkYXRhID09IG51bGwpIHJldHVybiBkYXRhO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiID8gZGF0YSA6IGRhdGEubmFtZSxcbiAgICAgICAgZW50cnlwb2ludDogZGF0YS5lbnRyeXBvaW50LFxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnbG9iYWxWYXJpYWJsZXMgKGdpdGxhYkRhdGE6IGFueSkge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzPGFueT4oZ2l0bGFiRGF0YS52YXJpYWJsZXMgPz8ge30pKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGdpdGxhYkRhdGEudmFyaWFibGVzW2tleV0gPSB2YWx1ZVtcInZhbHVlXCJdO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVlZHMgKGpvYk5hbWU6IHN0cmluZywgZ2l0bGFiRGF0YTogYW55KSB7XG4gICAgY29uc3Qgam9iRGF0YSA9IGdpdGxhYkRhdGFbam9iTmFtZV07XG4gICAgaWYgKCFqb2JEYXRhLm5lZWRzKSByZXR1cm47XG5cbiAgICByZWZlcmVuY2UoZ2l0bGFiRGF0YSwgam9iRGF0YS5uZWVkcyk7XG4gICAgam9iRGF0YS5uZWVkcyA9IGpvYkRhdGEubmVlZHMuZmxhdCg1KTtcbiAgICBmb3IgKGNvbnN0IFtpLCBuXSBvZiBPYmplY3QuZW50cmllczxhbnk+KGpvYkRhdGEubmVlZHMpKSB7XG4gICAgICAgIGpvYkRhdGEubmVlZHNbaV0gPSBuZWVkc0NvbXBsZXgobik7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FjaGUgKGpvYk5hbWU6IHN0cmluZywgZ2l0bGFiRGF0YTogYW55KSB7XG4gICAgY29uc3Qgam9iRGF0YSA9IGdpdGxhYkRhdGFbam9iTmFtZV07XG4gICAgY29uc3QgY2FjaGUgPSBqb2JEYXRhLmNhY2hlO1xuICAgIGlmICghY2FjaGUpIHJldHVybjtcblxuICAgIGpvYkRhdGEuY2FjaGUgPSBBcnJheS5pc0FycmF5KGNhY2hlKSA/IGNhY2hlIDogW2NhY2hlXTtcbiAgICByZWZlcmVuY2UoZ2l0bGFiRGF0YSwgam9iRGF0YS5jYWNoZSk7XG4gICAgam9iRGF0YS5jYWNoZSA9IGpvYkRhdGEuY2FjaGUuZmxhdCg1KTtcbiAgICBmb3IgKGNvbnN0IFtpLCBjXSBvZiBPYmplY3QuZW50cmllczxhbnk+KGpvYkRhdGEuY2FjaGUpKSB7XG4gICAgICAgIGpvYkRhdGEuY2FjaGVbaV0gPSBjYWNoZUNvbXBsZXgoYyk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VydmljZXMgKGpvYk5hbWU6IHN0cmluZywgZ2l0bGFiRGF0YTogYW55KSB7XG4gICAgY29uc3Qgam9iRGF0YSA9IGdpdGxhYkRhdGFbam9iTmFtZV07XG4gICAgY29uc3Qgc2VydmljZXMgPSBqb2JEYXRhLnNlcnZpY2VzO1xuICAgIGlmICghc2VydmljZXMpIHJldHVybjtcblxuICAgIHJlZmVyZW5jZShnaXRsYWJEYXRhLCBqb2JEYXRhLnNlcnZpY2VzKTtcbiAgICBqb2JEYXRhLnNlcnZpY2VzID0gam9iRGF0YS5zZXJ2aWNlcy5mbGF0KDUpO1xuICAgIGpvYkRhdGEuc2VydmljZXMgPSBzZXJ2aWNlcztcblxuICAgIGZvciAoY29uc3QgW2ksIHNdIG9mIE9iamVjdC5lbnRyaWVzPGFueT4oam9iRGF0YS5zZXJ2aWNlcykpIHtcbiAgICAgICAgam9iRGF0YS5zZXJ2aWNlc1tpXSA9IHNlcnZpY2VzQ29tcGxleChzKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbWFnZSAoam9iTmFtZTogc3RyaW5nLCBnaXRsYWJEYXRhOiBhbnkpIHtcbiAgICBjb25zdCBqb2JEYXRhID0gZ2l0bGFiRGF0YVtqb2JOYW1lXTtcbiAgICBjb25zdCBpbWFnZSA9IGpvYkRhdGEuaW1hZ2U7XG4gICAgaWYgKCFpbWFnZSkgcmV0dXJuO1xuXG4gICAgcmVmZXJlbmNlKGdpdGxhYkRhdGEsIGpvYkRhdGEuaW1hZ2UpO1xuICAgIGpvYkRhdGEuaW1hZ2UgPSBpbWFnZUNvbXBsZXgoam9iRGF0YS5pbWFnZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0cyAoZ2l0bGFiRGF0YTogYW55KSB7XG4gICAgY29uc3QgY2FjaGVEYXRhID0gZ2l0bGFiRGF0YS5kZWZhdWx0Py5jYWNoZSA/PyBnaXRsYWJEYXRhLmNhY2hlO1xuICAgIGxldCBjYWNoZSA9IG51bGw7XG4gICAgaWYgKGNhY2hlRGF0YSkge1xuICAgICAgICBjYWNoZSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGMgb2YgQXJyYXkuaXNBcnJheShjYWNoZURhdGEpID8gY2FjaGVEYXRhIDogW2NhY2hlRGF0YV0pIHtcbiAgICAgICAgICAgIGNhY2hlLnB1c2goY2FjaGVDb21wbGV4KGMpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNlcnZpY2VEYXRhID0gZ2l0bGFiRGF0YS5kZWZhdWx0Py5zZXJ2aWNlcyA/PyBnaXRsYWJEYXRhLnNlcnZpY2VzO1xuICAgIGxldCBzZXJ2aWNlcyA9IG51bGw7XG4gICAgaWYgKHNlcnZpY2VEYXRhKSB7XG4gICAgICAgIHNlcnZpY2VzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcyBvZiBzZXJ2aWNlRGF0YSkge1xuICAgICAgICAgICAgc2VydmljZXMucHVzaChzZXJ2aWNlc0NvbXBsZXgocykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaW1hZ2UgPSBpbWFnZUNvbXBsZXgoZ2l0bGFiRGF0YS5kZWZhdWx0Py5pbWFnZSA/PyBnaXRsYWJEYXRhLmltYWdlKTtcbiAgICBjb25zdCBhcnRpZmFjdHMgPSBnaXRsYWJEYXRhLmRlZmF1bHQ/LmFydGlmYWN0cyA/PyBnaXRsYWJEYXRhLmFydGlmYWN0cztcbiAgICBjb25zdCBiZWZvcmVTY3JpcHQgPSBnaXRsYWJEYXRhLmRlZmF1bHQ/LmJlZm9yZV9zY3JpcHQgPz8gZ2l0bGFiRGF0YS5iZWZvcmVfc2NyaXB0O1xuICAgIGNvbnN0IGFmdGVyU2NyaXB0ID0gZ2l0bGFiRGF0YS5kZWZhdWx0Py5hZnRlcl9zY3JpcHQgPz8gZ2l0bGFiRGF0YS5hZnRlcl9zY3JpcHQ7XG5cbiAgICBmb3IgKGNvbnN0IFtqb2JOYW1lLCBqb2JEYXRhXSBvZiBPYmplY3QuZW50cmllczxhbnk+KGdpdGxhYkRhdGEpKSB7XG4gICAgICAgIGlmIChKb2IuaWxsZWdhbEpvYk5hbWVzLmhhcyhqb2JOYW1lKSkgY29udGludWU7XG4gICAgICAgIGlmICh0eXBlb2Ygam9iRGF0YSA9PT0gXCJzdHJpbmdcIikgY29udGludWU7XG4gICAgICAgIGlmICgham9iRGF0YS5hcnRpZmFjdHMgJiYgYXJ0aWZhY3RzKSBqb2JEYXRhLmFydGlmYWN0cyA9IGFydGlmYWN0cztcbiAgICAgICAgaWYgKCFqb2JEYXRhLmNhY2hlICYmIGNhY2hlKSBqb2JEYXRhLmNhY2hlID0gY2FjaGU7XG4gICAgICAgIGlmICgham9iRGF0YS5zZXJ2aWNlcyAmJiBzZXJ2aWNlcykgam9iRGF0YS5zZXJ2aWNlcyA9IHNlcnZpY2VzO1xuICAgICAgICBpZiAoIWpvYkRhdGEuaW1hZ2UgJiYgaW1hZ2UpIGpvYkRhdGEuaW1hZ2UgPSBpbWFnZTtcbiAgICAgICAgaWYgKCFqb2JEYXRhLmFmdGVyX3NjcmlwdCAmJiBhZnRlclNjcmlwdCkgam9iRGF0YS5hZnRlcl9zY3JpcHQgPSBhZnRlclNjcmlwdDtcbiAgICAgICAgaWYgKCFqb2JEYXRhLmJlZm9yZV9zY3JpcHQgJiYgYmVmb3JlU2NyaXB0KSBqb2JEYXRhLmJlZm9yZV9zY3JpcHQgPSBiZWZvcmVTY3JpcHQ7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbkxpc3RzIChnaXRsYWJEYXRhOiBhbnkpIHtcbiAgICB0cmF2ZXJzZShnaXRsYWJEYXRhLCAoe3BhcmVudCwga2V5LCB2YWx1ZX0pID0+IHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSB8fCBwYXJlbnQgPT0gbnVsbCB8fCB0eXBlb2Yga2V5ICE9IFwic3RyaW5nXCIpIHJldHVybjtcbiAgICAgICAgcGFyZW50W2tleV0gPSB2YWx1ZS5mbGF0KDUpO1xuICAgIH0pO1xufVxuIl19
264
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1leHBhbmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRhdGEtZXhwYW5kZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrREFBMEI7QUFDMUIsOERBQXFDO0FBQ3JDLGlEQUE4QztBQUM5QywrQkFBMEI7QUFDMUIsdURBQTBDO0FBRTFDLE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQztBQUMzQixNQUFNLGNBQWMsR0FBRyxDQUFDLFVBQWUsRUFBRSxPQUFlLEVBQUUsT0FBWSxFQUFFLE9BQWMsRUFBRSxLQUFhLEVBQUUsRUFBRTtJQUNyRyxJQUFBLGdCQUFNLEVBQUMsS0FBSyxHQUFHLGVBQWUsRUFBRSxJQUFBLGVBQUssRUFBQSxlQUFlLE9BQU8sZ0RBQWdELENBQUMsQ0FBQztJQUM3RyxLQUFLLEVBQUUsQ0FBQztJQUNSLEtBQUssTUFBTSxVQUFVLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxFQUFFO1FBQzlDLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQyxJQUFBLGdCQUFNLEVBQUMsVUFBVSxJQUFJLElBQUksRUFBRSxJQUFBLGVBQUssRUFBQSxlQUFlLFVBQVUseUNBQXlDLE9BQU8sV0FBVyxDQUFDLENBQUM7UUFDdEgsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNuRSxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQzVCO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDbkIsQ0FBQyxDQUFDO0FBRUYsU0FBZ0IsVUFBVSxDQUFFLFVBQWU7SUFDdkMsS0FBSyxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQU0sVUFBVSxDQUFDLEVBQUU7UUFDOUQsSUFBSSxTQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7WUFBRSxTQUFTO1FBQy9DLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxNQUFNLENBQUMsU0FBUztZQUFFLFNBQVM7UUFDbEUsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4RSxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBQSxxQkFBVSxFQUFDLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztLQUNqRTtJQUVELEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFNLFVBQVUsQ0FBQyxFQUFFO1FBQzlELElBQUksU0FBRyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1lBQUUsU0FBUztRQUMvQyxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEtBQUssTUFBTSxDQUFDLFNBQVM7WUFBRSxTQUFTO1FBQ2xFLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQztLQUMxQjtBQUNMLENBQUM7QUFiRCxnQ0FhQztBQUVELFNBQWdCLFNBQVMsQ0FBRSxVQUFlLEVBQUUsV0FBZ0I7SUFDeEQsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQU0sV0FBVyxJQUFJLEVBQUUsQ0FBQyxFQUFFO1FBQy9ELElBQUksS0FBSyxFQUFFLGFBQWEsRUFBRTtZQUN0QixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcscUJBQXFCLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUM3RTthQUFNLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQ2xDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDaEM7UUFFRCxJQUFJLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQy9CLE1BQU0sSUFBSSx1QkFBYyxDQUFDLEVBQUMsT0FBTyxFQUFFLHVDQUF1QyxLQUFLLENBQUMsYUFBYSxHQUFHLEVBQUMsQ0FBQyxDQUFDO1NBQ3RHO0tBQ0o7QUFDTCxDQUFDO0FBWkQsOEJBWUM7QUFFRCxNQUFNLHFCQUFxQixHQUFHLENBQUMsVUFBZSxFQUFFLGFBQXVCLEVBQUUsRUFBRTtJQUN2RSxJQUFJLGFBQWEsR0FBRyxVQUFVLENBQUM7SUFDL0IsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEVBQUU7UUFDdkMsSUFBQSxnQkFBTSxFQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLElBQUksRUFBRSxlQUFlLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDekcsYUFBYSxHQUFHLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3BELENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxhQUFhLENBQUM7QUFDekIsQ0FBQyxDQUFDO0FBRUYsU0FBUyxnQkFBZ0IsQ0FBRSxJQUFTO0lBQ2hDLElBQUk7UUFDQSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3hCO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDUixJQUFJLENBQUMsWUFBWSxTQUFTLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsdUNBQXVDLENBQUMsRUFBRTtZQUN6RixPQUFPLElBQUksQ0FBQztTQUNmO0tBQ0o7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDO0FBRUQsU0FBZ0IsY0FBYyxDQUFFLFVBQWU7SUFDM0MsS0FBSyxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQU0sVUFBVSxDQUFDLEVBQUU7UUFDOUQsSUFBSSxTQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7WUFBRSxTQUFTO1FBQy9DLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUTtZQUFFLFNBQVM7UUFDMUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNqQyxTQUFTLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQy9CLFNBQVMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDL0IsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNsQyxTQUFTLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQy9CLElBQUksT0FBTyxDQUFDLE1BQU07WUFBRSxPQUFPLENBQUMsTUFBTSxHQUFHLE9BQU8sT0FBTyxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0tBQy9HO0FBQ0wsQ0FBQztBQVhELHdDQVdDO0FBRUQsU0FBZ0IsV0FBVyxDQUFFLE9BQWUsRUFBRSxVQUFlO0lBQ3pELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU87UUFBRSxPQUFPO0lBRTdCLE9BQU8sQ0FBQyxPQUFPLEdBQUcsT0FBTyxPQUFPLENBQUMsT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7SUFDNUYsU0FBUyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkMsT0FBTyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBUEQsa0NBT0M7QUFFRCxTQUFnQixZQUFZLENBQUUsSUFBUztJQUNuQyxPQUFPO1FBQ0gsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSTtRQUNyQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJO1FBQ2pDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLEtBQUs7UUFDaEMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSTtRQUMvQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJO0tBQ2hDLENBQUM7QUFDTixDQUFDO0FBUkQsb0NBUUM7QUFFRCxTQUFnQixTQUFTLENBQUUsT0FBZSxFQUFFLFVBQWU7SUFDdkQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSztRQUFFLE9BQU87SUFFM0IsU0FBUyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckMsT0FBTyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBTSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDckQsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDdEM7QUFDTCxDQUFDO0FBVEQsOEJBU0M7QUFFRCxTQUFnQixZQUFZLENBQUUsSUFBUztJQUNuQyxPQUFPO1FBQ0gsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO1FBQ2IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1FBQ2pCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLFdBQVc7UUFDbEMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksWUFBWTtLQUNsQyxDQUFDO0FBQ04sQ0FBQztBQVBELG9DQU9DO0FBRUQsU0FBZ0IsU0FBUyxDQUFFLE9BQWUsRUFBRSxVQUFlO0lBQ3ZELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQzVCLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTztJQUVuQixPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2RCxTQUFTLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxPQUFPLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNyRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN0QztBQUNMLENBQUM7QUFYRCw4QkFXQztBQUVELFNBQWdCLGVBQWUsQ0FBRSxJQUFTO0lBQ3RDLE9BQU87UUFDSCxJQUFJLEVBQUUsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJO1FBQ2pELFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtRQUMzQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87UUFDckIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1FBQ2pCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztLQUM1QixDQUFDO0FBQ04sQ0FBQztBQVJELDBDQVFDO0FBRUQsU0FBZ0IsWUFBWSxDQUFFLE9BQWUsRUFBRSxVQUFlO0lBQzFELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO0lBQ2xDLElBQUksQ0FBQyxRQUFRO1FBQUUsT0FBTztJQUV0QixTQUFTLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4QyxPQUFPLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBRTVCLEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFNLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUN4RCxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1QztBQUNMLENBQUM7QUFaRCxvQ0FZQztBQUVELFNBQWdCLFlBQVksQ0FBRSxJQUFTO0lBQ25DLElBQUksSUFBSSxJQUFJLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUM5QixPQUFPO1FBQ0gsSUFBSSxFQUFFLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSTtRQUNqRCxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7S0FDOUIsQ0FBQztBQUNOLENBQUM7QUFORCxvQ0FNQztBQUVELFNBQWdCLFNBQVMsQ0FBRSxPQUFlLEVBQUUsVUFBZTtJQUN2RCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUM1QixJQUFJLENBQUMsS0FBSztRQUFFLE9BQU87SUFFbkIsU0FBUyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMvQixPQUFPLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDaEQsQ0FBQztBQVBELDhCQU9DO0FBRUQsU0FBZ0IsUUFBUSxDQUFFLFVBQWU7SUFDckMsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQztJQUNoRSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDakIsSUFBSSxTQUFTLEVBQUU7UUFDWCxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsS0FBSyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDaEUsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMvQjtLQUNKO0lBRUQsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLE9BQU8sRUFBRSxRQUFRLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQztJQUN4RSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDcEIsSUFBSSxXQUFXLEVBQUU7UUFDYixRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2QsS0FBSyxNQUFNLENBQUMsSUFBSSxXQUFXLEVBQUU7WUFDekIsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNyQztLQUNKO0lBRUQsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRSxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsT0FBTyxFQUFFLFNBQVMsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDO0lBQ3hFLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxPQUFPLEVBQUUsYUFBYSxJQUFJLFVBQVUsQ0FBQyxhQUFhLENBQUM7SUFDbkYsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLE9BQU8sRUFBRSxZQUFZLElBQUksVUFBVSxDQUFDLFlBQVksQ0FBQztJQUVoRixLQUFLLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBTSxVQUFVLENBQUMsRUFBRTtRQUM5RCxJQUFJLFNBQUcsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztZQUFFLFNBQVM7UUFDL0MsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRO1lBQUUsU0FBUztRQUMxQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxTQUFTO1lBQUUsT0FBTyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDbkUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksS0FBSztZQUFFLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25ELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLFFBQVE7WUFBRSxPQUFPLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUMvRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxLQUFLO1lBQUUsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLElBQUksV0FBVztZQUFFLE9BQU8sQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO1FBQzdFLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxJQUFJLFlBQVk7WUFBRSxPQUFPLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQztLQUNwRjtBQUNMLENBQUM7QUFsQ0QsNEJBa0NDO0FBRUQsU0FBZ0IsZUFBZSxDQUFFLFVBQWU7SUFDNUMsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQU0sVUFBVSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsRUFBRTtRQUN4RSxJQUFJLE9BQU8sS0FBSyxJQUFJLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbkQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDOUM7S0FDSjtBQUNMLENBQUM7QUFORCwwQ0FNQztBQUVELFNBQWdCLFlBQVksQ0FBRSxVQUFlO0lBQ3pDLElBQUEsMkJBQVEsRUFBQyxVQUFVLEVBQUUsQ0FBQyxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFDLEVBQUUsRUFBRTtRQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLElBQUksSUFBSSxJQUFJLE9BQU8sR0FBRyxJQUFJLFFBQVE7WUFBRSxPQUFPO1FBQzlFLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUxELG9DQUtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IGRlZXBFeHRlbmQgZnJvbSBcImRlZXAtZXh0ZW5kXCI7XG5pbXBvcnQgYXNzZXJ0LCB7QXNzZXJ0aW9uRXJyb3J9IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7Sm9ifSBmcm9tIFwiLi9qb2JcIjtcbmltcG9ydCB7dHJhdmVyc2V9IGZyb20gXCJvYmplY3QtdHJhdmVyc2FsXCI7XG5cbmNvbnN0IGV4dGVuZHNNYXhEZXB0aCA9IDExO1xuY29uc3QgZXh0ZW5kc1JlY3Vyc2UgPSAoZ2l0bGFiRGF0YTogYW55LCBqb2JOYW1lOiBzdHJpbmcsIGpvYkRhdGE6IGFueSwgcGFyZW50czogYW55W10sIGRlcHRoOiBudW1iZXIpID0+IHtcbiAgICBhc3NlcnQoZGVwdGggPCBleHRlbmRzTWF4RGVwdGgsIGNoYWxrYHtibHVlQnJpZ2h0ICR7am9iTmFtZX19OiBjaXJjdWxhciBkZXBlbmRlbmN5IGRldGVjdGVkIGluIFxcYGV4dGVuZHNcXGBgKTtcbiAgICBkZXB0aCsrO1xuICAgIGZvciAoY29uc3QgcGFyZW50TmFtZSBvZiAoam9iRGF0YS5leHRlbmRzIHx8IFtdKSkge1xuICAgICAgICBjb25zdCBwYXJlbnREYXRhID0gZ2l0bGFiRGF0YVtwYXJlbnROYW1lXTtcbiAgICAgICAgYXNzZXJ0KHBhcmVudERhdGEgIT0gbnVsbCwgY2hhbGtge2JsdWVCcmlnaHQgJHtwYXJlbnROYW1lfX0gaXMgdW5zcGVjaWZpZWQsIHVzZWQgYnkge2JsdWVCcmlnaHQgJHtqb2JOYW1lfX0gZXh0ZW5kc2ApO1xuICAgICAgICBleHRlbmRzUmVjdXJzZShnaXRsYWJEYXRhLCBwYXJlbnROYW1lLCBwYXJlbnREYXRhLCBwYXJlbnRzLCBkZXB0aCk7XG4gICAgICAgIHBhcmVudHMucHVzaChwYXJlbnREYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmVudHM7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gam9iRXh0ZW5kcyAoZ2l0bGFiRGF0YTogYW55KSB7XG4gICAgZm9yIChjb25zdCBbam9iTmFtZSwgam9iRGF0YV0gb2YgT2JqZWN0LmVudHJpZXM8YW55PihnaXRsYWJEYXRhKSkge1xuICAgICAgICBpZiAoSm9iLmlsbGVnYWxKb2JOYW1lcy5oYXMoam9iTmFtZSkpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKGpvYkRhdGEpICE9PSBPYmplY3QucHJvdG90eXBlKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgcGFyZW50RGF0YXMgPSBleHRlbmRzUmVjdXJzZShnaXRsYWJEYXRhLCBqb2JOYW1lLCBqb2JEYXRhLCBbXSwgMCk7XG4gICAgICAgIGdpdGxhYkRhdGFbam9iTmFtZV0gPSBkZWVwRXh0ZW5kKHt9LCAuLi5wYXJlbnREYXRhcywgam9iRGF0YSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbam9iTmFtZSwgam9iRGF0YV0gb2YgT2JqZWN0LmVudHJpZXM8YW55PihnaXRsYWJEYXRhKSkge1xuICAgICAgICBpZiAoSm9iLmlsbGVnYWxKb2JOYW1lcy5oYXMoam9iTmFtZSkpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKGpvYkRhdGEpICE9PSBPYmplY3QucHJvdG90eXBlKSBjb250aW51ZTtcbiAgICAgICAgZGVsZXRlIGpvYkRhdGEuZXh0ZW5kcztcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2UgKGdpdGxhYkRhdGE6IGFueSwgcmVjdXJzZURhdGE6IGFueSkge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzPGFueT4ocmVjdXJzZURhdGEgfHwge30pKSB7XG4gICAgICAgIGlmICh2YWx1ZT8ucmVmZXJlbmNlRGF0YSkge1xuICAgICAgICAgICAgcmVjdXJzZURhdGFba2V5XSA9IGdldFN1YkRhdGFCeVJlZmVyZW5jZShnaXRsYWJEYXRhLCB2YWx1ZS5yZWZlcmVuY2VEYXRhKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJlZmVyZW5jZShnaXRsYWJEYXRhLCB2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzQ2lyY3VsYXJDaGFpbihyZWN1cnNlRGF0YSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcih7bWVzc2FnZTogYCFyZWZlcmVuY2UgY2lyY3VsYXIgY2hhaW4gZGV0ZWN0ZWQgWyR7dmFsdWUucmVmZXJlbmNlRGF0YX1dYH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jb25zdCBnZXRTdWJEYXRhQnlSZWZlcmVuY2UgPSAoZ2l0bGFiRGF0YTogYW55LCByZWZlcmVuY2VEYXRhOiBzdHJpbmdbXSkgPT4ge1xuICAgIGxldCBnaXRsYWJTdWJEYXRhID0gZ2l0bGFiRGF0YTtcbiAgICByZWZlcmVuY2VEYXRhLmZvckVhY2goKHJlZmVyZW5jZVBvaW50ZXIpID0+IHtcbiAgICAgICAgYXNzZXJ0KGdpdGxhYlN1YkRhdGFbcmVmZXJlbmNlUG9pbnRlcl0gIT0gbnVsbCwgYCFyZWZlcmVuY2UgWyR7cmVmZXJlbmNlRGF0YS5qb2luKFwiLCBcIil9XSBpcyB1bmRlZmluZWRgKTtcbiAgICAgICAgZ2l0bGFiU3ViRGF0YSA9IGdpdGxhYlN1YkRhdGFbcmVmZXJlbmNlUG9pbnRlcl07XG4gICAgfSk7XG4gICAgcmV0dXJuIGdpdGxhYlN1YkRhdGE7XG59O1xuXG5mdW5jdGlvbiBoYXNDaXJjdWxhckNoYWluIChkYXRhOiBhbnkpIHtcbiAgICB0cnkge1xuICAgICAgICBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChlIGluc3RhbmNlb2YgVHlwZUVycm9yICYmIGUubWVzc2FnZS5zdGFydHNXaXRoKFwiQ29udmVydGluZyBjaXJjdWxhciBzdHJ1Y3R1cmUgdG8gSlNPTlwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGxleE9iamVjdHMgKGdpdGxhYkRhdGE6IGFueSkge1xuICAgIGZvciAoY29uc3QgW2pvYk5hbWUsIGpvYkRhdGFdIG9mIE9iamVjdC5lbnRyaWVzPGFueT4oZ2l0bGFiRGF0YSkpIHtcbiAgICAgICAgaWYgKEpvYi5pbGxlZ2FsSm9iTmFtZXMuaGFzKGpvYk5hbWUpKSBjb250aW51ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBqb2JEYXRhID09PSBcInN0cmluZ1wiKSBjb250aW51ZTtcbiAgICAgICAgZXh0ZW5kc0VhY2goam9iTmFtZSwgZ2l0bGFiRGF0YSk7XG4gICAgICAgIG5lZWRzRWFjaChqb2JOYW1lLCBnaXRsYWJEYXRhKTtcbiAgICAgICAgY2FjaGVFYWNoKGpvYk5hbWUsIGdpdGxhYkRhdGEpO1xuICAgICAgICBzZXJ2aWNlc0VhY2goam9iTmFtZSwgZ2l0bGFiRGF0YSk7XG4gICAgICAgIGltYWdlRWFjaChqb2JOYW1lLCBnaXRsYWJEYXRhKTtcbiAgICAgICAgaWYgKGpvYkRhdGEuc2NyaXB0KSBqb2JEYXRhLnNjcmlwdCA9IHR5cGVvZiBqb2JEYXRhLnNjcmlwdCA9PT0gXCJzdHJpbmdcIiA/IFtqb2JEYXRhLnNjcmlwdF0gOiBqb2JEYXRhLnNjcmlwdDtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmRzRWFjaCAoam9iTmFtZTogc3RyaW5nLCBnaXRsYWJEYXRhOiBhbnkpIHtcbiAgICBjb25zdCBqb2JEYXRhID0gZ2l0bGFiRGF0YVtqb2JOYW1lXTtcbiAgICBpZiAoIWpvYkRhdGEuZXh0ZW5kcykgcmV0dXJuO1xuXG4gICAgam9iRGF0YS5leHRlbmRzID0gdHlwZW9mIGpvYkRhdGEuZXh0ZW5kcyA9PT0gXCJzdHJpbmdcIiA/IFtqb2JEYXRhLmV4dGVuZHNdIDogam9iRGF0YS5leHRlbmRzO1xuICAgIHJlZmVyZW5jZShnaXRsYWJEYXRhLCBqb2JEYXRhLmV4dGVuZHMpO1xuICAgIGpvYkRhdGEuZXh0ZW5kcyA9IGpvYkRhdGEuZXh0ZW5kcy5mbGF0KDUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVlZHNDb21wbGV4IChkYXRhOiBhbnkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBqb2I6IGRhdGEuam9iID8/IGRhdGEsXG4gICAgICAgIGFydGlmYWN0czogZGF0YS5hcnRpZmFjdHMgPz8gdHJ1ZSxcbiAgICAgICAgb3B0aW9uYWw6IGRhdGEub3B0aW9uYWwgPz8gZmFsc2UsXG4gICAgICAgIHBpcGVsaW5lOiBkYXRhLnBpcGVsaW5lID8/IG51bGwsXG4gICAgICAgIHByb2plY3Q6IGRhdGEucHJvamVjdCA/PyBudWxsLFxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWVkc0VhY2ggKGpvYk5hbWU6IHN0cmluZywgZ2l0bGFiRGF0YTogYW55KSB7XG4gICAgY29uc3Qgam9iRGF0YSA9IGdpdGxhYkRhdGFbam9iTmFtZV07XG4gICAgaWYgKCFqb2JEYXRhLm5lZWRzKSByZXR1cm47XG5cbiAgICByZWZlcmVuY2UoZ2l0bGFiRGF0YSwgam9iRGF0YS5uZWVkcyk7XG4gICAgam9iRGF0YS5uZWVkcyA9IGpvYkRhdGEubmVlZHMuZmxhdCg1KTtcbiAgICBmb3IgKGNvbnN0IFtpLCBuXSBvZiBPYmplY3QuZW50cmllczxhbnk+KGpvYkRhdGEubmVlZHMpKSB7XG4gICAgICAgIGpvYkRhdGEubmVlZHNbaV0gPSBuZWVkc0NvbXBsZXgobik7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FjaGVDb21wbGV4IChkYXRhOiBhbnkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IGRhdGEua2V5LFxuICAgICAgICBwYXRoczogZGF0YS5wYXRocyxcbiAgICAgICAgcG9saWN5OiBkYXRhLnBvbGljeSA/PyBcInB1bGwtcHVzaFwiLFxuICAgICAgICB3aGVuOiBkYXRhLndoZW4gPz8gXCJvbl9zdWNjZXNzXCIsXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlRWFjaCAoam9iTmFtZTogc3RyaW5nLCBnaXRsYWJEYXRhOiBhbnkpIHtcbiAgICBjb25zdCBqb2JEYXRhID0gZ2l0bGFiRGF0YVtqb2JOYW1lXTtcbiAgICBjb25zdCBjYWNoZSA9IGpvYkRhdGEuY2FjaGU7XG4gICAgaWYgKCFjYWNoZSkgcmV0dXJuO1xuXG4gICAgam9iRGF0YS5jYWNoZSA9IEFycmF5LmlzQXJyYXkoY2FjaGUpID8gY2FjaGUgOiBbY2FjaGVdO1xuICAgIHJlZmVyZW5jZShnaXRsYWJEYXRhLCBqb2JEYXRhLmNhY2hlKTtcbiAgICBqb2JEYXRhLmNhY2hlID0gam9iRGF0YS5jYWNoZS5mbGF0KDUpO1xuICAgIGZvciAoY29uc3QgW2ksIGNdIG9mIE9iamVjdC5lbnRyaWVzPGFueT4oam9iRGF0YS5jYWNoZSkpIHtcbiAgICAgICAgam9iRGF0YS5jYWNoZVtpXSA9IGNhY2hlQ29tcGxleChjKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2aWNlc0NvbXBsZXggKGRhdGE6IGFueSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiID8gZGF0YSA6IGRhdGEubmFtZSxcbiAgICAgICAgZW50cnlwb2ludDogZGF0YS5lbnRyeXBvaW50LFxuICAgICAgICBjb21tYW5kOiBkYXRhLmNvbW1hbmQsXG4gICAgICAgIGFsaWFzOiBkYXRhLmFsaWFzLFxuICAgICAgICB2YXJpYWJsZXM6IGRhdGEudmFyaWFibGVzLFxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2aWNlc0VhY2ggKGpvYk5hbWU6IHN0cmluZywgZ2l0bGFiRGF0YTogYW55KSB7XG4gICAgY29uc3Qgam9iRGF0YSA9IGdpdGxhYkRhdGFbam9iTmFtZV07XG4gICAgY29uc3Qgc2VydmljZXMgPSBqb2JEYXRhLnNlcnZpY2VzO1xuICAgIGlmICghc2VydmljZXMpIHJldHVybjtcblxuICAgIHJlZmVyZW5jZShnaXRsYWJEYXRhLCBqb2JEYXRhLnNlcnZpY2VzKTtcbiAgICBqb2JEYXRhLnNlcnZpY2VzID0gam9iRGF0YS5zZXJ2aWNlcy5mbGF0KDUpO1xuICAgIGpvYkRhdGEuc2VydmljZXMgPSBzZXJ2aWNlcztcblxuICAgIGZvciAoY29uc3QgW2ksIHNdIG9mIE9iamVjdC5lbnRyaWVzPGFueT4oam9iRGF0YS5zZXJ2aWNlcykpIHtcbiAgICAgICAgam9iRGF0YS5zZXJ2aWNlc1tpXSA9IHNlcnZpY2VzQ29tcGxleChzKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbWFnZUNvbXBsZXggKGRhdGE6IGFueSkge1xuICAgIGlmIChkYXRhID09IG51bGwpIHJldHVybiBkYXRhO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiID8gZGF0YSA6IGRhdGEubmFtZSxcbiAgICAgICAgZW50cnlwb2ludDogZGF0YS5lbnRyeXBvaW50LFxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbWFnZUVhY2ggKGpvYk5hbWU6IHN0cmluZywgZ2l0bGFiRGF0YTogYW55KSB7XG4gICAgY29uc3Qgam9iRGF0YSA9IGdpdGxhYkRhdGFbam9iTmFtZV07XG4gICAgY29uc3QgaW1hZ2UgPSBqb2JEYXRhLmltYWdlO1xuICAgIGlmICghaW1hZ2UpIHJldHVybjtcblxuICAgIHJlZmVyZW5jZShnaXRsYWJEYXRhLCBqb2JEYXRhKTtcbiAgICBqb2JEYXRhLmltYWdlID0gaW1hZ2VDb21wbGV4KGpvYkRhdGEuaW1hZ2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdHMgKGdpdGxhYkRhdGE6IGFueSkge1xuICAgIGNvbnN0IGNhY2hlRGF0YSA9IGdpdGxhYkRhdGEuZGVmYXVsdD8uY2FjaGUgPz8gZ2l0bGFiRGF0YS5jYWNoZTtcbiAgICBsZXQgY2FjaGUgPSBudWxsO1xuICAgIGlmIChjYWNoZURhdGEpIHtcbiAgICAgICAgY2FjaGUgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjIG9mIEFycmF5LmlzQXJyYXkoY2FjaGVEYXRhKSA/IGNhY2hlRGF0YSA6IFtjYWNoZURhdGFdKSB7XG4gICAgICAgICAgICBjYWNoZS5wdXNoKGNhY2hlQ29tcGxleChjKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXJ2aWNlRGF0YSA9IGdpdGxhYkRhdGEuZGVmYXVsdD8uc2VydmljZXMgPz8gZ2l0bGFiRGF0YS5zZXJ2aWNlcztcbiAgICBsZXQgc2VydmljZXMgPSBudWxsO1xuICAgIGlmIChzZXJ2aWNlRGF0YSkge1xuICAgICAgICBzZXJ2aWNlcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHMgb2Ygc2VydmljZURhdGEpIHtcbiAgICAgICAgICAgIHNlcnZpY2VzLnB1c2goc2VydmljZXNDb21wbGV4KHMpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGltYWdlID0gaW1hZ2VDb21wbGV4KGdpdGxhYkRhdGEuZGVmYXVsdD8uaW1hZ2UgPz8gZ2l0bGFiRGF0YS5pbWFnZSk7XG4gICAgY29uc3QgYXJ0aWZhY3RzID0gZ2l0bGFiRGF0YS5kZWZhdWx0Py5hcnRpZmFjdHMgPz8gZ2l0bGFiRGF0YS5hcnRpZmFjdHM7XG4gICAgY29uc3QgYmVmb3JlU2NyaXB0ID0gZ2l0bGFiRGF0YS5kZWZhdWx0Py5iZWZvcmVfc2NyaXB0ID8/IGdpdGxhYkRhdGEuYmVmb3JlX3NjcmlwdDtcbiAgICBjb25zdCBhZnRlclNjcmlwdCA9IGdpdGxhYkRhdGEuZGVmYXVsdD8uYWZ0ZXJfc2NyaXB0ID8/IGdpdGxhYkRhdGEuYWZ0ZXJfc2NyaXB0O1xuXG4gICAgZm9yIChjb25zdCBbam9iTmFtZSwgam9iRGF0YV0gb2YgT2JqZWN0LmVudHJpZXM8YW55PihnaXRsYWJEYXRhKSkge1xuICAgICAgICBpZiAoSm9iLmlsbGVnYWxKb2JOYW1lcy5oYXMoam9iTmFtZSkpIGNvbnRpbnVlO1xuICAgICAgICBpZiAodHlwZW9mIGpvYkRhdGEgPT09IFwic3RyaW5nXCIpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoIWpvYkRhdGEuYXJ0aWZhY3RzICYmIGFydGlmYWN0cykgam9iRGF0YS5hcnRpZmFjdHMgPSBhcnRpZmFjdHM7XG4gICAgICAgIGlmICgham9iRGF0YS5jYWNoZSAmJiBjYWNoZSkgam9iRGF0YS5jYWNoZSA9IGNhY2hlO1xuICAgICAgICBpZiAoIWpvYkRhdGEuc2VydmljZXMgJiYgc2VydmljZXMpIGpvYkRhdGEuc2VydmljZXMgPSBzZXJ2aWNlcztcbiAgICAgICAgaWYgKCFqb2JEYXRhLmltYWdlICYmIGltYWdlKSBqb2JEYXRhLmltYWdlID0gaW1hZ2U7XG4gICAgICAgIGlmICgham9iRGF0YS5hZnRlcl9zY3JpcHQgJiYgYWZ0ZXJTY3JpcHQpIGpvYkRhdGEuYWZ0ZXJfc2NyaXB0ID0gYWZ0ZXJTY3JpcHQ7XG4gICAgICAgIGlmICgham9iRGF0YS5iZWZvcmVfc2NyaXB0ICYmIGJlZm9yZVNjcmlwdCkgam9iRGF0YS5iZWZvcmVfc2NyaXB0ID0gYmVmb3JlU2NyaXB0O1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdsb2JhbFZhcmlhYmxlcyAoZ2l0bGFiRGF0YTogYW55KSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXM8YW55PihnaXRsYWJEYXRhLnZhcmlhYmxlcyA/PyB7fSkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgZ2l0bGFiRGF0YS52YXJpYWJsZXNba2V5XSA9IHZhbHVlW1widmFsdWVcIl07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuTGlzdHMgKGdpdGxhYkRhdGE6IGFueSkge1xuICAgIHRyYXZlcnNlKGdpdGxhYkRhdGEsICh7cGFyZW50LCBrZXksIHZhbHVlfSkgPT4ge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpIHx8IHBhcmVudCA9PSBudWxsIHx8IHR5cGVvZiBrZXkgIT0gXCJzdHJpbmdcIikgcmV0dXJuO1xuICAgICAgICBwYXJlbnRba2V5XSA9IHZhbHVlLmZsYXQoNSk7XG4gICAgfSk7XG59XG4iXX0=
package/src/job.js CHANGED
@@ -524,6 +524,7 @@ class Job {
524
524
  }
525
525
  if (this.services?.length) {
526
526
  dockerCmd += `--network gitlab-ci-local-${this.jobId} `;
527
+ dockerCmd += "--network-alias=build ";
527
528
  }
528
529
  dockerCmd += `--volume ${buildVolumeName}:/gcl-builds `;
529
530
  dockerCmd += `--volume ${tmpVolumeName}:${this.fileVariablesDir} `;
@@ -968,4 +969,4 @@ class Job {
968
969
  }
969
970
  }
970
971
  exports.Job = Job;
971
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiam9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0RBQTBCO0FBQzFCLCtDQUFpQztBQUNqQyw2Q0FBK0I7QUFDL0Isa0VBQXlDO0FBQ3pDLG9EQUE0QjtBQUM1QixtQ0FBOEI7QUFHOUIsaURBQThDO0FBQzlDLG1DQUE4QjtBQUU5QixrREFBMEI7QUEwQzFCLE1BQU0sYUFBYSxHQUFHLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUU7SUFDckQsSUFBSSxFQUFFLFNBQVM7SUFDZixLQUFLLEVBQUUsU0FBUztJQUNoQixJQUFJLEVBQUUsU0FBUztJQUNmLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLE1BQU0sRUFBRSxLQUFLO0NBQ2hCLENBQUMsQ0FBQztBQUVILE1BQWEsR0FBRztJQUVaLE1BQU0sQ0FBVSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUM7UUFDdEMsU0FBUyxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxVQUFVO1FBQ3JELFFBQVEsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVM7UUFDN0MsY0FBYyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsVUFBVTtLQUNuRCxDQUFDLENBQUM7SUFFTSxJQUFJLENBQU87SUFDWCxJQUFJLENBQVM7SUFDYixRQUFRLENBQVM7SUFDakIsWUFBWSxDQUFrQjtJQUM5QixXQUFXLENBQXNDO0lBQ2pELEtBQUssQ0FBUztJQUNkLEtBQUssQ0FNVjtJQUVLLFlBQVksQ0FBVTtJQUN0QixJQUFJLENBQVM7SUFDYixNQUFNLENBQVc7SUFDakIsV0FBVyxDQUFTO0lBQ3BCLE9BQU8sQ0FBVTtJQUVULFVBQVUsR0FBNEIsRUFBRSxDQUFDO0lBQ2xELG1CQUFtQixHQUFrQixJQUFJLENBQUM7SUFDMUMscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLGdCQUFnQixHQUFrQixJQUFJLENBQUM7SUFDdkMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixZQUFZLEdBQWtCLElBQUksQ0FBQztJQUNuQyxpQkFBaUIsR0FBa0IsSUFBSSxDQUFDO0lBQ3hDLHFCQUFxQixHQUFhLEVBQUUsQ0FBQztJQUNyQyx5QkFBeUIsR0FBbUIsQ0FBQyxDQUFRLENBQUM7SUFDdEQsVUFBVSxHQUFtRCxJQUFJLENBQUM7SUFDbEUsV0FBVyxHQUFrQixJQUFJLENBQUM7SUFFbEMsa0JBQWtCLEdBQWEsRUFBRSxDQUFDO0lBQ2xDLFVBQVUsQ0FBb0I7SUFDOUIsUUFBUSxDQUFvQjtJQUVuQixPQUFPLENBQU07SUFDYixZQUFZLENBQWU7SUFFNUMsWUFBYSxHQUFlO1FBQ3hCLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDekIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUM1QixNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDO1FBQzVDLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUFDLGtCQUFrQixDQUFDO1FBQ2xELE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDdEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNyQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQy9CLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDcEMsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUMsbUJBQW1CLENBQUM7UUFFcEQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDO1FBQzdCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQztRQUVuQyxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksWUFBWSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsYUFBYSxJQUFJLEtBQUssQ0FBQztRQUNuRCxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDO1FBQ2pELElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUM7UUFDbkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLE9BQU8sQ0FBQyxXQUFXLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFFL0csTUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUM7UUFDbEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFDLEdBQUcsZUFBZSxJQUFJLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRSxFQUFFLEdBQUcsZUFBZSxFQUFFLEdBQUcsbUJBQW1CLEVBQUUsR0FBRyxhQUFhLEVBQUMsQ0FBQztRQUV2SSxJQUFJLFlBQVksR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN2QixZQUFZLEdBQUcsYUFBYSxDQUFDO1NBQ2hDO2FBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQzVCLFlBQVksR0FBRyxHQUFHLEdBQUcsSUFBSSxRQUFRLFdBQVcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ2xFO1FBRUQsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkQsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFDckUsbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMvRCxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwRCxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7UUFDcEosbUJBQW1CLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEQsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxZQUFZLENBQUM7UUFDckQsbUJBQW1CLENBQUMsWUFBWSxDQUFDLEdBQUcsV0FBVyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sV0FBVyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxvQkFBb0I7UUFDakssbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsR0FBRyxXQUFXLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxjQUFjLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxSixtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUMxRSxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3RLLG1CQUFtQixDQUFDLG9CQUFvQixDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO1FBQ3hFLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzFELG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzNELG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxHQUFHLGtCQUFrQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsRixtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLGdCQUFnQixJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztRQUVoRyxxQ0FBcUM7UUFDckMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2xCLE1BQU0sUUFBUSxHQUFHLGFBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLGFBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsYUFBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUMzRTtRQUNELE1BQU0sbUJBQW1CLEdBQUcsYUFBSyxDQUFDLHVCQUF1QixDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFdkgsdURBQXVEO1FBQ3ZELElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBQyxHQUFHLGVBQWUsSUFBSSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLEVBQUUsRUFBRSxHQUFHLGVBQWUsRUFBRSxHQUFHLG1CQUFtQixFQUFFLEdBQUcsbUJBQW1CLEVBQUUsR0FBRyxhQUFhLEVBQUMsQ0FBQztRQUUvSixpREFBaUQ7UUFDakQsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1osTUFBTSxVQUFVLEdBQUcsYUFBSyxDQUFDLGNBQWMsQ0FBQyxFQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBQyxDQUFDLENBQUM7WUFDOUYsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQztZQUM1QyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUMsR0FBRyxlQUFlLElBQUksRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLEVBQUUsR0FBRyxVQUFVLENBQUMsU0FBUyxFQUFFLEdBQUcsZUFBZSxFQUFFLEdBQUcsbUJBQW1CLEVBQUUsR0FBRyxtQkFBbUIsRUFBRSxHQUFHLGFBQWEsRUFBQyxDQUFDO1NBQzNMO1FBQ0Qsc0RBQXNEO1FBQ3RELEtBQUssTUFBTSxhQUFhLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUM3QyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDekM7UUFFRCxJQUFBLGdCQUFNLEVBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUEsZUFBSyxFQUFBLGVBQWUsSUFBSSxDQUFDLElBQUksOEJBQThCLENBQUMsQ0FBQztRQUVsRyxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ3pFLE1BQU0sSUFBSSx1QkFBYyxDQUFDLEVBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixvRUFBb0UsRUFBQyxDQUFDLENBQUM7U0FDckk7UUFFRCxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLEVBQUU7WUFDaEQsTUFBTSxJQUFJLHVCQUFjLENBQUMsRUFBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLCtDQUErQyxFQUFDLENBQUMsQ0FBQztTQUNoSDtRQUVELEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNsRCxJQUFBLGdCQUFNLEVBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBQSxlQUFLLEVBQUEsU0FBUyxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsK0NBQStDLENBQUMsQ0FBQztZQUM3SSxJQUFBLGdCQUFNLEVBQUMsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBQSxlQUFLLEVBQUEsU0FBUyxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsc0RBQXNELENBQUMsQ0FBQztZQUMzSixJQUFBLGdCQUFNLEVBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBQSxlQUFLLEVBQUEsU0FBUyxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsdUJBQXVCLENBQUMsQ0FBQztTQUM5RjtRQUVELEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNyRCxJQUFBLGdCQUFNLEVBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFBLGVBQUssRUFBQSxTQUFTLElBQUksQ0FBQyxJQUFJLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQzVFLElBQUEsZ0JBQU0sRUFBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBQSxlQUFLLEVBQUEsU0FBUyxJQUFJLENBQUMsSUFBSSxjQUFjLENBQUMsNEJBQTRCLENBQUMsQ0FBQztZQUNuSCxJQUFBLGdCQUFNLEVBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUEsZUFBSyxFQUFBLFNBQVMsSUFBSSxDQUFDLElBQUksY0FBYyxDQUFDLCtCQUErQixDQUFDLENBQUM7U0FDL0g7UUFFRCxJQUFBLGdCQUFNLEVBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBQSxlQUFLLEVBQUEsU0FBUyxJQUFJLENBQUMsSUFBSSxvQ0FBb0MsQ0FBQyxDQUFDO1FBRW5JLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25DLE1BQU0sUUFBUSxHQUFHLGFBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3hELEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDeEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDbEIsTUFBTSxJQUFJLEdBQUcsYUFBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7b0JBQzNDLElBQUEsZ0JBQU0sRUFBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBQSxlQUFLLEVBQUEsU0FBUyxJQUFJLENBQUMsSUFBSSwrREFBK0QsQ0FBQyxDQUFDO2dCQUN4SCxDQUFDLENBQUMsQ0FBQzthQUNOO1NBQ0o7SUFDTCxDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDakIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLElBQUksSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3hGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsT0FBTyxJQUFBLHVCQUFZLEVBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3RDO1FBRUQsT0FBTyxJQUFJLENBQUMsVUFBVTtZQUNsQixDQUFDLENBQUMsSUFBQSx1QkFBWSxFQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQy9DLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDakIsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2hCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYztZQUM1QyxDQUFDLENBQUMsSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUM3RSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRVQsK0NBQStDO1FBQy9DLE9BQU8sSUFBQSxlQUFLLEVBQUEsR0FBRyxlQUFlLGVBQWUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7SUFDdEYsQ0FBQztJQUVELElBQUksV0FBVztRQUNYLE9BQU8sYUFBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2YsT0FBTyxPQUFPLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLEtBQUssUUFBUSxDQUFDO0lBQ3pELENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDYixPQUFPLE9BQU8sSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsS0FBSyxNQUFNLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQUksU0FBUztRQUNULE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN4QixNQUFNLFFBQVEsR0FBRyxhQUFLLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4RCxNQUFNLFNBQVMsR0FBRyxhQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDekQsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxTQUFTLENBQUM7SUFDdkUsQ0FBQztJQUVELElBQUksZUFBZTtRQUNmLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFcEMsSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUU7WUFDcEIsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELElBQUEsZ0JBQU0sRUFBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDO1FBQzdFLE9BQU8sS0FBSyxDQUFDLFVBQVUsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1IsTUFBTSxRQUFRLEdBQWMsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRXpDLEtBQUssTUFBTSxPQUFPLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUU7WUFDaEUsTUFBTSxRQUFRLEdBQUcsYUFBSyxDQUFDLGVBQWUsQ0FBQyxFQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBQyxDQUFDLENBQUM7WUFDdEYsSUFBSSxXQUFXLEdBQUcsYUFBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDOUQsV0FBVyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLFNBQVMsQ0FBQztZQUNoRixRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNWLElBQUksRUFBRSxXQUFXO2dCQUNqQixVQUFVLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUk7Z0JBQ3pDLE9BQU8sRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSTtnQkFDbkMsU0FBUyxFQUFFLFFBQVE7Z0JBQ25CLEtBQUssRUFBRSxhQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxJQUFJO2FBQzlELENBQUMsQ0FBQztTQUNOO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksVUFBVSxDQUFFLFVBQWtCO1FBQzlCLElBQUEsZ0JBQU0sRUFBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksRUFBRSx1Q0FBdUMsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksU0FBUyxDQUFFLFNBQXlEO1FBQ3BFLElBQUEsZ0JBQU0sRUFBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksRUFBRSxzQ0FBc0MsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDTCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksS0FBSyxDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDZCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxLQUFLLENBQUM7SUFDbkQsQ0FBQztJQUVELElBQUksV0FBVztRQUNYLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRU0sS0FBSyxDQUFDLGtCQUFrQixDQUFFLEdBQVcsRUFBRSxRQUFpQyxFQUFFLEdBQVE7UUFDckYsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxJQUFJLElBQUksRUFBRTtZQUN4QyxPQUFPLGFBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUN2RDtRQUNELE9BQU8sS0FBSyxHQUFHLE1BQU0sYUFBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7WUFDakUsT0FBTyxHQUFHLEdBQUcsSUFBSSxhQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ1osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDUCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQUksa0JBQWtCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUFJLG9CQUFvQjtRQUNwQixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxJQUFJLENBQUM7SUFDOUQsQ0FBQztJQUVELElBQUksUUFBUTtRQUNSLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxJQUFJLENBQUM7SUFDL0QsQ0FBQztJQUVELElBQUksZUFBZTtRQUNmLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNoQixPQUFPLHVDQUF1QyxJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzFHLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSztRQUNQLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBRXJCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbkMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUN2QyxNQUFNLHNCQUFzQixHQUFHLE1BQU0sSUFBSSxDQUFDLGtDQUFrQyxDQUFDLFlBQVksRUFBRSxhQUFLLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ25JLE1BQU0sUUFBUSxHQUFHLGFBQUssQ0FBQyxlQUFlLENBQUMsRUFBQyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxzQkFBc0IsRUFBQyxDQUFDLENBQUM7UUFDeEYsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUdyQyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxXQUFXLFdBQVcsTUFBTSxDQUFDO1FBQ25GLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRXJDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ25CLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBQSxlQUFLLEVBQUEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLDZCQUE2QixJQUFJLENBQUMsU0FBUyxJQUFJLE9BQU8sYUFBYSxJQUFJLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQztTQUN6STtRQUVELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNoQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQzdDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDekMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFFL0MsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO1lBQzFCLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEdBQUcsZUFBZSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNqRyxjQUFjLENBQUMsSUFBSSxDQUFDLGFBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxHQUFHLGFBQWEsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDL0YsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUVsQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLCtCQUErQixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ25ELE1BQU0sRUFBQyxNQUFNLEVBQUUsV0FBVyxFQUFDLEdBQUcsTUFBTSxhQUFLLENBQUMsS0FBSyxDQUFDO2dCQUM1QyxRQUFRLEVBQUUsUUFBUSxFQUFFLFlBQVksZUFBZSxjQUFjLEVBQUUsWUFBWSxhQUFhLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsd0NBQXdDO2dCQUM3SixNQUFNLEVBQUUsSUFBSSxFQUFFLGdGQUFnRjthQUNqRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNiLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDMUMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtnQkFDdkMsTUFBTSxhQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLGdCQUFnQixJQUFJLEVBQUUsR0FBRyxXQUFXLElBQUksZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDN0csSUFBSSxDQUFDLCtCQUErQixDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ3REO1lBQ0QsTUFBTSxhQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLG1CQUFtQixFQUFFLEdBQUcsV0FBVyxjQUFjLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakgsTUFBTSxhQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFFLE1BQU0sYUFBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsRSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBQSxlQUFLLEVBQUEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLHlEQUF5RCxJQUFBLHVCQUFZLEVBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3pJO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRTtZQUN2QixNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFFaEUsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNiLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUU7Z0JBQzlDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ2pDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQ2hELE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxhQUFLLENBQUMsZUFBZSxDQUFDLEVBQUMsR0FBRyxRQUFRLEVBQUUsR0FBRyxPQUFPLENBQUMsU0FBUyxFQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQ3BKLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLG9CQUFvQixJQUFJLENBQUMsV0FBVyxJQUFJLFdBQVcsSUFBSSxZQUFZLE1BQU0sQ0FBQztnQkFDckksTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztnQkFDM0YsTUFBTSxFQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUMsR0FBRyxNQUFNLGFBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQztnQkFDbkYsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLENBQUM7Z0JBQzVDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLEVBQUUsbUJBQW1CLE1BQU0scUJBQXFCLE1BQU0sSUFBSSxDQUFDLENBQUM7WUFDbEgsQ0FBQyxDQUFDLENBQ0wsQ0FBQztTQUNMO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNELFFBQVEsQ0FBQyxlQUFlLENBQUMsR0FBRyxTQUFTLENBQUM7UUFDdEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDeEUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDdEYsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEYsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUM5QixPQUFPO1NBQ1Y7UUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckYsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakYsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUM5QixPQUFPO1NBQ1Y7UUFFRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNuRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNwRjtRQUVELElBQUksSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDcEQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDckY7UUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM5QixRQUFRLENBQUMsZUFBZSxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDbEYsSUFBSSxDQUFDLHFCQUFxQixHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3BGO1FBRUQsSUFBSSxJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN2QixZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN2RztRQUVELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXJELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUMxQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxhQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDMUg7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCO1FBQ2xCLFlBQVksQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUU3QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUUvQixLQUFLLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUN0QyxJQUFJO2dCQUNBLE1BQU0sYUFBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3ZEO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1IsSUFBQSxnQkFBTSxFQUFDLENBQUMsWUFBWSxLQUFLLEVBQUUsMkJBQTJCLENBQUMsQ0FBQzthQUMzRDtTQUNKO1FBRUQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDeEIsSUFBSTtnQkFDQSxNQUFNLGFBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUMvRTtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNSLElBQUEsZ0JBQU0sRUFBQyxDQUFDLFlBQVksS0FBSyxFQUFFLDJCQUEyQixDQUFDLENBQUM7YUFDM0Q7U0FDSjtRQUVELElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkMsSUFBSTtnQkFDQSxLQUFLLE1BQU0sZUFBZSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtvQkFDdEQsTUFBTSxhQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZFO2FBQ0o7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDUixJQUFBLGdCQUFNLEVBQUMsQ0FBQyxZQUFZLEtBQUssRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO2FBQzNEO1NBQ0o7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUMvQyxJQUFJO1lBQ0EsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFFLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztTQUNqRTtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1IsSUFBQSxnQkFBTSxFQUFDLENBQUMsWUFBWSxLQUFLLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztTQUMzRDtJQUNMLENBQUM7SUFFTyw2QkFBNkI7UUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdEIsT0FBTyxFQUFFLENBQUM7U0FDYjtRQUNELElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsRUFBRTtZQUMzRSxPQUFPLDJIQUEySCxDQUFDO1NBQ3RJO1FBQ0QsT0FBTyx1QkFBdUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzSCxDQUFDO0lBRU8sc0JBQXNCLENBQUUsT0FBaUI7UUFDN0MsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3ZCLGlDQUFpQztZQUNqQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2hGLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMzRixHQUFHLElBQUksSUFBQSxlQUFLLEVBQUEsa0JBQWtCLElBQUksR0FBRyxhQUFhLE1BQU0sQ0FBQztZQUV6RCx3QkFBd0I7WUFDeEIsR0FBRyxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFTyxLQUFLLENBQUMsYUFBYSxDQUFFLFlBQTBCLEVBQUUsUUFBaUM7UUFDdEYsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFFdkQsTUFBTSxHQUFHLEdBQWEsRUFBRSxDQUFDO1FBQ3pCLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUN4QixNQUFNLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RGLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2xCLE1BQU0sSUFBSSxHQUFHLGFBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUMzQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUEsZUFBSyxFQUFBLEdBQUcsSUFBSSxDQUFDLGdCQUFnQiw0Q0FBNEMsSUFBSSxJQUFJLENBQUMsQ0FBQztnQkFDdkcsTUFBTSxVQUFVLEdBQUcsYUFBSyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sUUFBUSxDQUFDLG9CQUFvQixJQUFJLGVBQWUsRUFBRSxDQUFDLENBQUM7Z0JBQ3JHLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsVUFBVSxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN4RCxDQUFDLENBQUMsQ0FBQztTQUNOO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRU8sS0FBSyxDQUFDLFdBQVcsQ0FBRSxPQUFpQixFQUFFLFFBQWlDO1FBQzNFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQzFCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3BDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDckMsTUFBTSxlQUFlLEdBQUcsR0FBRyxHQUFHLElBQUksUUFBUSxXQUFXLFdBQVcsTUFBTSxDQUFDO1FBQ3ZFLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDN0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN6QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBRXZDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRTtZQUM1QyxPQUFPLENBQUMsQ0FBQztTQUNaO1FBRUQscUVBQXFFO1FBQ3JFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQzdDLE1BQU0sYUFBSyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1NBQ2xFO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2xCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNsRCxNQUFNLGFBQWEsR0FBRyxJQUFBLGVBQUssRUFBQyxJQUFJLEVBQUU7Z0JBQzlCLEdBQUc7Z0JBQ0gsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsS0FBSyxFQUFFLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUM7Z0JBQ3hDLEdBQUcsRUFBRSxFQUFDLEdBQUcsUUFBUSxFQUFFLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBQzthQUNyQyxDQUFDLENBQUM7WUFDSCxPQUFPLElBQUksT0FBTyxDQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUMzQyxLQUFLLGFBQWEsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVELEtBQUssYUFBYSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3pELENBQUMsQ0FBQyxDQUFDO1NBQ047UUFFRCxJQUFJLENBQUMsK0JBQStCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFbkQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRW5ELElBQUksU0FBUyxHQUFHLCtCQUErQixJQUFJLENBQUMsNkJBQTZCLEVBQUUsR0FBRyxDQUFDO1lBQ3ZGLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ3RCLFNBQVMsSUFBSSxlQUFlLENBQUM7YUFDaEM7WUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDdEIsU0FBUyxJQUFJLG1CQUFtQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDO2FBQ3ZEO1lBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDakIsU0FBUyxJQUFJLGFBQWEsQ0FBQzthQUM5QjtZQUVELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUU7Z0JBQ3ZCLFNBQVMsSUFBSSw2QkFBNkIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDO2FBQzNEO1lBRUQsU0FBUyxJQUFJLFlBQVksZUFBZSxlQUFlLENBQUM7WUFDeEQsU0FBUyxJQUFJLFlBQVksYUFBYSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDO1lBQ25FLFNBQVMsSUFBSSx3QkFBd0IsQ0FBQztZQUV0QyxLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNuQyxTQUFTLElBQUksWUFBWSxNQUFNLEdBQUcsQ0FBQzthQUN0QztZQUVELEtBQUssTUFBTSxTQUFTLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ3pDLFNBQVMsSUFBSSxjQUFjLFNBQVMsR0FBRyxDQUFDO2FBQzNDO1lBRUQsTUFBTSxjQUFjLEdBQUcsR0FBRyxHQUFHLElBQUksUUFBUSx3QkFBd0IsV0FBVyxFQUFFLENBQUM7WUFDL0UsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUN0QixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO29CQUMvQixTQUFTLElBQUksa0JBQWtCLENBQUM7aUJBQ25DO3FCQUFNO29CQUNILE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsYUFBYSxDQUFDLENBQUM7b0JBQ25ELE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3pFLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQ3ZDLFNBQVMsSUFBSSw0QkFBNEIsQ0FBQztvQkFDMUMsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztpQkFDcEQ7YUFDSjtZQUVELEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDckMsU0FBUyxJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUM7YUFDN0I7WUFFRCxTQUFTLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUNoRixTQUFTLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxZQUFZLENBQUM7WUFDM0MsU0FBUyxJQUFJLHVDQUF1QyxDQUFDO1lBQ3JELFNBQVMsSUFBSSwrQkFBK0IsQ0FBQztZQUM3QyxTQUFTLElBQUksbUNBQW1DLENBQUM7WUFDakQsU0FBUyxJQUFJLHlCQUF5QixDQUFDO1lBQ3ZDLFNBQVMsSUFBSSwrQkFBK0IsQ0FBQztZQUM3QyxTQUFTLElBQUkscUJBQXFCLENBQUM7WUFDbkMsU0FBUyxJQUFJLHVDQUF1QyxDQUFDO1lBQ3JELFNBQVMsSUFBSSw2QkFBNkIsQ0FBQztZQUMzQyxTQUFTLElBQUksaUNBQWlDLENBQUM7WUFDL0MsU0FBUyxJQUFJLHVCQUF1QixDQUFDO1lBQ3JDLFNBQVMsSUFBSSw2QkFBNkIsQ0FBQztZQUMzQyxTQUFTLElBQUksbUJBQW1CLENBQUM7WUFDakMsU0FBUyxJQUFJLGlDQUFpQyxDQUFDO1lBQy9DLFNBQVMsSUFBSSx1QkFBdUIsQ0FBQztZQUNyQyxTQUFTLElBQUksUUFBUSxDQUFDO1lBQ3RCLFNBQVMsSUFBSSwwQkFBMEIsQ0FBQztZQUN4QyxTQUFTLElBQUksWUFBWSxDQUFDO1lBQzFCLFNBQVMsSUFBSSxRQUFRLENBQUM7WUFFdEIsTUFBTSxFQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUMsR0FBRyxNQUFNLGFBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztZQUNoQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNuRDtRQUVELE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDL0MsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXpDLElBQUksR0FBRyxHQUFHLG9CQUFvQixDQUFDO1FBQy9CLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQztRQUU3QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUM3QyxHQUFHLElBQUksTUFBTSxRQUFRLFdBQVcsV0FBVyxLQUFLLENBQUM7U0FDcEQ7UUFDRCxHQUFHLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTVDLEdBQUcsSUFBSSxVQUFVLENBQUM7UUFFbEIsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxJQUFJLFFBQVEsWUFBWSxXQUFXLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0UsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLFFBQVEsWUFBWSxXQUFXLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVwRSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDaEIsTUFBTSxhQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLFFBQVEsWUFBWSxXQUFXLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLFdBQVcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ25IO1FBQ0QsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3ZELE1BQU0sYUFBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxRQUFRLHdCQUF3QixXQUFXLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLGFBQWEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ2pJO1FBRUQsTUFBTSxFQUFFLEdBQUcsSUFBQSxlQUFLLEVBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsNEJBQTRCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFO1lBQzNGLEdBQUc7WUFDSCxLQUFLLEVBQUUsTUFBTTtZQUNiLEdBQUcsRUFBRSxRQUFRO1NBQ2hCLENBQUMsQ0FBQztRQUVILE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBWSxFQUFFLE1BQTZCLEVBQUUsUUFBaUMsRUFBRSxFQUFFO1lBQy9GLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNuRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUNqQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQy9CO1lBQ0QsTUFBTSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUNwQixFQUFFLENBQUMsY0FBYyxDQUFDLGVBQWUsRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLE9BQU8sQ0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUMzRCxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNSLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUEsZ0JBQU0sR0FBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBQSxlQUFLLEVBQUEsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDMUksRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBQSxnQkFBTSxHQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFBLGVBQUssRUFBQSxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUMzSTtZQUNELEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRCxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUUxQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2hCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQzdCO2lCQUFNO2dCQUNILEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssUUFBUSxZQUFZLFdBQVcsRUFBRSxDQUFDLENBQUM7YUFDekQ7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRTFELElBQUksUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDcEQsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3ZEO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVPLEtBQUssQ0FBQyxTQUFTLENBQUUsWUFBMEIsRUFBRSxXQUFtQjtRQUNwRSxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDOUIsSUFBSTtZQUNBLE1BQU0sYUFBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7U0FDbEU7UUFBQyxPQUFPLENBQU0sRUFBRTtZQUNiLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsc0JBQXNCLENBQUMsRUFBRTtnQkFDbkYsTUFBTSxhQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUNuRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNyQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUEsZUFBSyxFQUFBLEdBQUcsSUFBSSxDQUFDLGdCQUFnQiwyQkFBMkIsV0FBVyxnQkFBZ0IsSUFBQSx1QkFBWSxFQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN0STtpQkFBTTtnQkFDSCxNQUFNLENBQUMsQ0FBQzthQUNYO1lBQ0QsSUFBSSxDQUFDLCtCQUErQixDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3REO0lBQ0wsQ0FBQztJQUVPLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBRSxZQUEwQixFQUFFLFFBQWlDO1FBQzNHLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQzFCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDakMsSUFBSSxtQkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDN0IsS0FBSyxNQUFNLFFBQVEsSUFBSSxTQUFTLElBQUksRUFBRSxFQUFFO1lBQ3BDLE1BQU0sY0FBYyxHQUFHLGFBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNuRSxJQUFJLGNBQWMsS0FBSyxJQUFJO2dCQUFFLFNBQVM7WUFFdEMsTUFBTSxnQkFBZ0IsR0FBRyxhQUFLLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9ELE1BQU0sWUFBWSxHQUFHLEdBQUcsR0FBRyxJQUFJLFFBQVEsY0FBYyxnQkFBZ0IsNkJBQTZCLENBQUM7WUFDbkcsSUFBSSxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQ25DLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBTSxhQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN0RyxLQUFLLE1BQU0sVUFBVSxJQUFJLFdBQVcsRUFBRTtvQkFDbEMsSUFBSSxVQUFVLElBQUksRUFBRTt3QkFBRSxTQUFTO29CQUMvQixNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsWUFBWSxJQUFJLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDM0YsbUJBQW1CLEdBQUcsRUFBQyxHQUFHLG1CQUFtQixFQUFFLEdBQUcsaUJBQWlCLEVBQUMsQ0FBQztpQkFDeEU7YUFDSjtpQkFBTTtnQkFDSCxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUEsZUFBSyxFQUFBLEdBQUcsSUFBSSxDQUFDLGdCQUFnQix3Q0FBd0MsUUFBUSxDQUFDLElBQUkseUJBQXlCLENBQUMsQ0FBQzthQUNwSTtTQUVKO1FBQ0QsT0FBTyxtQkFBbUIsQ0FBQztJQUMvQixDQUFDO0lBRU8sS0FBSyxDQUFDLFdBQVcsQ0FBRSxZQUEwQixFQUFFLFFBQWlDO1FBQ3BGLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPO1FBQ25ELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBRXRGLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQzFCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBRXBDLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUN4QixJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7Z0JBQUUsT0FBTztZQUV0RCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDOUIsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEUsTUFBTSxXQUFXLEdBQUcsR0FBRyxHQUFHLElBQUksUUFBUSxVQUFVLFNBQVMsRUFBRSxDQUFDO1lBQzVELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUU7Z0JBQ25DLFNBQVM7YUFDWjtZQUVELE1BQU0sYUFBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ3hDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNuQyxDQUFDLENBQUMsQ0FBQztZQUNILE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGVBQUssRUFBQSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsbUNBQW1DLFNBQVMsa0JBQWtCLElBQUEsdUJBQVksRUFBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDOUk7SUFDTCxDQUFDO0lBRU8sS0FBSyxDQUFDLGVBQWUsQ0FBRSxZQUEwQjtRQUNyRCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBRWxHLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQzFCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM5QixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDcEIsS0FBSyxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLEVBQUUsRUFBRTtZQUN6QyxNQUFNLGdCQUFnQixHQUFHLGFBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0QsTUFBTSxjQUFjLEdBQUcsR0FBRyxHQUFHLElBQUksUUFBUSxjQUFjLGdCQUFnQixFQUFFLENBQUM7WUFDMUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsRUFBRTtnQkFDdEMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQ25DO1lBRUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ2pELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3RCLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBQSxlQUFLLEVBQUEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLHVDQUF1QyxnQkFBZ0IsZ0JBQWdCLENBQUMsQ0FBQzthQUM3SDtZQUVELFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1NBQzlDO1FBQ0QsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGVBQUssRUFBQSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsbURBQW1ELElBQUEsdUJBQVksRUFBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEksQ0FBQztJQUVELE1BQU0sQ0FBRSxNQUFjO1FBQ2xCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDN0MsT0FBTyxhQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLFdBQVcsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3RIO1FBQ0QsT0FBTyxhQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksY0FBYyxDQUFDLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRU8sS0FBSyxDQUFDLFlBQVksQ0FBRSxZQUEwQixFQUFFLFFBQWlDLEVBQUUsUUFBZ0I7UUFDdkcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87UUFDbkQsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU87UUFFdEYsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDMUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7UUFFcEMsSUFBSSxJQUFJLEVBQUUsT0FBTyxDQUFDO1FBQ2xCLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUN4QixJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7Z0JBQUUsT0FBTztZQUN0RCxJQUFJLFlBQVksS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLFFBQVEsSUFBSSxDQUFDO2dCQUFFLE9BQU87WUFDckQsSUFBSSxZQUFZLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxRQUFRLEtBQUssQ0FBQztnQkFBRSxPQUFPO1lBQ3RELE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RFLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRTtnQkFDeEIsSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDeEIsTUFBTSxZQUFZLEdBQUcsYUFBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLGNBQWMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRyxJQUFJLEdBQUcsR0FBRyxzQ0FBc0MsQ0FBQztnQkFDakQsR0FBRyxJQUFJLHdCQUF3QixTQUFTLElBQUksQ0FBQztnQkFDN0MsR0FBRyxJQUFJLGFBQWEsWUFBWSxnQkFBZ0IsU0FBUyxjQUFjLENBQUM7Z0JBRXhFLE1BQU0sYUFBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxJQUFJLEVBQUU7b0JBQ3hDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDbkQsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRS9CLE1BQU0sT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLFFBQVEsVUFBVSxTQUFTLEVBQUUsQ0FBQyxDQUFDO2dCQUNwRixJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO29CQUN0QixZQUFZLENBQUMsTUFBTSxDQUFDLElBQUEsZUFBSyxFQUFBLEdBQUcsSUFBSSxDQUFDLGdCQUFnQix1Q0FBdUMsSUFBSSxRQUFRLENBQUMsQ0FBQztpQkFDekc7cUJBQU07b0JBQ0gsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGVBQUssRUFBQSxHQUFHLElBQUksQ0FBQyxnQkFBZ0Isa0NBQWtDLFlBQVksS0FBSyxTQUFTLGtCQUFrQixJQUFBLHVCQUFZLEVBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUM5SjthQUNKO1NBQ0o7SUFDTCxDQUFDO0lBRU8sS0FBSyxDQUFDLGdCQUFnQixDQUFFLFlBQTBCLEVBQUUsUUFBaUM7UUFDekYsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNyQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUMxQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNwQyxNQUFNLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLFlBQVksQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7UUFFakgsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTztRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFNLElBQUksSUFBSTtZQUFFLE9BQU87UUFFaEcsSUFBSSxJQUFJLEVBQUUsT0FBTyxDQUFDO1FBQ2xCLElBQUksS0FBSyxHQUFHLHNDQUFzQyxDQUFDO1FBQ25ELEtBQUssSUFBSSxZQUFZLGFBQWEsSUFBSSxXQUFXLElBQUksQ0FBQztRQUN0RCxLQUFLLElBQUksNENBQTRDLENBQUM7UUFDdEQsS0FBSyxNQUFNLG1CQUFtQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxJQUFJLEVBQUUsRUFBRTtZQUM3RCxNQUFNLFlBQVksR0FBRyxhQUFLLENBQUMsVUFBVSxDQUFDLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxjQUFjLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNoSCxLQUFLLElBQUksY0FBYyxZQUFZLElBQUksQ0FBQztTQUMzQztRQUNELEtBQUssTUFBTSxZQUFZLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFO1lBQ3BELE1BQU0sWUFBWSxHQUFHLGFBQUssQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxjQUFjLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6RyxLQUFLLElBQUksR0FBRyxZQUFZLEdBQUcsQ0FBQztTQUMvQjtRQUNELEtBQUssSUFBSSxHQUFHLGFBQWEsSUFBSSxXQUFXLGNBQWMsQ0FBQztRQUN2RCxNQUFNLFlBQVksR0FBRyxhQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDeEYsSUFBSSxZQUFZLElBQUksSUFBSSxFQUFFO1lBQ3RCLEtBQUssSUFBSSxZQUFZLGFBQWEsSUFBSSxXQUFXLDhCQUE4QixDQUFDO1lBQ2hGLEtBQUssSUFBSSxXQUFXLFlBQVksWUFBWSxDQUFDO1lBQzdDLEtBQUssSUFBSSxlQUFlLFlBQVksSUFBSSxhQUFhLElBQUksV0FBVyxnQ0FBZ0MsQ0FBQztZQUNyRyxLQUFLLElBQUksTUFBTSxDQUFDO1NBQ25CO1FBRUQsSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN4QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3JHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUNsRSxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUvQixJQUFJLFlBQVksSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLElBQUksUUFBUSxjQUFjLFdBQVcsOEJBQThCLFlBQVksRUFBRSxDQUFDLEVBQUU7WUFDdkksWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGVBQUssRUFBQSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IscUNBQXFDLFlBQVkseUJBQXlCLENBQUMsQ0FBQztTQUNoSTtRQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsSUFBSSxRQUFRLGNBQWMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNoRixJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3RCLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBQSxlQUFLLEVBQUEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLDJDQUEyQyxDQUFDLENBQUM7U0FDakc7YUFBTTtZQUNILFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBQSxlQUFLLEVBQUEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLG1EQUFtRCxJQUFBLHVCQUFZLEVBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ25JO1FBRUQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDeEUsSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4QixNQUFNLGFBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxJQUFJLFFBQVEsY0FBYyxXQUFXLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzNILElBQUksWUFBWSxJQUFJLElBQUksRUFBRTtnQkFDdEIsTUFBTSxhQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsSUFBSSxRQUFRLGNBQWMsV0FBVyw4QkFBOEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ3RIO1lBQ0QsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0IsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGVBQUssRUFBQSxHQUFHLElBQUksQ0FBQyxnQkFBZ0Isd0RBQXdELElBQUEsdUJBQVksRUFBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDeEk7SUFDTCxDQUFDO0lBRU8sS0FBSyxDQUFDLE9BQU8sQ0FBRSxHQUFXLEVBQUUsUUFBZ0IsRUFBRSxJQUEyQixFQUFFLGVBQXlCO1FBQ3hHLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDckMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUM3QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUUxQixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7UUFFOUMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hCLE1BQU0sRUFBQyxNQUFNLEVBQUUsV0FBVyxFQUFDLEdBQUcsTUFBTSxhQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLGVBQWUsZ0ZBQWdGLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQy9NLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDMUMsTUFBTSxhQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUNoRSxNQUFNLGFBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsV0FBVyxLQUFLLElBQUksSUFBSSxFQUFFLEdBQUcsUUFBUSxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDbEc7YUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ2pDLE1BQU0sYUFBSyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksUUFBUSxXQUFXLFdBQVcsRUFBRSxDQUFDLENBQUM7U0FDakc7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDbEMsTUFBTSxhQUFLLENBQUMsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7U0FDL0Q7SUFDTCxDQUFDO0lBRU8sK0JBQStCLENBQUUsWUFBMEI7UUFDL0QsWUFBWSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQzdDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBQSxlQUFLLEVBQUEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLDhCQUE4QixDQUFDLENBQUM7WUFDakYsSUFBSSxDQUFDLCtCQUErQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZELENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNkLENBQUM7SUFFTyxlQUFlLENBQUUsSUFBWSxFQUFFLE9BQU8sR0FBRyxLQUFLLEVBQUUsYUFBYSxHQUFHLEVBQUU7UUFDdEUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDN0MsSUFBSSxPQUFPLEVBQUU7WUFDVCxPQUFPLElBQUEsZUFBSyxFQUFBLEdBQUcsV0FBVyxnQ0FBZ0MsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLGFBQWEsRUFBRSxDQUFDO1NBQ2pHO1FBRUQsT0FBTyxJQUFBLGVBQUssRUFBQSxHQUFHLFdBQVcsdUJBQXVCLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxhQUFhLEVBQUUsQ0FBQztJQUMxRixDQUFDO0lBRU8sZUFBZTtRQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVPLGlCQUFpQjtRQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakUsT0FBTyxJQUFBLGVBQUssRUFBQSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IseUNBQXlDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQztJQUN4RyxDQUFDO0lBRU8sS0FBSyxDQUFDLG1CQUFtQixDQUFFLFdBQW1CO1FBQ2xELE1BQU0sRUFBQyxNQUFNLEVBQUUsU0FBUyxFQUFDLEdBQUcsTUFBTSxhQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakcsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztJQUN2QyxDQUFDO0lBRU8sS0FBSyxDQUFDLFlBQVksQ0FBRSxZQUEwQixFQUFFLFFBQWlDLEVBQUUsT0FBZ0IsRUFBRSxZQUFvQjtRQUM3SCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUMxQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNwQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3JDLElBQUksU0FBUyxHQUFHLHlEQUF5RCxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUM7UUFDdkYsSUFBSSxDQUFDLCtCQUErQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRW5ELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDakIsU0FBUyxJQUFJLGFBQWEsQ0FBQztTQUM5QjtRQUVELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDdEIsU0FBUyxJQUFJLGVBQWUsQ0FBQztTQUNoQztRQUVELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3RCLFNBQVMsSUFBSSxtQkFBbUIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQztTQUN2RDtRQUVELEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDbkMsU0FBUyxJQUFJLFlBQVksTUFBTSxHQUFHLENBQUM7U0FDdEM7UUFFRCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ25DLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDakMsTUFBTSx5QkFBeUIsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6RSxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzVELE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzdELElBQUksWUFBWSxFQUFFO1lBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUM3QjtRQUVELEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxFQUFFO1lBQ3pCLFNBQVMsSUFBSSxtQkFBbUIsS0FBSyxHQUFHLENBQUM7U0FDNUM7UUFFRCxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDckMsU0FBUyxJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUM7U0FDN0I7UUFFRCxNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDN0MsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLEdBQUcsSUFBSSxRQUFRLDJCQUEyQixXQUFXLElBQUkseUJBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdEksSUFBSSxpQkFBaUIsRUFBRTtZQUNuQixJQUFJLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDNUIsU0FBUyxJQUFJLGtCQUFrQixDQUFDO2FBQ25DO2lCQUFNO2dCQUNILE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsRUFBRSxhQUFhLENBQUMsQ0FBQztnQkFDMUQsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDN0UsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLHFCQUFxQixFQUFFLFdBQVcsQ0FBQyxDQUFDO2dCQUN4RCxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQzlDLFNBQVMsSUFBSSw0QkFBNEIsQ0FBQzthQUM3QztTQUNKO1FBQ0QsU0FBUyxJQUFJLFlBQVksSUFBSSxDQUFDLGVBQWUsZUFBZSxDQUFDO1FBQzdELFNBQVMsSUFBSSxZQUFZLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUM7UUFDeEUsU0FBUyxJQUFJLEdBQUcsV0FBVyxHQUFHLENBQUM7UUFFL0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUvRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFOUIsTUFBTSxFQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUMsR0FBRyxNQUFNLGFBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTFDLGtEQUFrRDtRQUNsRCxJQUFJLGlCQUFpQixJQUFJLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNqRCxNQUFNLGFBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLEdBQUcsV0FBVyxhQUFhLENBQUMsQ0FBQyxDQUFDO1NBQzNGO1FBRUQsTUFBTSxhQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxHQUFHLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV6RCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBQSxlQUFLLEVBQUEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLDBDQUEwQyxXQUFXLGtCQUFrQixLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLElBQUEsdUJBQVksRUFBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbk0sT0FBTyxXQUFXLENBQUM7SUFDdkIsQ0FBQztJQUVPLEtBQUssQ0FBQyxrQkFBa0IsQ0FBRSxZQUEwQixFQUFFLE9BQWdCLEVBQUUsWUFBb0IsRUFBRSxzQkFBOEI7UUFDaEksTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUNuQyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBRWpDLE1BQU0sRUFBQyxNQUFNLEVBQUMsR0FBRyxNQUFNLGFBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFeEMsZ0ZBQWdGO1FBQ2hGLE1BQU0seUJBQXlCLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekUsTUFBTSxPQUFPLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLHlCQUF5QixDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNsSCxJQUFJLFlBQVksRUFBRTtZQUNkLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDOUI7UUFFRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVoRCxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxZQUFZLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQzFELE9BQU8sWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGVBQUssRUFBQSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsNkNBQTZDLFdBQVcsS0FBSyxDQUFDLENBQUM7U0FDMUg7UUFFRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDOUIsSUFBSTtZQUNBLCtFQUErRTtZQUMvRSxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUM1RSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7b0JBQUUsT0FBTztnQkFDbkMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ25ELE1BQU0sUUFBUSxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsMEJBQTBCLElBQUksQ0FBQyxLQUFLLElBQUksWUFBWSxJQUFJLE9BQU8sRUFBRSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLHNCQUFzQixFQUFFLEdBQUcsV0FBVyxJQUFJLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDN04sT0FBTyxhQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDSixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBQSxlQUFLLEVBQUEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLGdDQUFnQyxXQUFXLGlDQUFpQyxJQUFBLHVCQUFZLEVBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzdKO1FBQUMsT0FBTyxDQUFNLEVBQUU7WUFDYixJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksY0FBYyxDQUFDO2dCQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzVDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBa0IsRUFBRSxFQUFFO2dCQUNwQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUEsZUFBSyxFQUFBLEdBQUcsSUFBSSxDQUFDLGdCQUFnQiw4QkFBOEIsV0FBVyx3QkFBd0IsQ0FBQyxDQUFDO2dCQUNwSCxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRTtvQkFDekQsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGVBQUssRUFBQSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsaUJBQWlCLElBQUksS0FBSyxDQUFDLENBQUM7Z0JBQ2pGLENBQUMsQ0FBQyxDQUFDO2dCQUNILFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBQSxlQUFLLEVBQUEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLHlCQUF5QixzQkFBc0IsTUFBTSxDQUFDLENBQUM7WUFDNUcsQ0FBQyxDQUFDLENBQUM7U0FDTjtnQkFBUztZQUNOLGlFQUFpRTtZQUNqRSxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNuRixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7b0JBQUUsT0FBTztnQkFDbkMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ25ELE9BQU8sYUFBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixJQUFJLENBQUMsS0FBSyxJQUFJLFlBQVksSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDNUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNQO0lBQ0wsQ0FBQzs7QUF6aUNRLGtCQUFHIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0ICogYXMgZG90ZW52IGZyb20gXCJkb3RlbnZcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0IHByZXR0eUhydGltZSBmcm9tIFwicHJldHR5LWhydGltZVwiO1xuaW1wb3J0IHNwbGl0MiBmcm9tIFwic3BsaXQyXCI7XG5pbXBvcnQge1V0aWxzfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHtXcml0ZVN0cmVhbXN9IGZyb20gXCIuL3dyaXRlLXN0cmVhbXNcIjtcbmltcG9ydCB7R2l0RGF0YX0gZnJvbSBcIi4vZ2l0LWRhdGFcIjtcbmltcG9ydCBhc3NlcnQsIHtBc3NlcnRpb25FcnJvcn0gZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHtNdXRleH0gZnJvbSBcIi4vbXV0ZXhcIjtcbmltcG9ydCB7QXJndn0gZnJvbSBcIi4vYXJndlwiO1xuaW1wb3J0IGV4ZWNhIGZyb20gXCJleGVjYVwiO1xuaW1wb3J0IHtDSUNEVmFyaWFibGV9IGZyb20gXCIuL3ZhcmlhYmxlcy1mcm9tLWZpbGVzXCI7XG5cbmludGVyZmFjZSBKb2JPcHRpb25zIHtcbiAgICBhcmd2OiBBcmd2O1xuICAgIHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zO1xuICAgIGRhdGE6IGFueTtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgYmFzZU5hbWU6IHN0cmluZztcbiAgICBwaXBlbGluZUlpZDogbnVtYmVyO1xuICAgIGdpdERhdGE6IEdpdERhdGE7XG4gICAgZ2xvYmFsVmFyaWFibGVzOiB7W25hbWU6IHN0cmluZ106IHN0cmluZ307XG4gICAgdmFyaWFibGVzRnJvbUZpbGVzOiB7W25hbWU6IHN0cmluZ106IENJQ0RWYXJpYWJsZX07XG4gICAgcHJlZGVmaW5lZFZhcmlhYmxlczoge1tuYW1lOiBzdHJpbmddOiBhbnl9O1xuICAgIG1hdHJpeFZhcmlhYmxlczoge1trZXk6IHN0cmluZ106IHN0cmluZ30gfCBudWxsO1xuICAgIG5vZGVJbmRleDogbnVtYmVyIHwgbnVsbDtcbiAgICBub2Rlc1RvdGFsOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBDYWNoZSB7XG4gICAgcG9saWN5OiBcInB1bGxcIiB8IFwicHVsbC1wdXNoXCIgfCBcInB1c2hcIjtcbiAgICBrZXk6IHN0cmluZyB8IHtmaWxlczogc3RyaW5nW119O1xuICAgIHBhdGhzOiBzdHJpbmdbXTtcbiAgICB3aGVuOiBcIm9uX3N1Y2Nlc3NcIiB8IFwib25fZmFpbHVyZVwiIHwgXCJhbHdheXNcIjtcbn1cblxuaW50ZXJmYWNlIFNlcnZpY2Uge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBlbnRyeXBvaW50OiBzdHJpbmdbXSB8IG51bGw7XG4gICAgY29tbWFuZDogc3RyaW5nW10gfCBudWxsO1xuICAgIGFsaWFzOiBzdHJpbmcgfCBudWxsO1xuICAgIHZhcmlhYmxlczoge1tuYW1lOiBzdHJpbmddOiBzdHJpbmd9O1xufVxuXG5pbnRlcmZhY2UgTmVlZCB7XG4gICAgam9iOiBzdHJpbmc7XG4gICAgYXJ0aWZhY3RzOiBib29sZWFuO1xuICAgIG9wdGlvbmFsOiBib29sZWFuO1xuICAgIHBpcGVsaW5lOiBzdHJpbmcgfCBudWxsO1xuICAgIHByb2plY3Q6IHN0cmluZyB8IG51bGw7XG59XG5cbmNvbnN0IGRhdGVGb3JtYXR0ZXIgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh1bmRlZmluZWQsIHtcbiAgICB5ZWFyOiB1bmRlZmluZWQsXG4gICAgbW9udGg6IHVuZGVmaW5lZCxcbiAgICBob3VyOiBcIm51bWVyaWNcIixcbiAgICBtaW51dGU6IFwibnVtZXJpY1wiLFxuICAgIHNlY29uZDogXCJudW1lcmljXCIsXG4gICAgaG91cjEyOiBmYWxzZSxcbn0pO1xuXG5leHBvcnQgY2xhc3MgSm9iIHtcblxuICAgIHN0YXRpYyByZWFkb25seSBpbGxlZ2FsSm9iTmFtZXMgPSBuZXcgU2V0KFtcbiAgICAgICAgXCJpbmNsdWRlXCIsIFwibG9jYWxfY29uZmlndXJhdGlvblwiLCBcImltYWdlXCIsIFwic2VydmljZXNcIixcbiAgICAgICAgXCJzdGFnZXNcIiwgXCJ0eXBlc1wiLCBcImJlZm9yZV9zY3JpcHRcIiwgXCJkZWZhdWx0XCIsXG4gICAgICAgIFwiYWZ0ZXJfc2NyaXB0XCIsIFwidmFyaWFibGVzXCIsIFwiY2FjaGVcIiwgXCJ3b3JrZmxvd1wiLFxuICAgIF0pO1xuXG4gICAgcmVhZG9ubHkgYXJndjogQXJndjtcbiAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgYmFzZU5hbWU6IHN0cmluZztcbiAgICByZWFkb25seSBkZXBlbmRlbmNpZXM6IHN0cmluZ1tdIHwgbnVsbDtcbiAgICByZWFkb25seSBlbnZpcm9ubWVudD86IHtuYW1lOiBzdHJpbmc7IHVybDogc3RyaW5nIHwgbnVsbH07XG4gICAgcmVhZG9ubHkgam9iSWQ6IG51bWJlcjtcbiAgICByZWFkb25seSBydWxlcz86IHtcbiAgICAgICAgaWY6IHN0cmluZztcbiAgICAgICAgd2hlbjogc3RyaW5nO1xuICAgICAgICBleGlzdHM6IHN0cmluZ1tdO1xuICAgICAgICBhbGxvd19mYWlsdXJlOiBib29sZWFuO1xuICAgICAgICB2YXJpYWJsZXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9O1xuICAgIH1bXTtcblxuICAgIHJlYWRvbmx5IGFsbG93RmFpbHVyZTogYm9vbGVhbjtcbiAgICByZWFkb25seSB3aGVuOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgZXhpc3RzOiBzdHJpbmdbXTtcbiAgICByZWFkb25seSBwaXBlbGluZUlpZDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGdpdERhdGE6IEdpdERhdGE7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF92YXJpYWJsZXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0ge307XG4gICAgcHJpdmF0ZSBfcHJlc2NyaXB0c0V4aXRDb2RlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9hZnRlclNjcmlwdHNFeGl0Q29kZSA9IDA7XG4gICAgcHJpdmF0ZSBfY292ZXJhZ2VQZXJjZW50OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9ydW5uaW5nID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfY29udGFpbmVySWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX3NlcnZpY2VOZXR3b3JrSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX2NvbnRhaW5lclZvbHVtZU5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHByaXZhdGUgX2xvbmdSdW5uaW5nU2lsZW50VGltZW91dDogTm9kZUpTLlRpbWVvdXQgPSAtMSBhcyBhbnk7XG4gICAgcHJpdmF0ZSBfcHJvZHVjZXJzOiB7bmFtZTogc3RyaW5nOyBkb3RlbnY6IHN0cmluZyB8IG51bGx9W10gfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9qb2JOYW1lUGFkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgX2NvbnRhaW5lcnNUb0NsZWFuOiBzdHJpbmdbXSA9IFtdO1xuICAgIHByaXZhdGUgX3N0YXJ0VGltZT86IFtudW1iZXIsIG51bWJlcl07XG4gICAgcHJpdmF0ZSBfZW5kVGltZT86IFtudW1iZXIsIG51bWJlcl07XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGpvYkRhdGE6IGFueTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zO1xuXG4gICAgY29uc3RydWN0b3IgKG9wdDogSm9iT3B0aW9ucykge1xuICAgICAgICBjb25zdCBqb2JEYXRhID0gb3B0LmRhdGE7XG4gICAgICAgIGNvbnN0IGdpdERhdGEgPSBvcHQuZ2l0RGF0YTtcbiAgICAgICAgY29uc3QgZ2xvYmFsVmFyaWFibGVzID0gb3B0Lmdsb2JhbFZhcmlhYmxlcztcbiAgICAgICAgY29uc3QgdmFyaWFibGVzRnJvbUZpbGVzID0gb3B0LnZhcmlhYmxlc0Zyb21GaWxlcztcbiAgICAgICAgY29uc3QgYXJndiA9IG9wdC5hcmd2O1xuICAgICAgICBjb25zdCBjd2QgPSBhcmd2LmN3ZDtcbiAgICAgICAgY29uc3Qgc3RhdGVEaXIgPSBhcmd2LnN0YXRlRGlyO1xuICAgICAgICBjb25zdCBhcmd2VmFyaWFibGVzID0gYXJndi52YXJpYWJsZTtcbiAgICAgICAgY29uc3QgcHJlZGVmaW5lZFZhcmlhYmxlcyA9IG9wdC5wcmVkZWZpbmVkVmFyaWFibGVzO1xuXG4gICAgICAgIHRoaXMuYXJndiA9IGFyZ3Y7XG4gICAgICAgIHRoaXMud3JpdGVTdHJlYW1zID0gb3B0LndyaXRlU3RyZWFtcztcbiAgICAgICAgdGhpcy5naXREYXRhID0gb3B0LmdpdERhdGE7XG4gICAgICAgIHRoaXMubmFtZSA9IG9wdC5uYW1lO1xuICAgICAgICB0aGlzLmJhc2VOYW1lID0gb3B0LmJhc2VOYW1lO1xuICAgICAgICB0aGlzLmpvYklkID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMCk7XG4gICAgICAgIHRoaXMuam9iRGF0YSA9IG9wdC5kYXRhO1xuICAgICAgICB0aGlzLnBpcGVsaW5lSWlkID0gb3B0LnBpcGVsaW5lSWlkO1xuXG4gICAgICAgIHRoaXMud2hlbiA9IGpvYkRhdGEud2hlbiB8fCBcIm9uX3N1Y2Nlc3NcIjtcbiAgICAgICAgdGhpcy5leGlzdHMgPSBqb2JEYXRhLmV4aXN0cyB8fCBbXTtcbiAgICAgICAgdGhpcy5hbGxvd0ZhaWx1cmUgPSBqb2JEYXRhLmFsbG93X2ZhaWx1cmUgPz8gZmFsc2U7XG4gICAgICAgIHRoaXMuZGVwZW5kZW5jaWVzID0gam9iRGF0YS5kZXBlbmRlbmNpZXMgfHwgbnVsbDtcbiAgICAgICAgdGhpcy5ydWxlcyA9IGpvYkRhdGEucnVsZXMgfHwgbnVsbDtcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IHR5cGVvZiBqb2JEYXRhLmVudmlyb25tZW50ID09PSBcInN0cmluZ1wiID8ge25hbWU6IGpvYkRhdGEuZW52aXJvbm1lbnR9IDogam9iRGF0YS5lbnZpcm9ubWVudDtcblxuICAgICAgICBjb25zdCBtYXRyaXhWYXJpYWJsZXMgPSBvcHQubWF0cml4VmFyaWFibGVzID8/IHt9O1xuICAgICAgICB0aGlzLl92YXJpYWJsZXMgPSB7Li4uZ2xvYmFsVmFyaWFibGVzIHx8IHt9LCAuLi5qb2JEYXRhLnZhcmlhYmxlcyB8fCB7fSwgLi4ubWF0cml4VmFyaWFibGVzLCAuLi5wcmVkZWZpbmVkVmFyaWFibGVzLCAuLi5hcmd2VmFyaWFibGVzfTtcblxuICAgICAgICBsZXQgY2lQcm9qZWN0RGlyID0gYCR7Y3dkfWA7XG4gICAgICAgIGlmICh0aGlzLmpvYkRhdGFbXCJpbWFnZVwiXSkge1xuICAgICAgICAgICAgY2lQcm9qZWN0RGlyID0gXCIvZ2NsLWJ1aWxkc1wiO1xuICAgICAgICB9IGVsc2UgaWYgKGFyZ3Yuc2hlbGxJc29sYXRpb24pIHtcbiAgICAgICAgICAgIGNpUHJvamVjdERpciA9IGAke2N3ZH0vJHtzdGF0ZURpcn0vYnVpbGRzLyR7dGhpcy5zYWZlSm9iTmFtZX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX0pPQl9JRFwiXSA9IGAke3RoaXMuam9iSWR9YDtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX1BJUEVMSU5FX0lEXCJdID0gYCR7dGhpcy5waXBlbGluZUlpZCArIDEwMDB9YDtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX1BJUEVMSU5FX0lJRFwiXSA9IGAke3RoaXMucGlwZWxpbmVJaWR9YDtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX0pPQl9OQU1FXCJdID0gYCR7dGhpcy5uYW1lfWA7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9KT0JfTkFNRV9TTFVHXCJdID0gYCR7dGhpcy5uYW1lLnJlcGxhY2UoL1teYS16XFxkXSsvaWcsIFwiLVwiKS5yZXBsYWNlKC9eLS8sIFwiXCIpLnNsaWNlKDAsIDYzKS5yZXBsYWNlKC8tJC8sIFwiXCIpLnRvTG93ZXJDYXNlKCl9YDtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX0pPQl9TVEFHRVwiXSA9IGAke3RoaXMuc3RhZ2V9YDtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX1BST0pFQ1RfRElSXCJdID0gY2lQcm9qZWN0RGlyO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfSk9CX1VSTFwiXSA9IGBodHRwczovLyR7Z2l0RGF0YS5yZW1vdGUuaG9zdH0vJHtnaXREYXRhLnJlbW90ZS5ncm91cH0vJHtnaXREYXRhLnJlbW90ZS5wcm9qZWN0fS8tL2pvYnMvJHt0aGlzLmpvYklkfWA7IC8vIENoYW5nZXMgb24gcmVydW4uXG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9QSVBFTElORV9VUkxcIl0gPSBgaHR0cHM6Ly8ke2dpdERhdGEucmVtb3RlLmhvc3R9LyR7Z2l0RGF0YS5yZW1vdGUuZ3JvdXB9LyR7Z2l0RGF0YS5yZW1vdGUucHJvamVjdH0vcGlwZWxpbmVzLyR7dGhpcy5waXBlbGluZUlpZH1gO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfRU5WSVJPTk1FTlRfTkFNRVwiXSA9IHRoaXMuZW52aXJvbm1lbnQ/Lm5hbWUgPz8gXCJcIjtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX0VOVklST05NRU5UX1NMVUdcIl0gPSB0aGlzLmVudmlyb25tZW50Py5uYW1lPy5yZXBsYWNlKC9bXmEtelxcZF0rL2lnLCBcIi1cIikucmVwbGFjZSgvXi0vLCBcIlwiKS5zbGljZSgwLCAyMykucmVwbGFjZSgvLSQvLCBcIlwiKS50b0xvd2VyQ2FzZSgpID8/IFwiXCI7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9FTlZJUk9OTUVOVF9VUkxcIl0gPSB0aGlzLmVudmlyb25tZW50Py51cmwgPz8gXCJcIjtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX05PREVfSU5ERVhcIl0gPSBgJHtvcHQubm9kZUluZGV4fWA7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9OT0RFX1RPVEFMXCJdID0gYCR7b3B0Lm5vZGVzVG90YWx9YDtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX1JFR0lTVFJZXCJdID0gYGxvY2FsLXJlZ2lzdHJ5LiR7dGhpcy5naXREYXRhLnJlbW90ZS5ob3N0fWA7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9SRUdJU1RSWV9JTUFHRVwiXSA9IGAkQ0lfUkVHSVNUUlkvJHt0aGlzLl92YXJpYWJsZXNbXCJDSV9QUk9KRUNUX1BBVEhcIl19YDtcblxuICAgICAgICAvLyBGaW5kIGVudmlyb25tZW50IG1hdGNoZWQgdmFyaWFibGVzXG4gICAgICAgIGlmICh0aGlzLmVudmlyb25tZW50KSB7XG4gICAgICAgICAgICBjb25zdCBleHBhbmRlZCA9IFV0aWxzLmV4cGFuZFZhcmlhYmxlcyh0aGlzLl92YXJpYWJsZXMpO1xuICAgICAgICAgICAgdGhpcy5lbnZpcm9ubWVudC5uYW1lID0gVXRpbHMuZXhwYW5kVGV4dCh0aGlzLmVudmlyb25tZW50Lm5hbWUsIGV4cGFuZGVkKTtcbiAgICAgICAgICAgIHRoaXMuZW52aXJvbm1lbnQudXJsID0gVXRpbHMuZXhwYW5kVGV4dCh0aGlzLmVudmlyb25tZW50LnVybCwgZXhwYW5kZWQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVudk1hdGNoZWRWYXJpYWJsZXMgPSBVdGlscy5maW5kRW52TWF0Y2hlZFZhcmlhYmxlcyh2YXJpYWJsZXNGcm9tRmlsZXMsIHRoaXMuZmlsZVZhcmlhYmxlc0RpciwgdGhpcy5lbnZpcm9ubWVudCk7XG5cbiAgICAgICAgLy8gTWVyZ2UgYW5kIGV4cGFuZCBhZnRlciBmaW5kaW5nIGVudiBtYXRjaGVkIHZhcmlhYmxlc1xuICAgICAgICB0aGlzLl92YXJpYWJsZXMgPSB7Li4uZ2xvYmFsVmFyaWFibGVzIHx8IHt9LCAuLi5qb2JEYXRhLnZhcmlhYmxlcyB8fCB7fSwgLi4ubWF0cml4VmFyaWFibGVzLCAuLi5wcmVkZWZpbmVkVmFyaWFibGVzLCAuLi5lbnZNYXRjaGVkVmFyaWFibGVzLCAuLi5hcmd2VmFyaWFibGVzfTtcblxuICAgICAgICAvLyBTZXQge3doZW4sIGFsbG93RmFpbHVyZX0gYmFzZWQgb24gcnVsZXMgcmVzdWx0XG4gICAgICAgIGlmICh0aGlzLnJ1bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBydWxlUmVzdWx0ID0gVXRpbHMuZ2V0UnVsZXNSZXN1bHQoe2N3ZCwgcnVsZXM6IHRoaXMucnVsZXMsIHZhcmlhYmxlczogdGhpcy5fdmFyaWFibGVzfSk7XG4gICAgICAgICAgICB0aGlzLndoZW4gPSBydWxlUmVzdWx0LndoZW47XG4gICAgICAgICAgICB0aGlzLmFsbG93RmFpbHVyZSA9IHJ1bGVSZXN1bHQuYWxsb3dGYWlsdXJlO1xuICAgICAgICAgICAgdGhpcy5fdmFyaWFibGVzID0gey4uLmdsb2JhbFZhcmlhYmxlcyB8fCB7fSwgLi4uam9iRGF0YS52YXJpYWJsZXMgfHwge30sIC4uLnJ1bGVSZXN1bHQudmFyaWFibGVzLCAuLi5tYXRyaXhWYXJpYWJsZXMsIC4uLnByZWRlZmluZWRWYXJpYWJsZXMsIC4uLmVudk1hdGNoZWRWYXJpYWJsZXMsIC4uLmFyZ3ZWYXJpYWJsZXN9O1xuICAgICAgICB9XG4gICAgICAgIC8vIERlbGV0ZSB2YXJpYWJsZXMgdGhlIHVzZXIgaW50ZW50aW9uYWxseSB3YW50cyB1bnNldFxuICAgICAgICBmb3IgKGNvbnN0IHVuc2V0VmFyaWFibGUgb2YgYXJndi51bnNldFZhcmlhYmxlcykge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3ZhcmlhYmxlc1t1bnNldFZhcmlhYmxlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFzc2VydCh0aGlzLnNjcmlwdHMgfHwgdGhpcy50cmlnZ2VyLCBjaGFsa2B7Ymx1ZUJyaWdodCAke3RoaXMubmFtZX19IG11c3QgaGF2ZSBzY3JpcHQgc3BlY2lmaWVkYCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaW50ZXJhY3RpdmUgJiYgKHRoaXMud2hlbiAhPT0gXCJtYW51YWxcIiB8fCB0aGlzLmltYWdlTmFtZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcih7bWVzc2FnZTogYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSBASW50ZXJhY3RpdmUgZGVjb3JhdG9yIGNhbm5vdCBoYXZlIGltYWdlOiBhbmQgbXVzdCBiZSB3aGVuOm1hbnVhbGB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmluamVjdFNTSEFnZW50ICYmIHRoaXMuaW1hZ2VOYW1lID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3Ioe21lc3NhZ2U6IGAke3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0gQEluamVjdFNTSEFnZW50IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBpbWFnZTpgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IFtpLCBjXSBvZiBPYmplY3QuZW50cmllczxhbnk+KHRoaXMuY2FjaGUpKSB7XG4gICAgICAgICAgICBhc3NlcnQoW1wicHVsbFwiLCBcInB1c2hcIiwgXCJwdWxsLXB1c2hcIl0uaW5jbHVkZXMoYy5wb2xpY3kpLCBjaGFsa2B7Ymx1ZSAke3RoaXMubmFtZX19IGNhY2hlWyR7aX1dLnBvbGljeSBpcyBub3QgJ3B1bGwnLCAncHVzaCcgb3IgJ3B1bGwtcHVzaCdgKTtcbiAgICAgICAgICAgIGFzc2VydChbXCJvbl9zdWNjZXNzXCIsIFwib25fZmFpbHVyZVwiLCBcImFsd2F5c1wiXS5pbmNsdWRlcyhjLndoZW4pLCBjaGFsa2B7Ymx1ZSAke3RoaXMubmFtZX19IGNhY2hlWyR7aX1dLndoZW4gaXMgbm90ICdvbl9zdWNjZXNzJywgJ29uX2ZhaWx1cmUnIG9yICdhbHdheXMnYCk7XG4gICAgICAgICAgICBhc3NlcnQoQXJyYXkuaXNBcnJheShjLnBhdGhzKSwgY2hhbGtge2JsdWUgJHt0aGlzLm5hbWV9fSBjYWNoZVske2l9XS5wYXRocyBtdXN0IGJlIGFycmF5YCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IFtpLCBzXSBvZiBPYmplY3QuZW50cmllczxhbnk+KHRoaXMuc2VydmljZXMpKSB7XG4gICAgICAgICAgICBhc3NlcnQocy5uYW1lLCBjaGFsa2B7Ymx1ZSAke3RoaXMubmFtZX19IHNlcnZpY2VzWyR7aX1dLm5hbWUgaXMgdW5kZWZpbmVkYCk7XG4gICAgICAgICAgICBhc3NlcnQoIXMuY29tbWFuZCB8fCBBcnJheS5pc0FycmF5KHMuY29tbWFuZCksIGNoYWxrYHtibHVlICR7dGhpcy5uYW1lfX0gc2VydmljZXNbJHtpfV0uY29tbWFuZCBtdXN0IGJlIGFuIGFycmF5YCk7XG4gICAgICAgICAgICBhc3NlcnQoIXMuZW50cnlwb2ludCB8fCBBcnJheS5pc0FycmF5KHMuZW50cnlwb2ludCksIGNoYWxrYHtibHVlICR7dGhpcy5uYW1lfX0gc2VydmljZXNbJHtpfV0uZW50cnlwb2ludCBtdXN0IGJlIGFuIGFycmF5YCk7XG4gICAgICAgIH1cblxuICAgICAgICBhc3NlcnQoIXRoaXMuYXJ0aWZhY3RzPy5wYXRocyB8fCBBcnJheS5pc0FycmF5KHRoaXMuYXJ0aWZhY3RzLnBhdGhzKSwgY2hhbGtge2JsdWUgJHt0aGlzLm5hbWV9fSBhcnRpZmFjdHMucGF0aHMgbXVzdCBiZSBhbiBhcnJheWApO1xuXG4gICAgICAgIGlmICh0aGlzLmltYWdlTmFtZSAmJiBhcmd2Lm1vdW50Q2FjaGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gVXRpbHMuZXhwYW5kVmFyaWFibGVzKHRoaXMuX3ZhcmlhYmxlcyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jYWNoZSkge1xuICAgICAgICAgICAgICAgIGMucGF0aHMuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gVXRpbHMuZXhwYW5kVGV4dChwLCBleHBhbmRlZCk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydCghcGF0aC5pbmNsdWRlcyhcIipcIiksIGNoYWxrYHtibHVlICR7dGhpcy5uYW1lfX0gY2Fubm90IGhhdmUgKiBpbiBjYWNoZSBwYXRocywgd2hlbiAtLW1vdW50LWNhY2hlIGlzIGVuYWJsZWRgKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBhcnRpZmFjdHNUb1NvdXJjZSAoKSB7XG4gICAgICAgIGlmICh0aGlzLmpvYkRhdGFbXCJhcnRpZmFjdHNUb1NvdXJjZVwiXSAhPSBudWxsKSByZXR1cm4gdGhpcy5qb2JEYXRhW1wiYXJ0aWZhY3RzVG9Tb3VyY2VcIl07XG4gICAgICAgIHJldHVybiB0aGlzLmFyZ3YuYXJ0aWZhY3RzVG9Tb3VyY2U7XG4gICAgfVxuXG4gICAgZ2V0IHByZXR0eUR1cmF0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2VuZFRpbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBwcmV0dHlIcnRpbWUodGhpcy5fZW5kVGltZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRUaW1lXG4gICAgICAgICAgICA/IHByZXR0eUhydGltZShwcm9jZXNzLmhydGltZSh0aGlzLl9zdGFydFRpbWUpKVxuICAgICAgICAgICAgOiBcIjAgbXNcIjtcbiAgICB9XG5cbiAgICBnZXQgZm9ybWF0dGVkSm9iTmFtZSAoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcFByZWZpeCA9IHRoaXMuYXJndi5zaG93VGltZXN0YW1wc1xuICAgICAgICAgICAgPyBgWyR7ZGF0ZUZvcm1hdHRlci5mb3JtYXQobmV3IERhdGUoKSl9ICR7dGhpcy5wcmV0dHlEdXJhdGlvbi5wYWRTdGFydCg3KX1dIGBcbiAgICAgICAgICAgIDogXCJcIjtcblxuICAgICAgICAvLyBbMTY6MzM6MTkgMS4zNyBtaW5dIG15LWpvYiAgICAgPiBoZWxsbyB3b3JsZFxuICAgICAgICByZXR1cm4gY2hhbGtgJHt0aW1lc3RhbXBQcmVmaXh9e2JsdWVCcmlnaHQgJHt0aGlzLm5hbWUucGFkRW5kKHRoaXMuam9iTmFtZVBhZCl9fWA7XG4gICAgfVxuXG4gICAgZ2V0IHNhZmVKb2JOYW1lICgpIHtcbiAgICAgICAgcmV0dXJuIFV0aWxzLnNhZmVEb2NrZXJTdHJpbmcodGhpcy5uYW1lKTtcbiAgICB9XG5cbiAgICBnZXQgbmVlZHMgKCk6IE5lZWRbXSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wibmVlZHNcIl0gPz8gbnVsbDtcbiAgICB9XG5cbiAgICBnZXQgYnVpbGRWb2x1bWVOYW1lICgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYGdjbC0ke3RoaXMuc2FmZUpvYk5hbWV9LSR7dGhpcy5qb2JJZH0tYnVpbGRgO1xuICAgIH1cblxuICAgIGdldCB0bXBWb2x1bWVOYW1lICgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYGdjbC0ke3RoaXMuc2FmZUpvYk5hbWV9LSR7dGhpcy5qb2JJZH0tdG1wYDtcbiAgICB9XG5cbiAgICBnZXQgaW1hZ2VOYW1lICgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgY29uc3QgaW1hZ2UgPSB0aGlzLmpvYkRhdGFbXCJpbWFnZVwiXTtcbiAgICAgICAgaWYgKCFpbWFnZSkgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IGV4cGFuZGVkID0gVXRpbHMuZXhwYW5kVmFyaWFibGVzKHRoaXMuX3ZhcmlhYmxlcyk7XG4gICAgICAgIGNvbnN0IGltYWdlTmFtZSA9IFV0aWxzLmV4cGFuZFRleHQoaW1hZ2UubmFtZSwgZXhwYW5kZWQpO1xuICAgICAgICByZXR1cm4gaW1hZ2VOYW1lLmluY2x1ZGVzKFwiOlwiKSA/IGltYWdlTmFtZSA6IGAke2ltYWdlTmFtZX06bGF0ZXN0YDtcbiAgICB9XG5cbiAgICBnZXQgaW1hZ2VFbnRyeXBvaW50ICgpOiBzdHJpbmdbXSB8IG51bGwge1xuICAgICAgICBjb25zdCBpbWFnZSA9IHRoaXMuam9iRGF0YVtcImltYWdlXCJdO1xuXG4gICAgICAgIGlmICghaW1hZ2U/LmVudHJ5cG9pbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGFzc2VydChBcnJheS5pc0FycmF5KGltYWdlLmVudHJ5cG9pbnQpLCBcImltYWdlOmVudHJ5cG9pbnQgbXVzdCBiZSBhbiBhcnJheVwiKTtcbiAgICAgICAgcmV0dXJuIGltYWdlLmVudHJ5cG9pbnQ7XG4gICAgfVxuXG4gICAgZ2V0IHNlcnZpY2VzICgpOiBTZXJ2aWNlW10ge1xuICAgICAgICBjb25zdCBzZXJ2aWNlczogU2VydmljZVtdID0gW107XG4gICAgICAgIGlmICghdGhpcy5qb2JEYXRhW1wic2VydmljZXNcIl0pIHJldHVybiBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHNlcnZpY2Ugb2YgT2JqZWN0LnZhbHVlczxhbnk+KHRoaXMuam9iRGF0YVtcInNlcnZpY2VzXCJdKSkge1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWQgPSBVdGlscy5leHBhbmRWYXJpYWJsZXMoey4uLnRoaXMuX3ZhcmlhYmxlcywgLi4uc2VydmljZVtcInZhcmlhYmxlc1wiXX0pO1xuICAgICAgICAgICAgbGV0IHNlcnZpY2VOYW1lID0gVXRpbHMuZXhwYW5kVGV4dChzZXJ2aWNlW1wibmFtZVwiXSwgZXhwYW5kZWQpO1xuICAgICAgICAgICAgc2VydmljZU5hbWUgPSBzZXJ2aWNlTmFtZS5pbmNsdWRlcyhcIjpcIikgPyBzZXJ2aWNlTmFtZSA6IGAke3NlcnZpY2VOYW1lfTpsYXRlc3RgO1xuICAgICAgICAgICAgc2VydmljZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgbmFtZTogc2VydmljZU5hbWUsXG4gICAgICAgICAgICAgICAgZW50cnlwb2ludDogc2VydmljZVtcImVudHJ5cG9pbnRcIl0gPz8gbnVsbCxcbiAgICAgICAgICAgICAgICBjb21tYW5kOiBzZXJ2aWNlW1wiY29tbWFuZFwiXSA/PyBudWxsLFxuICAgICAgICAgICAgICAgIHZhcmlhYmxlczogZXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgYWxpYXM6IFV0aWxzLmV4cGFuZFRleHQoc2VydmljZVtcImFsaWFzXCJdLCBleHBhbmRlZCkgPz8gbnVsbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJ2aWNlcztcbiAgICB9XG5cbiAgICBzZXQgam9iTmFtZVBhZCAoam9iTmFtZVBhZDogbnVtYmVyKSB7XG4gICAgICAgIGFzc2VydCh0aGlzLl9qb2JOYW1lUGFkID09IG51bGwsIFwidGhpcy5fam9iTmFtZVBhZCBjYW4gb25seSBiZSBzZXQgb25jZVwiKTtcbiAgICAgICAgdGhpcy5fam9iTmFtZVBhZCA9IGpvYk5hbWVQYWQ7XG4gICAgfVxuXG4gICAgZ2V0IGpvYk5hbWVQYWQgKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9qb2JOYW1lUGFkID8/IDA7XG4gICAgfVxuXG4gICAgZ2V0IHByb2R1Y2VycyAoKToge25hbWU6IHN0cmluZzsgZG90ZW52OiBzdHJpbmcgfCBudWxsfVtdIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9kdWNlcnM7XG4gICAgfVxuXG4gICAgc2V0IHByb2R1Y2VycyAocHJvZHVjZXJzOiB7bmFtZTogc3RyaW5nOyBkb3RlbnY6IHN0cmluZyB8IG51bGx9W10gfCBudWxsKSB7XG4gICAgICAgIGFzc2VydCh0aGlzLl9wcm9kdWNlcnMgPT0gbnVsbCwgXCJ0aGlzLl9wcm9kdWNlcnMgY2FuIG9ubHkgYmUgc2V0IG9uY2VcIik7XG4gICAgICAgIHRoaXMuX3Byb2R1Y2VycyA9IHByb2R1Y2VycztcbiAgICB9XG5cbiAgICBnZXQgc3RhZ2UgKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJzdGFnZVwiXSB8fCBcInRlc3RcIjtcbiAgICB9XG5cbiAgICBnZXQgaW50ZXJhY3RpdmUgKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wiaW50ZXJhY3RpdmVcIl0gfHwgZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IGluamVjdFNTSEFnZW50ICgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcImluamVjdFNTSEFnZW50XCJdIHx8IGZhbHNlO1xuICAgIH1cblxuICAgIGdldCBkZXNjcmlwdGlvbiAoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcImRlc2NyaXB0aW9uXCJdID8/IFwiXCI7XG4gICAgfVxuXG4gICAgZ2V0IGFydGlmYWN0cyAoKToge3BhdGhzOiBzdHJpbmdbXTsgZXhjbHVkZT86IHN0cmluZ1tdOyByZXBvcnRzPzoge2RvdGVudj86IHN0cmluZ307IHdoZW4/OiBzdHJpbmd9IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJhcnRpZmFjdHNcIl07XG4gICAgfVxuXG4gICAgZ2V0IGNhY2hlICgpOiBDYWNoZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcImNhY2hlXCJdIHx8IFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRVbmlxdWVDYWNoZU5hbWUgKGN3ZDogc3RyaW5nLCBleHBhbmRlZDoge1trZXk6IHN0cmluZ106IHN0cmluZ30sIGtleTogYW55KSB7XG4gICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiIHx8IGtleSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gVXRpbHMuZXhwYW5kVGV4dChrZXkgPz8gXCJkZWZhdWx0XCIsIGV4cGFuZGVkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJtZC1cIiArIGF3YWl0IFV0aWxzLmNoZWNrc3VtRmlsZXMoa2V5W1wiZmlsZXNcIl0ubWFwKChmOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgJHtjd2R9LyR7VXRpbHMuZXhwYW5kVGV4dChmLCBleHBhbmRlZCl9YDtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIGdldCBiZWZvcmVTY3JpcHRzICgpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJiZWZvcmVfc2NyaXB0XCJdIHx8IFtdO1xuICAgIH1cblxuICAgIGdldCBhZnRlclNjcmlwdHMgKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcImFmdGVyX3NjcmlwdFwiXSB8fCBbXTtcbiAgICB9XG5cbiAgICBnZXQgc2NyaXB0cyAoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wic2NyaXB0XCJdO1xuICAgIH1cblxuICAgIGdldCB0cmlnZ2VyICgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1widHJpZ2dlclwiXTtcbiAgICB9XG5cbiAgICBnZXQgcHJlU2NyaXB0c0V4aXRDb2RlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZTtcbiAgICB9XG5cbiAgICBnZXQgYWZ0ZXJTY3JpcHRzRXhpdENvZGUgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWZ0ZXJTY3JpcHRzRXhpdENvZGU7XG4gICAgfVxuXG4gICAgZ2V0IHN0YXJ0ZWQgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVubmluZyB8fCB0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUgIT09IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0IGZpbmlzaGVkICgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLl9ydW5uaW5nICYmIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICBnZXQgY292ZXJhZ2VQZXJjZW50ICgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvdmVyYWdlUGVyY2VudDtcbiAgICB9XG5cbiAgICBnZXQgZmlsZVZhcmlhYmxlc0RpciAoKSB7XG4gICAgICAgIHJldHVybiBgL3RtcC9naXRsYWItY2ktbG9jYWwtZmlsZS12YXJpYWJsZXMtJHt0aGlzLl92YXJpYWJsZXNbXCJDSV9QUk9KRUNUX1BBVEhfU0xVR1wiXX0tJHt0aGlzLmpvYklkfWA7XG4gICAgfVxuXG4gICAgYXN5bmMgc3RhcnQgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLl9ydW5uaW5nID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBhcmd2ID0gdGhpcy5hcmd2O1xuICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICBjb25zdCB3cml0ZVN0cmVhbXMgPSB0aGlzLndyaXRlU3RyZWFtcztcbiAgICAgICAgY29uc3QgcmVwb3J0c0RvdGVudlZhcmlhYmxlcyA9IGF3YWl0IHRoaXMuaW5pdFByb2R1Y2VyUmVwb3J0c0RvdGVudlZhcmlhYmxlcyh3cml0ZVN0cmVhbXMsIFV0aWxzLmV4cGFuZFZhcmlhYmxlcyh0aGlzLl92YXJpYWJsZXMpKTtcbiAgICAgICAgY29uc3QgZXhwYW5kZWQgPSBVdGlscy5leHBhbmRWYXJpYWJsZXMoey4uLnRoaXMuX3ZhcmlhYmxlcywgLi4ucmVwb3J0c0RvdGVudlZhcmlhYmxlc30pO1xuICAgICAgICBjb25zdCBzYWZlSm9iTmFtZSA9IHRoaXMuc2FmZUpvYk5hbWU7XG5cblxuICAgICAgICBjb25zdCBvdXRwdXRMb2dGaWxlUGF0aCA9IGAke2FyZ3YuY3dkfS8ke2FyZ3Yuc3RhdGVEaXJ9L291dHB1dC8ke3NhZmVKb2JOYW1lfS5sb2dgO1xuICAgICAgICBhd2FpdCBmcy5lbnN1cmVGaWxlKG91dHB1dExvZ0ZpbGVQYXRoKTtcbiAgICAgICAgYXdhaXQgZnMudHJ1bmNhdGUob3V0cHV0TG9nRmlsZVBhdGgpO1xuXG4gICAgICAgIGlmICghdGhpcy5pbnRlcmFjdGl2ZSkge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgc3RhcnRpbmd9ICR7dGhpcy5pbWFnZU5hbWUgPz8gXCJzaGVsbFwifSAoe3llbGxvdyAke3RoaXMuc3RhZ2V9fSlcXG5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmltYWdlTmFtZSkge1xuICAgICAgICAgICAgY29uc3QgYnVpbGRWb2x1bWVOYW1lID0gdGhpcy5idWlsZFZvbHVtZU5hbWU7XG4gICAgICAgICAgICBjb25zdCB0bXBWb2x1bWVOYW1lID0gdGhpcy50bXBWb2x1bWVOYW1lO1xuICAgICAgICAgICAgY29uc3QgZmlsZVZhcmlhYmxlc0RpciA9IHRoaXMuZmlsZVZhcmlhYmxlc0RpcjtcblxuICAgICAgICAgICAgY29uc3Qgdm9sdW1lUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgIHZvbHVtZVByb21pc2VzLnB1c2goVXRpbHMuc3Bhd24oW1wiZG9ja2VyXCIsIFwidm9sdW1lXCIsIFwiY3JlYXRlXCIsIGAke2J1aWxkVm9sdW1lTmFtZX1gXSwgYXJndi5jd2QpKTtcbiAgICAgICAgICAgIHZvbHVtZVByb21pc2VzLnB1c2goVXRpbHMuc3Bhd24oW1wiZG9ja2VyXCIsIFwidm9sdW1lXCIsIFwiY3JlYXRlXCIsIGAke3RtcFZvbHVtZU5hbWV9YF0sIGFyZ3YuY3dkKSk7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXJWb2x1bWVOYW1lcy5wdXNoKGJ1aWxkVm9sdW1lTmFtZSk7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXJWb2x1bWVOYW1lcy5wdXNoKHRtcFZvbHVtZU5hbWUpO1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodm9sdW1lUHJvbWlzZXMpO1xuXG4gICAgICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuICAgICAgICAgICAgY29uc3Qge3N0ZG91dDogY29udGFpbmVySWR9ID0gYXdhaXQgVXRpbHMuc3Bhd24oW1xuICAgICAgICAgICAgICAgIFwiZG9ja2VyXCIsIFwiY3JlYXRlXCIsIGAtLXZvbHVtZT0ke2J1aWxkVm9sdW1lTmFtZX06L2djbC1idWlsZHNgLCBgLS12b2x1bWU9JHt0bXBWb2x1bWVOYW1lfToke3RoaXMuZmlsZVZhcmlhYmxlc0Rpcn1gLCBcImRvY2tlci5pby9maXJlY293L2dpdGxhYi1jaS1sb2NhbC11dGlsXCIsXG4gICAgICAgICAgICAgICAgXCJiYXNoXCIsIFwiLWNcIiwgXCJjaG93biAwOjAgLVIgL2djbC1idWlsZHMvICYmIGNobW9kIGErcncgLVIgL2djbC1idWlsZHMvICYmIGNobW9kIGErcncgLVIgL3RtcC9cIixcbiAgICAgICAgICAgIF0sIGFyZ3YuY3dkKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lcnNUb0NsZWFuLnB1c2goY29udGFpbmVySWQpO1xuICAgICAgICAgICAgaWYgKGF3YWl0IGZzLnBhdGhFeGlzdHMoZmlsZVZhcmlhYmxlc0RpcikpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJjcFwiLCBgJHtmaWxlVmFyaWFibGVzRGlyfS8uYCwgYCR7Y29udGFpbmVySWR9OiR7ZmlsZVZhcmlhYmxlc0Rpcn1gXSwgYXJndi5jd2QpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW1wiZG9ja2VyXCIsIFwiY3BcIiwgYCR7YXJndi5zdGF0ZURpcn0vYnVpbGRzLy5kb2NrZXIvLmAsIGAke2NvbnRhaW5lcklkfTovZ2NsLWJ1aWxkc2BdLCBhcmd2LmN3ZCk7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJzdGFydFwiLCBcIi0tYXR0YWNoXCIsIGNvbnRhaW5lcklkXSwgYXJndi5jd2QpO1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW1wiZG9ja2VyXCIsIFwicm1cIiwgXCItdmZcIiwgY29udGFpbmVySWRdLCBhcmd2LmN3ZCk7XG4gICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBjb3BpZWQgdG8gZG9ja2VyIHZvbHVtZXN9IGluIHttYWdlbnRhICR7cHJldHR5SHJ0aW1lKGVuZFRpbWUpfX1cXG5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlcnZpY2VzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlRG9ja2VyTmV0d29yayhgZ2l0bGFiLWNpLWxvY2FsLSR7dGhpcy5qb2JJZH1gKTtcblxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcy5tYXAoYXN5bmMgKHNlcnZpY2UsIHNlcnZpY2VJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IHNlcnZpY2UubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wdWxsSW1hZ2Uod3JpdGVTdHJlYW1zLCBzZXJ2aWNlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VDb250YWluZXJJZCA9IGF3YWl0IHRoaXMuc3RhcnRTZXJ2aWNlKHdyaXRlU3RyZWFtcywgVXRpbHMuZXhwYW5kVmFyaWFibGVzKHsuLi5leHBhbmRlZCwgLi4uc2VydmljZS52YXJpYWJsZXN9KSwgc2VydmljZSwgc2VydmljZUluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VydmljZUNvbnRhbmVyTG9nRmlsZSA9IGAke2FyZ3YuY3dkfS8ke2FyZ3Yuc3RhdGVEaXJ9L3NlcnZpY2VzLW91dHB1dC8ke3RoaXMuc2FmZUpvYk5hbWV9LyR7c2VydmljZU5hbWV9LSR7c2VydmljZUluZGV4fS5sb2dgO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNlcnZpY2VIZWFsdGhDaGVjayh3cml0ZVN0cmVhbXMsIHNlcnZpY2UsIHNlcnZpY2VJbmRleCwgc2VydmljZUNvbnRhbmVyTG9nRmlsZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHtzdGRvdXQsIHN0ZGVycn0gPSBhd2FpdCBVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJsb2dzXCIsIHNlcnZpY2VDb250YWluZXJJZF0pO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBmcy5lbnN1cmVGaWxlKHNlcnZpY2VDb250YW5lckxvZ0ZpbGUpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBmcy5wcm9taXNlcy53cml0ZUZpbGUoc2VydmljZUNvbnRhbmVyTG9nRmlsZSwgYCMjIyBzdGRvdXQgIyMjXFxuJHtzdGRvdXR9XFxuIyMjIHN0ZGVyciAjIyNcXG4ke3N0ZGVycn1cXG5gKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByZXNjcmlwdHMgPSB0aGlzLmJlZm9yZVNjcmlwdHMuY29uY2F0KHRoaXMuc2NyaXB0cyk7XG4gICAgICAgIGV4cGFuZGVkW1wiQ0lfSk9CX1NUQVRVU1wiXSA9IFwicnVubmluZ1wiO1xuICAgICAgICB0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUgPSBhd2FpdCB0aGlzLmV4ZWNTY3JpcHRzKHByZXNjcmlwdHMsIGV4cGFuZGVkKTtcbiAgICAgICAgaWYgKHRoaXMuYWZ0ZXJTY3JpcHRzLmxlbmd0aCA9PT0gMCAmJiB0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUgPiAwICYmICF0aGlzLmFsbG93RmFpbHVyZSkge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckVuZFRpbWUoKTtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoYCR7dGhpcy5nZXRFeGl0ZWRTdHJpbmcodGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlLCBmYWxzZSl9XFxuYCk7XG4gICAgICAgICAgICB0aGlzLl9ydW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNsZWFudXBSZXNvdXJjZXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFmdGVyU2NyaXB0cy5sZW5ndGggPT09IDAgJiYgdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlID4gMCAmJiB0aGlzLmFsbG93RmFpbHVyZSkge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckVuZFRpbWUoKTtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoYCR7dGhpcy5nZXRFeGl0ZWRTdHJpbmcodGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlLCB0cnVlKX1cXG5gKTtcbiAgICAgICAgICAgIHRoaXMuX3J1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2xlYW51cFJlc291cmNlcygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSA+IDAgJiYgdGhpcy5hbGxvd0ZhaWx1cmUpIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJFbmRUaW1lKCk7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGAke3RoaXMuZ2V0RXhpdGVkU3RyaW5nKHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSwgdHJ1ZSl9XFxuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlID4gMCAmJiAhdGhpcy5hbGxvd0ZhaWx1cmUpIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJFbmRUaW1lKCk7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGAke3RoaXMuZ2V0RXhpdGVkU3RyaW5nKHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSwgZmFsc2UpfVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWZ0ZXJTY3JpcHRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGV4cGFuZGVkW1wiQ0lfSk9CX1NUQVRVU1wiXSA9IHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSA9PT0gMCA/IFwic3VjY2Vzc1wiIDogXCJmYWlsZWRcIjtcbiAgICAgICAgICAgIHRoaXMuX2FmdGVyU2NyaXB0c0V4aXRDb2RlID0gYXdhaXQgdGhpcy5leGVjU2NyaXB0cyh0aGlzLmFmdGVyU2NyaXB0cywgZXhwYW5kZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2FmdGVyU2NyaXB0c0V4aXRDb2RlID4gMCkge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckVuZFRpbWUoKTtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoYCR7dGhpcy5nZXRFeGl0ZWRTdHJpbmcodGhpcy5fYWZ0ZXJTY3JpcHRzRXhpdENvZGUsIHRydWUsIFwiIGFmdGVyX3NjcmlwdFwiKX1cXG5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJFbmRUaW1lKCk7XG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoYCR7dGhpcy5nZXRGaW5pc2hlZFN0cmluZygpfVxcbmApO1xuXG4gICAgICAgIGlmICh0aGlzLmpvYkRhdGFbXCJjb3ZlcmFnZVwiXSkge1xuICAgICAgICAgICAgdGhpcy5fY292ZXJhZ2VQZXJjZW50ID0gYXdhaXQgVXRpbHMuZ2V0Q292ZXJhZ2VQZXJjZW50KGFyZ3YuY3dkLCBhcmd2LnN0YXRlRGlyLCB0aGlzLmpvYkRhdGFbXCJjb3ZlcmFnZVwiXSwgc2FmZUpvYk5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcnVubmluZyA9IGZhbHNlO1xuICAgICAgICBhd2FpdCB0aGlzLmNsZWFudXBSZXNvdXJjZXMoKTtcbiAgICB9XG5cbiAgICBhc3luYyBjbGVhbnVwUmVzb3VyY2VzICgpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2xvbmdSdW5uaW5nU2lsZW50VGltZW91dCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmFyZ3YuY2xlYW51cCkgcmV0dXJuO1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgdGhpcy5fY29udGFpbmVyc1RvQ2xlYW4pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW1wiZG9ja2VyXCIsIFwicm1cIiwgXCItdmZcIiwgYCR7aWR9YF0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGFzc2VydChlIGluc3RhbmNlb2YgRXJyb3IsIFwiZSBpcyBub3QgaW5zdGFuY2VvZiBFcnJvclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9zZXJ2aWNlTmV0d29ya0lkKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcIm5ldHdvcmtcIiwgXCJybVwiLCBgJHt0aGlzLl9zZXJ2aWNlTmV0d29ya0lkfWBdKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZSBpbnN0YW5jZW9mIEVycm9yLCBcImUgaXMgbm90IGluc3RhbmNlb2YgRXJyb3JcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fY29udGFpbmVyVm9sdW1lTmFtZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbnRhaW5lclZvbHVtZSBvZiB0aGlzLl9jb250YWluZXJWb2x1bWVOYW1lcykge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJ2b2x1bWVcIiwgXCJybVwiLCBgJHtjb250YWluZXJWb2x1bWV9YF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZSBpbnN0YW5jZW9mIEVycm9yLCBcImUgaXMgbm90IGluc3RhbmNlb2YgRXJyb3JcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlVmFyaWFibGVzRGlyID0gdGhpcy5maWxlVmFyaWFibGVzRGlyO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZnMucm0oZmlsZVZhcmlhYmxlc0Rpciwge3JlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWV9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXNzZXJ0KGUgaW5zdGFuY2VvZiBFcnJvciwgXCJlIGlzIG5vdCBpbnN0YW5jZW9mIEVycm9yXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUluamVjdFNTSEFnZW50T3B0aW9ucyAoKSB7XG4gICAgICAgIGlmICghdGhpcy5pbmplY3RTU0hBZ2VudCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09IFwiZGFyd2luXCIgfHwgL15kYXJ3aW4vLmV4ZWMocHJvY2Vzcy5lbnYuT1NUWVBFID8/IFwiXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCItLWVudiBTU0hfQVVUSF9TT0NLPS9ydW4vaG9zdC1zZXJ2aWNlcy9zc2gtYXV0aC5zb2NrIC12IC9ydW4vaG9zdC1zZXJ2aWNlcy9zc2gtYXV0aC5zb2NrOi9ydW4vaG9zdC1zZXJ2aWNlcy9zc2gtYXV0aC5zb2NrXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAtLWVudiBTU0hfQVVUSF9TT0NLPSR7cHJvY2Vzcy5lbnYuU1NIX0FVVEhfU09DS30gLXYgJHtwcm9jZXNzLmVudi5TU0hfQVVUSF9TT0NLfToke3Byb2Nlc3MuZW52LlNTSF9BVVRIX1NPQ0t9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlU2NyaXB0Q29tbWFuZHMgKHNjcmlwdHM6IHN0cmluZ1tdKSB7XG4gICAgICAgIGxldCBjbWQgPSBcIlwiO1xuICAgICAgICBzY3JpcHRzLmZvckVhY2goKHNjcmlwdCkgPT4ge1xuICAgICAgICAgICAgLy8gUHJpbnQgY29tbWFuZCBlY2hvJ2VkIGluIGNvbG9yXG4gICAgICAgICAgICBjb25zdCBzcGxpdCA9IHNjcmlwdC5zcGxpdCgvXFxyP1xcbi8pO1xuICAgICAgICAgICAgY29uc3QgbXVsdGlsaW5lVGV4dCA9IHNwbGl0Lmxlbmd0aCA+IDEgPyBcIiAjIGNvbGxhcHNlZCBtdWx0aS1saW5lIGNvbW1hbmRcIiA6IFwiXCI7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gc3BsaXRbMF0/LnJlcGxhY2UoL1xcXFwvZywgXCJcXFxcXFxcXFwiKS5yZXBsYWNlKC9cIi9nLCBcIlxcXFxcXFwiXCIpLnJlcGxhY2UoL1skXS9nLCBcIlxcXFwkXCIpO1xuICAgICAgICAgICAgY21kICs9IGNoYWxrYGVjaG8gXCJ7Z3JlZW4gJCAke3RleHR9JHttdWx0aWxpbmVUZXh0fX1cIlxcbmA7XG5cbiAgICAgICAgICAgIC8vIEV4ZWN1dGUgYWN0dWFsIHNjcmlwdFxuICAgICAgICAgICAgY21kICs9IGAke3NjcmlwdH1cXG5gO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNtZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIG1vdW50Q2FjaGVDbWQgKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBleHBhbmRlZDoge1trZXk6IHN0cmluZ106IHN0cmluZ30pIHtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VOYW1lICYmICF0aGlzLmFyZ3YubW91bnRDYWNoZSkgcmV0dXJuIFtdO1xuXG4gICAgICAgIGNvbnN0IGNtZDogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2FjaGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHVuaXF1ZUNhY2hlTmFtZSA9IGF3YWl0IHRoaXMuZ2V0VW5pcXVlQ2FjaGVOYW1lKHRoaXMuYXJndi5jd2QsIGV4cGFuZGVkLCBjLmtleSk7XG4gICAgICAgICAgICBjLnBhdGhzLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gVXRpbHMuZXhwYW5kVGV4dChwLCBleHBhbmRlZCk7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgbW91bnRpbmcgY2FjaGV9IGZvciBwYXRoICR7cGF0aH1cXG5gKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWNoZU1vdW50ID0gVXRpbHMuc2FmZURvY2tlclN0cmluZyhgZ2NsLSR7ZXhwYW5kZWQuQ0lfUFJPSkVDVF9QQVRIX1NMVUd9LSR7dW5pcXVlQ2FjaGVOYW1lfWApO1xuICAgICAgICAgICAgICAgIGNtZC5wdXNoKFwiLXZcIiwgYCR7Y2FjaGVNb3VudH06L2djbC1idWlsZHMvJHtwYXRofWApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNtZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGV4ZWNTY3JpcHRzIChzY3JpcHRzOiBzdHJpbmdbXSwgZXhwYW5kZWQ6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3QgY3dkID0gdGhpcy5hcmd2LmN3ZDtcbiAgICAgICAgY29uc3Qgc3RhdGVEaXIgPSB0aGlzLmFyZ3Yuc3RhdGVEaXI7XG4gICAgICAgIGNvbnN0IHNhZmVKb2JOYW1lID0gdGhpcy5zYWZlSm9iTmFtZTtcbiAgICAgICAgY29uc3Qgb3V0cHV0RmlsZXNQYXRoID0gYCR7Y3dkfS8ke3N0YXRlRGlyfS9vdXRwdXQvJHtzYWZlSm9iTmFtZX0ubG9nYDtcbiAgICAgICAgY29uc3QgYnVpbGRWb2x1bWVOYW1lID0gdGhpcy5idWlsZFZvbHVtZU5hbWU7XG4gICAgICAgIGNvbnN0IHRtcFZvbHVtZU5hbWUgPSB0aGlzLnRtcFZvbHVtZU5hbWU7XG4gICAgICAgIGNvbnN0IHdyaXRlU3RyZWFtcyA9IHRoaXMud3JpdGVTdHJlYW1zO1xuXG4gICAgICAgIGlmIChzY3JpcHRzLmxlbmd0aCA9PT0gMCB8fCBzY3JpcHRzWzBdID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29weSBnaXQgdHJhY2tlZCBmaWxlcyB0byBidWlsZCBmb2xkZXIgaWYgc2hlbGwgaXNvbGF0aW9uIGVuYWJsZWQuXG4gICAgICAgIGlmICghdGhpcy5pbWFnZU5hbWUgJiYgdGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uKSB7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5yc3luY1RyYWNrZWRGaWxlcyhjd2QsIHN0YXRlRGlyLCBgJHtzYWZlSm9iTmFtZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmludGVyYWN0aXZlKSB7XG4gICAgICAgICAgICBjb25zdCBpQ21kID0gdGhpcy5nZW5lcmF0ZVNjcmlwdENvbW1hbmRzKHNjcmlwdHMpO1xuICAgICAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVDcCA9IGV4ZWNhKGlDbWQsIHtcbiAgICAgICAgICAgICAgICBjd2QsXG4gICAgICAgICAgICAgICAgc2hlbGw6IFwiYmFzaFwiLFxuICAgICAgICAgICAgICAgIHN0ZGlvOiBbXCJpbmhlcml0XCIsIFwiaW5oZXJpdFwiLCBcImluaGVyaXRcIl0sXG4gICAgICAgICAgICAgICAgZW52OiB7Li4uZXhwYW5kZWQsIC4uLnByb2Nlc3MuZW52fSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIHZvaWQgaW50ZXJhY3RpdmVDcC5vbihcImV4aXRcIiwgKGNvZGUpID0+IHJlc29sdmUoY29kZSA/PyAwKSk7XG4gICAgICAgICAgICAgICAgdm9pZCBpbnRlcmFjdGl2ZUNwLm9uKFwiZXJyb3JcIiwgKGVycikgPT4gcmVqZWN0KGVycikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlZnJlc2hMb25nUnVubmluZ1NpbGVudFRpbWVvdXQod3JpdGVTdHJlYW1zKTtcblxuICAgICAgICBpZiAodGhpcy5pbWFnZU5hbWUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHVsbEltYWdlKHdyaXRlU3RyZWFtcywgdGhpcy5pbWFnZU5hbWUpO1xuXG4gICAgICAgICAgICBsZXQgZG9ja2VyQ21kID0gYGRvY2tlciBjcmVhdGUgLS1pbnRlcmFjdGl2ZSAke3RoaXMuZ2VuZXJhdGVJbmplY3RTU0hBZ2VudE9wdGlvbnMoKX0gYDtcbiAgICAgICAgICAgIGlmICh0aGlzLmFyZ3YucHJpdmlsZWdlZCkge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIi0tcHJpdmlsZWdlZCBcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuYXJndi51bGltaXQgPiAwKSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLXVsaW1pdCBub2ZpbGU9JHt0aGlzLmFyZ3YudWxpbWl0fSBgO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5hcmd2LnVtYXNrKSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiLS11c2VyIDA6MCBcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuc2VydmljZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS1uZXR3b3JrIGdpdGxhYi1jaS1sb2NhbC0ke3RoaXMuam9iSWR9IGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS12b2x1bWUgJHtidWlsZFZvbHVtZU5hbWV9Oi9nY2wtYnVpbGRzIGA7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdm9sdW1lICR7dG1wVm9sdW1lTmFtZX06JHt0aGlzLmZpbGVWYXJpYWJsZXNEaXJ9IGA7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCItLXdvcmtkaXIgL2djbC1idWlsZHMgXCI7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgdm9sdW1lIG9mIHRoaXMuYXJndi52b2x1bWUpIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdm9sdW1lICR7dm9sdW1lfSBgO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGV4dHJhSG9zdCBvZiB0aGlzLmFyZ3YuZXh0cmFIb3N0KSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLWFkZC1ob3N0PSR7ZXh0cmFIb3N0fSBgO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBlbnRyeXBvaW50RmlsZSA9IGAke2N3ZH0vJHtzdGF0ZURpcn0vc2NyaXB0cy9pbWFnZV9lbnRyeS8ke3NhZmVKb2JOYW1lfWA7XG4gICAgICAgICAgICBpZiAodGhpcy5pbWFnZUVudHJ5cG9pbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbWFnZUVudHJ5cG9pbnRbMF0gPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCItLWVudHJ5cG9pbnQgJycgXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZnMub3V0cHV0RmlsZShlbnRyeXBvaW50RmlsZSwgXCIjIS9iaW4vc2hcXG5cIik7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGZzLmFwcGVuZEZpbGUoZW50cnlwb2ludEZpbGUsIGAke3RoaXMuaW1hZ2VFbnRyeXBvaW50LmpvaW4oXCIgXCIpfWApO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBmcy5jaG1vZChlbnRyeXBvaW50RmlsZSwgXCIwNzU1XCIpO1xuICAgICAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCItLWVudHJ5cG9pbnQgJy9nY2wtZW50cnknIFwiO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBmcy5hcHBlbmRGaWxlKGVudHJ5cG9pbnRGaWxlLCBcIiBcXFwiJEBcXFwiXFxuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZXhwYW5kZWQpKSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtZSAke2tleX0gYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAkeyhhd2FpdCB0aGlzLm1vdW50Q2FjaGVDbWQod3JpdGVTdHJlYW1zLCBleHBhbmRlZCkpLmpvaW4oXCIgXCIpfSBgO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAke3RoaXMuaW1hZ2VOYW1lfSBzaCAtYyBcIlxcbmA7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJpZiBbIC14IC91c3IvbG9jYWwvYmluL2Jhc2ggXTsgdGhlblxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhlYyAvdXNyL2xvY2FsL2Jpbi9iYXNoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxpZiBbIC14IC91c3IvYmluL2Jhc2ggXTsgdGhlblxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhlYyAvdXNyL2Jpbi9iYXNoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxpZiBbIC14IC9iaW4vYmFzaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC9iaW4vYmFzaCBcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImVsaWYgWyAteCAvdXNyL2xvY2FsL2Jpbi9zaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC91c3IvbG9jYWwvYmluL3NoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxpZiBbIC14IC91c3IvYmluL3NoIF07IHRoZW5cXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGV4ZWMgL3Vzci9iaW4vc2ggXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJlbGlmIFsgLXggL2Jpbi9zaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC9iaW4vc2ggXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJlbGlmIFsgLXggL2J1c3lib3gvc2ggXTsgdGhlblxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhlYyAvYnVzeWJveC9zaCBcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImVsc2VcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGVjaG8gc2hlbGwgbm90IGZvdW5kXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGl0IDFcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImZpXFxuXFxcIlwiO1xuXG4gICAgICAgICAgICBjb25zdCB7c3Rkb3V0OiBjb250YWluZXJJZH0gPSBhd2FpdCBVdGlscy5iYXNoKGRvY2tlckNtZCwgY3dkLCBleHBhbmRlZCk7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXJJZCA9IGNvbnRhaW5lcklkO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyc1RvQ2xlYW4ucHVzaCh0aGlzLl9jb250YWluZXJJZCk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLmNvcHlDYWNoZUluKHdyaXRlU3RyZWFtcywgZXhwYW5kZWQpO1xuICAgICAgICBhd2FpdCB0aGlzLmNvcHlBcnRpZmFjdHNJbih3cml0ZVN0cmVhbXMpO1xuXG4gICAgICAgIGxldCBjbWQgPSBcInNldCAtZW8gcGlwZWZhaWxcXG5cIjtcbiAgICAgICAgY21kICs9IFwiZXhlYyAwPCAvZGV2L251bGxcXG5cIjtcblxuICAgICAgICBpZiAoIXRoaXMuaW1hZ2VOYW1lICYmIHRoaXMuYXJndi5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgY21kICs9IGBjZCAke3N0YXRlRGlyfS9idWlsZHMvJHtzYWZlSm9iTmFtZX0vXFxuYDtcbiAgICAgICAgfVxuICAgICAgICBjbWQgKz0gdGhpcy5nZW5lcmF0ZVNjcmlwdENvbW1hbmRzKHNjcmlwdHMpO1xuXG4gICAgICAgIGNtZCArPSBcImV4aXQgMFxcblwiO1xuXG4gICAgICAgIGF3YWl0IGZzLm91dHB1dEZpbGUoYCR7Y3dkfS8ke3N0YXRlRGlyfS9zY3JpcHRzLyR7c2FmZUpvYk5hbWV9YCwgY21kLCBcInV0Zi04XCIpO1xuICAgICAgICBhd2FpdCBmcy5jaG1vZChgJHtjd2R9LyR7c3RhdGVEaXJ9L3NjcmlwdHMvJHtzYWZlSm9iTmFtZX1gLCBcIjA3NTVcIik7XG5cbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VOYW1lKSB7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJjcFwiLCBgJHtzdGF0ZURpcn0vc2NyaXB0cy8ke3NhZmVKb2JOYW1lfWAsIGAke3RoaXMuX2NvbnRhaW5lcklkfTovZ2NsLWNtZGBdLCBjd2QpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmltYWdlRW50cnlwb2ludCAmJiB0aGlzLmltYWdlRW50cnlwb2ludFswXSAhPSBcIlwiKSB7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJjcFwiLCBgJHtzdGF0ZURpcn0vc2NyaXB0cy9pbWFnZV9lbnRyeS8ke3NhZmVKb2JOYW1lfWAsIGAke3RoaXMuX2NvbnRhaW5lcklkfTovZ2NsLWVudHJ5YF0sIGN3ZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjcCA9IGV4ZWNhKHRoaXMuX2NvbnRhaW5lcklkID8gYGRvY2tlciBzdGFydCAtLWF0dGFjaCAtaSAke3RoaXMuX2NvbnRhaW5lcklkfWAgOiBcImJhc2hcIiwge1xuICAgICAgICAgICAgY3dkLFxuICAgICAgICAgICAgc2hlbGw6IFwiYmFzaFwiLFxuICAgICAgICAgICAgZW52OiBleHBhbmRlZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgb3V0RnVuYyA9IChsaW5lOiBzdHJpbmcsIHN0cmVhbTogKHR4dDogc3RyaW5nKSA9PiB2b2lkLCBjb2xvcml6ZTogKHN0cjogc3RyaW5nKSA9PiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuICAgICAgICAgICAgc3RyZWFtKGAke3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0gYCk7XG4gICAgICAgICAgICBpZiAoIWxpbmUuc3RhcnRzV2l0aChcIlxcdTAwMWJbMzJtJFwiKSkge1xuICAgICAgICAgICAgICAgIHN0cmVhbShgJHtjb2xvcml6ZShcIj5cIil9IGApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RyZWFtKGAke2xpbmV9XFxuYCk7XG4gICAgICAgICAgICBmcy5hcHBlbmRGaWxlU3luYyhvdXRwdXRGaWxlc1BhdGgsIGAke2xpbmV9XFxuYCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcXVpZXQgPSB0aGlzLmFyZ3YucXVpZXQ7XG4gICAgICAgIGNvbnN0IGV4aXRDb2RlID0gYXdhaXQgbmV3IFByb21pc2U8bnVtYmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXF1aWV0KSB7XG4gICAgICAgICAgICAgICAgY3Auc3Rkb3V0Py5waXBlKHNwbGl0MigpKS5vbihcImRhdGFcIiwgKGU6IHN0cmluZykgPT4gb3V0RnVuYyhlLCB3cml0ZVN0cmVhbXMuc3Rkb3V0LmJpbmQod3JpdGVTdHJlYW1zKSwgKHMpID0+IGNoYWxrYHtncmVlbkJyaWdodCAke3N9fWApKTtcbiAgICAgICAgICAgICAgICBjcC5zdGRlcnI/LnBpcGUoc3BsaXQyKCkpLm9uKFwiZGF0YVwiLCAoZTogc3RyaW5nKSA9PiBvdXRGdW5jKGUsIHdyaXRlU3RyZWFtcy5zdGRlcnIuYmluZCh3cml0ZVN0cmVhbXMpLCAocykgPT4gY2hhbGtge3JlZEJyaWdodCAke3N9fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZvaWQgY3Aub24oXCJleGl0XCIsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMCkpO1xuICAgICAgICAgICAgdm9pZCBjcC5vbihcImVycm9yXCIsIChlcnIpID0+IHJlamVjdChlcnIpKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaW1hZ2VOYW1lKSB7XG4gICAgICAgICAgICAgICAgY3Auc3RkaW4/LmVuZChcIi9nY2wtY21kXCIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjcC5zdGRpbj8uZW5kKGAuLyR7c3RhdGVEaXJ9L3NjcmlwdHMvJHtzYWZlSm9iTmFtZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5jb3B5Q2FjaGVPdXQod3JpdGVTdHJlYW1zLCBleHBhbmRlZCwgZXhpdENvZGUpO1xuXG4gICAgICAgIGlmIChleGl0Q29kZSA9PSAwIHx8IHRoaXMuYXJ0aWZhY3RzPy53aGVuID09PSBcImFsd2F5c1wiKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvcHlBcnRpZmFjdHNPdXQod3JpdGVTdHJlYW1zLCBleHBhbmRlZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXhpdENvZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBwdWxsSW1hZ2UgKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBpbWFnZVRvUHVsbDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW1wiZG9ja2VyXCIsIFwiaW1hZ2VcIiwgXCJpbnNwZWN0XCIsIGltYWdlVG9QdWxsXSk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgaWYgKGUuc3RkZXJyPy5pbmNsdWRlcyhcIk5vIHN1Y2ggaW1hZ2VcIikgfHwgZS5zdGRlcnI/LmluY2x1ZGVzKFwiZmFpbGVkIHRvIGZpbmQgaW1hZ2VcIikpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJwdWxsXCIsIGltYWdlVG9QdWxsXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IHB1bGxlZH0gJHtpbWFnZVRvUHVsbH0gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGluaXRQcm9kdWNlclJlcG9ydHNEb3RlbnZWYXJpYWJsZXMgKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBleHBhbmRlZDoge1trZXk6IHN0cmluZ106IHN0cmluZ30pIHtcbiAgICAgICAgY29uc3QgY3dkID0gdGhpcy5hcmd2LmN3ZDtcbiAgICAgICAgY29uc3Qgc3RhdGVEaXIgPSB0aGlzLmFyZ3Yuc3RhdGVEaXI7XG4gICAgICAgIGNvbnN0IHByb2R1Y2VycyA9IHRoaXMucHJvZHVjZXJzO1xuICAgICAgICBsZXQgcHJvZHVjZXJSZXBvcnRzRW52cyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHByb2R1Y2VyIG9mIHByb2R1Y2VycyA/PyBbXSkge1xuICAgICAgICAgICAgY29uc3QgcHJvZHVjZXJEb3RlbnYgPSBVdGlscy5leHBhbmRUZXh0KHByb2R1Y2VyLmRvdGVudiwgZXhwYW5kZWQpO1xuICAgICAgICAgICAgaWYgKHByb2R1Y2VyRG90ZW52ID09PSBudWxsKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3Qgc2FmZVByb2R1Y2VyTmFtZSA9IFV0aWxzLnNhZmVEb2NrZXJTdHJpbmcocHJvZHVjZXIubmFtZSk7XG4gICAgICAgICAgICBjb25zdCBkb3RlbnZGb2xkZXIgPSBgJHtjd2R9LyR7c3RhdGVEaXJ9L2FydGlmYWN0cy8ke3NhZmVQcm9kdWNlck5hbWV9Ly5naXRsYWItY2ktcmVwb3J0cy9kb3RlbnYvYDtcbiAgICAgICAgICAgIGlmIChhd2FpdCBmcy5wYXRoRXhpc3RzKGRvdGVudkZvbGRlcikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkb3RlbnZGaWxlcyA9IChhd2FpdCBVdGlscy5zcGF3bihbXCJmaW5kXCIsIFwiLlwiLCBcIi10eXBlXCIsIFwiZlwiXSwgZG90ZW52Rm9sZGVyKSkuc3Rkb3V0LnNwbGl0KFwiXFxuXCIpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZG90ZW52RmlsZSBvZiBkb3RlbnZGaWxlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZG90ZW52RmlsZSA9PSBcIlwiKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvZHVjZXJSZXBvcnRFbnYgPSBkb3RlbnYucGFyc2UoYXdhaXQgZnMucmVhZEZpbGUoYCR7ZG90ZW52Rm9sZGVyfS8ke2RvdGVudkZpbGV9YCkpO1xuICAgICAgICAgICAgICAgICAgICBwcm9kdWNlclJlcG9ydHNFbnZzID0gey4uLnByb2R1Y2VyUmVwb3J0c0VudnMsIC4uLnByb2R1Y2VyUmVwb3J0RW52fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHt5ZWxsb3cgcmVwb3J0cy5kb3RlbnYgcHJvZHVjZWQgYnkgJyR7cHJvZHVjZXIubmFtZX0nIGNvdWxkIG5vdCBiZSBmb3VuZH1cXG5gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9kdWNlclJlcG9ydHNFbnZzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29weUNhY2hlSW4gKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBleHBhbmRlZDoge1trZXk6IHN0cmluZ106IHN0cmluZ30pIHtcbiAgICAgICAgaWYgKHRoaXMuYXJndi5tb3VudENhY2hlICYmIHRoaXMuaW1hZ2VOYW1lKSByZXR1cm47XG4gICAgICAgIGlmICgoIXRoaXMuaW1hZ2VOYW1lICYmICF0aGlzLmFyZ3Yuc2hlbGxJc29sYXRpb24pIHx8IHRoaXMuY2FjaGUubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgY3dkID0gdGhpcy5hcmd2LmN3ZDtcbiAgICAgICAgY29uc3Qgc3RhdGVEaXIgPSB0aGlzLmFyZ3Yuc3RhdGVEaXI7XG5cbiAgICAgICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2FjaGUpIHtcbiAgICAgICAgICAgIGlmICghW1wicHVsbFwiLCBcInB1bGwtcHVzaFwiXS5pbmNsdWRlcyhjLnBvbGljeSkpIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgICAgICBjb25zdCBjYWNoZU5hbWUgPSBhd2FpdCB0aGlzLmdldFVuaXF1ZUNhY2hlTmFtZShjd2QsIGV4cGFuZGVkLCBjLmtleSk7XG4gICAgICAgICAgICBjb25zdCBjYWNoZUZvbGRlciA9IGAke2N3ZH0vJHtzdGF0ZURpcn0vY2FjaGUvJHtjYWNoZU5hbWV9YDtcbiAgICAgICAgICAgIGlmICghYXdhaXQgZnMucGF0aEV4aXN0cyhjYWNoZUZvbGRlcikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXdhaXQgTXV0ZXguZXhjbHVzaXZlKGNhY2hlTmFtZSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY29weUluKGNhY2hlRm9sZGVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgaW1wb3J0ZWQgY2FjaGUgJyR7Y2FjaGVOYW1lfSd9IGluIHttYWdlbnRhICR7cHJldHR5SHJ0aW1lKGVuZFRpbWUpfX1cXG5gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29weUFydGlmYWN0c0luICh3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcykge1xuICAgICAgICBpZiAoKCF0aGlzLmltYWdlTmFtZSAmJiAhdGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uKSB8fCAodGhpcy5wcm9kdWNlcnMgPz8gW10pLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGN3ZCA9IHRoaXMuYXJndi5jd2Q7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gdGhpcy5hcmd2LnN0YXRlRGlyO1xuICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9kdWNlciBvZiB0aGlzLnByb2R1Y2VycyA/PyBbXSkge1xuICAgICAgICAgICAgY29uc3QgcHJvZHVjZXJTYWZlTmFtZSA9IFV0aWxzLnNhZmVEb2NrZXJTdHJpbmcocHJvZHVjZXIubmFtZSk7XG4gICAgICAgICAgICBjb25zdCBhcnRpZmFjdEZvbGRlciA9IGAke2N3ZH0vJHtzdGF0ZURpcn0vYXJ0aWZhY3RzLyR7cHJvZHVjZXJTYWZlTmFtZX1gO1xuICAgICAgICAgICAgaWYgKCFhd2FpdCBmcy5wYXRoRXhpc3RzKGFydGlmYWN0Rm9sZGVyKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGZzLm1rZGlycChhcnRpZmFjdEZvbGRlcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJlYWRkaXIgPSBhd2FpdCBmcy5yZWFkZGlyKGFydGlmYWN0Rm9sZGVyKTtcbiAgICAgICAgICAgIGlmIChyZWFkZGlyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHt5ZWxsb3cgYXJ0aWZhY3RzIGZyb20ge2JsdWVCcmlnaHQgJHtwcm9kdWNlclNhZmVOYW1lfX0gd2FzIGVtcHR5fVxcbmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuY29weUluKGFydGlmYWN0Rm9sZGVyKSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IGltcG9ydGVkIGFydGlmYWN0c30gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgIH1cblxuICAgIGNvcHlJbiAoc291cmNlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc2FmZUpvYk5hbWUgPSB0aGlzLnNhZmVKb2JOYW1lO1xuICAgICAgICBpZiAoIXRoaXMuaW1hZ2VOYW1lICYmIHRoaXMuYXJndi5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIFV0aWxzLnNwYXduKFtcInJzeW5jXCIsIFwiLWFcIiwgYCR7c291cmNlfS8uYCwgYCR7dGhpcy5hcmd2LmN3ZH0vJHt0aGlzLmFyZ3Yuc3RhdGVEaXJ9L2J1aWxkcy8ke3NhZmVKb2JOYW1lfWBdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gVXRpbHMuc3Bhd24oW1wiZG9ja2VyXCIsIFwiY3BcIiwgYCR7c291cmNlfS8uYCwgYCR7dGhpcy5fY29udGFpbmVySWR9Oi9nY2wtYnVpbGRzYF0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29weUNhY2hlT3V0ICh3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgZXhwYW5kZWQ6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9LCBleGl0Q29kZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLmFyZ3YubW91bnRDYWNoZSAmJiB0aGlzLmltYWdlTmFtZSkgcmV0dXJuO1xuICAgICAgICBpZiAoKCF0aGlzLmltYWdlTmFtZSAmJiAhdGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uKSB8fCB0aGlzLmNhY2hlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGN3ZCA9IHRoaXMuYXJndi5jd2Q7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gdGhpcy5hcmd2LnN0YXRlRGlyO1xuXG4gICAgICAgIGxldCB0aW1lLCBlbmRUaW1lO1xuICAgICAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jYWNoZSkge1xuICAgICAgICAgICAgaWYgKCFbXCJwdXNoXCIsIFwicHVsbC1wdXNoXCJdLmluY2x1ZGVzKGMucG9saWN5KSkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKFwib25fc3VjY2Vzc1wiID09PSBjLndoZW4gJiYgZXhpdENvZGUgIT0gMCkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKFwib25fZmFpbHVyZVwiID09PSBjLndoZW4gJiYgZXhpdENvZGUgPT09IDApIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlTmFtZSA9IGF3YWl0IHRoaXMuZ2V0VW5pcXVlQ2FjaGVOYW1lKGN3ZCwgZXhwYW5kZWQsIGMua2V5KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGF0aCBvZiBjLnBhdGhzKSB7XG4gICAgICAgICAgICAgICAgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwYW5kZWRQYXRoID0gVXRpbHMuZXhwYW5kVGV4dChwYXRoLCBleHBhbmRlZCkucmVwbGFjZShgJHtleHBhbmRlZC5DSV9QUk9KRUNUX0RJUn0vYCwgXCJcIik7XG4gICAgICAgICAgICAgICAgbGV0IGNtZCA9IFwic2hvcHQgLXMgZ2xvYnN0YXIgbnVsbGdsb2IgZG90Z2xvYlxcblwiO1xuICAgICAgICAgICAgICAgIGNtZCArPSBgbWtkaXIgLXAgLi4vLi4vY2FjaGUvJHtjYWNoZU5hbWV9XFxuYDtcbiAgICAgICAgICAgICAgICBjbWQgKz0gYHJzeW5jIC1SYSAke2V4cGFuZGVkUGF0aH0gLi4vLi4vY2FjaGUvJHtjYWNoZU5hbWV9Ly4gfHwgdHJ1ZVxcbmA7XG5cbiAgICAgICAgICAgICAgICBhd2FpdCBNdXRleC5leGNsdXNpdmUoY2FjaGVOYW1lLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY29weU91dChjbWQsIHN0YXRlRGlyLCBcImNhY2hlXCIsIFtdKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCByZWFkZGlyID0gYXdhaXQgZnMucmVhZGRpcihgJHt0aGlzLmFyZ3YuY3dkfS8ke3N0YXRlRGlyfS9jYWNoZS8ke2NhY2hlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICBpZiAocmVhZGRpci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge3llbGxvdyAhISBubyBjYWNoZSB3YXMgY29waWVkIGZvciAke3BhdGh9ICEhfVxcbmApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IGV4cG9ydGVkIGNhY2hlICR7ZXhwYW5kZWRQYXRofSAnJHtjYWNoZU5hbWV9J30gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29weUFydGlmYWN0c091dCAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIGV4cGFuZGVkOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAgICAgICBjb25zdCBzYWZlSm9iTmFtZSA9IHRoaXMuc2FmZUpvYk5hbWU7XG4gICAgICAgIGNvbnN0IGN3ZCA9IHRoaXMuYXJndi5jd2Q7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gdGhpcy5hcmd2LnN0YXRlRGlyO1xuICAgICAgICBjb25zdCBhcnRpZmFjdHNQYXRoID0gIXRoaXMuYXJndi5zaGVsbElzb2xhdGlvbiAmJiAhdGhpcy5pbWFnZU5hbWUgPyBgJHtzdGF0ZURpcn0vYXJ0aWZhY3RzYCA6IFwiLi4vLi4vYXJ0aWZhY3RzXCI7XG5cbiAgICAgICAgaWYgKCF0aGlzLmFydGlmYWN0cykgcmV0dXJuO1xuICAgICAgICBpZiAoKHRoaXMuYXJ0aWZhY3RzLnBhdGhzPy5sZW5ndGggPz8gMCkgPT09IDAgJiYgdGhpcy5hcnRpZmFjdHMucmVwb3J0cz8uZG90ZW52ID09IG51bGwpIHJldHVybjtcblxuICAgICAgICBsZXQgdGltZSwgZW5kVGltZTtcbiAgICAgICAgbGV0IGNwQ21kID0gXCJzaG9wdCAtcyBnbG9ic3RhciBudWxsZ2xvYiBkb3RnbG9iXFxuXCI7XG4gICAgICAgIGNwQ21kICs9IGBta2RpciAtcCAke2FydGlmYWN0c1BhdGh9LyR7c2FmZUpvYk5hbWV9XFxuYDtcbiAgICAgICAgY3BDbWQgKz0gXCJyc3luYyAtLWV4Y2x1ZGUgJy5naXRsYWItY2ktbG9jYWwvKionIC1SYSBcIjtcbiAgICAgICAgZm9yIChjb25zdCBhcnRpZmFjdEV4Y2x1ZGVQYXRoIG9mIHRoaXMuYXJ0aWZhY3RzPy5leGNsdWRlID8/IFtdKSB7XG4gICAgICAgICAgICBjb25zdCBleHBhbmRlZFBhdGggPSBVdGlscy5leHBhbmRUZXh0KGFydGlmYWN0RXhjbHVkZVBhdGgsIGV4cGFuZGVkKS5yZXBsYWNlKGAke2V4cGFuZGVkLkNJX1BST0pFQ1RfRElSfS9gLCBcIlwiKTtcbiAgICAgICAgICAgIGNwQ21kICs9IGAtLWV4Y2x1ZGUgJyR7ZXhwYW5kZWRQYXRofScgYDtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGFydGlmYWN0UGF0aCBvZiB0aGlzLmFydGlmYWN0cz8ucGF0aHMgPz8gW10pIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkUGF0aCA9IFV0aWxzLmV4cGFuZFRleHQoYXJ0aWZhY3RQYXRoLCBleHBhbmRlZCkucmVwbGFjZShgJHtleHBhbmRlZC5DSV9QUk9KRUNUX0RJUn0vYCwgXCJcIik7XG4gICAgICAgICAgICBjcENtZCArPSBgJHtleHBhbmRlZFBhdGh9IGA7XG4gICAgICAgIH1cbiAgICAgICAgY3BDbWQgKz0gYCR7YXJ0aWZhY3RzUGF0aH0vJHtzYWZlSm9iTmFtZX0vLiB8fCB0cnVlXFxuYDtcbiAgICAgICAgY29uc3QgcmVwb3J0RG90ZW52ID0gVXRpbHMuZXhwYW5kVGV4dCh0aGlzLmFydGlmYWN0cy5yZXBvcnRzPy5kb3RlbnYgPz8gbnVsbCwgZXhwYW5kZWQpO1xuICAgICAgICBpZiAocmVwb3J0RG90ZW52ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNwQ21kICs9IGBta2RpciAtcCAke2FydGlmYWN0c1BhdGh9LyR7c2FmZUpvYk5hbWV9Ly5naXRsYWItY2ktcmVwb3J0cy9kb3RlbnZcXG5gO1xuICAgICAgICAgICAgY3BDbWQgKz0gYGlmIFsgLWYgJHtyZXBvcnREb3RlbnZ9IF07IHRoZW5cXG5gO1xuICAgICAgICAgICAgY3BDbWQgKz0gYCAgcnN5bmMgLVJhICR7cmVwb3J0RG90ZW52fSAke2FydGlmYWN0c1BhdGh9LyR7c2FmZUpvYk5hbWV9Ly5naXRsYWItY2ktcmVwb3J0cy9kb3RlbnYvLlxcbmA7XG4gICAgICAgICAgICBjcENtZCArPSBcImZpXFxuXCI7XG4gICAgICAgIH1cblxuICAgICAgICB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgY29uc3QgZG9ja2VyQ21kRXh0cmFzID0gdGhpcy5hcmd2Lm1vdW50Q2FjaGUgPyBhd2FpdCB0aGlzLm1vdW50Q2FjaGVDbWQod3JpdGVTdHJlYW1zLCBleHBhbmRlZCkgOiBbXTtcbiAgICAgICAgYXdhaXQgdGhpcy5jb3B5T3V0KGNwQ21kLCBzdGF0ZURpciwgXCJhcnRpZmFjdHNcIiwgZG9ja2VyQ21kRXh0cmFzKTtcbiAgICAgICAgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuXG4gICAgICAgIGlmIChyZXBvcnREb3RlbnYgIT0gbnVsbCAmJiAhYXdhaXQgZnMucGF0aEV4aXN0cyhgJHtjd2R9LyR7c3RhdGVEaXJ9L2FydGlmYWN0cy8ke3NhZmVKb2JOYW1lfS8uZ2l0bGFiLWNpLXJlcG9ydHMvZG90ZW52LyR7cmVwb3J0RG90ZW52fWApKSB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7eWVsbG93IGFydGlmYWN0IHJlcG9ydHMgZG90ZW52ICcke3JlcG9ydERvdGVudn0nIGNvdWxkIG5vdCBiZSBmb3VuZH1cXG5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlYWRkaXIgPSBhd2FpdCBmcy5yZWFkZGlyKGAke2N3ZH0vJHtzdGF0ZURpcn0vYXJ0aWZhY3RzLyR7c2FmZUpvYk5hbWV9YCk7XG4gICAgICAgIGlmIChyZWFkZGlyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge3llbGxvdyAhISBubyBhcnRpZmFjdHMgd2FzIGNvcGllZCAhIX1cXG5gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IGV4cG9ydGVkIGFydGlmYWN0c30gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYXJ0aWZhY3RzVG9Tb3VyY2UgJiYgKHRoaXMuYXJndi5zaGVsbElzb2xhdGlvbiB8fCB0aGlzLmltYWdlTmFtZSkpIHtcbiAgICAgICAgICAgIHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW1wicnN5bmNcIiwgXCItLWV4Y2x1ZGU9Ly5naXRsYWItY2ktcmVwb3J0cy9cIiwgXCItYVwiLCBgJHtjd2R9LyR7c3RhdGVEaXJ9L2FydGlmYWN0cy8ke3NhZmVKb2JOYW1lfS8uYCwgY3dkXSk7XG4gICAgICAgICAgICBpZiAocmVwb3J0RG90ZW52ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbXCJyc3luY1wiLCBcIi1hXCIsIGAke2N3ZH0vJHtzdGF0ZURpcn0vYXJ0aWZhY3RzLyR7c2FmZUpvYk5hbWV9Ly5naXRsYWItY2ktcmVwb3J0cy9kb3RlbnYvLmAsIGN3ZF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgY29waWVkIGFydGlmYWN0cyB0byBjd2R9IGluIHttYWdlbnRhICR7cHJldHR5SHJ0aW1lKGVuZFRpbWUpfX1cXG5gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29weU91dCAoY21kOiBzdHJpbmcsIHN0YXRlRGlyOiBzdHJpbmcsIHR5cGU6IFwiYXJ0aWZhY3RzXCIgfCBcImNhY2hlXCIsIGRvY2tlckNtZEV4dHJhczogc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3Qgc2FmZUpvYk5hbWUgPSB0aGlzLnNhZmVKb2JOYW1lO1xuICAgICAgICBjb25zdCBidWlsZFZvbHVtZU5hbWUgPSB0aGlzLmJ1aWxkVm9sdW1lTmFtZTtcbiAgICAgICAgY29uc3QgY3dkID0gdGhpcy5hcmd2LmN3ZDtcblxuICAgICAgICBhd2FpdCBmcy5ta2RpcnAoYCR7Y3dkfS8ke3N0YXRlRGlyfS8ke3R5cGV9YCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCB7c3Rkb3V0OiBjb250YWluZXJJZH0gPSBhd2FpdCBVdGlscy5iYXNoKGBkb2NrZXIgY3JlYXRlIC1pICR7ZG9ja2VyQ21kRXh0cmFzLmpvaW4oXCIgXCIpfSAtdiAke2J1aWxkVm9sdW1lTmFtZX06L2djbC1idWlsZHMvIC13IC9nY2wtYnVpbGRzIGRvY2tlci5pby9maXJlY293L2dpdGxhYi1jaS1sb2NhbC11dGlsIGJhc2ggLWMgXCIke2NtZH1cImAsIGN3ZCk7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXJzVG9DbGVhbi5wdXNoKGNvbnRhaW5lcklkKTtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcInN0YXJ0XCIsIGNvbnRhaW5lcklkLCBcIi0tYXR0YWNoXCJdKTtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcImNwXCIsIGAke2NvbnRhaW5lcklkfTovJHt0eXBlfS8uYCwgYCR7c3RhdGVEaXJ9LyR7dHlwZX0vLmBdLCBjd2QpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYXJndi5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuYmFzaChgYmFzaCAtZW8gcGlwZWZhaWwgLWMgXCIke2NtZH1cImAsIGAke2N3ZH0vJHtzdGF0ZURpcn0vYnVpbGRzLyR7c2FmZUpvYk5hbWV9YCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuYXJndi5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuYmFzaChgYmFzaCAtZW8gcGlwZWZhaWwgLWMgXCIke2NtZH1cImAsIGAke2N3ZH1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2xvbmdSdW5uaW5nU2lsZW50VGltZW91dCk7XG4gICAgICAgIHRoaXMuX2xvbmdSdW5uaW5nU2lsZW50VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge2dyZXkgPiBzdGlsbCBydW5uaW5nLi4ufVxcbmApO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG4gICAgICAgIH0sIDEwMDAwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEV4aXRlZFN0cmluZyAoY29kZTogbnVtYmVyLCB3YXJuaW5nID0gZmFsc2UsIHByZXBlbmRTdHJpbmcgPSBcIlwiKSB7XG4gICAgICAgIGNvbnN0IGZpbmlzaGVkU3RyID0gdGhpcy5nZXRGaW5pc2hlZFN0cmluZygpO1xuICAgICAgICBpZiAod2FybmluZykge1xuICAgICAgICAgICAgcmV0dXJuIGNoYWxrYCR7ZmluaXNoZWRTdHJ9IHtibGFjay5iZ1llbGxvd0JyaWdodCAgV0FSTiAke2NvZGUudG9TdHJpbmcoKX0gfSR7cHJlcGVuZFN0cmluZ31gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNoYWxrYCR7ZmluaXNoZWRTdHJ9IHtibGFjay5iZ1JlZCAgRkFJTCAke2NvZGUudG9TdHJpbmcoKX0gfSAke3ByZXBlbmRTdHJpbmd9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyRW5kVGltZSAoKSB7XG4gICAgICAgIHRoaXMuX2VuZFRpbWUgPSB0aGlzLl9lbmRUaW1lID8/IHByb2Nlc3MuaHJ0aW1lKHRoaXMuX3N0YXJ0VGltZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGaW5pc2hlZFN0cmluZyAoKSB7XG4gICAgICAgIHRoaXMuX2VuZFRpbWUgPSB0aGlzLl9lbmRUaW1lID8/IHByb2Nlc3MuaHJ0aW1lKHRoaXMuX3N0YXJ0VGltZSk7XG4gICAgICAgIHJldHVybiBjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgZmluaXNoZWR9IGluIHttYWdlbnRhICR7dGhpcy5wcmV0dHlEdXJhdGlvbn19YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNyZWF0ZURvY2tlck5ldHdvcmsgKG5ldHdvcmtOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qge3N0ZG91dDogbmV0d29ya0lkfSA9IGF3YWl0IFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcIm5ldHdvcmtcIiwgXCJjcmVhdGVcIiwgYCR7bmV0d29ya05hbWV9YF0pO1xuICAgICAgICB0aGlzLl9zZXJ2aWNlTmV0d29ya0lkID0gbmV0d29ya0lkO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgc3RhcnRTZXJ2aWNlICh3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgZXhwYW5kZWQ6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9LCBzZXJ2aWNlOiBTZXJ2aWNlLCBzZXJ2aWNlSW5kZXg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBjd2QgPSB0aGlzLmFyZ3YuY3dkO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IHRoaXMuYXJndi5zdGF0ZURpcjtcbiAgICAgICAgY29uc3Qgc2FmZUpvYk5hbWUgPSB0aGlzLnNhZmVKb2JOYW1lO1xuICAgICAgICBsZXQgZG9ja2VyQ21kID0gYGRvY2tlciBjcmVhdGUgLS1pbnRlcmFjdGl2ZSAtLW5ldHdvcmsgZ2l0bGFiLWNpLWxvY2FsLSR7dGhpcy5qb2JJZH0gYDtcbiAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG5cbiAgICAgICAgaWYgKHRoaXMuYXJndi51bWFzaykge1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiLS11c2VyIDA6MCBcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFyZ3YucHJpdmlsZWdlZCkge1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiLS1wcml2aWxlZ2VkIFwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYXJndi51bGltaXQgPiAwKSB7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdWxpbWl0IG5vZmlsZT0ke3RoaXMuYXJndi51bGltaXR9IGA7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHZvbHVtZSBvZiB0aGlzLmFyZ3Yudm9sdW1lKSB7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdm9sdW1lICR7dm9sdW1lfSBgO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VydmljZUFsaWFzID0gc2VydmljZS5hbGlhcztcbiAgICAgICAgY29uc3Qgc2VydmljZU5hbWUgPSBzZXJ2aWNlLm5hbWU7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VOYW1lV2l0aG91dFZlcnNpb24gPSBzZXJ2aWNlTmFtZS5yZXBsYWNlKC8oLiopKDouKikvLCBcIiQxXCIpO1xuICAgICAgICBjb25zdCBhbGlhc2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIGFsaWFzZXMuYWRkKHNlcnZpY2VOYW1lV2l0aG91dFZlcnNpb24ucmVwbGFjZUFsbChcIi9cIiwgXCItXCIpKTtcbiAgICAgICAgYWxpYXNlcy5hZGQoc2VydmljZU5hbWVXaXRob3V0VmVyc2lvbi5yZXBsYWNlQWxsKFwiL1wiLCBcIl9fXCIpKTtcbiAgICAgICAgaWYgKHNlcnZpY2VBbGlhcykge1xuICAgICAgICAgICAgYWxpYXNlcy5hZGQoc2VydmljZUFsaWFzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgYWxpYXMgb2YgYWxpYXNlcykge1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLW5ldHdvcmstYWxpYXM9JHthbGlhc30gYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGV4cGFuZGVkKSkge1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtZSAke2tleX0gYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlcnZpY2VFbnRyeXBvaW50ID0gc2VydmljZS5lbnRyeXBvaW50O1xuICAgICAgICBjb25zdCBzZXJ2aWNlRW50cnlwb2ludEZpbGUgPSBgJHtjd2R9LyR7c3RhdGVEaXJ9L3NjcmlwdHMvc2VydmljZXNfZW50cnkvJHtzYWZlSm9iTmFtZX1fJHtzZXJ2aWNlTmFtZVdpdGhvdXRWZXJzaW9ufV8ke3NlcnZpY2VJbmRleH1gO1xuICAgICAgICBpZiAoc2VydmljZUVudHJ5cG9pbnQpIHtcbiAgICAgICAgICAgIGlmIChzZXJ2aWNlRW50cnlwb2ludFswXSA9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiLS1lbnRyeXBvaW50ICcnIFwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5vdXRwdXRGaWxlKHNlcnZpY2VFbnRyeXBvaW50RmlsZSwgXCIjIS9iaW4vc2hcXG5cIik7XG4gICAgICAgICAgICAgICAgYXdhaXQgZnMuYXBwZW5kRmlsZShzZXJ2aWNlRW50cnlwb2ludEZpbGUsIGAke3NlcnZpY2VFbnRyeXBvaW50LmpvaW4oXCIgXCIpfWApO1xuICAgICAgICAgICAgICAgIGF3YWl0IGZzLmFwcGVuZEZpbGUoc2VydmljZUVudHJ5cG9pbnRGaWxlLCBcIiBcXFwiJEBcXFwiXFxuXCIpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGZzLmNobW9kKHNlcnZpY2VFbnRyeXBvaW50RmlsZSwgXCIwNzU1XCIpO1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIi0tZW50cnlwb2ludCAnL2djbC1lbnRyeScgXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZG9ja2VyQ21kICs9IGAtLXZvbHVtZSAke3RoaXMuYnVpbGRWb2x1bWVOYW1lfTovZ2NsLWJ1aWxkcyBgO1xuICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdm9sdW1lICR7dGhpcy50bXBWb2x1bWVOYW1lfToke3RoaXMuZmlsZVZhcmlhYmxlc0Rpcn0gYDtcbiAgICAgICAgZG9ja2VyQ21kICs9IGAke3NlcnZpY2VOYW1lfSBgO1xuXG4gICAgICAgIChzZXJ2aWNlLmNvbW1hbmQgPz8gW10pLmZvckVhY2goKGUpID0+IGRvY2tlckNtZCArPSBgXCIke2V9XCIgYCk7XG5cbiAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG5cbiAgICAgICAgY29uc3Qge3N0ZG91dDogY29udGFpbmVySWR9ID0gYXdhaXQgVXRpbHMuYmFzaChkb2NrZXJDbWQsIGN3ZCwgZXhwYW5kZWQpO1xuICAgICAgICB0aGlzLl9jb250YWluZXJzVG9DbGVhbi5wdXNoKGNvbnRhaW5lcklkKTtcblxuICAgICAgICAvLyBDb3B5IGRvY2tlciBlbnRyeXBvaW50IGlmIHNwZWNpZmllZCBmb3Igc2VydmljZVxuICAgICAgICBpZiAoc2VydmljZUVudHJ5cG9pbnQgJiYgc2VydmljZUVudHJ5cG9pbnRbMF0gIT0gXCJcIikge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW1wiZG9ja2VyXCIsIFwiY3BcIiwgc2VydmljZUVudHJ5cG9pbnRGaWxlLCBgJHtjb250YWluZXJJZH06L2djbC1lbnRyeWBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcInN0YXJ0XCIsIGAke2NvbnRhaW5lcklkfWBdKTtcblxuICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IHN0YXJ0ZWQgc2VydmljZSBpbWFnZTogJHtzZXJ2aWNlTmFtZX0gd2l0aCBhbGlhc2VzOiAke0FycmF5LmZyb20oYWxpYXNlcykuam9pbihcIiwgXCIpfX0gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuXG4gICAgICAgIHJldHVybiBjb250YWluZXJJZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHNlcnZpY2VIZWFsdGhDaGVjayAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIHNlcnZpY2U6IFNlcnZpY2UsIHNlcnZpY2VJbmRleDogbnVtYmVyLCBzZXJ2aWNlQ29udGFuZXJMb2dGaWxlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc2VydmljZUFsaWFzID0gc2VydmljZS5hbGlhcztcbiAgICAgICAgY29uc3Qgc2VydmljZU5hbWUgPSBzZXJ2aWNlLm5hbWU7XG5cbiAgICAgICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJpbWFnZVwiLCBcImluc3BlY3RcIiwgc2VydmljZU5hbWVdKTtcbiAgICAgICAgY29uc3QgaW1hZ2VJbnNwZWN0ID0gSlNPTi5wYXJzZShzdGRvdXQpO1xuXG4gICAgICAgIC8vIENvcGllZCBmcm9tIHRoZSBzdGFydFNlcnZpY2UgYmxvY2suIEltcG9ydGFudCB0aGluZyBpcyB0aGF0IHRoZSBhbGlhc2VzIG1hdGNoXG4gICAgICAgIGNvbnN0IHNlcnZpY2VOYW1lV2l0aG91dFZlcnNpb24gPSBzZXJ2aWNlTmFtZS5yZXBsYWNlKC8oLiopKDouKikvLCBcIiQxXCIpO1xuICAgICAgICBjb25zdCBhbGlhc2VzID0gW3NlcnZpY2VOYW1lV2l0aG91dFZlcnNpb24ucmVwbGFjZUFsbChcIi9cIiwgXCItXCIpLCBzZXJ2aWNlTmFtZVdpdGhvdXRWZXJzaW9uLnJlcGxhY2VBbGwoXCIvXCIsIFwiX19cIildO1xuICAgICAgICBpZiAoc2VydmljZUFsaWFzKSB7XG4gICAgICAgICAgICBhbGlhc2VzLnB1c2goc2VydmljZUFsaWFzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuaXF1ZUFsaWFzID0gYWxpYXNlc1thbGlhc2VzLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIGlmICgoaW1hZ2VJbnNwZWN0WzBdPy5Db25maWc/LkV4cG9zZWRQb3J0cyA/PyBudWxsKSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHt5ZWxsb3cgQ291bGQgbm90IGZpbmQgZXhwb3NlZCB0Y3AgcG9ydHMgJHtzZXJ2aWNlTmFtZX19XFxuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHBvcnQgZGVmaW5lZCBpbiB0aGUgaW1hZ2UsIGFuZCB0cnkgdG8gY29ubmVjdCB0byB0aGUgYWxpYXNcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYW55KE9iamVjdC5rZXlzKGltYWdlSW5zcGVjdFswXS5Db25maWcuRXhwb3NlZFBvcnRzKS5tYXAoKHBvcnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXBvcnQuZW5kc1dpdGgoXCIvdGNwXCIpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgY29uc3QgcG9ydE51bSA9IHBhcnNlSW50KHBvcnQucmVwbGFjZShcIi90Y3BcIiwgXCJcIikpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwYXduQ21kID0gW1wiZG9ja2VyXCIsIFwicnVuXCIsIFwiLS1ybVwiLCBgLS1uYW1lPWdjbC13YWl0LWZvci1pdC0ke3RoaXMuam9iSWR9LSR7c2VydmljZUluZGV4fS0ke3BvcnROdW19YCwgXCItLW5ldHdvcmtcIiwgYGdpdGxhYi1jaS1sb2NhbC0ke3RoaXMuam9iSWR9YCwgXCJ3aWxsd2lsbC93YWl0LWZvci1pdFwiLCBgJHt1bmlxdWVBbGlhc306JHtwb3J0TnVtfWAsIFwiLXRcIiwgXCIzMFwiXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRpbHMuc3Bhd24oc3Bhd25DbWQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge2dyZWVuQnJpZ2h0IHNlcnZpY2UgaW1hZ2U6ICR7c2VydmljZU5hbWV9IGhlYWx0aGNoZWNrIHBhc3NlZCBpbiB7Z3JlZW4gJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fX1cXG5gKTtcbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgQWdncmVnYXRlRXJyb3IpKSB0aHJvdyBlO1xuICAgICAgICAgICAgZS5lcnJvcnMuZm9yRWFjaCgoc2luZ2xlRXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge3JlZEJyaWdodCBzZXJ2aWNlIGltYWdlOiAke3NlcnZpY2VOYW1lfSBoZWFsdGhjaGVjayBmYWlsZWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgc2luZ2xlRXJyb3IubWVzc2FnZS5zcGxpdCgvXFxyP1xcbi9nKS5mb3JFYWNoKChsaW5lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge3JlZEJyaWdodCAgICR7bGluZX19XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge3JlZEJyaWdodCBhbHNvIHNlZSAoJHtzZXJ2aWNlQ29udGFuZXJMb2dGaWxlfSl9XFxuYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIC8vIEtpbGwgYWxsIHdhaXQtZm9yLWl0IGNvbnRhaW5lcnMsIHdoZW4gb25lIGhhdmUgYmVlbiBzdWNjZXNzZnVsXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoT2JqZWN0LmtleXMoaW1hZ2VJbnNwZWN0WzBdLkNvbmZpZy5FeHBvc2VkUG9ydHMpLm1hcCgocG9ydCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcG9ydC5lbmRzV2l0aChcIi90Y3BcIikpIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3J0TnVtID0gcGFyc2VJbnQocG9ydC5yZXBsYWNlKFwiL3RjcFwiLCBcIlwiKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcInJtXCIsIFwiLXZmXCIsIGBnY2wtd2FpdC1mb3ItaXQtJHt0aGlzLmpvYklkfS0ke3NlcnZpY2VJbmRleH0tJHtwb3J0TnVtfWBdKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
972
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiam9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0RBQTBCO0FBQzFCLCtDQUFpQztBQUNqQyw2Q0FBK0I7QUFDL0Isa0VBQXlDO0FBQ3pDLG9EQUE0QjtBQUM1QixtQ0FBOEI7QUFHOUIsaURBQThDO0FBQzlDLG1DQUE4QjtBQUU5QixrREFBMEI7QUEwQzFCLE1BQU0sYUFBYSxHQUFHLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUU7SUFDckQsSUFBSSxFQUFFLFNBQVM7SUFDZixLQUFLLEVBQUUsU0FBUztJQUNoQixJQUFJLEVBQUUsU0FBUztJQUNmLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLE1BQU0sRUFBRSxLQUFLO0NBQ2hCLENBQUMsQ0FBQztBQUVILE1BQWEsR0FBRztJQUVaLE1BQU0sQ0FBVSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUM7UUFDdEMsU0FBUyxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxVQUFVO1FBQ3JELFFBQVEsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVM7UUFDN0MsY0FBYyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsVUFBVTtLQUNuRCxDQUFDLENBQUM7SUFFTSxJQUFJLENBQU87SUFDWCxJQUFJLENBQVM7SUFDYixRQUFRLENBQVM7SUFDakIsWUFBWSxDQUFrQjtJQUM5QixXQUFXLENBQXNDO0lBQ2pELEtBQUssQ0FBUztJQUNkLEtBQUssQ0FNVjtJQUVLLFlBQVksQ0FBVTtJQUN0QixJQUFJLENBQVM7SUFDYixNQUFNLENBQVc7SUFDakIsV0FBVyxDQUFTO0lBQ3BCLE9BQU8sQ0FBVTtJQUVULFVBQVUsR0FBNEIsRUFBRSxDQUFDO0lBQ2xELG1CQUFtQixHQUFrQixJQUFJLENBQUM7SUFDMUMscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO0lB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Q0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ25GLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztvQkFBRSxPQUFPO2dCQUNuQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDbkQsT0FBTyxhQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsbUJBQW1CLElBQUksQ0FBQyxLQUFLLElBQUksWUFBWSxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM1RyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ1A7SUFDTCxDQUFDOztBQTFpQ1Esa0JBQUciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgKiBhcyBkb3RlbnYgZnJvbSBcImRvdGVudlwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgcHJldHR5SHJ0aW1lIGZyb20gXCJwcmV0dHktaHJ0aW1lXCI7XG5pbXBvcnQgc3BsaXQyIGZyb20gXCJzcGxpdDJcIjtcbmltcG9ydCB7VXRpbHN9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge1dyaXRlU3RyZWFtc30gZnJvbSBcIi4vd3JpdGUtc3RyZWFtc1wiO1xuaW1wb3J0IHtHaXREYXRhfSBmcm9tIFwiLi9naXQtZGF0YVwiO1xuaW1wb3J0IGFzc2VydCwge0Fzc2VydGlvbkVycm9yfSBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQge011dGV4fSBmcm9tIFwiLi9tdXRleFwiO1xuaW1wb3J0IHtBcmd2fSBmcm9tIFwiLi9hcmd2XCI7XG5pbXBvcnQgZXhlY2EgZnJvbSBcImV4ZWNhXCI7XG5pbXBvcnQge0NJQ0RWYXJpYWJsZX0gZnJvbSBcIi4vdmFyaWFibGVzLWZyb20tZmlsZXNcIjtcblxuaW50ZXJmYWNlIEpvYk9wdGlvbnMge1xuICAgIGFyZ3Y6IEFyZ3Y7XG4gICAgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXM7XG4gICAgZGF0YTogYW55O1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBiYXNlTmFtZTogc3RyaW5nO1xuICAgIHBpcGVsaW5lSWlkOiBudW1iZXI7XG4gICAgZ2l0RGF0YTogR2l0RGF0YTtcbiAgICBnbG9iYWxWYXJpYWJsZXM6IHtbbmFtZTogc3RyaW5nXTogc3RyaW5nfTtcbiAgICB2YXJpYWJsZXNGcm9tRmlsZXM6IHtbbmFtZTogc3RyaW5nXTogQ0lDRFZhcmlhYmxlfTtcbiAgICBwcmVkZWZpbmVkVmFyaWFibGVzOiB7W25hbWU6IHN0cmluZ106IGFueX07XG4gICAgbWF0cml4VmFyaWFibGVzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSB8IG51bGw7XG4gICAgbm9kZUluZGV4OiBudW1iZXIgfCBudWxsO1xuICAgIG5vZGVzVG90YWw6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIENhY2hlIHtcbiAgICBwb2xpY3k6IFwicHVsbFwiIHwgXCJwdWxsLXB1c2hcIiB8IFwicHVzaFwiO1xuICAgIGtleTogc3RyaW5nIHwge2ZpbGVzOiBzdHJpbmdbXX07XG4gICAgcGF0aHM6IHN0cmluZ1tdO1xuICAgIHdoZW46IFwib25fc3VjY2Vzc1wiIHwgXCJvbl9mYWlsdXJlXCIgfCBcImFsd2F5c1wiO1xufVxuXG5pbnRlcmZhY2UgU2VydmljZSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGVudHJ5cG9pbnQ6IHN0cmluZ1tdIHwgbnVsbDtcbiAgICBjb21tYW5kOiBzdHJpbmdbXSB8IG51bGw7XG4gICAgYWxpYXM6IHN0cmluZyB8IG51bGw7XG4gICAgdmFyaWFibGVzOiB7W25hbWU6IHN0cmluZ106IHN0cmluZ307XG59XG5cbmludGVyZmFjZSBOZWVkIHtcbiAgICBqb2I6IHN0cmluZztcbiAgICBhcnRpZmFjdHM6IGJvb2xlYW47XG4gICAgb3B0aW9uYWw6IGJvb2xlYW47XG4gICAgcGlwZWxpbmU6IHN0cmluZyB8IG51bGw7XG4gICAgcHJvamVjdDogc3RyaW5nIHwgbnVsbDtcbn1cblxuY29uc3QgZGF0ZUZvcm1hdHRlciA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHVuZGVmaW5lZCwge1xuICAgIHllYXI6IHVuZGVmaW5lZCxcbiAgICBtb250aDogdW5kZWZpbmVkLFxuICAgIGhvdXI6IFwibnVtZXJpY1wiLFxuICAgIG1pbnV0ZTogXCJudW1lcmljXCIsXG4gICAgc2Vjb25kOiBcIm51bWVyaWNcIixcbiAgICBob3VyMTI6IGZhbHNlLFxufSk7XG5cbmV4cG9ydCBjbGFzcyBKb2Ige1xuXG4gICAgc3RhdGljIHJlYWRvbmx5IGlsbGVnYWxKb2JOYW1lcyA9IG5ldyBTZXQoW1xuICAgICAgICBcImluY2x1ZGVcIiwgXCJsb2NhbF9jb25maWd1cmF0aW9uXCIsIFwiaW1hZ2VcIiwgXCJzZXJ2aWNlc1wiLFxuICAgICAgICBcInN0YWdlc1wiLCBcInR5cGVzXCIsIFwiYmVmb3JlX3NjcmlwdFwiLCBcImRlZmF1bHRcIixcbiAgICAgICAgXCJhZnRlcl9zY3JpcHRcIiwgXCJ2YXJpYWJsZXNcIiwgXCJjYWNoZVwiLCBcIndvcmtmbG93XCIsXG4gICAgXSk7XG5cbiAgICByZWFkb25seSBhcmd2OiBBcmd2O1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgICByZWFkb25seSBiYXNlTmFtZTogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGRlcGVuZGVuY2llczogc3RyaW5nW10gfCBudWxsO1xuICAgIHJlYWRvbmx5IGVudmlyb25tZW50Pzoge25hbWU6IHN0cmluZzsgdXJsOiBzdHJpbmcgfCBudWxsfTtcbiAgICByZWFkb25seSBqb2JJZDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IHJ1bGVzPzoge1xuICAgICAgICBpZjogc3RyaW5nO1xuICAgICAgICB3aGVuOiBzdHJpbmc7XG4gICAgICAgIGV4aXN0czogc3RyaW5nW107XG4gICAgICAgIGFsbG93X2ZhaWx1cmU6IGJvb2xlYW47XG4gICAgICAgIHZhcmlhYmxlczoge1trZXk6IHN0cmluZ106IHN0cmluZ307XG4gICAgfVtdO1xuXG4gICAgcmVhZG9ubHkgYWxsb3dGYWlsdXJlOiBib29sZWFuO1xuICAgIHJlYWRvbmx5IHdoZW46IHN0cmluZztcbiAgICByZWFkb25seSBleGlzdHM6IHN0cmluZ1tdO1xuICAgIHJlYWRvbmx5IHBpcGVsaW5lSWlkOiBudW1iZXI7XG4gICAgcmVhZG9ubHkgZ2l0RGF0YTogR2l0RGF0YTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3ZhcmlhYmxlczoge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcbiAgICBwcml2YXRlIF9wcmVzY3JpcHRzRXhpdENvZGU6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX2FmdGVyU2NyaXB0c0V4aXRDb2RlID0gMDtcbiAgICBwcml2YXRlIF9jb3ZlcmFnZVBlcmNlbnQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX3J1bm5pbmcgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9jb250YWluZXJJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfc2VydmljZU5ldHdvcmtJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfY29udGFpbmVyVm9sdW1lTmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBfbG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0OiBOb2RlSlMuVGltZW91dCA9IC0xIGFzIGFueTtcbiAgICBwcml2YXRlIF9wcm9kdWNlcnM6IHtuYW1lOiBzdHJpbmc7IGRvdGVudjogc3RyaW5nIHwgbnVsbH1bXSB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX2pvYk5hbWVQYWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgcHJpdmF0ZSBfY29udGFpbmVyc1RvQ2xlYW46IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBfc3RhcnRUaW1lPzogW251bWJlciwgbnVtYmVyXTtcbiAgICBwcml2YXRlIF9lbmRUaW1lPzogW251bWJlciwgbnVtYmVyXTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgam9iRGF0YTogYW55O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXM7XG5cbiAgICBjb25zdHJ1Y3RvciAob3B0OiBKb2JPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGpvYkRhdGEgPSBvcHQuZGF0YTtcbiAgICAgICAgY29uc3QgZ2l0RGF0YSA9IG9wdC5naXREYXRhO1xuICAgICAgICBjb25zdCBnbG9iYWxWYXJpYWJsZXMgPSBvcHQuZ2xvYmFsVmFyaWFibGVzO1xuICAgICAgICBjb25zdCB2YXJpYWJsZXNGcm9tRmlsZXMgPSBvcHQudmFyaWFibGVzRnJvbUZpbGVzO1xuICAgICAgICBjb25zdCBhcmd2ID0gb3B0LmFyZ3Y7XG4gICAgICAgIGNvbnN0IGN3ZCA9IGFyZ3YuY3dkO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IGFyZ3Yuc3RhdGVEaXI7XG4gICAgICAgIGNvbnN0IGFyZ3ZWYXJpYWJsZXMgPSBhcmd2LnZhcmlhYmxlO1xuICAgICAgICBjb25zdCBwcmVkZWZpbmVkVmFyaWFibGVzID0gb3B0LnByZWRlZmluZWRWYXJpYWJsZXM7XG5cbiAgICAgICAgdGhpcy5hcmd2ID0gYXJndjtcbiAgICAgICAgdGhpcy53cml0ZVN0cmVhbXMgPSBvcHQud3JpdGVTdHJlYW1zO1xuICAgICAgICB0aGlzLmdpdERhdGEgPSBvcHQuZ2l0RGF0YTtcbiAgICAgICAgdGhpcy5uYW1lID0gb3B0Lm5hbWU7XG4gICAgICAgIHRoaXMuYmFzZU5hbWUgPSBvcHQuYmFzZU5hbWU7XG4gICAgICAgIHRoaXMuam9iSWQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwKTtcbiAgICAgICAgdGhpcy5qb2JEYXRhID0gb3B0LmRhdGE7XG4gICAgICAgIHRoaXMucGlwZWxpbmVJaWQgPSBvcHQucGlwZWxpbmVJaWQ7XG5cbiAgICAgICAgdGhpcy53aGVuID0gam9iRGF0YS53aGVuIHx8IFwib25fc3VjY2Vzc1wiO1xuICAgICAgICB0aGlzLmV4aXN0cyA9IGpvYkRhdGEuZXhpc3RzIHx8IFtdO1xuICAgICAgICB0aGlzLmFsbG93RmFpbHVyZSA9IGpvYkRhdGEuYWxsb3dfZmFpbHVyZSA/PyBmYWxzZTtcbiAgICAgICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBqb2JEYXRhLmRlcGVuZGVuY2llcyB8fCBudWxsO1xuICAgICAgICB0aGlzLnJ1bGVzID0gam9iRGF0YS5ydWxlcyB8fCBudWxsO1xuICAgICAgICB0aGlzLmVudmlyb25tZW50ID0gdHlwZW9mIGpvYkRhdGEuZW52aXJvbm1lbnQgPT09IFwic3RyaW5nXCIgPyB7bmFtZTogam9iRGF0YS5lbnZpcm9ubWVudH0gOiBqb2JEYXRhLmVudmlyb25tZW50O1xuXG4gICAgICAgIGNvbnN0IG1hdHJpeFZhcmlhYmxlcyA9IG9wdC5tYXRyaXhWYXJpYWJsZXMgPz8ge307XG4gICAgICAgIHRoaXMuX3ZhcmlhYmxlcyA9IHsuLi5nbG9iYWxWYXJpYWJsZXMgfHwge30sIC4uLmpvYkRhdGEudmFyaWFibGVzIHx8IHt9LCAuLi5tYXRyaXhWYXJpYWJsZXMsIC4uLnByZWRlZmluZWRWYXJpYWJsZXMsIC4uLmFyZ3ZWYXJpYWJsZXN9O1xuXG4gICAgICAgIGxldCBjaVByb2plY3REaXIgPSBgJHtjd2R9YDtcbiAgICAgICAgaWYgKHRoaXMuam9iRGF0YVtcImltYWdlXCJdKSB7XG4gICAgICAgICAgICBjaVByb2plY3REaXIgPSBcIi9nY2wtYnVpbGRzXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoYXJndi5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgY2lQcm9qZWN0RGlyID0gYCR7Y3dkfS8ke3N0YXRlRGlyfS9idWlsZHMvJHt0aGlzLnNhZmVKb2JOYW1lfWA7XG4gICAgICAgIH1cblxuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfSk9CX0lEXCJdID0gYCR7dGhpcy5qb2JJZH1gO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfUElQRUxJTkVfSURcIl0gPSBgJHt0aGlzLnBpcGVsaW5lSWlkICsgMTAwMH1gO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfUElQRUxJTkVfSUlEXCJdID0gYCR7dGhpcy5waXBlbGluZUlpZH1gO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfSk9CX05BTUVcIl0gPSBgJHt0aGlzLm5hbWV9YDtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX0pPQl9OQU1FX1NMVUdcIl0gPSBgJHt0aGlzLm5hbWUucmVwbGFjZSgvW15hLXpcXGRdKy9pZywgXCItXCIpLnJlcGxhY2UoL14tLywgXCJcIikuc2xpY2UoMCwgNjMpLnJlcGxhY2UoLy0kLywgXCJcIikudG9Mb3dlckNhc2UoKX1gO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfSk9CX1NUQUdFXCJdID0gYCR7dGhpcy5zdGFnZX1gO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfUFJPSkVDVF9ESVJcIl0gPSBjaVByb2plY3REaXI7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9KT0JfVVJMXCJdID0gYGh0dHBzOi8vJHtnaXREYXRhLnJlbW90ZS5ob3N0fS8ke2dpdERhdGEucmVtb3RlLmdyb3VwfS8ke2dpdERhdGEucmVtb3RlLnByb2plY3R9Ly0vam9icy8ke3RoaXMuam9iSWR9YDsgLy8gQ2hhbmdlcyBvbiByZXJ1bi5cbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX1BJUEVMSU5FX1VSTFwiXSA9IGBodHRwczovLyR7Z2l0RGF0YS5yZW1vdGUuaG9zdH0vJHtnaXREYXRhLnJlbW90ZS5ncm91cH0vJHtnaXREYXRhLnJlbW90ZS5wcm9qZWN0fS9waXBlbGluZXMvJHt0aGlzLnBpcGVsaW5lSWlkfWA7XG4gICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXNbXCJDSV9FTlZJUk9OTUVOVF9OQU1FXCJdID0gdGhpcy5lbnZpcm9ubWVudD8ubmFtZSA/PyBcIlwiO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfRU5WSVJPTk1FTlRfU0xVR1wiXSA9IHRoaXMuZW52aXJvbm1lbnQ/Lm5hbWU/LnJlcGxhY2UoL1teYS16XFxkXSsvaWcsIFwiLVwiKS5yZXBsYWNlKC9eLS8sIFwiXCIpLnNsaWNlKDAsIDIzKS5yZXBsYWNlKC8tJC8sIFwiXCIpLnRvTG93ZXJDYXNlKCkgPz8gXCJcIjtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX0VOVklST05NRU5UX1VSTFwiXSA9IHRoaXMuZW52aXJvbm1lbnQ/LnVybCA/PyBcIlwiO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfTk9ERV9JTkRFWFwiXSA9IGAke29wdC5ub2RlSW5kZXh9YDtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX05PREVfVE9UQUxcIl0gPSBgJHtvcHQubm9kZXNUb3RhbH1gO1xuICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzW1wiQ0lfUkVHSVNUUllcIl0gPSBgbG9jYWwtcmVnaXN0cnkuJHt0aGlzLmdpdERhdGEucmVtb3RlLmhvc3R9YDtcbiAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlc1tcIkNJX1JFR0lTVFJZX0lNQUdFXCJdID0gYCRDSV9SRUdJU1RSWS8ke3RoaXMuX3ZhcmlhYmxlc1tcIkNJX1BST0pFQ1RfUEFUSFwiXX1gO1xuXG4gICAgICAgIC8vIEZpbmQgZW52aXJvbm1lbnQgbWF0Y2hlZCB2YXJpYWJsZXNcbiAgICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gVXRpbHMuZXhwYW5kVmFyaWFibGVzKHRoaXMuX3ZhcmlhYmxlcyk7XG4gICAgICAgICAgICB0aGlzLmVudmlyb25tZW50Lm5hbWUgPSBVdGlscy5leHBhbmRUZXh0KHRoaXMuZW52aXJvbm1lbnQubmFtZSwgZXhwYW5kZWQpO1xuICAgICAgICAgICAgdGhpcy5lbnZpcm9ubWVudC51cmwgPSBVdGlscy5leHBhbmRUZXh0KHRoaXMuZW52aXJvbm1lbnQudXJsLCBleHBhbmRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW52TWF0Y2hlZFZhcmlhYmxlcyA9IFV0aWxzLmZpbmRFbnZNYXRjaGVkVmFyaWFibGVzKHZhcmlhYmxlc0Zyb21GaWxlcywgdGhpcy5maWxlVmFyaWFibGVzRGlyLCB0aGlzLmVudmlyb25tZW50KTtcblxuICAgICAgICAvLyBNZXJnZSBhbmQgZXhwYW5kIGFmdGVyIGZpbmRpbmcgZW52IG1hdGNoZWQgdmFyaWFibGVzXG4gICAgICAgIHRoaXMuX3ZhcmlhYmxlcyA9IHsuLi5nbG9iYWxWYXJpYWJsZXMgfHwge30sIC4uLmpvYkRhdGEudmFyaWFibGVzIHx8IHt9LCAuLi5tYXRyaXhWYXJpYWJsZXMsIC4uLnByZWRlZmluZWRWYXJpYWJsZXMsIC4uLmVudk1hdGNoZWRWYXJpYWJsZXMsIC4uLmFyZ3ZWYXJpYWJsZXN9O1xuXG4gICAgICAgIC8vIFNldCB7d2hlbiwgYWxsb3dGYWlsdXJlfSBiYXNlZCBvbiBydWxlcyByZXN1bHRcbiAgICAgICAgaWYgKHRoaXMucnVsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGVSZXN1bHQgPSBVdGlscy5nZXRSdWxlc1Jlc3VsdCh7Y3dkLCBydWxlczogdGhpcy5ydWxlcywgdmFyaWFibGVzOiB0aGlzLl92YXJpYWJsZXN9KTtcbiAgICAgICAgICAgIHRoaXMud2hlbiA9IHJ1bGVSZXN1bHQud2hlbjtcbiAgICAgICAgICAgIHRoaXMuYWxsb3dGYWlsdXJlID0gcnVsZVJlc3VsdC5hbGxvd0ZhaWx1cmU7XG4gICAgICAgICAgICB0aGlzLl92YXJpYWJsZXMgPSB7Li4uZ2xvYmFsVmFyaWFibGVzIHx8IHt9LCAuLi5qb2JEYXRhLnZhcmlhYmxlcyB8fCB7fSwgLi4ucnVsZVJlc3VsdC52YXJpYWJsZXMsIC4uLm1hdHJpeFZhcmlhYmxlcywgLi4ucHJlZGVmaW5lZFZhcmlhYmxlcywgLi4uZW52TWF0Y2hlZFZhcmlhYmxlcywgLi4uYXJndlZhcmlhYmxlc307XG4gICAgICAgIH1cbiAgICAgICAgLy8gRGVsZXRlIHZhcmlhYmxlcyB0aGUgdXNlciBpbnRlbnRpb25hbGx5IHdhbnRzIHVuc2V0XG4gICAgICAgIGZvciAoY29uc3QgdW5zZXRWYXJpYWJsZSBvZiBhcmd2LnVuc2V0VmFyaWFibGVzKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fdmFyaWFibGVzW3Vuc2V0VmFyaWFibGVdO1xuICAgICAgICB9XG5cbiAgICAgICAgYXNzZXJ0KHRoaXMuc2NyaXB0cyB8fCB0aGlzLnRyaWdnZXIsIGNoYWxrYHtibHVlQnJpZ2h0ICR7dGhpcy5uYW1lfX0gbXVzdCBoYXZlIHNjcmlwdCBzcGVjaWZpZWRgKTtcblxuICAgICAgICBpZiAodGhpcy5pbnRlcmFjdGl2ZSAmJiAodGhpcy53aGVuICE9PSBcIm1hbnVhbFwiIHx8IHRoaXMuaW1hZ2VOYW1lICE9PSBudWxsKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKHttZXNzYWdlOiBgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IEBJbnRlcmFjdGl2ZSBkZWNvcmF0b3IgY2Fubm90IGhhdmUgaW1hZ2U6IGFuZCBtdXN0IGJlIHdoZW46bWFudWFsYH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW5qZWN0U1NIQWdlbnQgJiYgdGhpcy5pbWFnZU5hbWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcih7bWVzc2FnZTogYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSBASW5qZWN0U1NIQWdlbnQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGltYWdlOmB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgW2ksIGNdIG9mIE9iamVjdC5lbnRyaWVzPGFueT4odGhpcy5jYWNoZSkpIHtcbiAgICAgICAgICAgIGFzc2VydChbXCJwdWxsXCIsIFwicHVzaFwiLCBcInB1bGwtcHVzaFwiXS5pbmNsdWRlcyhjLnBvbGljeSksIGNoYWxrYHtibHVlICR7dGhpcy5uYW1lfX0gY2FjaGVbJHtpfV0ucG9saWN5IGlzIG5vdCAncHVsbCcsICdwdXNoJyBvciAncHVsbC1wdXNoJ2ApO1xuICAgICAgICAgICAgYXNzZXJ0KFtcIm9uX3N1Y2Nlc3NcIiwgXCJvbl9mYWlsdXJlXCIsIFwiYWx3YXlzXCJdLmluY2x1ZGVzKGMud2hlbiksIGNoYWxrYHtibHVlICR7dGhpcy5uYW1lfX0gY2FjaGVbJHtpfV0ud2hlbiBpcyBub3QgJ29uX3N1Y2Nlc3MnLCAnb25fZmFpbHVyZScgb3IgJ2Fsd2F5cydgKTtcbiAgICAgICAgICAgIGFzc2VydChBcnJheS5pc0FycmF5KGMucGF0aHMpLCBjaGFsa2B7Ymx1ZSAke3RoaXMubmFtZX19IGNhY2hlWyR7aX1dLnBhdGhzIG11c3QgYmUgYXJyYXlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgW2ksIHNdIG9mIE9iamVjdC5lbnRyaWVzPGFueT4odGhpcy5zZXJ2aWNlcykpIHtcbiAgICAgICAgICAgIGFzc2VydChzLm5hbWUsIGNoYWxrYHtibHVlICR7dGhpcy5uYW1lfX0gc2VydmljZXNbJHtpfV0ubmFtZSBpcyB1bmRlZmluZWRgKTtcbiAgICAgICAgICAgIGFzc2VydCghcy5jb21tYW5kIHx8IEFycmF5LmlzQXJyYXkocy5jb21tYW5kKSwgY2hhbGtge2JsdWUgJHt0aGlzLm5hbWV9fSBzZXJ2aWNlc1ske2l9XS5jb21tYW5kIG11c3QgYmUgYW4gYXJyYXlgKTtcbiAgICAgICAgICAgIGFzc2VydCghcy5lbnRyeXBvaW50IHx8IEFycmF5LmlzQXJyYXkocy5lbnRyeXBvaW50KSwgY2hhbGtge2JsdWUgJHt0aGlzLm5hbWV9fSBzZXJ2aWNlc1ske2l9XS5lbnRyeXBvaW50IG11c3QgYmUgYW4gYXJyYXlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFzc2VydCghdGhpcy5hcnRpZmFjdHM/LnBhdGhzIHx8IEFycmF5LmlzQXJyYXkodGhpcy5hcnRpZmFjdHMucGF0aHMpLCBjaGFsa2B7Ymx1ZSAke3RoaXMubmFtZX19IGFydGlmYWN0cy5wYXRocyBtdXN0IGJlIGFuIGFycmF5YCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VOYW1lICYmIGFyZ3YubW91bnRDYWNoZSkge1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWQgPSBVdGlscy5leHBhbmRWYXJpYWJsZXModGhpcy5fdmFyaWFibGVzKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgICAgICAgYy5wYXRocy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBVdGlscy5leHBhbmRUZXh0KHAsIGV4cGFuZGVkKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KCFwYXRoLmluY2x1ZGVzKFwiKlwiKSwgY2hhbGtge2JsdWUgJHt0aGlzLm5hbWV9fSBjYW5ub3QgaGF2ZSAqIGluIGNhY2hlIHBhdGhzLCB3aGVuIC0tbW91bnQtY2FjaGUgaXMgZW5hYmxlZGApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGFydGlmYWN0c1RvU291cmNlICgpIHtcbiAgICAgICAgaWYgKHRoaXMuam9iRGF0YVtcImFydGlmYWN0c1RvU291cmNlXCJdICE9IG51bGwpIHJldHVybiB0aGlzLmpvYkRhdGFbXCJhcnRpZmFjdHNUb1NvdXJjZVwiXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXJndi5hcnRpZmFjdHNUb1NvdXJjZTtcbiAgICB9XG5cbiAgICBnZXQgcHJldHR5RHVyYXRpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5fZW5kVGltZSkge1xuICAgICAgICAgICAgcmV0dXJuIHByZXR0eUhydGltZSh0aGlzLl9lbmRUaW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFydFRpbWVcbiAgICAgICAgICAgID8gcHJldHR5SHJ0aW1lKHByb2Nlc3MuaHJ0aW1lKHRoaXMuX3N0YXJ0VGltZSkpXG4gICAgICAgICAgICA6IFwiMCBtc1wiO1xuICAgIH1cblxuICAgIGdldCBmb3JtYXR0ZWRKb2JOYW1lICgpIHtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wUHJlZml4ID0gdGhpcy5hcmd2LnNob3dUaW1lc3RhbXBzXG4gICAgICAgICAgICA/IGBbJHtkYXRlRm9ybWF0dGVyLmZvcm1hdChuZXcgRGF0ZSgpKX0gJHt0aGlzLnByZXR0eUR1cmF0aW9uLnBhZFN0YXJ0KDcpfV0gYFxuICAgICAgICAgICAgOiBcIlwiO1xuXG4gICAgICAgIC8vIFsxNjozMzoxOSAxLjM3IG1pbl0gbXktam9iICAgICA+IGhlbGxvIHdvcmxkXG4gICAgICAgIHJldHVybiBjaGFsa2Ake3RpbWVzdGFtcFByZWZpeH17Ymx1ZUJyaWdodCAke3RoaXMubmFtZS5wYWRFbmQodGhpcy5qb2JOYW1lUGFkKX19YDtcbiAgICB9XG5cbiAgICBnZXQgc2FmZUpvYk5hbWUgKCkge1xuICAgICAgICByZXR1cm4gVXRpbHMuc2FmZURvY2tlclN0cmluZyh0aGlzLm5hbWUpO1xuICAgIH1cblxuICAgIGdldCBuZWVkcyAoKTogTmVlZFtdIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJuZWVkc1wiXSA/PyBudWxsO1xuICAgIH1cblxuICAgIGdldCBidWlsZFZvbHVtZU5hbWUgKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgZ2NsLSR7dGhpcy5zYWZlSm9iTmFtZX0tJHt0aGlzLmpvYklkfS1idWlsZGA7XG4gICAgfVxuXG4gICAgZ2V0IHRtcFZvbHVtZU5hbWUgKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgZ2NsLSR7dGhpcy5zYWZlSm9iTmFtZX0tJHt0aGlzLmpvYklkfS10bXBgO1xuICAgIH1cblxuICAgIGdldCBpbWFnZU5hbWUgKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBjb25zdCBpbWFnZSA9IHRoaXMuam9iRGF0YVtcImltYWdlXCJdO1xuICAgICAgICBpZiAoIWltYWdlKSByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgZXhwYW5kZWQgPSBVdGlscy5leHBhbmRWYXJpYWJsZXModGhpcy5fdmFyaWFibGVzKTtcbiAgICAgICAgY29uc3QgaW1hZ2VOYW1lID0gVXRpbHMuZXhwYW5kVGV4dChpbWFnZS5uYW1lLCBleHBhbmRlZCk7XG4gICAgICAgIHJldHVybiBpbWFnZU5hbWUuaW5jbHVkZXMoXCI6XCIpID8gaW1hZ2VOYW1lIDogYCR7aW1hZ2VOYW1lfTpsYXRlc3RgO1xuICAgIH1cblxuICAgIGdldCBpbWFnZUVudHJ5cG9pbnQgKCk6IHN0cmluZ1tdIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5qb2JEYXRhW1wiaW1hZ2VcIl07XG5cbiAgICAgICAgaWYgKCFpbWFnZT8uZW50cnlwb2ludCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgYXNzZXJ0KEFycmF5LmlzQXJyYXkoaW1hZ2UuZW50cnlwb2ludCksIFwiaW1hZ2U6ZW50cnlwb2ludCBtdXN0IGJlIGFuIGFycmF5XCIpO1xuICAgICAgICByZXR1cm4gaW1hZ2UuZW50cnlwb2ludDtcbiAgICB9XG5cbiAgICBnZXQgc2VydmljZXMgKCk6IFNlcnZpY2VbXSB7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VzOiBTZXJ2aWNlW10gPSBbXTtcbiAgICAgICAgaWYgKCF0aGlzLmpvYkRhdGFbXCJzZXJ2aWNlc1wiXSkgcmV0dXJuIFtdO1xuXG4gICAgICAgIGZvciAoY29uc3Qgc2VydmljZSBvZiBPYmplY3QudmFsdWVzPGFueT4odGhpcy5qb2JEYXRhW1wic2VydmljZXNcIl0pKSB7XG4gICAgICAgICAgICBjb25zdCBleHBhbmRlZCA9IFV0aWxzLmV4cGFuZFZhcmlhYmxlcyh7Li4udGhpcy5fdmFyaWFibGVzLCAuLi5zZXJ2aWNlW1widmFyaWFibGVzXCJdfSk7XG4gICAgICAgICAgICBsZXQgc2VydmljZU5hbWUgPSBVdGlscy5leHBhbmRUZXh0KHNlcnZpY2VbXCJuYW1lXCJdLCBleHBhbmRlZCk7XG4gICAgICAgICAgICBzZXJ2aWNlTmFtZSA9IHNlcnZpY2VOYW1lLmluY2x1ZGVzKFwiOlwiKSA/IHNlcnZpY2VOYW1lIDogYCR7c2VydmljZU5hbWV9OmxhdGVzdGA7XG4gICAgICAgICAgICBzZXJ2aWNlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBzZXJ2aWNlTmFtZSxcbiAgICAgICAgICAgICAgICBlbnRyeXBvaW50OiBzZXJ2aWNlW1wiZW50cnlwb2ludFwiXSA/PyBudWxsLFxuICAgICAgICAgICAgICAgIGNvbW1hbmQ6IHNlcnZpY2VbXCJjb21tYW5kXCJdID8/IG51bGwsXG4gICAgICAgICAgICAgICAgdmFyaWFibGVzOiBleHBhbmRlZCxcbiAgICAgICAgICAgICAgICBhbGlhczogVXRpbHMuZXhwYW5kVGV4dChzZXJ2aWNlW1wiYWxpYXNcIl0sIGV4cGFuZGVkKSA/PyBudWxsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlcnZpY2VzO1xuICAgIH1cblxuICAgIHNldCBqb2JOYW1lUGFkIChqb2JOYW1lUGFkOiBudW1iZXIpIHtcbiAgICAgICAgYXNzZXJ0KHRoaXMuX2pvYk5hbWVQYWQgPT0gbnVsbCwgXCJ0aGlzLl9qb2JOYW1lUGFkIGNhbiBvbmx5IGJlIHNldCBvbmNlXCIpO1xuICAgICAgICB0aGlzLl9qb2JOYW1lUGFkID0gam9iTmFtZVBhZDtcbiAgICB9XG5cbiAgICBnZXQgam9iTmFtZVBhZCAoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2pvYk5hbWVQYWQgPz8gMDtcbiAgICB9XG5cbiAgICBnZXQgcHJvZHVjZXJzICgpOiB7bmFtZTogc3RyaW5nOyBkb3RlbnY6IHN0cmluZyB8IG51bGx9W10gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2R1Y2VycztcbiAgICB9XG5cbiAgICBzZXQgcHJvZHVjZXJzIChwcm9kdWNlcnM6IHtuYW1lOiBzdHJpbmc7IGRvdGVudjogc3RyaW5nIHwgbnVsbH1bXSB8IG51bGwpIHtcbiAgICAgICAgYXNzZXJ0KHRoaXMuX3Byb2R1Y2VycyA9PSBudWxsLCBcInRoaXMuX3Byb2R1Y2VycyBjYW4gb25seSBiZSBzZXQgb25jZVwiKTtcbiAgICAgICAgdGhpcy5fcHJvZHVjZXJzID0gcHJvZHVjZXJzO1xuICAgIH1cblxuICAgIGdldCBzdGFnZSAoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcInN0YWdlXCJdIHx8IFwidGVzdFwiO1xuICAgIH1cblxuICAgIGdldCBpbnRlcmFjdGl2ZSAoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJpbnRlcmFjdGl2ZVwiXSB8fCBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgaW5qZWN0U1NIQWdlbnQgKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wiaW5qZWN0U1NIQWdlbnRcIl0gfHwgZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IGRlc2NyaXB0aW9uICgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wiZGVzY3JpcHRpb25cIl0gPz8gXCJcIjtcbiAgICB9XG5cbiAgICBnZXQgYXJ0aWZhY3RzICgpOiB7cGF0aHM6IHN0cmluZ1tdOyBleGNsdWRlPzogc3RyaW5nW107IHJlcG9ydHM/OiB7ZG90ZW52Pzogc3RyaW5nfTsgd2hlbj86IHN0cmluZ30gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcImFydGlmYWN0c1wiXTtcbiAgICB9XG5cbiAgICBnZXQgY2FjaGUgKCk6IENhY2hlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wiY2FjaGVcIl0gfHwgW107XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFVuaXF1ZUNhY2hlTmFtZSAoY3dkOiBzdHJpbmcsIGV4cGFuZGVkOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSwga2V5OiBhbnkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIgfHwga2V5ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBVdGlscy5leHBhbmRUZXh0KGtleSA/PyBcImRlZmF1bHRcIiwgZXhwYW5kZWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIm1kLVwiICsgYXdhaXQgVXRpbHMuY2hlY2tzdW1GaWxlcyhrZXlbXCJmaWxlc1wiXS5tYXAoKGY6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAke2N3ZH0vJHtVdGlscy5leHBhbmRUZXh0KGYsIGV4cGFuZGVkKX1gO1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgZ2V0IGJlZm9yZVNjcmlwdHMgKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam9iRGF0YVtcImJlZm9yZV9zY3JpcHRcIl0gfHwgW107XG4gICAgfVxuXG4gICAgZ2V0IGFmdGVyU2NyaXB0cyAoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5qb2JEYXRhW1wiYWZ0ZXJfc2NyaXB0XCJdIHx8IFtdO1xuICAgIH1cblxuICAgIGdldCBzY3JpcHRzICgpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJzY3JpcHRcIl07XG4gICAgfVxuXG4gICAgZ2V0IHRyaWdnZXIgKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmpvYkRhdGFbXCJ0cmlnZ2VyXCJdO1xuICAgIH1cblxuICAgIGdldCBwcmVTY3JpcHRzRXhpdENvZGUgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlO1xuICAgIH1cblxuICAgIGdldCBhZnRlclNjcmlwdHNFeGl0Q29kZSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZnRlclNjcmlwdHNFeGl0Q29kZTtcbiAgICB9XG5cbiAgICBnZXQgc3RhcnRlZCAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydW5uaW5nIHx8IHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICBnZXQgZmluaXNoZWQgKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuX3J1bm5pbmcgJiYgdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlICE9PSBudWxsO1xuICAgIH1cblxuICAgIGdldCBjb3ZlcmFnZVBlcmNlbnQgKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fY292ZXJhZ2VQZXJjZW50O1xuICAgIH1cblxuICAgIGdldCBmaWxlVmFyaWFibGVzRGlyICgpIHtcbiAgICAgICAgcmV0dXJuIGAvdG1wL2dpdGxhYi1jaS1sb2NhbC1maWxlLXZhcmlhYmxlcy0ke3RoaXMuX3ZhcmlhYmxlc1tcIkNJX1BST0pFQ1RfUEFUSF9TTFVHXCJdfS0ke3RoaXMuam9iSWR9YDtcbiAgICB9XG5cbiAgICBhc3luYyBzdGFydCAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuX3J1bm5pbmcgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IGFyZ3YgPSB0aGlzLmFyZ3Y7XG4gICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgIGNvbnN0IHdyaXRlU3RyZWFtcyA9IHRoaXMud3JpdGVTdHJlYW1zO1xuICAgICAgICBjb25zdCByZXBvcnRzRG90ZW52VmFyaWFibGVzID0gYXdhaXQgdGhpcy5pbml0UHJvZHVjZXJSZXBvcnRzRG90ZW52VmFyaWFibGVzKHdyaXRlU3RyZWFtcywgVXRpbHMuZXhwYW5kVmFyaWFibGVzKHRoaXMuX3ZhcmlhYmxlcykpO1xuICAgICAgICBjb25zdCBleHBhbmRlZCA9IFV0aWxzLmV4cGFuZFZhcmlhYmxlcyh7Li4udGhpcy5fdmFyaWFibGVzLCAuLi5yZXBvcnRzRG90ZW52VmFyaWFibGVzfSk7XG4gICAgICAgIGNvbnN0IHNhZmVKb2JOYW1lID0gdGhpcy5zYWZlSm9iTmFtZTtcblxuXG4gICAgICAgIGNvbnN0IG91dHB1dExvZ0ZpbGVQYXRoID0gYCR7YXJndi5jd2R9LyR7YXJndi5zdGF0ZURpcn0vb3V0cHV0LyR7c2FmZUpvYk5hbWV9LmxvZ2A7XG4gICAgICAgIGF3YWl0IGZzLmVuc3VyZUZpbGUob3V0cHV0TG9nRmlsZVBhdGgpO1xuICAgICAgICBhd2FpdCBmcy50cnVuY2F0ZShvdXRwdXRMb2dGaWxlUGF0aCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmludGVyYWN0aXZlKSB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBzdGFydGluZ30gJHt0aGlzLmltYWdlTmFtZSA/PyBcInNoZWxsXCJ9ICh7eWVsbG93ICR7dGhpcy5zdGFnZX19KVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBidWlsZFZvbHVtZU5hbWUgPSB0aGlzLmJ1aWxkVm9sdW1lTmFtZTtcbiAgICAgICAgICAgIGNvbnN0IHRtcFZvbHVtZU5hbWUgPSB0aGlzLnRtcFZvbHVtZU5hbWU7XG4gICAgICAgICAgICBjb25zdCBmaWxlVmFyaWFibGVzRGlyID0gdGhpcy5maWxlVmFyaWFibGVzRGlyO1xuXG4gICAgICAgICAgICBjb25zdCB2b2x1bWVQcm9taXNlcyA9IFtdO1xuICAgICAgICAgICAgdm9sdW1lUHJvbWlzZXMucHVzaChVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJ2b2x1bWVcIiwgXCJjcmVhdGVcIiwgYCR7YnVpbGRWb2x1bWVOYW1lfWBdLCBhcmd2LmN3ZCkpO1xuICAgICAgICAgICAgdm9sdW1lUHJvbWlzZXMucHVzaChVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJ2b2x1bWVcIiwgXCJjcmVhdGVcIiwgYCR7dG1wVm9sdW1lTmFtZX1gXSwgYXJndi5jd2QpKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lclZvbHVtZU5hbWVzLnB1c2goYnVpbGRWb2x1bWVOYW1lKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lclZvbHVtZU5hbWVzLnB1c2godG1wVm9sdW1lTmFtZSk7XG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh2b2x1bWVQcm9taXNlcyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG4gICAgICAgICAgICBjb25zdCB7c3Rkb3V0OiBjb250YWluZXJJZH0gPSBhd2FpdCBVdGlscy5zcGF3bihbXG4gICAgICAgICAgICAgICAgXCJkb2NrZXJcIiwgXCJjcmVhdGVcIiwgYC0tdm9sdW1lPSR7YnVpbGRWb2x1bWVOYW1lfTovZ2NsLWJ1aWxkc2AsIGAtLXZvbHVtZT0ke3RtcFZvbHVtZU5hbWV9OiR7dGhpcy5maWxlVmFyaWFibGVzRGlyfWAsIFwiZG9ja2VyLmlvL2ZpcmVjb3cvZ2l0bGFiLWNpLWxvY2FsLXV0aWxcIixcbiAgICAgICAgICAgICAgICBcImJhc2hcIiwgXCItY1wiLCBcImNob3duIDA6MCAtUiAvZ2NsLWJ1aWxkcy8gJiYgY2htb2QgYStydyAtUiAvZ2NsLWJ1aWxkcy8gJiYgY2htb2QgYStydyAtUiAvdG1wL1wiLFxuICAgICAgICAgICAgXSwgYXJndi5jd2QpO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyc1RvQ2xlYW4ucHVzaChjb250YWluZXJJZCk7XG4gICAgICAgICAgICBpZiAoYXdhaXQgZnMucGF0aEV4aXN0cyhmaWxlVmFyaWFibGVzRGlyKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcImNwXCIsIGAke2ZpbGVWYXJpYWJsZXNEaXJ9Ly5gLCBgJHtjb250YWluZXJJZH06JHtmaWxlVmFyaWFibGVzRGlyfWBdLCBhcmd2LmN3ZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJjcFwiLCBgJHthcmd2LnN0YXRlRGlyfS9idWlsZHMvLmRvY2tlci8uYCwgYCR7Y29udGFpbmVySWR9Oi9nY2wtYnVpbGRzYF0sIGFyZ3YuY3dkKTtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcInN0YXJ0XCIsIFwiLS1hdHRhY2hcIiwgY29udGFpbmVySWRdLCBhcmd2LmN3ZCk7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJybVwiLCBcIi12ZlwiLCBjb250YWluZXJJZF0sIGFyZ3YuY3dkKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IGNvcGllZCB0byBkb2NrZXIgdm9sdW1lc30gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2VydmljZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jcmVhdGVEb2NrZXJOZXR3b3JrKGBnaXRsYWItY2ktbG9jYWwtJHt0aGlzLmpvYklkfWApO1xuXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VzLm1hcChhc3luYyAoc2VydmljZSwgc2VydmljZUluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gc2VydmljZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnB1bGxJbWFnZSh3cml0ZVN0cmVhbXMsIHNlcnZpY2VOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VydmljZUNvbnRhaW5lcklkID0gYXdhaXQgdGhpcy5zdGFydFNlcnZpY2Uod3JpdGVTdHJlYW1zLCBVdGlscy5leHBhbmRWYXJpYWJsZXMoey4uLmV4cGFuZGVkLCAuLi5zZXJ2aWNlLnZhcmlhYmxlc30pLCBzZXJ2aWNlLCBzZXJ2aWNlSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlQ29udGFuZXJMb2dGaWxlID0gYCR7YXJndi5jd2R9LyR7YXJndi5zdGF0ZURpcn0vc2VydmljZXMtb3V0cHV0LyR7dGhpcy5zYWZlSm9iTmFtZX0vJHtzZXJ2aWNlTmFtZX0tJHtzZXJ2aWNlSW5kZXh9LmxvZ2A7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2VydmljZUhlYWx0aENoZWNrKHdyaXRlU3RyZWFtcywgc2VydmljZSwgc2VydmljZUluZGV4LCBzZXJ2aWNlQ29udGFuZXJMb2dGaWxlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyfSA9IGF3YWl0IFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcImxvZ3NcIiwgc2VydmljZUNvbnRhaW5lcklkXSk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGZzLmVuc3VyZUZpbGUoc2VydmljZUNvbnRhbmVyTG9nRmlsZSk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGZzLnByb21pc2VzLndyaXRlRmlsZShzZXJ2aWNlQ29udGFuZXJMb2dGaWxlLCBgIyMjIHN0ZG91dCAjIyNcXG4ke3N0ZG91dH1cXG4jIyMgc3RkZXJyICMjI1xcbiR7c3RkZXJyfVxcbmApO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJlc2NyaXB0cyA9IHRoaXMuYmVmb3JlU2NyaXB0cy5jb25jYXQodGhpcy5zY3JpcHRzKTtcbiAgICAgICAgZXhwYW5kZWRbXCJDSV9KT0JfU1RBVFVTXCJdID0gXCJydW5uaW5nXCI7XG4gICAgICAgIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSA9IGF3YWl0IHRoaXMuZXhlY1NjcmlwdHMocHJlc2NyaXB0cywgZXhwYW5kZWQpO1xuICAgICAgICBpZiAodGhpcy5hZnRlclNjcmlwdHMubGVuZ3RoID09PSAwICYmIHRoaXMuX3ByZXNjcmlwdHNFeGl0Q29kZSA+IDAgJiYgIXRoaXMuYWxsb3dGYWlsdXJlKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyRW5kVGltZSgpO1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihgJHt0aGlzLmdldEV4aXRlZFN0cmluZyh0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUsIGZhbHNlKX1cXG5gKTtcbiAgICAgICAgICAgIHRoaXMuX3J1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2xlYW51cFJlc291cmNlcygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWZ0ZXJTY3JpcHRzLmxlbmd0aCA9PT0gMCAmJiB0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUgPiAwICYmIHRoaXMuYWxsb3dGYWlsdXJlKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyRW5kVGltZSgpO1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihgJHt0aGlzLmdldEV4aXRlZFN0cmluZyh0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUsIHRydWUpfVxcbmApO1xuICAgICAgICAgICAgdGhpcy5fcnVubmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jbGVhbnVwUmVzb3VyY2VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlID4gMCAmJiB0aGlzLmFsbG93RmFpbHVyZSkge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckVuZFRpbWUoKTtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoYCR7dGhpcy5nZXRFeGl0ZWRTdHJpbmcodGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlLCB0cnVlKX1cXG5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9wcmVzY3JpcHRzRXhpdENvZGUgPiAwICYmICF0aGlzLmFsbG93RmFpbHVyZSkge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckVuZFRpbWUoKTtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoYCR7dGhpcy5nZXRFeGl0ZWRTdHJpbmcodGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlLCBmYWxzZSl9XFxuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hZnRlclNjcmlwdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZXhwYW5kZWRbXCJDSV9KT0JfU1RBVFVTXCJdID0gdGhpcy5fcHJlc2NyaXB0c0V4aXRDb2RlID09PSAwID8gXCJzdWNjZXNzXCIgOiBcImZhaWxlZFwiO1xuICAgICAgICAgICAgdGhpcy5fYWZ0ZXJTY3JpcHRzRXhpdENvZGUgPSBhd2FpdCB0aGlzLmV4ZWNTY3JpcHRzKHRoaXMuYWZ0ZXJTY3JpcHRzLCBleHBhbmRlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fYWZ0ZXJTY3JpcHRzRXhpdENvZGUgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyRW5kVGltZSgpO1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihgJHt0aGlzLmdldEV4aXRlZFN0cmluZyh0aGlzLl9hZnRlclNjcmlwdHNFeGl0Q29kZSwgdHJ1ZSwgXCIgYWZ0ZXJfc2NyaXB0XCIpfVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZWdpc3RlckVuZFRpbWUoKTtcbiAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChgJHt0aGlzLmdldEZpbmlzaGVkU3RyaW5nKCl9XFxuYCk7XG5cbiAgICAgICAgaWYgKHRoaXMuam9iRGF0YVtcImNvdmVyYWdlXCJdKSB7XG4gICAgICAgICAgICB0aGlzLl9jb3ZlcmFnZVBlcmNlbnQgPSBhd2FpdCBVdGlscy5nZXRDb3ZlcmFnZVBlcmNlbnQoYXJndi5jd2QsIGFyZ3Yuc3RhdGVEaXIsIHRoaXMuam9iRGF0YVtcImNvdmVyYWdlXCJdLCBzYWZlSm9iTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9ydW5uaW5nID0gZmFsc2U7XG4gICAgICAgIGF3YWl0IHRoaXMuY2xlYW51cFJlc291cmNlcygpO1xuICAgIH1cblxuICAgIGFzeW5jIGNsZWFudXBSZXNvdXJjZXMgKCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fbG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KTtcblxuICAgICAgICBpZiAoIXRoaXMuYXJndi5jbGVhbnVwKSByZXR1cm47XG5cbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiB0aGlzLl9jb250YWluZXJzVG9DbGVhbikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJybVwiLCBcIi12ZlwiLCBgJHtpZH1gXSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGUgaW5zdGFuY2VvZiBFcnJvciwgXCJlIGlzIG5vdCBpbnN0YW5jZW9mIEVycm9yXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3NlcnZpY2VOZXR3b3JrSWQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW1wiZG9ja2VyXCIsIFwibmV0d29ya1wiLCBcInJtXCIsIGAke3RoaXMuX3NlcnZpY2VOZXR3b3JrSWR9YF0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGFzc2VydChlIGluc3RhbmNlb2YgRXJyb3IsIFwiZSBpcyBub3QgaW5zdGFuY2VvZiBFcnJvclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9jb250YWluZXJWb2x1bWVOYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29udGFpbmVyVm9sdW1lIG9mIHRoaXMuX2NvbnRhaW5lclZvbHVtZU5hbWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcInZvbHVtZVwiLCBcInJtXCIsIGAke2NvbnRhaW5lclZvbHVtZX1gXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGFzc2VydChlIGluc3RhbmNlb2YgRXJyb3IsIFwiZSBpcyBub3QgaW5zdGFuY2VvZiBFcnJvclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVWYXJpYWJsZXNEaXIgPSB0aGlzLmZpbGVWYXJpYWJsZXNEaXI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBmcy5ybShmaWxlVmFyaWFibGVzRGlyLCB7cmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZX0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhc3NlcnQoZSBpbnN0YW5jZW9mIEVycm9yLCBcImUgaXMgbm90IGluc3RhbmNlb2YgRXJyb3JcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlSW5qZWN0U1NIQWdlbnRPcHRpb25zICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmluamVjdFNTSEFnZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJkYXJ3aW5cIiB8fCAvXmRhcndpbi8uZXhlYyhwcm9jZXNzLmVudi5PU1RZUEUgPz8gXCJcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBcIi0tZW52IFNTSF9BVVRIX1NPQ0s9L3J1bi9ob3N0LXNlcnZpY2VzL3NzaC1hdXRoLnNvY2sgLXYgL3J1bi9ob3N0LXNlcnZpY2VzL3NzaC1hdXRoLnNvY2s6L3J1bi9ob3N0LXNlcnZpY2VzL3NzaC1hdXRoLnNvY2tcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYC0tZW52IFNTSF9BVVRIX1NPQ0s9JHtwcm9jZXNzLmVudi5TU0hfQVVUSF9TT0NLfSAtdiAke3Byb2Nlc3MuZW52LlNTSF9BVVRIX1NPQ0t9OiR7cHJvY2Vzcy5lbnYuU1NIX0FVVEhfU09DS31gO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVTY3JpcHRDb21tYW5kcyAoc2NyaXB0czogc3RyaW5nW10pIHtcbiAgICAgICAgbGV0IGNtZCA9IFwiXCI7XG4gICAgICAgIHNjcmlwdHMuZm9yRWFjaCgoc2NyaXB0KSA9PiB7XG4gICAgICAgICAgICAvLyBQcmludCBjb21tYW5kIGVjaG8nZWQgaW4gY29sb3JcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0ID0gc2NyaXB0LnNwbGl0KC9cXHI/XFxuLyk7XG4gICAgICAgICAgICBjb25zdCBtdWx0aWxpbmVUZXh0ID0gc3BsaXQubGVuZ3RoID4gMSA/IFwiICMgY29sbGFwc2VkIG11bHRpLWxpbmUgY29tbWFuZFwiIDogXCJcIjtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBzcGxpdFswXT8ucmVwbGFjZSgvXFxcXC9nLCBcIlxcXFxcXFxcXCIpLnJlcGxhY2UoL1wiL2csIFwiXFxcXFxcXCJcIikucmVwbGFjZSgvWyRdL2csIFwiXFxcXCRcIik7XG4gICAgICAgICAgICBjbWQgKz0gY2hhbGtgZWNobyBcIntncmVlbiAkICR7dGV4dH0ke211bHRpbGluZVRleHR9fVwiXFxuYDtcblxuICAgICAgICAgICAgLy8gRXhlY3V0ZSBhY3R1YWwgc2NyaXB0XG4gICAgICAgICAgICBjbWQgKz0gYCR7c2NyaXB0fVxcbmA7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY21kO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgbW91bnRDYWNoZUNtZCAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIGV4cGFuZGVkOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAgICAgICBpZiAodGhpcy5pbWFnZU5hbWUgJiYgIXRoaXMuYXJndi5tb3VudENhY2hlKSByZXR1cm4gW107XG5cbiAgICAgICAgY29uc3QgY21kOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jYWNoZSkge1xuICAgICAgICAgICAgY29uc3QgdW5pcXVlQ2FjaGVOYW1lID0gYXdhaXQgdGhpcy5nZXRVbmlxdWVDYWNoZU5hbWUodGhpcy5hcmd2LmN3ZCwgZXhwYW5kZWQsIGMua2V5KTtcbiAgICAgICAgICAgIGMucGF0aHMuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBVdGlscy5leHBhbmRUZXh0KHAsIGV4cGFuZGVkKTtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7bWFnZW50YUJyaWdodCBtb3VudGluZyBjYWNoZX0gZm9yIHBhdGggJHtwYXRofVxcbmApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlTW91bnQgPSBVdGlscy5zYWZlRG9ja2VyU3RyaW5nKGBnY2wtJHtleHBhbmRlZC5DSV9QUk9KRUNUX1BBVEhfU0xVR30tJHt1bmlxdWVDYWNoZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgY21kLnB1c2goXCItdlwiLCBgJHtjYWNoZU1vdW50fTovZ2NsLWJ1aWxkcy8ke3BhdGh9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY21kO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZXhlY1NjcmlwdHMgKHNjcmlwdHM6IHN0cmluZ1tdLCBleHBhbmRlZDoge1trZXk6IHN0cmluZ106IHN0cmluZ30pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgICBjb25zdCBjd2QgPSB0aGlzLmFyZ3YuY3dkO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IHRoaXMuYXJndi5zdGF0ZURpcjtcbiAgICAgICAgY29uc3Qgc2FmZUpvYk5hbWUgPSB0aGlzLnNhZmVKb2JOYW1lO1xuICAgICAgICBjb25zdCBvdXRwdXRGaWxlc1BhdGggPSBgJHtjd2R9LyR7c3RhdGVEaXJ9L291dHB1dC8ke3NhZmVKb2JOYW1lfS5sb2dgO1xuICAgICAgICBjb25zdCBidWlsZFZvbHVtZU5hbWUgPSB0aGlzLmJ1aWxkVm9sdW1lTmFtZTtcbiAgICAgICAgY29uc3QgdG1wVm9sdW1lTmFtZSA9IHRoaXMudG1wVm9sdW1lTmFtZTtcbiAgICAgICAgY29uc3Qgd3JpdGVTdHJlYW1zID0gdGhpcy53cml0ZVN0cmVhbXM7XG5cbiAgICAgICAgaWYgKHNjcmlwdHMubGVuZ3RoID09PSAwIHx8IHNjcmlwdHNbMF0gPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb3B5IGdpdCB0cmFja2VkIGZpbGVzIHRvIGJ1aWxkIGZvbGRlciBpZiBzaGVsbCBpc29sYXRpb24gZW5hYmxlZC5cbiAgICAgICAgaWYgKCF0aGlzLmltYWdlTmFtZSAmJiB0aGlzLmFyZ3Yuc2hlbGxJc29sYXRpb24pIHtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLnJzeW5jVHJhY2tlZEZpbGVzKGN3ZCwgc3RhdGVEaXIsIGAke3NhZmVKb2JOYW1lfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW50ZXJhY3RpdmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGlDbWQgPSB0aGlzLmdlbmVyYXRlU2NyaXB0Q29tbWFuZHMoc2NyaXB0cyk7XG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUNwID0gZXhlY2EoaUNtZCwge1xuICAgICAgICAgICAgICAgIGN3ZCxcbiAgICAgICAgICAgICAgICBzaGVsbDogXCJiYXNoXCIsXG4gICAgICAgICAgICAgICAgc3RkaW86IFtcImluaGVyaXRcIiwgXCJpbmhlcml0XCIsIFwiaW5oZXJpdFwiXSxcbiAgICAgICAgICAgICAgICBlbnY6IHsuLi5leHBhbmRlZCwgLi4ucHJvY2Vzcy5lbnZ9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8bnVtYmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgdm9pZCBpbnRlcmFjdGl2ZUNwLm9uKFwiZXhpdFwiLCAoY29kZSkgPT4gcmVzb2x2ZShjb2RlID8/IDApKTtcbiAgICAgICAgICAgICAgICB2b2lkIGludGVyYWN0aXZlQ3Aub24oXCJlcnJvclwiLCAoZXJyKSA9PiByZWplY3QoZXJyKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuXG4gICAgICAgIGlmICh0aGlzLmltYWdlTmFtZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wdWxsSW1hZ2Uod3JpdGVTdHJlYW1zLCB0aGlzLmltYWdlTmFtZSk7XG5cbiAgICAgICAgICAgIGxldCBkb2NrZXJDbWQgPSBgZG9ja2VyIGNyZWF0ZSAtLWludGVyYWN0aXZlICR7dGhpcy5nZW5lcmF0ZUluamVjdFNTSEFnZW50T3B0aW9ucygpfSBgO1xuICAgICAgICAgICAgaWYgKHRoaXMuYXJndi5wcml2aWxlZ2VkKSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiLS1wcml2aWxlZ2VkIFwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5hcmd2LnVsaW1pdCA+IDApIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdWxpbWl0IG5vZmlsZT0ke3RoaXMuYXJndi51bGltaXR9IGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmFyZ3YudW1hc2spIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCItLXVzZXIgMDowIFwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5zZXJ2aWNlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLW5ldHdvcmsgZ2l0bGFiLWNpLWxvY2FsLSR7dGhpcy5qb2JJZH0gYDtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCItLW5ldHdvcmstYWxpYXM9YnVpbGQgXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBgLS12b2x1bWUgJHtidWlsZFZvbHVtZU5hbWV9Oi9nY2wtYnVpbGRzIGA7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdm9sdW1lICR7dG1wVm9sdW1lTmFtZX06JHt0aGlzLmZpbGVWYXJpYWJsZXNEaXJ9IGA7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCItLXdvcmtkaXIgL2djbC1idWlsZHMgXCI7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgdm9sdW1lIG9mIHRoaXMuYXJndi52b2x1bWUpIHtcbiAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdm9sdW1lICR7dm9sdW1lfSBgO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGV4dHJhSG9zdCBvZiB0aGlzLmFyZ3YuZXh0cmFIb3N0KSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLWFkZC1ob3N0PSR7ZXh0cmFIb3N0fSBgO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBlbnRyeXBvaW50RmlsZSA9IGAke2N3ZH0vJHtzdGF0ZURpcn0vc2NyaXB0cy9pbWFnZV9lbnRyeS8ke3NhZmVKb2JOYW1lfWA7XG4gICAgICAgICAgICBpZiAodGhpcy5pbWFnZUVudHJ5cG9pbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbWFnZUVudHJ5cG9pbnRbMF0gPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCItLWVudHJ5cG9pbnQgJycgXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZnMub3V0cHV0RmlsZShlbnRyeXBvaW50RmlsZSwgXCIjIS9iaW4vc2hcXG5cIik7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGZzLmFwcGVuZEZpbGUoZW50cnlwb2ludEZpbGUsIGAke3RoaXMuaW1hZ2VFbnRyeXBvaW50LmpvaW4oXCIgXCIpfWApO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBmcy5jaG1vZChlbnRyeXBvaW50RmlsZSwgXCIwNzU1XCIpO1xuICAgICAgICAgICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCItLWVudHJ5cG9pbnQgJy9nY2wtZW50cnknIFwiO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBmcy5hcHBlbmRGaWxlKGVudHJ5cG9pbnRGaWxlLCBcIiBcXFwiJEBcXFwiXFxuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZXhwYW5kZWQpKSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtZSAke2tleX0gYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAkeyhhd2FpdCB0aGlzLm1vdW50Q2FjaGVDbWQod3JpdGVTdHJlYW1zLCBleHBhbmRlZCkpLmpvaW4oXCIgXCIpfSBgO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAke3RoaXMuaW1hZ2VOYW1lfSBzaCAtYyBcIlxcbmA7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJpZiBbIC14IC91c3IvbG9jYWwvYmluL2Jhc2ggXTsgdGhlblxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhlYyAvdXNyL2xvY2FsL2Jpbi9iYXNoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxpZiBbIC14IC91c3IvYmluL2Jhc2ggXTsgdGhlblxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhlYyAvdXNyL2Jpbi9iYXNoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxpZiBbIC14IC9iaW4vYmFzaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC9iaW4vYmFzaCBcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImVsaWYgWyAteCAvdXNyL2xvY2FsL2Jpbi9zaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC91c3IvbG9jYWwvYmluL3NoIFxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiZWxpZiBbIC14IC91c3IvYmluL3NoIF07IHRoZW5cXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGV4ZWMgL3Vzci9iaW4vc2ggXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJlbGlmIFsgLXggL2Jpbi9zaCBdOyB0aGVuXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGVjIC9iaW4vc2ggXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJlbGlmIFsgLXggL2J1c3lib3gvc2ggXTsgdGhlblxcblwiO1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiXFx0ZXhlYyAvYnVzeWJveC9zaCBcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImVsc2VcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIlxcdGVjaG8gc2hlbGwgbm90IGZvdW5kXFxuXCI7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gXCJcXHRleGl0IDFcXG5cIjtcbiAgICAgICAgICAgIGRvY2tlckNtZCArPSBcImZpXFxuXFxcIlwiO1xuXG4gICAgICAgICAgICBjb25zdCB7c3Rkb3V0OiBjb250YWluZXJJZH0gPSBhd2FpdCBVdGlscy5iYXNoKGRvY2tlckNtZCwgY3dkLCBleHBhbmRlZCk7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXJJZCA9IGNvbnRhaW5lcklkO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyc1RvQ2xlYW4ucHVzaCh0aGlzLl9jb250YWluZXJJZCk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLmNvcHlDYWNoZUluKHdyaXRlU3RyZWFtcywgZXhwYW5kZWQpO1xuICAgICAgICBhd2FpdCB0aGlzLmNvcHlBcnRpZmFjdHNJbih3cml0ZVN0cmVhbXMpO1xuXG4gICAgICAgIGxldCBjbWQgPSBcInNldCAtZW8gcGlwZWZhaWxcXG5cIjtcbiAgICAgICAgY21kICs9IFwiZXhlYyAwPCAvZGV2L251bGxcXG5cIjtcblxuICAgICAgICBpZiAoIXRoaXMuaW1hZ2VOYW1lICYmIHRoaXMuYXJndi5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgY21kICs9IGBjZCAke3N0YXRlRGlyfS9idWlsZHMvJHtzYWZlSm9iTmFtZX0vXFxuYDtcbiAgICAgICAgfVxuICAgICAgICBjbWQgKz0gdGhpcy5nZW5lcmF0ZVNjcmlwdENvbW1hbmRzKHNjcmlwdHMpO1xuXG4gICAgICAgIGNtZCArPSBcImV4aXQgMFxcblwiO1xuXG4gICAgICAgIGF3YWl0IGZzLm91dHB1dEZpbGUoYCR7Y3dkfS8ke3N0YXRlRGlyfS9zY3JpcHRzLyR7c2FmZUpvYk5hbWV9YCwgY21kLCBcInV0Zi04XCIpO1xuICAgICAgICBhd2FpdCBmcy5jaG1vZChgJHtjd2R9LyR7c3RhdGVEaXJ9L3NjcmlwdHMvJHtzYWZlSm9iTmFtZX1gLCBcIjA3NTVcIik7XG5cbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VOYW1lKSB7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJjcFwiLCBgJHtzdGF0ZURpcn0vc2NyaXB0cy8ke3NhZmVKb2JOYW1lfWAsIGAke3RoaXMuX2NvbnRhaW5lcklkfTovZ2NsLWNtZGBdLCBjd2QpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmltYWdlRW50cnlwb2ludCAmJiB0aGlzLmltYWdlRW50cnlwb2ludFswXSAhPSBcIlwiKSB7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJjcFwiLCBgJHtzdGF0ZURpcn0vc2NyaXB0cy9pbWFnZV9lbnRyeS8ke3NhZmVKb2JOYW1lfWAsIGAke3RoaXMuX2NvbnRhaW5lcklkfTovZ2NsLWVudHJ5YF0sIGN3ZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjcCA9IGV4ZWNhKHRoaXMuX2NvbnRhaW5lcklkID8gYGRvY2tlciBzdGFydCAtLWF0dGFjaCAtaSAke3RoaXMuX2NvbnRhaW5lcklkfWAgOiBcImJhc2hcIiwge1xuICAgICAgICAgICAgY3dkLFxuICAgICAgICAgICAgc2hlbGw6IFwiYmFzaFwiLFxuICAgICAgICAgICAgZW52OiBleHBhbmRlZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgb3V0RnVuYyA9IChsaW5lOiBzdHJpbmcsIHN0cmVhbTogKHR4dDogc3RyaW5nKSA9PiB2b2lkLCBjb2xvcml6ZTogKHN0cjogc3RyaW5nKSA9PiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCh3cml0ZVN0cmVhbXMpO1xuICAgICAgICAgICAgc3RyZWFtKGAke3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0gYCk7XG4gICAgICAgICAgICBpZiAoIWxpbmUuc3RhcnRzV2l0aChcIlxcdTAwMWJbMzJtJFwiKSkge1xuICAgICAgICAgICAgICAgIHN0cmVhbShgJHtjb2xvcml6ZShcIj5cIil9IGApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RyZWFtKGAke2xpbmV9XFxuYCk7XG4gICAgICAgICAgICBmcy5hcHBlbmRGaWxlU3luYyhvdXRwdXRGaWxlc1BhdGgsIGAke2xpbmV9XFxuYCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcXVpZXQgPSB0aGlzLmFyZ3YucXVpZXQ7XG4gICAgICAgIGNvbnN0IGV4aXRDb2RlID0gYXdhaXQgbmV3IFByb21pc2U8bnVtYmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXF1aWV0KSB7XG4gICAgICAgICAgICAgICAgY3Auc3Rkb3V0Py5waXBlKHNwbGl0MigpKS5vbihcImRhdGFcIiwgKGU6IHN0cmluZykgPT4gb3V0RnVuYyhlLCB3cml0ZVN0cmVhbXMuc3Rkb3V0LmJpbmQod3JpdGVTdHJlYW1zKSwgKHMpID0+IGNoYWxrYHtncmVlbkJyaWdodCAke3N9fWApKTtcbiAgICAgICAgICAgICAgICBjcC5zdGRlcnI/LnBpcGUoc3BsaXQyKCkpLm9uKFwiZGF0YVwiLCAoZTogc3RyaW5nKSA9PiBvdXRGdW5jKGUsIHdyaXRlU3RyZWFtcy5zdGRlcnIuYmluZCh3cml0ZVN0cmVhbXMpLCAocykgPT4gY2hhbGtge3JlZEJyaWdodCAke3N9fWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZvaWQgY3Aub24oXCJleGl0XCIsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMCkpO1xuICAgICAgICAgICAgdm9pZCBjcC5vbihcImVycm9yXCIsIChlcnIpID0+IHJlamVjdChlcnIpKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaW1hZ2VOYW1lKSB7XG4gICAgICAgICAgICAgICAgY3Auc3RkaW4/LmVuZChcIi9nY2wtY21kXCIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjcC5zdGRpbj8uZW5kKGAuLyR7c3RhdGVEaXJ9L3NjcmlwdHMvJHtzYWZlSm9iTmFtZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5jb3B5Q2FjaGVPdXQod3JpdGVTdHJlYW1zLCBleHBhbmRlZCwgZXhpdENvZGUpO1xuXG4gICAgICAgIGlmIChleGl0Q29kZSA9PSAwIHx8IHRoaXMuYXJ0aWZhY3RzPy53aGVuID09PSBcImFsd2F5c1wiKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvcHlBcnRpZmFjdHNPdXQod3JpdGVTdHJlYW1zLCBleHBhbmRlZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXhpdENvZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBwdWxsSW1hZ2UgKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBpbWFnZVRvUHVsbDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW1wiZG9ja2VyXCIsIFwiaW1hZ2VcIiwgXCJpbnNwZWN0XCIsIGltYWdlVG9QdWxsXSk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgaWYgKGUuc3RkZXJyPy5pbmNsdWRlcyhcIk5vIHN1Y2ggaW1hZ2VcIikgfHwgZS5zdGRlcnI/LmluY2x1ZGVzKFwiZmFpbGVkIHRvIGZpbmQgaW1hZ2VcIikpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJwdWxsXCIsIGltYWdlVG9QdWxsXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IHB1bGxlZH0gJHtpbWFnZVRvUHVsbH0gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGluaXRQcm9kdWNlclJlcG9ydHNEb3RlbnZWYXJpYWJsZXMgKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBleHBhbmRlZDoge1trZXk6IHN0cmluZ106IHN0cmluZ30pIHtcbiAgICAgICAgY29uc3QgY3dkID0gdGhpcy5hcmd2LmN3ZDtcbiAgICAgICAgY29uc3Qgc3RhdGVEaXIgPSB0aGlzLmFyZ3Yuc3RhdGVEaXI7XG4gICAgICAgIGNvbnN0IHByb2R1Y2VycyA9IHRoaXMucHJvZHVjZXJzO1xuICAgICAgICBsZXQgcHJvZHVjZXJSZXBvcnRzRW52cyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHByb2R1Y2VyIG9mIHByb2R1Y2VycyA/PyBbXSkge1xuICAgICAgICAgICAgY29uc3QgcHJvZHVjZXJEb3RlbnYgPSBVdGlscy5leHBhbmRUZXh0KHByb2R1Y2VyLmRvdGVudiwgZXhwYW5kZWQpO1xuICAgICAgICAgICAgaWYgKHByb2R1Y2VyRG90ZW52ID09PSBudWxsKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3Qgc2FmZVByb2R1Y2VyTmFtZSA9IFV0aWxzLnNhZmVEb2NrZXJTdHJpbmcocHJvZHVjZXIubmFtZSk7XG4gICAgICAgICAgICBjb25zdCBkb3RlbnZGb2xkZXIgPSBgJHtjd2R9LyR7c3RhdGVEaXJ9L2FydGlmYWN0cy8ke3NhZmVQcm9kdWNlck5hbWV9Ly5naXRsYWItY2ktcmVwb3J0cy9kb3RlbnYvYDtcbiAgICAgICAgICAgIGlmIChhd2FpdCBmcy5wYXRoRXhpc3RzKGRvdGVudkZvbGRlcikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkb3RlbnZGaWxlcyA9IChhd2FpdCBVdGlscy5zcGF3bihbXCJmaW5kXCIsIFwiLlwiLCBcIi10eXBlXCIsIFwiZlwiXSwgZG90ZW52Rm9sZGVyKSkuc3Rkb3V0LnNwbGl0KFwiXFxuXCIpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZG90ZW52RmlsZSBvZiBkb3RlbnZGaWxlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZG90ZW52RmlsZSA9PSBcIlwiKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvZHVjZXJSZXBvcnRFbnYgPSBkb3RlbnYucGFyc2UoYXdhaXQgZnMucmVhZEZpbGUoYCR7ZG90ZW52Rm9sZGVyfS8ke2RvdGVudkZpbGV9YCkpO1xuICAgICAgICAgICAgICAgICAgICBwcm9kdWNlclJlcG9ydHNFbnZzID0gey4uLnByb2R1Y2VyUmVwb3J0c0VudnMsIC4uLnByb2R1Y2VyUmVwb3J0RW52fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHt5ZWxsb3cgcmVwb3J0cy5kb3RlbnYgcHJvZHVjZWQgYnkgJyR7cHJvZHVjZXIubmFtZX0nIGNvdWxkIG5vdCBiZSBmb3VuZH1cXG5gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9kdWNlclJlcG9ydHNFbnZzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29weUNhY2hlSW4gKHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBleHBhbmRlZDoge1trZXk6IHN0cmluZ106IHN0cmluZ30pIHtcbiAgICAgICAgaWYgKHRoaXMuYXJndi5tb3VudENhY2hlICYmIHRoaXMuaW1hZ2VOYW1lKSByZXR1cm47XG4gICAgICAgIGlmICgoIXRoaXMuaW1hZ2VOYW1lICYmICF0aGlzLmFyZ3Yuc2hlbGxJc29sYXRpb24pIHx8IHRoaXMuY2FjaGUubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgY3dkID0gdGhpcy5hcmd2LmN3ZDtcbiAgICAgICAgY29uc3Qgc3RhdGVEaXIgPSB0aGlzLmFyZ3Yuc3RhdGVEaXI7XG5cbiAgICAgICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2FjaGUpIHtcbiAgICAgICAgICAgIGlmICghW1wicHVsbFwiLCBcInB1bGwtcHVzaFwiXS5pbmNsdWRlcyhjLnBvbGljeSkpIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgICAgICBjb25zdCBjYWNoZU5hbWUgPSBhd2FpdCB0aGlzLmdldFVuaXF1ZUNhY2hlTmFtZShjd2QsIGV4cGFuZGVkLCBjLmtleSk7XG4gICAgICAgICAgICBjb25zdCBjYWNoZUZvbGRlciA9IGAke2N3ZH0vJHtzdGF0ZURpcn0vY2FjaGUvJHtjYWNoZU5hbWV9YDtcbiAgICAgICAgICAgIGlmICghYXdhaXQgZnMucGF0aEV4aXN0cyhjYWNoZUZvbGRlcikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXdhaXQgTXV0ZXguZXhjbHVzaXZlKGNhY2hlTmFtZSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY29weUluKGNhY2hlRm9sZGVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgaW1wb3J0ZWQgY2FjaGUgJyR7Y2FjaGVOYW1lfSd9IGluIHttYWdlbnRhICR7cHJldHR5SHJ0aW1lKGVuZFRpbWUpfX1cXG5gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29weUFydGlmYWN0c0luICh3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcykge1xuICAgICAgICBpZiAoKCF0aGlzLmltYWdlTmFtZSAmJiAhdGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uKSB8fCAodGhpcy5wcm9kdWNlcnMgPz8gW10pLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGN3ZCA9IHRoaXMuYXJndi5jd2Q7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gdGhpcy5hcmd2LnN0YXRlRGlyO1xuICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9kdWNlciBvZiB0aGlzLnByb2R1Y2VycyA/PyBbXSkge1xuICAgICAgICAgICAgY29uc3QgcHJvZHVjZXJTYWZlTmFtZSA9IFV0aWxzLnNhZmVEb2NrZXJTdHJpbmcocHJvZHVjZXIubmFtZSk7XG4gICAgICAgICAgICBjb25zdCBhcnRpZmFjdEZvbGRlciA9IGAke2N3ZH0vJHtzdGF0ZURpcn0vYXJ0aWZhY3RzLyR7cHJvZHVjZXJTYWZlTmFtZX1gO1xuICAgICAgICAgICAgaWYgKCFhd2FpdCBmcy5wYXRoRXhpc3RzKGFydGlmYWN0Rm9sZGVyKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGZzLm1rZGlycChhcnRpZmFjdEZvbGRlcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJlYWRkaXIgPSBhd2FpdCBmcy5yZWFkZGlyKGFydGlmYWN0Rm9sZGVyKTtcbiAgICAgICAgICAgIGlmIChyZWFkZGlyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHt5ZWxsb3cgYXJ0aWZhY3RzIGZyb20ge2JsdWVCcmlnaHQgJHtwcm9kdWNlclNhZmVOYW1lfX0gd2FzIGVtcHR5fVxcbmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuY29weUluKGFydGlmYWN0Rm9sZGVyKSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IGltcG9ydGVkIGFydGlmYWN0c30gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgIH1cblxuICAgIGNvcHlJbiAoc291cmNlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc2FmZUpvYk5hbWUgPSB0aGlzLnNhZmVKb2JOYW1lO1xuICAgICAgICBpZiAoIXRoaXMuaW1hZ2VOYW1lICYmIHRoaXMuYXJndi5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIFV0aWxzLnNwYXduKFtcInJzeW5jXCIsIFwiLWFcIiwgYCR7c291cmNlfS8uYCwgYCR7dGhpcy5hcmd2LmN3ZH0vJHt0aGlzLmFyZ3Yuc3RhdGVEaXJ9L2J1aWxkcy8ke3NhZmVKb2JOYW1lfWBdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gVXRpbHMuc3Bhd24oW1wiZG9ja2VyXCIsIFwiY3BcIiwgYCR7c291cmNlfS8uYCwgYCR7dGhpcy5fY29udGFpbmVySWR9Oi9nY2wtYnVpbGRzYF0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29weUNhY2hlT3V0ICh3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgZXhwYW5kZWQ6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9LCBleGl0Q29kZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLmFyZ3YubW91bnRDYWNoZSAmJiB0aGlzLmltYWdlTmFtZSkgcmV0dXJuO1xuICAgICAgICBpZiAoKCF0aGlzLmltYWdlTmFtZSAmJiAhdGhpcy5hcmd2LnNoZWxsSXNvbGF0aW9uKSB8fCB0aGlzLmNhY2hlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGN3ZCA9IHRoaXMuYXJndi5jd2Q7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gdGhpcy5hcmd2LnN0YXRlRGlyO1xuXG4gICAgICAgIGxldCB0aW1lLCBlbmRUaW1lO1xuICAgICAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jYWNoZSkge1xuICAgICAgICAgICAgaWYgKCFbXCJwdXNoXCIsIFwicHVsbC1wdXNoXCJdLmluY2x1ZGVzKGMucG9saWN5KSkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKFwib25fc3VjY2Vzc1wiID09PSBjLndoZW4gJiYgZXhpdENvZGUgIT0gMCkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKFwib25fZmFpbHVyZVwiID09PSBjLndoZW4gJiYgZXhpdENvZGUgPT09IDApIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlTmFtZSA9IGF3YWl0IHRoaXMuZ2V0VW5pcXVlQ2FjaGVOYW1lKGN3ZCwgZXhwYW5kZWQsIGMua2V5KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGF0aCBvZiBjLnBhdGhzKSB7XG4gICAgICAgICAgICAgICAgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwYW5kZWRQYXRoID0gVXRpbHMuZXhwYW5kVGV4dChwYXRoLCBleHBhbmRlZCkucmVwbGFjZShgJHtleHBhbmRlZC5DSV9QUk9KRUNUX0RJUn0vYCwgXCJcIik7XG4gICAgICAgICAgICAgICAgbGV0IGNtZCA9IFwic2hvcHQgLXMgZ2xvYnN0YXIgbnVsbGdsb2IgZG90Z2xvYlxcblwiO1xuICAgICAgICAgICAgICAgIGNtZCArPSBgbWtkaXIgLXAgLi4vLi4vY2FjaGUvJHtjYWNoZU5hbWV9XFxuYDtcbiAgICAgICAgICAgICAgICBjbWQgKz0gYHJzeW5jIC1SYSAke2V4cGFuZGVkUGF0aH0gLi4vLi4vY2FjaGUvJHtjYWNoZU5hbWV9Ly4gfHwgdHJ1ZVxcbmA7XG5cbiAgICAgICAgICAgICAgICBhd2FpdCBNdXRleC5leGNsdXNpdmUoY2FjaGVOYW1lLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY29weU91dChjbWQsIHN0YXRlRGlyLCBcImNhY2hlXCIsIFtdKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCByZWFkZGlyID0gYXdhaXQgZnMucmVhZGRpcihgJHt0aGlzLmFyZ3YuY3dkfS8ke3N0YXRlRGlyfS9jYWNoZS8ke2NhY2hlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICBpZiAocmVhZGRpci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge3llbGxvdyAhISBubyBjYWNoZSB3YXMgY29waWVkIGZvciAke3BhdGh9ICEhfVxcbmApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IGV4cG9ydGVkIGNhY2hlICR7ZXhwYW5kZWRQYXRofSAnJHtjYWNoZU5hbWV9J30gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29weUFydGlmYWN0c091dCAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIGV4cGFuZGVkOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAgICAgICBjb25zdCBzYWZlSm9iTmFtZSA9IHRoaXMuc2FmZUpvYk5hbWU7XG4gICAgICAgIGNvbnN0IGN3ZCA9IHRoaXMuYXJndi5jd2Q7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gdGhpcy5hcmd2LnN0YXRlRGlyO1xuICAgICAgICBjb25zdCBhcnRpZmFjdHNQYXRoID0gIXRoaXMuYXJndi5zaGVsbElzb2xhdGlvbiAmJiAhdGhpcy5pbWFnZU5hbWUgPyBgJHtzdGF0ZURpcn0vYXJ0aWZhY3RzYCA6IFwiLi4vLi4vYXJ0aWZhY3RzXCI7XG5cbiAgICAgICAgaWYgKCF0aGlzLmFydGlmYWN0cykgcmV0dXJuO1xuICAgICAgICBpZiAoKHRoaXMuYXJ0aWZhY3RzLnBhdGhzPy5sZW5ndGggPz8gMCkgPT09IDAgJiYgdGhpcy5hcnRpZmFjdHMucmVwb3J0cz8uZG90ZW52ID09IG51bGwpIHJldHVybjtcblxuICAgICAgICBsZXQgdGltZSwgZW5kVGltZTtcbiAgICAgICAgbGV0IGNwQ21kID0gXCJzaG9wdCAtcyBnbG9ic3RhciBudWxsZ2xvYiBkb3RnbG9iXFxuXCI7XG4gICAgICAgIGNwQ21kICs9IGBta2RpciAtcCAke2FydGlmYWN0c1BhdGh9LyR7c2FmZUpvYk5hbWV9XFxuYDtcbiAgICAgICAgY3BDbWQgKz0gXCJyc3luYyAtLWV4Y2x1ZGUgJy5naXRsYWItY2ktbG9jYWwvKionIC1SYSBcIjtcbiAgICAgICAgZm9yIChjb25zdCBhcnRpZmFjdEV4Y2x1ZGVQYXRoIG9mIHRoaXMuYXJ0aWZhY3RzPy5leGNsdWRlID8/IFtdKSB7XG4gICAgICAgICAgICBjb25zdCBleHBhbmRlZFBhdGggPSBVdGlscy5leHBhbmRUZXh0KGFydGlmYWN0RXhjbHVkZVBhdGgsIGV4cGFuZGVkKS5yZXBsYWNlKGAke2V4cGFuZGVkLkNJX1BST0pFQ1RfRElSfS9gLCBcIlwiKTtcbiAgICAgICAgICAgIGNwQ21kICs9IGAtLWV4Y2x1ZGUgJyR7ZXhwYW5kZWRQYXRofScgYDtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGFydGlmYWN0UGF0aCBvZiB0aGlzLmFydGlmYWN0cz8ucGF0aHMgPz8gW10pIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkUGF0aCA9IFV0aWxzLmV4cGFuZFRleHQoYXJ0aWZhY3RQYXRoLCBleHBhbmRlZCkucmVwbGFjZShgJHtleHBhbmRlZC5DSV9QUk9KRUNUX0RJUn0vYCwgXCJcIik7XG4gICAgICAgICAgICBjcENtZCArPSBgJHtleHBhbmRlZFBhdGh9IGA7XG4gICAgICAgIH1cbiAgICAgICAgY3BDbWQgKz0gYCR7YXJ0aWZhY3RzUGF0aH0vJHtzYWZlSm9iTmFtZX0vLiB8fCB0cnVlXFxuYDtcbiAgICAgICAgY29uc3QgcmVwb3J0RG90ZW52ID0gVXRpbHMuZXhwYW5kVGV4dCh0aGlzLmFydGlmYWN0cy5yZXBvcnRzPy5kb3RlbnYgPz8gbnVsbCwgZXhwYW5kZWQpO1xuICAgICAgICBpZiAocmVwb3J0RG90ZW52ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNwQ21kICs9IGBta2RpciAtcCAke2FydGlmYWN0c1BhdGh9LyR7c2FmZUpvYk5hbWV9Ly5naXRsYWItY2ktcmVwb3J0cy9kb3RlbnZcXG5gO1xuICAgICAgICAgICAgY3BDbWQgKz0gYGlmIFsgLWYgJHtyZXBvcnREb3RlbnZ9IF07IHRoZW5cXG5gO1xuICAgICAgICAgICAgY3BDbWQgKz0gYCAgcnN5bmMgLVJhICR7cmVwb3J0RG90ZW52fSAke2FydGlmYWN0c1BhdGh9LyR7c2FmZUpvYk5hbWV9Ly5naXRsYWItY2ktcmVwb3J0cy9kb3RlbnYvLlxcbmA7XG4gICAgICAgICAgICBjcENtZCArPSBcImZpXFxuXCI7XG4gICAgICAgIH1cblxuICAgICAgICB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgY29uc3QgZG9ja2VyQ21kRXh0cmFzID0gdGhpcy5hcmd2Lm1vdW50Q2FjaGUgPyBhd2FpdCB0aGlzLm1vdW50Q2FjaGVDbWQod3JpdGVTdHJlYW1zLCBleHBhbmRlZCkgOiBbXTtcbiAgICAgICAgYXdhaXQgdGhpcy5jb3B5T3V0KGNwQ21kLCBzdGF0ZURpciwgXCJhcnRpZmFjdHNcIiwgZG9ja2VyQ21kRXh0cmFzKTtcbiAgICAgICAgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuXG4gICAgICAgIGlmIChyZXBvcnREb3RlbnYgIT0gbnVsbCAmJiAhYXdhaXQgZnMucGF0aEV4aXN0cyhgJHtjd2R9LyR7c3RhdGVEaXJ9L2FydGlmYWN0cy8ke3NhZmVKb2JOYW1lfS8uZ2l0bGFiLWNpLXJlcG9ydHMvZG90ZW52LyR7cmVwb3J0RG90ZW52fWApKSB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYCR7dGhpcy5mb3JtYXR0ZWRKb2JOYW1lfSB7eWVsbG93IGFydGlmYWN0IHJlcG9ydHMgZG90ZW52ICcke3JlcG9ydERvdGVudn0nIGNvdWxkIG5vdCBiZSBmb3VuZH1cXG5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlYWRkaXIgPSBhd2FpdCBmcy5yZWFkZGlyKGAke2N3ZH0vJHtzdGF0ZURpcn0vYXJ0aWZhY3RzLyR7c2FmZUpvYk5hbWV9YCk7XG4gICAgICAgIGlmIChyZWFkZGlyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge3llbGxvdyAhISBubyBhcnRpZmFjdHMgd2FzIGNvcGllZCAhIX1cXG5gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IGV4cG9ydGVkIGFydGlmYWN0c30gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYXJ0aWZhY3RzVG9Tb3VyY2UgJiYgKHRoaXMuYXJndi5zaGVsbElzb2xhdGlvbiB8fCB0aGlzLmltYWdlTmFtZSkpIHtcbiAgICAgICAgICAgIHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW1wicnN5bmNcIiwgXCItLWV4Y2x1ZGU9Ly5naXRsYWItY2ktcmVwb3J0cy9cIiwgXCItYVwiLCBgJHtjd2R9LyR7c3RhdGVEaXJ9L2FydGlmYWN0cy8ke3NhZmVKb2JOYW1lfS8uYCwgY3dkXSk7XG4gICAgICAgICAgICBpZiAocmVwb3J0RG90ZW52ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihbXCJyc3luY1wiLCBcIi1hXCIsIGAke2N3ZH0vJHtzdGF0ZURpcn0vYXJ0aWZhY3RzLyR7c2FmZUpvYk5hbWV9Ly5naXRsYWItY2ktcmVwb3J0cy9kb3RlbnYvLmAsIGN3ZF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgY29waWVkIGFydGlmYWN0cyB0byBjd2R9IGluIHttYWdlbnRhICR7cHJldHR5SHJ0aW1lKGVuZFRpbWUpfX1cXG5gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY29weU91dCAoY21kOiBzdHJpbmcsIHN0YXRlRGlyOiBzdHJpbmcsIHR5cGU6IFwiYXJ0aWZhY3RzXCIgfCBcImNhY2hlXCIsIGRvY2tlckNtZEV4dHJhczogc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3Qgc2FmZUpvYk5hbWUgPSB0aGlzLnNhZmVKb2JOYW1lO1xuICAgICAgICBjb25zdCBidWlsZFZvbHVtZU5hbWUgPSB0aGlzLmJ1aWxkVm9sdW1lTmFtZTtcbiAgICAgICAgY29uc3QgY3dkID0gdGhpcy5hcmd2LmN3ZDtcblxuICAgICAgICBhd2FpdCBmcy5ta2RpcnAoYCR7Y3dkfS8ke3N0YXRlRGlyfS8ke3R5cGV9YCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCB7c3Rkb3V0OiBjb250YWluZXJJZH0gPSBhd2FpdCBVdGlscy5iYXNoKGBkb2NrZXIgY3JlYXRlIC1pICR7ZG9ja2VyQ21kRXh0cmFzLmpvaW4oXCIgXCIpfSAtdiAke2J1aWxkVm9sdW1lTmFtZX06L2djbC1idWlsZHMvIC13IC9nY2wtYnVpbGRzIGRvY2tlci5pby9maXJlY293L2dpdGxhYi1jaS1sb2NhbC11dGlsIGJhc2ggLWMgXCIke2NtZH1cImAsIGN3ZCk7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXJzVG9DbGVhbi5wdXNoKGNvbnRhaW5lcklkKTtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcInN0YXJ0XCIsIGNvbnRhaW5lcklkLCBcIi0tYXR0YWNoXCJdKTtcbiAgICAgICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcImNwXCIsIGAke2NvbnRhaW5lcklkfTovJHt0eXBlfS8uYCwgYCR7c3RhdGVEaXJ9LyR7dHlwZX0vLmBdLCBjd2QpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYXJndi5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuYmFzaChgYmFzaCAtZW8gcGlwZWZhaWwgLWMgXCIke2NtZH1cImAsIGAke2N3ZH0vJHtzdGF0ZURpcn0vYnVpbGRzLyR7c2FmZUpvYk5hbWV9YCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuYXJndi5zaGVsbElzb2xhdGlvbikge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuYmFzaChgYmFzaCAtZW8gcGlwZWZhaWwgLWMgXCIke2NtZH1cImAsIGAke2N3ZH1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVmcmVzaExvbmdSdW5uaW5nU2lsZW50VGltZW91dCAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2xvbmdSdW5uaW5nU2lsZW50VGltZW91dCk7XG4gICAgICAgIHRoaXMuX2xvbmdSdW5uaW5nU2lsZW50VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge2dyZXkgPiBzdGlsbCBydW5uaW5nLi4ufVxcbmApO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG4gICAgICAgIH0sIDEwMDAwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEV4aXRlZFN0cmluZyAoY29kZTogbnVtYmVyLCB3YXJuaW5nID0gZmFsc2UsIHByZXBlbmRTdHJpbmcgPSBcIlwiKSB7XG4gICAgICAgIGNvbnN0IGZpbmlzaGVkU3RyID0gdGhpcy5nZXRGaW5pc2hlZFN0cmluZygpO1xuICAgICAgICBpZiAod2FybmluZykge1xuICAgICAgICAgICAgcmV0dXJuIGNoYWxrYCR7ZmluaXNoZWRTdHJ9IHtibGFjay5iZ1llbGxvd0JyaWdodCAgV0FSTiAke2NvZGUudG9TdHJpbmcoKX0gfSR7cHJlcGVuZFN0cmluZ31gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNoYWxrYCR7ZmluaXNoZWRTdHJ9IHtibGFjay5iZ1JlZCAgRkFJTCAke2NvZGUudG9TdHJpbmcoKX0gfSAke3ByZXBlbmRTdHJpbmd9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyRW5kVGltZSAoKSB7XG4gICAgICAgIHRoaXMuX2VuZFRpbWUgPSB0aGlzLl9lbmRUaW1lID8/IHByb2Nlc3MuaHJ0aW1lKHRoaXMuX3N0YXJ0VGltZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGaW5pc2hlZFN0cmluZyAoKSB7XG4gICAgICAgIHRoaXMuX2VuZFRpbWUgPSB0aGlzLl9lbmRUaW1lID8/IHByb2Nlc3MuaHJ0aW1lKHRoaXMuX3N0YXJ0VGltZSk7XG4gICAgICAgIHJldHVybiBjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge21hZ2VudGFCcmlnaHQgZmluaXNoZWR9IGluIHttYWdlbnRhICR7dGhpcy5wcmV0dHlEdXJhdGlvbn19YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNyZWF0ZURvY2tlck5ldHdvcmsgKG5ldHdvcmtOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qge3N0ZG91dDogbmV0d29ya0lkfSA9IGF3YWl0IFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcIm5ldHdvcmtcIiwgXCJjcmVhdGVcIiwgYCR7bmV0d29ya05hbWV9YF0pO1xuICAgICAgICB0aGlzLl9zZXJ2aWNlTmV0d29ya0lkID0gbmV0d29ya0lkO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgc3RhcnRTZXJ2aWNlICh3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgZXhwYW5kZWQ6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9LCBzZXJ2aWNlOiBTZXJ2aWNlLCBzZXJ2aWNlSW5kZXg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBjd2QgPSB0aGlzLmFyZ3YuY3dkO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IHRoaXMuYXJndi5zdGF0ZURpcjtcbiAgICAgICAgY29uc3Qgc2FmZUpvYk5hbWUgPSB0aGlzLnNhZmVKb2JOYW1lO1xuICAgICAgICBsZXQgZG9ja2VyQ21kID0gYGRvY2tlciBjcmVhdGUgLS1pbnRlcmFjdGl2ZSAtLW5ldHdvcmsgZ2l0bGFiLWNpLWxvY2FsLSR7dGhpcy5qb2JJZH0gYDtcbiAgICAgICAgdGhpcy5yZWZyZXNoTG9uZ1J1bm5pbmdTaWxlbnRUaW1lb3V0KHdyaXRlU3RyZWFtcyk7XG5cbiAgICAgICAgaWYgKHRoaXMuYXJndi51bWFzaykge1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiLS11c2VyIDA6MCBcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFyZ3YucHJpdmlsZWdlZCkge1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiLS1wcml2aWxlZ2VkIFwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYXJndi51bGltaXQgPiAwKSB7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdWxpbWl0IG5vZmlsZT0ke3RoaXMuYXJndi51bGltaXR9IGA7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHZvbHVtZSBvZiB0aGlzLmFyZ3Yudm9sdW1lKSB7XG4gICAgICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdm9sdW1lICR7dm9sdW1lfSBgO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VydmljZUFsaWFzID0gc2VydmljZS5hbGlhcztcbiAgICAgICAgY29uc3Qgc2VydmljZU5hbWUgPSBzZXJ2aWNlLm5hbWU7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VOYW1lV2l0aG91dFZlcnNpb24gPSBzZXJ2aWNlTmFtZS5yZXBsYWNlKC8oLiopKDouKikvLCBcIiQxXCIpO1xuICAgICAgICBjb25zdCBhbGlhc2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIGFsaWFzZXMuYWRkKHNlcnZpY2VOYW1lV2l0aG91dFZlcnNpb24ucmVwbGFjZUFsbChcIi9cIiwgXCItXCIpKTtcbiAgICAgICAgYWxpYXNlcy5hZGQoc2VydmljZU5hbWVXaXRob3V0VmVyc2lvbi5yZXBsYWNlQWxsKFwiL1wiLCBcIl9fXCIpKTtcbiAgICAgICAgaWYgKHNlcnZpY2VBbGlhcykge1xuICAgICAgICAgICAgYWxpYXNlcy5hZGQoc2VydmljZUFsaWFzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgYWxpYXMgb2YgYWxpYXNlcykge1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtLW5ldHdvcmstYWxpYXM9JHthbGlhc30gYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGV4cGFuZGVkKSkge1xuICAgICAgICAgICAgZG9ja2VyQ21kICs9IGAtZSAke2tleX0gYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlcnZpY2VFbnRyeXBvaW50ID0gc2VydmljZS5lbnRyeXBvaW50O1xuICAgICAgICBjb25zdCBzZXJ2aWNlRW50cnlwb2ludEZpbGUgPSBgJHtjd2R9LyR7c3RhdGVEaXJ9L3NjcmlwdHMvc2VydmljZXNfZW50cnkvJHtzYWZlSm9iTmFtZX1fJHtzZXJ2aWNlTmFtZVdpdGhvdXRWZXJzaW9ufV8ke3NlcnZpY2VJbmRleH1gO1xuICAgICAgICBpZiAoc2VydmljZUVudHJ5cG9pbnQpIHtcbiAgICAgICAgICAgIGlmIChzZXJ2aWNlRW50cnlwb2ludFswXSA9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgZG9ja2VyQ21kICs9IFwiLS1lbnRyeXBvaW50ICcnIFwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5vdXRwdXRGaWxlKHNlcnZpY2VFbnRyeXBvaW50RmlsZSwgXCIjIS9iaW4vc2hcXG5cIik7XG4gICAgICAgICAgICAgICAgYXdhaXQgZnMuYXBwZW5kRmlsZShzZXJ2aWNlRW50cnlwb2ludEZpbGUsIGAke3NlcnZpY2VFbnRyeXBvaW50LmpvaW4oXCIgXCIpfWApO1xuICAgICAgICAgICAgICAgIGF3YWl0IGZzLmFwcGVuZEZpbGUoc2VydmljZUVudHJ5cG9pbnRGaWxlLCBcIiBcXFwiJEBcXFwiXFxuXCIpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGZzLmNobW9kKHNlcnZpY2VFbnRyeXBvaW50RmlsZSwgXCIwNzU1XCIpO1xuICAgICAgICAgICAgICAgIGRvY2tlckNtZCArPSBcIi0tZW50cnlwb2ludCAnL2djbC1lbnRyeScgXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZG9ja2VyQ21kICs9IGAtLXZvbHVtZSAke3RoaXMuYnVpbGRWb2x1bWVOYW1lfTovZ2NsLWJ1aWxkcyBgO1xuICAgICAgICBkb2NrZXJDbWQgKz0gYC0tdm9sdW1lICR7dGhpcy50bXBWb2x1bWVOYW1lfToke3RoaXMuZmlsZVZhcmlhYmxlc0Rpcn0gYDtcbiAgICAgICAgZG9ja2VyQ21kICs9IGAke3NlcnZpY2VOYW1lfSBgO1xuXG4gICAgICAgIChzZXJ2aWNlLmNvbW1hbmQgPz8gW10pLmZvckVhY2goKGUpID0+IGRvY2tlckNtZCArPSBgXCIke2V9XCIgYCk7XG5cbiAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG5cbiAgICAgICAgY29uc3Qge3N0ZG91dDogY29udGFpbmVySWR9ID0gYXdhaXQgVXRpbHMuYmFzaChkb2NrZXJDbWQsIGN3ZCwgZXhwYW5kZWQpO1xuICAgICAgICB0aGlzLl9jb250YWluZXJzVG9DbGVhbi5wdXNoKGNvbnRhaW5lcklkKTtcblxuICAgICAgICAvLyBDb3B5IGRvY2tlciBlbnRyeXBvaW50IGlmIHNwZWNpZmllZCBmb3Igc2VydmljZVxuICAgICAgICBpZiAoc2VydmljZUVudHJ5cG9pbnQgJiYgc2VydmljZUVudHJ5cG9pbnRbMF0gIT0gXCJcIikge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3Bhd24oW1wiZG9ja2VyXCIsIFwiY3BcIiwgc2VydmljZUVudHJ5cG9pbnRGaWxlLCBgJHtjb250YWluZXJJZH06L2djbC1lbnRyeWBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcInN0YXJ0XCIsIGAke2NvbnRhaW5lcklkfWBdKTtcblxuICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUodGltZSk7XG4gICAgICAgIHdyaXRlU3RyZWFtcy5zdGRvdXQoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHttYWdlbnRhQnJpZ2h0IHN0YXJ0ZWQgc2VydmljZSBpbWFnZTogJHtzZXJ2aWNlTmFtZX0gd2l0aCBhbGlhc2VzOiAke0FycmF5LmZyb20oYWxpYXNlcykuam9pbihcIiwgXCIpfX0gaW4ge21hZ2VudGEgJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fVxcbmApO1xuXG4gICAgICAgIHJldHVybiBjb250YWluZXJJZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHNlcnZpY2VIZWFsdGhDaGVjayAod3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIHNlcnZpY2U6IFNlcnZpY2UsIHNlcnZpY2VJbmRleDogbnVtYmVyLCBzZXJ2aWNlQ29udGFuZXJMb2dGaWxlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc2VydmljZUFsaWFzID0gc2VydmljZS5hbGlhcztcbiAgICAgICAgY29uc3Qgc2VydmljZU5hbWUgPSBzZXJ2aWNlLm5hbWU7XG5cbiAgICAgICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBVdGlscy5zcGF3bihbXCJkb2NrZXJcIiwgXCJpbWFnZVwiLCBcImluc3BlY3RcIiwgc2VydmljZU5hbWVdKTtcbiAgICAgICAgY29uc3QgaW1hZ2VJbnNwZWN0ID0gSlNPTi5wYXJzZShzdGRvdXQpO1xuXG4gICAgICAgIC8vIENvcGllZCBmcm9tIHRoZSBzdGFydFNlcnZpY2UgYmxvY2suIEltcG9ydGFudCB0aGluZyBpcyB0aGF0IHRoZSBhbGlhc2VzIG1hdGNoXG4gICAgICAgIGNvbnN0IHNlcnZpY2VOYW1lV2l0aG91dFZlcnNpb24gPSBzZXJ2aWNlTmFtZS5yZXBsYWNlKC8oLiopKDouKikvLCBcIiQxXCIpO1xuICAgICAgICBjb25zdCBhbGlhc2VzID0gW3NlcnZpY2VOYW1lV2l0aG91dFZlcnNpb24ucmVwbGFjZUFsbChcIi9cIiwgXCItXCIpLCBzZXJ2aWNlTmFtZVdpdGhvdXRWZXJzaW9uLnJlcGxhY2VBbGwoXCIvXCIsIFwiX19cIildO1xuICAgICAgICBpZiAoc2VydmljZUFsaWFzKSB7XG4gICAgICAgICAgICBhbGlhc2VzLnB1c2goc2VydmljZUFsaWFzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuaXF1ZUFsaWFzID0gYWxpYXNlc1thbGlhc2VzLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIGlmICgoaW1hZ2VJbnNwZWN0WzBdPy5Db25maWc/LkV4cG9zZWRQb3J0cyA/PyBudWxsKSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtgJHt0aGlzLmZvcm1hdHRlZEpvYk5hbWV9IHt5ZWxsb3cgQ291bGQgbm90IGZpbmQgZXhwb3NlZCB0Y3AgcG9ydHMgJHtzZXJ2aWNlTmFtZX19XFxuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHBvcnQgZGVmaW5lZCBpbiB0aGUgaW1hZ2UsIGFuZCB0cnkgdG8gY29ubmVjdCB0byB0aGUgYWxpYXNcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYW55KE9iamVjdC5rZXlzKGltYWdlSW5zcGVjdFswXS5Db25maWcuRXhwb3NlZFBvcnRzKS5tYXAoKHBvcnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXBvcnQuZW5kc1dpdGgoXCIvdGNwXCIpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgY29uc3QgcG9ydE51bSA9IHBhcnNlSW50KHBvcnQucmVwbGFjZShcIi90Y3BcIiwgXCJcIikpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwYXduQ21kID0gW1wiZG9ja2VyXCIsIFwicnVuXCIsIFwiLS1ybVwiLCBgLS1uYW1lPWdjbC13YWl0LWZvci1pdC0ke3RoaXMuam9iSWR9LSR7c2VydmljZUluZGV4fS0ke3BvcnROdW19YCwgXCItLW5ldHdvcmtcIiwgYGdpdGxhYi1jaS1sb2NhbC0ke3RoaXMuam9iSWR9YCwgXCJ3aWxsd2lsbC93YWl0LWZvci1pdFwiLCBgJHt1bmlxdWVBbGlhc306JHtwb3J0TnVtfWAsIFwiLXRcIiwgXCIzMFwiXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRpbHMuc3Bhd24oc3Bhd25DbWQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge2dyZWVuQnJpZ2h0IHNlcnZpY2UgaW1hZ2U6ICR7c2VydmljZU5hbWV9IGhlYWx0aGNoZWNrIHBhc3NlZCBpbiB7Z3JlZW4gJHtwcmV0dHlIcnRpbWUoZW5kVGltZSl9fX1cXG5gKTtcbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgQWdncmVnYXRlRXJyb3IpKSB0aHJvdyBlO1xuICAgICAgICAgICAgZS5lcnJvcnMuZm9yRWFjaCgoc2luZ2xlRXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge3JlZEJyaWdodCBzZXJ2aWNlIGltYWdlOiAke3NlcnZpY2VOYW1lfSBoZWFsdGhjaGVjayBmYWlsZWR9XFxuYCk7XG4gICAgICAgICAgICAgICAgc2luZ2xlRXJyb3IubWVzc2FnZS5zcGxpdCgvXFxyP1xcbi9nKS5mb3JFYWNoKChsaW5lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge3JlZEJyaWdodCAgICR7bGluZX19XFxuYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZG91dChjaGFsa2Ake3RoaXMuZm9ybWF0dGVkSm9iTmFtZX0ge3JlZEJyaWdodCBhbHNvIHNlZSAoJHtzZXJ2aWNlQ29udGFuZXJMb2dGaWxlfSl9XFxuYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIC8vIEtpbGwgYWxsIHdhaXQtZm9yLWl0IGNvbnRhaW5lcnMsIHdoZW4gb25lIGhhdmUgYmVlbiBzdWNjZXNzZnVsXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoT2JqZWN0LmtleXMoaW1hZ2VJbnNwZWN0WzBdLkNvbmZpZy5FeHBvc2VkUG9ydHMpLm1hcCgocG9ydCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcG9ydC5lbmRzV2l0aChcIi90Y3BcIikpIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3J0TnVtID0gcGFyc2VJbnQocG9ydC5yZXBsYWNlKFwiL3RjcFwiLCBcIlwiKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0aWxzLnNwYXduKFtcImRvY2tlclwiLCBcInJtXCIsIFwiLXZmXCIsIGBnY2wtd2FpdC1mb3ItaXQtJHt0aGlzLmpvYklkfS0ke3NlcnZpY2VJbmRleH0tJHtwb3J0TnVtfWBdKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==