@aws-cdk-testing/cli-integ 3.27.2 → 3.28.0
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/lib/cli/run-suite.js +9 -1
- package/lib/process.js +5 -2
- package/lib/regions.d.ts +1 -0
- package/lib/regions.js +45 -0
- package/lib/with-aws.js +4 -1
- package/lib/with-sam.js +2 -2
- package/npm-shrinkwrap.json +411 -324
- package/package.json +23 -23
- package/resources/integ.jest.config.js +0 -8
- package/tests/cli-integ-tests/bootstrap/cdk-bootstrap-a-customized-template-vendor-will-not-overwrite-the-default-template.integtest.js +1 -2
- package/tests/cli-integ-tests/bootstrap/cdk-bootstrap-add-tags.integtest.js +1 -2
- package/tests/cli-integ-tests/bootstrap/cdk-bootstrap-can-add-tags-then-update-tags-during-re-bootstrap.integtest.js +1 -2
- package/tests/cli-integ-tests/bootstrap/cdk-bootstrap-can-and-deploy-if-omitting-execution-policies.integtest.js +1 -2
- package/tests/cli-integ-tests/bootstrap/cdk-bootstrap-can-bootstrap-without-execution.integtest.js +1 -2
- package/tests/cli-integ-tests/bootstrap/cdk-bootstrap-can-create-a-legacy-bootstrap-stack-with---public-access-block-configuration-false.integtest.js +1 -2
- package/tests/cli-integ-tests/bootstrap/cdk-bootstrap-can-create-multiple-legacy-bootstrap-stacks.integtest.js +1 -2
- package/tests/cli-integ-tests/bootstrap/cdk-bootstrap-can-deploy-modern-synthesized-stack-even-if-bootstrap-stack-name-is-unknown.integtest.js +1 -2
- package/tests/cli-integ-tests/bootstrap/cdk-bootstrap-can-deploy-with-session-tags-on-the-deploy.integtest.js +1 -2
- package/tests/cli-integ-tests/bootstrap/cdk-bootstrap-can-deploy-without-execution-role-and-with-session-tags-on-deploy-role.integtest.js +1 -2
- package/tests/cli-integ-tests/bootstrap/cdk-bootstrap-can-dump-the-template.integtest.js +1 -2
- package/tests/cli-integ-tests/bootstrap/cdk-bootstrap-can-remove-custompermissionsboundary.integtest.js +1 -2
- package/tests/cli-integ-tests/bootstrap/cdk-bootstrap-can-remove-trusted-account.integtest.js +1 -2
- package/tests/cli-integ-tests/bootstrap/cdk-bootstrap-can-use-the-custom-permissions-boundary-(with-slashes)-to-bootstrap.integtest.js +1 -2
- package/tests/cli-integ-tests/bootstrap/cdk-bootstrap-can-use-the-custom-permissions-boundary-to-bootstrap.integtest.js +1 -2
- package/tests/cli-integ-tests/bootstrap/cdk-bootstrap-can-use-the-default-permissions-boundary-to-bootstrap.integtest.js +1 -2
- package/tests/cli-integ-tests/bootstrap/cdk-bootstrap-create-ecr-with-tag-immutability-to-set-on.integtest.js +1 -2
- package/tests/cli-integ-tests/bootstrap/cdk-bootstrap-deploy-new-style-synthesis-to-new-style-bootstrap-(with-docker-image).integtest.js +1 -2
- package/tests/cli-integ-tests/bootstrap/cdk-bootstrap-deploy-new-style-synthesis-to-new-style-bootstrap.integtest.js +1 -2
- package/tests/cli-integ-tests/bootstrap/cdk-bootstrap-deploy-old-style-synthesis-to-new-style-bootstrap.integtest.js +1 -2
- package/tests/cli-integ-tests/bootstrap/cdk-bootstrap-deploy-role-cannot-be-assumed-with-external-id.integtest.js +1 -2
- package/tests/cli-integ-tests/bootstrap/cdk-bootstrap-switch-on-termination-protection.integtest.js +1 -2
- package/tests/cli-integ-tests/bootstrap/cdk-bootstrap-upgrade-legacy-bootstrap-stack-to-new-bootstrap-stack-while-in-use.integtest.js +1 -2
- package/tests/cli-integ-tests/cdk-assets/cdk-assets-docker-credential.integtest.js +1 -2
- package/tests/cli-integ-tests/cdk-assets/cdk-assets-uses-profile.integtest.js +1 -2
- package/tests/cli-integ-tests/cdk-assets/smoketest.integtest.js +1 -2
- package/tests/cli-integ-tests/ci-output/cdk-ci-output-to-stderr.integtest.js +1 -2
- package/tests/cli-integ-tests/ci-output/cdk-ci-true-output-to-stdout.integtest.js +1 -2
- package/tests/cli-integ-tests/context/cdk-context-in-stage-propagates-to-top.integtest.js +1 -2
- package/tests/cli-integ-tests/context/cdk-context-setting.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk---exclusively-selects-only-selected-stack.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-automatic-ordering-with-concurrency.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-automatic-ordering.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-automatic-rollback-if-paused-and---no-rollback-is-removed-from-flags.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-automatic-rollback-if-paused-and-change-contains-a-replacement.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-automatic-rollback-if-replacement-and---no-rollback-is-removed-from-flags.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-construct-with-builtin-lambda-function.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-deploy---method-direct.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-deploy-all-concurrently.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-deploy-all.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-deploy-and-test-stack-with-lambda-asset.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-deploy-deletes-all-notification-arns-when-empty-array-is-passed.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-deploy-early-validation.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-deploy-no-stacks-error.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-deploy-no-stacks-with---ignore-no-stacks.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-deploy-preserves-existing-notification-arns-when-not-specified.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-deploy-stack-with-docker-asset.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-deploy-stack-with-lambda-asset-to-object-lock-enabled-asset-bucket.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-deploy-stack-with-multiple-docker-assets.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-deploy-stack-without-resource.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-deploy-wildcard-with-outputs.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-deploy-with-import-existing-resources-true.integtest.js +8 -3
- package/tests/cli-integ-tests/deploy/cdk-deploy-with-method-direct-and-import-existing-resources-fails.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-deploy-with-notification-arn-as-flag.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-deploy-with-notification-arn-as-prop-and-flag.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-deploy-with-notification-arn-as-prop.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-deploy-with-parameters-multi.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-deploy-with-parameters.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-deploy-with-revert-drift.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-deploy-with-wildcard-and-parameters.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-deploy-without-execute-a-named-change-set.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-deploy-without-import-existing-resources.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-deploy.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-doubly-nested-stack.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-failed-deploy-does-not-hang.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-fast-deploy.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-generating-and-loading-assembly.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-nested-stack-with-parameters.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-security-related-changes-without-a-cli-are-expected-to-fail.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-stage-with-bundled-lambda-function.integtest.js +1 -2
- package/tests/cli-integ-tests/deploy/cdk-termination-protection.integtest.js +1 -2
- package/tests/cli-integ-tests/destroy/cdk-destroy-all-concurrently.integtest.js +1 -2
- package/tests/cli-integ-tests/destroy/cdk-destroy-with-concurrency.integtest.js +1 -2
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---fail-on-multiple-stacks-exits-with-error-if-any-of-the-stacks-contains-a-diff.integtest.js +1 -2
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---fail-with-multiple-stack-exits-with-if-any-of-the-stacks-contains-a-diff.integtest.js +1 -2
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---method-change-set-full-lifecycle.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---method-change-set-full-lifecycle.integtest.js +17 -0
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---method-change-set-succeeds-for-deployed-stack.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---method-change-set-succeeds-for-deployed-stack.integtest.js +20 -0
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---method-change-set-succeeds-for-new-stack.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---method-change-set-succeeds-for-new-stack.integtest.js +10 -0
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---quiet-does-not-print-there-were-no-differences-message-for-stacks-which-have-no-differences.integtest.js +1 -2
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---security-only---fail-exits-when-security-changes-are-present.integtest.js +1 -2
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---security-only---fail-exits-when-security-diff-for-sso-access-control-config.integtest.js +1 -2
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---security-only---fail-exits-when-security-diff-for-sso-assignment.integtest.js +1 -2
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---security-only---fail-exits-when-security-diff-for-sso-perm-set-with-managed-policy.integtest.js +1 -2
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---security-only---fail-exits-when-security-diff-for-sso-perm-set-without-managed-policy.integtest.js +1 -2
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---security-only-successfully-outputs-sso-access-control-information.integtest.js +1 -2
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---security-only-successfully-outputs-sso-assignment-information.integtest.js +1 -2
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---security-only-successfully-outputs-sso-permission-set-with-managed-policy-information.integtest.js +1 -2
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---security-only-successfully-outputs-sso-permission-set-without-managed-policy-information.integtest.js +1 -2
- package/tests/cli-integ-tests/diff/cdk-cdk-diff--import-existing-resources-shows-import.integtest.js +1 -2
- package/tests/cli-integ-tests/diff/cdk-cdk-diff-doesnt-show-resource-metadata-changes.integtest.js +1 -2
- package/tests/cli-integ-tests/diff/cdk-cdk-diff-shows-resource-metadata-changes-with---no-change-set.integtest.js +1 -2
- package/tests/cli-integ-tests/diff/cdk-cdk-diff-with-large-changeset-and-custom-toolkit-stack-name-and-qualifier-does-not-fail.integtest.js +1 -2
- package/tests/cli-integ-tests/diff/cdk-cdk-diff-with-large-changeset-does-not-fail.integtest.js +1 -2
- package/tests/cli-integ-tests/diff/cdk-cdk-diff.integtest.js +1 -2
- package/tests/cli-integ-tests/diff/cdk-enablediffnofail.integtest.js +1 -2
- package/tests/cli-integ-tests/diff/cdk-iam-diff.integtest.js +1 -2
- package/tests/cli-integ-tests/doctor/cdk-doctor.integtest.js +1 -2
- package/tests/cli-integ-tests/drift/cdk-cdk-drift---fail-throws-when-drift-is-detected.integtest.js +1 -2
- package/tests/cli-integ-tests/drift/cdk-cdk-drift---verbose-shows-unchecked-resources.integtest.js +1 -2
- package/tests/cli-integ-tests/drift/cdk-cdk-drift.integtest.js +1 -2
- package/tests/cli-integ-tests/flags/cdk-flags-with-cli-context.integtest.js +1 -2
- package/tests/cli-integ-tests/gc/cdk-gc-deletes-unused-s3-objects-rollback.integtest.js +1 -2
- package/tests/cli-integ-tests/gc/cdk-gc-garbage-collection-deletes-unused-ecr-images.integtest.js +1 -2
- package/tests/cli-integ-tests/gc/cdk-gc-garbage-collection-deletes-unused-s3-objects.integtest.js +1 -2
- package/tests/cli-integ-tests/gc/cdk-gc-garbage-collection-keeps-in-use-ecr-images.integtest.js +1 -2
- package/tests/cli-integ-tests/gc/cdk-gc-garbage-collection-keeps-in-use-s3-objects.integtest.js +1 -2
- package/tests/cli-integ-tests/gc/cdk-gc-garbage-collection-tags-unused-ecr-images.integtest.js +1 -2
- package/tests/cli-integ-tests/gc/cdk-gc-garbage-collection-tags-unused-s3-objects.integtest.js +1 -2
- package/tests/cli-integ-tests/gc/cdk-gc-garbage-collection-untags-in-use-ecr-images.integtest.js +1 -2
- package/tests/cli-integ-tests/gc/cdk-gc-garbage-collection-untags-in-use-s3-objects.integtest.js +1 -2
- package/tests/cli-integ-tests/hotswap/cdk-hotswap-deployment-for-ecs-service-detects-failed-deployment-and-errors.integtest.js +1 -2
- package/tests/cli-integ-tests/hotswap/cdk-hotswap-deployment-for-ecs-service-waits-for-deployment-to-complete.integtest.js +1 -2
- package/tests/cli-integ-tests/hotswap/cdk-hotswap-deployment-supports-appsync-apis-with-many-functions.integtest.js +10 -3
- package/tests/cli-integ-tests/hotswap/cdk-hotswap-deployment-supports-bedrock-agentcore-runtime.integtest.js +1 -2
- package/tests/cli-integ-tests/hotswap/cdk-hotswap-deployment-supports-ecs-service.integtest.js +1 -2
- package/tests/cli-integ-tests/hotswap/cdk-hotswap-deployment-supports-fn::importvalue-intrinsic.integtest.js +1 -2
- package/tests/cli-integ-tests/hotswap/cdk-hotswap-deployment-supports-lambda-functions-description-and-environment-variables.integtest.js +1 -2
- package/tests/cli-integ-tests/hotswap/cdk-hotswap-ecs-deployment-respects-properties-override.integtest.js +1 -2
- package/tests/cli-integ-tests/import/cdk-test-resource-import-with-construct-that-requires-bundling.integtest.js +1 -2
- package/tests/cli-integ-tests/import/cdk-test-resource-import.integtest.js +1 -2
- package/tests/cli-integ-tests/list/cdk-cdk-ls---show-dependencies---json---long.integtest.js +1 -2
- package/tests/cli-integ-tests/list/cdk-cdk-ls---show-dependencies---json.integtest.js +1 -2
- package/tests/cli-integ-tests/list/cdk-cdk-ls.integtest.js +1 -2
- package/tests/cli-integ-tests/lookup/cdk-ssm-parameter-provider-error.integtest.js +1 -2
- package/tests/cli-integ-tests/lookup/cdk-vpc-lookup.integtest.js +1 -2
- package/tests/cli-integ-tests/metadata/cdk-metadata.integtest.js +1 -2
- package/tests/cli-integ-tests/migrate/cdk-migrate--from-stack-creates-deployable-app-csharp.integtest.js +1 -2
- package/tests/cli-integ-tests/migrate/cdk-migrate--from-stack-creates-deployable-app-java.integtest.js +1 -2
- package/tests/cli-integ-tests/migrate/cdk-migrate--from-stack-creates-deployable-app-python.integtest.js +1 -2
- package/tests/cli-integ-tests/migrate/cdk-migrate--from-stack-creates-deployable-app-typescript.integtest.js +1 -2
- package/tests/cli-integ-tests/migrate/cdk-migrate-deploys-successfully-csharp.integtest.js +1 -2
- package/tests/cli-integ-tests/migrate/cdk-migrate-deploys-successfully-java.integtest.js +1 -2
- package/tests/cli-integ-tests/migrate/cdk-migrate-deploys-successfully-python.integtest.js +1 -2
- package/tests/cli-integ-tests/migrate/cdk-migrate-deploys-successfully-typescript.integtest.js +1 -2
- package/tests/cli-integ-tests/migrate/cdk-migrate-generates-migrate.json.integtest.js +1 -2
- package/tests/cli-integ-tests/migrate/cdk-test-migrate-deployment-for-app-with-localfile-source-in-migrate.json.integtest.js +1 -2
- package/tests/cli-integ-tests/notices/cdk-cdk-notices-are-displayed-correctly.integtest.js +1 -2
- package/tests/cli-integ-tests/notices/cdk-cdk-notices-with---unacknowledged.integtest.js +1 -2
- package/tests/cli-integ-tests/notices/cdk-skips-notice-refresh.integtest.js +1 -2
- package/tests/cli-integ-tests/proxy/cdk-requests-go-through-a-proxy-when-configured.integtest.js +1 -2
- package/tests/cli-integ-tests/rollback/cdk-stack-in-update_rollback_complete-state-can-be-updated.integtest.js +1 -2
- package/tests/cli-integ-tests/rollback/cdk-test-cdk-rollback---force.integtest.js +1 -2
- package/tests/cli-integ-tests/rollback/cdk-test-cdk-rollback.integtest.js +1 -2
- package/tests/cli-integ-tests/rollback/cdk-update-to-stack-in-rollback_complete-state-will-delete-stack-and-create-a-new-one.integtest.js +1 -2
- package/tests/cli-integ-tests/sam/cdk-sam-can-locally-test-the-synthesized-cdk-application.integtest.js +1 -2
- package/tests/cli-integ-tests/synth/cdk-can-still-load-old-assemblies.integtest.js +1 -2
- package/tests/cli-integ-tests/synth/cdk-cdk-synth-add-the-metadata-properties-expected-by-sam.integtest.js +1 -2
- package/tests/cli-integ-tests/synth/cdk-cdk-synth-bundled-functions-as-expected.integtest.js +1 -2
- package/tests/cli-integ-tests/synth/cdk-cdk-synth.integtest.js +1 -2
- package/tests/cli-integ-tests/synth/cdk-synth---quiet-can-be-specified-in-cdk.json.integtest.js +1 -2
- package/tests/cli-integ-tests/synth/cdk-synthing-a-stage-with-errors-can-be-suppressed.integtest.js +1 -2
- package/tests/cli-integ-tests/synth/cdk-synthing-a-stage-with-errors-leads-to-failure.integtest.js +1 -2
- package/tests/cli-integ-tests/synth/cdk-templates-on-disk-contain-metadata-resource.integtest.js +1 -2
- package/tests/cli-integ-tests/version/cdk-two-ways-of-showing-the-version.integtest.js +1 -2
- package/tests/telemetry-integ-tests/cdk-cli-telemetry-disable-sends-no-data.integtest.js +1 -2
- package/tests/telemetry-integ-tests/cdk-deploy-telemetry.integtest.js +1 -2
- package/tests/telemetry-integ-tests/cdk-hotswap-telemetry.integtest.js +1 -2
- package/tests/telemetry-integ-tests/cdk-invalid-command-telemetry.integtest.js +1 -2
- package/tests/telemetry-integ-tests/cdk-synth-guessagent.integtest.js +1 -2
- package/tests/telemetry-integ-tests/cdk-synth-telemetry-with-errors.integtest.js +1 -2
- package/tests/telemetry-integ-tests/cdk-synth-telemetry.integtest.js +1 -2
- package/tests/telemetry-integ-tests/cli-telemetry/cdk-cli-telemetry-adds-context-value.integtest.js +1 -2
- package/tests/telemetry-integ-tests/cli-telemetry/cdk-cli-telemetry-reports-status.integtest.js +1 -2
- package/tests/toolkit-lib-integ-tests/toolkit-deploy-stack-with-multiple-docker-assets.integtest.js +1 -2
- package/tests/uberpackage/uberpackage.integtest.js +1 -2
package/lib/cli/run-suite.js
CHANGED
|
@@ -221,7 +221,15 @@ async function main() {
|
|
|
221
221
|
// Flip a flag to indicate we're testing CDK itself. Some parts of CDK behave more thoroughly
|
|
222
222
|
// (but slowly) if this flag is set.
|
|
223
223
|
process.env.TESTING_CDK = '1';
|
|
224
|
+
// jest-junit reporter configuration
|
|
225
|
+
process.env.JEST_SUITE_NAME = 'jest tests';
|
|
226
|
+
process.env.JEST_JUNIT_OUTPUT_DIR = 'coverage';
|
|
224
227
|
await jest.run([
|
|
228
|
+
'--reporters=default',
|
|
229
|
+
'--reporters=jest-junit',
|
|
230
|
+
// Override Jest's default 5s timeout which is too low for integ tests.
|
|
231
|
+
// Tests using withAws() will further override this to 2 hours to account for region lock wait times.
|
|
232
|
+
'--testTimeout=60000',
|
|
225
233
|
'--randomize',
|
|
226
234
|
...args.seed ? [`--seed=${args.seed}`] : [],
|
|
227
235
|
...args.runInBand ? ['-i'] : [],
|
|
@@ -272,4 +280,4 @@ main().catch(e => {
|
|
|
272
280
|
console.error(e);
|
|
273
281
|
process.exitCode = 1;
|
|
274
282
|
});
|
|
275
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLXN1aXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicnVuLXN1aXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsK0JBQStCO0FBQy9CLDZCQUE2QjtBQUM3Qiw2QkFBNkI7QUFDN0IsK0JBQStCO0FBQy9CLHNFQUF1RTtBQUN2RSx3RUFBeUU7QUFDekUsNERBQWdFO0FBQ2hFLGtHQUFtRztBQUNuRyw4RUFBK0U7QUFDL0UsZ0dBQWlHO0FBRWpHLDhEQUFpRTtBQUVqRSxNQUFNLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztBQUNuQyxNQUFNLHVCQUF1QixHQUFHLFlBQVksQ0FBQztBQUU3QyxLQUFLLFVBQVUsSUFBSTtJQUNqQixNQUFNLElBQUksR0FBRyxNQUFNLEtBQUs7U0FDckIsT0FBTyxDQUFDLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDaEQsVUFBVSxDQUFDLFdBQVcsRUFBRTtRQUN2QixRQUFRLEVBQUUsK0JBQStCO1FBQ3pDLElBQUksRUFBRSxRQUFRO1FBQ2QsWUFBWSxFQUFFLElBQUk7S0FDbkIsQ0FBQztRQUNGLDZFQUE2RTtRQUM3RSx3QkFBd0I7U0FDdkIsT0FBTyxDQUFDLGFBQWEsRUFBRTtRQUN0QixRQUFRLEVBQUUscUJBQXFCO1FBQy9CLEtBQUssRUFBRSxHQUFHO1FBQ1YsSUFBSSxFQUFFLFFBQVE7S0FDZixDQUFDO1NBQ0QsT0FBTyxDQUFDLFlBQVksRUFBRTtRQUNyQixRQUFRLEVBQUUsNENBQTRDO1FBQ3RELEtBQUssRUFBRSxHQUFHO1FBQ1YsSUFBSSxFQUFFLFFBQVE7S0FDZixDQUFDO1NBQ0QsT0FBTyxDQUFDLG1CQUFtQixFQUFFO1FBQzVCLFFBQVEsRUFBRSwwQkFBMEI7UUFDcEMsS0FBSyxFQUFFLEdBQUc7UUFDVixJQUFJLEVBQUUsUUFBUTtLQUNmLENBQUM7U0FDRCxPQUFPLENBQUMscUJBQXFCLEVBQUU7UUFDOUIsUUFBUSxFQUFFLDRCQUE0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QUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSwyQkFBMkIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDbkYsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztDQUNGO0FBRUQsU0FBUyxrQkFBa0I7SUFDekIsaUVBQWlFO0lBQ2pFLE9BQU8sT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDO0FBQy9DLENBQUM7QUFFRCxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDZixzQ0FBc0M7SUFDdEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQixPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN2QixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBqZXN0IGZyb20gJ2plc3QnO1xuaW1wb3J0ICogYXMgeWFyZ3MgZnJvbSAneWFyZ3MnO1xuaW1wb3J0IHsgUnVubmVyQ2xpTnBtU291cmNlIH0gZnJvbSAnLi4vcGFja2FnZS1zb3VyY2VzL2NsaS1ucG0tc291cmNlJztcbmltcG9ydCB7IFJ1bm5lckNsaVJlcG9Tb3VyY2UgfSBmcm9tICcuLi9wYWNrYWdlLXNvdXJjZXMvY2xpLXJlcG8tc291cmNlJztcbmltcG9ydCB7IGF1dG9GaW5kUmVwb1Jvb3QgfSBmcm9tICcuLi9wYWNrYWdlLXNvdXJjZXMvZmluZC1yb290JztcbmltcG9ydCB7IFJ1bm5lckxpYnJhcnlHbG9iYWxJbnN0YWxsU291cmNlIH0gZnJvbSAnLi4vcGFja2FnZS1zb3VyY2VzL2xpYnJhcnktZ2xvYmFsaW5zdGFsbC1zb3VyY2UnO1xuaW1wb3J0IHsgUnVubmVyTGlicmFyeU5wbVNvdXJjZSB9IGZyb20gJy4uL3BhY2thZ2Utc291cmNlcy9saWJyYXJ5LW5wbS1zb3VyY2UnO1xuaW1wb3J0IHsgUnVubmVyTGlicmFyeVByZWluc3RhbGxlZFNvdXJjZSB9IGZyb20gJy4uL3BhY2thZ2Utc291cmNlcy9saWJyYXJ5LXByZWluc3RhbGxlZC1zb3VyY2UnO1xuaW1wb3J0IHR5cGUgeyBJUnVubmVyU291cmNlLCBJVGVzdENsaVNvdXJjZSwgSVRlc3RMaWJyYXJ5U291cmNlIH0gZnJvbSAnLi4vcGFja2FnZS1zb3VyY2VzL3NvdXJjZSc7XG5pbXBvcnQgeyBzZXJpYWxpemVTb3VyY2VzIH0gZnJvbSAnLi4vcGFja2FnZS1zb3VyY2VzL3N1YnByb2Nlc3MnO1xuXG5jb25zdCBDTElfUEFDS0FHRV9OQU1FID0gJ2F3cy1jZGsnO1xuY29uc3QgQ0RLX0FTU0VUU19QQUNLQUdFX05BTUUgPSAnY2RrLWFzc2V0cyc7XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XG4gIGNvbnN0IGFyZ3MgPSBhd2FpdCB5YXJnc1xuICAgIC5jb21tYW5kKCcqIDxTVUlURU5BTUU+JywgJ2RlZmF1bHQgY29tbWFuZCcsIHkgPT4geVxuICAgICAgLnBvc2l0aW9uYWwoJ1NVSVRFTkFNRScsIHtcbiAgICAgICAgZGVzY3JpYmU6ICdOYW1lIG9mIHRoZSB0ZXN0IHN1aXRlIHRvIHJ1bicsXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBkZW1hbmRPcHRpb246IHRydWUsXG4gICAgICB9KVxuICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgIC8vICBTb3VyY2VzIGFuZCB2ZXJzaW9uc1xuICAgICAgLm9wdGlvbnMoJ2NsaS12ZXJzaW9uJywge1xuICAgICAgICBkZXNjcmliZTogJ0NMSSB2ZXJzaW9uIHRvIHVzZS4nLFxuICAgICAgICBhbGlhczogJ2MnLFxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIH0pXG4gICAgICAub3B0aW9ucygnY2xpLXNvdXJjZScsIHtcbiAgICAgICAgZGVzY3JpYmU6ICdSb290IG9mIGF3cy1jZGstY2xpIHJlcG9zaXRvcnksIG9yIFwiYXV0b1wiLicsXG4gICAgICAgIGFsaWFzOiAncycsXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgfSlcbiAgICAgIC5vcHRpb25zKCdmcmFtZXdvcmstdmVyc2lvbicsIHtcbiAgICAgICAgZGVzY3JpYmU6ICdGcmFtZXdvcmsgdmVyc2lvbiB0byB1c2UnLFxuICAgICAgICBhbGlhczogJ2YnLFxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIH0pXG4gICAgICAub3B0aW9ucygndG9vbGtpdC1saWItdmVyc2lvbicsIHtcbiAgICAgICAgZGVzY3JpYmU6ICdUb29sa2l0IGxpYiB2ZXJzaW9uIHRvIHVzZScsXG4gICAgICAgIGFsaWFzOiAnbCcsXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgfSlcbiAgICAgIC5vcHRpb25zKCdjZGstYXNzZXRzLXZlcnNpb24nLCB7XG4gICAgICAgIGRlc2NyaWJlOiAnY2RrLWFzc2V0cyB2ZXJzaW9uIHRvIHVzZS4nLFxuICAgICAgICBhbGlhczogJ2EnLFxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIH0pXG4gICAgICAub3B0aW9uKCd1c2Utc291cmNlJywge1xuICAgICAgICBkZXNjcmlwdG9uOiAnVXNlIFR5cGVTY3JpcHQgcGFja2FnZXMgZnJvbSB0aGUgZ2l2ZW4gc291cmNlIHJlcG9zaXRvcnkgKG9yIFwiYXV0b1wiKScsXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICByZXF1aXJlc0FyZzogdHJ1ZSxcbiAgICAgICAgZGVwcmVjYXRlZDogJ1VzZSAtLWNsaS1zb3VyY2UgaW5zdGVhZCcsXG4gICAgICB9KVxuICAgICAgLm9wdGlvbigndXNlLWNsaS1yZWxlYXNlJywge1xuICAgICAgICBkZXNjcmlwdG9uOiAnUnVuIHRoZSBjdXJyZW50IHRlc3RzIGFnYWluc3QgdGhlIENMSSBhdCB0aGUgZ2l2ZW4gdmVyc2lvbicsXG4gICAgICAgIGFsaWFzOiAndScsXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICByZXF1aXJlc0FyZzogdHJ1ZSxcbiAgICAgICAgZGVwcmVjYXRlZDogJ1VzZSAtLWNsaS12ZXJzaW9uIGluc3RlYWQnLFxuICAgICAgfSlcbiAgICAgIC5vcHRpb24oJ2F1dG8tc291cmNlJywge1xuICAgICAgICBhbGlhczogJ2EnLFxuICAgICAgICBkZXNjcmliZTogJ0F1dG9tYXRpY2FsbHkgZmluZCB0aGUgc291cmNlIHRyZWUgZnJvbSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeScsXG4gICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgcmVxdWlyZXNBcmc6IGZhbHNlLFxuICAgICAgICBkZXByZWNhdGVkOiAnVXNlIC0tdXNlLXNvdXJjZT1hdXRvIGluc3RlYWQnLFxuICAgICAgfSlcbiAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAvLyAgVGVzdCBydW5uaW5nIGZsYWdzXG4gICAgICAub3B0aW9uKCdydW5JbkJhbmQnLCB7XG4gICAgICAgIGRlc2NyaXB0b246ICdSdW4gYWxsIHRlc3RzIGluIG9uZSBOb2RlIHByb2Nlc3MnLFxuICAgICAgICBhbGlhczogJ2knLFxuICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICB9KVxuICAgICAgLm9wdGlvbigndGVzdCcsIHtcbiAgICAgICAgZGVzY3JpcHRvbjogJ1Rlc3QgcGF0dGVybiB0byBzZWxlY3RpdmVseSBydW4gdGVzdHMnLFxuICAgICAgICBhbGlhczogJ3QnLFxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgcmVxdWlyZXNBcmc6IHRydWUsXG4gICAgICB9KVxuICAgICAgLm9wdGlvbigndGVzdC1maWxlJywge1xuICAgICAgICBkZXNjcmliZTogJ1RoZSBzcGVjaWZpYyB0ZXN0IGZpbGUgdG8gcnVuJyxcbiAgICAgICAgYWxpYXM6ICdGJyxcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIHJlcXVpcmVzQXJnOiB0cnVlLFxuICAgICAgfSlcbiAgICAgIC5vcHRpb25zKCdzZWVkJywge1xuICAgICAgICBkZXNjcmliZTogJ1NldCB0aGUgc2VlZCB2YWx1ZSB0byByZXBsaWNhdGUgYSB0ZXN0IHJ1bicsXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICByZXF1aXJlc0FyZzogdHJ1ZSxcbiAgICAgIH0pXG4gICAgICAub3B0aW9ucygndmVyYm9zZScsIHtcbiAgICAgICAgYWxpYXM6ICd2JyxcbiAgICAgICAgZGVzY3JpYmU6ICdSdW4gaW4gdmVyYm9zZSBtb2RlJyxcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICByZXF1aXJlc0FyZzogZmFsc2UsXG4gICAgICB9KVxuICAgICAgLm9wdGlvbnMoJ3Bhc3NXaXRoTm9UZXN0cycsIHtcbiAgICAgICAgZGVzY3JpYmU6ICdBbGxvdyBwYXNzaW5nIGlmIHRoZSB0ZXN0IHN1aXRlIGlzIG5vdCBmb3VuZCAoZGVmYXVsdCB0cnVlIHdoZW4gSVNfQ0FOQVJZIG1vZGUsIGZhbHNlIG90aGVyd2lzZSknLFxuICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIHJlcXVpcmVzQXJnOiBmYWxzZSxcbiAgICAgIH0pXG4gICAgICAub3B0aW9ucygnbWF4V29ya2VycycsIHtcbiAgICAgICAgYWxpYXM6ICd3JyxcbiAgICAgICAgZGVzY3JpYmU6ICdTcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHdvcmtlcnMgdGhlIHdvcmtlci1wb29sIHdpbGwgc3Bhd24gZm9yIHJ1bm5pbmcgdGVzdHMuIFdlIHVzZSBhIHNlbnNpYmxlIGRlZmF1bHQgZm9yIHJ1bm5pbmcgY2xpIGludGVnIHRlc3RzLicsXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICByZXF1aXJlc0FyZzogdHJ1ZSxcbiAgICAgIH0pXG4gICAgICAub3B0aW9ucygnc2hhcmQnLCB7XG4gICAgICAgIGRlc2NyaWJlOiAnVGhlIHRlc3Qgc3VpdGUgc2hhcmQgdG8gZXhlY3V0ZSBpbiBhIGZvcm1hdCBvZiAoPzxzaGFyZEluZGV4PlxcZCspLyg/PHNoYXJkQ291bnQ+XFxkKykuIGBzaGFyZEluZGV4YCBkZXNjcmliZXMgd2hpY2ggc2hhcmQgdG8gc2VsZWN0IHdoaWxlIGBzaGFyZENvdW50YCBjb250cm9scyB0aGUgbnVtYmVyIG9mIHNoYXJkcyB0aGUgc3VpdGUgc2hvdWxkIGJlIHNwbGl0IGludG8uIGBzaGFyZEluZGV4YCBhbmQgYHNoYXJkQ291bnRgIGhhdmUgdG8gYmUgMS1iYXNlZCwgcG9zaXRpdmUgbnVtYmVycywgYW5kIGBzaGFyZEluZGV4YCBoYXMgdG8gYmUgbG93ZXIgdGhhbiBvciBlcXVhbCB0byBgc2hhcmRDb3VudGAuJyxcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIHJlcXVpcmVzQXJnOiB0cnVlLFxuICAgICAgfSlcbiAgICAgIC5vcHRpb25zKCdyZXRyeScsIHtcbiAgICAgICAgZGVzY3JpYmU6ICdOdW1iZXIgb2YgdGltZXMgdG8gcmV0cnkgZmFpbGVkIHRlc3RzLicsXG4gICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICByZXF1aXJlc0FyZzogdHJ1ZSxcbiAgICAgICAgZGVmYXVsdDogISEocHJvY2Vzcy5lbnYuQ0kgfHwgcHJvY2Vzcy5lbnYuQ09ERUJVSUxEX0JVSUxEX0lEKSA/IDIgOiAwLFxuICAgICAgICBkZWZhdWx0RGVzY3JpcHRpb246ICcyIGluIENJL0NvZGVCdWlsZCwgMCBvdGhlcndpc2UnLFxuICAgICAgfSksICgpID0+IHtcbiAgICB9LFxuICAgIClcbiAgICAuc3RyaWN0KClcbiAgICAucGFyc2UoKTtcblxuICBjb25zdCBzdWl0ZU5hbWUgPSBhcmdzLlNVSVRFTkFNRTtcblxuICAvLyBTbyBtYW55IHdheXMgdG8gc3BlY2lmeSB0aGlzLCBhbmQgd2l0aCB2YXJpb3VzIHdheXMgdG8gc3BlbGwgdGhlIHNhbWUgZmxhZyAob19PKVxuICAvLyBBbHNvLCBzb21lIG9mIHRoZW0gZGVwZW5kIG9uIGVhY2ggb3RoZXIgZm9yIGNvbnZlbmllbmNlLlxuICBjb25zdCBjbGlTb3VyY2UgPSBuZXcgVW5pcXVlT3B0aW9uPElSdW5uZXJTb3VyY2U8SVRlc3RDbGlTb3VyY2U+PignQ0xJIHZlcnNpb24nKTtcbiAgY29uc3QgY2RrQXNzZXRzU291cmNlID0gbmV3IFVuaXF1ZU9wdGlvbjxJUnVubmVyU291cmNlPElUZXN0Q2xpU291cmNlPj4oJ2Nkay1hc3NldHMgdmVyc2lvbicpO1xuXG4gIC8vIFNwZWNpZmljIENMSSB2ZXJzaW9uXG4gIGZvciAoY29uc3QgZmxhZ0FsaWFzIG9mIFsnY2xpLXZlcnNpb24nLCAndXNlLWNsaS1yZWxlYXNlJ10gYXMgY29uc3QpIHtcbiAgICBpZiAoYXJnc1tmbGFnQWxpYXNdKSB7XG4gICAgICBjbGlTb3VyY2Uuc2V0KG5ldyBSdW5uZXJDbGlOcG1Tb3VyY2UoQ0xJX1BBQ0tBR0VfTkFNRSwgYXJnc1tmbGFnQWxpYXNdKSwgYC0tJHtmbGFnQWxpYXN9YCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU3BlY2lmaWMgY2RrLWFzc2V0cyB2ZXJzaW9uXG4gIGlmIChhcmdzWydjZGstYXNzZXRzLXZlcnNpb24nXSkge1xuICAgIGNka0Fzc2V0c1NvdXJjZS5zZXQobmV3IFJ1bm5lckNsaU5wbVNvdXJjZShDREtfQVNTRVRTX1BBQ0tBR0VfTkFNRSwgYXJnc1snY2RrLWFzc2V0cy12ZXJzaW9uJ10pLCAnLS1jZGstYXNzZXRzLXZlcnNpb24nKTtcbiAgfVxuXG4gIC8vIFNwZWNpZmljYWxseSB1c2UgYSBzb3VyY2UgbG9jYXRpb25cbiAgZm9yIChjb25zdCBmbGFnQWxpYXMgb2YgWydjbGktc291cmNlJywgJ3VzZS1zb3VyY2UnXSBhcyBjb25zdCkge1xuICAgIGlmIChhcmdzW2ZsYWdBbGlhc10pIHtcbiAgICAgIGNvbnN0IHJvb3QgPSBhcmdzW2ZsYWdBbGlhc10gPT09ICdhdXRvJyA/IGF3YWl0IGF1dG9GaW5kUmVwb1Jvb3QoKSA6IGFyZ3NbZmxhZ0FsaWFzXTtcbiAgICAgIGNsaVNvdXJjZS5zZXQobmV3IFJ1bm5lckNsaVJlcG9Tb3VyY2UoQ0xJX1BBQ0tBR0VfTkFNRSwgcm9vdCksIGAtLSR7ZmxhZ0FsaWFzfWApO1xuICAgICAgY2RrQXNzZXRzU291cmNlLnNldChuZXcgUnVubmVyQ2xpUmVwb1NvdXJjZShDREtfQVNTRVRTX1BBQ0tBR0VfTkFNRSwgcm9vdCksIGAtLSR7ZmxhZ0FsaWFzfWApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNwZWNpZmljYWxseSByZXF1ZXN0IHRoYXQgYSBzb3VyY2UgbG9jYXRpb24gaXMgZ2l2ZW4sIG9yIHdlIGRpZG4ndCBmaW5kIGEgQ0xJIHlldC5cbiAgLy8gQSBDTEkgc291cmNlIGlzIHJlcXVpcmVkLCBzbyBpZiB0aGlzIGZhaWxzIHRoYXQncyBhbHJpZ2h0LlxuICBpZiAoYXJnc1snYXV0by1zb3VyY2UnXSB8fCAhY2xpU291cmNlLmlzU2V0KCkpIHtcbiAgICBjbGlTb3VyY2Uuc2V0KG5ldyBSdW5uZXJDbGlSZXBvU291cmNlKENMSV9QQUNLQUdFX05BTUUsIGF3YWl0IGF1dG9GaW5kUmVwb1Jvb3QoKSksICctLWF1dG8tc291cmNlJyk7XG4gIH1cblxuICAvLyBJZiB0aGUgQ0xJIGlzIHRha2VuIGZyb20gdGhlIHNvdXJjZSwgYW5kIGNkay1hc3NldHMgaXMgbm90IHNldCwgd2UgY2FuIGNvcHkgdGhlIGNkay1hc3NldHMgc291cmNlIGZyb20gdGhlIENMSSBzb3VyY2UuXG4gIGlmICghY2RrQXNzZXRzU291cmNlLmlzU2V0KCkpIHtcbiAgICBjb25zdCBjbGlTcmMgPSBjbGlTb3VyY2UuYXNzZXJ0KCk7XG4gICAgaWYgKGNsaVNyYyBpbnN0YW5jZW9mIFJ1bm5lckNsaVJlcG9Tb3VyY2UpIHtcbiAgICAgIGNka0Fzc2V0c1NvdXJjZS5zZXQobmV3IFJ1bm5lckNsaVJlcG9Tb3VyY2UoQ0RLX0FTU0VUU19QQUNLQUdFX05BTUUsIGNsaVNyYy5yZXBvUm9vdCksICdjb3BpZWQgZnJvbSBDTEkgc291cmNlJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gSWYgY2RrLWFzc2V0cyBpcyBzdGlsbCBub3QgY29uZmlndXJlZCwgZmFsbCBiYWNrIHRvIHRoZSBsYXRlc3QgdmVyc2lvbiB0aGF0IGlzIGF2YWlsYWJsZVxuICBpZiAoIWNka0Fzc2V0c1NvdXJjZS5pc1NldCgpKSB7XG4gICAgY2RrQXNzZXRzU291cmNlLnNldChuZXcgUnVubmVyQ2xpTnBtU291cmNlKENES19BU1NFVFNfUEFDS0FHRV9OQU1FLCAnbGF0ZXN0JyksICctLWNkay1hc3NldHMtdmVyc2lvbiBub3Qgc2V0Jyk7XG4gIH1cblxuICAvLyBMaWJyYXJ5IHNvdXJjZSBpcyBlaXRoZXIgdGhlIGdpdmVuIG9uZSwgb3IgJ2xhdGVzdCcgKG5pY2UgYW5kIHNpbXBsZSlcbiAgY29uc3QgbGlicmFyeVNvdXJjZTogSVJ1bm5lclNvdXJjZTxJVGVzdExpYnJhcnlTb3VyY2U+XG4gICAgPSBuZXcgUnVubmVyTGlicmFyeU5wbVNvdXJjZSgnYXdzLWNkay1saWInLCBhcmdzWydmcmFtZXdvcmstdmVyc2lvbiddID8gYXJnc1snZnJhbWV3b3JrLXZlcnNpb24nXSA6ICdsYXRlc3QnKTtcblxuICAvLyBUb29sa2l0IGxpYiBzb3VyY2UgaXMgZWl0aGVyIHRoZSBnaXZlbiBvbmUsIG9yIHRoZSBvbmUgdGhhdCdzIGJlaW5nIGJyb3VnaHQgYnkgJ3BhY2thZ2UuanNvbicgYWxyZWFkeSwgb3IgJ2xhdGVzdCdcbiAgY29uc3QgdG9vbGtpdExpYlBhY2thZ2UgPSAnQGF3cy1jZGsvdG9vbGtpdC1saWInO1xuICBsZXQgdG9vbGtpdFNvdXJjZTogSVJ1bm5lclNvdXJjZTxJVGVzdExpYnJhcnlTb3VyY2U+IHwgdW5kZWZpbmVkO1xuICBpZiAoYXJnc1sndG9vbGtpdC1saWItdmVyc2lvbiddKSB7XG4gICAgdG9vbGtpdFNvdXJjZSA9IG5ldyBSdW5uZXJMaWJyYXJ5R2xvYmFsSW5zdGFsbFNvdXJjZSh0b29sa2l0TGliUGFja2FnZSwgYXJnc1sndG9vbGtpdC1saWItdmVyc2lvbiddKTtcbiAgfVxuICBpZiAoIXRvb2xraXRTb3VyY2UpIHtcbiAgICB0b29sa2l0U291cmNlID0gYXdhaXQgUnVubmVyTGlicmFyeVByZWluc3RhbGxlZFNvdXJjZS5pc1ByZWluc3RhbGxlZCh0b29sa2l0TGliUGFja2FnZSlcbiAgICAgID8gbmV3IFJ1bm5lckxpYnJhcnlQcmVpbnN0YWxsZWRTb3VyY2UodG9vbGtpdExpYlBhY2thZ2UpXG4gICAgICA6IG5ldyBSdW5uZXJMaWJyYXJ5R2xvYmFsSW5zdGFsbFNvdXJjZSh0b29sa2l0TGliUGFja2FnZSwgJ2xhdGVzdCcpO1xuICB9XG5cbiAgcHJvY2Vzcy5lbnYuSkVTVF9SRVRSWV9USU1FUyA9IFN0cmluZyhhcmdzLnJldHJ5KTtcblxuICBjb25zb2xlLmxvZygnLS0tLS0tPiBDb25maWd1cmF0aW9uJyk7XG4gIGNvbnNvbGUubG9nKGAgICAgICAgIFRlc3Qgc3VpdGU6ICAgICAgICAgJHtzdWl0ZU5hbWV9YCk7XG4gIGNvbnNvbGUubG9nKGAgICAgICAgIFRlc3QgdmVyc2lvbjogICAgICAgJHt0aGlzUGFja2FnZVZlcnNpb24oKX1gKTtcbiAgY29uc29sZS5sb2coYCAgICAgICAgQ0xJIHNvdXJjZTogICAgICAgICAke2NsaVNvdXJjZS5hc3NlcnQoKS5zb3VyY2VEZXNjcmlwdGlvbn1gKTtcbiAgY29uc29sZS5sb2coYCAgICAgICAgTGlicmFyeSBzb3VyY2U6ICAgICAke2xpYnJhcnlTb3VyY2Uuc291cmNlRGVzY3JpcHRpb259YCk7XG4gIGNvbnNvbGUubG9nKGAgICAgICAgIFRvb2xraXQgbGliIHNvdXJjZTogJHt0b29sa2l0U291cmNlLnNvdXJjZURlc2NyaXB0aW9ufWApO1xuICBjb25zb2xlLmxvZyhgICAgICAgICBjZGstYXNzZXRzIHNvdXJjZTogICR7Y2RrQXNzZXRzU291cmNlLmFzc2VydCgpLnNvdXJjZURlc2NyaXB0aW9ufWApO1xuICBjb25zb2xlLmxvZyhgICAgICAgICBSZXRyeTogICAgICAgICAgICAgICR7YXJncy5yZXRyeX1gKTtcblxuICBpZiAoYXJncy52ZXJib3NlKSB7XG4gICAgcHJvY2Vzcy5lbnYuVkVSQk9TRSA9ICcxJztcbiAgfVxuXG4gIC8vIE1vdGl2YXRpb24gYmVoaW5kIHRoaXMgYmVoYXZpb3I6IHdoZW4gYWRkaW5nIGEgbmV3IHRlc3Qgc3VpdGUgdG8gdGhlIHBpcGVsaW5lLCBiZWNhdXNlIG9mIHRoZSB3YXkgb3VyXG4gIC8vIFBpcGVsaW5lIHBhY2thZ2Ugd29ya3MsIHRoZSBzdWl0ZSB3b3VsZCBiZSBhZGRlZCB0byB0aGUgcGlwZWxpbmUgQU5EIGFzIGEgY2FuYXJ5IGltbWVkaWF0ZWx5LiBUaGUgY2FuYXJ5XG4gIC8vIHdvdWxkIGZhaWwgdW50aWwgdGhlIHBhY2thZ2Ugd2FzIGFjdHVhbGx5IHJlbGVhc2VkLCBzbyBmb3IgY2FuYXJpZXMgd2UgbWFrZSBhbiBleGNlcHRpb24gc28gdGhhdCB0aGUgaW5pdGlhbFxuICAvLyBjYW5hcnkgd291bGQgc3VjY2VlZCBldmVuIGlmIHRoZSBzdWl0ZSB3YXNuJ3QgeWV0IGF2YWlsYWJsZS4gVGhlIGZhY3QgdGhhdCB0aGUgc3VpdGUgaXMgbm90IG9wdGlvbmFsIGluXG4gIC8vIHRoZSBwaXBlbGluZSBwcm90ZWN0cyB1cyBmcm9tIHR5cG9zLlxuICBjb25zdCBwYXNzV2l0aE5vVGVzdHMgPSBhcmdzLnBhc3NXaXRoTm9UZXN0cyA/PyAhIXByb2Nlc3MuZW52LklTX0NBTkFSWTtcblxuICAvLyBDb21tdW5pY2F0ZSB3aXRoIHRoZSBjb25maWcgZmlsZSAoaW50ZWcuamVzdC5jb25maWcuanMpXG4gIHByb2Nlc3MuZW52LlRFU1RfU1VJVEVfTkFNRSA9IHN1aXRlTmFtZTtcblxuICBjb25zdCBkaXNwb3NhYmxlcyA9IG5ldyBBcnJheTx7IGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB9PigpO1xuICB0cnkge1xuICAgIGNvbnNvbGUubG9nKCctLS0tLS0+IFJlc29sdmVkIHZlcnNpb25zJyk7XG4gICAgY29uc3QgY2xpID0gYXdhaXQgY2xpU291cmNlLmFzc2VydCgpLnJ1bm5lclByZXBhcmUoKTtcbiAgICBkaXNwb3NhYmxlcy5wdXNoKGNsaSk7XG4gICAgY29uc29sZS5sb2coYCAgICAgICAgQ0xJOiAgICAgICAgICAgICAke2NsaS52ZXJzaW9ufWApO1xuXG4gICAgY29uc3QgbGlicmFyeSA9IGF3YWl0IGxpYnJhcnlTb3VyY2UucnVubmVyUHJlcGFyZSgpO1xuICAgIGRpc3Bvc2FibGVzLnB1c2gobGlicmFyeSk7XG4gICAgY29uc29sZS5sb2coYCAgICAgICAgTGlicmFyeTogICAgICAgICAke2xpYnJhcnkudmVyc2lvbn1gKTtcblxuICAgIGNvbnN0IHRvb2xraXRMaWIgPSBhd2FpdCB0b29sa2l0U291cmNlLnJ1bm5lclByZXBhcmUoKTtcbiAgICBkaXNwb3NhYmxlcy5wdXNoKHRvb2xraXRMaWIpO1xuICAgIGNvbnNvbGUubG9nKGAgICAgICAgIFRvb2xraXQgbGlicmFyeTogJHt0b29sa2l0TGliLnZlcnNpb259YCk7XG5cbiAgICBjb25zdCBjZGtBc3NldHMgPSBhd2FpdCBjZGtBc3NldHNTb3VyY2UuYXNzZXJ0KCkucnVubmVyUHJlcGFyZSgpO1xuICAgIGRpc3Bvc2FibGVzLnB1c2goY2RrQXNzZXRzKTtcbiAgICBjb25zb2xlLmxvZyhgICAgICAgICBjZGstYXNzZXRzOiAgICAgICR7Y2RrQXNzZXRzLnZlcnNpb259YCk7XG5cbiAgICBzZXJpYWxpemVTb3VyY2VzKHtcbiAgICAgIGNsaSxcbiAgICAgIGxpYnJhcnksXG4gICAgICB0b29sa2l0TGliLFxuICAgICAgY2RrQXNzZXRzLFxuICAgIH0pO1xuXG4gICAgY29uc3QgamVzdENvbmZpZyA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICcuLicsICdyZXNvdXJjZXMnLCAnaW50ZWcuamVzdC5jb25maWcuanMnKTtcblxuICAgIC8vIEZsaXAgYSBmbGFnIHRvIGluZGljYXRlIHdlJ3JlIHRlc3RpbmcgQ0RLIGl0c2VsZi4gU29tZSBwYXJ0cyBvZiBDREsgYmVoYXZlIG1vcmUgdGhvcm91Z2hseVxuICAgIC8vIChidXQgc2xvd2x5KSBpZiB0aGlzIGZsYWcgaXMgc2V0LlxuICAgIHByb2Nlc3MuZW52LlRFU1RJTkdfQ0RLID0gJzEnO1xuXG4gICAgYXdhaXQgamVzdC5ydW4oW1xuICAgICAgJy0tcmFuZG9taXplJyxcbiAgICAgIC4uLmFyZ3Muc2VlZCA/IFtgLS1zZWVkPSR7YXJncy5zZWVkfWBdIDogW10sXG4gICAgICAuLi5hcmdzLnJ1bkluQmFuZCA/IFsnLWknXSA6IFtdLFxuICAgICAgLi4uYXJncy50ZXN0ID8gWyctdCcsIGFyZ3MudGVzdF0gOiBbXSxcbiAgICAgIC4uLmFyZ3MudmVyYm9zZSA/IFsnLS12ZXJib3NlJ10gOiBbXSxcbiAgICAgIC4uLmFyZ3MubWF4V29ya2VycyA/IFtgLS1tYXhXb3JrZXJzPSR7YXJncy5tYXhXb3JrZXJzfWBdIDogW10sXG4gICAgICAuLi5wYXNzV2l0aE5vVGVzdHMgPyBbJy0tcGFzc1dpdGhOb1Rlc3RzJ10gOiBbXSxcbiAgICAgIC4uLmFyZ3NbJ3Rlc3QtZmlsZSddID8gW2FyZ3NbJ3Rlc3QtZmlsZSddXSA6IFtdLFxuICAgICAgLi4uYXJncy5zaGFyZCA/IFtgLS1zaGFyZD0ke2FyZ3Muc2hhcmR9YF0gOiBbXSxcbiAgICBdLCBqZXN0Q29uZmlnKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBmb3IgKGNvbnN0IGRpc3Agb2YgZGlzcG9zYWJsZXMpIHtcbiAgICAgIGF3YWl0IGRpc3AuZGlzcG9zZSgpO1xuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBVbmlxdWVPcHRpb248QT4ge1xuICBwdWJsaWMgdmFsdWU6IEEgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgc291cmNlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB3aGF0OiBzdHJpbmcpIHtcbiAgfVxuXG4gIHB1YmxpYyBpc1NldCgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZSAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGFzc2VydCgpOiBBIHtcbiAgICBpZiAoIXRoaXMudmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLndoYXR9IG5vdCBjb25maWd1cmVkYCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9XG5cbiAgcHVibGljIHNldCh4OiBBLCBzb3VyY2U6IHN0cmluZykge1xuICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy53aGF0fTogJHtzb3VyY2V9IGFscmVhZHkgY29uZmlndXJlZCB2aWEgJHt0aGlzLnNvdXJjZX1gKTtcbiAgICB9XG4gICAgdGhpcy52YWx1ZSA9IHg7XG4gICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gdGhpc1BhY2thZ2VWZXJzaW9uKCk6IHN0cmluZyB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gIHJldHVybiByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uO1xufVxuXG5tYWluKCkuY2F0Y2goZSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gIGNvbnNvbGUuZXJyb3IoZSk7XG4gIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xufSk7XG4iXX0=
|
|
283
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLXN1aXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicnVuLXN1aXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsK0JBQStCO0FBQy9CLDZCQUE2QjtBQUM3Qiw2QkFBNkI7QUFDN0IsK0JBQStCO0FBQy9CLHNFQUF1RTtBQUN2RSx3RUFBeUU7QUFDekUsNERBQWdFO0FBQ2hFLGtHQUFtRztBQUNuRyw4RUFBK0U7QUFDL0UsZ0dBQWlHO0FBRWpHLDhEQUFpRTtBQUVqRSxNQUFNLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztBQUNuQyxNQUFNLHVCQUF1QixHQUFHLFlBQVksQ0FBQztBQUU3QyxLQUFLLFVBQVUsSUFBSTtJQUNqQixNQUFNLElBQUksR0FBRyxNQUFNLEtBQUs7U0FDckIsT0FBTyxDQUFDLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDaEQsVUFBVSxDQUFDLFdBQVcsRUFBRTtRQUN2QixRQUFRLEVBQUUsK0JBQStCO1FBQ3pDLElBQUksRUFBRSxRQUFRO1FBQ2QsWUFBWSxFQUFFLElBQUk7S0FDbkIsQ0FBQztRQUNGLDZFQUE2RTtRQUM3RSx3QkFBd0I7U0FDdkIsT0FBTyxDQUFDLGFBQWEsRUFBRTtRQUN0QixRQUFRLEVBQUUscUJBQXFCO1FBQy9CLEtBQUssRUFBRSxHQUFHO1FBQ1YsSUFBSSxFQUFFLFFBQVE7S0FDZixDQUFDO1NBQ0QsT0FBTyxDQUFDLFlBQVksRUFBRTtRQUNyQixRQUFRLEVBQUUsNENBQTRDO1FBQ3RELEtBQUssRUFBRSxHQUFHO1FBQ1YsSUFBSSxFQUFFLFFBQVE7S0FDZixDQUFDO1NBQ0QsT0FBTyxDQUFDLG1CQUFtQixFQUFFO1FBQzVCLFFBQVEsRUFBRSwwQkFBMEI7UUFDcEMsS0FBSyxFQUFFLEdBQUc7UUFDVixJQUFJLEVBQUUsUUFBUTtLQUNmLENBQUM7U0FDRCxPQUFPLENBQUMscUJBQXFCLEVBQUU7UUFDOUIsUUFBUSxFQUFFLDRCQUE0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R0FBRyxJQUFJLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVNLEdBQUcsQ0FBQyxDQUFJLEVBQUUsTUFBYztRQUM3QixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sMkJBQTJCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ25GLENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7Q0FDRjtBQUVELFNBQVMsa0JBQWtCO0lBQ3pCLGlFQUFpRTtJQUNqRSxPQUFPLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUMvQyxDQUFDO0FBRUQsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQ2Ysc0NBQXNDO0lBQ3RDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakIsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDdkIsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgamVzdCBmcm9tICdqZXN0JztcbmltcG9ydCAqIGFzIHlhcmdzIGZyb20gJ3lhcmdzJztcbmltcG9ydCB7IFJ1bm5lckNsaU5wbVNvdXJjZSB9IGZyb20gJy4uL3BhY2thZ2Utc291cmNlcy9jbGktbnBtLXNvdXJjZSc7XG5pbXBvcnQgeyBSdW5uZXJDbGlSZXBvU291cmNlIH0gZnJvbSAnLi4vcGFja2FnZS1zb3VyY2VzL2NsaS1yZXBvLXNvdXJjZSc7XG5pbXBvcnQgeyBhdXRvRmluZFJlcG9Sb290IH0gZnJvbSAnLi4vcGFja2FnZS1zb3VyY2VzL2ZpbmQtcm9vdCc7XG5pbXBvcnQgeyBSdW5uZXJMaWJyYXJ5R2xvYmFsSW5zdGFsbFNvdXJjZSB9IGZyb20gJy4uL3BhY2thZ2Utc291cmNlcy9saWJyYXJ5LWdsb2JhbGluc3RhbGwtc291cmNlJztcbmltcG9ydCB7IFJ1bm5lckxpYnJhcnlOcG1Tb3VyY2UgfSBmcm9tICcuLi9wYWNrYWdlLXNvdXJjZXMvbGlicmFyeS1ucG0tc291cmNlJztcbmltcG9ydCB7IFJ1bm5lckxpYnJhcnlQcmVpbnN0YWxsZWRTb3VyY2UgfSBmcm9tICcuLi9wYWNrYWdlLXNvdXJjZXMvbGlicmFyeS1wcmVpbnN0YWxsZWQtc291cmNlJztcbmltcG9ydCB0eXBlIHsgSVJ1bm5lclNvdXJjZSwgSVRlc3RDbGlTb3VyY2UsIElUZXN0TGlicmFyeVNvdXJjZSB9IGZyb20gJy4uL3BhY2thZ2Utc291cmNlcy9zb3VyY2UnO1xuaW1wb3J0IHsgc2VyaWFsaXplU291cmNlcyB9IGZyb20gJy4uL3BhY2thZ2Utc291cmNlcy9zdWJwcm9jZXNzJztcblxuY29uc3QgQ0xJX1BBQ0tBR0VfTkFNRSA9ICdhd3MtY2RrJztcbmNvbnN0IENES19BU1NFVFNfUEFDS0FHRV9OQU1FID0gJ2Nkay1hc3NldHMnO1xuXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xuICBjb25zdCBhcmdzID0gYXdhaXQgeWFyZ3NcbiAgICAuY29tbWFuZCgnKiA8U1VJVEVOQU1FPicsICdkZWZhdWx0IGNvbW1hbmQnLCB5ID0+IHlcbiAgICAgIC5wb3NpdGlvbmFsKCdTVUlURU5BTUUnLCB7XG4gICAgICAgIGRlc2NyaWJlOiAnTmFtZSBvZiB0aGUgdGVzdCBzdWl0ZSB0byBydW4nLFxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZGVtYW5kT3B0aW9uOiB0cnVlLFxuICAgICAgfSlcbiAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAvLyAgU291cmNlcyBhbmQgdmVyc2lvbnNcbiAgICAgIC5vcHRpb25zKCdjbGktdmVyc2lvbicsIHtcbiAgICAgICAgZGVzY3JpYmU6ICdDTEkgdmVyc2lvbiB0byB1c2UuJyxcbiAgICAgICAgYWxpYXM6ICdjJyxcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICB9KVxuICAgICAgLm9wdGlvbnMoJ2NsaS1zb3VyY2UnLCB7XG4gICAgICAgIGRlc2NyaWJlOiAnUm9vdCBvZiBhd3MtY2RrLWNsaSByZXBvc2l0b3J5LCBvciBcImF1dG9cIi4nLFxuICAgICAgICBhbGlhczogJ3MnLFxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIH0pXG4gICAgICAub3B0aW9ucygnZnJhbWV3b3JrLXZlcnNpb24nLCB7XG4gICAgICAgIGRlc2NyaWJlOiAnRnJhbWV3b3JrIHZlcnNpb24gdG8gdXNlJyxcbiAgICAgICAgYWxpYXM6ICdmJyxcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICB9KVxuICAgICAgLm9wdGlvbnMoJ3Rvb2xraXQtbGliLXZlcnNpb24nLCB7XG4gICAgICAgIGRlc2NyaWJlOiAnVG9vbGtpdCBsaWIgdmVyc2lvbiB0byB1c2UnLFxuICAgICAgICBhbGlhczogJ2wnLFxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIH0pXG4gICAgICAub3B0aW9ucygnY2RrLWFzc2V0cy12ZXJzaW9uJywge1xuICAgICAgICBkZXNjcmliZTogJ2Nkay1hc3NldHMgdmVyc2lvbiB0byB1c2UuJyxcbiAgICAgICAgYWxpYXM6ICdhJyxcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICB9KVxuICAgICAgLm9wdGlvbigndXNlLXNvdXJjZScsIHtcbiAgICAgICAgZGVzY3JpcHRvbjogJ1VzZSBUeXBlU2NyaXB0IHBhY2thZ2VzIGZyb20gdGhlIGdpdmVuIHNvdXJjZSByZXBvc2l0b3J5IChvciBcImF1dG9cIiknLFxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgcmVxdWlyZXNBcmc6IHRydWUsXG4gICAgICAgIGRlcHJlY2F0ZWQ6ICdVc2UgLS1jbGktc291cmNlIGluc3RlYWQnLFxuICAgICAgfSlcbiAgICAgIC5vcHRpb24oJ3VzZS1jbGktcmVsZWFzZScsIHtcbiAgICAgICAgZGVzY3JpcHRvbjogJ1J1biB0aGUgY3VycmVudCB0ZXN0cyBhZ2FpbnN0IHRoZSBDTEkgYXQgdGhlIGdpdmVuIHZlcnNpb24nLFxuICAgICAgICBhbGlhczogJ3UnLFxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgcmVxdWlyZXNBcmc6IHRydWUsXG4gICAgICAgIGRlcHJlY2F0ZWQ6ICdVc2UgLS1jbGktdmVyc2lvbiBpbnN0ZWFkJyxcbiAgICAgIH0pXG4gICAgICAub3B0aW9uKCdhdXRvLXNvdXJjZScsIHtcbiAgICAgICAgYWxpYXM6ICdhJyxcbiAgICAgICAgZGVzY3JpYmU6ICdBdXRvbWF0aWNhbGx5IGZpbmQgdGhlIHNvdXJjZSB0cmVlIGZyb20gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnknLFxuICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIHJlcXVpcmVzQXJnOiBmYWxzZSxcbiAgICAgICAgZGVwcmVjYXRlZDogJ1VzZSAtLXVzZS1zb3VyY2U9YXV0byBpbnN0ZWFkJyxcbiAgICAgIH0pXG4gICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgLy8gIFRlc3QgcnVubmluZyBmbGFnc1xuICAgICAgLm9wdGlvbigncnVuSW5CYW5kJywge1xuICAgICAgICBkZXNjcmlwdG9uOiAnUnVuIGFsbCB0ZXN0cyBpbiBvbmUgTm9kZSBwcm9jZXNzJyxcbiAgICAgICAgYWxpYXM6ICdpJyxcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgfSlcbiAgICAgIC5vcHRpb24oJ3Rlc3QnLCB7XG4gICAgICAgIGRlc2NyaXB0b246ICdUZXN0IHBhdHRlcm4gdG8gc2VsZWN0aXZlbHkgcnVuIHRlc3RzJyxcbiAgICAgICAgYWxpYXM6ICd0JyxcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIHJlcXVpcmVzQXJnOiB0cnVlLFxuICAgICAgfSlcbiAgICAgIC5vcHRpb24oJ3Rlc3QtZmlsZScsIHtcbiAgICAgICAgZGVzY3JpYmU6ICdUaGUgc3BlY2lmaWMgdGVzdCBmaWxlIHRvIHJ1bicsXG4gICAgICAgIGFsaWFzOiAnRicsXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICByZXF1aXJlc0FyZzogdHJ1ZSxcbiAgICAgIH0pXG4gICAgICAub3B0aW9ucygnc2VlZCcsIHtcbiAgICAgICAgZGVzY3JpYmU6ICdTZXQgdGhlIHNlZWQgdmFsdWUgdG8gcmVwbGljYXRlIGEgdGVzdCBydW4nLFxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgcmVxdWlyZXNBcmc6IHRydWUsXG4gICAgICB9KVxuICAgICAgLm9wdGlvbnMoJ3ZlcmJvc2UnLCB7XG4gICAgICAgIGFsaWFzOiAndicsXG4gICAgICAgIGRlc2NyaWJlOiAnUnVuIGluIHZlcmJvc2UgbW9kZScsXG4gICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgcmVxdWlyZXNBcmc6IGZhbHNlLFxuICAgICAgfSlcbiAgICAgIC5vcHRpb25zKCdwYXNzV2l0aE5vVGVzdHMnLCB7XG4gICAgICAgIGRlc2NyaWJlOiAnQWxsb3cgcGFzc2luZyBpZiB0aGUgdGVzdCBzdWl0ZSBpcyBub3QgZm91bmQgKGRlZmF1bHQgdHJ1ZSB3aGVuIElTX0NBTkFSWSBtb2RlLCBmYWxzZSBvdGhlcndpc2UpJyxcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICByZXF1aXJlc0FyZzogZmFsc2UsXG4gICAgICB9KVxuICAgICAgLm9wdGlvbnMoJ21heFdvcmtlcnMnLCB7XG4gICAgICAgIGFsaWFzOiAndycsXG4gICAgICAgIGRlc2NyaWJlOiAnU3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB3b3JrZXJzIHRoZSB3b3JrZXItcG9vbCB3aWxsIHNwYXduIGZvciBydW5uaW5nIHRlc3RzLiBXZSB1c2UgYSBzZW5zaWJsZSBkZWZhdWx0IGZvciBydW5uaW5nIGNsaSBpbnRlZyB0ZXN0cy4nLFxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgcmVxdWlyZXNBcmc6IHRydWUsXG4gICAgICB9KVxuICAgICAgLm9wdGlvbnMoJ3NoYXJkJywge1xuICAgICAgICBkZXNjcmliZTogJ1RoZSB0ZXN0IHN1aXRlIHNoYXJkIHRvIGV4ZWN1dGUgaW4gYSBmb3JtYXQgb2YgKD88c2hhcmRJbmRleD5cXGQrKS8oPzxzaGFyZENvdW50PlxcZCspLiBgc2hhcmRJbmRleGAgZGVzY3JpYmVzIHdoaWNoIHNoYXJkIHRvIHNlbGVjdCB3aGlsZSBgc2hhcmRDb3VudGAgY29udHJvbHMgdGhlIG51bWJlciBvZiBzaGFyZHMgdGhlIHN1aXRlIHNob3VsZCBiZSBzcGxpdCBpbnRvLiBgc2hhcmRJbmRleGAgYW5kIGBzaGFyZENvdW50YCBoYXZlIHRvIGJlIDEtYmFzZWQsIHBvc2l0aXZlIG51bWJlcnMsIGFuZCBgc2hhcmRJbmRleGAgaGFzIHRvIGJlIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gYHNoYXJkQ291bnRgLicsXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICByZXF1aXJlc0FyZzogdHJ1ZSxcbiAgICAgIH0pXG4gICAgICAub3B0aW9ucygncmV0cnknLCB7XG4gICAgICAgIGRlc2NyaWJlOiAnTnVtYmVyIG9mIHRpbWVzIHRvIHJldHJ5IGZhaWxlZCB0ZXN0cy4nLFxuICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgcmVxdWlyZXNBcmc6IHRydWUsXG4gICAgICAgIGRlZmF1bHQ6ICEhKHByb2Nlc3MuZW52LkNJIHx8IHByb2Nlc3MuZW52LkNPREVCVUlMRF9CVUlMRF9JRCkgPyAyIDogMCxcbiAgICAgICAgZGVmYXVsdERlc2NyaXB0aW9uOiAnMiBpbiBDSS9Db2RlQnVpbGQsIDAgb3RoZXJ3aXNlJyxcbiAgICAgIH0pLCAoKSA9PiB7XG4gICAgfSxcbiAgICApXG4gICAgLnN0cmljdCgpXG4gICAgLnBhcnNlKCk7XG5cbiAgY29uc3Qgc3VpdGVOYW1lID0gYXJncy5TVUlURU5BTUU7XG5cbiAgLy8gU28gbWFueSB3YXlzIHRvIHNwZWNpZnkgdGhpcywgYW5kIHdpdGggdmFyaW91cyB3YXlzIHRvIHNwZWxsIHRoZSBzYW1lIGZsYWcgKG9fTylcbiAgLy8gQWxzbywgc29tZSBvZiB0aGVtIGRlcGVuZCBvbiBlYWNoIG90aGVyIGZvciBjb252ZW5pZW5jZS5cbiAgY29uc3QgY2xpU291cmNlID0gbmV3IFVuaXF1ZU9wdGlvbjxJUnVubmVyU291cmNlPElUZXN0Q2xpU291cmNlPj4oJ0NMSSB2ZXJzaW9uJyk7XG4gIGNvbnN0IGNka0Fzc2V0c1NvdXJjZSA9IG5ldyBVbmlxdWVPcHRpb248SVJ1bm5lclNvdXJjZTxJVGVzdENsaVNvdXJjZT4+KCdjZGstYXNzZXRzIHZlcnNpb24nKTtcblxuICAvLyBTcGVjaWZpYyBDTEkgdmVyc2lvblxuICBmb3IgKGNvbnN0IGZsYWdBbGlhcyBvZiBbJ2NsaS12ZXJzaW9uJywgJ3VzZS1jbGktcmVsZWFzZSddIGFzIGNvbnN0KSB7XG4gICAgaWYgKGFyZ3NbZmxhZ0FsaWFzXSkge1xuICAgICAgY2xpU291cmNlLnNldChuZXcgUnVubmVyQ2xpTnBtU291cmNlKENMSV9QQUNLQUdFX05BTUUsIGFyZ3NbZmxhZ0FsaWFzXSksIGAtLSR7ZmxhZ0FsaWFzfWApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNwZWNpZmljIGNkay1hc3NldHMgdmVyc2lvblxuICBpZiAoYXJnc1snY2RrLWFzc2V0cy12ZXJzaW9uJ10pIHtcbiAgICBjZGtBc3NldHNTb3VyY2Uuc2V0KG5ldyBSdW5uZXJDbGlOcG1Tb3VyY2UoQ0RLX0FTU0VUU19QQUNLQUdFX05BTUUsIGFyZ3NbJ2Nkay1hc3NldHMtdmVyc2lvbiddKSwgJy0tY2RrLWFzc2V0cy12ZXJzaW9uJyk7XG4gIH1cblxuICAvLyBTcGVjaWZpY2FsbHkgdXNlIGEgc291cmNlIGxvY2F0aW9uXG4gIGZvciAoY29uc3QgZmxhZ0FsaWFzIG9mIFsnY2xpLXNvdXJjZScsICd1c2Utc291cmNlJ10gYXMgY29uc3QpIHtcbiAgICBpZiAoYXJnc1tmbGFnQWxpYXNdKSB7XG4gICAgICBjb25zdCByb290ID0gYXJnc1tmbGFnQWxpYXNdID09PSAnYXV0bycgPyBhd2FpdCBhdXRvRmluZFJlcG9Sb290KCkgOiBhcmdzW2ZsYWdBbGlhc107XG4gICAgICBjbGlTb3VyY2Uuc2V0KG5ldyBSdW5uZXJDbGlSZXBvU291cmNlKENMSV9QQUNLQUdFX05BTUUsIHJvb3QpLCBgLS0ke2ZsYWdBbGlhc31gKTtcbiAgICAgIGNka0Fzc2V0c1NvdXJjZS5zZXQobmV3IFJ1bm5lckNsaVJlcG9Tb3VyY2UoQ0RLX0FTU0VUU19QQUNLQUdFX05BTUUsIHJvb3QpLCBgLS0ke2ZsYWdBbGlhc31gKTtcbiAgICB9XG4gIH1cblxuICAvLyBTcGVjaWZpY2FsbHkgcmVxdWVzdCB0aGF0IGEgc291cmNlIGxvY2F0aW9uIGlzIGdpdmVuLCBvciB3ZSBkaWRuJ3QgZmluZCBhIENMSSB5ZXQuXG4gIC8vIEEgQ0xJIHNvdXJjZSBpcyByZXF1aXJlZCwgc28gaWYgdGhpcyBmYWlscyB0aGF0J3MgYWxyaWdodC5cbiAgaWYgKGFyZ3NbJ2F1dG8tc291cmNlJ10gfHwgIWNsaVNvdXJjZS5pc1NldCgpKSB7XG4gICAgY2xpU291cmNlLnNldChuZXcgUnVubmVyQ2xpUmVwb1NvdXJjZShDTElfUEFDS0FHRV9OQU1FLCBhd2FpdCBhdXRvRmluZFJlcG9Sb290KCkpLCAnLS1hdXRvLXNvdXJjZScpO1xuICB9XG5cbiAgLy8gSWYgdGhlIENMSSBpcyB0YWtlbiBmcm9tIHRoZSBzb3VyY2UsIGFuZCBjZGstYXNzZXRzIGlzIG5vdCBzZXQsIHdlIGNhbiBjb3B5IHRoZSBjZGstYXNzZXRzIHNvdXJjZSBmcm9tIHRoZSBDTEkgc291cmNlLlxuICBpZiAoIWNka0Fzc2V0c1NvdXJjZS5pc1NldCgpKSB7XG4gICAgY29uc3QgY2xpU3JjID0gY2xpU291cmNlLmFzc2VydCgpO1xuICAgIGlmIChjbGlTcmMgaW5zdGFuY2VvZiBSdW5uZXJDbGlSZXBvU291cmNlKSB7XG4gICAgICBjZGtBc3NldHNTb3VyY2Uuc2V0KG5ldyBSdW5uZXJDbGlSZXBvU291cmNlKENES19BU1NFVFNfUEFDS0FHRV9OQU1FLCBjbGlTcmMucmVwb1Jvb3QpLCAnY29waWVkIGZyb20gQ0xJIHNvdXJjZScpO1xuICAgIH1cbiAgfVxuXG4gIC8vIElmIGNkay1hc3NldHMgaXMgc3RpbGwgbm90IGNvbmZpZ3VyZWQsIGZhbGwgYmFjayB0byB0aGUgbGF0ZXN0IHZlcnNpb24gdGhhdCBpcyBhdmFpbGFibGVcbiAgaWYgKCFjZGtBc3NldHNTb3VyY2UuaXNTZXQoKSkge1xuICAgIGNka0Fzc2V0c1NvdXJjZS5zZXQobmV3IFJ1bm5lckNsaU5wbVNvdXJjZShDREtfQVNTRVRTX1BBQ0tBR0VfTkFNRSwgJ2xhdGVzdCcpLCAnLS1jZGstYXNzZXRzLXZlcnNpb24gbm90IHNldCcpO1xuICB9XG5cbiAgLy8gTGlicmFyeSBzb3VyY2UgaXMgZWl0aGVyIHRoZSBnaXZlbiBvbmUsIG9yICdsYXRlc3QnIChuaWNlIGFuZCBzaW1wbGUpXG4gIGNvbnN0IGxpYnJhcnlTb3VyY2U6IElSdW5uZXJTb3VyY2U8SVRlc3RMaWJyYXJ5U291cmNlPlxuICAgID0gbmV3IFJ1bm5lckxpYnJhcnlOcG1Tb3VyY2UoJ2F3cy1jZGstbGliJywgYXJnc1snZnJhbWV3b3JrLXZlcnNpb24nXSA/IGFyZ3NbJ2ZyYW1ld29yay12ZXJzaW9uJ10gOiAnbGF0ZXN0Jyk7XG5cbiAgLy8gVG9vbGtpdCBsaWIgc291cmNlIGlzIGVpdGhlciB0aGUgZ2l2ZW4gb25lLCBvciB0aGUgb25lIHRoYXQncyBiZWluZyBicm91Z2h0IGJ5ICdwYWNrYWdlLmpzb24nIGFscmVhZHksIG9yICdsYXRlc3QnXG4gIGNvbnN0IHRvb2xraXRMaWJQYWNrYWdlID0gJ0Bhd3MtY2RrL3Rvb2xraXQtbGliJztcbiAgbGV0IHRvb2xraXRTb3VyY2U6IElSdW5uZXJTb3VyY2U8SVRlc3RMaWJyYXJ5U291cmNlPiB8IHVuZGVmaW5lZDtcbiAgaWYgKGFyZ3NbJ3Rvb2xraXQtbGliLXZlcnNpb24nXSkge1xuICAgIHRvb2xraXRTb3VyY2UgPSBuZXcgUnVubmVyTGlicmFyeUdsb2JhbEluc3RhbGxTb3VyY2UodG9vbGtpdExpYlBhY2thZ2UsIGFyZ3NbJ3Rvb2xraXQtbGliLXZlcnNpb24nXSk7XG4gIH1cbiAgaWYgKCF0b29sa2l0U291cmNlKSB7XG4gICAgdG9vbGtpdFNvdXJjZSA9IGF3YWl0IFJ1bm5lckxpYnJhcnlQcmVpbnN0YWxsZWRTb3VyY2UuaXNQcmVpbnN0YWxsZWQodG9vbGtpdExpYlBhY2thZ2UpXG4gICAgICA/IG5ldyBSdW5uZXJMaWJyYXJ5UHJlaW5zdGFsbGVkU291cmNlKHRvb2xraXRMaWJQYWNrYWdlKVxuICAgICAgOiBuZXcgUnVubmVyTGlicmFyeUdsb2JhbEluc3RhbGxTb3VyY2UodG9vbGtpdExpYlBhY2thZ2UsICdsYXRlc3QnKTtcbiAgfVxuXG4gIHByb2Nlc3MuZW52LkpFU1RfUkVUUllfVElNRVMgPSBTdHJpbmcoYXJncy5yZXRyeSk7XG5cbiAgY29uc29sZS5sb2coJy0tLS0tLT4gQ29uZmlndXJhdGlvbicpO1xuICBjb25zb2xlLmxvZyhgICAgICAgICBUZXN0IHN1aXRlOiAgICAgICAgICR7c3VpdGVOYW1lfWApO1xuICBjb25zb2xlLmxvZyhgICAgICAgICBUZXN0IHZlcnNpb246ICAgICAgICR7dGhpc1BhY2thZ2VWZXJzaW9uKCl9YCk7XG4gIGNvbnNvbGUubG9nKGAgICAgICAgIENMSSBzb3VyY2U6ICAgICAgICAgJHtjbGlTb3VyY2UuYXNzZXJ0KCkuc291cmNlRGVzY3JpcHRpb259YCk7XG4gIGNvbnNvbGUubG9nKGAgICAgICAgIExpYnJhcnkgc291cmNlOiAgICAgJHtsaWJyYXJ5U291cmNlLnNvdXJjZURlc2NyaXB0aW9ufWApO1xuICBjb25zb2xlLmxvZyhgICAgICAgICBUb29sa2l0IGxpYiBzb3VyY2U6ICR7dG9vbGtpdFNvdXJjZS5zb3VyY2VEZXNjcmlwdGlvbn1gKTtcbiAgY29uc29sZS5sb2coYCAgICAgICAgY2RrLWFzc2V0cyBzb3VyY2U6ICAke2Nka0Fzc2V0c1NvdXJjZS5hc3NlcnQoKS5zb3VyY2VEZXNjcmlwdGlvbn1gKTtcbiAgY29uc29sZS5sb2coYCAgICAgICAgUmV0cnk6ICAgICAgICAgICAgICAke2FyZ3MucmV0cnl9YCk7XG5cbiAgaWYgKGFyZ3MudmVyYm9zZSkge1xuICAgIHByb2Nlc3MuZW52LlZFUkJPU0UgPSAnMSc7XG4gIH1cblxuICAvLyBNb3RpdmF0aW9uIGJlaGluZCB0aGlzIGJlaGF2aW9yOiB3aGVuIGFkZGluZyBhIG5ldyB0ZXN0IHN1aXRlIHRvIHRoZSBwaXBlbGluZSwgYmVjYXVzZSBvZiB0aGUgd2F5IG91clxuICAvLyBQaXBlbGluZSBwYWNrYWdlIHdvcmtzLCB0aGUgc3VpdGUgd291bGQgYmUgYWRkZWQgdG8gdGhlIHBpcGVsaW5lIEFORCBhcyBhIGNhbmFyeSBpbW1lZGlhdGVseS4gVGhlIGNhbmFyeVxuICAvLyB3b3VsZCBmYWlsIHVudGlsIHRoZSBwYWNrYWdlIHdhcyBhY3R1YWxseSByZWxlYXNlZCwgc28gZm9yIGNhbmFyaWVzIHdlIG1ha2UgYW4gZXhjZXB0aW9uIHNvIHRoYXQgdGhlIGluaXRpYWxcbiAgLy8gY2FuYXJ5IHdvdWxkIHN1Y2NlZWQgZXZlbiBpZiB0aGUgc3VpdGUgd2Fzbid0IHlldCBhdmFpbGFibGUuIFRoZSBmYWN0IHRoYXQgdGhlIHN1aXRlIGlzIG5vdCBvcHRpb25hbCBpblxuICAvLyB0aGUgcGlwZWxpbmUgcHJvdGVjdHMgdXMgZnJvbSB0eXBvcy5cbiAgY29uc3QgcGFzc1dpdGhOb1Rlc3RzID0gYXJncy5wYXNzV2l0aE5vVGVzdHMgPz8gISFwcm9jZXNzLmVudi5JU19DQU5BUlk7XG5cbiAgLy8gQ29tbXVuaWNhdGUgd2l0aCB0aGUgY29uZmlnIGZpbGUgKGludGVnLmplc3QuY29uZmlnLmpzKVxuICBwcm9jZXNzLmVudi5URVNUX1NVSVRFX05BTUUgPSBzdWl0ZU5hbWU7XG5cbiAgY29uc3QgZGlzcG9zYWJsZXMgPSBuZXcgQXJyYXk8eyBkaXNwb3NlKCk6IFByb21pc2U8dm9pZD4gfT4oKTtcbiAgdHJ5IHtcbiAgICBjb25zb2xlLmxvZygnLS0tLS0tPiBSZXNvbHZlZCB2ZXJzaW9ucycpO1xuICAgIGNvbnN0IGNsaSA9IGF3YWl0IGNsaVNvdXJjZS5hc3NlcnQoKS5ydW5uZXJQcmVwYXJlKCk7XG4gICAgZGlzcG9zYWJsZXMucHVzaChjbGkpO1xuICAgIGNvbnNvbGUubG9nKGAgICAgICAgIENMSTogICAgICAgICAgICAgJHtjbGkudmVyc2lvbn1gKTtcblxuICAgIGNvbnN0IGxpYnJhcnkgPSBhd2FpdCBsaWJyYXJ5U291cmNlLnJ1bm5lclByZXBhcmUoKTtcbiAgICBkaXNwb3NhYmxlcy5wdXNoKGxpYnJhcnkpO1xuICAgIGNvbnNvbGUubG9nKGAgICAgICAgIExpYnJhcnk6ICAgICAgICAgJHtsaWJyYXJ5LnZlcnNpb259YCk7XG5cbiAgICBjb25zdCB0b29sa2l0TGliID0gYXdhaXQgdG9vbGtpdFNvdXJjZS5ydW5uZXJQcmVwYXJlKCk7XG4gICAgZGlzcG9zYWJsZXMucHVzaCh0b29sa2l0TGliKTtcbiAgICBjb25zb2xlLmxvZyhgICAgICAgICBUb29sa2l0IGxpYnJhcnk6ICR7dG9vbGtpdExpYi52ZXJzaW9ufWApO1xuXG4gICAgY29uc3QgY2RrQXNzZXRzID0gYXdhaXQgY2RrQXNzZXRzU291cmNlLmFzc2VydCgpLnJ1bm5lclByZXBhcmUoKTtcbiAgICBkaXNwb3NhYmxlcy5wdXNoKGNka0Fzc2V0cyk7XG4gICAgY29uc29sZS5sb2coYCAgICAgICAgY2RrLWFzc2V0czogICAgICAke2Nka0Fzc2V0cy52ZXJzaW9ufWApO1xuXG4gICAgc2VyaWFsaXplU291cmNlcyh7XG4gICAgICBjbGksXG4gICAgICBsaWJyYXJ5LFxuICAgICAgdG9vbGtpdExpYixcbiAgICAgIGNka0Fzc2V0cyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGplc3RDb25maWcgPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAncmVzb3VyY2VzJywgJ2ludGVnLmplc3QuY29uZmlnLmpzJyk7XG5cbiAgICAvLyBGbGlwIGEgZmxhZyB0byBpbmRpY2F0ZSB3ZSdyZSB0ZXN0aW5nIENESyBpdHNlbGYuIFNvbWUgcGFydHMgb2YgQ0RLIGJlaGF2ZSBtb3JlIHRob3JvdWdobHlcbiAgICAvLyAoYnV0IHNsb3dseSkgaWYgdGhpcyBmbGFnIGlzIHNldC5cbiAgICBwcm9jZXNzLmVudi5URVNUSU5HX0NESyA9ICcxJztcblxuICAgIC8vIGplc3QtanVuaXQgcmVwb3J0ZXIgY29uZmlndXJhdGlvblxuICAgIHByb2Nlc3MuZW52LkpFU1RfU1VJVEVfTkFNRSA9ICdqZXN0IHRlc3RzJztcbiAgICBwcm9jZXNzLmVudi5KRVNUX0pVTklUX09VVFBVVF9ESVIgPSAnY292ZXJhZ2UnO1xuXG4gICAgYXdhaXQgamVzdC5ydW4oW1xuICAgICAgJy0tcmVwb3J0ZXJzPWRlZmF1bHQnLFxuICAgICAgJy0tcmVwb3J0ZXJzPWplc3QtanVuaXQnLFxuICAgICAgLy8gT3ZlcnJpZGUgSmVzdCdzIGRlZmF1bHQgNXMgdGltZW91dCB3aGljaCBpcyB0b28gbG93IGZvciBpbnRlZyB0ZXN0cy5cbiAgICAgIC8vIFRlc3RzIHVzaW5nIHdpdGhBd3MoKSB3aWxsIGZ1cnRoZXIgb3ZlcnJpZGUgdGhpcyB0byAyIGhvdXJzIHRvIGFjY291bnQgZm9yIHJlZ2lvbiBsb2NrIHdhaXQgdGltZXMuXG4gICAgICAnLS10ZXN0VGltZW91dD02MDAwMCcsXG4gICAgICAnLS1yYW5kb21pemUnLFxuICAgICAgLi4uYXJncy5zZWVkID8gW2AtLXNlZWQ9JHthcmdzLnNlZWR9YF0gOiBbXSxcbiAgICAgIC4uLmFyZ3MucnVuSW5CYW5kID8gWyctaSddIDogW10sXG4gICAgICAuLi5hcmdzLnRlc3QgPyBbJy10JywgYXJncy50ZXN0XSA6IFtdLFxuICAgICAgLi4uYXJncy52ZXJib3NlID8gWyctLXZlcmJvc2UnXSA6IFtdLFxuICAgICAgLi4uYXJncy5tYXhXb3JrZXJzID8gW2AtLW1heFdvcmtlcnM9JHthcmdzLm1heFdvcmtlcnN9YF0gOiBbXSxcbiAgICAgIC4uLnBhc3NXaXRoTm9UZXN0cyA/IFsnLS1wYXNzV2l0aE5vVGVzdHMnXSA6IFtdLFxuICAgICAgLi4uYXJnc1sndGVzdC1maWxlJ10gPyBbYXJnc1sndGVzdC1maWxlJ11dIDogW10sXG4gICAgICAuLi5hcmdzLnNoYXJkID8gW2AtLXNoYXJkPSR7YXJncy5zaGFyZH1gXSA6IFtdLFxuICAgIF0sIGplc3RDb25maWcpO1xuICB9IGZpbmFsbHkge1xuICAgIGZvciAoY29uc3QgZGlzcCBvZiBkaXNwb3NhYmxlcykge1xuICAgICAgYXdhaXQgZGlzcC5kaXNwb3NlKCk7XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIFVuaXF1ZU9wdGlvbjxBPiB7XG4gIHB1YmxpYyB2YWx1ZTogQSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBzb3VyY2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHdoYXQ6IHN0cmluZykge1xuICB9XG5cbiAgcHVibGljIGlzU2V0KCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgYXNzZXJ0KCk6IEEge1xuICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMud2hhdH0gbm90IGNvbmZpZ3VyZWRgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH1cblxuICBwdWJsaWMgc2V0KHg6IEEsIHNvdXJjZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLndoYXR9OiAke3NvdXJjZX0gYWxyZWFkeSBjb25maWd1cmVkIHZpYSAke3RoaXMuc291cmNlfWApO1xuICAgIH1cbiAgICB0aGlzLnZhbHVlID0geDtcbiAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0aGlzUGFja2FnZVZlcnNpb24oKTogc3RyaW5nIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgcmV0dXJuIHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb247XG59XG5cbm1haW4oKS5jYXRjaChlID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgY29uc29sZS5lcnJvcihlKTtcbiAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG59KTtcbiJdfQ==
|
package/lib/process.js
CHANGED
|
@@ -18,7 +18,10 @@ class Process {
|
|
|
18
18
|
* Spawn a process without a forcing a TTY.
|
|
19
19
|
*/
|
|
20
20
|
static spawn(command, args, options = {}) {
|
|
21
|
-
|
|
21
|
+
// Join command and args into a single shell string to avoid DEP0190 deprecation warning
|
|
22
|
+
// (passing args with shell: true is deprecated because they are not escaped).
|
|
23
|
+
const fullCommand = [command, ...args].join(' ');
|
|
24
|
+
const process = child.spawn(fullCommand, [], {
|
|
22
25
|
shell: true,
|
|
23
26
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
24
27
|
...options,
|
|
@@ -95,4 +98,4 @@ class NonPtyProcess {
|
|
|
95
98
|
}
|
|
96
99
|
}
|
|
97
100
|
}
|
|
98
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInByb2Nlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUNBQXVDO0FBRXZDLGdDQUFnQztBQTJDaEMsTUFBYSxPQUFPO0lBQ2xCOztPQUVHO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFlLEVBQUUsSUFBYyxFQUFFLFVBQTRELEVBQUU7UUFDcEgsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFO1lBQ3ZDLElBQUksRUFBRSxhQUFhO1lBQ25CLEdBQUcsT0FBTztTQUNYLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFlLEVBQUUsSUFBYyxFQUFFLFVBQThCLEVBQUU7UUFDbkYsd0ZBQXdGO1FBQ3hGLDhFQUE4RTtRQUM5RSxNQUFNLFdBQVcsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUU7WUFDM0MsS0FBSyxFQUFFLElBQUk7WUFDWCxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztZQUNqQyxHQUFHLE9BQU87U0FDWCxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7Q0FDRjtBQTFCRCwwQkEwQkM7QUFFRCxNQUFNLFVBQVU7SUFDc0I7SUFBcEMsWUFBb0MsT0FBaUI7UUFBakIsWUFBTyxHQUFQLE9BQU8sQ0FBVTtJQUNyRCxDQUFDO0lBRU0sUUFBUSxDQUFDLENBQVU7UUFDeEIsc0RBQXNEO0lBQ3hELENBQUM7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dGVudCI6WyJpbXBvcnQgKiBhcyBjaGlsZCBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB0eXBlIHsgUmVhZGFibGUsIFdyaXRhYmxlIH0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCAqIGFzIHB0eSBmcm9tICdub2RlLXB0eSc7XG5cbi8qKlxuICogSVByb2Nlc3MgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIHdvcmsgd2l0aCBhIHN1YnByb2Nlc3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVByb2Nlc3Mge1xuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgd2hlbiBhIGNodW5rIGlzIHdyaXR0ZW4gdG8gc3Rkb3V0LlxuICAgKi9cbiAgb25TdGRvdXQoY2FsbGJhY2s6IChjaHVuazogQnVmZmVyKSA9PiB2b2lkKTogdm9pZDtcblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBjYWxsYmFjayB0byBiZSBpbnZva2VkIHdoZW4gYSBjaHVuayBpcyB3cml0dGVuIHRvIHN0ZGVyci5cbiAgICovXG4gIG9uU3RkZXJyKGNhbGxiYWNrOiAoY2h1bms6IEJ1ZmZlcikgPT4gdm9pZCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCB3aGVuIHRoZSBwcm9jZXNzIGV4aXN0cy5cbiAgICovXG4gIG9uRXhpdChjYWxsYmFjazogKGV4aXRDb2RlOiBudW1iZXIpID0+IHZvaWQpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgaWYgdGhlIHByb2Nlc3MgZmFpbGVkIHRvIHN0YXJ0LlxuICAgKi9cbiAgb25FcnJvcihjYWxsYmFjazogKGVycm9yOiBFcnJvcikgPT4gdm9pZCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFdyaXRlIHRoZSBwcm9jZXNzIHN0ZGluIHN0cmVhbS5cbiAgICovXG4gIHdyaXRlU3RkaW4oZGF0YTogc3RyaW5nKTogdm9pZDtcblxuICAvKipcbiAgICogU2luZ2FsIHRoYXQgbm8gbW9yZSBkYXRhIHdpbGwgYmUgd3JpdHRlbiB0byBzdGRpbi4gSW4gbm9uIHR0eSBwcm9jZXNzIHlvdSBtdXN0XG4gICAqIGNhbGwgdGhpcyBtZXRob2QgdG8gbWFrZSBzdXJlIHRoZSBwcm9jZXNzIGV4aXRzLlxuICAgKlxuICAgKiBAcGFyYW0gZGVsYXkgLSBvcHRpb25hbCBkZWxheSBpbiBtaWxsaXNlY29uZHMgYmVmb3JlIHRoZSBzaWduYWwgaXMgc2VudC5cbiAgICpcbiAgICovXG4gIGVuZFN0ZGluKGRlbGF5PzogbnVtYmVyKTogdm9pZDtcblxufVxuXG5leHBvcnQgY2xhc3MgUHJvY2VzcyB7XG4gIC8qKlxuICAgKiBTcGF3biBhIHByb2Nlc3Mgd2l0aCBhIFRUWSBhdHRhY2hlZC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc3Bhd25UVFkoY29tbWFuZDogc3RyaW5nLCBhcmdzOiBzdHJpbmdbXSwgb3B0aW9uczogcHR5LklQdHlGb3JrT3B0aW9ucyB8IHB0eS5JV2luZG93c1B0eUZvcmtPcHRpb25zID0ge30pOiBJUHJvY2VzcyB7XG4gICAgY29uc3QgcHJvY2VzcyA9IHB0eS5zcGF3bihjb21tYW5kLCBhcmdzLCB7XG4gICAgICBuYW1lOiAneHRlcm0tY29sb3InLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgICByZXR1cm4gbmV3IFB0eVByb2Nlc3MocHJvY2Vzcyk7XG4gIH1cblxuICAvKipcbiAgICogU3Bhd24gYSBwcm9jZXNzIHdpdGhvdXQgYSBmb3JjaW5nIGEgVFRZLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzcGF3bihjb21tYW5kOiBzdHJpbmcsIGFyZ3M6IHN0cmluZ1tdLCBvcHRpb25zOiBjaGlsZC5TcGF3bk9wdGlvbnMgPSB7fSk6IElQcm9jZXNzIHtcbiAgICAvLyBKb2luIGNvbW1hbmQgYW5kIGFyZ3MgaW50byBhIHNpbmdsZSBzaGVsbCBzdHJpbmcgdG8gYXZvaWQgREVQMDE5MCBkZXByZWNhdGlvbiB3YXJuaW5nXG4gICAgLy8gKHBhc3NpbmcgYXJncyB3aXRoIHNoZWxsOiB0cnVlIGlzIGRlcHJlY2F0ZWQgYmVjYXVzZSB0aGV5IGFyZSBub3QgZXNjYXBlZCkuXG4gICAgY29uc3QgZnVsbENvbW1hbmQgPSBbY29tbWFuZCwgLi4uYXJnc10uam9pbignICcpO1xuICAgIGNvbnN0IHByb2Nlc3MgPSBjaGlsZC5zcGF3bihmdWxsQ29tbWFuZCwgW10sIHtcbiAgICAgIHNoZWxsOiB0cnVlLFxuICAgICAgc3RkaW86IFsnaWdub3JlJywgJ3BpcGUnLCAncGlwZSddLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgICByZXR1cm4gbmV3IE5vblB0eVByb2Nlc3MocHJvY2Vzcyk7XG4gIH1cbn1cblxuY2xhc3MgUHR5UHJvY2VzcyBpbXBsZW1lbnRzIElQcm9jZXNzIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcHJvY2VzczogcHR5LklQdHkpIHtcbiAgfVxuXG4gIHB1YmxpYyBlbmRTdGRpbihfPzogbnVtYmVyKTogdm9pZCB7XG4gICAgLy8gbm90IG5lZWRlZCBiZWNhdXNlIGFsbCBzdHJlYW1zIGFyZSB0aGUgc2FtZSBpbiB0dHkuXG4gIH1cblxuICBwdWJsaWMgb25FcnJvcihfOiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgLy8gbm90IG5lZWRlZCBiZWNhdXNlIHRoZSBwdHkuc3Bhd24gd2lsbCBzaW1wbHkgZmFpbCBpbiB0aGlzIGNhc2UuXG4gIH1cblxuICBwdWJsaWMgb25TdGRvdXQoY2FsbGJhY2s6IChjaHVuazogQnVmZmVyKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5wcm9jZXNzLm9uRGF0YSgoZSkgPT4gY2FsbGJhY2soQnVmZmVyLmZyb20oZSkpKTtcbiAgfVxuXG4gIHB1YmxpYyBvblN0ZGVycihfY2FsbGJhY2s6IChjaHVuazogQnVmZmVyKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9ub2RlLXB0eS9pc3N1ZXMvNzFcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCByZWdpc3RlciBjYWxsYmFjayBmb3IgXFwnc3RkZXJyXFwnLiBBIHR0eSBkb2VzIG5vdCBoYXZlIHNlcGFyYXRlIG91dHB1dCBhbmQgZXJyb3IgY2hhbm5lbHMnKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkV4aXQoY2FsbGJhY2s6IChleGl0Q29kZTogbnVtYmVyKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5wcm9jZXNzLm9uRXhpdCgoZSkgPT4ge1xuICAgICAgY2FsbGJhY2soZS5leGl0Q29kZSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgd3JpdGVTdGRpbihkYXRhOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBpbiBhIHB0eSBhbGwgc3RyZWFtcyBhcmUgdGhlIHNhbWVcbiAgICB0aGlzLnByb2Nlc3Mud3JpdGUoZGF0YSk7XG4gIH1cbn1cblxuY2xhc3MgTm9uUHR5UHJvY2VzcyBpbXBsZW1lbnRzIElQcm9jZXNzIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcHJvY2VzczogY2hpbGQuQ2hpbGRQcm9jZXNzKSB7XG4gIH1cblxuICBwdWJsaWMgb25FcnJvcihjYWxsYmFjazogKGVycm9yOiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMucHJvY2Vzcy5vbmNlKCdlcnJvcicsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIHB1YmxpYyBvblN0ZG91dChjYWxsYmFjazogKGNodW5rOiBCdWZmZXIpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLmFzc2VydERlZmluZWQoJ3N0ZG91dCcsIHRoaXMucHJvY2Vzcy5zdGRvdXQpO1xuICAgIHRoaXMucHJvY2Vzcy5zdGRvdXQub24oJ2RhdGEnLCBjYWxsYmFjayk7XG4gIH1cblxuICBwdWJsaWMgb25TdGRlcnIoY2FsbGJhY2s6IChjaHVuazogQnVmZmVyKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5hc3NlcnREZWZpbmVkKCdzdGRlcnInLCB0aGlzLnByb2Nlc3Muc3RkZXJyKTtcbiAgICB0aGlzLnByb2Nlc3Muc3RkZXJyLm9uKCdkYXRhJywgY2FsbGJhY2spO1xuICB9XG5cbiAgcHVibGljIG9uRXhpdChjYWxsYmFjazogKGV4aXRDb2RlOiBudW1iZXIpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLnByb2Nlc3Mub24oJ2Nsb3NlJywgY2FsbGJhY2spO1xuICB9XG5cbiAgcHVibGljIHdyaXRlU3RkaW4oY29udGVudDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5hc3NlcnREZWZpbmVkKCdzdGRpbicsIHRoaXMucHJvY2Vzcy5zdGRpbik7XG4gICAgdGhpcy5wcm9jZXNzLnN0ZGluLndyaXRlKGNvbnRlbnQpO1xuICB9XG5cbiAgcHVibGljIGVuZFN0ZGluKGRlbGF5PzogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvY2Vzcy5zdGRpbiA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHN0ZGluIGRlZmluZWQgZm9yIHByb2Nlc3MnKTtcbiAgICB9XG4gICAgaWYgKGRlbGF5KSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucHJvY2Vzcy5zdGRpbiEuZW5kKCksIGRlbGF5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9jZXNzLnN0ZGluIS5lbmQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXNzZXJ0RGVmaW5lZChuYW1lOiAnc3RkaW4nIHwgJ3N0ZG91dCcgfCAnc3RkZXJyJywgc3RyZWFtPzogUmVhZGFibGUgfCBXcml0YWJsZSB8IHVuZGVmaW5lZCB8IG51bGwpOiBhc3NlcnRzIHN0cmVhbSB7XG4gICAgaWYgKHN0cmVhbSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vICR7bmFtZX0gZGVmaW5lZCBmb3IgY2hpbGQgcHJvY2Vzc2ApO1xuICAgIH1cbiAgfVxufVxuIl19
|
package/lib/regions.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function allBut(exclude: string[]): string[];
|
package/lib/regions.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.allBut = allBut;
|
|
4
|
+
/**
|
|
5
|
+
* Regions supported by atmosphere
|
|
6
|
+
*/
|
|
7
|
+
const ALL_REGIONS = [
|
|
8
|
+
'us-east-1',
|
|
9
|
+
'us-east-2',
|
|
10
|
+
'us-west-1',
|
|
11
|
+
'us-west-2',
|
|
12
|
+
'ap-south-1',
|
|
13
|
+
'ap-northeast-1',
|
|
14
|
+
'ap-northeast-2',
|
|
15
|
+
'ap-northeast-3',
|
|
16
|
+
'ap-southeast-1',
|
|
17
|
+
'ap-southeast-2',
|
|
18
|
+
'ca-central-1',
|
|
19
|
+
'eu-central-1',
|
|
20
|
+
'eu-west-1',
|
|
21
|
+
'eu-west-2',
|
|
22
|
+
'eu-west-3',
|
|
23
|
+
'eu-north-1',
|
|
24
|
+
'sa-east-1',
|
|
25
|
+
'af-south-1',
|
|
26
|
+
'ap-east-1',
|
|
27
|
+
'ap-south-2',
|
|
28
|
+
'ap-southeast-4',
|
|
29
|
+
'eu-central-2',
|
|
30
|
+
'eu-south-1',
|
|
31
|
+
'ap-southeast-3',
|
|
32
|
+
'eu-south-2',
|
|
33
|
+
'il-central-1',
|
|
34
|
+
'ap-southeast-5',
|
|
35
|
+
'ap-southeast-7',
|
|
36
|
+
'ca-west-1',
|
|
37
|
+
'mx-central-1',
|
|
38
|
+
// currently experiencing service distruptions.
|
|
39
|
+
// 'me-central-1',
|
|
40
|
+
// 'me-south-1',
|
|
41
|
+
];
|
|
42
|
+
function allBut(exclude) {
|
|
43
|
+
return Array.from(new Set(ALL_REGIONS.filter((r) => !exclude.includes(r))));
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJlZ2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUF3Q0Esd0JBRUM7QUExQ0Q7O0dBRUc7QUFDSCxNQUFNLFdBQVcsR0FBRztJQUNsQixXQUFXO0lBQ1gsV0FBVztJQUNYLFdBQVc7SUFDWCxXQUFXO0lBQ1gsWUFBWTtJQUNaLGdCQUFnQjtJQUNoQixnQkFBZ0I7SUFDaEIsZ0JBQWdCO0lBQ2hCLGdCQUFnQjtJQUNoQixnQkFBZ0I7SUFDaEIsY0FBYztJQUNkLGNBQWM7SUFDZCxXQUFXO0lBQ1gsV0FBVztJQUNYLFdBQVc7SUFDWCxZQUFZO0lBQ1osV0FBVztJQUNYLFlBQVk7SUFDWixXQUFXO0lBQ1gsWUFBWTtJQUNaLGdCQUFnQjtJQUNoQixjQUFjO0lBQ2QsWUFBWTtJQUNaLGdCQUFnQjtJQUNoQixZQUFZO0lBQ1osY0FBYztJQUNkLGdCQUFnQjtJQUNoQixnQkFBZ0I7SUFDaEIsV0FBVztJQUNYLGNBQWM7SUFFZCwrQ0FBK0M7SUFDL0Msa0JBQWtCO0lBQ2xCLGdCQUFnQjtDQUNqQixDQUFDO0FBRUYsU0FBZ0IsTUFBTSxDQUFDLE9BQWlCO0lBQ3RDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVnaW9ucyBzdXBwb3J0ZWQgYnkgYXRtb3NwaGVyZVxuICovXG5jb25zdCBBTExfUkVHSU9OUyA9IFtcbiAgJ3VzLWVhc3QtMScsXG4gICd1cy1lYXN0LTInLFxuICAndXMtd2VzdC0xJyxcbiAgJ3VzLXdlc3QtMicsXG4gICdhcC1zb3V0aC0xJyxcbiAgJ2FwLW5vcnRoZWFzdC0xJyxcbiAgJ2FwLW5vcnRoZWFzdC0yJyxcbiAgJ2FwLW5vcnRoZWFzdC0zJyxcbiAgJ2FwLXNvdXRoZWFzdC0xJyxcbiAgJ2FwLXNvdXRoZWFzdC0yJyxcbiAgJ2NhLWNlbnRyYWwtMScsXG4gICdldS1jZW50cmFsLTEnLFxuICAnZXUtd2VzdC0xJyxcbiAgJ2V1LXdlc3QtMicsXG4gICdldS13ZXN0LTMnLFxuICAnZXUtbm9ydGgtMScsXG4gICdzYS1lYXN0LTEnLFxuICAnYWYtc291dGgtMScsXG4gICdhcC1lYXN0LTEnLFxuICAnYXAtc291dGgtMicsXG4gICdhcC1zb3V0aGVhc3QtNCcsXG4gICdldS1jZW50cmFsLTInLFxuICAnZXUtc291dGgtMScsXG4gICdhcC1zb3V0aGVhc3QtMycsXG4gICdldS1zb3V0aC0yJyxcbiAgJ2lsLWNlbnRyYWwtMScsXG4gICdhcC1zb3V0aGVhc3QtNScsXG4gICdhcC1zb3V0aGVhc3QtNycsXG4gICdjYS13ZXN0LTEnLFxuICAnbXgtY2VudHJhbC0xJyxcblxuICAvLyBjdXJyZW50bHkgZXhwZXJpZW5jaW5nIHNlcnZpY2UgZGlzdHJ1cHRpb25zLlxuICAvLyAnbWUtY2VudHJhbC0xJyxcbiAgLy8gJ21lLXNvdXRoLTEnLFxuXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFsbEJ1dChleGNsdWRlOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChBTExfUkVHSU9OUy5maWx0ZXIoKHIpID0+ICFleGNsdWRlLmluY2x1ZGVzKHIpKSkpO1xufVxuIl19
|
package/lib/with-aws.js
CHANGED
|
@@ -32,6 +32,9 @@ function atmospherePool() {
|
|
|
32
32
|
* Allocate the next region from the REGION pool and dispose it afterwards.
|
|
33
33
|
*/
|
|
34
34
|
function withAws(block, options = {}) {
|
|
35
|
+
// Set a high Jest timeout because it includes the time waiting for locks; account for worst-case single-threaded runtime.
|
|
36
|
+
// This is not the actual test execution time. The effective test timeout is handled by withTimeout().
|
|
37
|
+
jest.setTimeout(2 * 60 * 60_000);
|
|
35
38
|
return async (context) => {
|
|
36
39
|
const disableBootstrap = options.disableBootstrap ?? false;
|
|
37
40
|
if (atmosphereEnabled()) {
|
|
@@ -129,4 +132,4 @@ async function sanityCheck(aws) {
|
|
|
129
132
|
}
|
|
130
133
|
}
|
|
131
134
|
let sanityChecked;
|
|
132
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1hd3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3aXRoLWF3cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU9BLDhDQUdDO0FBRUQsZ0RBTUM7QUFFRCx3Q0FNQztBQXlCRCwwQkErREM7QUFHRCxnQ0FXQztBQS9IRCwwRUFBa0U7QUFDbEUsK0JBQW1DO0FBRW5DLG1EQUErQztBQUcvQyxTQUFnQixpQkFBaUI7SUFDL0IsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQztJQUN6RCxPQUFPLE9BQU8sS0FBSyxNQUFNLElBQUksT0FBTyxLQUFLLEdBQUcsQ0FBQztBQUMvQyxDQUFDO0FBRUQsU0FBZ0Isa0JBQWtCO0lBQ2hDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUM7SUFDeEQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxTQUFnQixjQUFjO0lBQzVCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUM7SUFDcEQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFvQkQ7Ozs7R0FJRztBQUNILFNBQWdCLE9BQU8sQ0FDckIsS0FBMkUsRUFDM0UsVUFBNkIsRUFBRTtJQUUvQixPQUFPLEtBQUssRUFBRSxPQUFVLEVBQUUsRUFBRTtRQUMxQixNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLENBQUM7UUFFM0QsSUFBSSxpQkFBaUIsRUFBRSxFQUFFLENBQUM7WUFDeEIsTUFBTSxVQUFVLEdB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QzlCLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVc7UUFDckMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsSUFBSSxXQUFXLENBQUMsQ0FBQztJQUU5RSxXQUFXLEdBQUcsNEJBQVksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsS0FBSyxVQUFVLFdBQVcsQ0FBQyxHQUFlO0lBQ3hDLElBQUksYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQztZQUNILE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BCLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN0RixDQUFDO0lBQ0gsQ0FBQztJQUNELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7SUFDakYsQ0FBQztBQUNILENBQUM7QUFDRCxJQUFJLGFBQWtDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbnN0cmFpbnQgfSBmcm9tICdAY2RrbGFicy9jZGstYXRtb3NwaGVyZS1jbGllbnQnO1xuaW1wb3J0IHsgQXRtb3NwaGVyZUNsaWVudCB9IGZyb20gJ0BjZGtsYWJzL2Nkay1hdG1vc3BoZXJlLWNsaWVudCc7XG5pbXBvcnQgeyBBd3NDbGllbnRzIH0gZnJvbSAnLi9hd3MnO1xuaW1wb3J0IHR5cGUgeyBUZXN0Q29udGV4dCB9IGZyb20gJy4vaW50ZWctdGVzdCc7XG5pbXBvcnQgeyBSZXNvdXJjZVBvb2wgfSBmcm9tICcuL3Jlc291cmNlLXBvb2wnO1xuaW1wb3J0IHR5cGUgeyBEaXNhYmxlQm9vdHN0cmFwQ29udGV4dCB9IGZyb20gJy4vd2l0aC1jZGstYXBwJztcblxuZXhwb3J0IGZ1bmN0aW9uIGF0bW9zcGhlcmVFbmFibGVkKCk6IGJvb2xlYW4ge1xuICBjb25zdCBlbmFibGVkID0gcHJvY2Vzcy5lbnYuQ0RLX0lOVEVHX0FUTU9TUEhFUkVfRU5BQkxFRDtcbiAgcmV0dXJuIGVuYWJsZWQgPT09ICd0cnVlJyB8fCBlbmFibGVkID09PSAnMSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdG1vc3BoZXJlRW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgY29uc3QgdmFsdWUgPSBwcm9jZXNzLmVudi5DREtfSU5URUdfQVRNT1NQSEVSRV9FTkRQT0lOVDtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ0RLX0lOVEVHX0FUTU9TUEhFUkVfRU5EUE9JTlQgaXMgbm90IGRlZmluZWQnKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdG1vc3BoZXJlUG9vbCgpIHtcbiAgY29uc3QgdmFsdWUgPSBwcm9jZXNzLmVudi5DREtfSU5URUdfQVRNT1NQSEVSRV9QT09MO1xuICBpZiAoIXZhbHVlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDREtfSU5URUdfQVRNT1NQSEVSRV9QT09MIGlzIG5vdCBkZWZpbmVkJyk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgdHlwZSBBd3NDb250ZXh0ID0geyByZWFkb25seSBhd3M6IEF3c0NsaWVudHMgfTtcblxuZXhwb3J0IGludGVyZmFjZSBBd3NDb250ZXh0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBSZXF1ZXN0IHRoZSB0ZXN0IGVudmlyb25tZW50IHRvIGJlIGluIG9uZSBvZiB0aGVzZSByZWdpb25zXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYWxsIHJlZ2lvbnMgYXJlIHBvc3NpYmxlXG4gICAqL1xuICByZWFkb25seSByZWdpb25zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIERvIG5vdCBib290c3RyYXAgdGhlIGVudlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGlzYWJsZUJvb3RzdHJhcD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogSGlnaGVyIG9yZGVyIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYSBibG9jayB3aXRoIGFuIEFXUyBjbGllbnQgc2V0dXBcbiAqXG4gKiBBbGxvY2F0ZSB0aGUgbmV4dCByZWdpb24gZnJvbSB0aGUgUkVHSU9OIHBvb2wgYW5kIGRpc3Bvc2UgaXQgYWZ0ZXJ3YXJkcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhBd3M8QSBleHRlbmRzIFRlc3RDb250ZXh0PihcbiAgYmxvY2s6IChjb250ZXh0OiBBICYgQXdzQ29udGV4dCAmIERpc2FibGVCb290c3RyYXBDb250ZXh0KSA9PiBQcm9taXNlPHZvaWQ+LFxuICBvcHRpb25zOiBBd3NDb250ZXh0T3B0aW9ucyA9IHt9LFxuKTogKGNvbnRleHQ6IEEpID0+IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gYXN5bmMgKGNvbnRleHQ6IEEpID0+IHtcbiAgICBjb25zdCBkaXNhYmxlQm9vdHN0cmFwID0gb3B0aW9ucy5kaXNhYmxlQm9vdHN0cmFwID8/IGZhbHNlO1xuXG4gICAgaWYgKGF0bW9zcGhlcmVFbmFibGVkKCkpIHtcbiAgICAgIGNvbnN0IGF0bW9zcGhlcmUgPSBuZXcgQXRtb3NwaGVyZUNsaWVudChhdG1vc3BoZXJlRW5kcG9pbnQoKSwge1xuICAgICAgICBsb2dTdHJlYW06IGNvbnRleHQub3V0cHV0LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNvbnN0cmFpbnRzOiBDb25zdHJhaW50W10gPSBbXTtcbiAgICAgIGlmIChvcHRpb25zLnJlZ2lvbnMpIHtcbiAgICAgICAgY29uc3RyYWludHMucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ3JlZ2lvbicsXG4gICAgICAgICAgdmFsdWU6IFsuLi5vcHRpb25zLnJlZ2lvbnNdLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgY29uc3QgYWxsb2NhdGlvbiA9IGF3YWl0IGF0bW9zcGhlcmUuYWNxdWlyZSh7XG4gICAgICAgIHBvb2w6IGF0bW9zcGhlcmVQb29sKCksXG4gICAgICAgIHJlcXVlc3RlcjogY29udGV4dC5uYW1lLFxuICAgICAgICB0aW1lb3V0U2Vjb25kczogNjAgKiAzMCxcbiAgICAgICAgY29uc3RyYWludHMsXG4gICAgICB9KTtcbiAgICAgIGxldCBvdXRjb21lID0gJ3N1Y2Nlc3MnO1xuICAgICAgY29udGV4dC5yZXBvcnRXYWl0VGltZShEYXRlLm5vdygpIC0gc3RhcnQpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBhd3MgPSBhd2FpdCBBd3NDbGllbnRzLmZvcklkZW50aXR5KGNvbnRleHQucmFuZG9tU3RyaW5nLCBhbGxvY2F0aW9uLmVudmlyb25tZW50LnJlZ2lvbiwge1xuICAgICAgICAgIGFjY2Vzc0tleUlkOiBhbGxvY2F0aW9uLmNyZWRlbnRpYWxzLmFjY2Vzc0tleUlkLFxuICAgICAgICAgIHNlY3JldEFjY2Vzc0tleTogYWxsb2NhdGlvbi5jcmVkZW50aWFscy5zZWNyZXRBY2Nlc3NLZXksXG4gICAgICAgICAgc2Vzc2lvblRva2VuOiBhbGxvY2F0aW9uLmNyZWRlbnRpYWxzLnNlc3Npb25Ub2tlbixcbiAgICAgICAgICBhY2NvdW50SWQ6IGFsbG9jYXRpb24uZW52aXJvbm1lbnQuYWNjb3VudCxcbiAgICAgICAgfSwgY29udGV4dC5vdXRwdXQpO1xuICAgICAgICBhd2FpdCBzYW5pdHlDaGVjayhhd3MpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGJsb2NrKHsgLi4uY29udGV4dCwgZGlzYWJsZUJvb3RzdHJhcCwgYXdzIH0pO1xuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICBvdXRjb21lID0gJ2ZhaWx1cmUnO1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgYXdhaXQgYXdzLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgYXdhaXQgYXRtb3NwaGVyZS5yZWxlYXNlKGFsbG9jYXRpb24uaWQsIG91dGNvbWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVnaW9uUG9vbCgpLnVzaW5nKGFzeW5jIChyZWdpb24pID0+IHtcbiAgICAgICAgY29uc3QgYXdzID0gYXdhaXQgQXdzQ2xpZW50cy5mb3JSZWdpb24oY29udGV4dC5yYW5kb21TdHJpbmcsIHJlZ2lvbiwgY29udGV4dC5vdXRwdXQpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHNhbml0eUNoZWNrKGF3cyk7XG5cbiAgICAgICAgICByZXR1cm4gYXdhaXQgYmxvY2soeyAuLi5jb250ZXh0LCBkaXNhYmxlQm9vdHN0cmFwLCBhd3MgfSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgYXdhaXQgYXdzLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG5sZXQgX3JlZ2lvblBvb2w6IHVuZGVmaW5lZCB8IFJlc291cmNlUG9vbDtcbmV4cG9ydCBmdW5jdGlvbiByZWdpb25Qb29sKCk6IFJlc291cmNlUG9vbCB7XG4gIGlmIChfcmVnaW9uUG9vbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIF9yZWdpb25Qb29sO1xuICB9XG5cbiAgY29uc3QgUkVHSU9OUyA9IHByb2Nlc3MuZW52LkFXU19SRUdJT05TXG4gICAgPyBwcm9jZXNzLmVudi5BV1NfUkVHSU9OUy5zcGxpdCgnLCcpXG4gICAgOiBbcHJvY2Vzcy5lbnYuQVdTX1JFR0lPTiA/PyBwcm9jZXNzLmVudi5BV1NfREVGQVVMVF9SRUdJT04gPz8gJ3VzLWVhc3QtMSddO1xuXG4gIF9yZWdpb25Qb29sID0gUmVzb3VyY2VQb29sLndpdGhSZXNvdXJjZXMoJ2F3c19yZWdpb25zJywgUkVHSU9OUyk7XG4gIHJldHVybiBfcmVnaW9uUG9vbDtcbn1cblxuLyoqXG4gKiBQZXJmb3JtIGEgb25lLXRpbWUgcXVpY2sgc2FuaXR5IGNoZWNrIHRoYXQgdGhlIEFXUyBjbGllbnRzIGhhdmUgcHJvcGVybHkgY29uZmlndXJlZCBjcmVkZW50aWFsc1xuICpcbiAqIElmIHdlIGRvbid0IGRvIHRoaXMsIGNhbGxzIGFyZSBnb2luZyB0byBmYWlsIGFuZCB0aGV5J2xsIGJlIHJldHJpZWQgYW5kIGV2ZXJ5dGhpbmcgd2lsbCB0YWtlXG4gKiBmb3JldmVyIGJlZm9yZSB0aGUgdXNlciBub3RpY2VzIGEgc2ltcGxlIG1pc2NvbmZpZ3VyYXRpb24uXG4gKlxuICogV2UgY2FuJ3QgY2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc2luY2UgY3JlZGVudGlhbHMgY291bGQgY29tZSBmcm9tXG4gKiBhbnl3aGVyZSwgc28gZG8gc2ltcGxlIGFjY291bnQgcmV0cmlldmFsLlxuICpcbiAqIE9ubHkgZG8gaXQgb25jZSBwZXIgcHJvY2Vzcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2FuaXR5Q2hlY2soYXdzOiBBd3NDbGllbnRzKSB7XG4gIGlmIChzYW5pdHlDaGVja2VkID09PSB1bmRlZmluZWQpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYXdzLmFjY291bnQoKTtcbiAgICAgIHNhbml0eUNoZWNrZWQgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgc2FuaXR5Q2hlY2tlZCA9IGZhbHNlO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBV1MgY3JlZGVudGlhbHMgcHJvYmFibHkgbm90IGNvbmZpZ3VyZWQsIGdvdCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4gIGlmICghc2FuaXR5Q2hlY2tlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQVdTIGNyZWRlbnRpYWxzIHByb2JhYmx5IG5vdCBjb25maWd1cmVkLCBzZWUgcHJldmlvdXMgZXJyb3InKTtcbiAgfVxufVxubGV0IHNhbml0eUNoZWNrZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4iXX0=
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1hd3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3aXRoLWF3cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU9BLDhDQUdDO0FBRUQsZ0RBTUM7QUFFRCx3Q0FNQztBQXlCRCwwQkFtRUM7QUFHRCxnQ0FXQztBQW5JRCwwRUFBa0U7QUFDbEUsK0JBQW1DO0FBRW5DLG1EQUErQztBQUcvQyxTQUFnQixpQkFBaUI7SUFDL0IsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQztJQUN6RCxPQUFPLE9BQU8sS0FBSyxNQUFNLElBQUksT0FBTyxLQUFLLEdBQUcsQ0FBQztBQUMvQyxDQUFDO0FBRUQsU0FBZ0Isa0JBQWtCO0lBQ2hDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUM7SUFDeEQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxTQUFnQixjQUFjO0lBQzVCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUM7SUFDcEQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFvQkQ7Ozs7R0FJRztBQUNILFNBQWdCLE9BQU8sQ0FDckIsS0FBMkUsRUFDM0UsVUFBNkIsRUFBRTtJQUUvQiwwSEFBMEg7SUFDMUgsc0dBQXNHO0lBQ3RHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUVqQyxPQUFPLEtBQUssRUFBRSxPQUFVLEVBQUUsRUFBRTtRQUMxQixNQUFNLGdCQUFnQixH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bGFicy9jZGstYXRtb3NwaGVyZS1jbGllbnQnO1xuaW1wb3J0IHsgQXRtb3NwaGVyZUNsaWVudCB9IGZyb20gJ0BjZGtsYWJzL2Nkay1hdG1vc3BoZXJlLWNsaWVudCc7XG5pbXBvcnQgeyBBd3NDbGllbnRzIH0gZnJvbSAnLi9hd3MnO1xuaW1wb3J0IHR5cGUgeyBUZXN0Q29udGV4dCB9IGZyb20gJy4vaW50ZWctdGVzdCc7XG5pbXBvcnQgeyBSZXNvdXJjZVBvb2wgfSBmcm9tICcuL3Jlc291cmNlLXBvb2wnO1xuaW1wb3J0IHR5cGUgeyBEaXNhYmxlQm9vdHN0cmFwQ29udGV4dCB9IGZyb20gJy4vd2l0aC1jZGstYXBwJztcblxuZXhwb3J0IGZ1bmN0aW9uIGF0bW9zcGhlcmVFbmFibGVkKCk6IGJvb2xlYW4ge1xuICBjb25zdCBlbmFibGVkID0gcHJvY2Vzcy5lbnYuQ0RLX0lOVEVHX0FUTU9TUEhFUkVfRU5BQkxFRDtcbiAgcmV0dXJuIGVuYWJsZWQgPT09ICd0cnVlJyB8fCBlbmFibGVkID09PSAnMSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdG1vc3BoZXJlRW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgY29uc3QgdmFsdWUgPSBwcm9jZXNzLmVudi5DREtfSU5URUdfQVRNT1NQSEVSRV9FTkRQT0lOVDtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ0RLX0lOVEVHX0FUTU9TUEhFUkVfRU5EUE9JTlQgaXMgbm90IGRlZmluZWQnKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdG1vc3BoZXJlUG9vbCgpIHtcbiAgY29uc3QgdmFsdWUgPSBwcm9jZXNzLmVudi5DREtfSU5URUdfQVRNT1NQSEVSRV9QT09MO1xuICBpZiAoIXZhbHVlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDREtfSU5URUdfQVRNT1NQSEVSRV9QT09MIGlzIG5vdCBkZWZpbmVkJyk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgdHlwZSBBd3NDb250ZXh0ID0geyByZWFkb25seSBhd3M6IEF3c0NsaWVudHMgfTtcblxuZXhwb3J0IGludGVyZmFjZSBBd3NDb250ZXh0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBSZXF1ZXN0IHRoZSB0ZXN0IGVudmlyb25tZW50IHRvIGJlIGluIG9uZSBvZiB0aGVzZSByZWdpb25zXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYWxsIHJlZ2lvbnMgYXJlIHBvc3NpYmxlXG4gICAqL1xuICByZWFkb25seSByZWdpb25zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIERvIG5vdCBib290c3RyYXAgdGhlIGVudlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGlzYWJsZUJvb3RzdHJhcD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogSGlnaGVyIG9yZGVyIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYSBibG9jayB3aXRoIGFuIEFXUyBjbGllbnQgc2V0dXBcbiAqXG4gKiBBbGxvY2F0ZSB0aGUgbmV4dCByZWdpb24gZnJvbSB0aGUgUkVHSU9OIHBvb2wgYW5kIGRpc3Bvc2UgaXQgYWZ0ZXJ3YXJkcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhBd3M8QSBleHRlbmRzIFRlc3RDb250ZXh0PihcbiAgYmxvY2s6IChjb250ZXh0OiBBICYgQXdzQ29udGV4dCAmIERpc2FibGVCb290c3RyYXBDb250ZXh0KSA9PiBQcm9taXNlPHZvaWQ+LFxuICBvcHRpb25zOiBBd3NDb250ZXh0T3B0aW9ucyA9IHt9LFxuKTogKGNvbnRleHQ6IEEpID0+IFByb21pc2U8dm9pZD4ge1xuICAvLyBTZXQgYSBoaWdoIEplc3QgdGltZW91dCBiZWNhdXNlIGl0IGluY2x1ZGVzIHRoZSB0aW1lIHdhaXRpbmcgZm9yIGxvY2tzOyBhY2NvdW50IGZvciB3b3JzdC1jYXNlIHNpbmdsZS10aHJlYWRlZCBydW50aW1lLlxuICAvLyBUaGlzIGlzIG5vdCB0aGUgYWN0dWFsIHRlc3QgZXhlY3V0aW9uIHRpbWUuIFRoZSBlZmZlY3RpdmUgdGVzdCB0aW1lb3V0IGlzIGhhbmRsZWQgYnkgd2l0aFRpbWVvdXQoKS5cbiAgamVzdC5zZXRUaW1lb3V0KDIgKiA2MCAqIDYwXzAwMCk7XG5cbiAgcmV0dXJuIGFzeW5jIChjb250ZXh0OiBBKSA9PiB7XG4gICAgY29uc3QgZGlzYWJsZUJvb3RzdHJhcCA9IG9wdGlvbnMuZGlzYWJsZUJvb3RzdHJhcCA/PyBmYWxzZTtcblxuICAgIGlmIChhdG1vc3BoZXJlRW5hYmxlZCgpKSB7XG4gICAgICBjb25zdCBhdG1vc3BoZXJlID0gbmV3IEF0bW9zcGhlcmVDbGllbnQoYXRtb3NwaGVyZUVuZHBvaW50KCksIHtcbiAgICAgICAgbG9nU3RyZWFtOiBjb250ZXh0Lm91dHB1dCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjb25zdHJhaW50czogQ29uc3RyYWludFtdID0gW107XG4gICAgICBpZiAob3B0aW9ucy5yZWdpb25zKSB7XG4gICAgICAgIGNvbnN0cmFpbnRzLnB1c2goe1xuICAgICAgICAgIHR5cGU6ICdyZWdpb24nLFxuICAgICAgICAgIHZhbHVlOiBbLi4ub3B0aW9ucy5yZWdpb25zXSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IGFsbG9jYXRpb24gPSBhd2FpdCBhdG1vc3BoZXJlLmFjcXVpcmUoe1xuICAgICAgICBwb29sOiBhdG1vc3BoZXJlUG9vbCgpLFxuICAgICAgICByZXF1ZXN0ZXI6IGNvbnRleHQubmFtZSxcbiAgICAgICAgdGltZW91dFNlY29uZHM6IDYwICogMzAsXG4gICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgfSk7XG4gICAgICBsZXQgb3V0Y29tZSA9ICdzdWNjZXNzJztcbiAgICAgIGNvbnRleHQucmVwb3J0V2FpdFRpbWUoRGF0ZS5ub3coKSAtIHN0YXJ0KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYXdzID0gYXdhaXQgQXdzQ2xpZW50cy5mb3JJZGVudGl0eShjb250ZXh0LnJhbmRvbVN0cmluZywgYWxsb2NhdGlvbi5lbnZpcm9ubWVudC5yZWdpb24sIHtcbiAgICAgICAgICBhY2Nlc3NLZXlJZDogYWxsb2NhdGlvbi5jcmVkZW50aWFscy5hY2Nlc3NLZXlJZCxcbiAgICAgICAgICBzZWNyZXRBY2Nlc3NLZXk6IGFsbG9jYXRpb24uY3JlZGVudGlhbHMuc2VjcmV0QWNjZXNzS2V5LFxuICAgICAgICAgIHNlc3Npb25Ub2tlbjogYWxsb2NhdGlvbi5jcmVkZW50aWFscy5zZXNzaW9uVG9rZW4sXG4gICAgICAgICAgYWNjb3VudElkOiBhbGxvY2F0aW9uLmVudmlyb25tZW50LmFjY291bnQsXG4gICAgICAgIH0sIGNvbnRleHQub3V0cHV0KTtcbiAgICAgICAgYXdhaXQgc2FuaXR5Q2hlY2soYXdzKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBibG9jayh7IC4uLmNvbnRleHQsIGRpc2FibGVCb290c3RyYXAsIGF3cyB9KTtcbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgb3V0Y29tZSA9ICdmYWlsdXJlJztcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGF3YWl0IGF3cy5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGF3YWl0IGF0bW9zcGhlcmUucmVsZWFzZShhbGxvY2F0aW9uLmlkLCBvdXRjb21lKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlZ2lvblBvb2woKS51c2luZyhhc3luYyAocmVnaW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGF3cyA9IGF3YWl0IEF3c0NsaWVudHMuZm9yUmVnaW9uKGNvbnRleHQucmFuZG9tU3RyaW5nLCByZWdpb24sIGNvbnRleHQub3V0cHV0KTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBzYW5pdHlDaGVjayhhd3MpO1xuXG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGJsb2NrKHsgLi4uY29udGV4dCwgZGlzYWJsZUJvb3RzdHJhcCwgYXdzIH0pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGF3YWl0IGF3cy5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cblxubGV0IF9yZWdpb25Qb29sOiB1bmRlZmluZWQgfCBSZXNvdXJjZVBvb2w7XG5leHBvcnQgZnVuY3Rpb24gcmVnaW9uUG9vbCgpOiBSZXNvdXJjZVBvb2wge1xuICBpZiAoX3JlZ2lvblBvb2wgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBfcmVnaW9uUG9vbDtcbiAgfVxuXG4gIGNvbnN0IFJFR0lPTlMgPSBwcm9jZXNzLmVudi5BV1NfUkVHSU9OU1xuICAgID8gcHJvY2Vzcy5lbnYuQVdTX1JFR0lPTlMuc3BsaXQoJywnKVxuICAgIDogW3Byb2Nlc3MuZW52LkFXU19SRUdJT04gPz8gcHJvY2Vzcy5lbnYuQVdTX0RFRkFVTFRfUkVHSU9OID8/ICd1cy1lYXN0LTEnXTtcblxuICBfcmVnaW9uUG9vbCA9IFJlc291cmNlUG9vbC53aXRoUmVzb3VyY2VzKCdhd3NfcmVnaW9ucycsIFJFR0lPTlMpO1xuICByZXR1cm4gX3JlZ2lvblBvb2w7XG59XG5cbi8qKlxuICogUGVyZm9ybSBhIG9uZS10aW1lIHF1aWNrIHNhbml0eSBjaGVjayB0aGF0IHRoZSBBV1MgY2xpZW50cyBoYXZlIHByb3Blcmx5IGNvbmZpZ3VyZWQgY3JlZGVudGlhbHNcbiAqXG4gKiBJZiB3ZSBkb24ndCBkbyB0aGlzLCBjYWxscyBhcmUgZ29pbmcgdG8gZmFpbCBhbmQgdGhleSdsbCBiZSByZXRyaWVkIGFuZCBldmVyeXRoaW5nIHdpbGwgdGFrZVxuICogZm9yZXZlciBiZWZvcmUgdGhlIHVzZXIgbm90aWNlcyBhIHNpbXBsZSBtaXNjb25maWd1cmF0aW9uLlxuICpcbiAqIFdlIGNhbid0IGNoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHNpbmNlIGNyZWRlbnRpYWxzIGNvdWxkIGNvbWUgZnJvbVxuICogYW55d2hlcmUsIHNvIGRvIHNpbXBsZSBhY2NvdW50IHJldHJpZXZhbC5cbiAqXG4gKiBPbmx5IGRvIGl0IG9uY2UgcGVyIHByb2Nlc3MuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNhbml0eUNoZWNrKGF3czogQXdzQ2xpZW50cykge1xuICBpZiAoc2FuaXR5Q2hlY2tlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGF3cy5hY2NvdW50KCk7XG4gICAgICBzYW5pdHlDaGVja2VkID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHNhbml0eUNoZWNrZWQgPSBmYWxzZTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQVdTIGNyZWRlbnRpYWxzIHByb2JhYmx5IG5vdCBjb25maWd1cmVkLCBnb3QgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuICBpZiAoIXNhbml0eUNoZWNrZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0FXUyBjcmVkZW50aWFscyBwcm9iYWJseSBub3QgY29uZmlndXJlZCwgc2VlIHByZXZpb3VzIGVycm9yJyk7XG4gIH1cbn1cbmxldCBzYW5pdHlDaGVja2VkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuIl19
|
package/lib/with-sam.js
CHANGED
|
@@ -159,7 +159,7 @@ async function shellWithAction(command, filter, action, options = {}, actionTime
|
|
|
159
159
|
};
|
|
160
160
|
writeToOutputs(`💻 ${command.join(' ')}\n`);
|
|
161
161
|
const env = options.env ?? (options.modEnv ? { ...process.env, ...options.modEnv } : undefined);
|
|
162
|
-
const child = child_process.spawn(command
|
|
162
|
+
const child = child_process.spawn(command.join(' '), [], {
|
|
163
163
|
...options,
|
|
164
164
|
env,
|
|
165
165
|
// Need this for Windows where we want .cmd and .bat to be found as well.
|
|
@@ -246,4 +246,4 @@ function killSubProcess(child, command) {
|
|
|
246
246
|
child.kill('SIGINT');
|
|
247
247
|
child_process.exec(`for pid in $(ps -ef | grep "${command}" | awk '{print $2}'); do kill -2 $pid; done`);
|
|
248
248
|
}
|
|
249
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1zYW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3aXRoLXNhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFzQkEsNERBK0NDO0FBa0NELDhEQUVDO0FBd0RELHNDQUVDO0FBT0QsMENBd0dDO0FBbFJELCtDQUErQztBQUMvQyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLCtCQUErQjtBQUUvQiwyQ0FBNEM7QUFFNUMsbUNBQWlDO0FBRWpDLHlDQUFxQztBQUNyQyxpREFBeUc7QUFDekcsaURBQTZDO0FBUTdDOztHQUVHO0FBQ0gsU0FBZ0Isd0JBQXdCLENBQXFDLEtBQTREO0lBQ3ZJLE9BQU8sS0FBSyxFQUFFLE9BQVUsRUFBRSxFQUFFO1FBQzFCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDbkMsTUFBTSxlQUFlLEdBQUcsV0FBVyxLQUFLLEVBQUUsQ0FBQztRQUMzQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxhQUFhLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFbEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsZUFBZSxJQUFJLENBQUMsQ0FBQztRQUNyRCxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixZQUFZLElBQUksQ0FBQyxDQUFDO1FBQ2xELE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUV4RCxNQUFNLElBQUEsNkJBQWMsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUFhLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixDQUFDLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5RyxNQUFNLE9BQU8sR0FBRyxJQUFJLHlCQUF5QixDQUMzQyxZQUFZLEVBQ1osZUFBZSxFQUNmLE9BQU8sQ0FBQyxNQUFNLEVBQ2QsT0FB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QStCLE9BQU8sOENBQThDLENBQUMsQ0FBQztBQUMzRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2hpbGRfcHJvY2VzcyBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgdHlwZSB7IFRlc3RDb250ZXh0IH0gZnJvbSAnLi9pbnRlZy10ZXN0JztcbmltcG9ydCB7IFJFU09VUkNFU19ESVIgfSBmcm9tICcuL3Jlc291cmNlcyc7XG5pbXBvcnQgdHlwZSB7IFNoZWxsT3B0aW9ucyB9IGZyb20gJy4vc2hlbGwnO1xuaW1wb3J0IHsgcmltcmFmIH0gZnJvbSAnLi9zaGVsbCc7XG5pbXBvcnQgdHlwZSB7IEF3c0NvbnRleHQgfSBmcm9tICcuL3dpdGgtYXdzJztcbmltcG9ydCB7IHdpdGhBd3MgfSBmcm9tICcuL3dpdGgtYXdzJztcbmltcG9ydCB7IGNsb25lRGlyZWN0b3J5LCBpbnN0YWxsTnBtUGFja2FnZXMsIFRlc3RGaXh0dXJlLCBERUZBVUxUX1RFU1RfVElNRU9VVF9TIH0gZnJvbSAnLi93aXRoLWNkay1hcHAnO1xuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tICcuL3dpdGgtdGltZW91dCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uT3V0cHV0IHtcbiAgYWN0aW9uU3VjY2VlZGVkPzogYm9vbGVhbjtcbiAgYWN0aW9uT3V0cHV0PzogYW55O1xuICBzaGVsbE91dHB1dD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBIaWdoZXIgb3JkZXIgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhIGJsb2NrIHdpdGggYSBTQU0gSW50ZWdyYXRpb24gQ0RLIGFwcCBmaXh0dXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoU2FtSW50ZWdyYXRpb25DZGtBcHA8QSBleHRlbmRzIFRlc3RDb250ZXh0ICYgQXdzQ29udGV4dD4oYmxvY2s6IChjb250ZXh0OiBTYW1JbnRlZ3JhdGlvblRlc3RGaXh0dXJlKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gIHJldHVybiBhc3luYyAoY29udGV4dDogQSkgPT4ge1xuICAgIGNvbnN0IHJhbmR5ID0gY29udGV4dC5yYW5kb21TdHJpbmc7XG4gICAgY29uc3Qgc3RhY2tOYW1lUHJlZml4ID0gYGNka3Rlc3QtJHtyYW5keX1gO1xuICAgIGNvbnN0IGludGVnVGVzdERpciA9IHBhdGguam9pbihvcy50bXBkaXIoKSwgYGNkay1pbnRlZy0ke3JhbmR5fWApO1xuXG4gICAgY29udGV4dC5sb2coYCBTdGFjayBwcmVmaXg6ICAgJHtzdGFja05hbWVQcmVmaXh9XFxuYCk7XG4gICAgY29udGV4dC5sb2coYCBUZXN0IGRpcmVjdG9yeTogJHtpbnRlZ1Rlc3REaXJ9XFxuYCk7XG4gICAgY29udGV4dC5sb2coYCBSZWdpb246ICAgICAgICAgJHtjb250ZXh0LmF3cy5yZWdpb259XFxuYCk7XG5cbiAgICBhd2FpdCBjbG9uZURpcmVjdG9yeShwYXRoLmpvaW4oUkVTT1VSQ0VTX0RJUiwgJ2Nkay1hcHBzJywgJ3NhbV9jZGtfaW50ZWdfYXBwJyksIGludGVnVGVzdERpciwgY29udGV4dC5vdXRwdXQpO1xuICAgIGNvbnN0IGZpeHR1cmUgPSBuZXcgU2FtSW50ZWdyYXRpb25UZXN0Rml4dHVyZShcbiAgICAgIGludGVnVGVzdERpcixcbiAgICAgIHN0YWNrTmFtZVByZWZpeCxcbiAgICAgIGNvbnRleHQub3V0cHV0LFxuICAgICAgY29udGV4dC5hd3MsXG4gICAgICBjb250ZXh0LnJhbmRvbVN0cmluZyk7XG4gICAgYXdhaXQgZml4dHVyZS5lY3JQdWJsaWNMb2dpbigpO1xuXG4gICAgbGV0IHN1Y2Nlc3MgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbnN0YWxsYXRpb25WZXJzaW9uID0gZml4dHVyZS5saWJyYXJ5LnJlcXVlc3RlZFZlcnNpb24oKTtcblxuICAgICAgY29uc3QgYWxwaGFJbnN0YWxsYXRpb25WZXJzaW9uID0gZml4dHVyZS5saWJyYXJ5LnJlcXVlc3RlZEFscGhhVmVyc2lvbigpO1xuICAgICAgYXdhaXQgaW5zdGFsbE5wbVBhY2thZ2VzKGZpeHR1cmUsIHtcbiAgICAgICAgJ2F3cy1jZGstbGliJzogaW5zdGFsbGF0aW9uVmVyc2lvbixcbiAgICAgICAgJ0Bhd3MtY2RrL2F3cy1sYW1iZGEtZ28tYWxwaGEnOiBhbHBoYUluc3RhbGxhdGlvblZlcnNpb24sXG4gICAgICAgICdAYXdzLWNkay9hd3MtbGFtYmRhLXB5dGhvbi1hbHBoYSc6IGFscGhhSW5zdGFsbGF0aW9uVmVyc2lvbixcbiAgICAgICAgJ2NvbnN0cnVjdHMnOiAnXjEwJyxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBibG9jayhmaXh0dXJlKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIC8vIFdlIHN1cnZpdmUgY2VydGFpbiBjYXNlcyBpbnZvbHZpbmcgZ29wa2cuaW5cbiAgICAgIGlmIChlcnJvckNhdXNlZEJ5R29Qa2coZS5tZXNzYWdlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzdWNjZXNzID0gZmFsc2U7XG4gICAgICB0aHJvdyBlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuSU5URUdfTk9fQ0xFQU4pIHtcbiAgICAgICAgY29udGV4dC5sb2coYExlZnQgdGVzdCBkaXJlY3RvcnkgaW4gJyR7aW50ZWdUZXN0RGlyfScgKCRJTlRFR19OT19DTEVBTilcXG5gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IGZpeHR1cmUuZGlzcG9zZShzdWNjZXNzKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgb3Igbm90IHRoZSBlcnJvciBpcyBiZWluZyBjYXVzZWQgYnkgZ29wa2cuaW4gYmVpbmcgZG93blxuICpcbiAqIE91ciBHbyBidWlsZCBkZXBlbmRzIG9uIGh0dHBzOi8vZ29wa2cuaW4vLCB3aGljaCBoYXMgZXJyb3JzIHByZXR0eSBvZnRlblxuICogKGV2ZXJ5IGNvdXBsZSBvZiBkYXlzKS4gSXQgaXMgcnVuIGJ5IGEgc2luZ2xlIHZvbHVudGVlci5cbiAqL1xuZnVuY3Rpb24gZXJyb3JDYXVzZWRCeUdvUGtnKGVycm9yOiBzdHJpbmcpIHtcbiAgLy8gVGhlIGVycm9yIGlzIGRpZmZlcmVudCBkZXBlbmRpbmcgb24gd2hhdCByZXF1ZXN0IGZhaWxzLiBNZXNzYWdlcyByZWNvZ25pemVkOlxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyAgICBnbzogZ2l0aHViLmNvbS9hd3MvYXdzLWxhbWJkYS1nb0B2MS4yOC4wIHJlcXVpcmVzXG4gIC8vICAgICAgICBnb3BrZy5pbi95YW1sLnYzQHYzLjAuMC0yMDIwMDYxNTExMzQxMy1lZWVjYTQ4ZmU3NzY6IGludmFsaWQgdmVyc2lvbjogZ2l0IGxzLXJlbW90ZSAtcSBvcmlnaW4gaW4gL2dvL3BrZy9tb2QvY2FjaGUvdmNzLzA5MDFkYzFlZjY3ZmNjZTFjOWIzYWU1MTA3ODc0MGRlNGEwZTJkYzY3M2U3MjA1ODRhYzMwMjk3M2FmODJmMzY6IGV4aXQgc3RhdHVzIDEyODpcbiAgLy8gICAgICAgIHJlbW90ZTogQ2Fubm90IG9idGFpbiByZWZzIGZyb20gR2l0SHViOiBjYW5ub3QgdGFsayB0byBHaXRIdWI6IEdldCBodHRwczovL2dpdGh1Yi5jb20vZ28teWFtbC95YW1sLmdpdC9pbmZvL3JlZnM/c2VydmljZT1naXQtdXBsb2FkLXBhY2s6IG5ldC9odHRwOiByZXF1ZXN0IGNhbmNlbGVkIChDbGllbnQuVGltZW91dCBleGNlZWRlZCB3aGlsZSBhd2FpdGluZyBoZWFkZXJzKVxuICAvLyAgICAgICAgZmF0YWw6IHVuYWJsZSB0byBhY2Nlc3MgJ2h0dHBzOi8vZ29wa2cuaW4veWFtbC52My8nOiBUaGUgcmVxdWVzdGVkIFVSTCByZXR1cm5lZCBlcnJvcjogNTAyXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vICAgIGdvOiBkb3dubG9hZGluZyBnaXRodWIuY29tL2F3cy9hd3MtbGFtYmRhLWdvIHYxLjI4LjBcbiAgLy8gICAgZ286IGdpdGh1Yi5jb20vYXdzL2F3cy1sYW1iZGEtZ29AdjEuMjguMCByZXF1aXJlc1xuICAvLyAgICAgICAgZ29wa2cuaW4veWFtbC52M0B2My4wLjAtMjAyMDA2MTUxMTM0MTMtZWVlY2E0OGZlNzc2OiB1bnJlY29nbml6ZWQgaW1wb3J0IHBhdGggXCJnb3BrZy5pbi95YW1sLnYzXCI6IHJlYWRpbmcgaHR0cHM6Ly9nb3BrZy5pbi95YW1sLnYzP2dvLWdldD0xOiA1MDIgQmFkIEdhdGV3YXlcbiAgLy8gICAgICAgIHNlcnZlciByZXNwb25zZTogQ2Fubm90IG9idGFpbiByZWZzIGZyb20gR2l0SHViOiBjYW5ub3QgdGFsayB0byBHaXRIdWI6IEdldCBodHRwczovL2dpdGh1Yi5jb20vZ28teWFtbC95YW1sLmdpdC9pbmZvL3JlZnM/c2VydmljZT1naXQtdXBsb2FkLXBhY2s6IG5ldC9odHRwOiByZXF1ZXN0IGNhbmNlbGVkIChDbGllbnQuVGltZW91dCBleGNlZWRlZCB3aGlsZSBhd2FpdGluZyBoZWFkZXJzKVxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyAgICBnbzogZ2l0aHViLmNvbS9hd3MvYXdzLWxhbWJkYS1nb0B2MS4yOC4wIHJlcXVpcmVzXG4gIC8vICAgICAgICBnb3BrZy5pbi95YW1sLnYzQHYzLjAuMC0yMDIwMDYxNTExMzQxMy1lZWVjYTQ4ZmU3NzY6IGludmFsaWQgdmVyc2lvbjogZ2l0IGZldGNoIC1mIG9yaWdpbiByZWZzL2hlYWRzLyo6cmVmcy9oZWFkcy8qIHJlZnMvdGFncy8qOnJlZnMvdGFncy8qIGluIC9nby9wa2cvbW9kL2NhY2hlL3Zjcy8wOTAxZGMxZWY2N2ZjY2UxYzliM2FlNTEwNzg3NDBkZTRhMGUyZGM2NzNlNzIwNTg0YWMzMDI5NzNhZjgyZjM2OiBleGl0IHN0YXR1cyAxMjg6XG4gIC8vICAgICAgICBlcnJvcjogUlBDIGZhaWxlZDsgSFRUUCA1MDIgY3VybCAyMiBUaGUgcmVxdWVzdGVkIFVSTCByZXR1cm5lZCBlcnJvcjogNTAyXG4gIC8vICAgICAgICBmYXRhbDogdGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1bmV4cGVjdGVkbHlcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICByZXR1cm4gKGVycm9yLmluY2x1ZGVzKCdnb3BrZ1xcLmluLippbnZhbGlkIHZlcnNpb24uKmV4aXQgc3RhdHVzIDEyOCcpXG4gICAgfHwgZXJyb3IubWF0Y2goL3VucmVjb2duaXplZCBpbXBvcnQgcGF0aFteXFxuXWdvcGtnXFwuaW4vKSk7XG59XG5cbi8qKlxuICogU0FNIEludGVncmF0aW9uIHRlc3QgZml4dHVyZSBmb3IgQ0RLIC0gU0FNIGludGVncmF0aW9uIHRlc3QgY2FzZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhTYW1JbnRlZ3JhdGlvbkZpeHR1cmUoYmxvY2s6IChjb250ZXh0OiBTYW1JbnRlZ3JhdGlvblRlc3RGaXh0dXJlKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gIHJldHVybiB3aXRoQXdzKHdpdGhUaW1lb3V0KERFRkFVTFRfVEVTVF9USU1FT1VUX1MsIHdpdGhTYW1JbnRlZ3JhdGlvbkNka0FwcChibG9jaykpKTtcbn1cblxuZXhwb3J0IGNsYXNzIFNhbUludGVncmF0aW9uVGVzdEZpeHR1cmUgZXh0ZW5kcyBUZXN0Rml4dHVyZSB7XG4gIHB1YmxpYyBhc3luYyBzYW1TaGVsbChjb21tYW5kOiBzdHJpbmdbXSwgZmlsdGVyPzogc3RyaW5nLCBhY3Rpb24/OiAoKSA9PiBhbnksIG9wdGlvbnM6IE9taXQ8U2hlbGxPcHRpb25zLCAnY3dkJyB8ICdvdXRwdXQnPiA9IHt9KTogUHJvbWlzZTxBY3Rpb25PdXRwdXQ+IHtcbiAgICByZXR1cm4gc2hlbGxXaXRoQWN0aW9uKGNvbW1hbmQsIGZpbHRlciwgYWN0aW9uLCB7XG4gICAgICBvdXRwdXRzOiBbdGhpcy5vdXRwdXRdLFxuICAgICAgY3dkOiBwYXRoLmpvaW4odGhpcy5pbnRlZ1Rlc3REaXIsICdjZGsub3V0JykudG9TdHJpbmcoKSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2FtQnVpbGQoc3RhY2tOYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBmdWxsU3RhY2tOYW1lID0gdGhpcy5mdWxsU3RhY2tOYW1lKHN0YWNrTmFtZSk7XG4gICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aC5qb2luKHRoaXMuaW50ZWdUZXN0RGlyLCAnY2RrLm91dCcsIGAke2Z1bGxTdGFja05hbWV9LnRlbXBsYXRlLmpzb25gKTtcbiAgICBjb25zdCBhcmdzID0gWyctLXRlbXBsYXRlJywgdGVtcGxhdGVQYXRoLnRvU3RyaW5nKCldO1xuICAgIHJldHVybiB0aGlzLnNhbVNoZWxsKFsnc2FtJywgJ2J1aWxkJywgLi4uYXJnc10pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNhbUxvY2FsU3RhcnRBcGkoc3RhY2tOYW1lOiBzdHJpbmcsIGlzQnVpbHQ6IGJvb2xlYW4sIHBvcnQ6IG51bWJlciwgYXBpUGF0aDogc3RyaW5nKTogUHJvbWlzZTxBY3Rpb25PdXRwdXQ+IHtcbiAgICBjb25zdCBmdWxsU3RhY2tOYW1lID0gdGhpcy5mdWxsU3RhY2tOYW1lKHN0YWNrTmFtZSk7XG4gICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aC5qb2luKHRoaXMuaW50ZWdUZXN0RGlyLCAnY2RrLm91dCcsIGAke2Z1bGxTdGFja05hbWV9LnRlbXBsYXRlLmpzb25gKTtcbiAgICBjb25zdCBhcmdzID0gaXNCdWlsdD8gW10gOiBbJy0tdGVtcGxhdGUnLCB0ZW1wbGF0ZVBhdGgudG9TdHJpbmcoKV07XG4gICAgYXJncy5wdXNoKCctLXBvcnQnKTtcbiAgICBhcmdzLnB1c2gocG9ydC50b1N0cmluZygpKTtcblxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLXNhbS1jbGkvcHVsbC83ODkyXG4gICAgYXJncy5wdXNoKCctLW5vLW1lbW9yeS1saW1pdCcpO1xuXG4gICAgLy8gXCJQcmVzcyBDdHJsK0MgdG8gcXVpdFwiIGxvb2tzIHRvIGJlIHByaW50ZWQgYnkgYSBGbGFzayBzZXJ2ZXIgYnVpbHQgaW50byBTQU0gQ0xJLlxuICAgIHJldHVybiB0aGlzLnNhbVNoZWxsKFsnc2FtJywgJ2xvY2FsJywgJ3N0YXJ0LWFwaScsIC4uLmFyZ3NdLCAnUHJlc3MgQ1RSTCtDIHRvIHF1aXQnLCAoKT0+e1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPEFjdGlvbk91dHB1dD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBheGlvcy5nZXQoYGh0dHA6Ly8xMjcuMC4wLjE6JHtwb3J0fSR7YXBpUGF0aH1gKS50aGVuKCByZXNwID0+IHtcbiAgICAgICAgICByZXNvbHZlKHJlc3AuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKCBlcnJvciA9PiB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgRmFpbGVkIHRvIGludm9rZSBhcGkgcGF0aCAke2FwaVBhdGh9IG9uIHBvcnQgJHtwb3J0fSB3aXRoIGVycm9yICR7ZXJyb3J9YCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFudXAgbGVmdG92ZXIgc3RhY2tzIGFuZCBidWNrZXRzXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGlzcG9zZShzdWNjZXNzOiBib29sZWFuKSB7XG4gICAgLy8gSWYgdGhlIHRlc3RzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIGhhcHBpbHkgZGVsZXRlIHRoZSBmaXh0dXJlXG4gICAgLy8gKG90aGVyd2lzZSBsZWF2ZSBpdCBmb3IgaHVtYW5zIHRvIGluc3BlY3QpXG4gICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IGNsZWFuZWQgPSByaW1yYWYodGhpcy5pbnRlZ1Rlc3REaXIpO1xuICAgICAgaWYgKCFjbGVhbmVkKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBjbGVhbiB1cCAke3RoaXMuaW50ZWdUZXN0RGlyfSBkdWUgdG8gcGVybWlzc2lvbnMgaXNzdWVzIChEb2NrZXIgcnVubmluZyBhcyByb290PylgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbUludGVnZXIobWluOiBudW1iZXIsIG1heDogbnVtYmVyKSB7XG4gIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSArIG1pbik7XG59XG5cbi8qKlxuICogQSBzaGVsbCBjb21tYW5kIHRoYXQgZG9lcyB3aGF0IHlvdSB3YW50XG4gKlxuICogSXMgcGxhdGZvcm0tYXdhcmUsIGhhbmRsZXMgZXJyb3JzIG5pY2VseS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNoZWxsV2l0aEFjdGlvbihcbiAgY29tbWFuZDogc3RyaW5nW10sXG4gIGZpbHRlcj86IHN0cmluZyxcbiAgYWN0aW9uPzogKCkgPT4gUHJvbWlzZTxhbnk+LFxuICBvcHRpb25zOiBTaGVsbE9wdGlvbnMgPSB7fSxcbiAgYWN0aW9uVGltZW91dFNlY29uZHM6IG51bWJlciA9IDYwMCxcbik6IFByb21pc2U8QWN0aW9uT3V0cHV0PiB7XG4gIGlmIChvcHRpb25zLm1vZEVudiAmJiBvcHRpb25zLmVudikge1xuICAgIHRocm93IG5ldyBFcnJvcignVXNlIGVpdGhlciBlbnYgb3IgbW9kRW52IGJ1dCBub3QgYm90aCcpO1xuICB9XG5cbiAgY29uc3Qgd3JpdGVUb091dHB1dHMgPSAoeDogc3RyaW5nKSA9PiB7XG4gICAgZm9yIChjb25zdCBvdXRwdXQgb2Ygb3B0aW9ucy5vdXRwdXRzID8/IFtdKSB7XG4gICAgICBvdXRwdXQud3JpdGUoeCk7XG4gICAgfVxuICB9O1xuICB3cml0ZVRvT3V0cHV0cyhg8J+SuyAke2NvbW1hbmQuam9pbignICcpfVxcbmApO1xuXG4gIGNvbnN0IGVudiA9IG9wdGlvbnMuZW52ID8/IChvcHRpb25zLm1vZEVudiA/IHsgLi4ucHJvY2Vzcy5lbnYsIC4uLm9wdGlvbnMubW9kRW52IH0gOiB1bmRlZmluZWQpO1xuXG4gIGNvbnN0IGNoaWxkID0gY2hpbGRfcHJvY2Vzcy5zcGF3bihjb21tYW5kWzBdLCBjb21tYW5kLnNsaWNlKDEpLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBlbnYsXG4gICAgLy8gTmVlZCB0aGlzIGZvciBXaW5kb3dzIHdoZXJlIHdlIHdhbnQgLmNtZCBhbmQgLmJhdCB0byBiZSBmb3VuZCBhcyB3ZWxsLlxuICAgIHNoZWxsOiB0cnVlLFxuICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlPEFjdGlvbk91dHB1dD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IG91dCA9IG5ldyBBcnJheTxCdWZmZXI+KCk7XG4gICAgY29uc3Qgc3Rkb3V0ID0gbmV3IEFycmF5PEJ1ZmZlcj4oKTtcbiAgICBjb25zdCBzdGRlcnIgPSBuZXcgQXJyYXk8QnVmZmVyPigpO1xuICAgIGxldCBhY3Rpb25TdWNjZWVkZWQgPSBmYWxzZTtcbiAgICBsZXQgYWN0aW9uT3V0cHV0OiBhbnk7XG4gICAgbGV0IGFjdGlvbkV4ZWN1dGVkID0gZmFsc2U7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBtYXliZUV4ZWN1dGVBY3Rpb24oY2h1bms6IGFueSkge1xuICAgICAgb3V0LnB1c2goQnVmZmVyLmZyb20oY2h1bmspKTtcbiAgICAgIGlmICghYWN0aW9uRXhlY3V0ZWQgJiYgdHlwZW9mIGZpbHRlciA9PT0gJ3N0cmluZycgJiYgQnVmZmVyLmNvbmNhdChvdXQpLnRvU3RyaW5nKCd1dGYtOCcpLmluY2x1ZGVzKGZpbHRlcikgJiYgdHlwZW9mIGFjdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhY3Rpb25FeGVjdXRlZCA9IHRydWU7XG4gICAgICAgIHdyaXRlVG9PdXRwdXRzKCdiZWZvcmUgZXhlY3V0aW5nIGFjdGlvblxcbicpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGFjdGlvbigpO1xuICAgICAgICAgIHdyaXRlVG9PdXRwdXRzKGBhY3Rpb24gb3V0cHV0IGlzICR7SlNPTi5zdHJpbmdpZnkob3V0cHV0KX1cXG5gKTtcbiAgICAgICAgICBhY3Rpb25PdXRwdXQgPSBvdXRwdXQ7XG4gICAgICAgICAgYWN0aW9uU3VjY2VlZGVkID0gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIHdyaXRlVG9PdXRwdXRzKGBhY3Rpb24gZXJyb3IgaXMgJHtlcnJvcn1cXG5gKTtcbiAgICAgICAgICBhY3Rpb25TdWNjZWVkZWQgPSBmYWxzZTtcbiAgICAgICAgICBhY3Rpb25PdXRwdXQgPSBlcnJvcjtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB3cml0ZVRvT3V0cHV0cygndGVybWluYXRlIHNhbSBzdWIgcHJvY2Vzc1xcbicpO1xuICAgICAgICAgIGtpbGxTdWJQcm9jZXNzKGNoaWxkLCBjb21tYW5kLmpvaW4oJyAnKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZpbHRlciA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIGFjdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gUmVqZWN0IHdpdGggYW4gZXJyb3IgaWYgYW4gYWN0aW9uIGlzIGNvbmZpZ3VyZWQsIGJ1dCB0aGUgZmlsdGVyIGZhaWxlZFxuICAgICAgLy8gdG8gc2hvdyB1cCBpbiB0aGUgb3V0cHV0IGJlZm9yZSB0aGUgdGltZW91dCBvY2N1cnJlZC5cbiAgICAgIHNldFRpbWVvdXQoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBpZiAoIWFjdGlvbkV4ZWN1dGVkKSB7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBUaW1lZCBvdXQgd2FpdGluZyBmb3IgZmlsdGVyICR7SlNPTi5zdHJpbmdpZnkoZmlsdGVyKX0gdG8gYXBwZWFyIGluIGNvbW1hbmQgb3V0cHV0IGFmdGVyICR7YWN0aW9uVGltZW91dFNlY29uZHN9IHNlY29uZHNcXG5PdXRwdXQgc28gZmFyOlxcbiR7QnVmZmVyLmNvbmNhdChvdXQpLnRvU3RyaW5nKCd1dGYtOCcpfWApKTtcbiAgICAgICAgICAgIGtpbGxTdWJQcm9jZXNzKGNoaWxkLCBjb21tYW5kLmpvaW4oJyAnKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBhY3Rpb25UaW1lb3V0U2Vjb25kcyAqIDFfMDAwLFxuICAgICAgKS51bnJlZigpO1xuICAgIH1cblxuICAgIGNoaWxkLnN0ZG91dCEub24oJ2RhdGEnLCBjaHVuayA9PiB7XG4gICAgICB3cml0ZVRvT3V0cHV0cyhjaHVuayk7XG4gICAgICBzdGRvdXQucHVzaChjaHVuayk7XG4gICAgICB2b2lkIG1heWJlRXhlY3V0ZUFjdGlvbihjaHVuayk7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5zdGRlcnIhLm9uKCdkYXRhJywgY2h1bmsgPT4ge1xuICAgICAgd3JpdGVUb091dHB1dHMoY2h1bmspO1xuICAgICAgaWYgKG9wdGlvbnMuY2FwdHVyZVN0ZGVyciA/PyB0cnVlKSB7XG4gICAgICAgIHN0ZGVyci5wdXNoKGNodW5rKTtcbiAgICAgIH1cbiAgICAgIHZvaWQgbWF5YmVFeGVjdXRlQWN0aW9uKGNodW5rKTtcbiAgICB9KTtcblxuICAgIGNoaWxkLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcblxuICAgIC8vIFdhaXQgZm9yICdleGl0JyBpbnN0ZWFkIG9mIGNsb3NlLCBkb24ndCBjYXJlIGFib3V0IHJlYWRpbmcgdGhlIHN0cmVhbXMgYWxsIHRoZSB3YXkgdG8gdGhlIGVuZFxuICAgIGNoaWxkLm9uY2UoJ2V4aXQnLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICB3cml0ZVRvT3V0cHV0cyhgU3VicHJvY2VzcyBoYXMgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9LCBzaWduYWwgJHtzaWduYWx9XFxuYCk7XG4gICAgICBjb25zdCBvdXRwdXQgPSAoQnVmZmVyLmNvbmNhdChzdGRvdXQpLnRvU3RyaW5nKCd1dGYtOCcpICsgQnVmZmVyLmNvbmNhdChzdGRlcnIpLnRvU3RyaW5nKCd1dGYtOCcpKS50cmltKCk7XG4gICAgICBpZiAoY29kZSA9PSBudWxsIHx8IGNvZGUgPT09IDAgfHwgb3B0aW9ucy5hbGxvd0VyckV4aXQpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgICAgIHJlc3VsdC5wdXNoKGFjdGlvbk91dHB1dCk7XG4gICAgICAgIHJlc3VsdC5wdXNoKG91dHB1dCk7XG4gICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgIGFjdGlvblN1Y2NlZWRlZDogYWN0aW9uU3VjY2VlZGVkLFxuICAgICAgICAgIGFjdGlvbk91dHB1dDogYWN0aW9uT3V0cHV0LFxuICAgICAgICAgIHNoZWxsT3V0cHV0OiBvdXRwdXQsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgJyR7Y29tbWFuZC5qb2luKCcgJyl9JyBleGl0ZWQgd2l0aCBlcnJvciBjb2RlICR7Y29kZX0uIE91dHB1dDogXFxuJHtvdXRwdXR9YCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24ga2lsbFN1YlByb2Nlc3MoY2hpbGQ6IGNoaWxkX3Byb2Nlc3MuQ2hpbGRQcm9jZXNzLCBjb21tYW5kOiBzdHJpbmcpIHtcbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBzdWIgcHJvY2VzcyBpcyBydW5uaW5nIGluIGNvbnRhaW5lciwgc28gY2hpbGRfcHJvY2Vzcy5zcGF3biB3aWxsXG4gICAqIGNyZWF0ZSBtdWx0aXBsZSBwcm9jZXNzZXMsIGFuZCB0byBraWxsIGFsbCBvZiB0aGVtIHdlIG5lZWQgdG8gcnVuIGRpZmZlcmVudCBsb2dpY1xuICAgKi9cbiAgY2hpbGQua2lsbCgnU0lHSU5UJyk7XG4gIGNoaWxkX3Byb2Nlc3MuZXhlYyhgZm9yIHBpZCBpbiAkKHBzIC1lZiB8IGdyZXAgXCIke2NvbW1hbmR9XCIgfCBhd2sgJ3twcmludCAkMn0nKTsgZG8ga2lsbCAtMiAkcGlkOyBkb25lYCk7XG59XG4iXX0=
|
|
249
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1zYW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3aXRoLXNhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFzQkEsNERBK0NDO0FBa0NELDhEQUVDO0FBd0RELHNDQUVDO0FBT0QsMENBd0dDO0FBbFJELCtDQUErQztBQUMvQyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLCtCQUErQjtBQUUvQiwyQ0FBNEM7QUFFNUMsbUNBQWlDO0FBRWpDLHlDQUFxQztBQUNyQyxpREFBeUc7QUFDekcsaURBQTZDO0FBUTdDOztHQUVHO0FBQ0gsU0FBZ0Isd0JBQXdCLENBQXFDLEtBQTREO0lBQ3ZJLE9BQU8sS0FBSyxFQUFFLE9BQVUsRUFBRSxFQUFFO1FBQzFCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDbkMsTUFBTSxlQUFlLEdBQUcsV0FBVyxLQUFLLEVBQUUsQ0FBQztRQUMzQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxhQUFhLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFbEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsZUFBZSxJQUFJLENBQUMsQ0FBQztRQUNyRCxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixZQUFZLElBQUksQ0FBQyxDQUFDO1FBQ2xELE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUV4RCxNQUFNLElBQUEsNkJBQWMsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUFhLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixDQUFDLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5RyxNQUFNLE9BQU8sR0FBRyxJQUFJLHlCQUF5QixDQUMzQyxZQUFZLEVBQ1osZUFBZSxFQUNmLE9BQU8sQ0FBQyxNQUFNLEVBQ2QsT0FB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LENBQUMsQ0FBQztBQUMzRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2hpbGRfcHJvY2VzcyBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgdHlwZSB7IFRlc3RDb250ZXh0IH0gZnJvbSAnLi9pbnRlZy10ZXN0JztcbmltcG9ydCB7IFJFU09VUkNFU19ESVIgfSBmcm9tICcuL3Jlc291cmNlcyc7XG5pbXBvcnQgdHlwZSB7IFNoZWxsT3B0aW9ucyB9IGZyb20gJy4vc2hlbGwnO1xuaW1wb3J0IHsgcmltcmFmIH0gZnJvbSAnLi9zaGVsbCc7XG5pbXBvcnQgdHlwZSB7IEF3c0NvbnRleHQgfSBmcm9tICcuL3dpdGgtYXdzJztcbmltcG9ydCB7IHdpdGhBd3MgfSBmcm9tICcuL3dpdGgtYXdzJztcbmltcG9ydCB7IGNsb25lRGlyZWN0b3J5LCBpbnN0YWxsTnBtUGFja2FnZXMsIFRlc3RGaXh0dXJlLCBERUZBVUxUX1RFU1RfVElNRU9VVF9TIH0gZnJvbSAnLi93aXRoLWNkay1hcHAnO1xuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tICcuL3dpdGgtdGltZW91dCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uT3V0cHV0IHtcbiAgYWN0aW9uU3VjY2VlZGVkPzogYm9vbGVhbjtcbiAgYWN0aW9uT3V0cHV0PzogYW55O1xuICBzaGVsbE91dHB1dD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBIaWdoZXIgb3JkZXIgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhIGJsb2NrIHdpdGggYSBTQU0gSW50ZWdyYXRpb24gQ0RLIGFwcCBmaXh0dXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoU2FtSW50ZWdyYXRpb25DZGtBcHA8QSBleHRlbmRzIFRlc3RDb250ZXh0ICYgQXdzQ29udGV4dD4oYmxvY2s6IChjb250ZXh0OiBTYW1JbnRlZ3JhdGlvblRlc3RGaXh0dXJlKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gIHJldHVybiBhc3luYyAoY29udGV4dDogQSkgPT4ge1xuICAgIGNvbnN0IHJhbmR5ID0gY29udGV4dC5yYW5kb21TdHJpbmc7XG4gICAgY29uc3Qgc3RhY2tOYW1lUHJlZml4ID0gYGNka3Rlc3QtJHtyYW5keX1gO1xuICAgIGNvbnN0IGludGVnVGVzdERpciA9IHBhdGguam9pbihvcy50bXBkaXIoKSwgYGNkay1pbnRlZy0ke3JhbmR5fWApO1xuXG4gICAgY29udGV4dC5sb2coYCBTdGFjayBwcmVmaXg6ICAgJHtzdGFja05hbWVQcmVmaXh9XFxuYCk7XG4gICAgY29udGV4dC5sb2coYCBUZXN0IGRpcmVjdG9yeTogJHtpbnRlZ1Rlc3REaXJ9XFxuYCk7XG4gICAgY29udGV4dC5sb2coYCBSZWdpb246ICAgICAgICAgJHtjb250ZXh0LmF3cy5yZWdpb259XFxuYCk7XG5cbiAgICBhd2FpdCBjbG9uZURpcmVjdG9yeShwYXRoLmpvaW4oUkVTT1VSQ0VTX0RJUiwgJ2Nkay1hcHBzJywgJ3NhbV9jZGtfaW50ZWdfYXBwJyksIGludGVnVGVzdERpciwgY29udGV4dC5vdXRwdXQpO1xuICAgIGNvbnN0IGZpeHR1cmUgPSBuZXcgU2FtSW50ZWdyYXRpb25UZXN0Rml4dHVyZShcbiAgICAgIGludGVnVGVzdERpcixcbiAgICAgIHN0YWNrTmFtZVByZWZpeCxcbiAgICAgIGNvbnRleHQub3V0cHV0LFxuICAgICAgY29udGV4dC5hd3MsXG4gICAgICBjb250ZXh0LnJhbmRvbVN0cmluZyk7XG4gICAgYXdhaXQgZml4dHVyZS5lY3JQdWJsaWNMb2dpbigpO1xuXG4gICAgbGV0IHN1Y2Nlc3MgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbnN0YWxsYXRpb25WZXJzaW9uID0gZml4dHVyZS5saWJyYXJ5LnJlcXVlc3RlZFZlcnNpb24oKTtcblxuICAgICAgY29uc3QgYWxwaGFJbnN0YWxsYXRpb25WZXJzaW9uID0gZml4dHVyZS5saWJyYXJ5LnJlcXVlc3RlZEFscGhhVmVyc2lvbigpO1xuICAgICAgYXdhaXQgaW5zdGFsbE5wbVBhY2thZ2VzKGZpeHR1cmUsIHtcbiAgICAgICAgJ2F3cy1jZGstbGliJzogaW5zdGFsbGF0aW9uVmVyc2lvbixcbiAgICAgICAgJ0Bhd3MtY2RrL2F3cy1sYW1iZGEtZ28tYWxwaGEnOiBhbHBoYUluc3RhbGxhdGlvblZlcnNpb24sXG4gICAgICAgICdAYXdzLWNkay9hd3MtbGFtYmRhLXB5dGhvbi1hbHBoYSc6IGFscGhhSW5zdGFsbGF0aW9uVmVyc2lvbixcbiAgICAgICAgJ2NvbnN0cnVjdHMnOiAnXjEwJyxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBibG9jayhmaXh0dXJlKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIC8vIFdlIHN1cnZpdmUgY2VydGFpbiBjYXNlcyBpbnZvbHZpbmcgZ29wa2cuaW5cbiAgICAgIGlmIChlcnJvckNhdXNlZEJ5R29Qa2coZS5tZXNzYWdlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzdWNjZXNzID0gZmFsc2U7XG4gICAgICB0aHJvdyBlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuSU5URUdfTk9fQ0xFQU4pIHtcbiAgICAgICAgY29udGV4dC5sb2coYExlZnQgdGVzdCBkaXJlY3RvcnkgaW4gJyR7aW50ZWdUZXN0RGlyfScgKCRJTlRFR19OT19DTEVBTilcXG5gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IGZpeHR1cmUuZGlzcG9zZShzdWNjZXNzKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgb3Igbm90IHRoZSBlcnJvciBpcyBiZWluZyBjYXVzZWQgYnkgZ29wa2cuaW4gYmVpbmcgZG93blxuICpcbiAqIE91ciBHbyBidWlsZCBkZXBlbmRzIG9uIGh0dHBzOi8vZ29wa2cuaW4vLCB3aGljaCBoYXMgZXJyb3JzIHByZXR0eSBvZnRlblxuICogKGV2ZXJ5IGNvdXBsZSBvZiBkYXlzKS4gSXQgaXMgcnVuIGJ5IGEgc2luZ2xlIHZvbHVudGVlci5cbiAqL1xuZnVuY3Rpb24gZXJyb3JDYXVzZWRCeUdvUGtnKGVycm9yOiBzdHJpbmcpIHtcbiAgLy8gVGhlIGVycm9yIGlzIGRpZmZlcmVudCBkZXBlbmRpbmcgb24gd2hhdCByZXF1ZXN0IGZhaWxzLiBNZXNzYWdlcyByZWNvZ25pemVkOlxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyAgICBnbzogZ2l0aHViLmNvbS9hd3MvYXdzLWxhbWJkYS1nb0B2MS4yOC4wIHJlcXVpcmVzXG4gIC8vICAgICAgICBnb3BrZy5pbi95YW1sLnYzQHYzLjAuMC0yMDIwMDYxNTExMzQxMy1lZWVjYTQ4ZmU3NzY6IGludmFsaWQgdmVyc2lvbjogZ2l0IGxzLXJlbW90ZSAtcSBvcmlnaW4gaW4gL2dvL3BrZy9tb2QvY2FjaGUvdmNzLzA5MDFkYzFlZjY3ZmNjZTFjOWIzYWU1MTA3ODc0MGRlNGEwZTJkYzY3M2U3MjA1ODRhYzMwMjk3M2FmODJmMzY6IGV4aXQgc3RhdHVzIDEyODpcbiAgLy8gICAgICAgIHJlbW90ZTogQ2Fubm90IG9idGFpbiByZWZzIGZyb20gR2l0SHViOiBjYW5ub3QgdGFsayB0byBHaXRIdWI6IEdldCBodHRwczovL2dpdGh1Yi5jb20vZ28teWFtbC95YW1sLmdpdC9pbmZvL3JlZnM/c2VydmljZT1naXQtdXBsb2FkLXBhY2s6IG5ldC9odHRwOiByZXF1ZXN0IGNhbmNlbGVkIChDbGllbnQuVGltZW91dCBleGNlZWRlZCB3aGlsZSBhd2FpdGluZyBoZWFkZXJzKVxuICAvLyAgICAgICAgZmF0YWw6IHVuYWJsZSB0byBhY2Nlc3MgJ2h0dHBzOi8vZ29wa2cuaW4veWFtbC52My8nOiBUaGUgcmVxdWVzdGVkIFVSTCByZXR1cm5lZCBlcnJvcjogNTAyXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vICAgIGdvOiBkb3dubG9hZGluZyBnaXRodWIuY29tL2F3cy9hd3MtbGFtYmRhLWdvIHYxLjI4LjBcbiAgLy8gICAgZ286IGdpdGh1Yi5jb20vYXdzL2F3cy1sYW1iZGEtZ29AdjEuMjguMCByZXF1aXJlc1xuICAvLyAgICAgICAgZ29wa2cuaW4veWFtbC52M0B2My4wLjAtMjAyMDA2MTUxMTM0MTMtZWVlY2E0OGZlNzc2OiB1bnJlY29nbml6ZWQgaW1wb3J0IHBhdGggXCJnb3BrZy5pbi95YW1sLnYzXCI6IHJlYWRpbmcgaHR0cHM6Ly9nb3BrZy5pbi95YW1sLnYzP2dvLWdldD0xOiA1MDIgQmFkIEdhdGV3YXlcbiAgLy8gICAgICAgIHNlcnZlciByZXNwb25zZTogQ2Fubm90IG9idGFpbiByZWZzIGZyb20gR2l0SHViOiBjYW5ub3QgdGFsayB0byBHaXRIdWI6IEdldCBodHRwczovL2dpdGh1Yi5jb20vZ28teWFtbC95YW1sLmdpdC9pbmZvL3JlZnM/c2VydmljZT1naXQtdXBsb2FkLXBhY2s6IG5ldC9odHRwOiByZXF1ZXN0IGNhbmNlbGVkIChDbGllbnQuVGltZW91dCBleGNlZWRlZCB3aGlsZSBhd2FpdGluZyBoZWFkZXJzKVxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyAgICBnbzogZ2l0aHViLmNvbS9hd3MvYXdzLWxhbWJkYS1nb0B2MS4yOC4wIHJlcXVpcmVzXG4gIC8vICAgICAgICBnb3BrZy5pbi95YW1sLnYzQHYzLjAuMC0yMDIwMDYxNTExMzQxMy1lZWVjYTQ4ZmU3NzY6IGludmFsaWQgdmVyc2lvbjogZ2l0IGZldGNoIC1mIG9yaWdpbiByZWZzL2hlYWRzLyo6cmVmcy9oZWFkcy8qIHJlZnMvdGFncy8qOnJlZnMvdGFncy8qIGluIC9nby9wa2cvbW9kL2NhY2hlL3Zjcy8wOTAxZGMxZWY2N2ZjY2UxYzliM2FlNTEwNzg3NDBkZTRhMGUyZGM2NzNlNzIwNTg0YWMzMDI5NzNhZjgyZjM2OiBleGl0IHN0YXR1cyAxMjg6XG4gIC8vICAgICAgICBlcnJvcjogUlBDIGZhaWxlZDsgSFRUUCA1MDIgY3VybCAyMiBUaGUgcmVxdWVzdGVkIFVSTCByZXR1cm5lZCBlcnJvcjogNTAyXG4gIC8vICAgICAgICBmYXRhbDogdGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1bmV4cGVjdGVkbHlcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICByZXR1cm4gKGVycm9yLmluY2x1ZGVzKCdnb3BrZ1xcLmluLippbnZhbGlkIHZlcnNpb24uKmV4aXQgc3RhdHVzIDEyOCcpXG4gICAgfHwgZXJyb3IubWF0Y2goL3VucmVjb2duaXplZCBpbXBvcnQgcGF0aFteXFxuXWdvcGtnXFwuaW4vKSk7XG59XG5cbi8qKlxuICogU0FNIEludGVncmF0aW9uIHRlc3QgZml4dHVyZSBmb3IgQ0RLIC0gU0FNIGludGVncmF0aW9uIHRlc3QgY2FzZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhTYW1JbnRlZ3JhdGlvbkZpeHR1cmUoYmxvY2s6IChjb250ZXh0OiBTYW1JbnRlZ3JhdGlvblRlc3RGaXh0dXJlKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gIHJldHVybiB3aXRoQXdzKHdpdGhUaW1lb3V0KERFRkFVTFRfVEVTVF9USU1FT1VUX1MsIHdpdGhTYW1JbnRlZ3JhdGlvbkNka0FwcChibG9jaykpKTtcbn1cblxuZXhwb3J0IGNsYXNzIFNhbUludGVncmF0aW9uVGVzdEZpeHR1cmUgZXh0ZW5kcyBUZXN0Rml4dHVyZSB7XG4gIHB1YmxpYyBhc3luYyBzYW1TaGVsbChjb21tYW5kOiBzdHJpbmdbXSwgZmlsdGVyPzogc3RyaW5nLCBhY3Rpb24/OiAoKSA9PiBhbnksIG9wdGlvbnM6IE9taXQ8U2hlbGxPcHRpb25zLCAnY3dkJyB8ICdvdXRwdXQnPiA9IHt9KTogUHJvbWlzZTxBY3Rpb25PdXRwdXQ+IHtcbiAgICByZXR1cm4gc2hlbGxXaXRoQWN0aW9uKGNvbW1hbmQsIGZpbHRlciwgYWN0aW9uLCB7XG4gICAgICBvdXRwdXRzOiBbdGhpcy5vdXRwdXRdLFxuICAgICAgY3dkOiBwYXRoLmpvaW4odGhpcy5pbnRlZ1Rlc3REaXIsICdjZGsub3V0JykudG9TdHJpbmcoKSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2FtQnVpbGQoc3RhY2tOYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBmdWxsU3RhY2tOYW1lID0gdGhpcy5mdWxsU3RhY2tOYW1lKHN0YWNrTmFtZSk7XG4gICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aC5qb2luKHRoaXMuaW50ZWdUZXN0RGlyLCAnY2RrLm91dCcsIGAke2Z1bGxTdGFja05hbWV9LnRlbXBsYXRlLmpzb25gKTtcbiAgICBjb25zdCBhcmdzID0gWyctLXRlbXBsYXRlJywgdGVtcGxhdGVQYXRoLnRvU3RyaW5nKCldO1xuICAgIHJldHVybiB0aGlzLnNhbVNoZWxsKFsnc2FtJywgJ2J1aWxkJywgLi4uYXJnc10pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNhbUxvY2FsU3RhcnRBcGkoc3RhY2tOYW1lOiBzdHJpbmcsIGlzQnVpbHQ6IGJvb2xlYW4sIHBvcnQ6IG51bWJlciwgYXBpUGF0aDogc3RyaW5nKTogUHJvbWlzZTxBY3Rpb25PdXRwdXQ+IHtcbiAgICBjb25zdCBmdWxsU3RhY2tOYW1lID0gdGhpcy5mdWxsU3RhY2tOYW1lKHN0YWNrTmFtZSk7XG4gICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aC5qb2luKHRoaXMuaW50ZWdUZXN0RGlyLCAnY2RrLm91dCcsIGAke2Z1bGxTdGFja05hbWV9LnRlbXBsYXRlLmpzb25gKTtcbiAgICBjb25zdCBhcmdzID0gaXNCdWlsdD8gW10gOiBbJy0tdGVtcGxhdGUnLCB0ZW1wbGF0ZVBhdGgudG9TdHJpbmcoKV07XG4gICAgYXJncy5wdXNoKCctLXBvcnQnKTtcbiAgICBhcmdzLnB1c2gocG9ydC50b1N0cmluZygpKTtcblxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLXNhbS1jbGkvcHVsbC83ODkyXG4gICAgYXJncy5wdXNoKCctLW5vLW1lbW9yeS1saW1pdCcpO1xuXG4gICAgLy8gXCJQcmVzcyBDdHJsK0MgdG8gcXVpdFwiIGxvb2tzIHRvIGJlIHByaW50ZWQgYnkgYSBGbGFzayBzZXJ2ZXIgYnVpbHQgaW50byBTQU0gQ0xJLlxuICAgIHJldHVybiB0aGlzLnNhbVNoZWxsKFsnc2FtJywgJ2xvY2FsJywgJ3N0YXJ0LWFwaScsIC4uLmFyZ3NdLCAnUHJlc3MgQ1RSTCtDIHRvIHF1aXQnLCAoKT0+e1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPEFjdGlvbk91dHB1dD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBheGlvcy5nZXQoYGh0dHA6Ly8xMjcuMC4wLjE6JHtwb3J0fSR7YXBpUGF0aH1gKS50aGVuKCByZXNwID0+IHtcbiAgICAgICAgICByZXNvbHZlKHJlc3AuZGF0YSk7XG4gICAgICAgIH0pLmNhdGNoKCBlcnJvciA9PiB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgRmFpbGVkIHRvIGludm9rZSBhcGkgcGF0aCAke2FwaVBhdGh9IG9uIHBvcnQgJHtwb3J0fSB3aXRoIGVycm9yICR7ZXJyb3J9YCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFudXAgbGVmdG92ZXIgc3RhY2tzIGFuZCBidWNrZXRzXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGlzcG9zZShzdWNjZXNzOiBib29sZWFuKSB7XG4gICAgLy8gSWYgdGhlIHRlc3RzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIGhhcHBpbHkgZGVsZXRlIHRoZSBmaXh0dXJlXG4gICAgLy8gKG90aGVyd2lzZSBsZWF2ZSBpdCBmb3IgaHVtYW5zIHRvIGluc3BlY3QpXG4gICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IGNsZWFuZWQgPSByaW1yYWYodGhpcy5pbnRlZ1Rlc3REaXIpO1xuICAgICAgaWYgKCFjbGVhbmVkKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBjbGVhbiB1cCAke3RoaXMuaW50ZWdUZXN0RGlyfSBkdWUgdG8gcGVybWlzc2lvbnMgaXNzdWVzIChEb2NrZXIgcnVubmluZyBhcyByb290PylgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbUludGVnZXIobWluOiBudW1iZXIsIG1heDogbnVtYmVyKSB7XG4gIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSArIG1pbik7XG59XG5cbi8qKlxuICogQSBzaGVsbCBjb21tYW5kIHRoYXQgZG9lcyB3aGF0IHlvdSB3YW50XG4gKlxuICogSXMgcGxhdGZvcm0tYXdhcmUsIGhhbmRsZXMgZXJyb3JzIG5pY2VseS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNoZWxsV2l0aEFjdGlvbihcbiAgY29tbWFuZDogc3RyaW5nW10sXG4gIGZpbHRlcj86IHN0cmluZyxcbiAgYWN0aW9uPzogKCkgPT4gUHJvbWlzZTxhbnk+LFxuICBvcHRpb25zOiBTaGVsbE9wdGlvbnMgPSB7fSxcbiAgYWN0aW9uVGltZW91dFNlY29uZHM6IG51bWJlciA9IDYwMCxcbik6IFByb21pc2U8QWN0aW9uT3V0cHV0PiB7XG4gIGlmIChvcHRpb25zLm1vZEVudiAmJiBvcHRpb25zLmVudikge1xuICAgIHRocm93IG5ldyBFcnJvcignVXNlIGVpdGhlciBlbnYgb3IgbW9kRW52IGJ1dCBub3QgYm90aCcpO1xuICB9XG5cbiAgY29uc3Qgd3JpdGVUb091dHB1dHMgPSAoeDogc3RyaW5nKSA9PiB7XG4gICAgZm9yIChjb25zdCBvdXRwdXQgb2Ygb3B0aW9ucy5vdXRwdXRzID8/IFtdKSB7XG4gICAgICBvdXRwdXQud3JpdGUoeCk7XG4gICAgfVxuICB9O1xuICB3cml0ZVRvT3V0cHV0cyhg8J+SuyAke2NvbW1hbmQuam9pbignICcpfVxcbmApO1xuXG4gIGNvbnN0IGVudiA9IG9wdGlvbnMuZW52ID8/IChvcHRpb25zLm1vZEVudiA/IHsgLi4ucHJvY2Vzcy5lbnYsIC4uLm9wdGlvbnMubW9kRW52IH0gOiB1bmRlZmluZWQpO1xuXG4gIGNvbnN0IGNoaWxkID0gY2hpbGRfcHJvY2Vzcy5zcGF3bihjb21tYW5kLmpvaW4oJyAnKSwgW10sIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGVudixcbiAgICAvLyBOZWVkIHRoaXMgZm9yIFdpbmRvd3Mgd2hlcmUgd2Ugd2FudCAuY21kIGFuZCAuYmF0IHRvIGJlIGZvdW5kIGFzIHdlbGwuXG4gICAgc2hlbGw6IHRydWUsXG4gICAgc3RkaW86IFsnaWdub3JlJywgJ3BpcGUnLCAncGlwZSddLFxuICB9KTtcblxuICByZXR1cm4gbmV3IFByb21pc2U8QWN0aW9uT3V0cHV0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgb3V0ID0gbmV3IEFycmF5PEJ1ZmZlcj4oKTtcbiAgICBjb25zdCBzdGRvdXQgPSBuZXcgQXJyYXk8QnVmZmVyPigpO1xuICAgIGNvbnN0IHN0ZGVyciA9IG5ldyBBcnJheTxCdWZmZXI+KCk7XG4gICAgbGV0IGFjdGlvblN1Y2NlZWRlZCA9IGZhbHNlO1xuICAgIGxldCBhY3Rpb25PdXRwdXQ6IGFueTtcbiAgICBsZXQgYWN0aW9uRXhlY3V0ZWQgPSBmYWxzZTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIG1heWJlRXhlY3V0ZUFjdGlvbihjaHVuazogYW55KSB7XG4gICAgICBvdXQucHVzaChCdWZmZXIuZnJvbShjaHVuaykpO1xuICAgICAgaWYgKCFhY3Rpb25FeGVjdXRlZCAmJiB0eXBlb2YgZmlsdGVyID09PSAnc3RyaW5nJyAmJiBCdWZmZXIuY29uY2F0KG91dCkudG9TdHJpbmcoJ3V0Zi04JykuaW5jbHVkZXMoZmlsdGVyKSAmJiB0eXBlb2YgYWN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGFjdGlvbkV4ZWN1dGVkID0gdHJ1ZTtcbiAgICAgICAgd3JpdGVUb091dHB1dHMoJ2JlZm9yZSBleGVjdXRpbmcgYWN0aW9uXFxuJyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgYWN0aW9uKCk7XG4gICAgICAgICAgd3JpdGVUb091dHB1dHMoYGFjdGlvbiBvdXRwdXQgaXMgJHtKU09OLnN0cmluZ2lmeShvdXRwdXQpfVxcbmApO1xuICAgICAgICAgIGFjdGlvbk91dHB1dCA9IG91dHB1dDtcbiAgICAgICAgICBhY3Rpb25TdWNjZWVkZWQgPSB0cnVlO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgd3JpdGVUb091dHB1dHMoYGFjdGlvbiBlcnJvciBpcyAke2Vycm9yfVxcbmApO1xuICAgICAgICAgIGFjdGlvblN1Y2NlZWRlZCA9IGZhbHNlO1xuICAgICAgICAgIGFjdGlvbk91dHB1dCA9IGVycm9yO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHdyaXRlVG9PdXRwdXRzKCd0ZXJtaW5hdGUgc2FtIHN1YiBwcm9jZXNzXFxuJyk7XG4gICAgICAgICAga2lsbFN1YlByb2Nlc3MoY2hpbGQsIGNvbW1hbmQuam9pbignICcpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgYWN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBSZWplY3Qgd2l0aCBhbiBlcnJvciBpZiBhbiBhY3Rpb24gaXMgY29uZmlndXJlZCwgYnV0IHRoZSBmaWx0ZXIgZmFpbGVkXG4gICAgICAvLyB0byBzaG93IHVwIGluIHRoZSBvdXRwdXQgYmVmb3JlIHRoZSB0aW1lb3V0IG9jY3VycmVkLlxuICAgICAgc2V0VGltZW91dChcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGlmICghYWN0aW9uRXhlY3V0ZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFRpbWVkIG91dCB3YWl0aW5nIGZvciBmaWx0ZXIgJHtKU09OLnN0cmluZ2lmeShmaWx0ZXIpfSB0byBhcHBlYXIgaW4gY29tbWFuZCBvdXRwdXQgYWZ0ZXIgJHthY3Rpb25UaW1lb3V0U2Vjb25kc30gc2Vjb25kc1xcbk91dHB1dCBzbyBmYXI6XFxuJHtCdWZmZXIuY29uY2F0KG91dCkudG9TdHJpbmcoJ3V0Zi04Jyl9YCkpO1xuICAgICAgICAgICAga2lsbFN1YlByb2Nlc3MoY2hpbGQsIGNvbW1hbmQuam9pbignICcpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIGFjdGlvblRpbWVvdXRTZWNvbmRzICogMV8wMDAsXG4gICAgICApLnVucmVmKCk7XG4gICAgfVxuXG4gICAgY2hpbGQuc3Rkb3V0IS5vbignZGF0YScsIGNodW5rID0+IHtcbiAgICAgIHdyaXRlVG9PdXRwdXRzKGNodW5rKTtcbiAgICAgIHN0ZG91dC5wdXNoKGNodW5rKTtcbiAgICAgIHZvaWQgbWF5YmVFeGVjdXRlQWN0aW9uKGNodW5rKTtcbiAgICB9KTtcblxuICAgIGNoaWxkLnN0ZGVyciEub24oJ2RhdGEnLCBjaHVuayA9PiB7XG4gICAgICB3cml0ZVRvT3V0cHV0cyhjaHVuayk7XG4gICAgICBpZiAob3B0aW9ucy5jYXB0dXJlU3RkZXJyID8/IHRydWUpIHtcbiAgICAgICAgc3RkZXJyLnB1c2goY2h1bmspO1xuICAgICAgfVxuICAgICAgdm9pZCBtYXliZUV4ZWN1dGVBY3Rpb24oY2h1bmspO1xuICAgIH0pO1xuXG4gICAgY2hpbGQub25jZSgnZXJyb3InLCByZWplY3QpO1xuXG4gICAgLy8gV2FpdCBmb3IgJ2V4aXQnIGluc3RlYWQgb2YgY2xvc2UsIGRvbid0IGNhcmUgYWJvdXQgcmVhZGluZyB0aGUgc3RyZWFtcyBhbGwgdGhlIHdheSB0byB0aGUgZW5kXG4gICAgY2hpbGQub25jZSgnZXhpdCcsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgIHdyaXRlVG9PdXRwdXRzKGBTdWJwcm9jZXNzIGhhcyBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX0sIHNpZ25hbCAke3NpZ25hbH1cXG5gKTtcbiAgICAgIGNvbnN0IG91dHB1dCA9IChCdWZmZXIuY29uY2F0KHN0ZG91dCkudG9TdHJpbmcoJ3V0Zi04JykgKyBCdWZmZXIuY29uY2F0KHN0ZGVycikudG9TdHJpbmcoJ3V0Zi04JykpLnRyaW0oKTtcbiAgICAgIGlmIChjb2RlID09IG51bGwgfHwgY29kZSA9PT0gMCB8fCBvcHRpb25zLmFsbG93RXJyRXhpdCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICAgICAgcmVzdWx0LnB1c2goYWN0aW9uT3V0cHV0KTtcbiAgICAgICAgcmVzdWx0LnB1c2gob3V0cHV0KTtcbiAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgYWN0aW9uU3VjY2VlZGVkOiBhY3Rpb25TdWNjZWVkZWQsXG4gICAgICAgICAgYWN0aW9uT3V0cHV0OiBhY3Rpb25PdXRwdXQsXG4gICAgICAgICAgc2hlbGxPdXRwdXQ6IG91dHB1dCxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGAnJHtjb21tYW5kLmpvaW4oJyAnKX0nIGV4aXRlZCB3aXRoIGVycm9yIGNvZGUgJHtjb2RlfS4gT3V0cHV0OiBcXG4ke291dHB1dH1gKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBraWxsU3ViUHJvY2VzcyhjaGlsZDogY2hpbGRfcHJvY2Vzcy5DaGlsZFByb2Nlc3MsIGNvbW1hbmQ6IHN0cmluZykge1xuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHN1YiBwcm9jZXNzIGlzIHJ1bm5pbmcgaW4gY29udGFpbmVyLCBzbyBjaGlsZF9wcm9jZXNzLnNwYXduIHdpbGxcbiAgICogY3JlYXRlIG11bHRpcGxlIHByb2Nlc3NlcywgYW5kIHRvIGtpbGwgYWxsIG9mIHRoZW0gd2UgbmVlZCB0byBydW4gZGlmZmVyZW50IGxvZ2ljXG4gICAqL1xuICBjaGlsZC5raWxsKCdTSUdJTlQnKTtcbiAgY2hpbGRfcHJvY2Vzcy5leGVjKGBmb3IgcGlkIGluICQocHMgLWVmIHwgZ3JlcCBcIiR7Y29tbWFuZH1cIiB8IGF3ayAne3ByaW50ICQyfScpOyBkbyBraWxsIC0yICRwaWQ7IGRvbmVgKTtcbn1cbiJdfQ==
|