@dollhousemcp/mcp-server 2.0.16 → 2.0.18

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 (74) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md.backup +18 -0
  3. package/dist/elements/BaseElement.d.ts +1 -0
  4. package/dist/elements/BaseElement.d.ts.map +1 -1
  5. package/dist/elements/BaseElement.js +7 -1
  6. package/dist/elements/agents/AgentManager.js +2 -2
  7. package/dist/elements/base/BaseElementManager.d.ts.map +1 -1
  8. package/dist/elements/base/BaseElementManager.js +17 -1
  9. package/dist/elements/base/ElementFileOperations.js +2 -2
  10. package/dist/elements/ensembles/EnsembleManager.js +3 -3
  11. package/dist/elements/memories/MemoryManager.d.ts.map +1 -1
  12. package/dist/elements/memories/MemoryManager.js +14 -3
  13. package/dist/elements/skills/SkillManager.js +2 -2
  14. package/dist/elements/templates/TemplateManager.js +2 -2
  15. package/dist/generated/version.d.ts +2 -2
  16. package/dist/generated/version.js +3 -3
  17. package/dist/handlers/ElementCRUDHandler.d.ts.map +1 -1
  18. package/dist/handlers/ElementCRUDHandler.js +3 -2
  19. package/dist/handlers/element-crud/createElement.d.ts.map +1 -1
  20. package/dist/handlers/element-crud/createElement.js +6 -2
  21. package/dist/handlers/element-crud/editElement.d.ts.map +1 -1
  22. package/dist/handlers/element-crud/editElement.js +6 -2
  23. package/dist/handlers/element-crud/helpers.d.ts +2 -0
  24. package/dist/handlers/element-crud/helpers.d.ts.map +1 -1
  25. package/dist/handlers/element-crud/helpers.js +21 -2
  26. package/dist/handlers/mcp-aql/IntrospectionResolver.d.ts.map +1 -1
  27. package/dist/handlers/mcp-aql/IntrospectionResolver.js +34 -7
  28. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +1 -0
  29. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
  30. package/dist/handlers/mcp-aql/MCPAQLHandler.js +50 -14
  31. package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
  32. package/dist/handlers/mcp-aql/OperationSchema.js +3 -2
  33. package/dist/handlers/mcp-aql/evaluatePermission.d.ts.map +1 -1
  34. package/dist/handlers/mcp-aql/evaluatePermission.js +2 -1
  35. package/dist/handlers/mcp-aql/policies/ElementPolicies.d.ts +17 -1
  36. package/dist/handlers/mcp-aql/policies/ElementPolicies.d.ts.map +1 -1
  37. package/dist/handlers/mcp-aql/policies/ElementPolicies.js +88 -4
  38. package/dist/handlers/strategies/AgentActivationStrategy.d.ts.map +1 -1
  39. package/dist/handlers/strategies/AgentActivationStrategy.js +5 -1
  40. package/dist/handlers/strategies/BaseActivationStrategy.d.ts +1 -0
  41. package/dist/handlers/strategies/BaseActivationStrategy.d.ts.map +1 -1
  42. package/dist/handlers/strategies/BaseActivationStrategy.js +15 -1
  43. package/dist/handlers/strategies/EnsembleActivationStrategy.d.ts.map +1 -1
  44. package/dist/handlers/strategies/EnsembleActivationStrategy.js +5 -1
  45. package/dist/handlers/strategies/MemoryActivationStrategy.d.ts.map +1 -1
  46. package/dist/handlers/strategies/MemoryActivationStrategy.js +5 -1
  47. package/dist/handlers/strategies/PersonaActivationStrategy.d.ts.map +1 -1
  48. package/dist/handlers/strategies/PersonaActivationStrategy.js +5 -1
  49. package/dist/handlers/strategies/SkillActivationStrategy.d.ts.map +1 -1
  50. package/dist/handlers/strategies/SkillActivationStrategy.js +5 -1
  51. package/dist/handlers/strategies/TemplateActivationStrategy.d.ts.map +1 -1
  52. package/dist/handlers/strategies/TemplateActivationStrategy.js +7 -2
  53. package/dist/persona/PersonaElement.js +2 -2
  54. package/dist/services/SerializationService.d.ts.map +1 -1
  55. package/dist/services/SerializationService.js +7 -1
  56. package/dist/types/elements/IElement.d.ts +9 -0
  57. package/dist/types/elements/IElement.d.ts.map +1 -1
  58. package/dist/types/elements/IElement.js +1 -1
  59. package/dist/utils/permissionHooks.d.ts +39 -3
  60. package/dist/utils/permissionHooks.d.ts.map +1 -1
  61. package/dist/utils/permissionHooks.js +651 -74
  62. package/dist/web/public/permissions.css +190 -2
  63. package/dist/web/public/permissions.js +209 -56
  64. package/dist/web/public/setup.js +452 -108
  65. package/dist/web/routes/permissionRoutes.d.ts.map +1 -1
  66. package/dist/web/routes/permissionRoutes.js +108 -17
  67. package/dist/web/routes/setupRoutes.d.ts +1 -0
  68. package/dist/web/routes/setupRoutes.d.ts.map +1 -1
  69. package/dist/web/routes/setupRoutes.js +128 -42
  70. package/package.json +3 -1
  71. package/scripts/pretooluse-dollhouse.sh +39 -1
  72. package/scripts/pretooluse-vscode.sh +163 -0
  73. package/scripts/pretooluse-windsurf.sh +166 -4
  74. package/server.json +2 -2
@@ -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"}
@@ -9,7 +9,7 @@ import { SECURITY_LIMITS } from '../../security/constants.js';
9
9
  import { ContentValidator } from '../../security/contentValidator.js';
10
10
  import { ElementNotFoundError } from '../../utils/ErrorHandler.js';
11
11
  import { deepMerge, DANGEROUS_PROPERTIES } from '../../utils/deepMerge.js';
12
- import { normalizeElementTypeInput, formatValidElementTypesList, getElementFilename, getElementTypeLabel, resolveElementByName, KNOWN_METADATA_PROPERTIES, detectUnknownMetadataProperties, formatUnknownPropertyWarnings, formatElementResolutionWarnings } from './helpers.js';
12
+ import { normalizeElementTypeInput, formatValidElementTypesList, getElementFilename, getElementTypeLabel, resolveElementByName, KNOWN_METADATA_PROPERTIES, detectUnknownMetadataProperties, formatUnknownPropertyWarnings, formatElementResolutionWarnings, collectGatekeeperAuthoringErrors, formatGatekeeperValidationMessage, } from './helpers.js';
13
13
  // Read-only fields that cannot be modified through the edit API
