@dollhousemcp/mcp-server 2.0.16 → 2.0.17

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 (40) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md.backup +18 -0
  3. package/dist/elements/base/BaseElementManager.d.ts.map +1 -1
  4. package/dist/elements/base/BaseElementManager.js +17 -1
  5. package/dist/elements/memories/MemoryManager.d.ts.map +1 -1
  6. package/dist/elements/memories/MemoryManager.js +13 -2
  7. package/dist/generated/version.d.ts +2 -2
  8. package/dist/generated/version.js +3 -3
  9. package/dist/handlers/element-crud/createElement.d.ts.map +1 -1
  10. package/dist/handlers/element-crud/createElement.js +6 -2
  11. package/dist/handlers/element-crud/editElement.d.ts.map +1 -1
  12. package/dist/handlers/element-crud/editElement.js +6 -2
  13. package/dist/handlers/element-crud/helpers.d.ts +2 -0
  14. package/dist/handlers/element-crud/helpers.d.ts.map +1 -1
  15. package/dist/handlers/element-crud/helpers.js +21 -2
  16. package/dist/handlers/mcp-aql/IntrospectionResolver.d.ts.map +1 -1
  17. package/dist/handlers/mcp-aql/IntrospectionResolver.js +34 -7
  18. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
  19. package/dist/handlers/mcp-aql/MCPAQLHandler.js +19 -4
  20. package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
  21. package/dist/handlers/mcp-aql/OperationSchema.js +3 -2
  22. package/dist/handlers/mcp-aql/evaluatePermission.d.ts.map +1 -1
  23. package/dist/handlers/mcp-aql/evaluatePermission.js +2 -1
  24. package/dist/handlers/mcp-aql/policies/ElementPolicies.d.ts +8 -0
  25. package/dist/handlers/mcp-aql/policies/ElementPolicies.d.ts.map +1 -1
  26. package/dist/handlers/mcp-aql/policies/ElementPolicies.js +26 -1
  27. package/dist/utils/permissionHooks.d.ts +39 -3
  28. package/dist/utils/permissionHooks.d.ts.map +1 -1
  29. package/dist/utils/permissionHooks.js +651 -74
  30. package/dist/web/public/permissions.js +38 -26
  31. package/dist/web/public/setup.js +367 -94
  32. package/dist/web/routes/permissionRoutes.d.ts.map +1 -1
  33. package/dist/web/routes/permissionRoutes.js +32 -13
  34. package/dist/web/routes/setupRoutes.d.ts +1 -0
  35. package/dist/web/routes/setupRoutes.d.ts.map +1 -1
  36. package/dist/web/routes/setupRoutes.js +113 -41
  37. package/package.json +3 -1
  38. package/scripts/pretooluse-vscode.sh +163 -0
  39. package/scripts/pretooluse-windsurf.sh +166 -4
  40. package/server.json +2 -2
@@ -2,8 +2,8 @@
2
2
  * Auto-generated file - DO NOT EDIT
3
3
  * Generated at build time by scripts/generate-version.js
4
4
  */
5
- export declare const PACKAGE_VERSION = "2.0.16";
6
- export declare const BUILD_TIMESTAMP = "2026-04-14T18:29:14.630Z";
5
+ export declare const PACKAGE_VERSION = "2.0.17";
6
+ export declare const BUILD_TIMESTAMP = "2026-04-15T14:39:26.716Z";
7
7
  export declare const BUILD_TYPE: 'npm' | 'git';
8
8
  export declare const PACKAGE_NAME = "@dollhousemcp/mcp-server";
9
9
  //# sourceMappingURL=version.d.ts.map
@@ -2,8 +2,8 @@
2
2
  * Auto-generated file - DO NOT EDIT
3
3
  * Generated at build time by scripts/generate-version.js
4
4
  */
5
- export const PACKAGE_VERSION = '2.0.16';
6
- export const BUILD_TIMESTAMP = '2026-04-14T18:29:14.630Z';
5
+ export const PACKAGE_VERSION = '2.0.17';
6
+ export const BUILD_TIMESTAMP = '2026-04-15T14:39:26.716Z';
7
7
  export const BUILD_TYPE = 'npm';
8
8
  export const PACKAGE_NAME = '@dollhousemcp/mcp-server';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcyLjAuMTYnO1xuZXhwb3J0IGNvbnN0IEJVSUxEX1RJTUVTVEFNUCA9ICcyMDI2LTA0LTE0VDE4OjI5OjE0LjYzMFonO1xuZXhwb3J0IGNvbnN0IEJVSUxEX1RZUEU6ICducG0nIHwgJ2dpdCcgPSAnbnBtJztcbmV4cG9ydCBjb25zdCBQQUNLQUdFX05BTUUgPSAnQGRvbGxob3VzZW1jcC9tY3Atc2VydmVyJztcbiJdfQ==
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcyLjAuMTcnO1xuZXhwb3J0IGNvbnN0IEJVSUxEX1RJTUVTVEFNUCA9ICcyMDI2LTA0LTE1VDE0OjM5OjI2LjcxNlonO1xuZXhwb3J0IGNvbnN0IEJVSUxEX1RZUEU6ICducG0nIHwgJ2dpdCcgPSAnbnBtJztcbmV4cG9ydCBjb25zdCBQQUNLQUdFX05BTUUgPSAnQGRvbGxob3VzZW1jcC9tY3Atc2VydmVyJztcbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"createElement.d.ts","sourceRoot":"","sources":["../../../src/handlers/element-crud/createElement.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAQhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,4FAA4F;IAC5F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gJAAgJ;IAChJ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC;;;OAGG;IACH,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;IAG7B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,KAAK,CAAC;YACjB,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;YACtC,QAAQ,EAAE,OAAO,CAAC;YAClB,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;SACrC,CAAC,CAAC;QACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;KAC5B,CAAC;IACF;;;OAGG;IACH,SAAS,CAAC,EAAE;QACV,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;KACrC,CAAC;IACF;;;OAGG;IACH,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IACF;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAeD,wBAAsB,aAAa,CAAC,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,iBAAiB;;;;;GAwQvF"}
1
+ {"version":3,"file":"createElement.d.ts","sourceRoot":"","sources":["../../../src/handlers/element-crud/createElement.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAQhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,4FAA4F;IAC5F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gJAAgJ;IAChJ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC;;;OAGG;IACH,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;IAG7B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,KAAK,CAAC;YACjB,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;YACtC,QAAQ,EAAE,OAAO,CAAC;YAClB,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;SACrC,CAAC,CAAC;QACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;KAC5B,CAAC;IACF;;;OAGG;IACH,SAAS,CAAC,EAAE;QACV,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;KACrC,CAAC;IACF;;;OAGG;IACH,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IACF;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAeD,wBAAsB,aAAa,CAAC,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,iBAAiB;;;;;GA6QvF"}
@@ -7,7 +7,7 @@
7
7
  import { ElementType } from '../../portfolio/PortfolioManager.js';
8
8
  import { SECURITY_LIMITS } from '../../security/constants.js';
9
9
  import { sanitizeInput, validateContentSize, validateCategory } from '../../security/InputValidator.js';
10
- import { sanitizeMetadata, normalizeElementTypeInput, formatValidElementTypesList, detectUnknownMetadataProperties, formatUnknownPropertyWarnings, formatElementResolutionWarnings } from './helpers.js';
10
+ import { sanitizeMetadata, normalizeElementTypeInput, formatValidElementTypesList, detectUnknownMetadataProperties, formatUnknownPropertyWarnings, formatElementResolutionWarnings, collectGatekeeperAuthoringErrors, formatGatekeeperValidationMessage, } from './helpers.js';
11
11
  import { resolveElementTypes } from '../../utils/elementTypeResolver.js';
12
12
  import { logger } from '../../utils/logger.js';
13
13
  // FIX: Issue #281 - SecurityMonitor import removed, persona logging now in PersonaManager.create()
@@ -71,6 +71,10 @@ export async function createElement(context, args) {
71
71
  // Element-specific fields (ensemble elements, agent V2 fields) are merged into
72
72
  // metadata by the dispatcher (MCPAQLHandler). createElement just sanitizes and delegates.
73
73
  const sanitized = sanitizeMetadata(metadata);
74
+ const gatekeeperErrors = collectGatekeeperAuthoringErrors({ ...args }, sanitized);
75
+ if (gatekeeperErrors.length > 0) {
76
+ return formatSimpleErrorResponse(formatGatekeeperValidationMessage(gatekeeperErrors));
77
+ }
74
78
  // Issue #621: Validate category format for element types that support it
75
79
  // Persona also supports categories (validated internally by PersonaManager) — include here for consistent early error reporting
76
80
  const CATEGORY_TYPES = new Set([ElementType.PERSONA, ElementType.SKILL, ElementType.TEMPLATE, ElementType.MEMORY]);
@@ -267,4 +271,4 @@ export async function createElement(context, args) {
267
271
  };
268
272
  }
269
273
  }
