@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.
- package/CHANGELOG.md +8 -0
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/handlers/ElementCRUDHandler.d.ts +30 -0
- package/dist/handlers/ElementCRUDHandler.d.ts.map +1 -1
- package/dist/handlers/ElementCRUDHandler.js +141 -2
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +3 -0
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/MCPAQLHandler.js +98 -1
- package/dist/handlers/mcp-aql/OperationRouter.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/OperationRouter.js +6 -1
- package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/OperationSchema.js +17 -1
- package/dist/handlers/mcp-aql/policies/AgentToolPolicyTranslator.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/policies/AgentToolPolicyTranslator.js +2 -1
- package/dist/handlers/mcp-aql/policies/ElementPolicies.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/policies/ElementPolicies.js +2 -1
- package/dist/handlers/mcp-aql/policies/OperationPolicies.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/policies/OperationPolicies.js +6 -1
- package/dist/handlers/mcp-aql/policies/ToolClassification.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/policies/ToolClassification.js +2 -1
- package/dist/server/tools/MCPAQLTools.js +2 -1
- package/dist/web/console/IngestRoutes.d.ts +6 -0
- package/dist/web/console/IngestRoutes.d.ts.map +1 -1
- package/dist/web/console/IngestRoutes.js +38 -9
- package/dist/web/console/LeaderElection.d.ts +39 -0
- package/dist/web/console/LeaderElection.d.ts.map +1 -1
- package/dist/web/console/LeaderElection.js +147 -29
- package/dist/web/console/LeaderForwardingSink.d.ts.map +1 -1
- package/dist/web/console/LeaderForwardingSink.js +5 -1
- package/dist/web/console/PromotionManager.d.ts.map +1 -1
- package/dist/web/console/PromotionManager.js +3 -11
- package/dist/web/console/StaleProcessRecovery.d.ts +11 -0
- package/dist/web/console/StaleProcessRecovery.d.ts.map +1 -1
- package/dist/web/console/StaleProcessRecovery.js +229 -63
- package/dist/web/console/UnifiedConsole.d.ts +22 -1
- package/dist/web/console/UnifiedConsole.d.ts.map +1 -1
- package/dist/web/console/UnifiedConsole.js +172 -11
- package/dist/web/public/app.js +62 -1
- package/dist/web/public/index.html +19 -17
- package/dist/web/public/sessions.js +111 -0
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +12 -10
- package/package.json +1 -1
- package/server.json +2 -2
|
@@ -23,6 +23,7 @@ import { logger } from '../../../utils/logger.js';
|
|
|
23
23
|
const GATEKEEPER_ESSENTIAL_OPERATIONS = new Set([
|
|
24
24
|
'confirm_operation',
|
|
25
25
|
'verify_challenge',
|
|
26
|
+
'release_deadlock',
|
|
26
27
|
'permission_prompt',
|
|
27
28
|
'introspect',
|
|
28
29
|
'get_active_elements',
|
|
@@ -665,4 +666,4 @@ function buildMatchTargets(toolName, toolInput) {
|
|
|
665
666
|
}
|
|
666
667
|
return targets;
|
|
667
668
|
}
|
|
668
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVG9vbENsYXNzaWZpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2hhbmRsZXJzL21jcC1hcWwvcG9saWNpZXMvVG9vbENsYXNzaWZpY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBaUNsRCx3RUFBd0U7QUFFeEU7Ozs7Ozs7R0FPRztBQUNILE1BQU0sK0JBQStCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDOUMsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixtQkFBbUI7SUFDbkIsWUFBWTtJQUNaLHFCQUFxQjtJQUNyQixxQkFBcUI7SUFDckIsbUJBQW1CO0lBQ25CLHdCQUF3QixFQUFRLHFCQUFxQjtJQUNyRCwyQkFBMkIsRUFBSyxxQkFBcUI7Q0FDdEQsQ0FBQyxDQUFDO0FBRUg7Ozs7Ozs7R0FPRztBQUNILE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbEMsZUFBZTtJQUNmLGFBQWE7SUFDYixxQkFBcUI7SUFDckIsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQixxQkFBcUI7SUFDckIsa0JBQWtCO0lBQ2xCLFFBQVE7SUFDUixnQkFBZ0I7SUFDaEIsWUFBWTtJQUNaLHFCQUFxQjtJQUNyQixtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLG1CQUFtQjtJQUNuQiw0QkFBNEI7SUFDNUIsd0JBQXdCO0lBQ3hCLDZCQUE2QjtJQUM3QixrQkFBa0I7SUFDbEIsa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQixZQUFZO0lBQ1osbUJBQW1CO0lBQ25CLHFCQUFxQjtJQUNyQixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLHlCQUF5QjtJQUN6QixZQUFZO0lBQ1osZUFBZTtJQUNmLHVCQUF1QjtJQUN2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QUM7UUFDcEcsTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLHNCQUFzQixDQUFDLENBQUMsQ0FBQztRQUMzRixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxJQUFJLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRvb2wgQ2xhc3NpZmljYXRpb24gZm9yIENMSS1MZXZlbCBQZXJtaXNzaW9uIFByb21wdHNcbiAqXG4gKiBQcm92aWRlcyBzdGF0aWMgY2xhc3NpZmljYXRpb24gb2YgQ2xhdWRlIENvZGUgQ0xJIHRvb2wgY2FsbHMgYW5kXG4gKiBldmFsdWF0aW9uIGFnYWluc3QgYWN0aXZlIGVsZW1lbnQgZ2F0ZWtlZXBlciBwb2xpY2llcy5cbiAqXG4gKiBVc2VkIGJ5IHRoZSBwZXJtaXNzaW9uX3Byb21wdCBvcGVyYXRpb24gKElzc3VlICM2MjUpIHRvIGV2YWx1YXRlXG4gKiAtLXBlcm1pc3Npb24tcHJvbXB0LXRvb2wgcmVxdWVzdHMgd2l0aG91dCByZXF1aXJpbmcgTExNIGV2YWx1YXRpb24uXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IG1hdGNoZXNQYXR0ZXJuIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvcGF0dGVybk1hdGNoZXIuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB0eXBlIHsgQWN0aXZlRWxlbWVudCB9IGZyb20gJy4vRWxlbWVudFBvbGljaWVzLmpzJztcbmltcG9ydCB0eXBlIHsgUmlza0Fzc2Vzc21lbnQgfSBmcm9tICcuLi9HYXRla2VlcGVyVHlwZXMuanMnO1xuXG4vLyDilIDilIAgVHlwZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIFRvb2xSaXNrTGV2ZWwgPSAnc2FmZScgfCAnbW9kZXJhdGUnIHwgJ2Rhbmdlcm91cycgfCAnYmxvY2tlZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9vbENsYXNzaWZpY2F0aW9uUmVzdWx0IHtcbiAgcmlza0xldmVsOiBUb29sUmlza0xldmVsO1xuICAvKiogJ2FsbG93JyA9IGF1dG8tYXBwcm92ZSwgJ2RlbnknID0gYXV0by1yZWplY3QsICdldmFsdWF0ZScgPSBjaGVjayBlbGVtZW50IHBvbGljaWVzICovXG4gIGJlaGF2aW9yOiAnYWxsb3cnIHwgJ2RlbnknIHwgJ2V2YWx1YXRlJztcbiAgcmVhc29uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9saWN5RXZhbHVhdGlvbkNvbnRleHQge1xuICBldmFsdWF0ZWRFbGVtZW50czogQXJyYXk8e1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgbWF0Y2hlZD86ICdhbGxvd1BhdHRlcm5zJyB8ICdjb25maXJtUGF0dGVybnMnIHwgJ2RlbnlQYXR0ZXJucyc7XG4gICAgbWF0Y2hlZFBhdHRlcm4/OiBzdHJpbmc7XG4gICAgbWF0Y2hlZFRhcmdldD86IHN0cmluZztcbiAgfT47XG4gIGRlY2lzaW9uQ2hhaW46IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsaVRvb2xQb2xpY3lSZXN1bHQge1xuICBiZWhhdmlvcjogJ2FsbG93JyB8ICdkZW55JyB8ICdldmFsdWF0ZScgfCAnY29uZmlybSc7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIGNvbmZpcm1Tb3VyY2U/OiBzdHJpbmc7XG4gIHBvbGljeUNvbnRleHQ/OiBQb2xpY3lFdmFsdWF0aW9uQ29udGV4dDtcbn1cblxuLy8g4pSA4pSAIEdhdGVrZWVwZXItRXNzZW50aWFsIE9wZXJhdGlvbnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogTUNQLUFRTCBvcGVyYXRpb25zIHRoYXQgbXVzdCBORVZFUiBiZSBibG9ja2VkIGJ5IHBlcm1pc3Npb25fcHJvbXB0LFxuICogZXZlbiBpZiBlbGVtZW50IGRlbnlQYXR0ZXJucyB3b3VsZCBtYXRjaCB0aGUgTUNQIHRvb2wgbmFtZS5cbiAqXG4gKiBUaGVzZSBhcmUgZXNzZW50aWFsIGZvciB0aGUgR2F0ZWtlZXBlciBmbG93IGl0c2VsZi4gQmxvY2tpbmcgdGhlbVxuICogd291bGQgcHJldmVudCB0aGUgaHVtYW4taW4tdGhlLWxvb3AgYXBwcm92YWwgcGF0aCBmcm9tIGZ1bmN0aW9uaW5nXG4gKiAoZS5nLiwgYSBkZW55UGF0dGVybiBvZiAnbWNwX19Eb2xsaG91c2VNQ1AqJyB3b3VsZCBibG9jayBjb25maXJtX29wZXJhdGlvbikuXG4gKi9cbmNvbnN0IEdBVEVLRUVQRVJfRVNTRU5USUFMX09QRVJBVElPTlMgPSBuZXcgU2V0KFtcbiAgJ2NvbmZpcm1fb3BlcmF0aW9uJyxcbiAgJ3ZlcmlmeV9jaGFsbGVuZ2UnLFxuICAncGVybWlzc2lvbl9wcm9tcHQnLFxuICAnaW50cm9zcGVjdCcsXG4gICdnZXRfYWN0aXZlX2VsZW1lbnRzJyxcbiAgJ2dldF9leGVjdXRpb25fc3RhdGUnLFxuICAnZ2V0X2dhdGhlcmVkX2RhdGEnLFxuICAnYXBwcm92ZV9jbGlfcGVybWlzc2lvbicsICAgICAgIC8vIElzc3VlICM2MjUgUGhhc2UgM1xuICAnZ2V0X3BlbmRpbmdfY2xpX2FwcHJvdmFscycsICAgIC8vIElzc3VlICM2MjUgUGhhc2UgM1xuXSk7XG5cbi8qKlxuICogTUNQLUFRTCBvcGVyYXRpb25zIHRoYXQgYXJlIGluaGVyZW50bHkgcmVhZC1vbmx5LlxuICpcbiAqIFRoZXNlIGF1dG8tYWxsb3cgaW4gcGVybWlzc2lvbl9wcm9tcHQgKG5vIGVsZW1lbnQgcG9saWN5IGV2YWx1YXRpb24pLlxuICogVGhlIEdhdGVrZWVwZXIgKExheWVyIDIpIHN0aWxsIGFwcGxpZXMgaXRzIG93biBwZXItb3BlcmF0aW9uIHBvbGljaWVzLFxuICogc28gdGhpcyBkb2Vzbid0IGJ5cGFzcyBzZXJ2ZXItc2lkZSBhY2Nlc3MgY29udHJvbCDigJQgaXQganVzdCBhdm9pZHNcbiAqIHVubmVjZXNzYXJ5ICdldmFsdWF0ZScgcm91bmQtdHJpcHMgZm9yIG9wZXJhdGlvbnMgdGhhdCBjYW4ndCBtb2RpZnkgc3RhdGUuXG4gKi9cbmNvbnN0IFNBRkVfTUNQX09QRVJBVElPTlMgPSBuZXcgU2V0KFtcbiAgJ2xpc3RfZWxlbWVudHMnLFxuICAnZ2V0X2VsZW1lbnQnLFxuICAnZ2V0X2VsZW1lbnRfZGV0YWlscycsXG4gICdzZWFyY2hfZWxlbWVudHMnLFxuICAncXVlcnlfZWxlbWVudHMnLFxuICAnZ2V0X2FjdGl2ZV9lbGVtZW50cycsXG4gICd2YWxpZGF0ZV9lbGVtZW50JyxcbiAgJ3JlbmRlcicsXG4gICdleHBvcnRfZWxlbWVudCcsXG4gICdpbnRyb3NwZWN0JyxcbiAgJ2dldF9leGVjdXRpb25fc3RhdGUnLFxuICAnZ2V0X2dhdGhlcmVkX2RhdGEnLFxuICAnYnJvd3NlX2NvbGxlY3Rpb24nLFxuICAnc2VhcmNoX2NvbGxlY3Rpb24nLFxuICAnc2VhcmNoX2NvbGxlY3Rpb25fZW5oYW5jZWQnLFxuICAnZ2V0X2NvbGxlY3Rpb25fY29udGVudCcsXG4gICdnZXRfY29sbGVjdGlvbl9jYWNoZV9oZWFsdGgnLFxuICAncG9ydGZvbGlvX3N0YXR1cycsXG4gICdwb3J0Zm9saW9fY29uZmlnJyxcbiAgJ3NlYXJjaF9wb3J0Zm9saW8nLFxuICAnc2VhcmNoX2FsbCcsXG4gICdjaGVja19naXRodWJfYXV0aCcsXG4gICdvYXV0aF9oZWxwZXJfc3RhdHVzJyxcbiAgJ2RvbGxob3VzZV9jb25maWcnLFxuICAnZ2V0X2J1aWxkX2luZm8nLFxuICAnZ2V0X2NhY2hlX2J1ZGdldF9yZXBvcnQnLFxuICAncXVlcnlfbG9ncycsXG4gICdxdWVyeV9tZXRyaWNzJyxcbiAgJ2ZpbmRfc2ltaWxhcl9lbGVtZW50cycsXG4gICdnZXRfZWxlbWVudF9yZWxhdGlvbnNoaXBzJyxcbiAgJ3NlYXJjaF9ieV92ZXJiJyxcbiAgJ2dldF9yZWxhdGlvbnNoaXBfc3RhdHMnLFxuICAnZ2V0X2VmZmVjdGl2ZV9jbGlfcG9saWNpZXMnLFxuICAnZ2V0X3BlbmRpbmdfY2xpX2FwcHJvdmFscycsXG5dKTtcblxuLy8g4pSA4pSAIFN0YXRpYyBDbGFzc2lmaWNhdGlvbiBMaXN0cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBUb29scyB0aGF0IGFyZSBhbHdheXMgc2FmZSAocmVhZC1vbmx5LCBubyBzaWRlIGVmZmVjdHMpLlxuICpcbiAqIE5PVEU6IFwiU2FmZVwiIGhlcmUgbWVhbnMgbm8gZGVzdHJ1Y3RpdmUgc2lkZSBlZmZlY3RzIOKAlCBpdCBkb2VzIE5PVCBtZWFuXG4gKiB1bnJlc3RyaWN0ZWQuIFJlYWQtb25seSB0b29scyBjYW4gc3RpbGwgcG9zZSBpbmZvcm1hdGlvbi1sZWFrYWdlIG9yXG4gKiBzY29wZS1jcmVlcCByaXNrcyB3aGVuIHVzZWQgdG8gYWNjZXNzIGZpbGVzIG91dHNpZGUgdGhlIHByb2plY3Qgd29ya2luZ1xuICogZGlyZWN0b3J5IChlLmcuLCB+Ly5zc2gvKiwgL2V0Yy9wYXNzd2QsIGNyZWRlbnRpYWxzIGluIGhvbWUgZGlyZWN0b3JpZXMpLlxuICogTW9zdCBMTE0gY2xpZW50cyAoQ2xhdWRlIENvZGUsIEN1cnNvciwgZXRjLikgYWxyZWFkeSBlbmZvcmNlIGRpcmVjdG9yeVxuICogc2NvcGluZyBhdCB0aGUgY2xpZW50IGxldmVsLiBUaGUgYGFzc2Vzc1Jpc2soKWAgZnVuY3Rpb24gYXBwbGllcyBhIHNtYWxsXG4gKiBzY29yZSBidW1wIGZvciByZWFkIG9wZXJhdGlvbnMgdGFyZ2V0aW5nIG91dC1vZi1zY29wZSBwYXRocyBhcyBhblxuICogYWRkaXRpb25hbCBzaWduYWwgZm9yIGFwcHJvdmFsIHBvbGljaWVzLlxuICovXG5jb25zdCBTQUZFX1RPT0xTID0gbmV3IFNldChbXG4gICdSZWFkJyxcbiAgJ0dyZXAnLFxuICAnR2xvYicsXG4gICdXZWJGZXRjaCcsXG4gICdXZWJTZWFyY2gnLFxuICAnVGFza0NyZWF0ZScsXG4gICdUYXNrVXBkYXRlJyxcbiAgJ1Rhc2tHZXQnLFxuICAnVGFza0xpc3QnLFxuICAnVGFza091dHB1dCcsXG4gICdBc2tVc2VyUXVlc3Rpb24nLFxuICAnRW50ZXJQbGFuTW9kZScsXG4gICdFeGl0UGxhbk1vZGUnLFxuICAnVG9kb1JlYWQnLFxuICAnVG9kb1dyaXRlJyxcbl0pO1xuXG4vKiogQmFzaCBjb21tYW5kIHByZWZpeGVzL3BhdHRlcm5zIHRoYXQgYXJlIHNhZmUgKi9cbmNvbnN0IFNBRkVfQkFTSF9QQVRURVJOUyA9IFtcbiAgJ2dpdCBzdGF0dXMqJyxcbiAgJ2dpdCBsb2cqJyxcbiAgJ2dpdCBkaWZmKicsXG4gICdnaXQgYnJhbmNoKicsXG4gICdnaXQgc2hvdyonLFxuICAnZ2l0IHJlbW90ZSonLFxuICAnZ2l0IHN0YXNoIGxpc3QqJyxcbiAgJ2xzKicsXG4gICdwd2QnLFxuICAnY2F0IConLFxuICAnaGVhZCAqJyxcbiAgJ3RhaWwgKicsXG4gICd3YyAqJyxcbiAgJ2VjaG8gKicsXG4gICducG0gdGVzdConLFxuICAnbnBtIHJ1biBsaW50KicsXG4gICducG0gcnVuIGJ1aWxkKicsXG4gICducG0gcnVuIHRlc3QqJyxcbiAgJ25wbSBydW4gY2hlY2sqJyxcbiAgJ25wbSBydW4gdHlwZWNoZWNrKicsXG4gICducG0gcnVuIGZvcm1hdConLFxuICAnbnBtIGxzKicsXG4gICducG0gaW5mbyonLFxuICAnbnBtIG91dGRhdGVkKicsXG4gICducHggamVzdConLFxuICAnbnB4IHRzYyAtLW5vRW1pdConLFxuICAnbm9kZSAtLXZlcnNpb24qJyxcbiAgJ3doaWNoIConLFxuICAndHlwZSAqJyxcbiAgJ2doIGlzc3VlIGxpc3QqJyxcbiAgJ2doIGlzc3VlIHZpZXcqJyxcbiAgJ2doIHByIGxpc3QqJyxcbiAgJ2doIHByIHZpZXcqJyxcbiAgJ2doIHByIGNoZWNrcyonLFxuXTtcblxuLyoqIEJhc2ggY29tbWFuZCBwYXR0ZXJucyB0aGF0IGFyZSBkYW5nZXJvdXMgKi9cbmNvbnN0IERBTkdFUk9VU19CQVNIX1BBVFRFUk5TID0gW1xuICAncm0gLXJmIConLFxuICAncm0gLWZyIConLFxuICAnZ2l0IHB1c2ggLS1mb3JjZSonLFxuICAnZ2l0IHB1c2ggLWYgKicsXG4gICdnaXQgcmVzZXQgLS1oYXJkKicsXG4gICdnaXQgY2xlYW4gLWYqJyxcbiAgJ2dpdCBjaGVja291dCAtLSAqJyxcbiAgJ2dpdCBicmFuY2ggLUQgKicsXG4gICdjaG1vZCA3NzcqJyxcbiAgJ2NobW9kIC1SIDc3NyonLFxuICAnY2htb2QgK3MgKicsXG4gICdjaG93biByb290IConLFxuICAnc3VkbyAqJyxcbiAgJ2RvYXMgKicsXG4gICdzdSAtKicsXG4gICdldmFsIConLFxuICAvLyBJbmxpbmUgaW50ZXJwcmV0ZXIgZXhlY3V0aW9uICgjMTc4Mikg4oCUIGFyYml0cmFyeSBjb2RlIHZpYSAtYy8tZSBmbGFnc1xuICAncHl0aG9uIC1jIConLFxuICAncHl0aG9uMyAtYyAqJyxcbiAgJ25vZGUgLWUgKicsXG4gICdub2RlIC0tZXZhbCAqJyxcbiAgJ3BlcmwgLWUgKicsXG4gICdydWJ5IC1lIConLFxuICAvLyBQaXBlLXRvLXNoZWxsIHBhdHRlcm5zICh3aXRoIGFuZCB3aXRob3V0IHNwYWNlcywgbXVsdGlwbGUgc2hlbGxzKVxuICAnKnwgc2gnLFxuICAnKnwgc2ggKicsXG4gICcqfHNoJyxcbiAgJyp8c2ggKicsXG4gICcqfCBiYXNoJyxcbiAgJyp8IGJhc2ggKicsXG4gICcqfGJhc2gnLFxuICAnKnxiYXNoIConLFxuICAnKnwgenNoJyxcbiAgJyp8enNoJyxcbiAgJ2N1cmwgKiB8IConLFxuICAnd2dldCAqIHwgKicsXG4gIC8vIFBhY2thZ2UgbWFuYWdlciBpbnN0YWxscyAoY2FuIGV4ZWN1dGUgYXJiaXRyYXJ5IHBvc3QtaW5zdGFsbCBzY3JpcHRzKVxuICAnbnBtIGluc3RhbGwgKicsXG4gICducG0gaW5zdGFsbCcsXG4gICducG0gaSAqJyxcbiAgJ25wbSBpJyxcbiAgJ3lhcm4gYWRkIConLFxuICAneWFybiBpbnN0YWxsKicsXG4gICdwaXAgaW5zdGFsbCAqJyxcbiAgJ2dlbSBpbnN0YWxsIConLFxuICAvLyBFbnZpcm9ubWVudCBtYW5pcHVsYXRpb24gKHBhdGggcG9pc29uaW5nLCBsaWJyYXJ5IGluamVjdGlvbiwgdmFyaWFibGUgZGVzdHJ1Y3Rpb24pXG4gICdleHBvcnQgUEFUSD0qJyxcbiAgJ2V4cG9ydCBMRF9QUkVMT0FEPSonLFxuICAnZXhwb3J0IExEX0xJQlJBUllfUEFUSD0qJyxcbiAgJ2VudiAtaSAqJyxcbiAgJ3Vuc2V0IConLFxuICAvLyBQcm9jZXNzIGNvbnRyb2wgKGNhbiB0ZXJtaW5hdGUgYWdlbnRzIG9yIHN5c3RlbSBwcm9jZXNzZXMpXG4gICdraWxsIConLFxuICAna2lsbCAtKicsXG4gICdwa2lsbCAqJyxcbiAgJ2tpbGxhbGwgKicsXG4gIC8vIE5ldHdvcmsgdG9vbHMgKGV4ZmlsdHJhdGlvbiwgcmV2ZXJzZSBzaGVsbHMpXG4gICduYyAqJyxcbiAgJ25jIC0qJyxcbiAgJ25ldGNhdCAqJyxcbiAgJ25jYXQgKicsXG4gICdzb2NhdCAqJyxcbiAgLy8gQXJjaGl2ZSBvcGVyYXRpb25zIChhcmNoaXZlIGJvbWJzLCByb290IGRpcmVjdG9yeSBleGZpbHRyYXRpb24vcmFuc29td2FyZSlcbiAgJ3RhciAteGYgKicsXG4gICd0YXIgeGYgKicsXG4gICd6aXAgLXIgKiAvJyxcbiAgLy8gQ29tbWFuZCBjaGFpbmluZyB3aXRoIGRhbmdlcm91cyBzdWJjb21tYW5kc1xuICAnKjsgcm0gLXJmIConLFxuICAnKiYmIHJtIC1yZiAqJyxcbiAgJyp8fCBybSAtcmYgKicsXG4gICcqOyBzdWRvIConLFxuICAnKiYmIHN1ZG8gKicsXG4gICcqfHwgc3VkbyAqJyxcbiAgJyo7IGV2YWwgKicsXG4gICcqJiYgZXZhbCAqJyxcbiAgLy8gU3VicHJvY2VzcyBleGVjdXRpb24gd3JhcHBlcnMgKGJ5cGFzcyBvdXRlciBjb21tYW5kIGNsYXNzaWZpY2F0aW9uKVxuICAnYmFzaCAtYyAqJyxcbiAgJ3NoIC1jIConLFxuICAnenNoIC1jIConLFxuICAnL2Jpbi9iYXNoIC1jIConLFxuICAnL2Jpbi9zaCAtYyAqJyxcbiAgLy8gUHJvY2VzcyBzdWJzdGl0dXRpb24gKGNhbiBpbmplY3QgYXJiaXRyYXJ5IGNvbW1hbmQgb3V0cHV0KVxuICAnKjwoKicsXG4gIC8vIEVuY29kZWQgcGF5bG9hZCBleGVjdXRpb24gKGJhc2U2NC1kZWNvZGUgcGlwZWQgdG8gc2hlbGwpXG4gICcqYmFzZTY0IC1kKnwqJyxcbiAgJypiYXNlNjQgLS1kZWNvZGUqfConLFxuICAnKmJhc2U2NCAtRCp8KicsXG5dO1xuXG4vKiogQmFzaCBjb21tYW5kIHBhdHRlcm5zIHRoYXQgYXJlIGFsd2F5cyBibG9ja2VkICovXG5jb25zdCBCTE9DS0VEX0JBU0hfUEFUVEVSTlMgPSBbXG4gICdta2ZzKicsXG4gICdkZCBpZj0qJyxcbiAgJzooKXs6fDomfTs6JyxcbiAgJ2Zvcm1hdCAqJyxcbiAgJyooKXsgKicsXG5dO1xuXG4vLyDilIDilIAgU3RhdGljIENsYXNzaWZpY2F0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIENsYXNzaWZ5IGEgQ0xJIHRvb2wgY2FsbCBieSByaXNrIGxldmVsIHVzaW5nIHN0YXRpYyBydWxlcy5cbiAqXG4gKiBSZXR1cm5zICdhbGxvdycgZm9yIGtub3duLXNhZmUgdG9vbHMsICdkZW55JyBmb3Iga25vd24tZGFuZ2Vyb3VzIHBhdHRlcm5zLFxuICogYW5kICdldmFsdWF0ZScgZm9yIGFueXRoaW5nIHRoYXQgbmVlZHMgZnVydGhlciBwb2xpY3kgY2hlY2tpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc2lmeVRvb2woXG4gIHRvb2xOYW1lOiBzdHJpbmcsXG4gIHRvb2xJbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFRvb2xDbGFzc2lmaWNhdGlvblJlc3VsdCB7XG4gIC8vIEtub3duLXNhZmUgdG9vbHM6IGF1dG8tYWxsb3dcbiAgaWYgKFNBRkVfVE9PTFMuaGFzKHRvb2xOYW1lKSkge1xuICAgIHJldHVybiB7IHJpc2tMZXZlbDogJ3NhZmUnLCBiZWhhdmlvcjogJ2FsbG93JywgcmVhc29uOiBgJHt0b29sTmFtZX0gaXMgYSByZWFkLW9ubHkgdG9vbGAgfTtcbiAgfVxuXG4gIC8vIEJhc2g6IHN1Yi1jbGFzc2lmeSBieSBjb21tYW5kIGNvbnRlbnRcbiAgaWYgKHRvb2xOYW1lID09PSAnQmFzaCcpIHtcbiAgICByZXR1cm4gY2xhc3NpZnlCYXNoQ29tbWFuZCh0b29sSW5wdXQpO1xuICB9XG5cbiAgLy8gTUNQIHRvb2wgY2FsbHM6IGF1dG8tYWxsb3cgZ2F0ZWtlZXBlci1lc3NlbnRpYWwgYW5kIHNhZmUgcmVhZC1vbmx5IG9wZXJhdGlvbnMsIGV2YWx1YXRlIG90aGVyc1xuICBpZiAodG9vbE5hbWUuc3RhcnRzV2l0aCgnbWNwX18nKSkge1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHR5cGVvZiB0b29sSW5wdXQub3BlcmF0aW9uID09PSAnc3RyaW5nJyA/IHRvb2xJbnB1dC5vcGVyYXRpb24gOiAnJztcbiAgICBpZiAob3BlcmF0aW9uICYmIEdBVEVLRUVQRVJfRVNTRU5USUFMX09QRVJBVElPTlMuaGFzKG9wZXJhdGlvbikpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJpc2tMZXZlbDogJ3NhZmUnLFxuICAgICAgICBiZWhhdmlvcjogJ2FsbG93JyxcbiAgICAgICAgcmVhc29uOiBgR2F0ZWtlZXBlci1lc3NlbnRpYWwgb3BlcmF0aW9uICcke29wZXJhdGlvbn0nIOKAlCBjYW5ub3QgYmUgYmxvY2tlZCBieSBwZXJtaXNzaW9uX3Byb21wdGAsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAob3BlcmF0aW9uICYmIFNBRkVfTUNQX09QRVJBVElPTlMuaGFzKG9wZXJhdGlvbikpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJpc2tMZXZlbDogJ3NhZmUnLFxuICAgICAgICBiZWhhdmlvcjogJ2FsbG93JyxcbiAgICAgICAgcmVhc29uOiBgUmVhZC1vbmx5IE1DUCBvcGVyYXRpb24gJyR7b3BlcmF0aW9ufSdgLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgcmlza0xldmVsOiAnbW9kZXJhdGUnLCBiZWhhdmlvcjogJ2V2YWx1YXRlJywgcmVhc29uOiAnTUNQIHRvb2wgY2FsbCByZXF1aXJlcyBwb2xpY3kgZXZhbHVhdGlvbicgfTtcbiAgfVxuXG4gIC8vIEVkaXQsIFdyaXRlLCBBZ2VudCwgTm90ZWJvb2tFZGl0LCBldGMuOiBtb2RlcmF0ZSByaXNrXG4gIGlmIChbJ0VkaXQnLCAnV3JpdGUnLCAnQWdlbnQnLCAnTm90ZWJvb2tFZGl0J10uaW5jbHVkZXModG9vbE5hbWUpKSB7XG4gICAgcmV0dXJuIHsgcmlza0xldmVsOiAnbW9kZXJhdGUnLCBiZWhhdmlvcjogJ2V2YWx1YXRlJywgcmVhc29uOiBgJHt0b29sTmFtZX0gbW9kaWZpZXMgc3RhdGUsIHJlcXVpcmVzIHBvbGljeSBldmFsdWF0aW9uYCB9O1xuICB9XG5cbiAgLy8gVW5rbm93biB0b29sOiBldmFsdWF0ZSAocGVybWlzc2l2ZSBkZWZhdWx0IGZvciBQaGFzZSAxKVxuICByZXR1cm4geyByaXNrTGV2ZWw6ICdtb2RlcmF0ZScsIGJlaGF2aW9yOiAnZXZhbHVhdGUnLCByZWFzb246IGBVbmtub3duIHRvb2wgJyR7dG9vbE5hbWV9JywgcmVxdWlyZXMgcG9saWN5IGV2YWx1YXRpb25gIH07XG59XG5cbi8qKlxuICogU3ViLWNsYXNzaWZ5IEJhc2ggY29tbWFuZHMgYnkgbWF0Y2hpbmcgYWdhaW5zdCBrbm93biBwYXR0ZXJucy5cbiAqL1xuZnVuY3Rpb24gY2xhc3NpZnlCYXNoQ29tbWFuZChcbiAgdG9vbElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogVG9vbENsYXNzaWZpY2F0aW9uUmVzdWx0IHtcbiAgY29uc3QgY29tbWFuZCA9IHR5cGVvZiB0b29sSW5wdXQuY29tbWFuZCA9PT0gJ3N0cmluZycgPyB0b29sSW5wdXQuY29tbWFuZC50cmltKCkgOiAnJztcblxuICBpZiAoIWNvbW1hbmQpIHtcbiAgICByZXR1cm4geyByaXNrTGV2ZWw6ICdtb2RlcmF0ZScsIGJlaGF2aW9yOiAnZXZhbHVhdGUnLCByZWFzb246ICdFbXB0eSBCYXNoIGNvbW1hbmQnIH07XG4gIH1cblxuICAvLyBDaGVjayBibG9ja2VkIHBhdHRlcm5zIGZpcnN0IChoaWdoZXN0IHByaW9yaXR5KVxuICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgQkxPQ0tFRF9CQVNIX1BBVFRFUk5TKSB7XG4gICAgaWYgKG1hdGNoZXNQYXR0ZXJuKGNvbW1hbmQsIHBhdHRlcm4pKSB7XG4gICAgICByZXR1cm4geyByaXNrTGV2ZWw6ICdibG9ja2VkJywgYmVoYXZpb3I6ICdkZW55JywgcmVhc29uOiBgQmxvY2tlZCBjb21tYW5kIHBhdHRlcm46ICR7cGF0dGVybn1gIH07XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hlY2sgZGFuZ2Vyb3VzIHBhdHRlcm5zXG4gIGZvciAoY29uc3QgcGF0dGVybiBvZiBEQU5HRVJPVVNfQkFTSF9QQVRURVJOUykge1xuICAgIGlmIChtYXRjaGVzUGF0dGVybihjb21tYW5kLCBwYXR0ZXJuKSkge1xuICAgICAgcmV0dXJuIHsgcmlza0xldmVsOiAnZGFuZ2Vyb3VzJywgYmVoYXZpb3I6ICdkZW55JywgcmVhc29uOiBgRGFuZ2Vyb3VzIGNvbW1hbmQgcGF0dGVybjogJHtwYXR0ZXJufWAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBDaGVjayBzYWZlIHBhdHRlcm5zXG4gIGZvciAoY29uc3QgcGF0dGVybiBvZiBTQUZFX0JBU0hfUEFUVEVSTlMpIHtcbiAgICBpZiAobWF0Y2hlc1BhdHRlcm4oY29tbWFuZCwgcGF0dGVybikpIHtcbiAgICAgIHJldHVybiB7IHJpc2tMZXZlbDogJ3NhZmUnLCBiZWhhdmlvcjogJ2FsbG93JywgcmVhc29uOiBgU2FmZSBjb21tYW5kIHBhdHRlcm46ICR7cGF0dGVybn1gIH07XG4gICAgfVxuICB9XG5cbiAgLy8gVW5jbGFzc2lmaWVkOiBldmFsdWF0ZSBhZ2FpbnN0IGVsZW1lbnQgcG9saWNpZXNcbiAgcmV0dXJuIHsgcmlza0xldmVsOiAnbW9kZXJhdGUnLCBiZWhhdmlvcjogJ2V2YWx1YXRlJywgcmVhc29uOiAnQmFzaCBjb21tYW5kIG5vdCBzdGF0aWNhbGx5IGNsYXNzaWZpZWQnIH07XG59XG5cbi8vIOKUgOKUgCBSaXNrIEFzc2Vzc21lbnQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogQmFzZSByaXNrIHNjb3JlcyBieSBjbGFzc2lmaWNhdGlvbiBsZXZlbCAoMC0xMDAgc2NhbGUpLlxuICpcbiAqIFNjb3JlIHJhbmdlczpcbiAqIC0gIDA6ICAgICBzYWZlIOKAlCByZWFkLW9ubHkgdG9vbHMsIG5vIHNpZGUgZWZmZWN0c1xuICogLSAgMS0zOTogIGxvdyDigJQgbWlub3Igc2lkZSBlZmZlY3RzLCBlYXNpbHkgcmV2ZXJzaWJsZVxuICogLSA0MC01OTogIG1vZGVyYXRlIOKAlCBmaWxlIHdyaXRlcywgcGFja2FnZSBpbnN0YWxscywgdW5jbGFzc2lmaWVkIGNvbW1hbmRzXG4gKiAtIDYwLTc5OiAgZWxldmF0ZWQg4oCUIG1vZGVyYXRlICsgYWdncmF2YXRpbmcgZmFjdG9ycyAobmV0d29yaywgZmlsZSBjcmVhdGlvbilcbiAqIC0gODAtOTk6ICBkYW5nZXJvdXMg4oCUIGRlc3RydWN0aXZlIGNvbW1hbmRzLCBwcml2aWxlZ2UgZXNjYWxhdGlvblxuICogLSAxMDA6ICAgIGJsb2NrZWQg4oCUIGFsd2F5cyBkZW5pZWQgKGUuZy4sIHJldmVyc2Ugc2hlbGxzLCBkaXNrIHdpcGUpXG4gKlxuICogQWRqdXN0bWVudHMgYXBwbGllZCBvbiB0b3Agb2YgYmFzZTogaXJyZXZlcnNpYmxlIHBhdHRlcm4gKCsxMCksXG4gKiBuZXR3b3JrIG9wZXJhdGlvbiAoKzEwKSwgb3V0LW9mLXNjb3BlIHJlYWQgKCsxMCksIGZpbGUgY3JlYXRpb24gKCs1KS5cbiAqIFNjb3JlIGlzIGNhcHBlZCBhdCAxMDAuXG4gKi9cbmNvbnN0IFJJU0tfU0NPUkVTOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge1xuICBzYWZlOiAwLFxuICBtb2RlcmF0ZTogNDAsXG4gIGRhbmdlcm91czogODAsXG4gIGJsb2NrZWQ6IDEwMCxcbn07XG5cbi8qKiBSZWFkLW9ubHkgdG9vbHMgdGhhdCBtYXkgcmVmZXJlbmNlIGZpbGUgcGF0aHMgKi9cbmNvbnN0IFNBRkVfUkVBRF9UT09MUyA9IG5ldyBTZXQoWydSZWFkJywgJ0dyZXAnLCAnR2xvYiddKTtcblxuLyoqIFNlbnNpdGl2ZSBwYXRoIHByZWZpeGVzIHRoYXQgaW5kaWNhdGUgb3V0LW9mLXNjb3BlIHJlYWRzICovXG5jb25zdCBTRU5TSVRJVkVfUEFUSF9QUkVGSVhFUyA9IFtcbiAgJ34vLnNzaC8nLCAnfi8uZ251cGcvJywgJ34vLmF3cy8nLCAnfi8uY29uZmlnLycsXG4gICd+Ly5lbnYnLCAnfi8ubmV0cmMnLCAnfi8ubnBtcmMnLFxuICAnL2V0Yy9zaGFkb3cnLCAnL2V0Yy9wYXNzd2QnLCAnL2V0Yy9zdWRvZXJzJyxcbiAgJy9wcm9jLycsICcvc3lzLycsXG5dO1xuXG4vKipcbiAqIEhldXJpc3RpYzogZG9lcyBhIHBhdGggbG9vayBsaWtlIGl0IHRhcmdldHMgZmlsZXMgb3V0c2lkZSB0aGUgcHJvamVjdCBzY29wZT9cbiAqIENoZWNrcyBmb3IgaG9tZS1kaXJlY3Rvcnkgc2Vuc2l0aXZlIHBhdGhzLCBzeXN0ZW0gcGF0aHMsIGFuZCBwYXJlbnQgdHJhdmVyc2Fscy5cbiAqL1xuZnVuY3Rpb24gaXNPdXRPZlNjb3BlUGF0aCh0YXJnZXRQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHRhcmdldFBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXG4gIC8vIEV4cGxpY2l0IHNlbnNpdGl2ZSBwYXRoc1xuICBmb3IgKGNvbnN0IHByZWZpeCBvZiBTRU5TSVRJVkVfUEFUSF9QUkVGSVhFUykge1xuICAgIGlmIChub3JtYWxpemVkLnN0YXJ0c1dpdGgocHJlZml4KSB8fCBub3JtYWxpemVkLmluY2x1ZGVzKGAvJHtwcmVmaXh9YCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhvbWUgZGlyZWN0b3J5IHJlZmVyZW5jZXMgKH4vLi4uKSB0aGF0IGFyZW4ndCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdFxuICBpZiAobm9ybWFsaXplZC5zdGFydHNXaXRoKCd+LycpIHx8IG5vcm1hbGl6ZWQuc3RhcnRzV2l0aCgnL1VzZXJzLycpIHx8IG5vcm1hbGl6ZWQuc3RhcnRzV2l0aCgnL2hvbWUvJykpIHtcbiAgICAvLyBIZXVyaXN0aWM6IHJlYWRpbmcgc2Vuc2l0aXZlIGRvdGZpbGVzL2RpcnMgb3V0c2lkZSBhIHByb2plY3QuXG4gICAgLy8gVGFyZ2V0cyBrbm93biBjcmVkZW50aWFsL2NvbmZpZyBzdG9yZXMg4oCUIGF2b2lkcyBmYWxzZSBwb3NpdGl2ZXMgZm9yXG4gICAgLy8gY29tbW9uIHByb2plY3QgZG90ZmlsZXMgbGlrZSAuZ2l0aHViLywgLnZzY29kZS8sIC5lc2xpbnRyYywgZXRjLlxuICAgIGlmICgvXFwvXFwuKHNzaHxnbnVwZ3xhd3N8YXp1cmV8Z2Nsb3VkfGt1YmV8ZG9ja2VyfG5wbXJjfG5ldHJjfGVudnxiYXNoX2hpc3Rvcnl8enNoX2hpc3Rvcnl8Y3JlZGVudGlhbHN8cGFzc3dvcmR8c2VjcmV0KS9pLnRlc3Qobm9ybWFsaXplZCkpIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKiogQmFzaCBjb21tYW5kIHBhdHRlcm5zIHRoYXQgYXJlIGlycmV2ZXJzaWJsZSAqL1xuY29uc3QgSVJSRVZFUlNJQkxFX1BBVFRFUk5TID0gW1xuICAncm0gLXJmIConLFxuICAncm0gLWZyIConLFxuICAnZ2l0IHB1c2ggLS1mb3JjZSonLFxuICAnZ2l0IHB1c2ggLWYgKicsXG4gICdnaXQgcmVzZXQgLS1oYXJkKicsXG4gICdnaXQgY2xlYW4gLWYqJyxcbiAgJ21rZnMqJyxcbiAgJ2RkIGlmPSonLFxuICAnZHJvcCAqJyxcbiAgJ3RydW5jYXRlIConLFxuXTtcblxuLyoqXG4gKiBBc3Nlc3MgdGhlIHJpc2sgb2YgYSBDTEkgdG9vbCBjYWxsLlxuICpcbiAqIFJldHVybnMgYSBudW1lcmljIHNjb3JlICgwLTEwMCkgYW5kIGlycmV2ZXJzaWJpbGl0eSBpbmRpY2F0b3IgYmFzZWQgb25cbiAqIHRoZSBzdGF0aWMgY2xhc3NpZmljYXRpb24gYW5kIHRvb2wtc3BlY2lmaWMgaGV1cmlzdGljcy5cbiAqXG4gKiBAcGFyYW0gdG9vbE5hbWUgLSBUaGUgdG9vbCBiZWluZyBjYWxsZWRcbiAqIEBwYXJhbSB0b29sSW5wdXQgLSBUaGUgdG9vbCBpbnB1dCBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gY2xhc3NpZmljYXRpb24gLSBUaGUgcmVzdWx0IGZyb20gY2xhc3NpZnlUb29sKClcbiAqIEByZXR1cm5zIFJpc2sgYXNzZXNzbWVudCB3aXRoIHNjb3JlLCBpcnJldmVyc2liaWxpdHksIGFuZCBjb250cmlidXRpbmcgZmFjdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXNzUmlzayhcbiAgdG9vbE5hbWU6IHN0cmluZyxcbiAgdG9vbElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgY2xhc3NpZmljYXRpb246IFRvb2xDbGFzc2lmaWNhdGlvblJlc3VsdFxuKTogUmlza0Fzc2Vzc21lbnQge1xuICBsZXQgc2NvcmUgPSBSSVNLX1NDT1JFU1tjbGFzc2lmaWNhdGlvbi5yaXNrTGV2ZWxdID8/IDQwO1xuICBjb25zdCBmYWN0b3JzOiBzdHJpbmdbXSA9IFtgQmFzZTogJHtjbGFzc2lmaWNhdGlvbi5yaXNrTGV2ZWx9ICgke1JJU0tfU0NPUkVTW2NsYXNzaWZpY2F0aW9uLnJpc2tMZXZlbF0gPz8gNDB9KWBdO1xuICBsZXQgaXJyZXZlcnNpYmxlID0gZmFsc2U7XG5cbiAgLy8gQ2hlY2sgZm9yIGlycmV2ZXJzaWJsZSBwYXR0ZXJucyBpbiBCYXNoIGNvbW1hbmRzXG4gIGlmICh0b29sTmFtZSA9PT0gJ0Jhc2gnICYmIHR5cGVvZiB0b29sSW5wdXQuY29tbWFuZCA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBjb21tYW5kID0gdG9vbElucHV0LmNvbW1hbmQudHJpbSgpO1xuICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBJUlJFVkVSU0lCTEVfUEFUVEVSTlMpIHtcbiAgICAgIGlmIChtYXRjaGVzUGF0dGVybihjb21tYW5kLCBwYXR0ZXJuKSkge1xuICAgICAgICBpcnJldmVyc2libGUgPSB0cnVlO1xuICAgICAgICBzY29yZSA9IE1hdGgubWluKDEwMCwgc2NvcmUgKyAxMCk7XG4gICAgICAgIGZhY3RvcnMucHVzaChgSXJyZXZlcnNpYmxlIHBhdHRlcm46ICR7cGF0dGVybn0gKCsxMClgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTmV0d29yayBvcGVyYXRpb25zIGluY3JlYXNlIHJpc2tcbiAgICBpZiAoL1xcYihjdXJsfHdnZXR8ZmV0Y2h8bmN8bmV0Y2F0fG5jYXR8c29jYXQpXFxiLy50ZXN0KGNvbW1hbmQpKSB7XG4gICAgICBzY29yZSA9IE1hdGgubWluKDEwMCwgc2NvcmUgKyAxMCk7XG4gICAgICBmYWN0b3JzLnB1c2goJ05ldHdvcmsgb3BlcmF0aW9uICgrMTApJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gV3JpdGUvRWRpdCBvcGVyYXRpb25zOiBmaWxlIGNyZWF0aW9uIGluY3JlYXNlcyByaXNrIHNsaWdodGx5XG4gIGlmICh0b29sTmFtZSA9PT0gJ1dyaXRlJykge1xuICAgIHNjb3JlID0gTWF0aC5taW4oMTAwLCBzY29yZSArIDUpO1xuICAgIGZhY3RvcnMucHVzaCgnRmlsZSBjcmVhdGlvbiAoKzUpJyk7XG4gIH1cblxuICAvLyBSZWFkLW9ubHkgdG9vbHMgdGFyZ2V0aW5nIHBhdGhzIG91dHNpZGUgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LlxuICAvLyBNb3N0IGNsaWVudHMgYWxyZWFkeSBlbmZvcmNlIGRpcmVjdG9yeSBzY29waW5nLCBidXQgdGhpcyBwcm92aWRlcyBhblxuICAvLyBhZGRpdGlvbmFsIHNpZ25hbCBmb3IgYXBwcm92YWwgcG9saWNpZXMgdG8gYWN0IG9uLlxuICBpZiAoU0FGRV9SRUFEX1RPT0xTLmhhcyh0b29sTmFtZSkpIHtcbiAgICBjb25zdCB0YXJnZXRQYXRoID0gKHRvb2xJbnB1dC5maWxlX3BhdGggPz8gdG9vbElucHV0LnBhdGggPz8gJycpIGFzIHN0cmluZztcbiAgICBpZiAodGFyZ2V0UGF0aCAmJiBpc091dE9mU2NvcGVQYXRoKHRhcmdldFBhdGgpKSB7XG4gICAgICBzY29yZSA9IE1hdGgubWluKDEwMCwgc2NvcmUgKyAxMCk7XG4gICAgICBmYWN0b3JzLnB1c2goJ091dC1vZi1zY29wZSByZWFkIHBhdGggKCsxMCknKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBzY29yZSwgaXJyZXZlcnNpYmxlLCBmYWN0b3JzIH07XG59XG5cbi8vIOKUgOKUgCBTdGF0aWMgUG9saWN5IERhdGEgRXhwb3J0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFJldHVybiBhbGwgc3RhdGljIGNsYXNzaWZpY2F0aW9uIGRhdGEgZm9yIGJyaWRnZSBwb2xpY3kgZXhwb3J0LlxuICpcbiAqIFVzZWQgYnkgUG9saWN5RXhwb3J0U2VydmljZSB0byB3cml0ZSB0aGUgYnJpZGdlLWNvbXBhdGlibGUgcG9saWN5IGZpbGUuXG4gKiBBbGwgZGF0YSBpcyByZXR1cm5lZCBhcyBwbGFpbiBhcnJheXMvb2JqZWN0cyAobm8gU2V0cykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGF0aWNQb2xpY3lEYXRhKCkge1xuICByZXR1cm4ge1xuICAgIHNhZmVfdG9vbHM6IFsuLi5TQUZFX1RPT0xTXSxcbiAgICBzYWZlX2Jhc2hfcGF0dGVybnM6IFsuLi5TQUZFX0JBU0hfUEFUVEVSTlNdLFxuICAgIGRhbmdlcm91c19iYXNoX3BhdHRlcm5zOiBbLi4uREFOR0VST1VTX0JBU0hfUEFUVEVSTlNdLFxuICAgIGJsb2NrZWRfYmFzaF9wYXR0ZXJuczogWy4uLkJMT0NLRURfQkFTSF9QQVRURVJOU10sXG4gICAgaXJyZXZlcnNpYmxlX3BhdHRlcm5zOiBbLi4uSVJSRVZFUlNJQkxFX1BBVFRFUk5TXSxcbiAgICBzZW5zaXRpdmVfcGF0aF9wcmVmaXhlczogWy4uLlNFTlNJVElWRV9QQVRIX1BSRUZJWEVTXSxcbiAgICBnYXRla2VlcGVyX2Vzc2VudGlhbF9vcGVyYXRpb25zOiBbLi4uR0FURUtFRVBFUl9FU1NFTlRJQUxfT1BFUkFUSU9OU10sXG4gICAgc2FmZV9tY3Bfb3BlcmF0aW9uczogWy4uLlNBRkVfTUNQX09QRVJBVElPTlNdLFxuICAgIHJpc2tfc2NvcmVzOiB7IC4uLlJJU0tfU0NPUkVTIH0sXG4gIH07XG59XG5cbi8vIOKUgOKUgCBFbGVtZW50IFBvbGljeSBFdmFsdWF0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIEV2YWx1YXRlIGEgQ0xJIHRvb2wgY2FsbCBhZ2FpbnN0IGFjdGl2ZSBlbGVtZW50IGdhdGVrZWVwZXIgcG9saWNpZXMuXG4gKlxuICogRm91ci1zdGVwIGV2YWx1YXRpb24gcGVyIGVsZW1lbnQgKElzc3VlICM2MjUgUGhhc2UgMiwgSXNzdWUgIzE2NjApOlxuICogMS4gZGVueVBhdHRlcm5zIChoaWdoZXN0IHByaW9yaXR5KSDigJQgZmlyc3QgbWF0Y2ggPSBpbW1lZGlhdGUgZGVueVxuICogMS41LiBjb25maXJtUGF0dGVybnMg4oCUIGZpcnN0IG1hdGNoID0gaW1tZWRpYXRlIGNvbmZpcm0gKHJlcXVpcmVzIGFwcHJvdmFsKVxuICogMi4gYWxsb3dQYXR0ZXJucyDigJQgaWYgZWxlbWVudCBkZWZpbmVzIHRoZW0sIHJlY29yZCB3aGV0aGVyIHRvb2wgbWF0Y2hlZFxuICogMy4gQWZ0ZXIgYWxsIGVsZW1lbnRzOiBpZiBhbnkgaGFkIGFsbG93UGF0dGVybnMgYnV0IHRvb2wgd2Fzbid0IGFsbG93ZWQgYnkgYW55ID0gZGVueVxuICpcbiAqIFVuaW9uIHNlbWFudGljczogdG9vbCBtdXN0IG1hdGNoIGF0IGxlYXN0IE9ORSBlbGVtZW50J3MgYWxsb3dQYXR0ZXJucyAobm90IGFsbCkuXG4gKiBFbGVtZW50cyB3aXRob3V0IGFsbG93UGF0dGVybnMgZG9uJ3QgcmVzdHJpY3QuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRvb2wgbWF0Y2hlcyBhbGxvd1BhdHRlcm5zIGluIGVsZW1lbnQgQSBidXQgbm90IEIg4oaSIEFMTE9XRUQgKHVuaW9uIHNlbWFudGljcylcbiAqIC8vIFRvb2wgbWF0Y2hlcyBkZW55UGF0dGVybnMgaW4gYW55IGVsZW1lbnQg4oaSIERFTklFRCAoZGVueSBhbHdheXMgd2lucylcbiAqIC8vIFRvb2wgbWF0Y2hlcyBubyBhbGxvd1BhdHRlcm5zIGJ1dCBzb21lIGV4aXN0IOKGkiBERU5JRUQgKFwibm90IGluIGFueSBhbGxvd2xpc3RcIilcbiAqIC8vIE5vIGFsbG93UGF0dGVybnMgZGVmaW5lZCBhbnl3aGVyZSDihpIgUGhhc2UgMSBiZWhhdmlvciAoZmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQpXG4gKlxuICogQHJldHVybnMgJ2RlbnknIGlmIGJsb2NrZWQsICdldmFsdWF0ZScgaWYgcGVybWl0dGVkIHRvIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmFsdWF0ZUNsaVRvb2xQb2xpY3koXG4gIHRvb2xOYW1lOiBzdHJpbmcsXG4gIHRvb2xJbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGFjdGl2ZUVsZW1lbnRzOiBBY3RpdmVFbGVtZW50W11cbik6IENsaVRvb2xQb2xpY3lSZXN1bHQge1xuICBjb25zdCBldmFsdWF0ZWRFbGVtZW50czogUG9saWN5RXZhbHVhdGlvbkNvbnRleHRbJ2V2YWx1YXRlZEVsZW1lbnRzJ10gPSBbXTtcbiAgY29uc3QgZGVjaXNpb25DaGFpbjogc3RyaW5nW10gPSBbXTtcblxuICBjb25zdCBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcblxuICBpZiAoIWFjdGl2ZUVsZW1lbnRzLmxlbmd0aCkge1xuICAgIGRlY2lzaW9uQ2hhaW4ucHVzaCgnTm8gYWN0aXZlIGVsZW1lbnRzIOKAlCBmYWxsIHRocm91Z2ggdG8gZGVmYXVsdCcpO1xuICAgIGxvZ2dlci5kZWJ1ZyhgW0NsaVBvbGljeV0gJHt0b29sTmFtZX06IG5vIGFjdGl2ZSBlbGVtZW50cywgZmFsbCB0aHJvdWdoIHRvIGRlZmF1bHRgKTtcbiAgICByZXR1cm4ge1xuICAgICAgYmVoYXZpb3I6ICdldmFsdWF0ZScsXG4gICAgICBwb2xpY3lDb250ZXh0OiB7IGV2YWx1YXRlZEVsZW1lbnRzLCBkZWNpc2lvbkNoYWluIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIEJ1aWxkIHRoZSBzdHJpbmdzIHRvIG1hdGNoIGFnYWluc3QgcGF0dGVybnNcbiAgY29uc3QgbWF0Y2hUYXJnZXRzID0gYnVpbGRNYXRjaFRhcmdldHModG9vbE5hbWUsIHRvb2xJbnB1dCk7XG4gIGNvbnN0IGVsZW1lbnRUeXBlU3VtbWFyeSA9IHN1bW1hcml6ZUVsZW1lbnRUeXBlcyhhY3RpdmVFbGVtZW50cyk7XG4gIGxvZ2dlci5kZWJ1ZyhgW0NsaVBvbGljeV0gRXZhbHVhdGluZyAke3Rvb2xOYW1lfSBhZ2FpbnN0ICR7YWN0aXZlRWxlbWVudHMubGVuZ3RofSBlbGVtZW50cyAoJHtlbGVtZW50VHlwZVN1bW1hcnl9KSwgbWF0Y2hUYXJnZXRzOiBbJHttYXRjaFRhcmdldHMuam9pbignLCAnKX1dYCk7XG5cbiAgbGV0IGFueUVsZW1lbnRIYXNBbGxvd1BhdHRlcm5zID0gZmFsc2U7XG4gIGxldCB0b29sQWxsb3dlZEJ5QW55RWxlbWVudCA9IGZhbHNlO1xuICBjb25zdCBlbGVtZW50c1dpdGhBbGxvd1BhdHRlcm5zOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBhY3RpdmVFbGVtZW50cykge1xuICAgIGNvbnN0IHJlc3RyaWN0aW9ucyA9IGVsZW1lbnQubWV0YWRhdGE/LmdhdGVrZWVwZXI/LmV4dGVybmFsUmVzdHJpY3Rpb25zO1xuICAgIGNvbnN0IGRlbnlQYXR0ZXJucyA9IHJlc3RyaWN0aW9ucz8uZGVueVBhdHRlcm5zO1xuICAgIGNvbnN0IGNvbmZpcm1QYXR0ZXJucyA9IHJlc3RyaWN0aW9ucz8uY29uZmlybVBhdHRlcm5zO1xuICAgIGNvbnN0IGFsbG93UGF0dGVybnMgPSByZXN0cmljdGlvbnM/LmFsbG93UGF0dGVybnM7XG5cbiAgICBjb25zdCBoYXNSZXN0cmljdGlvbnMgPSAoQXJyYXkuaXNBcnJheShkZW55UGF0dGVybnMpICYmIGRlbnlQYXR0ZXJucy5sZW5ndGggPiAwKVxuICAgICAgfHwgKEFycmF5LmlzQXJyYXkoY29uZmlybVBhdHRlcm5zKSAmJiBjb25maXJtUGF0dGVybnMubGVuZ3RoID4gMClcbiAgICAgIHx8IChBcnJheS5pc0FycmF5KGFsbG93UGF0dGVybnMpICYmIGFsbG93UGF0dGVybnMubGVuZ3RoID4gMCk7XG5cbiAgICBpZiAoIWhhc1Jlc3RyaWN0aW9ucykge1xuICAgICAgZXZhbHVhdGVkRWxlbWVudHMucHVzaCh7IHR5cGU6IGVsZW1lbnQudHlwZSwgbmFtZTogZWxlbWVudC5uYW1lIH0pO1xuICAgICAgZGVjaXNpb25DaGFpbi5wdXNoKGAke2VsZW1lbnQudHlwZX0gJyR7ZWxlbWVudC5uYW1lfSc6IG5vIGV4dGVybmFsUmVzdHJpY3Rpb25zYCk7XG4gICAgICBsb2dnZXIuZGVidWcoYFtDbGlQb2xpY3ldICR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9Jzogbm8gZXh0ZXJuYWxSZXN0cmljdGlvbnMsIHNraXBwaW5nYCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoYFtDbGlQb2xpY3ldICR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9JzogZXZhbHVhdGluZyAoZGVueTogJHtBcnJheS5pc0FycmF5KGRlbnlQYXR0ZXJucykgPyBkZW55UGF0dGVybnMubGVuZ3RoIDogMH0sIGNvbmZpcm06ICR7QXJyYXkuaXNBcnJheShjb25maXJtUGF0dGVybnMpID8gY29uZmlybVBhdHRlcm5zLmxlbmd0aCA6IDB9LCBhbGxvdzogJHtBcnJheS5pc0FycmF5KGFsbG93UGF0dGVybnMpID8gYWxsb3dQYXR0ZXJucy5sZW5ndGggOiAwfSBwYXR0ZXJucylgKTtcblxuICAgIC8vIFN0ZXAgMTogQ2hlY2sgZGVueVBhdHRlcm5zIChoaWdoZXN0IHByaW9yaXR5KVxuICAgIGlmIChBcnJheS5pc0FycmF5KGRlbnlQYXR0ZXJucykpIHtcbiAgICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBkZW55UGF0dGVybnMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXR0ZXJuICE9PSAnc3RyaW5nJykgY29udGludWU7XG4gICAgICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIG1hdGNoVGFyZ2V0cykge1xuICAgICAgICAgIGlmIChtYXRjaGVzUGF0dGVybih0YXJnZXQsIHBhdHRlcm4pKSB7XG4gICAgICAgICAgICBldmFsdWF0ZWRFbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgdHlwZTogZWxlbWVudC50eXBlLFxuICAgICAgICAgICAgICBuYW1lOiBlbGVtZW50Lm5hbWUsXG4gICAgICAgICAgICAgIG1hdGNoZWQ6ICdkZW55UGF0dGVybnMnLFxuICAgICAgICAgICAgICBtYXRjaGVkUGF0dGVybjogcGF0dGVybixcbiAgICAgICAgICAgICAgbWF0Y2hlZFRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkZWNpc2lvbkNoYWluLnB1c2goYERFTlk6ICR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9JyBkZW55UGF0dGVybiAnJHtwYXR0ZXJufScgbWF0Y2hlcyAnJHt0YXJnZXR9J2ApO1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQ2xpUG9saWN5XSBERU5ZOiAke2VsZW1lbnQudHlwZX0gJyR7ZWxlbWVudC5uYW1lfScgZGVueVBhdHRlcm4gJyR7cGF0dGVybn0nIG1hdGNoZWQgJyR7dGFyZ2V0fScgKCR7ZWxhcHNlZChzdGFydFRpbWUpfSlgKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGJlaGF2aW9yOiAnZGVueScsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBEZW5pZWQgYnkgJHtlbGVtZW50LnR5cGV9ICcke2VsZW1lbnQubmFtZX0nIHBvbGljeTogcGF0dGVybiAnJHtwYXR0ZXJufScgbWF0Y2hlcyAnJHt0YXJnZXR9J2AsXG4gICAgICAgICAgICAgIHBvbGljeUNvbnRleHQ6IHsgZXZhbHVhdGVkRWxlbWVudHMsIGRlY2lzaW9uQ2hhaW4gfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3RlcCAxLjU6IENoZWNrIGNvbmZpcm1QYXR0ZXJucyAocmVxdWlyZXMgYXBwcm92YWwg4oCUIElzc3VlICMxNjYwKVxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbmZpcm1QYXR0ZXJucykgJiYgY29uZmlybVBhdHRlcm5zLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBjb25maXJtUGF0dGVybnMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXR0ZXJuICE9PSAnc3RyaW5nJykgY29udGludWU7XG4gICAgICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIG1hdGNoVGFyZ2V0cykge1xuICAgICAgICAgIGlmIChtYXRjaGVzUGF0dGVybih0YXJnZXQsIHBhdHRlcm4pKSB7XG4gICAgICAgICAgICBldmFsdWF0ZWRFbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgdHlwZTogZWxlbWVudC50eXBlLFxuICAgICAgICAgICAgICBuYW1lOiBlbGVtZW50Lm5hbWUsXG4gICAgICAgICAgICAgIG1hdGNoZWQ6ICdjb25maXJtUGF0dGVybnMnLFxuICAgICAgICAgICAgICBtYXRjaGVkUGF0dGVybjogcGF0dGVybixcbiAgICAgICAgICAgICAgbWF0Y2hlZFRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkZWNpc2lvbkNoYWluLnB1c2goYENPTkZJUk06ICR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9JyBjb25maXJtUGF0dGVybiAnJHtwYXR0ZXJufScgbWF0Y2hlcyAnJHt0YXJnZXR9J2ApO1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQ2xpUG9saWN5XSBDT05GSVJNOiAke2VsZW1lbnQudHlwZX0gJyR7ZWxlbWVudC5uYW1lfScgY29uZmlybVBhdHRlcm4gJyR7cGF0dGVybn0nIG1hdGNoZWQgJyR7dGFyZ2V0fScgKCR7ZWxhcHNlZChzdGFydFRpbWUpfSlgKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGJlaGF2aW9yOiAnY29uZmlybScgYXMgY29uc3QsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBSZXF1aXJlcyBhcHByb3ZhbDogJHtlbGVtZW50LnR5cGV9ICcke2VsZW1lbnQubmFtZX0nIHBvbGljeSByZXF1aXJlcyBjb25maXJtYXRpb24gZm9yIHBhdHRlcm4gJyR7cGF0dGVybn0nYCxcbiAgICAgICAgICAgICAgY29uZmlybVNvdXJjZTogYCR7ZWxlbWVudC50eXBlfToke2VsZW1lbnQubmFtZX1gLFxuICAgICAgICAgICAgICBwb2xpY3lDb250ZXh0OiB7IGV2YWx1YXRlZEVsZW1lbnRzLCBkZWNpc2lvbkNoYWluIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFN0ZXAgMjogQ2hlY2sgYWxsb3dQYXR0ZXJuc1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFsbG93UGF0dGVybnMpICYmIGFsbG93UGF0dGVybnMubGVuZ3RoID4gMCkge1xuICAgICAgYW55RWxlbWVudEhhc0FsbG93UGF0dGVybnMgPSB0cnVlO1xuICAgICAgZWxlbWVudHNXaXRoQWxsb3dQYXR0ZXJucy5wdXNoKGAke2VsZW1lbnQudHlwZX0gJyR7ZWxlbWVudC5uYW1lfSdgKTtcbiAgICAgIGxldCBtYXRjaGVkQWxsb3cgPSBmYWxzZTtcblxuICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIGFsbG93UGF0dGVybnMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXR0ZXJuICE9PSAnc3RyaW5nJykgY29udGludWU7XG4gICAgICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIG1hdGNoVGFyZ2V0cykge1xuICAgICAgICAgIGlmIChtYXRjaGVzUGF0dGVybih0YXJnZXQsIHBhdHRlcm4pKSB7XG4gICAgICAgICAgICBldmFsdWF0ZWRFbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgdHlwZTogZWxlbWVudC50eXBlLFxuICAgICAgICAgICAgICBuYW1lOiBlbGVtZW50Lm5hbWUsXG4gICAgICAgICAgICAgIG1hdGNoZWQ6ICdhbGxvd1BhdHRlcm5zJyxcbiAgICAgICAgICAgICAgbWF0Y2hlZFBhdHRlcm46IHBhdHRlcm4sXG4gICAgICAgICAgICAgIG1hdGNoZWRUYXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGVjaXNpb25DaGFpbi5wdXNoKGAke2VsZW1lbnQudHlwZX0gJyR7ZWxlbWVudC5uYW1lfSc6IGFsbG93UGF0dGVybiAnJHtwYXR0ZXJufScgbWF0Y2hlcyAnJHt0YXJnZXR9J2ApO1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQ2xpUG9saWN5XSBBTExPVzogJHtlbGVtZW50LnR5cGV9ICcke2VsZW1lbnQubmFtZX0nIGFsbG93UGF0dGVybiAnJHtwYXR0ZXJufScgbWF0Y2hlZCAnJHt0YXJnZXR9J2ApO1xuICAgICAgICAgICAgdG9vbEFsbG93ZWRCeUFueUVsZW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgbWF0Y2hlZEFsbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hlZEFsbG93KSBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKCFtYXRjaGVkQWxsb3cpIHtcbiAgICAgICAgZXZhbHVhdGVkRWxlbWVudHMucHVzaCh7IHR5cGU6IGVsZW1lbnQudHlwZSwgbmFtZTogZWxlbWVudC5uYW1lIH0pO1xuICAgICAgICBkZWNpc2lvbkNoYWluLnB1c2goYCR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9JzogYWxsb3dQYXR0ZXJucyBkZWZpbmVkIGJ1dCBubyBtYXRjaGApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBldmFsdWF0ZWRFbGVtZW50cy5wdXNoKHsgdHlwZTogZWxlbWVudC50eXBlLCBuYW1lOiBlbGVtZW50Lm5hbWUgfSk7XG4gICAgICBkZWNpc2lvbkNoYWluLnB1c2goYCR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9JzogZGVueVBhdHRlcm5zIGNoZWNrZWQsIG5vIG1hdGNoYCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU3RlcCAzOiBJZiBhbnkgZWxlbWVudCBoYWQgYWxsb3dQYXR0ZXJucywgdG9vbCBtdXN0IGhhdmUgbWF0Y2hlZCBhdCBsZWFzdCBvbmVcbiAgaWYgKGFueUVsZW1lbnRIYXNBbGxvd1BhdHRlcm5zICYmICF0b29sQWxsb3dlZEJ5QW55RWxlbWVudCkge1xuICAgIGNvbnN0IHJlc3RyaWN0b3JzID0gZWxlbWVudHNXaXRoQWxsb3dQYXR0ZXJucy5qb2luKCcsICcpO1xuICAgIGRlY2lzaW9uQ2hhaW4ucHVzaChgREVOWTogdG9vbCBub3QgaW4gYW55IGVsZW1lbnQgYWxsb3dsaXN0IChyZXN0cmljdGVkIGJ5OiAke3Jlc3RyaWN0b3JzfSlgKTtcbiAgICBsb2dnZXIuZGVidWcoYFtDbGlQb2xpY3ldIERFTlk6ICR7dG9vbE5hbWV9IG5vdCBpbiBhbnkgYWxsb3dsaXN0IChyZXN0cmljdGVkIGJ5OiAke3Jlc3RyaWN0b3JzfSkgKCR7ZWxhcHNlZChzdGFydFRpbWUpfSlgKTtcbiAgICByZXR1cm4ge1xuICAgICAgYmVoYXZpb3I6ICdkZW55JyxcbiAgICAgIG1lc3NhZ2U6IGBUb29sICcke3Rvb2xOYW1lfScgbm90IHBlcm1pdHRlZCBieSBhbGxvd2xpc3RzIGRlZmluZWQgaW46ICR7cmVzdHJpY3RvcnN9LiBFaXRoZXIgZGVhY3RpdmF0ZSB0aGVzZSBlbGVtZW50cyBvciBhZGQgYWxsb3dQYXR0ZXJucyB0byBtYXRjaCB0aGlzIHRvb2wuYCxcbiAgICAgIHBvbGljeUNvbnRleHQ6IHsgZXZhbHVhdGVkRWxlbWVudHMsIGRlY2lzaW9uQ2hhaW4gfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGFueUVsZW1lbnRIYXNBbGxvd1BhdHRlcm5zKSB7XG4gICAgZGVjaXNpb25DaGFpbi5wdXNoKCdUb29sIG1hdGNoZWQgYWxsb3dsaXN0IOKAlCBmYWxsIHRocm91Z2ggdG8gZGVmYXVsdCcpO1xuICAgIGxvZ2dlci5kZWJ1ZyhgW0NsaVBvbGljeV0gJHt0b29sTmFtZX06IG1hdGNoZWQgYWxsb3dsaXN0LCBmYWxsIHRocm91Z2ggdG8gZGVmYXVsdCAoJHtlbGFwc2VkKHN0YXJ0VGltZSl9KWApO1xuICB9IGVsc2Uge1xuICAgIGRlY2lzaW9uQ2hhaW4ucHVzaCgnTm8gYWxsb3dQYXR0ZXJucyBkZWZpbmVkIOKAlCBmYWxsIHRocm91Z2ggdG8gZGVmYXVsdCAoUGhhc2UgMSBiZWhhdmlvciknKTtcbiAgICBsb2dnZXIuZGVidWcoYFtDbGlQb2xpY3ldICR7dG9vbE5hbWV9OiBubyBhbGxvd1BhdHRlcm5zIGRlZmluZWQsIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0ICgke2VsYXBzZWQoc3RhcnRUaW1lKX0pYCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGJlaGF2aW9yOiAnZXZhbHVhdGUnLFxuICAgIHBvbGljeUNvbnRleHQ6IHsgZXZhbHVhdGVkRWxlbWVudHMsIGRlY2lzaW9uQ2hhaW4gfSxcbiAgfTtcbn1cblxuLyoqIEZvcm1hdCBlbGFwc2VkIHRpbWUgc2luY2Ugc3RhcnRUaW1lIGluIG1pbGxpc2Vjb25kcy4gKi9cbmZ1bmN0aW9uIGVsYXBzZWQoc3RhcnRUaW1lOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7KHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lKS50b0ZpeGVkKDIpfW1zYDtcbn1cblxuLyoqIFN1bW1hcml6ZSBhY3RpdmUgZWxlbWVudCB0eXBlcyBmb3IgdGhlIGVudHJ5IGxvZyAoZS5nLiwgXCIzIHBlcnNvbmFzLCAyIHNraWxscywgMSBlbnNlbWJsZVwiKS4gKi9cbmZ1bmN0aW9uIHN1bW1hcml6ZUVsZW1lbnRUeXBlcyhlbGVtZW50czogQWN0aXZlRWxlbWVudFtdKTogc3RyaW5nIHtcbiAgY29uc3QgY291bnRzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgZm9yIChjb25zdCBlbCBvZiBlbGVtZW50cykge1xuICAgIGNvdW50cy5zZXQoZWwudHlwZSwgKGNvdW50cy5nZXQoZWwudHlwZSkgPz8gMCkgKyAxKTtcbiAgfVxuICByZXR1cm4gWy4uLmNvdW50cy5lbnRyaWVzKCldLm1hcCgoW3R5cGUsIGNvdW50XSkgPT4gYCR7Y291bnR9ICR7dHlwZX0ke2NvdW50ID4gMSA/ICdzJyA6ICcnfWApLmpvaW4oJywgJyk7XG59XG5cbi8qKlxuICogTWF4aW11bSBpbnB1dCBsZW5ndGggZm9yIHBhdHRlcm4gbWF0Y2hpbmcgdGFyZ2V0cy5cbiAqIFRydW5jYXRlcyBsb25nIGNvbW1hbmRzL3BhdGhzIHRvIHByZXZlbnQgRG9TIHZpYSBwYXRob2xvZ2ljYWwgZ2xvYiBtYXRjaGluZy5cbiAqL1xuY29uc3QgTUFYX01BVENIX0lOUFVUX0xFTkdUSCA9IDEwMDA7XG5cbi8qKlxuICogU3RyaXAgbnVsbCBieXRlcywgY29udHJvbCBjaGFyYWN0ZXJzLCBhbmQgbm9ybWFsaXplIFVuaWNvZGUgZm9yIG1hdGNoIGlucHV0LlxuICogUHJlc2VydmVzIHRhYiAoXFx4MDkpLCBuZXdsaW5lIChcXHgwQSksIGNhcnJpYWdlIHJldHVybiAoXFx4MEQpLlxuICogUHJldmVudHMgcGF0dGVybiBieXBhc3MgdmlhIGluamVjdGVkIGNvbnRyb2wgY2hhcmFjdGVycyBvciBVbmljb2RlXG4gKiBub3JtYWxpemF0aW9uIGF0dGFja3MgKGUuZy4sIGNvbWJpbmluZyBjaGFyYWN0ZXJzIHRoYXQgbG9vayBsaWtlIEFTQ0lJKS5cbiAqL1xuZnVuY3Rpb24gc2FuaXRpemVNYXRjaElucHV0KGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBOb3JtYWxpemUgVW5pY29kZSB0byBORkMgKGNhbm9uaWNhbCBkZWNvbXBvc2l0aW9uIHRoZW4gY29tcG9zaXRpb24pLlxuICAvLyBUaGlzIHByZXZlbnRzIGJ5cGFzcyB2aWEgY29tYmluaW5nIGNoYXJhY3RlcnMgb3IgYWx0ZXJuYXRpdmUgcmVwcmVzZW50YXRpb25zLlxuICBjb25zdCBub3JtYWxpemVkID0gaW5wdXQubm9ybWFsaXplKCdORkMnKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgcmV0dXJuIG5vcm1hbGl6ZWQucmVwbGFjZSgvW1xceDAwLVxceDA4XFx4MEJcXHgwQ1xceDBFLVxceDFGXFx4N0YtXFx4OUZdL2csICcnKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBtYXRjaCB0YXJnZXQgc3RyaW5ncyBmb3IgYSB0b29sIGNhbGwuXG4gKlxuICogRm9yIEJhc2g6IG1hdGNoZXMgYWdhaW5zdCB0aGUgdG9vbCBuYW1lIGFuZCBcIkJhc2g6PGNvbW1hbmQ+XCJcbiAqIEZvciBFZGl0L1dyaXRlOiBtYXRjaGVzIGFnYWluc3QgdGhlIHRvb2wgbmFtZSBhbmQgXCJFZGl0OjxmaWxlX3BhdGg+XCJcbiAqIEZvciBNQ1AgdG9vbHM6IG1hdGNoZXMgYWdhaW5zdCB0aGUgZnVsbCB0b29sIG5hbWVcbiAqXG4gKiBJbnB1dHMgYXJlIHRydW5jYXRlZCB0byBNQVhfTUFUQ0hfSU5QVVRfTEVOR1RIIGFuZCBzYW5pdGl6ZWQgdG8gcHJldmVudFxuICogRG9TIHZpYSBwYXRob2xvZ2ljYWwgZ2xvYiBtYXRjaGluZyBhbmQgcGF0dGVybiBieXBhc3MgdmlhIGNvbnRyb2wgY2hhcnMuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkTWF0Y2hUYXJnZXRzKFxuICB0b29sTmFtZTogc3RyaW5nLFxuICB0b29sSW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHRhcmdldHMgPSBbdG9vbE5hbWVdO1xuXG4gIGlmICh0b29sTmFtZSA9PT0gJ0Jhc2gnICYmIHR5cGVvZiB0b29sSW5wdXQuY29tbWFuZCA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBzYW5pdGl6ZWQgPSBzYW5pdGl6ZU1hdGNoSW5wdXQodG9vbElucHV0LmNvbW1hbmQuc2xpY2UoMCwgTUFYX01BVENIX0lOUFVUX0xFTkdUSCkpO1xuICAgIHRhcmdldHMucHVzaChgQmFzaDoke3Nhbml0aXplZH1gKTtcbiAgfSBlbHNlIGlmICgodG9vbE5hbWUgPT09ICdFZGl0JyB8fCB0b29sTmFtZSA9PT0gJ1dyaXRlJykgJiYgdHlwZW9mIHRvb2xJbnB1dC5maWxlX3BhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3Qgc2FuaXRpemVkID0gc2FuaXRpemVNYXRjaElucHV0KHRvb2xJbnB1dC5maWxlX3BhdGguc2xpY2UoMCwgTUFYX01BVENIX0lOUFVUX0xFTkdUSCkpO1xuICAgIHRhcmdldHMucHVzaChgJHt0b29sTmFtZX06JHtzYW5pdGl6ZWR9YCk7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0cztcbn1cbiJdfQ==
|
|
669
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVG9vbENsYXNzaWZpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2hhbmRsZXJzL21jcC1hcWwvcG9saWNpZXMvVG9vbENsYXNzaWZpY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBaUNsRCx3RUFBd0U7QUFFeEU7Ozs7Ozs7R0FPRztBQUNILE1BQU0sK0JBQStCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDOUMsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIsbUJBQW1CO0lBQ25CLFlBQVk7SUFDWixxQkFBcUI7SUFDckIscUJBQXFCO0lBQ3JCLG1CQUFtQjtJQUNuQix3QkFBd0IsRUFBUSxxQkFBcUI7SUFDckQsMkJBQTJCLEVBQUsscUJBQXFCO0NBQ3RELENBQUMsQ0FBQztBQUVIOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxDQUFDO0lBQ2xDLGVBQWU7SUFDZixhQUFhO0lBQ2IscUJBQXFCO0lBQ3JCLGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIscUJBQXFCO0lBQ3JCLGtCQUFrQjtJQUNsQixRQUFRO0lBQ1IsZ0JBQWdCO0lBQ2hCLFlBQVk7SUFDWixxQkFBcUI7SUFDckIsbUJBQW1CO0lBQ25CLG1CQUFtQjtJQUNuQixtQkFBbUI7SUFDbkIsNEJBQTRCO0lBQzVCLHdCQUF3QjtJQUN4Qiw2QkFBNkI7SUFDN0Isa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIsWUFBWTtJQUNaLG1CQUFtQjtJQUNuQixxQkFBcUI7SUFDckIsa0JBQWtCO0lBQ2xCLGdCQUFnQjtJQUNoQix5QkFBeUI7SUFDekIsWUFBWTtJQUNaLGVBQWU7SUFDZix1QkFBdUI7SUFDdkIsMkJBQTJCO0lBQzNCLGdCQUFnQjtJQUNoQix3QkFBd0I7SUFDeEIsNEJBQTRCO0lBQzVCLDJCQUEyQjtDQUM1QixDQUFDLENBQUM7QUFFSCxzRUFBc0U7QUFFdEU7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN6QixNQUFNO0lBQ04sTUFBTTtJQUNOLE1BQU07SUFDTixVQUFVO0lBQ1YsV0FBVztJQUNYLFlBQVk7SUFDWixZQUFZO0lBQ1osU0FBUztJQUNULFVBQVU7SUFDVixZQUFZO0lBQ1osaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixjQUFjO0lBQ2QsVUFBVTtJQUNWLFdBQVc7Q0FDWixDQUFDLENBQUM7QUFFSCxtREFBbUQ7QUFDbkQsTUFBTSxrQkFBa0IsR0FBRztJQUN6QixhQUFhO0lBQ2IsVUFBVTtJQUNWLFdBQVc7SUFDWCxhQUFhO0lBQ2IsV0FBVztJQUNYLGFBQWE7SUFDYixpQkFBaUI7SUFDakIsS0FBSztJQUNMLEtBQUs7SUFDTCxPQUFPO0lBQ1AsUUFBUTtJQUNSLFFBQVE7SUFDUixNQUFNO0lBQ04sUUFBUTtJQUNSLFdBQVc7SUFDWCxlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLGVBQWU7SUFDZixnQkFBZ0I7SUFDaEIsb0JBQW9CO0lBQ3BCLGlCQUFpQjtJQUNqQixTQUFTO0lBQ1QsV0FBVztJQUNYLGVBQWU7SUFDZixXQUFXO0lBQ1gsbUJBQW1CO0lBQ25CLGlCQUFpQjtJQUNqQixTQUFTO0lBQ1QsUUFBUTtJQUNSLGdCQUFnQjtJQUNoQixnQkFBZ0I7SUFDaEIsYUFBYTtJQUNiLGFBQWE7SUFDYixlQUFlO0NBQ2hCLENBQUM7QUFFRiwrQ0FBK0M7QUFDL0MsTUFBTSx1QkFBdUIsR0FBRztJQUM5QixVQUFVO0lBQ1YsVUFBVTtJQUNWLG1CQUFtQjtJQUNuQixlQUFlO0lBQ2YsbUJBQW1CO0lBQ25CLGVBQWU7SUFDZixtQkFBbUI7SUFDbkIsaUJBQWlCO0lBQ2pCLFlBQVk7SUFDWixlQUFlO0lBQ2YsWUFBWTtJQUNaLGNBQWM7SUFDZCxRQUFRO0lBQ1IsUUFBUTtJQUNSLE9BQU87SUFDUCxRQUFRO0lBQ1Isd0VBQXdFO0lBQ3hFLGFBQWE7SUFDYixjQUFjO0lBQ2QsV0FBVztJQUNYLGVBQWU7SUFDZixXQUFXO0lBQ1gsV0FBVztJQUNYLG9FQUFvRTtJQUNwRSxPQUFPO0lBQ1AsU0FBUztJQUNULE1BQU07SUFDTixRQUFRO0lBQ1IsU0FBUztJQUNULFdBQVc7SUFDWCxRQUFRO0lBQ1IsVUFBVTtJQUNWLFFBQVE7SUFDUixPQUFPO0lBQ1AsWUFBWTtJQUNaLFlBQVk7SUFDWix3RUFBd0U7SUFDeEUsZUFBZTtJQUNmLGFBQWE7SUFDYixTQUFTO0lBQ1QsT0FBTztJQUNQLFlBQVk7SUFDWixlQUFlO0lBQ2YsZUFBZTtJQUNmLGVBQWU7SUFDZixxRkFBcUY7SUFDckYsZUFBZTtJQUNmLHFCQUFxQjtJQUNyQiwwQkFBMEI7SUFDMUIsVUFBVTtJQUNWLFNBQVM7SUFDVCw2REFBNkQ7SUFDN0QsUUFBUTtJQUNSLFNBQVM7SUFDVCxTQUFTO0lBQ1QsV0FBVztJQUNYLCtDQUErQztJQUMvQyxNQUFNO0lBQ04sT0FBTztJQUNQLFVBQVU7SUFDVixRQUFRO0lBQ1IsU0FBUztJQUNULDZFQUE2RTtJQUM3RSxXQUFXO0lBQ1gsVUFBVTtJQUNWLFlBQVk7SUFDWiw4Q0FBOEM7SUFDOUMsYUFBYTtJQUNiLGNBQWM7SUFDZCxjQUFjO0lBQ2QsV0FBVztJQUNYLFlBQVk7SUFDWixZQUFZO0lBQ1osV0FBVztJQUNYLFlBQVk7SUFDWixzRUFBc0U7SUFDdEUsV0FBVztJQUNYLFNBQVM7SUFDVCxVQUFVO0lBQ1YsZ0JBQWdCO0lBQ2hCLGNBQWM7SUFDZCw2REFBNkQ7SUFDN0QsTUFBTTtJQUNOLDJEQUEyRDtJQUMzRCxlQUFlO0lBQ2YscUJBQXFCO0lBQ3JCLGVBQWU7Q0FDaEIsQ0FBQztBQUVGLG9EQUFvRDtBQUNwRCxNQUFNLHFCQUFxQixHQUFHO0lBQzVCLE9BQU87SUFDUCxTQUFTO0lBQ1QsYUFBYTtJQUNiLFVBQVU7SUFDVixRQUFRO0NBQ1QsQ0FBQztBQUVGLHNFQUFzRTtBQUV0RTs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQzFCLFFBQWdCLEVBQ2hCLFNBQWtDO0lBRWxDLCtCQUErQjtJQUMvQixJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUM3QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLFFBQVEsc0JBQXNCLEVBQUUsQ0FBQztJQUM3RixDQUFDO0lBRUQsd0NBQXdDO0lBQ3hDLElBQUksUUFBUSxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQ3hCLE9BQU8sbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELGlHQUFpRztJQUNqRyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNqQyxNQUFNLFNBQVMsR0FBRyxPQUFPLFNBQVMsQ0FBQyxTQUFTLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDckYsSUFBSSxTQUFTLElBQUksK0JBQStCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDaEUsT0FBTztnQkFDTCxTQUFTLEVBQUUsTUFBTTtnQkFDakIsUUFBUSxFQUFFLE9BQU87Z0JBQ2pCLE1BQU0sRUFBRSxtQ0FBbUMsU0FBUyw0Q0FBNEM7YUFDakcsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLFNBQVMsSUFBSSxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNwRCxPQUFPO2dCQUNMLFNBQVMsRUFBRSxNQUFNO2dCQUNqQixRQUFRLEVBQUUsT0FBTztnQkFDakIsTUFBTSxFQUFFLDRCQUE0QixTQUFTLEdBQUc7YUFDakQsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSwwQ0FBMEMsRUFBRSxDQUFDO0lBQzdHLENBQUM7SUFFRCx3REFBd0Q7SUFDeEQsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsUUFBUSw2Q0FBNkMsRUFBRSxDQUFDO0lBQzNILENBQUM7SUFFRCwwREFBMEQ7SUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLFFBQVEsK0JBQStCLEVBQUUsQ0FBQztBQUMzSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLG1CQUFtQixDQUMxQixTQUFrQztJQUVsQyxNQUFNLE9BQU8sR0FBRyxPQUFPLFNBQVMsQ0FBQyxPQUFPLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFdEYsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQztJQUN2RixDQUFDO0lBRUQsa0RBQWtEO0lBQ2xELEtBQUssTUFBTSxPQUFPLElBQUkscUJBQXFCLEVBQUUsQ0FBQztRQUM1QyxJQUFJLGNBQWMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSw0QkFBNEIsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUNuRyxDQUFDO0lBQ0gsQ0FBQztJQUVELDJCQUEyQjtJQUMzQixLQUFLLE1BQU0sT0FBTyxJQUFJLHVCQUF1QixFQUFFLENBQUM7UUFDOUMsSUFBSSxjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDckMsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsOEJBQThCLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDdkcsQ0FBQztJQUNILENBQUM7SUFFRCxzQkFBc0I7SUFDdEIsS0FBSyxNQUFNLE9BQU8sSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQ3pDLElBQUksY0FBYyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLHlCQUF5QixPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQzlGLENBQUM7SUFDSCxDQUFDO0lBRUQsa0RBQWtEO0lBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLHdDQUF3QyxFQUFFLENBQUM7QUFDM0csQ0FBQztBQUVELHFFQUFxRTtBQUVyRTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sV0FBVyxHQUEyQjtJQUMxQyxJQUFJLEVBQUUsQ0FBQztJQUNQLFFBQVEsRUFBRSxFQUFFO0lBQ1osU0FBUyxFQUFFLEVBQUU7SUFDYixPQUFPLEVBQUUsR0FBRztDQUNiLENBQUM7QUFFRixvREFBb0Q7QUFDcEQsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFFMUQsK0RBQStEO0FBQy9ELE1BQU0sdUJBQXVCLEdBQUc7SUFDOUIsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsWUFBWTtJQUMvQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVU7SUFDaEMsYUFBYSxFQUFFLGFBQWEsRUFBRSxjQUFjO0lBQzVDLFFBQVEsRUFBRSxPQUFPO0NBQ2xCLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxTQUFTLGdCQUFnQixDQUFDLFVBQWtCO0lBQzFDLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRWxELDJCQUEyQjtJQUMzQixLQUFLLE1BQU0sTUFBTSxJQUFJLHVCQUF1QixFQUFFLENBQUM7UUFDN0MsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDdkUsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVELHdFQUF3RTtJQUN4RSxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDdkcsZ0VBQWdFO1FBQ2hFLHNFQUFzRTtRQUN0RSxtRUFBbUU7UUFDbkUsSUFBSSxvSEFBb0gsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7SUFDekosQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELGtEQUFrRDtBQUNsRCxNQUFNLHFCQUFxQixHQUFHO0lBQzVCLFVBQVU7SUFDVixVQUFVO0lBQ1YsbUJBQW1CO0lBQ25CLGVBQWU7SUFDZixtQkFBbUI7SUFDbkIsZUFBZTtJQUNmLE9BQU87SUFDUCxTQUFTO0lBQ1QsUUFBUTtJQUNSLFlBQVk7Q0FDYixDQUFDO0FBRUY7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQ3hCLFFBQWdCLEVBQ2hCLFNBQWtDLEVBQ2xDLGNBQXdDO0lBRXhDLElBQUksS0FBSyxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hELE1BQU0sT0FBTyxHQUFhLENBQUMsU0FBUyxjQUFjLENBQUMsU0FBUyxLQUFLLFdBQVcsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNqSCxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7SUFFekIsbURBQW1EO0lBQ25ELElBQUksUUFBUSxLQUFLLE1BQU0sSUFBSSxPQUFPLFNBQVMsQ0FBQyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDakUsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QyxLQUFLLE1BQU0sT0FBTyxJQUFJLHFCQUFxQixFQUFFLENBQUM7WUFDNUMsSUFBSSxjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLFlBQVksR0FBRyxJQUFJLENBQUM7Z0JBQ3BCLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMseUJBQXlCLE9BQU8sUUFBUSxDQUFDLENBQUM7Z0JBQ3ZELE1BQU07WUFDUixDQUFDO1FBQ0gsQ0FBQztRQUVELG1DQUFtQztRQUNuQyxJQUFJLDRDQUE0QyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQy9ELEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDbEMsT0FBTyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzFDLENBQUM7SUFDSCxDQUFDO0lBRUQsK0RBQStEO0lBQy9ELElBQUksUUFBUSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQ3pCLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDakMsT0FBTyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxpRUFBaUU7SUFDakUsdUVBQXVFO0lBQ3ZFLHFEQUFxRDtJQUNyRCxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNsQyxNQUFNLFVBQVUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxFQUFFLENBQVcsQ0FBQztRQUMzRSxJQUFJLFVBQVUsSUFBSSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQy9DLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDbEMsT0FBTyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQy9DLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDMUMsQ0FBQztBQUVELHFFQUFxRTtBQUVyRTs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxtQkFBbUI7SUFDakMsT0FBTztRQUNMLFVBQVUsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDO1FBQzNCLGtCQUFrQixFQUFFLENBQUMsR0FBRyxrQkFBa0IsQ0FBQztRQUMzQyx1QkFBdUIsRUFBRSxDQUFDLEdBQUcsdUJBQXVCLENBQUM7UUFDckQscUJBQXFCLEVBQUUsQ0FBQyxHQUFHLHFCQUFxQixDQUFDO1FBQ2pELHFCQUFxQixFQUFFLENBQUMsR0FBRyxxQkFBcUIsQ0FBQztRQUNqRCx1QkFBdUIsRUFBRSxDQUFDLEdBQUcsdUJBQXVCLENBQUM7UUFDckQsK0JBQStCLEVBQUUsQ0FBQyxHQUFHLCtCQUErQixDQUFDO1FBQ3JFLG1CQUFtQixFQUFFLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztRQUM3QyxXQUFXLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFBRTtLQUNoQyxDQUFDO0FBQ0osQ0FBQztBQUVELHNFQUFzRTtBQUV0RTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FDbkMsUUFBZ0IsRUFDaEIsU0FBa0MsRUFDbEMsY0FBK0I7SUFFL0IsTUFBTSxpQkFBaUIsR0FBaUQsRUFBRSxDQUFDO0lBQzNFLE1BQU0sYUFBYSxHQUFhLEVBQUUsQ0FBQztJQUVuQyxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7SUFFcEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMzQixhQUFhLENBQUMsSUFBSSxDQUFDLDhDQUE4QyxDQUFDLENBQUM7UUFDbkUsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLFFBQVEsK0NBQStDLENBQUMsQ0FBQztRQUNyRixPQUFPO1lBQ0wsUUFBUSxFQUFFLFVBQVU7WUFDcEIsYUFBYSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFO1NBQ3BELENBQUM7SUFDSixDQUFDO0lBRUQsOENBQThDO0lBQzlDLE1BQU0sWUFBWSxHQUFHLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM1RCxNQUFNLGtCQUFrQixHQUFHLHFCQUFxQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLFFBQVEsWUFBWSxjQUFjLENBQUMsTUFBTSxjQUFjLGtCQUFrQixxQkFBcUIsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFakssSUFBSSwwQkFBMEIsR0FBRyxLQUFLLENBQUM7SUFDdkMsSUFBSSx1QkFBdUIsR0FBRyxLQUFLLENBQUM7SUFDcEMsTUFBTSx5QkFBeUIsR0FBYSxFQUFFLENBQUM7SUFFL0MsS0FBSyxNQUFNLE9BQU8sSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUNyQyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsQ0FBQztRQUN4RSxNQUFNLFlBQVksR0FBRyxZQUFZLEVBQUUsWUFBWSxDQUFDO1FBQ2hELE1BQU0sZUFBZSxHQUFHLFlBQVksRUFBRSxlQUFlLENBQUM7UUFDdEQsTUFBTSxhQUFhLEdBQUcsWUFBWSxFQUFFLGFBQWEsQ0FBQztRQUVsRCxNQUFNLGVBQWUsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7ZUFDM0UsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2VBQzlELENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRWhFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNyQixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDbkUsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLElBQUksNEJBQTRCLENBQUMsQ0FBQztZQUNqRixNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsT0FBTyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsSUFBSSxzQ0FBc0MsQ0FBQyxDQUFDO1lBQ2pHLFNBQVM7UUFDWCxDQUFDO1FBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLElBQUksd0JBQXdCLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVoUyxnREFBZ0Q7UUFDaEQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDaEMsS0FBSyxNQUFNLE9BQU8sSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRO29CQUFFLFNBQVM7Z0JBQzFDLEtBQUssTUFBTSxNQUFNLElBQUksWUFBWSxFQUFFLENBQUM7b0JBQ2xDLElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO3dCQUNwQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7NEJBQ3JCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTs0QkFDbEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJOzRCQUNsQixPQUFPLEVBQUUsY0FBYzs0QkFDdkIsY0FBYyxFQUFFLE9BQU87NEJBQ3ZCLGFBQWEsRUFBRSxNQUFNO3lCQUN0QixDQUFDLENBQUM7d0JBQ0gsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLElBQUksa0JBQWtCLE9BQU8sY0FBYyxNQUFNLEdBQUcsQ0FBQyxDQUFDO3dCQUMzRyxNQUFNLENBQUMsS0FBSyxDQUFDLHFCQUFxQixPQUFPLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLGtCQUFrQixPQUFPLGNBQWMsTUFBTSxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQ3pJLE9BQU87NEJBQ0wsUUFBUSxFQUFFLE1BQU07NEJBQ2hCLE9BQU8sRUFBRSxhQUFhLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLElBQUksc0JBQXNCLE9BQU8sY0FBYyxNQUFNLEdBQUc7NEJBQ3ZHLGFBQWEsRUFBRSxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRTt5QkFDcEQsQ0FBQztvQkFDSixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELG9FQUFvRTtRQUNwRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNqRSxLQUFLLE1BQU0sT0FBTyxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVE7b0JBQUUsU0FBUztnQkFDMUMsS0FBSyxNQUFNLE1BQU0sSUFBSSxZQUFZLEVBQUUsQ0FBQztvQkFDbEMsSUFBSSxjQUFjLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7d0JBQ3BDLGlCQUFpQixDQUFDLElBQUksQ0FBQzs0QkFDckIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJOzRCQUNsQixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7NEJBQ2xCLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLGNBQWMsRUFBRSxPQUFPOzRCQUN2QixhQUFhLEVBQUUsTUFBTTt5QkFDdEIsQ0FBQyxDQUFDO3dCQUNILGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxPQUFPLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLHFCQUFxQixPQUFPLGNBQWMsTUFBTSxHQUFHLENBQUMsQ0FBQzt3QkFDakgsTUFBTSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsT0FBTyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsSUFBSSxxQkFBcUIsT0FBTyxjQUFjLE1BQU0sTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUMvSSxPQUFPOzRCQUNMLFFBQVEsRUFBRSxTQUFrQjs0QkFDNUIsT0FBTyxFQUFFLHNCQUFzQixPQUFPLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLCtDQUErQyxPQUFPLEdBQUc7NEJBQ3JILGFBQWEsRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksRUFBRTs0QkFDaEQsYUFBYSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFO3lCQUNwRCxDQUFDO29CQUNKLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsOEJBQThCO1FBQzlCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzdELDBCQUEwQixHQUFHLElBQUksQ0FBQztZQUNsQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQ3BFLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztZQUV6QixLQUFLLE1BQU0sT0FBTyxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVE7b0JBQUUsU0FBUztnQkFDMUMsS0FBSyxNQUFNLE1BQU0sSUFBSSxZQUFZLEVBQUUsQ0FBQztvQkFDbEMsSUFBSSxjQUFjLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7d0JBQ3BDLGlCQUFpQixDQUFDLElBQUksQ0FBQzs0QkFDckIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJOzRCQUNsQixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7NEJBQ2xCLE9BQU8sRUFBRSxlQUFlOzRCQUN4QixjQUFjLEVBQUUsT0FBTzs0QkFDdkIsYUFBYSxFQUFFLE1BQU07eUJBQ3RCLENBQUMsQ0FBQzt3QkFDSCxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsSUFBSSxvQkFBb0IsT0FBTyxjQUFjLE1BQU0sR0FBRyxDQUFDLENBQUM7d0JBQ3ZHLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLElBQUksbUJBQW1CLE9BQU8sY0FBYyxNQUFNLEdBQUcsQ0FBQyxDQUFDO3dCQUNuSCx1QkFBdUIsR0FBRyxJQUFJLENBQUM7d0JBQy9CLFlBQVksR0FBRyxJQUFJLENBQUM7d0JBQ3BCLE1BQU07b0JBQ1IsQ0FBQztnQkFDSCxDQUFDO2dCQUNELElBQUksWUFBWTtvQkFBRSxNQUFNO1lBQzFCLENBQUM7WUFFRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ2xCLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDbkUsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLElBQUksdUNBQXVDLENBQUMsQ0FBQztZQUM5RixDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDbkUsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLElBQUksbUNBQW1DLENBQUMsQ0FBQztRQUMxRixDQUFDO0lBQ0gsQ0FBQztJQUVELGdGQUFnRjtJQUNoRixJQUFJLDBCQUEwQixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMzRCxNQUFNLFdBQVcsR0FBRyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekQsYUFBYSxDQUFDLElBQUksQ0FBQywyREFBMkQsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUM5RixNQUFNLENBQUMsS0FBSyxDQUFDLHFCQUFxQixRQUFRLHlDQUF5QyxXQUFXLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzSCxPQUFPO1lBQ0wsUUFBUSxFQUFFLE1BQU07WUFDaEIsT0FBTyxFQUFFLFNBQVMsUUFBUSw2Q0FBNkMsV0FBVyw2RUFBNkU7WUFDL0osYUFBYSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFO1NBQ3BELENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSwwQkFBMEIsRUFBRSxDQUFDO1FBQy9CLGFBQWEsQ0FBQyxJQUFJLENBQUMsa0RBQWtELENBQUMsQ0FBQztRQUN2RSxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsUUFBUSxpREFBaUQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5RyxDQUFDO1NBQU0sQ0FBQztRQUNOLGFBQWEsQ0FBQyxJQUFJLENBQUMsdUVBQXVFLENBQUMsQ0FBQztRQUM1RixNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsUUFBUSx3REFBd0QsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNySCxDQUFDO0lBRUQsT0FBTztRQUNMLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLGFBQWEsRUFBRSxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRTtLQUNwRCxDQUFDO0FBQ0osQ0FBQztBQUVELDJEQUEyRDtBQUMzRCxTQUFTLE9BQU8sQ0FBQyxTQUFpQjtJQUNoQyxPQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDM0QsQ0FBQztBQUVELG1HQUFtRztBQUNuRyxTQUFTLHFCQUFxQixDQUFDLFFBQXlCO0lBQ3RELE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQ3pDLEtBQUssTUFBTSxFQUFFLElBQUksUUFBUSxFQUFFLENBQUM7UUFDMUIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1RyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUM7QUFFcEM7Ozs7O0dBS0c7QUFDSCxTQUFTLGtCQUFrQixDQUFDLEtBQWE7SUFDdkMsdUVBQXVFO0lBQ3ZFLGdGQUFnRjtJQUNoRixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLDRDQUE0QztJQUM1QyxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsd0NBQXdDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDMUUsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQVMsaUJBQWlCLENBQ3hCLFFBQWdCLEVBQ2hCLFNBQWtDO0lBRWxDLE1BQU0sT0FBTyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFM0IsSUFBSSxRQUFRLEtBQUssTUFBTSxJQUFJLE9BQU8sU0FBUyxDQUFDLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNqRSxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO1FBQ3pGLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7U0FBTSxJQUFJLENBQUMsUUFBUSxLQUFLLE1BQU0sSUFBSSxRQUFRLEtBQUssT0FBTyxDQUFDLElBQUksT0FBTyxTQUFTLENBQUMsU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3BHLE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7UUFDM0YsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUb29sIENsYXNzaWZpY2F0aW9uIGZvciBDTEktTGV2ZWwgUGVybWlzc2lvbiBQcm9tcHRzXG4gKlxuICogUHJvdmlkZXMgc3RhdGljIGNsYXNzaWZpY2F0aW9uIG9mIENsYXVkZSBDb2RlIENMSSB0b29sIGNhbGxzIGFuZFxuICogZXZhbHVhdGlvbiBhZ2FpbnN0IGFjdGl2ZSBlbGVtZW50IGdhdGVrZWVwZXIgcG9saWNpZXMuXG4gKlxuICogVXNlZCBieSB0aGUgcGVybWlzc2lvbl9wcm9tcHQgb3BlcmF0aW9uIChJc3N1ZSAjNjI1KSB0byBldmFsdWF0ZVxuICogLS1wZXJtaXNzaW9uLXByb21wdC10b29sIHJlcXVlc3RzIHdpdGhvdXQgcmVxdWlyaW5nIExMTSBldmFsdWF0aW9uLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBtYXRjaGVzUGF0dGVybiB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3BhdHRlcm5NYXRjaGVyLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgdHlwZSB7IEFjdGl2ZUVsZW1lbnQgfSBmcm9tICcuL0VsZW1lbnRQb2xpY2llcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJpc2tBc3Nlc3NtZW50IH0gZnJvbSAnLi4vR2F0ZWtlZXBlclR5cGVzLmpzJztcblxuLy8g4pSA4pSAIFR5cGVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBUb29sUmlza0xldmVsID0gJ3NhZmUnIHwgJ21vZGVyYXRlJyB8ICdkYW5nZXJvdXMnIHwgJ2Jsb2NrZWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xDbGFzc2lmaWNhdGlvblJlc3VsdCB7XG4gIHJpc2tMZXZlbDogVG9vbFJpc2tMZXZlbDtcbiAgLyoqICdhbGxvdycgPSBhdXRvLWFwcHJvdmUsICdkZW55JyA9IGF1dG8tcmVqZWN0LCAnZXZhbHVhdGUnID0gY2hlY2sgZWxlbWVudCBwb2xpY2llcyAqL1xuICBiZWhhdmlvcjogJ2FsbG93JyB8ICdkZW55JyB8ICdldmFsdWF0ZSc7XG4gIHJlYXNvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvbGljeUV2YWx1YXRpb25Db250ZXh0IHtcbiAgZXZhbHVhdGVkRWxlbWVudHM6IEFycmF5PHtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIG1hdGNoZWQ/OiAnYWxsb3dQYXR0ZXJucycgfCAnY29uZmlybVBhdHRlcm5zJyB8ICdkZW55UGF0dGVybnMnO1xuICAgIG1hdGNoZWRQYXR0ZXJuPzogc3RyaW5nO1xuICAgIG1hdGNoZWRUYXJnZXQ/OiBzdHJpbmc7XG4gIH0+O1xuICBkZWNpc2lvbkNoYWluOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbGlUb29sUG9saWN5UmVzdWx0IHtcbiAgYmVoYXZpb3I6ICdhbGxvdycgfCAnZGVueScgfCAnZXZhbHVhdGUnIHwgJ2NvbmZpcm0nO1xuICBtZXNzYWdlPzogc3RyaW5nO1xuICBjb25maXJtU291cmNlPzogc3RyaW5nO1xuICBwb2xpY3lDb250ZXh0PzogUG9saWN5RXZhbHVhdGlvbkNvbnRleHQ7XG59XG5cbi8vIOKUgOKUgCBHYXRla2VlcGVyLUVzc2VudGlhbCBPcGVyYXRpb25zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIE1DUC1BUUwgb3BlcmF0aW9ucyB0aGF0IG11c3QgTkVWRVIgYmUgYmxvY2tlZCBieSBwZXJtaXNzaW9uX3Byb21wdCxcbiAqIGV2ZW4gaWYgZWxlbWVudCBkZW55UGF0dGVybnMgd291bGQgbWF0Y2ggdGhlIE1DUCB0b29sIG5hbWUuXG4gKlxuICogVGhlc2UgYXJlIGVzc2VudGlhbCBmb3IgdGhlIEdhdGVrZWVwZXIgZmxvdyBpdHNlbGYuIEJsb2NraW5nIHRoZW1cbiAqIHdvdWxkIHByZXZlbnQgdGhlIGh1bWFuLWluLXRoZS1sb29wIGFwcHJvdmFsIHBhdGggZnJvbSBmdW5jdGlvbmluZ1xuICogKGUuZy4sIGEgZGVueVBhdHRlcm4gb2YgJ21jcF9fRG9sbGhvdXNlTUNQKicgd291bGQgYmxvY2sgY29uZmlybV9vcGVyYXRpb24pLlxuICovXG5jb25zdCBHQVRFS0VFUEVSX0VTU0VOVElBTF9PUEVSQVRJT05TID0gbmV3IFNldChbXG4gICdjb25maXJtX29wZXJhdGlvbicsXG4gICd2ZXJpZnlfY2hhbGxlbmdlJyxcbiAgJ3JlbGVhc2VfZGVhZGxvY2snLFxuICAncGVybWlzc2lvbl9wcm9tcHQnLFxuICAnaW50cm9zcGVjdCcsXG4gICdnZXRfYWN0aXZlX2VsZW1lbnRzJyxcbiAgJ2dldF9leGVjdXRpb25fc3RhdGUnLFxuICAnZ2V0X2dhdGhlcmVkX2RhdGEnLFxuICAnYXBwcm92ZV9jbGlfcGVybWlzc2lvbicsICAgICAgIC8vIElzc3VlICM2MjUgUGhhc2UgM1xuICAnZ2V0X3BlbmRpbmdfY2xpX2FwcHJvdmFscycsICAgIC8vIElzc3VlICM2MjUgUGhhc2UgM1xuXSk7XG5cbi8qKlxuICogTUNQLUFRTCBvcGVyYXRpb25zIHRoYXQgYXJlIGluaGVyZW50bHkgcmVhZC1vbmx5LlxuICpcbiAqIFRoZXNlIGF1dG8tYWxsb3cgaW4gcGVybWlzc2lvbl9wcm9tcHQgKG5vIGVsZW1lbnQgcG9saWN5IGV2YWx1YXRpb24pLlxuICogVGhlIEdhdGVrZWVwZXIgKExheWVyIDIpIHN0aWxsIGFwcGxpZXMgaXRzIG93biBwZXItb3BlcmF0aW9uIHBvbGljaWVzLFxuICogc28gdGhpcyBkb2Vzbid0IGJ5cGFzcyBzZXJ2ZXItc2lkZSBhY2Nlc3MgY29udHJvbCDigJQgaXQganVzdCBhdm9pZHNcbiAqIHVubmVjZXNzYXJ5ICdldmFsdWF0ZScgcm91bmQtdHJpcHMgZm9yIG9wZXJhdGlvbnMgdGhhdCBjYW4ndCBtb2RpZnkgc3RhdGUuXG4gKi9cbmNvbnN0IFNBRkVfTUNQX09QRVJBVElPTlMgPSBuZXcgU2V0KFtcbiAgJ2xpc3RfZWxlbWVudHMnLFxuICAnZ2V0X2VsZW1lbnQnLFxuICAnZ2V0X2VsZW1lbnRfZGV0YWlscycsXG4gICdzZWFyY2hfZWxlbWVudHMnLFxuICAncXVlcnlfZWxlbWVudHMnLFxuICAnZ2V0X2FjdGl2ZV9lbGVtZW50cycsXG4gICd2YWxpZGF0ZV9lbGVtZW50JyxcbiAgJ3JlbmRlcicsXG4gICdleHBvcnRfZWxlbWVudCcsXG4gICdpbnRyb3NwZWN0JyxcbiAgJ2dldF9leGVjdXRpb25fc3RhdGUnLFxuICAnZ2V0X2dhdGhlcmVkX2RhdGEnLFxuICAnYnJvd3NlX2NvbGxlY3Rpb24nLFxuICAnc2VhcmNoX2NvbGxlY3Rpb24nLFxuICAnc2VhcmNoX2NvbGxlY3Rpb25fZW5oYW5jZWQnLFxuICAnZ2V0X2NvbGxlY3Rpb25fY29udGVudCcsXG4gICdnZXRfY29sbGVjdGlvbl9jYWNoZV9oZWFsdGgnLFxuICAncG9ydGZvbGlvX3N0YXR1cycsXG4gICdwb3J0Zm9saW9fY29uZmlnJyxcbiAgJ3NlYXJjaF9wb3J0Zm9saW8nLFxuICAnc2VhcmNoX2FsbCcsXG4gICdjaGVja19naXRodWJfYXV0aCcsXG4gICdvYXV0aF9oZWxwZXJfc3RhdHVzJyxcbiAgJ2RvbGxob3VzZV9jb25maWcnLFxuICAnZ2V0X2J1aWxkX2luZm8nLFxuICAnZ2V0X2NhY2hlX2J1ZGdldF9yZXBvcnQnLFxuICAncXVlcnlfbG9ncycsXG4gICdxdWVyeV9tZXRyaWNzJyxcbiAgJ2ZpbmRfc2ltaWxhcl9lbGVtZW50cycsXG4gICdnZXRfZWxlbWVudF9yZWxhdGlvbnNoaXBzJyxcbiAgJ3NlYXJjaF9ieV92ZXJiJyxcbiAgJ2dldF9yZWxhdGlvbnNoaXBfc3RhdHMnLFxuICAnZ2V0X2VmZmVjdGl2ZV9jbGlfcG9saWNpZXMnLFxuICAnZ2V0X3BlbmRpbmdfY2xpX2FwcHJvdmFscycsXG5dKTtcblxuLy8g4pSA4pSAIFN0YXRpYyBDbGFzc2lmaWNhdGlvbiBMaXN0cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBUb29scyB0aGF0IGFyZSBhbHdheXMgc2FmZSAocmVhZC1vbmx5LCBubyBzaWRlIGVmZmVjdHMpLlxuICpcbiAqIE5PVEU6IFwiU2FmZVwiIGhlcmUgbWVhbnMgbm8gZGVzdHJ1Y3RpdmUgc2lkZSBlZmZlY3RzIOKAlCBpdCBkb2VzIE5PVCBtZWFuXG4gKiB1bnJlc3RyaWN0ZWQuIFJlYWQtb25seSB0b29scyBjYW4gc3RpbGwgcG9zZSBpbmZvcm1hdGlvbi1sZWFrYWdlIG9yXG4gKiBzY29wZS1jcmVlcCByaXNrcyB3aGVuIHVzZWQgdG8gYWNjZXNzIGZpbGVzIG91dHNpZGUgdGhlIHByb2plY3Qgd29ya2luZ1xuICogZGlyZWN0b3J5IChlLmcuLCB+Ly5zc2gvKiwgL2V0Yy9wYXNzd2QsIGNyZWRlbnRpYWxzIGluIGhvbWUgZGlyZWN0b3JpZXMpLlxuICogTW9zdCBMTE0gY2xpZW50cyAoQ2xhdWRlIENvZGUsIEN1cnNvciwgZXRjLikgYWxyZWFkeSBlbmZvcmNlIGRpcmVjdG9yeVxuICogc2NvcGluZyBhdCB0aGUgY2xpZW50IGxldmVsLiBUaGUgYGFzc2Vzc1Jpc2soKWAgZnVuY3Rpb24gYXBwbGllcyBhIHNtYWxsXG4gKiBzY29yZSBidW1wIGZvciByZWFkIG9wZXJhdGlvbnMgdGFyZ2V0aW5nIG91dC1vZi1zY29wZSBwYXRocyBhcyBhblxuICogYWRkaXRpb25hbCBzaWduYWwgZm9yIGFwcHJvdmFsIHBvbGljaWVzLlxuICovXG5jb25zdCBTQUZFX1RPT0xTID0gbmV3IFNldChbXG4gICdSZWFkJyxcbiAgJ0dyZXAnLFxuICAnR2xvYicsXG4gICdXZWJGZXRjaCcsXG4gICdXZWJTZWFyY2gnLFxuICAnVGFza0NyZWF0ZScsXG4gICdUYXNrVXBkYXRlJyxcbiAgJ1Rhc2tHZXQnLFxuICAnVGFza0xpc3QnLFxuICAnVGFza091dHB1dCcsXG4gICdBc2tVc2VyUXVlc3Rpb24nLFxuICAnRW50ZXJQbGFuTW9kZScsXG4gICdFeGl0UGxhbk1vZGUnLFxuICAnVG9kb1JlYWQnLFxuICAnVG9kb1dyaXRlJyxcbl0pO1xuXG4vKiogQmFzaCBjb21tYW5kIHByZWZpeGVzL3BhdHRlcm5zIHRoYXQgYXJlIHNhZmUgKi9cbmNvbnN0IFNBRkVfQkFTSF9QQVRURVJOUyA9IFtcbiAgJ2dpdCBzdGF0dXMqJyxcbiAgJ2dpdCBsb2cqJyxcbiAgJ2dpdCBkaWZmKicsXG4gICdnaXQgYnJhbmNoKicsXG4gICdnaXQgc2hvdyonLFxuICAnZ2l0IHJlbW90ZSonLFxuICAnZ2l0IHN0YXNoIGxpc3QqJyxcbiAgJ2xzKicsXG4gICdwd2QnLFxuICAnY2F0IConLFxuICAnaGVhZCAqJyxcbiAgJ3RhaWwgKicsXG4gICd3YyAqJyxcbiAgJ2VjaG8gKicsXG4gICducG0gdGVzdConLFxuICAnbnBtIHJ1biBsaW50KicsXG4gICducG0gcnVuIGJ1aWxkKicsXG4gICducG0gcnVuIHRlc3QqJyxcbiAgJ25wbSBydW4gY2hlY2sqJyxcbiAgJ25wbSBydW4gdHlwZWNoZWNrKicsXG4gICducG0gcnVuIGZvcm1hdConLFxuICAnbnBtIGxzKicsXG4gICducG0gaW5mbyonLFxuICAnbnBtIG91dGRhdGVkKicsXG4gICducHggamVzdConLFxuICAnbnB4IHRzYyAtLW5vRW1pdConLFxuICAnbm9kZSAtLXZlcnNpb24qJyxcbiAgJ3doaWNoIConLFxuICAndHlwZSAqJyxcbiAgJ2doIGlzc3VlIGxpc3QqJyxcbiAgJ2doIGlzc3VlIHZpZXcqJyxcbiAgJ2doIHByIGxpc3QqJyxcbiAgJ2doIHByIHZpZXcqJyxcbiAgJ2doIHByIGNoZWNrcyonLFxuXTtcblxuLyoqIEJhc2ggY29tbWFuZCBwYXR0ZXJucyB0aGF0IGFyZSBkYW5nZXJvdXMgKi9cbmNvbnN0IERBTkdFUk9VU19CQVNIX1BBVFRFUk5TID0gW1xuICAncm0gLXJmIConLFxuICAncm0gLWZyIConLFxuICAnZ2l0IHB1c2ggLS1mb3JjZSonLFxuICAnZ2l0IHB1c2ggLWYgKicsXG4gICdnaXQgcmVzZXQgLS1oYXJkKicsXG4gICdnaXQgY2xlYW4gLWYqJyxcbiAgJ2dpdCBjaGVja291dCAtLSAqJyxcbiAgJ2dpdCBicmFuY2ggLUQgKicsXG4gICdjaG1vZCA3NzcqJyxcbiAgJ2NobW9kIC1SIDc3NyonLFxuICAnY2htb2QgK3MgKicsXG4gICdjaG93biByb290IConLFxuICAnc3VkbyAqJyxcbiAgJ2RvYXMgKicsXG4gICdzdSAtKicsXG4gICdldmFsIConLFxuICAvLyBJbmxpbmUgaW50ZXJwcmV0ZXIgZXhlY3V0aW9uICgjMTc4Mikg4oCUIGFyYml0cmFyeSBjb2RlIHZpYSAtYy8tZSBmbGFnc1xuICAncHl0aG9uIC1jIConLFxuICAncHl0aG9uMyAtYyAqJyxcbiAgJ25vZGUgLWUgKicsXG4gICdub2RlIC0tZXZhbCAqJyxcbiAgJ3BlcmwgLWUgKicsXG4gICdydWJ5IC1lIConLFxuICAvLyBQaXBlLXRvLXNoZWxsIHBhdHRlcm5zICh3aXRoIGFuZCB3aXRob3V0IHNwYWNlcywgbXVsdGlwbGUgc2hlbGxzKVxuICAnKnwgc2gnLFxuICAnKnwgc2ggKicsXG4gICcqfHNoJyxcbiAgJyp8c2ggKicsXG4gICcqfCBiYXNoJyxcbiAgJyp8IGJhc2ggKicsXG4gICcqfGJhc2gnLFxuICAnKnxiYXNoIConLFxuICAnKnwgenNoJyxcbiAgJyp8enNoJyxcbiAgJ2N1cmwgKiB8IConLFxuICAnd2dldCAqIHwgKicsXG4gIC8vIFBhY2thZ2UgbWFuYWdlciBpbnN0YWxscyAoY2FuIGV4ZWN1dGUgYXJiaXRyYXJ5IHBvc3QtaW5zdGFsbCBzY3JpcHRzKVxuICAnbnBtIGluc3RhbGwgKicsXG4gICducG0gaW5zdGFsbCcsXG4gICducG0gaSAqJyxcbiAgJ25wbSBpJyxcbiAgJ3lhcm4gYWRkIConLFxuICAneWFybiBpbnN0YWxsKicsXG4gICdwaXAgaW5zdGFsbCAqJyxcbiAgJ2dlbSBpbnN0YWxsIConLFxuICAvLyBFbnZpcm9ubWVudCBtYW5pcHVsYXRpb24gKHBhdGggcG9pc29uaW5nLCBsaWJyYXJ5IGluamVjdGlvbiwgdmFyaWFibGUgZGVzdHJ1Y3Rpb24pXG4gICdleHBvcnQgUEFUSD0qJyxcbiAgJ2V4cG9ydCBMRF9QUkVMT0FEPSonLFxuICAnZXhwb3J0IExEX0xJQlJBUllfUEFUSD0qJyxcbiAgJ2VudiAtaSAqJyxcbiAgJ3Vuc2V0IConLFxuICAvLyBQcm9jZXNzIGNvbnRyb2wgKGNhbiB0ZXJtaW5hdGUgYWdlbnRzIG9yIHN5c3RlbSBwcm9jZXNzZXMpXG4gICdraWxsIConLFxuICAna2lsbCAtKicsXG4gICdwa2lsbCAqJyxcbiAgJ2tpbGxhbGwgKicsXG4gIC8vIE5ldHdvcmsgdG9vbHMgKGV4ZmlsdHJhdGlvbiwgcmV2ZXJzZSBzaGVsbHMpXG4gICduYyAqJyxcbiAgJ25jIC0qJyxcbiAgJ25ldGNhdCAqJyxcbiAgJ25jYXQgKicsXG4gICdzb2NhdCAqJyxcbiAgLy8gQXJjaGl2ZSBvcGVyYXRpb25zIChhcmNoaXZlIGJvbWJzLCByb290IGRpcmVjdG9yeSBleGZpbHRyYXRpb24vcmFuc29td2FyZSlcbiAgJ3RhciAteGYgKicsXG4gICd0YXIgeGYgKicsXG4gICd6aXAgLXIgKiAvJyxcbiAgLy8gQ29tbWFuZCBjaGFpbmluZyB3aXRoIGRhbmdlcm91cyBzdWJjb21tYW5kc1xuICAnKjsgcm0gLXJmIConLFxuICAnKiYmIHJtIC1yZiAqJyxcbiAgJyp8fCBybSAtcmYgKicsXG4gICcqOyBzdWRvIConLFxuICAnKiYmIHN1ZG8gKicsXG4gICcqfHwgc3VkbyAqJyxcbiAgJyo7IGV2YWwgKicsXG4gICcqJiYgZXZhbCAqJyxcbiAgLy8gU3VicHJvY2VzcyBleGVjdXRpb24gd3JhcHBlcnMgKGJ5cGFzcyBvdXRlciBjb21tYW5kIGNsYXNzaWZpY2F0aW9uKVxuICAnYmFzaCAtYyAqJyxcbiAgJ3NoIC1jIConLFxuICAnenNoIC1jIConLFxuICAnL2Jpbi9iYXNoIC1jIConLFxuICAnL2Jpbi9zaCAtYyAqJyxcbiAgLy8gUHJvY2VzcyBzdWJzdGl0dXRpb24gKGNhbiBpbmplY3QgYXJiaXRyYXJ5IGNvbW1hbmQgb3V0cHV0KVxuICAnKjwoKicsXG4gIC8vIEVuY29kZWQgcGF5bG9hZCBleGVjdXRpb24gKGJhc2U2NC1kZWNvZGUgcGlwZWQgdG8gc2hlbGwpXG4gICcqYmFzZTY0IC1kKnwqJyxcbiAgJypiYXNlNjQgLS1kZWNvZGUqfConLFxuICAnKmJhc2U2NCAtRCp8KicsXG5dO1xuXG4vKiogQmFzaCBjb21tYW5kIHBhdHRlcm5zIHRoYXQgYXJlIGFsd2F5cyBibG9ja2VkICovXG5jb25zdCBCTE9DS0VEX0JBU0hfUEFUVEVSTlMgPSBbXG4gICdta2ZzKicsXG4gICdkZCBpZj0qJyxcbiAgJzooKXs6fDomfTs6JyxcbiAgJ2Zvcm1hdCAqJyxcbiAgJyooKXsgKicsXG5dO1xuXG4vLyDilIDilIAgU3RhdGljIENsYXNzaWZpY2F0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIENsYXNzaWZ5IGEgQ0xJIHRvb2wgY2FsbCBieSByaXNrIGxldmVsIHVzaW5nIHN0YXRpYyBydWxlcy5cbiAqXG4gKiBSZXR1cm5zICdhbGxvdycgZm9yIGtub3duLXNhZmUgdG9vbHMsICdkZW55JyBmb3Iga25vd24tZGFuZ2Vyb3VzIHBhdHRlcm5zLFxuICogYW5kICdldmFsdWF0ZScgZm9yIGFueXRoaW5nIHRoYXQgbmVlZHMgZnVydGhlciBwb2xpY3kgY2hlY2tpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc2lmeVRvb2woXG4gIHRvb2xOYW1lOiBzdHJpbmcsXG4gIHRvb2xJbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFRvb2xDbGFzc2lmaWNhdGlvblJlc3VsdCB7XG4gIC8vIEtub3duLXNhZmUgdG9vbHM6IGF1dG8tYWxsb3dcbiAgaWYgKFNBRkVfVE9PTFMuaGFzKHRvb2xOYW1lKSkge1xuICAgIHJldHVybiB7IHJpc2tMZXZlbDogJ3NhZmUnLCBiZWhhdmlvcjogJ2FsbG93JywgcmVhc29uOiBgJHt0b29sTmFtZX0gaXMgYSByZWFkLW9ubHkgdG9vbGAgfTtcbiAgfVxuXG4gIC8vIEJhc2g6IHN1Yi1jbGFzc2lmeSBieSBjb21tYW5kIGNvbnRlbnRcbiAgaWYgKHRvb2xOYW1lID09PSAnQmFzaCcpIHtcbiAgICByZXR1cm4gY2xhc3NpZnlCYXNoQ29tbWFuZCh0b29sSW5wdXQpO1xuICB9XG5cbiAgLy8gTUNQIHRvb2wgY2FsbHM6IGF1dG8tYWxsb3cgZ2F0ZWtlZXBlci1lc3NlbnRpYWwgYW5kIHNhZmUgcmVhZC1vbmx5IG9wZXJhdGlvbnMsIGV2YWx1YXRlIG90aGVyc1xuICBpZiAodG9vbE5hbWUuc3RhcnRzV2l0aCgnbWNwX18nKSkge1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHR5cGVvZiB0b29sSW5wdXQub3BlcmF0aW9uID09PSAnc3RyaW5nJyA/IHRvb2xJbnB1dC5vcGVyYXRpb24gOiAnJztcbiAgICBpZiAob3BlcmF0aW9uICYmIEdBVEVLRUVQRVJfRVNTRU5USUFMX09QRVJBVElPTlMuaGFzKG9wZXJhdGlvbikpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJpc2tMZXZlbDogJ3NhZmUnLFxuICAgICAgICBiZWhhdmlvcjogJ2FsbG93JyxcbiAgICAgICAgcmVhc29uOiBgR2F0ZWtlZXBlci1lc3NlbnRpYWwgb3BlcmF0aW9uICcke29wZXJhdGlvbn0nIOKAlCBjYW5ub3QgYmUgYmxvY2tlZCBieSBwZXJtaXNzaW9uX3Byb21wdGAsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAob3BlcmF0aW9uICYmIFNBRkVfTUNQX09QRVJBVElPTlMuaGFzKG9wZXJhdGlvbikpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJpc2tMZXZlbDogJ3NhZmUnLFxuICAgICAgICBiZWhhdmlvcjogJ2FsbG93JyxcbiAgICAgICAgcmVhc29uOiBgUmVhZC1vbmx5IE1DUCBvcGVyYXRpb24gJyR7b3BlcmF0aW9ufSdgLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgcmlza0xldmVsOiAnbW9kZXJhdGUnLCBiZWhhdmlvcjogJ2V2YWx1YXRlJywgcmVhc29uOiAnTUNQIHRvb2wgY2FsbCByZXF1aXJlcyBwb2xpY3kgZXZhbHVhdGlvbicgfTtcbiAgfVxuXG4gIC8vIEVkaXQsIFdyaXRlLCBBZ2VudCwgTm90ZWJvb2tFZGl0LCBldGMuOiBtb2RlcmF0ZSByaXNrXG4gIGlmIChbJ0VkaXQnLCAnV3JpdGUnLCAnQWdlbnQnLCAnTm90ZWJvb2tFZGl0J10uaW5jbHVkZXModG9vbE5hbWUpKSB7XG4gICAgcmV0dXJuIHsgcmlza0xldmVsOiAnbW9kZXJhdGUnLCBiZWhhdmlvcjogJ2V2YWx1YXRlJywgcmVhc29uOiBgJHt0b29sTmFtZX0gbW9kaWZpZXMgc3RhdGUsIHJlcXVpcmVzIHBvbGljeSBldmFsdWF0aW9uYCB9O1xuICB9XG5cbiAgLy8gVW5rbm93biB0b29sOiBldmFsdWF0ZSAocGVybWlzc2l2ZSBkZWZhdWx0IGZvciBQaGFzZSAxKVxuICByZXR1cm4geyByaXNrTGV2ZWw6ICdtb2RlcmF0ZScsIGJlaGF2aW9yOiAnZXZhbHVhdGUnLCByZWFzb246IGBVbmtub3duIHRvb2wgJyR7dG9vbE5hbWV9JywgcmVxdWlyZXMgcG9saWN5IGV2YWx1YXRpb25gIH07XG59XG5cbi8qKlxuICogU3ViLWNsYXNzaWZ5IEJhc2ggY29tbWFuZHMgYnkgbWF0Y2hpbmcgYWdhaW5zdCBrbm93biBwYXR0ZXJucy5cbiAqL1xuZnVuY3Rpb24gY2xhc3NpZnlCYXNoQ29tbWFuZChcbiAgdG9vbElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogVG9vbENsYXNzaWZpY2F0aW9uUmVzdWx0IHtcbiAgY29uc3QgY29tbWFuZCA9IHR5cGVvZiB0b29sSW5wdXQuY29tbWFuZCA9PT0gJ3N0cmluZycgPyB0b29sSW5wdXQuY29tbWFuZC50cmltKCkgOiAnJztcblxuICBpZiAoIWNvbW1hbmQpIHtcbiAgICByZXR1cm4geyByaXNrTGV2ZWw6ICdtb2RlcmF0ZScsIGJlaGF2aW9yOiAnZXZhbHVhdGUnLCByZWFzb246ICdFbXB0eSBCYXNoIGNvbW1hbmQnIH07XG4gIH1cblxuICAvLyBDaGVjayBibG9ja2VkIHBhdHRlcm5zIGZpcnN0IChoaWdoZXN0IHByaW9yaXR5KVxuICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgQkxPQ0tFRF9CQVNIX1BBVFRFUk5TKSB7XG4gICAgaWYgKG1hdGNoZXNQYXR0ZXJuKGNvbW1hbmQsIHBhdHRlcm4pKSB7XG4gICAgICByZXR1cm4geyByaXNrTGV2ZWw6ICdibG9ja2VkJywgYmVoYXZpb3I6ICdkZW55JywgcmVhc29uOiBgQmxvY2tlZCBjb21tYW5kIHBhdHRlcm46ICR7cGF0dGVybn1gIH07XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hlY2sgZGFuZ2Vyb3VzIHBhdHRlcm5zXG4gIGZvciAoY29uc3QgcGF0dGVybiBvZiBEQU5HRVJPVVNfQkFTSF9QQVRURVJOUykge1xuICAgIGlmIChtYXRjaGVzUGF0dGVybihjb21tYW5kLCBwYXR0ZXJuKSkge1xuICAgICAgcmV0dXJuIHsgcmlza0xldmVsOiAnZGFuZ2Vyb3VzJywgYmVoYXZpb3I6ICdkZW55JywgcmVhc29uOiBgRGFuZ2Vyb3VzIGNvbW1hbmQgcGF0dGVybjogJHtwYXR0ZXJufWAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBDaGVjayBzYWZlIHBhdHRlcm5zXG4gIGZvciAoY29uc3QgcGF0dGVybiBvZiBTQUZFX0JBU0hfUEFUVEVSTlMpIHtcbiAgICBpZiAobWF0Y2hlc1BhdHRlcm4oY29tbWFuZCwgcGF0dGVybikpIHtcbiAgICAgIHJldHVybiB7IHJpc2tMZXZlbDogJ3NhZmUnLCBiZWhhdmlvcjogJ2FsbG93JywgcmVhc29uOiBgU2FmZSBjb21tYW5kIHBhdHRlcm46ICR7cGF0dGVybn1gIH07XG4gICAgfVxuICB9XG5cbiAgLy8gVW5jbGFzc2lmaWVkOiBldmFsdWF0ZSBhZ2FpbnN0IGVsZW1lbnQgcG9saWNpZXNcbiAgcmV0dXJuIHsgcmlza0xldmVsOiAnbW9kZXJhdGUnLCBiZWhhdmlvcjogJ2V2YWx1YXRlJywgcmVhc29uOiAnQmFzaCBjb21tYW5kIG5vdCBzdGF0aWNhbGx5IGNsYXNzaWZpZWQnIH07XG59XG5cbi8vIOKUgOKUgCBSaXNrIEFzc2Vzc21lbnQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogQmFzZSByaXNrIHNjb3JlcyBieSBjbGFzc2lmaWNhdGlvbiBsZXZlbCAoMC0xMDAgc2NhbGUpLlxuICpcbiAqIFNjb3JlIHJhbmdlczpcbiAqIC0gIDA6ICAgICBzYWZlIOKAlCByZWFkLW9ubHkgdG9vbHMsIG5vIHNpZGUgZWZmZWN0c1xuICogLSAgMS0zOTogIGxvdyDigJQgbWlub3Igc2lkZSBlZmZlY3RzLCBlYXNpbHkgcmV2ZXJzaWJsZVxuICogLSA0MC01OTogIG1vZGVyYXRlIOKAlCBmaWxlIHdyaXRlcywgcGFja2FnZSBpbnN0YWxscywgdW5jbGFzc2lmaWVkIGNvbW1hbmRzXG4gKiAtIDYwLTc5OiAgZWxldmF0ZWQg4oCUIG1vZGVyYXRlICsgYWdncmF2YXRpbmcgZmFjdG9ycyAobmV0d29yaywgZmlsZSBjcmVhdGlvbilcbiAqIC0gODAtOTk6ICBkYW5nZXJvdXMg4oCUIGRlc3RydWN0aXZlIGNvbW1hbmRzLCBwcml2aWxlZ2UgZXNjYWxhdGlvblxuICogLSAxMDA6ICAgIGJsb2NrZWQg4oCUIGFsd2F5cyBkZW5pZWQgKGUuZy4sIHJldmVyc2Ugc2hlbGxzLCBkaXNrIHdpcGUpXG4gKlxuICogQWRqdXN0bWVudHMgYXBwbGllZCBvbiB0b3Agb2YgYmFzZTogaXJyZXZlcnNpYmxlIHBhdHRlcm4gKCsxMCksXG4gKiBuZXR3b3JrIG9wZXJhdGlvbiAoKzEwKSwgb3V0LW9mLXNjb3BlIHJlYWQgKCsxMCksIGZpbGUgY3JlYXRpb24gKCs1KS5cbiAqIFNjb3JlIGlzIGNhcHBlZCBhdCAxMDAuXG4gKi9cbmNvbnN0IFJJU0tfU0NPUkVTOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge1xuICBzYWZlOiAwLFxuICBtb2RlcmF0ZTogNDAsXG4gIGRhbmdlcm91czogODAsXG4gIGJsb2NrZWQ6IDEwMCxcbn07XG5cbi8qKiBSZWFkLW9ubHkgdG9vbHMgdGhhdCBtYXkgcmVmZXJlbmNlIGZpbGUgcGF0aHMgKi9cbmNvbnN0IFNBRkVfUkVBRF9UT09MUyA9IG5ldyBTZXQoWydSZWFkJywgJ0dyZXAnLCAnR2xvYiddKTtcblxuLyoqIFNlbnNpdGl2ZSBwYXRoIHByZWZpeGVzIHRoYXQgaW5kaWNhdGUgb3V0LW9mLXNjb3BlIHJlYWRzICovXG5jb25zdCBTRU5TSVRJVkVfUEFUSF9QUkVGSVhFUyA9IFtcbiAgJ34vLnNzaC8nLCAnfi8uZ251cGcvJywgJ34vLmF3cy8nLCAnfi8uY29uZmlnLycsXG4gICd+Ly5lbnYnLCAnfi8ubmV0cmMnLCAnfi8ubnBtcmMnLFxuICAnL2V0Yy9zaGFkb3cnLCAnL2V0Yy9wYXNzd2QnLCAnL2V0Yy9zdWRvZXJzJyxcbiAgJy9wcm9jLycsICcvc3lzLycsXG5dO1xuXG4vKipcbiAqIEhldXJpc3RpYzogZG9lcyBhIHBhdGggbG9vayBsaWtlIGl0IHRhcmdldHMgZmlsZXMgb3V0c2lkZSB0aGUgcHJvamVjdCBzY29wZT9cbiAqIENoZWNrcyBmb3IgaG9tZS1kaXJlY3Rvcnkgc2Vuc2l0aXZlIHBhdGhzLCBzeXN0ZW0gcGF0aHMsIGFuZCBwYXJlbnQgdHJhdmVyc2Fscy5cbiAqL1xuZnVuY3Rpb24gaXNPdXRPZlNjb3BlUGF0aCh0YXJnZXRQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHRhcmdldFBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXG4gIC8vIEV4cGxpY2l0IHNlbnNpdGl2ZSBwYXRoc1xuICBmb3IgKGNvbnN0IHByZWZpeCBvZiBTRU5TSVRJVkVfUEFUSF9QUkVGSVhFUykge1xuICAgIGlmIChub3JtYWxpemVkLnN0YXJ0c1dpdGgocHJlZml4KSB8fCBub3JtYWxpemVkLmluY2x1ZGVzKGAvJHtwcmVmaXh9YCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhvbWUgZGlyZWN0b3J5IHJlZmVyZW5jZXMgKH4vLi4uKSB0aGF0IGFyZW4ndCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdFxuICBpZiAobm9ybWFsaXplZC5zdGFydHNXaXRoKCd+LycpIHx8IG5vcm1hbGl6ZWQuc3RhcnRzV2l0aCgnL1VzZXJzLycpIHx8IG5vcm1hbGl6ZWQuc3RhcnRzV2l0aCgnL2hvbWUvJykpIHtcbiAgICAvLyBIZXVyaXN0aWM6IHJlYWRpbmcgc2Vuc2l0aXZlIGRvdGZpbGVzL2RpcnMgb3V0c2lkZSBhIHByb2plY3QuXG4gICAgLy8gVGFyZ2V0cyBrbm93biBjcmVkZW50aWFsL2NvbmZpZyBzdG9yZXMg4oCUIGF2b2lkcyBmYWxzZSBwb3NpdGl2ZXMgZm9yXG4gICAgLy8gY29tbW9uIHByb2plY3QgZG90ZmlsZXMgbGlrZSAuZ2l0aHViLywgLnZzY29kZS8sIC5lc2xpbnRyYywgZXRjLlxuICAgIGlmICgvXFwvXFwuKHNzaHxnbnVwZ3xhd3N8YXp1cmV8Z2Nsb3VkfGt1YmV8ZG9ja2VyfG5wbXJjfG5ldHJjfGVudnxiYXNoX2hpc3Rvcnl8enNoX2hpc3Rvcnl8Y3JlZGVudGlhbHN8cGFzc3dvcmR8c2VjcmV0KS9pLnRlc3Qobm9ybWFsaXplZCkpIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKiogQmFzaCBjb21tYW5kIHBhdHRlcm5zIHRoYXQgYXJlIGlycmV2ZXJzaWJsZSAqL1xuY29uc3QgSVJSRVZFUlNJQkxFX1BBVFRFUk5TID0gW1xuICAncm0gLXJmIConLFxuICAncm0gLWZyIConLFxuICAnZ2l0IHB1c2ggLS1mb3JjZSonLFxuICAnZ2l0IHB1c2ggLWYgKicsXG4gICdnaXQgcmVzZXQgLS1oYXJkKicsXG4gICdnaXQgY2xlYW4gLWYqJyxcbiAgJ21rZnMqJyxcbiAgJ2RkIGlmPSonLFxuICAnZHJvcCAqJyxcbiAgJ3RydW5jYXRlIConLFxuXTtcblxuLyoqXG4gKiBBc3Nlc3MgdGhlIHJpc2sgb2YgYSBDTEkgdG9vbCBjYWxsLlxuICpcbiAqIFJldHVybnMgYSBudW1lcmljIHNjb3JlICgwLTEwMCkgYW5kIGlycmV2ZXJzaWJpbGl0eSBpbmRpY2F0b3IgYmFzZWQgb25cbiAqIHRoZSBzdGF0aWMgY2xhc3NpZmljYXRpb24gYW5kIHRvb2wtc3BlY2lmaWMgaGV1cmlzdGljcy5cbiAqXG4gKiBAcGFyYW0gdG9vbE5hbWUgLSBUaGUgdG9vbCBiZWluZyBjYWxsZWRcbiAqIEBwYXJhbSB0b29sSW5wdXQgLSBUaGUgdG9vbCBpbnB1dCBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gY2xhc3NpZmljYXRpb24gLSBUaGUgcmVzdWx0IGZyb20gY2xhc3NpZnlUb29sKClcbiAqIEByZXR1cm5zIFJpc2sgYXNzZXNzbWVudCB3aXRoIHNjb3JlLCBpcnJldmVyc2liaWxpdHksIGFuZCBjb250cmlidXRpbmcgZmFjdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXNzUmlzayhcbiAgdG9vbE5hbWU6IHN0cmluZyxcbiAgdG9vbElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgY2xhc3NpZmljYXRpb246IFRvb2xDbGFzc2lmaWNhdGlvblJlc3VsdFxuKTogUmlza0Fzc2Vzc21lbnQge1xuICBsZXQgc2NvcmUgPSBSSVNLX1NDT1JFU1tjbGFzc2lmaWNhdGlvbi5yaXNrTGV2ZWxdID8/IDQwO1xuICBjb25zdCBmYWN0b3JzOiBzdHJpbmdbXSA9IFtgQmFzZTogJHtjbGFzc2lmaWNhdGlvbi5yaXNrTGV2ZWx9ICgke1JJU0tfU0NPUkVTW2NsYXNzaWZpY2F0aW9uLnJpc2tMZXZlbF0gPz8gNDB9KWBdO1xuICBsZXQgaXJyZXZlcnNpYmxlID0gZmFsc2U7XG5cbiAgLy8gQ2hlY2sgZm9yIGlycmV2ZXJzaWJsZSBwYXR0ZXJucyBpbiBCYXNoIGNvbW1hbmRzXG4gIGlmICh0b29sTmFtZSA9PT0gJ0Jhc2gnICYmIHR5cGVvZiB0b29sSW5wdXQuY29tbWFuZCA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBjb21tYW5kID0gdG9vbElucHV0LmNvbW1hbmQudHJpbSgpO1xuICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBJUlJFVkVSU0lCTEVfUEFUVEVSTlMpIHtcbiAgICAgIGlmIChtYXRjaGVzUGF0dGVybihjb21tYW5kLCBwYXR0ZXJuKSkge1xuICAgICAgICBpcnJldmVyc2libGUgPSB0cnVlO1xuICAgICAgICBzY29yZSA9IE1hdGgubWluKDEwMCwgc2NvcmUgKyAxMCk7XG4gICAgICAgIGZhY3RvcnMucHVzaChgSXJyZXZlcnNpYmxlIHBhdHRlcm46ICR7cGF0dGVybn0gKCsxMClgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTmV0d29yayBvcGVyYXRpb25zIGluY3JlYXNlIHJpc2tcbiAgICBpZiAoL1xcYihjdXJsfHdnZXR8ZmV0Y2h8bmN8bmV0Y2F0fG5jYXR8c29jYXQpXFxiLy50ZXN0KGNvbW1hbmQpKSB7XG4gICAgICBzY29yZSA9IE1hdGgubWluKDEwMCwgc2NvcmUgKyAxMCk7XG4gICAgICBmYWN0b3JzLnB1c2goJ05ldHdvcmsgb3BlcmF0aW9uICgrMTApJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gV3JpdGUvRWRpdCBvcGVyYXRpb25zOiBmaWxlIGNyZWF0aW9uIGluY3JlYXNlcyByaXNrIHNsaWdodGx5XG4gIGlmICh0b29sTmFtZSA9PT0gJ1dyaXRlJykge1xuICAgIHNjb3JlID0gTWF0aC5taW4oMTAwLCBzY29yZSArIDUpO1xuICAgIGZhY3RvcnMucHVzaCgnRmlsZSBjcmVhdGlvbiAoKzUpJyk7XG4gIH1cblxuICAvLyBSZWFkLW9ubHkgdG9vbHMgdGFyZ2V0aW5nIHBhdGhzIG91dHNpZGUgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LlxuICAvLyBNb3N0IGNsaWVudHMgYWxyZWFkeSBlbmZvcmNlIGRpcmVjdG9yeSBzY29waW5nLCBidXQgdGhpcyBwcm92aWRlcyBhblxuICAvLyBhZGRpdGlvbmFsIHNpZ25hbCBmb3IgYXBwcm92YWwgcG9saWNpZXMgdG8gYWN0IG9uLlxuICBpZiAoU0FGRV9SRUFEX1RPT0xTLmhhcyh0b29sTmFtZSkpIHtcbiAgICBjb25zdCB0YXJnZXRQYXRoID0gKHRvb2xJbnB1dC5maWxlX3BhdGggPz8gdG9vbElucHV0LnBhdGggPz8gJycpIGFzIHN0cmluZztcbiAgICBpZiAodGFyZ2V0UGF0aCAmJiBpc091dE9mU2NvcGVQYXRoKHRhcmdldFBhdGgpKSB7XG4gICAgICBzY29yZSA9IE1hdGgubWluKDEwMCwgc2NvcmUgKyAxMCk7XG4gICAgICBmYWN0b3JzLnB1c2goJ091dC1vZi1zY29wZSByZWFkIHBhdGggKCsxMCknKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBzY29yZSwgaXJyZXZlcnNpYmxlLCBmYWN0b3JzIH07XG59XG5cbi8vIOKUgOKUgCBTdGF0aWMgUG9saWN5IERhdGEgRXhwb3J0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFJldHVybiBhbGwgc3RhdGljIGNsYXNzaWZpY2F0aW9uIGRhdGEgZm9yIGJyaWRnZSBwb2xpY3kgZXhwb3J0LlxuICpcbiAqIFVzZWQgYnkgUG9saWN5RXhwb3J0U2VydmljZSB0byB3cml0ZSB0aGUgYnJpZGdlLWNvbXBhdGlibGUgcG9saWN5IGZpbGUuXG4gKiBBbGwgZGF0YSBpcyByZXR1cm5lZCBhcyBwbGFpbiBhcnJheXMvb2JqZWN0cyAobm8gU2V0cykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGF0aWNQb2xpY3lEYXRhKCkge1xuICByZXR1cm4ge1xuICAgIHNhZmVfdG9vbHM6IFsuLi5TQUZFX1RPT0xTXSxcbiAgICBzYWZlX2Jhc2hfcGF0dGVybnM6IFsuLi5TQUZFX0JBU0hfUEFUVEVSTlNdLFxuICAgIGRhbmdlcm91c19iYXNoX3BhdHRlcm5zOiBbLi4uREFOR0VST1VTX0JBU0hfUEFUVEVSTlNdLFxuICAgIGJsb2NrZWRfYmFzaF9wYXR0ZXJuczogWy4uLkJMT0NLRURfQkFTSF9QQVRURVJOU10sXG4gICAgaXJyZXZlcnNpYmxlX3BhdHRlcm5zOiBbLi4uSVJSRVZFUlNJQkxFX1BBVFRFUk5TXSxcbiAgICBzZW5zaXRpdmVfcGF0aF9wcmVmaXhlczogWy4uLlNFTlNJVElWRV9QQVRIX1BSRUZJWEVTXSxcbiAgICBnYXRla2VlcGVyX2Vzc2VudGlhbF9vcGVyYXRpb25zOiBbLi4uR0FURUtFRVBFUl9FU1NFTlRJQUxfT1BFUkFUSU9OU10sXG4gICAgc2FmZV9tY3Bfb3BlcmF0aW9uczogWy4uLlNBRkVfTUNQX09QRVJBVElPTlNdLFxuICAgIHJpc2tfc2NvcmVzOiB7IC4uLlJJU0tfU0NPUkVTIH0sXG4gIH07XG59XG5cbi8vIOKUgOKUgCBFbGVtZW50IFBvbGljeSBFdmFsdWF0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIEV2YWx1YXRlIGEgQ0xJIHRvb2wgY2FsbCBhZ2FpbnN0IGFjdGl2ZSBlbGVtZW50IGdhdGVrZWVwZXIgcG9saWNpZXMuXG4gKlxuICogRm91ci1zdGVwIGV2YWx1YXRpb24gcGVyIGVsZW1lbnQgKElzc3VlICM2MjUgUGhhc2UgMiwgSXNzdWUgIzE2NjApOlxuICogMS4gZGVueVBhdHRlcm5zIChoaWdoZXN0IHByaW9yaXR5KSDigJQgZmlyc3QgbWF0Y2ggPSBpbW1lZGlhdGUgZGVueVxuICogMS41LiBjb25maXJtUGF0dGVybnMg4oCUIGZpcnN0IG1hdGNoID0gaW1tZWRpYXRlIGNvbmZpcm0gKHJlcXVpcmVzIGFwcHJvdmFsKVxuICogMi4gYWxsb3dQYXR0ZXJucyDigJQgaWYgZWxlbWVudCBkZWZpbmVzIHRoZW0sIHJlY29yZCB3aGV0aGVyIHRvb2wgbWF0Y2hlZFxuICogMy4gQWZ0ZXIgYWxsIGVsZW1lbnRzOiBpZiBhbnkgaGFkIGFsbG93UGF0dGVybnMgYnV0IHRvb2wgd2Fzbid0IGFsbG93ZWQgYnkgYW55ID0gZGVueVxuICpcbiAqIFVuaW9uIHNlbWFudGljczogdG9vbCBtdXN0IG1hdGNoIGF0IGxlYXN0IE9ORSBlbGVtZW50J3MgYWxsb3dQYXR0ZXJucyAobm90IGFsbCkuXG4gKiBFbGVtZW50cyB3aXRob3V0IGFsbG93UGF0dGVybnMgZG9uJ3QgcmVzdHJpY3QuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRvb2wgbWF0Y2hlcyBhbGxvd1BhdHRlcm5zIGluIGVsZW1lbnQgQSBidXQgbm90IEIg4oaSIEFMTE9XRUQgKHVuaW9uIHNlbWFudGljcylcbiAqIC8vIFRvb2wgbWF0Y2hlcyBkZW55UGF0dGVybnMgaW4gYW55IGVsZW1lbnQg4oaSIERFTklFRCAoZGVueSBhbHdheXMgd2lucylcbiAqIC8vIFRvb2wgbWF0Y2hlcyBubyBhbGxvd1BhdHRlcm5zIGJ1dCBzb21lIGV4aXN0IOKGkiBERU5JRUQgKFwibm90IGluIGFueSBhbGxvd2xpc3RcIilcbiAqIC8vIE5vIGFsbG93UGF0dGVybnMgZGVmaW5lZCBhbnl3aGVyZSDihpIgUGhhc2UgMSBiZWhhdmlvciAoZmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQpXG4gKlxuICogQHJldHVybnMgJ2RlbnknIGlmIGJsb2NrZWQsICdldmFsdWF0ZScgaWYgcGVybWl0dGVkIHRvIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmFsdWF0ZUNsaVRvb2xQb2xpY3koXG4gIHRvb2xOYW1lOiBzdHJpbmcsXG4gIHRvb2xJbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGFjdGl2ZUVsZW1lbnRzOiBBY3RpdmVFbGVtZW50W11cbik6IENsaVRvb2xQb2xpY3lSZXN1bHQge1xuICBjb25zdCBldmFsdWF0ZWRFbGVtZW50czogUG9saWN5RXZhbHVhdGlvbkNvbnRleHRbJ2V2YWx1YXRlZEVsZW1lbnRzJ10gPSBbXTtcbiAgY29uc3QgZGVjaXNpb25DaGFpbjogc3RyaW5nW10gPSBbXTtcblxuICBjb25zdCBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcblxuICBpZiAoIWFjdGl2ZUVsZW1lbnRzLmxlbmd0aCkge1xuICAgIGRlY2lzaW9uQ2hhaW4ucHVzaCgnTm8gYWN0aXZlIGVsZW1lbnRzIOKAlCBmYWxsIHRocm91Z2ggdG8gZGVmYXVsdCcpO1xuICAgIGxvZ2dlci5kZWJ1ZyhgW0NsaVBvbGljeV0gJHt0b29sTmFtZX06IG5vIGFjdGl2ZSBlbGVtZW50cywgZmFsbCB0aHJvdWdoIHRvIGRlZmF1bHRgKTtcbiAgICByZXR1cm4ge1xuICAgICAgYmVoYXZpb3I6ICdldmFsdWF0ZScsXG4gICAgICBwb2xpY3lDb250ZXh0OiB7IGV2YWx1YXRlZEVsZW1lbnRzLCBkZWNpc2lvbkNoYWluIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIEJ1aWxkIHRoZSBzdHJpbmdzIHRvIG1hdGNoIGFnYWluc3QgcGF0dGVybnNcbiAgY29uc3QgbWF0Y2hUYXJnZXRzID0gYnVpbGRNYXRjaFRhcmdldHModG9vbE5hbWUsIHRvb2xJbnB1dCk7XG4gIGNvbnN0IGVsZW1lbnRUeXBlU3VtbWFyeSA9IHN1bW1hcml6ZUVsZW1lbnRUeXBlcyhhY3RpdmVFbGVtZW50cyk7XG4gIGxvZ2dlci5kZWJ1ZyhgW0NsaVBvbGljeV0gRXZhbHVhdGluZyAke3Rvb2xOYW1lfSBhZ2FpbnN0ICR7YWN0aXZlRWxlbWVudHMubGVuZ3RofSBlbGVtZW50cyAoJHtlbGVtZW50VHlwZVN1bW1hcnl9KSwgbWF0Y2hUYXJnZXRzOiBbJHttYXRjaFRhcmdldHMuam9pbignLCAnKX1dYCk7XG5cbiAgbGV0IGFueUVsZW1lbnRIYXNBbGxvd1BhdHRlcm5zID0gZmFsc2U7XG4gIGxldCB0b29sQWxsb3dlZEJ5QW55RWxlbWVudCA9IGZhbHNlO1xuICBjb25zdCBlbGVtZW50c1dpdGhBbGxvd1BhdHRlcm5zOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBhY3RpdmVFbGVtZW50cykge1xuICAgIGNvbnN0IHJlc3RyaWN0aW9ucyA9IGVsZW1lbnQubWV0YWRhdGE/LmdhdGVrZWVwZXI/LmV4dGVybmFsUmVzdHJpY3Rpb25zO1xuICAgIGNvbnN0IGRlbnlQYXR0ZXJucyA9IHJlc3RyaWN0aW9ucz8uZGVueVBhdHRlcm5zO1xuICAgIGNvbnN0IGNvbmZpcm1QYXR0ZXJucyA9IHJlc3RyaWN0aW9ucz8uY29uZmlybVBhdHRlcm5zO1xuICAgIGNvbnN0IGFsbG93UGF0dGVybnMgPSByZXN0cmljdGlvbnM/LmFsbG93UGF0dGVybnM7XG5cbiAgICBjb25zdCBoYXNSZXN0cmljdGlvbnMgPSAoQXJyYXkuaXNBcnJheShkZW55UGF0dGVybnMpICYmIGRlbnlQYXR0ZXJucy5sZW5ndGggPiAwKVxuICAgICAgfHwgKEFycmF5LmlzQXJyYXkoY29uZmlybVBhdHRlcm5zKSAmJiBjb25maXJtUGF0dGVybnMubGVuZ3RoID4gMClcbiAgICAgIHx8IChBcnJheS5pc0FycmF5KGFsbG93UGF0dGVybnMpICYmIGFsbG93UGF0dGVybnMubGVuZ3RoID4gMCk7XG5cbiAgICBpZiAoIWhhc1Jlc3RyaWN0aW9ucykge1xuICAgICAgZXZhbHVhdGVkRWxlbWVudHMucHVzaCh7IHR5cGU6IGVsZW1lbnQudHlwZSwgbmFtZTogZWxlbWVudC5uYW1lIH0pO1xuICAgICAgZGVjaXNpb25DaGFpbi5wdXNoKGAke2VsZW1lbnQudHlwZX0gJyR7ZWxlbWVudC5uYW1lfSc6IG5vIGV4dGVybmFsUmVzdHJpY3Rpb25zYCk7XG4gICAgICBsb2dnZXIuZGVidWcoYFtDbGlQb2xpY3ldICR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9Jzogbm8gZXh0ZXJuYWxSZXN0cmljdGlvbnMsIHNraXBwaW5nYCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoYFtDbGlQb2xpY3ldICR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9JzogZXZhbHVhdGluZyAoZGVueTogJHtBcnJheS5pc0FycmF5KGRlbnlQYXR0ZXJucykgPyBkZW55UGF0dGVybnMubGVuZ3RoIDogMH0sIGNvbmZpcm06ICR7QXJyYXkuaXNBcnJheShjb25maXJtUGF0dGVybnMpID8gY29uZmlybVBhdHRlcm5zLmxlbmd0aCA6IDB9LCBhbGxvdzogJHtBcnJheS5pc0FycmF5KGFsbG93UGF0dGVybnMpID8gYWxsb3dQYXR0ZXJucy5sZW5ndGggOiAwfSBwYXR0ZXJucylgKTtcblxuICAgIC8vIFN0ZXAgMTogQ2hlY2sgZGVueVBhdHRlcm5zIChoaWdoZXN0IHByaW9yaXR5KVxuICAgIGlmIChBcnJheS5pc0FycmF5KGRlbnlQYXR0ZXJucykpIHtcbiAgICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBkZW55UGF0dGVybnMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXR0ZXJuICE9PSAnc3RyaW5nJykgY29udGludWU7XG4gICAgICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIG1hdGNoVGFyZ2V0cykge1xuICAgICAgICAgIGlmIChtYXRjaGVzUGF0dGVybih0YXJnZXQsIHBhdHRlcm4pKSB7XG4gICAgICAgICAgICBldmFsdWF0ZWRFbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgdHlwZTogZWxlbWVudC50eXBlLFxuICAgICAgICAgICAgICBuYW1lOiBlbGVtZW50Lm5hbWUsXG4gICAgICAgICAgICAgIG1hdGNoZWQ6ICdkZW55UGF0dGVybnMnLFxuICAgICAgICAgICAgICBtYXRjaGVkUGF0dGVybjogcGF0dGVybixcbiAgICAgICAgICAgICAgbWF0Y2hlZFRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkZWNpc2lvbkNoYWluLnB1c2goYERFTlk6ICR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9JyBkZW55UGF0dGVybiAnJHtwYXR0ZXJufScgbWF0Y2hlcyAnJHt0YXJnZXR9J2ApO1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQ2xpUG9saWN5XSBERU5ZOiAke2VsZW1lbnQudHlwZX0gJyR7ZWxlbWVudC5uYW1lfScgZGVueVBhdHRlcm4gJyR7cGF0dGVybn0nIG1hdGNoZWQgJyR7dGFyZ2V0fScgKCR7ZWxhcHNlZChzdGFydFRpbWUpfSlgKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGJlaGF2aW9yOiAnZGVueScsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBEZW5pZWQgYnkgJHtlbGVtZW50LnR5cGV9ICcke2VsZW1lbnQubmFtZX0nIHBvbGljeTogcGF0dGVybiAnJHtwYXR0ZXJufScgbWF0Y2hlcyAnJHt0YXJnZXR9J2AsXG4gICAgICAgICAgICAgIHBvbGljeUNvbnRleHQ6IHsgZXZhbHVhdGVkRWxlbWVudHMsIGRlY2lzaW9uQ2hhaW4gfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3RlcCAxLjU6IENoZWNrIGNvbmZpcm1QYXR0ZXJucyAocmVxdWlyZXMgYXBwcm92YWwg4oCUIElzc3VlICMxNjYwKVxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbmZpcm1QYXR0ZXJucykgJiYgY29uZmlybVBhdHRlcm5zLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBjb25maXJtUGF0dGVybnMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXR0ZXJuICE9PSAnc3RyaW5nJykgY29udGludWU7XG4gICAgICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIG1hdGNoVGFyZ2V0cykge1xuICAgICAgICAgIGlmIChtYXRjaGVzUGF0dGVybih0YXJnZXQsIHBhdHRlcm4pKSB7XG4gICAgICAgICAgICBldmFsdWF0ZWRFbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgdHlwZTogZWxlbWVudC50eXBlLFxuICAgICAgICAgICAgICBuYW1lOiBlbGVtZW50Lm5hbWUsXG4gICAgICAgICAgICAgIG1hdGNoZWQ6ICdjb25maXJtUGF0dGVybnMnLFxuICAgICAgICAgICAgICBtYXRjaGVkUGF0dGVybjogcGF0dGVybixcbiAgICAgICAgICAgICAgbWF0Y2hlZFRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkZWNpc2lvbkNoYWluLnB1c2goYENPTkZJUk06ICR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9JyBjb25maXJtUGF0dGVybiAnJHtwYXR0ZXJufScgbWF0Y2hlcyAnJHt0YXJnZXR9J2ApO1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQ2xpUG9saWN5XSBDT05GSVJNOiAke2VsZW1lbnQudHlwZX0gJyR7ZWxlbWVudC5uYW1lfScgY29uZmlybVBhdHRlcm4gJyR7cGF0dGVybn0nIG1hdGNoZWQgJyR7dGFyZ2V0fScgKCR7ZWxhcHNlZChzdGFydFRpbWUpfSlgKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGJlaGF2aW9yOiAnY29uZmlybScgYXMgY29uc3QsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBSZXF1aXJlcyBhcHByb3ZhbDogJHtlbGVtZW50LnR5cGV9ICcke2VsZW1lbnQubmFtZX0nIHBvbGljeSByZXF1aXJlcyBjb25maXJtYXRpb24gZm9yIHBhdHRlcm4gJyR7cGF0dGVybn0nYCxcbiAgICAgICAgICAgICAgY29uZmlybVNvdXJjZTogYCR7ZWxlbWVudC50eXBlfToke2VsZW1lbnQubmFtZX1gLFxuICAgICAgICAgICAgICBwb2xpY3lDb250ZXh0OiB7IGV2YWx1YXRlZEVsZW1lbnRzLCBkZWNpc2lvbkNoYWluIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFN0ZXAgMjogQ2hlY2sgYWxsb3dQYXR0ZXJuc1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFsbG93UGF0dGVybnMpICYmIGFsbG93UGF0dGVybnMubGVuZ3RoID4gMCkge1xuICAgICAgYW55RWxlbWVudEhhc0FsbG93UGF0dGVybnMgPSB0cnVlO1xuICAgICAgZWxlbWVudHNXaXRoQWxsb3dQYXR0ZXJucy5wdXNoKGAke2VsZW1lbnQudHlwZX0gJyR7ZWxlbWVudC5uYW1lfSdgKTtcbiAgICAgIGxldCBtYXRjaGVkQWxsb3cgPSBmYWxzZTtcblxuICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIGFsbG93UGF0dGVybnMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXR0ZXJuICE9PSAnc3RyaW5nJykgY29udGludWU7XG4gICAgICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIG1hdGNoVGFyZ2V0cykge1xuICAgICAgICAgIGlmIChtYXRjaGVzUGF0dGVybih0YXJnZXQsIHBhdHRlcm4pKSB7XG4gICAgICAgICAgICBldmFsdWF0ZWRFbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgdHlwZTogZWxlbWVudC50eXBlLFxuICAgICAgICAgICAgICBuYW1lOiBlbGVtZW50Lm5hbWUsXG4gICAgICAgICAgICAgIG1hdGNoZWQ6ICdhbGxvd1BhdHRlcm5zJyxcbiAgICAgICAgICAgICAgbWF0Y2hlZFBhdHRlcm46IHBhdHRlcm4sXG4gICAgICAgICAgICAgIG1hdGNoZWRUYXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGVjaXNpb25DaGFpbi5wdXNoKGAke2VsZW1lbnQudHlwZX0gJyR7ZWxlbWVudC5uYW1lfSc6IGFsbG93UGF0dGVybiAnJHtwYXR0ZXJufScgbWF0Y2hlcyAnJHt0YXJnZXR9J2ApO1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBbQ2xpUG9saWN5XSBBTExPVzogJHtlbGVtZW50LnR5cGV9ICcke2VsZW1lbnQubmFtZX0nIGFsbG93UGF0dGVybiAnJHtwYXR0ZXJufScgbWF0Y2hlZCAnJHt0YXJnZXR9J2ApO1xuICAgICAgICAgICAgdG9vbEFsbG93ZWRCeUFueUVsZW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgbWF0Y2hlZEFsbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hlZEFsbG93KSBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKCFtYXRjaGVkQWxsb3cpIHtcbiAgICAgICAgZXZhbHVhdGVkRWxlbWVudHMucHVzaCh7IHR5cGU6IGVsZW1lbnQudHlwZSwgbmFtZTogZWxlbWVudC5uYW1lIH0pO1xuICAgICAgICBkZWNpc2lvbkNoYWluLnB1c2goYCR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9JzogYWxsb3dQYXR0ZXJucyBkZWZpbmVkIGJ1dCBubyBtYXRjaGApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBldmFsdWF0ZWRFbGVtZW50cy5wdXNoKHsgdHlwZTogZWxlbWVudC50eXBlLCBuYW1lOiBlbGVtZW50Lm5hbWUgfSk7XG4gICAgICBkZWNpc2lvbkNoYWluLnB1c2goYCR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9JzogZGVueVBhdHRlcm5zIGNoZWNrZWQsIG5vIG1hdGNoYCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU3RlcCAzOiBJZiBhbnkgZWxlbWVudCBoYWQgYWxsb3dQYXR0ZXJucywgdG9vbCBtdXN0IGhhdmUgbWF0Y2hlZCBhdCBsZWFzdCBvbmVcbiAgaWYgKGFueUVsZW1lbnRIYXNBbGxvd1BhdHRlcm5zICYmICF0b29sQWxsb3dlZEJ5QW55RWxlbWVudCkge1xuICAgIGNvbnN0IHJlc3RyaWN0b3JzID0gZWxlbWVudHNXaXRoQWxsb3dQYXR0ZXJucy5qb2luKCcsICcpO1xuICAgIGRlY2lzaW9uQ2hhaW4ucHVzaChgREVOWTogdG9vbCBub3QgaW4gYW55IGVsZW1lbnQgYWxsb3dsaXN0IChyZXN0cmljdGVkIGJ5OiAke3Jlc3RyaWN0b3JzfSlgKTtcbiAgICBsb2dnZXIuZGVidWcoYFtDbGlQb2xpY3ldIERFTlk6ICR7dG9vbE5hbWV9IG5vdCBpbiBhbnkgYWxsb3dsaXN0IChyZXN0cmljdGVkIGJ5OiAke3Jlc3RyaWN0b3JzfSkgKCR7ZWxhcHNlZChzdGFydFRpbWUpfSlgKTtcbiAgICByZXR1cm4ge1xuICAgICAgYmVoYXZpb3I6ICdkZW55JyxcbiAgICAgIG1lc3NhZ2U6IGBUb29sICcke3Rvb2xOYW1lfScgbm90IHBlcm1pdHRlZCBieSBhbGxvd2xpc3RzIGRlZmluZWQgaW46ICR7cmVzdHJpY3RvcnN9LiBFaXRoZXIgZGVhY3RpdmF0ZSB0aGVzZSBlbGVtZW50cyBvciBhZGQgYWxsb3dQYXR0ZXJucyB0byBtYXRjaCB0aGlzIHRvb2wuYCxcbiAgICAgIHBvbGljeUNvbnRleHQ6IHsgZXZhbHVhdGVkRWxlbWVudHMsIGRlY2lzaW9uQ2hhaW4gfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGFueUVsZW1lbnRIYXNBbGxvd1BhdHRlcm5zKSB7XG4gICAgZGVjaXNpb25DaGFpbi5wdXNoKCdUb29sIG1hdGNoZWQgYWxsb3dsaXN0IOKAlCBmYWxsIHRocm91Z2ggdG8gZGVmYXVsdCcpO1xuICAgIGxvZ2dlci5kZWJ1ZyhgW0NsaVBvbGljeV0gJHt0b29sTmFtZX06IG1hdGNoZWQgYWxsb3dsaXN0LCBmYWxsIHRocm91Z2ggdG8gZGVmYXVsdCAoJHtlbGFwc2VkKHN0YXJ0VGltZSl9KWApO1xuICB9IGVsc2Uge1xuICAgIGRlY2lzaW9uQ2hhaW4ucHVzaCgnTm8gYWxsb3dQYXR0ZXJucyBkZWZpbmVkIOKAlCBmYWxsIHRocm91Z2ggdG8gZGVmYXVsdCAoUGhhc2UgMSBiZWhhdmlvciknKTtcbiAgICBsb2dnZXIuZGVidWcoYFtDbGlQb2xpY3ldICR7dG9vbE5hbWV9OiBubyBhbGxvd1BhdHRlcm5zIGRlZmluZWQsIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0ICgke2VsYXBzZWQoc3RhcnRUaW1lKX0pYCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGJlaGF2aW9yOiAnZXZhbHVhdGUnLFxuICAgIHBvbGljeUNvbnRleHQ6IHsgZXZhbHVhdGVkRWxlbWVudHMsIGRlY2lzaW9uQ2hhaW4gfSxcbiAgfTtcbn1cblxuLyoqIEZvcm1hdCBlbGFwc2VkIHRpbWUgc2luY2Ugc3RhcnRUaW1lIGluIG1pbGxpc2Vjb25kcy4gKi9cbmZ1bmN0aW9uIGVsYXBzZWQoc3RhcnRUaW1lOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7KHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lKS50b0ZpeGVkKDIpfW1zYDtcbn1cblxuLyoqIFN1bW1hcml6ZSBhY3RpdmUgZWxlbWVudCB0eXBlcyBmb3IgdGhlIGVudHJ5IGxvZyAoZS5nLiwgXCIzIHBlcnNvbmFzLCAyIHNraWxscywgMSBlbnNlbWJsZVwiKS4gKi9cbmZ1bmN0aW9uIHN1bW1hcml6ZUVsZW1lbnRUeXBlcyhlbGVtZW50czogQWN0aXZlRWxlbWVudFtdKTogc3RyaW5nIHtcbiAgY29uc3QgY291bnRzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgZm9yIChjb25zdCBlbCBvZiBlbGVtZW50cykge1xuICAgIGNvdW50cy5zZXQoZWwudHlwZSwgKGNvdW50cy5nZXQoZWwudHlwZSkgPz8gMCkgKyAxKTtcbiAgfVxuICByZXR1cm4gWy4uLmNvdW50cy5lbnRyaWVzKCldLm1hcCgoW3R5cGUsIGNvdW50XSkgPT4gYCR7Y291bnR9ICR7dHlwZX0ke2NvdW50ID4gMSA/ICdzJyA6ICcnfWApLmpvaW4oJywgJyk7XG59XG5cbi8qKlxuICogTWF4aW11bSBpbnB1dCBsZW5ndGggZm9yIHBhdHRlcm4gbWF0Y2hpbmcgdGFyZ2V0cy5cbiAqIFRydW5jYXRlcyBsb25nIGNvbW1hbmRzL3BhdGhzIHRvIHByZXZlbnQgRG9TIHZpYSBwYXRob2xvZ2ljYWwgZ2xvYiBtYXRjaGluZy5cbiAqL1xuY29uc3QgTUFYX01BVENIX0lOUFVUX0xFTkdUSCA9IDEwMDA7XG5cbi8qKlxuICogU3RyaXAgbnVsbCBieXRlcywgY29udHJvbCBjaGFyYWN0ZXJzLCBhbmQgbm9ybWFsaXplIFVuaWNvZGUgZm9yIG1hdGNoIGlucHV0LlxuICogUHJlc2VydmVzIHRhYiAoXFx4MDkpLCBuZXdsaW5lIChcXHgwQSksIGNhcnJpYWdlIHJldHVybiAoXFx4MEQpLlxuICogUHJldmVudHMgcGF0dGVybiBieXBhc3MgdmlhIGluamVjdGVkIGNvbnRyb2wgY2hhcmFjdGVycyBvciBVbmljb2RlXG4gKiBub3JtYWxpemF0aW9uIGF0dGFja3MgKGUuZy4sIGNvbWJpbmluZyBjaGFyYWN0ZXJzIHRoYXQgbG9vayBsaWtlIEFTQ0lJKS5cbiAqL1xuZnVuY3Rpb24gc2FuaXRpemVNYXRjaElucHV0KGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBOb3JtYWxpemUgVW5pY29kZSB0byBORkMgKGNhbm9uaWNhbCBkZWNvbXBvc2l0aW9uIHRoZW4gY29tcG9zaXRpb24pLlxuICAvLyBUaGlzIHByZXZlbnRzIGJ5cGFzcyB2aWEgY29tYmluaW5nIGNoYXJhY3RlcnMgb3IgYWx0ZXJuYXRpdmUgcmVwcmVzZW50YXRpb25zLlxuICBjb25zdCBub3JtYWxpemVkID0gaW5wdXQubm9ybWFsaXplKCdORkMnKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgcmV0dXJuIG5vcm1hbGl6ZWQucmVwbGFjZSgvW1xceDAwLVxceDA4XFx4MEJcXHgwQ1xceDBFLVxceDFGXFx4N0YtXFx4OUZdL2csICcnKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBtYXRjaCB0YXJnZXQgc3RyaW5ncyBmb3IgYSB0b29sIGNhbGwuXG4gKlxuICogRm9yIEJhc2g6IG1hdGNoZXMgYWdhaW5zdCB0aGUgdG9vbCBuYW1lIGFuZCBcIkJhc2g6PGNvbW1hbmQ+XCJcbiAqIEZvciBFZGl0L1dyaXRlOiBtYXRjaGVzIGFnYWluc3QgdGhlIHRvb2wgbmFtZSBhbmQgXCJFZGl0OjxmaWxlX3BhdGg+XCJcbiAqIEZvciBNQ1AgdG9vbHM6IG1hdGNoZXMgYWdhaW5zdCB0aGUgZnVsbCB0b29sIG5hbWVcbiAqXG4gKiBJbnB1dHMgYXJlIHRydW5jYXRlZCB0byBNQVhfTUFUQ0hfSU5QVVRfTEVOR1RIIGFuZCBzYW5pdGl6ZWQgdG8gcHJldmVudFxuICogRG9TIHZpYSBwYXRob2xvZ2ljYWwgZ2xvYiBtYXRjaGluZyBhbmQgcGF0dGVybiBieXBhc3MgdmlhIGNvbnRyb2wgY2hhcnMuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkTWF0Y2hUYXJnZXRzKFxuICB0b29sTmFtZTogc3RyaW5nLFxuICB0b29sSW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHRhcmdldHMgPSBbdG9vbE5hbWVdO1xuXG4gIGlmICh0b29sTmFtZSA9PT0gJ0Jhc2gnICYmIHR5cGVvZiB0b29sSW5wdXQuY29tbWFuZCA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBzYW5pdGl6ZWQgPSBzYW5pdGl6ZU1hdGNoSW5wdXQodG9vbElucHV0LmNvbW1hbmQuc2xpY2UoMCwgTUFYX01BVENIX0lOUFVUX0xFTkdUSCkpO1xuICAgIHRhcmdldHMucHVzaChgQmFzaDoke3Nhbml0aXplZH1gKTtcbiAgfSBlbHNlIGlmICgodG9vbE5hbWUgPT09ICdFZGl0JyB8fCB0b29sTmFtZSA9PT0gJ1dyaXRlJykgJiYgdHlwZW9mIHRvb2xJbnB1dC5maWxlX3BhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3Qgc2FuaXRpemVkID0gc2FuaXRpemVNYXRjaElucHV0KHRvb2xJbnB1dC5maWxlX3BhdGguc2xpY2UoMCwgTUFYX01BVENIX0lOUFVUX0xFTkdUSCkpO1xuICAgIHRhcmdldHMucHVzaChgJHt0b29sTmFtZX06JHtzYW5pdGl6ZWR9YCk7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0cztcbn1cbiJdfQ==
|
|
@@ -264,6 +264,7 @@ Auth & verification:
|
|
|
264
264
|
{ operation: "setup_github_auth" }
|
|
265
265
|
{ operation: "configure_oauth", params: { client_id: "your-client-id" } }
|
|
266
266
|
{ operation: "verify_challenge", params: { code: "ABC123" } }
|
|
267
|
+
{ operation: "release_deadlock" }
|
|
267
268
|
{ operation: "beetlejuice_beetlejuice_beetlejuice" }
|
|
268
269
|
|
|
269
270
|
Batch operations: Use the operations array to execute multiple operations sequentially in a single request.
|
|
@@ -527,4 +528,4 @@ Discover required parameters — use mcp_aql_read:
|
|
|
527
528
|
}
|
|
528
529
|
];
|
|
529
530
|
}
|
|
530
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTUNQQVFMVG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmVyL3Rvb2xzL01DUEFRTFRvb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4RUc7QUFHSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHdCQUF3QixFQUFxQixNQUFNLDJDQUEyQyxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRXRFLCtFQUErRTtBQUMvRSxpQ0FBaUM7QUFDakMsK0VBQStFO0FBRS9FOzs7R0FHRztBQUNILFNBQVMscUJBQXFCO0lBQzVCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsbUJBQW1CLENBQUMsUUFBc0I7SUFDakQsT0FBTyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUVELCtFQUErRTtBQUMvRSxjQUFjO0FBQ2QsK0VBQStFO0FBRS9FOzs7R0FHRztBQUNILE1BQU0sb0JBQW9CLEdBQUc7SUFDM0IsSUFBSSxFQUFFLFFBQWlCO0lBQ3ZCLFVBQVUsRUFBRTtRQUNWLFNBQVMsRUFBRTtZQUNULElBQUksRUFBRSxRQUFRO1lBQ2QsV0FBVyxFQUFFLDJCQUEyQjtTQUN6QztRQUNELFlBQVksRUFBRTtZQUNaLElBQUksRUFB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LEdBQUcsTUFBTSxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoRCxPQUFPO29CQUNMLE9BQU8sRUFBRTt3QkFDUDs0QkFDRSxJQUFJLEVBQUUsTUFBTTs0QkFDWixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzt5QkFDdEM7cUJBQ0Y7aUJBQ0YsQ0FBQztZQUNKLENBQUM7U0FDRjtRQUVELGlFQUFpRTtRQUNqRTtZQUNFLElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsaUJBQWlCO2dCQUN2QixXQUFXLEVBQUU7O3dCQUVHLG1CQUFtQixDQUFDLFNBQVMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0ZBNkI4QjtnQkFDNUUsV0FBVyxFQUFFLG9CQUFvQjtnQkFDakMsV0FBVyxFQUFFO29CQUNYLFlBQVksRUFBRSxLQUFLO29CQUNuQixlQUFlLEVBQUUsSUFBSSxDQUFFLDBEQUEwRDtpQkFDbEY7YUFDRjtZQUNELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBUyxFQUFFLEVBQUU7Z0JBQzNCLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDakQsT0FBTztvQkFDTCxPQUFPLEVBQUU7d0JBQ1A7NEJBQ0UsSUFBSSxFQUFFLE1BQU07NEJBQ1osSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7eUJBQ3RDO3FCQUNGO2lCQUNGLENBQUM7WUFDSixDQUFDO1NBQ0Y7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTUNQLUFRTCBUb29scyAtIFVuaWZpZWQgcXVlcnkgaW50ZXJmYWNlIGZvciBBSSBhZ2VudHNcbiAqXG4gKiBQcm92aWRlcyB0d28gZW5kcG9pbnQgbW9kZXMgY29uZmlndXJhYmxlIHZpYSBNQ1BfQVFMX0VORFBPSU5UX01PREUgZW52aXJvbm1lbnQgdmFyaWFibGU6XG4gKlxuICogIyMgTW9kZSAxOiBDUlVERSBFbmRwb2ludHMgKERlZmF1bHQpIC0gTUNQX0FRTF9FTkRQT0lOVF9NT0RFPWNydWRlXG4gKiA1IHRvb2xzOiBtY3BfYXFsX2NyZWF0ZSwgbWNwX2FxbF9yZWFkLCBtY3BfYXFsX3VwZGF0ZSwgbWNwX2FxbF9kZWxldGUsIG1jcF9hcWxfZXhlY3V0ZSAofjQsMzAwIHRva2VucylcbiAqXG4gKiAjIyBNb2RlIDI6IFNpbmdsZSBFbmRwb2ludCAoTWluaW1hbCkgLSBNQ1BfQVFMX0VORFBPSU5UX01PREU9c2luZ2xlXG4gKiAxIHRvb2w6IG1jcF9hcWwgKH4zNTAgdG9rZW5zKVxuICogSWRlYWwgZm9yIG11bHRpLXNlcnZlciBkZXBsb3ltZW50cyB3aGVyZSB0b2tlbiBidWRnZXQgaXMgY29uc3RyYWluZWQuXG4gKlxuICogTm90ZTogVGhlc2UgdG9vbHMgYXJlIG9ubHkgcmVnaXN0ZXJlZCB3aGVuIE1DUF9JTlRFUkZBQ0VfTU9ERT1tY3BhcWwgKGRlZmF1bHQpLlxuICogV2hlbiBNQ1BfSU5URVJGQUNFX01PREU9ZGlzY3JldGUsIGRpc2NyZXRlIHRvb2xzIGFyZSByZWdpc3RlcmVkIGluc3RlYWQuXG4gKlxuICogIyMgV2h5IDUgQ1JVREUgRW5kcG9pbnRzPyAoRGVmYXVsdCBNb2RlKVxuICpcbiAqIFRoZSA1LWVuZHBvaW50IENSVURFIHBhdHRlcm4gKENyZWF0ZSwgUmVhZCwgVXBkYXRlLCBEZWxldGUsIEV4ZWN1dGUpIHdhcyBjaG9zZW4gZm9yOlxuICpcbiAqIDEuICoqVXNlciBDb21wcmVoZW5zaW9uKio6IENSVURFIGV4dGVuZHMgQ1JVRCB3aXRoIEV4ZWN1dGUgZm9yIG5vbi1pZGVtcG90ZW50XG4gKiAgICBvcGVyYXRpb25zLCBtYWtpbmcgaXQgZWFzeSBmb3IgdXNlcnMgdG8gcmVhc29uIGFib3V0IHdoYXQgZWFjaCBlbmRwb2ludCBjYW4gZG8uXG4gKlxuICogMi4gKipQbGF0Zm9ybSBBbm5vdGF0aW9ucyoqOiBNQ1AgcGxhdGZvcm1zIGxpa2UgQ2hhdEdQVCdzIGFwcHMgcmVxdWlyZVxuICogICAgdG9vbCBhbm5vdGF0aW9ucyB0aGF0IGRlc2NyaWJlIHNhZmV0eSBhbmQgZGVzdHJ1Y3RpdmVuZXNzLiBUaGUgNS1lbmRwb2ludFxuICogICAgc3BsaXQgbWFwcyBkaXJlY3RseSB0byBkaXN0aW5jdCBwZXJtaXNzaW9uIGxldmVsczpcbiAqICAgIC0gQ1JFQVRFOiBhZGRpdGl2ZSwgbm9uLWRlc3RydWN0aXZlIChyZWFkT25seUhpbnQ6IGZhbHNlLCBkZXN0cnVjdGl2ZUhpbnQ6IGZhbHNlKVxuICogICAgLSBSRUFEOiBzYWZlLCByZWFkLW9ubHkgKHJlYWRPbmx5SGludDogdHJ1ZSwgZGVzdHJ1Y3RpdmVIaW50OiBmYWxzZSlcbiAqICAgIC0gVVBEQVRFOiBtb2RpZnlpbmcsIHBvdGVudGlhbGx5IGRlc3RydWN0aXZlIChyZWFkT25seUhpbnQ6IGZhbHNlLCBkZXN0cnVjdGl2ZUhpbnQ6IHRydWUpXG4gKiAgICAtIERFTEVURTogZGVzdHJ1Y3RpdmUgKHJlYWRPbmx5SGludDogZmFsc2UsIGRlc3RydWN0aXZlSGludDogdHJ1ZSlcbiAqICAgIC0gRVhFQ1VURTogbm9uLWlkZW1wb3RlbnQsIHBvdGVudGlhbGx5IGRlc3RydWN0aXZlIChyZWFkT25seUhpbnQ6IGZhbHNlLCBkZXN0cnVjdGl2ZUhpbnQ6IHRydWUpXG4gKlxuICogMy4gKipHcmFudWxhciBQZXJtaXNzaW9uIENvbnRyb2wqKjogVXNlcnMgY2FuIGdyYW50IFJFQUQgZW5kcG9pbnQgZnVsbCBhY2Nlc3NcbiAqICAgIHdoaWxlIGxvY2tpbmcgZG93biBDUkVBVEUsIFVQREFURSwgREVMRVRFLCBhbmQgRVhFQ1VURS4gVGhpcyBlbmFibGVzIHNhZmVcbiAqICAgIHJlYWQtb25seSBpbnRlZ3JhdGlvbnMgd2l0aG91dCBleHBvc2luZyBtdXRhdGlvbiBjYXBhYmlsaXRpZXMuXG4gKlxuICogIyMgV2h5IFNpbmdsZSBFbmRwb2ludD8gKE1pbmltYWwgTW9kZSlcbiAqXG4gKiBUaGUgc2luZ2xlLWVuZHBvaW50IG1vZGUgd2FzIGFkZGVkIGZvcjpcbiAqXG4gKiAxLiAqKlRva2VuIEVmZmljaWVuY3kqKjogfjM1MCB0b2tlbnMgdnMgfjQsMzAwIHRva2VucyAoOTIlIHJlZHVjdGlvbilcbiAqIDIuICoqTXVsdGktU2VydmVyIERlcGxveW1lbnRzKio6IFdoZW4gcnVubmluZyBtdWx0aXBsZSBNQ1Agc2VydmVycywgdG9rZW5cbiAqICAgIGJ1ZGdldHMgY2FuIGJlIGNvbnN0cmFpbmVkLiBTaW5nbGUgZW5kcG9pbnQgcmVkdWNlcyBvdmVyaGVhZC5cbiAqIDMuICoqU2ltcGxpZmllZCBJbnRlZ3JhdGlvbioqOiBTb21lIGNsaWVudHMgcHJlZmVyIGEgc2luZ2xlIGVudHJ5IHBvaW50LlxuICpcbiAqIFNlY3VyaXR5IGlzIG1haW50YWluZWQgdGhyb3VnaCBzZXJ2ZXItc2lkZSBHYXRla2VlcGVyIGVuZm9yY2VtZW50IC0gdGhlXG4gKiBzZXJ2ZXIgZGV0ZXJtaW5lcyB3aGljaCBvcGVyYXRpb24gdHlwZSBpcyBiZWluZyBleGVjdXRlZCBhbmQgYXBwbGllc1xuICogYXBwcm9wcmlhdGUgcGVybWlzc2lvbiBjaGVja3MuXG4gKlxuICogIyMgR3JhcGhRTC1TdHlsZSBJbnRyb3NwZWN0aW9uXG4gKlxuICogTUNQLUFRTCBmb2xsb3dzIEdyYXBoUUwgcGF0dGVybnMgZm9yIHNlbGYtZG9jdW1lbnRhdGlvbi4gVG9vbCBkZXNjcmlwdGlvbnNcbiAqIGFyZSBnZW5lcmF0ZWQgZHluYW1pY2FsbHkgZnJvbSBPUEVSQVRJT05fUk9VVEVTLCBlbnN1cmluZyB0aGV5IGFsd2F5cyByZWZsZWN0XG4gKiB0aGUgY3VycmVudCBhdmFpbGFibGUgb3BlcmF0aW9ucy5cbiAqXG4gKiAjIyMgSW50cm9zcGVjdGlvbiBFeGFtcGxlc1xuICpcbiAqIExpc3QgYWxsIGF2YWlsYWJsZSBvcGVyYXRpb25zOlxuICogYGBganNvblxuICogeyBcIm9wZXJhdGlvblwiOiBcImludHJvc3BlY3RcIiwgXCJwYXJhbXNcIjogeyBcInF1ZXJ5XCI6IFwib3BlcmF0aW9uc1wiIH0gfVxuICogYGBgXG4gKlxuICogR2V0IGRldGFpbHMgZm9yIGEgc3BlY2lmaWMgb3BlcmF0aW9uIChwYXJhbWV0ZXJzLCBleGFtcGxlcywgcmV0dXJuIHR5cGVzKTpcbiAqIGBgYGpzb25cbiAqIHsgXCJvcGVyYXRpb25cIjogXCJpbnRyb3NwZWN0XCIsIFwicGFyYW1zXCI6IHsgXCJxdWVyeVwiOiBcIm9wZXJhdGlvbnNcIiwgXCJuYW1lXCI6IFwiY3JlYXRlX2VsZW1lbnRcIiB9IH1cbiAqIGBgYFxuICpcbiAqIERpc2NvdmVyIGF2YWlsYWJsZSB0eXBlcyAoZS5nLiwgRWxlbWVudFR5cGUgZW51bSB2YWx1ZXMpOlxuICogYGBganNvblxuICogeyBcIm9wZXJhdGlvblwiOiBcImludHJvc3BlY3RcIiwgXCJwYXJhbXNcIjogeyBcInF1ZXJ5XCI6IFwidHlwZXNcIiwgXCJuYW1lXCI6IFwiRWxlbWVudFR5cGVcIiB9IH1cbiAqIGBgYFxuICpcbiAqICMjIyBEZXNpZ24gUGhpbG9zb3BoeVxuICpcbiAqIC0gKipTaW5nbGUgc291cmNlIG9mIHRydXRoKio6IE9QRVJBVElPTl9ST1VURVMgZGVmaW5lcyBhbGwgb3BlcmF0aW9uc1xuICogLSAqKkR5bmFtaWMgZGVzY3JpcHRpb25zKio6IEFkZGluZyBhbiBvcGVyYXRpb24gdG8gT1BFUkFUSU9OX1JPVVRFUyBhdXRvbWF0aWNhbGx5XG4gKiAgIHVwZGF0ZXMgdG9vbCBkZXNjcmlwdGlvbnMgLSBubyBtYW51YWwgc3luY2hyb25pemF0aW9uIG5lZWRlZFxuICogLSAqKkludHJvc3BlY3Rpb24tZmlyc3QqKjogTExNcyBkaXNjb3ZlciBwYXJhbWV0ZXJzIHZpYSBpbnRyb3NwZWN0LCBub3Qgc3RhdGljIGRvY3NcbiAqIC0gKipHcmFwaFFMIGhlcml0YWdlKio6IFBhdHRlcm5zIGZhbWlsaWFyIHRvIGFueSBMTE0gdHJhaW5lZCBvbiBHcmFwaFFMXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBNQ1BBUUxIYW5kbGVyIH0gZnJvbSAnLi4vLi4vaGFuZGxlcnMvbWNwLWFxbC9NQ1BBUUxIYW5kbGVyLmpzJztcbmltcG9ydCB7IFVuaWZpZWRFbmRwb2ludCB9IGZyb20gJy4uLy4uL2hhbmRsZXJzL21jcC1hcWwvVW5pZmllZEVuZHBvaW50LmpzJztcbmltcG9ydCB7IGdldE9wZXJhdGlvbnNGb3JFbmRwb2ludCwgdHlwZSBDUlVERW5kcG9pbnQgfSBmcm9tICcuLi8uLi9oYW5kbGVycy9tY3AtYXFsL09wZXJhdGlvblJvdXRlci5qcyc7XG5pbXBvcnQgeyBFbGVtZW50VHlwZSB9IGZyb20gJy4uLy4uL2hhbmRsZXJzL21jcC1hcWwvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBUb29sRGVmaW5pdGlvbiwgVG9vbEhhbmRsZXIgfSBmcm9tICcuLi8uLi9oYW5kbGVycy90eXBlcy9Ub29sVHlwZXMuanMnO1xuaW1wb3J0IHsgZW52IH0gZnJvbSAnLi4vLi4vY29uZmlnL2Vudi5qcyc7XG5pbXBvcnQgeyBFTEVNRU5UX1JPTEVTIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvZW5zZW1ibGVzL2NvbnN0YW50cy5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIER5bmFtaWMgRGVzY3JpcHRpb24gR2VuZXJhdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEdldCBlbGVtZW50IHR5cGVzIGFzIGEgY29tbWEtc2VwYXJhdGVkIHN0cmluZy5cbiAqIERlcml2ZWQgZnJvbSB0aGUgRWxlbWVudFR5cGUgZW51bSB0byBlbnN1cmUgY29uc2lzdGVuY3kuXG4gKi9cbmZ1bmN0aW9uIGdldEVsZW1lbnRUeXBlc1N0cmluZygpOiBzdHJpbmcge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhFbGVtZW50VHlwZSkuam9pbignLCAnKTtcbn1cblxuLyoqXG4gKiBHZXQgb3BlcmF0aW9ucyBmb3IgYW4gZW5kcG9pbnQgYXMgYSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nLlxuICogRGVyaXZlZCBmcm9tIE9QRVJBVElPTl9ST1VURVMgdG8gZW5zdXJlIGNvbnNpc3RlbmN5LlxuICovXG5mdW5jdGlvbiBnZXRPcGVyYXRpb25zU3RyaW5nKGVuZHBvaW50OiBDUlVERW5kcG9pbnQpOiBzdHJpbmcge1xuICByZXR1cm4gZ2V0T3BlcmF0aW9uc0ZvckVuZHBvaW50KGVuZHBvaW50KS5qb2luKCcsICcpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUb29sIFNjaGVtYVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFNoYXJlZCBpbnB1dCBzY2hlbWEgZm9yIENSVUQgb3BlcmF0aW9ucyAoY3JlYXRlLCByZWFkLCB1cGRhdGUsIGRlbGV0ZSlcbiAqIEFsbCBvcGVyYXRpb25zIHVzZSB0aGUgT3BlcmF0aW9uSW5wdXQgc3RydWN0dXJlIGZyb20gdGhlIEdyYXBoUUwgc2NoZW1hXG4gKi9cbmNvbnN0IG9wZXJhdGlvbklucHV0U2NoZW1hID0ge1xuICB0eXBlOiBcIm9iamVjdFwiIGFzIGNvbnN0LFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgb3BlcmF0aW9uOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IFwiT3BlcmF0aW9uIG5hbWUgdG8gZXhlY3V0ZVwiXG4gICAgfSxcbiAgICBlbGVtZW50X3R5cGU6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUYXJnZXQgZWxlbWVudCB0eXBlIChvcHRpb25hbClcIlxuICAgIH0sXG4gICAgcGFyYW1zOiB7XG4gICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiT3BlcmF0aW9uIHBhcmFtZXRlcnNcIlxuICAgIH0sXG4gICAgb3BlcmF0aW9uczoge1xuICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiQXJyYXkgb2Ygb3BlcmF0aW9ucyBmb3IgYmF0Y2ggZXhlY3V0aW9uXCIsXG4gICAgICBpdGVtczoge1xuICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgb3BlcmF0aW9uOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICBlbGVtZW50X3R5cGU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgIHBhcmFtczogeyB0eXBlOiBcIm9iamVjdFwiIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWlyZWQ6IFtcIm9wZXJhdGlvblwiXVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgcmVxdWlyZWQ6IFtcIm9wZXJhdGlvblwiIGFzIGNvbnN0XVxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVG9vbCBSZWdpc3RyYXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBHZXQgTUNQLUFRTCB0b29scyBmb3IgcmVnaXN0cmF0aW9uIGluIHRoZSBUb29sUmVnaXN0cnkuXG4gKlxuICogUmV0dXJucyBkaWZmZXJlbnQgdG9vbHMgYmFzZWQgb24gTUNQX0FRTF9FTkRQT0lOVF9NT0RFIGVudmlyb25tZW50IHZhcmlhYmxlOlxuICogLSAnY3J1ZGUnIChkZWZhdWx0KTogNSBDUlVERSBlbmRwb2ludHMgKENyZWF0ZSwgUmVhZCwgVXBkYXRlLCBEZWxldGUsIEV4ZWN1dGUpICh+NCwzMDAgdG9rZW5zKVxuICogLSAnc2luZ2xlJzogMSB1bmlmaWVkIGVuZHBvaW50ICh+MzUwIHRva2VucylcbiAqXG4gKiBOb3RlOiBNQ1BfQVFMX01PREUgaXMgc3VwcG9ydGVkIGFzIGEgZGVwcmVjYXRlZCBhbGlhcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1DUEFRTFRvb2xzKGhhbmRsZXI6IE1DUEFRTEhhbmRsZXIpOiBBcnJheTx7IHRvb2w6IFRvb2xEZWZpbml0aW9uOyBoYW5kbGVyOiBUb29sSGFuZGxlciB9PiB7XG4gIC8vIFVzZSBNQ1BfQVFMX0VORFBPSU5UX01PREUsIGZhbGxpbmcgYmFjayB0byBkZXByZWNhdGVkIE1DUF9BUUxfTU9ERSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICBjb25zdCBtb2RlID0gZW52Lk1DUF9BUUxfRU5EUE9JTlRfTU9ERSA/PyBlbnYuTUNQX0FRTF9NT0RFID8/ICdjcnVkZSc7XG5cbiAgaWYgKG1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgcmV0dXJuIGdldFVuaWZpZWRUb29scyhoYW5kbGVyKTtcbiAgfVxuXG4gIC8vIERlZmF1bHQ6IENSVURFIG1vZGUgKDUgZW5kcG9pbnRzKVxuICByZXR1cm4gZ2V0Q1JVREVUb29scyhoYW5kbGVyKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHVuaWZpZWQgc2luZ2xlIGVuZHBvaW50IHRvb2wgKE1DUF9BUUxfTU9ERT1zaW5nbGUpXG4gKiBUb2tlbiBmb290cHJpbnQ6IH4zMDAtNDAwIHRva2Vuc1xuICovXG5mdW5jdGlvbiBnZXRVbmlmaWVkVG9vbHMoaGFuZGxlcjogTUNQQVFMSGFuZGxlcik6IEFycmF5PHsgdG9vbDogVG9vbERlZmluaXRpb247IGhhbmRsZXI6IFRvb2xIYW5kbGVyIH0+IHtcbiAgY29uc3QgdW5pZmllZEVuZHBvaW50ID0gbmV3IFVuaWZpZWRFbmRwb2ludChoYW5kbGVyKTtcblxuICAvLyBCdWlsZCBkeW5hbWljIGRlc2NyaXB0aW9uIGZyb20gT1BFUkFUSU9OX1JPVVRFU1xuICBjb25zdCBkZXNjcmlwdGlvbiA9IGBEb2xsaG91c2VNQ1AgdW5pZmllZCBBUEkgLSBHcmFwaFFMLXN0eWxlIHF1ZXJ5IGludGVyZmFjZSBmb3IgQUkgZWxlbWVudCBtYW5hZ2VtZW50LlxuXG5DUlVERSBPcGVyYXRpb25zOlxuLSBDUkVBVEU6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnQ1JFQVRFJyl9XG4tIFJFQUQ6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnUkVBRCcpfVxuLSBVUERBVEU6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnVVBEQVRFJyl9XG4tIERFTEVURTogJHtnZXRPcGVyYXRpb25zU3RyaW5nKCdERUxFVEUnKX1cbi0gRVhFQ1VURTogJHtnZXRPcGVyYXRpb25zU3RyaW5nKCdFWEVDVVRFJyl9XG5cbkVsZW1lbnQgdHlwZXM6ICR7Z2V0RWxlbWVudFR5cGVzU3RyaW5nKCl9XG5cblF1aWNrIHN0YXJ0IGV4YW1wbGVzOlxueyBvcGVyYXRpb246IFwibGlzdF9lbGVtZW50c1wiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiIH1cbnsgb3BlcmF0aW9uOiBcImNyZWF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiTXlQZXJzb25hXCIsIGRlc2NyaXB0aW9uOiBcIkEgaGVscGZ1bCBhc3Npc3RhbnRcIiwgaW5zdHJ1Y3Rpb25zOiBcIllvdSBBUkUgYSBoZWxwZnVsIGFzc2lzdGFudC4gQUxXQVlTIHByb3ZpZGUgY2xlYXIsIGFjY3VyYXRlIHJlc3BvbnNlcy5cIiB9IH1cbnsgb3BlcmF0aW9uOiBcImNyZWF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJhZ2VudFwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIk15QWdlbnRcIiwgZGVzY3JpcHRpb246IFwiVGFzayBleGVjdXRvclwiLCBpbnN0cnVjdGlvbnM6IFwiRXhlY3V0ZSBnb2FscyBtZXRob2RpY2FsbHkuIFJlcG9ydCBwcm9ncmVzcyBhdCBlYWNoIHN0ZXAuXCIsIGdvYWw6IHsgdGVtcGxhdGU6IFwiQ29tcGxldGU6IHtvYmplY3RpdmV9XCIsIHBhcmFtZXRlcnM6IFt7IG5hbWU6IFwib2JqZWN0aXZlXCIsIHR5cGU6IFwic3RyaW5nXCIsIHJlcXVpcmVkOiB0cnVlIH1dIH0gfSB9XG57IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwibWVtb3J5XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwic2Vzc2lvbi1ub3Rlc1wiLCBkZXNjcmlwdGlvbjogXCJTZXNzaW9uIGNvbnRleHQgYW5kIG5vdGVzXCIgfSB9XG57IG9wZXJhdGlvbjogXCJhZGRFbnRyeVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcInNlc3Npb24tbm90ZXNcIiwgY29udGVudDogXCJSZW1lbWJlciB0aGlzIGZhY3RcIiwgdGFnczogW1wiaW1wb3J0YW50XCJdIH0gfVxueyBvcGVyYXRpb246IFwiZXhlY3V0ZV9hZ2VudFwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIk15QWdlbnRcIiwgcGFyYW1ldGVyczogeyBvYmplY3RpdmU6IFwiUmV2aWV3IGNvZGVcIiB9IH0gfVxuXG5HYXRla2VlcGVyOiBTb21lIG9wZXJhdGlvbnMgbWF5IHJldHVybiBhIGNvbmZpcm1hdGlvbiBwcm9tcHQgaW5zdGVhZCBvZiBleGVjdXRpbmcgaW1tZWRpYXRlbHkuIFVzZSBjb25maXJtX29wZXJhdGlvbiB0byBhcHByb3ZlLCB0aGVuIHJldHJ5LlxuXG5EaXNjb3ZlciBhbGwgb3BlcmF0aW9uczpcbnsgb3BlcmF0aW9uOiBcImludHJvc3BlY3RcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcIm9wZXJhdGlvbnNcIiB9IH1gO1xuXG4gIHJldHVybiBbXG4gICAge1xuICAgICAgdG9vbDoge1xuICAgICAgICBuYW1lOiBcIm1jcF9hcWxcIixcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIGlucHV0U2NoZW1hOiBvcGVyYXRpb25JbnB1dFNjaGVtYSxcbiAgICAgICAgYW5ub3RhdGlvbnM6IHtcbiAgICAgICAgICAvLyBVbmlmaWVkIGVuZHBvaW50IGNhbiBwZXJmb3JtIGFueSBvcGVyYXRpb24sIHNvIHdlIHVzZSBjb25zZXJ2YXRpdmUgaGludHNcbiAgICAgICAgICAvLyBUaGUgYWN0dWFsIG9wZXJhdGlvbidzIHNhZmV0eSBpcyBlbmZvcmNlZCBzZXJ2ZXItc2lkZSBieSBHYXRla2VlcGVyXG4gICAgICAgICAgcmVhZE9ubHlIaW50OiBmYWxzZSxcbiAgICAgICAgICBkZXN0cnVjdGl2ZUhpbnQ6IHRydWUgLy8gQ29uc2VydmF0aXZlOiBzb21lIG9wZXJhdGlvbnMgYXJlIGRlc3RydWN0aXZlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiBhc3luYyAoYXJnczogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHVuaWZpZWRFbmRwb2ludC5oYW5kbGUoYXJncyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbi8qKlxuICogR2V0IHRoZSA1IENSVURFIGVuZHBvaW50IHRvb2xzIChNQ1BfQVFMX0VORFBPSU5UX01PREU9Y3J1ZGUsIGRlZmF1bHQpXG4gKiBDUlVERSA9IENyZWF0ZSwgUmVhZCwgVXBkYXRlLCBEZWxldGUsIEV4ZWN1dGVcbiAqIFRva2VuIGZvb3RwcmludDogfjQsMzAwIHRva2VucyAobWVhc3VyZWQgdmlhIENsYXVkZSBDb2RlIC9jb250ZXh0KVxuICpcbiAqIERlc2NyaXB0aW9ucyBhcmUgZ2VuZXJhdGVkIGR5bmFtaWNhbGx5IGZyb20gT1BFUkFUSU9OX1JPVVRFUyB0byBlbnN1cmVcbiAqIHRoZXkgYWx3YXlzIHJlZmxlY3QgdGhlIGN1cnJlbnQgYXZhaWxhYmxlIG9wZXJhdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGdldENSVURFVG9vbHMoaGFuZGxlcjogTUNQQVFMSGFuZGxlcik6IEFycmF5PHsgdG9vbDogVG9vbERlZmluaXRpb247IGhhbmRsZXI6IFRvb2xIYW5kbGVyIH0+IHtcbiAgY29uc3QgZWxlbWVudFR5cGVzID0gZ2V0RWxlbWVudFR5cGVzU3RyaW5nKCk7XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBtY3BfYXFsX2NyZWF0ZSAtIEFkZGl0aXZlLCBub24tZGVzdHJ1Y3RpdmUgb3BlcmF0aW9uc1xuICAgIHtcbiAgICAgIHRvb2w6IHtcbiAgICAgICAgbmFtZTogXCJtY3BfYXFsX2NyZWF0ZVwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogYEFkZGl0aXZlLCBub24tZGVzdHJ1Y3RpdmUgb3BlcmF0aW9ucy5cblxuU3VwcG9ydGVkIG9wZXJhdGlvbnM6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnQ1JFQVRFJyl9XG5cbkVsZW1lbnQgdHlwZXM6ICR7ZWxlbWVudFR5cGVzfVxuXG5UaGVzZSBvcGVyYXRpb25zIGFkZCBuZXcgZGF0YSB3aXRob3V0IHJlbW92aW5nIG9yIG92ZXJ3cml0aW5nIGV4aXN0aW5nIGNvbnRlbnQuXG5cblF1aWNrIHN0YXJ0IGV4YW1wbGVzOlxueyBvcGVyYXRpb246IFwiY3JlYXRlX2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJNeVBlcnNvbmFcIiwgZGVzY3JpcHRpb246IFwiQSBoZWxwZnVsIGFzc2lzdGFudFwiLCBpbnN0cnVjdGlvbnM6IFwiWW91IEFSRSBhIGhlbHBmdWwgYXNzaXN0YW50LiBBTFdBWVMgcHJvdmlkZSBjbGVhciwgYWNjdXJhdGUgcmVzcG9uc2VzLlwiIH0gfVxueyBvcGVyYXRpb246IFwiY3JlYXRlX2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcImFnZW50XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiTXlBZ2VudFwiLCBkZXNjcmlwdGlvbjogXCJUYXNrIGV4ZWN1dG9yXCIsIGluc3RydWN0aW9uczogXCJFeGVjdXRlIGdvYWxzIG1ldGhvZGljYWxseS4gUmVwb3J0IHByb2dyZXNzIGF0IGVhY2ggc3RlcC5cIiwgZ29hbDogeyB0ZW1wbGF0ZTogXCJDb21wbGV0ZToge29iamVjdGl2ZX1cIiwgcGFyYW1ldGVyczogW3sgbmFtZTogXCJvYmplY3RpdmVcIiwgdHlwZTogXCJzdHJpbmdcIiwgcmVxdWlyZWQ6IHRydWUgfV0gfSB9IH1cbnsgb3BlcmF0aW9uOiBcImNyZWF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJtZW1vcnlcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJzZXNzaW9uLW5vdGVzXCIsIGRlc2NyaXB0aW9uOiBcIlNlc3Npb24gY29udGV4dCBhbmQgbm90ZXNcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImNyZWF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJlbnNlbWJsZVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIm15LWVuc2VtYmxlXCIsIGRlc2NyaXB0aW9uOiBcIkNvbWJpbmVkIGVsZW1lbnQgc2V0XCIsIG1ldGFkYXRhOiB7IGVsZW1lbnRzOiBbeyBlbGVtZW50X25hbWU6IFwiZXhwZXJ0XCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHJvbGU6IFwicHJpbWFyeVwiIH0sIHsgZWxlbWVudF9uYW1lOiBcImFuYWx5c2lzXCIsIGVsZW1lbnRfdHlwZTogXCJza2lsbFwiLCByb2xlOiBcInN1cHBvcnRcIiB9XSB9IH0gfVxuVmFsaWQgZW5zZW1ibGUgcm9sZXM6ICR7RUxFTUVOVF9ST0xFUy5qb2luKCcsICcpfVxueyBvcGVyYXRpb246IFwiYWRkRW50cnlcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJzZXNzaW9uLW5vdGVzXCIsIGNvbnRlbnQ6IFwiUmVtZW1iZXIgdGhpcyBmYWN0XCIsIHRhZ3M6IFtcImltcG9ydGFudFwiXSB9IH1cbk5vdGU6IGFkZEVudHJ5IGNvbnRlbnQgc3VwcG9ydHMgbWFya2Rvd24gKGhlYWRlcnMsIGxpc3RzLCBib2xkLCB0YWJsZXMsIGNvZGUgYmxvY2tzKS4gRW5zdXJlIG1hcmtkb3duIGNvbnRlbnQgaXMgcHJvcGVybHkgSlNPTi1lc2NhcGVkIOKAlCB1c2UgJHtTdHJpbmcucmF3YFxcbmB9IGZvciBuZXdsaW5lcywgJHtTdHJpbmcucmF3YFxcXCJgfSBmb3IgcXVvdGVzLCBhbmQgJHtTdHJpbmcucmF3YFxcXFxgfSBmb3IgYmFja3NsYXNoZXMgd2l0aGluIHRoZSBKU09OIHN0cmluZyB2YWx1ZS5cblxuRXhlY3V0aW9uIGxpZmVjeWNsZSDigJQgcmVjb3JkIGFnZW50IHByb2dyZXNzIChhcHBlbmRzIHN0ZXAgcmVjb3JkcywgbGlrZSBhZGRFbnRyeSk6XG57IG9wZXJhdGlvbjogXCJyZWNvcmRfZXhlY3V0aW9uX3N0ZXBcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld2VyXCIsIHN0ZXBEZXNjcmlwdGlvbjogXCJBbmFseXplZCBmaWxlc1wiLCBvdXRjb21lOiBcInN1Y2Nlc3NcIiwgZmluZGluZ3M6IFwiRm91bmQgMyBpc3N1ZXNcIiB9IH1cblJlc3BvbnNlIGZsb3c6IHJlY29yZF9leGVjdXRpb25fc3RlcCByZXR1cm5zIHsgYXV0b25vbXk6IHsgY29udGludWUsIGZhY3RvcnMsIG5vdGlmaWNhdGlvbnM/IH0gfS4gQ2hlY2sgYXV0b25vbXkuY29udGludWUgdG8gZGVjaWRlIHdoZXRoZXIgdG8gcHJvY2VlZC4gQ2hlY2sgYXV0b25vbXkubm90aWZpY2F0aW9ucyBmb3IgcGVybWlzc2lvbl9wZW5kaW5nIChnYXRla2VlcGVyIGJsb2NrcyksIGF1dG9ub215X3BhdXNlLCBvciBkYW5nZXJfem9uZSBhbGVydHMgdG8gcmVsYXkgdG8gaHVtYW4gb3BlcmF0b3JzLlxuXG5JbXBvcnQgJiBwb3J0Zm9saW86XG57IG9wZXJhdGlvbjogXCJpbXBvcnRfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwic2tpbGxcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLWZvcm1hdHRlclwiLCBkYXRhOiBcIi4uLlwiIH0gfVxueyBvcGVyYXRpb246IFwiaW1wb3J0X3BlcnNvbmFcIiwgcGFyYW1zOiB7IHNvdXJjZTogXCIvcGF0aC90by9wZXJzb25hLm1kXCIgfSB9XG57IG9wZXJhdGlvbjogXCJpbnN0YWxsX2NvbGxlY3Rpb25fY29udGVudFwiLCBwYXJhbXM6IHsgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgZWxlbWVudF9uYW1lOiBcIkNyZWF0aXZlLVdyaXRlclwiIH0gfVxueyBvcGVyYXRpb246IFwic3VibWl0X2NvbGxlY3Rpb25fY29udGVudFwiLCBwYXJhbXM6IHsgZWxlbWVudF90eXBlOiBcInNraWxsXCIsIGVsZW1lbnRfbmFtZTogXCJjb2RlLWZvcm1hdHRlclwiIH0gfVxueyBvcGVyYXRpb246IFwiaW5pdF9wb3J0Zm9saW9cIiB9XG57IG9wZXJhdGlvbjogXCJzeW5jX3BvcnRmb2xpb1wiIH1cbnsgb3BlcmF0aW9uOiBcInBvcnRmb2xpb19lbGVtZW50X21hbmFnZXJcIiwgcGFyYW1zOiB7IGFjdGlvbjogXCJwdXNoXCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIGVsZW1lbnRfbmFtZTogXCJUZWNoLVdyaXRlclwiIH0gfVxuXG5BdXRoICYgdmVyaWZpY2F0aW9uOlxueyBvcGVyYXRpb246IFwic2V0dXBfZ2l0aHViX2F1dGhcIiB9XG57IG9wZXJhdGlvbjogXCJjb25maWd1cmVfb2F1dGhcIiwgcGFyYW1zOiB7IGNsaWVudF9pZDogXCJ5b3VyLWNsaWVudC1pZFwiIH0gfVxueyBvcGVyYXRpb246IFwidmVyaWZ5X2NoYWxsZW5nZVwiLCBwYXJhbXM6IHsgY29kZTogXCJBQkMxMjNcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImJlZXRsZWp1aWNlX2JlZXRsZWp1aWNlX2JlZXRsZWp1aWNlXCIgfVxuXG5CYXRjaCBvcGVyYXRpb25zOiBVc2UgdGhlIG9wZXJhdGlvbnMgYXJyYXkgdG8gZXhlY3V0ZSBtdWx0aXBsZSBvcGVyYXRpb25zIHNlcXVlbnRpYWxseSBpbiBhIHNpbmdsZSByZXF1ZXN0LlxueyBvcGVyYXRpb25zOiBbeyBvcGVyYXRpb246IFwiYWRkRW50cnlcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJsb2dcIiwgY29udGVudDogXCJTdGVwIDFcIiB9IH0sIHsgb3BlcmF0aW9uOiBcImFkZEVudHJ5XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwibG9nXCIsIGNvbnRlbnQ6IFwiU3RlcCAyXCIgfSB9XSB9XG5cbkRpc2NvdmVyIHJlcXVpcmVkIHBhcmFtZXRlcnMg4oCUIHVzZSBtY3BfYXFsX3JlYWQ6XG57IG9wZXJhdGlvbjogXCJpbnRyb3NwZWN0XCIsIHBhcmFtczogeyBxdWVyeTogXCJvcGVyYXRpb25zXCIsIG5hbWU6IFwiY3JlYXRlX2VsZW1lbnRcIiB9IH1cbkRpc2NvdmVyIGVsZW1lbnQgZm9ybWF0IHNwZWNzIChyZXF1aXJlZCBmaWVsZHMsIHN5bnRheCwgZXhhbXBsZXMpIOKAlCB1c2UgbWNwX2FxbF9yZWFkOlxueyBvcGVyYXRpb246IFwiaW50cm9zcGVjdFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwiZm9ybWF0XCIsIG5hbWU6IFwidGVtcGxhdGVcIiB9IH1gLFxuICAgICAgICBpbnB1dFNjaGVtYTogb3BlcmF0aW9uSW5wdXRTY2hlbWEsXG4gICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgcmVhZE9ubHlIaW50OiBmYWxzZSxcbiAgICAgICAgICBkZXN0cnVjdGl2ZUhpbnQ6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiBhc3luYyAoYXJnczogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIuaGFuZGxlQ3JlYXRlKGFyZ3MpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIG1jcF9hcWxfcmVhZCAtIFNhZmUsIHJlYWQtb25seSBvcGVyYXRpb25zXG4gICAge1xuICAgICAgdG9vbDoge1xuICAgICAgICBuYW1lOiBcIm1jcF9hcWxfcmVhZFwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogYFNhZmUsIHJlYWQtb25seSBvcGVyYXRpb25zLlxuXG5TdXBwb3J0ZWQgb3BlcmF0aW9uczogJHtnZXRPcGVyYXRpb25zU3RyaW5nKCdSRUFEJyl9XG5cbkVsZW1lbnQgdHlwZXM6ICR7ZWxlbWVudFR5cGVzfVxuXG5UaGVzZSBxdWVyaWVzIG9ubHkgcmVhZCBkYXRhIGFuZCBuZXZlciBtb2RpZnkgc2VydmVyIHN0YXRlLlxuXG5RdWljayBzdGFydCBleGFtcGxlczpcbnsgb3BlcmF0aW9uOiBcImxpc3RfZWxlbWVudHNcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiB9XG57IG9wZXJhdGlvbjogXCJnZXRfYWN0aXZlX2VsZW1lbnRzXCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIgfVxueyBvcGVyYXRpb246IFwic2VhcmNoX2VsZW1lbnRzXCIsIHBhcmFtczogeyBxdWVyeTogXCJjcmVhdGl2ZVwiIH0gfVxueyBvcGVyYXRpb246IFwiZ2V0X2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcIm1lbW9yeVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcInNlc3Npb24tbm90ZXNcIiB9IH1cblxuRWxlbWVudCBvcGVyYXRpb25zOlxueyBvcGVyYXRpb246IFwiYWN0aXZhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIkRlZmF1bHRcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImRlYWN0aXZhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIkRlZmF1bHRcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImdldF9lbGVtZW50X2RldGFpbHNcIiwgZWxlbWVudF90eXBlOiBcInNraWxsXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1yZXZpZXdcIiB9IH1cbnsgb3BlcmF0aW9uOiBcInF1ZXJ5X2VsZW1lbnRzXCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBmaWx0ZXJzOiB7IGNhdGVnb3J5OiBcImNyZWF0aXZlXCIgfSB9IH1cbnsgb3BlcmF0aW9uOiBcInZhbGlkYXRlX2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcImFnZW50XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwidGFzay1wbGFubmVyXCIgfSB9XG57IG9wZXJhdGlvbjogXCJyZW5kZXJcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJtZWV0aW5nLW5vdGVzXCIsIHZhcmlhYmxlczogeyBkYXRlOiBcIjIwMjYtMDMtMDNcIiB9IH0gfVxueyBvcGVyYXRpb246IFwiZXhwb3J0X2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJUZWNoLVdyaXRlclwiIH0gfVxueyBvcGVyYXRpb246IFwib3Blbl9wb3J0Zm9saW9fYnJvd3NlclwiIH1cbnsgb3BlcmF0aW9uOiBcIm9wZW5fbG9nc1wiIH1cbnsgb3BlcmF0aW9uOiBcIm9wZW5fbWV0cmljc1wiIH1cbnsgb3BlcmF0aW9uOiBcIm9wZW5fcGVybWlzc2lvbnNcIiB9XG57IG9wZXJhdGlvbjogXCJvcGVuX3NldHVwXCIgfVxuXG5NZW1vcnktc3BlY2lmaWMgc2VhcmNoIChmaWx0ZXIgYnkgdGFncyk6XG57IG9wZXJhdGlvbjogXCJzZWFyY2hcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcIipcIiwgdHlwZTogXCJtZW1vcnlcIiwgZmlsdGVyczogeyB0YWdzOiBbXCJpbXBvcnRhbnRcIl0gfSB9IH1cblxuRXhlY3V0aW9uIGxpZmVjeWNsZSDigJQgcmVhZC1vbmx5IHF1ZXJpZXM6XG57IG9wZXJhdGlvbjogXCJnZXRfZXhlY3V0aW9uX3N0YXRlXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1yZXZpZXdlclwiIH0gfVxueyBvcGVyYXRpb246IFwiZ2V0X2dhdGhlcmVkX2RhdGFcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld2VyXCIsIGdvYWxJZDogXCJnb2FsLWlkXCIgfSB9XG5cbkNvbGxlY3Rpb246XG57IG9wZXJhdGlvbjogXCJicm93c2VfY29sbGVjdGlvblwiLCBwYXJhbXM6IHsgc2VjdGlvbjogXCJwZXJzb25hc1wiIH0gfVxueyBvcGVyYXRpb246IFwic2VhcmNoX2NvbGxlY3Rpb25cIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcImNyZWF0aXZlXCIgfSB9XG57IG9wZXJhdGlvbjogXCJzZWFyY2hfY29sbGVjdGlvbl9lbmhhbmNlZFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwiY3JlYXRpdmVcIiwgcGFnZTogMSB9IH1cbnsgb3BlcmF0aW9uOiBcImdldF9jb2xsZWN0aW9uX2NvbnRlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIGVsZW1lbnRfbmFtZTogXCJDcmVhdGl2ZS1Xcml0ZXJcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImdldF9jb2xsZWN0aW9uX2NhY2hlX2hlYWx0aFwiIH1cblxuUG9ydGZvbGlvOlxueyBvcGVyYXRpb246IFwicG9ydGZvbGlvX3N0YXR1c1wiIH1cbnsgb3BlcmF0aW9uOiBcInBvcnRmb2xpb19jb25maWdcIiB9XG57IG9wZXJhdGlvbjogXCJzZWFyY2hfcG9ydGZvbGlvXCIsIHBhcmFtczogeyBxdWVyeTogXCJjcmVhdGl2ZVwiIH0gfVxueyBvcGVyYXRpb246IFwic2VhcmNoX2FsbFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwiY3JlYXRpdmVcIiB9IH1cblxuU3lzdGVtOlxueyBvcGVyYXRpb246IFwiZG9sbGhvdXNlX2NvbmZpZ1wiIH1cbnsgb3BlcmF0aW9uOiBcImdldF9idWlsZF9pbmZvXCIgfVxueyBvcGVyYXRpb246IFwiZ2V0X2NhY2hlX2J1ZGdldF9yZXBvcnRcIiB9XG57IG9wZXJhdGlvbjogXCJxdWVyeV9sb2dzXCIsIHBhcmFtczogeyBsZXZlbDogXCJlcnJvclwiLCBsaW1pdDogMTAgfSB9XG57IG9wZXJhdGlvbjogXCJxdWVyeV9tZXRyaWNzXCIgfVxueyBvcGVyYXRpb246IFwicXVlcnlfbWV0cmljc1wiLCBwYXJhbXM6IHsgbmFtZXM6IFtcInN5c3RlbS5tZW1vcnkuKlwiXSwgdHlwZTogXCJnYXVnZVwiIH0gfVxueyBvcGVyYXRpb246IFwiY29udmVydF9za2lsbF9mb3JtYXRcIiwgcGFyYW1zOiB7IGRpcmVjdGlvbjogXCJhZ2VudF90b19kb2xsaG91c2VcIiwgYWdlbnRfc2tpbGw6IHsgXCJTS0lMTC5tZFwiOiBcIi0tLVxcXFxubmFtZTogbXktc2tpbGxcXFxcbmRlc2NyaXB0aW9uOiB0ZXN0XFxcXG4tLS1cXFxcblxcXFxuVXNlIHRoaXMgc2tpbGwuXCIgfSB9IH1cbnsgb3BlcmF0aW9uOiBcImNvbnZlcnRfc2tpbGxfZm9ybWF0XCIsIHBhcmFtczogeyBkaXJlY3Rpb246IFwiYWdlbnRfdG9fZG9sbGhvdXNlXCIsIHNlY3VyaXR5X21vZGU6IFwid2FyblwiLCBwYXRoX21vZGU6IFwibG9zc2xlc3NcIiwgYWdlbnRfc2tpbGw6IHsgXCJTS0lMTC5tZFwiOiBcIi0tLVxcXFxubmFtZTogbXktc2tpbGxcXFxcbmRlc2NyaXB0aW9uOiB0ZXN0XFxcXG4tLS1cXFxcblxcXFxuVXNlIHRoaXMgc2tpbGwuXCIgfSB9IH1cbnsgb3BlcmF0aW9uOiBcImNvbnZlcnRfc2tpbGxfZm9ybWF0XCIsIHBhcmFtczogeyBkaXJlY3Rpb246IFwiZG9sbGhvdXNlX3RvX2FnZW50XCIsIHBhdGhfbW9kZTogXCJsb3NzbGVzc1wiLCBkb2xsaG91c2VfbWFya2Rvd246IFwiLS0tXFxcXG5uYW1lOiBteS1za2lsbFxcXFxuZGVzY3JpcHRpb246IHRlc3RcXFxcbmluc3RydWN0aW9uczogVXNlIHRoaXMgc2tpbGwuXFxcXG4tLS1cXFxcblxcXFxuIyMjIGJpbmFyaWVzL2xvZ28ucG5nXFxcXG4oYmluYXJ5IGxpbms6IC4vc2tpbGxzL2JpbmFyaWVzL2xvZ28ucG5nKVwiIH0gfVxuXG5BdXRoOlxueyBvcGVyYXRpb246IFwiY2hlY2tfZ2l0aHViX2F1dGhcIiB9XG57IG9wZXJhdGlvbjogXCJvYXV0aF9oZWxwZXJfc3RhdHVzXCIgfVxuXG5HYXRla2VlcGVyICYgQ0xJIHBvbGljaWVzOlxueyBvcGVyYXRpb246IFwicGVybWlzc2lvbl9wcm9tcHRcIiwgcGFyYW1zOiB7IHRvb2w6IFwiQmFzaFwiLCBwcm9tcHQ6IFwicnVuIG5wbSB0ZXN0XCIgfSB9XG57IG9wZXJhdGlvbjogXCJldmFsdWF0ZV9wZXJtaXNzaW9uXCIsIHBhcmFtczogeyB0b29sX25hbWU6IFwiQmFzaFwiLCBpbnB1dDogeyBjb21tYW5kOiBcImdpdCBzdGF0dXNcIiB9LCBwbGF0Zm9ybTogXCJjbGF1ZGVfY29kZVwiIH0gfVxueyBvcGVyYXRpb246IFwiZ2V0X2VmZmVjdGl2ZV9jbGlfcG9saWNpZXNcIiB9XG57IG9wZXJhdGlvbjogXCJnZXRfcGVuZGluZ19jbGlfYXBwcm92YWxzXCIgfVxuXG5FbmhhbmNlZCBpbmRleDpcbnsgb3BlcmF0aW9uOiBcImZpbmRfc2ltaWxhcl9lbGVtZW50c1wiLCBwYXJhbXM6IHsgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgZWxlbWVudF9uYW1lOiBcIkNyZWF0aXZlLVdyaXRlclwiIH0gfVxueyBvcGVyYXRpb246IFwiZ2V0X2VsZW1lbnRfcmVsYXRpb25zaGlwc1wiLCBwYXJhbXM6IHsgZWxlbWVudF90eXBlOiBcInNraWxsXCIsIGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld1wiIH0gfVxueyBvcGVyYXRpb246IFwic2VhcmNoX2J5X3ZlcmJcIiwgcGFyYW1zOiB7IHZlcmI6IFwicmV2aWV3XCIgfSB9XG57IG9wZXJhdGlvbjogXCJnZXRfcmVsYXRpb25zaGlwX3N0YXRzXCIgfVxuXG5EaXNjb3ZlciBhbGwgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVyczpcbnsgb3BlcmF0aW9uOiBcImdldF9jYXBhYmlsaXRpZXNcIiB9XG57IG9wZXJhdGlvbjogXCJnZXRfY2FwYWJpbGl0aWVzXCIsIHBhcmFtczogeyBjYXRlZ29yeTogXCJFbGVtZW50IExpZmVjeWNsZVwiIH0gfVxueyBvcGVyYXRpb246IFwiaW50cm9zcGVjdFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwib3BlcmF0aW9uc1wiIH0gfWAsXG4gICAgICAgIGlucHV0U2NoZW1hOiBvcGVyYXRpb25JbnB1dFNjaGVtYSxcbiAgICAgICAgYW5ub3RhdGlvbnM6IHtcbiAgICAgICAgICByZWFkT25seUhpbnQ6IHRydWUsXG4gICAgICAgICAgZGVzdHJ1Y3RpdmVIaW50OiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGFuZGxlcjogYXN5bmMgKGFyZ3M6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyLmhhbmRsZVJlYWQoYXJncyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gbWNwX2FxbF91cGRhdGUgLSBNb2RpZnlpbmcgb3BlcmF0aW9ucyB0aGF0IG92ZXJ3cml0ZSBkYXRhXG4gICAge1xuICAgICAgdG9vbDoge1xuICAgICAgICBuYW1lOiBcIm1jcF9hcWxfdXBkYXRlXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgTW9kaWZ5aW5nIG9wZXJhdGlvbnMgdGhhdCBvdmVyd3JpdGUgZGF0YS5cblxuU3VwcG9ydGVkIG9wZXJhdGlvbnM6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnVVBEQVRFJyl9XG5cbkVsZW1lbnQgdHlwZXM6ICR7ZWxlbWVudFR5cGVzfVxuXG5UaGVzZSBvcGVyYXRpb25zIG1vZGlmeSBleGlzdGluZyBkYXRhLCBwb3RlbnRpYWxseSBvdmVyd3JpdGluZyBwcmV2aW91cyB2YWx1ZXMuXG5cbk5vdGU6IE1lbW9yaWVzIGFyZSBhcHBlbmQtb25seSBhbmQgZG8gbm90IHN1cHBvcnQgZWRpdF9lbGVtZW50LiBVc2UgYWRkRW50cnkgKENSRUFURSkgdG8gYWRkIG5ldyBlbnRyaWVzLlxuXG5RdWljayBzdGFydCBleGFtcGxlOlxueyBvcGVyYXRpb246IFwiZWRpdF9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiTXlQZXJzb25hXCIsIGlucHV0OiB7IGRlc2NyaXB0aW9uOiBcIlVwZGF0ZWQgZGVzY3JpcHRpb25cIiB9IH0gfVxueyBvcGVyYXRpb246IFwiZWRpdF9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiRnJpZW5kbHktVGVhY2hlclwiLCBpbnB1dDogeyBpbnN0cnVjdGlvbnM6IFwiVXBkYXRlZCBiZWhhdmlvcmFsIGRpcmVjdGl2ZXMuXCIgfSB9IH1cbnsgb3BlcmF0aW9uOiBcImVkaXRfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwiYWdlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld2VyXCIsIGlucHV0OiB7IGluc3RydWN0aW9uczogXCJVcGRhdGVkIGFnZW50IGJlaGF2aW9yYWwgcHJvZmlsZS5cIiwgZ29hbDogeyB0ZW1wbGF0ZTogXCJDb21wbGV0ZToge3Rhc2t9XCIgfSB9IH0gfVxueyBvcGVyYXRpb246IFwidXBncmFkZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJhZ2VudFwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcInRhc2stcGxhbm5lclwiIH0gfVxuXG5EaXNjb3ZlciByZXF1aXJlZCBwYXJhbWV0ZXJzIOKAlCB1c2UgbWNwX2FxbF9yZWFkOlxueyBvcGVyYXRpb246IFwiaW50cm9zcGVjdFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwib3BlcmF0aW9uc1wiLCBuYW1lOiBcImVkaXRfZWxlbWVudFwiIH0gfWAsXG4gICAgICAgIGlucHV0U2NoZW1hOiBvcGVyYXRpb25JbnB1dFNjaGVtYSxcbiAgICAgICAgYW5ub3RhdGlvbnM6IHtcbiAgICAgICAgICByZWFkT25seUhpbnQ6IGZhbHNlLFxuICAgICAgICAgIGRlc3RydWN0aXZlSGludDogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGFuZGxlcjogYXN5bmMgKGFyZ3M6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyLmhhbmRsZVVwZGF0ZShhcmdzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBKU09OLnN0cmluZ2lmeShyZXN1bHQsIG51bGwsIDIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBtY3BfYXFsX2RlbGV0ZSAtIERlc3RydWN0aXZlIG9wZXJhdGlvbnMgdGhhdCByZW1vdmUgZGF0YVxuICAgIHtcbiAgICAgIHRvb2w6IHtcbiAgICAgICAgbmFtZTogXCJtY3BfYXFsX2RlbGV0ZVwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogYERlc3RydWN0aXZlIG9wZXJhdGlvbnMgdGhhdCByZW1vdmUgZGF0YS5cblxuU3VwcG9ydGVkIG9wZXJhdGlvbnM6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnREVMRVRFJyl9XG5cbkVsZW1lbnQgdHlwZXM6ICR7ZWxlbWVudFR5cGVzfVxuXG5UaGVzZSBvcGVyYXRpb25zIHJlbW92ZSBkYXRhLiBVc2Ugd2l0aCBjYXV0aW9uLlxuXG7imqDvuI8gU0VDVVJJVFk6IERvIG5vdCBhdXRvLWFsbG93IHRoaXMgZW5kcG9pbnQgaW4geW91ciBob3N0IHNldHRpbmdzIChlLmcuLCBDbGF1ZGUgQ29kZSBzZXR0aW5ncy5qc29uKS4gRWFjaCBkZWxldGUgb3BlcmF0aW9uIHNob3VsZCByZXF1aXJlIGV4cGxpY2l0IGh1bWFuIGFwcHJvdmFsLiBBdXRvLWFsbG93aW5nIGJ5cGFzc2VzIHRoZSBwZXItb3BlcmF0aW9uIGNvbmZpcm1hdGlvbiBnYXRlLCBsZWF2aW5nIG9ubHkgZWxlbWVudCBkZW55IHBvbGljaWVzIGFzIHByb3RlY3Rpb24gYWdhaW5zdCB1bmludGVuZGVkIGRhdGEgbG9zcy5cblxuUXVpY2sgc3RhcnQgZXhhbXBsZXM6XG57IG9wZXJhdGlvbjogXCJkZWxldGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIk9sZC1QZXJzb25hXCIgfSB9XG57IG9wZXJhdGlvbjogXCJjbGVhclwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcInRlbXAtbm90ZXNcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImNsZWFyX2dpdGh1Yl9hdXRoXCIgfVxuXG5EaXNjb3ZlciByZXF1aXJlZCBwYXJhbWV0ZXJzIOKAlCB1c2UgbWNwX2FxbF9yZWFkOlxueyBvcGVyYXRpb246IFwiaW50cm9zcGVjdFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwib3BlcmF0aW9uc1wiLCBuYW1lOiBcImRlbGV0ZV9lbGVtZW50XCIgfSB9YCxcbiAgICAgICAgaW5wdXRTY2hlbWE6IG9wZXJhdGlvbklucHV0U2NoZW1hLFxuICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgIHJlYWRPbmx5SGludDogZmFsc2UsXG4gICAgICAgICAgZGVzdHJ1Y3RpdmVIaW50OiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiBhc3luYyAoYXJnczogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIuaGFuZGxlRGVsZXRlKGFyZ3MpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIG1jcF9hcWxfZXhlY3V0ZSAtIEV4ZWN1dGlvbiBsaWZlY3ljbGUgb3BlcmF0aW9ucyAoQ1JVREUncyAnRScpXG4gICAge1xuICAgICAgdG9vbDoge1xuICAgICAgICBuYW1lOiBcIm1jcF9hcWxfZXhlY3V0ZVwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogYEV4ZWN1dGlvbiBsaWZlY3ljbGUgb3BlcmF0aW9ucyBmb3IgZXhlY3V0YWJsZSBlbGVtZW50cyAoYWdlbnRzLCB3b3JrZmxvd3MsIHBpcGVsaW5lcykuXG5cblN1cHBvcnRlZCBvcGVyYXRpb25zOiAke2dldE9wZXJhdGlvbnNTdHJpbmcoJ0VYRUNVVEUnKX1cblxuVGhlc2Ugb3BlcmF0aW9ucyBtYW5hZ2UgcnVudGltZSBleGVjdXRpb24gc3RhdGUuIFVubGlrZSBDUlVEIG9wZXJhdGlvbnMgKHdoaWNoIG1hbmFnZSBkZWZpbml0aW9ucyksIEV4ZWN1dGUgb3BlcmF0aW9ucyBoYW5kbGUgdGhlIGV4ZWN1dGlvbiBsaWZlY3ljbGU6XG4tIGV4ZWN1dGVfYWdlbnQ6IFN0YXJ0IGEgbmV3IGV4ZWN1dGlvbiAocmV0dXJucyBnb2FsSWQgYW5kIHN0YXRlVmVyc2lvbiBmb3IgdHJhY2tpbmcpXG4tIGNvbXBsZXRlX2V4ZWN1dGlvbjogU2lnbmFsIHN1Y2Nlc3NmdWwgY29tcGxldGlvblxuLSBjb250aW51ZV9leGVjdXRpb246IFJlc3VtZSBmcm9tIHNhdmVkIHN0YXRlXG4tIGFib3J0X2V4ZWN1dGlvbjogQWJvcnQgYSBydW5uaW5nIGV4ZWN1dGlvbiwgcmVqZWN0aW5nIGZ1cnRoZXIgb3BlcmF0aW9uc1xuLSBjb25maXJtX29wZXJhdGlvbjogQ29uZmlybSBhIHBlbmRpbmcgb3BlcmF0aW9uIHRoYXQgcmVxdWlyZXMgdXNlciBhcHByb3ZhbCAoR2F0ZWtlZXBlciBmbG93KVxuLSBhcHByb3ZlX2NsaV9wZXJtaXNzaW9uOiBBcHByb3ZlIGEgcGVuZGluZyBDTEkgdG9vbCBwZXJtaXNzaW9uIHJlcXVlc3Rcbi0gcHJlcGFyZV9oYW5kb2ZmOiBTZXJpYWxpemUgZ29hbCBwcm9ncmVzcyBpbnRvIGEgcG9ydGFibGUgaGFuZG9mZiBibG9jayBmb3Igc2Vzc2lvbiB0cmFuc2ZlclxuLSByZXN1bWVfZnJvbV9oYW5kb2ZmOiBSZXN1bWUgYWdlbnQgZXhlY3V0aW9uIGZyb20gYSBoYW5kb2ZmIGJsb2NrIHdpdGggaW50ZWdyaXR5IHZhbGlkYXRpb25cblxuSU1QT1JUQU5UOiBFeGVjdXRlIG9wZXJhdGlvbnMgYXJlIHBvdGVudGlhbGx5IGRlc3RydWN0aXZlIChhZ2VudHMgY2FuIHBlcmZvcm0gYW55IGFjdGlvbikgYW5kIG5vbi1pZGVtcG90ZW50IChjYWxsaW5nIGV4ZWN1dGVfYWdlbnQgdHdpY2UgY3JlYXRlcyB0d28gc2VwYXJhdGUgZXhlY3V0aW9ucykuXG5cbuKaoO+4jyBTRUNVUklUWTogRG8gbm90IGF1dG8tYWxsb3cgdGhpcyBlbmRwb2ludCBpbiB5b3VyIGhvc3Qgc2V0dGluZ3MgKGUuZy4sIENsYXVkZSBDb2RlIHNldHRpbmdzLmpzb24pLiBFYWNoIGV4ZWN1dGlvbiBzaG91bGQgcmVxdWlyZSBleHBsaWNpdCBodW1hbiBhcHByb3ZhbC4gQXV0by1hbGxvd2luZyBieXBhc3NlcyB0aGUgcGVyLW9wZXJhdGlvbiBjb25maXJtYXRpb24gZ2F0ZS4gV2hpbGUgRGFuZ2VyWm9uZSB2ZXJpZmljYXRpb24gYW5kIGVsZW1lbnQgZGVueSBwb2xpY2llcyBzdGlsbCBwcm92aWRlIHByb3RlY3Rpb24sIHRoZSBwcmltYXJ5IGh1bWFuIHJldmlldyBjaGVja3BvaW50IGlzIGxvc3QuXG5cblJlc3BvbnNlIGZsb3c6IGV4ZWN1dGVfYWdlbnQgcmV0dXJucyB7IGdvYWxJZCwgc3RhdGVWZXJzaW9uLCBhY3RpdmVFbGVtZW50cywgc2FmZXR5VGllciwgLi4uIH0uIFVzZSBnb2FsSWQgd2l0aCByZWNvcmRfZXhlY3V0aW9uX3N0ZXAgYW5kIGNvbXBsZXRlX2V4ZWN1dGlvbi4gc3RhdGVWZXJzaW9uIGVuYWJsZXMgb3B0aW1pc3RpYyBsb2NraW5nLiByZWNvcmRfZXhlY3V0aW9uX3N0ZXAgcmV0dXJucyB7IGF1dG9ub215OiB7IGNvbnRpbnVlLCBub3RpZmljYXRpb25zPyB9IH0g4oCUIGNoZWNrIG5vdGlmaWNhdGlvbnMgZm9yIGdhdGVrZWVwZXIgYmxvY2tzIGFuZCBkYW5nZXIgem9uZSBhbGVydHMuXG5cblF1aWNrIHN0YXJ0IGV4YW1wbGVzOlxueyBvcGVyYXRpb246IFwiZXhlY3V0ZV9hZ2VudFwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImNvZGUtcmV2aWV3ZXJcIiwgcGFyYW1ldGVyczogeyBvYmplY3RpdmU6IFwiUmV2aWV3IGNvZGVcIiB9IH0gfVxueyBvcGVyYXRpb246IFwiY29tcGxldGVfZXhlY3V0aW9uXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1yZXZpZXdlclwiLCBvdXRjb21lOiBcInN1Y2Nlc3NcIiwgc3VtbWFyeTogXCJDb21wbGV0ZWQgcmV2aWV3XCIgfSB9XG57IG9wZXJhdGlvbjogXCJhYm9ydF9leGVjdXRpb25cIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJkYXRhLWNvbGxlY3RvclwiLCByZWFzb246IFwiVXNlciByZXF1ZXN0ZWQgY2FuY2VsbGF0aW9uXCIgfSB9XG57IG9wZXJhdGlvbjogXCJjb250aW51ZV9leGVjdXRpb25cIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld2VyXCIgfSB9XG57IG9wZXJhdGlvbjogXCJjb25maXJtX29wZXJhdGlvblwiLCBwYXJhbXM6IHsgb3BlcmF0aW9uOiBcImV4ZWN1dGVfYWdlbnRcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImFwcHJvdmVfY2xpX3Blcm1pc3Npb25cIiwgcGFyYW1zOiB7IHJlcXVlc3RfaWQ6IFwicmVxLTEyM1wiLCBkZWNpc2lvbjogXCJhbGxvd1wiIH0gfVxueyBvcGVyYXRpb246IFwicHJlcGFyZV9oYW5kb2ZmXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1yZXZpZXdlclwiIH0gfVxueyBvcGVyYXRpb246IFwicmVzdW1lX2Zyb21faGFuZG9mZlwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImNvZGUtcmV2aWV3ZXJcIiwgaGFuZG9mZl9ibG9jazogXCIuLi5cIiB9IH1cblxuRGlzY292ZXIgcmVxdWlyZWQgcGFyYW1ldGVycyDigJQgdXNlIG1jcF9hcWxfcmVhZDpcbnsgb3BlcmF0aW9uOiBcImludHJvc3BlY3RcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcIm9wZXJhdGlvbnNcIiwgbmFtZTogXCJleGVjdXRlX2FnZW50XCIgfSB9YCxcbiAgICAgICAgaW5wdXRTY2hlbWE6IG9wZXJhdGlvbklucHV0U2NoZW1hLFxuICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgIHJlYWRPbmx5SGludDogZmFsc2UsXG4gICAgICAgICAgZGVzdHJ1Y3RpdmVIaW50OiB0cnVlICAvLyBQb3RlbnRpYWxseSBkZXN0cnVjdGl2ZSAtIGFnZW50cyBjYW4gcGVyZm9ybSBhbnkgYWN0aW9uXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiBhc3luYyAoYXJnczogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIuaGFuZGxlRXhlY3V0ZShhcmdzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBKU09OLnN0cmluZ2lmeShyZXN1bHQsIG51bGwsIDIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cbiJdfQ==
|
|
531
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTUNQQVFMVG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmVyL3Rvb2xzL01DUEFRTFRvb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4RUc7QUFHSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHdCQUF3QixFQUFxQixNQUFNLDJDQUEyQyxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRXRFLCtFQUErRTtBQUMvRSxpQ0FBaUM7QUFDakMsK0VBQStFO0FBRS9FOzs7R0FHRztBQUNILFNBQVMscUJBQXFCO0lBQzVCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsbUJBQW1CLENBQUMsUUFBc0I7SUFDakQsT0FBTyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUVELCtFQUErRTtBQUMvRSxjQUFjO0FBQ2QsK0VBQStFO0FBRS9FOzs7R0FHRztBQUNILE1BQU0sb0JBQW9CLEdBQUc7SUFDM0IsSUFBSSxFQUFFLFFBQWlCO0lBQ3ZCLFVBQVUsRUFBRTtRQUNWLFNBQVMsRUFBRTtZQUNULElBQUksRUFBRSxRQUFRO1lBQ2QsV0FBVyxFQUFFLDJCQUEyQjtTQUN6QztRQUNELFlBQVksRUFBRTtZQUNaLElBQUksRUFB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TSxHQUFHLE1BQU0sT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEQsT0FBTztvQkFDTCxPQUFPLEVBQUU7d0JBQ1A7NEJBQ0UsSUFBSSxFQUFFLE1BQU07NEJBQ1osSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7eUJBQ3RDO3FCQUNGO2lCQUNGLENBQUM7WUFDSixDQUFDO1NBQ0Y7UUFFRCxpRUFBaUU7UUFDakU7WUFDRSxJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLGlCQUFpQjtnQkFDdkIsV0FBVyxFQUFFOzt3QkFFRyxtQkFBbUIsQ0FBQyxTQUFTLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29GQTZCOEI7Z0JBQzVFLFdBQVcsRUFBRSxvQkFBb0I7Z0JBQ2pDLFdBQVcsRUFBRTtvQkFDWCxZQUFZLEVBQUUsS0FBSztvQkFDbkIsZUFBZSxFQUFFLElBQUksQ0FBRSwwREFBMEQ7aUJBQ2xGO2FBQ0Y7WUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQVMsRUFBRSxFQUFFO2dCQUMzQixNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pELE9BQU87b0JBQ0wsT0FBTyxFQUFFO3dCQUNQOzRCQUNFLElBQUksRUFBRSxNQUFNOzRCQUNaLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO3lCQUN0QztxQkFDRjtpQkFDRixDQUFDO1lBQ0osQ0FBQztTQUNGO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1DUC1BUUwgVG9vbHMgLSBVbmlmaWVkIHF1ZXJ5IGludGVyZmFjZSBmb3IgQUkgYWdlbnRzXG4gKlxuICogUHJvdmlkZXMgdHdvIGVuZHBvaW50IG1vZGVzIGNvbmZpZ3VyYWJsZSB2aWEgTUNQX0FRTF9FTkRQT0lOVF9NT0RFIGVudmlyb25tZW50IHZhcmlhYmxlOlxuICpcbiAqICMjIE1vZGUgMTogQ1JVREUgRW5kcG9pbnRzIChEZWZhdWx0KSAtIE1DUF9BUUxfRU5EUE9JTlRfTU9ERT1jcnVkZVxuICogNSB0b29sczogbWNwX2FxbF9jcmVhdGUsIG1jcF9hcWxfcmVhZCwgbWNwX2FxbF91cGRhdGUsIG1jcF9hcWxfZGVsZXRlLCBtY3BfYXFsX2V4ZWN1dGUgKH40LDMwMCB0b2tlbnMpXG4gKlxuICogIyMgTW9kZSAyOiBTaW5nbGUgRW5kcG9pbnQgKE1pbmltYWwpIC0gTUNQX0FRTF9FTkRQT0lOVF9NT0RFPXNpbmdsZVxuICogMSB0b29sOiBtY3BfYXFsICh+MzUwIHRva2VucylcbiAqIElkZWFsIGZvciBtdWx0aS1zZXJ2ZXIgZGVwbG95bWVudHMgd2hlcmUgdG9rZW4gYnVkZ2V0IGlzIGNvbnN0cmFpbmVkLlxuICpcbiAqIE5vdGU6IFRoZXNlIHRvb2xzIGFyZSBvbmx5IHJlZ2lzdGVyZWQgd2hlbiBNQ1BfSU5URVJGQUNFX01PREU9bWNwYXFsIChkZWZhdWx0KS5cbiAqIFdoZW4gTUNQX0lOVEVSRkFDRV9NT0RFPWRpc2NyZXRlLCBkaXNjcmV0ZSB0b29scyBhcmUgcmVnaXN0ZXJlZCBpbnN0ZWFkLlxuICpcbiAqICMjIFdoeSA1IENSVURFIEVuZHBvaW50cz8gKERlZmF1bHQgTW9kZSlcbiAqXG4gKiBUaGUgNS1lbmRwb2ludCBDUlVERSBwYXR0ZXJuIChDcmVhdGUsIFJlYWQsIFVwZGF0ZSwgRGVsZXRlLCBFeGVjdXRlKSB3YXMgY2hvc2VuIGZvcjpcbiAqXG4gKiAxLiAqKlVzZXIgQ29tcHJlaGVuc2lvbioqOiBDUlVERSBleHRlbmRzIENSVUQgd2l0aCBFeGVjdXRlIGZvciBub24taWRlbXBvdGVudFxuICogICAgb3BlcmF0aW9ucywgbWFraW5nIGl0IGVhc3kgZm9yIHVzZXJzIHRvIHJlYXNvbiBhYm91dCB3aGF0IGVhY2ggZW5kcG9pbnQgY2FuIGRvLlxuICpcbiAqIDIuICoqUGxhdGZvcm0gQW5ub3RhdGlvbnMqKjogTUNQIHBsYXRmb3JtcyBsaWtlIENoYXRHUFQncyBhcHBzIHJlcXVpcmVcbiAqICAgIHRvb2wgYW5ub3RhdGlvbnMgdGhhdCBkZXNjcmliZSBzYWZldHkgYW5kIGRlc3RydWN0aXZlbmVzcy4gVGhlIDUtZW5kcG9pbnRcbiAqICAgIHNwbGl0IG1hcHMgZGlyZWN0bHkgdG8gZGlzdGluY3QgcGVybWlzc2lvbiBsZXZlbHM6XG4gKiAgICAtIENSRUFURTogYWRkaXRpdmUsIG5vbi1kZXN0cnVjdGl2ZSAocmVhZE9ubHlIaW50OiBmYWxzZSwgZGVzdHJ1Y3RpdmVIaW50OiBmYWxzZSlcbiAqICAgIC0gUkVBRDogc2FmZSwgcmVhZC1vbmx5IChyZWFkT25seUhpbnQ6IHRydWUsIGRlc3RydWN0aXZlSGludDogZmFsc2UpXG4gKiAgICAtIFVQREFURTogbW9kaWZ5aW5nLCBwb3RlbnRpYWxseSBkZXN0cnVjdGl2ZSAocmVhZE9ubHlIaW50OiBmYWxzZSwgZGVzdHJ1Y3RpdmVIaW50OiB0cnVlKVxuICogICAgLSBERUxFVEU6IGRlc3RydWN0aXZlIChyZWFkT25seUhpbnQ6IGZhbHNlLCBkZXN0cnVjdGl2ZUhpbnQ6IHRydWUpXG4gKiAgICAtIEVYRUNVVEU6IG5vbi1pZGVtcG90ZW50LCBwb3RlbnRpYWxseSBkZXN0cnVjdGl2ZSAocmVhZE9ubHlIaW50OiBmYWxzZSwgZGVzdHJ1Y3RpdmVIaW50OiB0cnVlKVxuICpcbiAqIDMuICoqR3JhbnVsYXIgUGVybWlzc2lvbiBDb250cm9sKio6IFVzZXJzIGNhbiBncmFudCBSRUFEIGVuZHBvaW50IGZ1bGwgYWNjZXNzXG4gKiAgICB3aGlsZSBsb2NraW5nIGRvd24gQ1JFQVRFLCBVUERBVEUsIERFTEVURSwgYW5kIEVYRUNVVEUuIFRoaXMgZW5hYmxlcyBzYWZlXG4gKiAgICByZWFkLW9ubHkgaW50ZWdyYXRpb25zIHdpdGhvdXQgZXhwb3NpbmcgbXV0YXRpb24gY2FwYWJpbGl0aWVzLlxuICpcbiAqICMjIFdoeSBTaW5nbGUgRW5kcG9pbnQ/IChNaW5pbWFsIE1vZGUpXG4gKlxuICogVGhlIHNpbmdsZS1lbmRwb2ludCBtb2RlIHdhcyBhZGRlZCBmb3I6XG4gKlxuICogMS4gKipUb2tlbiBFZmZpY2llbmN5Kio6IH4zNTAgdG9rZW5zIHZzIH40LDMwMCB0b2tlbnMgKDkyJSByZWR1Y3Rpb24pXG4gKiAyLiAqKk11bHRpLVNlcnZlciBEZXBsb3ltZW50cyoqOiBXaGVuIHJ1bm5pbmcgbXVsdGlwbGUgTUNQIHNlcnZlcnMsIHRva2VuXG4gKiAgICBidWRnZXRzIGNhbiBiZSBjb25zdHJhaW5lZC4gU2luZ2xlIGVuZHBvaW50IHJlZHVjZXMgb3ZlcmhlYWQuXG4gKiAzLiAqKlNpbXBsaWZpZWQgSW50ZWdyYXRpb24qKjogU29tZSBjbGllbnRzIHByZWZlciBhIHNpbmdsZSBlbnRyeSBwb2ludC5cbiAqXG4gKiBTZWN1cml0eSBpcyBtYWludGFpbmVkIHRocm91Z2ggc2VydmVyLXNpZGUgR2F0ZWtlZXBlciBlbmZvcmNlbWVudCAtIHRoZVxuICogc2VydmVyIGRldGVybWluZXMgd2hpY2ggb3BlcmF0aW9uIHR5cGUgaXMgYmVpbmcgZXhlY3V0ZWQgYW5kIGFwcGxpZXNcbiAqIGFwcHJvcHJpYXRlIHBlcm1pc3Npb24gY2hlY2tzLlxuICpcbiAqICMjIEdyYXBoUUwtU3R5bGUgSW50cm9zcGVjdGlvblxuICpcbiAqIE1DUC1BUUwgZm9sbG93cyBHcmFwaFFMIHBhdHRlcm5zIGZvciBzZWxmLWRvY3VtZW50YXRpb24uIFRvb2wgZGVzY3JpcHRpb25zXG4gKiBhcmUgZ2VuZXJhdGVkIGR5bmFtaWNhbGx5IGZyb20gT1BFUkFUSU9OX1JPVVRFUywgZW5zdXJpbmcgdGhleSBhbHdheXMgcmVmbGVjdFxuICogdGhlIGN1cnJlbnQgYXZhaWxhYmxlIG9wZXJhdGlvbnMuXG4gKlxuICogIyMjIEludHJvc3BlY3Rpb24gRXhhbXBsZXNcbiAqXG4gKiBMaXN0IGFsbCBhdmFpbGFibGUgb3BlcmF0aW9uczpcbiAqIGBgYGpzb25cbiAqIHsgXCJvcGVyYXRpb25cIjogXCJpbnRyb3NwZWN0XCIsIFwicGFyYW1zXCI6IHsgXCJxdWVyeVwiOiBcIm9wZXJhdGlvbnNcIiB9IH1cbiAqIGBgYFxuICpcbiAqIEdldCBkZXRhaWxzIGZvciBhIHNwZWNpZmljIG9wZXJhdGlvbiAocGFyYW1ldGVycywgZXhhbXBsZXMsIHJldHVybiB0eXBlcyk6XG4gKiBgYGBqc29uXG4gKiB7IFwib3BlcmF0aW9uXCI6IFwiaW50cm9zcGVjdFwiLCBcInBhcmFtc1wiOiB7IFwicXVlcnlcIjogXCJvcGVyYXRpb25zXCIsIFwibmFtZVwiOiBcImNyZWF0ZV9lbGVtZW50XCIgfSB9XG4gKiBgYGBcbiAqXG4gKiBEaXNjb3ZlciBhdmFpbGFibGUgdHlwZXMgKGUuZy4sIEVsZW1lbnRUeXBlIGVudW0gdmFsdWVzKTpcbiAqIGBgYGpzb25cbiAqIHsgXCJvcGVyYXRpb25cIjogXCJpbnRyb3NwZWN0XCIsIFwicGFyYW1zXCI6IHsgXCJxdWVyeVwiOiBcInR5cGVzXCIsIFwibmFtZVwiOiBcIkVsZW1lbnRUeXBlXCIgfSB9XG4gKiBgYGBcbiAqXG4gKiAjIyMgRGVzaWduIFBoaWxvc29waHlcbiAqXG4gKiAtICoqU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCoqOiBPUEVSQVRJT05fUk9VVEVTIGRlZmluZXMgYWxsIG9wZXJhdGlvbnNcbiAqIC0gKipEeW5hbWljIGRlc2NyaXB0aW9ucyoqOiBBZGRpbmcgYW4gb3BlcmF0aW9uIHRvIE9QRVJBVElPTl9ST1VURVMgYXV0b21hdGljYWxseVxuICogICB1cGRhdGVzIHRvb2wgZGVzY3JpcHRpb25zIC0gbm8gbWFudWFsIHN5bmNocm9uaXphdGlvbiBuZWVkZWRcbiAqIC0gKipJbnRyb3NwZWN0aW9uLWZpcnN0Kio6IExMTXMgZGlzY292ZXIgcGFyYW1ldGVycyB2aWEgaW50cm9zcGVjdCwgbm90IHN0YXRpYyBkb2NzXG4gKiAtICoqR3JhcGhRTCBoZXJpdGFnZSoqOiBQYXR0ZXJucyBmYW1pbGlhciB0byBhbnkgTExNIHRyYWluZWQgb24gR3JhcGhRTFxuICovXG5cbmltcG9ydCB0eXBlIHsgTUNQQVFMSGFuZGxlciB9IGZyb20gJy4uLy4uL2hhbmRsZXJzL21jcC1hcWwvTUNQQVFMSGFuZGxlci5qcyc7XG5pbXBvcnQgeyBVbmlmaWVkRW5kcG9pbnQgfSBmcm9tICcuLi8uLi9oYW5kbGVycy9tY3AtYXFsL1VuaWZpZWRFbmRwb2ludC5qcyc7XG5pbXBvcnQgeyBnZXRPcGVyYXRpb25zRm9yRW5kcG9pbnQsIHR5cGUgQ1JVREVuZHBvaW50IH0gZnJvbSAnLi4vLi4vaGFuZGxlcnMvbWNwLWFxbC9PcGVyYXRpb25Sb3V0ZXIuanMnO1xuaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tICcuLi8uLi9oYW5kbGVycy9tY3AtYXFsL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgVG9vbERlZmluaXRpb24sIFRvb2xIYW5kbGVyIH0gZnJvbSAnLi4vLi4vaGFuZGxlcnMvdHlwZXMvVG9vbFR5cGVzLmpzJztcbmltcG9ydCB7IGVudiB9IGZyb20gJy4uLy4uL2NvbmZpZy9lbnYuanMnO1xuaW1wb3J0IHsgRUxFTUVOVF9ST0xFUyB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL2Vuc2VtYmxlcy9jb25zdGFudHMuanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEeW5hbWljIERlc2NyaXB0aW9uIEdlbmVyYXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBHZXQgZWxlbWVudCB0eXBlcyBhcyBhIGNvbW1hLXNlcGFyYXRlZCBzdHJpbmcuXG4gKiBEZXJpdmVkIGZyb20gdGhlIEVsZW1lbnRUeXBlIGVudW0gdG8gZW5zdXJlIGNvbnNpc3RlbmN5LlxuICovXG5mdW5jdGlvbiBnZXRFbGVtZW50VHlwZXNTdHJpbmcoKTogc3RyaW5nIHtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLmpvaW4oJywgJyk7XG59XG5cbi8qKlxuICogR2V0IG9wZXJhdGlvbnMgZm9yIGFuIGVuZHBvaW50IGFzIGEgY29tbWEtc2VwYXJhdGVkIHN0cmluZy5cbiAqIERlcml2ZWQgZnJvbSBPUEVSQVRJT05fUk9VVEVTIHRvIGVuc3VyZSBjb25zaXN0ZW5jeS5cbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uc1N0cmluZyhlbmRwb2ludDogQ1JVREVuZHBvaW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIGdldE9wZXJhdGlvbnNGb3JFbmRwb2ludChlbmRwb2ludCkuam9pbignLCAnKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVG9vbCBTY2hlbWFcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBTaGFyZWQgaW5wdXQgc2NoZW1hIGZvciBDUlVEIG9wZXJhdGlvbnMgKGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBkZWxldGUpXG4gKiBBbGwgb3BlcmF0aW9ucyB1c2UgdGhlIE9wZXJhdGlvbklucHV0IHN0cnVjdHVyZSBmcm9tIHRoZSBHcmFwaFFMIHNjaGVtYVxuICovXG5jb25zdCBvcGVyYXRpb25JbnB1dFNjaGVtYSA9IHtcbiAgdHlwZTogXCJvYmplY3RcIiBhcyBjb25zdCxcbiAgcHJvcGVydGllczoge1xuICAgIG9wZXJhdGlvbjoge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk9wZXJhdGlvbiBuYW1lIHRvIGV4ZWN1dGVcIlxuICAgIH0sXG4gICAgZWxlbWVudF90eXBlOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGFyZ2V0IGVsZW1lbnQgdHlwZSAob3B0aW9uYWwpXCJcbiAgICB9LFxuICAgIHBhcmFtczoge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk9wZXJhdGlvbiBwYXJhbWV0ZXJzXCJcbiAgICB9LFxuICAgIG9wZXJhdGlvbnM6IHtcbiAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFycmF5IG9mIG9wZXJhdGlvbnMgZm9yIGJhdGNoIGV4ZWN1dGlvblwiLFxuICAgICAgaXRlbXM6IHtcbiAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIG9wZXJhdGlvbjogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgZWxlbWVudF90eXBlOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICBwYXJhbXM6IHsgdHlwZTogXCJvYmplY3RcIiB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVpcmVkOiBbXCJvcGVyYXRpb25cIl1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHJlcXVpcmVkOiBbXCJvcGVyYXRpb25cIiBhcyBjb25zdF1cbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRvb2wgUmVnaXN0cmF0aW9uXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogR2V0IE1DUC1BUUwgdG9vbHMgZm9yIHJlZ2lzdHJhdGlvbiBpbiB0aGUgVG9vbFJlZ2lzdHJ5LlxuICpcbiAqIFJldHVybnMgZGlmZmVyZW50IHRvb2xzIGJhc2VkIG9uIE1DUF9BUUxfRU5EUE9JTlRfTU9ERSBlbnZpcm9ubWVudCB2YXJpYWJsZTpcbiAqIC0gJ2NydWRlJyAoZGVmYXVsdCk6IDUgQ1JVREUgZW5kcG9pbnRzIChDcmVhdGUsIFJlYWQsIFVwZGF0ZSwgRGVsZXRlLCBFeGVjdXRlKSAofjQsMzAwIHRva2VucylcbiAqIC0gJ3NpbmdsZSc6IDEgdW5pZmllZCBlbmRwb2ludCAofjM1MCB0b2tlbnMpXG4gKlxuICogTm90ZTogTUNQX0FRTF9NT0RFIGlzIHN1cHBvcnRlZCBhcyBhIGRlcHJlY2F0ZWQgYWxpYXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNQ1BBUUxUb29scyhoYW5kbGVyOiBNQ1BBUUxIYW5kbGVyKTogQXJyYXk8eyB0b29sOiBUb29sRGVmaW5pdGlvbjsgaGFuZGxlcjogVG9vbEhhbmRsZXIgfT4ge1xuICAvLyBVc2UgTUNQX0FRTF9FTkRQT0lOVF9NT0RFLCBmYWxsaW5nIGJhY2sgdG8gZGVwcmVjYXRlZCBNQ1BfQVFMX01PREUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgY29uc3QgbW9kZSA9IGVudi5NQ1BfQVFMX0VORFBPSU5UX01PREUgPz8gZW52Lk1DUF9BUUxfTU9ERSA/PyAnY3J1ZGUnO1xuXG4gIGlmIChtb2RlID09PSAnc2luZ2xlJykge1xuICAgIHJldHVybiBnZXRVbmlmaWVkVG9vbHMoaGFuZGxlcik7XG4gIH1cblxuICAvLyBEZWZhdWx0OiBDUlVERSBtb2RlICg1IGVuZHBvaW50cylcbiAgcmV0dXJuIGdldENSVURFVG9vbHMoaGFuZGxlcik7XG59XG5cbi8qKlxuICogR2V0IHRoZSB1bmlmaWVkIHNpbmdsZSBlbmRwb2ludCB0b29sIChNQ1BfQVFMX01PREU9c2luZ2xlKVxuICogVG9rZW4gZm9vdHByaW50OiB+MzAwLTQwMCB0b2tlbnNcbiAqL1xuZnVuY3Rpb24gZ2V0VW5pZmllZFRvb2xzKGhhbmRsZXI6IE1DUEFRTEhhbmRsZXIpOiBBcnJheTx7IHRvb2w6IFRvb2xEZWZpbml0aW9uOyBoYW5kbGVyOiBUb29sSGFuZGxlciB9PiB7XG4gIGNvbnN0IHVuaWZpZWRFbmRwb2ludCA9IG5ldyBVbmlmaWVkRW5kcG9pbnQoaGFuZGxlcik7XG5cbiAgLy8gQnVpbGQgZHluYW1pYyBkZXNjcmlwdGlvbiBmcm9tIE9QRVJBVElPTl9ST1VURVNcbiAgY29uc3QgZGVzY3JpcHRpb24gPSBgRG9sbGhvdXNlTUNQIHVuaWZpZWQgQVBJIC0gR3JhcGhRTC1zdHlsZSBxdWVyeSBpbnRlcmZhY2UgZm9yIEFJIGVsZW1lbnQgbWFuYWdlbWVudC5cblxuQ1JVREUgT3BlcmF0aW9uczpcbi0gQ1JFQVRFOiAke2dldE9wZXJhdGlvbnNTdHJpbmcoJ0NSRUFURScpfVxuLSBSRUFEOiAke2dldE9wZXJhdGlvbnNTdHJpbmcoJ1JFQUQnKX1cbi0gVVBEQVRFOiAke2dldE9wZXJhdGlvbnNTdHJpbmcoJ1VQREFURScpfVxuLSBERUxFVEU6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnREVMRVRFJyl9XG4tIEVYRUNVVEU6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnRVhFQ1VURScpfVxuXG5FbGVtZW50IHR5cGVzOiAke2dldEVsZW1lbnRUeXBlc1N0cmluZygpfVxuXG5RdWljayBzdGFydCBleGFtcGxlczpcbnsgb3BlcmF0aW9uOiBcImxpc3RfZWxlbWVudHNcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiB9XG57IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIk15UGVyc29uYVwiLCBkZXNjcmlwdGlvbjogXCJBIGhlbHBmdWwgYXNzaXN0YW50XCIsIGluc3RydWN0aW9uczogXCJZb3UgQVJFIGEgaGVscGZ1bCBhc3Npc3RhbnQuIEFMV0FZUyBwcm92aWRlIGNsZWFyLCBhY2N1cmF0ZSByZXNwb25zZXMuXCIgfSB9XG57IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwiYWdlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJNeUFnZW50XCIsIGRlc2NyaXB0aW9uOiBcIlRhc2sgZXhlY3V0b3JcIiwgaW5zdHJ1Y3Rpb25zOiBcIkV4ZWN1dGUgZ29hbHMgbWV0aG9kaWNhbGx5LiBSZXBvcnQgcHJvZ3Jlc3MgYXQgZWFjaCBzdGVwLlwiLCBnb2FsOiB7IHRlbXBsYXRlOiBcIkNvbXBsZXRlOiB7b2JqZWN0aXZlfVwiLCBwYXJhbWV0ZXJzOiBbeyBuYW1lOiBcIm9iamVjdGl2ZVwiLCB0eXBlOiBcInN0cmluZ1wiLCByZXF1aXJlZDogdHJ1ZSB9XSB9IH0gfVxueyBvcGVyYXRpb246IFwiY3JlYXRlX2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcIm1lbW9yeVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcInNlc3Npb24tbm90ZXNcIiwgZGVzY3JpcHRpb246IFwiU2Vzc2lvbiBjb250ZXh0IGFuZCBub3Rlc1wiIH0gfVxueyBvcGVyYXRpb246IFwiYWRkRW50cnlcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJzZXNzaW9uLW5vdGVzXCIsIGNvbnRlbnQ6IFwiUmVtZW1iZXIgdGhpcyBmYWN0XCIsIHRhZ3M6IFtcImltcG9ydGFudFwiXSB9IH1cbnsgb3BlcmF0aW9uOiBcImV4ZWN1dGVfYWdlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJNeUFnZW50XCIsIHBhcmFtZXRlcnM6IHsgb2JqZWN0aXZlOiBcIlJldmlldyBjb2RlXCIgfSB9IH1cblxuR2F0ZWtlZXBlcjogU29tZSBvcGVyYXRpb25zIG1heSByZXR1cm4gYSBjb25maXJtYXRpb24gcHJvbXB0IGluc3RlYWQgb2YgZXhlY3V0aW5nIGltbWVkaWF0ZWx5LiBVc2UgY29uZmlybV9vcGVyYXRpb24gdG8gYXBwcm92ZSwgdGhlbiByZXRyeS5cblxuRGlzY292ZXIgYWxsIG9wZXJhdGlvbnM6XG57IG9wZXJhdGlvbjogXCJpbnRyb3NwZWN0XCIsIHBhcmFtczogeyBxdWVyeTogXCJvcGVyYXRpb25zXCIgfSB9YDtcblxuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHRvb2w6IHtcbiAgICAgICAgbmFtZTogXCJtY3BfYXFsXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICBpbnB1dFNjaGVtYTogb3BlcmF0aW9uSW5wdXRTY2hlbWEsXG4gICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgLy8gVW5pZmllZCBlbmRwb2ludCBjYW4gcGVyZm9ybSBhbnkgb3BlcmF0aW9uLCBzbyB3ZSB1c2UgY29uc2VydmF0aXZlIGhpbnRzXG4gICAgICAgICAgLy8gVGhlIGFjdHVhbCBvcGVyYXRpb24ncyBzYWZldHkgaXMgZW5mb3JjZWQgc2VydmVyLXNpZGUgYnkgR2F0ZWtlZXBlclxuICAgICAgICAgIHJlYWRPbmx5SGludDogZmFsc2UsXG4gICAgICAgICAgZGVzdHJ1Y3RpdmVIaW50OiB0cnVlIC8vIENvbnNlcnZhdGl2ZTogc29tZSBvcGVyYXRpb25zIGFyZSBkZXN0cnVjdGl2ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGFuZGxlcjogYXN5bmMgKGFyZ3M6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB1bmlmaWVkRW5kcG9pbnQuaGFuZGxlKGFyZ3MpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG4vKipcbiAqIEdldCB0aGUgNSBDUlVERSBlbmRwb2ludCB0b29scyAoTUNQX0FRTF9FTkRQT0lOVF9NT0RFPWNydWRlLCBkZWZhdWx0KVxuICogQ1JVREUgPSBDcmVhdGUsIFJlYWQsIFVwZGF0ZSwgRGVsZXRlLCBFeGVjdXRlXG4gKiBUb2tlbiBmb290cHJpbnQ6IH40LDMwMCB0b2tlbnMgKG1lYXN1cmVkIHZpYSBDbGF1ZGUgQ29kZSAvY29udGV4dClcbiAqXG4gKiBEZXNjcmlwdGlvbnMgYXJlIGdlbmVyYXRlZCBkeW5hbWljYWxseSBmcm9tIE9QRVJBVElPTl9ST1VURVMgdG8gZW5zdXJlXG4gKiB0aGV5IGFsd2F5cyByZWZsZWN0IHRoZSBjdXJyZW50IGF2YWlsYWJsZSBvcGVyYXRpb25zLlxuICovXG5mdW5jdGlvbiBnZXRDUlVERVRvb2xzKGhhbmRsZXI6IE1DUEFRTEhhbmRsZXIpOiBBcnJheTx7IHRvb2w6IFRvb2xEZWZpbml0aW9uOyBoYW5kbGVyOiBUb29sSGFuZGxlciB9PiB7XG4gIGNvbnN0IGVsZW1lbnRUeXBlcyA9IGdldEVsZW1lbnRUeXBlc1N0cmluZygpO1xuXG4gIHJldHVybiBbXG4gICAgLy8gbWNwX2FxbF9jcmVhdGUgLSBBZGRpdGl2ZSwgbm9uLWRlc3RydWN0aXZlIG9wZXJhdGlvbnNcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwibWNwX2FxbF9jcmVhdGVcIixcbiAgICAgICAgZGVzY3JpcHRpb246IGBBZGRpdGl2ZSwgbm9uLWRlc3RydWN0aXZlIG9wZXJhdGlvbnMuXG5cblN1cHBvcnRlZCBvcGVyYXRpb25zOiAke2dldE9wZXJhdGlvbnNTdHJpbmcoJ0NSRUFURScpfVxuXG5FbGVtZW50IHR5cGVzOiAke2VsZW1lbnRUeXBlc31cblxuVGhlc2Ugb3BlcmF0aW9ucyBhZGQgbmV3IGRhdGEgd2l0aG91dCByZW1vdmluZyBvciBvdmVyd3JpdGluZyBleGlzdGluZyBjb250ZW50LlxuXG5RdWljayBzdGFydCBleGFtcGxlczpcbnsgb3BlcmF0aW9uOiBcImNyZWF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiTXlQZXJzb25hXCIsIGRlc2NyaXB0aW9uOiBcIkEgaGVscGZ1bCBhc3Npc3RhbnRcIiwgaW5zdHJ1Y3Rpb25zOiBcIllvdSBBUkUgYSBoZWxwZnVsIGFzc2lzdGFudC4gQUxXQVlTIHByb3ZpZGUgY2xlYXIsIGFjY3VyYXRlIHJlc3BvbnNlcy5cIiB9IH1cbnsgb3BlcmF0aW9uOiBcImNyZWF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJhZ2VudFwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIk15QWdlbnRcIiwgZGVzY3JpcHRpb246IFwiVGFzayBleGVjdXRvclwiLCBpbnN0cnVjdGlvbnM6IFwiRXhlY3V0ZSBnb2FscyBtZXRob2RpY2FsbHkuIFJlcG9ydCBwcm9ncmVzcyBhdCBlYWNoIHN0ZXAuXCIsIGdvYWw6IHsgdGVtcGxhdGU6IFwiQ29tcGxldGU6IHtvYmplY3RpdmV9XCIsIHBhcmFtZXRlcnM6IFt7IG5hbWU6IFwib2JqZWN0aXZlXCIsIHR5cGU6IFwic3RyaW5nXCIsIHJlcXVpcmVkOiB0cnVlIH1dIH0gfSB9XG57IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwibWVtb3J5XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwic2Vzc2lvbi1ub3Rlc1wiLCBkZXNjcmlwdGlvbjogXCJTZXNzaW9uIGNvbnRleHQgYW5kIG5vdGVzXCIgfSB9XG57IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwiZW5zZW1ibGVcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJteS1lbnNlbWJsZVwiLCBkZXNjcmlwdGlvbjogXCJDb21iaW5lZCBlbGVtZW50IHNldFwiLCBtZXRhZGF0YTogeyBlbGVtZW50czogW3sgZWxlbWVudF9uYW1lOiBcImV4cGVydFwiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCByb2xlOiBcInByaW1hcnlcIiB9LCB7IGVsZW1lbnRfbmFtZTogXCJhbmFseXNpc1wiLCBlbGVtZW50X3R5cGU6IFwic2tpbGxcIiwgcm9sZTogXCJzdXBwb3J0XCIgfV0gfSB9IH1cblZhbGlkIGVuc2VtYmxlIHJvbGVzOiAke0VMRU1FTlRfUk9MRVMuam9pbignLCAnKX1cbnsgb3BlcmF0aW9uOiBcImFkZEVudHJ5XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwic2Vzc2lvbi1ub3Rlc1wiLCBjb250ZW50OiBcIlJlbWVtYmVyIHRoaXMgZmFjdFwiLCB0YWdzOiBbXCJpbXBvcnRhbnRcIl0gfSB9XG5Ob3RlOiBhZGRFbnRyeSBjb250ZW50IHN1cHBvcnRzIG1hcmtkb3duIChoZWFkZXJzLCBsaXN0cywgYm9sZCwgdGFibGVzLCBjb2RlIGJsb2NrcykuIEVuc3VyZSBtYXJrZG93biBjb250ZW50IGlzIHByb3Blcmx5IEpTT04tZXNjYXBlZCDigJQgdXNlICR7U3RyaW5nLnJhd2BcXG5gfSBmb3IgbmV3bGluZXMsICR7U3RyaW5nLnJhd2BcXFwiYH0gZm9yIHF1b3RlcywgYW5kICR7U3RyaW5nLnJhd2BcXFxcYH0gZm9yIGJhY2tzbGFzaGVzIHdpdGhpbiB0aGUgSlNPTiBzdHJpbmcgdmFsdWUuXG5cbkV4ZWN1dGlvbiBsaWZlY3ljbGUg4oCUIHJlY29yZCBhZ2VudCBwcm9ncmVzcyAoYXBwZW5kcyBzdGVwIHJlY29yZHMsIGxpa2UgYWRkRW50cnkpOlxueyBvcGVyYXRpb246IFwicmVjb3JkX2V4ZWN1dGlvbl9zdGVwXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1yZXZpZXdlclwiLCBzdGVwRGVzY3JpcHRpb246IFwiQW5hbHl6ZWQgZmlsZXNcIiwgb3V0Y29tZTogXCJzdWNjZXNzXCIsIGZpbmRpbmdzOiBcIkZvdW5kIDMgaXNzdWVzXCIgfSB9XG5SZXNwb25zZSBmbG93OiByZWNvcmRfZXhlY3V0aW9uX3N0ZXAgcmV0dXJucyB7IGF1dG9ub215OiB7IGNvbnRpbnVlLCBmYWN0b3JzLCBub3RpZmljYXRpb25zPyB9IH0uIENoZWNrIGF1dG9ub215LmNvbnRpbnVlIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHByb2NlZWQuIENoZWNrIGF1dG9ub215Lm5vdGlmaWNhdGlvbnMgZm9yIHBlcm1pc3Npb25fcGVuZGluZyAoZ2F0ZWtlZXBlciBibG9ja3MpLCBhdXRvbm9teV9wYXVzZSwgb3IgZGFuZ2VyX3pvbmUgYWxlcnRzIHRvIHJlbGF5IHRvIGh1bWFuIG9wZXJhdG9ycy5cblxuSW1wb3J0ICYgcG9ydGZvbGlvOlxueyBvcGVyYXRpb246IFwiaW1wb3J0X2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcInNraWxsXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1mb3JtYXR0ZXJcIiwgZGF0YTogXCIuLi5cIiB9IH1cbnsgb3BlcmF0aW9uOiBcImltcG9ydF9wZXJzb25hXCIsIHBhcmFtczogeyBzb3VyY2U6IFwiL3BhdGgvdG8vcGVyc29uYS5tZFwiIH0gfVxueyBvcGVyYXRpb246IFwiaW5zdGFsbF9jb2xsZWN0aW9uX2NvbnRlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIGVsZW1lbnRfbmFtZTogXCJDcmVhdGl2ZS1Xcml0ZXJcIiB9IH1cbnsgb3BlcmF0aW9uOiBcInN1Ym1pdF9jb2xsZWN0aW9uX2NvbnRlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfdHlwZTogXCJza2lsbFwiLCBlbGVtZW50X25hbWU6IFwiY29kZS1mb3JtYXR0ZXJcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImluaXRfcG9ydGZvbGlvXCIgfVxueyBvcGVyYXRpb246IFwic3luY19wb3J0Zm9saW9cIiB9XG57IG9wZXJhdGlvbjogXCJwb3J0Zm9saW9fZWxlbWVudF9tYW5hZ2VyXCIsIHBhcmFtczogeyBhY3Rpb246IFwicHVzaFwiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBlbGVtZW50X25hbWU6IFwiVGVjaC1Xcml0ZXJcIiB9IH1cblxuQXV0aCAmIHZlcmlmaWNhdGlvbjpcbnsgb3BlcmF0aW9uOiBcInNldHVwX2dpdGh1Yl9hdXRoXCIgfVxueyBvcGVyYXRpb246IFwiY29uZmlndXJlX29hdXRoXCIsIHBhcmFtczogeyBjbGllbnRfaWQ6IFwieW91ci1jbGllbnQtaWRcIiB9IH1cbnsgb3BlcmF0aW9uOiBcInZlcmlmeV9jaGFsbGVuZ2VcIiwgcGFyYW1zOiB7IGNvZGU6IFwiQUJDMTIzXCIgfSB9XG57IG9wZXJhdGlvbjogXCJyZWxlYXNlX2RlYWRsb2NrXCIgfVxueyBvcGVyYXRpb246IFwiYmVldGxlanVpY2VfYmVldGxlanVpY2VfYmVldGxlanVpY2VcIiB9XG5cbkJhdGNoIG9wZXJhdGlvbnM6IFVzZSB0aGUgb3BlcmF0aW9ucyBhcnJheSB0byBleGVjdXRlIG11bHRpcGxlIG9wZXJhdGlvbnMgc2VxdWVudGlhbGx5IGluIGEgc2luZ2xlIHJlcXVlc3QuXG57IG9wZXJhdGlvbnM6IFt7IG9wZXJhdGlvbjogXCJhZGRFbnRyeVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImxvZ1wiLCBjb250ZW50OiBcIlN0ZXAgMVwiIH0gfSwgeyBvcGVyYXRpb246IFwiYWRkRW50cnlcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJsb2dcIiwgY29udGVudDogXCJTdGVwIDJcIiB9IH1dIH1cblxuRGlzY292ZXIgcmVxdWlyZWQgcGFyYW1ldGVycyDigJQgdXNlIG1jcF9hcWxfcmVhZDpcbnsgb3BlcmF0aW9uOiBcImludHJvc3BlY3RcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcIm9wZXJhdGlvbnNcIiwgbmFtZTogXCJjcmVhdGVfZWxlbWVudFwiIH0gfVxuRGlzY292ZXIgZWxlbWVudCBmb3JtYXQgc3BlY3MgKHJlcXVpcmVkIGZpZWxkcywgc3ludGF4LCBleGFtcGxlcykg4oCUIHVzZSBtY3BfYXFsX3JlYWQ6XG57IG9wZXJhdGlvbjogXCJpbnRyb3NwZWN0XCIsIHBhcmFtczogeyBxdWVyeTogXCJmb3JtYXRcIiwgbmFtZTogXCJ0ZW1wbGF0ZVwiIH0gfWAsXG4gICAgICAgIGlucHV0U2NoZW1hOiBvcGVyYXRpb25JbnB1dFNjaGVtYSxcbiAgICAgICAgYW5ub3RhdGlvbnM6IHtcbiAgICAgICAgICByZWFkT25seUhpbnQ6IGZhbHNlLFxuICAgICAgICAgIGRlc3RydWN0aXZlSGludDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChhcmdzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlci5oYW5kbGVDcmVhdGUoYXJncyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gbWNwX2FxbF9yZWFkIC0gU2FmZSwgcmVhZC1vbmx5IG9wZXJhdGlvbnNcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwibWNwX2FxbF9yZWFkXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgU2FmZSwgcmVhZC1vbmx5IG9wZXJhdGlvbnMuXG5cblN1cHBvcnRlZCBvcGVyYXRpb25zOiAke2dldE9wZXJhdGlvbnNTdHJpbmcoJ1JFQUQnKX1cblxuRWxlbWVudCB0eXBlczogJHtlbGVtZW50VHlwZXN9XG5cblRoZXNlIHF1ZXJpZXMgb25seSByZWFkIGRhdGEgYW5kIG5ldmVyIG1vZGlmeSBzZXJ2ZXIgc3RhdGUuXG5cblF1aWNrIHN0YXJ0IGV4YW1wbGVzOlxueyBvcGVyYXRpb246IFwibGlzdF9lbGVtZW50c1wiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiIH1cbnsgb3BlcmF0aW9uOiBcImdldF9hY3RpdmVfZWxlbWVudHNcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiB9XG57IG9wZXJhdGlvbjogXCJzZWFyY2hfZWxlbWVudHNcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcImNyZWF0aXZlXCIgfSB9XG57IG9wZXJhdGlvbjogXCJnZXRfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwibWVtb3J5XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwic2Vzc2lvbi1ub3Rlc1wiIH0gfVxuXG5FbGVtZW50IG9wZXJhdGlvbnM6XG57IG9wZXJhdGlvbjogXCJhY3RpdmF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiRGVmYXVsdFwiIH0gfVxueyBvcGVyYXRpb246IFwiZGVhY3RpdmF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiRGVmYXVsdFwiIH0gfVxueyBvcGVyYXRpb246IFwiZ2V0X2VsZW1lbnRfZGV0YWlsc1wiLCBlbGVtZW50X3R5cGU6IFwic2tpbGxcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld1wiIH0gfVxueyBvcGVyYXRpb246IFwicXVlcnlfZWxlbWVudHNcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgcGFyYW1zOiB7IGZpbHRlcnM6IHsgY2F0ZWdvcnk6IFwiY3JlYXRpdmVcIiB9IH0gfVxueyBvcGVyYXRpb246IFwidmFsaWRhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwiYWdlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJ0YXNrLXBsYW5uZXJcIiB9IH1cbnsgb3BlcmF0aW9uOiBcInJlbmRlclwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIm1lZXRpbmctbm90ZXNcIiwgdmFyaWFibGVzOiB7IGRhdGU6IFwiMjAyNi0wMy0wM1wiIH0gfSB9XG57IG9wZXJhdGlvbjogXCJleHBvcnRfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIlRlY2gtV3JpdGVyXCIgfSB9XG57IG9wZXJhdGlvbjogXCJvcGVuX3BvcnRmb2xpb19icm93c2VyXCIgfVxueyBvcGVyYXRpb246IFwib3Blbl9sb2dzXCIgfVxueyBvcGVyYXRpb246IFwib3Blbl9tZXRyaWNzXCIgfVxueyBvcGVyYXRpb246IFwib3Blbl9wZXJtaXNzaW9uc1wiIH1cbnsgb3BlcmF0aW9uOiBcIm9wZW5fc2V0dXBcIiB9XG5cbk1lbW9yeS1zcGVjaWZpYyBzZWFyY2ggKGZpbHRlciBieSB0YWdzKTpcbnsgb3BlcmF0aW9uOiBcInNlYXJjaFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwiKlwiLCB0eXBlOiBcIm1lbW9yeVwiLCBmaWx0ZXJzOiB7IHRhZ3M6IFtcImltcG9ydGFudFwiXSB9IH0gfVxuXG5FeGVjdXRpb24gbGlmZWN5Y2xlIOKAlCByZWFkLW9ubHkgcXVlcmllczpcbnsgb3BlcmF0aW9uOiBcImdldF9leGVjdXRpb25fc3RhdGVcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld2VyXCIgfSB9XG57IG9wZXJhdGlvbjogXCJnZXRfZ2F0aGVyZWRfZGF0YVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImNvZGUtcmV2aWV3ZXJcIiwgZ29hbElkOiBcImdvYWwtaWRcIiB9IH1cblxuQ29sbGVjdGlvbjpcbnsgb3BlcmF0aW9uOiBcImJyb3dzZV9jb2xsZWN0aW9uXCIsIHBhcmFtczogeyBzZWN0aW9uOiBcInBlcnNvbmFzXCIgfSB9XG57IG9wZXJhdGlvbjogXCJzZWFyY2hfY29sbGVjdGlvblwiLCBwYXJhbXM6IHsgcXVlcnk6IFwiY3JlYXRpdmVcIiB9IH1cbnsgb3BlcmF0aW9uOiBcInNlYXJjaF9jb2xsZWN0aW9uX2VuaGFuY2VkXCIsIHBhcmFtczogeyBxdWVyeTogXCJjcmVhdGl2ZVwiLCBwYWdlOiAxIH0gfVxueyBvcGVyYXRpb246IFwiZ2V0X2NvbGxlY3Rpb25fY29udGVudFwiLCBwYXJhbXM6IHsgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgZWxlbWVudF9uYW1lOiBcIkNyZWF0aXZlLVdyaXRlclwiIH0gfVxueyBvcGVyYXRpb246IFwiZ2V0X2NvbGxlY3Rpb25fY2FjaGVfaGVhbHRoXCIgfVxuXG5Qb3J0Zm9saW86XG57IG9wZXJhdGlvbjogXCJwb3J0Zm9saW9fc3RhdHVzXCIgfVxueyBvcGVyYXRpb246IFwicG9ydGZvbGlvX2NvbmZpZ1wiIH1cbnsgb3BlcmF0aW9uOiBcInNlYXJjaF9wb3J0Zm9saW9cIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcImNyZWF0aXZlXCIgfSB9XG57IG9wZXJhdGlvbjogXCJzZWFyY2hfYWxsXCIsIHBhcmFtczogeyBxdWVyeTogXCJjcmVhdGl2ZVwiIH0gfVxuXG5TeXN0ZW06XG57IG9wZXJhdGlvbjogXCJkb2xsaG91c2VfY29uZmlnXCIgfVxueyBvcGVyYXRpb246IFwiZ2V0X2J1aWxkX2luZm9cIiB9XG57IG9wZXJhdGlvbjogXCJnZXRfY2FjaGVfYnVkZ2V0X3JlcG9ydFwiIH1cbnsgb3BlcmF0aW9uOiBcInF1ZXJ5X2xvZ3NcIiwgcGFyYW1zOiB7IGxldmVsOiBcImVycm9yXCIsIGxpbWl0OiAxMCB9IH1cbnsgb3BlcmF0aW9uOiBcInF1ZXJ5X21ldHJpY3NcIiB9XG57IG9wZXJhdGlvbjogXCJxdWVyeV9tZXRyaWNzXCIsIHBhcmFtczogeyBuYW1lczogW1wic3lzdGVtLm1lbW9yeS4qXCJdLCB0eXBlOiBcImdhdWdlXCIgfSB9XG57IG9wZXJhdGlvbjogXCJjb252ZXJ0X3NraWxsX2Zvcm1hdFwiLCBwYXJhbXM6IHsgZGlyZWN0aW9uOiBcImFnZW50X3RvX2RvbGxob3VzZVwiLCBhZ2VudF9za2lsbDogeyBcIlNLSUxMLm1kXCI6IFwiLS0tXFxcXG5uYW1lOiBteS1za2lsbFxcXFxuZGVzY3JpcHRpb246IHRlc3RcXFxcbi0tLVxcXFxuXFxcXG5Vc2UgdGhpcyBza2lsbC5cIiB9IH0gfVxueyBvcGVyYXRpb246IFwiY29udmVydF9za2lsbF9mb3JtYXRcIiwgcGFyYW1zOiB7IGRpcmVjdGlvbjogXCJhZ2VudF90b19kb2xsaG91c2VcIiwgc2VjdXJpdHlfbW9kZTogXCJ3YXJuXCIsIHBhdGhfbW9kZTogXCJsb3NzbGVzc1wiLCBhZ2VudF9za2lsbDogeyBcIlNLSUxMLm1kXCI6IFwiLS0tXFxcXG5uYW1lOiBteS1za2lsbFxcXFxuZGVzY3JpcHRpb246IHRlc3RcXFxcbi0tLVxcXFxuXFxcXG5Vc2UgdGhpcyBza2lsbC5cIiB9IH0gfVxueyBvcGVyYXRpb246IFwiY29udmVydF9za2lsbF9mb3JtYXRcIiwgcGFyYW1zOiB7IGRpcmVjdGlvbjogXCJkb2xsaG91c2VfdG9fYWdlbnRcIiwgcGF0aF9tb2RlOiBcImxvc3NsZXNzXCIsIGRvbGxob3VzZV9tYXJrZG93bjogXCItLS1cXFxcbm5hbWU6IG15LXNraWxsXFxcXG5kZXNjcmlwdGlvbjogdGVzdFxcXFxuaW5zdHJ1Y3Rpb25zOiBVc2UgdGhpcyBza2lsbC5cXFxcbi0tLVxcXFxuXFxcXG4jIyMgYmluYXJpZXMvbG9nby5wbmdcXFxcbihiaW5hcnkgbGluazogLi9za2lsbHMvYmluYXJpZXMvbG9nby5wbmcpXCIgfSB9XG5cbkF1dGg6XG57IG9wZXJhdGlvbjogXCJjaGVja19naXRodWJfYXV0aFwiIH1cbnsgb3BlcmF0aW9uOiBcIm9hdXRoX2hlbHBlcl9zdGF0dXNcIiB9XG5cbkdhdGVrZWVwZXIgJiBDTEkgcG9saWNpZXM6XG57IG9wZXJhdGlvbjogXCJwZXJtaXNzaW9uX3Byb21wdFwiLCBwYXJhbXM6IHsgdG9vbDogXCJCYXNoXCIsIHByb21wdDogXCJydW4gbnBtIHRlc3RcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImV2YWx1YXRlX3Blcm1pc3Npb25cIiwgcGFyYW1zOiB7IHRvb2xfbmFtZTogXCJCYXNoXCIsIGlucHV0OiB7IGNvbW1hbmQ6IFwiZ2l0IHN0YXR1c1wiIH0sIHBsYXRmb3JtOiBcImNsYXVkZV9jb2RlXCIgfSB9XG57IG9wZXJhdGlvbjogXCJnZXRfZWZmZWN0aXZlX2NsaV9wb2xpY2llc1wiIH1cbnsgb3BlcmF0aW9uOiBcImdldF9wZW5kaW5nX2NsaV9hcHByb3ZhbHNcIiB9XG5cbkVuaGFuY2VkIGluZGV4OlxueyBvcGVyYXRpb246IFwiZmluZF9zaW1pbGFyX2VsZW1lbnRzXCIsIHBhcmFtczogeyBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBlbGVtZW50X25hbWU6IFwiQ3JlYXRpdmUtV3JpdGVyXCIgfSB9XG57IG9wZXJhdGlvbjogXCJnZXRfZWxlbWVudF9yZWxhdGlvbnNoaXBzXCIsIHBhcmFtczogeyBlbGVtZW50X3R5cGU6IFwic2tpbGxcIiwgZWxlbWVudF9uYW1lOiBcImNvZGUtcmV2aWV3XCIgfSB9XG57IG9wZXJhdGlvbjogXCJzZWFyY2hfYnlfdmVyYlwiLCBwYXJhbXM6IHsgdmVyYjogXCJyZXZpZXdcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImdldF9yZWxhdGlvbnNoaXBfc3RhdHNcIiB9XG5cbkRpc2NvdmVyIGFsbCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzOlxueyBvcGVyYXRpb246IFwiZ2V0X2NhcGFiaWxpdGllc1wiIH1cbnsgb3BlcmF0aW9uOiBcImdldF9jYXBhYmlsaXRpZXNcIiwgcGFyYW1zOiB7IGNhdGVnb3J5OiBcIkVsZW1lbnQgTGlmZWN5Y2xlXCIgfSB9XG57IG9wZXJhdGlvbjogXCJpbnRyb3NwZWN0XCIsIHBhcmFtczogeyBxdWVyeTogXCJvcGVyYXRpb25zXCIgfSB9YCxcbiAgICAgICAgaW5wdXRTY2hlbWE6IG9wZXJhdGlvbklucHV0U2NoZW1hLFxuICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgIHJlYWRPbmx5SGludDogdHJ1ZSxcbiAgICAgICAgICBkZXN0cnVjdGl2ZUhpbnQ6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiBhc3luYyAoYXJnczogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIuaGFuZGxlUmVhZChhcmdzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBKU09OLnN0cmluZ2lmeShyZXN1bHQsIG51bGwsIDIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBtY3BfYXFsX3VwZGF0ZSAtIE1vZGlmeWluZyBvcGVyYXRpb25zIHRoYXQgb3ZlcndyaXRlIGRhdGFcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwibWNwX2FxbF91cGRhdGVcIixcbiAgICAgICAgZGVzY3JpcHRpb246IGBNb2RpZnlpbmcgb3BlcmF0aW9ucyB0aGF0IG92ZXJ3cml0ZSBkYXRhLlxuXG5TdXBwb3J0ZWQgb3BlcmF0aW9uczogJHtnZXRPcGVyYXRpb25zU3RyaW5nKCdVUERBVEUnKX1cblxuRWxlbWVudCB0eXBlczogJHtlbGVtZW50VHlwZXN9XG5cblRoZXNlIG9wZXJhdGlvbnMgbW9kaWZ5IGV4aXN0aW5nIGRhdGEsIHBvdGVudGlhbGx5IG92ZXJ3cml0aW5nIHByZXZpb3VzIHZhbHVlcy5cblxuTm90ZTogTWVtb3JpZXMgYXJlIGFwcGVuZC1vbmx5IGFuZCBkbyBub3Qgc3VwcG9ydCBlZGl0X2VsZW1lbnQuIFVzZSBhZGRFbnRyeSAoQ1JFQVRFKSB0byBhZGQgbmV3IGVudHJpZXMuXG5cblF1aWNrIHN0YXJ0IGV4YW1wbGU6XG57IG9wZXJhdGlvbjogXCJlZGl0X2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJNeVBlcnNvbmFcIiwgaW5wdXQ6IHsgZGVzY3JpcHRpb246IFwiVXBkYXRlZCBkZXNjcmlwdGlvblwiIH0gfSB9XG57IG9wZXJhdGlvbjogXCJlZGl0X2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJGcmllbmRseS1UZWFjaGVyXCIsIGlucHV0OiB7IGluc3RydWN0aW9uczogXCJVcGRhdGVkIGJlaGF2aW9yYWwgZGlyZWN0aXZlcy5cIiB9IH0gfVxueyBvcGVyYXRpb246IFwiZWRpdF9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJhZ2VudFwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImNvZGUtcmV2aWV3ZXJcIiwgaW5wdXQ6IHsgaW5zdHJ1Y3Rpb25zOiBcIlVwZGF0ZWQgYWdlbnQgYmVoYXZpb3JhbCBwcm9maWxlLlwiLCBnb2FsOiB7IHRlbXBsYXRlOiBcIkNvbXBsZXRlOiB7dGFza31cIiB9IH0gfSB9XG57IG9wZXJhdGlvbjogXCJ1cGdyYWRlX2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcImFnZW50XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwidGFzay1wbGFubmVyXCIgfSB9XG5cbkRpc2NvdmVyIHJlcXVpcmVkIHBhcmFtZXRlcnMg4oCUIHVzZSBtY3BfYXFsX3JlYWQ6XG57IG9wZXJhdGlvbjogXCJpbnRyb3NwZWN0XCIsIHBhcmFtczogeyBxdWVyeTogXCJvcGVyYXRpb25zXCIsIG5hbWU6IFwiZWRpdF9lbGVtZW50XCIgfSB9YCxcbiAgICAgICAgaW5wdXRTY2hlbWE6IG9wZXJhdGlvbklucHV0U2NoZW1hLFxuICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgIHJlYWRPbmx5SGludDogZmFsc2UsXG4gICAgICAgICAgZGVzdHJ1Y3RpdmVIaW50OiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiBhc3luYyAoYXJnczogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIuaGFuZGxlVXBkYXRlKGFyZ3MpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIG1jcF9hcWxfZGVsZXRlIC0gRGVzdHJ1Y3RpdmUgb3BlcmF0aW9ucyB0aGF0IHJlbW92ZSBkYXRhXG4gICAge1xuICAgICAgdG9vbDoge1xuICAgICAgICBuYW1lOiBcIm1jcF9hcWxfZGVsZXRlXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgRGVzdHJ1Y3RpdmUgb3BlcmF0aW9ucyB0aGF0IHJlbW92ZSBkYXRhLlxuXG5TdXBwb3J0ZWQgb3BlcmF0aW9uczogJHtnZXRPcGVyYXRpb25zU3RyaW5nKCdERUxFVEUnKX1cblxuRWxlbWVudCB0eXBlczogJHtlbGVtZW50VHlwZXN9XG5cblRoZXNlIG9wZXJhdGlvbnMgcmVtb3ZlIGRhdGEuIFVzZSB3aXRoIGNhdXRpb24uXG5cbuKaoO+4jyBTRUNVUklUWTogRG8gbm90IGF1dG8tYWxsb3cgdGhpcyBlbmRwb2ludCBpbiB5b3VyIGhvc3Qgc2V0dGluZ3MgKGUuZy4sIENsYXVkZSBDb2RlIHNldHRpbmdzLmpzb24pLiBFYWNoIGRlbGV0ZSBvcGVyYXRpb24gc2hvdWxkIHJlcXVpcmUgZXhwbGljaXQgaHVtYW4gYXBwcm92YWwuIEF1dG8tYWxsb3dpbmcgYnlwYXNzZXMgdGhlIHBlci1vcGVyYXRpb24gY29uZmlybWF0aW9uIGdhdGUsIGxlYXZpbmcgb25seSBlbGVtZW50IGRlbnkgcG9saWNpZXMgYXMgcHJvdGVjdGlvbiBhZ2FpbnN0IHVuaW50ZW5kZWQgZGF0YSBsb3NzLlxuXG5RdWljayBzdGFydCBleGFtcGxlczpcbnsgb3BlcmF0aW9uOiBcImRlbGV0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiT2xkLVBlcnNvbmFcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImNsZWFyXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwidGVtcC1ub3Rlc1wiIH0gfVxueyBvcGVyYXRpb246IFwiY2xlYXJfZ2l0aHViX2F1dGhcIiB9XG5cbkRpc2NvdmVyIHJlcXVpcmVkIHBhcmFtZXRlcnMg4oCUIHVzZSBtY3BfYXFsX3JlYWQ6XG57IG9wZXJhdGlvbjogXCJpbnRyb3NwZWN0XCIsIHBhcmFtczogeyBxdWVyeTogXCJvcGVyYXRpb25zXCIsIG5hbWU6IFwiZGVsZXRlX2VsZW1lbnRcIiB9IH1gLFxuICAgICAgICBpbnB1dFNjaGVtYTogb3BlcmF0aW9uSW5wdXRTY2hlbWEsXG4gICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgcmVhZE9ubHlIaW50OiBmYWxzZSxcbiAgICAgICAgICBkZXN0cnVjdGl2ZUhpbnQ6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChhcmdzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlci5oYW5kbGVEZWxldGUoYXJncyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gbWNwX2FxbF9leGVjdXRlIC0gRXhlY3V0aW9uIGxpZmVjeWNsZSBvcGVyYXRpb25zIChDUlVERSdzICdFJylcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwibWNwX2FxbF9leGVjdXRlXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgRXhlY3V0aW9uIGxpZmVjeWNsZSBvcGVyYXRpb25zIGZvciBleGVjdXRhYmxlIGVsZW1lbnRzIChhZ2VudHMsIHdvcmtmbG93cywgcGlwZWxpbmVzKS5cblxuU3VwcG9ydGVkIG9wZXJhdGlvbnM6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnRVhFQ1VURScpfVxuXG5UaGVzZSBvcGVyYXRpb25zIG1hbmFnZSBydW50aW1lIGV4ZWN1dGlvbiBzdGF0ZS4gVW5saWtlIENSVUQgb3BlcmF0aW9ucyAod2hpY2ggbWFuYWdlIGRlZmluaXRpb25zKSwgRXhlY3V0ZSBvcGVyYXRpb25zIGhhbmRsZSB0aGUgZXhlY3V0aW9uIGxpZmVjeWNsZTpcbi0gZXhlY3V0ZV9hZ2VudDogU3RhcnQgYSBuZXcgZXhlY3V0aW9uIChyZXR1cm5zIGdvYWxJZCBhbmQgc3RhdGVWZXJzaW9uIGZvciB0cmFja2luZylcbi0gY29tcGxldGVfZXhlY3V0aW9uOiBTaWduYWwgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uXG4tIGNvbnRpbnVlX2V4ZWN1dGlvbjogUmVzdW1lIGZyb20gc2F2ZWQgc3RhdGVcbi0gYWJvcnRfZXhlY3V0aW9uOiBBYm9ydCBhIHJ1bm5pbmcgZXhlY3V0aW9uLCByZWplY3RpbmcgZnVydGhlciBvcGVyYXRpb25zXG4tIGNvbmZpcm1fb3BlcmF0aW9uOiBDb25maXJtIGEgcGVuZGluZyBvcGVyYXRpb24gdGhhdCByZXF1aXJlcyB1c2VyIGFwcHJvdmFsIChHYXRla2VlcGVyIGZsb3cpXG4tIGFwcHJvdmVfY2xpX3Blcm1pc3Npb246IEFwcHJvdmUgYSBwZW5kaW5nIENMSSB0b29sIHBlcm1pc3Npb24gcmVxdWVzdFxuLSBwcmVwYXJlX2hhbmRvZmY6IFNlcmlhbGl6ZSBnb2FsIHByb2dyZXNzIGludG8gYSBwb3J0YWJsZSBoYW5kb2ZmIGJsb2NrIGZvciBzZXNzaW9uIHRyYW5zZmVyXG4tIHJlc3VtZV9mcm9tX2hhbmRvZmY6IFJlc3VtZSBhZ2VudCBleGVjdXRpb24gZnJvbSBhIGhhbmRvZmYgYmxvY2sgd2l0aCBpbnRlZ3JpdHkgdmFsaWRhdGlvblxuXG5JTVBPUlRBTlQ6IEV4ZWN1dGUgb3BlcmF0aW9ucyBhcmUgcG90ZW50aWFsbHkgZGVzdHJ1Y3RpdmUgKGFnZW50cyBjYW4gcGVyZm9ybSBhbnkgYWN0aW9uKSBhbmQgbm9uLWlkZW1wb3RlbnQgKGNhbGxpbmcgZXhlY3V0ZV9hZ2VudCB0d2ljZSBjcmVhdGVzIHR3byBzZXBhcmF0ZSBleGVjdXRpb25zKS5cblxu4pqg77iPIFNFQ1VSSVRZOiBEbyBub3QgYXV0by1hbGxvdyB0aGlzIGVuZHBvaW50IGluIHlvdXIgaG9zdCBzZXR0aW5ncyAoZS5nLiwgQ2xhdWRlIENvZGUgc2V0dGluZ3MuanNvbikuIEVhY2ggZXhlY3V0aW9uIHNob3VsZCByZXF1aXJlIGV4cGxpY2l0IGh1bWFuIGFwcHJvdmFsLiBBdXRvLWFsbG93aW5nIGJ5cGFzc2VzIHRoZSBwZXItb3BlcmF0aW9uIGNvbmZpcm1hdGlvbiBnYXRlLiBXaGlsZSBEYW5nZXJab25lIHZlcmlmaWNhdGlvbiBhbmQgZWxlbWVudCBkZW55IHBvbGljaWVzIHN0aWxsIHByb3ZpZGUgcHJvdGVjdGlvbiwgdGhlIHByaW1hcnkgaHVtYW4gcmV2aWV3IGNoZWNrcG9pbnQgaXMgbG9zdC5cblxuUmVzcG9uc2UgZmxvdzogZXhlY3V0ZV9hZ2VudCByZXR1cm5zIHsgZ29hbElkLCBzdGF0ZVZlcnNpb24sIGFjdGl2ZUVsZW1lbnRzLCBzYWZldHlUaWVyLCAuLi4gfS4gVXNlIGdvYWxJZCB3aXRoIHJlY29yZF9leGVjdXRpb25fc3RlcCBhbmQgY29tcGxldGVfZXhlY3V0aW9uLiBzdGF0ZVZlcnNpb24gZW5hYmxlcyBvcHRpbWlzdGljIGxvY2tpbmcuIHJlY29yZF9leGVjdXRpb25fc3RlcCByZXR1cm5zIHsgYXV0b25vbXk6IHsgY29udGludWUsIG5vdGlmaWNhdGlvbnM/IH0gfSDigJQgY2hlY2sgbm90aWZpY2F0aW9ucyBmb3IgZ2F0ZWtlZXBlciBibG9ja3MgYW5kIGRhbmdlciB6b25lIGFsZXJ0cy5cblxuUXVpY2sgc3RhcnQgZXhhbXBsZXM6XG57IG9wZXJhdGlvbjogXCJleGVjdXRlX2FnZW50XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1yZXZpZXdlclwiLCBwYXJhbWV0ZXJzOiB7IG9iamVjdGl2ZTogXCJSZXZpZXcgY29kZVwiIH0gfSB9XG57IG9wZXJhdGlvbjogXCJjb21wbGV0ZV9leGVjdXRpb25cIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld2VyXCIsIG91dGNvbWU6IFwic3VjY2Vzc1wiLCBzdW1tYXJ5OiBcIkNvbXBsZXRlZCByZXZpZXdcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImFib3J0X2V4ZWN1dGlvblwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImRhdGEtY29sbGVjdG9yXCIsIHJlYXNvbjogXCJVc2VyIHJlcXVlc3RlZCBjYW5jZWxsYXRpb25cIiB9IH1cbnsgb3BlcmF0aW9uOiBcImNvbnRpbnVlX2V4ZWN1dGlvblwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImNvZGUtcmV2aWV3ZXJcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImNvbmZpcm1fb3BlcmF0aW9uXCIsIHBhcmFtczogeyBvcGVyYXRpb246IFwiZXhlY3V0ZV9hZ2VudFwiIH0gfVxueyBvcGVyYXRpb246IFwiYXBwcm92ZV9jbGlfcGVybWlzc2lvblwiLCBwYXJhbXM6IHsgcmVxdWVzdF9pZDogXCJyZXEtMTIzXCIsIGRlY2lzaW9uOiBcImFsbG93XCIgfSB9XG57IG9wZXJhdGlvbjogXCJwcmVwYXJlX2hhbmRvZmZcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld2VyXCIgfSB9XG57IG9wZXJhdGlvbjogXCJyZXN1bWVfZnJvbV9oYW5kb2ZmXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1yZXZpZXdlclwiLCBoYW5kb2ZmX2Jsb2NrOiBcIi4uLlwiIH0gfVxuXG5EaXNjb3ZlciByZXF1aXJlZCBwYXJhbWV0ZXJzIOKAlCB1c2UgbWNwX2FxbF9yZWFkOlxueyBvcGVyYXRpb246IFwiaW50cm9zcGVjdFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwib3BlcmF0aW9uc1wiLCBuYW1lOiBcImV4ZWN1dGVfYWdlbnRcIiB9IH1gLFxuICAgICAgICBpbnB1dFNjaGVtYTogb3BlcmF0aW9uSW5wdXRTY2hlbWEsXG4gICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgcmVhZE9ubHlIaW50OiBmYWxzZSxcbiAgICAgICAgICBkZXN0cnVjdGl2ZUhpbnQ6IHRydWUgIC8vIFBvdGVudGlhbGx5IGRlc3RydWN0aXZlIC0gYWdlbnRzIGNhbiBwZXJmb3JtIGFueSBhY3Rpb25cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChhcmdzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlci5oYW5kbGVFeGVjdXRlKGFyZ3MpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuIl19
|
|
@@ -41,6 +41,10 @@ export interface SessionInfo {
|
|
|
41
41
|
authenticated: boolean;
|
|
42
42
|
/** Session kind — 'mcp' for MCP stdio sessions, 'console' for the web console itself (#1805). */
|
|
43
43
|
kind: 'mcp' | 'console';
|
|
44
|
+
/** DollhouseMCP package version reported by the session. */
|
|
45
|
+
serverVersion: string;
|
|
46
|
+
/** Console/session contract version used for compatibility-aware takeover. */
|
|
47
|
+
consoleProtocolVersion: number;
|
|
44
48
|
}
|
|
45
49
|
/**
|
|
46
50
|
* Payload for POST /api/ingest/logs
|
|
@@ -64,6 +68,8 @@ export interface SessionEventPayload {
|
|
|
64
68
|
event: 'started' | 'stopped' | 'heartbeat';
|
|
65
69
|
pid: number;
|
|
66
70
|
startedAt: string;
|
|
71
|
+
serverVersion?: string;
|
|
72
|
+
consoleProtocolVersion?: number;
|
|
67
73
|
}
|
|
68
74
|
/**
|
|
69
75
|
* Callbacks provided by the unified console orchestrator for broadcasting
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IngestRoutes.d.ts","sourceRoot":"","sources":["../../../src/web/console/IngestRoutes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAgB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAE1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"IngestRoutes.d.ts","sourceRoot":"","sources":["../../../src/web/console/IngestRoutes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAgB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAE1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AA+B7D;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,GAAG,EAAE,MAAM,CAAC;IACZ,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,+FAA+F;IAC/F,aAAa,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,wEAAwE;IACxE,QAAQ,EAAE,OAAO,CAAC;IAClB,wEAAwE;IACxE,aAAa,EAAE,OAAO,CAAC;IACvB,iGAAiG;IACjG,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;IACxB,4DAA4D;IAC5D,aAAa,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC/C,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;IACvD,oBAAoB,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7E,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,WAAW,EAAE,MAAM,WAAW,EAAE,CAAC;IACjC,uCAAuC;IACvC,qBAAqB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,oFAAoF;IACpF,sBAAsB,EAAE,MAAM,IAAI,CAAC;CACpC;AAqBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,gBAAgB,GAAG,kBAAkB,CAucnF"}
|