@pipeline-builder/pipeline-manager 4.4.15 → 4.4.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/ai.d.ts.map +1 -1
- package/dist/agent/ai.js +1 -1
- package/dist/agent/bootstrap.d.ts.map +1 -1
- package/dist/agent/bootstrap.js +1 -1
- package/dist/agent/env-file.d.ts.map +1 -1
- package/dist/agent/env-file.js +1 -1
- package/dist/agent/executor.d.ts.map +1 -1
- package/dist/agent/executor.js +1 -1
- package/dist/agent/health.d.ts.map +1 -1
- package/dist/agent/health.js +1 -1
- package/dist/agent/ports.d.ts.map +1 -1
- package/dist/agent/ports.js +1 -1
- package/dist/agent/post-steps.d.ts.map +1 -1
- package/dist/agent/post-steps.js +1 -1
- package/dist/agent/prereqs.d.ts.map +1 -1
- package/dist/agent/prereqs.js +1 -1
- package/dist/agent/targets.d.ts.map +1 -1
- package/dist/agent/targets.js +1 -1
- package/dist/agent/tools.d.ts.map +1 -1
- package/dist/agent/tools.js +1 -1
- package/dist/agent/troubleshoot.d.ts.map +1 -1
- package/dist/agent/troubleshoot.js +1 -1
- package/dist/boilerplate.d.ts.map +1 -1
- package/dist/boilerplate.js +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/commands/audit-stacks.d.ts.map +1 -1
- package/dist/commands/audit-stacks.js +1 -1
- package/dist/commands/audit-tokens.d.ts.map +1 -1
- package/dist/commands/audit-tokens.js +1 -1
- package/dist/commands/bootstrap.d.ts.map +1 -1
- package/dist/commands/bootstrap.js +1 -1
- package/dist/commands/create-pat.d.ts.map +1 -1
- package/dist/commands/create-pat.js +1 -1
- package/dist/commands/create-pipeline.d.ts.map +1 -1
- package/dist/commands/create-pipeline.js +1 -1
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +1 -1
- package/dist/commands/entity-get.d.ts.map +1 -1
- package/dist/commands/entity-get.js +1 -1
- package/dist/commands/entity-list.d.ts.map +1 -1
- package/dist/commands/entity-list.js +1 -1
- package/dist/commands/get-pipeline.d.ts.map +1 -1
- package/dist/commands/get-pipeline.js +1 -1
- package/dist/commands/get-plugin.d.ts.map +1 -1
- package/dist/commands/get-plugin.js +1 -1
- package/dist/commands/instantiate-template.d.ts.map +1 -1
- package/dist/commands/instantiate-template.js +1 -1
- package/dist/commands/list-pipelines.d.ts.map +1 -1
- package/dist/commands/list-pipelines.js +1 -1
- package/dist/commands/list-plugins.d.ts.map +1 -1
- package/dist/commands/list-plugins.js +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +1 -1
- package/dist/commands/new-plugin.d.ts.map +1 -1
- package/dist/commands/new-plugin.js +1 -1
- package/dist/commands/org-export.d.ts.map +1 -1
- package/dist/commands/org-export.js +1 -1
- package/dist/commands/plugin-lifecycle.d.ts.map +1 -1
- package/dist/commands/plugin-lifecycle.js +1 -1
- package/dist/commands/provision-steps.d.ts.map +1 -1
- package/dist/commands/provision-steps.js +1 -1
- package/dist/commands/provision.d.ts.map +1 -1
- package/dist/commands/provision.js +1 -1
- package/dist/commands/publish-plugin.d.ts.map +1 -1
- package/dist/commands/publish-plugin.js +1 -1
- package/dist/commands/redrive-events.d.ts.map +1 -1
- package/dist/commands/redrive-events.js +1 -1
- package/dist/commands/register.d.ts.map +1 -1
- package/dist/commands/register.js +1 -1
- package/dist/commands/report.d.ts.map +1 -1
- package/dist/commands/report.js +1 -1
- package/dist/commands/security-report.d.ts.map +1 -1
- package/dist/commands/security-report.js +1 -1
- package/dist/commands/setup-events.d.ts.map +1 -1
- package/dist/commands/setup-events.js +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +1 -1
- package/dist/commands/store-token.d.ts.map +1 -1
- package/dist/commands/store-token.js +1 -1
- package/dist/commands/synth.d.ts.map +1 -1
- package/dist/commands/synth.js +1 -1
- package/dist/commands/test-plugin.d.ts.map +1 -1
- package/dist/commands/test-plugin.js +1 -1
- package/dist/commands/upload-plugin.d.ts.map +1 -1
- package/dist/commands/upload-plugin.js +1 -1
- package/dist/commands/validate-plugin.d.ts.map +1 -1
- package/dist/commands/validate-plugin.js +1 -1
- package/dist/commands/validate-templates.d.ts.map +1 -1
- package/dist/commands/validate-templates.js +1 -1
- package/dist/commands/verify-plugins.d.ts.map +1 -1
- package/dist/commands/verify-plugins.js +1 -1
- package/dist/commands/version.d.ts.map +1 -1
- package/dist/commands/version.js +1 -1
- package/dist/config/cli.constants.d.ts.map +1 -1
- package/dist/config/cli.constants.js +1 -1
- package/dist/config/plugin-catalog-assets.d.ts.map +1 -1
- package/dist/config/plugin-catalog-assets.js +1 -1
- package/dist/lambda/token-renew-handler.d.ts.map +1 -1
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +1 -1
- package/dist/types/error.d.ts.map +1 -1
- package/dist/types/error.js +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/pipeline-template.d.ts.map +1 -1
- package/dist/types/pipeline-template.js +1 -1
- package/dist/types/pipeline.d.ts.map +1 -1
- package/dist/types/pipeline.js +1 -1
- package/dist/types/plugin.d.ts.map +1 -1
- package/dist/types/plugin.js +1 -1
- package/dist/utils/api-client.d.ts.map +1 -1
- package/dist/utils/api-client.js +1 -1
- package/dist/utils/audit-log.d.ts.map +1 -1
- package/dist/utils/audit-log.js +1 -1
- package/dist/utils/auth-guard.d.ts.map +1 -1
- package/dist/utils/auth-guard.js +1 -1
- package/dist/utils/auth-utils.d.ts.map +1 -1
- package/dist/utils/auth-utils.js +1 -1
- package/dist/utils/aws-env.d.ts.map +1 -1
- package/dist/utils/aws-env.js +1 -1
- package/dist/utils/aws-secrets.d.ts.map +1 -1
- package/dist/utils/aws-secrets.js +1 -1
- package/dist/utils/banner.d.ts.map +1 -1
- package/dist/utils/banner.js +1 -1
- package/dist/utils/catalog-prompt.d.ts.map +1 -1
- package/dist/utils/catalog-prompt.js +1 -1
- package/dist/utils/cdk-utils.d.ts.map +1 -1
- package/dist/utils/cdk-utils.js +1 -1
- package/dist/utils/command-utils.d.ts.map +1 -1
- package/dist/utils/command-utils.js +1 -1
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +1 -1
- package/dist/utils/credential-store.d.ts.map +1 -1
- package/dist/utils/credential-store.js +1 -1
- package/dist/utils/cron.d.ts.map +1 -1
- package/dist/utils/cron.js +1 -1
- package/dist/utils/deploy-runner.d.ts.map +1 -1
- package/dist/utils/deploy-runner.js +1 -1
- package/dist/utils/device-auth.d.ts.map +1 -1
- package/dist/utils/device-auth.js +1 -1
- package/dist/utils/error-handler.d.ts.map +1 -1
- package/dist/utils/error-handler.js +1 -1
- package/dist/utils/list-command-utils.d.ts.map +1 -1
- package/dist/utils/list-command-utils.js +1 -1
- package/dist/utils/output-utils.d.ts.map +1 -1
- package/dist/utils/output-utils.js +1 -1
- package/dist/utils/pipeline-config.d.ts.map +1 -1
- package/dist/utils/pipeline-config.js +1 -1
- package/dist/utils/platform-secret.d.ts.map +1 -1
- package/dist/utils/platform-secret.js +1 -1
- package/dist/utils/plugin-docker.d.ts.map +1 -1
- package/dist/utils/plugin-docker.js +1 -1
- package/dist/utils/plugin-package.d.ts.map +1 -1
- package/dist/utils/plugin-package.js +1 -1
- package/dist/utils/plugin-resolver.d.ts.map +1 -1
- package/dist/utils/plugin-resolver.js +1 -1
- package/dist/utils/plugin-scan.d.ts.map +1 -1
- package/dist/utils/plugin-scan.js +1 -1
- package/dist/utils/plugin-zip.d.ts.map +1 -1
- package/dist/utils/plugin-zip.js +1 -1
- package/dist/utils/preflight.d.ts.map +1 -1
- package/dist/utils/preflight.js +1 -1
- package/dist/utils/registration-client.d.ts.map +1 -1
- package/dist/utils/registration-client.js +1 -1
- package/dist/utils/registry.d.ts.map +1 -1
- package/dist/utils/registry.js +1 -1
- package/dist/utils/request-context.d.ts.map +1 -1
- package/dist/utils/request-context.js +1 -1
- package/dist/utils/response-utils.d.ts.map +1 -1
- package/dist/utils/response-utils.js +1 -1
- package/dist/utils/service-account.d.ts.map +1 -1
- package/dist/utils/service-account.js +1 -1
- package/dist/utils/tls.d.ts.map +1 -1
- package/dist/utils/tls.js +1 -1
- package/package.json +9 -9
|
@@ -594,4 +594,4 @@ export async function verifyHealth(target, url) {
|
|
|
594
594
|
// anyway state is healthy:true but degraded → warn so it doesn't read as done.
|
|
595
595
|
(health.healthy && health.ready ? printSuccess : printWarning)(`${health.url} — ${health.detail}`);
|
|
596
596
|
}
|
|
597
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlzaW9uLXN0ZXBzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3Byb3Zpc2lvbi1zdGVwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzlDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxRQUFRLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQWtCLE1BQU0sZ0JBQWdCLENBQUM7QUFDakYsT0FBTyxFQUFFLGdCQUFnQixFQUFzQixNQUFNLHVCQUF1QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBbUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRixPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBb0IsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRyxPQUFPLEVBQ0wsZUFBZSxFQUNmLFVBQVUsRUFDVixjQUFjLEVBQ2QsZUFBZSxHQUloQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FB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cUIsQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUNELFNBQVMsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLENBQUM7SUFDckMsa0ZBQWtGO0lBQ2xGLCtFQUErRTtJQUMvRSxxRkFBcUY7SUFDckYsTUFBTSxlQUFlLEdBQUcsTUFBTSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDL0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxXQUFXLENBQUMsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkcsNEVBQTRFO0lBQzVFLCtFQUErRTtJQUMvRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDckcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyByZWFkRmlsZVN5bmMsIGV4aXN0c1N5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgKiBhcyByZWFkbGluZSBmcm9tICdub2RlOnJlYWRsaW5lL3Byb21pc2VzJztcbmltcG9ydCB7IGRpYWdub3NlRmFpbHVyZSwgaXNBaUNvbmZpZ3VyZWQsIHR5cGUgQWlPcHRpb25zIH0gZnJvbSAnLi4vYWdlbnQvYWkuanMnO1xuaW1wb3J0IHsgYm9vdHN0cmFwQ29tbWFuZCwgdHlwZSBCb290c3RyYXBTcGVjIH0gZnJvbSAnLi4vYWdlbnQvYm9vdHN0cmFwLmpzJztcbmltcG9ydCB7IGNyZWF0ZUVudkZpbGUsIGVudkZpbGVNaXNzaW5nIH0gZnJvbSAnLi4vYWdlbnQvZW52LWZpbGUuanMnO1xuaW1wb3J0IHsgZW50cnlwb2ludEV4aXN0cywgcnVuU2NyaXB0IH0gZnJvbSAnLi4vYWdlbnQvZXhlY3V0b3IuanMnO1xuaW1wb3J0IHsgd2FpdEhlYWx0aHksIGVuc3VyZU1pbmlrdWJlR2F0ZXdheSB9IGZyb20gJy4uL2FnZW50L2hlYWx0aC5qcyc7XG5pbXBvcnQgeyBjaGVja0hvc3RQb3J0cywgZGlzY292ZXJIb3N0UG9ydHMsIHN0YWNrUnVubmluZyB9IGZyb20gJy4uL2FnZW50L3BvcnRzLmpzJztcbmltcG9ydCB7IHJlc29sdmVQb3N0U3RlcHMsIHR5cGUgUG9zdFN0ZXAsIHR5cGUgU2tpcHBlZFN0ZXAgfSBmcm9tICcuLi9hZ2VudC9wb3N0LXN0ZXBzLmpzJztcbmltcG9ydCB7IGNoZWNrUHJlcmVxcywgZ2l0QXZhaWxhYmxlLCBwcmVyZXFzU2F0aXNmaWVkLCB0eXBlIFByZXJlcUNoZWNrIH0gZnJvbSAnLi4vYWdlbnQvcHJlcmVxcy5qcyc7XG5pbXBvcnQge1xuICBhc3NlbWJsZUNvbW1hbmQsXG4gIExPQURfU1RFUFMsXG4gIHNwYXJzZVBhdGhzRm9yLFxuICB0ZWFyZG93bkNvbW1hbmQsXG4gIHR5cGUgQXNzZW1ibGVSZXN1bHQsXG4gIHR5cGUgVGFyZ2V0SWQsXG4gIHR5cGUgVGFyZ2V0U3BlYyxcbn0gZnJvbSAnLi4vYWdlbnQvdGFyZ2V0cy5qcyc7XG5pbXBvcnQgeyBUT09MU19ESVIsIGZldGNoVG9vbCwgaXNGZXRjaGFibGUgfSBmcm9tICcuLi9hZ2VudC90b29scy5qcyc7XG5pbXBvcnQgeyBtYXRjaElzc3VlcyB9IGZyb20gJy4uL2FnZW50L3Ryb3VibGVzaG9vdC5qcyc7XG5pbXBvcnQgeyBzaGVsbFF1b3RlIH0gZnJvbSAnLi4vY29uZmlnL2NsaS5jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgcHJpbnRTZWN0aW9uLCBwcmludEtleVZhbHVlLCBwcmludEluZm8sIHByaW50V2FybmluZywgcHJpbnRFcnJvciwgcHJpbnRTdWNjZXNzIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcblxuLyoqXG4gKiBUaGUgYHByb3Zpc2lvbmAgY29tbWFuZCdzIFNURVBTOiBvbmUgZXhwb3J0ZWQgZnVuY3Rpb24gcGVyIHBoYXNlIG9mIGFcbiAqIHByb3Zpc2lvbiBydW4gKHBvcnQgcHJlLWZsaWdodCwgdGVhcmRvd24sIGJvb3RzdHJhcCtsb2NhdGUsIHRoZSBkZXBsb3lcbiAqIHJldHJ5IGxvb3AsIHRoZSBpbnRlcmFjdGl2ZSBsb2FkIHBpY2tlciwgcG9zdC1zdGVwcywgaGVhbHRoLCBkaWFnbm9zZSxcbiAqIHBsYW4gcHJpbnRpbmcpLlxuICpcbiAqIFNwbGl0IG91dCBmcm9tIGBwcm92aXNpb24udHNgIHNvIHRoYXQgZmlsZSBob2xkcyBvbmx5IHdoYXQgaXQgaXMgYWJvdXQg4oCUIHRoZVxuICogfjQwLW9wdGlvbiB0YWJsZSBhbmQgdGhlIHNlcXVlbmNpbmcgbmFycmF0aXZlIHRoYXQgY2FsbHMgdGhlc2UgaW4gb3JkZXIuIFRoZVxuICogc3RlcHMgYXJlIHRoZSBwYXJ0IHdpdGggYmVoYXZpb3VyIHdvcnRoIHRlc3Rpbmcgb24gaXRzIG93biwgYW5kIHRoZSByZXBvXG4gKiBhbHJlYWR5IGNhbGxzIHRoZW0gdGhhdCAoYHRlc3QvcHJvdmlzaW9uLXNlYW1zLnRlc3QudHNgKS5cbiAqXG4gKiBFYWNoIHN0ZXAgdGFrZXMgd2hhdCBpdCBuZWVkcyBhbmQgcmV0dXJucyB3aGF0IHRoZSBuZXh0IG9uZSBuZWVkczogbm9cbiAqIG1vZHVsZS1sZXZlbCBtdXRhYmxlIHN0YXRlIGNyb3NzZXMgdGhpcyBib3VuZGFyeSwgc28gdGhlIHR3byBoYWx2ZXMgY2FuIGJlXG4gKiByZWFkIGluZGVwZW5kZW50bHkuXG4gKi9cblxuLyoqXG4gKiBQb3N0LWRlcGxveSBpbml0aWFsaXphdGlvbiBtb2RlICh0aGUgc2luZ2xlIGAtLWluaXQgPG1vZGU+YCBmbGFnKTpcbiAqICAgLSBgYXV0b2AgICDigJQgaW5pdC1wbGF0Zm9ybSBydW5zIG9uY2UgdGhlIHBsYXRmb3JtIGlzIHVwIChyZWdpc3RlciBhZG1pbiArIGxvYWQgcGx1Z2lucy9cbiAqICAgICAgICAgICAgICAgIGNvbXBsaWFuY2Uvc2FtcGxlcykuIE9uIGVjMiB0aGUgaW5zdGFuY2UgZG9lcyBpdCBpdHNlbGYgb24gZmlyc3QgYm9vdDsgb25cbiAqICAgICAgICAgICAgICAgIGxvY2FsL21pbmlrdWJlL2VrcyBgcHJvdmlzaW9uYCBydW5zIGl0IGZvciB5b3UuIFRoaXMgaXMgdGhlIERFRkFVTFQuXG4gKiAgIC0gYG1hbnVhbGAg4oCUIGRvbid0IHNlbGYtaW5pdDsgc3VyZmFjZSB0aGUgZXhhY3Qgc3RlcCBmb3IgeW91IHRvIHJ1biB5b3Vyc2VsZi5cbiAqICAgLSBgc2tpcGAgICDigJQgZG9uJ3QgaW5pdGlhbGl6ZSBhdCBhbGwgKG5vIHJlZ2lzdGVyLCBubyBsb2FkcykuXG4gKi9cbmV4cG9ydCB0eXBlIEluaXRNb2RlID0gJ2F1dG8nIHwgJ21hbnVhbCcgfCAnc2tpcCc7XG5leHBvcnQgY29uc3QgSU5JVF9NT0RFUzogcmVhZG9ubHkgSW5pdE1vZGVbXSA9IFsnYXV0bycsICdtYW51YWwnLCAnc2tpcCddO1xuXG4vKipcbiAqIFJlc29sdmUgdGhlIGluaXQgbW9kZSBmcm9tIGAtLWluaXQgPG1vZGU+YCwgZGVmYXVsdGluZyB0byBgYXV0b2Agd2hlbiB0aGUgZmxhZyBpcyBhYnNlbnQuXG4gKiBSZXR1cm5zIGBudWxsYCB3aGVuIGAtLWluaXRgIHdhcyBnaXZlbiBhbiBpbnZhbGlkIHZhbHVlIChjYWxsZXIgZXJyb3JzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVJbml0TW9kZShvcHRpb25zOiB7IGluaXQ/OiB1bmtub3duIH0pOiBJbml0TW9kZSB8IG51bGwge1xuICBpZiAodHlwZW9mIG9wdGlvbnMuaW5pdCA9PT0gJ3N0cmluZycpIHsgLy8gLS1pbml0IDxtb2RlPlxuICAgIGNvbnN0IG0gPSBvcHRpb25zLmluaXQudG9Mb3dlckNhc2UoKSBhcyBJbml0TW9kZTtcbiAgICByZXR1cm4gSU5JVF9NT0RFUy5pbmNsdWRlcyhtKSA/IG0gOiBudWxsO1xuICB9XG4gIHJldHVybiAnYXV0byc7IC8vIGRlZmF1bHRcbn1cblxuLyoqXG4gKiBSZWFkIG9uZSBsaW5lIG9mIHRyaW1tZWQgaW5wdXQgZnJvbSB0aGUgdGVybWluYWwsIG93bmluZyB0aGUgcmVhZGxpbmVcbiAqIGxpZmVjeWNsZS4gVXNlZCBkaXJlY3RseSBmb3IgdGhlIGRlc3RydWN0aXZlIHRlYXJkb3duIGdhdGUgKGEgeS9OIGlzIHRvbyBlYXN5XG4gKiB0byBmYXQtZmluZ2VyLCBzbyB3ZSByZXF1aXJlIHRoZSBvcGVyYXRvciB0byBUWVBFIHRoZSB0YXJnZXQgaWQgYmFjayksIGFuZCBhc1xuICogdGhlIGJhc2lzIGZvciBgY29uZmlybWAuIERlbGliZXJhdGVseSBoYXMgbm8gYXV0by1hY2NlcHQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGFzayhxdWVzdGlvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2UoeyBpbnB1dDogcHJvY2Vzcy5zdGRpbiwgb3V0cHV0OiBwcm9jZXNzLnN0ZG91dCB9KTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKGF3YWl0IHJsLnF1ZXN0aW9uKHF1ZXN0aW9uKSkudHJpbSgpO1xuICB9IGZpbmFsbHkge1xuICAgIHJsLmNsb3NlKCk7XG4gIH1cbn1cblxuLyoqIEludGVyYWN0aXZlIHkvTiBjb25maXJtYXRpb247IGF1dG8tdHJ1ZSB3aGVuIGBhdXRvWWVzYCAodGhlIGAtLXllc2AgZmxhZykuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29uZmlybShxdWVzdGlvbjogc3RyaW5nLCBhdXRvWWVzOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChhdXRvWWVzKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgYW5zd2VyID0gKGF3YWl0IGFzayhgJHtxdWVzdGlvbn0gW3kvTl0gYCkpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBhbnN3ZXIgPT09ICd5JyB8fCBhbnN3ZXIgPT09ICd5ZXMnO1xufVxuXG4vKipcbiAqIEhvc3QtcG9ydCBwcmUtZmxpZ2h0IChsb2NhbC9taW5pa3ViZSkuIFBvcnRzIGFyZSBERVJJVkVEIGZyb20gdGhlIHRhcmdldCdzIGNsb25lZFxuICogZGVwbG95IHNvdXJjZSAoY29tcG9zZSAvIHNldHVwLnNoKSBzbyB0aGUgbGlzdCBjYW4ndCBkcmlmdCDigJQgaGVuY2UgdGhpcyBydW5zIEFGVEVSXG4gKiB0aGUgY2xvbmUuIEEgdGFrZW4gcG9ydCBtYWtlcyBhIGNvbnRhaW5lci9mb3J3YXJkIGZhaWwgdG8gYmluZCBtaWQtZGVwbG95IChmb3IgdGhlXG4gKiBnYXRld2F5LCBhIHNpbGVudCB1bnJlYWNoYWJsZSBoYW5nKS4gUHJpbnRzIGEg4pyTL+KclyBzdW1tYXJ5IGFuZCByZXR1cm5zIGZhbHNlIE9OTFlcbiAqIHdoZW4gdGhlIGNhbGxlciBtdXN0IEFCT1JUIChhIGZhdGFsIGxvY2FsIGNvbmZsaWN0KS4gbWluaWt1YmUgcG9ydHMgYXJlIG1hbmFnZWRcbiAqIGZvcndhcmRzIChzZXR1cC5zaCBwa2lsbHMvcmVzdGFydHMgdGhlbSksIHNvIGEgY29uZmxpY3QgdGhlcmUgd2FybnMgYnV0IHByb2NlZWRzLlxuICogUmVtb3RlIHRhcmdldHMgKGVjMi9la3MpIGJpbmQgbm90aGluZyBsb2NhbGx5IOKGkiByZXR1cm5zIHRydWUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcmVmbGlnaHRQb3J0cyhzcGVjOiBUYXJnZXRTcGVjLCB0YXJnZXQ6IFRhcmdldElkLCBjd2Q6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBwb3J0cyA9IGRpc2NvdmVySG9zdFBvcnRzKHRhcmdldCwgY3dkLCBzcGVjKTtcbiAgaWYgKHBvcnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IHBvcnRDaGVja3MgPSBhd2FpdCBjaGVja0hvc3RQb3J0cyhwb3J0cyk7XG4gIGNvbnN0IHRha2VuID0gcG9ydENoZWNrcy5maWx0ZXIoKGMpID0+ICFjLmF2YWlsYWJsZSk7XG4gIHByaW50U2VjdGlvbignUG9ydCBhdmFpbGFiaWxpdHknKTtcbiAgZm9yIChjb25zdCBjIG9mIHBvcnRDaGVja3MpIHByaW50SW5mbyhgJHtjLmF2YWlsYWJsZSA/ICfinJMnIDogJ+Kclyd9ICR7U3RyaW5nKGMucG9ydCkucGFkRW5kKDUpfSDigJQgJHtjLnNlcnZpY2V9YCk7XG4gIGlmICh0YWtlbi5sZW5ndGggPT09IDApIHJldHVybiB0cnVlO1xuICAvLyBsb2NhbCBQVUJMSVNIRVMgdGhlc2UgcG9ydHMgYXQgYGRvY2tlciBjb21wb3NlIHVwYCB0aW1lLCBzbyBhIGNvbmZsaWN0IGlzIGZhdGFsLlxuICAvLyBtaW5pa3ViZSdzIGFyZSBrdWJlY3RsIHBvcnQtZm9yd2FyZHMgc2V0dXAuc2ggcGtpbGxzICsgcmVzdGFydHMgKGFuZFxuICAvLyBlbnN1cmVNaW5pa3ViZUdhdGV3YXkgcmVjb3ZlcnMpLCBzbyBhIHN0YWxlIGZvcndhcmQgbXVzdCBOT1QgYmxvY2sgYSByZS1ydW4uXG4gIGNvbnN0IGZhdGFsID0gdGFyZ2V0ID09PSAnZG9ja2VyJztcbiAgLy8g4oCmVU5MRVNTIHRoZSBsb2NhbCBzdGFjayBpcyBhbHJlYWR5IHJ1bm5pbmc6IHRob3NlIHBvcnRzIGFyZSBoZWxkIGJ5IFlPVVIgT1dOXG4gIC8vIHN0YWNrLCBhbmQgYGRvY2tlciBjb21wb3NlIHVwYCBuby1vcHMgdGhlbSDigJQgdGhpcyBpcyBleGFjdGx5IGhvdyB5b3UgcmUtcnVuIHRvXG4gIC8vIGFkZCBsb2Fkcy9vcHRpb25zLiBEb24ndCBibG9jayAodGhlIHdvdWxkLWJlIGNvbmZsaWN0IGlzIGEgc2VsZi1jb25mbGljdCkuXG4gIGlmIChmYXRhbCAmJiBzdGFja1J1bm5pbmcodGFyZ2V0LCBjd2QsIHNwZWMpKSB7XG4gICAgcHJpbnRXYXJuaW5nKGBcXG4ke3Rha2VuLmxlbmd0aH0gcG9ydChzKSBhcmUgaGVsZCBieSB5b3VyIGFscmVhZHktcnVubmluZyAke3NwZWMubGFiZWx9IHN0YWNrIOKAlCByZS1ydW5uaW5nIGp1c3QgcmVzdW1lcyBpdCAobm8gcmVhbCBjb25mbGljdCksIHNvIGNvbnRpbnVpbmcuYCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3QgbGVhZCA9IGAke3Rha2VuLmxlbmd0aH0gcmVxdWlyZWQgcG9ydChzKSBhbHJlYWR5IGluIHVzZTogJHt0YWtlbi5tYXAoKGMpID0+IGMucG9ydCkuam9pbignLCAnKX1gO1xuICAoZmF0YWwgPyBwcmludEVycm9yIDogcHJpbnRXYXJuaW5nKShmYXRhbFxuICAgID8gYFxcbiR7bGVhZH0g4oCUIHRoZSBkZXBsb3kgY2FuJ3QgYmluZCB0aGVtIGFuZCB3b3VsZCBmYWlsIG1pZC13YXkuIEZyZWUgdGhlbSBhbmQgcmUtcnVuOmBcbiAgICA6IGBcXG4ke2xlYWR9IOKAlCBvbiBtaW5pa3ViZSB0aGVzZSBhcmUgdXN1YWxseSBhIHByZXZpb3VzIHJ1bidzIHBvcnQtZm9yd2FyZHMgKHNldHVwLnNoIHJlc3RhcnRzIHRoZW0pLiBGcmVlIGFueSBOT04tbWluaWt1YmUgaG9sZGVyIGlmIHRoZSBnYXRld2F5IHN0YXlzIHVucmVhY2hhYmxlOmApO1xuICBmb3IgKGNvbnN0IGMgb2YgdGFrZW4pIHByaW50SW5mbyhgICDigKIgcG9ydCAke2MucG9ydH0gKCR7Yy5zZXJ2aWNlfSkg4oCUIGZpbmQgdGhlIGhvbGRlcjogIGxzb2YgLWkgOiR7Yy5wb3J0fWApO1xuICBpZiAodGFrZW4uc29tZSgoYykgPT4gYy5wb3J0ID09PSA1MDAwKSkge1xuICAgIHByaW50SW5mbygnICBOb3RlOiBvbiBtYWNPUywgcG9ydCA1MDAwIGlzIHVzdWFsbHkgQWlyUGxheSBSZWNlaXZlciDigJQgU3lzdGVtIFNldHRpbmdzIOKGkiBHZW5lcmFsIOKGkiBBaXJEcm9wICYgSGFuZG9mZiDihpIgQWlyUGxheSBSZWNlaXZlciAob2ZmKS4nKTtcbiAgfVxuICByZXR1cm4gIWZhdGFsO1xufVxuXG4vKipcbiAqIFRlYXJkb3duIG1vZGUg4oCUIHRoZSBkZXN0cm95IGNvdW50ZXJwYXJ0IG9mIHByb3Zpc2lvbmluZywgZ2F0ZWQgSEFSREVSIHRoYW4gZGVwbG95OlxuICogQVdTIHRhcmdldHMgYXJlIGlycmV2ZXJzaWJsZSwgc28gdGhlIG9wZXJhdG9yIG11c3QgVFlQRSB0aGUgdGFyZ2V0IGlkICgtLWZvcmNlXG4gKiBieXBhc3NlcyBmb3IgQ0k7IC0teWVzIGFsb25lIGRvZXMgTk9UKS4gVGVybWluYWw6IG93bnMgaXRzIG91dHB1dCArIGV4aXRDb2RlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuVGVhcmRvd24oXG4gIHNwZWM6IFRhcmdldFNwZWMsXG4gIHRhcmdldDogVGFyZ2V0SWQsXG4gIGN3ZDogc3RyaW5nLFxuICBleGVjdXRpb25JZDogc3RyaW5nLFxuICBvcHRzOiB7IHN0YWNrTmFtZT86IHN0cmluZzsgY2x1c3Rlck5hbWU/OiBzdHJpbmc7IHJlZ2lvbj86IHN0cmluZzsgZG9tYWluPzogc3RyaW5nOyBob3N0ZWRab25lSWQ/OiBzdHJpbmc7IGZvcmNlPzogYm9vbGVhbjsgeWVzPzogYm9vbGVhbjsganNvbj86IGJvb2xlYW4gfSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGNvbW1hbmQ6IGRvd25Db21tYW5kLCBkZXN0cnVjdGl2ZSB9ID0gdGVhcmRvd25Db21tYW5kKHRhcmdldCwge1xuICAgIHN0YWNrTmFtZTogb3B0cy5zdGFja05hbWUsXG4gICAgY2x1c3Rlck5hbWU6IG9wdHMuY2x1c3Rlck5hbWUsXG4gICAgcmVnaW9uOiBvcHRzLnJlZ2lvbixcbiAgICAvLyBla3MgdGVhcmRvd24gKGJpbi9zaHV0ZG93bi5zaCkgYWxzbyBjbGVhbnMgdXAgdGhlIEFDTSBjZXJ0ICsgUm91dGUgNTMgYWxpYXMgZm9yXG4gICAgLy8gdGhlIGRvbWFpbiwgc28gZm9yd2FyZCB0aGVtIHdoZW4gcHJlc2VudC5cbiAgICBkb21haW46IG9wdHMuZG9tYWluLFxuICAgIGhvc3RlZFpvbmVJZDogb3B0cy5ob3N0ZWRab25lSWQsXG4gICAgLy8gT3VyIHR5cGVkIGdhdGUgSVMgdGhlIGNvbmZpcm1hdGlvbiDigJQgYXNzdW1lWWVzIGZvcndhcmRzIGEgbmF0aXZlIGAtLXllc2AgdG8gYW55XG4gICAgLy8gc2NyaXB0LWJhc2VkIHRlYXJkb3duIChlYzIgZGVsZXRlLXN0YWNrIGhhcyBubyBwcm9tcHQ7IGVrcyBzaHV0ZG93bi5zaCBza2lwcyBpdHMgb3duKS5cbiAgICBhc3N1bWVZZXM6IHRydWUsXG4gIH0pO1xuICBpZiAob3B0cy5qc29uKSB7XG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoeyBzdWNjZXNzOiB0cnVlLCBleGVjdXRpb25JZCwgdGFyZ2V0LCB0ZWFyZG93bjogdHJ1ZSwgZGVzdHJ1Y3RpdmUsIGRlc3Ryb3lzOiBzcGVjLmRlc3Ryb3lzLCBjb21tYW5kOiBkb3duQ29tbWFuZCB9LCBudWxsLCAyKSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHByaW50U2VjdGlvbihgVGVhcmRvd24gcGxhbiDigJQgJHtzcGVjLmxhYmVsfWApO1xuICBwcmludEtleVZhbHVlKHsgJ1RhcmdldCc6IHRhcmdldCwgJ0Rlc3Ryb3lzJzogc3BlYy5kZXN0cm95cywgJ1N0b3BzIGNvc3QnOiBzcGVjLmNvc3QgfSk7XG4gIHByaW50U2VjdGlvbignQ29tbWFuZCB0byBydW4nKTtcbiAgcHJpbnRJbmZvKGRvd25Db21tYW5kKTtcbiAgaWYgKGRlc3RydWN0aXZlICYmICFvcHRzLmZvcmNlKSB7XG4gICAgLy8gQmluZCB0aGUgY29uZmlybWF0aW9uIHRvIHRoZSByZXNvdXJjZSBhY3R1YWxseSBkZXN0cm95ZWQ6IGEgY3VzdG9tIG5hbWUgKGVjMlxuICAgIC8vIC0tc3RhY2stbmFtZSAvIGVrcyAtLWNsdXN0ZXItbmFtZSkgbXVzdCBiZSB0eXBlZCB2ZXJiYXRpbSBzbyBhIHdyb25nIG5hbWUgY2FuJ3QgYmVcbiAgICAvLyBjb25maXJtZWQgYnkgaGFiaXQ7IG90aGVyd2lzZSB0aGUgdGFyZ2V0IGlkLlxuICAgIGNvbnN0IHJlc291cmNlTmFtZSA9IHRhcmdldCA9PT0gJ2VrcycgPyBvcHRzLmNsdXN0ZXJOYW1lIDogb3B0cy5zdGFja05hbWU7XG4gICAgY29uc3QgY29uZmlybVRva2VuID0gcmVzb3VyY2VOYW1lID8/IHRhcmdldDtcbiAgICBjb25zdCBub3VuID0gdGFyZ2V0ID09PSAnZWtzJyA/IChvcHRzLmNsdXN0ZXJOYW1lID8gJ2NsdXN0ZXIgbmFtZScgOiAndGFyZ2V0IGlkJykgOiAob3B0cy5zdGFja05hbWUgPyAnc3RhY2sgbmFtZScgOiAndGFyZ2V0IGlkJyk7XG4gICAgY29uc3QgdG9rZW4gPSBhd2FpdCBhc2soYFxcblRoaXMgaXMgSVJSRVZFUlNJQkxFLiBUeXBlIFwiJHtjb25maXJtVG9rZW59XCIgdG8gY29uZmlybSB0ZWFyZG93bjogYCk7XG4gICAgaWYgKHRva2VuICE9PSBjb25maXJtVG9rZW4pIHtcbiAgICAgIHByaW50V2FybmluZyhgVGhhdCBkaWRuJ3QgbWF0Y2gsIHNvIG5vdGhpbmcgd2FzIGRlc3Ryb3llZCDigJQgeW91IGhhdmUgdG8gdHlwZSB0aGUgZXhhY3QgJHtub3VufSB0byBjb25maXJtLmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSBlbHNlIGlmICghZGVzdHJ1Y3RpdmUgJiYgIW9wdHMuZm9yY2UgJiYgIShhd2FpdCBjb25maXJtKCdcXG5Qcm9jZWVkIHdpdGggdGVhcmRvd24gKHN0b3BzIHRoZSBzdGFjazsgb24tZGlzayBkYXRhIHBlcnNpc3RzKT8nLCBvcHRzLnllcyA/PyBmYWxzZSkpKSB7XG4gICAgcHJpbnRXYXJuaW5nKCdObyBwcm9ibGVtIOKAlCBub3RoaW5nIHdhcyBjaGFuZ2VkLicpO1xuICAgIHJldHVybjtcbiAgfVxuICBwcmludFNlY3Rpb24oJ1RlYXJpbmcgZG93bicpO1xuICBjb25zdCB7IGNvZGU6IGRvd25Db2RlIH0gPSBhd2FpdCBydW5TY3JpcHQoZG93bkNvbW1hbmQsIGN3ZCwgeyBjYXB0dXJlOiBmYWxzZSB9KTtcbiAgaWYgKGRvd25Db2RlICE9PSAwKSB7XG4gICAgcHJpbnRFcnJvcihgXFxuVGVhcmRvd24gZmFpbGVkIChleGl0ICR7ZG93bkNvZGV9KS4gSW5zcGVjdCB0aGUgc3RhY2svY29udGFpbmVycyBhbmQgcmV0cnkuYCk7XG4gICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgcmV0dXJuO1xuICB9XG4gIHByaW50U3VjY2VzcygnVGVhcmRvd24gY29tcGxldGUuJyk7XG59XG5cbi8qKlxuICogUnVuIHRoZSBkZXBsb3kgY29tbWFuZCAocmVhbCwgc2VjcmV0cyB1bm1hc2tlZCwgc3RyZWFtZWQgKyBjYXB0dXJlZCkgd2l0aCBhXG4gKiBib3VuZGVkIGF1dG8tZml4ICsgcmV0cnkgbG9vcCDigJQgdGhlIGRlcGxveSBzY3JpcHRzIGFyZSBpZGVtcG90ZW50LCBzbyBhIGZpeGVkXG4gKiByZS1ydW4gcmVzdW1lcyByYXRoZXIgdGhhbiBzdGFydGluZyBvdmVyLiBSZXR1cm5zIHdoZXRoZXIgaXQgc3VjY2VlZGVkIHBsdXMgdGhlXG4gKiAocG9zc2libHkgZml4LWFkanVzdGVkKSBwYXJhbXMsIHdoaWNoIHRoZSBjYWxsZXIgbmVlZHMgZm9yIFNFUyBndWlkYW5jZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkRlcGxveVdpdGhSZXRyeShcbiAgc3BlYzogVGFyZ2V0U3BlYyxcbiAgdXJsOiBzdHJpbmcgfCBudWxsLFxuICBjd2Q6IHN0cmluZyxcbiAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgYWlPcHRzOiB7IHByb3ZpZGVyPzogc3RyaW5nOyBtb2RlbD86IHN0cmluZyB9LFxuICBvcHRzOiB7IHJldHJpZXM/OiBzdHJpbmc7IHllcz86IGJvb2xlYW4gfSxcbik6IFByb21pc2U8eyBzdWNjZWVkZWQ6IGJvb2xlYW47IHJ1blBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT4ge1xuICAvLyBCb3VuZCByZXRyaWVzIHNvIGFuIHVuYXR0ZW5kZWQgYC0teWVzYCBydW4gY2FuJ3QgYXV0by1yZS1ydW4gYSAxNeKAkzMwIG1pblxuICAvLyBkZXBsb3kgYW4gdW5ib3VuZGVkIG51bWJlciBvZiB0aW1lcyBvbiBhIHBlcnNpc3RlbnRseS1yZXRyeWFibGUgc2lnbmF0dXJlLlxuICBjb25zdCBNQVhfUkVUUklFUyA9IDU7XG4gIGNvbnN0IHJlcXVlc3RlZFJldHJpZXMgPSBNYXRoLm1heCgwLCBwYXJzZUludChvcHRzLnJldHJpZXMgPz8gJycsIDEwKSB8fCAwKTtcbiAgY29uc3QgbWF4QXR0ZW1wdHMgPSAxICsgTWF0aC5taW4ocmVxdWVzdGVkUmV0cmllcywgTUFYX1JFVFJJRVMpO1xuICBsZXQgcnVuUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHBhcmFtcztcbiAgbGV0IHN1Y2NlZWRlZCA9IGZhbHNlO1xuICBmb3IgKGxldCBhdHRlbXB0ID0gMTsgYXR0ZW1wdCA8PSBtYXhBdHRlbXB0czsgYXR0ZW1wdCsrKSB7XG4gICAgY29uc3QgcmVhbENvbW1hbmQgPSBhc3NlbWJsZUNvbW1hbmQoc3BlYywgcnVuUGFyYW1zLCB7IG1hc2s6IGZhbHNlIH0pLmNvbW1hbmQ7XG4gICAgcHJpbnRTZWN0aW9uKGF0dGVtcHQgPT09IDEgPyAnRGVwbG95aW5nJyA6IGBEZXBsb3lpbmcg4oCUIHJldHJ5ICR7YXR0ZW1wdCAtIDF9YCk7XG4gICAgaWYgKGF0dGVtcHQgPT09IDEpIHtcbiAgICAgIHByaW50SW5mbyhgRGVwbG95aW5nICR7c3BlYy5sYWJlbH0g4oaSICR7dXJsfWApO1xuICAgICAgcHJpbnRJbmZvKHNwZWMuZGVwbG95cyk7XG4gICAgICBwcmludEluZm8oJ1N0cmVhbWluZyB0aGUgZGVwbG95IGJlbG93IOKAlCBmaXJzdCBydW4gaXMgdGhlIHNsb3cgb25lIChpbWFnZSBwdWxscyArIGNlcnQgZ2VuZXJhdGlvbikuJyk7XG4gICAgfVxuICAgIGNvbnN0IHsgY29kZSwgdGFpbCB9ID0gYXdhaXQgcnVuU2NyaXB0KHJlYWxDb21tYW5kLCBjd2QsIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgICBpZiAoY29kZSA9PT0gMCkgeyBzdWNjZWVkZWQgPSB0cnVlOyBicmVhazsgfVxuXG4gICAgcHJpbnRFcnJvcihgXFxuRGVwbG95IGZhaWxlZCAoZXhpdCAke2NvZGV9KS5gKTtcbiAgICBjb25zdCBpc3N1ZXMgPSBtYXRjaElzc3Vlcyh0YWlsKTtcbiAgICBpZiAoaXNzdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHByaW50U2VjdGlvbignTGlrZWx5IGNhdXNlJyk7XG4gICAgICBmb3IgKGNvbnN0IGkgb2YgaXNzdWVzKSBwcmludEluZm8oYOKAoiAke2kuY2F1c2V9XFxuICDihpIgJHtpLnN1Z2dlc3Rpb259YCk7XG4gICAgfVxuICAgIGlmIChpc0FpQ29uZmlndXJlZChhaU9wdHMpKSB7XG4gICAgICBjb25zdCBkaWFnbm9zaXMgPSBhd2FpdCBkaWFnbm9zZUZhaWx1cmUocmVkYWN0U2VjcmV0cyh0YWlsLCBzcGVjLCBydW5QYXJhbXMpLCBhaU9wdHMpO1xuICAgICAgaWYgKGRpYWdub3NpcykgeyBwcmludFNlY3Rpb24oJ0RpYWdub3NpcycpOyBwcmludEluZm8oZGlhZ25vc2lzKTsgfVxuICAgIH1cbiAgICBpZiAoYXR0ZW1wdCA+PSBtYXhBdHRlbXB0cykgYnJlYWs7XG5cbiAgICAvLyBBdXRvLWZpeDogYSByZXRyeWFibGUgaXNzdWUgd2l0aCBhIHBhcmFtIHdlIGhhdmVuJ3QgYWxyZWFkeSBhcHBsaWVkLlxuICAgIGNvbnN0IGZpeCA9IGlzc3Vlcy5maW5kKChpKSA9PiBpLnJldHJ5YWJsZSAmJiBpLnBhcmFtRml4ICYmIHJ1blBhcmFtc1tpLnBhcmFtRml4LmtleV0gIT09IGkucGFyYW1GaXgudmFsdWUpO1xuICAgIGlmIChmaXg/LnBhcmFtRml4ICYmIGF3YWl0IGNvbmZpcm0oYFxcbkFwcGx5IGZpeCBhbmQgcmV0cnkg4oCUICR7Zml4LnN1Z2dlc3Rpb259YCwgb3B0cy55ZXMgPz8gZmFsc2UpKSB7XG4gICAgICBydW5QYXJhbXMgPSB7IC4uLnJ1blBhcmFtcywgW2ZpeC5wYXJhbUZpeC5rZXldOiBmaXgucGFyYW1GaXgudmFsdWUgfTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICAvLyBSZXRyeWFibGUgYnV0IG5vIHBhcmFtIGNoYW5nZSAoZS5nLiBBQ00gRE5TIHByb3BhZ2F0aW9uKSDigJQgb2ZmZXIgYSBwbGFpbiByZS1ydW4uXG4gICAgaWYgKCFmaXggJiYgaXNzdWVzLnNvbWUoKGkpID0+IGkucmV0cnlhYmxlKSAmJiBhd2FpdCBjb25maXJtKCdcXG5SZXRyeSB0aGUgZGVwbG95IChzYWZlIHRvIHJlLXJ1biDigJQgaXQgcmVzdW1lcyB3aGVyZSBpdCBsZWZ0IG9mZik/Jywgb3B0cy55ZXMgPz8gZmFsc2UpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIHsgc3VjY2VlZGVkLCBydW5QYXJhbXMgfTtcbn1cblxuLyoqXG4gKiBFeGVjdXRlIHRoZSBwb3N0LWluc3RhbGwgc3RlcHMgKHJlZ2lzdGVyIOKGkiBsb2FkcyDihpIgc21va2Ug4oaSIGV2ZW50cyDihpIgY3VzdG9tKS4gT25cbiAqIEVDMi9FS1MgdGhlIHJlZ2lzdGVyIHN0ZXAgKyB0aGUgZXZlbnRzIGJ1bmRsZSAoc3RvcmUtdG9rZW4g4oaSIHNldHVwLWV2ZW50cykgYXJlXG4gKiBTVVJGQUNFRCBhcyBvcmRlcmVkIG1hbnVhbCBuZXh0LXN0ZXBzIGluc3RlYWQgb2YgYXV0by1ydW46IGVjMiByZWdpc3RlciBtdXN0IHJ1blxuICogT04gdGhlIGJveCAodGhlIG1pbmlrdWJlIHVzZXIgb3ducyB0aGUgY2x1c3RlciksIGFuZCB0aGUgZXZlbnRzIGJ1bmRsZSBuZWVkcyBhXG4gKiByZWdpc3RlcmVkIHBsYXRmb3JtICsgQVdTIGNyZWRzLiAoZWtzIHJlZ2lzdGVyIGl0c2VsZiBwb3J0LWZvcndhcmRzLCBzbyBpdCBydW5zXG4gKiBmcm9tIGFueXdoZXJlIHdpdGgga3ViZWN0bCBhY2Nlc3MuKSBTZXRzIGV4aXRDb2RlIG9uIGEgc3RlcCBmYWlsdXJlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuUG9zdFN0ZXBzKFxuICBwb3N0U3RlcHM6IFBvc3RTdGVwW10sXG4gIHNraXBwZWRTdGVwczogU2tpcHBlZFN0ZXBbXSxcbiAgdGFyZ2V0OiBUYXJnZXRJZCxcbiAgY3dkOiBzdHJpbmcsXG4gIGFkbWluRW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBvcHRzOiB7IHllcz86IGJvb2xlYW47IGF1dG9SdW4/OiBib29sZWFuOyBhdXRvSW5pdD86IGJvb2xlYW4gfSxcbik6IFByb21pc2U8dm9pZD4ge1xuICAvLyBBV1MgdGFyZ2V0cyB3aXRoIGAtLWluaXQgYXV0b2A6IHRoZSBkZXBsb3kgc2VsZi1ydW5zIGluaXQtcGxhdGZvcm0sIHNvIHRoZXJlJ3Mgbm9cbiAgLy8gcmVnaXN0ZXIvbG9hZHMgc3RlcCB0byBzdXJmYWNlIGhlcmUg4oCUIGNvbmZpcm0gaXQgYW5kIHBvaW50IGF0IHdoZXJlIHRvIHdhdGNoLlxuICBpZiAob3B0cy5hdXRvSW5pdCAmJiB0YXJnZXQgPT09ICdlYzInKSB7XG4gICAgcHJpbnRJbmZvKCdcXG7inJMgSW5pdCBtb2RlOiBhdXRvIOKAlCB0aGUgaW5zdGFuY2UgcnVucyBpbml0LXBsYXRmb3JtIGl0c2VsZiBvbiBmaXJzdCBib290Jyk7XG4gICAgcHJpbnRJbmZvKCcgIChyZWdpc3RlciBhZG1pbiArIGJ1aWxkIGJvb3RzdHJhcCBpbWFnZSArIGxvYWQgcGx1Z2lucy9jb21wbGlhbmNlL3NhbXBsZXMpLicpO1xuICAgIHByaW50SW5mbygnICBJdCB0YWtlcyB+MzAtNjAgbWluOyB3YXRjaCBwcm9ncmVzczonKTtcbiAgICBwcmludEluZm8oJyAgICBhd3Mgc3NtIHN0YXJ0LXNlc3Npb24gLS10YXJnZXQgPEluc3RhbmNlSWQ+ICAgIyBJbnN0YW5jZUlkIHN0YWNrIG91dHB1dCcpO1xuICAgIHByaW50SW5mbygnICAgIHN1ZG8gdGFpbCAtZiAvdmFyL2xvZy91c2VyLWRhdGEubG9nJyk7XG4gIH0gZWxzZSBpZiAob3B0cy5hdXRvSW5pdCAmJiB0YXJnZXQgPT09ICdla3MnKSB7XG4gICAgcHJpbnRJbmZvKCdcXG7inJMgSW5pdCBtb2RlOiBhdXRvIOKAlCBzZXR1cC5zaCBydW5zIGluaXQtcGxhdGZvcm0gaW4gaXRzIGZpbmFsIHBoYXNlJyk7XG4gICAgcHJpbnRJbmZvKCcgIChyZWdpc3RlciBhZG1pbiArIGJ1aWxkIGJvb3RzdHJhcCBpbWFnZSArIGxvYWQgcGx1Z2lucy9jb21wbGlhbmNlL3NhbXBsZXMsJyk7XG4gICAgcHJpbnRJbmZvKCcgIG92ZXIgYSBrdWJlY3RsIHBvcnQtZm9yd2FyZCkuIFBhc3MgLS1pbml0IG1hbnVhbCB0byBydW4gaXQgeW91cnNlbGYgaW5zdGVhZC4nKTtcbiAgfVxuICBpZiAocG9zdFN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICBmb3IgKGNvbnN0IHMgb2Ygc2tpcHBlZFN0ZXBzKSBwcmludFdhcm5pbmcoYFNraXBwZWQgcG9zdC1zdGVwICR7cy5pZH06ICR7cy5yZWFzb259YCk7XG4gIGNvbnN0IGlzUmVtb3RlID0gKGlkOiBzdHJpbmcpOiBib29sZWFuID0+XG4gICAgKHRhcmdldCA9PT0gJ2VjMicgfHwgdGFyZ2V0ID09PSAnZWtzJykgJiYgKGlkID09PSAncmVnaXN0ZXInIHx8IGlkLnN0YXJ0c1dpdGgoJ3N0b3JlLXRva2VuJykgfHwgaWQgPT09ICdldmVudHMnKTtcbiAgY29uc3QgcnVubmFibGUgPSBwb3N0U3RlcHMuZmlsdGVyKChzKSA9PiAhaXNSZW1vdGUocy5pZCkpO1xuICBjb25zdCByZW1vdGUgPSBwb3N0U3RlcHMuZmlsdGVyKChzKSA9PiBpc1JlbW90ZShzLmlkKSk7XG4gIGlmIChyZW1vdGUubGVuZ3RoID4gMCkge1xuICAgIGlmICh0YXJnZXQgPT09ICdlYzInKSB7XG4gICAgICAvLyBFQzIgcnVucyB0aGUgcGxhdGZvcm0gYXMgYSBkZWRpY2F0ZWQgYG1pbmlrdWJlYCB1c2VyIGluc2lkZSB0aGUgaW5zdGFuY2U6IHRoZVxuICAgICAgLy8gY2x1c3RlciwgaXRzIGt1YmVjb25maWcsIGFuZCB0aGUgand0LXNlY3JldCBhbGwgYmVsb25nIHRvIHRoYXQgdXNlciwgYW5kIHRoZVxuICAgICAgLy8gcmVnaXN0ZXIgc3RlcCBidWlsZHMrcHVzaGVzIGltYWdlcyBhZ2FpbnN0IGl0LiBTbyBpdCBNVVNUIHJ1biBvbiB0aGUgYm94IGFzXG4gICAgICAvLyBgbWluaWt1YmVgIOKAlCBwcmludCB0aGUgZXhhY3QgbGFuZGluZyBzZXF1ZW5jZSByYXRoZXIgdGhhbiBhIGJhcmUgY29tbWFuZC5cbiAgICAgIHByaW50SW5mbygnXFxuTmV4dCDigJQgZmluaXNoIHNldHVwIE9OIHRoZSBpbnN0YW5jZSAoaXQgYnVpbGRzIGltYWdlcyArIHJlYWRzIHRoZSBjbHVzdGVyLCBzbyBpdCcpO1xuICAgICAgcHJpbnRJbmZvKCdjYW5ub3QgcnVuIGZyb20gaGVyZSkuIExhbmQgb24gdGhlIGJveCwgYmVjb21lIHRoZSBgbWluaWt1YmVgIHVzZXIsIHRoZW4gcnVuIGl0OicpO1xuICAgICAgcHJpbnRJbmZvKCcgIGF3cyBzc20gc3RhcnQtc2Vzc2lvbiAtLXRhcmdldCA8SW5zdGFuY2VJZD4gICAgICAjIEluc3RhbmNlSWQgc3RhY2sgb3V0cHV0Jyk7XG4gICAgICBwcmludEluZm8oJyAgc3VkbyAtaXUgbWluaWt1YmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3ducyB0aGUgY2x1c3RlciArIGRvY2tlcicpO1xuICAgICAgcHJpbnRJbmZvKCcgIGNkIC9vcHQvcGlwZWxpbmUvcGlwZWxpbmUtYnVpbGRlciAgICAgICAgICAgICAgICAjIHRoZSBkZXBsb3llZCBjaGVja291dCcpO1xuICAgICAgZm9yIChjb25zdCBzIG9mIHJlbW90ZSkgcHJpbnRJbmZvKGAgICR7cy5jb21tYW5kfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBla3M6IGluaXQtcGxhdGZvcm0gcG9ydC1mb3J3YXJkcyB0byBzdmMvbmdpbngsIHNvIHJlZ2lzdGVyIHJ1bnMgZnJvbSBhbnl3aGVyZSB3aXRoXG4gICAgICAvLyBrdWJlY3RsIGFjY2VzcyDigJQgbm8gaW4tVlBDIHJlcXVpcmVtZW50IGFuZCBubyB3YWl0aW5nIG9uIHRoZSBBTEIvRE5TLiAoQSAtLXdpdGgtZXZlbnRzXG4gICAgICAvLyBidW5kbGUsIGlmIHByZXNlbnQsIGFkZGl0aW9uYWxseSBuZWVkcyBBV1MgY3JlZHMgKyBhIHJlZ2lzdGVyZWQgcGxhdGZvcm0uKVxuICAgICAgcHJpbnRJbmZvKCdcXG5OZXh0IOKAlCBydW4gd2l0aCBrdWJlY3RsIGFjY2VzcyB0byB0aGUgY2x1c3RlciAoaW4gdGhpcyBvcmRlcik6Jyk7XG4gICAgICBmb3IgKGNvbnN0IHMgb2YgcmVtb3RlKSBwcmludEluZm8oYCAg4oCiICR7cy5sYWJlbH0g4oCUICR7cy5jb21tYW5kfWApO1xuICAgIH1cbiAgfVxuICBpZiAocnVubmFibGUubGVuZ3RoID09PSAwKSByZXR1cm47XG4gIC8vIFdoZW4gdGhlIGxvYWRzIHdlcmUgcGlja2VkIGludGVyYWN0aXZlbHkgKGF1dG9SdW4pLCB0aGUgdXNlciBhbHJlYWR5IG9wdGVkIGluIOKAlCBza2lwXG4gIC8vIHRoZSByZWR1bmRhbnQgc2Vjb25kIGNvbmZpcm0uIEZsYWctZHJpdmVuIC8gbm9uLWludGVyYWN0aXZlIHJ1bnMgc3RpbGwgZ2F0ZSBoZXJlLlxuICBpZiAob3B0cy5hdXRvUnVuIHx8IGF3YWl0IGNvbmZpcm0oYFxcblJ1biAke3J1bm5hYmxlLmxlbmd0aH0gcG9zdC1pbnN0YWxsIHN0ZXAocykgbm93P2AsIG9wdHMueWVzID8/IGZhbHNlKSkge1xuICAgIGlmIChvcHRzLmF1dG9SdW4pIHByaW50SW5mbyhgXFxuUnVubmluZyB0aGUgJHtydW5uYWJsZS5sZW5ndGh9IHBvc3QtaW5zdGFsbCBzdGVwKHMpIHlvdSBzZWxlY3RlZOKApmApO1xuICAgIGZvciAoY29uc3QgcyBvZiBydW5uYWJsZSkge1xuICAgICAgcHJpbnRTZWN0aW9uKGBQb3N0LXN0ZXA6ICR7cy5sYWJlbH1gKTtcbiAgICAgIC8vIHJlZ2lzdGVyIChsb2NhbC9taW5pa3ViZSkgbG9ncyBpbnRvIHRoZSBwbGF0Zm9ybSwgc28gaXQgbmVlZHMgdGhlIGFkbWluIGNyZWRzXG4gICAgICAvLyAoUExBVEZPUk1fSURFTlRJRklFUiAvIFBMQVRGT1JNX1BBU1NXT1JEKSBvbiB0b3Agb2YgaXRzIHN0ZXAgZW52LlxuICAgICAgY29uc3QgbmVlZHNDcmVkcyA9IHMuaWQgPT09ICdyZWdpc3RlcicgfHwgcy5pZC5zdGFydHNXaXRoKCdzdG9yZS10b2tlbicpO1xuICAgICAgY29uc3QgZW52ID0gbmVlZHNDcmVkcyA/IHsgLi4ucy5lbnYsIC4uLmFkbWluRW52IH0gOiBzLmVudjtcbiAgICAgIC8vIExvYWRzL3Ntb2tlIGFyZSBub2lzeSArIG5vbi1pbnRlcmFjdGl2ZSDihpIgcnVuIFFVSUVUIChjYXB0dXJlLCBzaG93IG9ubHkgb25cbiAgICAgIC8vIGZhaWx1cmUpLiBFeGNlcHRpb246IGEgcmVnaXN0ZXIgd2l0aCBubyBhZG1pbiBjcmVkcyBwcm9tcHRzLCBzbyBpdCBtdXN0IHN0cmVhbS5cbiAgICAgIGNvbnN0IGludGVyYWN0aXZlUmVnaXN0ZXIgPSBzLmlkID09PSAncmVnaXN0ZXInICYmICFhZG1pbkVudi5QTEFURk9STV9JREVOVElGSUVSO1xuICAgICAgY29uc3QgcXVpZXQgPSAhaW50ZXJhY3RpdmVSZWdpc3RlcjtcbiAgICAgIGlmIChxdWlldCkgcHJpbnRJbmZvKGAke3MuY29tbWFuZH1cXG4gIOKApnJ1bm5pbmcgKG91dHB1dCBzaG93biBvbmx5IGlmIGl0IGZhaWxzKWApO1xuICAgICAgZWxzZSBwcmludEluZm8ocy5jb21tYW5kKTtcbiAgICAgIGNvbnN0IHsgY29kZSwgdGFpbCB9ID0gYXdhaXQgcnVuU2NyaXB0KHMuY29tbWFuZCwgY3dkLCB7IHF1aWV0LCBjYXB0dXJlOiBmYWxzZSwgZW52IH0pO1xuICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgaWYgKHF1aWV0ICYmIHRhaWwpIHsgcHJpbnRFcnJvcignXFxuLS0tIGxhc3Qgb3V0cHV0IC0tLScpOyBwcmludEluZm8odGFpbCk7IH1cbiAgICAgICAgcHJpbnRFcnJvcihgXFxuUG9zdC1zdGVwICcke3MuaWR9JyBmYWlsZWQgKGV4aXQgJHtjb2RlfSkuIFRoZSBwbGF0Zm9ybSBpcyBkZXBsb3llZDsgZml4IGFuZCByZS1ydW4gdGhlIHN0ZXAgbWFudWFsbHkuYCk7XG4gICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHByaW50U3VjY2VzcyhgJHtzLmlkfSDinJNgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcHJpbnRJbmZvKCdcXG5Ta2lwcGVkIHBvc3QtaW5zdGFsbCBzdGVwcy4gUnVuIHRoZSBjb21tYW5kcyBhYm92ZSBtYW51YWxseSB3aGVuIHJlYWR5LicpO1xuICB9XG59XG5cbi8qKlxuICogU3BhcnNlLWNsb25lIHRoZSBwbGF0Zm9ybSByZXBvICh3aGVuIC0tcmVwbywgb3IgYWNjZXB0ZWQgdmlhIHRoZSBpbnRlcmFjdGl2ZVxuICogb2ZmZXIpLCByZXBvaW50IGN3ZCBpbnRvIGl0LCBhbmQgdmVyaWZ5IHRoZSBkZXBsb3kgZW50cnlwb2ludCBleGlzdHMuIE93bnMgdGhlXG4gKiBjd2QvYm9vdHN0cmFwcGVkIHN0YXRlLiBTZXRzIGV4aXRDb2RlIG9uIGEgaGFyZCBmYWlsdXJlIChjbG9uZSBlcnJvciAvIG1pc3NpbmdcbiAqIGVudHJ5cG9pbnQpOyBhIHBsYWluIGRlY2xpbmUgbGVhdmVzIGV4aXRDb2RlXG4gKiB1bnRvdWNoZWQuIFJldHVybnMgb2s6ZmFsc2Ugd2hlbiB0aGUgY2FsbGVyIG11c3QgYWJvcnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBib290c3RyYXBBbmRMb2NhdGUoXG4gIHNwZWM6IFRhcmdldFNwZWMsXG4gIGJvb3RzdHJhcDogQm9vdHN0cmFwU3BlYyxcbiAgYm9vdHN0cmFwQ21kOiBzdHJpbmcgfCBudWxsLFxuICBzcGFyc2VQYXRoczogcmVhZG9ubHkgc3RyaW5nW10sXG4gIHN0YXJ0Q3dkOiBzdHJpbmcsXG4gIG9wdHM6IHsgeWVzPzogYm9vbGVhbiB9LFxuKTogUHJvbWlzZTx7IGN3ZDogc3RyaW5nOyBib290c3RyYXBwZWQ6IGJvb2xlYW47IG9rOiBib29sZWFuIH0+IHtcbiAgbGV0IGN3ZCA9IHN0YXJ0Q3dkO1xuICBsZXQgYm9vdHN0cmFwcGVkID0gZmFsc2U7XG4gIC8vIFNoYXJlZCBieSBgLS1yZXBvYCBhbmQgdGhlIGludGVyYWN0aXZlIG9mZmVyLiBSZXBvaW50cyBjd2QgKyBzZXRzIGJvb3RzdHJhcHBlZDtcbiAgLy8gYGJvb3RzdHJhcHBlZGAgcmVjb3JkcyB3aGV0aGVyIHdlIGNyZWF0ZWQgdGhlIGNsb25lICh2cy4gYW4gZXhpc3RpbmcgY2hlY2tvdXQpIOKAlFxuICAvLyBvbmx5IHRoZW4gY2FuIHRoZSBjYWxsZXIgYWRkaXRpdmVseSBzcGFyc2UtZmV0Y2ggbG9hZCBmb2xkZXJzLlxuICBjb25zdCBib290c3RyYXBDbG9uZSA9IGFzeW5jICgpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBjb25zdCBjbWQgPSBib290c3RyYXBDb21tYW5kKGJvb3RzdHJhcCk7XG4gICAgcHJpbnRTZWN0aW9uKCdCb290c3RyYXAnKTtcbiAgICBwcmludEluZm8oY21kKTtcbiAgICBjb25zdCB7IGNvZGUgfSA9IGF3YWl0IHJ1blNjcmlwdChjbWQsIGN3ZCwgeyBjYXB0dXJlOiBmYWxzZSB9KTtcbiAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgcHJpbnRFcnJvcihgXFxuVGhlIGNsb25lIGRpZG4ndCBmaW5pc2ggKGV4aXQgJHtjb2RlfSkuIERvdWJsZS1jaGVjayB0aGUgcmVwbyBVUkwgLyByZWYgKG9yIHlvdXIgbmV0d29yaykgYW5kIGdpdmUgaXQgYW5vdGhlciBnby5gKTtcbiAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjd2QgPSBwYXRoLnJlc29sdmUoY3dkLCBib290c3RyYXAud29ya2Rpcik7XG4gICAgYm9vdHN0cmFwcGVkID0gdHJ1ZTtcbiAgICBwcmludFN1Y2Nlc3MoYFJlcG8gaXMgcmVhZHkg4oCUIGNvbnRpbnVpbmcgZnJvbSAke2N3ZH1gKTtcbiAgICBjb25zdCBhYnNlbnQgPSBzcGFyc2VQYXRocy5maWx0ZXIoKHApID0+ICFleGlzdHNTeW5jKHBhdGguam9pbihjd2QsIHApKSk7XG4gICAgaWYgKGFic2VudC5sZW5ndGggPiAwKSB7XG4gICAgICBwcmludEVycm9yKGBcXG5UaGUgc3BhcnNlIGNsb25lIGlzIG1pc3NpbmcgJHthYnNlbnQuam9pbignLCAnKX0g4oCUIHRoYXQgcmVmIG1heSBub3QgaGF2ZSB0aG9zZSBmb2xkZXJzLiBUcnkgYSBkaWZmZXJlbnQgLS1yZWYuYCk7XG4gICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgLy8gYC0tcmVwb2A6IGNsb25lIHVwIGZyb250IChtdXN0IHByZWNlZGUgdGhlIGVudHJ5cG9pbnQgY2hlY2spLlxuICBpZiAoYm9vdHN0cmFwQ21kKSB7XG4gICAgcHJpbnRJbmZvKGBcXG5Cb290c3RyYXAg4oaSIGNsb25lICR7Ym9vdHN0cmFwLnJlcG99IEAgJHtib290c3RyYXAucmVmfSBpbnRvICR7Ym9vdHN0cmFwLndvcmtkaXJ9IChzcGFyc2UpLmApO1xuICAgIGlmICghKGF3YWl0IGNvbmZpcm0oJ0dvIGFoZWFkIHdpdGggdGhlIGNsb25lPycsIG9wdHMueWVzID8/IGZhbHNlKSkpIHtcbiAgICAgIHByaW50V2FybmluZygnTm8gcHJvYmxlbSDigJQgbm90aGluZyB3YXMgY2hhbmdlZC4gUmUtcnVuIHdoZW5ldmVyIHlvdVxcJ3JlIHJlYWR5LicpO1xuICAgICAgcmV0dXJuIHsgY3dkLCBib290c3RyYXBwZWQsIG9rOiBmYWxzZSB9O1xuICAgIH1cbiAgICBpZiAoIShhd2FpdCBib290c3RyYXBDbG9uZSgpKSkgcmV0dXJuIHsgY3dkLCBib290c3RyYXBwZWQsIG9rOiBmYWxzZSB9O1xuICB9XG5cbiAgLy8gVGhlIGRlcGxveSBlbnRyeXBvaW50IG11c3QgZXhpc3QgcmVsYXRpdmUgdG8gY3dkLiBJZiBpdCBkb2Vzbid0IGFuZCB3ZSBoYXZlbid0XG4gIC8vIGJvb3RzdHJhcHBlZCwgZ3JhY2VmdWxseSBPRkZFUiB0byBjbG9uZSAoaW50ZXJhY3RpdmUgb25seSkgc28gYSBmcmVzaCBtYWNoaW5lIGNhblxuICAvLyBwcm9jZWVkIHdpdGhvdXQgcmUtcnVubmluZyB3aXRoIC0tcmVwby5cbiAgaWYgKCFlbnRyeXBvaW50RXhpc3RzKHNwZWMsIGN3ZCkpIHtcbiAgICBjb25zdCBpbnRlcmFjdGl2ZSA9IEJvb2xlYW4ocHJvY2Vzcy5zdGRpbi5pc1RUWSkgJiYgIW9wdHMueWVzO1xuICAgIGlmICghYm9vdHN0cmFwQ21kICYmIGludGVyYWN0aXZlICYmIGdpdEF2YWlsYWJsZSgpKSB7XG4gICAgICBwcmludEluZm8oYFxcbkxvb2tzIGxpa2UgeW91J3JlIG5vdCBpbnNpZGUgYSBwaXBlbGluZS1idWlsZGVyIGNoZWNrb3V0LCBzbyB0aGUgJHtzcGVjLmxhYmVsfSBkZXBsb3kgc2NyaXB0cyBhcmVuJ3QgaGVyZSB5ZXQuYCk7XG4gICAgICBpZiAoYXdhaXQgY29uZmlybShgV2FudCBtZSB0byBzcGFyc2UtY2xvbmUgdGhlbSBpbnRvICR7Ym9vdHN0cmFwLndvcmtkaXJ9IGFuZCBrZWVwIGdvaW5nP2AsIGZhbHNlKSkge1xuICAgICAgICBpZiAoIShhd2FpdCBib290c3RyYXBDbG9uZSgpKSkgcmV0dXJuIHsgY3dkLCBib290c3RyYXBwZWQsIG9rOiBmYWxzZSB9O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWVudHJ5cG9pbnRFeGlzdHMoc3BlYywgY3dkKSkge1xuICAgICAgcHJpbnRXYXJuaW5nKGBcXG5JIGNvdWxkbid0IGZpbmQgJHtzcGVjLmRpcn0vJHtzcGVjLmVudHJ5cG9pbnR9IGZyb20gJHtjd2R9LmApO1xuICAgICAgcHJpbnRJbmZvKCdUd28gZWFzeSB3YXlzIGZvcndhcmQ6Jyk7XG4gICAgICBwcmludEluZm8oJyAg4oCiIGNkIGludG8geW91ciBwaXBlbGluZS1idWlsZGVyIGNoZWNrb3V0IGFuZCByZS1ydW4sIG9yJyk7XG4gICAgICBwcmludEluZm8oYCAg4oCiIGFkZCAtLXJlcG8gYW5kIEknbGwgYm9vdHN0cmFwIGEgZnJlc2ggc3BhcnNlIGNsb25lIGZvciB5b3Uke2dpdEF2YWlsYWJsZSgpID8gJy4nIDogJyAob25jZSBnaXQgaXMgaW5zdGFsbGVkKS4nfWApO1xuICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICByZXR1cm4geyBjd2QsIGJvb3RzdHJhcHBlZCwgb2s6IGZhbHNlIH07XG4gICAgfVxuICB9XG4gIHJldHVybiB7IGN3ZCwgYm9vdHN0cmFwcGVkLCBvazogdHJ1ZSB9O1xufVxuXG4vKipcbiAqIEludGVyYWN0aXZlIG9wdC1pbiBsb2Fkcywgb2ZmZXJlZCBBRlRFUiB0aGUgY2xvbmUgKHNvIHdlIG9ubHkgYXNrIG9uY2UgdGhlIG9wZXJhdG9yXG4gKiBoYXMgYWdyZWVkIHRvIHByb2NlZWQpLiBQcm9tcHRzIHBlciBsb2FkLCBhZGRpdGl2ZWx5IHNwYXJzZS1mZXRjaGVzIHRoZSBwaWNrZWRcbiAqIGZvbGRlcnMgaW50byBhIGJvb3RzdHJhcHBlZCBzcGFyc2UgY2xvbmUsIHRoZW4gcmUtcmVzb2x2ZXMgdGhlIHBvc3QtaW5zdGFsbCBzdGVwc1xuICogd2l0aCB0aGUgc2VsZWN0aW9ucy4gUmV0dXJucyB0aGUgY2hvc2VuIGlkcyArIHRoZSByZWNvbXB1dGVkIHN0ZXBzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUxvYWRzSW50ZXJhY3RpdmVseShcbiAgdGFyZ2V0OiBUYXJnZXRJZCxcbiAgdXJsOiBzdHJpbmcgfCBudWxsLFxuICByZWdpb246IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgY3dkOiBzdHJpbmcsXG4gIGJvb3RzdHJhcHBlZDogYm9vbGVhbixcbiAgYm9vdHN0cmFwOiBCb290c3RyYXBTcGVjLFxuICBwb3N0U3RlcEZsYWdzOiB7IGluaXQ6IGJvb2xlYW47IGF1dG9Jbml0OiBib29sZWFuOyBidWlsZEJvb3RzdHJhcDogYm9vbGVhbjsgc21va2VUZXN0OiBib29sZWFuOyBldmVudHM6IGJvb2xlYW47IHN0ZXBzOiBzdHJpbmdbXSB9LFxuKTogUHJvbWlzZTx7IGVuYWJsZWRMb2FkSWRzOiBzdHJpbmdbXTsgc3RlcHM6IFBvc3RTdGVwW107IHNraXBwZWQ6IFNraXBwZWRTdGVwW10gfT4ge1xuICBjb25zdCBwcm9tcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIHBsdWdpbnM6ICdMb2FkIHBsdWdpbnM/JyxcbiAgICBzYW1wbGVzOiAnTG9hZCBzYW1wbGUgcGlwZWxpbmUgdGVtcGxhdGVzPycsXG4gICAgY29tcGxpYW5jZTogJ0xvYWQgY29tcGxpYW5jZSBydWxlcz8nLFxuICB9O1xuICBwcmludFNlY3Rpb24oJ09wdGlvbmFsIHBvc3QtaW5zdGFsbCBsb2FkcycpO1xuICBjb25zdCBjaG9zZW46IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgcyBvZiBMT0FEX1NURVBTKSB7XG4gICAgaWYgKGF3YWl0IGNvbmZpcm0ocHJvbXB0c1tzLmlkXSA/PyBgTG9hZCAke3MuaWR9P2AsIGZhbHNlKSkgY2hvc2VuLnB1c2gocy5pZCk7XG4gIH1cbiAgLy8gQWRkaXRpdmUgc3BhcnNlIHJlLXN5bmM6IG1hdGVyaWFsaXplIE9OTFkgdGhlIHBpY2tlZCBsb2FkcycgZm9sZGVycyAodGhlIHBhcnRpYWxcbiAgLy8gY2xvbmUgZmV0Y2hlcyB0aGVpciBibG9icyBvbiBkZW1hbmQpLiBPbmx5IHdoZW4gd2UgY3JlYXRlZCBhIFNQQVJTRSBjbG9uZSDigJQgYVxuICAvLyBub3JtYWwgY2hlY2tvdXQgYWxyZWFkeSBoYXMgZXZlcnkgZm9sZGVyLCBhbmQgdGhlIGdpdDwyLjI3IGZ1bGwtY2xvbmUgZmFsbGJhY2tcbiAgLy8gKGJvb3RzdHJhcC5mdWxsKSBpcyBub24tc3BhcnNlLCB3aGVyZSBgc3BhcnNlLWNoZWNrb3V0IGFkZGAgd291bGQgc3dpdGNoIGl0IHRvXG4gIC8vIGNvbmUgbW9kZSBhbmQgUFJVTkUgdGhlIGFscmVhZHktbWF0ZXJpYWxpemVkIGRlcGxveSBmb2xkZXJzLlxuICBpZiAoYm9vdHN0cmFwcGVkICYmICFib290c3RyYXAuZnVsbCkge1xuICAgIGNvbnN0IGFic2VudCA9IHNwYXJzZVBhdGhzRm9yKHRhcmdldCwgY2hvc2VuKS5maWx0ZXIoKHApID0+ICFleGlzdHNTeW5jKHBhdGguam9pbihjd2QsIHApKSk7XG4gICAgaWYgKGFic2VudC5sZW5ndGggPiAwKSB7XG4gICAgICBwcmludFNlY3Rpb24oJ0ZldGNoaW5nIHNlbGVjdGVkIGxvYWQgZm9sZGVycycpO1xuICAgICAgY29uc3QgYWRkQ21kID0gYGdpdCBzcGFyc2UtY2hlY2tvdXQgYWRkICR7YWJzZW50Lm1hcCgocCkgPT4gYCcke3B9J2ApLmpvaW4oJyAnKX0gJiYgZ2l0IGNoZWNrb3V0ICR7c2hlbGxRdW90ZShib290c3RyYXAucmVmKX1gO1xuICAgICAgcHJpbnRJbmZvKGFkZENtZCk7XG4gICAgICBjb25zdCB7IGNvZGUgfSA9IGF3YWl0IHJ1blNjcmlwdChhZGRDbWQsIGN3ZCwgeyBjYXB0dXJlOiBmYWxzZSB9KTtcbiAgICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICAgIHByaW50V2FybmluZyhgQ291bGRuJ3QgZmV0Y2ggJHthYnNlbnQuam9pbignLCAnKX0g4oCUIHRoZSBtYXRjaGluZyBsb2FkIHN0ZXAocykgbWF5IGZhaWwuIFJlLXJ1biB3aXRoIC0tcmVwbyB0byByZWZyZXNoIHRoZSBjbG9uZS5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlUG9zdFN0ZXBzKHtcbiAgICB0YXJnZXQsXG4gICAgdXJsLFxuICAgIHJlZ2lvbixcbiAgICBlbmFibGVkTG9hZElkczogY2hvc2VuLFxuICAgIC4uLnBvc3RTdGVwRmxhZ3MsXG4gICAgYnVpbGRCb290c3RyYXA6IHBvc3RTdGVwRmxhZ3MuYnVpbGRCb290c3RyYXAgfHwgY2hvc2VuLmluY2x1ZGVzKCdwbHVnaW5zJyksXG4gIH0pO1xuICByZXR1cm4geyBlbmFibGVkTG9hZElkczogY2hvc2VuLCBzdGVwczogcmVzb2x2ZWQuc3RlcHMsIHNraXBwZWQ6IHJlc29sdmVkLnNraXBwZWQgfTtcbn1cblxuLyoqXG4gKiBSZWRhY3Qgc2VjcmV0IHBhcmFtIHZhbHVlcyAoZS5nLiB0aGUgZ2hjciB0b2tlbikgZnJvbSBjYXB0dXJlZCBkZXBsb3kgb3V0cHV0XG4gKiBiZWZvcmUgaXQgaXMgc2VudCB0byB0aGUgTExNIGZvciBkaWFnbm9zaXMuIFRoZSBkZXBsb3kgcnVucyB3aXRoIHNlY3JldHNcbiAqIHVubWFza2VkLCBzbyBhbHRob3VnaCB0aGUgY3VycmVudCBzY3JpcHRzIGRvbid0IGVjaG8gdGhlbSwgdGhpcyBrZWVwcyBhIGZ1dHVyZVxuICogc2NyaXB0J3Mgc3RyYXkgZWNobyAob3IgYSB2ZXJib3NlIHN1Yi10b29sKSBmcm9tIGNyb3NzaW5nIHRoZSB0aGlyZC1wYXJ0eS1MTE1cbiAqIGJvdW5kYXJ5LlxuICovXG5mdW5jdGlvbiByZWRhY3RTZWNyZXRzKHRleHQ6IHN0cmluZywgc3BlYzogVGFyZ2V0U3BlYywgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZyB7XG4gIGxldCBvdXQgPSB0ZXh0O1xuICBmb3IgKGNvbnN0IGlucHV0IG9mIFsuLi5zcGVjLnJlcXVpcmVkLCAuLi5zcGVjLm9wdGlvbmFsXSkge1xuICAgIGlmICghaW5wdXQuc2VjcmV0KSBjb250aW51ZTtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcmFtc1tpbnB1dC5rZXldO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA+PSA0KSBvdXQgPSBvdXQuc3BsaXQodmFsdWUpLmpvaW4oJyoqKicpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogQXNzZW1ibGUgZGVwbG95IHBhcmFtcyBmcm9tIGV4cGxpY2l0IGZsYWdzIChmbGFncyBhbHdheXMgd2luIG92ZXIgdGhlIE5MXG4gKiBwYXJzZSwgd2hpY2ggb25seSBmaWxscyBnYXBzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUGFyYW1zKG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBzZWxmSW5pdDogYm9vbGVhbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHtcbiAgICByZWdpb246IG9wdGlvbnMucmVnaW9uLFxuICAgIGRvbWFpbjogb3B0aW9ucy5kb21haW4sXG4gICAgaG9zdGVkWm9uZUlkOiBvcHRpb25zLmhvc3RlZFpvbmVJZCxcbiAgICBkZXBsb3lNb2RlOiBvcHRpb25zLmRlcGxveU1vZGUsXG4gICAga2V5UGFpcjogb3B0aW9ucy5rZXlQYWlyLFxuICAgIGluc3RhbmNlVHlwZTogb3B0aW9ucy5pbnN0YW5jZVR5cGUsXG4gICAgLy8gZWMyIExFQU4gbW9kZSAoYm9vbGVhbikg4oaSIGFzc2VtYmxlQ29tbWFuZCBlbWl0cyBgLS1sZWFuYCwgd2hpY2ggc2V0dXAuc2hcbiAgICAvLyBmb3J3YXJkcyB0byB0aGUgQ0ZOIGBMZWFuYCBwYXJhbS4gT25seSBlYzIncyBzcGVjIGxpc3RzIGl0OyBvdGhlciB0YXJnZXRzIGlnbm9yZSBpdC5cbiAgICBsZWFuOiBvcHRpb25zLmxlYW4gPT09IHRydWUsXG4gICAgLy8gRGVwbG95LXRpbWUgcmVzb3VyY2UgaWRlbnRpdHk6IGVjMiBlbWl0cyAtLXN0YWNrLW5hbWUgKGtleSBzdGFja05hbWUpLCBla3MgZW1pdHNcbiAgICAvLyAtLWNsdXN0ZXItbmFtZSAoa2V5IGNsdXN0ZXJOYW1lKS4gQm90aCBhbHNvIGRyaXZlIHRlYXJkb3duLiBVbmRlZmluZWQg4oaSIGRlZmF1bHRzLlxuICAgIHN0YWNrTmFtZTogb3B0aW9ucy5zdGFja05hbWUsXG4gICAgY2x1c3Rlck5hbWU6IG9wdGlvbnMuY2x1c3Rlck5hbWUsXG4gICAgZ2hjclRva2VuOiBvcHRpb25zLmdoY3JUb2tlbixcbiAgICAvLyBlbWFpbC9ub0VtYWlsIGFyZSBjb2VyY2VkIEFGVEVSIHRoZSBOTCBtZXJnZSBiZWxvdyDigJQgcGFyc2VHb2FsIGNhbiByZXR1cm5cbiAgICAvLyBgZW1haWxgLCBzbyBwcmUtY29lcmNpbmcgaGVyZSAobmV2ZXItdW5kZWZpbmVkKSB3b3VsZCBsZXQgdGhlIG1lcmdlJ3NcbiAgICAvLyBgPT09IHVuZGVmaW5lZGAgZ3VhcmQgc2lsZW50bHkgZHJvcCBhbiBBSS1wYXJzZWQgZW1haWwgY2hvaWNlLiBMZWZ0IG91dCBvZlxuICAgIC8vIHRoaXMgbGl0ZXJhbCBvbiBwdXJwb3NlOyByZXNvbHZlZCBhIGZldyBsaW5lcyBkb3duLlxuICAgIGVtYWlsRnJvbTogb3B0aW9ucy5lbWFpbEZyb20sXG4gICAgZW1haWxGcm9tTmFtZTogb3B0aW9ucy5lbWFpbEZyb21OYW1lLFxuICAgIGFsZXJ0RW1haWw6IG9wdGlvbnMuYWxlcnRFbWFpbCxcbiAgICBub0NyZWF0ZVNlc0lkZW50aXR5OiBvcHRpb25zLnNraXBTZXNJZGVudGl0eSxcbiAgICAvLyBUaGUgQVdTIGRlcGxveXMgc2VsZi1pbml0IGJ5IGRlZmF1bHQgKGVjMiBvbiBmaXJzdCBib290LCBla3MgaW4gc2V0dXAuc2gncyBmaW5hbFxuICAgIC8vIHBoYXNlKSwgc28gd2UgZW1pdCB0aGUgbG9hZC1iZWFyaW5nIGAtLW5vLWF1dG8taW5pdGAgd2hlbiB0aGUgbW9kZSBpcyBOT1QgYXV0b1xuICAgIC8vIChtYW51YWwvc2tpcCA9IFwiZG9uJ3QgbGV0IHRoZSBkZXBsb3kgaW5pdCBpdHNlbGZcIikuIGAtLWF1dG8taW5pdGAgKGEgbm8tb3AgcmVhZmZpcm0pXG4gICAgLy8gaXMgbmV2ZXIgZW1pdHRlZC4gT25seSBlYzIvZWtzIGNhcnJ5IHRoZXNlIGZsYWdzIGluIHRoZWlyIHNwZWM7IG90aGVyIHRhcmdldHMgaWdub3JlIGl0LlxuICAgIG5vQXV0b0luaXQ6ICFzZWxmSW5pdCxcbiAgfTtcbn1cblxuLyoqXG4gKiBgLS1kaWFnbm9zZSA8ZmlsZT5gOiBleHBsYWluIGEgZGVwbG95IGZhaWx1cmUgd2l0aCB0aGUgY29uZmlndXJlZCBtb2RlbC4gQVxuICogcmVhZC1vbmx5IGluc3BlY3Rpb24gbW9kZSDigJQgdGhlIGNhbGxlciByZXR1cm5zIGFmdGVyd2FyZHMgd2hldGhlciBvciBub3QgYVxuICogdGFyZ2V0IHdhcyBnaXZlbiwgc28gaXQgbmV2ZXIgZmFsbHMgdGhyb3VnaCBpbnRvIGEgKHBvc3NpYmx5IC0teWVzKSBkZXBsb3kuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5EaWFnbm9zZShmaWxlOiBzdHJpbmcsIGpzb246IGJvb2xlYW4sIGFpT3B0czogQWlPcHRpb25zLCBleGVjdXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBmYWlsdXJlVGV4dDogc3RyaW5nO1xuICB0cnkge1xuICAgIGZhaWx1cmVUZXh0ID0gcmVhZEZpbGVTeW5jKGZpbGUsICd1dGYtOCcpO1xuICB9IGNhdGNoIHtcbiAgICBwcmludEVycm9yKGBDYW5ub3QgcmVhZCAtLWRpYWdub3NlIGZpbGU6ICR7ZmlsZX1gKTtcbiAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZGlhZ25vc2lzID0gaXNBaUNvbmZpZ3VyZWQoYWlPcHRzKSA/IGF3YWl0IGRpYWdub3NlRmFpbHVyZShmYWlsdXJlVGV4dCwgYWlPcHRzKSA6IG51bGw7XG4gIC8vIFdpdGggLS1qc29uLCB0aGUgZGlhZ25vc2lzIElTIHRoZSBtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCDigJQgZW1pdCBpdFxuICAvLyBhbG9uZSAoZG9uJ3QgYWxzbyBwcmludCB0ZXh0LCB3aGljaCB3b3VsZCBjb3JydXB0IHRoZSBKU09OIHN0cmVhbSkuXG4gIGlmIChqc29uKSB7XG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoeyBzdWNjZXNzOiB0cnVlLCBleGVjdXRpb25JZCwgZGlhZ25vc2lzIH0sIG51bGwsIDIpKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGRpYWdub3Npcykge1xuICAgIHByaW50U2VjdGlvbignRmFpbHVyZSBkaWFnbm9zaXMnKTtcbiAgICBwcmludEluZm8oZGlhZ25vc2lzKTtcbiAgfSBlbHNlIHtcbiAgICBwcmludFdhcm5pbmcoJ0RpYWdub3NpcyB1bmF2YWlsYWJsZSAobm8gQUkga2V5IGNvbmZpZ3VyZWQgb3IgdGhlIG1vZGVsIGNvdWxkIG5vdCBiZSByZWFjaGVkKS4nKTtcbiAgfVxufVxuXG4vKiogUHJpbnQgdGhlIHByb3Zpc2lvbiBwbGFuIChzaG93biBiZWZvcmUgdGhlIGdhdGVkIGV4ZWN1dGlvbikuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRQbGFuKHA6IHtcbiAgc3BlYzogVGFyZ2V0U3BlYztcbiAgdGFyZ2V0OiBUYXJnZXRJZDtcbiAgcHJlcmVxczogUHJlcmVxQ2hlY2tbXTtcbiAgbWlzc2luZzogQXNzZW1ibGVSZXN1bHRbJ21pc3NpbmcnXTtcbiAgYm9vdHN0cmFwOiBCb290c3RyYXBTcGVjO1xuICBib290c3RyYXBDbWQ6IHN0cmluZyB8IG51bGw7XG4gIHNwYXJzZVBhdGhzOiBzdHJpbmdbXTtcbiAgY29tbWFuZDogc3RyaW5nO1xuICBwb3N0U3RlcHM6IFBvc3RTdGVwW107XG4gIHNraXBwZWRTdGVwczogU2tpcHBlZFN0ZXBbXTtcbn0pOiB2b2lkIHtcbiAgY29uc3QgeyBzcGVjLCB0YXJnZXQsIHByZXJlcXMsIG1pc3NpbmcsIGJvb3RzdHJhcCwgYm9vdHN0cmFwQ21kLCBzcGFyc2VQYXRocywgY29tbWFuZCwgcG9zdFN0ZXBzLCBza2lwcGVkU3RlcHMgfSA9IHA7XG4gIHByaW50U2VjdGlvbihgUHJvdmlzaW9uIHBsYW4g4oCUICR7c3BlYy5sYWJlbH1gKTtcbiAgcHJpbnRLZXlWYWx1ZSh7ICdUYXJnZXQnOiB0YXJnZXQsICdCZXN0IGZvcic6IHNwZWMuYmVzdEZvciwgJ0Nvc3QnOiBzcGVjLmNvc3QgfSk7XG5cbiAgcHJpbnRTZWN0aW9uKCdQcmVyZXF1aXNpdGVzJyk7XG4gIGZvciAoY29uc3QgYyBvZiBwcmVyZXFzKSBwcmludEluZm8oYCR7Yy5vayA/ICfinJMnIDogJ+Kclyd9ICR7Yy5uYW1lfSDigJQgJHtjLmRldGFpbH1gKTtcbiAgaWYgKCFwcmVyZXFzU2F0aXNmaWVkKHByZXJlcXMpKSBwcmludFdhcm5pbmcoJ1Jlc29sdmUgdGhlIGZhaWxpbmcgcHJlcmVxdWlzaXRlcyBhYm92ZSBiZWZvcmUgZGVwbG95aW5nLicpO1xuXG4gIGlmIChtaXNzaW5nLmxlbmd0aCA+IDApIHtcbiAgICBwcmludFNlY3Rpb24oJ01pc3NpbmcgcmVxdWlyZWQgaW5wdXRzJyk7XG4gICAgZm9yIChjb25zdCBtIG9mIG1pc3NpbmcpIHByaW50SW5mbyhgICAtLSR7bS5mbGFnfSAgKCR7bS5kZXNjcmlwdGlvbn0pYCk7XG4gIH1cblxuICBpZiAoYm9vdHN0cmFwQ21kKSB7XG4gICAgcHJpbnRTZWN0aW9uKCdCb290c3RyYXAgKHNwYXJzZSBnaXQgY2xvbmUsIHJ1bnMgZmlyc3QpJyk7XG4gICAgcHJpbnRJbmZvKGBDbG9uZSAke2Jvb3RzdHJhcC5yZXBvfSBAICR7Ym9vdHN0cmFwLnJlZn0g4oaSICR7Ym9vdHN0cmFwLndvcmtkaXJ9OyBmb2xkZXJzOiAke3NwYXJzZVBhdGhzLmpvaW4oJywgJyl9YCk7XG4gICAgcHJpbnRJbmZvKGJvb3RzdHJhcENtZCk7XG4gIH1cblxuICBwcmludFNlY3Rpb24oJ0NvbW1hbmQgdG8gcnVuJyk7XG4gIHByaW50SW5mbyhjb21tYW5kKTtcblxuICBpZiAocG9zdFN0ZXBzLmxlbmd0aCA+IDAgfHwgc2tpcHBlZFN0ZXBzLmxlbmd0aCA+IDApIHtcbiAgICBwcmludFNlY3Rpb24oJ1Bvc3QtaW5zdGFsbCBzdGVwcycpO1xuICAgIGZvciAoY29uc3QgcyBvZiBwb3N0U3RlcHMpIHByaW50SW5mbyhg4oCiICR7cy5sYWJlbH1cXG4gICAgJHtzLmNvbW1hbmR9YCk7XG4gICAgZm9yIChjb25zdCBzIG9mIHNraXBwZWRTdGVwcykgcHJpbnRXYXJuaW5nKGBTa2lwcGVkICR7cy5pZH06ICR7cy5yZWFzb259YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBQbHVnaW5zIHdlcmUgcGlja2VkIGludGVyYWN0aXZlbHk6IHJlLWNoZWNrIHRoZSBwbHVnaW4tc3BlY2lmaWMgcHJlcmVxcyB0aGF0XG4gKiB3ZXJlIGRlbGliZXJhdGVseSBub3QgaGFyZC1yZXF1aXJlZCB1cCBmcm9udCAoZS5nLiB5cSBmb3IgbWluaWt1YmUgcGx1Z2luXG4gKiBidWlsZHMpLiBPZmZlciB0byBmZXRjaCBhbnkgZmV0Y2hhYmxlIG9uZTsgd2FybiAoZG9uJ3QgYmxvY2sg4oCUIHRoZSBwbGF0Zm9ybVxuICogc3RpbGwgZGVwbG95cykgaWYgaXQgY2FuJ3QgYmUgcmVzb2x2ZWQsIHNvIHRoZSBsYXRlciBwbHVnaW4gYnVpbGQgZG9lc24ndFxuICogZmFpbCBvcGFxdWVseS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlY2hlY2tQbHVnaW5QcmVyZXFzKHRhcmdldDogVGFyZ2V0SWQsIHdhbnRCb290c3RyYXA6IGJvb2xlYW4sIHByZXJlcXM6IFByZXJlcUNoZWNrW10sIHllczogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwbHVnaW5QcmVyZXFzID0gY2hlY2tQcmVyZXFzKHRhcmdldCwgeyBib290c3RyYXA6IHdhbnRCb290c3RyYXAsIHdpdGhQbHVnaW5zOiB0cnVlIH0pO1xuICBjb25zdCBwbHVnaW5HYXBzID0gcGx1Z2luUHJlcmVxcy5maWx0ZXIoKGMpID0+ICFjLm9rICYmIGMucmVxdWlyZWQgJiYgIXByZXJlcXMuc29tZSgocCkgPT4gcC5uYW1lID09PSBjLm5hbWUpKTtcbiAgZm9yIChjb25zdCBjIG9mIHBsdWdpbkdhcHMpIHtcbiAgICBpZiAoaXNGZXRjaGFibGUoYy5uYW1lKSAmJiBhd2FpdCBjb25maXJtKGBcXG4ke2MubmFtZX0gaXMgbmVlZGVkIHRvIGJ1aWxkIHBsdWdpbnMgYnV0IGlzbid0IGluc3RhbGxlZCDigJQgZmV0Y2ggdGhlIHN0YXRpYyBiaW5hcnkgaW50byAke1RPT0xTX0RJUn0/YCwgeWVzKSkge1xuICAgICAgcHJpbnRJbmZvKGBGZXRjaGluZyAke2MubmFtZX3igKZgKTtcbiAgICAgIGlmICghZmV0Y2hUb29sKGMubmFtZSkpIHByaW50V2FybmluZyhgQ291bGRuJ3QgZmV0Y2ggJHtjLm5hbWV9IOKAlCBpbnN0YWxsIGl0IGJlZm9yZSB0aGUgcGx1Z2luIGJ1aWxkIHJ1bnMuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByaW50V2FybmluZyhgJHtjLm5hbWV9IG1pc3Npbmcg4oCUIHRoZSBwbHVnaW4gbG9hZC9idWlsZCBzdGVwIG1heSBmYWlsLiAke2MuZGV0YWlsfWApO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIGxvY2FsL21pbmlrdWJlJ3Mgc2V0dXAuc2ggUkVRVUlSRVMgYSBgLmVudmAgYW5kIGFib3J0cyB3aXRob3V0IGl0IOKAlCBjcmVhdGVcbiAqIGl0IGZyb20gLmVudi5leGFtcGxlIHdpdGggZ2VuZXJhdGVkIHNlY3JldHMgc28gdGhlIGRlcGxveSBpcyBub24taW50ZXJhY3RpdmUuXG4gKiBlYzIgYW5kIGVrcyBkb24ndCBuZWVkIGEgbG9jYWwgYC5lbnZgOiBlYzIgYm9vdHN0cmFwcyBpdHMgc2VjcmV0cyBvbiB0aGVcbiAqIGluc3RhbmNlLCBhbmQgZWtzJ3Mgc2V0dXAuc2ggY3JlYXRlcyB0aGUgazhzIHNlY3JldHMgaXRzZWxmLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlTG9jYWxFbnZGaWxlKHRhcmdldDogVGFyZ2V0SWQsIHNwZWM6IFRhcmdldFNwZWMsIGN3ZDogc3RyaW5nLCB5ZXM6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCh0YXJnZXQgIT09ICdkb2NrZXInICYmIHRhcmdldCAhPT0gJ21pbmlrdWJlJykgfHwgIWVudkZpbGVNaXNzaW5nKGN3ZCwgc3BlYy5kaXIpKSByZXR1cm47XG4gIGlmIChhd2FpdCBjb25maXJtKGBcXG4ke3NwZWMuZGlyfS8uZW52IG5vdCBmb3VuZCDigJQgY3JlYXRlIGl0IGZyb20gLmVudi5leGFtcGxlIChnZW5lcmF0ZXMgc2VjcmV0czsgZWRpdCBsYXRlciBmb3Igb3B0aW9uYWwgaW50ZWdyYXRpb25zIGxpa2UgT0F1dGgpP2AsIHllcykpIHtcbiAgICBjb25zdCBuID0gY3JlYXRlRW52RmlsZShjd2QsIHNwZWMuZGlyKTtcbiAgICBwcmludFN1Y2Nlc3MoYENyZWF0ZWQgJHtzcGVjLmRpcn0vLmVudiDigJQgJHtufSBzZWNyZXQocykgZ2VuZXJhdGVkLmApO1xuICB9IGVsc2Uge1xuICAgIHByaW50V2FybmluZygnQ29udGludWluZyB3aXRob3V0IC5lbnYg4oCUIHNldHVwLnNoIHdpbGwgYWJvcnQgaWYgaXQgc3RheXMgbWlzc2luZy4nKTtcbiAgfVxufVxuXG4vKipcbiAqIEFueSBtaXNzaW5nIHJlcXVpcmVkIHByZXJlcSB0aGF0J3MgYSBzaW5nbGUgc3RhdGljIGJpbmFyeSAoZS5nLiB5cSkgY2FuIGJlXG4gKiBmZXRjaGVkIGludG8gdGhlIHRvb2xzIGNhY2hlIGluc3RlYWQgb2YgYSBzeXN0ZW0gaW5zdGFsbCDigJQgbm8gYnJldy9hcHQuXG4gKiBPZmZlciBpdCwgdGhlbiByZS1jaGVjayAodGhlIGNhY2hlIGRpciBpcyBhbHJlYWR5IG9uIFBBVEgpLiBSZXR1cm5zIHRoZVxuICogKHBvc3NpYmx5IHJlZnJlc2hlZCkgcHJlcmVxIGxpc3QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvZmZlclRvb2xGZXRjaChwcmVyZXFzOiBQcmVyZXFDaGVja1tdLCB5ZXM6IGJvb2xlYW4sIHJlY2hlY2s6ICgpID0+IFByZXJlcUNoZWNrW10pOiBQcm9taXNlPFByZXJlcUNoZWNrW10+IHtcbiAgY29uc3QgZmV0Y2hhYmxlID0gcHJlcmVxcy5maWx0ZXIoKGMpID0+ICFjLm9rICYmIGMucmVxdWlyZWQgJiYgaXNGZXRjaGFibGUoYy5uYW1lKSk7XG4gIGlmIChmZXRjaGFibGUubGVuZ3RoID09PSAwKSByZXR1cm4gcHJlcmVxcztcbiAgY29uc3QgbmFtZXMgPSBmZXRjaGFibGUubWFwKChjKSA9PiBjLm5hbWUpLmpvaW4oJywgJyk7XG4gIGlmICghKGF3YWl0IGNvbmZpcm0oYFxcbiR7bmFtZXN9IG5vdCBpbnN0YWxsZWQg4oCUIGZldGNoIHRoZSBvZmZpY2lhbCBzdGF0aWMgYmluYXJ5IGludG8gJHtUT09MU19ESVJ9IChubyBzeXN0ZW0gaW5zdGFsbCk/YCwgeWVzKSkpIHJldHVybiBwcmVyZXFzO1xuICBmb3IgKGNvbnN0IGMgb2YgZmV0Y2hhYmxlKSB7XG4gICAgcHJpbnRJbmZvKGBGZXRjaGluZyAke2MubmFtZX3igKZgKTtcbiAgICBpZiAoIWZldGNoVG9vbChjLm5hbWUpKSBwcmludFdhcm5pbmcoYENvdWxkbid0IGZldGNoICR7Yy5uYW1lfSDigJQgaW5zdGFsbCBpdCBtYW51YWxseSBhbmQgcmUtcnVuLmApO1xuICB9XG4gIHJldHVybiByZWNoZWNrKCk7XG59XG5cbi8qKiBWZXJpZnkgaGVhbHRoIGFmdGVyIHRoZSBkZXBsb3kgKENSRUFURV9DT01QTEVURSAhPSBzZXJ2aW5nKS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlIZWFsdGgodGFyZ2V0OiBUYXJnZXRJZCwgdXJsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcHJpbnRTZWN0aW9uKCdWZXJpZnlpbmcgaGVhbHRoJyk7XG4gIC8vIE1pbmlrdWJlIHJlYWNoZXMgdGhlIGdhdGV3YXkgdmlhIGEga3ViZWN0bCBwb3J0LWZvcndhcmQgdGhhdCBzZXR1cC5zaFxuICAvLyBiYWNrZ3JvdW5kcyBhbmQgdGhhdCBjYW4gZGllL2ZhaWwgdG8gYmluZCDigJQgKHJlKXN0YXJ0IGl0IGJlZm9yZSBwb2xsaW5nXG4gIC8vIHNvIHdlIGRvbid0IHNpdCBhdCB0aGUgZ2F0ZSBvbiBhIGRlYWQgZm9yd2FyZCB3aGlsZSB0aGUgcG9kcyBhcmUgZmluZS5cbiAgaWYgKHRhcmdldCA9PT0gJ21pbmlrdWJlJykge1xuICAgIGF3YWl0IGVuc3VyZU1pbmlrdWJlR2F0ZXdheSh1cmwsIHsgb25JbmZvOiAobSkgPT4gcHJpbnRJbmZvKG0pIH0pO1xuICB9XG4gIHByaW50SW5mbyhgUG9sbGluZyAke3VybH0vaGVhbHRoIOKApmApO1xuICAvLyBGcmVzaCBFS1MgbGVnaXRpbWF0ZWx5IG5lZWRzIGxvbmdlciB0aGFuIHRoZSAzMDBzIGRlZmF1bHQ6IEthcnBlbnRlciBwcm92aXNpb25zXG4gIC8vIG5vZGVzLCB+MTAgc2VydmljZXMgY29sZC1wdWxsIGltYWdlcywgdGhlIEFMQiBwcm92aXNpb25zICh+Mi0zIG1pbiksIGFuZCB0aGVcbiAgLy8gUm91dGUgNTMgYWxpYXMgcHJvcGFnYXRlcy4gR2l2ZSBpdCAxNSBtaW4gYmVmb3JlIHN1cmZhY2luZyB0aGUgbm90LXJlYWNoYWJsZSBub3RlLlxuICBjb25zdCBoZWFsdGhUaW1lb3V0TXMgPSB0YXJnZXQgPT09ICdla3MnID8gOTAwXzAwMCA6IHVuZGVmaW5lZDtcbiAgY29uc3QgaGVhbHRoID0gYXdhaXQgd2FpdEhlYWx0aHkodXJsLCB7IHRpbWVvdXRNczogaGVhbHRoVGltZW91dE1zLCBvblRpY2s6IChtKSA9PiBwcmludEluZm8obSkgfSk7XG4gIC8vIEdyZWVuIG9ubHkgd2hlbiBmdWxseSByZWFkeTsgYSBcImhlYWx0aCBPSyBidXQgL3JlYWR5IG5ldmVyIGNhbWVcIiBwcm9jZWVkLVxuICAvLyBhbnl3YXkgc3RhdGUgaXMgaGVhbHRoeTp0cnVlIGJ1dCBkZWdyYWRlZCDihpIgd2FybiBzbyBpdCBkb2Vzbid0IHJlYWQgYXMgZG9uZS5cbiAgKGhlYWx0aC5oZWFsdGh5ICYmIGhlYWx0aC5yZWFkeSA/IHByaW50U3VjY2VzcyA6IHByaW50V2FybmluZykoYCR7aGVhbHRoLnVybH0g4oCUICR7aGVhbHRoLmRldGFpbH1gKTtcbn1cbiJdfQ==
|
|
597
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlzaW9uLXN0ZXBzLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvcHJvdmlzaW9uLXN0ZXBzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDOUMsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxLQUFLLFFBQVEsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBa0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRixPQUFPLEVBQUUsZ0JBQWdCLEVBQXNCLE1BQU0sdUJBQXVCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEYsT0FBTyxFQUFFLGdCQUFnQixFQUFtQyxNQUFNLHdCQUF3QixDQUFDO0FBQzNGLE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFvQixNQUFNLHFCQUFxQixDQUFDO0FBQ3JHLE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLGNBQWMsRUFDZCxlQUFlLEdBSWhCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFB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RSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBQ0QsU0FBUyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUMsQ0FBQztJQUNyQyxrRkFBa0Y7SUFDbEYsK0VBQStFO0lBQy9FLHFGQUFxRjtJQUNyRixNQUFNLGVBQWUsR0FBRyxNQUFNLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUMvRCxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuRyw0RUFBNEU7SUFDNUUsK0VBQStFO0lBQy9FLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUNyRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IHJlYWRGaWxlU3luYywgZXhpc3RzU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCAqIGFzIHJlYWRsaW5lIGZyb20gJ25vZGU6cmVhZGxpbmUvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlhZ25vc2VGYWlsdXJlLCBpc0FpQ29uZmlndXJlZCwgdHlwZSBBaU9wdGlvbnMgfSBmcm9tICcuLi9hZ2VudC9haS5qcyc7XG5pbXBvcnQgeyBib290c3RyYXBDb21tYW5kLCB0eXBlIEJvb3RzdHJhcFNwZWMgfSBmcm9tICcuLi9hZ2VudC9ib290c3RyYXAuanMnO1xuaW1wb3J0IHsgY3JlYXRlRW52RmlsZSwgZW52RmlsZU1pc3NpbmcgfSBmcm9tICcuLi9hZ2VudC9lbnYtZmlsZS5qcyc7XG5pbXBvcnQgeyBlbnRyeXBvaW50RXhpc3RzLCBydW5TY3JpcHQgfSBmcm9tICcuLi9hZ2VudC9leGVjdXRvci5qcyc7XG5pbXBvcnQgeyB3YWl0SGVhbHRoeSwgZW5zdXJlTWluaWt1YmVHYXRld2F5IH0gZnJvbSAnLi4vYWdlbnQvaGVhbHRoLmpzJztcbmltcG9ydCB7IGNoZWNrSG9zdFBvcnRzLCBkaXNjb3Zlckhvc3RQb3J0cywgc3RhY2tSdW5uaW5nIH0gZnJvbSAnLi4vYWdlbnQvcG9ydHMuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVBvc3RTdGVwcywgdHlwZSBQb3N0U3RlcCwgdHlwZSBTa2lwcGVkU3RlcCB9IGZyb20gJy4uL2FnZW50L3Bvc3Qtc3RlcHMuanMnO1xuaW1wb3J0IHsgY2hlY2tQcmVyZXFzLCBnaXRBdmFpbGFibGUsIHByZXJlcXNTYXRpc2ZpZWQsIHR5cGUgUHJlcmVxQ2hlY2sgfSBmcm9tICcuLi9hZ2VudC9wcmVyZXFzLmpzJztcbmltcG9ydCB7XG4gIGFzc2VtYmxlQ29tbWFuZCxcbiAgTE9BRF9TVEVQUyxcbiAgc3BhcnNlUGF0aHNGb3IsXG4gIHRlYXJkb3duQ29tbWFuZCxcbiAgdHlwZSBBc3NlbWJsZVJlc3VsdCxcbiAgdHlwZSBUYXJnZXRJZCxcbiAgdHlwZSBUYXJnZXRTcGVjLFxufSBmcm9tICcuLi9hZ2VudC90YXJnZXRzLmpzJztcbmltcG9ydCB7IFRPT0xTX0RJUiwgZmV0Y2hUb29sLCBpc0ZldGNoYWJsZSB9IGZyb20gJy4uL2FnZW50L3Rvb2xzLmpzJztcbmltcG9ydCB7IG1hdGNoSXNzdWVzIH0gZnJvbSAnLi4vYWdlbnQvdHJvdWJsZXNob290LmpzJztcbmltcG9ydCB7IHNoZWxsUXVvdGUgfSBmcm9tICcuLi9jb25maWcvY2xpLmNvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBwcmludFNlY3Rpb24sIHByaW50S2V5VmFsdWUsIHByaW50SW5mbywgcHJpbnRXYXJuaW5nLCBwcmludEVycm9yLCBwcmludFN1Y2Nlc3MgfSBmcm9tICcuLi91dGlscy9vdXRwdXQtdXRpbHMuanMnO1xuXG4vKipcbiAqIFRoZSBgcHJvdmlzaW9uYCBjb21tYW5kJ3MgU1RFUFM6IG9uZSBleHBvcnRlZCBmdW5jdGlvbiBwZXIgcGhhc2Ugb2YgYVxuICogcHJvdmlzaW9uIHJ1biAocG9ydCBwcmUtZmxpZ2h0LCB0ZWFyZG93biwgYm9vdHN0cmFwK2xvY2F0ZSwgdGhlIGRlcGxveVxuICogcmV0cnkgbG9vcCwgdGhlIGludGVyYWN0aXZlIGxvYWQgcGlja2VyLCBwb3N0LXN0ZXBzLCBoZWFsdGgsIGRpYWdub3NlLFxuICogcGxhbiBwcmludGluZykuXG4gKlxuICogU3BsaXQgb3V0IGZyb20gYHByb3Zpc2lvbi50c2Agc28gdGhhdCBmaWxlIGhvbGRzIG9ubHkgd2hhdCBpdCBpcyBhYm91dCDigJQgdGhlXG4gKiB+NDAtb3B0aW9uIHRhYmxlIGFuZCB0aGUgc2VxdWVuY2luZyBuYXJyYXRpdmUgdGhhdCBjYWxscyB0aGVzZSBpbiBvcmRlci4gVGhlXG4gKiBzdGVwcyBhcmUgdGhlIHBhcnQgd2l0aCBiZWhhdmlvdXIgd29ydGggdGVzdGluZyBvbiBpdHMgb3duLCBhbmQgdGhlIHJlcG9cbiAqIGFscmVhZHkgY2FsbHMgdGhlbSB0aGF0IChgdGVzdC9wcm92aXNpb24tc2VhbXMudGVzdC50c2ApLlxuICpcbiAqIEVhY2ggc3RlcCB0YWtlcyB3aGF0IGl0IG5lZWRzIGFuZCByZXR1cm5zIHdoYXQgdGhlIG5leHQgb25lIG5lZWRzOiBub1xuICogbW9kdWxlLWxldmVsIG11dGFibGUgc3RhdGUgY3Jvc3NlcyB0aGlzIGJvdW5kYXJ5LCBzbyB0aGUgdHdvIGhhbHZlcyBjYW4gYmVcbiAqIHJlYWQgaW5kZXBlbmRlbnRseS5cbiAqL1xuXG4vKipcbiAqIFBvc3QtZGVwbG95IGluaXRpYWxpemF0aW9uIG1vZGUgKHRoZSBzaW5nbGUgYC0taW5pdCA8bW9kZT5gIGZsYWcpOlxuICogICAtIGBhdXRvYCAgIOKAlCBpbml0LXBsYXRmb3JtIHJ1bnMgb25jZSB0aGUgcGxhdGZvcm0gaXMgdXAgKHJlZ2lzdGVyIGFkbWluICsgbG9hZCBwbHVnaW5zL1xuICogICAgICAgICAgICAgICAgY29tcGxpYW5jZS9zYW1wbGVzKS4gT24gZWMyIHRoZSBpbnN0YW5jZSBkb2VzIGl0IGl0c2VsZiBvbiBmaXJzdCBib290OyBvblxuICogICAgICAgICAgICAgICAgbG9jYWwvbWluaWt1YmUvZWtzIGBwcm92aXNpb25gIHJ1bnMgaXQgZm9yIHlvdS4gVGhpcyBpcyB0aGUgREVGQVVMVC5cbiAqICAgLSBgbWFudWFsYCDigJQgZG9uJ3Qgc2VsZi1pbml0OyBzdXJmYWNlIHRoZSBleGFjdCBzdGVwIGZvciB5b3UgdG8gcnVuIHlvdXJzZWxmLlxuICogICAtIGBza2lwYCAgIOKAlCBkb24ndCBpbml0aWFsaXplIGF0IGFsbCAobm8gcmVnaXN0ZXIsIG5vIGxvYWRzKS5cbiAqL1xuZXhwb3J0IHR5cGUgSW5pdE1vZGUgPSAnYXV0bycgfCAnbWFudWFsJyB8ICdza2lwJztcbmV4cG9ydCBjb25zdCBJTklUX01PREVTOiByZWFkb25seSBJbml0TW9kZVtdID0gWydhdXRvJywgJ21hbnVhbCcsICdza2lwJ107XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgaW5pdCBtb2RlIGZyb20gYC0taW5pdCA8bW9kZT5gLCBkZWZhdWx0aW5nIHRvIGBhdXRvYCB3aGVuIHRoZSBmbGFnIGlzIGFic2VudC5cbiAqIFJldHVybnMgYG51bGxgIHdoZW4gYC0taW5pdGAgd2FzIGdpdmVuIGFuIGludmFsaWQgdmFsdWUgKGNhbGxlciBlcnJvcnMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUluaXRNb2RlKG9wdGlvbnM6IHsgaW5pdD86IHVua25vd24gfSk6IEluaXRNb2RlIHwgbnVsbCB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5pbml0ID09PSAnc3RyaW5nJykgeyAvLyAtLWluaXQgPG1vZGU+XG4gICAgY29uc3QgbSA9IG9wdGlvbnMuaW5pdC50b0xvd2VyQ2FzZSgpIGFzIEluaXRNb2RlO1xuICAgIHJldHVybiBJTklUX01PREVTLmluY2x1ZGVzKG0pID8gbSA6IG51bGw7XG4gIH1cbiAgcmV0dXJuICdhdXRvJzsgLy8gZGVmYXVsdFxufVxuXG4vKipcbiAqIFJlYWQgb25lIGxpbmUgb2YgdHJpbW1lZCBpbnB1dCBmcm9tIHRoZSB0ZXJtaW5hbCwgb3duaW5nIHRoZSByZWFkbGluZVxuICogbGlmZWN5Y2xlLiBVc2VkIGRpcmVjdGx5IGZvciB0aGUgZGVzdHJ1Y3RpdmUgdGVhcmRvd24gZ2F0ZSAoYSB5L04gaXMgdG9vIGVhc3lcbiAqIHRvIGZhdC1maW5nZXIsIHNvIHdlIHJlcXVpcmUgdGhlIG9wZXJhdG9yIHRvIFRZUEUgdGhlIHRhcmdldCBpZCBiYWNrKSwgYW5kIGFzXG4gKiB0aGUgYmFzaXMgZm9yIGBjb25maXJtYC4gRGVsaWJlcmF0ZWx5IGhhcyBubyBhdXRvLWFjY2VwdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYXNrKHF1ZXN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7IGlucHV0OiBwcm9jZXNzLnN0ZGluLCBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0IH0pO1xuICB0cnkge1xuICAgIHJldHVybiAoYXdhaXQgcmwucXVlc3Rpb24ocXVlc3Rpb24pKS50cmltKCk7XG4gIH0gZmluYWxseSB7XG4gICAgcmwuY2xvc2UoKTtcbiAgfVxufVxuXG4vKiogSW50ZXJhY3RpdmUgeS9OIGNvbmZpcm1hdGlvbjsgYXV0by10cnVlIHdoZW4gYGF1dG9ZZXNgICh0aGUgYC0teWVzYCBmbGFnKS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb25maXJtKHF1ZXN0aW9uOiBzdHJpbmcsIGF1dG9ZZXM6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgaWYgKGF1dG9ZZXMpIHJldHVybiB0cnVlO1xuICBjb25zdCBhbnN3ZXIgPSAoYXdhaXQgYXNrKGAke3F1ZXN0aW9ufSBbeS9OXSBgKSkudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIGFuc3dlciA9PT0gJ3knIHx8IGFuc3dlciA9PT0gJ3llcyc7XG59XG5cbi8qKlxuICogSG9zdC1wb3J0IHByZS1mbGlnaHQgKGxvY2FsL21pbmlrdWJlKS4gUG9ydHMgYXJlIERFUklWRUQgZnJvbSB0aGUgdGFyZ2V0J3MgY2xvbmVkXG4gKiBkZXBsb3kgc291cmNlIChjb21wb3NlIC8gc2V0dXAuc2gpIHNvIHRoZSBsaXN0IGNhbid0IGRyaWZ0IOKAlCBoZW5jZSB0aGlzIHJ1bnMgQUZURVJcbiAqIHRoZSBjbG9uZS4gQSB0YWtlbiBwb3J0IG1ha2VzIGEgY29udGFpbmVyL2ZvcndhcmQgZmFpbCB0byBiaW5kIG1pZC1kZXBsb3kgKGZvciB0aGVcbiAqIGdhdGV3YXksIGEgc2lsZW50IHVucmVhY2hhYmxlIGhhbmcpLiBQcmludHMgYSDinJMv4pyXIHN1bW1hcnkgYW5kIHJldHVybnMgZmFsc2UgT05MWVxuICogd2hlbiB0aGUgY2FsbGVyIG11c3QgQUJPUlQgKGEgZmF0YWwgbG9jYWwgY29uZmxpY3QpLiBtaW5pa3ViZSBwb3J0cyBhcmUgbWFuYWdlZFxuICogZm9yd2FyZHMgKHNldHVwLnNoIHBraWxscy9yZXN0YXJ0cyB0aGVtKSwgc28gYSBjb25mbGljdCB0aGVyZSB3YXJucyBidXQgcHJvY2VlZHMuXG4gKiBSZW1vdGUgdGFyZ2V0cyAoZWMyL2VrcykgYmluZCBub3RoaW5nIGxvY2FsbHkg4oaSIHJldHVybnMgdHJ1ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByZWZsaWdodFBvcnRzKHNwZWM6IFRhcmdldFNwZWMsIHRhcmdldDogVGFyZ2V0SWQsIGN3ZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHBvcnRzID0gZGlzY292ZXJIb3N0UG9ydHModGFyZ2V0LCBjd2QsIHNwZWMpO1xuICBpZiAocG9ydHMubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgcG9ydENoZWNrcyA9IGF3YWl0IGNoZWNrSG9zdFBvcnRzKHBvcnRzKTtcbiAgY29uc3QgdGFrZW4gPSBwb3J0Q2hlY2tzLmZpbHRlcigoYykgPT4gIWMuYXZhaWxhYmxlKTtcbiAgcHJpbnRTZWN0aW9uKCdQb3J0IGF2YWlsYWJpbGl0eScpO1xuICBmb3IgKGNvbnN0IGMgb2YgcG9ydENoZWNrcykgcHJpbnRJbmZvKGAke2MuYXZhaWxhYmxlID8gJ+KckycgOiAn4pyXJ30gJHtTdHJpbmcoYy5wb3J0KS5wYWRFbmQoNSl9IOKAlCAke2Muc2VydmljZX1gKTtcbiAgaWYgKHRha2VuLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gIC8vIGxvY2FsIFBVQkxJU0hFUyB0aGVzZSBwb3J0cyBhdCBgZG9ja2VyIGNvbXBvc2UgdXBgIHRpbWUsIHNvIGEgY29uZmxpY3QgaXMgZmF0YWwuXG4gIC8vIG1pbmlrdWJlJ3MgYXJlIGt1YmVjdGwgcG9ydC1mb3J3YXJkcyBzZXR1cC5zaCBwa2lsbHMgKyByZXN0YXJ0cyAoYW5kXG4gIC8vIGVuc3VyZU1pbmlrdWJlR2F0ZXdheSByZWNvdmVycyksIHNvIGEgc3RhbGUgZm9yd2FyZCBtdXN0IE5PVCBibG9jayBhIHJlLXJ1bi5cbiAgY29uc3QgZmF0YWwgPSB0YXJnZXQgPT09ICdkb2NrZXInO1xuICAvLyDigKZVTkxFU1MgdGhlIGxvY2FsIHN0YWNrIGlzIGFscmVhZHkgcnVubmluZzogdGhvc2UgcG9ydHMgYXJlIGhlbGQgYnkgWU9VUiBPV05cbiAgLy8gc3RhY2ssIGFuZCBgZG9ja2VyIGNvbXBvc2UgdXBgIG5vLW9wcyB0aGVtIOKAlCB0aGlzIGlzIGV4YWN0bHkgaG93IHlvdSByZS1ydW4gdG9cbiAgLy8gYWRkIGxvYWRzL29wdGlvbnMuIERvbid0IGJsb2NrICh0aGUgd291bGQtYmUgY29uZmxpY3QgaXMgYSBzZWxmLWNvbmZsaWN0KS5cbiAgaWYgKGZhdGFsICYmIHN0YWNrUnVubmluZyh0YXJnZXQsIGN3ZCwgc3BlYykpIHtcbiAgICBwcmludFdhcm5pbmcoYFxcbiR7dGFrZW4ubGVuZ3RofSBwb3J0KHMpIGFyZSBoZWxkIGJ5IHlvdXIgYWxyZWFkeS1ydW5uaW5nICR7c3BlYy5sYWJlbH0gc3RhY2sg4oCUIHJlLXJ1bm5pbmcganVzdCByZXN1bWVzIGl0IChubyByZWFsIGNvbmZsaWN0KSwgc28gY29udGludWluZy5gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBsZWFkID0gYCR7dGFrZW4ubGVuZ3RofSByZXF1aXJlZCBwb3J0KHMpIGFscmVhZHkgaW4gdXNlOiAke3Rha2VuLm1hcCgoYykgPT4gYy5wb3J0KS5qb2luKCcsICcpfWA7XG4gIChmYXRhbCA/IHByaW50RXJyb3IgOiBwcmludFdhcm5pbmcpKGZhdGFsXG4gICAgPyBgXFxuJHtsZWFkfSDigJQgdGhlIGRlcGxveSBjYW4ndCBiaW5kIHRoZW0gYW5kIHdvdWxkIGZhaWwgbWlkLXdheS4gRnJlZSB0aGVtIGFuZCByZS1ydW46YFxuICAgIDogYFxcbiR7bGVhZH0g4oCUIG9uIG1pbmlrdWJlIHRoZXNlIGFyZSB1c3VhbGx5IGEgcHJldmlvdXMgcnVuJ3MgcG9ydC1mb3J3YXJkcyAoc2V0dXAuc2ggcmVzdGFydHMgdGhlbSkuIEZyZWUgYW55IE5PTi1taW5pa3ViZSBob2xkZXIgaWYgdGhlIGdhdGV3YXkgc3RheXMgdW5yZWFjaGFibGU6YCk7XG4gIGZvciAoY29uc3QgYyBvZiB0YWtlbikgcHJpbnRJbmZvKGAgIOKAoiBwb3J0ICR7Yy5wb3J0fSAoJHtjLnNlcnZpY2V9KSDigJQgZmluZCB0aGUgaG9sZGVyOiAgbHNvZiAtaSA6JHtjLnBvcnR9YCk7XG4gIGlmICh0YWtlbi5zb21lKChjKSA9PiBjLnBvcnQgPT09IDUwMDApKSB7XG4gICAgcHJpbnRJbmZvKCcgIE5vdGU6IG9uIG1hY09TLCBwb3J0IDUwMDAgaXMgdXN1YWxseSBBaXJQbGF5IFJlY2VpdmVyIOKAlCBTeXN0ZW0gU2V0dGluZ3Mg4oaSIEdlbmVyYWwg4oaSIEFpckRyb3AgJiBIYW5kb2ZmIOKGkiBBaXJQbGF5IFJlY2VpdmVyIChvZmYpLicpO1xuICB9XG4gIHJldHVybiAhZmF0YWw7XG59XG5cbi8qKlxuICogVGVhcmRvd24gbW9kZSDigJQgdGhlIGRlc3Ryb3kgY291bnRlcnBhcnQgb2YgcHJvdmlzaW9uaW5nLCBnYXRlZCBIQVJERVIgdGhhbiBkZXBsb3k6XG4gKiBBV1MgdGFyZ2V0cyBhcmUgaXJyZXZlcnNpYmxlLCBzbyB0aGUgb3BlcmF0b3IgbXVzdCBUWVBFIHRoZSB0YXJnZXQgaWQgKC0tZm9yY2VcbiAqIGJ5cGFzc2VzIGZvciBDSTsgLS15ZXMgYWxvbmUgZG9lcyBOT1QpLiBUZXJtaW5hbDogb3ducyBpdHMgb3V0cHV0ICsgZXhpdENvZGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5UZWFyZG93bihcbiAgc3BlYzogVGFyZ2V0U3BlYyxcbiAgdGFyZ2V0OiBUYXJnZXRJZCxcbiAgY3dkOiBzdHJpbmcsXG4gIGV4ZWN1dGlvbklkOiBzdHJpbmcsXG4gIG9wdHM6IHsgc3RhY2tOYW1lPzogc3RyaW5nOyBjbHVzdGVyTmFtZT86IHN0cmluZzsgcmVnaW9uPzogc3RyaW5nOyBkb21haW4/OiBzdHJpbmc7IGhvc3RlZFpvbmVJZD86IHN0cmluZzsgZm9yY2U/OiBib29sZWFuOyB5ZXM/OiBib29sZWFuOyBqc29uPzogYm9vbGVhbiB9LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgY29tbWFuZDogZG93bkNvbW1hbmQsIGRlc3RydWN0aXZlIH0gPSB0ZWFyZG93bkNvbW1hbmQodGFyZ2V0LCB7XG4gICAgc3RhY2tOYW1lOiBvcHRzLnN0YWNrTmFtZSxcbiAgICBjbHVzdGVyTmFtZTogb3B0cy5jbHVzdGVyTmFtZSxcbiAgICByZWdpb246IG9wdHMucmVnaW9uLFxuICAgIC8vIGVrcyB0ZWFyZG93biAoYmluL3NodXRkb3duLnNoKSBhbHNvIGNsZWFucyB1cCB0aGUgQUNNIGNlcnQgKyBSb3V0ZSA1MyBhbGlhcyBmb3JcbiAgICAvLyB0aGUgZG9tYWluLCBzbyBmb3J3YXJkIHRoZW0gd2hlbiBwcmVzZW50LlxuICAgIGRvbWFpbjogb3B0cy5kb21haW4sXG4gICAgaG9zdGVkWm9uZUlkOiBvcHRzLmhvc3RlZFpvbmVJZCxcbiAgICAvLyBPdXIgdHlwZWQgZ2F0ZSBJUyB0aGUgY29uZmlybWF0aW9uIOKAlCBhc3N1bWVZZXMgZm9yd2FyZHMgYSBuYXRpdmUgYC0teWVzYCB0byBhbnlcbiAgICAvLyBzY3JpcHQtYmFzZWQgdGVhcmRvd24gKGVjMiBkZWxldGUtc3RhY2sgaGFzIG5vIHByb21wdDsgZWtzIHNodXRkb3duLnNoIHNraXBzIGl0cyBvd24pLlxuICAgIGFzc3VtZVllczogdHJ1ZSxcbiAgfSk7XG4gIGlmIChvcHRzLmpzb24pIHtcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IHN1Y2Nlc3M6IHRydWUsIGV4ZWN1dGlvbklkLCB0YXJnZXQsIHRlYXJkb3duOiB0cnVlLCBkZXN0cnVjdGl2ZSwgZGVzdHJveXM6IHNwZWMuZGVzdHJveXMsIGNvbW1hbmQ6IGRvd25Db21tYW5kIH0sIG51bGwsIDIpKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJpbnRTZWN0aW9uKGBUZWFyZG93biBwbGFuIOKAlCAke3NwZWMubGFiZWx9YCk7XG4gIHByaW50S2V5VmFsdWUoeyAnVGFyZ2V0JzogdGFyZ2V0LCAnRGVzdHJveXMnOiBzcGVjLmRlc3Ryb3lzLCAnU3RvcHMgY29zdCc6IHNwZWMuY29zdCB9KTtcbiAgcHJpbnRTZWN0aW9uKCdDb21tYW5kIHRvIHJ1bicpO1xuICBwcmludEluZm8oZG93bkNvbW1hbmQpO1xuICBpZiAoZGVzdHJ1Y3RpdmUgJiYgIW9wdHMuZm9yY2UpIHtcbiAgICAvLyBCaW5kIHRoZSBjb25maXJtYXRpb24gdG8gdGhlIHJlc291cmNlIGFjdHVhbGx5IGRlc3Ryb3llZDogYSBjdXN0b20gbmFtZSAoZWMyXG4gICAgLy8gLS1zdGFjay1uYW1lIC8gZWtzIC0tY2x1c3Rlci1uYW1lKSBtdXN0IGJlIHR5cGVkIHZlcmJhdGltIHNvIGEgd3JvbmcgbmFtZSBjYW4ndCBiZVxuICAgIC8vIGNvbmZpcm1lZCBieSBoYWJpdDsgb3RoZXJ3aXNlIHRoZSB0YXJnZXQgaWQuXG4gICAgY29uc3QgcmVzb3VyY2VOYW1lID0gdGFyZ2V0ID09PSAnZWtzJyA/IG9wdHMuY2x1c3Rlck5hbWUgOiBvcHRzLnN0YWNrTmFtZTtcbiAgICBjb25zdCBjb25maXJtVG9rZW4gPSByZXNvdXJjZU5hbWUgPz8gdGFyZ2V0O1xuICAgIGNvbnN0IG5vdW4gPSB0YXJnZXQgPT09ICdla3MnID8gKG9wdHMuY2x1c3Rlck5hbWUgPyAnY2x1c3RlciBuYW1lJyA6ICd0YXJnZXQgaWQnKSA6IChvcHRzLnN0YWNrTmFtZSA/ICdzdGFjayBuYW1lJyA6ICd0YXJnZXQgaWQnKTtcbiAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGFzayhgXFxuVGhpcyBpcyBJUlJFVkVSU0lCTEUuIFR5cGUgXCIke2NvbmZpcm1Ub2tlbn1cIiB0byBjb25maXJtIHRlYXJkb3duOiBgKTtcbiAgICBpZiAodG9rZW4gIT09IGNvbmZpcm1Ub2tlbikge1xuICAgICAgcHJpbnRXYXJuaW5nKGBUaGF0IGRpZG4ndCBtYXRjaCwgc28gbm90aGluZyB3YXMgZGVzdHJveWVkIOKAlCB5b3UgaGF2ZSB0byB0eXBlIHRoZSBleGFjdCAke25vdW59IHRvIGNvbmZpcm0uYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9IGVsc2UgaWYgKCFkZXN0cnVjdGl2ZSAmJiAhb3B0cy5mb3JjZSAmJiAhKGF3YWl0IGNvbmZpcm0oJ1xcblByb2NlZWQgd2l0aCB0ZWFyZG93biAoc3RvcHMgdGhlIHN0YWNrOyBvbi1kaXNrIGRhdGEgcGVyc2lzdHMpPycsIG9wdHMueWVzID8/IGZhbHNlKSkpIHtcbiAgICBwcmludFdhcm5pbmcoJ05vIHByb2JsZW0g4oCUIG5vdGhpbmcgd2FzIGNoYW5nZWQuJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHByaW50U2VjdGlvbignVGVhcmluZyBkb3duJyk7XG4gIGNvbnN0IHsgY29kZTogZG93bkNvZGUgfSA9IGF3YWl0IHJ1blNjcmlwdChkb3duQ29tbWFuZCwgY3dkLCB7IGNhcHR1cmU6IGZhbHNlIH0pO1xuICBpZiAoZG93bkNvZGUgIT09IDApIHtcbiAgICBwcmludEVycm9yKGBcXG5UZWFyZG93biBmYWlsZWQgKGV4aXQgJHtkb3duQ29kZX0pLiBJbnNwZWN0IHRoZSBzdGFjay9jb250YWluZXJzIGFuZCByZXRyeS5gKTtcbiAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJpbnRTdWNjZXNzKCdUZWFyZG93biBjb21wbGV0ZS4nKTtcbn1cblxuLyoqXG4gKiBSdW4gdGhlIGRlcGxveSBjb21tYW5kIChyZWFsLCBzZWNyZXRzIHVubWFza2VkLCBzdHJlYW1lZCArIGNhcHR1cmVkKSB3aXRoIGFcbiAqIGJvdW5kZWQgYXV0by1maXggKyByZXRyeSBsb29wIOKAlCB0aGUgZGVwbG95IHNjcmlwdHMgYXJlIGlkZW1wb3RlbnQsIHNvIGEgZml4ZWRcbiAqIHJlLXJ1biByZXN1bWVzIHJhdGhlciB0aGFuIHN0YXJ0aW5nIG92ZXIuIFJldHVybnMgd2hldGhlciBpdCBzdWNjZWVkZWQgcGx1cyB0aGVcbiAqIChwb3NzaWJseSBmaXgtYWRqdXN0ZWQpIHBhcmFtcywgd2hpY2ggdGhlIGNhbGxlciBuZWVkcyBmb3IgU0VTIGd1aWRhbmNlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuRGVwbG95V2l0aFJldHJ5KFxuICBzcGVjOiBUYXJnZXRTcGVjLFxuICB1cmw6IHN0cmluZyB8IG51bGwsXG4gIGN3ZDogc3RyaW5nLFxuICBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBhaU9wdHM6IHsgcHJvdmlkZXI/OiBzdHJpbmc7IG1vZGVsPzogc3RyaW5nIH0sXG4gIG9wdHM6IHsgcmV0cmllcz86IHN0cmluZzsgeWVzPzogYm9vbGVhbiB9LFxuKTogUHJvbWlzZTx7IHN1Y2NlZWRlZDogYm9vbGVhbjsgcnVuUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PiB7XG4gIC8vIEJvdW5kIHJldHJpZXMgc28gYW4gdW5hdHRlbmRlZCBgLS15ZXNgIHJ1biBjYW4ndCBhdXRvLXJlLXJ1biBhIDE14oCTMzAgbWluXG4gIC8vIGRlcGxveSBhbiB1bmJvdW5kZWQgbnVtYmVyIG9mIHRpbWVzIG9uIGEgcGVyc2lzdGVudGx5LXJldHJ5YWJsZSBzaWduYXR1cmUuXG4gIGNvbnN0IE1BWF9SRVRSSUVTID0gNTtcbiAgY29uc3QgcmVxdWVzdGVkUmV0cmllcyA9IE1hdGgubWF4KDAsIHBhcnNlSW50KG9wdHMucmV0cmllcyA/PyAnJywgMTApIHx8IDApO1xuICBjb25zdCBtYXhBdHRlbXB0cyA9IDEgKyBNYXRoLm1pbihyZXF1ZXN0ZWRSZXRyaWVzLCBNQVhfUkVUUklFUyk7XG4gIGxldCBydW5QYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gcGFyYW1zO1xuICBsZXQgc3VjY2VlZGVkID0gZmFsc2U7XG4gIGZvciAobGV0IGF0dGVtcHQgPSAxOyBhdHRlbXB0IDw9IG1heEF0dGVtcHRzOyBhdHRlbXB0KyspIHtcbiAgICBjb25zdCByZWFsQ29tbWFuZCA9IGFzc2VtYmxlQ29tbWFuZChzcGVjLCBydW5QYXJhbXMsIHsgbWFzazogZmFsc2UgfSkuY29tbWFuZDtcbiAgICBwcmludFNlY3Rpb24oYXR0ZW1wdCA9PT0gMSA/ICdEZXBsb3lpbmcnIDogYERlcGxveWluZyDigJQgcmV0cnkgJHthdHRlbXB0IC0gMX1gKTtcbiAgICBpZiAoYXR0ZW1wdCA9PT0gMSkge1xuICAgICAgcHJpbnRJbmZvKGBEZXBsb3lpbmcgJHtzcGVjLmxhYmVsfSDihpIgJHt1cmx9YCk7XG4gICAgICBwcmludEluZm8oc3BlYy5kZXBsb3lzKTtcbiAgICAgIHByaW50SW5mbygnU3RyZWFtaW5nIHRoZSBkZXBsb3kgYmVsb3cg4oCUIGZpcnN0IHJ1biBpcyB0aGUgc2xvdyBvbmUgKGltYWdlIHB1bGxzICsgY2VydCBnZW5lcmF0aW9uKS4nKTtcbiAgICB9XG4gICAgY29uc3QgeyBjb2RlLCB0YWlsIH0gPSBhd2FpdCBydW5TY3JpcHQocmVhbENvbW1hbmQsIGN3ZCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgIGlmIChjb2RlID09PSAwKSB7IHN1Y2NlZWRlZCA9IHRydWU7IGJyZWFrOyB9XG5cbiAgICBwcmludEVycm9yKGBcXG5EZXBsb3kgZmFpbGVkIChleGl0ICR7Y29kZX0pLmApO1xuICAgIGNvbnN0IGlzc3VlcyA9IG1hdGNoSXNzdWVzKHRhaWwpO1xuICAgIGlmIChpc3N1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgcHJpbnRTZWN0aW9uKCdMaWtlbHkgY2F1c2UnKTtcbiAgICAgIGZvciAoY29uc3QgaSBvZiBpc3N1ZXMpIHByaW50SW5mbyhg4oCiICR7aS5jYXVzZX1cXG4gIOKGkiAke2kuc3VnZ2VzdGlvbn1gKTtcbiAgICB9XG4gICAgaWYgKGlzQWlDb25maWd1cmVkKGFpT3B0cykpIHtcbiAgICAgIGNvbnN0IGRpYWdub3NpcyA9IGF3YWl0IGRpYWdub3NlRmFpbHVyZShyZWRhY3RTZWNyZXRzKHRhaWwsIHNwZWMsIHJ1blBhcmFtcyksIGFpT3B0cyk7XG4gICAgICBpZiAoZGlhZ25vc2lzKSB7IHByaW50U2VjdGlvbignRGlhZ25vc2lzJyk7IHByaW50SW5mbyhkaWFnbm9zaXMpOyB9XG4gICAgfVxuICAgIGlmIChhdHRlbXB0ID49IG1heEF0dGVtcHRzKSBicmVhaztcblxuICAgIC8vIEF1dG8tZml4OiBhIHJldHJ5YWJsZSBpc3N1ZSB3aXRoIGEgcGFyYW0gd2UgaGF2ZW4ndCBhbHJlYWR5IGFwcGxpZWQuXG4gICAgY29uc3QgZml4ID0gaXNzdWVzLmZpbmQoKGkpID0+IGkucmV0cnlhYmxlICYmIGkucGFyYW1GaXggJiYgcnVuUGFyYW1zW2kucGFyYW1GaXgua2V5XSAhPT0gaS5wYXJhbUZpeC52YWx1ZSk7XG4gICAgaWYgKGZpeD8ucGFyYW1GaXggJiYgYXdhaXQgY29uZmlybShgXFxuQXBwbHkgZml4IGFuZCByZXRyeSDigJQgJHtmaXguc3VnZ2VzdGlvbn1gLCBvcHRzLnllcyA/PyBmYWxzZSkpIHtcbiAgICAgIHJ1blBhcmFtcyA9IHsgLi4ucnVuUGFyYW1zLCBbZml4LnBhcmFtRml4LmtleV06IGZpeC5wYXJhbUZpeC52YWx1ZSB9O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIC8vIFJldHJ5YWJsZSBidXQgbm8gcGFyYW0gY2hhbmdlIChlLmcuIEFDTSBETlMgcHJvcGFnYXRpb24pIOKAlCBvZmZlciBhIHBsYWluIHJlLXJ1bi5cbiAgICBpZiAoIWZpeCAmJiBpc3N1ZXMuc29tZSgoaSkgPT4gaS5yZXRyeWFibGUpICYmIGF3YWl0IGNvbmZpcm0oJ1xcblJldHJ5IHRoZSBkZXBsb3kgKHNhZmUgdG8gcmUtcnVuIOKAlCBpdCByZXN1bWVzIHdoZXJlIGl0IGxlZnQgb2ZmKT8nLCBvcHRzLnllcyA/PyBmYWxzZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBicmVhaztcbiAgfVxuICByZXR1cm4geyBzdWNjZWVkZWQsIHJ1blBhcmFtcyB9O1xufVxuXG4vKipcbiAqIEV4ZWN1dGUgdGhlIHBvc3QtaW5zdGFsbCBzdGVwcyAocmVnaXN0ZXIg4oaSIGxvYWRzIOKGkiBzbW9rZSDihpIgZXZlbnRzIOKGkiBjdXN0b20pLiBPblxuICogRUMyL0VLUyB0aGUgcmVnaXN0ZXIgc3RlcCArIHRoZSBldmVudHMgYnVuZGxlIChzdG9yZS10b2tlbiDihpIgc2V0dXAtZXZlbnRzKSBhcmVcbiAqIFNVUkZBQ0VEIGFzIG9yZGVyZWQgbWFudWFsIG5leHQtc3RlcHMgaW5zdGVhZCBvZiBhdXRvLXJ1bjogZWMyIHJlZ2lzdGVyIG11c3QgcnVuXG4gKiBPTiB0aGUgYm94ICh0aGUgbWluaWt1YmUgdXNlciBvd25zIHRoZSBjbHVzdGVyKSwgYW5kIHRoZSBldmVudHMgYnVuZGxlIG5lZWRzIGFcbiAqIHJlZ2lzdGVyZWQgcGxhdGZvcm0gKyBBV1MgY3JlZHMuIChla3MgcmVnaXN0ZXIgaXRzZWxmIHBvcnQtZm9yd2FyZHMsIHNvIGl0IHJ1bnNcbiAqIGZyb20gYW55d2hlcmUgd2l0aCBrdWJlY3RsIGFjY2Vzcy4pIFNldHMgZXhpdENvZGUgb24gYSBzdGVwIGZhaWx1cmUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Qb3N0U3RlcHMoXG4gIHBvc3RTdGVwczogUG9zdFN0ZXBbXSxcbiAgc2tpcHBlZFN0ZXBzOiBTa2lwcGVkU3RlcFtdLFxuICB0YXJnZXQ6IFRhcmdldElkLFxuICBjd2Q6IHN0cmluZyxcbiAgYWRtaW5FbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIG9wdHM6IHsgeWVzPzogYm9vbGVhbjsgYXV0b1J1bj86IGJvb2xlYW47IGF1dG9Jbml0PzogYm9vbGVhbiB9LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIEFXUyB0YXJnZXRzIHdpdGggYC0taW5pdCBhdXRvYDogdGhlIGRlcGxveSBzZWxmLXJ1bnMgaW5pdC1wbGF0Zm9ybSwgc28gdGhlcmUncyBub1xuICAvLyByZWdpc3Rlci9sb2FkcyBzdGVwIHRvIHN1cmZhY2UgaGVyZSDigJQgY29uZmlybSBpdCBhbmQgcG9pbnQgYXQgd2hlcmUgdG8gd2F0Y2guXG4gIGlmIChvcHRzLmF1dG9Jbml0ICYmIHRhcmdldCA9PT0gJ2VjMicpIHtcbiAgICBwcmludEluZm8oJ1xcbuKckyBJbml0IG1vZGU6IGF1dG8g4oCUIHRoZSBpbnN0YW5jZSBydW5zIGluaXQtcGxhdGZvcm0gaXRzZWxmIG9uIGZpcnN0IGJvb3QnKTtcbiAgICBwcmludEluZm8oJyAgKHJlZ2lzdGVyIGFkbWluICsgYnVpbGQgYm9vdHN0cmFwIGltYWdlICsgbG9hZCBwbHVnaW5zL2NvbXBsaWFuY2Uvc2FtcGxlcykuJyk7XG4gICAgcHJpbnRJbmZvKCcgIEl0IHRha2VzIH4zMC02MCBtaW47IHdhdGNoIHByb2dyZXNzOicpO1xuICAgIHByaW50SW5mbygnICAgIGF3cyBzc20gc3RhcnQtc2Vzc2lvbiAtLXRhcmdldCA8SW5zdGFuY2VJZD4gICAjIEluc3RhbmNlSWQgc3RhY2sgb3V0cHV0Jyk7XG4gICAgcHJpbnRJbmZvKCcgICAgc3VkbyB0YWlsIC1mIC92YXIvbG9nL3VzZXItZGF0YS5sb2cnKTtcbiAgfSBlbHNlIGlmIChvcHRzLmF1dG9Jbml0ICYmIHRhcmdldCA9PT0gJ2VrcycpIHtcbiAgICBwcmludEluZm8oJ1xcbuKckyBJbml0IG1vZGU6IGF1dG8g4oCUIHNldHVwLnNoIHJ1bnMgaW5pdC1wbGF0Zm9ybSBpbiBpdHMgZmluYWwgcGhhc2UnKTtcbiAgICBwcmludEluZm8oJyAgKHJlZ2lzdGVyIGFkbWluICsgYnVpbGQgYm9vdHN0cmFwIGltYWdlICsgbG9hZCBwbHVnaW5zL2NvbXBsaWFuY2Uvc2FtcGxlcywnKTtcbiAgICBwcmludEluZm8oJyAgb3ZlciBhIGt1YmVjdGwgcG9ydC1mb3J3YXJkKS4gUGFzcyAtLWluaXQgbWFudWFsIHRvIHJ1biBpdCB5b3Vyc2VsZiBpbnN0ZWFkLicpO1xuICB9XG4gIGlmIChwb3N0U3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gIGZvciAoY29uc3QgcyBvZiBza2lwcGVkU3RlcHMpIHByaW50V2FybmluZyhgU2tpcHBlZCBwb3N0LXN0ZXAgJHtzLmlkfTogJHtzLnJlYXNvbn1gKTtcbiAgY29uc3QgaXNSZW1vdGUgPSAoaWQ6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgICAodGFyZ2V0ID09PSAnZWMyJyB8fCB0YXJnZXQgPT09ICdla3MnKSAmJiAoaWQgPT09ICdyZWdpc3RlcicgfHwgaWQuc3RhcnRzV2l0aCgnc3RvcmUtdG9rZW4nKSB8fCBpZCA9PT0gJ2V2ZW50cycpO1xuICBjb25zdCBydW5uYWJsZSA9IHBvc3RTdGVwcy5maWx0ZXIoKHMpID0+ICFpc1JlbW90ZShzLmlkKSk7XG4gIGNvbnN0IHJlbW90ZSA9IHBvc3RTdGVwcy5maWx0ZXIoKHMpID0+IGlzUmVtb3RlKHMuaWQpKTtcbiAgaWYgKHJlbW90ZS5sZW5ndGggPiAwKSB7XG4gICAgaWYgKHRhcmdldCA9PT0gJ2VjMicpIHtcbiAgICAgIC8vIEVDMiBydW5zIHRoZSBwbGF0Zm9ybSBhcyBhIGRlZGljYXRlZCBgbWluaWt1YmVgIHVzZXIgaW5zaWRlIHRoZSBpbnN0YW5jZTogdGhlXG4gICAgICAvLyBjbHVzdGVyLCBpdHMga3ViZWNvbmZpZywgYW5kIHRoZSBqd3Qtc2VjcmV0IGFsbCBiZWxvbmcgdG8gdGhhdCB1c2VyLCBhbmQgdGhlXG4gICAgICAvLyByZWdpc3RlciBzdGVwIGJ1aWxkcytwdXNoZXMgaW1hZ2VzIGFnYWluc3QgaXQuIFNvIGl0IE1VU1QgcnVuIG9uIHRoZSBib3ggYXNcbiAgICAgIC8vIGBtaW5pa3ViZWAg4oCUIHByaW50IHRoZSBleGFjdCBsYW5kaW5nIHNlcXVlbmNlIHJhdGhlciB0aGFuIGEgYmFyZSBjb21tYW5kLlxuICAgICAgcHJpbnRJbmZvKCdcXG5OZXh0IOKAlCBmaW5pc2ggc2V0dXAgT04gdGhlIGluc3RhbmNlIChpdCBidWlsZHMgaW1hZ2VzICsgcmVhZHMgdGhlIGNsdXN0ZXIsIHNvIGl0Jyk7XG4gICAgICBwcmludEluZm8oJ2Nhbm5vdCBydW4gZnJvbSBoZXJlKS4gTGFuZCBvbiB0aGUgYm94LCBiZWNvbWUgdGhlIGBtaW5pa3ViZWAgdXNlciwgdGhlbiBydW4gaXQ6Jyk7XG4gICAgICBwcmludEluZm8oJyAgYXdzIHNzbSBzdGFydC1zZXNzaW9uIC0tdGFyZ2V0IDxJbnN0YW5jZUlkPiAgICAgICMgSW5zdGFuY2VJZCBzdGFjayBvdXRwdXQnKTtcbiAgICAgIHByaW50SW5mbygnICBzdWRvIC1pdSBtaW5pa3ViZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvd25zIHRoZSBjbHVzdGVyICsgZG9ja2VyJyk7XG4gICAgICBwcmludEluZm8oJyAgY2QgL29wdC9waXBlbGluZS9waXBlbGluZS1idWlsZGVyICAgICAgICAgICAgICAgICMgdGhlIGRlcGxveWVkIGNoZWNrb3V0Jyk7XG4gICAgICBmb3IgKGNvbnN0IHMgb2YgcmVtb3RlKSBwcmludEluZm8oYCAgJHtzLmNvbW1hbmR9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGVrczogaW5pdC1wbGF0Zm9ybSBwb3J0LWZvcndhcmRzIHRvIHN2Yy9uZ2lueCwgc28gcmVnaXN0ZXIgcnVucyBmcm9tIGFueXdoZXJlIHdpdGhcbiAgICAgIC8vIGt1YmVjdGwgYWNjZXNzIOKAlCBubyBpbi1WUEMgcmVxdWlyZW1lbnQgYW5kIG5vIHdhaXRpbmcgb24gdGhlIEFMQi9ETlMuIChBIC0td2l0aC1ldmVudHNcbiAgICAgIC8vIGJ1bmRsZSwgaWYgcHJlc2VudCwgYWRkaXRpb25hbGx5IG5lZWRzIEFXUyBjcmVkcyArIGEgcmVnaXN0ZXJlZCBwbGF0Zm9ybS4pXG4gICAgICBwcmludEluZm8oJ1xcbk5leHQg4oCUIHJ1biB3aXRoIGt1YmVjdGwgYWNjZXNzIHRvIHRoZSBjbHVzdGVyIChpbiB0aGlzIG9yZGVyKTonKTtcbiAgICAgIGZvciAoY29uc3QgcyBvZiByZW1vdGUpIHByaW50SW5mbyhgICDigKIgJHtzLmxhYmVsfSDigJQgJHtzLmNvbW1hbmR9YCk7XG4gICAgfVxuICB9XG4gIGlmIChydW5uYWJsZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgLy8gV2hlbiB0aGUgbG9hZHMgd2VyZSBwaWNrZWQgaW50ZXJhY3RpdmVseSAoYXV0b1J1biksIHRoZSB1c2VyIGFscmVhZHkgb3B0ZWQgaW4g4oCUIHNraXBcbiAgLy8gdGhlIHJlZHVuZGFudCBzZWNvbmQgY29uZmlybS4gRmxhZy1kcml2ZW4gLyBub24taW50ZXJhY3RpdmUgcnVucyBzdGlsbCBnYXRlIGhlcmUuXG4gIGlmIChvcHRzLmF1dG9SdW4gfHwgYXdhaXQgY29uZmlybShgXFxuUnVuICR7cnVubmFibGUubGVuZ3RofSBwb3N0LWluc3RhbGwgc3RlcChzKSBub3c/YCwgb3B0cy55ZXMgPz8gZmFsc2UpKSB7XG4gICAgaWYgKG9wdHMuYXV0b1J1bikgcHJpbnRJbmZvKGBcXG5SdW5uaW5nIHRoZSAke3J1bm5hYmxlLmxlbmd0aH0gcG9zdC1pbnN0YWxsIHN0ZXAocykgeW91IHNlbGVjdGVk4oCmYCk7XG4gICAgZm9yIChjb25zdCBzIG9mIHJ1bm5hYmxlKSB7XG4gICAgICBwcmludFNlY3Rpb24oYFBvc3Qtc3RlcDogJHtzLmxhYmVsfWApO1xuICAgICAgLy8gcmVnaXN0ZXIgKGxvY2FsL21pbmlrdWJlKSBsb2dzIGludG8gdGhlIHBsYXRmb3JtLCBzbyBpdCBuZWVkcyB0aGUgYWRtaW4gY3JlZHNcbiAgICAgIC8vIChQTEFURk9STV9JREVOVElGSUVSIC8gUExBVEZPUk1fUEFTU1dPUkQpIG9uIHRvcCBvZiBpdHMgc3RlcCBlbnYuXG4gICAgICBjb25zdCBuZWVkc0NyZWRzID0gcy5pZCA9PT0gJ3JlZ2lzdGVyJyB8fCBzLmlkLnN0YXJ0c1dpdGgoJ3N0b3JlLXRva2VuJyk7XG4gICAgICBjb25zdCBlbnYgPSBuZWVkc0NyZWRzID8geyAuLi5zLmVudiwgLi4uYWRtaW5FbnYgfSA6IHMuZW52O1xuICAgICAgLy8gTG9hZHMvc21va2UgYXJlIG5vaXN5ICsgbm9uLWludGVyYWN0aXZlIOKGkiBydW4gUVVJRVQgKGNhcHR1cmUsIHNob3cgb25seSBvblxuICAgICAgLy8gZmFpbHVyZSkuIEV4Y2VwdGlvbjogYSByZWdpc3RlciB3aXRoIG5vIGFkbWluIGNyZWRzIHByb21wdHMsIHNvIGl0IG11c3Qgc3RyZWFtLlxuICAgICAgY29uc3QgaW50ZXJhY3RpdmVSZWdpc3RlciA9IHMuaWQgPT09ICdyZWdpc3RlcicgJiYgIWFkbWluRW52LlBMQVRGT1JNX0lERU5USUZJRVI7XG4gICAgICBjb25zdCBxdWlldCA9ICFpbnRlcmFjdGl2ZVJlZ2lzdGVyO1xuICAgICAgaWYgKHF1aWV0KSBwcmludEluZm8oYCR7cy5jb21tYW5kfVxcbiAg4oCmcnVubmluZyAob3V0cHV0IHNob3duIG9ubHkgaWYgaXQgZmFpbHMpYCk7XG4gICAgICBlbHNlIHByaW50SW5mbyhzLmNvbW1hbmQpO1xuICAgICAgY29uc3QgeyBjb2RlLCB0YWlsIH0gPSBhd2FpdCBydW5TY3JpcHQocy5jb21tYW5kLCBjd2QsIHsgcXVpZXQsIGNhcHR1cmU6IGZhbHNlLCBlbnYgfSk7XG4gICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICBpZiAocXVpZXQgJiYgdGFpbCkgeyBwcmludEVycm9yKCdcXG4tLS0gbGFzdCBvdXRwdXQgLS0tJyk7IHByaW50SW5mbyh0YWlsKTsgfVxuICAgICAgICBwcmludEVycm9yKGBcXG5Qb3N0LXN0ZXAgJyR7cy5pZH0nIGZhaWxlZCAoZXhpdCAke2NvZGV9KS4gVGhlIHBsYXRmb3JtIGlzIGRlcGxveWVkOyBmaXggYW5kIHJlLXJ1biB0aGUgc3RlcCBtYW51YWxseS5gKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcHJpbnRTdWNjZXNzKGAke3MuaWR9IOKck2ApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwcmludEluZm8oJ1xcblNraXBwZWQgcG9zdC1pbnN0YWxsIHN0ZXBzLiBSdW4gdGhlIGNvbW1hbmRzIGFib3ZlIG1hbnVhbGx5IHdoZW4gcmVhZHkuJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBTcGFyc2UtY2xvbmUgdGhlIHBsYXRmb3JtIHJlcG8gKHdoZW4gLS1yZXBvLCBvciBhY2NlcHRlZCB2aWEgdGhlIGludGVyYWN0aXZlXG4gKiBvZmZlciksIHJlcG9pbnQgY3dkIGludG8gaXQsIGFuZCB2ZXJpZnkgdGhlIGRlcGxveSBlbnRyeXBvaW50IGV4aXN0cy4gT3ducyB0aGVcbiAqIGN3ZC9ib290c3RyYXBwZWQgc3RhdGUuIFNldHMgZXhpdENvZGUgb24gYSBoYXJkIGZhaWx1cmUgKGNsb25lIGVycm9yIC8gbWlzc2luZ1xuICogZW50cnlwb2ludCk7IGEgcGxhaW4gZGVjbGluZSBsZWF2ZXMgZXhpdENvZGVcbiAqIHVudG91Y2hlZC4gUmV0dXJucyBvazpmYWxzZSB3aGVuIHRoZSBjYWxsZXIgbXVzdCBhYm9ydC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJvb3RzdHJhcEFuZExvY2F0ZShcbiAgc3BlYzogVGFyZ2V0U3BlYyxcbiAgYm9vdHN0cmFwOiBCb290c3RyYXBTcGVjLFxuICBib290c3RyYXBDbWQ6IHN0cmluZyB8IG51bGwsXG4gIHNwYXJzZVBhdGhzOiByZWFkb25seSBzdHJpbmdbXSxcbiAgc3RhcnRDd2Q6IHN0cmluZyxcbiAgb3B0czogeyB5ZXM/OiBib29sZWFuIH0sXG4pOiBQcm9taXNlPHsgY3dkOiBzdHJpbmc7IGJvb3RzdHJhcHBlZDogYm9vbGVhbjsgb2s6IGJvb2xlYW4gfT4ge1xuICBsZXQgY3dkID0gc3RhcnRDd2Q7XG4gIGxldCBib290c3RyYXBwZWQgPSBmYWxzZTtcbiAgLy8gU2hhcmVkIGJ5IGAtLXJlcG9gIGFuZCB0aGUgaW50ZXJhY3RpdmUgb2ZmZXIuIFJlcG9pbnRzIGN3ZCArIHNldHMgYm9vdHN0cmFwcGVkO1xuICAvLyBgYm9vdHN0cmFwcGVkYCByZWNvcmRzIHdoZXRoZXIgd2UgY3JlYXRlZCB0aGUgY2xvbmUgKHZzLiBhbiBleGlzdGluZyBjaGVja291dCkg4oCUXG4gIC8vIG9ubHkgdGhlbiBjYW4gdGhlIGNhbGxlciBhZGRpdGl2ZWx5IHNwYXJzZS1mZXRjaCBsb2FkIGZvbGRlcnMuXG4gIGNvbnN0IGJvb3RzdHJhcENsb25lID0gYXN5bmMgKCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIGNvbnN0IGNtZCA9IGJvb3RzdHJhcENvbW1hbmQoYm9vdHN0cmFwKTtcbiAgICBwcmludFNlY3Rpb24oJ0Jvb3RzdHJhcCcpO1xuICAgIHByaW50SW5mbyhjbWQpO1xuICAgIGNvbnN0IHsgY29kZSB9ID0gYXdhaXQgcnVuU2NyaXB0KGNtZCwgY3dkLCB7IGNhcHR1cmU6IGZhbHNlIH0pO1xuICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICBwcmludEVycm9yKGBcXG5UaGUgY2xvbmUgZGlkbid0IGZpbmlzaCAoZXhpdCAke2NvZGV9KS4gRG91YmxlLWNoZWNrIHRoZSByZXBvIFVSTCAvIHJlZiAob3IgeW91ciBuZXR3b3JrKSBhbmQgZ2l2ZSBpdCBhbm90aGVyIGdvLmApO1xuICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGN3ZCA9IHBhdGgucmVzb2x2ZShjd2QsIGJvb3RzdHJhcC53b3JrZGlyKTtcbiAgICBib290c3RyYXBwZWQgPSB0cnVlO1xuICAgIHByaW50U3VjY2VzcyhgUmVwbyBpcyByZWFkeSDigJQgY29udGludWluZyBmcm9tICR7Y3dkfWApO1xuICAgIGNvbnN0IGFic2VudCA9IHNwYXJzZVBhdGhzLmZpbHRlcigocCkgPT4gIWV4aXN0c1N5bmMocGF0aC5qb2luKGN3ZCwgcCkpKTtcbiAgICBpZiAoYWJzZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgIHByaW50RXJyb3IoYFxcblRoZSBzcGFyc2UgY2xvbmUgaXMgbWlzc2luZyAke2Fic2VudC5qb2luKCcsICcpfSDigJQgdGhhdCByZWYgbWF5IG5vdCBoYXZlIHRob3NlIGZvbGRlcnMuIFRyeSBhIGRpZmZlcmVudCAtLXJlZi5gKTtcbiAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvLyBgLS1yZXBvYDogY2xvbmUgdXAgZnJvbnQgKG11c3QgcHJlY2VkZSB0aGUgZW50cnlwb2ludCBjaGVjaykuXG4gIGlmIChib290c3RyYXBDbWQpIHtcbiAgICBwcmludEluZm8oYFxcbkJvb3RzdHJhcCDihpIgY2xvbmUgJHtib290c3RyYXAucmVwb30gQCAke2Jvb3RzdHJhcC5yZWZ9IGludG8gJHtib290c3RyYXAud29ya2Rpcn0gKHNwYXJzZSkuYCk7XG4gICAgaWYgKCEoYXdhaXQgY29uZmlybSgnR28gYWhlYWQgd2l0aCB0aGUgY2xvbmU/Jywgb3B0cy55ZXMgPz8gZmFsc2UpKSkge1xuICAgICAgcHJpbnRXYXJuaW5nKCdObyBwcm9ibGVtIOKAlCBub3RoaW5nIHdhcyBjaGFuZ2VkLiBSZS1ydW4gd2hlbmV2ZXIgeW91XFwncmUgcmVhZHkuJyk7XG4gICAgICByZXR1cm4geyBjd2QsIGJvb3RzdHJhcHBlZCwgb2s6IGZhbHNlIH07XG4gICAgfVxuICAgIGlmICghKGF3YWl0IGJvb3RzdHJhcENsb25lKCkpKSByZXR1cm4geyBjd2QsIGJvb3RzdHJhcHBlZCwgb2s6IGZhbHNlIH07XG4gIH1cblxuICAvLyBUaGUgZGVwbG95IGVudHJ5cG9pbnQgbXVzdCBleGlzdCByZWxhdGl2ZSB0byBjd2QuIElmIGl0IGRvZXNuJ3QgYW5kIHdlIGhhdmVuJ3RcbiAgLy8gYm9vdHN0cmFwcGVkLCBncmFjZWZ1bGx5IE9GRkVSIHRvIGNsb25lIChpbnRlcmFjdGl2ZSBvbmx5KSBzbyBhIGZyZXNoIG1hY2hpbmUgY2FuXG4gIC8vIHByb2NlZWQgd2l0aG91dCByZS1ydW5uaW5nIHdpdGggLS1yZXBvLlxuICBpZiAoIWVudHJ5cG9pbnRFeGlzdHMoc3BlYywgY3dkKSkge1xuICAgIGNvbnN0IGludGVyYWN0aXZlID0gQm9vbGVhbihwcm9jZXNzLnN0ZGluLmlzVFRZKSAmJiAhb3B0cy55ZXM7XG4gICAgaWYgKCFib290c3RyYXBDbWQgJiYgaW50ZXJhY3RpdmUgJiYgZ2l0QXZhaWxhYmxlKCkpIHtcbiAgICAgIHByaW50SW5mbyhgXFxuTG9va3MgbGlrZSB5b3UncmUgbm90IGluc2lkZSBhIHBpcGVsaW5lLWJ1aWxkZXIgY2hlY2tvdXQsIHNvIHRoZSAke3NwZWMubGFiZWx9IGRlcGxveSBzY3JpcHRzIGFyZW4ndCBoZXJlIHlldC5gKTtcbiAgICAgIGlmIChhd2FpdCBjb25maXJtKGBXYW50IG1lIHRvIHNwYXJzZS1jbG9uZSB0aGVtIGludG8gJHtib290c3RyYXAud29ya2Rpcn0gYW5kIGtlZXAgZ29pbmc/YCwgZmFsc2UpKSB7XG4gICAgICAgIGlmICghKGF3YWl0IGJvb3RzdHJhcENsb25lKCkpKSByZXR1cm4geyBjd2QsIGJvb3RzdHJhcHBlZCwgb2s6IGZhbHNlIH07XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghZW50cnlwb2ludEV4aXN0cyhzcGVjLCBjd2QpKSB7XG4gICAgICBwcmludFdhcm5pbmcoYFxcbkkgY291bGRuJ3QgZmluZCAke3NwZWMuZGlyfS8ke3NwZWMuZW50cnlwb2ludH0gZnJvbSAke2N3ZH0uYCk7XG4gICAgICBwcmludEluZm8oJ1R3byBlYXN5IHdheXMgZm9yd2FyZDonKTtcbiAgICAgIHByaW50SW5mbygnICDigKIgY2QgaW50byB5b3VyIHBpcGVsaW5lLWJ1aWxkZXIgY2hlY2tvdXQgYW5kIHJlLXJ1biwgb3InKTtcbiAgICAgIHByaW50SW5mbyhgICDigKIgYWRkIC0tcmVwbyBhbmQgSSdsbCBib290c3RyYXAgYSBmcmVzaCBzcGFyc2UgY2xvbmUgZm9yIHlvdSR7Z2l0QXZhaWxhYmxlKCkgPyAnLicgOiAnIChvbmNlIGdpdCBpcyBpbnN0YWxsZWQpLid9YCk7XG4gICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgIHJldHVybiB7IGN3ZCwgYm9vdHN0cmFwcGVkLCBvazogZmFsc2UgfTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgY3dkLCBib290c3RyYXBwZWQsIG9rOiB0cnVlIH07XG59XG5cbi8qKlxuICogSW50ZXJhY3RpdmUgb3B0LWluIGxvYWRzLCBvZmZlcmVkIEFGVEVSIHRoZSBjbG9uZSAoc28gd2Ugb25seSBhc2sgb25jZSB0aGUgb3BlcmF0b3JcbiAqIGhhcyBhZ3JlZWQgdG8gcHJvY2VlZCkuIFByb21wdHMgcGVyIGxvYWQsIGFkZGl0aXZlbHkgc3BhcnNlLWZldGNoZXMgdGhlIHBpY2tlZFxuICogZm9sZGVycyBpbnRvIGEgYm9vdHN0cmFwcGVkIHNwYXJzZSBjbG9uZSwgdGhlbiByZS1yZXNvbHZlcyB0aGUgcG9zdC1pbnN0YWxsIHN0ZXBzXG4gKiB3aXRoIHRoZSBzZWxlY3Rpb25zLiBSZXR1cm5zIHRoZSBjaG9zZW4gaWRzICsgdGhlIHJlY29tcHV0ZWQgc3RlcHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlTG9hZHNJbnRlcmFjdGl2ZWx5KFxuICB0YXJnZXQ6IFRhcmdldElkLFxuICB1cmw6IHN0cmluZyB8IG51bGwsXG4gIHJlZ2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBjd2Q6IHN0cmluZyxcbiAgYm9vdHN0cmFwcGVkOiBib29sZWFuLFxuICBib290c3RyYXA6IEJvb3RzdHJhcFNwZWMsXG4gIHBvc3RTdGVwRmxhZ3M6IHsgaW5pdDogYm9vbGVhbjsgYXV0b0luaXQ6IGJvb2xlYW47IGJ1aWxkQm9vdHN0cmFwOiBib29sZWFuOyBzbW9rZVRlc3Q6IGJvb2xlYW47IGV2ZW50czogYm9vbGVhbjsgc3RlcHM6IHN0cmluZ1tdIH0sXG4pOiBQcm9taXNlPHsgZW5hYmxlZExvYWRJZHM6IHN0cmluZ1tdOyBzdGVwczogUG9zdFN0ZXBbXTsgc2tpcHBlZDogU2tpcHBlZFN0ZXBbXSB9PiB7XG4gIGNvbnN0IHByb21wdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgcGx1Z2luczogJ0xvYWQgcGx1Z2lucz8nLFxuICAgIHNhbXBsZXM6ICdMb2FkIHNhbXBsZSBwaXBlbGluZSB0ZW1wbGF0ZXM/JyxcbiAgICBjb21wbGlhbmNlOiAnTG9hZCBjb21wbGlhbmNlIHJ1bGVzPycsXG4gIH07XG4gIHByaW50U2VjdGlvbignT3B0aW9uYWwgcG9zdC1pbnN0YWxsIGxvYWRzJyk7XG4gIGNvbnN0IGNob3Nlbjogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBzIG9mIExPQURfU1RFUFMpIHtcbiAgICBpZiAoYXdhaXQgY29uZmlybShwcm9tcHRzW3MuaWRdID8/IGBMb2FkICR7cy5pZH0/YCwgZmFsc2UpKSBjaG9zZW4ucHVzaChzLmlkKTtcbiAgfVxuICAvLyBBZGRpdGl2ZSBzcGFyc2UgcmUtc3luYzogbWF0ZXJpYWxpemUgT05MWSB0aGUgcGlja2VkIGxvYWRzJyBmb2xkZXJzICh0aGUgcGFydGlhbFxuICAvLyBjbG9uZSBmZXRjaGVzIHRoZWlyIGJsb2JzIG9uIGRlbWFuZCkuIE9ubHkgd2hlbiB3ZSBjcmVhdGVkIGEgU1BBUlNFIGNsb25lIOKAlCBhXG4gIC8vIG5vcm1hbCBjaGVja291dCBhbHJlYWR5IGhhcyBldmVyeSBmb2xkZXIsIGFuZCB0aGUgZ2l0PDIuMjcgZnVsbC1jbG9uZSBmYWxsYmFja1xuICAvLyAoYm9vdHN0cmFwLmZ1bGwpIGlzIG5vbi1zcGFyc2UsIHdoZXJlIGBzcGFyc2UtY2hlY2tvdXQgYWRkYCB3b3VsZCBzd2l0Y2ggaXQgdG9cbiAgLy8gY29uZSBtb2RlIGFuZCBQUlVORSB0aGUgYWxyZWFkeS1tYXRlcmlhbGl6ZWQgZGVwbG95IGZvbGRlcnMuXG4gIGlmIChib290c3RyYXBwZWQgJiYgIWJvb3RzdHJhcC5mdWxsKSB7XG4gICAgY29uc3QgYWJzZW50ID0gc3BhcnNlUGF0aHNGb3IodGFyZ2V0LCBjaG9zZW4pLmZpbHRlcigocCkgPT4gIWV4aXN0c1N5bmMocGF0aC5qb2luKGN3ZCwgcCkpKTtcbiAgICBpZiAoYWJzZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgIHByaW50U2VjdGlvbignRmV0Y2hpbmcgc2VsZWN0ZWQgbG9hZCBmb2xkZXJzJyk7XG4gICAgICBjb25zdCBhZGRDbWQgPSBgZ2l0IHNwYXJzZS1jaGVja291dCBhZGQgJHthYnNlbnQubWFwKChwKSA9PiBgJyR7cH0nYCkuam9pbignICcpfSAmJiBnaXQgY2hlY2tvdXQgJHtzaGVsbFF1b3RlKGJvb3RzdHJhcC5yZWYpfWA7XG4gICAgICBwcmludEluZm8oYWRkQ21kKTtcbiAgICAgIGNvbnN0IHsgY29kZSB9ID0gYXdhaXQgcnVuU2NyaXB0KGFkZENtZCwgY3dkLCB7IGNhcHR1cmU6IGZhbHNlIH0pO1xuICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKGBDb3VsZG4ndCBmZXRjaCAke2Fic2VudC5qb2luKCcsICcpfSDigJQgdGhlIG1hdGNoaW5nIGxvYWQgc3RlcChzKSBtYXkgZmFpbC4gUmUtcnVuIHdpdGggLS1yZXBvIHRvIHJlZnJlc2ggdGhlIGNsb25lLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVQb3N0U3RlcHMoe1xuICAgIHRhcmdldCxcbiAgICB1cmwsXG4gICAgcmVnaW9uLFxuICAgIGVuYWJsZWRMb2FkSWRzOiBjaG9zZW4sXG4gICAgLi4ucG9zdFN0ZXBGbGFncyxcbiAgICBidWlsZEJvb3RzdHJhcDogcG9zdFN0ZXBGbGFncy5idWlsZEJvb3RzdHJhcCB8fCBjaG9zZW4uaW5jbHVkZXMoJ3BsdWdpbnMnKSxcbiAgfSk7XG4gIHJldHVybiB7IGVuYWJsZWRMb2FkSWRzOiBjaG9zZW4sIHN0ZXBzOiByZXNvbHZlZC5zdGVwcywgc2tpcHBlZDogcmVzb2x2ZWQuc2tpcHBlZCB9O1xufVxuXG4vKipcbiAqIFJlZGFjdCBzZWNyZXQgcGFyYW0gdmFsdWVzIChlLmcuIHRoZSBnaGNyIHRva2VuKSBmcm9tIGNhcHR1cmVkIGRlcGxveSBvdXRwdXRcbiAqIGJlZm9yZSBpdCBpcyBzZW50IHRvIHRoZSBMTE0gZm9yIGRpYWdub3Npcy4gVGhlIGRlcGxveSBydW5zIHdpdGggc2VjcmV0c1xuICogdW5tYXNrZWQsIHNvIGFsdGhvdWdoIHRoZSBjdXJyZW50IHNjcmlwdHMgZG9uJ3QgZWNobyB0aGVtLCB0aGlzIGtlZXBzIGEgZnV0dXJlXG4gKiBzY3JpcHQncyBzdHJheSBlY2hvIChvciBhIHZlcmJvc2Ugc3ViLXRvb2wpIGZyb20gY3Jvc3NpbmcgdGhlIHRoaXJkLXBhcnR5LUxMTVxuICogYm91bmRhcnkuXG4gKi9cbmZ1bmN0aW9uIHJlZGFjdFNlY3JldHModGV4dDogc3RyaW5nLCBzcGVjOiBUYXJnZXRTcGVjLCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nIHtcbiAgbGV0IG91dCA9IHRleHQ7XG4gIGZvciAoY29uc3QgaW5wdXQgb2YgWy4uLnNwZWMucmVxdWlyZWQsIC4uLnNwZWMub3B0aW9uYWxdKSB7XG4gICAgaWYgKCFpbnB1dC5zZWNyZXQpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHZhbHVlID0gcGFyYW1zW2lucHV0LmtleV07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID49IDQpIG91dCA9IG91dC5zcGxpdCh2YWx1ZSkuam9pbignKioqJyk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBBc3NlbWJsZSBkZXBsb3kgcGFyYW1zIGZyb20gZXhwbGljaXQgZmxhZ3MgKGZsYWdzIGFsd2F5cyB3aW4gb3ZlciB0aGUgTkxcbiAqIHBhcnNlLCB3aGljaCBvbmx5IGZpbGxzIGdhcHMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRQYXJhbXMob3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHNlbGZJbml0OiBib29sZWFuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4ge1xuICAgIHJlZ2lvbjogb3B0aW9ucy5yZWdpb24sXG4gICAgZG9tYWluOiBvcHRpb25zLmRvbWFpbixcbiAgICBob3N0ZWRab25lSWQ6IG9wdGlvbnMuaG9zdGVkWm9uZUlkLFxuICAgIGRlcGxveU1vZGU6IG9wdGlvbnMuZGVwbG95TW9kZSxcbiAgICBrZXlQYWlyOiBvcHRpb25zLmtleVBhaXIsXG4gICAgaW5zdGFuY2VUeXBlOiBvcHRpb25zLmluc3RhbmNlVHlwZSxcbiAgICAvLyBlYzIgTEVBTiBtb2RlIChib29sZWFuKSDihpIgYXNzZW1ibGVDb21tYW5kIGVtaXRzIGAtLWxlYW5gLCB3aGljaCBzZXR1cC5zaFxuICAgIC8vIGZvcndhcmRzIHRvIHRoZSBDRk4gYExlYW5gIHBhcmFtLiBPbmx5IGVjMidzIHNwZWMgbGlzdHMgaXQ7IG90aGVyIHRhcmdldHMgaWdub3JlIGl0LlxuICAgIGxlYW46IG9wdGlvbnMubGVhbiA9PT0gdHJ1ZSxcbiAgICAvLyBEZXBsb3ktdGltZSByZXNvdXJjZSBpZGVudGl0eTogZWMyIGVtaXRzIC0tc3RhY2stbmFtZSAoa2V5IHN0YWNrTmFtZSksIGVrcyBlbWl0c1xuICAgIC8vIC0tY2x1c3Rlci1uYW1lIChrZXkgY2x1c3Rlck5hbWUpLiBCb3RoIGFsc28gZHJpdmUgdGVhcmRvd24uIFVuZGVmaW5lZCDihpIgZGVmYXVsdHMuXG4gICAgc3RhY2tOYW1lOiBvcHRpb25zLnN0YWNrTmFtZSxcbiAgICBjbHVzdGVyTmFtZTogb3B0aW9ucy5jbHVzdGVyTmFtZSxcbiAgICBnaGNyVG9rZW46IG9wdGlvbnMuZ2hjclRva2VuLFxuICAgIC8vIGVtYWlsL25vRW1haWwgYXJlIGNvZXJjZWQgQUZURVIgdGhlIE5MIG1lcmdlIGJlbG93IOKAlCBwYXJzZUdvYWwgY2FuIHJldHVyblxuICAgIC8vIGBlbWFpbGAsIHNvIHByZS1jb2VyY2luZyBoZXJlIChuZXZlci11bmRlZmluZWQpIHdvdWxkIGxldCB0aGUgbWVyZ2Unc1xuICAgIC8vIGA9PT0gdW5kZWZpbmVkYCBndWFyZCBzaWxlbnRseSBkcm9wIGFuIEFJLXBhcnNlZCBlbWFpbCBjaG9pY2UuIExlZnQgb3V0IG9mXG4gICAgLy8gdGhpcyBsaXRlcmFsIG9uIHB1cnBvc2U7IHJlc29sdmVkIGEgZmV3IGxpbmVzIGRvd24uXG4gICAgZW1haWxGcm9tOiBvcHRpb25zLmVtYWlsRnJvbSxcbiAgICBlbWFpbEZyb21OYW1lOiBvcHRpb25zLmVtYWlsRnJvbU5hbWUsXG4gICAgYWxlcnRFbWFpbDogb3B0aW9ucy5hbGVydEVtYWlsLFxuICAgIG5vQ3JlYXRlU2VzSWRlbnRpdHk6IG9wdGlvbnMuc2tpcFNlc0lkZW50aXR5LFxuICAgIC8vIFRoZSBBV1MgZGVwbG95cyBzZWxmLWluaXQgYnkgZGVmYXVsdCAoZWMyIG9uIGZpcnN0IGJvb3QsIGVrcyBpbiBzZXR1cC5zaCdzIGZpbmFsXG4gICAgLy8gcGhhc2UpLCBzbyB3ZSBlbWl0IHRoZSBsb2FkLWJlYXJpbmcgYC0tbm8tYXV0by1pbml0YCB3aGVuIHRoZSBtb2RlIGlzIE5PVCBhdXRvXG4gICAgLy8gKG1hbnVhbC9za2lwID0gXCJkb24ndCBsZXQgdGhlIGRlcGxveSBpbml0IGl0c2VsZlwiKS4gYC0tYXV0by1pbml0YCAoYSBuby1vcCByZWFmZmlybSlcbiAgICAvLyBpcyBuZXZlciBlbWl0dGVkLiBPbmx5IGVjMi9la3MgY2FycnkgdGhlc2UgZmxhZ3MgaW4gdGhlaXIgc3BlYzsgb3RoZXIgdGFyZ2V0cyBpZ25vcmUgaXQuXG4gICAgbm9BdXRvSW5pdDogIXNlbGZJbml0LFxuICB9O1xufVxuXG4vKipcbiAqIGAtLWRpYWdub3NlIDxmaWxlPmA6IGV4cGxhaW4gYSBkZXBsb3kgZmFpbHVyZSB3aXRoIHRoZSBjb25maWd1cmVkIG1vZGVsLiBBXG4gKiByZWFkLW9ubHkgaW5zcGVjdGlvbiBtb2RlIOKAlCB0aGUgY2FsbGVyIHJldHVybnMgYWZ0ZXJ3YXJkcyB3aGV0aGVyIG9yIG5vdCBhXG4gKiB0YXJnZXQgd2FzIGdpdmVuLCBzbyBpdCBuZXZlciBmYWxscyB0aHJvdWdoIGludG8gYSAocG9zc2libHkgLS15ZXMpIGRlcGxveS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkRpYWdub3NlKGZpbGU6IHN0cmluZywganNvbjogYm9vbGVhbiwgYWlPcHRzOiBBaU9wdGlvbnMsIGV4ZWN1dGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgbGV0IGZhaWx1cmVUZXh0OiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgZmFpbHVyZVRleHQgPSByZWFkRmlsZVN5bmMoZmlsZSwgJ3V0Zi04Jyk7XG4gIH0gY2F0Y2gge1xuICAgIHByaW50RXJyb3IoYENhbm5vdCByZWFkIC0tZGlhZ25vc2UgZmlsZTogJHtmaWxlfWApO1xuICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBkaWFnbm9zaXMgPSBpc0FpQ29uZmlndXJlZChhaU9wdHMpID8gYXdhaXQgZGlhZ25vc2VGYWlsdXJlKGZhaWx1cmVUZXh0LCBhaU9wdHMpIDogbnVsbDtcbiAgLy8gV2l0aCAtLWpzb24sIHRoZSBkaWFnbm9zaXMgSVMgdGhlIG1hY2hpbmUtcmVhZGFibGUgb3V0cHV0IOKAlCBlbWl0IGl0XG4gIC8vIGFsb25lIChkb24ndCBhbHNvIHByaW50IHRleHQsIHdoaWNoIHdvdWxkIGNvcnJ1cHQgdGhlIEpTT04gc3RyZWFtKS5cbiAgaWYgKGpzb24pIHtcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IHN1Y2Nlc3M6IHRydWUsIGV4ZWN1dGlvbklkLCBkaWFnbm9zaXMgfSwgbnVsbCwgMikpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZGlhZ25vc2lzKSB7XG4gICAgcHJpbnRTZWN0aW9uKCdGYWlsdXJlIGRpYWdub3NpcycpO1xuICAgIHByaW50SW5mbyhkaWFnbm9zaXMpO1xuICB9IGVsc2Uge1xuICAgIHByaW50V2FybmluZygnRGlhZ25vc2lzIHVuYXZhaWxhYmxlIChubyBBSSBrZXkgY29uZmlndXJlZCBvciB0aGUgbW9kZWwgY291bGQgbm90IGJlIHJlYWNoZWQpLicpO1xuICB9XG59XG5cbi8qKiBQcmludCB0aGUgcHJvdmlzaW9uIHBsYW4gKHNob3duIGJlZm9yZSB0aGUgZ2F0ZWQgZXhlY3V0aW9uKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludFBsYW4ocDoge1xuICBzcGVjOiBUYXJnZXRTcGVjO1xuICB0YXJnZXQ6IFRhcmdldElkO1xuICBwcmVyZXFzOiBQcmVyZXFDaGVja1tdO1xuICBtaXNzaW5nOiBBc3NlbWJsZVJlc3VsdFsnbWlzc2luZyddO1xuICBib290c3RyYXA6IEJvb3RzdHJhcFNwZWM7XG4gIGJvb3RzdHJhcENtZDogc3RyaW5nIHwgbnVsbDtcbiAgc3BhcnNlUGF0aHM6IHN0cmluZ1tdO1xuICBjb21tYW5kOiBzdHJpbmc7XG4gIHBvc3RTdGVwczogUG9zdFN0ZXBbXTtcbiAgc2tpcHBlZFN0ZXBzOiBTa2lwcGVkU3RlcFtdO1xufSk6IHZvaWQge1xuICBjb25zdCB7IHNwZWMsIHRhcmdldCwgcHJlcmVxcywgbWlzc2luZywgYm9vdHN0cmFwLCBib290c3RyYXBDbWQsIHNwYXJzZVBhdGhzLCBjb21tYW5kLCBwb3N0U3RlcHMsIHNraXBwZWRTdGVwcyB9ID0gcDtcbiAgcHJpbnRTZWN0aW9uKGBQcm92aXNpb24gcGxhbiDigJQgJHtzcGVjLmxhYmVsfWApO1xuICBwcmludEtleVZhbHVlKHsgJ1RhcmdldCc6IHRhcmdldCwgJ0Jlc3QgZm9yJzogc3BlYy5iZXN0Rm9yLCAnQ29zdCc6IHNwZWMuY29zdCB9KTtcblxuICBwcmludFNlY3Rpb24oJ1ByZXJlcXVpc2l0ZXMnKTtcbiAgZm9yIChjb25zdCBjIG9mIHByZXJlcXMpIHByaW50SW5mbyhgJHtjLm9rID8gJ+KckycgOiAn4pyXJ30gJHtjLm5hbWV9IOKAlCAke2MuZGV0YWlsfWApO1xuICBpZiAoIXByZXJlcXNTYXRpc2ZpZWQocHJlcmVxcykpIHByaW50V2FybmluZygnUmVzb2x2ZSB0aGUgZmFpbGluZyBwcmVyZXF1aXNpdGVzIGFib3ZlIGJlZm9yZSBkZXBsb3lpbmcuJyk7XG5cbiAgaWYgKG1pc3NpbmcubGVuZ3RoID4gMCkge1xuICAgIHByaW50U2VjdGlvbignTWlzc2luZyByZXF1aXJlZCBpbnB1dHMnKTtcbiAgICBmb3IgKGNvbnN0IG0gb2YgbWlzc2luZykgcHJpbnRJbmZvKGAgIC0tJHttLmZsYWd9ICAoJHttLmRlc2NyaXB0aW9ufSlgKTtcbiAgfVxuXG4gIGlmIChib290c3RyYXBDbWQpIHtcbiAgICBwcmludFNlY3Rpb24oJ0Jvb3RzdHJhcCAoc3BhcnNlIGdpdCBjbG9uZSwgcnVucyBmaXJzdCknKTtcbiAgICBwcmludEluZm8oYENsb25lICR7Ym9vdHN0cmFwLnJlcG99IEAgJHtib290c3RyYXAucmVmfSDihpIgJHtib290c3RyYXAud29ya2Rpcn07IGZvbGRlcnM6ICR7c3BhcnNlUGF0aHMuam9pbignLCAnKX1gKTtcbiAgICBwcmludEluZm8oYm9vdHN0cmFwQ21kKTtcbiAgfVxuXG4gIHByaW50U2VjdGlvbignQ29tbWFuZCB0byBydW4nKTtcbiAgcHJpbnRJbmZvKGNvbW1hbmQpO1xuXG4gIGlmIChwb3N0U3RlcHMubGVuZ3RoID4gMCB8fCBza2lwcGVkU3RlcHMubGVuZ3RoID4gMCkge1xuICAgIHByaW50U2VjdGlvbignUG9zdC1pbnN0YWxsIHN0ZXBzJyk7XG4gICAgZm9yIChjb25zdCBzIG9mIHBvc3RTdGVwcykgcHJpbnRJbmZvKGDigKIgJHtzLmxhYmVsfVxcbiAgICAke3MuY29tbWFuZH1gKTtcbiAgICBmb3IgKGNvbnN0IHMgb2Ygc2tpcHBlZFN0ZXBzKSBwcmludFdhcm5pbmcoYFNraXBwZWQgJHtzLmlkfTogJHtzLnJlYXNvbn1gKTtcbiAgfVxufVxuXG4vKipcbiAqIFBsdWdpbnMgd2VyZSBwaWNrZWQgaW50ZXJhY3RpdmVseTogcmUtY2hlY2sgdGhlIHBsdWdpbi1zcGVjaWZpYyBwcmVyZXFzIHRoYXRcbiAqIHdlcmUgZGVsaWJlcmF0ZWx5IG5vdCBoYXJkLXJlcXVpcmVkIHVwIGZyb250IChlLmcuIHlxIGZvciBtaW5pa3ViZSBwbHVnaW5cbiAqIGJ1aWxkcykuIE9mZmVyIHRvIGZldGNoIGFueSBmZXRjaGFibGUgb25lOyB3YXJuIChkb24ndCBibG9jayDigJQgdGhlIHBsYXRmb3JtXG4gKiBzdGlsbCBkZXBsb3lzKSBpZiBpdCBjYW4ndCBiZSByZXNvbHZlZCwgc28gdGhlIGxhdGVyIHBsdWdpbiBidWlsZCBkb2Vzbid0XG4gKiBmYWlsIG9wYXF1ZWx5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVjaGVja1BsdWdpblByZXJlcXModGFyZ2V0OiBUYXJnZXRJZCwgd2FudEJvb3RzdHJhcDogYm9vbGVhbiwgcHJlcmVxczogUHJlcmVxQ2hlY2tbXSwgeWVzOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBsdWdpblByZXJlcXMgPSBjaGVja1ByZXJlcXModGFyZ2V0LCB7IGJvb3RzdHJhcDogd2FudEJvb3RzdHJhcCwgd2l0aFBsdWdpbnM6IHRydWUgfSk7XG4gIGNvbnN0IHBsdWdpbkdhcHMgPSBwbHVnaW5QcmVyZXFzLmZpbHRlcigoYykgPT4gIWMub2sgJiYgYy5yZXF1aXJlZCAmJiAhcHJlcmVxcy5zb21lKChwKSA9PiBwLm5hbWUgPT09IGMubmFtZSkpO1xuICBmb3IgKGNvbnN0IGMgb2YgcGx1Z2luR2Fwcykge1xuICAgIGlmIChpc0ZldGNoYWJsZShjLm5hbWUpICYmIGF3YWl0IGNvbmZpcm0oYFxcbiR7Yy5uYW1lfSBpcyBuZWVkZWQgdG8gYnVpbGQgcGx1Z2lucyBidXQgaXNuJ3QgaW5zdGFsbGVkIOKAlCBmZXRjaCB0aGUgc3RhdGljIGJpbmFyeSBpbnRvICR7VE9PTFNfRElSfT9gLCB5ZXMpKSB7XG4gICAgICBwcmludEluZm8oYEZldGNoaW5nICR7Yy5uYW1lfeKApmApO1xuICAgICAgaWYgKCFmZXRjaFRvb2woYy5uYW1lKSkgcHJpbnRXYXJuaW5nKGBDb3VsZG4ndCBmZXRjaCAke2MubmFtZX0g4oCUIGluc3RhbGwgaXQgYmVmb3JlIHRoZSBwbHVnaW4gYnVpbGQgcnVucy5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJpbnRXYXJuaW5nKGAke2MubmFtZX0gbWlzc2luZyDigJQgdGhlIHBsdWdpbiBsb2FkL2J1aWxkIHN0ZXAgbWF5IGZhaWwuICR7Yy5kZXRhaWx9YCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogbG9jYWwvbWluaWt1YmUncyBzZXR1cC5zaCBSRVFVSVJFUyBhIGAuZW52YCBhbmQgYWJvcnRzIHdpdGhvdXQgaXQg4oCUIGNyZWF0ZVxuICogaXQgZnJvbSAuZW52LmV4YW1wbGUgd2l0aCBnZW5lcmF0ZWQgc2VjcmV0cyBzbyB0aGUgZGVwbG95IGlzIG5vbi1pbnRlcmFjdGl2ZS5cbiAqIGVjMiBhbmQgZWtzIGRvbid0IG5lZWQgYSBsb2NhbCBgLmVudmA6IGVjMiBib290c3RyYXBzIGl0cyBzZWNyZXRzIG9uIHRoZVxuICogaW5zdGFuY2UsIGFuZCBla3MncyBzZXR1cC5zaCBjcmVhdGVzIHRoZSBrOHMgc2VjcmV0cyBpdHNlbGYuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmVMb2NhbEVudkZpbGUodGFyZ2V0OiBUYXJnZXRJZCwgc3BlYzogVGFyZ2V0U3BlYywgY3dkOiBzdHJpbmcsIHllczogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoKHRhcmdldCAhPT0gJ2RvY2tlcicgJiYgdGFyZ2V0ICE9PSAnbWluaWt1YmUnKSB8fCAhZW52RmlsZU1pc3NpbmcoY3dkLCBzcGVjLmRpcikpIHJldHVybjtcbiAgaWYgKGF3YWl0IGNvbmZpcm0oYFxcbiR7c3BlYy5kaXJ9Ly5lbnYgbm90IGZvdW5kIOKAlCBjcmVhdGUgaXQgZnJvbSAuZW52LmV4YW1wbGUgKGdlbmVyYXRlcyBzZWNyZXRzOyBlZGl0IGxhdGVyIGZvciBvcHRpb25hbCBpbnRlZ3JhdGlvbnMgbGlrZSBPQXV0aCk/YCwgeWVzKSkge1xuICAgIGNvbnN0IG4gPSBjcmVhdGVFbnZGaWxlKGN3ZCwgc3BlYy5kaXIpO1xuICAgIHByaW50U3VjY2VzcyhgQ3JlYXRlZCAke3NwZWMuZGlyfS8uZW52IOKAlCAke259IHNlY3JldChzKSBnZW5lcmF0ZWQuYCk7XG4gIH0gZWxzZSB7XG4gICAgcHJpbnRXYXJuaW5nKCdDb250aW51aW5nIHdpdGhvdXQgLmVudiDigJQgc2V0dXAuc2ggd2lsbCBhYm9ydCBpZiBpdCBzdGF5cyBtaXNzaW5nLicpO1xuICB9XG59XG5cbi8qKlxuICogQW55IG1pc3NpbmcgcmVxdWlyZWQgcHJlcmVxIHRoYXQncyBhIHNpbmdsZSBzdGF0aWMgYmluYXJ5IChlLmcuIHlxKSBjYW4gYmVcbiAqIGZldGNoZWQgaW50byB0aGUgdG9vbHMgY2FjaGUgaW5zdGVhZCBvZiBhIHN5c3RlbSBpbnN0YWxsIOKAlCBubyBicmV3L2FwdC5cbiAqIE9mZmVyIGl0LCB0aGVuIHJlLWNoZWNrICh0aGUgY2FjaGUgZGlyIGlzIGFscmVhZHkgb24gUEFUSCkuIFJldHVybnMgdGhlXG4gKiAocG9zc2libHkgcmVmcmVzaGVkKSBwcmVyZXEgbGlzdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9mZmVyVG9vbEZldGNoKHByZXJlcXM6IFByZXJlcUNoZWNrW10sIHllczogYm9vbGVhbiwgcmVjaGVjazogKCkgPT4gUHJlcmVxQ2hlY2tbXSk6IFByb21pc2U8UHJlcmVxQ2hlY2tbXT4ge1xuICBjb25zdCBmZXRjaGFibGUgPSBwcmVyZXFzLmZpbHRlcigoYykgPT4gIWMub2sgJiYgYy5yZXF1aXJlZCAmJiBpc0ZldGNoYWJsZShjLm5hbWUpKTtcbiAgaWYgKGZldGNoYWJsZS5sZW5ndGggPT09IDApIHJldHVybiBwcmVyZXFzO1xuICBjb25zdCBuYW1lcyA9IGZldGNoYWJsZS5tYXAoKGMpID0+IGMubmFtZSkuam9pbignLCAnKTtcbiAgaWYgKCEoYXdhaXQgY29uZmlybShgXFxuJHtuYW1lc30gbm90IGluc3RhbGxlZCDigJQgZmV0Y2ggdGhlIG9mZmljaWFsIHN0YXRpYyBiaW5hcnkgaW50byAke1RPT0xTX0RJUn0gKG5vIHN5c3RlbSBpbnN0YWxsKT9gLCB5ZXMpKSkgcmV0dXJuIHByZXJlcXM7XG4gIGZvciAoY29uc3QgYyBvZiBmZXRjaGFibGUpIHtcbiAgICBwcmludEluZm8oYEZldGNoaW5nICR7Yy5uYW1lfeKApmApO1xuICAgIGlmICghZmV0Y2hUb29sKGMubmFtZSkpIHByaW50V2FybmluZyhgQ291bGRuJ3QgZmV0Y2ggJHtjLm5hbWV9IOKAlCBpbnN0YWxsIGl0IG1hbnVhbGx5IGFuZCByZS1ydW4uYCk7XG4gIH1cbiAgcmV0dXJuIHJlY2hlY2soKTtcbn1cblxuLyoqIFZlcmlmeSBoZWFsdGggYWZ0ZXIgdGhlIGRlcGxveSAoQ1JFQVRFX0NPTVBMRVRFICE9IHNlcnZpbmcpLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeUhlYWx0aCh0YXJnZXQ6IFRhcmdldElkLCB1cmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBwcmludFNlY3Rpb24oJ1ZlcmlmeWluZyBoZWFsdGgnKTtcbiAgLy8gTWluaWt1YmUgcmVhY2hlcyB0aGUgZ2F0ZXdheSB2aWEgYSBrdWJlY3RsIHBvcnQtZm9yd2FyZCB0aGF0IHNldHVwLnNoXG4gIC8vIGJhY2tncm91bmRzIGFuZCB0aGF0IGNhbiBkaWUvZmFpbCB0byBiaW5kIOKAlCAocmUpc3RhcnQgaXQgYmVmb3JlIHBvbGxpbmdcbiAgLy8gc28gd2UgZG9uJ3Qgc2l0IGF0IHRoZSBnYXRlIG9uIGEgZGVhZCBmb3J3YXJkIHdoaWxlIHRoZSBwb2RzIGFyZSBmaW5lLlxuICBpZiAodGFyZ2V0ID09PSAnbWluaWt1YmUnKSB7XG4gICAgYXdhaXQgZW5zdXJlTWluaWt1YmVHYXRld2F5KHVybCwgeyBvbkluZm86IChtKSA9PiBwcmludEluZm8obSkgfSk7XG4gIH1cbiAgcHJpbnRJbmZvKGBQb2xsaW5nICR7dXJsfS9oZWFsdGgg4oCmYCk7XG4gIC8vIEZyZXNoIEVLUyBsZWdpdGltYXRlbHkgbmVlZHMgbG9uZ2VyIHRoYW4gdGhlIDMwMHMgZGVmYXVsdDogS2FycGVudGVyIHByb3Zpc2lvbnNcbiAgLy8gbm9kZXMsIH4xMCBzZXJ2aWNlcyBjb2xkLXB1bGwgaW1hZ2VzLCB0aGUgQUxCIHByb3Zpc2lvbnMgKH4yLTMgbWluKSwgYW5kIHRoZVxuICAvLyBSb3V0ZSA1MyBhbGlhcyBwcm9wYWdhdGVzLiBHaXZlIGl0IDE1IG1pbiBiZWZvcmUgc3VyZmFjaW5nIHRoZSBub3QtcmVhY2hhYmxlIG5vdGUuXG4gIGNvbnN0IGhlYWx0aFRpbWVvdXRNcyA9IHRhcmdldCA9PT0gJ2VrcycgPyA5MDBfMDAwIDogdW5kZWZpbmVkO1xuICBjb25zdCBoZWFsdGggPSBhd2FpdCB3YWl0SGVhbHRoeSh1cmwsIHsgdGltZW91dE1zOiBoZWFsdGhUaW1lb3V0TXMsIG9uVGljazogKG0pID0+IHByaW50SW5mbyhtKSB9KTtcbiAgLy8gR3JlZW4gb25seSB3aGVuIGZ1bGx5IHJlYWR5OyBhIFwiaGVhbHRoIE9LIGJ1dCAvcmVhZHkgbmV2ZXIgY2FtZVwiIHByb2NlZWQtXG4gIC8vIGFueXdheSBzdGF0ZSBpcyBoZWFsdGh5OnRydWUgYnV0IGRlZ3JhZGVkIOKGkiB3YXJuIHNvIGl0IGRvZXNuJ3QgcmVhZCBhcyBkb25lLlxuICAoaGVhbHRoLmhlYWx0aHkgJiYgaGVhbHRoLnJlYWR5ID8gcHJpbnRTdWNjZXNzIDogcHJpbnRXYXJuaW5nKShgJHtoZWFsdGgudXJsfSDigJQgJHtoZWFsdGguZGV0YWlsfWApO1xufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provision.d.ts","
|
|
1
|
+
{"version":3,"file":"provision.d.ts","sources":["../../src/commands/provision.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6CpC;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2ShD"}
|
|
@@ -315,4 +315,4 @@ export function provision(program) {
|
|
|
315
315
|
}
|
|
316
316
|
});
|
|
317
317
|
}
|
|
318
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3Byb3Zpc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxVQUFVLEVBQ1Ysa0JBQWtCLEVBQ2xCLFdBQVcsRUFDWCxPQUFPLEVBQ1Asa0JBQWtCLEVBQ2xCLGNBQWMsRUFDZCxjQUFjLEVBQ2QsU0FBUyxFQUNULG9CQUFvQixFQUNwQixlQUFlLEVBQ2YseUJBQXlCLEVBQ3pCLGtCQUFrQixFQUNsQixXQUFXLEVBQ1gsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEdBQ2IsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLHlCQUF5QixFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEcsT0FBTyxFQUNMLGVBQWUsRUFDZixVQUFVLEVBQ1YsVUFBVSxFQUNWLGNBQWMsRUFDZCxPQUFPLEVBQ1AsVUFBVSxHQUVYLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBCQUEwQixDQUFD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QUFDO1FBQ0wsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSBgcHJvdmlzaW9uYCBjb21tYW5kOiBpdHMgfjQwLW9wdGlvbiB0YWJsZSwgYW5kIHRoZSBzZXF1ZW5jaW5nIG5hcnJhdGl2ZVxuICogdGhhdCBydW5zIGEgcHJvdmlzaW9uIGVuZCB0byBlbmQuXG4gKlxuICogVGhlIHBoYXNlcyB0aGVtc2VsdmVzIGxpdmUgaW4gYC4vcHJvdmlzaW9uLXN0ZXBzLnRzYCDigJQgb25lIGV4cG9ydGVkIGZ1bmN0aW9uXG4gKiBlYWNoIOKAlCBzbyB0aGlzIGZpbGUgY2FuIGJlIHJlYWQgYXMgd2hhdCBpdCBpczogd2hpY2ggZmxhZ3MgZXhpc3QsIGFuZCBpbiB3aGF0XG4gKiBvcmRlciB0aGUgc3RlcHMgcnVuIGJlaGluZCB3aGljaCBnYXRlcy5cbiAqL1xuXG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7XG4gIElOSVRfTU9ERVMsXG4gIGJvb3RzdHJhcEFuZExvY2F0ZSxcbiAgYnVpbGRQYXJhbXMsXG4gIGNvbmZpcm0sXG4gIGVuc3VyZUxvY2FsRW52RmlsZSxcbiAgb2ZmZXJUb29sRmV0Y2gsXG4gIHByZWZsaWdodFBvcnRzLFxuICBwcmludFBsYW4sXG4gIHJlY2hlY2tQbHVnaW5QcmVyZXFzLFxuICByZXNvbHZlSW5pdE1vZGUsXG4gIHJlc29sdmVMb2Fkc0ludGVyYWN0aXZlbHksXG4gIHJ1bkRlcGxveVdpdGhSZXRyeSxcbiAgcnVuRGlhZ25vc2UsXG4gIHJ1blBvc3RTdGVwcyxcbiAgcnVuVGVhcmRvd24sXG4gIHZlcmlmeUhlYWx0aCxcbn0gZnJvbSAnLi9wcm92aXNpb24tc3RlcHMuanMnO1xuaW1wb3J0IHsgaXNBaUNvbmZpZ3VyZWQsIHBhcnNlR29hbCB9IGZyb20gJy4uL2FnZW50L2FpLmpzJztcbmltcG9ydCB7IGJvb3RzdHJhcENvbW1hbmQsIHJlc29sdmVCb290c3RyYXAgfSBmcm9tICcuLi9hZ2VudC9ib290c3RyYXAuanMnO1xuaW1wb3J0IHsgZXhlY3V0aW9uQmxvY2tlZCB9IGZyb20gJy4uL2FnZW50L2V4ZWN1dG9yLmpzJztcbmltcG9ydCB7IGRlcml2ZUhlYWx0aFVybCB9IGZyb20gJy4uL2FnZW50L2hlYWx0aC5qcyc7XG5pbXBvcnQgeyByZXNvbHZlUG9zdFN0ZXBzIH0gZnJvbSAnLi4vYWdlbnQvcG9zdC1zdGVwcy5qcyc7XG5pbXBvcnQgeyBjaGVja1ByZXJlcXMsIGdpdFN1cHBvcnRzU3BhcnNlQ2hlY2tvdXQsIHByZXJlcXNTYXRpc2ZpZWQgfSBmcm9tICcuLi9hZ2VudC9wcmVyZXFzLmpzJztcbmltcG9ydCB7XG4gIGFzc2VtYmxlQ29tbWFuZCxcbiAgaXNUYXJnZXRJZCxcbiAgTE9BRF9TVEVQUyxcbiAgc3BhcnNlUGF0aHNGb3IsXG4gIFRBUkdFVFMsXG4gIFRBUkdFVF9JRFMsXG4gIHR5cGUgVGFyZ2V0SWQsXG59IGZyb20gJy4uL2FnZW50L3RhcmdldHMuanMnO1xuaW1wb3J0IHsgd2l0aFRvb2xzT25QYXRoIH0gZnJvbSAnLi4vYWdlbnQvdG9vbHMuanMnO1xuaW1wb3J0IHsgc2VzUG9zdERlcGxveUd1aWRhbmNlIH0gZnJvbSAnLi4vYWdlbnQvdHJvdWJsZXNob290LmpzJztcbmltcG9ydCB7IHByaW50Q29tbWFuZEhlYWRlciB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludFNlY3Rpb24sIHByaW50SW5mbywgcHJpbnRXYXJuaW5nLCBwcmludEVycm9yLCBwcmludFN1Y2Nlc3MgfSBmcm9tICcuLi91dGlscy9vdXRwdXQtdXRpbHMuanMnO1xuXG4vKiogQ29tbWFuZGVyIGNvbGxlY3RvcjogYWNjdW11bGF0ZSByZXBlYXRlZCBgLS1wb3N0LXN0ZXBgIHZhbHVlcyBpbiBvcmRlci4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RTdGVwKHZhbHVlOiBzdHJpbmcsIGFjYzogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbLi4uYWNjLCB2YWx1ZV07XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIHRoZSBgcHJvdmlzaW9uYCBjb21tYW5kIOKAlCBhbiBBSS1hc3Npc3RlZCBpbnN0YWxsZXIgZm9yIHRoZSBQaXBlbGluZVxuICogQnVpbGRlciBQTEFURk9STSAobG9jYWwvbWluaWt1YmUvRUMyL0VLUykuIEl0IHByaW50cyB0aGUgYXNzZW1ibGVkIHBsYW5cbiAqIChwcmVyZXEgY2hlY2tzLCBOTC1nb2FsIHBhcnNpbmcsIGNvbW1hbmQgYXNzZW1ibHkpIGFuZCB0aGVuIERFUExPWVMsIGdhdGVkIGJ5XG4gKiBjb25maXJtYXRpb24gcHJvbXB0cyAoYC0teWVzYCB0byBhdXRvLWFjY2VwdDsgYC0tanNvbmAgaXMgdGhlIG9ubHkgbm9uLWV4ZWN1dGluZ1xuICogbW9kZSwgcHJpbnRpbmcgdGhlIHBsYW4gZm9yIHRvb2xpbmcpLiBXaXRoIGAtLXJlcG9gIGl0IGNhbiBib290c3RyYXAgYSBmcmVzaFxuICogbWFjaGluZSBieSBzcGFyc2VseSBjbG9uaW5nIG9ubHkgdGhlIGRlcGxveSBmb2xkZXJzIHRoZSBzZWxlY3RlZCB0YXJnZXQgK1xuICogb3B0aW9ucyBuZWVkLCB0aGVuIHJ1bnMgcG9zdC1pbnN0YWxsIHN0ZXBzIChyZWdpc3RlciBhZG1pbiwgb3B0LWluIGxvYWRzLFxuICogc21va2UgdGVzdCwgY3VzdG9tIGNvbW1hbmRzKS4gYC0tdGVhcmRvd25gIHJlbW92ZXMgYSBkZXBsb3ltZW50IGluc3RlYWQuXG4gKlxuICogQHBhcmFtIHByb2dyYW0gLSBUaGUgcm9vdCBDb21tYW5kZXIgcHJvZ3JhbSBpbnN0YW5jZSB0byBhdHRhY2ggdGhlIGNvbW1hbmQgdG8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb24ocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3Byb3Zpc2lvbicpXG4gICAgLmRlc2NyaXB0aW9uKCdBSS1hc3Npc3RlZCBpbnN0YWxsZXIgZm9yIHRoZSBwbGF0Zm9ybSAobG9jYWwvbWluaWt1YmUvRUMyL0VLUyk6IGRlcGxveXMgaXQgKGdhdGVkIGJ5IGNvbmZpcm1hdGlvbiBwcm9tcHRzKSwgb3IgLS10ZWFyZG93biB0byByZW1vdmUnKVxuICAgIC5vcHRpb24oJy10LCAtLXRhcmdldCA8dGFyZ2V0PicsIGBEZXBsb3kgdGFyZ2V0OiAke1RBUkdFVF9JRFMuam9pbignIHwgJyl9YClcbiAgICAub3B0aW9uKCctcCwgLS1wcm9tcHQgPHRleHQ+JywgJ05hdHVyYWwtbGFuZ3VhZ2UgZ29hbCAocGFyc2VkIGludG8gcGFyYW1zIHdoZW4gYW4gQUkga2V5IGlzIHNldCknKVxuICAgIC5vcHRpb24oJy0tcmVnaW9uIDxyZWdpb24+JywgJ0FXUyByZWdpb24gKEVDMi9FS1MpJylcbiAgICAub3B0aW9uKCctLWRvbWFpbiA8ZG9tYWluPicsICdGdWxseS1xdWFsaWZpZWQgZG9tYWluIG5hbWUgKEVDMi9FS1MpJylcbiAgICAub3B0aW9uKCctLWhvc3RlZC16b25lLWlkIDxpZD4nLCAnUHVibGljIFJvdXRlIDUzIGhvc3RlZCB6b25lIElEIChFQzIvRUtTKScpXG4gICAgLm9wdGlvbignLS1kZXBsb3ktbW9kZSA8bW9kZT4nLCAncHVibGljIHwgcHJpdmF0ZSAoRUMyL0VLUyknKVxuICAgIC5vcHRpb24oJy0ta2V5LXBhaXIgPG5hbWU+JywgJ0VDMiBrZXkgcGFpciAoRUMyKScpXG4gICAgLm9wdGlvbignLS1pbnN0YW5jZS10eXBlIDx0eXBlPicsICdFQzIgaW5zdGFuY2UgdHlwZSAoRUMyKScpXG4gICAgLm9wdGlvbignLS1sZWFuJywgJ0VDMjogdHJpbSBvcHRpb25hbCBvYnNlcnZhYmlsaXR5L2FkbWluIHNlcnZpY2VzIHNvIHRoZSBjb3JlIHN0YWNrICsgbWVzaCBmaXRzIGEgdDMueGxhcmdlIChwYWlyIHdpdGggLS1pbnN0YW5jZS10eXBlIHQzLnhsYXJnZSknKVxuICAgIC5vcHRpb24oJy0tZ2hjci10b2tlbiA8dG9rZW4+JywgJ0dpdEh1YiBQQVQgKHJlYWQ6cGFja2FnZXMpIOKAlCBtYXNrZWQgaW4gb3V0cHV0JylcbiAgICAub3B0aW9uKCctLWVtYWlsJywgJ0VuYWJsZSBTRVMgdHJhbnNhY3Rpb25hbCBlbWFpbCAob24gYnkgZGVmYXVsdCBmb3IgQVdTKScpXG4gICAgLm9wdGlvbignLS1uby1lbWFpbCcsICdTa2lwIFNFUyAodHJhbnNhY3Rpb25hbCBlbWFpbCBpcyBwcm92aXNpb25lZCBieSBkZWZhdWx0IG9uIEFXUyknKVxuICAgIC5vcHRpb24oJy0tZW1haWwtZnJvbSA8YWRkcj4nLCAnU0VTIEZyb20gYWRkcmVzcycpXG4gICAgLm9wdGlvbignLS1lbWFpbC1mcm9tLW5hbWUgPG5hbWU+JywgJ1NFUyBGcm9tIGRpc3BsYXkgbmFtZScpXG4gICAgLm9wdGlvbignLS1hbGVydC1lbWFpbCA8YWRkcj4nLCAnU3Vic2NyaWJlIGFuIGFkZHJlc3MgdG8gdGhlIGJvdW5jZS9jb21wbGFpbnQgU05TIHRvcGljJylcbiAgICAub3B0aW9uKCctLXNraXAtc2VzLWlkZW50aXR5JywgJ1NraXAgU0VTIGlkZW50aXR5IGNyZWF0aW9uIChkb21haW4gYWxyZWFkeSB2ZXJpZmllZCknKVxuICAgIC5vcHRpb24oJy0tYWktcHJvdmlkZXIgPHByb3ZpZGVyPicsICdBSSBwcm92aWRlciAoYW50aHJvcGljfG9wZW5haXxnb29nbGV8eGFpfGJlZHJvY2spJylcbiAgICAub3B0aW9uKCctLW1vZGVsIDxtb2RlbD4nLCAnQUkgbW9kZWwgaWQnKVxuICAgIC5vcHRpb24oJy0tZGlhZ25vc2UgPGZpbGU+JywgJ0RpYWdub3NlIGEgQ2xvdWRGb3JtYXRpb24vZGVwbG95IGZhaWx1cmUgZnJvbSBhIGZpbGUgKG5lZWRzIGFuIEFJIGtleSknKVxuICAgIC5vcHRpb24oJy15LCAtLXllcycsICdBdXRvLWFjY2VwdCBhbGwgY29uZmlybWF0aW9uIHByb21wdHMgKGZvciBDSSAvIG5vbi1pbnRlcmFjdGl2ZSknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXJldHJpZXMgPG4+JywgJ0F1dG8tZml4ICsgcmV0cnkgYXR0ZW1wdHMgYWZ0ZXIgYSBmYWlsdXJlIChkZXBsb3kgc2NyaXB0cyBhcmUgaWRlbXBvdGVudCknLCAnMScpXG4gICAgLm9wdGlvbignLS10ZWFyZG93bicsICdUZWFyIGRvd24gYW4gZXhpc3RpbmcgZGVwbG95bWVudCBpbnN0ZWFkIG9mIGNyZWF0aW5nIG9uZSAoZ2F0ZWQ7IEFXUyB0YXJnZXRzIHJlcXVpcmUgYSB0eXBlZCBjb25maXJtYXRpb24pJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1zdGFjay1uYW1lIDxuYW1lPicsICdDbG91ZEZvcm1hdGlvbiBzdGFjayBuYW1lIChFQzIpIGZvciB0aGUgZGVwbG95IEFORCB0ZWFyZG93biDigJQgZGVmYXVsdHMgdG8gcGlwZWxpbmUtYnVpbGRlciAoc2V0IGl0IHRvIHJ1biBhIHNlY29uZCBlbnZpcm9ubWVudCknKVxuICAgIC5vcHRpb24oJy0tY2x1c3Rlci1uYW1lIDxuYW1lPicsICdFS1MgY2x1c3RlciBuYW1lIGZvciB0aGUgZGVwbG95IEFORCB0ZWFyZG93biDigJQgZGVmYXVsdHMgdG8gcGlwZWxpbmUtYnVpbGRlcicpXG4gICAgLm9wdGlvbignLS1mb3JjZScsICdTa2lwIHRoZSB0ZWFyZG93biB0eXBlZC1jb25maXJtYXRpb24gKERBTkdFUk9VUyDigJQgZm9yIENJL2F1dG9tYXRpb24gb25seSknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLWluaXQgPG1vZGU+JywgJ1Bvc3QtZGVwbG95IGluaXRpYWxpemF0aW9uOiBhdXRvIChERUZBVUxUIOKAlCByZWdpc3RlciBhZG1pbiArIGxvYWQgcGx1Z2lucy9jb21wbGlhbmNlL3NhbXBsZXM7IG9uIGVjMiB0aGUgaW5zdGFuY2UgZG9lcyBpdCBpdHNlbGYgb24gZmlyc3QgYm9vdCksIG1hbnVhbCAoZG9uXFwndCBzZWxmLWluaXQg4oCUIHN1cmZhY2UgdGhlIHN0ZXAgZm9yIHlvdSB0byBydW4sIGUuZy4gdG8gc2V0IHJlYWwgYWRtaW4gY3JlZHMpLCBvciBza2lwIChkbyBub3RoaW5nKS4gbG9jYWwvbWluaWt1YmUvZWtzIHJ1biBpbml0IHZpYSBwcm92aXNpb24gdW5sZXNzIHNraXAuJylcbiAgICAvLyBCb290c3RyYXAgKHNwYXJzZSBjbG9uZSkg4oCUIHByb3Zpc2lvbiBhIGZyZXNoIG1hY2hpbmUgaW4gb25lIGNvbW1hbmQuXG4gICAgLm9wdGlvbignLS1yZXBvIFt1cmxdJywgJ0Jvb3RzdHJhcDogZ2l0LWNsb25lIHRoZSBwbGF0Zm9ybSByZXBvIGZpcnN0IChzcGFyc2Ug4oCUIG9ubHkgdGhlIG5lZWRlZCBkZXBsb3kgZm9sZGVycyksIHRoZW4gcnVuIGZyb20gaXQgKG5vIHZhbHVlID0gdGhlIHVwc3RyZWFtIGRlZmF1bHQpJylcbiAgICAub3B0aW9uKCctLXJlZiA8cmVmPicsICdHaXQgYnJhbmNoL3RhZyB0byBjaGVjayBvdXQgd2hlbiBib290c3RyYXBwaW5nIChkZWZhdWx0OiBtYWluKScpXG4gICAgLm9wdGlvbignLS13b3JrZGlyIDxkaXI+JywgJ0RpcmVjdG9yeSB0byBjbG9uZSBpbnRvIC8gcnVuIGZyb20gd2hlbiBib290c3RyYXBwaW5nIChkZWZhdWx0OiBwaXBlbGluZS1idWlsZGVyKScpXG4gICAgLy8gUG9zdC1pbnN0YWxsIGxvYWRzIOKAlCBlYWNoIG9wdC1pbiBzdGVwIGFsc28gYWRkcyBpdHMgZGVwbG95IGZvbGRlciB0byB0aGUgc3BhcnNlIGNsb25lLlxuICAgIC5vcHRpb24oJy0td2l0aC1wbHVnaW5zJywgJ1Bvc3QtaW5zdGFsbDogYnVpbGQgKyBsb2FkIHBsdWdpbnMgKGFkZHMgZGVwbG95L3BsdWdpbnMsIGRlcGxveS9jb2RlYnVpbGQpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLWNvbXBsaWFuY2UnLCAnUG9zdC1pbnN0YWxsOiBsb2FkIHNhbXBsZSBjb21wbGlhbmNlIHJ1bGVzL3BvbGljaWVzIChhZGRzIGRlcGxveS9jb21wbGlhbmNlKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0td2l0aC1zYW1wbGVzJywgJ1Bvc3QtaW5zdGFsbDogbG9hZCBzYW1wbGUgcGlwZWxpbmUgdGVtcGxhdGVzIChhZGRzIGRlcGxveS9zYW1wbGVzKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0td2l0aC1hbGwnLCAnUG9zdC1pbnN0YWxsOiBwbHVnaW5zICsgY29tcGxpYW5jZSArIHNhbXBsZXMnLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLWJ1aWxkLWJvb3RzdHJhcCcsICdCdWlsZCArIHB1Ymxpc2ggdGhlIENvZGVCdWlsZCBib290c3RyYXAgaW1hZ2UgZHVyaW5nIHJlZ2lzdGVyIChhZGRzIGRlcGxveS9jb2RlYnVpbGQpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLXNtb2tlLXRlc3QnLCAnUG9zdC1pbnN0YWxsOiByZWFkLW9ubHkgQVBJIHJlYWNoYWJpbGl0eSBjaGVjaycsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0td2l0aC1ldmVudHMnLCAnUG9zdC1pbnN0YWxsIChBV1MpOiBldmVudCBpbmdlc3Rpb24gYnVuZGxlIOKAlCBzdG9yZS10b2tlbiAoSldUIOKGkiBTZWNyZXRzIE1hbmFnZXIpIHRoZW4gc2V0dXAtZXZlbnRzIChFdmVudEJyaWRnZS9MYW1iZGEpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1wb3N0LXN0ZXAgPGNtZD4nLCAnUnVuIGFuIGV4dHJhIGNvbW1hbmQgYWZ0ZXIgdGhlIGxvYWRzIChyZXBlYXRhYmxlLCBpbiBvcmRlciknLCBjb2xsZWN0U3RlcCwgW10pXG4gICAgLm9wdGlvbignLS1hZG1pbi1lbWFpbCA8YWRkcj4nLCAnQWRtaW4gZW1haWwgZm9yIG5vbi1pbnRlcmFjdGl2ZSByZWdpc3RlciAoc2V0cyBQTEFURk9STV9JREVOVElGSUVSKScpXG4gICAgLm9wdGlvbignLS1hZG1pbi1wYXNzd29yZCA8cHc+JywgJ0FkbWluIHBhc3N3b3JkIGZvciBub24taW50ZXJhY3RpdmUgcmVnaXN0ZXIgKHNldHMgUExBVEZPUk1fUEFTU1dPUkQpJylcbiAgICAub3B0aW9uKCctLWpzb24nLCAnUHJpbnQgdGhlIHBsYW4gYXMgSlNPTiBhbmQgZXhpdCBXSVRIT1VUIHJ1bm5pbmcgKHRoZSBvbmx5IG5vbi1leGVjdXRpbmcgbW9kZSDigJQgZm9yIHRvb2xpbmcvQ0kgaW5zcGVjdGlvbiknLCBmYWxzZSlcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignUHJvdmlzaW9uJyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFJlc29sdmUgdGhlIHNpbmdsZSBwb3N0LWRlcGxveSBpbml0IG1vZGUgKGF1dG98bWFudWFsfHNraXApIGZyb20gLS1pbml0LiBUd28gaW50ZXJuYWwgc2lnbmFscyBkZXJpdmUgZnJvbSBpdDogd2hldGhlciBpbml0IGhhcHBlbnMgYXRcbiAgICAgICAgLy8gYWxsLCBhbmQgd2hldGhlciB0aGUgREVQTE9ZIHNlbGYtcnVucyBpdCAodnMuIHdlIHN1cmZhY2UgaXQpLlxuICAgICAgICBjb25zdCBpbml0TW9kZSA9IHJlc29sdmVJbml0TW9kZShvcHRpb25zKTtcbiAgICAgICAgaWYgKGluaXRNb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcihgSW52YWxpZCAtLWluaXQgdmFsdWUgJyR7U3RyaW5nKG9wdGlvbnMuaW5pdCl9Jy4gVXNlIG9uZSBvZjogJHtJTklUX01PREVTLmpvaW4oJyB8ICcpfS5gKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5pdEVuYWJsZWQgPSBpbml0TW9kZSAhPT0gJ3NraXAnOyAvLyBza2lwIOKGkiBubyByZWdpc3Rlci9sb2FkcyBhdCBhbGxcbiAgICAgICAgY29uc3Qgc2VsZkluaXQgPSBpbml0TW9kZSA9PT0gJ2F1dG8nOyAvLyBhdXRvIOKGkiB0aGUgZGVwbG95IGluaXRpYWxpemVzIGl0c2VsZlxuXG4gICAgICAgIC8vIDEuIEFzc2VtYmxlIHBhcmFtcyBmcm9tIGV4cGxpY2l0IGZsYWdzIChmbGFncyBhbHdheXMgd2luIG92ZXIgTkwgcGFyc2UpLlxuICAgICAgICBjb25zdCBwYXJhbXMgPSBidWlsZFBhcmFtcyhvcHRpb25zLCBzZWxmSW5pdCk7XG4gICAgICAgIGNvbnN0IGFpT3B0cyA9IHsgcHJvdmlkZXI6IG9wdGlvbnMuYWlQcm92aWRlciwgbW9kZWw6IG9wdGlvbnMubW9kZWwgfTtcblxuICAgICAgICAvLyBCb290c3RyYXAgKHNwYXJzZSBjbG9uZSkgKyBwb3N0LWluc3RhbGwgc2VsZWN0aW9ucy5cbiAgICAgICAgY29uc3Qgd2FudEJvb3RzdHJhcCA9IG9wdGlvbnMucmVwbyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMucmVwbyAhPT0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHdpdGhBbGwgPSBvcHRpb25zLndpdGhBbGwgPT09IHRydWU7XG4gICAgICAgIGNvbnN0IGFueUxvYWRGbGFnID0gd2l0aEFsbCB8fCBMT0FEX1NURVBTLnNvbWUoKHMpID0+IG9wdGlvbnNbcy5mbGFnXSA9PT0gdHJ1ZSk7XG4gICAgICAgIGxldCBlbmFibGVkTG9hZElkczogc3RyaW5nW10gPSBMT0FEX1NURVBTLmZpbHRlcigocykgPT4gd2l0aEFsbCB8fCBvcHRpb25zW3MuZmxhZ10gPT09IHRydWUpLm1hcCgocykgPT4gcy5pZCk7XG4gICAgICAgIC8vIFdpdGggbm8gLS13aXRoLSogZmxhZ3MsIGFuIGludGVyYWN0aXZlIHJ1biBvZmZlcnMgZWFjaCBsb2FkIOKAlCBidXQgQUZURVIgdGhlXG4gICAgICAgIC8vIGNsb25lLCBzbyB0aGUgcXVlc3Rpb25zIGNvbWUgb25jZSB5b3UndmUgYWdyZWVkIHRvIHByb2NlZWQgKG5vdCB1cCBmcm9udCkuXG4gICAgICAgIC8vIEVhY2ggcGlja2VkIGxvYWQncyBmb2xkZXIgaXMgdGhlbiBmZXRjaGVkIHZpYSBhbiBhZGRpdGl2ZSBzcGFyc2UgcmUtc3luYy5cbiAgICAgICAgLy8gRmxhZ3MgLyAtLXllcyAvIC0tanNvbiAvIG5vbi1pbnRlcmFjdGl2ZSBzaGVsbHMgc2tpcCB0aGUgcHJvbXB0cy5cbiAgICAgICAgbGV0IHdpbGxQcm9tcHRMb2FkcyA9ICFvcHRpb25zLnllcyAmJiAhb3B0aW9ucy5qc29uICYmIEJvb2xlYW4ocHJvY2Vzcy5zdGRpbi5pc1RUWSkgJiYgIWFueUxvYWRGbGFnO1xuICAgICAgICBjb25zdCBwb3N0U3RlcEZsYWdzID0ge1xuICAgICAgICAgIGluaXQ6IGluaXRFbmFibGVkLFxuICAgICAgICAgIC8vIHNlbGZJbml0IChtb2RlIGF1dG8pIGRyb3BzIHRoZSBzdXJmYWNlZCByZWdpc3RlciBzdGVwIG9uIHRoZSBBV1MgdGFyZ2V0cyBpblxuICAgICAgICAgIC8vIHJlc29sdmVQb3N0U3RlcHMsIHNvIGEgc2VsZi1pbml0aWFsaXppbmcgZWMyL2VrcyBkZXBsb3kgZG9lc24ndCBhbHNvIHByaW50IGEgbWFudWFsXG4gICAgICAgICAgLy8gcmVnaXN0ZXIgc3RlcC4gRm9yIG1hbnVhbCBtb2RlIChvciBsb2NhbC9taW5pa3ViZSkgdGhlIHJlZ2lzdGVyIHN0ZXAgaXMgc3VyZmFjZWQuXG4gICAgICAgICAgYXV0b0luaXQ6IHNlbGZJbml0LFxuICAgICAgICAgIGJ1aWxkQm9vdHN0cmFwOiBvcHRpb25zLmJ1aWxkQm9vdHN0cmFwID09PSB0cnVlIHx8IGVuYWJsZWRMb2FkSWRzLmluY2x1ZGVzKCdwbHVnaW5zJyksXG4gICAgICAgICAgc21va2VUZXN0OiBvcHRpb25zLndpdGhTbW9rZVRlc3QgPT09IHRydWUsXG4gICAgICAgICAgZXZlbnRzOiBvcHRpb25zLndpdGhFdmVudHMgPT09IHRydWUsXG4gICAgICAgICAgc3RlcHM6IChvcHRpb25zLnBvc3RTdGVwID8/IFtdKSBhcyBzdHJpbmdbXSxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gQWRtaW4gY3JlZGVudGlhbHMgZm9yd2FyZGVkIGFzIGVudiBzbyByZWdpc3RlciBydW5zIG5vbi1pbnRlcmFjdGl2ZWx5LlxuICAgICAgICBjb25zdCBhZG1pbkVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYWRtaW5FbWFpbCA9PT0gJ3N0cmluZycpIGFkbWluRW52LlBMQVRGT1JNX0lERU5USUZJRVIgPSBvcHRpb25zLmFkbWluRW1haWw7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hZG1pblBhc3N3b3JkID09PSAnc3RyaW5nJykgYWRtaW5FbnYuUExBVEZPUk1fUEFTU1dPUkQgPSBvcHRpb25zLmFkbWluUGFzc3dvcmQ7XG5cbiAgICAgICAgLy8gMi4gT3B0aW9uYWxseSBwYXJzZSBhIG5hdHVyYWwtbGFuZ3VhZ2UgZ29hbCB0byBmaWxsIGFueSBHQVBTIChiZXN0LWVmZm9ydCkuXG4gICAgICAgIGxldCB0YXJnZXQ6IFRhcmdldElkIHwgdW5kZWZpbmVkID0gaXNUYXJnZXRJZChvcHRpb25zLnRhcmdldCkgPyBvcHRpb25zLnRhcmdldCA6IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKG9wdGlvbnMucHJvbXB0KSB7XG4gICAgICAgICAgaWYgKGlzQWlDb25maWd1cmVkKGFpT3B0cykpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IGF3YWl0IHBhcnNlR29hbChvcHRpb25zLnByb21wdCwgYWlPcHRzKTtcbiAgICAgICAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgICAgICAgaWYgKCF0YXJnZXQgJiYgaXNUYXJnZXRJZChwYXJzZWQudGFyZ2V0KSkgdGFyZ2V0ID0gcGFyc2VkLnRhcmdldDtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMocGFyc2VkKSkge1xuICAgICAgICAgICAgICAgIGlmIChrICE9PSAndGFyZ2V0JyAmJiBwYXJhbXNba10gPT09IHVuZGVmaW5lZCAmJiB2ICE9PSB1bmRlZmluZWQpIHBhcmFtc1trXSA9IHY7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmpzb24pIHtcbiAgICAgICAgICAgIC8vIERvbid0IHByaW50IGh1bWFuIHRleHQgYmVmb3JlIGEgLS1qc29uIHBsYW4gKGl0IHdvdWxkIGNvcnJ1cHQgdGhlIHN0cmVhbSkuXG4gICAgICAgICAgICBwcmludFdhcm5pbmcoJ0EgLS1wcm9tcHQgd2FzIGdpdmVuIGJ1dCBubyBBSSBrZXkgaXMgc2V0IOKAlCBpZ25vcmluZyBpdCBhbmQgdXNpbmcgZmxhZ3Mgb25seS4gU2V0IEFOVEhST1BJQ19BUElfS0VZIChvciAtLWFpLXByb3ZpZGVyICsgaXRzIGtleSkuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVzb2x2ZSBlbWFpbCBOT1cgKGFmdGVyIHRoZSBOTCBtZXJnZSk6IGFuIGV4cGxpY2l0IC0tZW1haWwvLS1uby1lbWFpbCBmbGFnIHdpbnMsXG4gICAgICAgIC8vIGVsc2UgYW4gQUktcGFyc2VkIGBlbWFpbGAgKG1lcmdlZCBpbnRvIHBhcmFtcy5lbWFpbCBhYm92ZSkgZGVjaWRlcywgZWxzZSBkZWZhdWx0LW9uLlxuICAgICAgICAvLyBDb2VyY2UgdG8gdGhlIHR3byBsb2FkLWJlYXJpbmcga2V5cyBhc3NlbWJsZUNvbW1hbmQgZW1pdHMuXG4gICAgICAgIGNvbnN0IGVtYWlsQ2hvaWNlID0gb3B0aW9ucy5lbWFpbCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyBvcHRpb25zLmVtYWlsXG4gICAgICAgICAgOiAodHlwZW9mIHBhcmFtcy5lbWFpbCA9PT0gJ2Jvb2xlYW4nID8gcGFyYW1zLmVtYWlsIDogdW5kZWZpbmVkKTtcbiAgICAgICAgcGFyYW1zLmVtYWlsID0gZW1haWxDaG9pY2UgPT09IHRydWU7XG4gICAgICAgIHBhcmFtcy5ub0VtYWlsID0gZW1haWxDaG9pY2UgPT09IGZhbHNlO1xuXG4gICAgICAgIC8vIDMuIE9wdGlvbmFsIGZhaWx1cmUgZGlhZ25vc2lzIChpbmRlcGVuZGVudCBvZiBhIGRlcGxveSBwbGFuKS5cbiAgICAgICAgaWYgKG9wdGlvbnMuZGlhZ25vc2UpIHtcbiAgICAgICAgICBhd2FpdCBydW5EaWFnbm9zZShvcHRpb25zLmRpYWdub3NlLCBvcHRpb25zLmpzb24gPT09IHRydWUsIGFpT3B0cywgZXhlY3V0aW9uSWQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdpdGggYC0taW5pdCBhdXRvYCAodGhlIGRlZmF1bHQpIHRoZSBFQzIgaW5zdGFuY2UgbG9hZHMgcGx1Z2lucy9jb21wbGlhbmNlL3NhbXBsZXNcbiAgICAgICAgLy8gaXRzZWxmIG9uIHRoZSBib3ggKGJvb3RzdHJhcC5zaCBoYXJkY29kZXMgTE9BRF8qPXkpLCBzbyB0aGUgbG9jYWwgbG9hZCBwaWNrZXIg4oCUIGFuZFxuICAgICAgICAvLyB0aGUgbG9hZC1mb2xkZXIgZmV0Y2ggaXQgdHJpZ2dlcnMg4oCUIGlzIHBvaW50bGVzcy4gU2tpcCBib3RoICh0aGUgaW5zdGFuY2UgaGFzIGl0c1xuICAgICAgICAvLyBvd24gY2hlY2tvdXQpLlxuICAgICAgICBpZiAoc2VsZkluaXQgJiYgdGFyZ2V0ID09PSAnZWMyJykge1xuICAgICAgICAgIHdpbGxQcm9tcHRMb2FkcyA9IGZhbHNlO1xuICAgICAgICAgIGVuYWJsZWRMb2FkSWRzID0gW107XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZkluaXQgJiYgdGFyZ2V0ID09PSAnZWtzJyAmJiAhYW55TG9hZEZsYWcpIHtcbiAgICAgICAgICAvLyBgLS1pbml0IGF1dG9gIG9uIGVrcyBpbml0aWFsaXplcyBsaWtlIGVjMjogTk8gaW50ZXJhY3RpdmUgcGlja2VyIOKAlCBkZWZhdWx0IHRvXG4gICAgICAgICAgLy8gbG9hZGluZyBBTEwgb2YgcGx1Z2lucyArIGNvbXBsaWFuY2UgKyBzYW1wbGVzIChzZXR1cC5zaCdzIGZpbmFsIHBoYXNlIGhhcmRjb2Rlc1xuICAgICAgICAgIC8vIExPQURfKj15KS4gc2V0dXAuc2ggcnVucyB0aGUgbG9hZHMgaXRzZWxmIChvdmVyIGEga3ViZWN0bCBwb3J0LWZvcndhcmQpLCBidXQgd2VcbiAgICAgICAgICAvLyBzdGlsbCByZXNvbHZlIHRoZW0gaGVyZSBzbyB0aGUgc3BhcnNlIGNsb25lIGZldGNoZXMgdGhlIGZvbGRlcnMgc2V0dXAuc2ggYnVpbGRzXG4gICAgICAgICAgLy8gZnJvbS4gRXhwbGljaXQgYC0td2l0aC0qYCBmbGFncyBvdmVycmlkZTsgYC0taW5pdCBtYW51YWxgIC8gYC0taW5pdCBza2lwYCBvcHQgb3V0LlxuICAgICAgICAgIHdpbGxQcm9tcHRMb2FkcyA9IGZhbHNlO1xuICAgICAgICAgIGVuYWJsZWRMb2FkSWRzID0gTE9BRF9TVEVQUy5tYXAoKHMpID0+IHMuaWQpO1xuICAgICAgICAgIHBvc3RTdGVwRmxhZ3MuYnVpbGRCb290c3RyYXAgPSBvcHRpb25zLmJ1aWxkQm9vdHN0cmFwID09PSB0cnVlIHx8IGVuYWJsZWRMb2FkSWRzLmluY2x1ZGVzKCdwbHVnaW5zJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbWluaWt1YmUvbG9jYWwga2VlcCB0aGUgaW50ZXJhY3RpdmUgcGlja2VyIChsb2NhbC1kZXY7IG5vIGAtLWluaXQgYXV0b2AgbG9hZCBwYXJpdHkpLlxuXG4gICAgICAgIC8vIDQuIE5lZWQgYSB0YXJnZXQgdG8gYXNzZW1ibGUgYSBwbGFuLlxuICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgIHByaW50RXJyb3IoYE5vIHRhcmdldCBzcGVjaWZpZWQuIFBhc3MgLS10YXJnZXQgPCR7VEFSR0VUX0lEUy5qb2luKCd8Jyl9PiBvciBkZXNjcmliZSB0aGUgZ29hbCB3aXRoIC0tcHJvbXB0LmApO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNwZWMgPSBUQVJHRVRTW3RhcmdldF07XG4gICAgICAgIGxldCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gICAgICAgIC8vIDRiLiBUZWFyZG93biBtb2RlIOKAlCB0aGUgZGVzdHJveSBjb3VudGVycGFydCBvZiBwcm92aXNpb25pbmcgKHNlZSBydW5UZWFyZG93bikuXG4gICAgICAgIGlmIChvcHRpb25zLnRlYXJkb3duKSB7XG4gICAgICAgICAgYXdhaXQgcnVuVGVhcmRvd24oc3BlYywgdGFyZ2V0LCBjd2QsIGV4ZWN1dGlvbklkLCBvcHRpb25zKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNYWtlIHByZXZpb3VzbHktZmV0Y2hlZCBzaW5nbGUtYmluYXJ5IHRvb2xzIChlLmcuIHlxKSB2aXNpYmxlIHRvIHRoZVxuICAgICAgICAvLyBwcmVyZXEgY2hlY2tzICsgdGhlIGRlcGxveSDigJQgdGhleSBsaXZlIGluIHRoZSB0b29scyBjYWNoZSwgbm90IG9uIHRoZVxuICAgICAgICAvLyBzeXN0ZW0gUEFUSC4gKEJvdGggYGhhcygpYCBhbmQgdGhlIGRlcGxveSdzIGBiYXNoIC1sY2AgaW5oZXJpdCB0aGlzLilcbiAgICAgICAgd2l0aFRvb2xzT25QYXRoKCk7XG4gICAgICAgIC8vIEhhcmQtcmVxdWlyZSBwbHVnaW4gcHJlcmVxcyAoZS5nLiB5cSBvbiBtaW5pa3ViZSkgb25seSB3aGVuIHBsdWdpbnMgaXMgRVhQTElDSVRMWVxuICAgICAgICAvLyBzZWxlY3RlZCDigJQgTk9UIG9uIHRoZSB3aWxsUHJvbXB0TG9hZHMgZ3Vlc3MsIHdoaWNoIHdvdWxkIGJsb2NrL3Byb21wdCBiZWZvcmUgdGhlXG4gICAgICAgIC8vIHVzZXIgaGFzIGV2ZW4gYmVlbiBhc2tlZCB3aGV0aGVyIHRoZXkgd2FudCBwbHVnaW5zLiBJZiB0aGV5IHBpY2sgcGx1Z2lucyBpbiB0aGVcbiAgICAgICAgLy8gaW50ZXJhY3RpdmUgcHJvbXB0LCB3ZSByZS1jaGVjayArIG9mZmVyIHRvIGZldGNoIHJpZ2h0IGFmdGVyIHRoYXQgc2VsZWN0aW9uIChiZWxvdykuXG4gICAgICAgIGxldCBwcmVyZXFzID0gY2hlY2tQcmVyZXFzKHRhcmdldCwgeyBib290c3RyYXA6IHdhbnRCb290c3RyYXAsIHdpdGhQbHVnaW5zOiBlbmFibGVkTG9hZElkcy5pbmNsdWRlcygncGx1Z2lucycpIH0pO1xuICAgICAgICBjb25zdCB7IGNvbW1hbmQsIG1pc3NpbmcgfSA9IGFzc2VtYmxlQ29tbWFuZChzcGVjLCBwYXJhbXMpO1xuICAgICAgICBjb25zdCB1cmwgPSBkZXJpdmVIZWFsdGhVcmwodGFyZ2V0LCBwYXJhbXMpO1xuXG4gICAgICAgIC8vIFNwYXJzZSBib290c3RyYXAgY2xvbmUgY29tbWFuZCAoY29tbW9uIGJhc2UgKyB0YXJnZXQgKyBzZWxlY3RlZCBsb2FkcykuXG4gICAgICAgIC8vIEludGVyYWN0aXZlIGxvYWRzIGFyZSBjaG9zZW4gQUZURVIgdGhlIGNsb25lLCBzbyB0aGUgY2xvbmUgc3RheXMgbWluaW1hbCDigJRcbiAgICAgICAgLy8gZWFjaCBwaWNrZWQgbG9hZCdzIGZvbGRlciBpcyBmZXRjaGVkIHRoZW4gdmlhIGFuIGFkZGl0aXZlIHNwYXJzZSByZS1zeW5jLlxuICAgICAgICBjb25zdCBzcGFyc2VQYXRocyA9IHNwYXJzZVBhdGhzRm9yKHRhcmdldCwgZW5hYmxlZExvYWRJZHMpO1xuICAgICAgICBjb25zdCBib290c3RyYXAgPSByZXNvbHZlQm9vdHN0cmFwKFxuICAgICAgICAgIHsgcmVwbzogdHlwZW9mIG9wdGlvbnMucmVwbyA9PT0gJ3N0cmluZycgPyBvcHRpb25zLnJlcG8gOiB1bmRlZmluZWQsIHJlZjogb3B0aW9ucy5yZWYsIHdvcmtkaXI6IG9wdGlvbnMud29ya2RpciwgZnVsbDogIWdpdFN1cHBvcnRzU3BhcnNlQ2hlY2tvdXQoKSB9LFxuICAgICAgICAgIHNwYXJzZVBhdGhzLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBib290c3RyYXBDbWQgPSB3YW50Qm9vdHN0cmFwID8gYm9vdHN0cmFwQ29tbWFuZChib290c3RyYXApIDogbnVsbDtcblxuICAgICAgICAvLyBSZXNvbHZlIHBvc3QtaW5zdGFsbCBzdGVwcyAocmVnaXN0ZXIg4oaSIHNtb2tlIOKGkiBldmVudHMg4oaSIGN1c3RvbSkuIFJlLXJlc29sdmVkXG4gICAgICAgIC8vIGFmdGVyIHRoZSBwb3N0LWNsb25lIGxvYWQgcHJvbXB0cyAoc2VlIGJlbG93KSB3aGVuIHRob3NlIHJ1biBpbnRlcmFjdGl2ZWx5LlxuICAgICAgICBsZXQgeyBzdGVwczogcG9zdFN0ZXBzLCBza2lwcGVkOiBza2lwcGVkU3RlcHMgfSA9IHJlc29sdmVQb3N0U3RlcHMoe1xuICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcmVnaW9uOiB0eXBlb2YgcGFyYW1zLnJlZ2lvbiA9PT0gJ3N0cmluZycgPyBwYXJhbXMucmVnaW9uIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGVuYWJsZWRMb2FkSWRzLFxuICAgICAgICAgIC4uLnBvc3RTdGVwRmxhZ3MsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBwcmVyZXFzLFxuICAgICAgICAgICAgcHJlcmVxc1NhdGlzZmllZDogcHJlcmVxc1NhdGlzZmllZChwcmVyZXFzKSxcbiAgICAgICAgICAgIG1pc3NpbmdJbnB1dHM6IG1pc3NpbmcubWFwKChtKSA9PiAoeyBmbGFnOiBtLmZsYWcsIGRlc2NyaXB0aW9uOiBtLmRlc2NyaXB0aW9uIH0pKSxcbiAgICAgICAgICAgIGJvb3RzdHJhcDogYm9vdHN0cmFwQ21kLFxuICAgICAgICAgICAgc3BhcnNlUGF0aHM6IHdhbnRCb290c3RyYXAgPyBzcGFyc2VQYXRocyA6IG51bGwsXG4gICAgICAgICAgICBjb21tYW5kLFxuICAgICAgICAgICAgcG9zdFN0ZXBzOiBwb3N0U3RlcHMubWFwKChzKSA9PiAoeyBpZDogcy5pZCwgbGFiZWw6IHMubGFiZWwsIGNvbW1hbmQ6IHMuY29tbWFuZCB9KSksXG4gICAgICAgICAgICBza2lwcGVkUG9zdFN0ZXBzOiBza2lwcGVkU3RlcHMsXG4gICAgICAgICAgfSwgbnVsbCwgMikpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDUuIFByaW50IHRoZSBwbGFuIChzaG93biBiZWZvcmUgdGhlIGdhdGVkIGV4ZWN1dGlvbiBiZWxvdykuXG4gICAgICAgIHByaW50UGxhbih7IHNwZWMsIHRhcmdldCwgcHJlcmVxcywgbWlzc2luZywgYm9vdHN0cmFwLCBib290c3RyYXBDbWQsIHNwYXJzZVBhdGhzLCBjb21tYW5kLCBwb3N0U3RlcHMsIHNraXBwZWRTdGVwcyB9KTtcblxuICAgICAgICAvLyA2LiBPZmZlciB0byBmZXRjaCBhbnkgbWlzc2luZyBzaW5nbGUtYmluYXJ5IHByZXJlcSAoc2VlIG9mZmVyVG9vbEZldGNoKS5cbiAgICAgICAgcHJlcmVxcyA9IGF3YWl0IG9mZmVyVG9vbEZldGNoKHByZXJlcXMsIG9wdGlvbnMueWVzLCAoKSA9PiBjaGVja1ByZXJlcXModGFyZ2V0LCB7IGJvb3RzdHJhcDogd2FudEJvb3RzdHJhcCwgd2l0aFBsdWdpbnM6IGVuYWJsZWRMb2FkSWRzLmluY2x1ZGVzKCdwbHVnaW5zJykgfSkpO1xuXG4gICAgICAgIC8vIDdiLiBHYXRlZCBleGVjdXRpb24uIENoZWNrIHByZXJlcXMgLyByZXF1aXJlZCBpbnB1dHMgZmlyc3Qg4oCUIHRoaXMgYWxzb1xuICAgICAgICAvLyBjYXRjaGVzIGEgbWlzc2luZyBgZ2l0YCB3aGVuIGJvb3RzdHJhcHBpbmcuXG4gICAgICAgIGNvbnN0IGJsb2NrZWQgPSBleGVjdXRpb25CbG9ja2VkKHByZXJlcXMsIG1pc3NpbmcpO1xuICAgICAgICBpZiAoYmxvY2tlZCkge1xuICAgICAgICAgIHByaW50RXJyb3IoYENhbid0IHN0YXJ0IGp1c3QgeWV0IOKAlCAke2Jsb2NrZWR9LiBSZXNvbHZlIHRoYXQgYW5kIHJlLXJ1bi5gKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb21taXQgZ2F0ZSDigJQgY29uZmlybSBCRUZPUkUgYW55IHNpZGUgZWZmZWN0IChjbG9uZSwgLmVudiwgZGVwbG95KSBzbyBhIFwiTm9cIlxuICAgICAgICAvLyBsZWF2ZXMgbm90aGluZyBiZWhpbmQuIFRoZSBwb3J0IGNoZWNrICsgb3B0aW9uYWwgbG9hZHMgKyAuZW52IGJlbG93IGFyZSBwYXJ0IG9mXG4gICAgICAgIC8vIGV4ZWN1dGluZyB0aGUgYWdyZWVkLXRvIHBsYW4uXG4gICAgICAgIGlmICghKGF3YWl0IGNvbmZpcm0oYFxcblByb2NlZWQgd2l0aCBwcm92aXNpb25pbmcgJHtzcGVjLmxhYmVsfT9gLCBvcHRpb25zLnllcykpKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKCdObyBwcm9ibGVtIOKAlCBub3RoaW5nIHdhcyBjaGFuZ2VkLicpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDdhLzdiLiBTcGFyc2UtY2xvbmUgKGlmIC0tcmVwbyBvciBhY2NlcHRlZCBpbnRlcmFjdGl2ZWx5KSArIGxvY2F0ZSB0aGUgZGVwbG95XG4gICAgICAgIC8vIGVudHJ5cG9pbnQsIHJlcG9pbnRpbmcgY3dkIGludG8gdGhlIGNsb25lLiBTZWUgYm9vdHN0cmFwQW5kTG9jYXRlLlxuICAgICAgICBjb25zdCBsb2NhdGVkID0gYXdhaXQgYm9vdHN0cmFwQW5kTG9jYXRlKHNwZWMsIGJvb3RzdHJhcCwgYm9vdHN0cmFwQ21kLCBzcGFyc2VQYXRocywgY3dkLCBvcHRpb25zKTtcbiAgICAgICAgY3dkID0gbG9jYXRlZC5jd2Q7XG4gICAgICAgIGNvbnN0IGJvb3RzdHJhcHBlZCA9IGxvY2F0ZWQuYm9vdHN0cmFwcGVkO1xuICAgICAgICBpZiAoIWxvY2F0ZWQub2spIHJldHVybjtcblxuICAgICAgICAvLyBIb3N0LXBvcnQgcHJlLWZsaWdodCDigJQgbm93IHRoYXQgdGhlIGRlcGxveSBzb3VyY2UgaXMgb24gZGlzayAocG9zdC1jbG9uZSksXG4gICAgICAgIC8vIGRlcml2ZSB0aGUgcG9ydHMgZnJvbSBpdCAoY29tcG9zZSAvIHNldHVwLnNoKSBhbmQgc3RvcCBvbiBhIGZhdGFsIGNvbmZsaWN0XG4gICAgICAgIC8vIGJlZm9yZSBkZXBsb3lpbmcuIFNlZSBwcmVmbGlnaHRQb3J0cy5cbiAgICAgICAgaWYgKCEoYXdhaXQgcHJlZmxpZ2h0UG9ydHMoc3BlYywgdGFyZ2V0LCBjd2QpKSkge1xuICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9wdC1pbiBsb2FkcyDigJQgb2ZmZXJlZCBBRlRFUiB0aGUgY2xvbmUgKHNlZSByZXNvbHZlTG9hZHNJbnRlcmFjdGl2ZWx5KTsgaXRcbiAgICAgICAgLy8gcHJvbXB0cywgYWRkaXRpdmVseSBzcGFyc2UtZmV0Y2hlcyB0aGUgcGlja2VkIGZvbGRlcnMsIGFuZCByZS1yZXNvbHZlcyB0aGVcbiAgICAgICAgLy8gcG9zdC1pbnN0YWxsIHN0ZXBzIHdpdGggdGhlIHNlbGVjdGlvbnMuXG4gICAgICAgIGlmICh3aWxsUHJvbXB0TG9hZHMpIHtcbiAgICAgICAgICBjb25zdCBsb2FkZWQgPSBhd2FpdCByZXNvbHZlTG9hZHNJbnRlcmFjdGl2ZWx5KFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgdHlwZW9mIHBhcmFtcy5yZWdpb24gPT09ICdzdHJpbmcnID8gcGFyYW1zLnJlZ2lvbiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGN3ZCxcbiAgICAgICAgICAgIGJvb3RzdHJhcHBlZCxcbiAgICAgICAgICAgIGJvb3RzdHJhcCxcbiAgICAgICAgICAgIHBvc3RTdGVwRmxhZ3MsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlbmFibGVkTG9hZElkcyA9IGxvYWRlZC5lbmFibGVkTG9hZElkcztcbiAgICAgICAgICBwb3N0U3RlcHMgPSBsb2FkZWQuc3RlcHM7XG4gICAgICAgICAgc2tpcHBlZFN0ZXBzID0gbG9hZGVkLnNraXBwZWQ7XG4gICAgICAgICAgaWYgKGVuYWJsZWRMb2FkSWRzLmluY2x1ZGVzKCdwbHVnaW5zJykpIHtcbiAgICAgICAgICAgIGF3YWl0IHJlY2hlY2tQbHVnaW5QcmVyZXFzKHRhcmdldCwgd2FudEJvb3RzdHJhcCwgcHJlcmVxcywgb3B0aW9ucy55ZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBlbnN1cmVMb2NhbEVudkZpbGUodGFyZ2V0LCBzcGVjLCBjd2QsIG9wdGlvbnMueWVzKTtcblxuICAgICAgICAvLyA3Yy4gUnVuIHRoZSBkZXBsb3kgd2l0aCBhIGJvdW5kZWQgYXV0by1maXggKyByZXRyeSBsb29wIChzZWUgcnVuRGVwbG95V2l0aFJldHJ5KS5cbiAgICAgICAgY29uc3QgeyBzdWNjZWVkZWQsIHJ1blBhcmFtcyB9ID0gYXdhaXQgcnVuRGVwbG95V2l0aFJldHJ5KHNwZWMsIHVybCwgY3dkLCBwYXJhbXMsIGFpT3B0cywgb3B0aW9ucyk7XG4gICAgICAgIGlmICghc3VjY2VlZGVkKSB7IHByb2Nlc3MuZXhpdENvZGUgPSAxOyByZXR1cm47IH1cbiAgICAgICAgcHJpbnRTdWNjZXNzKCdEZXBsb3kgY29tbWFuZCBjb21wbGV0ZWQuJyk7XG5cbiAgICAgICAgLy8gN2QuIFNFUyBwb3N0LWRlcGxveSBndWlkYW5jZSAoYXN5bmMgREtJTSArIHNhbmRib3ggKyBib3VuY2UgdG9waWMpLlxuICAgICAgICAvLyBTRVMgaXMgcHJvdmlzaW9uZWQgQlkgREVGQVVMVCBvbiBBV1MgZGVwbG95cywgc28gc3VyZmFjZSB0aGUgZ3VpZGFuY2VcbiAgICAgICAgLy8gZm9yIGVjMi9la3MgdW5sZXNzIHRoZSBvcGVyYXRvciBvcHRlZCBvdXQgd2l0aCAtLW5vLWVtYWlsLlxuICAgICAgICBjb25zdCBzZXNQcm92aXNpb25lZCA9ICh0YXJnZXQgPT09ICdlYzInIHx8IHRhcmdldCA9PT0gJ2VrcycpICYmIHJ1blBhcmFtcy5ub0VtYWlsICE9PSB0cnVlO1xuICAgICAgICBpZiAoc2VzUHJvdmlzaW9uZWQpIHtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ1NFUyDigJQgbmV4dCBzdGVwcycpO1xuICAgICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBzZXNQb3N0RGVwbG95R3VpZGFuY2UoKSkgcHJpbnRJbmZvKGDigKIgJHtsaW5lfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gN2UuIFZlcmlmeSBoZWFsdGggKENSRUFURV9DT01QTEVURSAhPSBzZXJ2aW5nKS5cbiAgICAgICAgaWYgKHVybCkgYXdhaXQgdmVyaWZ5SGVhbHRoKHRhcmdldCwgdXJsKTtcblxuICAgICAgICAvLyA3Zi4gUG9zdC1pbnN0YWxsIHN0ZXBzIChyZWdpc3RlciArIG9wdC1pbiBsb2Fkcywgc21va2UgdGVzdCwgZXZlbnRzLCBjdXN0b20pLlxuICAgICAgICAvLyBTZWUgcnVuUG9zdFN0ZXBzIOKAlCBpdCBzdXJmYWNlcyByZWdpc3RlciArIHRoZSBldmVudHMgYnVuZGxlIGFzIG1hbnVhbCBpbi1WUENcbiAgICAgICAgLy8gbmV4dC1zdGVwcyBvbiBFQzIvRUtTIGluc3RlYWQgb2YgYXV0by1ydW5uaW5nIChhbmQgZmFpbGluZykgdGhlbSBsb2NhbGx5LlxuICAgICAgICAvLyBhdXRvUnVuIChza2lwIHRoZSBzZWNvbmQgY29uZmlybSkgb25seSB3aGVuIHRoZSB1c2VyIGFjdHVhbGx5IFBJQ0tFRCBhIGxvYWQgaW4gdGhlXG4gICAgICAgIC8vIGludGVyYWN0aXZlIHByb21wdCDigJQgZGVjbGluaW5nIGV2ZXJ5IGxvYWQgc2hvdWxkbid0IHNpbGVudGx5IHJ1biByZWdpc3RlciB1bnByb21wdGVkLlxuICAgICAgICBjb25zdCBhdXRvUmFuTG9hZHMgPSB3aWxsUHJvbXB0TG9hZHMgJiYgZW5hYmxlZExvYWRJZHMubGVuZ3RoID4gMDtcbiAgICAgICAgYXdhaXQgcnVuUG9zdFN0ZXBzKHBvc3RTdGVwcywgc2tpcHBlZFN0ZXBzLCB0YXJnZXQsIGN3ZCwgYWRtaW5FbnYsIHsgeWVzOiBvcHRpb25zLnllcywgYXV0b1J1bjogYXV0b1JhbkxvYWRzLCBhdXRvSW5pdDogcG9zdFN0ZXBGbGFncy5hdXRvSW5pdCB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5HRU5FUkFMLCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IHRydWUsXG4gICAgICAgICAgY29udGV4dDogeyBjb21tYW5kOiAncHJvdmlzaW9uJywgZXhlY3V0aW9uSWQgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG59XG4iXX0=
|
|
318
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlzaW9uLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvcHJvdmlzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7R0FPRztBQUVILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUNMLFVBQVUsRUFDVixrQkFBa0IsRUFDbEIsV0FBVyxFQUNYLE9BQU8sRUFDUCxrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLGNBQWMsRUFDZCxTQUFTLEVBQ1Qsb0JBQW9CLEVBQ3BCLGVBQWUsRUFDZix5QkFBeUIsRUFDekIsa0JBQWtCLEVBQ2xCLFdBQVcsRUFDWCxZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksR0FDYixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUseUJBQXlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRyxPQUFPLEVBQ0wsZUFBZSxFQUNmLFVBQVUsRUFDVixVQUFVLEVBQ1YsY0FBYyxFQUNkLE9BQU8sRUFDUCxVQUFVLEdBRVgsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDakUsT0FBTyxFQUFF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Q0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVGhlIGBwcm92aXNpb25gIGNvbW1hbmQ6IGl0cyB+NDAtb3B0aW9uIHRhYmxlLCBhbmQgdGhlIHNlcXVlbmNpbmcgbmFycmF0aXZlXG4gKiB0aGF0IHJ1bnMgYSBwcm92aXNpb24gZW5kIHRvIGVuZC5cbiAqXG4gKiBUaGUgcGhhc2VzIHRoZW1zZWx2ZXMgbGl2ZSBpbiBgLi9wcm92aXNpb24tc3RlcHMudHNgIOKAlCBvbmUgZXhwb3J0ZWQgZnVuY3Rpb25cbiAqIGVhY2gg4oCUIHNvIHRoaXMgZmlsZSBjYW4gYmUgcmVhZCBhcyB3aGF0IGl0IGlzOiB3aGljaCBmbGFncyBleGlzdCwgYW5kIGluIHdoYXRcbiAqIG9yZGVyIHRoZSBzdGVwcyBydW4gYmVoaW5kIHdoaWNoIGdhdGVzLlxuICovXG5cbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHtcbiAgSU5JVF9NT0RFUyxcbiAgYm9vdHN0cmFwQW5kTG9jYXRlLFxuICBidWlsZFBhcmFtcyxcbiAgY29uZmlybSxcbiAgZW5zdXJlTG9jYWxFbnZGaWxlLFxuICBvZmZlclRvb2xGZXRjaCxcbiAgcHJlZmxpZ2h0UG9ydHMsXG4gIHByaW50UGxhbixcbiAgcmVjaGVja1BsdWdpblByZXJlcXMsXG4gIHJlc29sdmVJbml0TW9kZSxcbiAgcmVzb2x2ZUxvYWRzSW50ZXJhY3RpdmVseSxcbiAgcnVuRGVwbG95V2l0aFJldHJ5LFxuICBydW5EaWFnbm9zZSxcbiAgcnVuUG9zdFN0ZXBzLFxuICBydW5UZWFyZG93bixcbiAgdmVyaWZ5SGVhbHRoLFxufSBmcm9tICcuL3Byb3Zpc2lvbi1zdGVwcy5qcyc7XG5pbXBvcnQgeyBpc0FpQ29uZmlndXJlZCwgcGFyc2VHb2FsIH0gZnJvbSAnLi4vYWdlbnQvYWkuanMnO1xuaW1wb3J0IHsgYm9vdHN0cmFwQ29tbWFuZCwgcmVzb2x2ZUJvb3RzdHJhcCB9IGZyb20gJy4uL2FnZW50L2Jvb3RzdHJhcC5qcyc7XG5pbXBvcnQgeyBleGVjdXRpb25CbG9ja2VkIH0gZnJvbSAnLi4vYWdlbnQvZXhlY3V0b3IuanMnO1xuaW1wb3J0IHsgZGVyaXZlSGVhbHRoVXJsIH0gZnJvbSAnLi4vYWdlbnQvaGVhbHRoLmpzJztcbmltcG9ydCB7IHJlc29sdmVQb3N0U3RlcHMgfSBmcm9tICcuLi9hZ2VudC9wb3N0LXN0ZXBzLmpzJztcbmltcG9ydCB7IGNoZWNrUHJlcmVxcywgZ2l0U3VwcG9ydHNTcGFyc2VDaGVja291dCwgcHJlcmVxc1NhdGlzZmllZCB9IGZyb20gJy4uL2FnZW50L3ByZXJlcXMuanMnO1xuaW1wb3J0IHtcbiAgYXNzZW1ibGVDb21tYW5kLFxuICBpc1RhcmdldElkLFxuICBMT0FEX1NURVBTLFxuICBzcGFyc2VQYXRoc0ZvcixcbiAgVEFSR0VUUyxcbiAgVEFSR0VUX0lEUyxcbiAgdHlwZSBUYXJnZXRJZCxcbn0gZnJvbSAnLi4vYWdlbnQvdGFyZ2V0cy5qcyc7XG5pbXBvcnQgeyB3aXRoVG9vbHNPblBhdGggfSBmcm9tICcuLi9hZ2VudC90b29scy5qcyc7XG5pbXBvcnQgeyBzZXNQb3N0RGVwbG95R3VpZGFuY2UgfSBmcm9tICcuLi9hZ2VudC90cm91Ymxlc2hvb3QuanMnO1xuaW1wb3J0IHsgcHJpbnRDb21tYW5kSGVhZGVyIH0gZnJvbSAnLi4vdXRpbHMvY29tbWFuZC11dGlscy5qcyc7XG5pbXBvcnQgeyBFUlJPUl9DT0RFUywgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IHByaW50U2VjdGlvbiwgcHJpbnRJbmZvLCBwcmludFdhcm5pbmcsIHByaW50RXJyb3IsIHByaW50U3VjY2VzcyB9IGZyb20gJy4uL3V0aWxzL291dHB1dC11dGlscy5qcyc7XG5cbi8qKiBDb21tYW5kZXIgY29sbGVjdG9yOiBhY2N1bXVsYXRlIHJlcGVhdGVkIGAtLXBvc3Qtc3RlcGAgdmFsdWVzIGluIG9yZGVyLiAqL1xuZnVuY3Rpb24gY29sbGVjdFN0ZXAodmFsdWU6IHN0cmluZywgYWNjOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFsuLi5hY2MsIHZhbHVlXTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGBwcm92aXNpb25gIGNvbW1hbmQg4oCUIGFuIEFJLWFzc2lzdGVkIGluc3RhbGxlciBmb3IgdGhlIFBpcGVsaW5lXG4gKiBCdWlsZGVyIFBMQVRGT1JNIChsb2NhbC9taW5pa3ViZS9FQzIvRUtTKS4gSXQgcHJpbnRzIHRoZSBhc3NlbWJsZWQgcGxhblxuICogKHByZXJlcSBjaGVja3MsIE5MLWdvYWwgcGFyc2luZywgY29tbWFuZCBhc3NlbWJseSkgYW5kIHRoZW4gREVQTE9ZUywgZ2F0ZWQgYnlcbiAqIGNvbmZpcm1hdGlvbiBwcm9tcHRzIChgLS15ZXNgIHRvIGF1dG8tYWNjZXB0OyBgLS1qc29uYCBpcyB0aGUgb25seSBub24tZXhlY3V0aW5nXG4gKiBtb2RlLCBwcmludGluZyB0aGUgcGxhbiBmb3IgdG9vbGluZykuIFdpdGggYC0tcmVwb2AgaXQgY2FuIGJvb3RzdHJhcCBhIGZyZXNoXG4gKiBtYWNoaW5lIGJ5IHNwYXJzZWx5IGNsb25pbmcgb25seSB0aGUgZGVwbG95IGZvbGRlcnMgdGhlIHNlbGVjdGVkIHRhcmdldCArXG4gKiBvcHRpb25zIG5lZWQsIHRoZW4gcnVucyBwb3N0LWluc3RhbGwgc3RlcHMgKHJlZ2lzdGVyIGFkbWluLCBvcHQtaW4gbG9hZHMsXG4gKiBzbW9rZSB0ZXN0LCBjdXN0b20gY29tbWFuZHMpLiBgLS10ZWFyZG93bmAgcmVtb3ZlcyBhIGRlcGxveW1lbnQgaW5zdGVhZC5cbiAqXG4gKiBAcGFyYW0gcHJvZ3JhbSAtIFRoZSByb290IENvbW1hbmRlciBwcm9ncmFtIGluc3RhbmNlIHRvIGF0dGFjaCB0aGUgY29tbWFuZCB0by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbihwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZCgncHJvdmlzaW9uJylcbiAgICAuZGVzY3JpcHRpb24oJ0FJLWFzc2lzdGVkIGluc3RhbGxlciBmb3IgdGhlIHBsYXRmb3JtIChsb2NhbC9taW5pa3ViZS9FQzIvRUtTKTogZGVwbG95cyBpdCAoZ2F0ZWQgYnkgY29uZmlybWF0aW9uIHByb21wdHMpLCBvciAtLXRlYXJkb3duIHRvIHJlbW92ZScpXG4gICAgLm9wdGlvbignLXQsIC0tdGFyZ2V0IDx0YXJnZXQ+JywgYERlcGxveSB0YXJnZXQ6ICR7VEFSR0VUX0lEUy5qb2luKCcgfCAnKX1gKVxuICAgIC5vcHRpb24oJy1wLCAtLXByb21wdCA8dGV4dD4nLCAnTmF0dXJhbC1sYW5ndWFnZSBnb2FsIChwYXJzZWQgaW50byBwYXJhbXMgd2hlbiBhbiBBSSBrZXkgaXMgc2V0KScpXG4gICAgLm9wdGlvbignLS1yZWdpb24gPHJlZ2lvbj4nLCAnQVdTIHJlZ2lvbiAoRUMyL0VLUyknKVxuICAgIC5vcHRpb24oJy0tZG9tYWluIDxkb21haW4+JywgJ0Z1bGx5LXF1YWxpZmllZCBkb21haW4gbmFtZSAoRUMyL0VLUyknKVxuICAgIC5vcHRpb24oJy0taG9zdGVkLXpvbmUtaWQgPGlkPicsICdQdWJsaWMgUm91dGUgNTMgaG9zdGVkIHpvbmUgSUQgKEVDMi9FS1MpJylcbiAgICAub3B0aW9uKCctLWRlcGxveS1tb2RlIDxtb2RlPicsICdwdWJsaWMgfCBwcml2YXRlIChFQzIvRUtTKScpXG4gICAgLm9wdGlvbignLS1rZXktcGFpciA8bmFtZT4nLCAnRUMyIGtleSBwYWlyIChFQzIpJylcbiAgICAub3B0aW9uKCctLWluc3RhbmNlLXR5cGUgPHR5cGU+JywgJ0VDMiBpbnN0YW5jZSB0eXBlIChFQzIpJylcbiAgICAub3B0aW9uKCctLWxlYW4nLCAnRUMyOiB0cmltIG9wdGlvbmFsIG9ic2VydmFiaWxpdHkvYWRtaW4gc2VydmljZXMgc28gdGhlIGNvcmUgc3RhY2sgKyBtZXNoIGZpdHMgYSB0My54bGFyZ2UgKHBhaXIgd2l0aCAtLWluc3RhbmNlLXR5cGUgdDMueGxhcmdlKScpXG4gICAgLm9wdGlvbignLS1naGNyLXRva2VuIDx0b2tlbj4nLCAnR2l0SHViIFBBVCAocmVhZDpwYWNrYWdlcykg4oCUIG1hc2tlZCBpbiBvdXRwdXQnKVxuICAgIC5vcHRpb24oJy0tZW1haWwnLCAnRW5hYmxlIFNFUyB0cmFuc2FjdGlvbmFsIGVtYWlsIChvbiBieSBkZWZhdWx0IGZvciBBV1MpJylcbiAgICAub3B0aW9uKCctLW5vLWVtYWlsJywgJ1NraXAgU0VTICh0cmFuc2FjdGlvbmFsIGVtYWlsIGlzIHByb3Zpc2lvbmVkIGJ5IGRlZmF1bHQgb24gQVdTKScpXG4gICAgLm9wdGlvbignLS1lbWFpbC1mcm9tIDxhZGRyPicsICdTRVMgRnJvbSBhZGRyZXNzJylcbiAgICAub3B0aW9uKCctLWVtYWlsLWZyb20tbmFtZSA8bmFtZT4nLCAnU0VTIEZyb20gZGlzcGxheSBuYW1lJylcbiAgICAub3B0aW9uKCctLWFsZXJ0LWVtYWlsIDxhZGRyPicsICdTdWJzY3JpYmUgYW4gYWRkcmVzcyB0byB0aGUgYm91bmNlL2NvbXBsYWludCBTTlMgdG9waWMnKVxuICAgIC5vcHRpb24oJy0tc2tpcC1zZXMtaWRlbnRpdHknLCAnU2tpcCBTRVMgaWRlbnRpdHkgY3JlYXRpb24gKGRvbWFpbiBhbHJlYWR5IHZlcmlmaWVkKScpXG4gICAgLm9wdGlvbignLS1haS1wcm92aWRlciA8cHJvdmlkZXI+JywgJ0FJIHByb3ZpZGVyIChhbnRocm9waWN8b3BlbmFpfGdvb2dsZXx4YWl8YmVkcm9jayknKVxuICAgIC5vcHRpb24oJy0tbW9kZWwgPG1vZGVsPicsICdBSSBtb2RlbCBpZCcpXG4gICAgLm9wdGlvbignLS1kaWFnbm9zZSA8ZmlsZT4nLCAnRGlhZ25vc2UgYSBDbG91ZEZvcm1hdGlvbi9kZXBsb3kgZmFpbHVyZSBmcm9tIGEgZmlsZSAobmVlZHMgYW4gQUkga2V5KScpXG4gICAgLm9wdGlvbignLXksIC0teWVzJywgJ0F1dG8tYWNjZXB0IGFsbCBjb25maXJtYXRpb24gcHJvbXB0cyAoZm9yIENJIC8gbm9uLWludGVyYWN0aXZlKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0tcmV0cmllcyA8bj4nLCAnQXV0by1maXggKyByZXRyeSBhdHRlbXB0cyBhZnRlciBhIGZhaWx1cmUgKGRlcGxveSBzY3JpcHRzIGFyZSBpZGVtcG90ZW50KScsICcxJylcbiAgICAub3B0aW9uKCctLXRlYXJkb3duJywgJ1RlYXIgZG93biBhbiBleGlzdGluZyBkZXBsb3ltZW50IGluc3RlYWQgb2YgY3JlYXRpbmcgb25lIChnYXRlZDsgQVdTIHRhcmdldHMgcmVxdWlyZSBhIHR5cGVkIGNvbmZpcm1hdGlvbiknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXN0YWNrLW5hbWUgPG5hbWU+JywgJ0Nsb3VkRm9ybWF0aW9uIHN0YWNrIG5hbWUgKEVDMikgZm9yIHRoZSBkZXBsb3kgQU5EIHRlYXJkb3duIOKAlCBkZWZhdWx0cyB0byBwaXBlbGluZS1idWlsZGVyIChzZXQgaXQgdG8gcnVuIGEgc2Vjb25kIGVudmlyb25tZW50KScpXG4gICAgLm9wdGlvbignLS1jbHVzdGVyLW5hbWUgPG5hbWU+JywgJ0VLUyBjbHVzdGVyIG5hbWUgZm9yIHRoZSBkZXBsb3kgQU5EIHRlYXJkb3duIOKAlCBkZWZhdWx0cyB0byBwaXBlbGluZS1idWlsZGVyJylcbiAgICAub3B0aW9uKCctLWZvcmNlJywgJ1NraXAgdGhlIHRlYXJkb3duIHR5cGVkLWNvbmZpcm1hdGlvbiAoREFOR0VST1VTIOKAlCBmb3IgQ0kvYXV0b21hdGlvbiBvbmx5KScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0taW5pdCA8bW9kZT4nLCAnUG9zdC1kZXBsb3kgaW5pdGlhbGl6YXRpb246IGF1dG8gKERFRkFVTFQg4oCUIHJlZ2lzdGVyIGFkbWluICsgbG9hZCBwbHVnaW5zL2NvbXBsaWFuY2Uvc2FtcGxlczsgb24gZWMyIHRoZSBpbnN0YW5jZSBkb2VzIGl0IGl0c2VsZiBvbiBmaXJzdCBib290KSwgbWFudWFsIChkb25cXCd0IHNlbGYtaW5pdCDigJQgc3VyZmFjZSB0aGUgc3RlcCBmb3IgeW91IHRvIHJ1biwgZS5nLiB0byBzZXQgcmVhbCBhZG1pbiBjcmVkcyksIG9yIHNraXAgKGRvIG5vdGhpbmcpLiBsb2NhbC9taW5pa3ViZS9la3MgcnVuIGluaXQgdmlhIHByb3Zpc2lvbiB1bmxlc3Mgc2tpcC4nKVxuICAgIC8vIEJvb3RzdHJhcCAoc3BhcnNlIGNsb25lKSDigJQgcHJvdmlzaW9uIGEgZnJlc2ggbWFjaGluZSBpbiBvbmUgY29tbWFuZC5cbiAgICAub3B0aW9uKCctLXJlcG8gW3VybF0nLCAnQm9vdHN0cmFwOiBnaXQtY2xvbmUgdGhlIHBsYXRmb3JtIHJlcG8gZmlyc3QgKHNwYXJzZSDigJQgb25seSB0aGUgbmVlZGVkIGRlcGxveSBmb2xkZXJzKSwgdGhlbiBydW4gZnJvbSBpdCAobm8gdmFsdWUgPSB0aGUgdXBzdHJlYW0gZGVmYXVsdCknKVxuICAgIC5vcHRpb24oJy0tcmVmIDxyZWY+JywgJ0dpdCBicmFuY2gvdGFnIHRvIGNoZWNrIG91dCB3aGVuIGJvb3RzdHJhcHBpbmcgKGRlZmF1bHQ6IG1haW4pJylcbiAgICAub3B0aW9uKCctLXdvcmtkaXIgPGRpcj4nLCAnRGlyZWN0b3J5IHRvIGNsb25lIGludG8gLyBydW4gZnJvbSB3aGVuIGJvb3RzdHJhcHBpbmcgKGRlZmF1bHQ6IHBpcGVsaW5lLWJ1aWxkZXIpJylcbiAgICAvLyBQb3N0LWluc3RhbGwgbG9hZHMg4oCUIGVhY2ggb3B0LWluIHN0ZXAgYWxzbyBhZGRzIGl0cyBkZXBsb3kgZm9sZGVyIHRvIHRoZSBzcGFyc2UgY2xvbmUuXG4gICAgLm9wdGlvbignLS13aXRoLXBsdWdpbnMnLCAnUG9zdC1pbnN0YWxsOiBidWlsZCArIGxvYWQgcGx1Z2lucyAoYWRkcyBkZXBsb3kvcGx1Z2lucywgZGVwbG95L2NvZGVidWlsZCknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXdpdGgtY29tcGxpYW5jZScsICdQb3N0LWluc3RhbGw6IGxvYWQgc2FtcGxlIGNvbXBsaWFuY2UgcnVsZXMvcG9saWNpZXMgKGFkZHMgZGVwbG95L2NvbXBsaWFuY2UpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLXNhbXBsZXMnLCAnUG9zdC1pbnN0YWxsOiBsb2FkIHNhbXBsZSBwaXBlbGluZSB0ZW1wbGF0ZXMgKGFkZHMgZGVwbG95L3NhbXBsZXMpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLWFsbCcsICdQb3N0LWluc3RhbGw6IHBsdWdpbnMgKyBjb21wbGlhbmNlICsgc2FtcGxlcycsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0tYnVpbGQtYm9vdHN0cmFwJywgJ0J1aWxkICsgcHVibGlzaCB0aGUgQ29kZUJ1aWxkIGJvb3RzdHJhcCBpbWFnZSBkdXJpbmcgcmVnaXN0ZXIgKGFkZHMgZGVwbG95L2NvZGVidWlsZCknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXdpdGgtc21va2UtdGVzdCcsICdQb3N0LWluc3RhbGw6IHJlYWQtb25seSBBUEkgcmVhY2hhYmlsaXR5IGNoZWNrJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLWV2ZW50cycsICdQb3N0LWluc3RhbGwgKEFXUyk6IGV2ZW50IGluZ2VzdGlvbiBidW5kbGUg4oCUIHN0b3JlLXRva2VuIChKV1Qg4oaSIFNlY3JldHMgTWFuYWdlcikgdGhlbiBzZXR1cC1ldmVudHMgKEV2ZW50QnJpZGdlL0xhbWJkYSknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXBvc3Qtc3RlcCA8Y21kPicsICdSdW4gYW4gZXh0cmEgY29tbWFuZCBhZnRlciB0aGUgbG9hZHMgKHJlcGVhdGFibGUsIGluIG9yZGVyKScsIGNvbGxlY3RTdGVwLCBbXSlcbiAgICAub3B0aW9uKCctLWFkbWluLWVtYWlsIDxhZGRyPicsICdBZG1pbiBlbWFpbCBmb3Igbm9uLWludGVyYWN0aXZlIHJlZ2lzdGVyIChzZXRzIFBMQVRGT1JNX0lERU5USUZJRVIpJylcbiAgICAub3B0aW9uKCctLWFkbWluLXBhc3N3b3JkIDxwdz4nLCAnQWRtaW4gcGFzc3dvcmQgZm9yIG5vbi1pbnRlcmFjdGl2ZSByZWdpc3RlciAoc2V0cyBQTEFURk9STV9QQVNTV09SRCknKVxuICAgIC5vcHRpb24oJy0tanNvbicsICdQcmludCB0aGUgcGxhbiBhcyBKU09OIGFuZCBleGl0IFdJVEhPVVQgcnVubmluZyAodGhlIG9ubHkgbm9uLWV4ZWN1dGluZyBtb2RlIOKAlCBmb3IgdG9vbGluZy9DSSBpbnNwZWN0aW9uKScsIGZhbHNlKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdQcm92aXNpb24nKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gUmVzb2x2ZSB0aGUgc2luZ2xlIHBvc3QtZGVwbG95IGluaXQgbW9kZSAoYXV0b3xtYW51YWx8c2tpcCkgZnJvbSAtLWluaXQuIFR3byBpbnRlcm5hbCBzaWduYWxzIGRlcml2ZSBmcm9tIGl0OiB3aGV0aGVyIGluaXQgaGFwcGVucyBhdFxuICAgICAgICAvLyBhbGwsIGFuZCB3aGV0aGVyIHRoZSBERVBMT1kgc2VsZi1ydW5zIGl0ICh2cy4gd2Ugc3VyZmFjZSBpdCkuXG4gICAgICAgIGNvbnN0IGluaXRNb2RlID0gcmVzb2x2ZUluaXRNb2RlKG9wdGlvbnMpO1xuICAgICAgICBpZiAoaW5pdE1vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICBwcmludEVycm9yKGBJbnZhbGlkIC0taW5pdCB2YWx1ZSAnJHtTdHJpbmcob3B0aW9ucy5pbml0KX0nLiBVc2Ugb25lIG9mOiAke0lOSVRfTU9ERVMuam9pbignIHwgJyl9LmApO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbml0RW5hYmxlZCA9IGluaXRNb2RlICE9PSAnc2tpcCc7IC8vIHNraXAg4oaSIG5vIHJlZ2lzdGVyL2xvYWRzIGF0IGFsbFxuICAgICAgICBjb25zdCBzZWxmSW5pdCA9IGluaXRNb2RlID09PSAnYXV0byc7IC8vIGF1dG8g4oaSIHRoZSBkZXBsb3kgaW5pdGlhbGl6ZXMgaXRzZWxmXG5cbiAgICAgICAgLy8gMS4gQXNzZW1ibGUgcGFyYW1zIGZyb20gZXhwbGljaXQgZmxhZ3MgKGZsYWdzIGFsd2F5cyB3aW4gb3ZlciBOTCBwYXJzZSkuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IGJ1aWxkUGFyYW1zKG9wdGlvbnMsIHNlbGZJbml0KTtcbiAgICAgICAgY29uc3QgYWlPcHRzID0geyBwcm92aWRlcjogb3B0aW9ucy5haVByb3ZpZGVyLCBtb2RlbDogb3B0aW9ucy5tb2RlbCB9O1xuXG4gICAgICAgIC8vIEJvb3RzdHJhcCAoc3BhcnNlIGNsb25lKSArIHBvc3QtaW5zdGFsbCBzZWxlY3Rpb25zLlxuICAgICAgICBjb25zdCB3YW50Qm9vdHN0cmFwID0gb3B0aW9ucy5yZXBvICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5yZXBvICE9PSBmYWxzZTtcbiAgICAgICAgY29uc3Qgd2l0aEFsbCA9IG9wdGlvbnMud2l0aEFsbCA9PT0gdHJ1ZTtcbiAgICAgICAgY29uc3QgYW55TG9hZEZsYWcgPSB3aXRoQWxsIHx8IExPQURfU1RFUFMuc29tZSgocykgPT4gb3B0aW9uc1tzLmZsYWddID09PSB0cnVlKTtcbiAgICAgICAgbGV0IGVuYWJsZWRMb2FkSWRzOiBzdHJpbmdbXSA9IExPQURfU1RFUFMuZmlsdGVyKChzKSA9PiB3aXRoQWxsIHx8IG9wdGlvbnNbcy5mbGFnXSA9PT0gdHJ1ZSkubWFwKChzKSA9PiBzLmlkKTtcbiAgICAgICAgLy8gV2l0aCBubyAtLXdpdGgtKiBmbGFncywgYW4gaW50ZXJhY3RpdmUgcnVuIG9mZmVycyBlYWNoIGxvYWQg4oCUIGJ1dCBBRlRFUiB0aGVcbiAgICAgICAgLy8gY2xvbmUsIHNvIHRoZSBxdWVzdGlvbnMgY29tZSBvbmNlIHlvdSd2ZSBhZ3JlZWQgdG8gcHJvY2VlZCAobm90IHVwIGZyb250KS5cbiAgICAgICAgLy8gRWFjaCBwaWNrZWQgbG9hZCdzIGZvbGRlciBpcyB0aGVuIGZldGNoZWQgdmlhIGFuIGFkZGl0aXZlIHNwYXJzZSByZS1zeW5jLlxuICAgICAgICAvLyBGbGFncyAvIC0teWVzIC8gLS1qc29uIC8gbm9uLWludGVyYWN0aXZlIHNoZWxscyBza2lwIHRoZSBwcm9tcHRzLlxuICAgICAgICBsZXQgd2lsbFByb21wdExvYWRzID0gIW9wdGlvbnMueWVzICYmICFvcHRpb25zLmpzb24gJiYgQm9vbGVhbihwcm9jZXNzLnN0ZGluLmlzVFRZKSAmJiAhYW55TG9hZEZsYWc7XG4gICAgICAgIGNvbnN0IHBvc3RTdGVwRmxhZ3MgPSB7XG4gICAgICAgICAgaW5pdDogaW5pdEVuYWJsZWQsXG4gICAgICAgICAgLy8gc2VsZkluaXQgKG1vZGUgYXV0bykgZHJvcHMgdGhlIHN1cmZhY2VkIHJlZ2lzdGVyIHN0ZXAgb24gdGhlIEFXUyB0YXJnZXRzIGluXG4gICAgICAgICAgLy8gcmVzb2x2ZVBvc3RTdGVwcywgc28gYSBzZWxmLWluaXRpYWxpemluZyBlYzIvZWtzIGRlcGxveSBkb2Vzbid0IGFsc28gcHJpbnQgYSBtYW51YWxcbiAgICAgICAgICAvLyByZWdpc3RlciBzdGVwLiBGb3IgbWFudWFsIG1vZGUgKG9yIGxvY2FsL21pbmlrdWJlKSB0aGUgcmVnaXN0ZXIgc3RlcCBpcyBzdXJmYWNlZC5cbiAgICAgICAgICBhdXRvSW5pdDogc2VsZkluaXQsXG4gICAgICAgICAgYnVpbGRCb290c3RyYXA6IG9wdGlvbnMuYnVpbGRCb290c3RyYXAgPT09IHRydWUgfHwgZW5hYmxlZExvYWRJZHMuaW5jbHVkZXMoJ3BsdWdpbnMnKSxcbiAgICAgICAgICBzbW9rZVRlc3Q6IG9wdGlvbnMud2l0aFNtb2tlVGVzdCA9PT0gdHJ1ZSxcbiAgICAgICAgICBldmVudHM6IG9wdGlvbnMud2l0aEV2ZW50cyA9PT0gdHJ1ZSxcbiAgICAgICAgICBzdGVwczogKG9wdGlvbnMucG9zdFN0ZXAgPz8gW10pIGFzIHN0cmluZ1tdLFxuICAgICAgICB9O1xuICAgICAgICAvLyBBZG1pbiBjcmVkZW50aWFscyBmb3J3YXJkZWQgYXMgZW52IHNvIHJlZ2lzdGVyIHJ1bnMgbm9uLWludGVyYWN0aXZlbHkuXG4gICAgICAgIGNvbnN0IGFkbWluRW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hZG1pbkVtYWlsID09PSAnc3RyaW5nJykgYWRtaW5FbnYuUExBVEZPUk1fSURFTlRJRklFUiA9IG9wdGlvbnMuYWRtaW5FbWFpbDtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmFkbWluUGFzc3dvcmQgPT09ICdzdHJpbmcnKSBhZG1pbkVudi5QTEFURk9STV9QQVNTV09SRCA9IG9wdGlvbnMuYWRtaW5QYXNzd29yZDtcblxuICAgICAgICAvLyAyLiBPcHRpb25hbGx5IHBhcnNlIGEgbmF0dXJhbC1sYW5ndWFnZSBnb2FsIHRvIGZpbGwgYW55IEdBUFMgKGJlc3QtZWZmb3J0KS5cbiAgICAgICAgbGV0IHRhcmdldDogVGFyZ2V0SWQgfCB1bmRlZmluZWQgPSBpc1RhcmdldElkKG9wdGlvbnMudGFyZ2V0KSA/IG9wdGlvbnMudGFyZ2V0IDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAob3B0aW9ucy5wcm9tcHQpIHtcbiAgICAgICAgICBpZiAoaXNBaUNvbmZpZ3VyZWQoYWlPcHRzKSkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gYXdhaXQgcGFyc2VHb2FsKG9wdGlvbnMucHJvbXB0LCBhaU9wdHMpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgICAgICBpZiAoIXRhcmdldCAmJiBpc1RhcmdldElkKHBhcnNlZC50YXJnZXQpKSB0YXJnZXQgPSBwYXJzZWQudGFyZ2V0O1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhwYXJzZWQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGsgIT09ICd0YXJnZXQnICYmIHBhcmFtc1trXSA9PT0gdW5kZWZpbmVkICYmIHYgIT09IHVuZGVmaW5lZCkgcGFyYW1zW2tdID0gdjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMuanNvbikge1xuICAgICAgICAgICAgLy8gRG9uJ3QgcHJpbnQgaHVtYW4gdGV4dCBiZWZvcmUgYSAtLWpzb24gcGxhbiAoaXQgd291bGQgY29ycnVwdCB0aGUgc3RyZWFtKS5cbiAgICAgICAgICAgIHByaW50V2FybmluZygnQSAtLXByb21wdCB3YXMgZ2l2ZW4gYnV0IG5vIEFJIGtleSBpcyBzZXQg4oCUIGlnbm9yaW5nIGl0IGFuZCB1c2luZyBmbGFncyBvbmx5LiBTZXQgQU5USFJPUElDX0FQSV9LRVkgKG9yIC0tYWktcHJvdmlkZXIgKyBpdHMga2V5KS4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXNvbHZlIGVtYWlsIE5PVyAoYWZ0ZXIgdGhlIE5MIG1lcmdlKTogYW4gZXhwbGljaXQgLS1lbWFpbC8tLW5vLWVtYWlsIGZsYWcgd2lucyxcbiAgICAgICAgLy8gZWxzZSBhbiBBSS1wYXJzZWQgYGVtYWlsYCAobWVyZ2VkIGludG8gcGFyYW1zLmVtYWlsIGFib3ZlKSBkZWNpZGVzLCBlbHNlIGRlZmF1bHQtb24uXG4gICAgICAgIC8vIENvZXJjZSB0byB0aGUgdHdvIGxvYWQtYmVhcmluZyBrZXlzIGFzc2VtYmxlQ29tbWFuZCBlbWl0cy5cbiAgICAgICAgY29uc3QgZW1haWxDaG9pY2UgPSBvcHRpb25zLmVtYWlsICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IG9wdGlvbnMuZW1haWxcbiAgICAgICAgICA6ICh0eXBlb2YgcGFyYW1zLmVtYWlsID09PSAnYm9vbGVhbicgPyBwYXJhbXMuZW1haWwgOiB1bmRlZmluZWQpO1xuICAgICAgICBwYXJhbXMuZW1haWwgPSBlbWFpbENob2ljZSA9PT0gdHJ1ZTtcbiAgICAgICAgcGFyYW1zLm5vRW1haWwgPSBlbWFpbENob2ljZSA9PT0gZmFsc2U7XG5cbiAgICAgICAgLy8gMy4gT3B0aW9uYWwgZmFpbHVyZSBkaWFnbm9zaXMgKGluZGVwZW5kZW50IG9mIGEgZGVwbG95IHBsYW4pLlxuICAgICAgICBpZiAob3B0aW9ucy5kaWFnbm9zZSkge1xuICAgICAgICAgIGF3YWl0IHJ1bkRpYWdub3NlKG9wdGlvbnMuZGlhZ25vc2UsIG9wdGlvbnMuanNvbiA9PT0gdHJ1ZSwgYWlPcHRzLCBleGVjdXRpb25JZCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2l0aCBgLS1pbml0IGF1dG9gICh0aGUgZGVmYXVsdCkgdGhlIEVDMiBpbnN0YW5jZSBsb2FkcyBwbHVnaW5zL2NvbXBsaWFuY2Uvc2FtcGxlc1xuICAgICAgICAvLyBpdHNlbGYgb24gdGhlIGJveCAoYm9vdHN0cmFwLnNoIGhhcmRjb2RlcyBMT0FEXyo9eSksIHNvIHRoZSBsb2NhbCBsb2FkIHBpY2tlciDigJQgYW5kXG4gICAgICAgIC8vIHRoZSBsb2FkLWZvbGRlciBmZXRjaCBpdCB0cmlnZ2VycyDigJQgaXMgcG9pbnRsZXNzLiBTa2lwIGJvdGggKHRoZSBpbnN0YW5jZSBoYXMgaXRzXG4gICAgICAgIC8vIG93biBjaGVja291dCkuXG4gICAgICAgIGlmIChzZWxmSW5pdCAmJiB0YXJnZXQgPT09ICdlYzInKSB7XG4gICAgICAgICAgd2lsbFByb21wdExvYWRzID0gZmFsc2U7XG4gICAgICAgICAgZW5hYmxlZExvYWRJZHMgPSBbXTtcbiAgICAgICAgfSBlbHNlIGlmIChzZWxmSW5pdCAmJiB0YXJnZXQgPT09ICdla3MnICYmICFhbnlMb2FkRmxhZykge1xuICAgICAgICAgIC8vIGAtLWluaXQgYXV0b2Agb24gZWtzIGluaXRpYWxpemVzIGxpa2UgZWMyOiBOTyBpbnRlcmFjdGl2ZSBwaWNrZXIg4oCUIGRlZmF1bHQgdG9cbiAgICAgICAgICAvLyBsb2FkaW5nIEFMTCBvZiBwbHVnaW5zICsgY29tcGxpYW5jZSArIHNhbXBsZXMgKHNldHVwLnNoJ3MgZmluYWwgcGhhc2UgaGFyZGNvZGVzXG4gICAgICAgICAgLy8gTE9BRF8qPXkpLiBzZXR1cC5zaCBydW5zIHRoZSBsb2FkcyBpdHNlbGYgKG92ZXIgYSBrdWJlY3RsIHBvcnQtZm9yd2FyZCksIGJ1dCB3ZVxuICAgICAgICAgIC8vIHN0aWxsIHJlc29sdmUgdGhlbSBoZXJlIHNvIHRoZSBzcGFyc2UgY2xvbmUgZmV0Y2hlcyB0aGUgZm9sZGVycyBzZXR1cC5zaCBidWlsZHNcbiAgICAgICAgICAvLyBmcm9tLiBFeHBsaWNpdCBgLS13aXRoLSpgIGZsYWdzIG92ZXJyaWRlOyBgLS1pbml0IG1hbnVhbGAgLyBgLS1pbml0IHNraXBgIG9wdCBvdXQuXG4gICAgICAgICAgd2lsbFByb21wdExvYWRzID0gZmFsc2U7XG4gICAgICAgICAgZW5hYmxlZExvYWRJZHMgPSBMT0FEX1NURVBTLm1hcCgocykgPT4gcy5pZCk7XG4gICAgICAgICAgcG9zdFN0ZXBGbGFncy5idWlsZEJvb3RzdHJhcCA9IG9wdGlvbnMuYnVpbGRCb290c3RyYXAgPT09IHRydWUgfHwgZW5hYmxlZExvYWRJZHMuaW5jbHVkZXMoJ3BsdWdpbnMnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBtaW5pa3ViZS9sb2NhbCBrZWVwIHRoZSBpbnRlcmFjdGl2ZSBwaWNrZXIgKGxvY2FsLWRldjsgbm8gYC0taW5pdCBhdXRvYCBsb2FkIHBhcml0eSkuXG5cbiAgICAgICAgLy8gNC4gTmVlZCBhIHRhcmdldCB0byBhc3NlbWJsZSBhIHBsYW4uXG4gICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgcHJpbnRFcnJvcihgTm8gdGFyZ2V0IHNwZWNpZmllZC4gUGFzcyAtLXRhcmdldCA8JHtUQVJHRVRfSURTLmpvaW4oJ3wnKX0+IG9yIGRlc2NyaWJlIHRoZSBnb2FsIHdpdGggLS1wcm9tcHQuYCk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3BlYyA9IFRBUkdFVFNbdGFyZ2V0XTtcbiAgICAgICAgbGV0IGN3ZCA9IHByb2Nlc3MuY3dkKCk7XG5cbiAgICAgICAgLy8gNGIuIFRlYXJkb3duIG1vZGUg4oCUIHRoZSBkZXN0cm95IGNvdW50ZXJwYXJ0IG9mIHByb3Zpc2lvbmluZyAoc2VlIHJ1blRlYXJkb3duKS5cbiAgICAgICAgaWYgKG9wdGlvbnMudGVhcmRvd24pIHtcbiAgICAgICAgICBhd2FpdCBydW5UZWFyZG93bihzcGVjLCB0YXJnZXQsIGN3ZCwgZXhlY3V0aW9uSWQsIG9wdGlvbnMpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1ha2UgcHJldmlvdXNseS1mZXRjaGVkIHNpbmdsZS1iaW5hcnkgdG9vbHMgKGUuZy4geXEpIHZpc2libGUgdG8gdGhlXG4gICAgICAgIC8vIHByZXJlcSBjaGVja3MgKyB0aGUgZGVwbG95IOKAlCB0aGV5IGxpdmUgaW4gdGhlIHRvb2xzIGNhY2hlLCBub3Qgb24gdGhlXG4gICAgICAgIC8vIHN5c3RlbSBQQVRILiAoQm90aCBgaGFzKClgIGFuZCB0aGUgZGVwbG95J3MgYGJhc2ggLWxjYCBpbmhlcml0IHRoaXMuKVxuICAgICAgICB3aXRoVG9vbHNPblBhdGgoKTtcbiAgICAgICAgLy8gSGFyZC1yZXF1aXJlIHBsdWdpbiBwcmVyZXFzIChlLmcuIHlxIG9uIG1pbmlrdWJlKSBvbmx5IHdoZW4gcGx1Z2lucyBpcyBFWFBMSUNJVExZXG4gICAgICAgIC8vIHNlbGVjdGVkIOKAlCBOT1Qgb24gdGhlIHdpbGxQcm9tcHRMb2FkcyBndWVzcywgd2hpY2ggd291bGQgYmxvY2svcHJvbXB0IGJlZm9yZSB0aGVcbiAgICAgICAgLy8gdXNlciBoYXMgZXZlbiBiZWVuIGFza2VkIHdoZXRoZXIgdGhleSB3YW50IHBsdWdpbnMuIElmIHRoZXkgcGljayBwbHVnaW5zIGluIHRoZVxuICAgICAgICAvLyBpbnRlcmFjdGl2ZSBwcm9tcHQsIHdlIHJlLWNoZWNrICsgb2ZmZXIgdG8gZmV0Y2ggcmlnaHQgYWZ0ZXIgdGhhdCBzZWxlY3Rpb24gKGJlbG93KS5cbiAgICAgICAgbGV0IHByZXJlcXMgPSBjaGVja1ByZXJlcXModGFyZ2V0LCB7IGJvb3RzdHJhcDogd2FudEJvb3RzdHJhcCwgd2l0aFBsdWdpbnM6IGVuYWJsZWRMb2FkSWRzLmluY2x1ZGVzKCdwbHVnaW5zJykgfSk7XG4gICAgICAgIGNvbnN0IHsgY29tbWFuZCwgbWlzc2luZyB9ID0gYXNzZW1ibGVDb21tYW5kKHNwZWMsIHBhcmFtcyk7XG4gICAgICAgIGNvbnN0IHVybCA9IGRlcml2ZUhlYWx0aFVybCh0YXJnZXQsIHBhcmFtcyk7XG5cbiAgICAgICAgLy8gU3BhcnNlIGJvb3RzdHJhcCBjbG9uZSBjb21tYW5kIChjb21tb24gYmFzZSArIHRhcmdldCArIHNlbGVjdGVkIGxvYWRzKS5cbiAgICAgICAgLy8gSW50ZXJhY3RpdmUgbG9hZHMgYXJlIGNob3NlbiBBRlRFUiB0aGUgY2xvbmUsIHNvIHRoZSBjbG9uZSBzdGF5cyBtaW5pbWFsIOKAlFxuICAgICAgICAvLyBlYWNoIHBpY2tlZCBsb2FkJ3MgZm9sZGVyIGlzIGZldGNoZWQgdGhlbiB2aWEgYW4gYWRkaXRpdmUgc3BhcnNlIHJlLXN5bmMuXG4gICAgICAgIGNvbnN0IHNwYXJzZVBhdGhzID0gc3BhcnNlUGF0aHNGb3IodGFyZ2V0LCBlbmFibGVkTG9hZElkcyk7XG4gICAgICAgIGNvbnN0IGJvb3RzdHJhcCA9IHJlc29sdmVCb290c3RyYXAoXG4gICAgICAgICAgeyByZXBvOiB0eXBlb2Ygb3B0aW9ucy5yZXBvID09PSAnc3RyaW5nJyA/IG9wdGlvbnMucmVwbyA6IHVuZGVmaW5lZCwgcmVmOiBvcHRpb25zLnJlZiwgd29ya2Rpcjogb3B0aW9ucy53b3JrZGlyLCBmdWxsOiAhZ2l0U3VwcG9ydHNTcGFyc2VDaGVja291dCgpIH0sXG4gICAgICAgICAgc3BhcnNlUGF0aHMsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGJvb3RzdHJhcENtZCA9IHdhbnRCb290c3RyYXAgPyBib290c3RyYXBDb21tYW5kKGJvb3RzdHJhcCkgOiBudWxsO1xuXG4gICAgICAgIC8vIFJlc29sdmUgcG9zdC1pbnN0YWxsIHN0ZXBzIChyZWdpc3RlciDihpIgc21va2Ug4oaSIGV2ZW50cyDihpIgY3VzdG9tKS4gUmUtcmVzb2x2ZWRcbiAgICAgICAgLy8gYWZ0ZXIgdGhlIHBvc3QtY2xvbmUgbG9hZCBwcm9tcHRzIChzZWUgYmVsb3cpIHdoZW4gdGhvc2UgcnVuIGludGVyYWN0aXZlbHkuXG4gICAgICAgIGxldCB7IHN0ZXBzOiBwb3N0U3RlcHMsIHNraXBwZWQ6IHNraXBwZWRTdGVwcyB9ID0gcmVzb2x2ZVBvc3RTdGVwcyh7XG4gICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgIHVybCxcbiAgICAgICAgICByZWdpb246IHR5cGVvZiBwYXJhbXMucmVnaW9uID09PSAnc3RyaW5nJyA/IHBhcmFtcy5yZWdpb24gOiB1bmRlZmluZWQsXG4gICAgICAgICAgZW5hYmxlZExvYWRJZHMsXG4gICAgICAgICAgLi4ucG9zdFN0ZXBGbGFncyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuanNvbikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBleGVjdXRpb25JZCxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIHByZXJlcXMsXG4gICAgICAgICAgICBwcmVyZXFzU2F0aXNmaWVkOiBwcmVyZXFzU2F0aXNmaWVkKHByZXJlcXMpLFxuICAgICAgICAgICAgbWlzc2luZ0lucHV0czogbWlzc2luZy5tYXAoKG0pID0+ICh7IGZsYWc6IG0uZmxhZywgZGVzY3JpcHRpb246IG0uZGVzY3JpcHRpb24gfSkpLFxuICAgICAgICAgICAgYm9vdHN0cmFwOiBib290c3RyYXBDbWQsXG4gICAgICAgICAgICBzcGFyc2VQYXRoczogd2FudEJvb3RzdHJhcCA/IHNwYXJzZVBhdGhzIDogbnVsbCxcbiAgICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgICBwb3N0U3RlcHM6IHBvc3RTdGVwcy5tYXAoKHMpID0+ICh7IGlkOiBzLmlkLCBsYWJlbDogcy5sYWJlbCwgY29tbWFuZDogcy5jb21tYW5kIH0pKSxcbiAgICAgICAgICAgIHNraXBwZWRQb3N0U3RlcHM6IHNraXBwZWRTdGVwcyxcbiAgICAgICAgICB9LCBudWxsLCAyKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gNS4gUHJpbnQgdGhlIHBsYW4gKHNob3duIGJlZm9yZSB0aGUgZ2F0ZWQgZXhlY3V0aW9uIGJlbG93KS5cbiAgICAgICAgcHJpbnRQbGFuKHsgc3BlYywgdGFyZ2V0LCBwcmVyZXFzLCBtaXNzaW5nLCBib290c3RyYXAsIGJvb3RzdHJhcENtZCwgc3BhcnNlUGF0aHMsIGNvbW1hbmQsIHBvc3RTdGVwcywgc2tpcHBlZFN0ZXBzIH0pO1xuXG4gICAgICAgIC8vIDYuIE9mZmVyIHRvIGZldGNoIGFueSBtaXNzaW5nIHNpbmdsZS1iaW5hcnkgcHJlcmVxIChzZWUgb2ZmZXJUb29sRmV0Y2gpLlxuICAgICAgICBwcmVyZXFzID0gYXdhaXQgb2ZmZXJUb29sRmV0Y2gocHJlcmVxcywgb3B0aW9ucy55ZXMsICgpID0+IGNoZWNrUHJlcmVxcyh0YXJnZXQsIHsgYm9vdHN0cmFwOiB3YW50Qm9vdHN0cmFwLCB3aXRoUGx1Z2luczogZW5hYmxlZExvYWRJZHMuaW5jbHVkZXMoJ3BsdWdpbnMnKSB9KSk7XG5cbiAgICAgICAgLy8gN2IuIEdhdGVkIGV4ZWN1dGlvbi4gQ2hlY2sgcHJlcmVxcyAvIHJlcXVpcmVkIGlucHV0cyBmaXJzdCDigJQgdGhpcyBhbHNvXG4gICAgICAgIC8vIGNhdGNoZXMgYSBtaXNzaW5nIGBnaXRgIHdoZW4gYm9vdHN0cmFwcGluZy5cbiAgICAgICAgY29uc3QgYmxvY2tlZCA9IGV4ZWN1dGlvbkJsb2NrZWQocHJlcmVxcywgbWlzc2luZyk7XG4gICAgICAgIGlmIChibG9ja2VkKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcihgQ2FuJ3Qgc3RhcnQganVzdCB5ZXQg4oCUICR7YmxvY2tlZH0uIFJlc29sdmUgdGhhdCBhbmQgcmUtcnVuLmApO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbW1pdCBnYXRlIOKAlCBjb25maXJtIEJFRk9SRSBhbnkgc2lkZSBlZmZlY3QgKGNsb25lLCAuZW52LCBkZXBsb3kpIHNvIGEgXCJOb1wiXG4gICAgICAgIC8vIGxlYXZlcyBub3RoaW5nIGJlaGluZC4gVGhlIHBvcnQgY2hlY2sgKyBvcHRpb25hbCBsb2FkcyArIC5lbnYgYmVsb3cgYXJlIHBhcnQgb2ZcbiAgICAgICAgLy8gZXhlY3V0aW5nIHRoZSBhZ3JlZWQtdG8gcGxhbi5cbiAgICAgICAgaWYgKCEoYXdhaXQgY29uZmlybShgXFxuUHJvY2VlZCB3aXRoIHByb3Zpc2lvbmluZyAke3NwZWMubGFiZWx9P2AsIG9wdGlvbnMueWVzKSkpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ05vIHByb2JsZW0g4oCUIG5vdGhpbmcgd2FzIGNoYW5nZWQuJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gN2EvN2IuIFNwYXJzZS1jbG9uZSAoaWYgLS1yZXBvIG9yIGFjY2VwdGVkIGludGVyYWN0aXZlbHkpICsgbG9jYXRlIHRoZSBkZXBsb3lcbiAgICAgICAgLy8gZW50cnlwb2ludCwgcmVwb2ludGluZyBjd2QgaW50byB0aGUgY2xvbmUuIFNlZSBib290c3RyYXBBbmRMb2NhdGUuXG4gICAgICAgIGNvbnN0IGxvY2F0ZWQgPSBhd2FpdCBib290c3RyYXBBbmRMb2NhdGUoc3BlYywgYm9vdHN0cmFwLCBib290c3RyYXBDbWQsIHNwYXJzZVBhdGhzLCBjd2QsIG9wdGlvbnMpO1xuICAgICAgICBjd2QgPSBsb2NhdGVkLmN3ZDtcbiAgICAgICAgY29uc3QgYm9vdHN0cmFwcGVkID0gbG9jYXRlZC5ib290c3RyYXBwZWQ7XG4gICAgICAgIGlmICghbG9jYXRlZC5vaykgcmV0dXJuO1xuXG4gICAgICAgIC8vIEhvc3QtcG9ydCBwcmUtZmxpZ2h0IOKAlCBub3cgdGhhdCB0aGUgZGVwbG95IHNvdXJjZSBpcyBvbiBkaXNrIChwb3N0LWNsb25lKSxcbiAgICAgICAgLy8gZGVyaXZlIHRoZSBwb3J0cyBmcm9tIGl0IChjb21wb3NlIC8gc2V0dXAuc2gpIGFuZCBzdG9wIG9uIGEgZmF0YWwgY29uZmxpY3RcbiAgICAgICAgLy8gYmVmb3JlIGRlcGxveWluZy4gU2VlIHByZWZsaWdodFBvcnRzLlxuICAgICAgICBpZiAoIShhd2FpdCBwcmVmbGlnaHRQb3J0cyhzcGVjLCB0YXJnZXQsIGN3ZCkpKSB7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3B0LWluIGxvYWRzIOKAlCBvZmZlcmVkIEFGVEVSIHRoZSBjbG9uZSAoc2VlIHJlc29sdmVMb2Fkc0ludGVyYWN0aXZlbHkpOyBpdFxuICAgICAgICAvLyBwcm9tcHRzLCBhZGRpdGl2ZWx5IHNwYXJzZS1mZXRjaGVzIHRoZSBwaWNrZWQgZm9sZGVycywgYW5kIHJlLXJlc29sdmVzIHRoZVxuICAgICAgICAvLyBwb3N0LWluc3RhbGwgc3RlcHMgd2l0aCB0aGUgc2VsZWN0aW9ucy5cbiAgICAgICAgaWYgKHdpbGxQcm9tcHRMb2Fkcykge1xuICAgICAgICAgIGNvbnN0IGxvYWRlZCA9IGF3YWl0IHJlc29sdmVMb2Fkc0ludGVyYWN0aXZlbHkoXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICB0eXBlb2YgcGFyYW1zLnJlZ2lvbiA9PT0gJ3N0cmluZycgPyBwYXJhbXMucmVnaW9uIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY3dkLFxuICAgICAgICAgICAgYm9vdHN0cmFwcGVkLFxuICAgICAgICAgICAgYm9vdHN0cmFwLFxuICAgICAgICAgICAgcG9zdFN0ZXBGbGFncyxcbiAgICAgICAgICApO1xuICAgICAgICAgIGVuYWJsZWRMb2FkSWRzID0gbG9hZGVkLmVuYWJsZWRMb2FkSWRzO1xuICAgICAgICAgIHBvc3RTdGVwcyA9IGxvYWRlZC5zdGVwcztcbiAgICAgICAgICBza2lwcGVkU3RlcHMgPSBsb2FkZWQuc2tpcHBlZDtcbiAgICAgICAgICBpZiAoZW5hYmxlZExvYWRJZHMuaW5jbHVkZXMoJ3BsdWdpbnMnKSkge1xuICAgICAgICAgICAgYXdhaXQgcmVjaGVja1BsdWdpblByZXJlcXModGFyZ2V0LCB3YW50Qm9vdHN0cmFwLCBwcmVyZXFzLCBvcHRpb25zLnllcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGVuc3VyZUxvY2FsRW52RmlsZSh0YXJnZXQsIHNwZWMsIGN3ZCwgb3B0aW9ucy55ZXMpO1xuXG4gICAgICAgIC8vIDdjLiBSdW4gdGhlIGRlcGxveSB3aXRoIGEgYm91bmRlZCBhdXRvLWZpeCArIHJldHJ5IGxvb3AgKHNlZSBydW5EZXBsb3lXaXRoUmV0cnkpLlxuICAgICAgICBjb25zdCB7IHN1Y2NlZWRlZCwgcnVuUGFyYW1zIH0gPSBhd2FpdCBydW5EZXBsb3lXaXRoUmV0cnkoc3BlYywgdXJsLCBjd2QsIHBhcmFtcywgYWlPcHRzLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKCFzdWNjZWVkZWQpIHsgcHJvY2Vzcy5leGl0Q29kZSA9IDE7IHJldHVybjsgfVxuICAgICAgICBwcmludFN1Y2Nlc3MoJ0RlcGxveSBjb21tYW5kIGNvbXBsZXRlZC4nKTtcblxuICAgICAgICAvLyA3ZC4gU0VTIHBvc3QtZGVwbG95IGd1aWRhbmNlIChhc3luYyBES0lNICsgc2FuZGJveCArIGJvdW5jZSB0b3BpYykuXG4gICAgICAgIC8vIFNFUyBpcyBwcm92aXNpb25lZCBCWSBERUZBVUxUIG9uIEFXUyBkZXBsb3lzLCBzbyBzdXJmYWNlIHRoZSBndWlkYW5jZVxuICAgICAgICAvLyBmb3IgZWMyL2VrcyB1bmxlc3MgdGhlIG9wZXJhdG9yIG9wdGVkIG91dCB3aXRoIC0tbm8tZW1haWwuXG4gICAgICAgIGNvbnN0IHNlc1Byb3Zpc2lvbmVkID0gKHRhcmdldCA9PT0gJ2VjMicgfHwgdGFyZ2V0ID09PSAnZWtzJykgJiYgcnVuUGFyYW1zLm5vRW1haWwgIT09IHRydWU7XG4gICAgICAgIGlmIChzZXNQcm92aXNpb25lZCkge1xuICAgICAgICAgIHByaW50U2VjdGlvbignU0VTIOKAlCBuZXh0IHN0ZXBzJyk7XG4gICAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIHNlc1Bvc3REZXBsb3lHdWlkYW5jZSgpKSBwcmludEluZm8oYOKAoiAke2xpbmV9YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA3ZS4gVmVyaWZ5IGhlYWx0aCAoQ1JFQVRFX0NPTVBMRVRFICE9IHNlcnZpbmcpLlxuICAgICAgICBpZiAodXJsKSBhd2FpdCB2ZXJpZnlIZWFsdGgodGFyZ2V0LCB1cmwpO1xuXG4gICAgICAgIC8vIDdmLiBQb3N0LWluc3RhbGwgc3RlcHMgKHJlZ2lzdGVyICsgb3B0LWluIGxvYWRzLCBzbW9rZSB0ZXN0LCBldmVudHMsIGN1c3RvbSkuXG4gICAgICAgIC8vIFNlZSBydW5Qb3N0U3RlcHMg4oCUIGl0IHN1cmZhY2VzIHJlZ2lzdGVyICsgdGhlIGV2ZW50cyBidW5kbGUgYXMgbWFudWFsIGluLVZQQ1xuICAgICAgICAvLyBuZXh0LXN0ZXBzIG9uIEVDMi9FS1MgaW5zdGVhZCBvZiBhdXRvLXJ1bm5pbmcgKGFuZCBmYWlsaW5nKSB0aGVtIGxvY2FsbHkuXG4gICAgICAgIC8vIGF1dG9SdW4gKHNraXAgdGhlIHNlY29uZCBjb25maXJtKSBvbmx5IHdoZW4gdGhlIHVzZXIgYWN0dWFsbHkgUElDS0VEIGEgbG9hZCBpbiB0aGVcbiAgICAgICAgLy8gaW50ZXJhY3RpdmUgcHJvbXB0IOKAlCBkZWNsaW5pbmcgZXZlcnkgbG9hZCBzaG91bGRuJ3Qgc2lsZW50bHkgcnVuIHJlZ2lzdGVyIHVucHJvbXB0ZWQuXG4gICAgICAgIGNvbnN0IGF1dG9SYW5Mb2FkcyA9IHdpbGxQcm9tcHRMb2FkcyAmJiBlbmFibGVkTG9hZElkcy5sZW5ndGggPiAwO1xuICAgICAgICBhd2FpdCBydW5Qb3N0U3RlcHMocG9zdFN0ZXBzLCBza2lwcGVkU3RlcHMsIHRhcmdldCwgY3dkLCBhZG1pbkVudiwgeyB5ZXM6IG9wdGlvbnMueWVzLCBhdXRvUnVuOiBhdXRvUmFuTG9hZHMsIGF1dG9Jbml0OiBwb3N0U3RlcEZsYWdzLmF1dG9Jbml0IH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkdFTkVSQUwsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7IGNvbW1hbmQ6ICdwcm92aXNpb24nLCBleGVjdXRpb25JZCB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish-plugin.d.ts","
|
|
1
|
+
{"version":3,"file":"publish-plugin.d.ts","sources":["../../src/commands/publish-plugin.ts"],"names":[],"mappings":"AAKA,OAAO,EAA0B,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAC7F,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAuB,KAAK,GAAG,EAAE,MAAM,4BAA4B,CAAC;AAI3E,OAAO,EAAoE,KAAK,IAAI,EAAE,MAAM,2BAA2B,CAAC;AAExH,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGxE,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,qDAAqD;AACrD,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAYD,+EAA+E;AAC/E,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAOzE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,WAAW,CAqBvM;AAYD;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,oBAAoB,EAC7B,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,IAAI,CAAC;IAAC,GAAG,CAAC,EAAE,GAAG,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,SAAS,CAAA;CAAO,GAC9D,OAAO,CAAC;IAAE,KAAK,EAAE,kBAAkB,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,CAkF3D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkCpD"}
|