@pipeline-builder/pipeline-data 4.3.12 → 4.3.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/lib/api/managed-toolchain.d.ts +1 -5
  2. package/lib/api/managed-toolchain.js +18 -20
  3. package/lib/api/public-directory.d.ts +4 -15
  4. package/lib/api/public-directory.js +1 -31
  5. package/lib/api/reporting/stakeholder/compose.d.ts +3 -2
  6. package/lib/api/reporting/stakeholder/compose.js +1 -1
  7. package/lib/api/reporting/stakeholder/period.d.ts +5 -4
  8. package/lib/api/reporting/stakeholder/period.js +1 -1
  9. package/lib/api/reporting/stakeholder/sections.d.ts +4 -4
  10. package/lib/api/reporting/stakeholder/sections.js +1 -1
  11. package/lib/api/reporting/stakeholder/store.d.ts +3 -2
  12. package/lib/api/reporting/stakeholder/store.js +1 -1
  13. package/lib/api/reporting/toolchain-runs.d.ts +0 -6
  14. package/lib/api/reporting/toolchain-runs.js +4 -5
  15. package/lib/api/reporting/types.d.ts +3 -2
  16. package/lib/api/reporting/types.js +1 -1
  17. package/lib/api/support-cases.d.ts +50 -24
  18. package/lib/api/support-cases.js +96 -37
  19. package/lib/core/query-filters.d.ts +6 -6
  20. package/lib/core/query-filters.js +1 -1
  21. package/lib/database/drizzle-schema.d.ts +48 -41
  22. package/lib/database/schema/alert.js +4 -4
  23. package/lib/database/schema/compliance.d.ts +29 -40
  24. package/lib/database/schema/compliance.js +10 -14
  25. package/lib/database/schema/ecosystem.d.ts +17 -0
  26. package/lib/database/schema/ecosystem.js +6 -1
  27. package/lib/database/schema/reporting-stakeholder.d.ts +2 -1
  28. package/lib/database/schema/reporting-stakeholder.js +2 -27
  29. package/lib/index.d.ts +4 -4
  30. package/lib/index.js +5 -5
  31. package/lib/testing/exports.json +2 -4
  32. package/package.json +2 -2
@@ -1,41 +1,11 @@
1
1
  // Copyright 2026 Pipeline Builder Contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
- /**
4
- * Queries behind the anonymous public plugin directory
5
- * (docs/plugin-publishing.md).
6
- *
7
- * Every query here reads ONLY the `public_listings`, `public_listed_versions`,
8
- * `public_advisories` and `public_reviews` views, through the `ecosystem_public_reader`
9
- * connection ({@link getPublicReaderDb}). Those views filter to public rows
10
- * (listed/unmaintained listings of non-suspended publishers, non-paused
11
- * listings and versions, published advisories) and project public columns only,
12
- * so nothing here needs — or has — a tenant context.
13
- *
14
- * PAUSE IS THE VIEWS' JOB, and only theirs. Every query here used to repeat
15
- * `l.paused_at IS NULL` because three of the four views did not filter it —
16
- * `public_reviews` alone did — so the predicate lived in six places and the
17
- * header claimed a guarantee the DDL did not make. The views now filter it,
18
- * which is the single place it belongs: a query added later inherits the rule
19
- * instead of having to remember it, which is exactly the failure the six copies
20
- * were compensating for.
21
- *
22
- * The DDL in `postgres-init.sql` runs when the database is created, so this is
23
- * the contract from the install forward rather than something layered on. It is
24
- * pinned per view by `ecosystem-schema.test.ts`.
25
- *
26
- * Search: Postgres full-text (`search_vector`, weighted name A / keywords and
27
- * category B / summary C / README D, `english` config) OR a trigram match on the
28
- * name (typo tolerance), ranked by `ts_rank` + name similarity, blended with the
29
- * Bayesian rating and install count when present. Paused listings are hidden.
30
- */
31
- import { PUBLISHER_TIERS } from '@pipeline-builder/api-core';
32
3
  import { sql } from 'drizzle-orm';
33
4
  import { advisoryRangeCovers } from './plugin-advisories.js';
34
5
  import { compareSemver } from './semver-range.js';
35
6
  import { resultRows } from '../database/pg-result.js';
36
7
  import { getPublicReaderDb } from '../database/public-reader.js';
37
8
  export const DIRECTORY_SORTS = ['relevance', 'rating', 'installs', 'updated', 'name', 'health'];
38
- export const DIRECTORY_TIERS = PUBLISHER_TIERS;
39
9
  /** Minimum `word_similarity(query, name)` for a fuzzy name match (typo tolerance). */
40
10
  export const FUZZY_NAME_THRESHOLD = 0.3;
41
11
  /** Max query length accepted (longer is truncated, never an error). */
@@ -506,4 +476,4 @@ export async function listPublicListingsForSitemap(max = 5000) {
506
476
  return resultRows(res)
507
477
  .map((r) => ({ publisher: r.publisher_handle, name: r.name, updatedAt: iso(r.updated_at) }));
508
478
  }
