UNPKG

cdk-iam-floyd

Version:

AWS IAM policy statement generator with fluent interface for AWS CDK

981 lines 82.1 kB
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Anthropic = void 0;
const shared_1 = require("../../shared");
/**
 * Statement provider for service [anthropic](https://docs.aws.amazon.com/service-authorization/latest/reference/list_aws-external-anthropic.html).
 *
 * @param sid [SID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_sid.html) of the statement
 */
class Anthropic extends shared_1.PolicyStatement {
    /**
     * Grants permission to archive a managed agent
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toArchiveAgent() {
        return this.to('ArchiveAgent');
    }
    /**
     * Grants permission to archive a managed agent environment
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toArchiveEnvironment() {
        return this.to('ArchiveEnvironment');
    }
    /**
     * Grants permission to archive a memory store
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toArchiveMemoryStore() {
        return this.to('ArchiveMemoryStore');
    }
    /**
     * Grants permission to archive a managed agent session
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toArchiveSession() {
        return this.to('ArchiveSession');
    }
    /**
     * Grants permission to archive a credential vault
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toArchiveVault() {
        return this.to('ArchiveVault');
    }
    /**
     * Grants permission to archive a workspace
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toArchiveWorkspace() {
        return this.to('ArchiveWorkspace');
    }
    /**
     * Grants permission to assume console access on Claude Platform
     *
     * Access Level: Write
     *
     * Possible conditions:
     * - .ifCapability()
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toAssumeConsole() {
        return this.to('AssumeConsole');
    }
    /**
     * Grants permission to cancel an in-progress batch inference request
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toCancelBatchInference() {
        return this.to('CancelBatchInference');
    }
    /**
     * Grants permission to count tokens for a message request
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toCountTokens() {
        return this.to('CountTokens');
    }
    /**
     * Grants permission to create a managed agent in a workspace
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toCreateAgent() {
        return this.to('CreateAgent');
    }
    /**
     * Grants permission to create a batch inference request
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toCreateBatchInference() {
        return this.to('CreateBatchInference');
    }
    /**
     * Grants permission to create a managed agent environment in a workspace
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toCreateEnvironment() {
        return this.to('CreateEnvironment');
    }
    /**
     * Grants permission to upload a file to a workspace
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toCreateFile() {
        return this.to('CreateFile');
    }
    /**
     * Grants permission to create a chat completion inference request
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toCreateInference() {
        return this.to('CreateInference');
    }
    /**
     * Grants permission to create a managed agent memory store in a workspace
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toCreateMemoryStore() {
        return this.to('CreateMemoryStore');
    }
    /**
     * Grants permission to create a managed agent session in a workspace
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toCreateSession() {
        return this.to('CreateSession');
    }
    /**
     * Grants permission to create a skill in a workspace
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toCreateSkill() {
        return this.to('CreateSkill');
    }
    /**
     * Grants permission to create a user profile in a workspace
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toCreateUserProfile() {
        return this.to('CreateUserProfile');
    }
    /**
     * Grants permission to create an enrollment URL for a user profile
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toCreateUserProfileEnrollmentUrl() {
        return this.to('CreateUserProfileEnrollmentUrl');
    }
    /**
     * Grants permission to create a managed agent credential vault in a workspace
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toCreateVault() {
        return this.to('CreateVault');
    }
    /**
     * Grants permission to create a webhook in a workspace
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toCreateWebhook() {
        return this.to('CreateWebhook');
    }
    /**
     * Grants permission to create a workspace in an organization
     *
     * Access Level: Write
     *
     * Possible conditions:
     * - .ifAwsRequestTag()
     * - .ifAwsTagKeys()
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toCreateWorkspace() {
        return this.to('CreateWorkspace');
    }
    /**
     * Grants permission to delete a batch inference request
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toDeleteBatchInference() {
        return this.to('DeleteBatchInference');
    }
    /**
     * Grants permission to delete a managed agent environment
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toDeleteEnvironment() {
        return this.to('DeleteEnvironment');
    }
    /**
     * Grants permission to delete a file from a workspace
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toDeleteFile() {
        return this.to('DeleteFile');
    }
    /**
     * Grants permission to delete a memory store
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toDeleteMemoryStore() {
        return this.to('DeleteMemoryStore');
    }
    /**
     * Grants permission to delete a managed agent session
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toDeleteSession() {
        return this.to('DeleteSession');
    }
    /**
     * Grants permission to delete a skill from a workspace
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toDeleteSkill() {
        return this.to('DeleteSkill');
    }
    /**
     * Grants permission to delete a credential vault
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toDeleteVault() {
        return this.to('DeleteVault');
    }
    /**
     * Grants permission to delete a webhook
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toDeleteWebhook() {
        return this.to('DeleteWebhook');
    }
    /**
     * Grants permission to retrieve the status of account setup and AWS Marketplace registration
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toGetAccountStatus() {
        return this.to('GetAccountStatus');
    }
    /**
     * Grants permission to retrieve details or versions of a managed agent
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toGetAgent() {
        return this.to('GetAgent');
    }
    /**
     * Grants permission to retrieve details of a batch inference request
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toGetBatchInference() {
        return this.to('GetBatchInference');
    }
    /**
     * Grants permission to retrieve details of a managed agent environment
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toGetEnvironment() {
        return this.to('GetEnvironment');
    }
    /**
     * Grants permission to retrieve a file or its content from a workspace
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toGetFile() {
        return this.to('GetFile');
    }
    /**
     * Grants permission to retrieve details of a memory store, its memories, or its memory versions
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toGetMemoryStore() {
        return this.to('GetMemoryStore');
    }
    /**
     * Grants permission to retrieve information about a specific model
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toGetModel() {
        return this.to('GetModel');
    }
    /**
     * Grants permission to retrieve details, events, or resources of a managed agent session
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toGetSession() {
        return this.to('GetSession');
    }
    /**
     * Grants permission to retrieve details of a skill or its versions
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toGetSkill() {
        return this.to('GetSkill');
    }
    /**
     * Grants permission to retrieve details of a user profile
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toGetUserProfile() {
        return this.to('GetUserProfile');
    }
    /**
     * Grants permission to retrieve details of a credential vault or its credentials
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toGetVault() {
        return this.to('GetVault');
    }
    /**
     * Grants permission to retrieve details of a webhook
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toGetWebhook() {
        return this.to('GetWebhook');
    }
    /**
     * Grants permission to retrieve details of a workspace
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toGetWorkspace() {
        return this.to('GetWorkspace');
    }
    /**
     * Grants permission to list managed agents in a workspace
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toListAgents() {
        return this.to('ListAgents');
    }
    /**
     * Grants permission to list batch inference requests in a workspace
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toListBatchInferences() {
        return this.to('ListBatchInferences');
    }
    /**
     * Grants permission to list managed agent environments in a workspace
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toListEnvironments() {
        return this.to('ListEnvironments');
    }
    /**
     * Grants permission to list files in a workspace
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toListFiles() {
        return this.to('ListFiles');
    }
    /**
     * Grants permission to list managed agent memory stores in a workspace
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toListMemoryStores() {
        return this.to('ListMemoryStores');
    }
    /**
     * Grants permission to list available models in a workspace
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toListModels() {
        return this.to('ListModels');
    }
    /**
     * Grants permission to list managed agent sessions in a workspace
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toListSessions() {
        return this.to('ListSessions');
    }
    /**
     * Grants permission to list skills in a workspace
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toListSkills() {
        return this.to('ListSkills');
    }
    /**
     * Grants permission to list tags for a resource
     *
     * Access Level: Read
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toListTagsForResource() {
        return this.to('ListTagsForResource');
    }
    /**
     * Grants permission to list user profiles in a workspace
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toListUserProfiles() {
        return this.to('ListUserProfiles');
    }
    /**
     * Grants permission to list managed agent credential vaults in a workspace
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toListVaults() {
        return this.to('ListVaults');
    }
    /**
     * Grants permission to list webhooks in a workspace
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toListWebhooks() {
        return this.to('ListWebhooks');
    }
    /**
     * Grants permission to list workspaces in an organization
     *
     * Access Level: List
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toListWorkspaces() {
        return this.to('ListWorkspaces');
    }
    /**
     * Grants permission to process work items in a self-hosted managed agent environment
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toProcessEnvironmentWork() {
        return this.to('ProcessEnvironmentWork');
    }
    /**
     * Grants permission to rotate the signing secret of a webhook
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toRotateWebhookSecret() {
        return this.to('RotateWebhookSecret');
    }
    /**
     * Grants permission to tag a resource
     *
     * Access Level: Tagging, Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toTagResource() {
        return this.to('TagResource');
    }
    /**
     * Grants permission to untag a resource
     *
     * Access Level: Tagging, Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toUntagResource() {
        return this.to('UntagResource');
    }
    /**
     * Grants permission to update a managed agent
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toUpdateAgent() {
        return this.to('UpdateAgent');
    }
    /**
     * Grants permission to update a managed agent environment
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toUpdateEnvironment() {
        return this.to('UpdateEnvironment');
    }
    /**
     * Grants permission to update a memory store, mutate its memories, or redact a memory version
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toUpdateMemoryStore() {
        return this.to('UpdateMemoryStore');
    }
    /**
     * Grants permission to update a managed agent session, append session events, or manage its resources
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toUpdateSession() {
        return this.to('UpdateSession');
    }
    /**
     * Grants permission to create or delete a skill version
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toUpdateSkill() {
        return this.to('UpdateSkill');
    }
    /**
     * Grants permission to update a user profile in a workspace
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toUpdateUserProfile() {
        return this.to('UpdateUserProfile');
    }
    /**
     * Grants permission to update a credential vault or manage its stored credentials
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toUpdateVault() {
        return this.to('UpdateVault');
    }
    /**
     * Grants permission to update a webhook
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toUpdateWebhook() {
        return this.to('UpdateWebhook');
    }
    /**
     * Grants permission to update a workspace
     *
     * Access Level: Write
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html#iam-actions
     */
    toUpdateWorkspace() {
        return this.to('UpdateWorkspace');
    }
    /**
     * Grants permission to make API calls using bearer token authentication
     *
     * Access Level: List
     *
     * Possible conditions:
     * - .ifBearerTokenType()
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-actions.html
     */
    toCallWithBearerToken() {
        return this.to('CallWithBearerToken');
    }
    /**
     * Adds a resource of type workspace to the statement
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/workspaces.html#workspaces
     *
     * @param resourceId - Identifier for the resourceId.
     * @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
     * @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
     * @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
     *
     * Possible conditions:
     * - .ifAwsResourceTag()
     */
    onWorkspace(resourceId, account, region, partition) {
        return this.on(`arn:${partition ?? this.defaultPartition}:aws-external-anthropic:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:workspace/${resourceId}`);
    }
    /**
     * Filters access by the Short-term or Long-term bearer tokens
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-policies.html
     *
     * Applies to actions:
     * - .toCallWithBearerToken()
     *
     * @param value The value(s) to check
     * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
     */
    ifBearerTokenType(value, operator) {
        return this.if(`BearerTokenType`, value, operator ?? 'StringLike');
    }
    /**
     * Filters access by the use of the Claude Platform console
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-policies.html
     *
     * @param value `true` or `false`. **Default:** `true`
     */
    ifCalledViaConsole(value) {
        return this.if(`CalledViaConsole`, (typeof value !== 'undefined' ? value : true), 'Bool');
    }
    /**
     * Filters access by the Claude Platform role used for the console session
     *
     * https://docs.aws.amazon.com/claude-platform/latest/userguide/iam-policies.html
     *
     * Applies to actions:
     * - .toAssumeConsole()
     *
     * @param value The value(s) to check
     * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
     */
    ifCapability(value, operator) {
        return this.if(`Capability`, value, operator ?? 'StringLike');
    }
    /**
     * Filters access by the tags that are passed in the request
     *
     * https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag
     *
     * Applies to actions:
     * - .toCreateWorkspace()
     * - .toTagResource()
     *
     * @param tagKey The tag key to check
     * @param value The value(s) to check
     * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
     */
    ifAwsRequestTag(tagKey, value, operator) {
        return this.if(`aws:RequestTag/${tagKey}`, value, operator ?? 'StringLike');
    }
    /**
     * Filters access by the tags associated with the resource
     *
     * https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag
     *
     * Applies to actions:
     * - .toArchiveAgent()
     * - .toArchiveEnvironment()
     * - .toArchiveMemoryStore()
     * - .toArchiveSession()
     * - .toArchiveVault()
     * - .toArchiveWorkspace()
     * - .toCancelBatchInference()
     * - .toCountTokens()
     * - .toCreateAgent()
     * - .toCreateBatchInference()
     * - .toCreateEnvironment()
     * - .toCreateFile()
     * - .toCreateInference()
     * - .toCreateMemoryStore()
     * - .toCreateSession()
     * - .toCreateSkill()
     * - .toCreateUserProfile()
     * - .toCreateUserProfileEnrollmentUrl()
     * - .toCreateVault()
     * - .toCreateWebhook()
     * - .toDeleteBatchInference()
     * - .toDeleteEnvironment()
     * - .toDeleteFile()
     * - .toDeleteMemoryStore()
     * - .toDeleteSession()
     * - .toDeleteSkill()
     * - .toDeleteVault()
     * - .toDeleteWebhook()
     * - .toGetAgent()
     * - .toGetBatchInference()
     * - .toGetEnvironment()
     * - .toGetFile()
     * - .toGetMemoryStore()
     * - .toGetModel()
     * - .toGetSession()
     * - .toGetSkill()
     * - .toGetUserProfile()
     * - .toGetVault()
     * - .toGetWebhook()
     * - .toGetWorkspace()
     * - .toListAgents()
     * - .toListBatchInferences()
     * - .toListEnvironments()
     * - .toListFiles()
     * - .toListMemoryStores()
     * - .toListModels()
     * - .toListSessions()
     * - .toListSkills()
     * - .toListTagsForResource()
     * - .toListUserProfiles()
     * - .toListVaults()
     * - .toListWebhooks()
     * - .toProcessEnvironmentWork()
     * - .toRotateWebhookSecret()
     * - .toTagResource()
     * - .toUntagResource()
     * - .toUpdateAgent()
     * - .toUpdateEnvironment()
     * - .toUpdateMemoryStore()
     * - .toUpdateSession()
     * - .toUpdateSkill()
     * - .toUpdateUserProfile()
     * - .toUpdateVault()
     * - .toUpdateWebhook()
     * - .toUpdateWorkspace()
     *
     * Applies to resource types:
     * - workspace
     *
     * @param tagKey The tag key to check
     * @param value The value(s) to check
     * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
     */
    ifAwsResourceTag(tagKey, value, operator) {
        return this.if(`aws:ResourceTag/${tagKey}`, value, operator ?? 'StringLike');
    }
    /**
     * Filters access by the tag keys that are passed in the request
     *
     * https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tagkeys
     *
     * Applies to actions:
     * - .toCreateWorkspace()
     * - .toTagResource()
     * - .toUntagResource()
     *
     * @param value The value(s) to check
     * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
     */
    ifAwsTagKeys(value, operator) {
        return this.if(`aws:TagKeys`, value, operator ?? 'StringLike');
    }
    /**
     * Statement provider for service [anthropic](https://docs.aws.amazon.com/service-authorization/latest/reference/list_aws-external-anthropic.html).
     *
     */
    constructor(props) {
        super(props);
        this.servicePrefix = 'aws-external-anthropic';
        this.accessLevelList = {
            Write: [
                'ArchiveAgent',
                'ArchiveEnvironment',
                'ArchiveMemoryStore',
                'ArchiveSession',
                'ArchiveVault',
                'ArchiveWorkspace',
                'AssumeConsole',
                'CancelBatchInference',
                'CountTokens',
                'CreateAgent',
                'CreateBatchInference',
                'CreateEnvironment',
                'CreateFile',
                'CreateInference',
                'CreateMemoryStore',
                'CreateSession',
                'CreateSkill',
                'CreateUserProfile',
                'CreateUserProfileEnrollmentUrl',
                'CreateVault',
                'CreateWebhook',
                'CreateWorkspace',
                'DeleteBatchInference',
                'DeleteEnvironment',
                'DeleteFile',
                'DeleteMemoryStore',
                'DeleteSession',
                'DeleteSkill',
                'DeleteVault',
                'DeleteWebhook',
                'ProcessEnvironmentWork',
                'RotateWebhookSecret',
                'TagResource',
                'UntagResource',
                'UpdateAgent',
                'UpdateEnvironment',
                'UpdateMemoryStore',
                'UpdateSession',
                'UpdateSkill',
                'UpdateUserProfile',
                'UpdateVault',
                'UpdateWebhook',
                'UpdateWorkspace'
            ],
            Read: [
                'GetAccountStatus',
                'GetAgent',
                'GetBatchInference',
                'GetEnvironment',
                'GetFile',
                'GetMemoryStore',
                'GetModel',
                'GetSession',
                'GetSkill',
                'GetUserProfile',
                'GetVault',
                'GetWebhook',
                'GetWorkspace',
                'ListTagsForResource'
            ],
            List: [
                'ListAgents',
                'ListBatchInferences',
                'ListEnvironments',
                'ListFiles',
                'ListMemoryStores',
                'ListModels',
                'ListSessions',
                'ListSkills',
                'ListUserProfiles',
                'ListVaults',
                'ListWebhooks',
                'ListWorkspaces',
                'CallWithBearerToken'
            ],
            Tagging: [
                'TagResource',
                'UntagResource'
            ]
        };
    }
}
exports.Anthropic = Anthropic;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW50aHJvcGljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYW50aHJvcGljLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHlDQUF5RDtBQUd6RDs7OztHQUlHO0FBQ0gsTUFBYSxTQUFVLFNBQVEsd0JBQWU7SUFHNUM7Ozs7OztPQU1HO0lBQ0ksY0FBYztRQUNuQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLG9CQUFvQjtRQUN6QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksb0JBQW9CO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxnQkFBZ0I7UUFDckIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGNBQWM7UUFDbkIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxrQkFBa0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLGVBQWU7UUFDcEIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxzQkFBc0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGFBQWE7UUFDbEIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FB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QWM7Z0JBQ2QscUJBQXFCO2FBQ3RCO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLFlBQVk7Z0JBQ1oscUJBQXFCO2dCQUNyQixrQkFBa0I7Z0JBQ2xCLFdBQVc7Z0JBQ1gsa0JBQWtCO2dCQUNsQixZQUFZO2dCQUNaLGNBQWM7Z0JBQ2QsWUFBWTtnQkFDWixrQkFBa0I7Z0JBQ2xCLFlBQVk7Z0JBQ1osY0FBYztnQkFDZCxnQkFBZ0I7Z0JBQ2hCLHFCQUFxQjthQUN0QjtZQUNELE9BQU8sRUFBRTtnQkFDUCxhQUFhO2dCQUNiLGVBQWU7YUFDaEI7U0FDRixDQUFDO0lBdUxGLENBQUM7Q0FDRjtBQXhoQ0QsOEJBd2hDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjY2Vzc0xldmVsTGlzdCB9IGZyb20gJy4uLy4uL3NoYXJlZC9hY2Nlc3MtbGV2ZWwnO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50LCBPcGVyYXRvciB9IGZyb20gJy4uLy4uL3NoYXJlZCc7XG5pbXBvcnQgeyBhd3NfaWFtIGFzIGlhbSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuXG4vKipcbiAqIFN0YXRlbWVudCBwcm92aWRlciBmb3Igc2VydmljZSBbYW50aHJvcGljXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2VydmljZS1hdXRob3JpemF0aW9uL2xhdGVzdC9yZWZlcmVuY2UvbGlzdF9hd3MtZXh0ZXJuYWwtYW50aHJvcGljLmh0bWwpLlxuICpcbiAqIEBwYXJhbSBzaWQgW1NJRF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50c19zaWQuaHRtbCkgb2YgdGhlIHN0YXRlbWVudFxuICovXG5leHBvcnQgY2xhc3MgQW50aHJvcGljIGV4dGVuZHMgUG9saWN5U3RhdGVtZW50IHtcbiAgcHVibGljIHNlcnZpY2VQcmVmaXggPSAnYXdzLWV4dGVybmFsLWFudGhyb3BpYyc7XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGFyY2hpdmUgYSBtYW5hZ2VkIGFnZW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b0FyY2hpdmVBZ2VudCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQXJjaGl2ZUFnZW50Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYXJjaGl2ZSBhIG1hbmFnZWQgYWdlbnQgZW52aXJvbm1lbnRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvQXJjaGl2ZUVudmlyb25tZW50KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdBcmNoaXZlRW52aXJvbm1lbnQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBhcmNoaXZlIGEgbWVtb3J5IHN0b3JlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b0FyY2hpdmVNZW1vcnlTdG9yZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQXJjaGl2ZU1lbW9yeVN0b3JlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYXJjaGl2ZSBhIG1hbmFnZWQgYWdlbnQgc2Vzc2lvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9BcmNoaXZlU2Vzc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQXJjaGl2ZVNlc3Npb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBhcmNoaXZlIGEgY3JlZGVudGlhbCB2YXVsdFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9BcmNoaXZlVmF1bHQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0FyY2hpdmVWYXVsdCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGFyY2hpdmUgYSB3b3Jrc3BhY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvQXJjaGl2ZVdvcmtzcGFjZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQXJjaGl2ZVdvcmtzcGFjZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGFzc3VtZSBjb25zb2xlIGFjY2VzcyBvbiBDbGF1ZGUgUGxhdGZvcm1cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkNhcGFiaWxpdHkoKVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvQXNzdW1lQ29uc29sZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQXNzdW1lQ29uc29sZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNhbmNlbCBhbiBpbi1wcm9ncmVzcyBiYXRjaCBpbmZlcmVuY2UgcmVxdWVzdFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9DYW5jZWxCYXRjaEluZmVyZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ2FuY2VsQmF0Y2hJbmZlcmVuY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjb3VudCB0b2tlbnMgZm9yIGEgbWVzc2FnZSByZXF1ZXN0XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b0NvdW50VG9rZW5zKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDb3VudFRva2VucycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIG1hbmFnZWQgYWdlbnQgaW4gYSB3b3Jrc3BhY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlQWdlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZUFnZW50Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgYmF0Y2ggaW5mZXJlbmNlIHJlcXVlc3RcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlQmF0Y2hJbmZlcmVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZUJhdGNoSW5mZXJlbmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgbWFuYWdlZCBhZ2VudCBlbnZpcm9ubWVudCBpbiBhIHdvcmtzcGFjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVFbnZpcm9ubWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlRW52aXJvbm1lbnQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGxvYWQgYSBmaWxlIHRvIGEgd29ya3NwYWNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZUZpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZUZpbGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBjaGF0IGNvbXBsZXRpb24gaW5mZXJlbmNlIHJlcXVlc3RcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlSW5mZXJlbmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVJbmZlcmVuY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBtYW5hZ2VkIGFnZW50IG1lbW9yeSBzdG9yZSBpbiBhIHdvcmtzcGFjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVNZW1vcnlTdG9yZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlTWVtb3J5U3RvcmUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBtYW5hZ2VkIGFnZW50IHNlc3Npb24gaW4gYSB3b3Jrc3BhY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlU2Vzc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlU2Vzc2lvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIHNraWxsIGluIGEgd29ya3NwYWNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZVNraWxsKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVTa2lsbCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIHVzZXIgcHJvZmlsZSBpbiBhIHdvcmtzcGFjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVVc2VyUHJvZmlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlVXNlclByb2ZpbGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYW4gZW5yb2xsbWVudCBVUkwgZm9yIGEgdXNlciBwcm9maWxlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZVVzZXJQcm9maWxlRW5yb2xsbWVudFVybCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlVXNlclByb2ZpbGVFbnJvbGxtZW50VXJsJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgbWFuYWdlZCBhZ2VudCBjcmVkZW50aWFsIHZhdWx0IGluIGEgd29ya3NwYWNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZVZhdWx0KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVWYXVsdCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIHdlYmhvb2sgaW4gYSB3b3Jrc3BhY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlV2ViaG9vaygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlV2ViaG9vaycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIHdvcmtzcGFjZSBpbiBhbiBvcmdhbml6YXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1JlcXVlc3RUYWcoKVxuICAgKiAtIC5pZkF3c1RhZ0tleXMoKVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlV29ya3NwYWNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVXb3Jrc3BhY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZWxldGUgYSBiYXRjaCBpbmZlcmVuY2UgcmVxdWVzdFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVCYXRjaEluZmVyZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlQmF0Y2hJbmZlcmVuY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZWxldGUgYSBtYW5hZ2VkIGFnZW50IGVudmlyb25tZW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b0RlbGV0ZUVudmlyb25tZW50KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVFbnZpcm9ubWVudCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhIGZpbGUgZnJvbSBhIHdvcmtzcGFjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVGaWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVGaWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVsZXRlIGEgbWVtb3J5IHN0b3JlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b0RlbGV0ZU1lbW9yeVN0b3JlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVNZW1vcnlTdG9yZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhIG1hbmFnZWQgYWdlbnQgc2Vzc2lvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVTZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVTZXNzaW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVsZXRlIGEgc2tpbGwgZnJvbSBhIHdvcmtzcGFjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVTa2lsbCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlU2tpbGwnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZWxldGUgYSBjcmVkZW50aWFsIHZhdWx0XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b0RlbGV0ZVZhdWx0KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVWYXVsdCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhIHdlYmhvb2tcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlV2ViaG9vaygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlV2ViaG9vaycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJldHJpZXZlIHRoZSBzdGF0dXMgb2YgYWNjb3VudCBzZXR1cCBhbmQgQVdTIE1hcmtldHBsYWNlIHJlZ2lzdHJhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b0dldEFjY291bnRTdGF0dXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldEFjY291bnRTdGF0dXMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSBkZXRhaWxzIG9yIHZlcnNpb25zIG9mIGEgbWFuYWdlZCBhZ2VudFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b0dldEFnZW50KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRBZ2VudCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJldHJpZXZlIGRldGFpbHMgb2YgYSBiYXRjaCBpbmZlcmVuY2UgcmVxdWVzdFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b0dldEJhdGNoSW5mZXJlbmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRCYXRjaEluZmVyZW5jZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJldHJpZXZlIGRldGFpbHMgb2YgYSBtYW5hZ2VkIGFnZW50IGVudmlyb25tZW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvR2V0RW52aXJvbm1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldEVudmlyb25tZW50Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgYSBmaWxlIG9yIGl0cyBjb250ZW50IGZyb20gYSB3b3Jrc3BhY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9HZXRGaWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRGaWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgZGV0YWlscyBvZiBhIG1lbW9yeSBzdG9yZSwgaXRzIG1lbW9yaWVzLCBvciBpdHMgbWVtb3J5IHZlcnNpb25zXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvR2V0TWVtb3J5U3RvcmUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldE1lbW9yeVN0b3JlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgYSBzcGVjaWZpYyBtb2RlbFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b0dldE1vZGVsKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRNb2RlbCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJldHJpZXZlIGRldGFpbHMsIGV2ZW50cywgb3IgcmVzb3VyY2VzIG9mIGEgbWFuYWdlZCBhZ2VudCBzZXNzaW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvR2V0U2Vzc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0U2Vzc2lvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJldHJpZXZlIGRldGFpbHMgb2YgYSBza2lsbCBvciBpdHMgdmVyc2lvbnNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9HZXRTa2lsbCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0U2tpbGwnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSBkZXRhaWxzIG9mIGEgdXNlciBwcm9maWxlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvR2V0VXNlclByb2ZpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldFVzZXJQcm9maWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgZGV0YWlscyBvZiBhIGNyZWRlbnRpYWwgdmF1bHQgb3IgaXRzIGNyZWRlbnRpYWxzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvR2V0VmF1bHQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldFZhdWx0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgZGV0YWlscyBvZiBhIHdlYmhvb2tcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9HZXRXZWJob29rKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRXZWJob29rJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgZGV0YWlscyBvZiBhIHdvcmtzcGFjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b0dldFdvcmtzcGFjZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0V29ya3NwYWNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCBtYW5hZ2VkIGFnZW50cyBpbiBhIHdvcmtzcGFjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RBZ2VudHMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RBZ2VudHMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IGJhdGNoIGluZmVyZW5jZSByZXF1ZXN0cyBpbiBhIHdvcmtzcGFjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RCYXRjaEluZmVyZW5jZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RCYXRjaEluZmVyZW5jZXMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IG1hbmFnZWQgYWdlbnQgZW52aXJvbm1lbnRzIGluIGEgd29ya3NwYWNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvTGlzdEVudmlyb25tZW50cygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdEVudmlyb25tZW50cycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgZmlsZXMgaW4gYSB3b3Jrc3BhY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0RmlsZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RGaWxlcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgbWFuYWdlZCBhZ2VudCBtZW1vcnkgc3RvcmVzIGluIGEgd29ya3NwYWNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvTGlzdE1lbW9yeVN0b3JlcygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdE1lbW9yeVN0b3JlcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgYXZhaWxhYmxlIG1vZGVscyBpbiBhIHdvcmtzcGFjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RNb2RlbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RNb2RlbHMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IG1hbmFnZWQgYWdlbnQgc2Vzc2lvbnMgaW4gYSB3b3Jrc3BhY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0U2Vzc2lvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RTZXNzaW9ucycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3Qgc2tpbGxzIGluIGEgd29ya3NwYWNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvTGlzdFNraWxscygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdFNraWxscycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgdGFncyBmb3IgYSByZXNvdXJjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RUYWdzRm9yUmVzb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RUYWdzRm9yUmVzb3VyY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IHVzZXIgcHJvZmlsZXMgaW4gYSB3b3Jrc3BhY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0VXNlclByb2ZpbGVzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0VXNlclByb2ZpbGVzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCBtYW5hZ2VkIGFnZW50IGNyZWRlbnRpYWwgdmF1bHRzIGluIGEgd29ya3NwYWNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvTGlzdFZhdWx0cygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdFZhdWx0cycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3Qgd2ViaG9va3MgaW4gYSB3b3Jrc3BhY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0V2ViaG9va3MoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RXZWJob29rcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3Qgd29ya3NwYWNlcyBpbiBhbiBvcmdhbml6YXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0V29ya3NwYWNlcygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdFdvcmtzcGFjZXMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBwcm9jZXNzIHdvcmsgaXRlbXMgaW4gYSBzZWxmLWhvc3RlZCBtYW5hZ2VkIGFnZW50IGVudmlyb25tZW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b1Byb2Nlc3NFbnZpcm9ubWVudFdvcmsoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1Byb2Nlc3NFbnZpcm9ubWVudFdvcmsnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByb3RhdGUgdGhlIHNpZ25pbmcgc2VjcmV0IG9mIGEgd2ViaG9va1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9Sb3RhdGVXZWJob29rU2VjcmV0KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdSb3RhdGVXZWJob29rU2VjcmV0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdGFnIGEgcmVzb3VyY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBUYWdnaW5nLCBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvVGFnUmVzb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1RhZ1Jlc291cmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdW50YWcgYSByZXNvdXJjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFRhZ2dpbmcsIFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9VbnRhZ1Jlc291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVbnRhZ1Jlc291cmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIGEgbWFuYWdlZCBhZ2VudFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVBZ2VudCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlQWdlbnQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgYSBtYW5hZ2VkIGFnZW50IGVudmlyb25tZW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZUVudmlyb25tZW50KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVFbnZpcm9ubWVudCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHVwZGF0ZSBhIG1lbW9yeSBzdG9yZSwgbXV0YXRlIGl0cyBtZW1vcmllcywgb3IgcmVkYWN0IGEgbWVtb3J5IHZlcnNpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlTWVtb3J5U3RvcmUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZU1lbW9yeVN0b3JlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIGEgbWFuYWdlZCBhZ2VudCBzZXNzaW9uLCBhcHBlbmQgc2Vzc2lvbiBldmVudHMsIG9yIG1hbmFnZSBpdHMgcmVzb3VyY2VzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZVNlc3Npb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZVNlc3Npb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgb3IgZGVsZXRlIGEgc2tpbGwgdmVyc2lvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVTa2lsbCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlU2tpbGwnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgYSB1c2VyIHByb2ZpbGUgaW4gYSB3b3Jrc3BhY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlVXNlclByb2ZpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZVVzZXJQcm9maWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIGEgY3JlZGVudGlhbCB2YXVsdCBvciBtYW5hZ2UgaXRzIHN0b3JlZCBjcmVkZW50aWFsc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS9pYW0tYWN0aW9ucy5odG1sI2lhbS1hY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVWYXVsdCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlVmF1bHQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgYSB3ZWJob29rXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWwjaWFtLWFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZVdlYmhvb2soKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZVdlYmhvb2snKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgYSB3b3Jrc3BhY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLWFjdGlvbnMuaHRtbCNpYW0tYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlV29ya3NwYWNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVXb3Jrc3BhY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBtYWtlIEFQSSBjYWxscyB1c2luZyBiZWFyZXIgdG9rZW4gYXV0aGVudGljYXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQmVhcmVyVG9rZW5UeXBlKClcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1hY3Rpb25zLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NhbGxXaXRoQmVhcmVyVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NhbGxXaXRoQmVhcmVyVG9rZW4nKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhY2Nlc3NMZXZlbExpc3Q6IEFjY2Vzc0xldmVsTGlzdCA9IHtcbiAgICBXcml0ZTogW1xuICAgICAgJ0FyY2hpdmVBZ2VudCcsXG4gICAgICAnQXJjaGl2ZUVudmlyb25tZW50JyxcbiAgICAgICdBcmNoaXZlTWVtb3J5U3RvcmUnLFxuICAgICAgJ0FyY2hpdmVTZXNzaW9uJyxcbiAgICAgICdBcmNoaXZlVmF1bHQnLFxuICAgICAgJ0FyY2hpdmVXb3Jrc3BhY2UnLFxuICAgICAgJ0Fzc3VtZUNvbnNvbGUnLFxuICAgICAgJ0NhbmNlbEJhdGNoSW5mZXJlbmNlJyxcbiAgICAgICdDb3VudFRva2VucycsXG4gICAgICAnQ3JlYXRlQWdlbnQnLFxuICAgICAgJ0NyZWF0ZUJhdGNoSW5mZXJlbmNlJyxcbiAgICAgICdDcmVhdGVFbnZpcm9ubWVudCcsXG4gICAgICAnQ3JlYXRlRmlsZScsXG4gICAgICAnQ3JlYXRlSW5mZXJlbmNlJyxcbiAgICAgICdDcmVhdGVNZW1vcnlTdG9yZScsXG4gICAgICAnQ3JlYXRlU2Vzc2lvbicsXG4gICAgICAnQ3JlYXRlU2tpbGwnLFxuICAgICAgJ0NyZWF0ZVVzZXJQcm9maWxlJyxcbiAgICAgICdDcmVhdGVVc2VyUHJvZmlsZUVucm9sbG1lbnRVcmwnLFxuICAgICAgJ0NyZWF0ZVZhdWx0JyxcbiAgICAgICdDcmVhdGVXZWJob29rJyxcbiAgICAgICdDcmVhdGVXb3Jrc3BhY2UnLFxuICAgICAgJ0RlbGV0ZUJhdGNoSW5mZXJlbmNlJyxcbiAgICAgICdEZWxldGVFbnZpcm9ubWVudCcsXG4gICAgICAnRGVsZXRlRmlsZScsXG4gICAgICAnRGVsZXRlTWVtb3J5U3RvcmUnLFxuICAgICAgJ0RlbGV0ZVNlc3Npb24nLFxuICAgICAgJ0RlbGV0ZVNraWxsJyxcbiAgICAgICdEZWxldGVWYXVsdCcsXG4gICAgICAnRGVsZXRlV2ViaG9vaycsXG4gICAgICAnUHJvY2Vzc0Vudmlyb25tZW50V29yaycsXG4gICAgICAnUm90YXRlV2ViaG9va1NlY3JldCcsXG4gICAgICAnVGFnUmVzb3VyY2UnLFxuICAgICAgJ1VudGFnUmVzb3VyY2UnLFxuICAgICAgJ1VwZGF0ZUFnZW50JyxcbiAgICAgICdVcGRhdGVFbnZpcm9ubWVudCcsXG4gICAgICAnVXBkYXRlTWVtb3J5U3RvcmUnLFxuICAgICAgJ1VwZGF0ZVNlc3Npb24nLFxuICAgICAgJ1VwZGF0ZVNraWxsJyxcbiAgICAgICdVcGRhdGVVc2VyUHJvZmlsZScsXG4gICAgICAnVXBkYXRlVmF1bHQnLFxuICAgICAgJ1VwZGF0ZVdlYmhvb2snLFxuICAgICAgJ1VwZGF0ZVdvcmtzcGFjZSdcbiAgICBdLFxuICAgIFJlYWQ6IFtcbiAgICAgICdHZXRBY2NvdW50U3RhdHVzJyxcbiAgICAgICdHZXRBZ2VudCcsXG4gICAgICAnR2V0QmF0Y2hJbmZlcmVuY2UnLFxuICAgICAgJ0dldEVudmlyb25tZW50JyxcbiAgICAgICdHZXRGaWxlJyxcbiAgICAgICdHZXRNZW1vcnlTdG9yZScsXG4gICAgICAnR2V0TW9kZWwnLFxuICAgICAgJ0dldFNlc3Npb24nLFxuICAgICAgJ0dldFNraWxsJyxcbiAgICAgICdHZXRVc2VyUHJvZmlsZScsXG4gICAgICAnR2V0VmF1bHQnLFxuICAgICAgJ0dldFdlYmhvb2snLFxuICAgICAgJ0dldFdvcmtzcGFjZScsXG4gICAgICAnTGlzdFRhZ3NGb3JSZXNvdXJjZSdcbiAgICBdLFxuICAgIExpc3Q6IFtcbiAgICAgICdMaXN0QWdlbnRzJyxcbiAgICAgICdMaXN0QmF0Y2hJbmZlcmVuY2VzJyxcbiAgICAgICdMaXN0RW52aXJvbm1lbnRzJyxcbiAgICAgICdMaXN0RmlsZXMnLFxuICAgICAgJ0xpc3RNZW1vcnlTdG9yZXMnLFxuICAgICAgJ0xpc3RNb2RlbHMnLFxuICAgICAgJ0xpc3RTZXNzaW9ucycsXG4gICAgICAnTGlzdFNraWxscycsXG4gICAgICAnTGlzdFVzZXJQcm9maWxlcycsXG4gICAgICAnTGlzdFZhdWx0cycsXG4gICAgICAnTGlzdFdlYmhvb2tzJyxcbiAgICAgICdMaXN0V29ya3NwYWNlcycsXG4gICAgICAnQ2FsbFdpdGhCZWFyZXJUb2tlbidcbiAgICBdLFxuICAgIFRhZ2dpbmc6IFtcbiAgICAgICdUYWdSZXNvdXJjZScsXG4gICAgICAnVW50YWdSZXNvdXJjZSdcbiAgICBdXG4gIH07XG5cbiAgLyoqXG4gICAqIEFkZHMgYSByZXNvdXJjZSBvZiB0eXBlIHdvcmtzcGFjZSB0byB0aGUgc3RhdGVtZW50XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGF1ZGUtcGxhdGZvcm0vbGF0ZXN0L3VzZXJndWlkZS93b3Jrc3BhY2VzLmh0bWwjd29ya3NwYWNlc1xuICAgKlxuICAgKiBAcGFyYW0gcmVzb3VyY2VJZCAtIElkZW50aWZpZXIgZm9yIHRoZSByZXNvdXJjZUlkLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXNvdXJjZVRhZygpXG4gICAqL1xuICBwdWJsaWMgb25Xb3Jrc3BhY2UocmVzb3VyY2VJZDogc3RyaW5nLCBhY2NvdW50Pzogc3RyaW5nLCByZWdpb24/OiBzdHJpbmcsIHBhcnRpdGlvbj86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm9uKGBhcm46JHsgcGFydGl0aW9uID8/IHRoaXMuZGVmYXVsdFBhcnRpdGlvbiB9OmF3cy1leHRlcm5hbC1hbnRocm9waWM6JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9OndvcmtzcGFjZS8keyByZXNvdXJjZUlkIH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIGFjY2VzcyBieSB0aGUgU2hvcnQtdGVybSBvciBMb25nLXRlcm0gYmVhcmVyIHRva2Vuc1xuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLXBvbGljaWVzLmh0bWxcbiAgICpcbiAgICogQXBwbGllcyB0byBhY3Rpb25zOlxuICAgKiAtIC50b0NhbGxXaXRoQmVhcmVyVG9rZW4oKVxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlKHMpIHRvIGNoZWNrXG4gICAqIEBwYXJhbSBvcGVyYXRvciBXb3JrcyB3aXRoIFtzdHJpbmcgb3BlcmF0b3JzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX2NvbmRpdGlvbl9vcGVyYXRvcnMuaHRtbCNDb25kaXRpb25zX1N0cmluZykuICoqRGVmYXVsdDoqKiBgU3RyaW5nTGlrZWBcbiAgICovXG4gIHB1YmxpYyBpZkJlYXJlclRva2VuVHlwZSh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wZXJhdG9yPzogT3BlcmF0b3IgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pZihgQmVhcmVyVG9rZW5UeXBlYCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhY2Nlc3MgYnkgdGhlIHVzZSBvZiB0aGUgQ2xhdWRlIFBsYXRmb3JtIGNvbnNvbGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsYXVkZS1wbGF0Zm9ybS9sYXRlc3QvdXNlcmd1aWRlL2lhbS1wb2xpY2llcy5odG1sXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBgdHJ1ZWAgb3IgYGZhbHNlYC4gKipEZWZhdWx0OioqIGB0cnVlYFxuICAgKi9cbiAgcHVibGljIGlmQ2FsbGVkVmlhQ29uc29sZSh2YWx1ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gdGhpcy5pZihgQ2FsbGVkVmlhQ29uc29sZWAsICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnID8gdmFsdWUgOiB0cnVlKSwgJ0Jvb2wnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIGFjY2VzcyBieSB0aGUgQ2xhdWRlIFBsYXRmb3JtIHJvbGUgdXNlZCBmb3IgdGhlIGNvbnNvbGUgc2Vzc2lvblxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xhdWRlLXBsYXRmb3JtL2xhdGVzdC91c2VyZ3VpZGUvaWFtLXBvbGljaWVzLmh0bWxcbiAgICpcbiAgICogQXBwbGllcyB0byBhY3Rpb25zOlxuICAgKiAtIC50b0Fzc3VtZUNvbnNvbGUoKVxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlKHMpIHRvIGNoZWNrXG4gICAqIEBwYXJhbSBvcGVyYXRvciBXb3JrcyB3aXRoIFtzdHJpbmcgb3BlcmF0b3JzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX2NvbmRpdGlvbl9vcGVyYXRvcnMuaHRtbCNDb25kaXRpb25zX1N0cmluZykuICoqRGVmYXVsdDoqKiBgU3RyaW5nTGlrZWBcbiAgICovXG4gIHB1YmxpYyBpZkNhcGFiaWxpdHkodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdLCBvcGVyYXRvcj86IE9wZXJhdG9yIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaWYoYENhcGFiaWxpdHlgLCB2YWx1ZSwgb3BlcmF0b3IgPz8gJ1N0cmluZ0xpa2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIGFjY2VzcyBieSB0aGUgdGFncyB0aGF0IGFyZSBwYXNzZWQgaW4gdGhlIHJlcXVlc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19jb25kaXRpb24ta2V5cy5odG1sI2NvbmRpdGlvbi1rZXlzLXJlcXVlc3R0YWdcbiAgICpcbiAgICogQXBwbGllcyB0byBhY3Rpb25zOlxuICAgKiAtIC50b0NyZWF0ZVdvcmtzcGFjZSgpXG4gICAqIC0gLnRvVGFnUmVzb3VyY2UoKVxuICAgKlxuICAgKiBAcGFyYW0gdGFnS2V5IFRoZSB0YWcga2V5IHRvIGNoZWNrXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUocykgdG8gY2hlY2tcbiAgICogQHBhcmFtIG9wZXJhdG9yIFdvcmtzIHdpdGggW3N0cmluZyBvcGVyYXRvcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfY29uZGl0aW9uX29wZXJhdG9ycy5odG1sI0NvbmRpdGlvbnNfU3RyaW5nKS4gKipEZWZhdWx0OioqIGBTdHJpbmdMaWtlYFxuICAgKi9cbiAgcHVibGljIGlmQXdzUmVxdWVzdFRhZyh0YWdLZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdLCBvcGVyYXRvcj86IE9wZXJhdG9yIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaWYoYGF3czpSZXF1ZXN0VGFnLyR7IHRhZ0tleSB9YCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhY2Nlc3MgYnkgdGhlIHRhZ3MgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNvdXJjZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2NvbmRpdGlvbi1rZXlzLmh0bWwjY29uZGl0aW9uLWtleXMtcmVzb3VyY2V0YWdcbiAgICpcbiAgICogQXBwbGllcyB0byBhY3Rpb25zOlxuICAgKiAtIC50b0FyY2hpdmVBZ2VudCgpXG4gICAqIC0gLnRvQXJjaGl2ZUVudmlyb25tZW50KClcbiAgICogLSAudG9BcmNoaXZlTWVtb3J5U3RvcmUoKVxuICAgKiAtIC50b0FyY2hpdmVTZXNzaW9uKClcbiAgICogLSAudG9BcmNoaXZlVmF1bHQoKVxuICAgKiAtIC50b0FyY2hpdmVXb3Jrc3BhY2UoKVxuICAgKiAtIC50b0NhbmNlbEJhdGNoSW5mZXJlbmNlKClcbiAgICogLSAudG9Db3VudFRva2VucygpXG4gICAqIC0gLnRvQ3JlYXRlQWdlbnQoKVxuICAgKiAtIC50b0NyZWF0ZUJhdGNoSW5mZXJlbmNlKClcbiAgICogLSAudG9DcmVhdGVFbnZpcm9ubWVudCgpXG4gICAqIC0gLnRvQ3JlYXRlRmlsZSgpXG4gICAqIC0gLnRvQ3JlYXRlSW5mZXJlbmNlKClcbiAgICogLSAudG9DcmVhdGVNZW1vcnlTdG9yZSgpXG4gICAqIC0gLnRvQ3JlYXRlU2Vzc2lvbigpXG4gICAqIC0gLnRvQ3JlYXRlU2tpbGwoKVxuICAgKiAtIC50b0NyZWF0ZVVzZXJQcm9maWxlKClcbiAgICogLSAudG9DcmVhdGVVc2VyUHJvZmlsZUVucm9sbG1lbnRVcmwoKVxuICAgKiAtIC50b0NyZWF0ZVZhdWx0KClcbiAgICogLSAudG9DcmVhdGVXZWJob29rKClcbiAgICogLSAudG9EZWxldGVCYXRjaEluZmVyZW5jZSgpXG4gICAqIC0gLnRvRGVsZXRlRW52aXJvbm1lbnQoKVxuICAgKiAtIC50b0RlbGV0ZUZpbGUoKVxuICAgKiAtIC50b0RlbGV0ZU1lbW9yeVN0b3JlKClcbiAgICogLSAudG9EZWxldGVTZXNzaW9uKClcbiAgICogLSAudG9EZWxldGVTa2lsbCgpXG4gICAqIC0gLnRvRGVsZXRlVmF1bHQoKVxuICAgKiAtIC50b0RlbGV0ZVdlYmhvb2soKVxuICAgKiAtIC50b0dldEFnZW50KClcbiAgICogLSAudG9HZXRCYXRjaEluZmVyZW5jZSgpXG4gICAqIC0gLnRvR2V0RW52aXJvbm1lbnQoKVxuICAgKiAtIC50b0dldEZpbGUoKVxuICAgKiAtIC50b0dldE1lbW9yeVN0b3JlKClcbiAgICogLSAudG9HZXRNb2RlbCgpXG4gICAqIC0gLnRvR2V0U2Vzc2lvbigpXG4gICAqIC0gLnRvR2V0U2tpbGwoKVxuICAgKiAtIC50b0dldFVzZXJQcm9maWxlKClcbiAgICogLSAudG9HZXRWYXVsdCgpXG4gICAqIC0gLnRvR2V0V2ViaG9vaygpXG4gICAqIC0gLnRvR2V0V29ya3NwYWNlKClcbiAgICogLSAudG9MaXN0QWdlbnRzKClcbiAgICogLSAudG9MaXN0QmF0Y2hJbmZlcmVuY2VzKClcbiAgICogLSAudG9MaXN0RW52aXJvbm1lbnRzKClcbiAgICogLSAudG9MaXN0RmlsZXMoKVxuICAgKiAtIC50b0xpc3RNZW1vcnlTdG9yZXMoKVxuICAgKiAtIC50b0xpc3RNb2RlbHMoKVxuICAgKiAtIC50b0xpc3RTZXNzaW9ucygpXG4gICAqIC0gLnRvTGlzdFNraWxscygpXG4gICAqIC0gLnRvTGlzdFRhZ3NGb3JSZXNvdXJjZSgpXG4gICAqIC0gLnRvTGlzdFVzZXJQcm9maWxlcygpXG4gICAqIC0gLnRvTGlzdFZhdWx0cygpXG4gICAqIC0gLnRvTGlzdFdlYmhvb2tzKClcbiAgICogLSAudG9Qcm9jZXNzRW52aXJvbm1lbnRXb3JrKClcbiAgICogLSAudG9Sb3RhdGVXZWJob29rU2VjcmV0KClcbiAgICogLSAudG9UYWdSZXNvdXJjZSgpXG4gICAqIC0gLnRvVW50YWdSZXNvdXJjZSgpXG4gICAqIC0gLnRvVXBkYXRlQWdlbnQoKVxuICAgKiAtIC50b1VwZGF0ZUVudmlyb25tZW50KClcbiAgICogLSAudG9VcGRhdGVNZW1vcnlTdG9yZSgpXG4gICAqIC0gLnRvVXBkYXRlU2Vzc2lvbigpXG4gICAqIC0gLnRvVXBkYXRlU2tpbGwoKVxuICAgKiAtIC50b1VwZGF0ZVVzZXJQcm9maWxlKClcbiAgICogLSAudG9VcGRhdGVWYXVsdCgpXG4gICAqIC0gLnRvVXBkYXRlV2ViaG9vaygpXG4gICAqIC0gLnRvVXBkYXRlV29ya3NwYWNlKClcbiAgICpcbiAgICogQXBwbGllcyB0byByZXNvdXJjZSB0eXBlczpcbiAgICogLSB3b3Jrc3BhY2VcbiAgICpcbiAgICogQHBhcmFtIHRhZ0tleSBUaGUgdGFnIGtleSB0byBjaGVja1xuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlKHMpIHRvIGNoZWNrXG4gICAqIEBwYXJhbSBvcGVyYXRvciBXb3JrcyB3aXRoIFtzdHJpbmcgb3BlcmF0b3JzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX2NvbmRpdGlvbl9vcGVyYXRvcnMuaHRtbCNDb25kaXRpb25zX1N0cmluZykuICoqRGVmYXVsdDoqKiBgU3RyaW5nTGlrZWBcbiAgICovXG4gIHB1YmxpYyBpZkF3c1Jlc291cmNlVGFnKHRhZ0tleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wZXJhdG9yPzogT3BlcmF0b3IgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pZihgYXdzOlJlc291cmNlVGFnLyR7IHRhZ0tleSB9YCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhY2Nlc3MgYnkgdGhlIHRhZyBrZXlzIHRoYXQgYXJlIHBhc3NlZCBpbiB0aGUgcmVxdWVzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2NvbmRpdGlvbi1rZXlzLmh0bWwjY29uZGl0aW9uLWtleXMtdGFna2V5c1xuICAgKlxuICAgKiBBcHBsaWVzIHRvIGFjdGlvbnM6XG4gICAqIC0gLnRvQ3JlYXRlV29ya3NwYWNlKClcbiAgICogLSAudG9UYWdSZXNvdXJjZSgpXG4gICAqIC0gLnRvVW50YWdSZXNvdXJjZSgpXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUocykgdG8gY2hlY2tcbiAgICogQHBhcmFtIG9wZXJhdG9yIFdvcmtzIHdpdGggW3N0cmluZyBvcGVyYXRvcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfY29uZGl0aW9uX29wZXJhdG9ycy5odG1sI0NvbmRpdGlvbnNfU3RyaW5nKS4gKipEZWZhdWx0OioqIGBTdHJpbmdMaWtlYFxuICAgKi9cbiAgcHVibGljIGlmQXdzVGFnS2V5cyh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wZXJhdG9yPzogT3BlcmF0b3IgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pZihgYXdzOlRhZ0tleXNgLCB2YWx1ZSwgb3BlcmF0b3IgPz8gJ1N0cmluZ0xpa2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGF0ZW1lbnQgcHJvdmlkZXIgZm9yIHNlcnZpY2UgW2FudGhyb3BpY10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NlcnZpY2UtYXV0aG9yaXphdGlvbi9sYXRlc3QvcmVmZXJlbmNlL2xpc3RfYXdzLWV4dGVybmFsLWFudGhyb3BpYy5odG1sKS5cbiAgICpcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByb3BzPzogaWFtLlBvbGljeVN0YXRlbWVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG59XG4iXX0=