UNPKG

aws-cdk

Version:

CDK Toolkit, the command line tool for CDK apps

182 lines 25.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MockSdk = exports.MockSdkProvider = exports.setDefaultSTSMocks = exports.restoreSdkMocksToDefault = exports.mockSTSClient = exports.mockStepFunctionsClient = exports.mockSSMClient = exports.mockSecretsManagerClient = exports.mockS3Client = exports.mockRoute53Client = exports.mockLambdaClient = exports.mockKMSClient = exports.mockIAMClient = exports.mockElasticLoadBalancingV2Client = exports.mockECSClient = exports.mockECRClient = exports.mockEC2Client = exports.mockCodeBuildClient = exports.mockCloudWatchClient = exports.mockCloudFormationClient = exports.mockAppSyncClient = exports.FAKE_CREDENTIAL_CHAIN = exports.FAKE_CREDENTIALS = void 0; exports.undoAllSdkMocks = undoAllSdkMocks; exports.mockBootstrapStack = mockBootstrapStack; exports.mockResolvedEnvironment = mockResolvedEnvironment; require("aws-sdk-client-mock-jest"); const client_appsync_1 = require("@aws-sdk/client-appsync"); const client_cloudformation_1 = require("@aws-sdk/client-cloudformation"); const client_cloudwatch_logs_1 = require("@aws-sdk/client-cloudwatch-logs"); const client_codebuild_1 = require("@aws-sdk/client-codebuild"); const client_ec2_1 = require("@aws-sdk/client-ec2"); const client_ecr_1 = require("@aws-sdk/client-ecr"); const client_ecs_1 = require("@aws-sdk/client-ecs"); const client_elastic_load_balancing_v2_1 = require("@aws-sdk/client-elastic-load-balancing-v2"); const client_iam_1 = require("@aws-sdk/client-iam"); const client_kms_1 = require("@aws-sdk/client-kms"); const client_lambda_1 = require("@aws-sdk/client-lambda"); const client_route_53_1 = require("@aws-sdk/client-route-53"); const client_s3_1 = require("@aws-sdk/client-s3"); const client_secrets_manager_1 = require("@aws-sdk/client-secrets-manager"); const client_sfn_1 = require("@aws-sdk/client-sfn"); const client_ssm_1 = require("@aws-sdk/client-ssm"); const client_sts_1 = require("@aws-sdk/client-sts"); const credential_providers_1 = require("@aws-sdk/credential-providers"); const aws_sdk_client_mock_1 = require("aws-sdk-client-mock"); const aws_auth_1 = require("../../lib/api/aws-auth"); const deployments_1 = require("../../lib/api/deployments"); exports.FAKE_CREDENTIALS = { accessKeyId: 'ACCESS', secretAccessKey: 'SECRET', sessionToken: 'TOKEN ', }; exports.FAKE_CREDENTIAL_CHAIN = (0, credential_providers_1.createCredentialChain)(() => Promise.resolve(exports.FAKE_CREDENTIALS)); // Default implementations exports.mockAppSyncClient = (0, aws_sdk_client_mock_1.mockClient)(client_appsync_1.AppSyncClient); exports.mockCloudFormationClient = (0, aws_sdk_client_mock_1.mockClient)(client_cloudformation_1.CloudFormationClient); exports.mockCloudWatchClient = (0, aws_sdk_client_mock_1.mockClient)(client_cloudwatch_logs_1.CloudWatchLogsClient); exports.mockCodeBuildClient = (0, aws_sdk_client_mock_1.mockClient)(client_codebuild_1.CodeBuildClient); exports.mockEC2Client = (0, aws_sdk_client_mock_1.mockClient)(client_ec2_1.EC2Client); exports.mockECRClient = (0, aws_sdk_client_mock_1.mockClient)(client_ecr_1.ECRClient); exports.mockECSClient = (0, aws_sdk_client_mock_1.mockClient)(client_ecs_1.ECSClient); exports.mockElasticLoadBalancingV2Client = (0, aws_sdk_client_mock_1.mockClient)(client_elastic_load_balancing_v2_1.ElasticLoadBalancingV2Client); exports.mockIAMClient = (0, aws_sdk_client_mock_1.mockClient)(client_iam_1.IAMClient); exports.mockKMSClient = (0, aws_sdk_client_mock_1.mockClient)(client_kms_1.KMSClient); exports.mockLambdaClient = (0, aws_sdk_client_mock_1.mockClient)(client_lambda_1.LambdaClient); exports.mockRoute53Client = (0, aws_sdk_client_mock_1.mockClient)(client_route_53_1.Route53Client); exports.mockS3Client = (0, aws_sdk_client_mock_1.mockClient)(client_s3_1.S3Client); exports.mockSecretsManagerClient = (0, aws_sdk_client_mock_1.mockClient)(client_secrets_manager_1.SecretsManagerClient); exports.mockSSMClient = (0, aws_sdk_client_mock_1.mockClient)(client_ssm_1.SSMClient); exports.mockStepFunctionsClient = (0, aws_sdk_client_mock_1.mockClient)(client_sfn_1.SFNClient); exports.mockSTSClient = (0, aws_sdk_client_mock_1.mockClient)(client_sts_1.STSClient); /** * Resets clients back to defaults and resets the history * of usage of the mock. * * NOTE: This is distinct from the terminology of "restore" that is usually used * for Sinon/Jest mocks; "restore" usually means to discard the mock and restore the * original implementation. Instead, in this code base we mean "reset + * default". */ const restoreSdkMocksToDefault = () => { applyToAllMocks('reset'); exports.mockAppSyncClient.onAnyCommand().resolves({}); exports.mockCloudFormationClient.onAnyCommand().resolves({}); exports.mockCloudWatchClient.onAnyCommand().resolves({}); exports.mockCodeBuildClient.onAnyCommand().resolves({}); exports.mockEC2Client.onAnyCommand().resolves({}); exports.mockECRClient.onAnyCommand().resolves({}); exports.mockECSClient.onAnyCommand().resolves({}); exports.mockElasticLoadBalancingV2Client.onAnyCommand().resolves({}); exports.mockIAMClient.onAnyCommand().resolves({}); exports.mockKMSClient.onAnyCommand().resolves({}); exports.mockLambdaClient.onAnyCommand().resolves({}); exports.mockRoute53Client.onAnyCommand().resolves({}); exports.mockS3Client.onAnyCommand().resolves({}); exports.mockSecretsManagerClient.onAnyCommand().resolves({}); exports.mockSSMClient.onAnyCommand().resolves({}); exports.mockSSMClient.onAnyCommand().resolves({}); }; exports.restoreSdkMocksToDefault = restoreSdkMocksToDefault; /** * Restore all SDK mocks to their real implementations * * This file will mock a bunch of SDK clients as soon as it is imported, and it's * not really possible to avoid importing it. To run any tests that need real clients * instead of fake ones, you need to run this function. * * This function would usually be called "restore" in Jest/Sinon terminology, * but "restore" was already being used with a different meaning in this file, * so I'm introducing the term "undo" as a synonym for "restore" in the context * of SDK mocks. */ function undoAllSdkMocks() { applyToAllMocks('restore'); } ; function applyToAllMocks(meth) { exports.mockAppSyncClient[meth](); exports.mockCloudFormationClient[meth](); exports.mockCloudWatchClient[meth](); exports.mockCodeBuildClient[meth](); exports.mockEC2Client[meth](); exports.mockECRClient[meth](); exports.mockECSClient[meth](); exports.mockElasticLoadBalancingV2Client[meth](); exports.mockIAMClient[meth](); exports.mockKMSClient[meth](); exports.mockLambdaClient[meth](); exports.mockRoute53Client[meth](); exports.mockS3Client[meth](); exports.mockSecretsManagerClient[meth](); exports.mockSSMClient[meth](); exports.mockStepFunctionsClient[meth](); exports.mockSTSClient[meth](); } const setDefaultSTSMocks = () => { exports.mockSTSClient.on(client_sts_1.GetCallerIdentityCommand).resolves({ Account: '123456789012', Arn: 'aws:swa:123456789012:some-other-stuff', }); exports.mockSTSClient.on(client_sts_1.AssumeRoleCommand).resolves({ Credentials: { AccessKeyId: exports.FAKE_CREDENTIALS.accessKeyId, SecretAccessKey: exports.FAKE_CREDENTIALS.secretAccessKey, SessionToken: exports.FAKE_CREDENTIALS.sessionToken, Expiration: new Date(Date.now() + 3600 * 1000), }, }); }; exports.setDefaultSTSMocks = setDefaultSTSMocks; /** * MockSdkProvider that is mostly SdkProvider but * with fake credentials and account information. * * For mocking the actual clients, the above mocking * clients may be used. */ class MockSdkProvider extends aws_auth_1.SdkProvider { constructor() { super(exports.FAKE_CREDENTIAL_CHAIN, 'bermuda-triangle-1337'); } defaultAccount() { return Promise.resolve({ accountId: '123456789012', partition: 'aws' }); } } exports.MockSdkProvider = MockSdkProvider; /** * MockSdk that is mostly just the SDK but with fake * credentials and a full set of default client mocks. * These individual functions within those clients can be * customized in the test file that uses it. */ class MockSdk extends aws_auth_1.SDK { constructor() { super(exports.FAKE_CREDENTIAL_CHAIN, 'bermuda-triangle-1337', {}); } } exports.MockSdk = MockSdk; function mockBootstrapStack(stack) { return deployments_1.CloudFormationStack.fromStaticInformation(new MockSdk().cloudFormation(), 'CDKToolkit', { CreationTime: new Date(), StackName: 'CDKToolkit', StackStatus: client_cloudformation_1.StackStatus.CREATE_COMPLETE, ...stack, Outputs: [ { OutputKey: 'BucketName', OutputValue: 'BUCKET_NAME' }, { OutputKey: 'BucketDomainName', OutputValue: 'BUCKET_ENDPOINT' }, { OutputKey: 'ImageRepositoryName', OutputValue: 'REPO_NAME' }, { OutputKey: 'BootstrapVersion', OutputValue: '1' }, ...(stack?.Outputs ?? []), ], }); } function mockResolvedEnvironment() { return { account: '123456789', region: 'bermuda-triangle-1337', name: 'aws://123456789/bermuda-triangle-1337', }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9jay1zZGsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtb2NrLXNkay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUErRkEsMENBRUM7QUFrRUQsZ0RBY0M7QUFFRCwwREFNQztBQXpMRCxvQ0FBa0M7QUFFbEMsNERBQXdEO0FBQ3hELDBFQUEwRjtBQUMxRiw0RUFBdUU7QUFDdkUsZ0VBQTREO0FBQzVELG9EQUFnRDtBQUNoRCxvREFBZ0Q7QUFDaEQsb0RBQWdEO0FBQ2hELGdHQUF5RjtBQUN6RixvREFBZ0Q7QUFDaEQsb0RBQWdEO0FBQ2hELDBEQUFzRDtBQUN0RCw4REFBeUQ7QUFDekQsa0RBQThDO0FBQzlDLDRFQUF1RTtBQUN2RSxvREFBZ0Q7QUFDaEQsb0RBQWdEO0FBQ2hELG9EQUE2RjtBQUM3Rix3RUFBc0U7QUFFdEUsNkRBQWlEO0FBRWpELHFEQUEwRDtBQUMxRCwyREFBZ0U7QUFFbkQsUUFBQSxnQkFBZ0IsR0FBMEI7SUFDckQsV0FBVyxFQUFFLFFBQVE7SUFDckIsZUFBZSxFQUFFLFFBQVE7SUFDekIsWUFBWSxFQUFFLFFBQVE7Q0FDdkIsQ0FBQztBQUVXLFFBQUEscUJBQXFCLEdBQUcsSUFBQSw0Q0FBcUIsRUFBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLHdCQUFnQixDQUFDLENBQUMsQ0FBQztBQUVwRywwQkFBMEI7QUFDYixRQUFBLGlCQUFpQixHQUFHLElBQUEsZ0NBQVUsRUFBQyw4QkFBYSxDQUFDLENBQUM7QUFDOUMsUUFBQSx3QkFBd0IsR0FBRyxJQUFBLGdDQUFVLEVBQUMsNENBQW9CLENBQUMsQ0FBQztBQUM1RCxRQUFBLG9CQUFvQixHQUFHLElBQUEsZ0NBQVUsRUFBQyw2Q0FBb0IsQ0FBQyxDQUFDO0FBQ3hELFFBQUEsbUJBQW1CLEdBQUcsSUFBQSxnQ0FBVSxFQUFDLGtDQUFlLENBQUMsQ0FBQztBQUNsRCxRQUFBLGFBQWEsR0FBRyxJQUFBLGdDQUFVLEVBQUMsc0JBQVMsQ0FBQyxDQUFDO0FBQ3RDLFFBQUEsYUFBYSxHQUFHLElBQUEsZ0NBQVUsRUFBQyxzQkFBUyxDQUFDLENBQUM7QUFDdEMsUUFBQSxhQUFhLEdBQUcsSUFBQSxnQ0FBVSxFQUFDLHNCQUFTLENBQUMsQ0FBQztBQUN0QyxRQUFBLGdDQUFnQyxHQUFHLElBQUEsZ0NBQVUsRUFBQywrREFBNEIsQ0FBQyxDQUFDO0FBQzVFLFFBQUEsYUFBYSxHQUFHLElBQUEsZ0NBQVUsRUFBQyxzQkFBUyxDQUFDLENBQUM7QUFDdEMsUUFBQSxhQUFhLEdBQUcsSUFBQSxnQ0FBVSxFQUFDLHNCQUFTLENBQUMsQ0FBQztBQUN0QyxRQUFBLGdCQUFnQixHQUFHLElBQUEsZ0NBQVUsRUFBQyw0QkFBWSxDQUFDLENBQUM7QUFDNUMsUUFBQSxpQkFBaUIsR0FBRyxJQUFBLGdDQUFVLEVBQUMsK0JBQWEsQ0FBQyxDQUFDO0FBQzlDLFFBQUEsWUFBWSxHQUFHLElBQUEsZ0NBQVUsRUFBQyxvQkFBUSxDQUFDLENBQUM7QUFDcEMsUUFBQSx3QkFBd0IsR0FBRyxJQUFBLGdDQUFVLEVBQUMsNkNBQW9CLENBQUMsQ0FBQztBQUM1RCxRQUFBLGFBQWEsR0FBRyxJQUFBLGdDQUFVLEVBQUMsc0JBQVMsQ0FBQyxDQUFDO0FBQ3RDLFFBQUEsdUJBQXVCLEdBQUcsSUFBQSxnQ0FBVSxFQUFDLHNCQUFTLENBQUMsQ0FBQztBQUNoRCxRQUFBLGFBQWEsR0FBRyxJQUFBLGdDQUFVLEVBQUMsc0JBQVMsQ0FBQyxDQUFDO0FBRW5EOzs7Ozs7OztHQVFHO0FBQ0ksTUFBTSx3QkFBd0IsR0FBRyxHQUFHLEVBQUU7SUFDM0MsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXpCLHlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QyxnQ0FBd0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckQsNEJBQW9CLENBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELDJCQUFtQixDQUFDLFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoRCxxQkFBYSxDQUFDLFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMxQyxxQkFBYSxDQUFDLFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMxQyxxQkFBYSxDQUFDLFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMxQyx3Q0FBZ0MsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0QscUJBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUMscUJBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUMsd0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLHlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QyxvQkFBWSxDQUFDLFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6QyxnQ0FBd0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckQscUJBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUMscUJBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUFDO0FBbkJXLFFBQUEsd0JBQXdCLDRCQW1CbkM7QUFFRjs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQWdCLGVBQWU7SUFDN0IsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzdCLENBQUM7QUFBQSxDQUFDO0FBRUYsU0FBUyxlQUFlLENBQUMsSUFBeUI7SUFDaEQseUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUMxQixnQ0FBd0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ2pDLDRCQUFvQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDN0IsMkJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUM1QixxQkFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDdEIscUJBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ3RCLHFCQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUN0Qix3Q0FBZ0MsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ3pDLHFCQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUN0QixxQkFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDdEIsd0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUN6Qix5QkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQzFCLG9CQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNyQixnQ0FBd0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ2pDLHFCQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUN0QiwrQkFBdUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ2hDLHFCQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN4QixDQUFDO0FBRU0sTUFBTSxrQkFBa0IsR0FBRyxHQUFHLEVBQUU7SUFDckMscUJBQWEsQ0FBQyxFQUFFLENBQUMscUNBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDbEQsT0FBTyxFQUFFLGNBQWM7UUFDdkIsR0FBRyxFQUFFLHVDQUF1QztLQUM3QyxDQUFDLENBQUM7SUFDSCxxQkFBYSxDQUFDLEVBQUUsQ0FBQyw4QkFBaUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUMzQyxXQUFXLEVBQUU7WUFDWCxXQUFXLEVBQUUsd0JBQWdCLENBQUMsV0FBVztZQUN6QyxlQUFlLEVBQUUsd0JBQWdCLENBQUMsZUFBZTtZQUNqRCxZQUFZLEVBQUUsd0JBQWdCLENBQUMsWUFBWTtZQUMzQyxVQUFVLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7U0FDL0M7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFiVyxRQUFBLGtCQUFrQixzQkFhN0I7QUFFRjs7Ozs7O0dBTUc7QUFDSCxNQUFhLGVBQWdCLFNBQVEsc0JBQVc7SUFDOUM7UUFDRSxLQUFLLENBQUMsNkJBQXFCLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU0sY0FBYztRQUNuQixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7Q0FDRjtBQVJELDBDQVFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFhLE9BQVEsU0FBUSxjQUFHO0lBQzlCO1FBQ0UsS0FBSyxDQUFDLDZCQUFxQixFQUFFLHVCQUF1QixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7Q0FDRjtBQUpELDBCQUlDO0FBRUQsU0FBZ0Isa0JBQWtCLENBQUMsS0FBc0I7SUFDdkQsT0FBTyxpQ0FBbUIsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDLGNBQWMsRUFBRSxFQUFFLFlBQVksRUFBRTtRQUM3RixZQUFZLEVBQUUsSUFBSSxJQUFJLEVBQUU7UUFDeEIsU0FBUyxFQUFFLFlBQVk7UUFDdkIsV0FBVyxFQUFFLG1DQUFXLENBQUMsZUFBZTtRQUN4QyxHQUFHLEtBQUs7UUFDUixPQUFPLEVBQUU7WUFDUCxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRTtZQUN2RCxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUU7WUFDakUsRUFBRSxTQUFTLEVBQUUscUJBQXFCLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRTtZQUM5RCxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFO1lBQ25ELEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztTQUMxQjtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFnQix1QkFBdUI7SUFDckMsT0FBTztRQUNMLE9BQU8sRUFBRSxXQUFXO1FBQ3BCLE1BQU0sRUFBRSx1QkFBdUI7UUFDL0IsSUFBSSxFQUFFLHVDQUF1QztLQUM5QyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnYXdzLXNkay1jbGllbnQtbW9jay1qZXN0JztcbmltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCB7IEFwcFN5bmNDbGllbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtYXBwc3luYyc7XG5pbXBvcnQgeyBDbG91ZEZvcm1hdGlvbkNsaWVudCwgU3RhY2ssIFN0YWNrU3RhdHVzIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IENsb3VkV2F0Y2hMb2dzQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3Vkd2F0Y2gtbG9ncyc7XG5pbXBvcnQgeyBDb2RlQnVpbGRDbGllbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY29kZWJ1aWxkJztcbmltcG9ydCB7IEVDMkNsaWVudCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1lYzInO1xuaW1wb3J0IHsgRUNSQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWVjcic7XG5pbXBvcnQgeyBFQ1NDbGllbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWNzJztcbmltcG9ydCB7IEVsYXN0aWNMb2FkQmFsYW5jaW5nVjJDbGllbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWxhc3RpYy1sb2FkLWJhbGFuY2luZy12Mic7XG5pbXBvcnQgeyBJQU1DbGllbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtaWFtJztcbmltcG9ydCB7IEtNU0NsaWVudCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1rbXMnO1xuaW1wb3J0IHsgTGFtYmRhQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWxhbWJkYSc7XG5pbXBvcnQgeyBSb3V0ZTUzQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXJvdXRlLTUzJztcbmltcG9ydCB7IFMzQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXMzJztcbmltcG9ydCB7IFNlY3JldHNNYW5hZ2VyQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNlY3JldHMtbWFuYWdlcic7XG5pbXBvcnQgeyBTRk5DbGllbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtc2ZuJztcbmltcG9ydCB7IFNTTUNsaWVudCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zc20nO1xuaW1wb3J0IHsgQXNzdW1lUm9sZUNvbW1hbmQsIEdldENhbGxlcklkZW50aXR5Q29tbWFuZCwgU1RTQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXN0cyc7XG5pbXBvcnQgeyBjcmVhdGVDcmVkZW50aWFsQ2hhaW4gfSBmcm9tICdAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycyc7XG5pbXBvcnQgeyBBd3NDcmVkZW50aWFsSWRlbnRpdHkgfSBmcm9tICdAc21pdGh5L3R5cGVzJztcbmltcG9ydCB7IG1vY2tDbGllbnQgfSBmcm9tICdhd3Mtc2RrLWNsaWVudC1tb2NrJztcbmltcG9ydCB7IHR5cGUgQWNjb3VudCB9IGZyb20gJ2Nkay1hc3NldHMnO1xuaW1wb3J0IHsgU0RLLCBTZGtQcm92aWRlciB9IGZyb20gJy4uLy4uL2xpYi9hcGkvYXdzLWF1dGgnO1xuaW1wb3J0IHsgQ2xvdWRGb3JtYXRpb25TdGFjayB9IGZyb20gJy4uLy4uL2xpYi9hcGkvZGVwbG95bWVudHMnO1xuXG5leHBvcnQgY29uc3QgRkFLRV9DUkVERU5USUFMUzogQXdzQ3JlZGVudGlhbElkZW50aXR5ID0ge1xuICBhY2Nlc3NLZXlJZDogJ0FDQ0VTUycsXG4gIHNlY3JldEFjY2Vzc0tleTogJ1NFQ1JFVCcsXG4gIHNlc3Npb25Ub2tlbjogJ1RPS0VOICcsXG59O1xuXG5leHBvcnQgY29uc3QgRkFLRV9DUkVERU5USUFMX0NIQUlOID0gY3JlYXRlQ3JlZGVudGlhbENoYWluKCgpID0+IFByb21pc2UucmVzb2x2ZShGQUtFX0NSRURFTlRJQUxTKSk7XG5cbi8vIERlZmF1bHQgaW1wbGVtZW50YXRpb25zXG5leHBvcnQgY29uc3QgbW9ja0FwcFN5bmNDbGllbnQgPSBtb2NrQ2xpZW50KEFwcFN5bmNDbGllbnQpO1xuZXhwb3J0IGNvbnN0IG1vY2tDbG91ZEZvcm1hdGlvbkNsaWVudCA9IG1vY2tDbGllbnQoQ2xvdWRGb3JtYXRpb25DbGllbnQpO1xuZXhwb3J0IGNvbnN0IG1vY2tDbG91ZFdhdGNoQ2xpZW50ID0gbW9ja0NsaWVudChDbG91ZFdhdGNoTG9nc0NsaWVudCk7XG5leHBvcnQgY29uc3QgbW9ja0NvZGVCdWlsZENsaWVudCA9IG1vY2tDbGllbnQoQ29kZUJ1aWxkQ2xpZW50KTtcbmV4cG9ydCBjb25zdCBtb2NrRUMyQ2xpZW50ID0gbW9ja0NsaWVudChFQzJDbGllbnQpO1xuZXhwb3J0IGNvbnN0IG1vY2tFQ1JDbGllbnQgPSBtb2NrQ2xpZW50KEVDUkNsaWVudCk7XG5leHBvcnQgY29uc3QgbW9ja0VDU0NsaWVudCA9IG1vY2tDbGllbnQoRUNTQ2xpZW50KTtcbmV4cG9ydCBjb25zdCBtb2NrRWxhc3RpY0xvYWRCYWxhbmNpbmdWMkNsaWVudCA9IG1vY2tDbGllbnQoRWxhc3RpY0xvYWRCYWxhbmNpbmdWMkNsaWVudCk7XG5leHBvcnQgY29uc3QgbW9ja0lBTUNsaWVudCA9IG1vY2tDbGllbnQoSUFNQ2xpZW50KTtcbmV4cG9ydCBjb25zdCBtb2NrS01TQ2xpZW50ID0gbW9ja0NsaWVudChLTVNDbGllbnQpO1xuZXhwb3J0IGNvbnN0IG1vY2tMYW1iZGFDbGllbnQgPSBtb2NrQ2xpZW50KExhbWJkYUNsaWVudCk7XG5leHBvcnQgY29uc3QgbW9ja1JvdXRlNTNDbGllbnQgPSBtb2NrQ2xpZW50KFJvdXRlNTNDbGllbnQpO1xuZXhwb3J0IGNvbnN0IG1vY2tTM0NsaWVudCA9IG1vY2tDbGllbnQoUzNDbGllbnQpO1xuZXhwb3J0IGNvbnN0IG1vY2tTZWNyZXRzTWFuYWdlckNsaWVudCA9IG1vY2tDbGllbnQoU2VjcmV0c01hbmFnZXJDbGllbnQpO1xuZXhwb3J0IGNvbnN0IG1vY2tTU01DbGllbnQgPSBtb2NrQ2xpZW50KFNTTUNsaWVudCk7XG5leHBvcnQgY29uc3QgbW9ja1N0ZXBGdW5jdGlvbnNDbGllbnQgPSBtb2NrQ2xpZW50KFNGTkNsaWVudCk7XG5leHBvcnQgY29uc3QgbW9ja1NUU0NsaWVudCA9IG1vY2tDbGllbnQoU1RTQ2xpZW50KTtcblxuLyoqXG4gKiBSZXNldHMgY2xpZW50cyBiYWNrIHRvIGRlZmF1bHRzIGFuZCByZXNldHMgdGhlIGhpc3RvcnlcbiAqIG9mIHVzYWdlIG9mIHRoZSBtb2NrLlxuICpcbiAqIE5PVEU6IFRoaXMgaXMgZGlzdGluY3QgZnJvbSB0aGUgdGVybWlub2xvZ3kgb2YgXCJyZXN0b3JlXCIgdGhhdCBpcyB1c3VhbGx5IHVzZWRcbiAqIGZvciBTaW5vbi9KZXN0IG1vY2tzOyBcInJlc3RvcmVcIiB1c3VhbGx5IG1lYW5zIHRvIGRpc2NhcmQgdGhlIG1vY2sgYW5kIHJlc3RvcmUgdGhlXG4gKiBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbi4gSW5zdGVhZCwgaW4gdGhpcyBjb2RlIGJhc2Ugd2UgbWVhbiBcInJlc2V0ICtcbiAqIGRlZmF1bHRcIi5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlc3RvcmVTZGtNb2Nrc1RvRGVmYXVsdCA9ICgpID0+IHtcbiAgYXBwbHlUb0FsbE1vY2tzKCdyZXNldCcpO1xuXG4gIG1vY2tBcHBTeW5jQ2xpZW50Lm9uQW55Q29tbWFuZCgpLnJlc29sdmVzKHt9KTtcbiAgbW9ja0Nsb3VkRm9ybWF0aW9uQ2xpZW50Lm9uQW55Q29tbWFuZCgpLnJlc29sdmVzKHt9KTtcbiAgbW9ja0Nsb3VkV2F0Y2hDbGllbnQub25BbnlDb21tYW5kKCkucmVzb2x2ZXMoe30pO1xuICBtb2NrQ29kZUJ1aWxkQ2xpZW50Lm9uQW55Q29tbWFuZCgpLnJlc29sdmVzKHt9KTtcbiAgbW9ja0VDMkNsaWVudC5vbkFueUNvbW1hbmQoKS5yZXNvbHZlcyh7fSk7XG4gIG1vY2tFQ1JDbGllbnQub25BbnlDb21tYW5kKCkucmVzb2x2ZXMoe30pO1xuICBtb2NrRUNTQ2xpZW50Lm9uQW55Q29tbWFuZCgpLnJlc29sdmVzKHt9KTtcbiAgbW9ja0VsYXN0aWNMb2FkQmFsYW5jaW5nVjJDbGllbnQub25BbnlDb21tYW5kKCkucmVzb2x2ZXMoe30pO1xuICBtb2NrSUFNQ2xpZW50Lm9uQW55Q29tbWFuZCgpLnJlc29sdmVzKHt9KTtcbiAgbW9ja0tNU0NsaWVudC5vbkFueUNvbW1hbmQoKS5yZXNvbHZlcyh7fSk7XG4gIG1vY2tMYW1iZGFDbGllbnQub25BbnlDb21tYW5kKCkucmVzb2x2ZXMoe30pO1xuICBtb2NrUm91dGU1M0NsaWVudC5vbkFueUNvbW1hbmQoKS5yZXNvbHZlcyh7fSk7XG4gIG1vY2tTM0NsaWVudC5vbkFueUNvbW1hbmQoKS5yZXNvbHZlcyh7fSk7XG4gIG1vY2tTZWNyZXRzTWFuYWdlckNsaWVudC5vbkFueUNvbW1hbmQoKS5yZXNvbHZlcyh7fSk7XG4gIG1vY2tTU01DbGllbnQub25BbnlDb21tYW5kKCkucmVzb2x2ZXMoe30pO1xuICBtb2NrU1NNQ2xpZW50Lm9uQW55Q29tbWFuZCgpLnJlc29sdmVzKHt9KTtcbn07XG5cbi8qKlxuICogUmVzdG9yZSBhbGwgU0RLIG1vY2tzIHRvIHRoZWlyIHJlYWwgaW1wbGVtZW50YXRpb25zXG4gKlxuICogVGhpcyBmaWxlIHdpbGwgbW9jayBhIGJ1bmNoIG9mIFNESyBjbGllbnRzIGFzIHNvb24gYXMgaXQgaXMgaW1wb3J0ZWQsIGFuZCBpdCdzXG4gKiBub3QgcmVhbGx5IHBvc3NpYmxlIHRvIGF2b2lkIGltcG9ydGluZyBpdC4gVG8gcnVuIGFueSB0ZXN0cyB0aGF0IG5lZWQgcmVhbCBjbGllbnRzXG4gKiBpbnN0ZWFkIG9mIGZha2Ugb25lcywgeW91IG5lZWQgdG8gcnVuIHRoaXMgZnVuY3Rpb24uXG4gKlxuICogVGhpcyBmdW5jdGlvbiB3b3VsZCB1c3VhbGx5IGJlIGNhbGxlZCBcInJlc3RvcmVcIiBpbiBKZXN0L1Npbm9uIHRlcm1pbm9sb2d5LFxuICogYnV0IFwicmVzdG9yZVwiIHdhcyBhbHJlYWR5IGJlaW5nIHVzZWQgd2l0aCBhIGRpZmZlcmVudCBtZWFuaW5nIGluIHRoaXMgZmlsZSxcbiAqIHNvIEknbSBpbnRyb2R1Y2luZyB0aGUgdGVybSBcInVuZG9cIiBhcyBhIHN5bm9ueW0gZm9yIFwicmVzdG9yZVwiIGluIHRoZSBjb250ZXh0XG4gKiBvZiBTREsgbW9ja3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmRvQWxsU2RrTW9ja3MoKSB7XG4gIGFwcGx5VG9BbGxNb2NrcygncmVzdG9yZScpO1xufTtcblxuZnVuY3Rpb24gYXBwbHlUb0FsbE1vY2tzKG1ldGg6ICdyZXNldCcgfCAncmVzdG9yZScpIHtcbiAgbW9ja0FwcFN5bmNDbGllbnRbbWV0aF0oKTtcbiAgbW9ja0Nsb3VkRm9ybWF0aW9uQ2xpZW50W21ldGhdKCk7XG4gIG1vY2tDbG91ZFdhdGNoQ2xpZW50W21ldGhdKCk7XG4gIG1vY2tDb2RlQnVpbGRDbGllbnRbbWV0aF0oKTtcbiAgbW9ja0VDMkNsaWVudFttZXRoXSgpO1xuICBtb2NrRUNSQ2xpZW50W21ldGhdKCk7XG4gIG1vY2tFQ1NDbGllbnRbbWV0aF0oKTtcbiAgbW9ja0VsYXN0aWNMb2FkQmFsYW5jaW5nVjJDbGllbnRbbWV0aF0oKTtcbiAgbW9ja0lBTUNsaWVudFttZXRoXSgpO1xuICBtb2NrS01TQ2xpZW50W21ldGhdKCk7XG4gIG1vY2tMYW1iZGFDbGllbnRbbWV0aF0oKTtcbiAgbW9ja1JvdXRlNTNDbGllbnRbbWV0aF0oKTtcbiAgbW9ja1MzQ2xpZW50W21ldGhdKCk7XG4gIG1vY2tTZWNyZXRzTWFuYWdlckNsaWVudFttZXRoXSgpO1xuICBtb2NrU1NNQ2xpZW50W21ldGhdKCk7XG4gIG1vY2tTdGVwRnVuY3Rpb25zQ2xpZW50W21ldGhdKCk7XG4gIG1vY2tTVFNDbGllbnRbbWV0aF0oKTtcbn1cblxuZXhwb3J0IGNvbnN0IHNldERlZmF1bHRTVFNNb2NrcyA9ICgpID0+IHtcbiAgbW9ja1NUU0NsaWVudC5vbihHZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQpLnJlc29sdmVzKHtcbiAgICBBY2NvdW50OiAnMTIzNDU2Nzg5MDEyJyxcbiAgICBBcm46ICdhd3M6c3dhOjEyMzQ1Njc4OTAxMjpzb21lLW90aGVyLXN0dWZmJyxcbiAgfSk7XG4gIG1vY2tTVFNDbGllbnQub24oQXNzdW1lUm9sZUNvbW1hbmQpLnJlc29sdmVzKHtcbiAgICBDcmVkZW50aWFsczoge1xuICAgICAgQWNjZXNzS2V5SWQ6IEZBS0VfQ1JFREVOVElBTFMuYWNjZXNzS2V5SWQsXG4gICAgICBTZWNyZXRBY2Nlc3NLZXk6IEZBS0VfQ1JFREVOVElBTFMuc2VjcmV0QWNjZXNzS2V5LFxuICAgICAgU2Vzc2lvblRva2VuOiBGQUtFX0NSRURFTlRJQUxTLnNlc3Npb25Ub2tlbixcbiAgICAgIEV4cGlyYXRpb246IG5ldyBEYXRlKERhdGUubm93KCkgKyAzNjAwICogMTAwMCksXG4gICAgfSxcbiAgfSk7XG59O1xuXG4vKipcbiAqIE1vY2tTZGtQcm92aWRlciB0aGF0IGlzIG1vc3RseSBTZGtQcm92aWRlciBidXRcbiAqIHdpdGggZmFrZSBjcmVkZW50aWFscyBhbmQgYWNjb3VudCBpbmZvcm1hdGlvbi5cbiAqXG4gKiBGb3IgbW9ja2luZyB0aGUgYWN0dWFsIGNsaWVudHMsIHRoZSBhYm92ZSBtb2NraW5nXG4gKiBjbGllbnRzIG1heSBiZSB1c2VkLlxuICovXG5leHBvcnQgY2xhc3MgTW9ja1Nka1Byb3ZpZGVyIGV4dGVuZHMgU2RrUHJvdmlkZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihGQUtFX0NSRURFTlRJQUxfQ0hBSU4sICdiZXJtdWRhLXRyaWFuZ2xlLTEzMzcnKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWZhdWx0QWNjb3VudCgpOiBQcm9taXNlPEFjY291bnQgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgYWNjb3VudElkOiAnMTIzNDU2Nzg5MDEyJywgcGFydGl0aW9uOiAnYXdzJyB9KTtcbiAgfVxufVxuXG4vKipcbiAqIE1vY2tTZGsgdGhhdCBpcyBtb3N0bHkganVzdCB0aGUgU0RLIGJ1dCB3aXRoIGZha2VcbiAqIGNyZWRlbnRpYWxzIGFuZCBhIGZ1bGwgc2V0IG9mIGRlZmF1bHQgY2xpZW50IG1vY2tzLlxuICogVGhlc2UgaW5kaXZpZHVhbCBmdW5jdGlvbnMgd2l0aGluIHRob3NlIGNsaWVudHMgY2FuIGJlXG4gKiBjdXN0b21pemVkIGluIHRoZSB0ZXN0IGZpbGUgdGhhdCB1c2VzIGl0LlxuICovXG5leHBvcnQgY2xhc3MgTW9ja1NkayBleHRlbmRzIFNESyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKEZBS0VfQ1JFREVOVElBTF9DSEFJTiwgJ2Jlcm11ZGEtdHJpYW5nbGUtMTMzNycsIHt9KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja0Jvb3RzdHJhcFN0YWNrKHN0YWNrPzogUGFydGlhbDxTdGFjaz4pIHtcbiAgcmV0dXJuIENsb3VkRm9ybWF0aW9uU3RhY2suZnJvbVN0YXRpY0luZm9ybWF0aW9uKG5ldyBNb2NrU2RrKCkuY2xvdWRGb3JtYXRpb24oKSwgJ0NES1Rvb2xraXQnLCB7XG4gICAgQ3JlYXRpb25UaW1lOiBuZXcgRGF0ZSgpLFxuICAgIFN0YWNrTmFtZTogJ0NES1Rvb2xraXQnLFxuICAgIFN0YWNrU3RhdHVzOiBTdGFja1N0YXR1cy5DUkVBVEVfQ09NUExFVEUsXG4gICAgLi4uc3RhY2ssXG4gICAgT3V0cHV0czogW1xuICAgICAgeyBPdXRwdXRLZXk6ICdCdWNrZXROYW1lJywgT3V0cHV0VmFsdWU6ICdCVUNLRVRfTkFNRScgfSxcbiAgICAgIHsgT3V0cHV0S2V5OiAnQnVja2V0RG9tYWluTmFtZScsIE91dHB1dFZhbHVlOiAnQlVDS0VUX0VORFBPSU5UJyB9LFxuICAgICAgeyBPdXRwdXRLZXk6ICdJbWFnZVJlcG9zaXRvcnlOYW1lJywgT3V0cHV0VmFsdWU6ICdSRVBPX05BTUUnIH0sXG4gICAgICB7IE91dHB1dEtleTogJ0Jvb3RzdHJhcFZlcnNpb24nLCBPdXRwdXRWYWx1ZTogJzEnIH0sXG4gICAgICAuLi4oc3RhY2s/Lk91dHB1dHMgPz8gW10pLFxuICAgIF0sXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja1Jlc29sdmVkRW52aXJvbm1lbnQoKTogRW52aXJvbm1lbnQge1xuICByZXR1cm4ge1xuICAgIGFjY291bnQ6ICcxMjM0NTY3ODknLFxuICAgIHJlZ2lvbjogJ2Jlcm11ZGEtdHJpYW5nbGUtMTMzNycsXG4gICAgbmFtZTogJ2F3czovLzEyMzQ1Njc4OS9iZXJtdWRhLXRyaWFuZ2xlLTEzMzcnLFxuICB9O1xufVxuIl19