14
14
  const READ_ONLY_FIELDS = new Set([
15
15
  'id',
@@ -454,6 +454,10 @@ export async function editElement(context, args, validationService) {
454
454
  if (typeErrors.length > 0) {
455
455
  return error(`Field type validation failed:\n${typeErrors.map(e => ` • ${e}`).join('\n')}`);
456
456
  }
457
+ const gatekeeperErrors = collectGatekeeperAuthoringErrors(input, input.metadata);
458
+ if (gatekeeperErrors.length > 0) {
459
+ return error(formatGatekeeperValidationMessage(gatekeeperErrors));
460
+ }
457
461
  // Validate string field values using injected validator
458
462
  for (const [field, value] of Object.entries(input)) {
459
463
  if (typeof value === 'string') {
@@ -776,4 +780,4 @@ function autoIncrementVersion(element) {
776
780
  logger.error('Failed to auto-increment version', { error });
777
781
  }
778
782
  }
779
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdEVsZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaGFuZGxlcnMvZWxlbWVudC1jcnVkL2VkaXRFbGVtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUtsRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFaEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBNEIsTUFBTSxnREFBZ0QsQ0FBQztBQUM3RyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNFLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsMkJBQTJCLEVBQzNCLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsb0JBQW9CLEVBRXBCLHlCQUF5QixFQUN6QiwrQkFBK0IsRUFDL0IsNkJBQTZCLEVBQzdCLCtCQUErQixFQUNoQyxNQUFNLGNBQWMsQ0FBQztBQWlDdEIsZ0VBQWdFO0FBQ2hFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDL0IsSUFBSTtJQUNKLE1BQU07SUFDTixVQUFVO0lBQ1YsVUFBVTtJQUNWLFNBQVM7SUFDVCxVQUFVO0NBQ1gsQ0FBQyxDQUFDO0FBRUg7Ozs7Ozs7R0FPRztBQUNILE1BQU0sZ0JBQWdCLEdBSWpCO0lBQ0gsdUNBQXVDO0lBQ3ZDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDdEUsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUMxRSxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQ3pFLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQy9ELGFBQWEsRUFBRSxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDL0UsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDbkUsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDNUQsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDbEUsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDOUQsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDN0Qsc0VBQXNFO0lBQ3RFLFNBQVMsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQzVJLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQ3hJLFNBQVMsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRTtJQUN0RyxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxD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QyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUU7SUFDeEUsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRTtJQUNuRSxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRTtJQUM3RixRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO0lBQ3JFLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUU7SUFDbkUsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRTtJQUVqRSxnQkFBZ0I7SUFDaEIsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRSxZQUFZLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUU7SUFDM0csV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRSxZQUFZLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUU7SUFDNUcsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFB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Q0FBQyxPQUFPLEdBQUcsR0FBRyxLQUFLLElBQUksS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDckQsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLENBQUM7b0JBQ04seURBQXlEO29CQUN6RCxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDakUsT0FBTyxDQUFDLE9BQU8sR0FBRyxHQUFHLEtBQUssSUFBSSxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNyRCxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLHlFQUF5RTtnQkFDekUsT0FBTyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sNkJBQTZCO1lBQzdCLE9BQU8sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQzVCLENBQUM7UUFFRCwyQkFBMkI7UUFDM0IsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixNQUFNLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRUeXBlIH0gZnJvbSAnLi4vLi4vcG9ydGZvbGlvL1BvcnRmb2xpb01hbmFnZXIuanMnO1xuaW1wb3J0IHsgU2tpbGwgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9za2lsbHMvU2tpbGwuanMnO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICcuLi8uLi9lbGVtZW50cy90ZW1wbGF0ZXMvVGVtcGxhdGUuanMnO1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9hZ2VudHMvQWdlbnQuanMnO1xuaW1wb3J0IHsgTWVtb3J5IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvbWVtb3JpZXMvTWVtb3J5LmpzJztcbmltcG9ydCB7IEVuc2VtYmxlIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvZW5zZW1ibGVzL0Vuc2VtYmxlLmpzJztcbmltcG9ydCB0eXBlIHsgRW5zZW1ibGVFbGVtZW50SW5wdXQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9lbnNlbWJsZXMvdHlwZXMuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZUVsZW1lbnRUeXBlcyB9IGZyb20gJy4uLy4uL3V0aWxzL2VsZW1lbnRUeXBlUmVzb2x2ZXIuanMnO1xuaW1wb3J0IHsgRWxlbWVudENydWRDb250ZXh0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZU1lbW9yeUlkIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvbWVtb3JpZXMvdXRpbHMuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IG5vcm1hbGl6ZVZlcnNpb24gfSBmcm9tICcuLi8uLi9lbGVtZW50cy9CYXNlRWxlbWVudC5qcyc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uU2VydmljZSwgdHlwZSBWYWxpZGF0aW9uRmllbGRUeXBlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdmFsaWRhdGlvbi9WYWxpZGF0aW9uU2VydmljZS5qcyc7XG5pbXBvcnQgeyBTRUNVUklUWV9MSU1JVFMgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgQ29udGVudFZhbGlkYXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L2NvbnRlbnRWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgRWxlbWVudE5vdEZvdW5kRXJyb3IgfSBmcm9tICcuLi8uLi91dGlscy9FcnJvckhhbmRsZXIuanMnO1xuaW1wb3J0IHsgZGVlcE1lcmdlLCBEQU5HRVJPVVNfUFJPUEVSVElFUyB9IGZyb20gJy4uLy4uL3V0aWxzL2RlZXBNZXJnZS5qcyc7XG5pbXBvcnQge1xuICBub3JtYWxpemVFbGVtZW50VHlwZUlucHV0LFxuICBmb3JtYXRWYWxpZEVsZW1lbnRUeXBlc0xpc3QsXG4gIGdldEVsZW1lbnRGaWxlbmFtZSxcbiAgZ2V0RWxlbWVudFR5cGVMYWJlbCxcbiAgcmVzb2x2ZUVsZW1lbnRCeU5hbWUsXG4gIEVsZW1lbnRNYW5hZ2VyT3BlcmF0aW9ucyxcbiAgS05PV05fTUVUQURBVEFfUFJPUEVSVElFUyxcbiAgZGV0ZWN0VW5rbm93bk1ldGFkYXRhUHJvcGVydGllcyxcbiAgZm9ybWF0VW5rbm93blByb3BlcnR5V2FybmluZ3MsXG4gIGZvcm1hdEVsZW1lbnRSZXNvbHV0aW9uV2FybmluZ3Ncbn0gZnJvbSAnLi9oZWxwZXJzLmpzJztcbmltcG9ydCB0eXBlIHsgUmVzb2x2ZUVsZW1lbnRUeXBlc1Jlc3VsdCB9IGZyb20gJy4uLy4uL3V0aWxzL2VsZW1lbnRUeXBlUmVzb2x2ZXIuanMnO1xuXG50eXBlIEVsZW1lbnRNYW5hZ2VyV2l0aFBlcnNpc3RlbmNlPFQ+ID0gRWxlbWVudE1hbmFnZXJPcGVyYXRpb25zPFQ+ICYge1xuICBzYXZlKGVsZW1lbnQ6IFQsIGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICBkZWxldGU/KGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xufTtcblxuLyoqXG4gKiBHcmFwaFFMLWFsaWduZWQgaW5wdXQgZm9yIGVkaXRpbmcgZWxlbWVudHMuXG4gKiBVc2VzIG5lc3RlZCBvYmplY3RzIChsaWtlIGNyZWF0ZV9lbGVtZW50KSBpbnN0ZWFkIG9mIE1vbmdvREItc3R5bGUgZG90IG5vdGF0aW9uLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBVcGRhdGUgZGVzY3JpcHRpb24gYW5kIG5lc3RlZCBtZXRhZGF0YVxuICoge1xuICogICBuYW1lOiBcIm15LXNraWxsXCIsXG4gKiAgIHR5cGU6IFwic2tpbGxzXCIsXG4gKiAgIGlucHV0OiB7XG4gKiAgICAgZGVzY3JpcHRpb246IFwiVXBkYXRlZCBkZXNjcmlwdGlvblwiLFxuICogICAgIG1ldGFkYXRhOiB7XG4gKiAgICAgICB0cmlnZ2VyczogW1wiY29kZVwiLCBcInJldmlld1wiXSxcbiAqICAgICAgIHNldHRpbmdzOiB7IHRoZW1lOiBcImRhcmtcIiB9XG4gKiAgICAgfVxuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWRpdEVsZW1lbnRBcmdzIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIC8qKiBOZXN0ZWQgaW5wdXQgb2JqZWN0IC0gZmllbGRzIGFyZSBkZWVwLW1lcmdlZCB3aXRoIGV4aXN0aW5nIGVsZW1lbnQgKi9cbiAgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vLyBSZWFkLW9ubHkgZmllbGRzIHRoYXQgY2Fubm90IGJlIG1vZGlmaWVkIHRocm91Z2ggdGhlIGVkaXQgQVBJXG5jb25zdCBSRUFEX09OTFlfRklFTERTID0gbmV3IFNldChbXG4gICdpZCcsXG4gICd0eXBlJyxcbiAgJ2ZpbGVQYXRoJyxcbiAgJ2ZpbGVuYW1lJyxcbiAgJ19zdGF0dXMnLFxuICAnX2lzRGlydHknXG5dKTtcblxuLyoqXG4gKiBJc3N1ZSAjNjYyOiBTeXN0ZW1hdGljIGZpZWxkIHR5cGUgdmFsaWRhdGlvbiBhdCB0aGUgZWRpdEVsZW1lbnQgYm91bmRhcnkuXG4gKlxuICogRGVmaW5lcyBleHBlY3RlZCB0eXBlcyBmb3Iga25vd24gbWV0YWRhdGEgZmllbGRzIGFjcm9zcyBhbGwgZWxlbWVudCB0eXBlcy5cbiAqIFByZXZlbnRzIHNpbGVudCBkYXRhIGNvcnJ1cHRpb24gd2hlbiBMTE1zIHNlbmQgd3JvbmcgdHlwZXMgKGUuZy4sIGRpY3QgaW5zdGVhZCBvZiBhcnJheSkuXG4gKlxuICogS2V5OiBmaWVsZCBuYW1lLCBWYWx1ZTogeyBleHBlY3RlZDogdHlwZSBkZXNjcmlwdGlvbiwgY2hlY2s6IHZhbGlkYXRvciBmdW5jdGlvbiB9XG4gKi9cbmNvbnN0IEZJRUxEX1RZUEVfUlVMRVM6IFJlY29yZDxzdHJpbmcsIHtcbiAgZXhwZWN0ZWQ6IHN0cmluZztcbiAgY2hlY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gYm9vbGVhbjtcbiAgZWxlbWVudFR5cGVzPzogRWxlbWVudFR5cGVbXTtcbn0+ID0ge1xuICAvLyBBcnJheSBmaWVsZHMgKGFjcm9zcyBtdWx0aXBsZSB0eXBlcylcbiAgdGFnczogeyBleHBlY3RlZDogJ2FycmF5IG9mIHN0cmluZ3MnLCBjaGVjazogKHYpID0+IEFycmF5LmlzQXJyYXkodikgfSxcbiAgdHJpZ2dlcnM6IHsgZXhwZWN0ZWQ6ICdhcnJheSBvZiBzdHJpbmdzJywgY2hlY2s6ICh2KSA9PiBBcnJheS5pc0FycmF5KHYpIH0sXG4gIGRvbWFpbnM6IHsgZXhwZWN0ZWQ6ICdhcnJheSBvZiBzdHJpbmdzJywgY2hlY2s6ICh2KSA9PiBBcnJheS5pc0FycmF5KHYpIH0sXG4gIGV4YW1wbGVzOiB7IGV4cGVjdGVkOiAnYXJyYXknLCBjaGVjazogKHYpID0+IEFycmF5LmlzQXJyYXkodikgfSxcbiAgcHJlcmVxdWlzaXRlczogeyBleHBlY3RlZDogJ2FycmF5IG9mIHN0cmluZ3MnLCBjaGVjazogKHYpID0+IEFycmF5LmlzQXJyYXkodikgfSxcbiAgY2FwYWJpbGl0aWVzOiB7IGV4cGVjdGVkOiAnYXJyYXknLCBjaGVjazogKHYpID0+IEFycmF5LmlzQXJyYXkodikgfSxcbiAgZ29hbHM6IHsgZXhwZWN0ZWQ6ICdhcnJheScsIGNoZWNrOiAodikgPT4gQXJyYXkuaXNBcnJheSh2KSB9LFxuICBjb25zdHJhaW50czogeyBleHBlY3RlZDogJ2FycmF5JywgY2hlY2s6ICh2KSA9PiBBcnJheS5pc0FycmF5KHYpIH0sXG4gIGFjdGlvbnM6IHsgZXhwZWN0ZWQ6ICdhcnJheScsIGNoZWNrOiAodikgPT4gQXJyYXkuaXNBcnJheSh2KSB9LFxuICBza2lsbHM6IHsgZXhwZWN0ZWQ6ICdhcnJheScsIGNoZWNrOiAodikgPT4gQXJyYXkuaXNBcnJheSh2KSB9LFxuICAvLyBJc3N1ZSAjNzI0OiBhY3RpdmF0ZXMgYW5kIHRvb2xzIGFyZSBvYmplY3RzIGZvciBhZ2VudHMgKG5vdCBhcnJheXMpXG4gIGFjdGl2YXRlczogeyBleHBlY3RlZDogJ29iamVjdCcsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodiksIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLkFHRU5UXSB9LFxuICB0b29sczogeyBleHBlY3RlZDogJ29iamVjdCcsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodiksIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLkFHRU5UXSB9LFxuICB2YXJpYWJsZXM6IHsgZXhwZWN0ZWQ6ICdhcnJheScsIGNoZWNrOiAodikgPT4gQXJyYXkuaXNBcnJheSh2KSwgZWxlbWVudFR5cGVzOiBbRWxlbWVudFR5cGUuVEVNUExBVEVdIH0sXG4gIGVudHJpZXM6IHsgZXhwZWN0ZWQ6ICdhcnJheScsIGNoZWNrOiAodikgPT4gQXJyYXkuaXNBcnJheSh2KSwgZWxlbWVudFR5cGVzOiBbRWxlbWVudFR5cGUuTUVNT1JZXSB9LFxuICAvLyBlbGVtZW50cyBoYW5kbGVkIHNlcGFyYXRlbHkgYnkgdmFsaWRhdGVBbmROb3JtYWxpemVFbnNlbWJsZUVsZW1lbnRzIChhY2NlcHRzIGRpY3QgdG9vKVxuXG4gIC8vIE9iamVjdCBmaWVsZHNcbiAgZ29hbDogeyBleHBlY3RlZDogJ29iamVjdCcsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodiksIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLkFHRU5UXSB9LFxuICBhdXRvbm9teTogeyBleHBlY3RlZDogJ29iamVjdCcsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodiksIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLkFHRU5UXSB9LFxuICByZXNpbGllbmNlOiB7IGV4cGVjdGVkOiAnb2JqZWN0JywgY2hlY2s6ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2KSwgZWxlbWVudFR5cGVzOiBbRWxlbWVudFR5cGUuQUdFTlRdIH0sXG4gIGdhdGVrZWVwZXI6IHsgZXhwZWN0ZWQ6ICdvYmplY3QnLCBjaGVjazogKHYpID0+IHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiB2ICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHYpIH0sXG4gIHJldGVudGlvblBvbGljeTogeyBleHBlY3RlZDogJ29iamVjdCcsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodiksIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLk1FTU9SWV0gfSxcbiAgcmV0ZW50aW9uX3BvbGljeTogeyBleHBlY3RlZDogJ29iamVjdCcsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodiksIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLk1FTU9SWV0gfSxcblxuICAvLyBTdHJpbmcgZmllbGRzXG4gIC8vIElzc3VlICM3MjQ6IHN5c3RlbVByb21wdCB3YXMgbWlzc2luZyBmcm9tIGZpZWxkIHR5cGUgcnVsZXMuXG4gIC8vIEJvdGggY2FtZWxDYXNlIGFuZCBzbmFrZV9jYXNlIHZhcmlhbnRzIGFjY2VwdGVkIGJlY2F1c2UgTExNcyBmcmVxdWVudGx5XG4gIC8vIHBhc3Mgc25ha2VfY2FzZSBrZXlzOyBub3JtYWxpemF0aW9uIHRvIGNhbWVsQ2FzZSBoYXBwZW5zIGRvd25zdHJlYW0gaW5cbiAgLy8gQWdlbnRNYW5hZ2VyLnBhcnNlTWV0YWRhdGEoKSAoSXNzdWUgIzcyMikuXG4gIHN5c3RlbVByb21wdDogeyBleHBlY3RlZDogJ3N0cmluZycsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnLCBlbGVtZW50VHlwZXM6IFtFbGVtZW50VHlwZS5BR0VOVF0gfSxcbiAgc3lzdGVtX3Byb21wdDogeyBleHBlY3RlZDogJ3N0cmluZycsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnLCBlbGVtZW50VHlwZXM6IFtFbGVtZW50VHlwZS5BR0VOVF0gfSxcbiAgbmFtZTogeyBleHBlY3RlZDogJ3N0cmluZycsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnIH0sXG4gIGRlc2NyaXB0aW9uOiB7IGV4cGVjdGVkOiAnc3RyaW5nJywgY2hlY2s6ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ3N0cmluZycgfSxcbiAgYXV0aG9yOiB7IGV4cGVjdGVkOiAnc3RyaW5nJywgY2hlY2s6ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ3N0cmluZycgfSxcbiAgdmVyc2lvbjogeyBleHBlY3RlZDogJ3N0cmluZycsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2ID09PSAnbnVtYmVyJyB9LFxuICBjYXRlZ29yeTogeyBleHBlY3RlZDogJ3N0cmluZycsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnIH0sXG4gIGRvbWFpbjogeyBleHBlY3RlZDogJ3N0cmluZycsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnIH0sXG4gIHRvbmU6IHsgZXhwZWN0ZWQ6ICdzdHJpbmcnLCBjaGVjazogKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyB9LFxuXG4gIC8vIE51bWJlciBmaWVsZHNcbiAgbWF4RW50cmllczogeyBleHBlY3RlZDogJ251bWJlcicsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInLCBlbGVtZW50VHlwZXM6IFtFbGVtZW50VHlwZS5NRU1PUlldIH0sXG4gIG1heF9lbnRyaWVzOiB7IGV4cGVjdGVkOiAnbnVtYmVyJywgY2hlY2s6ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicsIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLk1FTU9SWV0gfSxcbiAgcHJpb3JpdHk6IHsgZXhwZWN0ZWQ6ICdudW1iZXInLCBjaGVjazogKHYpID0+IHR5cGVvZiB2ID09PSAnbnVtYmVyJyB9LFxufTtcblxuLyoqXG4gKiBJc3N1ZSAjNjYyOiBWYWxpZGF0ZSBmaWVsZCB0eXBlcyBpbiBpbnB1dCBiZWZvcmUgYXBwbHlpbmcgdG8gZWxlbWVudC5cbiAqXG4gKiBDaGVja3MgZWFjaCBmaWVsZCBpbiB0aGUgaW5wdXQgYWdhaW5zdCBgRklFTERfVFlQRV9SVUxFU2AuIEZpZWxkcyBub3QgaW4gdGhlXG4gKiBydWxlcyBtYXAgYXJlIHNraXBwZWQgKHRoZXknbGwgYmUgY2F1Z2h0IGJ5IHVua25vd24tcHJvcGVydHkgZGV0ZWN0aW9uIGxhdGVyKS5cbiAqIEVsZW1lbnQtdHlwZS1zY29wZWQgcnVsZXMgb25seSBhcHBseSB3aGVuIHRoZSB0YXJnZXQgdHlwZSBtYXRjaGVzLlxuICpcbiAqIEBwYXJhbSBpbnB1dCAtIFRoZSBlZGl0IGlucHV0IG9iamVjdCBjb250YWluaW5nIGZpZWxkcyB0byB2YWxpZGF0ZVxuICogQHBhcmFtIGVsZW1lbnRUeXBlIC0gVGhlIG5vcm1hbGl6ZWQgZWxlbWVudCB0eXBlIGJlaW5nIGVkaXRlZFxuICogQHJldHVybnMgQXJyYXkgb2YgZXJyb3IgbWVzc2FnZXMgZm9yIGZpZWxkcyB3aXRoIHdyb25nIHR5cGVzIChlbXB0eSBpZiBhbGwgdmFsaWQpXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRmllbGRUeXBlcyhcbiAgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVcbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgW2ZpZWxkLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoaW5wdXQpKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIGNvbnRpbnVlO1xuXG4gICAgY29uc3QgcnVsZSA9IEZJRUxEX1RZUEVfUlVMRVNbZmllbGRdO1xuICAgIGlmICghcnVsZSkgY29udGludWU7XG5cbiAgICAvLyBTa2lwIGlmIHJ1bGUgZG9lc24ndCBhcHBseSB0byB0aGlzIGVsZW1lbnQgdHlwZVxuICAgIGlmIChydWxlLmVsZW1lbnRUeXBlcyAmJiAhcnVsZS5lbGVtZW50VHlwZXMuaW5jbHVkZXMoZWxlbWVudFR5cGUpKSBjb250aW51ZTtcblxuICAgIGlmICghcnVsZS5jaGVjayh2YWx1ZSkpIHtcbiAgICAgIGVycm9ycy5wdXNoKGBGaWVsZCAnJHtmaWVsZH0nIGV4cGVjdHMgJHtydWxlLmV4cGVjdGVkfSwgZ290ICR7QXJyYXkuaXNBcnJheSh2YWx1ZSkgPyAnYXJyYXknIDogdHlwZW9mIHZhbHVlfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8vIE1lcmdlIG9wdGlvbnMgZm9yIHNlY3VyZSBkZWVwIG1lcmdpbmdcbmNvbnN0IE1FUkdFX09QVElPTlMgPSB7XG4gIHNraXBQcm9wZXJ0aWVzOiBEQU5HRVJPVVNfUFJPUEVSVElFUyxcbiAgcmVhZE9ubHlGaWVsZHM6IFJFQURfT05MWV9GSUVMRFNcbn07XG5cbi8qKlxuICogTWFwIGZpZWxkIG5hbWVzIHRvIHRoZWlyIGFwcHJvcHJpYXRlIHZhbGlkYXRpb24gZmllbGQgdHlwZXMuXG4gKiBUaGlzIGVuc3VyZXMgY29uc2lzdGVudCB2YWxpZGF0aW9uIGJldHdlZW4gZWRpdCAoaW5wdXQpIGFuZCBsb2FkIChvdXRwdXQpLlxuICovXG5mdW5jdGlvbiBnZXRGaWVsZFR5cGVGb3JWYWxpZGF0aW9uKGZpZWxkTmFtZTogc3RyaW5nKTogVmFsaWRhdGlvbkZpZWxkVHlwZSB8IG51bGwge1xuICAvLyBOb3JtYWxpemUgZmllbGQgbmFtZSAoaGFuZGxlIGJvdGggJ2Rlc2NyaXB0aW9uJyBhbmQgJ21ldGFkYXRhLmRlc2NyaXB0aW9uJylcbiAgY29uc3Qgbm9ybWFsaXplZEZpZWxkID0gZmllbGROYW1lLnJlcGxhY2UoL15tZXRhZGF0YVxcLi8sICcnKTtcblxuICBzd2l0Y2ggKG5vcm1hbGl6ZWRGaWVsZCkge1xuICAgIGNhc2UgJ25hbWUnOlxuICAgICAgcmV0dXJuICduYW1lJztcbiAgICBjYXNlICdkZXNjcmlwdGlvbic6XG4gICAgICByZXR1cm4gJ2Rlc2NyaXB0aW9uJztcbiAgICBjYXNlICdjb250ZW50JzpcbiAgICAgIHJldHVybiAnY29udGVudCc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsOyAvLyBObyBzcGVjaWFsIHZhbGlkYXRpb24gbmVlZGVkXG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhIGZpZWxkIHZhbHVlIGJlZm9yZSBzZXR0aW5nIGl0IG9uIGFuIGVsZW1lbnQuXG4gKiBSZXR1cm5zIG51bGwgaWYgdmFsaWQsIG9yIGFuIGVycm9yIG1lc3NhZ2UgaWYgaW52YWxpZC5cbiAqXG4gKiBAcGFyYW0gdmFsaWRhdGlvblNlcnZpY2UgLSBJbmplY3RlZCB2YWxpZGF0aW9uIHNlcnZpY2UgZm9yIHRlc3RhYmlsaXR5XG4gKiBAcGFyYW0gZmllbGQgLSBUaGUgZmllbGQgbmFtZSBiZWluZyB2YWxpZGF0ZWRcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB2YWxpZGF0ZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUZpZWxkVmFsdWUoXG4gIHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZSxcbiAgZmllbGQ6IHN0cmluZyxcbiAgdmFsdWU6IHVua25vd25cbik6IHN0cmluZyB8IG51bGwge1xuICAvLyBPbmx5IHZhbGlkYXRlIHN0cmluZyB2YWx1ZXMgZm9yIHRleHQgZmllbGRzXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bGw7IC8vIE5vbi1zdHJpbmcgdmFsdWVzIChhcnJheXMsIG9iamVjdHMsIGJvb2xlYW5zLCBudW1iZXJzKSBza2lwIHRleHQgdmFsaWRhdGlvblxuICB9XG5cbiAgY29uc3QgZmllbGRUeXBlID0gZ2V0RmllbGRUeXBlRm9yVmFsaWRhdGlvbihmaWVsZCk7XG4gIGlmICghZmllbGRUeXBlKSB7XG4gICAgcmV0dXJuIG51bGw7IC8vIE5vIHZhbGlkYXRpb24gcnVsZXMgZm9yIHRoaXMgZmllbGRcbiAgfVxuXG4gIC8vIERldGVybWluZSBtYXggbGVuZ3RoIGJhc2VkIG9uIGZpZWxkIHR5cGUsIHVzaW5nIHN5c3RlbSBjb25zdGFudHNcbiAgY29uc3QgbWF4TGVuZ3RoID0gZmllbGRUeXBlID09PSAnbmFtZScgPyBTRUNVUklUWV9MSU1JVFMuTUFYX05BTUVfTEVOR1RIIDpcbiAgICAgICAgICAgICAgICAgICAgZmllbGRUeXBlID09PSAnZGVzY3JpcHRpb24nID8gU0VDVVJJVFlfTElNSVRTLk1BWF9ERVNDUklQVElPTl9MRU5HVEggOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZFR5cGUgPT09ICdjb250ZW50JyA/IFNFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEggOiBTRUNVUklUWV9MSU1JVFMuTUFYX0NPTU1BTkRfQVJHX0xFTkdUSDtcblxuICBjb25zdCByZXN1bHQgPSB2YWxpZGF0aW9uU2VydmljZS52YWxpZGF0ZUFuZFNhbml0aXplSW5wdXQodmFsdWUsIHtcbiAgICBtYXhMZW5ndGgsXG4gICAgYWxsb3dTcGFjZXM6IHRydWUsXG4gICAgZmllbGRUeXBlXG4gIH0pO1xuXG4gIGlmICghcmVzdWx0LmlzVmFsaWQpIHtcbiAgICByZXR1cm4gcmVzdWx0LmVycm9ycz8uam9pbignLCAnKSB8fCAnVmFsaWRhdGlvbiBmYWlsZWQnO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7IC8vIFZhbGlkXG59XG5cbi8qKlxuICogVmFsaWRhdGUgYW5kIG5vcm1hbGl6ZSBlbnNlbWJsZSBlbGVtZW50cyBpbnB1dC5cbiAqXG4gKiBJc3N1ZSAjNjU4OiBMTE1zIG9mdGVuIHNlbmQgZWxlbWVudHMgaW4gZGljdC1rZXllZCBmb3JtYXQgaW5zdGVhZCBvZiBhcnJheSBmb3JtYXQuXG4gKiBUaGlzIGZ1bmN0aW9uIG5vcm1hbGl6ZXMgYm90aCBmb3JtYXRzIHRvIGEgdmFsaWQgYXJyYXkgb2YgRW5zZW1ibGVFbGVtZW50LWxpa2Ugb2JqZWN0cy5cbiAqXG4gKiBBY2NlcHRlZCBmb3JtYXRzOlxuICogLSBBcnJheTogW3sgZWxlbWVudF9uYW1lOiBcImZvb1wiLCBlbGVtZW50X3R5cGU6IFwibWVtb3J5XCIsIC4uLiB9XVxuICogLSBEaWN0OiAgeyBcImZvb1wiOiB7IHR5cGU6IFwibWVtb3J5XCIsIC4uLiB9IH0gIOKGkiBjb252ZXJ0ZWQgdG8gYXJyYXlcbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgZWxlbWVudHMgaW5wdXQgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIE9iamVjdCB3aXRoIHN1Y2Nlc3MgZmxhZywgbm9ybWFsaXplZCBlbGVtZW50cyBhcnJheSwgYW5kIG9wdGlvbmFsIGVycm9yXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQW5kTm9ybWFsaXplRW5zZW1ibGVFbGVtZW50cyh2YWx1ZTogdW5rbm93bik6IHtcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgZWxlbWVudHM6IEVuc2VtYmxlRWxlbWVudElucHV0W107XG4gIGVycm9yPzogc3RyaW5nO1xufSB7XG4gIC8vIENhc2UgMTogQWxyZWFkeSBhbiBhcnJheSDigJQgdmFsaWRhdGUgZWFjaCBpdGVtXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBub3JtYWxpemVkOiBFbnNlbWJsZUVsZW1lbnRJbnB1dFtdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpdGVtID0gdmFsdWVbaV07XG4gICAgICBpZiAoIWl0ZW0gfHwgdHlwZW9mIGl0ZW0gIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYEVsZW1lbnQgYXQgaW5kZXggJHtpfSBtdXN0IGJlIGFuIG9iamVjdCB3aXRoIGVsZW1lbnRfbmFtZSBhbmQgZWxlbWVudF90eXBlYCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3Qgb2JqID0gaXRlbSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIGNvbnN0IG5hbWUgPSBvYmouZWxlbWVudF9uYW1lIHx8IG9iai5uYW1lO1xuICAgICAgY29uc3QgdHlwZSA9IG9iai5lbGVtZW50X3R5cGUgfHwgb2JqLnR5cGU7XG4gICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYEVsZW1lbnQgYXQgaW5kZXggJHtpfSBpcyBtaXNzaW5nIGVsZW1lbnRfbmFtZSAob3IgbmFtZSlgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBWYWxpZGF0ZSBfcmVtb3ZlIGlzIHN0cmljdGx5IGJvb2xlYW4gaWYgcHJlc2VudFxuICAgICAgaWYgKCdfcmVtb3ZlJyBpbiBvYmogJiYgdHlwZW9mIG9iai5fcmVtb3ZlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYEVsZW1lbnQgJyR7U3RyaW5nKG5hbWUpfScgaGFzIGludmFsaWQgX3JlbW92ZSB2YWx1ZSDigJQgbXVzdCBiZSBib29sZWFuIHRydWUsIGdvdCAke3R5cGVvZiBvYmouX3JlbW92ZX1gKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBOb3JtYWxpemUgdG8gc3RhbmRhcmQgZmllbGQgbmFtZXMsIG9ubHkgaW5jbHVkaW5nIGRlZmluZWQgdmFsdWVzXG4gICAgICBjb25zdCBlbnRyeTogRW5zZW1ibGVFbGVtZW50SW5wdXQgPSB7IC4uLm9iaiwgZWxlbWVudF9uYW1lOiBTdHJpbmcobmFtZSkgfTtcbiAgICAgIGlmICh0eXBlKSB7XG4gICAgICAgIGVudHJ5LmVsZW1lbnRfdHlwZSA9IFN0cmluZyh0eXBlKTtcbiAgICAgIH1cbiAgICAgIG5vcm1hbGl6ZWQucHVzaChlbnRyeSk7XG4gICAgfVxuXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgZWxlbWVudHM6IFtdLCBlcnJvcjogZXJyb3JzLmpvaW4oJzsgJykgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgZWxlbWVudHM6IG5vcm1hbGl6ZWQgfTtcbiAgfVxuXG4gIC8vIENhc2UgMjogRGljdC1rZXllZCBmb3JtYXQg4oCUIGNvbnZlcnQgdG8gYXJyYXlcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgY29uc3QgZGljdCA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IEVuc2VtYmxlRWxlbWVudElucHV0W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhkaWN0KSkge1xuICAgICAgaWYgKCF2YWwgfHwgdHlwZW9mIHZhbCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgZWxlbWVudHM6IFtdLFxuICAgICAgICAgIGVycm9yOiBgRWxlbWVudCAnJHtrZXl9JyBpbiBkaWN0IGZvcm1hdCBtdXN0IGJlIGFuIG9iamVjdCB3aXRoIGF0IGxlYXN0IGVsZW1lbnRfdHlwZSAob3IgdHlwZSkuIGAgK1xuICAgICAgICAgICAgYEV4cGVjdGVkOiB7IFwiJHtrZXl9XCI6IHsgdHlwZTogXCJtZW1vcnlcIiwgcm9sZTogXCJzdXBwb3J0XCIsIC4uLiB9IH1gXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBpbm5lciA9IHZhbCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIG5vcm1hbGl6ZWQucHVzaCh7XG4gICAgICAgIC4uLmlubmVyLFxuICAgICAgICBlbGVtZW50X25hbWU6IFN0cmluZyhpbm5lci5lbGVtZW50X25hbWUgfHwgaW5uZXIubmFtZSB8fCBrZXkpLFxuICAgICAgICBlbGVtZW50X3R5cGU6IFN0cmluZyhpbm5lci5lbGVtZW50X3R5cGUgfHwgaW5uZXIudHlwZSksXG4gICAgICAgIHJvbGU6IChpbm5lci5yb2xlIGFzIEVuc2VtYmxlRWxlbWVudElucHV0Wydyb2xlJ10pIHx8ICdzdXBwb3J0JyxcbiAgICAgICAgYWN0aXZhdGlvbjogKGlubmVyLmFjdGl2YXRpb24gYXMgRW5zZW1ibGVFbGVtZW50SW5wdXRbJ2FjdGl2YXRpb24nXSkgfHwgJ2Fsd2F5cycsXG4gICAgICAgIHByaW9yaXR5OiAoaW5uZXIucHJpb3JpdHkgYXMgbnVtYmVyKSA/PyA1MCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlLCBlbGVtZW50czogbm9ybWFsaXplZCB9O1xuICB9XG5cbiAgLy8gQ2FzZSAzOiBJbnZhbGlkIHR5cGVcbiAgcmV0dXJuIHtcbiAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICBlbGVtZW50czogW10sXG4gICAgZXJyb3I6IGAnZWxlbWVudHMnIG11c3QgYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyBvciBhIGRpY3Qta2V5ZWQgb2JqZWN0LiBHb3Q6ICR7dHlwZW9mIHZhbHVlfWBcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBpbmNvbWluZyBlbnNlbWJsZSBlbGVtZW50cyB3aXRoIGV4aXN0aW5nIGVsZW1lbnRzLlxuICpcbiAqIElzc3VlICM2NTgvIzY2MjogVW5pZmllZCBjb2xsZWN0aW9uIGVkaXRpbmcgc2VtYW50aWNzIOKAlCBlYWNoIGl0ZW0gaW4gdGhlIGlucHV0XG4gKiBkZWNsYXJlcyBpdHMgb3duIGludGVudCB2aWEgaXRzIHByb3BlcnRpZXM6XG4gKlxuICogLSBFeGlzdGluZyBlbGVtZW50IHdpdGggdXBkYXRlcyDihpIgbWVyZ2UgcHJvcGVydGllcyAoaW5jb21pbmcgd2lucylcbiAqIC0gTmV3IGVsZW1lbnQgKG5vdCBmb3VuZCBieSBuYW1lKSDihpIgYXBwZW5kZWRcbiAqIC0gRWxlbWVudCB3aXRoIGBfcmVtb3ZlOiB0cnVlYCDihpIgZHJvcHBlZCBmcm9tIGNvbGxlY3Rpb25cbiAqIC0gRXhpc3RpbmcgZWxlbWVudHMgbm90IGluIGluY29taW5nIOKGkiBwcmVzZXJ2ZWQgdW5jaGFuZ2VkXG4gKlxuICogVGhpcyBwYXR0ZXJuIGV4dGVuZHMgdG8gYW55IGZ1dHVyZSBncm91cGluZyB0eXBlICh3b3JrZmxvd3MsIHBpcGVsaW5lcywgdGVhbXMpLlxuICpcbiAqIEBwYXJhbSBleGlzdGluZyAtIEN1cnJlbnQgZWxlbWVudHMgYXJyYXkgZnJvbSB0aGUgZW5zZW1ibGVcbiAqIEBwYXJhbSBpbmNvbWluZyAtIE5ldy91cGRhdGVkL3JlbW92ZWQgZWxlbWVudHMgZnJvbSB0aGUgZWRpdCBpbnB1dFxuICogQHJldHVybnMgT2JqZWN0IHdpdGggbWVyZ2VkIGFycmF5IGFuZCBhbnkgd2FybmluZ3NcbiAqL1xuZnVuY3Rpb24gbWVyZ2VFbnNlbWJsZUVsZW1lbnRzKFxuICBleGlzdGluZzogRW5zZW1ibGVFbGVtZW50SW5wdXRbXSxcbiAgaW5jb21pbmc6IEVuc2VtYmxlRWxlbWVudElucHV0W11cbik6IHsgZWxlbWVudHM6IEVuc2VtYmxlRWxlbWVudElucHV0W107IHdhcm5pbmdzOiBzdHJpbmdbXSB9IHtcbiAgY29uc3QgcmVzdWx0OiBFbnNlbWJsZUVsZW1lbnRJbnB1dFtdID0gZXhpc3RpbmcubWFwKGUgPT4gKHsgLi4uZSB9KSk7XG4gIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgaW5jIG9mIGluY29taW5nKSB7XG4gICAgY29uc3QgbmFtZSA9IFN0cmluZyhpbmMuZWxlbWVudF9uYW1lIHx8IGluYy5uYW1lIHx8ICcnKTtcbiAgICBpZiAoIW5hbWUpIGNvbnRpbnVlO1xuXG4gICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IHJlc3VsdC5maW5kSW5kZXgoXG4gICAgICBlID0+IFN0cmluZyhlLmVsZW1lbnRfbmFtZSB8fCBlLm5hbWUgfHwgJycpID09PSBuYW1lXG4gICAgKTtcblxuICAgIC8vIElzc3VlICM2NjI6IF9yZW1vdmUgbWFya2VyIOKAlCBkcm9wIGVsZW1lbnQgZnJvbSBjb2xsZWN0aW9uXG4gICAgaWYgKGluYy5fcmVtb3ZlID09PSB0cnVlKSB7XG4gICAgICBpZiAoZXhpc3RpbmdJbmRleCA+PSAwKSB7XG4gICAgICAgIHJlc3VsdC5zcGxpY2UoZXhpc3RpbmdJbmRleCwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3YXJuaW5ncy5wdXNoKGBFbGVtZW50ICcke25hbWV9JyBub3QgZm91bmQgaW4gZW5zZW1ibGUg4oCUIG5vdGhpbmcgdG8gcmVtb3ZlYCk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBTdHJpcCB0cmFuc2llbnQvYWxpYXMgZmllbGRzIHRoYXQgc2hvdWxkbid0IGJlIHBlcnNpc3RlZFxuICAgIGNvbnN0IHsgX3JlbW92ZTogX2Rpc2NhcmRSZW1vdmUsIG5hbWU6IF9kaXNjYXJkTmFtZSwgdHlwZTogX2Rpc2NhcmRUeXBlLCAuLi5wZXJzaXN0YWJsZSB9ID0gaW5jO1xuXG4gICAgaWYgKGV4aXN0aW5nSW5kZXggPj0gMCkge1xuICAgICAgLy8gVXBzZXJ0OiBtZXJnZSBpbmNvbWluZyBwcm9wZXJ0aWVzIGludG8gZXhpc3RpbmcgKGluY29taW5nIHdpbnMpXG4gICAgICByZXN1bHRbZXhpc3RpbmdJbmRleF0gPSB7IC4uLnJlc3VsdFtleGlzdGluZ0luZGV4XSwgLi4ucGVyc2lzdGFibGUgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQXBwZW5kIG5ldyBlbGVtZW50XG4gICAgICByZXN1bHQucHVzaCh7IC4uLnBlcnNpc3RhYmxlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGVsZW1lbnRzOiByZXN1bHQsIHdhcm5pbmdzIH07XG59XG5cbi8qKlxuICogVmFsaWRhdGUsIG5vcm1hbGl6ZSwgYW5kIG1lcmdlIGVuc2VtYmxlIGVsZW1lbnRzIGludG8gdGhlIHVwZGF0ZSBvYmplY3QuXG4gKiBFeHRyYWN0ZWQgdG8gYXZvaWQgZHVwbGljYXRpb24gYmV0d2VlbiB0aGUgdG9wLWxldmVsIGBlbGVtZW50c2Aga2V5IGhhbmRsZXJcbiAqIGFuZCB0aGUgYG1ldGFkYXRhLmVsZW1lbnRzYCBrZXkgaGFuZGxlciAoQ2xhdWRlIHJldmlldykuXG4gKlxuICogQHJldHVybnMgQW4gZXJyb3Igc3RyaW5nIGlmIHZhbGlkYXRpb24gZmFpbHMsIG9yIG51bGwgb24gc3VjY2Vzc1xuICovXG5mdW5jdGlvbiBpc0Vuc2VtYmxlRWxlbWVudElucHV0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgRW5zZW1ibGVFbGVtZW50SW5wdXQge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGFwcGx5RW5zZW1ibGVFbGVtZW50c1VwZGF0ZShcbiAgZWxlbWVudHNJbnB1dDogdW5rbm93bixcbiAgZWxlbWVudDogdW5rbm93bixcbiAgdXBkYXRlT2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgY29sbGVjdGlvbldhcm5pbmdzOiBzdHJpbmdbXVxuKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlQW5kTm9ybWFsaXplRW5zZW1ibGVFbGVtZW50cyhlbGVtZW50c0lucHV0KTtcbiAgaWYgKCF2YWxpZGF0ZWQuc3VjY2Vzcykge1xuICAgIHJldHVybiBgSW52YWxpZCAnZWxlbWVudHMnIGZvcm1hdDogJHt2YWxpZGF0ZWQuZXJyb3J9YDtcbiAgfVxuICBjb25zdCBlbGVtZW50UmVjb3JkID0gZWxlbWVudCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgbWV0YWRhdGEgPSBlbGVtZW50UmVjb3JkLm1ldGFkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICBjb25zdCByYXdFbGVtZW50cyA9IG1ldGFkYXRhPy5lbGVtZW50cztcbiAgY29uc3QgZXhpc3RpbmdUeXBlZDogRW5zZW1ibGVFbGVtZW50SW5wdXRbXSA9IEFycmF5LmlzQXJyYXkocmF3RWxlbWVudHMpXG4gICAgPyByYXdFbGVtZW50cy5maWx0ZXIoaXNFbnNlbWJsZUVsZW1lbnRJbnB1dCkubWFwKGUgPT4gKHsgLi4uZSB9KSlcbiAgICA6IFtdO1xuICBjb25zdCBtZXJnZVJlc3VsdCA9IG1lcmdlRW5zZW1ibGVFbGVtZW50cyhleGlzdGluZ1R5cGVkLCB2YWxpZGF0ZWQuZWxlbWVudHMpO1xuICBjb2xsZWN0aW9uV2FybmluZ3MucHVzaCguLi5tZXJnZVJlc3VsdC53YXJuaW5ncyk7XG4gIGlmICghdXBkYXRlT2JqLm1ldGFkYXRhKSB7XG4gICAgdXBkYXRlT2JqLm1ldGFkYXRhID0ge307XG4gIH1cbiAgKHVwZGF0ZU9iai5tZXRhZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuZWxlbWVudHMgPSBtZXJnZVJlc3VsdC5lbGVtZW50cztcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogU3luYyBlbnNlbWJsZSBlbGVtZW50cyBmcm9tIG1ldGFkYXRhIGFmdGVyIGFuIHVwZGF0ZS5cbiAqXG4gKiBFbnNlbWJsZXMgc3RvcmUgdGhlaXIgZWxlbWVudCByZWZlcmVuY2VzIGluIG1ldGFkYXRhLmVsZW1lbnRzLFxuICogYW5kIG5lZWQgdG8gc3luYyB0aGUgaW50ZXJuYWwgZWxlbWVudHMgYXJyYXkgd2hlbiB0aGF0IGNoYW5nZXMuXG4gKlxuICogSXNzdWUgIzQ2NjogQmVmb3JlIHN5bmNpbmcsIHJlc29sdmUgYW55IG1pc3NpbmcgZWxlbWVudF90eXBlIGZpZWxkc1xuICogYnkgc2VhcmNoaW5nIHRoZSBwb3J0Zm9saW8gdmlhIHRoZSBjb250ZXh0IG1hbmFnZXJzLlxuICpcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVuc2VtYmxlIGVsZW1lbnQgdG8gc3luY1xuICogQHBhcmFtIGlucHV0IC0gVGhlIGlucHV0IG9iamVjdCB0byBjaGVjayBmb3IgZWxlbWVudCB1cGRhdGVzXG4gKiBAcGFyYW0gY29udGV4dCAtIEVsZW1lbnQgQ1JVRCBjb250ZXh0IHdpdGggbWFuYWdlcnMgZm9yIHR5cGUgcmVzb2x1dGlvblxuICovXG5hc3luYyBmdW5jdGlvbiBzeW5jRW5zZW1ibGVFbGVtZW50c0lmTmVlZGVkKFxuICBlbGVtZW50OiB1bmtub3duLFxuICBpbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGNvbnRleHQ/OiBFbGVtZW50Q3J1ZENvbnRleHRcbik6IFByb21pc2U8UmVzb2x2ZUVsZW1lbnRUeXBlc1Jlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBoYXNFbGVtZW50c1VwZGF0ZSA9IGlucHV0LmVsZW1lbnRzIHx8IChpbnB1dC5tZXRhZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik/LmVsZW1lbnRzO1xuXG4gIGlmIChoYXNFbGVtZW50c1VwZGF0ZSAmJiBlbGVtZW50IGluc3RhbmNlb2YgRW5zZW1ibGUpIHtcbiAgICAvLyBJc3N1ZSAjNDY2OiBSZXNvbHZlIG1pc3NpbmcgZWxlbWVudF90eXBlIHZpYSBwb3J0Zm9saW8gbG9va3VwIGJlZm9yZSBzeW5jXG4gICAgaWYgKGNvbnRleHQgJiYgZWxlbWVudC5tZXRhZGF0YS5lbGVtZW50cykge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzb2x2ZUVsZW1lbnRUeXBlcyhcbiAgICAgICAgZWxlbWVudC5tZXRhZGF0YS5lbGVtZW50cyxcbiAgICAgICAge1xuICAgICAgICAgIHNraWxsTWFuYWdlcjogY29udGV4dC5za2lsbE1hbmFnZXIsXG4gICAgICAgICAgdGVtcGxhdGVNYW5hZ2VyOiBjb250ZXh0LnRlbXBsYXRlTWFuYWdlcixcbiAgICAgICAgICBhZ2VudE1hbmFnZXI6IGNvbnRleHQuYWdlbnRNYW5hZ2VyLFxuICAgICAgICAgIG1lbW9yeU1hbmFnZXI6IGNvbnRleHQubWVtb3J5TWFuYWdlcixcbiAgICAgICAgICBwZXJzb25hTWFuYWdlcjogY29udGV4dC5wZXJzb25hTWFuYWdlcixcbiAgICAgICAgICBlbnNlbWJsZU1hbmFnZXI6IGNvbnRleHQuZW5zZW1ibGVNYW5hZ2VyLFxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgZWxlbWVudC5tZXRhZGF0YS5lbGVtZW50cyA9IHJlc3VsdC5yZXNvbHZlZDtcbiAgICAgIGVsZW1lbnQuc3luY0VsZW1lbnRzRnJvbU1ldGFkYXRhKCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGVsZW1lbnQuc3luY0VsZW1lbnRzRnJvbU1ldGFkYXRhKCk7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBIYW5kbGUgbWVtb3J5IGVudHJ5IHVwZGF0ZXMgd2l0aCB2YWxpZGF0aW9uIGFuZCBub3JtYWxpemF0aW9uLlxuICpcbiAqIE1lbW9yeSBlbnRyaWVzIHJlcXVpcmUgc3BlY2lhbCBoYW5kbGluZyBiZWNhdXNlIHRoZXk6XG4gKiAtIE5lZWQgSUQgZ2VuZXJhdGlvbiBpZiBtaXNzaW5nXG4gKiAtIFJlcXVpcmUgdGltZXN0YW1wIHBhcnNpbmcgYW5kIHZhbGlkYXRpb25cbiAqIC0gVXNlIGEgTWFwIHN0cnVjdHVyZSBpbnRlcm5hbGx5XG4gKlxuICogQHBhcmFtIGVudHJpZXMgLSBBcnJheSBvZiBtZW1vcnkgZW50cmllcyBmcm9tIGlucHV0XG4gKiBAcmV0dXJucyBSZXN1bHQgd2l0aCBzdWNjZXNzIHN0YXR1cywgb3B0aW9uYWwgZXJyb3IgbWVzc2FnZSwgYW5kIG5vcm1hbGl6ZWQgZW50cmllcyBtYXBcbiAqL1xuZnVuY3Rpb24gaGFuZGxlTWVtb3J5RW50cnlVcGRhdGUoZW50cmllczogdW5rbm93bltdKToge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBtZXNzYWdlPzogc3RyaW5nO1xuICBlbnRyaWVzTWFwOiBNYXA8c3RyaW5nLCB1bmtub3duPjtcbn0ge1xuICBjb25zdCBlbnRyaWVzTWFwID0gbmV3IE1hcCgpO1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZW50cnkgPSBlbnRyaWVzW2ldO1xuICAgIGlmICghZW50cnkgfHwgdHlwZW9mIGVudHJ5ICE9PSAnb2JqZWN0Jykge1xuICAgICAgZXJyb3JzLnB1c2goYEVudHJ5IGF0IGluZGV4ICR7aX0gaXMgbm90IGEgdmFsaWQgb2JqZWN0YCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnRyeU9iaiA9IGVudHJ5IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IGVudHJ5SWQgPSBlbnRyeU9iai5pZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaWYgKCFlbnRyeUlkKSB7XG4gICAgICBlbnRyeU9iai5pZCA9IGdlbmVyYXRlTWVtb3J5SWQoKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdGltZXN0YW1wID0gZW50cnlPYmoudGltZXN0YW1wID8gbmV3IERhdGUoZW50cnlPYmoudGltZXN0YW1wIGFzIHN0cmluZykgOiBuZXcgRGF0ZSgpO1xuICAgICAgaWYgKE51bWJlci5pc05hTih0aW1lc3RhbXAuZ2V0VGltZSgpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdGltZXN0YW1wJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRFbnRyeSA9IHtcbiAgICAgICAgLi4uZW50cnlPYmosXG4gICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgdGFnczogQXJyYXkuaXNBcnJheShlbnRyeU9iai50YWdzKSA/IGVudHJ5T2JqLnRhZ3MgOiBbXSxcbiAgICAgICAgbWV0YWRhdGE6IHR5cGVvZiBlbnRyeU9iai5tZXRhZGF0YSA9PT0gJ29iamVjdCcgJiYgZW50cnlPYmoubWV0YWRhdGEgIT09IG51bGwgPyBlbnRyeU9iai5tZXRhZGF0YSA6IHt9XG4gICAgICB9O1xuXG4gICAgICBlbnRyaWVzTWFwLnNldChlbnRyeU9iai5pZCwgbm9ybWFsaXplZEVudHJ5KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGVycm9ycy5wdXNoKGBFbnRyeSAnJHtlbnRyeU9iai5pZH0nIGhhcyBpbnZhbGlkIHRpbWVzdGFtcGApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBtZXNzYWdlOiBlcnJvcnMuam9pbignXFxuJyksIGVudHJpZXNNYXAgfTtcbiAgfVxuXG4gIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIGVudHJpZXNNYXAgfTtcbn1cblxuLyoqXG4gKiBFZGl0IGFuIGV4aXN0aW5nIGVsZW1lbnQgdXNpbmcgR3JhcGhRTC1hbGlnbmVkIG5lc3RlZCBpbnB1dC5cbiAqXG4gKiBAcGFyYW0gY29udGV4dCAtIEVsZW1lbnQgQ1JVRCBjb250ZXh0IHdpdGggbWFuYWdlcnNcbiAqIEBwYXJhbSBhcmdzIC0gRWRpdCBhcmd1bWVudHMgKG5hbWUsIHR5cGUsIGlucHV0KVxuICogQHBhcmFtIHZhbGlkYXRpb25TZXJ2aWNlIC0gT3B0aW9uYWwgdmFsaWRhdGlvbiBzZXJ2aWNlIGZvciBESSAoY3JlYXRlcyBkZWZhdWx0IGlmIG5vdCBwcm92aWRlZClcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVkaXRFbGVtZW50KFxuICBjb250ZXh0OiBFbGVtZW50Q3J1ZENvbnRleHQsXG4gIGFyZ3M6IEVkaXRFbGVtZW50QXJncyxcbiAgdmFsaWRhdGlvblNlcnZpY2U/OiBWYWxpZGF0aW9uU2VydmljZVxuKSB7XG4gIGF3YWl0IGNvbnRleHQuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcblxuICAvLyBVc2UgaW5qZWN0ZWQgdmFsaWRhdGlvbiBzZXJ2aWNlIG9yIGNyZWF0ZSBkZWZhdWx0XG4gIGNvbnN0IHZhbGlkYXRvciA9IHZhbGlkYXRpb25TZXJ2aWNlID8/IG5ldyBWYWxpZGF0aW9uU2VydmljZSgpO1xuXG4gIGNvbnN0IHsgbmFtZSwgdHlwZSwgaW5wdXQgfSA9IGFyZ3M7XG5cbiAgLy8gVmFsaWRhdGUgaW5wdXQgaXMgcHJvdmlkZWRcbiAgaWYgKCFpbnB1dCB8fCB0eXBlb2YgaW5wdXQgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGVycm9yKCdNaXNzaW5nIG9yIGludmFsaWQgaW5wdXQgb2JqZWN0LiBQcm92aWRlIGZpZWxkcyB0byB1cGRhdGUgYXMgYSBuZXN0ZWQgb2JqZWN0LicpO1xuICB9XG5cbiAgY29uc3QgeyB0eXBlOiBub3JtYWxpemVkVHlwZSB9ID0gbm9ybWFsaXplRWxlbWVudFR5cGVJbnB1dCh0eXBlKTtcblxuICBpZiAoIW5vcm1hbGl6ZWRUeXBlKSB7XG4gICAgcmV0dXJuIGVycm9yKGBJbnZhbGlkIGVsZW1lbnQgdHlwZSAnJHt0eXBlfScuIFZhbGlkIHR5cGVzOiAke2Zvcm1hdFZhbGlkRWxlbWVudFR5cGVzTGlzdCgpfWApO1xuICB9XG5cbiAgY29uc3QgbWFuYWdlciA9IGdldE1hbmFnZXJGb3JUeXBlKGNvbnRleHQsIG5vcm1hbGl6ZWRUeXBlKTtcbiAgaWYgKCFtYW5hZ2VyKSB7XG4gICAgY29uc3QgbGFiZWxQbHVyYWwgPSBnZXRFbGVtZW50VHlwZUxhYmVsKG5vcm1hbGl6ZWRUeXBlLCB7IHBsdXJhbDogdHJ1ZSB9KTtcbiAgICByZXR1cm4gZXJyb3IoYEVsZW1lbnQgdHlwZSAnJHtsYWJlbFBsdXJhbH0nIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGZvciBlZGl0aW5nYCk7XG4gIH1cblxuICBjb25zdCBlbGVtZW50ID0gYXdhaXQgcmVzb2x2ZUVsZW1lbnRCeU5hbWUobWFuYWdlciwgbm9ybWFsaXplZFR5cGUsIG5hbWUpO1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICBjb25zdCBsYWJlbCA9IGdldEVsZW1lbnRUeXBlTGFiZWwobm9ybWFsaXplZFR5cGUpO1xuICAgIHRocm93IG5ldyBFbGVtZW50Tm90Rm91bmRFcnJvcihsYWJlbCwgbmFtZSk7XG4gIH1cblxuICAvLyBDaGVjayBmb3IgdW5rbm93biBwcm9wZXJ0aWVzIGFuZCBnZW5lcmF0ZSB3YXJuaW5nc1xuICBjb25zdCB1bmtub3duUHJvcGVydHlXYXJuaW5ncyA9IGRldGVjdFVua25vd25NZXRhZGF0YVByb3BlcnRpZXMoXG4gICAgbm9ybWFsaXplZFR5cGUsXG4gICAgaW5wdXQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKTtcblxuICAvLyBBbHNvIHZhbGlkYXRlIG5lc3RlZCBtZXRhZGF0YSBzdWItb2JqZWN0ICh0aGUgdG9wLWxldmVsICdtZXRhZGF0YScga2V5IGlzXG4gIC8vIHNraXBwZWQgYnkgZGV0ZWN0VW5rbm93bk1ldGFkYXRhUHJvcGVydGllcyBhcyBhIHNwZWNpYWwgcm91dGUgZmllbGQsIHNvXG4gIC8vIGRhbmdlcm91cy91bmtub3duIHByb3BlcnRpZXMgaW5zaWRlIGl0IHdvdWxkIGdvIHVuY2hlY2tlZCBvdGhlcndpc2UpXG4gIGlmIChpbnB1dC5tZXRhZGF0YSAmJiB0eXBlb2YgaW5wdXQubWV0YWRhdGEgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGlucHV0Lm1ldGFkYXRhKSkge1xuICAgIGNvbnN0IG5lc3RlZFdhcm5pbmdzID0gZGV0ZWN0VW5rbm93bk1ldGFkYXRhUHJvcGVydGllcyhcbiAgICAgIG5vcm1hbGl6ZWRUeXBlLFxuICAgICAgaW5wdXQubWV0YWRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICApO1xuICAgIHVua25vd25Qcm9wZXJ0eVdhcm5pbmdzLnB1c2goLi4ubmVzdGVkV2FybmluZ3MpO1xuICB9XG5cbiAgY29uc3Qgd2FybmluZ1RleHQgPSBmb3JtYXRVbmtub3duUHJvcGVydHlXYXJuaW5ncyh1bmtub3duUHJvcGVydHlXYXJuaW5ncyk7XG5cbiAgaWYgKHVua25vd25Qcm9wZXJ0eVdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICBsb2dnZXIud2FybihgW2VkaXRFbGVtZW50XSBVbmtub3duIHByb3BlcnRpZXMgZGV0ZWN0ZWRgLCB7XG4gICAgICBlbGVtZW50VHlwZTogbm9ybWFsaXplZFR5cGUsXG4gICAgICBlbGVtZW50TmFtZTogbmFtZSxcbiAgICAgIHdhcm5pbmdDb3VudDogdW5rbm93blByb3BlcnR5V2FybmluZ3MubGVuZ3RoLFxuICAgICAgdW5rbm93blByb3BlcnRpZXM6IHVua25vd25Qcm9wZXJ0eVdhcm5pbmdzLm1hcCh3ID0+ICh7XG4gICAgICAgIHByb3BlcnR5OiB3LnByb3BlcnR5LFxuICAgICAgICBzdWdnZXN0aW9uOiB3LnN1Z2dlc3Rpb25cbiAgICAgIH0pKVxuICAgIH0pO1xuICB9XG5cbiAgLy8gSXNzdWUgIzE1OTE6IFZhbGlkYXRlIGVsZW1lbnQtc3BlY2lmaWMgY29uc3RyYWludHMgYmVmb3JlIGF0dGVtcHRpbmcgZWRpdHNcbiAgLy8gTWVtb3J5IGNvbnRlbnQgaXMgcmVhZC1vbmx5IChhcHBlbmQtb25seSBhcmNoaXRlY3R1cmUpIC0gcmVqZWN0IGF0dGVtcHRzIHRvIGVkaXQgaXRcbiAgaWYgKG5vcm1hbGl6ZWRUeXBlID09PSBFbGVtZW50VHlwZS5NRU1PUlkgJiYgJ2NvbnRlbnQnIGluIGlucHV0KSB7XG4gICAgcmV0dXJuIGVycm9yKFxuICAgICAgYE1lbW9yeSBjb250ZW50IGNhbm5vdCBiZSBtb2RpZmllZCB2aWEgZWRpdF9lbGVtZW50LiBgICtcbiAgICAgIGBNZW1vcnkgdXNlcyBhbiBhcHBlbmQtb25seSBhcmNoaXRlY3R1cmUuIGAgK1xuICAgICAgYFVzZSB0aGUgJ2FkZEVudHJ5JyBvcGVyYXRpb24gdG8gYWRkIG5ldyBlbnRyaWVzIHRvIHRoaXMgbWVtb3J5LmBcbiAgICApO1xuICB9XG5cbiAgLy8gSXNzdWUgIzY2MjogVmFsaWRhdGUgZmllbGQgdHlwZXMgYmVmb3JlIGFwcGx5aW5nIChwcmV2ZW50cyBzaWxlbnQgZGF0YSBjb3JydXB0aW9uKVxuICBjb25zdCB0eXBlRXJyb3JzID0gdmFsaWRhdGVGaWVsZFR5cGVzKGlucHV0LCBub3JtYWxpemVkVHlwZSk7XG4gIGlmICh0eXBlRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gZXJyb3IoYEZpZWxkIHR5cGUgdmFsaWRhdGlvbiBmYWlsZWQ6XFxuJHt0eXBlRXJyb3JzLm1hcChlID0+IGAgIOKAoiAke2V9YCkuam9pbignXFxuJyl9YCk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBzdHJpbmcgZmllbGQgdmFsdWVzIHVzaW5nIGluamVjdGVkIHZhbGlkYXRvclxuICBmb3IgKGNvbnN0IFtmaWVsZCwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGlucHV0KSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uRXJyb3IgPSB2YWxpZGF0ZUZpZWxkVmFsdWUodmFsaWRhdG9yLCBmaWVsZCwgdmFsdWUpO1xuICAgICAgaWYgKHZhbGlkYXRpb25FcnJvcikge1xuICAgICAgICByZXR1cm4gZXJyb3IoYEludmFsaWQgdmFsdWUgZm9yICcke2ZpZWxkfSc6ICR7dmFsaWRhdGlvbkVycm9yfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEJ1aWxkIHRoZSB1cGRhdGUgb2JqZWN0LCBtYXBwaW5nIHRvcC1sZXZlbCBmaWVsZHMgdG8gbWV0YWRhdGEgd2hlcmUgYXBwcm9wcmlhdGVcbiAgLy8gSXNzdWUgIzU2NTogVXNlIHR5cGUtc3BlY2lmaWMgbWV0YWRhdGEgcHJvcGVydGllcyBmcm9tIGF1dGhvcml0YXRpdmUgc291cmNlXG4gIGNvbnN0IG1ldGFkYXRhRmllbGRzID0gS05PV05fTUVUQURBVEFfUFJPUEVSVElFU1tub3JtYWxpemVkVHlwZV0gPz8gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IHVwZGF0ZU9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgY29uc3QgdW5yZWNvZ25pemVkRmllbGRXYXJuaW5nczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgY29sbGVjdGlvbldhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBhcHBsaWVkRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBza2lwcGVkRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8vIEZpZWxkcyBoYW5kbGVkIGJ5IGRlZGljYXRlZCBicmFuY2hlcyAobm90IG1ldGFkYXRhIHJvdXRpbmcpXG4gIGNvbnN0IHNwZWNpYWxSb3V0ZUZpZWxkcyA9IG5ldyBTZXQoWydpbnN0cnVjdGlvbnMnLCAnY29udGVudCcsICdlbGVtZW50cycsICdtZXRhZGF0YScsICdlbnRyaWVzJywgJ3ZlcnNpb24nXSk7XG5cbiAgLy8gQ29udGVudCBjb250ZXh0IG1hcCBzaGFyZWQgYnkgaW5zdHJ1Y3Rpb25zIGFuZCBjb250ZW50IHZhbGlkYXRpb24gYnJhbmNoZXNcbiAgY29uc3QgY29udGVudENvbnRleHRNYXA6IFJlY29yZDxzdHJpbmcsICdwZXJzb25hJyB8ICdza2lsbCcgfCAndGVtcGxhdGUnIHwgJ2FnZW50JyB8ICdtZW1vcnknPiA9IHtcbiAgICBbRWxlbWVudFR5cGUuQUdFTlRdOiAnYWdlbnQnLFxuICAgIFtFbGVtZW50VHlwZS5TS0lMTF06ICdza2lsbCcsXG4gICAgW0VsZW1lbnRUeXBlLlRFTVBMQVRFXTogJ3RlbXBsYXRlJyxcbiAgICBbRWxlbWVudFR5cGUuUEVSU09OQV06ICdwZXJzb25hJyxcbiAgICBbRWxlbWVudFR5cGUuTUVNT1JZXTogJ21lbW9yeScsXG4gIH07XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoaW5wdXQpKSB7XG4gICAgLy8gU2tpcCBkYW5nZXJvdXMgcHJvcGVydGllc1xuICAgIGlmIChEQU5HRVJPVVNfUFJPUEVSVElFUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICBza2lwcGVkRmllbGRzLnB1c2goa2V5KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIFNraXAgcmVhZC1vbmx5IGZpZWxkc1xuICAgIGlmIChSRUFEX09OTFlfRklFTERTLmhhcyhrZXkpKSB7XG4gICAgICBsb2dnZXIud2FybihgW2VkaXRFbGVtZW50XSBTa2lwcGluZyByZWFkLW9ubHkgZmllbGQ6ICR7a2V5fWApO1xuICAgICAgc2tpcHBlZEZpZWxkcy5wdXNoKGtleSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBFdmVyeSBicmFuY2ggYmVsb3cgYXBwbGllcyB0aGUgZmllbGQg4oCUIHRyYWNrIG9uY2UgYXQgdGhlIGVuZFxuICAgIGxldCBmaWVsZEFwcGxpZWQgPSB0cnVlO1xuXG4gICAgLy8gTWFwIGtub3duIG1ldGFkYXRhIGZpZWxkcyBhdXRvbWF0aWNhbGx5ICh0eXBlLXNwZWNpZmljKVxuICAgIGlmIChtZXRhZGF0YUZpZWxkcy5oYXMoa2V5KSAmJiAhc3BlY2lhbFJvdXRlRmllbGRzLmhhcyhrZXkpKSB7XG4gICAgICBpZiAoIXVwZGF0ZU9iai5tZXRhZGF0YSkge1xuICAgICAgICB1cGRhdGVPYmoubWV0YWRhdGEgPSB7fTtcbiAgICAgIH1cbiAgICAgICh1cGRhdGVPYmoubWV0YWRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV0gPSB2YWx1ZTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2VsZW1lbnRzJyAmJiBub3JtYWxpemVkVHlwZSA9PT0gRWxlbWVudFR5cGUuRU5TRU1CTEUpIHtcbiAgICAgIC8vIElzc3VlICM2NTg6IFZhbGlkYXRlIGFuZCBub3JtYWxpemUgZWxlbWVudHMgaW5wdXQgKGFycmF5IG9yIGRpY3QgZm9ybWF0KVxuICAgICAgY29uc3QgZWxlbUVycm9yID0gYXBwbHlFbnNlbWJsZUVsZW1lbnRzVXBkYXRlKHZhbHVlLCBlbGVtZW50LCB1cGRhdGVPYmosIGNvbGxlY3Rpb25XYXJuaW5ncyk7XG4gICAgICBpZiAoZWxlbUVycm9yKSByZXR1cm4gZXJyb3IoZWxlbUVycm9yKTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ21ldGFkYXRhJyAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBtZXRhVmFsdWUgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAgICAgLy8gSWYgbWV0YWRhdGEuZWxlbWVudHMgaXMgcHJvdmlkZWQgZm9yIGFuIGVuc2VtYmxlLCBleHRyYWN0IGFuZCByb3V0ZSB0aHJvdWdoXG4gICAgICAvLyB0aGUgZW5zZW1ibGUgZWxlbWVudHMgaGFuZGxlciBmb3IgcHJvcGVyIHZhbGlkYXRpb24vbm9ybWFsaXphdGlvbi9tZXJnZS5cbiAgICAgIGlmIChub3JtYWxpemVkVHlwZSA9PT0gRWxlbWVudFR5cGUuRU5TRU1CTEUgJiYgbWV0YVZhbHVlLmVsZW1lbnRzKSB7XG4gICAgICAgIGNvbnN0IGVsZW1FcnJvciA9IGFwcGx5RW5zZW1ibGVFbGVtZW50c1VwZGF0ZShtZXRhVmFsdWUuZWxlbWVudHMsIGVsZW1lbnQsIHVwZGF0ZU9iaiwgY29sbGVjdGlvbldhcm5pbmdzKTtcbiAgICAgICAgaWYgKGVsZW1FcnJvcikgcmV0dXJuIGVycm9yKGVsZW1FcnJvcik7XG5cbiAgICAgICAgLy8gUmVtb3ZlIGVsZW1lbnRzIGZyb20gbWV0YWRhdGEgdmFsdWUgYmVmb3JlIGRlZXAgbWVyZ2UgdG8gYXZvaWQgZG91YmxlLXByb2Nlc3NpbmdcbiAgICAgICAgY29uc3QgeyBlbGVtZW50czogX2V4dHJhY3RlZCwgLi4ucmVzdE1ldGFkYXRhIH0gPSBtZXRhVmFsdWU7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhyZXN0TWV0YWRhdGEpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB1cGRhdGVPYmoubWV0YWRhdGEgPSBkZWVwTWVyZ2UoXG4gICAgICAgICAgICB1cGRhdGVPYmoubWV0YWRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICAgICAgICByZXN0TWV0YWRhdGEsXG4gICAgICAgICAgICBNRVJHRV9PUFRJT05TXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTWVyZ2UgbmVzdGVkIG1ldGFkYXRhIHdpdGggc2VjdXJpdHkgb3B0aW9uc1xuICAgICAgICB1cGRhdGVPYmoubWV0YWRhdGEgPSBkZWVwTWVyZ2UoXG4gICAgICAgICAgKHVwZGF0ZU9iai5tZXRhZGF0YSB8fCB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICAgICAgbWV0YVZhbHVlLFxuICAgICAgICAgIE1FUkdFX09QVElPTlNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2luc3RydWN0aW9ucycgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gSXNzdWUgIzYwMiByZXNvbHZlZDogJ2luc3RydWN0aW9ucycgaXMgYSBmaXJzdC1jbGFzcyBmaWVsZCAoYmVoYXZpb3JhbCBkaXJlY3RpdmVzKVxuICAgICAgY29uc3QgY29udGVudFZhbGlkYXRpb24gPSBDb250ZW50VmFsaWRhdG9yLnZhbGlkYXRlQW5kU2FuaXRpemUodmFsdWUsIHtcbiAgICAgICAgbWF4TGVuZ3RoOiBTRUNVUklUWV9MSU1JVFMuTUFYX0NPTlRFTlRfTEVOR1RILFxuICAgICAgICBjb250ZW50Q29udGV4dDogY29udGVudENvbnRleHRNYXBbbm9ybWFsaXplZFR5cGVdXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHNhbml0aXplZEluc3RydWN0aW9ucyA9IGNvbnRlbnRWYWxpZGF0aW9uLnNhbml0aXplZENvbnRlbnQgfHwgJyc7XG4gICAgICAvLyBTZXQgaW5zdHJ1Y3Rpb25zIG9uIHRoZSBlbGVtZW50IGRpcmVjdGx5IChhbGwgdHlwZXMgbm93IGhhdmUgdGhpcyBwcm9wZXJ0eSlcbiAgICAgIChlbGVtZW50IGFzIGFueSkuaW5zdHJ1Y3Rpb25zID0gc2FuaXRpemVkSW5zdHJ1Y3Rpb25zO1xuICAgICAgLy8gRm9yIGFnZW50cywgYWxzbyB1cGRhdGUgZXh0ZW5zaW9ucy5pbnN0cnVjdGlvbnMgZm9yIGJhY2t3YXJkIGNvbXBhdFxuICAgICAgaWYgKG5vcm1hbGl6ZWRUeXBlID09PSBFbGVtZW50VHlwZS5BR0VOVCkge1xuICAgICAgICBpZiAoIWVsZW1lbnQuZXh0ZW5zaW9ucykge1xuICAgICAgICAgIChlbGVtZW50IGFzIGFueSkuZXh0ZW5zaW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIChlbGVtZW50IGFzIGFueSkuZXh0ZW5zaW9ucy5pbnN0cnVjdGlvbnMgPSBzYW5pdGl6ZWRJbnN0cnVjdGlvbnM7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdjb250ZW50JyAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBJc3N1ZSAjNTg1LyM2MDI6IEhhbmRsZSBjb250ZW50IHVwZGF0ZXMgKHJlZmVyZW5jZSBtYXRlcmlhbClcbiAgICAgIGNvbnN0IGNvbnRlbnRWYWxpZGF0aW9uID0gQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZUFuZFNhbml0aXplKHZhbHVlLCB7XG4gICAgICAgIG1heExlbmd0aDogU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSCxcbiAgICAgICAgY29udGVudENvbnRleHQ6IGNvbnRlbnRDb250ZXh0TWFwW25vcm1hbGl6ZWRUeXBlXVxuICAgICAgfSk7XG4gICAgICBjb25zdCBzYW5pdGl6ZWRDb250ZW50ID0gY29udGVudFZhbGlkYXRpb24uc2FuaXRpemVkQ29udGVudCB8fCAnJztcbiAgICAgIC8vIFNldCBjb250ZW50IG9uIHRoZSBlbGVtZW50IGRpcmVjdGx5IChhbGwgdHlwZXMgbm93IGhhdmUgdGhpcyBwcm9wZXJ0eSlcbiAgICAgIChlbGVtZW50IGFzIGFueSkuY29udGVudCA9IHNhbml0aXplZENvbnRlbnQ7XG4gICAgfSBlbHNlIGlmIChzcGVjaWFsUm91dGVGaWVsZHMuaGFzKGtleSkpIHtcbiAgICAgIC8vIFNwZWNpYWwgcm91dGUgZmllbGQg4oCUIGhhbmRsZWQgZWxzZXdoZXJlLCBza2lwXG4gICAgICBmaWVsZEFwcGxpZWQgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSXNzdWUgIzU2NTogRmllbGQgbm90IGluIHR5cGUtc3BlY2lmaWMgbWV0YWRhdGEgc2V0IGFuZCBub3QgYSBzcGVjaWFsIHJvdXRlIOKAlFxuICAgICAgLy8gc3RpbGwgcm91dGUgdG8gdXBkYXRlT2JqIGZvciBiYWNrd2FyZCBjb21wYXQsIGJ1dCB3YXJuIHRoYXQgaXQgbWF5IG5vdCBwZXJzaXN0XG4gICAgICB1cGRhdGVPYmpba2V5XSA9IHZhbHVlO1xuICAgICAgdW5yZWNvZ25pemVkRmllbGRXYXJuaW5ncy5wdXNoKFxuICAgICAgICBgRmllbGQgJyR7a2V5fScgaXMgbm90IGEgcmVjb2duaXplZCBtZXRhZGF0YSBwcm9wZXJ0eSBmb3IgJHtnZXRFbGVtZW50VHlwZUxhYmVsKG5vcm1hbGl6ZWRUeXBlKX0g4oCUIGl0IG1heSBub3QgcGVyc2lzdCBhZnRlciBzYXZlLmBcbiAgICAgICk7XG4gICAgICBsb2dnZXIud2FybihgW2VkaXRFbGVtZW50XSBVbnJlY29nbml6ZWQgZmllbGQgJyR7a2V5fScgZm9yICR7bm9ybWFsaXplZFR5cGV9LCByb3V0aW5nIHRvIGVsZW1lbnQgb2JqZWN0YCwge1xuICAgICAgICBlbGVtZW50VHlwZTogbm9ybWFsaXplZFR5cGUsXG4gICAgICAgIGVsZW1lbnROYW1lOiBuYW1lLFxuICAgICAgICBmaWVsZDoga2V5LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGZpZWxkQXBwbGllZCkge1xuICAgICAgYXBwbGllZEZpZWxkcy5wdXNoKGtleSk7XG4gICAgfVxuICB9XG5cbiAgLy8gRGVlcCBtZXJnZSB0aGUgdXBkYXRlIGludG8gdGhlIGVsZW1lbnQgd2l0aCBzZWN1cml0eSBvcHRpb25zXG4gIGNvbnN0IGVsZW1lbnREYXRhID0gZWxlbWVudCBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBtZXJnZWREYXRhID0gZGVlcE1lcmdlKGVsZW1lbnREYXRhLCB1cGRhdGVPYmosIE1FUkdFX09QVElPTlMpO1xuXG4gIC8vIEFwcGx5IG1lcmdlZCBkYXRhIGJhY2sgdG8gZWxlbWVudFxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtZXJnZWREYXRhKSkge1xuICAgIGlmIChrZXkgIT09ICdtZXRhZGF0YScpIHtcbiAgICAgIChlbGVtZW50IGFzIGFueSlba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBtZXRhZGF0YSBzZXBhcmF0ZWx5IHRvIHByZXNlcnZlIGVsZW1lbnQgc3RydWN0dXJlXG4gIGlmIChtZXJnZWREYXRhLm1ldGFkYXRhICYmIGVsZW1lbnQubWV0YWRhdGEpIHtcbiAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQubWV0YWRhdGEsIG1lcmdlZERhdGEubWV0YWRhdGEpO1xuICB9XG5cbiAgLy8gSGFuZGxlIG1lbW9yeSBlbnRyaWVzIHNwZWNpYWxseSAoZXh0cmFjdGVkIGZvciBjbGFyaXR5KVxuICBpZiAobm9ybWFsaXplZFR5cGUgPT09IEVsZW1lbnRUeXBlLk1FTU9SWSAmJiBpbnB1dC5lbnRyaWVzICYmIEFycmF5LmlzQXJyYXkoaW5wdXQuZW50cmllcykpIHtcbiAgICBjb25zdCBtZW1vcnlSZXN1bHQgPSBoYW5kbGVNZW1vcnlFbnRyeVVwZGF0ZShpbnB1dC5lbnRyaWVzKTtcbiAgICBpZiAoIW1lbW9yeVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICByZXR1cm4gZXJyb3IoYE1lbW9yeSBlbnRyeSB2YWxpZGF0aW9uIGVycm9yczpcXG4ke21lbW9yeVJlc3VsdC5tZXNzYWdlfVxcblxcblZhbGlkIGVudHJpZXMgd2VyZSBzYXZlZC5gKTtcbiAgICB9XG4gICAgKGVsZW1lbnQgYXMgYW55KS5lbnRyaWVzID0gbWVtb3J5UmVzdWx0LmVudHJpZXNNYXA7XG4gIH1cblxuICAvLyBTeW5jIGVuc2VtYmxlIGVsZW1lbnRzIGZyb20gbWV0YWRhdGEgKGV4dHJhY3RlZCBmb3IgY2xhcml0eSlcbiAgLy8gSXNzdWUgIzQ2NjogUmVzb2x2ZSBlbGVtZW50X3R5cGUgdmlhIHBvcnRmb2xpbyBsb29rdXAgYmVmb3JlIHN5bmMsIHN1cmZhY2Ugd2FybmluZ3NcbiAgbGV0IHJlc29sdXRpb25XYXJuaW5nVGV4dCA9ICcnO1xuICBpZiAobm9ybWFsaXplZFR5cGUgPT09IEVsZW1lbnRUeXBlLkVOU0VNQkxFKSB7XG4gICAgY29uc3QgcmVzb2x1dGlvblJlc3VsdCA9IGF3YWl0IHN5bmNFbnNlbWJsZUVsZW1lbnRzSWZOZWVkZWQoZWxlbWVudCwgaW5wdXQsIGNvbnRleHQpO1xuICAgIGlmIChyZXNvbHV0aW9uUmVzdWx0KSB7XG4gICAgICByZXNvbHV0aW9uV2FybmluZ1RleHQgPSBmb3JtYXRFbGVtZW50UmVzb2x1dGlvbldhcm5pbmdzKHJlc29sdXRpb25SZXN1bHQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZpeCAjOTExOiBOb3JtYWxpemUgbWV0YWRhdGEgYWZ0ZXIgbWVyZ2UgdG8gZW5zdXJlIHN0cnVjdHVyYWwgY29uc2lzdGVuY3kuXG4gIC8vIEJhc2VFbGVtZW50IGNvbnN0cnVjdG9yIHJ1bnMgbm9ybWFsaXplTWV0YWRhdGEgb24gY3JlYXRlL2xvYWQsIGJ1dCB0aGUgZWRpdCBwYXRoXG4gIC8vIG1vZGlmaWVzIG1ldGFkYXRhIGluLXBsYWNlLiBUaGlzIGVuc3VyZXMgZXNzZW50aWFsIGRlZmF1bHRzIHN1cnZpdmUgZWRpdHMuXG4gIGlmIChlbGVtZW50Lm1ldGFkYXRhKSB7XG4gICAgZWxlbWVudC5tZXRhZGF0YS5kZXNjcmlwdGlvbiA/Pz0gJyc7XG4gICAgZWxlbWVudC5tZXRhZGF0YS50YWdzID8/PSBbXTtcbiAgICAvLyBVcGRhdGUgbW9kaWZpZWQgdGltZXN0YW1wXG4gICAgZWxlbWVudC5tZXRhZGF0YS5tb2RpZmllZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgfVxuXG4gIC8vIEhhbmRsZSB2ZXJzaW9uIHVwZGF0ZXNcbiAgaWYgKGlucHV0LnZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHVwZGF0ZSA9IHVwZGF0ZVZlcnNpb25FeHBsaWNpdChlbGVtZW50LCBTdHJpbmcoaW5wdXQudmVyc2lvbikpO1xuICAgIGlmICghdXBkYXRlLnN1Y2Nlc3MpIHtcbiAgICAgIHJldHVybiBlcnJvcih1cGRhdGUubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHVwZGF0ZSB2ZXJzaW9uJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGF1dG9JbmNyZW1lbnRWZXJzaW9uKGVsZW1lbnQpO1xuICB9XG5cbiAgLy8gRGV0ZXJtaW5lIGZpbGUgcGF0aCBmb3Igc2F2aW5nXG4gIGNvbnN0IGZpbGVQYXRoQ2FuZGlkYXRlID0gdHlwZW9mIChlbGVtZW50IGFzIGFueSkuZ2V0RmlsZVBhdGggPT09ICdmdW5jdGlvbidcbiAgICA/IChlbGVtZW50IGFzIGFueSkuZ2V0RmlsZVBhdGgoKVxuICAgIDogKChlbGVtZW50IGFzIGFueSkuZmlsZVBhdGggfHwgKGVsZW1lbnQgYXMgYW55KS5maWxlbmFtZSk7XG4gIGNvbnN0IGZpbGVuYW1lID0gdHlwZW9mIGZpbGVQYXRoQ2FuZGlkYXRlID09PSAnc3RyaW5nJyAmJiBmaWxlUGF0aENhbmRpZGF0ZS5sZW5ndGggPiAwXG4gICAgPyBmaWxlUGF0aENhbmRpZGF0ZVxuICAgIDogZ2V0RWxlbWVudEZpbGVuYW1lKG5vcm1hbGl6ZWRUeXBlLCBlbGVtZW50Lm1ldGFkYXRhPy5uYW1lIHx8IG5hbWUpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgbWFuYWdlci5zYXZlKGVsZW1lbnQsIGZpbGVuYW1lKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGVycm9yKGBGYWlsZWQgdG8gc2F2ZSBlbGVtZW50OiAke2VyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YCk7XG4gIH1cblxuICBjb25zdCBsYWJlbCA9IGdldEVsZW1lbnRUeXBlTGFiZWwobm9ybWFsaXplZFR5cGUpO1xuICBjb25zdCBkaXNwbGF5TmFtZSA9IGVsZW1lbnQubWV0YWRhdGE/Lm5hbWUgfHwgbmFtZTtcbiAgY29uc3QgdXBkYXRlZEZpZWxkcyA9IGFwcGxpZWRGaWVsZHMuam9pbignLCAnKTtcblxuICAvLyBJc3N1ZSAjMTY1NjogSWYgYWxsIGZpZWxkcyB3ZXJlIHNpbGVudGx5IHNraXBwZWQsIHJlcG9ydCBob25lc3RseVxuICBpZiAoYXBwbGllZEZpZWxkcy5sZW5ndGggPT09IDAgJiYgc2tpcHBlZEZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgdGV4dDogYOKaoO+4jyBObyBmaWVsZHMgYXBwbGllZCB0byAke2xhYmVsfSAnJHtkaXNwbGF5TmFtZX0nLiBgICtcbiAgICAgICAgICBgU2tpcHBlZDogJHtza2lwcGVkRmllbGRzLmpvaW4oJywgJyl9IChkYW5nZXJvdXMgb3IgcmVhZC1vbmx5IGZpZWxkcyBhcmUgbm90IGVkaXRhYmxlKS5gXG4gICAgICB9XVxuICAgIH07XG4gIH1cblxuICAvLyBJc3N1ZSAjNTY1OiBJbmNsdWRlIHdhcm5pbmdzIGZvciB1bnJlY29nbml6ZWQgZmllbGRzIGluIHJlc3BvbnNlXG4gIGxldCB1bnJlY29nbml6ZWRXYXJuaW5nVGV4dCA9ICcnO1xuICBpZiAodW5yZWNvZ25pemVkRmllbGRXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgbGluZXMgPSBbJ+KaoO+4jyAqKlVucmVjb2duaXplZCBGaWVsZCBXYXJuaW5nczoqKiddO1xuICAgIGZvciAoY29uc3Qgd2FybmluZyBvZiB1bnJlY29nbml6ZWRGaWVsZFdhcm5pbmdzKSB7XG4gICAgICBsaW5lcy5wdXNoKGAgICDigKIgJHt3YXJuaW5nfWApO1xuICAgIH1cbiAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICB1bnJlY29nbml6ZWRXYXJuaW5nVGV4dCA9IGxpbmVzLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgLy8gSXNzdWUgIzY2MjogSW5jbHVkZSBjb2xsZWN0aW9uIG9wZXJhdGlvbiB3YXJuaW5nc1xuICBsZXQgY29sbGVjdGlvbldhcm5pbmdUZXh0ID0gJyc7XG4gIGlmIChjb2xsZWN0aW9uV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGxpbmVzID0gWyfimqDvuI8gKipDb2xsZWN0aW9uIFdhcm5pbmdzOioqJ107XG4gICAgZm9yIChjb25zdCB3YXJuaW5nIG9mIGNvbGxlY3Rpb25XYXJuaW5ncykge1xuICAgICAgbGluZXMucHVzaChgICAg4oCiICR7d2FybmluZ31gKTtcbiAgICB9XG4gICAgbGluZXMucHVzaCgnJyk7XG4gICAgY29sbGVjdGlvbldhcm5pbmdUZXh0ID0gbGluZXMuam9pbignXFxuJyk7XG4gIH1cblxuICAvLyBJc3N1ZSAjMTY1NjogUmVwb3J0IHNraXBwZWQgZmllbGRzIHNvIExMTXMgZG9uJ3QgYXNzdW1lIHRoZXkgd2VyZSBhcHBsaWVkXG4gIGNvbnN0IHNraXBwZWRUZXh0ID0gc2tpcHBlZEZpZWxkcy5sZW5ndGggPiAwXG4gICAgPyBgXFxu4pqg77iPIFNraXBwZWQ6ICR7c2tpcHBlZEZpZWxkcy5qb2luKCcsICcpfSAoZGFuZ2Vyb3VzIG9yIHJlYWQtb25seSlgXG4gICAgOiAnJztcblxuICByZXR1cm4ge1xuICAgIGNvbnRlbnQ6IFt7XG4gICAgICB0eXBlOiAndGV4dCcsXG4gICAgICB0ZXh0OiBgJHt3YXJuaW5nVGV4dH0ke3Jlc29sdXRpb25XYXJuaW5nVGV4dH0ke3VucmVjb2duaXplZFdhcm5pbmdUZXh0fSR7Y29sbGVjdGlvbldhcm5pbmdUZXh0feKchSBVcGRhdGVkICR7bGFiZWx9ICcke2Rpc3BsYXlOYW1lfScgLSBmaWVsZHM6ICR7dXBkYXRlZEZpZWxkc30ke3NraXBwZWRUZXh0fWBcbiAgICB9XVxuICB9O1xufVxuXG5mdW5jdGlvbiBlcnJvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHtcbiAgICBjb250ZW50OiBbe1xuICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgdGV4dDogYOKdjCAke21lc3NhZ2V9YFxuICAgIH1dXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldE1hbmFnZXJGb3JUeXBlKGNvbnRleHQ6IEVsZW1lbnRDcnVkQ29udGV4dCwgdHlwZTogRWxlbWVudFR5cGUpOiBFbGVtZW50TWFuYWdlcldpdGhQZXJzaXN0ZW5jZTxhbnk+IHwgbnVsbCB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgRWxlbWVudFR5cGUuUEVSU09OQTpcbiAgICAgIHJldHVybiBjb250ZXh0LnBlcnNvbmFNYW5hZ2VyIGFzIEVsZW1lbnRNYW5hZ2VyV2l0aFBlcnNpc3RlbmNlPGFueT47XG4gICAgY2FzZSBFbGVtZW50VHlwZS5TS0lMTDpcbiAgICAgIHJldHVybiBjb250ZXh0LnNraWxsTWFuYWdlciBhcyBFbGVtZW50TWFuYWdlcldpdGhQZXJzaXN0ZW5jZTxTa2lsbD47XG4gICAgY2FzZSBFbGVtZW50VHlwZS5URU1QTEFURTpcbiAgICAgIHJldHVybiBjb250ZXh0LnRlbXBsYXRlTWFuYWdlciBhcyBFbGVtZW50TWFuYWdlcldpdGhQZXJzaXN0ZW5jZTxUZW1wbGF0ZT47XG4gICAgY2FzZSBFbGVtZW50VHlwZS5BR0VOVDpcbiAgICAgIHJldHVybiBjb250ZXh0LmFnZW50TWFuYWdlciBhcyBFbGVtZW50TWFuYWdlcldpdGhQZXJzaXN0ZW5jZTxBZ2VudD47XG4gICAgY2FzZSBFbGVtZW50VHlwZS5NRU1PUlk6XG4gICAgICByZXR1cm4gY29udGV4dC5tZW1vcnlNYW5hZ2VyIGFzIEVsZW1lbnRNYW5hZ2VyV2l0aFBlcnNpc3RlbmNlPE1lbW9yeT47XG4gICAgY2FzZSBFbGVtZW50VHlwZS5FTlNFTUJMRTpcbiAgICAgIHJldHVybiBjb250ZXh0LmVuc2VtYmxlTWFuYWdlciBhcyBFbGVtZW50TWFuYWdlcldpdGhQZXJzaXN0ZW5jZTxhbnk+O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVWZXJzaW9uRXhwbGljaXQoZWxlbWVudDogYW55LCB2ZXJzaW9uU3RyaW5nOiBzdHJpbmcpIHtcbiAgY29uc3QgaXNWYWxpZCA9IC9eKFxcZCspKFxcLlxcZCspPyhcXC5cXGQrKT8oLVthLXpBLVowLTkuLV0rKT8kLy50ZXN0KHZlcnNpb25TdHJpbmcpO1xuICBpZiAoIWlzVmFsaWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICBtZXNzYWdlOiBgSW52YWxpZCB2ZXJzaW9uIGZvcm1hdDogJyR7dmVyc2lvblN0cmluZ30nLiBQbGVhc2UgdXNlIGZvcm1hdCBsaWtlIDEuMC4wLCAxLjAsIG9yIDFgXG4gICAgfTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgZWxlbWVudC52ZXJzaW9uID0gdmVyc2lvblN0cmluZztcbiAgICBpZiAoZWxlbWVudC5tZXRhZGF0YSkge1xuICAgICAgZWxlbWVudC5tZXRhZGF0YS52ZXJzaW9uID0gdmVyc2lvblN0cmluZztcbiAgICB9XG4gICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIHVwZGF0ZSB2ZXJzaW9uJywgeyBlcnJvciB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIHVwZGF0ZSB2ZXJzaW9uOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGF1dG9JbmNyZW1lbnRWZXJzaW9uKGVsZW1lbnQ6IGFueSkge1xuICB0cnkge1xuICAgIGlmIChlbGVtZW50LnZlcnNpb24pIHtcbiAgICAgIC8vIEZpcnN0IG5vcm1hbGl6ZSB0aGUgdmVyc2lvbiB0byAzLXBhcnQgZm9ybWF0IChoYW5kbGVzIGxlZ2FjeSAyLXBhcnQgdmVyc2lvbnMpXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplVmVyc2lvbihTdHJpbmcoZWxlbWVudC52ZXJzaW9uKSk7XG5cbiAgICAgIC8vIENoZWNrIGZvciBwcmUtcmVsZWFzZSB2ZXJzaW9uc1xuICAgICAgY29uc3QgcHJlUmVsZWFzZU1hdGNoID0gbm9ybWFsaXplZC5tYXRjaCgvXihcXGQrXFwuXFxkK1xcLlxcZCspKC0oW2EtekEtWjAtOS4tXSspKT8kLyk7XG5cbiAgICAgIGlmIChwcmVSZWxlYXNlTWF0Y2gpIHtcbiAgICAgICAgY29uc3QgYmFzZVZlcnNpb24gPSBwcmVSZWxlYXNlTWF0Y2hbMV07XG4gICAgICAgIGNvbnN0IHByZVJlbGVhc2VUYWcgPSBwcmVSZWxlYXNlTWF0Y2hbM107XG5cbiAgICAgICAgaWYgKHByZVJlbGVhc2VUYWcpIHtcbiAgICAgICAgICAvLyBJbmNyZW1lbnQgcHJlLXJlbGVhc2UgdmVyc2lvbiAoZS5nLiwgXCIxLjAuMC1iZXRhLjFcIiDihpIgXCIxLjAuMC1iZXRhLjJcIilcbiAgICAgICAgICBjb25zdCBwcmVSZWxlYXNlTnVtYmVyTWF0Y2ggPSBwcmVSZWxlYXNlVGFnLm1hdGNoKC9eKFthLXpBLVpdKylcXC4/KFxcZCspPyQvKTtcbiAgICAgICAgICBpZiAocHJlUmVsZWFzZU51bWJlck1hdGNoKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVSZWxlYXNlVHlwZSA9IHByZVJlbGVhc2VOdW1iZXJNYXRjaFsxXTtcbiAgICAgICAgICAgIGNvbnN0IHByZVJlbGVhc2VOdW1iZXIgPSBOdW1iZXIucGFyc2VJbnQocHJlUmVsZWFzZU51bWJlck1hdGNoWzJdIHx8ICcwJykgKyAxO1xuICAgICAgICAgICAgZWxlbWVudC52ZXJzaW9uID0gYCR7YmFzZVZlcnNpb259LSR7cHJlUmVsZWFzZVR5cGV9LiR7cHJlUmVsZWFzZU51bWJlcn1gO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBObyBwcmUtcmVsZWFzZSBudW1iZXIsIGJ1bXAgcGF0Y2hcbiAgICAgICAgICAgIGNvbnN0IFttYWpvciwgbWlub3IsIHBhdGNoXSA9IGJhc2VWZXJzaW9uLnNwbGl0KCcuJykubWFwKE51bWJlcik7XG4gICAgICAgICAgICBlbGVtZW50LnZlcnNpb24gPSBgJHttYWpvcn0uJHttaW5vcn0uJHtwYXRjaCArIDF9YDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU3RhbmRhcmQgdmVyc2lvbiwgYnVtcCBwYXRjaCAoZS5nLiwgXCIxLjAuMFwiIOKGkiBcIjEuMC4xXCIpXG4gICAgICAgICAgY29uc3QgW21ham9yLCBtaW5vciwgcGF0Y2hdID0gYmFzZVZlcnNpb24uc3BsaXQoJy4nKS5tYXAoTnVtYmVyKTtcbiAgICAgICAgICBlbGVtZW50LnZlcnNpb24gPSBgJHttYWpvcn0uJHttaW5vcn0uJHtwYXRjaCArIDF9YDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2hvdWxkbid0IHJlYWNoIGhlcmUgYWZ0ZXIgbm9ybWFsaXphdGlvbiwgYnV0IGZhbGxiYWNrIHRvIHNhZmUgZGVmYXVsdFxuICAgICAgICBlbGVtZW50LnZlcnNpb24gPSAnMS4wLjEnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyB2ZXJzaW9uLCBzdGFydCBhdCAxLjAuMFxuICAgICAgZWxlbWVudC52ZXJzaW9uID0gJzEuMC4wJztcbiAgICB9XG5cbiAgICAvLyBTeW5jIHZlcnNpb24gdG8gbWV0YWRhdGFcbiAgICBpZiAoZWxlbWVudC5tZXRhZGF0YSkge1xuICAgICAgZWxlbWVudC5tZXRhZGF0YS52ZXJzaW9uID0gZWxlbWVudC52ZXJzaW9uO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBhdXRvLWluY3JlbWVudCB2ZXJzaW9uJywgeyBlcnJvciB9KTtcbiAgfVxufVxuIl19
783
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdEVsZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaGFuZGxlcnMvZWxlbWVudC1jcnVkL2VkaXRFbGVtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUtsRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFaEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBNEIsTUFBTSxnREFBZ0QsQ0FBQztBQUM3RyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNFLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsMkJBQTJCLEVBQzNCLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsb0JBQW9CLEVBRXBCLHlCQUF5QixFQUN6QiwrQkFBK0IsRUFDL0IsNkJBQTZCLEVBQzdCLCtCQUErQixFQUMvQixnQ0FBZ0MsRUFDaEMsaUNBQWlDLEdBQ2xDLE1BQU0sY0FBYyxDQUFDO0FBaUN0QixnRUFBZ0U7QUFDaEUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUMvQixJQUFJO0lBQ0osTUFBTTtJQUNOLFVBQVU7SUFDVixVQUFVO0lBQ1YsU0FBUztJQUNULFVBQVU7Q0FDWCxDQUFDLENBQUM7QUFFSDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxnQkFBZ0IsR0FJakI7SUFDSCx1Q0FBdUM7SUFDdkMsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUN0RSxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQzFFLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDekUsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDL0QsYUFBYSxFQUFFLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUMvRSxZQUFZLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUNuRSxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUM1RCxXQUFXLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUNsRSxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUM5RCxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUM3RCxzRUFBc0U7SUFDdEUsU0FBUyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUU7SUFDNUksS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUU7SUFDeEksU0FBUyxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFO0lBQ3RHLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRTtJQUNsRyx5RkFBeUY7SUFFekYsZ0JBQWdCO0lBQ2hCLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQ3ZJLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQzNJLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQzdJLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDMUcsZUFBZSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUU7SUFDbkosZ0JBQWdCLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRTtJQUVwSixnQkFBZ0I7SUFDaEIsOERBQThEO0lBQzlELDBFQUEwRTtJQUMxRSx5RUFBeUU7SUFDekUsNkNBQTZDO0lBQzdDLFlBQVksRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUUsWUFBWSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQzVHLGFBQWEsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUUsWUFBWSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQzdHLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUU7SUFDakUsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRTtJQUN4RSxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO0lBQ25FLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO0lBQzdGLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUU7SUFDckUsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRTtJQUNuRSxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO0lBRWpFLGdCQUFnQjtJQUNoQixVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLFlBQVksRUFBRSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRTtJQUMzRyxXQUFXLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLFlBQVksRUFBRSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRTtJQUM1RyxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO0NBQ3RFLENBQUM7QUFFRjs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBUyxrQkFBa0IsQ0FDekIsS0FBOEIsRUFDOUIsV0FBd0I7SUFFeEIsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO0lBRTVCLEtBQUssTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbkQsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJO1lBQUUsU0FBUztRQUVwRCxNQUFNLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsSUFBSTtZQUFFLFNBQVM7UUFFcEIsa0RBQWtEO1FBQ2xELElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztZQUFFLFNBQVM7UUFFNUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxhQUFhLElBQUksQ0FBQyxRQUFRLFNBQVMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDakgsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsd0NBQXdDO0FBQ3hDLE1BQU0sYUFBYSxHQUFHO0lBQ3BCLGNBQWMsRUFBRSxvQkFBb0I7SUFDcEMsY0FBYyxFQUFFLGdCQUFnQjtDQUNqQyxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsU0FBUyx5QkFBeUIsQ0FBQyxTQUFpQjtJQUNsRCw4RUFBOEU7SUFDOUUsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFN0QsUUFBUSxlQUFlLEVBQUUsQ0FBQztRQUN4QixLQUFLLE1BQU07WUFDVCxPQUFPLE1BQU0sQ0FBQztRQUNoQixLQUFLLGFBQWE7WUFDaEIsT0FBTyxhQUFhLENBQUM7UUFDdkIsS0FBSyxTQUFTO1lBQ1osT0FBTyxTQUFTLENBQUM7UUFDbkI7WUFDRSxPQUFPLElBQUksQ0FBQyxDQUFDLCtCQUErQjtJQUNoRCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFTLGtCQUFrQixDQUN6QixpQkFBb0MsRUFDcEMsS0FBYSxFQUNiLEtBQWM7SUFFZCw4Q0FBOEM7SUFDOUMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQyxDQUFDLDhFQUE4RTtJQUM3RixDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2YsT0FBTyxJQUFJLENBQUMsQ0FBQyxxQ0FBcUM7SUFDcEQsQ0FBQztJQUVELG1FQUFtRTtJQUNuRSxNQUFNLFNBQVMsR0FBRyxTQUFTLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDeEQsU0FBUyxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFDdEUsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsc0JBQXNCLENBQUM7SUFFeEgsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsd0JBQXdCLENBQUMsS0FBSyxFQUFFO1FBQy9ELFNBQVM7UUFDVCxXQUFXLEVBQUUsSUFBSTtRQUNqQixTQUFTO0tBQ1YsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQixPQUFPLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLG1CQUFtQixDQUFDO0lBQzFELENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQyxDQUFDLFFBQVE7QUFDdkIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILFNBQVMsb0NBQW9DLENBQUMsS0FBYztJQUsxRCxnREFBZ0Q7SUFDaEQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO1FBQzVCLE1BQU0sVUFBVSxHQUEyQixFQUFFLENBQUM7UUFFOUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN0QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUM3RCxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLHVEQUF1RCxDQUFDLENBQUM7Z0JBQzFGLFNBQVM7WUFDWCxDQUFDO1lBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBK0IsQ0FBQztZQUM1QyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsWUFBWSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDMUMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFlBQVksSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQzFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDVixNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLG9DQUFvQyxDQUFDLENBQUM7Z0JBQ3ZFLFNBQVM7WUFDWCxDQUFDO1lBQ0Qsa0RBQWtEO1lBQ2xELElBQUksU0FBUyxJQUFJLEdBQUcsSUFBSSxPQUFPLEdBQUcsQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3pELE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxNQUFNLENBQUMsSUFBSSxDQUFDLDJEQUEyRCxPQUFPLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUNySCxTQUFTO1lBQ1gsQ0FBQztZQUNELG1FQUFtRTtZQUNuRSxNQUFNLEtBQUssR0FBeUIsRUFBRSxHQUFHLEdBQUcsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDM0UsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDVCxLQUFLLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQyxDQUFDO1lBQ0QsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNwRSxDQUFDO1FBQ0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRCwrQ0FBK0M7SUFDL0MsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6RSxNQUFNLElBQUksR0FBRyxLQUFnQyxDQUFDO1FBQzlDLE1BQU0sVUFBVSxHQUEyQixFQUFFLENBQUM7UUFFOUMsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMsR0FBRyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzFELE9BQU87b0JBQ0wsT0FBTyxFQUFFLEtBQUs7b0JBQ2QsUUFBUSxFQUFFLEVBQUU7b0JBQ1osS0FBSyxFQUFFLFlBQVksR0FBRywyRUFBMkU7d0JBQy9GLGdCQUFnQixHQUFHLCtDQUErQztpQkFDckUsQ0FBQztZQUNKLENBQUM7WUFDRCxNQUFNLEtBQUssR0FBRyxHQUE4QixDQUFDO1lBQzdDLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQ2QsR0FBRyxLQUFLO2dCQUNSLFlBQVksRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQztnQkFDN0QsWUFBWSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ3RELElBQUksRUFBRyxLQUFLLENBQUMsSUFBcUMsSUFBSSxTQUFTO2dCQUMvRCxVQUFVLEVBQUcsS0FBSyxDQUFDLFVBQWlELElBQUksUUFBUTtnQkFDaEYsUUFBUSxFQUFHLEtBQUssQ0FBQyxRQUFtQixJQUFJLEVBQUU7YUFDM0MsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQsdUJBQXVCO0lBQ3ZCLE9BQU87UUFDTCxPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSxFQUFFO1FBQ1osS0FBSyxFQUFFLHVFQUF1RSxPQUFPLEtBQUssRUFBRTtLQUM3RixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsU0FBUyxxQkFBcUIsQ0FDNUIsUUFBZ0MsRUFDaEMsUUFBZ0M7SUFFaEMsTUFBTSxNQUFNLEdBQTJCLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckUsTUFBTSxRQUFRLEdBQWEsRUFBRSxDQUFDO0lBRTlCLEtBQUssTUFBTSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDM0IsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsSUFBSTtZQUFFLFNBQVM7UUFFcEIsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FDcEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FDckQsQ0FBQztRQUVGLDREQUE0RDtRQUM1RCxJQUFJLEdBQUcsQ0FBQyxPQUFPLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDekIsSUFBSSxhQUFhLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSw2Q0FBNkMsQ0FBQyxDQUFDO1lBQy9FLENBQUM7WUFDRCxTQUFTO1FBQ1gsQ0FBQztRQUVELDJEQUEyRDtRQUMzRCxNQUFNLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsR0FBRyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUM7UUFFaEcsSUFBSSxhQUFhLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdkIsa0VBQWtFO1lBQ2xFLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUcsV0FBVyxFQUFFLENBQUM7UUFDdkUsQ0FBQzthQUFNLENBQUM7WUFDTixxQkFBcUI7WUFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNsQyxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDO0FBQ3hDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLHNCQUFzQixDQUFDLEtBQWM7SUFDNUMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUUsQ0FBQztBQUVELFNBQVMsMkJBQTJCLENBQ2xDLGFBQXNCLEVBQ3RCLE9BQWdCLEVBQ2hCLFNBQWtDLEVBQ2xDLGtCQUE0QjtJQUU1QixNQUFNLFNBQVMsR0FBRyxvQ0FBb0MsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN0RSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sOEJBQThCLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBQ0QsTUFBTSxhQUFhLEdBQUcsT0FBa0MsQ0FBQztJQUN6RCxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsUUFBK0MsQ0FBQztJQUMvRSxNQUFNLFdBQVcsR0FBRyxRQUFRLEVBQUUsUUFBUSxDQUFDO0lBQ3ZDLE1BQU0sYUFBYSxHQUEyQixLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUN0RSxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNQLE1BQU0sV0FBVyxHQUFHLHFCQUFxQixDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0Usa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDeEIsU0FBUyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUNBLFNBQVMsQ0FBQyxRQUFvQyxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDO0lBQ2hGLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILEtBQUssVUFBVSw0QkFBNEIsQ0FDekMsT0FBZ0IsRUFDaEIsS0FBOEIsRUFDOUIsT0FBNEI7SUFFNUIsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFLLEtBQUssQ0FBQyxRQUFvQyxFQUFFLFFBQVEsQ0FBQztJQUVsRyxJQUFJLGlCQUFpQixJQUFJLE9BQU8sWUFBWSxRQUFRLEVBQUUsQ0FBQztRQUNyRCw0RUFBNEU7UUFDNUUsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN6QyxNQUFNLE1BQU0sR0FBRyxNQUFNLG1CQUFtQixDQUN0QyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFDekI7Z0JBQ0UsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO2dCQUNsQyxlQUFlLEVBQUUsT0FBTyxDQUFDLGVBQWU7Z0JBQ3hDLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtnQkFDbEMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhO2dCQUNwQyxjQUFjLEVBQUUsT0FBTyxDQUFDLGNBQWM7Z0JBQ3RDLGVBQWUsRUFBRSxPQUFPLENBQUMsZUFBZTthQUN6QyxDQUNGLENBQUM7WUFDRixPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1lBQzVDLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ25DLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxPQUFPLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFTLHVCQUF1QixDQUFDLE9BQWtCO0lBS2pELE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7SUFDN0IsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO0lBRTVCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDeEMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1lBQ3pELFNBQVM7UUFDWCxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsS0FBZ0MsQ0FBQztRQUNsRCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsRUFBd0IsQ0FBQztRQUNsRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixRQUFRLENBQUMsRUFBRSxHQUFHLGdCQUFnQixFQUFFLENBQUM7UUFDbkMsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDM0YsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUN2QyxDQUFDO1lBRUQsTUFBTSxlQUFlLEdBQUc7Z0JBQ3RCLEdBQUcsUUFBUTtnQkFDWCxTQUFTO2dCQUNULElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDdkQsUUFBUSxFQUFFLE9BQU8sUUFBUSxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksUUFBUSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7YUFDdkcsQ0FBQztZQUVGLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLFFBQVEsQ0FBQyxFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFDOUQsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDcEUsQ0FBQztJQUVELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ3ZDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFdBQVcsQ0FDL0IsT0FBMkIsRUFDM0IsSUFBcUIsRUFDckIsaUJBQXFDO0lBRXJDLE1BQU0sT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFFbEMsb0RBQW9EO0lBQ3BELE1BQU0sU0FBUyxHQUFHLGlCQUFpQixJQUFJLElBQUksaUJBQWlCLEVBQUUsQ0FBQztJQUUvRCxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFFbkMsNkJBQTZCO0lBQzdCLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDeEMsT0FBTyxLQUFLLENBQUMsK0VBQStFLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBRUQsTUFBTSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsR0FBRyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVqRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDcEIsT0FBTyxLQUFLLENBQUMseUJBQXlCLElBQUksbUJBQW1CLDJCQUEyQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDM0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsTUFBTSxXQUFXLEdBQUcsbUJBQW1CLENBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDMUUsT0FBTyxLQUFLLENBQUMsaUJBQWlCLFdBQVcsb0NBQW9DLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE1BQU0sS0FBSyxHQUFHLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELHFEQUFxRDtJQUNyRCxNQUFNLHVCQUF1QixHQUFHLCtCQUErQixDQUM3RCxjQUFjLEVBQ2QsS0FBZ0MsQ0FDakMsQ0FBQztJQUVGLDRFQUE0RTtJQUM1RSwwRUFBMEU7SUFDMUUsdUVBQXVFO0lBQ3ZFLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxPQUFPLEtBQUssQ0FBQyxRQUFRLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUMzRixNQUFNLGNBQWMsR0FBRywrQkFBK0IsQ0FDcEQsY0FBYyxFQUNkLEtBQUssQ0FBQyxRQUFtQyxDQUMxQyxDQUFDO1FBQ0YsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLDZCQUE2QixDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFFM0UsSUFBSSx1QkFBdUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdkMsTUFBTSxDQUFDLElBQUksQ0FBQywyQ0FBMkMsRUFBRTtZQUN2RCxXQUFXLEVBQUUsY0FBYztZQUMzQixXQUFXLEVBQUUsSUFBSTtZQUNqQixZQUFZLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtZQUM1QyxpQkFBaUIsRUFBRSx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNuRCxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVE7Z0JBQ3BCLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVTthQUN6QixDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLHNGQUFzRjtJQUN0RixJQUFJLGNBQWMsS0FBSyxXQUFXLENBQUMsTUFBTSxJQUFJLFNBQVMsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNoRSxPQUFPLEtBQUssQ0FDVixzREFBc0Q7WUFDdEQsMkNBQTJDO1lBQzNDLGlFQUFpRSxDQUNsRSxDQUFDO0lBQ0osQ0FBQztJQUVELHFGQUFxRjtJQUNyRixNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDN0QsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sS0FBSyxDQUFDLGtDQUFrQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUVELE1BQU0sZ0JBQWdCLEdBQUcsZ0NBQWdDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqRixJQUFJLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNoQyxPQUFPLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELHdEQUF3RDtJQUN4RCxLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ25ELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDOUIsTUFBTSxlQUFlLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwRSxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNwQixPQUFPLEtBQUssQ0FBQyxzQkFBc0IsS0FBSyxNQUFNLGVBQWUsRUFBRSxDQUFDLENBQUM7WUFDbkUsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsa0ZBQWtGO0lBQ2xGLDhFQUE4RTtJQUM5RSxNQUFNLGNBQWMsR0FBRyx5QkFBeUIsQ0FBQyxjQUFjLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQ3RGLE1BQU0sU0FBUyxHQUE0QixFQUFFLENBQUM7SUFDOUMsTUFBTSx5QkFBeUIsR0FBYSxFQUFFLENBQUM7SUFDL0MsTUFBTSxrQkFBa0IsR0FBYSxFQUFFLENBQUM7SUFDeEMsTUFBTSxhQUFhLEdBQWEsRUFBRSxDQUFDO0lBQ25DLE1BQU0sYUFBYSxHQUFhLEVBQUUsQ0FBQztJQUVuQyw4REFBOEQ7SUFDOUQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUU5Ryw2RUFBNkU7SUFDN0UsTUFBTSxpQkFBaUIsR0FBMEU7UUFDL0YsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTztRQUM1QixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPO1FBQzVCLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFVBQVU7UUFDbEMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUztRQUNoQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRO0tBQy9CLENBQUM7SUFFRixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2pELDRCQUE0QjtRQUM1QixJQUFJLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEIsU0FBUztRQUNYLENBQUM7UUFFRCx3QkFBd0I7UUFDeEIsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLDJDQUEyQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzlELGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEIsU0FBUztRQUNYLENBQUM7UUFFRCwrREFBK0Q7UUFDL0QsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBRXhCLDBEQUEwRDtRQUMxRCxJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM1RCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN4QixTQUFTLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUMxQixDQUFDO1lBQ0EsU0FBUyxDQUFDLFFBQW9DLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQy9ELENBQUM7YUFBTSxJQUFJLEdBQUcsS0FBSyxVQUFVLElBQUksY0FBYyxLQUFLLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN6RSwyRUFBMkU7WUFDM0UsTUFBTSxTQUFTLEdBQUcsMkJBQTJCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUM3RixJQUFJLFNBQVM7Z0JBQUUsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsQ0FBQzthQUFNLElBQUksR0FBRyxLQUFLLFVBQVUsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzdFLE1BQU0sU0FBUyxHQUFHLEtBQWdDLENBQUM7WUFFbkQsOEVBQThFO1lBQzlFLDJFQUEyRTtZQUMzRSxJQUFJLGNBQWMsS0FBSyxXQUFXLENBQUMsUUFBUSxJQUFJLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbEUsTUFBTSxTQUFTLEdBQUcsMkJBQTJCLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7Z0JBQzFHLElBQUksU0FBUztvQkFBRSxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFFdkMsbUZBQW1GO2dCQUNuRixNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLFlBQVksRUFBRSxHQUFHLFNBQVMsQ0FBQztnQkFDNUQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDekMsU0FBUyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQzVCLFNBQVMsQ0FBQyxRQUFtQyxFQUM3QyxZQUFZLEVBQ1osYUFBYSxDQUNkLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTiw4Q0FBOEM7Z0JBQzlDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUM1QixDQUFDLFNBQVMsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUE0QixFQUNyRCxTQUFTLEVBQ1QsYUFBYSxDQUNkLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksR0FBRyxLQUFLLGNBQWMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMvRCxxRkFBcUY7WUFDckYsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUU7Z0JBQ3BFLFNBQVMsRUFBRSxlQUFlLENBQUMsa0JBQWtCO2dCQUM3QyxjQUFjLEVBQUUsaUJBQWlCLENBQUMsY0FBYyxDQUFDO2FBQ2xELENBQUMsQ0FBQztZQUNILE1BQU0scUJBQXFCLEdBQUcsaUJBQWlCLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDO1lBQ3ZFLDhFQUE4RTtZQUM3RSxPQUFlLENBQUMsWUFBWSxHQUFHLHFCQUFxQixDQUFDO1lBQ3RELHNFQUFzRTtZQUN0RSxJQUFJLGNBQWMsS0FBSyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQ3ZCLE9BQWUsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO2dCQUNuQyxDQUFDO2dCQUNBLE9BQWUsQ0FBQyxVQUFVLENBQUMsWUFBWSxHQUFHLHFCQUFxQixDQUFDO1lBQ25FLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzFELCtEQUErRDtZQUMvRCxNQUFNLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRTtnQkFDcEUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxrQkFBa0I7Z0JBQzdDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxjQUFjLENBQUM7YUFDbEQsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxpQkFBaUIsQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUM7WUFDbEUseUVBQXlFO1lBQ3hFLE9BQWUsQ0FBQyxPQUFPLEdBQUcsZ0JBQWdCLENBQUM7UUFDOUMsQ0FBQzthQUFNLElBQUksa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkMsZ0RBQWdEO1lBQ2hELFlBQVksR0FBRyxLQUFLLENBQUM7UUFDdkIsQ0FBQzthQUFNLENBQUM7WUFDTixnRkFBZ0Y7WUFDaEYsaUZBQWlGO1lBQ2pGLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDdkIseUJBQXlCLENBQUMsSUFBSSxDQUM1QixVQUFVLEdBQUcsK0NBQStDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxtQ0FBbUMsQ0FDbkksQ0FBQztZQUNGLE1BQU0sQ0FBQyxJQUFJLENBQUMscUNBQXFDLEdBQUcsU0FBUyxjQUFjLDZCQUE2QixFQUFFO2dCQUN4RyxXQUFXLEVBQUUsY0FBYztnQkFDM0IsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLEtBQUssRUFBRSxHQUFHO2FBQ1gsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQztJQUVELCtEQUErRDtJQUMvRCxNQUFNLFdBQVcsR0FBRyxPQUE2QyxDQUFDO0lBQ2xFLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBRXBFLG9DQUFvQztJQUNwQyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ3RELElBQUksR0FBRyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3RCLE9BQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7SUFFRCwyREFBMkQ7SUFDM0QsSUFBSSxVQUFVLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM1QyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCwwREFBMEQ7SUFDMUQsSUFBSSxjQUFjLEtBQUssV0FBVyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDM0YsTUFBTSxZQUFZLEdBQUcsdUJBQXVCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUIsT0FBTyxLQUFLLENBQUMsb0NBQW9DLFlBQVksQ0FBQyxPQUFPLCtCQUErQixDQUFDLENBQUM7UUFDeEcsQ0FBQztRQUNBLE9BQWUsQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQztJQUNyRCxDQUFDO0lBRUQsK0RBQStEO0lBQy9ELHNGQUFzRjtJQUN0RixJQUFJLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztJQUMvQixJQUFJLGNBQWMsS0FBSyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLDRCQUE0QixDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDckYsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JCLHFCQUFxQixHQUFHLCtCQUErQixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDNUUsQ0FBQztJQUNILENBQUM7SUFFRCw2RUFBNkU7SUFDN0UsbUZBQW1GO0lBQ25GLDZFQUE2RTtJQUM3RSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNyQixPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsS0FBSyxFQUFFLENBQUM7UUFDcEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQzdCLDRCQUE0QjtRQUM1QixPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3ZELENBQUM7SUFFRCx5QkFBeUI7SUFDekIsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sTUFBTSxHQUFHLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQixPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLDBCQUEwQixDQUFDLENBQUM7UUFDN0QsQ0FBQztJQUNILENBQUM7U0FBTSxDQUFDO1FBQ04sb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELGlDQUFpQztJQUNqQyxNQUFNLGlCQUFpQixHQUFHLE9BQVEsT0FBZSxDQUFDLFdBQVcsS0FBSyxVQUFVO1FBQzFFLENBQUMsQ0FBRSxPQUFlLENBQUMsV0FBVyxFQUFFO1FBQ2hDLENBQUMsQ0FBQyxDQUFFLE9BQWUsQ0FBQyxRQUFRLElBQUssT0FBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdELE1BQU0sUUFBUSxHQUFHLE9BQU8saUJBQWlCLEtBQUssUUFBUSxJQUFJLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQ3BGLENBQUMsQ0FBQyxpQkFBaUI7UUFDbkIsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQztJQUV2RSxJQUFJLENBQUM7UUFDSCxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsT0FBTyxLQUFLLENBQUMsMkJBQTJCLEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDbEcsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQztJQUNuRCxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRS9DLG9FQUFvRTtJQUNwRSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDM0QsT0FBTztZQUNMLE9BQU8sRUFBRSxDQUFDO29CQUNSLElBQUksRUFBRSxNQUFNO29CQUNaLElBQUksRUFBRSwyQkFBMkIsS0FBSyxLQUFLLFdBQVcsS0FBSzt3QkFDekQsWUFBWSxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxvREFBb0Q7aUJBQzNGLENBQUM7U0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELG1FQUFtRTtJQUNuRSxJQUFJLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztJQUNqQyxJQUFJLHlCQUF5QixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN6QyxNQUFNLEtBQUssR0FBRyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFDdEQsS0FBSyxNQUFNLE9BQU8sSUFBSSx5QkFBeUIsRUFBRSxDQUFDO1lBQ2hELEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFDRCxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2YsdUJBQXVCLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsb0RBQW9EO0lBQ3BELElBQUkscUJBQXFCLEdBQUcsRUFBRSxDQUFDO0lBQy9CLElBQUksa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sS0FBSyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUM5QyxLQUFLLE1BQU0sT0FBTyxJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDekMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixxQkFBcUIsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxpQkFBaUIsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsMkJBQTJCO1FBQ3RFLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFUCxPQUFPO1FBQ0wsT0FBTyxFQUFFLENBQUM7Z0JBQ1IsSUFBSSxFQUFFLE1BQU07Z0JBQ1osSUFBSSxFQUFFLEdBQUcsV0FBVyxHQUFHLHFCQUFxQixHQUFHLHVCQUF1QixHQUFHLHFCQUFxQixhQUFhLEtBQUssS0FBSyxXQUFXLGVBQWUsYUFBYSxHQUFHLFdBQVcsRUFBRTthQUM3SyxDQUFDO0tBQ0gsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxPQUFlO0lBQzVCLE9BQU87UUFDTCxPQUFPLEVBQUUsQ0FBQztnQkFDUixJQUFJLEVBQUUsTUFBTTtnQkFDWixJQUFJLEVBQUUsS0FBSyxPQUFPLEVBQUU7YUFDckIsQ0FBQztLQUNILENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxPQUEyQixFQUFFLElBQWlCO0lBQ3ZFLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDYixLQUFLLFdBQVcsQ0FBQyxPQUFPO1lBQ3RCLE9BQU8sT0FBTyxDQUFDLGNBQW9ELENBQUM7UUFDdEUsS0FBSyxXQUFXLENBQUMsS0FBSztZQUNwQixPQUFPLE9BQU8sQ0FBQyxZQUFvRCxDQUFDO1FBQ3RFLEtBQUssV0FBVyxDQUFDLFFBQVE7WUFDdkIsT0FBTyxPQUFPLENBQUMsZUFBMEQsQ0FBQztRQUM1RSxLQUFLLFdBQVcsQ0FBQyxLQUFLO1lBQ3BCLE9BQU8sT0FBTyxDQUFDLFlBQW9ELENBQUM7UUFDdEUsS0FBSyxXQUFXLENBQUMsTUFBTTtZQUNyQixPQUFPLE9BQU8sQ0FBQyxhQUFzRCxDQUFDO1FBQ3hFLEtBQUssV0FBVyxDQUFDLFFBQVE7WUFDdkIsT0FBTyxPQUFPLENBQUMsZUFBcUQsQ0FBQztRQUN2RTtZQUNFLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxxQkFBcUIsQ0FBQyxPQUFZLEVBQUUsYUFBcUI7SUFDaEUsTUFBTSxPQUFPLEdBQUcsMkNBQTJDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2hGLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE9BQU87WUFDTCxPQUFPLEVBQUUsS0FBSztZQUNkLE9BQU8sRUFBRSw0QkFBNEIsYUFBYSw0Q0FBNEM7U0FDL0YsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxPQUFPLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQztRQUNoQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyQixPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUM7UUFDM0MsQ0FBQztRQUNELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixNQUFNLENBQUMsS0FBSyxDQUFDLDBCQUEwQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNwRCxPQUFPO1lBQ0wsT0FBTyxFQUFFLEtBQUs7WUFDZCxPQUFPLEVBQUUsNkJBQTZCLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRTtTQUNqRyxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFDLE9BQVk7SUFDeEMsSUFBSSxDQUFDO1FBQ0gsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEIsZ0ZBQWdGO1lBQ2hGLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUU3RCxpQ0FBaUM7WUFDakMsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1lBRWxGLElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkMsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUV6QyxJQUFJLGFBQWEsRUFBRSxDQUFDO29CQUNsQix3RUFBd0U7b0JBQ3hFLE1BQU0scUJBQXFCLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO29CQUM1RSxJQUFJLHFCQUFxQixFQUFFLENBQUM7d0JBQzFCLE1BQU0sY0FBYyxHQUFHLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNoRCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUM5RSxPQUFPLENBQUMsT0FBTyxHQUFHLEdBQUcsV0FBVyxJQUFJLGNBQWMsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO29CQUMzRSxDQUFDO3lCQUFNLENBQUM7d0JBQ04sb0NBQW9DO3dCQUNwQyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDakUsT0FBTyxDQUFDLE9BQU8sR0FBRyxHQUFHLEtBQUssSUFBSSxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNyRCxDQUFDO2dCQUNILENBQUM7cUJBQU0sQ0FBQztvQkFDTix5REFBeUQ7b0JBQ3pELE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNqRSxPQUFPLENBQUMsT0FBTyxHQUFHLEdBQUcsS0FBSyxJQUFJLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JELENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04seUVBQXlFO2dCQUN6RSxPQUFPLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztZQUM1QixDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTiw2QkFBNkI7WUFDN0IsT0FBTyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDNUIsQ0FBQztRQUVELDJCQUEyQjtRQUMzQixJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyQixPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQzdDLENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0NBQWtDLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tICcuLi8uLi9wb3J0Zm9saW8vUG9ydGZvbGlvTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBTa2lsbCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL3NraWxscy9Ta2lsbC5qcyc7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL3RlbXBsYXRlcy9UZW1wbGF0ZS5qcyc7XG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL2FnZW50cy9BZ2VudC5qcyc7XG5pbXBvcnQgeyBNZW1vcnkgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9tZW1vcmllcy9NZW1vcnkuanMnO1xuaW1wb3J0IHsgRW5zZW1ibGUgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9lbnNlbWJsZXMvRW5zZW1ibGUuanMnO1xuaW1wb3J0IHR5cGUgeyBFbnNlbWJsZUVsZW1lbnRJbnB1dCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL2Vuc2VtYmxlcy90eXBlcy5qcyc7XG5pbXBvcnQgeyByZXNvbHZlRWxlbWVudFR5cGVzIH0gZnJvbSAnLi4vLi4vdXRpbHMvZWxlbWVudFR5cGVSZXNvbHZlci5qcyc7XG5pbXBvcnQgeyBFbGVtZW50Q3J1ZENvbnRleHQgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IGdlbmVyYXRlTWVtb3J5SWQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9tZW1vcmllcy91dGlscy5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgbm9ybWFsaXplVmVyc2lvbiB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL0Jhc2VFbGVtZW50LmpzJztcbmltcG9ydCB7IFZhbGlkYXRpb25TZXJ2aWNlLCB0eXBlIFZhbGlkYXRpb25GaWVsZFR5cGUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92YWxpZGF0aW9uL1ZhbGlkYXRpb25TZXJ2aWNlLmpzJztcbmltcG9ydCB7IFNFQ1VSSVRZX0xJTUlUUyB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBDb250ZW50VmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvY29udGVudFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBFbGVtZW50Tm90Rm91bmRFcnJvciB9IGZyb20gJy4uLy4uL3V0aWxzL0Vycm9ySGFuZGxlci5qcyc7XG5pbXBvcnQgeyBkZWVwTWVyZ2UsIERBTkdFUk9VU19QUk9QRVJUSUVTIH0gZnJvbSAnLi4vLi4vdXRpbHMvZGVlcE1lcmdlLmpzJztcbmltcG9ydCB7XG4gIG5vcm1hbGl6ZUVsZW1lbnRUeXBlSW5wdXQsXG4gIGZvcm1hdFZhbGlkRWxlbWVudFR5cGVzTGlzdCxcbiAgZ2V0RWxlbWVudEZpbGVuYW1lLFxuICBnZXRFbGVtZW50VHlwZUxhYmVsLFxuICByZXNvbHZlRWxlbWVudEJ5TmFtZSxcbiAgRWxlbWVudE1hbmFnZXJPcGVyYXRpb25zLFxuICBLTk9XTl9NRVRBREFUQV9QUk9QRVJUSUVTLFxuICBkZXRlY3RVbmtub3duTWV0YWRhdGFQcm9wZXJ0aWVzLFxuICBmb3JtYXRVbmtub3duUHJvcGVydHlXYXJuaW5ncyxcbiAgZm9ybWF0RWxlbWVudFJlc29sdXRpb25XYXJuaW5ncyxcbiAgY29sbGVjdEdhdGVrZWVwZXJBdXRob3JpbmdFcnJvcnMsXG4gIGZvcm1hdEdhdGVrZWVwZXJWYWxpZGF0aW9uTWVzc2FnZSxcbn0gZnJvbSAnLi9oZWxwZXJzLmpzJztcbmltcG9ydCB0eXBlIHsgUmVzb2x2ZUVsZW1lbnRUeXBlc1Jlc3VsdCB9IGZyb20gJy4uLy4uL3V0aWxzL2VsZW1lbnRUeXBlUmVzb2x2ZXIuanMnO1xuXG50eXBlIEVsZW1lbnRNYW5hZ2VyV2l0aFBlcnNpc3RlbmNlPFQ+ID0gRWxlbWVudE1hbmFnZXJPcGVyYXRpb25zPFQ+ICYge1xuICBzYXZlKGVsZW1lbnQ6IFQsIGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICBkZWxldGU/KGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xufTtcblxuLyoqXG4gKiBHcmFwaFFMLWFsaWduZWQgaW5wdXQgZm9yIGVkaXRpbmcgZWxlbWVudHMuXG4gKiBVc2VzIG5lc3RlZCBvYmplY3RzIChsaWtlIGNyZWF0ZV9lbGVtZW50KSBpbnN0ZWFkIG9mIE1vbmdvREItc3R5bGUgZG90IG5vdGF0aW9uLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBVcGRhdGUgZGVzY3JpcHRpb24gYW5kIG5lc3RlZCBtZXRhZGF0YVxuICoge1xuICogICBuYW1lOiBcIm15LXNraWxsXCIsXG4gKiAgIHR5cGU6IFwic2tpbGxzXCIsXG4gKiAgIGlucHV0OiB7XG4gKiAgICAgZGVzY3JpcHRpb246IFwiVXBkYXRlZCBkZXNjcmlwdGlvblwiLFxuICogICAgIG1ldGFkYXRhOiB7XG4gKiAgICAgICB0cmlnZ2VyczogW1wiY29kZVwiLCBcInJldmlld1wiXSxcbiAqICAgICAgIHNldHRpbmdzOiB7IHRoZW1lOiBcImRhcmtcIiB9XG4gKiAgICAgfVxuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWRpdEVsZW1lbnRBcmdzIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIC8qKiBOZXN0ZWQgaW5wdXQgb2JqZWN0IC0gZmllbGRzIGFyZSBkZWVwLW1lcmdlZCB3aXRoIGV4aXN0aW5nIGVsZW1lbnQgKi9cbiAgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vLyBSZWFkLW9ubHkgZmllbGRzIHRoYXQgY2Fubm90IGJlIG1vZGlmaWVkIHRocm91Z2ggdGhlIGVkaXQgQVBJXG5jb25zdCBSRUFEX09OTFlfRklFTERTID0gbmV3IFNldChbXG4gICdpZCcsXG4gICd0eXBlJyxcbiAgJ2ZpbGVQYXRoJyxcbiAgJ2ZpbGVuYW1lJyxcbiAgJ19zdGF0dXMnLFxuICAnX2lzRGlydHknXG5dKTtcblxuLyoqXG4gKiBJc3N1ZSAjNjYyOiBTeXN0ZW1hdGljIGZpZWxkIHR5cGUgdmFsaWRhdGlvbiBhdCB0aGUgZWRpdEVsZW1lbnQgYm91bmRhcnkuXG4gKlxuICogRGVmaW5lcyBleHBlY3RlZCB0eXBlcyBmb3Iga25vd24gbWV0YWRhdGEgZmllbGRzIGFjcm9zcyBhbGwgZWxlbWVudCB0eXBlcy5cbiAqIFByZXZlbnRzIHNpbGVudCBkYXRhIGNvcnJ1cHRpb24gd2hlbiBMTE1zIHNlbmQgd3JvbmcgdHlwZXMgKGUuZy4sIGRpY3QgaW5zdGVhZCBvZiBhcnJheSkuXG4gKlxuICogS2V5OiBmaWVsZCBuYW1lLCBWYWx1ZTogeyBleHBlY3RlZDogdHlwZSBkZXNjcmlwdGlvbiwgY2hlY2s6IHZhbGlkYXRvciBmdW5jdGlvbiB9XG4gKi9cbmNvbnN0IEZJRUxEX1RZUEVfUlVMRVM6IFJlY29yZDxzdHJpbmcsIHtcbiAgZXhwZWN0ZWQ6IHN0cmluZztcbiAgY2hlY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gYm9vbGVhbjtcbiAgZWxlbWVudFR5cGVzPzogRWxlbWVudFR5cGVbXTtcbn0+ID0ge1xuICAvLyBBcnJheSBmaWVsZHMgKGFjcm9zcyBtdWx0aXBsZSB0eXBlcylcbiAgdGFnczogeyBleHBlY3RlZDogJ2FycmF5IG9mIHN0cmluZ3MnLCBjaGVjazogKHYpID0+IEFycmF5LmlzQXJyYXkodikgfSxcbiAgdHJpZ2dlcnM6IHsgZXhwZWN0ZWQ6ICdhcnJheSBvZiBzdHJpbmdzJywgY2hlY2s6ICh2KSA9PiBBcnJheS5pc0FycmF5KHYpIH0sXG4gIGRvbWFpbnM6IHsgZXhwZWN0ZWQ6ICdhcnJheSBvZiBzdHJpbmdzJywgY2hlY2s6ICh2KSA9PiBBcnJheS5pc0FycmF5KHYpIH0sXG4gIGV4YW1wbGVzOiB7IGV4cGVjdGVkOiAnYXJyYXknLCBjaGVjazogKHYpID0+IEFycmF5LmlzQXJyYXkodikgfSxcbiAgcHJlcmVxdWlzaXRlczogeyBleHBlY3RlZDogJ2FycmF5IG9mIHN0cmluZ3MnLCBjaGVjazogKHYpID0+IEFycmF5LmlzQXJyYXkodikgfSxcbiAgY2FwYWJpbGl0aWVzOiB7IGV4cGVjdGVkOiAnYXJyYXknLCBjaGVjazogKHYpID0+IEFycmF5LmlzQXJyYXkodikgfSxcbiAgZ29hbHM6IHsgZXhwZWN0ZWQ6ICdhcnJheScsIGNoZWNrOiAodikgPT4gQXJyYXkuaXNBcnJheSh2KSB9LFxuICBjb25zdHJhaW50czogeyBleHBlY3RlZDogJ2FycmF5JywgY2hlY2s6ICh2KSA9PiBBcnJheS5pc0FycmF5KHYpIH0sXG4gIGFjdGlvbnM6IHsgZXhwZWN0ZWQ6ICdhcnJheScsIGNoZWNrOiAodikgPT4gQXJyYXkuaXNBcnJheSh2KSB9LFxuICBza2lsbHM6IHsgZXhwZWN0ZWQ6ICdhcnJheScsIGNoZWNrOiAodikgPT4gQXJyYXkuaXNBcnJheSh2KSB9LFxuICAvLyBJc3N1ZSAjNzI0OiBhY3RpdmF0ZXMgYW5kIHRvb2xzIGFyZSBvYmplY3RzIGZvciBhZ2VudHMgKG5vdCBhcnJheXMpXG4gIGFjdGl2YXRlczogeyBleHBlY3RlZDogJ29iamVjdCcsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodiksIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLkFHRU5UXSB9LFxuICB0b29sczogeyBleHBlY3RlZDogJ29iamVjdCcsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodiksIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLkFHRU5UXSB9LFxuICB2YXJpYWJsZXM6IHsgZXhwZWN0ZWQ6ICdhcnJheScsIGNoZWNrOiAodikgPT4gQXJyYXkuaXNBcnJheSh2KSwgZWxlbWVudFR5cGVzOiBbRWxlbWVudFR5cGUuVEVNUExBVEVdIH0sXG4gIGVudHJpZXM6IHsgZXhwZWN0ZWQ6ICdhcnJheScsIGNoZWNrOiAodikgPT4gQXJyYXkuaXNBcnJheSh2KSwgZWxlbWVudFR5cGVzOiBbRWxlbWVudFR5cGUuTUVNT1JZXSB9LFxuICAvLyBlbGVtZW50cyBoYW5kbGVkIHNlcGFyYXRlbHkgYnkgdmFsaWRhdGVBbmROb3JtYWxpemVFbnNlbWJsZUVsZW1lbnRzIChhY2NlcHRzIGRpY3QgdG9vKVxuXG4gIC8vIE9iamVjdCBmaWVsZHNcbiAgZ29hbDogeyBleHBlY3RlZDogJ29iamVjdCcsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodiksIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLkFHRU5UXSB9LFxuICBhdXRvbm9teTogeyBleHBlY3RlZDogJ29iamVjdCcsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodiksIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLkFHRU5UXSB9LFxuICByZXNpbGllbmNlOiB7IGV4cGVjdGVkOiAnb2JqZWN0JywgY2hlY2s6ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2KSwgZWxlbWVudFR5cGVzOiBbRWxlbWVudFR5cGUuQUdFTlRdIH0sXG4gIGdhdGVrZWVwZXI6IHsgZXhwZWN0ZWQ6ICdvYmplY3QnLCBjaGVjazogKHYpID0+IHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiB2ICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHYpIH0sXG4gIHJldGVudGlvblBvbGljeTogeyBleHBlY3RlZDogJ29iamVjdCcsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodiksIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLk1FTU9SWV0gfSxcbiAgcmV0ZW50aW9uX3BvbGljeTogeyBleHBlY3RlZDogJ29iamVjdCcsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodiksIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLk1FTU9SWV0gfSxcblxuICAvLyBTdHJpbmcgZmllbGRzXG4gIC8vIElzc3VlICM3MjQ6IHN5c3RlbVByb21wdCB3YXMgbWlzc2luZyBmcm9tIGZpZWxkIHR5cGUgcnVsZXMuXG4gIC8vIEJvdGggY2FtZWxDYXNlIGFuZCBzbmFrZV9jYXNlIHZhcmlhbnRzIGFjY2VwdGVkIGJlY2F1c2UgTExNcyBmcmVxdWVudGx5XG4gIC8vIHBhc3Mgc25ha2VfY2FzZSBrZXlzOyBub3JtYWxpemF0aW9uIHRvIGNhbWVsQ2FzZSBoYXBwZW5zIGRvd25zdHJlYW0gaW5cbiAgLy8gQWdlbnRNYW5hZ2VyLnBhcnNlTWV0YWRhdGEoKSAoSXNzdWUgIzcyMikuXG4gIHN5c3RlbVByb21wdDogeyBleHBlY3RlZDogJ3N0cmluZycsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnLCBlbGVtZW50VHlwZXM6IFtFbGVtZW50VHlwZS5BR0VOVF0gfSxcbiAgc3lzdGVtX3Byb21wdDogeyBleHBlY3RlZDogJ3N0cmluZycsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnLCBlbGVtZW50VHlwZXM6IFtFbGVtZW50VHlwZS5BR0VOVF0gfSxcbiAgbmFtZTogeyBleHBlY3RlZDogJ3N0cmluZycsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnIH0sXG4gIGRlc2NyaXB0aW9uOiB7IGV4cGVjdGVkOiAnc3RyaW5nJywgY2hlY2s6ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ3N0cmluZycgfSxcbiAgYXV0aG9yOiB7IGV4cGVjdGVkOiAnc3RyaW5nJywgY2hlY2s6ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ3N0cmluZycgfSxcbiAgdmVyc2lvbjogeyBleHBlY3RlZDogJ3N0cmluZycsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2ID09PSAnbnVtYmVyJyB9LFxuICBjYXRlZ29yeTogeyBleHBlY3RlZDogJ3N0cmluZycsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnIH0sXG4gIGRvbWFpbjogeyBleHBlY3RlZDogJ3N0cmluZycsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnIH0sXG4gIHRvbmU6IHsgZXhwZWN0ZWQ6ICdzdHJpbmcnLCBjaGVjazogKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyB9LFxuXG4gIC8vIE51bWJlciBmaWVsZHNcbiAgbWF4RW50cmllczogeyBleHBlY3RlZDogJ251bWJlcicsIGNoZWNrOiAodikgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInLCBlbGVtZW50VHlwZXM6IFtFbGVtZW50VHlwZS5NRU1PUlldIH0sXG4gIG1heF9lbnRyaWVzOiB7IGV4cGVjdGVkOiAnbnVtYmVyJywgY2hlY2s6ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicsIGVsZW1lbnRUeXBlczogW0VsZW1lbnRUeXBlLk1FTU9SWV0gfSxcbiAgcHJpb3JpdHk6IHsgZXhwZWN0ZWQ6ICdudW1iZXInLCBjaGVjazogKHYpID0+IHR5cGVvZiB2ID09PSAnbnVtYmVyJyB9LFxufTtcblxuLyoqXG4gKiBJc3N1ZSAjNjYyOiBWYWxpZGF0ZSBmaWVsZCB0eXBlcyBpbiBpbnB1dCBiZWZvcmUgYXBwbHlpbmcgdG8gZWxlbWVudC5cbiAqXG4gKiBDaGVja3MgZWFjaCBmaWVsZCBpbiB0aGUgaW5wdXQgYWdhaW5zdCBgRklFTERfVFlQRV9SVUxFU2AuIEZpZWxkcyBub3QgaW4gdGhlXG4gKiBydWxlcyBtYXAgYXJlIHNraXBwZWQgKHRoZXknbGwgYmUgY2F1Z2h0IGJ5IHVua25vd24tcHJvcGVydHkgZGV0ZWN0aW9uIGxhdGVyKS5cbiAqIEVsZW1lbnQtdHlwZS1zY29wZWQgcnVsZXMgb25seSBhcHBseSB3aGVuIHRoZSB0YXJnZXQgdHlwZSBtYXRjaGVzLlxuICpcbiAqIEBwYXJhbSBpbnB1dCAtIFRoZSBlZGl0IGlucHV0IG9iamVjdCBjb250YWluaW5nIGZpZWxkcyB0byB2YWxpZGF0ZVxuICogQHBhcmFtIGVsZW1lbnRUeXBlIC0gVGhlIG5vcm1hbGl6ZWQgZWxlbWVudCB0eXBlIGJlaW5nIGVkaXRlZFxuICogQHJldHVybnMgQXJyYXkgb2YgZXJyb3IgbWVzc2FnZXMgZm9yIGZpZWxkcyB3aXRoIHdyb25nIHR5cGVzIChlbXB0eSBpZiBhbGwgdmFsaWQpXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRmllbGRUeXBlcyhcbiAgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVcbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgW2ZpZWxkLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoaW5wdXQpKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIGNvbnRpbnVlO1xuXG4gICAgY29uc3QgcnVsZSA9IEZJRUxEX1RZUEVfUlVMRVNbZmllbGRdO1xuICAgIGlmICghcnVsZSkgY29udGludWU7XG5cbiAgICAvLyBTa2lwIGlmIHJ1bGUgZG9lc24ndCBhcHBseSB0byB0aGlzIGVsZW1lbnQgdHlwZVxuICAgIGlmIChydWxlLmVsZW1lbnRUeXBlcyAmJiAhcnVsZS5lbGVtZW50VHlwZXMuaW5jbHVkZXMoZWxlbWVudFR5cGUpKSBjb250aW51ZTtcblxuICAgIGlmICghcnVsZS5jaGVjayh2YWx1ZSkpIHtcbiAgICAgIGVycm9ycy5wdXNoKGBGaWVsZCAnJHtmaWVsZH0nIGV4cGVjdHMgJHtydWxlLmV4cGVjdGVkfSwgZ290ICR7QXJyYXkuaXNBcnJheSh2YWx1ZSkgPyAnYXJyYXknIDogdHlwZW9mIHZhbHVlfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8vIE1lcmdlIG9wdGlvbnMgZm9yIHNlY3VyZSBkZWVwIG1lcmdpbmdcbmNvbnN0IE1FUkdFX09QVElPTlMgPSB7XG4gIHNraXBQcm9wZXJ0aWVzOiBEQU5HRVJPVVNfUFJPUEVSVElFUyxcbiAgcmVhZE9ubHlGaWVsZHM6IFJFQURfT05MWV9GSUVMRFNcbn07XG5cbi8qKlxuICogTWFwIGZpZWxkIG5hbWVzIHRvIHRoZWlyIGFwcHJvcHJpYXRlIHZhbGlkYXRpb24gZmllbGQgdHlwZXMuXG4gKiBUaGlzIGVuc3VyZXMgY29uc2lzdGVudCB2YWxpZGF0aW9uIGJldHdlZW4gZWRpdCAoaW5wdXQpIGFuZCBsb2FkIChvdXRwdXQpLlxuICovXG5mdW5jdGlvbiBnZXRGaWVsZFR5cGVGb3JWYWxpZGF0aW9uKGZpZWxkTmFtZTogc3RyaW5nKTogVmFsaWRhdGlvbkZpZWxkVHlwZSB8IG51bGwge1xuICAvLyBOb3JtYWxpemUgZmllbGQgbmFtZSAoaGFuZGxlIGJvdGggJ2Rlc2NyaXB0aW9uJyBhbmQgJ21ldGFkYXRhLmRlc2NyaXB0aW9uJylcbiAgY29uc3Qgbm9ybWFsaXplZEZpZWxkID0gZmllbGROYW1lLnJlcGxhY2UoL15tZXRhZGF0YVxcLi8sICcnKTtcblxuICBzd2l0Y2ggKG5vcm1hbGl6ZWRGaWVsZCkge1xuICAgIGNhc2UgJ25hbWUnOlxuICAgICAgcmV0dXJuICduYW1lJztcbiAgICBjYXNlICdkZXNjcmlwdGlvbic6XG4gICAgICByZXR1cm4gJ2Rlc2NyaXB0aW9uJztcbiAgICBjYXNlICdjb250ZW50JzpcbiAgICAgIHJldHVybiAnY29udGVudCc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsOyAvLyBObyBzcGVjaWFsIHZhbGlkYXRpb24gbmVlZGVkXG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhIGZpZWxkIHZhbHVlIGJlZm9yZSBzZXR0aW5nIGl0IG9uIGFuIGVsZW1lbnQuXG4gKiBSZXR1cm5zIG51bGwgaWYgdmFsaWQsIG9yIGFuIGVycm9yIG1lc3NhZ2UgaWYgaW52YWxpZC5cbiAqXG4gKiBAcGFyYW0gdmFsaWRhdGlvblNlcnZpY2UgLSBJbmplY3RlZCB2YWxpZGF0aW9uIHNlcnZpY2UgZm9yIHRlc3RhYmlsaXR5XG4gKiBAcGFyYW0gZmllbGQgLSBUaGUgZmllbGQgbmFtZSBiZWluZyB2YWxpZGF0ZWRcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB2YWxpZGF0ZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUZpZWxkVmFsdWUoXG4gIHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZSxcbiAgZmllbGQ6IHN0cmluZyxcbiAgdmFsdWU6IHVua25vd25cbik6IHN0cmluZyB8IG51bGwge1xuICAvLyBPbmx5IHZhbGlkYXRlIHN0cmluZyB2YWx1ZXMgZm9yIHRleHQgZmllbGRzXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bGw7IC8vIE5vbi1zdHJpbmcgdmFsdWVzIChhcnJheXMsIG9iamVjdHMsIGJvb2xlYW5zLCBudW1iZXJzKSBza2lwIHRleHQgdmFsaWRhdGlvblxuICB9XG5cbiAgY29uc3QgZmllbGRUeXBlID0gZ2V0RmllbGRUeXBlRm9yVmFsaWRhdGlvbihmaWVsZCk7XG4gIGlmICghZmllbGRUeXBlKSB7XG4gICAgcmV0dXJuIG51bGw7IC8vIE5vIHZhbGlkYXRpb24gcnVsZXMgZm9yIHRoaXMgZmllbGRcbiAgfVxuXG4gIC8vIERldGVybWluZSBtYXggbGVuZ3RoIGJhc2VkIG9uIGZpZWxkIHR5cGUsIHVzaW5nIHN5c3RlbSBjb25zdGFudHNcbiAgY29uc3QgbWF4TGVuZ3RoID0gZmllbGRUeXBlID09PSAnbmFtZScgPyBTRUNVUklUWV9MSU1JVFMuTUFYX05BTUVfTEVOR1RIIDpcbiAgICAgICAgICAgICAgICAgICAgZmllbGRUeXBlID09PSAnZGVzY3JpcHRpb24nID8gU0VDVVJJVFlfTElNSVRTLk1BWF9ERVNDUklQVElPTl9MRU5HVEggOlxuICAgICAgICAgICAgICAgICAgICBmaWVsZFR5cGUgPT09ICdjb250ZW50JyA/IFNFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEggOiBTRUNVUklUWV9MSU1JVFMuTUFYX0NPTU1BTkRfQVJHX0xFTkdUSDtcblxuICBjb25zdCByZXN1bHQgPSB2YWxpZGF0aW9uU2VydmljZS52YWxpZGF0ZUFuZFNhbml0aXplSW5wdXQodmFsdWUsIHtcbiAgICBtYXhMZW5ndGgsXG4gICAgYWxsb3dTcGFjZXM6IHRydWUsXG4gICAgZmllbGRUeXBlXG4gIH0pO1xuXG4gIGlmICghcmVzdWx0LmlzVmFsaWQpIHtcbiAgICByZXR1cm4gcmVzdWx0LmVycm9ycz8uam9pbignLCAnKSB8fCAnVmFsaWRhdGlvbiBmYWlsZWQnO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7IC8vIFZhbGlkXG59XG5cbi8qKlxuICogVmFsaWRhdGUgYW5kIG5vcm1hbGl6ZSBlbnNlbWJsZSBlbGVtZW50cyBpbnB1dC5cbiAqXG4gKiBJc3N1ZSAjNjU4OiBMTE1zIG9mdGVuIHNlbmQgZWxlbWVudHMgaW4gZGljdC1rZXllZCBmb3JtYXQgaW5zdGVhZCBvZiBhcnJheSBmb3JtYXQuXG4gKiBUaGlzIGZ1bmN0aW9uIG5vcm1hbGl6ZXMgYm90aCBmb3JtYXRzIHRvIGEgdmFsaWQgYXJyYXkgb2YgRW5zZW1ibGVFbGVtZW50LWxpa2Ugb2JqZWN0cy5cbiAqXG4gKiBBY2NlcHRlZCBmb3JtYXRzOlxuICogLSBBcnJheTogW3sgZWxlbWVudF9uYW1lOiBcImZvb1wiLCBlbGVtZW50X3R5cGU6IFwibWVtb3J5XCIsIC4uLiB9XVxuICogLSBEaWN0OiAgeyBcImZvb1wiOiB7IHR5cGU6IFwibWVtb3J5XCIsIC4uLiB9IH0gIOKGkiBjb252ZXJ0ZWQgdG8gYXJyYXlcbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgZWxlbWVudHMgaW5wdXQgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIE9iamVjdCB3aXRoIHN1Y2Nlc3MgZmxhZywgbm9ybWFsaXplZCBlbGVtZW50cyBhcnJheSwgYW5kIG9wdGlvbmFsIGVycm9yXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQW5kTm9ybWFsaXplRW5zZW1ibGVFbGVtZW50cyh2YWx1ZTogdW5rbm93bik6IHtcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgZWxlbWVudHM6IEVuc2VtYmxlRWxlbWVudElucHV0W107XG4gIGVycm9yPzogc3RyaW5nO1xufSB7XG4gIC8vIENhc2UgMTogQWxyZWFkeSBhbiBhcnJheSDigJQgdmFsaWRhdGUgZWFjaCBpdGVtXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBub3JtYWxpemVkOiBFbnNlbWJsZUVsZW1lbnRJbnB1dFtdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpdGVtID0gdmFsdWVbaV07XG4gICAgICBpZiAoIWl0ZW0gfHwgdHlwZW9mIGl0ZW0gIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYEVsZW1lbnQgYXQgaW5kZXggJHtpfSBtdXN0IGJlIGFuIG9iamVjdCB3aXRoIGVsZW1lbnRfbmFtZSBhbmQgZWxlbWVudF90eXBlYCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3Qgb2JqID0gaXRlbSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIGNvbnN0IG5hbWUgPSBvYmouZWxlbWVudF9uYW1lIHx8IG9iai5uYW1lO1xuICAgICAgY29uc3QgdHlwZSA9IG9iai5lbGVtZW50X3R5cGUgfHwgb2JqLnR5cGU7XG4gICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYEVsZW1lbnQgYXQgaW5kZXggJHtpfSBpcyBtaXNzaW5nIGVsZW1lbnRfbmFtZSAob3IgbmFtZSlgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBWYWxpZGF0ZSBfcmVtb3ZlIGlzIHN0cmljdGx5IGJvb2xlYW4gaWYgcHJlc2VudFxuICAgICAgaWYgKCdfcmVtb3ZlJyBpbiBvYmogJiYgdHlwZW9mIG9iai5fcmVtb3ZlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYEVsZW1lbnQgJyR7U3RyaW5nKG5hbWUpfScgaGFzIGludmFsaWQgX3JlbW92ZSB2YWx1ZSDigJQgbXVzdCBiZSBib29sZWFuIHRydWUsIGdvdCAke3R5cGVvZiBvYmouX3JlbW92ZX1gKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBOb3JtYWxpemUgdG8gc3RhbmRhcmQgZmllbGQgbmFtZXMsIG9ubHkgaW5jbHVkaW5nIGRlZmluZWQgdmFsdWVzXG4gICAgICBjb25zdCBlbnRyeTogRW5zZW1ibGVFbGVtZW50SW5wdXQgPSB7IC4uLm9iaiwgZWxlbWVudF9uYW1lOiBTdHJpbmcobmFtZSkgfTtcbiAgICAgIGlmICh0eXBlKSB7XG4gICAgICAgIGVudHJ5LmVsZW1lbnRfdHlwZSA9IFN0cmluZyh0eXBlKTtcbiAgICAgIH1cbiAgICAgIG5vcm1hbGl6ZWQucHVzaChlbnRyeSk7XG4gICAgfVxuXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgZWxlbWVudHM6IFtdLCBlcnJvcjogZXJyb3JzLmpvaW4oJzsgJykgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgZWxlbWVudHM6IG5vcm1hbGl6ZWQgfTtcbiAgfVxuXG4gIC8vIENhc2UgMjogRGljdC1rZXllZCBmb3JtYXQg4oCUIGNvbnZlcnQgdG8gYXJyYXlcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgY29uc3QgZGljdCA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IEVuc2VtYmxlRWxlbWVudElucHV0W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhkaWN0KSkge1xuICAgICAgaWYgKCF2YWwgfHwgdHlwZW9mIHZhbCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgZWxlbWVudHM6IFtdLFxuICAgICAgICAgIGVycm9yOiBgRWxlbWVudCAnJHtrZXl9JyBpbiBkaWN0IGZvcm1hdCBtdXN0IGJlIGFuIG9iamVjdCB3aXRoIGF0IGxlYXN0IGVsZW1lbnRfdHlwZSAob3IgdHlwZSkuIGAgK1xuICAgICAgICAgICAgYEV4cGVjdGVkOiB7IFwiJHtrZXl9XCI6IHsgdHlwZTogXCJtZW1vcnlcIiwgcm9sZTogXCJzdXBwb3J0XCIsIC4uLiB9IH1gXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBpbm5lciA9IHZhbCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIG5vcm1hbGl6ZWQucHVzaCh7XG4gICAgICAgIC4uLmlubmVyLFxuICAgICAgICBlbGVtZW50X25hbWU6IFN0cmluZyhpbm5lci5lbGVtZW50X25hbWUgfHwgaW5uZXIubmFtZSB8fCBrZXkpLFxuICAgICAgICBlbGVtZW50X3R5cGU6IFN0cmluZyhpbm5lci5lbGVtZW50X3R5cGUgfHwgaW5uZXIudHlwZSksXG4gICAgICAgIHJvbGU6IChpbm5lci5yb2xlIGFzIEVuc2VtYmxlRWxlbWVudElucHV0Wydyb2xlJ10pIHx8ICdzdXBwb3J0JyxcbiAgICAgICAgYWN0aXZhdGlvbjogKGlubmVyLmFjdGl2YXRpb24gYXMgRW5zZW1ibGVFbGVtZW50SW5wdXRbJ2FjdGl2YXRpb24nXSkgfHwgJ2Fsd2F5cycsXG4gICAgICAgIHByaW9yaXR5OiAoaW5uZXIucHJpb3JpdHkgYXMgbnVtYmVyKSA/PyA1MCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlLCBlbGVtZW50czogbm9ybWFsaXplZCB9O1xuICB9XG5cbiAgLy8gQ2FzZSAzOiBJbnZhbGlkIHR5cGVcbiAgcmV0dXJuIHtcbiAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICBlbGVtZW50czogW10sXG4gICAgZXJyb3I6IGAnZWxlbWVudHMnIG11c3QgYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyBvciBhIGRpY3Qta2V5ZWQgb2JqZWN0LiBHb3Q6ICR7dHlwZW9mIHZhbHVlfWBcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBpbmNvbWluZyBlbnNlbWJsZSBlbGVtZW50cyB3aXRoIGV4aXN0aW5nIGVsZW1lbnRzLlxuICpcbiAqIElzc3VlICM2NTgvIzY2MjogVW5pZmllZCBjb2xsZWN0aW9uIGVkaXRpbmcgc2VtYW50aWNzIOKAlCBlYWNoIGl0ZW0gaW4gdGhlIGlucHV0XG4gKiBkZWNsYXJlcyBpdHMgb3duIGludGVudCB2aWEgaXRzIHByb3BlcnRpZXM6XG4gKlxuICogLSBFeGlzdGluZyBlbGVtZW50IHdpdGggdXBkYXRlcyDihpIgbWVyZ2UgcHJvcGVydGllcyAoaW5jb21pbmcgd2lucylcbiAqIC0gTmV3IGVsZW1lbnQgKG5vdCBmb3VuZCBieSBuYW1lKSDihpIgYXBwZW5kZWRcbiAqIC0gRWxlbWVudCB3aXRoIGBfcmVtb3ZlOiB0cnVlYCDihpIgZHJvcHBlZCBmcm9tIGNvbGxlY3Rpb25cbiAqIC0gRXhpc3RpbmcgZWxlbWVudHMgbm90IGluIGluY29taW5nIOKGkiBwcmVzZXJ2ZWQgdW5jaGFuZ2VkXG4gKlxuICogVGhpcyBwYXR0ZXJuIGV4dGVuZHMgdG8gYW55IGZ1dHVyZSBncm91cGluZyB0eXBlICh3b3JrZmxvd3MsIHBpcGVsaW5lcywgdGVhbXMpLlxuICpcbiAqIEBwYXJhbSBleGlzdGluZyAtIEN1cnJlbnQgZWxlbWVudHMgYXJyYXkgZnJvbSB0aGUgZW5zZW1ibGVcbiAqIEBwYXJhbSBpbmNvbWluZyAtIE5ldy91cGRhdGVkL3JlbW92ZWQgZWxlbWVudHMgZnJvbSB0aGUgZWRpdCBpbnB1dFxuICogQHJldHVybnMgT2JqZWN0IHdpdGggbWVyZ2VkIGFycmF5IGFuZCBhbnkgd2FybmluZ3NcbiAqL1xuZnVuY3Rpb24gbWVyZ2VFbnNlbWJsZUVsZW1lbnRzKFxuICBleGlzdGluZzogRW5zZW1ibGVFbGVtZW50SW5wdXRbXSxcbiAgaW5jb21pbmc6IEVuc2VtYmxlRWxlbWVudElucHV0W11cbik6IHsgZWxlbWVudHM6IEVuc2VtYmxlRWxlbWVudElucHV0W107IHdhcm5pbmdzOiBzdHJpbmdbXSB9IHtcbiAgY29uc3QgcmVzdWx0OiBFbnNlbWJsZUVsZW1lbnRJbnB1dFtdID0gZXhpc3RpbmcubWFwKGUgPT4gKHsgLi4uZSB9KSk7XG4gIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgaW5jIG9mIGluY29taW5nKSB7XG4gICAgY29uc3QgbmFtZSA9IFN0cmluZyhpbmMuZWxlbWVudF9uYW1lIHx8IGluYy5uYW1lIHx8ICcnKTtcbiAgICBpZiAoIW5hbWUpIGNvbnRpbnVlO1xuXG4gICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IHJlc3VsdC5maW5kSW5kZXgoXG4gICAgICBlID0+IFN0cmluZyhlLmVsZW1lbnRfbmFtZSB8fCBlLm5hbWUgfHwgJycpID09PSBuYW1lXG4gICAgKTtcblxuICAgIC8vIElzc3VlICM2NjI6IF9yZW1vdmUgbWFya2VyIOKAlCBkcm9wIGVsZW1lbnQgZnJvbSBjb2xsZWN0aW9uXG4gICAgaWYgKGluYy5fcmVtb3ZlID09PSB0cnVlKSB7XG4gICAgICBpZiAoZXhpc3RpbmdJbmRleCA+PSAwKSB7XG4gICAgICAgIHJlc3VsdC5zcGxpY2UoZXhpc3RpbmdJbmRleCwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3YXJuaW5ncy5wdXNoKGBFbGVtZW50ICcke25hbWV9JyBub3QgZm91bmQgaW4gZW5zZW1ibGUg4oCUIG5vdGhpbmcgdG8gcmVtb3ZlYCk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBTdHJpcCB0cmFuc2llbnQvYWxpYXMgZmllbGRzIHRoYXQgc2hvdWxkbid0IGJlIHBlcnNpc3RlZFxuICAgIGNvbnN0IHsgX3JlbW92ZTogX2Rpc2NhcmRSZW1vdmUsIG5hbWU6IF9kaXNjYXJkTmFtZSwgdHlwZTogX2Rpc2NhcmRUeXBlLCAuLi5wZXJzaXN0YWJsZSB9ID0gaW5jO1xuXG4gICAgaWYgKGV4aXN0aW5nSW5kZXggPj0gMCkge1xuICAgICAgLy8gVXBzZXJ0OiBtZXJnZSBpbmNvbWluZyBwcm9wZXJ0aWVzIGludG8gZXhpc3RpbmcgKGluY29taW5nIHdpbnMpXG4gICAgICByZXN1bHRbZXhpc3RpbmdJbmRleF0gPSB7IC4uLnJlc3VsdFtleGlzdGluZ0luZGV4XSwgLi4ucGVyc2lzdGFibGUgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQXBwZW5kIG5ldyBlbGVtZW50XG4gICAgICByZXN1bHQucHVzaCh7IC4uLnBlcnNpc3RhYmxlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGVsZW1lbnRzOiByZXN1bHQsIHdhcm5pbmdzIH07XG59XG5cbi8qKlxuICogVmFsaWRhdGUsIG5vcm1hbGl6ZSwgYW5kIG1lcmdlIGVuc2VtYmxlIGVsZW1lbnRzIGludG8gdGhlIHVwZGF0ZSBvYmplY3QuXG4gKiBFeHRyYWN0ZWQgdG8gYXZvaWQgZHVwbGljYXRpb24gYmV0d2VlbiB0aGUgdG9wLWxldmVsIGBlbGVtZW50c2Aga2V5IGhhbmRsZXJcbiAqIGFuZCB0aGUgYG1ldGFkYXRhLmVsZW1lbnRzYCBrZXkgaGFuZGxlciAoQ2xhdWRlIHJldmlldykuXG4gKlxuICogQHJldHVybnMgQW4gZXJyb3Igc3RyaW5nIGlmIHZhbGlkYXRpb24gZmFpbHMsIG9yIG51bGwgb24gc3VjY2Vzc1xuICovXG5mdW5jdGlvbiBpc0Vuc2VtYmxlRWxlbWVudElucHV0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgRW5zZW1ibGVFbGVtZW50SW5wdXQge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGFwcGx5RW5zZW1ibGVFbGVtZW50c1VwZGF0ZShcbiAgZWxlbWVudHNJbnB1dDogdW5rbm93bixcbiAgZWxlbWVudDogdW5rbm93bixcbiAgdXBkYXRlT2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgY29sbGVjdGlvbldhcm5pbmdzOiBzdHJpbmdbXVxuKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlQW5kTm9ybWFsaXplRW5zZW1ibGVFbGVtZW50cyhlbGVtZW50c0lucHV0KTtcbiAgaWYgKCF2YWxpZGF0ZWQuc3VjY2Vzcykge1xuICAgIHJldHVybiBgSW52YWxpZCAnZWxlbWVudHMnIGZvcm1hdDogJHt2YWxpZGF0ZWQuZXJyb3J9YDtcbiAgfVxuICBjb25zdCBlbGVtZW50UmVjb3JkID0gZWxlbWVudCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgbWV0YWRhdGEgPSBlbGVtZW50UmVjb3JkLm1ldGFkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICBjb25zdCByYXdFbGVtZW50cyA9IG1ldGFkYXRhPy5lbGVtZW50cztcbiAgY29uc3QgZXhpc3RpbmdUeXBlZDogRW5zZW1ibGVFbGVtZW50SW5wdXRbXSA9IEFycmF5LmlzQXJyYXkocmF3RWxlbWVudHMpXG4gICAgPyByYXdFbGVtZW50cy5maWx0ZXIoaXNFbnNlbWJsZUVsZW1lbnRJbnB1dCkubWFwKGUgPT4gKHsgLi4uZSB9KSlcbiAgICA6IFtdO1xuICBjb25zdCBtZXJnZVJlc3VsdCA9IG1lcmdlRW5zZW1ibGVFbGVtZW50cyhleGlzdGluZ1R5cGVkLCB2YWxpZGF0ZWQuZWxlbWVudHMpO1xuICBjb2xsZWN0aW9uV2FybmluZ3MucHVzaCguLi5tZXJnZVJlc3VsdC53YXJuaW5ncyk7XG4gIGlmICghdXBkYXRlT2JqLm1ldGFkYXRhKSB7XG4gICAgdXBkYXRlT2JqLm1ldGFkYXRhID0ge307XG4gIH1cbiAgKHVwZGF0ZU9iai5tZXRhZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuZWxlbWVudHMgPSBtZXJnZVJlc3VsdC5lbGVtZW50cztcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogU3luYyBlbnNlbWJsZSBlbGVtZW50cyBmcm9tIG1ldGFkYXRhIGFmdGVyIGFuIHVwZGF0ZS5cbiAqXG4gKiBFbnNlbWJsZXMgc3RvcmUgdGhlaXIgZWxlbWVudCByZWZlcmVuY2VzIGluIG1ldGFkYXRhLmVsZW1lbnRzLFxuICogYW5kIG5lZWQgdG8gc3luYyB0aGUgaW50ZXJuYWwgZWxlbWVudHMgYXJyYXkgd2hlbiB0aGF0IGNoYW5nZXMuXG4gKlxuICogSXNzdWUgIzQ2NjogQmVmb3JlIHN5bmNpbmcsIHJlc29sdmUgYW55IG1pc3NpbmcgZWxlbWVudF90eXBlIGZpZWxkc1xuICogYnkgc2VhcmNoaW5nIHRoZSBwb3J0Zm9saW8gdmlhIHRoZSBjb250ZXh0IG1hbmFnZXJzLlxuICpcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVuc2VtYmxlIGVsZW1lbnQgdG8gc3luY1xuICogQHBhcmFtIGlucHV0IC0gVGhlIGlucHV0IG9iamVjdCB0byBjaGVjayBmb3IgZWxlbWVudCB1cGRhdGVzXG4gKiBAcGFyYW0gY29udGV4dCAtIEVsZW1lbnQgQ1JVRCBjb250ZXh0IHdpdGggbWFuYWdlcnMgZm9yIHR5cGUgcmVzb2x1dGlvblxuICovXG5hc3luYyBmdW5jdGlvbiBzeW5jRW5zZW1ibGVFbGVtZW50c0lmTmVlZGVkKFxuICBlbGVtZW50OiB1bmtub3duLFxuICBpbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGNvbnRleHQ/OiBFbGVtZW50Q3J1ZENvbnRleHRcbik6IFByb21pc2U8UmVzb2x2ZUVsZW1lbnRUeXBlc1Jlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBoYXNFbGVtZW50c1VwZGF0ZSA9IGlucHV0LmVsZW1lbnRzIHx8IChpbnB1dC5tZXRhZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik/LmVsZW1lbnRzO1xuXG4gIGlmIChoYXNFbGVtZW50c1VwZGF0ZSAmJiBlbGVtZW50IGluc3RhbmNlb2YgRW5zZW1ibGUpIHtcbiAgICAvLyBJc3N1ZSAjNDY2OiBSZXNvbHZlIG1pc3NpbmcgZWxlbWVudF90eXBlIHZpYSBwb3J0Zm9saW8gbG9va3VwIGJlZm9yZSBzeW5jXG4gICAgaWYgKGNvbnRleHQgJiYgZWxlbWVudC5tZXRhZGF0YS5lbGVtZW50cykge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzb2x2ZUVsZW1lbnRUeXBlcyhcbiAgICAgICAgZWxlbWVudC5tZXRhZGF0YS5lbGVtZW50cyxcbiAgICAgICAge1xuICAgICAgICAgIHNraWxsTWFuYWdlcjogY29udGV4dC5za2lsbE1hbmFnZXIsXG4gICAgICAgICAgdGVtcGxhdGVNYW5hZ2VyOiBjb250ZXh0LnRlbXBsYXRlTWFuYWdlcixcbiAgICAgICAgICBhZ2VudE1hbmFnZXI6IGNvbnRleHQuYWdlbnRNYW5hZ2VyLFxuICAgICAgICAgIG1lbW9yeU1hbmFnZXI6IGNvbnRleHQubWVtb3J5TWFuYWdlcixcbiAgICAgICAgICBwZXJzb25hTWFuYWdlcjogY29udGV4dC5wZXJzb25hTWFuYWdlcixcbiAgICAgICAgICBlbnNlbWJsZU1hbmFnZXI6IGNvbnRleHQuZW5zZW1ibGVNYW5hZ2VyLFxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgZWxlbWVudC5tZXRhZGF0YS5lbGVtZW50cyA9IHJlc3VsdC5yZXNvbHZlZDtcbiAgICAgIGVsZW1lbnQuc3luY0VsZW1lbnRzRnJvbU1ldGFkYXRhKCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGVsZW1lbnQuc3luY0VsZW1lbnRzRnJvbU1ldGFkYXRhKCk7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBIYW5kbGUgbWVtb3J5IGVudHJ5IHVwZGF0ZXMgd2l0aCB2YWxpZGF0aW9uIGFuZCBub3JtYWxpemF0aW9uLlxuICpcbiAqIE1lbW9yeSBlbnRyaWVzIHJlcXVpcmUgc3BlY2lhbCBoYW5kbGluZyBiZWNhdXNlIHRoZXk6XG4gKiAtIE5lZWQgSUQgZ2VuZXJhdGlvbiBpZiBtaXNzaW5nXG4gKiAtIFJlcXVpcmUgdGltZXN0YW1wIHBhcnNpbmcgYW5kIHZhbGlkYXRpb25cbiAqIC0gVXNlIGEgTWFwIHN0cnVjdHVyZSBpbnRlcm5hbGx5XG4gKlxuICogQHBhcmFtIGVudHJpZXMgLSBBcnJheSBvZiBtZW1vcnkgZW50cmllcyBmcm9tIGlucHV0XG4gKiBAcmV0dXJucyBSZXN1bHQgd2l0aCBzdWNjZXNzIHN0YXR1cywgb3B0aW9uYWwgZXJyb3IgbWVzc2FnZSwgYW5kIG5vcm1hbGl6ZWQgZW50cmllcyBtYXBcbiAqL1xuZnVuY3Rpb24gaGFuZGxlTWVtb3J5RW50cnlVcGRhdGUoZW50cmllczogdW5rbm93bltdKToge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBtZXNzYWdlPzogc3RyaW5nO1xuICBlbnRyaWVzTWFwOiBNYXA8c3RyaW5nLCB1bmtub3duPjtcbn0ge1xuICBjb25zdCBlbnRyaWVzTWFwID0gbmV3IE1hcCgpO1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZW50cnkgPSBlbnRyaWVzW2ldO1xuICAgIGlmICghZW50cnkgfHwgdHlwZW9mIGVudHJ5ICE9PSAnb2JqZWN0Jykge1xuICAgICAgZXJyb3JzLnB1c2goYEVudHJ5IGF0IGluZGV4ICR7aX0gaXMgbm90IGEgdmFsaWQgb2JqZWN0YCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnRyeU9iaiA9IGVudHJ5IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IGVudHJ5SWQgPSBlbnRyeU9iai5pZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaWYgKCFlbnRyeUlkKSB7XG4gICAgICBlbnRyeU9iai5pZCA9IGdlbmVyYXRlTWVtb3J5SWQoKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdGltZXN0YW1wID0gZW50cnlPYmoudGltZXN0YW1wID8gbmV3IERhdGUoZW50cnlPYmoudGltZXN0YW1wIGFzIHN0cmluZykgOiBuZXcgRGF0ZSgpO1xuICAgICAgaWYgKE51bWJlci5pc05hTih0aW1lc3RhbXAuZ2V0VGltZSgpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdGltZXN0YW1wJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRFbnRyeSA9IHtcbiAgICAgICAgLi4uZW50cnlPYmosXG4gICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgdGFnczogQXJyYXkuaXNBcnJheShlbnRyeU9iai50YWdzKSA/IGVudHJ5T2JqLnRhZ3MgOiBbXSxcbiAgICAgICAgbWV0YWRhdGE6IHR5cGVvZiBlbnRyeU9iai5tZXRhZGF0YSA9PT0gJ29iamVjdCcgJiYgZW50cnlPYmoubWV0YWRhdGEgIT09IG51bGwgPyBlbnRyeU9iai5tZXRhZGF0YSA6IHt9XG4gICAgICB9O1xuXG4gICAgICBlbnRyaWVzTWFwLnNldChlbnRyeU9iai5pZCwgbm9ybWFsaXplZEVudHJ5KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGVycm9ycy5wdXNoKGBFbnRyeSAnJHtlbnRyeU9iai5pZH0nIGhhcyBpbnZhbGlkIHRpbWVzdGFtcGApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBtZXNzYWdlOiBlcnJvcnMuam9pbignXFxuJyksIGVudHJpZXNNYXAgfTtcbiAgfVxuXG4gIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIGVudHJpZXNNYXAgfTtcbn1cblxuLyoqXG4gKiBFZGl0IGFuIGV4aXN0aW5nIGVsZW1lbnQgdXNpbmcgR3JhcGhRTC1hbGlnbmVkIG5lc3RlZCBpbnB1dC5cbiAqXG4gKiBAcGFyYW0gY29udGV4dCAtIEVsZW1lbnQgQ1JVRCBjb250ZXh0IHdpdGggbWFuYWdlcnNcbiAqIEBwYXJhbSBhcmdzIC0gRWRpdCBhcmd1bWVudHMgKG5hbWUsIHR5cGUsIGlucHV0KVxuICogQHBhcmFtIHZhbGlkYXRpb25TZXJ2aWNlIC0gT3B0aW9uYWwgdmFsaWRhdGlvbiBzZXJ2aWNlIGZvciBESSAoY3JlYXRlcyBkZWZhdWx0IGlmIG5vdCBwcm92aWRlZClcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVkaXRFbGVtZW50KFxuICBjb250ZXh0OiBFbGVtZW50Q3J1ZENvbnRleHQsXG4gIGFyZ3M6IEVkaXRFbGVtZW50QXJncyxcbiAgdmFsaWRhdGlvblNlcnZpY2U/OiBWYWxpZGF0aW9uU2VydmljZVxuKSB7XG4gIGF3YWl0IGNvbnRleHQuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcblxuICAvLyBVc2UgaW5qZWN0ZWQgdmFsaWRhdGlvbiBzZXJ2aWNlIG9yIGNyZWF0ZSBkZWZhdWx0XG4gIGNvbnN0IHZhbGlkYXRvciA9IHZhbGlkYXRpb25TZXJ2aWNlID8/IG5ldyBWYWxpZGF0aW9uU2VydmljZSgpO1xuXG4gIGNvbnN0IHsgbmFtZSwgdHlwZSwgaW5wdXQgfSA9IGFyZ3M7XG5cbiAgLy8gVmFsaWRhdGUgaW5wdXQgaXMgcHJvdmlkZWRcbiAgaWYgKCFpbnB1dCB8fCB0eXBlb2YgaW5wdXQgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGVycm9yKCdNaXNzaW5nIG9yIGludmFsaWQgaW5wdXQgb2JqZWN0LiBQcm92aWRlIGZpZWxkcyB0byB1cGRhdGUgYXMgYSBuZXN0ZWQgb2JqZWN0LicpO1xuICB9XG5cbiAgY29uc3QgeyB0eXBlOiBub3JtYWxpemVkVHlwZSB9ID0gbm9ybWFsaXplRWxlbWVudFR5cGVJbnB1dCh0eXBlKTtcblxuICBpZiAoIW5vcm1hbGl6ZWRUeXBlKSB7XG4gICAgcmV0dXJuIGVycm9yKGBJbnZhbGlkIGVsZW1lbnQgdHlwZSAnJHt0eXBlfScuIFZhbGlkIHR5cGVzOiAke2Zvcm1hdFZhbGlkRWxlbWVudFR5cGVzTGlzdCgpfWApO1xuICB9XG5cbiAgY29uc3QgbWFuYWdlciA9IGdldE1hbmFnZXJGb3JUeXBlKGNvbnRleHQsIG5vcm1hbGl6ZWRUeXBlKTtcbiAgaWYgKCFtYW5hZ2VyKSB7XG4gICAgY29uc3QgbGFiZWxQbHVyYWwgPSBnZXRFbGVtZW50VHlwZUxhYmVsKG5vcm1hbGl6ZWRUeXBlLCB7IHBsdXJhbDogdHJ1ZSB9KTtcbiAgICByZXR1cm4gZXJyb3IoYEVsZW1lbnQgdHlwZSAnJHtsYWJlbFBsdXJhbH0nIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGZvciBlZGl0aW5nYCk7XG4gIH1cblxuICBjb25zdCBlbGVtZW50ID0gYXdhaXQgcmVzb2x2ZUVsZW1lbnRCeU5hbWUobWFuYWdlciwgbm9ybWFsaXplZFR5cGUsIG5hbWUpO1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICBjb25zdCBsYWJlbCA9IGdldEVsZW1lbnRUeXBlTGFiZWwobm9ybWFsaXplZFR5cGUpO1xuICAgIHRocm93IG5ldyBFbGVtZW50Tm90Rm91bmRFcnJvcihsYWJlbCwgbmFtZSk7XG4gIH1cblxuICAvLyBDaGVjayBmb3IgdW5rbm93biBwcm9wZXJ0aWVzIGFuZCBnZW5lcmF0ZSB3YXJuaW5nc1xuICBjb25zdCB1bmtub3duUHJvcGVydHlXYXJuaW5ncyA9IGRldGVjdFVua25vd25NZXRhZGF0YVByb3BlcnRpZXMoXG4gICAgbm9ybWFsaXplZFR5cGUsXG4gICAgaW5wdXQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKTtcblxuICAvLyBBbHNvIHZhbGlkYXRlIG5lc3RlZCBtZXRhZGF0YSBzdWItb2JqZWN0ICh0aGUgdG9wLWxldmVsICdtZXRhZGF0YScga2V5IGlzXG4gIC8vIHNraXBwZWQgYnkgZGV0ZWN0VW5rbm93bk1ldGFkYXRhUHJvcGVydGllcyBhcyBhIHNwZWNpYWwgcm91dGUgZmllbGQsIHNvXG4gIC8vIGRhbmdlcm91cy91bmtub3duIHByb3BlcnRpZXMgaW5zaWRlIGl0IHdvdWxkIGdvIHVuY2hlY2tlZCBvdGhlcndpc2UpXG4gIGlmIChpbnB1dC5tZXRhZGF0YSAmJiB0eXBlb2YgaW5wdXQubWV0YWRhdGEgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGlucHV0Lm1ldGFkYXRhKSkge1xuICAgIGNvbnN0IG5lc3RlZFdhcm5pbmdzID0gZGV0ZWN0VW5rbm93bk1ldGFkYXRhUHJvcGVydGllcyhcbiAgICAgIG5vcm1hbGl6ZWRUeXBlLFxuICAgICAgaW5wdXQubWV0YWRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICApO1xuICAgIHVua25vd25Qcm9wZXJ0eVdhcm5pbmdzLnB1c2goLi4ubmVzdGVkV2FybmluZ3MpO1xuICB9XG5cbiAgY29uc3Qgd2FybmluZ1RleHQgPSBmb3JtYXRVbmtub3duUHJvcGVydHlXYXJuaW5ncyh1bmtub3duUHJvcGVydHlXYXJuaW5ncyk7XG5cbiAgaWYgKHVua25vd25Qcm9wZXJ0eVdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICBsb2dnZXIud2FybihgW2VkaXRFbGVtZW50XSBVbmtub3duIHByb3BlcnRpZXMgZGV0ZWN0ZWRgLCB7XG4gICAgICBlbGVtZW50VHlwZTogbm9ybWFsaXplZFR5cGUsXG4gICAgICBlbGVtZW50TmFtZTogbmFtZSxcbiAgICAgIHdhcm5pbmdDb3VudDogdW5rbm93blByb3BlcnR5V2FybmluZ3MubGVuZ3RoLFxuICAgICAgdW5rbm93blByb3BlcnRpZXM6IHVua25vd25Qcm9wZXJ0eVdhcm5pbmdzLm1hcCh3ID0+ICh7XG4gICAgICAgIHByb3BlcnR5OiB3LnByb3BlcnR5LFxuICAgICAgICBzdWdnZXN0aW9uOiB3LnN1Z2dlc3Rpb25cbiAgICAgIH0pKVxuICAgIH0pO1xuICB9XG5cbiAgLy8gSXNzdWUgIzE1OTE6IFZhbGlkYXRlIGVsZW1lbnQtc3BlY2lmaWMgY29uc3RyYWludHMgYmVmb3JlIGF0dGVtcHRpbmcgZWRpdHNcbiAgLy8gTWVtb3J5IGNvbnRlbnQgaXMgcmVhZC1vbmx5IChhcHBlbmQtb25seSBhcmNoaXRlY3R1cmUpIC0gcmVqZWN0IGF0dGVtcHRzIHRvIGVkaXQgaXRcbiAgaWYgKG5vcm1hbGl6ZWRUeXBlID09PSBFbGVtZW50VHlwZS5NRU1PUlkgJiYgJ2NvbnRlbnQnIGluIGlucHV0KSB7XG4gICAgcmV0dXJuIGVycm9yKFxuICAgICAgYE1lbW9yeSBjb250ZW50IGNhbm5vdCBiZSBtb2RpZmllZCB2aWEgZWRpdF9lbGVtZW50LiBgICtcbiAgICAgIGBNZW1vcnkgdXNlcyBhbiBhcHBlbmQtb25seSBhcmNoaXRlY3R1cmUuIGAgK1xuICAgICAgYFVzZSB0aGUgJ2FkZEVudHJ5JyBvcGVyYXRpb24gdG8gYWRkIG5ldyBlbnRyaWVzIHRvIHRoaXMgbWVtb3J5LmBcbiAgICApO1xuICB9XG5cbiAgLy8gSXNzdWUgIzY2MjogVmFsaWRhdGUgZmllbGQgdHlwZXMgYmVmb3JlIGFwcGx5aW5nIChwcmV2ZW50cyBzaWxlbnQgZGF0YSBjb3JydXB0aW9uKVxuICBjb25zdCB0eXBlRXJyb3JzID0gdmFsaWRhdGVGaWVsZFR5cGVzKGlucHV0LCBub3JtYWxpemVkVHlwZSk7XG4gIGlmICh0eXBlRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gZXJyb3IoYEZpZWxkIHR5cGUgdmFsaWRhdGlvbiBmYWlsZWQ6XFxuJHt0eXBlRXJyb3JzLm1hcChlID0+IGAgIOKAoiAke2V9YCkuam9pbignXFxuJyl9YCk7XG4gIH1cblxuICBjb25zdCBnYXRla2VlcGVyRXJyb3JzID0gY29sbGVjdEdhdGVrZWVwZXJBdXRob3JpbmdFcnJvcnMoaW5wdXQsIGlucHV0Lm1ldGFkYXRhKTtcbiAgaWYgKGdhdGVrZWVwZXJFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBlcnJvcihmb3JtYXRHYXRla2VlcGVyVmFsaWRhdGlvbk1lc3NhZ2UoZ2F0ZWtlZXBlckVycm9ycykpO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgc3RyaW5nIGZpZWxkIHZhbHVlcyB1c2luZyBpbmplY3RlZCB2YWxpZGF0b3JcbiAgZm9yIChjb25zdCBbZmllbGQsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhpbnB1dCkpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbkVycm9yID0gdmFsaWRhdGVGaWVsZFZhbHVlKHZhbGlkYXRvciwgZmllbGQsIHZhbHVlKTtcbiAgICAgIGlmICh2YWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yKGBJbnZhbGlkIHZhbHVlIGZvciAnJHtmaWVsZH0nOiAke3ZhbGlkYXRpb25FcnJvcn1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBCdWlsZCB0aGUgdXBkYXRlIG9iamVjdCwgbWFwcGluZyB0b3AtbGV2ZWwgZmllbGRzIHRvIG1ldGFkYXRhIHdoZXJlIGFwcHJvcHJpYXRlXG4gIC8vIElzc3VlICM1NjU6IFVzZSB0eXBlLXNwZWNpZmljIG1ldGFkYXRhIHByb3BlcnRpZXMgZnJvbSBhdXRob3JpdGF0aXZlIHNvdXJjZVxuICBjb25zdCBtZXRhZGF0YUZpZWxkcyA9IEtOT1dOX01FVEFEQVRBX1BST1BFUlRJRVNbbm9ybWFsaXplZFR5cGVdID8/IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCB1cGRhdGVPYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGNvbnN0IHVucmVjb2duaXplZEZpZWxkV2FybmluZ3M6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGNvbGxlY3Rpb25XYXJuaW5nczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgYXBwbGllZEZpZWxkczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc2tpcHBlZEZpZWxkczogc3RyaW5nW10gPSBbXTtcblxuICAvLyBGaWVsZHMgaGFuZGxlZCBieSBkZWRpY2F0ZWQgYnJhbmNoZXMgKG5vdCBtZXRhZGF0YSByb3V0aW5nKVxuICBjb25zdCBzcGVjaWFsUm91dGVGaWVsZHMgPSBuZXcgU2V0KFsnaW5zdHJ1Y3Rpb25zJywgJ2NvbnRlbnQnLCAnZWxlbWVudHMnLCAnbWV0YWRhdGEnLCAnZW50cmllcycsICd2ZXJzaW9uJ10pO1xuXG4gIC8vIENvbnRlbnQgY29udGV4dCBtYXAgc2hhcmVkIGJ5IGluc3RydWN0aW9ucyBhbmQgY29udGVudCB2YWxpZGF0aW9uIGJyYW5jaGVzXG4gIGNvbnN0IGNvbnRlbnRDb250ZXh0TWFwOiBSZWNvcmQ8c3RyaW5nLCAncGVyc29uYScgfCAnc2tpbGwnIHwgJ3RlbXBsYXRlJyB8ICdhZ2VudCcgfCAnbWVtb3J5Jz4gPSB7XG4gICAgW0VsZW1lbnRUeXBlLkFHRU5UXTogJ2FnZW50JyxcbiAgICBbRWxlbWVudFR5cGUuU0tJTExdOiAnc2tpbGwnLFxuICAgIFtFbGVtZW50VHlwZS5URU1QTEFURV06ICd0ZW1wbGF0ZScsXG4gICAgW0VsZW1lbnRUeXBlLlBFUlNPTkFdOiAncGVyc29uYScsXG4gICAgW0VsZW1lbnRUeXBlLk1FTU9SWV06ICdtZW1vcnknLFxuICB9O1xuXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGlucHV0KSkge1xuICAgIC8vIFNraXAgZGFuZ2Vyb3VzIHByb3BlcnRpZXNcbiAgICBpZiAoREFOR0VST1VTX1BST1BFUlRJRVMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgc2tpcHBlZEZpZWxkcy5wdXNoKGtleSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBTa2lwIHJlYWQtb25seSBmaWVsZHNcbiAgICBpZiAoUkVBRF9PTkxZX0ZJRUxEUy5oYXMoa2V5KSkge1xuICAgICAgbG9nZ2VyLndhcm4oYFtlZGl0RWxlbWVudF0gU2tpcHBpbmcgcmVhZC1vbmx5IGZpZWxkOiAke2tleX1gKTtcbiAgICAgIHNraXBwZWRGaWVsZHMucHVzaChrZXkpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gRXZlcnkgYnJhbmNoIGJlbG93IGFwcGxpZXMgdGhlIGZpZWxkIOKAlCB0cmFjayBvbmNlIGF0IHRoZSBlbmRcbiAgICBsZXQgZmllbGRBcHBsaWVkID0gdHJ1ZTtcblxuICAgIC8vIE1hcCBrbm93biBtZXRhZGF0YSBmaWVsZHMgYXV0b21hdGljYWxseSAodHlwZS1zcGVjaWZpYylcbiAgICBpZiAobWV0YWRhdGFGaWVsZHMuaGFzKGtleSkgJiYgIXNwZWNpYWxSb3V0ZUZpZWxkcy5oYXMoa2V5KSkge1xuICAgICAgaWYgKCF1cGRhdGVPYmoubWV0YWRhdGEpIHtcbiAgICAgICAgdXBkYXRlT2JqLm1ldGFkYXRhID0ge307XG4gICAgICB9XG4gICAgICAodXBkYXRlT2JqLm1ldGFkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldID0gdmFsdWU7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdlbGVtZW50cycgJiYgbm9ybWFsaXplZFR5cGUgPT09IEVsZW1lbnRUeXBlLkVOU0VNQkxFKSB7XG4gICAgICAvLyBJc3N1ZSAjNjU4OiBWYWxpZGF0ZSBhbmQgbm9ybWFsaXplIGVsZW1lbnRzIGlucHV0IChhcnJheSBvciBkaWN0IGZvcm1hdClcbiAgICAgIGNvbnN0IGVsZW1FcnJvciA9IGFwcGx5RW5zZW1ibGVFbGVtZW50c1VwZGF0ZSh2YWx1ZSwgZWxlbWVudCwgdXBkYXRlT2JqLCBjb2xsZWN0aW9uV2FybmluZ3MpO1xuICAgICAgaWYgKGVsZW1FcnJvcikgcmV0dXJuIGVycm9yKGVsZW1FcnJvcik7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdtZXRhZGF0YScgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgbWV0YVZhbHVlID0gdmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICAgIC8vIElmIG1ldGFkYXRhLmVsZW1lbnRzIGlzIHByb3ZpZGVkIGZvciBhbiBlbnNlbWJsZSwgZXh0cmFjdCBhbmQgcm91dGUgdGhyb3VnaFxuICAgICAgLy8gdGhlIGVuc2VtYmxlIGVsZW1lbnRzIGhhbmRsZXIgZm9yIHByb3BlciB2YWxpZGF0aW9uL25vcm1hbGl6YXRpb24vbWVyZ2UuXG4gICAgICBpZiAobm9ybWFsaXplZFR5cGUgPT09IEVsZW1lbnRUeXBlLkVOU0VNQkxFICYmIG1ldGFWYWx1ZS5lbGVtZW50cykge1xuICAgICAgICBjb25zdCBlbGVtRXJyb3IgPSBhcHBseUVuc2VtYmxlRWxlbWVudHNVcGRhdGUobWV0YVZhbHVlLmVsZW1lbnRzLCBlbGVtZW50LCB1cGRhdGVPYmosIGNvbGxlY3Rpb25XYXJuaW5ncyk7XG4gICAgICAgIGlmIChlbGVtRXJyb3IpIHJldHVybiBlcnJvcihlbGVtRXJyb3IpO1xuXG4gICAgICAgIC8vIFJlbW92ZSBlbGVtZW50cyBmcm9tIG1ldGFkYXRhIHZhbHVlIGJlZm9yZSBkZWVwIG1lcmdlIHRvIGF2b2lkIGRvdWJsZS1wcm9jZXNzaW5nXG4gICAgICAgIGNvbnN0IHsgZWxlbWVudHM6IF9leHRyYWN0ZWQsIC4uLnJlc3RNZXRhZGF0YSB9ID0gbWV0YVZhbHVlO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMocmVzdE1ldGFkYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdXBkYXRlT2JqLm1ldGFkYXRhID0gZGVlcE1lcmdlKFxuICAgICAgICAgICAgdXBkYXRlT2JqLm1ldGFkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgICAgICAgcmVzdE1ldGFkYXRhLFxuICAgICAgICAgICAgTUVSR0VfT1BUSU9OU1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE1lcmdlIG5lc3RlZCBtZXRhZGF0YSB3aXRoIHNlY3VyaXR5IG9wdGlvbnNcbiAgICAgICAgdXBkYXRlT2JqLm1ldGFkYXRhID0gZGVlcE1lcmdlKFxuICAgICAgICAgICh1cGRhdGVPYmoubWV0YWRhdGEgfHwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgICAgIG1ldGFWYWx1ZSxcbiAgICAgICAgICBNRVJHRV9PUFRJT05TXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdpbnN0cnVjdGlvbnMnICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIElzc3VlICM2MDIgcmVzb2x2ZWQ6ICdpbnN0cnVjdGlvbnMnIGlzIGEgZmlyc3QtY2xhc3MgZmllbGQgKGJlaGF2aW9yYWwgZGlyZWN0aXZlcylcbiAgICAgIGNvbnN0IGNvbnRlbnRWYWxpZGF0aW9uID0gQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZUFuZFNhbml0aXplKHZhbHVlLCB7XG4gICAgICAgIG1heExlbmd0aDogU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSCxcbiAgICAgICAgY29udGVudENvbnRleHQ6IGNvbnRlbnRDb250ZXh0TWFwW25vcm1hbGl6ZWRUeXBlXVxuICAgICAgfSk7XG4gICAgICBjb25zdCBzYW5pdGl6ZWRJbnN0cnVjdGlvbnMgPSBjb250ZW50VmFsaWRhdGlvbi5zYW5pdGl6ZWRDb250ZW50IHx8ICcnO1xuICAgICAgLy8gU2V0IGluc3RydWN0aW9ucyBvbiB0aGUgZWxlbWVudCBkaXJlY3RseSAoYWxsIHR5cGVzIG5vdyBoYXZlIHRoaXMgcHJvcGVydHkpXG4gICAgICAoZWxlbWVudCBhcyBhbnkpLmluc3RydWN0aW9ucyA9IHNhbml0aXplZEluc3RydWN0aW9ucztcbiAgICAgIC8vIEZvciBhZ2VudHMsIGFsc28gdXBkYXRlIGV4dGVuc2lvbnMuaW5zdHJ1Y3Rpb25zIGZvciBiYWNrd2FyZCBjb21wYXRcbiAgICAgIGlmIChub3JtYWxpemVkVHlwZSA9PT0gRWxlbWVudFR5cGUuQUdFTlQpIHtcbiAgICAgICAgaWYgKCFlbGVtZW50LmV4dGVuc2lvbnMpIHtcbiAgICAgICAgICAoZWxlbWVudCBhcyBhbnkpLmV4dGVuc2lvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICAoZWxlbWVudCBhcyBhbnkpLmV4dGVuc2lvbnMuaW5zdHJ1Y3Rpb25zID0gc2FuaXRpemVkSW5zdHJ1Y3Rpb25zO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnY29udGVudCcgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gSXNzdWUgIzU4NS8jNjAyOiBIYW5kbGUgY29udGVudCB1cGRhdGVzIChyZWZlcmVuY2UgbWF0ZXJpYWwpXG4gICAgICBjb25zdCBjb250ZW50VmFsaWRhdGlvbiA9IENvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVBbmRTYW5pdGl6ZSh2YWx1ZSwge1xuICAgICAgICBtYXhMZW5ndGg6IFNFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEgsXG4gICAgICAgIGNvbnRlbnRDb250ZXh0OiBjb250ZW50Q29udGV4dE1hcFtub3JtYWxpemVkVHlwZV1cbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc2FuaXRpemVkQ29udGVudCA9IGNvbnRlbnRWYWxpZGF0aW9uLnNhbml0aXplZENvbnRlbnQgfHwgJyc7XG4gICAgICAvLyBTZXQgY29udGVudCBvbiB0aGUgZWxlbWVudCBkaXJlY3RseSAoYWxsIHR5cGVzIG5vdyBoYXZlIHRoaXMgcHJvcGVydHkpXG4gICAgICAoZWxlbWVudCBhcyBhbnkpLmNvbnRlbnQgPSBzYW5pdGl6ZWRDb250ZW50O1xuICAgIH0gZWxzZSBpZiAoc3BlY2lhbFJvdXRlRmllbGRzLmhhcyhrZXkpKSB7XG4gICAgICAvLyBTcGVjaWFsIHJvdXRlIGZpZWxkIOKAlCBoYW5kbGVkIGVsc2V3aGVyZSwgc2tpcFxuICAgICAgZmllbGRBcHBsaWVkID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElzc3VlICM1NjU6IEZpZWxkIG5vdCBpbiB0eXBlLXNwZWNpZmljIG1ldGFkYXRhIHNldCBhbmQgbm90IGEgc3BlY2lhbCByb3V0ZSDigJRcbiAgICAgIC8vIHN0aWxsIHJvdXRlIHRvIHVwZGF0ZU9iaiBmb3IgYmFja3dhcmQgY29tcGF0LCBidXQgd2FybiB0aGF0IGl0IG1heSBub3QgcGVyc2lzdFxuICAgICAgdXBkYXRlT2JqW2tleV0gPSB2YWx1ZTtcbiAgICAgIHVucmVjb2duaXplZEZpZWxkV2FybmluZ3MucHVzaChcbiAgICAgICAgYEZpZWxkICcke2tleX0nIGlzIG5vdCBhIHJlY29nbml6ZWQgbWV0YWRhdGEgcHJvcGVydHkgZm9yICR7Z2V0RWxlbWVudFR5cGVMYWJlbChub3JtYWxpemVkVHlwZSl9IOKAlCBpdCBtYXkgbm90IHBlcnNpc3QgYWZ0ZXIgc2F2ZS5gXG4gICAgICApO1xuICAgICAgbG9nZ2VyLndhcm4oYFtlZGl0RWxlbWVudF0gVW5yZWNvZ25pemVkIGZpZWxkICcke2tleX0nIGZvciAke25vcm1hbGl6ZWRUeXBlfSwgcm91dGluZyB0byBlbGVtZW50IG9iamVjdGAsIHtcbiAgICAgICAgZWxlbWVudFR5cGU6IG5vcm1hbGl6ZWRUeXBlLFxuICAgICAgICBlbGVtZW50TmFtZTogbmFtZSxcbiAgICAgICAgZmllbGQ6IGtleSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChmaWVsZEFwcGxpZWQpIHtcbiAgICAgIGFwcGxpZWRGaWVsZHMucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIERlZXAgbWVyZ2UgdGhlIHVwZGF0ZSBpbnRvIHRoZSBlbGVtZW50IHdpdGggc2VjdXJpdHkgb3B0aW9uc1xuICBjb25zdCBlbGVtZW50RGF0YSA9IGVsZW1lbnQgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgbWVyZ2VkRGF0YSA9IGRlZXBNZXJnZShlbGVtZW50RGF0YSwgdXBkYXRlT2JqLCBNRVJHRV9PUFRJT05TKTtcblxuICAvLyBBcHBseSBtZXJnZWQgZGF0YSBiYWNrIHRvIGVsZW1lbnRcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobWVyZ2VkRGF0YSkpIHtcbiAgICBpZiAoa2V5ICE9PSAnbWV0YWRhdGEnKSB7XG4gICAgICAoZWxlbWVudCBhcyBhbnkpW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICAvLyBIYW5kbGUgbWV0YWRhdGEgc2VwYXJhdGVseSB0byBwcmVzZXJ2ZSBlbGVtZW50IHN0cnVjdHVyZVxuICBpZiAobWVyZ2VkRGF0YS5tZXRhZGF0YSAmJiBlbGVtZW50Lm1ldGFkYXRhKSB7XG4gICAgT2JqZWN0LmFzc2lnbihlbGVtZW50Lm1ldGFkYXRhLCBtZXJnZWREYXRhLm1ldGFkYXRhKTtcbiAgfVxuXG4gIC8vIEhhbmRsZSBtZW1vcnkgZW50cmllcyBzcGVjaWFsbHkgKGV4dHJhY3RlZCBmb3IgY2xhcml0eSlcbiAgaWYgKG5vcm1hbGl6ZWRUeXBlID09PSBFbGVtZW50VHlwZS5NRU1PUlkgJiYgaW5wdXQuZW50cmllcyAmJiBBcnJheS5pc0FycmF5KGlucHV0LmVudHJpZXMpKSB7XG4gICAgY29uc3QgbWVtb3J5UmVzdWx0ID0gaGFuZGxlTWVtb3J5RW50cnlVcGRhdGUoaW5wdXQuZW50cmllcyk7XG4gICAgaWYgKCFtZW1vcnlSZXN1bHQuc3VjY2Vzcykge1xuICAgICAgcmV0dXJuIGVycm9yKGBNZW1vcnkgZW50cnkgdmFsaWRhdGlvbiBlcnJvcnM6XFxuJHttZW1vcnlSZXN1bHQubWVzc2FnZX1cXG5cXG5WYWxpZCBlbnRyaWVzIHdlcmUgc2F2ZWQuYCk7XG4gICAgfVxuICAgIChlbGVtZW50IGFzIGFueSkuZW50cmllcyA9IG1lbW9yeVJlc3VsdC5lbnRyaWVzTWFwO1xuICB9XG5cbiAgLy8gU3luYyBlbnNlbWJsZSBlbGVtZW50cyBmcm9tIG1ldGFkYXRhIChleHRyYWN0ZWQgZm9yIGNsYXJpdHkpXG4gIC8vIElzc3VlICM0NjY6IFJlc29sdmUgZWxlbWVudF90eXBlIHZpYSBwb3J0Zm9saW8gbG9va3VwIGJlZm9yZSBzeW5jLCBzdXJmYWNlIHdhcm5pbmdzXG4gIGxldCByZXNvbHV0aW9uV2FybmluZ1RleHQgPSAnJztcbiAgaWYgKG5vcm1hbGl6ZWRUeXBlID09PSBFbGVtZW50VHlwZS5FTlNFTUJMRSkge1xuICAgIGNvbnN0IHJlc29sdXRpb25SZXN1bHQgPSBhd2FpdCBzeW5jRW5zZW1ibGVFbGVtZW50c0lmTmVlZGVkKGVsZW1lbnQsIGlucHV0LCBjb250ZXh0KTtcbiAgICBpZiAocmVzb2x1dGlvblJlc3VsdCkge1xuICAgICAgcmVzb2x1dGlvbldhcm5pbmdUZXh0ID0gZm9ybWF0RWxlbWVudFJlc29sdXRpb25XYXJuaW5ncyhyZXNvbHV0aW9uUmVzdWx0KTtcbiAgICB9XG4gIH1cblxuICAvLyBGaXggIzkxMTogTm9ybWFsaXplIG1ldGFkYXRhIGFmdGVyIG1lcmdlIHRvIGVuc3VyZSBzdHJ1Y3R1cmFsIGNvbnNpc3RlbmN5LlxuICAvLyBCYXNlRWxlbWVudCBjb25zdHJ1Y3RvciBydW5zIG5vcm1hbGl6ZU1ldGFkYXRhIG9uIGNyZWF0ZS9sb2FkLCBidXQgdGhlIGVkaXQgcGF0aFxuICAvLyBtb2RpZmllcyBtZXRhZGF0YSBpbi1wbGFjZS4gVGhpcyBlbnN1cmVzIGVzc2VudGlhbCBkZWZhdWx0cyBzdXJ2aXZlIGVkaXRzLlxuICBpZiAoZWxlbWVudC5tZXRhZGF0YSkge1xuICAgIGVsZW1lbnQubWV0YWRhdGEuZGVzY3JpcHRpb24gPz89ICcnO1xuICAgIGVsZW1lbnQubWV0YWRhdGEudGFncyA/Pz0gW107XG4gICAgLy8gVXBkYXRlIG1vZGlmaWVkIHRpbWVzdGFtcFxuICAgIGVsZW1lbnQubWV0YWRhdGEubW9kaWZpZWQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gIH1cblxuICAvLyBIYW5kbGUgdmVyc2lvbiB1cGRhdGVzXG4gIGlmIChpbnB1dC52ZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCB1cGRhdGUgPSB1cGRhdGVWZXJzaW9uRXhwbGljaXQoZWxlbWVudCwgU3RyaW5nKGlucHV0LnZlcnNpb24pKTtcbiAgICBpZiAoIXVwZGF0ZS5zdWNjZXNzKSB7XG4gICAgICByZXR1cm4gZXJyb3IodXBkYXRlLm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byB1cGRhdGUgdmVyc2lvbicpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBhdXRvSW5jcmVtZW50VmVyc2lvbihlbGVtZW50KTtcbiAgfVxuXG4gIC8vIERldGVybWluZSBmaWxlIHBhdGggZm9yIHNhdmluZ1xuICBjb25zdCBmaWxlUGF0aENhbmRpZGF0ZSA9IHR5cGVvZiAoZWxlbWVudCBhcyBhbnkpLmdldEZpbGVQYXRoID09PSAnZnVuY3Rpb24nXG4gICAgPyAoZWxlbWVudCBhcyBhbnkpLmdldEZpbGVQYXRoKClcbiAgICA6ICgoZWxlbWVudCBhcyBhbnkpLmZpbGVQYXRoIHx8IChlbGVtZW50IGFzIGFueSkuZmlsZW5hbWUpO1xuICBjb25zdCBmaWxlbmFtZSA9IHR5cGVvZiBmaWxlUGF0aENhbmRpZGF0ZSA9PT0gJ3N0cmluZycgJiYgZmlsZVBhdGhDYW5kaWRhdGUubGVuZ3RoID4gMFxuICAgID8gZmlsZVBhdGhDYW5kaWRhdGVcbiAgICA6IGdldEVsZW1lbnRGaWxlbmFtZShub3JtYWxpemVkVHlwZSwgZWxlbWVudC5tZXRhZGF0YT8ubmFtZSB8fCBuYW1lKTtcblxuICB0cnkge1xuICAgIGF3YWl0IG1hbmFnZXIuc2F2ZShlbGVtZW50LCBmaWxlbmFtZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBlcnJvcihgRmFpbGVkIHRvIHNhdmUgZWxlbWVudDogJHtlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWApO1xuICB9XG5cbiAgY29uc3QgbGFiZWwgPSBnZXRFbGVtZW50VHlwZUxhYmVsKG5vcm1hbGl6ZWRUeXBlKTtcbiAgY29uc3QgZGlzcGxheU5hbWUgPSBlbGVtZW50Lm1ldGFkYXRhPy5uYW1lIHx8IG5hbWU7XG4gIGNvbnN0IHVwZGF0ZWRGaWVsZHMgPSBhcHBsaWVkRmllbGRzLmpvaW4oJywgJyk7XG5cbiAgLy8gSXNzdWUgIzE2NTY6IElmIGFsbCBmaWVsZHMgd2VyZSBzaWxlbnRseSBza2lwcGVkLCByZXBvcnQgaG9uZXN0bHlcbiAgaWYgKGFwcGxpZWRGaWVsZHMubGVuZ3RoID09PSAwICYmIHNraXBwZWRGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbe1xuICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIHRleHQ6IGDimqDvuI8gTm8gZmllbGRzIGFwcGxpZWQgdG8gJHtsYWJlbH0gJyR7ZGlzcGxheU5hbWV9Jy4gYCArXG4gICAgICAgICAgYFNraXBwZWQ6ICR7c2tpcHBlZEZpZWxkcy5qb2luKCcsICcpfSAoZGFuZ2Vyb3VzIG9yIHJlYWQtb25seSBmaWVsZHMgYXJlIG5vdCBlZGl0YWJsZSkuYFxuICAgICAgfV1cbiAgICB9O1xuICB9XG5cbiAgLy8gSXNzdWUgIzU2NTogSW5jbHVkZSB3YXJuaW5ncyBmb3IgdW5yZWNvZ25pemVkIGZpZWxkcyBpbiByZXNwb25zZVxuICBsZXQgdW5yZWNvZ25pemVkV2FybmluZ1RleHQgPSAnJztcbiAgaWYgKHVucmVjb2duaXplZEZpZWxkV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGxpbmVzID0gWyfimqDvuI8gKipVbnJlY29nbml6ZWQgRmllbGQgV2FybmluZ3M6KionXTtcbiAgICBmb3IgKGNvbnN0IHdhcm5pbmcgb2YgdW5yZWNvZ25pemVkRmllbGRXYXJuaW5ncykge1xuICAgICAgbGluZXMucHVzaChgICAg4oCiICR7d2FybmluZ31gKTtcbiAgICB9XG4gICAgbGluZXMucHVzaCgnJyk7XG4gICAgdW5yZWNvZ25pemVkV2FybmluZ1RleHQgPSBsaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8vIElzc3VlICM2NjI6IEluY2x1ZGUgY29sbGVjdGlvbiBvcGVyYXRpb24gd2FybmluZ3NcbiAgbGV0IGNvbGxlY3Rpb25XYXJuaW5nVGV4dCA9ICcnO1xuICBpZiAoY29sbGVjdGlvbldhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBsaW5lcyA9IFsn4pqg77iPICoqQ29sbGVjdGlvbiBXYXJuaW5nczoqKiddO1xuICAgIGZvciAoY29uc3Qgd2FybmluZyBvZiBjb2xsZWN0aW9uV2FybmluZ3MpIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgIOKAoiAke3dhcm5pbmd9YCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goJycpO1xuICAgIGNvbGxlY3Rpb25XYXJuaW5nVGV4dCA9IGxpbmVzLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgLy8gSXNzdWUgIzE2NTY6IFJlcG9ydCBza2lwcGVkIGZpZWxkcyBzbyBMTE1zIGRvbid0IGFzc3VtZSB0aGV5IHdlcmUgYXBwbGllZFxuICBjb25zdCBza2lwcGVkVGV4dCA9IHNraXBwZWRGaWVsZHMubGVuZ3RoID4gMFxuICAgID8gYFxcbuKaoO+4jyBTa2lwcGVkOiAke3NraXBwZWRGaWVsZHMuam9pbignLCAnKX0gKGRhbmdlcm91cyBvciByZWFkLW9ubHkpYFxuICAgIDogJyc7XG5cbiAgcmV0dXJuIHtcbiAgICBjb250ZW50OiBbe1xuICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgdGV4dDogYCR7d2FybmluZ1RleHR9JHtyZXNvbHV0aW9uV2FybmluZ1RleHR9JHt1bnJlY29nbml6ZWRXYXJuaW5nVGV4dH0ke2NvbGxlY3Rpb25XYXJuaW5nVGV4dH3inIUgVXBkYXRlZCAke2xhYmVsfSAnJHtkaXNwbGF5TmFtZX0nIC0gZmllbGRzOiAke3VwZGF0ZWRGaWVsZHN9JHtza2lwcGVkVGV4dH1gXG4gICAgfV1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZXJyb3IobWVzc2FnZTogc3RyaW5nKSB7XG4gIHJldHVybiB7XG4gICAgY29udGVudDogW3tcbiAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgIHRleHQ6IGDinYwgJHttZXNzYWdlfWBcbiAgICB9XVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRNYW5hZ2VyRm9yVHlwZShjb250ZXh0OiBFbGVtZW50Q3J1ZENvbnRleHQsIHR5cGU6IEVsZW1lbnRUeXBlKTogRWxlbWVudE1hbmFnZXJXaXRoUGVyc2lzdGVuY2U8YW55PiB8IG51bGwge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIEVsZW1lbnRUeXBlLlBFUlNPTkE6XG4gICAgICByZXR1cm4gY29udGV4dC5wZXJzb25hTWFuYWdlciBhcyBFbGVtZW50TWFuYWdlcldpdGhQZXJzaXN0ZW5jZTxhbnk+O1xuICAgIGNhc2UgRWxlbWVudFR5cGUuU0tJTEw6XG4gICAgICByZXR1cm4gY29udGV4dC5za2lsbE1hbmFnZXIgYXMgRWxlbWVudE1hbmFnZXJXaXRoUGVyc2lzdGVuY2U8U2tpbGw+O1xuICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6XG4gICAgICByZXR1cm4gY29udGV4dC50ZW1wbGF0ZU1hbmFnZXIgYXMgRWxlbWVudE1hbmFnZXJXaXRoUGVyc2lzdGVuY2U8VGVtcGxhdGU+O1xuICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6XG4gICAgICByZXR1cm4gY29udGV4dC5hZ2VudE1hbmFnZXIgYXMgRWxlbWVudE1hbmFnZXJXaXRoUGVyc2lzdGVuY2U8QWdlbnQ+O1xuICAgIGNhc2UgRWxlbWVudFR5cGUuTUVNT1JZOlxuICAgICAgcmV0dXJuIGNvbnRleHQubWVtb3J5TWFuYWdlciBhcyBFbGVtZW50TWFuYWdlcldpdGhQZXJzaXN0ZW5jZTxNZW1vcnk+O1xuICAgIGNhc2UgRWxlbWVudFR5cGUuRU5TRU1CTEU6XG4gICAgICByZXR1cm4gY29udGV4dC5lbnNlbWJsZU1hbmFnZXIgYXMgRWxlbWVudE1hbmFnZXJXaXRoUGVyc2lzdGVuY2U8YW55PjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlVmVyc2lvbkV4cGxpY2l0KGVsZW1lbnQ6IGFueSwgdmVyc2lvblN0cmluZzogc3RyaW5nKSB7XG4gIGNvbnN0IGlzVmFsaWQgPSAvXihcXGQrKShcXC5cXGQrKT8oXFwuXFxkKyk/KC1bYS16QS1aMC05Li1dKyk/JC8udGVzdCh2ZXJzaW9uU3RyaW5nKTtcbiAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgbWVzc2FnZTogYEludmFsaWQgdmVyc2lvbiBmb3JtYXQ6ICcke3ZlcnNpb25TdHJpbmd9Jy4gUGxlYXNlIHVzZSBmb3JtYXQgbGlrZSAxLjAuMCwgMS4wLCBvciAxYFxuICAgIH07XG4gIH1cblxuICB0cnkge1xuICAgIGVsZW1lbnQudmVyc2lvbiA9IHZlcnNpb25TdHJpbmc7XG4gICAgaWYgKGVsZW1lbnQubWV0YWRhdGEpIHtcbiAgICAgIGVsZW1lbnQubWV0YWRhdGEudmVyc2lvbiA9IHZlcnNpb25TdHJpbmc7XG4gICAgfVxuICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byB1cGRhdGUgdmVyc2lvbicsIHsgZXJyb3IgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byB1cGRhdGUgdmVyc2lvbjogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhdXRvSW5jcmVtZW50VmVyc2lvbihlbGVtZW50OiBhbnkpIHtcbiAgdHJ5IHtcbiAgICBpZiAoZWxlbWVudC52ZXJzaW9uKSB7XG4gICAgICAvLyBGaXJzdCBub3JtYWxpemUgdGhlIHZlcnNpb24gdG8gMy1wYXJ0IGZvcm1hdCAoaGFuZGxlcyBsZWdhY3kgMi1wYXJ0IHZlcnNpb25zKVxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVZlcnNpb24oU3RyaW5nKGVsZW1lbnQudmVyc2lvbikpO1xuXG4gICAgICAvLyBDaGVjayBmb3IgcHJlLXJlbGVhc2UgdmVyc2lvbnNcbiAgICAgIGNvbnN0IHByZVJlbGVhc2VNYXRjaCA9IG5vcm1hbGl6ZWQubWF0Y2goL14oXFxkK1xcLlxcZCtcXC5cXGQrKSgtKFthLXpBLVowLTkuLV0rKSk/JC8pO1xuXG4gICAgICBpZiAocHJlUmVsZWFzZU1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGJhc2VWZXJzaW9uID0gcHJlUmVsZWFzZU1hdGNoWzFdO1xuICAgICAgICBjb25zdCBwcmVSZWxlYXNlVGFnID0gcHJlUmVsZWFzZU1hdGNoWzNdO1xuXG4gICAgICAgIGlmIChwcmVSZWxlYXNlVGFnKSB7XG4gICAgICAgICAgLy8gSW5jcmVtZW50IHByZS1yZWxlYXNlIHZlcnNpb24gKGUuZy4sIFwiMS4wLjAtYmV0YS4xXCIg4oaSIFwiMS4wLjAtYmV0YS4yXCIpXG4gICAgICAgICAgY29uc3QgcHJlUmVsZWFzZU51bWJlck1hdGNoID0gcHJlUmVsZWFzZVRhZy5tYXRjaCgvXihbYS16QS1aXSspXFwuPyhcXGQrKT8kLyk7XG4gICAgICAgICAgaWYgKHByZVJlbGVhc2VOdW1iZXJNYXRjaCkge1xuICAgICAgICAgICAgY29uc3QgcHJlUmVsZWFzZVR5cGUgPSBwcmVSZWxlYXNlTnVtYmVyTWF0Y2hbMV07XG4gICAgICAgICAgICBjb25zdCBwcmVSZWxlYXNlTnVtYmVyID0gTnVtYmVyLnBhcnNlSW50KHByZVJlbGVhc2VOdW1iZXJNYXRjaFsyXSB8fCAnMCcpICsgMTtcbiAgICAgICAgICAgIGVsZW1lbnQudmVyc2lvbiA9IGAke2Jhc2VWZXJzaW9ufS0ke3ByZVJlbGVhc2VUeXBlfS4ke3ByZVJlbGVhc2VOdW1iZXJ9YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTm8gcHJlLXJlbGVhc2UgbnVtYmVyLCBidW1wIHBhdGNoXG4gICAgICAgICAgICBjb25zdCBbbWFqb3IsIG1pbm9yLCBwYXRjaF0gPSBiYXNlVmVyc2lvbi5zcGxpdCgnLicpLm1hcChOdW1iZXIpO1xuICAgICAgICAgICAgZWxlbWVudC52ZXJzaW9uID0gYCR7bWFqb3J9LiR7bWlub3J9LiR7cGF0Y2ggKyAxfWA7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFN0YW5kYXJkIHZlcnNpb24sIGJ1bXAgcGF0Y2ggKGUuZy4sIFwiMS4wLjBcIiDihpIgXCIxLjAuMVwiKVxuICAgICAgICAgIGNvbnN0IFttYWpvciwgbWlub3IsIHBhdGNoXSA9IGJhc2VWZXJzaW9uLnNwbGl0KCcuJykubWFwKE51bWJlcik7XG4gICAgICAgICAgZWxlbWVudC52ZXJzaW9uID0gYCR7bWFqb3J9LiR7bWlub3J9LiR7cGF0Y2ggKyAxfWA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNob3VsZG4ndCByZWFjaCBoZXJlIGFmdGVyIG5vcm1hbGl6YXRpb24sIGJ1dCBmYWxsYmFjayB0byBzYWZlIGRlZmF1bHRcbiAgICAgICAgZWxlbWVudC52ZXJzaW9uID0gJzEuMC4xJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gdmVyc2lvbiwgc3RhcnQgYXQgMS4wLjBcbiAgICAgIGVsZW1lbnQudmVyc2lvbiA9ICcxLjAuMCc7XG4gICAgfVxuXG4gICAgLy8gU3luYyB2ZXJzaW9uIHRvIG1ldGFkYXRhXG4gICAgaWYgKGVsZW1lbnQubWV0YWRhdGEpIHtcbiAgICAgIGVsZW1lbnQubWV0YWRhdGEudmVyc2lvbiA9IGVsZW1lbnQudmVyc2lvbjtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gYXV0by1pbmNyZW1lbnQgdmVyc2lvbicsIHsgZXJyb3IgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -11,6 +11,8 @@ export declare function findElementFlexibly<T extends {
11
11
  };
12
12
  }>(name: string, elementList: T[]): T | undefined;
13
13
  export declare function sanitizeMetadata(metadata: Record<string, any> | undefined): Record<string, any>;
14
+ export declare function collectGatekeeperAuthoringErrors(input: Record<string, unknown> | undefined, metadata?: unknown): string[];
15
+ export declare function formatGatekeeperValidationMessage(errors: string[]): string;
14
16
  export declare function normalizeElementTypeInput(rawType: string | null | undefined): {
15
17
  type: ElementType | null;
16
18
  aliasUsed: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/handlers/element-crud/helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAWlE,wBAAgB,mBAAmB,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,EAC5E,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,CAAC,EAAE,GACf,CAAC,GAAG,SAAS,CA+Bf;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA8B/F;AAcD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG;IAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAkB9H;AAED,wBAAgB,2BAA2B,IAAI,MAAM,CAEpD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAMjG;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAI1E;AAED,MAAM,WAAW,wBAAwB,CAAC,CAAC;IACzC,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1B,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,OAAO,KAAK,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IACxE,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CACzC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAmEtE,CAAC;AAmCF;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,sBAAsB,EAAE,CA0E1B;AAgBD,wBAAgB,+BAA+B,CAC7C,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC5C,sBAAsB,EAAE,CAsD1B;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,sBAAsB,EAAE,GAAG,MAAM,CAgBxF;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAAC,MAAM,EAAE;IAAE,SAAS,EAAE,KAAK,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,MAAM,CAqBtJ;AAED,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,OAAO,EAAE,wBAAwB,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,EACvD,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CA4CxB"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/handlers/element-crud/helpers.ts"],"names":[],"mappings":"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"}