@pipeline-builder/pipeline-manager 4.5.2 → 4.5.3
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/README.md +3 -2
- package/dist/agent/post-steps.d.ts +5 -4
- package/dist/agent/post-steps.d.ts.map +1 -1
- package/dist/agent/post-steps.js +19 -7
- package/dist/agent/targets.d.ts +12 -2
- package/dist/agent/targets.d.ts.map +1 -1
- package/dist/agent/targets.js +20 -4
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +4 -1
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +15 -2
- package/dist/commands/new-plugin.js +5 -5
- package/dist/commands/provision-steps.d.ts.map +1 -1
- package/dist/commands/provision-steps.js +1 -2
- package/dist/commands/provision.d.ts.map +1 -1
- package/dist/commands/provision.js +6 -5
- package/dist/commands/toolchain.d.ts +21 -0
- package/dist/commands/toolchain.d.ts.map +1 -0
- package/dist/commands/toolchain.js +69 -0
- package/dist/utils/pipeline-config.d.ts +5 -2
- package/dist/utils/pipeline-config.d.ts.map +1 -1
- package/dist/utils/pipeline-config.js +12 -3
- package/dist/utils/plugin-resolver.d.ts +23 -6
- package/dist/utils/plugin-resolver.d.ts.map +1 -1
- package/dist/utils/plugin-resolver.js +50 -9
- package/dist/utils/toolchain.d.ts +80 -0
- package/dist/utils/toolchain.d.ts.map +1 -0
- package/dist/utils/toolchain.js +196 -0
- package/package.json +4 -4
package/dist/cli.js
CHANGED
|
@@ -31,6 +31,7 @@ import { status } from './commands/status.js';
|
|
|
31
31
|
import { storeToken } from './commands/store-token.js';
|
|
32
32
|
import { synth } from './commands/synth.js';
|
|
33
33
|
import { testPlugin } from './commands/test-plugin.js';
|
|
34
|
+
import { toolchain } from './commands/toolchain.js';
|
|
34
35
|
import { registerUpgradeOption } from './commands/upgrade.js';
|
|
35
36
|
import { uploadPlugin } from './commands/upload-plugin.js';
|
|
36
37
|
import { validatePlugin } from './commands/validate-plugin.js';
|
|
@@ -198,6 +199,8 @@ function registerTaskNamespaces() {
|
|
|
198
199
|
const audit = program.command('audit').description('Operator audits (cron-friendly: exit 1 on findings)');
|
|
199
200
|
auditTokens(audit); // audit tokens — expiring platform tokens in Secrets Manager
|
|
200
201
|
auditStacks(audit); // audit stacks — CFN stacks vs pipeline_registry drift
|
|
202
|
+
// toolchain — the pipeline toolchain release (pipeline-bootstrap + cdk-synth)
|
|
203
|
+
toolchain(program); // toolchain export — the resolved release as JSON, for deploy --local-spec
|
|
201
204
|
// org — organization data operations
|
|
202
205
|
const org = program.command('org').description('Organization data operations');
|
|
203
206
|
orgExport(org); // org export — GDPR portability export
|
|
@@ -517,4 +520,4 @@ if (isMainModule) {
|
|
|
517
520
|
scheduleUpdateNotice();
|
|
518
521
|
main(options);
|
|
519
522
|
}
|
|
520
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9zcmMvY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNoRCxPQUFPLEVBQ0wsUUFBUSxFQUNSLGVBQWUsRUFDZixXQUFXLEVBQ1gsUUFBUSxFQUNSLFdBQVcsRUFDWCxtQkFBbUIsR0FDcEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBZ0RoRSx3R0FBd0c7QUFDeEcsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFjO0lBQ3pDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFdBQVcsSUFBSSxDQUFDLEtBQUssaUJBQWlCLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztBQUMxSSxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGdCQUFnQixDQUFDLEVBQUUsY0FBYyxHQUFHLElBQUksRUFBRSxHQUFpQyxFQUFFO0lBQ3BGLE1BQU0sUUFBUSxHQUFhLEVBQUUsQ0FBQztJQUU5Qix1RUFBdUU7SUFDdkUsMkVBQTJFO0lBQzNFLDJFQUEyRTtJQUMzRSxJQUFJLGNBQWMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3hHLFFBQVEsQ0FBQyxJQUFJLENBQUMsc0RBQXNELENBQUMsQ0FBQztRQUN0RSxRQUFRLENBQUMsSUFBSSxDQUFDLDJFQUEyRSxDQUFDLENBQUM7SUFDN0YsQ0FBQztJQUVELHFCQUFxQjtJQUNyQixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQ3BDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDN0UsSUFBSSxZQUFZLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDdEIsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLFdBQVcsNkRBQTZELENBQUMsQ0FBQztJQUNyRyxDQUFDO0lBRUQsbUJBQW1CO0lBQ25CLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN4QixZQUFZLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNyQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3pCLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEIsQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsa0JBQWtCLENBQUMsT0FBbUI7SUFDN0MsSUFBSSxPQUFPLENBQUMsS0FBSztRQUFFLE9BQU87SUFFMUIsTUFBTSxXQUFXLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztJQUUxQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRTtZQUM5QixJQUFJLEVBQUUsUUFBUTtZQUNkLE9BQU8sRUFBRSxXQUFXO1lBQ3BCLFdBQVc7WUFDWCxJQUFJLEVBQUUsT0FBTyxDQUFDLE9BQU87WUFDckIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1lBQzFCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtZQUNsQixHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUNsQixHQUFHLEVBQUU7Z0JBQ0gsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSztnQkFDeEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUEsQ0FBQyxDQUFDLFNBQVM7Z0JBQzlELEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLFNBQVM7YUFDMUQ7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO1NBQU0sQ0FBQztRQUNOLFVBQVUsQ0FBQyxjQUFjLEVBQUU7WUFDekIsT0FBTyxFQUFFLFdBQVc7WUFDcEIsV0FBVztTQUNaLENBQUMsQ0FBQztJQUNMLENBQUM7QUFDSCxDQUFDO0FBRUQseUZBQXlGO0FBQ3pGLE1BQU0sU0FBUyxHQUFHOzs7Ozs7Ozs7Ozs7O1NBYVQsUUFBUTs7O0tBR1osUUFBUSwrQkFBK0IsUUFBUSxDQUFDLGNBQWM7OztJQUcvRCxRQUFRLENBQUMsY0FBYztJQUN2QixRQUFRLENBQUMsaUJBQWlCO0lBQzFCLFFBQVEsQ0FBQyxlQUFlO0lBQ3hCLFFBQVEsQ0FBQyx1QkFBdUI7O0lBRWhDLFFBQVEsQ0FBQyxLQUFLOzs7TUFHWixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTs7Ozs7O09BTVAsUUFBUTtDQUNkLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsU0FBUyxzQkFBc0I7SUFDN0IsVUFBVSxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFFMUMsNkNBQTZDO0lBQzdDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7SUFDeEYsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsc0VBQXNFO0lBQ25GLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDBFQUEwRTtJQUUzRixtREFBbUQ7SUFDbkQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxXQUFXLENBQUMsdUNBQXVDLENBQUMsQ0FBQztJQUNsRyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxrQkFBa0I7SUFDNUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO0lBQ3pDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGVBQWU7SUFDdEMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMseUVBQXlFO0lBQzdGLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLHNEQUFzRDtJQUN2RSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQywrREFBK0Q7SUFFakYsaURBQWlEO0lBQ2pELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7SUFDOUYsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsaURBQWlEO0lBQ3BFLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLHVFQUF1RTtJQUMvRixVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxrRUFBa0U7SUFDdEYsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsNkVBQTZFO0lBQ3BHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLG9DQUFvQztJQUMxRCxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxhQUFhO0lBQ2hDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGNBQWM7SUFDbkMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMscURBQXFEO0lBQzlFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLHdEQUF3RDtJQUM1RSxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxzRUFBc0U7SUFFN0YsbUZBQW1GO0lBQ25GLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsV0FBVyxDQUFDLHVFQUF1RSxDQUFDLENBQUM7SUFDbEksbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQywrREFBK0Q7SUFDOUYsd0JBQXdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxvQkFBb0I7SUFFeEQscURBQXFEO0lBQ3JELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7SUFDakcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsc0NBQXNDO0lBQ3hELFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLG1EQUFtRDtJQUN2RSxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyw2REFBNkQ7SUFDbkYsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsMkRBQTJEO0lBQzlFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGdFQUFnRTtJQUVsRiw4REFBOEQ7SUFDOUQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMscURBQXFELENBQUMsQ0FBQztJQUMxRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyw2REFBNkQ7SUFDakYsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsdURBQXVEO0lBRTNFLHFDQUFxQztJQUNyQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0lBQy9FLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLHVDQUF1QztJQUV2RCxzRkFBc0Y7SUFDdEYseUZBQXlGO0lBQ3pGLHFGQUFxRjtJQUNyRixrRkFBa0Y7SUFDbEYsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRWhCLG9GQUFvRjtJQUNwRixjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUVELCtEQUErRDtBQUMvRCxTQUFTLGdCQUFnQixDQUFDLEtBQWE7SUFDckMsOEVBQThFO0lBQzlFLDBFQUEwRTtJQUMxRSwyRUFBMkU7SUFDM0UsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM1RCxNQUFNLElBQUksR0FBNkIsRUFBRSxDQUFDO0lBQzFDLEtBQUssTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ25GLENBQUM7SUFDRCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLFFBQVEsS0FBSyxFQUFFLENBQUM7UUFDZCxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ1osc0VBQXNFO1lBQ3RFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO2lCQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLDhCQUE4QixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQztpQkFDcEcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQzs7OzsyQkFJUyxXQUFXOzs7O0VBSXBDLEtBQUs7OzsyREFHb0QsQ0FBQyxDQUFDO1lBQ3ZELE1BQU07UUFDUixDQUFDO1FBQ0QsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNYLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO2lCQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsV0FBVyxFQUFFLDBCQUEwQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7aUJBQ2xGLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUM7OztvQkFHRSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQzs7OztFQUlwQyxLQUFLOzs7MkNBR29DLENBQUMsQ0FBQztZQUN2QyxNQUFNO1FBQ1IsQ0FBQztRQUNELEtBQUssTUFBTSxFQUFFLENBQUM7WUFDWixNQUFNLEtBQUssR0FBRztnQkFDWiwrREFBK0QsV0FBVyxHQUFHO2dCQUM3RSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUMzQyxnRUFBZ0UsRUFBRSxTQUFTLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQzthQUNsRyxDQUFDO1lBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3Q0FBd0MsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEUsTUFBTTtRQUNSLENBQUM7UUFDRDtZQUNFLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEtBQUssMkJBQTJCLENBQUMsQ0FBQztZQUNsRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGdCQUFnQjtJQUN2QixVQUFVLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUVuQyxvQkFBb0I7SUFDcEIsT0FBTztTQUNKLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDZCxXQUFXLENBQUMsZUFBZSxDQUFDO1NBQzVCLE9BQU8sQ0FBQyxXQUFXLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixDQUFDO1NBQ3pELE1BQU0sQ0FBQyxTQUFTLEVBQUUsdUNBQXVDLEVBQUUsS0FBSyxDQUFDO1NBQ2pFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsMkJBQTJCLEVBQUUsS0FBSyxDQUFDO1NBQ3ZELE1BQU0sQ0FBQyxTQUFTLEVBQUUsOEJBQThCLEVBQUUsS0FBSyxDQUFDO1NBQ3hELE1BQU0sQ0FBQyxZQUFZLEVBQUUsd0JBQXdCLEVBQUUsS0FBSyxDQUFDO1NBQ3JELFdBQVcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFbkMsOEVBQThFO0lBQzlFLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRS9CLDBFQUEwRTtJQUMxRSw4RUFBOEU7SUFDOUUsK0VBQStFO0lBQy9FLDhCQUE4QjtJQUM5QixPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsRUFBRSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFFakcsMENBQTBDO0lBQzFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQywyQ0FBMkM7SUFFNUQsc0JBQXNCLEVBQUUsQ0FBQztJQUV6QixvQkFBb0I7SUFDcEIsVUFBVSxDQUFDLGlDQUFpQyxDQUFDLENBQUM7SUFDOUMsT0FBTztTQUNKLE9BQU8sQ0FBQyxhQUFhLENBQUM7U0FDdEIsV0FBVyxDQUFDLDhDQUE4QyxDQUFDO1NBQzNELFFBQVEsQ0FBQyxTQUFTLEVBQUUsZ0NBQWdDLENBQUM7U0FDckQsTUFBTSxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUU7UUFDeEIsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQyxDQUFDLENBQUM7SUFFTCxVQUFVLENBQUMsc0NBQXNDLENBQUMsQ0FBQztBQUNyRCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGtCQUFrQjtJQUN6Qiw2QkFBNkI7SUFDN0IsT0FBTyxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEtBQVksRUFBRSxFQUFFO1FBQy9DLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhO1FBQ2hDLFVBQVUsQ0FBQyxvQkFBb0IsRUFBRTtZQUMvQixLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDcEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1NBQ2pCLENBQUMsQ0FBQztRQUVILFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRTtZQUN0QyxLQUFLLEVBQUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsQyxJQUFJLEVBQUUsSUFBSTtZQUNWLE9BQU8sRUFBRTtnQkFDUCxJQUFJLEVBQUUsbUJBQW1CO2FBQzFCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxzQ0FBc0M7SUFDdEMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLE1BQWUsRUFBRSxFQUFFO1FBQ25ELE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhO1FBQ2hDLFVBQVUsQ0FBQyw2QkFBNkIsRUFBRTtZQUN4QyxNQUFNLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQztTQUM3QixDQUFDLENBQUM7UUFFSCxNQUFNLEtBQUssR0FBRyxNQUFNLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUEsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRTFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRTtZQUN0QyxLQUFLLEVBQUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsQyxJQUFJLEVBQUUsSUFBSTtZQUNWLE9BQU8sRUFBRTtnQkFDUCxJQUFJLEVBQUUsb0JBQW9CO2FBQzNCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCx5QkFBeUI7SUFDekIsT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhO1FBQzlCLFlBQVksQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1FBQ3JELE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhO1FBQzlCLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxnQ0FBZ0M7SUFDckQsQ0FBQyxDQUFDLENBQUM7SUFFSCxpQkFBaUI7SUFDakIsT0FBTyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO1FBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhO1FBQzlCLFlBQVksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhO1FBQzlCLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxpQ0FBaUM7SUFDdEQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUMsT0FBTyxHQUFlLEVBQUU7SUFDcEQsTUFBTSxFQUNKLFVBQVUsR0FBRyxJQUFJLEVBQ2pCLGFBQWEsR0FBRyxLQUFLLEVBQ3JCLEtBQUssR0FBRyxLQUFLLEVBQ2IsT0FBTyxHQUFHLEtBQUssRUFDZixLQUFLLEdBQUcsS0FBSyxFQUNiLE9BQU8sR0FBRyxLQUFLLEVBQ2YsVUFBVSxHQUFHLEtBQUssR0FDbkIsR0FBRyxPQUFPLENBQUM7SUFFWixzQkFBc0I7SUFDdEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztJQUM3QixDQUFDO0lBRUQsaUJBQWlCO0lBQ2pCLElBQUksVUFBVSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekIsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixVQUFVLEVBQUUsQ0FBQztRQUNmLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxDQUFDO2dCQUNMLE9BQU8sRUFBRSxLQUFLO2dCQUNkLGVBQWUsRUFBRSxJQUFJO2dCQUNyQixhQUFhLEVBQUUsS0FBSyxJQUFJLE9BQU87Z0JBQy9CLGVBQWUsRUFBRSxLQUFLO2FBQ3ZCLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsdUJBQXVCO0lBQ3ZCLGtCQUFrQixDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRTlDLG9CQUFvQjtJQUNwQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxnQkFBZ0IsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELHVCQUF1QjtJQUN2QixrQkFBa0IsRUFBRSxDQUFDO0lBRXJCLG9CQUFvQjtJQUNwQixJQUFJLENBQUM7UUFDSCxnQkFBZ0IsRUFBRSxDQUFDO1FBQ25CLFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsVUFBVSxDQUFDLDJCQUEyQixFQUFFO1lBQ3RDLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDO1NBQzNCLENBQUMsQ0FBQztRQUVILFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLGFBQWEsRUFBRTtZQUM1QyxLQUFLLEVBQUUsS0FBSyxJQUFJLFdBQVcsRUFBRTtZQUM3QixJQUFJLEVBQUUsSUFBSTtZQUNWLE9BQU8sRUFBRTtnQkFDUCxLQUFLLEVBQUUsZ0JBQWdCO2FBQ3hCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsY0FBYztJQUNyQixJQUFJLENBQUM7UUFDSCxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU1QixtQ0FBbUM7UUFDbkMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RCLFNBQVMsQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1lBQ3BELE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhO1lBQzlCLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNyQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7UUFFRCwwQkFBMEI7UUFDMUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDO1lBRTNFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDbkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWE7Z0JBQzlCLFVBQVUsQ0FBQyxvQkFBb0IsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDMUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWE7Z0JBQzlCLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2dCQUNqQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RCxDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYTtnQkFDOUIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQixDQUFDO1FBQ0gsQ0FBQztRQUVELFVBQVUsQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsV0FBVyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsT0FBTyxFQUFFO1lBQ3RDLEtBQUssRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xDLElBQUksRUFBRSxJQUFJO1lBQ1YsT0FBTyxFQUFFO2dCQUNQLEtBQUssRUFBRSxrQkFBa0I7Z0JBQ3pCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTthQUNuQjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFNLFVBQVUsSUFBSSxDQUFDLE9BQU8sR0FBZSxFQUFFO0lBQzNDLElBQUksQ0FBQztRQUNILGlCQUFpQjtRQUNqQixhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdkIsc0NBQXNDO1FBQ3RDLGNBQWMsRUFBRSxDQUFDO1FBRWpCLG1EQUFtRDtRQUNuRCxVQUFVLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLGdDQUFnQztRQUNoQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYTtRQUNoQyxVQUFVLENBQUMsaUJBQWlCLEVBQUU7WUFDNUIsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUM7U0FDM0IsQ0FBQyxDQUFDO1FBRUgsV0FBVyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsT0FBTyxFQUFFO1lBQ3RDLEtBQUssRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDO1lBQzNCLElBQUksRUFBRSxJQUFJO1lBQ1YsT0FBTyxFQUFFO2dCQUNQLEtBQUssRUFBRSxNQUFNO2dCQUNiLE9BQU87YUFDUjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsTUFBTSxZQUFZLEdBQUcsYUFBYSxLQUFLLFNBQVM7T0FDM0MsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLFlBQVksQ0FBQyxhQUFhLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsRixJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ2pCLHFEQUFxRDtJQUNyRCxNQUFNLE9BQU8sR0FBZTtRQUMxQixLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssTUFBTTtRQUNuQywwRUFBMEU7UUFDMUUsc0VBQXNFO1FBQ3RFLDJEQUEyRDtRQUMzRCxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO1FBQzNFLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7UUFDM0MsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLEdBQUc7UUFDNUUsVUFBVSxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNoRCxDQUFDO0lBRUYsdUVBQXVFO0lBQ3ZFLG9CQUFvQixFQUFFLENBQUM7SUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG4vLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgcmVhbHBhdGhTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0IHsgZXJyb3JNZXNzYWdlIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgcHJvZ3JhbSB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBhdWRpdFN0YWNrcyB9IGZyb20gJy4vY29tbWFuZHMvYXVkaXQtc3RhY2tzLmpzJztcbmltcG9ydCB7IGF1ZGl0VG9rZW5zIH0gZnJvbSAnLi9jb21tYW5kcy9hdWRpdC10b2tlbnMuanMnO1xuaW1wb3J0IHsgYm9vdHN0cmFwIH0gZnJvbSAnLi9jb21tYW5kcy9ib290c3RyYXAuanMnO1xuaW1wb3J0IHsgY3JlYXRlUGF0IH0gZnJvbSAnLi9jb21tYW5kcy9jcmVhdGUtcGF0LmpzJztcbmltcG9ydCB7IGNyZWF0ZVBpcGVsaW5lIH0gZnJvbSAnLi9jb21tYW5kcy9jcmVhdGUtcGlwZWxpbmUuanMnO1xuaW1wb3J0IHsgZGVwbG95IH0gZnJvbSAnLi9jb21tYW5kcy9kZXBsb3kuanMnO1xuaW1wb3J0IHsgZ2V0UGlwZWxpbmUgfSBmcm9tICcuL2NvbW1hbmRzL2dldC1waXBlbGluZS5qcyc7XG5pbXBvcnQgeyBnZXRQbHVnaW4gfSBmcm9tICcuL2NvbW1hbmRzL2dldC1wbHVnaW4uanMnO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVUZW1wbGF0ZSB9IGZyb20gJy4vY29tbWFuZHMvaW5zdGFudGlhdGUtdGVtcGxhdGUuanMnO1xuaW1wb3J0IHsgbGlzdFBpcGVsaW5lcyB9IGZyb20gJy4vY29tbWFuZHMvbGlzdC1waXBlbGluZXMuanMnO1xuaW1wb3J0IHsgbGlzdFBsdWdpbnMgfSBmcm9tICcuL2NvbW1hbmRzL2xpc3QtcGx1Z2lucy5qcyc7XG5pbXBvcnQgeyBsb2dpbiB9IGZyb20gJy4vY29tbWFuZHMvbG9naW4uanMnO1xuaW1wb3J0IHsgbmV3UGx1Z2luIH0gZnJvbSAnLi9jb21tYW5kcy9uZXctcGx1Z2luLmpzJztcbmltcG9ydCB7IG9yZ0V4cG9ydCB9IGZyb20gJy4vY29tbWFuZHMvb3JnLWV4cG9ydC5qcyc7XG5pbXBvcnQgeyBkZXByZWNhdGVQbHVnaW4sIHlhbmtQbHVnaW4gfSBmcm9tICcuL2NvbW1hbmRzL3BsdWdpbi1saWZlY3ljbGUuanMnO1xuaW1wb3J0IHsgcHJvdmlzaW9uIH0gZnJvbSAnLi9jb21tYW5kcy9wcm92aXNpb24uanMnO1xuaW1wb3J0IHsgcHVibGlzaFBsdWdpbiB9IGZyb20gJy4vY29tbWFuZHMvcHVibGlzaC1wbHVnaW4uanMnO1xuaW1wb3J0IHsgcmVkcml2ZUV2ZW50cyB9IGZyb20gJy4vY29tbWFuZHMvcmVkcml2ZS1ldmVudHMuanMnO1xuaW1wb3J0IHsgcmVnaXN0ZXIgfSBmcm9tICcuL2NvbW1hbmRzL3JlZ2lzdGVyLmpzJztcbmltcG9ydCB7IHJlcG9ydCB9IGZyb20gJy4vY29tbWFuZHMvcmVwb3J0LmpzJztcbmltcG9ydCB7IHNlY3VyaXR5UmVwb3J0IH0gZnJvbSAnLi9jb21tYW5kcy9zZWN1cml0eS1yZXBvcnQuanMnO1xuaW1wb3J0IHsgc2V0dXBFdmVudHMgfSBmcm9tICcuL2NvbW1hbmRzL3NldHVwLWV2ZW50cy5qcyc7XG5pbXBvcnQgeyBzdGF0dXMgfSBmcm9tICcuL2NvbW1hbmRzL3N0YXR1cy5qcyc7XG5pbXBvcnQgeyBzdG9yZVRva2VuIH0gZnJvbSAnLi9jb21tYW5kcy9zdG9yZS10b2tlbi5qcyc7XG5pbXBvcnQgeyBzeW50aCB9IGZyb20gJy4vY29tbWFuZHMvc3ludGguanMnO1xuaW1wb3J0IHsgdGVzdFBsdWdpbiB9IGZyb20gJy4vY29tbWFuZHMvdGVzdC1wbHVnaW4uanMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJVcGdyYWRlT3B0aW9uIH0gZnJvbSAnLi9jb21tYW5kcy91cGdyYWRlLmpzJztcbmltcG9ydCB7IHVwbG9hZFBsdWdpbiB9IGZyb20gJy4vY29tbWFuZHMvdXBsb2FkLXBsdWdpbi5qcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZVBsdWdpbiB9IGZyb20gJy4vY29tbWFuZHMvdmFsaWRhdGUtcGx1Z2luLmpzJztcbmltcG9ydCB7IHZhbGlkYXRlVGVtcGxhdGVzQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvdmFsaWRhdGUtdGVtcGxhdGVzLmpzJztcbmltcG9ydCB7IHZlcmlmeVBsdWdpbnMgfSBmcm9tICcuL2NvbW1hbmRzL3ZlcmlmeS1wbHVnaW5zLmpzJztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuL2NvbW1hbmRzL3ZlcnNpb24uanMnO1xuaW1wb3J0IHtcbiAgQVBQX05BTUUsXG4gIEFQUF9ERVNDUklQVElPTixcbiAgQVBQX1ZFUlNJT04sXG4gIEVOVl9WQVJTLFxuICBpc0RlYnVnTW9kZSxcbiAgZ2VuZXJhdGVFeGVjdXRpb25JZCxcbn0gZnJvbSAnLi9jb25maWcvY2xpLmNvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBiYW5uZXIsIG1pbmlCYW5uZXIgfSBmcm9tICcuL3V0aWxzL2Jhbm5lci5qcyc7XG5pbXBvcnQgeyBnZXRBcGlDb25maWcgfSBmcm9tICcuL3V0aWxzL2NvbmZpZy1sb2FkZXIuanMnO1xuaW1wb3J0IHsgbG9hZFNlc3Npb24gfSBmcm9tICcuL3V0aWxzL2NyZWRlbnRpYWwtc3RvcmUuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi91dGlscy9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IHByaW50SW5mbywgcHJpbnRFcnJvciwgcHJpbnRXYXJuaW5nLCBwcmludERlYnVnLCBwcmludFNlY3Rpb24gfSBmcm9tICcuL3V0aWxzL291dHB1dC11dGlscy5qcyc7XG5pbXBvcnQgeyBwcmVmbGlnaHRDb21tYW5kVG9vbHMgfSBmcm9tICcuL3V0aWxzL3ByZWZsaWdodC5qcyc7XG5pbXBvcnQgeyBzY2hlZHVsZVVwZGF0ZU5vdGljZSB9IGZyb20gJy4vdXRpbHMvdXBkYXRlLW5vdGljZS5qcyc7XG5cbi8qKlxuICogQ0xJIGluaXRpYWxpemF0aW9uIG9wdGlvbnNcbiAqL1xuaW50ZXJmYWNlIENsaU9wdGlvbnMge1xuICAvKipcbiAgICogU2hvdyBiYW5uZXIgb24gc3RhcnR1cFxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBzaG93QmFubmVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTWluaW1hbCBiYW5uZXIgKG5vIEFTQ0lJIGFydClcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG1pbmltYWxCYW5uZXI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEZWJ1ZyBtb2RlXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZWJ1Zz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFZlcmJvc2Ugb3V0cHV0XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB2ZXJib3NlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUXVpZXQgbW9kZSAobWluaW1hbCBvdXRwdXQpXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBxdWlldD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE5vIGNvbG9yIG91dHB1dFxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbm9Db2xvcj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBgLS11cGdyYWRlYCAvIGAtLXVwZ3JhZGUtY2hlY2tgOiB0YWxrcyBvbmx5IHRvIHRoZSBucG0gcmVnaXN0cnksIG5ldmVyIHRvXG4gICAqIHRoZSBwbGF0Zm9ybSwgc28gaXQgbXVzdCB3b3JrIHNpZ25lZCBvdXQgYW5kIHdpdGhvdXQgdGhlIHNpZ24taW4gd2FybmluZy5cbiAgICovXG4gIHNlbGZVcGRhdGU/OiBib29sZWFuO1xufVxuXG4vKiogV2hldGhlciBhcmd2IGFza3MgZm9yIGEgc2VsZi11cGRhdGUgKGAtLXVwZ3JhZGVgIC8gYC0tdXBncmFkZS1jaGVja2AsIHdpdGggb3Igd2l0aG91dCBhIHZlcnNpb24pLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2VsZlVwZGF0ZShhcmd2OiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICByZXR1cm4gYXJndi5zb21lKChhKSA9PiBhID09PSAnLS11cGdyYWRlJyB8fCBhID09PSAnLS11cGdyYWRlLWNoZWNrJyB8fCBhLnN0YXJ0c1dpdGgoJy0tdXBncmFkZT0nKSB8fCBhLnN0YXJ0c1dpdGgoJy0tdXBncmFkZS1jaGVjaz0nKSk7XG59XG5cbi8qKlxuICogQ2hlY2sgZW52aXJvbm1lbnQgYW5kIGRpc3BsYXkgd2FybmluZ3NcbiAqL1xuZnVuY3Rpb24gY2hlY2tFbnZpcm9ubWVudCh7IHNpZ25JblJlbGV2YW50ID0gdHJ1ZSB9OiB7IHNpZ25JblJlbGV2YW50PzogYm9vbGVhbiB9ID0ge30pOiB2b2lkIHtcbiAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgLy8gTm90IHNpZ25lZCBpbiBBVCBBTEw6IG5laXRoZXIgYW4gZXhwbGljaXQgdG9rZW4gbm9yIGEgc3RvcmVkIGJyb3dzZXJcbiAgLy8gc2lnbi1pbi4gRWl0aGVyIGFsb25lIGlzIGVub3VnaCwgc28gdGhlIHdhcm5pbmcgb25seSBmaXJlcyB3aGVuIGJvdGggYXJlXG4gIC8vIG1pc3Npbmcg4oCUIG90aGVyd2lzZSBgYXV0aCBsb2dpbmAgdXNlcnMgd291bGQgYmUgbmFnZ2VkIG9uIGV2ZXJ5IGNvbW1hbmQuXG4gIGlmIChzaWduSW5SZWxldmFudCAmJiAhcHJvY2Vzcy5lbnZbRU5WX1ZBUlMuUExBVEZPUk1fVE9LRU5dICYmICFsb2FkU2Vzc2lvbihnZXRBcGlDb25maWcoKS5hcGkuYmFzZVVybCkpIHtcbiAgICB3YXJuaW5ncy5wdXNoKCdOb3Qgc2lnbmVkIGluIChubyBQTEFURk9STV9UT0tFTiwgbm8gc3RvcmVkIHNlc3Npb24pJyk7XG4gICAgd2FybmluZ3MucHVzaCgnUnVuIFwicGlwZWxpbmUtbWFuYWdlciBhdXRoIGxvZ2luXCIg4oCUIEFQSSBvcGVyYXRpb25zIHdpbGwgZmFpbCB1bnRpbCB5b3UgZG8nKTtcbiAgfVxuXG4gIC8vIENoZWNrIE5vZGUgdmVyc2lvblxuICBjb25zdCBub2RlVmVyc2lvbiA9IHByb2Nlc3MudmVyc2lvbjtcbiAgY29uc3QgbWFqb3JWZXJzaW9uID0gcGFyc2VJbnQobm9kZVZlcnNpb24uc2xpY2UoMSkuc3BsaXQoJy4nKVswXSB8fCAnMCcsIDEwKTtcbiAgaWYgKG1ham9yVmVyc2lvbiA8IDI0KSB7XG4gICAgd2FybmluZ3MucHVzaChgTm9kZS5qcyAke25vZGVWZXJzaW9ufSBkZXRlY3RlZCAtIHZlcnNpb24gMjQrIHJlcXVpcmVkIChzZWUgcGFja2FnZS5qc29uIGVuZ2luZXMpYCk7XG4gIH1cblxuICAvLyBEaXNwbGF5IHdhcm5pbmdzXG4gIGlmICh3YXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgcHJpbnRTZWN0aW9uKCdFbnZpcm9ubWVudCBXYXJuaW5ncycpO1xuICAgIHdhcm5pbmdzLmZvckVhY2god2FybmluZyA9PiB7XG4gICAgICBwcmludFdhcm5pbmcod2FybmluZyk7XG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coJycpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGxheSBzdGFydHVwIGluZm9ybWF0aW9uXG4gKi9cbmZ1bmN0aW9uIGRpc3BsYXlTdGFydHVwSW5mbyhvcHRpb25zOiBDbGlPcHRpb25zKTogdm9pZCB7XG4gIGlmIChvcHRpb25zLnF1aWV0KSByZXR1cm47XG5cbiAgY29uc3QgZXhlY3V0aW9uSWQgPSBnZW5lcmF0ZUV4ZWN1dGlvbklkKCk7XG5cbiAgaWYgKG9wdGlvbnMuZGVidWcgfHwgb3B0aW9ucy52ZXJib3NlKSB7XG4gICAgcHJpbnREZWJ1ZygnQ0xJIENvbmZpZ3VyYXRpb24nLCB7XG4gICAgICBuYW1lOiBBUFBfTkFNRSxcbiAgICAgIHZlcnNpb246IEFQUF9WRVJTSU9OLFxuICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICBub2RlOiBwcm9jZXNzLnZlcnNpb24sXG4gICAgICBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSxcbiAgICAgIGFyY2g6IHByb2Nlc3MuYXJjaCxcbiAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgIGVudjoge1xuICAgICAgICBkZWJ1ZzogcHJvY2Vzcy5lbnYuREVCVUcsXG4gICAgICAgIHRva2VuOiBwcm9jZXNzLmVudltFTlZfVkFSUy5QTEFURk9STV9UT0tFTl0gPyAnc2V0JzogJ25vdCBzZXQnLFxuICAgICAgICB1cmw6IHByb2Nlc3MuZW52W0VOVl9WQVJTLlBMQVRGT1JNX0JBU0VfVVJMXSB8fCAnZGVmYXVsdCcsXG4gICAgICB9LFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHByaW50RGVidWcoJ1N0YXJ0aW5nIENMSScsIHtcbiAgICAgIHZlcnNpb246IEFQUF9WRVJTSU9OLFxuICAgICAgZXhlY3V0aW9uSWQsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqIFRvcC1sZXZlbCBgLS1oZWxwYCBlcGlsb2d1ZTogY29tbWFuZCBncm91cHMsIGF1dGgsIGVudiB2YXJzLCBleGFtcGxlcywgZXhpdCBjb2Rlcy4gKi9cbmNvbnN0IEhFTFBfVEVYVCA9IGBcbkNvbW1hbmQgZ3JvdXBzOlxuICBhdXRoICAgICAgQXV0aGVudGljYXRlIGFuZCBtYW5hZ2UgY3JlZGVudGlhbHMgKGxvZ2luLCBwYXQpXG4gIHBpcGVsaW5lICBDcmVhdGUsIGluc3BlY3QsIGFuZCBkZXBsb3kgcGlwZWxpbmVzIChjcmVhdGUsIGxpc3QsIGdldCwgcmVnaXN0ZXIsIHN5bnRoLCBkZXBsb3kpXG4gIHBsdWdpbiAgICBBdXRob3IsIHZhbGlkYXRlLCBhbmQgcHVibGlzaCBwbHVnaW5zIChuZXcsIHZhbGlkYXRlLCB0ZXN0LCBwdWJsaXNoLCB1cGxvYWQsIGdldCwgbGlzdCwgZGVwcmVjYXRlLCB5YW5rLCB2ZXJpZnkpXG4gIHRlbXBsYXRlICBJbnN0YW50aWF0ZSBnb2xkZW4tcGF0aCBwaXBlbGluZSB0ZW1wbGF0ZXMgYW5kIHZhbGlkYXRlIHt7IC4uLiB9fSBzeW50YXggKGluc3RhbnRpYXRlLCB2YWxpZGF0ZSlcbiAgaW5mcmEgICAgIFNldCB1cCBhbmQgb3BlcmF0ZSBwbGF0Zm9ybSBpbmZyYXN0cnVjdHVyZSAoYm9vdHN0cmFwLCBzZXR1cC1ldmVudHMsIHJlZHJpdmUtZXZlbnRzLCBzdG9yZS10b2tlbiwgcHJvdmlzaW9uKVxuICBhdWRpdCAgICAgT3BlcmF0b3IgYXVkaXRzLCBjcm9uLWZyaWVuZGx5ICh0b2tlbnMsIHN0YWNrcylcbiAgb3JnICAgICAgIE9yZ2FuaXphdGlvbiBkYXRhIG9wZXJhdGlvbnMgKGV4cG9ydClcbiAgc2VjdXJpdHktcmVwb3J0ICBVcGxvYWQgU0FSSUYgLyB0cml2eSAvIGdyeXBlIHJlcG9ydHMgcHJvZHVjZWQgaW5zaWRlIGEgcGlwZWxpbmUgKHVwbG9hZClcbiAgc3RhdHVzIC8gdmVyc2lvbiAvIGNvbXBsZXRpb25zXG5cbkF1dGhlbnRpY2F0aW9uOlxuICBSdW4gJyR7QVBQX05BTUV9IGF1dGggbG9naW4nIG9uY2UgcGVyIHBsYXRmb3JtIOKAlCBpdCBzaWducyB5b3UgaW4gdGhyb3VnaCB5b3VyXG4gIGJyb3dzZXIgKG5vIHBhc3N3b3JkIG9uIHRoZSBjb21tYW5kIGxpbmUpIGFuZCBzdG9yZXMgdGhlIHNlc3Npb24gdW5kZXJcbiAgfi8ucGlwZWxpbmUtbWFuYWdlci9jcmVkZW50aWFscy5qc29uLiBGb3IgQ0ksIGNyZWF0ZSBhbiBhY2Nlc3Mga2V5IHdpdGhcbiAgJyR7QVBQX05BTUV9IGF1dGggcGF0JyBhbmQgZXhwb3J0IGl0IGFzICR7RU5WX1ZBUlMuUExBVEZPUk1fVE9LRU59LCB3aGljaCBhbHdheXMgd2lucy5cblxuRW52aXJvbm1lbnQgVmFyaWFibGVzOlxuICAke0VOVl9WQVJTLlBMQVRGT1JNX1RPS0VOfSBBY2Nlc3Mga2V5IG9yIHRva2VuIChvdmVycmlkZXMgdGhlIHN0b3JlZCBzZXNzaW9uKVxuICAke0VOVl9WQVJTLlBMQVRGT1JNX0JBU0VfVVJMfSBBUEkgYmFzZSBVUkwgKG9wdGlvbmFsKVxuICAke0VOVl9WQVJTLkNMSV9DT05GSUdfUEFUSH0gQ29uZmlnIGZpbGUgcGF0aCAob3B0aW9uYWwpXG4gICR7RU5WX1ZBUlMuVExTX1JFSkVDVF9VTkFVVEhPUklaRUR9IERpc2FibGUgU1NMIHZlcmlmaWNhdGlvbiBpZiAnMCdcbiAgUExBVEZPUk1fQ0FfQlVORExFICBQRU0gb2YgYSBwcml2YXRlIENBIHRvIHRydXN0IGZvciB0aGUgcGxhdGZvcm0gKHZlcmlmaWVkLCBub3Qgc2tpcHBlZClcbiAgJHtFTlZfVkFSUy5ERUJVR30gRW5hYmxlIGRlYnVnIG1vZGUgaWYgJ3RydWUnXG5cbkV4YW1wbGVzOlxuICAkICR7QVBQX05BTUV9IHZlcnNpb25cbiAgJCAke0FQUF9OQU1FfSAtLXVwZ3JhZGUgICAgICAgICAgICAoLS11cGdyYWRlIDx2ZXJzaW9uPiBmb3IgYSBzcGVjaWZpYyBvbmUsIC0tdXBncmFkZS1jaGVjayB0byBvbmx5IGxvb2spXG4gICQgJHtBUFBfTkFNRX0gYXV0aCBsb2dpblxuICAkICR7QVBQX05BTUV9IHBpcGVsaW5lIGxpc3QgLS1wcm9qZWN0IG15LWFwcFxuICAkICR7QVBQX05BTUV9IHBpcGVsaW5lIGdldCAtLWlkIHBpcGUtMTIzIC0tZm9ybWF0IGpzb25cbiAgJCAke0FQUF9OQU1FfSBwaXBlbGluZSBjcmVhdGUgLWYgcHJvcHMuanNvbiAtLWRlcGxveSAtLXByb2ZpbGUgcHJvZHVjdGlvblxuICAkICR7QVBQX05BTUV9IHRlbXBsYXRlIGluc3RhbnRpYXRlIC1uIHJlYWN0LWphdmFzY3JpcHQgLXAgcmVhY3QgLW8gYWNtZSAtLWlucHV0IG9yZ0lkPTx1dWlkPiAtLW91dHB1dCBwcm9wcy5qc29uXG4gICQgJHtBUFBfTkFNRX0gcGx1Z2luIHVwbG9hZCAtLWZpbGUgcGx1Z2luLnppcFxuICAkICR7QVBQX05BTUV9IGluZnJhIHN0b3JlLXRva2VuIC0tZGF5cyAzMCAtLXJlZ2lvbiB1cy1lYXN0LTFcbiAgJCAke0FQUF9OQU1FfSBpbmZyYSBib290c3RyYXAgLS1hY2NvdW50IDEyMzQ1Njc4OTAxMiAtLXJlZ2lvbiB1cy1lYXN0LTFcbiAgJCAke0FQUF9OQU1FfSBwaXBlbGluZSBkZXBsb3kgLS1pZCBwaXBlLTEyMyAtLXByb2ZpbGUgcHJvZHVjdGlvblxuXG5FeGl0IGNvZGVzICgwID0gc3VjY2VzczsgZmFpbHVyZXMgdXNlIGEgc3RhbmRhcmQgY29kZSBieSBlcnJvciB0eXBlKTpcbiAgMSBnZW5lcmFsIMK3IDIgdmFsaWRhdGlvbiDCtyAzIGFwaS1yZXF1ZXN0IMK3IDQgYXV0aCDCtyA1IGZvcmJpZGRlblxuICA2IG5vdC1mb3VuZCDCtyA3IG5ldHdvcmsgwrcgOCBjb25maWcgwrcgOSBmaWxlLXN5c3RlbSDCtyAxMCB0aW1lb3V0XG5cblJ1biAnJHtBUFBfTkFNRX0gPGdyb3VwPiAtLWhlbHAnIHRvIHNlZSBhIGdyb3VwJ3Mgc3ViY29tbWFuZHMuXG5gO1xuXG4vKipcbiAqIFRhc2sgbmFtZXNwYWNlcyDigJQgY29tbWFuZHMgYXJlIGdyb3VwZWQgYnkgdGhlIGpvYiB0aGUgdXNlciBpcyBkb2luZywgbm90IGJ5XG4gKiBpbXBsZW1lbnRhdGlvbi4gRWFjaCBwYXJlbnQgaXMgYSBzdWJjb21tYW5kIGNvbnRhaW5lcjsgdGhlIGxlYWYgdmVyYiBsaXZlcyBpblxuICogdGhlIGNvbW1hbmQgZmlsZSAoZS5nLiBgLmNvbW1hbmQoJ2xpc3QnKWApLCBzbyBgcGlwZWxpbmUgbGlzdGAgcmVhZHMgYXMgYSB0YXNrLlxuICovXG5mdW5jdGlvbiByZWdpc3RlclRhc2tOYW1lc3BhY2VzKCk6IHZvaWQge1xuICBwcmludERlYnVnKCdSZWdpc3RlcmluZyB0YXNrIG5hbWVzcGFjZXMnKTtcblxuICAvLyBhdXRoIOKAlCBhdXRoZW50aWNhdGUgYW5kIG1hbmFnZSBjcmVkZW50aWFsc1xuICBjb25zdCBhdXRoID0gcHJvZ3JhbS5jb21tYW5kKCdhdXRoJykuZGVzY3JpcHRpb24oJ0F1dGhlbnRpY2F0ZSBhbmQgbWFuYWdlIGNyZWRlbnRpYWxzJyk7XG4gIGxvZ2luKGF1dGgpOyAvLyBhdXRoIGxvZ2luIOKAlCBicm93c2VyIChkZXZpY2UtYXV0aG9yaXphdGlvbikgc2lnbi1pbiwgc3RvcmVkIGxvY2FsbHlcbiAgY3JlYXRlUGF0KGF1dGgpOyAvLyBhdXRoIHBhdCDigJQgY3JlYXRlIGEgbmFtZWQgYWNjZXNzIGtleSAoZGV2aWNlIHNpZ24taW4gKyBicm93c2VyIHN0ZXAtdXApXG5cbiAgLy8gcGlwZWxpbmUg4oCUIGNyZWF0ZSwgaW5zcGVjdCwgYW5kIGRlcGxveSBwaXBlbGluZXNcbiAgY29uc3QgcGlwZWxpbmUgPSBwcm9ncmFtLmNvbW1hbmQoJ3BpcGVsaW5lJykuZGVzY3JpcHRpb24oJ0NyZWF0ZSwgaW5zcGVjdCwgYW5kIGRlcGxveSBwaXBlbGluZXMnKTtcbiAgY3JlYXRlUGlwZWxpbmUocGlwZWxpbmUpOyAvLyBwaXBlbGluZSBjcmVhdGVcbiAgbGlzdFBpcGVsaW5lcyhwaXBlbGluZSk7IC8vIHBpcGVsaW5lIGxpc3RcbiAgZ2V0UGlwZWxpbmUocGlwZWxpbmUpOyAvLyBwaXBlbGluZSBnZXRcbiAgcmVnaXN0ZXIocGlwZWxpbmUpOyAvLyBwaXBlbGluZSByZWdpc3RlciDigJQgcmUtcmVnaXN0ZXIgYSBkZXBsb3llZCBBUk4gKyBkcmFpbiBwZW5kaW5nIGludGVudHNcbiAgc3ludGgocGlwZWxpbmUpOyAvLyBwaXBlbGluZSBzeW50aCDigJQgQ0RLIHN5bnRoZXNpcyBmcm9tIHBpcGVsaW5lIGNvbmZpZ1xuICBkZXBsb3kocGlwZWxpbmUpOyAvLyBwaXBlbGluZSBkZXBsb3kg4oCUIENESyBkZXBsb3kgKC0tYXBwIHByaW50cyBib2lsZXJwbGF0ZSBwYXRoKVxuXG4gIC8vIHBsdWdpbiDigJQgYXV0aG9yLCB2YWxpZGF0ZSwgYW5kIHB1Ymxpc2ggcGx1Z2luc1xuICBjb25zdCBwbHVnaW4gPSBwcm9ncmFtLmNvbW1hbmQoJ3BsdWdpbicpLmRlc2NyaXB0aW9uKCdBdXRob3IsIHZhbGlkYXRlLCBhbmQgcHVibGlzaCBwbHVnaW5zJyk7XG4gIG5ld1BsdWdpbihwbHVnaW4pOyAvLyBwbHVnaW4gbmV3IOKAlCBzY2FmZm9sZCBhIGxvY2FsIHBsdWdpbiBkaXJlY3RvcnlcbiAgdmFsaWRhdGVQbHVnaW4ocGx1Z2luKTsgLy8gcGx1Z2luIHZhbGlkYXRlIOKAlCB0aGUgc2VydmVyJ3Mgc2NoZW1hcyArIHRoZSBjYXRhbG9nLW1ldGFkYXRhIHJlcG9ydFxuICB0ZXN0UGx1Z2luKHBsdWdpbik7IC8vIHBsdWdpbiB0ZXN0IOKAlCBydW4gaW5zdGFsbCArIGJ1aWxkIGNvbW1hbmRzIGxvY2FsbHkgaW4gdGhlIGltYWdlXG4gIHB1Ymxpc2hQbHVnaW4ocGx1Z2luKTsgLy8gcGx1Z2luIHB1Ymxpc2gg4oCUIHByZS1mbGlnaHQsIHNjYW4gcHJldmlldywgYWNjZXB0LW9yLWVkaXQsIHB1Ymxpc2ggcmVxdWVzdFxuICB1cGxvYWRQbHVnaW4ocGx1Z2luKTsgLy8gcGx1Z2luIHVwbG9hZCDigJQgdXBsb2FkIGFuZCBkZXBsb3lcbiAgZ2V0UGx1Z2luKHBsdWdpbik7IC8vIHBsdWdpbiBnZXRcbiAgbGlzdFBsdWdpbnMocGx1Z2luKTsgLy8gcGx1Z2luIGxpc3RcbiAgZGVwcmVjYXRlUGx1Z2luKHBsdWdpbik7IC8vIHBsdWdpbiBkZXByZWNhdGUg4oCUIGRlcHJlY2F0ZSAob3IgLS11bmRvKSBhIHZlcnNpb25cbiAgeWFua1BsdWdpbihwbHVnaW4pOyAvLyBwbHVnaW4geWFuayDigJQgc3RvcCBhIHZlcnNpb24gcmVzb2x2aW5nIGZvciBuZXcgc3ludGhzXG4gIHZlcmlmeVBsdWdpbnMocGx1Z2luKTsgLy8gcGx1Z2luIHZlcmlmeSDigJQgcnVuLXRpbWUgY2hlY2sgb2YgYSBwaXBlbGluZSdzIHBpbm5lZCBwbHVnaW4gaW1hZ2VzXG5cbiAgLy8gdGVtcGxhdGUg4oCUIGluc3RhbnRpYXRlIGdvbGRlbi1wYXRoIHBpcGVsaW5lIHRlbXBsYXRlcywgdmFsaWRhdGUge3sgLi4uIH19IHN5bnRheFxuICBjb25zdCB0ZW1wbGF0ZSA9IHByb2dyYW0uY29tbWFuZCgndGVtcGxhdGUnKS5kZXNjcmlwdGlvbignSW5zdGFudGlhdGUgcGlwZWxpbmUgdGVtcGxhdGVzIGFuZCB2YWxpZGF0ZSB7eyAuLi4gfX0gdGVtcGxhdGUgc3ludGF4Jyk7XG4gIGluc3RhbnRpYXRlVGVtcGxhdGUodGVtcGxhdGUpOyAvLyB0ZW1wbGF0ZSBpbnN0YW50aWF0ZSDigJQgcmVuZGVyIGEgdGVtcGxhdGUgaW50byBwaXBlbGluZSBwcm9wc1xuICB2YWxpZGF0ZVRlbXBsYXRlc0NvbW1hbmQodGVtcGxhdGUpOyAvLyB0ZW1wbGF0ZSB2YWxpZGF0ZVxuXG4gIC8vIGluZnJhIOKAlCBzZXQgdXAgYW5kIG9wZXJhdGUgcGxhdGZvcm0gaW5mcmFzdHJ1Y3R1cmVcbiAgY29uc3QgaW5mcmEgPSBwcm9ncmFtLmNvbW1hbmQoJ2luZnJhJykuZGVzY3JpcHRpb24oJ1NldCB1cCBhbmQgb3BlcmF0ZSBwbGF0Zm9ybSBpbmZyYXN0cnVjdHVyZScpO1xuICBib290c3RyYXAoaW5mcmEpOyAvLyBpbmZyYSBib290c3RyYXAg4oCUIENESyB0b29sa2l0IHN0YWNrXG4gIHNldHVwRXZlbnRzKGluZnJhKTsgLy8gaW5mcmEgc2V0dXAtZXZlbnRzIOKAlCBFdmVudEJyaWRnZSBldmVudCBpbmdlc3Rpb25cbiAgcmVkcml2ZUV2ZW50cyhpbmZyYSk7IC8vIGluZnJhIHJlZHJpdmUtZXZlbnRzIOKAlCBtYW51YWwgRExRIOKGkiBxdWV1ZSByZWRyaXZlIGZhbGxiYWNrXG4gIHN0b3JlVG9rZW4oaW5mcmEpOyAvLyBpbmZyYSBzdG9yZS10b2tlbiDigJQgSldUIHRva2VuIGluIFNlY3JldHMgTWFuYWdlciBmb3IgQ0RLXG4gIHByb3Zpc2lvbihpbmZyYSk7IC8vIGluZnJhIHByb3Zpc2lvbiDigJQgQUktYXNzaXN0ZWQgZGVwbG95L3RlYXJkb3duIG9mIHRoZSBwbGF0Zm9ybVxuXG4gIC8vIGF1ZGl0IOKAlCBvcGVyYXRvciBhdWRpdHMgKGNyb24tZnJpZW5kbHk6IGV4aXQgMSBvbiBmaW5kaW5ncylcbiAgY29uc3QgYXVkaXQgPSBwcm9ncmFtLmNvbW1hbmQoJ2F1ZGl0JykuZGVzY3JpcHRpb24oJ09wZXJhdG9yIGF1ZGl0cyAoY3Jvbi1mcmllbmRseTogZXhpdCAxIG9uIGZpbmRpbmdzKScpO1xuICBhdWRpdFRva2VucyhhdWRpdCk7IC8vIGF1ZGl0IHRva2VucyDigJQgZXhwaXJpbmcgcGxhdGZvcm0gdG9rZW5zIGluIFNlY3JldHMgTWFuYWdlclxuICBhdWRpdFN0YWNrcyhhdWRpdCk7IC8vIGF1ZGl0IHN0YWNrcyDigJQgQ0ZOIHN0YWNrcyB2cyBwaXBlbGluZV9yZWdpc3RyeSBkcmlmdFxuXG4gIC8vIG9yZyDigJQgb3JnYW5pemF0aW9uIGRhdGEgb3BlcmF0aW9uc1xuICBjb25zdCBvcmcgPSBwcm9ncmFtLmNvbW1hbmQoJ29yZycpLmRlc2NyaXB0aW9uKCdPcmdhbml6YXRpb24gZGF0YSBvcGVyYXRpb25zJyk7XG4gIG9yZ0V4cG9ydChvcmcpOyAvLyBvcmcgZXhwb3J0IOKAlCBHRFBSIHBvcnRhYmlsaXR5IGV4cG9ydFxuXG4gIC8vIHJlcG9ydCDigJQgdGhlIHN0YWtlaG9sZGVyLXJlcG9ydCBhZGQtb24uIFJlZ2lzdGVyZWQgYXMgaXRzIE9XTiBuYW1lc3BhY2UgcmF0aGVyIHRoYW5cbiAgLy8gdW5kZXIgYG9yZ2AsIGJlY2F1c2UgaXRzIHZlcmJzIGFyZSBhIGxlYWQncyB3b3JrZmxvdyAoY29tcG9zZSwgcHVibGlzaCwgc2hhcmUpLCBub3QgYW5cbiAgLy8gb3JnYW5pemF0aW9uLWRhdGEgb3BlcmF0aW9uLiBUaGUgdHdvIGpvYnMgdGhlIGRhc2hib2FyZCBpcyB0aGUgd3Jvbmcgc2hhcGUgZm9yIGFyZVxuICAvLyBiYWNrZmlsbGluZyBhIHJ1biBvZiBwYXN0IHBlcmlvZHMgYW5kIGRyaXZpbmcgYSBwdWJsaXNoIGZyb20gYW5vdGhlciBzY2hlZHVsZXIuXG4gIHJlcG9ydChwcm9ncmFtKTtcblxuICAvLyBzZWN1cml0eS1yZXBvcnQg4oCUIHVwbG9hZCBTQVJJRiAvIHRyaXZ5IC8gZ3J5cGUgcmVwb3J0cyBwcm9kdWNlZCBpbnNpZGUgYSBwaXBlbGluZVxuICBzZWN1cml0eVJlcG9ydChwcm9ncmFtKTtcbn1cblxuLyoqIFByaW50IHNoZWxsIGNvbXBsZXRpb25zIGZvciBgc2hlbGxgIChiYXNoLCB6c2ggb3IgZmlzaCkuICovXG5mdW5jdGlvbiBwcmludENvbXBsZXRpb25zKHNoZWxsOiBzdHJpbmcpOiB2b2lkIHtcbiAgLy8gV2FsayBjb21tYW5kZXIncyByZWdpc3RlcmVkIHRyZWUgc28gY29tcGxldGlvbnMgbmV2ZXIgZHJpZnQgZnJvbSB0aGUgYWN0dWFsXG4gIC8vIHN1cmZhY2UuIGB0b3BMZXZlbGAgaXMgdGhlIGZpcnN0LXdvcmQgc2V0IChuYW1lc3BhY2VzICsgbWV0YSBjb21tYW5kcyk7XG4gIC8vIGBzdWJzYCBtYXBzIGVhY2ggbmFtZXNwYWNlIHRvIGl0cyBsZWFmIHZlcmJzIGZvciBzZWNvbmQtd29yZCBjb21wbGV0aW9uLlxuICBjb25zdCB0b3BMZXZlbCA9IHByb2dyYW0uY29tbWFuZHMubWFwKGMgPT4gYy5uYW1lKCkpLnNvcnQoKTtcbiAgY29uc3Qgc3ViczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG4gIGZvciAoY29uc3QgYyBvZiBwcm9ncmFtLmNvbW1hbmRzKSB7XG4gICAgaWYgKGMuY29tbWFuZHMubGVuZ3RoID4gMCkgc3Vic1tjLm5hbWUoKV0gPSBjLmNvbW1hbmRzLm1hcChzID0+IHMubmFtZSgpKS5zb3J0KCk7XG4gIH1cbiAgY29uc3QgdG9wTGV2ZWxTdHIgPSB0b3BMZXZlbC5qb2luKCcgJyk7XG4gIHN3aXRjaCAoc2hlbGwpIHtcbiAgICBjYXNlICdiYXNoJzoge1xuICAgICAgLy8gVHdvLWxldmVsOiBjb21wbGV0ZSB0aGUgZ3JvdXAgYXQgd29yZCAxLCBpdHMgc3ViY29tbWFuZHMgYXQgd29yZCAyLlxuICAgICAgY29uc3QgY2FzZXMgPSBPYmplY3QuZW50cmllcyhzdWJzKVxuICAgICAgICAubWFwKChbbnMsIGxlYXZlc10pID0+IGAgICAgICAke25zfSkgQ09NUFJFUExZPSgkKGNvbXBnZW4gLVcgXCIke2xlYXZlcy5qb2luKCcgJyl9XCIgLS0gXCJcXCR7Y3VyfVwiKSk7O2ApXG4gICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICAgIGNvbnNvbGUubG9nKGAjIHBpcGVsaW5lLW1hbmFnZXIgYmFzaCBjb21wbGV0aW9uc1xuX3BpcGVsaW5lX21hbmFnZXJfY29tcGxldGlvbnMoKSB7XG4gIGxvY2FsIGN1cj1cIlxcJHtDT01QX1dPUkRTW0NPTVBfQ1dPUkRdfVwiXG4gIGlmIFsgXCJcXCR7Q09NUF9DV09SRH1cIiAtZXEgMSBdOyB0aGVuXG5DT01QUkVQTFk9KCQoY29tcGdlbiAtVyBcIiR7dG9wTGV2ZWxTdHJ9XCIgLS0gXCJcXCR7Y3VyfVwiKSlcbnJldHVyblxuICBmaVxuICBjYXNlIFwiXFwke0NPTVBfV09SRFNbMV19XCIgaW5cbiR7Y2FzZXN9XG4gIGVzYWNcbn1cbmNvbXBsZXRlIC1GIF9waXBlbGluZV9tYW5hZ2VyX2NvbXBsZXRpb25zIHBpcGVsaW5lLW1hbmFnZXJgKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlICd6c2gnOiB7XG4gICAgICBjb25zdCBjYXNlcyA9IE9iamVjdC5lbnRyaWVzKHN1YnMpXG4gICAgICAgIC5tYXAoKFtucywgbGVhdmVzXSkgPT4gYCAgICAgICAgJHtuc30pIF92YWx1ZXMgJ3N1YmNvbW1hbmQnICR7bGVhdmVzLmpvaW4oJyAnKX07O2ApXG4gICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICAgIGNvbnNvbGUubG9nKGAjIHBpcGVsaW5lLW1hbmFnZXIgenNoIGNvbXBsZXRpb25zXG5fcGlwZWxpbmVfbWFuYWdlcigpIHtcbiAgaWYgKCggQ1VSUkVOVCA9PSAyICkpOyB0aGVuXG5fdmFsdWVzICdjb21tYW5kJyAke3RvcExldmVsLmpvaW4oJyAnKX1cbnJldHVyblxuICBmaVxuICBjYXNlIFwiXFwke3dvcmRzWzJdfVwiIGluXG4ke2Nhc2VzfVxuICBlc2FjXG59XG5jb21wZGVmIF9waXBlbGluZV9tYW5hZ2VyIHBpcGVsaW5lLW1hbmFnZXJgKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlICdmaXNoJzoge1xuICAgICAgY29uc3QgbGluZXMgPSBbXG4gICAgICAgIGBjb21wbGV0ZSAtYyBwaXBlbGluZS1tYW5hZ2VyIC1uICdfX2Zpc2hfdXNlX3N1YmNvbW1hbmQnIC1hICcke3RvcExldmVsU3RyfSdgLFxuICAgICAgICAuLi5PYmplY3QuZW50cmllcyhzdWJzKS5tYXAoKFtucywgbGVhdmVzXSkgPT5cbiAgICAgICAgICBgY29tcGxldGUgLWMgcGlwZWxpbmUtbWFuYWdlciAtbiAnX19maXNoX3NlZW5fc3ViY29tbWFuZF9mcm9tICR7bnN9JyAtYSAnJHtsZWF2ZXMuam9pbignICcpfSdgKSxcbiAgICAgIF07XG4gICAgICBjb25zb2xlLmxvZyhgIyBwaXBlbGluZS1tYW5hZ2VyIGZpc2ggY29tcGxldGlvbnNcXG4ke2xpbmVzLmpvaW4oJ1xcbicpfWApO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICBjb25zb2xlLmVycm9yKGBVbmtub3duIHNoZWxsOiAke3NoZWxsfS4gVXNlIGJhc2gsIHpzaCwgb3IgZmlzaC5gKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlZ2lzdGVyIGFsbCBDTEkgY29tbWFuZHNcbiAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJDb21tYW5kcygpOiB2b2lkIHtcbiAgcHJpbnREZWJ1ZygnUmVnaXN0ZXJpbmcgY29tbWFuZHMnKTtcblxuICAvLyBDb25maWd1cmUgcHJvZ3JhbVxuICBwcm9ncmFtXG4gICAgLm5hbWUoQVBQX05BTUUpXG4gICAgLmRlc2NyaXB0aW9uKEFQUF9ERVNDUklQVElPTilcbiAgICAudmVyc2lvbihBUFBfVkVSU0lPTiwgJy12LCAtLXZlcnNpb24nLCAnU2hvdyBDTEkgdmVyc2lvbicpXG4gICAgLm9wdGlvbignLS1kZWJ1ZycsICdFbmFibGUgZGVidWcgb3V0cHV0IHdpdGggc3RhY2sgdHJhY2VzJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS12ZXJib3NlJywgJ1Nob3cgZGV0YWlsZWQgaW5mb3JtYXRpb24nLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXF1aWV0JywgJ01pbmltYWwgb3V0cHV0IChlcnJvcnMgb25seSknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLW5vLWNvbG9yJywgJ0Rpc2FibGUgY29sb3JlZCBvdXRwdXQnLCBmYWxzZSlcbiAgICAuYWRkSGVscFRleHQoJ2FmdGVyJywgSEVMUF9URVhUKTtcblxuICAvLyAtLXVwZ3JhZGUgW3ZlcnNpb25dOiBzZWxmLXVwZGF0ZSwgaGFuZGxlZCBsaWtlIC0tdmVyc2lvbiAobGlzdGVuZXIgKyBleGl0KS5cbiAgcmVnaXN0ZXJVcGdyYWRlT3B0aW9uKHByb2dyYW0pO1xuXG4gIC8vIEZhaWwtZmFzdCBwcmVmbGlnaHQ6IGJlZm9yZSBBTlkgY29tbWFuZCdzIGFjdGlvbiBydW5zLCB2ZXJpZnkgdGhlIGxvY2FsXG4gIC8vIHRvb2xzIHRoYXQgY29tbWFuZCBuZWVkcy4gQ29tbWFuZGVyIHNraXBzIHRoaXMgZm9yIC0taGVscC8tLXZlcnNpb24gYW5kIGZvclxuICAvLyBoZWxwIG91dHB1dCwgc28gdGhvc2UgYWx3YXlzIHdvcms7IEFQSS1vbmx5IGNvbW1hbmRzIGRlY2xhcmUgbm8gcmVxdWlyZW1lbnRzXG4gIC8vIGFuZCBwYXNzIHRocm91Z2ggdW50b3VjaGVkLlxuICBwcm9ncmFtLmhvb2soJ3ByZUFjdGlvbicsIChfdGhpc0NvbW1hbmQsIGFjdGlvbkNvbW1hbmQpID0+IHByZWZsaWdodENvbW1hbmRUb29scyhhY3Rpb25Db21tYW5kKSk7XG5cbiAgLy8gVG9wLWxldmVsIG1ldGEgY29tbWFuZHMgKG5vIG5hbWVzcGFjZSkuXG4gIHZlcnNpb24ocHJvZ3JhbSk7XG4gIHN0YXR1cyhwcm9ncmFtKTsgLy8gU2hvdyBlbnZpcm9ubWVudCBhbmQgY29ubmVjdGl2aXR5IHN0YXR1c1xuXG4gIHJlZ2lzdGVyVGFza05hbWVzcGFjZXMoKTtcblxuICAvLyBTaGVsbCBjb21wbGV0aW9uc1xuICBwcmludERlYnVnKCdSZWdpc3RlcmluZyBjb21wbGV0aW9ucyBjb21tYW5kJyk7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZCgnY29tcGxldGlvbnMnKVxuICAgIC5kZXNjcmlwdGlvbignR2VuZXJhdGUgc2hlbGwgY29tcGxldGlvbnMgKGJhc2gsIHpzaCwgZmlzaCknKVxuICAgIC5hcmd1bWVudCgnPHNoZWxsPicsICdTaGVsbCB0eXBlOiBiYXNoLCB6c2gsIG9yIGZpc2gnKVxuICAgIC5hY3Rpb24oKHNoZWxsOiBzdHJpbmcpID0+IHtcbiAgICAgIHByaW50Q29tcGxldGlvbnMoc2hlbGwpO1xuICAgIH0pO1xuXG4gIHByaW50RGVidWcoJ0FsbCBjb21tYW5kcyByZWdpc3RlcmVkIHN1Y2Nlc3NmdWxseScpO1xufVxuXG4vKipcbiAqIEhhbmRsZSBwcm9ncmFtIGVycm9yc1xuICovXG5mdW5jdGlvbiBzZXR1cEVycm9ySGFuZGxlcnMoKTogdm9pZCB7XG4gIC8vIEhhbmRsZSB1bmNhdWdodCBleGNlcHRpb25zXG4gIHByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgIGNvbnNvbGUuZXJyb3IoJycpOyAvLyBFbXB0eSBsaW5lXG4gICAgcHJpbnRFcnJvcignVW5jYXVnaHQgZXhjZXB0aW9uJywge1xuICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UsXG4gICAgICBuYW1lOiBlcnJvci5uYW1lLFxuICAgIH0pO1xuXG4gICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkdFTkVSQUwsIHtcbiAgICAgIGRlYnVnOiBpc0RlYnVnTW9kZShwcm9ncmFtLm9wdHMoKSksXG4gICAgICBleGl0OiB0cnVlLFxuICAgICAgY29udGV4dDoge1xuICAgICAgICB0eXBlOiAndW5jYXVnaHRFeGNlcHRpb24nLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gSGFuZGxlIHVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbnNcbiAgcHJvY2Vzcy5vbigndW5oYW5kbGVkUmVqZWN0aW9uJywgKHJlYXNvbjogdW5rbm93bikgPT4ge1xuICAgIGNvbnNvbGUuZXJyb3IoJycpOyAvLyBFbXB0eSBsaW5lXG4gICAgcHJpbnRFcnJvcignVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uJywge1xuICAgICAgcmVhc29uOiBlcnJvck1lc3NhZ2UocmVhc29uKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGVycm9yID0gcmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZWFzb246IG5ldyBFcnJvcihTdHJpbmcocmVhc29uKSk7XG5cbiAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuR0VORVJBTCwge1xuICAgICAgZGVidWc6IGlzRGVidWdNb2RlKHByb2dyYW0ub3B0cygpKSxcbiAgICAgIGV4aXQ6IHRydWUsXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIHR5cGU6ICd1bmhhbmRsZWRSZWplY3Rpb24nLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gSGFuZGxlIFNJR0lOVCAoQ3RybCtDKVxuICBwcm9jZXNzLm9uKCdTSUdJTlQnLCAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coJycpOyAvLyBFbXB0eSBsaW5lXG4gICAgcHJpbnRXYXJuaW5nKCdQcm9jZXNzIGludGVycnVwdGVkIGJ5IHVzZXIgKFNJR0lOVCknKTtcbiAgICBjb25zb2xlLmxvZygnJyk7IC8vIEVtcHR5IGxpbmVcbiAgICBwcm9jZXNzLmV4aXQoMTMwKTsgLy8gU3RhbmRhcmQgZXhpdCBjb2RlIGZvciBTSUdJTlRcbiAgfSk7XG5cbiAgLy8gSGFuZGxlIFNJR1RFUk1cbiAgcHJvY2Vzcy5vbignU0lHVEVSTScsICgpID0+IHtcbiAgICBjb25zb2xlLmxvZygnJyk7IC8vIEVtcHR5IGxpbmVcbiAgICBwcmludFdhcm5pbmcoJ1Byb2Nlc3MgdGVybWluYXRlZCAoU0lHVEVSTSknKTtcbiAgICBjb25zb2xlLmxvZygnJyk7IC8vIEVtcHR5IGxpbmVcbiAgICBwcm9jZXNzLmV4aXQoMTQzKTsgLy8gU3RhbmRhcmQgZXhpdCBjb2RlIGZvciBTSUdURVJNXG4gIH0pO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemUgQ0xJIHdpdGggb3B0aW9uc1xuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gQ0xJIGluaXRpYWxpemF0aW9uIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVDbGkob3B0aW9uczogQ2xpT3B0aW9ucyA9IHt9KTogdm9pZCB7XG4gIGNvbnN0IHtcbiAgICBzaG93QmFubmVyID0gdHJ1ZSxcbiAgICBtaW5pbWFsQmFubmVyID0gZmFsc2UsXG4gICAgZGVidWcgPSBmYWxzZSxcbiAgICB2ZXJib3NlID0gZmFsc2UsXG4gICAgcXVpZXQgPSBmYWxzZSxcbiAgICBub0NvbG9yID0gZmFsc2UsXG4gICAgc2VsZlVwZGF0ZSA9IGZhbHNlLFxuICB9ID0gb3B0aW9ucztcblxuICAvLyBIYW5kbGUgY29sb3Igb3V0cHV0XG4gIGlmIChub0NvbG9yKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9fQ09MT1IgPSAnMSc7XG4gIH1cblxuICAvLyBEaXNwbGF5IGJhbm5lclxuICBpZiAoc2hvd0Jhbm5lciAmJiAhcXVpZXQpIHtcbiAgICBpZiAobWluaW1hbEJhbm5lcikge1xuICAgICAgbWluaUJhbm5lcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBiYW5uZXIoe1xuICAgICAgICBtaW5pbWFsOiBmYWxzZSxcbiAgICAgICAgc2hvd0Rlc2NyaXB0aW9uOiB0cnVlLFxuICAgICAgICBzaG93VGltZXN0YW1wOiBkZWJ1ZyB8fCB2ZXJib3NlLFxuICAgICAgICBzaG93RXhlY3V0aW9uSWQ6IGRlYnVnLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gRGlzcGxheSBzdGFydHVwIGluZm9cbiAgZGlzcGxheVN0YXJ0dXBJbmZvKHsgZGVidWcsIHZlcmJvc2UsIHF1aWV0IH0pO1xuXG4gIC8vIENoZWNrIGVudmlyb25tZW50XG4gIGlmICghcXVpZXQpIHtcbiAgICBjaGVja0Vudmlyb25tZW50KHsgc2lnbkluUmVsZXZhbnQ6ICFzZWxmVXBkYXRlIH0pO1xuICB9XG5cbiAgLy8gU2V0dXAgZXJyb3IgaGFuZGxlcnNcbiAgc2V0dXBFcnJvckhhbmRsZXJzKCk7XG5cbiAgLy8gUmVnaXN0ZXIgY29tbWFuZHNcbiAgdHJ5IHtcbiAgICByZWdpc3RlckNvbW1hbmRzKCk7XG4gICAgcHJpbnREZWJ1ZygnQ0xJIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcHJpbnRFcnJvcignQ0xJIGluaXRpYWxpemF0aW9uIGZhaWxlZCcsIHtcbiAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyb3IpLFxuICAgIH0pO1xuXG4gICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkNPTkZJR1VSQVRJT04sIHtcbiAgICAgIGRlYnVnOiBkZWJ1ZyB8fCBpc0RlYnVnTW9kZSgpLFxuICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgc3RhZ2U6ICdpbml0aWFsaXphdGlvbicsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogUGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50c1xuICovXG5mdW5jdGlvbiBwYXJzZUFyZ3VtZW50cygpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBwcm9ncmFtLnBhcnNlKHByb2Nlc3MuYXJndik7XG5cbiAgICAvLyBTaG93IGhlbHAgaWYgbm8gY29tbWFuZCBwcm92aWRlZFxuICAgIGNvbnN0IGFyZ3MgPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMik7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICBwcmludEluZm8oJ05vIGNvbW1hbmQgc3BlY2lmaWVkIC0gZGlzcGxheWluZyBoZWxwJyk7XG4gICAgICBjb25zb2xlLmxvZygnJyk7IC8vIEVtcHR5IGxpbmVcbiAgICAgIHByb2dyYW0ub3V0cHV0SGVscCgpO1xuICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGNvbW1hbmQgZXhpc3RzXG4gICAgY29uc3QgY29tbWFuZCA9IGFyZ3NbMF07XG4gICAgaWYgKGNvbW1hbmQgJiYgIWNvbW1hbmQuc3RhcnRzV2l0aCgnLScpKSB7XG4gICAgICBjb25zdCBjb21tYW5kRXhpc3RzID0gcHJvZ3JhbS5jb21tYW5kcy5zb21lKGNtZCA9PiBjbWQubmFtZSgpID09PSBjb21tYW5kKTtcblxuICAgICAgaWYgKCFjb21tYW5kRXhpc3RzKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTsgLy8gRW1wdHkgbGluZVxuICAgICAgICBwcmludEVycm9yKGBVbmtub3duIGNvbW1hbmQ6ICR7Y29tbWFuZH1gKTtcbiAgICAgICAgY29uc29sZS5sb2coJycpOyAvLyBFbXB0eSBsaW5lXG4gICAgICAgIHByaW50SW5mbygnQXZhaWxhYmxlIGNvbW1hbmRzOicpO1xuICAgICAgICBwcm9ncmFtLmNvbW1hbmRzLmZvckVhY2goY21kID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgIOKAoiAke2NtZC5uYW1lKCl9IC0gJHtjbWQuZGVzY3JpcHRpb24oKX1gKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTsgLy8gRW1wdHkgbGluZVxuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJpbnREZWJ1ZygnQ29tbWFuZCBsaW5lIGFyZ3VtZW50cyBwYXJzZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkdFTkVSQUwsIHtcbiAgICAgIGRlYnVnOiBpc0RlYnVnTW9kZShwcm9ncmFtLm9wdHMoKSksXG4gICAgICBleGl0OiB0cnVlLFxuICAgICAgY29udGV4dDoge1xuICAgICAgICBzdGFnZTogJ2FyZ3VtZW50LXBhcnNpbmcnLFxuICAgICAgICBhcmd2OiBwcm9jZXNzLmFyZ3YsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogTWFpbiBDTEkgZW50cnkgcG9pbnRcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENMSSBpbml0aWFsaXphdGlvbiBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIFN0YW5kYXJkIGluaXRpYWxpemF0aW9uXG4gKiBtYWluKCk7XG4gKlxuICogLy8gTWluaW1hbCBtb2RlXG4gKiBtYWluKHsgbWluaW1hbEJhbm5lcjogdHJ1ZSwgcXVpZXQ6IHRydWUgfSk7XG4gKlxuICogLy8gRGVidWcgbW9kZVxuICogbWFpbih7IGRlYnVnOiB0cnVlLCB2ZXJib3NlOiB0cnVlIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWluKG9wdGlvbnM6IENsaU9wdGlvbnMgPSB7fSk6IHZvaWQge1xuICB0cnkge1xuICAgIC8vIEluaXRpYWxpemUgQ0xJXG4gICAgaW5pdGlhbGl6ZUNsaShvcHRpb25zKTtcblxuICAgIC8vIFBhcnNlIGFyZ3VtZW50cyBhbmQgZXhlY3V0ZSBjb21tYW5kXG4gICAgcGFyc2VBcmd1bWVudHMoKTtcblxuICAgIC8vIElmIHdlIHJlYWNoIGhlcmUsIGNvbW1hbmQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVxuICAgIHByaW50RGVidWcoJ0NMSSBleGVjdXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseScpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIEZpbmFsIGNhdGNoLWFsbCBlcnJvciBoYW5kbGVyXG4gICAgY29uc29sZS5lcnJvcignJyk7IC8vIEVtcHR5IGxpbmVcbiAgICBwcmludEVycm9yKCdGYXRhbCBDTEkgZXJyb3InLCB7XG4gICAgICBlcnJvcjogZXJyb3JNZXNzYWdlKGVycm9yKSxcbiAgICB9KTtcblxuICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5HRU5FUkFMLCB7XG4gICAgICBkZWJ1ZzogaXNEZWJ1Z01vZGUob3B0aW9ucyksXG4gICAgICBleGl0OiB0cnVlLFxuICAgICAgY29udGV4dDoge1xuICAgICAgICBzdGFnZTogJ21haW4nLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFJ1biBDTEkgaWYgZXhlY3V0ZWQgZGlyZWN0bHkuIEVTTSBoYXMgbm8gYHJlcXVpcmUubWFpbmA7IGNvbXBhcmUgdGhlIGludm9rZWRcbiAqIHNjcmlwdCB0byB0aGlzIG1vZHVsZSdzIHBhdGgsIHJlc29sdmluZyBzeW1saW5rcyBvbiBib3RoIHNpZGVzIHNvIHRoZSBgYmluYFxuICogc3ltbGluayAobm9kZV9tb2R1bGVzLy5iaW4vcGlwZWxpbmUtbWFuYWdlciDihpIgZGlzdC9jbGkuanMpIHN0aWxsIG1hdGNoZXMuXG4gKi9cbmNvbnN0IGludm9rZWRTY3JpcHQgPSBwcm9jZXNzLmFyZ3ZbMV07XG5jb25zdCBpc01haW5Nb2R1bGUgPSBpbnZva2VkU2NyaXB0ICE9PSB1bmRlZmluZWRcbiAgJiYgcmVhbHBhdGhTeW5jKGludm9rZWRTY3JpcHQpID09PSByZWFscGF0aFN5bmMoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcbmlmIChpc01haW5Nb2R1bGUpIHtcbiAgLy8gUGFyc2UgQ0xJIG9wdGlvbnMgZnJvbSBlbnZpcm9ubWVudCBvciBjb21tYW5kIGxpbmVcbiAgY29uc3Qgb3B0aW9uczogQ2xpT3B0aW9ucyA9IHtcbiAgICBkZWJ1ZzogcHJvY2Vzcy5lbnYuREVCVUcgPT09ICd0cnVlJyxcbiAgICAvLyBgLS10b2tlbmAgcHJpbnRzIGEgYmFyZSB0b2tlbiBmb3IgYCQo4oCmKWAgY2FwdHVyZSwgc28gdGhlIGJhbm5lciBhbmQgdGhlXG4gICAgLy8gc3RhcnR1cCBjaHJvbWUgbXVzdCBub3QgcmVhY2ggc3Rkb3V0IGVpdGhlci4gU2Nhbm5lZCBmcm9tIGFyZ3YgbGlrZVxuICAgIC8vIGAtLXF1aWV0YCBpcywgYmVjYXVzZSB0aGlzIHJ1bnMgQkVGT1JFIENvbW1hbmRlciBwYXJzZXMuXG4gICAgcXVpZXQ6IHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS1xdWlldCcpIHx8IHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS10b2tlbicpLFxuICAgIHZlcmJvc2U6IHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS12ZXJib3NlJyksXG4gICAgbm9Db2xvcjogcHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLW5vLWNvbG9yJykgfHwgcHJvY2Vzcy5lbnYuTk9fQ09MT1IgPT09ICcxJyxcbiAgICBzZWxmVXBkYXRlOiBpc1NlbGZVcGRhdGUocHJvY2Vzcy5hcmd2LnNsaWNlKDIpKSxcbiAgfTtcblxuICAvLyBEYWlseSBiYWNrZ3JvdW5kIGNoZWNrOyBwcmludHMgXCJ1cGRhdGUgYXZhaWxhYmxlXCIgdG8gc3RkZXJyIG9uIGV4aXQuXG4gIHNjaGVkdWxlVXBkYXRlTm90aWNlKCk7XG4gIG1haW4ob3B0aW9ucyk7XG59Il19
|
|
523
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9zcmMvY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFB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QUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLEdBQUc7UUFDNUUsVUFBVSxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNoRCxDQUFDO0lBRUYsdUVBQXVFO0lBQ3ZFLG9CQUFvQixFQUFFLENBQUM7SUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG4vLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgcmVhbHBhdGhTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0IHsgZXJyb3JNZXNzYWdlIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgcHJvZ3JhbSB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBhdWRpdFN0YWNrcyB9IGZyb20gJy4vY29tbWFuZHMvYXVkaXQtc3RhY2tzLmpzJztcbmltcG9ydCB7IGF1ZGl0VG9rZW5zIH0gZnJvbSAnLi9jb21tYW5kcy9hdWRpdC10b2tlbnMuanMnO1xuaW1wb3J0IHsgYm9vdHN0cmFwIH0gZnJvbSAnLi9jb21tYW5kcy9ib290c3RyYXAuanMnO1xuaW1wb3J0IHsgY3JlYXRlUGF0IH0gZnJvbSAnLi9jb21tYW5kcy9jcmVhdGUtcGF0LmpzJztcbmltcG9ydCB7IGNyZWF0ZVBpcGVsaW5lIH0gZnJvbSAnLi9jb21tYW5kcy9jcmVhdGUtcGlwZWxpbmUuanMnO1xuaW1wb3J0IHsgZGVwbG95IH0gZnJvbSAnLi9jb21tYW5kcy9kZXBsb3kuanMnO1xuaW1wb3J0IHsgZ2V0UGlwZWxpbmUgfSBmcm9tICcuL2NvbW1hbmRzL2dldC1waXBlbGluZS5qcyc7XG5pbXBvcnQgeyBnZXRQbHVnaW4gfSBmcm9tICcuL2NvbW1hbmRzL2dldC1wbHVnaW4uanMnO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVUZW1wbGF0ZSB9IGZyb20gJy4vY29tbWFuZHMvaW5zdGFudGlhdGUtdGVtcGxhdGUuanMnO1xuaW1wb3J0IHsgbGlzdFBpcGVsaW5lcyB9IGZyb20gJy4vY29tbWFuZHMvbGlzdC1waXBlbGluZXMuanMnO1xuaW1wb3J0IHsgbGlzdFBsdWdpbnMgfSBmcm9tICcuL2NvbW1hbmRzL2xpc3QtcGx1Z2lucy5qcyc7XG5pbXBvcnQgeyBsb2dpbiB9IGZyb20gJy4vY29tbWFuZHMvbG9naW4uanMnO1xuaW1wb3J0IHsgbmV3UGx1Z2luIH0gZnJvbSAnLi9jb21tYW5kcy9uZXctcGx1Z2luLmpzJztcbmltcG9ydCB7IG9yZ0V4cG9ydCB9IGZyb20gJy4vY29tbWFuZHMvb3JnLWV4cG9ydC5qcyc7XG5pbXBvcnQgeyBkZXByZWNhdGVQbHVnaW4sIHlhbmtQbHVnaW4gfSBmcm9tICcuL2NvbW1hbmRzL3BsdWdpbi1saWZlY3ljbGUuanMnO1xuaW1wb3J0IHsgcHJvdmlzaW9uIH0gZnJvbSAnLi9jb21tYW5kcy9wcm92aXNpb24uanMnO1xuaW1wb3J0IHsgcHVibGlzaFBsdWdpbiB9IGZyb20gJy4vY29tbWFuZHMvcHVibGlzaC1wbHVnaW4uanMnO1xuaW1wb3J0IHsgcmVkcml2ZUV2ZW50cyB9IGZyb20gJy4vY29tbWFuZHMvcmVkcml2ZS1ldmVudHMuanMnO1xuaW1wb3J0IHsgcmVnaXN0ZXIgfSBmcm9tICcuL2NvbW1hbmRzL3JlZ2lzdGVyLmpzJztcbmltcG9ydCB7IHJlcG9ydCB9IGZyb20gJy4vY29tbWFuZHMvcmVwb3J0LmpzJztcbmltcG9ydCB7IHNlY3VyaXR5UmVwb3J0IH0gZnJvbSAnLi9jb21tYW5kcy9zZWN1cml0eS1yZXBvcnQuanMnO1xuaW1wb3J0IHsgc2V0dXBFdmVudHMgfSBmcm9tICcuL2NvbW1hbmRzL3NldHVwLWV2ZW50cy5qcyc7XG5pbXBvcnQgeyBzdGF0dXMgfSBmcm9tICcuL2NvbW1hbmRzL3N0YXR1cy5qcyc7XG5pbXBvcnQgeyBzdG9yZVRva2VuIH0gZnJvbSAnLi9jb21tYW5kcy9zdG9yZS10b2tlbi5qcyc7XG5pbXBvcnQgeyBzeW50aCB9IGZyb20gJy4vY29tbWFuZHMvc3ludGguanMnO1xuaW1wb3J0IHsgdGVzdFBsdWdpbiB9IGZyb20gJy4vY29tbWFuZHMvdGVzdC1wbHVnaW4uanMnO1xuaW1wb3J0IHsgdG9vbGNoYWluIH0gZnJvbSAnLi9jb21tYW5kcy90b29sY2hhaW4uanMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJVcGdyYWRlT3B0aW9uIH0gZnJvbSAnLi9jb21tYW5kcy91cGdyYWRlLmpzJztcbmltcG9ydCB7IHVwbG9hZFBsdWdpbiB9IGZyb20gJy4vY29tbWFuZHMvdXBsb2FkLXBsdWdpbi5qcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZVBsdWdpbiB9IGZyb20gJy4vY29tbWFuZHMvdmFsaWRhdGUtcGx1Z2luLmpzJztcbmltcG9ydCB7IHZhbGlkYXRlVGVtcGxhdGVzQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvdmFsaWRhdGUtdGVtcGxhdGVzLmpzJztcbmltcG9ydCB7IHZlcmlmeVBsdWdpbnMgfSBmcm9tICcuL2NvbW1hbmRzL3ZlcmlmeS1wbHVnaW5zLmpzJztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuL2NvbW1hbmRzL3ZlcnNpb24uanMnO1xuaW1wb3J0IHtcbiAgQVBQX05BTUUsXG4gIEFQUF9ERVNDUklQVElPTixcbiAgQVBQX1ZFUlNJT04sXG4gIEVOVl9WQVJTLFxuICBpc0RlYnVnTW9kZSxcbiAgZ2VuZXJhdGVFeGVjdXRpb25JZCxcbn0gZnJvbSAnLi9jb25maWcvY2xpLmNvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBiYW5uZXIsIG1pbmlCYW5uZXIgfSBmcm9tICcuL3V0aWxzL2Jhbm5lci5qcyc7XG5pbXBvcnQgeyBnZXRBcGlDb25maWcgfSBmcm9tICcuL3V0aWxzL2NvbmZpZy1sb2FkZXIuanMnO1xuaW1wb3J0IHsgbG9hZFNlc3Npb24gfSBmcm9tICcuL3V0aWxzL2NyZWRlbnRpYWwtc3RvcmUuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi91dGlscy9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IHByaW50SW5mbywgcHJpbnRFcnJvciwgcHJpbnRXYXJuaW5nLCBwcmludERlYnVnLCBwcmludFNlY3Rpb24gfSBmcm9tICcuL3V0aWxzL291dHB1dC11dGlscy5qcyc7XG5pbXBvcnQgeyBwcmVmbGlnaHRDb21tYW5kVG9vbHMgfSBmcm9tICcuL3V0aWxzL3ByZWZsaWdodC5qcyc7XG5pbXBvcnQgeyBzY2hlZHVsZVVwZGF0ZU5vdGljZSB9IGZyb20gJy4vdXRpbHMvdXBkYXRlLW5vdGljZS5qcyc7XG5cbi8qKlxuICogQ0xJIGluaXRpYWxpemF0aW9uIG9wdGlvbnNcbiAqL1xuaW50ZXJmYWNlIENsaU9wdGlvbnMge1xuICAvKipcbiAgICogU2hvdyBiYW5uZXIgb24gc3RhcnR1cFxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBzaG93QmFubmVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTWluaW1hbCBiYW5uZXIgKG5vIEFTQ0lJIGFydClcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG1pbmltYWxCYW5uZXI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEZWJ1ZyBtb2RlXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZWJ1Zz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFZlcmJvc2Ugb3V0cHV0XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB2ZXJib3NlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUXVpZXQgbW9kZSAobWluaW1hbCBvdXRwdXQpXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBxdWlldD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE5vIGNvbG9yIG91dHB1dFxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbm9Db2xvcj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBgLS11cGdyYWRlYCAvIGAtLXVwZ3JhZGUtY2hlY2tgOiB0YWxrcyBvbmx5IHRvIHRoZSBucG0gcmVnaXN0cnksIG5ldmVyIHRvXG4gICAqIHRoZSBwbGF0Zm9ybSwgc28gaXQgbXVzdCB3b3JrIHNpZ25lZCBvdXQgYW5kIHdpdGhvdXQgdGhlIHNpZ24taW4gd2FybmluZy5cbiAgICovXG4gIHNlbGZVcGRhdGU/OiBib29sZWFuO1xufVxuXG4vKiogV2hldGhlciBhcmd2IGFza3MgZm9yIGEgc2VsZi11cGRhdGUgKGAtLXVwZ3JhZGVgIC8gYC0tdXBncmFkZS1jaGVja2AsIHdpdGggb3Igd2l0aG91dCBhIHZlcnNpb24pLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2VsZlVwZGF0ZShhcmd2OiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICByZXR1cm4gYXJndi5zb21lKChhKSA9PiBhID09PSAnLS11cGdyYWRlJyB8fCBhID09PSAnLS11cGdyYWRlLWNoZWNrJyB8fCBhLnN0YXJ0c1dpdGgoJy0tdXBncmFkZT0nKSB8fCBhLnN0YXJ0c1dpdGgoJy0tdXBncmFkZS1jaGVjaz0nKSk7XG59XG5cbi8qKlxuICogQ2hlY2sgZW52aXJvbm1lbnQgYW5kIGRpc3BsYXkgd2FybmluZ3NcbiAqL1xuZnVuY3Rpb24gY2hlY2tFbnZpcm9ubWVudCh7IHNpZ25JblJlbGV2YW50ID0gdHJ1ZSB9OiB7IHNpZ25JblJlbGV2YW50PzogYm9vbGVhbiB9ID0ge30pOiB2b2lkIHtcbiAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgLy8gTm90IHNpZ25lZCBpbiBBVCBBTEw6IG5laXRoZXIgYW4gZXhwbGljaXQgdG9rZW4gbm9yIGEgc3RvcmVkIGJyb3dzZXJcbiAgLy8gc2lnbi1pbi4gRWl0aGVyIGFsb25lIGlzIGVub3VnaCwgc28gdGhlIHdhcm5pbmcgb25seSBmaXJlcyB3aGVuIGJvdGggYXJlXG4gIC8vIG1pc3Npbmcg4oCUIG90aGVyd2lzZSBgYXV0aCBsb2dpbmAgdXNlcnMgd291bGQgYmUgbmFnZ2VkIG9uIGV2ZXJ5IGNvbW1hbmQuXG4gIGlmIChzaWduSW5SZWxldmFudCAmJiAhcHJvY2Vzcy5lbnZbRU5WX1ZBUlMuUExBVEZPUk1fVE9LRU5dICYmICFsb2FkU2Vzc2lvbihnZXRBcGlDb25maWcoKS5hcGkuYmFzZVVybCkpIHtcbiAgICB3YXJuaW5ncy5wdXNoKCdOb3Qgc2lnbmVkIGluIChubyBQTEFURk9STV9UT0tFTiwgbm8gc3RvcmVkIHNlc3Npb24pJyk7XG4gICAgd2FybmluZ3MucHVzaCgnUnVuIFwicGlwZWxpbmUtbWFuYWdlciBhdXRoIGxvZ2luXCIg4oCUIEFQSSBvcGVyYXRpb25zIHdpbGwgZmFpbCB1bnRpbCB5b3UgZG8nKTtcbiAgfVxuXG4gIC8vIENoZWNrIE5vZGUgdmVyc2lvblxuICBjb25zdCBub2RlVmVyc2lvbiA9IHByb2Nlc3MudmVyc2lvbjtcbiAgY29uc3QgbWFqb3JWZXJzaW9uID0gcGFyc2VJbnQobm9kZVZlcnNpb24uc2xpY2UoMSkuc3BsaXQoJy4nKVswXSB8fCAnMCcsIDEwKTtcbiAgaWYgKG1ham9yVmVyc2lvbiA8IDI0KSB7XG4gICAgd2FybmluZ3MucHVzaChgTm9kZS5qcyAke25vZGVWZXJzaW9ufSBkZXRlY3RlZCAtIHZlcnNpb24gMjQrIHJlcXVpcmVkIChzZWUgcGFja2FnZS5qc29uIGVuZ2luZXMpYCk7XG4gIH1cblxuICAvLyBEaXNwbGF5IHdhcm5pbmdzXG4gIGlmICh3YXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgcHJpbnRTZWN0aW9uKCdFbnZpcm9ubWVudCBXYXJuaW5ncycpO1xuICAgIHdhcm5pbmdzLmZvckVhY2god2FybmluZyA9PiB7XG4gICAgICBwcmludFdhcm5pbmcod2FybmluZyk7XG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coJycpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGxheSBzdGFydHVwIGluZm9ybWF0aW9uXG4gKi9cbmZ1bmN0aW9uIGRpc3BsYXlTdGFydHVwSW5mbyhvcHRpb25zOiBDbGlPcHRpb25zKTogdm9pZCB7XG4gIGlmIChvcHRpb25zLnF1aWV0KSByZXR1cm47XG5cbiAgY29uc3QgZXhlY3V0aW9uSWQgPSBnZW5lcmF0ZUV4ZWN1dGlvbklkKCk7XG5cbiAgaWYgKG9wdGlvbnMuZGVidWcgfHwgb3B0aW9ucy52ZXJib3NlKSB7XG4gICAgcHJpbnREZWJ1ZygnQ0xJIENvbmZpZ3VyYXRpb24nLCB7XG4gICAgICBuYW1lOiBBUFBfTkFNRSxcbiAgICAgIHZlcnNpb246IEFQUF9WRVJTSU9OLFxuICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICBub2RlOiBwcm9jZXNzLnZlcnNpb24sXG4gICAgICBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSxcbiAgICAgIGFyY2g6IHByb2Nlc3MuYXJjaCxcbiAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgIGVudjoge1xuICAgICAgICBkZWJ1ZzogcHJvY2Vzcy5lbnYuREVCVUcsXG4gICAgICAgIHRva2VuOiBwcm9jZXNzLmVudltFTlZfVkFSUy5QTEFURk9STV9UT0tFTl0gPyAnc2V0JzogJ25vdCBzZXQnLFxuICAgICAgICB1cmw6IHByb2Nlc3MuZW52W0VOVl9WQVJTLlBMQVRGT1JNX0JBU0VfVVJMXSB8fCAnZGVmYXVsdCcsXG4gICAgICB9LFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHByaW50RGVidWcoJ1N0YXJ0aW5nIENMSScsIHtcbiAgICAgIHZlcnNpb246IEFQUF9WRVJTSU9OLFxuICAgICAgZXhlY3V0aW9uSWQsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqIFRvcC1sZXZlbCBgLS1oZWxwYCBlcGlsb2d1ZTogY29tbWFuZCBncm91cHMsIGF1dGgsIGVudiB2YXJzLCBleGFtcGxlcywgZXhpdCBjb2Rlcy4gKi9cbmNvbnN0IEhFTFBfVEVYVCA9IGBcbkNvbW1hbmQgZ3JvdXBzOlxuICBhdXRoICAgICAgQXV0aGVudGljYXRlIGFuZCBtYW5hZ2UgY3JlZGVudGlhbHMgKGxvZ2luLCBwYXQpXG4gIHBpcGVsaW5lICBDcmVhdGUsIGluc3BlY3QsIGFuZCBkZXBsb3kgcGlwZWxpbmVzIChjcmVhdGUsIGxpc3QsIGdldCwgcmVnaXN0ZXIsIHN5bnRoLCBkZXBsb3kpXG4gIHBsdWdpbiAgICBBdXRob3IsIHZhbGlkYXRlLCBhbmQgcHVibGlzaCBwbHVnaW5zIChuZXcsIHZhbGlkYXRlLCB0ZXN0LCBwdWJsaXNoLCB1cGxvYWQsIGdldCwgbGlzdCwgZGVwcmVjYXRlLCB5YW5rLCB2ZXJpZnkpXG4gIHRlbXBsYXRlICBJbnN0YW50aWF0ZSBnb2xkZW4tcGF0aCBwaXBlbGluZSB0ZW1wbGF0ZXMgYW5kIHZhbGlkYXRlIHt7IC4uLiB9fSBzeW50YXggKGluc3RhbnRpYXRlLCB2YWxpZGF0ZSlcbiAgaW5mcmEgICAgIFNldCB1cCBhbmQgb3BlcmF0ZSBwbGF0Zm9ybSBpbmZyYXN0cnVjdHVyZSAoYm9vdHN0cmFwLCBzZXR1cC1ldmVudHMsIHJlZHJpdmUtZXZlbnRzLCBzdG9yZS10b2tlbiwgcHJvdmlzaW9uKVxuICBhdWRpdCAgICAgT3BlcmF0b3IgYXVkaXRzLCBjcm9uLWZyaWVuZGx5ICh0b2tlbnMsIHN0YWNrcylcbiAgb3JnICAgICAgIE9yZ2FuaXphdGlvbiBkYXRhIG9wZXJhdGlvbnMgKGV4cG9ydClcbiAgc2VjdXJpdHktcmVwb3J0ICBVcGxvYWQgU0FSSUYgLyB0cml2eSAvIGdyeXBlIHJlcG9ydHMgcHJvZHVjZWQgaW5zaWRlIGEgcGlwZWxpbmUgKHVwbG9hZClcbiAgc3RhdHVzIC8gdmVyc2lvbiAvIGNvbXBsZXRpb25zXG5cbkF1dGhlbnRpY2F0aW9uOlxuICBSdW4gJyR7QVBQX05BTUV9IGF1dGggbG9naW4nIG9uY2UgcGVyIHBsYXRmb3JtIOKAlCBpdCBzaWducyB5b3UgaW4gdGhyb3VnaCB5b3VyXG4gIGJyb3dzZXIgKG5vIHBhc3N3b3JkIG9uIHRoZSBjb21tYW5kIGxpbmUpIGFuZCBzdG9yZXMgdGhlIHNlc3Npb24gdW5kZXJcbiAgfi8ucGlwZWxpbmUtbWFuYWdlci9jcmVkZW50aWFscy5qc29uLiBGb3IgQ0ksIGNyZWF0ZSBhbiBhY2Nlc3Mga2V5IHdpdGhcbiAgJyR7QVBQX05BTUV9IGF1dGggcGF0JyBhbmQgZXhwb3J0IGl0IGFzICR7RU5WX1ZBUlMuUExBVEZPUk1fVE9LRU59LCB3aGljaCBhbHdheXMgd2lucy5cblxuRW52aXJvbm1lbnQgVmFyaWFibGVzOlxuICAke0VOVl9WQVJTLlBMQVRGT1JNX1RPS0VOfSBBY2Nlc3Mga2V5IG9yIHRva2VuIChvdmVycmlkZXMgdGhlIHN0b3JlZCBzZXNzaW9uKVxuICAke0VOVl9WQVJTLlBMQVRGT1JNX0JBU0VfVVJMfSBBUEkgYmFzZSBVUkwgKG9wdGlvbmFsKVxuICAke0VOVl9WQVJTLkNMSV9DT05GSUdfUEFUSH0gQ29uZmlnIGZpbGUgcGF0aCAob3B0aW9uYWwpXG4gICR7RU5WX1ZBUlMuVExTX1JFSkVDVF9VTkFVVEhPUklaRUR9IERpc2FibGUgU1NMIHZlcmlmaWNhdGlvbiBpZiAnMCdcbiAgUExBVEZPUk1fQ0FfQlVORExFICBQRU0gb2YgYSBwcml2YXRlIENBIHRvIHRydXN0IGZvciB0aGUgcGxhdGZvcm0gKHZlcmlmaWVkLCBub3Qgc2tpcHBlZClcbiAgJHtFTlZfVkFSUy5ERUJVR30gRW5hYmxlIGRlYnVnIG1vZGUgaWYgJ3RydWUnXG5cbkV4YW1wbGVzOlxuICAkICR7QVBQX05BTUV9IHZlcnNpb25cbiAgJCAke0FQUF9OQU1FfSAtLXVwZ3JhZGUgICAgICAgICAgICAoLS11cGdyYWRlIDx2ZXJzaW9uPiBmb3IgYSBzcGVjaWZpYyBvbmUsIC0tdXBncmFkZS1jaGVjayB0byBvbmx5IGxvb2spXG4gICQgJHtBUFBfTkFNRX0gYXV0aCBsb2dpblxuICAkICR7QVBQX05BTUV9IHBpcGVsaW5lIGxpc3QgLS1wcm9qZWN0IG15LWFwcFxuICAkICR7QVBQX05BTUV9IHBpcGVsaW5lIGdldCAtLWlkIHBpcGUtMTIzIC0tZm9ybWF0IGpzb25cbiAgJCAke0FQUF9OQU1FfSBwaXBlbGluZSBjcmVhdGUgLWYgcHJvcHMuanNvbiAtLWRlcGxveSAtLXByb2ZpbGUgcHJvZHVjdGlvblxuICAkICR7QVBQX05BTUV9IHRlbXBsYXRlIGluc3RhbnRpYXRlIC1uIHJlYWN0LWphdmFzY3JpcHQgLXAgcmVhY3QgLW8gYWNtZSAtLWlucHV0IG9yZ0lkPTx1dWlkPiAtLW91dHB1dCBwcm9wcy5qc29uXG4gICQgJHtBUFBfTkFNRX0gcGx1Z2luIHVwbG9hZCAtLWZpbGUgcGx1Z2luLnppcFxuICAkICR7QVBQX05BTUV9IGluZnJhIHN0b3JlLXRva2VuIC0tZGF5cyAzMCAtLXJlZ2lvbiB1cy1lYXN0LTFcbiAgJCAke0FQUF9OQU1FfSBpbmZyYSBib290c3RyYXAgLS1hY2NvdW50IDEyMzQ1Njc4OTAxMiAtLXJlZ2lvbiB1cy1lYXN0LTFcbiAgJCAke0FQUF9OQU1FfSBwaXBlbGluZSBkZXBsb3kgLS1pZCBwaXBlLTEyMyAtLXByb2ZpbGUgcHJvZHVjdGlvblxuXG5FeGl0IGNvZGVzICgwID0gc3VjY2VzczsgZmFpbHVyZXMgdXNlIGEgc3RhbmRhcmQgY29kZSBieSBlcnJvciB0eXBlKTpcbiAgMSBnZW5lcmFsIMK3IDIgdmFsaWRhdGlvbiDCtyAzIGFwaS1yZXF1ZXN0IMK3IDQgYXV0aCDCtyA1IGZvcmJpZGRlblxuICA2IG5vdC1mb3VuZCDCtyA3IG5ldHdvcmsgwrcgOCBjb25maWcgwrcgOSBmaWxlLXN5c3RlbSDCtyAxMCB0aW1lb3V0XG5cblJ1biAnJHtBUFBfTkFNRX0gPGdyb3VwPiAtLWhlbHAnIHRvIHNlZSBhIGdyb3VwJ3Mgc3ViY29tbWFuZHMuXG5gO1xuXG4vKipcbiAqIFRhc2sgbmFtZXNwYWNlcyDigJQgY29tbWFuZHMgYXJlIGdyb3VwZWQgYnkgdGhlIGpvYiB0aGUgdXNlciBpcyBkb2luZywgbm90IGJ5XG4gKiBpbXBsZW1lbnRhdGlvbi4gRWFjaCBwYXJlbnQgaXMgYSBzdWJjb21tYW5kIGNvbnRhaW5lcjsgdGhlIGxlYWYgdmVyYiBsaXZlcyBpblxuICogdGhlIGNvbW1hbmQgZmlsZSAoZS5nLiBgLmNvbW1hbmQoJ2xpc3QnKWApLCBzbyBgcGlwZWxpbmUgbGlzdGAgcmVhZHMgYXMgYSB0YXNrLlxuICovXG5mdW5jdGlvbiByZWdpc3RlclRhc2tOYW1lc3BhY2VzKCk6IHZvaWQge1xuICBwcmludERlYnVnKCdSZWdpc3RlcmluZyB0YXNrIG5hbWVzcGFjZXMnKTtcblxuICAvLyBhdXRoIOKAlCBhdXRoZW50aWNhdGUgYW5kIG1hbmFnZSBjcmVkZW50aWFsc1xuICBjb25zdCBhdXRoID0gcHJvZ3JhbS5jb21tYW5kKCdhdXRoJykuZGVzY3JpcHRpb24oJ0F1dGhlbnRpY2F0ZSBhbmQgbWFuYWdlIGNyZWRlbnRpYWxzJyk7XG4gIGxvZ2luKGF1dGgpOyAvLyBhdXRoIGxvZ2luIOKAlCBicm93c2VyIChkZXZpY2UtYXV0aG9yaXphdGlvbikgc2lnbi1pbiwgc3RvcmVkIGxvY2FsbHlcbiAgY3JlYXRlUGF0KGF1dGgpOyAvLyBhdXRoIHBhdCDigJQgY3JlYXRlIGEgbmFtZWQgYWNjZXNzIGtleSAoZGV2aWNlIHNpZ24taW4gKyBicm93c2VyIHN0ZXAtdXApXG5cbiAgLy8gcGlwZWxpbmUg4oCUIGNyZWF0ZSwgaW5zcGVjdCwgYW5kIGRlcGxveSBwaXBlbGluZXNcbiAgY29uc3QgcGlwZWxpbmUgPSBwcm9ncmFtLmNvbW1hbmQoJ3BpcGVsaW5lJykuZGVzY3JpcHRpb24oJ0NyZWF0ZSwgaW5zcGVjdCwgYW5kIGRlcGxveSBwaXBlbGluZXMnKTtcbiAgY3JlYXRlUGlwZWxpbmUocGlwZWxpbmUpOyAvLyBwaXBlbGluZSBjcmVhdGVcbiAgbGlzdFBpcGVsaW5lcyhwaXBlbGluZSk7IC8vIHBpcGVsaW5lIGxpc3RcbiAgZ2V0UGlwZWxpbmUocGlwZWxpbmUpOyAvLyBwaXBlbGluZSBnZXRcbiAgcmVnaXN0ZXIocGlwZWxpbmUpOyAvLyBwaXBlbGluZSByZWdpc3RlciDigJQgcmUtcmVnaXN0ZXIgYSBkZXBsb3llZCBBUk4gKyBkcmFpbiBwZW5kaW5nIGludGVudHNcbiAgc3ludGgocGlwZWxpbmUpOyAvLyBwaXBlbGluZSBzeW50aCDigJQgQ0RLIHN5bnRoZXNpcyBmcm9tIHBpcGVsaW5lIGNvbmZpZ1xuICBkZXBsb3kocGlwZWxpbmUpOyAvLyBwaXBlbGluZSBkZXBsb3kg4oCUIENESyBkZXBsb3kgKC0tYXBwIHByaW50cyBib2lsZXJwbGF0ZSBwYXRoKVxuXG4gIC8vIHBsdWdpbiDigJQgYXV0aG9yLCB2YWxpZGF0ZSwgYW5kIHB1Ymxpc2ggcGx1Z2luc1xuICBjb25zdCBwbHVnaW4gPSBwcm9ncmFtLmNvbW1hbmQoJ3BsdWdpbicpLmRlc2NyaXB0aW9uKCdBdXRob3IsIHZhbGlkYXRlLCBhbmQgcHVibGlzaCBwbHVnaW5zJyk7XG4gIG5ld1BsdWdpbihwbHVnaW4pOyAvLyBwbHVnaW4gbmV3IOKAlCBzY2FmZm9sZCBhIGxvY2FsIHBsdWdpbiBkaXJlY3RvcnlcbiAgdmFsaWRhdGVQbHVnaW4ocGx1Z2luKTsgLy8gcGx1Z2luIHZhbGlkYXRlIOKAlCB0aGUgc2VydmVyJ3Mgc2NoZW1hcyArIHRoZSBjYXRhbG9nLW1ldGFkYXRhIHJlcG9ydFxuICB0ZXN0UGx1Z2luKHBsdWdpbik7IC8vIHBsdWdpbiB0ZXN0IOKAlCBydW4gaW5zdGFsbCArIGJ1aWxkIGNvbW1hbmRzIGxvY2FsbHkgaW4gdGhlIGltYWdlXG4gIHB1Ymxpc2hQbHVnaW4ocGx1Z2luKTsgLy8gcGx1Z2luIHB1Ymxpc2gg4oCUIHByZS1mbGlnaHQsIHNjYW4gcHJldmlldywgYWNjZXB0LW9yLWVkaXQsIHB1Ymxpc2ggcmVxdWVzdFxuICB1cGxvYWRQbHVnaW4ocGx1Z2luKTsgLy8gcGx1Z2luIHVwbG9hZCDigJQgdXBsb2FkIGFuZCBkZXBsb3lcbiAgZ2V0UGx1Z2luKHBsdWdpbik7IC8vIHBsdWdpbiBnZXRcbiAgbGlzdFBsdWdpbnMocGx1Z2luKTsgLy8gcGx1Z2luIGxpc3RcbiAgZGVwcmVjYXRlUGx1Z2luKHBsdWdpbik7IC8vIHBsdWdpbiBkZXByZWNhdGUg4oCUIGRlcHJlY2F0ZSAob3IgLS11bmRvKSBhIHZlcnNpb25cbiAgeWFua1BsdWdpbihwbHVnaW4pOyAvLyBwbHVnaW4geWFuayDigJQgc3RvcCBhIHZlcnNpb24gcmVzb2x2aW5nIGZvciBuZXcgc3ludGhzXG4gIHZlcmlmeVBsdWdpbnMocGx1Z2luKTsgLy8gcGx1Z2luIHZlcmlmeSDigJQgcnVuLXRpbWUgY2hlY2sgb2YgYSBwaXBlbGluZSdzIHBpbm5lZCBwbHVnaW4gaW1hZ2VzXG5cbiAgLy8gdGVtcGxhdGUg4oCUIGluc3RhbnRpYXRlIGdvbGRlbi1wYXRoIHBpcGVsaW5lIHRlbXBsYXRlcywgdmFsaWRhdGUge3sgLi4uIH19IHN5bnRheFxuICBjb25zdCB0ZW1wbGF0ZSA9IHByb2dyYW0uY29tbWFuZCgndGVtcGxhdGUnKS5kZXNjcmlwdGlvbignSW5zdGFudGlhdGUgcGlwZWxpbmUgdGVtcGxhdGVzIGFuZCB2YWxpZGF0ZSB7eyAuLi4gfX0gdGVtcGxhdGUgc3ludGF4Jyk7XG4gIGluc3RhbnRpYXRlVGVtcGxhdGUodGVtcGxhdGUpOyAvLyB0ZW1wbGF0ZSBpbnN0YW50aWF0ZSDigJQgcmVuZGVyIGEgdGVtcGxhdGUgaW50byBwaXBlbGluZSBwcm9wc1xuICB2YWxpZGF0ZVRlbXBsYXRlc0NvbW1hbmQodGVtcGxhdGUpOyAvLyB0ZW1wbGF0ZSB2YWxpZGF0ZVxuXG4gIC8vIGluZnJhIOKAlCBzZXQgdXAgYW5kIG9wZXJhdGUgcGxhdGZvcm0gaW5mcmFzdHJ1Y3R1cmVcbiAgY29uc3QgaW5mcmEgPSBwcm9ncmFtLmNvbW1hbmQoJ2luZnJhJykuZGVzY3JpcHRpb24oJ1NldCB1cCBhbmQgb3BlcmF0ZSBwbGF0Zm9ybSBpbmZyYXN0cnVjdHVyZScpO1xuICBib290c3RyYXAoaW5mcmEpOyAvLyBpbmZyYSBib290c3RyYXAg4oCUIENESyB0b29sa2l0IHN0YWNrXG4gIHNldHVwRXZlbnRzKGluZnJhKTsgLy8gaW5mcmEgc2V0dXAtZXZlbnRzIOKAlCBFdmVudEJyaWRnZSBldmVudCBpbmdlc3Rpb25cbiAgcmVkcml2ZUV2ZW50cyhpbmZyYSk7IC8vIGluZnJhIHJlZHJpdmUtZXZlbnRzIOKAlCBtYW51YWwgRExRIOKGkiBxdWV1ZSByZWRyaXZlIGZhbGxiYWNrXG4gIHN0b3JlVG9rZW4oaW5mcmEpOyAvLyBpbmZyYSBzdG9yZS10b2tlbiDigJQgSldUIHRva2VuIGluIFNlY3JldHMgTWFuYWdlciBmb3IgQ0RLXG4gIHByb3Zpc2lvbihpbmZyYSk7IC8vIGluZnJhIHByb3Zpc2lvbiDigJQgQUktYXNzaXN0ZWQgZGVwbG95L3RlYXJkb3duIG9mIHRoZSBwbGF0Zm9ybVxuXG4gIC8vIGF1ZGl0IOKAlCBvcGVyYXRvciBhdWRpdHMgKGNyb24tZnJpZW5kbHk6IGV4aXQgMSBvbiBmaW5kaW5ncylcbiAgY29uc3QgYXVkaXQgPSBwcm9ncmFtLmNvbW1hbmQoJ2F1ZGl0JykuZGVzY3JpcHRpb24oJ09wZXJhdG9yIGF1ZGl0cyAoY3Jvbi1mcmllbmRseTogZXhpdCAxIG9uIGZpbmRpbmdzKScpO1xuICBhdWRpdFRva2VucyhhdWRpdCk7IC8vIGF1ZGl0IHRva2VucyDigJQgZXhwaXJpbmcgcGxhdGZvcm0gdG9rZW5zIGluIFNlY3JldHMgTWFuYWdlclxuICBhdWRpdFN0YWNrcyhhdWRpdCk7IC8vIGF1ZGl0IHN0YWNrcyDigJQgQ0ZOIHN0YWNrcyB2cyBwaXBlbGluZV9yZWdpc3RyeSBkcmlmdFxuXG4gIC8vIHRvb2xjaGFpbiDigJQgdGhlIHBpcGVsaW5lIHRvb2xjaGFpbiByZWxlYXNlIChwaXBlbGluZS1ib290c3RyYXAgKyBjZGstc3ludGgpXG4gIHRvb2xjaGFpbihwcm9ncmFtKTsgLy8gdG9vbGNoYWluIGV4cG9ydCDigJQgdGhlIHJlc29sdmVkIHJlbGVhc2UgYXMgSlNPTiwgZm9yIGRlcGxveSAtLWxvY2FsLXNwZWNcblxuICAvLyBvcmcg4oCUIG9yZ2FuaXphdGlvbiBkYXRhIG9wZXJhdGlvbnNcbiAgY29uc3Qgb3JnID0gcHJvZ3JhbS5jb21tYW5kKCdvcmcnKS5kZXNjcmlwdGlvbignT3JnYW5pemF0aW9uIGRhdGEgb3BlcmF0aW9ucycpO1xuICBvcmdFeHBvcnQob3JnKTsgLy8gb3JnIGV4cG9ydCDigJQgR0RQUiBwb3J0YWJpbGl0eSBleHBvcnRcblxuICAvLyByZXBvcnQg4oCUIHRoZSBzdGFrZWhvbGRlci1yZXBvcnQgYWRkLW9uLiBSZWdpc3RlcmVkIGFzIGl0cyBPV04gbmFtZXNwYWNlIHJhdGhlciB0aGFuXG4gIC8vIHVuZGVyIGBvcmdgLCBiZWNhdXNlIGl0cyB2ZXJicyBhcmUgYSBsZWFkJ3Mgd29ya2Zsb3cgKGNvbXBvc2UsIHB1Ymxpc2gsIHNoYXJlKSwgbm90IGFuXG4gIC8vIG9yZ2FuaXphdGlvbi1kYXRhIG9wZXJhdGlvbi4gVGhlIHR3byBqb2JzIHRoZSBkYXNoYm9hcmQgaXMgdGhlIHdyb25nIHNoYXBlIGZvciBhcmVcbiAgLy8gYmFja2ZpbGxpbmcgYSBydW4gb2YgcGFzdCBwZXJpb2RzIGFuZCBkcml2aW5nIGEgcHVibGlzaCBmcm9tIGFub3RoZXIgc2NoZWR1bGVyLlxuICByZXBvcnQocHJvZ3JhbSk7XG5cbiAgLy8gc2VjdXJpdHktcmVwb3J0IOKAlCB1cGxvYWQgU0FSSUYgLyB0cml2eSAvIGdyeXBlIHJlcG9ydHMgcHJvZHVjZWQgaW5zaWRlIGEgcGlwZWxpbmVcbiAgc2VjdXJpdHlSZXBvcnQocHJvZ3JhbSk7XG59XG5cbi8qKiBQcmludCBzaGVsbCBjb21wbGV0aW9ucyBmb3IgYHNoZWxsYCAoYmFzaCwgenNoIG9yIGZpc2gpLiAqL1xuZnVuY3Rpb24gcHJpbnRDb21wbGV0aW9ucyhzaGVsbDogc3RyaW5nKTogdm9pZCB7XG4gIC8vIFdhbGsgY29tbWFuZGVyJ3MgcmVnaXN0ZXJlZCB0cmVlIHNvIGNvbXBsZXRpb25zIG5ldmVyIGRyaWZ0IGZyb20gdGhlIGFjdHVhbFxuICAvLyBzdXJmYWNlLiBgdG9wTGV2ZWxgIGlzIHRoZSBmaXJzdC13b3JkIHNldCAobmFtZXNwYWNlcyArIG1ldGEgY29tbWFuZHMpO1xuICAvLyBgc3Vic2AgbWFwcyBlYWNoIG5hbWVzcGFjZSB0byBpdHMgbGVhZiB2ZXJicyBmb3Igc2Vjb25kLXdvcmQgY29tcGxldGlvbi5cbiAgY29uc3QgdG9wTGV2ZWwgPSBwcm9ncmFtLmNvbW1hbmRzLm1hcChjID0+IGMubmFtZSgpKS5zb3J0KCk7XG4gIGNvbnN0IHN1YnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuICBmb3IgKGNvbnN0IGMgb2YgcHJvZ3JhbS5jb21tYW5kcykge1xuICAgIGlmIChjLmNvbW1hbmRzLmxlbmd0aCA+IDApIHN1YnNbYy5uYW1lKCldID0gYy5jb21tYW5kcy5tYXAocyA9PiBzLm5hbWUoKSkuc29ydCgpO1xuICB9XG4gIGNvbnN0IHRvcExldmVsU3RyID0gdG9wTGV2ZWwuam9pbignICcpO1xuICBzd2l0Y2ggKHNoZWxsKSB7XG4gICAgY2FzZSAnYmFzaCc6IHtcbiAgICAgIC8vIFR3by1sZXZlbDogY29tcGxldGUgdGhlIGdyb3VwIGF0IHdvcmQgMSwgaXRzIHN1YmNvbW1hbmRzIGF0IHdvcmQgMi5cbiAgICAgIGNvbnN0IGNhc2VzID0gT2JqZWN0LmVudHJpZXMoc3VicylcbiAgICAgICAgLm1hcCgoW25zLCBsZWF2ZXNdKSA9PiBgICAgICAgJHtuc30pIENPTVBSRVBMWT0oJChjb21wZ2VuIC1XIFwiJHtsZWF2ZXMuam9pbignICcpfVwiIC0tIFwiXFwke2N1cn1cIikpOztgKVxuICAgICAgICAuam9pbignXFxuJyk7XG4gICAgICBjb25zb2xlLmxvZyhgIyBwaXBlbGluZS1tYW5hZ2VyIGJhc2ggY29tcGxldGlvbnNcbl9waXBlbGluZV9tYW5hZ2VyX2NvbXBsZXRpb25zKCkge1xuICBsb2NhbCBjdXI9XCJcXCR7Q09NUF9XT1JEU1tDT01QX0NXT1JEXX1cIlxuICBpZiBbIFwiXFwke0NPTVBfQ1dPUkR9XCIgLWVxIDEgXTsgdGhlblxuQ09NUFJFUExZPSgkKGNvbXBnZW4gLVcgXCIke3RvcExldmVsU3RyfVwiIC0tIFwiXFwke2N1cn1cIikpXG5yZXR1cm5cbiAgZmlcbiAgY2FzZSBcIlxcJHtDT01QX1dPUkRTWzFdfVwiIGluXG4ke2Nhc2VzfVxuICBlc2FjXG59XG5jb21wbGV0ZSAtRiBfcGlwZWxpbmVfbWFuYWdlcl9jb21wbGV0aW9ucyBwaXBlbGluZS1tYW5hZ2VyYCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAnenNoJzoge1xuICAgICAgY29uc3QgY2FzZXMgPSBPYmplY3QuZW50cmllcyhzdWJzKVxuICAgICAgICAubWFwKChbbnMsIGxlYXZlc10pID0+IGAgICAgICAgICR7bnN9KSBfdmFsdWVzICdzdWJjb21tYW5kJyAke2xlYXZlcy5qb2luKCcgJyl9OztgKVxuICAgICAgICAuam9pbignXFxuJyk7XG4gICAgICBjb25zb2xlLmxvZyhgIyBwaXBlbGluZS1tYW5hZ2VyIHpzaCBjb21wbGV0aW9uc1xuX3BpcGVsaW5lX21hbmFnZXIoKSB7XG4gIGlmICgoIENVUlJFTlQgPT0gMiApKTsgdGhlblxuX3ZhbHVlcyAnY29tbWFuZCcgJHt0b3BMZXZlbC5qb2luKCcgJyl9XG5yZXR1cm5cbiAgZmlcbiAgY2FzZSBcIlxcJHt3b3Jkc1syXX1cIiBpblxuJHtjYXNlc31cbiAgZXNhY1xufVxuY29tcGRlZiBfcGlwZWxpbmVfbWFuYWdlciBwaXBlbGluZS1tYW5hZ2VyYCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAnZmlzaCc6IHtcbiAgICAgIGNvbnN0IGxpbmVzID0gW1xuICAgICAgICBgY29tcGxldGUgLWMgcGlwZWxpbmUtbWFuYWdlciAtbiAnX19maXNoX3VzZV9zdWJjb21tYW5kJyAtYSAnJHt0b3BMZXZlbFN0cn0nYCxcbiAgICAgICAgLi4uT2JqZWN0LmVudHJpZXMoc3VicykubWFwKChbbnMsIGxlYXZlc10pID0+XG4gICAgICAgICAgYGNvbXBsZXRlIC1jIHBpcGVsaW5lLW1hbmFnZXIgLW4gJ19fZmlzaF9zZWVuX3N1YmNvbW1hbmRfZnJvbSAke25zfScgLWEgJyR7bGVhdmVzLmpvaW4oJyAnKX0nYCksXG4gICAgICBdO1xuICAgICAgY29uc29sZS5sb2coYCMgcGlwZWxpbmUtbWFuYWdlciBmaXNoIGNvbXBsZXRpb25zXFxuJHtsaW5lcy5qb2luKCdcXG4nKX1gKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgY29uc29sZS5lcnJvcihgVW5rbm93biBzaGVsbDogJHtzaGVsbH0uIFVzZSBiYXNoLCB6c2gsIG9yIGZpc2guYCk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWdpc3RlciBhbGwgQ0xJIGNvbW1hbmRzXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyQ29tbWFuZHMoKTogdm9pZCB7XG4gIHByaW50RGVidWcoJ1JlZ2lzdGVyaW5nIGNvbW1hbmRzJyk7XG5cbiAgLy8gQ29uZmlndXJlIHByb2dyYW1cbiAgcHJvZ3JhbVxuICAgIC5uYW1lKEFQUF9OQU1FKVxuICAgIC5kZXNjcmlwdGlvbihBUFBfREVTQ1JJUFRJT04pXG4gICAgLnZlcnNpb24oQVBQX1ZFUlNJT04sICctdiwgLS12ZXJzaW9uJywgJ1Nob3cgQ0xJIHZlcnNpb24nKVxuICAgIC5vcHRpb24oJy0tZGVidWcnLCAnRW5hYmxlIGRlYnVnIG91dHB1dCB3aXRoIHN0YWNrIHRyYWNlcycsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0tdmVyYm9zZScsICdTaG93IGRldGFpbGVkIGluZm9ybWF0aW9uJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1xdWlldCcsICdNaW5pbWFsIG91dHB1dCAoZXJyb3JzIG9ubHkpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1uby1jb2xvcicsICdEaXNhYmxlIGNvbG9yZWQgb3V0cHV0JywgZmFsc2UpXG4gICAgLmFkZEhlbHBUZXh0KCdhZnRlcicsIEhFTFBfVEVYVCk7XG5cbiAgLy8gLS11cGdyYWRlIFt2ZXJzaW9uXTogc2VsZi11cGRhdGUsIGhhbmRsZWQgbGlrZSAtLXZlcnNpb24gKGxpc3RlbmVyICsgZXhpdCkuXG4gIHJlZ2lzdGVyVXBncmFkZU9wdGlvbihwcm9ncmFtKTtcblxuICAvLyBGYWlsLWZhc3QgcHJlZmxpZ2h0OiBiZWZvcmUgQU5ZIGNvbW1hbmQncyBhY3Rpb24gcnVucywgdmVyaWZ5IHRoZSBsb2NhbFxuICAvLyB0b29scyB0aGF0IGNvbW1hbmQgbmVlZHMuIENvbW1hbmRlciBza2lwcyB0aGlzIGZvciAtLWhlbHAvLS12ZXJzaW9uIGFuZCBmb3JcbiAgLy8gaGVscCBvdXRwdXQsIHNvIHRob3NlIGFsd2F5cyB3b3JrOyBBUEktb25seSBjb21tYW5kcyBkZWNsYXJlIG5vIHJlcXVpcmVtZW50c1xuICAvLyBhbmQgcGFzcyB0aHJvdWdoIHVudG91Y2hlZC5cbiAgcHJvZ3JhbS5ob29rKCdwcmVBY3Rpb24nLCAoX3RoaXNDb21tYW5kLCBhY3Rpb25Db21tYW5kKSA9PiBwcmVmbGlnaHRDb21tYW5kVG9vbHMoYWN0aW9uQ29tbWFuZCkpO1xuXG4gIC8vIFRvcC1sZXZlbCBtZXRhIGNvbW1hbmRzIChubyBuYW1lc3BhY2UpLlxuICB2ZXJzaW9uKHByb2dyYW0pO1xuICBzdGF0dXMocHJvZ3JhbSk7IC8vIFNob3cgZW52aXJvbm1lbnQgYW5kIGNvbm5lY3Rpdml0eSBzdGF0dXNcblxuICByZWdpc3RlclRhc2tOYW1lc3BhY2VzKCk7XG5cbiAgLy8gU2hlbGwgY29tcGxldGlvbnNcbiAgcHJpbnREZWJ1ZygnUmVnaXN0ZXJpbmcgY29tcGxldGlvbnMgY29tbWFuZCcpO1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoJ2NvbXBsZXRpb25zJylcbiAgICAuZGVzY3JpcHRpb24oJ0dlbmVyYXRlIHNoZWxsIGNvbXBsZXRpb25zIChiYXNoLCB6c2gsIGZpc2gpJylcbiAgICAuYXJndW1lbnQoJzxzaGVsbD4nLCAnU2hlbGwgdHlwZTogYmFzaCwgenNoLCBvciBmaXNoJylcbiAgICAuYWN0aW9uKChzaGVsbDogc3RyaW5nKSA9PiB7XG4gICAgICBwcmludENvbXBsZXRpb25zKHNoZWxsKTtcbiAgICB9KTtcblxuICBwcmludERlYnVnKCdBbGwgY29tbWFuZHMgcmVnaXN0ZXJlZCBzdWNjZXNzZnVsbHknKTtcbn1cblxuLyoqXG4gKiBIYW5kbGUgcHJvZ3JhbSBlcnJvcnNcbiAqL1xuZnVuY3Rpb24gc2V0dXBFcnJvckhhbmRsZXJzKCk6IHZvaWQge1xuICAvLyBIYW5kbGUgdW5jYXVnaHQgZXhjZXB0aW9uc1xuICBwcm9jZXNzLm9uKCd1bmNhdWdodEV4Y2VwdGlvbicsIChlcnJvcjogRXJyb3IpID0+IHtcbiAgICBjb25zb2xlLmVycm9yKCcnKTsgLy8gRW1wdHkgbGluZVxuICAgIHByaW50RXJyb3IoJ1VuY2F1Z2h0IGV4Y2VwdGlvbicsIHtcbiAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlLFxuICAgICAgbmFtZTogZXJyb3IubmFtZSxcbiAgICB9KTtcblxuICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5HRU5FUkFMLCB7XG4gICAgICBkZWJ1ZzogaXNEZWJ1Z01vZGUocHJvZ3JhbS5vcHRzKCkpLFxuICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgdHlwZTogJ3VuY2F1Z2h0RXhjZXB0aW9uJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIEhhbmRsZSB1bmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb25zXG4gIHByb2Nlc3Mub24oJ3VuaGFuZGxlZFJlamVjdGlvbicsIChyZWFzb246IHVua25vd24pID0+IHtcbiAgICBjb25zb2xlLmVycm9yKCcnKTsgLy8gRW1wdHkgbGluZVxuICAgIHByaW50RXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHtcbiAgICAgIHJlYXNvbjogZXJyb3JNZXNzYWdlKHJlYXNvbiksXG4gICAgfSk7XG5cbiAgICBjb25zdCBlcnJvciA9IHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gcmVhc29uOiBuZXcgRXJyb3IoU3RyaW5nKHJlYXNvbikpO1xuXG4gICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkdFTkVSQUwsIHtcbiAgICAgIGRlYnVnOiBpc0RlYnVnTW9kZShwcm9ncmFtLm9wdHMoKSksXG4gICAgICBleGl0OiB0cnVlLFxuICAgICAgY29udGV4dDoge1xuICAgICAgICB0eXBlOiAndW5oYW5kbGVkUmVqZWN0aW9uJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIEhhbmRsZSBTSUdJTlQgKEN0cmwrQylcbiAgcHJvY2Vzcy5vbignU0lHSU5UJywgKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCcnKTsgLy8gRW1wdHkgbGluZVxuICAgIHByaW50V2FybmluZygnUHJvY2VzcyBpbnRlcnJ1cHRlZCBieSB1c2VyIChTSUdJTlQpJyk7XG4gICAgY29uc29sZS5sb2coJycpOyAvLyBFbXB0eSBsaW5lXG4gICAgcHJvY2Vzcy5leGl0KDEzMCk7IC8vIFN0YW5kYXJkIGV4aXQgY29kZSBmb3IgU0lHSU5UXG4gIH0pO1xuXG4gIC8vIEhhbmRsZSBTSUdURVJNXG4gIHByb2Nlc3Mub24oJ1NJR1RFUk0nLCAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coJycpOyAvLyBFbXB0eSBsaW5lXG4gICAgcHJpbnRXYXJuaW5nKCdQcm9jZXNzIHRlcm1pbmF0ZWQgKFNJR1RFUk0pJyk7XG4gICAgY29uc29sZS5sb2coJycpOyAvLyBFbXB0eSBsaW5lXG4gICAgcHJvY2Vzcy5leGl0KDE0Myk7IC8vIFN0YW5kYXJkIGV4aXQgY29kZSBmb3IgU0lHVEVSTVxuICB9KTtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplIENMSSB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENMSSBpbml0aWFsaXphdGlvbiBvcHRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplQ2xpKG9wdGlvbnM6IENsaU9wdGlvbnMgPSB7fSk6IHZvaWQge1xuICBjb25zdCB7XG4gICAgc2hvd0Jhbm5lciA9IHRydWUsXG4gICAgbWluaW1hbEJhbm5lciA9IGZhbHNlLFxuICAgIGRlYnVnID0gZmFsc2UsXG4gICAgdmVyYm9zZSA9IGZhbHNlLFxuICAgIHF1aWV0ID0gZmFsc2UsXG4gICAgbm9Db2xvciA9IGZhbHNlLFxuICAgIHNlbGZVcGRhdGUgPSBmYWxzZSxcbiAgfSA9IG9wdGlvbnM7XG5cbiAgLy8gSGFuZGxlIGNvbG9yIG91dHB1dFxuICBpZiAobm9Db2xvcikge1xuICAgIHByb2Nlc3MuZW52Lk5PX0NPTE9SID0gJzEnO1xuICB9XG5cbiAgLy8gRGlzcGxheSBiYW5uZXJcbiAgaWYgKHNob3dCYW5uZXIgJiYgIXF1aWV0KSB7XG4gICAgaWYgKG1pbmltYWxCYW5uZXIpIHtcbiAgICAgIG1pbmlCYW5uZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYmFubmVyKHtcbiAgICAgICAgbWluaW1hbDogZmFsc2UsXG4gICAgICAgIHNob3dEZXNjcmlwdGlvbjogdHJ1ZSxcbiAgICAgICAgc2hvd1RpbWVzdGFtcDogZGVidWcgfHwgdmVyYm9zZSxcbiAgICAgICAgc2hvd0V4ZWN1dGlvbklkOiBkZWJ1ZyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIERpc3BsYXkgc3RhcnR1cCBpbmZvXG4gIGRpc3BsYXlTdGFydHVwSW5mbyh7IGRlYnVnLCB2ZXJib3NlLCBxdWlldCB9KTtcblxuICAvLyBDaGVjayBlbnZpcm9ubWVudFxuICBpZiAoIXF1aWV0KSB7XG4gICAgY2hlY2tFbnZpcm9ubWVudCh7IHNpZ25JblJlbGV2YW50OiAhc2VsZlVwZGF0ZSB9KTtcbiAgfVxuXG4gIC8vIFNldHVwIGVycm9yIGhhbmRsZXJzXG4gIHNldHVwRXJyb3JIYW5kbGVycygpO1xuXG4gIC8vIFJlZ2lzdGVyIGNvbW1hbmRzXG4gIHRyeSB7XG4gICAgcmVnaXN0ZXJDb21tYW5kcygpO1xuICAgIHByaW50RGVidWcoJ0NMSSBpbml0aWFsaXphdGlvbiBjb21wbGV0ZScpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHByaW50RXJyb3IoJ0NMSSBpbml0aWFsaXphdGlvbiBmYWlsZWQnLCB7XG4gICAgICBlcnJvcjogZXJyb3JNZXNzYWdlKGVycm9yKSxcbiAgICB9KTtcblxuICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5DT05GSUdVUkFUSU9OLCB7XG4gICAgICBkZWJ1ZzogZGVidWcgfHwgaXNEZWJ1Z01vZGUoKSxcbiAgICAgIGV4aXQ6IHRydWUsXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIHN0YWdlOiAnaW5pdGlhbGl6YXRpb24nLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudHNcbiAqL1xuZnVuY3Rpb24gcGFyc2VBcmd1bWVudHMoKTogdm9pZCB7XG4gIHRyeSB7XG4gICAgcHJvZ3JhbS5wYXJzZShwcm9jZXNzLmFyZ3YpO1xuXG4gICAgLy8gU2hvdyBoZWxwIGlmIG5vIGNvbW1hbmQgcHJvdmlkZWRcbiAgICBjb25zdCBhcmdzID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpO1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcHJpbnRJbmZvKCdObyBjb21tYW5kIHNwZWNpZmllZCAtIGRpc3BsYXlpbmcgaGVscCcpO1xuICAgICAgY29uc29sZS5sb2coJycpOyAvLyBFbXB0eSBsaW5lXG4gICAgICBwcm9ncmFtLm91dHB1dEhlbHAoKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBjb21tYW5kIGV4aXN0c1xuICAgIGNvbnN0IGNvbW1hbmQgPSBhcmdzWzBdO1xuICAgIGlmIChjb21tYW5kICYmICFjb21tYW5kLnN0YXJ0c1dpdGgoJy0nKSkge1xuICAgICAgY29uc3QgY29tbWFuZEV4aXN0cyA9IHByb2dyYW0uY29tbWFuZHMuc29tZShjbWQgPT4gY21kLm5hbWUoKSA9PT0gY29tbWFuZCk7XG5cbiAgICAgIGlmICghY29tbWFuZEV4aXN0cykge1xuICAgICAgICBjb25zb2xlLmxvZygnJyk7IC8vIEVtcHR5IGxpbmVcbiAgICAgICAgcHJpbnRFcnJvcihgVW5rbm93biBjb21tYW5kOiAke2NvbW1hbmR9YCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTsgLy8gRW1wdHkgbGluZVxuICAgICAgICBwcmludEluZm8oJ0F2YWlsYWJsZSBjb21tYW5kczonKTtcbiAgICAgICAgcHJvZ3JhbS5jb21tYW5kcy5mb3JFYWNoKGNtZCA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCDigKIgJHtjbWQubmFtZSgpfSAtICR7Y21kLmRlc2NyaXB0aW9uKCl9YCk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zb2xlLmxvZygnJyk7IC8vIEVtcHR5IGxpbmVcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByaW50RGVidWcoJ0NvbW1hbmQgbGluZSBhcmd1bWVudHMgcGFyc2VkIHN1Y2Nlc3NmdWxseScpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5HRU5FUkFMLCB7XG4gICAgICBkZWJ1ZzogaXNEZWJ1Z01vZGUocHJvZ3JhbS5vcHRzKCkpLFxuICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgc3RhZ2U6ICdhcmd1bWVudC1wYXJzaW5nJyxcbiAgICAgICAgYXJndjogcHJvY2Vzcy5hcmd2LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIE1haW4gQ0xJIGVudHJ5IHBvaW50XG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBDTEkgaW5pdGlhbGl6YXRpb24gb3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBTdGFuZGFyZCBpbml0aWFsaXphdGlvblxuICogbWFpbigpO1xuICpcbiAqIC8vIE1pbmltYWwgbW9kZVxuICogbWFpbih7IG1pbmltYWxCYW5uZXI6IHRydWUsIHF1aWV0OiB0cnVlIH0pO1xuICpcbiAqIC8vIERlYnVnIG1vZGVcbiAqIG1haW4oeyBkZWJ1ZzogdHJ1ZSwgdmVyYm9zZTogdHJ1ZSB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFpbihvcHRpb25zOiBDbGlPcHRpb25zID0ge30pOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICAvLyBJbml0aWFsaXplIENMSVxuICAgIGluaXRpYWxpemVDbGkob3B0aW9ucyk7XG5cbiAgICAvLyBQYXJzZSBhcmd1bWVudHMgYW5kIGV4ZWN1dGUgY29tbWFuZFxuICAgIHBhcnNlQXJndW1lbnRzKCk7XG5cbiAgICAvLyBJZiB3ZSByZWFjaCBoZXJlLCBjb21tYW5kIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcbiAgICBwcmludERlYnVnKCdDTEkgZXhlY3V0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHknKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBGaW5hbCBjYXRjaC1hbGwgZXJyb3IgaGFuZGxlclxuICAgIGNvbnNvbGUuZXJyb3IoJycpOyAvLyBFbXB0eSBsaW5lXG4gICAgcHJpbnRFcnJvcignRmF0YWwgQ0xJIGVycm9yJywge1xuICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZShlcnJvciksXG4gICAgfSk7XG5cbiAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuR0VORVJBTCwge1xuICAgICAgZGVidWc6IGlzRGVidWdNb2RlKG9wdGlvbnMpLFxuICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgc3RhZ2U6ICdtYWluJyxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSdW4gQ0xJIGlmIGV4ZWN1dGVkIGRpcmVjdGx5LiBFU00gaGFzIG5vIGByZXF1aXJlLm1haW5gOyBjb21wYXJlIHRoZSBpbnZva2VkXG4gKiBzY3JpcHQgdG8gdGhpcyBtb2R1bGUncyBwYXRoLCByZXNvbHZpbmcgc3ltbGlua3Mgb24gYm90aCBzaWRlcyBzbyB0aGUgYGJpbmBcbiAqIHN5bWxpbmsgKG5vZGVfbW9kdWxlcy8uYmluL3BpcGVsaW5lLW1hbmFnZXIg4oaSIGRpc3QvY2xpLmpzKSBzdGlsbCBtYXRjaGVzLlxuICovXG5jb25zdCBpbnZva2VkU2NyaXB0ID0gcHJvY2Vzcy5hcmd2WzFdO1xuY29uc3QgaXNNYWluTW9kdWxlID0gaW52b2tlZFNjcmlwdCAhPT0gdW5kZWZpbmVkXG4gICYmIHJlYWxwYXRoU3luYyhpbnZva2VkU2NyaXB0KSA9PT0gcmVhbHBhdGhTeW5jKGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKSk7XG5pZiAoaXNNYWluTW9kdWxlKSB7XG4gIC8vIFBhcnNlIENMSSBvcHRpb25zIGZyb20gZW52aXJvbm1lbnQgb3IgY29tbWFuZCBsaW5lXG4gIGNvbnN0IG9wdGlvbnM6IENsaU9wdGlvbnMgPSB7XG4gICAgZGVidWc6IHByb2Nlc3MuZW52LkRFQlVHID09PSAndHJ1ZScsXG4gICAgLy8gYC0tdG9rZW5gIHByaW50cyBhIGJhcmUgdG9rZW4gZm9yIGAkKOKApilgIGNhcHR1cmUsIHNvIHRoZSBiYW5uZXIgYW5kIHRoZVxuICAgIC8vIHN0YXJ0dXAgY2hyb21lIG11c3Qgbm90IHJlYWNoIHN0ZG91dCBlaXRoZXIuIFNjYW5uZWQgZnJvbSBhcmd2IGxpa2VcbiAgICAvLyBgLS1xdWlldGAgaXMsIGJlY2F1c2UgdGhpcyBydW5zIEJFRk9SRSBDb21tYW5kZXIgcGFyc2VzLlxuICAgIHF1aWV0OiBwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0tcXVpZXQnKSB8fCBwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0tdG9rZW4nKSxcbiAgICB2ZXJib3NlOiBwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0tdmVyYm9zZScpLFxuICAgIG5vQ29sb3I6IHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS1uby1jb2xvcicpIHx8IHByb2Nlc3MuZW52Lk5PX0NPTE9SID09PSAnMScsXG4gICAgc2VsZlVwZGF0ZTogaXNTZWxmVXBkYXRlKHByb2Nlc3MuYXJndi5zbGljZSgyKSksXG4gIH07XG5cbiAgLy8gRGFpbHkgYmFja2dyb3VuZCBjaGVjazsgcHJpbnRzIFwidXBkYXRlIGF2YWlsYWJsZVwiIHRvIHN0ZGVyciBvbiBleGl0LlxuICBzY2hlZHVsZVVwZGF0ZU5vdGljZSgpO1xuICBtYWluKG9wdGlvbnMpO1xufSJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.d.ts","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2K7C"}
|
package/dist/commands/deploy.js
CHANGED
|
@@ -14,6 +14,7 @@ import { printLookupWarningSummary } from '../utils/plugin-resolver.js';
|
|
|
14
14
|
import { resolveRegistrationClient } from '../utils/registration-client.js';
|
|
15
15
|
import { setPipelineId } from '../utils/request-context.js';
|
|
16
16
|
import { relaxTlsForCli } from '../utils/tls.js';
|
|
17
|
+
import { applyToolchainFile, toolchainFileRequired } from '../utils/toolchain.js';
|
|
17
18
|
/**
|
|
18
19
|
* Registers the `deploy` command with the CLI program.
|
|
19
20
|
*
|
|
@@ -31,7 +32,8 @@ export function deploy(program) {
|
|
|
31
32
|
.command('deploy')
|
|
32
33
|
.description('Deploy pipeline by ID using AWS CDK, or --local-spec to deploy a local pipeline.json without the platform')
|
|
33
34
|
.option('-i, --id <id>', 'Pipeline ID (fetches config from the platform)')
|
|
34
|
-
.option('--local-spec <path>', 'Path to a local pipeline.json — deploys without contacting the platform (no auth, no compliance, no plugin lookup)')
|
|
35
|
+
.option('--local-spec <path>', 'Path to a local pipeline.json — deploys without contacting the platform (no auth, no compliance, no plugin lookup). Requires --toolchain-file')
|
|
36
|
+
.option('--toolchain-file <path>', 'With --local-spec: the toolchain release to build on, as written by `pipeline-manager toolchain export`'))
|
|
35
37
|
.option('--require-approval <approval>', 'Deploy approval level: never|any-change|broadening. Defaults to `broadening`: a deploy that widens IAM stops for confirmation. Pass `never` for unattended runs.', 'broadening')
|
|
36
38
|
.option('--output <dir>', 'CDK output directory', 'cdk.out')
|
|
37
39
|
.option('--store-tokens', 'Authenticate using token from AWS Secrets Manager (requires PLATFORM_SECRET_NAME env var)', false)))
|
|
@@ -47,6 +49,13 @@ export function deploy(program) {
|
|
|
47
49
|
if (options.id && options.localSpec) {
|
|
48
50
|
throw new Error('--id and --local-spec are mutually exclusive');
|
|
49
51
|
}
|
|
52
|
+
if (options.toolchainFile && !options.localSpec) {
|
|
53
|
+
throw new Error('--toolchain-file applies to --local-spec only (with --id the platform resolves the toolchain release)');
|
|
54
|
+
}
|
|
55
|
+
// Without the platform, the toolchain release can only come from a file
|
|
56
|
+
// (D2: never a fallback image). Refuse before reading anything else.
|
|
57
|
+
if (options.localSpec && !options.toolchainFile)
|
|
58
|
+
throw toolchainFileRequired();
|
|
50
59
|
auditLog('deploy', { executionId, pipelineId: options.id, profile: options.profile });
|
|
51
60
|
// Attributes this deploy's platform calls to the pipeline (usage ledger).
|
|
52
61
|
setPipelineId(options.id);
|
|
@@ -105,6 +114,10 @@ export function deploy(program) {
|
|
|
105
114
|
...(pipeline.orgId && { orgId: pipeline.orgId }),
|
|
106
115
|
pipelineId: pipeline.id,
|
|
107
116
|
};
|
|
117
|
+
// The toolchain release from `toolchain export`: the bootstrap image
|
|
118
|
+
// and, for a managed cdk-synth, the synth plugin itself.
|
|
119
|
+
const release = applyToolchainFile(propsWithIds, options.toolchainFile);
|
|
120
|
+
printInfo('Toolchain release (from file)', { release, file: path.resolve(options.toolchainFile) });
|
|
108
121
|
}
|
|
109
122
|
else {
|
|
110
123
|
// Remote path: fetch config from platform API. fetchPipelineProps does
|
|
@@ -172,4 +185,4 @@ export function deploy(program) {
|
|
|
172
185
|
}
|
|
173
186
|
});
|
|
174
187
|
}
|
|
175
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvZGVwbG95LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFFbEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQTRDLE1BQU0sbUJBQW1CLENBQUM7QUFDN0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsOEJBQThCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckssT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFDLE9BQWdCO0lBQ3JDLGNBQWMsQ0FDWixnQkFBZ0IsQ0FDZCxpQkFBaUIsQ0FBQyxPQUFPO1NBQ3RCLE9BQU8sQ0FBQyxRQUFRLENBQUM7U0FDakIsV0FBVyxDQUFDLDJHQUEyRyxDQUFDO1NBQ3hILE1BQU0sQ0FBQyxlQUFlLEVBQUUsZ0RBQWdELENBQUM7U0FDekUsTUFBTSxDQUFDLHFCQUFxQixFQUFFLG9IQUFvSCxDQUFDLENBQUM7U0FDcEosTUFBTSxDQUFDLCtCQUErQixFQUFFLGtLQUFrSyxFQUFFLFlBQVksQ0FBQztTQUN6TixNQUFNLENBQUMsZ0JBQWdCLEVBQUUsc0JBQXNCLEVBQUUsU0FBUyxDQUFDO1NBQzNELE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSwyRkFBMkYsRUFBRSxLQUFLLENBQUMsQ0FDaEksQ0FDRjtTQUNFLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxtR0FBbUcsRUFBRSxLQUFLLENBQUM7U0FDckksTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUN4QixNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRTFELElBQUksQ0FBQztZQUNILGdGQUFnRjtZQUNoRiw4RUFBOEU7WUFDOUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsOERBQThELENBQUMsQ0FBQztZQUNsRixDQUFDO1lBQ0QsSUFBSSxPQUFPLENBQUMsRUFBRSxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDcEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1lBQ2xFLENBQUM7WUFFRCxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN0RiwwRUFBMEU7WUFDMUUsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUUxQixTQUFTLENBQUMsdUJBQXVCLEVBQUU7Z0JBQ2pDLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRTtnQkFDZCxVQUFVLEVBQUUsT0FBTyxDQUFDLE9BQU87Z0JBQzNCLFNBQVMsRUFBRSxPQUFPLENBQUMsTUFBTTtnQkFDekIsZUFBZSxFQUFFLE9BQU8sQ0FBQyxlQUFlO2dCQUN4QyxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7YUFDN0IsQ0FBQyxDQUFDO1lBRUgsaURBQWlEO1lBQ2pELGVBQWUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFbkMsNkVBQTZFO1lBQzdFLHlFQUF5RTtZQUN6RSwwREFBMEQ7WUFDMUQsY0FBYyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFFaEQseUVBQXlFO1lBQ3pFLG1FQUFtRTtZQUVuRSxJQUFJLFFBQWtCLENBQUM7WUFDdkIsSUFBSSxZQUFxQyxDQUFDO1lBQzFDLElBQUksY0FBYyxHQUE2QixFQUFFLENBQUM7WUFDbEQsaUVBQWlFO1lBQ2pFLElBQUksY0FBc0YsQ0FBQztZQUMzRixJQUFJLGNBQWdELENBQUM7WUFFckQsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3RCLG1FQUFtRTtnQkFDbkUseUVBQXlFO2dCQUN6RSxvRUFBb0U7Z0JBQ3BFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNoRCxTQUFTLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDNUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDM0QsQ0FBQztnQkFDRCxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDOUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQTRELENBQUM7Z0JBQzFGLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ25GLENBQUM7Z0JBQ0QsUUFBUSxHQUFHO29CQUNULEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFJLE9BQU87b0JBQ3hCLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxJQUFJLGVBQWU7b0JBQzFDLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWSxJQUFJLFdBQVc7b0JBQ2hELEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztvQkFDbkIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLElBQUksS0FBSztvQkFDcEMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLElBQUksSUFBSTtvQkFDakMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2lCQUNSLENBQUM7Z0JBQ2QsWUFBWSxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQ2xDLGFBQWEsQ0FBQztvQkFDWixNQUFNLEVBQUUsT0FBTztvQkFDZixPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU87b0JBQ3pCLFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWTtpQkFDcEMsQ0FBQyxDQUFDO2dCQUNILFlBQVksR0FBRztvQkFDYixHQUFHLFFBQVEsQ0FBQyxLQUFLO29CQUNqQixHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ2hELFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRTtpQkFDeEIsQ0FBQztZQUNKLENBQUM7aUJBQU0sQ0FBQztnQkFDTix1RUFBdUU7Z0JBQ3ZFLHVFQUF1RTtnQkFDdkUsZ0RBQWdEO2dCQUNoRCxjQUFjLEdBQUcsTUFBTSw4QkFBOEIsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDL0QsY0FBYyxHQUFHLGNBQWMsQ0FBQyxTQUFTLEVBQTBCLENBQUM7Z0JBRXBFLFNBQVMsQ0FBQyxpQ0FBaUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDakUsTUFBTSxPQUFPLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNyRSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztnQkFDNUIsWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7Z0JBQ3BDLGNBQWMsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO2dCQUV4QyxZQUFZLENBQUMsa0NBQWtDLENBQUMsQ0FBQztnQkFDakQsYUFBYSxDQUFDO29CQUNaLElBQUksRUFBRSxRQUFRLENBQUMsRUFBRTtvQkFDakIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxPQUFPO29CQUMzQixjQUFjLEVBQUUsUUFBUSxDQUFDLFlBQVk7b0JBQ3JDLFlBQVksRUFBRSxRQUFRLENBQUMsU0FBUztvQkFDaEMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxRQUFRO2lCQUMvQixDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsa0VBQWtFO1lBQ2xFLElBQUssT0FBc0MsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDekQsTUFBTSxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDeEMsT0FBTztZQUNULENBQUM7WUFFRCx1RUFBdUU7WUFDdkUsbUVBQW1FO1lBQ25FLE1BQU0sU0FBUyxDQUFDO2dCQUNkLFFBQVE7Z0JBQ1IsWUFBWTtnQkFDWixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87Z0JBQ3hCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtnQkFDdEIsZUFBZSxFQUFFLE9BQU8sQ0FBQyxlQUFlO2dCQUN4QyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07Z0JBQ3RCLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSztnQkFDM0IsV0FBVztnQkFDWCxxRUFBcUU7Z0JBQ3JFLHdFQUF3RTtnQkFDeEUsY0FBYyxFQUFFLGNBQWMsSUFBSSxNQUFNLHlCQUF5QixDQUFDO29CQUNoRSxNQUFNLEVBQUUsY0FBYztvQkFDdEIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO29CQUNoQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7b0JBQ3JCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtvQkFDdEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO2lCQUN6QixDQUFDO2dCQUNGLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxHQUFHLENBQUMsV0FBVztnQkFDcEQsZUFBZSxFQUFFLGNBQWMsRUFBRSxHQUFHLENBQUMsT0FBTzthQUM3QyxDQUFDLENBQUM7WUFDSCx1RUFBdUU7WUFDdkUscURBQXFEO1lBQ3JELHlCQUF5QixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTVDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsV0FBVyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsV0FBVyxFQUFFO2dCQUMxQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUs7Z0JBQzNCLElBQUksRUFBRSxJQUFJO2dCQUNWLE9BQU8sRUFBRTtvQkFDUCxPQUFPLEVBQUUsUUFBUTtvQkFDakIsV0FBVztvQkFDWCxVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQUU7b0JBQ3RCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztpQkFDN0I7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHR5cGUgeyBMb29rdXBXYXJuaW5nIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtY29yZSc7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IHR5cGUgUGlwZWxpbmUsIHR5cGUgUGxhdGZvcm1EZXBsb3lDb25maWcgfSBmcm9tICcuLi90eXBlcy9pbmRleC5qcyc7XG5pbXBvcnQgeyBhdWRpdExvZyB9IGZyb20gJy4uL3V0aWxzL2F1ZGl0LWxvZy5qcyc7XG5pbXBvcnQgeyBwcmludENvbW1hbmRIZWFkZXIsIHByaW50U3NsV2FybmluZywgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jLCB3aXRoUHJvZmlsZU9wdGlvbiwgd2l0aFJlZ2lvbk9wdGlvbiwgd2l0aFNzbE9wdGlvbnMgfSBmcm9tICcuLi91dGlscy9jb21tYW5kLXV0aWxzLmpzJztcbmltcG9ydCB7IHJ1bkRlcGxveSB9IGZyb20gJy4uL3V0aWxzL2RlcGxveS1ydW5uZXIuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludEluZm8sIHByaW50S2V5VmFsdWUsIHByaW50U3VjY2VzcywgcHJpbnRXYXJuaW5nIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcbmltcG9ydCB7IGZldGNoUGlwZWxpbmVQcm9wcywgcHJpbnRSZXNvbHZlZE9yRXhpdCB9IGZyb20gJy4uL3V0aWxzL3BpcGVsaW5lLWNvbmZpZy5qcyc7XG5pbXBvcnQgeyBwcmludExvb2t1cFdhcm5pbmdTdW1tYXJ5IH0gZnJvbSAnLi4vdXRpbHMvcGx1Z2luLXJlc29sdmVyLmpzJztcbmltcG9ydCB7IHJlc29sdmVSZWdpc3RyYXRpb25DbGllbnQgfSBmcm9tICcuLi91dGlscy9yZWdpc3RyYXRpb24tY2xpZW50LmpzJztcbmltcG9ydCB7IHNldFBpcGVsaW5lSWQgfSBmcm9tICcuLi91dGlscy9yZXF1ZXN0LWNvbnRleHQuanMnO1xuaW1wb3J0IHsgcmVsYXhUbHNGb3JDbGkgfSBmcm9tICcuLi91dGlscy90bHMuanMnO1xuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgYGRlcGxveWAgY29tbWFuZCB3aXRoIHRoZSBDTEkgcHJvZ3JhbS5cbiAqXG4gKiBGZXRjaGVzIHBpcGVsaW5lIHByb3BlcnRpZXMgYnkgSUQgZnJvbSB0aGUgcGxhdGZvcm0gQVBJLCB0aGVuXG4gKiBydW5zIGBjZGsgZGVwbG95YCB0byBwcm92aXNpb24gdGhlIHBpcGVsaW5lIGluZnJhc3RydWN0dXJlIGluIEFXUy5cbiAqIEZvciBzeW50aGVzaXMgb25seSwgdXNlIGBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIHN5bnRoYC5cbiAqXG4gKiBSZXF1aXJlcyBzZXJ2aWNlIGNyZWRlbnRpYWxzIHRvIGJlIHByZS1zdG9yZWQgaW4gQVdTIFNlY3JldHMgTWFuYWdlci5cbiAqIENyZWF0ZSB0aGVtIGZpcnN0IHdpdGg6IGBwaXBlbGluZS1tYW5hZ2VyIGluZnJhIHN0b3JlLXRva2VuYFxuICpcbiAqIEBwYXJhbSBwcm9ncmFtIC0gVGhlIHJvb3QgQ29tbWFuZGVyIHByb2dyYW0gaW5zdGFuY2UgdG8gYXR0YWNoIHRoZSBjb21tYW5kIHRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVwbG95KHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgd2l0aFNzbE9wdGlvbnMoXG4gICAgd2l0aFJlZ2lvbk9wdGlvbihcbiAgICAgIHdpdGhQcm9maWxlT3B0aW9uKHByb2dyYW1cbiAgICAgICAgLmNvbW1hbmQoJ2RlcGxveScpXG4gICAgICAgIC5kZXNjcmlwdGlvbignRGVwbG95IHBpcGVsaW5lIGJ5IElEIHVzaW5nIEFXUyBDREssIG9yIC0tbG9jYWwtc3BlYyB0byBkZXBsb3kgYSBsb2NhbCBwaXBlbGluZS5qc29uIHdpdGhvdXQgdGhlIHBsYXRmb3JtJylcbiAgICAgICAgLm9wdGlvbignLWksIC0taWQgPGlkPicsICdQaXBlbGluZSBJRCAoZmV0Y2hlcyBjb25maWcgZnJvbSB0aGUgcGxhdGZvcm0pJylcbiAgICAgICAgLm9wdGlvbignLS1sb2NhbC1zcGVjIDxwYXRoPicsICdQYXRoIHRvIGEgbG9jYWwgcGlwZWxpbmUuanNvbiDigJQgZGVwbG95cyB3aXRob3V0IGNvbnRhY3RpbmcgdGhlIHBsYXRmb3JtIChubyBhdXRoLCBubyBjb21wbGlhbmNlLCBubyBwbHVnaW4gbG9va3VwKScpKVxuICAgICAgICAub3B0aW9uKCctLXJlcXVpcmUtYXBwcm92YWwgPGFwcHJvdmFsPicsICdEZXBsb3kgYXBwcm92YWwgbGV2ZWw6IG5ldmVyfGFueS1jaGFuZ2V8YnJvYWRlbmluZy4gRGVmYXVsdHMgdG8gYGJyb2FkZW5pbmdgOiBhIGRlcGxveSB0aGF0IHdpZGVucyBJQU0gc3RvcHMgZm9yIGNvbmZpcm1hdGlvbi4gUGFzcyBgbmV2ZXJgIGZvciB1bmF0dGVuZGVkIHJ1bnMuJywgJ2Jyb2FkZW5pbmcnKVxuICAgICAgICAub3B0aW9uKCctLW91dHB1dCA8ZGlyPicsICdDREsgb3V0cHV0IGRpcmVjdG9yeScsICdjZGsub3V0JylcbiAgICAgICAgLm9wdGlvbignLS1zdG9yZS10b2tlbnMnLCAnQXV0aGVudGljYXRlIHVzaW5nIHRva2VuIGZyb20gQVdTIFNlY3JldHMgTWFuYWdlciAocmVxdWlyZXMgUExBVEZPUk1fU0VDUkVUX05BTUUgZW52IHZhciknLCBmYWxzZSksXG4gICAgKSxcbiAgKVxuICAgIC5vcHRpb24oJy0tc2hvdy1yZXNvbHZlZCcsICdQcmludCB0aGUgcmVzb2x2ZWQgcGlwZWxpbmUgY29uZmlnICh3aXRoIHt7IC4uLiB9fSB0ZW1wbGF0ZXMgZXhwYW5kZWQpIGFuZCBleGl0IHdpdGhvdXQgZGVwbG95aW5nJywgZmFsc2UpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgZXhlY3V0aW9uSWQgPSBwcmludENvbW1hbmRIZWFkZXIoJ1BpcGVsaW5lIERlcGxveScpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyBNdXR1YWxseSBleGNsdXNpdmUgaW5wdXQgc291cmNlcyDigJQgdmFsaWRhdGVkIElOU0lERSB0aGUgdHJ5IHNvIGZhaWx1cmVzIHJvdXRlXG4gICAgICAgIC8vIHRocm91Z2ggaGFuZGxlRXJyb3IgKGNvbnNpc3RlbnQgZXhpdCBjb2RlL2Zvcm1hdCkgbGlrZSBldmVyeSBvdGhlciBjb21tYW5kLlxuICAgICAgICBpZiAoIW9wdGlvbnMuaWQgJiYgIW9wdGlvbnMubG9jYWxTcGVjKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFaXRoZXIgLS1pZCA8cGlwZWxpbmUtaWQ+IG9yIC0tbG9jYWwtc3BlYyA8cGF0aD4gaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pZCAmJiBvcHRpb25zLmxvY2FsU3BlYykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignLS1pZCBhbmQgLS1sb2NhbC1zcGVjIGFyZSBtdXR1YWxseSBleGNsdXNpdmUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF1ZGl0TG9nKCdkZXBsb3knLCB7IGV4ZWN1dGlvbklkLCBwaXBlbGluZUlkOiBvcHRpb25zLmlkLCBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGUgfSk7XG4gICAgICAgIC8vIEF0dHJpYnV0ZXMgdGhpcyBkZXBsb3kncyBwbGF0Zm9ybSBjYWxscyB0byB0aGUgcGlwZWxpbmUgKHVzYWdlIGxlZGdlcikuXG4gICAgICAgIHNldFBpcGVsaW5lSWQob3B0aW9ucy5pZCk7XG5cbiAgICAgICAgcHJpbnRJbmZvKCdEZXBsb3ltZW50IHBhcmFtZXRlcnMnLCB7XG4gICAgICAgICAgaWQ6IG9wdGlvbnMuaWQsXG4gICAgICAgICAgYXdzUHJvZmlsZTogb3B0aW9ucy5wcm9maWxlLFxuICAgICAgICAgIG91dHB1dERpcjogb3B0aW9ucy5vdXRwdXQsXG4gICAgICAgICAgcmVxdWlyZUFwcHJvdmFsOiBvcHRpb25zLnJlcXVpcmVBcHByb3ZhbCxcbiAgICAgICAgICB2ZXJpZnlTc2w6IG9wdGlvbnMudmVyaWZ5U3NsLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTZWN1cml0eSB3YXJuaW5nIGZvciBTU0wgdmVyaWZpY2F0aW9uIGRpc2FibGVkXG4gICAgICAgIHByaW50U3NsV2FybmluZyhvcHRpb25zLnZlcmlmeVNzbCk7XG5cbiAgICAgICAgLy8gUHJvcGFnYXRlIHRvIHByb2Nlc3MuZW52IHNvIENESyBjb25zdHJ1Y3RzIChMYW1iZGEsIENvZGVCdWlsZCkgaW5oZXJpdCBpdCxcbiAgICAgICAgLy8gYnV0IHJlZnVzZSBpbiBwcm9kdWN0aW9uIChzZWUgcmVsYXhUbHNGb3JDbGkpIOKAlCB0aGUgZmxhZyBkaXNhYmxlcyBjZXJ0XG4gICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIEFMTCBvdXRib3VuZCBUTFMsIGluY2x1ZGluZyB0aGUgQVdTIFNESy5cbiAgICAgICAgcmVsYXhUbHNGb3JDbGkob3B0aW9ucy52ZXJpZnlTc2wsIHByaW50V2FybmluZyk7XG5cbiAgICAgICAgLy8gTG9jYWwtdG9vbCBwcmVyZXF1aXNpdGVzIChjZGsgKyBlc2J1aWxkL3BucG0pIGFyZSB2ZXJpZmllZCB1cCBmcm9udCBieVxuICAgICAgICAvLyB0aGUgQ0xJJ3MgcHJlQWN0aW9uIGhvb2ssIHNvIGJ5IGhlcmUgdGhleSdyZSBndWFyYW50ZWVkIHByZXNlbnQuXG5cbiAgICAgICAgbGV0IHBpcGVsaW5lOiBQaXBlbGluZTtcbiAgICAgICAgbGV0IHByb3BzV2l0aElkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIGxldCBwbHVnaW5XYXJuaW5nczogcmVhZG9ubHkgTG9va3VwV2FybmluZ1tdID0gW107XG4gICAgICAgIC8vIFJlbW90ZS1tb2RlIHJlZ2lzdHJ5LXBvc3QgaGFuZGxlcyDigJQgbnVsbCBpbiAtLWxvY2FsLXNwZWMgbW9kZS5cbiAgICAgICAgbGV0IHBsYXRmb3JtQ2xpZW50OiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnRBc3luYz4+IHwgdW5kZWZpbmVkO1xuICAgICAgICBsZXQgcGxhdGZvcm1Db25maWc6IFBsYXRmb3JtRGVwbG95Q29uZmlnIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmxvY2FsU3BlYykge1xuICAgICAgICAgIC8vIC0tbG9jYWwtc3BlYzogcmVhZCBwaXBlbGluZS5qc29uIGZyb20gZGlzazsgbm8gcGxhdGZvcm0gY29udGFjdC5cbiAgICAgICAgICAvLyBDb21wbGlhbmNlIC8gcXVvdGEgLyBwbHVnaW4tbG9va3VwIGZlYXR1cmVzIGFsbCByZXF1aXJlIHRoZSBwbGF0Zm9ybSDigJRcbiAgICAgICAgICAvLyB0aGlzIG1vZGUgaXMgZm9yIGFpci1nYXBwZWQgb3Igc2ltcGxlIHN0YW5kYWxvbmUgQ0RLIGRlcGxveW1lbnRzLlxuICAgICAgICAgIGNvbnN0IGFic1BhdGggPSBwYXRoLnJlc29sdmUob3B0aW9ucy5sb2NhbFNwZWMpO1xuICAgICAgICAgIHByaW50SW5mbygnTG9hZGluZyBsb2NhbCBwaXBlbGluZSBzcGVjJywgeyBwYXRoOiBhYnNQYXRoIH0pO1xuICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhhYnNQYXRoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMb2NhbCBzcGVjIGZpbGUgbm90IGZvdW5kOiAke2Fic1BhdGh9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJhdyA9IGZzLnJlYWRGaWxlU3luYyhhYnNQYXRoLCAndXRmLTgnKTtcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdykgYXMgUGFydGlhbDxQaXBlbGluZT4gJiB7IHByb3BzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfTtcbiAgICAgICAgICBpZiAoIXBhcnNlZC5wcm9wcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMb2NhbCBzcGVjIGZpbGUgaXMgbWlzc2luZyByZXF1aXJlZCAncHJvcHMnIGZpZWxkOiAke2Fic1BhdGh9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBpcGVsaW5lID0ge1xuICAgICAgICAgICAgaWQ6IHBhcnNlZC5pZCA/PyAnbG9jYWwnLFxuICAgICAgICAgICAgcHJvamVjdDogcGFyc2VkLnByb2plY3QgPz8gJ2xvY2FsLXByb2plY3QnLFxuICAgICAgICAgICAgb3JnYW5pemF0aW9uOiBwYXJzZWQub3JnYW5pemF0aW9uID8/ICdsb2NhbC1vcmcnLFxuICAgICAgICAgICAgb3JnSWQ6IHBhcnNlZC5vcmdJZCxcbiAgICAgICAgICAgIGlzRGVmYXVsdDogcGFyc2VkLmlzRGVmYXVsdCA/PyBmYWxzZSxcbiAgICAgICAgICAgIGlzQWN0aXZlOiBwYXJzZWQuaXNBY3RpdmUgPz8gdHJ1ZSxcbiAgICAgICAgICAgIHByb3BzOiBwYXJzZWQucHJvcHMsXG4gICAgICAgICAgfSBhcyBQaXBlbGluZTtcbiAgICAgICAgICBwcmludFN1Y2Nlc3MoJ0xvY2FsIHNwZWMgbG9hZGVkJyk7XG4gICAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgICBTb3VyY2U6IGFic1BhdGgsXG4gICAgICAgICAgICBQcm9qZWN0OiBwaXBlbGluZS5wcm9qZWN0LFxuICAgICAgICAgICAgT3JnYW5pemF0aW9uOiBwaXBlbGluZS5vcmdhbml6YXRpb24sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcHJvcHNXaXRoSWRzID0ge1xuICAgICAgICAgICAgLi4ucGlwZWxpbmUucHJvcHMsXG4gICAgICAgICAgICAuLi4ocGlwZWxpbmUub3JnSWQgJiYgeyBvcmdJZDogcGlwZWxpbmUub3JnSWQgfSksXG4gICAgICAgICAgICBwaXBlbGluZUlkOiBwaXBlbGluZS5pZCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFJlbW90ZSBwYXRoOiBmZXRjaCBjb25maWcgZnJvbSBwbGF0Zm9ybSBBUEkuIGZldGNoUGlwZWxpbmVQcm9wcyBkb2VzXG4gICAgICAgICAgLy8gdGhlIGZldGNoICsgcGx1Z2luIHByZS1yZXNvbHV0aW9uICsgcmVnaXN0cnkgcHVsbC1ob3N0IGJha2Ug4oCUIHNoYXJlZFxuICAgICAgICAgIC8vIHZlcmJhdGltIHdpdGggYHN5bnRoYCBzbyB0aGUgdHdvIG5ldmVyIGRyaWZ0LlxuICAgICAgICAgIHBsYXRmb3JtQ2xpZW50ID0gYXdhaXQgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jKG9wdGlvbnMpO1xuICAgICAgICAgIHBsYXRmb3JtQ29uZmlnID0gcGxhdGZvcm1DbGllbnQuZ2V0Q29uZmlnKCkgYXMgUGxhdGZvcm1EZXBsb3lDb25maWc7XG5cbiAgICAgICAgICBwcmludEluZm8oJ0ZldGNoaW5nIHBpcGVsaW5lIGNvbmZpZ3VyYXRpb24nLCB7IGlkOiBvcHRpb25zLmlkIH0pO1xuICAgICAgICAgIGNvbnN0IGZldGNoZWQgPSBhd2FpdCBmZXRjaFBpcGVsaW5lUHJvcHMocGxhdGZvcm1DbGllbnQsIG9wdGlvbnMuaWQpO1xuICAgICAgICAgIHBpcGVsaW5lID0gZmV0Y2hlZC5waXBlbGluZTtcbiAgICAgICAgICBwcm9wc1dpdGhJZHMgPSBmZXRjaGVkLnByb3BzV2l0aElkcztcbiAgICAgICAgICBwbHVnaW5XYXJuaW5ncyA9IGZldGNoZWQucGx1Z2luV2FybmluZ3M7XG5cbiAgICAgICAgICBwcmludFN1Y2Nlc3MoJ1BpcGVsaW5lIGNvbmZpZ3VyYXRpb24gcmV0cmlldmVkJyk7XG4gICAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgICAnSUQnOiBwaXBlbGluZS5pZCxcbiAgICAgICAgICAgICdQcm9qZWN0JzogcGlwZWxpbmUucHJvamVjdCxcbiAgICAgICAgICAgICdPcmdhbml6YXRpb24nOiBwaXBlbGluZS5vcmdhbml6YXRpb24sXG4gICAgICAgICAgICAnSXMgRGVmYXVsdCc6IHBpcGVsaW5lLmlzRGVmYXVsdCxcbiAgICAgICAgICAgICdJcyBBY3RpdmUnOiBwaXBlbGluZS5pc0FjdGl2ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC0tc2hvdy1yZXNvbHZlZDogcHJpbnQgcmVzb2x2ZWQgY29uZmlnIGFuZCBleGl0IChubyBDREsgZGVwbG95KVxuICAgICAgICBpZiAoKG9wdGlvbnMgYXMgeyBzaG93UmVzb2x2ZWQ/OiBib29sZWFuIH0pLnNob3dSZXNvbHZlZCkge1xuICAgICAgICAgIGF3YWl0IHByaW50UmVzb2x2ZWRPckV4aXQocHJvcHNXaXRoSWRzKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGVwcyA14oCTOSAoZW5jb2RlIHByb3BzIOKGkiBjZGsgZGVwbG95IOKGkiByZWdpc3RlciBBUk4pIGFyZSBzaGFyZWQgd2l0aFxuICAgICAgICAvLyBgcGlwZWxpbmUgY3JlYXRlIC0tZGVwbG95YCB2aWEgcnVuRGVwbG95IHNvIHRoZSB0d28gbmV2ZXIgZHJpZnQuXG4gICAgICAgIGF3YWl0IHJ1bkRlcGxveSh7XG4gICAgICAgICAgcGlwZWxpbmUsXG4gICAgICAgICAgcHJvcHNXaXRoSWRzLFxuICAgICAgICAgIHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSxcbiAgICAgICAgICByZWdpb246IG9wdGlvbnMucmVnaW9uLFxuICAgICAgICAgIHJlcXVpcmVBcHByb3ZhbDogb3B0aW9ucy5yZXF1aXJlQXBwcm92YWwsXG4gICAgICAgICAgb3V0cHV0OiBvcHRpb25zLm91dHB1dCxcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgLy8gVGhlIHJlZ2lzdHJ5IGNhbGxiYWNrJ3MgY3JlZGVudGlhbDogdGhlIG9wZXJhdG9yJ3Mgb3duLCBvciDigJQgdW5kZXJcbiAgICAgICAgICAvLyAtLXN0b3JlLXRva2VucyDigJQgdGhlIGBwaXBlbGluZS1yZWdpc3RlcmAga2V5LCBuZXZlciB0aGUgcGxhdGZvcm0gb25lLlxuICAgICAgICAgIHBsYXRmb3JtQ2xpZW50OiBwbGF0Zm9ybUNsaWVudCAmJiBhd2FpdCByZXNvbHZlUmVnaXN0cmF0aW9uQ2xpZW50KHtcbiAgICAgICAgICAgIGNsaWVudDogcGxhdGZvcm1DbGllbnQsXG4gICAgICAgICAgICBzdG9yZVRva2Vuczogb3B0aW9ucy5zdG9yZVRva2VucyxcbiAgICAgICAgICAgIG9yZ0lkOiBwaXBlbGluZS5vcmdJZCxcbiAgICAgICAgICAgIHJlZ2lvbjogb3B0aW9ucy5yZWdpb24sXG4gICAgICAgICAgICBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGUsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgcGxhdGZvcm1QaXBlbGluZVVybDogcGxhdGZvcm1Db25maWc/LmFwaS5waXBlbGluZVVybCxcbiAgICAgICAgICBwbGF0Zm9ybUJhc2VVcmw6IHBsYXRmb3JtQ29uZmlnPy5hcGkuYmFzZVVybCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEdyYWRlZCBwbHVnaW4gd2FybmluZ3MgYXJlIHJlcG9ydGVkLCBuZXZlciBlbmZvcmNlZCDigJQgc3VtbWFyaXplIHRoZW1cbiAgICAgICAgLy8gYWZ0ZXIgdGhlIENESyBvdXRwdXQgc28gdGhleSBhcmVuJ3QgbG9zdCBhYm92ZSBpdC5cbiAgICAgICAgcHJpbnRMb29rdXBXYXJuaW5nU3VtbWFyeShwbHVnaW5XYXJuaW5ncyk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6ICdkZXBsb3knLFxuICAgICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgICBwaXBlbGluZUlkOiBvcHRpb25zLmlkLFxuICAgICAgICAgICAgdmVyaWZ5U3NsOiBvcHRpb25zLnZlcmlmeVNzbCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
|
|
188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvZGVwbG95LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFFbEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQTRDLE1BQU0sbUJBQW1CLENBQUM7QUFDN0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsOEJBQThCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckssT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFbEY7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFDLE9BQWdCO0lBQ3JDLGNBQWMsQ0FDWixnQkFBZ0IsQ0FDZCxpQkFBaUIsQ0FBQyxPQUFPO1NBQ3RCLE9BQU8sQ0FBQyxRQUFRLENBQUM7U0FDakIsV0FBVyxDQUFDLDJHQUEyRyxDQUFDO1NBQ3hILE1BQU0sQ0FBQyxlQUFlLEVBQUUsZ0RBQWdELENBQUM7U0FDekUsTUFBTSxDQUFDLHFCQUFxQixFQUFFLCtJQUErSSxDQUFDO1NBQzlLLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSx5R0FBeUcsQ0FBQyxDQUFDO1NBQzdJLE1BQU0sQ0FBQywrQkFBK0IsRUFBRSxrS0FBa0ssRUFBRSxZQUFZLENBQUM7U0FDek4sTUFBTSxDQUFDLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLFNBQVMsQ0FBQztTQUMzRCxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsMkZBQTJGLEVBQUUsS0FBSyxDQUFDLENBQ2hJLENBQ0Y7U0FDRSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsbUdBQW1HLEVBQUUsS0FBSyxDQUFDO1NBQ3JJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDeEIsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUUxRCxJQUFJLENBQUM7WUFDSCxnRkFBZ0Y7WUFDaEYsOEVBQThFO1lBQzlFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7WUFDbEYsQ0FBQztZQUNELElBQUksT0FBTyxDQUFDLEVBQUUsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztZQUNsRSxDQUFDO1lBQ0QsSUFBSSxPQUFPLENBQUMsYUFBYSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNoRCxNQUFNLElBQUksS0FBSyxDQUFDLHVHQUF1RyxDQUFDLENBQUM7WUFDM0gsQ0FBQztZQUNELHdFQUF3RTtZQUN4RSxxRUFBcUU7WUFDckUsSUFBSSxPQUFPLENBQUMsU0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWE7Z0JBQUUsTUFBTSxxQkFBcUIsRUFBRSxDQUFDO1lBRS9FLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3RGLDBFQUEwRTtZQUMxRSxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRTFCLFNBQVMsQ0FBQyx1QkFBdUIsRUFBRTtnQkFDakMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFO2dCQUNkLFVBQVUsRUFBRSxPQUFPLENBQUMsT0FBTztnQkFDM0IsU0FBUyxFQUFFLE9BQU8sQ0FBQyxNQUFNO2dCQUN6QixlQUFlLEVBQUUsT0FBTyxDQUFDLGVBQWU7Z0JBQ3hDLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUzthQUM3QixDQUFDLENBQUM7WUFFSCxpREFBaUQ7WUFDakQsZUFBZSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUVuQyw2RUFBNkU7WUFDN0UseUVBQXlFO1lBQ3pFLDBEQUEwRDtZQUMxRCxjQUFjLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUVoRCx5RUFBeUU7WUFDekUsbUVBQW1FO1lBRW5FLElBQUksUUFBa0IsQ0FBQztZQUN2QixJQUFJLFlBQXFDLENBQUM7WUFDMUMsSUFBSSxjQUFjLEdBQTZCLEVBQUUsQ0FBQztZQUNsRCxpRUFBaUU7WUFDakUsSUFBSSxjQUFzRixDQUFDO1lBQzNGLElBQUksY0FBZ0QsQ0FBQztZQUVyRCxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDdEIsbUVBQW1FO2dCQUNuRSx5RUFBeUU7Z0JBQ3pFLG9FQUFvRTtnQkFDcEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2hELFNBQVMsQ0FBQyw2QkFBNkIsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUMzRCxDQUFDO2dCQUNELE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUM5QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBNEQsQ0FBQztnQkFDMUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDbkYsQ0FBQztnQkFDRCxRQUFRLEdBQUc7b0JBQ1QsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUksT0FBTztvQkFDeEIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLElBQUksZUFBZTtvQkFDMUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZLElBQUksV0FBVztvQkFDaEQsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO29CQUNuQixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVMsSUFBSSxLQUFLO29CQUNwQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJO29CQUNqQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7aUJBQ1IsQ0FBQztnQkFDZCxZQUFZLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFDbEMsYUFBYSxDQUFDO29CQUNaLE1BQU0sRUFBRSxPQUFPO29CQUNmLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTztvQkFDekIsWUFBWSxFQUFFLFFBQVEsQ0FBQyxZQUFZO2lCQUNwQyxDQUFDLENBQUM7Z0JBQ0gsWUFBWSxHQUFHO29CQUNiLEdBQUcsUUFBUSxDQUFDLEtBQUs7b0JBQ2pCLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDaEQsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFO2lCQUN4QixDQUFDO2dCQUNGLHFFQUFxRTtnQkFDckUseURBQXlEO2dCQUN6RCxNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUN4RSxTQUFTLENBQUMsK0JBQStCLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyRyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sdUVBQXVFO2dCQUN2RSx1RUFBdUU7Z0JBQ3ZFLGdEQUFnRDtnQkFDaEQsY0FBYyxHQUFHLE1BQU0sOEJBQThCLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQy9ELGNBQWMsR0FBRyxjQUFjLENBQUMsU0FBUyxFQUEwQixDQUFDO2dCQUVwRSxTQUFTLENBQUMsaUNBQWlDLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ2pFLE1BQU0sT0FBTyxHQUFHLE1BQU0sa0JBQWtCLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDckUsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7Z0JBQzVCLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDO2dCQUNwQyxjQUFjLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztnQkFFeEMsWUFBWSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7Z0JBQ2pELGFBQWEsQ0FBQztvQkFDWixJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUU7b0JBQ2pCLFNBQVMsRUFBRSxRQUFRLENBQUMsT0FBTztvQkFDM0IsY0FBYyxFQUFFLFFBQVEsQ0FBQyxZQUFZO29CQUNyQyxZQUFZLEVBQUUsUUFBUSxDQUFDLFNBQVM7b0JBQ2hDLFdBQVcsRUFBRSxRQUFRLENBQUMsUUFBUTtpQkFDL0IsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELGtFQUFrRTtZQUNsRSxJQUFLLE9BQXNDLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3pELE1BQU0sbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3hDLE9BQU87WUFDVCxDQUFDO1lBRUQsdUVBQXVFO1lBQ3ZFLG1FQUFtRTtZQUNuRSxNQUFNLFNBQVMsQ0FBQztnQkFDZCxRQUFRO2dCQUNSLFlBQVk7Z0JBQ1osT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO2dCQUN4QixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07Z0JBQ3RCLGVBQWUsRUFBRSxPQUFPLENBQUMsZUFBZTtnQkFDeEMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO2dCQUN0QixLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUs7Z0JBQzNCLFdBQVc7Z0JBQ1gscUVBQXFFO2dCQUNyRSx3RUFBd0U7Z0JBQ3hFLGNBQWMsRUFBRSxjQUFjLElBQUksTUFBTSx5QkFBeUIsQ0FBQztvQkFDaEUsTUFBTSxFQUFFLGNBQWM7b0JBQ3RCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztvQkFDaEMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO29CQUNyQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07b0JBQ3RCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztpQkFDekIsQ0FBQztnQkFDRixtQkFBbUIsRUFBRSxjQUFjLEVBQUUsR0FBRyxDQUFDLFdBQVc7Z0JBQ3BELGVBQWUsRUFBRSxjQUFjLEVBQUUsR0FBRyxDQUFDLE9BQU87YUFDN0MsQ0FBQyxDQUFDO1lBQ0gsdUVBQXVFO1lBQ3ZFLHFEQUFxRDtZQUNyRCx5QkFBeUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUU1QyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLFdBQVcsRUFBRTtnQkFDMUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLO2dCQUMzQixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUU7b0JBQ1AsT0FBTyxFQUFFLFFBQVE7b0JBQ2pCLFdBQVc7b0JBQ1gsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFO29CQUN0QixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7aUJBQzdCO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB0eXBlIHsgTG9va3VwV2FybmluZyB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmUnO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyB0eXBlIFBpcGVsaW5lLCB0eXBlIFBsYXRmb3JtRGVwbG95Q29uZmlnIH0gZnJvbSAnLi4vdHlwZXMvaW5kZXguanMnO1xuaW1wb3J0IHsgYXVkaXRMb2cgfSBmcm9tICcuLi91dGlscy9hdWRpdC1sb2cuanMnO1xuaW1wb3J0IHsgcHJpbnRDb21tYW5kSGVhZGVyLCBwcmludFNzbFdhcm5pbmcsIGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnRBc3luYywgd2l0aFByb2ZpbGVPcHRpb24sIHdpdGhSZWdpb25PcHRpb24sIHdpdGhTc2xPcHRpb25zIH0gZnJvbSAnLi4vdXRpbHMvY29tbWFuZC11dGlscy5qcyc7XG5pbXBvcnQgeyBydW5EZXBsb3kgfSBmcm9tICcuLi91dGlscy9kZXBsb3ktcnVubmVyLmpzJztcbmltcG9ydCB7IEVSUk9SX0NPREVTLCBoYW5kbGVFcnJvciB9IGZyb20gJy4uL3V0aWxzL2Vycm9yLWhhbmRsZXIuanMnO1xuaW1wb3J0IHsgcHJpbnRJbmZvLCBwcmludEtleVZhbHVlLCBwcmludFN1Y2Nlc3MsIHByaW50V2FybmluZyB9IGZyb20gJy4uL3V0aWxzL291dHB1dC11dGlscy5qcyc7XG5pbXBvcnQgeyBmZXRjaFBpcGVsaW5lUHJvcHMsIHByaW50UmVzb2x2ZWRPckV4aXQgfSBmcm9tICcuLi91dGlscy9waXBlbGluZS1jb25maWcuanMnO1xuaW1wb3J0IHsgcHJpbnRMb29rdXBXYXJuaW5nU3VtbWFyeSB9IGZyb20gJy4uL3V0aWxzL3BsdWdpbi1yZXNvbHZlci5qcyc7XG5pbXBvcnQgeyByZXNvbHZlUmVnaXN0cmF0aW9uQ2xpZW50IH0gZnJvbSAnLi4vdXRpbHMvcmVnaXN0cmF0aW9uLWNsaWVudC5qcyc7XG5pbXBvcnQgeyBzZXRQaXBlbGluZUlkIH0gZnJvbSAnLi4vdXRpbHMvcmVxdWVzdC1jb250ZXh0LmpzJztcbmltcG9ydCB7IHJlbGF4VGxzRm9yQ2xpIH0gZnJvbSAnLi4vdXRpbHMvdGxzLmpzJztcbmltcG9ydCB7IGFwcGx5VG9vbGNoYWluRmlsZSwgdG9vbGNoYWluRmlsZVJlcXVpcmVkIH0gZnJvbSAnLi4vdXRpbHMvdG9vbGNoYWluLmpzJztcblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGBkZXBsb3lgIGNvbW1hbmQgd2l0aCB0aGUgQ0xJIHByb2dyYW0uXG4gKlxuICogRmV0Y2hlcyBwaXBlbGluZSBwcm9wZXJ0aWVzIGJ5IElEIGZyb20gdGhlIHBsYXRmb3JtIEFQSSwgdGhlblxuICogcnVucyBgY2RrIGRlcGxveWAgdG8gcHJvdmlzaW9uIHRoZSBwaXBlbGluZSBpbmZyYXN0cnVjdHVyZSBpbiBBV1MuXG4gKiBGb3Igc3ludGhlc2lzIG9ubHksIHVzZSBgcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBzeW50aGAuXG4gKlxuICogUmVxdWlyZXMgc2VydmljZSBjcmVkZW50aWFscyB0byBiZSBwcmUtc3RvcmVkIGluIEFXUyBTZWNyZXRzIE1hbmFnZXIuXG4gKiBDcmVhdGUgdGhlbSBmaXJzdCB3aXRoOiBgcGlwZWxpbmUtbWFuYWdlciBpbmZyYSBzdG9yZS10b2tlbmBcbiAqXG4gKiBAcGFyYW0gcHJvZ3JhbSAtIFRoZSByb290IENvbW1hbmRlciBwcm9ncmFtIGluc3RhbmNlIHRvIGF0dGFjaCB0aGUgY29tbWFuZCB0by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcGxveShwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHdpdGhTc2xPcHRpb25zKFxuICAgIHdpdGhSZWdpb25PcHRpb24oXG4gICAgICB3aXRoUHJvZmlsZU9wdGlvbihwcm9ncmFtXG4gICAgICAgIC5jb21tYW5kKCdkZXBsb3knKVxuICAgICAgICAuZGVzY3JpcHRpb24oJ0RlcGxveSBwaXBlbGluZSBieSBJRCB1c2luZyBBV1MgQ0RLLCBvciAtLWxvY2FsLXNwZWMgdG8gZGVwbG95IGEgbG9jYWwgcGlwZWxpbmUuanNvbiB3aXRob3V0IHRoZSBwbGF0Zm9ybScpXG4gICAgICAgIC5vcHRpb24oJy1pLCAtLWlkIDxpZD4nLCAnUGlwZWxpbmUgSUQgKGZldGNoZXMgY29uZmlnIGZyb20gdGhlIHBsYXRmb3JtKScpXG4gICAgICAgIC5vcHRpb24oJy0tbG9jYWwtc3BlYyA8cGF0aD4nLCAnUGF0aCB0byBhIGxvY2FsIHBpcGVsaW5lLmpzb24g4oCUIGRlcGxveXMgd2l0aG91dCBjb250YWN0aW5nIHRoZSBwbGF0Zm9ybSAobm8gYXV0aCwgbm8gY29tcGxpYW5jZSwgbm8gcGx1Z2luIGxvb2t1cCkuIFJlcXVpcmVzIC0tdG9vbGNoYWluLWZpbGUnKVxuICAgICAgICAub3B0aW9uKCctLXRvb2xjaGFpbi1maWxlIDxwYXRoPicsICdXaXRoIC0tbG9jYWwtc3BlYzogdGhlIHRvb2xjaGFpbiByZWxlYXNlIHRvIGJ1aWxkIG9uLCBhcyB3cml0dGVuIGJ5IGBwaXBlbGluZS1tYW5hZ2VyIHRvb2xjaGFpbiBleHBvcnRgJykpXG4gICAgICAgIC5vcHRpb24oJy0tcmVxdWlyZS1hcHByb3ZhbCA8YXBwcm92YWw+JywgJ0RlcGxveSBhcHByb3ZhbCBsZXZlbDogbmV2ZXJ8YW55LWNoYW5nZXxicm9hZGVuaW5nLiBEZWZhdWx0cyB0byBgYnJvYWRlbmluZ2A6IGEgZGVwbG95IHRoYXQgd2lkZW5zIElBTSBzdG9wcyBmb3IgY29uZmlybWF0aW9uLiBQYXNzIGBuZXZlcmAgZm9yIHVuYXR0ZW5kZWQgcnVucy4nLCAnYnJvYWRlbmluZycpXG4gICAgICAgIC5vcHRpb24oJy0tb3V0cHV0IDxkaXI+JywgJ0NESyBvdXRwdXQgZGlyZWN0b3J5JywgJ2Nkay5vdXQnKVxuICAgICAgICAub3B0aW9uKCctLXN0b3JlLXRva2VucycsICdBdXRoZW50aWNhdGUgdXNpbmcgdG9rZW4gZnJvbSBBV1MgU2VjcmV0cyBNYW5hZ2VyIChyZXF1aXJlcyBQTEFURk9STV9TRUNSRVRfTkFNRSBlbnYgdmFyKScsIGZhbHNlKSxcbiAgICApLFxuICApXG4gICAgLm9wdGlvbignLS1zaG93LXJlc29sdmVkJywgJ1ByaW50IHRoZSByZXNvbHZlZCBwaXBlbGluZSBjb25maWcgKHdpdGgge3sgLi4uIH19IHRlbXBsYXRlcyBleHBhbmRlZCkgYW5kIGV4aXQgd2l0aG91dCBkZXBsb3lpbmcnLCBmYWxzZSlcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignUGlwZWxpbmUgRGVwbG95Jyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIE11dHVhbGx5IGV4Y2x1c2l2ZSBpbnB1dCBzb3VyY2VzIOKAlCB2YWxpZGF0ZWQgSU5TSURFIHRoZSB0cnkgc28gZmFpbHVyZXMgcm91dGVcbiAgICAgICAgLy8gdGhyb3VnaCBoYW5kbGVFcnJvciAoY29uc2lzdGVudCBleGl0IGNvZGUvZm9ybWF0KSBsaWtlIGV2ZXJ5IG90aGVyIGNvbW1hbmQuXG4gICAgICAgIGlmICghb3B0aW9ucy5pZCAmJiAhb3B0aW9ucy5sb2NhbFNwZWMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VpdGhlciAtLWlkIDxwaXBlbGluZS1pZD4gb3IgLS1sb2NhbC1zcGVjIDxwYXRoPiBpcyByZXF1aXJlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmlkICYmIG9wdGlvbnMubG9jYWxTcGVjKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCctLWlkIGFuZCAtLWxvY2FsLXNwZWMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnRvb2xjaGFpbkZpbGUgJiYgIW9wdGlvbnMubG9jYWxTcGVjKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCctLXRvb2xjaGFpbi1maWxlIGFwcGxpZXMgdG8gLS1sb2NhbC1zcGVjIG9ubHkgKHdpdGggLS1pZCB0aGUgcGxhdGZvcm0gcmVzb2x2ZXMgdGhlIHRvb2xjaGFpbiByZWxlYXNlKScpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdpdGhvdXQgdGhlIHBsYXRmb3JtLCB0aGUgdG9vbGNoYWluIHJlbGVhc2UgY2FuIG9ubHkgY29tZSBmcm9tIGEgZmlsZVxuICAgICAgICAvLyAoRDI6IG5ldmVyIGEgZmFsbGJhY2sgaW1hZ2UpLiBSZWZ1c2UgYmVmb3JlIHJlYWRpbmcgYW55dGhpbmcgZWxzZS5cbiAgICAgICAgaWYgKG9wdGlvbnMubG9jYWxTcGVjICYmICFvcHRpb25zLnRvb2xjaGFpbkZpbGUpIHRocm93IHRvb2xjaGFpbkZpbGVSZXF1aXJlZCgpO1xuXG4gICAgICAgIGF1ZGl0TG9nKCdkZXBsb3knLCB7IGV4ZWN1dGlvbklkLCBwaXBlbGluZUlkOiBvcHRpb25zLmlkLCBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGUgfSk7XG4gICAgICAgIC8vIEF0dHJpYnV0ZXMgdGhpcyBkZXBsb3kncyBwbGF0Zm9ybSBjYWxscyB0byB0aGUgcGlwZWxpbmUgKHVzYWdlIGxlZGdlcikuXG4gICAgICAgIHNldFBpcGVsaW5lSWQob3B0aW9ucy5pZCk7XG5cbiAgICAgICAgcHJpbnRJbmZvKCdEZXBsb3ltZW50IHBhcmFtZXRlcnMnLCB7XG4gICAgICAgICAgaWQ6IG9wdGlvbnMuaWQsXG4gICAgICAgICAgYXdzUHJvZmlsZTogb3B0aW9ucy5wcm9maWxlLFxuICAgICAgICAgIG91dHB1dERpcjogb3B0aW9ucy5vdXRwdXQsXG4gICAgICAgICAgcmVxdWlyZUFwcHJvdmFsOiBvcHRpb25zLnJlcXVpcmVBcHByb3ZhbCxcbiAgICAgICAgICB2ZXJpZnlTc2w6IG9wdGlvbnMudmVyaWZ5U3NsLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTZWN1cml0eSB3YXJuaW5nIGZvciBTU0wgdmVyaWZpY2F0aW9uIGRpc2FibGVkXG4gICAgICAgIHByaW50U3NsV2FybmluZyhvcHRpb25zLnZlcmlmeVNzbCk7XG5cbiAgICAgICAgLy8gUHJvcGFnYXRlIHRvIHByb2Nlc3MuZW52IHNvIENESyBjb25zdHJ1Y3RzIChMYW1iZGEsIENvZGVCdWlsZCkgaW5oZXJpdCBpdCxcbiAgICAgICAgLy8gYnV0IHJlZnVzZSBpbiBwcm9kdWN0aW9uIChzZWUgcmVsYXhUbHNGb3JDbGkpIOKAlCB0aGUgZmxhZyBkaXNhYmxlcyBjZXJ0XG4gICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIEFMTCBvdXRib3VuZCBUTFMsIGluY2x1ZGluZyB0aGUgQVdTIFNESy5cbiAgICAgICAgcmVsYXhUbHNGb3JDbGkob3B0aW9ucy52ZXJpZnlTc2wsIHByaW50V2FybmluZyk7XG5cbiAgICAgICAgLy8gTG9jYWwtdG9vbCBwcmVyZXF1aXNpdGVzIChjZGsgKyBlc2J1aWxkL3BucG0pIGFyZSB2ZXJpZmllZCB1cCBmcm9udCBieVxuICAgICAgICAvLyB0aGUgQ0xJJ3MgcHJlQWN0aW9uIGhvb2ssIHNvIGJ5IGhlcmUgdGhleSdyZSBndWFyYW50ZWVkIHByZXNlbnQuXG5cbiAgICAgICAgbGV0IHBpcGVsaW5lOiBQaXBlbGluZTtcbiAgICAgICAgbGV0IHByb3BzV2l0aElkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIGxldCBwbHVnaW5XYXJuaW5nczogcmVhZG9ubHkgTG9va3VwV2FybmluZ1tdID0gW107XG4gICAgICAgIC8vIFJlbW90ZS1tb2RlIHJlZ2lzdHJ5LXBvc3QgaGFuZGxlcyDigJQgbnVsbCBpbiAtLWxvY2FsLXNwZWMgbW9kZS5cbiAgICAgICAgbGV0IHBsYXRmb3JtQ2xpZW50OiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnRBc3luYz4+IHwgdW5kZWZpbmVkO1xuICAgICAgICBsZXQgcGxhdGZvcm1Db25maWc6IFBsYXRmb3JtRGVwbG95Q29uZmlnIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmxvY2FsU3BlYykge1xuICAgICAgICAgIC8vIC0tbG9jYWwtc3BlYzogcmVhZCBwaXBlbGluZS5qc29uIGZyb20gZGlzazsgbm8gcGxhdGZvcm0gY29udGFjdC5cbiAgICAgICAgICAvLyBDb21wbGlhbmNlIC8gcXVvdGEgLyBwbHVnaW4tbG9va3VwIGZlYXR1cmVzIGFsbCByZXF1aXJlIHRoZSBwbGF0Zm9ybSDigJRcbiAgICAgICAgICAvLyB0aGlzIG1vZGUgaXMgZm9yIGFpci1nYXBwZWQgb3Igc2ltcGxlIHN0YW5kYWxvbmUgQ0RLIGRlcGxveW1lbnRzLlxuICAgICAgICAgIGNvbnN0IGFic1BhdGggPSBwYXRoLnJlc29sdmUob3B0aW9ucy5sb2NhbFNwZWMpO1xuICAgICAgICAgIHByaW50SW5mbygnTG9hZGluZyBsb2NhbCBwaXBlbGluZSBzcGVjJywgeyBwYXRoOiBhYnNQYXRoIH0pO1xuICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhhYnNQYXRoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMb2NhbCBzcGVjIGZpbGUgbm90IGZvdW5kOiAke2Fic1BhdGh9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJhdyA9IGZzLnJlYWRGaWxlU3luYyhhYnNQYXRoLCAndXRmLTgnKTtcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdykgYXMgUGFydGlhbDxQaXBlbGluZT4gJiB7IHByb3BzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfTtcbiAgICAgICAgICBpZiAoIXBhcnNlZC5wcm9wcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMb2NhbCBzcGVjIGZpbGUgaXMgbWlzc2luZyByZXF1aXJlZCAncHJvcHMnIGZpZWxkOiAke2Fic1BhdGh9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBpcGVsaW5lID0ge1xuICAgICAgICAgICAgaWQ6IHBhcnNlZC5pZCA/PyAnbG9jYWwnLFxuICAgICAgICAgICAgcHJvamVjdDogcGFyc2VkLnByb2plY3QgPz8gJ2xvY2FsLXByb2plY3QnLFxuICAgICAgICAgICAgb3JnYW5pemF0aW9uOiBwYXJzZWQub3JnYW5pemF0aW9uID8/ICdsb2NhbC1vcmcnLFxuICAgICAgICAgICAgb3JnSWQ6IHBhcnNlZC5vcmdJZCxcbiAgICAgICAgICAgIGlzRGVmYXVsdDogcGFyc2VkLmlzRGVmYXVsdCA/PyBmYWxzZSxcbiAgICAgICAgICAgIGlzQWN0aXZlOiBwYXJzZWQuaXNBY3RpdmUgPz8gdHJ1ZSxcbiAgICAgICAgICAgIHByb3BzOiBwYXJzZWQucHJvcHMsXG4gICAgICAgICAgfSBhcyBQaXBlbGluZTtcbiAgICAgICAgICBwcmludFN1Y2Nlc3MoJ0xvY2FsIHNwZWMgbG9hZGVkJyk7XG4gICAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgICBTb3VyY2U6IGFic1BhdGgsXG4gICAgICAgICAgICBQcm9qZWN0OiBwaXBlbGluZS5wcm9qZWN0LFxuICAgICAgICAgICAgT3JnYW5pemF0aW9uOiBwaXBlbGluZS5vcmdhbml6YXRpb24sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcHJvcHNXaXRoSWRzID0ge1xuICAgICAgICAgICAgLi4ucGlwZWxpbmUucHJvcHMsXG4gICAgICAgICAgICAuLi4ocGlwZWxpbmUub3JnSWQgJiYgeyBvcmdJZDogcGlwZWxpbmUub3JnSWQgfSksXG4gICAgICAgICAgICBwaXBlbGluZUlkOiBwaXBlbGluZS5pZCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIC8vIFRoZSB0b29sY2hhaW4gcmVsZWFzZSBmcm9tIGB0b29sY2hhaW4gZXhwb3J0YDogdGhlIGJvb3RzdHJhcCBpbWFnZVxuICAgICAgICAgIC8vIGFuZCwgZm9yIGEgbWFuYWdlZCBjZGstc3ludGgsIHRoZSBzeW50aCBwbHVnaW4gaXRzZWxmLlxuICAgICAgICAgIGNvbnN0IHJlbGVhc2UgPSBhcHBseVRvb2xjaGFpbkZpbGUocHJvcHNXaXRoSWRzLCBvcHRpb25zLnRvb2xjaGFpbkZpbGUpO1xuICAgICAgICAgIHByaW50SW5mbygnVG9vbGNoYWluIHJlbGVhc2UgKGZyb20gZmlsZSknLCB7IHJlbGVhc2UsIGZpbGU6IHBhdGgucmVzb2x2ZShvcHRpb25zLnRvb2xjaGFpbkZpbGUpIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFJlbW90ZSBwYXRoOiBmZXRjaCBjb25maWcgZnJvbSBwbGF0Zm9ybSBBUEkuIGZldGNoUGlwZWxpbmVQcm9wcyBkb2VzXG4gICAgICAgICAgLy8gdGhlIGZldGNoICsgcGx1Z2luIHByZS1yZXNvbHV0aW9uICsgcmVnaXN0cnkgcHVsbC1ob3N0IGJha2Ug4oCUIHNoYXJlZFxuICAgICAgICAgIC8vIHZlcmJhdGltIHdpdGggYHN5bnRoYCBzbyB0aGUgdHdvIG5ldmVyIGRyaWZ0LlxuICAgICAgICAgIHBsYXRmb3JtQ2xpZW50ID0gYXdhaXQgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jKG9wdGlvbnMpO1xuICAgICAgICAgIHBsYXRmb3JtQ29uZmlnID0gcGxhdGZvcm1DbGllbnQuZ2V0Q29uZmlnKCkgYXMgUGxhdGZvcm1EZXBsb3lDb25maWc7XG5cbiAgICAgICAgICBwcmludEluZm8oJ0ZldGNoaW5nIHBpcGVsaW5lIGNvbmZpZ3VyYXRpb24nLCB7IGlkOiBvcHRpb25zLmlkIH0pO1xuICAgICAgICAgIGNvbnN0IGZldGNoZWQgPSBhd2FpdCBmZXRjaFBpcGVsaW5lUHJvcHMocGxhdGZvcm1DbGllbnQsIG9wdGlvbnMuaWQpO1xuICAgICAgICAgIHBpcGVsaW5lID0gZmV0Y2hlZC5waXBlbGluZTtcbiAgICAgICAgICBwcm9wc1dpdGhJZHMgPSBmZXRjaGVkLnByb3BzV2l0aElkcztcbiAgICAgICAgICBwbHVnaW5XYXJuaW5ncyA9IGZldGNoZWQucGx1Z2luV2FybmluZ3M7XG5cbiAgICAgICAgICBwcmludFN1Y2Nlc3MoJ1BpcGVsaW5lIGNvbmZpZ3VyYXRpb24gcmV0cmlldmVkJyk7XG4gICAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgICAnSUQnOiBwaXBlbGluZS5pZCxcbiAgICAgICAgICAgICdQcm9qZWN0JzogcGlwZWxpbmUucHJvamVjdCxcbiAgICAgICAgICAgICdPcmdhbml6YXRpb24nOiBwaXBlbGluZS5vcmdhbml6YXRpb24sXG4gICAgICAgICAgICAnSXMgRGVmYXVsdCc6IHBpcGVsaW5lLmlzRGVmYXVsdCxcbiAgICAgICAgICAgICdJcyBBY3RpdmUnOiBwaXBlbGluZS5pc0FjdGl2ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC0tc2hvdy1yZXNvbHZlZDogcHJpbnQgcmVzb2x2ZWQgY29uZmlnIGFuZCBleGl0IChubyBDREsgZGVwbG95KVxuICAgICAgICBpZiAoKG9wdGlvbnMgYXMgeyBzaG93UmVzb2x2ZWQ/OiBib29sZWFuIH0pLnNob3dSZXNvbHZlZCkge1xuICAgICAgICAgIGF3YWl0IHByaW50UmVzb2x2ZWRPckV4aXQocHJvcHNXaXRoSWRzKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGVwcyA14oCTOSAoZW5jb2RlIHByb3BzIOKGkiBjZGsgZGVwbG95IOKGkiByZWdpc3RlciBBUk4pIGFyZSBzaGFyZWQgd2l0aFxuICAgICAgICAvLyBgcGlwZWxpbmUgY3JlYXRlIC0tZGVwbG95YCB2aWEgcnVuRGVwbG95IHNvIHRoZSB0d28gbmV2ZXIgZHJpZnQuXG4gICAgICAgIGF3YWl0IHJ1bkRlcGxveSh7XG4gICAgICAgICAgcGlwZWxpbmUsXG4gICAgICAgICAgcHJvcHNXaXRoSWRzLFxuICAgICAgICAgIHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSxcbiAgICAgICAgICByZWdpb246IG9wdGlvbnMucmVnaW9uLFxuICAgICAgICAgIHJlcXVpcmVBcHByb3ZhbDogb3B0aW9ucy5yZXF1aXJlQXBwcm92YWwsXG4gICAgICAgICAgb3V0cHV0OiBvcHRpb25zLm91dHB1dCxcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgLy8gVGhlIHJlZ2lzdHJ5IGNhbGxiYWNrJ3MgY3JlZGVudGlhbDogdGhlIG9wZXJhdG9yJ3Mgb3duLCBvciDigJQgdW5kZXJcbiAgICAgICAgICAvLyAtLXN0b3JlLXRva2VucyDigJQgdGhlIGBwaXBlbGluZS1yZWdpc3RlcmAga2V5LCBuZXZlciB0aGUgcGxhdGZvcm0gb25lLlxuICAgICAgICAgIHBsYXRmb3JtQ2xpZW50OiBwbGF0Zm9ybUNsaWVudCAmJiBhd2FpdCByZXNvbHZlUmVnaXN0cmF0aW9uQ2xpZW50KHtcbiAgICAgICAgICAgIGNsaWVudDogcGxhdGZvcm1DbGllbnQsXG4gICAgICAgICAgICBzdG9yZVRva2Vuczogb3B0aW9ucy5zdG9yZVRva2VucyxcbiAgICAgICAgICAgIG9yZ0lkOiBwaXBlbGluZS5vcmdJZCxcbiAgICAgICAgICAgIHJlZ2lvbjogb3B0aW9ucy5yZWdpb24sXG4gICAgICAgICAgICBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGUsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgcGxhdGZvcm1QaXBlbGluZVVybDogcGxhdGZvcm1Db25maWc/LmFwaS5waXBlbGluZVVybCxcbiAgICAgICAgICBwbGF0Zm9ybUJhc2VVcmw6IHBsYXRmb3JtQ29uZmlnPy5hcGkuYmFzZVVybCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEdyYWRlZCBwbHVnaW4gd2FybmluZ3MgYXJlIHJlcG9ydGVkLCBuZXZlciBlbmZvcmNlZCDigJQgc3VtbWFyaXplIHRoZW1cbiAgICAgICAgLy8gYWZ0ZXIgdGhlIENESyBvdXRwdXQgc28gdGhleSBhcmVuJ3QgbG9zdCBhYm92ZSBpdC5cbiAgICAgICAgcHJpbnRMb29rdXBXYXJuaW5nU3VtbWFyeShwbHVnaW5XYXJuaW5ncyk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6ICdkZXBsb3knLFxuICAgICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgICBwaXBlbGluZUlkOiBvcHRpb25zLmlkLFxuICAgICAgICAgICAgdmVyaWZ5U3NsOiBvcHRpb25zLnZlcmlmeVNzbCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
import fs from 'fs';
|
|
4
4
|
import path from 'path';
|
|
5
|
-
import { PLUGIN_BASE_IMAGES, PLUGIN_CATEGORIES, PLUGIN_COMPUTE_TYPES, PLUGIN_NAME_PATTERN, PLUGIN_SUMMARY_MAX,
|
|
5
|
+
import { PLUGIN_BASE_IMAGES, PLUGIN_CATEGORIES, PLUGIN_COMPUTE_TYPES, PLUGIN_NAME_PATTERN, PLUGIN_SUMMARY_MAX, STEP_PLUGIN_TYPES, isAllowedSpdxId, validateCatalogField, } from '@pipeline-builder/api-core';
|
|
6
6
|
import { Command } from 'commander';
|
|
7
7
|
import { CURATED_ICON_KEYS } from '../config/plugin-catalog-assets.js';
|
|
8
8
|
import { printCommandHeader } from '../utils/command-utils.js';
|
|
@@ -26,8 +26,8 @@ export function resolveScaffoldInput(options, now = new Date()) {
|
|
|
26
26
|
if (!base)
|
|
27
27
|
throw new ValidationError(`--base must be one of: ${PLUGIN_BASE_IMAGES.map(b => b.key).join(', ')} (see --list-bases)`, 'base', options.base);
|
|
28
28
|
const pluginType = options.type ?? 'CodeBuildStep';
|
|
29
|
-
if (!
|
|
30
|
-
throw new ValidationError(`--type must be one of: ${
|
|
29
|
+
if (!STEP_PLUGIN_TYPES.includes(pluginType))
|
|
30
|
+
throw new ValidationError(`--type must be one of: ${STEP_PLUGIN_TYPES.join(', ')}`, 'type', pluginType);
|
|
31
31
|
const computeType = options.compute ?? 'SMALL';
|
|
32
32
|
if (!PLUGIN_COMPUTE_TYPES.includes(computeType))
|
|
33
33
|
throw new ValidationError(`--compute must be one of: ${PLUGIN_COMPUTE_TYPES.join(', ')}`, 'compute', computeType);
|
|
@@ -255,7 +255,7 @@ export function newPlugin(program) {
|
|
|
255
255
|
.option('--license <spdx>', 'SPDX license id', 'Apache-2.0')
|
|
256
256
|
.option('--icon <key>', 'Curated icon key (Official/Verified listings only), or none', 'none')
|
|
257
257
|
.option('--author <name>', 'Copyright holder for LICENSE')
|
|
258
|
-
.option('--type <type>', `Plugin type: ${
|
|
258
|
+
.option('--type <type>', `Plugin type: ${STEP_PLUGIN_TYPES.join(' | ')}`, 'CodeBuildStep')
|
|
259
259
|
.option('--compute <compute>', `Compute type: ${PLUGIN_COMPUTE_TYPES.join(' | ')}`, 'SMALL')
|
|
260
260
|
.option('--dir <path>', 'Target directory (default ./<name>)')
|
|
261
261
|
.option('--force', 'Overwrite an existing directory', false)
|
|
@@ -292,4 +292,4 @@ export function newPlugin(program) {
|
|
|
292
292
|
}
|
|
293
293
|
});
|
|
294
294
|
}
|
|
295
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LXBsdWdpbi5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL25ldy1wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sRUFDTCxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQ2xILGVBQWUsRUFBRSxvQkFBb0IsR0FDdEMsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFpQ2xJLGlDQUFpQztBQUNqQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFZLEVBQVUsRUFBRSxDQUNwRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUV2RiwrREFBK0Q7QUFDL0QsTUFBTSxD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QU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLO2dCQUMzQixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRTthQUNoRCxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7XG4gIFBMVUdJTl9CQVNFX0lNQUdFUywgUExVR0lOX0NBVEVHT1JJRVMsIFBMVUdJTl9DT01QVVRFX1RZUEVTLCBQTFVHSU5fTkFNRV9QQVRURVJOLCBQTFVHSU5fU1VNTUFSWV9NQVgsIFBMVUdJTl9UWVBFUyxcbiAgaXNBbGxvd2VkU3BkeElkLCB2YWxpZGF0ZUNhdGFsb2dGaWVsZCwgdHlwZSBQbHVnaW5CYXNlSW1hZ2UsXG59IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgQ1VSQVRFRF9JQ09OX0tFWVMgfSBmcm9tICcuLi9jb25maWcvcGx1Z2luLWNhdGFsb2ctYXNzZXRzLmpzJztcbmltcG9ydCB7IHByaW50Q29tbWFuZEhlYWRlciB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IHByaW50SW5mbywgcHJpbnRTZWN0aW9uLCBwcmludFN1Y2Nlc3MsIHByaW50V2FybmluZywgZmlsZUV4aXN0cywgZW5zdXJlT3V0cHV0RGlyZWN0b3J5IH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBOZXdQbHVnaW5PcHRpb25zIHtcbiAgbmFtZT86IHN0cmluZztcbiAgY2F0ZWdvcnk/OiBzdHJpbmc7XG4gIGJhc2U/OiBzdHJpbmc7XG4gIHN1bW1hcnk/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBsaWNlbnNlPzogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBhdXRob3I/OiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG4gIGNvbXB1dGU/OiBzdHJpbmc7XG4gIGRpcj86IHN0cmluZztcbiAgZm9yY2U/OiBib29sZWFuO1xuICBsaXN0QmFzZXM/OiBib29sZWFuO1xufVxuXG4vKiogQSB2YWxpZGF0ZWQgc2NhZmZvbGQgcmVxdWVzdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NhZmZvbGRJbnB1dCB7XG4gIG5hbWU6IHN0cmluZztcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAgYmFzZTogUGx1Z2luQmFzZUltYWdlO1xuICBzdW1tYXJ5OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGxpY2Vuc2U6IHN0cmluZztcbiAgaWNvbjogc3RyaW5nIHwgbnVsbDtcbiAgYXV0aG9yOiBzdHJpbmc7XG4gIHBsdWdpblR5cGU6IHN0cmluZztcbiAgY29tcHV0ZVR5cGU6IHN0cmluZztcbiAgeWVhcjogbnVtYmVyO1xufVxuXG4vKiogYG15LWxpbnRlcmAg4oaSIGBNeSBMaW50ZXJgLiAqL1xuZXhwb3J0IGNvbnN0IGRpc3BsYXlOYW1lT2YgPSAobmFtZTogc3RyaW5nKTogc3RyaW5nID0+XG4gIG5hbWUuc3BsaXQoJy0nKS5maWx0ZXIoQm9vbGVhbikubWFwKHcgPT4gd1swXSEudG9VcHBlckNhc2UoKSArIHcuc2xpY2UoMSkpLmpvaW4oJyAnKTtcblxuLyoqIFlBTUwgZG91YmxlLXF1b3RlZCBzY2FsYXIgKEpTT04gc3RyaW5ncyBhcmUgdmFsaWQgWUFNTCkuICovXG5jb25zdCBxID0gKHM6IHN0cmluZyk6IHN0cmluZyA9PiBKU09OLnN0cmluZ2lmeShzKTtcblxuLyoqIFZhbGlkYXRlIHRoZSBmbGFncyBpbnRvIGEgc2NhZmZvbGQgcmVxdWVzdCAodGhyb3dzIFZhbGlkYXRpb25FcnJvcikuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVNjYWZmb2xkSW5wdXQob3B0aW9uczogTmV3UGx1Z2luT3B0aW9ucywgbm93ID0gbmV3IERhdGUoKSk6IFNjYWZmb2xkSW5wdXQge1xuICBjb25zdCBuYW1lID0gb3B0aW9ucy5uYW1lID8/ICcnO1xuICBpZiAoIW5hbWUgfHwgIVBMVUdJTl9OQU1FX1BBVFRFUk4udGVzdChuYW1lKSB8fCBuYW1lLmxlbmd0aCA+IDY0KSB7XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignLS1uYW1lIG11c3QgYmUgMS02NCBsb3dlcmNhc2UgbGV0dGVycywgZGlnaXRzIGFuZCBoeXBoZW5zJywgJ25hbWUnLCBuYW1lKTtcbiAgfVxuICBjb25zdCBjYXRlZ29yeSA9IG9wdGlvbnMuY2F0ZWdvcnkgPz8gJyc7XG4gIGlmICghKFBMVUdJTl9DQVRFR09SSUVTIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyhjYXRlZ29yeSkpIHtcbiAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGAtLWNhdGVnb3J5IG11c3QgYmUgb25lIG9mOiAke1BMVUdJTl9DQVRFR09SSUVTLmpvaW4oJywgJyl9YCwgJ2NhdGVnb3J5JywgY2F0ZWdvcnkpO1xuICB9XG4gIGNvbnN0IGJhc2UgPSBQTFVHSU5fQkFTRV9JTUFHRVMuZmluZChiID0+IGIua2V5ID09PSAob3B0aW9ucy5iYXNlID8/ICdwbHVnaW4nKSk7XG4gIGlmICghYmFzZSkgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgLS1iYXNlIG11c3QgYmUgb25lIG9mOiAke1BMVUdJTl9CQVNFX0lNQUdFUy5tYXAoYiA9PiBiLmtleSkuam9pbignLCAnKX0gKHNlZSAtLWxpc3QtYmFzZXMpYCwgJ2Jhc2UnLCBvcHRpb25zLmJhc2UpO1xuICBjb25zdCBwbHVnaW5UeXBlID0gb3B0aW9ucy50eXBlID8/ICdDb2RlQnVpbGRTdGVwJztcbiAgaWYgKCEoUExVR0lOX1RZUEVTIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyhwbHVnaW5UeXBlKSkgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgLS10eXBlIG11c3QgYmUgb25lIG9mOiAke1BMVUdJTl9UWVBFUy5qb2luKCcsICcpfWAsICd0eXBlJywgcGx1Z2luVHlwZSk7XG4gIGNvbnN0IGNvbXB1dGVUeXBlID0gb3B0aW9ucy5jb21wdXRlID8/ICdTTUFMTCc7XG4gIGlmICghKFBMVUdJTl9DT01QVVRFX1RZUEVTIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyhjb21wdXRlVHlwZSkpIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYC0tY29tcHV0ZSBtdXN0IGJlIG9uZSBvZjogJHtQTFVHSU5fQ09NUFVURV9UWVBFUy5qb2luKCcsICcpfWAsICdjb21wdXRlJywgY29tcHV0ZVR5cGUpO1xuICBjb25zdCBsaWNlbnNlID0gb3B0aW9ucy5saWNlbnNlID8/ICdBcGFjaGUtMi4wJztcbiAgaWYgKCFpc0FsbG93ZWRTcGR4SWQobGljZW5zZSkpIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJy0tbGljZW5zZSBtdXN0IGJlIGEgc3VwcG9ydGVkIFNQRFggaWRlbnRpZmllciAoZS5nLiBBcGFjaGUtMi4wLCBNSVQpJywgJ2xpY2Vuc2UnLCBsaWNlbnNlKTtcbiAgY29uc3QgaWNvbiA9IG9wdGlvbnMuaWNvbiAmJiBvcHRpb25zLmljb24gIT09ICdub25lJyA/IG9wdGlvbnMuaWNvbiA6IG51bGw7XG4gIGlmIChpY29uICE9PSBudWxsICYmICFDVVJBVEVEX0lDT05fS0VZUy5pbmNsdWRlcyhpY29uKSkge1xuICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYC0taWNvbiBtdXN0IGJlIGEgY3VyYXRlZCBrZXkgKCR7Q1VSQVRFRF9JQ09OX0tFWVMuam9pbignLCAnKX0pIG9yIG5vbmVgLCAnaWNvbicsIGljb24pO1xuICB9XG5cbiAgY29uc3QgZGlzcGxheSA9IGRpc3BsYXlOYW1lT2YobmFtZSk7XG4gIGNvbnN0IHN1bW1hcnkgPSBvcHRpb25zLnN1bW1hcnkgPz8gYCR7ZGlzcGxheX0gYXMgYSBwaXBlbGluZSBzdGVwLmA7XG4gIGNvbnN0IGRlc2NyaXB0aW9uID0gb3B0aW9ucy5kZXNjcmlwdGlvblxuICAgID8/IGAke2Rpc3BsYXl9IHJ1bnMgYXMgYSBDb2RlQnVpbGQgc3RlcCBpbiB5b3VyIHBpcGVsaW5lLiBSZXBsYWNlIHRoaXMgd2l0aCB3aGF0IHRoZSBwbHVnaW4gY2hlY2tzIG9yIGJ1aWxkcywgd2hhdCBpdCByZWFkcyBmcm9tIHRoZSB3b3Jrc3BhY2UgYW5kIHdoYXQgaXQgd3JpdGVzLmA7XG4gIGZvciAoY29uc3QgW2ZpZWxkLCB2YWx1ZV0gb2YgW1snc3VtbWFyeScsIHN1bW1hcnldLCBbJ2Rlc2NyaXB0aW9uJywgZGVzY3JpcHRpb25dXSBhcyBjb25zdCkge1xuICAgIGNvbnN0IGNoZWNrZWQgPSB2YWxpZGF0ZUNhdGFsb2dGaWVsZChmaWVsZCwgdmFsdWUpO1xuICAgIGlmICghY2hlY2tlZC5vaykgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgLS0ke2ZpZWxkfSAke2NoZWNrZWQuZXJyb3J9JHtmaWVsZCA9PT0gJ3N1bW1hcnknID8gYCAobWF4ICR7UExVR0lOX1NVTU1BUllfTUFYfSlgIDogJyd9YCwgZmllbGQsIHZhbHVlKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWUsXG4gICAgY2F0ZWdvcnksXG4gICAgYmFzZSxcbiAgICBzdW1tYXJ5LFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIGxpY2Vuc2UsXG4gICAgaWNvbixcbiAgICBwbHVnaW5UeXBlLFxuICAgIGNvbXB1dGVUeXBlLFxuICAgIGF1dGhvcjogb3B0aW9ucy5hdXRob3IgPz8gYFRoZSAke25hbWV9IGF1dGhvcnNgLFxuICAgIHllYXI6IG5vdy5nZXRVVENGdWxsWWVhcigpLFxuICB9O1xufVxuXG5jb25zdCBNSVRfVEVYVCA9ICh5ZWFyOiBudW1iZXIsIGF1dGhvcjogc3RyaW5nKTogc3RyaW5nID0+IGBNSVQgTGljZW5zZVxuXG5Db3B5cmlnaHQgKGMpICR7eWVhcn0gJHthdXRob3J9XG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG5jb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG5JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG5TT0ZUV0FSRS5cbmA7XG5cbi8qKiBMSUNFTlNFOiB0aGUgTUlUIHRleHQgaW4gZnVsbCwgZWxzZSB0aGUgU1BEWCBub3RpY2UgKEFwYWNoZS0yLjAncyBvd24gcmVjb21tZW5kZWQgZm9ybSkuICovXG5leHBvcnQgZnVuY3Rpb24gbGljZW5zZVRleHQoaW5wdXQ6IFBpY2s8U2NhZmZvbGRJbnB1dCwgJ2xpY2Vuc2UnIHwgJ3llYXInIHwgJ2F1dGhvcic+KTogc3RyaW5nIHtcbiAgaWYgKGlucHV0LmxpY2Vuc2UgPT09ICdNSVQnKSByZXR1cm4gTUlUX1RFWFQoaW5wdXQueWVhciwgaW5wdXQuYXV0aG9yKTtcbiAgaWYgKGlucHV0LmxpY2Vuc2UgPT09ICdBcGFjaGUtMi4wJykge1xuICAgIHJldHVybiBgQ29weXJpZ2h0ICR7aW5wdXQueWVhcn0gJHtpbnB1dC5hdXRob3J9XG5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG55b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG5Zb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG5kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG5XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cblNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuYDtcbiAgfVxuICByZXR1cm4gYENvcHlyaWdodCAke2lucHV0LnllYXJ9ICR7aW5wdXQuYXV0aG9yfVxuXG5UaGlzIHBsdWdpbiBpcyBsaWNlbnNlZCB1bmRlciAke2lucHV0LmxpY2Vuc2V9LlxuRnVsbCB0ZXh0OiBodHRwczovL3NwZHgub3JnL2xpY2Vuc2VzLyR7aW5wdXQubGljZW5zZX0uaHRtbFxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogJHtpbnB1dC5saWNlbnNlfVxuYDtcbn1cblxuLyoqIEtleXdvcmRzOiB0aGUgY2F0ZWdvcnkgcGx1cyB0aGUgbmFtZSdzIHdvcmRzICjiiaQgMTAsIGVhY2gg4omkIDMyLCBubyBkdXBsaWNhdGVzKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY2FmZm9sZEtleXdvcmRzKG5hbWU6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFsuLi5uZXcgU2V0KFtjYXRlZ29yeSwgLi4ubmFtZS5zcGxpdCgnLScpXS5maWx0ZXIodyA9PiB3Lmxlbmd0aCA+PSAyICYmIHcubGVuZ3RoIDw9IDMyKSldLnNsaWNlKDAsIDEwKTtcbn1cblxuZnVuY3Rpb24gZG9ja2VyZmlsZVRleHQoaW5wdXQ6IFNjYWZmb2xkSW5wdXQpOiBzdHJpbmcge1xuICBjb25zdCBkaXNwbGF5ID0gZGlzcGxheU5hbWVPZihpbnB1dC5uYW1lKTtcbiAgcmV0dXJuIGAjICR7ZGlzcGxheX0g4oCUICR7aW5wdXQuc3VtbWFyeX1cbiNcbiMgVGhpbiBsYXllciBvdmVyICR7aW5wdXQuYmFzZS5pbWFnZX0gKGRlcGxveS9wbHVnaW5zL19iYXNlLyR7aW5wdXQuYmFzZS5kaXJ9OlxuIyAke2lucHV0LmJhc2UucHJvdmlkZXN9KS4gQWRkIE9OTFkgdGhpcyBwbHVnaW4ncyBvd24gdG9vbCwgcGlubmVkLiBSdWxlc1xuIyAoZGVwbG95L3BsdWdpbnMvUkVBRE1FLm1kLCBlbmZvcmNlZCBieSB0ZXN0LXBsdWdpbnMuc2ggYW5kIFxcYHBsdWdpbiB2YWxpZGF0ZVxcYCk6XG4jICAgLSBldmVyeSBkb3dubG9hZCBnb2VzIHRocm91Z2ggZmV0Y2gtdmVyaWZpZWQgd2l0aCBhIHBpbm5lZCB2ZXJzaW9uIGFuZCBhXG4jICAgICBwaW5uZWQgcGVyLWFyY2hpdGVjdHVyZSBkaWdlc3Q7IG5ldmVyIGEgcm9sbGluZyBVUkwsIG5ldmVyIGN1cmwgfCBzaDtcbiMgICAtIHN3aXRjaCB0byByb290IG9ubHkgZm9yIHRoZSBzdGVwcyB0aGF0IG5lZWQgaXQsIGFuZCBlbmQgYXMgVVNFUiAxMDAwOjEwMDA7XG4jICAgLSBhIHRvb2wgdGhhdCBzaGlwcyBzZXZlcmFsIHZlcnNpb25zIHB1dHMgdGhlbSB1bmRlciAvb3B0Lzx0b29sPi92ZXJzaW9uc1xuIyAgICAgd2l0aCB0aGUgYWN0aXZlIG9uZSBzeW1saW5rZWQgZnJvbSBhIHVpZC0xMDAwLW93bmVkIC9vcHQvPHRvb2w+L2Jpbi5cblxuRlJPTSAke2lucHV0LmJhc2UuaW1hZ2V9XG5cbiMg4pSA4pSA4pSAIFRvb2wgaW5zdGFsbCAodW5jb21tZW50IGFuZCBmaWxsIGluKSDilIDilIDilIBcbiMgVGFrZSBlYWNoIGRpZ2VzdCBmcm9tIHRoZSB2ZW5kb3IncyBwdWJsaXNoZWQgY2hlY2tzdW0gZmlsZS5cbiMgVVNFUiByb290XG4jIEFSRyBUT09MX1ZFUlNJT049MS4yLjNcbiMgQVJHIFRPT0xfU0hBMjU2X0FNRDY0PTxzaGEyNTYgb2YgdGhlIGxpbnV4LWFtZDY0IGFzc2V0PlxuIyBBUkcgVE9PTF9TSEEyNTZfQVJNNjQ9PHNoYTI1NiBvZiB0aGUgbGludXgtYXJtNjQgYXNzZXQ+XG4jIFJVTiBzZXQgLWV1eDsgXFxcXFxuIyAgICAgY2FzZSBcIiQoZHBrZyAtLXByaW50LWFyY2hpdGVjdHVyZSlcIiBpbiBcXFxcXG4jICAgICAgIGFtZDY0KSBhcmNoPWFtZDY0OyBzdW09XCJcXCR7VE9PTF9TSEEyNTZfQU1ENjR9XCIgOzsgXFxcXFxuIyAgICAgICBhcm02NCkgYXJjaD1hcm02NDsgc3VtPVwiXFwke1RPT0xfU0hBMjU2X0FSTTY0fVwiIDs7IFxcXFxcbiMgICAgICAgKikgZWNobyBcInVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZTogJChkcGtnIC0tcHJpbnQtYXJjaGl0ZWN0dXJlKVwiID4mMjsgZXhpdCAxIDs7IFxcXFxcbiMgICAgIGVzYWM7IFxcXFxcbiMgICAgIGZldGNoLXZlcmlmaWVkIFwiaHR0cHM6Ly9leGFtcGxlLmNvbS90b29sL3ZcXCR7VE9PTF9WRVJTSU9OfS90b29sLWxpbnV4LVxcJHthcmNofS50YXIuZ3pcIiBcIiRzdW1cIiAvdG1wL3Rvb2wudGFyLmd6OyBcXFxcXG4jICAgICBpbnN0YWxsIC1kIC9vcHQvdG9vbC9iaW47IFxcXFxcbiMgICAgIHRhciAteHpmIC90bXAvdG9vbC50YXIuZ3ogLUMgL29wdC90b29sL2JpbjsgXFxcXFxuIyAgICAgcm0gLWYgL3RtcC90b29sLnRhci5nejsgXFxcXFxuIyAgICAgY2htb2QgLVIgYStyWCAvb3B0L3Rvb2xcbiMgRU5WIFBBVEg9XCIvb3B0L3Rvb2wvYmluOlxcJHtQQVRIfVwiXG5cbldPUktESVIgL2FwcFxuVVNFUiAxMDAwOjEwMDBcbkNNRCBbXCJiYXNoXCJdXG5gO1xufVxuXG5mdW5jdGlvbiBzcGVjVGV4dChpbnB1dDogU2NhZmZvbGRJbnB1dCk6IHN0cmluZyB7XG4gIGNvbnN0IG91dCA9IGAke2lucHV0Lm5hbWV9LXJlcG9ydHNgO1xuICBjb25zdCBpc0FwcHJvdmFsID0gaW5wdXQucGx1Z2luVHlwZSA9PT0gJ01hbnVhbEFwcHJvdmFsU3RlcCc7XG4gIGNvbnN0IGxpbmVzID0gW1xuICAgIGBuYW1lOiAke2lucHV0Lm5hbWV9YCxcbiAgICBgc3VtbWFyeTogJHtxKGlucHV0LnN1bW1hcnkpfWAsXG4gICAgYGRlc2NyaXB0aW9uOiAke3EoaW5wdXQuZGVzY3JpcHRpb24pfWAsXG4gICAgJ2tleXdvcmRzOicsXG4gICAgLi4uc2NhZmZvbGRLZXl3b3JkcyhpbnB1dC5uYW1lLCBpbnB1dC5jYXRlZ29yeSkubWFwKGsgPT4gYCAgLSAke2t9YCksXG4gICAgYGNhdGVnb3J5OiAke2lucHV0LmNhdGVnb3J5fWAsXG4gICAgJ3ZlcnNpb246IDAuMS4wJyxcbiAgICBgcGx1Z2luVHlwZTogJHtpbnB1dC5wbHVnaW5UeXBlfWAsXG4gICAgYGNvbXB1dGVUeXBlOiAke2lucHV0LmNvbXB1dGVUeXBlfWAsXG4gICAgYHRpbWVvdXQ6ICR7aXNBcHByb3ZhbCA/IDAgOiAxMH1gLFxuICAgICdmYWlsdXJlQmVoYXZpb3I6IGZhaWwnLFxuICAgICdzZWNyZXRzOiBbXScsXG4gIF07XG4gIGlmICghaXNBcHByb3ZhbCkge1xuICAgIGxpbmVzLnB1c2goXG4gICAgICBgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogJHtvdXR9YCxcbiAgICAgICdkb2NrZXJmaWxlOiBEb2NrZXJmaWxlJyxcbiAgICAgICdpbnN0YWxsQ29tbWFuZHM6JyxcbiAgICAgIGAgIC0gbWtkaXIgLXAgJHtvdXR9YCxcbiAgICAgICdjb21tYW5kczonLFxuICAgICAgJyAgIyBSZXBsYWNlIHdpdGggdGhlIHJlYWwgdG9vbCBpbnZvY2F0aW9uLiBydW4tbG9nZ2VkIChmcm9tIHRoZSBiYXNlIGltYWdlKScsXG4gICAgICAnICAjIHN0cmVhbXMgb3V0cHV0IHRvIHRoZSBjb25zb2xlIEFORCB0aGUgbG9nLCBhbmQgZXhpdHMgd2l0aCB0aGUgY29tbWFuZFxcJ3MnLFxuICAgICAgJyAgIyBvd24gc3RhdHVzLCBzbyBhIGZhaWx1cmUgaXMgbmV2ZXIgbWFza2VkLicsXG4gICAgICAnICAtIHwnLFxuICAgICAgJyAgICBzZXQgLWUnLFxuICAgICAgYCAgICBlY2hvIFwiUnVubmluZyAke2lucHV0Lm5hbWV9IGluICQocHdkKVwiYCxcbiAgICAgIGAgICAgcnVuLWxvZ2dlZCAke291dH0vJHtpbnB1dC5uYW1lfS5sb2cgLS0gZWNobyBcIiR7aW5wdXQubmFtZX0gcmFuXCJgLFxuICAgICAgJyMgUnVuIGFnYWluc3QgdGhlIGJ1aWx0IGltYWdlIGJ5IHRlc3QtcGx1Z2lucy5zaCAtLWJ1aWxkIGFuZCBgcGx1Z2luIHRlc3RgLicsXG4gICAgICBgc21va2VUZXN0OiAke3EoaW5wdXQuYmFzZS5zbW9rZVRlc3QpfWAsXG4gICAgKTtcbiAgfVxuICBsaW5lcy5wdXNoKFxuICAgICcnLFxuICAgICcjIOKUgOKUgOKUgCBDYXRhbG9nIG1ldGFkYXRhIOKUgOKUgOKUgCcsXG4gICAgYGxpY2Vuc2U6ICR7aW5wdXQubGljZW5zZX1gLFxuICAgIGlucHV0Lmljb25cbiAgICAgID8gYGljb246ICR7aW5wdXQuaWNvbn0gICMgY3VyYXRlZCBrZXlzIGFyZSBmb3IgT2ZmaWNpYWwgYW5kIFZlcmlmaWVkIGxpc3RpbmdzOyBDb21tdW5pdHkgbGlzdGluZ3MgdXBsb2FkIGFuIGljb25gXG4gICAgICA6ICcjIGljb246IG5vbmUg4oCUIGEgQ29tbXVuaXR5IGxpc3RpbmcgdXBsb2FkcyBhIHJhc3RlciBpY29uIG9yIHNob3dzIGl0cyBtb25vZ3JhbScsXG4gICAgJ2NoYW5nZWxvZzogfCcsXG4gICAgJyAgMC4xLjA6IEluaXRpYWwgcmVsZWFzZS4nLFxuICAgICcnLFxuICApO1xuICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIHJlYWRtZVRleHQoaW5wdXQ6IFNjYWZmb2xkSW5wdXQsIHJlbERpcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgZGlzcGxheSA9IGRpc3BsYXlOYW1lT2YoaW5wdXQubmFtZSk7XG4gIHJldHVybiBgIyAke2Rpc3BsYXl9XG5cbiR7aW5wdXQuZGVzY3JpcHRpb259XG5cbiMjIFVzZSBpdCBpbiBhIHBpcGVsaW5lXG5cblxcYFxcYFxcYHlhbWxcbnN0ZXBzOlxuICAtIHBsdWdpbjogeyBuYW1lOiAke2lucHV0Lm5hbWV9IH1cblxcYFxcYFxcYFxuXG4ke2lucHV0LnBsdWdpblR5cGUgPT09ICdNYW51YWxBcHByb3ZhbFN0ZXAnID8gJycgOiBgVGhlIHN0ZXAgd3JpdGVzIGl0cyByZXN1bHRzIHRvIFxcYCR7aW5wdXQubmFtZX0tcmVwb3J0cy9cXGAgKGl0cyBwcmltYXJ5IG91dHB1dCkuXG5cbmB9IyMgRGV2ZWxvcFxuXG5cXGBcXGBcXGBiYXNoXG5waXBlbGluZS1tYW5hZ2VyIHBsdWdpbiB2YWxpZGF0ZSAtLWRpciAke3JlbERpcn0gICAjIHRoZSBzZXJ2ZXIncyBzY2hlbWEgKyBjYXRhbG9nIHJlcG9ydFxucGlwZWxpbmUtbWFuYWdlciBwbHVnaW4gdGVzdCAtLWRpciAke3JlbERpcn0gLS13b3Jrc3BhY2UgLi9zYW1wbGUtYXBwXG5waXBlbGluZS1tYW5hZ2VyIHBsdWdpbiBwdWJsaXNoIC0tZGlyICR7cmVsRGlyfSAgICAjIHByZS1mbGlnaHQsIGFjY2VwdCBvciBlZGl0IG1ldGFkYXRhLCBzdWJtaXRcblxcYFxcYFxcYFxuXG5UaGUgaW1hZ2UgYnVpbGRzIEZST00gXFxgJHtpbnB1dC5iYXNlLmltYWdlfVxcYDsgYnVpbGQgdGhlIGJhc2VzIGZpcnN0IHdpdGhcblxcYGRlcGxveS9iaW4vYnVpbGQtcGx1Z2luLWltYWdlcy5zaFxcYCwgb3IgcGFzcyBcXGAtLWltYWdlXFxgIHRvIFxcYHBsdWdpbiB0ZXN0XFxgLlxuXG4jIyBMaWNlbnNlXG5cbiR7aW5wdXQubGljZW5zZX0g4oCUIHNlZSBbTElDRU5TRV0oTElDRU5TRSkuXG5gO1xufVxuXG4vKiogRXZlcnkgZmlsZSBvZiBhIG5ldyBwbHVnaW4sIGtleWVkIGJ5IHBhdGggcmVsYXRpdmUgdG8gdGhlIHBsdWdpbiBkaXJlY3RvcnkuICovXG5leHBvcnQgZnVuY3Rpb24gc2NhZmZvbGRGaWxlcyhpbnB1dDogU2NhZmZvbGRJbnB1dCwgcmVsRGlyID0gYC4vJHtpbnB1dC5uYW1lfWApOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgaXNBcHByb3ZhbCA9IGlucHV0LnBsdWdpblR5cGUgPT09ICdNYW51YWxBcHByb3ZhbFN0ZXAnO1xuICBjb25zdCBmaWxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAnY29uZmlnLnlhbWwnOiBpc0FwcHJvdmFsXG4gICAgICA/ICdwbHVnaW5TcGVjOiBwbHVnaW4tc3BlYy55YW1sXFxuYnVpbGRUeXBlOiBtZXRhZGF0YV9vbmx5XFxuJ1xuICAgICAgOiAncGx1Z2luU3BlYzogcGx1Z2luLXNwZWMueWFtbFxcbmJ1aWxkVHlwZTogYnVpbGRfaW1hZ2VcXG5kb2NrZXJmaWxlOiBEb2NrZXJmaWxlXFxuJyxcbiAgICAncGx1Z2luLXNwZWMueWFtbCc6IHNwZWNUZXh0KGlucHV0KSxcbiAgICAnUkVBRE1FLm1kJzogcmVhZG1lVGV4dChpbnB1dCwgcmVsRGlyKSxcbiAgICAnTElDRU5TRSc6IGxpY2Vuc2VUZXh0KGlucHV0KSxcbiAgfTtcbiAgaWYgKCFpc0FwcHJvdmFsKSBmaWxlcy5Eb2NrZXJmaWxlID0gZG9ja2VyZmlsZVRleHQoaW5wdXQpO1xuICByZXR1cm4gZmlsZXM7XG59XG5cbi8qKiBQcmludCB0aGUgYXZhaWxhYmxlIHBsdWdpbiBiYXNlcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludEJhc2VzKCk6IHZvaWQge1xuICBwcmludFNlY3Rpb24oJ1BsdWdpbiBiYXNlIGltYWdlcycsICdkZXBsb3kvcGx1Z2lucy9fYmFzZScpO1xuICBmb3IgKGNvbnN0IGIgb2YgUExVR0lOX0JBU0VfSU1BR0VTKSBjb25zb2xlLmxvZyhgICAke2Iua2V5LnBhZEVuZCg4KX0gJHtiLmltYWdlLnBhZEVuZCgyOCl9ICR7Yi5wcm92aWRlc31gKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciBgcGx1Z2luIG5ld2Ag4oCUIHNjYWZmb2xkIGEgcGx1Z2luIEZST00gYSBgcGx1Z2luLTxlY28+LWJhc2VgIGltYWdlOlxuICogYSBEb2NrZXJmaWxlIHRoYXQgZm9sbG93cyB0aGUgY2F0YWxvZyBydWxlcywgYSBzcGVjIHdpdGggY2F0YWxvZyBtZXRhZGF0YSwgYVxuICogUkVBRE1FLCBhIGNoYW5nZWxvZyBlbnRyeSBhbmQgYSBMSUNFTlNFLiBJdCBwYXNzZXMgYHBsdWdpbiB2YWxpZGF0ZWAgYW5kXG4gKiB0ZXN0LXBsdWdpbnMuc2gncyBzdGF0aWMgY2hlY2tzIGFzIGdlbmVyYXRlZC5cbiAqXG4gKiBVc2FnZTpcbiAqICAgcGlwZWxpbmUtbWFuYWdlciBwbHVnaW4gbmV3IC0tbGlzdC1iYXNlc1xuICogICBwaXBlbGluZS1tYW5hZ2VyIHBsdWdpbiBuZXcgLS1uYW1lIG15LWxpbnRlciAtLWNhdGVnb3J5IHF1YWxpdHkgLS1iYXNlIG5vZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5ld1BsdWdpbihwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZCgnbmV3JylcbiAgICAuZGVzY3JpcHRpb24oJ1NjYWZmb2xkIGEgcGx1Z2luIGZyb20gYSBwbHVnaW4tPGVjbz4tYmFzZSBpbWFnZSAoRG9ja2VyZmlsZSwgc3BlYywgUkVBRE1FLCBMSUNFTlNFKScpXG4gICAgLm9wdGlvbignLS1uYW1lIDxuYW1lPicsICdQbHVnaW4gbmFtZSAobG93ZXJjYXNlIGxldHRlcnMsIGRpZ2l0cywgaHlwaGVucyknKVxuICAgIC5vcHRpb24oJy0tY2F0ZWdvcnkgPGNhdGVnb3J5PicsIGBDYXRlZ29yeTogJHtQTFVHSU5fQ0FURUdPUklFUy5qb2luKCcgfCAnKX1gKVxuICAgIC5vcHRpb24oJy0tYmFzZSA8ZWNvPicsIGBCYXNlIGltYWdlOiAke1BMVUdJTl9CQVNFX0lNQUdFUy5tYXAoYiA9PiBiLmtleSkuam9pbignIHwgJyl9YCwgJ3BsdWdpbicpXG4gICAgLm9wdGlvbignLS1zdW1tYXJ5IDx0ZXh0PicsIGBDYXRhbG9nIG9uZS1saW5lciAo4omkICR7UExVR0lOX1NVTU1BUllfTUFYfSlgKVxuICAgIC5vcHRpb24oJy0tZGVzY3JpcHRpb24gPHRleHQ+JywgJ0NhdGFsb2cgZGVzY3JpcHRpb24nKVxuICAgIC5vcHRpb24oJy0tbGljZW5zZSA8c3BkeD4nLCAnU1BEWCBsaWNlbnNlIGlkJywgJ0FwYWNoZS0yLjAnKVxuICAgIC5vcHRpb24oJy0taWNvbiA8a2V5PicsICdDdXJhdGVkIGljb24ga2V5IChPZmZpY2lhbC9WZXJpZmllZCBsaXN0aW5ncyBvbmx5KSwgb3Igbm9uZScsICdub25lJylcbiAgICAub3B0aW9uKCctLWF1dGhvciA8bmFtZT4nLCAnQ29weXJpZ2h0IGhvbGRlciBmb3IgTElDRU5TRScpXG4gICAgLm9wdGlvbignLS10eXBlIDx0eXBlPicsIGBQbHVnaW4gdHlwZTogJHtQTFVHSU5fVFlQRVMuam9pbignIHwgJyl9YCwgJ0NvZGVCdWlsZFN0ZXAnKVxuICAgIC5vcHRpb24oJy0tY29tcHV0ZSA8Y29tcHV0ZT4nLCBgQ29tcHV0ZSB0eXBlOiAke1BMVUdJTl9DT01QVVRFX1RZUEVTLmpvaW4oJyB8ICcpfWAsICdTTUFMTCcpXG4gICAgLm9wdGlvbignLS1kaXIgPHBhdGg+JywgJ1RhcmdldCBkaXJlY3RvcnkgKGRlZmF1bHQgLi88bmFtZT4pJylcbiAgICAub3B0aW9uKCctLWZvcmNlJywgJ092ZXJ3cml0ZSBhbiBleGlzdGluZyBkaXJlY3RvcnknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLWxpc3QtYmFzZXMnLCAnTGlzdCB0aGUgYXZhaWxhYmxlIGJhc2UgaW1hZ2VzIGFuZCBleGl0JywgZmFsc2UpXG4gICAgLmFjdGlvbigob3B0aW9uczogTmV3UGx1Z2luT3B0aW9ucykgPT4ge1xuICAgICAgaWYgKG9wdGlvbnMubGlzdEJhc2VzKSB7XG4gICAgICAgIHByaW50QmFzZXMoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZXhlY3V0aW9uSWQgPSBwcmludENvbW1hbmRIZWFkZXIoJ05ldyBQbHVnaW4nKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcmVzb2x2ZVNjYWZmb2xkSW5wdXQob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHJlbERpciA9IG9wdGlvbnMuZGlyID8/IGAuLyR7aW5wdXQubmFtZX1gO1xuICAgICAgICBjb25zdCB0YXJnZXREaXIgPSBwYXRoLnJlc29sdmUocmVsRGlyKTtcbiAgICAgICAgaWYgKGZpbGVFeGlzdHModGFyZ2V0RGlyKSAmJiAhb3B0aW9ucy5mb3JjZSkge1xuICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYERpcmVjdG9yeSBhbHJlYWR5IGV4aXN0czogJHt0YXJnZXREaXJ9ICh1c2UgLS1mb3JjZSB0byBvdmVyd3JpdGUpYCk7XG4gICAgICAgIH1cbiAgICAgICAgZW5zdXJlT3V0cHV0RGlyZWN0b3J5KHRhcmdldERpcik7XG4gICAgICAgIGNvbnN0IGZpbGVzID0gc2NhZmZvbGRGaWxlcyhpbnB1dCwgcmVsRGlyKTtcbiAgICAgICAgZm9yIChjb25zdCBbZmlsZSwgY29udGVudF0gb2YgT2JqZWN0LmVudHJpZXMoZmlsZXMpKSBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbih0YXJnZXREaXIsIGZpbGUpLCBjb250ZW50LCAndXRmLTgnKTtcblxuICAgICAgICBpZiAoaW5wdXQuaWNvbikgcHJpbnRXYXJuaW5nKCdDdXJhdGVkIGljb25zIGFyZSByZXNlcnZlZCBmb3IgT2ZmaWNpYWwgbGlzdGluZ3MgYW5kIFZlcmlmaWVkIHB1Ymxpc2hlcnMgd2hvIG93biB0aGUgbWFyazsgYSBDb21tdW5pdHkgbGlzdGluZyB3aXRoIG9uZSBpcyByZWZ1c2VkIGF0IHN1Ym1pdCcpO1xuICAgICAgICBwcmludFNlY3Rpb24oJ1NjYWZmb2xkZWQgcGx1Z2luJywgdGFyZ2V0RGlyKTtcbiAgICAgICAgcHJpbnRJbmZvKCdDcmVhdGVkIGZpbGVzJywgeyBmaWxlczogT2JqZWN0LmtleXMoZmlsZXMpLCBiYXNlOiBpbnB1dC5iYXNlLmltYWdlIH0pO1xuICAgICAgICBwcmludFN1Y2Nlc3MoJ1BsdWdpbiBzY2FmZm9sZCBjcmVhdGVkIOKAlCBuZXh0OiBwbHVnaW4gdmFsaWRhdGUsIHBsdWdpbiB0ZXN0LCBwbHVnaW4gcHVibGlzaCcsIHsgZXhlY3V0aW9uSWQsIGRpcjogdGFyZ2V0RGlyIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVyciwgZXJyIGluc3RhbmNlb2YgVmFsaWRhdGlvbkVycm9yID8gRVJST1JfQ09ERVMuVkFMSURBVElPTiA6IEVSUk9SX0NPREVTLkdFTkVSQUwsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7IGNvbW1hbmQ6ICdwbHVnaW4gbmV3JywgZXhlY3V0aW9uSWQgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG59XG4iXX0=
|
|
295
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LXBsdWdpbi5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL25ldy1wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sRUFDTCxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFDdkgsZUFBZSxFQUFFLG9CQUFvQixHQUN0QyxNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQWlDbEksaUNBQWlDO0FBQ2pDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLElBQVksRUFBVSxFQUFFLENBQ3BELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUUsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRXZGLCtEQUErRDtBQUMvRCxNQUFN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RUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSztnQkFDM0IsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUU7YUFDaEQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQge1xuICBQTFVHSU5fQkFTRV9JTUFHRVMsIFBMVUdJTl9DQVRFR09SSUVTLCBQTFVHSU5fQ09NUFVURV9UWVBFUywgUExVR0lOX05BTUVfUEFUVEVSTiwgUExVR0lOX1NVTU1BUllfTUFYLCBTVEVQX1BMVUdJTl9UWVBFUyxcbiAgaXNBbGxvd2VkU3BkeElkLCB2YWxpZGF0ZUNhdGFsb2dGaWVsZCwgdHlwZSBQbHVnaW5CYXNlSW1hZ2UsXG59IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgQ1VSQVRFRF9JQ09OX0tFWVMgfSBmcm9tICcuLi9jb25maWcvcGx1Z2luLWNhdGFsb2ctYXNzZXRzLmpzJztcbmltcG9ydCB7IHByaW50Q29tbWFuZEhlYWRlciB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IHByaW50SW5mbywgcHJpbnRTZWN0aW9uLCBwcmludFN1Y2Nlc3MsIHByaW50V2FybmluZywgZmlsZUV4aXN0cywgZW5zdXJlT3V0cHV0RGlyZWN0b3J5IH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBOZXdQbHVnaW5PcHRpb25zIHtcbiAgbmFtZT86IHN0cmluZztcbiAgY2F0ZWdvcnk/OiBzdHJpbmc7XG4gIGJhc2U/OiBzdHJpbmc7XG4gIHN1bW1hcnk/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBsaWNlbnNlPzogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBhdXRob3I/OiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG4gIGNvbXB1dGU/OiBzdHJpbmc7XG4gIGRpcj86IHN0cmluZztcbiAgZm9yY2U/OiBib29sZWFuO1xuICBsaXN0QmFzZXM/OiBib29sZWFuO1xufVxuXG4vKiogQSB2YWxpZGF0ZWQgc2NhZmZvbGQgcmVxdWVzdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NhZmZvbGRJbnB1dCB7XG4gIG5hbWU6IHN0cmluZztcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAgYmFzZTogUGx1Z2luQmFzZUltYWdlO1xuICBzdW1tYXJ5OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGxpY2Vuc2U6IHN0cmluZztcbiAgaWNvbjogc3RyaW5nIHwgbnVsbDtcbiAgYXV0aG9yOiBzdHJpbmc7XG4gIHBsdWdpblR5cGU6IHN0cmluZztcbiAgY29tcHV0ZVR5cGU6IHN0cmluZztcbiAgeWVhcjogbnVtYmVyO1xufVxuXG4vKiogYG15LWxpbnRlcmAg4oaSIGBNeSBMaW50ZXJgLiAqL1xuZXhwb3J0IGNvbnN0IGRpc3BsYXlOYW1lT2YgPSAobmFtZTogc3RyaW5nKTogc3RyaW5nID0+XG4gIG5hbWUuc3BsaXQoJy0nKS5maWx0ZXIoQm9vbGVhbikubWFwKHcgPT4gd1swXSEudG9VcHBlckNhc2UoKSArIHcuc2xpY2UoMSkpLmpvaW4oJyAnKTtcblxuLyoqIFlBTUwgZG91YmxlLXF1b3RlZCBzY2FsYXIgKEpTT04gc3RyaW5ncyBhcmUgdmFsaWQgWUFNTCkuICovXG5jb25zdCBxID0gKHM6IHN0cmluZyk6IHN0cmluZyA9PiBKU09OLnN0cmluZ2lmeShzKTtcblxuLyoqIFZhbGlkYXRlIHRoZSBmbGFncyBpbnRvIGEgc2NhZmZvbGQgcmVxdWVzdCAodGhyb3dzIFZhbGlkYXRpb25FcnJvcikuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVNjYWZmb2xkSW5wdXQob3B0aW9uczogTmV3UGx1Z2luT3B0aW9ucywgbm93ID0gbmV3IERhdGUoKSk6IFNjYWZmb2xkSW5wdXQge1xuICBjb25zdCBuYW1lID0gb3B0aW9ucy5uYW1lID8/ICcnO1xuICBpZiAoIW5hbWUgfHwgIVBMVUdJTl9OQU1FX1BBVFRFUk4udGVzdChuYW1lKSB8fCBuYW1lLmxlbmd0aCA+IDY0KSB7XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignLS1uYW1lIG11c3QgYmUgMS02NCBsb3dlcmNhc2UgbGV0dGVycywgZGlnaXRzIGFuZCBoeXBoZW5zJywgJ25hbWUnLCBuYW1lKTtcbiAgfVxuICBjb25zdCBjYXRlZ29yeSA9IG9wdGlvbnMuY2F0ZWdvcnkgPz8gJyc7XG4gIGlmICghKFBMVUdJTl9DQVRFR09SSUVTIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyhjYXRlZ29yeSkpIHtcbiAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGAtLWNhdGVnb3J5IG11c3QgYmUgb25lIG9mOiAke1BMVUdJTl9DQVRFR09SSUVTLmpvaW4oJywgJyl9YCwgJ2NhdGVnb3J5JywgY2F0ZWdvcnkpO1xuICB9XG4gIGNvbnN0IGJhc2UgPSBQTFVHSU5fQkFTRV9JTUFHRVMuZmluZChiID0+IGIua2V5ID09PSAob3B0aW9ucy5iYXNlID8/ICdwbHVnaW4nKSk7XG4gIGlmICghYmFzZSkgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgLS1iYXNlIG11c3QgYmUgb25lIG9mOiAke1BMVUdJTl9CQVNFX0lNQUdFUy5tYXAoYiA9PiBiLmtleSkuam9pbignLCAnKX0gKHNlZSAtLWxpc3QtYmFzZXMpYCwgJ2Jhc2UnLCBvcHRpb25zLmJhc2UpO1xuICBjb25zdCBwbHVnaW5UeXBlID0gb3B0aW9ucy50eXBlID8/ICdDb2RlQnVpbGRTdGVwJztcbiAgaWYgKCEoU1RFUF9QTFVHSU5fVFlQRVMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHBsdWdpblR5cGUpKSB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGAtLXR5cGUgbXVzdCBiZSBvbmUgb2Y6ICR7U1RFUF9QTFVHSU5fVFlQRVMuam9pbignLCAnKX1gLCAndHlwZScsIHBsdWdpblR5cGUpO1xuICBjb25zdCBjb21wdXRlVHlwZSA9IG9wdGlvbnMuY29tcHV0ZSA/PyAnU01BTEwnO1xuICBpZiAoIShQTFVHSU5fQ09NUFVURV9UWVBFUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXMoY29tcHV0ZVR5cGUpKSB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGAtLWNvbXB1dGUgbXVzdCBiZSBvbmUgb2Y6ICR7UExVR0lOX0NPTVBVVEVfVFlQRVMuam9pbignLCAnKX1gLCAnY29tcHV0ZScsIGNvbXB1dGVUeXBlKTtcbiAgY29uc3QgbGljZW5zZSA9IG9wdGlvbnMubGljZW5zZSA/PyAnQXBhY2hlLTIuMCc7XG4gIGlmICghaXNBbGxvd2VkU3BkeElkKGxpY2Vuc2UpKSB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCctLWxpY2Vuc2UgbXVzdCBiZSBhIHN1cHBvcnRlZCBTUERYIGlkZW50aWZpZXIgKGUuZy4gQXBhY2hlLTIuMCwgTUlUKScsICdsaWNlbnNlJywgbGljZW5zZSk7XG4gIGNvbnN0IGljb24gPSBvcHRpb25zLmljb24gJiYgb3B0aW9ucy5pY29uICE9PSAnbm9uZScgPyBvcHRpb25zLmljb24gOiBudWxsO1xuICBpZiAoaWNvbiAhPT0gbnVsbCAmJiAhQ1VSQVRFRF9JQ09OX0tFWVMuaW5jbHVkZXMoaWNvbikpIHtcbiAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGAtLWljb24gbXVzdCBiZSBhIGN1cmF0ZWQga2V5ICgke0NVUkFURURfSUNPTl9LRVlTLmpvaW4oJywgJyl9KSBvciBub25lYCwgJ2ljb24nLCBpY29uKTtcbiAgfVxuXG4gIGNvbnN0IGRpc3BsYXkgPSBkaXNwbGF5TmFtZU9mKG5hbWUpO1xuICBjb25zdCBzdW1tYXJ5ID0gb3B0aW9ucy5zdW1tYXJ5ID8/IGAke2Rpc3BsYXl9IGFzIGEgcGlwZWxpbmUgc3RlcC5gO1xuICBjb25zdCBkZXNjcmlwdGlvbiA9IG9wdGlvbnMuZGVzY3JpcHRpb25cbiAgICA/PyBgJHtkaXNwbGF5fSBydW5zIGFzIGEgQ29kZUJ1aWxkIHN0ZXAgaW4geW91ciBwaXBlbGluZS4gUmVwbGFjZSB0aGlzIHdpdGggd2hhdCB0aGUgcGx1Z2luIGNoZWNrcyBvciBidWlsZHMsIHdoYXQgaXQgcmVhZHMgZnJvbSB0aGUgd29ya3NwYWNlIGFuZCB3aGF0IGl0IHdyaXRlcy5gO1xuICBmb3IgKGNvbnN0IFtmaWVsZCwgdmFsdWVdIG9mIFtbJ3N1bW1hcnknLCBzdW1tYXJ5XSwgWydkZXNjcmlwdGlvbicsIGRlc2NyaXB0aW9uXV0gYXMgY29uc3QpIHtcbiAgICBjb25zdCBjaGVja2VkID0gdmFsaWRhdGVDYXRhbG9nRmllbGQoZmllbGQsIHZhbHVlKTtcbiAgICBpZiAoIWNoZWNrZWQub2spIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYC0tJHtmaWVsZH0gJHtjaGVja2VkLmVycm9yfSR7ZmllbGQgPT09ICdzdW1tYXJ5JyA/IGAgKG1heCAke1BMVUdJTl9TVU1NQVJZX01BWH0pYCA6ICcnfWAsIGZpZWxkLCB2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lLFxuICAgIGNhdGVnb3J5LFxuICAgIGJhc2UsXG4gICAgc3VtbWFyeSxcbiAgICBkZXNjcmlwdGlvbixcbiAgICBsaWNlbnNlLFxuICAgIGljb24sXG4gICAgcGx1Z2luVHlwZSxcbiAgICBjb21wdXRlVHlwZSxcbiAgICBhdXRob3I6IG9wdGlvbnMuYXV0aG9yID8/IGBUaGUgJHtuYW1lfSBhdXRob3JzYCxcbiAgICB5ZWFyOiBub3cuZ2V0VVRDRnVsbFllYXIoKSxcbiAgfTtcbn1cblxuY29uc3QgTUlUX1RFWFQgPSAoeWVhcjogbnVtYmVyLCBhdXRob3I6IHN0cmluZyk6IHN0cmluZyA9PiBgTUlUIExpY2Vuc2VcblxuQ29weXJpZ2h0IChjKSAke3llYXJ9ICR7YXV0aG9yfVxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuU09GVFdBUkUuXG5gO1xuXG4vKiogTElDRU5TRTogdGhlIE1JVCB0ZXh0IGluIGZ1bGwsIGVsc2UgdGhlIFNQRFggbm90aWNlIChBcGFjaGUtMi4wJ3Mgb3duIHJlY29tbWVuZGVkIGZvcm0pLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpY2Vuc2VUZXh0KGlucHV0OiBQaWNrPFNjYWZmb2xkSW5wdXQsICdsaWNlbnNlJyB8ICd5ZWFyJyB8ICdhdXRob3InPik6IHN0cmluZyB7XG4gIGlmIChpbnB1dC5saWNlbnNlID09PSAnTUlUJykgcmV0dXJuIE1JVF9URVhUKGlucHV0LnllYXIsIGlucHV0LmF1dGhvcik7XG4gIGlmIChpbnB1dC5saWNlbnNlID09PSAnQXBhY2hlLTIuMCcpIHtcbiAgICByZXR1cm4gYENvcHlyaWdodCAke2lucHV0LnllYXJ9ICR7aW5wdXQuYXV0aG9yfVxuXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xueW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG5TZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG5saW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbmA7XG4gIH1cbiAgcmV0dXJuIGBDb3B5cmlnaHQgJHtpbnB1dC55ZWFyfSAke2lucHV0LmF1dGhvcn1cblxuVGhpcyBwbHVnaW4gaXMgbGljZW5zZWQgdW5kZXIgJHtpbnB1dC5saWNlbnNlfS5cbkZ1bGwgdGV4dDogaHR0cHM6Ly9zcGR4Lm9yZy9saWNlbnNlcy8ke2lucHV0LmxpY2Vuc2V9Lmh0bWxcblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6ICR7aW5wdXQubGljZW5zZX1cbmA7XG59XG5cbi8qKiBLZXl3b3JkczogdGhlIGNhdGVnb3J5IHBsdXMgdGhlIG5hbWUncyB3b3JkcyAo4omkIDEwLCBlYWNoIOKJpCAzMiwgbm8gZHVwbGljYXRlcykuICovXG5leHBvcnQgZnVuY3Rpb24gc2NhZmZvbGRLZXl3b3JkcyhuYW1lOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbLi4ubmV3IFNldChbY2F0ZWdvcnksIC4uLm5hbWUuc3BsaXQoJy0nKV0uZmlsdGVyKHcgPT4gdy5sZW5ndGggPj0gMiAmJiB3Lmxlbmd0aCA8PSAzMikpXS5zbGljZSgwLCAxMCk7XG59XG5cbmZ1bmN0aW9uIGRvY2tlcmZpbGVUZXh0KGlucHV0OiBTY2FmZm9sZElucHV0KTogc3RyaW5nIHtcbiAgY29uc3QgZGlzcGxheSA9IGRpc3BsYXlOYW1lT2YoaW5wdXQubmFtZSk7XG4gIHJldHVybiBgIyAke2Rpc3BsYXl9IOKAlCAke2lucHV0LnN1bW1hcnl9XG4jXG4jIFRoaW4gbGF5ZXIgb3ZlciAke2lucHV0LmJhc2UuaW1hZ2V9IChkZXBsb3kvcGx1Z2lucy9fYmFzZS8ke2lucHV0LmJhc2UuZGlyfTpcbiMgJHtpbnB1dC5iYXNlLnByb3ZpZGVzfSkuIEFkZCBPTkxZIHRoaXMgcGx1Z2luJ3Mgb3duIHRvb2wsIHBpbm5lZC4gUnVsZXNcbiMgKGRlcGxveS9wbHVnaW5zL1JFQURNRS5tZCwgZW5mb3JjZWQgYnkgdGVzdC1wbHVnaW5zLnNoIGFuZCBcXGBwbHVnaW4gdmFsaWRhdGVcXGApOlxuIyAgIC0gZXZlcnkgZG93bmxvYWQgZ29lcyB0aHJvdWdoIGZldGNoLXZlcmlmaWVkIHdpdGggYSBwaW5uZWQgdmVyc2lvbiBhbmQgYVxuIyAgICAgcGlubmVkIHBlci1hcmNoaXRlY3R1cmUgZGlnZXN0OyBuZXZlciBhIHJvbGxpbmcgVVJMLCBuZXZlciBjdXJsIHwgc2g7XG4jICAgLSBzd2l0Y2ggdG8gcm9vdCBvbmx5IGZvciB0aGUgc3RlcHMgdGhhdCBuZWVkIGl0LCBhbmQgZW5kIGFzIFVTRVIgMTAwMDoxMDAwO1xuIyAgIC0gYSB0b29sIHRoYXQgc2hpcHMgc2V2ZXJhbCB2ZXJzaW9ucyBwdXRzIHRoZW0gdW5kZXIgL29wdC88dG9vbD4vdmVyc2lvbnNcbiMgICAgIHdpdGggdGhlIGFjdGl2ZSBvbmUgc3ltbGlua2VkIGZyb20gYSB1aWQtMTAwMC1vd25lZCAvb3B0Lzx0b29sPi9iaW4uXG5cbkZST00gJHtpbnB1dC5iYXNlLmltYWdlfVxuXG4jIOKUgOKUgOKUgCBUb29sIGluc3RhbGwgKHVuY29tbWVudCBhbmQgZmlsbCBpbikg4pSA4pSA4pSAXG4jIFRha2UgZWFjaCBkaWdlc3QgZnJvbSB0aGUgdmVuZG9yJ3MgcHVibGlzaGVkIGNoZWNrc3VtIGZpbGUuXG4jIFVTRVIgcm9vdFxuIyBBUkcgVE9PTF9WRVJTSU9OPTEuMi4zXG4jIEFSRyBUT09MX1NIQTI1Nl9BTUQ2ND08c2hhMjU2IG9mIHRoZSBsaW51eC1hbWQ2NCBhc3NldD5cbiMgQVJHIFRPT0xfU0hBMjU2X0FSTTY0PTxzaGEyNTYgb2YgdGhlIGxpbnV4LWFybTY0IGFzc2V0PlxuIyBSVU4gc2V0IC1ldXg7IFxcXFxcbiMgICAgIGNhc2UgXCIkKGRwa2cgLS1wcmludC1hcmNoaXRlY3R1cmUpXCIgaW4gXFxcXFxuIyAgICAgICBhbWQ2NCkgYXJjaD1hbWQ2NDsgc3VtPVwiXFwke1RPT0xfU0hBMjU2X0FNRDY0fVwiIDs7IFxcXFxcbiMgICAgICAgYXJtNjQpIGFyY2g9YXJtNjQ7IHN1bT1cIlxcJHtUT09MX1NIQTI1Nl9BUk02NH1cIiA7OyBcXFxcXG4jICAgICAgICopIGVjaG8gXCJ1bnN1cHBvcnRlZCBhcmNoaXRlY3R1cmU6ICQoZHBrZyAtLXByaW50LWFyY2hpdGVjdHVyZSlcIiA+JjI7IGV4aXQgMSA7OyBcXFxcXG4jICAgICBlc2FjOyBcXFxcXG4jICAgICBmZXRjaC12ZXJpZmllZCBcImh0dHBzOi8vZXhhbXBsZS5jb20vdG9vbC92XFwke1RPT0xfVkVSU0lPTn0vdG9vbC1saW51eC1cXCR7YXJjaH0udGFyLmd6XCIgXCIkc3VtXCIgL3RtcC90b29sLnRhci5nejsgXFxcXFxuIyAgICAgaW5zdGFsbCAtZCAvb3B0L3Rvb2wvYmluOyBcXFxcXG4jICAgICB0YXIgLXh6ZiAvdG1wL3Rvb2wudGFyLmd6IC1DIC9vcHQvdG9vbC9iaW47IFxcXFxcbiMgICAgIHJtIC1mIC90bXAvdG9vbC50YXIuZ3o7IFxcXFxcbiMgICAgIGNobW9kIC1SIGErclggL29wdC90b29sXG4jIEVOViBQQVRIPVwiL29wdC90b29sL2JpbjpcXCR7UEFUSH1cIlxuXG5XT1JLRElSIC9hcHBcblVTRVIgMTAwMDoxMDAwXG5DTUQgW1wiYmFzaFwiXVxuYDtcbn1cblxuZnVuY3Rpb24gc3BlY1RleHQoaW5wdXQ6IFNjYWZmb2xkSW5wdXQpOiBzdHJpbmcge1xuICBjb25zdCBvdXQgPSBgJHtpbnB1dC5uYW1lfS1yZXBvcnRzYDtcbiAgY29uc3QgaXNBcHByb3ZhbCA9IGlucHV0LnBsdWdpblR5cGUgPT09ICdNYW51YWxBcHByb3ZhbFN0ZXAnO1xuICBjb25zdCBsaW5lcyA9IFtcbiAgICBgbmFtZTogJHtpbnB1dC5uYW1lfWAsXG4gICAgYHN1bW1hcnk6ICR7cShpbnB1dC5zdW1tYXJ5KX1gLFxuICAgIGBkZXNjcmlwdGlvbjogJHtxKGlucHV0LmRlc2NyaXB0aW9uKX1gLFxuICAgICdrZXl3b3JkczonLFxuICAgIC4uLnNjYWZmb2xkS2V5d29yZHMoaW5wdXQubmFtZSwgaW5wdXQuY2F0ZWdvcnkpLm1hcChrID0+IGAgIC0gJHtrfWApLFxuICAgIGBjYXRlZ29yeTogJHtpbnB1dC5jYXRlZ29yeX1gLFxuICAgICd2ZXJzaW9uOiAwLjEuMCcsXG4gICAgYHBsdWdpblR5cGU6ICR7aW5wdXQucGx1Z2luVHlwZX1gLFxuICAgIGBjb21wdXRlVHlwZTogJHtpbnB1dC5jb21wdXRlVHlwZX1gLFxuICAgIGB0aW1lb3V0OiAke2lzQXBwcm92YWwgPyAwIDogMTB9YCxcbiAgICAnZmFpbHVyZUJlaGF2aW9yOiBmYWlsJyxcbiAgICAnc2VjcmV0czogW10nLFxuICBdO1xuICBpZiAoIWlzQXBwcm92YWwpIHtcbiAgICBsaW5lcy5wdXNoKFxuICAgICAgYHByaW1hcnlPdXRwdXREaXJlY3Rvcnk6ICR7b3V0fWAsXG4gICAgICAnZG9ja2VyZmlsZTogRG9ja2VyZmlsZScsXG4gICAgICAnaW5zdGFsbENvbW1hbmRzOicsXG4gICAgICBgICAtIG1rZGlyIC1wICR7b3V0fWAsXG4gICAgICAnY29tbWFuZHM6JyxcbiAgICAgICcgICMgUmVwbGFjZSB3aXRoIHRoZSByZWFsIHRvb2wgaW52b2NhdGlvbi4gcnVuLWxvZ2dlZCAoZnJvbSB0aGUgYmFzZSBpbWFnZSknLFxuICAgICAgJyAgIyBzdHJlYW1zIG91dHB1dCB0byB0aGUgY29uc29sZSBBTkQgdGhlIGxvZywgYW5kIGV4aXRzIHdpdGggdGhlIGNvbW1hbmRcXCdzJyxcbiAgICAgICcgICMgb3duIHN0YXR1cywgc28gYSBmYWlsdXJlIGlzIG5ldmVyIG1hc2tlZC4nLFxuICAgICAgJyAgLSB8JyxcbiAgICAgICcgICAgc2V0IC1lJyxcbiAgICAgIGAgICAgZWNobyBcIlJ1bm5pbmcgJHtpbnB1dC5uYW1lfSBpbiAkKHB3ZClcImAsXG4gICAgICBgICAgIHJ1bi1sb2dnZWQgJHtvdXR9LyR7aW5wdXQubmFtZX0ubG9nIC0tIGVjaG8gXCIke2lucHV0Lm5hbWV9IHJhblwiYCxcbiAgICAgICcjIFJ1biBhZ2FpbnN0IHRoZSBidWlsdCBpbWFnZSBieSB0ZXN0LXBsdWdpbnMuc2ggLS1idWlsZCBhbmQgYHBsdWdpbiB0ZXN0YC4nLFxuICAgICAgYHNtb2tlVGVzdDogJHtxKGlucHV0LmJhc2Uuc21va2VUZXN0KX1gLFxuICAgICk7XG4gIH1cbiAgbGluZXMucHVzaChcbiAgICAnJyxcbiAgICAnIyDilIDilIDilIAgQ2F0YWxvZyBtZXRhZGF0YSDilIDilIDilIAnLFxuICAgIGBsaWNlbnNlOiAke2lucHV0LmxpY2Vuc2V9YCxcbiAgICBpbnB1dC5pY29uXG4gICAgICA/IGBpY29uOiAke2lucHV0Lmljb259ICAjIGN1cmF0ZWQga2V5cyBhcmUgZm9yIE9mZmljaWFsIGFuZCBWZXJpZmllZCBsaXN0aW5nczsgQ29tbXVuaXR5IGxpc3RpbmdzIHVwbG9hZCBhbiBpY29uYFxuICAgICAgOiAnIyBpY29uOiBub25lIOKAlCBhIENvbW11bml0eSBsaXN0aW5nIHVwbG9hZHMgYSByYXN0ZXIgaWNvbiBvciBzaG93cyBpdHMgbW9ub2dyYW0nLFxuICAgICdjaGFuZ2Vsb2c6IHwnLFxuICAgICcgIDAuMS4wOiBJbml0aWFsIHJlbGVhc2UuJyxcbiAgICAnJyxcbiAgKTtcbiAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiByZWFkbWVUZXh0KGlucHV0OiBTY2FmZm9sZElucHV0LCByZWxEaXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGRpc3BsYXkgPSBkaXNwbGF5TmFtZU9mKGlucHV0Lm5hbWUpO1xuICByZXR1cm4gYCMgJHtkaXNwbGF5fVxuXG4ke2lucHV0LmRlc2NyaXB0aW9ufVxuXG4jIyBVc2UgaXQgaW4gYSBwaXBlbGluZVxuXG5cXGBcXGBcXGB5YW1sXG5zdGVwczpcbiAgLSBwbHVnaW46IHsgbmFtZTogJHtpbnB1dC5uYW1lfSB9XG5cXGBcXGBcXGBcblxuJHtpbnB1dC5wbHVnaW5UeXBlID09PSAnTWFudWFsQXBwcm92YWxTdGVwJyA/ICcnIDogYFRoZSBzdGVwIHdyaXRlcyBpdHMgcmVzdWx0cyB0byBcXGAke2lucHV0Lm5hbWV9LXJlcG9ydHMvXFxgIChpdHMgcHJpbWFyeSBvdXRwdXQpLlxuXG5gfSMjIERldmVsb3BcblxuXFxgXFxgXFxgYmFzaFxucGlwZWxpbmUtbWFuYWdlciBwbHVnaW4gdmFsaWRhdGUgLS1kaXIgJHtyZWxEaXJ9ICAgIyB0aGUgc2VydmVyJ3Mgc2NoZW1hICsgY2F0YWxvZyByZXBvcnRcbnBpcGVsaW5lLW1hbmFnZXIgcGx1Z2luIHRlc3QgLS1kaXIgJHtyZWxEaXJ9IC0td29ya3NwYWNlIC4vc2FtcGxlLWFwcFxucGlwZWxpbmUtbWFuYWdlciBwbHVnaW4gcHVibGlzaCAtLWRpciAke3JlbERpcn0gICAgIyBwcmUtZmxpZ2h0LCBhY2NlcHQgb3IgZWRpdCBtZXRhZGF0YSwgc3VibWl0XG5cXGBcXGBcXGBcblxuVGhlIGltYWdlIGJ1aWxkcyBGUk9NIFxcYCR7aW5wdXQuYmFzZS5pbWFnZX1cXGA7IGJ1aWxkIHRoZSBiYXNlcyBmaXJzdCB3aXRoXG5cXGBkZXBsb3kvYmluL2J1aWxkLXBsdWdpbi1pbWFnZXMuc2hcXGAsIG9yIHBhc3MgXFxgLS1pbWFnZVxcYCB0byBcXGBwbHVnaW4gdGVzdFxcYC5cblxuIyMgTGljZW5zZVxuXG4ke2lucHV0LmxpY2Vuc2V9IOKAlCBzZWUgW0xJQ0VOU0VdKExJQ0VOU0UpLlxuYDtcbn1cblxuLyoqIEV2ZXJ5IGZpbGUgb2YgYSBuZXcgcGx1Z2luLCBrZXllZCBieSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBwbHVnaW4gZGlyZWN0b3J5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNjYWZmb2xkRmlsZXMoaW5wdXQ6IFNjYWZmb2xkSW5wdXQsIHJlbERpciA9IGAuLyR7aW5wdXQubmFtZX1gKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IGlzQXBwcm92YWwgPSBpbnB1dC5wbHVnaW5UeXBlID09PSAnTWFudWFsQXBwcm92YWxTdGVwJztcbiAgY29uc3QgZmlsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgJ2NvbmZpZy55YW1sJzogaXNBcHByb3ZhbFxuICAgICAgPyAncGx1Z2luU3BlYzogcGx1Z2luLXNwZWMueWFtbFxcbmJ1aWxkVHlwZTogbWV0YWRhdGFfb25seVxcbidcbiAgICAgIDogJ3BsdWdpblNwZWM6IHBsdWdpbi1zcGVjLnlhbWxcXG5idWlsZFR5cGU6IGJ1aWxkX2ltYWdlXFxuZG9ja2VyZmlsZTogRG9ja2VyZmlsZVxcbicsXG4gICAgJ3BsdWdpbi1zcGVjLnlhbWwnOiBzcGVjVGV4dChpbnB1dCksXG4gICAgJ1JFQURNRS5tZCc6IHJlYWRtZVRleHQoaW5wdXQsIHJlbERpciksXG4gICAgJ0xJQ0VOU0UnOiBsaWNlbnNlVGV4dChpbnB1dCksXG4gIH07XG4gIGlmICghaXNBcHByb3ZhbCkgZmlsZXMuRG9ja2VyZmlsZSA9IGRvY2tlcmZpbGVUZXh0KGlucHV0KTtcbiAgcmV0dXJuIGZpbGVzO1xufVxuXG4vKiogUHJpbnQgdGhlIGF2YWlsYWJsZSBwbHVnaW4gYmFzZXMuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRCYXNlcygpOiB2b2lkIHtcbiAgcHJpbnRTZWN0aW9uKCdQbHVnaW4gYmFzZSBpbWFnZXMnLCAnZGVwbG95L3BsdWdpbnMvX2Jhc2UnKTtcbiAgZm9yIChjb25zdCBiIG9mIFBMVUdJTl9CQVNFX0lNQUdFUykgY29uc29sZS5sb2coYCAgJHtiLmtleS5wYWRFbmQoOCl9ICR7Yi5pbWFnZS5wYWRFbmQoMjgpfSAke2IucHJvdmlkZXN9YCk7XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgYHBsdWdpbiBuZXdgIOKAlCBzY2FmZm9sZCBhIHBsdWdpbiBGUk9NIGEgYHBsdWdpbi08ZWNvPi1iYXNlYCBpbWFnZTpcbiAqIGEgRG9ja2VyZmlsZSB0aGF0IGZvbGxvd3MgdGhlIGNhdGFsb2cgcnVsZXMsIGEgc3BlYyB3aXRoIGNhdGFsb2cgbWV0YWRhdGEsIGFcbiAqIFJFQURNRSwgYSBjaGFuZ2Vsb2cgZW50cnkgYW5kIGEgTElDRU5TRS4gSXQgcGFzc2VzIGBwbHVnaW4gdmFsaWRhdGVgIGFuZFxuICogdGVzdC1wbHVnaW5zLnNoJ3Mgc3RhdGljIGNoZWNrcyBhcyBnZW5lcmF0ZWQuXG4gKlxuICogVXNhZ2U6XG4gKiAgIHBpcGVsaW5lLW1hbmFnZXIgcGx1Z2luIG5ldyAtLWxpc3QtYmFzZXNcbiAqICAgcGlwZWxpbmUtbWFuYWdlciBwbHVnaW4gbmV3IC0tbmFtZSBteS1saW50ZXIgLS1jYXRlZ29yeSBxdWFsaXR5IC0tYmFzZSBub2RlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuZXdQbHVnaW4ocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoJ25ldycpXG4gICAgLmRlc2NyaXB0aW9uKCdTY2FmZm9sZCBhIHBsdWdpbiBmcm9tIGEgcGx1Z2luLTxlY28+LWJhc2UgaW1hZ2UgKERvY2tlcmZpbGUsIHNwZWMsIFJFQURNRSwgTElDRU5TRSknKVxuICAgIC5vcHRpb24oJy0tbmFtZSA8bmFtZT4nLCAnUGx1Z2luIG5hbWUgKGxvd2VyY2FzZSBsZXR0ZXJzLCBkaWdpdHMsIGh5cGhlbnMpJylcbiAgICAub3B0aW9uKCctLWNhdGVnb3J5IDxjYXRlZ29yeT4nLCBgQ2F0ZWdvcnk6ICR7UExVR0lOX0NBVEVHT1JJRVMuam9pbignIHwgJyl9YClcbiAgICAub3B0aW9uKCctLWJhc2UgPGVjbz4nLCBgQmFzZSBpbWFnZTogJHtQTFVHSU5fQkFTRV9JTUFHRVMubWFwKGIgPT4gYi5rZXkpLmpvaW4oJyB8ICcpfWAsICdwbHVnaW4nKVxuICAgIC5vcHRpb24oJy0tc3VtbWFyeSA8dGV4dD4nLCBgQ2F0YWxvZyBvbmUtbGluZXIgKOKJpCAke1BMVUdJTl9TVU1NQVJZX01BWH0pYClcbiAgICAub3B0aW9uKCctLWRlc2NyaXB0aW9uIDx0ZXh0PicsICdDYXRhbG9nIGRlc2NyaXB0aW9uJylcbiAgICAub3B0aW9uKCctLWxpY2Vuc2UgPHNwZHg+JywgJ1NQRFggbGljZW5zZSBpZCcsICdBcGFjaGUtMi4wJylcbiAgICAub3B0aW9uKCctLWljb24gPGtleT4nLCAnQ3VyYXRlZCBpY29uIGtleSAoT2ZmaWNpYWwvVmVyaWZpZWQgbGlzdGluZ3Mgb25seSksIG9yIG5vbmUnLCAnbm9uZScpXG4gICAgLm9wdGlvbignLS1hdXRob3IgPG5hbWU+JywgJ0NvcHlyaWdodCBob2xkZXIgZm9yIExJQ0VOU0UnKVxuICAgIC5vcHRpb24oJy0tdHlwZSA8dHlwZT4nLCBgUGx1Z2luIHR5cGU6ICR7U1RFUF9QTFVHSU5fVFlQRVMuam9pbignIHwgJyl9YCwgJ0NvZGVCdWlsZFN0ZXAnKVxuICAgIC5vcHRpb24oJy0tY29tcHV0ZSA8Y29tcHV0ZT4nLCBgQ29tcHV0ZSB0eXBlOiAke1BMVUdJTl9DT01QVVRFX1RZUEVTLmpvaW4oJyB8ICcpfWAsICdTTUFMTCcpXG4gICAgLm9wdGlvbignLS1kaXIgPHBhdGg+JywgJ1RhcmdldCBkaXJlY3RvcnkgKGRlZmF1bHQgLi88bmFtZT4pJylcbiAgICAub3B0aW9uKCctLWZvcmNlJywgJ092ZXJ3cml0ZSBhbiBleGlzdGluZyBkaXJlY3RvcnknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLWxpc3QtYmFzZXMnLCAnTGlzdCB0aGUgYXZhaWxhYmxlIGJhc2UgaW1hZ2VzIGFuZCBleGl0JywgZmFsc2UpXG4gICAgLmFjdGlvbigob3B0aW9uczogTmV3UGx1Z2luT3B0aW9ucykgPT4ge1xuICAgICAgaWYgKG9wdGlvbnMubGlzdEJhc2VzKSB7XG4gICAgICAgIHByaW50QmFzZXMoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZXhlY3V0aW9uSWQgPSBwcmludENvbW1hbmRIZWFkZXIoJ05ldyBQbHVnaW4nKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcmVzb2x2ZVNjYWZmb2xkSW5wdXQob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHJlbERpciA9IG9wdGlvbnMuZGlyID8/IGAuLyR7aW5wdXQubmFtZX1gO1xuICAgICAgICBjb25zdCB0YXJnZXREaXIgPSBwYXRoLnJlc29sdmUocmVsRGlyKTtcbiAgICAgICAgaWYgKGZpbGVFeGlzdHModGFyZ2V0RGlyKSAmJiAhb3B0aW9ucy5mb3JjZSkge1xuICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYERpcmVjdG9yeSBhbHJlYWR5IGV4aXN0czogJHt0YXJnZXREaXJ9ICh1c2UgLS1mb3JjZSB0byBvdmVyd3JpdGUpYCk7XG4gICAgICAgIH1cbiAgICAgICAgZW5zdXJlT3V0cHV0RGlyZWN0b3J5KHRhcmdldERpcik7XG4gICAgICAgIGNvbnN0IGZpbGVzID0gc2NhZmZvbGRGaWxlcyhpbnB1dCwgcmVsRGlyKTtcbiAgICAgICAgZm9yIChjb25zdCBbZmlsZSwgY29udGVudF0gb2YgT2JqZWN0LmVudHJpZXMoZmlsZXMpKSBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbih0YXJnZXREaXIsIGZpbGUpLCBjb250ZW50LCAndXRmLTgnKTtcblxuICAgICAgICBpZiAoaW5wdXQuaWNvbikgcHJpbnRXYXJuaW5nKCdDdXJhdGVkIGljb25zIGFyZSByZXNlcnZlZCBmb3IgT2ZmaWNpYWwgbGlzdGluZ3MgYW5kIFZlcmlmaWVkIHB1Ymxpc2hlcnMgd2hvIG93biB0aGUgbWFyazsgYSBDb21tdW5pdHkgbGlzdGluZyB3aXRoIG9uZSBpcyByZWZ1c2VkIGF0IHN1Ym1pdCcpO1xuICAgICAgICBwcmludFNlY3Rpb24oJ1NjYWZmb2xkZWQgcGx1Z2luJywgdGFyZ2V0RGlyKTtcbiAgICAgICAgcHJpbnRJbmZvKCdDcmVhdGVkIGZpbGVzJywgeyBmaWxlczogT2JqZWN0LmtleXMoZmlsZXMpLCBiYXNlOiBpbnB1dC5iYXNlLmltYWdlIH0pO1xuICAgICAgICBwcmludFN1Y2Nlc3MoJ1BsdWdpbiBzY2FmZm9sZCBjcmVhdGVkIOKAlCBuZXh0OiBwbHVnaW4gdmFsaWRhdGUsIHBsdWdpbiB0ZXN0LCBwbHVnaW4gcHVibGlzaCcsIHsgZXhlY3V0aW9uSWQsIGRpcjogdGFyZ2V0RGlyIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVyciwgZXJyIGluc3RhbmNlb2YgVmFsaWRhdGlvbkVycm9yID8gRVJST1JfQ09ERVMuVkFMSURBVElPTiA6IEVSUk9SX0NPREVTLkdFTkVSQUwsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7IGNvbW1hbmQ6ICdwbHVnaW4gbmV3JywgZXhlY3V0aW9uSWQgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG59XG4iXX0=
|