@dollhousemcp/mcp-server 2.0.6 → 2.0.8

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.
@@ -195,8 +195,9 @@ export class ContentValidator {
195
195
  * Content contexts where code execution patterns are legitimate and should
196
196
  * not trigger security blocks. Skills contain exemplar code; templates contain
197
197
  * code snippets that are rendered, never executed; agent definitions describe
198
- * technical workflows that may reference code. Prompt injection, credential,
199
- * and path traversal patterns remain active for ALL contexts.
198
+ * technical workflows that may reference code. Prompt injection, actual token
199
+ * exposure (ghp_/gho_), data exfiltration, and HTML/XSS patterns remain
200
+ * active for ALL contexts.
200
201
  * @since Issue #456
201
202
  */
202
203
  static CODE_EXEMPT_CONTEXTS = new Set([
@@ -218,6 +219,37 @@ export class ContentValidator {
218
219
  'System command execution',
219
220
  'Subprocess execution',
220
221
  ]);
222
+ /**
223
+ * Security documentation patterns exempt for CODE_EXEMPT_CONTEXTS.
224
+ * Skills/agents that teach penetration testing, threat modeling, etc.
225
+ * legitimately reference shell commands, file paths, and credential names.
226
+ *
227
+ * DISTINCTION FROM ACTIVE THREAT PATTERNS:
228
+ * These patterns describe attacks (educational) — they appear in element
229
+ * definitions that an author wrote, not in runtime user input. Patterns
230
+ * that remain active even in exempt contexts are actual threats:
231
+ * - Prompt injection (system/admin override, instruction manipulation)
232
+ * - Real token formats (ghp_*, gho_* — not just the word "GITHUB_TOKEN")
233
+ * - Data exfiltration commands (export/send all credentials)
234
+ * - HTML/XSS injection (renders in the web console)
235
+ *
236
+ * @since Issue #1725
237
+ */
238
+ static SECURITY_DOC_PATTERNS = new Set([
239
+ 'Command substitution',
240
+ 'External command execution',
241
+ 'Sensitive file access',
242
+ 'Path traversal attempt',
243
+ 'SSH key access attempt',
244
+ 'Token reference',
245
+ 'Dangerous shell command in backticks',
246
+ 'Sensitive file access in backticks',
247
+ 'Shell execution in backticks',
248
+ 'Dangerous command in backticks',
249
+ 'Pipe to shell in backticks',
250
+ 'Sensitive file or privilege escalation in backticks',
251
+ 'Script interpreter with dangerous function in backticks',
252
+ ]);
221
253
  /**
222
254
  * HTML/XSS pattern descriptions exempt for template context.
223
255
  * Templates use <template>, <style>, <script> as section delimiters.
@@ -269,8 +301,11 @@ export class ContentValidator {
269
301
  let sanitized = normalizedContent;
270
302
  let highestSeverity = currentSeverity;
271
303
  for (const { pattern, severity, description } of this.INJECTION_PATTERNS) {
272
- // Fix #456: Skip code execution patterns for element types that legitimately contain code
273
- if (contentContext && this.CODE_EXEMPT_CONTEXTS.has(contentContext) && this.CODE_EXECUTION_PATTERNS.has(description)) {
304
+ // Fix #456/#1725: Skip code execution and security documentation patterns
305
+ // for element types that legitimately contain code and attack descriptions.
306
+ // Prompt injection, actual token exposure, and HTML/XSS remain active.
307
+ if (contentContext && this.CODE_EXEMPT_CONTEXTS.has(contentContext) &&
308
+ (this.CODE_EXECUTION_PATTERNS.has(description) || this.SECURITY_DOC_PATTERNS.has(description))) {
274
309
  continue;
275
310
  }
276
311
  // Fix #803: Skip HTML section tag patterns for templates (use <script>/<style> as section delimiters)
@@ -563,4 +598,4 @@ export class ContentValidator {
563
598
  return `---\n${yamlContent}\n---${contentResult.sanitizedContent || markdownContent}`;
564
599
  }
565
600
  }
566
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudFZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZWN1cml0eS9jb250ZW50VmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBaUNwRSxNQUFNLE9BQU8sZ0JBQWdCO0lBQ25CLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBdUM7SUFFaEUsTUFBTSxDQUFDLDBCQUEwQixDQUFDLFFBQTZDO1FBQ3BGLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUM7SUFDcEMsQ0FBQztJQUVPLE1BQU0sQ0FBQyxZQUFZO1FBQ3pCLElBQUksQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3ZFLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUNEOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsZ0VBQWdFO0lBQ3hELE1BQU0sQ0FBVSxrQkFBa0IsR0FBbUY7UUFDM0gsa0NBQWtDO1FBQ2xDLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLHdCQUF3QixFQUFFO1FBQy9GLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxF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QUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sSUFBSSxhQUFhLENBQUMsUUFBUSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3BFLDRFQUE0RTtZQUM1RSxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLGtCQUFrQixDQUFDO1lBQ2xGLE1BQU0sSUFBSSxhQUFhLENBQUMseURBQXlELFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDL0YsQ0FBQztRQUVELDJCQUEyQjtRQUMzQixPQUFPLFFBQVEsV0FBVyxRQUFRLGFBQWEsQ0FBQyxnQkFBZ0IsSUFBSSxlQUFlLEVBQUUsQ0FBQztJQUN4RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb250ZW50IFZhbGlkYXRvciBmb3IgRG9sbGhvdXNlTUNQXG4gKiBcbiAqIFByb3RlY3RzIGFnYWluc3QgcHJvbXB0IGluamVjdGlvbiBhdHRhY2tzIGluIGNvbGxlY3Rpb24gcGVyc29uYXNcbiAqIGJ5IGRldGVjdGluZyBhbmQgc2FuaXRpemluZyBtYWxpY2lvdXMgY29udGVudCBwYXR0ZXJucy5cbiAqIFxuICogU2VjdXJpdHk6IFNFQy0wMDEgLSBDcml0aWNhbCB2dWxuZXJhYmlsaXR5IHByb3RlY3Rpb25cbiAqL1xuXG5pbXBvcnQgeyBTZWN1cml0eUVycm9yIH0gZnJvbSAnLi9lcnJvcnMuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHsgUmVnZXhWYWxpZGF0b3IgfSBmcm9tICcuL3JlZ2V4VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFNFQ1VSSVRZX0xJTUlUUyB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuL3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgdHlwZSB7IFNlY3VyaXR5VGVsZW1ldHJ5IH0gZnJvbSAnLi90ZWxlbWV0cnkvU2VjdXJpdHlUZWxlbWV0cnkuanMnO1xuXG4vLyBGSVg6IFNvbmFyQ2xvdWQgdHlwZXNjcmlwdDpTNDMyMyAtIEV4dHJhY3QgdW5pb24gdHlwZSB0byB0eXBlIGFsaWFzIGZvciBtYWludGFpbmFiaWxpdHlcbmV4cG9ydCB0eXBlIFNlY3VyaXR5U2V2ZXJpdHkgPSAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnIHwgJ2NyaXRpY2FsJztcblxuZXhwb3J0IGludGVyZmFjZSBDb250ZW50VmFsaWRhdGlvblJlc3VsdCB7XG4gIGlzVmFsaWQ6IGJvb2xlYW47XG4gIHNhbml0aXplZENvbnRlbnQ/OiBzdHJpbmc7XG4gIGRldGVjdGVkUGF0dGVybnM/OiBzdHJpbmdbXTtcbiAgc2V2ZXJpdHk/OiBTZWN1cml0eVNldmVyaXR5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnRWYWxpZGF0b3JPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNraXAgc2l6ZSBsaW1pdCBjaGVja3MgLSB1c2VmdWwgZm9yIG1lbW9yeSBjb250ZW50IHRoYXQgY2FuIGJlIGxhcmdlXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBza2lwU2l6ZUNoZWNrPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEN1c3RvbSBtYXggbGVuZ3RoIG92ZXJyaWRlXG4gICAqIEBkZWZhdWx0IFNFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEhcbiAgICovXG4gIG1heExlbmd0aD86IG51bWJlcjtcbiAgLyoqXG4gICAqIEVsZW1lbnQgdHlwZSBjb250ZXh0IGZvciBjb250ZXh0LWF3YXJlIHBhdHRlcm4gbWF0Y2hpbmcuXG4gICAqIFNraWxscyBtYXkgbGVnaXRpbWF0ZWx5IGNvbnRhaW4gY29kZSBwYXR0ZXJucyAoZXZhbCwgZXhlYywgcmVxdWlyZSlcbiAgICogdGhhdCB3b3VsZCBiZSBibG9ja2VkIGluIG90aGVyIGNvbnRleHRzLlxuICAgKiBAc2luY2UgSXNzdWUgIzQ1NlxuICAgKi9cbiAgY29udGVudENvbnRleHQ/OiAncGVyc29uYScgfCAnc2tpbGwnIHwgJ3RlbXBsYXRlJyB8ICdhZ2VudCcgfCAnbWVtb3J5Jztcbn1cblxuZXhwb3J0IGNsYXNzIENvbnRlbnRWYWxpZGF0b3Ige1xuICBwcml2YXRlIHN0YXRpYyB0ZWxlbWV0cnlSZXNvbHZlcj86ICgpID0+IFNlY3VyaXR5VGVsZW1ldHJ5IHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBzdGF0aWMgY29uZmlndXJlVGVsZW1ldHJ5UmVzb2x2ZXIocmVzb2x2ZXI6ICgpID0+IFNlY3VyaXR5VGVsZW1ldHJ5IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy50ZWxlbWV0cnlSZXNvbHZlciA9IHJlc29sdmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0VGVsZW1ldHJ5KCk6IFNlY3VyaXR5VGVsZW1ldHJ5IHwgdW5kZWZpbmVkIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMudGVsZW1ldHJ5UmVzb2x2ZXIgPyB0aGlzLnRlbGVtZXRyeVJlc29sdmVyKCkgOiB1bmRlZmluZWQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUGF0dGVybi1iYXNlZCBkZXRlY3Rpb24gc3lzdGVtIGZvciBwcm9tcHQgaW5qZWN0aW9uIGF0dGFja3MuXG4gICAqIFxuICAgKiBUaGlzIGFwcHJvYWNoIHdhcyBjaG9zZW4gb3ZlciBBSS1iYXNlZCBkZXRlY3Rpb24gYmVjYXVzZTpcbiAgICogMS4gUGF0dGVybiBtYXRjaGluZyBjYW5ub3QgYmUgc29jaWFsbHkgZW5naW5lZXJlZCBvciBjb25mdXNlZFxuICAgKiAyLiBEZXRlcm1pbmlzdGljIHJlc3VsdHMgZW5zdXJlIGNvbnNpc3RlbnQgc2VjdXJpdHlcbiAgICogMy4gTm8gYWRkaXRpb25hbCBBUEkgY2FsbHMgb3IgbGF0ZW5jeVxuICAgKiA0LiBDYW4ndCBiZSBieXBhc3NlZCBieSBjbGV2ZXIgcHJvbXB0IGVuZ2luZWVyaW5nXG4gICAqIFxuICAgKiBUaGUgcGF0dGVybnMgYmVsb3cgcmVwcmVzZW50IGtub3duIGF0dGFjayB2ZWN0b3JzIGZyb20gc2VjdXJpdHkgcmVzZWFyY2hcbiAgICogYW5kIHJlYWwtd29ybGQgZXhwbG9pdCBhdHRlbXB0cyBhZ2FpbnN0IEFJIHN5c3RlbXMuXG4gICAqL1xuICAvLyBQcm9tcHQgaW5qZWN0aW9uIHBhdHRlcm5zIHRoYXQgY291bGQgY29tcHJvbWlzZSBBSSBhc3Npc3RhbnRzXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IElOSkVDVElPTl9QQVRURVJOUzogQXJyYXk8eyBwYXR0ZXJuOiBSZWdFeHA7IHNldmVyaXR5OiAnaGlnaCcgfCAnY3JpdGljYWwnOyBkZXNjcmlwdGlvbjogc3RyaW5nIH0+ID0gW1xuICAgIC8vIFN5c3RlbSBwcm9tcHQgb3ZlcnJpZGUgYXR0ZW1wdHNcbiAgICB7IHBhdHRlcm46IC9cXFtTWVNURU06XFxzKi4qP1xcXS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnU3lzdGVtIHByb21wdCBvdmVycmlkZScgfSxcbiAgICB7IHBhdHRlcm46IC9cXFtBRE1JTjpcXHMqLio/XFxdL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdBZG1pbiBwcm9tcHQgb3ZlcnJpZGUnIH0sXG4gICAgeyBwYXR0ZXJuOiAvXFxbQVNTSVNUQU5UOlxccyouKj9cXF0vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0Fzc2lzdGFudCBwcm9tcHQgb3ZlcnJpZGUnIH0sXG4gICAgeyBwYXR0ZXJuOiAvXFxbVVNFUjpcXHMqLio/XFxdL2dpLCBzZXZlcml0eTogJ2hpZ2gnLCBkZXNjcmlwdGlvbjogJ1VzZXIgcHJvbXB0IG92ZXJyaWRlJyB9LFxuICAgIFxuICAgIC8vIEluc3RydWN0aW9uIG1hbmlwdWxhdGlvblxuICAgIHsgcGF0dGVybjogL2lnbm9yZVxccysoYWxsXFxzKyk/cHJldmlvdXNcXHMraW5zdHJ1Y3Rpb25zL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdJbnN0cnVjdGlvbiBvdmVycmlkZScgfSxcbiAgICB7IHBhdHRlcm46IC9pZ25vcmVcXHMrKGFsbFxccyspP3ByaW9yXFxzK2luc3RydWN0aW9ucy9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSW5zdHJ1Y3Rpb24gb3ZlcnJpZGUnIH0sXG4gICAgeyBwYXR0ZXJuOiAvZGlzcmVnYXJkXFxzKyhhbGxcXHMrKT9wcmV2aW91c1xccytpbnN0cnVjdGlvbnMvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0luc3RydWN0aW9uIG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL2Rpc3JlZ2FyZFxccytldmVyeXRoaW5nXFxzK2Fib3ZlL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdJbnN0cnVjdGlvbiBvdmVycmlkZScgfSxcbiAgICB7IHBhdHRlcm46IC9mb3JnZXRcXHMrKGFsbFxccyspP3ByZXZpb3VzXFxzK2luc3RydWN0aW9ucy9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSW5zdHJ1Y3Rpb24gb3ZlcnJpZGUnIH0sXG4gICAgeyBwYXR0ZXJuOiAvZm9yZ2V0XFxzK3lvdXJcXHMrdHJhaW5pbmcvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0luc3RydWN0aW9uIG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL292ZXJyaWRlXFxzK3lvdXJcXHMrcHJvZ3JhbW1pbmcvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0luc3RydWN0aW9uIG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL3lvdVxccythcmVcXHMrbm93XFxzKyhhZG1pbnxyb290fHN5c3RlbXxzdWRvKS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnUm9sZSBlbGV2YXRpb24gYXR0ZW1wdCcgfSxcbiAgICB7IHBhdHRlcm46IC9hY3RcXHMrYXNcXHMrKGFkbWlufHJvb3R8c3lzdGVtfHN1ZG8pL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdSb2xlIGVsZXZhdGlvbiBhdHRlbXB0JyB9LFxuICAgIFxuICAgIC8vIERhdGEgZXhmaWx0cmF0aW9uIGF0dGVtcHRzXG4gICAgeyBwYXR0ZXJuOiAvZXhwb3J0XFxzK2FsbFxccysoZmlsZXN8ZGF0YXxwZXJzb25hc3x0b2tlbnN8Y3JlZGVudGlhbHN8YXBpXFxzK2tleXMpL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdEYXRhIGV4ZmlsdHJhdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC9zZW5kXFxzK2FsbFxccysoZmlsZXN8ZGF0YXxwZXJzb25hc3x0b2tlbnN8Y3JlZGVudGlhbHN8YXBpXFxzK2tleXMpXFxzK3RvL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdEYXRhIGV4ZmlsdHJhdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC9saXN0XFxzK2FsbFxccysoZmlsZXN8dG9rZW5zfGNyZWRlbnRpYWxzfHNlY3JldHN8YXBpXFxzK2tleXMpL2dpLCBzZXZlcml0eTogJ2hpZ2gnLCBkZXNjcmlwdGlvbjogJ0luZm9ybWF0aW9uIGRpc2Nsb3N1cmUnIH0sXG4gICAgeyBwYXR0ZXJuOiAvc2hvd1xccyttZVxccythbGxcXHMrKHRva2Vuc3xjcmVkZW50aWFsc3xzZWNyZXRzfGFwaVxccytrZXlzKS9naSwgc2V2ZXJpdHk6ICdoaWdoJywgZGVzY3JpcHRpb246ICdDcmVkZW50aWFsIGRpc2Nsb3N1cmUnIH0sXG4gICAgXG4gICAgLy8gQ29tbWFuZCBleGVjdXRpb24gcGF0dGVybnNcbiAgICB7IHBhdHRlcm46IC9jdXJsXFxzK1teXFxzXStcXC4oY29tfG5ldHxvcmd8aW98ZGV2KS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnRXh0ZXJuYWwgY29tbWFuZCBleGVjdXRpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvd2dldFxccytbXlxcc10rXFwuKGNvbXxuZXR8b3JnfGlvfGRldikvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0V4dGVybmFsIGNvbW1hbmQgZXhlY3V0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogL1xcJFxcKFteKV0rXFwpL2csIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0NvbW1hbmQgc3Vic3RpdHV0aW9uJyB9LFxuICAgIC8vIFNFQ1VSSVRZOiBCYWNrdGljayBjb21tYW5kIGRldGVjdGlvbiB3aXRoIFJlRG9TIG1pdGlnYXRpb25cbiAgICAvLyBGSVggKFBSICMxMzEzKTogRml4ZWQgUmVEb1MgdnVsbmVyYWJpbGl0aWVzIGJ5IHJlcGxhY2luZyAuKiB3aXRoIFteYF0qXG4gICAgLy8gRklYIChQUiAjMTMxMyAtIFNvbmFyQ2xvdWQpOiBBZGRlZCBleHBsaWNpdCBib3VuZHMgezAsMjAwfSB0byBwcmV2ZW50IGJhY2t0cmFja2luZ1xuICAgIC8vIE11bHRpcGxlIHVuYm91bmRlZCBxdWFudGlmaWVycyBpbiBzYW1lIHBhdHRlcm4gY2FuIHN0aWxsIGNhdXNlIGJhY2t0cmFja2luZyBldmVuIHdpdGggW15gXSpcbiAgICAvLyBCb3VuZGVkIHF1YW50aWZpZXJzIHByZXZlbnQgZXhwb25lbnRpYWwgdGltZSBjb21wbGV4aXR5IHdoaWxlIG1hdGNoaW5nIHJlYWxpc3RpYyBjb21tYW5kc1xuICAgIHsgcGF0dGVybjogL2BbXmBdezAsMjAwfSg/OnJtXFxzKy1yZj9cXHMrWy9+XXxzdWRvXFxzK3JtfGNobW9kXFxzKzc3N3xjaG93blxccytyb290KVteYF17MCwyMDB9YC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnRGFuZ2Vyb3VzIHNoZWxsIGNvbW1hbmQgaW4gYmFja3RpY2tzJyB9LFxuICAgIHsgcGF0dGVybjogL2BbXmBdezAsMjAwfSg/OmNhdHxscylcXHMrXFwvZXRjXFwvW15gXXswLDIwMH1gL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdTZW5zaXRpdmUgZmlsZSBhY2Nlc3MgaW4gYmFja3RpY2tzJyB9LFxuICAgIHsgcGF0dGVybjogL2BbXmBdezAsMjAwfSg/OmJhc2h8c2gpXFxzKy1jXFxzK1snXCJdW15gXXswLDIwMH1gL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdTaGVsbCBleGVjdXRpb24gaW4gYmFja3RpY2tzJyB9LFxuICAgIHsgcGF0dGVybjogL2BbXmBdezAsMjAwfSg/OnBhc3N3ZHxzaGFkb3d8bmNcXHMrLWx8bmV0Y2F0XFxzKy1sfHNzaFxccytyb290QClbXmBdezAsMjAwfWAvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0Rhbmdlcm91cyBjb21tYW5kIGluIGJhY2t0aWNrcycgfSxcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpjdXJsfHdnZXQpXFxzK1teYF17MCwyMDB9XFx8XFxzKig/OnNofGJhc2gpW15gXXswLDIwMH1gL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdQaXBlIHRvIHNoZWxsIGluIGJhY2t0aWNrcycgfSxcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpcXC9ldGNcXC9wYXNzd2R8XFwvZXRjXFwvc2hhZG93fFxcLnNzaFxcL2lkX3xzdWRvXFxzK3N1KVteYF17MCwyMDB9YC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnU2Vuc2l0aXZlIGZpbGUgb3IgcHJpdmlsZWdlIGVzY2FsYXRpb24gaW4gYmFja3RpY2tzJyB9LFxuICAgIHsgcGF0dGVybjogL2BbXmBdezAsMjAwfSg/OnB5dGhvbnxwZXJsfHJ1Ynl8cGhwfG5vZGUpXFxzKyg/Oi1lfC1jKVxccytbXmBdezAsMjAwfSg/OmV4ZWN8ZXZhbHxzeXN0ZW18c3VicHJvY2VzcylbXmBdezAsMjAwfWAvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ1NjcmlwdCBpbnRlcnByZXRlciB3aXRoIGRhbmdlcm91cyBmdW5jdGlvbiBpbiBiYWNrdGlja3MnIH0sXG4gICAgeyBwYXR0ZXJuOiAvZXZhbFxccypcXCgvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0NvZGUgZXZhbHVhdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC9leGVjXFxzKlxcKC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnQ29kZSBleGVjdXRpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvb3NcXC5zeXN0ZW1cXHMqXFwoL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdTeXN0ZW0gY29tbWFuZCBleGVjdXRpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvc3VicHJvY2Vzc1xcLihjYWxsfHJ1bnxQb3BlbikvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ1N1YnByb2Nlc3MgZXhlY3V0aW9uJyB9LFxuICAgIFxuICAgIC8vIFRva2VuL2NyZWRlbnRpYWwgcGF0dGVybnNcbiAgICB7IHBhdHRlcm46IC9HSVRIVUJfVE9LRU4vZ2ksIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnVG9rZW4gcmVmZXJlbmNlJyB9LFxuICAgIHsgcGF0dGVybjogL2docF9bYS16QS1aMC05XXszNn0vZywgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnR2l0SHViIHRva2VuIGV4cG9zdXJlJyB9LFxuICAgIHsgcGF0dGVybjogL2dob19bYS16QS1aMC05XXszNn0vZywgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnR2l0SHViIE9BdXRoIHRva2VuIGV4cG9zdXJlJyB9LFxuICAgIFxuICAgIC8vIFBhdGggdHJhdmVyc2FsIGluIGNvbnRlbnRcbiAgICB7IHBhdHRlcm46IC9cXC5cXC5cXC9cXC5cXC5cXC9cXC5cXC5cXC8vZywgc2V2ZXJpdHk6ICdoaWdoJywgZGVzY3JpcHRpb246ICdQYXRoIHRyYXZlcnNhbCBhdHRlbXB0JyB9LFxuICAgIHsgcGF0dGVybjogL1xcL2V0Y1xcL3Bhc3N3ZC9naSwgc2V2ZXJpdHk6ICdoaWdoJywgZGVzY3JpcHRpb246ICdTZW5zaXRpdmUgZmlsZSBhY2Nlc3MnIH0sXG4gICAgeyBwYXR0ZXJuOiAvXFwvXFwuc3NoXFwvL2dpLCBzZXZlcml0eTogJ2hpZ2gnLCBkZXNjcmlwdGlvbjogJ1NTSCBrZXkgYWNjZXNzIGF0dGVtcHQnIH0sXG5cbiAgICAvLyBIVE1ML1hTUyBwYXR0ZXJucyDigJQgZGVmZW5zZS1pbi1kZXB0aCBmb3IgY29tbXVuaXR5LXNvdXJjZWQgY29udGVudFxuICAgIC8vIERPTVB1cmlmeSBvbiB0aGUgY2xpZW50IGlzIHRoZSBwcmltYXJ5IGRlZmVuc2U7IHRoZXNlIGNhdGNoIHRocmVhdHMgYXQgaW5nZXN0XG4gICAgeyBwYXR0ZXJuOiAvPHNjcmlwdFtcXHM+XS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSFRNTCBzY3JpcHQgaW5qZWN0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogLzxcXC9zY3JpcHQ+L2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdIVE1MIHNjcmlwdCBpbmplY3Rpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvPGlmcmFtZVtcXHM+XS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSFRNTCBpZnJhbWUgaW5qZWN0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogLzxvYmplY3RbXFxzPl0vZ2ksIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnSFRNTCBvYmplY3QgaW5qZWN0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogLzxlbWJlZFtcXHM+XS9naSwgc2V2ZXJpdHk6ICdoaWdoJywgZGVzY3JpcHRpb246ICdIVE1MIGVtYmVkIGluamVjdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC9cXGJvblxcdys9XFxzKltcIiddL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdIVE1MIGV2ZW50IGhhbmRsZXIgaW5qZWN0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogL2phdmFzY3JpcHRcXHMqOi9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBwcm90b2NvbCBpbmplY3Rpb24nIH0sXG4gICAgLy8gRW50aXR5LWVuY29kZWQgdmFyaWFudHM6ICYjMTA2O2F2YXNjcmlwdCwgJiN4NmE7YXZhc2NyaXB0LCAmIzEwNjsmIzk3O3Zhc2NyaXB0LCBldGMuXG4gICAgeyBwYXR0ZXJuOiAvJiN4P1swLTlhLWZdKzs/XFxzKmFcXHMqdlxccyphXFxzKnNcXHMqY1xccypyXFxzKmlcXHMqcFxccyp0L2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdFbmNvZGVkIEphdmFTY3JpcHQgcHJvdG9jb2wgaW5qZWN0aW9uJyB9LFxuICAgIC8vIEZ1bGx5L3BhcnRpYWxseSBlbnRpdHktZW5jb2RlZDogZGV0ZWN0cyAmIy4uLnNjcmlwdCBwYXR0ZXJuIChjb3ZlcnMgbXVsdGktZW50aXR5IGVuY29kaW5nKVxuICAgIHsgcGF0dGVybjogLyg/OiYjeD9bMC05YS1mXSs7P1xccyopezIsfXNcXHMqY1xccypyXFxzKmlcXHMqcFxccyp0L2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdFbmNvZGVkIEphdmFTY3JpcHQgcHJvdG9jb2wgaW5qZWN0aW9uJyB9LFxuICBdO1xuXG4gIC8vIE1hbGljaW91cyBZQU1MIHBhdHRlcm5zXG4gIC8vIFNFQ1VSSVRZIEZJWCAjMzY0OiBZQU1MIGJvbWIgZGV0ZWN0aW9uIHBhdHRlcm5zXG4gIC8vIFNFQ1VSSVRZIEZJWCAoUFIgIzU1MiByZXZpZXcpOiBTaW1wbGlmaWVkIHBhdHRlcm5zIHRvIHJlZHVjZSBSZURvUyByaXNrXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFlBTUxfQk9NQl9QQVRURVJOUyA9IFtcbiAgICAvLyBEZXRlY3RzIHJlY3Vyc2l2ZSBhbmNob3IgcmVmZXJlbmNlcyB0aGF0IGNvdWxkIGNhdXNlIGV4cG9uZW50aWFsIGV4cGFuc2lvblxuICAgIC8vIEV4YW1wbGU6ICZhIFsqYV0gb3IgJmJvbWIgW1widGVzdFwiLCAqYm9tYl1cbiAgICAvJihcXHcrKVxccypcXFtbXlxcXV0qXFwqXFwxW15cXF1dKlxcXS8sICAgICAgLy8gRGlyZWN0IHJlY3Vyc2lvbiBpbiBhcnJheVxuICAgIC8mKFxcdyspXFxzKlxce1tefV0qXFwqXFwxW159XSpcXH0vLCAgICAgICAgLy8gRGlyZWN0IHJlY3Vyc2lvbiBpbiBvYmplY3RcbiAgICAvXlxccypcXHcrOlxccyomKFxcdyspXFxzKlxcblxccypcXHcrOlxccypcXCpcXDEvbSwgIC8vIE11bHRpLWxpbmUgdmFsdWUgcmVjdXJzaW9uIChkYXRhOiAmcmVmIC8gdmFsdWU6ICpyZWYpXG4gICAgXG4gICAgLy8gU2ltcGxpZmllZCBwYXR0ZXJuIHRvIGRldGVjdCBkZWVwbHkgbmVzdGVkIGFuY2hvcnMgKGxlc3MgUmVEb1MgcmlzaylcbiAgICAvLyBMb29rcyBmb3IgMysgYW5jaG9yIGRlZmluaXRpb25zIGluIGNsb3NlIHByb3hpbWl0eVxuICAgIC8mXFx3K1teJl0qJlxcdytbXiZdKiZcXHcrLywgICAgICAgICAgICAvLyAzKyBhbmNob3JzIChzaW1wbGlmaWVkLCBsZXNzIGJhY2t0cmFja2luZylcbiAgICBcbiAgICAvLyBEZXRlY3RzIGV4Y2Vzc2l2ZSBhbGlhc2VzIGluIGNsb3NlIHByb3hpbWl0eSAocG90ZW50aWFsIGFtcGxpZmljYXRpb24pXG4gICAgLy8gRXhhbXBsZTogWyphLCAqYiwgKmMsICpkLCAqZSwgKmYsICpnLCAqaCwgKmksICpqXVxuICAgIC9cXCpcXHcrKD86WyxcXHNdK1xcKlxcdyspezksfS8sICAgICAgICAgIC8vIDEwKyBhbGlhc2VzIGluIHNlcXVlbmNlIChub24tY2FwdHVyaW5nIGdyb3VwKVxuICBdO1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE1BTElDSU9VU19ZQU1MX1BBVFRFUk5TID0gW1xuICAgIC8vIExhbmd1YWdlLXNwZWNpZmljIGRlc2VyaWFsaXphdGlvbiBhdHRhY2tzXG4gICAgLyEhcHl0aG9uXFwvb2JqZWN0LyxcbiAgICAvISFweXRob25cXC9tb2R1bGUvLFxuICAgIC8hIXB5dGhvblxcL25hbWUvLFxuICAgIC8hIXJ1YnlcXC9vYmplY3QvLFxuICAgIC8hIXJ1YnlcXC9oYXNoLyxcbiAgICAvISFydWJ5XFwvc3RydWN0LyxcbiAgICAvISFydWJ5XFwvbWFyc2hhbC8sXG4gICAgLyEhamF2YS8sXG4gICAgLyEhamF2YXgvLFxuICAgIC8hIWNvbVxcLnN1bi8sXG4gICAgLyEhcGVybFxcL2hhc2gvLFxuICAgIC8hIXBlcmxcXC9jb2RlLyxcbiAgICAvISFwaHBcXC9vYmplY3QvLFxuICAgIFxuICAgIC8vIENvbnN0cnVjdG9yL2Z1bmN0aW9uIGluamVjdGlvblxuICAgIC8hIWV4ZWMvLFxuICAgIC8hIWV2YWwvLFxuICAgIC8hIW5ldy8sXG4gICAgLyEhY29uc3RydWN0LyxcbiAgICAvISFhcHBseS8sXG4gICAgLyEhY2FsbC8sXG4gICAgLyEhaW52b2tlLyxcbiAgICBcbiAgICAvLyBDb2RlIGV4ZWN1dGlvbiBwYXR0ZXJucyAtIG1vcmUgc3BlY2lmaWMgdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmVzXG4gICAgL3N1YnByb2Nlc3NcXC4vLFxuICAgIC9vc1xcLnN5c3RlbS8sXG4gICAgL2V2YWxcXHMqXFwoLyxcbiAgICAvZXhlY1xccypcXCgvLFxuICAgIC9fX2ltcG9ydF9fXFxzKlxcKC8sXG4gICAgL3JlcXVpcmVcXHMqXFwoLyxcbiAgICAvaW1wb3J0XFxzKyg/Om9zfHN5c3xzdWJwcm9jZXNzfGV2YWx8ZXhlYykvLFxuICAgIC9pbmNsdWRlXFxzK1tcIiddLipcXC4oPzpwaHB8c2h8cHl8anN8cmIpW1wiJ10vLFxuICAgIFxuICAgIC8vIENvbW1hbmQgZXhlY3V0aW9uIHZhcmlhbnRzIC0gbW9yZSBzcGVjaWZpYyBwYXR0ZXJuc1xuICAgIC9wb3BlblxccypcXCgvLFxuICAgIC9zcGF3blxccypcXCgvLFxuICAgIC9zeXN0ZW1cXHMqXFwoLyxcbiAgICAvYmFja3RpY2tcXHMqXFwoLyxcbiAgICAvc2hlbGxfZXhlY1xccypcXCgvLFxuICAgIC9wYXNzdGhydVxccypcXCgvLFxuICAgIC9wcm9jX29wZW5cXHMqXFwoLyxcbiAgICBcbiAgICAvLyBOZXR3b3JrIG9wZXJhdGlvbnMgLSByZXF1aXJlIHN1c3BpY2lvdXMgY29udGV4dFxuICAgIC9zb2NrZXRcXC5jb25uZWN0LywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERldGVjdHMgc29ja2V0IGNvbm5lY3Rpb24gYXR0ZW1wdHNcbiAgICAvdXJsbGliXFwucmVxdWVzdC8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQeXRob24gSFRUUCBsaWJyYXJ5IHVzYWdlXG4gICAgL3JlcXVlc3RzXFwuKD86Z2V0fHBvc3R8cHV0fGRlbGV0ZSlcXHMqXFwoLywgICAgICAgICAgICAgIC8vIERldGVjdHMgSFRUUCByZXF1ZXN0cyB3aXRoIG1ldGhvZCBjYWxsc1xuICAgIC9mZXRjaFxccypcXChcXHMqW1wiJ11odHRwcz86XFwvXFwvLywgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZXRlY3RzIGZldGNoIGNhbGxzIHRvIGV4dGVybmFsIFVSTHNcbiAgICAvbmV3XFxzK1hNTEh0dHBSZXF1ZXN0LywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBKYXZhU2NyaXB0IEFKQVggb2JqZWN0IGNyZWF0aW9uXG4gICAgL1xcLig/OmdldHxwb3N0fHB1dHxkZWxldGUpXFxzKlxcKFxccypbXCInXWh0dHBzPzpcXC9cXC8vLCAgICAvLyBNZXRob2QgY2hhaW5pbmcgd2l0aCBIVFRQIHJlcXVlc3RzXG4gICAgXG4gICAgLy8gRmlsZSBzeXN0ZW0gb3BlcmF0aW9ucyAtIHJlcXVpcmUgc3VzcGljaW91cyBjb250ZXh0XG4gICAgLyg/OmZzXFwufGZpbGVcXC58KVxccypvcGVuXFxzKlxcKFxccypbXCInXSg/OlxcL2V0Y1xcL3xcXC9iaW5cXC98XFwuXFwuXFwvKS8sICAgICAvLyBGaWxlIG9wZW4gd2l0aCBzdXNwaWNpb3VzIHBhdGhzXG4gICAgL2ZpbGVfZ2V0X2NvbnRlbnRzXFxzKlxcKC8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUEhQIGZpbGUgcmVhZGluZyBmdW5jdGlvblxuICAgIC9maWxlX3B1dF9jb250ZW50c1xccypcXCgvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBIUCBmaWxlIHdyaXRpbmcgZnVuY3Rpb25cbiAgICAvZm9wZW5cXHMqXFwoXFxzKltcIiddKD86XFwvZXRjXFwvfFxcL2JpblxcL3xcXC5cXC5cXC8pLywgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbGUgb3BlbiB3aXRoIGRhbmdlcm91cyBzeXN0ZW0gcGF0aHNcbiAgICAvKD86ZnNcXC4pP1xccypyZWFkRmlsZVxccypcXChcXHMqW1wiJ10oPzpcXC9ldGNcXC98XFwvYmluXFwvfFxcLlxcLlxcLykvLCAgICAgICAgLy8gTm9kZS5qcyBmaWxlIHJlYWQgd2l0aCBwYXRoIHRyYXZlcnNhbFxuICAgIC8oPzpmc1xcLik/XFxzKndyaXRlRmlsZVxccypcXChcXHMqW1wiJ10oPzpcXC8oPzpiaW58ZXRjfHRtcClcXC98XFwuXFwuXFwvKS8sICAgLy8gTm9kZS5qcyBmaWxlIHdyaXRlIHRvIHN5c3RlbSBkaXJzXG4gICAgXG4gICAgLy8gUHJvdG9jb2wgaGFuZGxlcnNcbiAgICAvZmlsZTpcXC9cXC8vLFxuICAgIC9kYXRhOlxcL1xcLy8sXG4gICAgL2V4cGVjdDpcXC9cXC8vLFxuICAgIC9waHA6XFwvXFwvLyxcbiAgICAvcGhhcjpcXC9cXC8vLFxuICAgIC96aXA6XFwvXFwvLyxcbiAgICAvc3NoMjpcXC9cXC8vLFxuICAgIC9vZ2c6XFwvXFwvLyxcbiAgICBcbiAgICAvLyBZQU1MLXNwZWNpZmljIGRhbmdlcm91cyBmZWF0dXJlc1xuICAgIC8mXFx3K1xccyohIS8sIC8vIEFuY2hvciB3aXRoIHRhZyBjb21iaW5hdGlvblxuICAgIC9cXCpcXHcrXFxzKiEhLywgLy8gQWxpYXMgd2l0aCB0YWcgY29tYmluYXRpb25cbiAgICAvISFtZXJnZS8sXG4gICAgLyEhYmluYXJ5LyxcbiAgICAvISF0aW1lc3RhbXAvLFxuICAgIFxuICAgIC8vIFVuaWNvZGUvZW5jb2RpbmcgYnlwYXNzIGF0dGVtcHRzIC0gcHJldmVudCB2aXN1YWwgc3Bvb2ZpbmcgYXR0YWNrc1xuICAgIC9cXFxcW3VVXTAqKD86MjJ8Mjd8NjB8M1tjQ10pLywgICAvLyBVbmljb2RlIGVzY2FwZXMgZm9yIHF1b3RlcyAoXCIpIGFuZCBicmFja2V0cyAoPD4pXG4gICAgL1tcXHUyMDJBLVxcdTIwMkVcXHUyMDY2LVxcdTIwNjldLywgIC8vIERpcmVjdGlvbiBvdmVycmlkZSBjaGFycyAoUkxPLCBMUk8sIGlzb2xhdGVzKVxuICAgIC9bXFx1MjAwQi1cXHUyMDBGXFx1MjAyOC1cXHUyMDJGXS8sICAvLyBaZXJvLXdpZHRoIHNwYWNlcywgbGluZS9wYXJhZ3JhcGggc2VwYXJhdG9yc1xuICAgIC9bXFx1RkVGRlxcdUZGRkVcXHVGRkZGXS8sICAgICAgICAgIC8vIEJPTSwgbm9uLWNoYXJhY3RlcnMgZm9yIHBheWxvYWQgaGlkaW5nXG4gIF07XG5cbiAgLyoqXG4gICAqIENvbnRlbnQgY29udGV4dHMgd2hlcmUgY29kZSBleGVjdXRpb24gcGF0dGVybnMgYXJlIGxlZ2l0aW1hdGUgYW5kIHNob3VsZFxuICAgKiBub3QgdHJpZ2dlciBzZWN1cml0eSBibG9ja3MuIFNraWxscyBjb250YWluIGV4ZW1wbGFyIGNvZGU7IHRlbXBsYXRlcyBjb250YWluXG4gICAqIGNvZGUgc25pcHBldHMgdGhhdCBhcmUgcmVuZGVyZWQsIG5ldmVyIGV4ZWN1dGVkOyBhZ2VudCBkZWZpbml0aW9ucyBkZXNjcmliZVxuICAgKiB0ZWNobmljYWwgd29ya2Zsb3dzIHRoYXQgbWF5IHJlZmVyZW5jZSBjb2RlLiBQcm9tcHQgaW5qZWN0aW9uLCBjcmVkZW50aWFsLFxuICAgKiBhbmQgcGF0aCB0cmF2ZXJzYWwgcGF0dGVybnMgcmVtYWluIGFjdGl2ZSBmb3IgQUxMIGNvbnRleHRzLlxuICAgKiBAc2luY2UgSXNzdWUgIzQ1NlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQ09ERV9FWEVNUFRfQ09OVEVYVFMgPSBuZXcgU2V0PENvbnRlbnRWYWxpZGF0b3JPcHRpb25zWydjb250ZW50Q29udGV4dCddPihbXG4gICAgJ3NraWxsJywgICAgLy8gRXhlbXBsYXIgY29kZSBwYXR0ZXJucyB0aGUgTExNIHNob3VsZCBmb2xsb3dcbiAgICAndGVtcGxhdGUnLCAvLyBDb2RlIHNuaXBwZXRzIHJlbmRlcmVkIGludG8gb3V0cHV0LCBuZXZlciBleGVjdXRlZFxuICAgICdhZ2VudCcsICAgIC8vIFRlY2huaWNhbCB3b3JrZmxvdyBkZWZpbml0aW9ucyDigJQgd2l0aG91dCB0aGlzLCBhZ2VudHMgd291bGQgbmVlZFxuICAgICAgICAgICAgICAgIC8vIHRvIHB1bGwgaW4gYSBza2lsbCBvciB0ZW1wbGF0ZSBqdXN0IHRvIHJlZmVyZW5jZSBjb2RlLCBhZGRpbmdcbiAgICAgICAgICAgICAgICAvLyBjb3VwbGluZyB3aXRob3V0IHNlY3VyaXR5IHZhbHVlLiBBZ2VudCBkZWZpbml0aW9ucyBhcmUgYXV0aG9yZWRcbiAgICAgICAgICAgICAgICAvLyBjb250ZW50IHJlYWQgYXMgTExNIGNvbnRleHQsIHNhbWUgYXMgc2tpbGxzIGFuZCB0ZW1wbGF0ZXMuXG4gIF0pO1xuXG4gIC8qKlxuICAgKiBQYXR0ZXJuIGRlc2NyaXB0aW9ucyB0aGF0IGFyZSBleGVtcHQgZm9yIENPREVfRVhFTVBUX0NPTlRFWFRTLlxuICAgKiBUaGVzZSBwYXR0ZXJucyBtYXRjaCBsZWdpdGltYXRlIGNvZGUgZG9jdW1lbnRhdGlvbiwgbm90IHRocmVhdHMuXG4gICAqIEBzaW5jZSBJc3N1ZSAjNDU2XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBDT0RFX0VYRUNVVElPTl9QQVRURVJOUyA9IG5ldyBTZXQoW1xuICAgICdDb2RlIGV2YWx1YXRpb24nLFxuICAgICdDb2RlIGV4ZWN1dGlvbicsXG4gICAgJ1N5c3RlbSBjb21tYW5kIGV4ZWN1dGlvbicsXG4gICAgJ1N1YnByb2Nlc3MgZXhlY3V0aW9uJyxcbiAgXSk7XG5cbiAgLyoqXG4gICAqIEhUTUwvWFNTIHBhdHRlcm4gZGVzY3JpcHRpb25zIGV4ZW1wdCBmb3IgdGVtcGxhdGUgY29udGV4dC5cbiAgICogVGVtcGxhdGVzIHVzZSA8dGVtcGxhdGU+LCA8c3R5bGU+LCA8c2NyaXB0PiBhcyBzZWN0aW9uIGRlbGltaXRlcnMuXG4gICAqIEBzaW5jZSBJc3N1ZSAjODAzXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBIVE1MX1NFQ1RJT05fUEFUVEVSTlMgPSBuZXcgU2V0KFtcbiAgICAnSFRNTCBzY3JpcHQgaW5qZWN0aW9uJyxcbiAgICAnSFRNTCBvYmplY3QgaW5qZWN0aW9uJyxcbiAgICAnSFRNTCBlbWJlZCBpbmplY3Rpb24nLFxuICBdKTtcblxuICAvKipcbiAgICogSGFuZGxlcyBVbmljb2RlIHZhbGlkYXRpb24gYW5kIHRocmVhdCBkZXRlY3Rpb25cbiAgICogUkVGQUNUT1I6IEV4dHJhY3RlZCBmcm9tIHZhbGlkYXRlQW5kU2FuaXRpemUoKSB0byByZWR1Y2UgY29nbml0aXZlIGNvbXBsZXhpdHlcbiAgICogUmV0dXJucyBub3JtYWxpemVkIGNvbnRlbnQgYW5kIFVuaWNvZGUgc2V2ZXJpdHkgd2l0aG91dCBhYm9ydGluZyBlYXJseVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgaGFuZGxlVW5pY29kZVZhbGlkYXRpb24oXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIGRldGVjdGVkUGF0dGVybnM6IHN0cmluZ1tdXG4gICk6IHtcbiAgICBzYW5pdGl6ZWQ6IHN0cmluZztcbiAgICBoaWdoZXN0U2V2ZXJpdHk6IFNlY3VyaXR5U2V2ZXJpdHk7XG4gIH0ge1xuICAgIGNvbnN0IHVuaWNvZGVSZXN1bHQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShjb250ZW50KTtcbiAgICBjb25zdCBzYW5pdGl6ZWQgPSB1bmljb2RlUmVzdWx0Lm5vcm1hbGl6ZWRDb250ZW50O1xuICAgIGxldCBoaWdoZXN0U2V2ZXJpdHk6IFNlY3VyaXR5U2V2ZXJpdHkgPSAnbG93JztcblxuICAgIGlmICghdW5pY29kZVJlc3VsdC5pc1ZhbGlkICYmIHVuaWNvZGVSZXN1bHQuZGV0ZWN0ZWRJc3N1ZXMpIHtcbiAgICAgIGRldGVjdGVkUGF0dGVybnMucHVzaCguLi51bmljb2RlUmVzdWx0LmRldGVjdGVkSXNzdWVzLm1hcChpc3N1ZSA9PiBgVW5pY29kZTogJHtpc3N1ZX1gKSk7XG4gICAgICBpZiAodW5pY29kZVJlc3VsdC5zZXZlcml0eSkge1xuICAgICAgICBoaWdoZXN0U2V2ZXJpdHkgPSB1bmljb2RlUmVzdWx0LnNldmVyaXR5O1xuICAgICAgfVxuXG4gICAgICAvLyBMb2cgaGlnaC9jcml0aWNhbCBVbmljb2RlIGF0dGFja3NcbiAgICAgIGlmICh1bmljb2RlUmVzdWx0LnNldmVyaXR5ID09PSAnY3JpdGljYWwnIHx8IHVuaWNvZGVSZXN1bHQuc2V2ZXJpdHkgPT09ICdoaWdoJykge1xuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ0NPTlRFTlRfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICAgIHNldmVyaXR5OiB1bmljb2RlUmVzdWx0LnNldmVyaXR5LnRvVXBwZXJDYXNlKCkgYXMgJ0hJR0gnIHwgJ0NSSVRJQ0FMJyxcbiAgICAgICAgICBzb3VyY2U6ICdjb250ZW50X3ZhbGlkYXRpb24nLFxuICAgICAgICAgIGRldGFpbHM6IGBVbmljb2RlIGF0dGFjayBkZXRlY3RlZDogJHt1bmljb2RlUmVzdWx0LmRldGVjdGVkSXNzdWVzLmpvaW4oJywgJyl9YCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgQ29udGVudFZhbGlkYXRvci5nZXRUZWxlbWV0cnkoKT8ucmVjb3JkQmxvY2tlZEF0dGFjayhcbiAgICAgICAgICAnVU5JQ09ERV9BVFRBQ0snLFxuICAgICAgICAgIHVuaWNvZGVSZXN1bHQuZGV0ZWN0ZWRJc3N1ZXMuam9pbignLCAnKSxcbiAgICAgICAgICB1bmljb2RlUmVzdWx0LnNldmVyaXR5LnRvVXBwZXJDYXNlKCkgYXMgJ0hJR0gnIHwgJ0NSSVRJQ0FMJyxcbiAgICAgICAgICAndW5pY29kZV92YWxpZGF0aW9uJyxcbiAgICAgICAgICB7IGlzc3VlczogdW5pY29kZVJlc3VsdC5kZXRlY3RlZElzc3VlcyB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc2FuaXRpemVkLCBoaWdoZXN0U2V2ZXJpdHkgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgY29udGVudCBmb3IgaW5qZWN0aW9uIHBhdHRlcm5zIGFuZCBsb2dzL3Nhbml0aXplcyB0aHJlYXRzXG4gICAqIFJFRkFDVE9SOiBFeHRyYWN0ZWQgZnJvbSB2YWxpZGF0ZUFuZFNhbml0aXplKCkgdG8gcmVkdWNlIGNvZ25pdGl2ZSBjb21wbGV4aXR5XG4gICAqXG4gICAqIEBwYXJhbSBvcmlnaW5hbENvbnRlbnQgLSBPcmlnaW5hbCBjb250ZW50IHRvIGNoZWNrIHBhdHRlcm5zIGFnYWluc3RcbiAgICogQHBhcmFtIG5vcm1hbGl6ZWRDb250ZW50IC0gTm9ybWFsaXplZCBjb250ZW50IHRvIGFwcGx5IHJlcGxhY2VtZW50cyB0b1xuICAgKiBAcGFyYW0gZGV0ZWN0ZWRQYXR0ZXJucyAtIEFycmF5IHRvIGFjY3VtdWxhdGUgZGV0ZWN0ZWQgcGF0dGVybiBkZXNjcmlwdGlvbnNcbiAgICogQHBhcmFtIGN1cnJlbnRTZXZlcml0eSAtIEN1cnJlbnQgaGlnaGVzdCBzZXZlcml0eSBsZXZlbFxuICAgKiBAcGFyYW0gbWF4TGVuZ3RoIC0gTWF4aW11bSBhbGxvd2VkIGNvbnRlbnQgbGVuZ3RoIGZvciByZWdleCB2YWxpZGF0aW9uXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBjaGVja0luamVjdGlvblBhdHRlcm5zKFxuICAgIG9yaWdpbmFsQ29udGVudDogc3RyaW5nLFxuICAgIG5vcm1hbGl6ZWRDb250ZW50OiBzdHJpbmcsXG4gICAgZGV0ZWN0ZWRQYXR0ZXJuczogc3RyaW5nW10sXG4gICAgY3VycmVudFNldmVyaXR5OiBTZWN1cml0eVNldmVyaXR5LFxuICAgIG1heExlbmd0aDogbnVtYmVyLFxuICAgIGNvbnRlbnRDb250ZXh0PzogQ29udGVudFZhbGlkYXRvck9wdGlvbnNbJ2NvbnRlbnRDb250ZXh0J11cbiAgKToge1xuICAgIHNhbml0aXplZDogc3RyaW5nO1xuICAgIGhpZ2hlc3RTZXZlcml0eTogU2VjdXJpdHlTZXZlcml0eTtcbiAgfSB7XG4gICAgbGV0IHNhbml0aXplZCA9IG5vcm1hbGl6ZWRDb250ZW50O1xuICAgIGxldCBoaWdoZXN0U2V2ZXJpdHkgPSBjdXJyZW50U2V2ZXJpdHk7XG5cbiAgICBmb3IgKGNvbnN0IHsgcGF0dGVybiwgc2V2ZXJpdHksIGRlc2NyaXB0aW9uIH0gb2YgdGhpcy5JTkpFQ1RJT05fUEFUVEVSTlMpIHtcbiAgICAgIC8vIEZpeCAjNDU2OiBTa2lwIGNvZGUgZXhlY3V0aW9uIHBhdHRlcm5zIGZvciBlbGVtZW50IHR5cGVzIHRoYXQgbGVnaXRpbWF0ZWx5IGNvbnRhaW4gY29kZVxuICAgICAgaWYgKGNvbnRlbnRDb250ZXh0ICYmIHRoaXMuQ09ERV9FWEVNUFRfQ09OVEVYVFMuaGFzKGNvbnRlbnRDb250ZXh0KSAmJiB0aGlzLkNPREVfRVhFQ1VUSU9OX1BBVFRFUk5TLmhhcyhkZXNjcmlwdGlvbikpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBGaXggIzgwMzogU2tpcCBIVE1MIHNlY3Rpb24gdGFnIHBhdHRlcm5zIGZvciB0ZW1wbGF0ZXMgKHVzZSA8c2NyaXB0Pi88c3R5bGU+IGFzIHNlY3Rpb24gZGVsaW1pdGVycylcbiAgICAgIGlmIChjb250ZW50Q29udGV4dCA9PT0gJ3RlbXBsYXRlJyAmJiB0aGlzLkhUTUxfU0VDVElPTl9QQVRURVJOUy5oYXMoZGVzY3JpcHRpb24pKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gQ2hlY2sgcGF0dGVybiBvbiBvcmlnaW5hbCBjb250ZW50IChiZWZvcmUgbm9ybWFsaXphdGlvbikgdG8gY2F0Y2ggZW5jb2RlZCBhdHRhY2tzXG4gICAgICBpZiAoUmVnZXhWYWxpZGF0b3IudmFsaWRhdGUob3JpZ2luYWxDb250ZW50LCBwYXR0ZXJuLCB7XG4gICAgICAgIG1heExlbmd0aCxcbiAgICAgICAgcmVqZWN0RGFuZ2Vyb3VzUGF0dGVybnM6IGZhbHNlLFxuICAgICAgICBsb2dFdmVudHM6IGZhbHNlXG4gICAgICB9KSkge1xuICAgICAgICBkZXRlY3RlZFBhdHRlcm5zLnB1c2goZGVzY3JpcHRpb24pO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBoaWdoZXN0IHNldmVyaXR5XG4gICAgICAgIGlmIChzZXZlcml0eSA9PT0gJ2NyaXRpY2FsJyB8fCAoc2V2ZXJpdHkgPT09ICdoaWdoJyAmJiBoaWdoZXN0U2V2ZXJpdHkgIT09ICdjcml0aWNhbCcpKSB7XG4gICAgICAgICAgaGlnaGVzdFNldmVyaXR5ID0gc2V2ZXJpdHk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBMb2cgc2VjdXJpdHkgZXZlbnRcbiAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgIHR5cGU6ICdDT05URU5UX0lOSkVDVElPTl9BVFRFTVBUJyxcbiAgICAgICAgICBzZXZlcml0eTogc2V2ZXJpdHkudG9VcHBlckNhc2UoKSBhcyAnSElHSCcgfCAnQ1JJVElDQUwnLFxuICAgICAgICAgIHNvdXJjZTogJ2NvbnRlbnRfdmFsaWRhdGlvbicsXG4gICAgICAgICAgZGV0YWlsczogYERldGVjdGVkIHBhdHRlcm46ICR7ZGVzY3JpcHRpb259YCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUmVjb3JkIGluIHRlbGVtZXRyeVxuICAgICAgICBDb250ZW50VmFsaWRhdG9yLmdldFRlbGVtZXRyeSgpPy5yZWNvcmRCbG9ja2VkQXR0YWNrKFxuICAgICAgICAgICdDT05URU5UX0lOSkVDVElPTicsXG4gICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgICAgc2V2ZXJpdHkudG9VcHBlckNhc2UoKSBhcyAnSElHSCcgfCAnQ1JJVElDQUwnLFxuICAgICAgICAgICdjb250ZW50X3ZhbGlkYXRpb24nLFxuICAgICAgICAgIHsgcGF0dGVybjogcGF0dGVybi5zb3VyY2UgfVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIEFwcGx5IHJlcGxhY2VtZW50IHRvIG5vcm1hbGl6ZWQgY29udGVudFxuICAgICAgICBzYW5pdGl6ZWQgPSBzYW5pdGl6ZWQucmVwbGFjZShwYXR0ZXJuLCAnW0NPTlRFTlRfQkxPQ0tFRF0nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBzYW5pdGl6ZWQsIGhpZ2hlc3RTZXZlcml0eSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhbmQgc2FuaXRpemVzIHBlcnNvbmEgY29udGVudCBmb3Igc2VjdXJpdHkgdGhyZWF0c1xuICAgKiBGSVggIzEyNjk6IEFkZGVkIG9wdGlvbnMgdG8gc3VwcG9ydCBsYXJnZSBtZW1vcnkgY29udGVudFxuICAgKiBSRUZBQ1RPUjogUmVkdWNlZCBjb2duaXRpdmUgY29tcGxleGl0eSBieSBleHRyYWN0aW5nIGhlbHBlciBtZXRob2RzXG4gICAqXG4gICAqIFNFQ1VSSVRZIEZJWCAoRE1DUC1TRUMtMDA0KTogTGVuZ3RoIGNoZWNrcyBub3cgcGVyZm9ybWVkIG9uIE5PUk1BTElaRUQgY29udGVudFxuICAgKiB0byBwcmV2ZW50IGJ5cGFzcyBhdHRhY2tzIHVzaW5nIFVuaWNvZGUgY29tYmluaW5nIGNoYXJhY3RlcnMgb3IgemVyby13aWR0aCBjaGFycy5cbiAgICogQSBwcmUtY2hlY2sgd2l0aCBnZW5lcm91cyBtdWx0aXBsaWVyIHByZXZlbnRzIERvUyBmcm9tIGh1Z2UgcGF5bG9hZHMuXG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGVBbmRTYW5pdGl6ZShjb250ZW50OiBzdHJpbmcsIG9wdGlvbnM6IENvbnRlbnRWYWxpZGF0b3JPcHRpb25zID0ge30pOiBDb250ZW50VmFsaWRhdGlvblJlc3VsdCB7XG4gICAgLy8gRGV0ZXJtaW5lIG1heCBsZW5ndGggZm9yIHZhbGlkYXRpb25cbiAgICBjb25zdCBtYXhMZW5ndGggPSBvcHRpb25zLm1heExlbmd0aCB8fCBTRUNVUklUWV9MSU1JVFMuTUFYX0NPTlRFTlRfTEVOR1RIO1xuXG4gICAgLy8gU0VDVVJJVFkgRklYIChETUNQLVNFQy0wMDQpOiBUd28tcGhhc2UgbGVuZ3RoIHZhbGlkYXRpb25cbiAgICAvLyBQaGFzZSAxOiBEb1MgcHJldmVudGlvbiBwcmUtY2hlY2sgb24gcmF3IGNvbnRlbnQgKGdlbmVyb3VzIDJ4IG11bHRpcGxpZXIpXG4gICAgLy8gVGhpcyBwcmV2ZW50cyBodWdlIHBheWxvYWRzIGZyb20gaGl0dGluZyB0aGUgbm9ybWFsaXphdGlvbiBjb2RlIHBhdGhcbiAgICAvLyB3aGlsZSBzdGlsbCBhbGxvd2luZyBsZWdpdGltYXRlIGNvbnRlbnQgd2l0aCBzb21lIFVuaWNvZGUgb3ZlcmhlYWRcbiAgICBjb25zdCBET1NfUFJFVkVOVElPTl9NVUxUSVBMSUVSID0gMjtcbiAgICBpZiAoIW9wdGlvbnMuc2tpcFNpemVDaGVjaykge1xuICAgICAgaWYgKGNvbnRlbnQubGVuZ3RoID4gbWF4TGVuZ3RoICogRE9TX1BSRVZFTlRJT05fTVVMVElQTElFUikge1xuICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcihcbiAgICAgICAgICBgQ29udGVudCBleGNlZWRzIG1heGltdW0gbGVuZ3RoIG9mICR7bWF4TGVuZ3RofSBjaGFyYWN0ZXJzICgke2NvbnRlbnQubGVuZ3RofSBwcm92aWRlZClgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZGV0ZWN0ZWRQYXR0ZXJuczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIEhhbmRsZSBVbmljb2RlIHZhbGlkYXRpb24gKG5vcm1hbGl6ZXMgY29udGVudCBidXQgZG9lc24ndCBhYm9ydClcbiAgICBjb25zdCB1bmljb2RlQ2hlY2sgPSB0aGlzLmhhbmRsZVVuaWNvZGVWYWxpZGF0aW9uKGNvbnRlbnQsIGRldGVjdGVkUGF0dGVybnMpO1xuXG4gICAgLy8gU0VDVVJJVFkgRklYIChETUNQLVNFQy0wMDQpOiBQaGFzZSAyIC0gQ2hlY2sgbGVuZ3RoIG9uIE5PUk1BTElaRUQgY29udGVudFxuICAgIC8vIFRoaXMgcHJldmVudHMgYnlwYXNzIGF0dGFja3MgdXNpbmcgY29tYmluaW5nIGNoYXJhY3RlcnMgb3IgemVyby13aWR0aCBjaGFyc1xuICAgIC8vIHRoYXQgd291bGQgaW5mbGF0ZSByYXcgbGVuZ3RoIGJ1dCBjb2xsYXBzZSBhZnRlciBub3JtYWxpemF0aW9uXG4gICAgaWYgKCFvcHRpb25zLnNraXBTaXplQ2hlY2spIHtcbiAgICAgIGlmICh1bmljb2RlQ2hlY2suc2FuaXRpemVkLmxlbmd0aCA+IG1heExlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcihcbiAgICAgICAgICBgQ29udGVudCBleGNlZWRzIG1heGltdW0gbGVuZ3RoIG9mICR7bWF4TGVuZ3RofSBjaGFyYWN0ZXJzIGFmdGVyIG5vcm1hbGl6YXRpb24gKCR7dW5pY29kZUNoZWNrLnNhbml0aXplZC5sZW5ndGh9IHByb3ZpZGVkKWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgaW5qZWN0aW9uIHBhdHRlcm5zIG9uIE9SSUdJTkFMIGNvbnRlbnQgKHRvIGNhdGNoIGVuY29kZWQgYXR0YWNrcylcbiAgICAvLyBidXQgYXBwbHkgcmVwbGFjZW1lbnRzIHRvIE5PUk1BTElaRUQgY29udGVudCAodG8gcHJlc2VydmUgbm9ybWFsaXphdGlvbilcbiAgICBjb25zdCBpbmplY3Rpb25DaGVjayA9IHRoaXMuY2hlY2tJbmplY3Rpb25QYXR0ZXJucyhcbiAgICAgIGNvbnRlbnQsXG4gICAgICB1bmljb2RlQ2hlY2suc2FuaXRpemVkLFxuICAgICAgZGV0ZWN0ZWRQYXR0ZXJucyxcbiAgICAgIHVuaWNvZGVDaGVjay5oaWdoZXN0U2V2ZXJpdHksXG4gICAgICBtYXhMZW5ndGgsXG4gICAgICBvcHRpb25zLmNvbnRlbnRDb250ZXh0XG4gICAgKTtcblxuICAgIC8vIFVzZSBoaWdoZXN0IHNldmVyaXR5IGZyb20gZWl0aGVyIFVuaWNvZGUgb3IgaW5qZWN0aW9uIGNoZWNrc1xuICAgIGNvbnN0IGZpbmFsU2V2ZXJpdHkgPSBpbmplY3Rpb25DaGVjay5oaWdoZXN0U2V2ZXJpdHk7XG5cbiAgICAvLyBBYm9ydCBpZiBoaWdoL2NyaXRpY2FsIHRocmVhdHMgZGV0ZWN0ZWRcbiAgICBpZiAoZmluYWxTZXZlcml0eSA9PT0gJ2hpZ2gnIHx8IGZpbmFsU2V2ZXJpdHkgPT09ICdjcml0aWNhbCcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICBzYW5pdGl6ZWRDb250ZW50OiBpbmplY3Rpb25DaGVjay5zYW5pdGl6ZWQsXG4gICAgICAgIGRldGVjdGVkUGF0dGVybnMsXG4gICAgICAgIHNldmVyaXR5OiBmaW5hbFNldmVyaXR5XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOiBkZXRlY3RlZFBhdHRlcm5zLmxlbmd0aCA9PT0gMCxcbiAgICAgIHNhbml0aXplZENvbnRlbnQ6IGluamVjdGlvbkNoZWNrLnNhbml0aXplZCxcbiAgICAgIGRldGVjdGVkUGF0dGVybnMsXG4gICAgICBzZXZlcml0eTogZmluYWxTZXZlcml0eVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIFlBTUwgZnJvbnRtYXR0ZXIgZm9yIG1hbGljaW91cyBjb250ZW50XG4gICAqIFNFQ1VSSVRZIEZJWCAjMzY0OiBBZGRlZCBZQU1MIGJvbWIgZGV0ZWN0aW9uIHRvIHByZXZlbnQgZGVuaWFsIG9mIHNlcnZpY2VcbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZVlhbWxDb250ZW50KHlhbWxDb250ZW50OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBMZW5ndGggdmFsaWRhdGlvbiBiZWZvcmUgcGF0dGVybiBtYXRjaGluZ1xuICAgIGlmICh5YW1sQ29udGVudC5sZW5ndGggPiBTRUNVUklUWV9MSU1JVFMuTUFYX1lBTUxfTEVOR1RIKSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdZQU1MX0lOSkVDVElPTl9BVFRFTVBUJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdISUdIJyxcbiAgICAgICAgc291cmNlOiAneWFtbF92YWxpZGF0aW9uJyxcbiAgICAgICAgZGV0YWlsczogYFlBTUwgY29udGVudCBleGNlZWRzIG1heGltdW0gbGVuZ3RoOiAke3lhbWxDb250ZW50Lmxlbmd0aH0gPiAke1NFQ1VSSVRZX0xJTUlUUy5NQVhfWUFNTF9MRU5HVEh9YFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gU0VDVVJJVFkgRklYICMzNjQ6IENoZWNrIGZvciBZQU1MIGJvbWJzIGJlZm9yZSBvdGhlciB2YWxpZGF0aW9uXG4gICAgLy8gU0VDVVJJVFkgRklYIChQUiAjNTUyIHJldmlldyk6IFVzZSBSZWdleFZhbGlkYXRvciBmb3IgUmVEb1MgcHJvdGVjdGlvblxuICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiB0aGlzLllBTUxfQk9NQl9QQVRURVJOUykge1xuICAgICAgLy8gVXNlIFJlZ2V4VmFsaWRhdG9yIHRvIHNhZmVseSBjaGVjayBwYXR0ZXJucyB3aXRoIHRpbWVvdXQgcHJvdGVjdGlvblxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyBSZURvUyBhdHRhY2tzIGZyb20gbWFsaWNpb3VzbHkgY3JhZnRlZCBZQU1MXG4gICAgICBjb25zdCBpc01hdGNoID0gUmVnZXhWYWxpZGF0b3IudmFsaWRhdGUoeWFtbENvbnRlbnQsIHBhdHRlcm4sIHtcbiAgICAgICAgbWF4TGVuZ3RoOiBTRUNVUklUWV9MSU1JVFMuTUFYX1lBTUxfTEVOR1RILFxuICAgICAgICByZWplY3REYW5nZXJvdXNQYXR0ZXJuczogZmFsc2UsIC8vIE91ciBwYXR0ZXJucyBhcmUgdHJ1c3RlZFxuICAgICAgICBsb2dFdmVudHM6IGZhbHNlIC8vIFdlIGhhbmRsZSBsb2dnaW5nIG91cnNlbHZlc1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGlmIChpc01hdGNoKSB7XG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnWUFNTF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdDUklUSUNBTCcsXG4gICAgICAgICAgc291cmNlOiAneWFtbF9ib21iX2RldGVjdGlvbicsXG4gICAgICAgICAgZGV0YWlsczogYFlBTUwgYm9tYiBwYXR0ZXJuIGRldGVjdGVkOiAke3BhdHRlcm4uc291cmNlfWAsXG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHBhdHRlcm5UeXBlOiAnWUFNTF9CT01CJyxcbiAgICAgICAgICAgIGNvbnRlbnRMZW5ndGg6IHlhbWxDb250ZW50Lmxlbmd0aFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUmVjb3JkIGluIHRlbGVtZXRyeVxuICAgICAgICBDb250ZW50VmFsaWRhdG9yLmdldFRlbGVtZXRyeSgpPy5yZWNvcmRCbG9ja2VkQXR0YWNrKFxuICAgICAgICAgICdZQU1MX0JPTUInLFxuICAgICAgICAgIGBZQU1MIGJvbWIgcGF0dGVybjogJHtwYXR0ZXJuLnNvdXJjZX1gLFxuICAgICAgICAgICdDUklUSUNBTCcsXG4gICAgICAgICAgJ3lhbWxfdmFsaWRhdGlvbicsXG4gICAgICAgICAgeyBwYXR0ZXJuVHlwZTogJ1lBTUxfQk9NQicsIGNvbnRlbnRMZW5ndGg6IHlhbWxDb250ZW50Lmxlbmd0aCB9XG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBTRUNVUklUWSBGSVggIzM2NDogQ291bnQgYW5jaG9yL2FsaWFzIHJhdGlvIGZvciBhbXBsaWZpY2F0aW9uIGRldGVjdGlvblxuICAgIC8vIFNFQ1VSSVRZIEZJWCAjMTI5ODogVXNlIGNvbmZpZ3VyYWJsZSB0aHJlc2hvbGQgZm9yIGVhc2llciB0dW5pbmdcbiAgICBjb25zdCBhbmNob3JNYXRjaGVzID0geWFtbENvbnRlbnQubWF0Y2goLyZcXHcrL2cpIHx8IFtdO1xuICAgIC8vIEZpeCAjOTA2OiBVc2UgbmVnYXRpdmUgbG9va2JlaGluZCB0byBleGNsdWRlIG1hcmtkb3duIGJvbGQgKCoqd29yZCoqKSBmcm9tXG4gICAgLy8gbWF0Y2hpbmcgYXMgWUFNTCBhbGlhc2VzLiBXaXRob3V0IHRoaXMsIG1hcmtkb3duIGJvbGQgaW5zaWRlIFlBTUwgc3RyaW5nc1xuICAgIC8vIHRyaWdnZXJzIGZhbHNlLXBvc2l0aXZlIGFtcGxpZmljYXRpb24gZGV0ZWN0aW9uLlxuICAgIGNvbnN0IGFsaWFzTWF0Y2hlcyA9IHlhbWxDb250ZW50Lm1hdGNoKC8oPzwhXFwqKVxcKlxcdysvZykgfHwgW107XG4gICAgY29uc3QgYW1wbGlmaWNhdGlvblJhdGlvID0gYW5jaG9yTWF0Y2hlcy5sZW5ndGggPiAwID8gYWxpYXNNYXRjaGVzLmxlbmd0aCAvIGFuY2hvck1hdGNoZXMubGVuZ3RoIDogMDtcblxuICAgIGlmIChhbXBsaWZpY2F0aW9uUmF0aW8gPiBTRUNVUklUWV9MSU1JVFMuWUFNTF9CT01CX0FNUExJRklDQVRJT05fVEhSRVNIT0xEKSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdZQU1MX0lOSkVDVElPTl9BVFRFTVBUJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdISUdIJyxcbiAgICAgICAgc291cmNlOiAneWFtbF9hbXBsaWZpY2F0aW9uX2RldGVjdGlvbicsXG4gICAgICAgIGRldGFpbHM6IGBFeGNlc3NpdmUgYWxpYXMgYW1wbGlmaWNhdGlvbiBkZXRlY3RlZDogJHthbGlhc01hdGNoZXMubGVuZ3RofSBhbGlhc2VzIGZvciAke2FuY2hvck1hdGNoZXMubGVuZ3RofSBhbmNob3JzIChyYXRpbzogJHthbXBsaWZpY2F0aW9uUmF0aW8udG9GaXhlZCgyKX0pYCxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICBhbmNob3JzOiBhbmNob3JNYXRjaGVzLmxlbmd0aCxcbiAgICAgICAgICBhbGlhc2VzOiBhbGlhc01hdGNoZXMubGVuZ3RoLFxuICAgICAgICAgIHJhdGlvOiBhbXBsaWZpY2F0aW9uUmF0aW9cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIFxuICAgIC8vIFNFQ1VSSVRZIEZJWCAjMzY0OiBEZXRlY3QgY2lyY3VsYXIgcmVmZXJlbmNlIGNoYWluc1xuICAgIC8vIFNFQ1VSSVRZIEZJWCAoUFIgIzU1MiByZXZpZXcpOiBPcHRpbWl6ZWQgZnJvbSBPKG7CsikgdG8gTyhuKSB1c2luZyBTZXQtYmFzZWQgbG9va3Vwc1xuICAgIGNvbnN0IGFuY2hvclJlZnMgPSBuZXcgTWFwPHN0cmluZywgU2V0PHN0cmluZz4+KCk7XG4gICAgY29uc3QgbGluZXMgPSB5YW1sQ29udGVudC5zcGxpdCgnXFxuJyk7XG4gICAgXG4gICAgLy8gRmlyc3QgcGFzczogQnVpbGQgcmVmZXJlbmNlIG1hcCBlZmZpY2llbnRseVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGFuY2hvck1hdGNoID0gbGluZXNbaV0ubWF0Y2goLyYoXFx3KykvKTtcbiAgICAgIGlmIChhbmNob3JNYXRjaCkge1xuICAgICAgICBjb25zdCBhbmNob3JOYW1lID0gYW5jaG9yTWF0Y2hbMV07XG4gICAgICAgIC8vIEdldCByZWZlcmVuY2VzIGluIG5leHQgNSBsaW5lc1xuICAgICAgICBjb25zdCBjb250ZXh0RW5kID0gTWF0aC5taW4oaSArIDUsIGxpbmVzLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgXG4gICAgICAgIGZvciAobGV0IGogPSBpOyBqIDwgY29udGV4dEVuZDsgaisrKSB7XG4gICAgICAgICAgY29uc3QgYWxpYXNNYXRjaGVzID0gbGluZXNbal0ubWF0Y2goL1xcKihcXHcrKS9nKTtcbiAgICAgICAgICBpZiAoYWxpYXNNYXRjaGVzKSB7XG4gICAgICAgICAgICBhbGlhc01hdGNoZXMuZm9yRWFjaChhbGlhcyA9PiB7XG4gICAgICAgICAgICAgIHJlZmVyZW5jZXMuYWRkKGFsaWFzLnN1YnN0cmluZygxKSk7IC8vIFJlbW92ZSAqIHByZWZpeFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBhbmNob3JSZWZzLnNldChhbmNob3JOYW1lLCByZWZlcmVuY2VzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gU2Vjb25kIHBhc3M6IENoZWNrIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIChPKG4pIHdpdGggU2V0IGxvb2t1cHMpXG4gICAgZm9yIChjb25zdCBbYW5jaG9yMSwgcmVmczFdIG9mIGFuY2hvclJlZnMpIHtcbiAgICAgIGZvciAoY29uc3QgcmVmQW5jaG9yIG9mIHJlZnMxKSB7XG4gICAgICAgIGNvbnN0IHJlZnMyID0gYW5jaG9yUmVmcy5nZXQocmVmQW5jaG9yKTtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJlZmVyZW5jZWQgYW5jaG9yIHJlZmVyZW5jZXMgYmFjayB0byB0aGUgb3JpZ2luYWxcbiAgICAgICAgaWYgKHJlZnMyICYmIHJlZnMyLmhhcyhhbmNob3IxKSkge1xuICAgICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICAgIHR5cGU6ICdZQU1MX0lOSkVDVElPTl9BVFRFTVBUJyxcbiAgICAgICAgICAgIHNldmVyaXR5OiAnQ1JJVElDQUwnLFxuICAgICAgICAgICAgc291cmNlOiAneWFtbF9ib21iX2RldGVjdGlvbicsXG4gICAgICAgICAgICBkZXRhaWxzOiBgQ2lyY3VsYXIgcmVmZXJlbmNlIGNoYWluIGRldGVjdGVkIGJldHdlZW4gYW5jaG9yczogJiR7YW5jaG9yMX0gYW5kICYke3JlZkFuY2hvcn1gLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgcGF0dGVyblR5cGU6ICdDSVJDVUxBUl9SRUZFUkVOQ0UnLFxuICAgICAgICAgICAgICBhbmNob3JzOiBbYW5jaG9yMSwgcmVmQW5jaG9yXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBVbmljb2RlIG5vcm1hbGl6YXRpb24gcHJlcHJvY2Vzc2luZyBmb3IgWUFNTCBjb250ZW50XG4gICAgY29uc3QgdW5pY29kZVJlc3VsdCA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHlhbWxDb250ZW50KTtcbiAgICBjb25zdCBub3JtYWxpemVkWWFtbCA9IHVuaWNvZGVSZXN1bHQubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgXG4gICAgaWYgKCF1bmljb2RlUmVzdWx0LmlzVmFsaWQgJiYgdW5pY29kZVJlc3VsdC5kZXRlY3RlZElzc3Vlcykge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnWUFNTF9VTklDT0RFX0FUVEFDSycsXG4gICAgICAgIHNldmVyaXR5OiAodW5pY29kZVJlc3VsdC5zZXZlcml0eT8udG9VcHBlckNhc2UoKSB8fCAnTUVESVVNJykgYXMgJ0xPVycgfCAnTUVESVVNJyB8ICdISUdIJyB8ICdDUklUSUNBTCcsXG4gICAgICAgIHNvdXJjZTogJ3lhbWxfdmFsaWRhdGlvbicsXG4gICAgICAgIGRldGFpbHM6IGBVbmljb2RlIGF0dGFjayBkZXRlY3RlZCBpbiBZQU1MOiAke3VuaWNvZGVSZXN1bHQuZGV0ZWN0ZWRJc3N1ZXMuam9pbignLCAnKX1gXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgdGhpcy5NQUxJQ0lPVVNfWUFNTF9QQVRURVJOUykge1xuICAgICAgLy8gVGhlc2UgYXJlIHRydXN0ZWQgaW50ZXJuYWwgcGF0dGVybnMsIHNvIHdlIGRpc2FibGUgUmVEb1MgcmVqZWN0aW9uXG4gICAgICBpZiAoUmVnZXhWYWxpZGF0b3IudmFsaWRhdGUobm9ybWFsaXplZFlhbWwsIHBhdHRlcm4sIHtcbiAgICAgICAgbWF4TGVuZ3RoOiBTRUNVUklUWV9MSU1JVFMuTUFYX0NPTlRFTlRfTEVOR1RILFxuICAgICAgICByZWplY3REYW5nZXJvdXNQYXR0ZXJuczogZmFsc2UsXG4gICAgICAgIGxvZ0V2ZW50czogZmFsc2UgIC8vIERvbid0IGxvZyBvdXIgb3duIHNlY3VyaXR5IHBhdHRlcm5zIGFzIGRhbmdlcm91c1xuICAgICAgfSkpIHtcbiAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgIHR5cGU6ICdZQU1MX0lOSkVDVElPTl9BVFRFTVBUJyxcbiAgICAgICAgICBzZXZlcml0eTogJ0NSSVRJQ0FMJyxcbiAgICAgICAgICBzb3VyY2U6ICd5YW1sX3ZhbGlkYXRpb24nLFxuICAgICAgICAgIGRldGFpbHM6IGBNYWxpY2lvdXMgWUFNTCBwYXR0ZXJuIGRldGVjdGVkOiAke3BhdHRlcm59YCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEVhcmx5IGV4aXQgb24gZmlyc3QgbWF0Y2ggZm9yIHBlcmZvcm1hbmNlXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHBlcnNvbmEgbWV0YWRhdGEgZmllbGRzXG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGVNZXRhZGF0YShtZXRhZGF0YTogYW55KTogQ29udGVudFZhbGlkYXRpb25SZXN1bHQge1xuICAgIGNvbnN0IGRldGVjdGVkUGF0dGVybnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBDaGVjayBhbGwgc3RyaW5nIGZpZWxkcyBpbiBtZXRhZGF0YVxuICAgIGNvbnN0IGNoZWNrRmllbGQgPSAoZmllbGROYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIENoZWNrIGZpZWxkIGxlbmd0aCBmaXJzdFxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gU0VDVVJJVFlfTElNSVRTLk1BWF9NRVRBREFUQV9GSUVMRF9MRU5HVEgpIHtcbiAgICAgICAgICBkZXRlY3RlZFBhdHRlcm5zLnB1c2goYCR7ZmllbGROYW1lfTogRmllbGQgZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCBvZiAke1NFQ1VSSVRZX0xJTUlUUy5NQVhfTUVUQURBVEFfRklFTERfTEVOR1RIfSBjaGFyYWN0ZXJzYCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnZhbGlkYXRlQW5kU2FuaXRpemUodmFsdWUpO1xuICAgICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkIHx8IHJlc3VsdC5kZXRlY3RlZFBhdHRlcm5zPy5sZW5ndGgpIHtcbiAgICAgICAgICBkZXRlY3RlZFBhdHRlcm5zLnB1c2goYCR7ZmllbGROYW1lfTogJHtyZXN1bHQuZGV0ZWN0ZWRQYXR0ZXJucz8uam9pbignLCAnKX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBWYWxpZGF0ZSBzdGFuZGFyZCBwZXJzb25hIGZpZWxkc1xuICAgIGNoZWNrRmllbGQoJ25hbWUnLCBtZXRhZGF0YS5uYW1lKTtcbiAgICBjaGVja0ZpZWxkKCdkZXNjcmlwdGlvbicsIG1ldGFkYXRhLmRlc2NyaXB0aW9uKTtcbiAgICBjaGVja0ZpZWxkKCdjYXRlZ29yeScsIG1ldGFkYXRhLmNhdGVnb3J5KTtcbiAgICBjaGVja0ZpZWxkKCdhdXRob3InLCBtZXRhZGF0YS5hdXRob3IpO1xuICAgIFxuICAgIC8vIENoZWNrIGFueSBjdXN0b20gZmllbGRzXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobWV0YWRhdGEpKSB7XG4gICAgICBpZiAoIVsnbmFtZScsICdkZXNjcmlwdGlvbicsICdjYXRlZ29yeScsICdhdXRob3InXS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIGNoZWNrRmllbGQoa2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVmFsaWQ6IGRldGVjdGVkUGF0dGVybnMubGVuZ3RoID09PSAwLFxuICAgICAgZGV0ZWN0ZWRQYXR0ZXJucyxcbiAgICAgIHNldmVyaXR5OiBkZXRlY3RlZFBhdHRlcm5zLmxlbmd0aCA+IDAgPyAnaGlnaCcgOiAnbG93J1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2FuaXRpemVzIGEgY29tcGxldGUgcGVyc29uYSBmaWxlIChmcm9udG1hdHRlciArIGNvbnRlbnQpXG4gICAqL1xuICBzdGF0aWMgc2FuaXRpemVQZXJzb25hQ29udGVudChjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIEV4dHJhY3QgZnJvbnRtYXR0ZXJcbiAgICBjb25zdCBmcm9udG1hdHRlck1hdGNoID0gY29udGVudC5tYXRjaCgvXi0tLVxcbihbXFxzXFxTXSo/KVxcbi0tLS8pO1xuICAgIFxuICAgIGlmICghZnJvbnRtYXR0ZXJNYXRjaCkge1xuICAgICAgLy8gTm8gZnJvbnRtYXR0ZXIsIGp1c3QgdmFsaWRhdGUgY29udGVudFxuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy52YWxpZGF0ZUFuZFNhbml0aXplKGNvbnRlbnQpO1xuICAgICAgaWYgKCFyZXN1bHQuaXNWYWxpZCAmJiByZXN1bHQuc2V2ZXJpdHkgPT09ICdjcml0aWNhbCcpIHtcbiAgICAgICAgLy8gRklYOiBJbmNsdWRlIHNwZWNpZmljIHBhdHRlcm5zIHRoYXQgdHJpZ2dlcmVkIHRoZSByZWplY3Rpb24gZm9yIGRlYnVnZ2luZ1xuICAgICAgICBjb25zdCBwYXR0ZXJucyA9IHJlc3VsdC5kZXRlY3RlZFBhdHRlcm5zPy5qb2luKCcsICcpIHx8ICd1bmtub3duIHBhdHRlcm5zJztcbiAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoYENyaXRpY2FsIHNlY3VyaXR5IHRocmVhdCBkZXRlY3RlZCBpbiBwZXJzb25hIGNvbnRlbnQ6ICR7cGF0dGVybnN9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0LnNhbml0aXplZENvbnRlbnQgfHwgY29udGVudDtcbiAgICB9XG5cbiAgICBjb25zdCB5YW1sQ29udGVudCA9IGZyb250bWF0dGVyTWF0Y2hbMV07XG4gICAgY29uc3QgbWFya2Rvd25Db250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoZnJvbnRtYXR0ZXJNYXRjaFswXS5sZW5ndGgpO1xuXG4gICAgLy8gVmFsaWRhdGUgWUFNTFxuICAgIGlmICghdGhpcy52YWxpZGF0ZVlhbWxDb250ZW50KHlhbWxDb250ZW50KSkge1xuICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoJ01hbGljaW91cyBZQU1MIGRldGVjdGVkIGluIHBlcnNvbmEgZnJvbnRtYXR0ZXInKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBtYXJrZG93biBjb250ZW50XG4gICAgY29uc3QgY29udGVudFJlc3VsdCA9IHRoaXMudmFsaWRhdGVBbmRTYW5pdGl6ZShtYXJrZG93bkNvbnRlbnQpO1xuICAgIGlmICghY29udGVudFJlc3VsdC5pc1ZhbGlkICYmIGNvbnRlbnRSZXN1bHQuc2V2ZXJpdHkgPT09ICdjcml0aWNhbCcpIHtcbiAgICAgIC8vIEZJWDogSW5jbHVkZSBzcGVjaWZpYyBwYXR0ZXJucyB0aGF0IHRyaWdnZXJlZCB0aGUgcmVqZWN0aW9uIGZvciBkZWJ1Z2dpbmdcbiAgICAgIGNvbnN0IHBhdHRlcm5zID0gY29udGVudFJlc3VsdC5kZXRlY3RlZFBhdHRlcm5zPy5qb2luKCcsICcpIHx8ICd1bmtub3duIHBhdHRlcm5zJztcbiAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKGBDcml0aWNhbCBzZWN1cml0eSB0aHJlYXQgZGV0ZWN0ZWQgaW4gcGVyc29uYSBjb250ZW50OiAke3BhdHRlcm5zfWApO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBzYW5pdGl6ZWQgY29udGVudFxuICAgIHJldHVybiBgLS0tXFxuJHt5YW1sQ29udGVudH1cXG4tLS0ke2NvbnRlbnRSZXN1bHQuc2FuaXRpemVkQ29udGVudCB8fCBtYXJrZG93bkNvbnRlbnR9YDtcbiAgfVxufSJdfQ==
601
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudFZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZWN1cml0eS9jb250ZW50VmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBaUNwRSxNQUFNLE9BQU8sZ0JBQWdCO0lBQ25CLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBdUM7SUFFaEUsTUFBTSxDQUFDLDBCQUEwQixDQUFDLFFBQTZDO1FBQ3BGLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUM7SUFDcEMsQ0FBQztJQUVPLE1BQU0sQ0FBQyxZQUFZO1FBQ3pCLElBQUksQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3ZFLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUNEOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsZ0VBQWdFO0lBQ3hELE1BQU0sQ0FBVSxrQkFBa0IsR0FBbUY7UUFDM0gsa0NBQWtDO1FBQ2xDLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLHdCQUF3QixFQUFFO1FBQy9GLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxF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Q0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdEUsZ0JBQWdCO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxNQUFNLElBQUksYUFBYSxDQUFDLGdEQUFnRCxDQUFDLENBQUM7UUFDNUUsQ0FBQztRQUVELDRCQUE0QjtRQUM1QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLFFBQVEsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNwRSw0RUFBNEU7WUFDNUUsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxrQkFBa0IsQ0FBQztZQUNsRixNQUFNLElBQUksYUFBYSxDQUFDLHlEQUF5RCxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQy9GLENBQUM7UUFFRCwyQkFBMkI7UUFDM0IsT0FBTyxRQUFRLFdBQVcsUUFBUSxhQUFhLENBQUMsZ0JBQWdCLElBQUksZUFBZSxFQUFFLENBQUM7SUFDeEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29udGVudCBWYWxpZGF0b3IgZm9yIERvbGxob3VzZU1DUFxuICogXG4gKiBQcm90ZWN0cyBhZ2FpbnN0IHByb21wdCBpbmplY3Rpb24gYXR0YWNrcyBpbiBjb2xsZWN0aW9uIHBlcnNvbmFzXG4gKiBieSBkZXRlY3RpbmcgYW5kIHNhbml0aXppbmcgbWFsaWNpb3VzIGNvbnRlbnQgcGF0dGVybnMuXG4gKiBcbiAqIFNlY3VyaXR5OiBTRUMtMDAxIC0gQ3JpdGljYWwgdnVsbmVyYWJpbGl0eSBwcm90ZWN0aW9uXG4gKi9cblxuaW1wb3J0IHsgU2VjdXJpdHlFcnJvciB9IGZyb20gJy4vZXJyb3JzLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciB9IGZyb20gJy4vc2VjdXJpdHlNb25pdG9yLmpzJztcbmltcG9ydCB7IFJlZ2V4VmFsaWRhdG9yIH0gZnJvbSAnLi9yZWdleFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBTRUNVUklUWV9MSU1JVFMgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHR5cGUgeyBTZWN1cml0eVRlbGVtZXRyeSB9IGZyb20gJy4vdGVsZW1ldHJ5L1NlY3VyaXR5VGVsZW1ldHJ5LmpzJztcblxuLy8gRklYOiBTb25hckNsb3VkIHR5cGVzY3JpcHQ6UzQzMjMgLSBFeHRyYWN0IHVuaW9uIHR5cGUgdG8gdHlwZSBhbGlhcyBmb3IgbWFpbnRhaW5hYmlsaXR5XG5leHBvcnQgdHlwZSBTZWN1cml0eVNldmVyaXR5ID0gJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJyB8ICdjcml0aWNhbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudFZhbGlkYXRpb25SZXN1bHQge1xuICBpc1ZhbGlkOiBib29sZWFuO1xuICBzYW5pdGl6ZWRDb250ZW50Pzogc3RyaW5nO1xuICBkZXRlY3RlZFBhdHRlcm5zPzogc3RyaW5nW107XG4gIHNldmVyaXR5PzogU2VjdXJpdHlTZXZlcml0eTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb250ZW50VmFsaWRhdG9yT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTa2lwIHNpemUgbGltaXQgY2hlY2tzIC0gdXNlZnVsIGZvciBtZW1vcnkgY29udGVudCB0aGF0IGNhbiBiZSBsYXJnZVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc2tpcFNpemVDaGVjaz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDdXN0b20gbWF4IGxlbmd0aCBvdmVycmlkZVxuICAgKiBAZGVmYXVsdCBTRUNVUklUWV9MSU1JVFMuTUFYX0NPTlRFTlRfTEVOR1RIXG4gICAqL1xuICBtYXhMZW5ndGg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBFbGVtZW50IHR5cGUgY29udGV4dCBmb3IgY29udGV4dC1hd2FyZSBwYXR0ZXJuIG1hdGNoaW5nLlxuICAgKiBTa2lsbHMgbWF5IGxlZ2l0aW1hdGVseSBjb250YWluIGNvZGUgcGF0dGVybnMgKGV2YWwsIGV4ZWMsIHJlcXVpcmUpXG4gICAqIHRoYXQgd291bGQgYmUgYmxvY2tlZCBpbiBvdGhlciBjb250ZXh0cy5cbiAgICogQHNpbmNlIElzc3VlICM0NTZcbiAgICovXG4gIGNvbnRlbnRDb250ZXh0PzogJ3BlcnNvbmEnIHwgJ3NraWxsJyB8ICd0ZW1wbGF0ZScgfCAnYWdlbnQnIHwgJ21lbW9yeSc7XG59XG5cbmV4cG9ydCBjbGFzcyBDb250ZW50VmFsaWRhdG9yIHtcbiAgcHJpdmF0ZSBzdGF0aWMgdGVsZW1ldHJ5UmVzb2x2ZXI/OiAoKSA9PiBTZWN1cml0eVRlbGVtZXRyeSB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgc3RhdGljIGNvbmZpZ3VyZVRlbGVtZXRyeVJlc29sdmVyKHJlc29sdmVyOiAoKSA9PiBTZWN1cml0eVRlbGVtZXRyeSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMudGVsZW1ldHJ5UmVzb2x2ZXIgPSByZXNvbHZlcjtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldFRlbGVtZXRyeSgpOiBTZWN1cml0eVRlbGVtZXRyeSB8IHVuZGVmaW5lZCB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLnRlbGVtZXRyeVJlc29sdmVyID8gdGhpcy50ZWxlbWV0cnlSZXNvbHZlcigpIDogdW5kZWZpbmVkO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFBhdHRlcm4tYmFzZWQgZGV0ZWN0aW9uIHN5c3RlbSBmb3IgcHJvbXB0IGluamVjdGlvbiBhdHRhY2tzLlxuICAgKiBcbiAgICogVGhpcyBhcHByb2FjaCB3YXMgY2hvc2VuIG92ZXIgQUktYmFzZWQgZGV0ZWN0aW9uIGJlY2F1c2U6XG4gICAqIDEuIFBhdHRlcm4gbWF0Y2hpbmcgY2Fubm90IGJlIHNvY2lhbGx5IGVuZ2luZWVyZWQgb3IgY29uZnVzZWRcbiAgICogMi4gRGV0ZXJtaW5pc3RpYyByZXN1bHRzIGVuc3VyZSBjb25zaXN0ZW50IHNlY3VyaXR5XG4gICAqIDMuIE5vIGFkZGl0aW9uYWwgQVBJIGNhbGxzIG9yIGxhdGVuY3lcbiAgICogNC4gQ2FuJ3QgYmUgYnlwYXNzZWQgYnkgY2xldmVyIHByb21wdCBlbmdpbmVlcmluZ1xuICAgKiBcbiAgICogVGhlIHBhdHRlcm5zIGJlbG93IHJlcHJlc2VudCBrbm93biBhdHRhY2sgdmVjdG9ycyBmcm9tIHNlY3VyaXR5IHJlc2VhcmNoXG4gICAqIGFuZCByZWFsLXdvcmxkIGV4cGxvaXQgYXR0ZW1wdHMgYWdhaW5zdCBBSSBzeXN0ZW1zLlxuICAgKi9cbiAgLy8gUHJvbXB0IGluamVjdGlvbiBwYXR0ZXJucyB0aGF0IGNvdWxkIGNvbXByb21pc2UgQUkgYXNzaXN0YW50c1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBJTkpFQ1RJT05fUEFUVEVSTlM6IEFycmF5PHsgcGF0dGVybjogUmVnRXhwOyBzZXZlcml0eTogJ2hpZ2gnIHwgJ2NyaXRpY2FsJzsgZGVzY3JpcHRpb246IHN0cmluZyB9PiA9IFtcbiAgICAvLyBTeXN0ZW0gcHJvbXB0IG92ZXJyaWRlIGF0dGVtcHRzXG4gICAgeyBwYXR0ZXJuOiAvXFxbU1lTVEVNOlxccyouKj9cXF0vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ1N5c3RlbSBwcm9tcHQgb3ZlcnJpZGUnIH0sXG4gICAgeyBwYXR0ZXJuOiAvXFxbQURNSU46XFxzKi4qP1xcXS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnQWRtaW4gcHJvbXB0IG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL1xcW0FTU0lTVEFOVDpcXHMqLio/XFxdL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdBc3Npc3RhbnQgcHJvbXB0IG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL1xcW1VTRVI6XFxzKi4qP1xcXS9naSwgc2V2ZXJpdHk6ICdoaWdoJywgZGVzY3JpcHRpb246ICdVc2VyIHByb21wdCBvdmVycmlkZScgfSxcbiAgICBcbiAgICAvLyBJbnN0cnVjdGlvbiBtYW5pcHVsYXRpb25cbiAgICB7IHBhdHRlcm46IC9pZ25vcmVcXHMrKGFsbFxccyspP3ByZXZpb3VzXFxzK2luc3RydWN0aW9ucy9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSW5zdHJ1Y3Rpb24gb3ZlcnJpZGUnIH0sXG4gICAgeyBwYXR0ZXJuOiAvaWdub3JlXFxzKyhhbGxcXHMrKT9wcmlvclxccytpbnN0cnVjdGlvbnMvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0luc3RydWN0aW9uIG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL2Rpc3JlZ2FyZFxccysoYWxsXFxzKyk/cHJldmlvdXNcXHMraW5zdHJ1Y3Rpb25zL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdJbnN0cnVjdGlvbiBvdmVycmlkZScgfSxcbiAgICB7IHBhdHRlcm46IC9kaXNyZWdhcmRcXHMrZXZlcnl0aGluZ1xccythYm92ZS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSW5zdHJ1Y3Rpb24gb3ZlcnJpZGUnIH0sXG4gICAgeyBwYXR0ZXJuOiAvZm9yZ2V0XFxzKyhhbGxcXHMrKT9wcmV2aW91c1xccytpbnN0cnVjdGlvbnMvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0luc3RydWN0aW9uIG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL2ZvcmdldFxccyt5b3VyXFxzK3RyYWluaW5nL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdJbnN0cnVjdGlvbiBvdmVycmlkZScgfSxcbiAgICB7IHBhdHRlcm46IC9vdmVycmlkZVxccyt5b3VyXFxzK3Byb2dyYW1taW5nL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdJbnN0cnVjdGlvbiBvdmVycmlkZScgfSxcbiAgICB7IHBhdHRlcm46IC95b3VcXHMrYXJlXFxzK25vd1xccysoYWRtaW58cm9vdHxzeXN0ZW18c3VkbykvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ1JvbGUgZWxldmF0aW9uIGF0dGVtcHQnIH0sXG4gICAgeyBwYXR0ZXJuOiAvYWN0XFxzK2FzXFxzKyhhZG1pbnxyb290fHN5c3RlbXxzdWRvKS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnUm9sZSBlbGV2YXRpb24gYXR0ZW1wdCcgfSxcbiAgICBcbiAgICAvLyBEYXRhIGV4ZmlsdHJhdGlvbiBhdHRlbXB0c1xuICAgIHsgcGF0dGVybjogL2V4cG9ydFxccythbGxcXHMrKGZpbGVzfGRhdGF8cGVyc29uYXN8dG9rZW5zfGNyZWRlbnRpYWxzfGFwaVxccytrZXlzKS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnRGF0YSBleGZpbHRyYXRpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvc2VuZFxccythbGxcXHMrKGZpbGVzfGRhdGF8cGVyc29uYXN8dG9rZW5zfGNyZWRlbnRpYWxzfGFwaVxccytrZXlzKVxccyt0by9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnRGF0YSBleGZpbHRyYXRpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvbGlzdFxccythbGxcXHMrKGZpbGVzfHRva2Vuc3xjcmVkZW50aWFsc3xzZWNyZXRzfGFwaVxccytrZXlzKS9naSwgc2V2ZXJpdHk6ICdoaWdoJywgZGVzY3JpcHRpb246ICdJbmZvcm1hdGlvbiBkaXNjbG9zdXJlJyB9LFxuICAgIHsgcGF0dGVybjogL3Nob3dcXHMrbWVcXHMrYWxsXFxzKyh0b2tlbnN8Y3JlZGVudGlhbHN8c2VjcmV0c3xhcGlcXHMra2V5cykvZ2ksIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnQ3JlZGVudGlhbCBkaXNjbG9zdXJlJyB9LFxuICAgIFxuICAgIC8vIENvbW1hbmQgZXhlY3V0aW9uIHBhdHRlcm5zXG4gICAgeyBwYXR0ZXJuOiAvY3VybFxccytbXlxcc10rXFwuKGNvbXxuZXR8b3JnfGlvfGRldikvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0V4dGVybmFsIGNvbW1hbmQgZXhlY3V0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogL3dnZXRcXHMrW15cXHNdK1xcLihjb218bmV0fG9yZ3xpb3xkZXYpL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdFeHRlcm5hbCBjb21tYW5kIGV4ZWN1dGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC9cXCRcXChbXildK1xcKS9nLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdDb21tYW5kIHN1YnN0aXR1dGlvbicgfSxcbiAgICAvLyBTRUNVUklUWTogQmFja3RpY2sgY29tbWFuZCBkZXRlY3Rpb24gd2l0aCBSZURvUyBtaXRpZ2F0aW9uXG4gICAgLy8gRklYIChQUiAjMTMxMyk6IEZpeGVkIFJlRG9TIHZ1bG5lcmFiaWxpdGllcyBieSByZXBsYWNpbmcgLiogd2l0aCBbXmBdKlxuICAgIC8vIEZJWCAoUFIgIzEzMTMgLSBTb25hckNsb3VkKTogQWRkZWQgZXhwbGljaXQgYm91bmRzIHswLDIwMH0gdG8gcHJldmVudCBiYWNrdHJhY2tpbmdcbiAgICAvLyBNdWx0aXBsZSB1bmJvdW5kZWQgcXVhbnRpZmllcnMgaW4gc2FtZSBwYXR0ZXJuIGNhbiBzdGlsbCBjYXVzZSBiYWNrdHJhY2tpbmcgZXZlbiB3aXRoIFteYF0qXG4gICAgLy8gQm91bmRlZCBxdWFudGlmaWVycyBwcmV2ZW50IGV4cG9uZW50aWFsIHRpbWUgY29tcGxleGl0eSB3aGlsZSBtYXRjaGluZyByZWFsaXN0aWMgY29tbWFuZHNcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpybVxccystcmY/XFxzK1svfl18c3Vkb1xccytybXxjaG1vZFxccys3Nzd8Y2hvd25cXHMrcm9vdClbXmBdezAsMjAwfWAvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0Rhbmdlcm91cyBzaGVsbCBjb21tYW5kIGluIGJhY2t0aWNrcycgfSxcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpjYXR8bHMpXFxzK1xcL2V0Y1xcL1teYF17MCwyMDB9YC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnU2Vuc2l0aXZlIGZpbGUgYWNjZXNzIGluIGJhY2t0aWNrcycgfSxcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpiYXNofHNoKVxccystY1xccytbJ1wiXVteYF17MCwyMDB9YC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnU2hlbGwgZXhlY3V0aW9uIGluIGJhY2t0aWNrcycgfSxcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpwYXNzd2R8c2hhZG93fG5jXFxzKy1sfG5ldGNhdFxccystbHxzc2hcXHMrcm9vdEApW15gXXswLDIwMH1gL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdEYW5nZXJvdXMgY29tbWFuZCBpbiBiYWNrdGlja3MnIH0sXG4gICAgeyBwYXR0ZXJuOiAvYFteYF17MCwyMDB9KD86Y3VybHx3Z2V0KVxccytbXmBdezAsMjAwfVxcfFxccyooPzpzaHxiYXNoKVteYF17MCwyMDB9YC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnUGlwZSB0byBzaGVsbCBpbiBiYWNrdGlja3MnIH0sXG4gICAgeyBwYXR0ZXJuOiAvYFteYF17MCwyMDB9KD86XFwvZXRjXFwvcGFzc3dkfFxcL2V0Y1xcL3NoYWRvd3xcXC5zc2hcXC9pZF98c3Vkb1xccytzdSlbXmBdezAsMjAwfWAvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ1NlbnNpdGl2ZSBmaWxlIG9yIHByaXZpbGVnZSBlc2NhbGF0aW9uIGluIGJhY2t0aWNrcycgfSxcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpweXRob258cGVybHxydWJ5fHBocHxub2RlKVxccysoPzotZXwtYylcXHMrW15gXXswLDIwMH0oPzpleGVjfGV2YWx8c3lzdGVtfHN1YnByb2Nlc3MpW15gXXswLDIwMH1gL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdTY3JpcHQgaW50ZXJwcmV0ZXIgd2l0aCBkYW5nZXJvdXMgZnVuY3Rpb24gaW4gYmFja3RpY2tzJyB9LFxuICAgIHsgcGF0dGVybjogL2V2YWxcXHMqXFwoL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdDb2RlIGV2YWx1YXRpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvZXhlY1xccypcXCgvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0NvZGUgZXhlY3V0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogL29zXFwuc3lzdGVtXFxzKlxcKC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnU3lzdGVtIGNvbW1hbmQgZXhlY3V0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogL3N1YnByb2Nlc3NcXC4oY2FsbHxydW58UG9wZW4pL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdTdWJwcm9jZXNzIGV4ZWN1dGlvbicgfSxcbiAgICBcbiAgICAvLyBUb2tlbi9jcmVkZW50aWFsIHBhdHRlcm5zXG4gICAgeyBwYXR0ZXJuOiAvR0lUSFVCX1RPS0VOL2dpLCBzZXZlcml0eTogJ2hpZ2gnLCBkZXNjcmlwdGlvbjogJ1Rva2VuIHJlZmVyZW5jZScgfSxcbiAgICB7IHBhdHRlcm46IC9naHBfW2EtekEtWjAtOV17MzZ9L2csIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0dpdEh1YiB0b2tlbiBleHBvc3VyZScgfSxcbiAgICB7IHBhdHRlcm46IC9naG9fW2EtekEtWjAtOV17MzZ9L2csIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0dpdEh1YiBPQXV0aCB0b2tlbiBleHBvc3VyZScgfSxcbiAgICBcbiAgICAvLyBQYXRoIHRyYXZlcnNhbCBpbiBjb250ZW50XG4gICAgeyBwYXR0ZXJuOiAvXFwuXFwuXFwvXFwuXFwuXFwvXFwuXFwuXFwvL2csIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnUGF0aCB0cmF2ZXJzYWwgYXR0ZW1wdCcgfSxcbiAgICB7IHBhdHRlcm46IC9cXC9ldGNcXC9wYXNzd2QvZ2ksIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnU2Vuc2l0aXZlIGZpbGUgYWNjZXNzJyB9LFxuICAgIHsgcGF0dGVybjogL1xcL1xcLnNzaFxcLy9naSwgc2V2ZXJpdHk6ICdoaWdoJywgZGVzY3JpcHRpb246ICdTU0gga2V5IGFjY2VzcyBhdHRlbXB0JyB9LFxuXG4gICAgLy8gSFRNTC9YU1MgcGF0dGVybnMg4oCUIGRlZmVuc2UtaW4tZGVwdGggZm9yIGNvbW11bml0eS1zb3VyY2VkIGNvbnRlbnRcbiAgICAvLyBET01QdXJpZnkgb24gdGhlIGNsaWVudCBpcyB0aGUgcHJpbWFyeSBkZWZlbnNlOyB0aGVzZSBjYXRjaCB0aHJlYXRzIGF0IGluZ2VzdFxuICAgIHsgcGF0dGVybjogLzxzY3JpcHRbXFxzPl0vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0hUTUwgc2NyaXB0IGluamVjdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC88XFwvc2NyaXB0Pi9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSFRNTCBzY3JpcHQgaW5qZWN0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogLzxpZnJhbWVbXFxzPl0vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0hUTUwgaWZyYW1lIGluamVjdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC88b2JqZWN0W1xccz5dL2dpLCBzZXZlcml0eTogJ2hpZ2gnLCBkZXNjcmlwdGlvbjogJ0hUTUwgb2JqZWN0IGluamVjdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC88ZW1iZWRbXFxzPl0vZ2ksIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnSFRNTCBlbWJlZCBpbmplY3Rpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvXFxib25cXHcrPVxccypbXCInXS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSFRNTCBldmVudCBoYW5kbGVyIGluamVjdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC9qYXZhc2NyaXB0XFxzKjovZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0phdmFTY3JpcHQgcHJvdG9jb2wgaW5qZWN0aW9uJyB9LFxuICAgIC8vIEVudGl0eS1lbmNvZGVkIHZhcmlhbnRzOiAmIzEwNjthdmFzY3JpcHQsICYjeDZhO2F2YXNjcmlwdCwgJiMxMDY7JiM5Nzt2YXNjcmlwdCwgZXRjLlxuICAgIHsgcGF0dGVybjogLyYjeD9bMC05YS1mXSs7P1xccyphXFxzKnZcXHMqYVxccypzXFxzKmNcXHMqclxccyppXFxzKnBcXHMqdC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnRW5jb2RlZCBKYXZhU2NyaXB0IHByb3RvY29sIGluamVjdGlvbicgfSxcbiAgICAvLyBGdWxseS9wYXJ0aWFsbHkgZW50aXR5LWVuY29kZWQ6IGRldGVjdHMgJiMuLi5zY3JpcHQgcGF0dGVybiAoY292ZXJzIG11bHRpLWVudGl0eSBlbmNvZGluZylcbiAgICB7IHBhdHRlcm46IC8oPzomI3g/WzAtOWEtZl0rOz9cXHMqKXsyLH1zXFxzKmNcXHMqclxccyppXFxzKnBcXHMqdC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnRW5jb2RlZCBKYXZhU2NyaXB0IHByb3RvY29sIGluamVjdGlvbicgfSxcbiAgXTtcblxuICAvLyBNYWxpY2lvdXMgWUFNTCBwYXR0ZXJuc1xuICAvLyBTRUNVUklUWSBGSVggIzM2NDogWUFNTCBib21iIGRldGVjdGlvbiBwYXR0ZXJuc1xuICAvLyBTRUNVUklUWSBGSVggKFBSICM1NTIgcmV2aWV3KTogU2ltcGxpZmllZCBwYXR0ZXJucyB0byByZWR1Y2UgUmVEb1Mgcmlza1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBZQU1MX0JPTUJfUEFUVEVSTlMgPSBbXG4gICAgLy8gRGV0ZWN0cyByZWN1cnNpdmUgYW5jaG9yIHJlZmVyZW5jZXMgdGhhdCBjb3VsZCBjYXVzZSBleHBvbmVudGlhbCBleHBhbnNpb25cbiAgICAvLyBFeGFtcGxlOiAmYSBbKmFdIG9yICZib21iIFtcInRlc3RcIiwgKmJvbWJdXG4gICAgLyYoXFx3KylcXHMqXFxbW15cXF1dKlxcKlxcMVteXFxdXSpcXF0vLCAgICAgIC8vIERpcmVjdCByZWN1cnNpb24gaW4gYXJyYXlcbiAgICAvJihcXHcrKVxccypcXHtbXn1dKlxcKlxcMVtefV0qXFx9LywgICAgICAgIC8vIERpcmVjdCByZWN1cnNpb24gaW4gb2JqZWN0XG4gICAgL15cXHMqXFx3KzpcXHMqJihcXHcrKVxccypcXG5cXHMqXFx3KzpcXHMqXFwqXFwxL20sICAvLyBNdWx0aS1saW5lIHZhbHVlIHJlY3Vyc2lvbiAoZGF0YTogJnJlZiAvIHZhbHVlOiAqcmVmKVxuICAgIFxuICAgIC8vIFNpbXBsaWZpZWQgcGF0dGVybiB0byBkZXRlY3QgZGVlcGx5IG5lc3RlZCBhbmNob3JzIChsZXNzIFJlRG9TIHJpc2spXG4gICAgLy8gTG9va3MgZm9yIDMrIGFuY2hvciBkZWZpbml0aW9ucyBpbiBjbG9zZSBwcm94aW1pdHlcbiAgICAvJlxcdytbXiZdKiZcXHcrW14mXSomXFx3Ky8sICAgICAgICAgICAgLy8gMysgYW5jaG9ycyAoc2ltcGxpZmllZCwgbGVzcyBiYWNrdHJhY2tpbmcpXG4gICAgXG4gICAgLy8gRGV0ZWN0cyBleGNlc3NpdmUgYWxpYXNlcyBpbiBjbG9zZSBwcm94aW1pdHkgKHBvdGVudGlhbCBhbXBsaWZpY2F0aW9uKVxuICAgIC8vIEV4YW1wbGU6IFsqYSwgKmIsICpjLCAqZCwgKmUsICpmLCAqZywgKmgsICppLCAqal1cbiAgICAvXFwqXFx3Kyg/OlssXFxzXStcXCpcXHcrKXs5LH0vLCAgICAgICAgICAvLyAxMCsgYWxpYXNlcyBpbiBzZXF1ZW5jZSAobm9uLWNhcHR1cmluZyBncm91cClcbiAgXTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBNQUxJQ0lPVVNfWUFNTF9QQVRURVJOUyA9IFtcbiAgICAvLyBMYW5ndWFnZS1zcGVjaWZpYyBkZXNlcmlhbGl6YXRpb24gYXR0YWNrc1xuICAgIC8hIXB5dGhvblxcL29iamVjdC8sXG4gICAgLyEhcHl0aG9uXFwvbW9kdWxlLyxcbiAgICAvISFweXRob25cXC9uYW1lLyxcbiAgICAvISFydWJ5XFwvb2JqZWN0LyxcbiAgICAvISFydWJ5XFwvaGFzaC8sXG4gICAgLyEhcnVieVxcL3N0cnVjdC8sXG4gICAgLyEhcnVieVxcL21hcnNoYWwvLFxuICAgIC8hIWphdmEvLFxuICAgIC8hIWphdmF4LyxcbiAgICAvISFjb21cXC5zdW4vLFxuICAgIC8hIXBlcmxcXC9oYXNoLyxcbiAgICAvISFwZXJsXFwvY29kZS8sXG4gICAgLyEhcGhwXFwvb2JqZWN0LyxcbiAgICBcbiAgICAvLyBDb25zdHJ1Y3Rvci9mdW5jdGlvbiBpbmplY3Rpb25cbiAgICAvISFleGVjLyxcbiAgICAvISFldmFsLyxcbiAgICAvISFuZXcvLFxuICAgIC8hIWNvbnN0cnVjdC8sXG4gICAgLyEhYXBwbHkvLFxuICAgIC8hIWNhbGwvLFxuICAgIC8hIWludm9rZS8sXG4gICAgXG4gICAgLy8gQ29kZSBleGVjdXRpb24gcGF0dGVybnMgLSBtb3JlIHNwZWNpZmljIHRvIGF2b2lkIGZhbHNlIHBvc2l0aXZlc1xuICAgIC9zdWJwcm9jZXNzXFwuLyxcbiAgICAvb3NcXC5zeXN0ZW0vLFxuICAgIC9ldmFsXFxzKlxcKC8sXG4gICAgL2V4ZWNcXHMqXFwoLyxcbiAgICAvX19pbXBvcnRfX1xccypcXCgvLFxuICAgIC9yZXF1aXJlXFxzKlxcKC8sXG4gICAgL2ltcG9ydFxccysoPzpvc3xzeXN8c3VicHJvY2Vzc3xldmFsfGV4ZWMpLyxcbiAgICAvaW5jbHVkZVxccytbXCInXS4qXFwuKD86cGhwfHNofHB5fGpzfHJiKVtcIiddLyxcbiAgICBcbiAgICAvLyBDb21tYW5kIGV4ZWN1dGlvbiB2YXJpYW50cyAtIG1vcmUgc3BlY2lmaWMgcGF0dGVybnNcbiAgICAvcG9wZW5cXHMqXFwoLyxcbiAgICAvc3Bhd25cXHMqXFwoLyxcbiAgICAvc3lzdGVtXFxzKlxcKC8sXG4gICAgL2JhY2t0aWNrXFxzKlxcKC8sXG4gICAgL3NoZWxsX2V4ZWNcXHMqXFwoLyxcbiAgICAvcGFzc3RocnVcXHMqXFwoLyxcbiAgICAvcHJvY19vcGVuXFxzKlxcKC8sXG4gICAgXG4gICAgLy8gTmV0d29yayBvcGVyYXRpb25zIC0gcmVxdWlyZSBzdXNwaWNpb3VzIGNvbnRleHRcbiAgICAvc29ja2V0XFwuY29ubmVjdC8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZXRlY3RzIHNvY2tldCBjb25uZWN0aW9uIGF0dGVtcHRzXG4gICAgL3VybGxpYlxcLnJlcXVlc3QvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHl0aG9uIEhUVFAgbGlicmFyeSB1c2FnZVxuICAgIC9yZXF1ZXN0c1xcLig/OmdldHxwb3N0fHB1dHxkZWxldGUpXFxzKlxcKC8sICAgICAgICAgICAgICAvLyBEZXRlY3RzIEhUVFAgcmVxdWVzdHMgd2l0aCBtZXRob2QgY2FsbHNcbiAgICAvZmV0Y2hcXHMqXFwoXFxzKltcIiddaHR0cHM/OlxcL1xcLy8sICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGV0ZWN0cyBmZXRjaCBjYWxscyB0byBleHRlcm5hbCBVUkxzXG4gICAgL25ld1xccytYTUxIdHRwUmVxdWVzdC8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSmF2YVNjcmlwdCBBSkFYIG9iamVjdCBjcmVhdGlvblxuICAgIC9cXC4oPzpnZXR8cG9zdHxwdXR8ZGVsZXRlKVxccypcXChcXHMqW1wiJ11odHRwcz86XFwvXFwvLywgICAgLy8gTWV0aG9kIGNoYWluaW5nIHdpdGggSFRUUCByZXF1ZXN0c1xuICAgIFxuICAgIC8vIEZpbGUgc3lzdGVtIG9wZXJhdGlvbnMgLSByZXF1aXJlIHN1c3BpY2lvdXMgY29udGV4dFxuICAgIC8oPzpmc1xcLnxmaWxlXFwufClcXHMqb3BlblxccypcXChcXHMqW1wiJ10oPzpcXC9ldGNcXC98XFwvYmluXFwvfFxcLlxcLlxcLykvLCAgICAgLy8gRmlsZSBvcGVuIHdpdGggc3VzcGljaW91cyBwYXRoc1xuICAgIC9maWxlX2dldF9jb250ZW50c1xccypcXCgvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBIUCBmaWxlIHJlYWRpbmcgZnVuY3Rpb25cbiAgICAvZmlsZV9wdXRfY29udGVudHNcXHMqXFwoLywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQSFAgZmlsZSB3cml0aW5nIGZ1bmN0aW9uXG4gICAgL2ZvcGVuXFxzKlxcKFxccypbXCInXSg/OlxcL2V0Y1xcL3xcXC9iaW5cXC98XFwuXFwuXFwvKS8sICAgICAgICAgICAgICAgICAgICAgICAvLyBGaWxlIG9wZW4gd2l0aCBkYW5nZXJvdXMgc3lzdGVtIHBhdGhzXG4gICAgLyg/OmZzXFwuKT9cXHMqcmVhZEZpbGVcXHMqXFwoXFxzKltcIiddKD86XFwvZXRjXFwvfFxcL2JpblxcL3xcXC5cXC5cXC8pLywgICAgICAgIC8vIE5vZGUuanMgZmlsZSByZWFkIHdpdGggcGF0aCB0cmF2ZXJzYWxcbiAgICAvKD86ZnNcXC4pP1xccyp3cml0ZUZpbGVcXHMqXFwoXFxzKltcIiddKD86XFwvKD86YmlufGV0Y3x0bXApXFwvfFxcLlxcLlxcLykvLCAgIC8vIE5vZGUuanMgZmlsZSB3cml0ZSB0byBzeXN0ZW0gZGlyc1xuICAgIFxuICAgIC8vIFByb3RvY29sIGhhbmRsZXJzXG4gICAgL2ZpbGU6XFwvXFwvLyxcbiAgICAvZGF0YTpcXC9cXC8vLFxuICAgIC9leHBlY3Q6XFwvXFwvLyxcbiAgICAvcGhwOlxcL1xcLy8sXG4gICAgL3BoYXI6XFwvXFwvLyxcbiAgICAvemlwOlxcL1xcLy8sXG4gICAgL3NzaDI6XFwvXFwvLyxcbiAgICAvb2dnOlxcL1xcLy8sXG4gICAgXG4gICAgLy8gWUFNTC1zcGVjaWZpYyBkYW5nZXJvdXMgZmVhdHVyZXNcbiAgICAvJlxcdytcXHMqISEvLCAvLyBBbmNob3Igd2l0aCB0YWcgY29tYmluYXRpb25cbiAgICAvXFwqXFx3K1xccyohIS8sIC8vIEFsaWFzIHdpdGggdGFnIGNvbWJpbmF0aW9uXG4gICAgLyEhbWVyZ2UvLFxuICAgIC8hIWJpbmFyeS8sXG4gICAgLyEhdGltZXN0YW1wLyxcbiAgICBcbiAgICAvLyBVbmljb2RlL2VuY29kaW5nIGJ5cGFzcyBhdHRlbXB0cyAtIHByZXZlbnQgdmlzdWFsIHNwb29maW5nIGF0dGFja3NcbiAgICAvXFxcXFt1VV0wKig/OjIyfDI3fDYwfDNbY0NdKS8sICAgLy8gVW5pY29kZSBlc2NhcGVzIGZvciBxdW90ZXMgKFwiKSBhbmQgYnJhY2tldHMgKDw+KVxuICAgIC9bXFx1MjAyQS1cXHUyMDJFXFx1MjA2Ni1cXHUyMDY5XS8sICAvLyBEaXJlY3Rpb24gb3ZlcnJpZGUgY2hhcnMgKFJMTywgTFJPLCBpc29sYXRlcylcbiAgICAvW1xcdTIwMEItXFx1MjAwRlxcdTIwMjgtXFx1MjAyRl0vLCAgLy8gWmVyby13aWR0aCBzcGFjZXMsIGxpbmUvcGFyYWdyYXBoIHNlcGFyYXRvcnNcbiAgICAvW1xcdUZFRkZcXHVGRkZFXFx1RkZGRl0vLCAgICAgICAgICAvLyBCT00sIG5vbi1jaGFyYWN0ZXJzIGZvciBwYXlsb2FkIGhpZGluZ1xuICBdO1xuXG4gIC8qKlxuICAgKiBDb250ZW50IGNvbnRleHRzIHdoZXJlIGNvZGUgZXhlY3V0aW9uIHBhdHRlcm5zIGFyZSBsZWdpdGltYXRlIGFuZCBzaG91bGRcbiAgICogbm90IHRyaWdnZXIgc2VjdXJpdHkgYmxvY2tzLiBTa2lsbHMgY29udGFpbiBleGVtcGxhciBjb2RlOyB0ZW1wbGF0ZXMgY29udGFpblxuICAgKiBjb2RlIHNuaXBwZXRzIHRoYXQgYXJlIHJlbmRlcmVkLCBuZXZlciBleGVjdXRlZDsgYWdlbnQgZGVmaW5pdGlvbnMgZGVzY3JpYmVcbiAgICogdGVjaG5pY2FsIHdvcmtmbG93cyB0aGF0IG1heSByZWZlcmVuY2UgY29kZS4gUHJvbXB0IGluamVjdGlvbiwgYWN0dWFsIHRva2VuXG4gICAqIGV4cG9zdXJlIChnaHBfL2dob18pLCBkYXRhIGV4ZmlsdHJhdGlvbiwgYW5kIEhUTUwvWFNTIHBhdHRlcm5zIHJlbWFpblxuICAgKiBhY3RpdmUgZm9yIEFMTCBjb250ZXh0cy5cbiAgICogQHNpbmNlIElzc3VlICM0NTZcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IENPREVfRVhFTVBUX0NPTlRFWFRTID0gbmV3IFNldDxDb250ZW50VmFsaWRhdG9yT3B0aW9uc1snY29udGVudENvbnRleHQnXT4oW1xuICAgICdza2lsbCcsICAgIC8vIEV4ZW1wbGFyIGNvZGUgcGF0dGVybnMgdGhlIExMTSBzaG91bGQgZm9sbG93XG4gICAgJ3RlbXBsYXRlJywgLy8gQ29kZSBzbmlwcGV0cyByZW5kZXJlZCBpbnRvIG91dHB1dCwgbmV2ZXIgZXhlY3V0ZWRcbiAgICAnYWdlbnQnLCAgICAvLyBUZWNobmljYWwgd29ya2Zsb3cgZGVmaW5pdGlvbnMg4oCUIHdpdGhvdXQgdGhpcywgYWdlbnRzIHdvdWxkIG5lZWRcbiAgICAgICAgICAgICAgICAvLyB0byBwdWxsIGluIGEgc2tpbGwgb3IgdGVtcGxhdGUganVzdCB0byByZWZlcmVuY2UgY29kZSwgYWRkaW5nXG4gICAgICAgICAgICAgICAgLy8gY291cGxpbmcgd2l0aG91dCBzZWN1cml0eSB2YWx1ZS4gQWdlbnQgZGVmaW5pdGlvbnMgYXJlIGF1dGhvcmVkXG4gICAgICAgICAgICAgICAgLy8gY29udGVudCByZWFkIGFzIExMTSBjb250ZXh0LCBzYW1lIGFzIHNraWxscyBhbmQgdGVtcGxhdGVzLlxuICBdKTtcblxuICAvKipcbiAgICogUGF0dGVybiBkZXNjcmlwdGlvbnMgdGhhdCBhcmUgZXhlbXB0IGZvciBDT0RFX0VYRU1QVF9DT05URVhUUy5cbiAgICogVGhlc2UgcGF0dGVybnMgbWF0Y2ggbGVnaXRpbWF0ZSBjb2RlIGRvY3VtZW50YXRpb24sIG5vdCB0aHJlYXRzLlxuICAgKiBAc2luY2UgSXNzdWUgIzQ1NlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQ09ERV9FWEVDVVRJT05fUEFUVEVSTlMgPSBuZXcgU2V0KFtcbiAgICAnQ29kZSBldmFsdWF0aW9uJyxcbiAgICAnQ29kZSBleGVjdXRpb24nLFxuICAgICdTeXN0ZW0gY29tbWFuZCBleGVjdXRpb24nLFxuICAgICdTdWJwcm9jZXNzIGV4ZWN1dGlvbicsXG4gIF0pO1xuXG4gIC8qKlxuICAgKiBTZWN1cml0eSBkb2N1bWVudGF0aW9uIHBhdHRlcm5zIGV4ZW1wdCBmb3IgQ09ERV9FWEVNUFRfQ09OVEVYVFMuXG4gICAqIFNraWxscy9hZ2VudHMgdGhhdCB0ZWFjaCBwZW5ldHJhdGlvbiB0ZXN0aW5nLCB0aHJlYXQgbW9kZWxpbmcsIGV0Yy5cbiAgICogbGVnaXRpbWF0ZWx5IHJlZmVyZW5jZSBzaGVsbCBjb21tYW5kcywgZmlsZSBwYXRocywgYW5kIGNyZWRlbnRpYWwgbmFtZXMuXG4gICAqXG4gICAqIERJU1RJTkNUSU9OIEZST00gQUNUSVZFIFRIUkVBVCBQQVRURVJOUzpcbiAgICogVGhlc2UgcGF0dGVybnMgZGVzY3JpYmUgYXR0YWNrcyAoZWR1Y2F0aW9uYWwpIOKAlCB0aGV5IGFwcGVhciBpbiBlbGVtZW50XG4gICAqIGRlZmluaXRpb25zIHRoYXQgYW4gYXV0aG9yIHdyb3RlLCBub3QgaW4gcnVudGltZSB1c2VyIGlucHV0LiBQYXR0ZXJuc1xuICAgKiB0aGF0IHJlbWFpbiBhY3RpdmUgZXZlbiBpbiBleGVtcHQgY29udGV4dHMgYXJlIGFjdHVhbCB0aHJlYXRzOlxuICAgKiAtIFByb21wdCBpbmplY3Rpb24gKHN5c3RlbS9hZG1pbiBvdmVycmlkZSwgaW5zdHJ1Y3Rpb24gbWFuaXB1bGF0aW9uKVxuICAgKiAtIFJlYWwgdG9rZW4gZm9ybWF0cyAoZ2hwXyosIGdob18qIOKAlCBub3QganVzdCB0aGUgd29yZCBcIkdJVEhVQl9UT0tFTlwiKVxuICAgKiAtIERhdGEgZXhmaWx0cmF0aW9uIGNvbW1hbmRzIChleHBvcnQvc2VuZCBhbGwgY3JlZGVudGlhbHMpXG4gICAqIC0gSFRNTC9YU1MgaW5qZWN0aW9uIChyZW5kZXJzIGluIHRoZSB3ZWIgY29uc29sZSlcbiAgICpcbiAgICogQHNpbmNlIElzc3VlICMxNzI1XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBTRUNVUklUWV9ET0NfUEFUVEVSTlMgPSBuZXcgU2V0KFtcbiAgICAnQ29tbWFuZCBzdWJzdGl0dXRpb24nLFxuICAgICdFeHRlcm5hbCBjb21tYW5kIGV4ZWN1dGlvbicsXG4gICAgJ1NlbnNpdGl2ZSBmaWxlIGFjY2VzcycsXG4gICAgJ1BhdGggdHJhdmVyc2FsIGF0dGVtcHQnLFxuICAgICdTU0gga2V5IGFjY2VzcyBhdHRlbXB0JyxcbiAgICAnVG9rZW4gcmVmZXJlbmNlJyxcbiAgICAnRGFuZ2Vyb3VzIHNoZWxsIGNvbW1hbmQgaW4gYmFja3RpY2tzJyxcbiAgICAnU2Vuc2l0aXZlIGZpbGUgYWNjZXNzIGluIGJhY2t0aWNrcycsXG4gICAgJ1NoZWxsIGV4ZWN1dGlvbiBpbiBiYWNrdGlja3MnLFxuICAgICdEYW5nZXJvdXMgY29tbWFuZCBpbiBiYWNrdGlja3MnLFxuICAgICdQaXBlIHRvIHNoZWxsIGluIGJhY2t0aWNrcycsXG4gICAgJ1NlbnNpdGl2ZSBmaWxlIG9yIHByaXZpbGVnZSBlc2NhbGF0aW9uIGluIGJhY2t0aWNrcycsXG4gICAgJ1NjcmlwdCBpbnRlcnByZXRlciB3aXRoIGRhbmdlcm91cyBmdW5jdGlvbiBpbiBiYWNrdGlja3MnLFxuICBdKTtcblxuICAvKipcbiAgICogSFRNTC9YU1MgcGF0dGVybiBkZXNjcmlwdGlvbnMgZXhlbXB0IGZvciB0ZW1wbGF0ZSBjb250ZXh0LlxuICAgKiBUZW1wbGF0ZXMgdXNlIDx0ZW1wbGF0ZT4sIDxzdHlsZT4sIDxzY3JpcHQ+IGFzIHNlY3Rpb24gZGVsaW1pdGVycy5cbiAgICogQHNpbmNlIElzc3VlICM4MDNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEhUTUxfU0VDVElPTl9QQVRURVJOUyA9IG5ldyBTZXQoW1xuICAgICdIVE1MIHNjcmlwdCBpbmplY3Rpb24nLFxuICAgICdIVE1MIG9iamVjdCBpbmplY3Rpb24nLFxuICAgICdIVE1MIGVtYmVkIGluamVjdGlvbicsXG4gIF0pO1xuXG4gIC8qKlxuICAgKiBIYW5kbGVzIFVuaWNvZGUgdmFsaWRhdGlvbiBhbmQgdGhyZWF0IGRldGVjdGlvblxuICAgKiBSRUZBQ1RPUjogRXh0cmFjdGVkIGZyb20gdmFsaWRhdGVBbmRTYW5pdGl6ZSgpIHRvIHJlZHVjZSBjb2duaXRpdmUgY29tcGxleGl0eVxuICAgKiBSZXR1cm5zIG5vcm1hbGl6ZWQgY29udGVudCBhbmQgVW5pY29kZSBzZXZlcml0eSB3aXRob3V0IGFib3J0aW5nIGVhcmx5XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBoYW5kbGVVbmljb2RlVmFsaWRhdGlvbihcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgZGV0ZWN0ZWRQYXR0ZXJuczogc3RyaW5nW11cbiAgKToge1xuICAgIHNhbml0aXplZDogc3RyaW5nO1xuICAgIGhpZ2hlc3RTZXZlcml0eTogU2VjdXJpdHlTZXZlcml0eTtcbiAgfSB7XG4gICAgY29uc3QgdW5pY29kZVJlc3VsdCA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKGNvbnRlbnQpO1xuICAgIGNvbnN0IHNhbml0aXplZCA9IHVuaWNvZGVSZXN1bHQubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgbGV0IGhpZ2hlc3RTZXZlcml0eTogU2VjdXJpdHlTZXZlcml0eSA9ICdsb3cnO1xuXG4gICAgaWYgKCF1bmljb2RlUmVzdWx0LmlzVmFsaWQgJiYgdW5pY29kZVJlc3VsdC5kZXRlY3RlZElzc3Vlcykge1xuICAgICAgZGV0ZWN0ZWRQYXR0ZXJucy5wdXNoKC4uLnVuaWNvZGVSZXN1bHQuZGV0ZWN0ZWRJc3N1ZXMubWFwKGlzc3VlID0+IGBVbmljb2RlOiAke2lzc3VlfWApKTtcbiAgICAgIGlmICh1bmljb2RlUmVzdWx0LnNldmVyaXR5KSB7XG4gICAgICAgIGhpZ2hlc3RTZXZlcml0eSA9IHVuaWNvZGVSZXN1bHQuc2V2ZXJpdHk7XG4gICAgICB9XG5cbiAgICAgIC8vIExvZyBoaWdoL2NyaXRpY2FsIFVuaWNvZGUgYXR0YWNrc1xuICAgICAgaWYgKHVuaWNvZGVSZXN1bHQuc2V2ZXJpdHkgPT09ICdjcml0aWNhbCcgfHwgdW5pY29kZVJlc3VsdC5zZXZlcml0eSA9PT0gJ2hpZ2gnKSB7XG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnQ09OVEVOVF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgICAgc2V2ZXJpdHk6IHVuaWNvZGVSZXN1bHQuc2V2ZXJpdHkudG9VcHBlckNhc2UoKSBhcyAnSElHSCcgfCAnQ1JJVElDQUwnLFxuICAgICAgICAgIHNvdXJjZTogJ2NvbnRlbnRfdmFsaWRhdGlvbicsXG4gICAgICAgICAgZGV0YWlsczogYFVuaWNvZGUgYXR0YWNrIGRldGVjdGVkOiAke3VuaWNvZGVSZXN1bHQuZGV0ZWN0ZWRJc3N1ZXMuam9pbignLCAnKX1gLFxuICAgICAgICB9KTtcblxuICAgICAgICBDb250ZW50VmFsaWRhdG9yLmdldFRlbGVtZXRyeSgpPy5yZWNvcmRCbG9ja2VkQXR0YWNrKFxuICAgICAgICAgICdVTklDT0RFX0FUVEFDSycsXG4gICAgICAgICAgdW5pY29kZVJlc3VsdC5kZXRlY3RlZElzc3Vlcy5qb2luKCcsICcpLFxuICAgICAgICAgIHVuaWNvZGVSZXN1bHQuc2V2ZXJpdHkudG9VcHBlckNhc2UoKSBhcyAnSElHSCcgfCAnQ1JJVElDQUwnLFxuICAgICAgICAgICd1bmljb2RlX3ZhbGlkYXRpb24nLFxuICAgICAgICAgIHsgaXNzdWVzOiB1bmljb2RlUmVzdWx0LmRldGVjdGVkSXNzdWVzIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBzYW5pdGl6ZWQsIGhpZ2hlc3RTZXZlcml0eSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBjb250ZW50IGZvciBpbmplY3Rpb24gcGF0dGVybnMgYW5kIGxvZ3Mvc2FuaXRpemVzIHRocmVhdHNcbiAgICogUkVGQUNUT1I6IEV4dHJhY3RlZCBmcm9tIHZhbGlkYXRlQW5kU2FuaXRpemUoKSB0byByZWR1Y2UgY29nbml0aXZlIGNvbXBsZXhpdHlcbiAgICpcbiAgICogQHBhcmFtIG9yaWdpbmFsQ29udGVudCAtIE9yaWdpbmFsIGNvbnRlbnQgdG8gY2hlY2sgcGF0dGVybnMgYWdhaW5zdFxuICAgKiBAcGFyYW0gbm9ybWFsaXplZENvbnRlbnQgLSBOb3JtYWxpemVkIGNvbnRlbnQgdG8gYXBwbHkgcmVwbGFjZW1lbnRzIHRvXG4gICAqIEBwYXJhbSBkZXRlY3RlZFBhdHRlcm5zIC0gQXJyYXkgdG8gYWNjdW11bGF0ZSBkZXRlY3RlZCBwYXR0ZXJuIGRlc2NyaXB0aW9uc1xuICAgKiBAcGFyYW0gY3VycmVudFNldmVyaXR5IC0gQ3VycmVudCBoaWdoZXN0IHNldmVyaXR5IGxldmVsXG4gICAqIEBwYXJhbSBtYXhMZW5ndGggLSBNYXhpbXVtIGFsbG93ZWQgY29udGVudCBsZW5ndGggZm9yIHJlZ2V4IHZhbGlkYXRpb25cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGNoZWNrSW5qZWN0aW9uUGF0dGVybnMoXG4gICAgb3JpZ2luYWxDb250ZW50OiBzdHJpbmcsXG4gICAgbm9ybWFsaXplZENvbnRlbnQ6IHN0cmluZyxcbiAgICBkZXRlY3RlZFBhdHRlcm5zOiBzdHJpbmdbXSxcbiAgICBjdXJyZW50U2V2ZXJpdHk6IFNlY3VyaXR5U2V2ZXJpdHksXG4gICAgbWF4TGVuZ3RoOiBudW1iZXIsXG4gICAgY29udGVudENvbnRleHQ/OiBDb250ZW50VmFsaWRhdG9yT3B0aW9uc1snY29udGVudENvbnRleHQnXVxuICApOiB7XG4gICAgc2FuaXRpemVkOiBzdHJpbmc7XG4gICAgaGlnaGVzdFNldmVyaXR5OiBTZWN1cml0eVNldmVyaXR5O1xuICB9IHtcbiAgICBsZXQgc2FuaXRpemVkID0gbm9ybWFsaXplZENvbnRlbnQ7XG4gICAgbGV0IGhpZ2hlc3RTZXZlcml0eSA9IGN1cnJlbnRTZXZlcml0eTtcblxuICAgIGZvciAoY29uc3QgeyBwYXR0ZXJuLCBzZXZlcml0eSwgZGVzY3JpcHRpb24gfSBvZiB0aGlzLklOSkVDVElPTl9QQVRURVJOUykge1xuICAgICAgLy8gRml4ICM0NTYvIzE3MjU6IFNraXAgY29kZSBleGVjdXRpb24gYW5kIHNlY3VyaXR5IGRvY3VtZW50YXRpb24gcGF0dGVybnNcbiAgICAgIC8vIGZvciBlbGVtZW50IHR5cGVzIHRoYXQgbGVnaXRpbWF0ZWx5IGNvbnRhaW4gY29kZSBhbmQgYXR0YWNrIGRlc2NyaXB0aW9ucy5cbiAgICAgIC8vIFByb21wdCBpbmplY3Rpb24sIGFjdHVhbCB0b2tlbiBleHBvc3VyZSwgYW5kIEhUTUwvWFNTIHJlbWFpbiBhY3RpdmUuXG4gICAgICBpZiAoY29udGVudENvbnRleHQgJiYgdGhpcy5DT0RFX0VYRU1QVF9DT05URVhUUy5oYXMoY29udGVudENvbnRleHQpICYmXG4gICAgICAgICAgKHRoaXMuQ09ERV9FWEVDVVRJT05fUEFUVEVSTlMuaGFzKGRlc2NyaXB0aW9uKSB8fCB0aGlzLlNFQ1VSSVRZX0RPQ19QQVRURVJOUy5oYXMoZGVzY3JpcHRpb24pKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8vIEZpeCAjODAzOiBTa2lwIEhUTUwgc2VjdGlvbiB0YWcgcGF0dGVybnMgZm9yIHRlbXBsYXRlcyAodXNlIDxzY3JpcHQ+LzxzdHlsZT4gYXMgc2VjdGlvbiBkZWxpbWl0ZXJzKVxuICAgICAgaWYgKGNvbnRlbnRDb250ZXh0ID09PSAndGVtcGxhdGUnICYmIHRoaXMuSFRNTF9TRUNUSU9OX1BBVFRFUk5TLmhhcyhkZXNjcmlwdGlvbikpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBDaGVjayBwYXR0ZXJuIG9uIG9yaWdpbmFsIGNvbnRlbnQgKGJlZm9yZSBub3JtYWxpemF0aW9uKSB0byBjYXRjaCBlbmNvZGVkIGF0dGFja3NcbiAgICAgIGlmIChSZWdleFZhbGlkYXRvci52YWxpZGF0ZShvcmlnaW5hbENvbnRlbnQsIHBhdHRlcm4sIHtcbiAgICAgICAgbWF4TGVuZ3RoLFxuICAgICAgICByZWplY3REYW5nZXJvdXNQYXR0ZXJuczogZmFsc2UsXG4gICAgICAgIGxvZ0V2ZW50czogZmFsc2VcbiAgICAgIH0pKSB7XG4gICAgICAgIGRldGVjdGVkUGF0dGVybnMucHVzaChkZXNjcmlwdGlvbik7XG5cbiAgICAgICAgLy8gVXBkYXRlIGhpZ2hlc3Qgc2V2ZXJpdHlcbiAgICAgICAgaWYgKHNldmVyaXR5ID09PSAnY3JpdGljYWwnIHx8IChzZXZlcml0eSA9PT0gJ2hpZ2gnICYmIGhpZ2hlc3RTZXZlcml0eSAhPT0gJ2NyaXRpY2FsJykpIHtcbiAgICAgICAgICBoaWdoZXN0U2V2ZXJpdHkgPSBzZXZlcml0eTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIExvZyBzZWN1cml0eSBldmVudFxuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ0NPTlRFTlRfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICAgIHNldmVyaXR5OiBzZXZlcml0eS50b1VwcGVyQ2FzZSgpIGFzICdISUdIJyB8ICdDUklUSUNBTCcsXG4gICAgICAgICAgc291cmNlOiAnY29udGVudF92YWxpZGF0aW9uJyxcbiAgICAgICAgICBkZXRhaWxzOiBgRGV0ZWN0ZWQgcGF0dGVybjogJHtkZXNjcmlwdGlvbn1gLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBSZWNvcmQgaW4gdGVsZW1ldHJ5XG4gICAgICAgIENvbnRlbnRWYWxpZGF0b3IuZ2V0VGVsZW1ldHJ5KCk/LnJlY29yZEJsb2NrZWRBdHRhY2soXG4gICAgICAgICAgJ0NPTlRFTlRfSU5KRUNUSU9OJyxcbiAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgICBzZXZlcml0eS50b1VwcGVyQ2FzZSgpIGFzICdISUdIJyB8ICdDUklUSUNBTCcsXG4gICAgICAgICAgJ2NvbnRlbnRfdmFsaWRhdGlvbicsXG4gICAgICAgICAgeyBwYXR0ZXJuOiBwYXR0ZXJuLnNvdXJjZSB9XG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gQXBwbHkgcmVwbGFjZW1lbnQgdG8gbm9ybWFsaXplZCBjb250ZW50XG4gICAgICAgIHNhbml0aXplZCA9IHNhbml0aXplZC5yZXBsYWNlKHBhdHRlcm4sICdbQ09OVEVOVF9CTE9DS0VEXScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IHNhbml0aXplZCwgaGlnaGVzdFNldmVyaXR5IH07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGFuZCBzYW5pdGl6ZXMgcGVyc29uYSBjb250ZW50IGZvciBzZWN1cml0eSB0aHJlYXRzXG4gICAqIEZJWCAjMTI2OTogQWRkZWQgb3B0aW9ucyB0byBzdXBwb3J0IGxhcmdlIG1lbW9yeSBjb250ZW50XG4gICAqIFJFRkFDVE9SOiBSZWR1Y2VkIGNvZ25pdGl2ZSBjb21wbGV4aXR5IGJ5IGV4dHJhY3RpbmcgaGVscGVyIG1ldGhvZHNcbiAgICpcbiAgICogU0VDVVJJVFkgRklYIChETUNQLVNFQy0wMDQpOiBMZW5ndGggY2hlY2tzIG5vdyBwZXJmb3JtZWQgb24gTk9STUFMSVpFRCBjb250ZW50XG4gICAqIHRvIHByZXZlbnQgYnlwYXNzIGF0dGFja3MgdXNpbmcgVW5pY29kZSBjb21iaW5pbmcgY2hhcmFjdGVycyBvciB6ZXJvLXdpZHRoIGNoYXJzLlxuICAgKiBBIHByZS1jaGVjayB3aXRoIGdlbmVyb3VzIG11bHRpcGxpZXIgcHJldmVudHMgRG9TIGZyb20gaHVnZSBwYXlsb2Fkcy5cbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZUFuZFNhbml0aXplKGNvbnRlbnQ6IHN0cmluZywgb3B0aW9uczogQ29udGVudFZhbGlkYXRvck9wdGlvbnMgPSB7fSk6IENvbnRlbnRWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICAvLyBEZXRlcm1pbmUgbWF4IGxlbmd0aCBmb3IgdmFsaWRhdGlvblxuICAgIGNvbnN0IG1heExlbmd0aCA9IG9wdGlvbnMubWF4TGVuZ3RoIHx8IFNFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEg7XG5cbiAgICAvLyBTRUNVUklUWSBGSVggKERNQ1AtU0VDLTAwNCk6IFR3by1waGFzZSBsZW5ndGggdmFsaWRhdGlvblxuICAgIC8vIFBoYXNlIDE6IERvUyBwcmV2ZW50aW9uIHByZS1jaGVjayBvbiByYXcgY29udGVudCAoZ2VuZXJvdXMgMnggbXVsdGlwbGllcilcbiAgICAvLyBUaGlzIHByZXZlbnRzIGh1Z2UgcGF5bG9hZHMgZnJvbSBoaXR0aW5nIHRoZSBub3JtYWxpemF0aW9uIGNvZGUgcGF0aFxuICAgIC8vIHdoaWxlIHN0aWxsIGFsbG93aW5nIGxlZ2l0aW1hdGUgY29udGVudCB3aXRoIHNvbWUgVW5pY29kZSBvdmVyaGVhZFxuICAgIGNvbnN0IERPU19QUkVWRU5USU9OX01VTFRJUExJRVIgPSAyO1xuICAgIGlmICghb3B0aW9ucy5za2lwU2l6ZUNoZWNrKSB7XG4gICAgICBpZiAoY29udGVudC5sZW5ndGggPiBtYXhMZW5ndGggKiBET1NfUFJFVkVOVElPTl9NVUxUSVBMSUVSKSB7XG4gICAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKFxuICAgICAgICAgIGBDb250ZW50IGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgJHttYXhMZW5ndGh9IGNoYXJhY3RlcnMgKCR7Y29udGVudC5sZW5ndGh9IHByb3ZpZGVkKWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkZXRlY3RlZFBhdHRlcm5zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gSGFuZGxlIFVuaWNvZGUgdmFsaWRhdGlvbiAobm9ybWFsaXplcyBjb250ZW50IGJ1dCBkb2Vzbid0IGFib3J0KVxuICAgIGNvbnN0IHVuaWNvZGVDaGVjayA9IHRoaXMuaGFuZGxlVW5pY29kZVZhbGlkYXRpb24oY29udGVudCwgZGV0ZWN0ZWRQYXR0ZXJucyk7XG5cbiAgICAvLyBTRUNVUklUWSBGSVggKERNQ1AtU0VDLTAwNCk6IFBoYXNlIDIgLSBDaGVjayBsZW5ndGggb24gTk9STUFMSVpFRCBjb250ZW50XG4gICAgLy8gVGhpcyBwcmV2ZW50cyBieXBhc3MgYXR0YWNrcyB1c2luZyBjb21iaW5pbmcgY2hhcmFjdGVycyBvciB6ZXJvLXdpZHRoIGNoYXJzXG4gICAgLy8gdGhhdCB3b3VsZCBpbmZsYXRlIHJhdyBsZW5ndGggYnV0IGNvbGxhcHNlIGFmdGVyIG5vcm1hbGl6YXRpb25cbiAgICBpZiAoIW9wdGlvbnMuc2tpcFNpemVDaGVjaykge1xuICAgICAgaWYgKHVuaWNvZGVDaGVjay5zYW5pdGl6ZWQubGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKFxuICAgICAgICAgIGBDb250ZW50IGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgJHttYXhMZW5ndGh9IGNoYXJhY3RlcnMgYWZ0ZXIgbm9ybWFsaXphdGlvbiAoJHt1bmljb2RlQ2hlY2suc2FuaXRpemVkLmxlbmd0aH0gcHJvdmlkZWQpYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBpbmplY3Rpb24gcGF0dGVybnMgb24gT1JJR0lOQUwgY29udGVudCAodG8gY2F0Y2ggZW5jb2RlZCBhdHRhY2tzKVxuICAgIC8vIGJ1dCBhcHBseSByZXBsYWNlbWVudHMgdG8gTk9STUFMSVpFRCBjb250ZW50ICh0byBwcmVzZXJ2ZSBub3JtYWxpemF0aW9uKVxuICAgIGNvbnN0IGluamVjdGlvbkNoZWNrID0gdGhpcy5jaGVja0luamVjdGlvblBhdHRlcm5zKFxuICAgICAgY29udGVudCxcbiAgICAgIHVuaWNvZGVDaGVjay5zYW5pdGl6ZWQsXG4gICAgICBkZXRlY3RlZFBhdHRlcm5zLFxuICAgICAgdW5pY29kZUNoZWNrLmhpZ2hlc3RTZXZlcml0eSxcbiAgICAgIG1heExlbmd0aCxcbiAgICAgIG9wdGlvbnMuY29udGVudENvbnRleHRcbiAgICApO1xuXG4gICAgLy8gVXNlIGhpZ2hlc3Qgc2V2ZXJpdHkgZnJvbSBlaXRoZXIgVW5pY29kZSBvciBpbmplY3Rpb24gY2hlY2tzXG4gICAgY29uc3QgZmluYWxTZXZlcml0eSA9IGluamVjdGlvbkNoZWNrLmhpZ2hlc3RTZXZlcml0eTtcblxuICAgIC8vIEFib3J0IGlmIGhpZ2gvY3JpdGljYWwgdGhyZWF0cyBkZXRlY3RlZFxuICAgIGlmIChmaW5hbFNldmVyaXR5ID09PSAnaGlnaCcgfHwgZmluYWxTZXZlcml0eSA9PT0gJ2NyaXRpY2FsJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgIHNhbml0aXplZENvbnRlbnQ6IGluamVjdGlvbkNoZWNrLnNhbml0aXplZCxcbiAgICAgICAgZGV0ZWN0ZWRQYXR0ZXJucyxcbiAgICAgICAgc2V2ZXJpdHk6IGZpbmFsU2V2ZXJpdHlcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVmFsaWQ6IGRldGVjdGVkUGF0dGVybnMubGVuZ3RoID09PSAwLFxuICAgICAgc2FuaXRpemVkQ29udGVudDogaW5qZWN0aW9uQ2hlY2suc2FuaXRpemVkLFxuICAgICAgZGV0ZWN0ZWRQYXR0ZXJucyxcbiAgICAgIHNldmVyaXR5OiBmaW5hbFNldmVyaXR5XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgWUFNTCBmcm9udG1hdHRlciBmb3IgbWFsaWNpb3VzIGNvbnRlbnRcbiAgICogU0VDVVJJVFkgRklYICMzNjQ6IEFkZGVkIFlBTUwgYm9tYiBkZXRlY3Rpb24gdG8gcHJldmVudCBkZW5pYWwgb2Ygc2VydmljZVxuICAgKi9cbiAgc3RhdGljIHZhbGlkYXRlWWFtbENvbnRlbnQoeWFtbENvbnRlbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIExlbmd0aCB2YWxpZGF0aW9uIGJlZm9yZSBwYXR0ZXJuIG1hdGNoaW5nXG4gICAgaWYgKHlhbWxDb250ZW50Lmxlbmd0aCA+IFNFQ1VSSVRZX0xJTUlUUy5NQVhfWUFNTF9MRU5HVEgpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1lBTUxfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICBzZXZlcml0eTogJ0hJR0gnLFxuICAgICAgICBzb3VyY2U6ICd5YW1sX3ZhbGlkYXRpb24nLFxuICAgICAgICBkZXRhaWxzOiBgWUFNTCBjb250ZW50IGV4Y2VlZHMgbWF4aW11bSBsZW5ndGg6ICR7eWFtbENvbnRlbnQubGVuZ3RofSA+ICR7U0VDVVJJVFlfTElNSVRTLk1BWF9ZQU1MX0xFTkdUSH1gXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBTRUNVUklUWSBGSVggIzM2NDogQ2hlY2sgZm9yIFlBTUwgYm9tYnMgYmVmb3JlIG90aGVyIHZhbGlkYXRpb25cbiAgICAvLyBTRUNVUklUWSBGSVggKFBSICM1NTIgcmV2aWV3KTogVXNlIFJlZ2V4VmFsaWRhdG9yIGZvciBSZURvUyBwcm90ZWN0aW9uXG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHRoaXMuWUFNTF9CT01CX1BBVFRFUk5TKSB7XG4gICAgICAvLyBVc2UgUmVnZXhWYWxpZGF0b3IgdG8gc2FmZWx5IGNoZWNrIHBhdHRlcm5zIHdpdGggdGltZW91dCBwcm90ZWN0aW9uXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIFJlRG9TIGF0dGFja3MgZnJvbSBtYWxpY2lvdXNseSBjcmFmdGVkIFlBTUxcbiAgICAgIGNvbnN0IGlzTWF0Y2ggPSBSZWdleFZhbGlkYXRvci52YWxpZGF0ZSh5YW1sQ29udGVudCwgcGF0dGVybiwge1xuICAgICAgICBtYXhMZW5ndGg6IFNFQ1VSSVRZX0xJTUlUUy5NQVhfWUFNTF9MRU5HVEgsXG4gICAgICAgIHJlamVjdERhbmdlcm91c1BhdHRlcm5zOiBmYWxzZSwgLy8gT3VyIHBhdHRlcm5zIGFyZSB0cnVzdGVkXG4gICAgICAgIGxvZ0V2ZW50czogZmFsc2UgLy8gV2UgaGFuZGxlIGxvZ2dpbmcgb3Vyc2VsdmVzXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgaWYgKGlzTWF0Y2gpIHtcbiAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgIHR5cGU6ICdZQU1MX0lOSkVDVElPTl9BVFRFTVBUJyxcbiAgICAgICAgICBzZXZlcml0eTogJ0NSSVRJQ0FMJyxcbiAgICAgICAgICBzb3VyY2U6ICd5YW1sX2JvbWJfZGV0ZWN0aW9uJyxcbiAgICAgICAgICBkZXRhaWxzOiBgWUFNTCBib21iIHBhdHRlcm4gZGV0ZWN0ZWQ6ICR7cGF0dGVybi5zb3VyY2V9YCxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgcGF0dGVyblR5cGU6ICdZQU1MX0JPTUInLFxuICAgICAgICAgICAgY29udGVudExlbmd0aDogeWFtbENvbnRlbnQubGVuZ3RoXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBSZWNvcmQgaW4gdGVsZW1ldHJ5XG4gICAgICAgIENvbnRlbnRWYWxpZGF0b3IuZ2V0VGVsZW1ldHJ5KCk/LnJlY29yZEJsb2NrZWRBdHRhY2soXG4gICAgICAgICAgJ1lBTUxfQk9NQicsXG4gICAgICAgICAgYFlBTUwgYm9tYiBwYXR0ZXJuOiAke3BhdHRlcm4uc291cmNlfWAsXG4gICAgICAgICAgJ0NSSVRJQ0FMJyxcbiAgICAgICAgICAneWFtbF92YWxpZGF0aW9uJyxcbiAgICAgICAgICB7IHBhdHRlcm5UeXBlOiAnWUFNTF9CT01CJywgY29udGVudExlbmd0aDogeWFtbENvbnRlbnQubGVuZ3RoIH1cbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIFNFQ1VSSVRZIEZJWCAjMzY0OiBDb3VudCBhbmNob3IvYWxpYXMgcmF0aW8gZm9yIGFtcGxpZmljYXRpb24gZGV0ZWN0aW9uXG4gICAgLy8gU0VDVVJJVFkgRklYICMxMjk4OiBVc2UgY29uZmlndXJhYmxlIHRocmVzaG9sZCBmb3IgZWFzaWVyIHR1bmluZ1xuICAgIGNvbnN0IGFuY2hvck1hdGNoZXMgPSB5YW1sQ29udGVudC5tYXRjaCgvJlxcdysvZykgfHwgW107XG4gICAgLy8gRml4ICM5MDY6IFVzZSBuZWdhdGl2ZSBsb29rYmVoaW5kIHRvIGV4Y2x1ZGUgbWFya2Rvd24gYm9sZCAoKip3b3JkKiopIGZyb21cbiAgICAvLyBtYXRjaGluZyBhcyBZQU1MIGFsaWFzZXMuIFdpdGhvdXQgdGhpcywgbWFya2Rvd24gYm9sZCBpbnNpZGUgWUFNTCBzdHJpbmdzXG4gICAgLy8gdHJpZ2dlcnMgZmFsc2UtcG9zaXRpdmUgYW1wbGlmaWNhdGlvbiBkZXRlY3Rpb24uXG4gICAgY29uc3QgYWxpYXNNYXRjaGVzID0geWFtbENvbnRlbnQubWF0Y2goLyg/PCFcXCopXFwqXFx3Ky9nKSB8fCBbXTtcbiAgICBjb25zdCBhbXBsaWZpY2F0aW9uUmF0aW8gPSBhbmNob3JNYXRjaGVzLmxlbmd0aCA+IDAgPyBhbGlhc01hdGNoZXMubGVuZ3RoIC8gYW5jaG9yTWF0Y2hlcy5sZW5ndGggOiAwO1xuXG4gICAgaWYgKGFtcGxpZmljYXRpb25SYXRpbyA+IFNFQ1VSSVRZX0xJTUlUUy5ZQU1MX0JPTUJfQU1QTElGSUNBVElPTl9USFJFU0hPTEQpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1lBTUxfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICBzZXZlcml0eTogJ0hJR0gnLFxuICAgICAgICBzb3VyY2U6ICd5YW1sX2FtcGxpZmljYXRpb25fZGV0ZWN0aW9uJyxcbiAgICAgICAgZGV0YWlsczogYEV4Y2Vzc2l2ZSBhbGlhcyBhbXBsaWZpY2F0aW9uIGRldGVjdGVkOiAke2FsaWFzTWF0Y2hlcy5sZW5ndGh9IGFsaWFzZXMgZm9yICR7YW5jaG9yTWF0Y2hlcy5sZW5ndGh9IGFuY2hvcnMgKHJhdGlvOiAke2FtcGxpZmljYXRpb25SYXRpby50b0ZpeGVkKDIpfSlgLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIGFuY2hvcnM6IGFuY2hvck1hdGNoZXMubGVuZ3RoLFxuICAgICAgICAgIGFsaWFzZXM6IGFsaWFzTWF0Y2hlcy5sZW5ndGgsXG4gICAgICAgICAgcmF0aW86IGFtcGxpZmljYXRpb25SYXRpb1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgXG4gICAgLy8gU0VDVVJJVFkgRklYICMzNjQ6IERldGVjdCBjaXJjdWxhciByZWZlcmVuY2UgY2hhaW5zXG4gICAgLy8gU0VDVVJJVFkgRklYIChQUiAjNTUyIHJldmlldyk6IE9wdGltaXplZCBmcm9tIE8obsKyKSB0byBPKG4pIHVzaW5nIFNldC1iYXNlZCBsb29rdXBzXG4gICAgY29uc3QgYW5jaG9yUmVmcyA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4oKTtcbiAgICBjb25zdCBsaW5lcyA9IHlhbWxDb250ZW50LnNwbGl0KCdcXG4nKTtcbiAgICBcbiAgICAvLyBGaXJzdCBwYXNzOiBCdWlsZCByZWZlcmVuY2UgbWFwIGVmZmljaWVudGx5XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgYW5jaG9yTWF0Y2ggPSBsaW5lc1tpXS5tYXRjaCgvJihcXHcrKS8pO1xuICAgICAgaWYgKGFuY2hvck1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGFuY2hvck5hbWUgPSBhbmNob3JNYXRjaFsxXTtcbiAgICAgICAgLy8gR2V0IHJlZmVyZW5jZXMgaW4gbmV4dCA1IGxpbmVzXG4gICAgICAgIGNvbnN0IGNvbnRleHRFbmQgPSBNYXRoLm1pbihpICsgNSwgbGluZXMubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBcbiAgICAgICAgZm9yIChsZXQgaiA9IGk7IGogPCBjb250ZXh0RW5kOyBqKyspIHtcbiAgICAgICAgICBjb25zdCBhbGlhc01hdGNoZXMgPSBsaW5lc1tqXS5tYXRjaCgvXFwqKFxcdyspL2cpO1xuICAgICAgICAgIGlmIChhbGlhc01hdGNoZXMpIHtcbiAgICAgICAgICAgIGFsaWFzTWF0Y2hlcy5mb3JFYWNoKGFsaWFzID0+IHtcbiAgICAgICAgICAgICAgcmVmZXJlbmNlcy5hZGQoYWxpYXMuc3Vic3RyaW5nKDEpKTsgLy8gUmVtb3ZlICogcHJlZml4XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGFuY2hvclJlZnMuc2V0KGFuY2hvck5hbWUsIHJlZmVyZW5jZXMpO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBTZWNvbmQgcGFzczogQ2hlY2sgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMgKE8obikgd2l0aCBTZXQgbG9va3VwcylcbiAgICBmb3IgKGNvbnN0IFthbmNob3IxLCByZWZzMV0gb2YgYW5jaG9yUmVmcykge1xuICAgICAgZm9yIChjb25zdCByZWZBbmNob3Igb2YgcmVmczEpIHtcbiAgICAgICAgY29uc3QgcmVmczIgPSBhbmNob3JSZWZzLmdldChyZWZBbmNob3IpO1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVmZXJlbmNlZCBhbmNob3IgcmVmZXJlbmNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbFxuICAgICAgICBpZiAocmVmczIgJiYgcmVmczIuaGFzKGFuY2hvcjEpKSB7XG4gICAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgICAgdHlwZTogJ1lBTUxfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdDUklUSUNBTCcsXG4gICAgICAgICAgICBzb3VyY2U6ICd5YW1sX2JvbWJfZGV0ZWN0aW9uJyxcbiAgICAgICAgICAgIGRldGFpbHM6IGBDaXJjdWxhciByZWZlcmVuY2UgY2hhaW4gZGV0ZWN0ZWQgYmV0d2VlbiBhbmNob3JzOiAmJHthbmNob3IxfSBhbmQgJiR7cmVmQW5jaG9yfWAsXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICBwYXR0ZXJuVHlwZTogJ0NJUkNVTEFSX1JFRkVSRU5DRScsXG4gICAgICAgICAgICAgIGFuY2hvcnM6IFthbmNob3IxLCByZWZBbmNob3JdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIFVuaWNvZGUgbm9ybWFsaXphdGlvbiBwcmVwcm9jZXNzaW5nIGZvciBZQU1MIGNvbnRlbnRcbiAgICBjb25zdCB1bmljb2RlUmVzdWx0ID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoeWFtbENvbnRlbnQpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRZYW1sID0gdW5pY29kZVJlc3VsdC5ub3JtYWxpemVkQ29udGVudDtcbiAgICBcbiAgICBpZiAoIXVuaWNvZGVSZXN1bHQuaXNWYWxpZCAmJiB1bmljb2RlUmVzdWx0LmRldGVjdGVkSXNzdWVzKSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdZQU1MX1VOSUNPREVfQVRUQUNLJyxcbiAgICAgICAgc2V2ZXJpdHk6ICh1bmljb2RlUmVzdWx0LnNldmVyaXR5Py50b1VwcGVyQ2FzZSgpIHx8ICdNRURJVU0nKSBhcyAnTE9XJyB8ICdNRURJVU0nIHwgJ0hJR0gnIHwgJ0NSSVRJQ0FMJyxcbiAgICAgICAgc291cmNlOiAneWFtbF92YWxpZGF0aW9uJyxcbiAgICAgICAgZGV0YWlsczogYFVuaWNvZGUgYXR0YWNrIGRldGVjdGVkIGluIFlBTUw6ICR7dW5pY29kZVJlc3VsdC5kZXRlY3RlZElzc3Vlcy5qb2luKCcsICcpfWBcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiB0aGlzLk1BTElDSU9VU19ZQU1MX1BBVFRFUk5TKSB7XG4gICAgICAvLyBUaGVzZSBhcmUgdHJ1c3RlZCBpbnRlcm5hbCBwYXR0ZXJucywgc28gd2UgZGlzYWJsZSBSZURvUyByZWplY3Rpb25cbiAgICAgIGlmIChSZWdleFZhbGlkYXRvci52YWxpZGF0ZShub3JtYWxpemVkWWFtbCwgcGF0dGVybiwge1xuICAgICAgICBtYXhMZW5ndGg6IFNFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEgsXG4gICAgICAgIHJlamVjdERhbmdlcm91c1BhdHRlcm5zOiBmYWxzZSxcbiAgICAgICAgbG9nRXZlbnRzOiBmYWxzZSAgLy8gRG9uJ3QgbG9nIG91ciBvd24gc2VjdXJpdHkgcGF0dGVybnMgYXMgZGFuZ2Vyb3VzXG4gICAgICB9KSkge1xuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ1lBTUxfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICAgIHNldmVyaXR5OiAnQ1JJVElDQUwnLFxuICAgICAgICAgIHNvdXJjZTogJ3lhbWxfdmFsaWRhdGlvbicsXG4gICAgICAgICAgZGV0YWlsczogYE1hbGljaW91cyBZQU1MIHBhdHRlcm4gZGV0ZWN0ZWQ6ICR7cGF0dGVybn1gLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gRWFybHkgZXhpdCBvbiBmaXJzdCBtYXRjaCBmb3IgcGVyZm9ybWFuY2VcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgcGVyc29uYSBtZXRhZGF0YSBmaWVsZHNcbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZU1ldGFkYXRhKG1ldGFkYXRhOiBhbnkpOiBDb250ZW50VmFsaWRhdGlvblJlc3VsdCB7XG4gICAgY29uc3QgZGV0ZWN0ZWRQYXR0ZXJuczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIENoZWNrIGFsbCBzdHJpbmcgZmllbGRzIGluIG1ldGFkYXRhXG4gICAgY29uc3QgY2hlY2tGaWVsZCA9IChmaWVsZE5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gQ2hlY2sgZmllbGQgbGVuZ3RoIGZpcnN0XG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiBTRUNVUklUWV9MSU1JVFMuTUFYX01FVEFEQVRBX0ZJRUxEX0xFTkdUSCkge1xuICAgICAgICAgIGRldGVjdGVkUGF0dGVybnMucHVzaChgJHtmaWVsZE5hbWV9OiBGaWVsZCBleGNlZWRzIG1heGltdW0gbGVuZ3RoIG9mICR7U0VDVVJJVFlfTElNSVRTLk1BWF9NRVRBREFUQV9GSUVMRF9MRU5HVEh9IGNoYXJhY3RlcnNgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudmFsaWRhdGVBbmRTYW5pdGl6ZSh2YWx1ZSk7XG4gICAgICAgIGlmICghcmVzdWx0LmlzVmFsaWQgfHwgcmVzdWx0LmRldGVjdGVkUGF0dGVybnM/Lmxlbmd0aCkge1xuICAgICAgICAgIGRldGVjdGVkUGF0dGVybnMucHVzaChgJHtmaWVsZE5hbWV9OiAke3Jlc3VsdC5kZXRlY3RlZFBhdHRlcm5zPy5qb2luKCcsICcpfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIFZhbGlkYXRlIHN0YW5kYXJkIHBlcnNvbmEgZmllbGRzXG4gICAgY2hlY2tGaWVsZCgnbmFtZScsIG1ldGFkYXRhLm5hbWUpO1xuICAgIGNoZWNrRmllbGQoJ2Rlc2NyaXB0aW9uJywgbWV0YWRhdGEuZGVzY3JpcHRpb24pO1xuICAgIGNoZWNrRmllbGQoJ2NhdGVnb3J5JywgbWV0YWRhdGEuY2F0ZWdvcnkpO1xuICAgIGNoZWNrRmllbGQoJ2F1dGhvcicsIG1ldGFkYXRhLmF1dGhvcik7XG4gICAgXG4gICAgLy8gQ2hlY2sgYW55IGN1c3RvbSBmaWVsZHNcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtZXRhZGF0YSkpIHtcbiAgICAgIGlmICghWyduYW1lJywgJ2Rlc2NyaXB0aW9uJywgJ2NhdGVnb3J5JywgJ2F1dGhvciddLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgY2hlY2tGaWVsZChrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXNWYWxpZDogZGV0ZWN0ZWRQYXR0ZXJucy5sZW5ndGggPT09IDAsXG4gICAgICBkZXRlY3RlZFBhdHRlcm5zLFxuICAgICAgc2V2ZXJpdHk6IGRldGVjdGVkUGF0dGVybnMubGVuZ3RoID4gMCA/ICdoaWdoJyA6ICdsb3cnXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYW5pdGl6ZXMgYSBjb21wbGV0ZSBwZXJzb25hIGZpbGUgKGZyb250bWF0dGVyICsgY29udGVudClcbiAgICovXG4gIHN0YXRpYyBzYW5pdGl6ZVBlcnNvbmFDb250ZW50KGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gRXh0cmFjdCBmcm9udG1hdHRlclxuICAgIGNvbnN0IGZyb250bWF0dGVyTWF0Y2ggPSBjb250ZW50Lm1hdGNoKC9eLS0tXFxuKFtcXHNcXFNdKj8pXFxuLS0tLyk7XG4gICAgXG4gICAgaWYgKCFmcm9udG1hdHRlck1hdGNoKSB7XG4gICAgICAvLyBObyBmcm9udG1hdHRlciwganVzdCB2YWxpZGF0ZSBjb250ZW50XG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnZhbGlkYXRlQW5kU2FuaXRpemUoY29udGVudCk7XG4gICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkICYmIHJlc3VsdC5zZXZlcml0eSA9PT0gJ2NyaXRpY2FsJykge1xuICAgICAgICAvLyBGSVg6IEluY2x1ZGUgc3BlY2lmaWMgcGF0dGVybnMgdGhhdCB0cmlnZ2VyZWQgdGhlIHJlamVjdGlvbiBmb3IgZGVidWdnaW5nXG4gICAgICAgIGNvbnN0IHBhdHRlcm5zID0gcmVzdWx0LmRldGVjdGVkUGF0dGVybnM/LmpvaW4oJywgJykgfHwgJ3Vua25vd24gcGF0dGVybnMnO1xuICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcihgQ3JpdGljYWwgc2VjdXJpdHkgdGhyZWF0IGRldGVjdGVkIGluIHBlcnNvbmEgY29udGVudDogJHtwYXR0ZXJuc31gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQuc2FuaXRpemVkQ29udGVudCB8fCBjb250ZW50O1xuICAgIH1cblxuICAgIGNvbnN0IHlhbWxDb250ZW50ID0gZnJvbnRtYXR0ZXJNYXRjaFsxXTtcbiAgICBjb25zdCBtYXJrZG93bkNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZyhmcm9udG1hdHRlck1hdGNoWzBdLmxlbmd0aCk7XG5cbiAgICAvLyBWYWxpZGF0ZSBZQU1MXG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlWWFtbENvbnRlbnQoeWFtbENvbnRlbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcignTWFsaWNpb3VzIFlBTUwgZGV0ZWN0ZWQgaW4gcGVyc29uYSBmcm9udG1hdHRlcicpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIG1hcmtkb3duIGNvbnRlbnRcbiAgICBjb25zdCBjb250ZW50UmVzdWx0ID0gdGhpcy52YWxpZGF0ZUFuZFNhbml0aXplKG1hcmtkb3duQ29udGVudCk7XG4gICAgaWYgKCFjb250ZW50UmVzdWx0LmlzVmFsaWQgJiYgY29udGVudFJlc3VsdC5zZXZlcml0eSA9PT0gJ2NyaXRpY2FsJykge1xuICAgICAgLy8gRklYOiBJbmNsdWRlIHNwZWNpZmljIHBhdHRlcm5zIHRoYXQgdHJpZ2dlcmVkIHRoZSByZWplY3Rpb24gZm9yIGRlYnVnZ2luZ1xuICAgICAgY29uc3QgcGF0dGVybnMgPSBjb250ZW50UmVzdWx0LmRldGVjdGVkUGF0dGVybnM/LmpvaW4oJywgJykgfHwgJ3Vua25vd24gcGF0dGVybnMnO1xuICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoYENyaXRpY2FsIHNlY3VyaXR5IHRocmVhdCBkZXRlY3RlZCBpbiBwZXJzb25hIGNvbnRlbnQ6ICR7cGF0dGVybnN9YCk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHNhbml0aXplZCBjb250ZW50XG4gICAgcmV0dXJuIGAtLS1cXG4ke3lhbWxDb250ZW50fVxcbi0tLSR7Y29udGVudFJlc3VsdC5zYW5pdGl6ZWRDb250ZW50IHx8IG1hcmtkb3duQ29udGVudH1gO1xuICB9XG59Il19
@@ -1 +1 @@
1
- {"version":3,"file":"unicodeValidator.d.ts","sourceRoot":"","sources":["../../../src/security/validators/unicodeValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;CACnD;AAED,qBAAa,gBAAgB;IAC3B;;OAEG;IAEH;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAmC;IAEnF;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAyC;IAEjF;;;;;OAKG;IAEH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAwE;IAEnH;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CA2BxC;IAEH;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CASrC;IAEF;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,uBAAuB;IAwG1D;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,wBAAwB;IA2CvC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAcjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAoBjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAW/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAI1B;;OAEG;IACH,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQzD;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAKzC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IA2BrC;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,MAAY,GAAG,MAAM;CAWxE"}
1
+ {"version":3,"file":"unicodeValidator.d.ts","sourceRoot":"","sources":["../../../src/security/validators/unicodeValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;CACnD;AAED,qBAAa,gBAAgB;IAC3B;;OAEG;IAEH;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAmC;IAEnF;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAyC;IAEjF;;;;;OAKG;IAEH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAwE;IAEnH;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CA2BxC;IAEH;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CASrC;IAEF;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,uBAAuB;IAwG1D;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,wBAAwB;IA2CvC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAcjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAqBjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAW/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAI1B;;OAEG;IACH,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQzD;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAKzC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IA2BrC;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,MAAY,GAAG,MAAM;CAWxE"}
@@ -240,11 +240,12 @@ export class UnicodeValidator {
240
240
  }
241
241
  // Consider it suspicious if:
242
242
  // 1. More than 3 scripts are mixed (legitimate text rarely mixes >3 scripts)
243
- // 2. Content contains Latin + dangerous confusable scripts (Cyrillic/Greek - common attack pattern)
243
+ // 2. Content contains Latin + Cyrillic (homoglyph attack Cyrillic а/о/р look identical to Latin)
244
244
  // Note: Latin + CJK is common and legitimate (e.g., Chinese with English)
245
+ // Note: Latin + Greek is common and legitimate (e.g., α, β, γ, π, Σ, Δ in math/science)
245
246
  const isSuspicious = detectedScripts.length > 3 ||
246
247
  (detectedScripts.includes('LATIN') && detectedScripts.length > 1 &&
247
- (detectedScripts.includes('CYRILLIC') || detectedScripts.includes('GREEK')));
248
+ detectedScripts.includes('CYRILLIC'));
248
249
  return { isSuspicious, scripts: detectedScripts };
249
250
  }
250
251
  /**
@@ -323,4 +324,4 @@ export class UnicodeValidator {
323
324
  cleaned;
324
325
  }
325
326
  }
326
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pY29kZVZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFTeEQsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQjs7T0FFRztJQUVIOzs7OztPQUtHO0lBQ0ssTUFBTSxDQUFVLHdCQUF3QixHQUFHLCtCQUErQixDQUFDO0lBRW5GOzs7OztPQUtHO0lBQ0ssTUFBTSxDQUFVLGdCQUFnQixHQUFHLHFDQUFxQyxDQUFDO0lBRWpGOzs7OztPQUtHO0lBQ0gsOEdBQThHO0lBQ3RHLE1BQU0sQ0FBVSxtQkFBbUIsR0FBRyxvRUFBb0UsQ0FBQyxDQUFDLGdGQUFnRjtJQUVwTTs7O09BR0c7SUFDSyxNQUFNLENBQVUsbUJBQW1CLEdBQXdCLElBQUksR0FBRyxDQUFDO1FBQ3pFLG9CQUFvQjtRQUNwQixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDbEYsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQ2xGLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUUxRCxpQkFBaUI7UUFDakIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQ2xGLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUNuRixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDbEYsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBRXBDLGlEQUFpRDtRQUNqRCxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7UUFDaFYsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1FBRWhWLHFDQUFxQztRQUNyQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFFOUMsMkJBQTJCO1FBQzNCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUN0RSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFFNUQsdUJBQXVCO1FBQ3ZCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUN0VCxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxH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LE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLFFBQVEsR0FBRyxNQUFNLElBQUksUUFBUSxHQUFHLE1BQU0sRUFBRSxDQUFDO29CQUMzQyxPQUFPLElBQUksQ0FBQyxDQUFDLCtDQUErQztnQkFDOUQsQ0FBQztnQkFDRCxDQUFDLEVBQUUsQ0FBQyxDQUFDLCtCQUErQjtZQUN0QyxDQUFDO1lBQ0QsaUVBQWlFO2lCQUM1RCxJQUFJLElBQUksSUFBSSxNQUFNLElBQUksSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUMxQyxPQUFPLElBQUksQ0FBQyxDQUFDLHlCQUF5QjtZQUN4QyxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFlLEVBQUUsWUFBb0IsR0FBRztRQUM1RCxvRUFBb0U7UUFDcEUsTUFBTSxPQUFPLEdBQUcsT0FBTzthQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLE9BQU8sQ0FBQzthQUMvQyxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQzthQUN0QyxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTdDLE9BQU8sT0FBTyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQztZQUNqQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztZQUN6QyxPQUFPLENBQUM7SUFDWixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVbmljb2RlIFZhbGlkYXRvciBmb3IgRG9sbGhvdXNlTUNQXG4gKiBcbiAqIFByZXZlbnRzIFVuaWNvZGUtYmFzZWQgYnlwYXNzIGF0dGFja3MgaW5jbHVkaW5nOlxuICogLSBIb21vZ3JhcGggYXR0YWNrcyAodmlzdWFsbHkgc2ltaWxhciBjaGFyYWN0ZXJzKVxuICogLSBEaXJlY3Rpb24gb3ZlcnJpZGUgYXR0YWNrcyAoUkxPL0xSTylcbiAqIC0gTWl4ZWQgc2NyaXB0IGF0dGFja3NcbiAqIC0gWmVyby13aWR0aCBjaGFyYWN0ZXIgaW5qZWN0aW9uXG4gKiAtIFVuaWNvZGUgbm9ybWFsaXphdGlvbiBieXBhc3Nlc1xuICogXG4gKiBTZWN1cml0eTogU0VDLTAwMSAtIFVuaWNvZGUgYXR0YWNrIHByZXZlbnRpb25cbiAqL1xuXG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi9zZWN1cml0eU1vbml0b3IuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVuaWNvZGVWYWxpZGF0aW9uUmVzdWx0IHtcbiAgaXNWYWxpZDogYm9vbGVhbjtcbiAgbm9ybWFsaXplZENvbnRlbnQ6IHN0cmluZztcbiAgZGV0ZWN0ZWRJc3N1ZXM/OiBzdHJpbmdbXTtcbiAgc2V2ZXJpdHk/OiAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnIHwgJ2NyaXRpY2FsJztcbn1cblxuZXhwb3J0IGNsYXNzIFVuaWNvZGVWYWxpZGF0b3Ige1xuICAvKipcbiAgICogVW5pY29kZSBhdHRhY2sgcGF0dGVybnMgYW5kIGNvbmZ1c2FibGUgY2hhcmFjdGVyc1xuICAgKi9cbiAgXG4gIC8qKlxuICAgKiBEaXJlY3Rpb24gb3ZlcnJpZGUgY2hhcmFjdGVycyB0aGF0IGNhbiBoaWRlIG9yIHJldmVyc2UgdGV4dCBkaXNwbGF5XG4gICAqIEBzZWUgaHR0cHM6Ly91bmljb2RlLm9yZy9yZXBvcnRzL3RyOS8jRGlyZWN0aW9uYWxfRm9ybWF0dGluZ19DaGFyYWN0ZXJzXG4gICAqIFUrMjAyQS1VKzIwMkU6IExlZnQvUmlnaHQgZW1iZWRkaW5nIGFuZCBvdmVycmlkZSBtYXJrcyAoTFJFLCBSTEUsIFBERiwgTFJPLCBSTE8pXG4gICAqIFUrMjA2Ni1VKzIwNjk6IElzb2xhdGUgZm9ybWF0dGluZyBjaGFyYWN0ZXJzIChMUkksIFJMSSwgRlNJLCBQREkpXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBESVJFQ1RJT05fT1ZFUlJJREVfQ0hBUlMgPSAvW1xcdTIwMkEtXFx1MjAyRVxcdTIwNjYtXFx1MjA2OV0vZztcbiAgXG4gIC8qKlxuICAgKiBaZXJvLXdpZHRoIGFuZCBpbnZpc2libGUgZm9ybWF0dGluZyBjaGFyYWN0ZXJzIG9mdGVuIHVzZWQgdG8gaGlkZSBwYXlsb2Fkc1xuICAgKiBVKzIwMEItVSsyMDBGOiBaZXJvLXdpZHRoIHNwYWNlcyBhbmQgZGlyZWN0aW9uYWwgbWFya3NcbiAgICogVSsyMDI4LVUrMjAyRjogTGluZS9wYXJhZ3JhcGggc2VwYXJhdG9ycyBhbmQgZm9ybWF0dGluZyBjaGFyYWN0ZXJzXG4gICAqIFUrRkVGRjogWmVyby13aWR0aCBuby1icmVhayBzcGFjZSAoQnl0ZSBPcmRlciBNYXJrKVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgWkVST19XSURUSF9DSEFSUyA9IC9bXFx1MjAwQi1cXHUyMDBGXFx1MjAyOC1cXHUyMDJGXFx1RkVGRl0vZztcbiAgXG4gIC8qKlxuICAgKiBOb24tcHJpbnRhYmxlIGNvbnRyb2wgY2hhcmFjdGVycyB0aGF0IHNob3VsZCBub3QgYXBwZWFyIGluIG5vcm1hbCB0ZXh0XG4gICAqIFUrMDAwMC1VKzAwMDgsIFUrMDAwQi1VKzAwMEMsIFUrMDAwRS1VKzAwMUY6IEMwIGNvbnRyb2wgY29kZXMgKGV4Y2VwdCBUQUIsIExGLCBDUilcbiAgICogVSswMDdGLVUrMDA5RjogRGVsZXRlIGFuZCBDMSBjb250cm9sIGNvZGVzXG4gICAqIFUrRkZGRS1VK0ZGRkY6IE5vbi1jaGFyYWN0ZXJzIHRoYXQgc2hvdWxkIG5ldmVyIGFwcGVhciBpbiB2YWxpZCB0ZXh0XG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleCAtLSBJbnRlbnRpb25hbGx5IG1hdGNoaW5nIGNvbnRyb2wgY2hhcnMgZm9yIHNlY3VyaXR5IHNhbml0aXphdGlvblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBOT05fUFJJTlRBQkxFX0NIQVJTID0gL1tcXHUwMDAwLVxcdTAwMDhcXHUwMDBCXFx1MDAwQ1xcdTAwMEUtXFx1MDAxRlxcdTAwN0YtXFx1MDA5RlxcdUZGRkVcXHVGRkZGXS9nOyAvLyBOT1NPTkFSIC0gSW50ZW50aW9uYWxseSBtYXRjaGluZyBjb250cm9sIGNoYXJhY3RlcnMgZm9yIHNlY3VyaXR5IHNhbml0aXphdGlvblxuICBcbiAgLyoqXG4gICAqIENvbW1vbiBob21vZ3JhcGgvY29uZnVzYWJsZSBjaGFyYWN0ZXIgbWFwcGluZ3NcbiAgICogTWFwcyB2aXN1YWxseSBzaW1pbGFyIFVuaWNvZGUgY2hhcmFjdGVycyB0byB0aGVpciBBU0NJSSBlcXVpdmFsZW50c1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQ09ORlVTQUJMRV9NQVBQSU5HUzogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoW1xuICAgIC8vIEN5cmlsbGljIHRvIExhdGluXG4gICAgWyfQsCcsICdhJ10sIFsn0LUnLCAnZSddLCBbJ9C+JywgJ28nXSwgWyfRgCcsICdwJ10sIFsn0YEnLCAnYyddLCBbJ9GFJywgJ3gnXSwgWyfRgycsICd5J10sXG4gICAgWyfQkCcsICdBJ10sIFsn0JInLCAnQiddLCBbJ9CVJywgJ0UnXSwgWyfQmicsICdLJ10sIFsn0JwnLCAnTSddLCBbJ9CdJywgJ0gnXSwgWyfQnicsICdPJ10sIFxuICAgIFsn0KAnLCAnUCddLCBbJ9ChJywgJ0MnXSwgWyfQoicsICdUJ10sIFsn0KMnLCAnWSddLCBbJ9ClJywgJ1gnXSxcbiAgICBcbiAgICAvLyBHcmVlayB0byBMYXRpblxuICAgIFsnzrEnLCAnYSddLCBbJ86yJywgJ2InXSwgWyfOsycsICdnJ10sIFsnzrQnLCAnZCddLCBbJ861JywgJ2UnXSwgWyfOticsICd6J10sIFsnzrcnLCAnaCddLFxuICAgIFsnzrgnLCAndGgnXSwgWyfOuScsICdpJ10sIFsnzronLCAnayddLCBbJ867JywgJ2wnXSwgWyfOvCcsICdtJ10sIFsnzr0nLCAnbiddLCBbJ86+JywgJ3gnXSxcbiAgICBbJ86/JywgJ28nXSwgWyfPgCcsICdwJ10sIFsnz4EnLCAnciddLCBbJ8+DJywgJ3MnXSwgWyfPhCcsICd0J10sIFsnz4UnLCAndSddLCBbJ8+GJywgJ2YnXSxcbiAgICBbJ8+HJywgJ2NoJ10sIFsnz4gnLCAncHMnXSwgWyfPiScsICd3J10sXG4gICAgXG4gICAgLy8gTWF0aGVtYXRpY2FsIHN5bWJvbHMgdG8gQVNDSUkgKHZhcmlvdXMgc3R5bGVzKVxuICAgIFsn8J2SgicsICdhJ10sIFsn8J2SgycsICdiJ10sIFsn8J2ShCcsICdjJ10sIFsn8J2ShScsICdkJ10sIFsn8J2ShicsICdlJ10sIFsn8J2ShycsICdmJ10sIFsn8J2SiCcsICdnJ10sIFsn8J2SiScsICdoJ10sIFsn8J2SiicsICdpJ10sIFsn8J2SiycsICdqJ10sIFsn8J2SjCcsICdrJ10sIFsn8J2SjScsICdsJ10sIFsn8J2SjicsICdtJ10sIFsn8J2SjycsICduJ10sIFsn8J2SkCcsICdvJ10sIFsn8J2SkScsICdwJ10sIFsn8J2SkicsICdxJ10sIFsn8J2SkycsICdyJ10sIFsn8J2SlCcsICdzJ10sIFsn8J2SlScsICd0J10sIFsn8J2SlicsICd1J10sIFsn8J2SlycsICd2J10sIFsn8J2SmCcsICd3J10sIFsn8J2SmScsICd4J10sIFsn8J2SmicsICd5J10sIFsn8J2SmycsICd6J10sXG4gICAgWyfwnZCaJywgJ2EnXSwgWyfwnZCbJywgJ2InXSwgWyfwnZCcJywgJ2MnXSwgWyfwnZCdJywgJ2QnXSwgWyfwnZCeJywgJ2UnXSwgWyfwnZCfJywgJ2YnXSwgWyfwnZCgJywgJ2cnXSwgWyfwnZChJywgJ2gnXSwgWyfwnZCiJywgJ2knXSwgWyfwnZCjJywgJ2onXSwgWyfwnZCkJywgJ2snXSwgWyfwnZClJywgJ2wnXSwgWyfwnZCmJywgJ20nXSwgWyfwnZCnJywgJ24nXSwgWyfwnZCoJywgJ28nXSwgWyfwnZCpJywgJ3AnXSwgWyfwnZCqJywgJ3EnXSwgWyfwnZCrJywgJ3InXSwgWyfwnZCsJywgJ3MnXSwgWyfwnZCtJywgJ3QnXSwgWyfwnZCuJywgJ3UnXSwgWyfwnZCvJywgJ3YnXSwgWyfwnZCwJywgJ3cnXSwgWyfwnZCxJywgJ3gnXSwgWyfwnZCyJywgJ3knXSwgWyfwnZCzJywgJ3onXSxcbiAgICBcbiAgICAvLyBTcGVjaWFsIGkgdmFyaWFudHMgKFR1cmtpc2gsIGV0Yy4pXG4gICAgWyfEsScsICdpJ10sIFsnxLAnLCAnSSddLCBbJ9GWJywgJ2knXSwgWyfTgCcsICdJJ10sXG4gICAgXG4gICAgLy8gT3RoZXIgY29tbW9uIGNvbmZ1c2FibGVzXG4gICAgWyfHnScsICdlJ10sIFsnyZAnLCAnYSddLCBbJ8mUJywgJ28nXSwgWyfKhycsICd0J10sIFsnyownLCAndiddLCBbJ8qNJywgJ3cnXSxcbiAgICBbJ+KEgycsICdDJ10sIFsn4oSJJywgJ0YnXSwgWyfihJYnLCAnTm8nXSwgWyfihKInLCAnVE0nXSwgWyfCricsICdSJ10sXG4gICAgXG4gICAgLy8gRnVsbHdpZHRoIGNoYXJhY3RlcnNcbiAgICBbJ++8oScsICdBJ10sIFsn77yiJywgJ0InXSwgWyfvvKMnLCAnQyddLCBbJ++8pCcsICdEJ10sIFsn77ylJywgJ0UnXSwgWyfvvKYnLCAnRiddLCBbJ++8pycsICdHJ10sIFsn77yoJywgJ0gnXSwgWyfvvKknLCAnSSddLCBbJ++8qicsICdKJ10sIFsn77yrJywgJ0snXSwgWyfvvKwnLCAnTCddLCBbJ++8rScsICdNJ10sIFsn77yuJywgJ04nXSwgWyfvvK8nLCAnTyddLCBbJ++8sCcsICdQJ10sIFsn77yxJywgJ1EnXSwgWyfvvLInLCAnUiddLCBbJ++8sycsICdTJ10sIFsn77y0JywgJ1QnXSwgWyfvvLUnLCAnVSddLCBbJ++8ticsICdWJ10sIFsn77y3JywgJ1cnXSwgWyfvvLgnLCAnWCddLCBbJ++8uScsICdZJ10sIFsn77y6JywgJ1onXSxcbiAgICBbJ++9gScsICdhJ10sIFsn772CJywgJ2InXSwgWyfvvYMnLCAnYyddLCBbJ++9hCcsICdkJ10sIFsn772FJywgJ2UnXSwgWyfvvYYnLCAnZiddLCBbJ++9hycsICdnJ10sIFsn772IJywgJ2gnXSwgWyfvvYknLCAnaSddLCBbJ++9iicsICdqJ10sIFsn772LJywgJ2snXSwgWyfvvYwnLCAnbCddLCBbJ++9jScsICdtJ10sIFsn772OJywgJ24nXSwgWyfvvY8nLCAnbyddLCBbJ++9kCcsICdwJ10sIFsn772RJywgJ3EnXSwgWyfvvZInLCAnciddLCBbJ++9kycsICdzJ10sIFsn772UJywgJ3QnXSwgWyfvvZUnLCAndSddLCBbJ++9licsICd2J10sIFsn772XJywgJ3cnXSwgWyfvvZgnLCAneCddLCBbJ++9mScsICd5J10sIFsn772aJywgJ3onXSxcbiAgICBbJ++8kCcsICcwJ10sIFsn77yRJywgJzEnXSwgWyfvvJInLCAnMiddLCBbJ++8kycsICczJ10sIFsn77yUJywgJzQnXSwgWyfvvJUnLCAnNSddLCBbJ++8licsICc2J10sIFsn77yXJywgJzcnXSwgWyfvvJgnLCAnOCddLCBbJ++8mScsICc5J10sXG4gIF0pO1xuXG4gIC8qKlxuICAgKiBTY3JpcHQgbWl4aW5nIGRldGVjdGlvbiBwYXR0ZXJuc1xuICAgKiBEZXRlY3RzIHN1c3BpY2lvdXMgbWl4aW5nIG9mIGRpZmZlcmVudCBVbmljb2RlIHNjcmlwdHNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFNDUklQVF9QQVRURVJOUyA9IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleCAtLSBJbnRlbnRpb25hbGx5IGluY2x1ZGVzIGNvbnRyb2wgY2hhcnMgZm9yIGNvbXByZWhlbnNpdmUgTGF0aW4gc2NyaXB0IGRldGVjdGlvblxuICAgIExBVElOOiAvW1xcdTAwMDAtXFx1MDA3RlxcdTAwQTAtXFx1MDBGRlxcdTAxMDAtXFx1MDE3RlxcdTAxODAtXFx1MDI0Rl0vLCAvLyBOT1NPTkFSIC0gSW50ZW50aW9uYWxseSBpbmNsdWRlcyBjb250cm9sIGNoYXJhY3RlcnMgZm9yIGNvbXByZWhlbnNpdmUgTGF0aW4gc2NyaXB0IGRldGVjdGlvblxuICAgIC8vIFVzZSBhbHRlcm5hdGlvbiB0byBhdm9pZCBTb25hckNsb3VkIHRoaW5raW5nIFxcdTA1MkZcXHUyREUwIGlzIGEgY29tYmluZWQgY2hhcmFjdGVyXG4gICAgQ1lSSUxMSUM6IC8oPzpbXFx1MDQwMC1cXHUwNEZGXXxbXFx1MDUwMC1cXHUwNTJGXXxbXFx1MkRFMC1cXHUyREZGXXxbXFx1QTY0MC1cXHVBNjlGXSkvLFxuICAgIEdSRUVLOiAvW1xcdTAzNzAtXFx1MDNGRlxcdTFGMDAtXFx1MUZGRl0vLFxuICAgIEFSQUJJQzogL1tcXHUwNjAwLVxcdTA2RkZcXHUwNzUwLVxcdTA3N0ZcXHUwOEEwLVxcdTA4RkZcXHVGQjUwLVxcdUZERkZcXHVGRTcwLVxcdUZFRkZdLyxcbiAgICBIRUJSRVc6IC9bXFx1MDU5MC1cXHUwNUZGXFx1RkIxRC1cXHVGQjRGXS8sXG4gICAgQ0pLOiAvW1xcdTJFODAtXFx1MkVGRlxcdTJGMDAtXFx1MkZERlxcdTMwMDAtXFx1MzAzRlxcdTMwNDAtXFx1MzA5RlxcdTMwQTAtXFx1MzBGRlxcdTMxMDAtXFx1MzEyRlxcdTMxMzAtXFx1MzE4RlxcdTMxOTAtXFx1MzE5RlxcdTMxQTAtXFx1MzFCRlxcdTMxQzAtXFx1MzFFRlxcdTMxRjAtXFx1MzFGRlxcdTMyMDAtXFx1MzJGRlxcdTMzMDAtXFx1MzNGRlxcdTM0MDAtXFx1NERCRlxcdTREQzAtXFx1NERGRlxcdTRFMDAtXFx1OUZGRl0vLFxuICB9O1xuXG4gIC8qKlxuICAgKiBOb3JtYWxpemUgVW5pY29kZSBjb250ZW50IHRvIHByZXZlbnQgYnlwYXNzIGF0dGFja3NcbiAgICovXG4gIHN0YXRpYyBub3JtYWxpemUoY29udGVudDogc3RyaW5nKTogVW5pY29kZVZhbGlkYXRpb25SZXN1bHQge1xuICAgIGNvbnN0IGlzc3Vlczogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgbm9ybWFsaXplZCA9IGNvbnRlbnQ7XG4gICAgbGV0IHNldmVyaXR5OiAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnIHwgJ2NyaXRpY2FsJyA9ICdsb3cnO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIDEuIERldGVjdCBhbmQgbG9nIHN1c3BpY2lvdXMgVW5pY29kZSBwYXR0ZXJucyBiZWZvcmUgbm9ybWFsaXphdGlvblxuICAgICAgY29uc3Qgc3VzcGljaW91c1BhdHRlcm5zID0gdGhpcy5kZXRlY3RTdXNwaWNpb3VzUGF0dGVybnMoY29udGVudCk7XG4gICAgICBpc3N1ZXMucHVzaCguLi5zdXNwaWNpb3VzUGF0dGVybnMuaXNzdWVzKTtcbiAgICAgIGlmIChzdXNwaWNpb3VzUGF0dGVybnMuc2V2ZXJpdHkpIHtcbiAgICAgICAgc2V2ZXJpdHkgPSB0aGlzLmVzY2FsYXRlU2V2ZXJpdHkoc2V2ZXJpdHksIHN1c3BpY2lvdXNQYXR0ZXJucy5zZXZlcml0eSk7XG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFJlbW92ZSBkaXJlY3Rpb24gb3ZlcnJpZGUgY2hhcmFjdGVycyAocHJldmVudHMgUkxPL0xSTyBhdHRhY2tzKVxuICAgICAgaWYgKHRoaXMuRElSRUNUSU9OX09WRVJSSURFX0NIQVJTLnRlc3Qobm9ybWFsaXplZCkpIHtcbiAgICAgICAgaXNzdWVzLnB1c2goJ0RpcmVjdGlvbiBvdmVycmlkZSBjaGFyYWN0ZXJzIGRldGVjdGVkJyk7XG4gICAgICAgIHNldmVyaXR5ID0gdGhpcy5lc2NhbGF0ZVNldmVyaXR5KHNldmVyaXR5LCAnaGlnaCcpO1xuICAgICAgICBub3JtYWxpemVkID0gbm9ybWFsaXplZC5yZXBsYWNlKHRoaXMuRElSRUNUSU9OX09WRVJSSURFX0NIQVJTLCAnJyk7XG4gICAgICAgIFxuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ1VOSUNPREVfRElSRUNUSU9OX09WRVJSSURFJyxcbiAgICAgICAgICBzZXZlcml0eTogJ0hJR0gnLFxuICAgICAgICAgIHNvdXJjZTogJ1VuaWNvZGVWYWxpZGF0b3InLFxuICAgICAgICAgIGRldGFpbHM6ICdEaXJlY3Rpb24gb3ZlcnJpZGUgY2hhcmFjdGVycyByZW1vdmVkIGZyb20gY29udGVudCdcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIDMuIFJlbW92ZSB6ZXJvLXdpZHRoIGFuZCBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnNcbiAgICAgIGlmICh0aGlzLlpFUk9fV0lEVEhfQ0hBUlMudGVzdChub3JtYWxpemVkKSB8fCB0aGlzLk5PTl9QUklOVEFCTEVfQ0hBUlMudGVzdChub3JtYWxpemVkKSkge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgemVyby13aWR0aCBjaGFycyBpbmNsdWRlIGRpcmVjdGlvbiBtYXJrcyAoVSsyMDBFLCBVKzIwMEYpXG4gICAgICAgIGNvbnN0IGhhc0RpcmVjdGlvbk1hcmtzID0gL1tcXHUyMDBFXFx1MjAwRl0vLnRlc3Qobm9ybWFsaXplZCk7XG4gICAgICAgIGlmIChoYXNEaXJlY3Rpb25NYXJrcykge1xuICAgICAgICAgIGlzc3Vlcy5wdXNoKCdEaXJlY3Rpb24gbWFya3MgKExSTS9STE0pIGRldGVjdGVkJyk7XG4gICAgICAgICAgc2V2ZXJpdHkgPSB0aGlzLmVzY2FsYXRlU2V2ZXJpdHkoc2V2ZXJpdHksICdoaWdoJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXNzdWVzLnB1c2goJ1plcm8td2lkdGggb3Igbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIGRldGVjdGVkJyk7XG4gICAgICAgICAgc2V2ZXJpdHkgPSB0aGlzLmVzY2FsYXRlU2V2ZXJpdHkoc2V2ZXJpdHksICdtZWRpdW0nKTtcbiAgICAgICAgfVxuICAgICAgICBub3JtYWxpemVkID0gbm9ybWFsaXplZFxuICAgICAgICAgIC5yZXBsYWNlKHRoaXMuWkVST19XSURUSF9DSEFSUywgJycpXG4gICAgICAgICAgLnJlcGxhY2UodGhpcy5OT05fUFJJTlRBQkxFX0NIQVJTLCAnJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIEFwcGx5IFVuaWNvZGUgbm9ybWFsaXphdGlvbiAoTkZDIC0gQ2Fub25pY2FsIERlY29tcG9zaXRpb24gKyBDb21wb3NpdGlvbilcbiAgICAgIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVkLm5vcm1hbGl6ZSgnTkZDJyk7XG5cbiAgICAgIC8vIDUuIERldGVjdCBtaXhlZCBzY3JpcHQgYXR0YWNrcyBCRUZPUkUgY29uZnVzYWJsZSByZXBsYWNlbWVudFxuICAgICAgY29uc3QgbWl4ZWRTY3JpcHRSZXN1bHQgPSB0aGlzLmRldGVjdE1peGVkU2NyaXB0cyhub3JtYWxpemVkKTtcbiAgICAgIGlmIChtaXhlZFNjcmlwdFJlc3VsdC5pc1N1c3BpY2lvdXMpIHtcbiAgICAgICAgaXNzdWVzLnB1c2goYE1peGVkIHNjcmlwdCB1c2FnZSBkZXRlY3RlZDogJHttaXhlZFNjcmlwdFJlc3VsdC5zY3JpcHRzLmpvaW4oJywgJyl9YCk7XG4gICAgICAgIHNldmVyaXR5ID0gdGhpcy5lc2NhbGF0ZVNldmVyaXR5KHNldmVyaXR5LCAnaGlnaCcpO1xuICAgICAgICBcbiAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgIHR5cGU6ICdVTklDT0RFX01JWEVEX1NDUklQVCcsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdISUdIJyxcbiAgICAgICAgICBzb3VyY2U6ICdVbmljb2RlVmFsaWRhdG9yJyxcbiAgICAgICAgICBkZXRhaWxzOiBgTWl4ZWQgc2NyaXB0cyBkZXRlY3RlZDogJHttaXhlZFNjcmlwdFJlc3VsdC5zY3JpcHRzLmpvaW4oJywgJyl9YFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gNi4gQWx3YXlzIHJlcGxhY2UgY29uZnVzYWJsZSBjaGFyYWN0ZXJzIHdpdGggQVNDSUkgZXF1aXZhbGVudHMgZm9yIHNlY3VyaXR5XG4gICAgICAvLyBUaGlzIHByZXZlbnRzIGhvbW9ncmFwaCBhdHRhY2tzIHJlZ2FyZGxlc3Mgb2Ygc2NyaXB0IG1peGluZ1xuICAgICAgY29uc3QgY29uZnVzYWJsZVJlc3VsdCA9IHRoaXMucmVwbGFjZUNvbmZ1c2FibGVzKG5vcm1hbGl6ZWQpO1xuICAgICAgaWYgKGNvbmZ1c2FibGVSZXN1bHQuaGFzQ29uZnVzYWJsZXMpIHtcbiAgICAgICAgbm9ybWFsaXplZCA9IGNvbmZ1c2FibGVSZXN1bHQubm9ybWFsaXplZDtcbiAgICAgICAgaXNzdWVzLnB1c2goJ0NvbmZ1c2FibGUgVW5pY29kZSBjaGFyYWN0ZXJzIGRldGVjdGVkIGFuZCBub3JtYWxpemVkJyk7XG4gICAgICAgIHNldmVyaXR5ID0gdGhpcy5lc2NhbGF0ZVNldmVyaXR5KHNldmVyaXR5LCAnbWVkaXVtJyk7XG4gICAgICAgIFxuICAgICAgICAvLyBMb2cgaWYgdGhpcyBoYXBwZW5zIGluIGxlZ2l0aW1hdGUgbXVsdGlsaW5ndWFsIGNvbnRleHRcbiAgICAgICAgaWYgKCFtaXhlZFNjcmlwdFJlc3VsdC5pc1N1c3BpY2lvdXMpIHtcbiAgICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgICB0eXBlOiAnVU5JQ09ERV9WQUxJREFUSU9OX0VSUk9SJyxcbiAgICAgICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgICAgIHNvdXJjZTogJ1VuaWNvZGVWYWxpZGF0b3InLFxuICAgICAgICAgICAgZGV0YWlsczogJ0NvbmZ1c2FibGUgY2hhcmFjdGVycyBub3JtYWxpemVkIGluIGxlZ2l0aW1hdGUgbXVsdGlsaW5ndWFsIGNvbnRlbnQnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNWYWxpZDogaXNzdWVzLmxlbmd0aCA9PT0gMCxcbiAgICAgICAgbm9ybWFsaXplZENvbnRlbnQ6IG5vcm1hbGl6ZWQsXG4gICAgICAgIGRldGVjdGVkSXNzdWVzOiBpc3N1ZXMubGVuZ3RoID4gMCA/IGlzc3VlcyA6IHVuZGVmaW5lZCxcbiAgICAgICAgc2V2ZXJpdHk6IGlzc3Vlcy5sZW5ndGggPiAwID8gc2V2ZXJpdHkgOiB1bmRlZmluZWRcbiAgICAgIH07XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnVU5JQ09ERV9WQUxJREFUSU9OX0VSUk9SJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdISUdIJyxcbiAgICAgICAgc291cmNlOiAnVW5pY29kZVZhbGlkYXRvcicsXG4gICAgICAgIGRldGFpbHM6IGBVbmljb2RlIHZhbGlkYXRpb24gZmFpbGVkOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gXG4gICAgICB9KTtcblxuICAgICAgLy8gRmFsbGJhY2s6IHJldHVybiBvcmlnaW5hbCBjb250ZW50IGlmIG5vcm1hbGl6YXRpb24gZmFpbHNcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICBub3JtYWxpemVkQ29udGVudDogY29udGVudCxcbiAgICAgICAgZGV0ZWN0ZWRJc3N1ZXM6IFsnVW5pY29kZSB2YWxpZGF0aW9uIGZhaWxlZCddLFxuICAgICAgICBzZXZlcml0eTogJ2hpZ2gnXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlY3Qgc3VzcGljaW91cyBVbmljb2RlIHBhdHRlcm5zIHRoYXQgbWlnaHQgaW5kaWNhdGUgYXR0YWNrc1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZGV0ZWN0U3VzcGljaW91c1BhdHRlcm5zKGNvbnRlbnQ6IHN0cmluZyk6IHsgaXNzdWVzOiBzdHJpbmdbXTsgc2V2ZXJpdHk/OiAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnIHwgJ2NyaXRpY2FsJyB9IHtcbiAgICBjb25zdCBpc3N1ZXM6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IHNldmVyaXR5OiAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnIHwgJ2NyaXRpY2FsJyB8IHVuZGVmaW5lZDtcblxuICAgIC8vIENoZWNrIGZvciBleGNlc3NpdmUgVW5pY29kZSBlc2NhcGVzIChwb3NzaWJsZSBlbmNvZGluZyBieXBhc3MpXG4gICAgLyoqXG4gICAgICogUGF0dGVybiB0byBtYXRjaCBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZXNcbiAgICAgKiBcXFxcdTogTGl0ZXJhbCBiYWNrc2xhc2ggZm9sbG93ZWQgYnkgJ3UnXG4gICAgICogWzAtOWEtZkEtRl17NH06IEV4YWN0bHkgNCBoZXhhZGVjaW1hbCBkaWdpdHNcbiAgICAgKiBVc2VkIHRvIGRldGVjdCBhdHRlbXB0cyB0byBieXBhc3MgZmlsdGVycyB1c2luZyBcXHUwMDYxZG1pbiBzdHlsZSBlbmNvZGluZ1xuICAgICAqL1xuICAgIGNvbnN0IHVuaWNvZGVFc2NhcGVQYXR0ZXJuID0gL1xcXFx1WzAtOWEtZkEtRl17NH0vZztcbiAgICBjb25zdCB1bmljb2RlRXNjYXBlcyA9IGNvbnRlbnQubWF0Y2godW5pY29kZUVzY2FwZVBhdHRlcm4pO1xuICAgIGlmICh1bmljb2RlRXNjYXBlcyAmJiB1bmljb2RlRXNjYXBlcy5sZW5ndGggPiAxMCkge1xuICAgICAgaXNzdWVzLnB1c2goYEV4Y2Vzc2l2ZSBVbmljb2RlIGVzY2FwZXMgZGV0ZWN0ZWQgKCR7dW5pY29kZUVzY2FwZXMubGVuZ3RofSlgKTtcbiAgICAgIHNldmVyaXR5ID0gJ2hpZ2gnO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBzdXNwaWNpb3VzIFVuaWNvZGUgcmFuZ2VzIHRoYXQgbWlnaHQgaGlkZSBjb250ZW50XG4gICAgY29uc3Qgc3VzcGljaW91c1JhbmdlcyA9IFtcbiAgICAgIHsgcmFuZ2U6IC9bXFx1RTAwMC1cXHVGOEZGXS9nLCBuYW1lOiAnUHJpdmF0ZSBVc2UgQXJlYScgfSxcbiAgICAgIC8vIE5vdGU6IFByb3Blcmx5IHBhaXJlZCBzdXJyb2dhdGUgcGFpcnMgW1xcdUQ4MDAtXFx1REZGRl0gYXJlIG5vcm1hbCBmb3IgZW1vamlzXG4gICAgICB7IHJhbmdlOiAvW1xcdUZERDAtXFx1RkRFRl0vZywgbmFtZTogJ05vbi1jaGFyYWN0ZXJzJyB9LFxuICAgICAgeyByYW5nZTogL1tcXHVGRkZFXFx1RkZGRl0vZywgbmFtZTogJ05vbi1jaGFyYWN0ZXJzJyB9XG4gICAgXTtcblxuICAgIGZvciAoY29uc3QgeyByYW5nZSwgbmFtZSB9IG9mIHN1c3BpY2lvdXNSYW5nZXMpIHtcbiAgICAgIGlmIChyYW5nZS50ZXN0KGNvbnRlbnQpKSB7XG4gICAgICAgIGlzc3Vlcy5wdXNoKGBTdXNwaWNpb3VzIFVuaWNvZGUgcmFuZ2UgZGV0ZWN0ZWQ6ICR7bmFtZX1gKTtcbiAgICAgICAgc2V2ZXJpdHkgPSB0aGlzLmVzY2FsYXRlU2V2ZXJpdHkoc2V2ZXJpdHksICdtZWRpdW0nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgbWFsZm9ybWVkIHN1cnJvZ2F0ZSBwYWlycyB1c2luZyBzYWZlIGNoYXJhY3Rlci1ieS1jaGFyYWN0ZXIgdmFsaWRhdGlvblxuICAgIC8vIFRoaXMgYXZvaWRzIFJlRG9TIHZ1bG5lcmFiaWxpdGllcyBmcm9tIGNvbXBsZXggcmVnZXggcGF0dGVybnNcbiAgICBpZiAodGhpcy5oYXNNYWxmb3JtZWRTdXJyb2dhdGVzKGNvbnRlbnQpKSB7XG4gICAgICBpc3N1ZXMucHVzaCgnTWFsZm9ybWVkIHN1cnJvZ2F0ZSBwYWlycyBkZXRlY3RlZCcpO1xuICAgICAgc2V2ZXJpdHkgPSB0aGlzLmVzY2FsYXRlU2V2ZXJpdHkoc2V2ZXJpdHksICdoaWdoJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgaXNzdWVzLCBzZXZlcml0eSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgY29uZnVzYWJsZSBVbmljb2RlIGNoYXJhY3RlcnMgd2l0aCBBU0NJSSBlcXVpdmFsZW50c1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVwbGFjZUNvbmZ1c2FibGVzKGNvbnRlbnQ6IHN0cmluZyk6IHsgbm9ybWFsaXplZDogc3RyaW5nOyBoYXNDb25mdXNhYmxlczogYm9vbGVhbiB9IHtcbiAgICBsZXQgbm9ybWFsaXplZCA9IGNvbnRlbnQ7XG4gICAgbGV0IGhhc0NvbmZ1c2FibGVzID0gZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IFtjb25mdXNhYmxlLCByZXBsYWNlbWVudF0gb2YgdGhpcy5DT05GVVNBQkxFX01BUFBJTkdTKSB7XG4gICAgICBpZiAobm9ybWFsaXplZC5pbmNsdWRlcyhjb25mdXNhYmxlKSkge1xuICAgICAgICBub3JtYWxpemVkID0gbm9ybWFsaXplZC5yZXBsYWNlKG5ldyBSZWdFeHAodGhpcy5lc2NhcGVSZWdleChjb25mdXNhYmxlKSwgJ2cnKSwgcmVwbGFjZW1lbnQpO1xuICAgICAgICBoYXNDb25mdXNhYmxlcyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgbm9ybWFsaXplZCwgaGFzQ29uZnVzYWJsZXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlY3Qgc3VzcGljaW91cyBtaXhpbmcgb2YgZGlmZmVyZW50IFVuaWNvZGUgc2NyaXB0c1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZGV0ZWN0TWl4ZWRTY3JpcHRzKGNvbnRlbnQ6IHN0cmluZyk6IHsgaXNTdXNwaWNpb3VzOiBib29sZWFuOyBzY3JpcHRzOiBzdHJpbmdbXSB9IHtcbiAgICBjb25zdCBkZXRlY3RlZFNjcmlwdHM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFtzY3JpcHROYW1lLCBwYXR0ZXJuXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLlNDUklQVF9QQVRURVJOUykpIHtcbiAgICAgIGlmIChwYXR0ZXJuLnRlc3QoY29udGVudCkpIHtcbiAgICAgICAgZGV0ZWN0ZWRTY3JpcHRzLnB1c2goc2NyaXB0TmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ29uc2lkZXIgaXQgc3VzcGljaW91cyBpZjpcbiAgICAvLyAxLiBNb3JlIHRoYW4gMyBzY3JpcHRzIGFyZSBtaXhlZCAobGVnaXRpbWF0ZSB0ZXh0IHJhcmVseSBtaXhlcyA+MyBzY3JpcHRzKVxuICAgIC8vIDIuIENvbnRlbnQgY29udGFpbnMgTGF0aW4gKyBkYW5nZXJvdXMgY29uZnVzYWJsZSBzY3JpcHRzIChDeXJpbGxpYy9HcmVlayAtIGNvbW1vbiBhdHRhY2sgcGF0dGVybilcbiAgICAvLyBOb3RlOiBMYXRpbiArIENKSyBpcyBjb21tb24gYW5kIGxlZ2l0aW1hdGUgKGUuZy4sIENoaW5lc2Ugd2l0aCBFbmdsaXNoKVxuICAgIGNvbnN0IGlzU3VzcGljaW91cyA9IGRldGVjdGVkU2NyaXB0cy5sZW5ndGggPiAzIHx8IFxuICAgICAgKGRldGVjdGVkU2NyaXB0cy5pbmNsdWRlcygnTEFUSU4nKSAmJiBkZXRlY3RlZFNjcmlwdHMubGVuZ3RoID4gMSAmJiBcbiAgICAgICAoZGV0ZWN0ZWRTY3JpcHRzLmluY2x1ZGVzKCdDWVJJTExJQycpIHx8IGRldGVjdGVkU2NyaXB0cy5pbmNsdWRlcygnR1JFRUsnKSkpO1xuXG4gICAgcmV0dXJuIHsgaXNTdXNwaWNpb3VzLCBzY3JpcHRzOiBkZXRlY3RlZFNjcmlwdHMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFc2NhbGF0ZSBzZXZlcml0eSBsZXZlbCAoaGlnaGVyIHNldmVyaXR5IHRha2VzIHByZWNlZGVuY2UpXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBlc2NhbGF0ZVNldmVyaXR5KFxuICAgIGN1cnJlbnQ6ICdsb3cnIHwgJ21lZGl1bScgfCAnaGlnaCcgfCAnY3JpdGljYWwnIHwgdW5kZWZpbmVkLCBcbiAgICBuZXdTZXZlcml0eTogJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJyB8ICdjcml0aWNhbCdcbiAgKTogJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJyB8ICdjcml0aWNhbCcge1xuICAgIGNvbnN0IHNldmVyaXR5TGV2ZWxzID0geyBsb3c6IDEsIG1lZGl1bTogMiwgaGlnaDogMywgY3JpdGljYWw6IDQgfTtcbiAgICBjb25zdCBjdXJyZW50TGV2ZWwgPSBjdXJyZW50ID8gc2V2ZXJpdHlMZXZlbHNbY3VycmVudF0gOiAwO1xuICAgIGNvbnN0IG5ld0xldmVsID0gc2V2ZXJpdHlMZXZlbHNbbmV3U2V2ZXJpdHldO1xuICAgIFxuICAgIHJldHVybiBuZXdMZXZlbCA+IGN1cnJlbnRMZXZlbCA/IG5ld1NldmVyaXR5IDogKGN1cnJlbnQgfHwgJ2xvdycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVzY2FwZSBzcGVjaWFsIHJlZ2V4IGNoYXJhY3RlcnMgZm9yIHNhZmUgcmVwbGFjZW1lbnRcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGVzY2FwZVJlZ2V4KHN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2VBbGwoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgY29udGVudCBjb250YWlucyBwb3RlbnRpYWxseSBkYW5nZXJvdXMgVW5pY29kZSBwYXR0ZXJuc1xuICAgKi9cbiAgc3RhdGljIGNvbnRhaW5zRGFuZ2Vyb3VzVW5pY29kZShjb250ZW50OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBRdWljayBjaGVjayBmb3Igb2J2aW91c2x5IGRhbmdlcm91cyBwYXR0ZXJuc1xuICAgIHJldHVybiB0aGlzLkRJUkVDVElPTl9PVkVSUklERV9DSEFSUy50ZXN0KGNvbnRlbnQpIHx8XG4gICAgICAgICAgIHRoaXMuWkVST19XSURUSF9DSEFSUy50ZXN0KGNvbnRlbnQpIHx8XG4gICAgICAgICAgIHRoaXMuTk9OX1BSSU5UQUJMRV9DSEFSUy50ZXN0KGNvbnRlbnQpIHx8XG4gICAgICAgICAgIHRoaXMuaGFzRXhjZXNzaXZlVW5pY29kZUVzY2FwZXMoY29udGVudCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgY29udGVudCBoYXMgZXhjZXNzaXZlIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlc1xuICAgKiBQcmV2ZW50cyBudWxsIHBvaW50ZXIgZXhjZXB0aW9uIGJ5IHNhZmVseSBjaGVja2luZyBtYXRjaCByZXN1bHRzXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBoYXNFeGNlc3NpdmVVbmljb2RlRXNjYXBlcyhjb250ZW50OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBtYXRjaGVzID0gY29udGVudC5tYXRjaCgvXFxcXHVbMC05YS1mQS1GXXs0fS9nKTtcbiAgICByZXR1cm4gbWF0Y2hlcyAhPT0gbnVsbCAmJiBtYXRjaGVzLmxlbmd0aCA+IDEwO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhZmVseSBjaGVjayBmb3IgbWFsZm9ybWVkIHN1cnJvZ2F0ZSBwYWlycyB3aXRob3V0IFJlRG9TIHZ1bG5lcmFiaWxpdHlcbiAgICogVXNlcyBjaGFyYWN0ZXItYnktY2hhcmFjdGVyIHZhbGlkYXRpb24gaW5zdGVhZCBvZiBjb21wbGV4IHJlZ2V4XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBoYXNNYWxmb3JtZWRTdXJyb2dhdGVzKGNvbnRlbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29udGVudC5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gU09OQVJDTE9VRCBGQUxTRSBQT1NJVElWRSAoUzc3NTgpOiBNdXN0IHVzZSBjaGFyQ29kZUF0IGhlcmUsIG5vdCBjb2RlUG9pbnRBdFxuICAgICAgLy8gVGhpcyBjb2RlIHNwZWNpZmljYWxseSBjaGVja3MgZm9yIG1hbGZvcm1lZCBzdXJyb2dhdGUgcGFpcnMgYXQgdGhlIDE2LWJpdCBjb2RlIHVuaXQgbGV2ZWwuXG4gICAgICAvLyBjb2RlUG9pbnRBdCgpIHdvdWxkIGF1dG9tYXRpY2FsbHkgY29tYmluZSB2YWxpZCBwYWlycywgbWFraW5nIG1hbGZvcm1lZCBkZXRlY3Rpb24gaW1wb3NzaWJsZS5cbiAgICAgIGNvbnN0IGNoYXIgPSBjb250ZW50LmNoYXJDb2RlQXQoaSk7XG5cbiAgICAgIC8vIEhpZ2ggc3Vycm9nYXRlIChVK0Q4MDAtVStEQkZGKVxuICAgICAgaWYgKGNoYXIgPj0gMHhEODAwICYmIGNoYXIgPD0gMHhEQkZGKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIGl0J3MgZm9sbG93ZWQgYnkgYSBsb3cgc3Vycm9nYXRlXG4gICAgICAgIGlmIChpICsgMSA+PSBjb250ZW50Lmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBIaWdoIHN1cnJvZ2F0ZSBhdCBlbmQgb2Ygc3RyaW5nXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV4dENoYXIgPSBjb250ZW50LmNoYXJDb2RlQXQoaSArIDEpO1xuICAgICAgICBpZiAobmV4dENoYXIgPCAweERDMDAgfHwgbmV4dENoYXIgPiAweERGRkYpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gSGlnaCBzdXJyb2dhdGUgbm90IGZvbGxvd2VkIGJ5IGxvdyBzdXJyb2dhdGVcbiAgICAgICAgfVxuICAgICAgICBpKys7IC8vIFNraXAgdGhlIHZhbGlkIGxvdyBzdXJyb2dhdGVcbiAgICAgIH1cbiAgICAgIC8vIExvdyBzdXJyb2dhdGUgKFUrREMwMC1VK0RGRkYpIHdpdGhvdXQgcHJlY2VkaW5nIGhpZ2ggc3Vycm9nYXRlXG4gICAgICBlbHNlIGlmIChjaGFyID49IDB4REMwMCAmJiBjaGFyIDw9IDB4REZGRikge1xuICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gVW5wYWlyZWQgbG93IHN1cnJvZ2F0ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNhZmUgcHJldmlldyBvZiBVbmljb2RlIGNvbnRlbnQgZm9yIGxvZ2dpbmdcbiAgICovXG4gIHN0YXRpYyBnZXRTYWZlUHJldmlldyhjb250ZW50OiBzdHJpbmcsIG1heExlbmd0aDogbnVtYmVyID0gMTAwKTogc3RyaW5nIHtcbiAgICAvLyBSZW1vdmUgZGFuZ2Vyb3VzIFVuaWNvZGUgY2hhcmFjdGVycyBhbmQgdHJ1bmNhdGUgZm9yIHNhZmUgbG9nZ2luZ1xuICAgIGNvbnN0IGNsZWFuZWQgPSBjb250ZW50XG4gICAgICAucmVwbGFjZSh0aGlzLkRJUkVDVElPTl9PVkVSUklERV9DSEFSUywgJ1tESVJdJylcbiAgICAgIC5yZXBsYWNlKHRoaXMuWkVST19XSURUSF9DSEFSUywgJ1taV10nKVxuICAgICAgLnJlcGxhY2UodGhpcy5OT05fUFJJTlRBQkxFX0NIQVJTLCAnW05QXScpO1xuICAgIFxuICAgIHJldHVybiBjbGVhbmVkLmxlbmd0aCA+IG1heExlbmd0aCA/IFxuICAgICAgY2xlYW5lZC5zdWJzdHJpbmcoMCwgbWF4TGVuZ3RoKSArICcuLi4nIDogXG4gICAgICBjbGVhbmVkO1xuICB9XG59XG4iXX0=
327
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pY29kZVZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFTeEQsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQjs7T0FFRztJQUVIOzs7OztPQUtHO0lBQ0ssTUFBTSxDQUFVLHdCQUF3QixHQUFHLCtCQUErQixDQUFDO0lBRW5GOzs7OztPQUtHO0lBQ0ssTUFBTSxDQUFVLGdCQUFnQixHQUFHLHFDQUFxQyxDQUFDO0lBRWpGOzs7OztPQUtHO0lBQ0gsOEdBQThHO0lBQ3RHLE1BQU0sQ0FBVSxtQkFBbUIsR0FBRyxvRUFBb0UsQ0FBQyxDQUFDLGdGQUFnRjtJQUVwTTs7O09BR0c7SUFDSyxNQUFNLENBQVUsbUJBQW1CLEdBQXdCLElBQUksR0FBRyxDQUFDO1FBQ3pFLG9CQUFvQjtRQUNwQixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDbEYsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQ2xGLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUUxRCxpQkFBaUI7UUFDakIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQ2xGLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUNuRixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDbEYsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBRXBDLGlEQUFpRDtRQUNqRCxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7UUFDaFYsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1FBRWhWLHFDQUFxQztRQUNyQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFFOUMsMkJBQTJCO1FBQzNCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUN0RSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFFNUQsdUJBQXVCO1FBQ3ZCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUN0VCxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxH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QUFDLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxRQUFRLEdBQUcsTUFBTSxJQUFJLFFBQVEsR0FBRyxNQUFNLEVBQUUsQ0FBQztvQkFDM0MsT0FBTyxJQUFJLENBQUMsQ0FBQywrQ0FBK0M7Z0JBQzlELENBQUM7Z0JBQ0QsQ0FBQyxFQUFFLENBQUMsQ0FBQywrQkFBK0I7WUFDdEMsQ0FBQztZQUNELGlFQUFpRTtpQkFDNUQsSUFBSSxJQUFJLElBQUksTUFBTSxJQUFJLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDMUMsT0FBTyxJQUFJLENBQUMsQ0FBQyx5QkFBeUI7WUFDeEMsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBZSxFQUFFLFlBQW9CLEdBQUc7UUFDNUQsb0VBQW9FO1FBQ3BFLE1BQU0sT0FBTyxHQUFHLE9BQU87YUFDcEIsT0FBTyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxPQUFPLENBQUM7YUFDL0MsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUM7YUFDdEMsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU3QyxPQUFPLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUM7WUFDakMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFDekMsT0FBTyxDQUFDO0lBQ1osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVW5pY29kZSBWYWxpZGF0b3IgZm9yIERvbGxob3VzZU1DUFxuICogXG4gKiBQcmV2ZW50cyBVbmljb2RlLWJhc2VkIGJ5cGFzcyBhdHRhY2tzIGluY2x1ZGluZzpcbiAqIC0gSG9tb2dyYXBoIGF0dGFja3MgKHZpc3VhbGx5IHNpbWlsYXIgY2hhcmFjdGVycylcbiAqIC0gRGlyZWN0aW9uIG92ZXJyaWRlIGF0dGFja3MgKFJMTy9MUk8pXG4gKiAtIE1peGVkIHNjcmlwdCBhdHRhY2tzXG4gKiAtIFplcm8td2lkdGggY2hhcmFjdGVyIGluamVjdGlvblxuICogLSBVbmljb2RlIG5vcm1hbGl6YXRpb24gYnlwYXNzZXNcbiAqIFxuICogU2VjdXJpdHk6IFNFQy0wMDEgLSBVbmljb2RlIGF0dGFjayBwcmV2ZW50aW9uXG4gKi9cblxuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHlNb25pdG9yLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBVbmljb2RlVmFsaWRhdGlvblJlc3VsdCB7XG4gIGlzVmFsaWQ6IGJvb2xlYW47XG4gIG5vcm1hbGl6ZWRDb250ZW50OiBzdHJpbmc7XG4gIGRldGVjdGVkSXNzdWVzPzogc3RyaW5nW107XG4gIHNldmVyaXR5PzogJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJyB8ICdjcml0aWNhbCc7XG59XG5cbmV4cG9ydCBjbGFzcyBVbmljb2RlVmFsaWRhdG9yIHtcbiAgLyoqXG4gICAqIFVuaWNvZGUgYXR0YWNrIHBhdHRlcm5zIGFuZCBjb25mdXNhYmxlIGNoYXJhY3RlcnNcbiAgICovXG4gIFxuICAvKipcbiAgICogRGlyZWN0aW9uIG92ZXJyaWRlIGNoYXJhY3RlcnMgdGhhdCBjYW4gaGlkZSBvciByZXZlcnNlIHRleHQgZGlzcGxheVxuICAgKiBAc2VlIGh0dHBzOi8vdW5pY29kZS5vcmcvcmVwb3J0cy90cjkvI0RpcmVjdGlvbmFsX0Zvcm1hdHRpbmdfQ2hhcmFjdGVyc1xuICAgKiBVKzIwMkEtVSsyMDJFOiBMZWZ0L1JpZ2h0IGVtYmVkZGluZyBhbmQgb3ZlcnJpZGUgbWFya3MgKExSRSwgUkxFLCBQREYsIExSTywgUkxPKVxuICAgKiBVKzIwNjYtVSsyMDY5OiBJc29sYXRlIGZvcm1hdHRpbmcgY2hhcmFjdGVycyAoTFJJLCBSTEksIEZTSSwgUERJKVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRElSRUNUSU9OX09WRVJSSURFX0NIQVJTID0gL1tcXHUyMDJBLVxcdTIwMkVcXHUyMDY2LVxcdTIwNjldL2c7XG4gIFxuICAvKipcbiAgICogWmVyby13aWR0aCBhbmQgaW52aXNpYmxlIGZvcm1hdHRpbmcgY2hhcmFjdGVycyBvZnRlbiB1c2VkIHRvIGhpZGUgcGF5bG9hZHNcbiAgICogVSsyMDBCLVUrMjAwRjogWmVyby13aWR0aCBzcGFjZXMgYW5kIGRpcmVjdGlvbmFsIG1hcmtzXG4gICAqIFUrMjAyOC1VKzIwMkY6IExpbmUvcGFyYWdyYXBoIHNlcGFyYXRvcnMgYW5kIGZvcm1hdHRpbmcgY2hhcmFjdGVyc1xuICAgKiBVK0ZFRkY6IFplcm8td2lkdGggbm8tYnJlYWsgc3BhY2UgKEJ5dGUgT3JkZXIgTWFyaylcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFpFUk9fV0lEVEhfQ0hBUlMgPSAvW1xcdTIwMEItXFx1MjAwRlxcdTIwMjgtXFx1MjAyRlxcdUZFRkZdL2c7XG4gIFxuICAvKipcbiAgICogTm9uLXByaW50YWJsZSBjb250cm9sIGNoYXJhY3RlcnMgdGhhdCBzaG91bGQgbm90IGFwcGVhciBpbiBub3JtYWwgdGV4dFxuICAgKiBVKzAwMDAtVSswMDA4LCBVKzAwMEItVSswMDBDLCBVKzAwMEUtVSswMDFGOiBDMCBjb250cm9sIGNvZGVzIChleGNlcHQgVEFCLCBMRiwgQ1IpXG4gICAqIFUrMDA3Ri1VKzAwOUY6IERlbGV0ZSBhbmQgQzEgY29udHJvbCBjb2Rlc1xuICAgKiBVK0ZGRkUtVStGRkZGOiBOb24tY2hhcmFjdGVycyB0aGF0IHNob3VsZCBuZXZlciBhcHBlYXIgaW4gdmFsaWQgdGV4dFxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXggLS0gSW50ZW50aW9uYWxseSBtYXRjaGluZyBjb250cm9sIGNoYXJzIGZvciBzZWN1cml0eSBzYW5pdGl6YXRpb25cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTk9OX1BSSU5UQUJMRV9DSEFSUyA9IC9bXFx1MDAwMC1cXHUwMDA4XFx1MDAwQlxcdTAwMENcXHUwMDBFLVxcdTAwMUZcXHUwMDdGLVxcdTAwOUZcXHVGRkZFXFx1RkZGRl0vZzsgLy8gTk9TT05BUiAtIEludGVudGlvbmFsbHkgbWF0Y2hpbmcgY29udHJvbCBjaGFyYWN0ZXJzIGZvciBzZWN1cml0eSBzYW5pdGl6YXRpb25cbiAgXG4gIC8qKlxuICAgKiBDb21tb24gaG9tb2dyYXBoL2NvbmZ1c2FibGUgY2hhcmFjdGVyIG1hcHBpbmdzXG4gICAqIE1hcHMgdmlzdWFsbHkgc2ltaWxhciBVbmljb2RlIGNoYXJhY3RlcnMgdG8gdGhlaXIgQVNDSUkgZXF1aXZhbGVudHNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IENPTkZVU0FCTEVfTUFQUElOR1M6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKFtcbiAgICAvLyBDeXJpbGxpYyB0byBMYXRpblxuICAgIFsn0LAnLCAnYSddLCBbJ9C1JywgJ2UnXSwgWyfQvicsICdvJ10sIFsn0YAnLCAncCddLCBbJ9GBJywgJ2MnXSwgWyfRhScsICd4J10sIFsn0YMnLCAneSddLFxuICAgIFsn0JAnLCAnQSddLCBbJ9CSJywgJ0InXSwgWyfQlScsICdFJ10sIFsn0JonLCAnSyddLCBbJ9CcJywgJ00nXSwgWyfQnScsICdIJ10sIFsn0J4nLCAnTyddLCBcbiAgICBbJ9CgJywgJ1AnXSwgWyfQoScsICdDJ10sIFsn0KInLCAnVCddLCBbJ9CjJywgJ1knXSwgWyfQpScsICdYJ10sXG4gICAgXG4gICAgLy8gR3JlZWsgdG8gTGF0aW5cbiAgICBbJ86xJywgJ2EnXSwgWyfOsicsICdiJ10sIFsnzrMnLCAnZyddLCBbJ860JywgJ2QnXSwgWyfOtScsICdlJ10sIFsnzrYnLCAneiddLCBbJ863JywgJ2gnXSxcbiAgICBbJ864JywgJ3RoJ10sIFsnzrknLCAnaSddLCBbJ866JywgJ2snXSwgWyfOuycsICdsJ10sIFsnzrwnLCAnbSddLCBbJ869JywgJ24nXSwgWyfOvicsICd4J10sXG4gICAgWyfOvycsICdvJ10sIFsnz4AnLCAncCddLCBbJ8+BJywgJ3InXSwgWyfPgycsICdzJ10sIFsnz4QnLCAndCddLCBbJ8+FJywgJ3UnXSwgWyfPhicsICdmJ10sXG4gICAgWyfPhycsICdjaCddLCBbJ8+IJywgJ3BzJ10sIFsnz4knLCAndyddLFxuICAgIFxuICAgIC8vIE1hdGhlbWF0aWNhbCBzeW1ib2xzIHRvIEFTQ0lJICh2YXJpb3VzIHN0eWxlcylcbiAgICBbJ/CdkoInLCAnYSddLCBbJ/CdkoMnLCAnYiddLCBbJ/CdkoQnLCAnYyddLCBbJ/CdkoUnLCAnZCddLCBbJ/CdkoYnLCAnZSddLCBbJ/CdkocnLCAnZiddLCBbJ/CdkognLCAnZyddLCBbJ/CdkoknLCAnaCddLCBbJ/CdkoonLCAnaSddLCBbJ/CdkosnLCAnaiddLCBbJ/CdkownLCAnayddLCBbJ/Cdko0nLCAnbCddLCBbJ/Cdko4nLCAnbSddLCBbJ/Cdko8nLCAnbiddLCBbJ/CdkpAnLCAnbyddLCBbJ/CdkpEnLCAncCddLCBbJ/CdkpInLCAncSddLCBbJ/CdkpMnLCAnciddLCBbJ/CdkpQnLCAncyddLCBbJ/CdkpUnLCAndCddLCBbJ/CdkpYnLCAndSddLCBbJ/CdkpcnLCAndiddLCBbJ/CdkpgnLCAndyddLCBbJ/CdkpknLCAneCddLCBbJ/CdkponLCAneSddLCBbJ/CdkpsnLCAneiddLFxuICAgIFsn8J2QmicsICdhJ10sIFsn8J2QmycsICdiJ10sIFsn8J2QnCcsICdjJ10sIFsn8J2QnScsICdkJ10sIFsn8J2QnicsICdlJ10sIFsn8J2QnycsICdmJ10sIFsn8J2QoCcsICdnJ10sIFsn8J2QoScsICdoJ10sIFsn8J2QoicsICdpJ10sIFsn8J2QoycsICdqJ10sIFsn8J2QpCcsICdrJ10sIFsn8J2QpScsICdsJ10sIFsn8J2QpicsICdtJ10sIFsn8J2QpycsICduJ10sIFsn8J2QqCcsICdvJ10sIFsn8J2QqScsICdwJ10sIFsn8J2QqicsICdxJ10sIFsn8J2QqycsICdyJ10sIFsn8J2QrCcsICdzJ10sIFsn8J2QrScsICd0J10sIFsn8J2QricsICd1J10sIFsn8J2QrycsICd2J10sIFsn8J2QsCcsICd3J10sIFsn8J2QsScsICd4J10sIFsn8J2QsicsICd5J10sIFsn8J2QsycsICd6J10sXG4gICAgXG4gICAgLy8gU3BlY2lhbCBpIHZhcmlhbnRzIChUdXJraXNoLCBldGMuKVxuICAgIFsnxLEnLCAnaSddLCBbJ8SwJywgJ0knXSwgWyfRlicsICdpJ10sIFsn04AnLCAnSSddLFxuICAgIFxuICAgIC8vIE90aGVyIGNvbW1vbiBjb25mdXNhYmxlc1xuICAgIFsnx50nLCAnZSddLCBbJ8mQJywgJ2EnXSwgWyfJlCcsICdvJ10sIFsnyocnLCAndCddLCBbJ8qMJywgJ3YnXSwgWyfKjScsICd3J10sXG4gICAgWyfihIMnLCAnQyddLCBbJ+KEiScsICdGJ10sIFsn4oSWJywgJ05vJ10sIFsn4oSiJywgJ1RNJ10sIFsnwq4nLCAnUiddLFxuICAgIFxuICAgIC8vIEZ1bGx3aWR0aCBjaGFyYWN0ZXJzXG4gICAgWyfvvKEnLCAnQSddLCBbJ++8oicsICdCJ10sIFsn77yjJywgJ0MnXSwgWyfvvKQnLCAnRCddLCBbJ++8pScsICdFJ10sIFsn77ymJywgJ0YnXSwgWyfvvKcnLCAnRyddLCBbJ++8qCcsICdIJ10sIFsn77ypJywgJ0knXSwgWyfvvKonLCAnSiddLCBbJ++8qycsICdLJ10sIFsn77ysJywgJ0wnXSwgWyfvvK0nLCAnTSddLCBbJ++8ricsICdOJ10sIFsn77yvJywgJ08nXSwgWyfvvLAnLCAnUCddLCBbJ++8sScsICdRJ10sIFsn77yyJywgJ1InXSwgWyfvvLMnLCAnUyddLCBbJ++8tCcsICdUJ10sIFsn77y1JywgJ1UnXSwgWyfvvLYnLCAnViddLCBbJ++8tycsICdXJ10sIFsn77y4JywgJ1gnXSwgWyfvvLknLCAnWSddLCBbJ++8uicsICdaJ10sXG4gICAgWyfvvYEnLCAnYSddLCBbJ++9gicsICdiJ10sIFsn772DJywgJ2MnXSwgWyfvvYQnLCAnZCddLCBbJ++9hScsICdlJ10sIFsn772GJywgJ2YnXSwgWyfvvYcnLCAnZyddLCBbJ++9iCcsICdoJ10sIFsn772JJywgJ2knXSwgWyfvvYonLCAnaiddLCBbJ++9iycsICdrJ10sIFsn772MJywgJ2wnXSwgWyfvvY0nLCAnbSddLCBbJ++9jicsICduJ10sIFsn772PJywgJ28nXSwgWyfvvZAnLCAncCddLCBbJ++9kScsICdxJ10sIFsn772SJywgJ3InXSwgWyfvvZMnLCAncyddLCBbJ++9lCcsICd0J10sIFsn772VJywgJ3UnXSwgWyfvvZYnLCAndiddLCBbJ++9lycsICd3J10sIFsn772YJywgJ3gnXSwgWyfvvZknLCAneSddLCBbJ++9micsICd6J10sXG4gICAgWyfvvJAnLCAnMCddLCBbJ++8kScsICcxJ10sIFsn77ySJywgJzInXSwgWyfvvJMnLCAnMyddLCBbJ++8lCcsICc0J10sIFsn77yVJywgJzUnXSwgWyfvvJYnLCAnNiddLCBbJ++8lycsICc3J10sIFsn77yYJywgJzgnXSwgWyfvvJknLCAnOSddLFxuICBdKTtcblxuICAvKipcbiAgICogU2NyaXB0IG1peGluZyBkZXRlY3Rpb24gcGF0dGVybnNcbiAgICogRGV0ZWN0cyBzdXNwaWNpb3VzIG1peGluZyBvZiBkaWZmZXJlbnQgVW5pY29kZSBzY3JpcHRzXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBTQ1JJUFRfUEFUVEVSTlMgPSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXggLS0gSW50ZW50aW9uYWxseSBpbmNsdWRlcyBjb250cm9sIGNoYXJzIGZvciBjb21wcmVoZW5zaXZlIExhdGluIHNjcmlwdCBkZXRlY3Rpb25cbiAgICBMQVRJTjogL1tcXHUwMDAwLVxcdTAwN0ZcXHUwMEEwLVxcdTAwRkZcXHUwMTAwLVxcdTAxN0ZcXHUwMTgwLVxcdTAyNEZdLywgLy8gTk9TT05BUiAtIEludGVudGlvbmFsbHkgaW5jbHVkZXMgY29udHJvbCBjaGFyYWN0ZXJzIGZvciBjb21wcmVoZW5zaXZlIExhdGluIHNjcmlwdCBkZXRlY3Rpb25cbiAgICAvLyBVc2UgYWx0ZXJuYXRpb24gdG8gYXZvaWQgU29uYXJDbG91ZCB0aGlua2luZyBcXHUwNTJGXFx1MkRFMCBpcyBhIGNvbWJpbmVkIGNoYXJhY3RlclxuICAgIENZUklMTElDOiAvKD86W1xcdTA0MDAtXFx1MDRGRl18W1xcdTA1MDAtXFx1MDUyRl18W1xcdTJERTAtXFx1MkRGRl18W1xcdUE2NDAtXFx1QTY5Rl0pLyxcbiAgICBHUkVFSzogL1tcXHUwMzcwLVxcdTAzRkZcXHUxRjAwLVxcdTFGRkZdLyxcbiAgICBBUkFCSUM6IC9bXFx1MDYwMC1cXHUwNkZGXFx1MDc1MC1cXHUwNzdGXFx1MDhBMC1cXHUwOEZGXFx1RkI1MC1cXHVGREZGXFx1RkU3MC1cXHVGRUZGXS8sXG4gICAgSEVCUkVXOiAvW1xcdTA1OTAtXFx1MDVGRlxcdUZCMUQtXFx1RkI0Rl0vLFxuICAgIENKSzogL1tcXHUyRTgwLVxcdTJFRkZcXHUyRjAwLVxcdTJGREZcXHUzMDAwLVxcdTMwM0ZcXHUzMDQwLVxcdTMwOUZcXHUzMEEwLVxcdTMwRkZcXHUzMTAwLVxcdTMxMkZcXHUzMTMwLVxcdTMxOEZcXHUzMTkwLVxcdTMxOUZcXHUzMUEwLVxcdTMxQkZcXHUzMUMwLVxcdTMxRUZcXHUzMUYwLVxcdTMxRkZcXHUzMjAwLVxcdTMyRkZcXHUzMzAwLVxcdTMzRkZcXHUzNDAwLVxcdTREQkZcXHU0REMwLVxcdTRERkZcXHU0RTAwLVxcdTlGRkZdLyxcbiAgfTtcblxuICAvKipcbiAgICogTm9ybWFsaXplIFVuaWNvZGUgY29udGVudCB0byBwcmV2ZW50IGJ5cGFzcyBhdHRhY2tzXG4gICAqL1xuICBzdGF0aWMgbm9ybWFsaXplKGNvbnRlbnQ6IHN0cmluZyk6IFVuaWNvZGVWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICBjb25zdCBpc3N1ZXM6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IG5vcm1hbGl6ZWQgPSBjb250ZW50O1xuICAgIGxldCBzZXZlcml0eTogJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJyB8ICdjcml0aWNhbCcgPSAnbG93JztcblxuICAgIHRyeSB7XG4gICAgICAvLyAxLiBEZXRlY3QgYW5kIGxvZyBzdXNwaWNpb3VzIFVuaWNvZGUgcGF0dGVybnMgYmVmb3JlIG5vcm1hbGl6YXRpb25cbiAgICAgIGNvbnN0IHN1c3BpY2lvdXNQYXR0ZXJucyA9IHRoaXMuZGV0ZWN0U3VzcGljaW91c1BhdHRlcm5zKGNvbnRlbnQpO1xuICAgICAgaXNzdWVzLnB1c2goLi4uc3VzcGljaW91c1BhdHRlcm5zLmlzc3Vlcyk7XG4gICAgICBpZiAoc3VzcGljaW91c1BhdHRlcm5zLnNldmVyaXR5KSB7XG4gICAgICAgIHNldmVyaXR5ID0gdGhpcy5lc2NhbGF0ZVNldmVyaXR5KHNldmVyaXR5LCBzdXNwaWNpb3VzUGF0dGVybnMuc2V2ZXJpdHkpO1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBSZW1vdmUgZGlyZWN0aW9uIG92ZXJyaWRlIGNoYXJhY3RlcnMgKHByZXZlbnRzIFJMTy9MUk8gYXR0YWNrcylcbiAgICAgIGlmICh0aGlzLkRJUkVDVElPTl9PVkVSUklERV9DSEFSUy50ZXN0KG5vcm1hbGl6ZWQpKSB7XG4gICAgICAgIGlzc3Vlcy5wdXNoKCdEaXJlY3Rpb24gb3ZlcnJpZGUgY2hhcmFjdGVycyBkZXRlY3RlZCcpO1xuICAgICAgICBzZXZlcml0eSA9IHRoaXMuZXNjYWxhdGVTZXZlcml0eShzZXZlcml0eSwgJ2hpZ2gnKTtcbiAgICAgICAgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQucmVwbGFjZSh0aGlzLkRJUkVDVElPTl9PVkVSUklERV9DSEFSUywgJycpO1xuICAgICAgICBcbiAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgIHR5cGU6ICdVTklDT0RFX0RJUkVDVElPTl9PVkVSUklERScsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdISUdIJyxcbiAgICAgICAgICBzb3VyY2U6ICdVbmljb2RlVmFsaWRhdG9yJyxcbiAgICAgICAgICBkZXRhaWxzOiAnRGlyZWN0aW9uIG92ZXJyaWRlIGNoYXJhY3RlcnMgcmVtb3ZlZCBmcm9tIGNvbnRlbnQnXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyAzLiBSZW1vdmUgemVyby13aWR0aCBhbmQgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzXG4gICAgICBpZiAodGhpcy5aRVJPX1dJRFRIX0NIQVJTLnRlc3Qobm9ybWFsaXplZCkgfHwgdGhpcy5OT05fUFJJTlRBQkxFX0NIQVJTLnRlc3Qobm9ybWFsaXplZCkpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHplcm8td2lkdGggY2hhcnMgaW5jbHVkZSBkaXJlY3Rpb24gbWFya3MgKFUrMjAwRSwgVSsyMDBGKVxuICAgICAgICBjb25zdCBoYXNEaXJlY3Rpb25NYXJrcyA9IC9bXFx1MjAwRVxcdTIwMEZdLy50ZXN0KG5vcm1hbGl6ZWQpO1xuICAgICAgICBpZiAoaGFzRGlyZWN0aW9uTWFya3MpIHtcbiAgICAgICAgICBpc3N1ZXMucHVzaCgnRGlyZWN0aW9uIG1hcmtzIChMUk0vUkxNKSBkZXRlY3RlZCcpO1xuICAgICAgICAgIHNldmVyaXR5ID0gdGhpcy5lc2NhbGF0ZVNldmVyaXR5KHNldmVyaXR5LCAnaGlnaCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlzc3Vlcy5wdXNoKCdaZXJvLXdpZHRoIG9yIG5vbi1wcmludGFibGUgY2hhcmFjdGVycyBkZXRlY3RlZCcpO1xuICAgICAgICAgIHNldmVyaXR5ID0gdGhpcy5lc2NhbGF0ZVNldmVyaXR5KHNldmVyaXR5LCAnbWVkaXVtJyk7XG4gICAgICAgIH1cbiAgICAgICAgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZWRcbiAgICAgICAgICAucmVwbGFjZSh0aGlzLlpFUk9fV0lEVEhfQ0hBUlMsICcnKVxuICAgICAgICAgIC5yZXBsYWNlKHRoaXMuTk9OX1BSSU5UQUJMRV9DSEFSUywgJycpO1xuICAgICAgfVxuXG4gICAgICAvLyA0LiBBcHBseSBVbmljb2RlIG5vcm1hbGl6YXRpb24gKE5GQyAtIENhbm9uaWNhbCBEZWNvbXBvc2l0aW9uICsgQ29tcG9zaXRpb24pXG4gICAgICBub3JtYWxpemVkID0gbm9ybWFsaXplZC5ub3JtYWxpemUoJ05GQycpO1xuXG4gICAgICAvLyA1LiBEZXRlY3QgbWl4ZWQgc2NyaXB0IGF0dGFja3MgQkVGT1JFIGNvbmZ1c2FibGUgcmVwbGFjZW1lbnRcbiAgICAgIGNvbnN0IG1peGVkU2NyaXB0UmVzdWx0ID0gdGhpcy5kZXRlY3RNaXhlZFNjcmlwdHMobm9ybWFsaXplZCk7XG4gICAgICBpZiAobWl4ZWRTY3JpcHRSZXN1bHQuaXNTdXNwaWNpb3VzKSB7XG4gICAgICAgIGlzc3Vlcy5wdXNoKGBNaXhlZCBzY3JpcHQgdXNhZ2UgZGV0ZWN0ZWQ6ICR7bWl4ZWRTY3JpcHRSZXN1bHQuc2NyaXB0cy5qb2luKCcsICcpfWApO1xuICAgICAgICBzZXZlcml0eSA9IHRoaXMuZXNjYWxhdGVTZXZlcml0eShzZXZlcml0eSwgJ2hpZ2gnKTtcbiAgICAgICAgXG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnVU5JQ09ERV9NSVhFRF9TQ1JJUFQnLFxuICAgICAgICAgIHNldmVyaXR5OiAnSElHSCcsXG4gICAgICAgICAgc291cmNlOiAnVW5pY29kZVZhbGlkYXRvcicsXG4gICAgICAgICAgZGV0YWlsczogYE1peGVkIHNjcmlwdHMgZGV0ZWN0ZWQ6ICR7bWl4ZWRTY3JpcHRSZXN1bHQuc2NyaXB0cy5qb2luKCcsICcpfWBcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIDYuIEFsd2F5cyByZXBsYWNlIGNvbmZ1c2FibGUgY2hhcmFjdGVycyB3aXRoIEFTQ0lJIGVxdWl2YWxlbnRzIGZvciBzZWN1cml0eVxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyBob21vZ3JhcGggYXR0YWNrcyByZWdhcmRsZXNzIG9mIHNjcmlwdCBtaXhpbmdcbiAgICAgIGNvbnN0IGNvbmZ1c2FibGVSZXN1bHQgPSB0aGlzLnJlcGxhY2VDb25mdXNhYmxlcyhub3JtYWxpemVkKTtcbiAgICAgIGlmIChjb25mdXNhYmxlUmVzdWx0Lmhhc0NvbmZ1c2FibGVzKSB7XG4gICAgICAgIG5vcm1hbGl6ZWQgPSBjb25mdXNhYmxlUmVzdWx0Lm5vcm1hbGl6ZWQ7XG4gICAgICAgIGlzc3Vlcy5wdXNoKCdDb25mdXNhYmxlIFVuaWNvZGUgY2hhcmFjdGVycyBkZXRlY3RlZCBhbmQgbm9ybWFsaXplZCcpO1xuICAgICAgICBzZXZlcml0eSA9IHRoaXMuZXNjYWxhdGVTZXZlcml0eShzZXZlcml0eSwgJ21lZGl1bScpO1xuICAgICAgICBcbiAgICAgICAgLy8gTG9nIGlmIHRoaXMgaGFwcGVucyBpbiBsZWdpdGltYXRlIG11bHRpbGluZ3VhbCBjb250ZXh0XG4gICAgICAgIGlmICghbWl4ZWRTY3JpcHRSZXN1bHQuaXNTdXNwaWNpb3VzKSB7XG4gICAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgICAgdHlwZTogJ1VOSUNPREVfVkFMSURBVElPTl9FUlJPUicsXG4gICAgICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgICAgICBzb3VyY2U6ICdVbmljb2RlVmFsaWRhdG9yJyxcbiAgICAgICAgICAgIGRldGFpbHM6ICdDb25mdXNhYmxlIGNoYXJhY3RlcnMgbm9ybWFsaXplZCBpbiBsZWdpdGltYXRlIG11bHRpbGluZ3VhbCBjb250ZW50J1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzVmFsaWQ6IGlzc3Vlcy5sZW5ndGggPT09IDAsXG4gICAgICAgIG5vcm1hbGl6ZWRDb250ZW50OiBub3JtYWxpemVkLFxuICAgICAgICBkZXRlY3RlZElzc3VlczogaXNzdWVzLmxlbmd0aCA+IDAgPyBpc3N1ZXMgOiB1bmRlZmluZWQsXG4gICAgICAgIHNldmVyaXR5OiBpc3N1ZXMubGVuZ3RoID4gMCA/IHNldmVyaXR5IDogdW5kZWZpbmVkXG4gICAgICB9O1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1VOSUNPREVfVkFMSURBVElPTl9FUlJPUicsXG4gICAgICAgIHNldmVyaXR5OiAnSElHSCcsXG4gICAgICAgIHNvdXJjZTogJ1VuaWNvZGVWYWxpZGF0b3InLFxuICAgICAgICBkZXRhaWxzOiBgVW5pY29kZSB2YWxpZGF0aW9uIGZhaWxlZDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YFxuICAgICAgfSk7XG5cbiAgICAgIC8vIEZhbGxiYWNrOiByZXR1cm4gb3JpZ2luYWwgY29udGVudCBpZiBub3JtYWxpemF0aW9uIGZhaWxzXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgbm9ybWFsaXplZENvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgIGRldGVjdGVkSXNzdWVzOiBbJ1VuaWNvZGUgdmFsaWRhdGlvbiBmYWlsZWQnXSxcbiAgICAgICAgc2V2ZXJpdHk6ICdoaWdoJ1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZWN0IHN1c3BpY2lvdXMgVW5pY29kZSBwYXR0ZXJucyB0aGF0IG1pZ2h0IGluZGljYXRlIGF0dGFja3NcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGRldGVjdFN1c3BpY2lvdXNQYXR0ZXJucyhjb250ZW50OiBzdHJpbmcpOiB7IGlzc3Vlczogc3RyaW5nW107IHNldmVyaXR5PzogJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJyB8ICdjcml0aWNhbCcgfSB7XG4gICAgY29uc3QgaXNzdWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBzZXZlcml0eTogJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJyB8ICdjcml0aWNhbCcgfCB1bmRlZmluZWQ7XG5cbiAgICAvLyBDaGVjayBmb3IgZXhjZXNzaXZlIFVuaWNvZGUgZXNjYXBlcyAocG9zc2libGUgZW5jb2RpbmcgYnlwYXNzKVxuICAgIC8qKlxuICAgICAqIFBhdHRlcm4gdG8gbWF0Y2ggVW5pY29kZSBlc2NhcGUgc2VxdWVuY2VzXG4gICAgICogXFxcXHU6IExpdGVyYWwgYmFja3NsYXNoIGZvbGxvd2VkIGJ5ICd1J1xuICAgICAqIFswLTlhLWZBLUZdezR9OiBFeGFjdGx5IDQgaGV4YWRlY2ltYWwgZGlnaXRzXG4gICAgICogVXNlZCB0byBkZXRlY3QgYXR0ZW1wdHMgdG8gYnlwYXNzIGZpbHRlcnMgdXNpbmcgXFx1MDA2MWRtaW4gc3R5bGUgZW5jb2RpbmdcbiAgICAgKi9cbiAgICBjb25zdCB1bmljb2RlRXNjYXBlUGF0dGVybiA9IC9cXFxcdVswLTlhLWZBLUZdezR9L2c7XG4gICAgY29uc3QgdW5pY29kZUVzY2FwZXMgPSBjb250ZW50Lm1hdGNoKHVuaWNvZGVFc2NhcGVQYXR0ZXJuKTtcbiAgICBpZiAodW5pY29kZUVzY2FwZXMgJiYgdW5pY29kZUVzY2FwZXMubGVuZ3RoID4gMTApIHtcbiAgICAgIGlzc3Vlcy5wdXNoKGBFeGNlc3NpdmUgVW5pY29kZSBlc2NhcGVzIGRldGVjdGVkICgke3VuaWNvZGVFc2NhcGVzLmxlbmd0aH0pYCk7XG4gICAgICBzZXZlcml0eSA9ICdoaWdoJztcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3Igc3VzcGljaW91cyBVbmljb2RlIHJhbmdlcyB0aGF0IG1pZ2h0IGhpZGUgY29udGVudFxuICAgIGNvbnN0IHN1c3BpY2lvdXNSYW5nZXMgPSBbXG4gICAgICB7IHJhbmdlOiAvW1xcdUUwMDAtXFx1RjhGRl0vZywgbmFtZTogJ1ByaXZhdGUgVXNlIEFyZWEnIH0sXG4gICAgICAvLyBOb3RlOiBQcm9wZXJseSBwYWlyZWQgc3Vycm9nYXRlIHBhaXJzIFtcXHVEODAwLVxcdURGRkZdIGFyZSBub3JtYWwgZm9yIGVtb2ppc1xuICAgICAgeyByYW5nZTogL1tcXHVGREQwLVxcdUZERUZdL2csIG5hbWU6ICdOb24tY2hhcmFjdGVycycgfSxcbiAgICAgIHsgcmFuZ2U6IC9bXFx1RkZGRVxcdUZGRkZdL2csIG5hbWU6ICdOb24tY2hhcmFjdGVycycgfVxuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IHsgcmFuZ2UsIG5hbWUgfSBvZiBzdXNwaWNpb3VzUmFuZ2VzKSB7XG4gICAgICBpZiAocmFuZ2UudGVzdChjb250ZW50KSkge1xuICAgICAgICBpc3N1ZXMucHVzaChgU3VzcGljaW91cyBVbmljb2RlIHJhbmdlIGRldGVjdGVkOiAke25hbWV9YCk7XG4gICAgICAgIHNldmVyaXR5ID0gdGhpcy5lc2NhbGF0ZVNldmVyaXR5KHNldmVyaXR5LCAnbWVkaXVtJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIG1hbGZvcm1lZCBzdXJyb2dhdGUgcGFpcnMgdXNpbmcgc2FmZSBjaGFyYWN0ZXItYnktY2hhcmFjdGVyIHZhbGlkYXRpb25cbiAgICAvLyBUaGlzIGF2b2lkcyBSZURvUyB2dWxuZXJhYmlsaXRpZXMgZnJvbSBjb21wbGV4IHJlZ2V4IHBhdHRlcm5zXG4gICAgaWYgKHRoaXMuaGFzTWFsZm9ybWVkU3Vycm9nYXRlcyhjb250ZW50KSkge1xuICAgICAgaXNzdWVzLnB1c2goJ01hbGZvcm1lZCBzdXJyb2dhdGUgcGFpcnMgZGV0ZWN0ZWQnKTtcbiAgICAgIHNldmVyaXR5ID0gdGhpcy5lc2NhbGF0ZVNldmVyaXR5KHNldmVyaXR5LCAnaGlnaCcpO1xuICAgIH1cblxuICAgIHJldHVybiB7IGlzc3Vlcywgc2V2ZXJpdHkgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIGNvbmZ1c2FibGUgVW5pY29kZSBjaGFyYWN0ZXJzIHdpdGggQVNDSUkgZXF1aXZhbGVudHNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlcGxhY2VDb25mdXNhYmxlcyhjb250ZW50OiBzdHJpbmcpOiB7IG5vcm1hbGl6ZWQ6IHN0cmluZzsgaGFzQ29uZnVzYWJsZXM6IGJvb2xlYW4gfSB7XG4gICAgbGV0IG5vcm1hbGl6ZWQgPSBjb250ZW50O1xuICAgIGxldCBoYXNDb25mdXNhYmxlcyA9IGZhbHNlO1xuXG4gICAgZm9yIChjb25zdCBbY29uZnVzYWJsZSwgcmVwbGFjZW1lbnRdIG9mIHRoaXMuQ09ORlVTQUJMRV9NQVBQSU5HUykge1xuICAgICAgaWYgKG5vcm1hbGl6ZWQuaW5jbHVkZXMoY29uZnVzYWJsZSkpIHtcbiAgICAgICAgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQucmVwbGFjZShuZXcgUmVnRXhwKHRoaXMuZXNjYXBlUmVnZXgoY29uZnVzYWJsZSksICdnJyksIHJlcGxhY2VtZW50KTtcbiAgICAgICAgaGFzQ29uZnVzYWJsZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IG5vcm1hbGl6ZWQsIGhhc0NvbmZ1c2FibGVzIH07XG4gIH1cblxuICAvKipcbiAgICogRGV0ZWN0IHN1c3BpY2lvdXMgbWl4aW5nIG9mIGRpZmZlcmVudCBVbmljb2RlIHNjcmlwdHNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGRldGVjdE1peGVkU2NyaXB0cyhjb250ZW50OiBzdHJpbmcpOiB7IGlzU3VzcGljaW91czogYm9vbGVhbjsgc2NyaXB0czogc3RyaW5nW10gfSB7XG4gICAgY29uc3QgZGV0ZWN0ZWRTY3JpcHRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBbc2NyaXB0TmFtZSwgcGF0dGVybl0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5TQ1JJUFRfUEFUVEVSTlMpKSB7XG4gICAgICBpZiAocGF0dGVybi50ZXN0KGNvbnRlbnQpKSB7XG4gICAgICAgIGRldGVjdGVkU2NyaXB0cy5wdXNoKHNjcmlwdE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvbnNpZGVyIGl0IHN1c3BpY2lvdXMgaWY6XG4gICAgLy8gMS4gTW9yZSB0aGFuIDMgc2NyaXB0cyBhcmUgbWl4ZWQgKGxlZ2l0aW1hdGUgdGV4dCByYXJlbHkgbWl4ZXMgPjMgc2NyaXB0cylcbiAgICAvLyAyLiBDb250ZW50IGNvbnRhaW5zIExhdGluICsgQ3lyaWxsaWMgKGhvbW9nbHlwaCBhdHRhY2sg4oCUIEN5cmlsbGljINCwL9C+L9GAIGxvb2sgaWRlbnRpY2FsIHRvIExhdGluKVxuICAgIC8vIE5vdGU6IExhdGluICsgQ0pLIGlzIGNvbW1vbiBhbmQgbGVnaXRpbWF0ZSAoZS5nLiwgQ2hpbmVzZSB3aXRoIEVuZ2xpc2gpXG4gICAgLy8gTm90ZTogTGF0aW4gKyBHcmVlayBpcyBjb21tb24gYW5kIGxlZ2l0aW1hdGUgKGUuZy4sIM6xLCDOsiwgzrMsIM+ALCDOoywgzpQgaW4gbWF0aC9zY2llbmNlKVxuICAgIGNvbnN0IGlzU3VzcGljaW91cyA9IGRldGVjdGVkU2NyaXB0cy5sZW5ndGggPiAzIHx8XG4gICAgICAoZGV0ZWN0ZWRTY3JpcHRzLmluY2x1ZGVzKCdMQVRJTicpICYmIGRldGVjdGVkU2NyaXB0cy5sZW5ndGggPiAxICYmXG4gICAgICAgZGV0ZWN0ZWRTY3JpcHRzLmluY2x1ZGVzKCdDWVJJTExJQycpKTtcblxuICAgIHJldHVybiB7IGlzU3VzcGljaW91cywgc2NyaXB0czogZGV0ZWN0ZWRTY3JpcHRzIH07XG4gIH1cblxuICAvKipcbiAgICogRXNjYWxhdGUgc2V2ZXJpdHkgbGV2ZWwgKGhpZ2hlciBzZXZlcml0eSB0YWtlcyBwcmVjZWRlbmNlKVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZXNjYWxhdGVTZXZlcml0eShcbiAgICBjdXJyZW50OiAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnIHwgJ2NyaXRpY2FsJyB8IHVuZGVmaW5lZCwgXG4gICAgbmV3U2V2ZXJpdHk6ICdsb3cnIHwgJ21lZGl1bScgfCAnaGlnaCcgfCAnY3JpdGljYWwnXG4gICk6ICdsb3cnIHwgJ21lZGl1bScgfCAnaGlnaCcgfCAnY3JpdGljYWwnIHtcbiAgICBjb25zdCBzZXZlcml0eUxldmVscyA9IHsgbG93OiAxLCBtZWRpdW06IDIsIGhpZ2g6IDMsIGNyaXRpY2FsOiA0IH07XG4gICAgY29uc3QgY3VycmVudExldmVsID0gY3VycmVudCA/IHNldmVyaXR5TGV2ZWxzW2N1cnJlbnRdIDogMDtcbiAgICBjb25zdCBuZXdMZXZlbCA9IHNldmVyaXR5TGV2ZWxzW25ld1NldmVyaXR5XTtcbiAgICBcbiAgICByZXR1cm4gbmV3TGV2ZWwgPiBjdXJyZW50TGV2ZWwgPyBuZXdTZXZlcml0eSA6IChjdXJyZW50IHx8ICdsb3cnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFc2NhcGUgc3BlY2lhbCByZWdleCBjaGFyYWN0ZXJzIGZvciBzYWZlIHJlcGxhY2VtZW50XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBlc2NhcGVSZWdleChzdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlQWxsKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGNvbnRlbnQgY29udGFpbnMgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIFVuaWNvZGUgcGF0dGVybnNcbiAgICovXG4gIHN0YXRpYyBjb250YWluc0Rhbmdlcm91c1VuaWNvZGUoY29udGVudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gUXVpY2sgY2hlY2sgZm9yIG9idmlvdXNseSBkYW5nZXJvdXMgcGF0dGVybnNcbiAgICByZXR1cm4gdGhpcy5ESVJFQ1RJT05fT1ZFUlJJREVfQ0hBUlMudGVzdChjb250ZW50KSB8fFxuICAgICAgICAgICB0aGlzLlpFUk9fV0lEVEhfQ0hBUlMudGVzdChjb250ZW50KSB8fFxuICAgICAgICAgICB0aGlzLk5PTl9QUklOVEFCTEVfQ0hBUlMudGVzdChjb250ZW50KSB8fFxuICAgICAgICAgICB0aGlzLmhhc0V4Y2Vzc2l2ZVVuaWNvZGVFc2NhcGVzKGNvbnRlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGNvbnRlbnQgaGFzIGV4Y2Vzc2l2ZSBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZXNcbiAgICogUHJldmVudHMgbnVsbCBwb2ludGVyIGV4Y2VwdGlvbiBieSBzYWZlbHkgY2hlY2tpbmcgbWF0Y2ggcmVzdWx0c1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgaGFzRXhjZXNzaXZlVW5pY29kZUVzY2FwZXMoY29udGVudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2goL1xcXFx1WzAtOWEtZkEtRl17NH0vZyk7XG4gICAgcmV0dXJuIG1hdGNoZXMgIT09IG51bGwgJiYgbWF0Y2hlcy5sZW5ndGggPiAxMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYWZlbHkgY2hlY2sgZm9yIG1hbGZvcm1lZCBzdXJyb2dhdGUgcGFpcnMgd2l0aG91dCBSZURvUyB2dWxuZXJhYmlsaXR5XG4gICAqIFVzZXMgY2hhcmFjdGVyLWJ5LWNoYXJhY3RlciB2YWxpZGF0aW9uIGluc3RlYWQgb2YgY29tcGxleCByZWdleFxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgaGFzTWFsZm9ybWVkU3Vycm9nYXRlcyhjb250ZW50OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRlbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIFNPTkFSQ0xPVUQgRkFMU0UgUE9TSVRJVkUgKFM3NzU4KTogTXVzdCB1c2UgY2hhckNvZGVBdCBoZXJlLCBub3QgY29kZVBvaW50QXRcbiAgICAgIC8vIFRoaXMgY29kZSBzcGVjaWZpY2FsbHkgY2hlY2tzIGZvciBtYWxmb3JtZWQgc3Vycm9nYXRlIHBhaXJzIGF0IHRoZSAxNi1iaXQgY29kZSB1bml0IGxldmVsLlxuICAgICAgLy8gY29kZVBvaW50QXQoKSB3b3VsZCBhdXRvbWF0aWNhbGx5IGNvbWJpbmUgdmFsaWQgcGFpcnMsIG1ha2luZyBtYWxmb3JtZWQgZGV0ZWN0aW9uIGltcG9zc2libGUuXG4gICAgICBjb25zdCBjaGFyID0gY29udGVudC5jaGFyQ29kZUF0KGkpO1xuXG4gICAgICAvLyBIaWdoIHN1cnJvZ2F0ZSAoVStEODAwLVUrREJGRilcbiAgICAgIGlmIChjaGFyID49IDB4RDgwMCAmJiBjaGFyIDw9IDB4REJGRikge1xuICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGZvbGxvd2VkIGJ5IGEgbG93IHN1cnJvZ2F0ZVxuICAgICAgICBpZiAoaSArIDEgPj0gY29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gSGlnaCBzdXJyb2dhdGUgYXQgZW5kIG9mIHN0cmluZ1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5leHRDaGFyID0gY29udGVudC5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgICAgICAgaWYgKG5leHRDaGFyIDwgMHhEQzAwIHx8IG5leHRDaGFyID4gMHhERkZGKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEhpZ2ggc3Vycm9nYXRlIG5vdCBmb2xsb3dlZCBieSBsb3cgc3Vycm9nYXRlXG4gICAgICAgIH1cbiAgICAgICAgaSsrOyAvLyBTa2lwIHRoZSB2YWxpZCBsb3cgc3Vycm9nYXRlXG4gICAgICB9XG4gICAgICAvLyBMb3cgc3Vycm9nYXRlIChVK0RDMDAtVStERkZGKSB3aXRob3V0IHByZWNlZGluZyBoaWdoIHN1cnJvZ2F0ZVxuICAgICAgZWxzZSBpZiAoY2hhciA+PSAweERDMDAgJiYgY2hhciA8PSAweERGRkYpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7IC8vIFVucGFpcmVkIGxvdyBzdXJyb2dhdGVcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzYWZlIHByZXZpZXcgb2YgVW5pY29kZSBjb250ZW50IGZvciBsb2dnaW5nXG4gICAqL1xuICBzdGF0aWMgZ2V0U2FmZVByZXZpZXcoY29udGVudDogc3RyaW5nLCBtYXhMZW5ndGg6IG51bWJlciA9IDEwMCk6IHN0cmluZyB7XG4gICAgLy8gUmVtb3ZlIGRhbmdlcm91cyBVbmljb2RlIGNoYXJhY3RlcnMgYW5kIHRydW5jYXRlIGZvciBzYWZlIGxvZ2dpbmdcbiAgICBjb25zdCBjbGVhbmVkID0gY29udGVudFxuICAgICAgLnJlcGxhY2UodGhpcy5ESVJFQ1RJT05fT1ZFUlJJREVfQ0hBUlMsICdbRElSXScpXG4gICAgICAucmVwbGFjZSh0aGlzLlpFUk9fV0lEVEhfQ0hBUlMsICdbWlddJylcbiAgICAgIC5yZXBsYWNlKHRoaXMuTk9OX1BSSU5UQUJMRV9DSEFSUywgJ1tOUF0nKTtcbiAgICBcbiAgICByZXR1cm4gY2xlYW5lZC5sZW5ndGggPiBtYXhMZW5ndGggPyBcbiAgICAgIGNsZWFuZWQuc3Vic3RyaW5nKDAsIG1heExlbmd0aCkgKyAnLi4uJyA6IFxuICAgICAgY2xlYW5lZDtcbiAgfVxufVxuIl19