@dollhousemcp/mcp-server 2.0.32 → 2.0.34

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.
@@ -326,7 +326,7 @@ export class TemplateManager extends BaseElementManager {
326
326
  metadata.variables = data.variables.map((v) => ({
327
327
  name: sanitizeInput(v.name || '', 50),
328
328
  type: sanitizeInput(v.type || 'string', 20),
329
- description: v.description ? sanitizeInput(v.description, 200) : undefined,
329
+ description: v.description ? sanitizeInput(v.description, SECURITY_LIMITS.MAX_DOCUMENTATION_FIELD_LENGTH) : undefined,
330
330
  required: Boolean(v.required),
331
331
  default: v.default,
332
332
  validation: v.validation ? sanitizeInput(v.validation, 200) : undefined,
@@ -337,7 +337,7 @@ export class TemplateManager extends BaseElementManager {
337
337
  if (Array.isArray(data.examples)) {
338
338
  metadata.examples = data.examples.map((ex) => ({
339
339
  title: sanitizeInput(ex.title || '', 100),
340
- description: ex.description ? sanitizeInput(ex.description, 500) : undefined,
340
+ description: ex.description ? sanitizeInput(ex.description, SECURITY_LIMITS.MAX_DOCUMENTATION_FIELD_LENGTH) : undefined,
341
341
  variables: ex.variables || {},
342
342
  output: ex.output ? sanitizeInput(ex.output, 5000) : undefined
343
343
  }));
@@ -351,4 +351,4 @@ export class TemplateManager extends BaseElementManager {
351
351
  return metadata;
352
352
  }
353
353
  }
354
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGVtcGxhdGVNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3RlbXBsYXRlcy9UZW1wbGF0ZU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFFN0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRWpGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQVMzRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFOUQsTUFBTSxPQUFPLGVBQWdCLFNBQVEsa0JBQTRCO0lBV3JEO0lBVkYsd0JBQXdCLENBQTJCO0lBQ25ELGlCQUFpQixDQUFvQjtJQUNyQyxvQkFBb0IsQ0FBdUI7SUFFbkQsWUFDRSxnQkFBa0MsRUFDbEMsZUFBZ0MsRUFDaEMscUJBQTRDLEVBQzVDLGtCQUFzQyxFQUN0QyxvQkFBMEMsRUFDbEMsZUFBZ0MsRUFDeEMsZ0JBQW1DLEVBQ25DLFlBQTJFLEVBQzNFLGFBQXVFO1FBRXZFLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxF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QWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDNUUsUUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRTlFLHFEQUFxRDtRQUNyRCxRQUFRLENBQUMsVUFBVSxHQUFHLHdCQUF3QixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLElBQUksSUFBSSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQW1DLENBQUMsQ0FBQztRQUU3SSxRQUFRLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLElBQUksbUJBQW1CLENBQUM7UUFDckQsUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztRQUVsRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRlbXBsYXRlTWFuYWdlciAtIFJlZmFjdG9yZWQgdG8gZXh0ZW5kIEJhc2VFbGVtZW50TWFuYWdlciwga2VlcGluZ1xuICogdGVtcGxhdGUtc3BlY2lmaWMgdmFsaWRhdGlvbiwgaW1wb3J0L2V4cG9ydCBsb2dpYywgYW5kIGFuYWx5dGljcyBoZWxwZXJzLlxuICovXG5cbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7IEVsZW1lbnRUeXBlIH0gZnJvbSAnLi4vLi4vcG9ydGZvbGlvL3R5cGVzLmpzJztcbmltcG9ydCB7IHRvU2luZ3VsYXJMYWJlbCB9IGZyb20gJy4uLy4uL3V0aWxzL2VsZW1lbnRUeXBlTm9ybWFsaXphdGlvbi5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHsgc2FuaXRpemVJbnB1dCB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L0lucHV0VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgRmlsZUxvY2tNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvZmlsZUxvY2tNYW5hZ2VyLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBCYXNlRWxlbWVudE1hbmFnZXIgfSBmcm9tICcuLi9iYXNlL0Jhc2VFbGVtZW50TWFuYWdlci5qcyc7XG5pbXBvcnQgeyBUZW1wbGF0ZSwgVGVtcGxhdGVNZXRhZGF0YSB9IGZyb20gJy4vVGVtcGxhdGUuanMnO1xuaW1wb3J0IHsgUG9ydGZvbGlvTWFuYWdlciB9IGZyb20gJy4uLy4uL3BvcnRmb2xpby9Qb3J0Zm9saW9NYW5hZ2VyLmpzJztcbmltcG9ydCB7IFZhbGlkYXRpb25SZWdpc3RyeSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24vVmFsaWRhdGlvblJlZ2lzdHJ5LmpzJztcbmltcG9ydCB7IFRyaWdnZXJWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24vVHJpZ2dlclZhbGlkYXRpb25TZXJ2aWNlLmpzJztcbmltcG9ydCB7IFZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdmFsaWRhdGlvbi9WYWxpZGF0aW9uU2VydmljZS5qcyc7XG5pbXBvcnQgeyBTZXJpYWxpemF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL1NlcmlhbGl6YXRpb25TZXJ2aWNlLmpzJztcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL01ldGFkYXRhU2VydmljZS5qcyc7XG5pbXBvcnQgeyBGaWxlT3BlcmF0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9GaWxlT3BlcmF0aW9uc1NlcnZpY2UuanMnO1xuaW1wb3J0IHsgRmlsZVdhdGNoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL0ZpbGVXYXRjaFNlcnZpY2UuanMnO1xuaW1wb3J0IHsgc2FuaXRpemVHYXRla2VlcGVyUG9saWN5IH0gZnJvbSAnLi4vLi4vaGFuZGxlcnMvbWNwLWFxbC9wb2xpY2llcy9FbGVtZW50UG9saWNpZXMuanMnO1xuaW1wb3J0IHsgU0VDVVJJVFlfTElNSVRTIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvY29uc3RhbnRzLmpzJztcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlTWFuYWdlciBleHRlbmRzIEJhc2VFbGVtZW50TWFuYWdlcjxUZW1wbGF0ZT4ge1xuICBwcml2YXRlIHRyaWdnZXJWYWxpZGF0aW9uU2VydmljZTogVHJpZ2dlclZhbGlkYXRpb25TZXJ2aWNlO1xuICBwcml2YXRlIHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZTtcbiAgcHJpdmF0ZSBzZXJpYWxpemF0aW9uU2VydmljZTogU2VyaWFsaXphdGlvblNlcnZpY2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcG9ydGZvbGlvTWFuYWdlcjogUG9ydGZvbGlvTWFuYWdlcixcbiAgICBmaWxlTG9ja01hbmFnZXI6IEZpbGVMb2NrTWFuYWdlcixcbiAgICBmaWxlT3BlcmF0aW9uc1NlcnZpY2U6IEZpbGVPcGVyYXRpb25zU2VydmljZSxcbiAgICB2YWxpZGF0aW9uUmVnaXN0cnk6IFZhbGlkYXRpb25SZWdpc3RyeSxcbiAgICBzZXJpYWxpemF0aW9uU2VydmljZTogU2VyaWFsaXphdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXRhZGF0YVNlcnZpY2U6IE1ldGFkYXRhU2VydmljZSxcbiAgICBmaWxlV2F0Y2hTZXJ2aWNlPzogRmlsZVdhdGNoU2VydmljZSxcbiAgICBtZW1vcnlCdWRnZXQ/OiBpbXBvcnQoJy4uLy4uL2NhY2hlL0NhY2hlTWVtb3J5QnVkZ2V0LmpzJykuQ2FjaGVNZW1vcnlCdWRnZXQsXG4gICAgYmFja3VwU2VydmljZT86IGltcG9ydCgnLi4vLi4vc2VydmljZXMvQmFja3VwU2VydmljZS5qcycpLkJhY2t1cFNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoRWxlbWVudFR5cGUuVEVNUExBVEUsIHBvcnRmb2xpb01hbmFnZXIsIGZpbGVMb2NrTWFuYWdlciwgeyBmaWxlV2F0Y2hTZXJ2aWNlLCBtZW1vcnlCdWRnZXQsIGJhY2t1cFNlcnZpY2UgfSwgZmlsZU9wZXJhdGlvbnNTZXJ2aWNlLCB2YWxpZGF0aW9uUmVnaXN0cnkpO1xuICAgIHRoaXMudHJpZ2dlclZhbGlkYXRpb25TZXJ2aWNlID0gdmFsaWRhdGlvblJlZ2lzdHJ5LmdldFRyaWdnZXJWYWxpZGF0aW9uU2VydmljZSgpO1xuICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2UgPSB2YWxpZGF0aW9uUmVnaXN0cnkuZ2V0VmFsaWRhdGlvblNlcnZpY2UoKTtcbiAgICB0aGlzLnNlcmlhbGl6YXRpb25TZXJ2aWNlID0gc2VyaWFsaXphdGlvblNlcnZpY2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZ2V0RWxlbWVudExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICd0ZW1wbGF0ZSc7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBsb2FkKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPFRlbXBsYXRlPiB7XG4gICAgY29uc3QgdGVtcGxhdGUgPSBhd2FpdCBzdXBlci5sb2FkKGZpbGVQYXRoKTtcblxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdURU1QTEFURV9MT0FERUQnLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnVGVtcGxhdGVNYW5hZ2VyLmxvYWQnLFxuICAgICAgZGV0YWlsczogYFRlbXBsYXRlIGxvYWRlZDogJHt0ZW1wbGF0ZS5tZXRhZGF0YS5uYW1lfSBmcm9tICR7cGF0aC5iYXNlbmFtZShmaWxlUGF0aCl9YFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgc2F2ZSh0ZW1wbGF0ZTogVGVtcGxhdGUsIGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBBdXRvLWRlcml2ZSB2YXJpYWJsZXMgZnJvbSBjb250ZW50ICgjMTg5Nik6IGVuc3VyZXMgZXZlcnkge3twbGFjZWhvbGRlcn19XG4gICAgLy8gaGFzIGEgbWF0Y2hpbmcgc2NoZW1hIGVudHJ5IHNvIHJlbmRlcigpIG5ldmVyIHNpbGVudGx5IHJldHVybnMgdW5maWxsZWQgdGV4dC5cbiAgICAvLyBFeGlzdGluZyBlbnRyaWVzIGFyZSBuZXZlciBvdmVyd3JpdHRlbiDigJQgdXNlci1zZXQgZGVzY3JpcHRpb25zLCB0eXBlcywgYW5kXG4gICAgLy8gcmVxdWlyZWQgZmxhZ3Mgc3Vydml2ZS4gTmV3IGVudHJpZXMgZGVmYXVsdCB0byB0eXBlOiAnc3RyaW5nJywgcmVxdWlyZWQ6IGZhbHNlLlxuICAgIGlmICh0ZW1wbGF0ZS5jb250ZW50KSB7XG4gICAgICB0ZW1wbGF0ZS5tZXRhZGF0YS52YXJpYWJsZXMgPSBUZW1wbGF0ZS5kZXJpdmVWYXJpYWJsZXNGcm9tQ29udGVudChcbiAgICAgICAgdGVtcGxhdGUuY29udGVudCxcbiAgICAgICAgdGVtcGxhdGUubWV0YWRhdGEudmFyaWFibGVzID8/IFtdXG4gICAgICApO1xuICAgIH1cblxuICAgIGF3YWl0IHN1cGVyLnNhdmUodGVtcGxhdGUsIGZpbGVQYXRoKTtcblxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdURU1QTEFURV9TQVZFRCcsXG4gICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICBzb3VyY2U6ICdUZW1wbGF0ZU1hbmFnZXIuc2F2ZScsXG4gICAgICBkZXRhaWxzOiBgVGVtcGxhdGUgc2F2ZWQ6ICR7dGVtcGxhdGUubWV0YWRhdGEubmFtZX0gdG8gJHtwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKX1gXG4gICAgfSk7XG5cbiAgICBsb2dnZXIuaW5mbyhgVGVtcGxhdGUgc2F2ZWQ6ICR7dGVtcGxhdGUubWV0YWRhdGEubmFtZX1gKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGRlbGV0ZShmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgc3VwZXIuZGVsZXRlKGZpbGVQYXRoKTtcblxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdURU1QTEFURV9ERUxFVEVEJyxcbiAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgIHNvdXJjZTogJ1RlbXBsYXRlTWFuYWdlci5kZWxldGUnLFxuICAgICAgZGV0YWlsczogYFRlbXBsYXRlIGRlbGV0ZWQ6ICR7cGF0aC5iYXNlbmFtZShmaWxlUGF0aCl9YFxuICAgIH0pO1xuXG4gICAgbG9nZ2VyLmluZm8oYFRlbXBsYXRlIGRlbGV0ZWQ6ICR7cGF0aC5iYXNlbmFtZShmaWxlUGF0aCl9YCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGUoZGF0YToge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIGNvbnRlbnQ/OiBzdHJpbmc7XG4gICAgaW5zdHJ1Y3Rpb25zPzogc3RyaW5nO1xuICAgIG1ldGFkYXRhPzogUGFydGlhbDxUZW1wbGF0ZU1ldGFkYXRhPjtcbiAgfSk6IFByb21pc2U8VGVtcGxhdGU+IHtcbiAgICAvLyBVc2Ugc3BlY2lhbGl6ZWQgdmFsaWRhdG9yIGZvciBpbnB1dCB2YWxpZGF0aW9uXG4gICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IGF3YWl0IHRoaXMudmFsaWRhdG9yLnZhbGlkYXRlQ3JlYXRlKHtcbiAgICAgIG5hbWU6IGRhdGEubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBkYXRhLmRlc2NyaXB0aW9uLFxuICAgICAgY29udGVudDogZGF0YS5jb250ZW50XG4gICAgfSk7XG5cbiAgICBpZiAoIXZhbGlkYXRpb25SZXN1bHQuaXNWYWxpZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBWYWxpZGF0aW9uIGZhaWxlZDogJHt2YWxpZGF0aW9uUmVzdWx0LmVycm9ycy5qb2luKCcsICcpfWApO1xuICAgIH1cblxuICAgIC8vIExvZyB3YXJuaW5ncyBpZiBhbnlcbiAgICBpZiAodmFsaWRhdGlvblJlc3VsdC53YXJuaW5ncyAmJiB2YWxpZGF0aW9uUmVzdWx0Lndhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxvZ2dlci53YXJuKGBUZW1wbGF0ZSBjcmVhdGlvbiB3YXJuaW5nczogJHt2YWxpZGF0aW9uUmVzdWx0Lndhcm5pbmdzLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuXG4gICAgLy8gR2V0IHNhbml0aXplZCBuYW1lIGZvciBmaWxlIG9wZXJhdGlvbnMgKHZhbGlkYXRvciBhbHJlYWR5IHZhbGlkYXRlZClcbiAgICBjb25zdCBuYW1lSW5wdXQgPSBkYXRhLm5hbWUgfHwgJ25ldy10ZW1wbGF0ZSc7XG4gICAgY29uc3QgbmFtZVJlc3VsdCA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UudmFsaWRhdGVBbmRTYW5pdGl6ZUlucHV0KG5hbWVJbnB1dCwge1xuICAgICAgbWF4TGVuZ3RoOiBTRUNVUklUWV9MSU1JVFMuTUFYX05BTUVfTEVOR1RILFxuICAgICAgYWxsb3dTcGFjZXM6IHRydWVcbiAgICB9KTtcbiAgICBjb25zdCBzYW5pdGl6ZWROYW1lID0gbmFtZVJlc3VsdC5zYW5pdGl6ZWRWYWx1ZSE7XG5cbiAgICAvLyBVc2UgaW5oZXJpdGVkIGdldEVsZW1lbnRGaWxlbmFtZSgpIGZvciBjb25zaXN0ZW50IGZpbGVuYW1lIG5vcm1hbGl6YXRpb25cbiAgICBjb25zdCBmaWxlbmFtZSA9IHRoaXMuZ2V0RWxlbWVudEZpbGVuYW1lKHNhbml0aXplZE5hbWUpO1xuXG4gICAgLy8gRklYOiBJc3N1ZSAjMjAgLSBDaGVjayBmb3IgZHVwbGljYXRlIGJlZm9yZSBjcmVhdGluZ1xuICAgIGNvbnN0IGV4aXN0aW5nVGVtcGxhdGVzID0gYXdhaXQgdGhpcy5saXN0KCk7XG4gICAgY29uc3QgZHVwbGljYXRlID0gZXhpc3RpbmdUZW1wbGF0ZXMuZmluZCh0ID0+XG4gICAgICB0Lm1ldGFkYXRhLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gc2FuaXRpemVkTmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgKTtcblxuICAgIGlmIChkdXBsaWNhdGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQSB0ZW1wbGF0ZSBuYW1lZCBcIiR7c2FuaXRpemVkTmFtZX1cIiBhbHJlYWR5IGV4aXN0c2ApO1xuICAgIH1cblxuICAgIGNvbnN0IHRlbXBsYXRlID0gbmV3IFRlbXBsYXRlKFxuICAgICAge1xuICAgICAgICAuLi5kYXRhLm1ldGFkYXRhLFxuICAgICAgICBuYW1lOiBzYW5pdGl6ZWROYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogZGF0YS5kZXNjcmlwdGlvbiB8fCAnJ1xuICAgICAgfSxcbiAgICAgIGRhdGEuY29udGVudCB8fCAnJyxcbiAgICAgIHRoaXMubWV0YWRhdGFTZXJ2aWNlXG4gICAgKTtcbiAgICAvLyBTZXQgaW5zdHJ1Y3Rpb25zIChyZW5kZXJpbmcgZGlyZWN0aXZlcykgaWYgcHJvdmlkZWRcbiAgICBpZiAoZGF0YS5pbnN0cnVjdGlvbnMpIHtcbiAgICAgIHRlbXBsYXRlLmluc3RydWN0aW9ucyA9IGRhdGEuaW5zdHJ1Y3Rpb25zO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc2F2ZSh0ZW1wbGF0ZSwgZmlsZW5hbWUpO1xuICAgIC8vIE5vdGU6IE5vIHJlbG9hZCgpIGhlcmUg4oCUIHNhdmUoKSBjYWNoZXMgdGhlIGVsZW1lbnQgY29ycmVjdGx5LlxuICAgIC8vIFNlZSBJc3N1ZSAjNDkxIGZvciB3aHkgUGVyc29uYU1hbmFnZXIncyByZWxvYWQtYWZ0ZXItY3JlYXRlIHdhcyByZW1vdmVkLlxuXG4gICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgdHlwZTogJ0VMRU1FTlRfQ1JFQVRFRCcsXG4gICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICBzb3VyY2U6ICdUZW1wbGF0ZU1hbmFnZXIuY3JlYXRlJyxcbiAgICAgIGRldGFpbHM6IGBUZW1wbGF0ZSBjcmVhdGVkOiAke3RlbXBsYXRlLm1ldGFkYXRhLm5hbWV9YFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9XG5cbiAgYXN5bmMgaW1wb3J0RWxlbWVudChkYXRhOiBzdHJpbmcsIGZvcm1hdDogJ2pzb24nIHwgJ3lhbWwnIHwgJ21hcmtkb3duJyA9ICdtYXJrZG93bicpOiBQcm9taXNlPFRlbXBsYXRlPiB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBtZXRhZGF0YTogUGFydGlhbDxUZW1wbGF0ZU1ldGFkYXRhPjtcbiAgICAgIGxldCBjb250ZW50ID0gJyc7XG5cbiAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgIGNhc2UgJ2pzb24nOiB7XG4gICAgICAgICAgY29uc3QganNvbkRhdGEgPSB0aGlzLnNlcmlhbGl6YXRpb25TZXJ2aWNlLnBhcnNlSnNvbihkYXRhLCB7XG4gICAgICAgICAgICBzb3VyY2U6ICdUZW1wbGF0ZU1hbmFnZXIuaW1wb3J0RWxlbWVudCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBtZXRhZGF0YSA9IGF3YWl0IHRoaXMuc2FuaXRpemVNZXRhZGF0YShqc29uRGF0YS5tZXRhZGF0YSB8fCB7fSk7XG4gICAgICAgICAgY29udGVudCA9IGpzb25EYXRhLmNvbnRlbnQgfHwgJyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICd5YW1sJzoge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMuc2VyaWFsaXphdGlvblNlcnZpY2UucGFyc2VGcm9udG1hdHRlcihkYXRhLCB7XG4gICAgICAgICAgICBtYXhZYW1sU2l6ZTogNjQgKiAxMDI0LFxuICAgICAgICAgICAgdmFsaWRhdGVDb250ZW50OiB0cnVlLFxuICAgICAgICAgICAgc291cmNlOiAnVGVtcGxhdGVNYW5hZ2VyLmltcG9ydEVsZW1lbnQnXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBtZXRhZGF0YSA9IGF3YWl0IHRoaXMuc2FuaXRpemVNZXRhZGF0YShwYXJzZWQuZGF0YS5tZXRhZGF0YSB8fCBwYXJzZWQuZGF0YSk7XG4gICAgICAgICAgY29udGVudCA9IHBhcnNlZC5jb250ZW50IHx8ICcnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnbWFya2Rvd24nOiB7XG4gICAgICAgICAgY29uc3QgbWRQYXJzZWQgPSB0aGlzLnNlcmlhbGl6YXRpb25TZXJ2aWNlLnBhcnNlRnJvbnRtYXR0ZXIoZGF0YSwge1xuICAgICAgICAgICAgbWF4WWFtbFNpemU6IDY0ICogMTAyNCxcbiAgICAgICAgICAgIHZhbGlkYXRlQ29udGVudDogdHJ1ZSxcbiAgICAgICAgICAgIHNvdXJjZTogJ1RlbXBsYXRlTWFuYWdlci5pbXBvcnRFbGVtZW50J1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIG1ldGFkYXRhID0gYXdhaXQgdGhpcy5zYW5pdGl6ZU1ldGFkYXRhKG1kUGFyc2VkLmRhdGEpO1xuICAgICAgICAgIGNvbnRlbnQgPSBtZFBhcnNlZC5jb250ZW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGltcG9ydCBmb3JtYXQ6ICR7Zm9ybWF0fWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZShtZXRhZGF0YSwgY29udGVudCwgdGhpcy5tZXRhZGF0YVNlcnZpY2UpO1xuICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IHRlbXBsYXRlLnZhbGlkYXRlKCk7XG4gICAgICBpZiAoIXZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRlbXBsYXRlOiAke3ZhbGlkYXRpb24uZXJyb3JzPy5tYXAoZSA9PiBlLm1lc3NhZ2UpLmpvaW4oJywgJyl9YCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gaW1wb3J0IHRlbXBsYXRlOiAke2Vycm9yfWApO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZXhwb3J0RWxlbWVudCh0ZW1wbGF0ZTogVGVtcGxhdGUsIGZvcm1hdDogJ2pzb24nIHwgJ3lhbWwnIHwgJ21hcmtkb3duJyA9ICdtYXJrZG93bicpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRyeSB7XG4gICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICBjYXNlICdqc29uJzpcbiAgICAgICAgICByZXR1cm4gKHRlbXBsYXRlIGFzIGFueSkuc2VyaWFsaXplVG9KU09OID8gKHRlbXBsYXRlIGFzIGFueSkuc2VyaWFsaXplVG9KU09OKCkgOiB0ZW1wbGF0ZS5zZXJpYWxpemUoKTtcblxuICAgICAgICBjYXNlICd5YW1sJzoge1xuICAgICAgICAgIGNvbnN0IHlhbWxEYXRhID0ge1xuICAgICAgICAgICAgbWV0YWRhdGE6IHRlbXBsYXRlLm1ldGFkYXRhLFxuICAgICAgICAgICAgY29udGVudDogdGVtcGxhdGUuY29udGVudCxcbiAgICAgICAgICAgIGlkOiB0ZW1wbGF0ZS5pZCxcbiAgICAgICAgICAgIHZlcnNpb246IHRlbXBsYXRlLnZlcnNpb25cbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2VyaWFsaXphdGlvblNlcnZpY2UuZHVtcFlhbWwoeWFtbERhdGEsIHtcbiAgICAgICAgICAgIHNjaGVtYTogJ2pzb24nLCAgLy8gRml4ICM5MTQ6IHN0YW5kYXJkaXplIG9uIEpTT04gc2NoZW1hIGFjcm9zcyBhbGwgbWFuYWdlcnNcbiAgICAgICAgICAgIG5vUmVmczogdHJ1ZSxcbiAgICAgICAgICAgIHNvcnRLZXlzOiB0cnVlLFxuICAgICAgICAgICAgc2tpcEludmFsaWQ6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ21hcmtkb3duJzoge1xuICAgICAgICAgIHJldHVybiB0aGlzLnNlcmlhbGl6YXRpb25TZXJ2aWNlLmNyZWF0ZUZyb250bWF0dGVyKFxuICAgICAgICAgICAgdGVtcGxhdGUubWV0YWRhdGEsXG4gICAgICAgICAgICB0ZW1wbGF0ZS5jb250ZW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtZXRob2Q6ICdtYW51YWwnLFxuICAgICAgICAgICAgICBzY2hlbWE6ICdqc29uJywgIC8vIEZpeCAjOTE0OiBzdGFuZGFyZGl6ZSBvbiBKU09OIHNjaGVtYSBhY3Jvc3MgYWxsIG1hbmFnZXJzXG4gICAgICAgICAgICAgIGNsZWFuTWV0YWRhdGE6IHRydWUsXG4gICAgICAgICAgICAgIGNsZWFuaW5nU3RyYXRlZ3k6ICdyZW1vdmUtYm90aCcgIC8vIEZpeCAjOTEzOiBzdGFuZGFyZGl6ZSBhY3Jvc3MgYWxsIG1hbmFnZXJzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBleHBvcnQgZm9ybWF0OiAke2Zvcm1hdH1gKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZXhwb3J0IHRlbXBsYXRlOiAke2Vycm9yfWApO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZmluZEJ5Q2F0ZWdvcnkoY2F0ZWdvcnk6IHN0cmluZyk6IFByb21pc2U8VGVtcGxhdGVbXT4ge1xuICAgIGNvbnN0IHNhbml0aXplZENhdGVnb3J5ID0gc2FuaXRpemVJbnB1dChjYXRlZ29yeSwgNTApO1xuICAgIGNvbnN0IHRlbXBsYXRlcyA9IGF3YWl0IHRoaXMubGlzdCgpO1xuICAgIHJldHVybiB0ZW1wbGF0ZXMuZmlsdGVyKHQgPT4gdC5tZXRhZGF0YS5jYXRlZ29yeSA9PT0gc2FuaXRpemVkQ2F0ZWdvcnkpO1xuICB9XG5cbiAgYXN5bmMgZmluZEJ5VGFnKHRhZzogc3RyaW5nKTogUHJvbWlzZTxUZW1wbGF0ZVtdPiB7XG4gICAgY29uc3Qgc2FuaXRpemVkVGFnID0gc2FuaXRpemVJbnB1dCh0YWcsIDUwKTtcbiAgICBjb25zdCB0ZW1wbGF0ZXMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcbiAgICByZXR1cm4gdGVtcGxhdGVzLmZpbHRlcih0ID0+IHQubWV0YWRhdGEudGFncz8uaW5jbHVkZXMoc2FuaXRpemVkVGFnKSk7XG4gIH1cblxuICBhc3luYyBnZXRNb3N0VXNlZChsaW1pdDogbnVtYmVyID0gMTApOiBQcm9taXNlPFRlbXBsYXRlW10+IHtcbiAgICBjb25zdCBNSU5fTElNSVQgPSAxO1xuICAgIGNvbnN0IE1BWF9MSU1JVCA9IDEwMDtcbiAgICBjb25zdCB2YWxpZGF0ZWRMaW1pdCA9IE1hdGgubWF4KE1JTl9MSU1JVCwgTWF0aC5taW4oTUFYX0xJTUlULCBNYXRoLmZsb29yKGxpbWl0KSkpO1xuXG4gICAgaWYgKGxpbWl0ICE9PSB2YWxpZGF0ZWRMaW1pdCkge1xuICAgICAgbG9nZ2VyLndhcm4oYGdldE1vc3RVc2VkOiBsaW1pdCAke2xpbWl0fSBhZGp1c3RlZCB0byAke3ZhbGlkYXRlZExpbWl0fSAodmFsaWQgcmFuZ2U6ICR7TUlOX0xJTUlUfS0ke01BWF9MSU1JVH0pYCk7XG4gICAgfVxuXG4gICAgY29uc3QgdGVtcGxhdGVzID0gYXdhaXQgdGhpcy5saXN0KCk7XG4gICAgcmV0dXJuIHRlbXBsYXRlc1xuICAgICAgLnNvcnQoKGEsIGIpID0+IChiLm1ldGFkYXRhLnVzYWdlX2NvdW50IHx8IDApIC0gKGEubWV0YWRhdGEudXNhZ2VfY291bnQgfHwgMCkpXG4gICAgICAuc2xpY2UoMCwgdmFsaWRhdGVkTGltaXQpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0RmlsZUV4dGVuc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnLm1kJztcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBwYXJzZU1ldGFkYXRhKGRhdGE6IGFueSk6IFByb21pc2U8VGVtcGxhdGVNZXRhZGF0YT4ge1xuICAgIGNvbnN0IHNhbml0aXplZCA9IGF3YWl0IHRoaXMuc2FuaXRpemVNZXRhZGF0YShkYXRhKTtcbiAgICAvLyBVc2UgVGVtcGxhdGUgY29uc3RydWN0b3IgdG8gZW5zdXJlIHJlcXVpcmVkIGZpZWxkcyBhcmUgcG9wdWxhdGVkXG4gICAgY29uc3QgdGVtcFRlbXBsYXRlID0gbmV3IFRlbXBsYXRlKHNhbml0aXplZCwgJycsIHRoaXMubWV0YWRhdGFTZXJ2aWNlKTtcbiAgICByZXR1cm4gdGVtcFRlbXBsYXRlLm1ldGFkYXRhO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGNyZWF0ZUVsZW1lbnQobWV0YWRhdGE6IFRlbXBsYXRlTWV0YWRhdGEsIGJvZHlDb250ZW50OiBzdHJpbmcpOiBUZW1wbGF0ZSB7XG4gICAgLy8gRml4ICM5MTI6IFByZWZlciBleHBsaWNpdCBmb3JtYXRfdmVyc2lvbiBtYXJrZXIsIGZhbGwgYmFjayB0byBpbnN0cnVjdGlvbnMtcHJlc2VuY2UgY2hlY2tcbiAgICBjb25zdCBtZXRhZGF0YUluc3RydWN0aW9ucyA9IG1ldGFkYXRhLmluc3RydWN0aW9ucztcbiAgICBkZWxldGUgKG1ldGFkYXRhIGFzIGFueSkuZm9ybWF0X3ZlcnNpb247ICAvLyBTdHJpcCBtYXJrZXIgZnJvbSBydW50aW1lIG1ldGFkYXRhXG4gICAgY29uc3QgdGVtcGxhdGUgPSBuZXcgVGVtcGxhdGUobWV0YWRhdGEsIGJvZHlDb250ZW50LCB0aGlzLm1ldGFkYXRhU2VydmljZSk7XG4gICAgaWYgKG1ldGFkYXRhSW5zdHJ1Y3Rpb25zKSB7XG4gICAgICB0ZW1wbGF0ZS5pbnN0cnVjdGlvbnMgPSBtZXRhZGF0YUluc3RydWN0aW9ucztcbiAgICAgIGRlbGV0ZSBtZXRhZGF0YS5pbnN0cnVjdGlvbnM7XG4gICAgfVxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGREZWZhdWx0Qm9keSh0ZW1wbGF0ZTogVGVtcGxhdGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5hbWUgPSAodGVtcGxhdGUubWV0YWRhdGEubmFtZSA/PyAnJykudHJpbSgpO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gKHRlbXBsYXRlLm1ldGFkYXRhLmRlc2NyaXB0aW9uID8/ICcnKS50cmltKCk7XG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIGxpbmVzLnB1c2goYCMgJHtuYW1lfWApO1xuICAgICAgbGluZXMucHVzaCgnJyk7XG4gICAgfVxuICAgIGlmIChkZXNjcmlwdGlvbikge1xuICAgICAgbGluZXMucHVzaChkZXNjcmlwdGlvbik7XG4gICAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICB9XG4gICAgLy8gU2VjdGlvbiBmb3JtYXQ6IDx0ZW1wbGF0ZT4gZm9yIEhhbmRsZWJhcnMgY29udGVudCwgPHN0eWxlPi88c2NyaXB0PiBmb3IgcmF3IHBhc3N0aHJvdWdoLlxuICAgIC8vIEF1dG8tZGV0ZWN0aW9uIChpc3N1ZSAjNzA1KTogc2VjdGlvbiBtb2RlIGFjdGl2YXRlcyB3aGVuIGJvZHkgaGFzIGEgPHRlbXBsYXRlPiByb290IGVsZW1lbnQuXG4gICAgbGluZXMucHVzaCgnPHRlbXBsYXRlPicpO1xuICAgIGxpbmVzLnB1c2goJzwhLS0gSFRNTCBjb250ZW50IHdpdGgge3t2YXJpYWJsZX19IHN1YnN0aXR1dGlvbiAtLT4nKTtcbiAgICBsaW5lcy5wdXNoKCc8L3RlbXBsYXRlPicpO1xuICAgIGxpbmVzLnB1c2goJycpO1xuICAgIGxpbmVzLnB1c2goJzxzdHlsZT4nKTtcbiAgICBsaW5lcy5wdXNoKCcvKiBDU1Mgc3R5bGVzICh9fSBpcyBzYWZlIGhlcmUg4oCUIG5vdCBIYW5kbGViYXJzIHByb2Nlc3NlZCkgKi8nKTtcbiAgICBsaW5lcy5wdXNoKCc8L3N0eWxlPicpO1xuICAgIGxpbmVzLnB1c2goJycpO1xuICAgIGxpbmVzLnB1c2goJzxzY3JpcHQ+Jyk7XG4gICAgbGluZXMucHVzaCgnLy8gSmF2YVNjcmlwdCAofX0gaXMgc2FmZSBoZXJlIOKAlCBub3QgSGFuZGxlYmFycyBwcm9jZXNzZWQpJyk7XG4gICAgbGluZXMucHVzaCgnPC9zY3JpcHQ+Jyk7XG4gICAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHNlcmlhbGl6ZUVsZW1lbnQodGVtcGxhdGU6IFRlbXBsYXRlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAvLyB2Mi4wIGZvcm1hdDogYWRkIGluc3RydWN0aW9ucyB0byBZQU1MIGZyb250bWF0dGVyIGlmIHByZXNlbnRcbiAgICBjb25zdCBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiA9IHsgLi4udGVtcGxhdGUubWV0YWRhdGEgfTtcbiAgICAvLyBJc3N1ZSAjNzU1OiBTZXJpYWxpemUgdHlwZSBhcyBzaW5ndWxhciBhbmQgcGVyc2lzdCB1bmlxdWVfaWRcbiAgICBtZXRhZGF0YS50eXBlID0gdG9TaW5ndWxhckxhYmVsKEVsZW1lbnRUeXBlLlRFTVBMQVRFKTtcbiAgICBtZXRhZGF0YS51bmlxdWVfaWQgPSB0ZW1wbGF0ZS5pZDtcbiAgICAvLyBGaXggIzkxMjogRXhwbGljaXQgZm9ybWF0IG1hcmtlclxuICAgIG1ldGFkYXRhLmZvcm1hdF92ZXJzaW9uID0gJ3YyJztcbiAgICBpZiAodGVtcGxhdGUuaW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBtZXRhZGF0YS5pbnN0cnVjdGlvbnMgPSB0ZW1wbGF0ZS5pbnN0cnVjdGlvbnM7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6YXRpb25TZXJ2aWNlLmNyZWF0ZUZyb250bWF0dGVyKFxuICAgICAgbWV0YWRhdGEsXG4gICAgICB0ZW1wbGF0ZS5jb250ZW50IHx8IHRoaXMuYnVpbGREZWZhdWx0Qm9keSh0ZW1wbGF0ZSksXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogJ21hbnVhbCcsXG4gICAgICAgIHNjaGVtYTogJ2pzb24nLCAgLy8gRml4ICM5MTQ6IHN0YW5kYXJkaXplIG9uIEpTT04gc2NoZW1hIGFjcm9zcyBhbGwgbWFuYWdlcnNcbiAgICAgICAgY2xlYW5NZXRhZGF0YTogdHJ1ZSxcbiAgICAgICAgY2xlYW5pbmdTdHJhdGVneTogJ3JlbW92ZS1ib3RoJywgIC8vIEZpeCAjOTEzOiBzdGFuZGFyZGl6ZSBhY3Jvc3MgYWxsIG1hbmFnZXJzXG4gICAgICAgIHNvcnRLZXlzOiB0cnVlLFxuICAgICAgICBsaW5lV2lkdGg6IDgwLFxuICAgICAgICBza2lwSW52YWxpZDogdHJ1ZVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNhbml0aXplTWV0YWRhdGEoZGF0YTogYW55KTogUHJvbWlzZTxQYXJ0aWFsPFRlbXBsYXRlTWV0YWRhdGE+PiB7XG4gICAgY29uc3QgbWV0YWRhdGE6IFBhcnRpYWw8VGVtcGxhdGVNZXRhZGF0YT4gPSB7fTtcblxuICAgIGlmIChkYXRhLm5hbWUpIHtcbiAgICAgIG1ldGFkYXRhLm5hbWUgPSBzYW5pdGl6ZUlucHV0KFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKGRhdGEubmFtZSkubm9ybWFsaXplZENvbnRlbnQsIDEwMCk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEuZGVzY3JpcHRpb24pIHtcbiAgICAgIG1ldGFkYXRhLmRlc2NyaXB0aW9uID0gc2FuaXRpemVJbnB1dChVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShkYXRhLmRlc2NyaXB0aW9uKS5ub3JtYWxpemVkQ29udGVudCwgNTAwKTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YS5jYXRlZ29yeSkge1xuICAgICAgLy8gU0VDVVJJVFkgRklYOiBVc2UgVmFsaWRhdGlvblNlcnZpY2UgZm9yIGNhdGVnb3J5IHZhbGlkYXRpb25cbiAgICAgIGNvbnN0IGNhdGVnb3J5UmVzdWx0ID0gdGhpcy52YWxpZGF0aW9uU2VydmljZS52YWxpZGF0ZUNhdGVnb3J5KGRhdGEuY2F0ZWdvcnkpO1xuICAgICAgaWYgKGNhdGVnb3J5UmVzdWx0LmlzVmFsaWQgJiYgY2F0ZWdvcnlSZXN1bHQuc2FuaXRpemVkVmFsdWUpIHtcbiAgICAgICAgbWV0YWRhdGEuY2F0ZWdvcnkgPSBjYXRlZ29yeVJlc3VsdC5zYW5pdGl6ZWRWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGF0YS5vdXRwdXRfZm9ybWF0KSB7XG4gICAgICBtZXRhZGF0YS5vdXRwdXRfZm9ybWF0ID0gc2FuaXRpemVJbnB1dChkYXRhLm91dHB1dF9mb3JtYXQsIDIwKTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhLnRhZ3MpKSB7XG4gICAgICBtZXRhZGF0YS50YWdzID0gZGF0YS50YWdzLm1hcCgodGFnOiBhbnkpID0+IHNhbml0aXplSW5wdXQoU3RyaW5nKHRhZyksIDUwKSk7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YS5pbmNsdWRlcykpIHtcbiAgICAgIG1ldGFkYXRhLmluY2x1ZGVzID0gZGF0YS5pbmNsdWRlcy5tYXAoKGluYzogYW55KSA9PiBzYW5pdGl6ZUlucHV0KFN0cmluZyhpbmMpLCAyMDApKTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YS50cmlnZ2VycyAmJiBBcnJheS5pc0FycmF5KGRhdGEudHJpZ2dlcnMpKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gdGhpcy50cmlnZ2VyVmFsaWRhdGlvblNlcnZpY2UudmFsaWRhdGVUcmlnZ2VycyhcbiAgICAgICAgZGF0YS50cmlnZ2VycyxcbiAgICAgICAgRWxlbWVudFR5cGUuVEVNUExBVEUsXG4gICAgICAgIG1ldGFkYXRhLm5hbWUgfHwgJ3Vua25vd24nXG4gICAgICApO1xuICAgICAgbWV0YWRhdGEudHJpZ2dlcnMgPSB2YWxpZGF0aW9uUmVzdWx0LnZhbGlkVHJpZ2dlcnM7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhLnVzYWdlX2NvdW50ID09PSAnbnVtYmVyJykge1xuICAgICAgbWV0YWRhdGEudXNhZ2VfY291bnQgPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKGRhdGEudXNhZ2VfY291bnQpKTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YS5sYXN0X3VzZWQpIHtcbiAgICAgIG1ldGFkYXRhLmxhc3RfdXNlZCA9IHNhbml0aXplSW5wdXQoU3RyaW5nKGRhdGEubGFzdF91c2VkKSwgNTApO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEudmFyaWFibGVzKSkge1xuICAgICAgbWV0YWRhdGEudmFyaWFibGVzID0gZGF0YS52YXJpYWJsZXMubWFwKCh2OiBhbnkpID0+ICh7XG4gICAgICAgIG5hbWU6IHNhbml0aXplSW5wdXQodi5uYW1lIHx8ICcnLCA1MCksXG4gICAgICAgIHR5cGU6IHNhbml0aXplSW5wdXQodi50eXBlIHx8ICdzdHJpbmcnLCAyMCksXG4gICAgICAgIGRlc2NyaXB0aW9uOiB2LmRlc2NyaXB0aW9uID8gc2FuaXRpemVJbnB1dCh2LmRlc2NyaXB0aW9uLCAyMDApIDogdW5kZWZpbmVkLFxuICAgICAgICByZXF1aXJlZDogQm9vbGVhbih2LnJlcXVpcmVkKSxcbiAgICAgICAgZGVmYXVsdDogdi5kZWZhdWx0LFxuICAgICAgICB2YWxpZGF0aW9uOiB2LnZhbGlkYXRpb24gPyBzYW5pdGl6ZUlucHV0KHYudmFsaWRhdGlvbiwgMjAwKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgb3B0aW9uczogQXJyYXkuaXNBcnJheSh2Lm9wdGlvbnMpID8gdi5vcHRpb25zLm1hcCgobzogYW55KSA9PiBzYW5pdGl6ZUlucHV0KFN0cmluZyhvKSwgMTAwKSkgOiB1bmRlZmluZWQsXG4gICAgICAgIGZvcm1hdDogdi5mb3JtYXQgPyBzYW5pdGl6ZUlucHV0KHYuZm9ybWF0LCA1MCkgOiB1bmRlZmluZWRcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhLmV4YW1wbGVzKSkge1xuICAgICAgbWV0YWRhdGEuZXhhbXBsZXMgPSBkYXRhLmV4YW1wbGVzLm1hcCgoZXg6IGFueSkgPT4gKHtcbiAgICAgICAgdGl0bGU6IHNhbml0aXplSW5wdXQoZXgudGl0bGUgfHwgJycsIDEwMCksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBleC5kZXNjcmlwdGlvbiA/IHNhbml0aXplSW5wdXQoZXguZGVzY3JpcHRpb24sIDUwMCkgOiB1bmRlZmluZWQsXG4gICAgICAgIHZhcmlhYmxlczogZXgudmFyaWFibGVzIHx8IHt9LFxuICAgICAgICBvdXRwdXQ6IGV4Lm91dHB1dCA/IHNhbml0aXplSW5wdXQoZXgub3V0cHV0LCA1MDAwKSA6IHVuZGVmaW5lZFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIG1ldGFkYXRhLmF1dGhvciA9IGRhdGEuYXV0aG9yID8gc2FuaXRpemVJbnB1dChkYXRhLmF1dGhvciwgMTAwKSA6IHVuZGVmaW5lZDtcbiAgICBtZXRhZGF0YS52ZXJzaW9uID0gZGF0YS52ZXJzaW9uID8gc2FuaXRpemVJbnB1dChkYXRhLnZlcnNpb24sIDIwKSA6IHVuZGVmaW5lZDtcblxuICAgIC8vIElzc3VlICM1MjQg4oCUIEdhdGVrZWVwZXIgcG9saWN5IChhbGwgZWxlbWVudCB0eXBlcylcbiAgICBtZXRhZGF0YS5nYXRla2VlcGVyID0gc2FuaXRpemVHYXRla2VlcGVyUG9saWN5KGRhdGEuZ2F0ZWtlZXBlciwgbWV0YWRhdGEubmFtZSB8fCAndW5rbm93bicsICd0ZW1wbGF0ZScsIG1ldGFkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcblxuICAgIG1ldGFkYXRhLm5hbWUgPSBtZXRhZGF0YS5uYW1lID8/ICdVbnRpdGxlZCBUZW1wbGF0ZSc7XG4gICAgbWV0YWRhdGEuZGVzY3JpcHRpb24gPSBtZXRhZGF0YS5kZXNjcmlwdGlvbiA/PyAnJztcblxuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfVxufVxuIl19
354
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGVtcGxhdGVNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3RlbXBsYXRlcy9UZW1wbGF0ZU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFFN0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRWpGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQVMzRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFOUQsTUFBTSxPQUFPLGVBQWdCLFNBQVEsa0JBQTRCO0lBV3JEO0lBVkYsd0JBQXdCLENBQTJCO0lBQ25ELGlCQUFpQixDQUFvQjtJQUNyQyxvQkFBb0IsQ0FBdUI7SUFFbkQsWUFDRSxnQkFBa0MsRUFDbEMsZUFBZ0MsRUFDaEMscUJBQTRDLEVBQzVDLGtCQUFzQyxFQUN0QyxvQkFBMEMsRUFDbEMsZUFBZ0MsRUFDeEMsZ0JBQW1DLEVBQ25DLFlBQTJFLEVBQzNFLGFBQXVFO1FBRXZFLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxF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QyxNQUFNLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDNUUsUUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRTlFLHFEQUFxRDtRQUNyRCxRQUFRLENBQUMsVUFBVSxHQUFHLHdCQUF3QixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLElBQUksSUFBSSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQW1DLENBQUMsQ0FBQztRQUU3SSxRQUFRLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLElBQUksbUJBQW1CLENBQUM7UUFDckQsUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztRQUVsRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRlbXBsYXRlTWFuYWdlciAtIFJlZmFjdG9yZWQgdG8gZXh0ZW5kIEJhc2VFbGVtZW50TWFuYWdlciwga2VlcGluZ1xuICogdGVtcGxhdGUtc3BlY2lmaWMgdmFsaWRhdGlvbiwgaW1wb3J0L2V4cG9ydCBsb2dpYywgYW5kIGFuYWx5dGljcyBoZWxwZXJzLlxuICovXG5cbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7IEVsZW1lbnRUeXBlIH0gZnJvbSAnLi4vLi4vcG9ydGZvbGlvL3R5cGVzLmpzJztcbmltcG9ydCB7IHRvU2luZ3VsYXJMYWJlbCB9IGZyb20gJy4uLy4uL3V0aWxzL2VsZW1lbnRUeXBlTm9ybWFsaXphdGlvbi5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHsgc2FuaXRpemVJbnB1dCB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L0lucHV0VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgRmlsZUxvY2tNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvZmlsZUxvY2tNYW5hZ2VyLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBCYXNlRWxlbWVudE1hbmFnZXIgfSBmcm9tICcuLi9iYXNlL0Jhc2VFbGVtZW50TWFuYWdlci5qcyc7XG5pbXBvcnQgeyBUZW1wbGF0ZSwgVGVtcGxhdGVNZXRhZGF0YSB9IGZyb20gJy4vVGVtcGxhdGUuanMnO1xuaW1wb3J0IHsgUG9ydGZvbGlvTWFuYWdlciB9IGZyb20gJy4uLy4uL3BvcnRmb2xpby9Qb3J0Zm9saW9NYW5hZ2VyLmpzJztcbmltcG9ydCB7IFZhbGlkYXRpb25SZWdpc3RyeSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24vVmFsaWRhdGlvblJlZ2lzdHJ5LmpzJztcbmltcG9ydCB7IFRyaWdnZXJWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24vVHJpZ2dlclZhbGlkYXRpb25TZXJ2aWNlLmpzJztcbmltcG9ydCB7IFZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdmFsaWRhdGlvbi9WYWxpZGF0aW9uU2VydmljZS5qcyc7XG5pbXBvcnQgeyBTZXJpYWxpemF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL1NlcmlhbGl6YXRpb25TZXJ2aWNlLmpzJztcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL01ldGFkYXRhU2VydmljZS5qcyc7XG5pbXBvcnQgeyBGaWxlT3BlcmF0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9GaWxlT3BlcmF0aW9uc1NlcnZpY2UuanMnO1xuaW1wb3J0IHsgRmlsZVdhdGNoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL0ZpbGVXYXRjaFNlcnZpY2UuanMnO1xuaW1wb3J0IHsgc2FuaXRpemVHYXRla2VlcGVyUG9saWN5IH0gZnJvbSAnLi4vLi4vaGFuZGxlcnMvbWNwLWFxbC9wb2xpY2llcy9FbGVtZW50UG9saWNpZXMuanMnO1xuaW1wb3J0IHsgU0VDVVJJVFlfTElNSVRTIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvY29uc3RhbnRzLmpzJztcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlTWFuYWdlciBleHRlbmRzIEJhc2VFbGVtZW50TWFuYWdlcjxUZW1wbGF0ZT4ge1xuICBwcml2YXRlIHRyaWdnZXJWYWxpZGF0aW9uU2VydmljZTogVHJpZ2dlclZhbGlkYXRpb25TZXJ2aWNlO1xuICBwcml2YXRlIHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZTtcbiAgcHJpdmF0ZSBzZXJpYWxpemF0aW9uU2VydmljZTogU2VyaWFsaXphdGlvblNlcnZpY2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcG9ydGZvbGlvTWFuYWdlcjogUG9ydGZvbGlvTWFuYWdlcixcbiAgICBmaWxlTG9ja01hbmFnZXI6IEZpbGVMb2NrTWFuYWdlcixcbiAgICBmaWxlT3BlcmF0aW9uc1NlcnZpY2U6IEZpbGVPcGVyYXRpb25zU2VydmljZSxcbiAgICB2YWxpZGF0aW9uUmVnaXN0cnk6IFZhbGlkYXRpb25SZWdpc3RyeSxcbiAgICBzZXJpYWxpemF0aW9uU2VydmljZTogU2VyaWFsaXphdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXRhZGF0YVNlcnZpY2U6IE1ldGFkYXRhU2VydmljZSxcbiAgICBmaWxlV2F0Y2hTZXJ2aWNlPzogRmlsZVdhdGNoU2VydmljZSxcbiAgICBtZW1vcnlCdWRnZXQ/OiBpbXBvcnQoJy4uLy4uL2NhY2hlL0NhY2hlTWVtb3J5QnVkZ2V0LmpzJykuQ2FjaGVNZW1vcnlCdWRnZXQsXG4gICAgYmFja3VwU2VydmljZT86IGltcG9ydCgnLi4vLi4vc2VydmljZXMvQmFja3VwU2VydmljZS5qcycpLkJhY2t1cFNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoRWxlbWVudFR5cGUuVEVNUExBVEUsIHBvcnRmb2xpb01hbmFnZXIsIGZpbGVMb2NrTWFuYWdlciwgeyBmaWxlV2F0Y2hTZXJ2aWNlLCBtZW1vcnlCdWRnZXQsIGJhY2t1cFNlcnZpY2UgfSwgZmlsZU9wZXJhdGlvbnNTZXJ2aWNlLCB2YWxpZGF0aW9uUmVnaXN0cnkpO1xuICAgIHRoaXMudHJpZ2dlclZhbGlkYXRpb25TZXJ2aWNlID0gdmFsaWRhdGlvblJlZ2lzdHJ5LmdldFRyaWdnZXJWYWxpZGF0aW9uU2VydmljZSgpO1xuICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2UgPSB2YWxpZGF0aW9uUmVnaXN0cnkuZ2V0VmFsaWRhdGlvblNlcnZpY2UoKTtcbiAgICB0aGlzLnNlcmlhbGl6YXRpb25TZXJ2aWNlID0gc2VyaWFsaXphdGlvblNlcnZpY2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZ2V0RWxlbWVudExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICd0ZW1wbGF0ZSc7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBsb2FkKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPFRlbXBsYXRlPiB7XG4gICAgY29uc3QgdGVtcGxhdGUgPSBhd2FpdCBzdXBlci5sb2FkKGZpbGVQYXRoKTtcblxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdURU1QTEFURV9MT0FERUQnLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnVGVtcGxhdGVNYW5hZ2VyLmxvYWQnLFxuICAgICAgZGV0YWlsczogYFRlbXBsYXRlIGxvYWRlZDogJHt0ZW1wbGF0ZS5tZXRhZGF0YS5uYW1lfSBmcm9tICR7cGF0aC5iYXNlbmFtZShmaWxlUGF0aCl9YFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgc2F2ZSh0ZW1wbGF0ZTogVGVtcGxhdGUsIGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBBdXRvLWRlcml2ZSB2YXJpYWJsZXMgZnJvbSBjb250ZW50ICgjMTg5Nik6IGVuc3VyZXMgZXZlcnkge3twbGFjZWhvbGRlcn19XG4gICAgLy8gaGFzIGEgbWF0Y2hpbmcgc2NoZW1hIGVudHJ5IHNvIHJlbmRlcigpIG5ldmVyIHNpbGVudGx5IHJldHVybnMgdW5maWxsZWQgdGV4dC5cbiAgICAvLyBFeGlzdGluZyBlbnRyaWVzIGFyZSBuZXZlciBvdmVyd3JpdHRlbiDigJQgdXNlci1zZXQgZGVzY3JpcHRpb25zLCB0eXBlcywgYW5kXG4gICAgLy8gcmVxdWlyZWQgZmxhZ3Mgc3Vydml2ZS4gTmV3IGVudHJpZXMgZGVmYXVsdCB0byB0eXBlOiAnc3RyaW5nJywgcmVxdWlyZWQ6IGZhbHNlLlxuICAgIGlmICh0ZW1wbGF0ZS5jb250ZW50KSB7XG4gICAgICB0ZW1wbGF0ZS5tZXRhZGF0YS52YXJpYWJsZXMgPSBUZW1wbGF0ZS5kZXJpdmVWYXJpYWJsZXNGcm9tQ29udGVudChcbiAgICAgICAgdGVtcGxhdGUuY29udGVudCxcbiAgICAgICAgdGVtcGxhdGUubWV0YWRhdGEudmFyaWFibGVzID8/IFtdXG4gICAgICApO1xuICAgIH1cblxuICAgIGF3YWl0IHN1cGVyLnNhdmUodGVtcGxhdGUsIGZpbGVQYXRoKTtcblxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdURU1QTEFURV9TQVZFRCcsXG4gICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICBzb3VyY2U6ICdUZW1wbGF0ZU1hbmFnZXIuc2F2ZScsXG4gICAgICBkZXRhaWxzOiBgVGVtcGxhdGUgc2F2ZWQ6ICR7dGVtcGxhdGUubWV0YWRhdGEubmFtZX0gdG8gJHtwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKX1gXG4gICAgfSk7XG5cbiAgICBsb2dnZXIuaW5mbyhgVGVtcGxhdGUgc2F2ZWQ6ICR7dGVtcGxhdGUubWV0YWRhdGEubmFtZX1gKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGRlbGV0ZShmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgc3VwZXIuZGVsZXRlKGZpbGVQYXRoKTtcblxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdURU1QTEFURV9ERUxFVEVEJyxcbiAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgIHNvdXJjZTogJ1RlbXBsYXRlTWFuYWdlci5kZWxldGUnLFxuICAgICAgZGV0YWlsczogYFRlbXBsYXRlIGRlbGV0ZWQ6ICR7cGF0aC5iYXNlbmFtZShmaWxlUGF0aCl9YFxuICAgIH0pO1xuXG4gICAgbG9nZ2VyLmluZm8oYFRlbXBsYXRlIGRlbGV0ZWQ6ICR7cGF0aC5iYXNlbmFtZShmaWxlUGF0aCl9YCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGUoZGF0YToge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIGNvbnRlbnQ/OiBzdHJpbmc7XG4gICAgaW5zdHJ1Y3Rpb25zPzogc3RyaW5nO1xuICAgIG1ldGFkYXRhPzogUGFydGlhbDxUZW1wbGF0ZU1ldGFkYXRhPjtcbiAgfSk6IFByb21pc2U8VGVtcGxhdGU+IHtcbiAgICAvLyBVc2Ugc3BlY2lhbGl6ZWQgdmFsaWRhdG9yIGZvciBpbnB1dCB2YWxpZGF0aW9uXG4gICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IGF3YWl0IHRoaXMudmFsaWRhdG9yLnZhbGlkYXRlQ3JlYXRlKHtcbiAgICAgIG5hbWU6IGRhdGEubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBkYXRhLmRlc2NyaXB0aW9uLFxuICAgICAgY29udGVudDogZGF0YS5jb250ZW50XG4gICAgfSk7XG5cbiAgICBpZiAoIXZhbGlkYXRpb25SZXN1bHQuaXNWYWxpZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBWYWxpZGF0aW9uIGZhaWxlZDogJHt2YWxpZGF0aW9uUmVzdWx0LmVycm9ycy5qb2luKCcsICcpfWApO1xuICAgIH1cblxuICAgIC8vIExvZyB3YXJuaW5ncyBpZiBhbnlcbiAgICBpZiAodmFsaWRhdGlvblJlc3VsdC53YXJuaW5ncyAmJiB2YWxpZGF0aW9uUmVzdWx0Lndhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxvZ2dlci53YXJuKGBUZW1wbGF0ZSBjcmVhdGlvbiB3YXJuaW5nczogJHt2YWxpZGF0aW9uUmVzdWx0Lndhcm5pbmdzLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuXG4gICAgLy8gR2V0IHNhbml0aXplZCBuYW1lIGZvciBmaWxlIG9wZXJhdGlvbnMgKHZhbGlkYXRvciBhbHJlYWR5IHZhbGlkYXRlZClcbiAgICBjb25zdCBuYW1lSW5wdXQgPSBkYXRhLm5hbWUgfHwgJ25ldy10ZW1wbGF0ZSc7XG4gICAgY29uc3QgbmFtZVJlc3VsdCA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UudmFsaWRhdGVBbmRTYW5pdGl6ZUlucHV0KG5hbWVJbnB1dCwge1xuICAgICAgbWF4TGVuZ3RoOiBTRUNVUklUWV9MSU1JVFMuTUFYX05BTUVfTEVOR1RILFxuICAgICAgYWxsb3dTcGFjZXM6IHRydWVcbiAgICB9KTtcbiAgICBjb25zdCBzYW5pdGl6ZWROYW1lID0gbmFtZVJlc3VsdC5zYW5pdGl6ZWRWYWx1ZSE7XG5cbiAgICAvLyBVc2UgaW5oZXJpdGVkIGdldEVsZW1lbnRGaWxlbmFtZSgpIGZvciBjb25zaXN0ZW50IGZpbGVuYW1lIG5vcm1hbGl6YXRpb25cbiAgICBjb25zdCBmaWxlbmFtZSA9IHRoaXMuZ2V0RWxlbWVudEZpbGVuYW1lKHNhbml0aXplZE5hbWUpO1xuXG4gICAgLy8gRklYOiBJc3N1ZSAjMjAgLSBDaGVjayBmb3IgZHVwbGljYXRlIGJlZm9yZSBjcmVhdGluZ1xuICAgIGNvbnN0IGV4aXN0aW5nVGVtcGxhdGVzID0gYXdhaXQgdGhpcy5saXN0KCk7XG4gICAgY29uc3QgZHVwbGljYXRlID0gZXhpc3RpbmdUZW1wbGF0ZXMuZmluZCh0ID0+XG4gICAgICB0Lm1ldGFkYXRhLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gc2FuaXRpemVkTmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgKTtcblxuICAgIGlmIChkdXBsaWNhdGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQSB0ZW1wbGF0ZSBuYW1lZCBcIiR7c2FuaXRpemVkTmFtZX1cIiBhbHJlYWR5IGV4aXN0c2ApO1xuICAgIH1cblxuICAgIGNvbnN0IHRlbXBsYXRlID0gbmV3IFRlbXBsYXRlKFxuICAgICAge1xuICAgICAgICAuLi5kYXRhLm1ldGFkYXRhLFxuICAgICAgICBuYW1lOiBzYW5pdGl6ZWROYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogZGF0YS5kZXNjcmlwdGlvbiB8fCAnJ1xuICAgICAgfSxcbiAgICAgIGRhdGEuY29udGVudCB8fCAnJyxcbiAgICAgIHRoaXMubWV0YWRhdGFTZXJ2aWNlXG4gICAgKTtcbiAgICAvLyBTZXQgaW5zdHJ1Y3Rpb25zIChyZW5kZXJpbmcgZGlyZWN0aXZlcykgaWYgcHJvdmlkZWRcbiAgICBpZiAoZGF0YS5pbnN0cnVjdGlvbnMpIHtcbiAgICAgIHRlbXBsYXRlLmluc3RydWN0aW9ucyA9IGRhdGEuaW5zdHJ1Y3Rpb25zO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc2F2ZSh0ZW1wbGF0ZSwgZmlsZW5hbWUpO1xuICAgIC8vIE5vdGU6IE5vIHJlbG9hZCgpIGhlcmUg4oCUIHNhdmUoKSBjYWNoZXMgdGhlIGVsZW1lbnQgY29ycmVjdGx5LlxuICAgIC8vIFNlZSBJc3N1ZSAjNDkxIGZvciB3aHkgUGVyc29uYU1hbmFnZXIncyByZWxvYWQtYWZ0ZXItY3JlYXRlIHdhcyByZW1vdmVkLlxuXG4gICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgdHlwZTogJ0VMRU1FTlRfQ1JFQVRFRCcsXG4gICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICBzb3VyY2U6ICdUZW1wbGF0ZU1hbmFnZXIuY3JlYXRlJyxcbiAgICAgIGRldGFpbHM6IGBUZW1wbGF0ZSBjcmVhdGVkOiAke3RlbXBsYXRlLm1ldGFkYXRhLm5hbWV9YFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9XG5cbiAgYXN5bmMgaW1wb3J0RWxlbWVudChkYXRhOiBzdHJpbmcsIGZvcm1hdDogJ2pzb24nIHwgJ3lhbWwnIHwgJ21hcmtkb3duJyA9ICdtYXJrZG93bicpOiBQcm9taXNlPFRlbXBsYXRlPiB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBtZXRhZGF0YTogUGFydGlhbDxUZW1wbGF0ZU1ldGFkYXRhPjtcbiAgICAgIGxldCBjb250ZW50ID0gJyc7XG5cbiAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgIGNhc2UgJ2pzb24nOiB7XG4gICAgICAgICAgY29uc3QganNvbkRhdGEgPSB0aGlzLnNlcmlhbGl6YXRpb25TZXJ2aWNlLnBhcnNlSnNvbihkYXRhLCB7XG4gICAgICAgICAgICBzb3VyY2U6ICdUZW1wbGF0ZU1hbmFnZXIuaW1wb3J0RWxlbWVudCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBtZXRhZGF0YSA9IGF3YWl0IHRoaXMuc2FuaXRpemVNZXRhZGF0YShqc29uRGF0YS5tZXRhZGF0YSB8fCB7fSk7XG4gICAgICAgICAgY29udGVudCA9IGpzb25EYXRhLmNvbnRlbnQgfHwgJyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICd5YW1sJzoge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMuc2VyaWFsaXphdGlvblNlcnZpY2UucGFyc2VGcm9udG1hdHRlcihkYXRhLCB7XG4gICAgICAgICAgICBtYXhZYW1sU2l6ZTogNjQgKiAxMDI0LFxuICAgICAgICAgICAgdmFsaWRhdGVDb250ZW50OiB0cnVlLFxuICAgICAgICAgICAgc291cmNlOiAnVGVtcGxhdGVNYW5hZ2VyLmltcG9ydEVsZW1lbnQnXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBtZXRhZGF0YSA9IGF3YWl0IHRoaXMuc2FuaXRpemVNZXRhZGF0YShwYXJzZWQuZGF0YS5tZXRhZGF0YSB8fCBwYXJzZWQuZGF0YSk7XG4gICAgICAgICAgY29udGVudCA9IHBhcnNlZC5jb250ZW50IHx8ICcnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnbWFya2Rvd24nOiB7XG4gICAgICAgICAgY29uc3QgbWRQYXJzZWQgPSB0aGlzLnNlcmlhbGl6YXRpb25TZXJ2aWNlLnBhcnNlRnJvbnRtYXR0ZXIoZGF0YSwge1xuICAgICAgICAgICAgbWF4WWFtbFNpemU6IDY0ICogMTAyNCxcbiAgICAgICAgICAgIHZhbGlkYXRlQ29udGVudDogdHJ1ZSxcbiAgICAgICAgICAgIHNvdXJjZTogJ1RlbXBsYXRlTWFuYWdlci5pbXBvcnRFbGVtZW50J1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIG1ldGFkYXRhID0gYXdhaXQgdGhpcy5zYW5pdGl6ZU1ldGFkYXRhKG1kUGFyc2VkLmRhdGEpO1xuICAgICAgICAgIGNvbnRlbnQgPSBtZFBhcnNlZC5jb250ZW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGltcG9ydCBmb3JtYXQ6ICR7Zm9ybWF0fWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZShtZXRhZGF0YSwgY29udGVudCwgdGhpcy5tZXRhZGF0YVNlcnZpY2UpO1xuICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IHRlbXBsYXRlLnZhbGlkYXRlKCk7XG4gICAgICBpZiAoIXZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRlbXBsYXRlOiAke3ZhbGlkYXRpb24uZXJyb3JzPy5tYXAoZSA9PiBlLm1lc3NhZ2UpLmpvaW4oJywgJyl9YCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gaW1wb3J0IHRlbXBsYXRlOiAke2Vycm9yfWApO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZXhwb3J0RWxlbWVudCh0ZW1wbGF0ZTogVGVtcGxhdGUsIGZvcm1hdDogJ2pzb24nIHwgJ3lhbWwnIHwgJ21hcmtkb3duJyA9ICdtYXJrZG93bicpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRyeSB7XG4gICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICBjYXNlICdqc29uJzpcbiAgICAgICAgICByZXR1cm4gKHRlbXBsYXRlIGFzIGFueSkuc2VyaWFsaXplVG9KU09OID8gKHRlbXBsYXRlIGFzIGFueSkuc2VyaWFsaXplVG9KU09OKCkgOiB0ZW1wbGF0ZS5zZXJpYWxpemUoKTtcblxuICAgICAgICBjYXNlICd5YW1sJzoge1xuICAgICAgICAgIGNvbnN0IHlhbWxEYXRhID0ge1xuICAgICAgICAgICAgbWV0YWRhdGE6IHRlbXBsYXRlLm1ldGFkYXRhLFxuICAgICAgICAgICAgY29udGVudDogdGVtcGxhdGUuY29udGVudCxcbiAgICAgICAgICAgIGlkOiB0ZW1wbGF0ZS5pZCxcbiAgICAgICAgICAgIHZlcnNpb246IHRlbXBsYXRlLnZlcnNpb25cbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2VyaWFsaXphdGlvblNlcnZpY2UuZHVtcFlhbWwoeWFtbERhdGEsIHtcbiAgICAgICAgICAgIHNjaGVtYTogJ2pzb24nLCAgLy8gRml4ICM5MTQ6IHN0YW5kYXJkaXplIG9uIEpTT04gc2NoZW1hIGFjcm9zcyBhbGwgbWFuYWdlcnNcbiAgICAgICAgICAgIG5vUmVmczogdHJ1ZSxcbiAgICAgICAgICAgIHNvcnRLZXlzOiB0cnVlLFxuICAgICAgICAgICAgc2tpcEludmFsaWQ6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ21hcmtkb3duJzoge1xuICAgICAgICAgIHJldHVybiB0aGlzLnNlcmlhbGl6YXRpb25TZXJ2aWNlLmNyZWF0ZUZyb250bWF0dGVyKFxuICAgICAgICAgICAgdGVtcGxhdGUubWV0YWRhdGEsXG4gICAgICAgICAgICB0ZW1wbGF0ZS5jb250ZW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtZXRob2Q6ICdtYW51YWwnLFxuICAgICAgICAgICAgICBzY2hlbWE6ICdqc29uJywgIC8vIEZpeCAjOTE0OiBzdGFuZGFyZGl6ZSBvbiBKU09OIHNjaGVtYSBhY3Jvc3MgYWxsIG1hbmFnZXJzXG4gICAgICAgICAgICAgIGNsZWFuTWV0YWRhdGE6IHRydWUsXG4gICAgICAgICAgICAgIGNsZWFuaW5nU3RyYXRlZ3k6ICdyZW1vdmUtYm90aCcgIC8vIEZpeCAjOTEzOiBzdGFuZGFyZGl6ZSBhY3Jvc3MgYWxsIG1hbmFnZXJzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBleHBvcnQgZm9ybWF0OiAke2Zvcm1hdH1gKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZXhwb3J0IHRlbXBsYXRlOiAke2Vycm9yfWApO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZmluZEJ5Q2F0ZWdvcnkoY2F0ZWdvcnk6IHN0cmluZyk6IFByb21pc2U8VGVtcGxhdGVbXT4ge1xuICAgIGNvbnN0IHNhbml0aXplZENhdGVnb3J5ID0gc2FuaXRpemVJbnB1dChjYXRlZ29yeSwgNTApO1xuICAgIGNvbnN0IHRlbXBsYXRlcyA9IGF3YWl0IHRoaXMubGlzdCgpO1xuICAgIHJldHVybiB0ZW1wbGF0ZXMuZmlsdGVyKHQgPT4gdC5tZXRhZGF0YS5jYXRlZ29yeSA9PT0gc2FuaXRpemVkQ2F0ZWdvcnkpO1xuICB9XG5cbiAgYXN5bmMgZmluZEJ5VGFnKHRhZzogc3RyaW5nKTogUHJvbWlzZTxUZW1wbGF0ZVtdPiB7XG4gICAgY29uc3Qgc2FuaXRpemVkVGFnID0gc2FuaXRpemVJbnB1dCh0YWcsIDUwKTtcbiAgICBjb25zdCB0ZW1wbGF0ZXMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcbiAgICByZXR1cm4gdGVtcGxhdGVzLmZpbHRlcih0ID0+IHQubWV0YWRhdGEudGFncz8uaW5jbHVkZXMoc2FuaXRpemVkVGFnKSk7XG4gIH1cblxuICBhc3luYyBnZXRNb3N0VXNlZChsaW1pdDogbnVtYmVyID0gMTApOiBQcm9taXNlPFRlbXBsYXRlW10+IHtcbiAgICBjb25zdCBNSU5fTElNSVQgPSAxO1xuICAgIGNvbnN0IE1BWF9MSU1JVCA9IDEwMDtcbiAgICBjb25zdCB2YWxpZGF0ZWRMaW1pdCA9IE1hdGgubWF4KE1JTl9MSU1JVCwgTWF0aC5taW4oTUFYX0xJTUlULCBNYXRoLmZsb29yKGxpbWl0KSkpO1xuXG4gICAgaWYgKGxpbWl0ICE9PSB2YWxpZGF0ZWRMaW1pdCkge1xuICAgICAgbG9nZ2VyLndhcm4oYGdldE1vc3RVc2VkOiBsaW1pdCAke2xpbWl0fSBhZGp1c3RlZCB0byAke3ZhbGlkYXRlZExpbWl0fSAodmFsaWQgcmFuZ2U6ICR7TUlOX0xJTUlUfS0ke01BWF9MSU1JVH0pYCk7XG4gICAgfVxuXG4gICAgY29uc3QgdGVtcGxhdGVzID0gYXdhaXQgdGhpcy5saXN0KCk7XG4gICAgcmV0dXJuIHRlbXBsYXRlc1xuICAgICAgLnNvcnQoKGEsIGIpID0+IChiLm1ldGFkYXRhLnVzYWdlX2NvdW50IHx8IDApIC0gKGEubWV0YWRhdGEudXNhZ2VfY291bnQgfHwgMCkpXG4gICAgICAuc2xpY2UoMCwgdmFsaWRhdGVkTGltaXQpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0RmlsZUV4dGVuc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnLm1kJztcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBwYXJzZU1ldGFkYXRhKGRhdGE6IGFueSk6IFByb21pc2U8VGVtcGxhdGVNZXRhZGF0YT4ge1xuICAgIGNvbnN0IHNhbml0aXplZCA9IGF3YWl0IHRoaXMuc2FuaXRpemVNZXRhZGF0YShkYXRhKTtcbiAgICAvLyBVc2UgVGVtcGxhdGUgY29uc3RydWN0b3IgdG8gZW5zdXJlIHJlcXVpcmVkIGZpZWxkcyBhcmUgcG9wdWxhdGVkXG4gICAgY29uc3QgdGVtcFRlbXBsYXRlID0gbmV3IFRlbXBsYXRlKHNhbml0aXplZCwgJycsIHRoaXMubWV0YWRhdGFTZXJ2aWNlKTtcbiAgICByZXR1cm4gdGVtcFRlbXBsYXRlLm1ldGFkYXRhO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGNyZWF0ZUVsZW1lbnQobWV0YWRhdGE6IFRlbXBsYXRlTWV0YWRhdGEsIGJvZHlDb250ZW50OiBzdHJpbmcpOiBUZW1wbGF0ZSB7XG4gICAgLy8gRml4ICM5MTI6IFByZWZlciBleHBsaWNpdCBmb3JtYXRfdmVyc2lvbiBtYXJrZXIsIGZhbGwgYmFjayB0byBpbnN0cnVjdGlvbnMtcHJlc2VuY2UgY2hlY2tcbiAgICBjb25zdCBtZXRhZGF0YUluc3RydWN0aW9ucyA9IG1ldGFkYXRhLmluc3RydWN0aW9ucztcbiAgICBkZWxldGUgKG1ldGFkYXRhIGFzIGFueSkuZm9ybWF0X3ZlcnNpb247ICAvLyBTdHJpcCBtYXJrZXIgZnJvbSBydW50aW1lIG1ldGFkYXRhXG4gICAgY29uc3QgdGVtcGxhdGUgPSBuZXcgVGVtcGxhdGUobWV0YWRhdGEsIGJvZHlDb250ZW50LCB0aGlzLm1ldGFkYXRhU2VydmljZSk7XG4gICAgaWYgKG1ldGFkYXRhSW5zdHJ1Y3Rpb25zKSB7XG4gICAgICB0ZW1wbGF0ZS5pbnN0cnVjdGlvbnMgPSBtZXRhZGF0YUluc3RydWN0aW9ucztcbiAgICAgIGRlbGV0ZSBtZXRhZGF0YS5pbnN0cnVjdGlvbnM7XG4gICAgfVxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGREZWZhdWx0Qm9keSh0ZW1wbGF0ZTogVGVtcGxhdGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5hbWUgPSAodGVtcGxhdGUubWV0YWRhdGEubmFtZSA/PyAnJykudHJpbSgpO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gKHRlbXBsYXRlLm1ldGFkYXRhLmRlc2NyaXB0aW9uID8/ICcnKS50cmltKCk7XG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIGxpbmVzLnB1c2goYCMgJHtuYW1lfWApO1xuICAgICAgbGluZXMucHVzaCgnJyk7XG4gICAgfVxuICAgIGlmIChkZXNjcmlwdGlvbikge1xuICAgICAgbGluZXMucHVzaChkZXNjcmlwdGlvbik7XG4gICAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICB9XG4gICAgLy8gU2VjdGlvbiBmb3JtYXQ6IDx0ZW1wbGF0ZT4gZm9yIEhhbmRsZWJhcnMgY29udGVudCwgPHN0eWxlPi88c2NyaXB0PiBmb3IgcmF3IHBhc3N0aHJvdWdoLlxuICAgIC8vIEF1dG8tZGV0ZWN0aW9uIChpc3N1ZSAjNzA1KTogc2VjdGlvbiBtb2RlIGFjdGl2YXRlcyB3aGVuIGJvZHkgaGFzIGEgPHRlbXBsYXRlPiByb290IGVsZW1lbnQuXG4gICAgbGluZXMucHVzaCgnPHRlbXBsYXRlPicpO1xuICAgIGxpbmVzLnB1c2goJzwhLS0gSFRNTCBjb250ZW50IHdpdGgge3t2YXJpYWJsZX19IHN1YnN0aXR1dGlvbiAtLT4nKTtcbiAgICBsaW5lcy5wdXNoKCc8L3RlbXBsYXRlPicpO1xuICAgIGxpbmVzLnB1c2goJycpO1xuICAgIGxpbmVzLnB1c2goJzxzdHlsZT4nKTtcbiAgICBsaW5lcy5wdXNoKCcvKiBDU1Mgc3R5bGVzICh9fSBpcyBzYWZlIGhlcmUg4oCUIG5vdCBIYW5kbGViYXJzIHByb2Nlc3NlZCkgKi8nKTtcbiAgICBsaW5lcy5wdXNoKCc8L3N0eWxlPicpO1xuICAgIGxpbmVzLnB1c2goJycpO1xuICAgIGxpbmVzLnB1c2goJzxzY3JpcHQ+Jyk7XG4gICAgbGluZXMucHVzaCgnLy8gSmF2YVNjcmlwdCAofX0gaXMgc2FmZSBoZXJlIOKAlCBub3QgSGFuZGxlYmFycyBwcm9jZXNzZWQpJyk7XG4gICAgbGluZXMucHVzaCgnPC9zY3JpcHQ+Jyk7XG4gICAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHNlcmlhbGl6ZUVsZW1lbnQodGVtcGxhdGU6IFRlbXBsYXRlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAvLyB2Mi4wIGZvcm1hdDogYWRkIGluc3RydWN0aW9ucyB0byBZQU1MIGZyb250bWF0dGVyIGlmIHByZXNlbnRcbiAgICBjb25zdCBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiA9IHsgLi4udGVtcGxhdGUubWV0YWRhdGEgfTtcbiAgICAvLyBJc3N1ZSAjNzU1OiBTZXJpYWxpemUgdHlwZSBhcyBzaW5ndWxhciBhbmQgcGVyc2lzdCB1bmlxdWVfaWRcbiAgICBtZXRhZGF0YS50eXBlID0gdG9TaW5ndWxhckxhYmVsKEVsZW1lbnRUeXBlLlRFTVBMQVRFKTtcbiAgICBtZXRhZGF0YS51bmlxdWVfaWQgPSB0ZW1wbGF0ZS5pZDtcbiAgICAvLyBGaXggIzkxMjogRXhwbGljaXQgZm9ybWF0IG1hcmtlclxuICAgIG1ldGFkYXRhLmZvcm1hdF92ZXJzaW9uID0gJ3YyJztcbiAgICBpZiAodGVtcGxhdGUuaW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBtZXRhZGF0YS5pbnN0cnVjdGlvbnMgPSB0ZW1wbGF0ZS5pbnN0cnVjdGlvbnM7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6YXRpb25TZXJ2aWNlLmNyZWF0ZUZyb250bWF0dGVyKFxuICAgICAgbWV0YWRhdGEsXG4gICAgICB0ZW1wbGF0ZS5jb250ZW50IHx8IHRoaXMuYnVpbGREZWZhdWx0Qm9keSh0ZW1wbGF0ZSksXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogJ21hbnVhbCcsXG4gICAgICAgIHNjaGVtYTogJ2pzb24nLCAgLy8gRml4ICM5MTQ6IHN0YW5kYXJkaXplIG9uIEpTT04gc2NoZW1hIGFjcm9zcyBhbGwgbWFuYWdlcnNcbiAgICAgICAgY2xlYW5NZXRhZGF0YTogdHJ1ZSxcbiAgICAgICAgY2xlYW5pbmdTdHJhdGVneTogJ3JlbW92ZS1ib3RoJywgIC8vIEZpeCAjOTEzOiBzdGFuZGFyZGl6ZSBhY3Jvc3MgYWxsIG1hbmFnZXJzXG4gICAgICAgIHNvcnRLZXlzOiB0cnVlLFxuICAgICAgICBsaW5lV2lkdGg6IDgwLFxuICAgICAgICBza2lwSW52YWxpZDogdHJ1ZVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNhbml0aXplTWV0YWRhdGEoZGF0YTogYW55KTogUHJvbWlzZTxQYXJ0aWFsPFRlbXBsYXRlTWV0YWRhdGE+PiB7XG4gICAgY29uc3QgbWV0YWRhdGE6IFBhcnRpYWw8VGVtcGxhdGVNZXRhZGF0YT4gPSB7fTtcblxuICAgIGlmIChkYXRhLm5hbWUpIHtcbiAgICAgIG1ldGFkYXRhLm5hbWUgPSBzYW5pdGl6ZUlucHV0KFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKGRhdGEubmFtZSkubm9ybWFsaXplZENvbnRlbnQsIDEwMCk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEuZGVzY3JpcHRpb24pIHtcbiAgICAgIG1ldGFkYXRhLmRlc2NyaXB0aW9uID0gc2FuaXRpemVJbnB1dChVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShkYXRhLmRlc2NyaXB0aW9uKS5ub3JtYWxpemVkQ29udGVudCwgNTAwKTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YS5jYXRlZ29yeSkge1xuICAgICAgLy8gU0VDVVJJVFkgRklYOiBVc2UgVmFsaWRhdGlvblNlcnZpY2UgZm9yIGNhdGVnb3J5IHZhbGlkYXRpb25cbiAgICAgIGNvbnN0IGNhdGVnb3J5UmVzdWx0ID0gdGhpcy52YWxpZGF0aW9uU2VydmljZS52YWxpZGF0ZUNhdGVnb3J5KGRhdGEuY2F0ZWdvcnkpO1xuICAgICAgaWYgKGNhdGVnb3J5UmVzdWx0LmlzVmFsaWQgJiYgY2F0ZWdvcnlSZXN1bHQuc2FuaXRpemVkVmFsdWUpIHtcbiAgICAgICAgbWV0YWRhdGEuY2F0ZWdvcnkgPSBjYXRlZ29yeVJlc3VsdC5zYW5pdGl6ZWRWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGF0YS5vdXRwdXRfZm9ybWF0KSB7XG4gICAgICBtZXRhZGF0YS5vdXRwdXRfZm9ybWF0ID0gc2FuaXRpemVJbnB1dChkYXRhLm91dHB1dF9mb3JtYXQsIDIwKTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhLnRhZ3MpKSB7XG4gICAgICBtZXRhZGF0YS50YWdzID0gZGF0YS50YWdzLm1hcCgodGFnOiBhbnkpID0+IHNhbml0aXplSW5wdXQoU3RyaW5nKHRhZyksIDUwKSk7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YS5pbmNsdWRlcykpIHtcbiAgICAgIG1ldGFkYXRhLmluY2x1ZGVzID0gZGF0YS5pbmNsdWRlcy5tYXAoKGluYzogYW55KSA9PiBzYW5pdGl6ZUlucHV0KFN0cmluZyhpbmMpLCAyMDApKTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YS50cmlnZ2VycyAmJiBBcnJheS5pc0FycmF5KGRhdGEudHJpZ2dlcnMpKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gdGhpcy50cmlnZ2VyVmFsaWRhdGlvblNlcnZpY2UudmFsaWRhdGVUcmlnZ2VycyhcbiAgICAgICAgZGF0YS50cmlnZ2VycyxcbiAgICAgICAgRWxlbWVudFR5cGUuVEVNUExBVEUsXG4gICAgICAgIG1ldGFkYXRhLm5hbWUgfHwgJ3Vua25vd24nXG4gICAgICApO1xuICAgICAgbWV0YWRhdGEudHJpZ2dlcnMgPSB2YWxpZGF0aW9uUmVzdWx0LnZhbGlkVHJpZ2dlcnM7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhLnVzYWdlX2NvdW50ID09PSAnbnVtYmVyJykge1xuICAgICAgbWV0YWRhdGEudXNhZ2VfY291bnQgPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKGRhdGEudXNhZ2VfY291bnQpKTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YS5sYXN0X3VzZWQpIHtcbiAgICAgIG1ldGFkYXRhLmxhc3RfdXNlZCA9IHNhbml0aXplSW5wdXQoU3RyaW5nKGRhdGEubGFzdF91c2VkKSwgNTApO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEudmFyaWFibGVzKSkge1xuICAgICAgbWV0YWRhdGEudmFyaWFibGVzID0gZGF0YS52YXJpYWJsZXMubWFwKCh2OiBhbnkpID0+ICh7XG4gICAgICAgIG5hbWU6IHNhbml0aXplSW5wdXQodi5uYW1lIHx8ICcnLCA1MCksXG4gICAgICAgIHR5cGU6IHNhbml0aXplSW5wdXQodi50eXBlIHx8ICdzdHJpbmcnLCAyMCksXG4gICAgICAgIGRlc2NyaXB0aW9uOiB2LmRlc2NyaXB0aW9uID8gc2FuaXRpemVJbnB1dCh2LmRlc2NyaXB0aW9uLCBTRUNVUklUWV9MSU1JVFMuTUFYX0RPQ1VNRU5UQVRJT05fRklFTERfTEVOR1RIKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVxdWlyZWQ6IEJvb2xlYW4odi5yZXF1aXJlZCksXG4gICAgICAgIGRlZmF1bHQ6IHYuZGVmYXVsdCxcbiAgICAgICAgdmFsaWRhdGlvbjogdi52YWxpZGF0aW9uID8gc2FuaXRpemVJbnB1dCh2LnZhbGlkYXRpb24sIDIwMCkgOiB1bmRlZmluZWQsXG4gICAgICAgIG9wdGlvbnM6IEFycmF5LmlzQXJyYXkodi5vcHRpb25zKSA/IHYub3B0aW9ucy5tYXAoKG86IGFueSkgPT4gc2FuaXRpemVJbnB1dChTdHJpbmcobyksIDEwMCkpIDogdW5kZWZpbmVkLFxuICAgICAgICBmb3JtYXQ6IHYuZm9ybWF0ID8gc2FuaXRpemVJbnB1dCh2LmZvcm1hdCwgNTApIDogdW5kZWZpbmVkXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YS5leGFtcGxlcykpIHtcbiAgICAgIG1ldGFkYXRhLmV4YW1wbGVzID0gZGF0YS5leGFtcGxlcy5tYXAoKGV4OiBhbnkpID0+ICh7XG4gICAgICAgIHRpdGxlOiBzYW5pdGl6ZUlucHV0KGV4LnRpdGxlIHx8ICcnLCAxMDApLFxuICAgICAgICBkZXNjcmlwdGlvbjogZXguZGVzY3JpcHRpb24gPyBzYW5pdGl6ZUlucHV0KGV4LmRlc2NyaXB0aW9uLCBTRUNVUklUWV9MSU1JVFMuTUFYX0RPQ1VNRU5UQVRJT05fRklFTERfTEVOR1RIKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgdmFyaWFibGVzOiBleC52YXJpYWJsZXMgfHwge30sXG4gICAgICAgIG91dHB1dDogZXgub3V0cHV0ID8gc2FuaXRpemVJbnB1dChleC5vdXRwdXQsIDUwMDApIDogdW5kZWZpbmVkXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgbWV0YWRhdGEuYXV0aG9yID0gZGF0YS5hdXRob3IgPyBzYW5pdGl6ZUlucHV0KGRhdGEuYXV0aG9yLCAxMDApIDogdW5kZWZpbmVkO1xuICAgIG1ldGFkYXRhLnZlcnNpb24gPSBkYXRhLnZlcnNpb24gPyBzYW5pdGl6ZUlucHV0KGRhdGEudmVyc2lvbiwgMjApIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gSXNzdWUgIzUyNCDigJQgR2F0ZWtlZXBlciBwb2xpY3kgKGFsbCBlbGVtZW50IHR5cGVzKVxuICAgIG1ldGFkYXRhLmdhdGVrZWVwZXIgPSBzYW5pdGl6ZUdhdGVrZWVwZXJQb2xpY3koZGF0YS5nYXRla2VlcGVyLCBtZXRhZGF0YS5uYW1lIHx8ICd1bmtub3duJywgJ3RlbXBsYXRlJywgbWV0YWRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuXG4gICAgbWV0YWRhdGEubmFtZSA9IG1ldGFkYXRhLm5hbWUgPz8gJ1VudGl0bGVkIFRlbXBsYXRlJztcbiAgICBtZXRhZGF0YS5kZXNjcmlwdGlvbiA9IG1ldGFkYXRhLmRlc2NyaXB0aW9uID8/ICcnO1xuXG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9XG59XG4iXX0=
@@ -2,8 +2,8 @@
2
2
  * Auto-generated file - DO NOT EDIT
3
3
  * Generated at build time by scripts/generate-version.js
4
4
  */
5
- export declare const PACKAGE_VERSION = "2.0.32";
6
- export declare const BUILD_TIMESTAMP = "2026-04-23T05:37:29.058Z";
5
+ export declare const PACKAGE_VERSION = "2.0.34";
6
+ export declare const BUILD_TIMESTAMP = "2026-06-23T20:18:34.489Z";
7
7
  export declare const BUILD_TYPE: 'npm' | 'git';
8
8
  export declare const PACKAGE_NAME = "@dollhousemcp/mcp-server";
9
9
  //# sourceMappingURL=version.d.ts.map
@@ -2,8 +2,8 @@
2
2
  * Auto-generated file - DO NOT EDIT
3
3
  * Generated at build time by scripts/generate-version.js
4
4
  */
5
- export const PACKAGE_VERSION = '2.0.32';
6
- export const BUILD_TIMESTAMP = '2026-04-23T05:37:29.058Z';
5
+ export const PACKAGE_VERSION = '2.0.34';
6
+ export const BUILD_TIMESTAMP = '2026-06-23T20:18:34.489Z';
7
7
  export const BUILD_TYPE = 'npm';
8
8
  export const PACKAGE_NAME = '@dollhousemcp/mcp-server';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcyLjAuMzInO1xuZXhwb3J0IGNvbnN0IEJVSUxEX1RJTUVTVEFNUCA9ICcyMDI2LTA0LTIzVDA1OjM3OjI5LjA1OFonO1xuZXhwb3J0IGNvbnN0IEJVSUxEX1RZUEU6ICducG0nIHwgJ2dpdCcgPSAnbnBtJztcbmV4cG9ydCBjb25zdCBQQUNLQUdFX05BTUUgPSAnQGRvbGxob3VzZW1jcC9tY3Atc2VydmVyJztcbiJdfQ==
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcyLjAuMzQnO1xuZXhwb3J0IGNvbnN0IEJVSUxEX1RJTUVTVEFNUCA9ICcyMDI2LTA2LTIzVDIwOjE4OjM0LjQ4OVonO1xuZXhwb3J0IGNvbnN0IEJVSUxEX1RZUEU6ICducG0nIHwgJ2dpdCcgPSAnbnBtJztcbmV4cG9ydCBjb25zdCBQQUNLQUdFX05BTUUgPSAnQGRvbGxob3VzZW1jcC9tY3Atc2VydmVyJztcbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"createElement.d.ts","sourceRoot":"","sources":["../../../src/handlers/element-crud/createElement.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAQhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,4FAA4F;IAC5F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gJAAgJ;IAChJ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC;;;OAGG;IACH,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;IAG7B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,KAAK,CAAC;YACjB,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;YACtC,QAAQ,EAAE,OAAO,CAAC;YAClB,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;SACrC,CAAC,CAAC;QACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;KAC5B,CAAC;IACF;;;OAGG;IACH,SAAS,CAAC,EAAE;QACV,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;KACrC,CAAC;IACF;;;OAGG;IACH,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IACF;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAeD,wBAAsB,aAAa,CAAC,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,iBAAiB;;;;;GA6QvF"}
1
+ {"version":3,"file":"createElement.d.ts","sourceRoot":"","sources":["../../../src/handlers/element-crud/createElement.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAQhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,4FAA4F;IAC5F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gJAAgJ;IAChJ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC;;;OAGG;IACH,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;IAG7B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,KAAK,CAAC;YACjB,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;YACtC,QAAQ,EAAE,OAAO,CAAC;YAClB,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;SACrC,CAAC,CAAC;QACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;KAC5B,CAAC;IACF;;;OAGG;IACH,SAAS,CAAC,EAAE;QACV,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;KACrC,CAAC;IACF;;;OAGG;IACH,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IACF;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAeD,wBAAsB,aAAa,CAAC,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,iBAAiB;;;;;GAuRvF"}
@@ -38,7 +38,15 @@ export async function createElement(context, args) {
38
38
  };
39
39
  }
40
40
  const validatedName = sanitizeInput(name, SECURITY_LIMITS.MAX_FILENAME_LENGTH);
41
- const validatedDescription = sanitizeInput(description, SECURITY_LIMITS.MAX_METADATA_FIELD_LENGTH);
41
+ if (description.length > SECURITY_LIMITS.MAX_DESCRIPTION_LENGTH) {
42
+ return {
43
+ content: [{
44
+ type: "text",
45
+ text: `❌ Description too large: Maximum allowed size is ${SECURITY_LIMITS.MAX_DESCRIPTION_LENGTH} characters.`
46
+ }]
47
+ };
48
+ }
49
+ const validatedDescription = sanitizeInput(description, SECURITY_LIMITS.MAX_DESCRIPTION_LENGTH);
42
50
  if (content) {
43
51
  try {
44
52
  validateContentSize(content, SECURITY_LIMITS.MAX_CONTENT_LENGTH);
@@ -271,4 +279,4 @@ export async function createElement(context, args) {
271
279
  };
272
280
  }
273
281
  }
274
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlRWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oYW5kbGVycy9lbGVtZW50LWNydWQvY3JlYXRlRWxlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hHLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIseUJBQXlCLEVBQ3pCLDJCQUEyQixFQUMzQiwrQkFBK0IsRUFDL0IsNkJBQTZCLEVBQzdCLCtCQUErQixFQUMvQixnQ0FBZ0MsRUFDaEMsaUNBQWlDLEdBQ2xDLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXpFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxtR0FBbUc7QUFDbkcsT0FBTyxFQUNMLHlCQUF5QixFQUN6QixvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3JCLE1BQU0sd0JBQXdCLENBQUM7QUE4R2hDOztHQUVHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxRQUF5QixFQUFFLFNBQWlCO0lBQ3ZFLE9BQU87UUFDTCxHQUFHLFFBQVE7UUFDWCxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLEdBQUcsQ0FBQztZQUNKLElBQUksRUFBRSxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFO1NBQzlCLENBQUMsQ0FBQztLQUNKLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxhQUFhLENB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bUIsRUFBRSxDQUFDO1FBQ2hELE9BQU87WUFDTCxPQUFPLEVBQUUsQ0FBQztvQkFDUixJQUFJLEVBQUUsTUFBTTtvQkFDWixJQUFJLEVBQUUsR0FBRyxTQUFTLCtCQUErQixPQUFPLEVBQUU7aUJBQzNELENBQUM7U0FDSCxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZJWDogRE1DUC1TRUMtMDA2IC0gU2VjdXJpdHkgYXVkaXQgc3VwcHJlc3Npb25cbiAqIFRoaXMgZmlsZSBkZWxlZ2F0ZXMgZWxlbWVudCBjcmVhdGlvbiB0byBzcGVjaWFsaXplZCBtYW5hZ2Vycy5cbiAqIEF1ZGl0IGxvZ2dpbmcgaGFwcGVucyBpbiB0aGUgbWFuYWdlcnMgdGhlbXNlbHZlcyAoUGVyc29uYU1hbmFnZXIsIFNraWxsTWFuYWdlciwgZXRjLikuXG4gKiBAc2VjdXJpdHktYXVkaXQtc3VwcHJlc3MgRE1DUC1TRUMtMDA2XG4gKi9cblxuaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tICcuLi8uLi9wb3J0Zm9saW8vUG9ydGZvbGlvTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBTRUNVUklUWV9MSU1JVFMgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgc2FuaXRpemVJbnB1dCwgdmFsaWRhdGVDb250ZW50U2l6ZSwgdmFsaWRhdGVDYXRlZ29yeSB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L0lucHV0VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7XG4gIHNhbml0aXplTWV0YWRhdGEsXG4gIG5vcm1hbGl6ZUVsZW1lbnRUeXBlSW5wdXQsXG4gIGZvcm1hdFZhbGlkRWxlbWVudFR5cGVzTGlzdCxcbiAgZGV0ZWN0VW5rbm93bk1ldGFkYXRhUHJvcGVydGllcyxcbiAgZm9ybWF0VW5rbm93blByb3BlcnR5V2FybmluZ3MsXG4gIGZvcm1hdEVsZW1lbnRSZXNvbHV0aW9uV2FybmluZ3MsXG4gIGNvbGxlY3RHYXRla2VlcGVyQXV0aG9yaW5nRXJyb3JzLFxuICBmb3JtYXRHYXRla2VlcGVyVmFsaWRhdGlvbk1lc3NhZ2UsXG59IGZyb20gJy4vaGVscGVycy5qcyc7XG5pbXBvcnQgeyByZXNvbHZlRWxlbWVudFR5cGVzIH0gZnJvbSAnLi4vLi4vdXRpbHMvZWxlbWVudFR5cGVSZXNvbHZlci5qcyc7XG5pbXBvcnQgeyBFbGVtZW50Q3J1ZENvbnRleHQgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG4vLyBGSVg6IElzc3VlICMyODEgLSBTZWN1cml0eU1vbml0b3IgaW1wb3J0IHJlbW92ZWQsIHBlcnNvbmEgbG9nZ2luZyBub3cgaW4gUGVyc29uYU1hbmFnZXIuY3JlYXRlKClcbmltcG9ydCB7XG4gIGZvcm1hdFNpbXBsZUVycm9yUmVzcG9uc2UsXG4gIGZvcm1hdER1cGxpY2F0ZUVycm9yLFxuICBmb3JtYXRFeGNlcHRpb25FcnJvclxufSBmcm9tICcuL3Jlc3BvbnNlRm9ybWF0dGVyLmpzJztcbmltcG9ydCB0eXBlIHsgTWNwVG9vbFJlc3BvbnNlIH0gZnJvbSAnLi9yZXNwb25zZUZvcm1hdHRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IEVuc2VtYmxlRWxlbWVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL2Vuc2VtYmxlcy90eXBlcy5qcyc7XG5cbi8qKlxuICogQXJndW1lbnRzIGZvciBjcmVhdGluZyBhIG5ldyBlbGVtZW50LlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYSBwZXJzb25hXG4gKiB7IG5hbWU6ICdoZWxwZXInLCB0eXBlOiAncGVyc29uYScsIGRlc2NyaXB0aW9uOiAnQSBoZWxwZnVsIGFzc2lzdGFudCcsIGluc3RydWN0aW9uczogJ0JlIGhlbHBmdWwnIH1cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGFuIGVuc2VtYmxlIHdpdGggZWxlbWVudHNcbiAqIHtcbiAqICAgbmFtZTogJ215LWVuc2VtYmxlJyxcbiAqICAgdHlwZTogJ2Vuc2VtYmxlJyxcbiAqICAgZGVzY3JpcHRpb246ICdBIGNvb3JkaW5hdGVkIGdyb3VwJyxcbiAqICAgZWxlbWVudHM6IFt7IG5hbWU6ICdza2lsbDEnLCB0eXBlOiAnc2tpbGwnLCByb2xlOiAncHJpbWFyeScsIHByaW9yaXR5OiAxMDAsIGFjdGl2YXRpb246ICdhbHdheXMnIH1dXG4gKiB9XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0ZSBhIFYyIGFnZW50IHdpdGggZ29hbCBjb25maWd1cmF0aW9uXG4gKiB7XG4gKiAgIG5hbWU6ICd0YXNrLXJ1bm5lcicsXG4gKiAgIHR5cGU6ICdhZ2VudCcsXG4gKiAgIGRlc2NyaXB0aW9uOiAnRXhlY3V0ZXMgdGFza3MgYXV0b25vbW91c2x5JyxcbiAqICAgZ29hbDoge1xuICogICAgIHRlbXBsYXRlOiAnQ29tcGxldGUgdGhlIGZvbGxvd2luZyB0YXNrOiB7b2JqZWN0aXZlfScsXG4gKiAgICAgcGFyYW1ldGVyczogW3sgbmFtZTogJ29iamVjdGl2ZScsIHR5cGU6ICdzdHJpbmcnLCByZXF1aXJlZDogdHJ1ZSB9XSxcbiAqICAgICBzdWNjZXNzQ3JpdGVyaWE6IFsnVGFzayBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5JywgJ1Jlc3VsdHMgZG9jdW1lbnRlZCddXG4gKiAgIH0sXG4gKiAgIGFjdGl2YXRlczogeyBza2lsbHM6IFsnY29kZS1yZXZpZXcnXSwgcGVyc29uYXM6IFsnZGV2ZWxvcGVyJ10gfVxuICogfVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUVsZW1lbnRBcmdzIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIC8qKiBSZWZlcmVuY2UgbWF0ZXJpYWwsIGtub3dsZWRnZSwgY29udGV4dCAoaW5mb3JtYXRpb25hbCkuIEZvciB0ZW1wbGF0ZXM6IHRlbXBsYXRlIGJvZHkuICovXG4gIGNvbnRlbnQ/OiBzdHJpbmc7XG4gIC8qKiBCZWhhdmlvcmFsIGRpcmVjdGl2ZXMgKGNvbW1hbmQgdm9pY2UpLiBGb3IgcGVyc29uYXM6IGJlaGF2aW9yYWwgcHJvZmlsZS4gRm9yIHNraWxsczogaG93IHRvIGFwcGx5LiBGb3IgYWdlbnRzOiBhZ2VudCBiZWhhdmlvcmFsIHByb3RvY29sLiAqL1xuICBpbnN0cnVjdGlvbnM/OiBzdHJpbmc7XG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKlxuICAgKiBGb3IgZW5zZW1ibGVzIC0gYXJyYXkgb2YgZWxlbWVudCByZWZlcmVuY2VzLlxuICAgKiBJc3N1ZSAjMjc4OiBMTE1zIG9mdGVuIHBhc3MgZWxlbWVudHMgYXQgdG9wIGxldmVsLCBub3QgaW5zaWRlIG1ldGFkYXRhLlxuICAgKi9cbiAgZWxlbWVudHM/OiBFbnNlbWJsZUVsZW1lbnRbXTtcblxuICAvLyBWMiBBZ2VudCBmaWVsZHMgKGNhbiBhbHNvIGJlIHBhc3NlZCBpbiBtZXRhZGF0YSlcbiAgLyoqXG4gICAqIEZvciBWMiBhZ2VudHMgLSBnb2FsIGNvbmZpZ3VyYXRpb24gd2l0aCB0ZW1wbGF0ZSBhbmQgcGFyYW1ldGVycy5cbiAgICogQ2FuIGJlIHBhc3NlZCBhcyBhIHNpbXBsZSBzdHJpbmcgKHdpbGwgYmUgY29udmVydGVkIHRvIFYyIGZvcm1hdClcbiAgICogb3IgYXMgYSBmdWxsIFYyIGNvbmZpZyBvYmplY3QuXG4gICAqXG4gICAqIEBzaW5jZSB2Mi4wLjAgLSBBZ2VudCBWMiBJbmZyYXN0cnVjdHVyZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBTaW1wbGUgc3RyaW5nIGdvYWwgKGF1dG8tY29udmVydGVkIHRvIFYyIGZvcm1hdClcbiAgICogZ29hbDogJ0NvbXBsZXRlIHRoZSBhbmFseXNpcyB0YXNrJ1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBGdWxsIFYyIGNvbmZpZyB3aXRoIHBhcmFtZXRlcnNcbiAgICogZ29hbDoge1xuICAgKiAgIHRlbXBsYXRlOiAnQW5hbHl6ZSB7dGFyZ2V0fSBmb3Ige3B1cnBvc2V9JyxcbiAgICogICBwYXJhbWV0ZXJzOiBbXG4gICAqICAgICB7IG5hbWU6ICd0YXJnZXQnLCB0eXBlOiAnc3RyaW5nJywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICogICAgIHsgbmFtZTogJ3B1cnBvc2UnLCB0eXBlOiAnc3RyaW5nJywgcmVxdWlyZWQ6IHRydWUgfVxuICAgKiAgIF0sXG4gICAqICAgc3VjY2Vzc0NyaXRlcmlhOiBbJ0FuYWx5c2lzIGNvbXBsZXRlJywgJ1JlcG9ydCBnZW5lcmF0ZWQnXVxuICAgKiB9XG4gICAqL1xuICBnb2FsPzogc3RyaW5nIHwge1xuICAgIHRlbXBsYXRlOiBzdHJpbmc7XG4gICAgcGFyYW1ldGVycz86IEFycmF5PHtcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIHR5cGU6ICdzdHJpbmcnIHwgJ251bWJlcicgfCAnYm9vbGVhbic7XG4gICAgICByZXF1aXJlZDogYm9vbGVhbjtcbiAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgICAgZGVmYXVsdD86IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW47XG4gICAgfT47XG4gICAgc3VjY2Vzc0NyaXRlcmlhPzogc3RyaW5nW107XG4gIH07XG4gIC8qKlxuICAgKiBGb3IgVjIgYWdlbnRzIC0gZWxlbWVudHMgdG8gYWN0aXZhdGUgd2hlbiBhZ2VudCBleGVjdXRlcy5cbiAgICogQHNpbmNlIHYyLjAuMCAtIEFnZW50IFYyIEluZnJhc3RydWN0dXJlXG4gICAqL1xuICBhY3RpdmF0ZXM/OiB7XG4gICAgcGVyc29uYXM/OiBzdHJpbmdbXTtcbiAgICBza2lsbHM/OiBzdHJpbmdbXTtcbiAgICBtZW1vcmllcz86IHN0cmluZ1tdO1xuICAgIHRlbXBsYXRlcz86IHN0cmluZ1tdO1xuICAgIGVuc2VtYmxlcz86IHN0cmluZ1tdO1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICB9O1xuICAvKipcbiAgICogRm9yIFYyIGFnZW50cyAtIHRvb2wgY29uZmlndXJhdGlvbiAoaW5mb3JtYXRpb25hbCkuXG4gICAqIEBzaW5jZSB2Mi4wLjAgLSBBZ2VudCBWMiBJbmZyYXN0cnVjdHVyZVxuICAgKi9cbiAgdG9vbHM/OiB7XG4gICAgYWxsb3dlZDogc3RyaW5nW107XG4gICAgZGVuaWVkPzogc3RyaW5nW107XG4gIH07XG4gIC8qKlxuICAgKiBGb3IgVjIgYWdlbnRzIC0gY3VzdG9tIHN5c3RlbSBwcm9tcHQgZm9yIExMTSBjb250ZXh0LlxuICAgKiBAc2luY2UgdjIuMC4wIC0gQWdlbnQgVjIgSW5mcmFzdHJ1Y3R1cmVcbiAgICovXG4gIHN5c3RlbVByb21wdD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBIZWxwZXIgdG8gYWRkIHBlcnNvbmEgaW5kaWNhdG9yIHByZWZpeCB0byByZXNwb25zZVxuICovXG5mdW5jdGlvbiBhZGRQZXJzb25hSW5kaWNhdG9yKHJlc3BvbnNlOiBNY3BUb29sUmVzcG9uc2UsIGluZGljYXRvcjogc3RyaW5nKSB7XG4gIHJldHVybiB7XG4gICAgLi4ucmVzcG9uc2UsXG4gICAgY29udGVudDogcmVzcG9uc2UuY29udGVudC5tYXAoYyA9PiAoe1xuICAgICAgLi4uYyxcbiAgICAgIHRleHQ6IGAke2luZGljYXRvcn0ke2MudGV4dH1gXG4gICAgfSkpXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVFbGVtZW50KGNvbnRleHQ6IEVsZW1lbnRDcnVkQ29udGV4dCwgYXJnczogQ3JlYXRlRWxlbWVudEFyZ3MpIHtcbiAgYXdhaXQgY29udGV4dC5lbnN1cmVJbml0aWFsaXplZCgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgeyBuYW1lLCB0eXBlLCBkZXNjcmlwdGlvbiwgY29udGVudCwgaW5zdHJ1Y3Rpb25zLCBtZXRhZGF0YSB9ID0gYXJncztcblxuICAgIGNvbnN0IHsgdHlwZTogbm9ybWFsaXplZFR5cGUgfSA9IG5vcm1hbGl6ZUVsZW1lbnRUeXBlSW5wdXQodHlwZSk7XG5cbiAgICBpZiAoIW5vcm1hbGl6ZWRUeXBlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGDinYwgSW52YWxpZCBlbGVtZW50IHR5cGUgJyR7dHlwZX0nLiBWYWxpZCB0eXBlczogJHtmb3JtYXRWYWxpZEVsZW1lbnRUeXBlc0xpc3QoKX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkYXRlZE5hbWUgPSBzYW5pdGl6ZUlucHV0KG5hbWUsIFNFQ1VSSVRZX0xJTUlUUy5NQVhfRklMRU5BTUVfTEVOR1RIKTtcbiAgICBjb25zdCB2YWxpZGF0ZWREZXNjcmlwdGlvbiA9IHNhbml0aXplSW5wdXQoZGVzY3JpcHRpb24sIFNFQ1VSSVRZX0xJTUlUUy5NQVhfTUVUQURBVEFfRklFTERfTEVOR1RIKTtcblxuICAgIGlmIChjb250ZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YWxpZGF0ZUNvbnRlbnRTaXplKGNvbnRlbnQsIFNFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGDinYwgQ29udGVudCB0b28gbGFyZ2U6ICR7ZXJyb3IubWVzc2FnZX0uIE1heGltdW0gYWxsb3dlZCBzaXplIGlzICR7U0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSH0gY2hhcmFjdGVycyAoJHtNYXRoLmZsb29yKFNFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEggLyAxMDI0KX1LQikuYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSXNzdWUgIzYwMiByZXNvbHZlZDogQm90aCAnaW5zdHJ1Y3Rpb25zJyBhbmQgJ2NvbnRlbnQnIGFyZSBmaXJzdC1jbGFzcyBmaWVsZHMuXG4gICAgLy8gaW5zdHJ1Y3Rpb25zID0gYmVoYXZpb3JhbCBkaXJlY3RpdmVzIChjb21tYW5kIHZvaWNlLCBcIllvdSBBUkUuLi5cIiwgXCJBTFdBWVMuLi5cIilcbiAgICAvLyBjb250ZW50ID0gcmVmZXJlbmNlIG1hdGVyaWFsIChpbmZvcm1hdGlvbmFsLCBkb21haW4ga25vd2xlZGdlLCBleGFtcGxlcylcbiAgICBpZiAoaW5zdHJ1Y3Rpb25zKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YWxpZGF0ZUNvbnRlbnRTaXplKGluc3RydWN0aW9ucywgU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSCk7XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCBJbnN0cnVjdGlvbnMgdG9vIGxhcmdlOiAke2Vycm9yLm1lc3NhZ2V9LiBNYXhpbXVtIGFsbG93ZWQgc2l6ZSBpcyAke1NFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEh9IGNoYXJhY3RlcnMuYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRWxlbWVudC1zcGVjaWZpYyBmaWVsZHMgKGVuc2VtYmxlIGVsZW1lbnRzLCBhZ2VudCBWMiBmaWVsZHMpIGFyZSBtZXJnZWQgaW50b1xuICAgIC8vIG1ldGFkYXRhIGJ5IHRoZSBkaXNwYXRjaGVyIChNQ1BBUUxIYW5kbGVyKS4gY3JlYXRlRWxlbWVudCBqdXN0IHNhbml0aXplcyBhbmQgZGVsZWdhdGVzLlxuICAgIGNvbnN0IHNhbml0aXplZCA9IHNhbml0aXplTWV0YWRhdGEobWV0YWRhdGEpO1xuXG4gICAgY29uc3QgZ2F0ZWtlZXBlckVycm9ycyA9IGNvbGxlY3RHYXRla2VlcGVyQXV0aG9yaW5nRXJyb3JzKHsgLi4uYXJncyB9LCBzYW5pdGl6ZWQpO1xuICAgIGlmIChnYXRla2VlcGVyRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBmb3JtYXRTaW1wbGVFcnJvclJlc3BvbnNlKGZvcm1hdEdhdGVrZWVwZXJWYWxpZGF0aW9uTWVzc2FnZShnYXRla2VlcGVyRXJyb3JzKSk7XG4gICAgfVxuXG4gICAgLy8gSXNzdWUgIzYyMTogVmFsaWRhdGUgY2F0ZWdvcnkgZm9ybWF0IGZvciBlbGVtZW50IHR5cGVzIHRoYXQgc3VwcG9ydCBpdFxuICAgIC8vIFBlcnNvbmEgYWxzbyBzdXBwb3J0cyBjYXRlZ29yaWVzICh2YWxpZGF0ZWQgaW50ZXJuYWxseSBieSBQZXJzb25hTWFuYWdlcikg4oCUIGluY2x1ZGUgaGVyZSBmb3IgY29uc2lzdGVudCBlYXJseSBlcnJvciByZXBvcnRpbmdcbiAgICBjb25zdCBDQVRFR09SWV9UWVBFUyA9IG5ldyBTZXQoW0VsZW1lbnRUeXBlLlBFUlNPTkEsIEVsZW1lbnRUeXBlLlNLSUxMLCBFbGVtZW50VHlwZS5URU1QTEFURSwgRWxlbWVudFR5cGUuTUVNT1JZXSk7XG4gICAgaWYgKHNhbml0aXplZC5jYXRlZ29yeSAmJiBDQVRFR09SWV9UWVBFUy5oYXMobm9ybWFsaXplZFR5cGUpKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YWxpZGF0ZUNhdGVnb3J5KHNhbml0aXplZC5jYXRlZ29yeSBhcyBzdHJpbmcpO1xuICAgICAgfSBjYXRjaCAoY2F0ZWdvcnlFcnJvcjogYW55KSB7XG4gICAgICAgIHJldHVybiBmb3JtYXRTaW1wbGVFcnJvclJlc3BvbnNlKFxuICAgICAgICAgIGBJbnZhbGlkIGNhdGVnb3J5ICcke3Nhbml0aXplZC5jYXRlZ29yeX0nOiAke2NhdGVnb3J5RXJyb3IubWVzc2FnZX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGV0ZWN0IHVua25vd24gbWV0YWRhdGEgcHJvcGVydGllcyBhbmQgZ2VuZXJhdGUgd2FybmluZ3MgZm9yIExMTSBmZWVkYmFja1xuICAgIGNvbnN0IHVua25vd25Qcm9wZXJ0eVdhcm5pbmdzID0gZGV0ZWN0VW5rbm93bk1ldGFkYXRhUHJvcGVydGllcyhcbiAgICAgIG5vcm1hbGl6ZWRUeXBlLFxuICAgICAgbWV0YWRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICApO1xuICAgIGNvbnN0IHdhcm5pbmdUZXh0ID0gZm9ybWF0VW5rbm93blByb3BlcnR5V2FybmluZ3ModW5rbm93blByb3BlcnR5V2FybmluZ3MpO1xuXG4gICAgLy8gTG9nIHdhcm5pbmdzIGZvciBkZWJ1Z2dpbmcgd2l0aCBzdHJ1Y3R1cmVkIGRhdGEgZm9yIGJldHRlciBvYnNlcnZhYmlsaXR5XG4gICAgaWYgKHVua25vd25Qcm9wZXJ0eVdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxvZ2dlci53YXJuKGBbY3JlYXRlRWxlbWVudF0gVW5rbm93biBtZXRhZGF0YSBwcm9wZXJ0aWVzIGRldGVjdGVkYCwge1xuICAgICAgICBlbGVtZW50VHlwZTogbm9ybWFsaXplZFR5cGUsXG4gICAgICAgIGVsZW1lbnROYW1lOiBuYW1lLFxuICAgICAgICB3YXJuaW5nQ291bnQ6IHVua25vd25Qcm9wZXJ0eVdhcm5pbmdzLmxlbmd0aCxcbiAgICAgICAgdW5rbm93blByb3BlcnRpZXM6IHVua25vd25Qcm9wZXJ0eVdhcm5pbmdzLm1hcCh3ID0+ICh7XG4gICAgICAgICAgcHJvcGVydHk6IHcucHJvcGVydHksXG4gICAgICAgICAgc3VnZ2VzdGlvbjogdy5zdWdnZXN0aW9uXG4gICAgICAgIH0pKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChub3JtYWxpemVkVHlwZSkge1xuICAgICAgY2FzZSBFbGVtZW50VHlwZS5QRVJTT05BOiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gSXNzdWUgIzYwMjogQm90aCAnaW5zdHJ1Y3Rpb25zJyBhbmQgJ2NvbnRlbnQnIGFyZSBmaXJzdC1jbGFzcyBmaWVsZHMuXG4gICAgICAgICAgY29uc3QgcGVyc29uYSA9IGF3YWl0IGNvbnRleHQucGVyc29uYU1hbmFnZXIuY3JlYXRlKHtcbiAgICAgICAgICAgIC4uLnNhbml0aXplZCxcbiAgICAgICAgICAgIG5hbWU6IHZhbGlkYXRlZE5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogdmFsaWRhdGVkRGVzY3JpcHRpb24sXG4gICAgICAgICAgICBpbnN0cnVjdGlvbnM6IGluc3RydWN0aW9ucyxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBzdWNjZXNzTXNnID0gYCR7d2FybmluZ1RleHR94pyFIENyZWF0ZWQgcGVyc29uYSAnJHtwZXJzb25hLm1ldGFkYXRhLm5hbWV9JyBzdWNjZXNzZnVsbHlgO1xuICAgICAgICAgIHJldHVybiB7IGNvbnRlbnQ6IFt7IHR5cGU6IFwidGV4dFwiLCB0ZXh0OiBgJHtjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKX0ke3N1Y2Nlc3NNc2d9YCB9XSB9O1xuICAgICAgICB9IGNhdGNoIChwZXJzb25hRXJyb3IpIHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gcGVyc29uYUVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBwZXJzb25hRXJyb3IubWVzc2FnZSA6IFN0cmluZyhwZXJzb25hRXJyb3IpO1xuICAgICAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKCdpbnN0cnVjdGlvbnMgYXJlIHJlcXVpcmVkJykpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRTaW1wbGVFcnJvclJlc3BvbnNlKG1lc3NhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBlcnJvclJlc3BvbnNlID0gbWVzc2FnZS5pbmNsdWRlcygnYWxyZWFkeSBleGlzdHMnKVxuICAgICAgICAgICAgPyBmb3JtYXREdXBsaWNhdGVFcnJvcihFbGVtZW50VHlwZS5QRVJTT05BLCB2YWxpZGF0ZWROYW1lKVxuICAgICAgICAgICAgOiBmb3JtYXRFeGNlcHRpb25FcnJvcihwZXJzb25hRXJyb3IsICdjcmVhdGUnLCBFbGVtZW50VHlwZS5QRVJTT05BLCB2YWxpZGF0ZWROYW1lKTtcbiAgICAgICAgICByZXR1cm4gYWRkUGVyc29uYUluZGljYXRvcihlcnJvclJlc3BvbnNlLCBjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2FzZSBFbGVtZW50VHlwZS5TS0lMTDoge1xuICAgICAgICAvLyBGSVg6IElzc3VlICMyMCAtIENhdGNoIGR1cGxpY2F0ZSBlcnJvcnMgZnJvbSBTa2lsbE1hbmFnZXJcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBza2lsbCA9IGF3YWl0IGNvbnRleHQuc2tpbGxNYW5hZ2VyLmNyZWF0ZSh7XG4gICAgICAgICAgICBuYW1lOiB2YWxpZGF0ZWROYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHZhbGlkYXRlZERlc2NyaXB0aW9uLFxuICAgICAgICAgICAgLi4uc2FuaXRpemVkLFxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zOiBpbnN0cnVjdGlvbnMsXG4gICAgICAgICAgICBjb250ZW50OiBjb250ZW50IHx8ICcnXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3Qgc3VjY2Vzc01zZyA9IGAke3dhcm5pbmdUZXh0feKchSBDcmVhdGVkIHNraWxsICcke3NraWxsLm1ldGFkYXRhLm5hbWV9JyBzdWNjZXNzZnVsbHlgO1xuICAgICAgICAgIHJldHVybiB7IGNvbnRlbnQ6IFt7IHR5cGU6IFwidGV4dFwiLCB0ZXh0OiBgJHtjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKX0ke3N1Y2Nlc3NNc2d9YCB9XSB9O1xuICAgICAgICB9IGNhdGNoIChza2lsbEVycm9yKSB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBhIGR1cGxpY2F0ZSBlcnJvclxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBza2lsbEVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBza2lsbEVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoc2tpbGxFcnJvcik7XG4gICAgICAgICAgY29uc3QgZXJyb3JSZXNwb25zZSA9IG1lc3NhZ2UuaW5jbHVkZXMoJ2FscmVhZHkgZXhpc3RzJylcbiAgICAgICAgICAgID8gZm9ybWF0RHVwbGljYXRlRXJyb3IoRWxlbWVudFR5cGUuU0tJTEwsIHZhbGlkYXRlZE5hbWUpXG4gICAgICAgICAgICA6IGZvcm1hdEV4Y2VwdGlvbkVycm9yKHNraWxsRXJyb3IsICdjcmVhdGUnLCBFbGVtZW50VHlwZS5TS0lMTCwgdmFsaWRhdGVkTmFtZSk7XG4gICAgICAgICAgcmV0dXJuIGFkZFBlcnNvbmFJbmRpY2F0b3IoZXJyb3JSZXNwb25zZSwgY29udGV4dC5nZXRQZXJzb25hSW5kaWNhdG9yKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6IHtcbiAgICAgICAgLy8gRklYOiBJc3N1ZSAjMjAgLSBDYXRjaCBkdXBsaWNhdGUgZXJyb3JzIGZyb20gVGVtcGxhdGVNYW5hZ2VyXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBhd2FpdCBjb250ZXh0LnRlbXBsYXRlTWFuYWdlci5jcmVhdGUoe1xuICAgICAgICAgICAgbmFtZTogdmFsaWRhdGVkTmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB2YWxpZGF0ZWREZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGluc3RydWN0aW9uczogaW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgICAgY29udGVudDogY29udGVudCB8fCAnJyxcbiAgICAgICAgICAgIG1ldGFkYXRhOiBzYW5pdGl6ZWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3Qgc3VjY2Vzc01zZyA9IGAke3dhcm5pbmdUZXh0feKchSBDcmVhdGVkIHRlbXBsYXRlICcke3RlbXBsYXRlLm1ldGFkYXRhLm5hbWV9JyBzdWNjZXNzZnVsbHlgO1xuICAgICAgICAgIHJldHVybiB7IGNvbnRlbnQ6IFt7IHR5cGU6IFwidGV4dFwiLCB0ZXh0OiBgJHtjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKX0ke3N1Y2Nlc3NNc2d9YCB9XSB9O1xuICAgICAgICB9IGNhdGNoICh0ZW1wbGF0ZUVycm9yKSB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBhIGR1cGxpY2F0ZSBlcnJvclxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0ZW1wbGF0ZUVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyB0ZW1wbGF0ZUVycm9yLm1lc3NhZ2UgOiBTdHJpbmcodGVtcGxhdGVFcnJvcik7XG4gICAgICAgICAgY29uc3QgZXJyb3JSZXNwb25zZSA9IG1lc3NhZ2UuaW5jbHVkZXMoJ2FscmVhZHkgZXhpc3RzJylcbiAgICAgICAgICAgID8gZm9ybWF0RHVwbGljYXRlRXJyb3IoRWxlbWVudFR5cGUuVEVNUExBVEUsIHZhbGlkYXRlZE5hbWUpXG4gICAgICAgICAgICA6IGZvcm1hdEV4Y2VwdGlvbkVycm9yKHRlbXBsYXRlRXJyb3IsICdjcmVhdGUnLCBFbGVtZW50VHlwZS5URU1QTEFURSwgdmFsaWRhdGVkTmFtZSk7XG4gICAgICAgICAgcmV0dXJuIGFkZFBlcnNvbmFJbmRpY2F0b3IoZXJyb3JSZXNwb25zZSwgY29udGV4dC5nZXRQZXJzb25hSW5kaWNhdG9yKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6IHtcbiAgICAgICAgLy8gVjIgZmllbGRzIGFyZSBtZXJnZWQgaW50byBtZXRhZGF0YSBieSB0aGUgZGlzcGF0Y2hlciAoTUNQQVFMSGFuZGxlcikuXG4gICAgICAgIC8vIEdvYWwgbm9ybWFsaXphdGlvbiAoc3RyaW5n4oaSb2JqZWN0KSBpcyBoYW5kbGVkIGJ5IEFnZW50TWFuYWdlci5jcmVhdGUoKS5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBJc3N1ZSAjNzIyOiB2MiBkdWFsLWZpZWxkIGFyY2hpdGVjdHVyZSDigJQgZWFjaCBmaWVsZCBnb2VzIHdoZXJlIGl0IGJlbG9uZ3MuXG4gICAgICAgICAgLy8gQWdlbnRNYW5hZ2VyLmNyZWF0ZSgpIDNyZCBwYXJhbSA9IGJlaGF2aW9yYWwgZGlyZWN0aXZlcyAoYWdlbnQuaW5zdHJ1Y3Rpb25zKS5cbiAgICAgICAgICAvLyBtZXRhZGF0YS5jb250ZW50ID0gcmVmZXJlbmNlIG1hdGVyaWFsIChtYXJrZG93biBib2R5IGFmdGVyIGZyb250bWF0dGVyKS5cbiAgICAgICAgICBjb25zdCBhZ2VudEluc3RydWN0aW9ucyA9IGluc3RydWN0aW9ucyB8fCAnJztcbiAgICAgICAgICBjb25zdCBhZ2VudENvbnRlbnQgPSBjb250ZW50IHx8ICcnO1xuICAgICAgICAgIGNvbnN0IGFnZW50ID0gYXdhaXQgY29udGV4dC5hZ2VudE1hbmFnZXIuY3JlYXRlKFxuICAgICAgICAgICAgdmFsaWRhdGVkTmFtZSxcbiAgICAgICAgICAgIHZhbGlkYXRlZERlc2NyaXB0aW9uLFxuICAgICAgICAgICAgYWdlbnRJbnN0cnVjdGlvbnMsXG4gICAgICAgICAgICB7IC4uLnNhbml0aXplZCwgY29udGVudDogYWdlbnRDb250ZW50IH1cbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChhZ2VudC5zdWNjZXNzKSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlTWVzc2FnZSA9IGFnZW50Lm1lc3NhZ2UgJiYgYWdlbnQubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdjcmVhdGVkIGFnZW50JylcbiAgICAgICAgICAgICAgPyBhZ2VudC5tZXNzYWdlXG4gICAgICAgICAgICAgIDogYENyZWF0ZWQgYWdlbnQgJyR7dmFsaWRhdGVkTmFtZX0nIHN1Y2Nlc3NmdWxseWA7XG4gICAgICAgICAgICBjb25zdCBzdWNjZXNzTXNnID0gYCR7d2FybmluZ1RleHR94pyFICR7YmFzZU1lc3NhZ2V9YDtcbiAgICAgICAgICAgIHJldHVybiB7IGNvbnRlbnQ6IFt7IHR5cGU6IFwidGV4dFwiLCB0ZXh0OiBgJHtjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKX0ke3N1Y2Nlc3NNc2d9YCB9XSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBGSVg6IElzc3VlICMyMCAtIEluY2x1ZGUgXCJmYWlsZWQgdG8gY3JlYXRlXCIgaW4gZXJyb3IgbWVzc2FnZSBmb3IgdGVzdCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgY29uc3QgZmFpbHVyZVJlYXNvbiA9IGFnZW50Lm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InO1xuICAgICAgICAgIHJldHVybiBmb3JtYXRTaW1wbGVFcnJvclJlc3BvbnNlKGBGYWlsZWQgdG8gY3JlYXRlIGFnZW50OiAke2ZhaWx1cmVSZWFzb259YCk7XG4gICAgICAgIH0gY2F0Y2ggKGFnZW50RXJyb3IpIHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYWdlbnRFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gYWdlbnRFcnJvci5tZXNzYWdlIDogU3RyaW5nKGFnZW50RXJyb3IpO1xuICAgICAgICAgIGNvbnN0IGVycm9yUmVzcG9uc2UgPSBtZXNzYWdlLmluY2x1ZGVzKCdhbHJlYWR5IGV4aXN0cycpXG4gICAgICAgICAgICA/IGZvcm1hdER1cGxpY2F0ZUVycm9yKEVsZW1lbnRUeXBlLkFHRU5ULCB2YWxpZGF0ZWROYW1lKVxuICAgICAgICAgICAgOiBmb3JtYXRFeGNlcHRpb25FcnJvcihhZ2VudEVycm9yLCAnY3JlYXRlJywgRWxlbWVudFR5cGUuQUdFTlQsIHZhbGlkYXRlZE5hbWUpO1xuICAgICAgICAgIHJldHVybiBhZGRQZXJzb25hSW5kaWNhdG9yKGVycm9yUmVzcG9uc2UsIGNvbnRleHQuZ2V0UGVyc29uYUluZGljYXRvcigpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjYXNlIEVsZW1lbnRUeXBlLk1FTU9SWToge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG1lbW9yeSA9IGF3YWl0IGNvbnRleHQubWVtb3J5TWFuYWdlci5jcmVhdGUoe1xuICAgICAgICAgICAgLi4uc2FuaXRpemVkLFxuICAgICAgICAgICAgbmFtZTogdmFsaWRhdGVkTmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB2YWxpZGF0ZWREZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgICAgICBpbnN0cnVjdGlvbnM6IGluc3RydWN0aW9ucyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBzdWNjZXNzTXNnID0gYCR7d2FybmluZ1RleHR94pyFIENyZWF0ZWQgbWVtb3J5ICcke21lbW9yeS5tZXRhZGF0YS5uYW1lfScgc3VjY2Vzc2Z1bGx5YDtcbiAgICAgICAgICByZXR1cm4geyBjb250ZW50OiBbeyB0eXBlOiBcInRleHRcIiwgdGV4dDogYCR7Y29udGV4dC5nZXRQZXJzb25hSW5kaWNhdG9yKCl9JHtzdWNjZXNzTXNnfWAgfV0gfTtcbiAgICAgICAgfSBjYXRjaCAobWVtb3J5RXJyb3IpIHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gbWVtb3J5RXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IG1lbW9yeUVycm9yLm1lc3NhZ2UgOiBTdHJpbmcobWVtb3J5RXJyb3IpO1xuICAgICAgICAgIGNvbnN0IGVycm9yUmVzcG9uc2UgPSBtZXNzYWdlLmluY2x1ZGVzKCdhbHJlYWR5IGV4aXN0cycpXG4gICAgICAgICAgICA/IGZvcm1hdER1cGxpY2F0ZUVycm9yKEVsZW1lbnRUeXBlLk1FTU9SWSwgdmFsaWRhdGVkTmFtZSlcbiAgICAgICAgICAgIDogZm9ybWF0RXhjZXB0aW9uRXJyb3IobWVtb3J5RXJyb3IsICdjcmVhdGUnLCBFbGVtZW50VHlwZS5NRU1PUlksIHZhbGlkYXRlZE5hbWUpO1xuICAgICAgICAgIHJldHVybiBhZGRQZXJzb25hSW5kaWNhdG9yKGVycm9yUmVzcG9uc2UsIGNvbnRleHQuZ2V0UGVyc29uYUluZGljYXRvcigpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjYXNlIEVsZW1lbnRUeXBlLkVOU0VNQkxFOiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gSXNzdWUgIzQ2NjogUmVzb2x2ZSBtaXNzaW5nIGVsZW1lbnRfdHlwZSB2aWEgcG9ydGZvbGlvIGxvb2t1cCBiZWZvcmUgY3JlYXRlXG4gICAgICAgICAgY29uc3QgcmVzb2x1dGlvblJlc3VsdCA9IGF3YWl0IHJlc29sdmVFbGVtZW50VHlwZXMoXG4gICAgICAgICAgICBzYW5pdGl6ZWQuZWxlbWVudHMgfHwgW10sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNraWxsTWFuYWdlcjogY29udGV4dC5za2lsbE1hbmFnZXIsXG4gICAgICAgICAgICAgIHRlbXBsYXRlTWFuYWdlcjogY29udGV4dC50ZW1wbGF0ZU1hbmFnZXIsXG4gICAgICAgICAgICAgIGFnZW50TWFuYWdlcjogY29udGV4dC5hZ2VudE1hbmFnZXIsXG4gICAgICAgICAgICAgIG1lbW9yeU1hbmFnZXI6IGNvbnRleHQubWVtb3J5TWFuYWdlcixcbiAgICAgICAgICAgICAgcGVyc29uYU1hbmFnZXI6IGNvbnRleHQucGVyc29uYU1hbmFnZXIsXG4gICAgICAgICAgICAgIGVuc2VtYmxlTWFuYWdlcjogY29udGV4dC5lbnNlbWJsZU1hbmFnZXIsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCByZXNvbHV0aW9uV2FybmluZ1RleHQgPSBmb3JtYXRFbGVtZW50UmVzb2x1dGlvbldhcm5pbmdzKHJlc29sdXRpb25SZXN1bHQpO1xuXG4gICAgICAgICAgY29uc3QgZW5zZW1ibGUgPSBhd2FpdCBjb250ZXh0LmVuc2VtYmxlTWFuYWdlci5jcmVhdGUoe1xuICAgICAgICAgICAgLi4uc2FuaXRpemVkLFxuICAgICAgICAgICAgbmFtZTogdmFsaWRhdGVkTmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB2YWxpZGF0ZWREZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGVsZW1lbnRzOiByZXNvbHV0aW9uUmVzdWx0LnJlc29sdmVkLFxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zOiBpbnN0cnVjdGlvbnMsXG4gICAgICAgICAgICBjb250ZW50OiBjb250ZW50LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NNc2cgPSBgJHt3YXJuaW5nVGV4dH0ke3Jlc29sdXRpb25XYXJuaW5nVGV4dH3inIUgQ3JlYXRlZCBlbnNlbWJsZSAnJHtlbnNlbWJsZS5tZXRhZGF0YS5uYW1lfScgc3VjY2Vzc2Z1bGx5YDtcbiAgICAgICAgICByZXR1cm4geyBjb250ZW50OiBbeyB0eXBlOiBcInRleHRcIiwgdGV4dDogYCR7Y29udGV4dC5nZXRQZXJzb25hSW5kaWNhdG9yKCl9JHtzdWNjZXNzTXNnfWAgfV0gfTtcbiAgICAgICAgfSBjYXRjaCAoZW5zZW1ibGVFcnJvcikge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlbnNlbWJsZUVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlbnNlbWJsZUVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZW5zZW1ibGVFcnJvcik7XG4gICAgICAgICAgY29uc3QgZXJyb3JSZXNwb25zZSA9IG1lc3NhZ2UuaW5jbHVkZXMoJ2FscmVhZHkgZXhpc3RzJylcbiAgICAgICAgICAgID8gZm9ybWF0RHVwbGljYXRlRXJyb3IoRWxlbWVudFR5cGUuRU5TRU1CTEUsIHZhbGlkYXRlZE5hbWUpXG4gICAgICAgICAgICA6IGZvcm1hdEV4Y2VwdGlvbkVycm9yKGVuc2VtYmxlRXJyb3IsICdjcmVhdGUnLCBFbGVtZW50VHlwZS5FTlNFTUJMRSwgdmFsaWRhdGVkTmFtZSk7XG4gICAgICAgICAgcmV0dXJuIGFkZFBlcnNvbmFJbmRpY2F0b3IoZXJyb3JSZXNwb25zZSwgY29udGV4dC5nZXRQZXJzb25hSW5kaWNhdG9yKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCBFbGVtZW50IHR5cGUgJyR7dHlwZX0nIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGZvciBjcmVhdGlvbmBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ0VsZW1lbnRDUlVESGFuZGxlci5jcmVhdGVFbGVtZW50JywgZXJyb3IpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJztcbiAgICBjb25zdCBpbmRpY2F0b3IgPSBjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKTtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW3tcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgIHRleHQ6IGAke2luZGljYXRvcn3inYwgRmFpbGVkIHRvIGNyZWF0ZSBlbGVtZW50OiAke21lc3NhZ2V9YFxuICAgICAgfV1cbiAgICB9O1xuICB9XG59XG4iXX0=
282
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlRWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9oYW5kbGVycy9lbGVtZW50LWNydWQvY3JlYXRlRWxlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hHLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIseUJBQXlCLEVBQ3pCLDJCQUEyQixFQUMzQiwrQkFBK0IsRUFDL0IsNkJBQTZCLEVBQzdCLCtCQUErQixFQUMvQixnQ0FBZ0MsRUFDaEMsaUNBQWlDLEdBQ2xDLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXpFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxtR0FBbUc7QUFDbkcsT0FBTyxFQUNMLHlCQUF5QixFQUN6QixvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3JCLE1BQU0sd0JBQXdCLENBQUM7QUE4R2hDOztHQUVHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxRQUF5QixFQUFFLFNBQWlCO0lBQ3ZFLE9BQU87UUFDTCxHQUFHLFFBQVE7UUFDWCxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLEdBQUcsQ0FBQztZQUNKLElBQUksRUFBRSxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFO1NBQzlCLENBQUMsQ0FBQztLQUNKLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxhQUFhLENB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QUFFLENBQUM7UUFDZixNQUFNLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hELE1BQU0sT0FBTyxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztRQUN6RSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUNoRCxPQUFPO1lBQ0wsT0FBTyxFQUFFLENBQUM7b0JBQ1IsSUFBSSxFQUFFLE1BQU07b0JBQ1osSUFBSSxFQUFFLEdBQUcsU0FBUywrQkFBK0IsT0FBTyxFQUFFO2lCQUMzRCxDQUFDO1NBQ0gsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGSVg6IERNQ1AtU0VDLTAwNiAtIFNlY3VyaXR5IGF1ZGl0IHN1cHByZXNzaW9uXG4gKiBUaGlzIGZpbGUgZGVsZWdhdGVzIGVsZW1lbnQgY3JlYXRpb24gdG8gc3BlY2lhbGl6ZWQgbWFuYWdlcnMuXG4gKiBBdWRpdCBsb2dnaW5nIGhhcHBlbnMgaW4gdGhlIG1hbmFnZXJzIHRoZW1zZWx2ZXMgKFBlcnNvbmFNYW5hZ2VyLCBTa2lsbE1hbmFnZXIsIGV0Yy4pLlxuICogQHNlY3VyaXR5LWF1ZGl0LXN1cHByZXNzIERNQ1AtU0VDLTAwNlxuICovXG5cbmltcG9ydCB7IEVsZW1lbnRUeXBlIH0gZnJvbSAnLi4vLi4vcG9ydGZvbGlvL1BvcnRmb2xpb01hbmFnZXIuanMnO1xuaW1wb3J0IHsgU0VDVVJJVFlfTElNSVRTIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IHNhbml0aXplSW5wdXQsIHZhbGlkYXRlQ29udGVudFNpemUsIHZhbGlkYXRlQ2F0ZWdvcnkgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9JbnB1dFZhbGlkYXRvci5qcyc7XG5pbXBvcnQge1xuICBzYW5pdGl6ZU1ldGFkYXRhLFxuICBub3JtYWxpemVFbGVtZW50VHlwZUlucHV0LFxuICBmb3JtYXRWYWxpZEVsZW1lbnRUeXBlc0xpc3QsXG4gIGRldGVjdFVua25vd25NZXRhZGF0YVByb3BlcnRpZXMsXG4gIGZvcm1hdFVua25vd25Qcm9wZXJ0eVdhcm5pbmdzLFxuICBmb3JtYXRFbGVtZW50UmVzb2x1dGlvbldhcm5pbmdzLFxuICBjb2xsZWN0R2F0ZWtlZXBlckF1dGhvcmluZ0Vycm9ycyxcbiAgZm9ybWF0R2F0ZWtlZXBlclZhbGlkYXRpb25NZXNzYWdlLFxufSBmcm9tICcuL2hlbHBlcnMuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZUVsZW1lbnRUeXBlcyB9IGZyb20gJy4uLy4uL3V0aWxzL2VsZW1lbnRUeXBlUmVzb2x2ZXIuanMnO1xuaW1wb3J0IHsgRWxlbWVudENydWRDb250ZXh0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuLy8gRklYOiBJc3N1ZSAjMjgxIC0gU2VjdXJpdHlNb25pdG9yIGltcG9ydCByZW1vdmVkLCBwZXJzb25hIGxvZ2dpbmcgbm93IGluIFBlcnNvbmFNYW5hZ2VyLmNyZWF0ZSgpXG5pbXBvcnQge1xuICBmb3JtYXRTaW1wbGVFcnJvclJlc3BvbnNlLFxuICBmb3JtYXREdXBsaWNhdGVFcnJvcixcbiAgZm9ybWF0RXhjZXB0aW9uRXJyb3Jcbn0gZnJvbSAnLi9yZXNwb25zZUZvcm1hdHRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IE1jcFRvb2xSZXNwb25zZSB9IGZyb20gJy4vcmVzcG9uc2VGb3JtYXR0ZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBFbnNlbWJsZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9lbnNlbWJsZXMvdHlwZXMuanMnO1xuXG4vKipcbiAqIEFyZ3VtZW50cyBmb3IgY3JlYXRpbmcgYSBuZXcgZWxlbWVudC5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGEgcGVyc29uYVxuICogeyBuYW1lOiAnaGVscGVyJywgdHlwZTogJ3BlcnNvbmEnLCBkZXNjcmlwdGlvbjogJ0EgaGVscGZ1bCBhc3Npc3RhbnQnLCBpbnN0cnVjdGlvbnM6ICdCZSBoZWxwZnVsJyB9XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0ZSBhbiBlbnNlbWJsZSB3aXRoIGVsZW1lbnRzXG4gKiB7XG4gKiAgIG5hbWU6ICdteS1lbnNlbWJsZScsXG4gKiAgIHR5cGU6ICdlbnNlbWJsZScsXG4gKiAgIGRlc2NyaXB0aW9uOiAnQSBjb29yZGluYXRlZCBncm91cCcsXG4gKiAgIGVsZW1lbnRzOiBbeyBuYW1lOiAnc2tpbGwxJywgdHlwZTogJ3NraWxsJywgcm9sZTogJ3ByaW1hcnknLCBwcmlvcml0eTogMTAwLCBhY3RpdmF0aW9uOiAnYWx3YXlzJyB9XVxuICogfVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYSBWMiBhZ2VudCB3aXRoIGdvYWwgY29uZmlndXJhdGlvblxuICoge1xuICogICBuYW1lOiAndGFzay1ydW5uZXInLFxuICogICB0eXBlOiAnYWdlbnQnLFxuICogICBkZXNjcmlwdGlvbjogJ0V4ZWN1dGVzIHRhc2tzIGF1dG9ub21vdXNseScsXG4gKiAgIGdvYWw6IHtcbiAqICAgICB0ZW1wbGF0ZTogJ0NvbXBsZXRlIHRoZSBmb2xsb3dpbmcgdGFzazoge29iamVjdGl2ZX0nLFxuICogICAgIHBhcmFtZXRlcnM6IFt7IG5hbWU6ICdvYmplY3RpdmUnLCB0eXBlOiAnc3RyaW5nJywgcmVxdWlyZWQ6IHRydWUgfV0sXG4gKiAgICAgc3VjY2Vzc0NyaXRlcmlhOiBbJ1Rhc2sgY29tcGxldGVkIHN1Y2Nlc3NmdWxseScsICdSZXN1bHRzIGRvY3VtZW50ZWQnXVxuICogICB9LFxuICogICBhY3RpdmF0ZXM6IHsgc2tpbGxzOiBbJ2NvZGUtcmV2aWV3J10sIHBlcnNvbmFzOiBbJ2RldmVsb3BlciddIH1cbiAqIH1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVFbGVtZW50QXJncyB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAvKiogUmVmZXJlbmNlIG1hdGVyaWFsLCBrbm93bGVkZ2UsIGNvbnRleHQgKGluZm9ybWF0aW9uYWwpLiBGb3IgdGVtcGxhdGVzOiB0ZW1wbGF0ZSBib2R5LiAqL1xuICBjb250ZW50Pzogc3RyaW5nO1xuICAvKiogQmVoYXZpb3JhbCBkaXJlY3RpdmVzIChjb21tYW5kIHZvaWNlKS4gRm9yIHBlcnNvbmFzOiBiZWhhdmlvcmFsIHByb2ZpbGUuIEZvciBza2lsbHM6IGhvdyB0byBhcHBseS4gRm9yIGFnZW50czogYWdlbnQgYmVoYXZpb3JhbCBwcm90b2NvbC4gKi9cbiAgaW5zdHJ1Y3Rpb25zPzogc3RyaW5nO1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKipcbiAgICogRm9yIGVuc2VtYmxlcyAtIGFycmF5IG9mIGVsZW1lbnQgcmVmZXJlbmNlcy5cbiAgICogSXNzdWUgIzI3ODogTExNcyBvZnRlbiBwYXNzIGVsZW1lbnRzIGF0IHRvcCBsZXZlbCwgbm90IGluc2lkZSBtZXRhZGF0YS5cbiAgICovXG4gIGVsZW1lbnRzPzogRW5zZW1ibGVFbGVtZW50W107XG5cbiAgLy8gVjIgQWdlbnQgZmllbGRzIChjYW4gYWxzbyBiZSBwYXNzZWQgaW4gbWV0YWRhdGEpXG4gIC8qKlxuICAgKiBGb3IgVjIgYWdlbnRzIC0gZ29hbCBjb25maWd1cmF0aW9uIHdpdGggdGVtcGxhdGUgYW5kIHBhcmFtZXRlcnMuXG4gICAqIENhbiBiZSBwYXNzZWQgYXMgYSBzaW1wbGUgc3RyaW5nICh3aWxsIGJlIGNvbnZlcnRlZCB0byBWMiBmb3JtYXQpXG4gICAqIG9yIGFzIGEgZnVsbCBWMiBjb25maWcgb2JqZWN0LlxuICAgKlxuICAgKiBAc2luY2UgdjIuMC4wIC0gQWdlbnQgVjIgSW5mcmFzdHJ1Y3R1cmVcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gU2ltcGxlIHN0cmluZyBnb2FsIChhdXRvLWNvbnZlcnRlZCB0byBWMiBmb3JtYXQpXG4gICAqIGdvYWw6ICdDb21wbGV0ZSB0aGUgYW5hbHlzaXMgdGFzaydcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gRnVsbCBWMiBjb25maWcgd2l0aCBwYXJhbWV0ZXJzXG4gICAqIGdvYWw6IHtcbiAgICogICB0ZW1wbGF0ZTogJ0FuYWx5emUge3RhcmdldH0gZm9yIHtwdXJwb3NlfScsXG4gICAqICAgcGFyYW1ldGVyczogW1xuICAgKiAgICAgeyBuYW1lOiAndGFyZ2V0JywgdHlwZTogJ3N0cmluZycsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAqICAgICB7IG5hbWU6ICdwdXJwb3NlJywgdHlwZTogJ3N0cmluZycsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICogICBdLFxuICAgKiAgIHN1Y2Nlc3NDcml0ZXJpYTogWydBbmFseXNpcyBjb21wbGV0ZScsICdSZXBvcnQgZ2VuZXJhdGVkJ11cbiAgICogfVxuICAgKi9cbiAgZ29hbD86IHN0cmluZyB8IHtcbiAgICB0ZW1wbGF0ZTogc3RyaW5nO1xuICAgIHBhcmFtZXRlcnM/OiBBcnJheTx7XG4gICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICB0eXBlOiAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2Jvb2xlYW4nO1xuICAgICAgcmVxdWlyZWQ6IGJvb2xlYW47XG4gICAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICAgIGRlZmF1bHQ/OiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuO1xuICAgIH0+O1xuICAgIHN1Y2Nlc3NDcml0ZXJpYT86IHN0cmluZ1tdO1xuICB9O1xuICAvKipcbiAgICogRm9yIFYyIGFnZW50cyAtIGVsZW1lbnRzIHRvIGFjdGl2YXRlIHdoZW4gYWdlbnQgZXhlY3V0ZXMuXG4gICAqIEBzaW5jZSB2Mi4wLjAgLSBBZ2VudCBWMiBJbmZyYXN0cnVjdHVyZVxuICAgKi9cbiAgYWN0aXZhdGVzPzoge1xuICAgIHBlcnNvbmFzPzogc3RyaW5nW107XG4gICAgc2tpbGxzPzogc3RyaW5nW107XG4gICAgbWVtb3JpZXM/OiBzdHJpbmdbXTtcbiAgICB0ZW1wbGF0ZXM/OiBzdHJpbmdbXTtcbiAgICBlbnNlbWJsZXM/OiBzdHJpbmdbXTtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgfTtcbiAgLyoqXG4gICAqIEZvciBWMiBhZ2VudHMgLSB0b29sIGNvbmZpZ3VyYXRpb24gKGluZm9ybWF0aW9uYWwpLlxuICAgKiBAc2luY2UgdjIuMC4wIC0gQWdlbnQgVjIgSW5mcmFzdHJ1Y3R1cmVcbiAgICovXG4gIHRvb2xzPzoge1xuICAgIGFsbG93ZWQ6IHN0cmluZ1tdO1xuICAgIGRlbmllZD86IHN0cmluZ1tdO1xuICB9O1xuICAvKipcbiAgICogRm9yIFYyIGFnZW50cyAtIGN1c3RvbSBzeXN0ZW0gcHJvbXB0IGZvciBMTE0gY29udGV4dC5cbiAgICogQHNpbmNlIHYyLjAuMCAtIEFnZW50IFYyIEluZnJhc3RydWN0dXJlXG4gICAqL1xuICBzeXN0ZW1Qcm9tcHQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSGVscGVyIHRvIGFkZCBwZXJzb25hIGluZGljYXRvciBwcmVmaXggdG8gcmVzcG9uc2VcbiAqL1xuZnVuY3Rpb24gYWRkUGVyc29uYUluZGljYXRvcihyZXNwb25zZTogTWNwVG9vbFJlc3BvbnNlLCBpbmRpY2F0b3I6IHN0cmluZykge1xuICByZXR1cm4ge1xuICAgIC4uLnJlc3BvbnNlLFxuICAgIGNvbnRlbnQ6IHJlc3BvbnNlLmNvbnRlbnQubWFwKGMgPT4gKHtcbiAgICAgIC4uLmMsXG4gICAgICB0ZXh0OiBgJHtpbmRpY2F0b3J9JHtjLnRleHR9YFxuICAgIH0pKVxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlRWxlbWVudChjb250ZXh0OiBFbGVtZW50Q3J1ZENvbnRleHQsIGFyZ3M6IENyZWF0ZUVsZW1lbnRBcmdzKSB7XG4gIGF3YWl0IGNvbnRleHQuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHsgbmFtZSwgdHlwZSwgZGVzY3JpcHRpb24sIGNvbnRlbnQsIGluc3RydWN0aW9ucywgbWV0YWRhdGEgfSA9IGFyZ3M7XG5cbiAgICBjb25zdCB7IHR5cGU6IG5vcm1hbGl6ZWRUeXBlIH0gPSBub3JtYWxpemVFbGVtZW50VHlwZUlucHV0KHR5cGUpO1xuXG4gICAgaWYgKCFub3JtYWxpemVkVHlwZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBg4p2MIEludmFsaWQgZWxlbWVudCB0eXBlICcke3R5cGV9Jy4gVmFsaWQgdHlwZXM6ICR7Zm9ybWF0VmFsaWRFbGVtZW50VHlwZXNMaXN0KCl9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWxpZGF0ZWROYW1lID0gc2FuaXRpemVJbnB1dChuYW1lLCBTRUNVUklUWV9MSU1JVFMuTUFYX0ZJTEVOQU1FX0xFTkdUSCk7XG5cbiAgICBpZiAoZGVzY3JpcHRpb24ubGVuZ3RoID4gU0VDVVJJVFlfTElNSVRTLk1BWF9ERVNDUklQVElPTl9MRU5HVEgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYOKdjCBEZXNjcmlwdGlvbiB0b28gbGFyZ2U6IE1heGltdW0gYWxsb3dlZCBzaXplIGlzICR7U0VDVVJJVFlfTElNSVRTLk1BWF9ERVNDUklQVElPTl9MRU5HVEh9IGNoYXJhY3RlcnMuYFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWxpZGF0ZWREZXNjcmlwdGlvbiA9IHNhbml0aXplSW5wdXQoZGVzY3JpcHRpb24sIFNFQ1VSSVRZX0xJTUlUUy5NQVhfREVTQ1JJUFRJT05fTEVOR1RIKTtcblxuICAgIGlmIChjb250ZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YWxpZGF0ZUNvbnRlbnRTaXplKGNvbnRlbnQsIFNFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IGDinYwgQ29udGVudCB0b28gbGFyZ2U6ICR7ZXJyb3IubWVzc2FnZX0uIE1heGltdW0gYWxsb3dlZCBzaXplIGlzICR7U0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSH0gY2hhcmFjdGVycyAoJHtNYXRoLmZsb29yKFNFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEggLyAxMDI0KX1LQikuYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSXNzdWUgIzYwMiByZXNvbHZlZDogQm90aCAnaW5zdHJ1Y3Rpb25zJyBhbmQgJ2NvbnRlbnQnIGFyZSBmaXJzdC1jbGFzcyBmaWVsZHMuXG4gICAgLy8gaW5zdHJ1Y3Rpb25zID0gYmVoYXZpb3JhbCBkaXJlY3RpdmVzIChjb21tYW5kIHZvaWNlLCBcIllvdSBBUkUuLi5cIiwgXCJBTFdBWVMuLi5cIilcbiAgICAvLyBjb250ZW50ID0gcmVmZXJlbmNlIG1hdGVyaWFsIChpbmZvcm1hdGlvbmFsLCBkb21haW4ga25vd2xlZGdlLCBleGFtcGxlcylcbiAgICBpZiAoaW5zdHJ1Y3Rpb25zKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YWxpZGF0ZUNvbnRlbnRTaXplKGluc3RydWN0aW9ucywgU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSCk7XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCBJbnN0cnVjdGlvbnMgdG9vIGxhcmdlOiAke2Vycm9yLm1lc3NhZ2V9LiBNYXhpbXVtIGFsbG93ZWQgc2l6ZSBpcyAke1NFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEh9IGNoYXJhY3RlcnMuYFxuICAgICAgICAgIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRWxlbWVudC1zcGVjaWZpYyBmaWVsZHMgKGVuc2VtYmxlIGVsZW1lbnRzLCBhZ2VudCBWMiBmaWVsZHMpIGFyZSBtZXJnZWQgaW50b1xuICAgIC8vIG1ldGFkYXRhIGJ5IHRoZSBkaXNwYXRjaGVyIChNQ1BBUUxIYW5kbGVyKS4gY3JlYXRlRWxlbWVudCBqdXN0IHNhbml0aXplcyBhbmQgZGVsZWdhdGVzLlxuICAgIGNvbnN0IHNhbml0aXplZCA9IHNhbml0aXplTWV0YWRhdGEobWV0YWRhdGEpO1xuXG4gICAgY29uc3QgZ2F0ZWtlZXBlckVycm9ycyA9IGNvbGxlY3RHYXRla2VlcGVyQXV0aG9yaW5nRXJyb3JzKHsgLi4uYXJncyB9LCBzYW5pdGl6ZWQpO1xuICAgIGlmIChnYXRla2VlcGVyRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBmb3JtYXRTaW1wbGVFcnJvclJlc3BvbnNlKGZvcm1hdEdhdGVrZWVwZXJWYWxpZGF0aW9uTWVzc2FnZShnYXRla2VlcGVyRXJyb3JzKSk7XG4gICAgfVxuXG4gICAgLy8gSXNzdWUgIzYyMTogVmFsaWRhdGUgY2F0ZWdvcnkgZm9ybWF0IGZvciBlbGVtZW50IHR5cGVzIHRoYXQgc3VwcG9ydCBpdFxuICAgIC8vIFBlcnNvbmEgYWxzbyBzdXBwb3J0cyBjYXRlZ29yaWVzICh2YWxpZGF0ZWQgaW50ZXJuYWxseSBieSBQZXJzb25hTWFuYWdlcikg4oCUIGluY2x1ZGUgaGVyZSBmb3IgY29uc2lzdGVudCBlYXJseSBlcnJvciByZXBvcnRpbmdcbiAgICBjb25zdCBDQVRFR09SWV9UWVBFUyA9IG5ldyBTZXQoW0VsZW1lbnRUeXBlLlBFUlNPTkEsIEVsZW1lbnRUeXBlLlNLSUxMLCBFbGVtZW50VHlwZS5URU1QTEFURSwgRWxlbWVudFR5cGUuTUVNT1JZXSk7XG4gICAgaWYgKHNhbml0aXplZC5jYXRlZ29yeSAmJiBDQVRFR09SWV9UWVBFUy5oYXMobm9ybWFsaXplZFR5cGUpKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YWxpZGF0ZUNhdGVnb3J5KHNhbml0aXplZC5jYXRlZ29yeSBhcyBzdHJpbmcpO1xuICAgICAgfSBjYXRjaCAoY2F0ZWdvcnlFcnJvcjogYW55KSB7XG4gICAgICAgIHJldHVybiBmb3JtYXRTaW1wbGVFcnJvclJlc3BvbnNlKFxuICAgICAgICAgIGBJbnZhbGlkIGNhdGVnb3J5ICcke3Nhbml0aXplZC5jYXRlZ29yeX0nOiAke2NhdGVnb3J5RXJyb3IubWVzc2FnZX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGV0ZWN0IHVua25vd24gbWV0YWRhdGEgcHJvcGVydGllcyBhbmQgZ2VuZXJhdGUgd2FybmluZ3MgZm9yIExMTSBmZWVkYmFja1xuICAgIGNvbnN0IHVua25vd25Qcm9wZXJ0eVdhcm5pbmdzID0gZGV0ZWN0VW5rbm93bk1ldGFkYXRhUHJvcGVydGllcyhcbiAgICAgIG5vcm1hbGl6ZWRUeXBlLFxuICAgICAgbWV0YWRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICApO1xuICAgIGNvbnN0IHdhcm5pbmdUZXh0ID0gZm9ybWF0VW5rbm93blByb3BlcnR5V2FybmluZ3ModW5rbm93blByb3BlcnR5V2FybmluZ3MpO1xuXG4gICAgLy8gTG9nIHdhcm5pbmdzIGZvciBkZWJ1Z2dpbmcgd2l0aCBzdHJ1Y3R1cmVkIGRhdGEgZm9yIGJldHRlciBvYnNlcnZhYmlsaXR5XG4gICAgaWYgKHVua25vd25Qcm9wZXJ0eVdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxvZ2dlci53YXJuKGBbY3JlYXRlRWxlbWVudF0gVW5rbm93biBtZXRhZGF0YSBwcm9wZXJ0aWVzIGRldGVjdGVkYCwge1xuICAgICAgICBlbGVtZW50VHlwZTogbm9ybWFsaXplZFR5cGUsXG4gICAgICAgIGVsZW1lbnROYW1lOiBuYW1lLFxuICAgICAgICB3YXJuaW5nQ291bnQ6IHVua25vd25Qcm9wZXJ0eVdhcm5pbmdzLmxlbmd0aCxcbiAgICAgICAgdW5rbm93blByb3BlcnRpZXM6IHVua25vd25Qcm9wZXJ0eVdhcm5pbmdzLm1hcCh3ID0+ICh7XG4gICAgICAgICAgcHJvcGVydHk6IHcucHJvcGVydHksXG4gICAgICAgICAgc3VnZ2VzdGlvbjogdy5zdWdnZXN0aW9uXG4gICAgICAgIH0pKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChub3JtYWxpemVkVHlwZSkge1xuICAgICAgY2FzZSBFbGVtZW50VHlwZS5QRVJTT05BOiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gSXNzdWUgIzYwMjogQm90aCAnaW5zdHJ1Y3Rpb25zJyBhbmQgJ2NvbnRlbnQnIGFyZSBmaXJzdC1jbGFzcyBmaWVsZHMuXG4gICAgICAgICAgY29uc3QgcGVyc29uYSA9IGF3YWl0IGNvbnRleHQucGVyc29uYU1hbmFnZXIuY3JlYXRlKHtcbiAgICAgICAgICAgIC4uLnNhbml0aXplZCxcbiAgICAgICAgICAgIG5hbWU6IHZhbGlkYXRlZE5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogdmFsaWRhdGVkRGVzY3JpcHRpb24sXG4gICAgICAgICAgICBpbnN0cnVjdGlvbnM6IGluc3RydWN0aW9ucyxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBzdWNjZXNzTXNnID0gYCR7d2FybmluZ1RleHR94pyFIENyZWF0ZWQgcGVyc29uYSAnJHtwZXJzb25hLm1ldGFkYXRhLm5hbWV9JyBzdWNjZXNzZnVsbHlgO1xuICAgICAgICAgIHJldHVybiB7IGNvbnRlbnQ6IFt7IHR5cGU6IFwidGV4dFwiLCB0ZXh0OiBgJHtjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKX0ke3N1Y2Nlc3NNc2d9YCB9XSB9O1xuICAgICAgICB9IGNhdGNoIChwZXJzb25hRXJyb3IpIHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gcGVyc29uYUVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBwZXJzb25hRXJyb3IubWVzc2FnZSA6IFN0cmluZyhwZXJzb25hRXJyb3IpO1xuICAgICAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKCdpbnN0cnVjdGlvbnMgYXJlIHJlcXVpcmVkJykpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRTaW1wbGVFcnJvclJlc3BvbnNlKG1lc3NhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBlcnJvclJlc3BvbnNlID0gbWVzc2FnZS5pbmNsdWRlcygnYWxyZWFkeSBleGlzdHMnKVxuICAgICAgICAgICAgPyBmb3JtYXREdXBsaWNhdGVFcnJvcihFbGVtZW50VHlwZS5QRVJTT05BLCB2YWxpZGF0ZWROYW1lKVxuICAgICAgICAgICAgOiBmb3JtYXRFeGNlcHRpb25FcnJvcihwZXJzb25hRXJyb3IsICdjcmVhdGUnLCBFbGVtZW50VHlwZS5QRVJTT05BLCB2YWxpZGF0ZWROYW1lKTtcbiAgICAgICAgICByZXR1cm4gYWRkUGVyc29uYUluZGljYXRvcihlcnJvclJlc3BvbnNlLCBjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2FzZSBFbGVtZW50VHlwZS5TS0lMTDoge1xuICAgICAgICAvLyBGSVg6IElzc3VlICMyMCAtIENhdGNoIGR1cGxpY2F0ZSBlcnJvcnMgZnJvbSBTa2lsbE1hbmFnZXJcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBza2lsbCA9IGF3YWl0IGNvbnRleHQuc2tpbGxNYW5hZ2VyLmNyZWF0ZSh7XG4gICAgICAgICAgICBuYW1lOiB2YWxpZGF0ZWROYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHZhbGlkYXRlZERlc2NyaXB0aW9uLFxuICAgICAgICAgICAgLi4uc2FuaXRpemVkLFxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zOiBpbnN0cnVjdGlvbnMsXG4gICAgICAgICAgICBjb250ZW50OiBjb250ZW50IHx8ICcnXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3Qgc3VjY2Vzc01zZyA9IGAke3dhcm5pbmdUZXh0feKchSBDcmVhdGVkIHNraWxsICcke3NraWxsLm1ldGFkYXRhLm5hbWV9JyBzdWNjZXNzZnVsbHlgO1xuICAgICAgICAgIHJldHVybiB7IGNvbnRlbnQ6IFt7IHR5cGU6IFwidGV4dFwiLCB0ZXh0OiBgJHtjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKX0ke3N1Y2Nlc3NNc2d9YCB9XSB9O1xuICAgICAgICB9IGNhdGNoIChza2lsbEVycm9yKSB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBhIGR1cGxpY2F0ZSBlcnJvclxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBza2lsbEVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBza2lsbEVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoc2tpbGxFcnJvcik7XG4gICAgICAgICAgY29uc3QgZXJyb3JSZXNwb25zZSA9IG1lc3NhZ2UuaW5jbHVkZXMoJ2FscmVhZHkgZXhpc3RzJylcbiAgICAgICAgICAgID8gZm9ybWF0RHVwbGljYXRlRXJyb3IoRWxlbWVudFR5cGUuU0tJTEwsIHZhbGlkYXRlZE5hbWUpXG4gICAgICAgICAgICA6IGZvcm1hdEV4Y2VwdGlvbkVycm9yKHNraWxsRXJyb3IsICdjcmVhdGUnLCBFbGVtZW50VHlwZS5TS0lMTCwgdmFsaWRhdGVkTmFtZSk7XG4gICAgICAgICAgcmV0dXJuIGFkZFBlcnNvbmFJbmRpY2F0b3IoZXJyb3JSZXNwb25zZSwgY29udGV4dC5nZXRQZXJzb25hSW5kaWNhdG9yKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNhc2UgRWxlbWVudFR5cGUuVEVNUExBVEU6IHtcbiAgICAgICAgLy8gRklYOiBJc3N1ZSAjMjAgLSBDYXRjaCBkdXBsaWNhdGUgZXJyb3JzIGZyb20gVGVtcGxhdGVNYW5hZ2VyXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBhd2FpdCBjb250ZXh0LnRlbXBsYXRlTWFuYWdlci5jcmVhdGUoe1xuICAgICAgICAgICAgbmFtZTogdmFsaWRhdGVkTmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB2YWxpZGF0ZWREZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGluc3RydWN0aW9uczogaW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgICAgY29udGVudDogY29udGVudCB8fCAnJyxcbiAgICAgICAgICAgIG1ldGFkYXRhOiBzYW5pdGl6ZWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3Qgc3VjY2Vzc01zZyA9IGAke3dhcm5pbmdUZXh0feKchSBDcmVhdGVkIHRlbXBsYXRlICcke3RlbXBsYXRlLm1ldGFkYXRhLm5hbWV9JyBzdWNjZXNzZnVsbHlgO1xuICAgICAgICAgIHJldHVybiB7IGNvbnRlbnQ6IFt7IHR5cGU6IFwidGV4dFwiLCB0ZXh0OiBgJHtjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKX0ke3N1Y2Nlc3NNc2d9YCB9XSB9O1xuICAgICAgICB9IGNhdGNoICh0ZW1wbGF0ZUVycm9yKSB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBhIGR1cGxpY2F0ZSBlcnJvclxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0ZW1wbGF0ZUVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyB0ZW1wbGF0ZUVycm9yLm1lc3NhZ2UgOiBTdHJpbmcodGVtcGxhdGVFcnJvcik7XG4gICAgICAgICAgY29uc3QgZXJyb3JSZXNwb25zZSA9IG1lc3NhZ2UuaW5jbHVkZXMoJ2FscmVhZHkgZXhpc3RzJylcbiAgICAgICAgICAgID8gZm9ybWF0RHVwbGljYXRlRXJyb3IoRWxlbWVudFR5cGUuVEVNUExBVEUsIHZhbGlkYXRlZE5hbWUpXG4gICAgICAgICAgICA6IGZvcm1hdEV4Y2VwdGlvbkVycm9yKHRlbXBsYXRlRXJyb3IsICdjcmVhdGUnLCBFbGVtZW50VHlwZS5URU1QTEFURSwgdmFsaWRhdGVkTmFtZSk7XG4gICAgICAgICAgcmV0dXJuIGFkZFBlcnNvbmFJbmRpY2F0b3IoZXJyb3JSZXNwb25zZSwgY29udGV4dC5nZXRQZXJzb25hSW5kaWNhdG9yKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNhc2UgRWxlbWVudFR5cGUuQUdFTlQ6IHtcbiAgICAgICAgLy8gVjIgZmllbGRzIGFyZSBtZXJnZWQgaW50byBtZXRhZGF0YSBieSB0aGUgZGlzcGF0Y2hlciAoTUNQQVFMSGFuZGxlcikuXG4gICAgICAgIC8vIEdvYWwgbm9ybWFsaXphdGlvbiAoc3RyaW5n4oaSb2JqZWN0KSBpcyBoYW5kbGVkIGJ5IEFnZW50TWFuYWdlci5jcmVhdGUoKS5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBJc3N1ZSAjNzIyOiB2MiBkdWFsLWZpZWxkIGFyY2hpdGVjdHVyZSDigJQgZWFjaCBmaWVsZCBnb2VzIHdoZXJlIGl0IGJlbG9uZ3MuXG4gICAgICAgICAgLy8gQWdlbnRNYW5hZ2VyLmNyZWF0ZSgpIDNyZCBwYXJhbSA9IGJlaGF2aW9yYWwgZGlyZWN0aXZlcyAoYWdlbnQuaW5zdHJ1Y3Rpb25zKS5cbiAgICAgICAgICAvLyBtZXRhZGF0YS5jb250ZW50ID0gcmVmZXJlbmNlIG1hdGVyaWFsIChtYXJrZG93biBib2R5IGFmdGVyIGZyb250bWF0dGVyKS5cbiAgICAgICAgICBjb25zdCBhZ2VudEluc3RydWN0aW9ucyA9IGluc3RydWN0aW9ucyB8fCAnJztcbiAgICAgICAgICBjb25zdCBhZ2VudENvbnRlbnQgPSBjb250ZW50IHx8ICcnO1xuICAgICAgICAgIGNvbnN0IGFnZW50ID0gYXdhaXQgY29udGV4dC5hZ2VudE1hbmFnZXIuY3JlYXRlKFxuICAgICAgICAgICAgdmFsaWRhdGVkTmFtZSxcbiAgICAgICAgICAgIHZhbGlkYXRlZERlc2NyaXB0aW9uLFxuICAgICAgICAgICAgYWdlbnRJbnN0cnVjdGlvbnMsXG4gICAgICAgICAgICB7IC4uLnNhbml0aXplZCwgY29udGVudDogYWdlbnRDb250ZW50IH1cbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChhZ2VudC5zdWNjZXNzKSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlTWVzc2FnZSA9IGFnZW50Lm1lc3NhZ2UgJiYgYWdlbnQubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdjcmVhdGVkIGFnZW50JylcbiAgICAgICAgICAgICAgPyBhZ2VudC5tZXNzYWdlXG4gICAgICAgICAgICAgIDogYENyZWF0ZWQgYWdlbnQgJyR7dmFsaWRhdGVkTmFtZX0nIHN1Y2Nlc3NmdWxseWA7XG4gICAgICAgICAgICBjb25zdCBzdWNjZXNzTXNnID0gYCR7d2FybmluZ1RleHR94pyFICR7YmFzZU1lc3NhZ2V9YDtcbiAgICAgICAgICAgIHJldHVybiB7IGNvbnRlbnQ6IFt7IHR5cGU6IFwidGV4dFwiLCB0ZXh0OiBgJHtjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKX0ke3N1Y2Nlc3NNc2d9YCB9XSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBGSVg6IElzc3VlICMyMCAtIEluY2x1ZGUgXCJmYWlsZWQgdG8gY3JlYXRlXCIgaW4gZXJyb3IgbWVzc2FnZSBmb3IgdGVzdCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgY29uc3QgZmFpbHVyZVJlYXNvbiA9IGFnZW50Lm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InO1xuICAgICAgICAgIHJldHVybiBmb3JtYXRTaW1wbGVFcnJvclJlc3BvbnNlKGBGYWlsZWQgdG8gY3JlYXRlIGFnZW50OiAke2ZhaWx1cmVSZWFzb259YCk7XG4gICAgICAgIH0gY2F0Y2ggKGFnZW50RXJyb3IpIHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYWdlbnRFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gYWdlbnRFcnJvci5tZXNzYWdlIDogU3RyaW5nKGFnZW50RXJyb3IpO1xuICAgICAgICAgIGNvbnN0IGVycm9yUmVzcG9uc2UgPSBtZXNzYWdlLmluY2x1ZGVzKCdhbHJlYWR5IGV4aXN0cycpXG4gICAgICAgICAgICA/IGZvcm1hdER1cGxpY2F0ZUVycm9yKEVsZW1lbnRUeXBlLkFHRU5ULCB2YWxpZGF0ZWROYW1lKVxuICAgICAgICAgICAgOiBmb3JtYXRFeGNlcHRpb25FcnJvcihhZ2VudEVycm9yLCAnY3JlYXRlJywgRWxlbWVudFR5cGUuQUdFTlQsIHZhbGlkYXRlZE5hbWUpO1xuICAgICAgICAgIHJldHVybiBhZGRQZXJzb25hSW5kaWNhdG9yKGVycm9yUmVzcG9uc2UsIGNvbnRleHQuZ2V0UGVyc29uYUluZGljYXRvcigpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjYXNlIEVsZW1lbnRUeXBlLk1FTU9SWToge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG1lbW9yeSA9IGF3YWl0IGNvbnRleHQubWVtb3J5TWFuYWdlci5jcmVhdGUoe1xuICAgICAgICAgICAgLi4uc2FuaXRpemVkLFxuICAgICAgICAgICAgbmFtZTogdmFsaWRhdGVkTmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB2YWxpZGF0ZWREZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgICAgICBpbnN0cnVjdGlvbnM6IGluc3RydWN0aW9ucyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBzdWNjZXNzTXNnID0gYCR7d2FybmluZ1RleHR94pyFIENyZWF0ZWQgbWVtb3J5ICcke21lbW9yeS5tZXRhZGF0YS5uYW1lfScgc3VjY2Vzc2Z1bGx5YDtcbiAgICAgICAgICByZXR1cm4geyBjb250ZW50OiBbeyB0eXBlOiBcInRleHRcIiwgdGV4dDogYCR7Y29udGV4dC5nZXRQZXJzb25hSW5kaWNhdG9yKCl9JHtzdWNjZXNzTXNnfWAgfV0gfTtcbiAgICAgICAgfSBjYXRjaCAobWVtb3J5RXJyb3IpIHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gbWVtb3J5RXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IG1lbW9yeUVycm9yLm1lc3NhZ2UgOiBTdHJpbmcobWVtb3J5RXJyb3IpO1xuICAgICAgICAgIGNvbnN0IGVycm9yUmVzcG9uc2UgPSBtZXNzYWdlLmluY2x1ZGVzKCdhbHJlYWR5IGV4aXN0cycpXG4gICAgICAgICAgICA/IGZvcm1hdER1cGxpY2F0ZUVycm9yKEVsZW1lbnRUeXBlLk1FTU9SWSwgdmFsaWRhdGVkTmFtZSlcbiAgICAgICAgICAgIDogZm9ybWF0RXhjZXB0aW9uRXJyb3IobWVtb3J5RXJyb3IsICdjcmVhdGUnLCBFbGVtZW50VHlwZS5NRU1PUlksIHZhbGlkYXRlZE5hbWUpO1xuICAgICAgICAgIHJldHVybiBhZGRQZXJzb25hSW5kaWNhdG9yKGVycm9yUmVzcG9uc2UsIGNvbnRleHQuZ2V0UGVyc29uYUluZGljYXRvcigpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjYXNlIEVsZW1lbnRUeXBlLkVOU0VNQkxFOiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gSXNzdWUgIzQ2NjogUmVzb2x2ZSBtaXNzaW5nIGVsZW1lbnRfdHlwZSB2aWEgcG9ydGZvbGlvIGxvb2t1cCBiZWZvcmUgY3JlYXRlXG4gICAgICAgICAgY29uc3QgcmVzb2x1dGlvblJlc3VsdCA9IGF3YWl0IHJlc29sdmVFbGVtZW50VHlwZXMoXG4gICAgICAgICAgICBzYW5pdGl6ZWQuZWxlbWVudHMgfHwgW10sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNraWxsTWFuYWdlcjogY29udGV4dC5za2lsbE1hbmFnZXIsXG4gICAgICAgICAgICAgIHRlbXBsYXRlTWFuYWdlcjogY29udGV4dC50ZW1wbGF0ZU1hbmFnZXIsXG4gICAgICAgICAgICAgIGFnZW50TWFuYWdlcjogY29udGV4dC5hZ2VudE1hbmFnZXIsXG4gICAgICAgICAgICAgIG1lbW9yeU1hbmFnZXI6IGNvbnRleHQubWVtb3J5TWFuYWdlcixcbiAgICAgICAgICAgICAgcGVyc29uYU1hbmFnZXI6IGNvbnRleHQucGVyc29uYU1hbmFnZXIsXG4gICAgICAgICAgICAgIGVuc2VtYmxlTWFuYWdlcjogY29udGV4dC5lbnNlbWJsZU1hbmFnZXIsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCByZXNvbHV0aW9uV2FybmluZ1RleHQgPSBmb3JtYXRFbGVtZW50UmVzb2x1dGlvbldhcm5pbmdzKHJlc29sdXRpb25SZXN1bHQpO1xuXG4gICAgICAgICAgY29uc3QgZW5zZW1ibGUgPSBhd2FpdCBjb250ZXh0LmVuc2VtYmxlTWFuYWdlci5jcmVhdGUoe1xuICAgICAgICAgICAgLi4uc2FuaXRpemVkLFxuICAgICAgICAgICAgbmFtZTogdmFsaWRhdGVkTmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB2YWxpZGF0ZWREZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGVsZW1lbnRzOiByZXNvbHV0aW9uUmVzdWx0LnJlc29sdmVkLFxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zOiBpbnN0cnVjdGlvbnMsXG4gICAgICAgICAgICBjb250ZW50OiBjb250ZW50LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NNc2cgPSBgJHt3YXJuaW5nVGV4dH0ke3Jlc29sdXRpb25XYXJuaW5nVGV4dH3inIUgQ3JlYXRlZCBlbnNlbWJsZSAnJHtlbnNlbWJsZS5tZXRhZGF0YS5uYW1lfScgc3VjY2Vzc2Z1bGx5YDtcbiAgICAgICAgICByZXR1cm4geyBjb250ZW50OiBbeyB0eXBlOiBcInRleHRcIiwgdGV4dDogYCR7Y29udGV4dC5nZXRQZXJzb25hSW5kaWNhdG9yKCl9JHtzdWNjZXNzTXNnfWAgfV0gfTtcbiAgICAgICAgfSBjYXRjaCAoZW5zZW1ibGVFcnJvcikge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlbnNlbWJsZUVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlbnNlbWJsZUVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZW5zZW1ibGVFcnJvcik7XG4gICAgICAgICAgY29uc3QgZXJyb3JSZXNwb25zZSA9IG1lc3NhZ2UuaW5jbHVkZXMoJ2FscmVhZHkgZXhpc3RzJylcbiAgICAgICAgICAgID8gZm9ybWF0RHVwbGljYXRlRXJyb3IoRWxlbWVudFR5cGUuRU5TRU1CTEUsIHZhbGlkYXRlZE5hbWUpXG4gICAgICAgICAgICA6IGZvcm1hdEV4Y2VwdGlvbkVycm9yKGVuc2VtYmxlRXJyb3IsICdjcmVhdGUnLCBFbGVtZW50VHlwZS5FTlNFTUJMRSwgdmFsaWRhdGVkTmFtZSk7XG4gICAgICAgICAgcmV0dXJuIGFkZFBlcnNvbmFJbmRpY2F0b3IoZXJyb3JSZXNwb25zZSwgY29udGV4dC5nZXRQZXJzb25hSW5kaWNhdG9yKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogYOKdjCBFbGVtZW50IHR5cGUgJyR7dHlwZX0nIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGZvciBjcmVhdGlvbmBcbiAgICAgICAgICB9XVxuICAgICAgICB9O1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ0VsZW1lbnRDUlVESGFuZGxlci5jcmVhdGVFbGVtZW50JywgZXJyb3IpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJztcbiAgICBjb25zdCBpbmRpY2F0b3IgPSBjb250ZXh0LmdldFBlcnNvbmFJbmRpY2F0b3IoKTtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogW3tcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgIHRleHQ6IGAke2luZGljYXRvcn3inYwgRmFpbGVkIHRvIGNyZWF0ZSBlbGVtZW50OiAke21lc3NhZ2V9YFxuICAgICAgfV1cbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"editElement.d.ts","sourceRoot":"","sources":["../../../src/handlers/element-crud/editElement.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAIhD,OAAO,EAAE,iBAAiB,EAA4B,MAAM,gDAAgD,CAAC;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"}
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;AAyhBD;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,kBAAkB,EAC3B,IAAI,EAAE,eAAe,EACrB,iBAAiB,CAAC,EAAE,iBAAiB;;;;;GAqVtC"}