509
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWRpcmVjdG9yeS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9wdWJsaWMtZGlyZWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJCRztBQUVILE9BQU8sRUFBRSxlQUFlLEVBQXNCLE1BQU0sNEJBQTRCLENBQUM7QUFDakYsT0FBTyxFQUFFLEdBQUcsRUFBWSxNQUFNLGFBQWEsQ0FBQztBQUU1QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBb0JqRSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQTZCLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUUxSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQWtDLGVBQWUsQ0FBQztBQUU5RSxzRkFBc0Y7QUFDdEYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFDO0FBRXhDLHVFQUF1RTtBQUN2RSxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxHQUFHLENBQUM7QUFDOUMsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxDQUFDO0FBQzFDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztBQW1KdEMsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUEwQixDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzlGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLEVBQUUs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TUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7S0FDM0YsQ0FBQztBQUNKLENBQUM7QUFFRCx1RUFBdUU7QUFDdkUsTUFBTSxDQUFDLEtBQUssVUFBVSw0QkFBNEIsQ0FBQyxHQUFHLEdBQUcsSUFBSTtJQUMzRCxNQUFNLEVBQUUsR0FBRyxpQkFBaUIsRUFBRSxDQUFDO0lBQy9CLE1BQU0sR0FBRyxHQUFHLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUE7O3NDQUVJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLE9BQU8sVUFBVSxDQUF3RSxHQUFHLENBQUM7U0FDMUYsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogUXVlcmllcyBiZWhpbmQgdGhlIGFub255bW91cyBwdWJsaWMgcGx1Z2luIGRpcmVjdG9yeVxuICogKGRvY3MvcGx1Z2luLXB1Ymxpc2hpbmcubWQpLlxuICpcbiAqIEV2ZXJ5IHF1ZXJ5IGhlcmUgcmVhZHMgT05MWSB0aGUgYHB1YmxpY19saXN0aW5nc2AsIGBwdWJsaWNfbGlzdGVkX3ZlcnNpb25zYCxcbiAqIGBwdWJsaWNfYWR2aXNvcmllc2AgYW5kIGBwdWJsaWNfcmV2aWV3c2Agdmlld3MsIHRocm91Z2ggdGhlIGBlY29zeXN0ZW1fcHVibGljX3JlYWRlcmBcbiAqIGNvbm5lY3Rpb24gKHtAbGluayBnZXRQdWJsaWNSZWFkZXJEYn0pLiBUaG9zZSB2aWV3cyBmaWx0ZXIgdG8gcHVibGljIHJvd3NcbiAqIChsaXN0ZWQvdW5tYWludGFpbmVkIGxpc3RpbmdzIG9mIG5vbi1zdXNwZW5kZWQgcHVibGlzaGVycywgbm9uLXBhdXNlZFxuICogbGlzdGluZ3MgYW5kIHZlcnNpb25zLCBwdWJsaXNoZWQgYWR2aXNvcmllcykgYW5kIHByb2plY3QgcHVibGljIGNvbHVtbnMgb25seSxcbiAqIHNvIG5vdGhpbmcgaGVyZSBuZWVkcyDigJQgb3IgaGFzIOKAlCBhIHRlbmFudCBjb250ZXh0LlxuICpcbiAqIFBBVVNFIElTIFRIRSBWSUVXUycgSk9CLCBhbmQgb25seSB0aGVpcnMuIEV2ZXJ5IHF1ZXJ5IGhlcmUgdXNlZCB0byByZXBlYXRcbiAqIGBsLnBhdXNlZF9hdCBJUyBOVUxMYCBiZWNhdXNlIHRocmVlIG9mIHRoZSBmb3VyIHZpZXdzIGRpZCBub3QgZmlsdGVyIGl0IOKAlFxuICogYHB1YmxpY19yZXZpZXdzYCBhbG9uZSBkaWQg4oCUIHNvIHRoZSBwcmVkaWNhdGUgbGl2ZWQgaW4gc2l4IHBsYWNlcyBhbmQgdGhlXG4gKiBoZWFkZXIgY2xhaW1lZCBhIGd1YXJhbnRlZSB0aGUgRERMIGRpZCBub3QgbWFrZS4gVGhlIHZpZXdzIG5vdyBmaWx0ZXIgaXQsXG4gKiB3aGljaCBpcyB0aGUgc2luZ2xlIHBsYWNlIGl0IGJlbG9uZ3M6IGEgcXVlcnkgYWRkZWQgbGF0ZXIgaW5oZXJpdHMgdGhlIHJ1bGVcbiAqIGluc3RlYWQgb2YgaGF2aW5nIHRvIHJlbWVtYmVyIGl0LCB3aGljaCBpcyBleGFjdGx5IHRoZSBmYWlsdXJlIHRoZSBzaXggY29waWVzXG4gKiB3ZXJlIGNvbXBlbnNhdGluZyBmb3IuXG4gKlxuICogVGhlIERETCBpbiBgcG9zdGdyZXMtaW5pdC5zcWxgIHJ1bnMgd2hlbiB0aGUgZGF0YWJhc2UgaXMgY3JlYXRlZCwgc28gdGhpcyBpc1xuICogdGhlIGNvbnRyYWN0IGZyb20gdGhlIGluc3RhbGwgZm9yd2FyZCByYXRoZXIgdGhhbiBzb21ldGhpbmcgbGF5ZXJlZCBvbi4gSXQgaXNcbiAqIHBpbm5lZCBwZXIgdmlldyBieSBgZWNvc3lzdGVtLXNjaGVtYS50ZXN0LnRzYC5cbiAqXG4gKiBTZWFyY2g6IFBvc3RncmVzIGZ1bGwtdGV4dCAoYHNlYXJjaF92ZWN0b3JgLCB3ZWlnaHRlZCBuYW1lIEEgLyBrZXl3b3JkcyBhbmRcbiAqIGNhdGVnb3J5IEIgLyBzdW1tYXJ5IEMgLyBSRUFETUUgRCwgYGVuZ2xpc2hgIGNvbmZpZykgT1IgYSB0cmlncmFtIG1hdGNoIG9uIHRoZVxuICogbmFtZSAodHlwbyB0b2xlcmFuY2UpLCByYW5rZWQgYnkgYHRzX3JhbmtgICsgbmFtZSBzaW1pbGFyaXR5LCBibGVuZGVkIHdpdGggdGhlXG4gKiBCYXllc2lhbiByYXRpbmcgYW5kIGluc3RhbGwgY291bnQgd2hlbiBwcmVzZW50LiBQYXVzZWQgbGlzdGluZ3MgYXJlIGhpZGRlbi5cbiAqL1xuXG5pbXBvcnQgeyBQVUJMSVNIRVJfVElFUlMsIHR5cGUgUHVibGlzaGVyVGllciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IHNxbCwgdHlwZSBTUUwgfSBmcm9tICdkcml6emxlLW9ybSc7XG5cbmltcG9ydCB7IGFkdmlzb3J5UmFuZ2VDb3ZlcnMgfSBmcm9tICcuL3BsdWdpbi1hZHZpc29yaWVzLmpzJztcbmltcG9ydCB7IGNvbXBhcmVTZW12ZXIgfSBmcm9tICcuL3NlbXZlci1yYW5nZS5qcyc7XG5pbXBvcnQgdHlwZSB7IEhlYWx0aEJyZWFrZG93biB9IGZyb20gJy4uL2RhdGFiYXNlL2RyaXp6bGUtc2NoZW1hLmpzJztcbmltcG9ydCB7IHJlc3VsdFJvd3MgfSBmcm9tICcuLi9kYXRhYmFzZS9wZy1yZXN1bHQuanMnO1xuaW1wb3J0IHsgZ2V0UHVibGljUmVhZGVyRGIgfSBmcm9tICcuLi9kYXRhYmFzZS9wdWJsaWMtcmVhZGVyLmpzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFB1YmxpYyBjb250cmFjdCAobWlycm9ycyBmcm9udGVuZC9zcmMvbGliL3B1YmxpYy1kaXJlY3RvcnkvdHlwZXMudHMpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIERFUklWRUQgZnJvbSBhcGktY29yZSdzIGNhbm9uaWNhbCBgUFVCTElTSEVSX1RJRVJTYCwgbm90IHJlc3RhdGVkLlxuICpcbiAqIFRoaXMgd2FzIGEgaGFuZC13cml0dGVuIGNvcHkgb2YgdGhlIHNhbWUgZm91ciB2YWx1ZXMsIGFuZCB0aGUgY29weSBpcyB3aGF0XG4gKiB0aGUgcHVibGljIHJvdXRlJ3Mgem9kIGVudW0gdmFsaWRhdGVkIOKAlCB3aGlsZSB0aGUgdmlldyB0eXBlcyBpbiB0aGUgc2FtZVxuICogcGFja2FnZSBhbHJlYWR5IHVzZWQgYFB1Ymxpc2hlclRpZXJgLiBBIGZpZnRoIHRpZXIgd291bGQgaGF2ZSBiZWVuIHN0b3JlZCBhbmRcbiAqIGRpc3BsYXllZCBhbmQgdGhlbiBzaWxlbnRseSB1bmZpbHRlcmFibGUsIGJlY2F1c2UgdGhlIGZpbHRlciB3b3VsZCBzdGlsbCBvbmx5XG4gKiBhY2NlcHQgdGhlIGZvdXIgdGhpcyBsaXN0IHJlbWVtYmVyZWQuXG4gKi9cbmV4cG9ydCB0eXBlIERpcmVjdG9yeVRydXN0VGllciA9IFB1Ymxpc2hlclRpZXI7XG5cbmV4cG9ydCB0eXBlIERpcmVjdG9yeUljb25LaW5kID0gJ3ZlbmRvcicgfCAndXBsb2FkZWQnIHwgJ21vbm9ncmFtJyB8ICdjYXRlZ29yeSc7XG5leHBvcnQgdHlwZSBEaXJlY3RvcnlTb3J0ID0gJ3JlbGV2YW5jZScgfCAncmF0aW5nJyB8ICdpbnN0YWxscycgfCAndXBkYXRlZCcgfCAnbmFtZScgfCAnaGVhbHRoJztcblxuZXhwb3J0IGNvbnN0IERJUkVDVE9SWV9TT1JUUzogcmVhZG9ubHkgRGlyZWN0b3J5U29ydFtdID0gWydyZWxldmFuY2UnLCAncmF0aW5nJywgJ2luc3RhbGxzJywgJ3VwZGF0ZWQnLCAnbmFtZScsICdoZWFsdGgnXTtcblxuZXhwb3J0IGNvbnN0IERJUkVDVE9SWV9USUVSUzogcmVhZG9ubHkgRGlyZWN0b3J5VHJ1c3RUaWVyW10gPSBQVUJMSVNIRVJfVElFUlM7XG5cbi8qKiBNaW5pbXVtIGB3b3JkX3NpbWlsYXJpdHkocXVlcnksIG5hbWUpYCBmb3IgYSBmdXp6eSBuYW1lIG1hdGNoICh0eXBvIHRvbGVyYW5jZSkuICovXG5leHBvcnQgY29uc3QgRlVaWllfTkFNRV9USFJFU0hPTEQgPSAwLjM7XG5cbi8qKiBNYXggcXVlcnkgbGVuZ3RoIGFjY2VwdGVkIChsb25nZXIgaXMgdHJ1bmNhdGVkLCBuZXZlciBhbiBlcnJvcikuICovXG5leHBvcnQgY29uc3QgRElSRUNUT1JZX01BWF9RVUVSWV9MRU5HVEggPSAxMDA7XG5leHBvcnQgY29uc3QgRElSRUNUT1JZX0RFRkFVTFRfTElNSVQgPSAyNDtcbmV4cG9ydCBjb25zdCBESVJFQ1RPUllfTUFYX0xJTUlUID0gNjA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlyZWN0b3J5U2VhcmNoUGFyYW1zIHtcbiAgcT86IHN0cmluZztcbiAgY2F0ZWdvcnk/OiBzdHJpbmc7XG4gIHRpZXI/OiBEaXJlY3RvcnlUcnVzdFRpZXI7XG4gIGxpY2Vuc2U/OiBzdHJpbmc7XG4gIGNvbXB1dGVUeXBlPzogc3RyaW5nO1xuICBuZWVkc1NlY3JldHM/OiBib29sZWFuO1xuICBtaW5SYXRpbmc/OiBudW1iZXI7XG4gIHNvcnQ/OiBEaXJlY3RvcnlTb3J0O1xuICBjdXJzb3I/OiBzdHJpbmc7XG4gIGxpbWl0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpcmVjdG9yeUxpc3RpbmdDYXJkIHtcbiAgcHVibGlzaGVyOiB7IGhhbmRsZTogc3RyaW5nOyBkaXNwbGF5TmFtZTogc3RyaW5nOyB0aWVyOiBEaXJlY3RvcnlUcnVzdFRpZXIgfTtcbiAgbmFtZTogc3RyaW5nO1xuICBzdW1tYXJ5OiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIGtleXdvcmRzOiBzdHJpbmdbXTtcbiAgbGF0ZXN0VmVyc2lvbjogc3RyaW5nO1xuICBsaWNlbnNlOiBzdHJpbmc7XG4gIGljb25Vcmw6IHN0cmluZyB8IG51bGw7XG4gIGljb25LaW5kOiBEaXJlY3RvcnlJY29uS2luZDtcbiAgaWNvbktleTogc3RyaW5nIHwgbnVsbDtcbiAgaWNvbkhleDogc3RyaW5nIHwgbnVsbDtcbiAgaWNvbkJhZGdlOiBzdHJpbmcgfCBudWxsO1xuICByYXRpbmc6IHsgc2NvcmU6IG51bWJlcjsgY291bnQ6IG51bWJlciB9IHwgbnVsbDtcbiAgaW5zdGFsbENvdW50OiBudW1iZXI7XG4gIC8qKiAw4oCTMTAwIGhlYWx0aCBzY29yZTsgbnVsbCB3aGVuIGZld2VyIHRoYW4gdGhyZWUgY29tcG9uZW50cyBhcmUga25vd24uICovXG4gIGhlYWx0aFNjb3JlOiBudW1iZXIgfCBudWxsO1xuICB1cGRhdGVkQXQ6IHN0cmluZztcbiAgc3RhdGU6ICdsaXN0ZWQnIHwgJ3VubWFpbnRhaW5lZCc7XG4gIGhpZ2hsaWdodD86IHsgbmFtZT86IHN0cmluZzsgc3VtbWFyeT86IHN0cmluZyB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpcmVjdG9yeVNlYXJjaFJlc3VsdCB7XG4gIGl0ZW1zOiBEaXJlY3RvcnlMaXN0aW5nQ2FyZFtdO1xuICBmYWNldHM6IHtcbiAgICBjYXRlZ29yeTogUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcbiAgICB0aWVyOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuICAgIGxpY2Vuc2U6IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG4gICAgY29tcHV0ZVR5cGU6IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG4gICAgbmVlZHNTZWNyZXRzOiB7IHRydWU6IG51bWJlcjsgZmFsc2U6IG51bWJlciB9O1xuICB9O1xuICB0b3RhbDogbnVtYmVyO1xuICBuZXh0Q3Vyc29yOiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpcmVjdG9yeUNhdGVnb3J5U3VtbWFyeSB7XG4gIGlkOiBzdHJpbmc7XG4gIGNvdW50OiBudW1iZXI7XG4gIHRvcDogRGlyZWN0b3J5TGlzdGluZ0NhcmRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXJlY3RvcnlMaXN0aW5nVmVyc2lvbiB7XG4gIHZlcnNpb246IHN0cmluZztcbiAgcHVibGlzaGVkQXQ6IHN0cmluZztcbiAgYnJlYWtpbmc6IGJvb2xlYW47XG4gIGRlcHJlY2F0ZWQ6IGJvb2xlYW47XG4gIGRlcHJlY2F0aW9uTWVzc2FnZTogc3RyaW5nIHwgbnVsbDtcbiAgeWFua2VkOiBib29sZWFuO1xuICBjaGFuZ2Vsb2c6IHN0cmluZyB8IG51bGw7XG4gIHZ1bG5Dcml0aWNhbDogbnVtYmVyIHwgbnVsbDtcbiAgdnVsbkhpZ2g6IG51bWJlciB8IG51bGw7XG4gIC8qKlxuICAgKiBPZiB0aG9zZSwgdGhlIGZpbmRpbmdzIGdyeXBlIHJlcG9ydHMgYSBmaXhlZCB2ZXJzaW9uIGZvci5cbiAgICpcbiAgICogUkFXIFNDQU5ORVIgQ09VTlRTLCBkZWxpYmVyYXRlbHkg4oCUIHRoZXkgZGVzY3JpYmUgdGhlIElNQUdFLCBub3QgdGhlXG4gICAqIHBsYXRmb3JtJ3MgdmVyZGljdCBvbiBpdC4gVGhlIGZsb29yIHRoZSBidWlsZCBhbmQgcHVibGlzaCBnYXRlcyBhcHBseSBpc1xuICAgKiBgaXNHYXRlZEZpbmRpbmdgIChmaXhhYmxlIE9SIEtFVi1saXN0ZWQpIG1pbnVzIGFueSBvcGVyYXRvciB3YWl2ZXIsIGFuZFxuICAgKiBwdWJsaXNoaW5nIFRIQVQgbnVtYmVyIGhlcmUgd291bGQgYmUgd3JvbmcgaW4gYSB3YXkgdGhhdCBtYXR0ZXJzIHRvIGFcbiAgICogdGhpcmQgcGFydHk6IGEgQ3JpdGljYWwgdGhlIHZlbmRvciB3YWl2ZWQgZm9yIGl0cyBvd24gY2F0YWxvZyB3b3VsZCBiZVxuICAgKiBhZHZlcnRpc2VkIHRvIGV2ZXJ5b25lIGVsc2UgYXMgXCIwIENyaXRpY2FsXCIsIHdoZW4gdGhlIGltYWdlIHN0aWxsIGNvbnRhaW5zXG4gICAqIGl0IGFuZCB0aGVpciByaXNrIGlzIHVuY2hhbmdlZC4gQSB3YWl2ZXIgaXMgdGhlIHZlbmRvcidzIGRlY2lzaW9uIGFib3V0XG4gICAqIHRoZSB2ZW5kb3IncyBvd24gdXNlOyBpdCBpcyBub3QgYSBzdGF0ZW1lbnQgYWJvdXQgdGhlIGFydGlmYWN0LlxuICAgKlxuICAgKiBTbyB0aGUgY291bnRzIHN0YXkgdHJ1dGhmdWwgYW5kIHRoZSBWRVJESUNUIGlzIGRpc2Nsb3NlZCBzZXBhcmF0ZWx5IOKAlCBzZWVcbiAgICogYHNjYW5GbGFnZ2VkQXRgIGJlbG93LCB3aGljaCBpcyB3aGF0IHNheXMgdGhlIHBsYXRmb3JtIGdhdGVkIGl0LlxuICAgKi9cbiAgdnVsbkNyaXRpY2FsRml4YWJsZTogbnVtYmVyIHwgbnVsbDtcbiAgdnVsbkhpZ2hGaXhhYmxlOiBudW1iZXIgfCBudWxsO1xuICBzY2FubmVkQXQ6IHN0cmluZyB8IG51bGw7XG4gIC8qKlxuICAgKiBXaGVuIHRoZSBuaWdodGx5IHJlc2NhbiBmbGFnZ2VkIHRoaXMgdmVyc2lvbiDigJQgdGhlIHBsYXRmb3JtJ3Mgb3duIHZlcmRpY3QsXG4gICAqIHdoaWNoIGlzIHdhaXZlci0gYW5kIEtFVi1hd2FyZSAoYGlzR2F0ZWRGaW5kaW5nYCkuIE51bGwgPSBub3QgZmxhZ2dlZC5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgZmllbGQgdG8gcmVhZCBmb3IgXCJkaWQgdGhlIHBsYXRmb3JtIGdhdGUgdGhpc1wiLCBhbmQgdGhlIGNvdW50c1xuICAgKiBhYm92ZSBmb3IgXCJ3aGF0IGRvZXMgdGhlIGltYWdlIGNvbnRhaW5cIi4gVGhleSBjYW4gbGVnaXRpbWF0ZWx5IGRpc2FncmVlOiBhXG4gICAqIHdhaXZlZCBDcml0aWNhbCBsZWF2ZXMgYSBub24temVybyBjb3VudCBhbmQgbm8gZmxhZywgYW5kIGEgS0VWLWxpc3RlZFxuICAgKiBVTkZJWEFCTEUgQ3JpdGljYWwgbGVhdmVzIGB2dWxuQ3JpdGljYWxGaXhhYmxlOiAwYCBhbmQgYSBmbGFnLlxuICAgKi9cbiAgc2NhbkZsYWdnZWRBdDogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIElkcyBvZiB0aGUgcHVibGlzaGVkIGFkdmlzb3JpZXMgd2hvc2UgcmFuZ2UgY292ZXJzIHRoaXMgdmVyc2lvbi4gKi9cbiAgYWR2aXNvcnlJZHM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpcmVjdG9yeUxpc3RpbmdEZXRhaWwgZXh0ZW5kcyBEaXJlY3RvcnlMaXN0aW5nQ2FyZCB7XG4gIHJlYWRtZUh0bWw6IHN0cmluZyB8IG51bGw7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGhvbWVwYWdlVXJsOiBzdHJpbmcgfCBudWxsO1xuICBzb3VyY2VVcmw6IHN0cmluZyB8IG51bGw7XG4gIHZlcnNpb25zOiBEaXJlY3RvcnlMaXN0aW5nVmVyc2lvbltdO1xuICBjb25maWd1cmF0aW9uOiB7XG4gICAgc2VjcmV0czogeyBuYW1lOiBzdHJpbmc7IHJlcXVpcmVkOiBib29sZWFuOyBkZXNjcmlwdGlvbjogc3RyaW5nIH1bXTtcbiAgICByZXF1aXJlZE1ldGFkYXRhOiBzdHJpbmdbXTtcbiAgICByZXF1aXJlZFZhcnM6IHN0cmluZ1tdO1xuICAgIGNvbXB1dGVUeXBlOiBzdHJpbmc7XG4gICAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogc3RyaW5nIHwgbnVsbDtcbiAgICBuZXR3b3JrRWdyZXNzOiBzdHJpbmdbXTtcbiAgICBwbHVnaW5UeXBlOiBzdHJpbmc7XG4gIH07XG4gIHN1cHBseUNoYWluOiB7XG4gICAgc2lnbmVkOiBib29sZWFuO1xuICAgIGRpZ2VzdDogc3RyaW5nIHwgbnVsbDtcbiAgICBpbWFnZVNvdXJjZTogc3RyaW5nIHwgbnVsbDtcbiAgICBzY2FubmVkQXQ6IHN0cmluZyB8IG51bGw7XG4gICAgdnVsbkNyaXRpY2FsOiBudW1iZXIgfCBudWxsO1xuICAgIHZ1bG5IaWdoOiBudW1iZXIgfCBudWxsO1xuICAgIHZ1bG5Dcml0aWNhbEZpeGFibGU6IG51bWJlciB8IG51bGw7XG4gICAgdnVsbkhpZ2hGaXhhYmxlOiBudW1iZXIgfCBudWxsO1xuICAgIHNjYW5GbGFnZ2VkQXQ6IHN0cmluZyB8IG51bGw7XG4gICAgc2JvbVVybDogc3RyaW5nIHwgbnVsbDtcbiAgfTtcbiAgYWR2aXNvcmllczoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgc2V2ZXJpdHk6IHN0cmluZztcbiAgICBzdW1tYXJ5OiBzdHJpbmc7XG4gICAgYWZmZWN0ZWRSYW5nZTogc3RyaW5nO1xuICAgIGZpeGVkVmVyc2lvbjogc3RyaW5nIHwgbnVsbDtcbiAgICBwdWJsaXNoZWRBdDogc3RyaW5nO1xuICAgIC8qKiBTZXJ2ZXItc2FuaXRpemVkIEhUTUwgKHRoZSBzdG9yZWQgcmVuZGVyIG9mIHRoZSBkZXRhaWxzIG1hcmtkb3duKS4gKi9cbiAgICBkZXRhaWxzSHRtbDogc3RyaW5nIHwgbnVsbDtcbiAgICBjdmVJZHM6IHN0cmluZ1tdO1xuICB9W107XG4gIHJhdGluZ0Rpc3RyaWJ1dGlvbjogUmVjb3JkPCcxJyB8ICcyJyB8ICczJyB8ICc0JyB8ICc1JywgbnVtYmVyPiB8IG51bGw7XG4gIC8qKiBUaGUgQmF5ZXNpYW4gcmF0aW5nIG92ZXIgcmV2aWV3cyBvZiB0aGUgbGFzdCB0d28gbWlub3IgdmVyc2lvbnMuICovXG4gIHJlY2VudFJhdGluZzogbnVtYmVyIHwgbnVsbDtcbiAgYWN0aXZlT3JnQ291bnQ6IG51bWJlciB8IG51bGw7XG4gIC8qKiBQZXItY29tcG9uZW50IGhlYWx0aCBzY29yZXMgYmVoaW5kIHtAbGluayBEaXJlY3RvcnlMaXN0aW5nQ2FyZC5oZWFsdGhTY29yZX0uICovXG4gIGhlYWx0aEJyZWFrZG93bjogSGVhbHRoQnJlYWtkb3duIHwgbnVsbDtcbiAgLyoqIDMwLWRheSBydW50aW1lIHN1Y2Nlc3MgcmF0ZSAoMC4uMSksIG9yIG51bGwgd2l0aCBubyBydW5zLiAqL1xuICBzdWNjZXNzUmF0ZTMwZDogbnVtYmVyIHwgbnVsbDtcbn1cblxuZXhwb3J0IHR5cGUgUmV2aWV3U29ydCA9ICdoZWxwZnVsJyB8ICdyZWNlbnQnIHwgJ2hpZ2hlc3QnIHwgJ2xvd2VzdCc7XG5leHBvcnQgY29uc3QgUkVWSUVXX1NPUlRTOiByZWFkb25seSBSZXZpZXdTb3J0W10gPSBbJ2hlbHBmdWwnLCAncmVjZW50JywgJ2hpZ2hlc3QnLCAnbG93ZXN0J107XG5leHBvcnQgY29uc3QgUkVWSUVXU19ERUZBVUxUX0xJTUlUID0gMTA7XG5leHBvcnQgY29uc3QgUkVWSUVXU19NQVhfTElNSVQgPSA1MDtcblxuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNSZXZpZXdSZXBseSB7XG4gIGJvZHlIdG1sOiBzdHJpbmc7XG4gIHB1Ymxpc2hlckRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cGRhdGVkQXQ6IHN0cmluZztcbn1cblxuLyoqIE9uZSBwdWJsaXNoZWQgcmV2aWV3IGFzIHRoZSBkaXJlY3Rvcnkgc2hvd3MgaXQ6IGRpc3BsYXkgbmFtZSBvbmx5LCBuZXZlciBhbiBvcmcuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY1Jldmlld0l0ZW0ge1xuICBpZDogc3RyaW5nO1xuICByYXRpbmc6IG51bWJlcjtcbiAgdGl0bGU6IHN0cmluZyB8IG51bGw7XG4gIGJvZHlIdG1sOiBzdHJpbmcgfCBudWxsO1xuICB2ZXJzaW9uOiBzdHJpbmcgfCBudWxsO1xuICAvKiogTnVsbCBvbmNlIHRoZSBhdXRob3IncyBhY2NvdW50IHdhcyBkZWxldGVkICh0aGUgcmV2aWV3IGlzIGFub255bWl6ZWQpLiAqL1xuICBhdXRob3I6IHsgZGlzcGxheU5hbWU6IHN0cmluZyB9IHwgbnVsbDtcbiAgdmVyaWZpZWRVc2U6IGJvb2xlYW47XG4gIGhlbHBmdWxDb3VudDogbnVtYmVyO1xuICBlZGl0ZWQ6IGJvb2xlYW47XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cGRhdGVkQXQ6IHN0cmluZztcbiAgcmVwbHk6IFB1YmxpY1Jldmlld1JlcGx5IHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNSZXZpZXdQYWdlIHtcbiAgcmV2aWV3czogUHVibGljUmV2aWV3SXRlbVtdO1xuICB0b3RhbDogbnVtYmVyO1xuICBuZXh0Q3Vyc29yOiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY1Jldmlld1F1ZXJ5IHtcbiAgc29ydD86IFJldmlld1NvcnQ7XG4gIC8qKiBPbmx5IHJldmlld3Mgd2l0aCBleGFjdGx5IHRoaXMgbWFueSBzdGFycy4gKi9cbiAgcmF0aW5nPzogbnVtYmVyO1xuICBjdXJzb3I/OiBzdHJpbmc7XG4gIGxpbWl0PzogbnVtYmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUm93IG1hcHBpbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBBIGBwdWJsaWNfbGlzdGluZ3NgIHJvdyBhcyB0aGUgcmF3IHF1ZXJpZXMgcmV0dXJuIGl0IChzbmFrZV9jYXNlKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljTGlzdGluZ1JvdyB7XG4gIGlkOiBzdHJpbmc7XG4gIHB1Ymxpc2hlcl9oYW5kbGU6IHN0cmluZztcbiAgcHVibGlzaGVyX2Rpc3BsYXlfbmFtZTogc3RyaW5nO1xuICBwdWJsaXNoZXJfdGllcjogRGlyZWN0b3J5VHJ1c3RUaWVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIHN1bW1hcnk6IHN0cmluZyB8IG51bGw7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCBudWxsO1xuICByZWFkbWVfaHRtbDogc3RyaW5nIHwgbnVsbDtcbiAgbGljZW5zZTogc3RyaW5nIHwgbnVsbDtcbiAgaG9tZXBhZ2VfdXJsOiBzdHJpbmcgfCBudWxsO1xuICBzb3VyY2VfdXJsOiBzdHJpbmcgfCBudWxsO1xuICBpY29uOiB7IGtleTogc3RyaW5nOyBiYWRnZT86IHN0cmluZyB9IHwgbnVsbDtcbiAgdXBsb2FkZWRfaWNvbjogeyBrZXkyNTY6IHN0cmluZzsga2V5NjQ6IHN0cmluZyB9IHwgbnVsbDtcbiAga2V5d29yZHM6IHN0cmluZ1tdIHwgbnVsbDtcbiAgbGF0ZXN0X3ZlcnNpb246IHN0cmluZyB8IG51bGw7XG4gIHVwZGF0ZWRfYXQ6IERhdGUgfCBzdHJpbmc7XG4gIHJhdGluZ19iYXllczogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbDtcbiAgcmF0aW5nX2NvdW50OiBudW1iZXIgfCBzdHJpbmc7XG4gIHJhdGluZ19kaXN0OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+IHwgbnVsbDtcbiAgcmVjZW50X3JhdGluZz86IG51bWJlciB8IHN0cmluZyB8IG51bGw7XG4gIGluc3RhbGxfY291bnQ6IG51bWJlciB8IHN0cmluZztcbiAgYWN0aXZlX29yZ19jb3VudDogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbDtcbiAgaGVhbHRoX3Njb3JlPzogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbDtcbiAgaGVhbHRoX2JyZWFrZG93bj86IEhlYWx0aEJyZWFrZG93biB8IG51bGw7XG4gIHN1Y2Nlc3NfcmF0ZV8zMGQ/OiBudW1iZXIgfCBzdHJpbmcgfCBudWxsO1xuICBzdGF0ZTogJ2xpc3RlZCcgfCAndW5tYWludGFpbmVkJztcbn1cblxuZnVuY3Rpb24gbnVtKHY6IG51bWJlciB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBudW1iZXIge1xuICBjb25zdCBuID0gdHlwZW9mIHYgPT09ICdudW1iZXInID8gdiA6IE51bWJlci5wYXJzZUZsb2F0KFN0cmluZyh2ID8/ICcwJykpO1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG4pID8gbiA6IDA7XG59XG5cbmZ1bmN0aW9uIGlzbyh2OiBEYXRlIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIGlmICghdikgcmV0dXJuICcnO1xuICByZXR1cm4gdiBpbnN0YW5jZW9mIERhdGUgPyB2LnRvSVNPU3RyaW5nKCkgOiBuZXcgRGF0ZSh2KS50b0lTT1N0cmluZygpO1xufVxuXG4vKipcbiAqIFRoZSBpY29uIGZhbGxiYWNrIGNoYWluOiB1cGxvYWRlZCAoaWYgdGhlIHRpZXIgbWF5IHVwbG9hZCkg4oaSIGN1cmF0ZWRcbiAqIHZlbmRvciBrZXkgKE9mZmljaWFsLCBhbmQgVmVyaWZpZWQgcHVibGlzaGVycyBmb3IgbWFya3MgdGhleSBvd24g4oCUIG93bmVyc2hpcFxuICogaXMgY2hlY2tlZCB3aGVuIHRoZSBpY29uIGlzIGFwcHJvdmVkKSDihpIgbW9ub2dyYW0uIENvbW11bml0eSBhbmQgYW5vbnltb3VzXG4gKiBsaXN0aW5ncyBjYW4gbmV2ZXIgc2hvdyBhIGN1cmF0ZWQgdmVuZG9yIG1hcmsuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTGlzdGluZ0ljb24ocm93OiBQaWNrPFB1YmxpY0xpc3RpbmdSb3csICdwdWJsaXNoZXJfdGllcicgfCAnaWNvbicgfCAndXBsb2FkZWRfaWNvbic+KTogUGljazxcbiAgRGlyZWN0b3J5TGlzdGluZ0NhcmQsICdpY29uS2luZCcgfCAnaWNvblVybCcgfCAnaWNvbktleScgfCAnaWNvbkJhZGdlJyB8ICdpY29uSGV4J1xuPiB7XG4gIGNvbnN0IG5vbmUgPSB7IGljb25Vcmw6IG51bGwsIGljb25LZXk6IG51bGwsIGljb25CYWRnZTogbnVsbCwgaWNvbkhleDogbnVsbCB9O1xuICBpZiAocm93LnVwbG9hZGVkX2ljb24/LmtleTI1Nikge1xuICAgIHJldHVybiB7IC4uLm5vbmUsIGljb25LaW5kOiAndXBsb2FkZWQnLCBpY29uVXJsOiBgL2FwaS9wdWJsaWMvcGx1Z2lucy9pY29ucy8ke2VuY29kZVVSSUNvbXBvbmVudChyb3cudXBsb2FkZWRfaWNvbi5rZXkyNTYpfWAgfTtcbiAgfVxuICBjb25zdCBjdXJhdGVkQWxsb3dlZCA9IHJvdy5wdWJsaXNoZXJfdGllciA9PT0gJ29mZmljaWFsJyB8fCByb3cucHVibGlzaGVyX3RpZXIgPT09ICd2ZXJpZmllZCc7XG4gIGlmIChjdXJhdGVkQWxsb3dlZCAmJiByb3cuaWNvbj8ua2V5KSB7XG4gICAgcmV0dXJuIHsgLi4ubm9uZSwgaWNvbktpbmQ6ICd2ZW5kb3InLCBpY29uS2V5OiByb3cuaWNvbi5rZXksIGljb25CYWRnZTogcm93Lmljb24uYmFkZ2UgPz8gbnVsbCB9O1xuICB9XG4gIHJldHVybiB7IC4uLm5vbmUsIGljb25LaW5kOiAnbW9ub2dyYW0nIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0xpc3RpbmdDYXJkKHJvdzogUHVibGljTGlzdGluZ1Jvdyk6IERpcmVjdG9yeUxpc3RpbmdDYXJkIHtcbiAgY29uc3QgcmF0aW5nQ291bnQgPSBudW0ocm93LnJhdGluZ19jb3VudCk7XG4gIHJldHVybiB7XG4gICAgcHVibGlzaGVyOiB7IGhhbmRsZTogcm93LnB1Ymxpc2hlcl9oYW5kbGUsIGRpc3BsYXlOYW1lOiByb3cucHVibGlzaGVyX2Rpc3BsYXlfbmFtZSwgdGllcjogcm93LnB1Ymxpc2hlcl90aWVyIH0sXG4gICAgbmFtZTogcm93Lm5hbWUsXG4gICAgc3VtbWFyeTogcm93LnN1bW1hcnkgPz8gJycsXG4gICAgY2F0ZWdvcnk6IHJvdy5jYXRlZ29yeSxcbiAgICBrZXl3b3Jkczogcm93LmtleXdvcmRzID8/IFtdLFxuICAgIGxhdGVzdFZlcnNpb246IHJvdy5sYXRlc3RfdmVyc2lvbiA/PyAnJyxcbiAgICBsaWNlbnNlOiByb3cubGljZW5zZSA/PyAnJyxcbiAgICAuLi5yZXNvbHZlTGlzdGluZ0ljb24ocm93KSxcbiAgICByYXRpbmc6IHJhdGluZ0NvdW50ID4gMCAmJiByb3cucmF0aW5nX2JheWVzICE9IG51bGwgPyB7IHNjb3JlOiBNYXRoLnJvdW5kKG51bShyb3cucmF0aW5nX2JheWVzKSAqIDEwMCkgLyAxMDAsIGNvdW50OiByYXRpbmdDb3VudCB9IDogbnVsbCxcbiAgICBpbnN0YWxsQ291bnQ6IG51bShyb3cuaW5zdGFsbF9jb3VudCksXG4gICAgaGVhbHRoU2NvcmU6IHJvdy5oZWFsdGhfc2NvcmUgPT0gbnVsbCA/IG51bGwgOiBNYXRoLnJvdW5kKG51bShyb3cuaGVhbHRoX3Njb3JlKSksXG4gICAgdXBkYXRlZEF0OiBpc28ocm93LnVwZGF0ZWRfYXQpLFxuICAgIHN0YXRlOiByb3cuc3RhdGUsXG4gIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTZWFyY2hcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBOb3JtYWxpemUgdGhlIHVzZXIncyBxdWVyeTogY29sbGFwc2Ugd2hpdGVzcGFjZSwgY2FwIHRoZSBsZW5ndGguICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUXVlcnkocTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgcmV0dXJuIChxID8/ICcnKS5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpLnNsaWNlKDAsIERJUkVDVE9SWV9NQVhfUVVFUllfTEVOR1RIKTtcbn1cblxuLyoqIFNlYXJjaCB0ZXJtcyBmb3IgaGlnaGxpZ2h0aW5nOiB3b3JkcyBvZiDiiaUgMiBjaGFyYWN0ZXJzLCByZWdleC1lc2NhcGVkLiAqL1xuZnVuY3Rpb24gaGlnaGxpZ2h0VGVybXMocTogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gWy4uLm5ldyBTZXQocS50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXmEtejAtOS5fLV0rLykuZmlsdGVyKCh0KSA9PiB0Lmxlbmd0aCA+PSAyKSldXG4gICAgLm1hcCgodCkgPT4gdC5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpKTtcbn1cblxuLyoqXG4gKiBXcmFwIG1hdGNoZWQgdGVybXMgaW4gYDxtYXJrPmAuIFRoZSBmcm9udGVuZCByZW5kZXJzIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZVxuICogYDxtYXJrPmAgbWFya2VycyBhcyBURVhUIChuZXZlciBIVE1MKSwgc28gdGhlIHNvdXJjZSB0ZXh0IGlzIG5vdCBlc2NhcGVkIGhlcmUuXG4gKiBSZXR1cm5zIHVuZGVmaW5lZCB3aGVuIG5vdGhpbmcgbWF0Y2hlZCAodGhlIGNhcmQgdGhlbiByZW5kZXJzIHBsYWluIHRleHQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGlnaGxpZ2h0VGV4dCh0ZXh0OiBzdHJpbmcsIHE6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHRlcm1zID0gaGlnaGxpZ2h0VGVybXMocSk7XG4gIGlmICghdGV4dCB8fCB0ZXJtcy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgKCR7dGVybXMuam9pbignfCcpfSlgLCAnZ2knKTtcbiAgaWYgKCFyZS50ZXN0KHRleHQpKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gdGV4dC5yZXBsYWNlKHJlLCAnPG1hcms+JDE8L21hcms+Jyk7XG59XG5cbi8qKiBPcGFxdWUgY3Vyc29yOiBhbiBvZmZzZXQsIGJhc2U2NHVybC1lbmNvZGVkIHNvIGNsaWVudHMgZG9uJ3QgZGVwZW5kIG9uIGl0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZU9mZnNldEN1cnNvcihvZmZzZXQ6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeSh7IG86IG9mZnNldCB9KSkudG9TdHJpbmcoJ2Jhc2U2NHVybCcpO1xufVxuXG4vKipcbiAqIEhvdyBkZWVwIHRoZSBkaXJlY3RvcnkgbWF5IGJlIHBhZ2VkLiBBIGJvdW5kIG9uIGVudW1lcmF0aW9uLCBub3QgYSBwYWdlIHNpemU6XG4gKiBwYXN0IGl0IHRoZSBkZWNvZGVyIHJlZnVzZXMgdGhlIGN1cnNvciwgc28gYSBjYWxsZXIgY2Fubm90IHdhbGsgdGhlIHdob2xlXG4gKiBjYXRhbG9nIGJ5IGluY3JlbWVudGluZyBhbiBvZmZzZXQuXG4gKi9cbmV4cG9ydCBjb25zdCBNQVhfRElSRUNUT1JZX09GRlNFVCA9IDEwXzAwMDtcblxuLyoqIFRoZSBmYWNldCBidWNrZXQgZm9yIHJvd3Mgd2hvc2UgbnVsbGFibGUga2V5IGlzIE5VTEwg4oCUIHNlZSB0aGUgZmFjZXQgbG9vcC4gKi9cbmV4cG9ydCBjb25zdCBGQUNFVF9OT05FID0gJyhub25lKSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVPZmZzZXRDdXJzb3IoY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBudW1iZXIge1xuICBpZiAoIWN1cnNvcikgcmV0dXJuIDA7XG4gIHRyeSB7XG4gICAgY29uc3QgbyA9IChKU09OLnBhcnNlKEJ1ZmZlci5mcm9tKGN1cnNvciwgJ2Jhc2U2NHVybCcpLnRvU3RyaW5nKCd1dGY4JykpIGFzIHsgbz86IHVua25vd24gfSkubztcbiAgICByZXR1cm4gdHlwZW9mIG8gPT09ICdudW1iZXInICYmIE51bWJlci5pc0ludGVnZXIobykgJiYgbyA+PSAwICYmIG8gPD0gTUFYX0RJUkVDVE9SWV9PRkZTRVQgPyBvIDogMDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xhbXBMaW1pdChsaW1pdDogbnVtYmVyIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcbiAgaWYgKCFsaW1pdCB8fCAhTnVtYmVyLmlzRmluaXRlKGxpbWl0KSkgcmV0dXJuIERJUkVDVE9SWV9ERUZBVUxUX0xJTUlUO1xuICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoTWF0aC50cnVuYyhsaW1pdCksIDEpLCBESVJFQ1RPUllfTUFYX0xJTUlUKTtcbn1cblxuLyoqXG4gKiBUaGUgZmlsdGVyZWQgYmFzZSBzZXQgYXMgYSBDVEUgYm9keS4gRXZlcnkgc2VhcmNoLCBmYWNldCBhbmQgY2F0ZWdvcnkgcXVlcnlcbiAqIHJlYWRzIHRocm91Z2ggdGhpcywgc28gdGhleSBjYW4ndCBkaXNhZ3JlZSBhYm91dCB3aGF0J3MgdmlzaWJsZS5cbiAqL1xuZnVuY3Rpb24gYmFzZVF1ZXJ5KHBhcmFtczogRGlyZWN0b3J5U2VhcmNoUGFyYW1zLCBxOiBzdHJpbmcpOiBTUUwge1xuICAvLyBDYW4gbGVnaXRpbWF0ZWx5IGJlIEVNUFRZOiBhbiB1bmZpbHRlcmVkIGJyb3dzZSBvZiB0aGUgZGlyZWN0b3J5LiBJdCBuZXZlclxuICAvLyBjb3VsZCBiZSBiZWZvcmUsIGJlY2F1c2UgYGwucGF1c2VkX2F0IElTIE5VTExgIHdhcyBhbHdheXMgcHVzaGVkIGZpcnN0IOKAlFxuICAvLyB0aGUgdmlldyBvd25zIHRoYXQgbm93LCBzbyB0aGUgYFdIRVJFYCBpdHNlbGYgaGFzIHRvIGJlY29tZSBjb25kaXRpb25hbCBvclxuICAvLyBhbiB1bmZpbHRlcmVkIHNlYXJjaCBlbWl0cyBhIGJhcmUgYFdIRVJFYCBhbmQgZmFpbHMgdG8gcGFyc2UuXG4gIGNvbnN0IHdoZXJlOiBTUUxbXSA9IFtdO1xuICBpZiAocSkge1xuICAgIC8vIEZ1bGwgdGV4dCwgT1IgYSBmdXp6eSBtYXRjaCBhZ2FpbnN0IHRoZSBiZXN0LW1hdGNoaW5nIFBBUlQgb2YgdGhlIG5hbWVcbiAgICAvLyAod29yZF9zaW1pbGFyaXR5OiBcInRlcmFmcm9tXCIg4oaSIHRlcnJhZm9ybS1wbGFuIHNjb3JlcyAwLjM2LCB3aGlsZSB1bnJlbGF0ZWRcbiAgICAvLyB3b3JkcyBzdGF5IOKJpCAwLjIg4oCUIHdob2xlLW5hbWUgc2ltaWxhcml0eSgpIGRpbHV0ZXMgYSBsb25nIG5hbWUgYmVsb3cgYW55XG4gICAgLy8gdXNlZnVsIHRocmVzaG9sZCkuIEV4cGxpY2l0IGZ1bmN0aW9uLCBub3QgdGhlIGA8JWAgb3BlcmF0b3IsIHNvIHRoZSBjdXQtb2ZmXG4gICAgLy8gZG9lc24ndCBkZXBlbmQgb24gYSBzZXNzaW9uIEdVQyBwZ2JvdW5jZXIgY2FuJ3QgY2FycnkuIEEgc2VxIHNjYW4gb3ZlciB0aGVcbiAgICAvLyBwdWJsaWMgbGlzdGluZ3MgKHRob3VzYW5kcyBvZiByb3dzIGF0IG1vc3QpIGlzIGZpbmUuXG4gICAgd2hlcmUucHVzaChzcWxgKGwuc2VhcmNoX3ZlY3RvciBAQCB3ZWJzZWFyY2hfdG9fdHNxdWVyeSgnZW5nbGlzaCcsICR7cX0pIE9SIHdvcmRfc2ltaWxhcml0eSgke3F9LCBsLm5hbWUpID49ICR7RlVaWllfTkFNRV9USFJFU0hPTER9IE9SIGwubmFtZSBJTElLRSAke2AlJHtxLnJlcGxhY2UoL1tcXFxcJV9dL2csICdcXFxcJCYnKX0lYH0pYCk7XG4gIH1cbiAgaWYgKHBhcmFtcy5jYXRlZ29yeSkgd2hlcmUucHVzaChzcWxgbC5jYXRlZ29yeSA9ICR7cGFyYW1zLmNhdGVnb3J5fWApO1xuICBpZiAocGFyYW1zLnRpZXIpIHdoZXJlLnB1c2goc3FsYGwucHVibGlzaGVyX3RpZXIgPSAke3BhcmFtcy50aWVyfWApO1xuICBpZiAocGFyYW1zLmxpY2Vuc2UpIHdoZXJlLnB1c2goc3FsYGwubGljZW5zZSA9ICR7cGFyYW1zLmxpY2Vuc2V9YCk7XG4gIGlmIChwYXJhbXMuY29tcHV0ZVR5cGUpIHdoZXJlLnB1c2goc3FsYHYuY29tcHV0ZV90eXBlID0gJHtwYXJhbXMuY29tcHV0ZVR5cGV9YCk7XG4gIGlmIChwYXJhbXMubmVlZHNTZWNyZXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICB3aGVyZS5wdXNoKHBhcmFtcy5uZWVkc1NlY3JldHNcbiAgICAgID8gc3FsYGpzb25iX2FycmF5X2xlbmd0aChDT0FMRVNDRSh2LnNlY3JldHMsICdbXSc6Ompzb25iKSkgPiAwYFxuICAgICAgOiBzcWxganNvbmJfYXJyYXlfbGVuZ3RoKENPQUxFU0NFKHYuc2VjcmV0cywgJ1tdJzo6anNvbmIpKSA9IDBgKTtcbiAgfVxuICBpZiAocGFyYW1zLm1pblJhdGluZyAhPT0gdW5kZWZpbmVkICYmIE51bWJlci5pc0Zpbml0ZShwYXJhbXMubWluUmF0aW5nKSkge1xuICAgIHdoZXJlLnB1c2goc3FsYGwucmF0aW5nX2JheWVzID49ICR7cGFyYW1zLm1pblJhdGluZ31gKTtcbiAgfVxuICBjb25zdCByYW5rID0gcVxuICAgID8gc3FsYCh0c19yYW5rKGwuc2VhcmNoX3ZlY3Rvciwgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAke3F9KSkgKyB3b3JkX3NpbWlsYXJpdHkoJHtxfSwgbC5uYW1lKSlgXG4gICAgOiBzcWxgMDo6cmVhbGA7XG4gIHJldHVybiBzcWxgXG4gICAgU0VMRUNUIGwuaWQsIGwucHVibGlzaGVyX2hhbmRsZSwgbC5wdWJsaXNoZXJfZGlzcGxheV9uYW1lLCBsLnB1Ymxpc2hlcl90aWVyLCBsLm5hbWUsIGwuY2F0ZWdvcnksXG4gICAgICAgICAgIGwuc3VtbWFyeSwgbC5kZXNjcmlwdGlvbiwgbC5yZWFkbWVfaHRtbCwgbC5saWNlbnNlLCBsLmhvbWVwYWdlX3VybCwgbC5zb3VyY2VfdXJsLCBsLmljb24sXG4gICAgICAgICAgIGwudXBsb2FkZWRfaWNvbiwgbC5rZXl3b3JkcywgbC5sYXRlc3RfdmVyc2lvbiwgbC51cGRhdGVkX2F0LCBsLnJhdGluZ19iYXllcywgbC5yYXRpbmdfY291bnQsXG4gICAgICAgICAgIGwucmF0aW5nX2Rpc3QsIGwuaW5zdGFsbF9jb3VudCwgbC5hY3RpdmVfb3JnX2NvdW50LCBsLmhlYWx0aF9zY29yZSwgbC5zdGF0ZSxcbiAgICAgICAgICAgdi5jb21wdXRlX3R5cGUsXG4gICAgICAgICAgIChqc29uYl9hcnJheV9sZW5ndGgoQ09BTEVTQ0Uodi5zZWNyZXRzLCAnW10nOjpqc29uYikpID4gMCkgQVMgbmVlZHNfc2VjcmV0cyxcbiAgICAgICAgICAgJHtyYW5rfSBBUyByYW5rXG4gICAgICBGUk9NIHB1YmxpY19saXN0aW5ncyBsXG4gICAgICBMRUZUIEpPSU4gTEFURVJBTCAoXG4gICAgICAgIFNFTEVDVCBwdi5jb21wdXRlX3R5cGUsIHB2LnNlY3JldHNcbiAgICAgICAgICBGUk9NIHB1YmxpY19saXN0ZWRfdmVyc2lvbnMgcHZcbiAgICAgICAgIFdIRVJFIHB2Lmxpc3RpbmdfaWQgPSBsLmlkIEFORCBwdi52ZXJzaW9uID0gbC5sYXRlc3RfdmVyc2lvbiBBTkQgTk9UIHB2LnlhbmtlZFxuICAgICAgICAgTElNSVQgMVxuICAgICAgKSB2IE9OIHRydWVcbiAgICAgJHt3aGVyZS5sZW5ndGggPiAwID8gc3FsYFdIRVJFICR7c3FsLmpvaW4od2hlcmUsIHNxbGAgQU5EIGApfWAgOiBzcWxgYH1gO1xufVxuXG5mdW5jdGlvbiBvcmRlckJ5KHNvcnQ6IERpcmVjdG9yeVNvcnQsIGhhc1F1ZXJ5OiBib29sZWFuKTogU1FMIHtcbiAgc3dpdGNoIChzb3J0ID09PSAncmVsZXZhbmNlJyAmJiAhaGFzUXVlcnkgPyAndXBkYXRlZCcgOiBzb3J0KSB7XG4gICAgY2FzZSAncmVsZXZhbmNlJzpcbiAgICAgIC8vIFRleHQgcmVsZXZhbmNlIGZpcnN0LCBudWRnZWQgYnkgcmF0aW5nIGFuZCBhZG9wdGlvbiBzbyBlcXVhbCBtYXRjaGVzXG4gICAgICAvLyBmYXZvdXIgcHJvdmVuIHBsdWdpbnMuXG4gICAgICByZXR1cm4gc3FsYChyYW5rICogKDEgKyBDT0FMRVNDRShyYXRpbmdfYmF5ZXMsIDApIC8gMTApICsgbG4oMSArIGluc3RhbGxfY291bnQpIC8gMjApIERFU0MsIG5hbWUgQVNDYDtcbiAgICBjYXNlICdyYXRpbmcnOlxuICAgICAgcmV0dXJuIHNxbGByYXRpbmdfYmF5ZXMgREVTQyBOVUxMUyBMQVNULCByYXRpbmdfY291bnQgREVTQywgbmFtZSBBU0NgO1xuICAgIGNhc2UgJ2luc3RhbGxzJzpcbiAgICAgIHJldHVybiBzcWxgaW5zdGFsbF9jb3VudCBERVNDLCBuYW1lIEFTQ2A7XG4gICAgY2FzZSAnbmFtZSc6XG4gICAgICByZXR1cm4gc3FsYG5hbWUgQVNDLCBwdWJsaXNoZXJfaGFuZGxlIEFTQ2A7XG4gICAgY2FzZSAnaGVhbHRoJzpcbiAgICAgIHJldHVybiBzcWxgaGVhbHRoX3Njb3JlIERFU0MgTlVMTFMgTEFTVCwgaW5zdGFsbF9jb3VudCBERVNDLCBuYW1lIEFTQ2A7XG4gICAgY2FzZSAndXBkYXRlZCc6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzcWxgdXBkYXRlZF9hdCBERVNDLCBuYW1lIEFTQ2A7XG4gIH1cbn1cblxuLyoqIFNlYXJjaCB0aGUgZGlyZWN0b3J5OiBvbmUgcGFnZSBvZiBjYXJkcywgZmFjZXQgY291bnRzLCB0b3RhbCBhbmQgbmV4dCBjdXJzb3IuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VhcmNoUHVibGljTGlzdGluZ3MocGFyYW1zOiBEaXJlY3RvcnlTZWFyY2hQYXJhbXMpOiBQcm9taXNlPERpcmVjdG9yeVNlYXJjaFJlc3VsdD4ge1xuICBjb25zdCBkYiA9IGdldFB1YmxpY1JlYWRlckRiKCk7XG4gIGNvbnN0IHEgPSBub3JtYWxpemVRdWVyeShwYXJhbXMucSk7XG4gIGNvbnN0IGxpbWl0ID0gY2xhbXBMaW1pdChwYXJhbXMubGltaXQpO1xuICBjb25zdCBvZmZzZXQgPSBkZWNvZGVPZmZzZXRDdXJzb3IocGFyYW1zLmN1cnNvcik7XG4gIGNvbnN0IHNvcnQgPSBwYXJhbXMuc29ydCAmJiBESVJFQ1RPUllfU09SVFMuaW5jbHVkZXMocGFyYW1zLnNvcnQpID8gcGFyYW1zLnNvcnQgOiAncmVsZXZhbmNlJztcbiAgY29uc3QgYmFzZSA9IGJhc2VRdWVyeShwYXJhbXMsIHEpO1xuXG4gIGNvbnN0IFtwYWdlUmVzLCBmYWNldFJlc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgZGIuZXhlY3V0ZShzcWxgXG4gICAgICBXSVRIIGJhc2UgQVMgKCR7YmFzZX0pXG4gICAgICBTRUxFQ1QgYmFzZS4qLCBDT1VOVCgqKSBPVkVSICgpIEFTIHRvdGFsXG4gICAgICAgIEZST00gYmFzZVxuICAgICAgIE9SREVSIEJZICR7b3JkZXJCeShzb3J0LCBxICE9PSAnJyl9XG4gICAgICAgTElNSVQgJHtsaW1pdH0gT0ZGU0VUICR7b2Zmc2V0fWApLFxuICAgIGRiLmV4ZWN1dGUoc3FsYFxuICAgICAgV0lUSCBiYXNlIEFTICgke2Jhc2V9KVxuICAgICAgU0VMRUNUIGNhdGVnb3J5LCBwdWJsaXNoZXJfdGllciwgbGljZW5zZSwgY29tcHV0ZV90eXBlLCBuZWVkc19zZWNyZXRzLFxuICAgICAgICAgICAgIEdST1VQSU5HKGNhdGVnb3J5KSBBUyBnX2NhdGVnb3J5LCBHUk9VUElORyhwdWJsaXNoZXJfdGllcikgQVMgZ190aWVyLFxuICAgICAgICAgICAgIEdST1VQSU5HKGxpY2Vuc2UpIEFTIGdfbGljZW5zZSwgR1JPVVBJTkcoY29tcHV0ZV90eXBlKSBBUyBnX2NvbXB1dGUsXG4gICAgICAgICAgICAgR1JPVVBJTkcobmVlZHNfc2VjcmV0cykgQVMgZ19zZWNyZXRzLFxuICAgICAgICAgICAgIENPVU5UKCopIEFTIG5cbiAgICAgICAgRlJPTSBiYXNlXG4gICAgICAgR1JPVVAgQlkgR1JPVVBJTkcgU0VUUyAoKGNhdGVnb3J5KSwgKHB1Ymxpc2hlcl90aWVyKSwgKGxpY2Vuc2UpLCAoY29tcHV0ZV90eXBlKSwgKG5lZWRzX3NlY3JldHMpKWApLFxuICBdKTtcblxuICBjb25zdCBwYWdlID0gcmVzdWx0Um93czxQdWJsaWNMaXN0aW5nUm93ICYgeyB0b3RhbDogbnVtYmVyIHwgc3RyaW5nIH0+KHBhZ2VSZXMpO1xuICBjb25zdCB0b3RhbCA9IHBhZ2UubGVuZ3RoID4gMCA/IG51bShwYWdlWzBdIS50b3RhbCkgOiAwO1xuICBjb25zdCBpdGVtcyA9IHBhZ2UubWFwKChyb3cpID0+IHtcbiAgICBjb25zdCBjYXJkID0gdG9MaXN0aW5nQ2FyZChyb3cpO1xuICAgIGlmIChxKSB7XG4gICAgICBjb25zdCBoaWdobGlnaHQgPSB7IG5hbWU6IGhpZ2hsaWdodFRleHQoY2FyZC5uYW1lLCBxKSwgc3VtbWFyeTogaGlnaGxpZ2h0VGV4dChjYXJkLnN1bW1hcnksIHEpIH07XG4gICAgICBpZiAoaGlnaGxpZ2h0Lm5hbWUgfHwgaGlnaGxpZ2h0LnN1bW1hcnkpIGNhcmQuaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0O1xuICAgIH1cbiAgICByZXR1cm4gY2FyZDtcbiAgfSk7XG5cbiAgY29uc3QgZmFjZXRzOiBEaXJlY3RvcnlTZWFyY2hSZXN1bHRbJ2ZhY2V0cyddID0ge1xuICAgIGNhdGVnb3J5OiB7fSwgdGllcjoge30sIGxpY2Vuc2U6IHt9LCBjb21wdXRlVHlwZToge30sIG5lZWRzU2VjcmV0czogeyB0cnVlOiAwLCBmYWxzZTogMCB9LFxuICB9O1xuICB0eXBlIEZhY2V0Um93ID0ge1xuICAgIGNhdGVnb3J5OiBzdHJpbmcgfCBudWxsO1xuICAgIHB1Ymxpc2hlcl90aWVyOiBzdHJpbmcgfCBudWxsO1xuICAgIGxpY2Vuc2U6IHN0cmluZyB8IG51bGw7XG4gICAgY29tcHV0ZV90eXBlOiBzdHJpbmcgfCBudWxsO1xuICAgIG5lZWRzX3NlY3JldHM6IGJvb2xlYW4gfCBudWxsO1xuICAgIGdfY2F0ZWdvcnk6IG51bWJlcjtcbiAgICBnX3RpZXI6IG51bWJlcjtcbiAgICBnX2xpY2Vuc2U6IG51bWJlcjtcbiAgICBnX2NvbXB1dGU6IG51bWJlcjtcbiAgICBnX3NlY3JldHM6IG51bWJlcjtcbiAgICBuOiBudW1iZXIgfCBzdHJpbmc7XG4gIH07XG4gIC8vIEEgTlVMTCBrZXkgaXMgYSByZWFsIGJ1Y2tldCwgbm90IGEgcm93IHRvIGRyb3AuIGBsaWNlbnNlYCBhbmRcbiAgLy8gYGNvbXB1dGVfdHlwZWAgYXJlIG51bGxhYmxlLCBhbmQgc2tpcHBpbmcgdGhlaXIgTlVMTCBncm91cHMgbWFkZSB0aGUgZmFjZXRzXG4gIC8vIHVucmVjb25jaWxhYmxlIHdpdGggYHRvdGFsYDogYSBsaXN0aW5nIHdpdGggbm8gbGljZW5zZSB3YXMgY291bnRlZCBpbiB0aGVcbiAgLy8gdG90YWwgYW5kIGluIG5vIGZhY2V0LCBzbyBhIGNsaWVudCBzdW1taW5nIHRoZSBidWNrZXRzIGNhbWUgdXAgc2hvcnQgd2l0aFxuICAvLyBub3RoaW5nIHRvIGV4cGxhaW4gdGhlIGdhcC4gYChub25lKWAgbmFtZXMgdGhlIGJ1Y2tldCB0aGUgcm93cyBhcmUgYWN0dWFsbHlcbiAgLy8gaW4g4oCUIGEgZmlsdGVyYWJsZSB2YWx1ZSwgYW5kIHZpc2libHkgZGlmZmVyZW50IGZyb20gYSBtaXNzaW5nIG9uZS5cbiAgZm9yIChjb25zdCByIG9mIHJlc3VsdFJvd3M8RmFjZXRSb3c+KGZhY2V0UmVzKSkge1xuICAgIGNvbnN0IG4gPSBudW0oci5uKTtcbiAgICBpZiAoTnVtYmVyKHIuZ19jYXRlZ29yeSkgPT09IDAgJiYgci5jYXRlZ29yeSkgZmFjZXRzLmNhdGVnb3J5W3IuY2F0ZWdvcnldID0gbjtcbiAgICBlbHNlIGlmIChOdW1iZXIoci5nX3RpZXIpID09PSAwICYmIHIucHVibGlzaGVyX3RpZXIpIGZhY2V0cy50aWVyW3IucHVibGlzaGVyX3RpZXJdID0gbjtcbiAgICBlbHNlIGlmIChOdW1iZXIoci5nX2xpY2Vuc2UpID09PSAwKSBmYWNldHMubGljZW5zZVtyLmxpY2Vuc2UgPz8gRkFDRVRfTk9ORV0gPSBuO1xuICAgIGVsc2UgaWYgKE51bWJlcihyLmdfY29tcHV0ZSkgPT09IDApIGZhY2V0cy5jb21wdXRlVHlwZVtyLmNvbXB1dGVfdHlwZSA/PyBGQUNFVF9OT05FXSA9IG47XG4gICAgZWxzZSBpZiAoTnVtYmVyKHIuZ19zZWNyZXRzKSA9PT0gMCAmJiByLm5lZWRzX3NlY3JldHMgIT09IG51bGwpIGZhY2V0cy5uZWVkc1NlY3JldHNbci5uZWVkc19zZWNyZXRzID8gJ3RydWUnIDogJ2ZhbHNlJ10gPSBuO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpdGVtcyxcbiAgICBmYWNldHMsXG4gICAgdG90YWwsXG4gICAgLy8gTkVWRVIgcGFzdCB0aGUgY2VpbGluZyB0aGUgZGVjb2RlciBlbmZvcmNlcy4gVGhpcyB1c2VkIHRvIGVtaXQgYSBjdXJzb3JcbiAgICAvLyBmb3IgYW55IGBvZmZzZXQgKyBpdGVtcy5sZW5ndGggPCB0b3RhbGAsIGluY2x1ZGluZyBvZmZzZXRzIGFib3ZlXG4gICAgLy8gTUFYX0RJUkVDVE9SWV9PRkZTRVQg4oCUIHdoaWNoIGBkZWNvZGVPZmZzZXRDdXJzb3JgIHRoZW4gcmVmdXNlcyBieVxuICAgIC8vIHJldHVybmluZyAwLiBBIGNsaWVudCBmb2xsb3dpbmcgYG5leHRDdXJzb3JgIGdvdCBQQUdFIE9ORSBiYWNrIGFuZCBsb29wZWRcbiAgICAvLyBmb3JldmVyLCB3aXRoIG5vIGVycm9yIGFuZCBubyB3YXkgdG8gdGVsbCBpdCBoYWQgc3RvcHBlZCBhZHZhbmNpbmcuXG4gICAgLy8gRW5kaW5nIHRoZSBwYWdlcyBhdCB0aGUgY2VpbGluZyBpcyB0aGUgaG9uZXN0IGFuc3dlcjogdGhlIGJvdW5kIGV4aXN0cyxcbiAgICAvLyBzbyBzYXkgc28gYnkgcnVubmluZyBvdXQgb2YgY3Vyc29yIHJhdGhlciB0aGFuIGJ5IHNpbGVudGx5IHJlc3RhcnRpbmcuXG4gICAgbmV4dEN1cnNvcjogb2Zmc2V0ICsgaXRlbXMubGVuZ3RoIDwgdG90YWwgJiYgb2Zmc2V0ICsgaXRlbXMubGVuZ3RoIDw9IE1BWF9ESVJFQ1RPUllfT0ZGU0VUXG4gICAgICA/IGVuY29kZU9mZnNldEN1cnNvcihvZmZzZXQgKyBpdGVtcy5sZW5ndGgpXG4gICAgICA6IG51bGwsXG4gIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDYXRlZ29yaWVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogRXZlcnkgY2F0ZWdvcnkgd2l0aCBpdHMgbGl2ZSBjb3VudCBhbmQgaXRzIHRvcCBsaXN0aW5ncyAoYnkgcmF0aW5nLCB0aGVuIGluc3RhbGxzKS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0UHVibGljQ2F0ZWdvcmllcyh0b3BQZXJDYXRlZ29yeSA9IDMpOiBQcm9taXNlPERpcmVjdG9yeUNhdGVnb3J5U3VtbWFyeVtdPiB7XG4gIGNvbnN0IGRiID0gZ2V0UHVibGljUmVhZGVyRGIoKTtcbiAgY29uc3QgcmVzID0gYXdhaXQgZGIuZXhlY3V0ZShzcWxgXG4gICAgV0lUSCByYW5rZWQgQVMgKFxuICAgICAgU0VMRUNUIGwuKixcbiAgICAgICAgICAgICBST1dfTlVNQkVSKCkgT1ZFUiAoUEFSVElUSU9OIEJZIGwuY2F0ZWdvcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1JERVIgQlkgbC5yYXRpbmdfYmF5ZXMgREVTQyBOVUxMUyBMQVNULCBsLmluc3RhbGxfY291bnQgREVTQywgbC5uYW1lIEFTQykgQVMgcm4sXG4gICAgICAgICAgICAgQ09VTlQoKikgT1ZFUiAoUEFSVElUSU9OIEJZIGwuY2F0ZWdvcnkpIEFTIGNhdGVnb3J5X2NvdW50XG4gICAgICAgIEZST00gcHVibGljX2xpc3RpbmdzIGxcbiAgICApXG4gICAgU0VMRUNUICogRlJPTSByYW5rZWQgV0hFUkUgcm4gPD0gJHtNYXRoLm1heCgwLCBNYXRoLm1pbih0b3BQZXJDYXRlZ29yeSwgMTApKX0gT1JERVIgQlkgY2F0ZWdvcnkgQVNDLCBybiBBU0NgKTtcblxuICBjb25zdCBieUNhdGVnb3J5ID0gbmV3IE1hcDxzdHJpbmcsIERpcmVjdG9yeUNhdGVnb3J5U3VtbWFyeT4oKTtcbiAgZm9yIChjb25zdCByb3cgb2YgcmVzdWx0Um93czxQdWJsaWNMaXN0aW5nUm93ICYgeyBjYXRlZ29yeV9jb3VudDogbnVtYmVyIHwgc3RyaW5nIH0+KHJlcykpIHtcbiAgICBsZXQgc3VtbWFyeSA9IGJ5Q2F0ZWdvcnkuZ2V0KHJvdy5jYXRlZ29yeSk7XG4gICAgaWYgKCFzdW1tYXJ5KSB7XG4gICAgICBzdW1tYXJ5ID0geyBpZDogcm93LmNhdGVnb3J5LCBjb3VudDogbnVtKHJvdy5jYXRlZ29yeV9jb3VudCksIHRvcDogW10gfTtcbiAgICAgIGJ5Q2F0ZWdvcnkuc2V0KHJvdy5jYXRlZ29yeSwgc3VtbWFyeSk7XG4gICAgfVxuICAgIHN1bW1hcnkudG9wLnB1c2godG9MaXN0aW5nQ2FyZChyb3cpKTtcbiAgfVxuICByZXR1cm4gWy4uLmJ5Q2F0ZWdvcnkudmFsdWVzKCldO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gT25lIGxpc3Rpbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnR5cGUgVmVyc2lvblJvdyA9IHtcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBwdWJsaXNoZWRfYXQ6IERhdGUgfCBzdHJpbmc7XG4gIGJyZWFraW5nOiBib29sZWFuO1xuICBkZXByZWNhdGVkX2F0OiBEYXRlIHwgc3RyaW5nIHwgbnVsbDtcbiAgZGVwcmVjYXRpb25fbWVzc2FnZTogc3RyaW5nIHwgbnVsbDtcbiAgeWFua2VkOiBib29sZWFuO1xuICBjaGFuZ2Vsb2c6IHN0cmluZyB8IG51bGw7XG4gIHZ1bG5fY3JpdGljYWw6IG51bWJlciB8IG51bGw7XG4gIHZ1bG5faGlnaDogbnVtYmVyIHwgbnVsbDtcbiAgdnVsbl9jcml0aWNhbF9maXhhYmxlOiBudW1iZXIgfCBudWxsO1xuICB2dWxuX2hpZ2hfZml4YWJsZTogbnVtYmVyIHwgbnVsbDtcbiAgc2Nhbm5lZF9hdDogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gIHNjYW5fZmxhZ2dlZF9hdDogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gIC8qKiBUaGUgR0MgZGVsZXRlZCB0aGlzIHZlcnNpb24ncyBwdWJsaWMgaW1hZ2Ug4oCUIHNlZSBgc3VwcGx5Q2hhaW4uc2lnbmVkYC4gKi9cbiAgaW1hZ2VfY29sbGVjdGVkOiBib29sZWFuO1xuICBpbWFnZV9kaWdlc3Q6IHN0cmluZyB8IG51bGw7XG4gIGltYWdlX3NvdXJjZTogc3RyaW5nIHwgbnVsbDtcbiAgcGx1Z2luX3R5cGU6IHN0cmluZyB8IG51bGw7XG4gIGNvbXB1dGVfdHlwZTogc3RyaW5nIHwgbnVsbDtcbiAgc2VjcmV0czogeyBuYW1lOiBzdHJpbmc7IHJlcXVpcmVkOiBib29sZWFuOyBkZXNjcmlwdGlvbj86IHN0cmluZyB9W10gfCBudWxsO1xuICByZXF1aXJlZF9tZXRhZGF0YTogc3RyaW5nW10gfCBudWxsO1xuICByZXF1aXJlZF92YXJzOiBzdHJpbmdbXSB8IG51bGw7XG4gIG5ldHdvcmtfZWdyZXNzOiBzdHJpbmdbXSB8IG51bGw7XG4gIHJlYWRtZV9odG1sOiBzdHJpbmcgfCBudWxsO1xufTtcblxudHlwZSBBZHZpc29yeVJvdyA9IHtcbiAgaWQ6IHN0cmluZztcbiAgc2V2ZXJpdHk6IHN0cmluZztcbiAgc3VtbWFyeTogc3RyaW5nO1xuICBhZmZlY3RlZF9yYW5nZTogc3RyaW5nO1xuICBmaXhlZF92ZXJzaW9uOiBzdHJpbmcgfCBudWxsO1xuICBwdWJsaXNoZWRfYXQ6IERhdGUgfCBzdHJpbmcgfCBudWxsO1xuICBkZXRhaWxzX2h0bWw6IHN0cmluZyB8IG51bGw7XG4gIGN2ZV9pZHM6IHN0cmluZ1tdIHwgbnVsbDtcbn07XG5cbi8qKlxuICogT25lIGxpc3RpbmcncyBwYWdlIGRhdGEsIG9yIG51bGwgd2hlbiBpdCBpc24ndCBwdWJsaWMgKHVua25vd24sIHN1c3BlbmRlZCxcbiAqIHRyYW5zZmVycmVkLCBwYXVzZWQgYnkgaXRzIHB1Ymxpc2hlciDigJQgb3IgaXRzIHB1Ymxpc2hlciBpcyBzdXNwZW5kZWQpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UHVibGljTGlzdGluZyhwdWJsaXNoZXJIYW5kbGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUHJvbWlzZTxEaXJlY3RvcnlMaXN0aW5nRGV0YWlsIHwgbnVsbD4ge1xuICBjb25zdCBkYiA9IGdldFB1YmxpY1JlYWRlckRiKCk7XG4gIGNvbnN0IGxpc3RpbmdSZXMgPSBhd2FpdCBkYi5leGVjdXRlKHNxbGBcbiAgICBTRUxFQ1QgKiBGUk9NIHB1YmxpY19saXN0aW5nc1xuICAgICBXSEVSRSBwdWJsaXNoZXJfaGFuZGxlID0gJHtwdWJsaXNoZXJIYW5kbGV9IEFORCBuYW1lID0gJHtuYW1lfVxuICAgICBMSU1JVCAxYCk7XG4gIGNvbnN0IHJvdyA9IHJlc3VsdFJvd3M8UHVibGljTGlzdGluZ1Jvdz4obGlzdGluZ1JlcylbMF07XG4gIGlmICghcm93KSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBbdmVyc2lvblJlcywgYWR2aXNvcnlSZXNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGRiLmV4ZWN1dGUoc3FsYFNFTEVDVCAqIEZST00gcHVibGljX2xpc3RlZF92ZXJzaW9ucyBXSEVSRSBsaXN0aW5nX2lkID0gJHtyb3cuaWR9YCksXG4gICAgZGIuZXhlY3V0ZShzcWxgU0VMRUNUICogRlJPTSBwdWJsaWNfYWR2aXNvcmllcyBXSEVSRSBsaXN0aW5nX2lkID0gJHtyb3cuaWR9IE9SREVSIEJZIHB1Ymxpc2hlZF9hdCBERVNDYCksXG4gIF0pO1xuICBjb25zdCB2ZXJzaW9uUm93cyA9IHJlc3VsdFJvd3M8VmVyc2lvblJvdz4odmVyc2lvblJlcykuc29ydCgoYSwgYikgPT4gY29tcGFyZVNlbXZlcihiLnZlcnNpb24sIGEudmVyc2lvbikpO1xuICBjb25zdCBhZHZpc29yeVJvd3MgPSByZXN1bHRSb3dzPEFkdmlzb3J5Um93PihhZHZpc29yeVJlcyk7XG4gIC8vIFRoZSB2ZXJzaW9uIHRoZSBwYWdlIGRlc2NyaWJlczogdGhlIGxpc3RpbmcncyBsYXRlc3QsIGVsc2UgdGhlIG5ld2VzdCBub24teWFua2VkIG9uZS5cbiAgY29uc3QgY3VycmVudCA9IHZlcnNpb25Sb3dzLmZpbmQoKHYpID0+IHYudmVyc2lvbiA9PT0gcm93LmxhdGVzdF92ZXJzaW9uICYmICF2LnlhbmtlZClcbiAgICA/PyB2ZXJzaW9uUm93cy5maW5kKCh2KSA9PiAhdi55YW5rZWQpXG4gICAgPz8gbnVsbDtcblxuICBjb25zdCBkaXN0ID0gcm93LnJhdGluZ19kaXN0ID8/IG51bGw7XG4gIGNvbnN0IGNhcmQgPSB0b0xpc3RpbmdDYXJkKHJvdyk7XG4gIHJldHVybiB7XG4gICAgLi4uY2FyZCxcbiAgICByZWFkbWVIdG1sOiByb3cucmVhZG1lX2h0bWwgPz8gY3VycmVudD8ucmVhZG1lX2h0bWwgPz8gbnVsbCxcbiAgICBkZXNjcmlwdGlvbjogcm93LmRlc2NyaXB0aW9uID8/ICcnLFxuICAgIGhvbWVwYWdlVXJsOiByb3cuaG9tZXBhZ2VfdXJsLFxuICAgIHNvdXJjZVVybDogcm93LnNvdXJjZV91cmwsXG4gICAgdmVyc2lvbnM6IHZlcnNpb25Sb3dzLm1hcCgodikgPT4gKHtcbiAgICAgIHZlcnNpb246IHYudmVyc2lvbixcbiAgICAgIHB1Ymxpc2hlZEF0OiBpc28odi5wdWJsaXNoZWRfYXQpLFxuICAgICAgYnJlYWtpbmc6IHYuYnJlYWtpbmcsXG4gICAgICBkZXByZWNhdGVkOiB2LmRlcHJlY2F0ZWRfYXQgIT0gbnVsbCxcbiAgICAgIGRlcHJlY2F0aW9uTWVzc2FnZTogdi5kZXByZWNhdGlvbl9tZXNzYWdlLFxuICAgICAgeWFua2VkOiB2LnlhbmtlZCxcbiAgICAgIGNoYW5nZWxvZzogdi5jaGFuZ2Vsb2csXG4gICAgICB2dWxuQ3JpdGljYWw6IHYudnVsbl9jcml0aWNhbCxcbiAgICAgIHZ1bG5IaWdoOiB2LnZ1bG5faGlnaCxcbiAgICAgIHZ1bG5Dcml0aWNhbEZpeGFibGU6IHYudnVsbl9jcml0aWNhbF9maXhhYmxlID8/IG51bGwsXG4gICAgICB2dWxuSGlnaEZpeGFibGU6IHYudnVsbl9oaWdoX2ZpeGFibGUgPz8gbnVsbCxcbiAgICAgIHNjYW5uZWRBdDogdi5zY2FubmVkX2F0ID8gaXNvKHYuc2Nhbm5lZF9hdCkgOiBudWxsLFxuICAgICAgc2NhbkZsYWdnZWRBdDogdi5zY2FuX2ZsYWdnZWRfYXQgPyBpc28odi5zY2FuX2ZsYWdnZWRfYXQpIDogbnVsbCxcbiAgICAgIGFkdmlzb3J5SWRzOiBhZHZpc29yeVJvd3MuZmlsdGVyKChhKSA9PiBhZHZpc29yeVJhbmdlQ292ZXJzKGEuYWZmZWN0ZWRfcmFuZ2UsIHYudmVyc2lvbikpLm1hcCgoYSkgPT4gYS5pZCksXG4gICAgfSkpLFxuICAgIGNvbmZpZ3VyYXRpb246IHtcbiAgICAgIHNlY3JldHM6IChjdXJyZW50Py5zZWNyZXRzID8/IFtdKS5tYXAoKHMpID0+ICh7IG5hbWU6IHMubmFtZSwgcmVxdWlyZWQ6IHMucmVxdWlyZWQsIGRlc2NyaXB0aW9uOiBzLmRlc2NyaXB0aW9uID8/ICcnIH0pKSxcbiAgICAgIHJlcXVpcmVkTWV0YWRhdGE6IGN1cnJlbnQ/LnJlcXVpcmVkX21ldGFkYXRhID8/IFtdLFxuICAgICAgcmVxdWlyZWRWYXJzOiBjdXJyZW50Py5yZXF1aXJlZF92YXJzID8/IFtdLFxuICAgICAgY29tcHV0ZVR5cGU6IGN1cnJlbnQ/LmNvbXB1dGVfdHlwZSA/PyAnJyxcbiAgICAgIHByaW1hcnlPdXRwdXREaXJlY3Rvcnk6IG51bGwsXG4gICAgICBuZXR3b3JrRWdyZXNzOiBjdXJyZW50Py5uZXR3b3JrX2VncmVzcyA/PyBbXSxcbiAgICAgIHBsdWdpblR5cGU6IGN1cnJlbnQ/LnBsdWdpbl90eXBlID8/ICcnLFxuICAgIH0sXG4gICAgc3VwcGx5Q2hhaW46IHtcbiAgICAgIC8vIEEgbGlzdGVkIHZlcnNpb24gZXhpc3RzIG9ubHkgYWZ0ZXIgdGhlIHBsYXRmb3JtIHJlLXNpZ25lZCBpdCBpblxuICAgICAgLy8gcHVibGljLyosIHNvIGEgZGlnZXN0IG1lYW5zIGl0IFdBUyBzaWduZWQg4oCUIGJ1dCBub3QgdGhhdCB0aGUgaW1hZ2UgaXNcbiAgICAgIC8vIHN0aWxsIHRoZXJlLiBUaGUgR0MgZGVsZXRlcyBhIHlhbmtlZCB2ZXJzaW9uJ3MgcHVibGljIGltYWdlIGFuZCBzdGFtcHNcbiAgICAgIC8vIGBpbWFnZV9jb2xsZWN0ZWRfYXRgOyB0aGUgZGlnZXN0IGNvbHVtbiBvdXRsaXZlcyBpdCwgc28gZGVyaXZpbmdcbiAgICAgIC8vIGBzaWduZWRgIGZyb20gcHJlc2VuY2UgYWxvbmUga2VwdCBhZHZlcnRpc2luZyBhbiBhcnRpZmFjdCBub2JvZHkgY2FuXG4gICAgICAvLyBwdWxsLCB3aXRoIHZ1bG4gY291bnRzIGZyb3plbiBhdCB3aGF0ZXZlciB0aGUgbGFzdCBzY2FuIHNhdyAodGhlIHJlc2NhblxuICAgICAgLy8gc2tpcHMgY29sbGVjdGVkIGltYWdlcykgYW5kIG5vdGhpbmcgc2F5aW5nIHNvLlxuICAgICAgc2lnbmVkOiBjdXJyZW50Py5pbWFnZV9kaWdlc3QgIT0gbnVsbCAmJiAhY3VycmVudC5pbWFnZV9jb2xsZWN0ZWQsXG4gICAgICBkaWdlc3Q6IGN1cnJlbnQ/LmltYWdlX2RpZ2VzdCA/PyBudWxsLFxuICAgICAgaW1hZ2VTb3VyY2U6IGN1cnJlbnQ/LmltYWdlX3NvdXJjZSA/PyBudWxsLFxuICAgICAgc2Nhbm5lZEF0OiBjdXJyZW50Py5zY2FubmVkX2F0ID8gaXNvKGN1cnJlbnQuc2Nhbm5lZF9hdCkgOiBudWxsLFxuICAgICAgdnVsbkNyaXRpY2FsOiBjdXJyZW50Py52dWxuX2NyaXRpY2FsID8/IG51bGwsXG4gICAgICB2dWxuSGlnaDogY3VycmVudD8udnVsbl9oaWdoID8/IG51bGwsXG4gICAgICB2dWxuQ3JpdGljYWxGaXhhYmxlOiBjdXJyZW50Py52dWxuX2NyaXRpY2FsX2ZpeGFibGUgPz8gbnVsbCxcbiAgICAgIHZ1bG5IaWdoRml4YWJsZTogY3VycmVudD8udnVsbl9oaWdoX2ZpeGFibGUgPz8gbnVsbCxcbiAgICAgIHNjYW5GbGFnZ2VkQXQ6IGN1cnJlbnQ/LnNjYW5fZmxhZ2dlZF9hdCA/IGlzbyhjdXJyZW50LnNjYW5fZmxhZ2dlZF9hdCkgOiBudWxsLFxuICAgICAgLy8gU2FtZSBjb25kaXRpb246IHRoZSBTQk9NIGlzIHNlcnZlZCBGUk9NIHRoZSBpbWFnZSwgc28gb2ZmZXJpbmcgdGhlIGxpbmtcbiAgICAgIC8vIGZvciBhIGNvbGxlY3RlZCBvbmUgaXMgYSBkb3dubG9hZCB0aGF0IGNhbm5vdCBzdWNjZWVkLlxuICAgICAgc2JvbVVybDogY3VycmVudD8uaW1hZ2VfZGlnZXN0ICYmICFjdXJyZW50LmltYWdlX2NvbGxlY3RlZFxuICAgICAgICA/IGAvYXBpL3B1YmxpYy9wbHVnaW5zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHJvdy5wdWJsaXNoZXJfaGFuZGxlKX0vJHtlbmNvZGVVUklDb21wb25lbnQocm93Lm5hbWUpfS92ZXJzaW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChjdXJyZW50LnZlcnNpb24pfS9zYm9tYFxuICAgICAgICA6IG51bGwsXG4gICAgfSxcbiAgICBhZHZpc29yaWVzOiBhZHZpc29yeVJvd3MubWFwKChhKSA9PiAoe1xuICAgICAgaWQ6IGEuaWQsXG4gICAgICBzZXZlcml0eTogYS5zZXZlcml0eSxcbiAgICAgIHN1bW1hcnk6IGEuc3VtbWFyeSxcbiAgICAgIGFmZmVjdGVkUmFuZ2U6IGEuYWZmZWN0ZWRfcmFuZ2UsXG4gICAgICBmaXhlZFZlcnNpb246IGEuZml4ZWRfdmVyc2lvbixcbiAgICAgIHB1Ymxpc2hlZEF0OiBpc28oYS5wdWJsaXNoZWRfYXQpLFxuICAgICAgZGV0YWlsc0h0bWw6IGEuZGV0YWlsc19odG1sLFxuICAgICAgY3ZlSWRzOiBhLmN2ZV9pZHMgPz8gW10sXG4gICAgfSkpLFxuICAgIHJhdGluZ0Rpc3RyaWJ1dGlvbjogZGlzdFxuICAgICAgPyB7IDE6IG51bShkaXN0WycxJ10pLCAyOiBudW0oZGlzdFsnMiddKSwgMzogbnVtKGRpc3RbJzMnXSksIDQ6IG51bShkaXN0Wyc0J10pLCA1OiBudW0oZGlzdFsnNSddKSB9XG4gICAgICA6IG51bGwsXG4gICAgcmVjZW50UmF0aW5nOiByb3cucmVjZW50X3JhdGluZyA9PSBudWxsID8gbnVsbCA6IE1hdGgucm91bmQobnVtKHJvdy5yZWNlbnRfcmF0aW5nKSAqIDEwMCkgLyAxMDAsXG4gICAgYWN0aXZlT3JnQ291bnQ6IHJvdy5hY3RpdmVfb3JnX2NvdW50ID09IG51bGwgPyBudWxsIDogbnVtKHJvdy5hY3RpdmVfb3JnX2NvdW50KSxcbiAgICBoZWFsdGhCcmVha2Rvd246IHJvdy5oZWFsdGhfYnJlYWtkb3duID8/IG51bGwsXG4gICAgc3VjY2Vzc1JhdGUzMGQ6IHJvdy5zdWNjZXNzX3JhdGVfMzBkID09IG51bGwgPyBudWxsIDogTWF0aC5yb3VuZChudW0ocm93LnN1Y2Nlc3NfcmF0ZV8zMGQpICogMTAwMCkgLyAxMDAwLFxuICB9O1xufVxuXG4vKiogT25lIGxpc3RlZCB2ZXJzaW9uJ3MgcHVibGljIGltYWdlIGlkZW50aXR5IChmb3IgdGhlIFNCT00gZG93bmxvYWQpLCBvciBudWxsLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFB1YmxpY0xpc3RlZFZlcnNpb24oXG4gIHB1Ymxpc2hlckhhbmRsZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyxcbik6IFByb21pc2U8eyBpbWFnZVJlcG9zaXRvcnk6IHN0cmluZzsgaW1hZ2VEaWdlc3Q6IHN0cmluZyB9IHwgbnVsbD4ge1xuICBjb25zdCBkYiA9IGdldFB1YmxpY1JlYWRlckRiKCk7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGRiLmV4ZWN1dGUoc3FsYFxuICAgIFNFTEVDVCBpbWFnZV9yZXBvc2l0b3J5LCBpbWFnZV9kaWdlc3QgRlJPTSBwdWJsaWNfbGlzdGVkX3ZlcnNpb25zXG4gICAgIFdIRVJFIHB1Ymxpc2hlcl9oYW5kbGUgPSAke3B1Ymxpc2hlckhhbmRsZX0gQU5EIG5hbWUgPSAke25hbWV9IEFORCB2ZXJzaW9uID0gJHt2ZXJzaW9ufSBBTkQgTk9UIHlhbmtlZFxuICAgICBMSU1JVCAxYCk7XG4gIGNvbnN0IHJvdyA9IHJlc3VsdFJvd3M8eyBpbWFnZV9yZXBvc2l0b3J5OiBzdHJpbmcgfCBudWxsOyBpbWFnZV9kaWdlc3Q6IHN0cmluZyB8IG51bGwgfT4ocmVzKVswXTtcbiAgaWYgKCFyb3c/LmltYWdlX3JlcG9zaXRvcnkgfHwgIXJvdy5pbWFnZV9kaWdlc3QpIHJldHVybiBudWxsO1xuICByZXR1cm4geyBpbWFnZVJlcG9zaXRvcnk6IHJvdy5pbWFnZV9yZXBvc2l0b3J5LCBpbWFnZURpZ2VzdDogcm93LmltYWdlX2RpZ2VzdCB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmV2aWV3c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudHlwZSBSZXZpZXdSb3cgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZyB8IG51bGw7XG4gIHJhdGluZzogbnVtYmVyIHwgc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nIHwgbnVsbDtcbiAgYm9keV9odG1sOiBzdHJpbmcgfCBudWxsO1xuICBhdXRob3JfZGlzcGxheV9uYW1lOiBzdHJpbmcgfCBudWxsO1xuICB2ZXJpZmllZF91c2U6IGJvb2xlYW47XG4gIGhlbHBmdWxfY291bnQ6IG51bWJlciB8IHN0cmluZztcbiAgZWRpdGVkOiBib29sZWFuO1xuICBjcmVhdGVkX2F0OiBEYXRlIHwgc3RyaW5nO1xuICB1cGRhdGVkX2F0OiBEYXRlIHwgc3RyaW5nO1xuICBwdWJsaXNoZXJfZGlzcGxheV9uYW1lOiBzdHJpbmc7XG4gIHJlcGx5X2JvZHlfaHRtbDogc3RyaW5nIHwgbnVsbDtcbiAgcmVwbHlfY3JlYXRlZF9hdDogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gIHJlcGx5X3VwZGF0ZWRfYXQ6IERhdGUgfCBzdHJpbmcgfCBudWxsO1xuICB0b3RhbDogbnVtYmVyIHwgc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gcmV2aWV3T3JkZXIoc29ydDogUmV2aWV3U29ydCk6IFNRTCB7XG4gIHN3aXRjaCAoc29ydCkge1xuICAgIGNhc2UgJ3JlY2VudCc6IHJldHVybiBzcWxgY3JlYXRlZF9hdCBERVNDLCBpZCBBU0NgO1xuICAgIGNhc2UgJ2hpZ2hlc3QnOiByZXR1cm4gc3FsYHJhdGluZyBERVNDLCBoZWxwZnVsX2NvdW50IERFU0MsIGNyZWF0ZWRfYXQgREVTQywgaWQgQVNDYDtcbiAgICBjYXNlICdsb3dlc3QnOiByZXR1cm4gc3FsYHJhdGluZyBBU0MsIGhlbHBmdWxfY291bnQgREVTQywgY3JlYXRlZF9hdCBERVNDLCBpZCBBU0NgO1xuICAgIGNhc2UgJ2hlbHBmdWwnOlxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBWZXJpZmllZCB1c2UgYnJlYWtzIHRpZXM6IGFuIG9yZyB0aGF0IHJ1bnMgdGhlIHBsdWdpbiBrbm93cyBpdCBiZXN0LlxuICAgICAgcmV0dXJuIHNxbGBoZWxwZnVsX2NvdW50IERFU0MsIHZlcmlmaWVkX3VzZSBERVNDLCBjcmVhdGVkX2F0IERFU0MsIGlkIEFTQ2A7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvUHVibGljUmV2aWV3KHJvdzogT21pdDxSZXZpZXdSb3csICd0b3RhbCc+KTogUHVibGljUmV2aWV3SXRlbSB7XG4gIHJldHVybiB7XG4gICAgaWQ6IHJvdy5pZCxcbiAgICByYXRpbmc6IG51bShyb3cucmF0aW5nKSxcbiAgICB0aXRsZTogcm93LnRpdGxlLFxuICAgIGJvZHlIdG1sOiByb3cuYm9keV9odG1sLFxuICAgIHZlcnNpb246IHJvdy52ZXJzaW9uLFxuICAgIGF1dGhvcjogcm93LmF1dGhvcl9kaXNwbGF5X25hbWUgPyB7IGRpc3BsYXlOYW1lOiByb3cuYXV0aG9yX2Rpc3BsYXlfbmFtZSB9IDogbnVsbCxcbiAgICB2ZXJpZmllZFVzZTogcm93LnZlcmlmaWVkX3VzZSA9PT0gdHJ1ZSxcbiAgICBoZWxwZnVsQ291bnQ6IG51bShyb3cuaGVscGZ1bF9jb3VudCksXG4gICAgZWRpdGVkOiByb3cuZWRpdGVkID09PSB0cnVlLFxuICAgIGNyZWF0ZWRBdDogaXNvKHJvdy5jcmVhdGVkX2F0KSxcbiAgICB1cGRhdGVkQXQ6IGlzbyhyb3cudXBkYXRlZF9hdCksXG4gICAgcmVwbHk6IHJvdy5yZXBseV9ib2R5X2h0bWxcbiAgICAgID8ge1xuICAgICAgICBib2R5SHRtbDogcm93LnJlcGx5X2JvZHlfaHRtbCxcbiAgICAgICAgcHVibGlzaGVyRGlzcGxheU5hbWU6IHJvdy5wdWJsaXNoZXJfZGlzcGxheV9uYW1lLFxuICAgICAgICBjcmVhdGVkQXQ6IGlzbyhyb3cucmVwbHlfY3JlYXRlZF9hdCksXG4gICAgICAgIHVwZGF0ZWRBdDogaXNvKHJvdy5yZXBseV91cGRhdGVkX2F0KSxcbiAgICAgIH1cbiAgICAgIDogbnVsbCxcbiAgfTtcbn1cblxuLyoqXG4gKiBPbmUgcGFnZSBvZiBhIGxpc3RpbmcncyBwdWJsaXNoZWQgcmV2aWV3cyAodGhlIGRpcmVjdG9yeSdzIFJldmlld3MgdGFiKSwgb3IgbnVsbFxuICogd2hlbiB0aGUgbGlzdGluZyBpc24ndCBwdWJsaWMuIEhlbGQgYW5kIHJlbW92ZWQgcmV2aWV3cyBuZXZlciByZWFjaCB0aGUgdmlldy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RQdWJsaWNSZXZpZXdzKHB1Ymxpc2hlckhhbmRsZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHF1ZXJ5OiBQdWJsaWNSZXZpZXdRdWVyeSA9IHt9KTogUHJvbWlzZTxQdWJsaWNSZXZpZXdQYWdlIHwgbnVsbD4ge1xuICBjb25zdCBkYiA9IGdldFB1YmxpY1JlYWRlckRiKCk7XG4gIGNvbnN0IGxpc3RpbmcgPSByZXN1bHRSb3dzPHsgaWQ6IHN0cmluZyB9Pihhd2FpdCBkYi5leGVjdXRlKHNxbGBcbiAgICBTRUxFQ1QgaWQgRlJPTSBwdWJsaWNfbGlzdGluZ3NcbiAgICAgV0hFUkUgcHVibGlzaGVyX2hhbmRsZSA9ICR7cHVibGlzaGVySGFuZGxlfSBBTkQgbmFtZSA9ICR7bmFtZX1cbiAgICAgTElNSVQgMWApKVswXTtcbiAgaWYgKCFsaXN0aW5nKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBzb3J0ID0gcXVlcnkuc29ydCAmJiBSRVZJRVdfU09SVFMuaW5jbHVkZXMocXVlcnkuc29ydCkgPyBxdWVyeS5zb3J0IDogJ2hlbHBmdWwnO1xuICBjb25zdCBsaW1pdCA9ICFxdWVyeS5saW1pdCB8fCAhTnVtYmVyLmlzRmluaXRlKHF1ZXJ5LmxpbWl0KVxuICAgID8gUkVWSUVXU19ERUZBVUxUX0xJTUlUXG4gICAgOiBNYXRoLm1pbihNYXRoLm1heChNYXRoLnRydW5jKHF1ZXJ5LmxpbWl0KSwgMSksIFJFVklFV1NfTUFYX0xJTUlUKTtcbiAgY29uc3Qgb2Zmc2V0ID0gZGVjb2RlT2Zmc2V0Q3Vyc29yKHF1ZXJ5LmN1cnNvcik7XG4gIGNvbnN0IHdoZXJlOiBTUUxbXSA9IFtzcWxgbGlzdGluZ19pZCA9ICR7bGlzdGluZy5pZH1gXTtcbiAgaWYgKHF1ZXJ5LnJhdGluZyAhPT0gdW5kZWZpbmVkICYmIE51bWJlci5pc0ludGVnZXIocXVlcnkucmF0aW5nKSAmJiBxdWVyeS5yYXRpbmcgPj0gMSAmJiBxdWVyeS5yYXRpbmcgPD0gNSkge1xuICAgIHdoZXJlLnB1c2goc3FsYHJhdGluZyA9ICR7cXVlcnkucmF0aW5nfWApO1xuICB9XG4gIGNvbnN0IHJvd3MgPSByZXN1bHRSb3dzPFJldmlld1Jvdz4oYXdhaXQgZGIuZXhlY3V0ZShzcWxgXG4gICAgU0VMRUNUIGlkLCB2ZXJzaW9uLCByYXRpbmcsIHRpdGxlLCBib2R5X2h0bWwsIGF1dGhvcl9kaXNwbGF5X25hbWUsIHZlcmlmaWVkX3VzZSwgaGVscGZ1bF9jb3VudCwgZWRpdGVkLFxuICAgICAgICAgICBjcmVhdGVkX2F0LCB1cGRhdGVkX2F0LCBwdWJsaXNoZXJfZGlzcGxheV9uYW1lLCByZXBseV9ib2R5X2h0bWwsIHJlcGx5X2NyZWF0ZWRfYXQsIHJlcGx5X3VwZGF0ZWRfYXQsXG4gICAgICAgICAgIENPVU5UKCopIE9WRVIgKCkgQVMgdG90YWxcbiAgICAgIEZST00gcHVibGljX3Jldmlld3NcbiAgICAgV0hFUkUgJHtzcWwuam9pbih3aGVyZSwgc3FsYCBBTkQgYCl9XG4gICAgIE9SREVSIEJZICR7cmV2aWV3T3JkZXIoc29ydCl9XG4gICAgIExJTUlUICR7bGltaXR9IE9GRlNFVCAke29mZnNldH1gKSk7XG4gIGNvbnN0IHRvdGFsID0gcm93cy5sZW5ndGggPiAwID8gbnVtKHJvd3NbMF0hLnRvdGFsKSA6IDA7XG4gIHJldHVybiB7XG4gICAgcmV2aWV3czogcm93cy5tYXAodG9QdWJsaWNSZXZpZXcpLFxuICAgIHRvdGFsLFxuICAgIG5leHRDdXJzb3I6IG9mZnNldCArIHJvd3MubGVuZ3RoIDwgdG90YWwgPyBlbmNvZGVPZmZzZXRDdXJzb3Iob2Zmc2V0ICsgcm93cy5sZW5ndGgpIDogbnVsbCxcbiAgfTtcbn1cblxuLyoqIEV2ZXJ5IHB1YmxpYyBsaXN0aW5nJ3MgVVJMIHBhcnRzICsgbGFzdCB1cGRhdGUsIGZvciB0aGUgc2l0ZW1hcC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0UHVibGljTGlzdGluZ3NGb3JTaXRlbWFwKG1heCA9IDUwMDApOiBQcm9taXNlPHsgcHVibGlzaGVyOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgdXBkYXRlZEF0OiBzdHJpbmcgfVtdPiB7XG4gIGNvbnN0IGRiID0gZ2V0UHVibGljUmVhZGVyRGIoKTtcbiAgY29uc3QgcmVzID0gYXdhaXQgZGIuZXhlY3V0ZShzcWxgXG4gICAgU0VMRUNUIHB1Ymxpc2hlcl9oYW5kbGUsIG5hbWUsIHVwZGF0ZWRfYXQgRlJPTSBwdWJsaWNfbGlzdGluZ3NcbiAgICAgT1JERVIgQlkgdXBkYXRlZF9hdCBERVNDIExJTUlUICR7TWF0aC5taW4oTWF0aC5tYXgobWF4LCAxKSwgNTBfMDAwKX1gKTtcbiAgcmV0dXJuIHJlc3VsdFJvd3M8eyBwdWJsaXNoZXJfaGFuZGxlOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgdXBkYXRlZF9hdDogRGF0ZSB8IHN0cmluZyB9PihyZXMpXG4gICAgLm1hcCgocikgPT4gKHsgcHVibGlzaGVyOiByLnB1Ymxpc2hlcl9oYW5kbGUsIG5hbWU6IHIubmFtZSwgdXBkYXRlZEF0OiBpc28oci51cGRhdGVkX2F0KSB9KSk7XG59XG4iXX0=
479
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWRpcmVjdG9yeS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9wdWJsaWMtZGlyZWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFnQ3RDLE9BQU8sRUFBRSxHQUFHLEVBQVksTUFBTSxhQUFhLENBQUM7QUFFNUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWxELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQVNqRSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQTZCLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUUxSCxzRkFBc0Y7QUFDdEYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFDO0FBRXhDLHVFQUF1RTtBQUN2RSxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxHQUFHLENBQUM7QUFDOUMsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxDQUFDO0FBQzFDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztBQW1KdEMsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUEwQixDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzlGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztBQUN4QyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7QUEyRXBDLFNBQVMsR0FBRyxDQUFDLENBQXFDO0lBQ2hELE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxD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QUFNLEVBQUUsR0FBRyxpQkFBaUIsRUFBRSxDQUFDO0lBQy9CLE1BQU0sR0FBRyxHQUFHLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUE7O3NDQUVJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLE9BQU8sVUFBVSxDQUF3RSxHQUFHLENBQUM7U0FDMUYsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogUXVlcmllcyBiZWhpbmQgdGhlIGFub255bW91cyBwdWJsaWMgcGx1Z2luIGRpcmVjdG9yeVxuICogKGRvY3MvcGx1Z2luLXB1Ymxpc2hpbmcubWQpLlxuICpcbiAqIEV2ZXJ5IHF1ZXJ5IGhlcmUgcmVhZHMgT05MWSB0aGUgYHB1YmxpY19saXN0aW5nc2AsIGBwdWJsaWNfbGlzdGVkX3ZlcnNpb25zYCxcbiAqIGBwdWJsaWNfYWR2aXNvcmllc2AgYW5kIGBwdWJsaWNfcmV2aWV3c2Agdmlld3MsIHRocm91Z2ggdGhlIGBlY29zeXN0ZW1fcHVibGljX3JlYWRlcmBcbiAqIGNvbm5lY3Rpb24gKHtAbGluayBnZXRQdWJsaWNSZWFkZXJEYn0pLiBUaG9zZSB2aWV3cyBmaWx0ZXIgdG8gcHVibGljIHJvd3NcbiAqIChsaXN0ZWQvdW5tYWludGFpbmVkIGxpc3RpbmdzIG9mIG5vbi1zdXNwZW5kZWQgcHVibGlzaGVycywgbm9uLXBhdXNlZFxuICogbGlzdGluZ3MgYW5kIHZlcnNpb25zLCBwdWJsaXNoZWQgYWR2aXNvcmllcykgYW5kIHByb2plY3QgcHVibGljIGNvbHVtbnMgb25seSxcbiAqIHNvIG5vdGhpbmcgaGVyZSBuZWVkcyDigJQgb3IgaGFzIOKAlCBhIHRlbmFudCBjb250ZXh0LlxuICpcbiAqIFBBVVNFIElTIFRIRSBWSUVXUycgSk9CLCBhbmQgb25seSB0aGVpcnMuIEV2ZXJ5IHF1ZXJ5IGhlcmUgdXNlZCB0byByZXBlYXRcbiAqIGBsLnBhdXNlZF9hdCBJUyBOVUxMYCBiZWNhdXNlIHRocmVlIG9mIHRoZSBmb3VyIHZpZXdzIGRpZCBub3QgZmlsdGVyIGl0IOKAlFxuICogYHB1YmxpY19yZXZpZXdzYCBhbG9uZSBkaWQg4oCUIHNvIHRoZSBwcmVkaWNhdGUgbGl2ZWQgaW4gc2l4IHBsYWNlcyBhbmQgdGhlXG4gKiBoZWFkZXIgY2xhaW1lZCBhIGd1YXJhbnRlZSB0aGUgRERMIGRpZCBub3QgbWFrZS4gVGhlIHZpZXdzIG5vdyBmaWx0ZXIgaXQsXG4gKiB3aGljaCBpcyB0aGUgc2luZ2xlIHBsYWNlIGl0IGJlbG9uZ3M6IGEgcXVlcnkgYWRkZWQgbGF0ZXIgaW5oZXJpdHMgdGhlIHJ1bGVcbiAqIGluc3RlYWQgb2YgaGF2aW5nIHRvIHJlbWVtYmVyIGl0LCB3aGljaCBpcyBleGFjdGx5IHRoZSBmYWlsdXJlIHRoZSBzaXggY29waWVzXG4gKiB3ZXJlIGNvbXBlbnNhdGluZyBmb3IuXG4gKlxuICogVGhlIERETCBpbiBgcG9zdGdyZXMtaW5pdC5zcWxgIHJ1bnMgd2hlbiB0aGUgZGF0YWJhc2UgaXMgY3JlYXRlZCwgc28gdGhpcyBpc1xuICogdGhlIGNvbnRyYWN0IGZyb20gdGhlIGluc3RhbGwgZm9yd2FyZCByYXRoZXIgdGhhbiBzb21ldGhpbmcgbGF5ZXJlZCBvbi4gSXQgaXNcbiAqIHBpbm5lZCBwZXIgdmlldyBieSBgZWNvc3lzdGVtLXNjaGVtYS50ZXN0LnRzYC5cbiAqXG4gKiBTZWFyY2g6IFBvc3RncmVzIGZ1bGwtdGV4dCAoYHNlYXJjaF92ZWN0b3JgLCB3ZWlnaHRlZCBuYW1lIEEgLyBrZXl3b3JkcyBhbmRcbiAqIGNhdGVnb3J5IEIgLyBzdW1tYXJ5IEMgLyBSRUFETUUgRCwgYGVuZ2xpc2hgIGNvbmZpZykgT1IgYSB0cmlncmFtIG1hdGNoIG9uIHRoZVxuICogbmFtZSAodHlwbyB0b2xlcmFuY2UpLCByYW5rZWQgYnkgYHRzX3JhbmtgICsgbmFtZSBzaW1pbGFyaXR5LCBibGVuZGVkIHdpdGggdGhlXG4gKiBCYXllc2lhbiByYXRpbmcgYW5kIGluc3RhbGwgY291bnQgd2hlbiBwcmVzZW50LiBQYXVzZWQgbGlzdGluZ3MgYXJlIGhpZGRlbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFB1Ymxpc2hlclRpZXIgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBzcWwsIHR5cGUgU1FMIH0gZnJvbSAnZHJpenpsZS1vcm0nO1xuXG5pbXBvcnQgeyBhZHZpc29yeVJhbmdlQ292ZXJzIH0gZnJvbSAnLi9wbHVnaW4tYWR2aXNvcmllcy5qcyc7XG5pbXBvcnQgeyBjb21wYXJlU2VtdmVyIH0gZnJvbSAnLi9zZW12ZXItcmFuZ2UuanMnO1xuaW1wb3J0IHR5cGUgeyBIZWFsdGhCcmVha2Rvd24gfSBmcm9tICcuLi9kYXRhYmFzZS9kcml6emxlLXNjaGVtYS5qcyc7XG5pbXBvcnQgeyByZXN1bHRSb3dzIH0gZnJvbSAnLi4vZGF0YWJhc2UvcGctcmVzdWx0LmpzJztcbmltcG9ydCB7IGdldFB1YmxpY1JlYWRlckRiIH0gZnJvbSAnLi4vZGF0YWJhc2UvcHVibGljLXJlYWRlci5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQdWJsaWMgY29udHJhY3QgKG1pcnJvcnMgZnJvbnRlbmQvc3JjL2xpYi9wdWJsaWMtZGlyZWN0b3J5L3R5cGVzLnRzKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IHR5cGUgRGlyZWN0b3J5SWNvbktpbmQgPSAndmVuZG9yJyB8ICd1cGxvYWRlZCcgfCAnbW9ub2dyYW0nIHwgJ2NhdGVnb3J5JztcbmV4cG9ydCB0eXBlIERpcmVjdG9yeVNvcnQgPSAncmVsZXZhbmNlJyB8ICdyYXRpbmcnIHwgJ2luc3RhbGxzJyB8ICd1cGRhdGVkJyB8ICduYW1lJyB8ICdoZWFsdGgnO1xuXG5leHBvcnQgY29uc3QgRElSRUNUT1JZX1NPUlRTOiByZWFkb25seSBEaXJlY3RvcnlTb3J0W10gPSBbJ3JlbGV2YW5jZScsICdyYXRpbmcnLCAnaW5zdGFsbHMnLCAndXBkYXRlZCcsICduYW1lJywgJ2hlYWx0aCddO1xuXG4vKiogTWluaW11bSBgd29yZF9zaW1pbGFyaXR5KHF1ZXJ5LCBuYW1lKWAgZm9yIGEgZnV6enkgbmFtZSBtYXRjaCAodHlwbyB0b2xlcmFuY2UpLiAqL1xuZXhwb3J0IGNvbnN0IEZVWlpZX05BTUVfVEhSRVNIT0xEID0gMC4zO1xuXG4vKiogTWF4IHF1ZXJ5IGxlbmd0aCBhY2NlcHRlZCAobG9uZ2VyIGlzIHRydW5jYXRlZCwgbmV2ZXIgYW4gZXJyb3IpLiAqL1xuZXhwb3J0IGNvbnN0IERJUkVDVE9SWV9NQVhfUVVFUllfTEVOR1RIID0gMTAwO1xuZXhwb3J0IGNvbnN0IERJUkVDVE9SWV9ERUZBVUxUX0xJTUlUID0gMjQ7XG5leHBvcnQgY29uc3QgRElSRUNUT1JZX01BWF9MSU1JVCA9IDYwO1xuXG5leHBvcnQgaW50ZXJmYWNlIERpcmVjdG9yeVNlYXJjaFBhcmFtcyB7XG4gIHE/OiBzdHJpbmc7XG4gIGNhdGVnb3J5Pzogc3RyaW5nO1xuICB0aWVyPzogUHVibGlzaGVyVGllcjtcbiAgbGljZW5zZT86IHN0cmluZztcbiAgY29tcHV0ZVR5cGU/OiBzdHJpbmc7XG4gIG5lZWRzU2VjcmV0cz86IGJvb2xlYW47XG4gIG1pblJhdGluZz86IG51bWJlcjtcbiAgc29ydD86IERpcmVjdG9yeVNvcnQ7XG4gIGN1cnNvcj86IHN0cmluZztcbiAgbGltaXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlyZWN0b3J5TGlzdGluZ0NhcmQge1xuICBwdWJsaXNoZXI6IHsgaGFuZGxlOiBzdHJpbmc7IGRpc3BsYXlOYW1lOiBzdHJpbmc7IHRpZXI6IFB1Ymxpc2hlclRpZXIgfTtcbiAgbmFtZTogc3RyaW5nO1xuICBzdW1tYXJ5OiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIGtleXdvcmRzOiBzdHJpbmdbXTtcbiAgbGF0ZXN0VmVyc2lvbjogc3RyaW5nO1xuICBsaWNlbnNlOiBzdHJpbmc7XG4gIGljb25Vcmw6IHN0cmluZyB8IG51bGw7XG4gIGljb25LaW5kOiBEaXJlY3RvcnlJY29uS2luZDtcbiAgaWNvbktleTogc3RyaW5nIHwgbnVsbDtcbiAgaWNvbkhleDogc3RyaW5nIHwgbnVsbDtcbiAgaWNvbkJhZGdlOiBzdHJpbmcgfCBudWxsO1xuICByYXRpbmc6IHsgc2NvcmU6IG51bWJlcjsgY291bnQ6IG51bWJlciB9IHwgbnVsbDtcbiAgaW5zdGFsbENvdW50OiBudW1iZXI7XG4gIC8qKiAw4oCTMTAwIGhlYWx0aCBzY29yZTsgbnVsbCB3aGVuIGZld2VyIHRoYW4gdGhyZWUgY29tcG9uZW50cyBhcmUga25vd24uICovXG4gIGhlYWx0aFNjb3JlOiBudW1iZXIgfCBudWxsO1xuICB1cGRhdGVkQXQ6IHN0cmluZztcbiAgc3RhdGU6ICdsaXN0ZWQnIHwgJ3VubWFpbnRhaW5lZCc7XG4gIGhpZ2hsaWdodD86IHsgbmFtZT86IHN0cmluZzsgc3VtbWFyeT86IHN0cmluZyB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpcmVjdG9yeVNlYXJjaFJlc3VsdCB7XG4gIGl0ZW1zOiBEaXJlY3RvcnlMaXN0aW5nQ2FyZFtdO1xuICBmYWNldHM6IHtcbiAgICBjYXRlZ29yeTogUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcbiAgICB0aWVyOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuICAgIGxpY2Vuc2U6IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG4gICAgY29tcHV0ZVR5cGU6IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG4gICAgbmVlZHNTZWNyZXRzOiB7IHRydWU6IG51bWJlcjsgZmFsc2U6IG51bWJlciB9O1xuICB9O1xuICB0b3RhbDogbnVtYmVyO1xuICBuZXh0Q3Vyc29yOiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpcmVjdG9yeUNhdGVnb3J5U3VtbWFyeSB7XG4gIGlkOiBzdHJpbmc7XG4gIGNvdW50OiBudW1iZXI7XG4gIHRvcDogRGlyZWN0b3J5TGlzdGluZ0NhcmRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXJlY3RvcnlMaXN0aW5nVmVyc2lvbiB7XG4gIHZlcnNpb246IHN0cmluZztcbiAgcHVibGlzaGVkQXQ6IHN0cmluZztcbiAgYnJlYWtpbmc6IGJvb2xlYW47XG4gIGRlcHJlY2F0ZWQ6IGJvb2xlYW47XG4gIGRlcHJlY2F0aW9uTWVzc2FnZTogc3RyaW5nIHwgbnVsbDtcbiAgeWFua2VkOiBib29sZWFuO1xuICBjaGFuZ2Vsb2c6IHN0cmluZyB8IG51bGw7XG4gIHZ1bG5Dcml0aWNhbDogbnVtYmVyIHwgbnVsbDtcbiAgdnVsbkhpZ2g6IG51bWJlciB8IG51bGw7XG4gIC8qKlxuICAgKiBPZiB0aG9zZSwgdGhlIGZpbmRpbmdzIGdyeXBlIHJlcG9ydHMgYSBmaXhlZCB2ZXJzaW9uIGZvci5cbiAgICpcbiAgICogUkFXIFNDQU5ORVIgQ09VTlRTLCBkZWxpYmVyYXRlbHkg4oCUIHRoZXkgZGVzY3JpYmUgdGhlIElNQUdFLCBub3QgdGhlXG4gICAqIHBsYXRmb3JtJ3MgdmVyZGljdCBvbiBpdC4gVGhlIGZsb29yIHRoZSBidWlsZCBhbmQgcHVibGlzaCBnYXRlcyBhcHBseSBpc1xuICAgKiBgaXNHYXRlZEZpbmRpbmdgIChmaXhhYmxlIE9SIEtFVi1saXN0ZWQpIG1pbnVzIGFueSBvcGVyYXRvciB3YWl2ZXIsIGFuZFxuICAgKiBwdWJsaXNoaW5nIFRIQVQgbnVtYmVyIGhlcmUgd291bGQgYmUgd3JvbmcgaW4gYSB3YXkgdGhhdCBtYXR0ZXJzIHRvIGFcbiAgICogdGhpcmQgcGFydHk6IGEgQ3JpdGljYWwgdGhlIHZlbmRvciB3YWl2ZWQgZm9yIGl0cyBvd24gY2F0YWxvZyB3b3VsZCBiZVxuICAgKiBhZHZlcnRpc2VkIHRvIGV2ZXJ5b25lIGVsc2UgYXMgXCIwIENyaXRpY2FsXCIsIHdoZW4gdGhlIGltYWdlIHN0aWxsIGNvbnRhaW5zXG4gICAqIGl0IGFuZCB0aGVpciByaXNrIGlzIHVuY2hhbmdlZC4gQSB3YWl2ZXIgaXMgdGhlIHZlbmRvcidzIGRlY2lzaW9uIGFib3V0XG4gICAqIHRoZSB2ZW5kb3IncyBvd24gdXNlOyBpdCBpcyBub3QgYSBzdGF0ZW1lbnQgYWJvdXQgdGhlIGFydGlmYWN0LlxuICAgKlxuICAgKiBTbyB0aGUgY291bnRzIHN0YXkgdHJ1dGhmdWwgYW5kIHRoZSBWRVJESUNUIGlzIGRpc2Nsb3NlZCBzZXBhcmF0ZWx5IOKAlCBzZWVcbiAgICogYHNjYW5GbGFnZ2VkQXRgIGJlbG93LCB3aGljaCBpcyB3aGF0IHNheXMgdGhlIHBsYXRmb3JtIGdhdGVkIGl0LlxuICAgKi9cbiAgdnVsbkNyaXRpY2FsRml4YWJsZTogbnVtYmVyIHwgbnVsbDtcbiAgdnVsbkhpZ2hGaXhhYmxlOiBudW1iZXIgfCBudWxsO1xuICBzY2FubmVkQXQ6IHN0cmluZyB8IG51bGw7XG4gIC8qKlxuICAgKiBXaGVuIHRoZSBuaWdodGx5IHJlc2NhbiBmbGFnZ2VkIHRoaXMgdmVyc2lvbiDigJQgdGhlIHBsYXRmb3JtJ3Mgb3duIHZlcmRpY3QsXG4gICAqIHdoaWNoIGlzIHdhaXZlci0gYW5kIEtFVi1hd2FyZSAoYGlzR2F0ZWRGaW5kaW5nYCkuIE51bGwgPSBub3QgZmxhZ2dlZC5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgZmllbGQgdG8gcmVhZCBmb3IgXCJkaWQgdGhlIHBsYXRmb3JtIGdhdGUgdGhpc1wiLCBhbmQgdGhlIGNvdW50c1xuICAgKiBhYm92ZSBmb3IgXCJ3aGF0IGRvZXMgdGhlIGltYWdlIGNvbnRhaW5cIi4gVGhleSBjYW4gbGVnaXRpbWF0ZWx5IGRpc2FncmVlOiBhXG4gICAqIHdhaXZlZCBDcml0aWNhbCBsZWF2ZXMgYSBub24temVybyBjb3VudCBhbmQgbm8gZmxhZywgYW5kIGEgS0VWLWxpc3RlZFxuICAgKiBVTkZJWEFCTEUgQ3JpdGljYWwgbGVhdmVzIGB2dWxuQ3JpdGljYWxGaXhhYmxlOiAwYCBhbmQgYSBmbGFnLlxuICAgKi9cbiAgc2NhbkZsYWdnZWRBdDogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIElkcyBvZiB0aGUgcHVibGlzaGVkIGFkdmlzb3JpZXMgd2hvc2UgcmFuZ2UgY292ZXJzIHRoaXMgdmVyc2lvbi4gKi9cbiAgYWR2aXNvcnlJZHM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpcmVjdG9yeUxpc3RpbmdEZXRhaWwgZXh0ZW5kcyBEaXJlY3RvcnlMaXN0aW5nQ2FyZCB7XG4gIHJlYWRtZUh0bWw6IHN0cmluZyB8IG51bGw7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGhvbWVwYWdlVXJsOiBzdHJpbmcgfCBudWxsO1xuICBzb3VyY2VVcmw6IHN0cmluZyB8IG51bGw7XG4gIHZlcnNpb25zOiBEaXJlY3RvcnlMaXN0aW5nVmVyc2lvbltdO1xuICBjb25maWd1cmF0aW9uOiB7XG4gICAgc2VjcmV0czogeyBuYW1lOiBzdHJpbmc7IHJlcXVpcmVkOiBib29sZWFuOyBkZXNjcmlwdGlvbjogc3RyaW5nIH1bXTtcbiAgICByZXF1aXJlZE1ldGFkYXRhOiBzdHJpbmdbXTtcbiAgICByZXF1aXJlZFZhcnM6IHN0cmluZ1tdO1xuICAgIGNvbXB1dGVUeXBlOiBzdHJpbmc7XG4gICAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogc3RyaW5nIHwgbnVsbDtcbiAgICBuZXR3b3JrRWdyZXNzOiBzdHJpbmdbXTtcbiAgICBwbHVnaW5UeXBlOiBzdHJpbmc7XG4gIH07XG4gIHN1cHBseUNoYWluOiB7XG4gICAgc2lnbmVkOiBib29sZWFuO1xuICAgIGRpZ2VzdDogc3RyaW5nIHwgbnVsbDtcbiAgICBpbWFnZVNvdXJjZTogc3RyaW5nIHwgbnVsbDtcbiAgICBzY2FubmVkQXQ6IHN0cmluZyB8IG51bGw7XG4gICAgdnVsbkNyaXRpY2FsOiBudW1iZXIgfCBudWxsO1xuICAgIHZ1bG5IaWdoOiBudW1iZXIgfCBudWxsO1xuICAgIHZ1bG5Dcml0aWNhbEZpeGFibGU6IG51bWJlciB8IG51bGw7XG4gICAgdnVsbkhpZ2hGaXhhYmxlOiBudW1iZXIgfCBudWxsO1xuICAgIHNjYW5GbGFnZ2VkQXQ6IHN0cmluZyB8IG51bGw7XG4gICAgc2JvbVVybDogc3RyaW5nIHwgbnVsbDtcbiAgfTtcbiAgYWR2aXNvcmllczoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgc2V2ZXJpdHk6IHN0cmluZztcbiAgICBzdW1tYXJ5OiBzdHJpbmc7XG4gICAgYWZmZWN0ZWRSYW5nZTogc3RyaW5nO1xuICAgIGZpeGVkVmVyc2lvbjogc3RyaW5nIHwgbnVsbDtcbiAgICBwdWJsaXNoZWRBdDogc3RyaW5nO1xuICAgIC8qKiBTZXJ2ZXItc2FuaXRpemVkIEhUTUwgKHRoZSBzdG9yZWQgcmVuZGVyIG9mIHRoZSBkZXRhaWxzIG1hcmtkb3duKS4gKi9cbiAgICBkZXRhaWxzSHRtbDogc3RyaW5nIHwgbnVsbDtcbiAgICBjdmVJZHM6IHN0cmluZ1tdO1xuICB9W107XG4gIHJhdGluZ0Rpc3RyaWJ1dGlvbjogUmVjb3JkPCcxJyB8ICcyJyB8ICczJyB8ICc0JyB8ICc1JywgbnVtYmVyPiB8IG51bGw7XG4gIC8qKiBUaGUgQmF5ZXNpYW4gcmF0aW5nIG92ZXIgcmV2aWV3cyBvZiB0aGUgbGFzdCB0d28gbWlub3IgdmVyc2lvbnMuICovXG4gIHJlY2VudFJhdGluZzogbnVtYmVyIHwgbnVsbDtcbiAgYWN0aXZlT3JnQ291bnQ6IG51bWJlciB8IG51bGw7XG4gIC8qKiBQZXItY29tcG9uZW50IGhlYWx0aCBzY29yZXMgYmVoaW5kIHtAbGluayBEaXJlY3RvcnlMaXN0aW5nQ2FyZC5oZWFsdGhTY29yZX0uICovXG4gIGhlYWx0aEJyZWFrZG93bjogSGVhbHRoQnJlYWtkb3duIHwgbnVsbDtcbiAgLyoqIDMwLWRheSBydW50aW1lIHN1Y2Nlc3MgcmF0ZSAoMC4uMSksIG9yIG51bGwgd2l0aCBubyBydW5zLiAqL1xuICBzdWNjZXNzUmF0ZTMwZDogbnVtYmVyIHwgbnVsbDtcbn1cblxuZXhwb3J0IHR5cGUgUmV2aWV3U29ydCA9ICdoZWxwZnVsJyB8ICdyZWNlbnQnIHwgJ2hpZ2hlc3QnIHwgJ2xvd2VzdCc7XG5leHBvcnQgY29uc3QgUkVWSUVXX1NPUlRTOiByZWFkb25seSBSZXZpZXdTb3J0W10gPSBbJ2hlbHBmdWwnLCAncmVjZW50JywgJ2hpZ2hlc3QnLCAnbG93ZXN0J107XG5leHBvcnQgY29uc3QgUkVWSUVXU19ERUZBVUxUX0xJTUlUID0gMTA7XG5leHBvcnQgY29uc3QgUkVWSUVXU19NQVhfTElNSVQgPSA1MDtcblxuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNSZXZpZXdSZXBseSB7XG4gIGJvZHlIdG1sOiBzdHJpbmc7XG4gIHB1Ymxpc2hlckRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cGRhdGVkQXQ6IHN0cmluZztcbn1cblxuLyoqIE9uZSBwdWJsaXNoZWQgcmV2aWV3IGFzIHRoZSBkaXJlY3Rvcnkgc2hvd3MgaXQ6IGRpc3BsYXkgbmFtZSBvbmx5LCBuZXZlciBhbiBvcmcuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY1Jldmlld0l0ZW0ge1xuICBpZDogc3RyaW5nO1xuICByYXRpbmc6IG51bWJlcjtcbiAgdGl0bGU6IHN0cmluZyB8IG51bGw7XG4gIGJvZHlIdG1sOiBzdHJpbmcgfCBudWxsO1xuICB2ZXJzaW9uOiBzdHJpbmcgfCBudWxsO1xuICAvKiogTnVsbCBvbmNlIHRoZSBhdXRob3IncyBhY2NvdW50IHdhcyBkZWxldGVkICh0aGUgcmV2aWV3IGlzIGFub255bWl6ZWQpLiAqL1xuICBhdXRob3I6IHsgZGlzcGxheU5hbWU6IHN0cmluZyB9IHwgbnVsbDtcbiAgdmVyaWZpZWRVc2U6IGJvb2xlYW47XG4gIGhlbHBmdWxDb3VudDogbnVtYmVyO1xuICBlZGl0ZWQ6IGJvb2xlYW47XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cGRhdGVkQXQ6IHN0cmluZztcbiAgcmVwbHk6IFB1YmxpY1Jldmlld1JlcGx5IHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNSZXZpZXdQYWdlIHtcbiAgcmV2aWV3czogUHVibGljUmV2aWV3SXRlbVtdO1xuICB0b3RhbDogbnVtYmVyO1xuICBuZXh0Q3Vyc29yOiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY1Jldmlld1F1ZXJ5IHtcbiAgc29ydD86IFJldmlld1NvcnQ7XG4gIC8qKiBPbmx5IHJldmlld3Mgd2l0aCBleGFjdGx5IHRoaXMgbWFueSBzdGFycy4gKi9cbiAgcmF0aW5nPzogbnVtYmVyO1xuICBjdXJzb3I/OiBzdHJpbmc7XG4gIGxpbWl0PzogbnVtYmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUm93IG1hcHBpbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBBIGBwdWJsaWNfbGlzdGluZ3NgIHJvdyBhcyB0aGUgcmF3IHF1ZXJpZXMgcmV0dXJuIGl0IChzbmFrZV9jYXNlKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljTGlzdGluZ1JvdyB7XG4gIGlkOiBzdHJpbmc7XG4gIHB1Ymxpc2hlcl9oYW5kbGU6IHN0cmluZztcbiAgcHVibGlzaGVyX2Rpc3BsYXlfbmFtZTogc3RyaW5nO1xuICBwdWJsaXNoZXJfdGllcjogUHVibGlzaGVyVGllcjtcbiAgbmFtZTogc3RyaW5nO1xuICBjYXRlZ29yeTogc3RyaW5nO1xuICBzdW1tYXJ5OiBzdHJpbmcgfCBudWxsO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgcmVhZG1lX2h0bWw6IHN0cmluZyB8IG51bGw7XG4gIGxpY2Vuc2U6IHN0cmluZyB8IG51bGw7XG4gIGhvbWVwYWdlX3VybDogc3RyaW5nIHwgbnVsbDtcbiAgc291cmNlX3VybDogc3RyaW5nIHwgbnVsbDtcbiAgaWNvbjogeyBrZXk6IHN0cmluZzsgYmFkZ2U/OiBzdHJpbmcgfSB8IG51bGw7XG4gIHVwbG9hZGVkX2ljb246IHsga2V5MjU2OiBzdHJpbmc7IGtleTY0OiBzdHJpbmcgfSB8IG51bGw7XG4gIGtleXdvcmRzOiBzdHJpbmdbXSB8IG51bGw7XG4gIGxhdGVzdF92ZXJzaW9uOiBzdHJpbmcgfCBudWxsO1xuICB1cGRhdGVkX2F0OiBEYXRlIHwgc3RyaW5nO1xuICByYXRpbmdfYmF5ZXM6IG51bWJlciB8IHN0cmluZyB8IG51bGw7XG4gIHJhdGluZ19jb3VudDogbnVtYmVyIHwgc3RyaW5nO1xuICByYXRpbmdfZGlzdDogUmVjb3JkPHN0cmluZywgbnVtYmVyPiB8IG51bGw7XG4gIHJlY2VudF9yYXRpbmc/OiBudW1iZXIgfCBzdHJpbmcgfCBudWxsO1xuICBpbnN0YWxsX2NvdW50OiBudW1iZXIgfCBzdHJpbmc7XG4gIGFjdGl2ZV9vcmdfY291bnQ6IG51bWJlciB8IHN0cmluZyB8IG51bGw7XG4gIGhlYWx0aF9zY29yZT86IG51bWJlciB8IHN0cmluZyB8IG51bGw7XG4gIGhlYWx0aF9icmVha2Rvd24/OiBIZWFsdGhCcmVha2Rvd24gfCBudWxsO1xuICBzdWNjZXNzX3JhdGVfMzBkPzogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbDtcbiAgc3RhdGU6ICdsaXN0ZWQnIHwgJ3VubWFpbnRhaW5lZCc7XG59XG5cbmZ1bmN0aW9uIG51bSh2OiBudW1iZXIgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcbiAgY29uc3QgbiA9IHR5cGVvZiB2ID09PSAnbnVtYmVyJyA/IHYgOiBOdW1iZXIucGFyc2VGbG9hdChTdHJpbmcodiA/PyAnMCcpKTtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShuKSA/IG4gOiAwO1xufVxuXG5mdW5jdGlvbiBpc28odjogRGF0ZSB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICBpZiAoIXYpIHJldHVybiAnJztcbiAgcmV0dXJuIHYgaW5zdGFuY2VvZiBEYXRlID8gdi50b0lTT1N0cmluZygpIDogbmV3IERhdGUodikudG9JU09TdHJpbmcoKTtcbn1cblxuLyoqXG4gKiBUaGUgaWNvbiBmYWxsYmFjayBjaGFpbjogdXBsb2FkZWQgKGlmIHRoZSB0aWVyIG1heSB1cGxvYWQpIOKGkiBjdXJhdGVkXG4gKiB2ZW5kb3Iga2V5IChPZmZpY2lhbCwgYW5kIFZlcmlmaWVkIHB1Ymxpc2hlcnMgZm9yIG1hcmtzIHRoZXkgb3duIOKAlCBvd25lcnNoaXBcbiAqIGlzIGNoZWNrZWQgd2hlbiB0aGUgaWNvbiBpcyBhcHByb3ZlZCkg4oaSIG1vbm9ncmFtLiBDb21tdW5pdHkgYW5kIGFub255bW91c1xuICogbGlzdGluZ3MgY2FuIG5ldmVyIHNob3cgYSBjdXJhdGVkIHZlbmRvciBtYXJrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUxpc3RpbmdJY29uKHJvdzogUGljazxQdWJsaWNMaXN0aW5nUm93LCAncHVibGlzaGVyX3RpZXInIHwgJ2ljb24nIHwgJ3VwbG9hZGVkX2ljb24nPik6IFBpY2s8XG4gIERpcmVjdG9yeUxpc3RpbmdDYXJkLCAnaWNvbktpbmQnIHwgJ2ljb25VcmwnIHwgJ2ljb25LZXknIHwgJ2ljb25CYWRnZScgfCAnaWNvbkhleCdcbj4ge1xuICBjb25zdCBub25lID0geyBpY29uVXJsOiBudWxsLCBpY29uS2V5OiBudWxsLCBpY29uQmFkZ2U6IG51bGwsIGljb25IZXg6IG51bGwgfTtcbiAgaWYgKHJvdy51cGxvYWRlZF9pY29uPy5rZXkyNTYpIHtcbiAgICByZXR1cm4geyAuLi5ub25lLCBpY29uS2luZDogJ3VwbG9hZGVkJywgaWNvblVybDogYC9hcGkvcHVibGljL3BsdWdpbnMvaWNvbnMvJHtlbmNvZGVVUklDb21wb25lbnQocm93LnVwbG9hZGVkX2ljb24ua2V5MjU2KX1gIH07XG4gIH1cbiAgY29uc3QgY3VyYXRlZEFsbG93ZWQgPSByb3cucHVibGlzaGVyX3RpZXIgPT09ICdvZmZpY2lhbCcgfHwgcm93LnB1Ymxpc2hlcl90aWVyID09PSAndmVyaWZpZWQnO1xuICBpZiAoY3VyYXRlZEFsbG93ZWQgJiYgcm93Lmljb24/LmtleSkge1xuICAgIHJldHVybiB7IC4uLm5vbmUsIGljb25LaW5kOiAndmVuZG9yJywgaWNvbktleTogcm93Lmljb24ua2V5LCBpY29uQmFkZ2U6IHJvdy5pY29uLmJhZGdlID8/IG51bGwgfTtcbiAgfVxuICByZXR1cm4geyAuLi5ub25lLCBpY29uS2luZDogJ21vbm9ncmFtJyB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9MaXN0aW5nQ2FyZChyb3c6IFB1YmxpY0xpc3RpbmdSb3cpOiBEaXJlY3RvcnlMaXN0aW5nQ2FyZCB7XG4gIGNvbnN0IHJhdGluZ0NvdW50ID0gbnVtKHJvdy5yYXRpbmdfY291bnQpO1xuICByZXR1cm4ge1xuICAgIHB1Ymxpc2hlcjogeyBoYW5kbGU6IHJvdy5wdWJsaXNoZXJfaGFuZGxlLCBkaXNwbGF5TmFtZTogcm93LnB1Ymxpc2hlcl9kaXNwbGF5X25hbWUsIHRpZXI6IHJvdy5wdWJsaXNoZXJfdGllciB9LFxuICAgIG5hbWU6IHJvdy5uYW1lLFxuICAgIHN1bW1hcnk6IHJvdy5zdW1tYXJ5ID8/ICcnLFxuICAgIGNhdGVnb3J5OiByb3cuY2F0ZWdvcnksXG4gICAga2V5d29yZHM6IHJvdy5rZXl3b3JkcyA/PyBbXSxcbiAgICBsYXRlc3RWZXJzaW9uOiByb3cubGF0ZXN0X3ZlcnNpb24gPz8gJycsXG4gICAgbGljZW5zZTogcm93LmxpY2Vuc2UgPz8gJycsXG4gICAgLi4ucmVzb2x2ZUxpc3RpbmdJY29uKHJvdyksXG4gICAgcmF0aW5nOiByYXRpbmdDb3VudCA+IDAgJiYgcm93LnJhdGluZ19iYXllcyAhPSBudWxsID8geyBzY29yZTogTWF0aC5yb3VuZChudW0ocm93LnJhdGluZ19iYXllcykgKiAxMDApIC8gMTAwLCBjb3VudDogcmF0aW5nQ291bnQgfSA6IG51bGwsXG4gICAgaW5zdGFsbENvdW50OiBudW0ocm93Lmluc3RhbGxfY291bnQpLFxuICAgIGhlYWx0aFNjb3JlOiByb3cuaGVhbHRoX3Njb3JlID09IG51bGwgPyBudWxsIDogTWF0aC5yb3VuZChudW0ocm93LmhlYWx0aF9zY29yZSkpLFxuICAgIHVwZGF0ZWRBdDogaXNvKHJvdy51cGRhdGVkX2F0KSxcbiAgICBzdGF0ZTogcm93LnN0YXRlLFxuICB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2VhcmNoXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogTm9ybWFsaXplIHRoZSB1c2VyJ3MgcXVlcnk6IGNvbGxhcHNlIHdoaXRlc3BhY2UsIGNhcCB0aGUgbGVuZ3RoLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVF1ZXJ5KHE6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIHJldHVybiAocSA/PyAnJykucmVwbGFjZSgvXFxzKy9nLCAnICcpLnRyaW0oKS5zbGljZSgwLCBESVJFQ1RPUllfTUFYX1FVRVJZX0xFTkdUSCk7XG59XG5cbi8qKiBTZWFyY2ggdGVybXMgZm9yIGhpZ2hsaWdodGluZzogd29yZHMgb2Yg4omlIDIgY2hhcmFjdGVycywgcmVnZXgtZXNjYXBlZC4gKi9cbmZ1bmN0aW9uIGhpZ2hsaWdodFRlcm1zKHE6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFsuLi5uZXcgU2V0KHEudG9Mb3dlckNhc2UoKS5zcGxpdCgvW15hLXowLTkuXy1dKy8pLmZpbHRlcigodCkgPT4gdC5sZW5ndGggPj0gMikpXVxuICAgIC5tYXAoKHQpID0+IHQucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKSk7XG59XG5cbi8qKlxuICogV3JhcCBtYXRjaGVkIHRlcm1zIGluIGA8bWFyaz5gLiBUaGUgZnJvbnRlbmQgcmVuZGVycyBldmVyeXRoaW5nIGV4Y2VwdCB0aGVcbiAqIGA8bWFyaz5gIG1hcmtlcnMgYXMgVEVYVCAobmV2ZXIgSFRNTCksIHNvIHRoZSBzb3VyY2UgdGV4dCBpcyBub3QgZXNjYXBlZCBoZXJlLlxuICogUmV0dXJucyB1bmRlZmluZWQgd2hlbiBub3RoaW5nIG1hdGNoZWQgKHRoZSBjYXJkIHRoZW4gcmVuZGVycyBwbGFpbiB0ZXh0KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhpZ2hsaWdodFRleHQodGV4dDogc3RyaW5nLCBxOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCB0ZXJtcyA9IGhpZ2hsaWdodFRlcm1zKHEpO1xuICBpZiAoIXRleHQgfHwgdGVybXMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCByZSA9IG5ldyBSZWdFeHAoYCgke3Rlcm1zLmpvaW4oJ3wnKX0pYCwgJ2dpJyk7XG4gIGlmICghcmUudGVzdCh0ZXh0KSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHRleHQucmVwbGFjZShyZSwgJzxtYXJrPiQxPC9tYXJrPicpO1xufVxuXG4vKiogT3BhcXVlIGN1cnNvcjogYW4gb2Zmc2V0LCBiYXNlNjR1cmwtZW5jb2RlZCBzbyBjbGllbnRzIGRvbid0IGRlcGVuZCBvbiBpdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVPZmZzZXRDdXJzb3Iob2Zmc2V0OiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoeyBvOiBvZmZzZXQgfSkpLnRvU3RyaW5nKCdiYXNlNjR1cmwnKTtcbn1cblxuLyoqXG4gKiBIb3cgZGVlcCB0aGUgZGlyZWN0b3J5IG1heSBiZSBwYWdlZC4gQSBib3VuZCBvbiBlbnVtZXJhdGlvbiwgbm90IGEgcGFnZSBzaXplOlxuICogcGFzdCBpdCB0aGUgZGVjb2RlciByZWZ1c2VzIHRoZSBjdXJzb3IsIHNvIGEgY2FsbGVyIGNhbm5vdCB3YWxrIHRoZSB3aG9sZVxuICogY2F0YWxvZyBieSBpbmNyZW1lbnRpbmcgYW4gb2Zmc2V0LlxuICovXG5leHBvcnQgY29uc3QgTUFYX0RJUkVDVE9SWV9PRkZTRVQgPSAxMF8wMDA7XG5cbi8qKiBUaGUgZmFjZXQgYnVja2V0IGZvciByb3dzIHdob3NlIG51bGxhYmxlIGtleSBpcyBOVUxMIOKAlCBzZWUgdGhlIGZhY2V0IGxvb3AuICovXG5leHBvcnQgY29uc3QgRkFDRVRfTk9ORSA9ICcobm9uZSknO1xuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlT2Zmc2V0Q3Vyc29yKGN1cnNvcjogc3RyaW5nIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcbiAgaWYgKCFjdXJzb3IpIHJldHVybiAwO1xuICB0cnkge1xuICAgIGNvbnN0IG8gPSAoSlNPTi5wYXJzZShCdWZmZXIuZnJvbShjdXJzb3IsICdiYXNlNjR1cmwnKS50b1N0cmluZygndXRmOCcpKSBhcyB7IG8/OiB1bmtub3duIH0pLm87XG4gICAgcmV0dXJuIHR5cGVvZiBvID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNJbnRlZ2VyKG8pICYmIG8gPj0gMCAmJiBvIDw9IE1BWF9ESVJFQ1RPUllfT0ZGU0VUID8gbyA6IDA7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAwO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsYW1wTGltaXQobGltaXQ6IG51bWJlciB8IHVuZGVmaW5lZCk6IG51bWJlciB7XG4gIGlmICghbGltaXQgfHwgIU51bWJlci5pc0Zpbml0ZShsaW1pdCkpIHJldHVybiBESVJFQ1RPUllfREVGQVVMVF9MSU1JVDtcbiAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KE1hdGgudHJ1bmMobGltaXQpLCAxKSwgRElSRUNUT1JZX01BWF9MSU1JVCk7XG59XG5cbi8qKlxuICogVGhlIGZpbHRlcmVkIGJhc2Ugc2V0IGFzIGEgQ1RFIGJvZHkuIEV2ZXJ5IHNlYXJjaCwgZmFjZXQgYW5kIGNhdGVnb3J5IHF1ZXJ5XG4gKiByZWFkcyB0aHJvdWdoIHRoaXMsIHNvIHRoZXkgY2FuJ3QgZGlzYWdyZWUgYWJvdXQgd2hhdCdzIHZpc2libGUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VRdWVyeShwYXJhbXM6IERpcmVjdG9yeVNlYXJjaFBhcmFtcywgcTogc3RyaW5nKTogU1FMIHtcbiAgLy8gQ2FuIGxlZ2l0aW1hdGVseSBiZSBFTVBUWTogYW4gdW5maWx0ZXJlZCBicm93c2Ugb2YgdGhlIGRpcmVjdG9yeS4gSXQgbmV2ZXJcbiAgLy8gY291bGQgYmUgYmVmb3JlLCBiZWNhdXNlIGBsLnBhdXNlZF9hdCBJUyBOVUxMYCB3YXMgYWx3YXlzIHB1c2hlZCBmaXJzdCDigJRcbiAgLy8gdGhlIHZpZXcgb3ducyB0aGF0IG5vdywgc28gdGhlIGBXSEVSRWAgaXRzZWxmIGhhcyB0byBiZWNvbWUgY29uZGl0aW9uYWwgb3JcbiAgLy8gYW4gdW5maWx0ZXJlZCBzZWFyY2ggZW1pdHMgYSBiYXJlIGBXSEVSRWAgYW5kIGZhaWxzIHRvIHBhcnNlLlxuICBjb25zdCB3aGVyZTogU1FMW10gPSBbXTtcbiAgaWYgKHEpIHtcbiAgICAvLyBGdWxsIHRleHQsIE9SIGEgZnV6enkgbWF0Y2ggYWdhaW5zdCB0aGUgYmVzdC1tYXRjaGluZyBQQVJUIG9mIHRoZSBuYW1lXG4gICAgLy8gKHdvcmRfc2ltaWxhcml0eTogXCJ0ZXJhZnJvbVwiIOKGkiB0ZXJyYWZvcm0tcGxhbiBzY29yZXMgMC4zNiwgd2hpbGUgdW5yZWxhdGVkXG4gICAgLy8gd29yZHMgc3RheSDiiaQgMC4yIOKAlCB3aG9sZS1uYW1lIHNpbWlsYXJpdHkoKSBkaWx1dGVzIGEgbG9uZyBuYW1lIGJlbG93IGFueVxuICAgIC8vIHVzZWZ1bCB0aHJlc2hvbGQpLiBFeHBsaWNpdCBmdW5jdGlvbiwgbm90IHRoZSBgPCVgIG9wZXJhdG9yLCBzbyB0aGUgY3V0LW9mZlxuICAgIC8vIGRvZXNuJ3QgZGVwZW5kIG9uIGEgc2Vzc2lvbiBHVUMgcGdib3VuY2VyIGNhbid0IGNhcnJ5LiBBIHNlcSBzY2FuIG92ZXIgdGhlXG4gICAgLy8gcHVibGljIGxpc3RpbmdzICh0aG91c2FuZHMgb2Ygcm93cyBhdCBtb3N0KSBpcyBmaW5lLlxuICAgIHdoZXJlLnB1c2goc3FsYChsLnNlYXJjaF92ZWN0b3IgQEAgd2Vic2VhcmNoX3RvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAke3F9KSBPUiB3b3JkX3NpbWlsYXJpdHkoJHtxfSwgbC5uYW1lKSA+PSAke0ZVWlpZX05BTUVfVEhSRVNIT0xEfSBPUiBsLm5hbWUgSUxJS0UgJHtgJSR7cS5yZXBsYWNlKC9bXFxcXCVfXS9nLCAnXFxcXCQmJyl9JWB9KWApO1xuICB9XG4gIGlmIChwYXJhbXMuY2F0ZWdvcnkpIHdoZXJlLnB1c2goc3FsYGwuY2F0ZWdvcnkgPSAke3BhcmFtcy5jYXRlZ29yeX1gKTtcbiAgaWYgKHBhcmFtcy50aWVyKSB3aGVyZS5wdXNoKHNxbGBsLnB1Ymxpc2hlcl90aWVyID0gJHtwYXJhbXMudGllcn1gKTtcbiAgaWYgKHBhcmFtcy5saWNlbnNlKSB3aGVyZS5wdXNoKHNxbGBsLmxpY2Vuc2UgPSAke3BhcmFtcy5saWNlbnNlfWApO1xuICBpZiAocGFyYW1zLmNvbXB1dGVUeXBlKSB3aGVyZS5wdXNoKHNxbGB2LmNvbXB1dGVfdHlwZSA9ICR7cGFyYW1zLmNvbXB1dGVUeXBlfWApO1xuICBpZiAocGFyYW1zLm5lZWRzU2VjcmV0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgd2hlcmUucHVzaChwYXJhbXMubmVlZHNTZWNyZXRzXG4gICAgICA/IHNxbGBqc29uYl9hcnJheV9sZW5ndGgoQ09BTEVTQ0Uodi5zZWNyZXRzLCAnW10nOjpqc29uYikpID4gMGBcbiAgICAgIDogc3FsYGpzb25iX2FycmF5X2xlbmd0aChDT0FMRVNDRSh2LnNlY3JldHMsICdbXSc6Ompzb25iKSkgPSAwYCk7XG4gIH1cbiAgaWYgKHBhcmFtcy5taW5SYXRpbmcgIT09IHVuZGVmaW5lZCAmJiBOdW1iZXIuaXNGaW5pdGUocGFyYW1zLm1pblJhdGluZykpIHtcbiAgICB3aGVyZS5wdXNoKHNxbGBsLnJhdGluZ19iYXllcyA+PSAke3BhcmFtcy5taW5SYXRpbmd9YCk7XG4gIH1cbiAgY29uc3QgcmFuayA9IHFcbiAgICA/IHNxbGAodHNfcmFuayhsLnNlYXJjaF92ZWN0b3IsIHdlYnNlYXJjaF90b190c3F1ZXJ5KCdlbmdsaXNoJywgJHtxfSkpICsgd29yZF9zaW1pbGFyaXR5KCR7cX0sIGwubmFtZSkpYFxuICAgIDogc3FsYDA6OnJlYWxgO1xuICByZXR1cm4gc3FsYFxuICAgIFNFTEVDVCBsLmlkLCBsLnB1Ymxpc2hlcl9oYW5kbGUsIGwucHVibGlzaGVyX2Rpc3BsYXlfbmFtZSwgbC5wdWJsaXNoZXJfdGllciwgbC5uYW1lLCBsLmNhdGVnb3J5LFxuICAgICAgICAgICBsLnN1bW1hcnksIGwuZGVzY3JpcHRpb24sIGwucmVhZG1lX2h0bWwsIGwubGljZW5zZSwgbC5ob21lcGFnZV91cmwsIGwuc291cmNlX3VybCwgbC5pY29uLFxuICAgICAgICAgICBsLnVwbG9hZGVkX2ljb24sIGwua2V5d29yZHMsIGwubGF0ZXN0X3ZlcnNpb24sIGwudXBkYXRlZF9hdCwgbC5yYXRpbmdfYmF5ZXMsIGwucmF0aW5nX2NvdW50LFxuICAgICAgICAgICBsLnJhdGluZ19kaXN0LCBsLmluc3RhbGxfY291bnQsIGwuYWN0aXZlX29yZ19jb3VudCwgbC5oZWFsdGhfc2NvcmUsIGwuc3RhdGUsXG4gICAgICAgICAgIHYuY29tcHV0ZV90eXBlLFxuICAgICAgICAgICAoanNvbmJfYXJyYXlfbGVuZ3RoKENPQUxFU0NFKHYuc2VjcmV0cywgJ1tdJzo6anNvbmIpKSA+IDApIEFTIG5lZWRzX3NlY3JldHMsXG4gICAgICAgICAgICR7cmFua30gQVMgcmFua1xuICAgICAgRlJPTSBwdWJsaWNfbGlzdGluZ3MgbFxuICAgICAgTEVGVCBKT0lOIExBVEVSQUwgKFxuICAgICAgICBTRUxFQ1QgcHYuY29tcHV0ZV90eXBlLCBwdi5zZWNyZXRzXG4gICAgICAgICAgRlJPTSBwdWJsaWNfbGlzdGVkX3ZlcnNpb25zIHB2XG4gICAgICAgICBXSEVSRSBwdi5saXN0aW5nX2lkID0gbC5pZCBBTkQgcHYudmVyc2lvbiA9IGwubGF0ZXN0X3ZlcnNpb24gQU5EIE5PVCBwdi55YW5rZWRcbiAgICAgICAgIExJTUlUIDFcbiAgICAgICkgdiBPTiB0cnVlXG4gICAgICR7d2hlcmUubGVuZ3RoID4gMCA/IHNxbGBXSEVSRSAke3NxbC5qb2luKHdoZXJlLCBzcWxgIEFORCBgKX1gIDogc3FsYGB9YDtcbn1cblxuZnVuY3Rpb24gb3JkZXJCeShzb3J0OiBEaXJlY3RvcnlTb3J0LCBoYXNRdWVyeTogYm9vbGVhbik6IFNRTCB7XG4gIHN3aXRjaCAoc29ydCA9PT0gJ3JlbGV2YW5jZScgJiYgIWhhc1F1ZXJ5ID8gJ3VwZGF0ZWQnIDogc29ydCkge1xuICAgIGNhc2UgJ3JlbGV2YW5jZSc6XG4gICAgICAvLyBUZXh0IHJlbGV2YW5jZSBmaXJzdCwgbnVkZ2VkIGJ5IHJhdGluZyBhbmQgYWRvcHRpb24gc28gZXF1YWwgbWF0Y2hlc1xuICAgICAgLy8gZmF2b3VyIHByb3ZlbiBwbHVnaW5zLlxuICAgICAgcmV0dXJuIHNxbGAocmFuayAqICgxICsgQ09BTEVTQ0UocmF0aW5nX2JheWVzLCAwKSAvIDEwKSArIGxuKDEgKyBpbnN0YWxsX2NvdW50KSAvIDIwKSBERVNDLCBuYW1lIEFTQ2A7XG4gICAgY2FzZSAncmF0aW5nJzpcbiAgICAgIHJldHVybiBzcWxgcmF0aW5nX2JheWVzIERFU0MgTlVMTFMgTEFTVCwgcmF0aW5nX2NvdW50IERFU0MsIG5hbWUgQVNDYDtcbiAgICBjYXNlICdpbnN0YWxscyc6XG4gICAgICByZXR1cm4gc3FsYGluc3RhbGxfY291bnQgREVTQywgbmFtZSBBU0NgO1xuICAgIGNhc2UgJ25hbWUnOlxuICAgICAgcmV0dXJuIHNxbGBuYW1lIEFTQywgcHVibGlzaGVyX2hhbmRsZSBBU0NgO1xuICAgIGNhc2UgJ2hlYWx0aCc6XG4gICAgICByZXR1cm4gc3FsYGhlYWx0aF9zY29yZSBERVNDIE5VTExTIExBU1QsIGluc3RhbGxfY291bnQgREVTQywgbmFtZSBBU0NgO1xuICAgIGNhc2UgJ3VwZGF0ZWQnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3FsYHVwZGF0ZWRfYXQgREVTQywgbmFtZSBBU0NgO1xuICB9XG59XG5cbi8qKiBTZWFyY2ggdGhlIGRpcmVjdG9yeTogb25lIHBhZ2Ugb2YgY2FyZHMsIGZhY2V0IGNvdW50cywgdG90YWwgYW5kIG5leHQgY3Vyc29yLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlYXJjaFB1YmxpY0xpc3RpbmdzKHBhcmFtczogRGlyZWN0b3J5U2VhcmNoUGFyYW1zKTogUHJvbWlzZTxEaXJlY3RvcnlTZWFyY2hSZXN1bHQ+IHtcbiAgY29uc3QgZGIgPSBnZXRQdWJsaWNSZWFkZXJEYigpO1xuICBjb25zdCBxID0gbm9ybWFsaXplUXVlcnkocGFyYW1zLnEpO1xuICBjb25zdCBsaW1pdCA9IGNsYW1wTGltaXQocGFyYW1zLmxpbWl0KTtcbiAgY29uc3Qgb2Zmc2V0ID0gZGVjb2RlT2Zmc2V0Q3Vyc29yKHBhcmFtcy5jdXJzb3IpO1xuICBjb25zdCBzb3J0ID0gcGFyYW1zLnNvcnQgJiYgRElSRUNUT1JZX1NPUlRTLmluY2x1ZGVzKHBhcmFtcy5zb3J0KSA/IHBhcmFtcy5zb3J0IDogJ3JlbGV2YW5jZSc7XG4gIGNvbnN0IGJhc2UgPSBiYXNlUXVlcnkocGFyYW1zLCBxKTtcblxuICBjb25zdCBbcGFnZVJlcywgZmFjZXRSZXNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGRiLmV4ZWN1dGUoc3FsYFxuICAgICAgV0lUSCBiYXNlIEFTICgke2Jhc2V9KVxuICAgICAgU0VMRUNUIGJhc2UuKiwgQ09VTlQoKikgT1ZFUiAoKSBBUyB0b3RhbFxuICAgICAgICBGUk9NIGJhc2VcbiAgICAgICBPUkRFUiBCWSAke29yZGVyQnkoc29ydCwgcSAhPT0gJycpfVxuICAgICAgIExJTUlUICR7bGltaXR9IE9GRlNFVCAke29mZnNldH1gKSxcbiAgICBkYi5leGVjdXRlKHNxbGBcbiAgICAgIFdJVEggYmFzZSBBUyAoJHtiYXNlfSlcbiAgICAgIFNFTEVDVCBjYXRlZ29yeSwgcHVibGlzaGVyX3RpZXIsIGxpY2Vuc2UsIGNvbXB1dGVfdHlwZSwgbmVlZHNfc2VjcmV0cyxcbiAgICAgICAgICAgICBHUk9VUElORyhjYXRlZ29yeSkgQVMgZ19jYXRlZ29yeSwgR1JPVVBJTkcocHVibGlzaGVyX3RpZXIpIEFTIGdfdGllcixcbiAgICAgICAgICAgICBHUk9VUElORyhsaWNlbnNlKSBBUyBnX2xpY2Vuc2UsIEdST1VQSU5HKGNvbXB1dGVfdHlwZSkgQVMgZ19jb21wdXRlLFxuICAgICAgICAgICAgIEdST1VQSU5HKG5lZWRzX3NlY3JldHMpIEFTIGdfc2VjcmV0cyxcbiAgICAgICAgICAgICBDT1VOVCgqKSBBUyBuXG4gICAgICAgIEZST00gYmFzZVxuICAgICAgIEdST1VQIEJZIEdST1VQSU5HIFNFVFMgKChjYXRlZ29yeSksIChwdWJsaXNoZXJfdGllciksIChsaWNlbnNlKSwgKGNvbXB1dGVfdHlwZSksIChuZWVkc19zZWNyZXRzKSlgKSxcbiAgXSk7XG5cbiAgY29uc3QgcGFnZSA9IHJlc3VsdFJvd3M8UHVibGljTGlzdGluZ1JvdyAmIHsgdG90YWw6IG51bWJlciB8IHN0cmluZyB9PihwYWdlUmVzKTtcbiAgY29uc3QgdG90YWwgPSBwYWdlLmxlbmd0aCA+IDAgPyBudW0ocGFnZVswXSEudG90YWwpIDogMDtcbiAgY29uc3QgaXRlbXMgPSBwYWdlLm1hcCgocm93KSA9PiB7XG4gICAgY29uc3QgY2FyZCA9IHRvTGlzdGluZ0NhcmQocm93KTtcbiAgICBpZiAocSkge1xuICAgICAgY29uc3QgaGlnaGxpZ2h0ID0geyBuYW1lOiBoaWdobGlnaHRUZXh0KGNhcmQubmFtZSwgcSksIHN1bW1hcnk6IGhpZ2hsaWdodFRleHQoY2FyZC5zdW1tYXJ5LCBxKSB9O1xuICAgICAgaWYgKGhpZ2hsaWdodC5uYW1lIHx8IGhpZ2hsaWdodC5zdW1tYXJ5KSBjYXJkLmhpZ2hsaWdodCA9IGhpZ2hsaWdodDtcbiAgICB9XG4gICAgcmV0dXJuIGNhcmQ7XG4gIH0pO1xuXG4gIGNvbnN0IGZhY2V0czogRGlyZWN0b3J5U2VhcmNoUmVzdWx0WydmYWNldHMnXSA9IHtcbiAgICBjYXRlZ29yeToge30sIHRpZXI6IHt9LCBsaWNlbnNlOiB7fSwgY29tcHV0ZVR5cGU6IHt9LCBuZWVkc1NlY3JldHM6IHsgdHJ1ZTogMCwgZmFsc2U6IDAgfSxcbiAgfTtcbiAgdHlwZSBGYWNldFJvdyA9IHtcbiAgICBjYXRlZ29yeTogc3RyaW5nIHwgbnVsbDtcbiAgICBwdWJsaXNoZXJfdGllcjogc3RyaW5nIHwgbnVsbDtcbiAgICBsaWNlbnNlOiBzdHJpbmcgfCBudWxsO1xuICAgIGNvbXB1dGVfdHlwZTogc3RyaW5nIHwgbnVsbDtcbiAgICBuZWVkc19zZWNyZXRzOiBib29sZWFuIHwgbnVsbDtcbiAgICBnX2NhdGVnb3J5OiBudW1iZXI7XG4gICAgZ190aWVyOiBudW1iZXI7XG4gICAgZ19saWNlbnNlOiBudW1iZXI7XG4gICAgZ19jb21wdXRlOiBudW1iZXI7XG4gICAgZ19zZWNyZXRzOiBudW1iZXI7XG4gICAgbjogbnVtYmVyIHwgc3RyaW5nO1xuICB9O1xuICAvLyBBIE5VTEwga2V5IGlzIGEgcmVhbCBidWNrZXQsIG5vdCBhIHJvdyB0byBkcm9wLiBgbGljZW5zZWAgYW5kXG4gIC8vIGBjb21wdXRlX3R5cGVgIGFyZSBudWxsYWJsZSwgYW5kIHNraXBwaW5nIHRoZWlyIE5VTEwgZ3JvdXBzIG1hZGUgdGhlIGZhY2V0c1xuICAvLyB1bnJlY29uY2lsYWJsZSB3aXRoIGB0b3RhbGA6IGEgbGlzdGluZyB3aXRoIG5vIGxpY2Vuc2Ugd2FzIGNvdW50ZWQgaW4gdGhlXG4gIC8vIHRvdGFsIGFuZCBpbiBubyBmYWNldCwgc28gYSBjbGllbnQgc3VtbWluZyB0aGUgYnVja2V0cyBjYW1lIHVwIHNob3J0IHdpdGhcbiAgLy8gbm90aGluZyB0byBleHBsYWluIHRoZSBnYXAuIGAobm9uZSlgIG5hbWVzIHRoZSBidWNrZXQgdGhlIHJvd3MgYXJlIGFjdHVhbGx5XG4gIC8vIGluIOKAlCBhIGZpbHRlcmFibGUgdmFsdWUsIGFuZCB2aXNpYmx5IGRpZmZlcmVudCBmcm9tIGEgbWlzc2luZyBvbmUuXG4gIGZvciAoY29uc3QgciBvZiByZXN1bHRSb3dzPEZhY2V0Um93PihmYWNldFJlcykpIHtcbiAgICBjb25zdCBuID0gbnVtKHIubik7XG4gICAgaWYgKE51bWJlcihyLmdfY2F0ZWdvcnkpID09PSAwICYmIHIuY2F0ZWdvcnkpIGZhY2V0cy5jYXRlZ29yeVtyLmNhdGVnb3J5XSA9IG47XG4gICAgZWxzZSBpZiAoTnVtYmVyKHIuZ190aWVyKSA9PT0gMCAmJiByLnB1Ymxpc2hlcl90aWVyKSBmYWNldHMudGllcltyLnB1Ymxpc2hlcl90aWVyXSA9IG47XG4gICAgZWxzZSBpZiAoTnVtYmVyKHIuZ19saWNlbnNlKSA9PT0gMCkgZmFjZXRzLmxpY2Vuc2Vbci5saWNlbnNlID8/IEZBQ0VUX05PTkVdID0gbjtcbiAgICBlbHNlIGlmIChOdW1iZXIoci5nX2NvbXB1dGUpID09PSAwKSBmYWNldHMuY29tcHV0ZVR5cGVbci5jb21wdXRlX3R5cGUgPz8gRkFDRVRfTk9ORV0gPSBuO1xuICAgIGVsc2UgaWYgKE51bWJlcihyLmdfc2VjcmV0cykgPT09IDAgJiYgci5uZWVkc19zZWNyZXRzICE9PSBudWxsKSBmYWNldHMubmVlZHNTZWNyZXRzW3IubmVlZHNfc2VjcmV0cyA/ICd0cnVlJyA6ICdmYWxzZSddID0gbjtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaXRlbXMsXG4gICAgZmFjZXRzLFxuICAgIHRvdGFsLFxuICAgIC8vIE5FVkVSIHBhc3QgdGhlIGNlaWxpbmcgdGhlIGRlY29kZXIgZW5mb3JjZXMuIFRoaXMgdXNlZCB0byBlbWl0IGEgY3Vyc29yXG4gICAgLy8gZm9yIGFueSBgb2Zmc2V0ICsgaXRlbXMubGVuZ3RoIDwgdG90YWxgLCBpbmNsdWRpbmcgb2Zmc2V0cyBhYm92ZVxuICAgIC8vIE1BWF9ESVJFQ1RPUllfT0ZGU0VUIOKAlCB3aGljaCBgZGVjb2RlT2Zmc2V0Q3Vyc29yYCB0aGVuIHJlZnVzZXMgYnlcbiAgICAvLyByZXR1cm5pbmcgMC4gQSBjbGllbnQgZm9sbG93aW5nIGBuZXh0Q3Vyc29yYCBnb3QgUEFHRSBPTkUgYmFjayBhbmQgbG9vcGVkXG4gICAgLy8gZm9yZXZlciwgd2l0aCBubyBlcnJvciBhbmQgbm8gd2F5IHRvIHRlbGwgaXQgaGFkIHN0b3BwZWQgYWR2YW5jaW5nLlxuICAgIC8vIEVuZGluZyB0aGUgcGFnZXMgYXQgdGhlIGNlaWxpbmcgaXMgdGhlIGhvbmVzdCBhbnN3ZXI6IHRoZSBib3VuZCBleGlzdHMsXG4gICAgLy8gc28gc2F5IHNvIGJ5IHJ1bm5pbmcgb3V0IG9mIGN1cnNvciByYXRoZXIgdGhhbiBieSBzaWxlbnRseSByZXN0YXJ0aW5nLlxuICAgIG5leHRDdXJzb3I6IG9mZnNldCArIGl0ZW1zLmxlbmd0aCA8IHRvdGFsICYmIG9mZnNldCArIGl0ZW1zLmxlbmd0aCA8PSBNQVhfRElSRUNUT1JZX09GRlNFVFxuICAgICAgPyBlbmNvZGVPZmZzZXRDdXJzb3Iob2Zmc2V0ICsgaXRlbXMubGVuZ3RoKVxuICAgICAgOiBudWxsLFxuICB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ2F0ZWdvcmllc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIEV2ZXJ5IGNhdGVnb3J5IHdpdGggaXRzIGxpdmUgY291bnQgYW5kIGl0cyB0b3AgbGlzdGluZ3MgKGJ5IHJhdGluZywgdGhlbiBpbnN0YWxscykuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdFB1YmxpY0NhdGVnb3JpZXModG9wUGVyQ2F0ZWdvcnkgPSAzKTogUHJvbWlzZTxEaXJlY3RvcnlDYXRlZ29yeVN1bW1hcnlbXT4ge1xuICBjb25zdCBkYiA9IGdldFB1YmxpY1JlYWRlckRiKCk7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGRiLmV4ZWN1dGUoc3FsYFxuICAgIFdJVEggcmFua2VkIEFTIChcbiAgICAgIFNFTEVDVCBsLiosXG4gICAgICAgICAgICAgUk9XX05VTUJFUigpIE9WRVIgKFBBUlRJVElPTiBCWSBsLmNhdGVnb3J5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SREVSIEJZIGwucmF0aW5nX2JheWVzIERFU0MgTlVMTFMgTEFTVCwgbC5pbnN0YWxsX2NvdW50IERFU0MsIGwubmFtZSBBU0MpIEFTIHJuLFxuICAgICAgICAgICAgIENPVU5UKCopIE9WRVIgKFBBUlRJVElPTiBCWSBsLmNhdGVnb3J5KSBBUyBjYXRlZ29yeV9jb3VudFxuICAgICAgICBGUk9NIHB1YmxpY19saXN0aW5ncyBsXG4gICAgKVxuICAgIFNFTEVDVCAqIEZST00gcmFua2VkIFdIRVJFIHJuIDw9ICR7TWF0aC5tYXgoMCwgTWF0aC5taW4odG9wUGVyQ2F0ZWdvcnksIDEwKSl9IE9SREVSIEJZIGNhdGVnb3J5IEFTQywgcm4gQVNDYCk7XG5cbiAgY29uc3QgYnlDYXRlZ29yeSA9IG5ldyBNYXA8c3RyaW5nLCBEaXJlY3RvcnlDYXRlZ29yeVN1bW1hcnk+KCk7XG4gIGZvciAoY29uc3Qgcm93IG9mIHJlc3VsdFJvd3M8UHVibGljTGlzdGluZ1JvdyAmIHsgY2F0ZWdvcnlfY291bnQ6IG51bWJlciB8IHN0cmluZyB9PihyZXMpKSB7XG4gICAgbGV0IHN1bW1hcnkgPSBieUNhdGVnb3J5LmdldChyb3cuY2F0ZWdvcnkpO1xuICAgIGlmICghc3VtbWFyeSkge1xuICAgICAgc3VtbWFyeSA9IHsgaWQ6IHJvdy5jYXRlZ29yeSwgY291bnQ6IG51bShyb3cuY2F0ZWdvcnlfY291bnQpLCB0b3A6IFtdIH07XG4gICAgICBieUNhdGVnb3J5LnNldChyb3cuY2F0ZWdvcnksIHN1bW1hcnkpO1xuICAgIH1cbiAgICBzdW1tYXJ5LnRvcC5wdXNoKHRvTGlzdGluZ0NhcmQocm93KSk7XG4gIH1cbiAgcmV0dXJuIFsuLi5ieUNhdGVnb3J5LnZhbHVlcygpXTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE9uZSBsaXN0aW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG50eXBlIFZlcnNpb25Sb3cgPSB7XG4gIHZlcnNpb246IHN0cmluZztcbiAgcHVibGlzaGVkX2F0OiBEYXRlIHwgc3RyaW5nO1xuICBicmVha2luZzogYm9vbGVhbjtcbiAgZGVwcmVjYXRlZF9hdDogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gIGRlcHJlY2F0aW9uX21lc3NhZ2U6IHN0cmluZyB8IG51bGw7XG4gIHlhbmtlZDogYm9vbGVhbjtcbiAgY2hhbmdlbG9nOiBzdHJpbmcgfCBudWxsO1xuICB2dWxuX2NyaXRpY2FsOiBudW1iZXIgfCBudWxsO1xuICB2dWxuX2hpZ2g6IG51bWJlciB8IG51bGw7XG4gIHZ1bG5fY3JpdGljYWxfZml4YWJsZTogbnVtYmVyIHwgbnVsbDtcbiAgdnVsbl9oaWdoX2ZpeGFibGU6IG51bWJlciB8IG51bGw7XG4gIHNjYW5uZWRfYXQ6IERhdGUgfCBzdHJpbmcgfCBudWxsO1xuICBzY2FuX2ZsYWdnZWRfYXQ6IERhdGUgfCBzdHJpbmcgfCBudWxsO1xuICAvKiogVGhlIEdDIGRlbGV0ZWQgdGhpcyB2ZXJzaW9uJ3MgcHVibGljIGltYWdlIOKAlCBzZWUgYHN1cHBseUNoYWluLnNpZ25lZGAuICovXG4gIGltYWdlX2NvbGxlY3RlZDogYm9vbGVhbjtcbiAgaW1hZ2VfZGlnZXN0OiBzdHJpbmcgfCBudWxsO1xuICBpbWFnZV9zb3VyY2U6IHN0cmluZyB8IG51bGw7XG4gIHBsdWdpbl90eXBlOiBzdHJpbmcgfCBudWxsO1xuICBjb21wdXRlX3R5cGU6IHN0cmluZyB8IG51bGw7XG4gIHNlY3JldHM6IHsgbmFtZTogc3RyaW5nOyByZXF1aXJlZDogYm9vbGVhbjsgZGVzY3JpcHRpb24/OiBzdHJpbmcgfVtdIHwgbnVsbDtcbiAgcmVxdWlyZWRfbWV0YWRhdGE6IHN0cmluZ1tdIHwgbnVsbDtcbiAgcmVxdWlyZWRfdmFyczogc3RyaW5nW10gfCBudWxsO1xuICBuZXR3b3JrX2VncmVzczogc3RyaW5nW10gfCBudWxsO1xuICByZWFkbWVfaHRtbDogc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgQWR2aXNvcnlSb3cgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHNldmVyaXR5OiBzdHJpbmc7XG4gIHN1bW1hcnk6IHN0cmluZztcbiAgYWZmZWN0ZWRfcmFuZ2U6IHN0cmluZztcbiAgZml4ZWRfdmVyc2lvbjogc3RyaW5nIHwgbnVsbDtcbiAgcHVibGlzaGVkX2F0OiBEYXRlIHwgc3RyaW5nIHwgbnVsbDtcbiAgZGV0YWlsc19odG1sOiBzdHJpbmcgfCBudWxsO1xuICBjdmVfaWRzOiBzdHJpbmdbXSB8IG51bGw7XG59O1xuXG4vKipcbiAqIE9uZSBsaXN0aW5nJ3MgcGFnZSBkYXRhLCBvciBudWxsIHdoZW4gaXQgaXNuJ3QgcHVibGljICh1bmtub3duLCBzdXNwZW5kZWQsXG4gKiB0cmFuc2ZlcnJlZCwgcGF1c2VkIGJ5IGl0cyBwdWJsaXNoZXIg4oCUIG9yIGl0cyBwdWJsaXNoZXIgaXMgc3VzcGVuZGVkKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFB1YmxpY0xpc3RpbmcocHVibGlzaGVySGFuZGxlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFByb21pc2U8RGlyZWN0b3J5TGlzdGluZ0RldGFpbCB8IG51bGw+IHtcbiAgY29uc3QgZGIgPSBnZXRQdWJsaWNSZWFkZXJEYigpO1xuICBjb25zdCBsaXN0aW5nUmVzID0gYXdhaXQgZGIuZXhlY3V0ZShzcWxgXG4gICAgU0VMRUNUICogRlJPTSBwdWJsaWNfbGlzdGluZ3NcbiAgICAgV0hFUkUgcHVibGlzaGVyX2hhbmRsZSA9ICR7cHVibGlzaGVySGFuZGxlfSBBTkQgbmFtZSA9ICR7bmFtZX1cbiAgICAgTElNSVQgMWApO1xuICBjb25zdCByb3cgPSByZXN1bHRSb3dzPFB1YmxpY0xpc3RpbmdSb3c+KGxpc3RpbmdSZXMpWzBdO1xuICBpZiAoIXJvdykgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgW3ZlcnNpb25SZXMsIGFkdmlzb3J5UmVzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBkYi5leGVjdXRlKHNxbGBTRUxFQ1QgKiBGUk9NIHB1YmxpY19saXN0ZWRfdmVyc2lvbnMgV0hFUkUgbGlzdGluZ19pZCA9ICR7cm93LmlkfWApLFxuICAgIGRiLmV4ZWN1dGUoc3FsYFNFTEVDVCAqIEZST00gcHVibGljX2Fkdmlzb3JpZXMgV0hFUkUgbGlzdGluZ19pZCA9ICR7cm93LmlkfSBPUkRFUiBCWSBwdWJsaXNoZWRfYXQgREVTQ2ApLFxuICBdKTtcbiAgY29uc3QgdmVyc2lvblJvd3MgPSByZXN1bHRSb3dzPFZlcnNpb25Sb3c+KHZlcnNpb25SZXMpLnNvcnQoKGEsIGIpID0+IGNvbXBhcmVTZW12ZXIoYi52ZXJzaW9uLCBhLnZlcnNpb24pKTtcbiAgY29uc3QgYWR2aXNvcnlSb3dzID0gcmVzdWx0Um93czxBZHZpc29yeVJvdz4oYWR2aXNvcnlSZXMpO1xuICAvLyBUaGUgdmVyc2lvbiB0aGUgcGFnZSBkZXNjcmliZXM6IHRoZSBsaXN0aW5nJ3MgbGF0ZXN0LCBlbHNlIHRoZSBuZXdlc3Qgbm9uLXlhbmtlZCBvbmUuXG4gIGNvbnN0IGN1cnJlbnQgPSB2ZXJzaW9uUm93cy5maW5kKCh2KSA9PiB2LnZlcnNpb24gPT09IHJvdy5sYXRlc3RfdmVyc2lvbiAmJiAhdi55YW5rZWQpXG4gICAgPz8gdmVyc2lvblJvd3MuZmluZCgodikgPT4gIXYueWFua2VkKVxuICAgID8/IG51bGw7XG5cbiAgY29uc3QgZGlzdCA9IHJvdy5yYXRpbmdfZGlzdCA/PyBudWxsO1xuICBjb25zdCBjYXJkID0gdG9MaXN0aW5nQ2FyZChyb3cpO1xuICByZXR1cm4ge1xuICAgIC4uLmNhcmQsXG4gICAgcmVhZG1lSHRtbDogcm93LnJlYWRtZV9odG1sID8/IGN1cnJlbnQ/LnJlYWRtZV9odG1sID8/IG51bGwsXG4gICAgZGVzY3JpcHRpb246IHJvdy5kZXNjcmlwdGlvbiA/PyAnJyxcbiAgICBob21lcGFnZVVybDogcm93LmhvbWVwYWdlX3VybCxcbiAgICBzb3VyY2VVcmw6IHJvdy5zb3VyY2VfdXJsLFxuICAgIHZlcnNpb25zOiB2ZXJzaW9uUm93cy5tYXAoKHYpID0+ICh7XG4gICAgICB2ZXJzaW9uOiB2LnZlcnNpb24sXG4gICAgICBwdWJsaXNoZWRBdDogaXNvKHYucHVibGlzaGVkX2F0KSxcbiAgICAgIGJyZWFraW5nOiB2LmJyZWFraW5nLFxuICAgICAgZGVwcmVjYXRlZDogdi5kZXByZWNhdGVkX2F0ICE9IG51bGwsXG4gICAgICBkZXByZWNhdGlvbk1lc3NhZ2U6IHYuZGVwcmVjYXRpb25fbWVzc2FnZSxcbiAgICAgIHlhbmtlZDogdi55YW5rZWQsXG4gICAgICBjaGFuZ2Vsb2c6IHYuY2hhbmdlbG9nLFxuICAgICAgdnVsbkNyaXRpY2FsOiB2LnZ1bG5fY3JpdGljYWwsXG4gICAgICB2dWxuSGlnaDogdi52dWxuX2hpZ2gsXG4gICAgICB2dWxuQ3JpdGljYWxGaXhhYmxlOiB2LnZ1bG5fY3JpdGljYWxfZml4YWJsZSA/PyBudWxsLFxuICAgICAgdnVsbkhpZ2hGaXhhYmxlOiB2LnZ1bG5faGlnaF9maXhhYmxlID8/IG51bGwsXG4gICAgICBzY2FubmVkQXQ6IHYuc2Nhbm5lZF9hdCA/IGlzbyh2LnNjYW5uZWRfYXQpIDogbnVsbCxcbiAgICAgIHNjYW5GbGFnZ2VkQXQ6IHYuc2Nhbl9mbGFnZ2VkX2F0ID8gaXNvKHYuc2Nhbl9mbGFnZ2VkX2F0KSA6IG51bGwsXG4gICAgICBhZHZpc29yeUlkczogYWR2aXNvcnlSb3dzLmZpbHRlcigoYSkgPT4gYWR2aXNvcnlSYW5nZUNvdmVycyhhLmFmZmVjdGVkX3JhbmdlLCB2LnZlcnNpb24pKS5tYXAoKGEpID0+IGEuaWQpLFxuICAgIH0pKSxcbiAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICBzZWNyZXRzOiAoY3VycmVudD8uc2VjcmV0cyA/PyBbXSkubWFwKChzKSA9PiAoeyBuYW1lOiBzLm5hbWUsIHJlcXVpcmVkOiBzLnJlcXVpcmVkLCBkZXNjcmlwdGlvbjogcy5kZXNjcmlwdGlvbiA/PyAnJyB9KSksXG4gICAgICByZXF1aXJlZE1ldGFkYXRhOiBjdXJyZW50Py5yZXF1aXJlZF9tZXRhZGF0YSA/PyBbXSxcbiAgICAgIHJlcXVpcmVkVmFyczogY3VycmVudD8ucmVxdWlyZWRfdmFycyA/PyBbXSxcbiAgICAgIGNvbXB1dGVUeXBlOiBjdXJyZW50Py5jb21wdXRlX3R5cGUgPz8gJycsXG4gICAgICBwcmltYXJ5T3V0cHV0RGlyZWN0b3J5OiBudWxsLFxuICAgICAgbmV0d29ya0VncmVzczogY3VycmVudD8ubmV0d29ya19lZ3Jlc3MgPz8gW10sXG4gICAgICBwbHVnaW5UeXBlOiBjdXJyZW50Py5wbHVnaW5fdHlwZSA/PyAnJyxcbiAgICB9LFxuICAgIHN1cHBseUNoYWluOiB7XG4gICAgICAvLyBBIGxpc3RlZCB2ZXJzaW9uIGV4aXN0cyBvbmx5IGFmdGVyIHRoZSBwbGF0Zm9ybSByZS1zaWduZWQgaXQgaW5cbiAgICAgIC8vIHB1YmxpYy8qLCBzbyBhIGRpZ2VzdCBtZWFucyBpdCBXQVMgc2lnbmVkIOKAlCBidXQgbm90IHRoYXQgdGhlIGltYWdlIGlzXG4gICAgICAvLyBzdGlsbCB0aGVyZS4gVGhlIEdDIGRlbGV0ZXMgYSB5YW5rZWQgdmVyc2lvbidzIHB1YmxpYyBpbWFnZSBhbmQgc3RhbXBzXG4gICAgICAvLyBgaW1hZ2VfY29sbGVjdGVkX2F0YDsgdGhlIGRpZ2VzdCBjb2x1bW4gb3V0bGl2ZXMgaXQsIHNvIGRlcml2aW5nXG4gICAgICAvLyBgc2lnbmVkYCBmcm9tIHByZXNlbmNlIGFsb25lIGtlcHQgYWR2ZXJ0aXNpbmcgYW4gYXJ0aWZhY3Qgbm9ib2R5IGNhblxuICAgICAgLy8gcHVsbCwgd2l0aCB2dWxuIGNvdW50cyBmcm96ZW4gYXQgd2hhdGV2ZXIgdGhlIGxhc3Qgc2NhbiBzYXcgKHRoZSByZXNjYW5cbiAgICAgIC8vIHNraXBzIGNvbGxlY3RlZCBpbWFnZXMpIGFuZCBub3RoaW5nIHNheWluZyBzby5cbiAgICAgIHNpZ25lZDogY3VycmVudD8uaW1hZ2VfZGlnZXN0ICE9IG51bGwgJiYgIWN1cnJlbnQuaW1hZ2VfY29sbGVjdGVkLFxuICAgICAgZGlnZXN0OiBjdXJyZW50Py5pbWFnZV9kaWdlc3QgPz8gbnVsbCxcbiAgICAgIGltYWdlU291cmNlOiBjdXJyZW50Py5pbWFnZV9zb3VyY2UgPz8gbnVsbCxcbiAgICAgIHNjYW5uZWRBdDogY3VycmVudD8uc2Nhbm5lZF9hdCA/IGlzbyhjdXJyZW50LnNjYW5uZWRfYXQpIDogbnVsbCxcbiAgICAgIHZ1bG5Dcml0aWNhbDogY3VycmVudD8udnVsbl9jcml0aWNhbCA/PyBudWxsLFxuICAgICAgdnVsbkhpZ2g6IGN1cnJlbnQ/LnZ1bG5faGlnaCA/PyBudWxsLFxuICAgICAgdnVsbkNyaXRpY2FsRml4YWJsZTogY3VycmVudD8udnVsbl9jcml0aWNhbF9maXhhYmxlID8/IG51bGwsXG4gICAgICB2dWxuSGlnaEZpeGFibGU6IGN1cnJlbnQ/LnZ1bG5faGlnaF9maXhhYmxlID8/IG51bGwsXG4gICAgICBzY2FuRmxhZ2dlZEF0OiBjdXJyZW50Py5zY2FuX2ZsYWdnZWRfYXQgPyBpc28oY3VycmVudC5zY2FuX2ZsYWdnZWRfYXQpIDogbnVsbCxcbiAgICAgIC8vIFNhbWUgY29uZGl0aW9uOiB0aGUgU0JPTSBpcyBzZXJ2ZWQgRlJPTSB0aGUgaW1hZ2UsIHNvIG9mZmVyaW5nIHRoZSBsaW5rXG4gICAgICAvLyBmb3IgYSBjb2xsZWN0ZWQgb25lIGlzIGEgZG93bmxvYWQgdGhhdCBjYW5ub3Qgc3VjY2VlZC5cbiAgICAgIHNib21Vcmw6IGN1cnJlbnQ/LmltYWdlX2RpZ2VzdCAmJiAhY3VycmVudC5pbWFnZV9jb2xsZWN0ZWRcbiAgICAgICAgPyBgL2FwaS9wdWJsaWMvcGx1Z2lucy8ke2VuY29kZVVSSUNvbXBvbmVudChyb3cucHVibGlzaGVyX2hhbmRsZSl9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KHJvdy5uYW1lKX0vdmVyc2lvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoY3VycmVudC52ZXJzaW9uKX0vc2JvbWBcbiAgICAgICAgOiBudWxsLFxuICAgIH0sXG4gICAgYWR2aXNvcmllczogYWR2aXNvcnlSb3dzLm1hcCgoYSkgPT4gKHtcbiAgICAgIGlkOiBhLmlkLFxuICAgICAgc2V2ZXJpdHk6IGEuc2V2ZXJpdHksXG4gICAgICBzdW1tYXJ5OiBhLnN1bW1hcnksXG4gICAgICBhZmZlY3RlZFJhbmdlOiBhLmFmZmVjdGVkX3JhbmdlLFxuICAgICAgZml4ZWRWZXJzaW9uOiBhLmZpeGVkX3ZlcnNpb24sXG4gICAgICBwdWJsaXNoZWRBdDogaXNvKGEucHVibGlzaGVkX2F0KSxcbiAgICAgIGRldGFpbHNIdG1sOiBhLmRldGFpbHNfaHRtbCxcbiAgICAgIGN2ZUlkczogYS5jdmVfaWRzID8/IFtdLFxuICAgIH0pKSxcbiAgICByYXRpbmdEaXN0cmlidXRpb246IGRpc3RcbiAgICAgID8geyAxOiBudW0oZGlzdFsnMSddKSwgMjogbnVtKGRpc3RbJzInXSksIDM6IG51bShkaXN0WyczJ10pLCA0OiBudW0oZGlzdFsnNCddKSwgNTogbnVtKGRpc3RbJzUnXSkgfVxuICAgICAgOiBudWxsLFxuICAgIHJlY2VudFJhdGluZzogcm93LnJlY2VudF9yYXRpbmcgPT0gbnVsbCA/IG51bGwgOiBNYXRoLnJvdW5kKG51bShyb3cucmVjZW50X3JhdGluZykgKiAxMDApIC8gMTAwLFxuICAgIGFjdGl2ZU9yZ0NvdW50OiByb3cuYWN0aXZlX29yZ19jb3VudCA9PSBudWxsID8gbnVsbCA6IG51bShyb3cuYWN0aXZlX29yZ19jb3VudCksXG4gICAgaGVhbHRoQnJlYWtkb3duOiByb3cuaGVhbHRoX2JyZWFrZG93biA/PyBudWxsLFxuICAgIHN1Y2Nlc3NSYXRlMzBkOiByb3cuc3VjY2Vzc19yYXRlXzMwZCA9PSBudWxsID8gbnVsbCA6IE1hdGgucm91bmQobnVtKHJvdy5zdWNjZXNzX3JhdGVfMzBkKSAqIDEwMDApIC8gMTAwMCxcbiAgfTtcbn1cblxuLyoqIE9uZSBsaXN0ZWQgdmVyc2lvbidzIHB1YmxpYyBpbWFnZSBpZGVudGl0eSAoZm9yIHRoZSBTQk9NIGRvd25sb2FkKSwgb3IgbnVsbC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQdWJsaWNMaXN0ZWRWZXJzaW9uKFxuICBwdWJsaXNoZXJIYW5kbGU6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcsXG4pOiBQcm9taXNlPHsgaW1hZ2VSZXBvc2l0b3J5OiBzdHJpbmc7IGltYWdlRGlnZXN0OiBzdHJpbmcgfSB8IG51bGw+IHtcbiAgY29uc3QgZGIgPSBnZXRQdWJsaWNSZWFkZXJEYigpO1xuICBjb25zdCByZXMgPSBhd2FpdCBkYi5leGVjdXRlKHNxbGBcbiAgICBTRUxFQ1QgaW1hZ2VfcmVwb3NpdG9yeSwgaW1hZ2VfZGlnZXN0IEZST00gcHVibGljX2xpc3RlZF92ZXJzaW9uc1xuICAgICBXSEVSRSBwdWJsaXNoZXJfaGFuZGxlID0gJHtwdWJsaXNoZXJIYW5kbGV9IEFORCBuYW1lID0gJHtuYW1lfSBBTkQgdmVyc2lvbiA9ICR7dmVyc2lvbn0gQU5EIE5PVCB5YW5rZWRcbiAgICAgTElNSVQgMWApO1xuICBjb25zdCByb3cgPSByZXN1bHRSb3dzPHsgaW1hZ2VfcmVwb3NpdG9yeTogc3RyaW5nIHwgbnVsbDsgaW1hZ2VfZGlnZXN0OiBzdHJpbmcgfCBudWxsIH0+KHJlcylbMF07XG4gIGlmICghcm93Py5pbWFnZV9yZXBvc2l0b3J5IHx8ICFyb3cuaW1hZ2VfZGlnZXN0KSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHsgaW1hZ2VSZXBvc2l0b3J5OiByb3cuaW1hZ2VfcmVwb3NpdG9yeSwgaW1hZ2VEaWdlc3Q6IHJvdy5pbWFnZV9kaWdlc3QgfTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJldmlld3Ncbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnR5cGUgUmV2aWV3Um93ID0ge1xuICBpZDogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmcgfCBudWxsO1xuICByYXRpbmc6IG51bWJlciB8IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZyB8IG51bGw7XG4gIGJvZHlfaHRtbDogc3RyaW5nIHwgbnVsbDtcbiAgYXV0aG9yX2Rpc3BsYXlfbmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgdmVyaWZpZWRfdXNlOiBib29sZWFuO1xuICBoZWxwZnVsX2NvdW50OiBudW1iZXIgfCBzdHJpbmc7XG4gIGVkaXRlZDogYm9vbGVhbjtcbiAgY3JlYXRlZF9hdDogRGF0ZSB8IHN0cmluZztcbiAgdXBkYXRlZF9hdDogRGF0ZSB8IHN0cmluZztcbiAgcHVibGlzaGVyX2Rpc3BsYXlfbmFtZTogc3RyaW5nO1xuICByZXBseV9ib2R5X2h0bWw6IHN0cmluZyB8IG51bGw7XG4gIHJlcGx5X2NyZWF0ZWRfYXQ6IERhdGUgfCBzdHJpbmcgfCBudWxsO1xuICByZXBseV91cGRhdGVkX2F0OiBEYXRlIHwgc3RyaW5nIHwgbnVsbDtcbiAgdG90YWw6IG51bWJlciB8IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIHJldmlld09yZGVyKHNvcnQ6IFJldmlld1NvcnQpOiBTUUwge1xuICBzd2l0Y2ggKHNvcnQpIHtcbiAgICBjYXNlICdyZWNlbnQnOiByZXR1cm4gc3FsYGNyZWF0ZWRfYXQgREVTQywgaWQgQVNDYDtcbiAgICBjYXNlICdoaWdoZXN0JzogcmV0dXJuIHNxbGByYXRpbmcgREVTQywgaGVscGZ1bF9jb3VudCBERVNDLCBjcmVhdGVkX2F0IERFU0MsIGlkIEFTQ2A7XG4gICAgY2FzZSAnbG93ZXN0JzogcmV0dXJuIHNxbGByYXRpbmcgQVNDLCBoZWxwZnVsX2NvdW50IERFU0MsIGNyZWF0ZWRfYXQgREVTQywgaWQgQVNDYDtcbiAgICBjYXNlICdoZWxwZnVsJzpcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gVmVyaWZpZWQgdXNlIGJyZWFrcyB0aWVzOiBhbiBvcmcgdGhhdCBydW5zIHRoZSBwbHVnaW4ga25vd3MgaXQgYmVzdC5cbiAgICAgIHJldHVybiBzcWxgaGVscGZ1bF9jb3VudCBERVNDLCB2ZXJpZmllZF91c2UgREVTQywgY3JlYXRlZF9hdCBERVNDLCBpZCBBU0NgO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1B1YmxpY1Jldmlldyhyb3c6IE9taXQ8UmV2aWV3Um93LCAndG90YWwnPik6IFB1YmxpY1Jldmlld0l0ZW0ge1xuICByZXR1cm4ge1xuICAgIGlkOiByb3cuaWQsXG4gICAgcmF0aW5nOiBudW0ocm93LnJhdGluZyksXG4gICAgdGl0bGU6IHJvdy50aXRsZSxcbiAgICBib2R5SHRtbDogcm93LmJvZHlfaHRtbCxcbiAgICB2ZXJzaW9uOiByb3cudmVyc2lvbixcbiAgICBhdXRob3I6IHJvdy5hdXRob3JfZGlzcGxheV9uYW1lID8geyBkaXNwbGF5TmFtZTogcm93LmF1dGhvcl9kaXNwbGF5X25hbWUgfSA6IG51bGwsXG4gICAgdmVyaWZpZWRVc2U6IHJvdy52ZXJpZmllZF91c2UgPT09IHRydWUsXG4gICAgaGVscGZ1bENvdW50OiBudW0ocm93LmhlbHBmdWxfY291bnQpLFxuICAgIGVkaXRlZDogcm93LmVkaXRlZCA9PT0gdHJ1ZSxcbiAgICBjcmVhdGVkQXQ6IGlzbyhyb3cuY3JlYXRlZF9hdCksXG4gICAgdXBkYXRlZEF0OiBpc28ocm93LnVwZGF0ZWRfYXQpLFxuICAgIHJlcGx5OiByb3cucmVwbHlfYm9keV9odG1sXG4gICAgICA/IHtcbiAgICAgICAgYm9keUh0bWw6IHJvdy5yZXBseV9ib2R5X2h0bWwsXG4gICAgICAgIHB1Ymxpc2hlckRpc3BsYXlOYW1lOiByb3cucHVibGlzaGVyX2Rpc3BsYXlfbmFtZSxcbiAgICAgICAgY3JlYXRlZEF0OiBpc28ocm93LnJlcGx5X2NyZWF0ZWRfYXQpLFxuICAgICAgICB1cGRhdGVkQXQ6IGlzbyhyb3cucmVwbHlfdXBkYXRlZF9hdCksXG4gICAgICB9XG4gICAgICA6IG51bGwsXG4gIH07XG59XG5cbi8qKlxuICogT25lIHBhZ2Ugb2YgYSBsaXN0aW5nJ3MgcHVibGlzaGVkIHJldmlld3MgKHRoZSBkaXJlY3RvcnkncyBSZXZpZXdzIHRhYiksIG9yIG51bGxcbiAqIHdoZW4gdGhlIGxpc3RpbmcgaXNuJ3QgcHVibGljLiBIZWxkIGFuZCByZW1vdmVkIHJldmlld3MgbmV2ZXIgcmVhY2ggdGhlIHZpZXcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0UHVibGljUmV2aWV3cyhwdWJsaXNoZXJIYW5kbGU6IHN0cmluZywgbmFtZTogc3RyaW5nLCBxdWVyeTogUHVibGljUmV2aWV3UXVlcnkgPSB7fSk6IFByb21pc2U8UHVibGljUmV2aWV3UGFnZSB8IG51bGw+IHtcbiAgY29uc3QgZGIgPSBnZXRQdWJsaWNSZWFkZXJEYigpO1xuICBjb25zdCBsaXN0aW5nID0gcmVzdWx0Um93czx7IGlkOiBzdHJpbmcgfT4oYXdhaXQgZGIuZXhlY3V0ZShzcWxgXG4gICAgU0VMRUNUIGlkIEZST00gcHVibGljX2xpc3RpbmdzXG4gICAgIFdIRVJFIHB1Ymxpc2hlcl9oYW5kbGUgPSAke3B1Ymxpc2hlckhhbmRsZX0gQU5EIG5hbWUgPSAke25hbWV9XG4gICAgIExJTUlUIDFgKSlbMF07XG4gIGlmICghbGlzdGluZykgcmV0dXJuIG51bGw7XG5cbiAgY29uc3Qgc29ydCA9IHF1ZXJ5LnNvcnQgJiYgUkVWSUVXX1NPUlRTLmluY2x1ZGVzKHF1ZXJ5LnNvcnQpID8gcXVlcnkuc29ydCA6ICdoZWxwZnVsJztcbiAgY29uc3QgbGltaXQgPSAhcXVlcnkubGltaXQgfHwgIU51bWJlci5pc0Zpbml0ZShxdWVyeS5saW1pdClcbiAgICA/IFJFVklFV1NfREVGQVVMVF9MSU1JVFxuICAgIDogTWF0aC5taW4oTWF0aC5tYXgoTWF0aC50cnVuYyhxdWVyeS5saW1pdCksIDEpLCBSRVZJRVdTX01BWF9MSU1JVCk7XG4gIGNvbnN0IG9mZnNldCA9IGRlY29kZU9mZnNldEN1cnNvcihxdWVyeS5jdXJzb3IpO1xuICBjb25zdCB3aGVyZTogU1FMW10gPSBbc3FsYGxpc3RpbmdfaWQgPSAke2xpc3RpbmcuaWR9YF07XG4gIGlmIChxdWVyeS5yYXRpbmcgIT09IHVuZGVmaW5lZCAmJiBOdW1iZXIuaXNJbnRlZ2VyKHF1ZXJ5LnJhdGluZykgJiYgcXVlcnkucmF0aW5nID49IDEgJiYgcXVlcnkucmF0aW5nIDw9IDUpIHtcbiAgICB3aGVyZS5wdXNoKHNxbGByYXRpbmcgPSAke3F1ZXJ5LnJhdGluZ31gKTtcbiAgfVxuICBjb25zdCByb3dzID0gcmVzdWx0Um93czxSZXZpZXdSb3c+KGF3YWl0IGRiLmV4ZWN1dGUoc3FsYFxuICAgIFNFTEVDVCBpZCwgdmVyc2lvbiwgcmF0aW5nLCB0aXRsZSwgYm9keV9odG1sLCBhdXRob3JfZGlzcGxheV9uYW1lLCB2ZXJpZmllZF91c2UsIGhlbHBmdWxfY291bnQsIGVkaXRlZCxcbiAgICAgICAgICAgY3JlYXRlZF9hdCwgdXBkYXRlZF9hdCwgcHVibGlzaGVyX2Rpc3BsYXlfbmFtZSwgcmVwbHlfYm9keV9odG1sLCByZXBseV9jcmVhdGVkX2F0LCByZXBseV91cGRhdGVkX2F0LFxuICAgICAgICAgICBDT1VOVCgqKSBPVkVSICgpIEFTIHRvdGFsXG4gICAgICBGUk9NIHB1YmxpY19yZXZpZXdzXG4gICAgIFdIRVJFICR7c3FsLmpvaW4od2hlcmUsIHNxbGAgQU5EIGApfVxuICAgICBPUkRFUiBCWSAke3Jldmlld09yZGVyKHNvcnQpfVxuICAgICBMSU1JVCAke2xpbWl0fSBPRkZTRVQgJHtvZmZzZXR9YCkpO1xuICBjb25zdCB0b3RhbCA9IHJvd3MubGVuZ3RoID4gMCA/IG51bShyb3dzWzBdIS50b3RhbCkgOiAwO1xuICByZXR1cm4ge1xuICAgIHJldmlld3M6IHJvd3MubWFwKHRvUHVibGljUmV2aWV3KSxcbiAgICB0b3RhbCxcbiAgICBuZXh0Q3Vyc29yOiBvZmZzZXQgKyByb3dzLmxlbmd0aCA8IHRvdGFsID8gZW5jb2RlT2Zmc2V0Q3Vyc29yKG9mZnNldCArIHJvd3MubGVuZ3RoKSA6IG51bGwsXG4gIH07XG59XG5cbi8qKiBFdmVyeSBwdWJsaWMgbGlzdGluZydzIFVSTCBwYXJ0cyArIGxhc3QgdXBkYXRlLCBmb3IgdGhlIHNpdGVtYXAuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdFB1YmxpY0xpc3RpbmdzRm9yU2l0ZW1hcChtYXggPSA1MDAwKTogUHJvbWlzZTx7IHB1Ymxpc2hlcjogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IHVwZGF0ZWRBdDogc3RyaW5nIH1bXT4ge1xuICBjb25zdCBkYiA9IGdldFB1YmxpY1JlYWRlckRiKCk7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGRiLmV4ZWN1dGUoc3FsYFxuICAgIFNFTEVDVCBwdWJsaXNoZXJfaGFuZGxlLCBuYW1lLCB1cGRhdGVkX2F0IEZST00gcHVibGljX2xpc3RpbmdzXG4gICAgIE9SREVSIEJZIHVwZGF0ZWRfYXQgREVTQyBMSU1JVCAke01hdGgubWluKE1hdGgubWF4KG1heCwgMSksIDUwXzAwMCl9YCk7XG4gIHJldHVybiByZXN1bHRSb3dzPHsgcHVibGlzaGVyX2hhbmRsZTogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IHVwZGF0ZWRfYXQ6IERhdGUgfCBzdHJpbmcgfT4ocmVzKVxuICAgIC5tYXAoKHIpID0+ICh7IHB1Ymxpc2hlcjogci5wdWJsaXNoZXJfaGFuZGxlLCBuYW1lOiByLm5hbWUsIHVwZGF0ZWRBdDogaXNvKHIudXBkYXRlZF9hdCkgfSkpO1xufVxuIl19
@@ -14,6 +14,7 @@
14
14
  * identical on a chart and mean opposite things — a manager reading the first
