@aerokit/sdk 12.56.0 → 12.58.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -50,7 +50,7 @@ class Store {
50
50
  */
51
51
  static list(name, options) {
52
52
  const result = DataStoreFacade.list(name, options ? JSON.stringify(options) : null);
53
- return JSON.parse(result);
53
+ return Store.parseResult(result);
54
54
  }
55
55
  /**
56
56
  * Counts the number of entries based on optional filtering options.
@@ -74,7 +74,7 @@ class Store {
74
74
  if (result === null || result === void 0 || result === "") {
75
75
  return void 0;
76
76
  }
77
- return JSON.parse(result);
77
+ return Store.parseResult(result);
78
78
  }
79
79
  /**
80
80
  * Deletes an entry by its ID.
@@ -94,7 +94,7 @@ class Store {
94
94
  */
95
95
  static find(name, example, limit = 100, offset = 0) {
96
96
  const result = DataStoreFacade.find(name, JSON.stringify(example), limit, offset);
97
- return JSON.parse(result);
97
+ return Store.parseResult(result);
98
98
  }
99
99
  /**
100
100
  * Queries all entries for a given script with pagination.
@@ -124,22 +124,22 @@ class Store {
124
124
  }
125
125
  if (arr.length === 0) {
126
126
  const result = DataStoreFacade.query(query, null, limit, offset);
127
- return JSON.parse(result);
127
+ return Store.parseResult(result);
128
128
  }
129
129
  const first = arr[0];
130
130
  if (first && typeof first === "object" && "name" in first && "type" in first) {
131
131
  const result = DataStoreFacade.queryNamed(query, JSON.stringify(arr), limit, offset);
132
- return JSON.parse(result);
132
+ return Store.parseResult(result);
133
133
  }
134
134
  if (first && typeof first === "object" && "type" in first && !("name" in first)) {
135
135
  const result = DataStoreFacade.query(query, JSON.stringify(arr), limit, offset);
136
- return JSON.parse(result);
136
+ return Store.parseResult(result);
137
137
  }
138
138
  if (arr.every(
139
139
  (v) => typeof v === "string" || typeof v === "number" || typeof v === "boolean" || v instanceof Date || Array.isArray(v)
140
140
  )) {
141
141
  const result = DataStoreFacade.query(query, JSON.stringify(arr), limit, offset);
142
- return JSON.parse(result);
142
+ return Store.parseResult(result);
143
143
  }
144
144
  throw new Error("Unsupported parameter format: " + JSON.stringify(parameters));
145
145
  }
@@ -169,22 +169,22 @@ class Store {
169
169
  }
170
170
  if (arr.length === 0) {
171
171
  const result = DataStoreFacade.queryNative(query, null, limit, offset);
172
- return JSON.parse(result);
172
+ return Store.parseResult(result);
173
173
  }
174
174
  const first = arr[0];
175
175
  if (first && typeof first === "object" && "name" in first && "type" in first) {
176
176
  const result = DataStoreFacade.queryNativeNamed(query, JSON.stringify(arr), limit, offset);
177
- return JSON.parse(result);
177
+ return Store.parseResult(result);
178
178
  }
179
179
  if (first && typeof first === "object" && "type" in first && !("name" in first)) {
180
180
  const result = DataStoreFacade.queryNative(query, JSON.stringify(arr), limit, offset);
181
- return JSON.parse(result);
181
+ return Store.parseResult(result);
182
182
  }
183
183
  if (arr.every(
184
184
  (v) => typeof v === "string" || typeof v === "number" || typeof v === "boolean" || v instanceof Date || Array.isArray(v)
185
185
  )) {
186
186
  const result = DataStoreFacade.queryNative(query, JSON.stringify(arr), limit, offset);
187
- return JSON.parse(result);
187
+ return Store.parseResult(result);
188
188
  }
189
189
  throw new Error("Unsupported parameter format: " + JSON.stringify(parameters));
190
190
  }
@@ -213,6 +213,73 @@ class Store {
213
213
  static getIdColumn(name) {
214
214
  return DataStoreFacade.getIdColumn(name);
215
215
  }
216
+ /**
217
+ * Parse a JSON string and revive ISO date strings into JS Date objects.
218
+ * It handles both full ISO timestamps (with timezone) and date-only strings (YYYY-MM-DD).
219
+ * Returns undefined for null/empty inputs.
220
+ */
221
+ static parseResult(result) {
222
+ if (result === null || result === void 0 || result === "") {
223
+ return void 0;
224
+ }
225
+ if (typeof result !== "string") {
226
+ return result;
227
+ }
228
+ const ISO_DATETIME = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+\-]\d{2}:?\d{2})$/;
229
+ const DATE_ONLY = /^\d{4}-\d{2}-\d{2}$/;
230
+ const TZ_NO_COLON = /([+\-]\d{2})(\d{2})$/;
231
+ const SPACE_DATETIME = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+\-]\d{2}:?\d{2})?$/;
232
+ const TIME_ONLY = /^\d{2}:\d{2}:\d{2}(?:\.\d+)?$/;
233
+ const EPOCH_MS = /^[+\-]?\d{13}$/;
234
+ const EPOCH_S = /^[+\-]?\d{10}$/;
235
+ return JSON.parse(result, (key, value) => {
236
+ if (typeof value === "string") {
237
+ const s = value.trim();
238
+ if (EPOCH_MS.test(s)) {
239
+ const ms = parseInt(s, 10);
240
+ return new Date(ms);
241
+ }
242
+ if (EPOCH_S.test(s)) {
243
+ const ms = parseInt(s, 10) * 1e3;
244
+ return new Date(ms);
245
+ }
246
+ if (SPACE_DATETIME.test(s)) {
247
+ let v = s.replace(" ", "T");
248
+ if (TZ_NO_COLON.test(v)) {
249
+ v = v.replace(TZ_NO_COLON, "$1:$2");
250
+ }
251
+ const d = new Date(v);
252
+ if (!isNaN(d.getTime())) {
253
+ return d;
254
+ }
255
+ }
256
+ if (TIME_ONLY.test(s)) {
257
+ const m = s.match(/(\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?/);
258
+ if (m) {
259
+ const hh = parseInt(m[1], 10);
260
+ const mm = parseInt(m[2], 10);
261
+ const ss = parseInt(m[3], 10);
262
+ const frac = m[4] ? (m[4] + "000").substring(0, 3) : "000";
263
+ const ms = parseInt(frac, 10);
264
+ const now = /* @__PURE__ */ new Date();
265
+ const d = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), hh, mm, ss, ms));
266
+ return d;
267
+ }
268
+ }
269
+ if (ISO_DATETIME.test(s) || DATE_ONLY.test(s)) {
270
+ let v = s;
271
+ if (TZ_NO_COLON.test(v)) {
272
+ v = v.replace(TZ_NO_COLON, "$1:$2");
273
+ }
274
+ const d = new Date(v);
275
+ if (!isNaN(d.getTime())) {
276
+ return d;
277
+ }
278
+ }
279
+ }
280
+ return value;
281
+ });
282
+ }
216
283
  }
