@dollhousemcp/mcp-server 2.0.18 → 2.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/generated/version.d.ts +2 -2
  3. package/dist/generated/version.js +3 -3
  4. package/dist/handlers/ElementCRUDHandler.d.ts +30 -0
  5. package/dist/handlers/ElementCRUDHandler.d.ts.map +1 -1
  6. package/dist/handlers/ElementCRUDHandler.js +141 -2
  7. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +3 -0
  8. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
  9. package/dist/handlers/mcp-aql/MCPAQLHandler.js +98 -1
  10. package/dist/handlers/mcp-aql/OperationRouter.d.ts.map +1 -1
  11. package/dist/handlers/mcp-aql/OperationRouter.js +6 -1
  12. package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
  13. package/dist/handlers/mcp-aql/OperationSchema.js +17 -1
  14. package/dist/handlers/mcp-aql/policies/AgentToolPolicyTranslator.d.ts.map +1 -1
  15. package/dist/handlers/mcp-aql/policies/AgentToolPolicyTranslator.js +2 -1
  16. package/dist/handlers/mcp-aql/policies/ElementPolicies.d.ts.map +1 -1
  17. package/dist/handlers/mcp-aql/policies/ElementPolicies.js +2 -1
  18. package/dist/handlers/mcp-aql/policies/OperationPolicies.d.ts.map +1 -1
  19. package/dist/handlers/mcp-aql/policies/OperationPolicies.js +6 -1
  20. package/dist/handlers/mcp-aql/policies/ToolClassification.d.ts.map +1 -1
  21. package/dist/handlers/mcp-aql/policies/ToolClassification.js +2 -1
  22. package/dist/server/tools/MCPAQLTools.js +2 -1
  23. package/dist/web/console/IngestRoutes.d.ts +6 -0
  24. package/dist/web/console/IngestRoutes.d.ts.map +1 -1
  25. package/dist/web/console/IngestRoutes.js +38 -9
  26. package/dist/web/console/LeaderElection.d.ts +39 -0
  27. package/dist/web/console/LeaderElection.d.ts.map +1 -1
  28. package/dist/web/console/LeaderElection.js +147 -29
  29. package/dist/web/console/LeaderForwardingSink.d.ts.map +1 -1
  30. package/dist/web/console/LeaderForwardingSink.js +5 -1
  31. package/dist/web/console/PromotionManager.d.ts.map +1 -1
  32. package/dist/web/console/PromotionManager.js +3 -11
  33. package/dist/web/console/StaleProcessRecovery.d.ts +11 -0
  34. package/dist/web/console/StaleProcessRecovery.d.ts.map +1 -1
  35. package/dist/web/console/StaleProcessRecovery.js +229 -63
  36. package/dist/web/console/UnifiedConsole.d.ts +22 -1
  37. package/dist/web/console/UnifiedConsole.d.ts.map +1 -1
  38. package/dist/web/console/UnifiedConsole.js +172 -11
  39. package/dist/web/public/app.js +62 -1
  40. package/dist/web/public/index.html +19 -17
  41. package/dist/web/public/sessions.js +111 -0
  42. package/dist/web/server.d.ts.map +1 -1
  43. package/dist/web/server.js +12 -10
  44. package/package.json +1 -1
  45. package/server.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"AgentToolPolicyTranslator.d.ts","sourceRoot":"","sources":["../../../../src/handlers/mcp-aql/policies/AgentToolPolicyTranslator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AA+CzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,eAAe,GAC1B,uBAAuB,GAAG,SAAS,CA4CrC"}