15
15
  * when it is really the second draws exactly the wrong conclusion.
16
16
  */
17
+ import type { WeekStart } from '@pipeline-builder/api-core';
17
18
  import type { ResolvedPeriod } from './period.js';
18
19
  import { type SectionDataSource } from './sections.js';
19
20
  /** Below this many observations a rate is noise, and says so. */
@@ -66,7 +67,7 @@ export interface ReportSnapshot {
66
67
  end: string;
67
68
  };
68
69
  timezone: string;
69
- weekStart: 'monday' | 'sunday';
70
+ weekStart: WeekStart;
70
71
  sections: ComposedSection[];
71
72
  notes: DataQualityNote[];
72
73
  /**
@@ -83,7 +84,7 @@ export interface ComposeOptions {
83
84
  source: SectionDataSource;
84
85
  period: ResolvedPeriod;
85
86
  timezone: string;
86
- weekStart: 'monday' | 'sunday';
87
+ weekStart: WeekStart;
87
88
  orgId: string;
88
89
  orgIds?: string[];
89
90
  /** Features the org holds. A section needing one that is absent renders locked. */
@@ -260,4 +260,4 @@ export async function composeSnapshot(sectionIdList, opts) {
260
260
  generatedAt: (opts.now ?? new Date()).toISOString(),
261
261
  };