217
284
  if (typeof module !== "undefined") {
218
285
  module.exports = Store;
@@ -222,4 +289,4 @@ export {
222
289
  Operator,
223
290
  Store
224
291
  };
225
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RiL3N0b3JlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBEYXRhU3RvcmVGYWNhZGUgPSBKYXZhLnR5cGUoXCJvcmcuZWNsaXBzZS5kaXJpZ2libGUuY29tcG9uZW50cy5hcGkuZGIuRGF0YVN0b3JlRmFjYWRlXCIpO1xuXG4vKipcbiAqIERlZmluZXMgdGhlIGF2YWlsYWJsZSBjb21wYXJpc29uIG9wZXJhdG9ycyBmb3IgcXVlcnkgY29uZGl0aW9ucy5cbiAqL1xuZXhwb3J0IGVudW0gT3BlcmF0b3Ige1xuXHRFUSA9IFwiPVwiLCAvLyBFcXVhbHNcblx0TkUgPSBcIjw+XCIsIC8vIE5vdCBFcXVhbHNcblx0R1QgPSBcIj5cIiwgLy8gR3JlYXRlciBUaGFuXG5cdExUID0gXCI8XCIsIC8vIExlc3MgVGhhblxuXHRHRSA9IFwiPj1cIiwgLy8gR3JlYXRlciBUaGFuIG9yIEVxdWFsc1xuXHRMRSA9IFwiPD1cIiwgLy8gTGVzcyBUaGFuIG9yIEVxdWFsc1xuXHRMSUtFID0gXCJMSUtFXCIsIC8vIFNRTCBMSUtFIG9wZXJhdG9yXG5cdEJFVFdFRU4gPSBcIkJFVFdFRU5cIiwgLy8gU1FMIEJFVFdFRU4gb3BlcmF0b3IgKHJlcXVpcmVzIHR3byB2YWx1ZXMpXG5cdElOID0gXCJJTlwiIC8vIFNRTCBJTiBvcGVyYXRvciAocmVxdWlyZXMgYSBMaXN0IG9yIEFycmF5IG9mIHZhbHVlcylcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHRoZSBkaXJlY3Rpb24gZm9yIHNvcnRpbmcuXG4gKi9cbmV4cG9ydCBlbnVtIERpcmVjdGlvbiB7XG5cdEFTQyA9IFwiQVNDXCIsIC8vIEFzY2VuZGluZ1xuXHRERVNDID0gXCJERVNDXCIgLy8gRGVzY2VuZGluZ1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBzaW5nbGUgY29uZGl0aW9uIGZvciBmaWx0ZXJpbmcgZGF0YS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25kaXRpb24ge1xuXHRwcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0b3BlcmF0b3I6IE9wZXJhdG9yLFxuXHR2YWx1ZTogYW55IHwgYW55W11cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2luZ2xlIHNvcnRpbmcgaW5zdHJ1Y3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU29ydCB7XG5cdHByb3BlcnR5TmFtZTogc3RyaW5nLFxuXHRkaXJlY3Rpb246IERpcmVjdGlvblxufVxuXG4vKipcbiAqIERlZmluZXMgb3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgbGlzdCBhbmQgY291bnQgb3BlcmF0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zIHtcblx0Y29uZGl0aW9ucz86IENvbmRpdGlvbltdLFxuXHRzb3J0cz86IFNvcnRbXSxcblx0bGltaXQ/OiBudW1iZXIsXG5cdG9mZnNldD86IG51bWJlcixcblx0bGFuZ3VhZ2U/OiBzdHJpbmdcbn1cblxuaW1wb3J0IHsgVHlwZWRRdWVyeVBhcmFtZXRlciwgTmFtZWRRdWVyeVBhcmFtZXRlciB9IGZyb20gJy4vcXVlcnknO1xuXG4vKipcbiAqIEZhY2FkZSBjbGFzcyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgdW5kZXJseWluZyBEaXJpZ2libGUgRGF0YSBTdG9yZS5cbiAqIEFsbCBtZXRob2RzIHNlcmlhbGl6ZS9kZXNlcmlhbGl6ZSBKYXZhU2NyaXB0IG9iamVjdHMgdG8vZnJvbSBKU09OIHN0cmluZ3NcbiAqIGJlZm9yZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBuYXRpdmUgSmF2YSBmYWNhZGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdG9yZSB7XG5cblx0LyoqXG5cdCAqIFNhdmVzIGEgbmV3IGVudHJ5IHRvIHRoZSBkYXRhIHN0b3JlLlxuXHQgKiBAcGFyYW0gbmFtZSBUaGUgZW50aXR5L3RhYmxlIG5hbWUuXG5cdCAqIEBwYXJhbSBlbnRyeSBUaGUgSmF2YVNjcmlwdCBvYmplY3QgdG8gc2F2ZS5cblx0ICogQHJldHVybnMgVGhlIElEIG9mIHRoZSBuZXdseSBjcmVhdGVkIGVudHJ5IChzdHJpbmcgb3IgbnVtYmVyKS5cblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgc2F2ZShuYW1lOiBzdHJpbmcsIGVudHJ5OiBhbnkpOiBzdHJpbmcgfCBudW1iZXIge1xuXHRcdHJldHVybiBEYXRhU3RvcmVGYWNhZGUuc2F2ZShuYW1lLCBKU09OLnN0cmluZ2lmeShlbnRyeSkpO1xuXHR9XG5cdFxuXHQvKipcblx0ICogSW5zZXJ0cyBhIG5ldyBlbnRyeSBvciB1cGRhdGVzIGFuIGV4aXN0aW5nIG9uZSBpZiB0aGUgSUQgaXMgcHJlc2VudC5cblx0ICogQHBhcmFtIG5hbWUgVGhlIGVudGl0eS90YWJsZSBuYW1lLlxuXHQgKiBAcGFyYW0gZW50cnkgVGhlIEphdmFTY3JpcHQgb2JqZWN0IHRvIGluc2VydC91cGRhdGUuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIHVwc2VydChuYW1lOiBzdHJpbmcsIGVudHJ5OiBhbnkpOiB2b2lkIHtcblx0XHREYXRhU3RvcmVGYWNhZGUudXBzZXJ0KG5hbWUsIEpTT04uc3RyaW5naWZ5KGVudHJ5KSk7XG5cdH1cblx0XG5cdC8qKlxuXHQgKiBVcGRhdGVzIGFuIGV4aXN0aW5nIGVudHJ5LlxuXHQgKiBAcGFyYW0gbmFtZSBUaGUgZW50aXR5L3RhYmxlIG5hbWUuXG5cdCAqIEBwYXJhbSBlbnRyeSBUaGUgSmF2YVNjcmlwdCBvYmplY3Qgd2l0aCB0aGUgSUQgYW5kIHVwZGF0ZWQgZGF0YS5cblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgdXBkYXRlKG5hbWU6IHN0cmluZywgZW50cnk6IGFueSk6IHZvaWQge1xuXHRcdERhdGFTdG9yZUZhY2FkZS51cGRhdGUobmFtZSwgSlNPTi5zdHJpbmdpZnkoZW50cnkpKTtcblx0fVxuXHRcblx0LyoqXG5cdCAqIExpc3RzIGVudHJpZXMgYmFzZWQgb24gb3B0aW9uYWwgZmlsdGVyaW5nLCBzb3J0aW5nLCBhbmQgcGFnaW5hdGlvbiBvcHRpb25zLlxuXHQgKiBAcGFyYW0gbmFtZSBUaGUgZW50aXR5L3RhYmxlIG5hbWUuXG5cdCAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIHtAbGluayBPcHRpb25zfSBmb3IgcXVlcnkgZXhlY3V0aW9uLlxuXHQgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBKYXZhU2NyaXB0IG9iamVjdHMuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGxpc3QobmFtZTogc3RyaW5nLCBvcHRpb25zPzogT3B0aW9ucyk6IGFueVtdIHtcblx0XHRjb25zdCByZXN1bHQgPSBEYXRhU3RvcmVGYWNhZGUubGlzdChuYW1lLCBvcHRpb25zID8gSlNPTi5zdHJpbmdpZnkob3B0aW9ucykgOiBudWxsKTtcblx0XHRyZXR1cm4gSlNPTi5wYXJzZShyZXN1bHQpO1xuXHR9XG5cdFxuXHQvKipcblx0ICogQ291bnRzIHRoZSBudW1iZXIgb2YgZW50cmllcyBiYXNlZCBvbiBvcHRpb25hbCBmaWx0ZXJpbmcgb3B0aW9ucy5cblx0ICogQHBhcmFtIG5hbWUgVGhlIGVudGl0eS90YWJsZSBuYW1lLlxuXHQgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCB7QGxpbmsgT3B0aW9uc30gZm9yIHF1ZXJ5IGV4ZWN1dGlvbi5cblx0ICogQHJldHVybnMgVGhlIGNvdW50IG9mIG1hdGNoaW5nIGVudHJpZXMuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGNvdW50KG5hbWU6IHN0cmluZywgb3B0aW9ucz86IE9wdGlvbnMpOiBudW1iZXIge1xuXHRcdGNvbnN0IG9wdGlvbnNTdHJpbmcgPSBvcHRpb25zID8gSlNPTi5zdHJpbmdpZnkob3B0aW9ucykgOiBudWxsO1xuXHRcdGNvbnN0IHJlc3VsdCA9IERhdGFTdG9yZUZhY2FkZS5jb3VudChuYW1lLCBvcHRpb25zU3RyaW5nKTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyBhIHNpbmdsZSBlbnRyeSBieSBpdHMgSUQuXG5cdCAqIEBwYXJhbSBuYW1lIFRoZSBlbnRpdHkvdGFibGUgbmFtZS5cblx0ICogQHBhcmFtIGlkIFRoZSBJRCBvZiB0aGUgZW50cnkuXG5cdCAqIEByZXR1cm5zIFRoZSBlbnRyeSBvYmplY3QsIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmQuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGdldChuYW1lOiBzdHJpbmcsIGlkOiBhbnkpOiBhbnkgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHJlc3VsdCA9IERhdGFTdG9yZUZhY2FkZS5nZXQobmFtZSwgaWQpO1xuXHRcdC8vIEFzc3VtaW5nIHRoZSBuYXRpdmUgQVBJIHJldHVybnMgbnVsbC91bmRlZmluZWQgb3IgYW4gZW1wdHkgSlNPTiBzdHJpbmcgaWYgbm90IGZvdW5kLCBcblx0XHQvLyBvdGhlcndpc2UgSlNPTi5wYXJzZSBoYW5kbGVzIHRoZSBjb252ZXJzaW9uLlxuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB1bmRlZmluZWQgfHwgcmVzdWx0ID09PSBcIlwiKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gSlNPTi5wYXJzZShyZXN1bHQpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBEZWxldGVzIGFuIGVudHJ5IGJ5IGl0cyBJRC5cblx0ICogQHBhcmFtIG5hbWUgVGhlIGVudGl0eS90YWJsZSBuYW1lLlxuXHQgKiBAcGFyYW0gaWQgVGhlIElEIG9mIHRoZSBlbnRyeSB0byByZW1vdmUuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIHJlbW92ZShuYW1lOiBzdHJpbmcsIGlkOiBhbnkpOiB2b2lkIHtcblx0XHREYXRhU3RvcmVGYWNhZGUuZGVsZXRlRW50cnkobmFtZSwgaWQpO1xuXHR9XG5cdFxuXHQvKipcblx0ICogRmluZHMgZW50cmllcyBtYXRjaGluZyBhbiBleGFtcGxlIG9iamVjdCAocXVlcnktYnktZXhhbXBsZSkuXG5cdCAqIEBwYXJhbSBuYW1lIFRoZSBlbnRpdHkvdGFibGUgbmFtZS5cblx0ICogQHBhcmFtIGV4YW1wbGUgQW4gb2JqZWN0IGNvbnRhaW5pbmcgcHJvcGVydGllcyB0byBtYXRjaC5cblx0ICogQHBhcmFtIGxpbWl0IE1heGltdW0gbnVtYmVyIG9mIHJlc3VsdHMgdG8gcmV0dXJuLlxuXHQgKiBAcGFyYW0gb2Zmc2V0IE51bWJlciBvZiByZXN1bHRzIHRvIHNraXAuXG5cdCAqIEByZXR1cm5zIEFuIGFycmF5IG9mIG1hdGNoaW5nIEphdmFTY3JpcHQgb2JqZWN0cy5cblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgZmluZChuYW1lOiBzdHJpbmcsIGV4YW1wbGU6IGFueSwgbGltaXQ6IG51bWJlciA9IDEwMCwgb2Zmc2V0OiBudW1iZXIgPSAwKTogYW55W10ge1xuXHRcdGNvbnN0IHJlc3VsdCA9IERhdGFTdG9yZUZhY2FkZS5maW5kKG5hbWUsIEpTT04uc3RyaW5naWZ5KGV4YW1wbGUpLCBsaW1pdCwgb2Zmc2V0KTtcblx0XHRyZXR1cm4gSlNPTi5wYXJzZShyZXN1bHQpO1xuXHR9XG5cdFxuXHQvKipcblx0ICogUXVlcmllcyBhbGwgZW50cmllcyBmb3IgYSBnaXZlbiBzY3JpcHQgd2l0aCBwYWdpbmF0aW9uLlxuXHQgKiBAcGFyYW0gcXVlcnkgVGhlIHF1ZXJ5IHNjcmlwdC5cblx0ICogQHBhcmFtIGxpbWl0IE1heGltdW0gbnVtYmVyIG9mIHJlc3VsdHMgdG8gcmV0dXJuLlxuXHQgKiBAcGFyYW0gb2Zmc2V0IE51bWJlciBvZiByZXN1bHRzIHRvIHNraXAuXG5cdCAqIEByZXR1cm5zIEFuIGFycmF5IG9mIEphdmFTY3JpcHQgb2JqZWN0cy5cblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgcXVlcnkocXVlcnk6IHN0cmluZywgcGFyYW1ldGVycz86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgRGF0ZSB8IFR5cGVkUXVlcnlQYXJhbWV0ZXIgfCBOYW1lZFF1ZXJ5UGFyYW1ldGVyKVtdLCBsaW1pdDogbnVtYmVyID0gMTAwLCBvZmZzZXQ6IG51bWJlciA9IDApOiBhbnlbXSB7XG5cdFx0bGV0IGFycjogYW55W10gPSBbXTtcblx0ICAgIGlmIChwYXJhbWV0ZXJzID09IG51bGwpIHtcblx0ICAgICAgYXJyID0gW107XG5cdCAgICB9IGVsc2UgaWYgKHR5cGVvZiBwYXJhbWV0ZXJzID09PSBcInN0cmluZ1wiKSB7XG5cdCAgICAgIHRyeSB7XG5cdCAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShwYXJhbWV0ZXJzKTtcblx0ICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFyc2VkKSkge1xuXHQgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW5wdXQgcGFyYW1ldGVyIHN0cmluZyBtdXN0IHJlcHJlc2VudCBhIEpTT04gYXJyYXlcIik7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGFyciA9IHBhcnNlZDtcblx0ICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgSlNPTiBwYXJhbWV0ZXJzOiBcIiArIGUpO1xuXHQgICAgICB9XG5cdCAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1ldGVycykpIHtcblx0ICAgICAgYXJyID0gcGFyYW1ldGVycztcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcmFtZXRlcnMgbXVzdCBiZSBlaXRoZXIgYW4gYXJyYXkgb3IgYSBKU09OIHN0cmluZ1wiKTtcblx0ICAgIH1cblxuXHQgICAgaWYgKGFyci5sZW5ndGggPT09IDApIHtcblx0XHQgIGNvbnN0IHJlc3VsdCA9IERhdGFTdG9yZUZhY2FkZS5xdWVyeShxdWVyeSwgbnVsbCwgbGltaXQsIG9mZnNldCk7XG5cdFx0ICByZXR1cm4gSlNPTi5wYXJzZShyZXN1bHQpO1xuXHQgICAgfVxuXG5cdCAgICBjb25zdCBmaXJzdCA9IGFyclswXTtcblxuXHQgICAgLy8gTmFtZWRRdWVyeVBhcmFtZXRlciAoaGFzIG5hbWUgKyB0eXBlKVxuXHQgICAgaWYgKGZpcnN0ICYmIHR5cGVvZiBmaXJzdCA9PT0gXCJvYmplY3RcIiAmJiBcIm5hbWVcIiBpbiBmaXJzdCAmJiBcInR5cGVcIiBpbiBmaXJzdCkge1xuXHRcdCAgY29uc3QgcmVzdWx0ID0gRGF0YVN0b3JlRmFjYWRlLnF1ZXJ5TmFtZWQocXVlcnksIEpTT04uc3RyaW5naWZ5KGFyciksIGxpbWl0LCBvZmZzZXQpO1xuXHRcdCAgcmV0dXJuIEpTT04ucGFyc2UocmVzdWx0KTtcblx0ICAgIH1cblxuXHQgICAgLy8gVHlwZWRRdWVyeVBhcmFtZXRlciAoaGFzIHR5cGUsIG5vIG5hbWUpXG5cdCAgICBpZiAoZmlyc3QgJiYgdHlwZW9mIGZpcnN0ID09PSBcIm9iamVjdFwiICYmIFwidHlwZVwiIGluIGZpcnN0ICYmICEoXCJuYW1lXCIgaW4gZmlyc3QpKSB7XG5cdFx0ICBjb25zdCByZXN1bHQgPSBEYXRhU3RvcmVGYWNhZGUucXVlcnkocXVlcnksIEpTT04uc3RyaW5naWZ5KGFyciksIGxpbWl0LCBvZmZzZXQpO1xuXHRcdCAgcmV0dXJuIEpTT04ucGFyc2UocmVzdWx0KTtcblx0ICAgIH1cblxuXHQgICAgLy8gUHJpbWl0aXZlIGFycmF5XG5cdCAgICBpZiAoXG5cdCAgICAgIGFyci5ldmVyeShcblx0ICAgICAgICAodikgPT5cblx0ICAgICAgICAgIHR5cGVvZiB2ID09PSBcInN0cmluZ1wiIHx8XG5cdCAgICAgICAgICB0eXBlb2YgdiA9PT0gXCJudW1iZXJcIiB8fFxuXHQgICAgICAgICAgdHlwZW9mIHYgPT09IFwiYm9vbGVhblwiIHx8XG5cdCAgICAgICAgICB2IGluc3RhbmNlb2YgRGF0ZVx0fHxcblx0XHQgIFx0ICBBcnJheS5pc0FycmF5KHYpXG5cdCAgICAgIClcblx0ICAgICkge1xuXHRcdCAgY29uc3QgcmVzdWx0ID0gRGF0YVN0b3JlRmFjYWRlLnF1ZXJ5KHF1ZXJ5LCBKU09OLnN0cmluZ2lmeShhcnIpLCBsaW1pdCwgb2Zmc2V0KTtcblx0XHQgIHJldHVybiBKU09OLnBhcnNlKHJlc3VsdCk7XG5cdCAgICB9XG5cblx0ICAgIHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHBhcmFtZXRlciBmb3JtYXQ6IFwiICsgSlNPTi5zdHJpbmdpZnkocGFyYW1ldGVycykpO1xuXHR9XG5cdFxuXHQvKipcblx0ICogUXVlcmllcyBhbGwgZW50cmllcyBmb3IgYSBnaXZlbiBlbnRpdHkgbmFtZSB3aXRob3V0IHBhZ2luYXRpb24uXG5cdCAqIEBwYXJhbSBxdWVyeSBUaGUgZW50aXR5L3RhYmxlIG5hbWUuXG5cdCAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGFsbCBKYXZhU2NyaXB0IG9iamVjdHMuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIHF1ZXJ5TmF0aXZlKHF1ZXJ5OiBzdHJpbmcsIHBhcmFtZXRlcnM/OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IERhdGUgfCBUeXBlZFF1ZXJ5UGFyYW1ldGVyIHwgTmFtZWRRdWVyeVBhcmFtZXRlcilbXSwgbGltaXQ6IG51bWJlciA9IDEwMCwgb2Zmc2V0OiBudW1iZXIgPSAwKTogYW55W10ge1xuXHRcdGxldCBhcnI6IGFueVtdID0gW107XG5cdFx0aWYgKHBhcmFtZXRlcnMgPT0gbnVsbCkge1xuXHQgICAgICBhcnIgPSBbXTtcblx0ICAgIH0gZWxzZSBpZiAodHlwZW9mIHBhcmFtZXRlcnMgPT09IFwic3RyaW5nXCIpIHtcblx0ICAgICAgdHJ5IHtcblx0ICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHBhcmFtZXRlcnMpO1xuXHQgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShwYXJzZWQpKSB7XG5cdCAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnB1dCBwYXJhbWV0ZXIgc3RyaW5nIG11c3QgcmVwcmVzZW50IGEgSlNPTiBhcnJheVwiKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgYXJyID0gcGFyc2VkO1xuXHQgICAgICB9IGNhdGNoIChlKSB7XG5cdCAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBKU09OIHBhcmFtZXRlcnM6IFwiICsgZSk7XG5cdCAgICAgIH1cblx0ICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwYXJhbWV0ZXJzKSkge1xuXHQgICAgICBhcnIgPSBwYXJhbWV0ZXJzO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVycyBtdXN0IGJlIGVpdGhlciBhbiBhcnJheSBvciBhIEpTT04gc3RyaW5nXCIpO1xuXHQgICAgfVxuXG5cdCAgICBpZiAoYXJyLmxlbmd0aCA9PT0gMCkge1xuXHRcdCAgY29uc3QgcmVzdWx0ID0gRGF0YVN0b3JlRmFjYWRlLnF1ZXJ5TmF0aXZlKHF1ZXJ5LCBudWxsLCBsaW1pdCwgb2Zmc2V0KTtcblx0XHQgIHJldHVybiBKU09OLnBhcnNlKHJlc3VsdCk7XG5cdCAgICB9XG5cblx0ICAgIGNvbnN0IGZpcnN0ID0gYXJyWzBdO1xuXG5cdCAgICAvLyBOYW1lZFF1ZXJ5UGFyYW1ldGVyIChoYXMgbmFtZSArIHR5cGUpXG5cdCAgICBpZiAoZmlyc3QgJiYgdHlwZW9mIGZpcnN0ID09PSBcIm9iamVjdFwiICYmIFwibmFtZVwiIGluIGZpcnN0ICYmIFwidHlwZVwiIGluIGZpcnN0KSB7XG5cdFx0ICBjb25zdCByZXN1bHQgPSBEYXRhU3RvcmVGYWNhZGUucXVlcnlOYXRpdmVOYW1lZChxdWVyeSwgSlNPTi5zdHJpbmdpZnkoYXJyKSwgbGltaXQsIG9mZnNldCk7XG5cdFx0ICByZXR1cm4gSlNPTi5wYXJzZShyZXN1bHQpO1xuXHQgICAgfVxuXG5cdCAgICAvLyBUeXBlZFF1ZXJ5UGFyYW1ldGVyIChoYXMgdHlwZSwgbm8gbmFtZSlcblx0ICAgIGlmIChmaXJzdCAmJiB0eXBlb2YgZmlyc3QgPT09IFwib2JqZWN0XCIgJiYgXCJ0eXBlXCIgaW4gZmlyc3QgJiYgIShcIm5hbWVcIiBpbiBmaXJzdCkpIHtcblx0XHQgIGNvbnN0IHJlc3VsdCA9IERhdGFTdG9yZUZhY2FkZS5xdWVyeU5hdGl2ZShxdWVyeSwgSlNPTi5zdHJpbmdpZnkoYXJyKSwgbGltaXQsIG9mZnNldCk7XG5cdFx0ICByZXR1cm4gSlNPTi5wYXJzZShyZXN1bHQpO1xuXHQgICAgfVxuXG5cdCAgICAvLyBQcmltaXRpdmUgYXJyYXlcblx0ICAgIGlmIChcblx0ICAgICAgYXJyLmV2ZXJ5KFxuXHQgICAgICAgICh2KSA9PlxuXHQgICAgICAgICAgdHlwZW9mIHYgPT09IFwic3RyaW5nXCIgfHxcblx0ICAgICAgICAgIHR5cGVvZiB2ID09PSBcIm51bWJlclwiIHx8XG5cdCAgICAgICAgICB0eXBlb2YgdiA9PT0gXCJib29sZWFuXCIgfHxcblx0ICAgICAgICAgIHYgaW5zdGFuY2VvZiBEYXRlIHx8XG5cdFx0XHQgIEFycmF5LmlzQXJyYXkodilcblx0ICAgICAgKVxuXHQgICAgKSB7XG5cdFx0ICBjb25zdCByZXN1bHQgPSBEYXRhU3RvcmVGYWNhZGUucXVlcnlOYXRpdmUocXVlcnksIEpTT04uc3RyaW5naWZ5KGFyciksIGxpbWl0LCBvZmZzZXQpO1xuXHRcdCAgcmV0dXJuIEpTT04ucGFyc2UocmVzdWx0KTtcblx0ICAgIH1cblxuXHQgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgcGFyYW1ldGVyIGZvcm1hdDogXCIgKyBKU09OLnN0cmluZ2lmeShwYXJhbWV0ZXJzKSk7XG5cdH1cblx0XG5cdC8vIC0tLSBNZXRhZGF0YSBHZXR0ZXJzIC0tLVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBlbnRpdHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdG9yZSBuYW1lLlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBnZXRFbnRpdHlOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIERhdGFTdG9yZUZhY2FkZS5nZXRFbnRpdHlOYW1lKG5hbWUpO1xuXHR9XG5cdFxuXHQvKipcblx0ICogR2V0cyB0aGUgdW5kZXJseWluZyBkYXRhYmFzZSB0YWJsZSBuYW1lIGZvciB0aGUgZW50aXR5LlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBnZXRUYWJsZU5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gRGF0YVN0b3JlRmFjYWRlLmdldFRhYmxlTmFtZShuYW1lKTtcblx0fVxuXHRcdFxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZSB1c2VkIGFzIHRoZSBJRCBmaWVsZCBpbiB0aGUgZW50aXR5IG9iamVjdC5cblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgZ2V0SWROYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIERhdGFTdG9yZUZhY2FkZS5nZXRJZE5hbWUobmFtZSk7XG5cdH1cblx0XHRcdFxuXHQvKipcblx0ICogR2V0cyB0aGUgdW5kZXJseWluZyBkYXRhYmFzZSBjb2x1bW4gbmFtZSB1c2VkIGZvciB0aGUgSUQgZmllbGQuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGdldElkQ29sdW1uKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIERhdGFTdG9yZUZhY2FkZS5nZXRJZENvbHVtbihuYW1lKTtcblx0fVxuXG59XG5cbi8vIEB0cy1pZ25vcmVcbmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJykge1xuXHQvLyBAdHMtaWdub3JlXG5cdG1vZHVsZS5leHBvcnRzID0gU3RvcmU7XG59Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsTUFBTSxrQkFBa0IsS0FBSyxLQUFLLHlEQUF5RDtBQUtwRixJQUFLLFdBQUwsa0JBQUtBLGNBQUw7QUFDTixFQUFBQSxVQUFBLFFBQUs7QUFDTCxFQUFBQSxVQUFBLFFBQUs7QUFDTCxFQUFBQSxVQUFBLFFBQUs7QUFDTCxFQUFBQSxVQUFBLFFBQUs7QUFDTCxFQUFBQSxVQUFBLFFBQUs7QUFDTCxFQUFBQSxVQUFBLFFBQUs7QUFDTCxFQUFBQSxVQUFBLFVBQU87QUFDUCxFQUFBQSxVQUFBLGFBQVU7QUFDVixFQUFBQSxVQUFBLFFBQUs7QUFUTSxTQUFBQTtBQUFBLEdBQUE7QUFlTCxJQUFLLFlBQUwsa0JBQUtDLGVBQUw7QUFDTixFQUFBQSxXQUFBLFNBQU07QUFDTixFQUFBQSxXQUFBLFVB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QUFNLDhCQUE4QixDQUFDO0FBQUEsTUFDakQ7QUFBQSxJQUNGLFdBQVcsTUFBTSxRQUFRLFVBQVUsR0FBRztBQUNwQyxZQUFNO0FBQUEsSUFDUixPQUFPO0FBQ0wsWUFBTSxJQUFJLE1BQU0scURBQXFEO0FBQUEsSUFDdkU7QUFFQSxRQUFJLElBQUksV0FBVyxHQUFHO0FBQ3ZCLFlBQU0sU0FBUyxnQkFBZ0IsWUFBWSxPQUFPLE1BQU0sT0FBTyxNQUFNO0FBQ3JFLGFBQU8sS0FBSyxNQUFNLE1BQU07QUFBQSxJQUN2QjtBQUVBLFVBQU0sUUFBUSxJQUFJLENBQUM7QUFHbkIsUUFBSSxTQUFTLE9BQU8sVUFBVSxZQUFZLFVBQVUsU0FBUyxVQUFVLE9BQU87QUFDL0UsWUFBTSxTQUFTLGdCQUFnQixpQkFBaUIsT0FBTyxLQUFLLFVBQVUsR0FBRyxHQUFHLE9BQU8sTUFBTTtBQUN6RixhQUFPLEtBQUssTUFBTSxNQUFNO0FBQUEsSUFDdkI7QUFHQSxRQUFJLFNBQVMsT0FBTyxVQUFVLFlBQVksVUFBVSxTQUFTLEVBQUUsVUFBVSxRQUFRO0FBQ2xGLFlBQU0sU0FBUyxnQkFBZ0IsWUFBWSxPQUFPLEtBQUssVUFBVSxHQUFHLEdBQUcsT0FBTyxNQUFNO0FBQ3BGLGFBQU8sS0FBSyxNQUFNLE1BQU07QUFBQSxJQUN2QjtBQUdBLFFBQ0UsSUFBSTtBQUFBLE1BQ0YsQ0FBQyxNQUNDLE9BQU8sTUFBTSxZQUNiLE9BQU8sTUFBTSxZQUNiLE9BQU8sTUFBTSxhQUNiLGFBQWEsUUFDbkIsTUFBTSxRQUFRLENBQUM7QUFBQSxJQUNiLEdBQ0E7QUFDSCxZQUFNLFNBQVMsZ0JBQWdCLFlBQVksT0FBTyxLQUFLLFVBQVUsR0FBRyxHQUFHLE9BQU8sTUFBTTtBQUNwRixhQUFPLEtBQUssTUFBTSxNQUFNO0FBQUEsSUFDdkI7QUFFQSxVQUFNLElBQUksTUFBTSxtQ0FBbUMsS0FBSyxVQUFVLFVBQVUsQ0FBQztBQUFBLEVBQ2pGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLE9BQWMsY0FBYyxNQUFzQjtBQUNqRCxXQUFPLGdCQUFnQixjQUFjLElBQUk7QUFBQSxFQUMxQztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsT0FBYyxhQUFhLE1BQXNCO0FBQ2hELFdBQU8sZ0JBQWdCLGFBQWEsSUFBSTtBQUFBLEVBQ3pDO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQSxPQUFjLFVBQVUsTUFBc0I7QUFDN0MsV0FBTyxnQkFBZ0IsVUFBVSxJQUFJO0FBQUEsRUFDdEM7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBLE9BQWMsWUFBWSxNQUFzQjtBQUMvQyxXQUFPLGdCQUFnQixZQUFZLElBQUk7QUFBQSxFQUN4QztBQUVEO0FBR0EsSUFBSSxPQUFPLFdBQVcsYUFBYTtBQUVsQyxTQUFPLFVBQVU7QUFDbEI7IiwKICAibmFtZXMiOiBbIk9wZXJhdG9yIiwgIkRpcmVjdGlvbiJdCn0K
292
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RiL3N0b3JlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBEYXRhU3RvcmVGYWNhZGUgPSBKYXZhLnR5cGUoXCJvcmcuZWNsaXBzZS5kaXJpZ2libGUuY29tcG9uZW50cy5hcGkuZGIuRGF0YVN0b3JlRmFjYWRlXCIpO1xuXG4vKipcbiAqIERlZmluZXMgdGhlIGF2YWlsYWJsZSBjb21wYXJpc29uIG9wZXJhdG9ycyBmb3IgcXVlcnkgY29uZGl0aW9ucy5cbiAqL1xuZXhwb3J0IGVudW0gT3BlcmF0b3Ige1xuXHRFUSA9IFwiPVwiLCAvLyBFcXVhbHNcblx0TkUgPSBcIjw+XCIsIC8vIE5vdCBFcXVhbHNcblx0R1QgPSBcIj5cIiwgLy8gR3JlYXRlciBUaGFuXG5cdExUID0gXCI8XCIsIC8vIExlc3MgVGhhblxuXHRHRSA9IFwiPj1cIiwgLy8gR3JlYXRlciBUaGFuIG9yIEVxdWFsc1xuXHRMRSA9IFwiPD1cIiwgLy8gTGVzcyBUaGFuIG9yIEVxdWFsc1xuXHRMSUtFID0gXCJMSUtFXCIsIC8vIFNRTCBMSUtFIG9wZXJhdG9yXG5cdEJFVFdFRU4gPSBcIkJFVFdFRU5cIiwgLy8gU1FMIEJFVFdFRU4gb3BlcmF0b3IgKHJlcXVpcmVzIHR3byB2YWx1ZXMpXG5cdElOID0gXCJJTlwiIC8vIFNRTCBJTiBvcGVyYXRvciAocmVxdWlyZXMgYSBMaXN0IG9yIEFycmF5IG9mIHZhbHVlcylcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHRoZSBkaXJlY3Rpb24gZm9yIHNvcnRpbmcuXG4gKi9cbmV4cG9ydCBlbnVtIERpcmVjdGlvbiB7XG5cdEFTQyA9IFwiQVNDXCIsIC8vIEFzY2VuZGluZ1xuXHRERVNDID0gXCJERVNDXCIgLy8gRGVzY2VuZGluZ1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBzaW5nbGUgY29uZGl0aW9uIGZvciBmaWx0ZXJpbmcgZGF0YS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25kaXRpb24ge1xuXHRwcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0b3BlcmF0b3I6IE9wZXJhdG9yLFxuXHR2YWx1ZTogYW55IHwgYW55W11cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2luZ2xlIHNvcnRpbmcgaW5zdHJ1Y3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU29ydCB7XG5cdHByb3BlcnR5TmFtZTogc3RyaW5nLFxuXHRkaXJlY3Rpb246IERpcmVjdGlvblxufVxuXG4vKipcbiAqIERlZmluZXMgb3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgbGlzdCBhbmQgY291bnQgb3BlcmF0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zIHtcblx0Y29uZGl0aW9ucz86IENvbmRpdGlvbltdLFxuXHRzb3J0cz86IFNvcnRbXSxcblx0bGltaXQ/OiBudW1iZXIsXG5cdG9mZnNldD86IG51bWJlcixcblx0bGFuZ3VhZ2U/OiBzdHJpbmdcbn1cblxuaW1wb3J0IHsgVHlwZWRRdWVyeVBhcmFtZXRlciwgTmFtZWRRdWVyeVBhcmFtZXRlciB9IGZyb20gJy4vcXVlcnknO1xuXG4vKipcbiAqIEZhY2FkZSBjbGFzcyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgdW5kZXJseWluZyBEaXJpZ2libGUgRGF0YSBTdG9yZS5cbiAqIEFsbCBtZXRob2RzIHNlcmlhbGl6ZS9kZXNlcmlhbGl6ZSBKYXZhU2NyaXB0IG9iamVjdHMgdG8vZnJvbSBKU09OIHN0cmluZ3NcbiAqIGJlZm9yZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBuYXRpdmUgSmF2YSBmYWNhZGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdG9yZSB7XG5cblx0LyoqXG5cdCAqIFNhdmVzIGEgbmV3IGVudHJ5IHRvIHRoZSBkYXRhIHN0b3JlLlxuXHQgKiBAcGFyYW0gbmFtZSBUaGUgZW50aXR5L3RhYmxlIG5hbWUuXG5cdCAqIEBwYXJhbSBlbnRyeSBUaGUgSmF2YVNjcmlwdCBvYmplY3QgdG8gc2F2ZS5cblx0ICogQHJldHVybnMgVGhlIElEIG9mIHRoZSBuZXdseSBjcmVhdGVkIGVudHJ5IChzdHJpbmcgb3IgbnVtYmVyKS5cblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgc2F2ZShuYW1lOiBzdHJpbmcsIGVudHJ5OiBhbnkpOiBzdHJpbmcgfCBudW1iZXIge1xuXHRcdHJldHVybiBEYXRhU3RvcmVGYWNhZGUuc2F2ZShuYW1lLCBKU09OLnN0cmluZ2lmeShlbnRyeSkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEluc2VydHMgYSBuZXcgZW50cnkgb3IgdXBkYXRlcyBhbiBleGlzdGluZyBvbmUgaWYgdGhlIElEIGlzIHByZXNlbnQuXG5cdCAqIEBwYXJhbSBuYW1lIFRoZSBlbnRpdHkvdGFibGUgbmFtZS5cblx0ICogQHBhcmFtIGVudHJ5IFRoZSBKYXZhU2NyaXB0IG9iamVjdCB0byBpbnNlcnQvdXBkYXRlLlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyB1cHNlcnQobmFtZTogc3RyaW5nLCBlbnRyeTogYW55KTogdm9pZCB7XG5cdFx0RGF0YVN0b3JlRmFjYWRlLnVwc2VydChuYW1lLCBKU09OLnN0cmluZ2lmeShlbnRyeSkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgYW4gZXhpc3RpbmcgZW50cnkuXG5cdCAqIEBwYXJhbSBuYW1lIFRoZSBlbnRpdHkvdGFibGUgbmFtZS5cblx0ICogQHBhcmFtIGVudHJ5IFRoZSBKYXZhU2NyaXB0IG9iamVjdCB3aXRoIHRoZSBJRCBhbmQgdXBkYXRlZCBkYXRhLlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyB1cGRhdGUobmFtZTogc3RyaW5nLCBlbnRyeTogYW55KTogdm9pZCB7XG5cdFx0RGF0YVN0b3JlRmFjYWRlLnVwZGF0ZShuYW1lLCBKU09OLnN0cmluZ2lmeShlbnRyeSkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIExpc3RzIGVudHJpZXMgYmFzZWQgb24gb3B0aW9uYWwgZmlsdGVyaW5nLCBzb3J0aW5nLCBhbmQgcGFnaW5hdGlvbiBvcHRpb25zLlxuXHQgKiBAcGFyYW0gbmFtZSBUaGUgZW50aXR5L3RhYmxlIG5hbWUuXG5cdCAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIHtAbGluayBPcHRpb25zfSBmb3IgcXVlcnkgZXhlY3V0aW9uLlxuXHQgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBKYXZhU2NyaXB0IG9iamVjdHMuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGxpc3QobmFtZTogc3RyaW5nLCBvcHRpb25zPzogT3B0aW9ucyk6IGFueVtdIHtcblx0XHRjb25zdCByZXN1bHQgPSBEYXRhU3RvcmVGYWNhZGUubGlzdChuYW1lLCBvcHRpb25zID8gSlNPTi5zdHJpbmdpZnkob3B0aW9ucykgOiBudWxsKTtcblx0XHRyZXR1cm4gU3RvcmUucGFyc2VSZXN1bHQocmVzdWx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb3VudHMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGJhc2VkIG9uIG9wdGlvbmFsIGZpbHRlcmluZyBvcHRpb25zLlxuXHQgKiBAcGFyYW0gbmFtZSBUaGUgZW50aXR5L3RhYmxlIG5hbWUuXG5cdCAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIHtAbGluayBPcHRpb25zfSBmb3IgcXVlcnkgZXhlY3V0aW9uLlxuXHQgKiBAcmV0dXJucyBUaGUgY291bnQgb2YgbWF0Y2hpbmcgZW50cmllcy5cblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgY291bnQobmFtZTogc3RyaW5nLCBvcHRpb25zPzogT3B0aW9ucyk6IG51bWJlciB7XG5cdFx0Y29uc3Qgb3B0aW9uc1N0cmluZyA9IG9wdGlvbnMgPyBKU09OLnN0cmluZ2lmeShvcHRpb25zKSA6IG51bGw7XG5cdFx0Y29uc3QgcmVzdWx0ID0gRGF0YVN0b3JlRmFjYWRlLmNvdW50KG5hbWUsIG9wdGlvbnNTdHJpbmcpO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIGEgc2luZ2xlIGVudHJ5IGJ5IGl0cyBJRC5cblx0ICogQHBhcmFtIG5hbWUgVGhlIGVudGl0eS90YWJsZSBuYW1lLlxuXHQgKiBAcGFyYW0gaWQgVGhlIElEIG9mIHRoZSBlbnRyeS5cblx0ICogQHJldHVybnMgVGhlIGVudHJ5IG9iamVjdCwgb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZC5cblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgZ2V0KG5hbWU6IHN0cmluZywgaWQ6IGFueSk6IGFueSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gRGF0YVN0b3JlRmFjYWRlLmdldChuYW1lLCBpZCk7XG5cdFx0Ly8gQXNzdW1pbmcgdGhlIG5hdGl2ZSBBUEkgcmV0dXJucyBudWxsL3VuZGVmaW5lZCBvciBhbiBlbXB0eSBKU09OIHN0cmluZyBpZiBub3QgZm91bmQsIFxuXHRcdC8vIG90aGVyd2lzZSBKU09OLnBhcnNlIGhhbmRsZXMgdGhlIGNvbnZlcnNpb24uXG5cdFx0aWYgKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHVuZGVmaW5lZCB8fCByZXN1bHQgPT09IFwiXCIpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiBTdG9yZS5wYXJzZVJlc3VsdChyZXN1bHQpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBEZWxldGVzIGFuIGVudHJ5IGJ5IGl0cyBJRC5cblx0ICogQHBhcmFtIG5hbWUgVGhlIGVudGl0eS90YWJsZSBuYW1lLlxuXHQgKiBAcGFyYW0gaWQgVGhlIElEIG9mIHRoZSBlbnRyeSB0byByZW1vdmUuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIHJlbW92ZShuYW1lOiBzdHJpbmcsIGlkOiBhbnkpOiB2b2lkIHtcblx0XHREYXRhU3RvcmVGYWNhZGUuZGVsZXRlRW50cnkobmFtZSwgaWQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZpbmRzIGVudHJpZXMgbWF0Y2hpbmcgYW4gZXhhbXBsZSBvYmplY3QgKHF1ZXJ5LWJ5LWV4YW1wbGUpLlxuXHQgKiBAcGFyYW0gbmFtZSBUaGUgZW50aXR5L3RhYmxlIG5hbWUuXG5cdCAqIEBwYXJhbSBleGFtcGxlIEFuIG9iamVjdCBjb250YWluaW5nIHByb3BlcnRpZXMgdG8gbWF0Y2guXG5cdCAqIEBwYXJhbSBsaW1pdCBNYXhpbXVtIG51bWJlciBvZiByZXN1bHRzIHRvIHJldHVybi5cblx0ICogQHBhcmFtIG9mZnNldCBOdW1iZXIgb2YgcmVzdWx0cyB0byBza2lwLlxuXHQgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBtYXRjaGluZyBKYXZhU2NyaXB0IG9iamVjdHMuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGZpbmQobmFtZTogc3RyaW5nLCBleGFtcGxlOiBhbnksIGxpbWl0OiBudW1iZXIgPSAxMDAsIG9mZnNldDogbnVtYmVyID0gMCk6IGFueVtdIHtcblx0XHRjb25zdCByZXN1bHQgPSBEYXRhU3RvcmVGYWNhZGUuZmluZChuYW1lLCBKU09OLnN0cmluZ2lmeShleGFtcGxlKSwgbGltaXQsIG9mZnNldCk7XG5cdFx0cmV0dXJuIFN0b3JlLnBhcnNlUmVzdWx0KHJlc3VsdCk7XG5cdH1cblxuXHQvKipcblx0ICogUXVlcmllcyBhbGwgZW50cmllcyBmb3IgYSBnaXZlbiBzY3JpcHQgd2l0aCBwYWdpbmF0aW9uLlxuXHQgKiBAcGFyYW0gcXVlcnkgVGhlIHF1ZXJ5IHNjcmlwdC5cblx0ICogQHBhcmFtIGxpbWl0IE1heGltdW0gbnVtYmVyIG9mIHJlc3VsdHMgdG8gcmV0dXJuLlxuXHQgKiBAcGFyYW0gb2Zmc2V0IE51bWJlciBvZiByZXN1bHRzIHRvIHNraXAuXG5cdCAqIEByZXR1cm5zIEFuIGFycmF5IG9mIEphdmFTY3JpcHQgb2JqZWN0cy5cblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgcXVlcnkocXVlcnk6IHN0cmluZywgcGFyYW1ldGVycz86IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgRGF0ZSB8IFR5cGVkUXVlcnlQYXJhbWV0ZXIgfCBOYW1lZFF1ZXJ5UGFyYW1ldGVyKVtdLCBsaW1pdDogbnVtYmVyID0gMTAwLCBvZmZzZXQ6IG51bWJlciA9IDApOiBhbnlbXSB7XG5cdFx0bGV0IGFycjogYW55W10gPSBbXTtcblx0XHRpZiAocGFyYW1ldGVycyA9PSBudWxsKSB7XG5cdFx0XHRhcnIgPSBbXTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwYXJhbWV0ZXJzID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHBhcmFtZXRlcnMpO1xuXHRcdFx0XHRpZiAoIUFycmF5LmlzQXJyYXkocGFyc2VkKSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIklucHV0IHBhcmFtZXRlciBzdHJpbmcgbXVzdCByZXByZXNlbnQgYSBKU09OIGFycmF5XCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFyciA9IHBhcnNlZDtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBKU09OIHBhcmFtZXRlcnM6IFwiICsgZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHBhcmFtZXRlcnMpKSB7XG5cdFx0XHRhcnIgPSBwYXJhbWV0ZXJzO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXJzIG11c3QgYmUgZWl0aGVyIGFuIGFycmF5IG9yIGEgSlNPTiBzdHJpbmdcIik7XG5cdFx0fVxuXG5cdFx0aWYgKGFyci5sZW5ndGggPT09IDApIHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IERhdGFTdG9yZUZhY2FkZS5xdWVyeShxdWVyeSwgbnVsbCwgbGltaXQsIG9mZnNldCk7XG5cdFx0XHRyZXR1cm4gU3RvcmUucGFyc2VSZXN1bHQocmVzdWx0KTtcblx0XHR9XG5cblx0XHRjb25zdCBmaXJzdCA9IGFyclswXTtcblxuXHRcdC8vIE5hbWVkUXVlcnlQYXJhbWV0ZXIgKGhhcyBuYW1lICsgdHlwZSlcblx0XHRpZiAoZmlyc3QgJiYgdHlwZW9mIGZpcnN0ID09PSBcIm9iamVjdFwiICYmIFwibmFtZVwiIGluIGZpcnN0ICYmIFwidHlwZVwiIGluIGZpcnN0KSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBEYXRhU3RvcmVGYWNhZGUucXVlcnlOYW1lZChxdWVyeSwgSlNPTi5zdHJpbmdpZnkoYXJyKSwgbGltaXQsIG9mZnNldCk7XG5cdFx0XHRyZXR1cm4gU3RvcmUucGFyc2VSZXN1bHQocmVzdWx0KTtcblx0XHR9XG5cblx0XHQvLyBUeXBlZFF1ZXJ5UGFyYW1ldGVyIChoYXMgdHlwZSwgbm8gbmFtZSlcblx0XHRpZiAoZmlyc3QgJiYgdHlwZW9mIGZpcnN0ID09PSBcIm9iamVjdFwiICYmIFwidHlwZVwiIGluIGZpcnN0ICYmICEoXCJuYW1lXCIgaW4gZmlyc3QpKSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBEYXRhU3RvcmVGYWNhZGUucXVlcnkocXVlcnksIEpTT04uc3RyaW5naWZ5KGFyciksIGxpbWl0LCBvZmZzZXQpO1xuXHRcdFx0cmV0dXJuIFN0b3JlLnBhcnNlUmVzdWx0KHJlc3VsdCk7XG5cdFx0fVxuXG5cdFx0Ly8gUHJpbWl0aXZlIGFycmF5XG5cdFx0aWYgKFxuXHRcdFx0YXJyLmV2ZXJ5KFxuXHRcdFx0XHQodikgPT5cblx0XHRcdFx0XHR0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiB8fFxuXHRcdFx0XHRcdHR5cGVvZiB2ID09PSBcIm51bWJlclwiIHx8XG5cdFx0XHRcdFx0dHlwZW9mIHYgPT09IFwiYm9vbGVhblwiIHx8XG5cdFx0XHRcdFx0diBpbnN0YW5jZW9mIERhdGUgfHxcblx0XHRcdFx0XHRBcnJheS5pc0FycmF5KHYpXG5cdFx0XHQpXG5cdFx0KSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBEYXRhU3RvcmVGYWNhZGUucXVlcnkocXVlcnksIEpTT04uc3RyaW5naWZ5KGFyciksIGxpbWl0LCBvZmZzZXQpO1xuXHRcdFx0cmV0dXJuIFN0b3JlLnBhcnNlUmVzdWx0KHJlc3VsdCk7XG5cdFx0fVxuXG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgcGFyYW1ldGVyIGZvcm1hdDogXCIgKyBKU09OLnN0cmluZ2lmeShwYXJhbWV0ZXJzKSk7XG5cdH1cblxuXHQvKipcblx0ICogUXVlcmllcyBhbGwgZW50cmllcyBmb3IgYSBnaXZlbiBlbnRpdHkgbmFtZSB3aXRob3V0IHBhZ2luYXRpb24uXG5cdCAqIEBwYXJhbSBxdWVyeSBUaGUgZW50aXR5L3RhYmxlIG5hbWUuXG5cdCAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGFsbCBKYXZhU2NyaXB0IG9iamVjdHMuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIHF1ZXJ5TmF0aXZlKHF1ZXJ5OiBzdHJpbmcsIHBhcmFtZXRlcnM/OiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IERhdGUgfCBUeXBlZFF1ZXJ5UGFyYW1ldGVyIHwgTmFtZWRRdWVyeVBhcmFtZXRlcilbXSwgbGltaXQ6IG51bWJlciA9IDEwMCwgb2Zmc2V0OiBudW1iZXIgPSAwKTogYW55W10ge1xuXHRcdGxldCBhcnI6IGFueVtdID0gW107XG5cdFx0aWYgKHBhcmFtZXRlcnMgPT0gbnVsbCkge1xuXHRcdFx0YXJyID0gW107XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgcGFyYW1ldGVycyA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShwYXJhbWV0ZXJzKTtcblx0XHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KHBhcnNlZCkpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJJbnB1dCBwYXJhbWV0ZXIgc3RyaW5nIG11c3QgcmVwcmVzZW50IGEgSlNPTiBhcnJheVwiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhcnIgPSBwYXJzZWQ7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgSlNPTiBwYXJhbWV0ZXJzOiBcIiArIGUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwYXJhbWV0ZXJzKSkge1xuXHRcdFx0YXJyID0gcGFyYW1ldGVycztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVycyBtdXN0IGJlIGVpdGhlciBhbiBhcnJheSBvciBhIEpTT04gc3RyaW5nXCIpO1xuXHRcdH1cblxuXHRcdGlmIChhcnIubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBEYXRhU3RvcmVGYWNhZGUucXVlcnlOYXRpdmUocXVlcnksIG51bGwsIGxpbWl0LCBvZmZzZXQpO1xuXHRcdFx0cmV0dXJuIFN0b3JlLnBhcnNlUmVzdWx0KHJlc3VsdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZmlyc3QgPSBhcnJbMF07XG5cblx0XHQvLyBOYW1lZFF1ZXJ5UGFyYW1ldGVyIChoYXMgbmFtZSArIHR5cGUpXG5cdFx0aWYgKGZpcnN0ICYmIHR5cGVvZiBmaXJzdCA9PT0gXCJvYmplY3RcIiAmJiBcIm5hbWVcIiBpbiBmaXJzdCAmJiBcInR5cGVcIiBpbiBmaXJzdCkge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gRGF0YVN0b3JlRmFjYWRlLnF1ZXJ5TmF0aXZlTmFtZWQocXVlcnksIEpTT04uc3RyaW5naWZ5KGFyciksIGxpbWl0LCBvZmZzZXQpO1xuXHRcdFx0cmV0dXJuIFN0b3JlLnBhcnNlUmVzdWx0KHJlc3VsdCk7XG5cdFx0fVxuXG5cdFx0Ly8gVHlwZWRRdWVyeVBhcmFtZXRlciAoaGFzIHR5cGUsIG5vIG5hbWUpXG5cdFx0aWYgKGZpcnN0ICYmIHR5cGVvZiBmaXJzdCA9PT0gXCJvYmplY3RcIiAmJiBcInR5cGVcIiBpbiBmaXJzdCAmJiAhKFwibmFtZVwiIGluIGZpcnN0KSkge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gRGF0YVN0b3JlRmFjYWRlLnF1ZXJ5TmF0aXZlKHF1ZXJ5LCBKU09OLnN0cmluZ2lmeShhcnIpLCBsaW1pdCwgb2Zmc2V0KTtcblx0XHRcdHJldHVybiBTdG9yZS5wYXJzZVJlc3VsdChyZXN1bHQpO1xuXHRcdH1cblxuXHRcdC8vIFByaW1pdGl2ZSBhcnJheVxuXHRcdGlmIChcblx0XHRcdGFyci5ldmVyeShcblx0XHRcdFx0KHYpID0+XG5cdFx0XHRcdFx0dHlwZW9mIHYgPT09IFwic3RyaW5nXCIgfHxcblx0XHRcdFx0XHR0eXBlb2YgdiA9PT0gXCJudW1iZXJcIiB8fFxuXHRcdFx0XHRcdHR5cGVvZiB2ID09PSBcImJvb2xlYW5cIiB8fFxuXHRcdFx0XHRcdHYgaW5zdGFuY2VvZiBEYXRlIHx8XG5cdFx0XHRcdFx0QXJyYXkuaXNBcnJheSh2KVxuXHRcdFx0KVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gRGF0YVN0b3JlRmFjYWRlLnF1ZXJ5TmF0aXZlKHF1ZXJ5LCBKU09OLnN0cmluZ2lmeShhcnIpLCBsaW1pdCwgb2Zmc2V0KTtcblx0XHRcdHJldHVybiBTdG9yZS5wYXJzZVJlc3VsdChyZXN1bHQpO1xuXHRcdH1cblxuXHRcdHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHBhcmFtZXRlciBmb3JtYXQ6IFwiICsgSlNPTi5zdHJpbmdpZnkocGFyYW1ldGVycykpO1xuXHR9XG5cblx0Ly8gLS0tIE1ldGFkYXRhIEdldHRlcnMgLS0tXG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG5hbWUgb2YgdGhlIGVudGl0eSBhc3NvY2lhdGVkIHdpdGggdGhlIHN0b3JlIG5hbWUuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGdldEVudGl0eU5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gRGF0YVN0b3JlRmFjYWRlLmdldEVudGl0eU5hbWUobmFtZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdW5kZXJseWluZyBkYXRhYmFzZSB0YWJsZSBuYW1lIGZvciB0aGUgZW50aXR5LlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBnZXRUYWJsZU5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gRGF0YVN0b3JlRmFjYWRlLmdldFRhYmxlTmFtZShuYW1lKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcm9wZXJ0eSBuYW1lIHVzZWQgYXMgdGhlIElEIGZpZWxkIGluIHRoZSBlbnRpdHkgb2JqZWN0LlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBnZXRJZE5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gRGF0YVN0b3JlRmFjYWRlLmdldElkTmFtZShuYW1lKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB1bmRlcmx5aW5nIGRhdGFiYXNlIGNvbHVtbiBuYW1lIHVzZWQgZm9yIHRoZSBJRCBmaWVsZC5cblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgZ2V0SWRDb2x1bW4obmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gRGF0YVN0b3JlRmFjYWRlLmdldElkQ29sdW1uKG5hbWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFBhcnNlIGEgSlNPTiBzdHJpbmcgYW5kIHJldml2ZSBJU08gZGF0ZSBzdHJpbmdzIGludG8gSlMgRGF0ZSBvYmplY3RzLlxuXHQgKiBJdCBoYW5kbGVzIGJvdGggZnVsbCBJU08gdGltZXN0YW1wcyAod2l0aCB0aW1lem9uZSkgYW5kIGRhdGUtb25seSBzdHJpbmdzIChZWVlZLU1NLUREKS5cblx0ICogUmV0dXJucyB1bmRlZmluZWQgZm9yIG51bGwvZW1wdHkgaW5wdXRzLlxuXHQgKi9cblx0cHJpdmF0ZSBzdGF0aWMgcGFyc2VSZXN1bHQocmVzdWx0OiBhbnkpOiBhbnkge1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB1bmRlZmluZWQgfHwgcmVzdWx0ID09PSAnJykge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiByZXN1bHQgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHQvLyBhbHJlYWR5IGFuIG9iamVjdC9hcnJheVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cblx0XHQvLyBBY2NlcHQgdGltZXpvbmUgb2Zmc2V0cyB3aXRoIG9yIHdpdGhvdXQgY29sb24gKGUuZy4gKzAwOjAwIG9yICswMDAwKVxuXHRcdGNvbnN0IElTT19EQVRFVElNRSA9IC9eXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn0oPzpcXC5cXGQrKT8oPzpafFsrXFwtXVxcZHsyfTo/XFxkezJ9KSQvO1xuXHRcdGNvbnN0IERBVEVfT05MWSA9IC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0kLztcblx0XHRjb25zdCBUWl9OT19DT0xPTiA9IC8oWytcXC1dXFxkezJ9KShcXGR7Mn0pJC87XG5cdFx0Ly8gU3BhY2Utc2VwYXJhdGVkIGRhdGV0aW1lOiBcIllZWVktTU0tREQgSEg6TU06U1NcIiAob3B0aW9uYWxseSB3aXRoIGZyYWN0aW9uYWwgc2Vjb25kcyBhbmQgdGltZXpvbmUpXG5cdFx0Y29uc3QgU1BBQ0VfREFURVRJTUUgPSAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9IFxcZHsyfTpcXGR7Mn06XFxkezJ9KD86XFwuXFxkKyk/KD86WnxbK1xcLV1cXGR7Mn06P1xcZHsyfSk/JC87XG5cdFx0Ly8gVGltZS1vbmx5IHN0cmluZ3MgbGlrZSBcIjExOjI5OjMzXCIgb3IgXCIxMToyOTozMy4xMjNcIlxuXHRcdGNvbnN0IFRJTUVfT05MWSA9IC9eXFxkezJ9OlxcZHsyfTpcXGR7Mn0oPzpcXC5cXGQrKT8kLztcblx0XHQvLyBFcG9jaCBzdHJpbmdzOiAxMy1kaWdpdCBtcyBvciAxMC1kaWdpdCBzZWNvbmRzXG5cdFx0Y29uc3QgRVBPQ0hfTVMgPSAvXlsrXFwtXT9cXGR7MTN9JC87XG5cdFx0Y29uc3QgRVBPQ0hfUyA9IC9eWytcXC1dP1xcZHsxMH0kLztcblxuXHRcdHJldHVybiBKU09OLnBhcnNlKHJlc3VsdCwgKGtleSwgdmFsdWUpID0+IHtcblx0XHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdGNvbnN0IHMgPSB2YWx1ZS50cmltKCk7XG5cblx0XHRcdFx0Ly8gRXBvY2ggbWlsbGlzZWNvbmQvc2Vjb25kIHN0cmluZ3Ncblx0XHRcdFx0aWYgKEVQT0NIX01TLnRlc3QocykpIHtcblx0XHRcdFx0XHRjb25zdCBtcyA9IHBhcnNlSW50KHMsIDEwKTtcblx0XHRcdFx0XHRyZXR1cm4gbmV3IERhdGUobXMpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChFUE9DSF9TLnRlc3QocykpIHtcblx0XHRcdFx0XHRjb25zdCBtcyA9IHBhcnNlSW50KHMsIDEwKSAqIDEwMDA7XG5cdFx0XHRcdFx0cmV0dXJuIG5ldyBEYXRlKG1zKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFNwYWNlLXNlcGFyYXRlZCBkYXRldGltZXM6IG5vcm1hbGl6ZSB0byBJU08gYW5kIHBhcnNlXG5cdFx0XHRcdGlmIChTUEFDRV9EQVRFVElNRS50ZXN0KHMpKSB7XG5cdFx0XHRcdFx0bGV0IHYgPSBzLnJlcGxhY2UoJyAnLCAnVCcpO1xuXHRcdFx0XHRcdGlmIChUWl9OT19DT0xPTi50ZXN0KHYpKSB7XG5cdFx0XHRcdFx0XHR2ID0gdi5yZXBsYWNlKFRaX05PX0NPTE9OLCAnJDE6JDInKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgZCA9IG5ldyBEYXRlKHYpO1xuXHRcdFx0XHRcdGlmICghaXNOYU4oZC5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUaW1lLW9ubHkgc3RyaW5nczogYXR0YWNoIGN1cnJlbnQgVVRDIGRhdGUgYW5kIHBhcnNlIGFzIFVUQ1xuXHRcdFx0XHRpZiAoVElNRV9PTkxZLnRlc3QocykpIHtcblx0XHRcdFx0XHRjb25zdCBtID0gcy5tYXRjaCgvKFxcZHsyfSk6KFxcZHsyfSk6KFxcZHsyfSkoPzpcXC4oXFxkKykpPy8pO1xuXHRcdFx0XHRcdGlmIChtKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBoaCA9IHBhcnNlSW50KG1bMV0sIDEwKTtcblx0XHRcdFx0XHRcdGNvbnN0IG1tID0gcGFyc2VJbnQobVsyXSwgMTApO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc3MgPSBwYXJzZUludChtWzNdLCAxMCk7XG5cdFx0XHRcdFx0XHRjb25zdCBmcmFjID0gbVs0XSA/IChtWzRdICsgJzAwMCcpLnN1YnN0cmluZygwLCAzKSA6ICcwMDAnO1xuXHRcdFx0XHRcdFx0Y29uc3QgbXMgPSBwYXJzZUludChmcmFjLCAxMCk7XG5cdFx0XHRcdFx0XHRjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuXHRcdFx0XHRcdFx0Y29uc3QgZCA9IG5ldyBEYXRlKERhdGUuVVRDKG5vdy5nZXRVVENGdWxsWWVhcigpLCBub3cuZ2V0VVRDTW9udGgoKSwgbm93LmdldFVUQ0RhdGUoKSwgaGgsIG1tLCBzcywgbXMpKTtcblx0XHRcdFx0XHRcdHJldHVybiBkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChJU09fREFURVRJTUUudGVzdChzKSB8fCBEQVRFX09OTFkudGVzdChzKSkge1xuXHRcdFx0XHRcdC8vIG5vcm1hbGl6ZSB0aW1lem9uZSB3aXRob3V0IGNvbG9uIChlLmcuICswMDAwIC0+ICswMDowMCkgYmVjYXVzZSBEYXRlIHBhcnNpbmdcblx0XHRcdFx0XHQvLyBwcmVmZXJzIHRoZSBjb2xvbi1zZXBhcmF0ZWQgb2Zmc2V0IGluIG1hbnkgSlMgZW5naW5lc1xuXHRcdFx0XHRcdGxldCB2ID0gcztcblx0XHRcdFx0XHRpZiAoVFpfTk9fQ09MT04udGVzdCh2KSkge1xuXHRcdFx0XHRcdFx0diA9IHYucmVwbGFjZShUWl9OT19DT0xPTiwgJyQxOiQyJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IGQgPSBuZXcgRGF0ZSh2KTtcblx0XHRcdFx0XHRpZiAoIWlzTmFOKGQuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fSk7XG5cdH1cblxufVxuXG4vLyBAdHMtaWdub3JlXG5pZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0Ly8gQHRz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
@@ -1,14 +1,43 @@
1
1
  import * as rs from "@aerokit/sdk/http/rs";
2
+ const ROUTES_KEY = /* @__PURE__ */ Symbol.for("dirigible.controller.routes");
3
+ const GLOBAL_ROUTES = globalThis[ROUTES_KEY] ?? (globalThis[ROUTES_KEY] = []);
2
4
  const router = rs.service();
3
- let instance = null;
4
- function Controller(ctr, context) {
5
- instance = new ctr();
5
+ function Controller(ctr) {
6
+ const instance = new ctr();
7
+ const routes = GLOBAL_ROUTES;
8
+ for (const route of routes) {
9
+ const fn = instance[route.propertyKey.name];
10
+ if (typeof fn === "function") {
11
+ ((fn2, instance2) => {
12
+ router.resource(route.path)[route.method]((ctx, req, res) => {
13
+ const body = req.json ? req.json() : null;
14
+ const result = fn2.call(instance2, body, ctx, req, res);
15
+ if (result !== void 0) {
16
+ res.json(result);
17
+ }
18
+ });
19
+ })(fn, instance);
20
+ }
21
+ }
6
22
  router.execute();
23
+ GLOBAL_ROUTES.length = 0;
7
24
  }
8
25
  function Documentation(documentation) {
9
26
  return function(value, context) {
10
27
  };
11
28
  }
29
+ function createRequestDecorator(httpMethod) {
30
+ return function(path) {
31
+ return function(target, propertyKey) {
32
+ GLOBAL_ROUTES.push({
33
+ controller: target.constructor,
34
+ method: httpMethod,
35
+ path: path || "/",
36
+ propertyKey
37
+ });
38
+ };
39
+ };
40
+ }
12
41
  const Get = createRequestDecorator("get");
13
42
  const Post = createRequestDecorator("post");
14
43
  const Put = createRequestDecorator("put");
@@ -16,23 +45,6 @@ const Patch = createRequestDecorator("patch");
16
45
  const Delete = createRequestDecorator("delete");
17
46
  const Head = createRequestDecorator("head");
18
47
  const Options = createRequestDecorator("options");
19
- function createRequestDecorator(httpMethod) {
20
- return function(path, consumesMimeTypes = ["*/*"], producesMimeTypes = ["application/json"]) {
21
- return function(target, propertyKey, descriptor) {
22
- const handler = descriptor ? descriptor.value : target;
23
- router.resource(path)[httpMethod]((ctx, req, res) => {
24
- handleRequest(req, res, ctx, handler);
25
- }).consumes(consumesMimeTypes).produces(producesMimeTypes);
26
- };
27
- };
28
- }
29
- function handleRequest(req, res, ctx, handler) {
30
- const body = req.json();
31
- const maybeResponseBody = handler.apply(instance || {}, [body, ctx, req, res]);
32
- if (maybeResponseBody) {
33
- res.json(maybeResponseBody);
34
- }
35
- }
36
48
  export {
37
49
  Controller,
38
50
  Delete,
@@ -44,4 +56,4 @@ export {
44
56
  Post,
45
57
  Put
46
58
  };
47
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2h0dHAvZGVjb3JhdG9ycy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0ICogYXMgcnMgZnJvbSBcIkBhZXJva2l0L3Nkay9odHRwL3JzXCJcblxuY29uc3Qgcm91dGVyID0gcnMuc2VydmljZSgpO1xubGV0IGluc3RhbmNlID0gbnVsbDtcblxuZXhwb3J0IGZ1bmN0aW9uIENvbnRyb2xsZXIoY3RyOiB7IG5ldygpIH0sIGNvbnRleHQ6IENsYXNzRGVjb3JhdG9yQ29udGV4dCk6IHZvaWQge1xuICAgIGluc3RhbmNlID0gbmV3IGN0cigpO1xuICAgIHJvdXRlci5leGVjdXRlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEb2N1bWVudGF0aW9uKGRvY3VtZW50YXRpb246IHN0cmluZykge1xuICByZXR1cm4gZnVuY3Rpb24gKFxuICAgIHZhbHVlOiBhbnksXG4gICAgY29udGV4dDogQ2xhc3NEZWNvcmF0b3JDb250ZXh0IHwgQ2xhc3NGaWVsZERlY29yYXRvckNvbnRleHQgfCBDbGFzc01ldGhvZERlY29yYXRvckNvbnRleHRcbiAgKSB7fTtcbn1cblxuZXhwb3J0IGNvbnN0IEdldCA9IGNyZWF0ZVJlcXVlc3REZWNvcmF0b3IoXCJnZXRcIilcbmV4cG9ydCBjb25zdCBQb3N0ID0gY3JlYXRlUmVxdWVzdERlY29yYXRvcihcInBvc3RcIilcbmV4cG9ydCBjb25zdCBQdXQgPSBjcmVhdGVSZXF1ZXN0RGVjb3JhdG9yKFwicHV0XCIpXG5leHBvcnQgY29uc3QgUGF0Y2ggPSBjcmVhdGVSZXF1ZXN0RGVjb3JhdG9yKFwicGF0Y2hcIilcbmV4cG9ydCBjb25zdCBEZWxldGUgPSBjcmVhdGVSZXF1ZXN0RGVjb3JhdG9yKFwiZGVsZXRlXCIpXG5leHBvcnQgY29uc3QgSGVhZCA9IGNyZWF0ZVJlcXVlc3REZWNvcmF0b3IoXCJoZWFkXCIpXG5leHBvcnQgY29uc3QgT3B0aW9ucyA9IGNyZWF0ZVJlcXVlc3REZWNvcmF0b3IoXCJvcHRpb25zXCIpXG5cbmZ1bmN0aW9uIGNyZWF0ZVJlcXVlc3REZWNvcmF0b3IoaHR0cE1ldGhvZCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocGF0aDogc3RyaW5nLCBjb25zdW1lc01pbWVUeXBlczogdW5kZWZpbmVkIHwgc3RyaW5nIHwgc3RyaW5nW10gPSBbJyovKiddLCBwcm9kdWNlc01pbWVUeXBlczogdW5kZWZpbmVkIHwgc3RyaW5nIHwgc3RyaW5nW10gPSBbJ2FwcGxpY2F0aW9uL2pzb24nXSk6IGFueSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcikge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IGRlc2NyaXB0b3IgPyBkZXNjcmlwdG9yLnZhbHVlIDogdGFyZ2V0O1xuICAgICAgICAgICAgcm91dGVyLnJlc291cmNlKHBhdGgpW2h0dHBNZXRob2RdKChjdHgsIHJlcSwgcmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgaGFuZGxlUmVxdWVzdChyZXEsIHJlcywgY3R4LCBoYW5kbGVyKTtcbiAgICAgICAgICAgIH0pLmNvbnN1bWVzKGNvbnN1bWVzTWltZVR5cGVzKS5wcm9kdWNlcyhwcm9kdWNlc01pbWVUeXBlcyk7XG4gICAgICAgIH07XG4gICAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVSZXF1ZXN0KHJlcSwgcmVzLCBjdHgsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBib2R5ID0gcmVxLmpzb24oKTtcbiAgICBjb25zdCBtYXliZVJlc3BvbnNlQm9keSA9IGhhbmRsZXIuYXBwbHkoaW5zdGFuY2UgfHwge30sIFtib2R5LCBjdHgsIHJlcSwgcmVzXSk7XG4gICAgaWYgKG1heWJlUmVzcG9uc2VCb2R5KSB7XG4gICAgICAgIHJlcy5qc29uKG1heWJlUmVzcG9uc2VCb2R5KTtcbiAgICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiQUFBQSxZQUFZLFFBQVE7QUFFcEIsTUFBTSxTQUFTLEdBQUcsUUFBUTtBQUMxQixJQUFJLFdBQVc7QUFFUixTQUFTLFdBQVcsS0FBZ0IsU0FBc0M7QUFDN0UsYUFBVyxJQUFJLElBQUk7QUFDbkIsU0FBTyxRQUFRO0FBQ25CO0FBRU8sU0FBUyxjQUFjLGVBQXVCO0FBQ25ELFNBQU8sU0FDTCxPQUNBLFNBQ0E7QUFBQSxFQUFDO0FBQ0w7QUFFTyxNQUFNLE1BQU0sdUJBQXVCLEtBQUs7QUFDeEMsTUFBTSxPQUFPLHVCQUF1QixNQUFNO0FBQzFDLE1BQU0sTUFBTSx1QkFBdUIsS0FBSztBQUN4QyxNQUFNLFFBQVEsdUJBQXVCLE9BQU87QUFDNUMsTUFBTSxTQUFTLHVCQUF1QixRQUFRO0FBQzlDLE1BQU0sT0FBTyx1QkFBdUIsTUFBTTtBQUMxQyxNQUFNLFVBQVUsdUJBQXVCLFNBQVM7QUFFdkQsU0FBUyx1QkFBdUIsWUFBWTtBQUN4QyxTQUFPLFNBQVUsTUFBYyxvQkFBbUQsQ0FBQyxLQUFLLEdBQUcsb0JBQW1ELENBQUMsa0JBQWtCLEdBQVE7QUFDckssV0FBTyxTQUFVLFFBQVEsYUFBYSxZQUFZO0FBQzlDLFlBQU0sVUFBVSxhQUFhLFdBQVcsUUFBUTtBQUNoRCxhQUFPLFNBQVMsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLEtBQUssS0FBSyxRQUFRO0FBQ2pELHNCQUFjLEtBQUssS0FBSyxLQUFLLE9BQU87QUFBQSxNQUN4QyxDQUFDLEVBQUUsU0FBUyxpQkFBaUIsRUFBRSxTQUFTLGlCQUFpQjtBQUFBLElBQzdEO0FBQUEsRUFDSjtBQUNKO0FBRUEsU0FBUyxjQUFjLEtBQUssS0FBSyxLQUFLLFNBQVM7QUFDM0MsUUFBTSxPQUFPLElBQUksS0FBSztBQUN0QixRQUFNLG9CQUFvQixRQUFRLE1BQU0sWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssS0FBSyxHQUFHLENBQUM7QUFDN0UsTUFBSSxtQkFBbUI7QUFDbkIsUUFBSSxLQUFLLGlCQUFpQjtBQUFBLEVBQzlCO0FBQ0o7IiwKICAibmFtZXMiOiBbXQp9Cg==
59
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2h0dHAvZGVjb3JhdG9ycy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0ICogYXMgcnMgZnJvbSBcIkBhZXJva2l0L3Nkay9odHRwL3JzXCI7XG5cbmNvbnN0IFJPVVRFU19LRVkgPSBTeW1ib2wuZm9yKFwiZGlyaWdpYmxlLmNvbnRyb2xsZXIucm91dGVzXCIpO1xuXG5jb25zdCBHTE9CQUxfUk9VVEVTOiBhbnlbXSA9XG4gICAgKGdsb2JhbFRoaXMgYXMgYW55KVtST1VURVNfS0VZXSA/P1xuICAgICgoZ2xvYmFsVGhpcyBhcyBhbnkpW1JPVVRFU19LRVldID0gW10pO1xuXG5jb25zdCByb3V0ZXIgPSBycy5zZXJ2aWNlKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBDb250cm9sbGVyKGN0cjogeyBuZXcoKTogYW55IH0pIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBjdHIoKTtcbiAgICBjb25zdCByb3V0ZXMgPSBHTE9CQUxfUk9VVEVTO1xuICAgIGZvciAoY29uc3Qgcm91dGUgb2Ygcm91dGVzKSB7XG4gICAgICAgIGNvbnN0IGZuID0gaW5zdGFuY2Vbcm91dGUucHJvcGVydHlLZXkubmFtZV07XG4gICAgICAgIGlmICh0eXBlb2YgZm4gPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0KChmbiwgaW5zdGFuY2UpID0+IHtcblx0XHQgICAgICAgIHJvdXRlci5yZXNvdXJjZShyb3V0ZS5wYXRoKVtyb3V0ZS5tZXRob2RdKChjdHgsIHJlcSwgcmVzKSA9PiB7XG5cdFx0ICAgICAgICAgICAgY29uc3QgYm9keSA9IHJlcS5qc29uID8gcmVxLmpzb24oKSA6IG51bGw7XG5cdFx0ICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZm4uY2FsbChpbnN0YW5jZSwgYm9keSwgY3R4LCByZXEsIHJlcyk7XG5cdFx0ICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0ICAgICAgICAgICAgICAgIHJlcy5qc29uKHJlc3VsdCk7XG5cdFx0ICAgICAgICAgICAgfVxuXHRcdCAgICAgICAgfSk7XG5cdFx0ICAgIH0pKGZuLCBpbnN0YW5jZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByb3V0ZXIuZXhlY3V0ZSgpO1xuXHRHTE9CQUxfUk9VVEVTLmxlbmd0aCA9IDA7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIERvY3VtZW50YXRpb24oZG9jdW1lbnRhdGlvbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChcbiAgICAgICAgdmFsdWU6IGFueSxcbiAgICAgICAgY29udGV4dDogQ2xhc3NEZWNvcmF0b3JDb250ZXh0IHwgQ2xhc3NGaWVsZERlY29yYXRvckNvbnRleHQgfCBDbGFzc01ldGhvZERlY29yYXRvckNvbnRleHRcbiAgICApIHt9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSZXF1ZXN0RGVjb3JhdG9yKGh0dHBNZXRob2Q6IHN0cmluZykge1xuICAgIHJldHVybiBmdW5jdGlvbiAocGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpIHtcbiAgICAgICAgICAgIEdMT0JBTF9ST1VURVMucHVzaCh7XG4gICAgICAgICAgICAgICAgY29udHJvbGxlcjogdGFyZ2V0LmNvbnN0cnVjdG9yLFxuICAgICAgICAgICAgICAgIG1ldGhvZDogaHR0cE1ldGhvZCxcbiAgICAgICAgICAgICAgICBwYXRoOiBwYXRoIHx8IFwiL1wiLFxuICAgICAgICAgICAgICAgIHByb3BlcnR5S2V5XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9O1xufVxuXG5leHBvcnQgY29uc3QgR2V0ID0gY3JlYXRlUmVxdWVzdERlY29yYXRvcihcImdldFwiKTtcbmV4cG9ydCBjb25zdCBQb3N0ID0gY3JlYXRlUmVxdWVzdERlY29yYXRvcihcInBvc3RcIik7XG5leHBvcnQgY29uc3QgUHV0ID0gY3JlYXRlUmVxdWVzdERlY29yYXRvcihcInB1dFwiKTtcbmV4cG9ydCBjb25zdCBQYXRjaCA9IGNyZWF0ZVJlcXVlc3REZWNvcmF0b3IoXCJwYXRjaFwiKTtcbmV4cG9ydCBjb25zdCBEZWxldGUgPSBjcmVhdGVSZXF1ZXN0RGVjb3JhdG9yKFwiZGVsZXRlXCIpO1xuZXhwb3J0IGNvbnN0IEhlYWQgPSBjcmVhdGVSZXF1ZXN0RGVjb3JhdG9yKFwiaGVhZFwiKTtcbmV4cG9ydCBjb25zdCBPcHRpb25zID0gY3JlYXRlUmVxdWVzdERlY29yYXRvcihcIm9wdGlvbnNcIik7XG4iXSwKICAibWFwcGluZ3MiOiAiQUFBQSxZQUFZLFFBQVE7QUFFcEIsTUFBTSxhQUFhLHVCQUFPLElBQUksNkJBQTZCO0FBRTNELE1BQU0sZ0JBQ0QsV0FBbUIsVUFBVSxNQUM1QixXQUFtQixVQUFVLElBQUksQ0FBQztBQUV4QyxNQUFNLFNBQVMsR0FBRyxRQUFRO0FBRW5CLFNBQVMsV0FBVyxLQUFxQjtBQUM1QyxRQUFNLFdBQVcsSUFBSSxJQUFJO0FBQ3pCLFFBQU0sU0FBUztBQUNmLGFBQVcsU0FBUyxRQUFRO0FBQ3hCLFVBQU0sS0FBSyxTQUFTLE1BQU0sWUFBWSxJQUFJO0FBQzFDLFFBQUksT0FBTyxPQUFPLFlBQVk7QUFDbkMsT0FBQyxDQUFDQSxLQUFJQyxjQUFhO0FBQ1osZUFBTyxTQUFTLE1BQU0sSUFBSSxFQUFFLE1BQU0sTUFBTSxFQUFFLENBQUMsS0FBSyxLQUFLLFFBQVE7QUFDekQsZ0JBQU0sT0FBTyxJQUFJLE9BQU8sSUFBSSxLQUFLLElBQUk7QUFDckMsZ0JBQU0sU0FBU0QsSUFBRyxLQUFLQyxXQUFVLE1BQU0sS0FBSyxLQUFLLEdBQUc7QUFDcEQsY0FBSSxXQUFXLFFBQVc7QUFDdEIsZ0JBQUksS0FBSyxNQUFNO0FBQUEsVUFDbkI7QUFBQSxRQUNKLENBQUM7QUFBQSxNQUNMLEdBQUcsSUFBSSxRQUFRO0FBQUEsSUFDYjtBQUFBLEVBQ0o7QUFFQSxTQUFPLFFBQVE7QUFDbEIsZ0JBQWMsU0FBUztBQUN4QjtBQUdPLFNBQVMsY0FBYyxlQUF1QjtBQUNqRCxTQUFPLFNBQ0gsT0FDQSxTQUNGO0FBQUEsRUFBQztBQUNQO0FBRUEsU0FBUyx1QkFBdUIsWUFBb0I7QUFDaEQsU0FBTyxTQUFVLE1BQWM7QUFDM0IsV0FBTyxTQUFVLFFBQWEsYUFBcUI7QUFDL0Msb0JBQWMsS0FBSztBQUFBLFFBQ2YsWUFBWSxPQUFPO0FBQUEsUUFDbkIsUUFBUTtBQUFBLFFBQ1IsTUFBTSxRQUFRO0FBQUEsUUFDZDtBQUFBLE1BQ0osQ0FBQztBQUFBLElBQ0w7QUFBQSxFQUNKO0FBQ0o7QUFFTyxNQUFNLE1BQU0sdUJBQXVCLEtBQUs7QUFDeEMsTUFBTSxPQUFPLHVCQUF1QixNQUFNO0FBQzFDLE1BQU0sTUFBTSx1QkFBdUIsS0FBSztBQUN4QyxNQUFNLFFBQVEsdUJBQXVCLE9BQU87QUFDNUMsTUFBTSxTQUFTLHVCQUF1QixRQUFRO0FBQzlDLE1BQU0sT0FBTyx1QkFBdUIsTUFBTTtBQUMxQyxNQUFNLFVBQVUsdUJBQXVCLFNBQVM7IiwKICAibmFtZXMiOiBbImZuIiwgImluc3RhbmNlIl0KfQo=
@@ -132,6 +132,7 @@ class HttpController {
132
132
  }
133
133
  } else {
134
134
  logger.error("No suitable resource handler for Resource[{}], Method[{}], Content-Type[{}], Accept[{}] found", resourcePath, method.toUpperCase(), contentTypeHeader, acceptsHeader);
135
+ logger.error("Registered resource handlers for Resource[{}] are [{}]", resourcePath, JSON.stringify(_oConfiguration));
135
136
  this.sendError(response2.BAD_REQUEST, void 0, "Bad Request", "No suitable processor for this request.");
136
137
  }
137
138
  }
@@ -284,4 +285,4 @@ export {
284
285
  HttpController,
285
286
  service
286
287
  };
287
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2h0dHAvcnMvcmVzb3VyY2UtaHR0cC1jb250cm9sbGVyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBSZXNwb25zZSBhcyByZXNwb25zZSB9IGZyb20gXCIuLi9yZXNwb25zZVwiO1xuaW1wb3J0IHsgUmVxdWVzdCBhcyByZXF1ZXN0IH0gZnJvbSBcIi4uL3JlcXVlc3RcIjtcbmltcG9ydCB7IFJlc291cmNlTWFwcGluZ3MgfSBmcm9tIFwiLi9yZXNvdXJjZS1tYXBwaW5nc1wiO1xuaW1wb3J0IHsgTG9nZ2luZyB9IGZyb20gXCJAYWVyb2tpdC9zZGsvbG9nXCI7XG5cbi8vIERlY2xhcmF0aW9uIGZvciB0aGUgZXh0ZXJuYWwgZGlyaWdpYmxlUmVxdWlyZSBmdW5jdGlvbiBhbmQgaXRzIGRlcGVuZGVuY3lcbmRlY2xhcmUgZnVuY3Rpb24gZGlyaWdpYmxlUmVxdWlyZShtb2R1bGU6IHN0cmluZyk6IGFueTtcbmNvbnN0IHsgbWF0Y2ggfSA9IGRpcmlnaWJsZVJlcXVpcmUoXCJtb2R1bGVzL3NyYy9odHRwL3BhdGgtdG8tcmVnZXhwLzYuMi4xL2luZGV4LmpzXCIpO1xuXG5jb25zdCBsb2dnZXI6IGFueSA9IExvZ2dpbmcuZ2V0TG9nZ2VyKCdodHRwLnJzLmNvbnRyb2xsZXInKTtcblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIHRoZSBjb250ZXh0IG9iamVjdCBwYXNzZWQgdG8gaGFuZGxlciBmdW5jdGlvbnMgKGJlZm9yZSwgc2VydmUsIGNhdGNoKS5cbiAqL1xuaW50ZXJmYWNlIFJlcXVlc3RDb250ZXh0IHtcbiAgICBwYXRoUGFyYW1ldGVyczogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgICBxdWVyeVBhcmFtZXRlcnM6IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gICAgcmVzcG9uc2U6IGFueTtcbiAgICByZXM6IGFueTtcbiAgICByZXF1ZXN0OiBhbnk7XG4gICAgcmVxOiBhbnk7XG4gICAgLy8gQ29udGV4dCBwcm9wZXJ0aWVzIGZvciBlcnJvciBoYW5kbGluZyBtaWdodCBhbHNvIGJlIGF0dGFjaGVkIGhlcmVcbiAgICBzdXBwcmVzc1N0YWNrPzogYm9vbGVhbjtcbiAgICBodHRwRXJyb3JDb2RlPzogbnVtYmVyO1xuICAgIGVycm9yTWVzc2FnZT86IHN0cmluZztcbiAgICBlcnJvck5hbWU/OiBzdHJpbmc7XG4gICAgZXJyb3JDb2RlPzogYW55O1xufVxuXG5mdW5jdGlvbiBnZXRSZXF1ZXN0KCk6IGFueSB7XG4gICAgcmV0dXJuIHJlcXVlc3Q7XG59XG5mdW5jdGlvbiBnZXRSZXNwb25zZSgpOiBhbnkge1xuICAgIHJldHVybiByZXNwb25zZTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc2VydmljZSAoSHR0cENvbnRyb2xsZXIpIGluc3RhbmNlLCBvcHRpb25hbGx5IGluaXRpYWxpemVkIHdpdGggb01hcHBpbmdzLlxuICpcbiAqIEBwYXJhbSBvQ29uZmlnIENvbmZpZ3VyYXRpb24gb2JqZWN0IG9yIGNvbmZpZ3VyYXRpb24gYnVpbGRlciB3aXRoIGNvbmZpZ3VyYXRpb24oKSBnZXR0ZXIgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIG5ldyBIdHRwQ29udHJvbGxlciBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcnZpY2Uob0NvbmZpZz86IGFueSk6IEh0dHBDb250cm9sbGVyIHtcbiAgICBsZXQgY29uZmlnOiBSZXNvdXJjZU1hcHBpbmdzIHwgYW55O1xuICAgIGlmIChvQ29uZmlnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvQ29uZmlnID09PSAnb2JqZWN0JyB8fCBvQ29uZmlnIGluc3RhbmNlb2YgUmVzb3VyY2VNYXBwaW5ncykge1xuICAgICAgICAgICAgY29uZmlnID0gb0NvbmZpZztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IEh0dHBDb250cm9sbGVyKGNvbmZpZyk7XG59XG5cbi8qKlxuICogVGhlIG1haW4gY2xhc3MgZm9yIGhhbmRsaW5nIEhUVFAgcmVxdWVzdHMgYW5kIHJvdXRpbmcgdGhlbSB0byB0aGUgY29ycmVjdCByZXNvdXJjZSBoYW5kbGVycy5cbiAqL1xuZXhwb3J0IGNsYXNzIEh0dHBDb250cm9sbGVyIHtcblxuICAgIHJlc291cmNlOiBGdW5jdGlvbjtcbiAgICByZXNvdXJjZVBhdGg6IEZ1bmN0aW9uO1xuICAgIHJlc291cmNlTWFwcGluZ3M6IFJlc291cmNlTWFwcGluZ3M7XG5cbiAgICAvLyBJbmRleCBzaWduYXR1cmUgdG8gYWxsb3cgZHluYW1pYyBtZXRob2QgYXNzaWdubWVudCBpbiB0aGUgY29uc3RydWN0b3JcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RvciBmdW5jdGlvbiBmb3IgSHR0cENvbnRyb2xsZXIgaW5zdGFuY2VzLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9NYXBwaW5ncyBUaGUgbWFwcGluZ3MgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBjb250cm9sbGVyLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG9NYXBwaW5ncz86IFJlc291cmNlTWFwcGluZ3MgfCBhbnkpIHtcbiAgICAgICAgaWYgKG9NYXBwaW5ncyBpbnN0YW5jZW9mIFJlc291cmNlTWFwcGluZ3MpIHtcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2VNYXBwaW5ncyA9IG9NYXBwaW5ncztcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb01hcHBpbmdzID09PSAnb2JqZWN0JyB8fCBvTWFwcGluZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZU1hcHBpbmdzID0gbmV3IFJlc291cmNlTWFwcGluZ3Mob01hcHBpbmdzLCB0aGlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIERlZmF1bHQgaW5pdGlhbGl6YXRpb24gaWYgaW5wdXQgaXMgdW5leHBlY3RlZFxuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZU1hcHBpbmdzID0gbmV3IFJlc291cmNlTWFwcGluZ3Moe30sIHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWxpYXMgZm9yIHJlc291cmNlTWFwcGluZ3MucmVzb3VyY2VcbiAgICAgICAgdGhpcy5yZXNvdXJjZSA9IHRoaXMucmVzb3VyY2VQYXRoID0gdGhpcy5yZXNvdXJjZU1hcHBpbmdzLnJlc291cmNlUGF0aC5iaW5kKHRoaXMucmVzb3VyY2VNYXBwaW5ncyk7XG5cbiAgICAgICAgLy8gd2VhdmUtaW4gSFRUUCBtZXRob2QtYmFzZWQgZmFjdG9yeSBmdW5jdGlvbnMgLSBzaG9ydGN1dCBmb3Igc2VydmljZSgpLnJlc291cmNlKHNQYXRoKS5tZXRob2RcbiAgICAgICAgWydnZXQnLCAncG9zdCcsICdwdXQnLCAnZGVsZXRlJywgJ3JlbW92ZScsICdtZXRob2QnXS5mb3JFYWNoKChzTWV0aG9kTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0aGlzW3NNZXRob2ROYW1lXSA9ICguLi5hbGxBcmd1bWVudHM6IGFueVtdKTogSHR0cENvbnRyb2xsZXIgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhbGxBcmd1bWVudHMubGVuZ3RoIDwgMSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0luc3VmZmljaWVudCBhcmd1bWVudHMgcHJvdmlkZWQgdG8gSHR0cENvbnRyb2xsZXIgbWV0aG9kICcgKyBzTWV0aG9kTmFtZSArICcuJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBzUGF0aCBpcyBhbHdheXMgdGhlIGZpcnN0IGFyZ3VtZW50XG4gICAgICAgICAgICAgICAgbGV0IHNQYXRoID0gYWxsQXJndW1lbnRzWzBdO1xuICAgICAgICAgICAgICAgIGlmIChzUGF0aCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBzUGF0aCA9IFwiXCI7XG5cbiAgICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBhcmd1bWVudHMgKHNWZXJiLCBhcnJDb25zdW1lcywgYXJyUHJvZHVjZXMpIGFyZSB1c2VkIGJ5IFJlc291cmNlTWFwcGluZ3MuZmluZC9yZXNvdXJjZVxuICAgICAgICAgICAgICAgIGNvbnN0IHNWZXJiID0gYWxsQXJndW1lbnRzWzFdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyckNvbnN1bWVzID0gYWxsQXJndW1lbnRzWzJdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyclByb2R1Y2VzID0gYWxsQXJndW1lbnRzWzNdO1xuXG4gICAgICAgICAgICAgICAgLy8gRmluZCBleGlzdGluZyByZXNvdXJjZSBvciBjcmVhdGUgYSBuZXcgb25lIGJhc2VkIG9uIHRoZSBwYXRoIChhbmQgb3RoZXIgb3B0aW9uYWwgY29uc3RyYWludHMpXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb3VyY2U6IGFueSA9IHRoaXMucmVzb3VyY2VNYXBwaW5ncy5maW5kKHNQYXRoLCBzVmVyYiwgYXJyQ29uc3VtZXMsIGFyclByb2R1Y2VzKSB8fCB0aGlzLnJlc291cmNlTWFwcGluZ3MucmVzb3VyY2Uoc1BhdGgpO1xuXG4gICAgICAgICAgICAgICAgLy8gUGFzcyBhbGwgYXJndW1lbnRzICpleGNlcHQqIHRoZSBzUGF0aCB0byB0aGUgY29ycmVzcG9uZGluZyBtZXRob2Qgb2YgdGhlIHJlc291cmNlXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb3VyY2VNZXRob2RBcmdzID0gYWxsQXJndW1lbnRzLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIEV4ZWN1dGUgdGhlIG1ldGhvZCBvbiB0aGUgcmVzb3VyY2UgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICByZXNvdXJjZVtzTWV0aG9kTmFtZV0uYXBwbHkocmVzb3VyY2UsIHJlc291cmNlTWV0aG9kQXJncyk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3IgZXhlY3V0ZS5cbiAgICAgKi9cbiAgICBsaXN0ZW4ocmVxdWVzdDogYW55LCByZXNwb25zZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZXhlY3V0ZShyZXF1ZXN0LCByZXNwb25zZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgdGhlIHJlcXVlc3QgaGFuZGxpbmcgbG9naWMsIGZpbmRpbmcgdGhlIGJlc3QgbWF0Y2hpbmcgcmVzb3VyY2UgYW5kIGhhbmRsZXIuXG4gICAgICovXG4gICAgZXhlY3V0ZShyZXF1ZXN0PzogYW55LCByZXNwb25zZT86IGFueSk6IHZvaWQge1xuICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdCB8fCBnZXRSZXF1ZXN0KCk7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RQYXRoOiBzdHJpbmcgPSByZXF1ZXN0LmdldFJlc291cmNlUGF0aCgpO1xuICAgICAgICBjb25zdCBtZXRob2Q6IHN0cmluZyA9IHJlcXVlc3QuZ2V0TWV0aG9kKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgX29Db25maWd1cmF0aW9uOiBhbnkgPSB0aGlzLnJlc291cmNlTWFwcGluZ3MuY29uZmlndXJhdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IG1hdGNoZXM6IGFueVtdID0gbWF0Y2hSZXF1ZXN0VXJsKHJlcXVlc3RQYXRoLCBtZXRob2QsIF9vQ29uZmlndXJhdGlvbik7XG4gICAgICAgIGxldCByZXNvdXJjZUhhbmRsZXI6IGFueTtcblxuICAgICAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzWzBdKSB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiSGFuZGxlcnM6IGFueVtdID0gX29Db25maWd1cmF0aW9uW21hdGNoZXNbMF0uZF1bbWV0aG9kXTtcbiAgICAgICAgICAgIGlmICh2ZXJiSGFuZGxlcnMpIHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZUhhbmRsZXIgPSB2ZXJiSGFuZGxlcnMuZmlsdGVyKChoYW5kbGVyRGVmKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaE1lZGlhVHlwZShyZXF1ZXN0LCBoYW5kbGVyRGVmLnByb2R1Y2VzLCBoYW5kbGVyRGVmLmNvbnN1bWVzKTtcbiAgICAgICAgICAgICAgICB9KVswXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3BvbnNlID0gcmVzcG9uc2UgfHwgZ2V0UmVzcG9uc2UoKTtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSByZXF1ZXN0LmdldFF1ZXJ5UGFyYW1ldGVyc01hcCgpIHx8IHt9O1xuICAgICAgICBjb25zdCBhY2NlcHRzSGVhZGVyOiBzdHJpbmdbXSA9IG5vcm1hbGl6ZU1lZGlhVHlwZUhlYWRlclZhbHVlKHJlcXVlc3QuZ2V0SGVhZGVyKCdBY2NlcHQnKSkgfHwgW107XG4gICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlSGVhZGVyOiBzdHJpbmdbXSA9IG5vcm1hbGl6ZU1lZGlhVHlwZUhlYWRlclZhbHVlKHJlcXVlc3QuZ2V0SGVhZGVyKCdDb250ZW50LVR5cGUnKSkgfHwgW107XG4gICAgICAgIGNvbnN0IHJlc291cmNlUGF0aDogc3RyaW5nID0gcmVxdWVzdFBhdGg7XG5cbiAgICAgICAgaWYgKHJlc291cmNlSGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgY3R4OiBSZXF1ZXN0Q29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICBcInBhdGhQYXJhbWV0ZXJzXCI6IHt9LFxuICAgICAgICAgICAgICAgIFwicXVlcnlQYXJhbWV0ZXJzXCI6IHt9LFxuICAgICAgICAgICAgICAgIFwicmVzcG9uc2VcIjogcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgXCJyZXNcIjogcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgXCJyZXF1ZXN0XCI6IHJlcXVlc3QsXG4gICAgICAgICAgICAgICAgXCJyZXFcIjogcmVxdWVzdFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChtYXRjaGVzWzBdLnBhdGhQYXJhbXMpIHtcbiAgICAgICAgICAgICAgICBjdHgucGF0aFBhcmFtZXRlcnMgPSBtYXRjaGVzWzBdLnBhdGhQYXJhbXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdHgucXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbXM7XG5cbiAgICAgICAgICAgIGNvbnN0IG5vb3AgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgICAgICAgICBsZXQgX2JlZm9yZTogRnVuY3Rpb24sIF9zZXJ2ZTogRnVuY3Rpb24sIF9jYXRjaDogRnVuY3Rpb24sIF9maW5hbGx5OiBGdW5jdGlvbjtcbiAgICAgICAgICAgIF9iZWZvcmUgPSByZXNvdXJjZUhhbmRsZXIuYmVmb3JlIHx8IG5vb3A7XG4gICAgICAgICAgICBfc2VydmUgPSByZXNvdXJjZUhhbmRsZXIuaGFuZGxlciB8fCByZXNvdXJjZUhhbmRsZXIuc2VydmUgfHwgbm9vcDtcbiAgICAgICAgICAgIF9jYXRjaCA9IHJlc291cmNlSGFuZGxlci5jYXRjaCB8fCBjYXRjaEVycm9ySGFuZGxlci5iaW5kKHRoaXMsIHtcbiAgICAgICAgICAgICAgICBwYXRoOiByZXNvdXJjZVBhdGgsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogY29udGVudFR5cGVIZWFkZXIuam9pbignLCcpLFxuICAgICAgICAgICAgICAgIGFjY2VwdHM6IGFjY2VwdHNIZWFkZXIuam9pbignLCcpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF9maW5hbGx5ID0gcmVzb3VyY2VIYW5kbGVyLmZpbmFsbHkgfHwgbm9vcDtcblxuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2tBcmdzOiBhbnlbXSA9IFtjdHgsIHJlcXVlc3QsIHJlc3BvbnNlLCByZXNvdXJjZUhhbmRsZXIsIHRoaXNdO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci50cmFjZSgnQmVmb3JlIHNlcnZpbmcgcmVxdWVzdCBmb3IgUmVzb3VyY2Vbe31dLCBNZXRob2Rbe31dLCBDb250ZW50LVR5cGVbe31dLCBBY2NlcHRbe31dJywgcmVzb3VyY2VQYXRoLCBtZXRob2QudG9VcHBlckNhc2UoKSwgY29udGVudFR5cGVIZWFkZXIsIGFjY2VwdHNIZWFkZXIpO1xuICAgICAgICAgICAgICAgIF9iZWZvcmUuYXBwbHkodGhpcywgY2FsbGJhY2tBcmdzKTtcblxuICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2UuaXNDb21taXR0ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIudHJhY2UoJ1NlcnZpbmcgcmVxdWVzdCBmb3IgUmVzb3VyY2Vbe31dLCBNZXRob2Rbe31dLCBDb250ZW50LVR5cGVbe31dLCBBY2NlcHRbe31dJywgcmVzb3VyY2VQYXRoLCBtZXRob2QudG9VcHBlckNhc2UoKSwgY29udGVudFR5cGVIZWFkZXIsIGFjY2VwdHNIZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICBfc2VydmUuYXBwbHkodGhpcywgY2FsbGJhY2tBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnRyYWNlKCdTZXJ2aW5nIHJlcXVlc3QgZm9yIFJlc291cmNlW3t9XSwgTWV0aG9kW3t9XSwgQ29udGVudC1UeXBlW3t9XSwgQWNjZXB0W3t9XSBmaW5pc2hlZCcsIHJlc291cmNlUGF0aCwgbWV0aG9kLnRvVXBwZXJDYXNlKCksIGNvbnRlbnRUeXBlSGVhZGVyLCBhY2NlcHRzSGVhZGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQXJncy5zcGxpY2UoMSwgMCwgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgX2NhdGNoLmFwcGx5KHRoaXMsIGNhbGxiYWNrQXJncyk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoX2NhdGNoRXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignU2VydmluZyByZXF1ZXN0IGZvciBSZXNvdXJjZVt7fV0sIE1ldGhvZFt7fV0sIENvbnRlbnQtVHlwZVt7fV0sIEFjY2VwdFt7fV0gZXJyb3IgaGFuZGxlciB0aHJldyBlcnJvcicsIF9jYXRjaEVycik7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IF9jYXRjaEVycjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIEh0dHBDb250cm9sbGVyLnByb3RvdHlwZS5jbG9zZVJlc3BvbnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgX2ZpbmFsbHkuYXBwbHkodGhpcywgW10pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKF9maW5hbGx5RXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignU2VydmluZyByZXF1ZXN0IGZvciBSZXNvdXJjZVt7fV0sIE1ldGhvZFt7fV0sIENvbnRlbnQtVHlwZVt7fV0sIEFjY2VwdFt7fV0gcG9zdCBoYW5kbGVyIHRocmV3IGVycm9yJywgX2ZpbmFsbHlFcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignTm8gc3VpdGFibGUgcmVzb3VyY2UgaGFuZGxlciBmb3IgUmVzb3VyY2Vbe31dLCBNZXRob2Rbe31dLCBDb250ZW50LVR5cGVbe31dLCBBY2NlcHRbe31dIGZvdW5kJywgcmVzb3VyY2VQYXRoLCBtZXRob2QudG9VcHBlckNhc2UoKSwgY29udGVudFR5cGVIZWFkZXIsIGFjY2VwdHNIZWFkZXIpO1xuICAgICAgICAgICAgdGhpcy5zZW5kRXJyb3IocmVzcG9uc2UuQkFEX1JFUVVFU1QsIHVuZGVmaW5lZCwgJ0JhZCBSZXF1ZXN0JywgJ05vIHN1aXRhYmxlIHByb2Nlc3NvciBmb3IgdGhpcyByZXF1ZXN0LicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgUmVzb3VyY2VNYXBwaW5ncyBpbnN0YW5jZSBvZiB0aGlzIGNvbnRyb2xsZXIuXG4gICAgICovXG4gICAgbWFwcGluZ3MoKTogUmVzb3VyY2VNYXBwaW5ncyB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlTWFwcGluZ3M7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFNlbmRzIGFuIGVycm9yIHJlc3BvbnNlIHRvIHRoZSBjbGllbnQsIGZvcm1hdHRlZCBiYXNlZCBvbiB0aGUgYWNjZXB0ZWQgbWVkaWEgdHlwZS5cbiAgICAgKi9cbiAgICBzZW5kRXJyb3IoaHR0cEVycm9yQ29kZTogbnVtYmVyLCBhcHBsaWNhdGlvbkVycm9yQ29kZTogYW55LCBlcnJvck5hbWU6IHN0cmluZywgZXJyb3JEZXRhaWxzOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2xpZW50QWNjZXB0TWVkaWFUeXBlczogc3RyaW5nW10gPSBub3JtYWxpemVNZWRpYVR5cGVIZWFkZXJWYWx1ZShyZXF1ZXN0LmdldEhlYWRlcignQWNjZXB0JykpIHx8IFsnYXBwbGljYXRpb24vanNvbiddO1xuICAgICAgICBjb25zdCBpc0h0bWw6IGJvb2xlYW4gPSBjbGllbnRBY2NlcHRNZWRpYVR5cGVzLnNvbWUoKGFjY2VwdE1lZGlhVHlwZSkgPT4gaXNNaW1lVHlwZUNvbXBhdGlibGUoJyovaHRtbCcsIGFjY2VwdE1lZGlhVHlwZSkpO1xuXG4gICAgICAgIHJlc3BvbnNlLnNldFN0YXR1cyhodHRwRXJyb3JDb2RlIHx8IHJlc3BvbnNlLklOVEVSTkFMX1NFUlZFUl9FUlJPUik7XG5cbiAgICAgICAgaWYgKGlzSHRtbCkge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZTogc3RyaW5nID0gZXJyb3JOYW1lICsgKGFwcGxpY2F0aW9uRXJyb3JDb2RlICE9PSB1bmRlZmluZWQgPyAnWycgKyBhcHBsaWNhdGlvbkVycm9yQ29kZSArICddJyA6ICcnKSArIChlcnJvckRldGFpbHMgPyAnOiAnICsgZXJyb3JEZXRhaWxzIDogJycpO1xuICAgICAgICAgICAgcmVzcG9uc2Uuc2VuZEVycm9yKGh0dHBFcnJvckNvZGUgfHwgcmVzcG9uc2UuSU5URVJOQUxfU0VSVkVSX0VSUk9SLCBtZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgICAgICAgICAgXCJjb2RlXCI6IGFwcGxpY2F0aW9uRXJyb3JDb2RlLFxuICAgICAgICAgICAgICAgIFwiZXJyb3JcIjogZXJyb3JOYW1lLFxuICAgICAgICAgICAgICAgIFwiZGV0YWlsc1wiOiBlcnJvckRldGFpbHNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXNwb25zZS5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgcmVzcG9uc2UucHJpbnQoSlNPTi5zdHJpbmdpZnkoYm9keSwgbnVsbCwgMikpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xvc2VSZXNwb25zZSgpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBGbHVzaGVzIGFuZCBjbG9zZXMgdGhlIEhUVFAgcmVzcG9uc2Ugc3RyZWFtLlxuICAgICAqL1xuICAgIGNsb3NlUmVzcG9uc2UoKTogdm9pZCB7XG4gICAgICAgIHJlc3BvbnNlLmZsdXNoKCk7XG4gICAgICAgIHJlc3BvbnNlLmNsb3NlKCk7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBDdXN0b20gc29ydCBmdW5jdGlvbiBmb3IgbWF0Y2hlZCByb3V0ZSBkZWZpbml0aW9ucywgcHJlZmVycmluZyBleGFjdCBtYXRjaGVzIG92ZXIgdGhvc2Ugd2l0aCBwbGFjZWhvbGRlcnMuXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZWRSb3V0ZURlZmluaXRpb25zU29ydGVyKHA6IGFueSwgbjogYW55KTogbnVtYmVyIHtcbiAgICBwLncgPSBjYWxjdWxhdGVNYXRjaGVkUm91dGVXZWlnaHQocCk7XG4gICAgbi53ID0gY2FsY3VsYXRlTWF0Y2hlZFJvdXRlV2VpZ2h0KG4pO1xuXG4gICAgaWYgKG4udyA9PT0gcC53KSB7XG4gICAgICAgIC8vIFRoZSBvbmUgd2l0aCBsZXNzIHBsYWNlaG9sZGVycyB3aW5zXG4gICAgICAgIGNvbnN0IG0xID0gcC5kLm1hdGNoKC97KC4qPyl9L2cpO1xuICAgICAgICBjb25zdCBwbGFjZWhvbGRlcnNDb3VudDEgPSBtMSAhPT0gbnVsbCA/IG0xLmxlbmd0aCA6IDA7XG4gICAgICAgIGNvbnN0IG0yID0gbi5kLm1hdGNoKC97KC4qPyl9L2cpO1xuICAgICAgICBjb25zdCBwbGFjZWhvbGRlcnNDb3VudDIgPSBtMiAhPT0gbnVsbCA/IG0yLmxlbmd0aCA6IDA7XG4gICAgICAgIGlmIChwbGFjZWhvbGRlcnNDb3VudDEgPiBwbGFjZWhvbGRlcnNDb3VudDIpIHtcbiAgICAgICAgICAgIG4udyA9IG4udyArIDE7XG4gICAgICAgIH0gZWxzZSBpZiAocGxhY2Vob2xkZXJzQ291bnQxIDwgcGxhY2Vob2xkZXJzQ291bnQyKSB7XG4gICAgICAgICAgICBwLncgPSBwLncgKyAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuLncgLSBwLnc7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgaW5pdGlhbCB3ZWlnaHQgb2YgYSBtYXRjaGVkIHJvdXRlIGRlZmluaXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNhbGN1bGF0ZU1hdGNoZWRSb3V0ZVdlaWdodChtYXRjaGVkUm91dGU6IGFueSk6IG51bWJlciB7XG4gICAgcmV0dXJuIChtYXRjaGVkUm91dGUucGFyYW1zICYmIE9iamVjdC5rZXlzKG1hdGNoZWRSb3V0ZS5wYXJhbXMpLmxlbmd0aCA+IDApID8gMCA6IDE7IC8vIGFsd2F5cyBwcmVmZXIgZXhhY3Qgcm91dGUgZGVmaW5pdGlvbnMgLSBzZXQgd2VpZ2h0IHRvIDFcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHBhdGggcGFyYW1ldGVycyBkZWNsYXJlZCBpbiBicmFjZXMgKGUuZy4sICcvYXBpL3twYXRoUGFyYW19JykgdG8gcGF0aC10by1yZWdleHAgZm9ybWF0IChlLmcuLCAnL2FwaS86cGF0aFBhcmFtJykuXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybVBhdGhQYXJhbXNEZWNsYXJlZEluQnJhY2VzKHBhdGhEZWZpbml0aW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhdGhQYXJhbXNJbkJyYWNlc01hdGNoZXIgPSAvKHsoXFx3KlxcKj8pfSkvZzsgLy8gbWF0Y2hlcyBjYXNlcyBsaWtlICcvYXBpL3twYXRoUGFyYW19JyBvciAnL2FwaS97cGF0aFBhcmFtKn0nXG4gICAgcmV0dXJuIHBhdGhEZWZpbml0aW9uLnJlcGxhY2UocGF0aFBhcmFtc0luQnJhY2VzTWF0Y2hlciwgXCI6JDJcIik7IC8vIHRyYW5zZm9ybXMgbWF0Y2hlZCBjYXNlcyB0byAnL2FwaS86cGF0aFBhcmFtJyBvciAnL2FwaS86cGF0aFBhcmFtKidcbn1cblxuLyoqXG4gKiBGaW5kcyBhbGwgcm91dGVzIGluIHRoZSBjb25maWd1cmF0aW9uIHRoYXQgbWF0Y2ggdGhlIHJlcXVlc3QgcGF0aCBhbmQgbWV0aG9kLlxuICovXG5mdW5jdGlvbiBtYXRjaFJlcXVlc3RVcmwocmVxdWVzdFBhdGg6IHN0cmluZywgbWV0aG9kOiBzdHJpbmcsIGNmZzogYW55KTogYW55W10ge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhjZmcpXG4gICAgICAgIC5maWx0ZXIoKFtfLCBoYW5kbGVyc10pID0+IGhhbmRsZXJzICYmIChoYW5kbGVycyBhcyBhbnkpW21ldGhvZF0pXG4gICAgICAgIC5tYXAoKFtwYXRoLCBfXSkgPT4gcGF0aClcbiAgICAgICAgLnJlZHVjZSgobWF0Y2hlczogYW55W10sIHBhdGg6IHN0cmluZykgPT4gbWF0Y2hpbmdSb3V0ZURlZmluaXRpb25zUmVkdWNlcihtYXRjaGVzLCBwYXRoLCByZXF1ZXN0UGF0aCksIFtdKVxuICAgICAgICAuc29ydChtYXRjaGVkUm91dGVEZWZpbml0aW9uc1NvcnRlcik7XG59XG5cbi8qKlxuICogUmVkdWNlciBmdW5jdGlvbiB0byBhdHRlbXB0IG1hdGNoaW5nIGEgZGVmaW5lZCBwYXRoIGFnYWluc3QgdGhlIHJlcXVlc3QgcGF0aCB1c2luZyBwYXRoLXRvLXJlZ2V4cC5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hpbmdSb3V0ZURlZmluaXRpb25zUmVkdWNlcihtYXRjaGVkRGVmaW5pdGlvbnM6IGFueVtdLCBkZWZpbmVkUGF0aDogc3RyaW5nLCByZXF1ZXN0UGF0aDogc3RyaW5nKTogYW55W10ge1xuICAgIC8vICdtYXRjaCcgZnJvbSBwYXRoLXRvLXJlZ2V4cCBpcyB1c2VkIGhlcmVcbiAgICBjb25zdCBwYXRoTWF0Y2hlciA9IG1hdGNoKHRyYW5zZm9ybVBhdGhQYXJhbXNEZWNsYXJlZEluQnJhY2VzKGRlZmluZWRQYXRoKSk7XG4gICAgY29uc3QgbWF0Y2hlZCA9IHBhdGhNYXRjaGVyKHJlcXVlc3RQYXRoKTtcblxuICAgIGlmIChtYXRjaGVkKSB7XG4gICAgICAgIC8vIEVuc3VyZSBwYXRoUGFyYW1zIGlzIGFuIG9iamVjdCBvZiBrZXkvdmFsdWUgcGFpcnNcbiAgICAgICAgY29uc3QgcGF0aFBhcmFtcyA9IG1hdGNoZWQucGFyYW1zO1xuXG4gICAgICAgIGNvbnN0IG1hdGNoZWREZWZpbml0aW9uID0ge1xuICAgICAgICAgICAgcDogcmVxdWVzdFBhdGgsXG4gICAgICAgICAgICBkOiBkZWZpbmVkUGF0aCxcbiAgICAgICAgICAgIHBhdGhQYXJhbXM6IHBhdGhQYXJhbXNcbiAgICAgICAgfTtcbiAgICAgICAgbWF0Y2hlZERlZmluaXRpb25zLnB1c2gobWF0Y2hlZERlZmluaXRpb24pO1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hlZERlZmluaXRpb25zO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYW4gSFRUUCBtZWRpYSB0eXBlIGhlYWRlciB2YWx1ZSAoZS5nLiwgXCJ0ZXh0L3BsYWluOyBxPTAuOSwgYXBwbGljYXRpb24vanNvblwiKS5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTWVkaWFUeXBlSGVhZGVyVmFsdWUoc01lZGlhVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoc01lZGlhVHlwZSA9PT0gdW5kZWZpbmVkIHx8IHNNZWRpYVR5cGUgPT09IG51bGwpXG4gICAgICAgIHJldHVybjtcbiAgICAvLyBjb252ZXJ0IHRvIGFycmF5IG9mIGluZGl2aWR1YWwgdHlwZXNcbiAgICBsZXQgYXJyTWVkaWFUeXBlID0gc01lZGlhVHlwZS5zcGxpdCgnLCcpO1xuICAgIGFyck1lZGlhVHlwZSA9IGFyck1lZGlhVHlwZS5tYXAoKG1pbWVUeXBlRW50cnkpID0+IHtcbiAgICAgICAgLy8gcmVtb3ZlIGVzY2FwaW5nLCByZW1vdmUgcXVhbGl0eSBvciBvdGhlciBhdHRyaWJ1dGVzIChlLmcuLCAnOyBxPTAuOScpXG4gICAgICAgIHJldHVybiBtaW1lVHlwZUVudHJ5LnJlcGxhY2UoJ1xcXFwnLCAnJykuc3BsaXQoJzsnKVswXS50cmltKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFyck1lZGlhVHlwZS5maWx0ZXIodHlwZSA9PiB0eXBlLmxlbmd0aCA+IDApO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHNvdXJjZSBNSU1FIHR5cGUgaXMgY29tcGF0aWJsZSB3aXRoIGEgdGFyZ2V0IE1JTUUgdHlwZSwgc3VwcG9ydGluZyB3aWxkY2FyZHMgKCopLlxuICovXG5mdW5jdGlvbiBpc01pbWVUeXBlQ29tcGF0aWJsZShzb3VyY2U6IHN0cmluZywgdGFyZ2V0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoc291cmNlID09PSB0YXJnZXQpXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY29uc3QgdGFyZ2V0TSA9IHRhcmdldC5zcGxpdCgnLycpO1xuICAgIGNvbnN0IHNvdXJjZU0gPSBzb3VyY2Uuc3BsaXQoJy8nKTtcblxuICAgIC8vIFRhcmdldCBpcyB3aWxkY2FyZCB0eXBlLCBTb3VyY2UgaGFzIGEgc3BlY2lmaWMgc3VidHlwZSAoZS5nLiwgdGFyZ2V0PSovanNvbiwgc291cmNlPWFwcGxpY2F0aW9uL2pzb24pXG4gICAgaWYgKHRhcmdldE1bMF0gPT09ICcqJyAmJiB0YXJnZXRNWzFdID09PSBzb3VyY2VNWzFdKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAvLyBTb3VyY2UgaXMgd2lsZGNhcmQgdHlwZSwgVGFyZ2V0IGhhcyBhIHNwZWNpZmljIHN1YnR5cGUgKGUuZy4sIHNvdXJjZT0qL2pzb24sIHRhcmdldD1hcHBsaWNhdGlvbi9qc29uKVxuICAgIGlmIChzb3VyY2VNWzBdID09PSAnKicgJiYgdGFyZ2V0TVsxXSA9PT0gc291cmNlTVsxXSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBUYXJnZXQgaXMgd2lsZGNhcmQgc3VidHlwZSwgU291cmNlIGhhcyBhIHNwZWNpZmljIHR5cGUgKGUuZy4sIHRhcmdldD1hcHBsaWNhdGlvbi8qLCBzb3VyY2U9YXBwbGljYXRpb24vanNvbilcbiAgICBpZiAodGFyZ2V0TVsxXSA9PT0gJyonICYmIHRhcmdldE1bMF0gPT09IHNvdXJjZU1bMF0pXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIC8vIFNvdXJjZSBpcyB3aWxkY2FyZCBzdWJ0eXBlLCBUYXJnZXQgaGFzIGEgc3BlY2lmaWMgdHlwZSAoZS5nLiwgc291cmNlPWFwcGxpY2F0aW9uLyosIHRhcmdldD1hcHBsaWNhdGlvbi9qc29uKVxuICAgIGlmIChzb3VyY2VNWzFdID09PSAnKicgJiYgdGFyZ2V0TVswXSA9PT0gc291cmNlTVswXSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogRGVmYXVsdCBlcnJvciBoYW5kbGVyIGZ1bmN0aW9uLlxuICovXG5jb25zdCBjYXRjaEVycm9ySGFuZGxlciA9IGZ1bmN0aW9uICh0aGlzOiBIdHRwQ29udHJvbGxlciwgbG9nY3R4OiBhbnksIGN0eDogUmVxdWVzdENvbnRleHQsIGVycjogYW55LCByZXF1ZXN0OiBhbnksIHJlc3BvbnNlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoY3R4LnN1cHByZXNzU3RhY2spIHtcbiAgICAgICAgY29uc3QgZGV0YWlsc01zZyA9IChjdHguZXJyb3JOYW1lIHx8IFwiXCIpICsgKGN0eC5lcnJvckNvZGUgPyBcIiBbXCIgKyBjdHguZXJyb3JDb2RlICsgXCJdXCIgOiBcIlwiKSArIChjdHguZXJyb3JNZXNzYWdlID8gXCI6IFwiICsgY3R4LmVycm9yTWVzc2FnZSA6IFwiXCIpO1xuICAgICAgICBsb2dnZXIuaW5mbygnU2VydmluZyByZXNvdXJjZVt7fV0sIFZlcmJbe31dLCBDb250ZW50LVR5cGVbe31dLCBBY2NlcHRbe31dIGZpbmlzaGVkIGluIGVycm9yLiB7fScsIGxvZ2N0eC5wYXRoLCBsb2djdHgubWV0aG9kLCBsb2djdHguY29udGVudFR5cGUsIGxvZ2N0eC5hY2NlcHRzLCBkZXRhaWxzTXNnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ1NlcnZpbmcgcmVzb3VyY2Vbe31dLCBWZXJiW3t9XSwgQ29udGVudC1UeXBlW3t9XSwgQWNjZXB0W3t9XSBmaW5pc2hlZCBpbiBlcnJvcicsIGxvZ2N0eC5wYXRoLCBsb2djdHgubWV0aG9kLCBsb2djdHguY29udGVudFR5cGUsIGxvZ2N0eC5hY2NlcHRzLCBlcnIpO1xuICAgIH1cblxuICAgIGNvbnN0IGh0dHBFcnJvckNvZGUgPSBjdHguaHR0cEVycm9yQ29kZSB8fCByZXNwb25zZS5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gY3R4LmVycm9yTWVzc2FnZSB8fCAoZXJyICYmIGVyci5tZXNzYWdlKTtcbiAgICBjb25zdCBlcnJvck5hbWUgPSBjdHguZXJyb3JOYW1lIHx8IChlcnIgJiYgZXJyLm5hbWUpO1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IGN0eC5lcnJvckNvZGU7XG5cbiAgICB0aGlzLnNlbmRFcnJvcihodHRwRXJyb3JDb2RlLCBlcnJvckNvZGUsIGVycm9yTmFtZSwgZXJyb3JNZXNzYWdlKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSByZXF1ZXN0IG1lZGlhIHR5cGVzIG1hdGNoIHRoZSByZXNvdXJjZSBoYW5kbGVyJ3MgY29uc3VtZXMgYW5kIHByb2R1Y2VzIGNvbnN0cmFpbnRzLlxuICovXG5jb25zdCBtYXRjaE1lZGlhVHlwZSA9IGZ1bmN0aW9uIChyZXF1ZXN0OiBhbnksIHByb2R1Y2VzTWVkaWFUeXBlczogc3RyaW5nW10sIGNvbnN1bWVzTWVkaWFUeXBlczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICBsZXQgaXNQcm9kdWNlTWF0Y2hlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGFjY2VwdHNNZWRpYVR5cGVzID0gbm9ybWFsaXplTWVkaWFUeXBlSGVhZGVyVmFsdWUocmVxdWVzdC5nZXRIZWFkZXIoJ0FjY2VwdCcpKTtcblxuICAgIC8vIDEuIENoZWNrIFByb2R1Y2VzIChBY2NlcHRzIGhlYWRlcilcbiAgICBpZiAoIWFjY2VwdHNNZWRpYVR5cGVzIHx8IGFjY2VwdHNNZWRpYVR5cGVzLmxlbmd0aCA9PT0gMCB8fCBhY2NlcHRzTWVkaWFUeXBlcy5pbmNsdWRlcygnKi8qJykpIHtcbiAgICAgICAgLy8gT3V0cHV0IG1lZGlhIHR5cGUgaXMgbm90IHJlc3RyaWN0ZWQgYnkgY2xpZW50IG9yIGNsaWVudCBhY2NlcHRzIGFueXRoaW5nXG4gICAgICAgIGlzUHJvZHVjZU1hdGNoZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwcm9kdWNlc01lZGlhVHlwZXMgJiYgcHJvZHVjZXNNZWRpYVR5cGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZFByb2R1Y2VzTUlNRSA9IGFjY2VwdHNNZWRpYVR5cGVzLmZpbHRlcigoYWNjZXB0c01lZGlhVHlwZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9kdWNlc01lZGlhVHlwZXMuc29tZSgocHJvZHVjZXNNZWRpYVR5cGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzTWltZVR5cGVDb21wYXRpYmxlKGFjY2VwdHNNZWRpYVR5cGUsIHByb2R1Y2VzTWVkaWFUeXBlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXNQcm9kdWNlTWF0Y2hlZCA9IG1hdGNoZWRQcm9kdWNlc01JTUUgJiYgbWF0Y2hlZFByb2R1Y2VzTUlNRS5sZW5ndGggPiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVzb3VyY2UgZG9lc24ndCBzcGVjaWZ5IHByb2R1Y2VzLCBzbyBpdCBtYXRjaGVzIGlmIHRoZSBjbGllbnQgYWNjZXB0cyBhbnl0aGluZyBvciBpZiBwcm9kdWNlcyBpcyBhbiBlbXB0eSBhcnJheVxuICAgICAgICAgICAgaXNQcm9kdWNlTWF0Y2hlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAyLiBDaGVjayBDb25zdW1lcyAoQ29udGVudC1UeXBlIGhlYWRlcilcbiAgICBsZXQgaXNDb25zdW1lTWF0Y2hlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlTWVkaWFUeXBlcyA9IG5vcm1hbGl6ZU1lZGlhVHlwZUhlYWRlclZhbHVlKHJlcXVlc3QuZ2V0Q29udGVudFR5cGUoKSk7XG5cbiAgICBpZiAoIWNvbnN1bWVzTWVkaWFUeXBlcyB8fCBjb25zdW1lc01lZGlhVHlwZXMubGVuZ3RoID09PSAwIHx8IGNvbnN1bWVzTWVkaWFUeXBlcy5pbmNsdWRlcygnKi8qJykpIHtcbiAgICAgICAgLy8gSW5wdXQgbWVkaWEgdHlwZSBpcyBub3QgcmVzdHJpY3RlZCBieSByZXNvdXJjZSBvciByZXNvdXJjZSBhY2NlcHRzIGFueXRoaW5nXG4gICAgICAgIGlzQ29uc3VtZU1hdGNoZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChjb250ZW50VHlwZU1lZGlhVHlwZXMgJiYgY29uc3VtZXNNZWRpYVR5cGVzICYmIGNvbnN1bWVzTWVkaWFUeXBlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRDb25zdW1lc01JTUUgPSBjb250ZW50VHlwZU1lZGlhVHlwZXMuZmlsdGVyKChjb250ZW50VHlwZU1lZGlhVHlwZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25zdW1lc01lZGlhVHlwZXMuc29tZSgoY29uc3VtZXNNZWRpYVR5cGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzTWltZVR5cGVDb21wYXRpYmxlKGNvbnRlbnRUeXBlTWVkaWFUeXBlLCBjb25zdW1lc01lZGlhVHlwZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlzQ29uc3VtZU1hdGNoZWQgPSBtYXRjaGVkQ29uc3VtZXNNSU1FICYmIG1hdGNoZWRDb25zdW1lc01JTUUubGVuZ3RoID4gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpc1Byb2R1Y2VNYXRjaGVkICYmIGlzQ29uc3VtZU1hdGNoZWQ7XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxZQUFZLGdCQUFnQjtBQUNyQyxTQUFTLFdBQVcsZUFBZTtBQUNuQyxTQUFTLHdCQUF3QjtBQUNqQyxTQUFTLGVBQWU7QUFJeEIsTUFBTSxFQUFFLE1BQU0sSUFBSSxpQkFBaUIsZ0RBQWdEO0FBRW5GLE1BQU0sU0FBYyxRQUFRLFVBQVUsb0JBQW9CO0FBb0IxRCxTQUFTLGFBQWtCO0FBQ3ZCLFNBQU87QUFDWDtBQUNBLFNBQVMsY0FBbUI7QUFDeEIsU0FBTztBQUNYO0FBUU8sU0FBUyxRQUFRLFNBQStCO0FBQ25ELE1BQUk7QUFDSixNQUFJLFlBQVksUUFBVztBQUN2QixRQUFJLE9BQU8s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QUNySSxNQUFJLElBQUksZUFBZTtBQUNuQixVQUFNLGNBQWMsSUFBSSxhQUFhLE9BQU8sSUFBSSxZQUFZLE9BQU8sSUFBSSxZQUFZLE1BQU0sT0FBTyxJQUFJLGVBQWUsT0FBTyxJQUFJLGVBQWU7QUFDN0ksV0FBTyxLQUFLLHNGQUFzRixPQUFPLE1BQU0sT0FBTyxRQUFRLE9BQU8sYUFBYSxPQUFPLFNBQVMsVUFBVTtBQUFBLEVBQ2hMLE9BQU87QUFDSCxXQUFPLE1BQU0sa0ZBQWtGLE9BQU8sTUFBTSxPQUFPLFFBQVEsT0FBTyxhQUFhLE9BQU8sU0FBUyxHQUFHO0FBQUEsRUFDdEs7QUFFQSxRQUFNLGdCQUFnQixJQUFJLGlCQUFpQkEsVUFBUztBQUNwRCxRQUFNLGVBQWUsSUFBSSxnQkFBaUIsT0FBTyxJQUFJO0FBQ3JELFFBQU0sWUFBWSxJQUFJLGFBQWMsT0FBTyxJQUFJO0FBQy9DLFFBQU0sWUFBWSxJQUFJO0FBRXRCLE9BQUssVUFBVSxlQUFlLFdBQVcsV0FBVyxZQUFZO0FBQ3BFO0FBS0EsTUFBTSxpQkFBaUIsU0FBVUQsVUFBYyxvQkFBOEIsb0JBQXVDO0FBQ2hILE1BQUksbUJBQW1CO0FBQ3ZCLFFBQU0sb0JBQW9CLDhCQUE4QkEsU0FBUSxVQUFVLFFBQVEsQ0FBQztBQUduRixNQUFJLENBQUMscUJBQXFCLGtCQUFrQixXQUFXLEtBQUssa0JBQWtCLFNBQVMsS0FBSyxHQUFHO0FBRTNGLHVCQUFtQjtBQUFBLEVBQ3ZCLE9BQU87QUFDSCxRQUFJLHNCQUFzQixtQkFBbUIsUUFBUTtBQUNqRCxZQUFNLHNCQUFzQixrQkFBa0IsT0FBTyxDQUFDLHFCQUFxQjtBQUN2RSxlQUFPLG1CQUFtQixLQUFLLENBQUMsc0JBQXNCO0FBQ2xELGlCQUFPLHFCQUFxQixrQkFBa0IsaUJBQWlCO0FBQUEsUUFDbkUsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUNELHlCQUFtQix1QkFBdUIsb0JBQW9CLFNBQVM7QUFBQSxJQUMzRSxPQUFPO0FBRUgseUJBQW1CO0FBQUEsSUFDdkI7QUFBQSxFQUNKO0FBR0EsTUFBSSxtQkFBbUI7QUFDdkIsUUFBTSx3QkFBd0IsOEJBQThCQSxTQUFRLGVBQWUsQ0FBQztBQUVwRixNQUFJLENBQUMsc0JBQXNCLG1CQUFtQixXQUFXLEtBQUssbUJBQW1CLFNBQVMsS0FBSyxHQUFHO0FBRTlGLHVCQUFtQjtBQUFBLEVBQ3ZCLE9BQU87QUFDSCxRQUFJLHlCQUF5QixzQkFBc0IsbUJBQW1CLFFBQVE7QUFDMUUsWUFBTSxzQkFBc0Isc0JBQXNCLE9BQU8sQ0FBQyx5QkFBeUI7QUFDL0UsZUFBTyxtQkFBbUIsS0FBSyxDQUFDLHNCQUFzQjtBQUNsRCxpQkFBTyxxQkFBcUIsc0JBQXNCLGlCQUFpQjtBQUFBLFFBQ3ZFLENBQUM7QUFBQSxNQUNMLENBQUM7QUFDRCx5QkFBbUIsdUJBQXVCLG9CQUFvQixTQUFTO0FBQUEsSUFDM0U7QUFBQSxFQUNKO0FBRUEsU0FBTyxvQkFBb0I7QUFDL0I7IiwKICAibmFtZXMiOiBbInJlcXVlc3QiLCAicmVzcG9uc2UiXQp9Cg==
288
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2h0dHAvcnMvcmVzb3VyY2UtaHR0cC1jb250cm9sbGVyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBSZXNwb25zZSBhcyByZXNwb25zZSB9IGZyb20gXCIuLi9yZXNwb25zZVwiO1xuaW1wb3J0IHsgUmVxdWVzdCBhcyByZXF1ZXN0IH0gZnJvbSBcIi4uL3JlcXVlc3RcIjtcbmltcG9ydCB7IFJlc291cmNlTWFwcGluZ3MgfSBmcm9tIFwiLi9yZXNvdXJjZS1tYXBwaW5nc1wiO1xuaW1wb3J0IHsgTG9nZ2luZyB9IGZyb20gXCJAYWVyb2tpdC9zZGsvbG9nXCI7XG5cbi8vIERlY2xhcmF0aW9uIGZvciB0aGUgZXh0ZXJuYWwgZGlyaWdpYmxlUmVxdWlyZSBmdW5jdGlvbiBhbmQgaXRzIGRlcGVuZGVuY3lcbmRlY2xhcmUgZnVuY3Rpb24gZGlyaWdpYmxlUmVxdWlyZShtb2R1bGU6IHN0cmluZyk6IGFueTtcbmNvbnN0IHsgbWF0Y2ggfSA9IGRpcmlnaWJsZVJlcXVpcmUoXCJtb2R1bGVzL3NyYy9odHRwL3BhdGgtdG8tcmVnZXhwLzYuMi4xL2luZGV4LmpzXCIpO1xuXG5jb25zdCBsb2dnZXI6IGFueSA9IExvZ2dpbmcuZ2V0TG9nZ2VyKCdodHRwLnJzLmNvbnRyb2xsZXInKTtcblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIHRoZSBjb250ZXh0IG9iamVjdCBwYXNzZWQgdG8gaGFuZGxlciBmdW5jdGlvbnMgKGJlZm9yZSwgc2VydmUsIGNhdGNoKS5cbiAqL1xuaW50ZXJmYWNlIFJlcXVlc3RDb250ZXh0IHtcbiAgICBwYXRoUGFyYW1ldGVyczogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgICBxdWVyeVBhcmFtZXRlcnM6IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gICAgcmVzcG9uc2U6IGFueTtcbiAgICByZXM6IGFueTtcbiAgICByZXF1ZXN0OiBhbnk7XG4gICAgcmVxOiBhbnk7XG4gICAgLy8gQ29udGV4dCBwcm9wZXJ0aWVzIGZvciBlcnJvciBoYW5kbGluZyBtaWdodCBhbHNvIGJlIGF0dGFjaGVkIGhlcmVcbiAgICBzdXBwcmVzc1N0YWNrPzogYm9vbGVhbjtcbiAgICBodHRwRXJyb3JDb2RlPzogbnVtYmVyO1xuICAgIGVycm9yTWVzc2FnZT86IHN0cmluZztcbiAgICBlcnJvck5hbWU/OiBzdHJpbmc7XG4gICAgZXJyb3JDb2RlPzogYW55O1xufVxuXG5mdW5jdGlvbiBnZXRSZXF1ZXN0KCk6IGFueSB7XG4gICAgcmV0dXJuIHJlcXVlc3Q7XG59XG5mdW5jdGlvbiBnZXRSZXNwb25zZSgpOiBhbnkge1xuICAgIHJldHVybiByZXNwb25zZTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc2VydmljZSAoSHR0cENvbnRyb2xsZXIpIGluc3RhbmNlLCBvcHRpb25hbGx5IGluaXRpYWxpemVkIHdpdGggb01hcHBpbmdzLlxuICpcbiAqIEBwYXJhbSBvQ29uZmlnIENvbmZpZ3VyYXRpb24gb2JqZWN0IG9yIGNvbmZpZ3VyYXRpb24gYnVpbGRlciB3aXRoIGNvbmZpZ3VyYXRpb24oKSBnZXR0ZXIgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIG5ldyBIdHRwQ29udHJvbGxlciBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcnZpY2Uob0NvbmZpZz86IGFueSk6IEh0dHBDb250cm9sbGVyIHtcbiAgICBsZXQgY29uZmlnOiBSZXNvdXJjZU1hcHBpbmdzIHwgYW55O1xuICAgIGlmIChvQ29uZmlnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvQ29uZmlnID09PSAnb2JqZWN0JyB8fCBvQ29uZmlnIGluc3RhbmNlb2YgUmVzb3VyY2VNYXBwaW5ncykge1xuICAgICAgICAgICAgY29uZmlnID0gb0NvbmZpZztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IEh0dHBDb250cm9sbGVyKGNvbmZpZyk7XG59XG5cbi8qKlxuICogVGhlIG1haW4gY2xhc3MgZm9yIGhhbmRsaW5nIEhUVFAgcmVxdWVzdHMgYW5kIHJvdXRpbmcgdGhlbSB0byB0aGUgY29ycmVjdCByZXNvdXJjZSBoYW5kbGVycy5cbiAqL1xuZXhwb3J0IGNsYXNzIEh0dHBDb250cm9sbGVyIHtcblxuICAgIHJlc291cmNlOiBGdW5jdGlvbjtcbiAgICByZXNvdXJjZVBhdGg6IEZ1bmN0aW9uO1xuICAgIHJlc291cmNlTWFwcGluZ3M6IFJlc291cmNlTWFwcGluZ3M7XG5cbiAgICAvLyBJbmRleCBzaWduYXR1cmUgdG8gYWxsb3cgZHluYW1pYyBtZXRob2QgYXNzaWdubWVudCBpbiB0aGUgY29uc3RydWN0b3JcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RvciBmdW5jdGlvbiBmb3IgSHR0cENvbnRyb2xsZXIgaW5zdGFuY2VzLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9NYXBwaW5ncyBUaGUgbWFwcGluZ3MgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBjb250cm9sbGVyLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG9NYXBwaW5ncz86IFJlc291cmNlTWFwcGluZ3MgfCBhbnkpIHtcbiAgICAgICAgaWYgKG9NYXBwaW5ncyBpbnN0YW5jZW9mIFJlc291cmNlTWFwcGluZ3MpIHtcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2VNYXBwaW5ncyA9IG9NYXBwaW5ncztcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb01hcHBpbmdzID09PSAnb2JqZWN0JyB8fCBvTWFwcGluZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZU1hcHBpbmdzID0gbmV3IFJlc291cmNlTWFwcGluZ3Mob01hcHBpbmdzLCB0aGlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIERlZmF1bHQgaW5pdGlhbGl6YXRpb24gaWYgaW5wdXQgaXMgdW5leHBlY3RlZFxuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZU1hcHBpbmdzID0gbmV3IFJlc291cmNlTWFwcGluZ3Moe30sIHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWxpYXMgZm9yIHJlc291cmNlTWFwcGluZ3MucmVzb3VyY2VcbiAgICAgICAgdGhpcy5yZXNvdXJjZSA9IHRoaXMucmVzb3VyY2VQYXRoID0gdGhpcy5yZXNvdXJjZU1hcHBpbmdzLnJlc291cmNlUGF0aC5iaW5kKHRoaXMucmVzb3VyY2VNYXBwaW5ncyk7XG5cbiAgICAgICAgLy8gd2VhdmUtaW4gSFRUUCBtZXRob2QtYmFzZWQgZmFjdG9yeSBmdW5jdGlvbnMgLSBzaG9ydGN1dCBmb3Igc2VydmljZSgpLnJlc291cmNlKHNQYXRoKS5tZXRob2RcbiAgICAgICAgWydnZXQnLCAncG9zdCcsICdwdXQnLCAnZGVsZXRlJywgJ3JlbW92ZScsICdtZXRob2QnXS5mb3JFYWNoKChzTWV0aG9kTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0aGlzW3NNZXRob2ROYW1lXSA9ICguLi5hbGxBcmd1bWVudHM6IGFueVtdKTogSHR0cENvbnRyb2xsZXIgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhbGxBcmd1bWVudHMubGVuZ3RoIDwgMSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0luc3VmZmljaWVudCBhcmd1bWVudHMgcHJvdmlkZWQgdG8gSHR0cENvbnRyb2xsZXIgbWV0aG9kICcgKyBzTWV0aG9kTmFtZSArICcuJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBzUGF0aCBpcyBhbHdheXMgdGhlIGZpcnN0IGFyZ3VtZW50XG4gICAgICAgICAgICAgICAgbGV0IHNQYXRoID0gYWxsQXJndW1lbnRzWzBdO1xuICAgICAgICAgICAgICAgIGlmIChzUGF0aCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBzUGF0aCA9IFwiXCI7XG5cbiAgICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBhcmd1bWVudHMgKHNWZXJiLCBhcnJDb25zdW1lcywgYXJyUHJvZHVjZXMpIGFyZSB1c2VkIGJ5IFJlc291cmNlTWFwcGluZ3MuZmluZC9yZXNvdXJjZVxuICAgICAgICAgICAgICAgIGNvbnN0IHNWZXJiID0gYWxsQXJndW1lbnRzWzFdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyckNvbnN1bWVzID0gYWxsQXJndW1lbnRzWzJdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyclByb2R1Y2VzID0gYWxsQXJndW1lbnRzWzNdO1xuXG4gICAgICAgICAgICAgICAgLy8gRmluZCBleGlzdGluZyByZXNvdXJjZSBvciBjcmVhdGUgYSBuZXcgb25lIGJhc2VkIG9uIHRoZSBwYXRoIChhbmQgb3RoZXIgb3B0aW9uYWwgY29uc3RyYWludHMpXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb3VyY2U6IGFueSA9IHRoaXMucmVzb3VyY2VNYXBwaW5ncy5maW5kKHNQYXRoLCBzVmVyYiwgYXJyQ29uc3VtZXMsIGFyclByb2R1Y2VzKSB8fCB0aGlzLnJlc291cmNlTWFwcGluZ3MucmVzb3VyY2Uoc1BhdGgpO1xuXG4gICAgICAgICAgICAgICAgLy8gUGFzcyBhbGwgYXJndW1lbnRzICpleGNlcHQqIHRoZSBzUGF0aCB0byB0aGUgY29ycmVzcG9uZGluZyBtZXRob2Qgb2YgdGhlIHJlc291cmNlXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb3VyY2VNZXRob2RBcmdzID0gYWxsQXJndW1lbnRzLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIEV4ZWN1dGUgdGhlIG1ldGhvZCBvbiB0aGUgcmVzb3VyY2UgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICByZXNvdXJjZVtzTWV0aG9kTmFtZV0uYXBwbHkocmVzb3VyY2UsIHJlc291cmNlTWV0aG9kQXJncyk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3IgZXhlY3V0ZS5cbiAgICAgKi9cbiAgICBsaXN0ZW4ocmVxdWVzdDogYW55LCByZXNwb25zZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZXhlY3V0ZShyZXF1ZXN0LCByZXNwb25zZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgdGhlIHJlcXVlc3QgaGFuZGxpbmcgbG9naWMsIGZpbmRpbmcgdGhlIGJlc3QgbWF0Y2hpbmcgcmVzb3VyY2UgYW5kIGhhbmRsZXIuXG4gICAgICovXG4gICAgZXhlY3V0ZShyZXF1ZXN0PzogYW55LCByZXNwb25zZT86IGFueSk6IHZvaWQge1xuICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdCB8fCBnZXRSZXF1ZXN0KCk7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RQYXRoOiBzdHJpbmcgPSByZXF1ZXN0LmdldFJlc291cmNlUGF0aCgpO1xuICAgICAgICBjb25zdCBtZXRob2Q6IHN0cmluZyA9IHJlcXVlc3QuZ2V0TWV0aG9kKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgX29Db25maWd1cmF0aW9uOiBhbnkgPSB0aGlzLnJlc291cmNlTWFwcGluZ3MuY29uZmlndXJhdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IG1hdGNoZXM6IGFueVtdID0gbWF0Y2hSZXF1ZXN0VXJsKHJlcXVlc3RQYXRoLCBtZXRob2QsIF9vQ29uZmlndXJhdGlvbik7XG4gICAgICAgIGxldCByZXNvdXJjZUhhbmRsZXI6IGFueTtcblxuICAgICAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzWzBdKSB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiSGFuZGxlcnM6IGFueVtdID0gX29Db25maWd1cmF0aW9uW21hdGNoZXNbMF0uZF1bbWV0aG9kXTtcbiAgICAgICAgICAgIGlmICh2ZXJiSGFuZGxlcnMpIHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZUhhbmRsZXIgPSB2ZXJiSGFuZGxlcnMuZmlsdGVyKChoYW5kbGVyRGVmKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaE1lZGlhVHlwZShyZXF1ZXN0LCBoYW5kbGVyRGVmLnByb2R1Y2VzLCBoYW5kbGVyRGVmLmNvbnN1bWVzKTtcbiAgICAgICAgICAgICAgICB9KVswXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3BvbnNlID0gcmVzcG9uc2UgfHwgZ2V0UmVzcG9uc2UoKTtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSByZXF1ZXN0LmdldFF1ZXJ5UGFyYW1ldGVyc01hcCgpIHx8IHt9O1xuICAgICAgICBjb25zdCBhY2NlcHRzSGVhZGVyOiBzdHJpbmdbXSA9IG5vcm1hbGl6ZU1lZGlhVHlwZUhlYWRlclZhbHVlKHJlcXVlc3QuZ2V0SGVhZGVyKCdBY2NlcHQnKSkgfHwgW107XG4gICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlSGVhZGVyOiBzdHJpbmdbXSA9IG5vcm1hbGl6ZU1lZGlhVHlwZUhlYWRlclZhbHVlKHJlcXVlc3QuZ2V0SGVhZGVyKCdDb250ZW50LVR5cGUnKSkgfHwgW107XG4gICAgICAgIGNvbnN0IHJlc291cmNlUGF0aDogc3RyaW5nID0gcmVxdWVzdFBhdGg7XG5cbiAgICAgICAgaWYgKHJlc291cmNlSGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgY3R4OiBSZXF1ZXN0Q29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICBcInBhdGhQYXJhbWV0ZXJzXCI6IHt9LFxuICAgICAgICAgICAgICAgIFwicXVlcnlQYXJhbWV0ZXJzXCI6IHt9LFxuICAgICAgICAgICAgICAgIFwicmVzcG9uc2VcIjogcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgXCJyZXNcIjogcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgXCJyZXF1ZXN0XCI6IHJlcXVlc3QsXG4gICAgICAgICAgICAgICAgXCJyZXFcIjogcmVxdWVzdFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChtYXRjaGVzWzBdLnBhdGhQYXJhbXMpIHtcbiAgICAgICAgICAgICAgICBjdHgucGF0aFBhcmFtZXRlcnMgPSBtYXRjaGVzWzBdLnBhdGhQYXJhbXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdHgucXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbXM7XG5cbiAgICAgICAgICAgIGNvbnN0IG5vb3AgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgICAgICAgICBsZXQgX2JlZm9yZTogRnVuY3Rpb24sIF9zZXJ2ZTogRnVuY3Rpb24sIF9jYXRjaDogRnVuY3Rpb24sIF9maW5hbGx5OiBGdW5jdGlvbjtcbiAgICAgICAgICAgIF9iZWZvcmUgPSByZXNvdXJjZUhhbmRsZXIuYmVmb3JlIHx8IG5vb3A7XG4gICAgICAgICAgICBfc2VydmUgPSByZXNvdXJjZUhhbmRsZXIuaGFuZGxlciB8fCByZXNvdXJjZUhhbmRsZXIuc2VydmUgfHwgbm9vcDtcbiAgICAgICAgICAgIF9jYXRjaCA9IHJlc291cmNlSGFuZGxlci5jYXRjaCB8fCBjYXRjaEVycm9ySGFuZGxlci5iaW5kKHRoaXMsIHtcbiAgICAgICAgICAgICAgICBwYXRoOiByZXNvdXJjZVBhdGgsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogY29udGVudFR5cGVIZWFkZXIuam9pbignLCcpLFxuICAgICAgICAgICAgICAgIGFjY2VwdHM6IGFjY2VwdHNIZWFkZXIuam9pbignLCcpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF9maW5hbGx5ID0gcmVzb3VyY2VIYW5kbGVyLmZpbmFsbHkgfHwgbm9vcDtcblxuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2tBcmdzOiBhbnlbXSA9IFtjdHgsIHJlcXVlc3QsIHJlc3BvbnNlLCByZXNvdXJjZUhhbmRsZXIsIHRoaXNdO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci50cmFjZSgnQmVmb3JlIHNlcnZpbmcgcmVxdWVzdCBmb3IgUmVzb3VyY2Vbe31dLCBNZXRob2Rbe31dLCBDb250ZW50LVR5cGVbe31dLCBBY2NlcHRbe31dJywgcmVzb3VyY2VQYXRoLCBtZXRob2QudG9VcHBlckNhc2UoKSwgY29udGVudFR5cGVIZWFkZXIsIGFjY2VwdHNIZWFkZXIpO1xuICAgICAgICAgICAgICAgIF9iZWZvcmUuYXBwbHkodGhpcywgY2FsbGJhY2tBcmdzKTtcblxuICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2UuaXNDb21taXR0ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIudHJhY2UoJ1NlcnZpbmcgcmVxdWVzdCBmb3IgUmVzb3VyY2Vbe31dLCBNZXRob2Rbe31dLCBDb250ZW50LVR5cGVbe31dLCBBY2NlcHRbe31dJywgcmVzb3VyY2VQYXRoLCBtZXRob2QudG9VcHBlckNhc2UoKSwgY29udGVudFR5cGVIZWFkZXIsIGFjY2VwdHNIZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICBfc2VydmUuYXBwbHkodGhpcywgY2FsbGJhY2tBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnRyYWNlKCdTZXJ2aW5nIHJlcXVlc3QgZm9yIFJlc291cmNlW3t9XSwgTWV0aG9kW3t9XSwgQ29udGVudC1UeXBlW3t9XSwgQWNjZXB0W3t9XSBmaW5pc2hlZCcsIHJlc291cmNlUGF0aCwgbWV0aG9kLnRvVXBwZXJDYXNlKCksIGNvbnRlbnRUeXBlSGVhZGVyLCBhY2NlcHRzSGVhZGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQXJncy5zcGxpY2UoMSwgMCwgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgX2NhdGNoLmFwcGx5KHRoaXMsIGNhbGxiYWNrQXJncyk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoX2NhdGNoRXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignU2VydmluZyByZXF1ZXN0IGZvciBSZXNvdXJjZVt7fV0sIE1ldGhvZFt7fV0sIENvbnRlbnQtVHlwZVt7fV0sIEFjY2VwdFt7fV0gZXJyb3IgaGFuZGxlciB0aHJldyBlcnJvcicsIF9jYXRjaEVycik7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IF9jYXRjaEVycjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIEh0dHBDb250cm9sbGVyLnByb3RvdHlwZS5jbG9zZVJlc3BvbnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgX2ZpbmFsbHkuYXBwbHkodGhpcywgW10pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKF9maW5hbGx5RXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignU2VydmluZyByZXF1ZXN0IGZvciBSZXNvdXJjZVt7fV0sIE1ldGhvZFt7fV0sIENvbnRlbnQtVHlwZVt7fV0sIEFjY2VwdFt7fV0gcG9zdCBoYW5kbGVyIHRocmV3IGVycm9yJywgX2ZpbmFsbHlFcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignTm8gc3VpdGFibGUgcmVzb3VyY2UgaGFuZGxlciBmb3IgUmVzb3VyY2Vbe31dLCBNZXRob2Rbe31dLCBDb250ZW50LVR5cGVbe31dLCBBY2NlcHRbe31dIGZvdW5kJywgcmVzb3VyY2VQYXRoLCBtZXRob2QudG9VcHBlckNhc2UoKSwgY29udGVudFR5cGVIZWFkZXIsIGFjY2VwdHNIZWFkZXIpO1xuXHRcdFx0bG9nZ2VyLmVycm9yKCdSZWdpc3RlcmVkIHJlc291cmNlIGhhbmRsZXJzIGZvciBSZXNvdXJjZVt7fV0gYXJlIFt7fV0nLCByZXNvdXJjZVBhdGgsIEpTT04uc3RyaW5naWZ5KF9vQ29uZmlndXJhdGlvbikpO1xuICAgICAgICAgICAgdGhpcy5zZW5kRXJyb3IocmVzcG9uc2UuQkFEX1JFUVVFU1QsIHVuZGVmaW5lZCwgJ0JhZCBSZXF1ZXN0JywgJ05vIHN1aXRhYmxlIHByb2Nlc3NvciBmb3IgdGhpcyByZXF1ZXN0LicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgUmVzb3VyY2VNYXBwaW5ncyBpbnN0YW5jZSBvZiB0aGlzIGNvbnRyb2xsZXIuXG4gICAgICovXG4gICAgbWFwcGluZ3MoKTogUmVzb3VyY2VNYXBwaW5ncyB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlTWFwcGluZ3M7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFNlbmRzIGFuIGVycm9yIHJlc3BvbnNlIHRvIHRoZSBjbGllbnQsIGZvcm1hdHRlZCBiYXNlZCBvbiB0aGUgYWNjZXB0ZWQgbWVkaWEgdHlwZS5cbiAgICAgKi9cbiAgICBzZW5kRXJyb3IoaHR0cEVycm9yQ29kZTogbnVtYmVyLCBhcHBsaWNhdGlvbkVycm9yQ29kZTogYW55LCBlcnJvck5hbWU6IHN0cmluZywgZXJyb3JEZXRhaWxzOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2xpZW50QWNjZXB0TWVkaWFUeXBlczogc3RyaW5nW10gPSBub3JtYWxpemVNZWRpYVR5cGVIZWFkZXJWYWx1ZShyZXF1ZXN0LmdldEhlYWRlcignQWNjZXB0JykpIHx8IFsnYXBwbGljYXRpb24vanNvbiddO1xuICAgICAgICBjb25zdCBpc0h0bWw6IGJvb2xlYW4gPSBjbGllbnRBY2NlcHRNZWRpYVR5cGVzLnNvbWUoKGFjY2VwdE1lZGlhVHlwZSkgPT4gaXNNaW1lVHlwZUNvbXBhdGlibGUoJyovaHRtbCcsIGFjY2VwdE1lZGlhVHlwZSkpO1xuXG4gICAgICAgIHJlc3BvbnNlLnNldFN0YXR1cyhodHRwRXJyb3JDb2RlIHx8IHJlc3BvbnNlLklOVEVSTkFMX1NFUlZFUl9FUlJPUik7XG5cbiAgICAgICAgaWYgKGlzSHRtbCkge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZTogc3RyaW5nID0gZXJyb3JOYW1lICsgKGFwcGxpY2F0aW9uRXJyb3JDb2RlICE9PSB1bmRlZmluZWQgPyAnWycgKyBhcHBsaWNhdGlvbkVycm9yQ29kZSArICddJyA6ICcnKSArIChlcnJvckRldGFpbHMgPyAnOiAnICsgZXJyb3JEZXRhaWxzIDogJycpO1xuICAgICAgICAgICAgcmVzcG9uc2Uuc2VuZEVycm9yKGh0dHBFcnJvckNvZGUgfHwgcmVzcG9uc2UuSU5URVJOQUxfU0VSVkVSX0VSUk9SLCBtZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgICAgICAgICAgXCJjb2RlXCI6IGFwcGxpY2F0aW9uRXJyb3JDb2RlLFxuICAgICAgICAgICAgICAgIFwiZXJyb3JcIjogZXJyb3JOYW1lLFxuICAgICAgICAgICAgICAgIFwiZGV0YWlsc1wiOiBlcnJvckRldGFpbHNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXNwb25zZS5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgcmVzcG9uc2UucHJpbnQoSlNPTi5zdHJpbmdpZnkoYm9keSwgbnVsbCwgMikpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xvc2VSZXNwb25zZSgpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBGbHVzaGVzIGFuZCBjbG9zZXMgdGhlIEhUVFAgcmVzcG9uc2Ugc3RyZWFtLlxuICAgICAqL1xuICAgIGNsb3NlUmVzcG9uc2UoKTogdm9pZCB7XG4gICAgICAgIHJlc3BvbnNlLmZsdXNoKCk7XG4gICAgICAgIHJlc3BvbnNlLmNsb3NlKCk7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBDdXN0b20gc29ydCBmdW5jdGlvbiBmb3IgbWF0Y2hlZCByb3V0ZSBkZWZpbml0aW9ucywgcHJlZmVycmluZyBleGFjdCBtYXRjaGVzIG92ZXIgdGhvc2Ugd2l0aCBwbGFjZWhvbGRlcnMuXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZWRSb3V0ZURlZmluaXRpb25zU29ydGVyKHA6IGFueSwgbjogYW55KTogbnVtYmVyIHtcbiAgICBwLncgPSBjYWxjdWxhdGVNYXRjaGVkUm91dGVXZWlnaHQocCk7XG4gICAgbi53ID0gY2FsY3VsYXRlTWF0Y2hlZFJvdXRlV2VpZ2h0KG4pO1xuXG4gICAgaWYgKG4udyA9PT0gcC53KSB7XG4gICAgICAgIC8vIFRoZSBvbmUgd2l0aCBsZXNzIHBsYWNlaG9sZGVycyB3aW5zXG4gICAgICAgIGNvbnN0IG0xID0gcC5kLm1hdGNoKC97KC4qPyl9L2cpO1xuICAgICAgICBjb25zdCBwbGFjZWhvbGRlcnNDb3VudDEgPSBtMSAhPT0gbnVsbCA/IG0xLmxlbmd0aCA6IDA7XG4gICAgICAgIGNvbnN0IG0yID0gbi5kLm1hdGNoKC97KC4qPyl9L2cpO1xuICAgICAgICBjb25zdCBwbGFjZWhvbGRlcnNDb3VudDIgPSBtMiAhPT0gbnVsbCA/IG0yLmxlbmd0aCA6IDA7XG4gICAgICAgIGlmIChwbGFjZWhvbGRlcnNDb3VudDEgPiBwbGFjZWhvbGRlcnNDb3VudDIpIHtcbiAgICAgICAgICAgIG4udyA9IG4udyArIDE7XG4gICAgICAgIH0gZWxzZSBpZiAocGxhY2Vob2xkZXJzQ291bnQxIDwgcGxhY2Vob2xkZXJzQ291bnQyKSB7XG4gICAgICAgICAgICBwLncgPSBwLncgKyAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuLncgLSBwLnc7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgaW5pdGlhbCB3ZWlnaHQgb2YgYSBtYXRjaGVkIHJvdXRlIGRlZmluaXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNhbGN1bGF0ZU1hdGNoZWRSb3V0ZVdlaWdodChtYXRjaGVkUm91dGU6IGFueSk6IG51bWJlciB7XG4gICAgcmV0dXJuIChtYXRjaGVkUm91dGUucGFyYW1zICYmIE9iamVjdC5rZXlzKG1hdGNoZWRSb3V0ZS5wYXJhbXMpLmxlbmd0aCA+IDApID8gMCA6IDE7IC8vIGFsd2F5cyBwcmVmZXIgZXhhY3Qgcm91dGUgZGVmaW5pdGlvbnMgLSBzZXQgd2VpZ2h0IHRvIDFcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHBhdGggcGFyYW1ldGVycyBkZWNsYXJlZCBpbiBicmFjZXMgKGUuZy4sICcvYXBpL3twYXRoUGFyYW19JykgdG8gcGF0aC10by1yZWdleHAgZm9ybWF0IChlLmcuLCAnL2FwaS86cGF0aFBhcmFtJykuXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybVBhdGhQYXJhbXNEZWNsYXJlZEluQnJhY2VzKHBhdGhEZWZpbml0aW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhdGhQYXJhbXNJbkJyYWNlc01hdGNoZXIgPSAvKHsoXFx3KlxcKj8pfSkvZzsgLy8gbWF0Y2hlcyBjYXNlcyBsaWtlICcvYXBpL3twYXRoUGFyYW19JyBvciAnL2FwaS97cGF0aFBhcmFtKn0nXG4gICAgcmV0dXJuIHBhdGhEZWZpbml0aW9uLnJlcGxhY2UocGF0aFBhcmFtc0luQnJhY2VzTWF0Y2hlciwgXCI6JDJcIik7IC8vIHRyYW5zZm9ybXMgbWF0Y2hlZCBjYXNlcyB0byAnL2FwaS86cGF0aFBhcmFtJyBvciAnL2FwaS86cGF0aFBhcmFtKidcbn1cblxuLyoqXG4gKiBGaW5kcyBhbGwgcm91dGVzIGluIHRoZSBjb25maWd1cmF0aW9uIHRoYXQgbWF0Y2ggdGhlIHJlcXVlc3QgcGF0aCBhbmQgbWV0aG9kLlxuICovXG5mdW5jdGlvbiBtYXRjaFJlcXVlc3RVcmwocmVxdWVzdFBhdGg6IHN0cmluZywgbWV0aG9kOiBzdHJpbmcsIGNmZzogYW55KTogYW55W10ge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhjZmcpXG4gICAgICAgIC5maWx0ZXIoKFtfLCBoYW5kbGVyc10pID0+IGhhbmRsZXJzICYmIChoYW5kbGVycyBhcyBhbnkpW21ldGhvZF0pXG4gICAgICAgIC5tYXAoKFtwYXRoLCBfXSkgPT4gcGF0aClcbiAgICAgICAgLnJlZHVjZSgobWF0Y2hlczogYW55W10sIHBhdGg6IHN0cmluZykgPT4gbWF0Y2hpbmdSb3V0ZURlZmluaXRpb25zUmVkdWNlcihtYXRjaGVzLCBwYXRoLCByZXF1ZXN0UGF0aCksIFtdKVxuICAgICAgICAuc29ydChtYXRjaGVkUm91dGVEZWZpbml0aW9uc1NvcnRlcik7XG59XG5cbi8qKlxuICogUmVkdWNlciBmdW5jdGlvbiB0byBhdHRlbXB0IG1hdGNoaW5nIGEgZGVmaW5lZCBwYXRoIGFnYWluc3QgdGhlIHJlcXVlc3QgcGF0aCB1c2luZyBwYXRoLXRvLXJlZ2V4cC5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hpbmdSb3V0ZURlZmluaXRpb25zUmVkdWNlcihtYXRjaGVkRGVmaW5pdGlvbnM6IGFueVtdLCBkZWZpbmVkUGF0aDogc3RyaW5nLCByZXF1ZXN0UGF0aDogc3RyaW5nKTogYW55W10ge1xuICAgIC8vICdtYXRjaCcgZnJvbSBwYXRoLXRvLXJlZ2V4cCBpcyB1c2VkIGhlcmVcbiAgICBjb25zdCBwYXRoTWF0Y2hlciA9IG1hdGNoKHRyYW5zZm9ybVBhdGhQYXJhbXNEZWNsYXJlZEluQnJhY2VzKGRlZmluZWRQYXRoKSk7XG4gICAgY29uc3QgbWF0Y2hlZCA9IHBhdGhNYXRjaGVyKHJlcXVlc3RQYXRoKTtcblxuICAgIGlmIChtYXRjaGVkKSB7XG4gICAgICAgIC8vIEVuc3VyZSBwYXRoUGFyYW1zIGlzIGFuIG9iamVjdCBvZiBrZXkvdmFsdWUgcGFpcnNcbiAgICAgICAgY29uc3QgcGF0aFBhcmFtcyA9IG1hdGNoZWQucGFyYW1zO1xuXG4gICAgICAgIGNvbnN0IG1hdGNoZWREZWZpbml0aW9uID0ge1xuICAgICAgICAgICAgcDogcmVxdWVzdFBhdGgsXG4gICAgICAgICAgICBkOiBkZWZpbmVkUGF0aCxcbiAgICAgICAgICAgIHBhdGhQYXJhbXM6IHBhdGhQYXJhbXNcbiAgICAgICAgfTtcbiAgICAgICAgbWF0Y2hlZERlZmluaXRpb25zLnB1c2gobWF0Y2hlZERlZmluaXRpb24pO1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hlZERlZmluaXRpb25zO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYW4gSFRUUCBtZWRpYSB0eXBlIGhlYWRlciB2YWx1ZSAoZS5nLiwgXCJ0ZXh0L3BsYWluOyBxPTAuOSwgYXBwbGljYXRpb24vanNvblwiKS5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTWVkaWFUeXBlSGVhZGVyVmFsdWUoc01lZGlhVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoc01lZGlhVHlwZSA9PT0gdW5kZWZpbmVkIHx8IHNNZWRpYVR5cGUgPT09IG51bGwpXG4gICAgICAgIHJldHVybjtcbiAgICAvLyBjb252ZXJ0IHRvIGFycmF5IG9mIGluZGl2aWR1YWwgdHlwZXNcbiAgICBsZXQgYXJyTWVkaWFUeXBlID0gc01lZGlhVHlwZS5zcGxpdCgnLCcpO1xuICAgIGFyck1lZGlhVHlwZSA9IGFyck1lZGlhVHlwZS5tYXAoKG1pbWVUeXBlRW50cnkpID0+IHtcbiAgICAgICAgLy8gcmVtb3ZlIGVzY2FwaW5nLCByZW1vdmUgcXVhbGl0eSBvciBvdGhlciBhdHRyaWJ1dGVzIChlLmcuLCAnOyBxPTAuOScpXG4gICAgICAgIHJldHVybiBtaW1lVHlwZUVudHJ5LnJlcGxhY2UoJ1xcXFwnLCAnJykuc3BsaXQoJzsnKVswXS50cmltKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFyck1lZGlhVHlwZS5maWx0ZXIodHlwZSA9PiB0eXBlLmxlbmd0aCA+IDApO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHNvdXJjZSBNSU1FIHR5cGUgaXMgY29tcGF0aWJsZSB3aXRoIGEgdGFyZ2V0IE1JTUUgdHlwZSwgc3VwcG9ydGluZyB3aWxkY2FyZHMgKCopLlxuICovXG5mdW5jdGlvbiBpc01pbWVUeXBlQ29tcGF0aWJsZShzb3VyY2U6IHN0cmluZywgdGFyZ2V0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoc291cmNlID09PSB0YXJnZXQpXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY29uc3QgdGFyZ2V0TSA9IHRhcmdldC5zcGxpdCgnLycpO1xuICAgIGNvbnN0IHNvdXJjZU0gPSBzb3VyY2Uuc3BsaXQoJy8nKTtcblxuICAgIC8vIFRhcmdldCBpcyB3aWxkY2FyZCB0eXBlLCBTb3VyY2UgaGFzIGEgc3BlY2lmaWMgc3VidHlwZSAoZS5nLiwgdGFyZ2V0PSovanNvbiwgc291cmNlPWFwcGxpY2F0aW9uL2pzb24pXG4gICAgaWYgKHRhcmdldE1bMF0gPT09ICcqJyAmJiB0YXJnZXRNWzFdID09PSBzb3VyY2VNWzFdKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAvLyBTb3VyY2UgaXMgd2lsZGNhcmQgdHlwZSwgVGFyZ2V0IGhhcyBhIHNwZWNpZmljIHN1YnR5cGUgKGUuZy4sIHNvdXJjZT0qL2pzb24sIHRhcmdldD1hcHBsaWNhdGlvbi9qc29uKVxuICAgIGlmIChzb3VyY2VNWzBdID09PSAnKicgJiYgdGFyZ2V0TVsxXSA9PT0gc291cmNlTVsxXSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBUYXJnZXQgaXMgd2lsZGNhcmQgc3VidHlwZSwgU291cmNlIGhhcyBhIHNwZWNpZmljIHR5cGUgKGUuZy4sIHRhcmdldD1hcHBsaWNhdGlvbi8qLCBzb3VyY2U9YXBwbGljYXRpb24vanNvbilcbiAgICBpZiAodGFyZ2V0TVsxXSA9PT0gJyonICYmIHRhcmdldE1bMF0gPT09IHNvdXJjZU1bMF0pXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIC8vIFNvdXJjZSBpcyB3aWxkY2FyZCBzdWJ0eXBlLCBUYXJnZXQgaGFzIGEgc3BlY2lmaWMgdHlwZSAoZS5nLiwgc291cmNlPWFwcGxpY2F0aW9uLyosIHRhcmdldD1hcHBsaWNhdGlvbi9qc29uKVxuICAgIGlmIChzb3VyY2VNWzFdID09PSAnKicgJiYgdGFyZ2V0TVswXSA9PT0gc291cmNlTVswXSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogRGVmYXVsdCBlcnJvciBoYW5kbGVyIGZ1bmN0aW9uLlxuICovXG5jb25zdCBjYXRjaEVycm9ySGFuZGxlciA9IGZ1bmN0aW9uICh0aGlzOiBIdHRwQ29udHJvbGxlciwgbG9nY3R4OiBhbnksIGN0eDogUmVxdWVzdENvbnRleHQsIGVycjogYW55LCByZXF1ZXN0OiBhbnksIHJlc3BvbnNlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoY3R4LnN1cHByZXNzU3RhY2spIHtcbiAgICAgICAgY29uc3QgZGV0YWlsc01zZyA9IChjdHguZXJyb3JOYW1lIHx8IFwiXCIpICsgKGN0eC5lcnJvckNvZGUgPyBcIiBbXCIgKyBjdHguZXJyb3JDb2RlICsgXCJdXCIgOiBcIlwiKSArIChjdHguZXJyb3JNZXNzYWdlID8gXCI6IFwiICsgY3R4LmVycm9yTWVzc2FnZSA6IFwiXCIpO1xuICAgICAgICBsb2dnZXIuaW5mbygnU2VydmluZyByZXNvdXJjZVt7fV0sIFZlcmJbe31dLCBDb250ZW50LVR5cGVbe31dLCBBY2NlcHRbe31dIGZpbmlzaGVkIGluIGVycm9yLiB7fScsIGxvZ2N0eC5wYXRoLCBsb2djdHgubWV0aG9kLCBsb2djdHguY29udGVudFR5cGUsIGxvZ2N0eC5hY2NlcHRzLCBkZXRhaWxzTXNnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ1NlcnZpbmcgcmVzb3VyY2Vbe31dLCBWZXJiW3t9XSwgQ29udGVudC1UeXBlW3t9XSwgQWNjZXB0W3t9XSBmaW5pc2hlZCBpbiBlcnJvcicsIGxvZ2N0eC5wYXRoLCBsb2djdHgubWV0aG9kLCBsb2djdHguY29udGVudFR5cGUsIGxvZ2N0eC5hY2NlcHRzLCBlcnIpO1xuICAgIH1cblxuICAgIGNvbnN0IGh0dHBFcnJvckNvZGUgPSBjdHguaHR0cEVycm9yQ29kZSB8fCByZXNwb25zZS5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gY3R4LmVycm9yTWVzc2FnZSB8fCAoZXJyICYmIGVyci5tZXNzYWdlKTtcbiAgICBjb25zdCBlcnJvck5hbWUgPSBjdHguZXJyb3JOYW1lIHx8IChlcnIgJiYgZXJyLm5hbWUpO1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IGN0eC5lcnJvckNvZGU7XG5cbiAgICB0aGlzLnNlbmRFcnJvcihodHRwRXJyb3JDb2RlLCBlcnJvckNvZGUsIGVycm9yTmFtZSwgZXJyb3JNZXNzYWdlKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSByZXF1ZXN0IG1lZGlhIHR5cGVzIG1hdGNoIHRoZSByZXNvdXJjZSBoYW5kbGVyJ3MgY29uc3VtZXMgYW5kIHByb2R1Y2VzIGNvbnN0cmFpbnRzLlxuICovXG5jb25zdCBtYXRjaE1lZGlhVHlwZSA9IGZ1bmN0aW9uIChyZXF1ZXN0OiBhbnksIHByb2R1Y2VzTWVkaWFUeXBlczogc3RyaW5nW10sIGNvbnN1bWVzTWVkaWFUeXBlczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICBsZXQgaXNQcm9kdWNlTWF0Y2hlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGFjY2VwdHNNZWRpYVR5cGVzID0gbm9ybWFsaXplTWVkaWFUeXBlSGVhZGVyVmFsdWUocmVxdWVzdC5nZXRIZWFkZXIoJ0FjY2VwdCcpKTtcblxuICAgIC8vIDEuIENoZWNrIFByb2R1Y2VzIChBY2NlcHRzIGhlYWRlcilcbiAgICBpZiAoIWFjY2VwdHNNZWRpYVR5cGVzIHx8IGFjY2VwdHNNZWRpYVR5cGVzLmxlbmd0aCA9PT0gMCB8fCBhY2NlcHRzTWVkaWFUeXBlcy5pbmNsdWRlcygnKi8qJykpIHtcbiAgICAgICAgLy8gT3V0cHV0IG1lZGlhIHR5cGUgaXMgbm90IHJlc3RyaWN0ZWQgYnkgY2xpZW50IG9yIGNsaWVudCBhY2NlcHRzIGFueXRoaW5nXG4gICAgICAgIGlzUHJvZHVjZU1hdGNoZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwcm9kdWNlc01lZGlhVHlwZXMgJiYgcHJvZHVjZXNNZWRpYVR5cGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZFByb2R1Y2VzTUlNRSA9IGFjY2VwdHNNZWRpYVR5cGVzLmZpbHRlcigoYWNjZXB0c01lZGlhVHlwZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9kdWNlc01lZGlhVHlwZXMuc29tZSgocHJvZHVjZXNNZWRpYVR5cGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzTWltZVR5cGVDb21wYXRpYmxlKGFjY2VwdHNNZWRpYVR5cGUsIHByb2R1Y2VzTWVkaWFUeXBlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXNQcm9kdWNlTWF0Y2hlZCA9IG1hdGNoZWRQcm9kdWNlc01JTUUgJiYgbWF0Y2hlZFByb2R1Y2VzTUlNRS5sZW5ndGggPiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVzb3VyY2UgZG9lc24ndCBzcGVjaWZ5IHByb2R1Y2VzLCBzbyBpdCBtYXRjaGVzIGlmIHRoZSBjbGllbnQgYWNjZXB0cyBhbnl0aGluZyBvciBpZiBwcm9kdWNlcyBpcyBhbiBlbXB0eSBhcnJheVxuICAgICAgICAgICAgaXNQcm9kdWNlTWF0Y2hlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAyLiBDaGVjayBDb25zdW1lcyAoQ29udGVudC1UeXBlIGhlYWRlcilcbiAgICBsZXQgaXNDb25zdW1lTWF0Y2hlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlTWVkaWFUeXBlcyA9IG5vcm1hbGl6ZU1lZGlhVHlwZUhlYWRlclZhbHVlKHJlcXVlc3QuZ2V0Q29udGVudFR5cGUoKSk7XG5cbiAgICBpZiAoIWNvbnN1bWVzTWVkaWFUeXBlcyB8fCBjb25zdW1lc01lZGlhVHlwZXMubGVuZ3RoID09PSAwIHx8IGNvbnN1bWVzTWVkaWFUeXBlcy5pbmNsdWRlcygnKi8qJykpIHtcbiAgICAgICAgLy8gSW5wdXQgbWVkaWEgdHlwZSBpcyBub3QgcmVzdHJpY3RlZCBieSByZXNvdXJjZSBvciByZXNvdXJjZSBhY2NlcHRzIGFueXRoaW5nXG4gICAgICAgIGlzQ29uc3VtZU1hdGNoZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChjb250ZW50VHlwZU1lZGlhVHlwZXMgJiYgY29uc3VtZXNNZWRpYVR5cGVzICYmIGNvbnN1bWVzTWVkaWFUeXBlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRDb25zdW1lc01JTUUgPSBjb250ZW50VHlwZU1lZGlhVHlwZXMuZmlsdGVyKChjb250ZW50VHlwZU1lZGlhVHlwZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25zdW1lc01lZGlhVHlwZXMuc29tZSgoY29uc3VtZXNNZWRpYVR5cGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzTWltZVR5cGVDb21wYXRpYmxlKGNvbnRlbnRUeXBlTWVkaWFUeXBlLCBjb25zdW1lc01lZGlhVHlwZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlzQ29uc3VtZU1hdGNoZWQgPSBtYXRjaGVkQ29uc3VtZXNNSU1FICYmIG1hdGNoZWRDb25zdW1lc01JTUUubGVuZ3RoID4gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpc1Byb2R1Y2VNYXRjaGVkICYmIGlzQ29uc3VtZU1hdGNoZWQ7XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxZQUFZLGdCQUFnQjtBQUNyQyxTQUFTLFdBQVcsZUFBZTtBQUNuQyxTQUFTLHdCQUF3QjtBQUNqQyxTQUFTLGVBQWU7QUFJeEIsTUFBTSxFQUFFLE1BQU0sSUFBSSxpQkFBaUIsZ0RBQWdEO0FBRW5GLE1BQU0sU0FBYyxRQUFRLFVBQVUsb0JBQW9CO0FBb0IxRCxT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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aerokit/sdk",
3
- "version": "12.56.0",
3
+ "version": "12.58.0",
4
4
  "description": "Unified TypeScript SDK for modern cloud platforms.",
5
5
  "scripts": {
6
6
  "clean": "rm -rf dist",