1
+ {"version":3,"file":"AgentToolPolicyTranslator.d.ts","sourceRoot":"","sources":["../../../../src/handlers/mcp-aql/policies/AgentToolPolicyTranslator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAgDzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,eAAe,GAC1B,uBAAuB,GAAG,SAAS,CA4CrC"}
@@ -37,6 +37,7 @@ const EXEMPT_OPERATIONS = new Set([
37
37
  // Safety system — agent must interact with Gatekeeper/verification
38
38
  'confirm_operation',
39
39
  'verify_challenge',
40
+ 'release_deadlock',
40
41
  'permission_prompt', // Issue #625: CLI-level permission delegation
41
42
  'approve_cli_permission', // Issue #625 Phase 3: CLI approval workflow
42
43
  'get_pending_cli_approvals', // Issue #625 Phase 3: CLI approval visibility
@@ -128,4 +129,4 @@ export function translateToolConfigToPolicy(toolConfig) {
128
129
  }
129
130
  return { deny: Array.from(denySet).sort((a, b) => a.localeCompare(b)) };
130
131
  }
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWdlbnRUb29sUG9saWN5VHJhbnNsYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9oYW5kbGVycy9tY3AtYXFsL3BvbGljaWVzL0FnZW50VG9vbFBvbGljeVRyYW5zbGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFJSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUdqRTs7Ozs7Ozs7R0FRRztBQUNILE1BQU0saUJBQWlCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDaEMsNERBQTREO0lBQzVELGVBQWU7SUFDZixxQkFBcUI7SUFDckIsdUJBQXVCO0lBQ3ZCLG9CQUFvQjtJQUNwQixvQkFBb0I7SUFDcEIsaUJBQWlCLEVBQUUsYUFBYTtJQUNoQyxtQkFBbUIsRUFBRSxZQUFZO0lBQ2pDLGlCQUFpQixFQUFFLFlBQVk7SUFDL0IscUJBQXFCLEVBQUUsWUFBWTtJQUNuQyxtRUFBbUU7SUFDbkUsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixtQkFBbUIsRUFBRSw4Q0FBOEM7SUFDbkUsd0JBQXdCLEVBQUUsNENBQTRDO0lBQ3RFLDJCQUEyQixFQUFFLDhDQUE4QztDQUM1RSxDQUFDLENBQUM7QUFFSDs7Ozs7O0dBTUc7QUFDSCxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUF1QjtJQUN0RCxDQUFDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQztJQUM1QixDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUM7SUFDeEIsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUM7SUFDNUIsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUM7SUFDNUIsQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLENBQUM7Q0FDL0IsQ0FBQyxDQUFDO0FBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0NHO0FBQ0gsTUFBTSxVQUFVLDJCQUEyQixDQUN6QyxVQUEyQjtJQUUzQixNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBRWxDLElBQUksVUFBVSxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN4RCwrREFBK0Q7UUFDL0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUNyQyxLQUFLLE1BQU0sUUFBUSxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMxQyxNQUFNLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDakQsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDYixLQUFLLE1BQU0sRUFBRSxJQUFJLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7b0JBQ3BELFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3JCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELDJFQUEyRTtRQUMzRSxLQUFLLE1BQU0sUUFBUSxJQUFJLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDbEQsS0FBSyxNQUFNLEVBQUUsSUFBSSx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUNwRCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUN0RCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNsQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RELDJDQUEyQztRQUMzQyxLQUFLLE1BQU0sUUFBUSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN6QyxNQUFNLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDakQsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDYixLQUFLLE1BQU0sRUFBRSxJQUFJLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7b0JBQ3BELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQzt3QkFDL0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDbEIsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDMUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQWdlbnQgVG9vbCBQb2xpY3kgVHJhbnNsYXRvciAoSXNzdWUgIzQ0OSlcbiAqXG4gKiBUcmFuc2xhdGVzIGFuIGFnZW50J3MgYHRvb2xzYCBjb25maWd1cmF0aW9uIChhbGxvd2VkL2RlbmllZCBlbmRwb2ludCBuYW1lcylcbiAqIGludG8gYW4gYEVsZW1lbnRHYXRla2VlcGVyUG9saWN5YCB0aGF0IHRoZSBHYXRla2VlcGVyIGNhbiBlbmZvcmNlLlxuICpcbiAqIFRoaXMgYnJpZGdlcyB0aGUgaW5mb3JtYXRpb25hbCBgQWdlbnRUb29sQ29uZmlnYCB3aXRoIHRoZSBlbmZvcmNlYWJsZVxuICogR2F0ZWtlZXBlciBwb2xpY3kgc3lzdGVtLCBnaXZpbmcgYWdlbnQgdG9vbCByZXN0cmljdGlvbnMgcHJvZ3JhbW1hdGljIHRlZXRoLlxuICpcbiAqICoqUG9saWN5IHByZWNlZGVuY2U6KiogVGhpcyB0cmFuc2xhdG9yIGlzIG9ubHkgdXNlZCB3aGVuIGFuIGFnZW50IGhhcyBub1xuICogZXhwbGljaXQgYGdhdGVrZWVwZXJgIHBvbGljeS4gSWYgYm90aCBgZ2F0ZWtlZXBlcmAgYW5kIGB0b29sc2AgYXJlIHByZXNlbnQsXG4gKiB0aGUgZXhwbGljaXQgYGdhdGVrZWVwZXJgIHBvbGljeSB0YWtlcyBwcmVjZWRlbmNlIChzZWUgTUNQQVFMSGFuZGxlcikuXG4gKlxuICogQG1vZHVsZSBBZ2VudFRvb2xQb2xpY3lUcmFuc2xhdG9yXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBFbGVtZW50R2F0ZWtlZXBlclBvbGljeSB9IGZyb20gJy4uL0dhdGVrZWVwZXJUeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEFnZW50VG9vbENvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2VsZW1lbnRzL2FnZW50cy90eXBlcy5qcyc7XG5pbXBvcnQgeyBnZXRPcGVyYXRpb25zRm9yRW5kcG9pbnQgfSBmcm9tICcuLi9PcGVyYXRpb25Sb3V0ZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBDUlVERW5kcG9pbnQgfSBmcm9tICcuLi9PcGVyYXRpb25Sb3V0ZXIuanMnO1xuXG4vKipcbiAqIE9wZXJhdGlvbnMgdGhhdCBhcmUgZXhlbXB0IGZyb20gdG9vbHMtYmFzZWQgZGVueSBzeW50aGVzaXMuXG4gKiBUaGVzZSBtdXN0IGFsd2F5cyBiZSBhdmFpbGFibGUgZm9yIGFnZW50IGxpZmVjeWNsZSBhbmQgc2FmZXR5IGZsb3dzLlxuICpcbiAqIC0gKipFeGVjdXRpb24gbGlmZWN5Y2xlKio6IEFuIGFnZW50IG11c3QgYmUgYWJsZSB0byBtYW5hZ2UgaXRzIG93biBleGVjdXRpb25cbiAqICAgKGV4ZWN1dGUsIGdldCBzdGF0ZSwgdXBkYXRlIHN0YXRlLCBjb21wbGV0ZSwgY29udGludWUpLlxuICogLSAqKlNhZmV0eSBzeXN0ZW0qKjogQW4gYWdlbnQgbXVzdCBpbnRlcmFjdCB3aXRoIEdhdGVrZWVwZXIgY29uZmlybWF0aW9uXG4gKiAgIGFuZCBkYW5nZXIgem9uZSB2ZXJpZmljYXRpb24gZmxvd3MuXG4gKi9cbmNvbnN0IEVYRU1QVF9PUEVSQVRJT05TID0gbmV3IFNldChbXG4gIC8vIEV4ZWN1dGlvbiBsaWZlY3ljbGUg4oCUIGFnZW50IG11c3QgbWFuYWdlIGl0cyBvd24gZXhlY3V0aW9uXG4gICdleGVjdXRlX2FnZW50JyxcbiAgJ2dldF9leGVjdXRpb25fc3RhdGUnLFxuICAncmVjb3JkX2V4ZWN1dGlvbl9zdGVwJyxcbiAgJ2NvbXBsZXRlX2V4ZWN1dGlvbicsXG4gICdjb250aW51ZV9leGVjdXRpb24nLFxuICAnYWJvcnRfZXhlY3V0aW9uJywgLy8gSXNzdWUgIzI0OVxuICAnZ2V0X2dhdGhlcmVkX2RhdGEnLCAvLyBJc3N1ZSAjNjhcbiAgJ3ByZXBhcmVfaGFuZG9mZicsIC8vIElzc3VlICM2OVxuICAncmVzdW1lX2Zyb21faGFuZG9mZicsIC8vIElzc3VlICM2OVxuICAvLyBTYWZldHkgc3lzdGVtIOKAlCBhZ2VudCBtdXN0IGludGVyYWN0IHdpdGggR2F0ZWtlZXBlci92ZXJpZmljYXRpb25cbiAgJ2NvbmZpcm1fb3BlcmF0aW9uJyxcbiAgJ3ZlcmlmeV9jaGFsbGVuZ2UnLFxuICAncGVybWlzc2lvbl9wcm9tcHQnLCAvLyBJc3N1ZSAjNjI1OiBDTEktbGV2ZWwgcGVybWlzc2lvbiBkZWxlZ2F0aW9uXG4gICdhcHByb3ZlX2NsaV9wZXJtaXNzaW9uJywgLy8gSXNzdWUgIzYyNSBQaGFzZSAzOiBDTEkgYXBwcm92YWwgd29ya2Zsb3dcbiAgJ2dldF9wZW5kaW5nX2NsaV9hcHByb3ZhbHMnLCAvLyBJc3N1ZSAjNjI1IFBoYXNlIDM6IENMSSBhcHByb3ZhbCB2aXNpYmlsaXR5XG5dKTtcblxuLyoqXG4gKiBNYXBzIE1DUC1BUUwgdG9vbCBuYW1lcyAoYXMgdXNlZCBpbiBgQWdlbnRUb29sQ29uZmlnLmFsbG93ZWQvZGVuaWVkYClcbiAqIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgQ1JVRCBlbmRwb2ludCB0eXBlcyBpbiB0aGUgT3BlcmF0aW9uUm91dGVyLlxuICpcbiAqIFRvb2wgbmFtZXMgZm9sbG93IHRoZSBmb3JtYXQgYG1jcF9hcWxfe2VuZHBvaW50fWAgYW5kIG1hcCB0byBvbmUgb2ZcbiAqIHRoZSBmaXZlIENSVUQgZW5kcG9pbnRzOiBDUkVBVEUsIFJFQUQsIFVQREFURSwgREVMRVRFLCBFWEVDVVRFLlxuICovXG5jb25zdCBFTkRQT0lOVF9UT09MX01BUCA9IG5ldyBNYXA8c3RyaW5nLCBDUlVERW5kcG9pbnQ+KFtcbiAgWydtY3BfYXFsX2NyZWF0ZScsICdDUkVBVEUnXSxcbiAgWydtY3BfYXFsX3JlYWQnLCAnUkVBRCddLFxuICBbJ21jcF9hcWxfdXBkYXRlJywgJ1VQREFURSddLFxuICBbJ21jcF9hcWxfZGVsZXRlJywgJ0RFTEVURSddLFxuICBbJ21jcF9hcWxfZXhlY3V0ZScsICdFWEVDVVRFJ10sXG5dKTtcblxuLyoqXG4gKiBUcmFuc2xhdGVzIGFuIHtAbGluayBBZ2VudFRvb2xDb25maWd9IGludG8gYW4ge0BsaW5rIEVsZW1lbnRHYXRla2VlcGVyUG9saWN5fS5cbiAqXG4gKiBUaGUgdHJhbnNsYXRpb24gd29ya3MgYXMgZm9sbG93czpcbiAqIC0gSWYgYHRvb2xzLmFsbG93ZWRgIGlzIHNwZWNpZmllZCwgYWxsIG9wZXJhdGlvbnMgKipub3QqKiBpbiB0aGUgYWxsb3dlZFxuICogICBlbmRwb2ludHMgYXJlIGFkZGVkIHRvIHRoZSBkZW55IGxpc3QgKGFsbG93bGlzdCDihpIgZGVueWxpc3QgaW52ZXJzaW9uKS5cbiAqIC0gSWYgYHRvb2xzLmRlbmllZGAgaXMgc3BlY2lmaWVkLCBhbGwgb3BlcmF0aW9ucyBmcm9tIHRoZSBkZW5pZWQgZW5kcG9pbnRzXG4gKiAgIGFyZSBhZGRlZCB0byB0aGUgZGVueSBsaXN0IGRpcmVjdGx5LlxuICogLSBCb3RoIGBhbGxvd2VkYCBhbmQgYGRlbmllZGAgY2FuIGJlIHNwZWNpZmllZCBzaW11bHRhbmVvdXNseTsgdGhlaXIgZWZmZWN0c1xuICogICBhcmUgY3VtdWxhdGl2ZSAodW5pb24gb2YgZGVuaWVkIG9wZXJhdGlvbnMpLlxuICpcbiAqIExpZmVjeWNsZSBhbmQgc2FmZXR5IG9wZXJhdGlvbnMgKHtAbGluayBFWEVNUFRfT1BFUkFUSU9OU30pIGFyZSAqKm5ldmVyKipcbiAqIGluY2x1ZGVkIGluIHRoZSBzeW50aGVzaXplZCBkZW55IGxpc3QsIHJlZ2FyZGxlc3Mgb2YgdGhlIHRvb2wgY29uZmlnLlxuICpcbiAqIEBwYXJhbSB0b29sQ29uZmlnIC0gVGhlIGFnZW50J3MgdG9vbCBjb25maWd1cmF0aW9uIGNvbnRhaW5pbmcgYWxsb3dlZC9kZW5pZWQgZW5kcG9pbnQgbmFtZXNcbiAqIEByZXR1cm5zIEEgc3ludGhlc2l6ZWQge0BsaW5rIEVsZW1lbnRHYXRla2VlcGVyUG9saWN5fSB3aXRoIGEgZGVueSBsaXN0LFxuICogICAgICAgICAgb3IgYHVuZGVmaW5lZGAgaWYgdGhlIGNvbmZpZyBwcm9kdWNlcyBubyByZXN0cmljdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gQWdlbnQgdGhhdCBjYW4gb25seSByZWFkIOKAlCBhbGwgb3RoZXIgZW5kcG9pbnRzIGRlbmllZFxuICogdHJhbnNsYXRlVG9vbENvbmZpZ1RvUG9saWN5KHsgYWxsb3dlZDogWydtY3BfYXFsX3JlYWQnXSB9KTtcbiAqIC8vIOKGkiB7IGRlbnk6IFsnYWRkRW50cnknLCAnY2xlYXInLCAnY3JlYXRlX2VsZW1lbnQnLCAnZGVsZXRlX2VsZW1lbnQnLCAnZWRpdF9lbGVtZW50JywgLi4uXSB9XG4gKlxuICogLy8gQWdlbnQgdGhhdCBjYW5ub3QgZGVsZXRlIOKAlCBvbmx5IGRlbGV0ZSBvcGVyYXRpb25zIGRlbmllZFxuICogdHJhbnNsYXRlVG9vbENvbmZpZ1RvUG9saWN5KHsgYWxsb3dlZDogWydtY3BfYXFsX2NyZWF0ZScsICdtY3BfYXFsX3JlYWQnLCAnbWNwX2FxbF91cGRhdGUnLCAnbWNwX2FxbF9leGVjdXRlJ10gfSk7XG4gKiAvLyDihpIgeyBkZW55OiBbJ2NsZWFyJywgJ2RlbGV0ZV9lbGVtZW50J10gfVxuICpcbiAqIC8vIE5vIHJlc3RyaWN0aW9ucyDigJQgcmV0dXJucyB1bmRlZmluZWRcbiAqIHRyYW5zbGF0ZVRvb2xDb25maWdUb1BvbGljeSh7IGFsbG93ZWQ6IFsnbWNwX2FxbF9jcmVhdGUnLCAnbWNwX2FxbF9yZWFkJywgJ21jcF9hcWxfdXBkYXRlJywgJ21jcF9hcWxfZGVsZXRlJywgJ21jcF9hcWxfZXhlY3V0ZSddIH0pO1xuICogLy8g4oaSIHVuZGVmaW5lZFxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGVUb29sQ29uZmlnVG9Qb2xpY3koXG4gIHRvb2xDb25maWc6IEFnZW50VG9vbENvbmZpZ1xuKTogRWxlbWVudEdhdGVrZWVwZXJQb2xpY3kgfCB1bmRlZmluZWQge1xuICBjb25zdCBkZW55U2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgaWYgKHRvb2xDb25maWcuYWxsb3dlZCAmJiB0b29sQ29uZmlnLmFsbG93ZWQubGVuZ3RoID4gMCkge1xuICAgIC8vIENvbXB1dGUgdGhlIHNldCBvZiBhbGxvd2VkIG9wZXJhdGlvbnMgZnJvbSBhbGxvd2VkIGVuZHBvaW50c1xuICAgIGNvbnN0IGFsbG93ZWRPcHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IHRvb2xOYW1lIG9mIHRvb2xDb25maWcuYWxsb3dlZCkge1xuICAgICAgY29uc3QgZW5kcG9pbnQgPSBFTkRQT0lOVF9UT09MX01BUC5nZXQodG9vbE5hbWUpO1xuICAgICAgaWYgKGVuZHBvaW50KSB7XG4gICAgICAgIGZvciAoY29uc3Qgb3Agb2YgZ2V0T3BlcmF0aW9uc0ZvckVuZHBvaW50KGVuZHBvaW50KSkge1xuICAgICAgICAgIGFsbG93ZWRPcHMuYWRkKG9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEV2ZXJ5dGhpbmcgTk9UIGluIHRoZSBhbGxvd2VkIHNldCBnZXRzIGRlbmllZCAoZXhjZXB0IGV4ZW1wdCBvcGVyYXRpb25zKVxuICAgIGZvciAoY29uc3QgZW5kcG9pbnQgb2YgRU5EUE9JTlRfVE9PTF9NQVAudmFsdWVzKCkpIHtcbiAgICAgIGZvciAoY29uc3Qgb3Agb2YgZ2V0T3BlcmF0aW9uc0ZvckVuZHBvaW50KGVuZHBvaW50KSkge1xuICAgICAgICBpZiAoIWFsbG93ZWRPcHMuaGFzKG9wKSAmJiAhRVhFTVBUX09QRVJBVElPTlMuaGFzKG9wKSkge1xuICAgICAgICAgIGRlbnlTZXQuYWRkKG9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICh0b29sQ29uZmlnLmRlbmllZCAmJiB0b29sQ29uZmlnLmRlbmllZC5sZW5ndGggPiAwKSB7XG4gICAgLy8gQWRkIGFsbCBvcGVyYXRpb25zIGZyb20gZGVuaWVkIGVuZHBvaW50c1xuICAgIGZvciAoY29uc3QgdG9vbE5hbWUgb2YgdG9vbENvbmZpZy5kZW5pZWQpIHtcbiAgICAgIGNvbnN0IGVuZHBvaW50ID0gRU5EUE9JTlRfVE9PTF9NQVAuZ2V0KHRvb2xOYW1lKTtcbiAgICAgIGlmIChlbmRwb2ludCkge1xuICAgICAgICBmb3IgKGNvbnN0IG9wIG9mIGdldE9wZXJhdGlvbnNGb3JFbmRwb2ludChlbmRwb2ludCkpIHtcbiAgICAgICAgICBpZiAoIUVYRU1QVF9PUEVSQVRJT05TLmhhcyhvcCkpIHtcbiAgICAgICAgICAgIGRlbnlTZXQuYWRkKG9wKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZGVueVNldC5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB7IGRlbnk6IEFycmF5LmZyb20oZGVueVNldCkuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKSB9O1xufVxuIl19
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWdlbnRUb29sUG9saWN5VHJhbnNsYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9oYW5kbGVycy9tY3AtYXFsL3BvbGljaWVzL0FnZW50VG9vbFBvbGljeVRyYW5zbGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFJSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUdqRTs7Ozs7Ozs7R0FRRztBQUNILE1BQU0saUJBQWlCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDaEMsNERBQTREO0lBQzVELGVBQWU7SUFDZixxQkFBcUI7SUFDckIsdUJBQXVCO0lBQ3ZCLG9CQUFvQjtJQUNwQixvQkFBb0I7SUFDcEIsaUJBQWlCLEVBQUUsYUFBYTtJQUNoQyxtQkFBbUIsRUFBRSxZQUFZO0lBQ2pDLGlCQUFpQixFQUFFLFlBQVk7SUFDL0IscUJBQXFCLEVBQUUsWUFBWTtJQUNuQyxtRUFBbUU7SUFDbkUsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIsbUJBQW1CLEVBQUUsOENBQThDO0lBQ25FLHdCQUF3QixFQUFFLDRDQUE0QztJQUN0RSwyQkFBMkIsRUFBRSw4Q0FBOEM7Q0FDNUUsQ0FBQyxDQUFDO0FBRUg7Ozs7OztHQU1HO0FBQ0gsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBdUI7SUFDdEQsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUM7SUFDNUIsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDO0lBQ3hCLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDO0lBQzVCLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDO0lBQzVCLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxDQUFDO0NBQy9CLENBQUMsQ0FBQztBQUVIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdDRztBQUNILE1BQU0sVUFBVSwyQkFBMkIsQ0FDekMsVUFBMkI7SUFFM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUVsQyxJQUFJLFVBQVUsQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDeEQsK0RBQStEO1FBQy9ELE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDckMsS0FBSyxNQUFNLFFBQVEsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUMsTUFBTSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pELElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2IsS0FBSyxNQUFNLEVBQUUsSUFBSSx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO29CQUNwRCxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNyQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCwyRUFBMkU7UUFDM0UsS0FBSyxNQUFNLFFBQVEsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQ2xELEtBQUssTUFBTSxFQUFFLElBQUksd0JBQXdCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztvQkFDdEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbEIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksVUFBVSxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN0RCwyQ0FBMkM7UUFDM0MsS0FBSyxNQUFNLFFBQVEsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDekMsTUFBTSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pELElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2IsS0FBSyxNQUFNLEVBQUUsSUFBSSx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO29CQUNwRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7d0JBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2xCLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN2QixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFnZW50IFRvb2wgUG9saWN5IFRyYW5zbGF0b3IgKElzc3VlICM0NDkpXG4gKlxuICogVHJhbnNsYXRlcyBhbiBhZ2VudCdzIGB0b29sc2AgY29uZmlndXJhdGlvbiAoYWxsb3dlZC9kZW5pZWQgZW5kcG9pbnQgbmFtZXMpXG4gKiBpbnRvIGFuIGBFbGVtZW50R2F0ZWtlZXBlclBvbGljeWAgdGhhdCB0aGUgR2F0ZWtlZXBlciBjYW4gZW5mb3JjZS5cbiAqXG4gKiBUaGlzIGJyaWRnZXMgdGhlIGluZm9ybWF0aW9uYWwgYEFnZW50VG9vbENvbmZpZ2Agd2l0aCB0aGUgZW5mb3JjZWFibGVcbiAqIEdhdGVrZWVwZXIgcG9saWN5IHN5c3RlbSwgZ2l2aW5nIGFnZW50IHRvb2wgcmVzdHJpY3Rpb25zIHByb2dyYW1tYXRpYyB0ZWV0aC5cbiAqXG4gKiAqKlBvbGljeSBwcmVjZWRlbmNlOioqIFRoaXMgdHJhbnNsYXRvciBpcyBvbmx5IHVzZWQgd2hlbiBhbiBhZ2VudCBoYXMgbm9cbiAqIGV4cGxpY2l0IGBnYXRla2VlcGVyYCBwb2xpY3kuIElmIGJvdGggYGdhdGVrZWVwZXJgIGFuZCBgdG9vbHNgIGFyZSBwcmVzZW50LFxuICogdGhlIGV4cGxpY2l0IGBnYXRla2VlcGVyYCBwb2xpY3kgdGFrZXMgcHJlY2VkZW5jZSAoc2VlIE1DUEFRTEhhbmRsZXIpLlxuICpcbiAqIEBtb2R1bGUgQWdlbnRUb29sUG9saWN5VHJhbnNsYXRvclxuICovXG5cbmltcG9ydCB0eXBlIHsgRWxlbWVudEdhdGVrZWVwZXJQb2xpY3kgfSBmcm9tICcuLi9HYXRla2VlcGVyVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBBZ2VudFRvb2xDb25maWcgfSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9hZ2VudHMvdHlwZXMuanMnO1xuaW1wb3J0IHsgZ2V0T3BlcmF0aW9uc0ZvckVuZHBvaW50IH0gZnJvbSAnLi4vT3BlcmF0aW9uUm91dGVyLmpzJztcbmltcG9ydCB0eXBlIHsgQ1JVREVuZHBvaW50IH0gZnJvbSAnLi4vT3BlcmF0aW9uUm91dGVyLmpzJztcblxuLyoqXG4gKiBPcGVyYXRpb25zIHRoYXQgYXJlIGV4ZW1wdCBmcm9tIHRvb2xzLWJhc2VkIGRlbnkgc3ludGhlc2lzLlxuICogVGhlc2UgbXVzdCBhbHdheXMgYmUgYXZhaWxhYmxlIGZvciBhZ2VudCBsaWZlY3ljbGUgYW5kIHNhZmV0eSBmbG93cy5cbiAqXG4gKiAtICoqRXhlY3V0aW9uIGxpZmVjeWNsZSoqOiBBbiBhZ2VudCBtdXN0IGJlIGFibGUgdG8gbWFuYWdlIGl0cyBvd24gZXhlY3V0aW9uXG4gKiAgIChleGVjdXRlLCBnZXQgc3RhdGUsIHVwZGF0ZSBzdGF0ZSwgY29tcGxldGUsIGNvbnRpbnVlKS5cbiAqIC0gKipTYWZldHkgc3lzdGVtKio6IEFuIGFnZW50IG11c3QgaW50ZXJhY3Qgd2l0aCBHYXRla2VlcGVyIGNvbmZpcm1hdGlvblxuICogICBhbmQgZGFuZ2VyIHpvbmUgdmVyaWZpY2F0aW9uIGZsb3dzLlxuICovXG5jb25zdCBFWEVNUFRfT1BFUkFUSU9OUyA9IG5ldyBTZXQoW1xuICAvLyBFeGVjdXRpb24gbGlmZWN5Y2xlIOKAlCBhZ2VudCBtdXN0IG1hbmFnZSBpdHMgb3duIGV4ZWN1dGlvblxuICAnZXhlY3V0ZV9hZ2VudCcsXG4gICdnZXRfZXhlY3V0aW9uX3N0YXRlJyxcbiAgJ3JlY29yZF9leGVjdXRpb25fc3RlcCcsXG4gICdjb21wbGV0ZV9leGVjdXRpb24nLFxuICAnY29udGludWVfZXhlY3V0aW9uJyxcbiAgJ2Fib3J0X2V4ZWN1dGlvbicsIC8vIElzc3VlICMyNDlcbiAgJ2dldF9nYXRoZXJlZF9kYXRhJywgLy8gSXNzdWUgIzY4XG4gICdwcmVwYXJlX2hhbmRvZmYnLCAvLyBJc3N1ZSAjNjlcbiAgJ3Jlc3VtZV9mcm9tX2hhbmRvZmYnLCAvLyBJc3N1ZSAjNjlcbiAgLy8gU2FmZXR5IHN5c3RlbSDigJQgYWdlbnQgbXVzdCBpbnRlcmFjdCB3aXRoIEdhdGVrZWVwZXIvdmVyaWZpY2F0aW9uXG4gICdjb25maXJtX29wZXJhdGlvbicsXG4gICd2ZXJpZnlfY2hhbGxlbmdlJyxcbiAgJ3JlbGVhc2VfZGVhZGxvY2snLFxuICAncGVybWlzc2lvbl9wcm9tcHQnLCAvLyBJc3N1ZSAjNjI1OiBDTEktbGV2ZWwgcGVybWlzc2lvbiBkZWxlZ2F0aW9uXG4gICdhcHByb3ZlX2NsaV9wZXJtaXNzaW9uJywgLy8gSXNzdWUgIzYyNSBQaGFzZSAzOiBDTEkgYXBwcm92YWwgd29ya2Zsb3dcbiAgJ2dldF9wZW5kaW5nX2NsaV9hcHByb3ZhbHMnLCAvLyBJc3N1ZSAjNjI1IFBoYXNlIDM6IENMSSBhcHByb3ZhbCB2aXNpYmlsaXR5XG5dKTtcblxuLyoqXG4gKiBNYXBzIE1DUC1BUUwgdG9vbCBuYW1lcyAoYXMgdXNlZCBpbiBgQWdlbnRUb29sQ29uZmlnLmFsbG93ZWQvZGVuaWVkYClcbiAqIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgQ1JVRCBlbmRwb2ludCB0eXBlcyBpbiB0aGUgT3BlcmF0aW9uUm91dGVyLlxuICpcbiAqIFRvb2wgbmFtZXMgZm9sbG93IHRoZSBmb3JtYXQgYG1jcF9hcWxfe2VuZHBvaW50fWAgYW5kIG1hcCB0byBvbmUgb2ZcbiAqIHRoZSBmaXZlIENSVUQgZW5kcG9pbnRzOiBDUkVBVEUsIFJFQUQsIFVQREFURSwgREVMRVRFLCBFWEVDVVRFLlxuICovXG5jb25zdCBFTkRQT0lOVF9UT09MX01BUCA9IG5ldyBNYXA8c3RyaW5nLCBDUlVERW5kcG9pbnQ+KFtcbiAgWydtY3BfYXFsX2NyZWF0ZScsICdDUkVBVEUnXSxcbiAgWydtY3BfYXFsX3JlYWQnLCAnUkVBRCddLFxuICBbJ21jcF9hcWxfdXBkYXRlJywgJ1VQREFURSddLFxuICBbJ21jcF9hcWxfZGVsZXRlJywgJ0RFTEVURSddLFxuICBbJ21jcF9hcWxfZXhlY3V0ZScsICdFWEVDVVRFJ10sXG5dKTtcblxuLyoqXG4gKiBUcmFuc2xhdGVzIGFuIHtAbGluayBBZ2VudFRvb2xDb25maWd9IGludG8gYW4ge0BsaW5rIEVsZW1lbnRHYXRla2VlcGVyUG9saWN5fS5cbiAqXG4gKiBUaGUgdHJhbnNsYXRpb24gd29ya3MgYXMgZm9sbG93czpcbiAqIC0gSWYgYHRvb2xzLmFsbG93ZWRgIGlzIHNwZWNpZmllZCwgYWxsIG9wZXJhdGlvbnMgKipub3QqKiBpbiB0aGUgYWxsb3dlZFxuICogICBlbmRwb2ludHMgYXJlIGFkZGVkIHRvIHRoZSBkZW55IGxpc3QgKGFsbG93bGlzdCDihpIgZGVueWxpc3QgaW52ZXJzaW9uKS5cbiAqIC0gSWYgYHRvb2xzLmRlbmllZGAgaXMgc3BlY2lmaWVkLCBhbGwgb3BlcmF0aW9ucyBmcm9tIHRoZSBkZW5pZWQgZW5kcG9pbnRzXG4gKiAgIGFyZSBhZGRlZCB0byB0aGUgZGVueSBsaXN0IGRpcmVjdGx5LlxuICogLSBCb3RoIGBhbGxvd2VkYCBhbmQgYGRlbmllZGAgY2FuIGJlIHNwZWNpZmllZCBzaW11bHRhbmVvdXNseTsgdGhlaXIgZWZmZWN0c1xuICogICBhcmUgY3VtdWxhdGl2ZSAodW5pb24gb2YgZGVuaWVkIG9wZXJhdGlvbnMpLlxuICpcbiAqIExpZmVjeWNsZSBhbmQgc2FmZXR5IG9wZXJhdGlvbnMgKHtAbGluayBFWEVNUFRfT1BFUkFUSU9OU30pIGFyZSAqKm5ldmVyKipcbiAqIGluY2x1ZGVkIGluIHRoZSBzeW50aGVzaXplZCBkZW55IGxpc3QsIHJlZ2FyZGxlc3Mgb2YgdGhlIHRvb2wgY29uZmlnLlxuICpcbiAqIEBwYXJhbSB0b29sQ29uZmlnIC0gVGhlIGFnZW50J3MgdG9vbCBjb25maWd1cmF0aW9uIGNvbnRhaW5pbmcgYWxsb3dlZC9kZW5pZWQgZW5kcG9pbnQgbmFtZXNcbiAqIEByZXR1cm5zIEEgc3ludGhlc2l6ZWQge0BsaW5rIEVsZW1lbnRHYXRla2VlcGVyUG9saWN5fSB3aXRoIGEgZGVueSBsaXN0LFxuICogICAgICAgICAgb3IgYHVuZGVmaW5lZGAgaWYgdGhlIGNvbmZpZyBwcm9kdWNlcyBubyByZXN0cmljdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gQWdlbnQgdGhhdCBjYW4gb25seSByZWFkIOKAlCBhbGwgb3RoZXIgZW5kcG9pbnRzIGRlbmllZFxuICogdHJhbnNsYXRlVG9vbENvbmZpZ1RvUG9saWN5KHsgYWxsb3dlZDogWydtY3BfYXFsX3JlYWQnXSB9KTtcbiAqIC8vIOKGkiB7IGRlbnk6IFsnYWRkRW50cnknLCAnY2xlYXInLCAnY3JlYXRlX2VsZW1lbnQnLCAnZGVsZXRlX2VsZW1lbnQnLCAnZWRpdF9lbGVtZW50JywgLi4uXSB9XG4gKlxuICogLy8gQWdlbnQgdGhhdCBjYW5ub3QgZGVsZXRlIOKAlCBvbmx5IGRlbGV0ZSBvcGVyYXRpb25zIGRlbmllZFxuICogdHJhbnNsYXRlVG9vbENvbmZpZ1RvUG9saWN5KHsgYWxsb3dlZDogWydtY3BfYXFsX2NyZWF0ZScsICdtY3BfYXFsX3JlYWQnLCAnbWNwX2FxbF91cGRhdGUnLCAnbWNwX2FxbF9leGVjdXRlJ10gfSk7XG4gKiAvLyDihpIgeyBkZW55OiBbJ2NsZWFyJywgJ2RlbGV0ZV9lbGVtZW50J10gfVxuICpcbiAqIC8vIE5vIHJlc3RyaWN0aW9ucyDigJQgcmV0dXJucyB1bmRlZmluZWRcbiAqIHRyYW5zbGF0ZVRvb2xDb25maWdUb1BvbGljeSh7IGFsbG93ZWQ6IFsnbWNwX2FxbF9jcmVhdGUnLCAnbWNwX2FxbF9yZWFkJywgJ21jcF9hcWxfdXBkYXRlJywgJ21jcF9hcWxfZGVsZXRlJywgJ21jcF9hcWxfZXhlY3V0ZSddIH0pO1xuICogLy8g4oaSIHVuZGVmaW5lZFxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGVUb29sQ29uZmlnVG9Qb2xpY3koXG4gIHRvb2xDb25maWc6IEFnZW50VG9vbENvbmZpZ1xuKTogRWxlbWVudEdhdGVrZWVwZXJQb2xpY3kgfCB1bmRlZmluZWQge1xuICBjb25zdCBkZW55U2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgaWYgKHRvb2xDb25maWcuYWxsb3dlZCAmJiB0b29sQ29uZmlnLmFsbG93ZWQubGVuZ3RoID4gMCkge1xuICAgIC8vIENvbXB1dGUgdGhlIHNldCBvZiBhbGxvd2VkIG9wZXJhdGlvbnMgZnJvbSBhbGxvd2VkIGVuZHBvaW50c1xuICAgIGNvbnN0IGFsbG93ZWRPcHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IHRvb2xOYW1lIG9mIHRvb2xDb25maWcuYWxsb3dlZCkge1xuICAgICAgY29uc3QgZW5kcG9pbnQgPSBFTkRQT0lOVF9UT09MX01BUC5nZXQodG9vbE5hbWUpO1xuICAgICAgaWYgKGVuZHBvaW50KSB7XG4gICAgICAgIGZvciAoY29uc3Qgb3Agb2YgZ2V0T3BlcmF0aW9uc0ZvckVuZHBvaW50KGVuZHBvaW50KSkge1xuICAgICAgICAgIGFsbG93ZWRPcHMuYWRkKG9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEV2ZXJ5dGhpbmcgTk9UIGluIHRoZSBhbGxvd2VkIHNldCBnZXRzIGRlbmllZCAoZXhjZXB0IGV4ZW1wdCBvcGVyYXRpb25zKVxuICAgIGZvciAoY29uc3QgZW5kcG9pbnQgb2YgRU5EUE9JTlRfVE9PTF9NQVAudmFsdWVzKCkpIHtcbiAgICAgIGZvciAoY29uc3Qgb3Agb2YgZ2V0T3BlcmF0aW9uc0ZvckVuZHBvaW50KGVuZHBvaW50KSkge1xuICAgICAgICBpZiAoIWFsbG93ZWRPcHMuaGFzKG9wKSAmJiAhRVhFTVBUX09QRVJBVElPTlMuaGFzKG9wKSkge1xuICAgICAgICAgIGRlbnlTZXQuYWRkKG9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICh0b29sQ29uZmlnLmRlbmllZCAmJiB0b29sQ29uZmlnLmRlbmllZC5sZW5ndGggPiAwKSB7XG4gICAgLy8gQWRkIGFsbCBvcGVyYXRpb25zIGZyb20gZGVuaWVkIGVuZHBvaW50c1xuICAgIGZvciAoY29uc3QgdG9vbE5hbWUgb2YgdG9vbENvbmZpZy5kZW5pZWQpIHtcbiAgICAgIGNvbnN0IGVuZHBvaW50ID0gRU5EUE9JTlRfVE9PTF9NQVAuZ2V0KHRvb2xOYW1lKTtcbiAgICAgIGlmIChlbmRwb2ludCkge1xuICAgICAgICBmb3IgKGNvbnN0IG9wIG9mIGdldE9wZXJhdGlvbnNGb3JFbmRwb2ludChlbmRwb2ludCkpIHtcbiAgICAgICAgICBpZiAoIUVYRU1QVF9PUEVSQVRJT05TLmhhcyhvcCkpIHtcbiAgICAgICAgICAgIGRlbnlTZXQuYWRkKG9wKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZGVueVNldC5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB7IGRlbnk6IEFycmF5LmZyb20oZGVueVNldCkuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKSB9O1xufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"ElementPolicies.d.ts","sourceRoot":"","sources":["../../../../src/handlers/mcp-aql/policies/ElementPolicies.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ElementPolicies.d.ts","sourceRoot":"","sources":["../../../../src/handlers/mcp-aql/policies/ElementPolicies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,eAAe,EACf,KAAK,uBAAuB,EAE5B,KAAK,kBAAkB,EAExB,MAAM,uBAAuB,CAAC;AAM/B;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,uBAAuB,CAAC;IACrC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,yBAAyB,CAAC;CACrC;AAED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,EAAE,KAAK,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,kEAAkE;IAClE,eAAe,EAAE,eAAe,CAAC;IACjC,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,mBAAmB,CAAC;IACnE,8DAA8D;IAC9D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,eAAe,CAAA;KAAE,CAAC,CAAC;CAC7E;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,aAAa,EAAE,EAC/B,iBAAiB,CAAC,EAAE,MAAM,GACzB,mBAAmB,CAgGrB;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,mBAAmB,EAC3B,iBAAiB,CAAC,EAAE,MAAM,GACzB,kBAAkB,CA2EpB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,OAAO,GAChB,uBAAuB,GAAG,SAAS,CAmHrC;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC1C,MAAM,EAAE,CAsBV;AAgED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAAE,EAClB,SAAS,EAAE,MAAM,GAChB,MAAM,EAAE,CAMV;AAgID;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAErE;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,GACvF;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAS5C;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,cAAc,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,GACvF,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAUvC;AAwCD,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,OAAO,EAClB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC1C,uBAAuB,GAAG,SAAS,CAoCrC;AAgCD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAUlF;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAMhE;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,OAAO,GAAG,2BAA2B,GAAG,SAAS,CAoBjG"}
@@ -490,6 +490,7 @@ function checkToolPrefix(pattern, colonIndex, fieldName, warnings) {
490
490
  */
491
491
  const UNGATABLE_OPERATIONS = new Set([
492
492
  'verify_challenge',
493
+ 'release_deadlock',
493
494
  'approve_cli_permission',
494
495
  'permission_prompt',
495
496
  ]);
@@ -657,4 +658,4 @@ export function getGatekeeperDiagnostics(target) {
657
658
  }
658
659
  return undefined;
659
660
  }
660
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWxlbWVudFBvbGljaWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2hhbmRsZXJzL21jcC1hcWwvcG9saWNpZXMvRWxlbWVudFBvbGljaWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7R0FZRztBQUVILE9BQU8sRUFDTCxlQUFlLEVBSWYsbUJBQW1CLEdBQ3BCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLHlCQUF5QixFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0csT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQWtEM0U7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLFNBQWlCLEVBQ2pCLGNBQStCLEVBQy9CLGlCQUEwQjtJQUUxQixvREFBb0Q7SUFDcEQsSUFBSSxjQUFjLEdBQUcseUJBQXlCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUQsSUFBSSxhQUFpQyxDQUFDO0lBQ3RDLElBQUksYUFBbUQsQ0FBQztJQUN4RCxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDekIsOEZBQThGO0lBQzlGLGdGQUFnRjtJQUNoRixJQUFJLGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUMvQixzRkFBc0Y7SUFDdEYsTUFBTSxtQkFBbUIsR0FBMEQsRUFBRSxDQUFDO0lBRXRGLDhDQUE4QztJQUM5QyxLQUFLLE1BQU0sT0FBTyxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBQzNDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLFNBQVM7UUFD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LFVBQVUsMEJBQTBCLENBQUMsTUFBZTtJQUN4RCxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzFDLE9BQU87SUFDVCxDQUFDO0lBRUQsT0FBUSxNQUFrQyxDQUFDLHFCQUFxQixDQUFDO0FBQ25FLENBQUM7QUFFRCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsTUFBZTtJQUN0RCxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzFDLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBSSxNQUFrQyxDQUFDLHFCQUFxQixDQUFDO0lBQzlFLElBQUksQ0FBQyxXQUFXLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDcEQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLFdBQXNDLENBQUM7SUFDdEQsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLEtBQUssSUFBSSxNQUFNLENBQUMsV0FBVyxLQUFLLEtBQUssSUFBSSxPQUFPLE1BQU0sQ0FBQyxPQUFPLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDakksT0FBTztZQUNMLEtBQUssRUFBRSxLQUFLO1lBQ1osV0FBVyxFQUFFLEtBQUs7WUFDbEIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1NBQ3hCLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRWxlbWVudCBQb2xpY2llc1xuICpcbiAqIEhhbmRsZXMgZWxlbWVudC1iYXNlZCBhY2Nlc3MgY29udHJvbCBmb3IgdGhlIEdhdGVrZWVwZXIuXG4gKiBBbGxvd3MgQU5ZIERvbGxob3VzZU1DUCBlbGVtZW50IHRvIGRlZmluZSBwb2xpY2llcyBpbiBpdHMgbWV0YWRhdGFcbiAqIHRoYXQgb3ZlcnJpZGUgb3IgcmVzdHJpY3QgdGhlIGRlZmF1bHQgb3BlcmF0aW9uIHBvbGljaWVzLlxuICpcbiAqIFBvbGljeSBSZXNvbHV0aW9uIE9yZGVyOlxuICogMS4gQWN0aXZlIGVsZW1lbnQgZGVueSBsaXN0IChoaWdoZXN0IHByaW9yaXR5IC0gYmxvY2tzIG9wZXJhdGlvbilcbiAqIDIuIEFjdGl2ZSBlbGVtZW50IGNvbmZpcm0gbGlzdCAocmVxdWlyZXMgY29uZmlybWF0aW9uKVxuICogMy4gQWN0aXZlIGVsZW1lbnQgYWxsb3cgbGlzdCAoYXV0by1hcHByb3ZlcylcbiAqIDQuIE9wZXJhdGlvbiBkZWZhdWx0IHBlcm1pc3Npb24gKGZhbGxiYWNrKVxuICovXG5cbmltcG9ydCB7XG4gIFBlcm1pc3Npb25MZXZlbCxcbiAgdHlwZSBFbGVtZW50R2F0ZWtlZXBlclBvbGljeSxcbiAgdHlwZSBDbGlBcHByb3ZhbFBvbGljeSxcbiAgdHlwZSBHYXRla2VlcGVyRGVjaXNpb24sXG4gIEdhdGVrZWVwZXJFcnJvckNvZGUsXG59IGZyb20gJy4uL0dhdGVrZWVwZXJUeXBlcy5qcyc7XG5pbXBvcnQgeyBnZXREZWZhdWx0UGVybWlzc2lvbkxldmVsLCBjYW5PcGVyYXRpb25CZUVsZXZhdGVkLCBnZXRPcGVyYXRpb25Qb2xpY3kgfSBmcm9tICcuL09wZXJhdGlvblBvbGljaWVzLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciB9IGZyb20gJy4uLy4uLy4uL3NlY3VyaXR5L3NlY3VyaXR5TW9uaXRvci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi8uLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgTUFYX0dMT0JfUEFUVEVSTl9MRU5HVEggfSBmcm9tICcuLi8uLi8uLi91dGlscy9wYXR0ZXJuTWF0Y2hlci5qcyc7XG5cbi8qKlxuICogTWV0YWRhdGEgc3RydWN0dXJlIGZvciBlbGVtZW50cyB3aXRoIEdhdGVrZWVwZXIgcG9saWNpZXMuXG4gKiBUaGUgJ2dhdGVrZWVwZXInIGZpZWxkIGlzIG9wdGlvbmFsIGFuZCBjb250YWlucyBwb2xpY3kgZGVmaW5pdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudE1ldGFkYXRhV2l0aFBvbGljeSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGdhdGVrZWVwZXI/OiBFbGVtZW50R2F0ZWtlZXBlclBvbGljeTtcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBBY3RpdmUgZWxlbWVudCBmb3IgcG9saWN5IGV2YWx1YXRpb24uXG4gKiBSZXByZXNlbnRzIGFuIGVsZW1lbnQgY3VycmVudGx5IGFjdGl2ZSBpbiB0aGUgc2Vzc2lvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY3RpdmVFbGVtZW50IHtcbiAgdHlwZTogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIG1ldGFkYXRhOiBFbGVtZW50TWV0YWRhdGFXaXRoUG9saWN5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdhdGVrZWVwZXJQb2xpY3lEaWFnbm9zdGljcyB7XG4gIHZhbGlkOiBmYWxzZTtcbiAgZW5mb3JjZWFibGU6IGZhbHNlO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGVsZW1lbnQgcG9saWN5IHJlc29sdXRpb24uXG4gKiBDb250YWlucyB0aGUgZWZmZWN0aXZlIHBlcm1pc3Npb24gbGV2ZWwgYW5kIHBvbGljeSBzb3VyY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudFBvbGljeVJlc3VsdCB7XG4gIC8qKiBFZmZlY3RpdmUgcGVybWlzc2lvbiBsZXZlbCBhZnRlciBlbGVtZW50IHBvbGljeSBhcHBsaWNhdGlvbiAqL1xuICBwZXJtaXNzaW9uTGV2ZWw6IFBlcm1pc3Npb25MZXZlbDtcbiAgLyoqIFdoaWNoIGVsZW1lbnQncyBwb2xpY3kgZGV0ZXJtaW5lZCB0aGlzIHJlc3VsdCAqL1xuICBzb3VyY2VFbGVtZW50Pzogc3RyaW5nO1xuICAvKiogVGhlIHNwZWNpZmljIHBvbGljeSBmaWVsZCB0aGF0IG1hdGNoZWQgKGFsbG93L2NvbmZpcm0vZGVueSkgKi9cbiAgbWF0Y2hlZFBvbGljeT86ICdhbGxvdycgfCAnY29uZmlybScgfCAnZGVueScgfCAnc2NvcGVfcmVzdHJpY3Rpb24nO1xuICAvKiogV2hldGhlciB0aGUgb3BlcmF0aW9uIHdhcyBibG9ja2VkIGJ5IHNjb3BlIHJlc3RyaWN0aW9ucyAqL1xuICBzY29wZUJsb2NrZWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogRWxlbWVudHMgdGhhdCB3YW50ZWQgdG8gYXV0by1hcHByb3ZlIHRoaXMgb3BlcmF0aW9uIGJ1dCB3ZXJlIG92ZXJyaWRkZW5cbiAgICogYnkgYSBoaWdoZXItcHJpb3JpdHkgY29uZmlybSBvciBkZW55IHBvbGljeSBmcm9tIGFub3RoZXIgZWxlbWVudC5cbiAgICogSXNzdWUgIzY3NDogYWxsb3cgY2Fubm90IG92ZXJyaWRlIGNvbmZpcm0uXG4gICAqL1xuICBjb25mbGljdGluZ0VsZW1lbnRzPzogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHdhbnRlZExldmVsOiBQZXJtaXNzaW9uTGV2ZWwgfT47XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgZWZmZWN0aXZlIHBlcm1pc3Npb24gbGV2ZWwgZm9yIGFuIG9wZXJhdGlvblxuICogY29uc2lkZXJpbmcgYWxsIGFjdGl2ZSBlbGVtZW50cyBhbmQgdGhlaXIgcG9saWNpZXMuXG4gKlxuICogQHBhcmFtIG9wZXJhdGlvbiAtIFRoZSBvcGVyYXRpb24gdG8gY2hlY2tcbiAqIEBwYXJhbSBhY3RpdmVFbGVtZW50cyAtIEN1cnJlbnRseSBhY3RpdmUgZWxlbWVudHMgd2l0aCB0aGVpciBtZXRhZGF0YVxuICogQHBhcmFtIHRhcmdldEVsZW1lbnRUeXBlIC0gT3B0aW9uYWwgZWxlbWVudCB0eXBlIGJlaW5nIG9wZXJhdGVkIG9uXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgcG9saWN5IHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUVsZW1lbnRQb2xpY3koXG4gIG9wZXJhdGlvbjogc3RyaW5nLFxuICBhY3RpdmVFbGVtZW50czogQWN0aXZlRWxlbWVudFtdLFxuICB0YXJnZXRFbGVtZW50VHlwZT86IHN0cmluZ1xuKTogRWxlbWVudFBvbGljeVJlc3VsdCB7XG4gIC8vIFN0YXJ0IHdpdGggdGhlIGRlZmF1bHQgb3BlcmF0aW9uIHBlcm1pc3Npb24gbGV2ZWxcbiAgbGV0IGVmZmVjdGl2ZUxldmVsID0gZ2V0RGVmYXVsdFBlcm1pc3Npb25MZXZlbChvcGVyYXRpb24pO1xuICBsZXQgc291cmNlRWxlbWVudDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBsZXQgbWF0Y2hlZFBvbGljeTogRWxlbWVudFBvbGljeVJlc3VsdFsnbWF0Y2hlZFBvbGljeSddO1xuICBsZXQgc2NvcGVCbG9ja2VkID0gZmFsc2U7XG4gIC8vIElzc3VlICM2NzQ6IFRyYWNrIHdoZXRoZXIgQ09ORklSTSB3YXMgc2V0IGJ5IGFuIGVsZW1lbnQgcG9saWN5IChub3QganVzdCB0aGUgcm91dGUgZGVmYXVsdClcbiAgLy8gYWxsb3cgY2FuIG92ZXJyaWRlIHRoZSByb3V0ZSBkZWZhdWx0IGJ1dCBOT1QgYW5vdGhlciBlbGVtZW50J3MgY29uZmlybSBwb2xpY3lcbiAgbGV0IGNvbmZpcm1lZEJ5RWxlbWVudCA9IGZhbHNlO1xuICAvLyBUcmFjayBlbGVtZW50cyB0aGF0IHdhbnRlZCBhbGxvdyBidXQgd2VyZSBvdmVycmlkZGVuIGJ5IGFuIGVsZW1lbnQtc2V0IGNvbmZpcm0vZGVueVxuICBjb25zdCBjb25mbGljdGluZ0VsZW1lbnRzOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgd2FudGVkTGV2ZWw6IFBlcm1pc3Npb25MZXZlbCB9PiA9IFtdO1xuXG4gIC8vIENoZWNrIGVhY2ggYWN0aXZlIGVsZW1lbnQncyBwb2xpY3kgaW4gb3JkZXJcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIGFjdGl2ZUVsZW1lbnRzKSB7XG4gICAgY29uc3QgcG9saWN5ID0gZWxlbWVudC5tZXRhZGF0YS5nYXRla2VlcGVyO1xuICAgIGlmICghcG9saWN5KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyAxLiBDaGVjayBkZW55IGxpc3QgZmlyc3QgKGhpZ2hlc3QgcHJpb3JpdHkpXG4gICAgaWYgKHBvbGljeS5kZW55Py5pbmNsdWRlcyhvcGVyYXRpb24pKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwZXJtaXNzaW9uTGV2ZWw6IFBlcm1pc3Npb25MZXZlbC5ERU5ZLFxuICAgICAgICBzb3VyY2VFbGVtZW50OiBlbGVtZW50Lm5hbWUsXG4gICAgICAgIG1hdGNoZWRQb2xpY3k6ICdkZW55JyxcbiAgICAgICAgY29uZmxpY3RpbmdFbGVtZW50czogY29uZmxpY3RpbmdFbGVtZW50cy5sZW5ndGggPiAwID8gY29uZmxpY3RpbmdFbGVtZW50cyA6IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gMi4gQ2hlY2sgc2NvcGUgcmVzdHJpY3Rpb25zXG4gICAgaWYgKHRhcmdldEVsZW1lbnRUeXBlICYmIHBvbGljeS5zY29wZVJlc3RyaWN0aW9ucykge1xuICAgICAgY29uc3QgeyBhbGxvd2VkVHlwZXMsIGJsb2NrZWRUeXBlcyB9ID0gcG9saWN5LnNjb3BlUmVzdHJpY3Rpb25zO1xuXG4gICAgICAvLyBJZiBhbGxvd2VkVHlwZXMgaXMgc3BlY2lmaWVkLCB0YXJnZXQgbXVzdCBiZSBpbiB0aGUgbGlzdFxuICAgICAgaWYgKGFsbG93ZWRUeXBlcyAmJiAhYWxsb3dlZFR5cGVzLmluY2x1ZGVzKHRhcmdldEVsZW1lbnRUeXBlKSkge1xuICAgICAgICBzY29wZUJsb2NrZWQgPSB0cnVlO1xuICAgICAgICBzb3VyY2VFbGVtZW50ID0gZWxlbWVudC5uYW1lO1xuICAgICAgICBtYXRjaGVkUG9saWN5ID0gJ3Njb3BlX3Jlc3RyaWN0aW9uJztcbiAgICAgICAgY29udGludWU7IC8vIENoZWNrIG90aGVyIGVsZW1lbnRzLCBtaWdodCBoYXZlIGRpZmZlcmVudCBwb2xpY3lcbiAgICAgIH1cblxuICAgICAgLy8gSWYgYmxvY2tlZFR5cGVzIGlzIHNwZWNpZmllZCwgdGFyZ2V0IG11c3QgTk9UIGJlIGluIHRoZSBsaXN0XG4gICAgICBpZiAoYmxvY2tlZFR5cGVzPy5pbmNsdWRlcyh0YXJnZXRFbGVtZW50VHlwZSkpIHtcbiAgICAgICAgc2NvcGVCbG9ja2VkID0gdHJ1ZTtcbiAgICAgICAgc291cmNlRWxlbWVudCA9IGVsZW1lbnQubmFtZTtcbiAgICAgICAgbWF0Y2hlZFBvbGljeSA9ICdzY29wZV9yZXN0cmljdGlvbic7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMuIENoZWNrIGNvbmZpcm0gbGlzdCAocmVxdWlyZXMgY29uZmlybWF0aW9uKVxuICAgIGlmIChwb2xpY3kuY29uZmlybT8uaW5jbHVkZXMob3BlcmF0aW9uKSkge1xuICAgICAgLy8gRG9uJ3QgZG93bmdyYWRlIGZyb20gREVOWSBvciBDT05GSVJNX1NJTkdMRV9VU0VcbiAgICAgIGlmIChlZmZlY3RpdmVMZXZlbCAhPT0gUGVybWlzc2lvbkxldmVsLkRFTlkpIHtcbiAgICAgICAgZWZmZWN0aXZlTGV2ZWwgPSBQZXJtaXNzaW9uTGV2ZWwuQ09ORklSTV9TRVNTSU9OO1xuICAgICAgICBjb25maXJtZWRCeUVsZW1lbnQgPSB0cnVlO1xuICAgICAgICBzb3VyY2VFbGVtZW50ID0gZWxlbWVudC5uYW1lO1xuICAgICAgICBtYXRjaGVkUG9saWN5ID0gJ2NvbmZpcm0nO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuIENoZWNrIGFsbG93IGxpc3QgKGF1dG8tYXBwcm92ZXMpXG4gICAgLy8gSXNzdWUgIzY3NDogYWxsb3cgQ0FOIG92ZXJyaWRlIHRoZSByb3V0ZSBkZWZhdWx0LCBidXQgTk9UIGFub3RoZXIgZWxlbWVudCdzIGNvbmZpcm0gcG9saWN5LlxuICAgIC8vIFByaW9yaXR5IGhpZXJhcmNoeTogZWxlbWVudCBkZW55ID4gZWxlbWVudCBjb25maXJtID4gZWxlbWVudCBhbGxvdyA+IHJvdXRlIGRlZmF1bHRcbiAgICBpZiAocG9saWN5LmFsbG93Py5pbmNsdWRlcyhvcGVyYXRpb24pKSB7XG4gICAgICAvLyBPbmx5IGVsZXZhdGUgaWYgdGhlIG9wZXJhdGlvbiBhbGxvd3MgZWxldmF0aW9uXG4gICAgICBpZiAoY2FuT3BlcmF0aW9uQmVFbGV2YXRlZChvcGVyYXRpb24pKSB7XG4gICAgICAgIGlmICghY29uZmlybWVkQnlFbGVtZW50KSB7XG4gICAgICAgICAgLy8gTm8gZWxlbWVudCBoYXMgY29uZmlybWVkIHRoaXMg4oCUIHNhZmUgdG8gZWxldmF0ZSAob3ZlcnJpZGVzIHJvdXRlIGRlZmF1bHQpXG4gICAgICAgICAgZWZmZWN0aXZlTGV2ZWwgPSBQZXJtaXNzaW9uTGV2ZWwuQVVUT19BUFBST1ZFO1xuICAgICAgICAgIHNvdXJjZUVsZW1lbnQgPSBlbGVtZW50Lm5hbWU7XG4gICAgICAgICAgbWF0Y2hlZFBvbGljeSA9ICdhbGxvdyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQW5vdGhlciBlbGVtZW50J3MgY29uZmlybSBwb2xpY3kgdGFrZXMgcHJpb3JpdHkgb3ZlciB0aGlzIGFsbG93XG4gICAgICAgICAgY29uZmxpY3RpbmdFbGVtZW50cy5wdXNoKHsgbmFtZTogZWxlbWVudC5uYW1lLCB3YW50ZWRMZXZlbDogUGVybWlzc2lvbkxldmVsLkFVVE9fQVBQUk9WRSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIElmIHNjb3BlIHdhcyBibG9ja2VkIGJ5IGFsbCBlbGVtZW50cyB3aXRoIHJlc3RyaWN0aW9uc1xuICBpZiAoc2NvcGVCbG9ja2VkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBlcm1pc3Npb25MZXZlbDogUGVybWlzc2lvbkxldmVsLkRFTlksXG4gICAgICBzb3VyY2VFbGVtZW50LFxuICAgICAgbWF0Y2hlZFBvbGljeTogJ3Njb3BlX3Jlc3RyaWN0aW9uJyxcbiAgICAgIHNjb3BlQmxvY2tlZDogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwZXJtaXNzaW9uTGV2ZWw6IGVmZmVjdGl2ZUxldmVsLFxuICAgIHNvdXJjZUVsZW1lbnQsXG4gICAgbWF0Y2hlZFBvbGljeSxcbiAgICBjb25mbGljdGluZ0VsZW1lbnRzOiBjb25mbGljdGluZ0VsZW1lbnRzLmxlbmd0aCA+IDAgPyBjb25mbGljdGluZ0VsZW1lbnRzIDogdW5kZWZpbmVkLFxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIEdhdGVrZWVwZXIgZGVjaXNpb24gZnJvbSBlbGVtZW50IHBvbGljeSByZXNvbHV0aW9uLlxuICpcbiAqIEBwYXJhbSBvcGVyYXRpb24gLSBUaGUgb3BlcmF0aW9uIHRoYXQgd2FzIGNoZWNrZWRcbiAqIEBwYXJhbSByZXN1bHQgLSBUaGUgZWxlbWVudCBwb2xpY3kgcmVzb2x1dGlvbiByZXN1bHRcbiAqIEBwYXJhbSB0YXJnZXRFbGVtZW50VHlwZSAtIE9wdGlvbmFsIGVsZW1lbnQgdHlwZSBiZWluZyBvcGVyYXRlZCBvblxuICogQHJldHVybnMgQSBHYXRla2VlcGVyRGVjaXNpb24gb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWNpc2lvbkZyb21Qb2xpY3koXG4gIG9wZXJhdGlvbjogc3RyaW5nLFxuICByZXN1bHQ6IEVsZW1lbnRQb2xpY3lSZXN1bHQsXG4gIHRhcmdldEVsZW1lbnRUeXBlPzogc3RyaW5nXG4pOiBHYXRla2VlcGVyRGVjaXNpb24ge1xuICBjb25zdCB7IHBlcm1pc3Npb25MZXZlbCwgc291cmNlRWxlbWVudCwgc2NvcGVCbG9ja2VkLCBjb25mbGljdGluZ0VsZW1lbnRzIH0gPSByZXN1bHQ7XG5cbiAgLy8gSGFuZGxlIERFTllcbiAgaWYgKHBlcm1pc3Npb25MZXZlbCA9PT0gUGVybWlzc2lvbkxldmVsLkRFTlkpIHtcbiAgICBpZiAoc2NvcGVCbG9ja2VkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbGxvd2VkOiBmYWxzZSxcbiAgICAgICAgcGVybWlzc2lvbkxldmVsLFxuICAgICAgICBlcnJvckNvZGU6IEdhdGVrZWVwZXJFcnJvckNvZGUuU0NPUEVfUkVTVFJJQ1RJT04sXG4gICAgICAgIHJlYXNvbjogYE9wZXJhdGlvbiBcIiR7b3BlcmF0aW9ufVwiIGlzIG5vdCBhbGxvd2VkIG9uIGVsZW1lbnQgdHlwZSBcIiR7dGFyZ2V0RWxlbWVudFR5cGV9XCIgZHVlIHRvIHNjb3BlIHJlc3RyaWN0aW9ucyBpbiBhY3RpdmUgZWxlbWVudCBcIiR7c291cmNlRWxlbWVudH1cImAsXG4gICAgICAgIHN1Z2dlc3Rpb246IGBEZWFjdGl2YXRlIHRoZSBlbGVtZW50IFwiJHtzb3VyY2VFbGVtZW50fVwiIG9yIHVzZSBhIGRpZmZlcmVudCBlbGVtZW50IHR5cGVgLFxuICAgICAgICBwb2xpY3lTb3VyY2U6ICdlbGVtZW50X3BvbGljeScsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBhbGxvd2VkOiBmYWxzZSxcbiAgICAgIHBlcm1pc3Npb25MZXZlbCxcbiAgICAgIGVycm9yQ29kZTogR2F0ZWtlZXBlckVycm9yQ29kZS5FTEVNRU5UX1BPTElDWV9WSU9MQVRJT04sXG4gICAgICByZWFzb246IGBPcGVyYXRpb24gXCIke29wZXJhdGlvbn1cIiBpcyBibG9ja2VkIGJ5IGFjdGl2ZSBlbGVtZW50IFwiJHtzb3VyY2VFbGVtZW50fVwiJ3MgZGVueSBwb2xpY3lgLFxuICAgICAgc3VnZ2VzdGlvbjogYERlYWN0aXZhdGUgdGhlIGVsZW1lbnQgXCIke3NvdXJjZUVsZW1lbnR9XCIgdG8gcHJvY2VlZCB3aXRoIHRoaXMgb3BlcmF0aW9uYCxcbiAgICAgIHBvbGljeVNvdXJjZTogJ2VsZW1lbnRfcG9saWN5JyxcbiAgICB9O1xuICB9XG5cbiAgLy8gSGFuZGxlIGNvbmZpcm1hdGlvbiByZXF1aXJlZFxuICBpZiAoXG4gICAgcGVybWlzc2lvbkxldmVsID09PSBQZXJtaXNzaW9uTGV2ZWwuQ09ORklSTV9TRVNTSU9OIHx8XG4gICAgcGVybWlzc2lvbkxldmVsID09PSBQZXJtaXNzaW9uTGV2ZWwuQ09ORklSTV9TSU5HTEVfVVNFXG4gICkge1xuICAgIC8vIEJ1aWxkIGh1bWFuLXJlYWRhYmxlIHJhdGlvbmFsZSBleHBsYWluaW5nIFdIWSBjb25maXJtYXRpb24gaXMgbmVlZGVkXG4gICAgY29uc3QgcG9saWN5ID0gZ2V0T3BlcmF0aW9uUG9saWN5KG9wZXJhdGlvbik7XG4gICAgY29uc3QgbGV2ZWxMYWJlbCA9IHBlcm1pc3Npb25MZXZlbCA9PT0gUGVybWlzc2lvbkxldmVsLkNPTkZJUk1fU0lOR0xFX1VTRVxuICAgICAgPyAncmVxdWlyZXMgY29uZmlybWF0aW9uIGVhY2ggdGltZSdcbiAgICAgIDogJ3JlcXVpcmVzIGNvbmZpcm1hdGlvbiBvbmNlIHBlciBzZXNzaW9uJztcblxuICAgIGxldCByYXRpb25hbGU6IHN0cmluZztcbiAgICBpZiAoc291cmNlRWxlbWVudCAmJiByZXN1bHQubWF0Y2hlZFBvbGljeSA9PT0gJ2NvbmZpcm0nKSB7XG4gICAgICAvLyBFbGVtZW50IHBvbGljeSBlbGV2YXRlZCB0aGlzIG9wZXJhdGlvbidzIGNvbmZpcm1hdGlvbiByZXF1aXJlbWVudFxuICAgICAgY29uc3QgcG9saWN5RGV0YWlsID0gcG9saWN5Py5yYXRpb25hbGUgPyBgICR7cG9saWN5LnJhdGlvbmFsZX1gIDogJyc7XG4gICAgICByYXRpb25hbGUgPSBgQWN0aXZlIGVsZW1lbnQgXCIke3NvdXJjZUVsZW1lbnR9XCIgcG9saWN5IHJlcXVpcmVzIGNvbmZpcm1hdGlvbiBmb3IgdGhpcyBvcGVyYXRpb24uJHtwb2xpY3lEZXRhaWx9YDtcbiAgICB9IGVsc2UgaWYgKHBvbGljeT8ucmF0aW9uYWxlKSB7XG4gICAgICAvLyBSb3V0ZS1sZXZlbCBkZWZhdWx0IHdpdGggZG9jdW1lbnRlZCByYXRpb25hbGVcbiAgICAgIHJhdGlvbmFsZSA9IHBvbGljeS5yYXRpb25hbGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVuZHBvaW50LWxldmVsIGRlZmF1bHQsIG5vIHNwZWNpZmljIHJhdGlvbmFsZVxuICAgICAgcmF0aW9uYWxlID0gJ1RoaXMgb3BlcmF0aW9uIG1vZGlmaWVzIGRhdGEgYW5kIHJlcXVpcmVzIGh1bWFuIGFwcHJvdmFsIGJlZm9yZSBwcm9jZWVkaW5nJztcbiAgICB9XG5cbiAgICAvLyBJc3N1ZSAjNjc0OiBTdXJmYWNlIGVsZW1lbnRzIHRoYXQgd2FudGVkIHRvIGF1dG8tYXBwcm92ZSBidXQgd2VyZSBvdmVycmlkZGVuXG4gICAgY29uc3QgY29uZmxpY3ROb3RlID0gY29uZmxpY3RpbmdFbGVtZW50cyAmJiBjb25mbGljdGluZ0VsZW1lbnRzLmxlbmd0aCA+IDBcbiAgICAgID8gYCAoTm90ZTogJHtjb25mbGljdGluZ0VsZW1lbnRzLm1hcChlID0+IGBcIiR7ZS5uYW1lfVwiYCkuam9pbignLCAnKX0gd291bGQgYXV0by1hcHByb3ZlIHRoaXMgYnV0ICR7Y29uZmxpY3RpbmdFbGVtZW50cy5sZW5ndGggPT09IDEgPyAnaXMnIDogJ2FyZSd9IG92ZXJyaWRkZW4gYnkgdGhlIGNvbmZpcm0gcG9saWN5LilgXG4gICAgICA6ICcnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFsbG93ZWQ6IGZhbHNlLFxuICAgICAgcGVybWlzc2lvbkxldmVsLFxuICAgICAgZXJyb3JDb2RlOiBHYXRla2VlcGVyRXJyb3JDb2RlLkNPTkZJUk1BVElPTl9SRVFVSVJFRCxcbiAgICAgIHJlYXNvbjogYE9wZXJhdGlvbiBcIiR7b3BlcmF0aW9ufVwiICR7bGV2ZWxMYWJlbH0uICR7cmF0aW9uYWxlfSR7Y29uZmxpY3ROb3RlfWAsXG4gICAgICBzdWdnZXN0aW9uOiAnVXNlIHRoZSBjb25maXJtYXRpb24gZGlhbG9nIHRvIGFwcHJvdmUgdGhpcyBvcGVyYXRpb24nLFxuICAgICAgY29uZmlybWF0aW9uUGVuZGluZzogdHJ1ZSxcbiAgICAgIHBvbGljeVNvdXJjZTogc291cmNlRWxlbWVudCA/ICdlbGVtZW50X3BvbGljeScgOiAnb3BlcmF0aW9uX2RlZmF1bHQnLFxuICAgIH07XG4gIH1cblxuICAvLyBIYW5kbGUgQVVUT19BUFBST1ZFXG4gIHJldHVybiB7XG4gICAgYWxsb3dlZDogdHJ1ZSxcbiAgICBwZXJtaXNzaW9uTGV2ZWwsXG4gICAgcmVhc29uOiBzb3VyY2VFbGVtZW50XG4gICAgICA/IGBPcGVyYXRpb24gXCIke29wZXJhdGlvbn1cIiBhdXRvLWFwcHJvdmVkIGJ5IGVsZW1lbnQgXCIke3NvdXJjZUVsZW1lbnR9XCJgXG4gICAgICA6IGBPcGVyYXRpb24gXCIke29wZXJhdGlvbn1cIiBhdXRvLWFwcHJvdmVkIGJ5IGRlZmF1bHQgcG9saWN5YCxcbiAgICBwb2xpY3lTb3VyY2U6IHNvdXJjZUVsZW1lbnQgPyAnZWxlbWVudF9wb2xpY3knIDogJ29wZXJhdGlvbl9kZWZhdWx0JyxcbiAgfTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhbmQgdmFsaWRhdGUgYSBHYXRla2VlcGVyIHBvbGljeSBmcm9tIGVsZW1lbnQgbWV0YWRhdGEuXG4gKlxuICogQHBhcmFtIG1ldGFkYXRhIC0gVGhlIGVsZW1lbnQgbWV0YWRhdGEgdG8gcGFyc2VcbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgcG9saWN5LCBvciB1bmRlZmluZWQgaWYgbm8gcG9saWN5IGlzIGRlZmluZWRcbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIHBvbGljeSBpcyBtYWxmb3JtZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRWxlbWVudFBvbGljeShcbiAgbWV0YWRhdGE6IHVua25vd25cbik6IEVsZW1lbnRHYXRla2VlcGVyUG9saWN5IHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFtZXRhZGF0YSB8fCB0eXBlb2YgbWV0YWRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG1ldGEgPSBtZXRhZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgZ2F0ZWtlZXBlciA9IG1ldGEuZ2F0ZWtlZXBlcjtcblxuICBpZiAoIWdhdGVrZWVwZXIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBnYXRla2VlcGVyICE9PSAnb2JqZWN0JyB8fCBnYXRla2VlcGVyID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGdhdGVrZWVwZXIgcG9saWN5OiBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgY29uc3QgcG9saWN5ID0gZ2F0ZWtlZXBlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvLyBWYWxpZGF0ZSBhbmQgZXh0cmFjdCBhbGxvdyBsaXN0XG4gIGNvbnN0IGFsbG93ID0gdmFsaWRhdGVTdHJpbmdBcnJheShwb2xpY3kuYWxsb3csICdhbGxvdycpO1xuICBjb25zdCBjb25maXJtID0gdmFsaWRhdGVTdHJpbmdBcnJheShwb2xpY3kuY29uZmlybSwgJ2NvbmZpcm0nKTtcbiAgY29uc3QgZGVueSA9IHZhbGlkYXRlU3RyaW5nQXJyYXkocG9saWN5LmRlbnksICdkZW55Jyk7XG5cbiAgLy8gVmFsaWRhdGUgc2NvcGUgcmVzdHJpY3Rpb25zXG4gIGxldCBzY29wZVJlc3RyaWN0aW9uczogRWxlbWVudEdhdGVrZWVwZXJQb2xpY3lbJ3Njb3BlUmVzdHJpY3Rpb25zJ107XG4gIGlmIChwb2xpY3kuc2NvcGVSZXN0cmljdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHBvbGljeS5zY29wZVJlc3RyaWN0aW9ucyAhPT0gJ29iamVjdCcgfHwgcG9saWN5LnNjb3BlUmVzdHJpY3Rpb25zID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZ2F0ZWtlZXBlciBwb2xpY3k6IHNjb3BlUmVzdHJpY3Rpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHNyID0gcG9saWN5LnNjb3BlUmVzdHJpY3Rpb25zIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHNjb3BlUmVzdHJpY3Rpb25zID0ge1xuICAgICAgYWxsb3dlZFR5cGVzOiB2YWxpZGF0ZVN0cmluZ0FycmF5KHNyLmFsbG93ZWRUeXBlcywgJ3Njb3BlUmVzdHJpY3Rpb25zLmFsbG93ZWRUeXBlcycpLFxuICAgICAgYmxvY2tlZFR5cGVzOiB2YWxpZGF0ZVN0cmluZ0FycmF5KHNyLmJsb2NrZWRUeXBlcywgJ3Njb3BlUmVzdHJpY3Rpb25zLmJsb2NrZWRUeXBlcycpLFxuICAgIH07XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBleHRlcm5hbCByZXN0cmljdGlvbnMgKElzc3VlICM2MjUgUGhhc2UgMilcbiAgbGV0IGV4dGVybmFsUmVzdHJpY3Rpb25zOiBFbGVtZW50R2F0ZWtlZXBlclBvbGljeVsnZXh0ZXJuYWxSZXN0cmljdGlvbnMnXTtcbiAgaWYgKHBvbGljeS5leHRlcm5hbFJlc3RyaWN0aW9ucykge1xuICAgIGlmICh0eXBlb2YgcG9saWN5LmV4dGVybmFsUmVzdHJpY3Rpb25zICE9PSAnb2JqZWN0JyB8fCBwb2xpY3kuZXh0ZXJuYWxSZXN0cmljdGlvbnMgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBnYXRla2VlcGVyIHBvbGljeTogZXh0ZXJuYWxSZXN0cmljdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICB9XG4gICAgY29uc3QgZXIgPSBwb2xpY3kuZXh0ZXJuYWxSZXN0cmljdGlvbnMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaWYgKCFlci5kZXNjcmlwdGlvbiB8fCB0eXBlb2YgZXIuZGVzY3JpcHRpb24gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZ2F0ZWtlZXBlciBwb2xpY3k6IGV4dGVybmFsUmVzdHJpY3Rpb25zLmRlc2NyaXB0aW9uIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICAgIH1cbiAgICBjb25zdCBkZW55UGF0dGVybnMgPSB2YWxpZGF0ZVN0cmluZ0FycmF5KGVyLmRlbnlQYXR0ZXJucywgJ2V4dGVybmFsUmVzdHJpY3Rpb25zLmRlbnlQYXR0ZXJucycpO1xuICAgIGNvbnN0IGNvbmZpcm1QYXR0ZXJucyA9IHZhbGlkYXRlU3RyaW5nQXJyYXkoZXIuY29uZmlybVBhdHRlcm5zLCAnZXh0ZXJuYWxSZXN0cmljdGlvbnMuY29uZmlybVBhdHRlcm5zJyk7XG4gICAgY29uc3QgYWxsb3dQYXR0ZXJucyA9IHZhbGlkYXRlU3RyaW5nQXJyYXkoZXIuYWxsb3dQYXR0ZXJucywgJ2V4dGVybmFsUmVzdHJpY3Rpb25zLmFsbG93UGF0dGVybnMnKTtcbiAgICBpZiAoZGVueVBhdHRlcm5zKSB2YWxpZGF0ZVBhdHRlcm5TdHJpbmdzKGRlbnlQYXR0ZXJucywgJ2V4dGVybmFsUmVzdHJpY3Rpb25zLmRlbnlQYXR0ZXJucycpO1xuICAgIGlmIChjb25maXJtUGF0dGVybnMpIHZhbGlkYXRlUGF0dGVyblN0cmluZ3MoY29uZmlybVBhdHRlcm5zLCAnZXh0ZXJuYWxSZXN0cmljdGlvbnMuY29uZmlybVBhdHRlcm5zJyk7XG4gICAgaWYgKGFsbG93UGF0dGVybnMpIHZhbGlkYXRlUGF0dGVyblN0cmluZ3MoYWxsb3dQYXR0ZXJucywgJ2V4dGVybmFsUmVzdHJpY3Rpb25zLmFsbG93UGF0dGVybnMnKTtcbiAgICAvLyBWYWxpZGF0ZSBhcHByb3ZhbFBvbGljeSAoSXNzdWUgIzYyNSBQaGFzZSAzKVxuICAgIGxldCBhcHByb3ZhbFBvbGljeTogQ2xpQXBwcm92YWxQb2xpY3kgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGVyLmFwcHJvdmFsUG9saWN5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgZXIuYXBwcm92YWxQb2xpY3kgIT09ICdvYmplY3QnIHx8IGVyLmFwcHJvdmFsUG9saWN5ID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBnYXRla2VlcGVyIHBvbGljeTogZXh0ZXJuYWxSZXN0cmljdGlvbnMuYXBwcm92YWxQb2xpY3kgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFwID0gZXIuYXBwcm92YWxQb2xpY3kgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICAgIC8vIFZhbGlkYXRlIHJlcXVpcmVBcHByb3ZhbFxuICAgICAgbGV0IHJlcXVpcmVBcHByb3ZhbDogKCdtb2RlcmF0ZScgfCAnZGFuZ2Vyb3VzJylbXSB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChhcC5yZXF1aXJlQXBwcm92YWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXAucmVxdWlyZUFwcHJvdmFsKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBnYXRla2VlcGVyIHBvbGljeTogZXh0ZXJuYWxSZXN0cmljdGlvbnMuYXBwcm92YWxQb2xpY3kucmVxdWlyZUFwcHJvdmFsIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWxpZExldmVscyA9IG5ldyBTZXQoWydtb2RlcmF0ZScsICdkYW5nZXJvdXMnXSk7XG4gICAgICAgIGZvciAoY29uc3QgbGV2ZWwgb2YgYXAucmVxdWlyZUFwcHJvdmFsKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBsZXZlbCAhPT0gJ3N0cmluZycgfHwgIXZhbGlkTGV2ZWxzLmhhcyhsZXZlbCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBnYXRla2VlcGVyIHBvbGljeTogZXh0ZXJuYWxSZXN0cmljdGlvbnMuYXBwcm92YWxQb2xpY3kucmVxdWlyZUFwcHJvdmFsIGNvbnRhaW5zIGludmFsaWQgdmFsdWUgXCIke2xldmVsfVwiLiBNdXN0IGJlIFwibW9kZXJhdGVcIiBvciBcImRhbmdlcm91c1wiLmApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXF1aXJlQXBwcm92YWwgPSBhcC5yZXF1aXJlQXBwcm92YWwgYXMgKCdtb2RlcmF0ZScgfCAnZGFuZ2Vyb3VzJylbXTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgZGVmYXVsdFNjb3BlXG4gICAgICBsZXQgZGVmYXVsdFNjb3BlOiAnc2luZ2xlJyB8ICd0b29sX3Nlc3Npb24nIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKGFwLmRlZmF1bHRTY29wZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChhcC5kZWZhdWx0U2NvcGUgIT09ICdzaW5nbGUnICYmIGFwLmRlZmF1bHRTY29wZSAhPT0gJ3Rvb2xfc2Vzc2lvbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZ2F0ZWtlZXBlciBwb2xpY3k6IGV4dGVybmFsUmVzdHJpY3Rpb25zLmFwcHJvdmFsUG9saWN5LmRlZmF1bHRTY29wZSBtdXN0IGJlIFwic2luZ2xlXCIgb3IgXCJ0b29sX3Nlc3Npb25cIiwgZ290IFwiJHthcC5kZWZhdWx0U2NvcGV9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0U2NvcGUgPSBhcC5kZWZhdWx0U2NvcGU7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIHR0bFNlY29uZHNcbiAgICAgIGxldCB0dGxTZWNvbmRzOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoYXAudHRsU2Vjb25kcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYXAudHRsU2Vjb25kcyAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0Zpbml0ZShhcC50dGxTZWNvbmRzKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBnYXRla2VlcGVyIHBvbGljeTogZXh0ZXJuYWxSZXN0cmljdGlvbnMuYXBwcm92YWxQb2xpY3kudHRsU2Vjb25kcyBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFwLnR0bFNlY29uZHMgPCAzMCB8fCBhcC50dGxTZWNvbmRzID4gMzYwMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBnYXRla2VlcGVyIHBvbGljeTogZXh0ZXJuYWxSZXN0cmljdGlvbnMuYXBwcm92YWxQb2xpY3kudHRsU2Vjb25kcyBtdXN0IGJlIGJldHdlZW4gMzAgYW5kIDM2MDAsIGdvdCAke2FwLnR0bFNlY29uZHN9YCk7XG4gICAgICAgIH1cbiAgICAgICAgdHRsU2Vjb25kcyA9IGFwLnR0bFNlY29uZHM7XG4gICAgICB9XG5cbiAgICAgIGFwcHJvdmFsUG9saWN5ID0geyByZXF1aXJlQXBwcm92YWwsIGRlZmF1bHRTY29wZSwgdHRsU2Vjb25kcyB9O1xuICAgIH1cblxuICAgIGV4dGVybmFsUmVzdHJpY3Rpb25zID0ge1xuICAgICAgZGVzY3JpcHRpb246IGVyLmRlc2NyaXB0aW9uIGFzIHN0cmluZyxcbiAgICAgIGRlbnlQYXR0ZXJucyxcbiAgICAgIGNvbmZpcm1QYXR0ZXJucyxcbiAgICAgIGFsbG93UGF0dGVybnMsXG4gICAgICBhcHByb3ZhbFBvbGljeSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhbGxvdyxcbiAgICBjb25maXJtLFxuICAgIGRlbnksXG4gICAgc2NvcGVSZXN0cmljdGlvbnMsXG4gICAgZXh0ZXJuYWxSZXN0cmljdGlvbnMsXG4gIH07XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYXV0aG9yZWQgZ2F0ZWtlZXBlciBpbnB1dCBiZWZvcmUgc2F2ZS5cbiAqXG4gKiBBdXRob3JpbmctdGltZSB2YWxpZGF0aW9uIGlzIHN0cmljdGVyIHRoYW4gbG9hZC10aW1lIHNhbml0aXphdGlvbjogaXQgc2hvdWxkXG4gKiByZWplY3QgbWlzcGxhY2VkIHBvbGljeSBibG9ja3MgaW5zdGVhZCBvZiBzaWxlbnRseSBzYXZpbmcgYW4gZWxlbWVudCB0aGF0XG4gKiBsYXRlciBhcHBlYXJzIGFjdGl2ZSBidXQgaGFzIG5vbi1lbmZvcmNlYWJsZSBleHRlcm5hbCByZXN0cmljdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRHYXRla2VlcGVyQXV0aG9yaW5nRXJyb3JzKFxuICByZWNvcmQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkXG4pOiBzdHJpbmdbXSB7XG4gIGlmICghcmVjb3JkIHx8IHR5cGVvZiByZWNvcmQgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChPYmplY3QuaGFzT3duKHJlY29yZCwgJ2V4dGVybmFsUmVzdHJpY3Rpb25zJykpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgICdJbnZhbGlkIGdhdGVrZWVwZXIgcG9saWN5OiBleHRlcm5hbFJlc3RyaWN0aW9ucyBtdXN0IGJlIG5lc3RlZCB1bmRlciBnYXRla2VlcGVyLmV4dGVybmFsUmVzdHJpY3Rpb25zJ1xuICAgICk7XG4gIH1cblxuICBpZiAocmVjb3JkLmdhdGVrZWVwZXIgIT09IHVuZGVmaW5lZCkge1xuICAgIHRyeSB7XG4gICAgICBwYXJzZUVsZW1lbnRQb2xpY3koeyBnYXRla2VlcGVyOiByZWNvcmQuZ2F0ZWtlZXBlciB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3JzLnB1c2goZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHRoYXQgYSB2YWx1ZSBpcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB2YWxpZGF0ZVxuICogQHBhcmFtIGZpZWxkTmFtZSAtIFRoZSBmaWVsZCBuYW1lIGZvciBlcnJvciBtZXNzYWdlc1xuICogQHJldHVybnMgVGhlIHZhbGlkYXRlZCBhcnJheSwgb3IgdW5kZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU3RyaW5nQXJyYXkoXG4gIHZhbHVlOiB1bmtub3duLFxuICBmaWVsZE5hbWU6IHN0cmluZ1xuKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGdhdGVrZWVwZXIgcG9saWN5OiAke2ZpZWxkTmFtZX0gbXVzdCBiZSBhbiBhcnJheWApO1xuICB9XG5cbiAgaWYgKCF2YWx1ZS5ldmVyeSgoaXRlbSk6IGl0ZW0gaXMgc3RyaW5nID0+IHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZ2F0ZWtlZXBlciBwb2xpY3k6ICR7ZmllbGROYW1lfSBtdXN0IGNvbnRhaW4gb25seSBzdHJpbmdzYCk7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgcGF0dGVybiBzdHJpbmdzIGZvciBsZW5ndGggYW5kIG5vbi1lbXB0aW5lc3MuXG4gKlxuICogQHBhcmFtIHBhdHRlcm5zIC0gQXJyYXkgb2YgcGF0dGVybiBzdHJpbmdzIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gZmllbGROYW1lIC0gRmllbGQgbmFtZSBmb3IgZXJyb3IgbWVzc2FnZXNcbiAqIEB0aHJvd3MgRXJyb3IgaWYgYW55IHBhdHRlcm4gaXMgZW1wdHkgb3IgZXhjZWVkcyBNQVhfR0xPQl9QQVRURVJOX0xFTkdUSFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVBhdHRlcm5TdHJpbmdzKFxuICBwYXR0ZXJuczogc3RyaW5nW10sXG4gIGZpZWxkTmFtZTogc3RyaW5nXG4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5zKSB7XG4gICAgaWYgKCFwYXR0ZXJuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZ2F0ZWtlZXBlciBwb2xpY3k6ICR7ZmllbGROYW1lfSBjb250YWlucyBhbiBlbXB0eSBwYXR0ZXJuIHN0cmluZ2ApO1xuICAgIH1cbiAgICBpZiAocGF0dGVybi5sZW5ndGggPiBNQVhfR0xPQl9QQVRURVJOX0xFTkdUSCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGdhdGVrZWVwZXIgcG9saWN5OiAke2ZpZWxkTmFtZX0gcGF0dGVybiBleGNlZWRzIG1heGltdW0gbGVuZ3RoIG9mICR7TUFYX0dMT0JfUEFUVEVSTl9MRU5HVEh9IGNoYXJhY3RlcnNgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBLbm93biBDTEkgdG9vbCBuYW1lcyB1c2VkIGluIGV4dGVybmFsUmVzdHJpY3Rpb25zIHBhdHRlcm5zLlxuICogUGF0dGVybnMgc2hvdWxkIHN0YXJ0IHdpdGggb25lIG9mIHRoZXNlIGZvbGxvd2VkIGJ5ICc6JyB0byBiZSBlZmZlY3RpdmUuXG4gKi9cbmNvbnN0IEtOT1dOX1RPT0xfUFJFRklYRVMgPSBuZXcgU2V0KFtcbiAgJ0Jhc2gnLCAnRWRpdCcsICdXcml0ZScsICdSZWFkJywgJ0dsb2InLCAnR3JlcCcsXG4gICdXZWJGZXRjaCcsICdXZWJTZWFyY2gnLCAnTm90ZWJvb2tFZGl0Jyxcbl0pO1xuXG4vKipcbiAqIFJlZ2V4IGNoYXJhY3RlcnMgdGhhdCBoYXZlIG5vIG1lYW5pbmcgaW4gZ2xvYiBzeW50YXguXG4gKiBVc2VycyB3aG8gaW5jbHVkZSB0aGVzZSBsaWtlbHkgaW50ZW5kIHJlZ2V4IGJ1dCB0aGUgbWF0Y2hlciBvbmx5IHN1cHBvcnRzICogYW5kID8uXG4gKi9cbmNvbnN0IFJFR0VYX1NZTlRBWF9QQVRURVJOID0gL1t8KCl7fVtcXF1cXFxcK14kXS87XG5cbi8qKlxuICogQW5hbHl6ZSBleHRlcm5hbFJlc3RyaWN0aW9ucyBwYXR0ZXJucyBmb3IgY29tbW9uIG1pc3Rha2VzIGFuZCBzdXNwaWNpb3VzIHN5bnRheC5cbiAqXG4gKiBSZXR1cm5zIG5vbi1mYXRhbCB3YXJuaW5ncyB0byBoZWxwIExMTXMgYW5kIHVzZXJzIHdyaXRlIGVmZmVjdGl2ZSBwYXR0ZXJucy5cbiAqIERvZXMgTk9UIHRocm93IOKAlCB2YWxpZGF0aW9uIGVycm9ycyBhcmUgaGFuZGxlZCBieSB7QGxpbmsgdmFsaWRhdGVQYXR0ZXJuU3RyaW5nc30uXG4gKlxuICogQ2hlY2tzIHBlcmZvcm1lZCAoSXNzdWUgIzE2NjQpOlxuICogLSBNaXNzaW5nIHRvb2wgcHJlZml4IChwYXR0ZXJuIGRvZXNuJ3Qgc3RhcnQgd2l0aCBUb29sTmFtZTopXG4gKiAtIE92ZXJseSBicm9hZCBwYXR0ZXJucyAoYmFyZSBgKmAgb3IgYFRvb2xOYW1lOipgKVxuICogLSBSZWdleCBzeW50YXggdGhhdCB3b24ndCB3b3JrIGluIGdsb2IgbWF0Y2hpbmdcbiAqIC0gTGVhZGluZy90cmFpbGluZyB3aGl0ZXNwYWNlXG4gKlxuICogQHBhcmFtIHBhdHRlcm5zIC0gQXJyYXkgb2YgcGF0dGVybiBzdHJpbmdzIHRvIGFuYWx5emVcbiAqIEBwYXJhbSBmaWVsZE5hbWUgLSBGaWVsZCBuYW1lIGZvciB3YXJuaW5nIG1lc3NhZ2VzXG4gKiBAcmV0dXJucyBBcnJheSBvZiB3YXJuaW5nIG1lc3NhZ2VzIChlbXB0eSBpZiBubyBpc3N1ZXMgZm91bmQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbmFseXplUGF0dGVyblN5bnRheChcbiAgcGF0dGVybnM6IHN0cmluZ1tdLFxuICBmaWVsZE5hbWU6IHN0cmluZ1xuKTogc3RyaW5nW10ge1xuICBjb25zdCB3YXJuaW5nczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5zKSB7XG4gICAgYW5hbHl6ZU9uZVBhdHRlcm4ocGF0dGVybiwgZmllbGROYW1lLCB3YXJuaW5ncyk7XG4gIH1cbiAgcmV0dXJuIHdhcm5pbmdzO1xufVxuXG4vKipcbiAqIEFuYWx5emUgYSBzaW5nbGUgcGF0dGVybiBzdHJpbmcgYW5kIGFwcGVuZCBhbnkgd2FybmluZ3MgZm91bmQuXG4gKiBFeHRyYWN0ZWQgZnJvbSB7QGxpbmsgYW5hbHl6ZVBhdHRlcm5TeW50YXh9IHRvIHJlZHVjZSBjb2duaXRpdmUgY29tcGxleGl0eS5cbiAqL1xuZnVuY3Rpb24gYW5hbHl6ZU9uZVBhdHRlcm4oXG4gIHBhdHRlcm46IHN0cmluZyxcbiAgZmllbGROYW1lOiBzdHJpbmcsXG4gIHdhcm5pbmdzOiBzdHJpbmdbXVxuKTogdm9pZCB7XG4gIC8vIENoZWNrIGxlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZVxuICBpZiAocGF0dGVybiAhPT0gcGF0dGVybi50cmltKCkpIHtcbiAgICB3YXJuaW5ncy5wdXNoKFxuICAgICAgYCR7ZmllbGROYW1lfSBwYXR0ZXJuICcke3BhdHRlcm59JyBoYXMgbGVhZGluZy90cmFpbGluZyB3aGl0ZXNwYWNlIOKAlCB0aGlzIG1heSBwcmV2ZW50IGV4cGVjdGVkIG1hdGNoZXNgXG4gICAgKTtcbiAgfVxuXG4gIC8vIENoZWNrIGZvciBiYXJlIHdpbGRjYXJkIChtYXRjaGVzIGV2ZXJ5dGhpbmcpXG4gIGlmIChwYXR0ZXJuID09PSAnKicpIHtcbiAgICB3YXJuaW5ncy5wdXNoKFxuICAgICAgYCR7ZmllbGROYW1lfSBwYXR0ZXJuICcqJyBtYXRjaGVzIGV2ZXJ5dGhpbmcg4oCUIHRoaXMgaXMgbGlrZWx5IHVuaW50ZW50aW9uYWxgXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBDaGVjayBmb3IgdG9vbCBwcmVmaXggYW5kIHJlbGF0ZWQgaXNzdWVzXG4gIGNvbnN0IGNvbG9uSW5kZXggPSBwYXR0ZXJuLmluZGV4T2YoJzonKTtcbiAgaWYgKGNvbG9uSW5kZXggPT09IC0xKSB7XG4gICAgd2FybmluZ3MucHVzaChcbiAgICAgIGAke2ZpZWxkTmFtZX0gcGF0dGVybiAnJHtwYXR0ZXJufScgaGFzIG5vIHRvb2wgcHJlZml4IChlLmcuLCAnQmFzaDonLCAnRWRpdDonKS4gYCArXG4gICAgICBgUGF0dGVybnMgYXJlIG1hdGNoZWQgYWdhaW5zdCAnVG9vbE5hbWU6aW5wdXQnIHN0cmluZ3MgYW5kIHdpbGwgbm90IG1hdGNoIHdpdGhvdXQgYSBwcmVmaXguYFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgY2hlY2tUb29sUHJlZml4KHBhdHRlcm4sIGNvbG9uSW5kZXgsIGZpZWxkTmFtZSwgd2FybmluZ3MpO1xuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIHJlZ2V4IHN5bnRheCB0aGF0IHdvbid0IHdvcmsgaW4gZ2xvYlxuICBjb25zdCByZWdleENoYXJzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgY2ggb2YgcGF0dGVybikge1xuICAgIGlmIChSRUdFWF9TWU5UQVhfUEFUVEVSTi50ZXN0KGNoKSkgcmVnZXhDaGFycy5hZGQoY2gpO1xuICB9XG4gIGlmIChyZWdleENoYXJzLnNpemUgPiAwKSB7XG4gICAgd2FybmluZ3MucHVzaChcbiAgICAgIGAke2ZpZWxkTmFtZX0gcGF0dGVybiAnJHtwYXR0ZXJufScgY29udGFpbnMgcmVnZXggc3ludGF4ICcke1suLi5yZWdleENoYXJzXS5qb2luKCcsICcpfScg4oCUIGAgK1xuICAgICAgYG9ubHkgZ2xvYiB3aWxkY2FyZHMgKCogYW5kID8pIGFyZSBzdXBwb3J0ZWRgXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIHRvb2wgcHJlZml4IHZhbGlkaXR5IGFuZCBicm9hZG5lc3MgZm9yIGEgcGF0dGVybiB0aGF0IGNvbnRhaW5zICc6Jy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tUb29sUHJlZml4KFxuICBwYXR0ZXJuOiBzdHJpbmcsXG4gIGNvbG9uSW5kZXg6IG51bWJlcixcbiAgZmllbGROYW1lOiBzdHJpbmcsXG4gIHdhcm5pbmdzOiBzdHJpbmdbXVxuKTogdm9pZCB7XG4gIGNvbnN0IHByZWZpeCA9IHBhdHRlcm4uc2xpY2UoMCwgY29sb25JbmRleCk7XG4gIGNvbnN0IGFmdGVyQ29sb24gPSBwYXR0ZXJuLnNsaWNlKGNvbG9uSW5kZXggKyAxKTtcblxuICAvLyBDaGVjayBmb3IgdW5rbm93biB0b29sIHByZWZpeFxuICBpZiAoIUtOT1dOX1RPT0xfUFJFRklYRVMuaGFzKHByZWZpeCkgJiYgIXByZWZpeC5zdGFydHNXaXRoKCdtY3BfJykpIHtcbiAgICB3YXJuaW5ncy5wdXNoKFxuICAgICAgYCR7ZmllbGROYW1lfSBwYXR0ZXJuICcke3BhdHRlcm59JyB1c2VzIHVua25vd24gdG9vbCBwcmVmaXggJyR7cHJlZml4fScuIGAgK1xuICAgICAgYEtub3duIHByZWZpeGVzOiAke1suLi5LTk9XTl9UT09MX1BSRUZJWEVTXS5qb2luKCcsICcpfS4gTUNQIHRvb2xzIHVzZSAnbWNwXycgcHJlZml4LmBcbiAgICApO1xuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIG92ZXJseSBicm9hZCBUb29sTmFtZToqIHBhdHRlcm5cbiAgaWYgKGFmdGVyQ29sb24gPT09ICcqJykge1xuICAgIHdhcm5pbmdzLnB1c2goXG4gICAgICBgJHtmaWVsZE5hbWV9IHBhdHRlcm4gJyR7cGF0dGVybn0nIG1hdGNoZXMgQUxMICR7cHJlZml4fSBvcGVyYXRpb25zIOKAlCB2ZXJpZnkgdGhpcyBpcyBpbnRlbnRpb25hbGBcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYW5kIHNhbml0aXplIGEgZ2F0ZWtlZXBlciBwb2xpY3kgZHVyaW5nIGVsZW1lbnQgZGVzZXJpYWxpemF0aW9uLlxuICpcbiAqIFJldHVybnMgYSB2YWxpZGF0ZWQge0BsaW5rIEVsZW1lbnRHYXRla2VlcGVyUG9saWN5fSBpZiB0aGUgcmF3IGRhdGEgaXNcbiAqIHN0cnVjdHVyYWxseSB2YWxpZCwgb3IgYHVuZGVmaW5lZGAgaWYgdGhlIGRhdGEgaXMgYWJzZW50LCBmYWxzeSwgb3JcbiAqIG1hbGZvcm1lZC4gTWFsZm9ybWVkIHBvbGljaWVzIGFyZSBsb2dnZWQgYXMgc2VjdXJpdHkgZXZlbnRzIGFuZCBzdHJpcHBlZFxuICogc28gdGhleSBuZXZlciByZWFjaCB0aGUgZW5mb3JjZW1lbnQgcGlwZWxpbmUuXG4gKlxuICogVXNlIHRoaXMgYXQgZXZlcnkgZGVzZXJpYWxpemF0aW9uIGJvdW5kYXJ5IChtYW5hZ2VyIGBwYXJzZU1ldGFkYXRhYCAvXG4gKiBgc2FuaXRpemVNZXRhZGF0YWAgLyBgcGFyc2VNZW1vcnlGaWxlYCkgdG8gZ3VhcmFudGVlIHRoYXQgb25seSB3ZWxsLWZvcm1lZFxuICogcG9saWNpZXMgc3Vydml2ZSBsb2FkaW5nLlxuICpcbiAqIEBwYXJhbSByYXdQb2xpY3kgLSBUaGUgcmF3IGdhdGVrZWVwZXIgdmFsdWUgZnJvbSBwYXJzZWQgWUFNTC9KU09OXG4gKiBAcGFyYW0gZWxlbWVudE5hbWUgLSBFbGVtZW50IG5hbWUgZm9yIGRpYWdub3N0aWMgbG9nZ2luZ1xuICogQHBhcmFtIGVsZW1lbnRUeXBlIC0gRWxlbWVudCB0eXBlIGZvciBkaWFnbm9zdGljIGxvZ2dpbmdcbiAqIEByZXR1cm5zIFZhbGlkYXRlZCBwb2xpY3kgb3IgdW5kZWZpbmVkXG4gKlxuICogQHNpbmNlIElzc3VlICM1MjQg4oCUIFJ1bnRpbWUgdmFsaWRhdGlvbiBmb3IgYWxsIGVsZW1lbnQgdHlwZXNcbiAqL1xuLyoqXG4gKiBHYXRla2VlcGVyIGluZnJhc3RydWN0dXJlIG9wZXJhdGlvbnMg4oCUIHR3byByZWxhdGVkIHNldHMgd2l0aCBkaXN0aW5jdCBwdXJwb3Nlcy5cbiAqXG4gKiBVTkdBVEFCTEVfT1BFUkFUSU9OUzogT3BlcmF0aW9ucyB0aGF0IG11c3QgTkVWRVIgYXBwZWFyIGluIGVsZW1lbnQgcG9saWN5IGxpc3RzLlxuICogVGhlc2UgYXJlIHB1cmUgaW50ZXJuYWwgcGx1bWJpbmcg4oCUIGdhdGluZyB0aGVtIHNlcnZlcyBubyBzZWN1cml0eSBwdXJwb3NlIGFuZFxuICogYnJlYWtzIGNyaXRpY2FsIGZsb3dzICh2ZXJpZmljYXRpb24sIENMSSBhcHByb3ZhbCwgcGVybWlzc2lvbiBldmFsdWF0aW9uKS5cbiAqIFN0cmlwcGVkIGZyb20gQUxMIHBvbGljeSBsaXN0cyAoYWxsb3csIGNvbmZpcm0sIGRlbnkpIGR1cmluZyBzYW5pdGl6YXRpb24uXG4gKlxuICogR0FURUtFRVBFUl9JTkZSQV9PUEVSQVRJT05TOiBPcGVyYXRpb25zIHRoYXQgc2tpcCBMYXllciAyIChlbGVtZW50IHBvbGljeVxuICogcmVzb2x1dGlvbikgZHVyaW5nIHByaW1hcnkgZW5mb3JjZW1lbnQuIFRoaXMgaXMgYSBTVVBFUlNFVCBvZiBVTkdBVEFCTEVfT1BFUkFUSU9OU1xuICog4oCUIGl0IGFkZHMgY29uZmlybV9vcGVyYXRpb24sIHdoaWNoIElTIGEgdmFsaWQgcG9saWN5IHRhcmdldCAoZGVueSA9IG51Y2xlYXIgc2FuZGJveClcbiAqIGJ1dCBtdXN0IG5vdCBiZSBnYXRlZCB0aHJvdWdoIHRoZSBub3JtYWwgZW5mb3JjZSgpIHBhdGggKHRoYXQgY3JlYXRlcyB0aGVcbiAqIGNhc2NhZGluZyBjb25maXJtYXRpb24gbG9vcCBmcm9tIElzc3VlICM3NTgpLiBjb25maXJtX29wZXJhdGlvbidzIGVsZW1lbnQgcG9saWNpZXNcbiAqIGFyZSBlbmZvcmNlZCB0aHJvdWdoIGEgc2VwYXJhdGUgY2hlY2sgaW4gdGhlIGNvbmZpcm0gaGFuZGxlciBpbnN0ZWFkLlxuICpcbiAqIFJlbGF0aW9uc2hpcDogR0FURUtFRVBFUl9JTkZSQV9PUEVSQVRJT05TID0gVU5HQVRBQkxFX09QRVJBVElPTlMgKyBjb25maXJtX29wZXJhdGlvblxuICogVGhpcyBkZXJpdmF0aW9uIGlzIGV4cGxpY2l0IGluIGNvZGUgdG8gcHJldmVudCB0aGUgc2V0cyBmcm9tIGRyaWZ0aW5nIGFwYXJ0LlxuICovXG5jb25zdCBVTkdBVEFCTEVfT1BFUkFUSU9OUyA9IG5ldyBTZXQoW1xuICAndmVyaWZ5X2NoYWxsZW5nZScsXG4gICdhcHByb3ZlX2NsaV9wZXJtaXNzaW9uJyxcbiAgJ3Blcm1pc3Npb25fcHJvbXB0Jyxcbl0pO1xuXG4vKiogRGVyaXZlZCBmcm9tIFVOR0FUQUJMRV9PUEVSQVRJT05TICsgY29uZmlybV9vcGVyYXRpb24uIFNlZSBibG9jayBjb21tZW50IGFib3ZlLiAqL1xuY29uc3QgR0FURUtFRVBFUl9JTkZSQV9PUEVSQVRJT05TID0gbmV3IFNldChbXG4gIC4uLlVOR0FUQUJMRV9PUEVSQVRJT05TLFxuICAnY29uZmlybV9vcGVyYXRpb24nLFxuXSk7XG5cbi8qKlxuICogQ2hlY2sgaWYgYW4gb3BlcmF0aW9uIGlzIGEgZ2F0ZWtlZXBlciBpbmZyYXN0cnVjdHVyZSBvcGVyYXRpb24gdGhhdCBzaG91bGRcbiAqIHNraXAgZWxlbWVudCBwb2xpY3kgZXZhbHVhdGlvbiBpbiB0aGUgcHJpbWFyeSBlbmZvcmNlbWVudCBwYXRoLlxuICogRXhwb3J0ZWQgZm9yIHVzZSBieSBNQ1BBUUxIYW5kbGVyLiBJc3N1ZSAjNzU4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNHYXRla2VlcGVySW5mcmFPcGVyYXRpb24ob3BlcmF0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIEdBVEVLRUVQRVJfSU5GUkFfT1BFUkFUSU9OUy5oYXMob3BlcmF0aW9uKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhbnkgYWN0aXZlIGVsZW1lbnRzIGRlbnkgY29uZmlybV9vcGVyYXRpb24gKG51Y2xlYXIgc2FuZGJveCkuXG4gKiBSZXR1cm5zIHRoZSBkZW55aW5nIGVsZW1lbnQgbmFtZSBpZiBmb3VuZCwgdW5kZWZpbmVkIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRDb25maXJtRGVueWluZ0VsZW1lbnQoXG4gIGFjdGl2ZUVsZW1lbnRzOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT5cbik6IHsgbmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBhY3RpdmVFbGVtZW50cykge1xuICAgIGNvbnN0IGdhdGVrZWVwZXIgPSBlbGVtZW50Lm1ldGFkYXRhPy5nYXRla2VlcGVyIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGRlbnlMaXN0ID0gZ2F0ZWtlZXBlcj8uZGVueTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkZW55TGlzdCkgJiYgZGVueUxpc3QuaW5jbHVkZXMoJ2NvbmZpcm1fb3BlcmF0aW9uJykpIHtcbiAgICAgIHJldHVybiB7IG5hbWU6IGVsZW1lbnQubmFtZSwgdHlwZTogZWxlbWVudC50eXBlIH07XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYW55IGFjdGl2ZSBlbGVtZW50cyBoYXZlIGNvbmZpcm1fb3BlcmF0aW9uIGluIHRoZWlyIGNvbmZpcm0gbGlzdCAoYWR2aXNvcnkpLlxuICogUmV0dXJucyB0aGUgZWxlbWVudCBuYW1lcyB0aGF0IHJlcXVlc3QgYWRkaXRpb25hbCBzY3J1dGlueS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRDb25maXJtQWR2aXNvcnlFbGVtZW50cyhcbiAgYWN0aXZlRWxlbWVudHM6IEFycmF5PHsgbmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PlxuKTogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZyB9PiB7XG4gIGNvbnN0IGFkdmlzb3JpZXM6IEFycmF5PHsgbmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmcgfT4gPSBbXTtcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIGFjdGl2ZUVsZW1lbnRzKSB7XG4gICAgY29uc3QgZ2F0ZWtlZXBlciA9IGVsZW1lbnQubWV0YWRhdGE/LmdhdGVrZWVwZXIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgY29uZmlybUxpc3QgPSBnYXRla2VlcGVyPy5jb25maXJtO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbmZpcm1MaXN0KSAmJiBjb25maXJtTGlzdC5pbmNsdWRlcygnY29uZmlybV9vcGVyYXRpb24nKSkge1xuICAgICAgYWR2aXNvcmllcy5wdXNoKHsgbmFtZTogZWxlbWVudC5uYW1lLCB0eXBlOiBlbGVtZW50LnR5cGUgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBhZHZpc29yaWVzO1xufVxuXG4vKipcbiAqIFN0cmlwIHVuZ2F0YWJsZSBvcGVyYXRpb25zIGZyb20gYSBwb2xpY3kgbGlzdCBhbmQgbG9nIHdhcm5pbmdzLlxuICogUmV0dXJucyB0aGUgZmlsdGVyZWQgbGlzdCAobWF5IGJlIGVtcHR5KS5cbiAqXG4gKiBOb3RlOiBjb25maXJtX29wZXJhdGlvbiBpcyBOT1Qgc3RyaXBwZWQgZnJvbSBkZW55IGxpc3RzIOKAlCBpdCdzIGEgbGVnaXRpbWF0ZVxuICogc2FuZGJveCBtZWNoYW5pc20uIEl0IElTIHN0cmlwcGVkIGZyb20gYWxsb3cvY29uZmlybSBsaXN0cyBzaW5jZSB0aG9zZSBhcmVcbiAqIGhhbmRsZWQgdGhyb3VnaCBhZHZpc29yeSBtZXNzYWdpbmcsIG5vdCB0aHJvdWdoIGVuZm9yY2UoKS5cbiAqL1xuZnVuY3Rpb24gc3RyaXBVbmdhdGFibGUoXG4gIG9wZXJhdGlvbnM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuICBsaXN0TmFtZTogc3RyaW5nLFxuICBlbGVtZW50TmFtZTogc3RyaW5nLFxuICBlbGVtZW50VHlwZTogc3RyaW5nLFxuKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICBpZiAoIW9wZXJhdGlvbnM/Lmxlbmd0aCkgcmV0dXJuIG9wZXJhdGlvbnM7XG5cbiAgLy8gY29uZmlybV9vcGVyYXRpb24gaW4gZGVueSBsaXN0cyA9IG51Y2xlYXIgc2FuZGJveCAocHJlc2VydmUpXG4gIC8vIGNvbmZpcm1fb3BlcmF0aW9uIGluIGNvbmZpcm0gbGlzdHMgPSBhZHZpc29yeSBtYXJrZXIgKHByZXNlcnZlIOKAlCBpbmVydCBpbiBlbmZvcmNlIHBhdGgsXG4gIC8vICAgcmVhZCBhdCBydW50aW1lIGJ5IGZpbmRDb25maXJtQWR2aXNvcnlFbGVtZW50cygpLiBTYWZlIGJlY2F1c2Ugc2tpcEVsZW1lbnRQb2xpY2llc1xuICAvLyAgIHByZXZlbnRzIHJlc29sdmVFbGVtZW50UG9saWN5KCkgZnJvbSBldmVyIGV2YWx1YXRpbmcgY29uZmlybV9vcGVyYXRpb24gYXMgYW4gb3BlcmF0aW9uLilcbiAgLy8gY29uZmlybV9vcGVyYXRpb24gaW4gYWxsb3cgbGlzdHMgPSByZWR1bmRhbnQgd2l0aCByb3V0ZSBkZWZhdWx0IEFVVE9fQVBQUk9WRSAoc3RyaXApXG4gIGNvbnN0IG9wc1RvU3RyaXAgPSBsaXN0TmFtZSA9PT0gJ2FsbG93J1xuICAgID8gbmV3IFNldChbLi4uVU5HQVRBQkxFX09QRVJBVElPTlMsICdjb25maXJtX29wZXJhdGlvbiddKVxuICAgIDogVU5HQVRBQkxFX09QRVJBVElPTlM7XG5cbiAgY29uc3Qgc3RyaXBwZWQgPSBvcGVyYXRpb25zLmZpbHRlcihvcCA9PiB7XG4gICAgaWYgKG9wc1RvU3RyaXAuaGFzKG9wKSkge1xuICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgIGBbR2F0ZWtlZXBlcl0gU3RyaXBwZWQgXCIke29wfVwiIGZyb20gJHtsaXN0TmFtZX0gbGlzdCBpbiAke2VsZW1lbnRUeXBlfSBcIiR7ZWxlbWVudE5hbWV9XCIg4oCUIGAgK1xuICAgICAgICBgZ2F0ZWtlZXBlciBpbmZyYXN0cnVjdHVyZSBvcGVyYXRpb25zIGNhbm5vdCBiZSBnYXRlZCBieSBlbGVtZW50IHBvbGljaWVzIChJc3N1ZSAjNzU4KWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9KTtcbiAgcmV0dXJuIHN0cmlwcGVkLmxlbmd0aCA+IDAgPyBzdHJpcHBlZCA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplR2F0ZWtlZXBlclBvbGljeShcbiAgcmF3UG9saWN5OiB1bmtub3duLFxuICBlbGVtZW50TmFtZTogc3RyaW5nLFxuICBlbGVtZW50VHlwZTogc3RyaW5nLFxuICBkaWFnbm9zdGljc1RhcmdldD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogRWxlbWVudEdhdGVrZWVwZXJQb2xpY3kgfCB1bmRlZmluZWQge1xuICBpZiAocmF3UG9saWN5ID09PSB1bmRlZmluZWQgfHwgcmF3UG9saWN5ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gV3JhcCBpbiBhIG1ldGFkYXRhIGVudmVsb3BlIHNvIHBhcnNlRWxlbWVudFBvbGljeSBjYW4gZXh0cmFjdCBpdFxuICAgIGNvbnN0IHZhbGlkYXRlZCA9IHBhcnNlRWxlbWVudFBvbGljeSh7IGdhdGVrZWVwZXI6IHJhd1BvbGljeSB9KTtcbiAgICBjbGVhckdhdGVrZWVwZXJEaWFnbm9zdGljcyhkaWFnbm9zdGljc1RhcmdldCA/PyByYXdQb2xpY3kpO1xuICAgIGlmICh2YWxpZGF0ZWQpIHtcbiAgICAgIC8vIElzc3VlICM3NTg6IFN0cmlwIGdhdGVrZWVwZXIgaW5mcmFzdHJ1Y3R1cmUgb3BlcmF0aW9ucyBmcm9tIGVsZW1lbnQgcG9saWNpZXNcbiAgICAgIC8vIHRvIHByZXZlbnQgY2FzY2FkaW5nIGNvbmZpcm1hdGlvbiBsb29wc1xuICAgICAgdmFsaWRhdGVkLmFsbG93ID0gc3RyaXBVbmdhdGFibGUodmFsaWRhdGVkLmFsbG93LCAnYWxsb3cnLCBlbGVtZW50TmFtZSwgZWxlbWVudFR5cGUpO1xuICAgICAgdmFsaWRhdGVkLmNvbmZpcm0gPSBzdHJpcFVuZ2F0YWJsZSh2YWxpZGF0ZWQuY29uZmlybSwgJ2NvbmZpcm0nLCBlbGVtZW50TmFtZSwgZWxlbWVudFR5cGUpO1xuICAgICAgdmFsaWRhdGVkLmRlbnkgPSBzdHJpcFVuZ2F0YWJsZSh2YWxpZGF0ZWQuZGVueSwgJ2RlbnknLCBlbGVtZW50TmFtZSwgZWxlbWVudFR5cGUpO1xuXG4gICAgICBsb2dnZXIuZGVidWcoYExvYWRlZCBnYXRla2VlcGVyIHBvbGljeSBmb3IgJHtlbGVtZW50VHlwZX0gXCIke2VsZW1lbnROYW1lfVwiYCwge1xuICAgICAgICBhbGxvdzogdmFsaWRhdGVkLmFsbG93Py5sZW5ndGggPz8gMCxcbiAgICAgICAgY29uZmlybTogdmFsaWRhdGVkLmNvbmZpcm0/Lmxlbmd0aCA/PyAwLFxuICAgICAgICBkZW55OiB2YWxpZGF0ZWQuZGVueT8ubGVuZ3RoID8/IDAsXG4gICAgICAgIGhhc1Njb3BlUmVzdHJpY3Rpb25zOiAhIXZhbGlkYXRlZC5zY29wZVJlc3RyaWN0aW9ucyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdmFsaWRhdGVkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBmb3JtYXRHYXRla2VlcGVyRGlhZ25vc3RpY01lc3NhZ2UoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKTtcbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnWUFNTF9QQVJTSU5HX1dBUk5JTkcnLFxuICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgc291cmNlOiBgJHtlbGVtZW50VHlwZX0uZGVzZXJpYWxpemVgLFxuICAgICAgZGV0YWlsczogYE1hbGZvcm1lZCBnYXRla2VlcGVyIHBvbGljeSBpbiBcIiR7ZWxlbWVudE5hbWV9XCIgc3RyaXBwZWQgZHVyaW5nIGxvYWQ6ICR7bWVzc2FnZX1gLFxuICAgIH0pO1xuICAgIGxvZ2dlci53YXJuKGBTdHJpcHBlZCBtYWxmb3JtZWQgZ2F0ZWtlZXBlciBwb2xpY3kgZnJvbSAke2VsZW1lbnRUeXBlfSBcIiR7ZWxlbWVudE5hbWV9XCI6ICR7bWVzc2FnZX1gKTtcbiAgICBhdHRhY2hHYXRla2VlcGVyRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3NUYXJnZXQgPz8gcmF3UG9saWN5LCBtZXNzYWdlKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEdhdGVrZWVwZXJEaWFnbm9zdGljTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBub3JtYWxpemVkID0gbWVzc2FnZS50cmltKCk7XG4gIGNvbnN0IGd1aWRhbmNlID0gZ2V0R2F0ZWtlZXBlckZpeEd1aWRhbmNlKG5vcm1hbGl6ZWQpO1xuICByZXR1cm4gZ3VpZGFuY2UgPyBgJHtub3JtYWxpemVkfSBGaXg6ICR7Z3VpZGFuY2V9YCA6IG5vcm1hbGl6ZWQ7XG59XG5cbmZ1bmN0aW9uIGdldEdhdGVrZWVwZXJGaXhHdWlkYW5jZShtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAobWVzc2FnZS5pbmNsdWRlcygnZXh0ZXJuYWxSZXN0cmljdGlvbnMgbXVzdCBiZSBuZXN0ZWQgdW5kZXIgZ2F0ZWtlZXBlci5leHRlcm5hbFJlc3RyaWN0aW9ucycpKSB7XG4gICAgcmV0dXJuICdNb3ZlIGV4dGVybmFsUmVzdHJpY3Rpb25zIHVuZGVyIGdhdGVrZWVwZXIuZXh0ZXJuYWxSZXN0cmljdGlvbnMgYW5kIGtlZXAgYWxsb3dQYXR0ZXJucywgY29uZmlybVBhdHRlcm5zLCBhbmQgZGVueVBhdHRlcm5zIGluc2lkZSB0aGF0IG5lc3RlZCBvYmplY3QuJztcbiAgfVxuXG4gIGlmIChtZXNzYWdlLmluY2x1ZGVzKCdleHRlcm5hbFJlc3RyaWN0aW9ucy5kZXNjcmlwdGlvbiBpcyByZXF1aXJlZCcpKSB7XG4gICAgcmV0dXJuICdBZGQgZ2F0ZWtlZXBlci5leHRlcm5hbFJlc3RyaWN0aW9ucy5kZXNjcmlwdGlvbiB3aXRoIGEgc2hvcnQgZXhwbGFuYXRpb24sIGZvciBleGFtcGxlIGRlc2NyaXB0aW9uOiBcIlJlYWQtb25seSBzaGVsbCBwb2xpY3lcIi4nO1xuICB9XG5cbiAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoJ211c3QgYmUgYW4gYXJyYXknKSB8fCBtZXNzYWdlLmluY2x1ZGVzKCdtdXN0IGNvbnRhaW4gb25seSBzdHJpbmdzJykpIHtcbiAgICByZXR1cm4gJ1VzZSBZQU1MIGFycmF5cyBvZiBzdHJpbmdzLCBmb3IgZXhhbXBsZSBkZW55UGF0dGVybnM6IFtcIkJhc2g6cm0gKlwiXSBvciBhbGxvdzogW1wicmVhZF8qXCJdLic7XG4gIH1cblxuICBpZiAobWVzc2FnZS5pbmNsdWRlcygnc2NvcGVSZXN0cmljdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKSkge1xuICAgIHJldHVybiAnVXNlIHNjb3BlUmVzdHJpY3Rpb25zIGFzIGFuIG9iamVjdCwgZm9yIGV4YW1wbGUgc2NvcGVSZXN0cmljdGlvbnM6IHsgYWxsb3dlZFR5cGVzOiBbXCJwZXJzb25hXCIsIFwic2tpbGxcIl0gfS4nO1xuICB9XG5cbiAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoJ211c3QgYmUgYW4gb2JqZWN0JykpIHtcbiAgICByZXR1cm4gJ1VzZSBnYXRla2VlcGVyIGFzIGFuIG9iamVjdCwgZm9yIGV4YW1wbGUgZ2F0ZWtlZXBlcjogeyBkZW55OiBbXCJkZWxldGVfZWxlbWVudFwiXSB9Lic7XG4gIH1cblxuICByZXR1cm4gJ0NvbXBhcmUgdGhlIGVsZW1lbnQgYWdhaW5zdCB0aGUgZ2F0ZWtlZXBlciBleGFtcGxlcyBmcm9tIGludHJvc3BlY3Rpb24gb3IgdGhlIHNlY3VyaXR5IGRvY3MsIHRoZW4gcmVhY3RpdmF0ZSBpdCBhZnRlciBmaXhpbmcgdGhlIHN0cnVjdHVyZS4nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNoR2F0ZWtlZXBlckRpYWdub3N0aWNzKHRhcmdldDogdW5rbm93biwgbWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmICghdGFyZ2V0IHx8IHR5cGVvZiB0YXJnZXQgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgKHRhcmdldCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuZ2F0ZWtlZXBlckRpYWdub3N0aWNzID0ge1xuICAgIHZhbGlkOiBmYWxzZSxcbiAgICBlbmZvcmNlYWJsZTogZmFsc2UsXG4gICAgbWVzc2FnZSxcbiAgfSBzYXRpc2ZpZXMgR2F0ZWtlZXBlclBvbGljeURpYWdub3N0aWNzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJHYXRla2VlcGVyRGlhZ25vc3RpY3ModGFyZ2V0OiB1bmtub3duKTogdm9pZCB7XG4gIGlmICghdGFyZ2V0IHx8IHR5cGVvZiB0YXJnZXQgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZGVsZXRlICh0YXJnZXQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmdhdGVrZWVwZXJEaWFnbm9zdGljcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEdhdGVrZWVwZXJEaWFnbm9zdGljcyh0YXJnZXQ6IHVua25vd24pOiBHYXRla2VlcGVyUG9saWN5RGlhZ25vc3RpY3MgfCB1bmRlZmluZWQge1xuICBpZiAoIXRhcmdldCB8fCB0eXBlb2YgdGFyZ2V0ICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBkaWFnbm9zdGljcyA9ICh0YXJnZXQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmdhdGVrZWVwZXJEaWFnbm9zdGljcztcbiAgaWYgKCFkaWFnbm9zdGljcyB8fCB0eXBlb2YgZGlhZ25vc3RpY3MgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHJlY29yZCA9IGRpYWdub3N0aWNzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpZiAocmVjb3JkLnZhbGlkID09PSBmYWxzZSAmJiByZWNvcmQuZW5mb3JjZWFibGUgPT09IGZhbHNlICYmIHR5cGVvZiByZWNvcmQubWVzc2FnZSA9PT0gJ3N0cmluZycgJiYgcmVjb3JkLm1lc3NhZ2UudHJpbSgpICE9PSAnJykge1xuICAgIHJldHVybiB7XG4gICAgICB2YWxpZDogZmFsc2UsXG4gICAgICBlbmZvcmNlYWJsZTogZmFsc2UsXG4gICAgICBtZXNzYWdlOiByZWNvcmQubWVzc2FnZSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiJdfQ==
661
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWxlbWVudFBvbGljaWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2hhbmRsZXJzL21jcC1hcWwvcG9saWNpZXMvRWxlbWVudFBvbGljaWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7R0FZRztBQUVILE9BQU8sRUFDTCxlQUFlLEVBSWYsbUJBQW1CLEdBQ3BCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLHlCQUF5QixFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0csT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQWtEM0U7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLFNBQWlCLEVBQ2pCLGNBQStCLEVBQy9CLGlCQUEwQjtJQUUxQixvREFBb0Q7SUFDcEQsSUFBSSxjQUFjLEdBQUcseUJBQXlCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUQsSUFBSSxhQUFpQyxDQUFDO0lBQ3RDLElBQUksYUFBbUQsQ0FBQztJQUN4RCxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDekIsOEZBQThGO0lBQzlGLGdGQUFnRjtJQUNoRixJQUFJLGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUMvQixzRkFBc0Y7SUFDdEYsTUFBTSxtQkFBbUIsR0FBMEQsRUFBRSxDQUFDO0lBRXRGLDhDQUE4QztJQUM5QyxLQUFLLE1BQU0sT0FBTyxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBQzNDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLFNBQVM7UUFD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QUFDO0FBRUQsTUFBTSxVQUFVLDBCQUEwQixDQUFDLE1BQWU7SUFDeEQsSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMxQyxPQUFPO0lBQ1QsQ0FBQztJQUVELE9BQVEsTUFBa0MsQ0FBQyxxQkFBcUIsQ0FBQztBQUNuRSxDQUFDO0FBRUQsTUFBTSxVQUFVLHdCQUF3QixDQUFDLE1BQWU7SUFDdEQsSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMxQyxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUksTUFBa0MsQ0FBQyxxQkFBcUIsQ0FBQztJQUM5RSxJQUFJLENBQUMsV0FBVyxJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3BELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxXQUFzQyxDQUFDO0lBQ3RELElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxLQUFLLElBQUksTUFBTSxDQUFDLFdBQVcsS0FBSyxLQUFLLElBQUksT0FBTyxNQUFNLENBQUMsT0FBTyxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ2pJLE9BQU87WUFDTCxLQUFLLEVBQUUsS0FBSztZQUNaLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztTQUN4QixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEVsZW1lbnQgUG9saWNpZXNcbiAqXG4gKiBIYW5kbGVzIGVsZW1lbnQtYmFzZWQgYWNjZXNzIGNvbnRyb2wgZm9yIHRoZSBHYXRla2VlcGVyLlxuICogQWxsb3dzIEFOWSBEb2xsaG91c2VNQ1AgZWxlbWVudCB0byBkZWZpbmUgcG9saWNpZXMgaW4gaXRzIG1ldGFkYXRhXG4gKiB0aGF0IG92ZXJyaWRlIG9yIHJlc3RyaWN0IHRoZSBkZWZhdWx0IG9wZXJhdGlvbiBwb2xpY2llcy5cbiAqXG4gKiBQb2xpY3kgUmVzb2x1dGlvbiBPcmRlcjpcbiAqIDEuIEFjdGl2ZSBlbGVtZW50IGRlbnkgbGlzdCAoaGlnaGVzdCBwcmlvcml0eSAtIGJsb2NrcyBvcGVyYXRpb24pXG4gKiAyLiBBY3RpdmUgZWxlbWVudCBjb25maXJtIGxpc3QgKHJlcXVpcmVzIGNvbmZpcm1hdGlvbilcbiAqIDMuIEFjdGl2ZSBlbGVtZW50IGFsbG93IGxpc3QgKGF1dG8tYXBwcm92ZXMpXG4gKiA0LiBPcGVyYXRpb24gZGVmYXVsdCBwZXJtaXNzaW9uIChmYWxsYmFjaylcbiAqL1xuXG5pbXBvcnQge1xuICBQZXJtaXNzaW9uTGV2ZWwsXG4gIHR5cGUgRWxlbWVudEdhdGVrZWVwZXJQb2xpY3ksXG4gIHR5cGUgQ2xpQXBwcm92YWxQb2xpY3ksXG4gIHR5cGUgR2F0ZWtlZXBlckRlY2lzaW9uLFxuICBHYXRla2VlcGVyRXJyb3JDb2RlLFxufSBmcm9tICcuLi9HYXRla2VlcGVyVHlwZXMuanMnO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFBlcm1pc3Npb25MZXZlbCwgY2FuT3BlcmF0aW9uQmVFbGV2YXRlZCwgZ2V0T3BlcmF0aW9uUG9saWN5IH0gZnJvbSAnLi9PcGVyYXRpb25Qb2xpY2llcy5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi8uLi8uLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IE1BWF9HTE9CX1BBVFRFUk5fTEVOR1RIIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvcGF0dGVybk1hdGNoZXIuanMnO1xuXG4vKipcbiAqIE1ldGFkYXRhIHN0cnVjdHVyZSBmb3IgZWxlbWVudHMgd2l0aCBHYXRla2VlcGVyIHBvbGljaWVzLlxuICogVGhlICdnYXRla2VlcGVyJyBmaWVsZCBpcyBvcHRpb25hbCBhbmQgY29udGFpbnMgcG9saWN5IGRlZmluaXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnRNZXRhZGF0YVdpdGhQb2xpY3kge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBnYXRla2VlcGVyPzogRWxlbWVudEdhdGVrZWVwZXJQb2xpY3k7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG59XG5cbi8qKlxuICogQWN0aXZlIGVsZW1lbnQgZm9yIHBvbGljeSBldmFsdWF0aW9uLlxuICogUmVwcmVzZW50cyBhbiBlbGVtZW50IGN1cnJlbnRseSBhY3RpdmUgaW4gdGhlIHNlc3Npb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aXZlRWxlbWVudCB7XG4gIHR5cGU6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBtZXRhZGF0YTogRWxlbWVudE1ldGFkYXRhV2l0aFBvbGljeTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHYXRla2VlcGVyUG9saWN5RGlhZ25vc3RpY3Mge1xuICB2YWxpZDogZmFsc2U7XG4gIGVuZm9yY2VhYmxlOiBmYWxzZTtcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBlbGVtZW50IHBvbGljeSByZXNvbHV0aW9uLlxuICogQ29udGFpbnMgdGhlIGVmZmVjdGl2ZSBwZXJtaXNzaW9uIGxldmVsIGFuZCBwb2xpY3kgc291cmNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnRQb2xpY3lSZXN1bHQge1xuICAvKiogRWZmZWN0aXZlIHBlcm1pc3Npb24gbGV2ZWwgYWZ0ZXIgZWxlbWVudCBwb2xpY3kgYXBwbGljYXRpb24gKi9cbiAgcGVybWlzc2lvbkxldmVsOiBQZXJtaXNzaW9uTGV2ZWw7XG4gIC8qKiBXaGljaCBlbGVtZW50J3MgcG9saWN5IGRldGVybWluZWQgdGhpcyByZXN1bHQgKi9cbiAgc291cmNlRWxlbWVudD86IHN0cmluZztcbiAgLyoqIFRoZSBzcGVjaWZpYyBwb2xpY3kgZmllbGQgdGhhdCBtYXRjaGVkIChhbGxvdy9jb25maXJtL2RlbnkpICovXG4gIG1hdGNoZWRQb2xpY3k/OiAnYWxsb3cnIHwgJ2NvbmZpcm0nIHwgJ2RlbnknIHwgJ3Njb3BlX3Jlc3RyaWN0aW9uJztcbiAgLyoqIFdoZXRoZXIgdGhlIG9wZXJhdGlvbiB3YXMgYmxvY2tlZCBieSBzY29wZSByZXN0cmljdGlvbnMgKi9cbiAgc2NvcGVCbG9ja2VkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEVsZW1lbnRzIHRoYXQgd2FudGVkIHRvIGF1dG8tYXBwcm92ZSB0aGlzIG9wZXJhdGlvbiBidXQgd2VyZSBvdmVycmlkZGVuXG4gICAqIGJ5IGEgaGlnaGVyLXByaW9yaXR5IGNvbmZpcm0gb3IgZGVueSBwb2xpY3kgZnJvbSBhbm90aGVyIGVsZW1lbnQuXG4gICAqIElzc3VlICM2NzQ6IGFsbG93IGNhbm5vdCBvdmVycmlkZSBjb25maXJtLlxuICAgKi9cbiAgY29uZmxpY3RpbmdFbGVtZW50cz86IEFycmF5PHsgbmFtZTogc3RyaW5nOyB3YW50ZWRMZXZlbDogUGVybWlzc2lvbkxldmVsIH0+O1xufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIGVmZmVjdGl2ZSBwZXJtaXNzaW9uIGxldmVsIGZvciBhbiBvcGVyYXRpb25cbiAqIGNvbnNpZGVyaW5nIGFsbCBhY3RpdmUgZWxlbWVudHMgYW5kIHRoZWlyIHBvbGljaWVzLlxuICpcbiAqIEBwYXJhbSBvcGVyYXRpb24gLSBUaGUgb3BlcmF0aW9uIHRvIGNoZWNrXG4gKiBAcGFyYW0gYWN0aXZlRWxlbWVudHMgLSBDdXJyZW50bHkgYWN0aXZlIGVsZW1lbnRzIHdpdGggdGhlaXIgbWV0YWRhdGFcbiAqIEBwYXJhbSB0YXJnZXRFbGVtZW50VHlwZSAtIE9wdGlvbmFsIGVsZW1lbnQgdHlwZSBiZWluZyBvcGVyYXRlZCBvblxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIHBvbGljeSByZXN1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVFbGVtZW50UG9saWN5KFxuICBvcGVyYXRpb246IHN0cmluZyxcbiAgYWN0aXZlRWxlbWVudHM6IEFjdGl2ZUVsZW1lbnRbXSxcbiAgdGFyZ2V0RWxlbWVudFR5cGU/OiBzdHJpbmdcbik6IEVsZW1lbnRQb2xpY3lSZXN1bHQge1xuICAvLyBTdGFydCB3aXRoIHRoZSBkZWZhdWx0IG9wZXJhdGlvbiBwZXJtaXNzaW9uIGxldmVsXG4gIGxldCBlZmZlY3RpdmVMZXZlbCA9IGdldERlZmF1bHRQZXJtaXNzaW9uTGV2ZWwob3BlcmF0aW9uKTtcbiAgbGV0IHNvdXJjZUVsZW1lbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbGV0IG1hdGNoZWRQb2xpY3k6IEVsZW1lbnRQb2xpY3lSZXN1bHRbJ21hdGNoZWRQb2xpY3knXTtcbiAgbGV0IHNjb3BlQmxvY2tlZCA9IGZhbHNlO1xuICAvLyBJc3N1ZSAjNjc0OiBUcmFjayB3aGV0aGVyIENPTkZJUk0gd2FzIHNldCBieSBhbiBlbGVtZW50IHBvbGljeSAobm90IGp1c3QgdGhlIHJvdXRlIGRlZmF1bHQpXG4gIC8vIGFsbG93IGNhbiBvdmVycmlkZSB0aGUgcm91dGUgZGVmYXVsdCBidXQgTk9UIGFub3RoZXIgZWxlbWVudCdzIGNvbmZpcm0gcG9saWN5XG4gIGxldCBjb25maXJtZWRCeUVsZW1lbnQgPSBmYWxzZTtcbiAgLy8gVHJhY2sgZWxlbWVudHMgdGhhdCB3YW50ZWQgYWxsb3cgYnV0IHdlcmUgb3ZlcnJpZGRlbiBieSBhbiBlbGVtZW50LXNldCBjb25maXJtL2RlbnlcbiAgY29uc3QgY29uZmxpY3RpbmdFbGVtZW50czogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHdhbnRlZExldmVsOiBQZXJtaXNzaW9uTGV2ZWwgfT4gPSBbXTtcblxuICAvLyBDaGVjayBlYWNoIGFjdGl2ZSBlbGVtZW50J3MgcG9saWN5IGluIG9yZGVyXG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBhY3RpdmVFbGVtZW50cykge1xuICAgIGNvbnN0IHBvbGljeSA9IGVsZW1lbnQubWV0YWRhdGEuZ2F0ZWtlZXBlcjtcbiAgICBpZiAoIXBvbGljeSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gMS4gQ2hlY2sgZGVueSBsaXN0IGZpcnN0IChoaWdoZXN0IHByaW9yaXR5KVxuICAgIGlmIChwb2xpY3kuZGVueT8uaW5jbHVkZXMob3BlcmF0aW9uKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGVybWlzc2lvbkxldmVsOiBQZXJtaXNzaW9uTGV2ZWwuREVOWSxcbiAgICAgICAgc291cmNlRWxlbWVudDogZWxlbWVudC5uYW1lLFxuICAgICAgICBtYXRjaGVkUG9saWN5OiAnZGVueScsXG4gICAgICAgIGNvbmZsaWN0aW5nRWxlbWVudHM6IGNvbmZsaWN0aW5nRWxlbWVudHMubGVuZ3RoID4gMCA/IGNvbmZsaWN0aW5nRWxlbWVudHMgOiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIDIuIENoZWNrIHNjb3BlIHJlc3RyaWN0aW9uc1xuICAgIGlmICh0YXJnZXRFbGVtZW50VHlwZSAmJiBwb2xpY3kuc2NvcGVSZXN0cmljdGlvbnMpIHtcbiAgICAgIGNvbnN0IHsgYWxsb3dlZFR5cGVzLCBibG9ja2VkVHlwZXMgfSA9IHBvbGljeS5zY29wZVJlc3RyaWN0aW9ucztcblxuICAgICAgLy8gSWYgYWxsb3dlZFR5cGVzIGlzIHNwZWNpZmllZCwgdGFyZ2V0IG11c3QgYmUgaW4gdGhlIGxpc3RcbiAgICAgIGlmIChhbGxvd2VkVHlwZXMgJiYgIWFsbG93ZWRUeXBlcy5pbmNsdWRlcyh0YXJnZXRFbGVtZW50VHlwZSkpIHtcbiAgICAgICAgc2NvcGVCbG9ja2VkID0gdHJ1ZTtcbiAgICAgICAgc291cmNlRWxlbWVudCA9IGVsZW1lbnQubmFtZTtcbiAgICAgICAgbWF0Y2hlZFBvbGljeSA9ICdzY29wZV9yZXN0cmljdGlvbic7XG4gICAgICAgIGNvbnRpbnVlOyAvLyBDaGVjayBvdGhlciBlbGVtZW50cywgbWlnaHQgaGF2ZSBkaWZmZXJlbnQgcG9saWN5XG4gICAgICB9XG5cbiAgICAgIC8vIElmIGJsb2NrZWRUeXBlcyBpcyBzcGVjaWZpZWQsIHRhcmdldCBtdXN0IE5PVCBiZSBpbiB0aGUgbGlzdFxuICAgICAgaWYgKGJsb2NrZWRUeXBlcz8uaW5jbHVkZXModGFyZ2V0RWxlbWVudFR5cGUpKSB7XG4gICAgICAgIHNjb3BlQmxvY2tlZCA9IHRydWU7XG4gICAgICAgIHNvdXJjZUVsZW1lbnQgPSBlbGVtZW50Lm5hbWU7XG4gICAgICAgIG1hdGNoZWRQb2xpY3kgPSAnc2NvcGVfcmVzdHJpY3Rpb24nO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLiBDaGVjayBjb25maXJtIGxpc3QgKHJlcXVpcmVzIGNvbmZpcm1hdGlvbilcbiAgICBpZiAocG9saWN5LmNvbmZpcm0/LmluY2x1ZGVzKG9wZXJhdGlvbikpIHtcbiAgICAgIC8vIERvbid0IGRvd25ncmFkZSBmcm9tIERFTlkgb3IgQ09ORklSTV9TSU5HTEVfVVNFXG4gICAgICBpZiAoZWZmZWN0aXZlTGV2ZWwgIT09IFBlcm1pc3Npb25MZXZlbC5ERU5ZKSB7XG4gICAgICAgIGVmZmVjdGl2ZUxldmVsID0gUGVybWlzc2lvbkxldmVsLkNPTkZJUk1fU0VTU0lPTjtcbiAgICAgICAgY29uZmlybWVkQnlFbGVtZW50ID0gdHJ1ZTtcbiAgICAgICAgc291cmNlRWxlbWVudCA9IGVsZW1lbnQubmFtZTtcbiAgICAgICAgbWF0Y2hlZFBvbGljeSA9ICdjb25maXJtJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBDaGVjayBhbGxvdyBsaXN0IChhdXRvLWFwcHJvdmVzKVxuICAgIC8vIElzc3VlICM2NzQ6IGFsbG93IENBTiBvdmVycmlkZSB0aGUgcm91dGUgZGVmYXVsdCwgYnV0IE5PVCBhbm90aGVyIGVsZW1lbnQncyBjb25maXJtIHBvbGljeS5cbiAgICAvLyBQcmlvcml0eSBoaWVyYXJjaHk6IGVsZW1lbnQgZGVueSA+IGVsZW1lbnQgY29uZmlybSA+IGVsZW1lbnQgYWxsb3cgPiByb3V0ZSBkZWZhdWx0XG4gICAgaWYgKHBvbGljeS5hbGxvdz8uaW5jbHVkZXMob3BlcmF0aW9uKSkge1xuICAgICAgLy8gT25seSBlbGV2YXRlIGlmIHRoZSBvcGVyYXRpb24gYWxsb3dzIGVsZXZhdGlvblxuICAgICAgaWYgKGNhbk9wZXJhdGlvbkJlRWxldmF0ZWQob3BlcmF0aW9uKSkge1xuICAgICAgICBpZiAoIWNvbmZpcm1lZEJ5RWxlbWVudCkge1xuICAgICAgICAgIC8vIE5vIGVsZW1lbnQgaGFzIGNvbmZpcm1lZCB0aGlzIOKAlCBzYWZlIHRvIGVsZXZhdGUgKG92ZXJyaWRlcyByb3V0ZSBkZWZhdWx0KVxuICAgICAgICAgIGVmZmVjdGl2ZUxldmVsID0gUGVybWlzc2lvbkxldmVsLkFVVE9fQVBQUk9WRTtcbiAgICAgICAgICBzb3VyY2VFbGVtZW50ID0gZWxlbWVudC5uYW1lO1xuICAgICAgICAgIG1hdGNoZWRQb2xpY3kgPSAnYWxsb3cnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFub3RoZXIgZWxlbWVudCdzIGNvbmZpcm0gcG9saWN5IHRha2VzIHByaW9yaXR5IG92ZXIgdGhpcyBhbGxvd1xuICAgICAgICAgIGNvbmZsaWN0aW5nRWxlbWVudHMucHVzaCh7IG5hbWU6IGVsZW1lbnQubmFtZSwgd2FudGVkTGV2ZWw6IFBlcm1pc3Npb25MZXZlbC5BVVRPX0FQUFJPVkUgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBJZiBzY29wZSB3YXMgYmxvY2tlZCBieSBhbGwgZWxlbWVudHMgd2l0aCByZXN0cmljdGlvbnNcbiAgaWYgKHNjb3BlQmxvY2tlZCkge1xuICAgIHJldHVybiB7XG4gICAgICBwZXJtaXNzaW9uTGV2ZWw6IFBlcm1pc3Npb25MZXZlbC5ERU5ZLFxuICAgICAgc291cmNlRWxlbWVudCxcbiAgICAgIG1hdGNoZWRQb2xpY3k6ICdzY29wZV9yZXN0cmljdGlvbicsXG4gICAgICBzY29wZUJsb2NrZWQ6IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGVybWlzc2lvbkxldmVsOiBlZmZlY3RpdmVMZXZlbCxcbiAgICBzb3VyY2VFbGVtZW50LFxuICAgIG1hdGNoZWRQb2xpY3ksXG4gICAgY29uZmxpY3RpbmdFbGVtZW50czogY29uZmxpY3RpbmdFbGVtZW50cy5sZW5ndGggPiAwID8gY29uZmxpY3RpbmdFbGVtZW50cyA6IHVuZGVmaW5lZCxcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBHYXRla2VlcGVyIGRlY2lzaW9uIGZyb20gZWxlbWVudCBwb2xpY3kgcmVzb2x1dGlvbi5cbiAqXG4gKiBAcGFyYW0gb3BlcmF0aW9uIC0gVGhlIG9wZXJhdGlvbiB0aGF0IHdhcyBjaGVja2VkXG4gKiBAcGFyYW0gcmVzdWx0IC0gVGhlIGVsZW1lbnQgcG9saWN5IHJlc29sdXRpb24gcmVzdWx0XG4gKiBAcGFyYW0gdGFyZ2V0RWxlbWVudFR5cGUgLSBPcHRpb25hbCBlbGVtZW50IHR5cGUgYmVpbmcgb3BlcmF0ZWQgb25cbiAqIEByZXR1cm5zIEEgR2F0ZWtlZXBlckRlY2lzaW9uIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGVjaXNpb25Gcm9tUG9saWN5KFxuICBvcGVyYXRpb246IHN0cmluZyxcbiAgcmVzdWx0OiBFbGVtZW50UG9saWN5UmVzdWx0LFxuICB0YXJnZXRFbGVtZW50VHlwZT86IHN0cmluZ1xuKTogR2F0ZWtlZXBlckRlY2lzaW9uIHtcbiAgY29uc3QgeyBwZXJtaXNzaW9uTGV2ZWwsIHNvdXJjZUVsZW1lbnQsIHNjb3BlQmxvY2tlZCwgY29uZmxpY3RpbmdFbGVtZW50cyB9ID0gcmVzdWx0O1xuXG4gIC8vIEhhbmRsZSBERU5ZXG4gIGlmIChwZXJtaXNzaW9uTGV2ZWwgPT09IFBlcm1pc3Npb25MZXZlbC5ERU5ZKSB7XG4gICAgaWYgKHNjb3BlQmxvY2tlZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWxsb3dlZDogZmFsc2UsXG4gICAgICAgIHBlcm1pc3Npb25MZXZlbCxcbiAgICAgICAgZXJyb3JDb2RlOiBHYXRla2VlcGVyRXJyb3JDb2RlLlNDT1BFX1JFU1RSSUNUSU9OLFxuICAgICAgICByZWFzb246IGBPcGVyYXRpb24gXCIke29wZXJhdGlvbn1cIiBpcyBub3QgYWxsb3dlZCBvbiBlbGVtZW50IHR5cGUgXCIke3RhcmdldEVsZW1lbnRUeXBlfVwiIGR1ZSB0byBzY29wZSByZXN0cmljdGlvbnMgaW4gYWN0aXZlIGVsZW1lbnQgXCIke3NvdXJjZUVsZW1lbnR9XCJgLFxuICAgICAgICBzdWdnZXN0aW9uOiBgRGVhY3RpdmF0ZSB0aGUgZWxlbWVudCBcIiR7c291cmNlRWxlbWVudH1cIiBvciB1c2UgYSBkaWZmZXJlbnQgZWxlbWVudCB0eXBlYCxcbiAgICAgICAgcG9saWN5U291cmNlOiAnZWxlbWVudF9wb2xpY3knLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWxsb3dlZDogZmFsc2UsXG4gICAgICBwZXJtaXNzaW9uTGV2ZWwsXG4gICAgICBlcnJvckNvZGU6IEdhdGVrZWVwZXJFcnJvckNvZGUuRUxFTUVOVF9QT0xJQ1lfVklPTEFUSU9OLFxuICAgICAgcmVhc29uOiBgT3BlcmF0aW9uIFwiJHtvcGVyYXRpb259XCIgaXMgYmxvY2tlZCBieSBhY3RpdmUgZWxlbWVudCBcIiR7c291cmNlRWxlbWVudH1cIidzIGRlbnkgcG9saWN5YCxcbiAgICAgIHN1Z2dlc3Rpb246IGBEZWFjdGl2YXRlIHRoZSBlbGVtZW50IFwiJHtzb3VyY2VFbGVtZW50fVwiIHRvIHByb2NlZWQgd2l0aCB0aGlzIG9wZXJhdGlvbmAsXG4gICAgICBwb2xpY3lTb3VyY2U6ICdlbGVtZW50X3BvbGljeScsXG4gICAgfTtcbiAgfVxuXG4gIC8vIEhhbmRsZSBjb25maXJtYXRpb24gcmVxdWlyZWRcbiAgaWYgKFxuICAgIHBlcm1pc3Npb25MZXZlbCA9PT0gUGVybWlzc2lvbkxldmVsLkNPTkZJUk1fU0VTU0lPTiB8fFxuICAgIHBlcm1pc3Npb25MZXZlbCA9PT0gUGVybWlzc2lvbkxldmVsLkNPTkZJUk1fU0lOR0xFX1VTRVxuICApIHtcbiAgICAvLyBCdWlsZCBodW1hbi1yZWFkYWJsZSByYXRpb25hbGUgZXhwbGFpbmluZyBXSFkgY29uZmlybWF0aW9uIGlzIG5lZWRlZFxuICAgIGNvbnN0IHBvbGljeSA9IGdldE9wZXJhdGlvblBvbGljeShvcGVyYXRpb24pO1xuICAgIGNvbnN0IGxldmVsTGFiZWwgPSBwZXJtaXNzaW9uTGV2ZWwgPT09IFBlcm1pc3Npb25MZXZlbC5DT05GSVJNX1NJTkdMRV9VU0VcbiAgICAgID8gJ3JlcXVpcmVzIGNvbmZpcm1hdGlvbiBlYWNoIHRpbWUnXG4gICAgICA6ICdyZXF1aXJlcyBjb25maXJtYXRpb24gb25jZSBwZXIgc2Vzc2lvbic7XG5cbiAgICBsZXQgcmF0aW9uYWxlOiBzdHJpbmc7XG4gICAgaWYgKHNvdXJjZUVsZW1lbnQgJiYgcmVzdWx0Lm1hdGNoZWRQb2xpY3kgPT09ICdjb25maXJtJykge1xuICAgICAgLy8gRWxlbWVudCBwb2xpY3kgZWxldmF0ZWQgdGhpcyBvcGVyYXRpb24ncyBjb25maXJtYXRpb24gcmVxdWlyZW1lbnRcbiAgICAgIGNvbnN0IHBvbGljeURldGFpbCA9IHBvbGljeT8ucmF0aW9uYWxlID8gYCAke3BvbGljeS5yYXRpb25hbGV9YCA6ICcnO1xuICAgICAgcmF0aW9uYWxlID0gYEFjdGl2ZSBlbGVtZW50IFwiJHtzb3VyY2VFbGVtZW50fVwiIHBvbGljeSByZXF1aXJlcyBjb25maXJtYXRpb24gZm9yIHRoaXMgb3BlcmF0aW9uLiR7cG9saWN5RGV0YWlsfWA7XG4gICAgfSBlbHNlIGlmIChwb2xpY3k/LnJhdGlvbmFsZSkge1xuICAgICAgLy8gUm91dGUtbGV2ZWwgZGVmYXVsdCB3aXRoIGRvY3VtZW50ZWQgcmF0aW9uYWxlXG4gICAgICByYXRpb25hbGUgPSBwb2xpY3kucmF0aW9uYWxlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFbmRwb2ludC1sZXZlbCBkZWZhdWx0LCBubyBzcGVjaWZpYyByYXRpb25hbGVcbiAgICAgIHJhdGlvbmFsZSA9ICdUaGlzIG9wZXJhdGlvbiBtb2RpZmllcyBkYXRhIGFuZCByZXF1aXJlcyBodW1hbiBhcHByb3ZhbCBiZWZvcmUgcHJvY2VlZGluZyc7XG4gICAgfVxuXG4gICAgLy8gSXNzdWUgIzY3NDogU3VyZmFjZSBlbGVtZW50cyB0aGF0IHdhbnRlZCB0byBhdXRvLWFwcHJvdmUgYnV0IHdlcmUgb3ZlcnJpZGRlblxuICAgIGNvbnN0IGNvbmZsaWN0Tm90ZSA9IGNvbmZsaWN0aW5nRWxlbWVudHMgJiYgY29uZmxpY3RpbmdFbGVtZW50cy5sZW5ndGggPiAwXG4gICAgICA/IGAgKE5vdGU6ICR7Y29uZmxpY3RpbmdFbGVtZW50cy5tYXAoZSA9PiBgXCIke2UubmFtZX1cImApLmpvaW4oJywgJyl9IHdvdWxkIGF1dG8tYXBwcm92ZSB0aGlzIGJ1dCAke2NvbmZsaWN0aW5nRWxlbWVudHMubGVuZ3RoID09PSAxID8gJ2lzJyA6ICdhcmUnfSBvdmVycmlkZGVuIGJ5IHRoZSBjb25maXJtIHBvbGljeS4pYFxuICAgICAgOiAnJztcblxuICAgIHJldHVybiB7XG4gICAgICBhbGxvd2VkOiBmYWxzZSxcbiAgICAgIHBlcm1pc3Npb25MZXZlbCxcbiAgICAgIGVycm9yQ29kZTogR2F0ZWtlZXBlckVycm9yQ29kZS5DT05GSVJNQVRJT05fUkVRVUlSRUQsXG4gICAgICByZWFzb246IGBPcGVyYXRpb24gXCIke29wZXJhdGlvbn1cIiAke2xldmVsTGFiZWx9LiAke3JhdGlvbmFsZX0ke2NvbmZsaWN0Tm90ZX1gLFxuICAgICAgc3VnZ2VzdGlvbjogJ1VzZSB0aGUgY29uZmlybWF0aW9uIGRpYWxvZyB0byBhcHByb3ZlIHRoaXMgb3BlcmF0aW9uJyxcbiAgICAgIGNvbmZpcm1hdGlvblBlbmRpbmc6IHRydWUsXG4gICAgICBwb2xpY3lTb3VyY2U6IHNvdXJjZUVsZW1lbnQgPyAnZWxlbWVudF9wb2xpY3knIDogJ29wZXJhdGlvbl9kZWZhdWx0JyxcbiAgICB9O1xuICB9XG5cbiAgLy8gSGFuZGxlIEFVVE9fQVBQUk9WRVxuICByZXR1cm4ge1xuICAgIGFsbG93ZWQ6IHRydWUsXG4gICAgcGVybWlzc2lvbkxldmVsLFxuICAgIHJlYXNvbjogc291cmNlRWxlbWVudFxuICAgICAgPyBgT3BlcmF0aW9uIFwiJHtvcGVyYXRpb259XCIgYXV0by1hcHByb3ZlZCBieSBlbGVtZW50IFwiJHtzb3VyY2VFbGVtZW50fVwiYFxuICAgICAgOiBgT3BlcmF0aW9uIFwiJHtvcGVyYXRpb259XCIgYXV0by1hcHByb3ZlZCBieSBkZWZhdWx0IHBvbGljeWAsXG4gICAgcG9saWN5U291cmNlOiBzb3VyY2VFbGVtZW50ID8gJ2VsZW1lbnRfcG9saWN5JyA6ICdvcGVyYXRpb25fZGVmYXVsdCcsXG4gIH07XG59XG5cbi8qKlxuICogUGFyc2UgYW5kIHZhbGlkYXRlIGEgR2F0ZWtlZXBlciBwb2xpY3kgZnJvbSBlbGVtZW50IG1ldGFkYXRhLlxuICpcbiAqIEBwYXJhbSBtZXRhZGF0YSAtIFRoZSBlbGVtZW50IG1ldGFkYXRhIHRvIHBhcnNlXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIHBvbGljeSwgb3IgdW5kZWZpbmVkIGlmIG5vIHBvbGljeSBpcyBkZWZpbmVkXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBwb2xpY3kgaXMgbWFsZm9ybWVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUVsZW1lbnRQb2xpY3koXG4gIG1ldGFkYXRhOiB1bmtub3duXG4pOiBFbGVtZW50R2F0ZWtlZXBlclBvbGljeSB8IHVuZGVmaW5lZCB7XG4gIGlmICghbWV0YWRhdGEgfHwgdHlwZW9mIG1ldGFkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBtZXRhID0gbWV0YWRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IGdhdGVrZWVwZXIgPSBtZXRhLmdhdGVrZWVwZXI7XG5cbiAgaWYgKCFnYXRla2VlcGVyKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZ2F0ZWtlZXBlciAhPT0gJ29iamVjdCcgfHwgZ2F0ZWtlZXBlciA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBnYXRla2VlcGVyIHBvbGljeTogbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIGNvbnN0IHBvbGljeSA9IGdhdGVrZWVwZXIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLy8gVmFsaWRhdGUgYW5kIGV4dHJhY3QgYWxsb3cgbGlzdFxuICBjb25zdCBhbGxvdyA9IHZhbGlkYXRlU3RyaW5nQXJyYXkocG9saWN5LmFsbG93LCAnYWxsb3cnKTtcbiAgY29uc3QgY29uZmlybSA9IHZhbGlkYXRlU3RyaW5nQXJyYXkocG9saWN5LmNvbmZpcm0sICdjb25maXJtJyk7XG4gIGNvbnN0IGRlbnkgPSB2YWxpZGF0ZVN0cmluZ0FycmF5KHBvbGljeS5kZW55LCAnZGVueScpO1xuXG4gIC8vIFZhbGlkYXRlIHNjb3BlIHJlc3RyaWN0aW9uc1xuICBsZXQgc2NvcGVSZXN0cmljdGlvbnM6IEVsZW1lbnRHYXRla2VlcGVyUG9saWN5WydzY29wZVJlc3RyaWN0aW9ucyddO1xuICBpZiAocG9saWN5LnNjb3BlUmVzdHJpY3Rpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBwb2xpY3kuc2NvcGVSZXN0cmljdGlvbnMgIT09ICdvYmplY3QnIHx8IHBvbGljeS5zY29wZVJlc3RyaWN0aW9ucyA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGdhdGVrZWVwZXIgcG9saWN5OiBzY29wZVJlc3RyaWN0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBjb25zdCBzciA9IHBvbGljeS5zY29wZVJlc3RyaWN0aW9ucyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBzY29wZVJlc3RyaWN0aW9ucyA9IHtcbiAgICAgIGFsbG93ZWRUeXBlczogdmFsaWRhdGVTdHJpbmdBcnJheShzci5hbGxvd2VkVHlwZXMsICdzY29wZVJlc3RyaWN0aW9ucy5hbGxvd2VkVHlwZXMnKSxcbiAgICAgIGJsb2NrZWRUeXBlczogdmFsaWRhdGVTdHJpbmdBcnJheShzci5ibG9ja2VkVHlwZXMsICdzY29wZVJlc3RyaWN0aW9ucy5ibG9ja2VkVHlwZXMnKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgZXh0ZXJuYWwgcmVzdHJpY3Rpb25zIChJc3N1ZSAjNjI1IFBoYXNlIDIpXG4gIGxldCBleHRlcm5hbFJlc3RyaWN0aW9uczogRWxlbWVudEdhdGVrZWVwZXJQb2xpY3lbJ2V4dGVybmFsUmVzdHJpY3Rpb25zJ107XG4gIGlmIChwb2xpY3kuZXh0ZXJuYWxSZXN0cmljdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHBvbGljeS5leHRlcm5hbFJlc3RyaWN0aW9ucyAhPT0gJ29iamVjdCcgfHwgcG9saWN5LmV4dGVybmFsUmVzdHJpY3Rpb25zID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZ2F0ZWtlZXBlciBwb2xpY3k6IGV4dGVybmFsUmVzdHJpY3Rpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuICAgIGNvbnN0IGVyID0gcG9saWN5LmV4dGVybmFsUmVzdHJpY3Rpb25zIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmICghZXIuZGVzY3JpcHRpb24gfHwgdHlwZW9mIGVyLmRlc2NyaXB0aW9uICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGdhdGVrZWVwZXIgcG9saWN5OiBleHRlcm5hbFJlc3RyaWN0aW9ucy5kZXNjcmlwdGlvbiBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgICB9XG4gICAgY29uc3QgZGVueVBhdHRlcm5zID0gdmFsaWRhdGVTdHJpbmdBcnJheShlci5kZW55UGF0dGVybnMsICdleHRlcm5hbFJlc3RyaWN0aW9ucy5kZW55UGF0dGVybnMnKTtcbiAgICBjb25zdCBjb25maXJtUGF0dGVybnMgPSB2YWxpZGF0ZVN0cmluZ0FycmF5KGVyLmNvbmZpcm1QYXR0ZXJucywgJ2V4dGVybmFsUmVzdHJpY3Rpb25zLmNvbmZpcm1QYXR0ZXJucycpO1xuICAgIGNvbnN0IGFsbG93UGF0dGVybnMgPSB2YWxpZGF0ZVN0cmluZ0FycmF5KGVyLmFsbG93UGF0dGVybnMsICdleHRlcm5hbFJlc3RyaWN0aW9ucy5hbGxvd1BhdHRlcm5zJyk7XG4gICAgaWYgKGRlbnlQYXR0ZXJucykgdmFsaWRhdGVQYXR0ZXJuU3RyaW5ncyhkZW55UGF0dGVybnMsICdleHRlcm5hbFJlc3RyaWN0aW9ucy5kZW55UGF0dGVybnMnKTtcbiAgICBpZiAoY29uZmlybVBhdHRlcm5zKSB2YWxpZGF0ZVBhdHRlcm5TdHJpbmdzKGNvbmZpcm1QYXR0ZXJucywgJ2V4dGVybmFsUmVzdHJpY3Rpb25zLmNvbmZpcm1QYXR0ZXJucycpO1xuICAgIGlmIChhbGxvd1BhdHRlcm5zKSB2YWxpZGF0ZVBhdHRlcm5TdHJpbmdzKGFsbG93UGF0dGVybnMsICdleHRlcm5hbFJlc3RyaWN0aW9ucy5hbGxvd1BhdHRlcm5zJyk7XG4gICAgLy8gVmFsaWRhdGUgYXBwcm92YWxQb2xpY3kgKElzc3VlICM2MjUgUGhhc2UgMylcbiAgICBsZXQgYXBwcm92YWxQb2xpY3k6IENsaUFwcHJvdmFsUG9saWN5IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGlmIChlci5hcHByb3ZhbFBvbGljeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIGVyLmFwcHJvdmFsUG9saWN5ICE9PSAnb2JqZWN0JyB8fCBlci5hcHByb3ZhbFBvbGljeSA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZ2F0ZWtlZXBlciBwb2xpY3k6IGV4dGVybmFsUmVzdHJpY3Rpb25zLmFwcHJvdmFsUG9saWN5IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgICB9XG4gICAgICBjb25zdCBhcCA9IGVyLmFwcHJvdmFsUG9saWN5IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgICAvLyBWYWxpZGF0ZSByZXF1aXJlQXBwcm92YWxcbiAgICAgIGxldCByZXF1aXJlQXBwcm92YWw6ICgnbW9kZXJhdGUnIHwgJ2Rhbmdlcm91cycpW10gfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoYXAucmVxdWlyZUFwcHJvdmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFwLnJlcXVpcmVBcHByb3ZhbCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZ2F0ZWtlZXBlciBwb2xpY3k6IGV4dGVybmFsUmVzdHJpY3Rpb25zLmFwcHJvdmFsUG9saWN5LnJlcXVpcmVBcHByb3ZhbCBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsaWRMZXZlbHMgPSBuZXcgU2V0KFsnbW9kZXJhdGUnLCAnZGFuZ2Vyb3VzJ10pO1xuICAgICAgICBmb3IgKGNvbnN0IGxldmVsIG9mIGFwLnJlcXVpcmVBcHByb3ZhbCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgbGV2ZWwgIT09ICdzdHJpbmcnIHx8ICF2YWxpZExldmVscy5oYXMobGV2ZWwpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZ2F0ZWtlZXBlciBwb2xpY3k6IGV4dGVybmFsUmVzdHJpY3Rpb25zLmFwcHJvdmFsUG9saWN5LnJlcXVpcmVBcHByb3ZhbCBjb250YWlucyBpbnZhbGlkIHZhbHVlIFwiJHtsZXZlbH1cIi4gTXVzdCBiZSBcIm1vZGVyYXRlXCIgb3IgXCJkYW5nZXJvdXNcIi5gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWlyZUFwcHJvdmFsID0gYXAucmVxdWlyZUFwcHJvdmFsIGFzICgnbW9kZXJhdGUnIHwgJ2Rhbmdlcm91cycpW107XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIGRlZmF1bHRTY29wZVxuICAgICAgbGV0IGRlZmF1bHRTY29wZTogJ3NpbmdsZScgfCAndG9vbF9zZXNzaW9uJyB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChhcC5kZWZhdWx0U2NvcGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoYXAuZGVmYXVsdFNjb3BlICE9PSAnc2luZ2xlJyAmJiBhcC5kZWZhdWx0U2NvcGUgIT09ICd0b29sX3Nlc3Npb24nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGdhdGVrZWVwZXIgcG9saWN5OiBleHRlcm5hbFJlc3RyaWN0aW9ucy5hcHByb3ZhbFBvbGljeS5kZWZhdWx0U2NvcGUgbXVzdCBiZSBcInNpbmdsZVwiIG9yIFwidG9vbF9zZXNzaW9uXCIsIGdvdCBcIiR7YXAuZGVmYXVsdFNjb3BlfVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdFNjb3BlID0gYXAuZGVmYXVsdFNjb3BlO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSB0dGxTZWNvbmRzXG4gICAgICBsZXQgdHRsU2Vjb25kczogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKGFwLnR0bFNlY29uZHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGFwLnR0bFNlY29uZHMgIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNGaW5pdGUoYXAudHRsU2Vjb25kcykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZ2F0ZWtlZXBlciBwb2xpY3k6IGV4dGVybmFsUmVzdHJpY3Rpb25zLmFwcHJvdmFsUG9saWN5LnR0bFNlY29uZHMgbXVzdCBiZSBhIG51bWJlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcC50dGxTZWNvbmRzIDwgMzAgfHwgYXAudHRsU2Vjb25kcyA+IDM2MDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZ2F0ZWtlZXBlciBwb2xpY3k6IGV4dGVybmFsUmVzdHJpY3Rpb25zLmFwcHJvdmFsUG9saWN5LnR0bFNlY29uZHMgbXVzdCBiZSBiZXR3ZWVuIDMwIGFuZCAzNjAwLCBnb3QgJHthcC50dGxTZWNvbmRzfWApO1xuICAgICAgICB9XG4gICAgICAgIHR0bFNlY29uZHMgPSBhcC50dGxTZWNvbmRzO1xuICAgICAgfVxuXG4gICAgICBhcHByb3ZhbFBvbGljeSA9IHsgcmVxdWlyZUFwcHJvdmFsLCBkZWZhdWx0U2NvcGUsIHR0bFNlY29uZHMgfTtcbiAgICB9XG5cbiAgICBleHRlcm5hbFJlc3RyaWN0aW9ucyA9IHtcbiAgICAgIGRlc2NyaXB0aW9uOiBlci5kZXNjcmlwdGlvbiBhcyBzdHJpbmcsXG4gICAgICBkZW55UGF0dGVybnMsXG4gICAgICBjb25maXJtUGF0dGVybnMsXG4gICAgICBhbGxvd1BhdHRlcm5zLFxuICAgICAgYXBwcm92YWxQb2xpY3ksXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWxsb3csXG4gICAgY29uZmlybSxcbiAgICBkZW55LFxuICAgIHNjb3BlUmVzdHJpY3Rpb25zLFxuICAgIGV4dGVybmFsUmVzdHJpY3Rpb25zLFxuICB9O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGF1dGhvcmVkIGdhdGVrZWVwZXIgaW5wdXQgYmVmb3JlIHNhdmUuXG4gKlxuICogQXV0aG9yaW5nLXRpbWUgdmFsaWRhdGlvbiBpcyBzdHJpY3RlciB0aGFuIGxvYWQtdGltZSBzYW5pdGl6YXRpb246IGl0IHNob3VsZFxuICogcmVqZWN0IG1pc3BsYWNlZCBwb2xpY3kgYmxvY2tzIGluc3RlYWQgb2Ygc2lsZW50bHkgc2F2aW5nIGFuIGVsZW1lbnQgdGhhdFxuICogbGF0ZXIgYXBwZWFycyBhY3RpdmUgYnV0IGhhcyBub24tZW5mb3JjZWFibGUgZXh0ZXJuYWwgcmVzdHJpY3Rpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2F0ZWtlZXBlckF1dGhvcmluZ0Vycm9ycyhcbiAgcmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZFxuKTogc3RyaW5nW10ge1xuICBpZiAoIXJlY29yZCB8fCB0eXBlb2YgcmVjb3JkICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoT2JqZWN0Lmhhc093bihyZWNvcmQsICdleHRlcm5hbFJlc3RyaWN0aW9ucycpKSB7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICAnSW52YWxpZCBnYXRla2VlcGVyIHBvbGljeTogZXh0ZXJuYWxSZXN0cmljdGlvbnMgbXVzdCBiZSBuZXN0ZWQgdW5kZXIgZ2F0ZWtlZXBlci5leHRlcm5hbFJlc3RyaWN0aW9ucydcbiAgICApO1xuICB9XG5cbiAgaWYgKHJlY29yZC5nYXRla2VlcGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICB0cnkge1xuICAgICAgcGFyc2VFbGVtZW50UG9saWN5KHsgZ2F0ZWtlZXBlcjogcmVjb3JkLmdhdGVrZWVwZXIgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9ycy5wdXNoKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSB0aGF0IGEgdmFsdWUgaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBmaWVsZE5hbWUgLSBUaGUgZmllbGQgbmFtZSBmb3IgZXJyb3IgbWVzc2FnZXNcbiAqIEByZXR1cm5zIFRoZSB2YWxpZGF0ZWQgYXJyYXksIG9yIHVuZGVmaW5lZFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVN0cmluZ0FycmF5KFxuICB2YWx1ZTogdW5rbm93bixcbiAgZmllbGROYW1lOiBzdHJpbmdcbik6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBnYXRla2VlcGVyIHBvbGljeTogJHtmaWVsZE5hbWV9IG11c3QgYmUgYW4gYXJyYXlgKTtcbiAgfVxuXG4gIGlmICghdmFsdWUuZXZlcnkoKGl0ZW0pOiBpdGVtIGlzIHN0cmluZyA9PiB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGdhdGVrZWVwZXIgcG9saWN5OiAke2ZpZWxkTmFtZX0gbXVzdCBjb250YWluIG9ubHkgc3RyaW5nc2ApO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHBhdHRlcm4gc3RyaW5ncyBmb3IgbGVuZ3RoIGFuZCBub24tZW1wdGluZXNzLlxuICpcbiAqIEBwYXJhbSBwYXR0ZXJucyAtIEFycmF5IG9mIHBhdHRlcm4gc3RyaW5ncyB0byB2YWxpZGF0ZVxuICogQHBhcmFtIGZpZWxkTmFtZSAtIEZpZWxkIG5hbWUgZm9yIGVycm9yIG1lc3NhZ2VzXG4gKiBAdGhyb3dzIEVycm9yIGlmIGFueSBwYXR0ZXJuIGlzIGVtcHR5IG9yIGV4Y2VlZHMgTUFYX0dMT0JfUEFUVEVSTl9MRU5HVEhcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVQYXR0ZXJuU3RyaW5ncyhcbiAgcGF0dGVybnM6IHN0cmluZ1tdLFxuICBmaWVsZE5hbWU6IHN0cmluZ1xuKTogdm9pZCB7XG4gIGZvciAoY29uc3QgcGF0dGVybiBvZiBwYXR0ZXJucykge1xuICAgIGlmICghcGF0dGVybikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGdhdGVrZWVwZXIgcG9saWN5OiAke2ZpZWxkTmFtZX0gY29udGFpbnMgYW4gZW1wdHkgcGF0dGVybiBzdHJpbmdgKTtcbiAgICB9XG4gICAgaWYgKHBhdHRlcm4ubGVuZ3RoID4gTUFYX0dMT0JfUEFUVEVSTl9MRU5HVEgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBnYXRla2VlcGVyIHBvbGljeTogJHtmaWVsZE5hbWV9IHBhdHRlcm4gZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCBvZiAke01BWF9HTE9CX1BBVFRFUk5fTEVOR1RIfSBjaGFyYWN0ZXJzYCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogS25vd24gQ0xJIHRvb2wgbmFtZXMgdXNlZCBpbiBleHRlcm5hbFJlc3RyaWN0aW9ucyBwYXR0ZXJucy5cbiAqIFBhdHRlcm5zIHNob3VsZCBzdGFydCB3aXRoIG9uZSBvZiB0aGVzZSBmb2xsb3dlZCBieSAnOicgdG8gYmUgZWZmZWN0aXZlLlxuICovXG5jb25zdCBLTk9XTl9UT09MX1BSRUZJWEVTID0gbmV3IFNldChbXG4gICdCYXNoJywgJ0VkaXQnLCAnV3JpdGUnLCAnUmVhZCcsICdHbG9iJywgJ0dyZXAnLFxuICAnV2ViRmV0Y2gnLCAnV2ViU2VhcmNoJywgJ05vdGVib29rRWRpdCcsXG5dKTtcblxuLyoqXG4gKiBSZWdleCBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBubyBtZWFuaW5nIGluIGdsb2Igc3ludGF4LlxuICogVXNlcnMgd2hvIGluY2x1ZGUgdGhlc2UgbGlrZWx5IGludGVuZCByZWdleCBidXQgdGhlIG1hdGNoZXIgb25seSBzdXBwb3J0cyAqIGFuZCA/LlxuICovXG5jb25zdCBSRUdFWF9TWU5UQVhfUEFUVEVSTiA9IC9bfCgpe31bXFxdXFxcXCteJF0vO1xuXG4vKipcbiAqIEFuYWx5emUgZXh0ZXJuYWxSZXN0cmljdGlvbnMgcGF0dGVybnMgZm9yIGNvbW1vbiBtaXN0YWtlcyBhbmQgc3VzcGljaW91cyBzeW50YXguXG4gKlxuICogUmV0dXJucyBub24tZmF0YWwgd2FybmluZ3MgdG8gaGVscCBMTE1zIGFuZCB1c2VycyB3cml0ZSBlZmZlY3RpdmUgcGF0dGVybnMuXG4gKiBEb2VzIE5PVCB0aHJvdyDigJQgdmFsaWRhdGlvbiBlcnJvcnMgYXJlIGhhbmRsZWQgYnkge0BsaW5rIHZhbGlkYXRlUGF0dGVyblN0cmluZ3N9LlxuICpcbiAqIENoZWNrcyBwZXJmb3JtZWQgKElzc3VlICMxNjY0KTpcbiAqIC0gTWlzc2luZyB0b29sIHByZWZpeCAocGF0dGVybiBkb2Vzbid0IHN0YXJ0IHdpdGggVG9vbE5hbWU6KVxuICogLSBPdmVybHkgYnJvYWQgcGF0dGVybnMgKGJhcmUgYCpgIG9yIGBUb29sTmFtZToqYClcbiAqIC0gUmVnZXggc3ludGF4IHRoYXQgd29uJ3Qgd29yayBpbiBnbG9iIG1hdGNoaW5nXG4gKiAtIExlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZVxuICpcbiAqIEBwYXJhbSBwYXR0ZXJucyAtIEFycmF5IG9mIHBhdHRlcm4gc3RyaW5ncyB0byBhbmFseXplXG4gKiBAcGFyYW0gZmllbGROYW1lIC0gRmllbGQgbmFtZSBmb3Igd2FybmluZyBtZXNzYWdlc1xuICogQHJldHVybnMgQXJyYXkgb2Ygd2FybmluZyBtZXNzYWdlcyAoZW1wdHkgaWYgbm8gaXNzdWVzIGZvdW5kKVxuICovXG5leHBvcnQgZnVuY3Rpb24gYW5hbHl6ZVBhdHRlcm5TeW50YXgoXG4gIHBhdHRlcm5zOiBzdHJpbmdbXSxcbiAgZmllbGROYW1lOiBzdHJpbmdcbik6IHN0cmluZ1tdIHtcbiAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgcGF0dGVybiBvZiBwYXR0ZXJucykge1xuICAgIGFuYWx5emVPbmVQYXR0ZXJuKHBhdHRlcm4sIGZpZWxkTmFtZSwgd2FybmluZ3MpO1xuICB9XG4gIHJldHVybiB3YXJuaW5ncztcbn1cblxuLyoqXG4gKiBBbmFseXplIGEgc2luZ2xlIHBhdHRlcm4gc3RyaW5nIGFuZCBhcHBlbmQgYW55IHdhcm5pbmdzIGZvdW5kLlxuICogRXh0cmFjdGVkIGZyb20ge0BsaW5rIGFuYWx5emVQYXR0ZXJuU3ludGF4fSB0byByZWR1Y2UgY29nbml0aXZlIGNvbXBsZXhpdHkuXG4gKi9cbmZ1bmN0aW9uIGFuYWx5emVPbmVQYXR0ZXJuKFxuICBwYXR0ZXJuOiBzdHJpbmcsXG4gIGZpZWxkTmFtZTogc3RyaW5nLFxuICB3YXJuaW5nczogc3RyaW5nW11cbik6IHZvaWQge1xuICAvLyBDaGVjayBsZWFkaW5nL3RyYWlsaW5nIHdoaXRlc3BhY2VcbiAgaWYgKHBhdHRlcm4gIT09IHBhdHRlcm4udHJpbSgpKSB7XG4gICAgd2FybmluZ3MucHVzaChcbiAgICAgIGAke2ZpZWxkTmFtZX0gcGF0dGVybiAnJHtwYXR0ZXJufScgaGFzIGxlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZSDigJQgdGhpcyBtYXkgcHJldmVudCBleHBlY3RlZCBtYXRjaGVzYFxuICAgICk7XG4gIH1cblxuICAvLyBDaGVjayBmb3IgYmFyZSB3aWxkY2FyZCAobWF0Y2hlcyBldmVyeXRoaW5nKVxuICBpZiAocGF0dGVybiA9PT0gJyonKSB7XG4gICAgd2FybmluZ3MucHVzaChcbiAgICAgIGAke2ZpZWxkTmFtZX0gcGF0dGVybiAnKicgbWF0Y2hlcyBldmVyeXRoaW5nIOKAlCB0aGlzIGlzIGxpa2VseSB1bmludGVudGlvbmFsYFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIHRvb2wgcHJlZml4IGFuZCByZWxhdGVkIGlzc3Vlc1xuICBjb25zdCBjb2xvbkluZGV4ID0gcGF0dGVybi5pbmRleE9mKCc6Jyk7XG4gIGlmIChjb2xvbkluZGV4ID09PSAtMSkge1xuICAgIHdhcm5pbmdzLnB1c2goXG4gICAgICBgJHtmaWVsZE5hbWV9IHBhdHRlcm4gJyR7cGF0dGVybn0nIGhhcyBubyB0b29sIHByZWZpeCAoZS5nLiwgJ0Jhc2g6JywgJ0VkaXQ6JykuIGAgK1xuICAgICAgYFBhdHRlcm5zIGFyZSBtYXRjaGVkIGFnYWluc3QgJ1Rvb2xOYW1lOmlucHV0JyBzdHJpbmdzIGFuZCB3aWxsIG5vdCBtYXRjaCB3aXRob3V0IGEgcHJlZml4LmBcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGNoZWNrVG9vbFByZWZpeChwYXR0ZXJuLCBjb2xvbkluZGV4LCBmaWVsZE5hbWUsIHdhcm5pbmdzKTtcbiAgfVxuXG4gIC8vIENoZWNrIGZvciByZWdleCBzeW50YXggdGhhdCB3b24ndCB3b3JrIGluIGdsb2JcbiAgY29uc3QgcmVnZXhDaGFycyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IGNoIG9mIHBhdHRlcm4pIHtcbiAgICBpZiAoUkVHRVhfU1lOVEFYX1BBVFRFUk4udGVzdChjaCkpIHJlZ2V4Q2hhcnMuYWRkKGNoKTtcbiAgfVxuICBpZiAocmVnZXhDaGFycy5zaXplID4gMCkge1xuICAgIHdhcm5pbmdzLnB1c2goXG4gICAgICBgJHtmaWVsZE5hbWV9IHBhdHRlcm4gJyR7cGF0dGVybn0nIGNvbnRhaW5zIHJlZ2V4IHN5bnRheCAnJHtbLi4ucmVnZXhDaGFyc10uam9pbignLCAnKX0nIOKAlCBgICtcbiAgICAgIGBvbmx5IGdsb2Igd2lsZGNhcmRzICgqIGFuZCA/KSBhcmUgc3VwcG9ydGVkYFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVjayB0b29sIHByZWZpeCB2YWxpZGl0eSBhbmQgYnJvYWRuZXNzIGZvciBhIHBhdHRlcm4gdGhhdCBjb250YWlucyAnOicuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrVG9vbFByZWZpeChcbiAgcGF0dGVybjogc3RyaW5nLFxuICBjb2xvbkluZGV4OiBudW1iZXIsXG4gIGZpZWxkTmFtZTogc3RyaW5nLFxuICB3YXJuaW5nczogc3RyaW5nW11cbik6IHZvaWQge1xuICBjb25zdCBwcmVmaXggPSBwYXR0ZXJuLnNsaWNlKDAsIGNvbG9uSW5kZXgpO1xuICBjb25zdCBhZnRlckNvbG9uID0gcGF0dGVybi5zbGljZShjb2xvbkluZGV4ICsgMSk7XG5cbiAgLy8gQ2hlY2sgZm9yIHVua25vd24gdG9vbCBwcmVmaXhcbiAgaWYgKCFLTk9XTl9UT09MX1BSRUZJWEVTLmhhcyhwcmVmaXgpICYmICFwcmVmaXguc3RhcnRzV2l0aCgnbWNwXycpKSB7XG4gICAgd2FybmluZ3MucHVzaChcbiAgICAgIGAke2ZpZWxkTmFtZX0gcGF0dGVybiAnJHtwYXR0ZXJufScgdXNlcyB1bmtub3duIHRvb2wgcHJlZml4ICcke3ByZWZpeH0nLiBgICtcbiAgICAgIGBLbm93biBwcmVmaXhlczogJHtbLi4uS05PV05fVE9PTF9QUkVGSVhFU10uam9pbignLCAnKX0uIE1DUCB0b29scyB1c2UgJ21jcF8nIHByZWZpeC5gXG4gICAgKTtcbiAgfVxuXG4gIC8vIENoZWNrIGZvciBvdmVybHkgYnJvYWQgVG9vbE5hbWU6KiBwYXR0ZXJuXG4gIGlmIChhZnRlckNvbG9uID09PSAnKicpIHtcbiAgICB3YXJuaW5ncy5wdXNoKFxuICAgICAgYCR7ZmllbGROYW1lfSBwYXR0ZXJuICcke3BhdHRlcm59JyBtYXRjaGVzIEFMTCAke3ByZWZpeH0gb3BlcmF0aW9ucyDigJQgdmVyaWZ5IHRoaXMgaXMgaW50ZW50aW9uYWxgXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlIGFuZCBzYW5pdGl6ZSBhIGdhdGVrZWVwZXIgcG9saWN5IGR1cmluZyBlbGVtZW50IGRlc2VyaWFsaXphdGlvbi5cbiAqXG4gKiBSZXR1cm5zIGEgdmFsaWRhdGVkIHtAbGluayBFbGVtZW50R2F0ZWtlZXBlclBvbGljeX0gaWYgdGhlIHJhdyBkYXRhIGlzXG4gKiBzdHJ1Y3R1cmFsbHkgdmFsaWQsIG9yIGB1bmRlZmluZWRgIGlmIHRoZSBkYXRhIGlzIGFic2VudCwgZmFsc3ksIG9yXG4gKiBtYWxmb3JtZWQuIE1hbGZvcm1lZCBwb2xpY2llcyBhcmUgbG9nZ2VkIGFzIHNlY3VyaXR5IGV2ZW50cyBhbmQgc3RyaXBwZWRcbiAqIHNvIHRoZXkgbmV2ZXIgcmVhY2ggdGhlIGVuZm9yY2VtZW50IHBpcGVsaW5lLlxuICpcbiAqIFVzZSB0aGlzIGF0IGV2ZXJ5IGRlc2VyaWFsaXphdGlvbiBib3VuZGFyeSAobWFuYWdlciBgcGFyc2VNZXRhZGF0YWAgL1xuICogYHNhbml0aXplTWV0YWRhdGFgIC8gYHBhcnNlTWVtb3J5RmlsZWApIHRvIGd1YXJhbnRlZSB0aGF0IG9ubHkgd2VsbC1mb3JtZWRcbiAqIHBvbGljaWVzIHN1cnZpdmUgbG9hZGluZy5cbiAqXG4gKiBAcGFyYW0gcmF3UG9saWN5IC0gVGhlIHJhdyBnYXRla2VlcGVyIHZhbHVlIGZyb20gcGFyc2VkIFlBTUwvSlNPTlxuICogQHBhcmFtIGVsZW1lbnROYW1lIC0gRWxlbWVudCBuYW1lIGZvciBkaWFnbm9zdGljIGxvZ2dpbmdcbiAqIEBwYXJhbSBlbGVtZW50VHlwZSAtIEVsZW1lbnQgdHlwZSBmb3IgZGlhZ25vc3RpYyBsb2dnaW5nXG4gKiBAcmV0dXJucyBWYWxpZGF0ZWQgcG9saWN5IG9yIHVuZGVmaW5lZFxuICpcbiAqIEBzaW5jZSBJc3N1ZSAjNTI0IOKAlCBSdW50aW1lIHZhbGlkYXRpb24gZm9yIGFsbCBlbGVtZW50IHR5cGVzXG4gKi9cbi8qKlxuICogR2F0ZWtlZXBlciBpbmZyYXN0cnVjdHVyZSBvcGVyYXRpb25zIOKAlCB0d28gcmVsYXRlZCBzZXRzIHdpdGggZGlzdGluY3QgcHVycG9zZXMuXG4gKlxuICogVU5HQVRBQkxFX09QRVJBVElPTlM6IE9wZXJhdGlvbnMgdGhhdCBtdXN0IE5FVkVSIGFwcGVhciBpbiBlbGVtZW50IHBvbGljeSBsaXN0cy5cbiAqIFRoZXNlIGFyZSBwdXJlIGludGVybmFsIHBsdW1iaW5nIOKAlCBnYXRpbmcgdGhlbSBzZXJ2ZXMgbm8gc2VjdXJpdHkgcHVycG9zZSBhbmRcbiAqIGJyZWFrcyBjcml0aWNhbCBmbG93cyAodmVyaWZpY2F0aW9uLCBDTEkgYXBwcm92YWwsIHBlcm1pc3Npb24gZXZhbHVhdGlvbikuXG4gKiBTdHJpcHBlZCBmcm9tIEFMTCBwb2xpY3kgbGlzdHMgKGFsbG93LCBjb25maXJtLCBkZW55KSBkdXJpbmcgc2FuaXRpemF0aW9uLlxuICpcbiAqIEdBVEVLRUVQRVJfSU5GUkFfT1BFUkFUSU9OUzogT3BlcmF0aW9ucyB0aGF0IHNraXAgTGF5ZXIgMiAoZWxlbWVudCBwb2xpY3lcbiAqIHJlc29sdXRpb24pIGR1cmluZyBwcmltYXJ5IGVuZm9yY2VtZW50LiBUaGlzIGlzIGEgU1VQRVJTRVQgb2YgVU5HQVRBQkxFX09QRVJBVElPTlNcbiAqIOKAlCBpdCBhZGRzIGNvbmZpcm1fb3BlcmF0aW9uLCB3aGljaCBJUyBhIHZhbGlkIHBvbGljeSB0YXJnZXQgKGRlbnkgPSBudWNsZWFyIHNhbmRib3gpXG4gKiBidXQgbXVzdCBub3QgYmUgZ2F0ZWQgdGhyb3VnaCB0aGUgbm9ybWFsIGVuZm9yY2UoKSBwYXRoICh0aGF0IGNyZWF0ZXMgdGhlXG4gKiBjYXNjYWRpbmcgY29uZmlybWF0aW9uIGxvb3AgZnJvbSBJc3N1ZSAjNzU4KS4gY29uZmlybV9vcGVyYXRpb24ncyBlbGVtZW50IHBvbGljaWVzXG4gKiBhcmUgZW5mb3JjZWQgdGhyb3VnaCBhIHNlcGFyYXRlIGNoZWNrIGluIHRoZSBjb25maXJtIGhhbmRsZXIgaW5zdGVhZC5cbiAqXG4gKiBSZWxhdGlvbnNoaXA6IEdBVEVLRUVQRVJfSU5GUkFfT1BFUkFUSU9OUyA9IFVOR0FUQUJMRV9PUEVSQVRJT05TICsgY29uZmlybV9vcGVyYXRpb25cbiAqIFRoaXMgZGVyaXZhdGlvbiBpcyBleHBsaWNpdCBpbiBjb2RlIHRvIHByZXZlbnQgdGhlIHNldHMgZnJvbSBkcmlmdGluZyBhcGFydC5cbiAqL1xuY29uc3QgVU5HQVRBQkxFX09QRVJBVElPTlMgPSBuZXcgU2V0KFtcbiAgJ3ZlcmlmeV9jaGFsbGVuZ2UnLFxuICAncmVsZWFzZV9kZWFkbG9jaycsXG4gICdhcHByb3ZlX2NsaV9wZXJtaXNzaW9uJyxcbiAgJ3Blcm1pc3Npb25fcHJvbXB0Jyxcbl0pO1xuXG4vKiogRGVyaXZlZCBmcm9tIFVOR0FUQUJMRV9PUEVSQVRJT05TICsgY29uZmlybV9vcGVyYXRpb24uIFNlZSBibG9jayBjb21tZW50IGFib3ZlLiAqL1xuY29uc3QgR0FURUtFRVBFUl9JTkZSQV9PUEVSQVRJT05TID0gbmV3IFNldChbXG4gIC4uLlVOR0FUQUJMRV9PUEVSQVRJT05TLFxuICAnY29uZmlybV9vcGVyYXRpb24nLFxuXSk7XG5cbi8qKlxuICogQ2hlY2sgaWYgYW4gb3BlcmF0aW9uIGlzIGEgZ2F0ZWtlZXBlciBpbmZyYXN0cnVjdHVyZSBvcGVyYXRpb24gdGhhdCBzaG91bGRcbiAqIHNraXAgZWxlbWVudCBwb2xpY3kgZXZhbHVhdGlvbiBpbiB0aGUgcHJpbWFyeSBlbmZvcmNlbWVudCBwYXRoLlxuICogRXhwb3J0ZWQgZm9yIHVzZSBieSBNQ1BBUUxIYW5kbGVyLiBJc3N1ZSAjNzU4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNHYXRla2VlcGVySW5mcmFPcGVyYXRpb24ob3BlcmF0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIEdBVEVLRUVQRVJfSU5GUkFfT1BFUkFUSU9OUy5oYXMob3BlcmF0aW9uKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhbnkgYWN0aXZlIGVsZW1lbnRzIGRlbnkgY29uZmlybV9vcGVyYXRpb24gKG51Y2xlYXIgc2FuZGJveCkuXG4gKiBSZXR1cm5zIHRoZSBkZW55aW5nIGVsZW1lbnQgbmFtZSBpZiBmb3VuZCwgdW5kZWZpbmVkIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRDb25maXJtRGVueWluZ0VsZW1lbnQoXG4gIGFjdGl2ZUVsZW1lbnRzOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT5cbik6IHsgbmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBhY3RpdmVFbGVtZW50cykge1xuICAgIGNvbnN0IGdhdGVrZWVwZXIgPSBlbGVtZW50Lm1ldGFkYXRhPy5nYXRla2VlcGVyIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGRlbnlMaXN0ID0gZ2F0ZWtlZXBlcj8uZGVueTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkZW55TGlzdCkgJiYgZGVueUxpc3QuaW5jbHVkZXMoJ2NvbmZpcm1fb3BlcmF0aW9uJykpIHtcbiAgICAgIHJldHVybiB7IG5hbWU6IGVsZW1lbnQubmFtZSwgdHlwZTogZWxlbWVudC50eXBlIH07XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYW55IGFjdGl2ZSBlbGVtZW50cyBoYXZlIGNvbmZpcm1fb3BlcmF0aW9uIGluIHRoZWlyIGNvbmZpcm0gbGlzdCAoYWR2aXNvcnkpLlxuICogUmV0dXJucyB0aGUgZWxlbWVudCBuYW1lcyB0aGF0IHJlcXVlc3QgYWRkaXRpb25hbCBzY3J1dGlueS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRDb25maXJtQWR2aXNvcnlFbGVtZW50cyhcbiAgYWN0aXZlRWxlbWVudHM6IEFycmF5PHsgbmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PlxuKTogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZyB9PiB7XG4gIGNvbnN0IGFkdmlzb3JpZXM6IEFycmF5PHsgbmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmcgfT4gPSBbXTtcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIGFjdGl2ZUVsZW1lbnRzKSB7XG4gICAgY29uc3QgZ2F0ZWtlZXBlciA9IGVsZW1lbnQubWV0YWRhdGE/LmdhdGVrZWVwZXIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgY29uZmlybUxpc3QgPSBnYXRla2VlcGVyPy5jb25maXJtO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbmZpcm1MaXN0KSAmJiBjb25maXJtTGlzdC5pbmNsdWRlcygnY29uZmlybV9vcGVyYXRpb24nKSkge1xuICAgICAgYWR2aXNvcmllcy5wdXNoKHsgbmFtZTogZWxlbWVudC5uYW1lLCB0eXBlOiBlbGVtZW50LnR5cGUgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBhZHZpc29yaWVzO1xufVxuXG4vKipcbiAqIFN0cmlwIHVuZ2F0YWJsZSBvcGVyYXRpb25zIGZyb20gYSBwb2xpY3kgbGlzdCBhbmQgbG9nIHdhcm5pbmdzLlxuICogUmV0dXJucyB0aGUgZmlsdGVyZWQgbGlzdCAobWF5IGJlIGVtcHR5KS5cbiAqXG4gKiBOb3RlOiBjb25maXJtX29wZXJhdGlvbiBpcyBOT1Qgc3RyaXBwZWQgZnJvbSBkZW55IGxpc3RzIOKAlCBpdCdzIGEgbGVnaXRpbWF0ZVxuICogc2FuZGJveCBtZWNoYW5pc20uIEl0IElTIHN0cmlwcGVkIGZyb20gYWxsb3cvY29uZmlybSBsaXN0cyBzaW5jZSB0aG9zZSBhcmVcbiAqIGhhbmRsZWQgdGhyb3VnaCBhZHZpc29yeSBtZXNzYWdpbmcsIG5vdCB0aHJvdWdoIGVuZm9yY2UoKS5cbiAqL1xuZnVuY3Rpb24gc3RyaXBVbmdhdGFibGUoXG4gIG9wZXJhdGlvbnM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuICBsaXN0TmFtZTogc3RyaW5nLFxuICBlbGVtZW50TmFtZTogc3RyaW5nLFxuICBlbGVtZW50VHlwZTogc3RyaW5nLFxuKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICBpZiAoIW9wZXJhdGlvbnM/Lmxlbmd0aCkgcmV0dXJuIG9wZXJhdGlvbnM7XG5cbiAgLy8gY29uZmlybV9vcGVyYXRpb24gaW4gZGVueSBsaXN0cyA9IG51Y2xlYXIgc2FuZGJveCAocHJlc2VydmUpXG4gIC8vIGNvbmZpcm1fb3BlcmF0aW9uIGluIGNvbmZpcm0gbGlzdHMgPSBhZHZpc29yeSBtYXJrZXIgKHByZXNlcnZlIOKAlCBpbmVydCBpbiBlbmZvcmNlIHBhdGgsXG4gIC8vICAgcmVhZCBhdCBydW50aW1lIGJ5IGZpbmRDb25maXJtQWR2aXNvcnlFbGVtZW50cygpLiBTYWZlIGJlY2F1c2Ugc2tpcEVsZW1lbnRQb2xpY2llc1xuICAvLyAgIHByZXZlbnRzIHJlc29sdmVFbGVtZW50UG9saWN5KCkgZnJvbSBldmVyIGV2YWx1YXRpbmcgY29uZmlybV9vcGVyYXRpb24gYXMgYW4gb3BlcmF0aW9uLilcbiAgLy8gY29uZmlybV9vcGVyYXRpb24gaW4gYWxsb3cgbGlzdHMgPSByZWR1bmRhbnQgd2l0aCByb3V0ZSBkZWZhdWx0IEFVVE9fQVBQUk9WRSAoc3RyaXApXG4gIGNvbnN0IG9wc1RvU3RyaXAgPSBsaXN0TmFtZSA9PT0gJ2FsbG93J1xuICAgID8gbmV3IFNldChbLi4uVU5HQVRBQkxFX09QRVJBVElPTlMsICdjb25maXJtX29wZXJhdGlvbiddKVxuICAgIDogVU5HQVRBQkxFX09QRVJBVElPTlM7XG5cbiAgY29uc3Qgc3RyaXBwZWQgPSBvcGVyYXRpb25zLmZpbHRlcihvcCA9PiB7XG4gICAgaWYgKG9wc1RvU3RyaXAuaGFzKG9wKSkge1xuICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgIGBbR2F0ZWtlZXBlcl0gU3RyaXBwZWQgXCIke29wfVwiIGZyb20gJHtsaXN0TmFtZX0gbGlzdCBpbiAke2VsZW1lbnRUeXBlfSBcIiR7ZWxlbWVudE5hbWV9XCIg4oCUIGAgK1xuICAgICAgICBgZ2F0ZWtlZXBlciBpbmZyYXN0cnVjdHVyZSBvcGVyYXRpb25zIGNhbm5vdCBiZSBnYXRlZCBieSBlbGVtZW50IHBvbGljaWVzIChJc3N1ZSAjNzU4KWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9KTtcbiAgcmV0dXJuIHN0cmlwcGVkLmxlbmd0aCA+IDAgPyBzdHJpcHBlZCA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplR2F0ZWtlZXBlclBvbGljeShcbiAgcmF3UG9saWN5OiB1bmtub3duLFxuICBlbGVtZW50TmFtZTogc3RyaW5nLFxuICBlbGVtZW50VHlwZTogc3RyaW5nLFxuICBkaWFnbm9zdGljc1RhcmdldD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogRWxlbWVudEdhdGVrZWVwZXJQb2xpY3kgfCB1bmRlZmluZWQge1xuICBpZiAocmF3UG9saWN5ID09PSB1bmRlZmluZWQgfHwgcmF3UG9saWN5ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gV3JhcCBpbiBhIG1ldGFkYXRhIGVudmVsb3BlIHNvIHBhcnNlRWxlbWVudFBvbGljeSBjYW4gZXh0cmFjdCBpdFxuICAgIGNvbnN0IHZhbGlkYXRlZCA9IHBhcnNlRWxlbWVudFBvbGljeSh7IGdhdGVrZWVwZXI6IHJhd1BvbGljeSB9KTtcbiAgICBjbGVhckdhdGVrZWVwZXJEaWFnbm9zdGljcyhkaWFnbm9zdGljc1RhcmdldCA/PyByYXdQb2xpY3kpO1xuICAgIGlmICh2YWxpZGF0ZWQpIHtcbiAgICAgIC8vIElzc3VlICM3NTg6IFN0cmlwIGdhdGVrZWVwZXIgaW5mcmFzdHJ1Y3R1cmUgb3BlcmF0aW9ucyBmcm9tIGVsZW1lbnQgcG9saWNpZXNcbiAgICAgIC8vIHRvIHByZXZlbnQgY2FzY2FkaW5nIGNvbmZpcm1hdGlvbiBsb29wc1xuICAgICAgdmFsaWRhdGVkLmFsbG93ID0gc3RyaXBVbmdhdGFibGUodmFsaWRhdGVkLmFsbG93LCAnYWxsb3cnLCBlbGVtZW50TmFtZSwgZWxlbWVudFR5cGUpO1xuICAgICAgdmFsaWRhdGVkLmNvbmZpcm0gPSBzdHJpcFVuZ2F0YWJsZSh2YWxpZGF0ZWQuY29uZmlybSwgJ2NvbmZpcm0nLCBlbGVtZW50TmFtZSwgZWxlbWVudFR5cGUpO1xuICAgICAgdmFsaWRhdGVkLmRlbnkgPSBzdHJpcFVuZ2F0YWJsZSh2YWxpZGF0ZWQuZGVueSwgJ2RlbnknLCBlbGVtZW50TmFtZSwgZWxlbWVudFR5cGUpO1xuXG4gICAgICBsb2dnZXIuZGVidWcoYExvYWRlZCBnYXRla2VlcGVyIHBvbGljeSBmb3IgJHtlbGVtZW50VHlwZX0gXCIke2VsZW1lbnROYW1lfVwiYCwge1xuICAgICAgICBhbGxvdzogdmFsaWRhdGVkLmFsbG93Py5sZW5ndGggPz8gMCxcbiAgICAgICAgY29uZmlybTogdmFsaWRhdGVkLmNvbmZpcm0/Lmxlbmd0aCA/PyAwLFxuICAgICAgICBkZW55OiB2YWxpZGF0ZWQuZGVueT8ubGVuZ3RoID8/IDAsXG4gICAgICAgIGhhc1Njb3BlUmVzdHJpY3Rpb25zOiAhIXZhbGlkYXRlZC5zY29wZVJlc3RyaWN0aW9ucyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdmFsaWRhdGVkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBmb3JtYXRHYXRla2VlcGVyRGlhZ25vc3RpY01lc3NhZ2UoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKTtcbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnWUFNTF9QQVJTSU5HX1dBUk5JTkcnLFxuICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgc291cmNlOiBgJHtlbGVtZW50VHlwZX0uZGVzZXJpYWxpemVgLFxuICAgICAgZGV0YWlsczogYE1hbGZvcm1lZCBnYXRla2VlcGVyIHBvbGljeSBpbiBcIiR7ZWxlbWVudE5hbWV9XCIgc3RyaXBwZWQgZHVyaW5nIGxvYWQ6ICR7bWVzc2FnZX1gLFxuICAgIH0pO1xuICAgIGxvZ2dlci53YXJuKGBTdHJpcHBlZCBtYWxmb3JtZWQgZ2F0ZWtlZXBlciBwb2xpY3kgZnJvbSAke2VsZW1lbnRUeXBlfSBcIiR7ZWxlbWVudE5hbWV9XCI6ICR7bWVzc2FnZX1gKTtcbiAgICBhdHRhY2hHYXRla2VlcGVyRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3NUYXJnZXQgPz8gcmF3UG9saWN5LCBtZXNzYWdlKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEdhdGVrZWVwZXJEaWFnbm9zdGljTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBub3JtYWxpemVkID0gbWVzc2FnZS50cmltKCk7XG4gIGNvbnN0IGd1aWRhbmNlID0gZ2V0R2F0ZWtlZXBlckZpeEd1aWRhbmNlKG5vcm1hbGl6ZWQpO1xuICByZXR1cm4gZ3VpZGFuY2UgPyBgJHtub3JtYWxpemVkfSBGaXg6ICR7Z3VpZGFuY2V9YCA6IG5vcm1hbGl6ZWQ7XG59XG5cbmZ1bmN0aW9uIGdldEdhdGVrZWVwZXJGaXhHdWlkYW5jZShtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAobWVzc2FnZS5pbmNsdWRlcygnZXh0ZXJuYWxSZXN0cmljdGlvbnMgbXVzdCBiZSBuZXN0ZWQgdW5kZXIgZ2F0ZWtlZXBlci5leHRlcm5hbFJlc3RyaWN0aW9ucycpKSB7XG4gICAgcmV0dXJuICdNb3ZlIGV4dGVybmFsUmVzdHJpY3Rpb25zIHVuZGVyIGdhdGVrZWVwZXIuZXh0ZXJuYWxSZXN0cmljdGlvbnMgYW5kIGtlZXAgYWxsb3dQYXR0ZXJucywgY29uZmlybVBhdHRlcm5zLCBhbmQgZGVueVBhdHRlcm5zIGluc2lkZSB0aGF0IG5lc3RlZCBvYmplY3QuJztcbiAgfVxuXG4gIGlmIChtZXNzYWdlLmluY2x1ZGVzKCdleHRlcm5hbFJlc3RyaWN0aW9ucy5kZXNjcmlwdGlvbiBpcyByZXF1aXJlZCcpKSB7XG4gICAgcmV0dXJuICdBZGQgZ2F0ZWtlZXBlci5leHRlcm5hbFJlc3RyaWN0aW9ucy5kZXNjcmlwdGlvbiB3aXRoIGEgc2hvcnQgZXhwbGFuYXRpb24sIGZvciBleGFtcGxlIGRlc2NyaXB0aW9uOiBcIlJlYWQtb25seSBzaGVsbCBwb2xpY3lcIi4nO1xuICB9XG5cbiAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoJ211c3QgYmUgYW4gYXJyYXknKSB8fCBtZXNzYWdlLmluY2x1ZGVzKCdtdXN0IGNvbnRhaW4gb25seSBzdHJpbmdzJykpIHtcbiAgICByZXR1cm4gJ1VzZSBZQU1MIGFycmF5cyBvZiBzdHJpbmdzLCBmb3IgZXhhbXBsZSBkZW55UGF0dGVybnM6IFtcIkJhc2g6cm0gKlwiXSBvciBhbGxvdzogW1wicmVhZF8qXCJdLic7XG4gIH1cblxuICBpZiAobWVzc2FnZS5pbmNsdWRlcygnc2NvcGVSZXN0cmljdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKSkge1xuICAgIHJldHVybiAnVXNlIHNjb3BlUmVzdHJpY3Rpb25zIGFzIGFuIG9iamVjdCwgZm9yIGV4YW1wbGUgc2NvcGVSZXN0cmljdGlvbnM6IHsgYWxsb3dlZFR5cGVzOiBbXCJwZXJzb25hXCIsIFwic2tpbGxcIl0gfS4nO1xuICB9XG5cbiAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoJ211c3QgYmUgYW4gb2JqZWN0JykpIHtcbiAgICByZXR1cm4gJ1VzZSBnYXRla2VlcGVyIGFzIGFuIG9iamVjdCwgZm9yIGV4YW1wbGUgZ2F0ZWtlZXBlcjogeyBkZW55OiBbXCJkZWxldGVfZWxlbWVudFwiXSB9Lic7XG4gIH1cblxuICByZXR1cm4gJ0NvbXBhcmUgdGhlIGVsZW1lbnQgYWdhaW5zdCB0aGUgZ2F0ZWtlZXBlciBleGFtcGxlcyBmcm9tIGludHJvc3BlY3Rpb24gb3IgdGhlIHNlY3VyaXR5IGRvY3MsIHRoZW4gcmVhY3RpdmF0ZSBpdCBhZnRlciBmaXhpbmcgdGhlIHN0cnVjdHVyZS4nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNoR2F0ZWtlZXBlckRpYWdub3N0aWNzKHRhcmdldDogdW5rbm93biwgbWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmICghdGFyZ2V0IHx8IHR5cGVvZiB0YXJnZXQgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgKHRhcmdldCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuZ2F0ZWtlZXBlckRpYWdub3N0aWNzID0ge1xuICAgIHZhbGlkOiBmYWxzZSxcbiAgICBlbmZvcmNlYWJsZTogZmFsc2UsXG4gICAgbWVzc2FnZSxcbiAgfSBzYXRpc2ZpZXMgR2F0ZWtlZXBlclBvbGljeURpYWdub3N0aWNzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJHYXRla2VlcGVyRGlhZ25vc3RpY3ModGFyZ2V0OiB1bmtub3duKTogdm9pZCB7XG4gIGlmICghdGFyZ2V0IHx8IHR5cGVvZiB0YXJnZXQgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZGVsZXRlICh0YXJnZXQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmdhdGVrZWVwZXJEaWFnbm9zdGljcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEdhdGVrZWVwZXJEaWFnbm9zdGljcyh0YXJnZXQ6IHVua25vd24pOiBHYXRla2VlcGVyUG9saWN5RGlhZ25vc3RpY3MgfCB1bmRlZmluZWQge1xuICBpZiAoIXRhcmdldCB8fCB0eXBlb2YgdGFyZ2V0ICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBkaWFnbm9zdGljcyA9ICh0YXJnZXQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmdhdGVrZWVwZXJEaWFnbm9zdGljcztcbiAgaWYgKCFkaWFnbm9zdGljcyB8fCB0eXBlb2YgZGlhZ25vc3RpY3MgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHJlY29yZCA9IGRpYWdub3N0aWNzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpZiAocmVjb3JkLnZhbGlkID09PSBmYWxzZSAmJiByZWNvcmQuZW5mb3JjZWFibGUgPT09IGZhbHNlICYmIHR5cGVvZiByZWNvcmQubWVzc2FnZSA9PT0gJ3N0cmluZycgJiYgcmVjb3JkLm1lc3NhZ2UudHJpbSgpICE9PSAnJykge1xuICAgIHJldHVybiB7XG4gICAgICB2YWxpZDogZmFsc2UsXG4gICAgICBlbmZvcmNlYWJsZTogZmFsc2UsXG4gICAgICBtZXNzYWdlOiByZWNvcmQubWVzc2FnZSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"OperationPolicies.d.ts","sourceRoot":"","sources":["../../../../src/handlers/mcp-aql/policies/OperationPolicies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAA8B,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAgBtF;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,YAAY,GAAG,eAAe,CAE/E;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAyFtE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,iCAA6B,CAAC;AAE7D;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAEjF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,CAe5E;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAIjE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,EAAE,CAUrE;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,EAAE,CAEpD;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,IAAI,MAAM,EAAE,CAK5D"}
1
+ {"version":3,"file":"OperationPolicies.d.ts","sourceRoot":"","sources":["../../../../src/handlers/mcp-aql/policies/OperationPolicies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAA8B,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAgBtF;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,YAAY,GAAG,eAAe,CAE/E;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CA8FtE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,iCAA6B,CAAC;AAE7D;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAEjF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,CAe5E;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAIjE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,EAAE,CAUrE;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,EAAE,CAEpD;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,IAAI,MAAM,EAAE,CAK5D"}
@@ -83,6 +83,11 @@ export const OPERATION_POLICY_OVERRIDES = {
83
83
  defaultLevel: PermissionLevel.AUTO_APPROVE,
84
84
  rationale: 'Verification flow — must be auto-approved to avoid requiring confirmation to verify',
85
85
  },
86
+ release_deadlock: {
87
+ defaultLevel: PermissionLevel.AUTO_APPROVE,
88
+ rationale: 'Deadlock relief flow — requires out-of-band verification and must remain reachable even when confirmations are blocked',
89
+ canBeElevated: false,
90
+ },
86
91
  beetlejuice_beetlejuice_beetlejuice: {
87
92
  defaultLevel: PermissionLevel.AUTO_APPROVE,
88
93
  rationale: 'Test fixture for danger zone verification — must be auto-approved to avoid requiring confirmation to test',
@@ -244,4 +249,4 @@ export function getConfirmationRequiredOperations() {
244
249
  ...getOperationsAtLevel(PermissionLevel.CONFIRM_SINGLE_USE),
245
250
  ];
246
251
  }
247
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3BlcmF0aW9uUG9saWNpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaGFuZGxlcnMvbWNwLWFxbC9wb2xpY2llcy9PcGVyYXRpb25Qb2xpY2llcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJDRztBQUVILE9BQU8sRUFBRSxlQUFlLEVBQXdCLE1BQU0sdUJBQXVCLENBQUM7QUFDOUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBcUIsTUFBTSx1QkFBdUIsQ0FBQztBQUV0Rjs7Ozs7R0FLRztBQUNILE1BQU0sdUJBQXVCLEdBQTBDO0lBQ3JFLElBQUksRUFBRSxlQUFlLENBQUMsWUFBWTtJQUNsQyxNQUFNLEVBQUUsZUFBZSxDQUFDLGVBQWU7SUFDdkMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxrQkFBa0I7SUFDMUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxrQkFBa0I7SUFDMUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxrQkFBa0I7Q0FDNUMsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUFDLFFBQXNCO0lBQzVELE9BQU8sdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFvQztJQUN6RSx3Q0FBd0M7SUFDeEMsc0VBQXNFO0lBQ3RFLGdCQUFnQixFQUFFO1FBQ2hCLFlBQVksRUFBRSxlQUFlLENBQUMsWUFBWTtRQUMxQyxTQUFTLEVBQUUscUZBQXFGO0tBQ2pHO0lBQ0QsbUNBQW1DLEVBQUU7UUFDbkMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxZQUFZO1FBQzFDLFNBQVMsRUFBRSwyR0FBMkc7S0FDdkg7SUFFRCx3Q0FBd0M7SUFDeEMsc0ZBQXNGO0lBQ3RGLGNBQWMsRUFBRTtRQUNkLFlBQVks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QUFDNUMsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxTQUFpQjtJQUN0RCxNQUFNLFFBQVEsR0FBRywwQkFBMEIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2RCwwRUFBMEU7SUFDMUUsT0FBTyxRQUFRLEVBQUUsYUFBYSxJQUFJLElBQUksQ0FBQztBQUN6QyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEtBQXNCO0lBQ3pELE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztJQUU3QixLQUFLLE1BQU0sU0FBUyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1FBQ3RELElBQUkseUJBQXlCLENBQUMsU0FBUyxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDbkQsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUseUJBQXlCO0lBQ3ZDLE9BQU8sb0JBQW9CLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzVELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsaUNBQWlDO0lBQy9DLE9BQU87UUFDTCxHQUFHLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUM7UUFDeEQsR0FBRyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUM7S0FDNUQsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE9wZXJhdGlvbiBQb2xpY2llc1xuICpcbiAqIERlZmF1bHQgcGVybWlzc2lvbiBsZXZlbHMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgb3BlcmF0aW9uJ3MgZW5kcG9pbnQgcm91dGluZzpcbiAqIC0gUkVBRCAgICDihpIgQVVUT19BUFBST1ZFIChyZWFkLW9ubHksIG5vIHNpZGUgZWZmZWN0cylcbiAqIC0gQ1JFQVRFICDihpIgQ09ORklSTV9TRVNTSU9OIChhZGRpdGl2ZSBzdGF0ZSBjaGFuZ2VzLCBzYWZlIG9uY2UgYXBwcm92ZWQpXG4gKiAtIFVQREFURSAg4oaSIENPTkZJUk1fU0lOR0xFX1VTRSAobW9kaWZ5aW5nIGV4aXN0aW5nIGRhdGEsIGVhY2ggaW5zdGFuY2UgcmV2aWV3ZWQpXG4gKiAtIERFTEVURSAg4oaSIENPTkZJUk1fU0lOR0xFX1VTRSAoZGVzdHJ1Y3RpdmUsIGVhY2ggaW5zdGFuY2UgcmV2aWV3ZWQpXG4gKiAtIEVYRUNVVEUg4oaSIENPTkZJUk1fU0lOR0xFX1VTRSAodW5wcmVkaWN0YWJsZSBzaWRlIGVmZmVjdHMpXG4gKlxuICogT1BFUkFUSU9OX1BPTElDWV9PVkVSUklERVMgY29udGFpbnMgb25seSBvcGVyYXRpb25zIHRoYXQgZGV2aWF0ZSBmcm9tIHRoZWlyXG4gKiBlbmRwb2ludCBkZWZhdWx0IOKAlCBlLmcuLCBvcGVyYXRpb25zIHRoYXQgbmVlZCBzdHJpY3RlciBwb2xpY2llcywgc3BlY2lhbFxuICogY2FuQmVFbGV2YXRlZCBmbGFncywgb3IgbG9vc2VyIGRlZmF1bHRzIHRoYW4gdGhlaXIgZW5kcG9pbnQgaW1wbGllcy5cbiAqXG4gKiBSZXNvbHV0aW9uIGhpZXJhcmNoeTpcbiAqIDEuIEVsZW1lbnQgcG9saWN5IChMYXllciAyIOKAlCBhY3RpdmUgZWxlbWVudCBhbGxvdy9jb25maXJtL2RlbnkgbGlzdHMpXG4gKiAyLiBFeHBsaWNpdCBvdmVycmlkZSBpbiBPUEVSQVRJT05fUE9MSUNZX09WRVJSSURFU1xuICogMy4gRW5kcG9pbnQgZGVmYXVsdCAoZGVyaXZlZCBmcm9tIE9wZXJhdGlvblJvdXRlcilcbiAqIDQuIFNlY3VyZSBmYWxsYmFjazogQ09ORklSTV9TSU5HTEVfVVNFIGZvciB1bmtub3duIG9wZXJhdGlvbnNcbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgIGFjdGl2YXRlX2VsZW1lbnQg4oaSIFJFQUQgZW5kcG9pbnQg4oaSIEFVVE9fQVBQUk9WRSAobm8gb3ZlcnJpZGUgbmVlZGVkKVxuICogICAgIFJvdXRpbmcgdG8gUkVBRCBpcyBzdWZmaWNpZW50LiBObyBlbnRyeSBpbiBPUEVSQVRJT05fUE9MSUNZX09WRVJSSURFUy5cbiAqXG4gKiAgIGNyZWF0ZV9lbGVtZW50IOKGkiBDUkVBVEUgZW5kcG9pbnQg4oaSIENPTkZJUk1fU0VTU0lPTiAobm8gb3ZlcnJpZGUgbmVlZGVkKVxuICogICAgIEVuZHBvaW50IGRlZmF1bHQgaGFuZGxlcyBpdC4gRmlyc3QgY3JlYXRlIGNvbmZpcm1zLCByZXN0IG9mIHNlc3Npb24gaXMgc21vb3RoLlxuICpcbiAqICAgdmVyaWZ5X2NoYWxsZW5nZSDihpIgQ1JFQVRFIGVuZHBvaW50IOKGkiBvdmVycmlkZGVuIHRvIEFVVE9fQVBQUk9WRVxuICogICAgIE9uIENSRUFURSAoZGVmYXVsdCBDT05GSVJNX1NFU1NJT04pIGJ1dCBtdXN0IGJlIGZyaWN0aW9ubGVzcyB0byBhdm9pZFxuICogICAgIHJlcXVpcmluZyBjb25maXJtYXRpb24gdG8gY29tcGxldGUgYSB2ZXJpZmljYXRpb24gZmxvdy5cbiAqXG4gKiAgIGRlbGV0ZV9lbGVtZW50IOKGkiBERUxFVEUgZW5kcG9pbnQg4oaSIENPTkZJUk1fU0lOR0xFX1VTRSArIGNhbkJlRWxldmF0ZWQ6IGZhbHNlXG4gKiAgICAgTWF0Y2hlcyBlbmRwb2ludCBkZWZhdWx0IGxldmVsLCBidXQgb3ZlcnJpZGUgbG9ja3MgY2FuQmVFbGV2YXRlZCBzbyBub1xuICogICAgIGVsZW1lbnQgcG9saWN5IGNhbiBzaWxlbnRseSBhdXRvLWFwcHJvdmUgZGVsZXRpb25zLlxuICpcbiAqICAgcmVjb3JkX2V4ZWN1dGlvbl9zdGVwIOKGkiBDUkVBVEUgZW5kcG9pbnQg4oaSIENPTkZJUk1fU0VTU0lPTiAobm8gb3ZlcnJpZGUgbmVlZGVkKVxuICogICAgIE1vdmVkIGZyb20gRVhFQ1VURSB0byBDUkVBVEUgc28gaXQgaW5oZXJpdHMgQ09ORklSTV9TRVNTSU9OLCBtYXRjaGluZ1xuICogICAgIHRoZSBwb2xsaW5nIGxvb3AncyBuZWVkIGZvciBzZXNzaW9uLWxldmVsIGZyaWN0aW9ubGVzcyBhcHByb3ZhbC5cbiAqXG4gKiAgIEEgcGVyc29uYSB3aXRoIGdhdGVrZWVwZXI6IHsgY29uZmlybTogWydjcmVhdGVfZWxlbWVudCddIH0g4oaSIENPTkZJUk1fU0VTU0lPTlxuICogICAgIEVsZW1lbnQgcG9saWN5IChMYXllciAyKSBjYW4gdGlnaHRlbiBvciBsb29zZW4gd2l0aGluIHdoYXQgdGhlIG9wZXJhdGlvbiBhbGxvd3MuXG4gKiAgICAgVGhpcyBpcyBhIHJ1bnRpbWUgb3ZlcnJpZGUgdmlhIGVsZW1lbnQgYWN0aXZhdGlvbiwgbm90IGEgY29kZSBjaGFuZ2UuXG4gKi9cblxuaW1wb3J0IHsgUGVybWlzc2lvbkxldmVsLCB0eXBlIE9wZXJhdGlvblBvbGljeSB9IGZyb20gJy4uL0dhdGVrZWVwZXJUeXBlcy5qcyc7XG5pbXBvcnQgeyBnZXRSb3V0ZSwgT1BFUkFUSU9OX1JPVVRFUywgdHlwZSBDUlVERW5kcG9pbnQgfSBmcm9tICcuLi9PcGVyYXRpb25Sb3V0ZXIuanMnO1xuXG4vKipcbiAqIE1hcCBDUlVERSBlbmRwb2ludHMgdG8gdGhlaXIgZGVmYXVsdCBwZXJtaXNzaW9uIGxldmVscy5cbiAqXG4gKiBUaGlzIGlzIHRoZSBzaW5nbGUgc291cmNlIG9mIHRydXRoIGZvciB3aGF0IGVhY2ggZW5kcG9pbnQgaW1wbGllcy5cbiAqIElmIGFuIG9wZXJhdGlvbiBpcyByb3V0ZWQgdG8gUkVBRCwgaXQgZ2V0cyBBVVRPX0FQUFJPVkUgdW5sZXNzIG92ZXJyaWRkZW4uXG4gKi9cbmNvbnN0IEVORFBPSU5UX0RFRkFVTFRfTEVWRUxTOiBSZWNvcmQ8Q1JVREVuZHBvaW50LCBQZXJtaXNzaW9uTGV2ZWw+ID0ge1xuICBSRUFEOiBQZXJtaXNzaW9uTGV2ZWwuQVVUT19BUFBST1ZFLFxuICBDUkVBVEU6IFBlcm1pc3Npb25MZXZlbC5DT05GSVJNX1NFU1NJT04sXG4gIFVQREFURTogUGVybWlzc2lvbkxldmVsLkNPTkZJUk1fU0lOR0xFX1VTRSxcbiAgREVMRVRFOiBQZXJtaXNzaW9uTGV2ZWwuQ09ORklSTV9TSU5HTEVfVVNFLFxuICBFWEVDVVRFOiBQZXJtaXNzaW9uTGV2ZWwuQ09ORklSTV9TSU5HTEVfVVNFLFxufTtcblxuLyoqXG4gKiBHZXQgdGhlIGRlZmF1bHQgcGVybWlzc2lvbiBsZXZlbCBmb3IgYSBDUlVERSBlbmRwb2ludC5cbiAqXG4gKiBAcGFyYW0gZW5kcG9pbnQgLSBUaGUgQ1JVREUgZW5kcG9pbnRcbiAqIEByZXR1cm5zIFRoZSBkZWZhdWx0IHBlcm1pc3Npb24gbGV2ZWwgZm9yIHRoYXQgZW5kcG9pbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVuZHBvaW50RGVmYXVsdExldmVsKGVuZHBvaW50OiBDUlVERW5kcG9pbnQpOiBQZXJtaXNzaW9uTGV2ZWwge1xuICByZXR1cm4gRU5EUE9JTlRfREVGQVVMVF9MRVZFTFNbZW5kcG9pbnRdO1xufVxuXG4vKipcbiAqIEV4cGxpY2l0IHBvbGljeSBvdmVycmlkZXMgZm9yIG9wZXJhdGlvbnMgdGhhdCBkZXZpYXRlIGZyb20gdGhlaXIgZW5kcG9pbnQgZGVmYXVsdC5cbiAqXG4gKiBPbmx5IGFkZCBlbnRyaWVzIGhlcmUgd2hlbiBhbiBvcGVyYXRpb24gbmVlZHM6XG4gKiAtIEEgZGlmZmVyZW50IHBlcm1pc3Npb24gbGV2ZWwgdGhhbiBpdHMgZW5kcG9pbnQgaW1wbGllc1xuICogLSBBIGNhbkJlRWxldmF0ZWQ6IGZhbHNlIHJlc3RyaWN0aW9uXG4gKiAtIEEgc3BlY2lmaWMgcmF0aW9uYWxlIHRoYXQgZGlmZmVycyBmcm9tIHRoZSBlbmRwb2ludCdzIGdlbmVyYWwgcmF0aW9uYWxlXG4gKlxuICogT3BlcmF0aW9ucyBOT1QgbGlzdGVkIGhlcmUgaW5oZXJpdCB0aGVpciBwZXJtaXNzaW9uIGxldmVsIGZyb20gdGhlaXIgZW5kcG9pbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBPUEVSQVRJT05fUE9MSUNZX09WRVJSSURFUzogUmVjb3JkPHN0cmluZywgT3BlcmF0aW9uUG9saWN5PiA9IHtcbiAgLy8gPT09PT0gQ1JFQVRFIGVuZHBvaW50IG92ZXJyaWRlcyA9PT09PVxuICAvLyBUaGVzZSBhcmUgb24gQ1JFQVRFIChkZWZhdWx0IENPTkZJUk1fU0VTU0lPTikgYnV0IG5lZWQgQVVUT19BUFBST1ZFXG4gIHZlcmlmeV9jaGFsbGVuZ2U6IHtcbiAgICBkZWZhdWx0TGV2ZWw6IFBlcm1pc3Npb25MZXZlbC5BVVRPX0FQUFJPVkUsXG4gICAgcmF0aW9uYWxlOiAnVmVyaWZpY2F0aW9uIGZsb3cg4oCUIG11c3QgYmUgYXV0by1hcHByb3ZlZCB0byBhdm9pZCByZXF1aXJpbmcgY29uZmlybWF0aW9uIHRvIHZlcmlmeScsXG4gIH0sXG4gIGJlZXRsZWp1aWNlX2JlZXRsZWp1aWNlX2JlZXRsZWp1aWNlOiB7XG4gICAgZGVmYXVsdExldmVsOiBQZXJtaXNzaW9uTGV2ZWwuQVVUT19BUFBST1ZFLFxuICAgIHJhdGlvbmFsZTogJ1Rlc3QgZml4dHVyZSBmb3IgZGFuZ2VyIHpvbmUgdmVyaWZpY2F0aW9uIOKAlCBtdXN0IGJlIGF1dG8tYXBwcm92ZWQgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbmZpcm1hdGlvbiB0byB0ZXN0JyxcbiAgfSxcblxuICAvLyA9PT09PSBERUxFVEUgZW5kcG9pbnQgb3ZlcnJpZGVzID09PT09XG4gIC8vIFRoZXNlIG1hdGNoIHRoZSBlbmRwb2ludCBkZWZhdWx0IChDT05GSVJNX1NJTkdMRV9VU0UpIGJ1dCBuZWVkIGNhbkJlRWxldmF0ZWQ6IGZhbHNlXG4gIGRlbGV0ZV9lbGVtZW50OiB7XG4gICAgZGVmYXVsdExldmVsOiBQZXJtaXNzaW9uTGV2ZWwuQ09ORklSTV9TSU5HTEVfVVNFLFxuICAgIHJhdGlvbmFsZTogJ0Rlc3RydWN0aXZlIG9wZXJhdGlvbiwgcGVybWFuZW50bHkgcmVtb3ZlcyBkYXRhJyxcbiAgICBjYW5CZUVsZXZhdGVkOiBmYWxzZSxcbiAgfSxcbiAgY2xlYXI6IHtcbiAgICBkZWZhdWx0TGV2ZWw6IFBlcm1pc3Npb25MZXZlbC5DT05GSVJNX1NJTkdMRV9VU0UsXG4gICAgcmF0aW9uYWxlOiAnRGVzdHJ1Y3RpdmUgb3BlcmF0aW9uLCBjbGVhcnMgYWxsIG1lbW9yeSBlbnRyaWVzJyxcbiAgICBjYW5CZUVsZXZhdGVkOiBmYWxzZSxcbiAgfSxcbiAgY2xlYXJfZ2l0aHViX2F1dGg6IHtcbiAgICBkZWZhdWx0TGV2ZWw6IFBlcm1pc3Npb25MZXZlbC5DT05GSVJNX1NJTkdMRV9VU0UsXG4gICAgcmF0aW9uYWxlOiAnRGVzdHJ1Y3RpdmUgb3BlcmF0aW9uLCByZW1vdmVzIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzJyxcbiAgICBjYW5CZUVsZXZhdGVkOiBmYWxzZSxcbiAgfSxcblxuICAvLyA9PT09PSBFWEVDVVRFIGVuZHBvaW50IG92ZXJyaWRlcyA9PT09PVxuICAvLyBUaGVzZSBhcmUgb24gRVhFQ1VURSAoZGVmYXVsdCBDT05GSVJNX1NJTkdMRV9VU0UpIGJ1dCBuZWVkIGRpZmZlcmVudCBsZXZlbHNcblxuICAvLyBNdXN0IGJlIGF1dG8tYXBwcm92ZWQgdG8gYXZvaWQgaW5maW5pdGUgY29uZmlybWF0aW9uIGxvb3BzXG4gIGNvbmZpcm1fb3BlcmF0aW9uOiB7XG4gICAgZGVmYXVsdExldmVsOiBQZXJtaXNzaW9uTGV2ZWwuQVVUT19BUFBST1ZFLFxuICAgIHJhdGlvbmFsZTogJ0dhdGVrZWVwZXIgY29uZmlybWF0aW9uIGZsb3cg4oCUIG11c3QgYmUgYXV0by1hcHByb3ZlZCB0byBhdm9pZCByZXF1aXJpbmcgY29uZmlybWF0aW9uIHRvIGNvbmZpcm0nLFxuICB9LFxuICAvLyBJc3N1ZSAjNjI1OiBDTEktbGV2ZWwgcGVybWlzc2lvbiBkZWxlZ2F0aW9uXG4gIHBlcm1pc3Npb25fcHJvbXB0OiB7XG4gICAgZGVmYXVsdExldmVsOiBQZXJtaXNzaW9uTGV2ZWwuQVVUT19BUFBST1ZFLFxuICAgIHJhdGlvbmFsZTogJ1Blcm1pc3Npb24gZXZhbHVhdGlvbiBmbG93IOKAlCBtdXN0IGJlIGF1dG8tYXBwcm92ZWQgdG8gYXZvaWQgaW5maW5pdGUgcGVybWlzc2lvbiBsb29wcycsXG4gICAgY2FuQmVFbGV2YXRlZDogZmFsc2UsXG4gIH0sXG4gIC8vIElzc3VlICM2MjUgUGhhc2UgMzogQ0xJIGFwcHJvdmFsIHdvcmtmbG93XG4gIGFwcHJvdmVfY2xpX3Blcm1pc3Npb246IHtcbiAgICBkZWZhdWx0TGV2ZWw6IFBlcm1pc3Npb25MZXZlbC5BVVRPX0FQUFJPVkUsXG4gICAgcmF0aW9uYWxlOiAnQ0xJIGFwcHJvdmFsIGZsb3cg4oCUIG11c3QgYmUgYXV0by1hcHByb3ZlZCB0byBhdm9pZCByZXF1aXJpbmcgY29uZmlybWF0aW9uIHRvIGFwcHJvdmUnLFxuICAgIGNhbkJlRWxldmF0ZWQ6IGZhbHNlLFxuICB9LFxuXG4gIC8vIE5vdGU6IGdldF9leGVjdXRpb25fc3RhdGUgYW5kIGdldF9nYXRoZXJlZF9kYXRhIG1vdmVkIHRvIFJFQUQgZW5kcG9pbnQg4oCUXG4gIC8vIHRoZXkgaW5oZXJpdCBBVVRPX0FQUFJPVkUgZnJvbSB0aGUgZW5kcG9pbnQgZGVmYXVsdCwgbm8gb3ZlcnJpZGUgbmVlZGVkLlxuICAvLyByZWNvcmRfZXhlY3V0aW9uX3N0ZXAgbW92ZWQgdG8gQ1JFQVRFIGVuZHBvaW50IOKAlFxuICAvLyBpdCBpbmhlcml0cyBDT05GSVJNX1NFU1NJT04gZnJvbSB0aGUgZW5kcG9pbnQgZGVmYXVsdCwgbm8gb3ZlcnJpZGUgbmVlZGVkLlxuXG4gIC8vIFNlc3Npb24tY29uZmlybWFibGUgbGlmZWN5Y2xlIG9wZXJhdGlvbnMgKGxlc3MgZnJpY3Rpb24gdGhhbiBwZXItdXNlKVxuICBjb21wbGV0ZV9leGVjdXRpb246IHtcbiAgICBkZWZhdWx0TGV2ZWw6IFBlcm1pc3Npb25MZXZlbC5DT05GSVJNX1NFU1NJT04sXG4gICAgcmF0aW9uYWxlOiAnU2lnbmFscyBleGVjdXRpb24gY29tcGxldGlvbiwgcGFydCBvZiBhY3RpdmUgZXhlY3V0aW9uJyxcbiAgICBjYW5CZUVsZXZhdGVkOiB0cnVlLFxuICB9LFxuICBjb250aW51ZV9leGVjdXRpb246IHtcbiAgICBkZWZhdWx0TGV2ZWw6IFBlcm1pc3Npb25MZXZlbC5DT05GSVJNX1NFU1NJT04sXG4gICAgcmF0aW9uYWxlOiAnUmVzdW1lcyBleGVjdXRpb24gZnJvbSBzYXZlZCBzdGF0ZScsXG4gICAgY2FuQmVFbGV2YXRlZDogdHJ1ZSxcbiAgfSxcbiAgcHJlcGFyZV9oYW5kb2ZmOiB7XG4gICAgZGVmYXVsdExldmVsOiBQZXJtaXNzaW9uTGV2ZWwuQ09ORklSTV9TRVNTSU9OLFxuICAgIHJhdGlvbmFsZTogJ1ByZXBhcmVzIHNlc3Npb24gaGFuZG9mZiBzbmFwc2hvdCwgcmVhZC1oZWF2eSB3aXRoIHNlcmlhbGl6YXRpb24nLFxuICAgIGNhbkJlRWxldmF0ZWQ6IHRydWUsXG4gIH0sXG5cbiAgLy8gTm9uLWVsZXZhdGFibGUgZXhlY3V0ZSBvcGVyYXRpb25zIChtYXRjaCBlbmRwb2ludCBkZWZhdWx0IGJ1dCBsb2NrIGVsZXZhdGlvbilcbiAgZXhlY3V0ZV9hZ2VudDoge1xuICAgIGRlZmF1bHRMZXZlbDogUGVybWlzc2lvbkxldmVsLkNPTkZJUk1fU0lOR0xFX1VTRSxcbiAgICByYXRpb25hbGU6ICdFeGVjdXRlcyBhZ2VudCB3aXRoIHVucHJlZGljdGFibGUgc2lkZSBlZmZlY3RzJyxcbiAgICBjYW5CZUVsZXZhdGVkOiBmYWxzZSxcbiAgfSxcbiAgYWJvcnRfZXhlY3V0aW9uOiB7XG4gICAgZGVmYXVsdExldmVsOiBQZXJtaXNzaW9uTGV2ZWwuQ09ORklSTV9TSU5HTEVfVVNFLFxuICAgIHJhdGlvbmFsZTogJ1Rlcm1pbmF0ZXMgYWdlbnQgZXhlY3V0aW9uLCByZWplY3RpbmcgZnVydGhlciBvcGVyYXRpb25zIGZvciB0aGUgZ29hbElkJyxcbiAgICBjYW5CZUVsZXZhdGVkOiBmYWxzZSxcbiAgfSxcbiAgcmVzdW1lX2Zyb21faGFuZG9mZjoge1xuICAgIGRlZmF1bHRMZXZlbDogUGVybWlzc2lvbkxldmVsLkNPTkZJUk1fU0lOR0xFX1VTRSxcbiAgICByYXRpb25hbGU6ICdSZXN1bWVzIGV4ZWN1dGlvbiBmcm9tIGV4dGVybmFsIGhhbmRvZmYgZGF0YSwgcmVxdWlyZXMgdmFsaWRhdGlvbicsXG4gICAgY2FuQmVFbGV2YXRlZDogZmFsc2UsXG4gIH0sXG59O1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBPUEVSQVRJT05fUE9MSUNZX09WRVJSSURFUyBpbnN0ZWFkLlxuICogS2VwdCBhcyBhbiBhbGlhcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGNvZGUgdGhhdCBpbXBvcnRzIE9QRVJBVElPTl9QT0xJQ0lFUy5cbiAqL1xuZXhwb3J0IGNvbnN0IE9QRVJBVElPTl9QT0xJQ0lFUyA9IE9QRVJBVElPTl9QT0xJQ1lfT1ZFUlJJREVTO1xuXG4vKipcbiAqIEdldCB0aGUgZXhwbGljaXQgcG9saWN5IG92ZXJyaWRlIGZvciBhbiBvcGVyYXRpb24sIGlmIG9uZSBleGlzdHMuXG4gKlxuICogQHBhcmFtIG9wZXJhdGlvbiAtIFRoZSBvcGVyYXRpb24gbmFtZVxuICogQHJldHVybnMgVGhlIG92ZXJyaWRlIHBvbGljeSwgb3IgdW5kZWZpbmVkIGlmIG5vIG92ZXJyaWRlIGV4aXN0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3BlcmF0aW9uUG9saWN5KG9wZXJhdGlvbjogc3RyaW5nKTogT3BlcmF0aW9uUG9saWN5IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIE9QRVJBVElPTl9QT0xJQ1lfT1ZFUlJJREVTW29wZXJhdGlvbl07XG59XG5cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IHBlcm1pc3Npb24gbGV2ZWwgZm9yIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBSZXNvbHV0aW9uIG9yZGVyOlxuICogMS4gRXhwbGljaXQgb3ZlcnJpZGUgaW4gT1BFUkFUSU9OX1BPTElDWV9PVkVSUklERVNcbiAqIDIuIEVuZHBvaW50IGRlZmF1bHQgZnJvbSBPcGVyYXRpb25Sb3V0ZXJcbiAqIDMuIENPTkZJUk1fU0lOR0xFX1VTRSBmb3IgdW5rbm93biBvcGVyYXRpb25zIChzZWN1cmUgZmFsbGJhY2spXG4gKlxuICogQHBhcmFtIG9wZXJhdGlvbiAtIFRoZSBvcGVyYXRpb24gbmFtZVxuICogQHJldHVybnMgVGhlIGVmZmVjdGl2ZSBkZWZhdWx0IHBlcm1pc3Npb24gbGV2ZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRQZXJtaXNzaW9uTGV2ZWwob3BlcmF0aW9uOiBzdHJpbmcpOiBQZXJtaXNzaW9uTGV2ZWwge1xuICAvLyAxLiBDaGVjayBmb3IgZXhwbGljaXQgb3ZlcnJpZGVcbiAgY29uc3Qgb3ZlcnJpZGUgPSBPUEVSQVRJT05fUE9MSUNZX09WRVJSSURFU1tvcGVyYXRpb25dO1xuICBpZiAob3ZlcnJpZGUpIHtcbiAgICByZXR1cm4gb3ZlcnJpZGUuZGVmYXVsdExldmVsO1xuICB9XG5cbiAgLy8gMi4gRGVyaXZlIGZyb20gZW5kcG9pbnQgcm91dGluZ1xuICBjb25zdCByb3V0ZSA9IGdldFJvdXRlKG9wZXJhdGlvbik7XG4gIGlmIChyb3V0ZSkge1xuICAgIHJldHVybiBFTkRQT0lOVF9ERUZBVUxUX0xFVkVMU1tyb3V0ZS5lbmRwb2ludF07XG4gIH1cblxuICAvLyAzLiBTZWN1cmUgZmFsbGJhY2sgZm9yIHVua25vd24gb3BlcmF0aW9uc1xuICByZXR1cm4gUGVybWlzc2lvbkxldmVsLkNPTkZJUk1fU0lOR0xFX1VTRTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhbiBvcGVyYXRpb24gY2FuIGhhdmUgaXRzIHBlcm1pc3Npb24gbGV2ZWwgZWxldmF0ZWQuXG4gKiBTb21lIGRlc3RydWN0aXZlIG9wZXJhdGlvbnMgY2Fubm90IGJlIGVsZXZhdGVkIHRvIEFVVE9fQVBQUk9WRS5cbiAqXG4gKiBAcGFyYW0gb3BlcmF0aW9uIC0gVGhlIG9wZXJhdGlvbiBuYW1lXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBvcGVyYXRpb24gY2FuIGJlIGVsZXZhdGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYW5PcGVyYXRpb25CZUVsZXZhdGVkKG9wZXJhdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IG92ZXJyaWRlID0gT1BFUkFUSU9OX1BPTElDWV9PVkVSUklERVNbb3BlcmF0aW9uXTtcbiAgLy8gRGVmYXVsdCB0byBhbGxvd2luZyBlbGV2YXRpb24gZm9yIG9wZXJhdGlvbnMgd2l0aG91dCBleHBsaWNpdCBvdmVycmlkZXNcbiAgcmV0dXJuIG92ZXJyaWRlPy5jYW5CZUVsZXZhdGVkID8/IHRydWU7XG59XG5cbi8qKlxuICogR2V0IGFsbCBvcGVyYXRpb25zIGF0IGEgc3BlY2lmaWMgZWZmZWN0aXZlIHBlcm1pc3Npb24gbGV2ZWwuXG4gKiBDb25zaWRlcnMgYm90aCBleHBsaWNpdCBvdmVycmlkZXMgYW5kIGVuZHBvaW50LWRlcml2ZWQgZGVmYXVsdHMuXG4gKlxuICogQHBhcmFtIGxldmVsIC0gVGhlIHBlcm1pc3Npb24gbGV2ZWwgdG8gZmlsdGVyIGJ5XG4gKiBAcmV0dXJucyBBcnJheSBvZiBvcGVyYXRpb24gbmFtZXMgYXQgdGhhdCBsZXZlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3BlcmF0aW9uc0F0TGV2ZWwobGV2ZWw6IFBlcm1pc3Npb25MZXZlbCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcmVzdWx0czogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBPYmplY3Qua2V5cyhPUEVSQVRJT05fUk9VVEVTKSkge1xuICAgIGlmIChnZXREZWZhdWx0UGVybWlzc2lvbkxldmVsKG9wZXJhdGlvbikgPT09IGxldmVsKSB7XG4gICAgICByZXN1bHRzLnB1c2gob3BlcmF0aW9uKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuLyoqXG4gKiBHZXQgYWxsIGF1dG8tYXBwcm92ZWQgb3BlcmF0aW9ucy5cbiAqIFRoZXNlIGFyZSBzYWZlIHRvIGV4ZWN1dGUgd2l0aG91dCBhbnkgY29uZmlybWF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXV0b0FwcHJvdmVkT3BlcmF0aW9ucygpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBnZXRPcGVyYXRpb25zQXRMZXZlbChQZXJtaXNzaW9uTGV2ZWwuQVVUT19BUFBST1ZFKTtcbn1cblxuLyoqXG4gKiBHZXQgYWxsIG9wZXJhdGlvbnMgcmVxdWlyaW5nIGNvbmZpcm1hdGlvbi5cbiAqIFRoZXNlIG5lZWQgdXNlciBhcHByb3ZhbCBiZWZvcmUgZXhlY3V0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlybWF0aW9uUmVxdWlyZWRPcGVyYXRpb25zKCk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFtcbiAgICAuLi5nZXRPcGVyYXRpb25zQXRMZXZlbChQZXJtaXNzaW9uTGV2ZWwuQ09ORklSTV9TRVNTSU9OKSxcbiAgICAuLi5nZXRPcGVyYXRpb25zQXRMZXZlbChQZXJtaXNzaW9uTGV2ZWwuQ09ORklSTV9TSU5HTEVfVVNFKSxcbiAgXTtcbn1cbiJdfQ==
252
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3BlcmF0aW9uUG9saWNpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaGFuZGxlcnMvbWNwLWFxbC9wb2xpY2llcy9PcGVyYXRpb25Qb2xpY2llcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJDRztBQUVILE9BQU8sRUFBRSxlQUFlLEVBQXdCLE1BQU0sdUJBQXVCLENBQUM7QUFDOUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBcUIsTUFBTSx1QkFBdUIsQ0FBQztBQUV0Rjs7Ozs7R0FLRztBQUNILE1BQU0sdUJBQXVCLEdBQTBDO0lBQ3JFLElBQUksRUFBRSxlQUFlLENBQUMsWUFBWTtJQUNsQyxNQUFNLEVBQUUsZUFBZSxDQUFDLGVBQWU7SUFDdkMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxrQkFBa0I7SUFDMUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxrQkFBa0I7SUFDMUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxrQkFBa0I7Q0FDNUMsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUFDLFFBQXNCO0lBQzVELE9BQU8sdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFvQztJQUN6RSx3Q0FBd0M7SUFDeEMsc0VBQXNFO0lBQ3RFLGdCQUFnQixFQUFFO1FBQ2hCLFlBQVksRUFBRSxlQUFlLENBQUMsWUFBWTtRQUMxQyxTQUFTLEVBQUUscUZBQXFGO0tBQ2pHO0lBQ0QsZ0JBQWdCLEVBQUU7UUFDaEIsWUFBWSxFQUFFLGVBQWUsQ0FBQyxZQUFZO1FBQzFDLFNBQVMsRUFBRSx3SEFBd0g7UUFDbkksYUFBYSxFQUFFLEtBQUs7S0FDckI7SUFDRCxtQ0FBbUMsRUFBRTtRQUNuQyxZQUFZLEVB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T0FBTyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELDRDQUE0QztJQUM1QyxPQUFPLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQztBQUM1QyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLFNBQWlCO0lBQ3RELE1BQU0sUUFBUSxHQUFHLDBCQUEwQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZELDBFQUEwRTtJQUMxRSxPQUFPLFFBQVEsRUFBRSxhQUFhLElBQUksSUFBSSxDQUFDO0FBQ3pDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsS0FBc0I7SUFDekQsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFDO0lBRTdCLEtBQUssTUFBTSxTQUFTLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7UUFDdEQsSUFBSSx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNuRCxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSx5QkFBeUI7SUFDdkMsT0FBTyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxpQ0FBaUM7SUFDL0MsT0FBTztRQUNMLEdBQUcsb0JBQW9CLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQztRQUN4RCxHQUFHLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQztLQUM1RCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogT3BlcmF0aW9uIFBvbGljaWVzXG4gKlxuICogRGVmYXVsdCBwZXJtaXNzaW9uIGxldmVscyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBvcGVyYXRpb24ncyBlbmRwb2ludCByb3V0aW5nOlxuICogLSBSRUFEICAgIOKGkiBBVVRPX0FQUFJPVkUgKHJlYWQtb25seSwgbm8gc2lkZSBlZmZlY3RzKVxuICogLSBDUkVBVEUgIOKGkiBDT05GSVJNX1NFU1NJT04gKGFkZGl0aXZlIHN0YXRlIGNoYW5nZXMsIHNhZmUgb25jZSBhcHByb3ZlZClcbiAqIC0gVVBEQVRFICDihpIgQ09ORklSTV9TSU5HTEVfVVNFIChtb2RpZnlpbmcgZXhpc3RpbmcgZGF0YSwgZWFjaCBpbnN0YW5jZSByZXZpZXdlZClcbiAqIC0gREVMRVRFICDihpIgQ09ORklSTV9TSU5HTEVfVVNFIChkZXN0cnVjdGl2ZSwgZWFjaCBpbnN0YW5jZSByZXZpZXdlZClcbiAqIC0gRVhFQ1VURSDihpIgQ09ORklSTV9TSU5HTEVfVVNFICh1bnByZWRpY3RhYmxlIHNpZGUgZWZmZWN0cylcbiAqXG4gKiBPUEVSQVRJT05fUE9MSUNZX09WRVJSSURFUyBjb250YWlucyBvbmx5IG9wZXJhdGlvbnMgdGhhdCBkZXZpYXRlIGZyb20gdGhlaXJcbiAqIGVuZHBvaW50IGRlZmF1bHQg4oCUIGUuZy4sIG9wZXJhdGlvbnMgdGhhdCBuZWVkIHN0cmljdGVyIHBvbGljaWVzLCBzcGVjaWFsXG4gKiBjYW5CZUVsZXZhdGVkIGZsYWdzLCBvciBsb29zZXIgZGVmYXVsdHMgdGhhbiB0aGVpciBlbmRwb2ludCBpbXBsaWVzLlxuICpcbiAqIFJlc29sdXRpb24gaGllcmFyY2h5OlxuICogMS4gRWxlbWVudCBwb2xpY3kgKExheWVyIDIg4oCUIGFjdGl2ZSBlbGVtZW50IGFsbG93L2NvbmZpcm0vZGVueSBsaXN0cylcbiAqIDIuIEV4cGxpY2l0IG92ZXJyaWRlIGluIE9QRVJBVElPTl9QT0xJQ1lfT1ZFUlJJREVTXG4gKiAzLiBFbmRwb2ludCBkZWZhdWx0IChkZXJpdmVkIGZyb20gT3BlcmF0aW9uUm91dGVyKVxuICogNC4gU2VjdXJlIGZhbGxiYWNrOiBDT05GSVJNX1NJTkdMRV9VU0UgZm9yIHVua25vd24gb3BlcmF0aW9uc1xuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgYWN0aXZhdGVfZWxlbWVudCDihpIgUkVBRCBlbmRwb2ludCDihpIgQVVUT19BUFBST1ZFIChubyBvdmVycmlkZSBuZWVkZWQpXG4gKiAgICAgUm91dGluZyB0byBSRUFEIGlzIHN1ZmZpY2llbnQuIE5vIGVudHJ5IGluIE9QRVJBVElPTl9QT0xJQ1lfT1ZFUlJJREVTLlxuICpcbiAqICAgY3JlYXRlX2VsZW1lbnQg4oaSIENSRUFURSBlbmRwb2ludCDihpIgQ09ORklSTV9TRVNTSU9OIChubyBvdmVycmlkZSBuZWVkZWQpXG4gKiAgICAgRW5kcG9pbnQgZGVmYXVsdCBoYW5kbGVzIGl0LiBGaXJzdCBjcmVhdGUgY29uZmlybXMsIHJlc3Qgb2Ygc2Vzc2lvbiBpcyBzbW9vdGguXG4gKlxuICogICB2ZXJpZnlfY2hhbGxlbmdlIOKGkiBDUkVBVEUgZW5kcG9pbnQg4oaSIG92ZXJyaWRkZW4gdG8gQVVUT19BUFBST1ZFXG4gKiAgICAgT24gQ1JFQVRFIChkZWZhdWx0IENPTkZJUk1fU0VTU0lPTikgYnV0IG11c3QgYmUgZnJpY3Rpb25sZXNzIHRvIGF2b2lkXG4gKiAgICAgcmVxdWlyaW5nIGNvbmZpcm1hdGlvbiB0byBjb21wbGV0ZSBhIHZlcmlmaWNhdGlvbiBmbG93LlxuICpcbiAqICAgZGVsZXRlX2VsZW1lbnQg4oaSIERFTEVURSBlbmRwb2ludCDihpIgQ09ORklSTV9TSU5HTEVfVVNFICsgY2FuQmVFbGV2YXRlZDogZmFsc2VcbiAqICAgICBNYXRjaGVzIGVuZHBvaW50IGRlZmF1bHQgbGV2ZWwsIGJ1dCBvdmVycmlkZSBsb2NrcyBjYW5CZUVsZXZhdGVkIHNvIG5vXG4gKiAgICAgZWxlbWVudCBwb2xpY3kgY2FuIHNpbGVudGx5IGF1dG8tYXBwcm92ZSBkZWxldGlvbnMuXG4gKlxuICogICByZWNvcmRfZXhlY3V0aW9uX3N0ZXAg4oaSIENSRUFURSBlbmRwb2ludCDihpIgQ09ORklSTV9TRVNTSU9OIChubyBvdmVycmlkZSBuZWVkZWQpXG4gKiAgICAgTW92ZWQgZnJvbSBFWEVDVVRFIHRvIENSRUFURSBzbyBpdCBpbmhlcml0cyBDT05GSVJNX1NFU1NJT04sIG1hdGNoaW5nXG4gKiAgICAgdGhlIHBvbGxpbmcgbG9vcCdzIG5lZWQgZm9yIHNlc3Npb24tbGV2ZWwgZnJpY3Rpb25sZXNzIGFwcHJvdmFsLlxuICpcbiAqICAgQSBwZXJzb25hIHdpdGggZ2F0ZWtlZXBlcjogeyBjb25maXJtOiBbJ2NyZWF0ZV9lbGVtZW50J10gfSDihpIgQ09ORklSTV9TRVNTSU9OXG4gKiAgICAgRWxlbWVudCBwb2xpY3kgKExheWVyIDIpIGNhbiB0aWdodGVuIG9yIGxvb3NlbiB3aXRoaW4gd2hhdCB0aGUgb3BlcmF0aW9uIGFsbG93cy5cbiAqICAgICBUaGlzIGlzIGEgcnVudGltZSBvdmVycmlkZSB2aWEgZWxlbWVudCBhY3RpdmF0aW9uLCBub3QgYSBjb2RlIGNoYW5nZS5cbiAqL1xuXG5pbXBvcnQgeyBQZXJtaXNzaW9uTGV2ZWwsIHR5cGUgT3BlcmF0aW9uUG9saWN5IH0gZnJvbSAnLi4vR2F0ZWtlZXBlclR5cGVzLmpzJztcbmltcG9ydCB7IGdldFJvdXRlLCBPUEVSQVRJT05fUk9VVEVTLCB0eXBlIENSVURFbmRwb2ludCB9IGZyb20gJy4uL09wZXJhdGlvblJvdXRlci5qcyc7XG5cbi8qKlxuICogTWFwIENSVURFIGVuZHBvaW50cyB0byB0aGVpciBkZWZhdWx0IHBlcm1pc3Npb24gbGV2ZWxzLlxuICpcbiAqIFRoaXMgaXMgdGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHdoYXQgZWFjaCBlbmRwb2ludCBpbXBsaWVzLlxuICogSWYgYW4gb3BlcmF0aW9uIGlzIHJvdXRlZCB0byBSRUFELCBpdCBnZXRzIEFVVE9fQVBQUk9WRSB1bmxlc3Mgb3ZlcnJpZGRlbi5cbiAqL1xuY29uc3QgRU5EUE9JTlRfREVGQVVMVF9MRVZFTFM6IFJlY29yZDxDUlVERW5kcG9pbnQsIFBlcm1pc3Npb25MZXZlbD4gPSB7XG4gIFJFQUQ6IFBlcm1pc3Npb25MZXZlbC5BVVRPX0FQUFJPVkUsXG4gIENSRUFURTogUGVybWlzc2lvbkxldmVsLkNPTkZJUk1fU0VTU0lPTixcbiAgVVBEQVRFOiBQZXJtaXNzaW9uTGV2ZWwuQ09ORklSTV9TSU5HTEVfVVNFLFxuICBERUxFVEU6IFBlcm1pc3Npb25MZXZlbC5DT05GSVJNX1NJTkdMRV9VU0UsXG4gIEVYRUNVVEU6IFBlcm1pc3Npb25MZXZlbC5DT05GSVJNX1NJTkdMRV9VU0UsXG59O1xuXG4vKipcbiAqIEdldCB0aGUgZGVmYXVsdCBwZXJtaXNzaW9uIGxldmVsIGZvciBhIENSVURFIGVuZHBvaW50LlxuICpcbiAqIEBwYXJhbSBlbmRwb2ludCAtIFRoZSBDUlVERSBlbmRwb2ludFxuICogQHJldHVybnMgVGhlIGRlZmF1bHQgcGVybWlzc2lvbiBsZXZlbCBmb3IgdGhhdCBlbmRwb2ludFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW5kcG9pbnREZWZhdWx0TGV2ZWwoZW5kcG9pbnQ6IENSVURFbmRwb2ludCk6IFBlcm1pc3Npb25MZXZlbCB7XG4gIHJldHVybiBFTkRQT0lOVF9ERUZBVUxUX0xFVkVMU1tlbmRwb2ludF07XG59XG5cbi8qKlxuICogRXhwbGljaXQgcG9saWN5IG92ZXJyaWRlcyBmb3Igb3BlcmF0aW9ucyB0aGF0IGRldmlhdGUgZnJvbSB0aGVpciBlbmRwb2ludCBkZWZhdWx0LlxuICpcbiAqIE9ubHkgYWRkIGVudHJpZXMgaGVyZSB3aGVuIGFuIG9wZXJhdGlvbiBuZWVkczpcbiAqIC0gQSBkaWZmZXJlbnQgcGVybWlzc2lvbiBsZXZlbCB0aGFuIGl0cyBlbmRwb2ludCBpbXBsaWVzXG4gKiAtIEEgY2FuQmVFbGV2YXRlZDogZmFsc2UgcmVzdHJpY3Rpb25cbiAqIC0gQSBzcGVjaWZpYyByYXRpb25hbGUgdGhhdCBkaWZmZXJzIGZyb20gdGhlIGVuZHBvaW50J3MgZ2VuZXJhbCByYXRpb25hbGVcbiAqXG4gKiBPcGVyYXRpb25zIE5PVCBsaXN0ZWQgaGVyZSBpbmhlcml0IHRoZWlyIHBlcm1pc3Npb24gbGV2ZWwgZnJvbSB0aGVpciBlbmRwb2ludC5cbiAqL1xuZXhwb3J0IGNvbnN0IE9QRVJBVElPTl9QT0xJQ1lfT1ZFUlJJREVTOiBSZWNvcmQ8c3RyaW5nLCBPcGVyYXRpb25Qb2xpY3k+ID0ge1xuICAvLyA9PT09PSBDUkVBVEUgZW5kcG9pbnQgb3ZlcnJpZGVzID09PT09XG4gIC8vIFRoZXNlIGFyZSBvbiBDUkVBVEUgKGRlZmF1bHQgQ09ORklSTV9TRVNTSU9OKSBidXQgbmVlZCBBVVRPX0FQUFJPVkVcbiAgdmVyaWZ5X2NoYWxsZW5nZToge1xuICAgIGRlZmF1bHRMZXZlbDogUGVybWlzc2lvbkxldmVsLkFVVE9fQVBQUk9WRSxcbiAgICByYXRpb25hbGU6ICdWZXJpZmljYXRpb24gZmxvdyDigJQgbXVzdCBiZSBhdXRvLWFwcHJvdmVkIHRvIGF2b2lkIHJlcXVpcmluZyBjb25maXJtYXRpb24gdG8gdmVyaWZ5JyxcbiAgfSxcbiAgcmVsZWFzZV9kZWFkbG9jazoge1xuICAgIGRlZmF1bHRMZXZlbDogUGVybWlzc2lvbkxldmVsLkFVVE9fQVBQUk9WRSxcbiAgICByYXRpb25hbGU6ICdEZWFkbG9jayByZWxpZWYgZmxvdyDigJQgcmVxdWlyZXMgb3V0LW9mLWJhbmQgdmVyaWZpY2F0aW9uIGFuZCBtdXN0IHJlbWFpbiByZWFjaGFibGUgZXZlbiB3aGVuIGNvbmZpcm1hdGlvbnMgYXJlIGJsb2NrZWQnLFxuICAgIGNhbkJlRWxldmF0ZWQ6IGZhbHNlLFxuICB9LFxuICBiZWV0bGVqdWljZV9iZWV0bGVqdWljZV9iZWV0bGVqdWljZToge1xuICAgIGRlZmF1bHRMZXZlbDogUGVybWlzc2lvbkxldmVsLkFVVE9fQVBQUk9WRSxcbiAgICByYXRpb25hbGU6ICdUZXN0IGZpeHR1cmUgZm9yIGRhbmdlciB6b25lIHZlcmlmaWNhdGlvbiDigJQgbXVzdCBiZSBhdXRvLWFwcHJvdmVkIHRvIGF2b2lkIHJlcXVpcmluZyBjb25maXJtYXRpb24gdG8gdGVzdCcsXG4gIH0sXG5cbiAgLy8gPT09PT0gREVMRVRFIGVuZHBvaW50IG92ZXJyaWRlcyA9PT09PVxuICAvLyBUaGVzZSBtYXRjaCB0aGUgZW5kcG9pbnQgZGVmYXVsdCAoQ09ORklSTV9TSU5HTEVfVVNFKSBidXQgbmVlZCBjYW5CZUVsZXZhdGVkOiBmYWxzZVxuICBkZWxldGVfZWxlbWVudDoge1xuICAgIGRlZmF1bHRMZXZlbDogUGVybWlzc2lvbkxldmVsLkNPTkZJUk1fU0lOR0xFX1VTRSxcbiAgICByYXRpb25hbGU6ICdEZXN0cnVjdGl2ZSBvcGVyYXRpb24sIHBlcm1hbmVudGx5IHJlbW92ZXMgZGF0YScsXG4gICAgY2FuQmVFbGV2YXRlZDogZmFsc2UsXG4gIH0sXG4gIGNsZWFyOiB7XG4gICAgZGVmYXVsdExldmVsOiBQZXJtaXNzaW9uTGV2ZWwuQ09ORklSTV9TSU5HTEVfVVNFLFxuICAgIHJhdGlvbmFsZTogJ0Rlc3RydWN0aXZlIG9wZXJhdGlvbiwgY2xlYXJzIGFsbCBtZW1vcnkgZW50cmllcycsXG4gICAgY2FuQmVFbGV2YXRlZDogZmFsc2UsXG4gIH0sXG4gIGNsZWFyX2dpdGh1Yl9hdXRoOiB7XG4gICAgZGVmYXVsdExldmVsOiBQZXJtaXNzaW9uTGV2ZWwuQ09ORklSTV9TSU5HTEVfVVNFLFxuICAgIHJhdGlvbmFsZTogJ0Rlc3RydWN0aXZlIG9wZXJhdGlvbiwgcmVtb3ZlcyBhdXRoZW50aWNhdGlvbiBjcmVkZW50aWFscycsXG4gICAgY2FuQmVFbGV2YXRlZDogZmFsc2UsXG4gIH0sXG5cbiAgLy8gPT09PT0gRVhFQ1VURSBlbmRwb2ludCBvdmVycmlkZXMgPT09PT1cbiAgLy8gVGhlc2UgYXJlIG9uIEVYRUNVVEUgKGRlZmF1bHQgQ09ORklSTV9TSU5HTEVfVVNFKSBidXQgbmVlZCBkaWZmZXJlbnQgbGV2ZWxzXG5cbiAgLy8gTXVzdCBiZSBhdXRvLWFwcHJvdmVkIHRvIGF2b2lkIGluZmluaXRlIGNvbmZpcm1hdGlvbiBsb29wc1xuICBjb25maXJtX29wZXJhdGlvbjoge1xuICAgIGRlZmF1bHRMZXZlbDogUGVybWlzc2lvbkxldmVsLkFVVE9fQVBQUk9WRSxcbiAgICByYXRpb25hbGU6ICdHYXRla2VlcGVyIGNvbmZpcm1hdGlvbiBmbG93IOKAlCBtdXN0IGJlIGF1dG8tYXBwcm92ZWQgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbmZpcm1hdGlvbiB0byBjb25maXJtJyxcbiAgfSxcbiAgLy8gSXNzdWUgIzYyNTogQ0xJLWxldmVsIHBlcm1pc3Npb24gZGVsZWdhdGlvblxuICBwZXJtaXNzaW9uX3Byb21wdDoge1xuICAgIGRlZmF1bHRMZXZlbDogUGVybWlzc2lvbkxldmVsLkFVVE9fQVBQUk9WRSxcbiAgICByYXRpb25hbGU6ICdQZXJtaXNzaW9uIGV2YWx1YXRpb24gZmxvdyDigJQgbXVzdCBiZSBhdXRvLWFwcHJvdmVkIHRvIGF2b2lkIGluZmluaXRlIHBlcm1pc3Npb24gbG9vcHMnLFxuICAgIGNhbkJlRWxldmF0ZWQ6IGZhbHNlLFxuICB9LFxuICAvLyBJc3N1ZSAjNjI1IFBoYXNlIDM6IENMSSBhcHByb3ZhbCB3b3JrZmxvd1xuICBhcHByb3ZlX2NsaV9wZXJtaXNzaW9uOiB7XG4gICAgZGVmYXVsdExldmVsOiBQZXJtaXNzaW9uTGV2ZWwuQVVUT19BUFBST1ZFLFxuICAgIHJhdGlvbmFsZTogJ0NMSSBhcHByb3ZhbCBmbG93IOKAlCBtdXN0IGJlIGF1dG8tYXBwcm92ZWQgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbmZpcm1hdGlvbiB0byBhcHByb3ZlJyxcbiAgICBjYW5CZUVsZXZhdGVkOiBmYWxzZSxcbiAgfSxcblxuICAvLyBOb3RlOiBnZXRfZXhlY3V0aW9uX3N0YXRlIGFuZCBnZXRfZ2F0aGVyZWRfZGF0YSBtb3ZlZCB0byBSRUFEIGVuZHBvaW50IOKAlFxuICAvLyB0aGV5IGluaGVyaXQgQVVUT19BUFBST1ZFIGZyb20gdGhlIGVuZHBvaW50IGRlZmF1bHQsIG5vIG92ZXJyaWRlIG5lZWRlZC5cbiAgLy8gcmVjb3JkX2V4ZWN1dGlvbl9zdGVwIG1vdmVkIHRvIENSRUFURSBlbmRwb2ludCDigJRcbiAgLy8gaXQgaW5oZXJpdHMgQ09ORklSTV9TRVNTSU9OIGZyb20gdGhlIGVuZHBvaW50IGRlZmF1bHQsIG5vIG92ZXJyaWRlIG5lZWRlZC5cblxuICAvLyBTZXNzaW9uLWNvbmZpcm1hYmxlIGxpZmVjeWNsZSBvcGVyYXRpb25zIChsZXNzIGZyaWN0aW9uIHRoYW4gcGVyLXVzZSlcbiAgY29tcGxldGVfZXhlY3V0aW9uOiB7XG4gICAgZGVmYXVsdExldmVsOiBQZXJtaXNzaW9uTGV2ZWwuQ09ORklSTV9TRVNTSU9OLFxuICAgIHJhdGlvbmFsZTogJ1NpZ25hbHMgZXhlY3V0aW9uIGNvbXBsZXRpb24sIHBhcnQgb2YgYWN0aXZlIGV4ZWN1dGlvbicsXG4gICAgY2FuQmVFbGV2YXRlZDogdHJ1ZSxcbiAgfSxcbiAgY29udGludWVfZXhlY3V0aW9uOiB7XG4gICAgZGVmYXVsdExldmVsOiBQZXJtaXNzaW9uTGV2ZWwuQ09ORklSTV9TRVNTSU9OLFxuICAgIHJhdGlvbmFsZTogJ1Jlc3VtZXMgZXhlY3V0aW9uIGZyb20gc2F2ZWQgc3RhdGUnLFxuICAgIGNhbkJlRWxldmF0ZWQ6IHRydWUsXG4gIH0sXG4gIHByZXBhcmVfaGFuZG9mZjoge1xuICAgIGRlZmF1bHRMZXZlbDogUGVybWlzc2lvbkxldmVsLkNPTkZJUk1fU0VTU0lPTixcbiAgICByYXRpb25hbGU6ICdQcmVwYXJlcyBzZXNzaW9uIGhhbmRvZmYgc25hcHNob3QsIHJlYWQtaGVhdnkgd2l0aCBzZXJpYWxpemF0aW9uJyxcbiAgICBjYW5CZUVsZXZhdGVkOiB0cnVlLFxuICB9LFxuXG4gIC8vIE5vbi1lbGV2YXRhYmxlIGV4ZWN1dGUgb3BlcmF0aW9ucyAobWF0Y2ggZW5kcG9pbnQgZGVmYXVsdCBidXQgbG9jayBlbGV2YXRpb24pXG4gIGV4ZWN1dGVfYWdlbnQ6IHtcbiAgICBkZWZhdWx0TGV2ZWw6IFBlcm1pc3Npb25MZXZlbC5DT05GSVJNX1NJTkdMRV9VU0UsXG4gICAgcmF0aW9uYWxlOiAnRXhlY3V0ZXMgYWdlbnQgd2l0aCB1bnByZWRpY3RhYmxlIHNpZGUgZWZmZWN0cycsXG4gICAgY2FuQmVFbGV2YXRlZDogZmFsc2UsXG4gIH0sXG4gIGFib3J0X2V4ZWN1dGlvbjoge1xuICAgIGRlZmF1bHRMZXZlbDogUGVybWlzc2lvbkxldmVsLkNPTkZJUk1fU0lOR0xFX1VTRSxcbiAgICByYXRpb25hbGU6ICdUZXJtaW5hdGVzIGFnZW50IGV4ZWN1dGlvbiwgcmVqZWN0aW5nIGZ1cnRoZXIgb3BlcmF0aW9ucyBmb3IgdGhlIGdvYWxJZCcsXG4gICAgY2FuQmVFbGV2YXRlZDogZmFsc2UsXG4gIH0sXG4gIHJlc3VtZV9mcm9tX2hhbmRvZmY6IHtcbiAgICBkZWZhdWx0TGV2ZWw6IFBlcm1pc3Npb25MZXZlbC5DT05GSVJNX1NJTkdMRV9VU0UsXG4gICAgcmF0aW9uYWxlOiAnUmVzdW1lcyBleGVjdXRpb24gZnJvbSBleHRlcm5hbCBoYW5kb2ZmIGRhdGEsIHJlcXVpcmVzIHZhbGlkYXRpb24nLFxuICAgIGNhbkJlRWxldmF0ZWQ6IGZhbHNlLFxuICB9LFxufTtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgT1BFUkFUSU9OX1BPTElDWV9PVkVSUklERVMgaW5zdGVhZC5cbiAqIEtlcHQgYXMgYW4gYWxpYXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBjb2RlIHRoYXQgaW1wb3J0cyBPUEVSQVRJT05fUE9MSUNJRVMuXG4gKi9cbmV4cG9ydCBjb25zdCBPUEVSQVRJT05fUE9MSUNJRVMgPSBPUEVSQVRJT05fUE9MSUNZX09WRVJSSURFUztcblxuLyoqXG4gKiBHZXQgdGhlIGV4cGxpY2l0IHBvbGljeSBvdmVycmlkZSBmb3IgYW4gb3BlcmF0aW9uLCBpZiBvbmUgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSBvcGVyYXRpb24gLSBUaGUgb3BlcmF0aW9uIG5hbWVcbiAqIEByZXR1cm5zIFRoZSBvdmVycmlkZSBwb2xpY3ksIG9yIHVuZGVmaW5lZCBpZiBubyBvdmVycmlkZSBleGlzdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9wZXJhdGlvblBvbGljeShvcGVyYXRpb246IHN0cmluZyk6IE9wZXJhdGlvblBvbGljeSB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBPUEVSQVRJT05fUE9MSUNZX09WRVJSSURFU1tvcGVyYXRpb25dO1xufVxuXG4vKipcbiAqIEdldCB0aGUgZGVmYXVsdCBwZXJtaXNzaW9uIGxldmVsIGZvciBhbiBvcGVyYXRpb24uXG4gKlxuICogUmVzb2x1dGlvbiBvcmRlcjpcbiAqIDEuIEV4cGxpY2l0IG92ZXJyaWRlIGluIE9QRVJBVElPTl9QT0xJQ1lfT1ZFUlJJREVTXG4gKiAyLiBFbmRwb2ludCBkZWZhdWx0IGZyb20gT3BlcmF0aW9uUm91dGVyXG4gKiAzLiBDT05GSVJNX1NJTkdMRV9VU0UgZm9yIHVua25vd24gb3BlcmF0aW9ucyAoc2VjdXJlIGZhbGxiYWNrKVxuICpcbiAqIEBwYXJhbSBvcGVyYXRpb24gLSBUaGUgb3BlcmF0aW9uIG5hbWVcbiAqIEByZXR1cm5zIFRoZSBlZmZlY3RpdmUgZGVmYXVsdCBwZXJtaXNzaW9uIGxldmVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0UGVybWlzc2lvbkxldmVsKG9wZXJhdGlvbjogc3RyaW5nKTogUGVybWlzc2lvbkxldmVsIHtcbiAgLy8gMS4gQ2hlY2sgZm9yIGV4cGxpY2l0IG92ZXJyaWRlXG4gIGNvbnN0IG92ZXJyaWRlID0gT1BFUkFUSU9OX1BPTElDWV9PVkVSUklERVNbb3BlcmF0aW9uXTtcbiAgaWYgKG92ZXJyaWRlKSB7XG4gICAgcmV0dXJuIG92ZXJyaWRlLmRlZmF1bHRMZXZlbDtcbiAgfVxuXG4gIC8vIDIuIERlcml2ZSBmcm9tIGVuZHBvaW50IHJvdXRpbmdcbiAgY29uc3Qgcm91dGUgPSBnZXRSb3V0ZShvcGVyYXRpb24pO1xuICBpZiAocm91dGUpIHtcbiAgICByZXR1cm4gRU5EUE9JTlRfREVGQVVMVF9MRVZFTFNbcm91dGUuZW5kcG9pbnRdO1xuICB9XG5cbiAgLy8gMy4gU2VjdXJlIGZhbGxiYWNrIGZvciB1bmtub3duIG9wZXJhdGlvbnNcbiAgcmV0dXJuIFBlcm1pc3Npb25MZXZlbC5DT05GSVJNX1NJTkdMRV9VU0U7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYW4gb3BlcmF0aW9uIGNhbiBoYXZlIGl0cyBwZXJtaXNzaW9uIGxldmVsIGVsZXZhdGVkLlxuICogU29tZSBkZXN0cnVjdGl2ZSBvcGVyYXRpb25zIGNhbm5vdCBiZSBlbGV2YXRlZCB0byBBVVRPX0FQUFJPVkUuXG4gKlxuICogQHBhcmFtIG9wZXJhdGlvbiAtIFRoZSBvcGVyYXRpb24gbmFtZVxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgb3BlcmF0aW9uIGNhbiBiZSBlbGV2YXRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FuT3BlcmF0aW9uQmVFbGV2YXRlZChvcGVyYXRpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBvdmVycmlkZSA9IE9QRVJBVElPTl9QT0xJQ1lfT1ZFUlJJREVTW29wZXJhdGlvbl07XG4gIC8vIERlZmF1bHQgdG8gYWxsb3dpbmcgZWxldmF0aW9uIGZvciBvcGVyYXRpb25zIHdpdGhvdXQgZXhwbGljaXQgb3ZlcnJpZGVzXG4gIHJldHVybiBvdmVycmlkZT8uY2FuQmVFbGV2YXRlZCA/PyB0cnVlO1xufVxuXG4vKipcbiAqIEdldCBhbGwgb3BlcmF0aW9ucyBhdCBhIHNwZWNpZmljIGVmZmVjdGl2ZSBwZXJtaXNzaW9uIGxldmVsLlxuICogQ29uc2lkZXJzIGJvdGggZXhwbGljaXQgb3ZlcnJpZGVzIGFuZCBlbmRwb2ludC1kZXJpdmVkIGRlZmF1bHRzLlxuICpcbiAqIEBwYXJhbSBsZXZlbCAtIFRoZSBwZXJtaXNzaW9uIGxldmVsIHRvIGZpbHRlciBieVxuICogQHJldHVybnMgQXJyYXkgb2Ygb3BlcmF0aW9uIG5hbWVzIGF0IHRoYXQgbGV2ZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9wZXJhdGlvbnNBdExldmVsKGxldmVsOiBQZXJtaXNzaW9uTGV2ZWwpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHJlc3VsdHM6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBvcGVyYXRpb24gb2YgT2JqZWN0LmtleXMoT1BFUkFUSU9OX1JPVVRFUykpIHtcbiAgICBpZiAoZ2V0RGVmYXVsdFBlcm1pc3Npb25MZXZlbChvcGVyYXRpb24pID09PSBsZXZlbCkge1xuICAgICAgcmVzdWx0cy5wdXNoKG9wZXJhdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbi8qKlxuICogR2V0IGFsbCBhdXRvLWFwcHJvdmVkIG9wZXJhdGlvbnMuXG4gKiBUaGVzZSBhcmUgc2FmZSB0byBleGVjdXRlIHdpdGhvdXQgYW55IGNvbmZpcm1hdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEF1dG9BcHByb3ZlZE9wZXJhdGlvbnMoKTogc3RyaW5nW10ge1xuICByZXR1cm4gZ2V0T3BlcmF0aW9uc0F0TGV2ZWwoUGVybWlzc2lvbkxldmVsLkFVVE9fQVBQUk9WRSk7XG59XG5cbi8qKlxuICogR2V0IGFsbCBvcGVyYXRpb25zIHJlcXVpcmluZyBjb25maXJtYXRpb24uXG4gKiBUaGVzZSBuZWVkIHVzZXIgYXBwcm92YWwgYmVmb3JlIGV4ZWN1dGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpcm1hdGlvblJlcXVpcmVkT3BlcmF0aW9ucygpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbXG4gICAgLi4uZ2V0T3BlcmF0aW9uc0F0TGV2ZWwoUGVybWlzc2lvbkxldmVsLkNPTkZJUk1fU0VTU0lPTiksXG4gICAgLi4uZ2V0T3BlcmF0aW9uc0F0TGV2ZWwoUGVybWlzc2lvbkxldmVsLkNPTkZJUk1fU0lOR0xFX1VTRSksXG4gIF07XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"ToolClassification.d.ts","sourceRoot":"","sources":["../../../../src/handlers/mcp-aql/policies/ToolClassification.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5D,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;AAE1E,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,aAAa,CAAC;IACzB,wFAAwF;IACxF,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,iBAAiB,EAAE,KAAK,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,eAAe,GAAG,iBAAiB,GAAG,cAAc,CAAC;QAC/D,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;IACH,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,uBAAuB,CAAC;CACzC;AAiPD;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,wBAAwB,CAsC1B;AAiHD;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,cAAc,EAAE,wBAAwB,GACvC,cAAc,CA0ChB;AAID;;;;;GAKG;AACH,wBAAgB,mBAAmB;;;;;;;;;;;;EAYlC;AAID;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,cAAc,EAAE,aAAa,EAAE,GAC9B,mBAAmB,CA2JrB"}
1
+ {"version":3,"file":"ToolClassification.d.ts","sourceRoot":"","sources":["../../../../src/handlers/mcp-aql/policies/ToolClassification.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5D,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;AAE1E,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,aAAa,CAAC;IACzB,wFAAwF;IACxF,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,iBAAiB,EAAE,KAAK,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,eAAe,GAAG,iBAAiB,GAAG,cAAc,CAAC;QAC/D,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;IACH,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,uBAAuB,CAAC;CACzC;AAkPD;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,wBAAwB,CAsC1B;AAiHD;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,cAAc,EAAE,wBAAwB,GACvC,cAAc,CA0ChB;AAID;;;;;GAKG;AACH,wBAAgB,mBAAmB;;;;;;;;;;;;EAYlC;AAID;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,cAAc,EAAE,aAAa,EAAE,GAC9B,mBAAmB,CA2JrB"}