270
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlRWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oYW5kbGVycy9lbGVtZW50LWNydWQvY3JlYXRlRWxlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hHLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIseUJBQXlCLEVBQ3pCLDJCQUEyQixFQUMzQiwrQkFBK0IsRUFDL0IsNkJBQTZCLEVBQzdCLCtCQUErQixFQUNoQyxNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUV6RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0MsbUdBQW1HO0FBQ25HLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNyQixNQUFNLHdCQUF3QixDQUFDO0FBOEdoQzs7R0FFRztBQUNILFNBQVMsbUJBQW1CLENBQUMsUUFBeUIsRUFBRSxTQUFpQjtJQUN2RSxPQUFPO1FBQ0wsR0FBRyxRQUFRO1FBQ1gsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsQyxHQUFHLENBQUM7WUFDSixJQUFJLEVBQUUsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRTtTQUM5QixDQUFDLENBQUM7S0FDSixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsYUFBYSxDQUFDLE9BQTJCLEVBQUUsSUFBdUI7SUFDdEYs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cHJlc3Npb25cbiAqIFRoaXMgZmlsZSBkZWxlZ2F0ZXMgZWxlbWVudCBjcmVhdGlvbiB0byBzcGVjaWFsaXplZCBtYW5hZ2Vycy5cbiAqIEF1ZGl0IGxvZ2dpbmcgaGFwcGVucyBpbiB0aGUgbWFuYWdlcnMgdGhlbXNlbHZlcyAoUGVyc29uYU1hbmFnZXIsIFNraWxsTWFuYWdlciwgZXRjLikuXG4gKiBAc2VjdXJpdHktYXVkaXQtc3VwcHJlc3MgRE1DUC1TRUMtMDA2XG4gKi9cblxuaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tICcuLi8uLi9wb3J0Zm9saW8vUG9ydGZvbGlvTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBTRUNVUklUWV9MSU1JVFMgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgc2FuaXRpemVJbnB1dCwgdmFsaWRhdGVDb250ZW50U2l6ZSwgdmFsaWRhdGVDYXRlZ29yeSB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L0lucHV0VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7XG4gIHNhbml0aXplTWV0YWRhdGEsXG4gIG5vcm1hbGl6ZUVsZW1lbnRUeXBlSW5wdXQsXG4gIGZvcm1hdFZhbGlkRWxlbWVudFR5cGVzTGlzdCxcbiAgZGV0ZWN0VW5rbm93bk1ldGFkYXRhUHJvcGVydGllcyxcbiAgZm9ybWF0VW5rbm93blByb3BlcnR5V2FybmluZ3MsXG4gIGZvcm1hdEVsZW1lbnRSZXNvbHV0aW9uV2FybmluZ3Ncbn0gZnJvbSAnLi9oZWxwZXJzLmpzJztcbmltcG9ydCB7IHJlc29sdmVFbGVtZW50VHlwZXMgfSBmcm9tICcuLi8uLi91dGlscy9lbGVtZW50VHlwZVJlc29sdmVyLmpzJztcbmltcG9ydCB7IEVsZW1lbnRDcnVkQ29udGV4dCB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbi8vIEZJWDogSXNzdWUgIzI4MSAtIFNlY3VyaXR5TW9uaXRvciBpbXBvcnQgcmVtb3ZlZCwgcGVyc29uYSBsb2dnaW5nIG5vdyBpbiBQZXJzb25hTWFuYWdlci5jcmVhdGUoKVxuaW1wb3J0IHtcbiAgZm9ybWF0U2ltcGxlRXJyb3JSZXNwb25zZSxcbiAgZm9ybWF0RHVwbGljYXRlRXJyb3IsXG4gIGZvcm1hdEV4Y2VwdGlvbkVycm9yXG59IGZyb20gJy4vcmVzcG9uc2VGb3JtYXR0ZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBNY3BUb29sUmVzcG9uc2UgfSBmcm9tICcuL3Jlc3BvbnNlRm9ybWF0dGVyLmpzJztcbmltcG9ydCB0eXBlIHsgRW5zZW1ibGVFbGVtZW50IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvZW5zZW1ibGVzL3R5cGVzLmpzJztcblxuLyoqXG4gKiBBcmd1bWVudHMgZm9yIGNyZWF0aW5nIGEgbmV3IGVsZW1lbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0ZSBhIHBlcnNvbmFcbiAqIHsgbmFtZTogJ2hlbHBlcicsIHR5cGU6ICdwZXJzb25hJywgZGVzY3JpcHRpb246ICdBIGhlbHBmdWwgYXNzaXN0YW50JywgaW5zdHJ1Y3Rpb25zOiAnQmUgaGVscGZ1bCcgfVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYW4gZW5zZW1ibGUgd2l0aCBlbGVtZW50c1xuICoge1xuICogICBuYW1lOiAnbXktZW5zZW1ibGUnLFxuICogICB0eXBlOiAnZW5zZW1ibGUnLFxuICogICBkZXNjcmlwdGlvbjogJ0EgY29vcmRpbmF0ZWQgZ3JvdXAnLFxuICogICBlbGVtZW50czogW3sgbmFtZTogJ3NraWxsMScsIHR5cGU6ICdza2lsbCcsIHJvbGU6ICdwcmltYXJ5JywgcHJpb3JpdHk6IDEwMCwgYWN0aXZhdGlvbjogJ2Fsd2F5cycgfV1cbiAqIH1cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGEgVjIgYWdlbnQgd2l0aCBnb2FsIGNvbmZpZ3VyYXRpb25cbiAqIHtcbiAqICAgbmFtZTogJ3Rhc2stcnVubmVyJyxcbiAqICAgdHlwZTogJ2FnZW50JyxcbiAqICAgZGVzY3JpcHRpb246ICdFeGVjdXRlcyB0YXNrcyBhdXRvbm9tb3VzbHknLFxuICogICBnb2FsOiB7XG4gKiAgICAgdGVtcGxhdGU6ICdDb21wbGV0ZSB0aGUgZm9sbG93aW5nIHRhc2s6IHtvYmplY3RpdmV9JyxcbiAqICAgICBwYXJhbWV0ZXJzOiBbeyBuYW1lOiAnb2JqZWN0aXZlJywgdHlwZTogJ3N0cmluZycsIHJlcXVpcmVkOiB0cnVlIH1dLFxuICogICAgIHN1Y2Nlc3NDcml0ZXJpYTogWydUYXNrIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHknLCAnUmVzdWx0cyBkb2N1bWVudGVkJ11cbiAqICAgfSxcbiAqICAgYWN0aXZhdGVzOiB7IHNraWxsczogWydjb2RlLXJldmlldyddLCBwZXJzb25hczogWydkZXZlbG9wZXInXSB9XG4gKiB9XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlRWxlbWVudEFyZ3Mge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgLyoqIFJlZmVyZW5jZSBtYXRlcmlhbCwga25vd2xlZGdlLCBjb250ZXh0IChpbmZvcm1hdGlvbmFsKS4gRm9yIHRlbXBsYXRlczogdGVtcGxhdGUgYm9keS4gKi9cbiAgY29udGVudD86IHN0cmluZztcbiAgLyoqIEJlaGF2aW9yYWwgZGlyZWN0aXZlcyAoY29tbWFuZCB2b2ljZSkuIEZvciBwZXJzb25hczogYmVoYXZpb3JhbCBwcm9maWxlLiBGb3Igc2tpbGxzOiBob3cgdG8gYXBwbHkuIEZvciBhZ2VudHM6IGFnZW50IGJlaGF2aW9yYWwgcHJvdG9jb2wuICovXG4gIGluc3RydWN0aW9ucz86IHN0cmluZztcbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqXG4gICAqIEZvciBlbnNlbWJsZXMgLSBhcnJheSBvZiBlbGVtZW50IHJlZmVyZW5jZXMuXG4gICAqIElzc3VlICMyNzg6IExMTXMgb2Z0ZW4gcGFzcyBlbGVtZW50cyBhdCB0b3AgbGV2ZWwsIG5vdCBpbnNpZGUgbWV0YWRhdGEuXG4gICAqL1xuICBlbGVtZW50cz86IEVuc2VtYmxlRWxlbWVudFtdO1xuXG4gIC8vIFYyIEFnZW50IGZpZWxkcyAoY2FuIGFsc28gYmUgcGFzc2VkIGluIG1ldGFkYXRhKVxuICAvKipcbiAgICogRm9yIFYyIGFnZW50cyAtIGdvYWwgY29uZmlndXJhdGlvbiB3aXRoIHRlbXBsYXRlIGFuZCBwYXJhbWV0ZXJzLlxuICAgKiBDYW4gYmUgcGFzc2VkIGFzIGEgc2ltcGxlIHN0cmluZyAod2lsbCBiZSBjb252ZXJ0ZWQgdG8gVjIgZm9ybWF0KVxuICAgKiBvciBhcyBhIGZ1bGwgVjIgY29uZmlnIG9iamVjdC5cbiAgICpcbiAgICogQHNpbmNlIHYyLjAuMCAtIEFnZW50IFYyIEluZnJhc3RydWN0dXJlXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIFNpbXBsZSBzdHJpbmcgZ29hbCAoYXV0by1jb252ZXJ0ZWQgdG8gVjIgZm9ybWF0KVxuICAgKiBnb2FsOiAnQ29tcGxldGUgdGhlIGFuYWx5c2lzIHRhc2snXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIEZ1bGwgVjIgY29uZmlnIHdpdGggcGFyYW1ldGVyc1xuICAgKiBnb2FsOiB7XG4gICAqICAgdGVtcGxhdGU6ICdBbmFseXplIHt0YXJnZXR9IGZvciB7cHVycG9zZX0nLFxuICAgKiAgIHBhcmFtZXRlcnM6IFtcbiAgICogICAgIHsgbmFtZTogJ3RhcmdldCcsIHR5cGU6ICdzdHJpbmcnLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgKiAgICAgeyBuYW1lOiAncHVycG9zZScsIHR5cGU6ICdzdHJpbmcnLCByZXF1aXJlZDogdHJ1ZSB9XG4gICAqICAgXSxcbiAgICogICBzdWNjZXNzQ3JpdGVyaWE6IFsnQW5hbHlzaXMgY29tcGxldGUnLCAnUmVwb3J0IGdlbmVyYXRlZCddXG4gICAqIH1cbiAgICovXG4gIGdvYWw/OiBzdHJpbmcgfCB7XG4gICAgdGVtcGxhdGU6IHN0cmluZztcbiAgICBwYXJhbWV0ZXJzPzogQXJyYXk8e1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgdHlwZTogJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdib29sZWFuJztcbiAgICAgIHJlcXVpcmVkOiBib29sZWFuO1xuICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgICBkZWZhdWx0Pzogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbjtcbiAgICB9PjtcbiAgICBzdWNjZXNzQ3JpdGVyaWE/OiBzdHJpbmdbXTtcbiAgfTtcbiAgLyoqXG4gICAqIEZvciBWMiBhZ2VudHMgLSBlbGVtZW50cyB0byBhY3RpdmF0ZSB3aGVuIGFnZW50IGV4ZWN1dGVzLlxuICAgKiBAc2luY2UgdjIuMC4wIC0gQWdlbnQgVjIgSW5mcmFzdHJ1Y3R1cmVcbiAgICovXG4gIGFjdGl2YXRlcz86IHtcbiAgICBwZXJzb25hcz86IHN0cmluZ1tdO1xuICAgIHNraWxscz86IHN0cmluZ1tdO1xuICAgIG1lbW9yaWVzPzogc3RyaW5nW107XG4gICAgdGVtcGxhdGVzPzogc3RyaW5nW107XG4gICAgZW5zZW1ibGVzPzogc3RyaW5nW107XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gIH07XG4gIC8qKlxuICAgKiBGb3IgVjIgYWdlbnRzIC0gdG9vbCBjb25maWd1cmF0aW9uIChpbmZvcm1hdGlvbmFsKS5cbiAgICogQHNpbmNlIHYyLjAuMCAtIEFnZW50IFYyIEluZnJhc3RydWN0dXJlXG4gICAqL1xuICB0b29scz86IHtcbiAgICBhbGxvd2VkOiBzdHJpbmdbXTtcbiAgICBkZW5pZWQ/OiBzdHJpbmdbXTtcbiAgfTtcbiAgLyoqXG4gICAqIEZvciBWMiBhZ2VudHMgLSBjdXN0b20gc3lzdGVtIHByb21wdCBmb3IgTExNIGNvbnRleHQuXG4gICAqIEBzaW5jZSB2Mi4wLjAgLSBBZ2VudCBWMiBJbmZyYXN0cnVjdHVyZVxuICAgKi9cbiAgc3lzdGVtUHJvbXB0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEhlbHBlciB0byBhZGQgcGVyc29uYSBpbmRpY2F0b3IgcHJlZml4IHRvIHJlc3BvbnNlXG4gKi9cbmZ1bmN0aW9uIGFkZFBlcnNvbmFJbmRpY2F0b3IocmVzcG9uc2U6IE1jcFRvb2xSZXNwb25zZSwgaW5kaWNhdG9yOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5yZXNwb25zZSxcbiAgICBjb250ZW50OiByZXNwb25zZS5jb250ZW50Lm1hcChjID0+ICh7XG4gICAgICAuLi5jLFxuICAgICAgdGV4dDogYCR7aW5kaWNhdG9yfSR7Yy50ZXh0fWBcbiAgICB9KSlcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoY29udGV4dDogRWxlbWVudENydWRDb250ZXh0LCBhcmdzOiBDcmVhdGVFbGVtZW50QXJncykge1xuICBhd2FpdCBjb250ZXh0LmVuc3VyZUluaXRpYWxpemVkKCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB7IG5hbWUsIHR5cGUsIGRlc2NyaXB0aW9uLCBjb250ZW50LCBpbnN0cnVjdGlvbnMsIG1ldGFkYXRhIH0gPSBhcmdzO1xuXG4gICAgY29uc3QgeyB0eXBlOiBub3JtYWxpemVkVHlwZSB9ID0gbm9ybWFsaXplRWxlbWVudFR5cGVJbnB1dCh0eXBlKTtcblxuICAgIGlmICghbm9ybWFsaXplZFR5cGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBJbnZhbGlkIGVsZW1lbnQgdHlwZSAnJHt0eXBlfScuIFZhbGlkIHR5cGVzOiAke2Zvcm1hdFZhbGlkRWxlbWVudFR5cGVzTGlzdCgpfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgdmFsaWRhdGVkTmFtZSA9IHNhbml0aXplSW5wdXQobmFtZSwgU0VDVVJJVFlfTElNSVRTLk1BWF9GSUxFTkFNRV9MRU5HVEgpO1xuICAgIGNvbnN0IHZhbGlkYXRlZERlc2NyaXB0aW9uID0gc2FuaXRpemVJbnB1dChkZXNjcmlwdGlvbiwgU0VDVVJJVFlfTElNSVRTLk1BWF9NRVRBREFUQV9GSUVMRF9MRU5HVEgpO1xuXG4gICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhbGlkYXRlQ29udGVudFNpemUoY29udGVudCwgU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSCk7XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCBDb250ZW50IHRvbyBsYXJnZTogJHtlcnJvci5tZXNzYWdlfS4gTWF4aW11bSBhbGxvd2VkIHNpemUgaXMgJHtTRUNVUklUWV9MSU1JVFMuTUFYX0NPTlRFTlRfTEVOR1RIfSBjaGFyYWN0ZXJzICgke01hdGguZmxvb3IoU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSCAvIDEwMjQpfUtCKS5gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJc3N1ZSAjNjAyIHJlc29sdmVkOiBCb3RoICdpbnN0cnVjdGlvbnMnIGFuZCAnY29udGVudCcgYXJlIGZpcnN0LWNsYXNzIGZpZWxkcy5cbiAgICAvLyBpbnN0cnVjdGlvbnMgPSBiZWhhdmlvcmFsIGRpcmVjdGl2ZXMgKGNvbW1hbmQgdm9pY2UsIFwiWW91IEFSRS4uLlwiLCBcIkFMV0FZUy4uLlwiKVxuICAgIC8vIGNvbnRlbnQgPSByZWZlcmVuY2UgbWF0ZXJpYWwgKGluZm9ybWF0aW9uYWwsIGRvbWFpbiBrbm93bGVkZ2UsIGV4YW1wbGVzKVxuICAgIGlmIChpbnN0cnVjdGlvbnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhbGlkYXRlQ29udGVudFNpemUoaW5zdHJ1Y3Rpb25zLCBTRUNVUklUWV9MSU1JVFMuTUFYX0NPTlRFTlRfTEVOR1RIKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBg4p2MIEluc3RydWN0aW9ucyB0b28gbGFyZ2U6ICR7ZXJyb3IubWVzc2FnZX0uIE1heGltdW0gYWxsb3dlZCBzaXplIGlzICR7U0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSH0gY2hhcmFjdGVycy5gXG4gICAgICAgICAgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFbGVtZW50LXNwZWNpZmljIGZpZWxkcyAoZW5zZW1ibGUgZWxlbWVudHMsIGFnZW50IFYyIGZpZWxkcykgYXJlIG1lcmdlZCBpbnRvXG4gICAgLy8gbWV0YWRhdGEgYnkgdGhlIGRpc3BhdGNoZXIgKE1DUEFRTEhhbmRsZXIpLiBjcmVhdGVFbGVtZW50IGp1c3Qgc2FuaXRpemVzIGFuZCBkZWxlZ2F0ZXMuXG4gICAgY29uc3Qgc2FuaXRpemVkID0gc2FuaXRpemVNZXRhZGF0YShtZXRhZGF0YSk7XG5cbiAgICAvLyBJc3N1ZSAjNjIxOiBWYWxpZGF0ZSBjYXRlZ29yeSBmb3JtYXQgZm9yIGVsZW1lbnQgdHlwZXMgdGhhdCBzdXBwb3J0IGl0XG4gICAgLy8gUGVyc29uYSBhbHNvIHN1cHBvcnRzIGNhdGVnb3JpZXMgKHZhbGlkYXRlZCBpbnRlcm5hbGx5IGJ5IFBlcnNvbmFNYW5hZ2VyKSDigJQgaW5jbHVkZSBoZXJlIGZvciBjb25zaXN0ZW50IGVhcmx5IGVycm9yIHJlcG9ydGluZ1xuICAgIGNvbnN0IENBVEVHT1JZX1RZUEVTID0gbmV3IFNldChbRWxlbWVudFR5cGUuUEVSU09OQSwgRWxlbWVudFR5cGUuU0tJTEwsIEVsZW1lbnRUeXBlLlRFTVBMQVRFLCBFbGVtZW50VHlwZS5NRU1PUlldKTtcbiAgICBpZiAoc2FuaXRpemVkLmNhdGVnb3J5ICYmIENBVEVHT1JZX1RZUEVTLmhhcyhub3JtYWxpemVkVHlwZSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhbGlkYXRlQ2F0ZWdvcnkoc2FuaXRpemVkLmNhdGVnb3J5IGFzIHN0cmluZyk7XG4gICAgICB9IGNhdGNoIChjYXRlZ29yeUVycm9yOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdFNpbXBsZUVycm9yUmVzcG9uc2UoXG4gICAgICAgICAgYEludmFsaWQgY2F0ZWdvcnkgJyR7c2FuaXRpemVkLmNhdGVnb3J5fSc6ICR7Y2F0ZWdvcnlFcnJvci5tZXNzYWdlfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEZXRlY3QgdW5rbm93biBtZXRhZGF0YSBwcm9wZXJ0aWVzIGFuZCBnZW5lcmF0ZSB3YXJuaW5ncyBmb3IgTExNIGZlZWRiYWNrXG4gICAgY29uc3QgdW5rbm93blByb3BlcnR5V2FybmluZ3MgPSBkZXRlY3RVbmtub3duTWV0YWRhdGFQcm9wZXJ0aWVzKFxuICAgICAgbm9ybWFsaXplZFR5cGUsXG4gICAgICBtZXRhZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICk7XG4gICAgY29uc3Qgd2FybmluZ1RleHQgPSBmb3JtYXRVbmtub3duUHJvcGVydHlXYXJuaW5ncyh1bmtub3duUHJvcGVydHlXYXJuaW5ncyk7XG5cbiAgICAvLyBMb2cgd2FybmluZ3MgZm9yIGRlYnVnZ2luZyB3aXRoIHN0cnVjdHVyZWQgZGF0YSBmb3IgYmV0dGVyIG9ic2VydmFiaWxpdHlcbiAgICBpZiAodW5rbm93blByb3BlcnR5V2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgbG9nZ2VyLndhcm4oYFtjcmVhdGVFbGVtZW50XSBVbmtub3duIG1ldGFkYXRhIHByb3BlcnRpZXMgZGV0ZWN0ZWRgLCB7XG4gICAgICAgIGVsZW1lbnRUeXBlOiBub3JtYWxpemVkVHlwZSxcbiAgICAgICAgZWxlbWVudE5hbWU6IG5hbWUsXG4gICAgICAgIHdhcm5pbmdDb3VudDogdW5rbm93blByb3BlcnR5V2FybmluZ3MubGVuZ3RoLFxuICAgICAgICB1bmtub3duUHJvcGVydGllczogdW5rbm93blByb3BlcnR5V2FybmluZ3MubWFwKHcgPT4gKHtcbiAgICAgICAgICBwcm9wZXJ0eTogdy5wcm9wZXJ0eSxcbiAgICAgICAgICBzdWdnZXN0aW9uOiB3LnN1Z2dlc3Rpb25cbiAgICAgICAgfSkpXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKG5vcm1hbGl6ZWRUeXBlKSB7XG4gICAgICBjYXNlIEVsZW1lbnRUeXBlLlBFUlNPTkE6IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBJc3N1ZSAjNjAyOiBCb3RoICdpbnN0cnVjdGlvbnMnIGFuZCAnY29udGVudCcgYXJlIGZpcnN0LWNsYXNzIGZpZWxkcy5cbiAgICAgICAgICBjb25zdCBwZXJzb25hID0gYXdhaXQgY29udGV4dC5wZXJzb25hTWFuYWdlci5jcmVhdGUoe1xuICAgICAgICAgICAgLi4uc2FuaXRpemVkLFxuICAgICAgICAgICAgbmFtZTogdmFsaWRhdGVkTmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB2YWxpZGF0ZWREZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGluc3RydWN0aW9uczogaW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgICAgY29udGVudDogY29udGVudCxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NNc2cgPSBgJHt3YXJuaW5nVGV4dH3inIUgQ3JlYXRlZCBwZXJzb25hICcke3BlcnNvbmEubWV0YWRhdGEubmFtZX0nIHN1Y2Nlc3NmdWxseWA7XG4gICAgICAgICAgcmV0dXJuIHsgY29udGVudDogW3sgdHlwZTogXCJ0ZXh0XCIsIHRleHQ6IGAke2NvbnRleHQuZ2V0UGVyc29uYUluZGljYXRvcigpfSR7c3VjY2Vzc01zZ31gIH1dIH07XG4gICAgICAgIH0gY2F0Y2ggKHBlcnNvbmFFcnJvcikge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBwZXJzb25hRXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IHBlcnNvbmFFcnJvci5tZXNzYWdlIDogU3RyaW5nKHBlcnNvbmFFcnJvcik7XG4gICAgICAgICAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoJ2luc3RydWN0aW9ucyBhcmUgcmVxdWlyZWQnKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFNpbXBsZUVycm9yUmVzcG9uc2UobWVzc2FnZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGVycm9yUmVzcG9uc2UgPSBtZXNzYWdlLmluY2x1ZGVzKCdhbHJlYWR5IGV4aXN0cycpXG4gICAgICAgICAgICA/IGZvcm1hdER1cGxpY2F0ZUVycm9yKEVsZW1lbnRUeXBlLlBFUlNPTkEsIHZhbGlkYXRlZE5hbWUpXG4gICAgICAgICAgICA6IGZvcm1hdEV4Y2VwdGlvbkVycm9yKHBlcnNvbmFFcnJvciwgJ2NyZWF0ZScsIEVsZW1lbnRUeXBlLlBFUlNPTkEsIHZhbGlkYXRlZE5hbWUpO1xuICAgICAgICAgIHJldHVybiBhZGRQZXJzb25hSW5kaWNhdG9yKGVycm9yUmVzcG9uc2UsIGNvbnRleHQuZ2V0UGVyc29uYUluZGljYXRvcigpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjYXNlIEVsZW1lbnRUeXBlLlNLSUxMOiB7XG4gICAgICAgIC8vIEZJWDogSXNzdWUgIzIwIC0gQ2F0Y2ggZHVwbGljYXRlIGVycm9ycyBmcm9tIFNraWxsTWFuYWdlclxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHNraWxsID0gYXdhaXQgY29udGV4dC5za2lsbE1hbmFnZXIuY3JlYXRlKHtcbiAgICAgICAgICAgIG5hbWU6IHZhbGlkYXRlZE5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogdmFsaWRhdGVkRGVzY3JpcHRpb24sXG4gICAgICAgICAgICAuLi5zYW5pdGl6ZWQsXG4gICAgICAgICAgICBpbnN0cnVjdGlvbnM6IGluc3RydWN0aW9ucyxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQgfHwgJydcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBzdWNjZXNzTXNnID0gYCR7d2FybmluZ1RleHR94pyFIENyZWF0ZWQgc2tpbGwgJyR7c2tpbGwubWV0YWRhdGEubmFtZX0nIHN1Y2Nlc3NmdWxseWA7XG4gICAgICAgICAgcmV0dXJuIHsgY29udGVudDogW3sgdHlwZTogXCJ0ZXh0XCIsIHRleHQ6IGAke2NvbnRleHQuZ2V0UGVyc29uYUluZGljYXRvcigpfSR7c3VjY2Vzc01zZ31gIH1dIH07XG4gICAgICAgIH0gY2F0Y2ggKHNraWxsRXJyb3IpIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGEgZHVwbGljYXRlIGVycm9yXG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHNraWxsRXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IHNraWxsRXJyb3IubWVzc2FnZSA6IFN0cmluZyhza2lsbEVycm9yKTtcbiAgICAgICAgICBjb25zdCBlcnJvclJlc3BvbnNlID0gbWVzc2FnZS5pbmNsdWRlcygnYWxyZWFkeSBleGlzdHMnKVxuICAgICAgICAgICAgPyBmb3JtYXREdXBsaWNhdGVFcnJvcihFbGVtZW50VHlwZS5TS0lMTCwgdmFsaWRhdGVkTmFtZSlcbiAgICAgICAgICAgIDogZm9ybWF0RXhjZXB0aW9uRXJyb3Ioc2tpbGxFcnJvciwgJ2NyZWF0ZScsIEVsZW1lbnRUeXBlLlNLSUxMLCB2YWxpZGF0ZWROYW1lKTtcbiAgICAgICAgICByZXR1cm4gYWRkUGVyc29uYUluZGljYXRvcihlcnJvclJlc3BvbnNlLCBjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2FzZSBFbGVtZW50VHlwZS5URU1QTEFURToge1xuICAgICAgICAvLyBGSVg6IElzc3VlICMyMCAtIENhdGNoIGR1cGxpY2F0ZSBlcnJvcnMgZnJvbSBUZW1wbGF0ZU1hbmFnZXJcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IGF3YWl0IGNvbnRleHQudGVtcGxhdGVNYW5hZ2VyLmNyZWF0ZSh7XG4gICAgICAgICAgICBuYW1lOiB2YWxpZGF0ZWROYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHZhbGlkYXRlZERlc2NyaXB0aW9uLFxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zOiBpbnN0cnVjdGlvbnMsXG4gICAgICAgICAgICBjb250ZW50OiBjb250ZW50IHx8ICcnLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHNhbml0aXplZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBzdWNjZXNzTXNnID0gYCR7d2FybmluZ1RleHR94pyFIENyZWF0ZWQgdGVtcGxhdGUgJyR7dGVtcGxhdGUubWV0YWRhdGEubmFtZX0nIHN1Y2Nlc3NmdWxseWA7XG4gICAgICAgICAgcmV0dXJuIHsgY29udGVudDogW3sgdHlwZTogXCJ0ZXh0XCIsIHRleHQ6IGAke2NvbnRleHQuZ2V0UGVyc29uYUluZGljYXRvcigpfSR7c3VjY2Vzc01zZ31gIH1dIH07XG4gICAgICAgIH0gY2F0Y2ggKHRlbXBsYXRlRXJyb3IpIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGEgZHVwbGljYXRlIGVycm9yXG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRlbXBsYXRlRXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IHRlbXBsYXRlRXJyb3IubWVzc2FnZSA6IFN0cmluZyh0ZW1wbGF0ZUVycm9yKTtcbiAgICAgICAgICBjb25zdCBlcnJvclJlc3BvbnNlID0gbWVzc2FnZS5pbmNsdWRlcygnYWxyZWFkeSBleGlzdHMnKVxuICAgICAgICAgICAgPyBmb3JtYXREdXBsaWNhdGVFcnJvcihFbGVtZW50VHlwZS5URU1QTEFURSwgdmFsaWRhdGVkTmFtZSlcbiAgICAgICAgICAgIDogZm9ybWF0RXhjZXB0aW9uRXJyb3IodGVtcGxhdGVFcnJvciwgJ2NyZWF0ZScsIEVsZW1lbnRUeXBlLlRFTVBMQVRFLCB2YWxpZGF0ZWROYW1lKTtcbiAgICAgICAgICByZXR1cm4gYWRkUGVyc29uYUluZGljYXRvcihlcnJvclJlc3BvbnNlLCBjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2FzZSBFbGVtZW50VHlwZS5BR0VOVDoge1xuICAgICAgICAvLyBWMiBmaWVsZHMgYXJlIG1lcmdlZCBpbnRvIG1ldGFkYXRhIGJ5IHRoZSBkaXNwYXRjaGVyIChNQ1BBUUxIYW5kbGVyKS5cbiAgICAgICAgLy8gR29hbCBub3JtYWxpemF0aW9uIChzdHJpbmfihpJvYmplY3QpIGlzIGhhbmRsZWQgYnkgQWdlbnRNYW5hZ2VyLmNyZWF0ZSgpLlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIElzc3VlICM3MjI6IHYyIGR1YWwtZmllbGQgYXJjaGl0ZWN0dXJlIOKAlCBlYWNoIGZpZWxkIGdvZXMgd2hlcmUgaXQgYmVsb25ncy5cbiAgICAgICAgICAvLyBBZ2VudE1hbmFnZXIuY3JlYXRlKCkgM3JkIHBhcmFtID0gYmVoYXZpb3JhbCBkaXJlY3RpdmVzIChhZ2VudC5pbnN0cnVjdGlvbnMpLlxuICAgICAgICAgIC8vIG1ldGFkYXRhLmNvbnRlbnQgPSByZWZlcmVuY2UgbWF0ZXJpYWwgKG1hcmtkb3duIGJvZHkgYWZ0ZXIgZnJvbnRtYXR0ZXIpLlxuICAgICAgICAgIGNvbnN0IGFnZW50SW5zdHJ1Y3Rpb25zID0gaW5zdHJ1Y3Rpb25zIHx8ICcnO1xuICAgICAgICAgIGNvbnN0IGFnZW50Q29udGVudCA9IGNvbnRlbnQgfHwgJyc7XG4gICAgICAgICAgY29uc3QgYWdlbnQgPSBhd2FpdCBjb250ZXh0LmFnZW50TWFuYWdlci5jcmVhdGUoXG4gICAgICAgICAgICB2YWxpZGF0ZWROYW1lLFxuICAgICAgICAgICAgdmFsaWRhdGVkRGVzY3JpcHRpb24sXG4gICAgICAgICAgICBhZ2VudEluc3RydWN0aW9ucyxcbiAgICAgICAgICAgIHsgLi4uc2FuaXRpemVkLCBjb250ZW50OiBhZ2VudENvbnRlbnQgfVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGFnZW50LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VNZXNzYWdlID0gYWdlbnQubWVzc2FnZSAmJiBhZ2VudC5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2NyZWF0ZWQgYWdlbnQnKVxuICAgICAgICAgICAgICA/IGFnZW50Lm1lc3NhZ2VcbiAgICAgICAgICAgICAgOiBgQ3JlYXRlZCBhZ2VudCAnJHt2YWxpZGF0ZWROYW1lfScgc3VjY2Vzc2Z1bGx5YDtcbiAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NNc2cgPSBgJHt3YXJuaW5nVGV4dH3inIUgJHtiYXNlTWVzc2FnZX1gO1xuICAgICAgICAgICAgcmV0dXJuIHsgY29udGVudDogW3sgdHlwZTogXCJ0ZXh0XCIsIHRleHQ6IGAke2NvbnRleHQuZ2V0UGVyc29uYUluZGljYXRvcigpfSR7c3VjY2Vzc01zZ31gIH1dIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEZJWDogSXNzdWUgIzIwIC0gSW5jbHVkZSBcImZhaWxlZCB0byBjcmVhdGVcIiBpbiBlcnJvciBtZXNzYWdlIGZvciB0ZXN0IGNvbXBhdGliaWxpdHlcbiAgICAgICAgICBjb25zdCBmYWlsdXJlUmVhc29uID0gYWdlbnQubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcic7XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdFNpbXBsZUVycm9yUmVzcG9uc2UoYEZhaWxlZCB0byBjcmVhdGUgYWdlbnQ6ICR7ZmFpbHVyZVJlYXNvbn1gKTtcbiAgICAgICAgfSBjYXRjaCAoYWdlbnRFcnJvcikge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhZ2VudEVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBhZ2VudEVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoYWdlbnRFcnJvcik7XG4gICAgICAgICAgY29uc3QgZXJyb3JSZXNwb25zZSA9IG1lc3NhZ2UuaW5jbHVkZXMoJ2FscmVhZHkgZXhpc3RzJylcbiAgICAgICAgICAgID8gZm9ybWF0RHVwbGljYXRlRXJyb3IoRWxlbWVudFR5cGUuQUdFTlQsIHZhbGlkYXRlZE5hbWUpXG4gICAgICAgICAgICA6IGZvcm1hdEV4Y2VwdGlvbkVycm9yKGFnZW50RXJyb3IsICdjcmVhdGUnLCBFbGVtZW50VHlwZS5BR0VOVCwgdmFsaWRhdGVkTmFtZSk7XG4gICAgICAgICAgcmV0dXJuIGFkZFBlcnNvbmFJbmRpY2F0b3IoZXJyb3JSZXNwb25zZSwgY29udGV4dC5nZXRQZXJzb25hSW5kaWNhdG9yKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNhc2UgRWxlbWVudFR5cGUuTUVNT1JZOiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbWVtb3J5ID0gYXdhaXQgY29udGV4dC5tZW1vcnlNYW5hZ2VyLmNyZWF0ZSh7XG4gICAgICAgICAgICAuLi5zYW5pdGl6ZWQsXG4gICAgICAgICAgICBuYW1lOiB2YWxpZGF0ZWROYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHZhbGlkYXRlZERlc2NyaXB0aW9uLFxuICAgICAgICAgICAgY29udGVudDogY29udGVudCxcbiAgICAgICAgICAgIGluc3RydWN0aW9uczogaW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NNc2cgPSBgJHt3YXJuaW5nVGV4dH3inIUgQ3JlYXRlZCBtZW1vcnkgJyR7bWVtb3J5Lm1ldGFkYXRhLm5hbWV9JyBzdWNjZXNzZnVsbHlgO1xuICAgICAgICAgIHJldHVybiB7IGNvbnRlbnQ6IFt7IHR5cGU6IFwidGV4dFwiLCB0ZXh0OiBgJHtjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKX0ke3N1Y2Nlc3NNc2d9YCB9XSB9O1xuICAgICAgICB9IGNhdGNoIChtZW1vcnlFcnJvcikge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBtZW1vcnlFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gbWVtb3J5RXJyb3IubWVzc2FnZSA6IFN0cmluZyhtZW1vcnlFcnJvcik7XG4gICAgICAgICAgY29uc3QgZXJyb3JSZXNwb25zZSA9IG1lc3NhZ2UuaW5jbHVkZXMoJ2FscmVhZHkgZXhpc3RzJylcbiAgICAgICAgICAgID8gZm9ybWF0RHVwbGljYXRlRXJyb3IoRWxlbWVudFR5cGUuTUVNT1JZLCB2YWxpZGF0ZWROYW1lKVxuICAgICAgICAgICAgOiBmb3JtYXRFeGNlcHRpb25FcnJvcihtZW1vcnlFcnJvciwgJ2NyZWF0ZScsIEVsZW1lbnRUeXBlLk1FTU9SWSwgdmFsaWRhdGVkTmFtZSk7XG4gICAgICAgICAgcmV0dXJuIGFkZFBlcnNvbmFJbmRpY2F0b3IoZXJyb3JSZXNwb25zZSwgY29udGV4dC5nZXRQZXJzb25hSW5kaWNhdG9yKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNhc2UgRWxlbWVudFR5cGUuRU5TRU1CTEU6IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBJc3N1ZSAjNDY2OiBSZXNvbHZlIG1pc3NpbmcgZWxlbWVudF90eXBlIHZpYSBwb3J0Zm9saW8gbG9va3VwIGJlZm9yZSBjcmVhdGVcbiAgICAgICAgICBjb25zdCByZXNvbHV0aW9uUmVzdWx0ID0gYXdhaXQgcmVzb2x2ZUVsZW1lbnRUeXBlcyhcbiAgICAgICAgICAgIHNhbml0aXplZC5lbGVtZW50cyB8fCBbXSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2tpbGxNYW5hZ2VyOiBjb250ZXh0LnNraWxsTWFuYWdlcixcbiAgICAgICAgICAgICAgdGVtcGxhdGVNYW5hZ2VyOiBjb250ZXh0LnRlbXBsYXRlTWFuYWdlcixcbiAgICAgICAgICAgICAgYWdlbnRNYW5hZ2VyOiBjb250ZXh0LmFnZW50TWFuYWdlcixcbiAgICAgICAgICAgICAgbWVtb3J5TWFuYWdlcjogY29udGV4dC5tZW1vcnlNYW5hZ2VyLFxuICAgICAgICAgICAgICBwZXJzb25hTWFuYWdlcjogY29udGV4dC5wZXJzb25hTWFuYWdlcixcbiAgICAgICAgICAgICAgZW5zZW1ibGVNYW5hZ2VyOiBjb250ZXh0LmVuc2VtYmxlTWFuYWdlcixcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHJlc29sdXRpb25XYXJuaW5nVGV4dCA9IGZvcm1hdEVsZW1lbnRSZXNvbHV0aW9uV2FybmluZ3MocmVzb2x1dGlvblJlc3VsdCk7XG5cbiAgICAgICAgICBjb25zdCBlbnNlbWJsZSA9IGF3YWl0IGNvbnRleHQuZW5zZW1ibGVNYW5hZ2VyLmNyZWF0ZSh7XG4gICAgICAgICAgICAuLi5zYW5pdGl6ZWQsXG4gICAgICAgICAgICBuYW1lOiB2YWxpZGF0ZWROYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHZhbGlkYXRlZERlc2NyaXB0aW9uLFxuICAgICAgICAgICAgZWxlbWVudHM6IHJlc29sdXRpb25SZXN1bHQucmVzb2x2ZWQsXG4gICAgICAgICAgICBpbnN0cnVjdGlvbnM6IGluc3RydWN0aW9ucyxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3Qgc3VjY2Vzc01zZyA9IGAke3dhcm5pbmdUZXh0fSR7cmVzb2x1dGlvbldhcm5pbmdUZXh0feKchSBDcmVhdGVkIGVuc2VtYmxlICcke2Vuc2VtYmxlLm1ldGFkYXRhLm5hbWV9JyBzdWNjZXNzZnVsbHlgO1xuICAgICAgICAgIHJldHVybiB7IGNvbnRlbnQ6IFt7IHR5cGU6IFwidGV4dFwiLCB0ZXh0OiBgJHtjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKX0ke3N1Y2Nlc3NNc2d9YCB9XSB9O1xuICAgICAgICB9IGNhdGNoIChlbnNlbWJsZUVycm9yKSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVuc2VtYmxlRXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVuc2VtYmxlRXJyb3IubWVzc2FnZSA6IFN0cmluZyhlbnNlbWJsZUVycm9yKTtcbiAgICAgICAgICBjb25zdCBlcnJvclJlc3BvbnNlID0gbWVzc2FnZS5pbmNsdWRlcygnYWxyZWFkeSBleGlzdHMnKVxuICAgICAgICAgICAgPyBmb3JtYXREdXBsaWNhdGVFcnJvcihFbGVtZW50VHlwZS5FTlNFTUJMRSwgdmFsaWRhdGVkTmFtZSlcbiAgICAgICAgICAgIDogZm9ybWF0RXhjZXB0aW9uRXJyb3IoZW5zZW1ibGVFcnJvciwgJ2NyZWF0ZScsIEVsZW1lbnRUeXBlLkVOU0VNQkxFLCB2YWxpZGF0ZWROYW1lKTtcbiAgICAgICAgICByZXR1cm4gYWRkUGVyc29uYUluZGljYXRvcihlcnJvclJlc3BvbnNlLCBjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICB0ZXh0OiBg4p2MIEVsZW1lbnQgdHlwZSAnJHt0eXBlfScgaXMgbm90IHlldCBzdXBwb3J0ZWQgZm9yIGNyZWF0aW9uYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci5lcnJvcignRWxlbWVudENSVURIYW5kbGVyLmNyZWF0ZUVsZW1lbnQnLCBlcnJvcik7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InO1xuICAgIGNvbnN0IGluZGljYXRvciA9IGNvbnRleHQuZ2V0UGVyc29uYUluZGljYXRvcigpO1xuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbe1xuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgdGV4dDogYCR7aW5kaWNhdG9yfeKdjCBGYWlsZWQgdG8gY3JlYXRlIGVsZW1lbnQ6ICR7bWVzc2FnZX1gXG4gICAgICB9XVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
274
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlRWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oYW5kbGVycy9lbGVtZW50LWNydWQvY3JlYXRlRWxlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hHLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIseUJBQXlCLEVBQ3pCLDJCQUEyQixFQUMzQiwrQkFBK0IsRUFDL0IsNkJBQTZCLEVBQzdCLCtCQUErQixFQUMvQixnQ0FBZ0MsRUFDaEMsaUNBQWlDLEdBQ2xDLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXpFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxtR0FBbUc7QUFDbkcsT0FBTyxFQUNMLHlCQUF5QixFQUN6QixvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3JCLE1BQU0sd0JBQXdCLENBQUM7QUE4R2hDOztHQUVHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxRQUF5QixFQUFFLFNBQWlCO0lBQ3ZFLE9BQU87UUFDTCxHQUFHLFFBQVE7UUFDWCxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLEdBQUcsQ0FBQztZQUNKLElBQUksRUFBRSxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFO1NBQzlCLENBQUMsQ0FBQztLQUNKLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxhQUFhLENBQUMsT0FBMkIsRUFBRSxJQUF1QjtJQUN0RixNQUFNLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBRWxDLElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQztRQUUxRSxNQUFNLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxHQUFHLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWpFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQixPQUFPO2dCQUNMLE9BQU8sRUFBRSxDQUFDO3dCQUNSLElBQUksRUFBRSxNQUFNO3dCQUNaLElBQUksRUFBRSwyQkFBMkIsSUFBSSxtQkFBbUIsMkJBQTJCLEVBQUUsRUFBRTtxQkFDeEYsQ0FBQzthQUNILENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMvRSxNQUFNLG9CQUFvQixHQUFHLGFBQWEsQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFFbkcsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQztnQkFDSCxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDbkUsQ0FBQztZQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7Z0JBQ3BCLE9BQU87b0JBQ0wsT0FBTyxFQUFFLENBQUM7NEJBQ1IsSUFBSSxFQUFFLE1BQU07NEJBQ1osSUFBSSxFQUFFLHdCQUF3QixLQUFLLENBQUMsT0FBTyw2QkFBNkIsZUFBZSxDQUFDLGtCQUFrQixnQkFBZ0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLE1BQU07eUJBQ3RMLENBQUM7aUJBQ0gsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBRUQsaUZBQWlGO1FBQ2pGLGtGQUFrRjtRQUNsRiwyRUFBMkU7UUFDM0UsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUM7Z0JBQ0gsbUJBQW1CLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3hFLENBQUM7WUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO2dCQUNwQixPQUFPO29CQUNMLE9BQU8sRUFBRSxDQUFDOzRCQUNSLElBQUksRUFBRSxNQUFNOzRCQUNaLElBQUksRUFBRSw2QkFBNkIsS0FBSyxDQUFDLE9BQU8sNkJBQTZCLGVBQWUsQ0FBQyxrQkFBa0IsY0FBYzt5QkFDOUgsQ0FBQztpQkFDSCxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCwrRUFBK0U7UUFDL0UsMEZBQTBGO1FBQzFGLE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTdDLE1BQU0sZ0JBQWdCLEdBQUcsZ0NBQWdDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2xGLElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hDLE9BQU8seUJBQXlCLENBQUMsaUNBQWlDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLENBQUM7UUFFRCx5RUFBeUU7UUFDekUsZ0lBQWdJO1FBQ2hJLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDbkgsSUFBSSxTQUFTLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUM3RCxJQUFJLENBQUM7Z0JBQ0gsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLFFBQWtCLENBQUMsQ0FBQztZQUNqRCxDQUFDO1lBQUMsT0FBTyxhQUFrQixFQUFFLENBQUM7Z0JBQzVCLE9BQU8seUJBQXlCLENBQzlCLHFCQUFxQixTQUFTLENBQUMsUUFBUSxNQUFNLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FDckUsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBRUQsNEVBQTRFO1FBQzVFLE1BQU0sdUJBQXVCLEdBQUcsK0JBQStCLENBQzdELGNBQWMsRUFDZCxRQUFtQyxDQUNwQyxDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQUcsNkJBQTZCLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUUzRSwyRUFBMkU7UUFDM0UsSUFBSSx1QkFBdUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkMsTUFBTSxDQUFDLElBQUksQ0FBQyxzREFBc0QsRUFBRTtnQkFDbEUsV0FBVyxFQUFFLGNBQWM7Z0JBQzNCLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixZQUFZLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtnQkFDNUMsaUJBQWlCLEVBQUUsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDbkQsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRO29CQUNwQixVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVU7aUJBQ3pCLENBQUMsQ0FBQzthQUNKLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxRQUFRLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLEtBQUssV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLElBQUksQ0FBQztvQkFDSCx3RUFBd0U7b0JBQ3hFLE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7d0JBQ2xELEdBQUcsU0FBUzt3QkFDWixJQUFJLEVBQUUsYUFBYTt3QkFDbkIsV0FBVyxFQUFFLG9CQUFvQjt3QkFDakMsWUFBWSxFQUFFLFlBQVk7d0JBQzFCLE9BQU8sRUFBRSxPQUFPO3FCQUNqQixDQUFDLENBQUM7b0JBRUgsTUFBTSxVQUFVLEdBQUcsR0FBRyxXQUFXLHNCQUFzQixPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksZ0JBQWdCLENBQUM7b0JBQzdGLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEdBQUcsVUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hHLENBQUM7Z0JBQUMsT0FBTyxZQUFZLEVBQUUsQ0FBQztvQkFDdEIsTUFBTSxPQUFPLEdBQUcsWUFBWSxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUM1RixJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsMkJBQTJCLENBQUMsRUFBRSxDQUFDO3dCQUNsRCxPQUFPLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUM1QyxDQUFDO29CQUNELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7d0JBQ3RELENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQzt3QkFDMUQsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztvQkFDckYsT0FBTyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztnQkFDM0UsQ0FBQztZQUNILENBQUM7WUFFRCxLQUFLLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUN2Qiw0REFBNEQ7Z0JBQzVELElBQUksQ0FBQztvQkFDSCxNQUFNLEtBQUssR0FBRyxNQUFNLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO3dCQUM5QyxJQUFJLEVBQUUsYUFBYTt3QkFDbkIsV0FBVyxFQUFFLG9CQUFvQjt3QkFDakMsR0FBRyxTQUFTO3dCQUNaLFlBQVksRUFBRSxZQUFZO3dCQUMxQixPQUFPLEVBQUUsT0FBTyxJQUFJLEVBQUU7cUJBQ3ZCLENBQUMsQ0FBQztvQkFDSCxNQUFNLFVBQVUsR0FBRyxHQUFHLFdBQVcsb0JBQW9CLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQztvQkFDekYsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxVQUFVLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDaEcsQ0FBQztnQkFBQyxPQUFPLFVBQVUsRUFBRSxDQUFDO29CQUNwQixrQ0FBa0M7b0JBQ2xDLE1BQU0sT0FBTyxHQUFHLFVBQVUsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDdEYsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQzt3QkFDdEQsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDO3dCQUN4RCxDQUFDLENBQUMsb0JBQW9CLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO29CQUNqRixPQUFPLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO2dCQUMzRSxDQUFDO1lBQ0gsQ0FBQztZQUVELEtBQUssV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQzFCLCtEQUErRDtnQkFDL0QsSUFBSSxDQUFDO29CQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUM7d0JBQ3BELElBQUksRUFBRSxhQUFhO3dCQUNuQixXQUFXLEVBQUUsb0JBQW9CO3dCQUNqQyxZQUFZLEVBQUUsWUFBWTt3QkFDMUIsT0FBTyxFQUFFLE9BQU8sSUFBSSxFQUFFO3dCQUN0QixRQUFRLEVBQUUsU0FBUztxQkFDcEIsQ0FBQyxDQUFDO29CQUNILE1BQU0sVUFBVSxHQUFHLEdBQUcsV0FBVyx1QkFBdUIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLGdCQUFnQixDQUFDO29CQUMvRixPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLFVBQVUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNoRyxDQUFDO2dCQUFDLE9BQU8sYUFBYSxFQUFFLENBQUM7b0JBQ3ZCLGtDQUFrQztvQkFDbEMsTUFBTSxPQUFPLEdBQUcsYUFBYSxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUMvRixNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDO3dCQUN0RCxDQUFDLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUM7d0JBQzNELENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7b0JBQ3ZGLE9BQU8sbUJBQW1CLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7Z0JBQzNFLENBQUM7WUFDSCxDQUFDO1lBRUQsS0FBSyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDdkIsd0VBQXdFO2dCQUN4RSwwRUFBMEU7Z0JBQzFFLElBQUksQ0FBQztvQkFDSCw2RUFBNkU7b0JBQzdFLGdGQUFnRjtvQkFDaEYsMkVBQTJFO29CQUMzRSxNQUFNLGlCQUFpQixHQUFHLFlBQVksSUFBSSxFQUFFLENBQUM7b0JBQzdDLE1BQU0sWUFBWSxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7b0JBQ25DLE1BQU0sS0FBSyxHQUFHLE1BQU0sT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQzdDLGFBQWEsRUFDYixvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLEVBQUUsR0FBRyxTQUFTLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxDQUN4QyxDQUFDO29CQUNGLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUNsQixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQzs0QkFDeEYsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPOzRCQUNmLENBQUMsQ0FBQyxrQkFBa0IsYUFBYSxnQkFBZ0IsQ0FBQzt3QkFDcEQsTUFBTSxVQUFVLEdBQUcsR0FBRyxXQUFXLEtBQUssV0FBVyxFQUFFLENBQUM7d0JBQ3BELE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEdBQUcsVUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQ2hHLENBQUM7b0JBQ0Qsc0ZBQXNGO29CQUN0RixNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLGVBQWUsQ0FBQztvQkFDdkQsT0FBTyx5QkFBeUIsQ0FBQywyQkFBMkIsYUFBYSxFQUFFLENBQUMsQ0FBQztnQkFDL0UsQ0FBQztnQkFBQyxPQUFPLFVBQVUsRUFBRSxDQUFDO29CQUNwQixNQUFNLE9BQU8sR0FBRyxVQUFVLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ3RGLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7d0JBQ3RELENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQzt3QkFDeEQsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztvQkFDakYsT0FBTyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztnQkFDM0UsQ0FBQztZQUNILENBQUM7WUFFRCxLQUFLLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUN4QixJQUFJLENBQUM7b0JBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQzt3QkFDaEQsR0FBRyxTQUFTO3dCQUNaLElBQUksRUFBRSxhQUFhO3dCQUNuQixXQUFXLEVBQUUsb0JBQW9CO3dCQUNqQyxPQUFPLEVBQUUsT0FBTzt3QkFDaEIsWUFBWSxFQUFFLFlBQVk7cUJBQzNCLENBQUMsQ0FBQztvQkFDSCxNQUFNLFVBQVUsR0FBRyxHQUFHLFdBQVcscUJBQXFCLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQztvQkFDM0YsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxVQUFVLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDaEcsQ0FBQztnQkFBQyxPQUFPLFdBQVcsRUFBRSxDQUFDO29CQUNyQixNQUFNLE9BQU8sR0FBRyxXQUFXLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ3pGLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7d0JBQ3RELENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQzt3QkFDekQsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztvQkFDbkYsT0FBTyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztnQkFDM0UsQ0FBQztZQUNILENBQUM7WUFFRCxLQUFLLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixJQUFJLENBQUM7b0JBQ0gsOEVBQThFO29CQUM5RSxNQUFNLGdCQUFnQixHQUFHLE1BQU0sbUJBQW1CLENBQ2hELFNBQVMsQ0FBQyxRQUFRLElBQUksRUFBRSxFQUN4Qjt3QkFDRSxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVk7d0JBQ2xDLGVBQWUsRUFBRSxPQUFPLENBQUMsZUFBZTt3QkFDeEMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO3dCQUNsQyxhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQWE7d0JBQ3BDLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYzt3QkFDdEMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxlQUFlO3FCQUN6QyxDQUNGLENBQUM7b0JBQ0YsTUFBTSxxQkFBcUIsR0FBRywrQkFBK0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO29CQUVoRixNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDO3dCQUNwRCxHQUFHLFNBQVM7d0JBQ1osSUFBSSxFQUFFLGFBQWE7d0JBQ25CLFdBQVcsRUFBRSxvQkFBb0I7d0JBQ2pDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRO3dCQUNuQyxZQUFZLEVBQUUsWUFBWTt3QkFDMUIsT0FBTyxFQUFFLE9BQU87cUJBQ2pCLENBQUMsQ0FBQztvQkFDSCxNQUFNLFVBQVUsR0FBRyxHQUFHLFdBQVcsR0FBRyxxQkFBcUIsdUJBQXVCLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQztvQkFDdkgsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxVQUFVLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDaEcsQ0FBQztnQkFBQyxPQUFPLGFBQWEsRUFBRSxDQUFDO29CQUN2QixNQUFNLE9BQU8sR0FBRyxhQUFhLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQy9GLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7d0JBQ3RELENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQzt3QkFDM0QsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztvQkFDdkYsT0FBTyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztnQkFDM0UsQ0FBQztZQUNILENBQUM7WUFFRDtnQkFDRSxPQUFPO29CQUNMLE9BQU8sRUFBRSxDQUFDOzRCQUNSLElBQUksRUFBRSxNQUFNOzRCQUNaLElBQUksRUFBRSxtQkFBbUIsSUFBSSxxQ0FBcUM7eUJBQ25FLENBQUM7aUJBQ0gsQ0FBQztRQUNOLENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0NBQWtDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEQsTUFBTSxPQUFPLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO1FBQ3pFLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ2hELE9BQU87WUFDTCxPQUFPLEVBQUUsQ0FBQztvQkFDUixJQUFJLEVBQUUsTUFBTTtvQkFDWixJQUFJLEVBQUUsR0FBRyxTQUFTLCtCQUErQixPQUFPLEVBQUU7aUJBQzNELENBQUM7U0FDSCxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZJWDogRE1DUC1TRUMtMDA2IC0gU2VjdXJpdHkgYXVkaXQgc3VwcHJlc3Npb25cbiAqIFRoaXMgZmlsZSBkZWxlZ2F0ZXMgZWxlbWVudCBjcmVhdGlvbiB0byBzcGVjaWFsaXplZCBtYW5hZ2Vycy5cbiAqIEF1ZGl0IGxvZ2dpbmcgaGFwcGVucyBpbiB0aGUgbWFuYWdlcnMgdGhlbXNlbHZlcyAoUGVyc29uYU1hbmFnZXIsIFNraWxsTWFuYWdlciwgZXRjLikuXG4gKiBAc2VjdXJpdHktYXVkaXQtc3VwcHJlc3MgRE1DUC1TRUMtMDA2XG4gKi9cblxuaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tICcuLi8uLi9wb3J0Zm9saW8vUG9ydGZvbGlvTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBTRUNVUklUWV9MSU1JVFMgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgc2FuaXRpemVJbnB1dCwgdmFsaWRhdGVDb250ZW50U2l6ZSwgdmFsaWRhdGVDYXRlZ29yeSB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L0lucHV0VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7XG4gIHNhbml0aXplTWV0YWRhdGEsXG4gIG5vcm1hbGl6ZUVsZW1lbnRUeXBlSW5wdXQsXG4gIGZvcm1hdFZhbGlkRWxlbWVudFR5cGVzTGlzdCxcbiAgZGV0ZWN0VW5rbm93bk1ldGFkYXRhUHJvcGVydGllcyxcbiAgZm9ybWF0VW5rbm93blByb3BlcnR5V2FybmluZ3MsXG4gIGZvcm1hdEVsZW1lbnRSZXNvbHV0aW9uV2FybmluZ3MsXG4gIGNvbGxlY3RHYXRla2VlcGVyQXV0aG9yaW5nRXJyb3JzLFxuICBmb3JtYXRHYXRla2VlcGVyVmFsaWRhdGlvbk1lc3NhZ2UsXG59IGZyb20gJy4vaGVscGVycy5qcyc7XG5pbXBvcnQgeyByZXNvbHZlRWxlbWVudFR5cGVzIH0gZnJvbSAnLi4vLi4vdXRpbHMvZWxlbWVudFR5cGVSZXNvbHZlci5qcyc7XG5pbXBvcnQgeyBFbGVtZW50Q3J1ZENvbnRleHQgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG4vLyBGSVg6IElzc3VlICMyODEgLSBTZWN1cml0eU1vbml0b3IgaW1wb3J0IHJlbW92ZWQsIHBlcnNvbmEgbG9nZ2luZyBub3cgaW4gUGVyc29uYU1hbmFnZXIuY3JlYXRlKClcbmltcG9ydCB7XG4gIGZvcm1hdFNpbXBsZUVycm9yUmVzcG9uc2UsXG4gIGZvcm1hdER1cGxpY2F0ZUVycm9yLFxuICBmb3JtYXRFeGNlcHRpb25FcnJvclxufSBmcm9tICcuL3Jlc3BvbnNlRm9ybWF0dGVyLmpzJztcbmltcG9ydCB0eXBlIHsgTWNwVG9vbFJlc3BvbnNlIH0gZnJvbSAnLi9yZXNwb25zZUZvcm1hdHRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IEVuc2VtYmxlRWxlbWVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL2Vuc2VtYmxlcy90eXBlcy5qcyc7XG5cbi8qKlxuICogQXJndW1lbnRzIGZvciBjcmVhdGluZyBhIG5ldyBlbGVtZW50LlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYSBwZXJzb25hXG4gKiB7IG5hbWU6ICdoZWxwZXInLCB0eXBlOiAncGVyc29uYScsIGRlc2NyaXB0aW9uOiAnQSBoZWxwZnVsIGFzc2lzdGFudCcsIGluc3RydWN0aW9uczogJ0JlIGhlbHBmdWwnIH1cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGFuIGVuc2VtYmxlIHdpdGggZWxlbWVudHNcbiAqIHtcbiAqICAgbmFtZTogJ215LWVuc2VtYmxlJyxcbiAqICAgdHlwZTogJ2Vuc2VtYmxlJyxcbiAqICAgZGVzY3JpcHRpb246ICdBIGNvb3JkaW5hdGVkIGdyb3VwJyxcbiAqICAgZWxlbWVudHM6IFt7IG5hbWU6ICdza2lsbDEnLCB0eXBlOiAnc2tpbGwnLCByb2xlOiAncHJpbWFyeScsIHByaW9yaXR5OiAxMDAsIGFjdGl2YXRpb246ICdhbHdheXMnIH1dXG4gKiB9XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0ZSBhIFYyIGFnZW50IHdpdGggZ29hbCBjb25maWd1cmF0aW9uXG4gKiB7XG4gKiAgIG5hbWU6ICd0YXNrLXJ1bm5lcicsXG4gKiAgIHR5cGU6ICdhZ2VudCcsXG4gKiAgIGRlc2NyaXB0aW9uOiAnRXhlY3V0ZXMgdGFza3MgYXV0b25vbW91c2x5JyxcbiAqICAgZ29hbDoge1xuICogICAgIHRlbXBsYXRlOiAnQ29tcGxldGUgdGhlIGZvbGxvd2luZyB0YXNrOiB7b2JqZWN0aXZlfScsXG4gKiAgICAgcGFyYW1ldGVyczogW3sgbmFtZTogJ29iamVjdGl2ZScsIHR5cGU6ICdzdHJpbmcnLCByZXF1aXJlZDogdHJ1ZSB9XSxcbiAqICAgICBzdWNjZXNzQ3JpdGVyaWE6IFsnVGFzayBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5JywgJ1Jlc3VsdHMgZG9jdW1lbnRlZCddXG4gKiAgIH0sXG4gKiAgIGFjdGl2YXRlczogeyBza2lsbHM6IFsnY29kZS1yZXZpZXcnXSwgcGVyc29uYXM6IFsnZGV2ZWxvcGVyJ10gfVxuICogfVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUVsZW1lbnRBcmdzIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIC8qKiBSZWZlcmVuY2UgbWF0ZXJpYWwsIGtub3dsZWRnZSwgY29udGV4dCAoaW5mb3JtYXRpb25hbCkuIEZvciB0ZW1wbGF0ZXM6IHRlbXBsYXRlIGJvZHkuICovXG4gIGNvbnRlbnQ/OiBzdHJpbmc7XG4gIC8qKiBCZWhhdmlvcmFsIGRpcmVjdGl2ZXMgKGNvbW1hbmQgdm9pY2UpLiBGb3IgcGVyc29uYXM6IGJlaGF2aW9yYWwgcHJvZmlsZS4gRm9yIHNraWxsczogaG93IHRvIGFwcGx5LiBGb3IgYWdlbnRzOiBhZ2VudCBiZWhhdmlvcmFsIHByb3RvY29sLiAqL1xuICBpbnN0cnVjdGlvbnM/OiBzdHJpbmc7XG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKlxuICAgKiBGb3IgZW5zZW1ibGVzIC0gYXJyYXkgb2YgZWxlbWVudCByZWZlcmVuY2VzLlxuICAgKiBJc3N1ZSAjMjc4OiBMTE1zIG9mdGVuIHBhc3MgZWxlbWVudHMgYXQgdG9wIGxldmVsLCBub3QgaW5zaWRlIG1ldGFkYXRhLlxuICAgKi9cbiAgZWxlbWVudHM/OiBFbnNlbWJsZUVsZW1lbnRbXTtcblxuICAvLyBWMiBBZ2VudCBmaWVsZHMgKGNhbiBhbHNvIGJlIHBhc3NlZCBpbiBtZXRhZGF0YSlcbiAgLyoqXG4gICAqIEZvciBWMiBhZ2VudHMgLSBnb2FsIGNvbmZpZ3VyYXRpb24gd2l0aCB0ZW1wbGF0ZSBhbmQgcGFyYW1ldGVycy5cbiAgICogQ2FuIGJlIHBhc3NlZCBhcyBhIHNpbXBsZSBzdHJpbmcgKHdpbGwgYmUgY29udmVydGVkIHRvIFYyIGZvcm1hdClcbiAgICogb3IgYXMgYSBmdWxsIFYyIGNvbmZpZyBvYmplY3QuXG4gICAqXG4gICAqIEBzaW5jZSB2Mi4wLjAgLSBBZ2VudCBWMiBJbmZyYXN0cnVjdHVyZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBTaW1wbGUgc3RyaW5nIGdvYWwgKGF1dG8tY29udmVydGVkIHRvIFYyIGZvcm1hdClcbiAgICogZ29hbDogJ0NvbXBsZXRlIHRoZSBhbmFseXNpcyB0YXNrJ1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBGdWxsIFYyIGNvbmZpZyB3aXRoIHBhcmFtZXRlcnNcbiAgICogZ29hbDoge1xuICAgKiAgIHRlbXBsYXRlOiAnQW5hbHl6ZSB7dGFyZ2V0fSBmb3Ige3B1cnBvc2V9JyxcbiAgICogICBwYXJhbWV0ZXJzOiBbXG4gICAqICAgICB7IG5hbWU6ICd0YXJnZXQnLCB0eXBlOiAnc3RyaW5nJywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICogICAgIHsgbmFtZTogJ3B1cnBvc2UnLCB0eXBlOiAnc3RyaW5nJywgcmVxdWlyZWQ6IHRydWUgfVxuICAgKiAgIF0sXG4gICAqICAgc3VjY2Vzc0NyaXRlcmlhOiBbJ0FuYWx5c2lzIGNvbXBsZXRlJywgJ1JlcG9ydCBnZW5lcmF0ZWQnXVxuICAgKiB9XG4gICAqL1xuICBnb2FsPzogc3RyaW5nIHwge1xuICAgIHRlbXBsYXRlOiBzdHJpbmc7XG4gICAgcGFyYW1ldGVycz86IEFycmF5PHtcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIHR5cGU6ICdzdHJpbmcnIHwgJ251bWJlcicgfCAnYm9vbGVhbic7XG4gICAgICByZXF1aXJlZDogYm9vbGVhbjtcbiAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgICAgZGVmYXVsdD86IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW47XG4gICAgfT47XG4gICAgc3VjY2Vzc0NyaXRlcmlhPzogc3RyaW5nW107XG4gIH07XG4gIC8qKlxuICAgKiBGb3IgVjIgYWdlbnRzIC0gZWxlbWVudHMgdG8gYWN0aXZhdGUgd2hlbiBhZ2VudCBleGVjdXRlcy5cbiAgICogQHNpbmNlIHYyLjAuMCAtIEFnZW50IFYyIEluZnJhc3RydWN0dXJlXG4gICAqL1xuICBhY3RpdmF0ZXM/OiB7XG4gICAgcGVyc29uYXM/OiBzdHJpbmdbXTtcbiAgICBza2lsbHM/OiBzdHJpbmdbXTtcbiAgICBtZW1vcmllcz86IHN0cmluZ1tdO1xuICAgIHRlbXBsYXRlcz86IHN0cmluZ1tdO1xuICAgIGVuc2VtYmxlcz86IHN0cmluZ1tdO1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICB9O1xuICAvKipcbiAgICogRm9yIFYyIGFnZW50cyAtIHRvb2wgY29uZmlndXJhdGlvbiAoaW5mb3JtYXRpb25hbCkuXG4gICAqIEBzaW5jZSB2Mi4wLjAgLSBBZ2VudCBWMiBJbmZyYXN0cnVjdHVyZVxuICAgKi9cbiAgdG9vbHM/OiB7XG4gICAgYWxsb3dlZDogc3RyaW5nW107XG4gICAgZGVuaWVkPzogc3RyaW5nW107XG4gIH07XG4gIC8qKlxuICAgKiBGb3IgVjIgYWdlbnRzIC0gY3VzdG9tIHN5c3RlbSBwcm9tcHQgZm9yIExMTSBjb250ZXh0LlxuICAgKiBAc2luY2UgdjIuMC4wIC0gQWdlbnQgVjIgSW5mcmFzdHJ1Y3R1cmVcbiAgICovXG4gIHN5c3RlbVByb21wdD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBIZWxwZXIgdG8gYWRkIHBlcnNvbmEgaW5kaWNhdG9yIHByZWZpeCB0byByZXNwb25zZVxuICovXG5mdW5jdGlvbiBhZGRQZXJzb25hSW5kaWNhdG9yKHJlc3BvbnNlOiBNY3BUb29sUmVzcG9uc2UsIGluZGljYXRvcjogc3RyaW5nKSB7XG4gIHJldHVybiB7XG4gICAgLi4ucmVzcG9uc2UsXG4gICAgY29udGVudDogcmVzcG9uc2UuY29udGVudC5tYXAoYyA9PiAoe1xuICAgICAgLi4uYyxcbiAgICAgIHRleHQ6IGAke2luZGljYXRvcn0ke2MudGV4dH1gXG4gICAgfSkpXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVFbGVtZW50KGNvbnRleHQ6IEVsZW1lbnRDcnVkQ29udGV4dCwgYXJnczogQ3JlYXRlRWxlbWVudEFyZ3MpIHtcbiAgYXdhaXQgY29udGV4dC5lbnN1cmVJbml0aWFsaXplZCgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgeyBuYW1lLCB0eXBlLCBkZXNjcmlwdGlvbiwgY29udGVudCwgaW5zdHJ1Y3Rpb25zLCBtZXRhZGF0YSB9ID0gYXJncztcblxuICAgIGNvbnN0IHsgdHlwZTogbm9ybWFsaXplZFR5cGUgfSA9IG5vcm1hbGl6ZUVsZW1lbnRUeXBlSW5wdXQodHlwZSk7XG5cbiAgICBpZiAoIW5vcm1hbGl6ZWRUeXBlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgSW52YWxpZCBlbGVtZW50IHR5cGUgJyR7dHlwZX0nLiBWYWxpZCB0eXBlczogJHtmb3JtYXRWYWxpZEVsZW1lbnRUeXBlc0xpc3QoKX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkYXRlZE5hbWUgPSBzYW5pdGl6ZUlucHV0KG5hbWUsIFNFQ1VSSVRZX0xJTUlUUy5NQVhfRklMRU5BTUVfTEVOR1RIKTtcbiAgICBjb25zdCB2YWxpZGF0ZWREZXNjcmlwdGlvbiA9IHNhbml0aXplSW5wdXQoZGVzY3JpcHRpb24sIFNFQ1VSSVRZX0xJTUlUUy5NQVhfTUVUQURBVEFfRklFTERfTEVOR1RIKTtcblxuICAgIGlmIChjb250ZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YWxpZGF0ZUNvbnRlbnRTaXplKGNvbnRlbnQsIFNFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGDinYwgQ29udGVudCB0b28gbGFyZ2U6ICR7ZXJyb3IubWVzc2FnZX0uIE1heGltdW0gYWxsb3dlZCBzaXplIGlzICR7U0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSH0gY2hhcmFjdGVycyAoJHtNYXRoLmZsb29yKFNFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEggLyAxMDI0KX1LQikuYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSXNzdWUgIzYwMiByZXNvbHZlZDogQm90aCAnaW5zdHJ1Y3Rpb25zJyBhbmQgJ2NvbnRlbnQnIGFyZSBmaXJzdC1jbGFzcyBmaWVsZHMuXG4gICAgLy8gaW5zdHJ1Y3Rpb25zID0gYmVoYXZpb3JhbCBkaXJlY3RpdmVzIChjb21tYW5kIHZvaWNlLCBcIllvdSBBUkUuLi5cIiwgXCJBTFdBWVMuLi5cIilcbiAgICAvLyBjb250ZW50ID0gcmVmZXJlbmNlIG1hdGVyaWFsIChpbmZvcm1hdGlvbmFsLCBkb21haW4ga25vd2xlZGdlLCBleGFtcGxlcylcbiAgICBpZiAoaW5zdHJ1Y3Rpb25zKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YWxpZGF0ZUNvbnRlbnRTaXplKGluc3RydWN0aW9ucywgU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSCk7XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCBJbnN0cnVjdGlvbnMgdG9vIGxhcmdlOiAke2Vycm9yLm1lc3NhZ2V9LiBNYXhpbXVtIGFsbG93ZWQgc2l6ZSBpcyAke1NFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEh9IGNoYXJhY3RlcnMuYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRWxlbWVudC1zcGVjaWZpYyBmaWVsZHMgKGVuc2VtYmxlIGVsZW1lbnRzLCBhZ2VudCBWMiBmaWVsZHMpIGFyZSBtZXJnZWQgaW50b1xuICAgIC8vIG1ldGFkYXRhIGJ5IHRoZSBkaXNwYXRjaGVyIChNQ1BBUUxIYW5kbGVyKS4gY3JlYXRlRWxlbWVudCBqdXN0IHNhbml0aXplcyBhbmQgZGVsZWdhdGVzLlxuICAgIGNvbnN0IHNhbml0aXplZCA9IHNhbml0aXplTWV0YWRhdGEobWV0YWRhdGEpO1xuXG4gICAgY29uc3QgZ2F0ZWtlZXBlckVycm9ycyA9IGNvbGxlY3RHYXRla2VlcGVyQXV0aG9yaW5nRXJyb3JzKHsgLi4uYXJncyB9LCBzYW5pdGl6ZWQpO1xuICAgIGlmIChnYXRla2VlcGVyRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBmb3JtYXRTaW1wbGVFcnJvclJlc3BvbnNlKGZvcm1hdEdhdGVrZWVwZXJWYWxpZGF0aW9uTWVzc2FnZShnYXRla2VlcGVyRXJyb3JzKSk7XG4gICAgfVxuXG4gICAgLy8gSXNzdWUgIzYyMTogVmFsaWRhdGUgY2F0ZWdvcnkgZm9ybWF0IGZvciBlbGVtZW50IHR5cGVzIHRoYXQgc3VwcG9ydCBpdFxuICAgIC8vIFBlcnNvbmEgYWxzbyBzdXBwb3J0cyBjYXRlZ29yaWVzICh2YWxpZGF0ZWQgaW50ZXJuYWxseSBieSBQZXJzb25hTWFuYWdlcikg4oCUIGluY2x1ZGUgaGVyZSBmb3IgY29uc2lzdGVudCBlYXJseSBlcnJvciByZXBvcnRpbmdcbiAgICBjb25zdCBDQVRFR09SWV9UWVBFUyA9IG5ldyBTZXQoW0VsZW1lbnRUeXBlLlBFUlNPTkEsIEVsZW1lbnRUeXBlLlNLSUxMLCBFbGVtZW50VHlwZS5URU1QTEFURSwgRWxlbWVudFR5cGUuTUVNT1JZXSk7XG4gICAgaWYgKHNhbml0aXplZC5jYXRlZ29yeSAmJiBDQVRFR09SWV9UWVBFUy5oYXMobm9ybWFsaXplZFR5cGUpKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YWxpZGF0ZUNhdGVnb3J5KHNhbml0aXplZC5jYXRlZ29yeSBhcyBzdHJpbmcpO1xuICAgICAgfSBjYXRjaCAoY2F0ZWdvcnlFcnJvcjogYW55KSB7XG4gICAgICAgIHJldHVybiBmb3JtYXRTaW1wbGVFcnJvclJlc3BvbnNlKFxuICAgICAgICAgIGBJbnZhbGlkIGNhdGVnb3J5ICcke3Nhbml0aXplZC5jYXRlZ29yeX0nOiAke2NhdGVnb3J5RXJyb3IubWVzc2FnZX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGV0ZWN0IHVua25vd24gbWV0YWRhdGEgcHJvcGVydGllcyBhbmQgZ2VuZXJhdGUgd2FybmluZ3MgZm9yIExMTSBmZWVkYmFja1xuICAgIGNvbnN0IHVua25vd25Qcm9wZXJ0eVdhcm5pbmdzID0gZGV0ZWN0VW5rbm93bk1ldGFkYXRhUHJvcGVydGllcyhcbiAgICAgIG5vcm1hbGl6ZWRUeXBlLFxuICAgICAgbWV0YWRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICApO1xuICAgIGNvbnN0IHdhcm5pbmdUZXh0ID0gZm9ybWF0VW5rbm93blByb3BlcnR5V2FybmluZ3ModW5rbm93blByb3BlcnR5V2FybmluZ3MpO1xuXG4gICAgLy8gTG9nIHdhcm5pbmdzIGZvciBkZWJ1Z2dpbmcgd2l0aCBzdHJ1Y3R1cmVkIGRhdGEgZm9yIGJldHRlciBvYnNlcnZhYmlsaXR5XG4gICAgaWYgKHVua25vd25Qcm9wZXJ0eVdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxvZ2dlci53YXJuKGBbY3JlYXRlRWxlbWVudF0gVW5rbm93biBtZXRhZGF0YSBwcm9wZXJ0aWVzIGRldGVjdGVkYCwge1xuICAgICAgICBlbGVtZW50VHlwZTogbm9ybWFsaXplZFR5cGUsXG4gICAgICAgIGVsZW1lbnROYW1lOiBuYW1lLFxuICAgICAgICB3YXJuaW5nQ291bnQ6IHVua25vd25Qcm9wZXJ0eVdhcm5pbmdzLmxlbmd0aCxcbiAgICAgICAgdW5rbm93blByb3BlcnRpZXM6IHVua25vd25Qcm9wZXJ0eVdhcm5pbmdzLm1hcCh3ID0+ICh7XG4gICAgICAgICAgcHJvcGVydHk6IHcucHJvcGVydHksXG4gICAgICAgICAgc3VnZ2VzdGlvbjogdy5zdWdnZXN0aW9uXG4gICAgICAgIH0pKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChub3JtYWxpemVkVHlwZSkge1xuICAgICAgY2FzZSBFbGVtZW50VHlwZS5QRVJTT05BOiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gSXNzdWUgIzYwMjogQm90aCAnaW5zdHJ1Y3Rpb25zJyBhbmQgJ2NvbnRlbnQnIGFyZSBmaXJzdC1jbGFzcyBmaWVsZHMuXG4gICAgICAgICAgY29uc3QgcGVyc29uYSA9IGF3YWl0IGNvbnRleHQucGVyc29uYU1hbmFnZXIuY3JlYXRlKHtcbiAgICAgICAgICAgIC4uLnNhbml0aXplZCxcbiAgICAgICAgICAgIG5hbWU6IHZhbGlkYXRlZE5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogdmFsaWRhdGVkRGVzY3JpcHRpb24sXG4gICAgICAgICAgICBpbnN0cnVjdGlvbnM6IGluc3RydWN0aW9ucyxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBzdWNjZXNzTXNnID0gYCR7d2FybmluZ1RleHR94pyFIENyZWF0ZWQgcGVyc29uYSAnJHtwZXJzb25hLm1ldGFkYXRhLm5hbWV9JyBzdWNjZXNzZnVsbHlgO1xuICAgICAgICAgIHJldHVybiB7IGNvbnRlbnQ6IFt7IHR5cGU6IFwidGV4dFwiLCB0ZXh0OiBgJHtjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKX0ke3N1Y2Nlc3NNc2d9YCB9XSB9O1xuICAgICAgICB9IGNhdGNoIChwZXJzb25hRXJyb3IpIHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gcGVyc29uYUVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBwZXJzb25hRXJyb3IubWVzc2FnZSA6IFN0cmluZyhwZXJzb25hRXJyb3IpO1xuICAgICAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKCdpbnN0cnVjdGlvbnMgYXJlIHJlcXVpcmVkJykpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRTaW1wbGVFcnJvclJlc3BvbnNlKG1lc3NhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBlcnJvclJlc3BvbnNlID0gbWVzc2FnZS5pbmNsdWRlcygnYWxyZWFkeSBleGlzdHMnKVxuICAgICAgICAgICAgPyBmb3JtYXREdXBsaWNhdGVFcnJvcihFbGVtZW50VHlwZS5QRVJTT05BLCB2YWxpZGF0ZWROYW1lKVxuICAgICAgICAgICAgOiBmb3JtYXRFeGNlcHRpb25FcnJvcihwZXJzb25hRXJyb3IsICdjcmVhdGUnLCBFbGVtZW50VHlwZS5QRVJTT05BLCB2YWxpZGF0ZWROYW1lKTtcbiAgICAgICAgICByZXR1cm4gYWRkUGVyc29uYUluZGljYXRvcihlcnJvclJlc3BvbnNlLCBjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2FzZSBFbGVtZW50VHlwZS5TS0lMTDoge1xuICAgICAgICAvLyBGSVg6IElzc3VlICMyMCAtIENhdGNoIGR1cGxpY2F0ZSBlcnJvcnMgZnJvbSBTa2lsbE1hbmFnZXJcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBza2lsbCA9IGF3YWl0IGNvbnRleHQuc2tpbGxNYW5hZ2VyLmNyZWF0ZSh7XG4gICAgICAgICAgICBuYW1lOiB2YWxpZGF0ZWROYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHZhbGlkYXRlZERlc2NyaXB0aW9uLFxuICAgICAgICAgICAgLi4uc2FuaXRpemVkLFxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zOiBpbnN0cnVjdGlvbnMsXG4gICAgICAgICAgICBjb250ZW50OiBjb250ZW50IHx8ICcnXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3Qgc3VjY2Vzc01zZyA9IGAke3dhcm5pbmdUZXh0feKchSBDcmVhdGVkIHNraWxsICcke3NraWxsLm1ldGFkYXRhLm5hbWV9JyBzdWNjZXNzZnVsbHlgO1xuICAgICAgICAgIHJldHVybiB7IGNvbnRlbnQ6IFt7IHR5cGU6IFwidGV4dFwiLCB0ZXh0OiBgJHtjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKX0ke3N1Y2Nlc3NNc2d9YCB9XSB9O1xuICAgICAgICB9IGNhdGNoIChza2lsbEVycm9yKSB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBhIGR1cGxpY2F0ZSBlcnJvclxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBza2lsbEVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBza2lsbEVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoc2tpbGxFcnJvcik7XG4gICAgICAgICAgY29uc3QgZXJyb3JSZXNwb25zZSA9IG1lc3NhZ2UuaW5jbHVkZXMoJ2FscmVhZHkgZXhpc3RzJylcbiAgICAgICAgICAgID8gZm9ybWF0RHVwbGljYXRlRXJyb3IoRWxlbWVudFR5cGUuU0tJTEwsIHZhbGlkYXRlZE5hbWUpXG4gICAgICAgICAgICA6IGZvcm1hdEV4Y2VwdGlvbkVycm9yKHNraWxsRXJyb3IsICdjcmVhdGUnLCBFbGVtZW50VHlwZS5TS0lMTCwgdmFsaWRhdGVkTmFtZSk7XG4gICAgICAgICAgcmV0dXJuIGFkZFBlcnNvbmFJbmRpY2F0b3IoZXJyb3JSZXNwb25zZSwgY29udGV4dC5nZXRQZXJzb25hSW5kaWNhdG9yKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6IHtcbiAgICAgICAgLy8gRklYOiBJc3N1ZSAjMjAgLSBDYXRjaCBkdXBsaWNhdGUgZXJyb3JzIGZyb20gVGVtcGxhdGVNYW5hZ2VyXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBhd2FpdCBjb250ZXh0LnRlbXBsYXRlTWFuYWdlci5jcmVhdGUoe1xuICAgICAgICAgICAgbmFtZTogdmFsaWRhdGVkTmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB2YWxpZGF0ZWREZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGluc3RydWN0aW9uczogaW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgICAgY29udGVudDogY29udGVudCB8fCAnJyxcbiAgICAgICAgICAgIG1ldGFkYXRhOiBzYW5pdGl6ZWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3Qgc3VjY2Vzc01zZyA9IGAke3dhcm5pbmdUZXh0feKchSBDcmVhdGVkIHRlbXBsYXRlICcke3RlbXBsYXRlLm1ldGFkYXRhLm5hbWV9JyBzdWNjZXNzZnVsbHlgO1xuICAgICAgICAgIHJldHVybiB7IGNvbnRlbnQ6IFt7IHR5cGU6IFwidGV4dFwiLCB0ZXh0OiBgJHtjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKX0ke3N1Y2Nlc3NNc2d9YCB9XSB9O1xuICAgICAgICB9IGNhdGNoICh0ZW1wbGF0ZUVycm9yKSB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBhIGR1cGxpY2F0ZSBlcnJvclxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0ZW1wbGF0ZUVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyB0ZW1wbGF0ZUVycm9yLm1lc3NhZ2UgOiBTdHJpbmcodGVtcGxhdGVFcnJvcik7XG4gICAgICAgICAgY29uc3QgZXJyb3JSZXNwb25zZSA9IG1lc3NhZ2UuaW5jbHVkZXMoJ2FscmVhZHkgZXhpc3RzJylcbiAgICAgICAgICAgID8gZm9ybWF0RHVwbGljYXRlRXJyb3IoRWxlbWVudFR5cGUuVEVNUExBVEUsIHZhbGlkYXRlZE5hbWUpXG4gICAgICAgICAgICA6IGZvcm1hdEV4Y2VwdGlvbkVycm9yKHRlbXBsYXRlRXJyb3IsICdjcmVhdGUnLCBFbGVtZW50VHlwZS5URU1QTEFURSwgdmFsaWRhdGVkTmFtZSk7XG4gICAgICAgICAgcmV0dXJuIGFkZFBlcnNvbmFJbmRpY2F0b3IoZXJyb3JSZXNwb25zZSwgY29udGV4dC5nZXRQZXJzb25hSW5kaWNhdG9yKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6IHtcbiAgICAgICAgLy8gVjIgZmllbGRzIGFyZSBtZXJnZWQgaW50byBtZXRhZGF0YSBieSB0aGUgZGlzcGF0Y2hlciAoTUNQQVFMSGFuZGxlcikuXG4gICAgICAgIC8vIEdvYWwgbm9ybWFsaXphdGlvbiAoc3RyaW5n4oaSb2JqZWN0KSBpcyBoYW5kbGVkIGJ5IEFnZW50TWFuYWdlci5jcmVhdGUoKS5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBJc3N1ZSAjNzIyOiB2MiBkdWFsLWZpZWxkIGFyY2hpdGVjdHVyZSDigJQgZWFjaCBmaWVsZCBnb2VzIHdoZXJlIGl0IGJlbG9uZ3MuXG4gICAgICAgICAgLy8gQWdlbnRNYW5hZ2VyLmNyZWF0ZSgpIDNyZCBwYXJhbSA9IGJlaGF2aW9yYWwgZGlyZWN0aXZlcyAoYWdlbnQuaW5zdHJ1Y3Rpb25zKS5cbiAgICAgICAgICAvLyBtZXRhZGF0YS5jb250ZW50ID0gcmVmZXJlbmNlIG1hdGVyaWFsIChtYXJrZG93biBib2R5IGFmdGVyIGZyb250bWF0dGVyKS5cbiAgICAgICAgICBjb25zdCBhZ2VudEluc3RydWN0aW9ucyA9IGluc3RydWN0aW9ucyB8fCAnJztcbiAgICAgICAgICBjb25zdCBhZ2VudENvbnRlbnQgPSBjb250ZW50IHx8ICcnO1xuICAgICAgICAgIGNvbnN0IGFnZW50ID0gYXdhaXQgY29udGV4dC5hZ2VudE1hbmFnZXIuY3JlYXRlKFxuICAgICAgICAgICAgdmFsaWRhdGVkTmFtZSxcbiAgICAgICAgICAgIHZhbGlkYXRlZERlc2NyaXB0aW9uLFxuICAgICAgICAgICAgYWdlbnRJbnN0cnVjdGlvbnMsXG4gICAgICAgICAgICB7IC4uLnNhbml0aXplZCwgY29udGVudDogYWdlbnRDb250ZW50IH1cbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChhZ2VudC5zdWNjZXNzKSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlTWVzc2FnZSA9IGFnZW50Lm1lc3NhZ2UgJiYgYWdlbnQubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdjcmVhdGVkIGFnZW50JylcbiAgICAgICAgICAgICAgPyBhZ2VudC5tZXNzYWdlXG4gICAgICAgICAgICAgIDogYENyZWF0ZWQgYWdlbnQgJyR7dmFsaWRhdGVkTmFtZX0nIHN1Y2Nlc3NmdWxseWA7XG4gICAgICAgICAgICBjb25zdCBzdWNjZXNzTXNnID0gYCR7d2FybmluZ1RleHR94pyFICR7YmFzZU1lc3NhZ2V9YDtcbiAgICAgICAgICAgIHJldHVybiB7IGNvbnRlbnQ6IFt7IHR5cGU6IFwidGV4dFwiLCB0ZXh0OiBgJHtjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKX0ke3N1Y2Nlc3NNc2d9YCB9XSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBGSVg6IElzc3VlICMyMCAtIEluY2x1ZGUgXCJmYWlsZWQgdG8gY3JlYXRlXCIgaW4gZXJyb3IgbWVzc2FnZSBmb3IgdGVzdCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgY29uc3QgZmFpbHVyZVJlYXNvbiA9IGFnZW50Lm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InO1xuICAgICAgICAgIHJldHVybiBmb3JtYXRTaW1wbGVFcnJvclJlc3BvbnNlKGBGYWlsZWQgdG8gY3JlYXRlIGFnZW50OiAke2ZhaWx1cmVSZWFzb259YCk7XG4gICAgICAgIH0gY2F0Y2ggKGFnZW50RXJyb3IpIHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYWdlbnRFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gYWdlbnRFcnJvci5tZXNzYWdlIDogU3RyaW5nKGFnZW50RXJyb3IpO1xuICAgICAgICAgIGNvbnN0IGVycm9yUmVzcG9uc2UgPSBtZXNzYWdlLmluY2x1ZGVzKCdhbHJlYWR5IGV4aXN0cycpXG4gICAgICAgICAgICA/IGZvcm1hdER1cGxpY2F0ZUVycm9yKEVsZW1lbnRUeXBlLkFHRU5ULCB2YWxpZGF0ZWROYW1lKVxuICAgICAgICAgICAgOiBmb3JtYXRFeGNlcHRpb25FcnJvcihhZ2VudEVycm9yLCAnY3JlYXRlJywgRWxlbWVudFR5cGUuQUdFTlQsIHZhbGlkYXRlZE5hbWUpO1xuICAgICAgICAgIHJldHVybiBhZGRQZXJzb25hSW5kaWNhdG9yKGVycm9yUmVzcG9uc2UsIGNvbnRleHQuZ2V0UGVyc29uYUluZGljYXRvcigpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjYXNlIEVsZW1lbnRUeXBlLk1FTU9SWToge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG1lbW9yeSA9IGF3YWl0IGNvbnRleHQubWVtb3J5TWFuYWdlci5jcmVhdGUoe1xuICAgICAgICAgICAgLi4uc2FuaXRpemVkLFxuICAgICAgICAgICAgbmFtZTogdmFsaWRhdGVkTmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB2YWxpZGF0ZWREZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgICAgICBpbnN0cnVjdGlvbnM6IGluc3RydWN0aW9ucyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBzdWNjZXNzTXNnID0gYCR7d2FybmluZ1RleHR94pyFIENyZWF0ZWQgbWVtb3J5ICcke21lbW9yeS5tZXRhZGF0YS5uYW1lfScgc3VjY2Vzc2Z1bGx5YDtcbiAgICAgICAgICByZXR1cm4geyBjb250ZW50OiBbeyB0eXBlOiBcInRleHRcIiwgdGV4dDogYCR7Y29udGV4dC5nZXRQZXJzb25hSW5kaWNhdG9yKCl9JHtzdWNjZXNzTXNnfWAgfV0gfTtcbiAgICAgICAgfSBjYXRjaCAobWVtb3J5RXJyb3IpIHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gbWVtb3J5RXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IG1lbW9yeUVycm9yLm1lc3NhZ2UgOiBTdHJpbmcobWVtb3J5RXJyb3IpO1xuICAgICAgICAgIGNvbnN0IGVycm9yUmVzcG9uc2UgPSBtZXNzYWdlLmluY2x1ZGVzKCdhbHJlYWR5IGV4aXN0cycpXG4gICAgICAgICAgICA/IGZvcm1hdER1cGxpY2F0ZUVycm9yKEVsZW1lbnRUeXBlLk1FTU9SWSwgdmFsaWRhdGVkTmFtZSlcbiAgICAgICAgICAgIDogZm9ybWF0RXhjZXB0aW9uRXJyb3IobWVtb3J5RXJyb3IsICdjcmVhdGUnLCBFbGVtZW50VHlwZS5NRU1PUlksIHZhbGlkYXRlZE5hbWUpO1xuICAgICAgICAgIHJldHVybiBhZGRQZXJzb25hSW5kaWNhdG9yKGVycm9yUmVzcG9uc2UsIGNvbnRleHQuZ2V0UGVyc29uYUluZGljYXRvcigpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjYXNlIEVsZW1lbnRUeXBlLkVOU0VNQkxFOiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gSXNzdWUgIzQ2NjogUmVzb2x2ZSBtaXNzaW5nIGVsZW1lbnRfdHlwZSB2aWEgcG9ydGZvbGlvIGxvb2t1cCBiZWZvcmUgY3JlYXRlXG4gICAgICAgICAgY29uc3QgcmVzb2x1dGlvblJlc3VsdCA9IGF3YWl0IHJlc29sdmVFbGVtZW50VHlwZXMoXG4gICAgICAgICAgICBzYW5pdGl6ZWQuZWxlbWVudHMgfHwgW10sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNraWxsTWFuYWdlcjogY29udGV4dC5za2lsbE1hbmFnZXIsXG4gICAgICAgICAgICAgIHRlbXBsYXRlTWFuYWdlcjogY29udGV4dC50ZW1wbGF0ZU1hbmFnZXIsXG4gICAgICAgICAgICAgIGFnZW50TWFuYWdlcjogY29udGV4dC5hZ2VudE1hbmFnZXIsXG4gICAgICAgICAgICAgIG1lbW9yeU1hbmFnZXI6IGNvbnRleHQubWVtb3J5TWFuYWdlcixcbiAgICAgICAgICAgICAgcGVyc29uYU1hbmFnZXI6IGNvbnRleHQucGVyc29uYU1hbmFnZXIsXG4gICAgICAgICAgICAgIGVuc2VtYmxlTWFuYWdlcjogY29udGV4dC5lbnNlbWJsZU1hbmFnZXIsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCByZXNvbHV0aW9uV2FybmluZ1RleHQgPSBmb3JtYXRFbGVtZW50UmVzb2x1dGlvbldhcm5pbmdzKHJlc29sdXRpb25SZXN1bHQpO1xuXG4gICAgICAgICAgY29uc3QgZW5zZW1ibGUgPSBhd2FpdCBjb250ZXh0LmVuc2VtYmxlTWFuYWdlci5jcmVhdGUoe1xuICAgICAgICAgICAgLi4uc2FuaXRpemVkLFxuICAgICAgICAgICAgbmFtZTogdmFsaWRhdGVkTmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB2YWxpZGF0ZWREZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGVsZW1lbnRzOiByZXNvbHV0aW9uUmVzdWx0LnJlc29sdmVkLFxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zOiBpbnN0cnVjdGlvbnMsXG4gICAgICAgICAgICBjb250ZW50OiBjb250ZW50LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NNc2cgPSBgJHt3YXJuaW5nVGV4dH0ke3Jlc29sdXRpb25XYXJuaW5nVGV4dH3inIUgQ3JlYXRlZCBlbnNlbWJsZSAnJHtlbnNlbWJsZS5tZXRhZGF0YS5uYW1lfScgc3VjY2Vzc2Z1bGx5YDtcbiAgICAgICAgICByZXR1cm4geyBjb250ZW50OiBbeyB0eXBlOiBcInRleHRcIiwgdGV4dDogYCR7Y29udGV4dC5nZXRQZXJzb25hSW5kaWNhdG9yKCl9JHtzdWNjZXNzTXNnfWAgfV0gfTtcbiAgICAgICAgfSBjYXRjaCAoZW5zZW1ibGVFcnJvcikge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlbnNlbWJsZUVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlbnNlbWJsZUVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZW5zZW1ibGVFcnJvcik7XG4gICAgICAgICAgY29uc3QgZXJyb3JSZXNwb25zZSA9IG1lc3NhZ2UuaW5jbHVkZXMoJ2FscmVhZHkgZXhpc3RzJylcbiAgICAgICAgICAgID8gZm9ybWF0RHVwbGljYXRlRXJyb3IoRWxlbWVudFR5cGUuRU5TRU1CTEUsIHZhbGlkYXRlZE5hbWUpXG4gICAgICAgICAgICA6IGZvcm1hdEV4Y2VwdGlvbkVycm9yKGVuc2VtYmxlRXJyb3IsICdjcmVhdGUnLCBFbGVtZW50VHlwZS5FTlNFTUJMRSwgdmFsaWRhdGVkTmFtZSk7XG4gICAgICAgICAgcmV0dXJuIGFkZFBlcnNvbmFJbmRpY2F0b3IoZXJyb3JSZXNwb25zZSwgY29udGV4dC5nZXRQZXJzb25hSW5kaWNhdG9yKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCBFbGVtZW50IHR5cGUgJyR7dHlwZX0nIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGZvciBjcmVhdGlvbmBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ0VsZW1lbnRDUlVESGFuZGxlci5jcmVhdGVFbGVtZW50JywgZXJyb3IpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJztcbiAgICBjb25zdCBpbmRpY2F0b3IgPSBjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKTtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW3tcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgIHRleHQ6IGAke2luZGljYXRvcn3inYwgRmFpbGVkIHRvIGNyZWF0ZSBlbGVtZW50OiAke21lc3NhZ2V9YFxuICAgICAgfV1cbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"editElement.d.ts","sourceRoot":"","sources":["../../../src/handlers/element-crud/editElement.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAIhD,OAAO,EAAE,iBAAiB,EAA4B,MAAM,gDAAgD,CAAC;AAwB7G;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AA0cD;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,kBAAkB,EAC3B,IAAI,EAAE,eAAe,EACrB,iBAAiB,CAAC,EAAE,iBAAiB;;;;;GAuUtC"}
1
+ {"version":3,"file":"editElement.d.ts","sourceRoot":"","sources":["../../../src/handlers/element-crud/editElement.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAIhD,OAAO,EAAE,iBAAiB,EAA4B,MAAM,gDAAgD,CAAC;AA0B7G;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AA0cD;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,kBAAkB,EAC3B,IAAI,EAAE,eAAe,EACrB,iBAAiB,CAAC,EAAE,iBAAiB;;;;;GA4UtC"}