262
262
  }
263
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9zZS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwaS9yZXBvcnRpbmcvc3Rha2Vob2xkZXIvY29tcG9zZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBb0J0QyxPQUFPLEVBQUUsVUFBVSxFQUFpRSxNQUFNLGVBQWUsQ0FBQztBQUUxRyxpRUFBaUU7QUFDakUsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0FBZ0V0Qzs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBZ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNuRyxrQkFBa0IsRUFBRSxDQUFDLHFCQUFxQixDQUFDO0NBQzVDLENBQUMsQ0FBQztBQUVILG9GQUFvRjtBQUNwRixTQUFTLFNBQVMsQ0FBQyxRQUEyQixFQUFFLFFBQWdCO0lBQzlELElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUM3QyxPQUFPLENBQUMsMEJBQTBCLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUYsQ0FBQztBQUVELHNGQUFzRjtBQUN0RixTQUFTLFVBQVUsQ0FBQyxTQUFpQixFQUFFLEtBQWM7SUFDbkQsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFdkQsdUVBQXVFO0lBQ3ZFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzdDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBNEIs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LFdBQVcsRUFBRSxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUk7Y0FDeEUsdUZBQXVGO1FBQzNGLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRTtLQUNwRCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSBjb21wb3NlcjogdHVybiBhIGRlZmluaXRpb24ncyBzZWN0aW9uIGxpc3QgaW50byB0aGUgc25hcHNob3QgYSBtYW5hZ2VyIHJlYWRzLlxuICpcbiAqIFRocmVlIHRoaW5ncyBpdCBkb2VzIHRoYXQgdGhlIHJhdyBxdWVyaWVzIGRvIG5vdDpcbiAqXG4gKiAgLSBQRVJJT0QtT1ZFUi1QRVJJT0QuIEV2ZXJ5IGNvbXBhcmFibGUgc2VjdGlvbiBpcyBydW4gdHdpY2UsIGZvciB0aGlzIHBlcmlvZFxuICogICAgYW5kIHRoZSBvbmUgYmVmb3JlLCBzbyB0aGUgc25hcHNob3QgY2FycmllcyBcIjkxJSAoZG93biAzIHBvaW50cylcIi4gVGhlIHRyZW5kXG4gKiAgICBpcyB3aGF0IGEgbWFuYWdlciBhY3RzIG9uOyB0aGUgYWJzb2x1dGUgbnVtYmVyIGFsb25lIHJhcmVseSBpcy5cbiAqICAtIExPQ0tFRCBTRUNUSU9OUy4gQSBzZWN0aW9uIHdob3NlIGZlYXR1cmUgdGhlIG9yZyBsYWNrcyByZW5kZXJzIGFzIGxvY2tlZFxuICogICAgaW5zdGVhZCBvZiBmYWlsaW5nIHRoZSBydW4uIEEgcmVwb3J0IHRoYXQgZGllcyBiZWNhdXNlIG9uZSBnYXRlZCBzZWN0aW9uIHdhc1xuICogICAgaW5jbHVkZWQgaXMgYSBzdXBwb3J0IHRpY2tldDsgYSBsb2NrZWQgcGFuZWwgaXMgYW4gdXBzZWxsLlxuICogIC0gREFUQS1RVUFMSVRZIE5PVEVTLiBNaXNzaW5nIGRlcGxveSB0YWdzIGFuZCB0aW55IHNhbXBsZXMgYXJlIHN0YXRlZCwgbm90XG4gKiAgICBzaWxlbnRseSByZW5kZXJlZCBhcyB6ZXJvLiBcIjAgZGVwbG95c1wiIGFuZCBcIndlIGNhbm5vdCBzZWUgeW91ciBkZXBsb3lzXCIgbG9va1xuICogICAgaWRlbnRpY2FsIG9uIGEgY2hhcnQgYW5kIG1lYW4gb3Bwb3NpdGUgdGhpbmdzIOKAlCBhIG1hbmFnZXIgcmVhZGluZyB0aGUgZmlyc3RcbiAqICAgIHdoZW4gaXQgaXMgcmVhbGx5IHRoZSBzZWNvbmQgZHJhd3MgZXhhY3RseSB0aGUgd3JvbmcgY29uY2x1c2lvbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFJlc29sdmVkUGVyaW9kIH0gZnJvbSAnLi9wZXJpb2QuanMnO1xuaW1wb3J0IHsgZ2V0U2VjdGlvbiwgdHlwZSBTZWN0aW9uQ29udGV4dCwgdHlwZSBTZWN0aW9uRGF0YVNvdXJjZSwgdHlwZSBTZWN0aW9uU3BlYyB9IGZyb20gJy4vc2VjdGlvbnMuanMnO1xuXG4vKiogQmVsb3cgdGhpcyBtYW55IG9ic2VydmF0aW9ucyBhIHJhdGUgaXMgbm9pc2UsIGFuZCBzYXlzIHNvLiAqL1xuZXhwb3J0IGNvbnN0IExPV19TQU1QTEVfVEhSRVNIT0xEID0gNTtcblxuLyoqIFdoaWNoIHdheSBhIG1ldHJpYyBtb3ZlZC4gYGZsYXRgIHdoZW4gdGhlIGNoYW5nZSByb3VuZHMgdG8gbm90aGluZy4gKi9cbmV4cG9ydCB0eXBlIFRyZW5kRGlyZWN0aW9uID0gJ3VwJyB8ICdkb3duJyB8ICdmbGF0JyB8ICd1bmtub3duJztcblxuLyoqIEEgZGF0YS1xdWFsaXR5IGNhdmVhdCBhdHRhY2hlZCB0byB0aGUgd2hvbGUgc25hcHNob3QuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFRdWFsaXR5Tm90ZSB7XG4gIGNvZGU6ICdtaXNzaW5nX2RlcGxveV90YWcnIHwgJ21pc3NpbmdfY29tbWl0X2RhdGEnIHwgJ2xvd19zYW1wbGUnIHwgJ3NlY3Rpb25fZmFpbGVkJyB8ICdzZWN0aW9uX2xvY2tlZCcgfCAncnVsZV91bmF2YWlsYWJsZSc7XG4gIC8qKiBNYW5hZ2VyLXJlYWRhYmxlLiBOb3QgYSBtZXRyaWMgbmFtZSBhbmQgbm90IGEgc3RhY2sgdHJhY2UuICovXG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgLyoqIFRoZSBzZWN0aW9uIGl0IGNvbmNlcm5zLCB3aGVuIGl0IGlzIHNlY3Rpb24tc3BlY2lmaWMuICovXG4gIHNlY3Rpb25JZD86IHN0cmluZztcbn1cblxuLyoqIE9uZSBjb21wb3NlZCBzZWN0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb3NlZFNlY3Rpb24ge1xuICBpZDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICAvKiogYGxvY2tlZGAgd2hlbiB0aGUgb3JnIGxhY2tzIHRoZSBmZWF0dXJlOyBgZmFpbGVkYCB3aGVuIHRoZSBxdWVyeSB0aHJldy4gKi9cbiAgc3RhdGU6ICdvaycgfCAnbG9ja2VkJyB8ICdmYWlsZWQnO1xuICAvKiogVGhlIGZlYXR1cmUgbmVlZGVkLCB3aGVuIGxvY2tlZCDigJQgZHJpdmVzIHRoZSB1cHNlbGwgY29weS4gKi9cbiAgcmVxdWlyZXNGZWF0dXJlPzogc3RyaW5nO1xuICAvKiogVGhpcyBwZXJpb2QncyByYXcgcmVzdWx0LCBleGFjdGx5IGFzIHRoZSBkYXNoYm9hcmQgd291bGQgc2hvdyBpdC4gKi9cbiAgY3VycmVudD86IHVua25vd247XG4gIC8qKiBUaGUgcHJldmlvdXMgcGVyaW9kJ3MgcmVzdWx0LCBmb3IgY29tcGFyYWJsZSBzZWN0aW9ucy4gKi9cbiAgcHJldmlvdXM/OiB1bmtub3duO1xuICAvKiogVGhlIHNpbmdsZSBudW1iZXIgYSBtYW5hZ2VyIHJlYWRzIGZpcnN0LCB3aGVuIHRoZSBzZWN0aW9uIGhhcyBvbmUuICovXG4gIGhlYWRsaW5lPzogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogbnVtYmVyOyB1bml0Pzogc3RyaW5nIH07XG4gIC8qKiBDaGFuZ2UgdmVyc3VzIHRoZSBwcmV2aW91cyBwZXJpb2QsIGZvciBjb21wYXJhYmxlIHNlY3Rpb25zLiAqL1xuICBjaGFuZ2U/OiB7IGFic29sdXRlOiBudW1iZXI7IHBlcmNlbnQ6IG51bWJlciB8IG51bGw7IGRpcmVjdGlvbjogVHJlbmREaXJlY3Rpb24gfTtcbn1cblxuLyoqIFRoZSBmcm96ZW4gb3V0cHV0IG9mIG9uZSBydW4uICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFNuYXBzaG90IHtcbiAgLyoqIFBlcmlvZCBib3VuZHMgKyBsYWJlbCwgY29waWVkIGluIHNvIHRoZSBzbmFwc2hvdCBpcyBzZWxmLWRlc2NyaWJpbmcuICovXG4gIHBlcmlvZDogeyBzdGFydDogc3RyaW5nOyBlbmQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9O1xuICBwcmV2aW91c1BlcmlvZDogeyBzdGFydDogc3RyaW5nOyBlbmQ6IHN0cmluZyB9O1xuICB0aW1lem9uZTogc3RyaW5nO1xuICB3ZWVrU3RhcnQ6ICdtb25kYXknIHwgJ3N1bmRheSc7XG4gIHNlY3Rpb25zOiBDb21wb3NlZFNlY3Rpb25bXTtcbiAgbm90ZXM6IERhdGFRdWFsaXR5Tm90ZVtdO1xuICAvKipcbiAgICogSG93IGV2ZXJ5IG51bWJlciBoZXJlIHdhcyBwcm9kdWNlZCwgc2hvd24gaW4gdGhlIHJlcG9ydCBmb290ZXIuIE1hbmFnZXJzXG4gICAqIGNvbXBhcmUgcmVwb3J0cyB0byB0aGUgZGFzaGJvYXJkOyBzYXlpbmcgcGxhaW5seSB0aGF0IGJvdGggcnVuIHRoZSBzYW1lXG4gICAqIHF1ZXJpZXMgb3ZlciB0aGUgc2FtZSB3aW5kb3cgaXMgd2hhdCBtYWtlcyBhIGRpZmZlcmVuY2UgaW52ZXN0aWdhYmxlIHJhdGhlclxuICAgKiB0aGFuIGEgcmVhc29uIHRvIGRpc3RydXN0IGJvdGguXG4gICAqL1xuICBtZXRob2RvbG9neTogc3RyaW5nO1xuICBnZW5lcmF0ZWRBdDogc3RyaW5nO1xufVxuXG4vKiogV2hhdCB0aGUgY29tcG9zZXIgbmVlZHMgdG8ga25vdyBhYm91dCB0aGUgb3JnJ3MgZW50aXRsZW1lbnRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb3NlT3B0aW9ucyB7XG4gIHNvdXJjZTogU2VjdGlvbkRhdGFTb3VyY2U7XG4gIHBlcmlvZDogUmVzb2x2ZWRQZXJpb2Q7XG4gIHRpbWV6b25lOiBzdHJpbmc7XG4gIHdlZWtTdGFydDogJ21vbmRheScgfCAnc3VuZGF5JztcbiAgb3JnSWQ6IHN0cmluZztcbiAgb3JnSWRzPzogc3RyaW5nW107XG4gIC8qKiBGZWF0dXJlcyB0aGUgb3JnIGhvbGRzLiBBIHNlY3Rpb24gbmVlZGluZyBvbmUgdGhhdCBpcyBhYnNlbnQgcmVuZGVycyBsb2NrZWQuICovXG4gIGZlYXR1cmVzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgbm93PzogRGF0ZTtcbn1cblxuLyoqXG4gKiBGZWF0dXJlcyB0aGF0LCBpbnNpZGUgYSBSRVBPUlQsIHN0YW5kIGluIGZvciBhbm90aGVyLlxuICpcbiAqIEJ1eWluZyBTdGFrZWhvbGRlciBSZXBvcnRzIGJ1eXMgdGhlIERPUkEgU0VDVElPTlMgb2YgYSByZXBvcnQuIEl0IGRvZXMgbm90IGJ1eSB0aGVcbiAqIGxpdmUgRE9SQSBkYXNoYm9hcmQsIHdoaWNoIHN0YXlzIGJlaGluZCBgYWR2YW5jZWRfcmVwb3J0aW5nYCBhbmQgaXMgZ2F0ZWQgb24gaXRzIG93blxuICogcm91dGVzIOKAlCBzbyB0aGlzIHN1YnN0aXR1dGlvbiBpcyBkZWxpYmVyYXRlbHkgc2NvcGVkIHRvIGNvbXBvc2l0aW9uIGFuZCBleGlzdHNcbiAqIG5vd2hlcmUgZWxzZS4gV2l0aG91dCBpdCwgYSBQcm8gY3VzdG9tZXIgd2hvIGJvdWdodCB0aGUgcmVwb3J0cyBhZGQtb24gd291bGQgb3BlblxuICogdGhlaXIgZmlyc3Qgd2Vla2x5IHJlcG9ydCBhbmQgZmluZCBpdHMgaGVhZGxpbmUgcGFuZWxzIGxvY2tlZCBiZWhpbmQgYSBzZWNvbmRcbiAqIHB1cmNoYXNlLCB3aGljaCBpcyBub3Qgd2hhdCB0aGUgYWRkLW9uJ3Mgb3duIGRlc2NyaXB0aW9uIHByb21pc2VzLlxuICpcbiAqIFN0YXRlZCBhcyBkYXRhIHJhdGhlciB0aGFuIGFuIGBpZmAsIHNvIGFkZGluZyBhIHNlY3Rpb24gdGhhdCBuZWVkcyBhIGRpZmZlcmVudFxuICogZmVhdHVyZSBjYW5ub3Qgc2lsZW50bHkgaW5oZXJpdCB0aGUgY2FydmUtb3V0LlxuICovXG5leHBvcnQgY29uc3QgUkVQT1JUX0ZFQVRVUkVfU1VCU1RJVFVURVM6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHJlYWRvbmx5IHN0cmluZ1tdPj4gPSBPYmplY3QuZnJlZXplKHtcbiAgYWR2YW5jZWRfcmVwb3J0aW5nOiBbJ3N0YWtlaG9sZGVyX3JlcG9ydHMnXSxcbn0pO1xuXG4vKiogRG9lcyB0aGUgb3JnIGhvbGQgYHJlcXVpcmVkYCwgb3Igc29tZXRoaW5nIHRoYXQgc3RhbmRzIGluIGZvciBpdCBpbiBhIHJlcG9ydD8gKi9cbmZ1bmN0aW9uIHNhdGlzZmllcyhmZWF0dXJlczogcmVhZG9ubHkgc3RyaW5nW10sIHJlcXVpcmVkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKGZlYXR1cmVzLmluY2x1ZGVzKHJlcXVpcmVkKSkgcmV0dXJuIHRydWU7XG4gIHJldHVybiAoUkVQT1JUX0ZFQVRVUkVfU1VCU1RJVFVURVNbcmVxdWlyZWRdID8/IFtdKS5zb21lKChhbHQpID0+IGZlYXR1cmVzLmluY2x1ZGVzKGFsdCkpO1xufVxuXG4vKiogUHVsbCBhIGNvbXBhcmFibGUgbnVtYmVyIG91dCBvZiBhIHNlY3Rpb24gcmVzdWx0LCBvciBudWxsIHdoZW4gdGhlcmUgaXNuJ3Qgb25lLiAqL1xuZnVuY3Rpb24gaGVhZGxpbmVPZihzZWN0aW9uSWQ6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBudW1iZXI7IHVuaXQ/OiBzdHJpbmcgfSB8IG51bGwge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIG51bGw7XG5cbiAgLy8gVGltZSBzZXJpZXMgKHN1Y2Nlc3MgcmF0ZSwgYnVpbGQgc3VjY2Vzcyk6IHRoZSBMQVNUIGJ1Y2tldCBpcyBcIm5vd1wiLlxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGxhc3QgPSB2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpZiAodHlwZW9mIGxhc3Q/LnN1Y2Nlc3NfcGN0ID09PSAnbnVtYmVyJykgcmV0dXJuIHsgbGFiZWw6ICdTdWNjZXNzIHJhdGUnLCB2YWx1ZTogbGFzdC5zdWNjZXNzX3BjdCwgdW5pdDogJyUnIH07XG4gICAgLy8gRXhlY3V0aW9uIGNvdW50czogdG90YWwgcnVucyBhY3Jvc3MgcGlwZWxpbmVzLlxuICAgIC8vXG4gICAgLy8gQSB0b3RhbCBvZiBaRVJPIGlzIGEgcmVhbCBoZWFkbGluZSwgbm90IG1pc3NpbmcgZGF0YTogXCIwIGRlcGxveXMsIGRvd24gZnJvbVxuICAgIC8vIDVcIiBpcyB0aGUgc2luZ2xlIG1vc3QgaW1wb3J0YW50IHRoaW5nIGEgd2Vla2x5IHJlcG9ydCBjYW4gdGVsbCBhIG1hbmFnZXIsXG4gICAgLy8gYW5kIHRyZWF0aW5nIDAgYXMgXCJubyB2YWx1ZVwiIG1hZGUgZXhhY3RseSB0aGF0IGNhc2UgZGlzYXBwZWFyIOKAlCB0aGUgY2hhbmdlXG4gICAgLy8gY2FtZSBiYWNrIGB1bmtub3duYCBhbmQgbm8gYXJyb3cgd2FzIHNob3duLiBTbyB0aGUgdGVzdCBpcyB3aGV0aGVyIGFueSByb3dcbiAgICAvLyBDQVJSSUVEIGEgY291bnQsIG5vdCB3aGV0aGVyIHRoZSBzdW0gaXMgcG9zaXRpdmUuXG4gICAgbGV0IGNvdW50ZWQgPSBmYWxzZTtcbiAgICBjb25zdCB0b3RhbCA9ICh2YWx1ZSBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4pLnJlZHVjZSgoc3VtLCByb3cpID0+IHtcbiAgICAgIGNvbnN0IG4gPSByb3cudG90YWwgPz8gcm93LmNvdW50ID8/IHJvdy5leGVjdXRpb25zO1xuICAgICAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJykgcmV0dXJuIHN1bTtcbiAgICAgIGNvdW50ZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIHN1bSArIG47XG4gICAgfSwgMCk7XG4gICAgaWYgKGNvdW50ZWQpIHJldHVybiB7IGxhYmVsOiAnVG90YWwnLCB2YWx1ZTogdG90YWwgfTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG9iaiA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvLyBET1JBOiBkZXBsb3ltZW50IGZyZXF1ZW5jeSBpcyB0aGUgaGVhZGxpbmUgYSBtYW5hZ2VyIHJlY29nbmlzZXMuXG4gIGNvbnN0IGVudnMgPSBvYmouZW52aXJvbm1lbnRzO1xuICBpZiAoQXJyYXkuaXNBcnJheShlbnZzKSAmJiBlbnZzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBmaXJzdCA9IGVudnNbMF0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3QgZGYgPSAoZmlyc3QuZGVwbG95bWVudEZyZXF1ZW5jeSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCk/LmRlcGxveW1lbnRzO1xuICAgIGlmICh0eXBlb2YgZGYgPT09ICdudW1iZXInKSByZXR1cm4geyBsYWJlbDogJ0RlcGxveXMnLCB2YWx1ZTogZGYgfTtcbiAgfVxuICAvLyBQbHVnaW4gc3VtbWFyeSBhbmQgZnJpZW5kczogYSBwbGFpbiB0b3RhbC5cbiAgLy8gWmVybyBpcyBhIHZhbHVlIGhlcmUgdG9vIOKAlCBgcGx1Z2luX3ZlcnNpb25zYCByZXBvcnRpbmcgMCBvdXRkYXRlZCBwbHVnaW5zIGlzXG4gIC8vIGdvb2QgbmV3cyBhIG1hbmFnZXIgc2hvdWxkIHNlZSwgbm90IGFuIGFic2VudCBzZWN0aW9uLlxuICBmb3IgKGNvbnN0IGtleSBvZiBbJ3RvdGFsJywgJ2NvdW50JywgJ2RlcGxveW1lbnRzJ10pIHtcbiAgICBpZiAodHlwZW9mIG9ialtrZXldID09PSAnbnVtYmVyJykgcmV0dXJuIHsgbGFiZWw6IHNlY3Rpb25JZCA9PT0gJ3BsdWdpbl92ZXJzaW9ucycgPyAnT3V0ZGF0ZWQnIDogJ1RvdGFsJywgdmFsdWU6IG9ialtrZXldIGFzIG51bWJlciB9O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKiogQ2hhbmdlIGJldHdlZW4gdHdvIGhlYWRsaW5lIG51bWJlcnMuICovXG5mdW5jdGlvbiBjaGFuZ2VPZihcbiAgY3VycmVudDogeyB2YWx1ZTogbnVtYmVyIH0gfCBudWxsLFxuICBwcmV2aW91czogeyB2YWx1ZTogbnVtYmVyIH0gfCBudWxsLFxuKTogQ29tcG9zZWRTZWN0aW9uWydjaGFuZ2UnXSB7XG4gIGlmICghY3VycmVudCB8fCAhcHJldmlvdXMpIHJldHVybiB7IGFic29sdXRlOiAwLCBwZXJjZW50OiBudWxsLCBkaXJlY3Rpb246ICd1bmtub3duJyB9O1xuICBjb25zdCBhYnNvbHV0ZSA9IE51bWJlcigoY3VycmVudC52YWx1ZSAtIHByZXZpb3VzLnZhbHVlKS50b0ZpeGVkKDIpKTtcbiAgLy8gQSBwZXJjZW50IGNoYW5nZSBvZmYgYSB6ZXJvIGJhc2VsaW5lIGlzIHVuZGVmaW5lZCwgbm90IGluZmluaXRlOiBnb2luZyBmcm9tIDBcbiAgLy8gdG8gNSBkZXBsb3lzIGlzIFwiNSBtb3JlXCIsIG5ldmVyIFwiK+KIniVcIi5cbiAgY29uc3QgcGVyY2VudCA9IHByZXZpb3VzLnZhbHVlID09PSAwID8gbnVsbCA6IE51bWJlcigoKGFic29sdXRlIC8gcHJldmlvdXMudmFsdWUpICogMTAwKS50b0ZpeGVkKDEpKTtcbiAgY29uc3QgZGlyZWN0aW9uOiBUcmVuZERpcmVjdGlvbiA9IGFic29sdXRlID09PSAwID8gJ2ZsYXQnIDogYWJzb2x1dGUgPiAwID8gJ3VwJyA6ICdkb3duJztcbiAgcmV0dXJuIHsgYWJzb2x1dGUsIHBlcmNlbnQsIGRpcmVjdGlvbiB9O1xufVxuXG4vKiogQ291bnQgdGhlIG9ic2VydmF0aW9ucyBiZWhpbmQgYSBzZWN0aW9uLCBmb3IgdGhlIGxvdy1zYW1wbGUgbm90ZS4gKi9cbmZ1bmN0aW9uIHNhbXBsZVNpemUodmFsdWU6IHVua25vd24pOiBudW1iZXIgfCBudWxsIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuICh2YWx1ZSBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4pLnJlZHVjZSgoc3VtLCByb3cpID0+IHtcbiAgICAgIGNvbnN0IG4gPSByb3cudG90YWwgPz8gcm93LmNvdW50ID8/IHJvdy5leGVjdXRpb25zID8/IHJvdy5kZXBsb3ltZW50cztcbiAgICAgIHJldHVybiBzdW0gKyAodHlwZW9mIG4gPT09ICdudW1iZXInID8gbiA6IDApO1xuICAgIH0sIDApO1xuICB9XG4gIGNvbnN0IG9iaiA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbDtcbiAgY29uc3QgZW52cyA9IG9iaj8uZW52aXJvbm1lbnRzO1xuICBpZiAoQXJyYXkuaXNBcnJheShlbnZzKSkge1xuICAgIHJldHVybiBlbnZzLnJlZHVjZSgoc3VtOiBudW1iZXIsIGUpID0+IHtcbiAgICAgIGNvbnN0IGF0dGVtcHRzID0gKChlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5jaGFuZ2VGYWlsdXJlUmF0ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCk/LmF0dGVtcHRzO1xuICAgICAgcmV0dXJuIHN1bSArICh0eXBlb2YgYXR0ZW1wdHMgPT09ICdudW1iZXInID8gYXR0ZW1wdHMgOiAwKTtcbiAgICB9LCAwKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqIERlcGxveS1jb3ZlcmFnZSBub3RlczogdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBcInplcm8gZGVwbG95c1wiIGFuZCBcImJsaW5kXCIuICovXG5mdW5jdGlvbiBkZXBsb3lDb3ZlcmFnZU5vdGVzKGRvcmE6IHVua25vd24pOiBEYXRhUXVhbGl0eU5vdGVbXSB7XG4gIGNvbnN0IG5vdGVzOiBEYXRhUXVhbGl0eU5vdGVbXSA9IFtdO1xuICBjb25zdCBjb3ZlcmFnZSA9IChkb3JhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCk/LmNvdmVyYWdlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICBjb25zdCB3aXRob3V0ID0gY292ZXJhZ2U/LndpdGhvdXREZXBsb3lzO1xuICBpZiAodHlwZW9mIHdpdGhvdXQgPT09ICdudW1iZXInICYmIHdpdGhvdXQgPiAwKSB7XG4gICAgbm90ZXMucHVzaCh7XG4gICAgICBjb2RlOiAnbWlzc2luZ19kZXBsb3lfdGFnJyxcbiAgICAgIHNlY3Rpb25JZDogJ2RvcmEnLFxuICAgICAgbWVzc2FnZTogYERlcGxveSBkYXRhIHVuYXZhaWxhYmxlIGZvciAke3dpdGhvdXR9IHBpcGVsaW5lJHt3aXRob3V0ID09PSAxID8gJycgOiAncyd9OiB0aGV5IGhhdmUgbm90IHJlLXN5bnRoZWQgd2l0aCBkZXBsb3kgdGFncywgc28gdGhlaXIgZGVwbG95cyBhcmUgbm90IGNvdW50ZWQgaGVyZS4gVGhpcyBpcyBub3QgXCJ6ZXJvIGRlcGxveXNcIi5gLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IGVudnMgPSAoZG9yYSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwpPy5lbnZpcm9ubWVudHM7XG4gIGlmIChBcnJheS5pc0FycmF5KGVudnMpKSB7XG4gICAgY29uc3Qgbm9MZWFkID0gKGVudnMgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KS5maWx0ZXIoKGUpID0+IHtcbiAgICAgIGNvbnN0IGx0ID0gZS5sZWFkVGltZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBsdCAmJiBsdC5tZWRpYW5TZWNvbmRzID09PSBudWxsO1xuICAgIH0pO1xuICAgIGlmIChub0xlYWQubGVuZ3RoID4gMCkge1xuICAgICAgbm90ZXMucHVzaCh7XG4gICAgICAgIGNvZGU6ICdtaXNzaW5nX2NvbW1pdF9kYXRhJyxcbiAgICAgICAgc2VjdGlvbklkOiAnZG9yYScsXG4gICAgICAgIG1lc3NhZ2U6IGBMZWFkIHRpbWUgdW5hdmFpbGFibGUgZm9yICR7bm9MZWFkLmxlbmd0aH0gZW52aXJvbm1lbnQke25vTGVhZC5sZW5ndGggPT09IDEgPyAnJyA6ICdzJ306IG5vIHN1Y2Nlc3NmdWwgZGVwbG95IGNhcnJpZWQgYSByZXNvbHZhYmxlIGNvbW1pdCB0aW1lc3RhbXAsIHNvIGNvbW1pdC10by1kZXBsb3kgdGltZSBjb3VsZCBub3QgYmUgbWVhc3VyZWQuYCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbm90ZXM7XG59XG5cbi8qKiBNYW5hZ2VyLWZhY2luZyBuYW1lcyBvZiB0aGUgbmVlZHMtYXR0ZW50aW9uIHJ1bGVzLCBmb3IgdGhlIHVuYXZhaWxhYmxlIG5vdGUuICovXG5jb25zdCBBVFRFTlRJT05fUlVMRV9MQUJFTFM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIGxvd19zdWNjZXNzX3JhdGU6ICdsb3cgc3VjY2VzcyByYXRlJyxcbiAgc2xvd2VyX3A5NTogJ3Nsb3dlciBidWlsZHMnLFxuICBjb25zZWN1dGl2ZV9mYWlsdXJlczogJ2NvbnNlY3V0aXZlIGZhaWx1cmVzJyxcbiAgbm9fcmVjZW50X3N1Y2Nlc3M6ICdubyByZWNlbnQgc3VjY2VzcycsXG4gIGZhaWxlZF9hZnRlcl9jb25maWdfY2hhbmdlOiAnZmFpbGVkIGFmdGVyIGEgY29uZmlndXJhdGlvbiBjaGFuZ2UnLFxuICB2dWxuZXJhYmxlX3BsdWdpbjogJ3Z1bG5lcmFibGUgcGx1Z2lucycsXG4gIG5vX2RlcGxveV90cmFja2luZzogJ2RlcGxveSB0cmFja2luZycsXG59O1xuXG4vKipcbiAqIFRoZSBuZWVkcy1hdHRlbnRpb24gcnVsZXMgdGhhdCBjb3VsZCBub3QgcnVuLiBBbiBlbXB0eSBsaXN0IHRoZXJlIG11c3QgcmVhZCBhc1xuICogXCJub3RoaW5nIHRyaXBwZWRcIiwgbmV2ZXIgYXMgXCJhIHJ1bGUgY291bGQgbm90IGxvb2tcIiDigJQgYWJvdmUgYWxsIGZvciB0aGVcbiAqIHZ1bG5lcmFibGUtcGx1Z2luIHJ1bGUsIHdoZXJlIHRoZSBzZWNvbmQgcmVhZGluZyBpcyBhIGZhbHNlIGFsbC1jbGVhci5cbiAqL1xuZnVuY3Rpb24gYXR0ZW50aW9uTm90ZXModmFsdWU6IHVua25vd24pOiBEYXRhUXVhbGl0eU5vdGVbXSB7XG4gIGNvbnN0IHJ1bGVzID0gKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCk/LnVuYXZhaWxhYmxlUnVsZXM7XG4gIGlmICghQXJyYXkuaXNBcnJheShydWxlcykgfHwgcnVsZXMubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG4gIGNvbnN0IG5hbWVzID0gcnVsZXMubWFwKChyKSA9PiBBVFRFTlRJT05fUlVMRV9MQUJFTFNbU3RyaW5nKHIpXSA/PyBTdHJpbmcocikpO1xuICByZXR1cm4gW3tcbiAgICBjb2RlOiAncnVsZV91bmF2YWlsYWJsZScsXG4gICAgc2VjdGlvbklkOiAnbmVlZHNfYXR0ZW50aW9uJyxcbiAgICBtZXNzYWdlOiBgU29tZSBjaGVja3MgY291bGQgbm90IHJ1biB0aGlzIHBlcmlvZCAoJHtuYW1lcy5qb2luKCcsICcpfSk6IHRoZWlyIGRhdGEgd2FzIHVuYXZhaWxhYmxlLiBgXG4gICAgICArICdBIHBpcGVsaW5lIG1pc3NpbmcgZnJvbSB0aGlzIGxpc3Qgd2FzIG5vdCBjaGVja2VkIGZvciB0aG9zZSDigJQgdGhpcyBpcyBub3QgYW4gYWxsLWNsZWFyLicsXG4gIH1dO1xufVxuXG4vKipcbiAqIENvbXBvc2Ugb25lIHBlcmlvZCdzIHNuYXBzaG90LlxuICpcbiAqIE5ldmVyIHRocm93cyBmb3IgYSBzZWN0aW9uLWxldmVsIHByb2JsZW06IGEgc2VjdGlvbiB0aGF0IGZhaWxzIGlzIG1hcmtlZFxuICogYGZhaWxlZGAgd2l0aCBhIG5vdGUsIGFuZCB0aGUgcmVzdCBvZiB0aGUgcmVwb3J0IHN0aWxsIHJlYWNoZXMgdGhlIGxlYWQuIEEgcnVuXG4gKiB0aGF0IHByb2R1Y2VzIG5pbmUgZ29vZCBzZWN0aW9ucyBhbmQgb25lIGZhaWx1cmUgaXMgdXNlZnVsOyBhIHJ1biB0aGF0IHByb2R1Y2VzXG4gKiBhbiBleGNlcHRpb24gaXMgbm90LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29tcG9zZVNuYXBzaG90KHNlY3Rpb25JZExpc3Q6IHJlYWRvbmx5IHN0cmluZ1tdLCBvcHRzOiBDb21wb3NlT3B0aW9ucyk6IFByb21pc2U8UmVwb3J0U25hcHNob3Q+IHtcbiAgY29uc3QgeyBzb3VyY2UsIHBlcmlvZCwgdGltZXpvbmUsIHdlZWtTdGFydCwgb3JnSWQsIG9yZ0lkcywgZmVhdHVyZXMgfSA9IG9wdHM7XG4gIGNvbnN0IG5vdGVzOiBEYXRhUXVhbGl0eU5vdGVbXSA9IFtdO1xuICBjb25zdCBzZWN0aW9uczogQ29tcG9zZWRTZWN0aW9uW10gPSBbXTtcblxuICBjb25zdCBjdHhGb3IgPSAoZnJvbTogRGF0ZSwgdG86IERhdGUpOiBTZWN0aW9uQ29udGV4dCA9PiAoe1xuICAgIG9yZ0lkLFxuICAgIC4uLihvcmdJZHMgPyB7IG9yZ0lkcyB9IDoge30pLFxuICAgIGZyb206IGZyb20udG9JU09TdHJpbmcoKSxcbiAgICB0bzogdG8udG9JU09TdHJpbmcoKSxcbiAgICB0ejogdGltZXpvbmUsXG4gICAgd2Vla1N0YXJ0LFxuICAgIC8vIFRoZSBwcmV2aW91cyBwZXJpb2QgdHJhdmVscyBXSVRIIHRoZSBjb250ZXh0LCBmb3IgdGhlIGFuYWx5dGljcyBzZWN0aW9uc1xuICAgIC8vIHdob3NlIHRyZW5kIGlzIHBlciBjYXRlZ29yeSwgcGVyIHN0YWdlIG9yIHBlciBwaXBlbGluZS4gVGhvc2UgY2Fubm90IGJlXG4gICAgLy8gaGFuZGxlZCBieSBydW5uaW5nIHRoZSBzZWN0aW9uIHR3aWNlIGFuZCBjb21wYXJpbmcgb25lIGhlYWRsaW5lIOKAlCB0aGVcbiAgICAvLyBjb21wYXJpc29uIGlzIGEgam9pbiwgYW5kIGRvaW5nIGl0IGluIHRoZSBjb21wb3NlciBhZnRlcndhcmRzIHdvdWxkIG1lYW5cbiAgICAvLyByZS1pbXBsZW1lbnRpbmcgaXQgZm9yIGV2ZXJ5IHNoYXBlLlxuICAgIHByZXZpb3VzRnJvbTogcGVyaW9kLnByZXZTdGFydC50b0lTT1N0cmluZygpLFxuICAgIHByZXZpb3VzVG86IHBlcmlvZC5wcmV2RW5kLnRvSVNPU3RyaW5nKCksXG4gIH0pO1xuICBjb25zdCBjdXJyZW50Q3R4ID0gY3R4Rm9yKHBlcmlvZC5zdGFydCwgcGVyaW9kLmVuZCk7XG4gIGNvbnN0IHByZXZpb3VzQ3R4ID0gY3R4Rm9yKHBlcmlvZC5wcmV2U3RhcnQsIHBlcmlvZC5wcmV2RW5kKTtcblxuICBmb3IgKGNvbnN0IGlkIG9mIHNlY3Rpb25JZExpc3QpIHtcbiAgICBjb25zdCBzcGVjOiBTZWN0aW9uU3BlYyB8IHVuZGVmaW5lZCA9IGdldFNlY3Rpb24oaWQpO1xuICAgIGlmICghc3BlYykge1xuICAgICAgLy8gQW4gdW5rbm93biBpZCBpcyBhIGRlZmluaXRpb24gcmVmZXJlbmNpbmcgYSBzZWN0aW9uIHRoYXQgbm8gbG9uZ2VyIGV4aXN0cy5cbiAgICAgIC8vIFJlY29yZGVkIHJhdGhlciB0aGFuIGRyb3BwZWQsIHNvIHRoZSBsZWFkIGNhbiBzZWUgd2h5IGEgcGFuZWwgdmFuaXNoZWQuXG4gICAgICBzZWN0aW9ucy5wdXNoKHsgaWQsIHRpdGxlOiBpZCwgc3RhdGU6ICdmYWlsZWQnIH0pO1xuICAgICAgbm90ZXMucHVzaCh7IGNvZGU6ICdzZWN0aW9uX2ZhaWxlZCcsIHNlY3Rpb25JZDogaWQsIG1lc3NhZ2U6IGBVbmtub3duIHJlcG9ydCBzZWN0aW9uIFwiJHtpZH1cIiDigJQgaXQgbWF5IGhhdmUgYmVlbiByZW1vdmVkLmAgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoc3BlYy5yZXF1aXJlc0ZlYXR1cmUgJiYgIXNhdGlzZmllcyhmZWF0dXJlcywgc3BlYy5yZXF1aXJlc0ZlYXR1cmUpKSB7XG4gICAgICBzZWN0aW9ucy5wdXNoKHtcbiAgICAgICAgaWQsIHRpdGxlOiBzcGVjLnRpdGxlLCBzdGF0ZTogJ2xvY2tlZCcsIHJlcXVpcmVzRmVhdHVyZTogc3BlYy5yZXF1aXJlc0ZlYXR1cmUsXG4gICAgICB9KTtcbiAgICAgIG5vdGVzLnB1c2goe1xuICAgICAgICBjb2RlOiAnc2VjdGlvbl9sb2NrZWQnLFxuICAgICAgICBzZWN0aW9uSWQ6IGlkLFxuICAgICAgICBtZXNzYWdlOiBgXCIke3NwZWMudGl0bGV9XCIgbmVlZHMgdGhlICR7c3BlYy5yZXF1aXJlc0ZlYXR1cmV9IGFkZC1vbi4gVGhlIHJlc3Qgb2YgdGhpcyByZXBvcnQgaXMgdW5hZmZlY3RlZC5gLFxuICAgICAgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgY3VycmVudCA9IGF3YWl0IHNwZWMucnVuKHNvdXJjZSwgY3VycmVudEN0eCk7XG4gICAgICBjb25zdCBjb21wb3NlZDogQ29tcG9zZWRTZWN0aW9uID0geyBpZCwgdGl0bGU6IHNwZWMudGl0bGUsIHN0YXRlOiAnb2snLCBjdXJyZW50IH07XG5cbiAgICAgIGNvbnN0IGhlYWQgPSBoZWFkbGluZU9mKGlkLCBjdXJyZW50KTtcbiAgICAgIGlmIChoZWFkKSBjb21wb3NlZC5oZWFkbGluZSA9IGhlYWQ7XG5cbiAgICAgIGlmIChzcGVjLmNvbXBhcmFibGUpIHtcbiAgICAgICAgLy8gVGhlIGNvbXBhcmlzb24gaXMgYmVzdC1lZmZvcnQ6IGEgZmFpbGVkIHByZXZpb3VzIHBlcmlvZCBtdXN0IG5vdCBjb3N0IHRoZVxuICAgICAgICAvLyBsZWFkIHRoaXMgcGVyaW9kJ3MgbnVtYmVycy5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwcmV2aW91cyA9IGF3YWl0IHNwZWMucnVuKHNvdXJjZSwgcHJldmlvdXNDdHgpO1xuICAgICAgICAgIGNvbXBvc2VkLnByZXZpb3VzID0gcHJldmlvdXM7XG4gICAgICAgICAgY29tcG9zZWQuY2hhbmdlID0gY2hhbmdlT2YoaGVhZCwgaGVhZGxpbmVPZihpZCwgcHJldmlvdXMpKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgY29tcG9zZWQuY2hhbmdlID0geyBhYnNvbHV0ZTogMCwgcGVyY2VudDogbnVsbCwgZGlyZWN0aW9uOiAndW5rbm93bicgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzYW1wbGUgPSBzYW1wbGVTaXplKGN1cnJlbnQpO1xuICAgICAgaWYgKHNhbXBsZSAhPT0gbnVsbCAmJiBzYW1wbGUgPiAwICYmIHNhbXBsZSA8IExPV19TQU1QTEVfVEhSRVNIT0xEKSB7XG4gICAgICAgIG5vdGVzLnB1c2goe1xuICAgICAgICAgIGNvZGU6ICdsb3dfc2FtcGxlJyxcbiAgICAgICAgICBzZWN0aW9uSWQ6IGlkLFxuICAgICAgICAgIG1lc3NhZ2U6IGBcIiR7c3BlYy50aXRsZX1cIiBpcyBiYXNlZCBvbiAke3NhbXBsZX0gb2JzZXJ2YXRpb24ke3NhbXBsZSA9PT0gMSA/ICcnIDogJ3MnfSDigJQgcGVyY2VudGFnZXMgc3dpbmcgd2lsZGx5IGF0IHRoaXMgdm9sdW1lLiBSZWFkIHRoZSBjb3VudHMsIG5vdCB0aGUgcmF0ZS5gLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlkID09PSAnZG9yYScpIG5vdGVzLnB1c2goLi4uZGVwbG95Q292ZXJhZ2VOb3RlcyhjdXJyZW50KSk7XG4gICAgICBpZiAoaWQgPT09ICduZWVkc19hdHRlbnRpb24nKSBub3Rlcy5wdXNoKC4uLmF0dGVudGlvbk5vdGVzKGN1cnJlbnQpKTtcbiAgICAgIHNlY3Rpb25zLnB1c2goY29tcG9zZWQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgc2VjdGlvbnMucHVzaCh7IGlkLCB0aXRsZTogc3BlYy50aXRsZSwgc3RhdGU6ICdmYWlsZWQnIH0pO1xuICAgICAgbm90ZXMucHVzaCh7XG4gICAgICAgIGNvZGU6ICdzZWN0aW9uX2ZhaWxlZCcsXG4gICAgICAgIHNlY3Rpb25JZDogaWQsXG4gICAgICAgIG1lc3NhZ2U6IGBcIiR7c3BlYy50aXRsZX1cIiBjb3VsZCBub3QgYmUgY29tcHV0ZWQgZm9yIHRoaXMgcGVyaW9kLiBUaGUgcmVzdCBvZiB0aGUgcmVwb3J0IGlzIHVuYWZmZWN0ZWQuYCxcbiAgICAgIH0pO1xuICAgICAgdm9pZCBlcnI7IC8vIHRoZSByZWFzb24gaXMgbG9nZ2VkIGJ5IHRoZSBjYWxsZXIsIG5ldmVyIHNob3duIHRvIGEgbWFuYWdlclxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGVyaW9kOiB7IHN0YXJ0OiBwZXJpb2Quc3RhcnQudG9JU09TdHJpbmcoKSwgZW5kOiBwZXJpb2QuZW5kLnRvSVNPU3RyaW5nKCksIGxhYmVsOiBwZXJpb2QubGFiZWwgfSxcbiAgICBwcmV2aW91c1BlcmlvZDogeyBzdGFydDogcGVyaW9kLnByZXZTdGFydC50b0lTT1N0cmluZygpLCBlbmQ6IHBlcmlvZC5wcmV2RW5kLnRvSVNPU3RyaW5nKCkgfSxcbiAgICB0aW1lem9uZSxcbiAgICB3ZWVrU3RhcnQsXG4gICAgc2VjdGlvbnMsXG4gICAgbm90ZXMsXG4gICAgbWV0aG9kb2xvZ3k6XG4gICAgICBgQ29tcHV0ZWQgZnJvbSBwaXBlbGluZSBldmVudHMgYmV0d2VlbiAke3BlcmlvZC5zdGFydC50b0lTT1N0cmluZygpfSBhbmQgJHtwZXJpb2QuZW5kLnRvSVNPU3RyaW5nKCl9LCBgXG4gICAgICArIGBidWNrZXRlZCBpbiAke3RpbWV6b25lfSB3aXRoIHdlZWtzIHN0YXJ0aW5nICR7d2Vla1N0YXJ0fS4gQ29tcGFyaXNvbiBwZXJpb2Q6IGBcbiAgICAgICsgYCR7cGVyaW9kLnByZXZTdGFydC50b0lTT1N0cmluZygpfSB0byAke3BlcmlvZC5wcmV2RW5kLnRvSVNPU3RyaW5nKCl9LiBgXG4gICAgICArICdUaGVzZSBhcmUgdGhlIHNhbWUgcXVlcmllcyB0aGUgZGFzaGJvYXJkIHJ1bnMgb3ZlciB0aGUgc2FtZSB3aW5kb3csIHNvIHRoZSB0d28gYWdyZWUuJyxcbiAgICBnZW5lcmF0ZWRBdDogKG9wdHMubm93ID8/IG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCksXG4gIH07XG59XG4iXX0=
263
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9zZS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwaS9yZXBvcnRpbmcvc3Rha2Vob2xkZXIvY29tcG9zZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBcUJ0QyxPQUFPLEVBQUUsVUFBVSxFQUFpRSxNQUFNLGVBQWUsQ0FBQztBQUUxRyxpRUFBaUU7QUFDakUsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0FBZ0V0Qzs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBZ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNuRyxrQkFBa0IsRUFBRSxDQUFDLHFCQUFxQixDQUFDO0NBQzVDLENBQUMsQ0FBQztBQUVILG9GQUFvRjtBQUNwRixTQUFTLFNBQVMsQ0FBQyxRQUEyQixFQUFFLFFBQWdCO0lBQzlELElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUM3QyxPQUFPLENBQUMsMEJBQTBCLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUYsQ0FBQztBQUVELHNGQUFzRjtBQUN0RixTQUFTLFVBQVUsQ0FBQyxTQUFpQixFQUFFLEtBQWM7SUFDbkQsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFdkQsdUVBQXVFO0lBQ3ZFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzdDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBNEIs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LFdBQVcsRUFBRSxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUk7Y0FDeEUsdUZBQXVGO1FBQzNGLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRTtLQUNwRCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSBjb21wb3NlcjogdHVybiBhIGRlZmluaXRpb24ncyBzZWN0aW9uIGxpc3QgaW50byB0aGUgc25hcHNob3QgYSBtYW5hZ2VyIHJlYWRzLlxuICpcbiAqIFRocmVlIHRoaW5ncyBpdCBkb2VzIHRoYXQgdGhlIHJhdyBxdWVyaWVzIGRvIG5vdDpcbiAqXG4gKiAgLSBQRVJJT0QtT1ZFUi1QRVJJT0QuIEV2ZXJ5IGNvbXBhcmFibGUgc2VjdGlvbiBpcyBydW4gdHdpY2UsIGZvciB0aGlzIHBlcmlvZFxuICogICAgYW5kIHRoZSBvbmUgYmVmb3JlLCBzbyB0aGUgc25hcHNob3QgY2FycmllcyBcIjkxJSAoZG93biAzIHBvaW50cylcIi4gVGhlIHRyZW5kXG4gKiAgICBpcyB3aGF0IGEgbWFuYWdlciBhY3RzIG9uOyB0aGUgYWJzb2x1dGUgbnVtYmVyIGFsb25lIHJhcmVseSBpcy5cbiAqICAtIExPQ0tFRCBTRUNUSU9OUy4gQSBzZWN0aW9uIHdob3NlIGZlYXR1cmUgdGhlIG9yZyBsYWNrcyByZW5kZXJzIGFzIGxvY2tlZFxuICogICAgaW5zdGVhZCBvZiBmYWlsaW5nIHRoZSBydW4uIEEgcmVwb3J0IHRoYXQgZGllcyBiZWNhdXNlIG9uZSBnYXRlZCBzZWN0aW9uIHdhc1xuICogICAgaW5jbHVkZWQgaXMgYSBzdXBwb3J0IHRpY2tldDsgYSBsb2NrZWQgcGFuZWwgaXMgYW4gdXBzZWxsLlxuICogIC0gREFUQS1RVUFMSVRZIE5PVEVTLiBNaXNzaW5nIGRlcGxveSB0YWdzIGFuZCB0aW55IHNhbXBsZXMgYXJlIHN0YXRlZCwgbm90XG4gKiAgICBzaWxlbnRseSByZW5kZXJlZCBhcyB6ZXJvLiBcIjAgZGVwbG95c1wiIGFuZCBcIndlIGNhbm5vdCBzZWUgeW91ciBkZXBsb3lzXCIgbG9va1xuICogICAgaWRlbnRpY2FsIG9uIGEgY2hhcnQgYW5kIG1lYW4gb3Bwb3NpdGUgdGhpbmdzIOKAlCBhIG1hbmFnZXIgcmVhZGluZyB0aGUgZmlyc3RcbiAqICAgIHdoZW4gaXQgaXMgcmVhbGx5IHRoZSBzZWNvbmQgZHJhd3MgZXhhY3RseSB0aGUgd3JvbmcgY29uY2x1c2lvbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFdlZWtTdGFydCB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB0eXBlIHsgUmVzb2x2ZWRQZXJpb2QgfSBmcm9tICcuL3BlcmlvZC5qcyc7XG5pbXBvcnQgeyBnZXRTZWN0aW9uLCB0eXBlIFNlY3Rpb25Db250ZXh0LCB0eXBlIFNlY3Rpb25EYXRhU291cmNlLCB0eXBlIFNlY3Rpb25TcGVjIH0gZnJvbSAnLi9zZWN0aW9ucy5qcyc7XG5cbi8qKiBCZWxvdyB0aGlzIG1hbnkgb2JzZXJ2YXRpb25zIGEgcmF0ZSBpcyBub2lzZSwgYW5kIHNheXMgc28uICovXG5leHBvcnQgY29uc3QgTE9XX1NBTVBMRV9USFJFU0hPTEQgPSA1O1xuXG4vKiogV2hpY2ggd2F5IGEgbWV0cmljIG1vdmVkLiBgZmxhdGAgd2hlbiB0aGUgY2hhbmdlIHJvdW5kcyB0byBub3RoaW5nLiAqL1xuZXhwb3J0IHR5cGUgVHJlbmREaXJlY3Rpb24gPSAndXAnIHwgJ2Rvd24nIHwgJ2ZsYXQnIHwgJ3Vua25vd24nO1xuXG4vKiogQSBkYXRhLXF1YWxpdHkgY2F2ZWF0IGF0dGFjaGVkIHRvIHRoZSB3aG9sZSBzbmFwc2hvdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVF1YWxpdHlOb3RlIHtcbiAgY29kZTogJ21pc3NpbmdfZGVwbG95X3RhZycgfCAnbWlzc2luZ19jb21taXRfZGF0YScgfCAnbG93X3NhbXBsZScgfCAnc2VjdGlvbl9mYWlsZWQnIHwgJ3NlY3Rpb25fbG9ja2VkJyB8ICdydWxlX3VuYXZhaWxhYmxlJztcbiAgLyoqIE1hbmFnZXItcmVhZGFibGUuIE5vdCBhIG1ldHJpYyBuYW1lIGFuZCBub3QgYSBzdGFjayB0cmFjZS4gKi9cbiAgbWVzc2FnZTogc3RyaW5nO1xuICAvKiogVGhlIHNlY3Rpb24gaXQgY29uY2VybnMsIHdoZW4gaXQgaXMgc2VjdGlvbi1zcGVjaWZpYy4gKi9cbiAgc2VjdGlvbklkPzogc3RyaW5nO1xufVxuXG4vKiogT25lIGNvbXBvc2VkIHNlY3Rpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvc2VkU2VjdGlvbiB7XG4gIGlkOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIC8qKiBgbG9ja2VkYCB3aGVuIHRoZSBvcmcgbGFja3MgdGhlIGZlYXR1cmU7IGBmYWlsZWRgIHdoZW4gdGhlIHF1ZXJ5IHRocmV3LiAqL1xuICBzdGF0ZTogJ29rJyB8ICdsb2NrZWQnIHwgJ2ZhaWxlZCc7XG4gIC8qKiBUaGUgZmVhdHVyZSBuZWVkZWQsIHdoZW4gbG9ja2VkIOKAlCBkcml2ZXMgdGhlIHVwc2VsbCBjb3B5LiAqL1xuICByZXF1aXJlc0ZlYXR1cmU/OiBzdHJpbmc7XG4gIC8qKiBUaGlzIHBlcmlvZCdzIHJhdyByZXN1bHQsIGV4YWN0bHkgYXMgdGhlIGRhc2hib2FyZCB3b3VsZCBzaG93IGl0LiAqL1xuICBjdXJyZW50PzogdW5rbm93bjtcbiAgLyoqIFRoZSBwcmV2aW91cyBwZXJpb2QncyByZXN1bHQsIGZvciBjb21wYXJhYmxlIHNlY3Rpb25zLiAqL1xuICBwcmV2aW91cz86IHVua25vd247XG4gIC8qKiBUaGUgc2luZ2xlIG51bWJlciBhIG1hbmFnZXIgcmVhZHMgZmlyc3QsIHdoZW4gdGhlIHNlY3Rpb24gaGFzIG9uZS4gKi9cbiAgaGVhZGxpbmU/OiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBudW1iZXI7IHVuaXQ/OiBzdHJpbmcgfTtcbiAgLyoqIENoYW5nZSB2ZXJzdXMgdGhlIHByZXZpb3VzIHBlcmlvZCwgZm9yIGNvbXBhcmFibGUgc2VjdGlvbnMuICovXG4gIGNoYW5nZT86IHsgYWJzb2x1dGU6IG51bWJlcjsgcGVyY2VudDogbnVtYmVyIHwgbnVsbDsgZGlyZWN0aW9uOiBUcmVuZERpcmVjdGlvbiB9O1xufVxuXG4vKiogVGhlIGZyb3plbiBvdXRwdXQgb2Ygb25lIHJ1bi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0U25hcHNob3Qge1xuICAvKiogUGVyaW9kIGJvdW5kcyArIGxhYmVsLCBjb3BpZWQgaW4gc28gdGhlIHNuYXBzaG90IGlzIHNlbGYtZGVzY3JpYmluZy4gKi9cbiAgcGVyaW9kOiB7IHN0YXJ0OiBzdHJpbmc7IGVuZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH07XG4gIHByZXZpb3VzUGVyaW9kOiB7IHN0YXJ0OiBzdHJpbmc7IGVuZDogc3RyaW5nIH07XG4gIHRpbWV6b25lOiBzdHJpbmc7XG4gIHdlZWtTdGFydDogV2Vla1N0YXJ0O1xuICBzZWN0aW9uczogQ29tcG9zZWRTZWN0aW9uW107XG4gIG5vdGVzOiBEYXRhUXVhbGl0eU5vdGVbXTtcbiAgLyoqXG4gICAqIEhvdyBldmVyeSBudW1iZXIgaGVyZSB3YXMgcHJvZHVjZWQsIHNob3duIGluIHRoZSByZXBvcnQgZm9vdGVyLiBNYW5hZ2Vyc1xuICAgKiBjb21wYXJlIHJlcG9ydHMgdG8gdGhlIGRhc2hib2FyZDsgc2F5aW5nIHBsYWlubHkgdGhhdCBib3RoIHJ1biB0aGUgc2FtZVxuICAgKiBxdWVyaWVzIG92ZXIgdGhlIHNhbWUgd2luZG93IGlzIHdoYXQgbWFrZXMgYSBkaWZmZXJlbmNlIGludmVzdGlnYWJsZSByYXRoZXJcbiAgICogdGhhbiBhIHJlYXNvbiB0byBkaXN0cnVzdCBib3RoLlxuICAgKi9cbiAgbWV0aG9kb2xvZ3k6IHN0cmluZztcbiAgZ2VuZXJhdGVkQXQ6IHN0cmluZztcbn1cblxuLyoqIFdoYXQgdGhlIGNvbXBvc2VyIG5lZWRzIHRvIGtub3cgYWJvdXQgdGhlIG9yZydzIGVudGl0bGVtZW50cy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9zZU9wdGlvbnMge1xuICBzb3VyY2U6IFNlY3Rpb25EYXRhU291cmNlO1xuICBwZXJpb2Q6IFJlc29sdmVkUGVyaW9kO1xuICB0aW1lem9uZTogc3RyaW5nO1xuICB3ZWVrU3RhcnQ6IFdlZWtTdGFydDtcbiAgb3JnSWQ6IHN0cmluZztcbiAgb3JnSWRzPzogc3RyaW5nW107XG4gIC8qKiBGZWF0dXJlcyB0aGUgb3JnIGhvbGRzLiBBIHNlY3Rpb24gbmVlZGluZyBvbmUgdGhhdCBpcyBhYnNlbnQgcmVuZGVycyBsb2NrZWQuICovXG4gIGZlYXR1cmVzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgbm93PzogRGF0ZTtcbn1cblxuLyoqXG4gKiBGZWF0dXJlcyB0aGF0LCBpbnNpZGUgYSBSRVBPUlQsIHN0YW5kIGluIGZvciBhbm90aGVyLlxuICpcbiAqIEJ1eWluZyBTdGFrZWhvbGRlciBSZXBvcnRzIGJ1eXMgdGhlIERPUkEgU0VDVElPTlMgb2YgYSByZXBvcnQuIEl0IGRvZXMgbm90IGJ1eSB0aGVcbiAqIGxpdmUgRE9SQSBkYXNoYm9hcmQsIHdoaWNoIHN0YXlzIGJlaGluZCBgYWR2YW5jZWRfcmVwb3J0aW5nYCBhbmQgaXMgZ2F0ZWQgb24gaXRzIG93blxuICogcm91dGVzIOKAlCBzbyB0aGlzIHN1YnN0aXR1dGlvbiBpcyBkZWxpYmVyYXRlbHkgc2NvcGVkIHRvIGNvbXBvc2l0aW9uIGFuZCBleGlzdHNcbiAqIG5vd2hlcmUgZWxzZS4gV2l0aG91dCBpdCwgYSBQcm8gY3VzdG9tZXIgd2hvIGJvdWdodCB0aGUgcmVwb3J0cyBhZGQtb24gd291bGQgb3BlblxuICogdGhlaXIgZmlyc3Qgd2Vla2x5IHJlcG9ydCBhbmQgZmluZCBpdHMgaGVhZGxpbmUgcGFuZWxzIGxvY2tlZCBiZWhpbmQgYSBzZWNvbmRcbiAqIHB1cmNoYXNlLCB3aGljaCBpcyBub3Qgd2hhdCB0aGUgYWRkLW9uJ3Mgb3duIGRlc2NyaXB0aW9uIHByb21pc2VzLlxuICpcbiAqIFN0YXRlZCBhcyBkYXRhIHJhdGhlciB0aGFuIGFuIGBpZmAsIHNvIGFkZGluZyBhIHNlY3Rpb24gdGhhdCBuZWVkcyBhIGRpZmZlcmVudFxuICogZmVhdHVyZSBjYW5ub3Qgc2lsZW50bHkgaW5oZXJpdCB0aGUgY2FydmUtb3V0LlxuICovXG5leHBvcnQgY29uc3QgUkVQT1JUX0ZFQVRVUkVfU1VCU1RJVFVURVM6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHJlYWRvbmx5IHN0cmluZ1tdPj4gPSBPYmplY3QuZnJlZXplKHtcbiAgYWR2YW5jZWRfcmVwb3J0aW5nOiBbJ3N0YWtlaG9sZGVyX3JlcG9ydHMnXSxcbn0pO1xuXG4vKiogRG9lcyB0aGUgb3JnIGhvbGQgYHJlcXVpcmVkYCwgb3Igc29tZXRoaW5nIHRoYXQgc3RhbmRzIGluIGZvciBpdCBpbiBhIHJlcG9ydD8gKi9cbmZ1bmN0aW9uIHNhdGlzZmllcyhmZWF0dXJlczogcmVhZG9ubHkgc3RyaW5nW10sIHJlcXVpcmVkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKGZlYXR1cmVzLmluY2x1ZGVzKHJlcXVpcmVkKSkgcmV0dXJuIHRydWU7XG4gIHJldHVybiAoUkVQT1JUX0ZFQVRVUkVfU1VCU1RJVFVURVNbcmVxdWlyZWRdID8/IFtdKS5zb21lKChhbHQpID0+IGZlYXR1cmVzLmluY2x1ZGVzKGFsdCkpO1xufVxuXG4vKiogUHVsbCBhIGNvbXBhcmFibGUgbnVtYmVyIG91dCBvZiBhIHNlY3Rpb24gcmVzdWx0LCBvciBudWxsIHdoZW4gdGhlcmUgaXNuJ3Qgb25lLiAqL1xuZnVuY3Rpb24gaGVhZGxpbmVPZihzZWN0aW9uSWQ6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBudW1iZXI7IHVuaXQ/OiBzdHJpbmcgfSB8IG51bGwge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIG51bGw7XG5cbiAgLy8gVGltZSBzZXJpZXMgKHN1Y2Nlc3MgcmF0ZSwgYnVpbGQgc3VjY2Vzcyk6IHRoZSBMQVNUIGJ1Y2tldCBpcyBcIm5vd1wiLlxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGxhc3QgPSB2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpZiAodHlwZW9mIGxhc3Q/LnN1Y2Nlc3NfcGN0ID09PSAnbnVtYmVyJykgcmV0dXJuIHsgbGFiZWw6ICdTdWNjZXNzIHJhdGUnLCB2YWx1ZTogbGFzdC5zdWNjZXNzX3BjdCwgdW5pdDogJyUnIH07XG4gICAgLy8gRXhlY3V0aW9uIGNvdW50czogdG90YWwgcnVucyBhY3Jvc3MgcGlwZWxpbmVzLlxuICAgIC8vXG4gICAgLy8gQSB0b3RhbCBvZiBaRVJPIGlzIGEgcmVhbCBoZWFkbGluZSwgbm90IG1pc3NpbmcgZGF0YTogXCIwIGRlcGxveXMsIGRvd24gZnJvbVxuICAgIC8vIDVcIiBpcyB0aGUgc2luZ2xlIG1vc3QgaW1wb3J0YW50IHRoaW5nIGEgd2Vla2x5IHJlcG9ydCBjYW4gdGVsbCBhIG1hbmFnZXIsXG4gICAgLy8gYW5kIHRyZWF0aW5nIDAgYXMgXCJubyB2YWx1ZVwiIG1hZGUgZXhhY3RseSB0aGF0IGNhc2UgZGlzYXBwZWFyIOKAlCB0aGUgY2hhbmdlXG4gICAgLy8gY2FtZSBiYWNrIGB1bmtub3duYCBhbmQgbm8gYXJyb3cgd2FzIHNob3duLiBTbyB0aGUgdGVzdCBpcyB3aGV0aGVyIGFueSByb3dcbiAgICAvLyBDQVJSSUVEIGEgY291bnQsIG5vdCB3aGV0aGVyIHRoZSBzdW0gaXMgcG9zaXRpdmUuXG4gICAgbGV0IGNvdW50ZWQgPSBmYWxzZTtcbiAgICBjb25zdCB0b3RhbCA9ICh2YWx1ZSBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4pLnJlZHVjZSgoc3VtLCByb3cpID0+IHtcbiAgICAgIGNvbnN0IG4gPSByb3cudG90YWwgPz8gcm93LmNvdW50ID8/IHJvdy5leGVjdXRpb25zO1xuICAgICAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJykgcmV0dXJuIHN1bTtcbiAgICAgIGNvdW50ZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIHN1bSArIG47XG4gICAgfSwgMCk7XG4gICAgaWYgKGNvdW50ZWQpIHJldHVybiB7IGxhYmVsOiAnVG90YWwnLCB2YWx1ZTogdG90YWwgfTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG9iaiA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvLyBET1JBOiBkZXBsb3ltZW50IGZyZXF1ZW5jeSBpcyB0aGUgaGVhZGxpbmUgYSBtYW5hZ2VyIHJlY29nbmlzZXMuXG4gIGNvbnN0IGVudnMgPSBvYmouZW52aXJvbm1lbnRzO1xuICBpZiAoQXJyYXkuaXNBcnJheShlbnZzKSAmJiBlbnZzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBmaXJzdCA9IGVudnNbMF0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3QgZGYgPSAoZmlyc3QuZGVwbG95bWVudEZyZXF1ZW5jeSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCk/LmRlcGxveW1lbnRzO1xuICAgIGlmICh0eXBlb2YgZGYgPT09ICdudW1iZXInKSByZXR1cm4geyBsYWJlbDogJ0RlcGxveXMnLCB2YWx1ZTogZGYgfTtcbiAgfVxuICAvLyBQbHVnaW4gc3VtbWFyeSBhbmQgZnJpZW5kczogYSBwbGFpbiB0b3RhbC5cbiAgLy8gWmVybyBpcyBhIHZhbHVlIGhlcmUgdG9vIOKAlCBgcGx1Z2luX3ZlcnNpb25zYCByZXBvcnRpbmcgMCBvdXRkYXRlZCBwbHVnaW5zIGlzXG4gIC8vIGdvb2QgbmV3cyBhIG1hbmFnZXIgc2hvdWxkIHNlZSwgbm90IGFuIGFic2VudCBzZWN0aW9uLlxuICBmb3IgKGNvbnN0IGtleSBvZiBbJ3RvdGFsJywgJ2NvdW50JywgJ2RlcGxveW1lbnRzJ10pIHtcbiAgICBpZiAodHlwZW9mIG9ialtrZXldID09PSAnbnVtYmVyJykgcmV0dXJuIHsgbGFiZWw6IHNlY3Rpb25JZCA9PT0gJ3BsdWdpbl92ZXJzaW9ucycgPyAnT3V0ZGF0ZWQnIDogJ1RvdGFsJywgdmFsdWU6IG9ialtrZXldIGFzIG51bWJlciB9O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKiogQ2hhbmdlIGJldHdlZW4gdHdvIGhlYWRsaW5lIG51bWJlcnMuICovXG5mdW5jdGlvbiBjaGFuZ2VPZihcbiAgY3VycmVudDogeyB2YWx1ZTogbnVtYmVyIH0gfCBudWxsLFxuICBwcmV2aW91czogeyB2YWx1ZTogbnVtYmVyIH0gfCBudWxsLFxuKTogQ29tcG9zZWRTZWN0aW9uWydjaGFuZ2UnXSB7XG4gIGlmICghY3VycmVudCB8fCAhcHJldmlvdXMpIHJldHVybiB7IGFic29sdXRlOiAwLCBwZXJjZW50OiBudWxsLCBkaXJlY3Rpb246ICd1bmtub3duJyB9O1xuICBjb25zdCBhYnNvbHV0ZSA9IE51bWJlcigoY3VycmVudC52YWx1ZSAtIHByZXZpb3VzLnZhbHVlKS50b0ZpeGVkKDIpKTtcbiAgLy8gQSBwZXJjZW50IGNoYW5nZSBvZmYgYSB6ZXJvIGJhc2VsaW5lIGlzIHVuZGVmaW5lZCwgbm90IGluZmluaXRlOiBnb2luZyBmcm9tIDBcbiAgLy8gdG8gNSBkZXBsb3lzIGlzIFwiNSBtb3JlXCIsIG5ldmVyIFwiK+KIniVcIi5cbiAgY29uc3QgcGVyY2VudCA9IHByZXZpb3VzLnZhbHVlID09PSAwID8gbnVsbCA6IE51bWJlcigoKGFic29sdXRlIC8gcHJldmlvdXMudmFsdWUpICogMTAwKS50b0ZpeGVkKDEpKTtcbiAgY29uc3QgZGlyZWN0aW9uOiBUcmVuZERpcmVjdGlvbiA9IGFic29sdXRlID09PSAwID8gJ2ZsYXQnIDogYWJzb2x1dGUgPiAwID8gJ3VwJyA6ICdkb3duJztcbiAgcmV0dXJuIHsgYWJzb2x1dGUsIHBlcmNlbnQsIGRpcmVjdGlvbiB9O1xufVxuXG4vKiogQ291bnQgdGhlIG9ic2VydmF0aW9ucyBiZWhpbmQgYSBzZWN0aW9uLCBmb3IgdGhlIGxvdy1zYW1wbGUgbm90ZS4gKi9cbmZ1bmN0aW9uIHNhbXBsZVNpemUodmFsdWU6IHVua25vd24pOiBudW1iZXIgfCBudWxsIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuICh2YWx1ZSBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4pLnJlZHVjZSgoc3VtLCByb3cpID0+IHtcbiAgICAgIGNvbnN0IG4gPSByb3cudG90YWwgPz8gcm93LmNvdW50ID8/IHJvdy5leGVjdXRpb25zID8/IHJvdy5kZXBsb3ltZW50cztcbiAgICAgIHJldHVybiBzdW0gKyAodHlwZW9mIG4gPT09ICdudW1iZXInID8gbiA6IDApO1xuICAgIH0sIDApO1xuICB9XG4gIGNvbnN0IG9iaiA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbDtcbiAgY29uc3QgZW52cyA9IG9iaj8uZW52aXJvbm1lbnRzO1xuICBpZiAoQXJyYXkuaXNBcnJheShlbnZzKSkge1xuICAgIHJldHVybiBlbnZzLnJlZHVjZSgoc3VtOiBudW1iZXIsIGUpID0+IHtcbiAgICAgIGNvbnN0IGF0dGVtcHRzID0gKChlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5jaGFuZ2VGYWlsdXJlUmF0ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCk/LmF0dGVtcHRzO1xuICAgICAgcmV0dXJuIHN1bSArICh0eXBlb2YgYXR0ZW1wdHMgPT09ICdudW1iZXInID8gYXR0ZW1wdHMgOiAwKTtcbiAgICB9LCAwKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqIERlcGxveS1jb3ZlcmFnZSBub3RlczogdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBcInplcm8gZGVwbG95c1wiIGFuZCBcImJsaW5kXCIuICovXG5mdW5jdGlvbiBkZXBsb3lDb3ZlcmFnZU5vdGVzKGRvcmE6IHVua25vd24pOiBEYXRhUXVhbGl0eU5vdGVbXSB7XG4gIGNvbnN0IG5vdGVzOiBEYXRhUXVhbGl0eU5vdGVbXSA9IFtdO1xuICBjb25zdCBjb3ZlcmFnZSA9IChkb3JhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCk/LmNvdmVyYWdlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICBjb25zdCB3aXRob3V0ID0gY292ZXJhZ2U/LndpdGhvdXREZXBsb3lzO1xuICBpZiAodHlwZW9mIHdpdGhvdXQgPT09ICdudW1iZXInICYmIHdpdGhvdXQgPiAwKSB7XG4gICAgbm90ZXMucHVzaCh7XG4gICAgICBjb2RlOiAnbWlzc2luZ19kZXBsb3lfdGFnJyxcbiAgICAgIHNlY3Rpb25JZDogJ2RvcmEnLFxuICAgICAgbWVzc2FnZTogYERlcGxveSBkYXRhIHVuYXZhaWxhYmxlIGZvciAke3dpdGhvdXR9IHBpcGVsaW5lJHt3aXRob3V0ID09PSAxID8gJycgOiAncyd9OiB0aGV5IGhhdmUgbm90IHJlLXN5bnRoZWQgd2l0aCBkZXBsb3kgdGFncywgc28gdGhlaXIgZGVwbG95cyBhcmUgbm90IGNvdW50ZWQgaGVyZS4gVGhpcyBpcyBub3QgXCJ6ZXJvIGRlcGxveXNcIi5gLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IGVudnMgPSAoZG9yYSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwpPy5lbnZpcm9ubWVudHM7XG4gIGlmIChBcnJheS5pc0FycmF5KGVudnMpKSB7XG4gICAgY29uc3Qgbm9MZWFkID0gKGVudnMgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KS5maWx0ZXIoKGUpID0+IHtcbiAgICAgIGNvbnN0IGx0ID0gZS5sZWFkVGltZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBsdCAmJiBsdC5tZWRpYW5TZWNvbmRzID09PSBudWxsO1xuICAgIH0pO1xuICAgIGlmIChub0xlYWQubGVuZ3RoID4gMCkge1xuICAgICAgbm90ZXMucHVzaCh7XG4gICAgICAgIGNvZGU6ICdtaXNzaW5nX2NvbW1pdF9kYXRhJyxcbiAgICAgICAgc2VjdGlvbklkOiAnZG9yYScsXG4gICAgICAgIG1lc3NhZ2U6IGBMZWFkIHRpbWUgdW5hdmFpbGFibGUgZm9yICR7bm9MZWFkLmxlbmd0aH0gZW52aXJvbm1lbnQke25vTGVhZC5sZW5ndGggPT09IDEgPyAnJyA6ICdzJ306IG5vIHN1Y2Nlc3NmdWwgZGVwbG95IGNhcnJpZWQgYSByZXNvbHZhYmxlIGNvbW1pdCB0aW1lc3RhbXAsIHNvIGNvbW1pdC10by1kZXBsb3kgdGltZSBjb3VsZCBub3QgYmUgbWVhc3VyZWQuYCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbm90ZXM7XG59XG5cbi8qKiBNYW5hZ2VyLWZhY2luZyBuYW1lcyBvZiB0aGUgbmVlZHMtYXR0ZW50aW9uIHJ1bGVzLCBmb3IgdGhlIHVuYXZhaWxhYmxlIG5vdGUuICovXG5jb25zdCBBVFRFTlRJT05fUlVMRV9MQUJFTFM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIGxvd19zdWNjZXNzX3JhdGU6ICdsb3cgc3VjY2VzcyByYXRlJyxcbiAgc2xvd2VyX3A5NTogJ3Nsb3dlciBidWlsZHMnLFxuICBjb25zZWN1dGl2ZV9mYWlsdXJlczogJ2NvbnNlY3V0aXZlIGZhaWx1cmVzJyxcbiAgbm9fcmVjZW50X3N1Y2Nlc3M6ICdubyByZWNlbnQgc3VjY2VzcycsXG4gIGZhaWxlZF9hZnRlcl9jb25maWdfY2hhbmdlOiAnZmFpbGVkIGFmdGVyIGEgY29uZmlndXJhdGlvbiBjaGFuZ2UnLFxuICB2dWxuZXJhYmxlX3BsdWdpbjogJ3Z1bG5lcmFibGUgcGx1Z2lucycsXG4gIG5vX2RlcGxveV90cmFja2luZzogJ2RlcGxveSB0cmFja2luZycsXG59O1xuXG4vKipcbiAqIFRoZSBuZWVkcy1hdHRlbnRpb24gcnVsZXMgdGhhdCBjb3VsZCBub3QgcnVuLiBBbiBlbXB0eSBsaXN0IHRoZXJlIG11c3QgcmVhZCBhc1xuICogXCJub3RoaW5nIHRyaXBwZWRcIiwgbmV2ZXIgYXMgXCJhIHJ1bGUgY291bGQgbm90IGxvb2tcIiDigJQgYWJvdmUgYWxsIGZvciB0aGVcbiAqIHZ1bG5lcmFibGUtcGx1Z2luIHJ1bGUsIHdoZXJlIHRoZSBzZWNvbmQgcmVhZGluZyBpcyBhIGZhbHNlIGFsbC1jbGVhci5cbiAqL1xuZnVuY3Rpb24gYXR0ZW50aW9uTm90ZXModmFsdWU6IHVua25vd24pOiBEYXRhUXVhbGl0eU5vdGVbXSB7XG4gIGNvbnN0IHJ1bGVzID0gKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCk/LnVuYXZhaWxhYmxlUnVsZXM7XG4gIGlmICghQXJyYXkuaXNBcnJheShydWxlcykgfHwgcnVsZXMubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG4gIGNvbnN0IG5hbWVzID0gcnVsZXMubWFwKChyKSA9PiBBVFRFTlRJT05fUlVMRV9MQUJFTFNbU3RyaW5nKHIpXSA/PyBTdHJpbmcocikpO1xuICByZXR1cm4gW3tcbiAgICBjb2RlOiAncnVsZV91bmF2YWlsYWJsZScsXG4gICAgc2VjdGlvbklkOiAnbmVlZHNfYXR0ZW50aW9uJyxcbiAgICBtZXNzYWdlOiBgU29tZSBjaGVja3MgY291bGQgbm90IHJ1biB0aGlzIHBlcmlvZCAoJHtuYW1lcy5qb2luKCcsICcpfSk6IHRoZWlyIGRhdGEgd2FzIHVuYXZhaWxhYmxlLiBgXG4gICAgICArICdBIHBpcGVsaW5lIG1pc3NpbmcgZnJvbSB0aGlzIGxpc3Qgd2FzIG5vdCBjaGVja2VkIGZvciB0aG9zZSDigJQgdGhpcyBpcyBub3QgYW4gYWxsLWNsZWFyLicsXG4gIH1dO1xufVxuXG4vKipcbiAqIENvbXBvc2Ugb25lIHBlcmlvZCdzIHNuYXBzaG90LlxuICpcbiAqIE5ldmVyIHRocm93cyBmb3IgYSBzZWN0aW9uLWxldmVsIHByb2JsZW06IGEgc2VjdGlvbiB0aGF0IGZhaWxzIGlzIG1hcmtlZFxuICogYGZhaWxlZGAgd2l0aCBhIG5vdGUsIGFuZCB0aGUgcmVzdCBvZiB0aGUgcmVwb3J0IHN0aWxsIHJlYWNoZXMgdGhlIGxlYWQuIEEgcnVuXG4gKiB0aGF0IHByb2R1Y2VzIG5pbmUgZ29vZCBzZWN0aW9ucyBhbmQgb25lIGZhaWx1cmUgaXMgdXNlZnVsOyBhIHJ1biB0aGF0IHByb2R1Y2VzXG4gKiBhbiBleGNlcHRpb24gaXMgbm90LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29tcG9zZVNuYXBzaG90KHNlY3Rpb25JZExpc3Q6IHJlYWRvbmx5IHN0cmluZ1tdLCBvcHRzOiBDb21wb3NlT3B0aW9ucyk6IFByb21pc2U8UmVwb3J0U25hcHNob3Q+IHtcbiAgY29uc3QgeyBzb3VyY2UsIHBlcmlvZCwgdGltZXpvbmUsIHdlZWtTdGFydCwgb3JnSWQsIG9yZ0lkcywgZmVhdHVyZXMgfSA9IG9wdHM7XG4gIGNvbnN0IG5vdGVzOiBEYXRhUXVhbGl0eU5vdGVbXSA9IFtdO1xuICBjb25zdCBzZWN0aW9uczogQ29tcG9zZWRTZWN0aW9uW10gPSBbXTtcblxuICBjb25zdCBjdHhGb3IgPSAoZnJvbTogRGF0ZSwgdG86IERhdGUpOiBTZWN0aW9uQ29udGV4dCA9PiAoe1xuICAgIG9yZ0lkLFxuICAgIC4uLihvcmdJZHMgPyB7IG9yZ0lkcyB9IDoge30pLFxuICAgIGZyb206IGZyb20udG9JU09TdHJpbmcoKSxcbiAgICB0bzogdG8udG9JU09TdHJpbmcoKSxcbiAgICB0ejogdGltZXpvbmUsXG4gICAgd2Vla1N0YXJ0LFxuICAgIC8vIFRoZSBwcmV2aW91cyBwZXJpb2QgdHJhdmVscyBXSVRIIHRoZSBjb250ZXh0LCBmb3IgdGhlIGFuYWx5dGljcyBzZWN0aW9uc1xuICAgIC8vIHdob3NlIHRyZW5kIGlzIHBlciBjYXRlZ29yeSwgcGVyIHN0YWdlIG9yIHBlciBwaXBlbGluZS4gVGhvc2UgY2Fubm90IGJlXG4gICAgLy8gaGFuZGxlZCBieSBydW5uaW5nIHRoZSBzZWN0aW9uIHR3aWNlIGFuZCBjb21wYXJpbmcgb25lIGhlYWRsaW5lIOKAlCB0aGVcbiAgICAvLyBjb21wYXJpc29uIGlzIGEgam9pbiwgYW5kIGRvaW5nIGl0IGluIHRoZSBjb21wb3NlciBhZnRlcndhcmRzIHdvdWxkIG1lYW5cbiAgICAvLyByZS1pbXBsZW1lbnRpbmcgaXQgZm9yIGV2ZXJ5IHNoYXBlLlxuICAgIHByZXZpb3VzRnJvbTogcGVyaW9kLnByZXZTdGFydC50b0lTT1N0cmluZygpLFxuICAgIHByZXZpb3VzVG86IHBlcmlvZC5wcmV2RW5kLnRvSVNPU3RyaW5nKCksXG4gIH0pO1xuICBjb25zdCBjdXJyZW50Q3R4ID0gY3R4Rm9yKHBlcmlvZC5zdGFydCwgcGVyaW9kLmVuZCk7XG4gIGNvbnN0IHByZXZpb3VzQ3R4ID0gY3R4Rm9yKHBlcmlvZC5wcmV2U3RhcnQsIHBlcmlvZC5wcmV2RW5kKTtcblxuICBmb3IgKGNvbnN0IGlkIG9mIHNlY3Rpb25JZExpc3QpIHtcbiAgICBjb25zdCBzcGVjOiBTZWN0aW9uU3BlYyB8IHVuZGVmaW5lZCA9IGdldFNlY3Rpb24oaWQpO1xuICAgIGlmICghc3BlYykge1xuICAgICAgLy8gQW4gdW5rbm93biBpZCBpcyBhIGRlZmluaXRpb24gcmVmZXJlbmNpbmcgYSBzZWN0aW9uIHRoYXQgbm8gbG9uZ2VyIGV4aXN0cy5cbiAgICAgIC8vIFJlY29yZGVkIHJhdGhlciB0aGFuIGRyb3BwZWQsIHNvIHRoZSBsZWFkIGNhbiBzZWUgd2h5IGEgcGFuZWwgdmFuaXNoZWQuXG4gICAgICBzZWN0aW9ucy5wdXNoKHsgaWQsIHRpdGxlOiBpZCwgc3RhdGU6ICdmYWlsZWQnIH0pO1xuICAgICAgbm90ZXMucHVzaCh7IGNvZGU6ICdzZWN0aW9uX2ZhaWxlZCcsIHNlY3Rpb25JZDogaWQsIG1lc3NhZ2U6IGBVbmtub3duIHJlcG9ydCBzZWN0aW9uIFwiJHtpZH1cIiDigJQgaXQgbWF5IGhhdmUgYmVlbiByZW1vdmVkLmAgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoc3BlYy5yZXF1aXJlc0ZlYXR1cmUgJiYgIXNhdGlzZmllcyhmZWF0dXJlcywgc3BlYy5yZXF1aXJlc0ZlYXR1cmUpKSB7XG4gICAgICBzZWN0aW9ucy5wdXNoKHtcbiAgICAgICAgaWQsIHRpdGxlOiBzcGVjLnRpdGxlLCBzdGF0ZTogJ2xvY2tlZCcsIHJlcXVpcmVzRmVhdHVyZTogc3BlYy5yZXF1aXJlc0ZlYXR1cmUsXG4gICAgICB9KTtcbiAgICAgIG5vdGVzLnB1c2goe1xuICAgICAgICBjb2RlOiAnc2VjdGlvbl9sb2NrZWQnLFxuICAgICAgICBzZWN0aW9uSWQ6IGlkLFxuICAgICAgICBtZXNzYWdlOiBgXCIke3NwZWMudGl0bGV9XCIgbmVlZHMgdGhlICR7c3BlYy5yZXF1aXJlc0ZlYXR1cmV9IGFkZC1vbi4gVGhlIHJlc3Qgb2YgdGhpcyByZXBvcnQgaXMgdW5hZmZlY3RlZC5gLFxuICAgICAgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgY3VycmVudCA9IGF3YWl0IHNwZWMucnVuKHNvdXJjZSwgY3VycmVudEN0eCk7XG4gICAgICBjb25zdCBjb21wb3NlZDogQ29tcG9zZWRTZWN0aW9uID0geyBpZCwgdGl0bGU6IHNwZWMudGl0bGUsIHN0YXRlOiAnb2snLCBjdXJyZW50IH07XG5cbiAgICAgIGNvbnN0IGhlYWQgPSBoZWFkbGluZU9mKGlkLCBjdXJyZW50KTtcbiAgICAgIGlmIChoZWFkKSBjb21wb3NlZC5oZWFkbGluZSA9IGhlYWQ7XG5cbiAgICAgIGlmIChzcGVjLmNvbXBhcmFibGUpIHtcbiAgICAgICAgLy8gVGhlIGNvbXBhcmlzb24gaXMgYmVzdC1lZmZvcnQ6IGEgZmFpbGVkIHByZXZpb3VzIHBlcmlvZCBtdXN0IG5vdCBjb3N0IHRoZVxuICAgICAgICAvLyBsZWFkIHRoaXMgcGVyaW9kJ3MgbnVtYmVycy5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwcmV2aW91cyA9IGF3YWl0IHNwZWMucnVuKHNvdXJjZSwgcHJldmlvdXNDdHgpO1xuICAgICAgICAgIGNvbXBvc2VkLnByZXZpb3VzID0gcHJldmlvdXM7XG4gICAgICAgICAgY29tcG9zZWQuY2hhbmdlID0gY2hhbmdlT2YoaGVhZCwgaGVhZGxpbmVPZihpZCwgcHJldmlvdXMpKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgY29tcG9zZWQuY2hhbmdlID0geyBhYnNvbHV0ZTogMCwgcGVyY2VudDogbnVsbCwgZGlyZWN0aW9uOiAndW5rbm93bicgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzYW1wbGUgPSBzYW1wbGVTaXplKGN1cnJlbnQpO1xuICAgICAgaWYgKHNhbXBsZSAhPT0gbnVsbCAmJiBzYW1wbGUgPiAwICYmIHNhbXBsZSA8IExPV19TQU1QTEVfVEhSRVNIT0xEKSB7XG4gICAgICAgIG5vdGVzLnB1c2goe1xuICAgICAgICAgIGNvZGU6ICdsb3dfc2FtcGxlJyxcbiAgICAgICAgICBzZWN0aW9uSWQ6IGlkLFxuICAgICAgICAgIG1lc3NhZ2U6IGBcIiR7c3BlYy50aXRsZX1cIiBpcyBiYXNlZCBvbiAke3NhbXBsZX0gb2JzZXJ2YXRpb24ke3NhbXBsZSA9PT0gMSA/ICcnIDogJ3MnfSDigJQgcGVyY2VudGFnZXMgc3dpbmcgd2lsZGx5IGF0IHRoaXMgdm9sdW1lLiBSZWFkIHRoZSBjb3VudHMsIG5vdCB0aGUgcmF0ZS5gLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlkID09PSAnZG9yYScpIG5vdGVzLnB1c2goLi4uZGVwbG95Q292ZXJhZ2VOb3RlcyhjdXJyZW50KSk7XG4gICAgICBpZiAoaWQgPT09ICduZWVkc19hdHRlbnRpb24nKSBub3Rlcy5wdXNoKC4uLmF0dGVudGlvbk5vdGVzKGN1cnJlbnQpKTtcbiAgICAgIHNlY3Rpb25zLnB1c2goY29tcG9zZWQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgc2VjdGlvbnMucHVzaCh7IGlkLCB0aXRsZTogc3BlYy50aXRsZSwgc3RhdGU6ICdmYWlsZWQnIH0pO1xuICAgICAgbm90ZXMucHVzaCh7XG4gICAgICAgIGNvZGU6ICdzZWN0aW9uX2ZhaWxlZCcsXG4gICAgICAgIHNlY3Rpb25JZDogaWQsXG4gICAgICAgIG1lc3NhZ2U6IGBcIiR7c3BlYy50aXRsZX1cIiBjb3VsZCBub3QgYmUgY29tcHV0ZWQgZm9yIHRoaXMgcGVyaW9kLiBUaGUgcmVzdCBvZiB0aGUgcmVwb3J0IGlzIHVuYWZmZWN0ZWQuYCxcbiAgICAgIH0pO1xuICAgICAgdm9pZCBlcnI7IC8vIHRoZSByZWFzb24gaXMgbG9nZ2VkIGJ5IHRoZSBjYWxsZXIsIG5ldmVyIHNob3duIHRvIGEgbWFuYWdlclxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGVyaW9kOiB7IHN0YXJ0OiBwZXJpb2Quc3RhcnQudG9JU09TdHJpbmcoKSwgZW5kOiBwZXJpb2QuZW5kLnRvSVNPU3RyaW5nKCksIGxhYmVsOiBwZXJpb2QubGFiZWwgfSxcbiAgICBwcmV2aW91c1BlcmlvZDogeyBzdGFydDogcGVyaW9kLnByZXZTdGFydC50b0lTT1N0cmluZygpLCBlbmQ6IHBlcmlvZC5wcmV2RW5kLnRvSVNPU3RyaW5nKCkgfSxcbiAgICB0aW1lem9uZSxcbiAgICB3ZWVrU3RhcnQsXG4gICAgc2VjdGlvbnMsXG4gICAgbm90ZXMsXG4gICAgbWV0aG9kb2xvZ3k6XG4gICAgICBgQ29tcHV0ZWQgZnJvbSBwaXBlbGluZSBldmVudHMgYmV0d2VlbiAke3BlcmlvZC5zdGFydC50b0lTT1N0cmluZygpfSBhbmQgJHtwZXJpb2QuZW5kLnRvSVNPU3RyaW5nKCl9LCBgXG4gICAgICArIGBidWNrZXRlZCBpbiAke3RpbWV6b25lfSB3aXRoIHdlZWtzIHN0YXJ0aW5nICR7d2Vla1N0YXJ0fS4gQ29tcGFyaXNvbiBwZXJpb2Q6IGBcbiAgICAgICsgYCR7cGVyaW9kLnByZXZTdGFydC50b0lTT1N0cmluZygpfSB0byAke3BlcmlvZC5wcmV2RW5kLnRvSVNPU3RyaW5nKCl9LiBgXG4gICAgICArICdUaGVzZSBhcmUgdGhlIHNhbWUgcXVlcmllcyB0aGUgZGFzaGJvYXJkIHJ1bnMgb3ZlciB0aGUgc2FtZSB3aW5kb3csIHNvIHRoZSB0d28gYWdyZWUuJyxcbiAgICBnZW5lcmF0ZWRBdDogKG9wdHMubm93ID8/IG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCksXG4gIH07XG59XG4iXX0=