563 lines
1.1 MiB
Plaintext
563 lines
1.1 MiB
Plaintext
import * as types from "/_nuxt/lib/common/generated/gql/graphql.ts";
|
|
const documents = {
|
|
"\n fragment AuthLoginWithEmailBlock_PendingWorkspaceCollaborator on PendingWorkspaceCollaborator {\n id\n email\n user {\n id\n }\n }\n": types.AuthLoginWithEmailBlock_PendingWorkspaceCollaboratorFragmentDoc,
|
|
"\n query AuthRegisterPanelWorkspaceInvite($token: String) {\n workspaceInvite(token: $token) {\n id\n ...AuthWorkspaceInviteHeader_PendingWorkspaceCollaborator\n }\n }\n": types.AuthRegisterPanelWorkspaceInviteDocument,
|
|
"\n fragment ServerTermsOfServicePrivacyPolicyFragment on ServerInfo {\n termsOfService\n }\n": types.ServerTermsOfServicePrivacyPolicyFragmentFragmentDoc,
|
|
"\n fragment AuthWorkspaceInviteHeader_PendingWorkspaceCollaborator on PendingWorkspaceCollaborator {\n id\n workspace {\n id\n name\n }\n email\n user {\n id\n ...LimitedUserAvatar\n }\n }\n": types.AuthWorkspaceInviteHeader_PendingWorkspaceCollaboratorFragmentDoc,
|
|
"\n fragment AuthSsoLogin_Workspace on LimitedWorkspace {\n id\n slug\n name\n logo\n }\n": types.AuthSsoLogin_WorkspaceFragmentDoc,
|
|
"\n fragment AuthStategiesServerInfoFragment on ServerInfo {\n authStrategies {\n id\n name\n url\n }\n ...AuthThirdPartyLoginButtonOIDC_ServerInfo\n }\n": types.AuthStategiesServerInfoFragmentFragmentDoc,
|
|
"\n fragment AuthThirdPartyLoginButtonOIDC_ServerInfo on ServerInfo {\n authStrategies {\n id\n name\n }\n }\n": types.AuthThirdPartyLoginButtonOidc_ServerInfoFragmentDoc,
|
|
"\n fragment AutomateAutomationCreateDialog_AutomateFunction on AutomateFunction {\n id\n ...AutomationsFunctionsCard_AutomateFunction\n ...AutomateAutomationCreateDialogFunctionParametersStep_AutomateFunction\n }\n": types.AutomateAutomationCreateDialog_AutomateFunctionFragmentDoc,
|
|
"\n fragment AutomateAutomationCreateDialogFunctionParametersStep_AutomateFunction on AutomateFunction {\n id\n releases(limit: 1) {\n items {\n id\n inputSchema\n }\n }\n }\n": types.AutomateAutomationCreateDialogFunctionParametersStep_AutomateFunctionFragmentDoc,
|
|
"\n query AutomationCreateDialogFunctionsSearch(\n $workspaceId: String!\n $filter: AutomateFunctionsFilter\n $cursor: String = null\n ) {\n workspace(id: $workspaceId) {\n automateFunctions(limit: 20, cursor: $cursor, filter: $filter) {\n cursor\n totalCount\n items {\n id\n ...AutomateAutomationCreateDialog_AutomateFunction\n }\n }\n }\n }\n": types.AutomationCreateDialogFunctionsSearchDocument,
|
|
"\n fragment AutomationsFunctionsCard_AutomateFunction on AutomateFunction {\n id\n name\n isFeatured\n description\n logo\n repo {\n id\n url\n owner\n name\n }\n }\n": types.AutomationsFunctionsCard_AutomateFunctionFragmentDoc,
|
|
"\n fragment AutomateFunctionCreateDialog_Workspace on Workspace {\n id\n name\n slug\n }\n": types.AutomateFunctionCreateDialog_WorkspaceFragmentDoc,
|
|
"\n fragment AutomateFunctionEditDialog_Workspace on Workspace {\n id\n name\n }\n": types.AutomateFunctionEditDialog_WorkspaceFragmentDoc,
|
|
"\n fragment AutomateFunctionCreateDialogDoneStep_AutomateFunction on AutomateFunction {\n id\n repo {\n id\n url\n owner\n name\n }\n ...AutomationsFunctionsCard_AutomateFunction\n }\n": types.AutomateFunctionCreateDialogDoneStep_AutomateFunctionFragmentDoc,
|
|
"\n fragment AutomateFunctionCreateDialogTemplateStep_AutomateFunctionTemplate on AutomateFunctionTemplate {\n id\n title\n logo\n url\n }\n": types.AutomateFunctionCreateDialogTemplateStep_AutomateFunctionTemplateFragmentDoc,
|
|
"\n fragment AutomateFunctionPageHeader_Function on AutomateFunction {\n id\n name\n logo\n repo {\n id\n url\n owner\n name\n }\n releases(limit: 1) {\n totalCount\n }\n workspaceIds\n }\n\n fragment AutomateFunctionPageHeader_Workspace on Workspace {\n id\n name\n slug\n }\n": types.AutomateFunctionPageHeader_FunctionFragmentDoc,
|
|
"\n fragment AutomateFunctionPageInfo_AutomateFunction on AutomateFunction {\n id\n repo {\n id\n url\n owner\n name\n }\n description\n releases(limit: 1) {\n items {\n id\n inputSchema\n createdAt\n commitId\n ...AutomateFunctionPageParametersDialog_AutomateFunctionRelease\n }\n }\n }\n": types.AutomateFunctionPageInfo_AutomateFunctionFragmentDoc,
|
|
"\n fragment AutomateFunctionPageParametersDialog_AutomateFunctionRelease on AutomateFunctionRelease {\n id\n inputSchema\n }\n": types.AutomateFunctionPageParametersDialog_AutomateFunctionReleaseFragmentDoc,
|
|
"\n fragment AutomateFunctionsPageHeader_Query on Query {\n activeUser {\n id\n role\n automateInfo {\n hasAutomateGithubApp\n availableGithubOrgs\n }\n }\n serverInfo {\n automate {\n availableFunctionTemplates {\n ...AutomateFunctionCreateDialogTemplateStep_AutomateFunctionTemplate\n }\n }\n }\n }\n": types.AutomateFunctionsPageHeader_QueryFragmentDoc,
|
|
"\n fragment AutomateRunsTriggerStatus_TriggeredAutomationsStatus on TriggeredAutomationsStatus {\n id\n ...TriggeredAutomationsStatusSummary\n ...AutomateRunsTriggerStatusDialog_TriggeredAutomationsStatus\n }\n": types.AutomateRunsTriggerStatus_TriggeredAutomationsStatusFragmentDoc,
|
|
"\n fragment AutomateRunsTriggerStatusDialog_TriggeredAutomationsStatus on TriggeredAutomationsStatus {\n id\n automationRuns {\n id\n ...AutomateRunsTriggerStatusDialogRunsRows_AutomateRun\n }\n }\n": types.AutomateRunsTriggerStatusDialog_TriggeredAutomationsStatusFragmentDoc,
|
|
"\n fragment AutomateRunsTriggerStatusDialogFunctionRun_AutomateFunctionRun on AutomateFunctionRun {\n id\n results\n status\n statusMessage\n contextView\n function {\n id\n logo\n name\n }\n createdAt\n updatedAt\n }\n": types.AutomateRunsTriggerStatusDialogFunctionRun_AutomateFunctionRunFragmentDoc,
|
|
"\n fragment AutomateRunsTriggerStatusDialogRunsRows_AutomateRun on AutomateRun {\n id\n functionRuns {\n id\n ...AutomateRunsTriggerStatusDialogFunctionRun_AutomateFunctionRun\n }\n ...AutomationsStatusOrderedRuns_AutomationRun\n }\n": types.AutomateRunsTriggerStatusDialogRunsRows_AutomateRunFragmentDoc,
|
|
"\n fragment AutomateViewerPanel_AutomateRun on AutomateRun {\n id\n functionRuns {\n id\n ...AutomateViewerPanelFunctionRunRow_AutomateFunctionRun\n }\n ...AutomationsStatusOrderedRuns_AutomationRun\n }\n": types.AutomateViewerPanel_AutomateRunFragmentDoc,
|
|
"\n fragment AutomateViewerPanelFunctionRunRow_AutomateFunctionRun on AutomateFunctionRun {\n id\n results\n status\n statusMessage\n contextView\n function {\n id\n logo\n name\n }\n createdAt\n updatedAt\n }\n": types.AutomateViewerPanelFunctionRunRow_AutomateFunctionRunFragmentDoc,
|
|
"\n fragment BillingAlert_Workspace on Workspace {\n id\n role\n slug\n plan {\n name\n status\n createdAt\n }\n subscription {\n billingInterval\n currentBillingCycleEnd\n }\n }\n": types.BillingAlert_WorkspaceFragmentDoc,
|
|
"\n fragment CommonModelSelectorModel on Model {\n id\n name\n }\n": types.CommonModelSelectorModelFragmentDoc,
|
|
"\n query DashboardSidebar {\n activeUser {\n id\n activeWorkspace {\n id\n role\n }\n }\n }\n": types.DashboardSidebarDocument,
|
|
"\n query SidebarPermissions($slug: String!) {\n workspaceBySlug(slug: $slug) {\n permissions {\n canListDashboards {\n ...FullPermissionCheckResult\n }\n }\n }\n }\n": types.SidebarPermissionsDocument,
|
|
"\n fragment DashboardsCard_Dashboard on Dashboard {\n id\n name\n createdAt\n workspace {\n id\n }\n createdBy {\n id\n name\n avatar\n }\n permissions {\n canDelete {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.DashboardsCard_DashboardFragmentDoc,
|
|
"\n fragment DashboardsEditDialog_Dashboard on Dashboard {\n id\n name\n workspace {\n id\n }\n }\n": types.DashboardsEditDialog_DashboardFragmentDoc,
|
|
"\n query DashboardsListCanCreateDashboards($slug: String!) {\n workspaceBySlug(slug: $slug) {\n permissions {\n canCreateDashboards {\n ...FullPermissionCheckResult\n }\n }\n }\n }\n": types.DashboardsListCanCreateDashboardsDocument,
|
|
"\n query DashboardsSharDialogPermissions($id: String!) {\n dashboard(id: $id) {\n id\n shareLink {\n id\n content\n revoked\n }\n workspace {\n id\n role\n }\n permissions {\n canCreateToken {\n ...FullPermissionCheckResult\n }\n }\n }\n }\n": types.DashboardsSharDialogPermissionsDocument,
|
|
"\n mutation DashboardsShareToken($dashboardId: String!) {\n dashboardMutations {\n share(dashboardId: $dashboardId) {\n id\n revoked\n content\n }\n }\n }\n": types.DashboardsShareTokenDocument,
|
|
"\n mutation DashboardsShareEnableToken($input: DashboardShareInput!) {\n dashboardMutations {\n enableShare(input: $input) {\n id\n revoked\n content\n }\n }\n }\n": types.DashboardsShareEnableTokenDocument,
|
|
"\n mutation DashboardsShareDisableToken($input: DashboardShareInput!) {\n dashboardMutations {\n disableShare(input: $input) {\n id\n revoked\n content\n }\n }\n }\n": types.DashboardsShareDisableTokenDocument,
|
|
"\n fragment FormSelectModels_Model on Model {\n id\n name\n }\n": types.FormSelectModels_ModelFragmentDoc,
|
|
"\n fragment FormSelectProjects_Project on Project {\n id\n name\n }\n": types.FormSelectProjects_ProjectFragmentDoc,
|
|
"\n fragment FormSelectSavedView_SavedView on SavedView {\n id\n name\n thumbnailUrl\n }\n": types.FormSelectSavedView_SavedViewFragmentDoc,
|
|
"\n query FormSelectSavedView_SavedViews(\n $projectId: String!\n $input: ProjectSavedViewsInput!\n ) {\n project(id: $projectId) {\n id\n savedViews(input: $input) {\n items {\n id\n ...FormSelectSavedView_SavedView\n }\n totalCount\n cursor\n }\n }\n }\n": types.FormSelectSavedView_SavedViewsDocument,
|
|
"\n fragment FormSelectSavedViewGroup_SavedViewGroup on SavedViewGroup {\n id\n title\n isUngroupedViewsGroup\n }\n": types.FormSelectSavedViewGroup_SavedViewGroupFragmentDoc,
|
|
"\n query FormSelectSavedViewGroup_SavedViewGroups(\n $projectId: String!\n $input: SavedViewGroupsInput!\n ) {\n project(id: $projectId) {\n id\n savedViewGroups(input: $input) {\n items {\n id\n ...FormSelectSavedViewGroup_SavedViewGroup\n }\n totalCount\n cursor\n }\n }\n }\n": types.FormSelectSavedViewGroup_SavedViewGroupsDocument,
|
|
"\n fragment FormUsersSelectItem on LimitedUser {\n id\n name\n avatar\n }\n": types.FormUsersSelectItemFragmentDoc,
|
|
"\n fragment HeaderWorkspaceSwitcherWorkspaceListItem_Workspace on Workspace {\n id\n name\n logo\n role\n slug\n creationState {\n completed\n }\n plan {\n name\n }\n }\n": types.HeaderWorkspaceSwitcherWorkspaceListItem_WorkspaceFragmentDoc,
|
|
"\n fragment WorkspaceSwitcherActiveWorkspace_LimitedWorkspace on LimitedWorkspace {\n id\n name\n logo\n slug\n role\n }\n": types.WorkspaceSwitcherActiveWorkspace_LimitedWorkspaceFragmentDoc,
|
|
"\n fragment WorkspaceSwitcherActiveWorkspace_User on User {\n id\n activeWorkspace {\n ...WorkspaceSwitcherActiveWorkspace_LimitedWorkspace\n }\n expiredSsoSessions {\n id\n ...HeaderWorkspaceSwitcherHeaderExpiredSso_LimitedWorkspace\n }\n discoverableWorkspaces {\n id\n }\n workspaceJoinRequests(filter: $joinRequestFilter) {\n totalCount\n }\n }\n": types.WorkspaceSwitcherActiveWorkspace_UserFragmentDoc,
|
|
"\n fragment HeaderWorkspaceSwitcherHeaderExpiredSso_LimitedWorkspace on LimitedWorkspace {\n id\n slug\n name\n logo\n }\n": types.HeaderWorkspaceSwitcherHeaderExpiredSso_LimitedWorkspaceFragmentDoc,
|
|
"\n fragment HeaderWorkspaceSwitcherHeaderWorkspace_Workspace on Workspace {\n ...InviteDialogWorkspace_Workspace\n id\n logo\n name\n role\n permissions {\n canInvite {\n ...FullPermissionCheckResult\n }\n }\n plan {\n name\n }\n team {\n totalCount\n }\n }\n": types.HeaderWorkspaceSwitcherHeaderWorkspace_WorkspaceFragmentDoc,
|
|
"\n fragment HeaderNavShare_Project on Project {\n id\n visibility\n ...ProjectsModelPageEmbed_Project\n }\n": types.HeaderNavShare_ProjectFragmentDoc,
|
|
"\n fragment HeaderNavNotificationsProjectInvite_PendingStreamCollaborator on PendingStreamCollaborator {\n id\n invitedBy {\n ...LimitedUserAvatar\n }\n projectId\n projectName\n token\n workspaceSlug\n user {\n id\n }\n }\n": types.HeaderNavNotificationsProjectInvite_PendingStreamCollaboratorFragmentDoc,
|
|
"\n fragment HeaderNavNotificationsWorkspaceInvite_PendingWorkspaceCollaborator on PendingWorkspaceCollaborator {\n id\n invitedBy {\n id\n ...LimitedUserAvatar\n }\n workspace {\n id\n name\n }\n token\n user {\n id\n }\n ...UseWorkspaceInviteManager_PendingWorkspaceCollaborator\n }\n": types.HeaderNavNotificationsWorkspaceInvite_PendingWorkspaceCollaboratorFragmentDoc,
|
|
"\n fragment AccIntegrationFolderNode_AccFolder on AccFolder {\n id\n name\n contents {\n items {\n id\n name\n latestVersion {\n id\n name\n versionNumber\n fileType\n }\n }\n }\n children {\n items {\n id\n name\n children {\n items {\n id\n name\n }\n }\n contents {\n items {\n id\n name\n }\n }\n }\n }\n }\n": types.AccIntegrationFolderNode_AccFolderFragmentDoc,
|
|
"\n fragment SyncStatusModelItem_AccSyncItem on AccSyncItem {\n id\n status\n updatedAt\n accFileVersionIndex\n }\n": types.SyncStatusModelItem_AccSyncItemFragmentDoc,
|
|
"\n fragment SettingsProjectIntegrationsActionsMenu_AccSyncItem on AccSyncItem {\n id\n status\n project {\n id\n }\n }\n": types.SettingsProjectIntegrationsActionsMenu_AccSyncItemFragmentDoc,
|
|
"\n fragment InviteDialogWorkspace_Workspace on Workspace {\n id\n name\n slug\n domainBasedMembershipProtectionEnabled\n defaultSeatType\n domains {\n domain\n id\n }\n seats {\n editors {\n available\n }\n }\n ...InviteDialogSharedSelectUsers_Workspace\n ...WorkspacesPlan_Workspace\n }\n": types.InviteDialogWorkspace_WorkspaceFragmentDoc,
|
|
"\n fragment InviteDialogProject_Project on Project {\n id\n name\n workspaceId\n workspace {\n id\n name\n role\n domainBasedMembershipProtectionEnabled\n domains {\n domain\n id\n }\n ...WorkspacesPlan_Workspace\n }\n ...InviteDialogProjectRow_Project\n }\n": types.InviteDialogProject_ProjectFragmentDoc,
|
|
"\n fragment InviteDialogProjectRow_Project on Project {\n id\n workspaceId\n workspace {\n id\n role\n }\n }\n": types.InviteDialogProjectRow_ProjectFragmentDoc,
|
|
"\n query InviteDialogProjectRowProjectCollaborators(\n $projectId: String!\n $filter: InvitableCollaboratorsFilter\n ) {\n project(id: $projectId) {\n id\n invitableCollaborators(filter: $filter) {\n items {\n ...InviteProjectItem_WorkspaceCollaborator\n }\n }\n }\n }\n": types.InviteDialogProjectRowProjectCollaboratorsDocument,
|
|
"\n fragment InviteDialogSharedSelectUsers_Workspace on Workspace {\n id\n slug\n defaultSeatType\n }\n": types.InviteDialogSharedSelectUsers_WorkspaceFragmentDoc,
|
|
"\n fragment PresentationHeader_SavedViewGroup on SavedViewGroup {\n id\n title\n }\n": types.PresentationHeader_SavedViewGroupFragmentDoc,
|
|
"\n fragment PresentationInfoSidebar_SavedView on SavedView {\n id\n ...PresentationSlideEditDialog_SavedView\n name\n description\n permissions {\n canEditTitle {\n ...FullPermissionCheckResult\n }\n canEditDescription {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.PresentationInfoSidebar_SavedViewFragmentDoc,
|
|
"\n fragment PresentationLeftSidebar_LimitedWorkspace on LimitedWorkspace {\n id\n name\n logo\n slug\n }\n": types.PresentationLeftSidebar_LimitedWorkspaceFragmentDoc,
|
|
"\n fragment PresentationLoading_SavedViewGroup on SavedViewGroup {\n id\n title\n views(input: $input) {\n items {\n id\n screenshot\n }\n }\n }\n\n fragment PresentationLoading_LimitedWorkspace on LimitedWorkspace {\n id\n name\n logo\n }\n": types.PresentationLoading_SavedViewGroupFragmentDoc,
|
|
"\n fragment PresentationPageWrapper_SavedViewGroup on SavedViewGroup {\n id\n permissions {\n canUpdate {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.PresentationPageWrapper_SavedViewGroupFragmentDoc,
|
|
"\n query PresentationShareDialogPermissions(\n $projectId: String!\n $savedViewGroupId: ID!\n ) {\n project(id: $projectId) {\n id\n role\n savedViewGroup(id: $savedViewGroupId) {\n id\n groupId\n shareLink {\n id\n content\n revoked\n }\n permissions {\n canCreateToken {\n ...FullPermissionCheckResult\n }\n }\n }\n }\n }\n": types.PresentationShareDialogPermissionsDocument,
|
|
"\n mutation PresentationShareToken($input: SavedViewGroupShareInput!) {\n projectMutations {\n savedViewMutations {\n share(input: $input) {\n id\n revoked\n content\n }\n }\n }\n }\n": types.PresentationShareTokenDocument,
|
|
"\n mutation PresentationShareEnableToken($input: SavedViewGroupShareUpdateInput!) {\n projectMutations {\n savedViewMutations {\n enableShare(input: $input) {\n id\n revoked\n content\n }\n }\n }\n }\n": types.PresentationShareEnableTokenDocument,
|
|
"\n mutation PresentationShareDisableToken($input: SavedViewGroupShareUpdateInput!) {\n projectMutations {\n savedViewMutations {\n disableShare(input: $input) {\n id\n revoked\n content\n }\n }\n }\n }\n": types.PresentationShareDisableTokenDocument,
|
|
"\n fragment PresentationSlideEditDialog_SavedView on SavedView {\n id\n projectId\n name\n description\n thumbnailUrl\n }\n": types.PresentationSlideEditDialog_SavedViewFragmentDoc,
|
|
"\n fragment PresentationSlideListSlide_SavedView on SavedView {\n id\n name\n thumbnailUrl\n }\n": types.PresentationSlideListSlide_SavedViewFragmentDoc,
|
|
"\n fragment PresentationSlideList_SavedViewGroup on SavedViewGroup {\n id\n views(input: $input) {\n items {\n id\n ...PresentationSlideListSlide_SavedView\n }\n }\n }\n": types.PresentationSlideList_SavedViewGroupFragmentDoc,
|
|
"\n fragment PresentationViewerPageWrapper_SavedViewGroup on SavedViewGroup {\n id\n views(input: $input) {\n totalCount\n items {\n id\n resourceIdString\n }\n }\n }\n": types.PresentationViewerPageWrapper_SavedViewGroupFragmentDoc,
|
|
"\n fragment ProjectCardImportFileArea_Project on Project {\n id\n permissions {\n canCreateModel {\n ...FullPermissionCheckResult\n }\n }\n ...UseFileImport_Project\n }\n": types.ProjectCardImportFileArea_ProjectFragmentDoc,
|
|
"\n fragment ProjectCardImportFileArea_Model on Model {\n id\n name\n permissions {\n canCreateVersion {\n ...FullPermissionCheckResult\n }\n }\n ...UseFileImport_Model\n }\n": types.ProjectCardImportFileArea_ModelFragmentDoc,
|
|
"\n fragment ProjectInviteAdd_Project on Project {\n id\n ...InviteDialogProject_Project\n ...UseCanInviteToProject_Project\n ...WorkspaceMoveProject_Project\n }\n": types.ProjectInviteAdd_ProjectFragmentDoc,
|
|
"\n fragment ProjectModelPageHeaderProject on Project {\n id\n name\n model(id: $modelId) {\n id\n name\n description\n }\n workspace {\n id\n slug\n name\n role\n }\n }\n": types.ProjectModelPageHeaderProjectFragmentDoc,
|
|
"\n fragment ProjectModelPageVersionsPagination on Project {\n id\n visibility\n role\n model(id: $modelId) {\n id\n versions(limit: 16, cursor: $versionsCursor) {\n cursor\n totalCount\n items {\n ...ProjectModelPageVersionsCardVersion\n }\n }\n ...ProjectCardImportFileArea_Model\n }\n ...ProjectsModelPageEmbed_Project\n ...ProjectCardImportFileArea_Project\n ...ProjectModelPageVersionsCard_Project\n }\n": types.ProjectModelPageVersionsPaginationFragmentDoc,
|
|
"\n fragment ProjectModelPageVersionsProject on Project {\n ...ProjectPageProjectHeader\n model(id: $modelId) {\n id\n name\n pendingImportedVersions {\n ...PendingFileUpload\n }\n }\n ...ProjectModelPageVersionsPagination\n ...ProjectsModelPageEmbed_Project\n workspace {\n id\n readOnly\n }\n }\n": types.ProjectModelPageVersionsProjectFragmentDoc,
|
|
"\n fragment ProjectModelPageDialogDeleteVersion on Version {\n id\n message\n }\n": types.ProjectModelPageDialogDeleteVersionFragmentDoc,
|
|
"\n fragment ProjectModelPageDialogEditMessageVersion on Version {\n id\n message\n }\n": types.ProjectModelPageDialogEditMessageVersionFragmentDoc,
|
|
"\n fragment ProjectModelPageDialogMoveToVersion on Version {\n id\n message\n }\n": types.ProjectModelPageDialogMoveToVersionFragmentDoc,
|
|
"\n fragment ProjectsModelPageEmbed_Project on Project {\n id\n visibility\n permissions {\n canCreateEmbedTokens {\n ...FullPermissionCheckResult\n }\n }\n workspace {\n id\n slug\n role\n embedOptions {\n hideSpeckleBranding\n }\n permissions {\n canEditEmbedOptions {\n ...FullPermissionCheckResult\n }\n }\n }\n }\n": types.ProjectsModelPageEmbed_ProjectFragmentDoc,
|
|
"\n fragment ProjectModelPageVersionsCard_Project on Project {\n id\n workspace {\n id\n slug\n }\n ...ViewerResourcesLimitAlert_Project\n }\n": types.ProjectModelPageVersionsCard_ProjectFragmentDoc,
|
|
"\n fragment ProjectModelPageVersionsCardVersion on Version {\n id\n message\n authorUser {\n ...LimitedUserAvatar\n }\n createdAt\n previewUrl\n referencedObject\n sourceApplication\n commentThreadCount: commentThreads(limit: 0) {\n totalCount\n }\n ...ProjectModelPageDialogDeleteVersion\n ...ProjectModelPageDialogMoveToVersion\n automationsStatus {\n ...AutomateRunsTriggerStatus_TriggeredAutomationsStatus\n }\n permissions {\n canUpdate {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.ProjectModelPageVersionsCardVersionFragmentDoc,
|
|
"\n fragment ProjectModelsAdd_Project on Project {\n id\n workspace {\n name\n slug\n role\n plan {\n name\n }\n }\n ...UseCanCreateModel_Project\n ...WorkspaceMoveProject_Project\n }\n": types.ProjectModelsAdd_ProjectFragmentDoc,
|
|
"\n fragment ProjectPageProjectHeader on Project {\n id\n name\n description\n workspace {\n id\n slug\n name\n logo\n role\n }\n }\n": types.ProjectPageProjectHeaderFragmentDoc,
|
|
"\n fragment ProjectPageAutomationDeleteDialog_Project on Project {\n id\n name\n workspaceId\n }\n": types.ProjectPageAutomationDeleteDialog_ProjectFragmentDoc,
|
|
"\n fragment ProjectPageAutomationDeleteDialog_Automation on Automation {\n id\n name\n currentRevision {\n functions {\n release {\n function {\n id\n name\n }\n }\n }\n }\n }\n": types.ProjectPageAutomationDeleteDialog_AutomationFragmentDoc,
|
|
"\n fragment ProjectPageAutomationFunctionSettingsDialog_AutomationRevisionFunction on AutomationRevisionFunction {\n parameters\n release {\n id\n versionTag\n createdAt\n inputSchema\n function {\n id\n }\n }\n }\n": types.ProjectPageAutomationFunctionSettingsDialog_AutomationRevisionFunctionFragmentDoc,
|
|
"\n fragment ProjectPageAutomationFunctionSettingsDialog_AutomationRevision on AutomationRevision {\n id\n triggerDefinitions {\n ... on VersionCreatedTriggerDefinition {\n type\n model {\n id\n ...CommonModelSelectorModel\n }\n }\n }\n }\n": types.ProjectPageAutomationFunctionSettingsDialog_AutomationRevisionFragmentDoc,
|
|
"\n fragment ProjectPageAutomationFunctions_Automation on Automation {\n id\n currentRevision {\n id\n ...ProjectPageAutomationFunctionSettingsDialog_AutomationRevision\n functions {\n release {\n id\n inputSchema\n function {\n id\n ...AutomationsFunctionsCard_AutomateFunction\n releases(limit: 1) {\n items {\n id\n }\n }\n }\n }\n ...ProjectPageAutomationFunctionSettingsDialog_AutomationRevisionFunction\n }\n }\n }\n": types.ProjectPageAutomationFunctions_AutomationFragmentDoc,
|
|
"\n fragment ProjectPageAutomationHeader_Automation on Automation {\n id\n name\n enabled\n isTestAutomation\n currentRevision {\n id\n triggerDefinitions {\n ... on VersionCreatedTriggerDefinition {\n model {\n ...ProjectPageLatestItemsModelItem\n }\n }\n }\n }\n }\n": types.ProjectPageAutomationHeader_AutomationFragmentDoc,
|
|
"\n fragment ProjectPageAutomationHeader_Project on Project {\n id\n role\n workspaceId\n ...ProjectPageModelsCardProject\n }\n": types.ProjectPageAutomationHeader_ProjectFragmentDoc,
|
|
"\n fragment ProjectPageAutomationModels_Project on Project {\n id\n ...ProjectPageModelsCardProject\n }\n": types.ProjectPageAutomationModels_ProjectFragmentDoc,
|
|
"\n fragment ProjectPageAutomationRuns_Automation on Automation {\n id\n name\n enabled\n isTestAutomation\n runs(limit: 10) {\n items {\n ...AutomationRunDetails\n }\n totalCount\n cursor\n }\n ...ProjectPageAutomationDeleteDialog_Automation\n }\n": types.ProjectPageAutomationRuns_AutomationFragmentDoc,
|
|
"\n fragment ProjectPageAutomationsRow_Automation on Automation {\n id\n name\n enabled\n isTestAutomation\n currentRevision {\n id\n triggerDefinitions {\n ... on VersionCreatedTriggerDefinition {\n model {\n id\n name\n }\n }\n }\n }\n runs(limit: 10) {\n totalCount\n items {\n ...AutomationRunDetails\n }\n cursor\n }\n }\n": types.ProjectPageAutomationsRow_AutomationFragmentDoc,
|
|
"\n fragment ProjectPageCollaborators_Project on Project {\n id\n permissions {\n canUpdate {\n ...FullPermissionCheckResult\n }\n }\n ...ProjectInviteAdd_Project\n }\n": types.ProjectPageCollaborators_ProjectFragmentDoc,
|
|
"\n query ProjectPageCollaborators($projectId: String!, $filter: WorkspaceTeamFilter!) {\n project(id: $projectId) {\n id\n visibility\n ...ProjectPageTeamInternals_Project\n ...InviteDialogProject_Project\n ...ProjectPageCollaborators_Project\n workspaceId\n permissions {\n canInvite {\n ...FullPermissionCheckResult\n }\n }\n workspace {\n ...SettingsWorkspacesMembersTableHeader_Workspace\n name\n logo\n team(filter: $filter) {\n items {\n ...ProjectPageCollaborators_WorkspaceCollaborator\n }\n }\n }\n }\n }\n": types.ProjectPageCollaboratorsDocument,
|
|
"\n fragment ProjectPageCollaborators_WorkspaceCollaborator on WorkspaceCollaborator {\n id\n user {\n id\n name\n avatar\n }\n }\n": types.ProjectPageCollaborators_WorkspaceCollaboratorFragmentDoc,
|
|
"\n query InvitableCollaborators(\n $projectId: String!\n $filter: InvitableCollaboratorsFilter\n $limit: Int!\n $workspaceId: String\n ) {\n project(id: $projectId) {\n invitableCollaborators(filter: $filter, limit: $limit) {\n totalCount\n items {\n user {\n id\n avatar\n name\n workspaceRole(workspaceId: $workspaceId)\n }\n }\n }\n }\n }\n": types.InvitableCollaboratorsDocument,
|
|
"\n fragment ProjectDiscussionsPageHeader_Project on Project {\n id\n name\n }\n": types.ProjectDiscussionsPageHeader_ProjectFragmentDoc,
|
|
"\n fragment ProjectDiscussionsPageResults_Project on Project {\n id\n }\n": types.ProjectDiscussionsPageResults_ProjectFragmentDoc,
|
|
"\n fragment ProjectPageModelsActions on Model {\n id\n name\n permissions {\n canUpdate {\n ...FullPermissionCheckResult\n }\n canDelete {\n ...FullPermissionCheckResult\n }\n canCreateVersion {\n ...FullPermissionCheckResult\n }\n }\n accSyncItem {\n id\n ...ProjectPageModelsActions_AccSyncItem\n }\n ...UseCopyModelLink_Model\n }\n": types.ProjectPageModelsActionsFragmentDoc,
|
|
"\n fragment ProjectPageModelsActions_Project on Project {\n id\n workspace {\n id\n slug\n }\n permissions {\n canReadAccIntegrationSettings {\n ...FullPermissionCheckResult\n }\n }\n ...ProjectsModelPageEmbed_Project\n }\n": types.ProjectPageModelsActions_ProjectFragmentDoc,
|
|
"\n fragment ProjectPageModelsActions_AccSyncItem on AccSyncItem {\n id\n accFileName\n status\n }\n": types.ProjectPageModelsActions_AccSyncItemFragmentDoc,
|
|
"\n fragment ProjectPageModelsCardProject on Project {\n id\n role\n visibility\n ...ProjectPageModelsActions_Project\n ...ProjectCardImportFileArea_Project\n permissions {\n canCreateModel {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.ProjectPageModelsCardProjectFragmentDoc,
|
|
"\n fragment ProjectPageModelsCard_Model on Model {\n id\n homeView {\n id\n resourceIds\n }\n lastUpload: uploads(input: { limit: 1, cursor: null }) {\n items {\n id\n updatedAt\n convertedStatus\n }\n }\n lastVersion: versions(limit: 1, cursor: null) {\n items {\n id\n createdAt\n }\n }\n }\n": types.ProjectPageModelsCard_ModelFragmentDoc,
|
|
"\n fragment ProjectModelsPageHeader_Project on Project {\n id\n name\n sourceApps\n role\n models {\n totalCount\n }\n team {\n id\n user {\n ...FormUsersSelectItem\n }\n }\n workspace {\n id\n role\n slug\n name\n readOnly\n plan {\n name\n }\n }\n permissions {\n canCreateModel {\n ...FullPermissionCheckResult\n }\n canReadAccIntegrationSettings {\n ...FullPermissionCheckResult\n }\n }\n ...ProjectModelsAdd_Project\n }\n": types.ProjectModelsPageHeader_ProjectFragmentDoc,
|
|
"\n fragment ProjectModelsPageResults_Project on Project {\n ...ProjectPageLatestItemsModels\n }\n": types.ProjectModelsPageResults_ProjectFragmentDoc,
|
|
"\n fragment ProjectPageModelsStructureItem_Project on Project {\n id\n ...ProjectPageModelsActions_Project\n ...ProjectCardImportFileArea_Project\n ...UseCanCreateModel_Project\n permissions {\n canCreateModel {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.ProjectPageModelsStructureItem_ProjectFragmentDoc,
|
|
"\n fragment SingleLevelModelTreeItem on ModelsTreeItem {\n id\n name\n fullName\n model {\n ...ProjectPageLatestItemsModelItem\n ...ProjectCardImportFileArea_Model\n ...ProjectPageModelsCard_Model\n accSyncItem {\n id\n ...SyncStatusModelItem_AccSyncItem\n }\n }\n hasChildren\n updatedAt\n }\n": types.SingleLevelModelTreeItemFragmentDoc,
|
|
"\n fragment ProjectPageModelsUploadsDialog_FileUpload on FileUpload {\n id\n convertedStatus\n convertedMessage\n fileName\n fileSize\n convertedLastUpdate\n convertedVersionId\n uploadDate\n uploadComplete\n branchName\n ...UseFailedFileImportJobUtils_FileUpload\n }\n": types.ProjectPageModelsUploadsDialog_FileUploadFragmentDoc,
|
|
"\n query GetModelUploads(\n $projectId: String!\n $modelId: String!\n $input: GetModelUploadsInput!\n ) {\n project(id: $projectId) {\n id\n model(id: $modelId) {\n id\n uploads(input: $input) {\n totalCount\n cursor\n items {\n id\n ...ProjectPageModelsUploadsDialog_FileUpload\n }\n }\n }\n }\n }\n": types.GetModelUploadsDocument,
|
|
"\n fragment ProjectPageModelsCardDeleteDialog on Model {\n id\n name\n }\n": types.ProjectPageModelsCardDeleteDialogFragmentDoc,
|
|
"\n fragment ProjectPageModelsCardRenameDialog on Model {\n id\n name\n description\n }\n": types.ProjectPageModelsCardRenameDialogFragmentDoc,
|
|
"\n fragment ProjectPageModelRemoveSyncDialog_AccSyncItem on AccSyncItem {\n id\n accFileName\n }\n": types.ProjectPageModelRemoveSyncDialog_AccSyncItemFragmentDoc,
|
|
"\n fragment ProjectPageSettingsIntegrations_Project on Project {\n id\n permissions {\n canReadAccIntegrationSettings {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.ProjectPageSettingsIntegrations_ProjectFragmentDoc,
|
|
"\n query ProjectPageSettingsGeneral($projectId: String!) {\n project(id: $projectId) {\n id\n ...ProjectPageSettingsGeneralBlockProjectInfo_Project\n ...ProjectPageSettingsGeneralBlockAccess_Project\n ...ProjectPageSettingsGeneralBlockDiscussions_Project\n ...ProjectPageSettingsGeneralBlockLeave_Project\n ...ProjectPageSettingsGeneralBlockDelete_Project\n ...ProjectPageTeamInternals_Project\n }\n }\n": types.ProjectPageSettingsGeneralDocument,
|
|
"\n fragment ProjectPageSettingsGeneralBlockAccess_Project on Project {\n id\n visibility\n workspaceId\n permissions {\n canUpdate {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.ProjectPageSettingsGeneralBlockAccess_ProjectFragmentDoc,
|
|
"\n fragment ProjectPageSettingsGeneralBlockDelete_Project on Project {\n ...ProjectsDeleteDialog_Project\n permissions {\n canUpdate {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.ProjectPageSettingsGeneralBlockDelete_ProjectFragmentDoc,
|
|
"\n fragment ProjectPageSettingsGeneralBlockDiscussions_Project on Project {\n id\n visibility\n allowPublicComments\n permissions {\n canUpdateAllowPublicComments {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.ProjectPageSettingsGeneralBlockDiscussions_ProjectFragmentDoc,
|
|
"\n fragment ProjectPageSettingsGeneralBlockLeave_Project on Project {\n id\n name\n role\n team {\n role\n user {\n ...LimitedUserAvatar\n role\n }\n }\n workspace {\n id\n }\n permissions {\n canLeave {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.ProjectPageSettingsGeneralBlockLeave_ProjectFragmentDoc,
|
|
"\n fragment ProjectPageSettingsGeneralBlockProjectInfo_Project on Project {\n id\n name\n description\n permissions {\n canUpdate {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.ProjectPageSettingsGeneralBlockProjectInfo_ProjectFragmentDoc,
|
|
"\n fragment ProjectPageSettingsTokens_EmbedToken on EmbedToken {\n createdAt\n lastUsed\n tokenId\n resourceIdString\n user {\n id\n avatar\n name\n }\n }\n": types.ProjectPageSettingsTokens_EmbedTokenFragmentDoc,
|
|
"\n fragment ProjectPageSettingsTokens_Project on Project {\n id\n name\n permissions {\n canReadEmbedTokens {\n ...FullPermissionCheckResult\n }\n canRevokeEmbedTokens {\n ...FullPermissionCheckResult\n }\n }\n embedTokens(cursor: $cursor, limit: 20) {\n cursor\n totalCount\n items {\n ...ProjectPageSettingsTokens_EmbedToken\n }\n }\n }\n": types.ProjectPageSettingsTokens_ProjectFragmentDoc,
|
|
"\n fragment ProjectPageSettingsWebhooks_Project on Project {\n id\n permissions {\n canUpdate {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.ProjectPageSettingsWebhooks_ProjectFragmentDoc,
|
|
"\n fragment ProjectsPageTeamDialogManagePermissions_Project on Project {\n id\n visibility\n role\n workspaceId\n }\n": types.ProjectsPageTeamDialogManagePermissions_ProjectFragmentDoc,
|
|
"\n fragment ProjectsAdd_User on User {\n id\n permissions {\n canCreatePersonalProject {\n ...FullPermissionCheckResult\n }\n }\n ...UseCanCreatePersonalProject_User\n }\n": types.ProjectsAdd_UserFragmentDoc,
|
|
"\n fragment ProjectsAdd_Workspace on Workspace {\n id\n slug\n name\n role\n plan {\n name\n }\n permissions {\n canCreateProject {\n ...FullPermissionCheckResult\n }\n }\n ...UseCanCreateWorkspaceProject_Workspace\n }\n": types.ProjectsAdd_WorkspaceFragmentDoc,
|
|
"\n fragment ProjectsDashboard_UserProjectCollection on UserProjectCollection {\n numberOfHidden\n }\n": types.ProjectsDashboard_UserProjectCollectionFragmentDoc,
|
|
"\n fragment ProjectsDashboard_User on User {\n ...ProjectsAdd_User\n permissions {\n canCreatePersonalProject {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.ProjectsDashboard_UserFragmentDoc,
|
|
"\n fragment ProjectsDashboardFilledProject on ProjectCollection {\n items {\n ...ProjectDashboardItem\n }\n }\n": types.ProjectsDashboardFilledProjectFragmentDoc,
|
|
"\n fragment ProjectsDashboardFilledUser on UserProjectCollection {\n items {\n ...ProjectDashboardItem\n }\n }\n": types.ProjectsDashboardFilledUserFragmentDoc,
|
|
"\n fragment ProjectsDeleteDialog_Project on Project {\n id\n name\n role\n models(limit: 0) {\n totalCount\n }\n workspace {\n slug\n id\n }\n versions(limit: 0) {\n totalCount\n }\n permissions {\n canDelete {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.ProjectsDeleteDialog_ProjectFragmentDoc,
|
|
"\n fragment ProjectsHiddenProjectWarning_User on User {\n id\n expiredSsoSessions {\n id\n slug\n name\n logo\n }\n }\n": types.ProjectsHiddenProjectWarning_UserFragmentDoc,
|
|
"\n fragment ProjectsWorkspaceSelect_Workspace on Workspace {\n id\n role\n name\n logo\n readOnly\n slug\n }\n": types.ProjectsWorkspaceSelect_WorkspaceFragmentDoc,
|
|
"\n fragment ProjectsInviteBanner on PendingStreamCollaborator {\n id\n invitedBy {\n ...LimitedUserAvatar\n }\n projectId\n projectName\n token\n user {\n id\n }\n }\n": types.ProjectsInviteBannerFragmentDoc,
|
|
"\n fragment SettingsSidebar_Workspace on Workspace {\n ...SettingsMenu_Workspace\n id\n slug\n role\n }\n": types.SettingsSidebar_WorkspaceFragmentDoc,
|
|
"\n fragment SettingsServerRegionsAddEditDialog_ServerRegionItem on ServerRegionItem {\n id\n name\n description\n key\n }\n": types.SettingsServerRegionsAddEditDialog_ServerRegionItemFragmentDoc,
|
|
"\n fragment SettingsServerRegionsTable_ServerRegionItem on ServerRegionItem {\n id\n name\n key\n description\n }\n": types.SettingsServerRegionsTable_ServerRegionItemFragmentDoc,
|
|
"\n fragment SettingsSharedProjects_Project on Project {\n ...ProjectsDeleteDialog_Project\n id\n name\n visibility\n createdAt\n updatedAt\n models(limit: 0) {\n totalCount\n }\n versions(limit: 0) {\n totalCount\n }\n team {\n id\n user {\n name\n id\n avatar\n }\n }\n permissions {\n canDelete {\n ...FullPermissionCheckResult\n }\n canReadSettings {\n ...FullPermissionCheckResult\n }\n canRead {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.SettingsSharedProjects_ProjectFragmentDoc,
|
|
"\n fragment SettingsSharedProjects_Workspace on Workspace {\n id\n ...ProjectsAdd_Workspace\n }\n": types.SettingsSharedProjects_WorkspaceFragmentDoc,
|
|
"\n fragment SettingsUserProfileChangePassword_User on User {\n id\n email\n }\n": types.SettingsUserProfileChangePassword_UserFragmentDoc,
|
|
"\n fragment SettingsUserProfileDeleteAccount_User on User {\n id\n email\n }\n": types.SettingsUserProfileDeleteAccount_UserFragmentDoc,
|
|
"\n fragment SettingsUserProfileDetails_User on User {\n id\n name\n company\n ...UserProfileEditDialogAvatar_User\n }\n": types.SettingsUserProfileDetails_UserFragmentDoc,
|
|
"\n fragment UserProfileEditDialogAvatar_User on User {\n id\n avatar\n ...ActiveUserAvatar\n }\n": types.UserProfileEditDialogAvatar_UserFragmentDoc,
|
|
"\n fragment SettingsWorkspaceGeneralDeleteDialog_Workspace on Workspace {\n id\n name\n }\n": types.SettingsWorkspaceGeneralDeleteDialog_WorkspaceFragmentDoc,
|
|
"\n fragment SettingsWorkspacesGeneralEditAvatar_Workspace on Workspace {\n id\n logo\n name\n }\n": types.SettingsWorkspacesGeneralEditAvatar_WorkspaceFragmentDoc,
|
|
"\n fragment SettingsWorkspacesGeneralEditSlugDialog_Workspace on Workspace {\n id\n name\n slug\n }\n": types.SettingsWorkspacesGeneralEditSlugDialog_WorkspaceFragmentDoc,
|
|
"\n fragment SettingsWorkspacesAutomationFunctions_AutomateFunction on AutomateFunction {\n id\n name\n logo\n creator {\n id\n name\n avatar\n }\n ...SettingsWorkspacesAutomationTableRowActions_AutomateFunction\n }\n": types.SettingsWorkspacesAutomationFunctions_AutomateFunctionFragmentDoc,
|
|
"\n fragment SettingsWorkspacesAutomationRegenerateTokenDialog_AutomateFunction on AutomateFunction {\n id\n name\n }\n": types.SettingsWorkspacesAutomationRegenerateTokenDialog_AutomateFunctionFragmentDoc,
|
|
"\n fragment SettingsWorkspacesAutomationTableRowActions_AutomateFunction on AutomateFunction {\n id\n permissions {\n ...SettingsWorkspacesAutomationTableRowActions_AutomateFunctionPermissionChecks\n }\n ...SettingsWorkspacesAutomationRegenerateTokenDialog_AutomateFunction\n }\n": types.SettingsWorkspacesAutomationTableRowActions_AutomateFunctionFragmentDoc,
|
|
"\n fragment SettingsWorkspacesAutomationTableRowActions_AutomateFunctionPermissionChecks on AutomateFunctionPermissionChecks {\n canRegenerateToken {\n ...FullPermissionCheckResult\n }\n }\n": types.SettingsWorkspacesAutomationTableRowActions_AutomateFunctionPermissionChecksFragmentDoc,
|
|
"\n fragment WorkspaceBillingPage_Workspace on Workspace {\n id\n role\n subscription {\n currency\n billingInterval\n }\n plan {\n name\n usage {\n projectCount\n modelCount\n }\n }\n ...BillingAlert_Workspace\n }\n": types.WorkspaceBillingPage_WorkspaceFragmentDoc,
|
|
"\n fragment SettingsWorkspacesMembersInvitesTable_PendingWorkspaceCollaborator on PendingWorkspaceCollaborator {\n id\n inviteId\n role\n title\n updatedAt\n email\n user {\n id\n ...LimitedUserAvatar\n }\n invitedBy {\n id\n ...LimitedUserAvatar\n }\n }\n": types.SettingsWorkspacesMembersInvitesTable_PendingWorkspaceCollaboratorFragmentDoc,
|
|
"\n fragment SettingsWorkspacesMembersInvitesTable_Workspace on Workspace {\n id\n ...SettingsWorkspacesMembersTableHeader_Workspace\n invitedTeam {\n ...SettingsWorkspacesMembersInvitesTable_PendingWorkspaceCollaborator\n }\n }\n": types.SettingsWorkspacesMembersInvitesTable_WorkspaceFragmentDoc,
|
|
"\n fragment SettingsWorkspacesMembersRequestsTable_Workspace on Workspace {\n ...SettingsWorkspacesMembersTableHeader_Workspace\n id\n adminWorkspacesJoinRequests {\n totalCount\n items {\n ...WorkspaceJoinRequestApproveDialog_WorkspaceJoinRequest\n id\n createdAt\n status\n email\n user {\n id\n avatar\n name\n }\n }\n }\n }\n": types.SettingsWorkspacesMembersRequestsTable_WorkspaceFragmentDoc,
|
|
"\n fragment SettingsWorkspacesMembersTable_WorkspaceCollaborator on WorkspaceCollaborator {\n id\n email\n ...SettingsWorkspacesMembersActionsMenu_User\n }\n": types.SettingsWorkspacesMembersTable_WorkspaceCollaboratorFragmentDoc,
|
|
"\n fragment SettingsWorkspacesMembersTableHeader_Workspace on Workspace {\n id\n slug\n role\n ...InviteDialogWorkspace_Workspace\n permissions {\n canInvite {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.SettingsWorkspacesMembersTableHeader_WorkspaceFragmentDoc,
|
|
"\n fragment SettingsWorkspacesMembersActionsMenu_User on WorkspaceCollaborator {\n id\n role\n seatType\n joinDate\n user {\n id\n name\n avatar\n workspaceDomainPolicyCompliant(workspaceSlug: $slug)\n }\n ...SettingsWorkspacesMembersActionsProjectPermissionsDialog_User\n }\n": types.SettingsWorkspacesMembersActionsMenu_UserFragmentDoc,
|
|
"\n fragment SettingsWorkspacesMembersActionsProjectPermissionsDialog_User on WorkspaceCollaborator {\n projectRoles {\n project {\n id\n name\n }\n role\n }\n }\n": types.SettingsWorkspacesMembersActionsProjectPermissionsDialog_UserFragmentDoc,
|
|
"\n query WorkspaceAvailableEditorSeats($slug: String!) {\n workspaceBySlug(slug: $slug) {\n id\n seats {\n editors {\n available\n }\n }\n }\n }\n": types.WorkspaceAvailableEditorSeatsDocument,
|
|
"\n fragment SettingsWorkspacesRegionsSelect_ServerRegionItem on ServerRegionItem {\n id\n key\n name\n description\n }\n": types.SettingsWorkspacesRegionsSelect_ServerRegionItemFragmentDoc,
|
|
"\n fragment SettingsWorkspacesSecurityDefaultSeat_Workspace on Workspace {\n id\n slug\n defaultSeatType\n discoverabilityAutoJoinEnabled\n role\n }\n": types.SettingsWorkspacesSecurityDefaultSeat_WorkspaceFragmentDoc,
|
|
"\n fragment SettingsWorkspacesSecurityDiscoverability_Workspace on Workspace {\n id\n slug\n role\n domains {\n id\n domain\n }\n discoverabilityEnabled\n discoverabilityAutoJoinEnabled\n defaultSeatType\n }\n": types.SettingsWorkspacesSecurityDiscoverability_WorkspaceFragmentDoc,
|
|
"\n fragment SettingsWorkspacesSecurityDomainManagement_Workspace on Workspace {\n id\n role\n discoverabilityEnabled\n domainBasedMembershipProtectionEnabled\n hasAccessToDomainBasedSecurityPolicies: hasAccessToFeature(\n featureName: domainBasedSecurityPolicies\n )\n hasAccessToSSO: hasAccessToFeature(featureName: oidcSso)\n domains {\n id\n domain\n }\n }\n": types.SettingsWorkspacesSecurityDomainManagement_WorkspaceFragmentDoc,
|
|
"\n fragment SettingsWorkspacesSecurityDomainProtection_Workspace on Workspace {\n id\n slug\n role\n domainBasedMembershipProtectionEnabled\n hasAccessToDomainBasedSecurityPolicies: hasAccessToFeature(\n featureName: domainBasedSecurityPolicies\n )\n domains {\n id\n }\n }\n": types.SettingsWorkspacesSecurityDomainProtection_WorkspaceFragmentDoc,
|
|
"\n fragment SettingsWorkspacesSecurityDomainRemoveDialog_WorkspaceDomain on WorkspaceDomain {\n id\n domain\n }\n": types.SettingsWorkspacesSecurityDomainRemoveDialog_WorkspaceDomainFragmentDoc,
|
|
"\n fragment SettingsWorkspacesSecurityDomainRemoveDialog_Workspace on Workspace {\n id\n domains {\n ...SettingsWorkspacesSecurityDomainRemoveDialog_WorkspaceDomain\n }\n }\n": types.SettingsWorkspacesSecurityDomainRemoveDialog_WorkspaceFragmentDoc,
|
|
"\n fragment SettingsWorkspacesSecurityWorkspaceCreation_Workspace on Workspace {\n id\n slug\n role\n isExclusive\n hasAccessToExclusiveMembership: hasAccessToFeature(featureName: exclusiveMembership)\n permissions {\n canMakeWorkspaceExclusive {\n authorized\n message\n }\n }\n }\n": types.SettingsWorkspacesSecurityWorkspaceCreation_WorkspaceFragmentDoc,
|
|
"\n fragment SettingsWorkspacesSecuritySsoWrapper_Workspace on Workspace {\n id\n role\n slug\n sso {\n provider {\n id\n name\n clientId\n issuerUrl\n }\n }\n hasAccessToSSO: hasAccessToFeature(featureName: oidcSso)\n }\n": types.SettingsWorkspacesSecuritySsoWrapper_WorkspaceFragmentDoc,
|
|
"\n fragment ViewerPageSetup_SavedView on SavedView {\n id\n name\n }\n": types.ViewerPageSetup_SavedViewFragmentDoc,
|
|
"\n fragment ModelPageProject on Project {\n id\n createdAt\n name\n visibility\n limitedWorkspace {\n id\n slug\n name\n }\n embedOptions {\n hideSpeckleBranding\n }\n hasAccessToFeature(featureName: hideSpeckleBranding)\n ...ViewerLimitsDialog_Project\n }\n": types.ModelPageProjectFragmentDoc,
|
|
"\n fragment ViewerCommentThreadData on Comment {\n id\n permissions {\n canArchive {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.ViewerCommentThreadDataFragmentDoc,
|
|
"\n fragment ThreadCommentAttachment on Comment {\n text {\n attachments {\n id\n fileName\n fileType\n fileSize\n }\n }\n }\n": types.ThreadCommentAttachmentFragmentDoc,
|
|
"\n fragment ViewerCommentsListItem on Comment {\n id\n rawText\n archived\n author {\n ...LimitedUserAvatar\n }\n createdAt\n viewedAt\n replies {\n totalCount\n cursor\n items {\n ...ViewerCommentsReplyItem\n }\n }\n replyAuthors(limit: 4) {\n totalCount\n items {\n ...FormUsersSelectItem\n }\n }\n resources {\n resourceId\n resourceType\n }\n }\n": types.ViewerCommentsListItemFragmentDoc,
|
|
"\n fragment ViewerLimitsDialog_Project on Project {\n id\n workspaceId\n ...ViewerLimitsWorkspaceDialog_Project\n ...WorkspaceMoveProject_Project\n }\n": types.ViewerLimitsDialog_ProjectFragmentDoc,
|
|
"\n fragment ViewerLimitsWorkspaceDialog_Project on Project {\n id\n workspace {\n id\n role\n slug\n ...WorkspacePlanLimits_Workspace\n }\n ...UseLoadLatestVersion_Project\n }\n": types.ViewerLimitsWorkspaceDialog_ProjectFragmentDoc,
|
|
"\n fragment ViewerModelVersionCardItem on Version {\n id\n message\n referencedObject\n sourceApplication\n createdAt\n previewUrl\n authorUser {\n ...LimitedUserAvatar\n }\n }\n": types.ViewerModelVersionCardItemFragmentDoc,
|
|
"\n fragment ViewerResourcesLimitAlert_Project on Project {\n id\n workspaceId\n workspace {\n id\n slug\n ...ViewerResourcesWorkspaceLimitAlert_Workspace\n }\n ...WorkspaceMoveProject_Project\n }\n": types.ViewerResourcesLimitAlert_ProjectFragmentDoc,
|
|
"\n fragment ViewerResourcesPersonalLimitAlert_Project on Project {\n id\n ...WorkspaceMoveProject_Project\n }\n": types.ViewerResourcesPersonalLimitAlert_ProjectFragmentDoc,
|
|
"\n fragment ViewerResourcesWorkspaceLimitAlert_Workspace on Workspace {\n id\n slug\n }\n": types.ViewerResourcesWorkspaceLimitAlert_WorkspaceFragmentDoc,
|
|
"\n fragment ViewerSavedViewsPanel_Project on Project {\n id\n permissions {\n canCreateSavedView {\n ...FullPermissionCheckResult\n }\n }\n workspace {\n id\n seatType\n planSupportsSavedViews: hasAccessToFeature(featureName: savedViews)\n }\n }\n": types.ViewerSavedViewsPanel_ProjectFragmentDoc,
|
|
"\n fragment ViewerSavedViewsPanelGroups_Project on Project {\n id\n savedViewGroups(input: $savedViewGroupsInput) {\n totalCount\n cursor\n items {\n id\n ...ViewerSavedViewsPanelViewsGroup_SavedViewGroup\n }\n }\n ...ViewerSavedViewsPanelViewsGroup_Project\n }\n": types.ViewerSavedViewsPanelGroups_ProjectFragmentDoc,
|
|
"\n query ViewerSavedViewsPanelGroups_SavedViewGroups(\n $projectId: String!\n $savedViewGroupsInput: SavedViewGroupsInput!\n ) {\n project(id: $projectId) {\n id\n ...ViewerSavedViewsPanelGroups_Project\n }\n }\n": types.ViewerSavedViewsPanelGroups_SavedViewGroupsDocument,
|
|
"\n fragment ViewerSavedViewsPanelView_SavedView on SavedView {\n id\n name\n description\n thumbnailUrl\n visibility\n isHomeView\n resourceIds\n author {\n id\n name\n }\n updatedAt\n permissions {\n canUpdate {\n ...FullPermissionCheckResult\n }\n }\n ...UseDeleteSavedView_SavedView\n ...UseUpdateSavedView_SavedView\n ...ViewerSavedViewsPanelViewEditDialog_SavedView\n ...UseSavedViewValidationHelpers_SavedView\n ...UseDraggableView_SavedView\n }\n": types.ViewerSavedViewsPanelView_SavedViewFragmentDoc,
|
|
"\n fragment ViewerSavedViewsPanelViewDeleteDialog_SavedView on SavedView {\n id\n name\n ...UseDeleteSavedView_SavedView\n }\n": types.ViewerSavedViewsPanelViewDeleteDialog_SavedViewFragmentDoc,
|
|
"\n fragment ViewerSavedViewsPanelViewEditDialog_SavedView on SavedView {\n id\n name\n description\n visibility\n group {\n ...FormSelectSavedViewGroup_SavedViewGroup\n }\n ...UseUpdateSavedView_SavedView\n ...UseSavedViewValidationHelpers_SavedView\n }\n": types.ViewerSavedViewsPanelViewEditDialog_SavedViewFragmentDoc,
|
|
"\n fragment ViewerSavedViewsPanelViewMoveDialog_SavedView on SavedView {\n id\n group {\n ...FormSelectSavedViewGroup_SavedViewGroup\n }\n ...UseUpdateSavedView_SavedView\n }\n": types.ViewerSavedViewsPanelViewMoveDialog_SavedViewFragmentDoc,
|
|
"\n fragment ViewerSavedViewsPanelViewsGroup_Project on Project {\n id\n permissions {\n canCreateSavedView {\n ...FullPermissionCheckResult\n }\n }\n workspace {\n id\n hasAccessToFeature(featureName: presentations)\n }\n }\n": types.ViewerSavedViewsPanelViewsGroup_ProjectFragmentDoc,
|
|
"\n fragment ViewerSavedViewsPanelViewsGroup_SavedViewGroup on SavedViewGroup {\n id\n isUngroupedViewsGroup\n resourceIds\n title\n permissions {\n canUpdate {\n ...FullPermissionCheckResult\n }\n }\n ...ViewerSavedViewsPanelViewsGroupInner_SavedViewGroup\n ...ViewerSavedViewsPanelViewsGroupDeleteDialog_SavedViewGroup\n ...UseUpdateSavedViewGroup_SavedViewGroup\n ...UseDraggableViewTargetGroup_SavedViewGroup\n }\n": types.ViewerSavedViewsPanelViewsGroup_SavedViewGroupFragmentDoc,
|
|
"\n fragment ViewerSavedViewsPanelViewsGroup_SavedViewGroup_Paginated on SavedViewGroup {\n id\n views(input: $savedViewsInput) {\n cursor\n totalCount\n items {\n id\n ...ViewerSavedViewsPanelView_SavedView\n }\n }\n }\n": types.ViewerSavedViewsPanelViewsGroup_SavedViewGroup_PaginatedFragmentDoc,
|
|
"\n fragment ViewerSavedViewsPanelViewsGroupDeleteDialog_SavedViewGroup on SavedViewGroup {\n id\n title\n ...UseDeleteSavedViewGroup_SavedViewGroup\n }\n": types.ViewerSavedViewsPanelViewsGroupDeleteDialog_SavedViewGroupFragmentDoc,
|
|
"\n fragment ViewerSavedViewsPanelViewsGroupInner_SavedViewGroup on SavedViewGroup {\n id\n title\n }\n": types.ViewerSavedViewsPanelViewsGroupInner_SavedViewGroupFragmentDoc,
|
|
"\n fragment ViewerSavedViewsPanelViewsGroupInner_SavedViewGroup_Paginated on SavedViewGroup {\n id\n views(input: $savedViewsInput) {\n cursor\n totalCount\n items {\n id\n ...ViewerSavedViewsPanelView_SavedView\n }\n }\n }\n": types.ViewerSavedViewsPanelViewsGroupInner_SavedViewGroup_PaginatedFragmentDoc,
|
|
"\n query ViewerSavedViewsPanelViewsGroupInner_Views(\n $projectId: String!\n $groupId: ID!\n $savedViewsInput: SavedViewGroupViewsInput!\n ) {\n project(id: $projectId) {\n id\n savedViewGroup(id: $groupId) {\n id\n ...ViewerSavedViewsPanelViewsGroupInner_SavedViewGroup_Paginated\n }\n }\n }\n": types.ViewerSavedViewsPanelViewsGroupInner_ViewsDocument,
|
|
"\n fragment WorkspaceAddProjectMenu_Workspace on Workspace {\n id\n name\n slug\n role\n plan {\n name\n }\n permissions {\n canCreateProject {\n ...FullPermissionCheckResult\n }\n canMoveProjectToWorkspace {\n ...FullPermissionCheckResult\n }\n }\n ...ProjectsAdd_Workspace\n ...WorkspaceMoveProject_Workspace\n ...UseCanCreateWorkspaceProject_Workspace\n ...UseCanMoveProjectIntoWorkspace_Workspace\n }\n": types.WorkspaceAddProjectMenu_WorkspaceFragmentDoc,
|
|
"\n fragment WorkspaceDashboard_Workspace on Workspace {\n ...WorkspaceSidebarMembers_Workspace\n ...WorkspaceDashboardHeader_Workspace\n ...WorkspaceDashboardProjectList_Workspace\n ...BillingActions_Workspace\n id\n name\n role\n creationState {\n completed\n state\n }\n }\n": types.WorkspaceDashboard_WorkspaceFragmentDoc,
|
|
"\n fragment WorkspaceDashboardHeader_Workspace on Workspace {\n ...WorkspaceSidebarMembers_Workspace\n ...WorkspaceAddProjectMenu_Workspace\n ...BillingAlert_Workspace\n id\n role\n }\n": types.WorkspaceDashboardHeader_WorkspaceFragmentDoc,
|
|
"\n fragment WorkspaceDashboardProjectList_ProjectCollection on ProjectCollection {\n totalCount\n items {\n ...ProjectDashboardItem\n }\n cursor\n }\n": types.WorkspaceDashboardProjectList_ProjectCollectionFragmentDoc,
|
|
"\n fragment WorkspaceDashboardProjectList_Workspace on Workspace {\n ...WorkspaceAddProjectMenu_Workspace\n id\n }\n": types.WorkspaceDashboardProjectList_WorkspaceFragmentDoc,
|
|
"\n fragment WorkspaceInviteBanner_PendingWorkspaceCollaborator on PendingWorkspaceCollaborator {\n id\n invitedBy {\n id\n ...LimitedUserAvatar\n }\n workspace {\n id\n name\n logo\n }\n token\n user {\n id\n }\n ...UseWorkspaceInviteManager_PendingWorkspaceCollaborator\n }\n": types.WorkspaceInviteBanner_PendingWorkspaceCollaboratorFragmentDoc,
|
|
"\n fragment WorkspaceInviteBlock_PendingWorkspaceCollaborator on PendingWorkspaceCollaborator {\n id\n workspace {\n id\n name\n logo\n }\n token\n user {\n id\n name\n ...LimitedUserAvatar\n }\n title\n email\n ...UseWorkspaceInviteManager_PendingWorkspaceCollaborator\n }\n": types.WorkspaceInviteBlock_PendingWorkspaceCollaboratorFragmentDoc,
|
|
"\n fragment WorkspaceInviteCard_LimitedWorkspace on LimitedWorkspace {\n id\n name\n slug\n description\n logo\n adminTeam {\n user {\n id\n name\n avatar\n }\n }\n team {\n totalCount\n items {\n user {\n id\n name\n avatar\n }\n }\n }\n }\n": types.WorkspaceInviteCard_LimitedWorkspaceFragmentDoc,
|
|
"\n fragment WorkspaceInviteCard_PendingWorkspaceCollaborator on PendingWorkspaceCollaborator {\n id\n workspace {\n ...WorkspaceInviteCard_LimitedWorkspace\n }\n invitedBy {\n id\n name\n }\n }\n": types.WorkspaceInviteCard_PendingWorkspaceCollaboratorFragmentDoc,
|
|
"\n fragment WorkspaceJoinRequestApproveDialog_WorkspaceJoinRequest on WorkspaceJoinRequest {\n id\n user {\n id\n name\n }\n workspace {\n id\n }\n }\n": types.WorkspaceJoinRequestApproveDialog_WorkspaceJoinRequestFragmentDoc,
|
|
"\n fragment WorkspaceMoveProjectManager_ProjectBase on Project {\n id\n name\n modelCount: models(limit: 0) {\n totalCount\n }\n versions(limit: 0) {\n totalCount\n }\n }\n": types.WorkspaceMoveProjectManager_ProjectBaseFragmentDoc,
|
|
"\n fragment WorkspaceMoveProjectManager_Project on Project {\n ...WorkspaceMoveProjectManager_ProjectBase\n permissions {\n canMoveToWorkspace(workspaceId: $workspaceId) {\n ...FullPermissionCheckResult\n }\n }\n workspace {\n id\n slug\n permissions {\n canMoveProjectToWorkspace(projectId: $projectId) {\n ...FullPermissionCheckResult\n }\n }\n }\n }\n": types.WorkspaceMoveProjectManager_ProjectFragmentDoc,
|
|
"\n fragment WorkspaceMoveProjectManager_Workspace on Workspace {\n id\n role\n name\n logo\n slug\n plan {\n name\n usage {\n projectCount\n modelCount\n }\n }\n permissions {\n canMoveProjectToWorkspace(projectId: $projectId) {\n ...FullPermissionCheckResult\n }\n }\n projects {\n totalCount\n }\n team {\n items {\n user {\n id\n name\n avatar\n }\n }\n }\n ...WorkspaceMoveProjectSelectWorkspace_Workspace\n }\n": types.WorkspaceMoveProjectManager_WorkspaceFragmentDoc,
|
|
"\n fragment WorkspaceMoveProjectSelectWorkspace_Workspace on Workspace {\n id\n name\n role\n slug\n plan {\n name\n }\n permissions {\n canMoveProjectToWorkspace(projectId: $projectId) {\n ...FullPermissionCheckResult\n }\n canCreateProject {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.WorkspaceMoveProjectSelectWorkspace_WorkspaceFragmentDoc,
|
|
"\n fragment WorkspaceMoveProjectSelectWorkspace_User on User {\n workspaces {\n items {\n ...WorkspaceMoveProjectManager_Workspace\n }\n }\n projects(cursor: $cursor, filter: $filter, sortBy: $sortBy) {\n items {\n ...WorkspaceMoveProjectManager_Project\n }\n cursor\n totalCount\n }\n }\n": types.WorkspaceMoveProjectSelectWorkspace_UserFragmentDoc,
|
|
"\n fragment WorkspaceMoveProject_Workspace on Workspace {\n id\n slug\n name\n role\n plan {\n name\n }\n permissions {\n canCreateProject {\n ...FullPermissionCheckResult\n }\n canMoveProjectToWorkspace {\n ...FullPermissionCheckResult\n }\n }\n ...UseCanMoveProjectIntoWorkspace_Workspace\n }\n": types.WorkspaceMoveProject_WorkspaceFragmentDoc,
|
|
"\n fragment WorkspaceMoveProject_Project on Project {\n id\n workspaceId\n permissions {\n canMoveToWorkspace {\n ...FullPermissionCheckResult\n }\n }\n ...UseCanMoveProjectIntoWorkspace_Project\n }\n": types.WorkspaceMoveProject_ProjectFragmentDoc,
|
|
"\n fragment WorkspaceSidebarAbout_Workspace on Workspace {\n id\n name\n description\n }\n": types.WorkspaceSidebarAbout_WorkspaceFragmentDoc,
|
|
"\n fragment WorkspaceSidebarMembers_Workspace on Workspace {\n id\n slug\n name\n domainBasedMembershipProtectionEnabled\n defaultSeatType\n sidebarTeam: team(limit: 6) {\n totalCount\n items {\n id\n user {\n id\n name\n avatar\n }\n }\n }\n invitedTeam(filter: $invitesFilter) {\n id\n role\n }\n adminWorkspacesJoinRequests {\n totalCount\n items {\n status\n id\n }\n }\n }\n": types.WorkspaceSidebarMembers_WorkspaceFragmentDoc,
|
|
"\n fragment WorkspaceSidebarSecurity_Workspace on Workspace {\n id\n slug\n domains {\n id\n domain\n }\n }\n": types.WorkspaceSidebarSecurity_WorkspaceFragmentDoc,
|
|
"\n fragment WorkspaceSidebar_Workspace on Workspace {\n ...WorkspaceSidebarMembers_Workspace\n ...WorkspaceSidebarAbout_Workspace\n ...WorkspaceSidebarSecurity_Workspace\n id\n role\n slug\n domains {\n id\n }\n plan {\n name\n }\n }\n": types.WorkspaceSidebar_WorkspaceFragmentDoc,
|
|
"\n fragment WorkspaceWizard_Workspace on Workspace {\n creationState {\n completed\n state\n }\n name\n slug\n }\n": types.WorkspaceWizard_WorkspaceFragmentDoc,
|
|
"\n fragment WorkspaceWizardStepRegion_ServerInfo on ServerInfo {\n multiRegion {\n regions {\n id\n ...SettingsWorkspacesRegionsSelect_ServerRegionItem\n }\n }\n }\n": types.WorkspaceWizardStepRegion_ServerInfoFragmentDoc,
|
|
"\n fragment AccFolderContents on AccFolder {\n id\n name\n contents {\n items {\n id\n name\n latestVersion {\n id\n name\n versionNumber\n fileType\n }\n }\n }\n children {\n items {\n id\n name\n }\n }\n }\n ": types.AccFolderContentsFragmentDoc,
|
|
"\n fragment ProjectAccSyncItem on AccSyncItem {\n id\n project {\n id\n name\n }\n model {\n id\n name\n }\n accRegion\n accHubId\n accProjectId\n accRootProjectFolderUrn\n accFileLineageUrn\n accFileName\n accFileExtension\n accFileVersionIndex\n accFileViewName\n updatedAt\n status\n author {\n name\n avatar\n }\n }\n": types.ProjectAccSyncItemFragmentDoc,
|
|
"\n mutation CreateAccSyncItem($input: CreateAccSyncItemInput!) {\n accSyncItemMutations {\n create(input: $input) {\n id\n model {\n id\n name\n }\n author {\n id\n name\n }\n accFileName\n accFileLineageUrn\n accFileViewName\n status\n }\n }\n }\n": types.CreateAccSyncItemDocument,
|
|
"\n mutation DeleteAccSyncItem($input: DeleteAccSyncItemInput!) {\n accSyncItemMutations {\n delete(input: $input)\n }\n }\n": types.DeleteAccSyncItemDocument,
|
|
"\n mutation UpdateAccSyncItem($input: UpdateAccSyncItemInput!) {\n accSyncItemMutations {\n update(input: $input) {\n id\n status\n }\n }\n }\n": types.UpdateAccSyncItemDocument,
|
|
"\n query ProjectAccSyncItems($id: String!) {\n project(id: $id) {\n accSyncItems {\n items {\n ...ProjectAccSyncItem\n }\n }\n }\n }\n": types.ProjectAccSyncItemsDocument,
|
|
"\n query AccFolderData(\n $workspaceSlug: String!\n $accToken: String!\n $accProjectId: String!\n $accFolderId: String!\n ) {\n workspaceBySlug(slug: $workspaceSlug) {\n id\n integrations {\n acc(token: $accToken) {\n folder(projectId: $accProjectId, folderId: $accFolderId) {\n id\n ...AccIntegrationFolderNode_AccFolder\n }\n }\n }\n }\n }\n": types.AccFolderDataDocument,
|
|
"\n subscription OnProjectAccSyncItemUpdated($id: String!, $itemIds: [String!]) {\n projectAccSyncItemsUpdated(id: $id, itemIds: $itemIds) {\n type\n accSyncItem {\n ...ProjectAccSyncItem\n }\n }\n }\n": types.OnProjectAccSyncItemUpdatedDocument,
|
|
"\n query ActiveUserMainMetadata {\n activeUser {\n id\n email\n emails {\n id\n email\n verified\n primary\n }\n company\n bio\n name\n role\n avatar\n isOnboardingFinished\n createdAt\n verified\n notificationPreferences\n versions(limit: 0) {\n totalCount\n }\n ...ProjectsAdd_User\n }\n }\n": types.ActiveUserMainMetadataDocument,
|
|
"\n query ActiveUserProjectsToMove($filter: UserProjectsFilter) {\n activeUser {\n id\n projects(filter: $filter) {\n totalCount\n }\n }\n }\n": types.ActiveUserProjectsToMoveDocument,
|
|
"\n fragment FullPermissionCheckResult on PermissionCheckResult {\n authorized\n code\n message\n payload\n errorMessage\n }\n": types.FullPermissionCheckResultFragmentDoc,
|
|
"\n mutation FinishOnboarding($input: OnboardingCompletionInput) {\n activeUserMutations {\n finishOnboarding(input: $input)\n }\n }\n": types.FinishOnboardingDocument,
|
|
"\n mutation RequestVerificationByEmail($email: String!) {\n requestVerificationByEmail(email: $email)\n }\n": types.RequestVerificationByEmailDocument,
|
|
"\n query AuthLoginPanel {\n serverInfo {\n authStrategies {\n id\n }\n ...AuthStategiesServerInfoFragment\n }\n }\n": types.AuthLoginPanelDocument,
|
|
"\n query AuthRegisterPanel($token: String) {\n serverInfo {\n inviteOnly\n authStrategies {\n id\n }\n ...AuthStategiesServerInfoFragment\n ...ServerTermsOfServicePrivacyPolicyFragment\n }\n serverInviteByToken(token: $token) {\n id\n email\n }\n }\n": types.AuthRegisterPanelDocument,
|
|
"\n query AuthLoginPanelWorkspaceInvite($token: String) {\n workspaceInvite(token: $token) {\n id\n email\n ...AuthWorkspaceInviteHeader_PendingWorkspaceCollaborator\n ...AuthLoginWithEmailBlock_PendingWorkspaceCollaborator\n }\n }\n": types.AuthLoginPanelWorkspaceInviteDocument,
|
|
"\n query AuthorizableAppMetadata($id: String!) {\n app(id: $id) {\n id\n name\n description\n trustByDefault\n redirectUrl\n scopes {\n name\n description\n }\n author {\n name\n id\n avatar\n }\n }\n }\n": types.AuthorizableAppMetadataDocument,
|
|
"\n query ActiveUserWorkspaceExistenceCheck($filter: UserProjectsFilter) {\n activeUser {\n id\n verified\n isOnboardingFinished\n versions(limit: 0) {\n totalCount\n }\n projects(filter: $filter) {\n totalCount\n }\n workspaces(limit: 0) {\n totalCount\n items {\n id\n slug\n creationState {\n completed\n }\n }\n }\n discoverableWorkspaces {\n id\n }\n workspaceJoinRequests(limit: 0) {\n totalCount\n }\n }\n }\n": types.ActiveUserWorkspaceExistenceCheckDocument,
|
|
"\n query ActiveUserActiveWorkspaceCheck {\n activeUser {\n id\n activeWorkspace {\n id\n role\n slug\n }\n workspaces(limit: 1) {\n items {\n id\n slug\n }\n }\n }\n }\n": types.ActiveUserActiveWorkspaceCheckDocument,
|
|
"\n query projectWorkspaceAccessCheck($projectId: String!) {\n project(id: $projectId) {\n id\n role\n workspace {\n id\n slug\n role\n }\n }\n }\n": types.ProjectWorkspaceAccessCheckDocument,
|
|
"\n fragment FunctionRunStatusForSummary on AutomateFunctionRun {\n id\n status\n }\n": types.FunctionRunStatusForSummaryFragmentDoc,
|
|
"\n fragment TriggeredAutomationsStatusSummary on TriggeredAutomationsStatus {\n id\n automationRuns {\n id\n functionRuns {\n id\n ...FunctionRunStatusForSummary\n }\n }\n }\n": types.TriggeredAutomationsStatusSummaryFragmentDoc,
|
|
"\n fragment AutomationRunDetails on AutomateRun {\n id\n status\n functionRuns {\n ...FunctionRunStatusForSummary\n statusMessage\n }\n trigger {\n ... on VersionCreatedTrigger {\n version {\n id\n }\n model {\n id\n }\n }\n }\n createdAt\n updatedAt\n }\n": types.AutomationRunDetailsFragmentDoc,
|
|
"\n fragment AutomationsStatusOrderedRuns_AutomationRun on AutomateRun {\n id\n automation {\n id\n name\n }\n functionRuns {\n id\n updatedAt\n }\n }\n": types.AutomationsStatusOrderedRuns_AutomationRunFragmentDoc,
|
|
"\n fragment SearchAutomateFunctionReleaseItem on AutomateFunctionRelease {\n id\n versionTag\n createdAt\n inputSchema\n }\n": types.SearchAutomateFunctionReleaseItemFragmentDoc,
|
|
"\n mutation CreateAutomateFunction($input: CreateAutomateFunctionInput!) {\n automateMutations {\n createFunction(input: $input) {\n id\n ...AutomationsFunctionsCard_AutomateFunction\n ...AutomateFunctionCreateDialogDoneStep_AutomateFunction\n }\n }\n }\n": types.CreateAutomateFunctionDocument,
|
|
"\n mutation UpdateAutomateFunction($input: UpdateAutomateFunctionInput!) {\n automateMutations {\n updateFunction(input: $input) {\n id\n ...AutomateFunctionPage_AutomateFunction\n }\n }\n }\n": types.UpdateAutomateFunctionDocument,
|
|
"\n mutation RegenerateFunctionToken($functionId: String!) {\n automateMutations {\n regenerateFunctionToken(functionId: $functionId)\n }\n }\n": types.RegenerateFunctionTokenDocument,
|
|
"\n query SearchAutomateFunctionReleases(\n $functionId: ID!\n $cursor: String\n $limit: Int\n $filter: AutomateFunctionReleasesFilter\n ) {\n automateFunction(id: $functionId) {\n id\n releases(cursor: $cursor, limit: $limit, filter: $filter) {\n cursor\n totalCount\n items {\n ...SearchAutomateFunctionReleaseItem\n }\n }\n }\n }\n": types.SearchAutomateFunctionReleasesDocument,
|
|
"\n query FunctionAccessCheck($id: ID!) {\n automateFunction(id: $id) {\n id\n }\n }\n": types.FunctionAccessCheckDocument,
|
|
"\n query ProjectAutomationCreationPublicKeys(\n $projectId: String!\n $automationId: String!\n ) {\n project(id: $projectId) {\n id\n automation(id: $automationId) {\n id\n creationPublicKeys\n }\n }\n }\n": types.ProjectAutomationCreationPublicKeysDocument,
|
|
"\n fragment BillingActions_Workspace on Workspace {\n id\n name\n invitedTeam(filter: $invitesFilter) {\n id\n }\n plan {\n name\n status\n }\n subscription {\n billingInterval\n }\n team {\n totalCount\n }\n defaultRegion {\n name\n }\n }\n": types.BillingActions_WorkspaceFragmentDoc,
|
|
"\n fragment PricesPrice on Price {\n amount\n currencySymbol\n currency\n }\n": types.PricesPriceFragmentDoc,
|
|
"\n fragment PricesWorkspacePlanPrice on WorkspacePlanPrice {\n monthly {\n ...PricesPrice\n }\n yearly {\n ...PricesPrice\n }\n }\n": types.PricesWorkspacePlanPriceFragmentDoc,
|
|
"\n fragment PricesWorkspacePaidPlanPrices on WorkspacePaidPlanPrices {\n team {\n ...PricesWorkspacePlanPrice\n }\n teamUnlimited {\n ...PricesWorkspacePlanPrice\n }\n pro {\n ...PricesWorkspacePlanPrice\n }\n proUnlimited {\n ...PricesWorkspacePlanPrice\n }\n }\n": types.PricesWorkspacePaidPlanPricesFragmentDoc,
|
|
"\n fragment PricesCurrencyBasedPrices on CurrencyBasedPrices {\n gbp {\n ...PricesWorkspacePaidPlanPrices\n }\n usd {\n ...PricesWorkspacePaidPlanPrices\n }\n }\n": types.PricesCurrencyBasedPricesFragmentDoc,
|
|
"\n query UseWorkspacePlanPrices {\n serverInfo {\n workspaces {\n planPrices {\n ...PricesCurrencyBasedPrices\n }\n }\n }\n }\n": types.UseWorkspacePlanPricesDocument,
|
|
"\n query UseActiveWorkspacePlanPrices($slug: String!) {\n workspaceBySlug(slug: $slug) {\n id\n planPrices {\n ...PricesWorkspacePaidPlanPrices\n }\n }\n }\n": types.UseActiveWorkspacePlanPricesDocument,
|
|
"\n mutation BillingCreateCheckoutSession($input: CheckoutSessionInput!) {\n workspaceMutations {\n billing {\n createCheckoutSession(input: $input) {\n url\n id\n }\n }\n }\n }\n": types.BillingCreateCheckoutSessionDocument,
|
|
"\n mutation BillingUpgradePlan($input: UpgradePlanInput!) {\n workspaceMutations {\n billing {\n upgradePlan(input: $input)\n }\n }\n }\n": types.BillingUpgradePlanDocument,
|
|
"\n query MentionsUserSearch($query: String!, $projectId: String) {\n users(input: { query: $query, limit: 5, cursor: null, projectId: $projectId }) {\n items {\n id\n name\n company\n }\n }\n }\n": types.MentionsUserSearchDocument,
|
|
"\n query ServerInfoBlobSizeLimit {\n serverInfo {\n configuration {\n blobSizeLimitBytes\n }\n }\n }\n": types.ServerInfoBlobSizeLimitDocument,
|
|
"\n query ServerInfoAllScopes {\n serverInfo {\n scopes {\n name\n description\n }\n }\n }\n": types.ServerInfoAllScopesDocument,
|
|
"\n query ServerInfoEmailVerificationTimeout {\n serverInfo {\n configuration {\n emailVerificationTimeoutMinutes\n }\n }\n }\n": types.ServerInfoEmailVerificationTimeoutDocument,
|
|
"\n query ProjectModelsSelectorValues($projectId: String!, $cursor: String) {\n project(id: $projectId) {\n id\n models(limit: 100, cursor: $cursor) {\n cursor\n totalCount\n items {\n ...CommonModelSelectorModel\n }\n }\n }\n }\n": types.ProjectModelsSelectorValuesDocument,
|
|
"\n fragment UseFailedFileImportJobUtils_FileUpload on FileUpload {\n id\n fileName\n projectId\n modelId\n updatedAt\n convertedStatus\n convertedMessage\n }\n": types.UseFailedFileImportJobUtils_FileUploadFragmentDoc,
|
|
"\n mutation GenerateUploadUrl($input: GenerateFileUploadUrlInput!) {\n fileUploadMutations {\n generateUploadUrl(input: $input) {\n url\n fileId\n }\n }\n }\n": types.GenerateUploadUrlDocument,
|
|
"\n mutation StartFileImport($input: StartFileImportInput!) {\n fileUploadMutations {\n startFileImport(input: $input) {\n id\n }\n }\n }\n": types.StartFileImportDocument,
|
|
"\n fragment UseFileImport_Project on Project {\n id\n }\n": types.UseFileImport_ProjectFragmentDoc,
|
|
"\n fragment UseFileImport_Model on Model {\n id\n name\n }\n": types.UseFileImport_ModelFragmentDoc,
|
|
"\n query MainServerInfoData {\n serverInfo {\n adminContact\n canonicalUrl\n company\n description\n guestModeEnabled\n inviteOnly\n name\n termsOfService\n version\n automateUrl\n configuration {\n isEmailEnabled\n }\n }\n }\n": types.MainServerInfoDataDocument,
|
|
"\n mutation CreateDashboard(\n $workspace: WorkspaceIdentifier!\n $input: DashboardCreateInput!\n ) {\n dashboardMutations {\n create(workspace: $workspace, input: $input) {\n id\n workspace {\n id\n }\n }\n }\n }\n": types.CreateDashboardDocument,
|
|
"\n mutation UpdateDashboard($input: DashboardUpdateInput!) {\n dashboardMutations {\n update(input: $input) {\n id\n name\n }\n }\n }\n": types.UpdateDashboardDocument,
|
|
"\n mutation DeleteDashboard($id: String!) {\n dashboardMutations {\n delete(id: $id)\n }\n }\n": types.DeleteDashboardDocument,
|
|
"\n query DashboardAccessCheck($id: String!) {\n dashboard(id: $id) {\n id\n }\n }\n": types.DashboardAccessCheckDocument,
|
|
"\n query Dashboard($id: String!) {\n dashboard(id: $id) {\n id\n ...WorkspaceDashboards_Dashboard\n }\n }\n": types.DashboardDocument,
|
|
"\n query WorkspaceDashboards(\n $workspaceSlug: String!\n $cursor: String\n $filter: WorkspaceDashboardsFilter\n ) {\n workspaceBySlug(slug: $workspaceSlug) {\n id\n dashboards(cursor: $cursor, filter: $filter) {\n cursor\n items {\n id\n ...DashboardsCard_Dashboard\n }\n }\n }\n }\n": types.WorkspaceDashboardsDocument,
|
|
"\n query ProjectDashboards(\n $projectId: String!\n $cursor: String\n $filter: ProjectDashboardsFilter\n ) {\n project(id: $projectId) {\n id\n workspace {\n slug\n }\n dashboards(cursor: $cursor, filter: $filter) {\n cursor\n items {\n id\n ...DashboardsCard_Dashboard\n }\n }\n }\n }\n": types.ProjectDashboardsDocument,
|
|
"\n mutation DeleteAccessToken($token: String!) {\n apiTokenRevoke(token: $token)\n }\n": types.DeleteAccessTokenDocument,
|
|
"\n mutation CreateAccessToken($token: ApiTokenCreateInput!) {\n apiTokenCreate(token: $token)\n }\n": types.CreateAccessTokenDocument,
|
|
"\n mutation DeleteApplication($appId: String!) {\n appDelete(appId: $appId)\n }\n": types.DeleteApplicationDocument,
|
|
"\n mutation CreateApplication($app: AppCreateInput!) {\n appCreate(app: $app)\n }\n": types.CreateApplicationDocument,
|
|
"\n mutation EditApplication($app: AppUpdateInput!) {\n appUpdate(app: $app)\n }\n": types.EditApplicationDocument,
|
|
"\n mutation RevokeAppAccess($appId: String!) {\n appRevokeAccess(appId: $appId)\n }\n": types.RevokeAppAccessDocument,
|
|
"\n query DeveloperSettingsAccessTokens {\n activeUser {\n id\n apiTokens {\n id\n name\n lastUsed\n lastChars\n createdAt\n scopes\n }\n }\n }\n": types.DeveloperSettingsAccessTokensDocument,
|
|
"\n query DeveloperSettingsApplications {\n activeUser {\n createdApps {\n id\n secret\n name\n description\n redirectUrl\n scopes {\n name\n description\n }\n }\n id\n }\n }\n": types.DeveloperSettingsApplicationsDocument,
|
|
"\n query DeveloperSettingsAuthorizedApps {\n activeUser {\n id\n authorizedApps {\n id\n description\n name\n author {\n id\n name\n avatar\n }\n }\n }\n }\n": types.DeveloperSettingsAuthorizedAppsDocument,
|
|
"\n query SearchProjects(\n $search: String\n $onlyWithRoles: [String!] = null\n $workspaceId: ID\n ) {\n activeUser {\n projects(\n limit: 10\n filter: {\n search: $search\n onlyWithRoles: $onlyWithRoles\n workspaceId: $workspaceId\n }\n ) {\n totalCount\n items {\n ...FormSelectProjects_Project\n }\n }\n }\n }\n": types.SearchProjectsDocument,
|
|
"\n query SearchProjectModels($search: String, $projectId: String!) {\n project(id: $projectId) {\n id\n models(limit: 10, filter: { search: $search }) {\n totalCount\n items {\n ...FormSelectModels_Model\n }\n }\n }\n }\n": types.SearchProjectModelsDocument,
|
|
"\n query IntercomActiveWorkspace($slug: String!) {\n workspaceBySlug(slug: $slug) {\n id\n plan {\n name\n status\n }\n seats {\n editors {\n assigned\n available\n }\n }\n }\n }\n": types.IntercomActiveWorkspaceDocument,
|
|
"\n query InviteUserSearch($input: UsersRetrievalInput!) {\n users(input: $input) {\n items {\n id\n name\n avatar\n }\n }\n }\n": types.InviteUserSearchDocument,
|
|
"\n fragment InviteProjectItem_WorkspaceCollaborator on WorkspaceCollaborator {\n id\n user {\n id\n name\n }\n seatType\n role\n }\n": types.InviteProjectItem_WorkspaceCollaboratorFragmentDoc,
|
|
"\n mutation CreateNewRegion($input: CreateServerRegionInput!) {\n serverInfoMutations {\n multiRegion {\n create(input: $input) {\n id\n ...SettingsServerRegionsAddEditDialog_ServerRegionItem\n ...SettingsServerRegionsTable_ServerRegionItem\n }\n }\n }\n }\n": types.CreateNewRegionDocument,
|
|
"\n mutation UpdateRegion($input: UpdateServerRegionInput!) {\n serverInfoMutations {\n multiRegion {\n update(input: $input) {\n id\n ...SettingsServerRegionsAddEditDialog_ServerRegionItem\n ...SettingsServerRegionsTable_ServerRegionItem\n }\n }\n }\n }\n": types.UpdateRegionDocument,
|
|
"\n query NavigationWorkspaceSwitcher($joinRequestFilter: WorkspaceJoinRequestFilter) {\n activeUser {\n id\n ...WorkspaceSwitcherActiveWorkspace_User\n }\n }\n": types.NavigationWorkspaceSwitcherDocument,
|
|
"\n query WorkspaceSwitcherHeaderWorkspace($slug: String!) {\n workspaceBySlug(slug: $slug) {\n ...HeaderWorkspaceSwitcherHeaderWorkspace_Workspace\n }\n }\n": types.WorkspaceSwitcherHeaderWorkspaceDocument,
|
|
"\n query NavigationWorkspaceList(\n $workspaceFilter: UserWorkspacesFilter\n $projectFilter: UserProjectsFilter\n ) {\n activeUser {\n id\n workspaces(filter: $workspaceFilter) {\n items {\n id\n ...HeaderWorkspaceSwitcherWorkspaceListItem_Workspace\n }\n }\n projects(filter: $projectFilter) {\n totalCount\n }\n }\n }\n": types.NavigationWorkspaceListDocument,
|
|
"\n query NavigationProjectInvites {\n activeUser {\n id\n projectInvites {\n ...HeaderNavNotificationsProjectInvite_PendingStreamCollaborator\n }\n }\n }\n": types.NavigationProjectInvitesDocument,
|
|
"\n query NavigationWorkspaceInvites {\n activeUser {\n id\n workspaceInvites {\n ...HeaderNavNotificationsWorkspaceInvite_PendingWorkspaceCollaborator\n }\n }\n }\n": types.NavigationWorkspaceInvitesDocument,
|
|
"\n mutation UpdatePresentationSlide($input: UpdateSavedViewInput!) {\n projectMutations {\n savedViewMutations {\n updateView(input: $input) {\n id\n name\n description\n }\n }\n }\n }\n": types.UpdatePresentationSlideDocument,
|
|
"\n query PresentationAccessCheck($savedViewGroupId: ID!, $projectId: String!) {\n project(id: $projectId) {\n id\n savedViewGroup(id: $savedViewGroupId) {\n id\n }\n }\n }\n": types.PresentationAccessCheckDocument,
|
|
"\n query ProjectPresentationPage(\n $input: SavedViewGroupViewsInput!\n $savedViewGroupId: ID!\n $projectId: String!\n ) {\n project(id: $projectId) {\n id\n limitedWorkspace {\n id\n ...PresentationLeftSidebar_LimitedWorkspace\n ...PresentationLoading_LimitedWorkspace\n }\n savedViewGroup(id: $savedViewGroupId) {\n id\n title\n ...PresentationViewerPageWrapper_SavedViewGroup\n ...PresentationHeader_SavedViewGroup\n ...PresentationSlideList_SavedViewGroup\n ...PresentationPageWrapper_SavedViewGroup\n ...PresentationLoading_SavedViewGroup\n views(input: $input) {\n totalCount\n items {\n id\n name\n description\n thumbnailUrl\n projectId\n visibility\n ...PresentationInfoSidebar_SavedView\n group {\n id\n }\n }\n }\n }\n }\n }\n": types.ProjectPresentationPageDocument,
|
|
"\n fragment UseCopyModelLink_Model on Model {\n id\n projectId\n ...GetModelItemRoute_Model\n }\n": types.UseCopyModelLink_ModelFragmentDoc,
|
|
"\n fragment UseCanCreatePersonalProject_User on User {\n permissions {\n canCreatePersonalProject {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.UseCanCreatePersonalProject_UserFragmentDoc,
|
|
"\n fragment UseCanCreateWorkspace_User on User {\n permissions {\n canCreateWorkspace {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.UseCanCreateWorkspace_UserFragmentDoc,
|
|
"\n fragment UseCanCreateModel_Project on Project {\n id\n permissions {\n canCreateModel {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.UseCanCreateModel_ProjectFragmentDoc,
|
|
"\n fragment UseCanInviteToProject_Project on Project {\n id\n permissions {\n canInvite {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.UseCanInviteToProject_ProjectFragmentDoc,
|
|
"\n fragment ProjectPageTeamInternals_Project on Project {\n id\n role\n invitedTeam {\n id\n title\n role\n inviteId\n user {\n role\n ...LimitedUserAvatar\n }\n }\n team {\n role\n seatType\n workspaceRole\n user {\n id\n role\n ...LimitedUserAvatar\n }\n }\n }\n": types.ProjectPageTeamInternals_ProjectFragmentDoc,
|
|
"\n fragment ProjectPageTeamDialog on Project {\n id\n name\n role\n allowPublicComments\n visibility\n team {\n id\n role\n user {\n ...LimitedUserAvatar\n role\n }\n }\n invitedTeam {\n id\n title\n inviteId\n role\n user {\n ...LimitedUserAvatar\n role\n }\n }\n ...ProjectsPageTeamDialogManagePermissions_Project\n }\n": types.ProjectPageTeamDialogFragmentDoc,
|
|
"\n fragment ProjectDashboardItemNoModels on Project {\n id\n name\n createdAt\n updatedAt\n role\n team {\n id\n user {\n id\n name\n avatar\n }\n }\n ...ProjectPageModelsCardProject\n }\n": types.ProjectDashboardItemNoModelsFragmentDoc,
|
|
"\n fragment ProjectDashboardItem on Project {\n id\n ...ProjectDashboardItemNoModels\n ...ProjectCardImportFileArea_Project\n models(limit: 3) {\n totalCount\n items {\n ...ProjectPageLatestItemsModelItem\n }\n }\n workspace {\n id\n slug\n name\n logo\n readOnly\n }\n pendingImportedModels(limit: 3) {\n ...PendingFileUpload\n }\n }\n": types.ProjectDashboardItemFragmentDoc,
|
|
"\n fragment PendingFileUpload on FileUpload {\n id\n projectId\n modelName\n convertedStatus\n convertedMessage\n uploadDate\n convertedLastUpdate\n fileType\n fileName\n userId\n updatedAt\n }\n": types.PendingFileUploadFragmentDoc,
|
|
"\n fragment ProjectPageLatestItemsModelItem on Model {\n id\n name\n displayName\n projectId\n versionCount: versions(limit: 0) {\n totalCount\n }\n commentThreadCount: commentThreads(limit: 0) {\n totalCount\n }\n pendingImportedVersions(limit: 1) {\n ...PendingFileUpload\n }\n previewUrl\n createdAt\n updatedAt\n ...ProjectPageModelsCard_Model\n ...ProjectPageModelsCardRenameDialog\n ...ProjectPageModelsCardDeleteDialog\n ...ProjectPageModelsActions\n ...ProjectCardImportFileArea_Model\n automationsStatus {\n ...AutomateRunsTriggerStatus_TriggeredAutomationsStatus\n }\n permissions {\n canUpdate {\n ...FullPermissionCheckResult\n }\n canDelete {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.ProjectPageLatestItemsModelItemFragmentDoc,
|
|
"\n fragment ProjectUpdatableMetadata on Project {\n id\n name\n description\n visibility\n allowPublicComments\n permissions {\n canRead {\n ...FullPermissionCheckResult\n }\n canUpdate {\n ...FullPermissionCheckResult\n }\n canUpdateAllowPublicComments {\n ...FullPermissionCheckResult\n }\n canReadSettings {\n ...FullPermissionCheckResult\n }\n canReadWebhooks {\n ...FullPermissionCheckResult\n }\n canLeave {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.ProjectUpdatableMetadataFragmentDoc,
|
|
"\n fragment ProjectPageLatestItemsModels on Project {\n id\n role\n visibility\n workspace {\n id\n readOnly\n }\n modelCount: models(limit: 0) {\n totalCount\n }\n ...ProjectPageModelsStructureItem_Project\n ...ProjectCardImportFileArea_Project\n ...ProjectModelsAdd_Project\n }\n": types.ProjectPageLatestItemsModelsFragmentDoc,
|
|
"\n fragment ProjectPageLatestItemsComments on Project {\n id\n commentThreadCount: commentThreads(limit: 0) {\n totalCount\n }\n }\n": types.ProjectPageLatestItemsCommentsFragmentDoc,
|
|
"\n fragment ProjectPageLatestItemsCommentItem on Comment {\n id\n author {\n ...FormUsersSelectItem\n }\n screenshot\n rawText\n createdAt\n updatedAt\n archived\n repliesCount: replies(limit: 0) {\n totalCount\n }\n replyAuthors(limit: 4) {\n totalCount\n items {\n ...FormUsersSelectItem\n }\n }\n }\n": types.ProjectPageLatestItemsCommentItemFragmentDoc,
|
|
"\n mutation CreateModel($input: CreateModelInput!) {\n modelMutations {\n create(input: $input) {\n ...ProjectPageLatestItemsModelItem\n }\n }\n }\n": types.CreateModelDocument,
|
|
"\n mutation CreateProject($input: ProjectCreateInput) {\n projectMutations {\n create(input: $input) {\n ...ProjectPageProject\n ...ProjectDashboardItem\n }\n }\n }\n": types.CreateProjectDocument,
|
|
"\n mutation CreateWorkspaceProject($input: WorkspaceProjectCreateInput!) {\n workspaceMutations {\n projects {\n create(input: $input) {\n ...ProjectPageProject\n ...ProjectDashboardItem\n }\n }\n }\n }\n": types.CreateWorkspaceProjectDocument,
|
|
"\n mutation UpdateModel($input: UpdateModelInput!) {\n modelMutations {\n update(input: $input) {\n ...ProjectPageLatestItemsModelItem\n }\n }\n }\n": types.UpdateModelDocument,
|
|
"\n mutation DeleteModel($input: DeleteModelInput!) {\n modelMutations {\n delete(input: $input)\n }\n }\n": types.DeleteModelDocument,
|
|
"\n mutation UpdateProjectRole($input: ProjectUpdateRoleInput!) {\n projectMutations {\n updateRole(input: $input) {\n id\n team {\n id\n role\n user {\n ...LimitedUserAvatar\n }\n }\n }\n }\n }\n": types.UpdateProjectRoleDocument,
|
|
"\n mutation UpdateWorkspaceProjectRole($input: ProjectUpdateRoleInput!) {\n workspaceMutations {\n projects {\n updateRole(input: $input) {\n id\n team {\n id\n role\n }\n }\n }\n }\n }\n": types.UpdateWorkspaceProjectRoleDocument,
|
|
"\n mutation InviteProjectUser($projectId: ID!, $input: [ProjectInviteCreateInput!]!) {\n projectMutations {\n invites {\n batchCreate(projectId: $projectId, input: $input) {\n ...ProjectPageTeamDialog\n }\n }\n }\n }\n": types.InviteProjectUserDocument,
|
|
"\n mutation InviteWorkspaceProjectUser(\n $projectId: ID!\n $inputs: [WorkspaceProjectInviteCreateInput!]!\n ) {\n projectMutations {\n invites {\n createForWorkspace(projectId: $projectId, inputs: $inputs) {\n ...ProjectPageTeamDialog\n }\n }\n }\n }\n": types.InviteWorkspaceProjectUserDocument,
|
|
"\n mutation CancelProjectInvite($projectId: ID!, $inviteId: String!) {\n projectMutations {\n invites {\n cancel(projectId: $projectId, inviteId: $inviteId) {\n ...ProjectPageTeamDialog\n }\n }\n }\n }\n": types.CancelProjectInviteDocument,
|
|
"\n mutation UpdateProjectMetadata($update: ProjectUpdateInput!) {\n projectMutations {\n update(update: $update) {\n id\n ...ProjectUpdatableMetadata\n }\n }\n }\n": types.UpdateProjectMetadataDocument,
|
|
"\n mutation DeleteProject($id: String!) {\n projectMutations {\n delete(id: $id)\n }\n }\n": types.DeleteProjectDocument,
|
|
"\n mutation UseProjectInvite($input: ProjectInviteUseInput!) {\n projectMutations {\n invites {\n use(input: $input)\n }\n }\n }\n": types.UseProjectInviteDocument,
|
|
"\n mutation LeaveProject($projectId: String!) {\n projectMutations {\n leave(id: $projectId)\n }\n }\n": types.LeaveProjectDocument,
|
|
"\n mutation DeleteVersions($input: DeleteVersionsInput!) {\n versionMutations {\n delete(input: $input)\n }\n }\n": types.DeleteVersionsDocument,
|
|
"\n mutation MoveVersions($input: MoveVersionsInput!) {\n versionMutations {\n moveToModel(input: $input) {\n id\n }\n }\n }\n": types.MoveVersionsDocument,
|
|
"\n mutation UpdateVersion($input: UpdateVersionInput!) {\n versionMutations {\n update(input: $input) {\n id\n message\n }\n }\n }\n": types.UpdateVersionDocument,
|
|
"\n mutation deleteWebhook($webhook: WebhookDeleteInput!) {\n webhookDelete(webhook: $webhook)\n }\n": types.DeleteWebhookDocument,
|
|
"\n mutation createWebhook($webhook: WebhookCreateInput!) {\n webhookCreate(webhook: $webhook)\n }\n": types.CreateWebhookDocument,
|
|
"\n mutation updateWebhook($webhook: WebhookUpdateInput!) {\n webhookUpdate(webhook: $webhook)\n }\n": types.UpdateWebhookDocument,
|
|
"\n mutation CreateAutomation($projectId: ID!, $input: ProjectAutomationCreateInput!) {\n projectMutations {\n automationMutations(projectId: $projectId) {\n create(input: $input) {\n id\n ...ProjectPageAutomationsRow_Automation\n }\n }\n }\n }\n": types.CreateAutomationDocument,
|
|
"\n mutation DeleteAutomation($projectId: ID!, $automationId: ID!) {\n projectMutations {\n automationMutations(projectId: $projectId) {\n delete(automationId: $automationId)\n }\n }\n }\n": types.DeleteAutomationDocument,
|
|
"\n mutation UpdateAutomation($projectId: ID!, $input: ProjectAutomationUpdateInput!) {\n projectMutations {\n automationMutations(projectId: $projectId) {\n update(input: $input) {\n id\n name\n enabled\n }\n }\n }\n }\n": types.UpdateAutomationDocument,
|
|
"\n mutation CreateAutomationRevision(\n $projectId: ID!\n $input: ProjectAutomationRevisionCreateInput!\n ) {\n projectMutations {\n automationMutations(projectId: $projectId) {\n createRevision(input: $input) {\n id\n }\n }\n }\n }\n": types.CreateAutomationRevisionDocument,
|
|
"\n mutation TriggerAutomation($projectId: ID!, $automationId: ID!) {\n projectMutations {\n automationMutations(projectId: $projectId) {\n trigger(automationId: $automationId)\n }\n }\n }\n": types.TriggerAutomationDocument,
|
|
"\n mutation CreateTestAutomation(\n $projectId: ID!\n $input: ProjectTestAutomationCreateInput!\n ) {\n projectMutations {\n automationMutations(projectId: $projectId) {\n createTestAutomation(input: $input) {\n id\n ...ProjectPageAutomationsRow_Automation\n }\n }\n }\n }\n": types.CreateTestAutomationDocument,
|
|
"\n mutation MoveProjectToWorkspace($workspaceId: String!, $projectId: String!) {\n workspaceMutations {\n projects {\n moveToWorkspace(workspaceId: $workspaceId, projectId: $projectId) {\n id\n workspaceId\n workspace {\n id\n projects {\n items {\n id\n }\n }\n ...WorkspaceMoveProjectManager_Workspace\n }\n }\n }\n }\n }\n": types.MoveProjectToWorkspaceDocument,
|
|
"\n mutation CreateEmbedToken($token: EmbedTokenCreateInput!) {\n projectMutations {\n createEmbedToken(token: $token) {\n token\n tokenMetadata {\n projectId\n tokenId\n ...ProjectPageSettingsTokens_EmbedToken\n }\n }\n }\n }\n": types.CreateEmbedTokenDocument,
|
|
"\n mutation DeleteEmbedToken($projectId: String!, $token: String!) {\n projectMutations {\n revokeEmbedToken(projectId: $projectId, token: $token)\n }\n }\n": types.DeleteEmbedTokenDocument,
|
|
"\n mutation RevokeEmbedTokens($projectId: String!) {\n projectMutations {\n revokeEmbedTokens(projectId: $projectId)\n }\n }\n": types.RevokeEmbedTokensDocument,
|
|
"\n query ProjectAccessCheck($id: String!) {\n project(id: $id) {\n id\n permissions {\n canRead {\n ...FullPermissionCheckResult\n }\n }\n workspaceId\n }\n activeUser {\n id\n activeWorkspace {\n id\n }\n }\n }\n": types.ProjectAccessCheckDocument,
|
|
"\n query ProjectsDashboardQuery($filter: UserProjectsFilter, $cursor: String) {\n activeUser {\n id\n projects(filter: $filter, limit: 6, cursor: $cursor) {\n ...ProjectsDashboard_UserProjectCollection\n cursor\n totalCount\n items {\n ...ProjectDashboardItem\n ...WorkspaceMoveProject_Project\n }\n }\n ...ProjectsHiddenProjectWarning_User\n ...ProjectsDashboard_User\n }\n }\n": types.ProjectsDashboardQueryDocument,
|
|
"\n query ProjectPageQuery($id: String!, $token: String) {\n project(id: $id) {\n ...ProjectPageProject\n }\n projectInvite(projectId: $id, token: $token) {\n ...ProjectsInviteBanner\n }\n }\n": types.ProjectPageQueryDocument,
|
|
"\n query ProjectLatestModels($projectId: String!, $filter: ProjectModelsFilter) {\n project(id: $projectId) {\n id\n models(cursor: null, limit: 16, filter: $filter) {\n totalCount\n cursor\n items {\n ...ProjectPageLatestItemsModelItem\n }\n }\n pendingImportedModels {\n ...PendingFileUpload\n }\n }\n }\n": types.ProjectLatestModelsDocument,
|
|
"\n query ProjectLatestModelsPagination(\n $projectId: String!\n $filter: ProjectModelsFilter\n $cursor: String = null\n $limit: Int = 16\n ) {\n project(id: $projectId) {\n id\n models(cursor: $cursor, limit: $limit, filter: $filter) {\n totalCount\n cursor\n items {\n ...ProjectPageLatestItemsModelItem\n }\n }\n }\n }\n": types.ProjectLatestModelsPaginationDocument,
|
|
"\n query ProjectModelsTreeTopLevel(\n $projectId: String!\n $filter: ProjectModelsTreeFilter\n ) {\n project(id: $projectId) {\n id\n modelsTree(cursor: null, limit: 8, filter: $filter) {\n totalCount\n cursor\n items {\n ...SingleLevelModelTreeItem\n }\n }\n pendingImportedModels {\n ...PendingFileUpload\n }\n }\n }\n": types.ProjectModelsTreeTopLevelDocument,
|
|
"\n query ProjectModelsTreeTopLevelPagination(\n $projectId: String!\n $filter: ProjectModelsTreeFilter\n $cursor: String = null\n ) {\n project(id: $projectId) {\n id\n modelsTree(cursor: $cursor, limit: 8, filter: $filter) {\n totalCount\n cursor\n items {\n ...SingleLevelModelTreeItem\n }\n }\n }\n }\n": types.ProjectModelsTreeTopLevelPaginationDocument,
|
|
"\n query ProjectModelChildrenTree($projectId: String!, $parentName: String!) {\n project(id: $projectId) {\n id\n modelChildrenTree(fullName: $parentName) {\n ...SingleLevelModelTreeItem\n }\n }\n }\n": types.ProjectModelChildrenTreeDocument,
|
|
"\n query ProjectLatestCommentThreads(\n $projectId: String!\n $cursor: String = null\n $filter: ProjectCommentsFilter = null\n ) {\n project(id: $projectId) {\n id\n commentThreads(cursor: $cursor, limit: 8, filter: $filter) {\n totalCount\n cursor\n items {\n ...ProjectPageLatestItemsCommentItem\n }\n }\n ...ViewerResourcesLimitAlert_Project\n }\n }\n": types.ProjectLatestCommentThreadsDocument,
|
|
"\n query ProjectInvite($projectId: String!, $token: String) {\n projectInvite(projectId: $projectId, token: $token) {\n ...ProjectsInviteBanner\n }\n }\n": types.ProjectInviteDocument,
|
|
"\n query ProjectModelCheck($projectId: String!, $modelId: String!) {\n project(id: $projectId) {\n visibility\n model(id: $modelId) {\n id\n }\n }\n }\n": types.ProjectModelCheckDocument,
|
|
"\n query ProjectModelPage(\n $projectId: String!\n $modelId: String!\n $versionsCursor: String\n ) {\n project(id: $projectId) {\n id\n ...ProjectModelPageHeaderProject\n ...ProjectModelPageVersionsProject\n }\n }\n": types.ProjectModelPageDocument,
|
|
"\n query ProjectModelVersions(\n $projectId: String!\n $modelId: String!\n $versionsCursor: String\n ) {\n project(id: $projectId) {\n id\n ...ProjectModelPageVersionsPagination\n }\n }\n": types.ProjectModelVersionsDocument,
|
|
"\n query ProjectModelsPage($projectId: String!) {\n project(id: $projectId) {\n id\n ...ProjectModelsPageHeader_Project\n ...ProjectModelsPageResults_Project\n }\n }\n": types.ProjectModelsPageDocument,
|
|
"\n query ProjectDiscussionsPage($projectId: String!) {\n project(id: $projectId) {\n id\n ...ProjectDiscussionsPageHeader_Project\n ...ProjectDiscussionsPageResults_Project\n }\n }\n": types.ProjectDiscussionsPageDocument,
|
|
"\n query ProjectAutomationsTab($projectId: String!) {\n project(id: $projectId) {\n id\n role\n models(limit: 1) {\n items {\n id\n }\n }\n automations(filter: null, cursor: null, limit: 5) {\n totalCount\n items {\n id\n ...ProjectPageAutomationsRow_Automation\n }\n cursor\n }\n workspace {\n id\n automateFunctions(limit: 0) {\n totalCount\n }\n ...AutomateFunctionCreateDialog_Workspace\n }\n permissions {\n canCreateAutomation {\n ...FullPermissionCheckResult\n }\n }\n ...FormSelectProjects_Project\n }\n ...AutomateFunctionsPageHeader_Query\n }\n": types.ProjectAutomationsTabDocument,
|
|
"\n query ProjectAutomationsTabAutomationsPagination(\n $projectId: String!\n $search: String = null\n $cursor: String = null\n ) {\n project(id: $projectId) {\n id\n automations(filter: $search, cursor: $cursor, limit: 5) {\n totalCount\n cursor\n items {\n id\n ...ProjectPageAutomationsRow_Automation\n }\n }\n }\n }\n": types.ProjectAutomationsTabAutomationsPaginationDocument,
|
|
"\n query ProjectAutomationPage($projectId: String!, $automationId: String!) {\n project(id: $projectId) {\n id\n ...ProjectPageAutomationPage_Project\n automation(id: $automationId) {\n id\n ...ProjectPageAutomationPage_Automation\n }\n }\n }\n": types.ProjectAutomationPageDocument,
|
|
"\n query ProjectAutomationPagePaginatedRuns(\n $projectId: String!\n $automationId: String!\n $cursor: String = null\n ) {\n project(id: $projectId) {\n id\n automation(id: $automationId) {\n id\n runs(cursor: $cursor, limit: 10) {\n totalCount\n cursor\n items {\n id\n ...AutomationRunDetails\n }\n }\n }\n }\n }\n": types.ProjectAutomationPagePaginatedRunsDocument,
|
|
"\n query ProjectAutomationAccessCheck($projectId: String!) {\n project(id: $projectId) {\n id\n automations(limit: 0) {\n totalCount\n }\n }\n }\n": types.ProjectAutomationAccessCheckDocument,
|
|
"\n query ProjectWebhooks($projectId: String!) {\n project(id: $projectId) {\n id\n name\n ...ProjectPageSettingsWebhooks_Project\n webhooks {\n items {\n streamId\n triggers\n enabled\n url\n id\n description\n history(limit: 5) {\n items {\n status\n statusInfo\n }\n }\n }\n totalCount\n }\n }\n }\n": types.ProjectWebhooksDocument,
|
|
"\n query ProjectIntegrations($projectId: String!) {\n project(id: $projectId) {\n id\n name\n ...ProjectPageSettingsIntegrations_Project\n accSyncItems {\n items {\n id\n }\n totalCount\n }\n }\n }\n": types.ProjectIntegrationsDocument,
|
|
"\n query ProjectEmbedTokens($projectId: String!, $cursor: String = null) {\n project(id: $projectId) {\n id\n ...ProjectPageSettingsTokens_Project\n }\n }\n": types.ProjectEmbedTokensDocument,
|
|
"\n query ProjectBlobInfo($blobId: String!, $projectId: String!) {\n project(id: $projectId) {\n id\n blob(id: $blobId) {\n id\n fileName\n fileType\n fileSize\n createdAt\n }\n }\n }\n": types.ProjectBlobInfoDocument,
|
|
"\n query MoveToWorkspaceDryRun($workspaceId: String!, $projectId: String!, $limit: Int) {\n project(id: $projectId) {\n id\n moveToWorkspaceDryRun(workspaceId: $workspaceId) {\n addedToWorkspaceTotalCount\n addedToWorkspace(limit: $limit) {\n avatar\n id\n name\n }\n }\n }\n }\n": types.MoveToWorkspaceDryRunDocument,
|
|
"\n subscription OnProjectUpdated($id: String!) {\n projectUpdated(id: $id) {\n id\n type\n project {\n ...ProjectPageProject\n ...ProjectDashboardItemNoModels\n }\n }\n }\n": types.OnProjectUpdatedDocument,
|
|
"\n subscription OnProjectModelsUpdate($id: String!) {\n projectModelsUpdated(id: $id) {\n id\n type\n model {\n id\n versions(limit: 1) {\n items {\n id\n referencedObject\n }\n }\n ...ProjectPageLatestItemsModelItem\n }\n }\n }\n": types.OnProjectModelsUpdateDocument,
|
|
"\n subscription OnProjectVersionsUpdate($id: String!) {\n projectVersionsUpdated(id: $id) {\n id\n modelId\n type\n version {\n id\n ...ViewerModelVersionCardItem\n ...ProjectModelPageVersionsCardVersion\n model {\n id\n ...ProjectPageLatestItemsModelItem\n }\n }\n }\n }\n": types.OnProjectVersionsUpdateDocument,
|
|
"\n subscription OnProjectVersionsPreviewGenerated($id: String!) {\n projectVersionsPreviewGenerated(id: $id) {\n projectId\n objectId\n versionId\n }\n }\n": types.OnProjectVersionsPreviewGeneratedDocument,
|
|
"\n subscription OnProjectPendingModelsUpdated($id: String!) {\n projectPendingModelsUpdated(id: $id) {\n id\n type\n model {\n ...PendingFileUpload\n ...UseFailedFileImportJobUtils_FileUpload\n model {\n ...ProjectPageLatestItemsModelItem\n }\n }\n }\n }\n": types.OnProjectPendingModelsUpdatedDocument,
|
|
"\n subscription OnProjectPendingVersionsUpdated($id: String!) {\n projectPendingVersionsUpdated(id: $id) {\n id\n type\n version {\n ...PendingFileUpload\n ...UseFailedFileImportJobUtils_FileUpload\n model {\n ...ProjectPageLatestItemsModelItem\n }\n }\n }\n }\n": types.OnProjectPendingVersionsUpdatedDocument,
|
|
"\n subscription OnProjectTriggeredAutomationsStatusUpdated($id: String!) {\n projectTriggeredAutomationsStatusUpdated(projectId: $id) {\n type\n version {\n id\n automationsStatus {\n automationRuns {\n ...AutomateViewerPanel_AutomateRun\n }\n ...TriggeredAutomationsStatusSummary\n ...AutomateRunsTriggerStatusDialog_TriggeredAutomationsStatus\n }\n }\n model {\n id\n }\n run {\n id\n automationId\n ...AutomationRunDetails\n }\n }\n }\n": types.OnProjectTriggeredAutomationsStatusUpdatedDocument,
|
|
"\n subscription OnProjectAutomationsUpdated($id: String!) {\n projectAutomationsUpdated(projectId: $id) {\n type\n automationId\n automation {\n id\n ...ProjectPageAutomationPage_Automation\n ...ProjectPageAutomationsRow_Automation\n }\n }\n }\n": types.OnProjectAutomationsUpdatedDocument,
|
|
"\n fragment GetModelItemRoute_Model on Model {\n id\n projectId\n homeView {\n id\n resourceIds\n }\n resourceIdString\n }\n": types.GetModelItemRoute_ModelFragmentDoc,
|
|
"\n mutation ServerInfoUpdate($info: ServerInfoUpdateInput!) {\n serverInfoUpdate(info: $info)\n }\n": types.ServerInfoUpdateDocument,
|
|
"\n mutation AdminPanelDeleteUser($userConfirmation: UserDeleteInput!) {\n adminDeleteUser(userConfirmation: $userConfirmation)\n }\n": types.AdminPanelDeleteUserDocument,
|
|
"\n mutation AdminPanelDeleteProject($ids: [String!]!) {\n projectMutations {\n batchDelete(ids: $ids)\n }\n }\n": types.AdminPanelDeleteProjectDocument,
|
|
"\n mutation AdminPanelResendInvite($inviteId: String!) {\n inviteResend(inviteId: $inviteId)\n }\n": types.AdminPanelResendInviteDocument,
|
|
"\n mutation AdminPanelDeleteInvite($inviteId: String!) {\n inviteDelete(inviteId: $inviteId)\n }\n": types.AdminPanelDeleteInviteDocument,
|
|
"\n mutation AdminChangeUseRole($userRoleInput: UserRoleInput!) {\n userRoleChange(userRoleInput: $userRoleInput)\n }\n": types.AdminChangeUseRoleDocument,
|
|
"\n query ServerManagementDataPage {\n admin {\n userList {\n totalCount\n }\n projectList {\n totalCount\n }\n inviteList {\n totalCount\n }\n }\n serverInfo {\n name\n version\n }\n }\n": types.ServerManagementDataPageDocument,
|
|
"\n query ServerSettingsDialogData {\n serverInfo {\n name\n description\n adminContact\n company\n termsOfService\n inviteOnly\n guestModeEnabled\n }\n }\n": types.ServerSettingsDialogDataDocument,
|
|
"\n query AdminPanelUsersList($limit: Int!, $cursor: String, $query: String) {\n admin {\n userList(limit: $limit, cursor: $cursor, query: $query) {\n totalCount\n cursor\n items {\n id\n email\n avatar\n name\n role\n verified\n company\n }\n }\n }\n }\n": types.AdminPanelUsersListDocument,
|
|
"\n query AdminPanelProjectsList(\n $query: String\n $orderBy: String\n $limit: Int!\n $visibility: String\n $cursor: String\n ) {\n admin {\n projectList(\n query: $query\n orderBy: $orderBy\n limit: $limit\n visibility: $visibility\n cursor: $cursor\n ) {\n cursor\n ...SettingsServerProjects_ProjectCollection\n }\n }\n }\n": types.AdminPanelProjectsListDocument,
|
|
"\n query AdminPanelInvitesList($limit: Int!, $cursor: String, $query: String) {\n admin {\n inviteList(limit: $limit, cursor: $cursor, query: $query) {\n cursor\n items {\n email\n id\n invitedBy {\n id\n name\n }\n }\n totalCount\n }\n }\n }\n": types.AdminPanelInvitesListDocument,
|
|
"\n query UsersCount {\n admin {\n userList {\n totalCount\n }\n }\n }\n": types.UsersCountDocument,
|
|
"\n query InvitesCount {\n admin {\n inviteList {\n totalCount\n }\n }\n }\n": types.InvitesCountDocument,
|
|
"\n mutation InviteServerUser($input: [ServerInviteCreateInput!]!) {\n serverInviteBatchCreate(input: $input)\n }\n": types.InviteServerUserDocument,
|
|
"\n fragment SettingsMenu_Workspace on Workspace {\n id\n slug\n sso {\n provider {\n id\n }\n session {\n validUntil\n }\n }\n }\n": types.SettingsMenu_WorkspaceFragmentDoc,
|
|
"\n mutation SettingsUpdateWorkspace($input: WorkspaceUpdateInput!) {\n workspaceMutations {\n update(input: $input) {\n ...SettingsWorkspacesGeneral_Workspace\n }\n }\n }\n": types.SettingsUpdateWorkspaceDocument,
|
|
"\n mutation SettingsUpdateWorkspaceEmbedOptions(\n $input: WorkspaceUpdateEmbedOptionsInput!\n ) {\n workspaceMutations {\n updateEmbedOptions(input: $input) {\n hideSpeckleBranding\n }\n }\n }\n": types.SettingsUpdateWorkspaceEmbedOptionsDocument,
|
|
"\n mutation SettingsCreateUserEmail($input: CreateUserEmailInput!) {\n activeUserMutations {\n emailMutations {\n create(input: $input) {\n id\n emails {\n ...EmailFields\n }\n }\n }\n }\n }\n": types.SettingsCreateUserEmailDocument,
|
|
"\n mutation SettingsDeleteUserEmail($input: DeleteUserEmailInput!) {\n activeUserMutations {\n emailMutations {\n delete(input: $input) {\n id\n emails {\n ...EmailFields\n }\n }\n }\n }\n }\n": types.SettingsDeleteUserEmailDocument,
|
|
"\n mutation SettingsSetPrimaryUserEmail($input: SetPrimaryUserEmailInput!) {\n activeUserMutations {\n emailMutations {\n setPrimary(input: $input) {\n id\n emails {\n ...EmailFields\n }\n }\n }\n }\n }\n": types.SettingsSetPrimaryUserEmailDocument,
|
|
"\n mutation SettingsNewEmailVerification($input: EmailVerificationRequestInput!) {\n activeUserMutations {\n emailMutations {\n requestNewEmailVerification(input: $input)\n }\n }\n }\n": types.SettingsNewEmailVerificationDocument,
|
|
"\n mutation SettingsUpdateWorkspaceSecurity($input: WorkspaceUpdateInput!) {\n workspaceMutations {\n update(input: $input) {\n id\n domainBasedMembershipProtectionEnabled\n discoverabilityEnabled\n }\n }\n }\n": types.SettingsUpdateWorkspaceSecurityDocument,
|
|
"\n mutation SettingsDeleteWorkspace($workspaceId: String!) {\n workspaceMutations {\n delete(workspaceId: $workspaceId)\n }\n }\n": types.SettingsDeleteWorkspaceDocument,
|
|
"\n mutation SettingsResendWorkspaceInvite($input: WorkspaceInviteResendInput!) {\n workspaceMutations {\n invites {\n resend(input: $input)\n }\n }\n }\n": types.SettingsResendWorkspaceInviteDocument,
|
|
"\n mutation SettingsCancelWorkspaceInvite($workspaceId: String!, $inviteId: String!) {\n workspaceMutations {\n invites {\n cancel(workspaceId: $workspaceId, inviteId: $inviteId) {\n id\n }\n }\n }\n }\n": types.SettingsCancelWorkspaceInviteDocument,
|
|
"\n mutation AddWorkspaceDomain($input: AddDomainToWorkspaceInput!) {\n workspaceMutations {\n addDomain(input: $input) {\n ...SettingsWorkspacesSecurity_Workspace\n }\n }\n }\n": types.AddWorkspaceDomainDocument,
|
|
"\n mutation DeleteWorkspaceDomain($input: WorkspaceDomainDeleteInput!) {\n workspaceMutations {\n deleteDomain(input: $input) {\n ...SettingsWorkspacesSecurityDomainRemoveDialog_Workspace\n }\n }\n }\n": types.DeleteWorkspaceDomainDocument,
|
|
"\n mutation SettingsLeaveWorkspace($leaveId: ID!) {\n workspaceMutations {\n leave(id: $leaveId)\n }\n }\n": types.SettingsLeaveWorkspaceDocument,
|
|
"\n mutation SettingsBillingCancelCheckoutSession($input: CancelCheckoutSessionInput!) {\n workspaceMutations {\n billing {\n cancelCheckoutSession(input: $input)\n }\n }\n }\n": types.SettingsBillingCancelCheckoutSessionDocument,
|
|
"\n query SettingsSidebar($slug: String!) {\n workspaceBySlug(slug: $slug) {\n ...SettingsSidebar_Workspace\n }\n }\n": types.SettingsSidebarDocument,
|
|
"\n query SettingsWorkspaceGeneral($slug: String!) {\n workspaceBySlug(slug: $slug) {\n ...SettingsWorkspacesGeneral_Workspace\n }\n }\n": types.SettingsWorkspaceGeneralDocument,
|
|
"\n query SettingsWorkspaceBilling($slug: String!) {\n workspaceBySlug(slug: $slug) {\n id\n ...WorkspaceBillingPage_Workspace\n }\n }\n": types.SettingsWorkspaceBillingDocument,
|
|
"\n query SettingsWorkspaceBillingCustomerPortal($workspaceId: String!) {\n workspace(id: $workspaceId) {\n customerPortalUrl\n }\n }\n": types.SettingsWorkspaceBillingCustomerPortalDocument,
|
|
"\n query SettingsWorkspaceRegions($slug: String!) {\n workspaceBySlug(slug: $slug) {\n id\n ...SettingsWorkspacesRegions_Workspace\n }\n serverInfo {\n ...SettingsWorkspacesRegions_ServerInfo\n }\n }\n": types.SettingsWorkspaceRegionsDocument,
|
|
"\n query SettingsWorkspacesMembers(\n $slug: String!\n $filter: AdminWorkspaceJoinRequestFilter\n ) {\n workspaceBySlug(slug: $slug) {\n ...SettingsWorkspacesMembersCounts_Workspace\n }\n }\n": types.SettingsWorkspacesMembersDocument,
|
|
"\n query SettingsWorkspacesMembersInvites($slug: String!) {\n workspaceBySlug(slug: $slug) {\n ...SettingsWorkspacesMembersInvitesTable_Workspace\n }\n }\n": types.SettingsWorkspacesMembersInvitesDocument,
|
|
"\n query SettingsWorkspacesMembersRequests($slug: String!) {\n workspaceBySlug(slug: $slug) {\n ...SettingsWorkspacesMembersRequestsTable_Workspace\n }\n }\n": types.SettingsWorkspacesMembersRequestsDocument,
|
|
"\n query SettingsWorkspacesMembersTableQuery($slug: String!) {\n workspaceBySlug(slug: $slug) {\n id\n role\n ...SettingsWorkspacesMembersTableHeader_Workspace\n permissions {\n canReadMemberEmail {\n ...FullPermissionCheckResult\n }\n }\n }\n }\n": types.SettingsWorkspacesMembersTableQueryDocument,
|
|
"\n query SettingsWorkspacesMembersSearch(\n $slug: String!\n $filter: WorkspaceTeamFilter\n $limit: Int\n $cursor: String\n ) {\n workspaceBySlug(slug: $slug) {\n id\n team(filter: $filter, limit: $limit, cursor: $cursor) {\n items {\n id\n ...SettingsWorkspacesMembersTable_WorkspaceCollaborator\n }\n cursor\n totalCount\n }\n }\n }\n": types.SettingsWorkspacesMembersSearchDocument,
|
|
"\n query SettingsWorkspacesInvitesSearch(\n $slug: String!\n $invitesFilter: PendingWorkspaceCollaboratorsFilter\n ) {\n workspaceBySlug(slug: $slug) {\n id\n ...SettingsWorkspacesMembersTableHeader_Workspace\n invitedTeam(filter: $invitesFilter) {\n ...SettingsWorkspacesMembersInvitesTable_PendingWorkspaceCollaborator\n }\n }\n }\n": types.SettingsWorkspacesInvitesSearchDocument,
|
|
"\n query SettingsWorkspacesProjects(\n $slug: String!\n $limit: Int!\n $cursor: String\n $filter: WorkspaceProjectsFilter\n ) {\n workspaceBySlug(slug: $slug) {\n ...SettingsWorkspacesProjects_Workspace\n projects(limit: $limit, cursor: $cursor, filter: $filter) {\n cursor\n ...SettingsWorkspacesProjects_ProjectCollection\n }\n }\n }\n": types.SettingsWorkspacesProjectsDocument,
|
|
"\n query SettingsWorkspaceSecurity($slug: String!) {\n workspaceBySlug(slug: $slug) {\n ...SettingsWorkspacesSecurity_Workspace\n }\n }\n": types.SettingsWorkspaceSecurityDocument,
|
|
"\n query SettingsWorkspaceAutomation($slug: String!, $cursor: String = null) {\n workspaceBySlug(slug: $slug) {\n id\n automateFunctions(\n limit: 10\n cursor: $cursor\n filter: { includeFeatured: false }\n ) {\n items {\n ...SettingsWorkspacesAutomationFunctions_AutomateFunction\n }\n totalCount\n }\n }\n }\n": types.SettingsWorkspaceAutomationDocument,
|
|
"\n fragment AppAuthorAvatar on AppAuthor {\n id\n name\n avatar\n }\n": types.AppAuthorAvatarFragmentDoc,
|
|
"\n fragment LimitedUserAvatar on LimitedUser {\n id\n name\n avatar\n }\n": types.LimitedUserAvatarFragmentDoc,
|
|
"\n fragment ActiveUserAvatar on User {\n id\n name\n avatar\n }\n": types.ActiveUserAvatarFragmentDoc,
|
|
"\n query ActiveUserMeta {\n activeUser {\n meta {\n legacyProjectsExplainerCollapsed\n speckleCon25BannerDismissed\n }\n }\n }\n": types.ActiveUserMetaDocument,
|
|
"\n mutation UpdateLegacyProjectsExplainer($value: Boolean!) {\n activeUserMutations {\n meta {\n setLegacyProjectsExplainerCollapsed(value: $value)\n }\n }\n }\n": types.UpdateLegacyProjectsExplainerDocument,
|
|
"\n mutation UpdateSpeckleCon25BannerDismissed($value: Boolean!) {\n activeUserMutations {\n meta {\n setSpeckleCon25BannerDismissed(value: $value)\n }\n }\n }\n": types.UpdateSpeckleCon25BannerDismissedDocument,
|
|
"\n subscription OnUserProjectsUpdate {\n userProjectsUpdated {\n type\n id\n project {\n ...ProjectDashboardItem\n workspaceId\n }\n }\n }\n ": types.OnUserProjectsUpdateDocument,
|
|
"\n mutation UpdateUser($input: UserUpdateInput!) {\n activeUserMutations {\n update(user: $input) {\n id\n name\n bio\n company\n avatar\n }\n }\n }\n": types.UpdateUserDocument,
|
|
"\n mutation UpdateNotificationPreferences($input: JSONObject!) {\n userNotificationPreferencesUpdate(preferences: $input)\n }\n": types.UpdateNotificationPreferencesDocument,
|
|
"\n mutation DeleteAccount($input: UserDeleteInput!) {\n userDelete(userConfirmation: $input)\n }\n": types.DeleteAccountDocument,
|
|
"\n mutation verifyEmail($input: VerifyUserEmailInput!) {\n activeUserMutations {\n emailMutations {\n verify(input: $input)\n }\n }\n }\n": types.VerifyEmailDocument,
|
|
"\n mutation SetActiveWorkspace($slug: String, $id: String) {\n activeUserMutations {\n setActiveWorkspace(slug: $slug, id: $id) {\n ...WorkspaceSwitcherActiveWorkspace_LimitedWorkspace\n }\n }\n }\n": types.SetActiveWorkspaceDocument,
|
|
"\n fragment EmailFields on UserEmail {\n id\n email\n verified\n primary\n userId\n }\n": types.EmailFieldsFragmentDoc,
|
|
"\n query UserEmails {\n activeUser {\n id\n emails {\n ...EmailFields\n }\n hasPendingVerification\n }\n }\n": types.UserEmailsDocument,
|
|
"\n query UserActiveWorkspaceSlug {\n activeUser {\n id\n activeWorkspace {\n id\n slug\n }\n }\n }\n": types.UserActiveWorkspaceSlugDocument,
|
|
"\n fragment UseViewerUserActivityBroadcasting_Project on Project {\n id\n permissions {\n canBroadcastActivity {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.UseViewerUserActivityBroadcasting_ProjectFragmentDoc,
|
|
"\n fragment ViewerCommentBubblesData on Comment {\n id\n viewedAt\n viewerState\n }\n": types.ViewerCommentBubblesDataFragmentDoc,
|
|
"\n fragment UseCheckViewerCommentingAccess_Project on Project {\n id\n permissions {\n canCreateComment {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.UseCheckViewerCommentingAccess_ProjectFragmentDoc,
|
|
"\n fragment UseLoadLatestVersion_Project on Project {\n id\n workspace {\n slug\n }\n }\n": types.UseLoadLatestVersion_ProjectFragmentDoc,
|
|
"\n mutation CreateSavedView($input: CreateSavedViewInput!) {\n projectMutations {\n savedViewMutations {\n createView(input: $input) {\n id\n resourceIds\n groupId\n ...ViewerSavedViewsPanelView_SavedView\n group {\n id\n ...ViewerSavedViewsPanelViewsGroup_SavedViewGroup\n }\n }\n }\n }\n }\n": types.CreateSavedViewDocument,
|
|
"\n mutation DeleteSavedView($input: DeleteSavedViewInput!) {\n projectMutations {\n savedViewMutations {\n deleteView(input: $input)\n }\n }\n }\n": types.DeleteSavedViewDocument,
|
|
"\n fragment UseDeleteSavedView_SavedView on SavedView {\n id\n projectId\n resourceIds\n group {\n id\n groupId\n resourceIds\n }\n }\n": types.UseDeleteSavedView_SavedViewFragmentDoc,
|
|
"\n mutation UpdateSavedView($input: UpdateSavedViewInput!) {\n projectMutations {\n savedViewMutations {\n updateView(input: $input) {\n id\n ...ViewerSavedViewsPanelView_SavedView\n ...UseViewerSavedViewSetup_SavedView\n ...UseUpdateSavedView_SavedView\n group {\n id\n ...ViewerSavedViewsPanelViewsGroup_SavedViewGroup\n }\n }\n }\n }\n }\n": types.UpdateSavedViewDocument,
|
|
"\n fragment UseUpdateSavedView_SavedView on SavedView {\n id\n projectId\n isHomeView\n groupResourceIds\n resourceIds\n group {\n id\n groupId\n resourceIds\n }\n }\n": types.UseUpdateSavedView_SavedViewFragmentDoc,
|
|
"\n mutation CreateSavedViewGroup($input: CreateSavedViewGroupInput!) {\n projectMutations {\n savedViewMutations {\n createGroup(input: $input) {\n id\n ...ViewerSavedViewsPanelViewsGroup_SavedViewGroup\n }\n }\n }\n }\n": types.CreateSavedViewGroupDocument,
|
|
"\n mutation DeleteSavedViewGroup($input: DeleteSavedViewGroupInput!) {\n projectMutations {\n savedViewMutations {\n deleteGroup(input: $input)\n }\n }\n }\n": types.DeleteSavedViewGroupDocument,
|
|
"\n fragment UseDeleteSavedViewGroup_SavedViewGroup on SavedViewGroup {\n id\n groupId\n projectId\n isUngroupedViewsGroup\n }\n": types.UseDeleteSavedViewGroup_SavedViewGroupFragmentDoc,
|
|
"\n mutation UpdateSavedViewGroup($input: UpdateSavedViewGroupInput!) {\n projectMutations {\n savedViewMutations {\n updateGroup(input: $input) {\n id\n ...UseUpdateSavedViewGroup_SavedViewGroup\n }\n }\n }\n }\n": types.UpdateSavedViewGroupDocument,
|
|
"\n fragment UseUpdateSavedViewGroup_SavedViewGroup on SavedViewGroup {\n id\n projectId\n groupId\n title\n isUngroupedViewsGroup\n }\n": types.UseUpdateSavedViewGroup_SavedViewGroupFragmentDoc,
|
|
"\n subscription OnProjectSavedViewsUpdated($projectId: ID!) {\n projectSavedViewsUpdated(projectId: $projectId) {\n type\n id\n savedView {\n id\n resourceIds\n group {\n id\n groupId\n resourceIds\n }\n ...ViewerSavedViewsPanelView_SavedView\n }\n beforeChangeSavedView {\n groupId\n resourceIds\n groupResourceIds\n position\n }\n }\n }\n": types.OnProjectSavedViewsUpdatedDocument,
|
|
"\n subscription OnProjectSavedViewGroupsUpdated($projectId: ID!) {\n projectSavedViewGroupsUpdated(projectId: $projectId) {\n type\n id\n savedViewGroup {\n id\n projectId\n author {\n id\n }\n }\n }\n }\n": types.OnProjectSavedViewGroupsUpdatedDocument,
|
|
"\n fragment UseDraggableView_SavedView on SavedView {\n id\n projectId\n name\n position\n group {\n id\n }\n permissions {\n canMove {\n ...FullPermissionCheckResult\n }\n }\n ...UseUpdateSavedView_SavedView\n }\n": types.UseDraggableView_SavedViewFragmentDoc,
|
|
"\n fragment UseDraggableViewTargetView_SavedView on SavedView {\n id\n name\n position\n group {\n id\n }\n }\n": types.UseDraggableViewTargetView_SavedViewFragmentDoc,
|
|
"\n fragment UseDraggableViewTargetGroup_SavedViewGroup on SavedViewGroup {\n id\n title\n }\n": types.UseDraggableViewTargetGroup_SavedViewGroupFragmentDoc,
|
|
"\n fragment UseSavedViewValidationHelpers_SavedView on SavedView {\n id\n isHomeView\n visibility\n permissions {\n canUpdate {\n ...FullPermissionCheckResult\n }\n canMove {\n ...FullPermissionCheckResult\n }\n canEditTitle {\n ...FullPermissionCheckResult\n }\n canEditDescription {\n ...FullPermissionCheckResult\n }\n canSetAsHomeView {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.UseSavedViewValidationHelpers_SavedViewFragmentDoc,
|
|
"\n fragment UseViewerSavedViewSetup_SavedView on SavedView {\n id\n viewerState\n ...ViewerPageSetup_SavedView\n }\n": types.UseViewerSavedViewSetup_SavedViewFragmentDoc,
|
|
"\n fragment ViewerCommentThread on Comment {\n ...ViewerCommentsListItem\n ...ViewerCommentBubblesData\n ...ViewerCommentsReplyItem\n ...ViewerCommentThreadData\n }\n": types.ViewerCommentThreadFragmentDoc,
|
|
"\n fragment ViewerCommentsReplyItem on Comment {\n id\n archived\n rawText\n text {\n doc\n }\n author {\n ...LimitedUserAvatar\n }\n createdAt\n ...ThreadCommentAttachment\n }\n": types.ViewerCommentsReplyItemFragmentDoc,
|
|
"\n mutation BroadcastViewerUserActivity(\n $projectId: String!\n $resourceIdString: String!\n $message: ViewerUserActivityMessageInput!\n ) {\n broadcastViewerUserActivity(\n projectId: $projectId\n resourceIdString: $resourceIdString\n message: $message\n )\n }\n": types.BroadcastViewerUserActivityDocument,
|
|
"\n mutation MarkCommentViewed($input: MarkCommentViewedInput!) {\n commentMutations {\n markViewed(input: $input)\n }\n }\n": types.MarkCommentViewedDocument,
|
|
"\n mutation CreateCommentThread($input: CreateCommentInput!) {\n commentMutations {\n create(input: $input) {\n ...ViewerCommentThread\n }\n }\n }\n": types.CreateCommentThreadDocument,
|
|
"\n mutation CreateCommentReply($input: CreateCommentReplyInput!) {\n commentMutations {\n reply(input: $input) {\n ...ViewerCommentsReplyItem\n }\n }\n }\n": types.CreateCommentReplyDocument,
|
|
"\n mutation ArchiveComment($input: ArchiveCommentInput!) {\n commentMutations {\n archive(input: $input)\n }\n }\n": types.ArchiveCommentDocument,
|
|
"\n query ProjectViewerResources(\n $projectId: String!\n $resourceUrlString: String!\n $savedViewId: ID\n $savedViewSettings: SavedViewsLoadSettings\n ) {\n project(id: $projectId) {\n id\n viewerResourcesExtended(\n resourceIdString: $resourceUrlString\n savedViewId: $savedViewId\n savedViewSettings: $savedViewSettings\n ) {\n groups {\n identifier\n items {\n modelId\n versionId\n objectId\n }\n }\n savedView {\n id\n ...UseViewerSavedViewSetup_SavedView\n }\n request {\n savedViewId\n }\n resourceIdString\n }\n }\n }\n": types.ProjectViewerResourcesDocument,
|
|
"\n query ViewerLoadedResources(\n $projectId: String!\n $modelIds: [String!]!\n $versionIds: [String!]\n ) {\n project(id: $projectId) {\n id\n role\n allowPublicComments\n models(filter: { ids: $modelIds }) {\n totalCount\n items {\n id\n name\n updatedAt\n loadedVersion: versions(\n filter: { priorityIds: $versionIds, priorityIdsOnly: true }\n ) {\n items {\n ...ViewerModelVersionCardItem\n automationsStatus {\n id\n automationRuns {\n ...AutomateViewerPanel_AutomateRun\n }\n }\n }\n }\n versions(limit: 5) {\n totalCount\n cursor\n items {\n ...ViewerModelVersionCardItem\n }\n }\n }\n }\n ...ProjectPageLatestItemsModels\n ...ModelPageProject\n ...HeaderNavShare_Project\n ...UseCheckViewerCommentingAccess_Project\n ...UseViewerUserActivityBroadcasting_Project\n ...ViewerResourcesLimitAlert_Project\n ...ViewerSavedViewsPanel_Project\n }\n }\n": types.ViewerLoadedResourcesDocument,
|
|
"\n query ViewerModelVersions(\n $projectId: String!\n $modelId: String!\n $versionsCursor: String\n ) {\n project(id: $projectId) {\n id\n role\n model(id: $modelId) {\n id\n versions(cursor: $versionsCursor, limit: 5) {\n totalCount\n cursor\n items {\n ...ViewerModelVersionCardItem\n }\n }\n }\n }\n }\n": types.ViewerModelVersionsDocument,
|
|
"\n query ViewerDiffVersions(\n $projectId: String!\n $modelId: String!\n $versionAId: String!\n $versionBId: String!\n ) {\n project(id: $projectId) {\n id\n model(id: $modelId) {\n id\n versionA: version(id: $versionAId) {\n ...ViewerModelVersionCardItem\n }\n versionB: version(id: $versionBId) {\n ...ViewerModelVersionCardItem\n }\n }\n }\n }\n": types.ViewerDiffVersionsDocument,
|
|
"\n query ViewerLoadedThreads(\n $projectId: String!\n $filter: ProjectCommentsFilter!\n $cursor: String\n $limit: Int\n ) {\n project(id: $projectId) {\n id\n commentThreads(filter: $filter, cursor: $cursor, limit: $limit) {\n totalCount\n totalArchivedCount\n items {\n ...ViewerCommentThread\n ...LinkableComment\n }\n }\n }\n }\n": types.ViewerLoadedThreadsDocument,
|
|
"\n query ViewerRawProjectObject($projectId: String!, $objectId: String!) {\n project(id: $projectId) {\n id\n object(id: $objectId) {\n id\n data\n }\n }\n }\n": types.ViewerRawProjectObjectDocument,
|
|
"\n subscription OnViewerUserActivityBroadcasted(\n $target: ViewerUpdateTrackingTarget!\n $sessionId: String!\n ) {\n viewerUserActivityBroadcasted(target: $target, sessionId: $sessionId) {\n userName\n userId\n user {\n ...LimitedUserAvatar\n }\n state\n status\n sessionId\n }\n }\n": types.OnViewerUserActivityBroadcastedDocument,
|
|
"\n subscription OnViewerCommentsUpdated($target: ViewerUpdateTrackingTarget!) {\n projectCommentsUpdated(target: $target) {\n id\n type\n comment {\n id\n parent {\n id\n }\n ...ViewerCommentThread\n }\n }\n }\n": types.OnViewerCommentsUpdatedDocument,
|
|
"\n fragment LinkableComment on Comment {\n id\n viewerResources {\n modelId\n versionId\n objectId\n }\n }\n": types.LinkableCommentFragmentDoc,
|
|
"\n fragment ActiveWorkspace_Workspace on Workspace {\n id\n name\n logo\n role\n slug\n }\n": types.ActiveWorkspace_WorkspaceFragmentDoc,
|
|
"\n fragment DiscoverableWorkspace_LimitedWorkspace on LimitedWorkspace {\n id\n name\n logo\n description\n slug\n discoverabilityAutoJoinEnabled\n team {\n totalCount\n items {\n user {\n id\n name\n avatar\n }\n }\n }\n adminTeam {\n user {\n id\n name\n avatar\n }\n }\n }\n": types.DiscoverableWorkspace_LimitedWorkspaceFragmentDoc,
|
|
"\n fragment WorkspaceJoinRequests_LimitedWorkspaceJoinRequest on LimitedWorkspaceJoinRequest {\n id\n status\n workspace {\n id\n name\n logo\n slug\n discoverabilityAutoJoinEnabled\n adminTeam {\n user {\n id\n name\n avatar\n }\n }\n team {\n totalCount\n items {\n user {\n id\n name\n avatar\n }\n }\n }\n }\n }\n": types.WorkspaceJoinRequests_LimitedWorkspaceJoinRequestFragmentDoc,
|
|
"\n fragment WorkspacePlanLimits_Workspace on Workspace {\n id\n slug\n plan {\n name\n }\n }\n": types.WorkspacePlanLimits_WorkspaceFragmentDoc,
|
|
"\n fragment UseWorkspaceInviteManager_PendingWorkspaceCollaborator on PendingWorkspaceCollaborator {\n id\n token\n workspace {\n ...WorkspaceInviteCard_LimitedWorkspace\n }\n user {\n id\n }\n }\n": types.UseWorkspaceInviteManager_PendingWorkspaceCollaboratorFragmentDoc,
|
|
"\n fragment WorkspacesPlan_Workspace on Workspace {\n id\n slug\n plan {\n status\n createdAt\n name\n paymentMethod\n usage {\n projectCount\n modelCount\n }\n }\n seats {\n editors {\n assigned\n available\n }\n viewers {\n assigned\n available\n }\n }\n subscription {\n billingInterval\n currentBillingCycleEnd\n currency\n }\n }\n": types.WorkspacesPlan_WorkspaceFragmentDoc,
|
|
"\n subscription OnWorkspaceProjectsUpdate($slug: String!) {\n workspaceProjectsUpdated(workspaceId: null, workspaceSlug: $slug) {\n projectId\n workspaceId\n type\n project {\n ...ProjectDashboardItem\n }\n }\n }\n ": types.OnWorkspaceProjectsUpdateDocument,
|
|
"\n fragment UseCanCreateWorkspaceProject_Workspace on Workspace {\n permissions {\n canCreateProject {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.UseCanCreateWorkspaceProject_WorkspaceFragmentDoc,
|
|
"\n fragment UseCanMoveProjectIntoWorkspace_Workspace on Workspace {\n permissions {\n canMoveProjectToWorkspace {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.UseCanMoveProjectIntoWorkspace_WorkspaceFragmentDoc,
|
|
"\n fragment UseCanMoveProjectIntoWorkspace_Project on Project {\n permissions {\n canMoveToWorkspace {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.UseCanMoveProjectIntoWorkspace_ProjectFragmentDoc,
|
|
"\n fragment WorkspaceHasCustomDataResidency_Workspace on Workspace {\n id\n defaultRegion {\n id\n name\n }\n }\n": types.WorkspaceHasCustomDataResidency_WorkspaceFragmentDoc,
|
|
"\n query CheckProjectWorkspaceDataResidency($projectId: String!) {\n project(id: $projectId) {\n id\n workspace {\n ...WorkspaceHasCustomDataResidency_Workspace\n }\n }\n }\n": types.CheckProjectWorkspaceDataResidencyDocument,
|
|
"\n fragment WorkspaceSsoStatus_Workspace on Workspace {\n id\n sso {\n provider {\n id\n name\n clientId\n issuerUrl\n }\n session {\n validUntil\n }\n }\n }\n ": types.WorkspaceSsoStatus_WorkspaceFragmentDoc,
|
|
"\n fragment WorkspaceSsoStatus_User on User {\n expiredSsoSessions {\n id\n slug\n }\n }\n ": types.WorkspaceSsoStatus_UserFragmentDoc,
|
|
"\n fragment WorkspaceUsage_Workspace on Workspace {\n id\n slug\n plan {\n usage {\n projectCount\n modelCount\n }\n }\n team {\n totalCount\n }\n teamByRole {\n admins {\n totalCount\n }\n members {\n totalCount\n }\n guests {\n totalCount\n }\n }\n }\n": types.WorkspaceUsage_WorkspaceFragmentDoc,
|
|
"\n mutation UpdateRole($input: WorkspaceRoleUpdateInput!) {\n workspaceMutations {\n updateRole(input: $input) {\n team {\n items {\n id\n role\n }\n }\n }\n }\n }\n": types.UpdateRoleDocument,
|
|
"\n mutation WorkspacesUpdateSeatType($input: WorkspaceUpdateSeatTypeInput!) {\n workspaceMutations {\n updateSeatType(input: $input) {\n team {\n items {\n id\n seatType\n }\n }\n }\n }\n }\n": types.WorkspacesUpdateSeatTypeDocument,
|
|
"\n mutation InviteToWorkspace(\n $workspaceId: String!\n $input: [WorkspaceInviteCreateInput!]!\n ) {\n workspaceMutations {\n invites {\n batchCreate(workspaceId: $workspaceId, input: $input) {\n id\n invitedTeam {\n ...SettingsWorkspacesMembersInvitesTable_PendingWorkspaceCollaborator\n }\n }\n }\n }\n }\n": types.InviteToWorkspaceDocument,
|
|
"\n mutation CreateWorkspace($input: WorkspaceCreateInput!) {\n workspaceMutations {\n create(input: $input) {\n id\n ...SettingsSidebar_Workspace\n }\n }\n }\n": types.CreateWorkspaceDocument,
|
|
"\n mutation ProcessWorkspaceInvite($input: WorkspaceInviteUseInput!) {\n workspaceMutations {\n invites {\n use(input: $input)\n }\n }\n }\n": types.ProcessWorkspaceInviteDocument,
|
|
"\n mutation SetDefaultWorkspaceRegion($workspaceId: String!, $regionKey: String!) {\n workspaceMutations {\n setDefaultRegion(workspaceId: $workspaceId, regionKey: $regionKey) {\n id\n defaultRegion {\n id\n ...SettingsWorkspacesRegionsSelect_ServerRegionItem\n }\n }\n }\n }\n": types.SetDefaultWorkspaceRegionDocument,
|
|
"\n mutation DeleteWorkspaceSsoProvider($workspaceId: String!) {\n workspaceMutations {\n deleteSsoProvider(workspaceId: $workspaceId)\n }\n }\n": types.DeleteWorkspaceSsoProviderDocument,
|
|
"\n mutation SetWorkspaceCreationState($input: WorkspaceCreationStateInput!) {\n workspaceMutations {\n updateCreationState(input: $input)\n }\n }\n": types.SetWorkspaceCreationStateDocument,
|
|
"\n mutation WorkspaceUpdateDomainProtectionMutation($input: WorkspaceUpdateInput!) {\n workspaceMutations {\n update(input: $input) {\n id\n domainBasedMembershipProtectionEnabled\n }\n }\n }\n": types.WorkspaceUpdateDomainProtectionMutationDocument,
|
|
"\n mutation WorkspaceUpdateDiscoverabilityMutation($input: WorkspaceUpdateInput!) {\n workspaceMutations {\n update(input: $input) {\n id\n discoverabilityEnabled\n }\n }\n }\n": types.WorkspaceUpdateDiscoverabilityMutationDocument,
|
|
"\n mutation ApproveWorkspaceJoinRequest($input: ApproveWorkspaceJoinRequestInput!) {\n workspaceJoinRequestMutations {\n approve(input: $input)\n }\n }\n": types.ApproveWorkspaceJoinRequestDocument,
|
|
"\n mutation DenyWorkspaceJoinRequest($input: DenyWorkspaceJoinRequestInput!) {\n workspaceJoinRequestMutations {\n deny(input: $input)\n }\n }\n": types.DenyWorkspaceJoinRequestDocument,
|
|
"\n mutation RequestToJoinWorkspace($input: WorkspaceRequestToJoinInput!) {\n workspaceMutations {\n requestToJoin(input: $input)\n }\n }\n": types.RequestToJoinWorkspaceDocument,
|
|
"\n mutation DismissDiscoverableWorkspace($input: WorkspaceDismissInput!) {\n workspaceMutations {\n dismiss(input: $input)\n }\n }\n": types.DismissDiscoverableWorkspaceDocument,
|
|
"\n mutation WorkspaceUpdateAutoJoinMutation($input: WorkspaceUpdateInput!) {\n workspaceMutations {\n update(input: $input) {\n id\n discoverabilityAutoJoinEnabled\n }\n }\n }\n": types.WorkspaceUpdateAutoJoinMutationDocument,
|
|
"\n mutation WorkspaceUpdateDefaultSeatTypeMutation($input: WorkspaceUpdateInput!) {\n workspaceMutations {\n update(input: $input) {\n id\n defaultSeatType\n }\n }\n }\n": types.WorkspaceUpdateDefaultSeatTypeMutationDocument,
|
|
"\n mutation WorkspaceUpdateExclusiveMutation($input: WorkspaceUpdateInput!) {\n workspaceMutations {\n update(input: $input) {\n id\n isExclusive\n }\n }\n }\n": types.WorkspaceUpdateExclusiveMutationDocument,
|
|
"\n query Workspace($featureName: WorkspaceFeatureName!, $workspaceId: String!) {\n workspace(id: $workspaceId) {\n hasAccessToFeature(featureName: $featureName)\n }\n }\n": types.WorkspaceDocument,
|
|
"\n query WorkspaceAccessCheck($slug: String!) {\n workspaceBySlug(slug: $slug) {\n id\n slug\n }\n activeUser {\n id\n activeWorkspace {\n id\n slug\n }\n }\n }\n": types.WorkspaceAccessCheckDocument,
|
|
"\n query WorkspacePageQuery(\n $workspaceSlug: String!\n $invitesFilter: PendingWorkspaceCollaboratorsFilter\n ) {\n workspaceBySlug(slug: $workspaceSlug) {\n ...WorkspacePage_Workspace\n }\n }\n": types.WorkspacePageQueryDocument,
|
|
"\n query WorkspaceProjectsQuery(\n $workspaceSlug: String!\n $filter: WorkspaceProjectsFilter\n $cursor: String\n ) {\n workspaceBySlug(slug: $workspaceSlug) {\n id\n projects(filter: $filter, cursor: $cursor, limit: 10) {\n ...WorkspaceDashboardProjectList_ProjectCollection\n }\n }\n }\n": types.WorkspaceProjectsQueryDocument,
|
|
"\n query WorkspaceFunctionsQuery($workspaceSlug: String!) {\n ...AutomateFunctionsPageHeader_Query\n workspaceBySlug(slug: $workspaceSlug) {\n id\n name\n automateFunctions {\n items {\n id\n ...AutomationsFunctionsCard_AutomateFunction\n ...AutomateAutomationCreateDialog_AutomateFunction\n }\n }\n }\n }\n": types.WorkspaceFunctionsQueryDocument,
|
|
"\n query WorkspaceInvite(\n $workspaceId: String\n $token: String\n $options: WorkspaceInviteLookupOptions\n ) {\n workspaceInvite(workspaceId: $workspaceId, token: $token, options: $options) {\n ...WorkspaceInviteBanner_PendingWorkspaceCollaborator\n ...WorkspaceInviteBlock_PendingWorkspaceCollaborator\n }\n }\n": types.WorkspaceInviteDocument,
|
|
"\n query ValidateWorkspaceSlug($slug: String!) {\n validateWorkspaceSlug(slug: $slug)\n }\n": types.ValidateWorkspaceSlugDocument,
|
|
"\n query WorkspaceSsoByEmail($email: String!) {\n workspaceSsoByEmail(email: $email) {\n ...AuthSsoLogin_Workspace\n }\n }\n": types.WorkspaceSsoByEmailDocument,
|
|
"\n query WorkspaceSsoCheck($slug: String!) {\n workspaceBySlug(slug: $slug) {\n ...WorkspaceSsoStatus_Workspace\n }\n activeUser {\n ...WorkspaceSsoStatus_User\n }\n }\n": types.WorkspaceSsoCheckDocument,
|
|
"\n query WorkspaceWizard($workspaceId: String!) {\n workspace(id: $workspaceId) {\n id\n ...WorkspaceWizard_Workspace\n }\n }\n": types.WorkspaceWizardDocument,
|
|
"\n query WorkspaceWizardRegion {\n serverInfo {\n ...WorkspaceWizardStepRegion_ServerInfo\n }\n }\n": types.WorkspaceWizardRegionDocument,
|
|
"\n query DiscoverableWorkspaces {\n activeUser {\n id\n discoverableWorkspaces {\n ...DiscoverableWorkspace_LimitedWorkspace\n }\n workspaceJoinRequests {\n items {\n ...WorkspaceJoinRequests_LimitedWorkspaceJoinRequest\n }\n }\n }\n }\n": types.DiscoverableWorkspacesDocument,
|
|
"\n query WorkspacePlan($slug: String!) {\n workspaceBySlug(slug: $slug) {\n ...WorkspacesPlan_Workspace\n }\n }\n": types.WorkspacePlanDocument,
|
|
"\n query activeWorkspace($slug: String!) {\n workspaceBySlug(slug: $slug) {\n ...ActiveWorkspace_Workspace\n }\n }\n": types.ActiveWorkspaceDocument,
|
|
"\n query WorkspaceLastAdminCheck($slug: String!) {\n workspaceBySlug(slug: $slug) {\n teamByRole {\n admins {\n totalCount\n }\n }\n }\n }\n": types.WorkspaceLastAdminCheckDocument,
|
|
"\n query WorkspaceLimits($slug: String!) {\n workspaceBySlug(slug: $slug) {\n ...WorkspacePlanLimits_Workspace\n }\n }\n": types.WorkspaceLimitsDocument,
|
|
"\n query WorkspaceUsage($slug: String!) {\n workspaceBySlug(slug: $slug) {\n ...WorkspaceUsage_Workspace\n }\n }\n": types.WorkspaceUsageDocument,
|
|
"\n query WorkspaceMoveProjectManagerProject($projectId: String!, $workspaceId: String) {\n project(id: $projectId) {\n ...WorkspaceMoveProjectManager_Project\n }\n }\n": types.WorkspaceMoveProjectManagerProjectDocument,
|
|
"\n query WorkspaceMoveProjectManagerWorkspace(\n $workspaceSlug: String!\n $projectId: String\n ) {\n workspaceBySlug(slug: $workspaceSlug) {\n ...WorkspaceMoveProjectManager_Workspace\n }\n }\n": types.WorkspaceMoveProjectManagerWorkspaceDocument,
|
|
"\n query WorkspaceMoveProjectManagerUser(\n $cursor: String\n $filter: UserProjectsFilter\n $projectId: String\n $sortBy: [String!]\n $workspaceId: String\n ) {\n activeUser {\n ...WorkspaceMoveProjectSelectWorkspace_User\n }\n }\n": types.WorkspaceMoveProjectManagerUserDocument,
|
|
"\n query UseCanCreateWorkspace {\n activeUser {\n ...UseCanCreateWorkspace_User\n }\n }\n": types.UseCanCreateWorkspaceDocument,
|
|
"\n subscription onWorkspaceUpdated(\n $workspaceId: String\n $workspaceSlug: String\n $invitesFilter: PendingWorkspaceCollaboratorsFilter\n ) {\n workspaceUpdated(workspaceId: $workspaceId, workspaceSlug: $workspaceSlug) {\n id\n workspace {\n id\n ...WorkspaceDashboard_Workspace\n ...WorkspaceDashboardProjectList_Workspace\n }\n }\n }\n": types.OnWorkspaceUpdatedDocument,
|
|
"\n query LegacyBranchRedirectMetadata($streamId: String!, $branchName: String!) {\n project(id: $streamId) {\n modelByName(name: $branchName) {\n id\n }\n }\n }\n": types.LegacyBranchRedirectMetadataDocument,
|
|
"\n query LegacyViewerCommitRedirectMetadata($streamId: String!, $commitId: String!) {\n project(id: $streamId) {\n version(id: $commitId) {\n id\n model {\n id\n }\n }\n }\n }\n": types.LegacyViewerCommitRedirectMetadataDocument,
|
|
"\n query LegacyViewerStreamRedirectMetadata($streamId: String!) {\n project(id: $streamId) {\n id\n versions(limit: 1) {\n totalCount\n items {\n id\n model {\n id\n }\n }\n }\n }\n }\n": types.LegacyViewerStreamRedirectMetadataDocument,
|
|
"\n query AutoAcceptableWorkspaceInvite(\n $token: String!\n $workspaceId: String!\n $options: WorkspaceInviteLookupOptions\n ) {\n workspaceInvite(token: $token, workspaceId: $workspaceId, options: $options) {\n id\n ...UseWorkspaceInviteManager_PendingWorkspaceCollaborator\n }\n }\n": types.AutoAcceptableWorkspaceInviteDocument,
|
|
"\n query CanViewProjectTokens($projectId: String!) {\n project(id: $projectId) {\n id\n permissions {\n canReadEmbedTokens {\n ...FullPermissionCheckResult\n }\n }\n }\n }\n": types.CanViewProjectTokensDocument,
|
|
"\n query CanViewProjectSettings($projectId: String!) {\n project(id: $projectId) {\n id\n permissions {\n canReadSettings {\n ...FullPermissionCheckResult\n }\n }\n }\n }\n": types.CanViewProjectSettingsDocument,
|
|
"\n query CanViewProjectWebhooks($projectId: String!) {\n project(id: $projectId) {\n id\n permissions {\n canReadWebhooks {\n ...FullPermissionCheckResult\n }\n }\n }\n }\n": types.CanViewProjectWebhooksDocument,
|
|
"\n query ResolveCommentLink($commentId: String!, $projectId: String!) {\n project(id: $projectId) {\n comment(id: $commentId) {\n id\n ...LinkableComment\n }\n }\n }\n": types.ResolveCommentLinkDocument,
|
|
"\n fragment AutomateFunctionPage_AutomateFunction on AutomateFunction {\n id\n name\n description\n logo\n supportedSourceApps\n tags\n ...AutomateFunctionPageHeader_Function\n ...AutomateFunctionPageInfo_AutomateFunction\n ...AutomateAutomationCreateDialog_AutomateFunction\n creator {\n id\n }\n }\n": types.AutomateFunctionPage_AutomateFunctionFragmentDoc,
|
|
"\n query AutomateFunctionPage($functionId: ID!) {\n automateFunction(id: $functionId) {\n ...AutomateFunctionPage_AutomateFunction\n }\n activeUser {\n workspaces {\n items {\n ...AutomateFunctionCreateDialog_Workspace\n ...AutomateFunctionEditDialog_Workspace\n }\n }\n }\n }\n": types.AutomateFunctionPageDocument,
|
|
"\n query AutomateFunctionPageWorkspace($workspaceId: String!) {\n workspace(id: $workspaceId) {\n id\n ...AutomateFunctionPageHeader_Workspace\n }\n }\n": types.AutomateFunctionPageWorkspaceDocument,
|
|
"\n fragment ProjectPageProject on Project {\n id\n createdAt\n modelCount: models(limit: 0) {\n totalCount\n }\n commentThreadCount: commentThreads(limit: 0) {\n totalCount\n }\n workspace {\n id\n permissions {\n canListDashboards {\n ...FullPermissionCheckResult\n }\n }\n }\n permissions {\n canReadSettings {\n ...FullPermissionCheckResult\n }\n canUpdate {\n ...FullPermissionCheckResult\n }\n canMoveToWorkspace {\n ...FullPermissionCheckResult\n }\n }\n ...ProjectPageTeamInternals_Project\n ...ProjectPageProjectHeader\n ...ProjectPageTeamDialog\n ...WorkspaceMoveProjectManager_ProjectBase\n ...ProjectPageSettingsTab_Project\n ...WorkspaceMoveProject_Project\n hasAccessToDashboards: hasAccessToFeature(featureName: dashboards)\n }\n": types.ProjectPageProjectFragmentDoc,
|
|
"\n fragment ProjectPageAutomationPage_Automation on Automation {\n id\n permissions {\n canUpdate {\n ...FullPermissionCheckResult\n }\n }\n ...ProjectPageAutomationHeader_Automation\n ...ProjectPageAutomationFunctions_Automation\n ...ProjectPageAutomationRuns_Automation\n }\n": types.ProjectPageAutomationPage_AutomationFragmentDoc,
|
|
"\n fragment ProjectPageAutomationPage_Project on Project {\n id\n workspaceId\n ...ProjectPageAutomationHeader_Project\n }\n": types.ProjectPageAutomationPage_ProjectFragmentDoc,
|
|
"\n fragment ProjectPageSettingsTab_Project on Project {\n id\n name\n permissions {\n canReadWebhooks {\n ...FullPermissionCheckResult\n }\n canReadEmbedTokens {\n ...FullPermissionCheckResult\n }\n canReadAccIntegrationSettings {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.ProjectPageSettingsTab_ProjectFragmentDoc,
|
|
"\n fragment SettingsServerProjects_ProjectCollection on ProjectCollection {\n totalCount\n items {\n ...SettingsSharedProjects_Project\n }\n }\n": types.SettingsServerProjects_ProjectCollectionFragmentDoc,
|
|
"\n query SettingsServerRegions {\n serverInfo {\n multiRegion {\n regions {\n id\n ...SettingsServerRegionsTable_ServerRegionItem\n }\n availableKeys\n }\n }\n }\n": types.SettingsServerRegionsDocument,
|
|
"\n fragment SettingsWorkspacesGeneral_Workspace on Workspace {\n ...SettingsWorkspacesGeneralEditAvatar_Workspace\n ...SettingsWorkspaceGeneralDeleteDialog_Workspace\n ...SettingsWorkspacesGeneralEditSlugDialog_Workspace\n id\n name\n slug\n description\n logo\n role\n plan {\n status\n name\n }\n embedOptions {\n hideSpeckleBranding\n }\n permissions {\n canEditEmbedOptions {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.SettingsWorkspacesGeneral_WorkspaceFragmentDoc,
|
|
"\n fragment SettingsWorkspacesMembersCounts_Workspace on Workspace {\n id\n role\n invitedTeam {\n id\n }\n teamByRole {\n admins {\n totalCount\n }\n members {\n totalCount\n }\n guests {\n totalCount\n }\n }\n adminWorkspacesJoinRequests(filter: $filter) {\n totalCount\n }\n }\n": types.SettingsWorkspacesMembersCounts_WorkspaceFragmentDoc,
|
|
"\n fragment SettingsWorkspacesProjects_ProjectCollection on ProjectCollection {\n totalCount\n items {\n ...SettingsSharedProjects_Project\n }\n }\n": types.SettingsWorkspacesProjects_ProjectCollectionFragmentDoc,
|
|
"\n fragment SettingsWorkspacesProjects_Workspace on Workspace {\n id\n name\n slug\n plan {\n name\n }\n role\n permissions {\n canCreateProject {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.SettingsWorkspacesProjects_WorkspaceFragmentDoc,
|
|
"\n fragment SettingsWorkspacesRegions_Workspace on Workspace {\n id\n role\n defaultRegion {\n id\n ...SettingsWorkspacesRegionsSelect_ServerRegionItem\n }\n hasAccessToMultiRegion: hasAccessToFeature(\n featureName: workspaceDataRegionSpecificity\n )\n hasProjects: projects(limit: 0) {\n totalCount\n }\n }\n": types.SettingsWorkspacesRegions_WorkspaceFragmentDoc,
|
|
"\n fragment SettingsWorkspacesRegions_ServerInfo on ServerInfo {\n multiRegion {\n regions {\n id\n ...SettingsWorkspacesRegionsSelect_ServerRegionItem\n }\n }\n }\n": types.SettingsWorkspacesRegions_ServerInfoFragmentDoc,
|
|
"\n fragment SettingsWorkspacesSecurity_Workspace on Workspace {\n ...SettingsWorkspacesSecurityDefaultSeat_Workspace\n ...SettingsWorkspacesSecurityDomainManagement_Workspace\n ...SettingsWorkspacesSecurityDiscoverability_Workspace\n ...SettingsWorkspacesSecuritySsoWrapper_Workspace\n ...SettingsWorkspacesSecurityDomainProtection_Workspace\n ...SettingsWorkspacesSecurityWorkspaceCreation_Workspace\n id\n slug\n }\n": types.SettingsWorkspacesSecurity_WorkspaceFragmentDoc,
|
|
"\n fragment WorkspaceDashboards_Dashboard on Dashboard {\n ...DashboardsEditDialog_Dashboard\n id\n name\n createdBy {\n id\n name\n avatar\n }\n createdAt\n updatedAt\n workspace {\n id\n name\n slug\n logo\n }\n permissions {\n canEdit {\n ...FullPermissionCheckResult\n }\n canRead {\n ...FullPermissionCheckResult\n }\n }\n }\n": types.WorkspaceDashboards_DashboardFragmentDoc,
|
|
"\n fragment WorkspacePage_Workspace on Workspace {\n ...WorkspaceDashboard_Workspace\n ...WorkspaceSidebar_Workspace\n }\n": types.WorkspacePage_WorkspaceFragmentDoc
|
|
};
|
|
export function graphql(source) {
|
|
return documents[source] ?? {};
|
|
}
|
|
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdxbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0ICogYXMgdHlwZXMgZnJvbSAnLi9ncmFwaHFsJztcbmltcG9ydCB0eXBlIHsgVHlwZWREb2N1bWVudE5vZGUgYXMgRG9jdW1lbnROb2RlIH0gZnJvbSAnQGdyYXBocWwtdHlwZWQtZG9jdW1lbnQtbm9kZS9jb3JlJztcblxuLyoqXG4gKiBNYXAgb2YgYWxsIEdyYXBoUUwgb3BlcmF0aW9ucyBpbiB0aGUgcHJvamVjdC5cbiAqXG4gKiBUaGlzIG1hcCBoYXMgc2V2ZXJhbCBwZXJmb3JtYW5jZSBkaXNhZHZhbnRhZ2VzOlxuICogMS4gSXQgaXMgbm90IHRyZWUtc2hha2VhYmxlLCBzbyBpdCB3aWxsIGluY2x1ZGUgYWxsIG9wZXJhdGlvbnMgaW4gdGhlIHByb2plY3QuXG4gKiAyLiBJdCBpcyBub3QgbWluaWZpYWJsZSwgc28gdGhlIHN0cmluZyBvZiBhIEdyYXBoUUwgcXVlcnkgd2lsbCBiZSBtdWx0aXBsZSB0aW1lcyBpbnNpZGUgdGhlIGJ1bmRsZS5cbiAqIDMuIEl0IGRvZXMgbm90IHN1cHBvcnQgZGVhZCBjb2RlIGVsaW1pbmF0aW9uLCBzbyBpdCB3aWxsIGFkZCB1bnVzZWQgb3BlcmF0aW9ucy5cbiAqXG4gKiBUaGVyZWZvcmUgaXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYmFiZWwgb3Igc3djIHBsdWdpbiBmb3IgcHJvZHVjdGlvbi5cbiAqIExlYXJuIG1vcmUgYWJvdXQgaXQgaGVyZTogaHR0cHM6Ly90aGUtZ3VpbGQuZGV2L2dyYXBocWwvY29kZWdlbi9wbHVnaW5zL3ByZXNldHMvcHJlc2V0LWNsaWVudCNyZWR1Y2luZy1idW5kbGUtc2l6ZVxuICovXG50eXBlIERvY3VtZW50cyA9IHtcbiAgICBcIlxcbiAgZnJhZ21lbnQgQXV0aExvZ2luV2l0aEVtYWlsQmxvY2tfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvciBvbiBQZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yIHtcXG4gICAgaWRcXG4gICAgZW1haWxcXG4gICAgdXNlciB7XFxuICAgICAgaWRcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQXV0aExvZ2luV2l0aEVtYWlsQmxvY2tfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBxdWVyeSBBdXRoUmVnaXN0ZXJQYW5lbFdvcmtzcGFjZUludml0ZSgkdG9rZW46IFN0cmluZykge1xcbiAgICB3b3Jrc3BhY2VJbnZpdGUodG9rZW46ICR0b2tlbikge1xcbiAgICAgIGlkXFxuICAgICAgLi4uQXV0aFdvcmtzcGFjZUludml0ZUhlYWRlcl9QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkF1dGhSZWdpc3RlclBhbmVsV29ya3NwYWNlSW52aXRlRG9jdW1lbnQsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNlcnZlclRlcm1zT2ZTZXJ2aWNlUHJpdmFjeVBvbGljeUZyYWdtZW50IG9uIFNlcnZlckluZm8ge1xcbiAgICB0ZXJtc09mU2VydmljZVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2VydmVyVGVybXNPZlNlcnZpY2VQcml2YWN5UG9saWN5RnJhZ21lbnRGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgQXV0aFdvcmtzcGFjZUludml0ZUhlYWRlcl9QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yIG9uIFBlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3Ige1xcbiAgICBpZFxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIGVtYWlsXFxuICAgIHVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgLi4uTGltaXRlZFVzZXJBdmF0YXJcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQXV0aFdvcmtzcGFjZUludml0ZUhlYWRlcl9QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IEF1dGhTc29Mb2dpbl9Xb3Jrc3BhY2Ugb24gTGltaXRlZFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHNsdWdcXG4gICAgbmFtZVxcbiAgICBsb2dvXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5BdXRoU3NvTG9naW5fV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IEF1dGhTdGF0ZWdpZXNTZXJ2ZXJJbmZvRnJhZ21lbnQgb24gU2VydmVySW5mbyB7XFxuICAgIGF1dGhTdHJhdGVnaWVzIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgICB1cmxcXG4gICAgfVxcbiAgICAuLi5BdXRoVGhpcmRQYXJ0eUxvZ2luQnV0dG9uT0lEQ19TZXJ2ZXJJbmZvXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5BdXRoU3RhdGVnaWVzU2VydmVySW5mb0ZyYWdtZW50RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IEF1dGhUaGlyZFBhcnR5TG9naW5CdXR0b25PSURDX1NlcnZlckluZm8gb24gU2VydmVySW5mbyB7XFxuICAgIGF1dGhTdHJhdGVnaWVzIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQXV0aFRoaXJkUGFydHlMb2dpbkJ1dHRvbk9pZGNfU2VydmVySW5mb0ZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBBdXRvbWF0ZUF1dG9tYXRpb25DcmVhdGVEaWFsb2dfQXV0b21hdGVGdW5jdGlvbiBvbiBBdXRvbWF0ZUZ1bmN0aW9uIHtcXG4gICAgaWRcXG4gICAgLi4uQXV0b21hdGlvbnNGdW5jdGlvbnNDYXJkX0F1dG9tYXRlRnVuY3Rpb25cXG4gICAgLi4uQXV0b21hdGVBdXRvbWF0aW9uQ3JlYXRlRGlhbG9nRnVuY3Rpb25QYXJhbWV0ZXJzU3RlcF9BdXRvbWF0ZUZ1bmN0aW9uXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5BdXRvbWF0ZUF1dG9tYXRpb25DcmVhdGVEaWFsb2dfQXV0b21hdGVGdW5jdGlvbkZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBBdXRvbWF0ZUF1dG9tYXRpb25DcmVhdGVEaWFsb2dGdW5jdGlvblBhcmFtZXRlcnNTdGVwX0F1dG9tYXRlRnVuY3Rpb24gb24gQXV0b21hdGVGdW5jdGlvbiB7XFxuICAgIGlkXFxuICAgIHJlbGVhc2VzKGxpbWl0OiAxKSB7XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGlucHV0U2NoZW1hXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5BdXRvbWF0ZUF1dG9tYXRpb25DcmVhdGVEaWFsb2dGdW5jdGlvblBhcmFtZXRlcnNTdGVwX0F1dG9tYXRlRnVuY3Rpb25GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgcXVlcnkgQXV0b21hdGlvbkNyZWF0ZURpYWxvZ0Z1bmN0aW9uc1NlYXJjaChcXG4gICAgJHdvcmtzcGFjZUlkOiBTdHJpbmchXFxuICAgICRmaWx0ZXI6IEF1dG9tYXRlRnVuY3Rpb25zRmlsdGVyXFxuICAgICRjdXJzb3I6IFN0cmluZyA9IG51bGxcXG4gICkge1xcbiAgICB3b3Jrc3BhY2UoaWQ6ICR3b3Jrc3BhY2VJZCkge1xcbiAgICAgIGF1dG9tYXRlRnVuY3Rpb25zKGxpbWl0OiAyMCwgY3Vyc29yOiAkY3Vyc29yLCBmaWx0ZXI6ICRmaWx0ZXIpIHtcXG4gICAgICAgIGN1cnNvclxcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICAuLi5BdXRvbWF0ZUF1dG9tYXRpb25DcmVhdGVEaWFsb2dfQXV0b21hdGVGdW5jdGlvblxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQXV0b21hdGlvbkNyZWF0ZURpYWxvZ0Z1bmN0aW9uc1NlYXJjaERvY3VtZW50LFxuICAgIFwiXFxuICBmcmFnbWVudCBBdXRvbWF0aW9uc0Z1bmN0aW9uc0NhcmRfQXV0b21hdGVGdW5jdGlvbiBvbiBBdXRvbWF0ZUZ1bmN0aW9uIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBpc0ZlYXR1cmVkXFxuICAgIGRlc2NyaXB0aW9uXFxuICAgIGxvZ29cXG4gICAgcmVwbyB7XFxuICAgICAgaWRcXG4gICAgICB1cmxcXG4gICAgICBvd25lclxcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQXV0b21hdGlvbnNGdW5jdGlvbnNDYXJkX0F1dG9tYXRlRnVuY3Rpb25GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgQXV0b21hdGVGdW5jdGlvbkNyZWF0ZURpYWxvZ19Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBzbHVnXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5BdXRvbWF0ZUZ1bmN0aW9uQ3JlYXRlRGlhbG9nX1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBBdXRvbWF0ZUZ1bmN0aW9uRWRpdERpYWxvZ19Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQXV0b21hdGVGdW5jdGlvbkVkaXREaWFsb2dfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IEF1dG9tYXRlRnVuY3Rpb25DcmVhdGVEaWFsb2dEb25lU3RlcF9BdXRvbWF0ZUZ1bmN0aW9uIG9uIEF1dG9tYXRlRnVuY3Rpb24ge1xcbiAgICBpZFxcbiAgICByZXBvIHtcXG4gICAgICBpZFxcbiAgICAgIHVybFxcbiAgICAgIG93bmVyXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIC4uLkF1dG9tYXRpb25zRnVuY3Rpb25zQ2FyZF9BdXRvbWF0ZUZ1bmN0aW9uXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5BdXRvbWF0ZUZ1bmN0aW9uQ3JlYXRlRGlhbG9nRG9uZVN0ZXBfQXV0b21hdGVGdW5jdGlvbkZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBBdXRvbWF0ZUZ1bmN0aW9uQ3JlYXRlRGlhbG9nVGVtcGxhdGVTdGVwX0F1dG9tYXRlRnVuY3Rpb25UZW1wbGF0ZSBvbiBBdXRvbWF0ZUZ1bmN0aW9uVGVtcGxhdGUge1xcbiAgICBpZFxcbiAgICB0aXRsZVxcbiAgICBsb2dvXFxuICAgIHVybFxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQXV0b21hdGVGdW5jdGlvbkNyZWF0ZURpYWxvZ1RlbXBsYXRlU3RlcF9BdXRvbWF0ZUZ1bmN0aW9uVGVtcGxhdGVGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgQXV0b21hdGVGdW5jdGlvblBhZ2VIZWFkZXJfRnVuY3Rpb24gb24gQXV0b21hdGVGdW5jdGlvbiB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgbG9nb1xcbiAgICByZXBvIHtcXG4gICAgICBpZFxcbiAgICAgIHVybFxcbiAgICAgIG93bmVyXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIHJlbGVhc2VzKGxpbWl0OiAxKSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICAgIHdvcmtzcGFjZUlkc1xcbiAgfVxcblxcbiAgZnJhZ21lbnQgQXV0b21hdGVGdW5jdGlvblBhZ2VIZWFkZXJfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgc2x1Z1xcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQXV0b21hdGVGdW5jdGlvblBhZ2VIZWFkZXJfRnVuY3Rpb25GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgQXV0b21hdGVGdW5jdGlvblBhZ2VJbmZvX0F1dG9tYXRlRnVuY3Rpb24gb24gQXV0b21hdGVGdW5jdGlvbiB7XFxuICAgIGlkXFxuICAgIHJlcG8ge1xcbiAgICAgIGlkXFxuICAgICAgdXJsXFxuICAgICAgb3duZXJcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gICAgZGVzY3JpcHRpb25cXG4gICAgcmVsZWFzZXMobGltaXQ6IDEpIHtcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICBpZFxcbiAgICAgICAgaW5wdXRTY2hlbWFcXG4gICAgICAgIGNyZWF0ZWRBdFxcbiAgICAgICAgY29tbWl0SWRcXG4gICAgICAgIC4uLkF1dG9tYXRlRnVuY3Rpb25QYWdlUGFyYW1ldGVyc0RpYWxvZ19BdXRvbWF0ZUZ1bmN0aW9uUmVsZWFzZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQXV0b21hdGVGdW5jdGlvblBhZ2VJbmZvX0F1dG9tYXRlRnVuY3Rpb25GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgQXV0b21hdGVGdW5jdGlvblBhZ2VQYXJhbWV0ZXJzRGlhbG9nX0F1dG9tYXRlRnVuY3Rpb25SZWxlYXNlIG9uIEF1dG9tYXRlRnVuY3Rpb25SZWxlYXNlIHtcXG4gICAgaWRcXG4gICAgaW5wdXRTY2hlbWFcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkF1dG9tYXRlRnVuY3Rpb25QYWdlUGFyYW1ldGVyc0RpYWxvZ19BdXRvbWF0ZUZ1bmN0aW9uUmVsZWFzZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBBdXRvbWF0ZUZ1bmN0aW9uc1BhZ2VIZWFkZXJfUXVlcnkgb24gUXVlcnkge1xcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICBpZFxcbiAgICAgIHJvbGVcXG4gICAgICBhdXRvbWF0ZUluZm8ge1xcbiAgICAgICAgaGFzQXV0b21hdGVHaXRodWJBcHBcXG4gICAgICAgIGF2YWlsYWJsZUdpdGh1Yk9yZ3NcXG4gICAgICB9XFxuICAgIH1cXG4gICAgc2VydmVySW5mbyB7XFxuICAgICAgYXV0b21hdGUge1xcbiAgICAgICAgYXZhaWxhYmxlRnVuY3Rpb25UZW1wbGF0ZXMge1xcbiAgICAgICAgICAuLi5BdXRvbWF0ZUZ1bmN0aW9uQ3JlYXRlRGlhbG9nVGVtcGxhdGVTdGVwX0F1dG9tYXRlRnVuY3Rpb25UZW1wbGF0ZVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQXV0b21hdGVGdW5jdGlvbnNQYWdlSGVhZGVyX1F1ZXJ5RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IEF1dG9tYXRlUnVuc1RyaWdnZXJTdGF0dXNfVHJpZ2dlcmVkQXV0b21hdGlvbnNTdGF0dXMgb24gVHJpZ2dlcmVkQXV0b21hdGlvbnNTdGF0dXMge1xcbiAgICBpZFxcbiAgICAuLi5UcmlnZ2VyZWRBdXRvbWF0aW9uc1N0YXR1c1N1bW1hcnlcXG4gICAgLi4uQXV0b21hdGVSdW5zVHJpZ2dlclN0YXR1c0RpYWxvZ19UcmlnZ2VyZWRBdXRvbWF0aW9uc1N0YXR1c1xcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQXV0b21hdGVSdW5zVHJpZ2dlclN0YXR1c19UcmlnZ2VyZWRBdXRvbWF0aW9uc1N0YXR1c0ZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBBdXRvbWF0ZVJ1bnNUcmlnZ2VyU3RhdHVzRGlhbG9nX1RyaWdnZXJlZEF1dG9tYXRpb25zU3RhdHVzIG9uIFRyaWdnZXJlZEF1dG9tYXRpb25zU3RhdHVzIHtcXG4gICAgaWRcXG4gICAgYXV0b21hdGlvblJ1bnMge1xcbiAgICAgIGlkXFxuICAgICAgLi4uQXV0b21hdGVSdW5zVHJpZ2dlclN0YXR1c0RpYWxvZ1J1bnNSb3dzX0F1dG9tYXRlUnVuXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkF1dG9tYXRlUnVuc1RyaWdnZXJTdGF0dXNEaWFsb2dfVHJpZ2dlcmVkQXV0b21hdGlvbnNTdGF0dXNGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgQXV0b21hdGVSdW5zVHJpZ2dlclN0YXR1c0RpYWxvZ0Z1bmN0aW9uUnVuX0F1dG9tYXRlRnVuY3Rpb25SdW4gb24gQXV0b21hdGVGdW5jdGlvblJ1biB7XFxuICAgIGlkXFxuICAgIHJlc3VsdHNcXG4gICAgc3RhdHVzXFxuICAgIHN0YXR1c01lc3NhZ2VcXG4gICAgY29udGV4dFZpZXdcXG4gICAgZnVuY3Rpb24ge1xcbiAgICAgIGlkXFxuICAgICAgbG9nb1xcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgICBjcmVhdGVkQXRcXG4gICAgdXBkYXRlZEF0XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5BdXRvbWF0ZVJ1bnNUcmlnZ2VyU3RhdHVzRGlhbG9nRnVuY3Rpb25SdW5fQXV0b21hdGVGdW5jdGlvblJ1bkZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBBdXRvbWF0ZVJ1bnNUcmlnZ2VyU3RhdHVzRGlhbG9nUnVuc1Jvd3NfQXV0b21hdGVSdW4gb24gQXV0b21hdGVSdW4ge1xcbiAgICBpZFxcbiAgICBmdW5jdGlvblJ1bnMge1xcbiAgICAgIGlkXFxuICAgICAgLi4uQXV0b21hdGVSdW5zVHJpZ2dlclN0YXR1c0RpYWxvZ0Z1bmN0aW9uUnVuX0F1dG9tYXRlRnVuY3Rpb25SdW5cXG4gICAgfVxcbiAgICAuLi5BdXRvbWF0aW9uc1N0YXR1c09yZGVyZWRSdW5zX0F1dG9tYXRpb25SdW5cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkF1dG9tYXRlUnVuc1RyaWdnZXJTdGF0dXNEaWFsb2dSdW5zUm93c19BdXRvbWF0ZVJ1bkZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBBdXRvbWF0ZVZpZXdlclBhbmVsX0F1dG9tYXRlUnVuIG9uIEF1dG9tYXRlUnVuIHtcXG4gICAgaWRcXG4gICAgZnVuY3Rpb25SdW5zIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLkF1dG9tYXRlVmlld2VyUGFuZWxGdW5jdGlvblJ1blJvd19BdXRvbWF0ZUZ1bmN0aW9uUnVuXFxuICAgIH1cXG4gICAgLi4uQXV0b21hdGlvbnNTdGF0dXNPcmRlcmVkUnVuc19BdXRvbWF0aW9uUnVuXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5BdXRvbWF0ZVZpZXdlclBhbmVsX0F1dG9tYXRlUnVuRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IEF1dG9tYXRlVmlld2VyUGFuZWxGdW5jdGlvblJ1blJvd19BdXRvbWF0ZUZ1bmN0aW9uUnVuIG9uIEF1dG9tYXRlRnVuY3Rpb25SdW4ge1xcbiAgICBpZFxcbiAgICByZXN1bHRzXFxuICAgIHN0YXR1c1xcbiAgICBzdGF0dXNNZXNzYWdlXFxuICAgIGNvbnRleHRWaWV3XFxuICAgIGZ1bmN0aW9uIHtcXG4gICAgICBpZFxcbiAgICAgIGxvZ29cXG4gICAgICBuYW1lXFxuICAgIH1cXG4gICAgY3JlYXRlZEF0XFxuICAgIHVwZGF0ZWRBdFxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQXV0b21hdGVWaWV3ZXJQYW5lbEZ1bmN0aW9uUnVuUm93X0F1dG9tYXRlRnVuY3Rpb25SdW5GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgQmlsbGluZ0FsZXJ0X1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICByb2xlXFxuICAgIHNsdWdcXG4gICAgcGxhbiB7XFxuICAgICAgbmFtZVxcbiAgICAgIHN0YXR1c1xcbiAgICAgIGNyZWF0ZWRBdFxcbiAgICB9XFxuICAgIHN1YnNjcmlwdGlvbiB7XFxuICAgICAgYmlsbGluZ0ludGVydmFsXFxuICAgICAgY3VycmVudEJpbGxpbmdDeWNsZUVuZFxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5CaWxsaW5nQWxlcnRfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IENvbW1vbk1vZGVsU2VsZWN0b3JNb2RlbCBvbiBNb2RlbCB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkNvbW1vbk1vZGVsU2VsZWN0b3JNb2RlbEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBxdWVyeSBEYXNoYm9hcmRTaWRlYmFyIHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgaWRcXG4gICAgICBhY3RpdmVXb3Jrc3BhY2Uge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHJvbGVcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkRhc2hib2FyZFNpZGViYXJEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgU2lkZWJhclBlcm1pc3Npb25zKCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICAgIGNhbkxpc3REYXNoYm9hcmRzIHtcXG4gICAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2lkZWJhclBlcm1pc3Npb25zRG9jdW1lbnQsXG4gICAgXCJcXG4gIGZyYWdtZW50IERhc2hib2FyZHNDYXJkX0Rhc2hib2FyZCBvbiBEYXNoYm9hcmQge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGNyZWF0ZWRBdFxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgIH1cXG4gICAgY3JlYXRlZEJ5IHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgICBhdmF0YXJcXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuRGVsZXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkRhc2hib2FyZHNDYXJkX0Rhc2hib2FyZEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBEYXNoYm9hcmRzRWRpdERpYWxvZ19EYXNoYm9hcmQgb24gRGFzaGJvYXJkIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkRhc2hib2FyZHNFZGl0RGlhbG9nX0Rhc2hib2FyZEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBxdWVyeSBEYXNoYm9hcmRzTGlzdENhbkNyZWF0ZURhc2hib2FyZHMoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgcGVybWlzc2lvbnMge1xcbiAgICAgICAgY2FuQ3JlYXRlRGFzaGJvYXJkcyB7XFxuICAgICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkRhc2hib2FyZHNMaXN0Q2FuQ3JlYXRlRGFzaGJvYXJkc0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBEYXNoYm9hcmRzU2hhckRpYWxvZ1Blcm1pc3Npb25zKCRpZDogU3RyaW5nISkge1xcbiAgICBkYXNoYm9hcmQoaWQ6ICRpZCkge1xcbiAgICAgIGlkXFxuICAgICAgc2hhcmVMaW5rIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBjb250ZW50XFxuICAgICAgICByZXZva2VkXFxuICAgICAgfVxcbiAgICAgIHdvcmtzcGFjZSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgcm9sZVxcbiAgICAgIH1cXG4gICAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgICBjYW5DcmVhdGVUb2tlbiB7XFxuICAgICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkRhc2hib2FyZHNTaGFyRGlhbG9nUGVybWlzc2lvbnNEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gRGFzaGJvYXJkc1NoYXJlVG9rZW4oJGRhc2hib2FyZElkOiBTdHJpbmchKSB7XFxuICAgIGRhc2hib2FyZE11dGF0aW9ucyB7XFxuICAgICAgc2hhcmUoZGFzaGJvYXJkSWQ6ICRkYXNoYm9hcmRJZCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHJldm9rZWRcXG4gICAgICAgIGNvbnRlbnRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkRhc2hib2FyZHNTaGFyZVRva2VuRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIERhc2hib2FyZHNTaGFyZUVuYWJsZVRva2VuKCRpbnB1dDogRGFzaGJvYXJkU2hhcmVJbnB1dCEpIHtcXG4gICAgZGFzaGJvYXJkTXV0YXRpb25zIHtcXG4gICAgICBlbmFibGVTaGFyZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgcmV2b2tlZFxcbiAgICAgICAgY29udGVudFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuRGFzaGJvYXJkc1NoYXJlRW5hYmxlVG9rZW5Eb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gRGFzaGJvYXJkc1NoYXJlRGlzYWJsZVRva2VuKCRpbnB1dDogRGFzaGJvYXJkU2hhcmVJbnB1dCEpIHtcXG4gICAgZGFzaGJvYXJkTXV0YXRpb25zIHtcXG4gICAgICBkaXNhYmxlU2hhcmUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHJldm9rZWRcXG4gICAgICAgIGNvbnRlbnRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkRhc2hib2FyZHNTaGFyZURpc2FibGVUb2tlbkRvY3VtZW50LFxuICAgIFwiXFxuICBmcmFnbWVudCBGb3JtU2VsZWN0TW9kZWxzX01vZGVsIG9uIE1vZGVsIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuRm9ybVNlbGVjdE1vZGVsc19Nb2RlbEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBGb3JtU2VsZWN0UHJvamVjdHNfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuRm9ybVNlbGVjdFByb2plY3RzX1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgRm9ybVNlbGVjdFNhdmVkVmlld19TYXZlZFZpZXcgb24gU2F2ZWRWaWV3IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICB0aHVtYm5haWxVcmxcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkZvcm1TZWxlY3RTYXZlZFZpZXdfU2F2ZWRWaWV3RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIHF1ZXJ5IEZvcm1TZWxlY3RTYXZlZFZpZXdfU2F2ZWRWaWV3cyhcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkaW5wdXQ6IFByb2plY3RTYXZlZFZpZXdzSW5wdXQhXFxuICApIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgc2F2ZWRWaWV3cyhpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLkZvcm1TZWxlY3RTYXZlZFZpZXdfU2F2ZWRWaWV3XFxuICAgICAgICB9XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBjdXJzb3JcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkZvcm1TZWxlY3RTYXZlZFZpZXdfU2F2ZWRWaWV3c0RvY3VtZW50LFxuICAgIFwiXFxuICBmcmFnbWVudCBGb3JtU2VsZWN0U2F2ZWRWaWV3R3JvdXBfU2F2ZWRWaWV3R3JvdXAgb24gU2F2ZWRWaWV3R3JvdXAge1xcbiAgICBpZFxcbiAgICB0aXRsZVxcbiAgICBpc1VuZ3JvdXBlZFZpZXdzR3JvdXBcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkZvcm1TZWxlY3RTYXZlZFZpZXdHcm91cF9TYXZlZFZpZXdHcm91cEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBxdWVyeSBGb3JtU2VsZWN0U2F2ZWRWaWV3R3JvdXBfU2F2ZWRWaWV3R3JvdXBzKFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRpbnB1dDogU2F2ZWRWaWV3R3JvdXBzSW5wdXQhXFxuICApIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgc2F2ZWRWaWV3R3JvdXBzKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uRm9ybVNlbGVjdFNhdmVkVmlld0dyb3VwX1NhdmVkVmlld0dyb3VwXFxuICAgICAgICB9XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBjdXJzb3JcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkZvcm1TZWxlY3RTYXZlZFZpZXdHcm91cF9TYXZlZFZpZXdHcm91cHNEb2N1bWVudCxcbiAgICBcIlxcbiAgZnJhZ21lbnQgRm9ybVVzZXJzU2VsZWN0SXRlbSBvbiBMaW1pdGVkVXNlciB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgYXZhdGFyXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Gb3JtVXNlcnNTZWxlY3RJdGVtRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IEhlYWRlcldvcmtzcGFjZVN3aXRjaGVyV29ya3NwYWNlTGlzdEl0ZW1fV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgbG9nb1xcbiAgICByb2xlXFxuICAgIHNsdWdcXG4gICAgY3JlYXRpb25TdGF0ZSB7XFxuICAgICAgY29tcGxldGVkXFxuICAgIH1cXG4gICAgcGxhbiB7XFxuICAgICAgbmFtZVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5IZWFkZXJXb3Jrc3BhY2VTd2l0Y2hlcldvcmtzcGFjZUxpc3RJdGVtX1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VTd2l0Y2hlckFjdGl2ZVdvcmtzcGFjZV9MaW1pdGVkV29ya3NwYWNlIG9uIExpbWl0ZWRXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGxvZ29cXG4gICAgc2x1Z1xcbiAgICByb2xlXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Xb3Jrc3BhY2VTd2l0Y2hlckFjdGl2ZVdvcmtzcGFjZV9MaW1pdGVkV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZVN3aXRjaGVyQWN0aXZlV29ya3NwYWNlX1VzZXIgb24gVXNlciB7XFxuICAgIGlkXFxuICAgIGFjdGl2ZVdvcmtzcGFjZSB7XFxuICAgICAgLi4uV29ya3NwYWNlU3dpdGNoZXJBY3RpdmVXb3Jrc3BhY2VfTGltaXRlZFdvcmtzcGFjZVxcbiAgICB9XFxuICAgIGV4cGlyZWRTc29TZXNzaW9ucyB7XFxuICAgICAgaWRcXG4gICAgICAuLi5IZWFkZXJXb3Jrc3BhY2VTd2l0Y2hlckhlYWRlckV4cGlyZWRTc29fTGltaXRlZFdvcmtzcGFjZVxcbiAgICB9XFxuICAgIGRpc2NvdmVyYWJsZVdvcmtzcGFjZXMge1xcbiAgICAgIGlkXFxuICAgIH1cXG4gICAgd29ya3NwYWNlSm9pblJlcXVlc3RzKGZpbHRlcjogJGpvaW5SZXF1ZXN0RmlsdGVyKSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Xb3Jrc3BhY2VTd2l0Y2hlckFjdGl2ZVdvcmtzcGFjZV9Vc2VyRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IEhlYWRlcldvcmtzcGFjZVN3aXRjaGVySGVhZGVyRXhwaXJlZFNzb19MaW1pdGVkV29ya3NwYWNlIG9uIExpbWl0ZWRXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBzbHVnXFxuICAgIG5hbWVcXG4gICAgbG9nb1xcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuSGVhZGVyV29ya3NwYWNlU3dpdGNoZXJIZWFkZXJFeHBpcmVkU3NvX0xpbWl0ZWRXb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgSGVhZGVyV29ya3NwYWNlU3dpdGNoZXJIZWFkZXJXb3Jrc3BhY2VfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIC4uLkludml0ZURpYWxvZ1dvcmtzcGFjZV9Xb3Jrc3BhY2VcXG4gICAgaWRcXG4gICAgbG9nb1xcbiAgICBuYW1lXFxuICAgIHJvbGVcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkludml0ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHBsYW4ge1xcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgICB0ZWFtIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkhlYWRlcldvcmtzcGFjZVN3aXRjaGVySGVhZGVyV29ya3NwYWNlX1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBIZWFkZXJOYXZTaGFyZV9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICB2aXNpYmlsaXR5XFxuICAgIC4uLlByb2plY3RzTW9kZWxQYWdlRW1iZWRfUHJvamVjdFxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuSGVhZGVyTmF2U2hhcmVfUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBIZWFkZXJOYXZOb3RpZmljYXRpb25zUHJvamVjdEludml0ZV9QZW5kaW5nU3RyZWFtQ29sbGFib3JhdG9yIG9uIFBlbmRpbmdTdHJlYW1Db2xsYWJvcmF0b3Ige1xcbiAgICBpZFxcbiAgICBpbnZpdGVkQnkge1xcbiAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgIH1cXG4gICAgcHJvamVjdElkXFxuICAgIHByb2plY3ROYW1lXFxuICAgIHRva2VuXFxuICAgIHdvcmtzcGFjZVNsdWdcXG4gICAgdXNlciB7XFxuICAgICAgaWRcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuSGVhZGVyTmF2Tm90aWZpY2F0aW9uc1Byb2plY3RJbnZpdGVfUGVuZGluZ1N0cmVhbUNvbGxhYm9yYXRvckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBIZWFkZXJOYXZOb3RpZmljYXRpb25zV29ya3NwYWNlSW52aXRlX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3Igb24gUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvciB7XFxuICAgIGlkXFxuICAgIGludml0ZWRCeSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5MaW1pdGVkVXNlckF2YXRhclxcbiAgICB9XFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gICAgdG9rZW5cXG4gICAgdXNlciB7XFxuICAgICAgaWRcXG4gICAgfVxcbiAgICAuLi5Vc2VXb3Jrc3BhY2VJbnZpdGVNYW5hZ2VyX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3JcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkhlYWRlck5hdk5vdGlmaWNhdGlvbnNXb3Jrc3BhY2VJbnZpdGVfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBBY2NJbnRlZ3JhdGlvbkZvbGRlck5vZGVfQWNjRm9sZGVyIG9uIEFjY0ZvbGRlciB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgY29udGVudHMge1xcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBuYW1lXFxuICAgICAgICBsYXRlc3RWZXJzaW9uIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgbmFtZVxcbiAgICAgICAgICB2ZXJzaW9uTnVtYmVyXFxuICAgICAgICAgIGZpbGVUeXBlXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICAgIGNoaWxkcmVuIHtcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICBpZFxcbiAgICAgICAgbmFtZVxcbiAgICAgICAgY2hpbGRyZW4ge1xcbiAgICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICBuYW1lXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIGNvbnRlbnRzIHtcXG4gICAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgbmFtZVxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5BY2NJbnRlZ3JhdGlvbkZvbGRlck5vZGVfQWNjRm9sZGVyRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFN5bmNTdGF0dXNNb2RlbEl0ZW1fQWNjU3luY0l0ZW0gb24gQWNjU3luY0l0ZW0ge1xcbiAgICBpZFxcbiAgICBzdGF0dXNcXG4gICAgdXBkYXRlZEF0XFxuICAgIGFjY0ZpbGVWZXJzaW9uSW5kZXhcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlN5bmNTdGF0dXNNb2RlbEl0ZW1fQWNjU3luY0l0ZW1GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NQcm9qZWN0SW50ZWdyYXRpb25zQWN0aW9uc01lbnVfQWNjU3luY0l0ZW0gb24gQWNjU3luY0l0ZW0ge1xcbiAgICBpZFxcbiAgICBzdGF0dXNcXG4gICAgcHJvamVjdCB7XFxuICAgICAgaWRcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2V0dGluZ3NQcm9qZWN0SW50ZWdyYXRpb25zQWN0aW9uc01lbnVfQWNjU3luY0l0ZW1GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgSW52aXRlRGlhbG9nV29ya3NwYWNlX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHNsdWdcXG4gICAgZG9tYWluQmFzZWRNZW1iZXJzaGlwUHJvdGVjdGlvbkVuYWJsZWRcXG4gICAgZGVmYXVsdFNlYXRUeXBlXFxuICAgIGRvbWFpbnMge1xcbiAgICAgIGRvbWFpblxcbiAgICAgIGlkXFxuICAgIH1cXG4gICAgc2VhdHMge1xcbiAgICAgIGVkaXRvcnMge1xcbiAgICAgICAgYXZhaWxhYmxlXFxuICAgICAgfVxcbiAgICB9XFxuICAgIC4uLkludml0ZURpYWxvZ1NoYXJlZFNlbGVjdFVzZXJzX1dvcmtzcGFjZVxcbiAgICAuLi5Xb3Jrc3BhY2VzUGxhbl9Xb3Jrc3BhY2VcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkludml0ZURpYWxvZ1dvcmtzcGFjZV9Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgSW52aXRlRGlhbG9nUHJvamVjdF9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHdvcmtzcGFjZUlkXFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgICAgcm9sZVxcbiAgICAgIGRvbWFpbkJhc2VkTWVtYmVyc2hpcFByb3RlY3Rpb25FbmFibGVkXFxuICAgICAgZG9tYWlucyB7XFxuICAgICAgICBkb21haW5cXG4gICAgICAgIGlkXFxuICAgICAgfVxcbiAgICAgIC4uLldvcmtzcGFjZXNQbGFuX1dvcmtzcGFjZVxcbiAgICB9XFxuICAgIC4uLkludml0ZURpYWxvZ1Byb2plY3RSb3dfUHJvamVjdFxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuSW52aXRlRGlhbG9nUHJvamVjdF9Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IEludml0ZURpYWxvZ1Byb2plY3RSb3dfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgd29ya3NwYWNlSWRcXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIHJvbGVcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuSW52aXRlRGlhbG9nUHJvamVjdFJvd19Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIHF1ZXJ5IEludml0ZURpYWxvZ1Byb2plY3RSb3dQcm9qZWN0Q29sbGFib3JhdG9ycyhcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkZmlsdGVyOiBJbnZpdGFibGVDb2xsYWJvcmF0b3JzRmlsdGVyXFxuICApIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgaW52aXRhYmxlQ29sbGFib3JhdG9ycyhmaWx0ZXI6ICRmaWx0ZXIpIHtcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgLi4uSW52aXRlUHJvamVjdEl0ZW1fV29ya3NwYWNlQ29sbGFib3JhdG9yXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5JbnZpdGVEaWFsb2dQcm9qZWN0Um93UHJvamVjdENvbGxhYm9yYXRvcnNEb2N1bWVudCxcbiAgICBcIlxcbiAgZnJhZ21lbnQgSW52aXRlRGlhbG9nU2hhcmVkU2VsZWN0VXNlcnNfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHNsdWdcXG4gICAgZGVmYXVsdFNlYXRUeXBlXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5JbnZpdGVEaWFsb2dTaGFyZWRTZWxlY3RVc2Vyc19Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJlc2VudGF0aW9uSGVhZGVyX1NhdmVkVmlld0dyb3VwIG9uIFNhdmVkVmlld0dyb3VwIHtcXG4gICAgaWRcXG4gICAgdGl0bGVcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByZXNlbnRhdGlvbkhlYWRlcl9TYXZlZFZpZXdHcm91cEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcmVzZW50YXRpb25JbmZvU2lkZWJhcl9TYXZlZFZpZXcgb24gU2F2ZWRWaWV3IHtcXG4gICAgaWRcXG4gICAgLi4uUHJlc2VudGF0aW9uU2xpZGVFZGl0RGlhbG9nX1NhdmVkVmlld1xcbiAgICBuYW1lXFxuICAgIGRlc2NyaXB0aW9uXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5FZGl0VGl0bGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5FZGl0RGVzY3JpcHRpb24ge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJlc2VudGF0aW9uSW5mb1NpZGViYXJfU2F2ZWRWaWV3RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByZXNlbnRhdGlvbkxlZnRTaWRlYmFyX0xpbWl0ZWRXb3Jrc3BhY2Ugb24gTGltaXRlZFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgbG9nb1xcbiAgICBzbHVnXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5QcmVzZW50YXRpb25MZWZ0U2lkZWJhcl9MaW1pdGVkV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByZXNlbnRhdGlvbkxvYWRpbmdfU2F2ZWRWaWV3R3JvdXAgb24gU2F2ZWRWaWV3R3JvdXAge1xcbiAgICBpZFxcbiAgICB0aXRsZVxcbiAgICB2aWV3cyhpbnB1dDogJGlucHV0KSB7XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHNjcmVlbnNob3RcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cXG4gIGZyYWdtZW50IFByZXNlbnRhdGlvbkxvYWRpbmdfTGltaXRlZFdvcmtzcGFjZSBvbiBMaW1pdGVkV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBsb2dvXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5QcmVzZW50YXRpb25Mb2FkaW5nX1NhdmVkVmlld0dyb3VwRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByZXNlbnRhdGlvblBhZ2VXcmFwcGVyX1NhdmVkVmlld0dyb3VwIG9uIFNhdmVkVmlld0dyb3VwIHtcXG4gICAgaWRcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhblVwZGF0ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5QcmVzZW50YXRpb25QYWdlV3JhcHBlcl9TYXZlZFZpZXdHcm91cEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBxdWVyeSBQcmVzZW50YXRpb25TaGFyZURpYWxvZ1Blcm1pc3Npb25zKFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRzYXZlZFZpZXdHcm91cElkOiBJRCFcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICByb2xlXFxuICAgICAgc2F2ZWRWaWV3R3JvdXAoaWQ6ICRzYXZlZFZpZXdHcm91cElkKSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgZ3JvdXBJZFxcbiAgICAgICAgc2hhcmVMaW5rIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgY29udGVudFxcbiAgICAgICAgICByZXZva2VkXFxuICAgICAgICB9XFxuICAgICAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgICAgIGNhbkNyZWF0ZVRva2VuIHtcXG4gICAgICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByZXNlbnRhdGlvblNoYXJlRGlhbG9nUGVybWlzc2lvbnNEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gUHJlc2VudGF0aW9uU2hhcmVUb2tlbigkaW5wdXQ6IFNhdmVkVmlld0dyb3VwU2hhcmVJbnB1dCEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgc2F2ZWRWaWV3TXV0YXRpb25zIHtcXG4gICAgICAgIHNoYXJlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgcmV2b2tlZFxcbiAgICAgICAgICBjb250ZW50XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5QcmVzZW50YXRpb25TaGFyZVRva2VuRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIFByZXNlbnRhdGlvblNoYXJlRW5hYmxlVG9rZW4oJGlucHV0OiBTYXZlZFZpZXdHcm91cFNoYXJlVXBkYXRlSW5wdXQhKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIHNhdmVkVmlld011dGF0aW9ucyB7XFxuICAgICAgICBlbmFibGVTaGFyZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIHJldm9rZWRcXG4gICAgICAgICAgY29udGVudFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJlc2VudGF0aW9uU2hhcmVFbmFibGVUb2tlbkRvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBQcmVzZW50YXRpb25TaGFyZURpc2FibGVUb2tlbigkaW5wdXQ6IFNhdmVkVmlld0dyb3VwU2hhcmVVcGRhdGVJbnB1dCEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgc2F2ZWRWaWV3TXV0YXRpb25zIHtcXG4gICAgICAgIGRpc2FibGVTaGFyZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIHJldm9rZWRcXG4gICAgICAgICAgY29udGVudFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJlc2VudGF0aW9uU2hhcmVEaXNhYmxlVG9rZW5Eb2N1bWVudCxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJlc2VudGF0aW9uU2xpZGVFZGl0RGlhbG9nX1NhdmVkVmlldyBvbiBTYXZlZFZpZXcge1xcbiAgICBpZFxcbiAgICBwcm9qZWN0SWRcXG4gICAgbmFtZVxcbiAgICBkZXNjcmlwdGlvblxcbiAgICB0aHVtYm5haWxVcmxcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByZXNlbnRhdGlvblNsaWRlRWRpdERpYWxvZ19TYXZlZFZpZXdGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJlc2VudGF0aW9uU2xpZGVMaXN0U2xpZGVfU2F2ZWRWaWV3IG9uIFNhdmVkVmlldyB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgdGh1bWJuYWlsVXJsXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5QcmVzZW50YXRpb25TbGlkZUxpc3RTbGlkZV9TYXZlZFZpZXdGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJlc2VudGF0aW9uU2xpZGVMaXN0X1NhdmVkVmlld0dyb3VwIG9uIFNhdmVkVmlld0dyb3VwIHtcXG4gICAgaWRcXG4gICAgdmlld3MoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5QcmVzZW50YXRpb25TbGlkZUxpc3RTbGlkZV9TYXZlZFZpZXdcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByZXNlbnRhdGlvblNsaWRlTGlzdF9TYXZlZFZpZXdHcm91cEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcmVzZW50YXRpb25WaWV3ZXJQYWdlV3JhcHBlcl9TYXZlZFZpZXdHcm91cCBvbiBTYXZlZFZpZXdHcm91cCB7XFxuICAgIGlkXFxuICAgIHZpZXdzKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHJlc291cmNlSWRTdHJpbmdcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByZXNlbnRhdGlvblZpZXdlclBhZ2VXcmFwcGVyX1NhdmVkVmlld0dyb3VwRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RDYXJkSW1wb3J0RmlsZUFyZWFfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkNyZWF0ZU1vZGVsIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uVXNlRmlsZUltcG9ydF9Qcm9qZWN0XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Qcm9qZWN0Q2FyZEltcG9ydEZpbGVBcmVhX1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdENhcmRJbXBvcnRGaWxlQXJlYV9Nb2RlbCBvbiBNb2RlbCB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkNyZWF0ZVZlcnNpb24ge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5Vc2VGaWxlSW1wb3J0X01vZGVsXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Qcm9qZWN0Q2FyZEltcG9ydEZpbGVBcmVhX01vZGVsRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RJbnZpdGVBZGRfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgLi4uSW52aXRlRGlhbG9nUHJvamVjdF9Qcm9qZWN0XFxuICAgIC4uLlVzZUNhbkludml0ZVRvUHJvamVjdF9Qcm9qZWN0XFxuICAgIC4uLldvcmtzcGFjZU1vdmVQcm9qZWN0X1Byb2plY3RcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RJbnZpdGVBZGRfUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0TW9kZWxQYWdlSGVhZGVyUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBtb2RlbChpZDogJG1vZGVsSWQpIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgICBkZXNjcmlwdGlvblxcbiAgICB9XFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICBzbHVnXFxuICAgICAgbmFtZVxcbiAgICAgIHJvbGVcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdE1vZGVsUGFnZUhlYWRlclByb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdE1vZGVsUGFnZVZlcnNpb25zUGFnaW5hdGlvbiBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgdmlzaWJpbGl0eVxcbiAgICByb2xlXFxuICAgIG1vZGVsKGlkOiAkbW9kZWxJZCkge1xcbiAgICAgIGlkXFxuICAgICAgdmVyc2lvbnMobGltaXQ6IDE2LCBjdXJzb3I6ICR2ZXJzaW9uc0N1cnNvcikge1xcbiAgICAgICAgY3Vyc29yXFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIC4uLlByb2plY3RNb2RlbFBhZ2VWZXJzaW9uc0NhcmRWZXJzaW9uXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIC4uLlByb2plY3RDYXJkSW1wb3J0RmlsZUFyZWFfTW9kZWxcXG4gICAgfVxcbiAgICAuLi5Qcm9qZWN0c01vZGVsUGFnZUVtYmVkX1Byb2plY3RcXG4gICAgLi4uUHJvamVjdENhcmRJbXBvcnRGaWxlQXJlYV9Qcm9qZWN0XFxuICAgIC4uLlByb2plY3RNb2RlbFBhZ2VWZXJzaW9uc0NhcmRfUHJvamVjdFxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdE1vZGVsUGFnZVZlcnNpb25zUGFnaW5hdGlvbkZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0TW9kZWxQYWdlVmVyc2lvbnNQcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICAuLi5Qcm9qZWN0UGFnZVByb2plY3RIZWFkZXJcXG4gICAgbW9kZWwoaWQ6ICRtb2RlbElkKSB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgICAgcGVuZGluZ0ltcG9ydGVkVmVyc2lvbnMge1xcbiAgICAgICAgLi4uUGVuZGluZ0ZpbGVVcGxvYWRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uUHJvamVjdE1vZGVsUGFnZVZlcnNpb25zUGFnaW5hdGlvblxcbiAgICAuLi5Qcm9qZWN0c01vZGVsUGFnZUVtYmVkX1Byb2plY3RcXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIHJlYWRPbmx5XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RNb2RlbFBhZ2VWZXJzaW9uc1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdE1vZGVsUGFnZURpYWxvZ0RlbGV0ZVZlcnNpb24gb24gVmVyc2lvbiB7XFxuICAgIGlkXFxuICAgIG1lc3NhZ2VcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RNb2RlbFBhZ2VEaWFsb2dEZWxldGVWZXJzaW9uRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RNb2RlbFBhZ2VEaWFsb2dFZGl0TWVzc2FnZVZlcnNpb24gb24gVmVyc2lvbiB7XFxuICAgIGlkXFxuICAgIG1lc3NhZ2VcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RNb2RlbFBhZ2VEaWFsb2dFZGl0TWVzc2FnZVZlcnNpb25GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdE1vZGVsUGFnZURpYWxvZ01vdmVUb1ZlcnNpb24gb24gVmVyc2lvbiB7XFxuICAgIGlkXFxuICAgIG1lc3NhZ2VcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RNb2RlbFBhZ2VEaWFsb2dNb3ZlVG9WZXJzaW9uRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RzTW9kZWxQYWdlRW1iZWRfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgdmlzaWJpbGl0eVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQ3JlYXRlRW1iZWRUb2tlbnMge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgc2x1Z1xcbiAgICAgIHJvbGVcXG4gICAgICBlbWJlZE9wdGlvbnMge1xcbiAgICAgICAgaGlkZVNwZWNrbGVCcmFuZGluZ1xcbiAgICAgIH1cXG4gICAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgICBjYW5FZGl0RW1iZWRPcHRpb25zIHtcXG4gICAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdHNNb2RlbFBhZ2VFbWJlZF9Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RNb2RlbFBhZ2VWZXJzaW9uc0NhcmRfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIHNsdWdcXG4gICAgfVxcbiAgICAuLi5WaWV3ZXJSZXNvdXJjZXNMaW1pdEFsZXJ0X1Byb2plY3RcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RNb2RlbFBhZ2VWZXJzaW9uc0NhcmRfUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0TW9kZWxQYWdlVmVyc2lvbnNDYXJkVmVyc2lvbiBvbiBWZXJzaW9uIHtcXG4gICAgaWRcXG4gICAgbWVzc2FnZVxcbiAgICBhdXRob3JVc2VyIHtcXG4gICAgICAuLi5MaW1pdGVkVXNlckF2YXRhclxcbiAgICB9XFxuICAgIGNyZWF0ZWRBdFxcbiAgICBwcmV2aWV3VXJsXFxuICAgIHJlZmVyZW5jZWRPYmplY3RcXG4gICAgc291cmNlQXBwbGljYXRpb25cXG4gICAgY29tbWVudFRocmVhZENvdW50OiBjb21tZW50VGhyZWFkcyhsaW1pdDogMCkge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgfVxcbiAgICAuLi5Qcm9qZWN0TW9kZWxQYWdlRGlhbG9nRGVsZXRlVmVyc2lvblxcbiAgICAuLi5Qcm9qZWN0TW9kZWxQYWdlRGlhbG9nTW92ZVRvVmVyc2lvblxcbiAgICBhdXRvbWF0aW9uc1N0YXR1cyB7XFxuICAgICAgLi4uQXV0b21hdGVSdW5zVHJpZ2dlclN0YXR1c19UcmlnZ2VyZWRBdXRvbWF0aW9uc1N0YXR1c1xcbiAgICB9XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5VcGRhdGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdE1vZGVsUGFnZVZlcnNpb25zQ2FyZFZlcnNpb25GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdE1vZGVsc0FkZF9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIG5hbWVcXG4gICAgICBzbHVnXFxuICAgICAgcm9sZVxcbiAgICAgIHBsYW4ge1xcbiAgICAgICAgbmFtZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5Vc2VDYW5DcmVhdGVNb2RlbF9Qcm9qZWN0XFxuICAgIC4uLldvcmtzcGFjZU1vdmVQcm9qZWN0X1Byb2plY3RcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RNb2RlbHNBZGRfUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZVByb2plY3RIZWFkZXIgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgZGVzY3JpcHRpb25cXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIHNsdWdcXG4gICAgICBuYW1lXFxuICAgICAgbG9nb1xcbiAgICAgIHJvbGVcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdFBhZ2VQcm9qZWN0SGVhZGVyRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlQXV0b21hdGlvbkRlbGV0ZURpYWxvZ19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHdvcmtzcGFjZUlkXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Qcm9qZWN0UGFnZUF1dG9tYXRpb25EZWxldGVEaWFsb2dfUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZUF1dG9tYXRpb25EZWxldGVEaWFsb2dfQXV0b21hdGlvbiBvbiBBdXRvbWF0aW9uIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBjdXJyZW50UmV2aXNpb24ge1xcbiAgICAgIGZ1bmN0aW9ucyB7XFxuICAgICAgICByZWxlYXNlIHtcXG4gICAgICAgICAgZnVuY3Rpb24ge1xcbiAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgbmFtZVxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Qcm9qZWN0UGFnZUF1dG9tYXRpb25EZWxldGVEaWFsb2dfQXV0b21hdGlvbkZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZUF1dG9tYXRpb25GdW5jdGlvblNldHRpbmdzRGlhbG9nX0F1dG9tYXRpb25SZXZpc2lvbkZ1bmN0aW9uIG9uIEF1dG9tYXRpb25SZXZpc2lvbkZ1bmN0aW9uIHtcXG4gICAgcGFyYW1ldGVyc1xcbiAgICByZWxlYXNlIHtcXG4gICAgICBpZFxcbiAgICAgIHZlcnNpb25UYWdcXG4gICAgICBjcmVhdGVkQXRcXG4gICAgICBpbnB1dFNjaGVtYVxcbiAgICAgIGZ1bmN0aW9uIHtcXG4gICAgICAgIGlkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Qcm9qZWN0UGFnZUF1dG9tYXRpb25GdW5jdGlvblNldHRpbmdzRGlhbG9nX0F1dG9tYXRpb25SZXZpc2lvbkZ1bmN0aW9uRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlQXV0b21hdGlvbkZ1bmN0aW9uU2V0dGluZ3NEaWFsb2dfQXV0b21hdGlvblJldmlzaW9uIG9uIEF1dG9tYXRpb25SZXZpc2lvbiB7XFxuICAgIGlkXFxuICAgIHRyaWdnZXJEZWZpbml0aW9ucyB7XFxuICAgICAgLi4uIG9uIFZlcnNpb25DcmVhdGVkVHJpZ2dlckRlZmluaXRpb24ge1xcbiAgICAgICAgdHlwZVxcbiAgICAgICAgbW9kZWwge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICAuLi5Db21tb25Nb2RlbFNlbGVjdG9yTW9kZWxcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RQYWdlQXV0b21hdGlvbkZ1bmN0aW9uU2V0dGluZ3NEaWFsb2dfQXV0b21hdGlvblJldmlzaW9uRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlQXV0b21hdGlvbkZ1bmN0aW9uc19BdXRvbWF0aW9uIG9uIEF1dG9tYXRpb24ge1xcbiAgICBpZFxcbiAgICBjdXJyZW50UmV2aXNpb24ge1xcbiAgICAgIGlkXFxuICAgICAgLi4uUHJvamVjdFBhZ2VBdXRvbWF0aW9uRnVuY3Rpb25TZXR0aW5nc0RpYWxvZ19BdXRvbWF0aW9uUmV2aXNpb25cXG4gICAgICBmdW5jdGlvbnMge1xcbiAgICAgICAgcmVsZWFzZSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIGlucHV0U2NoZW1hXFxuICAgICAgICAgIGZ1bmN0aW9uIHtcXG4gICAgICAgICAgICBpZFxcbiAgICAgICAgICAgIC4uLkF1dG9tYXRpb25zRnVuY3Rpb25zQ2FyZF9BdXRvbWF0ZUZ1bmN0aW9uXFxuICAgICAgICAgICAgcmVsZWFzZXMobGltaXQ6IDEpIHtcXG4gICAgICAgICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIC4uLlByb2plY3RQYWdlQXV0b21hdGlvbkZ1bmN0aW9uU2V0dGluZ3NEaWFsb2dfQXV0b21hdGlvblJldmlzaW9uRnVuY3Rpb25cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RQYWdlQXV0b21hdGlvbkZ1bmN0aW9uc19BdXRvbWF0aW9uRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlQXV0b21hdGlvbkhlYWRlcl9BdXRvbWF0aW9uIG9uIEF1dG9tYXRpb24ge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGVuYWJsZWRcXG4gICAgaXNUZXN0QXV0b21hdGlvblxcbiAgICBjdXJyZW50UmV2aXNpb24ge1xcbiAgICAgIGlkXFxuICAgICAgdHJpZ2dlckRlZmluaXRpb25zIHtcXG4gICAgICAgIC4uLiBvbiBWZXJzaW9uQ3JlYXRlZFRyaWdnZXJEZWZpbml0aW9uIHtcXG4gICAgICAgICAgbW9kZWwge1xcbiAgICAgICAgICAgIC4uLlByb2plY3RQYWdlTGF0ZXN0SXRlbXNNb2RlbEl0ZW1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdFBhZ2VBdXRvbWF0aW9uSGVhZGVyX0F1dG9tYXRpb25GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VBdXRvbWF0aW9uSGVhZGVyX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHJvbGVcXG4gICAgd29ya3NwYWNlSWRcXG4gICAgLi4uUHJvamVjdFBhZ2VNb2RlbHNDYXJkUHJvamVjdFxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdFBhZ2VBdXRvbWF0aW9uSGVhZGVyX1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VBdXRvbWF0aW9uTW9kZWxzX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIC4uLlByb2plY3RQYWdlTW9kZWxzQ2FyZFByb2plY3RcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RQYWdlQXV0b21hdGlvbk1vZGVsc19Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlQXV0b21hdGlvblJ1bnNfQXV0b21hdGlvbiBvbiBBdXRvbWF0aW9uIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBlbmFibGVkXFxuICAgIGlzVGVzdEF1dG9tYXRpb25cXG4gICAgcnVucyhsaW1pdDogMTApIHtcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICAuLi5BdXRvbWF0aW9uUnVuRGV0YWlsc1xcbiAgICAgIH1cXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgY3Vyc29yXFxuICAgIH1cXG4gICAgLi4uUHJvamVjdFBhZ2VBdXRvbWF0aW9uRGVsZXRlRGlhbG9nX0F1dG9tYXRpb25cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RQYWdlQXV0b21hdGlvblJ1bnNfQXV0b21hdGlvbkZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZUF1dG9tYXRpb25zUm93X0F1dG9tYXRpb24gb24gQXV0b21hdGlvbiB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgZW5hYmxlZFxcbiAgICBpc1Rlc3RBdXRvbWF0aW9uXFxuICAgIGN1cnJlbnRSZXZpc2lvbiB7XFxuICAgICAgaWRcXG4gICAgICB0cmlnZ2VyRGVmaW5pdGlvbnMge1xcbiAgICAgICAgLi4uIG9uIFZlcnNpb25DcmVhdGVkVHJpZ2dlckRlZmluaXRpb24ge1xcbiAgICAgICAgICBtb2RlbCB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICBuYW1lXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gICAgcnVucyhsaW1pdDogMTApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgLi4uQXV0b21hdGlvblJ1bkRldGFpbHNcXG4gICAgICB9XFxuICAgICAgY3Vyc29yXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RQYWdlQXV0b21hdGlvbnNSb3dfQXV0b21hdGlvbkZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZUNvbGxhYm9yYXRvcnNfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhblVwZGF0ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIC4uLlByb2plY3RJbnZpdGVBZGRfUHJvamVjdFxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdFBhZ2VDb2xsYWJvcmF0b3JzX1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgcXVlcnkgUHJvamVjdFBhZ2VDb2xsYWJvcmF0b3JzKCRwcm9qZWN0SWQ6IFN0cmluZyEsICRmaWx0ZXI6IFdvcmtzcGFjZVRlYW1GaWx0ZXIhKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHZpc2liaWxpdHlcXG4gICAgICAuLi5Qcm9qZWN0UGFnZVRlYW1JbnRlcm5hbHNfUHJvamVjdFxcbiAgICAgIC4uLkludml0ZURpYWxvZ1Byb2plY3RfUHJvamVjdFxcbiAgICAgIC4uLlByb2plY3RQYWdlQ29sbGFib3JhdG9yc19Qcm9qZWN0XFxuICAgICAgd29ya3NwYWNlSWRcXG4gICAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgICBjYW5JbnZpdGUge1xcbiAgICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIHdvcmtzcGFjZSB7XFxuICAgICAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzVGFibGVIZWFkZXJfV29ya3NwYWNlXFxuICAgICAgICBuYW1lXFxuICAgICAgICBsb2dvXFxuICAgICAgICB0ZWFtKGZpbHRlcjogJGZpbHRlcikge1xcbiAgICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgICAgLi4uUHJvamVjdFBhZ2VDb2xsYWJvcmF0b3JzX1dvcmtzcGFjZUNvbGxhYm9yYXRvclxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Qcm9qZWN0UGFnZUNvbGxhYm9yYXRvcnNEb2N1bWVudCxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VDb2xsYWJvcmF0b3JzX1dvcmtzcGFjZUNvbGxhYm9yYXRvciBvbiBXb3Jrc3BhY2VDb2xsYWJvcmF0b3Ige1xcbiAgICBpZFxcbiAgICB1c2VyIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgICBhdmF0YXJcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdFBhZ2VDb2xsYWJvcmF0b3JzX1dvcmtzcGFjZUNvbGxhYm9yYXRvckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBxdWVyeSBJbnZpdGFibGVDb2xsYWJvcmF0b3JzKFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRmaWx0ZXI6IEludml0YWJsZUNvbGxhYm9yYXRvcnNGaWx0ZXJcXG4gICAgJGxpbWl0OiBJbnQhXFxuICAgICR3b3Jrc3BhY2VJZDogU3RyaW5nXFxuICApIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGludml0YWJsZUNvbGxhYm9yYXRvcnMoZmlsdGVyOiAkZmlsdGVyLCBsaW1pdDogJGxpbWl0KSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIHVzZXIge1xcbiAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgYXZhdGFyXFxuICAgICAgICAgICAgbmFtZVxcbiAgICAgICAgICAgIHdvcmtzcGFjZVJvbGUod29ya3NwYWNlSWQ6ICR3b3Jrc3BhY2VJZClcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuSW52aXRhYmxlQ29sbGFib3JhdG9yc0RvY3VtZW50LFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0RGlzY3Vzc2lvbnNQYWdlSGVhZGVyX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3REaXNjdXNzaW9uc1BhZ2VIZWFkZXJfUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0RGlzY3Vzc2lvbnNQYWdlUmVzdWx0c19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdERpc2N1c3Npb25zUGFnZVJlc3VsdHNfUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZU1vZGVsc0FjdGlvbnMgb24gTW9kZWwge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5VcGRhdGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5EZWxldGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5DcmVhdGVWZXJzaW9uIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgYWNjU3luY0l0ZW0ge1xcbiAgICAgIGlkXFxuICAgICAgLi4uUHJvamVjdFBhZ2VNb2RlbHNBY3Rpb25zX0FjY1N5bmNJdGVtXFxuICAgIH1cXG4gICAgLi4uVXNlQ29weU1vZGVsTGlua19Nb2RlbFxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdFBhZ2VNb2RlbHNBY3Rpb25zRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlTW9kZWxzQWN0aW9uc19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgc2x1Z1xcbiAgICB9XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5SZWFkQWNjSW50ZWdyYXRpb25TZXR0aW5ncyB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIC4uLlByb2plY3RzTW9kZWxQYWdlRW1iZWRfUHJvamVjdFxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdFBhZ2VNb2RlbHNBY3Rpb25zX1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VNb2RlbHNBY3Rpb25zX0FjY1N5bmNJdGVtIG9uIEFjY1N5bmNJdGVtIHtcXG4gICAgaWRcXG4gICAgYWNjRmlsZU5hbWVcXG4gICAgc3RhdHVzXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Qcm9qZWN0UGFnZU1vZGVsc0FjdGlvbnNfQWNjU3luY0l0ZW1GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VNb2RlbHNDYXJkUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgcm9sZVxcbiAgICB2aXNpYmlsaXR5XFxuICAgIC4uLlByb2plY3RQYWdlTW9kZWxzQWN0aW9uc19Qcm9qZWN0XFxuICAgIC4uLlByb2plY3RDYXJkSW1wb3J0RmlsZUFyZWFfUHJvamVjdFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQ3JlYXRlTW9kZWwge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdFBhZ2VNb2RlbHNDYXJkUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZU1vZGVsc0NhcmRfTW9kZWwgb24gTW9kZWwge1xcbiAgICBpZFxcbiAgICBob21lVmlldyB7XFxuICAgICAgaWRcXG4gICAgICByZXNvdXJjZUlkc1xcbiAgICB9XFxuICAgIGxhc3RVcGxvYWQ6IHVwbG9hZHMoaW5wdXQ6IHsgbGltaXQ6IDEsIGN1cnNvcjogbnVsbCB9KSB7XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHVwZGF0ZWRBdFxcbiAgICAgICAgY29udmVydGVkU3RhdHVzXFxuICAgICAgfVxcbiAgICB9XFxuICAgIGxhc3RWZXJzaW9uOiB2ZXJzaW9ucyhsaW1pdDogMSwgY3Vyc29yOiBudWxsKSB7XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGNyZWF0ZWRBdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdFBhZ2VNb2RlbHNDYXJkX01vZGVsRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RNb2RlbHNQYWdlSGVhZGVyX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgc291cmNlQXBwc1xcbiAgICByb2xlXFxuICAgIG1vZGVscyB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICAgIHRlYW0ge1xcbiAgICAgIGlkXFxuICAgICAgdXNlciB7XFxuICAgICAgICAuLi5Gb3JtVXNlcnNTZWxlY3RJdGVtXFxuICAgICAgfVxcbiAgICB9XFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICByb2xlXFxuICAgICAgc2x1Z1xcbiAgICAgIG5hbWVcXG4gICAgICByZWFkT25seVxcbiAgICAgIHBsYW4ge1xcbiAgICAgICAgbmFtZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQ3JlYXRlTW9kZWwge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5SZWFkQWNjSW50ZWdyYXRpb25TZXR0aW5ncyB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIC4uLlByb2plY3RNb2RlbHNBZGRfUHJvamVjdFxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdE1vZGVsc1BhZ2VIZWFkZXJfUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0TW9kZWxzUGFnZVJlc3VsdHNfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgLi4uUHJvamVjdFBhZ2VMYXRlc3RJdGVtc01vZGVsc1xcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdE1vZGVsc1BhZ2VSZXN1bHRzX1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VNb2RlbHNTdHJ1Y3R1cmVJdGVtX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIC4uLlByb2plY3RQYWdlTW9kZWxzQWN0aW9uc19Qcm9qZWN0XFxuICAgIC4uLlByb2plY3RDYXJkSW1wb3J0RmlsZUFyZWFfUHJvamVjdFxcbiAgICAuLi5Vc2VDYW5DcmVhdGVNb2RlbF9Qcm9qZWN0XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVNb2RlbCB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Qcm9qZWN0UGFnZU1vZGVsc1N0cnVjdHVyZUl0ZW1fUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBTaW5nbGVMZXZlbE1vZGVsVHJlZUl0ZW0gb24gTW9kZWxzVHJlZUl0ZW0ge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGZ1bGxOYW1lXFxuICAgIG1vZGVsIHtcXG4gICAgICAuLi5Qcm9qZWN0UGFnZUxhdGVzdEl0ZW1zTW9kZWxJdGVtXFxuICAgICAgLi4uUHJvamVjdENhcmRJbXBvcnRGaWxlQXJlYV9Nb2RlbFxcbiAgICAgIC4uLlByb2plY3RQYWdlTW9kZWxzQ2FyZF9Nb2RlbFxcbiAgICAgIGFjY1N5bmNJdGVtIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5TeW5jU3RhdHVzTW9kZWxJdGVtX0FjY1N5bmNJdGVtXFxuICAgICAgfVxcbiAgICB9XFxuICAgIGhhc0NoaWxkcmVuXFxuICAgIHVwZGF0ZWRBdFxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2luZ2xlTGV2ZWxNb2RlbFRyZWVJdGVtRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlTW9kZWxzVXBsb2Fkc0RpYWxvZ19GaWxlVXBsb2FkIG9uIEZpbGVVcGxvYWQge1xcbiAgICBpZFxcbiAgICBjb252ZXJ0ZWRTdGF0dXNcXG4gICAgY29udmVydGVkTWVzc2FnZVxcbiAgICBmaWxlTmFtZVxcbiAgICBmaWxlU2l6ZVxcbiAgICBjb252ZXJ0ZWRMYXN0VXBkYXRlXFxuICAgIGNvbnZlcnRlZFZlcnNpb25JZFxcbiAgICB1cGxvYWREYXRlXFxuICAgIHVwbG9hZENvbXBsZXRlXFxuICAgIGJyYW5jaE5hbWVcXG4gICAgLi4uVXNlRmFpbGVkRmlsZUltcG9ydEpvYlV0aWxzX0ZpbGVVcGxvYWRcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RQYWdlTW9kZWxzVXBsb2Fkc0RpYWxvZ19GaWxlVXBsb2FkRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIHF1ZXJ5IEdldE1vZGVsVXBsb2FkcyhcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkbW9kZWxJZDogU3RyaW5nIVxcbiAgICAkaW5wdXQ6IEdldE1vZGVsVXBsb2Fkc0lucHV0IVxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIG1vZGVsKGlkOiAkbW9kZWxJZCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHVwbG9hZHMoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICAgIGN1cnNvclxcbiAgICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICAuLi5Qcm9qZWN0UGFnZU1vZGVsc1VwbG9hZHNEaWFsb2dfRmlsZVVwbG9hZFxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5HZXRNb2RlbFVwbG9hZHNEb2N1bWVudCxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VNb2RlbHNDYXJkRGVsZXRlRGlhbG9nIG9uIE1vZGVsIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdFBhZ2VNb2RlbHNDYXJkRGVsZXRlRGlhbG9nRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlTW9kZWxzQ2FyZFJlbmFtZURpYWxvZyBvbiBNb2RlbCB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgZGVzY3JpcHRpb25cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RQYWdlTW9kZWxzQ2FyZFJlbmFtZURpYWxvZ0ZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZU1vZGVsUmVtb3ZlU3luY0RpYWxvZ19BY2NTeW5jSXRlbSBvbiBBY2NTeW5jSXRlbSB7XFxuICAgIGlkXFxuICAgIGFjY0ZpbGVOYW1lXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Qcm9qZWN0UGFnZU1vZGVsUmVtb3ZlU3luY0RpYWxvZ19BY2NTeW5jSXRlbUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZVNldHRpbmdzSW50ZWdyYXRpb25zX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5SZWFkQWNjSW50ZWdyYXRpb25TZXR0aW5ncyB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Qcm9qZWN0UGFnZVNldHRpbmdzSW50ZWdyYXRpb25zX1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgcXVlcnkgUHJvamVjdFBhZ2VTZXR0aW5nc0dlbmVyYWwoJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5Qcm9qZWN0UGFnZVNldHRpbmdzR2VuZXJhbEJsb2NrUHJvamVjdEluZm9fUHJvamVjdFxcbiAgICAgIC4uLlByb2plY3RQYWdlU2V0dGluZ3NHZW5lcmFsQmxvY2tBY2Nlc3NfUHJvamVjdFxcbiAgICAgIC4uLlByb2plY3RQYWdlU2V0dGluZ3NHZW5lcmFsQmxvY2tEaXNjdXNzaW9uc19Qcm9qZWN0XFxuICAgICAgLi4uUHJvamVjdFBhZ2VTZXR0aW5nc0dlbmVyYWxCbG9ja0xlYXZlX1Byb2plY3RcXG4gICAgICAuLi5Qcm9qZWN0UGFnZVNldHRpbmdzR2VuZXJhbEJsb2NrRGVsZXRlX1Byb2plY3RcXG4gICAgICAuLi5Qcm9qZWN0UGFnZVRlYW1JbnRlcm5hbHNfUHJvamVjdFxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Qcm9qZWN0UGFnZVNldHRpbmdzR2VuZXJhbERvY3VtZW50LFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZVNldHRpbmdzR2VuZXJhbEJsb2NrQWNjZXNzX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHZpc2liaWxpdHlcXG4gICAgd29ya3NwYWNlSWRcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhblVwZGF0ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Qcm9qZWN0UGFnZVNldHRpbmdzR2VuZXJhbEJsb2NrQWNjZXNzX1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VTZXR0aW5nc0dlbmVyYWxCbG9ja0RlbGV0ZV9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICAuLi5Qcm9qZWN0c0RlbGV0ZURpYWxvZ19Qcm9qZWN0XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5VcGRhdGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdFBhZ2VTZXR0aW5nc0dlbmVyYWxCbG9ja0RlbGV0ZV9Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlU2V0dGluZ3NHZW5lcmFsQmxvY2tEaXNjdXNzaW9uc19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICB2aXNpYmlsaXR5XFxuICAgIGFsbG93UHVibGljQ29tbWVudHNcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhblVwZGF0ZUFsbG93UHVibGljQ29tbWVudHMge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdFBhZ2VTZXR0aW5nc0dlbmVyYWxCbG9ja0Rpc2N1c3Npb25zX1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VTZXR0aW5nc0dlbmVyYWxCbG9ja0xlYXZlX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgcm9sZVxcbiAgICB0ZWFtIHtcXG4gICAgICByb2xlXFxuICAgICAgdXNlciB7XFxuICAgICAgICAuLi5MaW1pdGVkVXNlckF2YXRhclxcbiAgICAgICAgcm9sZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgIH1cXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkxlYXZlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RQYWdlU2V0dGluZ3NHZW5lcmFsQmxvY2tMZWF2ZV9Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlU2V0dGluZ3NHZW5lcmFsQmxvY2tQcm9qZWN0SW5mb19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGRlc2NyaXB0aW9uXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5VcGRhdGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdFBhZ2VTZXR0aW5nc0dlbmVyYWxCbG9ja1Byb2plY3RJbmZvX1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VTZXR0aW5nc1Rva2Vuc19FbWJlZFRva2VuIG9uIEVtYmVkVG9rZW4ge1xcbiAgICBjcmVhdGVkQXRcXG4gICAgbGFzdFVzZWRcXG4gICAgdG9rZW5JZFxcbiAgICByZXNvdXJjZUlkU3RyaW5nXFxuICAgIHVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgYXZhdGFyXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Qcm9qZWN0UGFnZVNldHRpbmdzVG9rZW5zX0VtYmVkVG9rZW5GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VTZXR0aW5nc1Rva2Vuc19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5SZWFkRW1iZWRUb2tlbnMge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5SZXZva2VFbWJlZFRva2VucyB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIGVtYmVkVG9rZW5zKGN1cnNvcjogJGN1cnNvciwgbGltaXQ6IDIwKSB7XFxuICAgICAgY3Vyc29yXFxuICAgICAgdG90YWxDb3VudFxcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIC4uLlByb2plY3RQYWdlU2V0dGluZ3NUb2tlbnNfRW1iZWRUb2tlblxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdFBhZ2VTZXR0aW5nc1Rva2Vuc19Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlU2V0dGluZ3NXZWJob29rc19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuVXBkYXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RQYWdlU2V0dGluZ3NXZWJob29rc19Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RzUGFnZVRlYW1EaWFsb2dNYW5hZ2VQZXJtaXNzaW9uc19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICB2aXNpYmlsaXR5XFxuICAgIHJvbGVcXG4gICAgd29ya3NwYWNlSWRcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RzUGFnZVRlYW1EaWFsb2dNYW5hZ2VQZXJtaXNzaW9uc19Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RzQWRkX1VzZXIgb24gVXNlciB7XFxuICAgIGlkXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVQZXJzb25hbFByb2plY3Qge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5Vc2VDYW5DcmVhdGVQZXJzb25hbFByb2plY3RfVXNlclxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdHNBZGRfVXNlckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0c0FkZF9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgc2x1Z1xcbiAgICBuYW1lXFxuICAgIHJvbGVcXG4gICAgcGxhbiB7XFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVQcm9qZWN0IHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uVXNlQ2FuQ3JlYXRlV29ya3NwYWNlUHJvamVjdF9Xb3Jrc3BhY2VcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RzQWRkX1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0c0Rhc2hib2FyZF9Vc2VyUHJvamVjdENvbGxlY3Rpb24gb24gVXNlclByb2plY3RDb2xsZWN0aW9uIHtcXG4gICAgbnVtYmVyT2ZIaWRkZW5cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RzRGFzaGJvYXJkX1VzZXJQcm9qZWN0Q29sbGVjdGlvbkZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0c0Rhc2hib2FyZF9Vc2VyIG9uIFVzZXIge1xcbiAgICAuLi5Qcm9qZWN0c0FkZF9Vc2VyXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVQZXJzb25hbFByb2plY3Qge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdHNEYXNoYm9hcmRfVXNlckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0c0Rhc2hib2FyZEZpbGxlZFByb2plY3Qgb24gUHJvamVjdENvbGxlY3Rpb24ge1xcbiAgICBpdGVtcyB7XFxuICAgICAgLi4uUHJvamVjdERhc2hib2FyZEl0ZW1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdHNEYXNoYm9hcmRGaWxsZWRQcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RzRGFzaGJvYXJkRmlsbGVkVXNlciBvbiBVc2VyUHJvamVjdENvbGxlY3Rpb24ge1xcbiAgICBpdGVtcyB7XFxuICAgICAgLi4uUHJvamVjdERhc2hib2FyZEl0ZW1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdHNEYXNoYm9hcmRGaWxsZWRVc2VyRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RzRGVsZXRlRGlhbG9nX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgcm9sZVxcbiAgICBtb2RlbHMobGltaXQ6IDApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBzbHVnXFxuICAgICAgaWRcXG4gICAgfVxcbiAgICB2ZXJzaW9ucyhsaW1pdDogMCkge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuRGVsZXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RzRGVsZXRlRGlhbG9nX1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdHNIaWRkZW5Qcm9qZWN0V2FybmluZ19Vc2VyIG9uIFVzZXIge1xcbiAgICBpZFxcbiAgICBleHBpcmVkU3NvU2Vzc2lvbnMge1xcbiAgICAgIGlkXFxuICAgICAgc2x1Z1xcbiAgICAgIG5hbWVcXG4gICAgICBsb2dvXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RzSGlkZGVuUHJvamVjdFdhcm5pbmdfVXNlckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0c1dvcmtzcGFjZVNlbGVjdF9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgcm9sZVxcbiAgICBuYW1lXFxuICAgIGxvZ29cXG4gICAgcmVhZE9ubHlcXG4gICAgc2x1Z1xcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdHNXb3Jrc3BhY2VTZWxlY3RfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RzSW52aXRlQmFubmVyIG9uIFBlbmRpbmdTdHJlYW1Db2xsYWJvcmF0b3Ige1xcbiAgICBpZFxcbiAgICBpbnZpdGVkQnkge1xcbiAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgIH1cXG4gICAgcHJvamVjdElkXFxuICAgIHByb2plY3ROYW1lXFxuICAgIHRva2VuXFxuICAgIHVzZXIge1xcbiAgICAgIGlkXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RzSW52aXRlQmFubmVyRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzU2lkZWJhcl9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgLi4uU2V0dGluZ3NNZW51X1dvcmtzcGFjZVxcbiAgICBpZFxcbiAgICBzbHVnXFxuICAgIHJvbGVcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlNldHRpbmdzU2lkZWJhcl9Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NTZXJ2ZXJSZWdpb25zQWRkRWRpdERpYWxvZ19TZXJ2ZXJSZWdpb25JdGVtIG9uIFNlcnZlclJlZ2lvbkl0ZW0ge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGRlc2NyaXB0aW9uXFxuICAgIGtleVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2V0dGluZ3NTZXJ2ZXJSZWdpb25zQWRkRWRpdERpYWxvZ19TZXJ2ZXJSZWdpb25JdGVtRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzU2VydmVyUmVnaW9uc1RhYmxlX1NlcnZlclJlZ2lvbkl0ZW0gb24gU2VydmVyUmVnaW9uSXRlbSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAga2V5XFxuICAgIGRlc2NyaXB0aW9uXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5TZXR0aW5nc1NlcnZlclJlZ2lvbnNUYWJsZV9TZXJ2ZXJSZWdpb25JdGVtRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzU2hhcmVkUHJvamVjdHNfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgLi4uUHJvamVjdHNEZWxldGVEaWFsb2dfUHJvamVjdFxcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHZpc2liaWxpdHlcXG4gICAgY3JlYXRlZEF0XFxuICAgIHVwZGF0ZWRBdFxcbiAgICBtb2RlbHMobGltaXQ6IDApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgdmVyc2lvbnMobGltaXQ6IDApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgdGVhbSB7XFxuICAgICAgaWRcXG4gICAgICB1c2VyIHtcXG4gICAgICAgIG5hbWVcXG4gICAgICAgIGlkXFxuICAgICAgICBhdmF0YXJcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkRlbGV0ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhblJlYWRTZXR0aW5ncyB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhblJlYWQge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2V0dGluZ3NTaGFyZWRQcm9qZWN0c19Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzU2hhcmVkUHJvamVjdHNfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIC4uLlByb2plY3RzQWRkX1dvcmtzcGFjZVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2V0dGluZ3NTaGFyZWRQcm9qZWN0c19Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NVc2VyUHJvZmlsZUNoYW5nZVBhc3N3b3JkX1VzZXIgb24gVXNlciB7XFxuICAgIGlkXFxuICAgIGVtYWlsXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5TZXR0aW5nc1VzZXJQcm9maWxlQ2hhbmdlUGFzc3dvcmRfVXNlckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1VzZXJQcm9maWxlRGVsZXRlQWNjb3VudF9Vc2VyIG9uIFVzZXIge1xcbiAgICBpZFxcbiAgICBlbWFpbFxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2V0dGluZ3NVc2VyUHJvZmlsZURlbGV0ZUFjY291bnRfVXNlckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1VzZXJQcm9maWxlRGV0YWlsc19Vc2VyIG9uIFVzZXIge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGNvbXBhbnlcXG4gICAgLi4uVXNlclByb2ZpbGVFZGl0RGlhbG9nQXZhdGFyX1VzZXJcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlNldHRpbmdzVXNlclByb2ZpbGVEZXRhaWxzX1VzZXJGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVXNlclByb2ZpbGVFZGl0RGlhbG9nQXZhdGFyX1VzZXIgb24gVXNlciB7XFxuICAgIGlkXFxuICAgIGF2YXRhclxcbiAgICAuLi5BY3RpdmVVc2VyQXZhdGFyXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Vc2VyUHJvZmlsZUVkaXREaWFsb2dBdmF0YXJfVXNlckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZUdlbmVyYWxEZWxldGVEaWFsb2dfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlNldHRpbmdzV29ya3NwYWNlR2VuZXJhbERlbGV0ZURpYWxvZ19Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzR2VuZXJhbEVkaXRBdmF0YXJfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIGxvZ29cXG4gICAgbmFtZVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VzR2VuZXJhbEVkaXRBdmF0YXJfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc0dlbmVyYWxFZGl0U2x1Z0RpYWxvZ19Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBzbHVnXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5TZXR0aW5nc1dvcmtzcGFjZXNHZW5lcmFsRWRpdFNsdWdEaWFsb2dfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc0F1dG9tYXRpb25GdW5jdGlvbnNfQXV0b21hdGVGdW5jdGlvbiBvbiBBdXRvbWF0ZUZ1bmN0aW9uIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBsb2dvXFxuICAgIGNyZWF0b3Ige1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICAgIGF2YXRhclxcbiAgICB9XFxuICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc0F1dG9tYXRpb25UYWJsZVJvd0FjdGlvbnNfQXV0b21hdGVGdW5jdGlvblxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VzQXV0b21hdGlvbkZ1bmN0aW9uc19BdXRvbWF0ZUZ1bmN0aW9uRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc0F1dG9tYXRpb25SZWdlbmVyYXRlVG9rZW5EaWFsb2dfQXV0b21hdGVGdW5jdGlvbiBvbiBBdXRvbWF0ZUZ1bmN0aW9uIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VzQXV0b21hdGlvblJlZ2VuZXJhdGVUb2tlbkRpYWxvZ19BdXRvbWF0ZUZ1bmN0aW9uRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc0F1dG9tYXRpb25UYWJsZVJvd0FjdGlvbnNfQXV0b21hdGVGdW5jdGlvbiBvbiBBdXRvbWF0ZUZ1bmN0aW9uIHtcXG4gICAgaWRcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc0F1dG9tYXRpb25UYWJsZVJvd0FjdGlvbnNfQXV0b21hdGVGdW5jdGlvblBlcm1pc3Npb25DaGVja3NcXG4gICAgfVxcbiAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNBdXRvbWF0aW9uUmVnZW5lcmF0ZVRva2VuRGlhbG9nX0F1dG9tYXRlRnVuY3Rpb25cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlNldHRpbmdzV29ya3NwYWNlc0F1dG9tYXRpb25UYWJsZVJvd0FjdGlvbnNfQXV0b21hdGVGdW5jdGlvbkZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNBdXRvbWF0aW9uVGFibGVSb3dBY3Rpb25zX0F1dG9tYXRlRnVuY3Rpb25QZXJtaXNzaW9uQ2hlY2tzIG9uIEF1dG9tYXRlRnVuY3Rpb25QZXJtaXNzaW9uQ2hlY2tzIHtcXG4gICAgY2FuUmVnZW5lcmF0ZVRva2VuIHtcXG4gICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlNldHRpbmdzV29ya3NwYWNlc0F1dG9tYXRpb25UYWJsZVJvd0FjdGlvbnNfQXV0b21hdGVGdW5jdGlvblBlcm1pc3Npb25DaGVja3NGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlQmlsbGluZ1BhZ2VfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHJvbGVcXG4gICAgc3Vic2NyaXB0aW9uIHtcXG4gICAgICBjdXJyZW5jeVxcbiAgICAgIGJpbGxpbmdJbnRlcnZhbFxcbiAgICB9XFxuICAgIHBsYW4ge1xcbiAgICAgIG5hbWVcXG4gICAgICB1c2FnZSB7XFxuICAgICAgICBwcm9qZWN0Q291bnRcXG4gICAgICAgIG1vZGVsQ291bnRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uQmlsbGluZ0FsZXJ0X1dvcmtzcGFjZVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuV29ya3NwYWNlQmlsbGluZ1BhZ2VfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNJbnZpdGVzVGFibGVfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvciBvbiBQZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yIHtcXG4gICAgaWRcXG4gICAgaW52aXRlSWRcXG4gICAgcm9sZVxcbiAgICB0aXRsZVxcbiAgICB1cGRhdGVkQXRcXG4gICAgZW1haWxcXG4gICAgdXNlciB7XFxuICAgICAgaWRcXG4gICAgICAuLi5MaW1pdGVkVXNlckF2YXRhclxcbiAgICB9XFxuICAgIGludml0ZWRCeSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5MaW1pdGVkVXNlckF2YXRhclxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5TZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzSW52aXRlc1RhYmxlX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3JGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc0ludml0ZXNUYWJsZV9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc1RhYmxlSGVhZGVyX1dvcmtzcGFjZVxcbiAgICBpbnZpdGVkVGVhbSB7XFxuICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc0ludml0ZXNUYWJsZV9QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNJbnZpdGVzVGFibGVfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNSZXF1ZXN0c1RhYmxlX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzVGFibGVIZWFkZXJfV29ya3NwYWNlXFxuICAgIGlkXFxuICAgIGFkbWluV29ya3NwYWNlc0pvaW5SZXF1ZXN0cyB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIC4uLldvcmtzcGFjZUpvaW5SZXF1ZXN0QXBwcm92ZURpYWxvZ19Xb3Jrc3BhY2VKb2luUmVxdWVzdFxcbiAgICAgICAgaWRcXG4gICAgICAgIGNyZWF0ZWRBdFxcbiAgICAgICAgc3RhdHVzXFxuICAgICAgICBlbWFpbFxcbiAgICAgICAgdXNlciB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIGF2YXRhclxcbiAgICAgICAgICBuYW1lXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5TZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzUmVxdWVzdHNUYWJsZV9Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc1RhYmxlX1dvcmtzcGFjZUNvbGxhYm9yYXRvciBvbiBXb3Jrc3BhY2VDb2xsYWJvcmF0b3Ige1xcbiAgICBpZFxcbiAgICBlbWFpbFxcbiAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzQWN0aW9uc01lbnVfVXNlclxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc1RhYmxlX1dvcmtzcGFjZUNvbGxhYm9yYXRvckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzVGFibGVIZWFkZXJfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHNsdWdcXG4gICAgcm9sZVxcbiAgICAuLi5JbnZpdGVEaWFsb2dXb3Jrc3BhY2VfV29ya3NwYWNlXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5JbnZpdGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc1RhYmxlSGVhZGVyX1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzQWN0aW9uc01lbnVfVXNlciBvbiBXb3Jrc3BhY2VDb2xsYWJvcmF0b3Ige1xcbiAgICBpZFxcbiAgICByb2xlXFxuICAgIHNlYXRUeXBlXFxuICAgIGpvaW5EYXRlXFxuICAgIHVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICAgIGF2YXRhclxcbiAgICAgIHdvcmtzcGFjZURvbWFpblBvbGljeUNvbXBsaWFudCh3b3Jrc3BhY2VTbHVnOiAkc2x1ZylcXG4gICAgfVxcbiAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzQWN0aW9uc1Byb2plY3RQZXJtaXNzaW9uc0RpYWxvZ19Vc2VyXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5TZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzQWN0aW9uc01lbnVfVXNlckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzQWN0aW9uc1Byb2plY3RQZXJtaXNzaW9uc0RpYWxvZ19Vc2VyIG9uIFdvcmtzcGFjZUNvbGxhYm9yYXRvciB7XFxuICAgIHByb2plY3RSb2xlcyB7XFxuICAgICAgcHJvamVjdCB7XFxuICAgICAgICBpZFxcbiAgICAgICAgbmFtZVxcbiAgICAgIH1cXG4gICAgICByb2xlXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNBY3Rpb25zUHJvamVjdFBlcm1pc3Npb25zRGlhbG9nX1VzZXJGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgcXVlcnkgV29ya3NwYWNlQXZhaWxhYmxlRWRpdG9yU2VhdHMoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgaWRcXG4gICAgICBzZWF0cyB7XFxuICAgICAgICBlZGl0b3JzIHtcXG4gICAgICAgICAgYXZhaWxhYmxlXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Xb3Jrc3BhY2VBdmFpbGFibGVFZGl0b3JTZWF0c0RvY3VtZW50LFxuICAgIFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNSZWdpb25zU2VsZWN0X1NlcnZlclJlZ2lvbkl0ZW0gb24gU2VydmVyUmVnaW9uSXRlbSB7XFxuICAgIGlkXFxuICAgIGtleVxcbiAgICBuYW1lXFxuICAgIGRlc2NyaXB0aW9uXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5TZXR0aW5nc1dvcmtzcGFjZXNSZWdpb25zU2VsZWN0X1NlcnZlclJlZ2lvbkl0ZW1GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlEZWZhdWx0U2VhdF9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgc2x1Z1xcbiAgICBkZWZhdWx0U2VhdFR5cGVcXG4gICAgZGlzY292ZXJhYmlsaXR5QXV0b0pvaW5FbmFibGVkXFxuICAgIHJvbGVcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5RGVmYXVsdFNlYXRfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5RGlzY292ZXJhYmlsaXR5X1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBzbHVnXFxuICAgIHJvbGVcXG4gICAgZG9tYWlucyB7XFxuICAgICAgaWRcXG4gICAgICBkb21haW5cXG4gICAgfVxcbiAgICBkaXNjb3ZlcmFiaWxpdHlFbmFibGVkXFxuICAgIGRpc2NvdmVyYWJpbGl0eUF1dG9Kb2luRW5hYmxlZFxcbiAgICBkZWZhdWx0U2VhdFR5cGVcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5RGlzY292ZXJhYmlsaXR5X1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eURvbWFpbk1hbmFnZW1lbnRfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHJvbGVcXG4gICAgZGlzY292ZXJhYmlsaXR5RW5hYmxlZFxcbiAgICBkb21haW5CYXNlZE1lbWJlcnNoaXBQcm90ZWN0aW9uRW5hYmxlZFxcbiAgICBoYXNBY2Nlc3NUb0RvbWFpbkJhc2VkU2VjdXJpdHlQb2xpY2llczogaGFzQWNjZXNzVG9GZWF0dXJlKFxcbiAgICAgIGZlYXR1cmVOYW1lOiBkb21haW5CYXNlZFNlY3VyaXR5UG9saWNpZXNcXG4gICAgKVxcbiAgICBoYXNBY2Nlc3NUb1NTTzogaGFzQWNjZXNzVG9GZWF0dXJlKGZlYXR1cmVOYW1lOiBvaWRjU3NvKVxcbiAgICBkb21haW5zIHtcXG4gICAgICBpZFxcbiAgICAgIGRvbWFpblxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5TZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eURvbWFpbk1hbmFnZW1lbnRfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5RG9tYWluUHJvdGVjdGlvbl9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgc2x1Z1xcbiAgICByb2xlXFxuICAgIGRvbWFpbkJhc2VkTWVtYmVyc2hpcFByb3RlY3Rpb25FbmFibGVkXFxuICAgIGhhc0FjY2Vzc1RvRG9tYWluQmFzZWRTZWN1cml0eVBvbGljaWVzOiBoYXNBY2Nlc3NUb0ZlYXR1cmUoXFxuICAgICAgZmVhdHVyZU5hbWU6IGRvbWFpbkJhc2VkU2VjdXJpdHlQb2xpY2llc1xcbiAgICApXFxuICAgIGRvbWFpbnMge1xcbiAgICAgIGlkXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5RG9tYWluUHJvdGVjdGlvbl9Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlEb21haW5SZW1vdmVEaWFsb2dfV29ya3NwYWNlRG9tYWluIG9uIFdvcmtzcGFjZURvbWFpbiB7XFxuICAgIGlkXFxuICAgIGRvbWFpblxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlEb21haW5SZW1vdmVEaWFsb2dfV29ya3NwYWNlRG9tYWluRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5RG9tYWluUmVtb3ZlRGlhbG9nX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBkb21haW5zIHtcXG4gICAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eURvbWFpblJlbW92ZURpYWxvZ19Xb3Jrc3BhY2VEb21haW5cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlEb21haW5SZW1vdmVEaWFsb2dfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5V29ya3NwYWNlQ3JlYXRpb25fV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHNsdWdcXG4gICAgcm9sZVxcbiAgICBpc0V4Y2x1c2l2ZVxcbiAgICBoYXNBY2Nlc3NUb0V4Y2x1c2l2ZU1lbWJlcnNoaXA6IGhhc0FjY2Vzc1RvRmVhdHVyZShmZWF0dXJlTmFtZTogZXhjbHVzaXZlTWVtYmVyc2hpcClcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbk1ha2VXb3Jrc3BhY2VFeGNsdXNpdmUge1xcbiAgICAgICAgYXV0aG9yaXplZFxcbiAgICAgICAgbWVzc2FnZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlXb3Jrc3BhY2VDcmVhdGlvbl9Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlTc29XcmFwcGVyX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICByb2xlXFxuICAgIHNsdWdcXG4gICAgc3NvIHtcXG4gICAgICBwcm92aWRlciB7XFxuICAgICAgICBpZFxcbiAgICAgICAgbmFtZVxcbiAgICAgICAgY2xpZW50SWRcXG4gICAgICAgIGlzc3VlclVybFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICBoYXNBY2Nlc3NUb1NTTzogaGFzQWNjZXNzVG9GZWF0dXJlKGZlYXR1cmVOYW1lOiBvaWRjU3NvKVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlTc29XcmFwcGVyX1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBWaWV3ZXJQYWdlU2V0dXBfU2F2ZWRWaWV3IG9uIFNhdmVkVmlldyB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlZpZXdlclBhZ2VTZXR1cF9TYXZlZFZpZXdGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgTW9kZWxQYWdlUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgY3JlYXRlZEF0XFxuICAgIG5hbWVcXG4gICAgdmlzaWJpbGl0eVxcbiAgICBsaW1pdGVkV29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIHNsdWdcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gICAgZW1iZWRPcHRpb25zIHtcXG4gICAgICBoaWRlU3BlY2tsZUJyYW5kaW5nXFxuICAgIH1cXG4gICAgaGFzQWNjZXNzVG9GZWF0dXJlKGZlYXR1cmVOYW1lOiBoaWRlU3BlY2tsZUJyYW5kaW5nKVxcbiAgICAuLi5WaWV3ZXJMaW1pdHNEaWFsb2dfUHJvamVjdFxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuTW9kZWxQYWdlUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBWaWV3ZXJDb21tZW50VGhyZWFkRGF0YSBvbiBDb21tZW50IHtcXG4gICAgaWRcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkFyY2hpdmUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuVmlld2VyQ29tbWVudFRocmVhZERhdGFGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVGhyZWFkQ29tbWVudEF0dGFjaG1lbnQgb24gQ29tbWVudCB7XFxuICAgIHRleHQge1xcbiAgICAgIGF0dGFjaG1lbnRzIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBmaWxlTmFtZVxcbiAgICAgICAgZmlsZVR5cGVcXG4gICAgICAgIGZpbGVTaXplXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5UaHJlYWRDb21tZW50QXR0YWNobWVudEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBWaWV3ZXJDb21tZW50c0xpc3RJdGVtIG9uIENvbW1lbnQge1xcbiAgICBpZFxcbiAgICByYXdUZXh0XFxuICAgIGFyY2hpdmVkXFxuICAgIGF1dGhvciB7XFxuICAgICAgLi4uTGltaXRlZFVzZXJBdmF0YXJcXG4gICAgfVxcbiAgICBjcmVhdGVkQXRcXG4gICAgdmlld2VkQXRcXG4gICAgcmVwbGllcyB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICAgIGN1cnNvclxcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIC4uLlZpZXdlckNvbW1lbnRzUmVwbHlJdGVtXFxuICAgICAgfVxcbiAgICB9XFxuICAgIHJlcGx5QXV0aG9ycyhsaW1pdDogNCkge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICAuLi5Gb3JtVXNlcnNTZWxlY3RJdGVtXFxuICAgICAgfVxcbiAgICB9XFxuICAgIHJlc291cmNlcyB7XFxuICAgICAgcmVzb3VyY2VJZFxcbiAgICAgIHJlc291cmNlVHlwZVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5WaWV3ZXJDb21tZW50c0xpc3RJdGVtRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFZpZXdlckxpbWl0c0RpYWxvZ19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICB3b3Jrc3BhY2VJZFxcbiAgICAuLi5WaWV3ZXJMaW1pdHNXb3Jrc3BhY2VEaWFsb2dfUHJvamVjdFxcbiAgICAuLi5Xb3Jrc3BhY2VNb3ZlUHJvamVjdF9Qcm9qZWN0XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5WaWV3ZXJMaW1pdHNEaWFsb2dfUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBWaWV3ZXJMaW1pdHNXb3Jrc3BhY2VEaWFsb2dfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIHJvbGVcXG4gICAgICBzbHVnXFxuICAgICAgLi4uV29ya3NwYWNlUGxhbkxpbWl0c19Xb3Jrc3BhY2VcXG4gICAgfVxcbiAgICAuLi5Vc2VMb2FkTGF0ZXN0VmVyc2lvbl9Qcm9qZWN0XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5WaWV3ZXJMaW1pdHNXb3Jrc3BhY2VEaWFsb2dfUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBWaWV3ZXJNb2RlbFZlcnNpb25DYXJkSXRlbSBvbiBWZXJzaW9uIHtcXG4gICAgaWRcXG4gICAgbWVzc2FnZVxcbiAgICByZWZlcmVuY2VkT2JqZWN0XFxuICAgIHNvdXJjZUFwcGxpY2F0aW9uXFxuICAgIGNyZWF0ZWRBdFxcbiAgICBwcmV2aWV3VXJsXFxuICAgIGF1dGhvclVzZXIge1xcbiAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlZpZXdlck1vZGVsVmVyc2lvbkNhcmRJdGVtRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFZpZXdlclJlc291cmNlc0xpbWl0QWxlcnRfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgd29ya3NwYWNlSWRcXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIHNsdWdcXG4gICAgICAuLi5WaWV3ZXJSZXNvdXJjZXNXb3Jrc3BhY2VMaW1pdEFsZXJ0X1dvcmtzcGFjZVxcbiAgICB9XFxuICAgIC4uLldvcmtzcGFjZU1vdmVQcm9qZWN0X1Byb2plY3RcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlZpZXdlclJlc291cmNlc0xpbWl0QWxlcnRfUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBWaWV3ZXJSZXNvdXJjZXNQZXJzb25hbExpbWl0QWxlcnRfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgLi4uV29ya3NwYWNlTW92ZVByb2plY3RfUHJvamVjdFxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuVmlld2VyUmVzb3VyY2VzUGVyc29uYWxMaW1pdEFsZXJ0X1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVmlld2VyUmVzb3VyY2VzV29ya3NwYWNlTGltaXRBbGVydF9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgc2x1Z1xcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuVmlld2VyUmVzb3VyY2VzV29ya3NwYWNlTGltaXRBbGVydF9Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVmlld2VyU2F2ZWRWaWV3c1BhbmVsX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVTYXZlZFZpZXcge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgc2VhdFR5cGVcXG4gICAgICBwbGFuU3VwcG9ydHNTYXZlZFZpZXdzOiBoYXNBY2Nlc3NUb0ZlYXR1cmUoZmVhdHVyZU5hbWU6IHNhdmVkVmlld3MpXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlZpZXdlclNhdmVkVmlld3NQYW5lbF9Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFZpZXdlclNhdmVkVmlld3NQYW5lbEdyb3Vwc19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBzYXZlZFZpZXdHcm91cHMoaW5wdXQ6ICRzYXZlZFZpZXdHcm91cHNJbnB1dCkge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgICBjdXJzb3JcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICBpZFxcbiAgICAgICAgLi4uVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cF9TYXZlZFZpZXdHcm91cFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwX1Byb2plY3RcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlZpZXdlclNhdmVkVmlld3NQYW5lbEdyb3Vwc19Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIHF1ZXJ5IFZpZXdlclNhdmVkVmlld3NQYW5lbEdyb3Vwc19TYXZlZFZpZXdHcm91cHMoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJHNhdmVkVmlld0dyb3Vwc0lucHV0OiBTYXZlZFZpZXdHcm91cHNJbnB1dCFcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxHcm91cHNfUHJvamVjdFxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxHcm91cHNfU2F2ZWRWaWV3R3JvdXBzRG9jdW1lbnQsXG4gICAgXCJcXG4gIGZyYWdtZW50IFZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdfU2F2ZWRWaWV3IG9uIFNhdmVkVmlldyB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgZGVzY3JpcHRpb25cXG4gICAgdGh1bWJuYWlsVXJsXFxuICAgIHZpc2liaWxpdHlcXG4gICAgaXNIb21lVmlld1xcbiAgICByZXNvdXJjZUlkc1xcbiAgICBhdXRob3Ige1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIHVwZGF0ZWRBdFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuVXBkYXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uVXNlRGVsZXRlU2F2ZWRWaWV3X1NhdmVkVmlld1xcbiAgICAuLi5Vc2VVcGRhdGVTYXZlZFZpZXdfU2F2ZWRWaWV3XFxuICAgIC4uLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdFZGl0RGlhbG9nX1NhdmVkVmlld1xcbiAgICAuLi5Vc2VTYXZlZFZpZXdWYWxpZGF0aW9uSGVscGVyc19TYXZlZFZpZXdcXG4gICAgLi4uVXNlRHJhZ2dhYmxlVmlld19TYXZlZFZpZXdcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdfU2F2ZWRWaWV3RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdEZWxldGVEaWFsb2dfU2F2ZWRWaWV3IG9uIFNhdmVkVmlldyB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgLi4uVXNlRGVsZXRlU2F2ZWRWaWV3X1NhdmVkVmlld1xcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld0RlbGV0ZURpYWxvZ19TYXZlZFZpZXdGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld0VkaXREaWFsb2dfU2F2ZWRWaWV3IG9uIFNhdmVkVmlldyB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgZGVzY3JpcHRpb25cXG4gICAgdmlzaWJpbGl0eVxcbiAgICBncm91cCB7XFxuICAgICAgLi4uRm9ybVNlbGVjdFNhdmVkVmlld0dyb3VwX1NhdmVkVmlld0dyb3VwXFxuICAgIH1cXG4gICAgLi4uVXNlVXBkYXRlU2F2ZWRWaWV3X1NhdmVkVmlld1xcbiAgICAuLi5Vc2VTYXZlZFZpZXdWYWxpZGF0aW9uSGVscGVyc19TYXZlZFZpZXdcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdFZGl0RGlhbG9nX1NhdmVkVmlld0ZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBWaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3TW92ZURpYWxvZ19TYXZlZFZpZXcgb24gU2F2ZWRWaWV3IHtcXG4gICAgaWRcXG4gICAgZ3JvdXAge1xcbiAgICAgIC4uLkZvcm1TZWxlY3RTYXZlZFZpZXdHcm91cF9TYXZlZFZpZXdHcm91cFxcbiAgICB9XFxuICAgIC4uLlVzZVVwZGF0ZVNhdmVkVmlld19TYXZlZFZpZXdcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdNb3ZlRGlhbG9nX1NhdmVkVmlld0ZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBWaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVTYXZlZFZpZXcge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgaGFzQWNjZXNzVG9GZWF0dXJlKGZlYXR1cmVOYW1lOiBwcmVzZW50YXRpb25zKVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwX1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cF9TYXZlZFZpZXdHcm91cCBvbiBTYXZlZFZpZXdHcm91cCB7XFxuICAgIGlkXFxuICAgIGlzVW5ncm91cGVkVmlld3NHcm91cFxcbiAgICByZXNvdXJjZUlkc1xcbiAgICB0aXRsZVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuVXBkYXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cElubmVyX1NhdmVkVmlld0dyb3VwXFxuICAgIC4uLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBEZWxldGVEaWFsb2dfU2F2ZWRWaWV3R3JvdXBcXG4gICAgLi4uVXNlVXBkYXRlU2F2ZWRWaWV3R3JvdXBfU2F2ZWRWaWV3R3JvdXBcXG4gICAgLi4uVXNlRHJhZ2dhYmxlVmlld1RhcmdldEdyb3VwX1NhdmVkVmlld0dyb3VwXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwX1NhdmVkVmlld0dyb3VwRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBfU2F2ZWRWaWV3R3JvdXBfUGFnaW5hdGVkIG9uIFNhdmVkVmlld0dyb3VwIHtcXG4gICAgaWRcXG4gICAgdmlld3MoaW5wdXQ6ICRzYXZlZFZpZXdzSW5wdXQpIHtcXG4gICAgICBjdXJzb3JcXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIC4uLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdfU2F2ZWRWaWV3XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwX1NhdmVkVmlld0dyb3VwX1BhZ2luYXRlZEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBWaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwRGVsZXRlRGlhbG9nX1NhdmVkVmlld0dyb3VwIG9uIFNhdmVkVmlld0dyb3VwIHtcXG4gICAgaWRcXG4gICAgdGl0bGVcXG4gICAgLi4uVXNlRGVsZXRlU2F2ZWRWaWV3R3JvdXBfU2F2ZWRWaWV3R3JvdXBcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBEZWxldGVEaWFsb2dfU2F2ZWRWaWV3R3JvdXBGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cElubmVyX1NhdmVkVmlld0dyb3VwIG9uIFNhdmVkVmlld0dyb3VwIHtcXG4gICAgaWRcXG4gICAgdGl0bGVcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBJbm5lcl9TYXZlZFZpZXdHcm91cEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBWaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwSW5uZXJfU2F2ZWRWaWV3R3JvdXBfUGFnaW5hdGVkIG9uIFNhdmVkVmlld0dyb3VwIHtcXG4gICAgaWRcXG4gICAgdmlld3MoaW5wdXQ6ICRzYXZlZFZpZXdzSW5wdXQpIHtcXG4gICAgICBjdXJzb3JcXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIC4uLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdfU2F2ZWRWaWV3XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwSW5uZXJfU2F2ZWRWaWV3R3JvdXBfUGFnaW5hdGVkRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIHF1ZXJ5IFZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBJbm5lcl9WaWV3cyhcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkZ3JvdXBJZDogSUQhXFxuICAgICRzYXZlZFZpZXdzSW5wdXQ6IFNhdmVkVmlld0dyb3VwVmlld3NJbnB1dCFcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBzYXZlZFZpZXdHcm91cChpZDogJGdyb3VwSWQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwSW5uZXJfU2F2ZWRWaWV3R3JvdXBfUGFnaW5hdGVkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwSW5uZXJfVmlld3NEb2N1bWVudCxcbiAgICBcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlQWRkUHJvamVjdE1lbnVfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgc2x1Z1xcbiAgICByb2xlXFxuICAgIHBsYW4ge1xcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQ3JlYXRlUHJvamVjdCB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhbk1vdmVQcm9qZWN0VG9Xb3Jrc3BhY2Uge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5Qcm9qZWN0c0FkZF9Xb3Jrc3BhY2VcXG4gICAgLi4uV29ya3NwYWNlTW92ZVByb2plY3RfV29ya3NwYWNlXFxuICAgIC4uLlVzZUNhbkNyZWF0ZVdvcmtzcGFjZVByb2plY3RfV29ya3NwYWNlXFxuICAgIC4uLlVzZUNhbk1vdmVQcm9qZWN0SW50b1dvcmtzcGFjZV9Xb3Jrc3BhY2VcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLldvcmtzcGFjZUFkZFByb2plY3RNZW51X1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VEYXNoYm9hcmRfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIC4uLldvcmtzcGFjZVNpZGViYXJNZW1iZXJzX1dvcmtzcGFjZVxcbiAgICAuLi5Xb3Jrc3BhY2VEYXNoYm9hcmRIZWFkZXJfV29ya3NwYWNlXFxuICAgIC4uLldvcmtzcGFjZURhc2hib2FyZFByb2plY3RMaXN0X1dvcmtzcGFjZVxcbiAgICAuLi5CaWxsaW5nQWN0aW9uc19Xb3Jrc3BhY2VcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICByb2xlXFxuICAgIGNyZWF0aW9uU3RhdGUge1xcbiAgICAgIGNvbXBsZXRlZFxcbiAgICAgIHN0YXRlXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLldvcmtzcGFjZURhc2hib2FyZF9Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlRGFzaGJvYXJkSGVhZGVyX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICAuLi5Xb3Jrc3BhY2VTaWRlYmFyTWVtYmVyc19Xb3Jrc3BhY2VcXG4gICAgLi4uV29ya3NwYWNlQWRkUHJvamVjdE1lbnVfV29ya3NwYWNlXFxuICAgIC4uLkJpbGxpbmdBbGVydF9Xb3Jrc3BhY2VcXG4gICAgaWRcXG4gICAgcm9sZVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuV29ya3NwYWNlRGFzaGJvYXJkSGVhZGVyX1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VEYXNoYm9hcmRQcm9qZWN0TGlzdF9Qcm9qZWN0Q29sbGVjdGlvbiBvbiBQcm9qZWN0Q29sbGVjdGlvbiB7XFxuICAgIHRvdGFsQ291bnRcXG4gICAgaXRlbXMge1xcbiAgICAgIC4uLlByb2plY3REYXNoYm9hcmRJdGVtXFxuICAgIH1cXG4gICAgY3Vyc29yXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Xb3Jrc3BhY2VEYXNoYm9hcmRQcm9qZWN0TGlzdF9Qcm9qZWN0Q29sbGVjdGlvbkZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VEYXNoYm9hcmRQcm9qZWN0TGlzdF9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgLi4uV29ya3NwYWNlQWRkUHJvamVjdE1lbnVfV29ya3NwYWNlXFxuICAgIGlkXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Xb3Jrc3BhY2VEYXNoYm9hcmRQcm9qZWN0TGlzdF9Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlSW52aXRlQmFubmVyX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3Igb24gUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvciB7XFxuICAgIGlkXFxuICAgIGludml0ZWRCeSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5MaW1pdGVkVXNlckF2YXRhclxcbiAgICB9XFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgICAgbG9nb1xcbiAgICB9XFxuICAgIHRva2VuXFxuICAgIHVzZXIge1xcbiAgICAgIGlkXFxuICAgIH1cXG4gICAgLi4uVXNlV29ya3NwYWNlSW52aXRlTWFuYWdlcl9QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Xb3Jrc3BhY2VJbnZpdGVCYW5uZXJfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VJbnZpdGVCbG9ja19QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yIG9uIFBlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3Ige1xcbiAgICBpZFxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICAgIGxvZ29cXG4gICAgfVxcbiAgICB0b2tlblxcbiAgICB1c2VyIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgICAuLi5MaW1pdGVkVXNlckF2YXRhclxcbiAgICB9XFxuICAgIHRpdGxlXFxuICAgIGVtYWlsXFxuICAgIC4uLlVzZVdvcmtzcGFjZUludml0ZU1hbmFnZXJfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvclxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuV29ya3NwYWNlSW52aXRlQmxvY2tfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VJbnZpdGVDYXJkX0xpbWl0ZWRXb3Jrc3BhY2Ugb24gTGltaXRlZFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgc2x1Z1xcbiAgICBkZXNjcmlwdGlvblxcbiAgICBsb2dvXFxuICAgIGFkbWluVGVhbSB7XFxuICAgICAgdXNlciB7XFxuICAgICAgICBpZFxcbiAgICAgICAgbmFtZVxcbiAgICAgICAgYXZhdGFyXFxuICAgICAgfVxcbiAgICB9XFxuICAgIHRlYW0ge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICB1c2VyIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgbmFtZVxcbiAgICAgICAgICBhdmF0YXJcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLldvcmtzcGFjZUludml0ZUNhcmRfTGltaXRlZFdvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VJbnZpdGVDYXJkX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3Igb24gUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvciB7XFxuICAgIGlkXFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgLi4uV29ya3NwYWNlSW52aXRlQ2FyZF9MaW1pdGVkV29ya3NwYWNlXFxuICAgIH1cXG4gICAgaW52aXRlZEJ5IHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuV29ya3NwYWNlSW52aXRlQ2FyZF9QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZUpvaW5SZXF1ZXN0QXBwcm92ZURpYWxvZ19Xb3Jrc3BhY2VKb2luUmVxdWVzdCBvbiBXb3Jrc3BhY2VKb2luUmVxdWVzdCB7XFxuICAgIGlkXFxuICAgIHVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuV29ya3NwYWNlSm9pblJlcXVlc3RBcHByb3ZlRGlhbG9nX1dvcmtzcGFjZUpvaW5SZXF1ZXN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlcl9Qcm9qZWN0QmFzZSBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBtb2RlbENvdW50OiBtb2RlbHMobGltaXQ6IDApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgdmVyc2lvbnMobGltaXQ6IDApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLldvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlcl9Qcm9qZWN0QmFzZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VNb3ZlUHJvamVjdE1hbmFnZXJfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgLi4uV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1Byb2plY3RCYXNlXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5Nb3ZlVG9Xb3Jrc3BhY2Uod29ya3NwYWNlSWQ6ICR3b3Jrc3BhY2VJZCkge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgc2x1Z1xcbiAgICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICAgIGNhbk1vdmVQcm9qZWN0VG9Xb3Jrc3BhY2UocHJvamVjdElkOiAkcHJvamVjdElkKSB7XFxuICAgICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLldvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlcl9Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlcl9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgcm9sZVxcbiAgICBuYW1lXFxuICAgIGxvZ29cXG4gICAgc2x1Z1xcbiAgICBwbGFuIHtcXG4gICAgICBuYW1lXFxuICAgICAgdXNhZ2Uge1xcbiAgICAgICAgcHJvamVjdENvdW50XFxuICAgICAgICBtb2RlbENvdW50XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5Nb3ZlUHJvamVjdFRvV29ya3NwYWNlKHByb2plY3RJZDogJHByb2plY3RJZCkge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICBwcm9qZWN0cyB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICAgIHRlYW0ge1xcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIHVzZXIge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBuYW1lXFxuICAgICAgICAgIGF2YXRhclxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5Xb3Jrc3BhY2VNb3ZlUHJvamVjdFNlbGVjdFdvcmtzcGFjZV9Xb3Jrc3BhY2VcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLldvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlcl9Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlTW92ZVByb2plY3RTZWxlY3RXb3Jrc3BhY2VfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgcm9sZVxcbiAgICBzbHVnXFxuICAgIHBsYW4ge1xcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuTW92ZVByb2plY3RUb1dvcmtzcGFjZShwcm9qZWN0SWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuQ3JlYXRlUHJvamVjdCB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Xb3Jrc3BhY2VNb3ZlUHJvamVjdFNlbGVjdFdvcmtzcGFjZV9Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlTW92ZVByb2plY3RTZWxlY3RXb3Jrc3BhY2VfVXNlciBvbiBVc2VyIHtcXG4gICAgd29ya3NwYWNlcyB7XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgLi4uV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1dvcmtzcGFjZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICBwcm9qZWN0cyhjdXJzb3I6ICRjdXJzb3IsIGZpbHRlcjogJGZpbHRlciwgc29ydEJ5OiAkc29ydEJ5KSB7XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgLi4uV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1Byb2plY3RcXG4gICAgICB9XFxuICAgICAgY3Vyc29yXFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Xb3Jrc3BhY2VNb3ZlUHJvamVjdFNlbGVjdFdvcmtzcGFjZV9Vc2VyRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZU1vdmVQcm9qZWN0X1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBzbHVnXFxuICAgIG5hbWVcXG4gICAgcm9sZVxcbiAgICBwbGFuIHtcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkNyZWF0ZVByb2plY3Qge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5Nb3ZlUHJvamVjdFRvV29ya3NwYWNlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uVXNlQ2FuTW92ZVByb2plY3RJbnRvV29ya3NwYWNlX1dvcmtzcGFjZVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuV29ya3NwYWNlTW92ZVByb2plY3RfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZU1vdmVQcm9qZWN0X1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHdvcmtzcGFjZUlkXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5Nb3ZlVG9Xb3Jrc3BhY2Uge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5Vc2VDYW5Nb3ZlUHJvamVjdEludG9Xb3Jrc3BhY2VfUHJvamVjdFxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuV29ya3NwYWNlTW92ZVByb2plY3RfUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VTaWRlYmFyQWJvdXRfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgZGVzY3JpcHRpb25cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLldvcmtzcGFjZVNpZGViYXJBYm91dF9Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlU2lkZWJhck1lbWJlcnNfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHNsdWdcXG4gICAgbmFtZVxcbiAgICBkb21haW5CYXNlZE1lbWJlcnNoaXBQcm90ZWN0aW9uRW5hYmxlZFxcbiAgICBkZWZhdWx0U2VhdFR5cGVcXG4gICAgc2lkZWJhclRlYW06IHRlYW0obGltaXQ6IDYpIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHVzZXIge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBuYW1lXFxuICAgICAgICAgIGF2YXRhclxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICBpbnZpdGVkVGVhbShmaWx0ZXI6ICRpbnZpdGVzRmlsdGVyKSB7XFxuICAgICAgaWRcXG4gICAgICByb2xlXFxuICAgIH1cXG4gICAgYWRtaW5Xb3Jrc3BhY2VzSm9pblJlcXVlc3RzIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgc3RhdHVzXFxuICAgICAgICBpZFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuV29ya3NwYWNlU2lkZWJhck1lbWJlcnNfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZVNpZGViYXJTZWN1cml0eV9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgc2x1Z1xcbiAgICBkb21haW5zIHtcXG4gICAgICBpZFxcbiAgICAgIGRvbWFpblxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Xb3Jrc3BhY2VTaWRlYmFyU2VjdXJpdHlfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZVNpZGViYXJfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIC4uLldvcmtzcGFjZVNpZGViYXJNZW1iZXJzX1dvcmtzcGFjZVxcbiAgICAuLi5Xb3Jrc3BhY2VTaWRlYmFyQWJvdXRfV29ya3NwYWNlXFxuICAgIC4uLldvcmtzcGFjZVNpZGViYXJTZWN1cml0eV9Xb3Jrc3BhY2VcXG4gICAgaWRcXG4gICAgcm9sZVxcbiAgICBzbHVnXFxuICAgIGRvbWFpbnMge1xcbiAgICAgIGlkXFxuICAgIH1cXG4gICAgcGxhbiB7XFxuICAgICAgbmFtZVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Xb3Jrc3BhY2VTaWRlYmFyX1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VXaXphcmRfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGNyZWF0aW9uU3RhdGUge1xcbiAgICAgIGNvbXBsZXRlZFxcbiAgICAgIHN0YXRlXFxuICAgIH1cXG4gICAgbmFtZVxcbiAgICBzbHVnXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Xb3Jrc3BhY2VXaXphcmRfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZVdpemFyZFN0ZXBSZWdpb25fU2VydmVySW5mbyBvbiBTZXJ2ZXJJbmZvIHtcXG4gICAgbXVsdGlSZWdpb24ge1xcbiAgICAgIHJlZ2lvbnMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc1JlZ2lvbnNTZWxlY3RfU2VydmVyUmVnaW9uSXRlbVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuV29ya3NwYWNlV2l6YXJkU3RlcFJlZ2lvbl9TZXJ2ZXJJbmZvRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gICAgICAgICAgZnJhZ21lbnQgQWNjRm9sZGVyQ29udGVudHMgb24gQWNjRm9sZGVyIHtcXG4gICAgICAgICAgICBpZFxcbiAgICAgICAgICAgIG5hbWVcXG4gICAgICAgICAgICBjb250ZW50cyB7XFxuICAgICAgICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgICAgIG5hbWVcXG4gICAgICAgICAgICAgICAgbGF0ZXN0VmVyc2lvbiB7XFxuICAgICAgICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICAgICAgICBuYW1lXFxuICAgICAgICAgICAgICAgICAgdmVyc2lvbk51bWJlclxcbiAgICAgICAgICAgICAgICAgIGZpbGVUeXBlXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgY2hpbGRyZW4ge1xcbiAgICAgICAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAgICAgICBpZFxcbiAgICAgICAgICAgICAgICBuYW1lXFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICBcIjogdHlwZW9mIHR5cGVzLkFjY0ZvbGRlckNvbnRlbnRzRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RBY2NTeW5jSXRlbSBvbiBBY2NTeW5jSXRlbSB7XFxuICAgIGlkXFxuICAgIHByb2plY3Qge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIG1vZGVsIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgICBhY2NSZWdpb25cXG4gICAgYWNjSHViSWRcXG4gICAgYWNjUHJvamVjdElkXFxuICAgIGFjY1Jvb3RQcm9qZWN0Rm9sZGVyVXJuXFxuICAgIGFjY0ZpbGVMaW5lYWdlVXJuXFxuICAgIGFjY0ZpbGVOYW1lXFxuICAgIGFjY0ZpbGVFeHRlbnNpb25cXG4gICAgYWNjRmlsZVZlcnNpb25JbmRleFxcbiAgICBhY2NGaWxlVmlld05hbWVcXG4gICAgdXBkYXRlZEF0XFxuICAgIHN0YXR1c1xcbiAgICBhdXRob3Ige1xcbiAgICAgIG5hbWVcXG4gICAgICBhdmF0YXJcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdEFjY1N5bmNJdGVtRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIG11dGF0aW9uIENyZWF0ZUFjY1N5bmNJdGVtKCRpbnB1dDogQ3JlYXRlQWNjU3luY0l0ZW1JbnB1dCEpIHtcXG4gICAgYWNjU3luY0l0ZW1NdXRhdGlvbnMge1xcbiAgICAgIGNyZWF0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgbW9kZWwge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBuYW1lXFxuICAgICAgICB9XFxuICAgICAgICBhdXRob3Ige1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBuYW1lXFxuICAgICAgICB9XFxuICAgICAgICBhY2NGaWxlTmFtZVxcbiAgICAgICAgYWNjRmlsZUxpbmVhZ2VVcm5cXG4gICAgICAgIGFjY0ZpbGVWaWV3TmFtZVxcbiAgICAgICAgc3RhdHVzXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5DcmVhdGVBY2NTeW5jSXRlbURvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBEZWxldGVBY2NTeW5jSXRlbSgkaW5wdXQ6IERlbGV0ZUFjY1N5bmNJdGVtSW5wdXQhKSB7XFxuICAgIGFjY1N5bmNJdGVtTXV0YXRpb25zIHtcXG4gICAgICBkZWxldGUoaW5wdXQ6ICRpbnB1dClcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuRGVsZXRlQWNjU3luY0l0ZW1Eb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gVXBkYXRlQWNjU3luY0l0ZW0oJGlucHV0OiBVcGRhdGVBY2NTeW5jSXRlbUlucHV0ISkge1xcbiAgICBhY2NTeW5jSXRlbU11dGF0aW9ucyB7XFxuICAgICAgdXBkYXRlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBzdGF0dXNcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlVwZGF0ZUFjY1N5bmNJdGVtRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFByb2plY3RBY2NTeW5jSXRlbXMoJGlkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRpZCkge1xcbiAgICAgIGFjY1N5bmNJdGVtcyB7XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIC4uLlByb2plY3RBY2NTeW5jSXRlbVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdEFjY1N5bmNJdGVtc0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBBY2NGb2xkZXJEYXRhKFxcbiAgICAkd29ya3NwYWNlU2x1ZzogU3RyaW5nIVxcbiAgICAkYWNjVG9rZW46IFN0cmluZyFcXG4gICAgJGFjY1Byb2plY3RJZDogU3RyaW5nIVxcbiAgICAkYWNjRm9sZGVySWQ6IFN0cmluZyFcXG4gICkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHdvcmtzcGFjZVNsdWcpIHtcXG4gICAgICBpZFxcbiAgICAgIGludGVncmF0aW9ucyB7XFxuICAgICAgICBhY2ModG9rZW46ICRhY2NUb2tlbikge1xcbiAgICAgICAgICBmb2xkZXIocHJvamVjdElkOiAkYWNjUHJvamVjdElkLCBmb2xkZXJJZDogJGFjY0ZvbGRlcklkKSB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICAuLi5BY2NJbnRlZ3JhdGlvbkZvbGRlck5vZGVfQWNjRm9sZGVyXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkFjY0ZvbGRlckRhdGFEb2N1bWVudCxcbiAgICBcIlxcbiAgc3Vic2NyaXB0aW9uIE9uUHJvamVjdEFjY1N5bmNJdGVtVXBkYXRlZCgkaWQ6IFN0cmluZyEsICRpdGVtSWRzOiBbU3RyaW5nIV0pIHtcXG4gICAgcHJvamVjdEFjY1N5bmNJdGVtc1VwZGF0ZWQoaWQ6ICRpZCwgaXRlbUlkczogJGl0ZW1JZHMpIHtcXG4gICAgICB0eXBlXFxuICAgICAgYWNjU3luY0l0ZW0ge1xcbiAgICAgICAgLi4uUHJvamVjdEFjY1N5bmNJdGVtXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5PblByb2plY3RBY2NTeW5jSXRlbVVwZGF0ZWREb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgQWN0aXZlVXNlck1haW5NZXRhZGF0YSB7XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgZW1haWxcXG4gICAgICBlbWFpbHMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGVtYWlsXFxuICAgICAgICB2ZXJpZmllZFxcbiAgICAgICAgcHJpbWFyeVxcbiAgICAgIH1cXG4gICAgICBjb21wYW55XFxuICAgICAgYmlvXFxuICAgICAgbmFtZVxcbiAgICAgIHJvbGVcXG4gICAgICBhdmF0YXJcXG4gICAgICBpc09uYm9hcmRpbmdGaW5pc2hlZFxcbiAgICAgIGNyZWF0ZWRBdFxcbiAgICAgIHZlcmlmaWVkXFxuICAgICAgbm90aWZpY2F0aW9uUHJlZmVyZW5jZXNcXG4gICAgICB2ZXJzaW9ucyhsaW1pdDogMCkge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgIH1cXG4gICAgICAuLi5Qcm9qZWN0c0FkZF9Vc2VyXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkFjdGl2ZVVzZXJNYWluTWV0YWRhdGFEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgQWN0aXZlVXNlclByb2plY3RzVG9Nb3ZlKCRmaWx0ZXI6IFVzZXJQcm9qZWN0c0ZpbHRlcikge1xcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICBpZFxcbiAgICAgIHByb2plY3RzKGZpbHRlcjogJGZpbHRlcikge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQWN0aXZlVXNlclByb2plY3RzVG9Nb3ZlRG9jdW1lbnQsXG4gICAgXCJcXG4gIGZyYWdtZW50IEZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHQgb24gUGVybWlzc2lvbkNoZWNrUmVzdWx0IHtcXG4gICAgYXV0aG9yaXplZFxcbiAgICBjb2RlXFxuICAgIG1lc3NhZ2VcXG4gICAgcGF5bG9hZFxcbiAgICBlcnJvck1lc3NhZ2VcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgbXV0YXRpb24gRmluaXNoT25ib2FyZGluZygkaW5wdXQ6IE9uYm9hcmRpbmdDb21wbGV0aW9uSW5wdXQpIHtcXG4gICAgYWN0aXZlVXNlck11dGF0aW9ucyB7XFxuICAgICAgZmluaXNoT25ib2FyZGluZyhpbnB1dDogJGlucHV0KVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5GaW5pc2hPbmJvYXJkaW5nRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIFJlcXVlc3RWZXJpZmljYXRpb25CeUVtYWlsKCRlbWFpbDogU3RyaW5nISkge1xcbiAgICByZXF1ZXN0VmVyaWZpY2F0aW9uQnlFbWFpbChlbWFpbDogJGVtYWlsKVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUmVxdWVzdFZlcmlmaWNhdGlvbkJ5RW1haWxEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgQXV0aExvZ2luUGFuZWwge1xcbiAgICBzZXJ2ZXJJbmZvIHtcXG4gICAgICBhdXRoU3RyYXRlZ2llcyB7XFxuICAgICAgICBpZFxcbiAgICAgIH1cXG4gICAgICAuLi5BdXRoU3RhdGVnaWVzU2VydmVySW5mb0ZyYWdtZW50XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkF1dGhMb2dpblBhbmVsRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IEF1dGhSZWdpc3RlclBhbmVsKCR0b2tlbjogU3RyaW5nKSB7XFxuICAgIHNlcnZlckluZm8ge1xcbiAgICAgIGludml0ZU9ubHlcXG4gICAgICBhdXRoU3RyYXRlZ2llcyB7XFxuICAgICAgICBpZFxcbiAgICAgIH1cXG4gICAgICAuLi5BdXRoU3RhdGVnaWVzU2VydmVySW5mb0ZyYWdtZW50XFxuICAgICAgLi4uU2VydmVyVGVybXNPZlNlcnZpY2VQcml2YWN5UG9saWN5RnJhZ21lbnRcXG4gICAgfVxcbiAgICBzZXJ2ZXJJbnZpdGVCeVRva2VuKHRva2VuOiAkdG9rZW4pIHtcXG4gICAgICBpZFxcbiAgICAgIGVtYWlsXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkF1dGhSZWdpc3RlclBhbmVsRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IEF1dGhMb2dpblBhbmVsV29ya3NwYWNlSW52aXRlKCR0b2tlbjogU3RyaW5nKSB7XFxuICAgIHdvcmtzcGFjZUludml0ZSh0b2tlbjogJHRva2VuKSB7XFxuICAgICAgaWRcXG4gICAgICBlbWFpbFxcbiAgICAgIC4uLkF1dGhXb3Jrc3BhY2VJbnZpdGVIZWFkZXJfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvclxcbiAgICAgIC4uLkF1dGhMb2dpbldpdGhFbWFpbEJsb2NrX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3JcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQXV0aExvZ2luUGFuZWxXb3Jrc3BhY2VJbnZpdGVEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgQXV0aG9yaXphYmxlQXBwTWV0YWRhdGEoJGlkOiBTdHJpbmchKSB7XFxuICAgIGFwcChpZDogJGlkKSB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgICAgZGVzY3JpcHRpb25cXG4gICAgICB0cnVzdEJ5RGVmYXVsdFxcbiAgICAgIHJlZGlyZWN0VXJsXFxuICAgICAgc2NvcGVzIHtcXG4gICAgICAgIG5hbWVcXG4gICAgICAgIGRlc2NyaXB0aW9uXFxuICAgICAgfVxcbiAgICAgIGF1dGhvciB7XFxuICAgICAgICBuYW1lXFxuICAgICAgICBpZFxcbiAgICAgICAgYXZhdGFyXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5BdXRob3JpemFibGVBcHBNZXRhZGF0YURvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBBY3RpdmVVc2VyV29ya3NwYWNlRXhpc3RlbmNlQ2hlY2soJGZpbHRlcjogVXNlclByb2plY3RzRmlsdGVyKSB7XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgdmVyaWZpZWRcXG4gICAgICBpc09uYm9hcmRpbmdGaW5pc2hlZFxcbiAgICAgIHZlcnNpb25zKGxpbWl0OiAwKSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICAgIHByb2plY3RzKGZpbHRlcjogJGZpbHRlcikge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgIH1cXG4gICAgICB3b3Jrc3BhY2VzKGxpbWl0OiAwKSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIHNsdWdcXG4gICAgICAgICAgY3JlYXRpb25TdGF0ZSB7XFxuICAgICAgICAgICAgY29tcGxldGVkXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgZGlzY292ZXJhYmxlV29ya3NwYWNlcyB7XFxuICAgICAgICBpZFxcbiAgICAgIH1cXG4gICAgICB3b3Jrc3BhY2VKb2luUmVxdWVzdHMobGltaXQ6IDApIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkFjdGl2ZVVzZXJXb3Jrc3BhY2VFeGlzdGVuY2VDaGVja0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBBY3RpdmVVc2VyQWN0aXZlV29ya3NwYWNlQ2hlY2sge1xcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICBpZFxcbiAgICAgIGFjdGl2ZVdvcmtzcGFjZSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgcm9sZVxcbiAgICAgICAgc2x1Z1xcbiAgICAgIH1cXG4gICAgICB3b3Jrc3BhY2VzKGxpbWl0OiAxKSB7XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIHNsdWdcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkFjdGl2ZVVzZXJBY3RpdmVXb3Jrc3BhY2VDaGVja0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBwcm9qZWN0V29ya3NwYWNlQWNjZXNzQ2hlY2soJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICByb2xlXFxuICAgICAgd29ya3NwYWNlIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBzbHVnXFxuICAgICAgICByb2xlXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Qcm9qZWN0V29ya3NwYWNlQWNjZXNzQ2hlY2tEb2N1bWVudCxcbiAgICBcIlxcbiAgZnJhZ21lbnQgRnVuY3Rpb25SdW5TdGF0dXNGb3JTdW1tYXJ5IG9uIEF1dG9tYXRlRnVuY3Rpb25SdW4ge1xcbiAgICBpZFxcbiAgICBzdGF0dXNcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkZ1bmN0aW9uUnVuU3RhdHVzRm9yU3VtbWFyeUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBUcmlnZ2VyZWRBdXRvbWF0aW9uc1N0YXR1c1N1bW1hcnkgb24gVHJpZ2dlcmVkQXV0b21hdGlvbnNTdGF0dXMge1xcbiAgICBpZFxcbiAgICBhdXRvbWF0aW9uUnVucyB7XFxuICAgICAgaWRcXG4gICAgICBmdW5jdGlvblJ1bnMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIC4uLkZ1bmN0aW9uUnVuU3RhdHVzRm9yU3VtbWFyeVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuVHJpZ2dlcmVkQXV0b21hdGlvbnNTdGF0dXNTdW1tYXJ5RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IEF1dG9tYXRpb25SdW5EZXRhaWxzIG9uIEF1dG9tYXRlUnVuIHtcXG4gICAgaWRcXG4gICAgc3RhdHVzXFxuICAgIGZ1bmN0aW9uUnVucyB7XFxuICAgICAgLi4uRnVuY3Rpb25SdW5TdGF0dXNGb3JTdW1tYXJ5XFxuICAgICAgc3RhdHVzTWVzc2FnZVxcbiAgICB9XFxuICAgIHRyaWdnZXIge1xcbiAgICAgIC4uLiBvbiBWZXJzaW9uQ3JlYXRlZFRyaWdnZXIge1xcbiAgICAgICAgdmVyc2lvbiB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICB9XFxuICAgICAgICBtb2RlbCB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICAgIGNyZWF0ZWRBdFxcbiAgICB1cGRhdGVkQXRcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkF1dG9tYXRpb25SdW5EZXRhaWxzRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IEF1dG9tYXRpb25zU3RhdHVzT3JkZXJlZFJ1bnNfQXV0b21hdGlvblJ1biBvbiBBdXRvbWF0ZVJ1biB7XFxuICAgIGlkXFxuICAgIGF1dG9tYXRpb24ge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIGZ1bmN0aW9uUnVucyB7XFxuICAgICAgaWRcXG4gICAgICB1cGRhdGVkQXRcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQXV0b21hdGlvbnNTdGF0dXNPcmRlcmVkUnVuc19BdXRvbWF0aW9uUnVuRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNlYXJjaEF1dG9tYXRlRnVuY3Rpb25SZWxlYXNlSXRlbSBvbiBBdXRvbWF0ZUZ1bmN0aW9uUmVsZWFzZSB7XFxuICAgIGlkXFxuICAgIHZlcnNpb25UYWdcXG4gICAgY3JlYXRlZEF0XFxuICAgIGlucHV0U2NoZW1hXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5TZWFyY2hBdXRvbWF0ZUZ1bmN0aW9uUmVsZWFzZUl0ZW1GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgbXV0YXRpb24gQ3JlYXRlQXV0b21hdGVGdW5jdGlvbigkaW5wdXQ6IENyZWF0ZUF1dG9tYXRlRnVuY3Rpb25JbnB1dCEpIHtcXG4gICAgYXV0b21hdGVNdXRhdGlvbnMge1xcbiAgICAgIGNyZWF0ZUZ1bmN0aW9uKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5BdXRvbWF0aW9uc0Z1bmN0aW9uc0NhcmRfQXV0b21hdGVGdW5jdGlvblxcbiAgICAgICAgLi4uQXV0b21hdGVGdW5jdGlvbkNyZWF0ZURpYWxvZ0RvbmVTdGVwX0F1dG9tYXRlRnVuY3Rpb25cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkNyZWF0ZUF1dG9tYXRlRnVuY3Rpb25Eb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gVXBkYXRlQXV0b21hdGVGdW5jdGlvbigkaW5wdXQ6IFVwZGF0ZUF1dG9tYXRlRnVuY3Rpb25JbnB1dCEpIHtcXG4gICAgYXV0b21hdGVNdXRhdGlvbnMge1xcbiAgICAgIHVwZGF0ZUZ1bmN0aW9uKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5BdXRvbWF0ZUZ1bmN0aW9uUGFnZV9BdXRvbWF0ZUZ1bmN0aW9uXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5VcGRhdGVBdXRvbWF0ZUZ1bmN0aW9uRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIFJlZ2VuZXJhdGVGdW5jdGlvblRva2VuKCRmdW5jdGlvbklkOiBTdHJpbmchKSB7XFxuICAgIGF1dG9tYXRlTXV0YXRpb25zIHtcXG4gICAgICByZWdlbmVyYXRlRnVuY3Rpb25Ub2tlbihmdW5jdGlvbklkOiAkZnVuY3Rpb25JZClcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUmVnZW5lcmF0ZUZ1bmN0aW9uVG9rZW5Eb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgU2VhcmNoQXV0b21hdGVGdW5jdGlvblJlbGVhc2VzKFxcbiAgICAkZnVuY3Rpb25JZDogSUQhXFxuICAgICRjdXJzb3I6IFN0cmluZ1xcbiAgICAkbGltaXQ6IEludFxcbiAgICAkZmlsdGVyOiBBdXRvbWF0ZUZ1bmN0aW9uUmVsZWFzZXNGaWx0ZXJcXG4gICkge1xcbiAgICBhdXRvbWF0ZUZ1bmN0aW9uKGlkOiAkZnVuY3Rpb25JZCkge1xcbiAgICAgIGlkXFxuICAgICAgcmVsZWFzZXMoY3Vyc29yOiAkY3Vyc29yLCBsaW1pdDogJGxpbWl0LCBmaWx0ZXI6ICRmaWx0ZXIpIHtcXG4gICAgICAgIGN1cnNvclxcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAuLi5TZWFyY2hBdXRvbWF0ZUZ1bmN0aW9uUmVsZWFzZUl0ZW1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlNlYXJjaEF1dG9tYXRlRnVuY3Rpb25SZWxlYXNlc0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBGdW5jdGlvbkFjY2Vzc0NoZWNrKCRpZDogSUQhKSB7XFxuICAgIGF1dG9tYXRlRnVuY3Rpb24oaWQ6ICRpZCkge1xcbiAgICAgIGlkXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkZ1bmN0aW9uQWNjZXNzQ2hlY2tEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgUHJvamVjdEF1dG9tYXRpb25DcmVhdGlvblB1YmxpY0tleXMoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJGF1dG9tYXRpb25JZDogU3RyaW5nIVxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIGF1dG9tYXRpb24oaWQ6ICRhdXRvbWF0aW9uSWQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBjcmVhdGlvblB1YmxpY0tleXNcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RBdXRvbWF0aW9uQ3JlYXRpb25QdWJsaWNLZXlzRG9jdW1lbnQsXG4gICAgXCJcXG4gIGZyYWdtZW50IEJpbGxpbmdBY3Rpb25zX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGludml0ZWRUZWFtKGZpbHRlcjogJGludml0ZXNGaWx0ZXIpIHtcXG4gICAgICBpZFxcbiAgICB9XFxuICAgIHBsYW4ge1xcbiAgICAgIG5hbWVcXG4gICAgICBzdGF0dXNcXG4gICAgfVxcbiAgICBzdWJzY3JpcHRpb24ge1xcbiAgICAgIGJpbGxpbmdJbnRlcnZhbFxcbiAgICB9XFxuICAgIHRlYW0ge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgfVxcbiAgICBkZWZhdWx0UmVnaW9uIHtcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkJpbGxpbmdBY3Rpb25zX1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcmljZXNQcmljZSBvbiBQcmljZSB7XFxuICAgIGFtb3VudFxcbiAgICBjdXJyZW5jeVN5bWJvbFxcbiAgICBjdXJyZW5jeVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJpY2VzUHJpY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJpY2VzV29ya3NwYWNlUGxhblByaWNlIG9uIFdvcmtzcGFjZVBsYW5QcmljZSB7XFxuICAgIG1vbnRobHkge1xcbiAgICAgIC4uLlByaWNlc1ByaWNlXFxuICAgIH1cXG4gICAgeWVhcmx5IHtcXG4gICAgICAuLi5QcmljZXNQcmljZVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5QcmljZXNXb3Jrc3BhY2VQbGFuUHJpY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJpY2VzV29ya3NwYWNlUGFpZFBsYW5QcmljZXMgb24gV29ya3NwYWNlUGFpZFBsYW5QcmljZXMge1xcbiAgICB0ZWFtIHtcXG4gICAgICAuLi5QcmljZXNXb3Jrc3BhY2VQbGFuUHJpY2VcXG4gICAgfVxcbiAgICB0ZWFtVW5saW1pdGVkIHtcXG4gICAgICAuLi5QcmljZXNXb3Jrc3BhY2VQbGFuUHJpY2VcXG4gICAgfVxcbiAgICBwcm8ge1xcbiAgICAgIC4uLlByaWNlc1dvcmtzcGFjZVBsYW5QcmljZVxcbiAgICB9XFxuICAgIHByb1VubGltaXRlZCB7XFxuICAgICAgLi4uUHJpY2VzV29ya3NwYWNlUGxhblByaWNlXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByaWNlc1dvcmtzcGFjZVBhaWRQbGFuUHJpY2VzRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByaWNlc0N1cnJlbmN5QmFzZWRQcmljZXMgb24gQ3VycmVuY3lCYXNlZFByaWNlcyB7XFxuICAgIGdicCB7XFxuICAgICAgLi4uUHJpY2VzV29ya3NwYWNlUGFpZFBsYW5QcmljZXNcXG4gICAgfVxcbiAgICB1c2Qge1xcbiAgICAgIC4uLlByaWNlc1dvcmtzcGFjZVBhaWRQbGFuUHJpY2VzXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByaWNlc0N1cnJlbmN5QmFzZWRQcmljZXNGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgcXVlcnkgVXNlV29ya3NwYWNlUGxhblByaWNlcyB7XFxuICAgIHNlcnZlckluZm8ge1xcbiAgICAgIHdvcmtzcGFjZXMge1xcbiAgICAgICAgcGxhblByaWNlcyB7XFxuICAgICAgICAgIC4uLlByaWNlc0N1cnJlbmN5QmFzZWRQcmljZXNcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlVzZVdvcmtzcGFjZVBsYW5QcmljZXNEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgVXNlQWN0aXZlV29ya3NwYWNlUGxhblByaWNlcygkc2x1ZzogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHNsdWcpIHtcXG4gICAgICBpZFxcbiAgICAgIHBsYW5QcmljZXMge1xcbiAgICAgICAgLi4uUHJpY2VzV29ya3NwYWNlUGFpZFBsYW5QcmljZXNcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlVzZUFjdGl2ZVdvcmtzcGFjZVBsYW5QcmljZXNEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gQmlsbGluZ0NyZWF0ZUNoZWNrb3V0U2Vzc2lvbigkaW5wdXQ6IENoZWNrb3V0U2Vzc2lvbklucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIGJpbGxpbmcge1xcbiAgICAgICAgY3JlYXRlQ2hlY2tvdXRTZXNzaW9uKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgdXJsXFxuICAgICAgICAgIGlkXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5CaWxsaW5nQ3JlYXRlQ2hlY2tvdXRTZXNzaW9uRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIEJpbGxpbmdVcGdyYWRlUGxhbigkaW5wdXQ6IFVwZ3JhZGVQbGFuSW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgYmlsbGluZyB7XFxuICAgICAgICB1cGdyYWRlUGxhbihpbnB1dDogJGlucHV0KVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQmlsbGluZ1VwZ3JhZGVQbGFuRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IE1lbnRpb25zVXNlclNlYXJjaCgkcXVlcnk6IFN0cmluZyEsICRwcm9qZWN0SWQ6IFN0cmluZykge1xcbiAgICB1c2VycyhpbnB1dDogeyBxdWVyeTogJHF1ZXJ5LCBsaW1pdDogNSwgY3Vyc29yOiBudWxsLCBwcm9qZWN0SWQ6ICRwcm9qZWN0SWQgfSkge1xcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBuYW1lXFxuICAgICAgICBjb21wYW55XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5NZW50aW9uc1VzZXJTZWFyY2hEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgU2VydmVySW5mb0Jsb2JTaXplTGltaXQge1xcbiAgICBzZXJ2ZXJJbmZvIHtcXG4gICAgICBjb25maWd1cmF0aW9uIHtcXG4gICAgICAgIGJsb2JTaXplTGltaXRCeXRlc1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2VydmVySW5mb0Jsb2JTaXplTGltaXREb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgU2VydmVySW5mb0FsbFNjb3BlcyB7XFxuICAgIHNlcnZlckluZm8ge1xcbiAgICAgIHNjb3BlcyB7XFxuICAgICAgICBuYW1lXFxuICAgICAgICBkZXNjcmlwdGlvblxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2VydmVySW5mb0FsbFNjb3Blc0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBTZXJ2ZXJJbmZvRW1haWxWZXJpZmljYXRpb25UaW1lb3V0IHtcXG4gICAgc2VydmVySW5mbyB7XFxuICAgICAgY29uZmlndXJhdGlvbiB7XFxuICAgICAgICBlbWFpbFZlcmlmaWNhdGlvblRpbWVvdXRNaW51dGVzXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5TZXJ2ZXJJbmZvRW1haWxWZXJpZmljYXRpb25UaW1lb3V0RG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFByb2plY3RNb2RlbHNTZWxlY3RvclZhbHVlcygkcHJvamVjdElkOiBTdHJpbmchLCAkY3Vyc29yOiBTdHJpbmcpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgbW9kZWxzKGxpbWl0OiAxMDAsIGN1cnNvcjogJGN1cnNvcikge1xcbiAgICAgICAgY3Vyc29yXFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIC4uLkNvbW1vbk1vZGVsU2VsZWN0b3JNb2RlbFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdE1vZGVsc1NlbGVjdG9yVmFsdWVzRG9jdW1lbnQsXG4gICAgXCJcXG4gIGZyYWdtZW50IFVzZUZhaWxlZEZpbGVJbXBvcnRKb2JVdGlsc19GaWxlVXBsb2FkIG9uIEZpbGVVcGxvYWQge1xcbiAgICBpZFxcbiAgICBmaWxlTmFtZVxcbiAgICBwcm9qZWN0SWRcXG4gICAgbW9kZWxJZFxcbiAgICB1cGRhdGVkQXRcXG4gICAgY29udmVydGVkU3RhdHVzXFxuICAgIGNvbnZlcnRlZE1lc3NhZ2VcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlVzZUZhaWxlZEZpbGVJbXBvcnRKb2JVdGlsc19GaWxlVXBsb2FkRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIG11dGF0aW9uIEdlbmVyYXRlVXBsb2FkVXJsKCRpbnB1dDogR2VuZXJhdGVGaWxlVXBsb2FkVXJsSW5wdXQhKSB7XFxuICAgIGZpbGVVcGxvYWRNdXRhdGlvbnMge1xcbiAgICAgIGdlbmVyYXRlVXBsb2FkVXJsKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIHVybFxcbiAgICAgICAgZmlsZUlkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5HZW5lcmF0ZVVwbG9hZFVybERvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBTdGFydEZpbGVJbXBvcnQoJGlucHV0OiBTdGFydEZpbGVJbXBvcnRJbnB1dCEpIHtcXG4gICAgZmlsZVVwbG9hZE11dGF0aW9ucyB7XFxuICAgICAgc3RhcnRGaWxlSW1wb3J0KGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5TdGFydEZpbGVJbXBvcnREb2N1bWVudCxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVXNlRmlsZUltcG9ydF9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuVXNlRmlsZUltcG9ydF9Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFVzZUZpbGVJbXBvcnRfTW9kZWwgb24gTW9kZWwge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Vc2VGaWxlSW1wb3J0X01vZGVsRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIHF1ZXJ5IE1haW5TZXJ2ZXJJbmZvRGF0YSB7XFxuICAgIHNlcnZlckluZm8ge1xcbiAgICAgIGFkbWluQ29udGFjdFxcbiAgICAgIGNhbm9uaWNhbFVybFxcbiAgICAgIGNvbXBhbnlcXG4gICAgICBkZXNjcmlwdGlvblxcbiAgICAgIGd1ZXN0TW9kZUVuYWJsZWRcXG4gICAgICBpbnZpdGVPbmx5XFxuICAgICAgbmFtZVxcbiAgICAgIHRlcm1zT2ZTZXJ2aWNlXFxuICAgICAgdmVyc2lvblxcbiAgICAgIGF1dG9tYXRlVXJsXFxuICAgICAgY29uZmlndXJhdGlvbiB7XFxuICAgICAgICBpc0VtYWlsRW5hYmxlZFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuTWFpblNlcnZlckluZm9EYXRhRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIENyZWF0ZURhc2hib2FyZChcXG4gICAgJHdvcmtzcGFjZTogV29ya3NwYWNlSWRlbnRpZmllciFcXG4gICAgJGlucHV0OiBEYXNoYm9hcmRDcmVhdGVJbnB1dCFcXG4gICkge1xcbiAgICBkYXNoYm9hcmRNdXRhdGlvbnMge1xcbiAgICAgIGNyZWF0ZSh3b3Jrc3BhY2U6ICR3b3Jrc3BhY2UsIGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICB3b3Jrc3BhY2Uge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQ3JlYXRlRGFzaGJvYXJkRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIFVwZGF0ZURhc2hib2FyZCgkaW5wdXQ6IERhc2hib2FyZFVwZGF0ZUlucHV0ISkge1xcbiAgICBkYXNoYm9hcmRNdXRhdGlvbnMge1xcbiAgICAgIHVwZGF0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgbmFtZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuVXBkYXRlRGFzaGJvYXJkRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIERlbGV0ZURhc2hib2FyZCgkaWQ6IFN0cmluZyEpIHtcXG4gICAgZGFzaGJvYXJkTXV0YXRpb25zIHtcXG4gICAgICBkZWxldGUoaWQ6ICRpZClcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuRGVsZXRlRGFzaGJvYXJkRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IERhc2hib2FyZEFjY2Vzc0NoZWNrKCRpZDogU3RyaW5nISkge1xcbiAgICBkYXNoYm9hcmQoaWQ6ICRpZCkge1xcbiAgICAgIGlkXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkRhc2hib2FyZEFjY2Vzc0NoZWNrRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IERhc2hib2FyZCgkaWQ6IFN0cmluZyEpIHtcXG4gICAgZGFzaGJvYXJkKGlkOiAkaWQpIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLldvcmtzcGFjZURhc2hib2FyZHNfRGFzaGJvYXJkXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkRhc2hib2FyZERvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBXb3Jrc3BhY2VEYXNoYm9hcmRzKFxcbiAgICAkd29ya3NwYWNlU2x1ZzogU3RyaW5nIVxcbiAgICAkY3Vyc29yOiBTdHJpbmdcXG4gICAgJGZpbHRlcjogV29ya3NwYWNlRGFzaGJvYXJkc0ZpbHRlclxcbiAgKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkd29ya3NwYWNlU2x1Zykge1xcbiAgICAgIGlkXFxuICAgICAgZGFzaGJvYXJkcyhjdXJzb3I6ICRjdXJzb3IsIGZpbHRlcjogJGZpbHRlcikge1xcbiAgICAgICAgY3Vyc29yXFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLkRhc2hib2FyZHNDYXJkX0Rhc2hib2FyZFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuV29ya3NwYWNlRGFzaGJvYXJkc0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBQcm9qZWN0RGFzaGJvYXJkcyhcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkY3Vyc29yOiBTdHJpbmdcXG4gICAgJGZpbHRlcjogUHJvamVjdERhc2hib2FyZHNGaWx0ZXJcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICB3b3Jrc3BhY2Uge1xcbiAgICAgICAgc2x1Z1xcbiAgICAgIH1cXG4gICAgICBkYXNoYm9hcmRzKGN1cnNvcjogJGN1cnNvciwgZmlsdGVyOiAkZmlsdGVyKSB7XFxuICAgICAgICBjdXJzb3JcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uRGFzaGJvYXJkc0NhcmRfRGFzaGJvYXJkXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Qcm9qZWN0RGFzaGJvYXJkc0RvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBEZWxldGVBY2Nlc3NUb2tlbigkdG9rZW46IFN0cmluZyEpIHtcXG4gICAgYXBpVG9rZW5SZXZva2UodG9rZW46ICR0b2tlbilcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkRlbGV0ZUFjY2Vzc1Rva2VuRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIENyZWF0ZUFjY2Vzc1Rva2VuKCR0b2tlbjogQXBpVG9rZW5DcmVhdGVJbnB1dCEpIHtcXG4gICAgYXBpVG9rZW5DcmVhdGUodG9rZW46ICR0b2tlbilcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkNyZWF0ZUFjY2Vzc1Rva2VuRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIERlbGV0ZUFwcGxpY2F0aW9uKCRhcHBJZDogU3RyaW5nISkge1xcbiAgICBhcHBEZWxldGUoYXBwSWQ6ICRhcHBJZClcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkRlbGV0ZUFwcGxpY2F0aW9uRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIENyZWF0ZUFwcGxpY2F0aW9uKCRhcHA6IEFwcENyZWF0ZUlucHV0ISkge1xcbiAgICBhcHBDcmVhdGUoYXBwOiAkYXBwKVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQ3JlYXRlQXBwbGljYXRpb25Eb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gRWRpdEFwcGxpY2F0aW9uKCRhcHA6IEFwcFVwZGF0ZUlucHV0ISkge1xcbiAgICBhcHBVcGRhdGUoYXBwOiAkYXBwKVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuRWRpdEFwcGxpY2F0aW9uRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIFJldm9rZUFwcEFjY2VzcygkYXBwSWQ6IFN0cmluZyEpIHtcXG4gICAgYXBwUmV2b2tlQWNjZXNzKGFwcElkOiAkYXBwSWQpXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5SZXZva2VBcHBBY2Nlc3NEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgRGV2ZWxvcGVyU2V0dGluZ3NBY2Nlc3NUb2tlbnMge1xcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICBpZFxcbiAgICAgIGFwaVRva2VucyB7XFxuICAgICAgICBpZFxcbiAgICAgICAgbmFtZVxcbiAgICAgICAgbGFzdFVzZWRcXG4gICAgICAgIGxhc3RDaGFyc1xcbiAgICAgICAgY3JlYXRlZEF0XFxuICAgICAgICBzY29wZXNcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkRldmVsb3BlclNldHRpbmdzQWNjZXNzVG9rZW5zRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IERldmVsb3BlclNldHRpbmdzQXBwbGljYXRpb25zIHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgY3JlYXRlZEFwcHMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHNlY3JldFxcbiAgICAgICAgbmFtZVxcbiAgICAgICAgZGVzY3JpcHRpb25cXG4gICAgICAgIHJlZGlyZWN0VXJsXFxuICAgICAgICBzY29wZXMge1xcbiAgICAgICAgICBuYW1lXFxuICAgICAgICAgIGRlc2NyaXB0aW9uXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIGlkXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkRldmVsb3BlclNldHRpbmdzQXBwbGljYXRpb25zRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IERldmVsb3BlclNldHRpbmdzQXV0aG9yaXplZEFwcHMge1xcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICBpZFxcbiAgICAgIGF1dGhvcml6ZWRBcHBzIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBkZXNjcmlwdGlvblxcbiAgICAgICAgbmFtZVxcbiAgICAgICAgYXV0aG9yIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgbmFtZVxcbiAgICAgICAgICBhdmF0YXJcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkRldmVsb3BlclNldHRpbmdzQXV0aG9yaXplZEFwcHNEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgU2VhcmNoUHJvamVjdHMoXFxuICAgICRzZWFyY2g6IFN0cmluZ1xcbiAgICAkb25seVdpdGhSb2xlczogW1N0cmluZyFdID0gbnVsbFxcbiAgICAkd29ya3NwYWNlSWQ6IElEXFxuICApIHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgcHJvamVjdHMoXFxuICAgICAgICBsaW1pdDogMTBcXG4gICAgICAgIGZpbHRlcjoge1xcbiAgICAgICAgICBzZWFyY2g6ICRzZWFyY2hcXG4gICAgICAgICAgb25seVdpdGhSb2xlczogJG9ubHlXaXRoUm9sZXNcXG4gICAgICAgICAgd29ya3NwYWNlSWQ6ICR3b3Jrc3BhY2VJZFxcbiAgICAgICAgfVxcbiAgICAgICkge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAuLi5Gb3JtU2VsZWN0UHJvamVjdHNfUHJvamVjdFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2VhcmNoUHJvamVjdHNEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgU2VhcmNoUHJvamVjdE1vZGVscygkc2VhcmNoOiBTdHJpbmcsICRwcm9qZWN0SWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgbW9kZWxzKGxpbWl0OiAxMCwgZmlsdGVyOiB7IHNlYXJjaDogJHNlYXJjaCB9KSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIC4uLkZvcm1TZWxlY3RNb2RlbHNfTW9kZWxcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlNlYXJjaFByb2plY3RNb2RlbHNEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgSW50ZXJjb21BY3RpdmVXb3Jrc3BhY2UoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgaWRcXG4gICAgICBwbGFuIHtcXG4gICAgICAgIG5hbWVcXG4gICAgICAgIHN0YXR1c1xcbiAgICAgIH1cXG4gICAgICBzZWF0cyB7XFxuICAgICAgICBlZGl0b3JzIHtcXG4gICAgICAgICAgYXNzaWduZWRcXG4gICAgICAgICAgYXZhaWxhYmxlXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5JbnRlcmNvbUFjdGl2ZVdvcmtzcGFjZURvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBJbnZpdGVVc2VyU2VhcmNoKCRpbnB1dDogVXNlcnNSZXRyaWV2YWxJbnB1dCEpIHtcXG4gICAgdXNlcnMoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBuYW1lXFxuICAgICAgICBhdmF0YXJcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkludml0ZVVzZXJTZWFyY2hEb2N1bWVudCxcbiAgICBcIlxcbiAgZnJhZ21lbnQgSW52aXRlUHJvamVjdEl0ZW1fV29ya3NwYWNlQ29sbGFib3JhdG9yIG9uIFdvcmtzcGFjZUNvbGxhYm9yYXRvciB7XFxuICAgIGlkXFxuICAgIHVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIHNlYXRUeXBlXFxuICAgIHJvbGVcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkludml0ZVByb2plY3RJdGVtX1dvcmtzcGFjZUNvbGxhYm9yYXRvckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBtdXRhdGlvbiBDcmVhdGVOZXdSZWdpb24oJGlucHV0OiBDcmVhdGVTZXJ2ZXJSZWdpb25JbnB1dCEpIHtcXG4gICAgc2VydmVySW5mb011dGF0aW9ucyB7XFxuICAgICAgbXVsdGlSZWdpb24ge1xcbiAgICAgICAgY3JlYXRlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uU2V0dGluZ3NTZXJ2ZXJSZWdpb25zQWRkRWRpdERpYWxvZ19TZXJ2ZXJSZWdpb25JdGVtXFxuICAgICAgICAgIC4uLlNldHRpbmdzU2VydmVyUmVnaW9uc1RhYmxlX1NlcnZlclJlZ2lvbkl0ZW1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkNyZWF0ZU5ld1JlZ2lvbkRvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBVcGRhdGVSZWdpb24oJGlucHV0OiBVcGRhdGVTZXJ2ZXJSZWdpb25JbnB1dCEpIHtcXG4gICAgc2VydmVySW5mb011dGF0aW9ucyB7XFxuICAgICAgbXVsdGlSZWdpb24ge1xcbiAgICAgICAgdXBkYXRlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uU2V0dGluZ3NTZXJ2ZXJSZWdpb25zQWRkRWRpdERpYWxvZ19TZXJ2ZXJSZWdpb25JdGVtXFxuICAgICAgICAgIC4uLlNldHRpbmdzU2VydmVyUmVnaW9uc1RhYmxlX1NlcnZlclJlZ2lvbkl0ZW1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlVwZGF0ZVJlZ2lvbkRvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBOYXZpZ2F0aW9uV29ya3NwYWNlU3dpdGNoZXIoJGpvaW5SZXF1ZXN0RmlsdGVyOiBXb3Jrc3BhY2VKb2luUmVxdWVzdEZpbHRlcikge1xcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLldvcmtzcGFjZVN3aXRjaGVyQWN0aXZlV29ya3NwYWNlX1VzZXJcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuTmF2aWdhdGlvbldvcmtzcGFjZVN3aXRjaGVyRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFdvcmtzcGFjZVN3aXRjaGVySGVhZGVyV29ya3NwYWNlKCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIC4uLkhlYWRlcldvcmtzcGFjZVN3aXRjaGVySGVhZGVyV29ya3NwYWNlX1dvcmtzcGFjZVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Xb3Jrc3BhY2VTd2l0Y2hlckhlYWRlcldvcmtzcGFjZURvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBOYXZpZ2F0aW9uV29ya3NwYWNlTGlzdChcXG4gICAgJHdvcmtzcGFjZUZpbHRlcjogVXNlcldvcmtzcGFjZXNGaWx0ZXJcXG4gICAgJHByb2plY3RGaWx0ZXI6IFVzZXJQcm9qZWN0c0ZpbHRlclxcbiAgKSB7XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgd29ya3NwYWNlcyhmaWx0ZXI6ICR3b3Jrc3BhY2VGaWx0ZXIpIHtcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uSGVhZGVyV29ya3NwYWNlU3dpdGNoZXJXb3Jrc3BhY2VMaXN0SXRlbV9Xb3Jrc3BhY2VcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcHJvamVjdHMoZmlsdGVyOiAkcHJvamVjdEZpbHRlcikge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuTmF2aWdhdGlvbldvcmtzcGFjZUxpc3REb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgTmF2aWdhdGlvblByb2plY3RJbnZpdGVzIHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgaWRcXG4gICAgICBwcm9qZWN0SW52aXRlcyB7XFxuICAgICAgICAuLi5IZWFkZXJOYXZOb3RpZmljYXRpb25zUHJvamVjdEludml0ZV9QZW5kaW5nU3RyZWFtQ29sbGFib3JhdG9yXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5OYXZpZ2F0aW9uUHJvamVjdEludml0ZXNEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgTmF2aWdhdGlvbldvcmtzcGFjZUludml0ZXMge1xcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICBpZFxcbiAgICAgIHdvcmtzcGFjZUludml0ZXMge1xcbiAgICAgICAgLi4uSGVhZGVyTmF2Tm90aWZpY2F0aW9uc1dvcmtzcGFjZUludml0ZV9QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5OYXZpZ2F0aW9uV29ya3NwYWNlSW52aXRlc0RvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBVcGRhdGVQcmVzZW50YXRpb25TbGlkZSgkaW5wdXQ6IFVwZGF0ZVNhdmVkVmlld0lucHV0ISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBzYXZlZFZpZXdNdXRhdGlvbnMge1xcbiAgICAgICAgdXBkYXRlVmlldyhpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIG5hbWVcXG4gICAgICAgICAgZGVzY3JpcHRpb25cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlVwZGF0ZVByZXNlbnRhdGlvblNsaWRlRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFByZXNlbnRhdGlvbkFjY2Vzc0NoZWNrKCRzYXZlZFZpZXdHcm91cElkOiBJRCEsICRwcm9qZWN0SWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgc2F2ZWRWaWV3R3JvdXAoaWQ6ICRzYXZlZFZpZXdHcm91cElkKSB7XFxuICAgICAgICBpZFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJlc2VudGF0aW9uQWNjZXNzQ2hlY2tEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgUHJvamVjdFByZXNlbnRhdGlvblBhZ2UoXFxuICAgICRpbnB1dDogU2F2ZWRWaWV3R3JvdXBWaWV3c0lucHV0IVxcbiAgICAkc2F2ZWRWaWV3R3JvdXBJZDogSUQhXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBsaW1pdGVkV29ya3NwYWNlIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5QcmVzZW50YXRpb25MZWZ0U2lkZWJhcl9MaW1pdGVkV29ya3NwYWNlXFxuICAgICAgICAuLi5QcmVzZW50YXRpb25Mb2FkaW5nX0xpbWl0ZWRXb3Jrc3BhY2VcXG4gICAgICB9XFxuICAgICAgc2F2ZWRWaWV3R3JvdXAoaWQ6ICRzYXZlZFZpZXdHcm91cElkKSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgdGl0bGVcXG4gICAgICAgIC4uLlByZXNlbnRhdGlvblZpZXdlclBhZ2VXcmFwcGVyX1NhdmVkVmlld0dyb3VwXFxuICAgICAgICAuLi5QcmVzZW50YXRpb25IZWFkZXJfU2F2ZWRWaWV3R3JvdXBcXG4gICAgICAgIC4uLlByZXNlbnRhdGlvblNsaWRlTGlzdF9TYXZlZFZpZXdHcm91cFxcbiAgICAgICAgLi4uUHJlc2VudGF0aW9uUGFnZVdyYXBwZXJfU2F2ZWRWaWV3R3JvdXBcXG4gICAgICAgIC4uLlByZXNlbnRhdGlvbkxvYWRpbmdfU2F2ZWRWaWV3R3JvdXBcXG4gICAgICAgIHZpZXdzKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICBuYW1lXFxuICAgICAgICAgICAgZGVzY3JpcHRpb25cXG4gICAgICAgICAgICB0aHVtYm5haWxVcmxcXG4gICAgICAgICAgICBwcm9qZWN0SWRcXG4gICAgICAgICAgICB2aXNpYmlsaXR5XFxuICAgICAgICAgICAgLi4uUHJlc2VudGF0aW9uSW5mb1NpZGViYXJfU2F2ZWRWaWV3XFxuICAgICAgICAgICAgZ3JvdXAge1xcbiAgICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RQcmVzZW50YXRpb25QYWdlRG9jdW1lbnQsXG4gICAgXCJcXG4gIGZyYWdtZW50IFVzZUNvcHlNb2RlbExpbmtfTW9kZWwgb24gTW9kZWwge1xcbiAgICBpZFxcbiAgICBwcm9qZWN0SWRcXG4gICAgLi4uR2V0TW9kZWxJdGVtUm91dGVfTW9kZWxcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlVzZUNvcHlNb2RlbExpbmtfTW9kZWxGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVXNlQ2FuQ3JlYXRlUGVyc29uYWxQcm9qZWN0X1VzZXIgb24gVXNlciB7XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVQZXJzb25hbFByb2plY3Qge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuVXNlQ2FuQ3JlYXRlUGVyc29uYWxQcm9qZWN0X1VzZXJGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVXNlQ2FuQ3JlYXRlV29ya3NwYWNlX1VzZXIgb24gVXNlciB7XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVXb3Jrc3BhY2Uge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuVXNlQ2FuQ3JlYXRlV29ya3NwYWNlX1VzZXJGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVXNlQ2FuQ3JlYXRlTW9kZWxfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkNyZWF0ZU1vZGVsIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlVzZUNhbkNyZWF0ZU1vZGVsX1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVXNlQ2FuSW52aXRlVG9Qcm9qZWN0X1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5JbnZpdGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuVXNlQ2FuSW52aXRlVG9Qcm9qZWN0X1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VUZWFtSW50ZXJuYWxzX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHJvbGVcXG4gICAgaW52aXRlZFRlYW0ge1xcbiAgICAgIGlkXFxuICAgICAgdGl0bGVcXG4gICAgICByb2xlXFxuICAgICAgaW52aXRlSWRcXG4gICAgICB1c2VyIHtcXG4gICAgICAgIHJvbGVcXG4gICAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgICAgfVxcbiAgICB9XFxuICAgIHRlYW0ge1xcbiAgICAgIHJvbGVcXG4gICAgICBzZWF0VHlwZVxcbiAgICAgIHdvcmtzcGFjZVJvbGVcXG4gICAgICB1c2VyIHtcXG4gICAgICAgIGlkXFxuICAgICAgICByb2xlXFxuICAgICAgICAuLi5MaW1pdGVkVXNlckF2YXRhclxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdFBhZ2VUZWFtSW50ZXJuYWxzX1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VUZWFtRGlhbG9nIG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHJvbGVcXG4gICAgYWxsb3dQdWJsaWNDb21tZW50c1xcbiAgICB2aXNpYmlsaXR5XFxuICAgIHRlYW0ge1xcbiAgICAgIGlkXFxuICAgICAgcm9sZVxcbiAgICAgIHVzZXIge1xcbiAgICAgICAgLi4uTGltaXRlZFVzZXJBdmF0YXJcXG4gICAgICAgIHJvbGVcXG4gICAgICB9XFxuICAgIH1cXG4gICAgaW52aXRlZFRlYW0ge1xcbiAgICAgIGlkXFxuICAgICAgdGl0bGVcXG4gICAgICBpbnZpdGVJZFxcbiAgICAgIHJvbGVcXG4gICAgICB1c2VyIHtcXG4gICAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgICAgICByb2xlXFxuICAgICAgfVxcbiAgICB9XFxuICAgIC4uLlByb2plY3RzUGFnZVRlYW1EaWFsb2dNYW5hZ2VQZXJtaXNzaW9uc19Qcm9qZWN0XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Qcm9qZWN0UGFnZVRlYW1EaWFsb2dGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdERhc2hib2FyZEl0ZW1Ob01vZGVscyBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBjcmVhdGVkQXRcXG4gICAgdXBkYXRlZEF0XFxuICAgIHJvbGVcXG4gICAgdGVhbSB7XFxuICAgICAgaWRcXG4gICAgICB1c2VyIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBuYW1lXFxuICAgICAgICBhdmF0YXJcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uUHJvamVjdFBhZ2VNb2RlbHNDYXJkUHJvamVjdFxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdERhc2hib2FyZEl0ZW1Ob01vZGVsc0ZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0RGFzaGJvYXJkSXRlbSBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgLi4uUHJvamVjdERhc2hib2FyZEl0ZW1Ob01vZGVsc1xcbiAgICAuLi5Qcm9qZWN0Q2FyZEltcG9ydEZpbGVBcmVhX1Byb2plY3RcXG4gICAgbW9kZWxzKGxpbWl0OiAzKSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIC4uLlByb2plY3RQYWdlTGF0ZXN0SXRlbXNNb2RlbEl0ZW1cXG4gICAgICB9XFxuICAgIH1cXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIHNsdWdcXG4gICAgICBuYW1lXFxuICAgICAgbG9nb1xcbiAgICAgIHJlYWRPbmx5XFxuICAgIH1cXG4gICAgcGVuZGluZ0ltcG9ydGVkTW9kZWxzKGxpbWl0OiAzKSB7XFxuICAgICAgLi4uUGVuZGluZ0ZpbGVVcGxvYWRcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdERhc2hib2FyZEl0ZW1GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUGVuZGluZ0ZpbGVVcGxvYWQgb24gRmlsZVVwbG9hZCB7XFxuICAgIGlkXFxuICAgIHByb2plY3RJZFxcbiAgICBtb2RlbE5hbWVcXG4gICAgY29udmVydGVkU3RhdHVzXFxuICAgIGNvbnZlcnRlZE1lc3NhZ2VcXG4gICAgdXBsb2FkRGF0ZVxcbiAgICBjb252ZXJ0ZWRMYXN0VXBkYXRlXFxuICAgIGZpbGVUeXBlXFxuICAgIGZpbGVOYW1lXFxuICAgIHVzZXJJZFxcbiAgICB1cGRhdGVkQXRcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlBlbmRpbmdGaWxlVXBsb2FkRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlTGF0ZXN0SXRlbXNNb2RlbEl0ZW0gb24gTW9kZWwge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGRpc3BsYXlOYW1lXFxuICAgIHByb2plY3RJZFxcbiAgICB2ZXJzaW9uQ291bnQ6IHZlcnNpb25zKGxpbWl0OiAwKSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICAgIGNvbW1lbnRUaHJlYWRDb3VudDogY29tbWVudFRocmVhZHMobGltaXQ6IDApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgcGVuZGluZ0ltcG9ydGVkVmVyc2lvbnMobGltaXQ6IDEpIHtcXG4gICAgICAuLi5QZW5kaW5nRmlsZVVwbG9hZFxcbiAgICB9XFxuICAgIHByZXZpZXdVcmxcXG4gICAgY3JlYXRlZEF0XFxuICAgIHVwZGF0ZWRBdFxcbiAgICAuLi5Qcm9qZWN0UGFnZU1vZGVsc0NhcmRfTW9kZWxcXG4gICAgLi4uUHJvamVjdFBhZ2VNb2RlbHNDYXJkUmVuYW1lRGlhbG9nXFxuICAgIC4uLlByb2plY3RQYWdlTW9kZWxzQ2FyZERlbGV0ZURpYWxvZ1xcbiAgICAuLi5Qcm9qZWN0UGFnZU1vZGVsc0FjdGlvbnNcXG4gICAgLi4uUHJvamVjdENhcmRJbXBvcnRGaWxlQXJlYV9Nb2RlbFxcbiAgICBhdXRvbWF0aW9uc1N0YXR1cyB7XFxuICAgICAgLi4uQXV0b21hdGVSdW5zVHJpZ2dlclN0YXR1c19UcmlnZ2VyZWRBdXRvbWF0aW9uc1N0YXR1c1xcbiAgICB9XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5VcGRhdGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5EZWxldGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdFBhZ2VMYXRlc3RJdGVtc01vZGVsSXRlbUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0VXBkYXRhYmxlTWV0YWRhdGEgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgZGVzY3JpcHRpb25cXG4gICAgdmlzaWJpbGl0eVxcbiAgICBhbGxvd1B1YmxpY0NvbW1lbnRzXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5SZWFkIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuVXBkYXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuVXBkYXRlQWxsb3dQdWJsaWNDb21tZW50cyB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhblJlYWRTZXR0aW5ncyB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhblJlYWRXZWJob29rcyB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhbkxlYXZlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RVcGRhdGFibGVNZXRhZGF0YUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZUxhdGVzdEl0ZW1zTW9kZWxzIG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICByb2xlXFxuICAgIHZpc2liaWxpdHlcXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIHJlYWRPbmx5XFxuICAgIH1cXG4gICAgbW9kZWxDb3VudDogbW9kZWxzKGxpbWl0OiAwKSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICAgIC4uLlByb2plY3RQYWdlTW9kZWxzU3RydWN0dXJlSXRlbV9Qcm9qZWN0XFxuICAgIC4uLlByb2plY3RDYXJkSW1wb3J0RmlsZUFyZWFfUHJvamVjdFxcbiAgICAuLi5Qcm9qZWN0TW9kZWxzQWRkX1Byb2plY3RcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RQYWdlTGF0ZXN0SXRlbXNNb2RlbHNGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VMYXRlc3RJdGVtc0NvbW1lbnRzIG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBjb21tZW50VGhyZWFkQ291bnQ6IGNvbW1lbnRUaHJlYWRzKGxpbWl0OiAwKSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Qcm9qZWN0UGFnZUxhdGVzdEl0ZW1zQ29tbWVudHNGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VMYXRlc3RJdGVtc0NvbW1lbnRJdGVtIG9uIENvbW1lbnQge1xcbiAgICBpZFxcbiAgICBhdXRob3Ige1xcbiAgICAgIC4uLkZvcm1Vc2Vyc1NlbGVjdEl0ZW1cXG4gICAgfVxcbiAgICBzY3JlZW5zaG90XFxuICAgIHJhd1RleHRcXG4gICAgY3JlYXRlZEF0XFxuICAgIHVwZGF0ZWRBdFxcbiAgICBhcmNoaXZlZFxcbiAgICByZXBsaWVzQ291bnQ6IHJlcGxpZXMobGltaXQ6IDApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgcmVwbHlBdXRob3JzKGxpbWl0OiA0KSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIC4uLkZvcm1Vc2Vyc1NlbGVjdEl0ZW1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RQYWdlTGF0ZXN0SXRlbXNDb21tZW50SXRlbUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBtdXRhdGlvbiBDcmVhdGVNb2RlbCgkaW5wdXQ6IENyZWF0ZU1vZGVsSW5wdXQhKSB7XFxuICAgIG1vZGVsTXV0YXRpb25zIHtcXG4gICAgICBjcmVhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgLi4uUHJvamVjdFBhZ2VMYXRlc3RJdGVtc01vZGVsSXRlbVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQ3JlYXRlTW9kZWxEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gQ3JlYXRlUHJvamVjdCgkaW5wdXQ6IFByb2plY3RDcmVhdGVJbnB1dCkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBjcmVhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgLi4uUHJvamVjdFBhZ2VQcm9qZWN0XFxuICAgICAgICAuLi5Qcm9qZWN0RGFzaGJvYXJkSXRlbVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQ3JlYXRlUHJvamVjdERvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBDcmVhdGVXb3Jrc3BhY2VQcm9qZWN0KCRpbnB1dDogV29ya3NwYWNlUHJvamVjdENyZWF0ZUlucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIHByb2plY3RzIHtcXG4gICAgICAgIGNyZWF0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAgIC4uLlByb2plY3RQYWdlUHJvamVjdFxcbiAgICAgICAgICAuLi5Qcm9qZWN0RGFzaGJvYXJkSXRlbVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQ3JlYXRlV29ya3NwYWNlUHJvamVjdERvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBVcGRhdGVNb2RlbCgkaW5wdXQ6IFVwZGF0ZU1vZGVsSW5wdXQhKSB7XFxuICAgIG1vZGVsTXV0YXRpb25zIHtcXG4gICAgICB1cGRhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgLi4uUHJvamVjdFBhZ2VMYXRlc3RJdGVtc01vZGVsSXRlbVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuVXBkYXRlTW9kZWxEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gRGVsZXRlTW9kZWwoJGlucHV0OiBEZWxldGVNb2RlbElucHV0ISkge1xcbiAgICBtb2RlbE11dGF0aW9ucyB7XFxuICAgICAgZGVsZXRlKGlucHV0OiAkaW5wdXQpXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkRlbGV0ZU1vZGVsRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIFVwZGF0ZVByb2plY3RSb2xlKCRpbnB1dDogUHJvamVjdFVwZGF0ZVJvbGVJbnB1dCEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgdXBkYXRlUm9sZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgdGVhbSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIHJvbGVcXG4gICAgICAgICAgdXNlciB7XFxuICAgICAgICAgICAgLi4uTGltaXRlZFVzZXJBdmF0YXJcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuVXBkYXRlUHJvamVjdFJvbGVEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gVXBkYXRlV29ya3NwYWNlUHJvamVjdFJvbGUoJGlucHV0OiBQcm9qZWN0VXBkYXRlUm9sZUlucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIHByb2plY3RzIHtcXG4gICAgICAgIHVwZGF0ZVJvbGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICB0ZWFtIHtcXG4gICAgICAgICAgICBpZFxcbiAgICAgICAgICAgIHJvbGVcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuVXBkYXRlV29ya3NwYWNlUHJvamVjdFJvbGVEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gSW52aXRlUHJvamVjdFVzZXIoJHByb2plY3RJZDogSUQhLCAkaW5wdXQ6IFtQcm9qZWN0SW52aXRlQ3JlYXRlSW5wdXQhXSEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgaW52aXRlcyB7XFxuICAgICAgICBiYXRjaENyZWF0ZShwcm9qZWN0SWQ6ICRwcm9qZWN0SWQsIGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgLi4uUHJvamVjdFBhZ2VUZWFtRGlhbG9nXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5JbnZpdGVQcm9qZWN0VXNlckRvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBJbnZpdGVXb3Jrc3BhY2VQcm9qZWN0VXNlcihcXG4gICAgJHByb2plY3RJZDogSUQhXFxuICAgICRpbnB1dHM6IFtXb3Jrc3BhY2VQcm9qZWN0SW52aXRlQ3JlYXRlSW5wdXQhXSFcXG4gICkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBpbnZpdGVzIHtcXG4gICAgICAgIGNyZWF0ZUZvcldvcmtzcGFjZShwcm9qZWN0SWQ6ICRwcm9qZWN0SWQsIGlucHV0czogJGlucHV0cykge1xcbiAgICAgICAgICAuLi5Qcm9qZWN0UGFnZVRlYW1EaWFsb2dcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkludml0ZVdvcmtzcGFjZVByb2plY3RVc2VyRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIENhbmNlbFByb2plY3RJbnZpdGUoJHByb2plY3RJZDogSUQhLCAkaW52aXRlSWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgaW52aXRlcyB7XFxuICAgICAgICBjYW5jZWwocHJvamVjdElkOiAkcHJvamVjdElkLCBpbnZpdGVJZDogJGludml0ZUlkKSB7XFxuICAgICAgICAgIC4uLlByb2plY3RQYWdlVGVhbURpYWxvZ1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQ2FuY2VsUHJvamVjdEludml0ZURvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBVcGRhdGVQcm9qZWN0TWV0YWRhdGEoJHVwZGF0ZTogUHJvamVjdFVwZGF0ZUlucHV0ISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICB1cGRhdGUodXBkYXRlOiAkdXBkYXRlKSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgLi4uUHJvamVjdFVwZGF0YWJsZU1ldGFkYXRhXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5VcGRhdGVQcm9qZWN0TWV0YWRhdGFEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gRGVsZXRlUHJvamVjdCgkaWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgZGVsZXRlKGlkOiAkaWQpXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkRlbGV0ZVByb2plY3REb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gVXNlUHJvamVjdEludml0ZSgkaW5wdXQ6IFByb2plY3RJbnZpdGVVc2VJbnB1dCEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgaW52aXRlcyB7XFxuICAgICAgICB1c2UoaW5wdXQ6ICRpbnB1dClcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlVzZVByb2plY3RJbnZpdGVEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gTGVhdmVQcm9qZWN0KCRwcm9qZWN0SWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgbGVhdmUoaWQ6ICRwcm9qZWN0SWQpXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkxlYXZlUHJvamVjdERvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBEZWxldGVWZXJzaW9ucygkaW5wdXQ6IERlbGV0ZVZlcnNpb25zSW5wdXQhKSB7XFxuICAgIHZlcnNpb25NdXRhdGlvbnMge1xcbiAgICAgIGRlbGV0ZShpbnB1dDogJGlucHV0KVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5EZWxldGVWZXJzaW9uc0RvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBNb3ZlVmVyc2lvbnMoJGlucHV0OiBNb3ZlVmVyc2lvbnNJbnB1dCEpIHtcXG4gICAgdmVyc2lvbk11dGF0aW9ucyB7XFxuICAgICAgbW92ZVRvTW9kZWwoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaWRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLk1vdmVWZXJzaW9uc0RvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBVcGRhdGVWZXJzaW9uKCRpbnB1dDogVXBkYXRlVmVyc2lvbklucHV0ISkge1xcbiAgICB2ZXJzaW9uTXV0YXRpb25zIHtcXG4gICAgICB1cGRhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIG1lc3NhZ2VcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlVwZGF0ZVZlcnNpb25Eb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gZGVsZXRlV2ViaG9vaygkd2ViaG9vazogV2ViaG9va0RlbGV0ZUlucHV0ISkge1xcbiAgICB3ZWJob29rRGVsZXRlKHdlYmhvb2s6ICR3ZWJob29rKVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuRGVsZXRlV2ViaG9va0RvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBjcmVhdGVXZWJob29rKCR3ZWJob29rOiBXZWJob29rQ3JlYXRlSW5wdXQhKSB7XFxuICAgIHdlYmhvb2tDcmVhdGUod2ViaG9vazogJHdlYmhvb2spXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5DcmVhdGVXZWJob29rRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIHVwZGF0ZVdlYmhvb2soJHdlYmhvb2s6IFdlYmhvb2tVcGRhdGVJbnB1dCEpIHtcXG4gICAgd2ViaG9va1VwZGF0ZSh3ZWJob29rOiAkd2ViaG9vaylcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlVwZGF0ZVdlYmhvb2tEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gQ3JlYXRlQXV0b21hdGlvbigkcHJvamVjdElkOiBJRCEsICRpbnB1dDogUHJvamVjdEF1dG9tYXRpb25DcmVhdGVJbnB1dCEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgYXV0b21hdGlvbk11dGF0aW9ucyhwcm9qZWN0SWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICAgIGNyZWF0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLlByb2plY3RQYWdlQXV0b21hdGlvbnNSb3dfQXV0b21hdGlvblxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQ3JlYXRlQXV0b21hdGlvbkRvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBEZWxldGVBdXRvbWF0aW9uKCRwcm9qZWN0SWQ6IElEISwgJGF1dG9tYXRpb25JZDogSUQhKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIGF1dG9tYXRpb25NdXRhdGlvbnMocHJvamVjdElkOiAkcHJvamVjdElkKSB7XFxuICAgICAgICBkZWxldGUoYXV0b21hdGlvbklkOiAkYXV0b21hdGlvbklkKVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuRGVsZXRlQXV0b21hdGlvbkRvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBVcGRhdGVBdXRvbWF0aW9uKCRwcm9qZWN0SWQ6IElEISwgJGlucHV0OiBQcm9qZWN0QXV0b21hdGlvblVwZGF0ZUlucHV0ISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBhdXRvbWF0aW9uTXV0YXRpb25zKHByb2plY3RJZDogJHByb2plY3RJZCkge1xcbiAgICAgICAgdXBkYXRlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgbmFtZVxcbiAgICAgICAgICBlbmFibGVkXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5VcGRhdGVBdXRvbWF0aW9uRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIENyZWF0ZUF1dG9tYXRpb25SZXZpc2lvbihcXG4gICAgJHByb2plY3RJZDogSUQhXFxuICAgICRpbnB1dDogUHJvamVjdEF1dG9tYXRpb25SZXZpc2lvbkNyZWF0ZUlucHV0IVxcbiAgKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIGF1dG9tYXRpb25NdXRhdGlvbnMocHJvamVjdElkOiAkcHJvamVjdElkKSB7XFxuICAgICAgICBjcmVhdGVSZXZpc2lvbihpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5DcmVhdGVBdXRvbWF0aW9uUmV2aXNpb25Eb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gVHJpZ2dlckF1dG9tYXRpb24oJHByb2plY3RJZDogSUQhLCAkYXV0b21hdGlvbklkOiBJRCEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgYXV0b21hdGlvbk11dGF0aW9ucyhwcm9qZWN0SWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICAgIHRyaWdnZXIoYXV0b21hdGlvbklkOiAkYXV0b21hdGlvbklkKVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuVHJpZ2dlckF1dG9tYXRpb25Eb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gQ3JlYXRlVGVzdEF1dG9tYXRpb24oXFxuICAgICRwcm9qZWN0SWQ6IElEIVxcbiAgICAkaW5wdXQ6IFByb2plY3RUZXN0QXV0b21hdGlvbkNyZWF0ZUlucHV0IVxcbiAgKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIGF1dG9tYXRpb25NdXRhdGlvbnMocHJvamVjdElkOiAkcHJvamVjdElkKSB7XFxuICAgICAgICBjcmVhdGVUZXN0QXV0b21hdGlvbihpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLlByb2plY3RQYWdlQXV0b21hdGlvbnNSb3dfQXV0b21hdGlvblxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQ3JlYXRlVGVzdEF1dG9tYXRpb25Eb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gTW92ZVByb2plY3RUb1dvcmtzcGFjZSgkd29ya3NwYWNlSWQ6IFN0cmluZyEsICRwcm9qZWN0SWQ6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICBwcm9qZWN0cyB7XFxuICAgICAgICBtb3ZlVG9Xb3Jrc3BhY2Uod29ya3NwYWNlSWQ6ICR3b3Jrc3BhY2VJZCwgcHJvamVjdElkOiAkcHJvamVjdElkKSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIHdvcmtzcGFjZUlkXFxuICAgICAgICAgIHdvcmtzcGFjZSB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICBwcm9qZWN0cyB7XFxuICAgICAgICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIC4uLldvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlcl9Xb3Jrc3BhY2VcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuTW92ZVByb2plY3RUb1dvcmtzcGFjZURvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBDcmVhdGVFbWJlZFRva2VuKCR0b2tlbjogRW1iZWRUb2tlbkNyZWF0ZUlucHV0ISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBjcmVhdGVFbWJlZFRva2VuKHRva2VuOiAkdG9rZW4pIHtcXG4gICAgICAgIHRva2VuXFxuICAgICAgICB0b2tlbk1ldGFkYXRhIHtcXG4gICAgICAgICAgcHJvamVjdElkXFxuICAgICAgICAgIHRva2VuSWRcXG4gICAgICAgICAgLi4uUHJvamVjdFBhZ2VTZXR0aW5nc1Rva2Vuc19FbWJlZFRva2VuXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5DcmVhdGVFbWJlZFRva2VuRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIERlbGV0ZUVtYmVkVG9rZW4oJHByb2plY3RJZDogU3RyaW5nISwgJHRva2VuOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIHJldm9rZUVtYmVkVG9rZW4ocHJvamVjdElkOiAkcHJvamVjdElkLCB0b2tlbjogJHRva2VuKVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5EZWxldGVFbWJlZFRva2VuRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIFJldm9rZUVtYmVkVG9rZW5zKCRwcm9qZWN0SWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgcmV2b2tlRW1iZWRUb2tlbnMocHJvamVjdElkOiAkcHJvamVjdElkKVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5SZXZva2VFbWJlZFRva2Vuc0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBQcm9qZWN0QWNjZXNzQ2hlY2soJGlkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRpZCkge1xcbiAgICAgIGlkXFxuICAgICAgcGVybWlzc2lvbnMge1xcbiAgICAgICAgY2FuUmVhZCB7XFxuICAgICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgd29ya3NwYWNlSWRcXG4gICAgfVxcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICBpZFxcbiAgICAgIGFjdGl2ZVdvcmtzcGFjZSB7XFxuICAgICAgICBpZFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdEFjY2Vzc0NoZWNrRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFByb2plY3RzRGFzaGJvYXJkUXVlcnkoJGZpbHRlcjogVXNlclByb2plY3RzRmlsdGVyLCAkY3Vyc29yOiBTdHJpbmcpIHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgaWRcXG4gICAgICBwcm9qZWN0cyhmaWx0ZXI6ICRmaWx0ZXIsIGxpbWl0OiA2LCBjdXJzb3I6ICRjdXJzb3IpIHtcXG4gICAgICAgIC4uLlByb2plY3RzRGFzaGJvYXJkX1VzZXJQcm9qZWN0Q29sbGVjdGlvblxcbiAgICAgICAgY3Vyc29yXFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIC4uLlByb2plY3REYXNoYm9hcmRJdGVtXFxuICAgICAgICAgIC4uLldvcmtzcGFjZU1vdmVQcm9qZWN0X1Byb2plY3RcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgLi4uUHJvamVjdHNIaWRkZW5Qcm9qZWN0V2FybmluZ19Vc2VyXFxuICAgICAgLi4uUHJvamVjdHNEYXNoYm9hcmRfVXNlclxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Qcm9qZWN0c0Rhc2hib2FyZFF1ZXJ5RG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFByb2plY3RQYWdlUXVlcnkoJGlkOiBTdHJpbmchLCAkdG9rZW46IFN0cmluZykge1xcbiAgICBwcm9qZWN0KGlkOiAkaWQpIHtcXG4gICAgICAuLi5Qcm9qZWN0UGFnZVByb2plY3RcXG4gICAgfVxcbiAgICBwcm9qZWN0SW52aXRlKHByb2plY3RJZDogJGlkLCB0b2tlbjogJHRva2VuKSB7XFxuICAgICAgLi4uUHJvamVjdHNJbnZpdGVCYW5uZXJcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdFBhZ2VRdWVyeURvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBQcm9qZWN0TGF0ZXN0TW9kZWxzKCRwcm9qZWN0SWQ6IFN0cmluZyEsICRmaWx0ZXI6IFByb2plY3RNb2RlbHNGaWx0ZXIpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgbW9kZWxzKGN1cnNvcjogbnVsbCwgbGltaXQ6IDE2LCBmaWx0ZXI6ICRmaWx0ZXIpIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIGN1cnNvclxcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAuLi5Qcm9qZWN0UGFnZUxhdGVzdEl0ZW1zTW9kZWxJdGVtXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIHBlbmRpbmdJbXBvcnRlZE1vZGVscyB7XFxuICAgICAgICAuLi5QZW5kaW5nRmlsZVVwbG9hZFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdExhdGVzdE1vZGVsc0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBQcm9qZWN0TGF0ZXN0TW9kZWxzUGFnaW5hdGlvbihcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkZmlsdGVyOiBQcm9qZWN0TW9kZWxzRmlsdGVyXFxuICAgICRjdXJzb3I6IFN0cmluZyA9IG51bGxcXG4gICAgJGxpbWl0OiBJbnQgPSAxNlxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIG1vZGVscyhjdXJzb3I6ICRjdXJzb3IsIGxpbWl0OiAkbGltaXQsIGZpbHRlcjogJGZpbHRlcikge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgY3Vyc29yXFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIC4uLlByb2plY3RQYWdlTGF0ZXN0SXRlbXNNb2RlbEl0ZW1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RMYXRlc3RNb2RlbHNQYWdpbmF0aW9uRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFByb2plY3RNb2RlbHNUcmVlVG9wTGV2ZWwoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJGZpbHRlcjogUHJvamVjdE1vZGVsc1RyZWVGaWx0ZXJcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBtb2RlbHNUcmVlKGN1cnNvcjogbnVsbCwgbGltaXQ6IDgsIGZpbHRlcjogJGZpbHRlcikge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgY3Vyc29yXFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIC4uLlNpbmdsZUxldmVsTW9kZWxUcmVlSXRlbVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICBwZW5kaW5nSW1wb3J0ZWRNb2RlbHMge1xcbiAgICAgICAgLi4uUGVuZGluZ0ZpbGVVcGxvYWRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RNb2RlbHNUcmVlVG9wTGV2ZWxEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgUHJvamVjdE1vZGVsc1RyZWVUb3BMZXZlbFBhZ2luYXRpb24oXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJGZpbHRlcjogUHJvamVjdE1vZGVsc1RyZWVGaWx0ZXJcXG4gICAgJGN1cnNvcjogU3RyaW5nID0gbnVsbFxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIG1vZGVsc1RyZWUoY3Vyc29yOiAkY3Vyc29yLCBsaW1pdDogOCwgZmlsdGVyOiAkZmlsdGVyKSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBjdXJzb3JcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgLi4uU2luZ2xlTGV2ZWxNb2RlbFRyZWVJdGVtXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Qcm9qZWN0TW9kZWxzVHJlZVRvcExldmVsUGFnaW5hdGlvbkRvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBQcm9qZWN0TW9kZWxDaGlsZHJlblRyZWUoJHByb2plY3RJZDogU3RyaW5nISwgJHBhcmVudE5hbWU6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgbW9kZWxDaGlsZHJlblRyZWUoZnVsbE5hbWU6ICRwYXJlbnROYW1lKSB7XFxuICAgICAgICAuLi5TaW5nbGVMZXZlbE1vZGVsVHJlZUl0ZW1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RNb2RlbENoaWxkcmVuVHJlZURvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBQcm9qZWN0TGF0ZXN0Q29tbWVudFRocmVhZHMoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJGN1cnNvcjogU3RyaW5nID0gbnVsbFxcbiAgICAkZmlsdGVyOiBQcm9qZWN0Q29tbWVudHNGaWx0ZXIgPSBudWxsXFxuICApIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgY29tbWVudFRocmVhZHMoY3Vyc29yOiAkY3Vyc29yLCBsaW1pdDogOCwgZmlsdGVyOiAkZmlsdGVyKSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBjdXJzb3JcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgLi4uUHJvamVjdFBhZ2VMYXRlc3RJdGVtc0NvbW1lbnRJdGVtXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIC4uLlZpZXdlclJlc291cmNlc0xpbWl0QWxlcnRfUHJvamVjdFxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Qcm9qZWN0TGF0ZXN0Q29tbWVudFRocmVhZHNEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgUHJvamVjdEludml0ZSgkcHJvamVjdElkOiBTdHJpbmchLCAkdG9rZW46IFN0cmluZykge1xcbiAgICBwcm9qZWN0SW52aXRlKHByb2plY3RJZDogJHByb2plY3RJZCwgdG9rZW46ICR0b2tlbikge1xcbiAgICAgIC4uLlByb2plY3RzSW52aXRlQmFubmVyXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RJbnZpdGVEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgUHJvamVjdE1vZGVsQ2hlY2soJHByb2plY3RJZDogU3RyaW5nISwgJG1vZGVsSWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIHZpc2liaWxpdHlcXG4gICAgICBtb2RlbChpZDogJG1vZGVsSWQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Qcm9qZWN0TW9kZWxDaGVja0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBQcm9qZWN0TW9kZWxQYWdlKFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRtb2RlbElkOiBTdHJpbmchXFxuICAgICR2ZXJzaW9uc0N1cnNvcjogU3RyaW5nXFxuICApIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgLi4uUHJvamVjdE1vZGVsUGFnZUhlYWRlclByb2plY3RcXG4gICAgICAuLi5Qcm9qZWN0TW9kZWxQYWdlVmVyc2lvbnNQcm9qZWN0XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RNb2RlbFBhZ2VEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgUHJvamVjdE1vZGVsVmVyc2lvbnMoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJG1vZGVsSWQ6IFN0cmluZyFcXG4gICAgJHZlcnNpb25zQ3Vyc29yOiBTdHJpbmdcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5Qcm9qZWN0TW9kZWxQYWdlVmVyc2lvbnNQYWdpbmF0aW9uXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RNb2RlbFZlcnNpb25zRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFByb2plY3RNb2RlbHNQYWdlKCRwcm9qZWN0SWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgLi4uUHJvamVjdE1vZGVsc1BhZ2VIZWFkZXJfUHJvamVjdFxcbiAgICAgIC4uLlByb2plY3RNb2RlbHNQYWdlUmVzdWx0c19Qcm9qZWN0XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RNb2RlbHNQYWdlRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFByb2plY3REaXNjdXNzaW9uc1BhZ2UoJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5Qcm9qZWN0RGlzY3Vzc2lvbnNQYWdlSGVhZGVyX1Byb2plY3RcXG4gICAgICAuLi5Qcm9qZWN0RGlzY3Vzc2lvbnNQYWdlUmVzdWx0c19Qcm9qZWN0XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3REaXNjdXNzaW9uc1BhZ2VEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgUHJvamVjdEF1dG9tYXRpb25zVGFiKCRwcm9qZWN0SWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgcm9sZVxcbiAgICAgIG1vZGVscyhsaW1pdDogMSkge1xcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICBhdXRvbWF0aW9ucyhmaWx0ZXI6IG51bGwsIGN1cnNvcjogbnVsbCwgbGltaXQ6IDUpIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uUHJvamVjdFBhZ2VBdXRvbWF0aW9uc1Jvd19BdXRvbWF0aW9uXFxuICAgICAgICB9XFxuICAgICAgICBjdXJzb3JcXG4gICAgICB9XFxuICAgICAgd29ya3NwYWNlIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBhdXRvbWF0ZUZ1bmN0aW9ucyhsaW1pdDogMCkge1xcbiAgICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICB9XFxuICAgICAgICAuLi5BdXRvbWF0ZUZ1bmN0aW9uQ3JlYXRlRGlhbG9nX1dvcmtzcGFjZVxcbiAgICAgIH1cXG4gICAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgICBjYW5DcmVhdGVBdXRvbWF0aW9uIHtcXG4gICAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICAuLi5Gb3JtU2VsZWN0UHJvamVjdHNfUHJvamVjdFxcbiAgICB9XFxuICAgIC4uLkF1dG9tYXRlRnVuY3Rpb25zUGFnZUhlYWRlcl9RdWVyeVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdEF1dG9tYXRpb25zVGFiRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFByb2plY3RBdXRvbWF0aW9uc1RhYkF1dG9tYXRpb25zUGFnaW5hdGlvbihcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkc2VhcmNoOiBTdHJpbmcgPSBudWxsXFxuICAgICRjdXJzb3I6IFN0cmluZyA9IG51bGxcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBhdXRvbWF0aW9ucyhmaWx0ZXI6ICRzZWFyY2gsIGN1cnNvcjogJGN1cnNvciwgbGltaXQ6IDUpIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIGN1cnNvclxcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICAuLi5Qcm9qZWN0UGFnZUF1dG9tYXRpb25zUm93X0F1dG9tYXRpb25cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RBdXRvbWF0aW9uc1RhYkF1dG9tYXRpb25zUGFnaW5hdGlvbkRvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBQcm9qZWN0QXV0b21hdGlvblBhZ2UoJHByb2plY3RJZDogU3RyaW5nISwgJGF1dG9tYXRpb25JZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5Qcm9qZWN0UGFnZUF1dG9tYXRpb25QYWdlX1Byb2plY3RcXG4gICAgICBhdXRvbWF0aW9uKGlkOiAkYXV0b21hdGlvbklkKSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgLi4uUHJvamVjdFBhZ2VBdXRvbWF0aW9uUGFnZV9BdXRvbWF0aW9uXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Qcm9qZWN0QXV0b21hdGlvblBhZ2VEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgUHJvamVjdEF1dG9tYXRpb25QYWdlUGFnaW5hdGVkUnVucyhcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkYXV0b21hdGlvbklkOiBTdHJpbmchXFxuICAgICRjdXJzb3I6IFN0cmluZyA9IG51bGxcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBhdXRvbWF0aW9uKGlkOiAkYXV0b21hdGlvbklkKSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgcnVucyhjdXJzb3I6ICRjdXJzb3IsIGxpbWl0OiAxMCkge1xcbiAgICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICAgIGN1cnNvclxcbiAgICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICAuLi5BdXRvbWF0aW9uUnVuRGV0YWlsc1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Qcm9qZWN0QXV0b21hdGlvblBhZ2VQYWdpbmF0ZWRSdW5zRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFByb2plY3RBdXRvbWF0aW9uQWNjZXNzQ2hlY2soJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBhdXRvbWF0aW9ucyhsaW1pdDogMCkge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdEF1dG9tYXRpb25BY2Nlc3NDaGVja0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBQcm9qZWN0V2ViaG9va3MoJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgICAgLi4uUHJvamVjdFBhZ2VTZXR0aW5nc1dlYmhvb2tzX1Byb2plY3RcXG4gICAgICB3ZWJob29rcyB7XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIHN0cmVhbUlkXFxuICAgICAgICAgIHRyaWdnZXJzXFxuICAgICAgICAgIGVuYWJsZWRcXG4gICAgICAgICAgdXJsXFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIGRlc2NyaXB0aW9uXFxuICAgICAgICAgIGhpc3RvcnkobGltaXQ6IDUpIHtcXG4gICAgICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgICAgICBzdGF0dXNcXG4gICAgICAgICAgICAgIHN0YXR1c0luZm9cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RXZWJob29rc0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBQcm9qZWN0SW50ZWdyYXRpb25zKCRwcm9qZWN0SWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICAgIC4uLlByb2plY3RQYWdlU2V0dGluZ3NJbnRlZ3JhdGlvbnNfUHJvamVjdFxcbiAgICAgIGFjY1N5bmNJdGVtcyB7XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICB9XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Qcm9qZWN0SW50ZWdyYXRpb25zRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFByb2plY3RFbWJlZFRva2VucygkcHJvamVjdElkOiBTdHJpbmchLCAkY3Vyc29yOiBTdHJpbmcgPSBudWxsKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLlByb2plY3RQYWdlU2V0dGluZ3NUb2tlbnNfUHJvamVjdFxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Qcm9qZWN0RW1iZWRUb2tlbnNEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgUHJvamVjdEJsb2JJbmZvKCRibG9iSWQ6IFN0cmluZyEsICRwcm9qZWN0SWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgYmxvYihpZDogJGJsb2JJZCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGZpbGVOYW1lXFxuICAgICAgICBmaWxlVHlwZVxcbiAgICAgICAgZmlsZVNpemVcXG4gICAgICAgIGNyZWF0ZWRBdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdEJsb2JJbmZvRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IE1vdmVUb1dvcmtzcGFjZURyeVJ1bigkd29ya3NwYWNlSWQ6IFN0cmluZyEsICRwcm9qZWN0SWQ6IFN0cmluZyEsICRsaW1pdDogSW50KSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIG1vdmVUb1dvcmtzcGFjZURyeVJ1bih3b3Jrc3BhY2VJZDogJHdvcmtzcGFjZUlkKSB7XFxuICAgICAgICBhZGRlZFRvV29ya3NwYWNlVG90YWxDb3VudFxcbiAgICAgICAgYWRkZWRUb1dvcmtzcGFjZShsaW1pdDogJGxpbWl0KSB7XFxuICAgICAgICAgIGF2YXRhclxcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBuYW1lXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Nb3ZlVG9Xb3Jrc3BhY2VEcnlSdW5Eb2N1bWVudCxcbiAgICBcIlxcbiAgc3Vic2NyaXB0aW9uIE9uUHJvamVjdFVwZGF0ZWQoJGlkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3RVcGRhdGVkKGlkOiAkaWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHR5cGVcXG4gICAgICBwcm9qZWN0IHtcXG4gICAgICAgIC4uLlByb2plY3RQYWdlUHJvamVjdFxcbiAgICAgICAgLi4uUHJvamVjdERhc2hib2FyZEl0ZW1Ob01vZGVsc1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuT25Qcm9qZWN0VXBkYXRlZERvY3VtZW50LFxuICAgIFwiXFxuICBzdWJzY3JpcHRpb24gT25Qcm9qZWN0TW9kZWxzVXBkYXRlKCRpZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0TW9kZWxzVXBkYXRlZChpZDogJGlkKSB7XFxuICAgICAgaWRcXG4gICAgICB0eXBlXFxuICAgICAgbW9kZWwge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHZlcnNpb25zKGxpbWl0OiAxKSB7XFxuICAgICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgICBpZFxcbiAgICAgICAgICAgIHJlZmVyZW5jZWRPYmplY3RcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgLi4uUHJvamVjdFBhZ2VMYXRlc3RJdGVtc01vZGVsSXRlbVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuT25Qcm9qZWN0TW9kZWxzVXBkYXRlRG9jdW1lbnQsXG4gICAgXCJcXG4gIHN1YnNjcmlwdGlvbiBPblByb2plY3RWZXJzaW9uc1VwZGF0ZSgkaWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdFZlcnNpb25zVXBkYXRlZChpZDogJGlkKSB7XFxuICAgICAgaWRcXG4gICAgICBtb2RlbElkXFxuICAgICAgdHlwZVxcbiAgICAgIHZlcnNpb24ge1xcbiAgICAgICAgaWRcXG4gICAgICAgIC4uLlZpZXdlck1vZGVsVmVyc2lvbkNhcmRJdGVtXFxuICAgICAgICAuLi5Qcm9qZWN0TW9kZWxQYWdlVmVyc2lvbnNDYXJkVmVyc2lvblxcbiAgICAgICAgbW9kZWwge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICAuLi5Qcm9qZWN0UGFnZUxhdGVzdEl0ZW1zTW9kZWxJdGVtXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5PblByb2plY3RWZXJzaW9uc1VwZGF0ZURvY3VtZW50LFxuICAgIFwiXFxuICBzdWJzY3JpcHRpb24gT25Qcm9qZWN0VmVyc2lvbnNQcmV2aWV3R2VuZXJhdGVkKCRpZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0VmVyc2lvbnNQcmV2aWV3R2VuZXJhdGVkKGlkOiAkaWQpIHtcXG4gICAgICBwcm9qZWN0SWRcXG4gICAgICBvYmplY3RJZFxcbiAgICAgIHZlcnNpb25JZFxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5PblByb2plY3RWZXJzaW9uc1ByZXZpZXdHZW5lcmF0ZWREb2N1bWVudCxcbiAgICBcIlxcbiAgc3Vic2NyaXB0aW9uIE9uUHJvamVjdFBlbmRpbmdNb2RlbHNVcGRhdGVkKCRpZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0UGVuZGluZ01vZGVsc1VwZGF0ZWQoaWQ6ICRpZCkge1xcbiAgICAgIGlkXFxuICAgICAgdHlwZVxcbiAgICAgIG1vZGVsIHtcXG4gICAgICAgIC4uLlBlbmRpbmdGaWxlVXBsb2FkXFxuICAgICAgICAuLi5Vc2VGYWlsZWRGaWxlSW1wb3J0Sm9iVXRpbHNfRmlsZVVwbG9hZFxcbiAgICAgICAgbW9kZWwge1xcbiAgICAgICAgICAuLi5Qcm9qZWN0UGFnZUxhdGVzdEl0ZW1zTW9kZWxJdGVtXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5PblByb2plY3RQZW5kaW5nTW9kZWxzVXBkYXRlZERvY3VtZW50LFxuICAgIFwiXFxuICBzdWJzY3JpcHRpb24gT25Qcm9qZWN0UGVuZGluZ1ZlcnNpb25zVXBkYXRlZCgkaWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdFBlbmRpbmdWZXJzaW9uc1VwZGF0ZWQoaWQ6ICRpZCkge1xcbiAgICAgIGlkXFxuICAgICAgdHlwZVxcbiAgICAgIHZlcnNpb24ge1xcbiAgICAgICAgLi4uUGVuZGluZ0ZpbGVVcGxvYWRcXG4gICAgICAgIC4uLlVzZUZhaWxlZEZpbGVJbXBvcnRKb2JVdGlsc19GaWxlVXBsb2FkXFxuICAgICAgICBtb2RlbCB7XFxuICAgICAgICAgIC4uLlByb2plY3RQYWdlTGF0ZXN0SXRlbXNNb2RlbEl0ZW1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLk9uUHJvamVjdFBlbmRpbmdWZXJzaW9uc1VwZGF0ZWREb2N1bWVudCxcbiAgICBcIlxcbiAgc3Vic2NyaXB0aW9uIE9uUHJvamVjdFRyaWdnZXJlZEF1dG9tYXRpb25zU3RhdHVzVXBkYXRlZCgkaWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdFRyaWdnZXJlZEF1dG9tYXRpb25zU3RhdHVzVXBkYXRlZChwcm9qZWN0SWQ6ICRpZCkge1xcbiAgICAgIHR5cGVcXG4gICAgICB2ZXJzaW9uIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBhdXRvbWF0aW9uc1N0YXR1cyB7XFxuICAgICAgICAgIGF1dG9tYXRpb25SdW5zIHtcXG4gICAgICAgICAgICAuLi5BdXRvbWF0ZVZpZXdlclBhbmVsX0F1dG9tYXRlUnVuXFxuICAgICAgICAgIH1cXG4gICAgICAgICAgLi4uVHJpZ2dlcmVkQXV0b21hdGlvbnNTdGF0dXNTdW1tYXJ5XFxuICAgICAgICAgIC4uLkF1dG9tYXRlUnVuc1RyaWdnZXJTdGF0dXNEaWFsb2dfVHJpZ2dlcmVkQXV0b21hdGlvbnNTdGF0dXNcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgbW9kZWwge1xcbiAgICAgICAgaWRcXG4gICAgICB9XFxuICAgICAgcnVuIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBhdXRvbWF0aW9uSWRcXG4gICAgICAgIC4uLkF1dG9tYXRpb25SdW5EZXRhaWxzXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5PblByb2plY3RUcmlnZ2VyZWRBdXRvbWF0aW9uc1N0YXR1c1VwZGF0ZWREb2N1bWVudCxcbiAgICBcIlxcbiAgc3Vic2NyaXB0aW9uIE9uUHJvamVjdEF1dG9tYXRpb25zVXBkYXRlZCgkaWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdEF1dG9tYXRpb25zVXBkYXRlZChwcm9qZWN0SWQ6ICRpZCkge1xcbiAgICAgIHR5cGVcXG4gICAgICBhdXRvbWF0aW9uSWRcXG4gICAgICBhdXRvbWF0aW9uIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5Qcm9qZWN0UGFnZUF1dG9tYXRpb25QYWdlX0F1dG9tYXRpb25cXG4gICAgICAgIC4uLlByb2plY3RQYWdlQXV0b21hdGlvbnNSb3dfQXV0b21hdGlvblxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuT25Qcm9qZWN0QXV0b21hdGlvbnNVcGRhdGVkRG9jdW1lbnQsXG4gICAgXCJcXG4gIGZyYWdtZW50IEdldE1vZGVsSXRlbVJvdXRlX01vZGVsIG9uIE1vZGVsIHtcXG4gICAgaWRcXG4gICAgcHJvamVjdElkXFxuICAgIGhvbWVWaWV3IHtcXG4gICAgICBpZFxcbiAgICAgIHJlc291cmNlSWRzXFxuICAgIH1cXG4gICAgcmVzb3VyY2VJZFN0cmluZ1xcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuR2V0TW9kZWxJdGVtUm91dGVfTW9kZWxGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgbXV0YXRpb24gU2VydmVySW5mb1VwZGF0ZSgkaW5mbzogU2VydmVySW5mb1VwZGF0ZUlucHV0ISkge1xcbiAgICBzZXJ2ZXJJbmZvVXBkYXRlKGluZm86ICRpbmZvKVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2VydmVySW5mb1VwZGF0ZURvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBBZG1pblBhbmVsRGVsZXRlVXNlcigkdXNlckNvbmZpcm1hdGlvbjogVXNlckRlbGV0ZUlucHV0ISkge1xcbiAgICBhZG1pbkRlbGV0ZVVzZXIodXNlckNvbmZpcm1hdGlvbjogJHVzZXJDb25maXJtYXRpb24pXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5BZG1pblBhbmVsRGVsZXRlVXNlckRvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBBZG1pblBhbmVsRGVsZXRlUHJvamVjdCgkaWRzOiBbU3RyaW5nIV0hKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIGJhdGNoRGVsZXRlKGlkczogJGlkcylcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQWRtaW5QYW5lbERlbGV0ZVByb2plY3REb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gQWRtaW5QYW5lbFJlc2VuZEludml0ZSgkaW52aXRlSWQ6IFN0cmluZyEpIHtcXG4gICAgaW52aXRlUmVzZW5kKGludml0ZUlkOiAkaW52aXRlSWQpXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5BZG1pblBhbmVsUmVzZW5kSW52aXRlRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIEFkbWluUGFuZWxEZWxldGVJbnZpdGUoJGludml0ZUlkOiBTdHJpbmchKSB7XFxuICAgIGludml0ZURlbGV0ZShpbnZpdGVJZDogJGludml0ZUlkKVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQWRtaW5QYW5lbERlbGV0ZUludml0ZURvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBBZG1pbkNoYW5nZVVzZVJvbGUoJHVzZXJSb2xlSW5wdXQ6IFVzZXJSb2xlSW5wdXQhKSB7XFxuICAgIHVzZXJSb2xlQ2hhbmdlKHVzZXJSb2xlSW5wdXQ6ICR1c2VyUm9sZUlucHV0KVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQWRtaW5DaGFuZ2VVc2VSb2xlRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFNlcnZlck1hbmFnZW1lbnREYXRhUGFnZSB7XFxuICAgIGFkbWluIHtcXG4gICAgICB1c2VyTGlzdCB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICAgIHByb2plY3RMaXN0IHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICB9XFxuICAgICAgaW52aXRlTGlzdCB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHNlcnZlckluZm8ge1xcbiAgICAgIG5hbWVcXG4gICAgICB2ZXJzaW9uXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlNlcnZlck1hbmFnZW1lbnREYXRhUGFnZURvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBTZXJ2ZXJTZXR0aW5nc0RpYWxvZ0RhdGEge1xcbiAgICBzZXJ2ZXJJbmZvIHtcXG4gICAgICBuYW1lXFxuICAgICAgZGVzY3JpcHRpb25cXG4gICAgICBhZG1pbkNvbnRhY3RcXG4gICAgICBjb21wYW55XFxuICAgICAgdGVybXNPZlNlcnZpY2VcXG4gICAgICBpbnZpdGVPbmx5XFxuICAgICAgZ3Vlc3RNb2RlRW5hYmxlZFxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5TZXJ2ZXJTZXR0aW5nc0RpYWxvZ0RhdGFEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgQWRtaW5QYW5lbFVzZXJzTGlzdCgkbGltaXQ6IEludCEsICRjdXJzb3I6IFN0cmluZywgJHF1ZXJ5OiBTdHJpbmcpIHtcXG4gICAgYWRtaW4ge1xcbiAgICAgIHVzZXJMaXN0KGxpbWl0OiAkbGltaXQsIGN1cnNvcjogJGN1cnNvciwgcXVlcnk6ICRxdWVyeSkge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgY3Vyc29yXFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIGVtYWlsXFxuICAgICAgICAgIGF2YXRhclxcbiAgICAgICAgICBuYW1lXFxuICAgICAgICAgIHJvbGVcXG4gICAgICAgICAgdmVyaWZpZWRcXG4gICAgICAgICAgY29tcGFueVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQWRtaW5QYW5lbFVzZXJzTGlzdERvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBBZG1pblBhbmVsUHJvamVjdHNMaXN0KFxcbiAgICAkcXVlcnk6IFN0cmluZ1xcbiAgICAkb3JkZXJCeTogU3RyaW5nXFxuICAgICRsaW1pdDogSW50IVxcbiAgICAkdmlzaWJpbGl0eTogU3RyaW5nXFxuICAgICRjdXJzb3I6IFN0cmluZ1xcbiAgKSB7XFxuICAgIGFkbWluIHtcXG4gICAgICBwcm9qZWN0TGlzdChcXG4gICAgICAgIHF1ZXJ5OiAkcXVlcnlcXG4gICAgICAgIG9yZGVyQnk6ICRvcmRlckJ5XFxuICAgICAgICBsaW1pdDogJGxpbWl0XFxuICAgICAgICB2aXNpYmlsaXR5OiAkdmlzaWJpbGl0eVxcbiAgICAgICAgY3Vyc29yOiAkY3Vyc29yXFxuICAgICAgKSB7XFxuICAgICAgICBjdXJzb3JcXG4gICAgICAgIC4uLlNldHRpbmdzU2VydmVyUHJvamVjdHNfUHJvamVjdENvbGxlY3Rpb25cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkFkbWluUGFuZWxQcm9qZWN0c0xpc3REb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgQWRtaW5QYW5lbEludml0ZXNMaXN0KCRsaW1pdDogSW50ISwgJGN1cnNvcjogU3RyaW5nLCAkcXVlcnk6IFN0cmluZykge1xcbiAgICBhZG1pbiB7XFxuICAgICAgaW52aXRlTGlzdChsaW1pdDogJGxpbWl0LCBjdXJzb3I6ICRjdXJzb3IsIHF1ZXJ5OiAkcXVlcnkpIHtcXG4gICAgICAgIGN1cnNvclxcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICBlbWFpbFxcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBpbnZpdGVkQnkge1xcbiAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgbmFtZVxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5BZG1pblBhbmVsSW52aXRlc0xpc3REb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgVXNlcnNDb3VudCB7XFxuICAgIGFkbWluIHtcXG4gICAgICB1c2VyTGlzdCB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Vc2Vyc0NvdW50RG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IEludml0ZXNDb3VudCB7XFxuICAgIGFkbWluIHtcXG4gICAgICBpbnZpdGVMaXN0IHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkludml0ZXNDb3VudERvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBJbnZpdGVTZXJ2ZXJVc2VyKCRpbnB1dDogW1NlcnZlckludml0ZUNyZWF0ZUlucHV0IV0hKSB7XFxuICAgIHNlcnZlckludml0ZUJhdGNoQ3JlYXRlKGlucHV0OiAkaW5wdXQpXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5JbnZpdGVTZXJ2ZXJVc2VyRG9jdW1lbnQsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzTWVudV9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgc2x1Z1xcbiAgICBzc28ge1xcbiAgICAgIHByb3ZpZGVyIHtcXG4gICAgICAgIGlkXFxuICAgICAgfVxcbiAgICAgIHNlc3Npb24ge1xcbiAgICAgICAgdmFsaWRVbnRpbFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2V0dGluZ3NNZW51X1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBtdXRhdGlvbiBTZXR0aW5nc1VwZGF0ZVdvcmtzcGFjZSgkaW5wdXQ6IFdvcmtzcGFjZVVwZGF0ZUlucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIHVwZGF0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNHZW5lcmFsX1dvcmtzcGFjZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2V0dGluZ3NVcGRhdGVXb3Jrc3BhY2VEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gU2V0dGluZ3NVcGRhdGVXb3Jrc3BhY2VFbWJlZE9wdGlvbnMoXFxuICAgICRpbnB1dDogV29ya3NwYWNlVXBkYXRlRW1iZWRPcHRpb25zSW5wdXQhXFxuICApIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICB1cGRhdGVFbWJlZE9wdGlvbnMoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaGlkZVNwZWNrbGVCcmFuZGluZ1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2V0dGluZ3NVcGRhdGVXb3Jrc3BhY2VFbWJlZE9wdGlvbnNEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gU2V0dGluZ3NDcmVhdGVVc2VyRW1haWwoJGlucHV0OiBDcmVhdGVVc2VyRW1haWxJbnB1dCEpIHtcXG4gICAgYWN0aXZlVXNlck11dGF0aW9ucyB7XFxuICAgICAgZW1haWxNdXRhdGlvbnMge1xcbiAgICAgICAgY3JlYXRlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgZW1haWxzIHtcXG4gICAgICAgICAgICAuLi5FbWFpbEZpZWxkc1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5TZXR0aW5nc0NyZWF0ZVVzZXJFbWFpbERvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBTZXR0aW5nc0RlbGV0ZVVzZXJFbWFpbCgkaW5wdXQ6IERlbGV0ZVVzZXJFbWFpbElucHV0ISkge1xcbiAgICBhY3RpdmVVc2VyTXV0YXRpb25zIHtcXG4gICAgICBlbWFpbE11dGF0aW9ucyB7XFxuICAgICAgICBkZWxldGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBlbWFpbHMge1xcbiAgICAgICAgICAgIC4uLkVtYWlsRmllbGRzXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlNldHRpbmdzRGVsZXRlVXNlckVtYWlsRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIFNldHRpbmdzU2V0UHJpbWFyeVVzZXJFbWFpbCgkaW5wdXQ6IFNldFByaW1hcnlVc2VyRW1haWxJbnB1dCEpIHtcXG4gICAgYWN0aXZlVXNlck11dGF0aW9ucyB7XFxuICAgICAgZW1haWxNdXRhdGlvbnMge1xcbiAgICAgICAgc2V0UHJpbWFyeShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIGVtYWlscyB7XFxuICAgICAgICAgICAgLi4uRW1haWxGaWVsZHNcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2V0dGluZ3NTZXRQcmltYXJ5VXNlckVtYWlsRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIFNldHRpbmdzTmV3RW1haWxWZXJpZmljYXRpb24oJGlucHV0OiBFbWFpbFZlcmlmaWNhdGlvblJlcXVlc3RJbnB1dCEpIHtcXG4gICAgYWN0aXZlVXNlck11dGF0aW9ucyB7XFxuICAgICAgZW1haWxNdXRhdGlvbnMge1xcbiAgICAgICAgcmVxdWVzdE5ld0VtYWlsVmVyaWZpY2F0aW9uKGlucHV0OiAkaW5wdXQpXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5TZXR0aW5nc05ld0VtYWlsVmVyaWZpY2F0aW9uRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIFNldHRpbmdzVXBkYXRlV29ya3NwYWNlU2VjdXJpdHkoJGlucHV0OiBXb3Jrc3BhY2VVcGRhdGVJbnB1dCEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICB1cGRhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGRvbWFpbkJhc2VkTWVtYmVyc2hpcFByb3RlY3Rpb25FbmFibGVkXFxuICAgICAgICBkaXNjb3ZlcmFiaWxpdHlFbmFibGVkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5TZXR0aW5nc1VwZGF0ZVdvcmtzcGFjZVNlY3VyaXR5RG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIFNldHRpbmdzRGVsZXRlV29ya3NwYWNlKCR3b3Jrc3BhY2VJZDogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIGRlbGV0ZSh3b3Jrc3BhY2VJZDogJHdvcmtzcGFjZUlkKVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5TZXR0aW5nc0RlbGV0ZVdvcmtzcGFjZURvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBTZXR0aW5nc1Jlc2VuZFdvcmtzcGFjZUludml0ZSgkaW5wdXQ6IFdvcmtzcGFjZUludml0ZVJlc2VuZElucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIGludml0ZXMge1xcbiAgICAgICAgcmVzZW5kKGlucHV0OiAkaW5wdXQpXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5TZXR0aW5nc1Jlc2VuZFdvcmtzcGFjZUludml0ZURvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBTZXR0aW5nc0NhbmNlbFdvcmtzcGFjZUludml0ZSgkd29ya3NwYWNlSWQ6IFN0cmluZyEsICRpbnZpdGVJZDogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIGludml0ZXMge1xcbiAgICAgICAgY2FuY2VsKHdvcmtzcGFjZUlkOiAkd29ya3NwYWNlSWQsIGludml0ZUlkOiAkaW52aXRlSWQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlNldHRpbmdzQ2FuY2VsV29ya3NwYWNlSW52aXRlRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIEFkZFdvcmtzcGFjZURvbWFpbigkaW5wdXQ6IEFkZERvbWFpblRvV29ya3NwYWNlSW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgYWRkRG9tYWluKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5X1dvcmtzcGFjZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQWRkV29ya3NwYWNlRG9tYWluRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIERlbGV0ZVdvcmtzcGFjZURvbWFpbigkaW5wdXQ6IFdvcmtzcGFjZURvbWFpbkRlbGV0ZUlucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIGRlbGV0ZURvbWFpbihpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eURvbWFpblJlbW92ZURpYWxvZ19Xb3Jrc3BhY2VcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkRlbGV0ZVdvcmtzcGFjZURvbWFpbkRvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBTZXR0aW5nc0xlYXZlV29ya3NwYWNlKCRsZWF2ZUlkOiBJRCEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICBsZWF2ZShpZDogJGxlYXZlSWQpXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlNldHRpbmdzTGVhdmVXb3Jrc3BhY2VEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gU2V0dGluZ3NCaWxsaW5nQ2FuY2VsQ2hlY2tvdXRTZXNzaW9uKCRpbnB1dDogQ2FuY2VsQ2hlY2tvdXRTZXNzaW9uSW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgYmlsbGluZyB7XFxuICAgICAgICBjYW5jZWxDaGVja291dFNlc3Npb24oaW5wdXQ6ICRpbnB1dClcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlNldHRpbmdzQmlsbGluZ0NhbmNlbENoZWNrb3V0U2Vzc2lvbkRvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBTZXR0aW5nc1NpZGViYXIoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgLi4uU2V0dGluZ3NTaWRlYmFyX1dvcmtzcGFjZVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5TZXR0aW5nc1NpZGViYXJEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgU2V0dGluZ3NXb3Jrc3BhY2VHZW5lcmFsKCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc0dlbmVyYWxfV29ya3NwYWNlXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlNldHRpbmdzV29ya3NwYWNlR2VuZXJhbERvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBTZXR0aW5nc1dvcmtzcGFjZUJpbGxpbmcoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5Xb3Jrc3BhY2VCaWxsaW5nUGFnZV9Xb3Jrc3BhY2VcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VCaWxsaW5nRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFNldHRpbmdzV29ya3NwYWNlQmlsbGluZ0N1c3RvbWVyUG9ydGFsKCR3b3Jrc3BhY2VJZDogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2UoaWQ6ICR3b3Jrc3BhY2VJZCkge1xcbiAgICAgIGN1c3RvbWVyUG9ydGFsVXJsXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlNldHRpbmdzV29ya3NwYWNlQmlsbGluZ0N1c3RvbWVyUG9ydGFsRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFNldHRpbmdzV29ya3NwYWNlUmVnaW9ucygkc2x1ZzogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHNsdWcpIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc1JlZ2lvbnNfV29ya3NwYWNlXFxuICAgIH1cXG4gICAgc2VydmVySW5mbyB7XFxuICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzUmVnaW9uc19TZXJ2ZXJJbmZvXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlNldHRpbmdzV29ya3NwYWNlUmVnaW9uc0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBTZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzKFxcbiAgICAkc2x1ZzogU3RyaW5nIVxcbiAgICAkZmlsdGVyOiBBZG1pbldvcmtzcGFjZUpvaW5SZXF1ZXN0RmlsdGVyXFxuICApIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc0NvdW50c19Xb3Jrc3BhY2VcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBTZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzSW52aXRlcygkc2x1ZzogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHNsdWcpIHtcXG4gICAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzSW52aXRlc1RhYmxlX1dvcmtzcGFjZVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5TZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzSW52aXRlc0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBTZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzUmVxdWVzdHMoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc1JlcXVlc3RzVGFibGVfV29ya3NwYWNlXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNSZXF1ZXN0c0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBTZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzVGFibGVRdWVyeSgkc2x1ZzogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHNsdWcpIHtcXG4gICAgICBpZFxcbiAgICAgIHJvbGVcXG4gICAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzVGFibGVIZWFkZXJfV29ya3NwYWNlXFxuICAgICAgcGVybWlzc2lvbnMge1xcbiAgICAgICAgY2FuUmVhZE1lbWJlckVtYWlsIHtcXG4gICAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc1RhYmxlUXVlcnlEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc1NlYXJjaChcXG4gICAgJHNsdWc6IFN0cmluZyFcXG4gICAgJGZpbHRlcjogV29ya3NwYWNlVGVhbUZpbHRlclxcbiAgICAkbGltaXQ6IEludFxcbiAgICAkY3Vyc29yOiBTdHJpbmdcXG4gICkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHNsdWcpIHtcXG4gICAgICBpZFxcbiAgICAgIHRlYW0oZmlsdGVyOiAkZmlsdGVyLCBsaW1pdDogJGxpbWl0LCBjdXJzb3I6ICRjdXJzb3IpIHtcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc1RhYmxlX1dvcmtzcGFjZUNvbGxhYm9yYXRvclxcbiAgICAgICAgfVxcbiAgICAgICAgY3Vyc29yXFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5TZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzU2VhcmNoRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFNldHRpbmdzV29ya3NwYWNlc0ludml0ZXNTZWFyY2goXFxuICAgICRzbHVnOiBTdHJpbmchXFxuICAgICRpbnZpdGVzRmlsdGVyOiBQZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yc0ZpbHRlclxcbiAgKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIGlkXFxuICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc1RhYmxlSGVhZGVyX1dvcmtzcGFjZVxcbiAgICAgIGludml0ZWRUZWFtKGZpbHRlcjogJGludml0ZXNGaWx0ZXIpIHtcXG4gICAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNJbnZpdGVzVGFibGVfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvclxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VzSW52aXRlc1NlYXJjaERvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBTZXR0aW5nc1dvcmtzcGFjZXNQcm9qZWN0cyhcXG4gICAgJHNsdWc6IFN0cmluZyFcXG4gICAgJGxpbWl0OiBJbnQhXFxuICAgICRjdXJzb3I6IFN0cmluZ1xcbiAgICAkZmlsdGVyOiBXb3Jrc3BhY2VQcm9qZWN0c0ZpbHRlclxcbiAgKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc1Byb2plY3RzX1dvcmtzcGFjZVxcbiAgICAgIHByb2plY3RzKGxpbWl0OiAkbGltaXQsIGN1cnNvcjogJGN1cnNvciwgZmlsdGVyOiAkZmlsdGVyKSB7XFxuICAgICAgICBjdXJzb3JcXG4gICAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc1Byb2plY3RzX1Byb2plY3RDb2xsZWN0aW9uXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5TZXR0aW5nc1dvcmtzcGFjZXNQcm9qZWN0c0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBTZXR0aW5nc1dvcmtzcGFjZVNlY3VyaXR5KCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5X1dvcmtzcGFjZVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5TZXR0aW5nc1dvcmtzcGFjZVNlY3VyaXR5RG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFNldHRpbmdzV29ya3NwYWNlQXV0b21hdGlvbigkc2x1ZzogU3RyaW5nISwgJGN1cnNvcjogU3RyaW5nID0gbnVsbCkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHNsdWcpIHtcXG4gICAgICBpZFxcbiAgICAgIGF1dG9tYXRlRnVuY3Rpb25zKFxcbiAgICAgICAgbGltaXQ6IDEwXFxuICAgICAgICBjdXJzb3I6ICRjdXJzb3JcXG4gICAgICAgIGZpbHRlcjogeyBpbmNsdWRlRmVhdHVyZWQ6IGZhbHNlIH1cXG4gICAgICApIHtcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzQXV0b21hdGlvbkZ1bmN0aW9uc19BdXRvbWF0ZUZ1bmN0aW9uXFxuICAgICAgICB9XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5TZXR0aW5nc1dvcmtzcGFjZUF1dG9tYXRpb25Eb2N1bWVudCxcbiAgICBcIlxcbiAgZnJhZ21lbnQgQXBwQXV0aG9yQXZhdGFyIG9uIEFwcEF1dGhvciB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgYXZhdGFyXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5BcHBBdXRob3JBdmF0YXJGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgTGltaXRlZFVzZXJBdmF0YXIgb24gTGltaXRlZFVzZXIge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGF2YXRhclxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuTGltaXRlZFVzZXJBdmF0YXJGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgQWN0aXZlVXNlckF2YXRhciBvbiBVc2VyIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBhdmF0YXJcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkFjdGl2ZVVzZXJBdmF0YXJGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgcXVlcnkgQWN0aXZlVXNlck1ldGEge1xcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICBtZXRhIHtcXG4gICAgICAgIGxlZ2FjeVByb2plY3RzRXhwbGFpbmVyQ29sbGFwc2VkXFxuICAgICAgICBzcGVja2xlQ29uMjVCYW5uZXJEaXNtaXNzZWRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkFjdGl2ZVVzZXJNZXRhRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIFVwZGF0ZUxlZ2FjeVByb2plY3RzRXhwbGFpbmVyKCR2YWx1ZTogQm9vbGVhbiEpIHtcXG4gICAgYWN0aXZlVXNlck11dGF0aW9ucyB7XFxuICAgICAgbWV0YSB7XFxuICAgICAgICBzZXRMZWdhY3lQcm9qZWN0c0V4cGxhaW5lckNvbGxhcHNlZCh2YWx1ZTogJHZhbHVlKVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuVXBkYXRlTGVnYWN5UHJvamVjdHNFeHBsYWluZXJEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gVXBkYXRlU3BlY2tsZUNvbjI1QmFubmVyRGlzbWlzc2VkKCR2YWx1ZTogQm9vbGVhbiEpIHtcXG4gICAgYWN0aXZlVXNlck11dGF0aW9ucyB7XFxuICAgICAgbWV0YSB7XFxuICAgICAgICBzZXRTcGVja2xlQ29uMjVCYW5uZXJEaXNtaXNzZWQodmFsdWU6ICR2YWx1ZSlcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlVwZGF0ZVNwZWNrbGVDb24yNUJhbm5lckRpc21pc3NlZERvY3VtZW50LFxuICAgIFwiXFxuICAgICAgc3Vic2NyaXB0aW9uIE9uVXNlclByb2plY3RzVXBkYXRlIHtcXG4gICAgICAgIHVzZXJQcm9qZWN0c1VwZGF0ZWQge1xcbiAgICAgICAgICB0eXBlXFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIHByb2plY3Qge1xcbiAgICAgICAgICAgIC4uLlByb2plY3REYXNoYm9hcmRJdGVtXFxuICAgICAgICAgICAgd29ya3NwYWNlSWRcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgXCI6IHR5cGVvZiB0eXBlcy5PblVzZXJQcm9qZWN0c1VwZGF0ZURvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBVcGRhdGVVc2VyKCRpbnB1dDogVXNlclVwZGF0ZUlucHV0ISkge1xcbiAgICBhY3RpdmVVc2VyTXV0YXRpb25zIHtcXG4gICAgICB1cGRhdGUodXNlcjogJGlucHV0KSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgbmFtZVxcbiAgICAgICAgYmlvXFxuICAgICAgICBjb21wYW55XFxuICAgICAgICBhdmF0YXJcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlVwZGF0ZVVzZXJEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gVXBkYXRlTm90aWZpY2F0aW9uUHJlZmVyZW5jZXMoJGlucHV0OiBKU09OT2JqZWN0ISkge1xcbiAgICB1c2VyTm90aWZpY2F0aW9uUHJlZmVyZW5jZXNVcGRhdGUocHJlZmVyZW5jZXM6ICRpbnB1dClcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlVwZGF0ZU5vdGlmaWNhdGlvblByZWZlcmVuY2VzRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIERlbGV0ZUFjY291bnQoJGlucHV0OiBVc2VyRGVsZXRlSW5wdXQhKSB7XFxuICAgIHVzZXJEZWxldGUodXNlckNvbmZpcm1hdGlvbjogJGlucHV0KVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuRGVsZXRlQWNjb3VudERvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiB2ZXJpZnlFbWFpbCgkaW5wdXQ6IFZlcmlmeVVzZXJFbWFpbElucHV0ISkge1xcbiAgICBhY3RpdmVVc2VyTXV0YXRpb25zIHtcXG4gICAgICBlbWFpbE11dGF0aW9ucyB7XFxuICAgICAgICB2ZXJpZnkoaW5wdXQ6ICRpbnB1dClcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlZlcmlmeUVtYWlsRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIFNldEFjdGl2ZVdvcmtzcGFjZSgkc2x1ZzogU3RyaW5nLCAkaWQ6IFN0cmluZykge1xcbiAgICBhY3RpdmVVc2VyTXV0YXRpb25zIHtcXG4gICAgICBzZXRBY3RpdmVXb3Jrc3BhY2Uoc2x1ZzogJHNsdWcsIGlkOiAkaWQpIHtcXG4gICAgICAgIC4uLldvcmtzcGFjZVN3aXRjaGVyQWN0aXZlV29ya3NwYWNlX0xpbWl0ZWRXb3Jrc3BhY2VcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlNldEFjdGl2ZVdvcmtzcGFjZURvY3VtZW50LFxuICAgIFwiXFxuICBmcmFnbWVudCBFbWFpbEZpZWxkcyBvbiBVc2VyRW1haWwge1xcbiAgICBpZFxcbiAgICBlbWFpbFxcbiAgICB2ZXJpZmllZFxcbiAgICBwcmltYXJ5XFxuICAgIHVzZXJJZFxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuRW1haWxGaWVsZHNGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgcXVlcnkgVXNlckVtYWlscyB7XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgZW1haWxzIHtcXG4gICAgICAgIC4uLkVtYWlsRmllbGRzXFxuICAgICAgfVxcbiAgICAgIGhhc1BlbmRpbmdWZXJpZmljYXRpb25cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuVXNlckVtYWlsc0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBVc2VyQWN0aXZlV29ya3NwYWNlU2x1ZyB7XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgYWN0aXZlV29ya3NwYWNlIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBzbHVnXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Vc2VyQWN0aXZlV29ya3NwYWNlU2x1Z0RvY3VtZW50LFxuICAgIFwiXFxuICBmcmFnbWVudCBVc2VWaWV3ZXJVc2VyQWN0aXZpdHlCcm9hZGNhc3RpbmdfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkJyb2FkY2FzdEFjdGl2aXR5IHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlVzZVZpZXdlclVzZXJBY3Rpdml0eUJyb2FkY2FzdGluZ19Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFZpZXdlckNvbW1lbnRCdWJibGVzRGF0YSBvbiBDb21tZW50IHtcXG4gICAgaWRcXG4gICAgdmlld2VkQXRcXG4gICAgdmlld2VyU3RhdGVcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlZpZXdlckNvbW1lbnRCdWJibGVzRGF0YUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBVc2VDaGVja1ZpZXdlckNvbW1lbnRpbmdBY2Nlc3NfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkNyZWF0ZUNvbW1lbnQge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuVXNlQ2hlY2tWaWV3ZXJDb21tZW50aW5nQWNjZXNzX1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVXNlTG9hZExhdGVzdFZlcnNpb25fUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBzbHVnXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlVzZUxvYWRMYXRlc3RWZXJzaW9uX1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgbXV0YXRpb24gQ3JlYXRlU2F2ZWRWaWV3KCRpbnB1dDogQ3JlYXRlU2F2ZWRWaWV3SW5wdXQhKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIHNhdmVkVmlld011dGF0aW9ucyB7XFxuICAgICAgICBjcmVhdGVWaWV3KGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgcmVzb3VyY2VJZHNcXG4gICAgICAgICAgZ3JvdXBJZFxcbiAgICAgICAgICAuLi5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3X1NhdmVkVmlld1xcbiAgICAgICAgICBncm91cCB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICAuLi5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwX1NhdmVkVmlld0dyb3VwXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkNyZWF0ZVNhdmVkVmlld0RvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBEZWxldGVTYXZlZFZpZXcoJGlucHV0OiBEZWxldGVTYXZlZFZpZXdJbnB1dCEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgc2F2ZWRWaWV3TXV0YXRpb25zIHtcXG4gICAgICAgIGRlbGV0ZVZpZXcoaW5wdXQ6ICRpbnB1dClcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkRlbGV0ZVNhdmVkVmlld0RvY3VtZW50LFxuICAgIFwiXFxuICBmcmFnbWVudCBVc2VEZWxldGVTYXZlZFZpZXdfU2F2ZWRWaWV3IG9uIFNhdmVkVmlldyB7XFxuICAgIGlkXFxuICAgIHByb2plY3RJZFxcbiAgICByZXNvdXJjZUlkc1xcbiAgICBncm91cCB7XFxuICAgICAgaWRcXG4gICAgICBncm91cElkXFxuICAgICAgcmVzb3VyY2VJZHNcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuVXNlRGVsZXRlU2F2ZWRWaWV3X1NhdmVkVmlld0ZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBtdXRhdGlvbiBVcGRhdGVTYXZlZFZpZXcoJGlucHV0OiBVcGRhdGVTYXZlZFZpZXdJbnB1dCEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgc2F2ZWRWaWV3TXV0YXRpb25zIHtcXG4gICAgICAgIHVwZGF0ZVZpZXcoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICAuLi5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3X1NhdmVkVmlld1xcbiAgICAgICAgICAuLi5Vc2VWaWV3ZXJTYXZlZFZpZXdTZXR1cF9TYXZlZFZpZXdcXG4gICAgICAgICAgLi4uVXNlVXBkYXRlU2F2ZWRWaWV3X1NhdmVkVmlld1xcbiAgICAgICAgICBncm91cCB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICAuLi5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwX1NhdmVkVmlld0dyb3VwXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlVwZGF0ZVNhdmVkVmlld0RvY3VtZW50LFxuICAgIFwiXFxuICBmcmFnbWVudCBVc2VVcGRhdGVTYXZlZFZpZXdfU2F2ZWRWaWV3IG9uIFNhdmVkVmlldyB7XFxuICAgIGlkXFxuICAgIHByb2plY3RJZFxcbiAgICBpc0hvbWVWaWV3XFxuICAgIGdyb3VwUmVzb3VyY2VJZHNcXG4gICAgcmVzb3VyY2VJZHNcXG4gICAgZ3JvdXAge1xcbiAgICAgIGlkXFxuICAgICAgZ3JvdXBJZFxcbiAgICAgIHJlc291cmNlSWRzXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlVzZVVwZGF0ZVNhdmVkVmlld19TYXZlZFZpZXdGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgbXV0YXRpb24gQ3JlYXRlU2F2ZWRWaWV3R3JvdXAoJGlucHV0OiBDcmVhdGVTYXZlZFZpZXdHcm91cElucHV0ISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBzYXZlZFZpZXdNdXRhdGlvbnMge1xcbiAgICAgICAgY3JlYXRlR3JvdXAoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICAuLi5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwX1NhdmVkVmlld0dyb3VwXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5DcmVhdGVTYXZlZFZpZXdHcm91cERvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBEZWxldGVTYXZlZFZpZXdHcm91cCgkaW5wdXQ6IERlbGV0ZVNhdmVkVmlld0dyb3VwSW5wdXQhKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIHNhdmVkVmlld011dGF0aW9ucyB7XFxuICAgICAgICBkZWxldGVHcm91cChpbnB1dDogJGlucHV0KVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuRGVsZXRlU2F2ZWRWaWV3R3JvdXBEb2N1bWVudCxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVXNlRGVsZXRlU2F2ZWRWaWV3R3JvdXBfU2F2ZWRWaWV3R3JvdXAgb24gU2F2ZWRWaWV3R3JvdXAge1xcbiAgICBpZFxcbiAgICBncm91cElkXFxuICAgIHByb2plY3RJZFxcbiAgICBpc1VuZ3JvdXBlZFZpZXdzR3JvdXBcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlVzZURlbGV0ZVNhdmVkVmlld0dyb3VwX1NhdmVkVmlld0dyb3VwRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIG11dGF0aW9uIFVwZGF0ZVNhdmVkVmlld0dyb3VwKCRpbnB1dDogVXBkYXRlU2F2ZWRWaWV3R3JvdXBJbnB1dCEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgc2F2ZWRWaWV3TXV0YXRpb25zIHtcXG4gICAgICAgIHVwZGF0ZUdyb3VwKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uVXNlVXBkYXRlU2F2ZWRWaWV3R3JvdXBfU2F2ZWRWaWV3R3JvdXBcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlVwZGF0ZVNhdmVkVmlld0dyb3VwRG9jdW1lbnQsXG4gICAgXCJcXG4gIGZyYWdtZW50IFVzZVVwZGF0ZVNhdmVkVmlld0dyb3VwX1NhdmVkVmlld0dyb3VwIG9uIFNhdmVkVmlld0dyb3VwIHtcXG4gICAgaWRcXG4gICAgcHJvamVjdElkXFxuICAgIGdyb3VwSWRcXG4gICAgdGl0bGVcXG4gICAgaXNVbmdyb3VwZWRWaWV3c0dyb3VwXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Vc2VVcGRhdGVTYXZlZFZpZXdHcm91cF9TYXZlZFZpZXdHcm91cEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBzdWJzY3JpcHRpb24gT25Qcm9qZWN0U2F2ZWRWaWV3c1VwZGF0ZWQoJHByb2plY3RJZDogSUQhKSB7XFxuICAgIHByb2plY3RTYXZlZFZpZXdzVXBkYXRlZChwcm9qZWN0SWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICB0eXBlXFxuICAgICAgaWRcXG4gICAgICBzYXZlZFZpZXcge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHJlc291cmNlSWRzXFxuICAgICAgICBncm91cCB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIGdyb3VwSWRcXG4gICAgICAgICAgcmVzb3VyY2VJZHNcXG4gICAgICAgIH1cXG4gICAgICAgIC4uLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdfU2F2ZWRWaWV3XFxuICAgICAgfVxcbiAgICAgIGJlZm9yZUNoYW5nZVNhdmVkVmlldyB7XFxuICAgICAgICBncm91cElkXFxuICAgICAgICByZXNvdXJjZUlkc1xcbiAgICAgICAgZ3JvdXBSZXNvdXJjZUlkc1xcbiAgICAgICAgcG9zaXRpb25cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLk9uUHJvamVjdFNhdmVkVmlld3NVcGRhdGVkRG9jdW1lbnQsXG4gICAgXCJcXG4gIHN1YnNjcmlwdGlvbiBPblByb2plY3RTYXZlZFZpZXdHcm91cHNVcGRhdGVkKCRwcm9qZWN0SWQ6IElEISkge1xcbiAgICBwcm9qZWN0U2F2ZWRWaWV3R3JvdXBzVXBkYXRlZChwcm9qZWN0SWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICB0eXBlXFxuICAgICAgaWRcXG4gICAgICBzYXZlZFZpZXdHcm91cCB7XFxuICAgICAgICBpZFxcbiAgICAgICAgcHJvamVjdElkXFxuICAgICAgICBhdXRob3Ige1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuT25Qcm9qZWN0U2F2ZWRWaWV3R3JvdXBzVXBkYXRlZERvY3VtZW50LFxuICAgIFwiXFxuICBmcmFnbWVudCBVc2VEcmFnZ2FibGVWaWV3X1NhdmVkVmlldyBvbiBTYXZlZFZpZXcge1xcbiAgICBpZFxcbiAgICBwcm9qZWN0SWRcXG4gICAgbmFtZVxcbiAgICBwb3NpdGlvblxcbiAgICBncm91cCB7XFxuICAgICAgaWRcXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuTW92ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIC4uLlVzZVVwZGF0ZVNhdmVkVmlld19TYXZlZFZpZXdcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlVzZURyYWdnYWJsZVZpZXdfU2F2ZWRWaWV3RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFVzZURyYWdnYWJsZVZpZXdUYXJnZXRWaWV3X1NhdmVkVmlldyBvbiBTYXZlZFZpZXcge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHBvc2l0aW9uXFxuICAgIGdyb3VwIHtcXG4gICAgICBpZFxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Vc2VEcmFnZ2FibGVWaWV3VGFyZ2V0Vmlld19TYXZlZFZpZXdGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVXNlRHJhZ2dhYmxlVmlld1RhcmdldEdyb3VwX1NhdmVkVmlld0dyb3VwIG9uIFNhdmVkVmlld0dyb3VwIHtcXG4gICAgaWRcXG4gICAgdGl0bGVcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlVzZURyYWdnYWJsZVZpZXdUYXJnZXRHcm91cF9TYXZlZFZpZXdHcm91cEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBVc2VTYXZlZFZpZXdWYWxpZGF0aW9uSGVscGVyc19TYXZlZFZpZXcgb24gU2F2ZWRWaWV3IHtcXG4gICAgaWRcXG4gICAgaXNIb21lVmlld1xcbiAgICB2aXNpYmlsaXR5XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5VcGRhdGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5Nb3ZlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuRWRpdFRpdGxlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuRWRpdERlc2NyaXB0aW9uIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuU2V0QXNIb21lVmlldyB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Vc2VTYXZlZFZpZXdWYWxpZGF0aW9uSGVscGVyc19TYXZlZFZpZXdGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVXNlVmlld2VyU2F2ZWRWaWV3U2V0dXBfU2F2ZWRWaWV3IG9uIFNhdmVkVmlldyB7XFxuICAgIGlkXFxuICAgIHZpZXdlclN0YXRlXFxuICAgIC4uLlZpZXdlclBhZ2VTZXR1cF9TYXZlZFZpZXdcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlVzZVZpZXdlclNhdmVkVmlld1NldHVwX1NhdmVkVmlld0ZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBWaWV3ZXJDb21tZW50VGhyZWFkIG9uIENvbW1lbnQge1xcbiAgICAuLi5WaWV3ZXJDb21tZW50c0xpc3RJdGVtXFxuICAgIC4uLlZpZXdlckNvbW1lbnRCdWJibGVzRGF0YVxcbiAgICAuLi5WaWV3ZXJDb21tZW50c1JlcGx5SXRlbVxcbiAgICAuLi5WaWV3ZXJDb21tZW50VGhyZWFkRGF0YVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuVmlld2VyQ29tbWVudFRocmVhZEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBWaWV3ZXJDb21tZW50c1JlcGx5SXRlbSBvbiBDb21tZW50IHtcXG4gICAgaWRcXG4gICAgYXJjaGl2ZWRcXG4gICAgcmF3VGV4dFxcbiAgICB0ZXh0IHtcXG4gICAgICBkb2NcXG4gICAgfVxcbiAgICBhdXRob3Ige1xcbiAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgIH1cXG4gICAgY3JlYXRlZEF0XFxuICAgIC4uLlRocmVhZENvbW1lbnRBdHRhY2htZW50XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5WaWV3ZXJDb21tZW50c1JlcGx5SXRlbUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBtdXRhdGlvbiBCcm9hZGNhc3RWaWV3ZXJVc2VyQWN0aXZpdHkoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJHJlc291cmNlSWRTdHJpbmc6IFN0cmluZyFcXG4gICAgJG1lc3NhZ2U6IFZpZXdlclVzZXJBY3Rpdml0eU1lc3NhZ2VJbnB1dCFcXG4gICkge1xcbiAgICBicm9hZGNhc3RWaWV3ZXJVc2VyQWN0aXZpdHkoXFxuICAgICAgcHJvamVjdElkOiAkcHJvamVjdElkXFxuICAgICAgcmVzb3VyY2VJZFN0cmluZzogJHJlc291cmNlSWRTdHJpbmdcXG4gICAgICBtZXNzYWdlOiAkbWVzc2FnZVxcbiAgICApXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Ccm9hZGNhc3RWaWV3ZXJVc2VyQWN0aXZpdHlEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gTWFya0NvbW1lbnRWaWV3ZWQoJGlucHV0OiBNYXJrQ29tbWVudFZpZXdlZElucHV0ISkge1xcbiAgICBjb21tZW50TXV0YXRpb25zIHtcXG4gICAgICBtYXJrVmlld2VkKGlucHV0OiAkaW5wdXQpXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLk1hcmtDb21tZW50Vmlld2VkRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIENyZWF0ZUNvbW1lbnRUaHJlYWQoJGlucHV0OiBDcmVhdGVDb21tZW50SW5wdXQhKSB7XFxuICAgIGNvbW1lbnRNdXRhdGlvbnMge1xcbiAgICAgIGNyZWF0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAuLi5WaWV3ZXJDb21tZW50VGhyZWFkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5DcmVhdGVDb21tZW50VGhyZWFkRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIENyZWF0ZUNvbW1lbnRSZXBseSgkaW5wdXQ6IENyZWF0ZUNvbW1lbnRSZXBseUlucHV0ISkge1xcbiAgICBjb21tZW50TXV0YXRpb25zIHtcXG4gICAgICByZXBseShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAuLi5WaWV3ZXJDb21tZW50c1JlcGx5SXRlbVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQ3JlYXRlQ29tbWVudFJlcGx5RG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIEFyY2hpdmVDb21tZW50KCRpbnB1dDogQXJjaGl2ZUNvbW1lbnRJbnB1dCEpIHtcXG4gICAgY29tbWVudE11dGF0aW9ucyB7XFxuICAgICAgYXJjaGl2ZShpbnB1dDogJGlucHV0KVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5BcmNoaXZlQ29tbWVudERvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBQcm9qZWN0Vmlld2VyUmVzb3VyY2VzKFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRyZXNvdXJjZVVybFN0cmluZzogU3RyaW5nIVxcbiAgICAkc2F2ZWRWaWV3SWQ6IElEXFxuICAgICRzYXZlZFZpZXdTZXR0aW5nczogU2F2ZWRWaWV3c0xvYWRTZXR0aW5nc1xcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHZpZXdlclJlc291cmNlc0V4dGVuZGVkKFxcbiAgICAgICAgcmVzb3VyY2VJZFN0cmluZzogJHJlc291cmNlVXJsU3RyaW5nXFxuICAgICAgICBzYXZlZFZpZXdJZDogJHNhdmVkVmlld0lkXFxuICAgICAgICBzYXZlZFZpZXdTZXR0aW5nczogJHNhdmVkVmlld1NldHRpbmdzXFxuICAgICAgKSB7XFxuICAgICAgICBncm91cHMge1xcbiAgICAgICAgICBpZGVudGlmaWVyXFxuICAgICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgICBtb2RlbElkXFxuICAgICAgICAgICAgdmVyc2lvbklkXFxuICAgICAgICAgICAgb2JqZWN0SWRcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgc2F2ZWRWaWV3IHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uVXNlVmlld2VyU2F2ZWRWaWV3U2V0dXBfU2F2ZWRWaWV3XFxuICAgICAgICB9XFxuICAgICAgICByZXF1ZXN0IHtcXG4gICAgICAgICAgc2F2ZWRWaWV3SWRcXG4gICAgICAgIH1cXG4gICAgICAgIHJlc291cmNlSWRTdHJpbmdcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlByb2plY3RWaWV3ZXJSZXNvdXJjZXNEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgVmlld2VyTG9hZGVkUmVzb3VyY2VzKFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRtb2RlbElkczogW1N0cmluZyFdIVxcbiAgICAkdmVyc2lvbklkczogW1N0cmluZyFdXFxuICApIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgcm9sZVxcbiAgICAgIGFsbG93UHVibGljQ29tbWVudHNcXG4gICAgICBtb2RlbHMoZmlsdGVyOiB7IGlkczogJG1vZGVsSWRzIH0pIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgbmFtZVxcbiAgICAgICAgICB1cGRhdGVkQXRcXG4gICAgICAgICAgbG9hZGVkVmVyc2lvbjogdmVyc2lvbnMoXFxuICAgICAgICAgICAgZmlsdGVyOiB7IHByaW9yaXR5SWRzOiAkdmVyc2lvbklkcywgcHJpb3JpdHlJZHNPbmx5OiB0cnVlIH1cXG4gICAgICAgICAgKSB7XFxuICAgICAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAgICAgLi4uVmlld2VyTW9kZWxWZXJzaW9uQ2FyZEl0ZW1cXG4gICAgICAgICAgICAgIGF1dG9tYXRpb25zU3RhdHVzIHtcXG4gICAgICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICAgICAgYXV0b21hdGlvblJ1bnMge1xcbiAgICAgICAgICAgICAgICAgIC4uLkF1dG9tYXRlVmlld2VyUGFuZWxfQXV0b21hdGVSdW5cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgICB2ZXJzaW9ucyhsaW1pdDogNSkge1xcbiAgICAgICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgICAgICBjdXJzb3JcXG4gICAgICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgICAgICAuLi5WaWV3ZXJNb2RlbFZlcnNpb25DYXJkSXRlbVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICAuLi5Qcm9qZWN0UGFnZUxhdGVzdEl0ZW1zTW9kZWxzXFxuICAgICAgLi4uTW9kZWxQYWdlUHJvamVjdFxcbiAgICAgIC4uLkhlYWRlck5hdlNoYXJlX1Byb2plY3RcXG4gICAgICAuLi5Vc2VDaGVja1ZpZXdlckNvbW1lbnRpbmdBY2Nlc3NfUHJvamVjdFxcbiAgICAgIC4uLlVzZVZpZXdlclVzZXJBY3Rpdml0eUJyb2FkY2FzdGluZ19Qcm9qZWN0XFxuICAgICAgLi4uVmlld2VyUmVzb3VyY2VzTGltaXRBbGVydF9Qcm9qZWN0XFxuICAgICAgLi4uVmlld2VyU2F2ZWRWaWV3c1BhbmVsX1Byb2plY3RcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuVmlld2VyTG9hZGVkUmVzb3VyY2VzRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFZpZXdlck1vZGVsVmVyc2lvbnMoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJG1vZGVsSWQ6IFN0cmluZyFcXG4gICAgJHZlcnNpb25zQ3Vyc29yOiBTdHJpbmdcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICByb2xlXFxuICAgICAgbW9kZWwoaWQ6ICRtb2RlbElkKSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgdmVyc2lvbnMoY3Vyc29yOiAkdmVyc2lvbnNDdXJzb3IsIGxpbWl0OiA1KSB7XFxuICAgICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgICAgY3Vyc29yXFxuICAgICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgICAuLi5WaWV3ZXJNb2RlbFZlcnNpb25DYXJkSXRlbVxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5WaWV3ZXJNb2RlbFZlcnNpb25zRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFZpZXdlckRpZmZWZXJzaW9ucyhcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkbW9kZWxJZDogU3RyaW5nIVxcbiAgICAkdmVyc2lvbkFJZDogU3RyaW5nIVxcbiAgICAkdmVyc2lvbkJJZDogU3RyaW5nIVxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIG1vZGVsKGlkOiAkbW9kZWxJZCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHZlcnNpb25BOiB2ZXJzaW9uKGlkOiAkdmVyc2lvbkFJZCkge1xcbiAgICAgICAgICAuLi5WaWV3ZXJNb2RlbFZlcnNpb25DYXJkSXRlbVxcbiAgICAgICAgfVxcbiAgICAgICAgdmVyc2lvbkI6IHZlcnNpb24oaWQ6ICR2ZXJzaW9uQklkKSB7XFxuICAgICAgICAgIC4uLlZpZXdlck1vZGVsVmVyc2lvbkNhcmRJdGVtXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5WaWV3ZXJEaWZmVmVyc2lvbnNEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgVmlld2VyTG9hZGVkVGhyZWFkcyhcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkZmlsdGVyOiBQcm9qZWN0Q29tbWVudHNGaWx0ZXIhXFxuICAgICRjdXJzb3I6IFN0cmluZ1xcbiAgICAkbGltaXQ6IEludFxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIGNvbW1lbnRUaHJlYWRzKGZpbHRlcjogJGZpbHRlciwgY3Vyc29yOiAkY3Vyc29yLCBsaW1pdDogJGxpbWl0KSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICB0b3RhbEFyY2hpdmVkQ291bnRcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgLi4uVmlld2VyQ29tbWVudFRocmVhZFxcbiAgICAgICAgICAuLi5MaW5rYWJsZUNvbW1lbnRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlZpZXdlckxvYWRlZFRocmVhZHNEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgVmlld2VyUmF3UHJvamVjdE9iamVjdCgkcHJvamVjdElkOiBTdHJpbmchLCAkb2JqZWN0SWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgb2JqZWN0KGlkOiAkb2JqZWN0SWQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBkYXRhXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5WaWV3ZXJSYXdQcm9qZWN0T2JqZWN0RG9jdW1lbnQsXG4gICAgXCJcXG4gIHN1YnNjcmlwdGlvbiBPblZpZXdlclVzZXJBY3Rpdml0eUJyb2FkY2FzdGVkKFxcbiAgICAkdGFyZ2V0OiBWaWV3ZXJVcGRhdGVUcmFja2luZ1RhcmdldCFcXG4gICAgJHNlc3Npb25JZDogU3RyaW5nIVxcbiAgKSB7XFxuICAgIHZpZXdlclVzZXJBY3Rpdml0eUJyb2FkY2FzdGVkKHRhcmdldDogJHRhcmdldCwgc2Vzc2lvbklkOiAkc2Vzc2lvbklkKSB7XFxuICAgICAgdXNlck5hbWVcXG4gICAgICB1c2VySWRcXG4gICAgICB1c2VyIHtcXG4gICAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgICAgfVxcbiAgICAgIHN0YXRlXFxuICAgICAgc3RhdHVzXFxuICAgICAgc2Vzc2lvbklkXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLk9uVmlld2VyVXNlckFjdGl2aXR5QnJvYWRjYXN0ZWREb2N1bWVudCxcbiAgICBcIlxcbiAgc3Vic2NyaXB0aW9uIE9uVmlld2VyQ29tbWVudHNVcGRhdGVkKCR0YXJnZXQ6IFZpZXdlclVwZGF0ZVRyYWNraW5nVGFyZ2V0ISkge1xcbiAgICBwcm9qZWN0Q29tbWVudHNVcGRhdGVkKHRhcmdldDogJHRhcmdldCkge1xcbiAgICAgIGlkXFxuICAgICAgdHlwZVxcbiAgICAgIGNvbW1lbnQge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHBhcmVudCB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICB9XFxuICAgICAgICAuLi5WaWV3ZXJDb21tZW50VGhyZWFkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5PblZpZXdlckNvbW1lbnRzVXBkYXRlZERvY3VtZW50LFxuICAgIFwiXFxuICBmcmFnbWVudCBMaW5rYWJsZUNvbW1lbnQgb24gQ29tbWVudCB7XFxuICAgIGlkXFxuICAgIHZpZXdlclJlc291cmNlcyB7XFxuICAgICAgbW9kZWxJZFxcbiAgICAgIHZlcnNpb25JZFxcbiAgICAgIG9iamVjdElkXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkxpbmthYmxlQ29tbWVudEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBBY3RpdmVXb3Jrc3BhY2VfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgbG9nb1xcbiAgICByb2xlXFxuICAgIHNsdWdcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkFjdGl2ZVdvcmtzcGFjZV9Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgRGlzY292ZXJhYmxlV29ya3NwYWNlX0xpbWl0ZWRXb3Jrc3BhY2Ugb24gTGltaXRlZFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgbG9nb1xcbiAgICBkZXNjcmlwdGlvblxcbiAgICBzbHVnXFxuICAgIGRpc2NvdmVyYWJpbGl0eUF1dG9Kb2luRW5hYmxlZFxcbiAgICB0ZWFtIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgdXNlciB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIG5hbWVcXG4gICAgICAgICAgYXZhdGFyXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICAgIGFkbWluVGVhbSB7XFxuICAgICAgdXNlciB7XFxuICAgICAgICBpZFxcbiAgICAgICAgbmFtZVxcbiAgICAgICAgYXZhdGFyXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5EaXNjb3ZlcmFibGVXb3Jrc3BhY2VfTGltaXRlZFdvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VKb2luUmVxdWVzdHNfTGltaXRlZFdvcmtzcGFjZUpvaW5SZXF1ZXN0IG9uIExpbWl0ZWRXb3Jrc3BhY2VKb2luUmVxdWVzdCB7XFxuICAgIGlkXFxuICAgIHN0YXR1c1xcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICAgIGxvZ29cXG4gICAgICBzbHVnXFxuICAgICAgZGlzY292ZXJhYmlsaXR5QXV0b0pvaW5FbmFibGVkXFxuICAgICAgYWRtaW5UZWFtIHtcXG4gICAgICAgIHVzZXIge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBuYW1lXFxuICAgICAgICAgIGF2YXRhclxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICB0ZWFtIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgdXNlciB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICBuYW1lXFxuICAgICAgICAgICAgYXZhdGFyXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLldvcmtzcGFjZUpvaW5SZXF1ZXN0c19MaW1pdGVkV29ya3NwYWNlSm9pblJlcXVlc3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlUGxhbkxpbWl0c19Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgc2x1Z1xcbiAgICBwbGFuIHtcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLldvcmtzcGFjZVBsYW5MaW1pdHNfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFVzZVdvcmtzcGFjZUludml0ZU1hbmFnZXJfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvciBvbiBQZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yIHtcXG4gICAgaWRcXG4gICAgdG9rZW5cXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICAuLi5Xb3Jrc3BhY2VJbnZpdGVDYXJkX0xpbWl0ZWRXb3Jrc3BhY2VcXG4gICAgfVxcbiAgICB1c2VyIHtcXG4gICAgICBpZFxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Vc2VXb3Jrc3BhY2VJbnZpdGVNYW5hZ2VyX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3JGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlc1BsYW5fV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHNsdWdcXG4gICAgcGxhbiB7XFxuICAgICAgc3RhdHVzXFxuICAgICAgY3JlYXRlZEF0XFxuICAgICAgbmFtZVxcbiAgICAgIHBheW1lbnRNZXRob2RcXG4gICAgICB1c2FnZSB7XFxuICAgICAgICBwcm9qZWN0Q291bnRcXG4gICAgICAgIG1vZGVsQ291bnRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgc2VhdHMge1xcbiAgICAgIGVkaXRvcnMge1xcbiAgICAgICAgYXNzaWduZWRcXG4gICAgICAgIGF2YWlsYWJsZVxcbiAgICAgIH1cXG4gICAgICB2aWV3ZXJzIHtcXG4gICAgICAgIGFzc2lnbmVkXFxuICAgICAgICBhdmFpbGFibGVcXG4gICAgICB9XFxuICAgIH1cXG4gICAgc3Vic2NyaXB0aW9uIHtcXG4gICAgICBiaWxsaW5nSW50ZXJ2YWxcXG4gICAgICBjdXJyZW50QmlsbGluZ0N5Y2xlRW5kXFxuICAgICAgY3VycmVuY3lcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuV29ya3NwYWNlc1BsYW5fV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gICAgICBzdWJzY3JpcHRpb24gT25Xb3Jrc3BhY2VQcm9qZWN0c1VwZGF0ZSgkc2x1ZzogU3RyaW5nISkge1xcbiAgICAgICAgd29ya3NwYWNlUHJvamVjdHNVcGRhdGVkKHdvcmtzcGFjZUlkOiBudWxsLCB3b3Jrc3BhY2VTbHVnOiAkc2x1Zykge1xcbiAgICAgICAgICBwcm9qZWN0SWRcXG4gICAgICAgICAgd29ya3NwYWNlSWRcXG4gICAgICAgICAgdHlwZVxcbiAgICAgICAgICBwcm9qZWN0IHtcXG4gICAgICAgICAgICAuLi5Qcm9qZWN0RGFzaGJvYXJkSXRlbVxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICBcIjogdHlwZW9mIHR5cGVzLk9uV29ya3NwYWNlUHJvamVjdHNVcGRhdGVEb2N1bWVudCxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVXNlQ2FuQ3JlYXRlV29ya3NwYWNlUHJvamVjdF9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkNyZWF0ZVByb2plY3Qge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuVXNlQ2FuQ3JlYXRlV29ya3NwYWNlUHJvamVjdF9Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVXNlQ2FuTW92ZVByb2plY3RJbnRvV29ya3NwYWNlX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuTW92ZVByb2plY3RUb1dvcmtzcGFjZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Vc2VDYW5Nb3ZlUHJvamVjdEludG9Xb3Jrc3BhY2VfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFVzZUNhbk1vdmVQcm9qZWN0SW50b1dvcmtzcGFjZV9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuTW92ZVRvV29ya3NwYWNlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlVzZUNhbk1vdmVQcm9qZWN0SW50b1dvcmtzcGFjZV9Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZUhhc0N1c3RvbURhdGFSZXNpZGVuY3lfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIGRlZmF1bHRSZWdpb24ge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Xb3Jrc3BhY2VIYXNDdXN0b21EYXRhUmVzaWRlbmN5X1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBxdWVyeSBDaGVja1Byb2plY3RXb3Jrc3BhY2VEYXRhUmVzaWRlbmN5KCRwcm9qZWN0SWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgd29ya3NwYWNlIHtcXG4gICAgICAgIC4uLldvcmtzcGFjZUhhc0N1c3RvbURhdGFSZXNpZGVuY3lfV29ya3NwYWNlXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5DaGVja1Byb2plY3RXb3Jrc3BhY2VEYXRhUmVzaWRlbmN5RG9jdW1lbnQsXG4gICAgXCJcXG4gICAgZnJhZ21lbnQgV29ya3NwYWNlU3NvU3RhdHVzX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgc3NvIHtcXG4gICAgICAgIHByb3ZpZGVyIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgbmFtZVxcbiAgICAgICAgICBjbGllbnRJZFxcbiAgICAgICAgICBpc3N1ZXJVcmxcXG4gICAgICAgIH1cXG4gICAgICAgIHNlc3Npb24ge1xcbiAgICAgICAgICB2YWxpZFVudGlsXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICBcIjogdHlwZW9mIHR5cGVzLldvcmtzcGFjZVNzb1N0YXR1c19Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgICBmcmFnbWVudCBXb3Jrc3BhY2VTc29TdGF0dXNfVXNlciBvbiBVc2VyIHtcXG4gICAgICBleHBpcmVkU3NvU2Vzc2lvbnMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHNsdWdcXG4gICAgICB9XFxuICAgIH1cXG4gIFwiOiB0eXBlb2YgdHlwZXMuV29ya3NwYWNlU3NvU3RhdHVzX1VzZXJGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlVXNhZ2VfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHNsdWdcXG4gICAgcGxhbiB7XFxuICAgICAgdXNhZ2Uge1xcbiAgICAgICAgcHJvamVjdENvdW50XFxuICAgICAgICBtb2RlbENvdW50XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHRlYW0ge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgfVxcbiAgICB0ZWFtQnlSb2xlIHtcXG4gICAgICBhZG1pbnMge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgIH1cXG4gICAgICBtZW1iZXJzIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICB9XFxuICAgICAgZ3Vlc3RzIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLldvcmtzcGFjZVVzYWdlX1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBtdXRhdGlvbiBVcGRhdGVSb2xlKCRpbnB1dDogV29ya3NwYWNlUm9sZVVwZGF0ZUlucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIHVwZGF0ZVJvbGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgdGVhbSB7XFxuICAgICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgICBpZFxcbiAgICAgICAgICAgIHJvbGVcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuVXBkYXRlUm9sZURvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBXb3Jrc3BhY2VzVXBkYXRlU2VhdFR5cGUoJGlucHV0OiBXb3Jrc3BhY2VVcGRhdGVTZWF0VHlwZUlucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIHVwZGF0ZVNlYXRUeXBlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIHRlYW0ge1xcbiAgICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICBzZWF0VHlwZVxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Xb3Jrc3BhY2VzVXBkYXRlU2VhdFR5cGVEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gSW52aXRlVG9Xb3Jrc3BhY2UoXFxuICAgICR3b3Jrc3BhY2VJZDogU3RyaW5nIVxcbiAgICAkaW5wdXQ6IFtXb3Jrc3BhY2VJbnZpdGVDcmVhdGVJbnB1dCFdIVxcbiAgKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgaW52aXRlcyB7XFxuICAgICAgICBiYXRjaENyZWF0ZSh3b3Jrc3BhY2VJZDogJHdvcmtzcGFjZUlkLCBpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIGludml0ZWRUZWFtIHtcXG4gICAgICAgICAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzSW52aXRlc1RhYmxlX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3JcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuSW52aXRlVG9Xb3Jrc3BhY2VEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gQ3JlYXRlV29ya3NwYWNlKCRpbnB1dDogV29ya3NwYWNlQ3JlYXRlSW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgY3JlYXRlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5TZXR0aW5nc1NpZGViYXJfV29ya3NwYWNlXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5DcmVhdGVXb3Jrc3BhY2VEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gUHJvY2Vzc1dvcmtzcGFjZUludml0ZSgkaW5wdXQ6IFdvcmtzcGFjZUludml0ZVVzZUlucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIGludml0ZXMge1xcbiAgICAgICAgdXNlKGlucHV0OiAkaW5wdXQpXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Qcm9jZXNzV29ya3NwYWNlSW52aXRlRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIFNldERlZmF1bHRXb3Jrc3BhY2VSZWdpb24oJHdvcmtzcGFjZUlkOiBTdHJpbmchLCAkcmVnaW9uS2V5OiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgc2V0RGVmYXVsdFJlZ2lvbih3b3Jrc3BhY2VJZDogJHdvcmtzcGFjZUlkLCByZWdpb25LZXk6ICRyZWdpb25LZXkpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBkZWZhdWx0UmVnaW9uIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzUmVnaW9uc1NlbGVjdF9TZXJ2ZXJSZWdpb25JdGVtXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5TZXREZWZhdWx0V29ya3NwYWNlUmVnaW9uRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIERlbGV0ZVdvcmtzcGFjZVNzb1Byb3ZpZGVyKCR3b3Jrc3BhY2VJZDogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIGRlbGV0ZVNzb1Byb3ZpZGVyKHdvcmtzcGFjZUlkOiAkd29ya3NwYWNlSWQpXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkRlbGV0ZVdvcmtzcGFjZVNzb1Byb3ZpZGVyRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIFNldFdvcmtzcGFjZUNyZWF0aW9uU3RhdGUoJGlucHV0OiBXb3Jrc3BhY2VDcmVhdGlvblN0YXRlSW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgdXBkYXRlQ3JlYXRpb25TdGF0ZShpbnB1dDogJGlucHV0KVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5TZXRXb3Jrc3BhY2VDcmVhdGlvblN0YXRlRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIFdvcmtzcGFjZVVwZGF0ZURvbWFpblByb3RlY3Rpb25NdXRhdGlvbigkaW5wdXQ6IFdvcmtzcGFjZVVwZGF0ZUlucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIHVwZGF0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgZG9tYWluQmFzZWRNZW1iZXJzaGlwUHJvdGVjdGlvbkVuYWJsZWRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLldvcmtzcGFjZVVwZGF0ZURvbWFpblByb3RlY3Rpb25NdXRhdGlvbkRvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBXb3Jrc3BhY2VVcGRhdGVEaXNjb3ZlcmFiaWxpdHlNdXRhdGlvbigkaW5wdXQ6IFdvcmtzcGFjZVVwZGF0ZUlucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIHVwZGF0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgZGlzY292ZXJhYmlsaXR5RW5hYmxlZFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuV29ya3NwYWNlVXBkYXRlRGlzY292ZXJhYmlsaXR5TXV0YXRpb25Eb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gQXBwcm92ZVdvcmtzcGFjZUpvaW5SZXF1ZXN0KCRpbnB1dDogQXBwcm92ZVdvcmtzcGFjZUpvaW5SZXF1ZXN0SW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZUpvaW5SZXF1ZXN0TXV0YXRpb25zIHtcXG4gICAgICBhcHByb3ZlKGlucHV0OiAkaW5wdXQpXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkFwcHJvdmVXb3Jrc3BhY2VKb2luUmVxdWVzdERvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBEZW55V29ya3NwYWNlSm9pblJlcXVlc3QoJGlucHV0OiBEZW55V29ya3NwYWNlSm9pblJlcXVlc3RJbnB1dCEpIHtcXG4gICAgd29ya3NwYWNlSm9pblJlcXVlc3RNdXRhdGlvbnMge1xcbiAgICAgIGRlbnkoaW5wdXQ6ICRpbnB1dClcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuRGVueVdvcmtzcGFjZUpvaW5SZXF1ZXN0RG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIFJlcXVlc3RUb0pvaW5Xb3Jrc3BhY2UoJGlucHV0OiBXb3Jrc3BhY2VSZXF1ZXN0VG9Kb2luSW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgcmVxdWVzdFRvSm9pbihpbnB1dDogJGlucHV0KVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5SZXF1ZXN0VG9Kb2luV29ya3NwYWNlRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIERpc21pc3NEaXNjb3ZlcmFibGVXb3Jrc3BhY2UoJGlucHV0OiBXb3Jrc3BhY2VEaXNtaXNzSW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgZGlzbWlzcyhpbnB1dDogJGlucHV0KVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5EaXNtaXNzRGlzY292ZXJhYmxlV29ya3NwYWNlRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIFdvcmtzcGFjZVVwZGF0ZUF1dG9Kb2luTXV0YXRpb24oJGlucHV0OiBXb3Jrc3BhY2VVcGRhdGVJbnB1dCEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICB1cGRhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGRpc2NvdmVyYWJpbGl0eUF1dG9Kb2luRW5hYmxlZFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuV29ya3NwYWNlVXBkYXRlQXV0b0pvaW5NdXRhdGlvbkRvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBXb3Jrc3BhY2VVcGRhdGVEZWZhdWx0U2VhdFR5cGVNdXRhdGlvbigkaW5wdXQ6IFdvcmtzcGFjZVVwZGF0ZUlucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIHVwZGF0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgZGVmYXVsdFNlYXRUeXBlXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Xb3Jrc3BhY2VVcGRhdGVEZWZhdWx0U2VhdFR5cGVNdXRhdGlvbkRvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBXb3Jrc3BhY2VVcGRhdGVFeGNsdXNpdmVNdXRhdGlvbigkaW5wdXQ6IFdvcmtzcGFjZVVwZGF0ZUlucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIHVwZGF0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgaXNFeGNsdXNpdmVcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLldvcmtzcGFjZVVwZGF0ZUV4Y2x1c2l2ZU11dGF0aW9uRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFdvcmtzcGFjZSgkZmVhdHVyZU5hbWU6IFdvcmtzcGFjZUZlYXR1cmVOYW1lISwgJHdvcmtzcGFjZUlkOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZShpZDogJHdvcmtzcGFjZUlkKSB7XFxuICAgICAgaGFzQWNjZXNzVG9GZWF0dXJlKGZlYXR1cmVOYW1lOiAkZmVhdHVyZU5hbWUpXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLldvcmtzcGFjZURvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBXb3Jrc3BhY2VBY2Nlc3NDaGVjaygkc2x1ZzogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHNsdWcpIHtcXG4gICAgICBpZFxcbiAgICAgIHNsdWdcXG4gICAgfVxcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICBpZFxcbiAgICAgIGFjdGl2ZVdvcmtzcGFjZSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgc2x1Z1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuV29ya3NwYWNlQWNjZXNzQ2hlY2tEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgV29ya3NwYWNlUGFnZVF1ZXJ5KFxcbiAgICAkd29ya3NwYWNlU2x1ZzogU3RyaW5nIVxcbiAgICAkaW52aXRlc0ZpbHRlcjogUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvcnNGaWx0ZXJcXG4gICkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHdvcmtzcGFjZVNsdWcpIHtcXG4gICAgICAuLi5Xb3Jrc3BhY2VQYWdlX1dvcmtzcGFjZVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Xb3Jrc3BhY2VQYWdlUXVlcnlEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgV29ya3NwYWNlUHJvamVjdHNRdWVyeShcXG4gICAgJHdvcmtzcGFjZVNsdWc6IFN0cmluZyFcXG4gICAgJGZpbHRlcjogV29ya3NwYWNlUHJvamVjdHNGaWx0ZXJcXG4gICAgJGN1cnNvcjogU3RyaW5nXFxuICApIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICR3b3Jrc3BhY2VTbHVnKSB7XFxuICAgICAgaWRcXG4gICAgICBwcm9qZWN0cyhmaWx0ZXI6ICRmaWx0ZXIsIGN1cnNvcjogJGN1cnNvciwgbGltaXQ6IDEwKSB7XFxuICAgICAgICAuLi5Xb3Jrc3BhY2VEYXNoYm9hcmRQcm9qZWN0TGlzdF9Qcm9qZWN0Q29sbGVjdGlvblxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuV29ya3NwYWNlUHJvamVjdHNRdWVyeURvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBXb3Jrc3BhY2VGdW5jdGlvbnNRdWVyeSgkd29ya3NwYWNlU2x1ZzogU3RyaW5nISkge1xcbiAgICAuLi5BdXRvbWF0ZUZ1bmN0aW9uc1BhZ2VIZWFkZXJfUXVlcnlcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICR3b3Jrc3BhY2VTbHVnKSB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgICAgYXV0b21hdGVGdW5jdGlvbnMge1xcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICAuLi5BdXRvbWF0aW9uc0Z1bmN0aW9uc0NhcmRfQXV0b21hdGVGdW5jdGlvblxcbiAgICAgICAgICAuLi5BdXRvbWF0ZUF1dG9tYXRpb25DcmVhdGVEaWFsb2dfQXV0b21hdGVGdW5jdGlvblxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuV29ya3NwYWNlRnVuY3Rpb25zUXVlcnlEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgV29ya3NwYWNlSW52aXRlKFxcbiAgICAkd29ya3NwYWNlSWQ6IFN0cmluZ1xcbiAgICAkdG9rZW46IFN0cmluZ1xcbiAgICAkb3B0aW9uczogV29ya3NwYWNlSW52aXRlTG9va3VwT3B0aW9uc1xcbiAgKSB7XFxuICAgIHdvcmtzcGFjZUludml0ZSh3b3Jrc3BhY2VJZDogJHdvcmtzcGFjZUlkLCB0b2tlbjogJHRva2VuLCBvcHRpb25zOiAkb3B0aW9ucykge1xcbiAgICAgIC4uLldvcmtzcGFjZUludml0ZUJhbm5lcl9QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yXFxuICAgICAgLi4uV29ya3NwYWNlSW52aXRlQmxvY2tfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvclxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Xb3Jrc3BhY2VJbnZpdGVEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgVmFsaWRhdGVXb3Jrc3BhY2VTbHVnKCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHZhbGlkYXRlV29ya3NwYWNlU2x1ZyhzbHVnOiAkc2x1ZylcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlZhbGlkYXRlV29ya3NwYWNlU2x1Z0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBXb3Jrc3BhY2VTc29CeUVtYWlsKCRlbWFpbDogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2VTc29CeUVtYWlsKGVtYWlsOiAkZW1haWwpIHtcXG4gICAgICAuLi5BdXRoU3NvTG9naW5fV29ya3NwYWNlXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLldvcmtzcGFjZVNzb0J5RW1haWxEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgV29ya3NwYWNlU3NvQ2hlY2soJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgLi4uV29ya3NwYWNlU3NvU3RhdHVzX1dvcmtzcGFjZVxcbiAgICB9XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIC4uLldvcmtzcGFjZVNzb1N0YXR1c19Vc2VyXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLldvcmtzcGFjZVNzb0NoZWNrRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFdvcmtzcGFjZVdpemFyZCgkd29ya3NwYWNlSWQ6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlKGlkOiAkd29ya3NwYWNlSWQpIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLldvcmtzcGFjZVdpemFyZF9Xb3Jrc3BhY2VcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuV29ya3NwYWNlV2l6YXJkRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFdvcmtzcGFjZVdpemFyZFJlZ2lvbiB7XFxuICAgIHNlcnZlckluZm8ge1xcbiAgICAgIC4uLldvcmtzcGFjZVdpemFyZFN0ZXBSZWdpb25fU2VydmVySW5mb1xcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Xb3Jrc3BhY2VXaXphcmRSZWdpb25Eb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgRGlzY292ZXJhYmxlV29ya3NwYWNlcyB7XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgZGlzY292ZXJhYmxlV29ya3NwYWNlcyB7XFxuICAgICAgICAuLi5EaXNjb3ZlcmFibGVXb3Jrc3BhY2VfTGltaXRlZFdvcmtzcGFjZVxcbiAgICAgIH1cXG4gICAgICB3b3Jrc3BhY2VKb2luUmVxdWVzdHMge1xcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAuLi5Xb3Jrc3BhY2VKb2luUmVxdWVzdHNfTGltaXRlZFdvcmtzcGFjZUpvaW5SZXF1ZXN0XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5EaXNjb3ZlcmFibGVXb3Jrc3BhY2VzRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFdvcmtzcGFjZVBsYW4oJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgLi4uV29ya3NwYWNlc1BsYW5fV29ya3NwYWNlXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLldvcmtzcGFjZVBsYW5Eb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgYWN0aXZlV29ya3NwYWNlKCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIC4uLkFjdGl2ZVdvcmtzcGFjZV9Xb3Jrc3BhY2VcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQWN0aXZlV29ya3NwYWNlRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFdvcmtzcGFjZUxhc3RBZG1pbkNoZWNrKCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIHRlYW1CeVJvbGUge1xcbiAgICAgICAgYWRtaW5zIHtcXG4gICAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuV29ya3NwYWNlTGFzdEFkbWluQ2hlY2tEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgV29ya3NwYWNlTGltaXRzKCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIC4uLldvcmtzcGFjZVBsYW5MaW1pdHNfV29ya3NwYWNlXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLldvcmtzcGFjZUxpbWl0c0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBXb3Jrc3BhY2VVc2FnZSgkc2x1ZzogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHNsdWcpIHtcXG4gICAgICAuLi5Xb3Jrc3BhY2VVc2FnZV9Xb3Jrc3BhY2VcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuV29ya3NwYWNlVXNhZ2VEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyUHJvamVjdCgkcHJvamVjdElkOiBTdHJpbmchLCAkd29ya3NwYWNlSWQ6IFN0cmluZykge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgLi4uV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1Byb2plY3RcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyUHJvamVjdERvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBXb3Jrc3BhY2VNb3ZlUHJvamVjdE1hbmFnZXJXb3Jrc3BhY2UoXFxuICAgICR3b3Jrc3BhY2VTbHVnOiBTdHJpbmchXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZ1xcbiAgKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkd29ya3NwYWNlU2x1Zykge1xcbiAgICAgIC4uLldvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlcl9Xb3Jrc3BhY2VcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyV29ya3NwYWNlRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFdvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlclVzZXIoXFxuICAgICRjdXJzb3I6IFN0cmluZ1xcbiAgICAkZmlsdGVyOiBVc2VyUHJvamVjdHNGaWx0ZXJcXG4gICAgJHByb2plY3RJZDogU3RyaW5nXFxuICAgICRzb3J0Qnk6IFtTdHJpbmchXVxcbiAgICAkd29ya3NwYWNlSWQ6IFN0cmluZ1xcbiAgKSB7XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIC4uLldvcmtzcGFjZU1vdmVQcm9qZWN0U2VsZWN0V29ya3NwYWNlX1VzZXJcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyVXNlckRvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBVc2VDYW5DcmVhdGVXb3Jrc3BhY2Uge1xcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICAuLi5Vc2VDYW5DcmVhdGVXb3Jrc3BhY2VfVXNlclxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Vc2VDYW5DcmVhdGVXb3Jrc3BhY2VEb2N1bWVudCxcbiAgICBcIlxcbiAgc3Vic2NyaXB0aW9uIG9uV29ya3NwYWNlVXBkYXRlZChcXG4gICAgJHdvcmtzcGFjZUlkOiBTdHJpbmdcXG4gICAgJHdvcmtzcGFjZVNsdWc6IFN0cmluZ1xcbiAgICAkaW52aXRlc0ZpbHRlcjogUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvcnNGaWx0ZXJcXG4gICkge1xcbiAgICB3b3Jrc3BhY2VVcGRhdGVkKHdvcmtzcGFjZUlkOiAkd29ya3NwYWNlSWQsIHdvcmtzcGFjZVNsdWc6ICR3b3Jrc3BhY2VTbHVnKSB7XFxuICAgICAgaWRcXG4gICAgICB3b3Jrc3BhY2Uge1xcbiAgICAgICAgaWRcXG4gICAgICAgIC4uLldvcmtzcGFjZURhc2hib2FyZF9Xb3Jrc3BhY2VcXG4gICAgICAgIC4uLldvcmtzcGFjZURhc2hib2FyZFByb2plY3RMaXN0X1dvcmtzcGFjZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuT25Xb3Jrc3BhY2VVcGRhdGVkRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IExlZ2FjeUJyYW5jaFJlZGlyZWN0TWV0YWRhdGEoJHN0cmVhbUlkOiBTdHJpbmchLCAkYnJhbmNoTmFtZTogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkc3RyZWFtSWQpIHtcXG4gICAgICBtb2RlbEJ5TmFtZShuYW1lOiAkYnJhbmNoTmFtZSkge1xcbiAgICAgICAgaWRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkxlZ2FjeUJyYW5jaFJlZGlyZWN0TWV0YWRhdGFEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgTGVnYWN5Vmlld2VyQ29tbWl0UmVkaXJlY3RNZXRhZGF0YSgkc3RyZWFtSWQ6IFN0cmluZyEsICRjb21taXRJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkc3RyZWFtSWQpIHtcXG4gICAgICB2ZXJzaW9uKGlkOiAkY29tbWl0SWQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBtb2RlbCB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5MZWdhY3lWaWV3ZXJDb21taXRSZWRpcmVjdE1ldGFkYXRhRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IExlZ2FjeVZpZXdlclN0cmVhbVJlZGlyZWN0TWV0YWRhdGEoJHN0cmVhbUlkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRzdHJlYW1JZCkge1xcbiAgICAgIGlkXFxuICAgICAgdmVyc2lvbnMobGltaXQ6IDEpIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgbW9kZWwge1xcbiAgICAgICAgICAgIGlkXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkxlZ2FjeVZpZXdlclN0cmVhbVJlZGlyZWN0TWV0YWRhdGFEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgQXV0b0FjY2VwdGFibGVXb3Jrc3BhY2VJbnZpdGUoXFxuICAgICR0b2tlbjogU3RyaW5nIVxcbiAgICAkd29ya3NwYWNlSWQ6IFN0cmluZyFcXG4gICAgJG9wdGlvbnM6IFdvcmtzcGFjZUludml0ZUxvb2t1cE9wdGlvbnNcXG4gICkge1xcbiAgICB3b3Jrc3BhY2VJbnZpdGUodG9rZW46ICR0b2tlbiwgd29ya3NwYWNlSWQ6ICR3b3Jrc3BhY2VJZCwgb3B0aW9uczogJG9wdGlvbnMpIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLlVzZVdvcmtzcGFjZUludml0ZU1hbmFnZXJfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvclxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5BdXRvQWNjZXB0YWJsZVdvcmtzcGFjZUludml0ZURvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBDYW5WaWV3UHJvamVjdFRva2VucygkcHJvamVjdElkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICAgIGNhblJlYWRFbWJlZFRva2VucyB7XFxuICAgICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLkNhblZpZXdQcm9qZWN0VG9rZW5zRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IENhblZpZXdQcm9qZWN0U2V0dGluZ3MoJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgICBjYW5SZWFkU2V0dGluZ3Mge1xcbiAgICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5DYW5WaWV3UHJvamVjdFNldHRpbmdzRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IENhblZpZXdQcm9qZWN0V2ViaG9va3MoJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgICBjYW5SZWFkV2ViaG9va3Mge1xcbiAgICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5DYW5WaWV3UHJvamVjdFdlYmhvb2tzRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFJlc29sdmVDb21tZW50TGluaygkY29tbWVudElkOiBTdHJpbmchLCAkcHJvamVjdElkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBjb21tZW50KGlkOiAkY29tbWVudElkKSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgLi4uTGlua2FibGVDb21tZW50XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5SZXNvbHZlQ29tbWVudExpbmtEb2N1bWVudCxcbiAgICBcIlxcbiAgZnJhZ21lbnQgQXV0b21hdGVGdW5jdGlvblBhZ2VfQXV0b21hdGVGdW5jdGlvbiBvbiBBdXRvbWF0ZUZ1bmN0aW9uIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBkZXNjcmlwdGlvblxcbiAgICBsb2dvXFxuICAgIHN1cHBvcnRlZFNvdXJjZUFwcHNcXG4gICAgdGFnc1xcbiAgICAuLi5BdXRvbWF0ZUZ1bmN0aW9uUGFnZUhlYWRlcl9GdW5jdGlvblxcbiAgICAuLi5BdXRvbWF0ZUZ1bmN0aW9uUGFnZUluZm9fQXV0b21hdGVGdW5jdGlvblxcbiAgICAuLi5BdXRvbWF0ZUF1dG9tYXRpb25DcmVhdGVEaWFsb2dfQXV0b21hdGVGdW5jdGlvblxcbiAgICBjcmVhdG9yIHtcXG4gICAgICBpZFxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5BdXRvbWF0ZUZ1bmN0aW9uUGFnZV9BdXRvbWF0ZUZ1bmN0aW9uRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIHF1ZXJ5IEF1dG9tYXRlRnVuY3Rpb25QYWdlKCRmdW5jdGlvbklkOiBJRCEpIHtcXG4gICAgYXV0b21hdGVGdW5jdGlvbihpZDogJGZ1bmN0aW9uSWQpIHtcXG4gICAgICAuLi5BdXRvbWF0ZUZ1bmN0aW9uUGFnZV9BdXRvbWF0ZUZ1bmN0aW9uXFxuICAgIH1cXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgd29ya3NwYWNlcyB7XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIC4uLkF1dG9tYXRlRnVuY3Rpb25DcmVhdGVEaWFsb2dfV29ya3NwYWNlXFxuICAgICAgICAgIC4uLkF1dG9tYXRlRnVuY3Rpb25FZGl0RGlhbG9nX1dvcmtzcGFjZVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQXV0b21hdGVGdW5jdGlvblBhZ2VEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgQXV0b21hdGVGdW5jdGlvblBhZ2VXb3Jrc3BhY2UoJHdvcmtzcGFjZUlkOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZShpZDogJHdvcmtzcGFjZUlkKSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5BdXRvbWF0ZUZ1bmN0aW9uUGFnZUhlYWRlcl9Xb3Jrc3BhY2VcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuQXV0b21hdGVGdW5jdGlvblBhZ2VXb3Jrc3BhY2VEb2N1bWVudCxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VQcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBjcmVhdGVkQXRcXG4gICAgbW9kZWxDb3VudDogbW9kZWxzKGxpbWl0OiAwKSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICAgIGNvbW1lbnRUaHJlYWRDb3VudDogY29tbWVudFRocmVhZHMobGltaXQ6IDApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICAgIGNhbkxpc3REYXNoYm9hcmRzIHtcXG4gICAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuUmVhZFNldHRpbmdzIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuVXBkYXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuTW92ZVRvV29ya3NwYWNlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uUHJvamVjdFBhZ2VUZWFtSW50ZXJuYWxzX1Byb2plY3RcXG4gICAgLi4uUHJvamVjdFBhZ2VQcm9qZWN0SGVhZGVyXFxuICAgIC4uLlByb2plY3RQYWdlVGVhbURpYWxvZ1xcbiAgICAuLi5Xb3Jrc3BhY2VNb3ZlUHJvamVjdE1hbmFnZXJfUHJvamVjdEJhc2VcXG4gICAgLi4uUHJvamVjdFBhZ2VTZXR0aW5nc1RhYl9Qcm9qZWN0XFxuICAgIC4uLldvcmtzcGFjZU1vdmVQcm9qZWN0X1Byb2plY3RcXG4gICAgaGFzQWNjZXNzVG9EYXNoYm9hcmRzOiBoYXNBY2Nlc3NUb0ZlYXR1cmUoZmVhdHVyZU5hbWU6IGRhc2hib2FyZHMpXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Qcm9qZWN0UGFnZVByb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VBdXRvbWF0aW9uUGFnZV9BdXRvbWF0aW9uIG9uIEF1dG9tYXRpb24ge1xcbiAgICBpZFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuVXBkYXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uUHJvamVjdFBhZ2VBdXRvbWF0aW9uSGVhZGVyX0F1dG9tYXRpb25cXG4gICAgLi4uUHJvamVjdFBhZ2VBdXRvbWF0aW9uRnVuY3Rpb25zX0F1dG9tYXRpb25cXG4gICAgLi4uUHJvamVjdFBhZ2VBdXRvbWF0aW9uUnVuc19BdXRvbWF0aW9uXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Qcm9qZWN0UGFnZUF1dG9tYXRpb25QYWdlX0F1dG9tYXRpb25GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VBdXRvbWF0aW9uUGFnZV9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICB3b3Jrc3BhY2VJZFxcbiAgICAuLi5Qcm9qZWN0UGFnZUF1dG9tYXRpb25IZWFkZXJfUHJvamVjdFxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdFBhZ2VBdXRvbWF0aW9uUGFnZV9Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlU2V0dGluZ3NUYWJfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuUmVhZFdlYmhvb2tzIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuUmVhZEVtYmVkVG9rZW5zIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuUmVhZEFjY0ludGVncmF0aW9uU2V0dGluZ3Mge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuUHJvamVjdFBhZ2VTZXR0aW5nc1RhYl9Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzU2VydmVyUHJvamVjdHNfUHJvamVjdENvbGxlY3Rpb24gb24gUHJvamVjdENvbGxlY3Rpb24ge1xcbiAgICB0b3RhbENvdW50XFxuICAgIGl0ZW1zIHtcXG4gICAgICAuLi5TZXR0aW5nc1NoYXJlZFByb2plY3RzX1Byb2plY3RcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2V0dGluZ3NTZXJ2ZXJQcm9qZWN0c19Qcm9qZWN0Q29sbGVjdGlvbkZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBxdWVyeSBTZXR0aW5nc1NlcnZlclJlZ2lvbnMge1xcbiAgICBzZXJ2ZXJJbmZvIHtcXG4gICAgICBtdWx0aVJlZ2lvbiB7XFxuICAgICAgICByZWdpb25zIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uU2V0dGluZ3NTZXJ2ZXJSZWdpb25zVGFibGVfU2VydmVyUmVnaW9uSXRlbVxcbiAgICAgICAgfVxcbiAgICAgICAgYXZhaWxhYmxlS2V5c1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2V0dGluZ3NTZXJ2ZXJSZWdpb25zRG9jdW1lbnQsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc0dlbmVyYWxfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc0dlbmVyYWxFZGl0QXZhdGFyX1dvcmtzcGFjZVxcbiAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZUdlbmVyYWxEZWxldGVEaWFsb2dfV29ya3NwYWNlXFxuICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc0dlbmVyYWxFZGl0U2x1Z0RpYWxvZ19Xb3Jrc3BhY2VcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBzbHVnXFxuICAgIGRlc2NyaXB0aW9uXFxuICAgIGxvZ29cXG4gICAgcm9sZVxcbiAgICBwbGFuIHtcXG4gICAgICBzdGF0dXNcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gICAgZW1iZWRPcHRpb25zIHtcXG4gICAgICBoaWRlU3BlY2tsZUJyYW5kaW5nXFxuICAgIH1cXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkVkaXRFbWJlZE9wdGlvbnMge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VzR2VuZXJhbF9Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc0NvdW50c19Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgcm9sZVxcbiAgICBpbnZpdGVkVGVhbSB7XFxuICAgICAgaWRcXG4gICAgfVxcbiAgICB0ZWFtQnlSb2xlIHtcXG4gICAgICBhZG1pbnMge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgIH1cXG4gICAgICBtZW1iZXJzIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICB9XFxuICAgICAgZ3Vlc3RzIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgYWRtaW5Xb3Jrc3BhY2VzSm9pblJlcXVlc3RzKGZpbHRlcjogJGZpbHRlcikge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc0NvdW50c19Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzUHJvamVjdHNfUHJvamVjdENvbGxlY3Rpb24gb24gUHJvamVjdENvbGxlY3Rpb24ge1xcbiAgICB0b3RhbENvdW50XFxuICAgIGl0ZW1zIHtcXG4gICAgICAuLi5TZXR0aW5nc1NoYXJlZFByb2plY3RzX1Byb2plY3RcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlb2YgdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VzUHJvamVjdHNfUHJvamVjdENvbGxlY3Rpb25GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzUHJvamVjdHNfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgc2x1Z1xcbiAgICBwbGFuIHtcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gICAgcm9sZVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQ3JlYXRlUHJvamVjdCB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5TZXR0aW5nc1dvcmtzcGFjZXNQcm9qZWN0c19Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzUmVnaW9uc19Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgcm9sZVxcbiAgICBkZWZhdWx0UmVnaW9uIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc1JlZ2lvbnNTZWxlY3RfU2VydmVyUmVnaW9uSXRlbVxcbiAgICB9XFxuICAgIGhhc0FjY2Vzc1RvTXVsdGlSZWdpb246IGhhc0FjY2Vzc1RvRmVhdHVyZShcXG4gICAgICBmZWF0dXJlTmFtZTogd29ya3NwYWNlRGF0YVJlZ2lvblNwZWNpZmljaXR5XFxuICAgIClcXG4gICAgaGFzUHJvamVjdHM6IHByb2plY3RzKGxpbWl0OiAwKSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5TZXR0aW5nc1dvcmtzcGFjZXNSZWdpb25zX1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNSZWdpb25zX1NlcnZlckluZm8gb24gU2VydmVySW5mbyB7XFxuICAgIG11bHRpUmVnaW9uIHtcXG4gICAgICByZWdpb25zIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNSZWdpb25zU2VsZWN0X1NlcnZlclJlZ2lvbkl0ZW1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlNldHRpbmdzV29ya3NwYWNlc1JlZ2lvbnNfU2VydmVySW5mb0ZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eV9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlEZWZhdWx0U2VhdF9Xb3Jrc3BhY2VcXG4gICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlEb21haW5NYW5hZ2VtZW50X1dvcmtzcGFjZVxcbiAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eURpc2NvdmVyYWJpbGl0eV9Xb3Jrc3BhY2VcXG4gICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlTc29XcmFwcGVyX1dvcmtzcGFjZVxcbiAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eURvbWFpblByb3RlY3Rpb25fV29ya3NwYWNlXFxuICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5V29ya3NwYWNlQ3JlYXRpb25fV29ya3NwYWNlXFxuICAgIGlkXFxuICAgIHNsdWdcXG4gIH1cXG5cIjogdHlwZW9mIHR5cGVzLlNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5X1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VEYXNoYm9hcmRzX0Rhc2hib2FyZCBvbiBEYXNoYm9hcmQge1xcbiAgICAuLi5EYXNoYm9hcmRzRWRpdERpYWxvZ19EYXNoYm9hcmRcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBjcmVhdGVkQnkge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICAgIGF2YXRhclxcbiAgICB9XFxuICAgIGNyZWF0ZWRBdFxcbiAgICB1cGRhdGVkQXRcXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgICBzbHVnXFxuICAgICAgbG9nb1xcbiAgICB9XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5FZGl0IHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuUmVhZCB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Xb3Jrc3BhY2VEYXNoYm9hcmRzX0Rhc2hib2FyZEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VQYWdlX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICAuLi5Xb3Jrc3BhY2VEYXNoYm9hcmRfV29ya3NwYWNlXFxuICAgIC4uLldvcmtzcGFjZVNpZGViYXJfV29ya3NwYWNlXFxuICB9XFxuXCI6IHR5cGVvZiB0eXBlcy5Xb3Jrc3BhY2VQYWdlX1dvcmtzcGFjZUZyYWdtZW50RG9jLFxufTtcbmNvbnN0IGRvY3VtZW50czogRG9jdW1lbnRzID0ge1xuICAgIFwiXFxuICBmcmFnbWVudCBBdXRoTG9naW5XaXRoRW1haWxCbG9ja19QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yIG9uIFBlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3Ige1xcbiAgICBpZFxcbiAgICBlbWFpbFxcbiAgICB1c2VyIHtcXG4gICAgICBpZFxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkF1dGhMb2dpbldpdGhFbWFpbEJsb2NrX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3JGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgcXVlcnkgQXV0aFJlZ2lzdGVyUGFuZWxXb3Jrc3BhY2VJbnZpdGUoJHRva2VuOiBTdHJpbmcpIHtcXG4gICAgd29ya3NwYWNlSW52aXRlKHRva2VuOiAkdG9rZW4pIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLkF1dGhXb3Jrc3BhY2VJbnZpdGVIZWFkZXJfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvclxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkF1dGhSZWdpc3RlclBhbmVsV29ya3NwYWNlSW52aXRlRG9jdW1lbnQsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNlcnZlclRlcm1zT2ZTZXJ2aWNlUHJpdmFjeVBvbGljeUZyYWdtZW50IG9uIFNlcnZlckluZm8ge1xcbiAgICB0ZXJtc09mU2VydmljZVxcbiAgfVxcblwiOiB0eXBlcy5TZXJ2ZXJUZXJtc09mU2VydmljZVByaXZhY3lQb2xpY3lGcmFnbWVudEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBBdXRoV29ya3NwYWNlSW52aXRlSGVhZGVyX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3Igb24gUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvciB7XFxuICAgIGlkXFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gICAgZW1haWxcXG4gICAgdXNlciB7XFxuICAgICAgaWRcXG4gICAgICAuLi5MaW1pdGVkVXNlckF2YXRhclxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkF1dGhXb3Jrc3BhY2VJbnZpdGVIZWFkZXJfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBBdXRoU3NvTG9naW5fV29ya3NwYWNlIG9uIExpbWl0ZWRXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBzbHVnXFxuICAgIG5hbWVcXG4gICAgbG9nb1xcbiAgfVxcblwiOiB0eXBlcy5BdXRoU3NvTG9naW5fV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IEF1dGhTdGF0ZWdpZXNTZXJ2ZXJJbmZvRnJhZ21lbnQgb24gU2VydmVySW5mbyB7XFxuICAgIGF1dGhTdHJhdGVnaWVzIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgICB1cmxcXG4gICAgfVxcbiAgICAuLi5BdXRoVGhpcmRQYXJ0eUxvZ2luQnV0dG9uT0lEQ19TZXJ2ZXJJbmZvXFxuICB9XFxuXCI6IHR5cGVzLkF1dGhTdGF0ZWdpZXNTZXJ2ZXJJbmZvRnJhZ21lbnRGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgQXV0aFRoaXJkUGFydHlMb2dpbkJ1dHRvbk9JRENfU2VydmVySW5mbyBvbiBTZXJ2ZXJJbmZvIHtcXG4gICAgYXV0aFN0cmF0ZWdpZXMge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkF1dGhUaGlyZFBhcnR5TG9naW5CdXR0b25PaWRjX1NlcnZlckluZm9GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgQXV0b21hdGVBdXRvbWF0aW9uQ3JlYXRlRGlhbG9nX0F1dG9tYXRlRnVuY3Rpb24gb24gQXV0b21hdGVGdW5jdGlvbiB7XFxuICAgIGlkXFxuICAgIC4uLkF1dG9tYXRpb25zRnVuY3Rpb25zQ2FyZF9BdXRvbWF0ZUZ1bmN0aW9uXFxuICAgIC4uLkF1dG9tYXRlQXV0b21hdGlvbkNyZWF0ZURpYWxvZ0Z1bmN0aW9uUGFyYW1ldGVyc1N0ZXBfQXV0b21hdGVGdW5jdGlvblxcbiAgfVxcblwiOiB0eXBlcy5BdXRvbWF0ZUF1dG9tYXRpb25DcmVhdGVEaWFsb2dfQXV0b21hdGVGdW5jdGlvbkZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBBdXRvbWF0ZUF1dG9tYXRpb25DcmVhdGVEaWFsb2dGdW5jdGlvblBhcmFtZXRlcnNTdGVwX0F1dG9tYXRlRnVuY3Rpb24gb24gQXV0b21hdGVGdW5jdGlvbiB7XFxuICAgIGlkXFxuICAgIHJlbGVhc2VzKGxpbWl0OiAxKSB7XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGlucHV0U2NoZW1hXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkF1dG9tYXRlQXV0b21hdGlvbkNyZWF0ZURpYWxvZ0Z1bmN0aW9uUGFyYW1ldGVyc1N0ZXBfQXV0b21hdGVGdW5jdGlvbkZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBxdWVyeSBBdXRvbWF0aW9uQ3JlYXRlRGlhbG9nRnVuY3Rpb25zU2VhcmNoKFxcbiAgICAkd29ya3NwYWNlSWQ6IFN0cmluZyFcXG4gICAgJGZpbHRlcjogQXV0b21hdGVGdW5jdGlvbnNGaWx0ZXJcXG4gICAgJGN1cnNvcjogU3RyaW5nID0gbnVsbFxcbiAgKSB7XFxuICAgIHdvcmtzcGFjZShpZDogJHdvcmtzcGFjZUlkKSB7XFxuICAgICAgYXV0b21hdGVGdW5jdGlvbnMobGltaXQ6IDIwLCBjdXJzb3I6ICRjdXJzb3IsIGZpbHRlcjogJGZpbHRlcikge1xcbiAgICAgICAgY3Vyc29yXFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLkF1dG9tYXRlQXV0b21hdGlvbkNyZWF0ZURpYWxvZ19BdXRvbWF0ZUZ1bmN0aW9uXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkF1dG9tYXRpb25DcmVhdGVEaWFsb2dGdW5jdGlvbnNTZWFyY2hEb2N1bWVudCxcbiAgICBcIlxcbiAgZnJhZ21lbnQgQXV0b21hdGlvbnNGdW5jdGlvbnNDYXJkX0F1dG9tYXRlRnVuY3Rpb24gb24gQXV0b21hdGVGdW5jdGlvbiB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgaXNGZWF0dXJlZFxcbiAgICBkZXNjcmlwdGlvblxcbiAgICBsb2dvXFxuICAgIHJlcG8ge1xcbiAgICAgIGlkXFxuICAgICAgdXJsXFxuICAgICAgb3duZXJcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuQXV0b21hdGlvbnNGdW5jdGlvbnNDYXJkX0F1dG9tYXRlRnVuY3Rpb25GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgQXV0b21hdGVGdW5jdGlvbkNyZWF0ZURpYWxvZ19Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBzbHVnXFxuICB9XFxuXCI6IHR5cGVzLkF1dG9tYXRlRnVuY3Rpb25DcmVhdGVEaWFsb2dfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IEF1dG9tYXRlRnVuY3Rpb25FZGl0RGlhbG9nX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICB9XFxuXCI6IHR5cGVzLkF1dG9tYXRlRnVuY3Rpb25FZGl0RGlhbG9nX1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBBdXRvbWF0ZUZ1bmN0aW9uQ3JlYXRlRGlhbG9nRG9uZVN0ZXBfQXV0b21hdGVGdW5jdGlvbiBvbiBBdXRvbWF0ZUZ1bmN0aW9uIHtcXG4gICAgaWRcXG4gICAgcmVwbyB7XFxuICAgICAgaWRcXG4gICAgICB1cmxcXG4gICAgICBvd25lclxcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgICAuLi5BdXRvbWF0aW9uc0Z1bmN0aW9uc0NhcmRfQXV0b21hdGVGdW5jdGlvblxcbiAgfVxcblwiOiB0eXBlcy5BdXRvbWF0ZUZ1bmN0aW9uQ3JlYXRlRGlhbG9nRG9uZVN0ZXBfQXV0b21hdGVGdW5jdGlvbkZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBBdXRvbWF0ZUZ1bmN0aW9uQ3JlYXRlRGlhbG9nVGVtcGxhdGVTdGVwX0F1dG9tYXRlRnVuY3Rpb25UZW1wbGF0ZSBvbiBBdXRvbWF0ZUZ1bmN0aW9uVGVtcGxhdGUge1xcbiAgICBpZFxcbiAgICB0aXRsZVxcbiAgICBsb2dvXFxuICAgIHVybFxcbiAgfVxcblwiOiB0eXBlcy5BdXRvbWF0ZUZ1bmN0aW9uQ3JlYXRlRGlhbG9nVGVtcGxhdGVTdGVwX0F1dG9tYXRlRnVuY3Rpb25UZW1wbGF0ZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBBdXRvbWF0ZUZ1bmN0aW9uUGFnZUhlYWRlcl9GdW5jdGlvbiBvbiBBdXRvbWF0ZUZ1bmN0aW9uIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBsb2dvXFxuICAgIHJlcG8ge1xcbiAgICAgIGlkXFxuICAgICAgdXJsXFxuICAgICAgb3duZXJcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gICAgcmVsZWFzZXMobGltaXQ6IDEpIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgd29ya3NwYWNlSWRzXFxuICB9XFxuXFxuICBmcmFnbWVudCBBdXRvbWF0ZUZ1bmN0aW9uUGFnZUhlYWRlcl9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBzbHVnXFxuICB9XFxuXCI6IHR5cGVzLkF1dG9tYXRlRnVuY3Rpb25QYWdlSGVhZGVyX0Z1bmN0aW9uRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IEF1dG9tYXRlRnVuY3Rpb25QYWdlSW5mb19BdXRvbWF0ZUZ1bmN0aW9uIG9uIEF1dG9tYXRlRnVuY3Rpb24ge1xcbiAgICBpZFxcbiAgICByZXBvIHtcXG4gICAgICBpZFxcbiAgICAgIHVybFxcbiAgICAgIG93bmVyXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIGRlc2NyaXB0aW9uXFxuICAgIHJlbGVhc2VzKGxpbWl0OiAxKSB7XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGlucHV0U2NoZW1hXFxuICAgICAgICBjcmVhdGVkQXRcXG4gICAgICAgIGNvbW1pdElkXFxuICAgICAgICAuLi5BdXRvbWF0ZUZ1bmN0aW9uUGFnZVBhcmFtZXRlcnNEaWFsb2dfQXV0b21hdGVGdW5jdGlvblJlbGVhc2VcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuQXV0b21hdGVGdW5jdGlvblBhZ2VJbmZvX0F1dG9tYXRlRnVuY3Rpb25GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgQXV0b21hdGVGdW5jdGlvblBhZ2VQYXJhbWV0ZXJzRGlhbG9nX0F1dG9tYXRlRnVuY3Rpb25SZWxlYXNlIG9uIEF1dG9tYXRlRnVuY3Rpb25SZWxlYXNlIHtcXG4gICAgaWRcXG4gICAgaW5wdXRTY2hlbWFcXG4gIH1cXG5cIjogdHlwZXMuQXV0b21hdGVGdW5jdGlvblBhZ2VQYXJhbWV0ZXJzRGlhbG9nX0F1dG9tYXRlRnVuY3Rpb25SZWxlYXNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IEF1dG9tYXRlRnVuY3Rpb25zUGFnZUhlYWRlcl9RdWVyeSBvbiBRdWVyeSB7XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgcm9sZVxcbiAgICAgIGF1dG9tYXRlSW5mbyB7XFxuICAgICAgICBoYXNBdXRvbWF0ZUdpdGh1YkFwcFxcbiAgICAgICAgYXZhaWxhYmxlR2l0aHViT3Jnc1xcbiAgICAgIH1cXG4gICAgfVxcbiAgICBzZXJ2ZXJJbmZvIHtcXG4gICAgICBhdXRvbWF0ZSB7XFxuICAgICAgICBhdmFpbGFibGVGdW5jdGlvblRlbXBsYXRlcyB7XFxuICAgICAgICAgIC4uLkF1dG9tYXRlRnVuY3Rpb25DcmVhdGVEaWFsb2dUZW1wbGF0ZVN0ZXBfQXV0b21hdGVGdW5jdGlvblRlbXBsYXRlXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkF1dG9tYXRlRnVuY3Rpb25zUGFnZUhlYWRlcl9RdWVyeUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBBdXRvbWF0ZVJ1bnNUcmlnZ2VyU3RhdHVzX1RyaWdnZXJlZEF1dG9tYXRpb25zU3RhdHVzIG9uIFRyaWdnZXJlZEF1dG9tYXRpb25zU3RhdHVzIHtcXG4gICAgaWRcXG4gICAgLi4uVHJpZ2dlcmVkQXV0b21hdGlvbnNTdGF0dXNTdW1tYXJ5XFxuICAgIC4uLkF1dG9tYXRlUnVuc1RyaWdnZXJTdGF0dXNEaWFsb2dfVHJpZ2dlcmVkQXV0b21hdGlvbnNTdGF0dXNcXG4gIH1cXG5cIjogdHlwZXMuQXV0b21hdGVSdW5zVHJpZ2dlclN0YXR1c19UcmlnZ2VyZWRBdXRvbWF0aW9uc1N0YXR1c0ZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBBdXRvbWF0ZVJ1bnNUcmlnZ2VyU3RhdHVzRGlhbG9nX1RyaWdnZXJlZEF1dG9tYXRpb25zU3RhdHVzIG9uIFRyaWdnZXJlZEF1dG9tYXRpb25zU3RhdHVzIHtcXG4gICAgaWRcXG4gICAgYXV0b21hdGlvblJ1bnMge1xcbiAgICAgIGlkXFxuICAgICAgLi4uQXV0b21hdGVSdW5zVHJpZ2dlclN0YXR1c0RpYWxvZ1J1bnNSb3dzX0F1dG9tYXRlUnVuXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuQXV0b21hdGVSdW5zVHJpZ2dlclN0YXR1c0RpYWxvZ19UcmlnZ2VyZWRBdXRvbWF0aW9uc1N0YXR1c0ZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBBdXRvbWF0ZVJ1bnNUcmlnZ2VyU3RhdHVzRGlhbG9nRnVuY3Rpb25SdW5fQXV0b21hdGVGdW5jdGlvblJ1biBvbiBBdXRvbWF0ZUZ1bmN0aW9uUnVuIHtcXG4gICAgaWRcXG4gICAgcmVzdWx0c1xcbiAgICBzdGF0dXNcXG4gICAgc3RhdHVzTWVzc2FnZVxcbiAgICBjb250ZXh0Vmlld1xcbiAgICBmdW5jdGlvbiB7XFxuICAgICAgaWRcXG4gICAgICBsb2dvXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIGNyZWF0ZWRBdFxcbiAgICB1cGRhdGVkQXRcXG4gIH1cXG5cIjogdHlwZXMuQXV0b21hdGVSdW5zVHJpZ2dlclN0YXR1c0RpYWxvZ0Z1bmN0aW9uUnVuX0F1dG9tYXRlRnVuY3Rpb25SdW5GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgQXV0b21hdGVSdW5zVHJpZ2dlclN0YXR1c0RpYWxvZ1J1bnNSb3dzX0F1dG9tYXRlUnVuIG9uIEF1dG9tYXRlUnVuIHtcXG4gICAgaWRcXG4gICAgZnVuY3Rpb25SdW5zIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLkF1dG9tYXRlUnVuc1RyaWdnZXJTdGF0dXNEaWFsb2dGdW5jdGlvblJ1bl9BdXRvbWF0ZUZ1bmN0aW9uUnVuXFxuICAgIH1cXG4gICAgLi4uQXV0b21hdGlvbnNTdGF0dXNPcmRlcmVkUnVuc19BdXRvbWF0aW9uUnVuXFxuICB9XFxuXCI6IHR5cGVzLkF1dG9tYXRlUnVuc1RyaWdnZXJTdGF0dXNEaWFsb2dSdW5zUm93c19BdXRvbWF0ZVJ1bkZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBBdXRvbWF0ZVZpZXdlclBhbmVsX0F1dG9tYXRlUnVuIG9uIEF1dG9tYXRlUnVuIHtcXG4gICAgaWRcXG4gICAgZnVuY3Rpb25SdW5zIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLkF1dG9tYXRlVmlld2VyUGFuZWxGdW5jdGlvblJ1blJvd19BdXRvbWF0ZUZ1bmN0aW9uUnVuXFxuICAgIH1cXG4gICAgLi4uQXV0b21hdGlvbnNTdGF0dXNPcmRlcmVkUnVuc19BdXRvbWF0aW9uUnVuXFxuICB9XFxuXCI6IHR5cGVzLkF1dG9tYXRlVmlld2VyUGFuZWxfQXV0b21hdGVSdW5GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgQXV0b21hdGVWaWV3ZXJQYW5lbEZ1bmN0aW9uUnVuUm93X0F1dG9tYXRlRnVuY3Rpb25SdW4gb24gQXV0b21hdGVGdW5jdGlvblJ1biB7XFxuICAgIGlkXFxuICAgIHJlc3VsdHNcXG4gICAgc3RhdHVzXFxuICAgIHN0YXR1c01lc3NhZ2VcXG4gICAgY29udGV4dFZpZXdcXG4gICAgZnVuY3Rpb24ge1xcbiAgICAgIGlkXFxuICAgICAgbG9nb1xcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgICBjcmVhdGVkQXRcXG4gICAgdXBkYXRlZEF0XFxuICB9XFxuXCI6IHR5cGVzLkF1dG9tYXRlVmlld2VyUGFuZWxGdW5jdGlvblJ1blJvd19BdXRvbWF0ZUZ1bmN0aW9uUnVuRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IEJpbGxpbmdBbGVydF9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgcm9sZVxcbiAgICBzbHVnXFxuICAgIHBsYW4ge1xcbiAgICAgIG5hbWVcXG4gICAgICBzdGF0dXNcXG4gICAgICBjcmVhdGVkQXRcXG4gICAgfVxcbiAgICBzdWJzY3JpcHRpb24ge1xcbiAgICAgIGJpbGxpbmdJbnRlcnZhbFxcbiAgICAgIGN1cnJlbnRCaWxsaW5nQ3ljbGVFbmRcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5CaWxsaW5nQWxlcnRfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IENvbW1vbk1vZGVsU2VsZWN0b3JNb2RlbCBvbiBNb2RlbCB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gIH1cXG5cIjogdHlwZXMuQ29tbW9uTW9kZWxTZWxlY3Rvck1vZGVsRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIHF1ZXJ5IERhc2hib2FyZFNpZGViYXIge1xcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICBpZFxcbiAgICAgIGFjdGl2ZVdvcmtzcGFjZSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgcm9sZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5EYXNoYm9hcmRTaWRlYmFyRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFNpZGViYXJQZXJtaXNzaW9ucygkc2x1ZzogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHNsdWcpIHtcXG4gICAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgICBjYW5MaXN0RGFzaGJvYXJkcyB7XFxuICAgICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuU2lkZWJhclBlcm1pc3Npb25zRG9jdW1lbnQsXG4gICAgXCJcXG4gIGZyYWdtZW50IERhc2hib2FyZHNDYXJkX0Rhc2hib2FyZCBvbiBEYXNoYm9hcmQge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGNyZWF0ZWRBdFxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgIH1cXG4gICAgY3JlYXRlZEJ5IHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgICBhdmF0YXJcXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuRGVsZXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuRGFzaGJvYXJkc0NhcmRfRGFzaGJvYXJkRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IERhc2hib2FyZHNFZGl0RGlhbG9nX0Rhc2hib2FyZCBvbiBEYXNoYm9hcmQge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5EYXNoYm9hcmRzRWRpdERpYWxvZ19EYXNoYm9hcmRGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgcXVlcnkgRGFzaGJvYXJkc0xpc3RDYW5DcmVhdGVEYXNoYm9hcmRzKCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICAgIGNhbkNyZWF0ZURhc2hib2FyZHMge1xcbiAgICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkRhc2hib2FyZHNMaXN0Q2FuQ3JlYXRlRGFzaGJvYXJkc0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBEYXNoYm9hcmRzU2hhckRpYWxvZ1Blcm1pc3Npb25zKCRpZDogU3RyaW5nISkge1xcbiAgICBkYXNoYm9hcmQoaWQ6ICRpZCkge1xcbiAgICAgIGlkXFxuICAgICAgc2hhcmVMaW5rIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBjb250ZW50XFxuICAgICAgICByZXZva2VkXFxuICAgICAgfVxcbiAgICAgIHdvcmtzcGFjZSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgcm9sZVxcbiAgICAgIH1cXG4gICAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgICBjYW5DcmVhdGVUb2tlbiB7XFxuICAgICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuRGFzaGJvYXJkc1NoYXJEaWFsb2dQZXJtaXNzaW9uc0RvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBEYXNoYm9hcmRzU2hhcmVUb2tlbigkZGFzaGJvYXJkSWQ6IFN0cmluZyEpIHtcXG4gICAgZGFzaGJvYXJkTXV0YXRpb25zIHtcXG4gICAgICBzaGFyZShkYXNoYm9hcmRJZDogJGRhc2hib2FyZElkKSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgcmV2b2tlZFxcbiAgICAgICAgY29udGVudFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5EYXNoYm9hcmRzU2hhcmVUb2tlbkRvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBEYXNoYm9hcmRzU2hhcmVFbmFibGVUb2tlbigkaW5wdXQ6IERhc2hib2FyZFNoYXJlSW5wdXQhKSB7XFxuICAgIGRhc2hib2FyZE11dGF0aW9ucyB7XFxuICAgICAgZW5hYmxlU2hhcmUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHJldm9rZWRcXG4gICAgICAgIGNvbnRlbnRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuRGFzaGJvYXJkc1NoYXJlRW5hYmxlVG9rZW5Eb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gRGFzaGJvYXJkc1NoYXJlRGlzYWJsZVRva2VuKCRpbnB1dDogRGFzaGJvYXJkU2hhcmVJbnB1dCEpIHtcXG4gICAgZGFzaGJvYXJkTXV0YXRpb25zIHtcXG4gICAgICBkaXNhYmxlU2hhcmUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHJldm9rZWRcXG4gICAgICAgIGNvbnRlbnRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuRGFzaGJvYXJkc1NoYXJlRGlzYWJsZVRva2VuRG9jdW1lbnQsXG4gICAgXCJcXG4gIGZyYWdtZW50IEZvcm1TZWxlY3RNb2RlbHNfTW9kZWwgb24gTW9kZWwge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICB9XFxuXCI6IHR5cGVzLkZvcm1TZWxlY3RNb2RlbHNfTW9kZWxGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgRm9ybVNlbGVjdFByb2plY3RzX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gIH1cXG5cIjogdHlwZXMuRm9ybVNlbGVjdFByb2plY3RzX1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgRm9ybVNlbGVjdFNhdmVkVmlld19TYXZlZFZpZXcgb24gU2F2ZWRWaWV3IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICB0aHVtYm5haWxVcmxcXG4gIH1cXG5cIjogdHlwZXMuRm9ybVNlbGVjdFNhdmVkVmlld19TYXZlZFZpZXdGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgcXVlcnkgRm9ybVNlbGVjdFNhdmVkVmlld19TYXZlZFZpZXdzKFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRpbnB1dDogUHJvamVjdFNhdmVkVmlld3NJbnB1dCFcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBzYXZlZFZpZXdzKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uRm9ybVNlbGVjdFNhdmVkVmlld19TYXZlZFZpZXdcXG4gICAgICAgIH1cXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIGN1cnNvclxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Gb3JtU2VsZWN0U2F2ZWRWaWV3X1NhdmVkVmlld3NEb2N1bWVudCxcbiAgICBcIlxcbiAgZnJhZ21lbnQgRm9ybVNlbGVjdFNhdmVkVmlld0dyb3VwX1NhdmVkVmlld0dyb3VwIG9uIFNhdmVkVmlld0dyb3VwIHtcXG4gICAgaWRcXG4gICAgdGl0bGVcXG4gICAgaXNVbmdyb3VwZWRWaWV3c0dyb3VwXFxuICB9XFxuXCI6IHR5cGVzLkZvcm1TZWxlY3RTYXZlZFZpZXdHcm91cF9TYXZlZFZpZXdHcm91cEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBxdWVyeSBGb3JtU2VsZWN0U2F2ZWRWaWV3R3JvdXBfU2F2ZWRWaWV3R3JvdXBzKFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRpbnB1dDogU2F2ZWRWaWV3R3JvdXBzSW5wdXQhXFxuICApIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgc2F2ZWRWaWV3R3JvdXBzKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uRm9ybVNlbGVjdFNhdmVkVmlld0dyb3VwX1NhdmVkVmlld0dyb3VwXFxuICAgICAgICB9XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBjdXJzb3JcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuRm9ybVNlbGVjdFNhdmVkVmlld0dyb3VwX1NhdmVkVmlld0dyb3Vwc0RvY3VtZW50LFxuICAgIFwiXFxuICBmcmFnbWVudCBGb3JtVXNlcnNTZWxlY3RJdGVtIG9uIExpbWl0ZWRVc2VyIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBhdmF0YXJcXG4gIH1cXG5cIjogdHlwZXMuRm9ybVVzZXJzU2VsZWN0SXRlbUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBIZWFkZXJXb3Jrc3BhY2VTd2l0Y2hlcldvcmtzcGFjZUxpc3RJdGVtX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGxvZ29cXG4gICAgcm9sZVxcbiAgICBzbHVnXFxuICAgIGNyZWF0aW9uU3RhdGUge1xcbiAgICAgIGNvbXBsZXRlZFxcbiAgICB9XFxuICAgIHBsYW4ge1xcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5IZWFkZXJXb3Jrc3BhY2VTd2l0Y2hlcldvcmtzcGFjZUxpc3RJdGVtX1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VTd2l0Y2hlckFjdGl2ZVdvcmtzcGFjZV9MaW1pdGVkV29ya3NwYWNlIG9uIExpbWl0ZWRXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGxvZ29cXG4gICAgc2x1Z1xcbiAgICByb2xlXFxuICB9XFxuXCI6IHR5cGVzLldvcmtzcGFjZVN3aXRjaGVyQWN0aXZlV29ya3NwYWNlX0xpbWl0ZWRXb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlU3dpdGNoZXJBY3RpdmVXb3Jrc3BhY2VfVXNlciBvbiBVc2VyIHtcXG4gICAgaWRcXG4gICAgYWN0aXZlV29ya3NwYWNlIHtcXG4gICAgICAuLi5Xb3Jrc3BhY2VTd2l0Y2hlckFjdGl2ZVdvcmtzcGFjZV9MaW1pdGVkV29ya3NwYWNlXFxuICAgIH1cXG4gICAgZXhwaXJlZFNzb1Nlc3Npb25zIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLkhlYWRlcldvcmtzcGFjZVN3aXRjaGVySGVhZGVyRXhwaXJlZFNzb19MaW1pdGVkV29ya3NwYWNlXFxuICAgIH1cXG4gICAgZGlzY292ZXJhYmxlV29ya3NwYWNlcyB7XFxuICAgICAgaWRcXG4gICAgfVxcbiAgICB3b3Jrc3BhY2VKb2luUmVxdWVzdHMoZmlsdGVyOiAkam9pblJlcXVlc3RGaWx0ZXIpIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuV29ya3NwYWNlU3dpdGNoZXJBY3RpdmVXb3Jrc3BhY2VfVXNlckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBIZWFkZXJXb3Jrc3BhY2VTd2l0Y2hlckhlYWRlckV4cGlyZWRTc29fTGltaXRlZFdvcmtzcGFjZSBvbiBMaW1pdGVkV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgc2x1Z1xcbiAgICBuYW1lXFxuICAgIGxvZ29cXG4gIH1cXG5cIjogdHlwZXMuSGVhZGVyV29ya3NwYWNlU3dpdGNoZXJIZWFkZXJFeHBpcmVkU3NvX0xpbWl0ZWRXb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgSGVhZGVyV29ya3NwYWNlU3dpdGNoZXJIZWFkZXJXb3Jrc3BhY2VfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIC4uLkludml0ZURpYWxvZ1dvcmtzcGFjZV9Xb3Jrc3BhY2VcXG4gICAgaWRcXG4gICAgbG9nb1xcbiAgICBuYW1lXFxuICAgIHJvbGVcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkludml0ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHBsYW4ge1xcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgICB0ZWFtIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuSGVhZGVyV29ya3NwYWNlU3dpdGNoZXJIZWFkZXJXb3Jrc3BhY2VfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IEhlYWRlck5hdlNoYXJlX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHZpc2liaWxpdHlcXG4gICAgLi4uUHJvamVjdHNNb2RlbFBhZ2VFbWJlZF9Qcm9qZWN0XFxuICB9XFxuXCI6IHR5cGVzLkhlYWRlck5hdlNoYXJlX1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgSGVhZGVyTmF2Tm90aWZpY2F0aW9uc1Byb2plY3RJbnZpdGVfUGVuZGluZ1N0cmVhbUNvbGxhYm9yYXRvciBvbiBQZW5kaW5nU3RyZWFtQ29sbGFib3JhdG9yIHtcXG4gICAgaWRcXG4gICAgaW52aXRlZEJ5IHtcXG4gICAgICAuLi5MaW1pdGVkVXNlckF2YXRhclxcbiAgICB9XFxuICAgIHByb2plY3RJZFxcbiAgICBwcm9qZWN0TmFtZVxcbiAgICB0b2tlblxcbiAgICB3b3Jrc3BhY2VTbHVnXFxuICAgIHVzZXIge1xcbiAgICAgIGlkXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuSGVhZGVyTmF2Tm90aWZpY2F0aW9uc1Byb2plY3RJbnZpdGVfUGVuZGluZ1N0cmVhbUNvbGxhYm9yYXRvckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBIZWFkZXJOYXZOb3RpZmljYXRpb25zV29ya3NwYWNlSW52aXRlX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3Igb24gUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvciB7XFxuICAgIGlkXFxuICAgIGludml0ZWRCeSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5MaW1pdGVkVXNlckF2YXRhclxcbiAgICB9XFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gICAgdG9rZW5cXG4gICAgdXNlciB7XFxuICAgICAgaWRcXG4gICAgfVxcbiAgICAuLi5Vc2VXb3Jrc3BhY2VJbnZpdGVNYW5hZ2VyX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3JcXG4gIH1cXG5cIjogdHlwZXMuSGVhZGVyTmF2Tm90aWZpY2F0aW9uc1dvcmtzcGFjZUludml0ZV9QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IEFjY0ludGVncmF0aW9uRm9sZGVyTm9kZV9BY2NGb2xkZXIgb24gQWNjRm9sZGVyIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBjb250ZW50cyB7XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIG5hbWVcXG4gICAgICAgIGxhdGVzdFZlcnNpb24ge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBuYW1lXFxuICAgICAgICAgIHZlcnNpb25OdW1iZXJcXG4gICAgICAgICAgZmlsZVR5cGVcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gICAgY2hpbGRyZW4ge1xcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBuYW1lXFxuICAgICAgICBjaGlsZHJlbiB7XFxuICAgICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgICBpZFxcbiAgICAgICAgICAgIG5hbWVcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgY29udGVudHMge1xcbiAgICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICBuYW1lXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuQWNjSW50ZWdyYXRpb25Gb2xkZXJOb2RlX0FjY0ZvbGRlckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBTeW5jU3RhdHVzTW9kZWxJdGVtX0FjY1N5bmNJdGVtIG9uIEFjY1N5bmNJdGVtIHtcXG4gICAgaWRcXG4gICAgc3RhdHVzXFxuICAgIHVwZGF0ZWRBdFxcbiAgICBhY2NGaWxlVmVyc2lvbkluZGV4XFxuICB9XFxuXCI6IHR5cGVzLlN5bmNTdGF0dXNNb2RlbEl0ZW1fQWNjU3luY0l0ZW1GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NQcm9qZWN0SW50ZWdyYXRpb25zQWN0aW9uc01lbnVfQWNjU3luY0l0ZW0gb24gQWNjU3luY0l0ZW0ge1xcbiAgICBpZFxcbiAgICBzdGF0dXNcXG4gICAgcHJvamVjdCB7XFxuICAgICAgaWRcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5TZXR0aW5nc1Byb2plY3RJbnRlZ3JhdGlvbnNBY3Rpb25zTWVudV9BY2NTeW5jSXRlbUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBJbnZpdGVEaWFsb2dXb3Jrc3BhY2VfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgc2x1Z1xcbiAgICBkb21haW5CYXNlZE1lbWJlcnNoaXBQcm90ZWN0aW9uRW5hYmxlZFxcbiAgICBkZWZhdWx0U2VhdFR5cGVcXG4gICAgZG9tYWlucyB7XFxuICAgICAgZG9tYWluXFxuICAgICAgaWRcXG4gICAgfVxcbiAgICBzZWF0cyB7XFxuICAgICAgZWRpdG9ycyB7XFxuICAgICAgICBhdmFpbGFibGVcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uSW52aXRlRGlhbG9nU2hhcmVkU2VsZWN0VXNlcnNfV29ya3NwYWNlXFxuICAgIC4uLldvcmtzcGFjZXNQbGFuX1dvcmtzcGFjZVxcbiAgfVxcblwiOiB0eXBlcy5JbnZpdGVEaWFsb2dXb3Jrc3BhY2VfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IEludml0ZURpYWxvZ1Byb2plY3RfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICB3b3Jrc3BhY2VJZFxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICAgIHJvbGVcXG4gICAgICBkb21haW5CYXNlZE1lbWJlcnNoaXBQcm90ZWN0aW9uRW5hYmxlZFxcbiAgICAgIGRvbWFpbnMge1xcbiAgICAgICAgZG9tYWluXFxuICAgICAgICBpZFxcbiAgICAgIH1cXG4gICAgICAuLi5Xb3Jrc3BhY2VzUGxhbl9Xb3Jrc3BhY2VcXG4gICAgfVxcbiAgICAuLi5JbnZpdGVEaWFsb2dQcm9qZWN0Um93X1Byb2plY3RcXG4gIH1cXG5cIjogdHlwZXMuSW52aXRlRGlhbG9nUHJvamVjdF9Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IEludml0ZURpYWxvZ1Byb2plY3RSb3dfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgd29ya3NwYWNlSWRcXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIHJvbGVcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5JbnZpdGVEaWFsb2dQcm9qZWN0Um93X1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgcXVlcnkgSW52aXRlRGlhbG9nUHJvamVjdFJvd1Byb2plY3RDb2xsYWJvcmF0b3JzKFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRmaWx0ZXI6IEludml0YWJsZUNvbGxhYm9yYXRvcnNGaWx0ZXJcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBpbnZpdGFibGVDb2xsYWJvcmF0b3JzKGZpbHRlcjogJGZpbHRlcikge1xcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAuLi5JbnZpdGVQcm9qZWN0SXRlbV9Xb3Jrc3BhY2VDb2xsYWJvcmF0b3JcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuSW52aXRlRGlhbG9nUHJvamVjdFJvd1Byb2plY3RDb2xsYWJvcmF0b3JzRG9jdW1lbnQsXG4gICAgXCJcXG4gIGZyYWdtZW50IEludml0ZURpYWxvZ1NoYXJlZFNlbGVjdFVzZXJzX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBzbHVnXFxuICAgIGRlZmF1bHRTZWF0VHlwZVxcbiAgfVxcblwiOiB0eXBlcy5JbnZpdGVEaWFsb2dTaGFyZWRTZWxlY3RVc2Vyc19Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJlc2VudGF0aW9uSGVhZGVyX1NhdmVkVmlld0dyb3VwIG9uIFNhdmVkVmlld0dyb3VwIHtcXG4gICAgaWRcXG4gICAgdGl0bGVcXG4gIH1cXG5cIjogdHlwZXMuUHJlc2VudGF0aW9uSGVhZGVyX1NhdmVkVmlld0dyb3VwRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByZXNlbnRhdGlvbkluZm9TaWRlYmFyX1NhdmVkVmlldyBvbiBTYXZlZFZpZXcge1xcbiAgICBpZFxcbiAgICAuLi5QcmVzZW50YXRpb25TbGlkZUVkaXREaWFsb2dfU2F2ZWRWaWV3XFxuICAgIG5hbWVcXG4gICAgZGVzY3JpcHRpb25cXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkVkaXRUaXRsZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhbkVkaXREZXNjcmlwdGlvbiB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlByZXNlbnRhdGlvbkluZm9TaWRlYmFyX1NhdmVkVmlld0ZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcmVzZW50YXRpb25MZWZ0U2lkZWJhcl9MaW1pdGVkV29ya3NwYWNlIG9uIExpbWl0ZWRXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGxvZ29cXG4gICAgc2x1Z1xcbiAgfVxcblwiOiB0eXBlcy5QcmVzZW50YXRpb25MZWZ0U2lkZWJhcl9MaW1pdGVkV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByZXNlbnRhdGlvbkxvYWRpbmdfU2F2ZWRWaWV3R3JvdXAgb24gU2F2ZWRWaWV3R3JvdXAge1xcbiAgICBpZFxcbiAgICB0aXRsZVxcbiAgICB2aWV3cyhpbnB1dDogJGlucHV0KSB7XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHNjcmVlbnNob3RcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cXG4gIGZyYWdtZW50IFByZXNlbnRhdGlvbkxvYWRpbmdfTGltaXRlZFdvcmtzcGFjZSBvbiBMaW1pdGVkV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBsb2dvXFxuICB9XFxuXCI6IHR5cGVzLlByZXNlbnRhdGlvbkxvYWRpbmdfU2F2ZWRWaWV3R3JvdXBGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJlc2VudGF0aW9uUGFnZVdyYXBwZXJfU2F2ZWRWaWV3R3JvdXAgb24gU2F2ZWRWaWV3R3JvdXAge1xcbiAgICBpZFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuVXBkYXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuUHJlc2VudGF0aW9uUGFnZVdyYXBwZXJfU2F2ZWRWaWV3R3JvdXBGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgcXVlcnkgUHJlc2VudGF0aW9uU2hhcmVEaWFsb2dQZXJtaXNzaW9ucyhcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkc2F2ZWRWaWV3R3JvdXBJZDogSUQhXFxuICApIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgcm9sZVxcbiAgICAgIHNhdmVkVmlld0dyb3VwKGlkOiAkc2F2ZWRWaWV3R3JvdXBJZCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGdyb3VwSWRcXG4gICAgICAgIHNoYXJlTGluayB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIGNvbnRlbnRcXG4gICAgICAgICAgcmV2b2tlZFxcbiAgICAgICAgfVxcbiAgICAgICAgcGVybWlzc2lvbnMge1xcbiAgICAgICAgICBjYW5DcmVhdGVUb2tlbiB7XFxuICAgICAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlByZXNlbnRhdGlvblNoYXJlRGlhbG9nUGVybWlzc2lvbnNEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gUHJlc2VudGF0aW9uU2hhcmVUb2tlbigkaW5wdXQ6IFNhdmVkVmlld0dyb3VwU2hhcmVJbnB1dCEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgc2F2ZWRWaWV3TXV0YXRpb25zIHtcXG4gICAgICAgIHNoYXJlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgcmV2b2tlZFxcbiAgICAgICAgICBjb250ZW50XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlByZXNlbnRhdGlvblNoYXJlVG9rZW5Eb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gUHJlc2VudGF0aW9uU2hhcmVFbmFibGVUb2tlbigkaW5wdXQ6IFNhdmVkVmlld0dyb3VwU2hhcmVVcGRhdGVJbnB1dCEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgc2F2ZWRWaWV3TXV0YXRpb25zIHtcXG4gICAgICAgIGVuYWJsZVNoYXJlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgcmV2b2tlZFxcbiAgICAgICAgICBjb250ZW50XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlByZXNlbnRhdGlvblNoYXJlRW5hYmxlVG9rZW5Eb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gUHJlc2VudGF0aW9uU2hhcmVEaXNhYmxlVG9rZW4oJGlucHV0OiBTYXZlZFZpZXdHcm91cFNoYXJlVXBkYXRlSW5wdXQhKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIHNhdmVkVmlld011dGF0aW9ucyB7XFxuICAgICAgICBkaXNhYmxlU2hhcmUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICByZXZva2VkXFxuICAgICAgICAgIGNvbnRlbnRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuUHJlc2VudGF0aW9uU2hhcmVEaXNhYmxlVG9rZW5Eb2N1bWVudCxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJlc2VudGF0aW9uU2xpZGVFZGl0RGlhbG9nX1NhdmVkVmlldyBvbiBTYXZlZFZpZXcge1xcbiAgICBpZFxcbiAgICBwcm9qZWN0SWRcXG4gICAgbmFtZVxcbiAgICBkZXNjcmlwdGlvblxcbiAgICB0aHVtYm5haWxVcmxcXG4gIH1cXG5cIjogdHlwZXMuUHJlc2VudGF0aW9uU2xpZGVFZGl0RGlhbG9nX1NhdmVkVmlld0ZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcmVzZW50YXRpb25TbGlkZUxpc3RTbGlkZV9TYXZlZFZpZXcgb24gU2F2ZWRWaWV3IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICB0aHVtYm5haWxVcmxcXG4gIH1cXG5cIjogdHlwZXMuUHJlc2VudGF0aW9uU2xpZGVMaXN0U2xpZGVfU2F2ZWRWaWV3RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByZXNlbnRhdGlvblNsaWRlTGlzdF9TYXZlZFZpZXdHcm91cCBvbiBTYXZlZFZpZXdHcm91cCB7XFxuICAgIGlkXFxuICAgIHZpZXdzKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICBpZFxcbiAgICAgICAgLi4uUHJlc2VudGF0aW9uU2xpZGVMaXN0U2xpZGVfU2F2ZWRWaWV3XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlByZXNlbnRhdGlvblNsaWRlTGlzdF9TYXZlZFZpZXdHcm91cEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcmVzZW50YXRpb25WaWV3ZXJQYWdlV3JhcHBlcl9TYXZlZFZpZXdHcm91cCBvbiBTYXZlZFZpZXdHcm91cCB7XFxuICAgIGlkXFxuICAgIHZpZXdzKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHJlc291cmNlSWRTdHJpbmdcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuUHJlc2VudGF0aW9uVmlld2VyUGFnZVdyYXBwZXJfU2F2ZWRWaWV3R3JvdXBGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdENhcmRJbXBvcnRGaWxlQXJlYV9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQ3JlYXRlTW9kZWwge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5Vc2VGaWxlSW1wb3J0X1Byb2plY3RcXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdENhcmRJbXBvcnRGaWxlQXJlYV9Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RDYXJkSW1wb3J0RmlsZUFyZWFfTW9kZWwgb24gTW9kZWwge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVWZXJzaW9uIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uVXNlRmlsZUltcG9ydF9Nb2RlbFxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0Q2FyZEltcG9ydEZpbGVBcmVhX01vZGVsRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RJbnZpdGVBZGRfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgLi4uSW52aXRlRGlhbG9nUHJvamVjdF9Qcm9qZWN0XFxuICAgIC4uLlVzZUNhbkludml0ZVRvUHJvamVjdF9Qcm9qZWN0XFxuICAgIC4uLldvcmtzcGFjZU1vdmVQcm9qZWN0X1Byb2plY3RcXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdEludml0ZUFkZF9Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RNb2RlbFBhZ2VIZWFkZXJQcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIG1vZGVsKGlkOiAkbW9kZWxJZCkge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICAgIGRlc2NyaXB0aW9uXFxuICAgIH1cXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIHNsdWdcXG4gICAgICBuYW1lXFxuICAgICAgcm9sZVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RNb2RlbFBhZ2VIZWFkZXJQcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RNb2RlbFBhZ2VWZXJzaW9uc1BhZ2luYXRpb24gb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHZpc2liaWxpdHlcXG4gICAgcm9sZVxcbiAgICBtb2RlbChpZDogJG1vZGVsSWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHZlcnNpb25zKGxpbWl0OiAxNiwgY3Vyc29yOiAkdmVyc2lvbnNDdXJzb3IpIHtcXG4gICAgICAgIGN1cnNvclxcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAuLi5Qcm9qZWN0TW9kZWxQYWdlVmVyc2lvbnNDYXJkVmVyc2lvblxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICAuLi5Qcm9qZWN0Q2FyZEltcG9ydEZpbGVBcmVhX01vZGVsXFxuICAgIH1cXG4gICAgLi4uUHJvamVjdHNNb2RlbFBhZ2VFbWJlZF9Qcm9qZWN0XFxuICAgIC4uLlByb2plY3RDYXJkSW1wb3J0RmlsZUFyZWFfUHJvamVjdFxcbiAgICAuLi5Qcm9qZWN0TW9kZWxQYWdlVmVyc2lvbnNDYXJkX1Byb2plY3RcXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdE1vZGVsUGFnZVZlcnNpb25zUGFnaW5hdGlvbkZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0TW9kZWxQYWdlVmVyc2lvbnNQcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICAuLi5Qcm9qZWN0UGFnZVByb2plY3RIZWFkZXJcXG4gICAgbW9kZWwoaWQ6ICRtb2RlbElkKSB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgICAgcGVuZGluZ0ltcG9ydGVkVmVyc2lvbnMge1xcbiAgICAgICAgLi4uUGVuZGluZ0ZpbGVVcGxvYWRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uUHJvamVjdE1vZGVsUGFnZVZlcnNpb25zUGFnaW5hdGlvblxcbiAgICAuLi5Qcm9qZWN0c01vZGVsUGFnZUVtYmVkX1Byb2plY3RcXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIHJlYWRPbmx5XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdE1vZGVsUGFnZVZlcnNpb25zUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0TW9kZWxQYWdlRGlhbG9nRGVsZXRlVmVyc2lvbiBvbiBWZXJzaW9uIHtcXG4gICAgaWRcXG4gICAgbWVzc2FnZVxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0TW9kZWxQYWdlRGlhbG9nRGVsZXRlVmVyc2lvbkZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0TW9kZWxQYWdlRGlhbG9nRWRpdE1lc3NhZ2VWZXJzaW9uIG9uIFZlcnNpb24ge1xcbiAgICBpZFxcbiAgICBtZXNzYWdlXFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RNb2RlbFBhZ2VEaWFsb2dFZGl0TWVzc2FnZVZlcnNpb25GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdE1vZGVsUGFnZURpYWxvZ01vdmVUb1ZlcnNpb24gb24gVmVyc2lvbiB7XFxuICAgIGlkXFxuICAgIG1lc3NhZ2VcXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdE1vZGVsUGFnZURpYWxvZ01vdmVUb1ZlcnNpb25GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdHNNb2RlbFBhZ2VFbWJlZF9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICB2aXNpYmlsaXR5XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVFbWJlZFRva2VucyB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICBzbHVnXFxuICAgICAgcm9sZVxcbiAgICAgIGVtYmVkT3B0aW9ucyB7XFxuICAgICAgICBoaWRlU3BlY2tsZUJyYW5kaW5nXFxuICAgICAgfVxcbiAgICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICAgIGNhbkVkaXRFbWJlZE9wdGlvbnMge1xcbiAgICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RzTW9kZWxQYWdlRW1iZWRfUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0TW9kZWxQYWdlVmVyc2lvbnNDYXJkX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICBzbHVnXFxuICAgIH1cXG4gICAgLi4uVmlld2VyUmVzb3VyY2VzTGltaXRBbGVydF9Qcm9qZWN0XFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RNb2RlbFBhZ2VWZXJzaW9uc0NhcmRfUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0TW9kZWxQYWdlVmVyc2lvbnNDYXJkVmVyc2lvbiBvbiBWZXJzaW9uIHtcXG4gICAgaWRcXG4gICAgbWVzc2FnZVxcbiAgICBhdXRob3JVc2VyIHtcXG4gICAgICAuLi5MaW1pdGVkVXNlckF2YXRhclxcbiAgICB9XFxuICAgIGNyZWF0ZWRBdFxcbiAgICBwcmV2aWV3VXJsXFxuICAgIHJlZmVyZW5jZWRPYmplY3RcXG4gICAgc291cmNlQXBwbGljYXRpb25cXG4gICAgY29tbWVudFRocmVhZENvdW50OiBjb21tZW50VGhyZWFkcyhsaW1pdDogMCkge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgfVxcbiAgICAuLi5Qcm9qZWN0TW9kZWxQYWdlRGlhbG9nRGVsZXRlVmVyc2lvblxcbiAgICAuLi5Qcm9qZWN0TW9kZWxQYWdlRGlhbG9nTW92ZVRvVmVyc2lvblxcbiAgICBhdXRvbWF0aW9uc1N0YXR1cyB7XFxuICAgICAgLi4uQXV0b21hdGVSdW5zVHJpZ2dlclN0YXR1c19UcmlnZ2VyZWRBdXRvbWF0aW9uc1N0YXR1c1xcbiAgICB9XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5VcGRhdGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0TW9kZWxQYWdlVmVyc2lvbnNDYXJkVmVyc2lvbkZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0TW9kZWxzQWRkX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgbmFtZVxcbiAgICAgIHNsdWdcXG4gICAgICByb2xlXFxuICAgICAgcGxhbiB7XFxuICAgICAgICBuYW1lXFxuICAgICAgfVxcbiAgICB9XFxuICAgIC4uLlVzZUNhbkNyZWF0ZU1vZGVsX1Byb2plY3RcXG4gICAgLi4uV29ya3NwYWNlTW92ZVByb2plY3RfUHJvamVjdFxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0TW9kZWxzQWRkX1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VQcm9qZWN0SGVhZGVyIG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGRlc2NyaXB0aW9uXFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICBzbHVnXFxuICAgICAgbmFtZVxcbiAgICAgIGxvZ29cXG4gICAgICByb2xlXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdFBhZ2VQcm9qZWN0SGVhZGVyRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlQXV0b21hdGlvbkRlbGV0ZURpYWxvZ19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHdvcmtzcGFjZUlkXFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RQYWdlQXV0b21hdGlvbkRlbGV0ZURpYWxvZ19Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlQXV0b21hdGlvbkRlbGV0ZURpYWxvZ19BdXRvbWF0aW9uIG9uIEF1dG9tYXRpb24ge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGN1cnJlbnRSZXZpc2lvbiB7XFxuICAgICAgZnVuY3Rpb25zIHtcXG4gICAgICAgIHJlbGVhc2Uge1xcbiAgICAgICAgICBmdW5jdGlvbiB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICBuYW1lXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdFBhZ2VBdXRvbWF0aW9uRGVsZXRlRGlhbG9nX0F1dG9tYXRpb25GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VBdXRvbWF0aW9uRnVuY3Rpb25TZXR0aW5nc0RpYWxvZ19BdXRvbWF0aW9uUmV2aXNpb25GdW5jdGlvbiBvbiBBdXRvbWF0aW9uUmV2aXNpb25GdW5jdGlvbiB7XFxuICAgIHBhcmFtZXRlcnNcXG4gICAgcmVsZWFzZSB7XFxuICAgICAgaWRcXG4gICAgICB2ZXJzaW9uVGFnXFxuICAgICAgY3JlYXRlZEF0XFxuICAgICAgaW5wdXRTY2hlbWFcXG4gICAgICBmdW5jdGlvbiB7XFxuICAgICAgICBpZFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0UGFnZUF1dG9tYXRpb25GdW5jdGlvblNldHRpbmdzRGlhbG9nX0F1dG9tYXRpb25SZXZpc2lvbkZ1bmN0aW9uRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlQXV0b21hdGlvbkZ1bmN0aW9uU2V0dGluZ3NEaWFsb2dfQXV0b21hdGlvblJldmlzaW9uIG9uIEF1dG9tYXRpb25SZXZpc2lvbiB7XFxuICAgIGlkXFxuICAgIHRyaWdnZXJEZWZpbml0aW9ucyB7XFxuICAgICAgLi4uIG9uIFZlcnNpb25DcmVhdGVkVHJpZ2dlckRlZmluaXRpb24ge1xcbiAgICAgICAgdHlwZVxcbiAgICAgICAgbW9kZWwge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICAuLi5Db21tb25Nb2RlbFNlbGVjdG9yTW9kZWxcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdFBhZ2VBdXRvbWF0aW9uRnVuY3Rpb25TZXR0aW5nc0RpYWxvZ19BdXRvbWF0aW9uUmV2aXNpb25GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VBdXRvbWF0aW9uRnVuY3Rpb25zX0F1dG9tYXRpb24gb24gQXV0b21hdGlvbiB7XFxuICAgIGlkXFxuICAgIGN1cnJlbnRSZXZpc2lvbiB7XFxuICAgICAgaWRcXG4gICAgICAuLi5Qcm9qZWN0UGFnZUF1dG9tYXRpb25GdW5jdGlvblNldHRpbmdzRGlhbG9nX0F1dG9tYXRpb25SZXZpc2lvblxcbiAgICAgIGZ1bmN0aW9ucyB7XFxuICAgICAgICByZWxlYXNlIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgaW5wdXRTY2hlbWFcXG4gICAgICAgICAgZnVuY3Rpb24ge1xcbiAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgLi4uQXV0b21hdGlvbnNGdW5jdGlvbnNDYXJkX0F1dG9tYXRlRnVuY3Rpb25cXG4gICAgICAgICAgICByZWxlYXNlcyhsaW1pdDogMSkge1xcbiAgICAgICAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAgICAgICBpZFxcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgLi4uUHJvamVjdFBhZ2VBdXRvbWF0aW9uRnVuY3Rpb25TZXR0aW5nc0RpYWxvZ19BdXRvbWF0aW9uUmV2aXNpb25GdW5jdGlvblxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0UGFnZUF1dG9tYXRpb25GdW5jdGlvbnNfQXV0b21hdGlvbkZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZUF1dG9tYXRpb25IZWFkZXJfQXV0b21hdGlvbiBvbiBBdXRvbWF0aW9uIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBlbmFibGVkXFxuICAgIGlzVGVzdEF1dG9tYXRpb25cXG4gICAgY3VycmVudFJldmlzaW9uIHtcXG4gICAgICBpZFxcbiAgICAgIHRyaWdnZXJEZWZpbml0aW9ucyB7XFxuICAgICAgICAuLi4gb24gVmVyc2lvbkNyZWF0ZWRUcmlnZ2VyRGVmaW5pdGlvbiB7XFxuICAgICAgICAgIG1vZGVsIHtcXG4gICAgICAgICAgICAuLi5Qcm9qZWN0UGFnZUxhdGVzdEl0ZW1zTW9kZWxJdGVtXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdFBhZ2VBdXRvbWF0aW9uSGVhZGVyX0F1dG9tYXRpb25GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VBdXRvbWF0aW9uSGVhZGVyX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHJvbGVcXG4gICAgd29ya3NwYWNlSWRcXG4gICAgLi4uUHJvamVjdFBhZ2VNb2RlbHNDYXJkUHJvamVjdFxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0UGFnZUF1dG9tYXRpb25IZWFkZXJfUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZUF1dG9tYXRpb25Nb2RlbHNfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgLi4uUHJvamVjdFBhZ2VNb2RlbHNDYXJkUHJvamVjdFxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0UGFnZUF1dG9tYXRpb25Nb2RlbHNfUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZUF1dG9tYXRpb25SdW5zX0F1dG9tYXRpb24gb24gQXV0b21hdGlvbiB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgZW5hYmxlZFxcbiAgICBpc1Rlc3RBdXRvbWF0aW9uXFxuICAgIHJ1bnMobGltaXQ6IDEwKSB7XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgLi4uQXV0b21hdGlvblJ1bkRldGFpbHNcXG4gICAgICB9XFxuICAgICAgdG90YWxDb3VudFxcbiAgICAgIGN1cnNvclxcbiAgICB9XFxuICAgIC4uLlByb2plY3RQYWdlQXV0b21hdGlvbkRlbGV0ZURpYWxvZ19BdXRvbWF0aW9uXFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RQYWdlQXV0b21hdGlvblJ1bnNfQXV0b21hdGlvbkZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZUF1dG9tYXRpb25zUm93X0F1dG9tYXRpb24gb24gQXV0b21hdGlvbiB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgZW5hYmxlZFxcbiAgICBpc1Rlc3RBdXRvbWF0aW9uXFxuICAgIGN1cnJlbnRSZXZpc2lvbiB7XFxuICAgICAgaWRcXG4gICAgICB0cmlnZ2VyRGVmaW5pdGlvbnMge1xcbiAgICAgICAgLi4uIG9uIFZlcnNpb25DcmVhdGVkVHJpZ2dlckRlZmluaXRpb24ge1xcbiAgICAgICAgICBtb2RlbCB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICBuYW1lXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gICAgcnVucyhsaW1pdDogMTApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgLi4uQXV0b21hdGlvblJ1bkRldGFpbHNcXG4gICAgICB9XFxuICAgICAgY3Vyc29yXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdFBhZ2VBdXRvbWF0aW9uc1Jvd19BdXRvbWF0aW9uRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlQ29sbGFib3JhdG9yc19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuVXBkYXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uUHJvamVjdEludml0ZUFkZF9Qcm9qZWN0XFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RQYWdlQ29sbGFib3JhdG9yc19Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIHF1ZXJ5IFByb2plY3RQYWdlQ29sbGFib3JhdG9ycygkcHJvamVjdElkOiBTdHJpbmchLCAkZmlsdGVyOiBXb3Jrc3BhY2VUZWFtRmlsdGVyISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICB2aXNpYmlsaXR5XFxuICAgICAgLi4uUHJvamVjdFBhZ2VUZWFtSW50ZXJuYWxzX1Byb2plY3RcXG4gICAgICAuLi5JbnZpdGVEaWFsb2dQcm9qZWN0X1Byb2plY3RcXG4gICAgICAuLi5Qcm9qZWN0UGFnZUNvbGxhYm9yYXRvcnNfUHJvamVjdFxcbiAgICAgIHdvcmtzcGFjZUlkXFxuICAgICAgcGVybWlzc2lvbnMge1xcbiAgICAgICAgY2FuSW52aXRlIHtcXG4gICAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICB3b3Jrc3BhY2Uge1xcbiAgICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc1RhYmxlSGVhZGVyX1dvcmtzcGFjZVxcbiAgICAgICAgbmFtZVxcbiAgICAgICAgbG9nb1xcbiAgICAgICAgdGVhbShmaWx0ZXI6ICRmaWx0ZXIpIHtcXG4gICAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAgIC4uLlByb2plY3RQYWdlQ29sbGFib3JhdG9yc19Xb3Jrc3BhY2VDb2xsYWJvcmF0b3JcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0UGFnZUNvbGxhYm9yYXRvcnNEb2N1bWVudCxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VDb2xsYWJvcmF0b3JzX1dvcmtzcGFjZUNvbGxhYm9yYXRvciBvbiBXb3Jrc3BhY2VDb2xsYWJvcmF0b3Ige1xcbiAgICBpZFxcbiAgICB1c2VyIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgICBhdmF0YXJcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0UGFnZUNvbGxhYm9yYXRvcnNfV29ya3NwYWNlQ29sbGFib3JhdG9yRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIHF1ZXJ5IEludml0YWJsZUNvbGxhYm9yYXRvcnMoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJGZpbHRlcjogSW52aXRhYmxlQ29sbGFib3JhdG9yc0ZpbHRlclxcbiAgICAkbGltaXQ6IEludCFcXG4gICAgJHdvcmtzcGFjZUlkOiBTdHJpbmdcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaW52aXRhYmxlQ29sbGFib3JhdG9ycyhmaWx0ZXI6ICRmaWx0ZXIsIGxpbWl0OiAkbGltaXQpIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgdXNlciB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICBhdmF0YXJcXG4gICAgICAgICAgICBuYW1lXFxuICAgICAgICAgICAgd29ya3NwYWNlUm9sZSh3b3Jrc3BhY2VJZDogJHdvcmtzcGFjZUlkKVxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkludml0YWJsZUNvbGxhYm9yYXRvcnNEb2N1bWVudCxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdERpc2N1c3Npb25zUGFnZUhlYWRlcl9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3REaXNjdXNzaW9uc1BhZ2VIZWFkZXJfUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0RGlzY3Vzc2lvbnNQYWdlUmVzdWx0c19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0RGlzY3Vzc2lvbnNQYWdlUmVzdWx0c19Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlTW9kZWxzQWN0aW9ucyBvbiBNb2RlbCB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhblVwZGF0ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhbkRlbGV0ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhbkNyZWF0ZVZlcnNpb24ge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICBhY2NTeW5jSXRlbSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5Qcm9qZWN0UGFnZU1vZGVsc0FjdGlvbnNfQWNjU3luY0l0ZW1cXG4gICAgfVxcbiAgICAuLi5Vc2VDb3B5TW9kZWxMaW5rX01vZGVsXFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RQYWdlTW9kZWxzQWN0aW9uc0ZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZU1vZGVsc0FjdGlvbnNfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIHNsdWdcXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuUmVhZEFjY0ludGVncmF0aW9uU2V0dGluZ3Mge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5Qcm9qZWN0c01vZGVsUGFnZUVtYmVkX1Byb2plY3RcXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdFBhZ2VNb2RlbHNBY3Rpb25zX1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VNb2RlbHNBY3Rpb25zX0FjY1N5bmNJdGVtIG9uIEFjY1N5bmNJdGVtIHtcXG4gICAgaWRcXG4gICAgYWNjRmlsZU5hbWVcXG4gICAgc3RhdHVzXFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RQYWdlTW9kZWxzQWN0aW9uc19BY2NTeW5jSXRlbUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZU1vZGVsc0NhcmRQcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICByb2xlXFxuICAgIHZpc2liaWxpdHlcXG4gICAgLi4uUHJvamVjdFBhZ2VNb2RlbHNBY3Rpb25zX1Byb2plY3RcXG4gICAgLi4uUHJvamVjdENhcmRJbXBvcnRGaWxlQXJlYV9Qcm9qZWN0XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVNb2RlbCB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RQYWdlTW9kZWxzQ2FyZFByb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VNb2RlbHNDYXJkX01vZGVsIG9uIE1vZGVsIHtcXG4gICAgaWRcXG4gICAgaG9tZVZpZXcge1xcbiAgICAgIGlkXFxuICAgICAgcmVzb3VyY2VJZHNcXG4gICAgfVxcbiAgICBsYXN0VXBsb2FkOiB1cGxvYWRzKGlucHV0OiB7IGxpbWl0OiAxLCBjdXJzb3I6IG51bGwgfSkge1xcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIGlkXFxuICAgICAgICB1cGRhdGVkQXRcXG4gICAgICAgIGNvbnZlcnRlZFN0YXR1c1xcbiAgICAgIH1cXG4gICAgfVxcbiAgICBsYXN0VmVyc2lvbjogdmVyc2lvbnMobGltaXQ6IDEsIGN1cnNvcjogbnVsbCkge1xcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBjcmVhdGVkQXRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdFBhZ2VNb2RlbHNDYXJkX01vZGVsRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RNb2RlbHNQYWdlSGVhZGVyX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgc291cmNlQXBwc1xcbiAgICByb2xlXFxuICAgIG1vZGVscyB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICAgIHRlYW0ge1xcbiAgICAgIGlkXFxuICAgICAgdXNlciB7XFxuICAgICAgICAuLi5Gb3JtVXNlcnNTZWxlY3RJdGVtXFxuICAgICAgfVxcbiAgICB9XFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICByb2xlXFxuICAgICAgc2x1Z1xcbiAgICAgIG5hbWVcXG4gICAgICByZWFkT25seVxcbiAgICAgIHBsYW4ge1xcbiAgICAgICAgbmFtZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQ3JlYXRlTW9kZWwge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5SZWFkQWNjSW50ZWdyYXRpb25TZXR0aW5ncyB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIC4uLlByb2plY3RNb2RlbHNBZGRfUHJvamVjdFxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0TW9kZWxzUGFnZUhlYWRlcl9Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RNb2RlbHNQYWdlUmVzdWx0c19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICAuLi5Qcm9qZWN0UGFnZUxhdGVzdEl0ZW1zTW9kZWxzXFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RNb2RlbHNQYWdlUmVzdWx0c19Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlTW9kZWxzU3RydWN0dXJlSXRlbV9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICAuLi5Qcm9qZWN0UGFnZU1vZGVsc0FjdGlvbnNfUHJvamVjdFxcbiAgICAuLi5Qcm9qZWN0Q2FyZEltcG9ydEZpbGVBcmVhX1Byb2plY3RcXG4gICAgLi4uVXNlQ2FuQ3JlYXRlTW9kZWxfUHJvamVjdFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQ3JlYXRlTW9kZWwge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0UGFnZU1vZGVsc1N0cnVjdHVyZUl0ZW1fUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBTaW5nbGVMZXZlbE1vZGVsVHJlZUl0ZW0gb24gTW9kZWxzVHJlZUl0ZW0ge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGZ1bGxOYW1lXFxuICAgIG1vZGVsIHtcXG4gICAgICAuLi5Qcm9qZWN0UGFnZUxhdGVzdEl0ZW1zTW9kZWxJdGVtXFxuICAgICAgLi4uUHJvamVjdENhcmRJbXBvcnRGaWxlQXJlYV9Nb2RlbFxcbiAgICAgIC4uLlByb2plY3RQYWdlTW9kZWxzQ2FyZF9Nb2RlbFxcbiAgICAgIGFjY1N5bmNJdGVtIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5TeW5jU3RhdHVzTW9kZWxJdGVtX0FjY1N5bmNJdGVtXFxuICAgICAgfVxcbiAgICB9XFxuICAgIGhhc0NoaWxkcmVuXFxuICAgIHVwZGF0ZWRBdFxcbiAgfVxcblwiOiB0eXBlcy5TaW5nbGVMZXZlbE1vZGVsVHJlZUl0ZW1GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VNb2RlbHNVcGxvYWRzRGlhbG9nX0ZpbGVVcGxvYWQgb24gRmlsZVVwbG9hZCB7XFxuICAgIGlkXFxuICAgIGNvbnZlcnRlZFN0YXR1c1xcbiAgICBjb252ZXJ0ZWRNZXNzYWdlXFxuICAgIGZpbGVOYW1lXFxuICAgIGZpbGVTaXplXFxuICAgIGNvbnZlcnRlZExhc3RVcGRhdGVcXG4gICAgY29udmVydGVkVmVyc2lvbklkXFxuICAgIHVwbG9hZERhdGVcXG4gICAgdXBsb2FkQ29tcGxldGVcXG4gICAgYnJhbmNoTmFtZVxcbiAgICAuLi5Vc2VGYWlsZWRGaWxlSW1wb3J0Sm9iVXRpbHNfRmlsZVVwbG9hZFxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0UGFnZU1vZGVsc1VwbG9hZHNEaWFsb2dfRmlsZVVwbG9hZEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBxdWVyeSBHZXRNb2RlbFVwbG9hZHMoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJG1vZGVsSWQ6IFN0cmluZyFcXG4gICAgJGlucHV0OiBHZXRNb2RlbFVwbG9hZHNJbnB1dCFcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBtb2RlbChpZDogJG1vZGVsSWQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICB1cGxvYWRzKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgICBjdXJzb3JcXG4gICAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgLi4uUHJvamVjdFBhZ2VNb2RlbHNVcGxvYWRzRGlhbG9nX0ZpbGVVcGxvYWRcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5HZXRNb2RlbFVwbG9hZHNEb2N1bWVudCxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VNb2RlbHNDYXJkRGVsZXRlRGlhbG9nIG9uIE1vZGVsIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0UGFnZU1vZGVsc0NhcmREZWxldGVEaWFsb2dGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VNb2RlbHNDYXJkUmVuYW1lRGlhbG9nIG9uIE1vZGVsIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBkZXNjcmlwdGlvblxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0UGFnZU1vZGVsc0NhcmRSZW5hbWVEaWFsb2dGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VNb2RlbFJlbW92ZVN5bmNEaWFsb2dfQWNjU3luY0l0ZW0gb24gQWNjU3luY0l0ZW0ge1xcbiAgICBpZFxcbiAgICBhY2NGaWxlTmFtZVxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0UGFnZU1vZGVsUmVtb3ZlU3luY0RpYWxvZ19BY2NTeW5jSXRlbUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZVNldHRpbmdzSW50ZWdyYXRpb25zX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5SZWFkQWNjSW50ZWdyYXRpb25TZXR0aW5ncyB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RQYWdlU2V0dGluZ3NJbnRlZ3JhdGlvbnNfUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBxdWVyeSBQcm9qZWN0UGFnZVNldHRpbmdzR2VuZXJhbCgkcHJvamVjdElkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLlByb2plY3RQYWdlU2V0dGluZ3NHZW5lcmFsQmxvY2tQcm9qZWN0SW5mb19Qcm9qZWN0XFxuICAgICAgLi4uUHJvamVjdFBhZ2VTZXR0aW5nc0dlbmVyYWxCbG9ja0FjY2Vzc19Qcm9qZWN0XFxuICAgICAgLi4uUHJvamVjdFBhZ2VTZXR0aW5nc0dlbmVyYWxCbG9ja0Rpc2N1c3Npb25zX1Byb2plY3RcXG4gICAgICAuLi5Qcm9qZWN0UGFnZVNldHRpbmdzR2VuZXJhbEJsb2NrTGVhdmVfUHJvamVjdFxcbiAgICAgIC4uLlByb2plY3RQYWdlU2V0dGluZ3NHZW5lcmFsQmxvY2tEZWxldGVfUHJvamVjdFxcbiAgICAgIC4uLlByb2plY3RQYWdlVGVhbUludGVybmFsc19Qcm9qZWN0XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdFBhZ2VTZXR0aW5nc0dlbmVyYWxEb2N1bWVudCxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VTZXR0aW5nc0dlbmVyYWxCbG9ja0FjY2Vzc19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICB2aXNpYmlsaXR5XFxuICAgIHdvcmtzcGFjZUlkXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5VcGRhdGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0UGFnZVNldHRpbmdzR2VuZXJhbEJsb2NrQWNjZXNzX1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VTZXR0aW5nc0dlbmVyYWxCbG9ja0RlbGV0ZV9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICAuLi5Qcm9qZWN0c0RlbGV0ZURpYWxvZ19Qcm9qZWN0XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5VcGRhdGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0UGFnZVNldHRpbmdzR2VuZXJhbEJsb2NrRGVsZXRlX1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VTZXR0aW5nc0dlbmVyYWxCbG9ja0Rpc2N1c3Npb25zX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHZpc2liaWxpdHlcXG4gICAgYWxsb3dQdWJsaWNDb21tZW50c1xcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuVXBkYXRlQWxsb3dQdWJsaWNDb21tZW50cyB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RQYWdlU2V0dGluZ3NHZW5lcmFsQmxvY2tEaXNjdXNzaW9uc19Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlU2V0dGluZ3NHZW5lcmFsQmxvY2tMZWF2ZV9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHJvbGVcXG4gICAgdGVhbSB7XFxuICAgICAgcm9sZVxcbiAgICAgIHVzZXIge1xcbiAgICAgICAgLi4uTGltaXRlZFVzZXJBdmF0YXJcXG4gICAgICAgIHJvbGVcXG4gICAgICB9XFxuICAgIH1cXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICB9XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5MZWF2ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RQYWdlU2V0dGluZ3NHZW5lcmFsQmxvY2tMZWF2ZV9Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlU2V0dGluZ3NHZW5lcmFsQmxvY2tQcm9qZWN0SW5mb19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGRlc2NyaXB0aW9uXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5VcGRhdGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0UGFnZVNldHRpbmdzR2VuZXJhbEJsb2NrUHJvamVjdEluZm9fUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZVNldHRpbmdzVG9rZW5zX0VtYmVkVG9rZW4gb24gRW1iZWRUb2tlbiB7XFxuICAgIGNyZWF0ZWRBdFxcbiAgICBsYXN0VXNlZFxcbiAgICB0b2tlbklkXFxuICAgIHJlc291cmNlSWRTdHJpbmdcXG4gICAgdXNlciB7XFxuICAgICAgaWRcXG4gICAgICBhdmF0YXJcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdFBhZ2VTZXR0aW5nc1Rva2Vuc19FbWJlZFRva2VuRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlU2V0dGluZ3NUb2tlbnNfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuUmVhZEVtYmVkVG9rZW5zIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuUmV2b2tlRW1iZWRUb2tlbnMge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICBlbWJlZFRva2VucyhjdXJzb3I6ICRjdXJzb3IsIGxpbWl0OiAyMCkge1xcbiAgICAgIGN1cnNvclxcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICAuLi5Qcm9qZWN0UGFnZVNldHRpbmdzVG9rZW5zX0VtYmVkVG9rZW5cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdFBhZ2VTZXR0aW5nc1Rva2Vuc19Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlU2V0dGluZ3NXZWJob29rc19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuVXBkYXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdFBhZ2VTZXR0aW5nc1dlYmhvb2tzX1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdHNQYWdlVGVhbURpYWxvZ01hbmFnZVBlcm1pc3Npb25zX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHZpc2liaWxpdHlcXG4gICAgcm9sZVxcbiAgICB3b3Jrc3BhY2VJZFxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0c1BhZ2VUZWFtRGlhbG9nTWFuYWdlUGVybWlzc2lvbnNfUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0c0FkZF9Vc2VyIG9uIFVzZXIge1xcbiAgICBpZFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQ3JlYXRlUGVyc29uYWxQcm9qZWN0IHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uVXNlQ2FuQ3JlYXRlUGVyc29uYWxQcm9qZWN0X1VzZXJcXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdHNBZGRfVXNlckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0c0FkZF9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgc2x1Z1xcbiAgICBuYW1lXFxuICAgIHJvbGVcXG4gICAgcGxhbiB7XFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVQcm9qZWN0IHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uVXNlQ2FuQ3JlYXRlV29ya3NwYWNlUHJvamVjdF9Xb3Jrc3BhY2VcXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdHNBZGRfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RzRGFzaGJvYXJkX1VzZXJQcm9qZWN0Q29sbGVjdGlvbiBvbiBVc2VyUHJvamVjdENvbGxlY3Rpb24ge1xcbiAgICBudW1iZXJPZkhpZGRlblxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0c0Rhc2hib2FyZF9Vc2VyUHJvamVjdENvbGxlY3Rpb25GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdHNEYXNoYm9hcmRfVXNlciBvbiBVc2VyIHtcXG4gICAgLi4uUHJvamVjdHNBZGRfVXNlclxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQ3JlYXRlUGVyc29uYWxQcm9qZWN0IHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdHNEYXNoYm9hcmRfVXNlckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0c0Rhc2hib2FyZEZpbGxlZFByb2plY3Qgb24gUHJvamVjdENvbGxlY3Rpb24ge1xcbiAgICBpdGVtcyB7XFxuICAgICAgLi4uUHJvamVjdERhc2hib2FyZEl0ZW1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0c0Rhc2hib2FyZEZpbGxlZFByb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdHNEYXNoYm9hcmRGaWxsZWRVc2VyIG9uIFVzZXJQcm9qZWN0Q29sbGVjdGlvbiB7XFxuICAgIGl0ZW1zIHtcXG4gICAgICAuLi5Qcm9qZWN0RGFzaGJvYXJkSXRlbVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RzRGFzaGJvYXJkRmlsbGVkVXNlckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0c0RlbGV0ZURpYWxvZ19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHJvbGVcXG4gICAgbW9kZWxzKGxpbWl0OiAwKSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgc2x1Z1xcbiAgICAgIGlkXFxuICAgIH1cXG4gICAgdmVyc2lvbnMobGltaXQ6IDApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkRlbGV0ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RzRGVsZXRlRGlhbG9nX1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdHNIaWRkZW5Qcm9qZWN0V2FybmluZ19Vc2VyIG9uIFVzZXIge1xcbiAgICBpZFxcbiAgICBleHBpcmVkU3NvU2Vzc2lvbnMge1xcbiAgICAgIGlkXFxuICAgICAgc2x1Z1xcbiAgICAgIG5hbWVcXG4gICAgICBsb2dvXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdHNIaWRkZW5Qcm9qZWN0V2FybmluZ19Vc2VyRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RzV29ya3NwYWNlU2VsZWN0X1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICByb2xlXFxuICAgIG5hbWVcXG4gICAgbG9nb1xcbiAgICByZWFkT25seVxcbiAgICBzbHVnXFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RzV29ya3NwYWNlU2VsZWN0X1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0c0ludml0ZUJhbm5lciBvbiBQZW5kaW5nU3RyZWFtQ29sbGFib3JhdG9yIHtcXG4gICAgaWRcXG4gICAgaW52aXRlZEJ5IHtcXG4gICAgICAuLi5MaW1pdGVkVXNlckF2YXRhclxcbiAgICB9XFxuICAgIHByb2plY3RJZFxcbiAgICBwcm9qZWN0TmFtZVxcbiAgICB0b2tlblxcbiAgICB1c2VyIHtcXG4gICAgICBpZFxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RzSW52aXRlQmFubmVyRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzU2lkZWJhcl9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgLi4uU2V0dGluZ3NNZW51X1dvcmtzcGFjZVxcbiAgICBpZFxcbiAgICBzbHVnXFxuICAgIHJvbGVcXG4gIH1cXG5cIjogdHlwZXMuU2V0dGluZ3NTaWRlYmFyX1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1NlcnZlclJlZ2lvbnNBZGRFZGl0RGlhbG9nX1NlcnZlclJlZ2lvbkl0ZW0gb24gU2VydmVyUmVnaW9uSXRlbSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgZGVzY3JpcHRpb25cXG4gICAga2V5XFxuICB9XFxuXCI6IHR5cGVzLlNldHRpbmdzU2VydmVyUmVnaW9uc0FkZEVkaXREaWFsb2dfU2VydmVyUmVnaW9uSXRlbUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1NlcnZlclJlZ2lvbnNUYWJsZV9TZXJ2ZXJSZWdpb25JdGVtIG9uIFNlcnZlclJlZ2lvbkl0ZW0ge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGtleVxcbiAgICBkZXNjcmlwdGlvblxcbiAgfVxcblwiOiB0eXBlcy5TZXR0aW5nc1NlcnZlclJlZ2lvbnNUYWJsZV9TZXJ2ZXJSZWdpb25JdGVtRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzU2hhcmVkUHJvamVjdHNfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgLi4uUHJvamVjdHNEZWxldGVEaWFsb2dfUHJvamVjdFxcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHZpc2liaWxpdHlcXG4gICAgY3JlYXRlZEF0XFxuICAgIHVwZGF0ZWRBdFxcbiAgICBtb2RlbHMobGltaXQ6IDApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgdmVyc2lvbnMobGltaXQ6IDApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgdGVhbSB7XFxuICAgICAgaWRcXG4gICAgICB1c2VyIHtcXG4gICAgICAgIG5hbWVcXG4gICAgICAgIGlkXFxuICAgICAgICBhdmF0YXJcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkRlbGV0ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhblJlYWRTZXR0aW5ncyB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhblJlYWQge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5TZXR0aW5nc1NoYXJlZFByb2plY3RzX1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NTaGFyZWRQcm9qZWN0c19Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgLi4uUHJvamVjdHNBZGRfV29ya3NwYWNlXFxuICB9XFxuXCI6IHR5cGVzLlNldHRpbmdzU2hhcmVkUHJvamVjdHNfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzVXNlclByb2ZpbGVDaGFuZ2VQYXNzd29yZF9Vc2VyIG9uIFVzZXIge1xcbiAgICBpZFxcbiAgICBlbWFpbFxcbiAgfVxcblwiOiB0eXBlcy5TZXR0aW5nc1VzZXJQcm9maWxlQ2hhbmdlUGFzc3dvcmRfVXNlckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1VzZXJQcm9maWxlRGVsZXRlQWNjb3VudF9Vc2VyIG9uIFVzZXIge1xcbiAgICBpZFxcbiAgICBlbWFpbFxcbiAgfVxcblwiOiB0eXBlcy5TZXR0aW5nc1VzZXJQcm9maWxlRGVsZXRlQWNjb3VudF9Vc2VyRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzVXNlclByb2ZpbGVEZXRhaWxzX1VzZXIgb24gVXNlciB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgY29tcGFueVxcbiAgICAuLi5Vc2VyUHJvZmlsZUVkaXREaWFsb2dBdmF0YXJfVXNlclxcbiAgfVxcblwiOiB0eXBlcy5TZXR0aW5nc1VzZXJQcm9maWxlRGV0YWlsc19Vc2VyRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFVzZXJQcm9maWxlRWRpdERpYWxvZ0F2YXRhcl9Vc2VyIG9uIFVzZXIge1xcbiAgICBpZFxcbiAgICBhdmF0YXJcXG4gICAgLi4uQWN0aXZlVXNlckF2YXRhclxcbiAgfVxcblwiOiB0eXBlcy5Vc2VyUHJvZmlsZUVkaXREaWFsb2dBdmF0YXJfVXNlckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZUdlbmVyYWxEZWxldGVEaWFsb2dfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gIH1cXG5cIjogdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VHZW5lcmFsRGVsZXRlRGlhbG9nX1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNHZW5lcmFsRWRpdEF2YXRhcl9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgbG9nb1xcbiAgICBuYW1lXFxuICB9XFxuXCI6IHR5cGVzLlNldHRpbmdzV29ya3NwYWNlc0dlbmVyYWxFZGl0QXZhdGFyX1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNHZW5lcmFsRWRpdFNsdWdEaWFsb2dfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgc2x1Z1xcbiAgfVxcblwiOiB0eXBlcy5TZXR0aW5nc1dvcmtzcGFjZXNHZW5lcmFsRWRpdFNsdWdEaWFsb2dfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc0F1dG9tYXRpb25GdW5jdGlvbnNfQXV0b21hdGVGdW5jdGlvbiBvbiBBdXRvbWF0ZUZ1bmN0aW9uIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBsb2dvXFxuICAgIGNyZWF0b3Ige1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICAgIGF2YXRhclxcbiAgICB9XFxuICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc0F1dG9tYXRpb25UYWJsZVJvd0FjdGlvbnNfQXV0b21hdGVGdW5jdGlvblxcbiAgfVxcblwiOiB0eXBlcy5TZXR0aW5nc1dvcmtzcGFjZXNBdXRvbWF0aW9uRnVuY3Rpb25zX0F1dG9tYXRlRnVuY3Rpb25GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzQXV0b21hdGlvblJlZ2VuZXJhdGVUb2tlbkRpYWxvZ19BdXRvbWF0ZUZ1bmN0aW9uIG9uIEF1dG9tYXRlRnVuY3Rpb24ge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICB9XFxuXCI6IHR5cGVzLlNldHRpbmdzV29ya3NwYWNlc0F1dG9tYXRpb25SZWdlbmVyYXRlVG9rZW5EaWFsb2dfQXV0b21hdGVGdW5jdGlvbkZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNBdXRvbWF0aW9uVGFibGVSb3dBY3Rpb25zX0F1dG9tYXRlRnVuY3Rpb24gb24gQXV0b21hdGVGdW5jdGlvbiB7XFxuICAgIGlkXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNBdXRvbWF0aW9uVGFibGVSb3dBY3Rpb25zX0F1dG9tYXRlRnVuY3Rpb25QZXJtaXNzaW9uQ2hlY2tzXFxuICAgIH1cXG4gICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzQXV0b21hdGlvblJlZ2VuZXJhdGVUb2tlbkRpYWxvZ19BdXRvbWF0ZUZ1bmN0aW9uXFxuICB9XFxuXCI6IHR5cGVzLlNldHRpbmdzV29ya3NwYWNlc0F1dG9tYXRpb25UYWJsZVJvd0FjdGlvbnNfQXV0b21hdGVGdW5jdGlvbkZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNBdXRvbWF0aW9uVGFibGVSb3dBY3Rpb25zX0F1dG9tYXRlRnVuY3Rpb25QZXJtaXNzaW9uQ2hlY2tzIG9uIEF1dG9tYXRlRnVuY3Rpb25QZXJtaXNzaW9uQ2hlY2tzIHtcXG4gICAgY2FuUmVnZW5lcmF0ZVRva2VuIHtcXG4gICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VzQXV0b21hdGlvblRhYmxlUm93QWN0aW9uc19BdXRvbWF0ZUZ1bmN0aW9uUGVybWlzc2lvbkNoZWNrc0ZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VCaWxsaW5nUGFnZV9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgcm9sZVxcbiAgICBzdWJzY3JpcHRpb24ge1xcbiAgICAgIGN1cnJlbmN5XFxuICAgICAgYmlsbGluZ0ludGVydmFsXFxuICAgIH1cXG4gICAgcGxhbiB7XFxuICAgICAgbmFtZVxcbiAgICAgIHVzYWdlIHtcXG4gICAgICAgIHByb2plY3RDb3VudFxcbiAgICAgICAgbW9kZWxDb3VudFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5CaWxsaW5nQWxlcnRfV29ya3NwYWNlXFxuICB9XFxuXCI6IHR5cGVzLldvcmtzcGFjZUJpbGxpbmdQYWdlX1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzSW52aXRlc1RhYmxlX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3Igb24gUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvciB7XFxuICAgIGlkXFxuICAgIGludml0ZUlkXFxuICAgIHJvbGVcXG4gICAgdGl0bGVcXG4gICAgdXBkYXRlZEF0XFxuICAgIGVtYWlsXFxuICAgIHVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgLi4uTGltaXRlZFVzZXJBdmF0YXJcXG4gICAgfVxcbiAgICBpbnZpdGVkQnkge1xcbiAgICAgIGlkXFxuICAgICAgLi4uTGltaXRlZFVzZXJBdmF0YXJcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5TZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzSW52aXRlc1RhYmxlX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3JGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc0ludml0ZXNUYWJsZV9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc1RhYmxlSGVhZGVyX1dvcmtzcGFjZVxcbiAgICBpbnZpdGVkVGVhbSB7XFxuICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc0ludml0ZXNUYWJsZV9QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc0ludml0ZXNUYWJsZV9Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc1JlcXVlc3RzVGFibGVfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNUYWJsZUhlYWRlcl9Xb3Jrc3BhY2VcXG4gICAgaWRcXG4gICAgYWRtaW5Xb3Jrc3BhY2VzSm9pblJlcXVlc3RzIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgLi4uV29ya3NwYWNlSm9pblJlcXVlc3RBcHByb3ZlRGlhbG9nX1dvcmtzcGFjZUpvaW5SZXF1ZXN0XFxuICAgICAgICBpZFxcbiAgICAgICAgY3JlYXRlZEF0XFxuICAgICAgICBzdGF0dXNcXG4gICAgICAgIGVtYWlsXFxuICAgICAgICB1c2VyIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgYXZhdGFyXFxuICAgICAgICAgIG5hbWVcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc1JlcXVlc3RzVGFibGVfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNUYWJsZV9Xb3Jrc3BhY2VDb2xsYWJvcmF0b3Igb24gV29ya3NwYWNlQ29sbGFib3JhdG9yIHtcXG4gICAgaWRcXG4gICAgZW1haWxcXG4gICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc0FjdGlvbnNNZW51X1VzZXJcXG4gIH1cXG5cIjogdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc1RhYmxlX1dvcmtzcGFjZUNvbGxhYm9yYXRvckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzVGFibGVIZWFkZXJfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHNsdWdcXG4gICAgcm9sZVxcbiAgICAuLi5JbnZpdGVEaWFsb2dXb3Jrc3BhY2VfV29ya3NwYWNlXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5JbnZpdGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5TZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzVGFibGVIZWFkZXJfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNBY3Rpb25zTWVudV9Vc2VyIG9uIFdvcmtzcGFjZUNvbGxhYm9yYXRvciB7XFxuICAgIGlkXFxuICAgIHJvbGVcXG4gICAgc2VhdFR5cGVcXG4gICAgam9pbkRhdGVcXG4gICAgdXNlciB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgICAgYXZhdGFyXFxuICAgICAgd29ya3NwYWNlRG9tYWluUG9saWN5Q29tcGxpYW50KHdvcmtzcGFjZVNsdWc6ICRzbHVnKVxcbiAgICB9XFxuICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNBY3Rpb25zUHJvamVjdFBlcm1pc3Npb25zRGlhbG9nX1VzZXJcXG4gIH1cXG5cIjogdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc0FjdGlvbnNNZW51X1VzZXJGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc0FjdGlvbnNQcm9qZWN0UGVybWlzc2lvbnNEaWFsb2dfVXNlciBvbiBXb3Jrc3BhY2VDb2xsYWJvcmF0b3Ige1xcbiAgICBwcm9qZWN0Um9sZXMge1xcbiAgICAgIHByb2plY3Qge1xcbiAgICAgICAgaWRcXG4gICAgICAgIG5hbWVcXG4gICAgICB9XFxuICAgICAgcm9sZVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNBY3Rpb25zUHJvamVjdFBlcm1pc3Npb25zRGlhbG9nX1VzZXJGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgcXVlcnkgV29ya3NwYWNlQXZhaWxhYmxlRWRpdG9yU2VhdHMoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgaWRcXG4gICAgICBzZWF0cyB7XFxuICAgICAgICBlZGl0b3JzIHtcXG4gICAgICAgICAgYXZhaWxhYmxlXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLldvcmtzcGFjZUF2YWlsYWJsZUVkaXRvclNlYXRzRG9jdW1lbnQsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc1JlZ2lvbnNTZWxlY3RfU2VydmVyUmVnaW9uSXRlbSBvbiBTZXJ2ZXJSZWdpb25JdGVtIHtcXG4gICAgaWRcXG4gICAga2V5XFxuICAgIG5hbWVcXG4gICAgZGVzY3JpcHRpb25cXG4gIH1cXG5cIjogdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VzUmVnaW9uc1NlbGVjdF9TZXJ2ZXJSZWdpb25JdGVtRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5RGVmYXVsdFNlYXRfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHNsdWdcXG4gICAgZGVmYXVsdFNlYXRUeXBlXFxuICAgIGRpc2NvdmVyYWJpbGl0eUF1dG9Kb2luRW5hYmxlZFxcbiAgICByb2xlXFxuICB9XFxuXCI6IHR5cGVzLlNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5RGVmYXVsdFNlYXRfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5RGlzY292ZXJhYmlsaXR5X1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBzbHVnXFxuICAgIHJvbGVcXG4gICAgZG9tYWlucyB7XFxuICAgICAgaWRcXG4gICAgICBkb21haW5cXG4gICAgfVxcbiAgICBkaXNjb3ZlcmFiaWxpdHlFbmFibGVkXFxuICAgIGRpc2NvdmVyYWJpbGl0eUF1dG9Kb2luRW5hYmxlZFxcbiAgICBkZWZhdWx0U2VhdFR5cGVcXG4gIH1cXG5cIjogdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlEaXNjb3ZlcmFiaWxpdHlfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5RG9tYWluTWFuYWdlbWVudF9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgcm9sZVxcbiAgICBkaXNjb3ZlcmFiaWxpdHlFbmFibGVkXFxuICAgIGRvbWFpbkJhc2VkTWVtYmVyc2hpcFByb3RlY3Rpb25FbmFibGVkXFxuICAgIGhhc0FjY2Vzc1RvRG9tYWluQmFzZWRTZWN1cml0eVBvbGljaWVzOiBoYXNBY2Nlc3NUb0ZlYXR1cmUoXFxuICAgICAgZmVhdHVyZU5hbWU6IGRvbWFpbkJhc2VkU2VjdXJpdHlQb2xpY2llc1xcbiAgICApXFxuICAgIGhhc0FjY2Vzc1RvU1NPOiBoYXNBY2Nlc3NUb0ZlYXR1cmUoZmVhdHVyZU5hbWU6IG9pZGNTc28pXFxuICAgIGRvbWFpbnMge1xcbiAgICAgIGlkXFxuICAgICAgZG9tYWluXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlEb21haW5NYW5hZ2VtZW50X1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eURvbWFpblByb3RlY3Rpb25fV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHNsdWdcXG4gICAgcm9sZVxcbiAgICBkb21haW5CYXNlZE1lbWJlcnNoaXBQcm90ZWN0aW9uRW5hYmxlZFxcbiAgICBoYXNBY2Nlc3NUb0RvbWFpbkJhc2VkU2VjdXJpdHlQb2xpY2llczogaGFzQWNjZXNzVG9GZWF0dXJlKFxcbiAgICAgIGZlYXR1cmVOYW1lOiBkb21haW5CYXNlZFNlY3VyaXR5UG9saWNpZXNcXG4gICAgKVxcbiAgICBkb21haW5zIHtcXG4gICAgICBpZFxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5RG9tYWluUHJvdGVjdGlvbl9Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlEb21haW5SZW1vdmVEaWFsb2dfV29ya3NwYWNlRG9tYWluIG9uIFdvcmtzcGFjZURvbWFpbiB7XFxuICAgIGlkXFxuICAgIGRvbWFpblxcbiAgfVxcblwiOiB0eXBlcy5TZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eURvbWFpblJlbW92ZURpYWxvZ19Xb3Jrc3BhY2VEb21haW5GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlEb21haW5SZW1vdmVEaWFsb2dfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIGRvbWFpbnMge1xcbiAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5RG9tYWluUmVtb3ZlRGlhbG9nX1dvcmtzcGFjZURvbWFpblxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5RG9tYWluUmVtb3ZlRGlhbG9nX1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eVdvcmtzcGFjZUNyZWF0aW9uX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBzbHVnXFxuICAgIHJvbGVcXG4gICAgaXNFeGNsdXNpdmVcXG4gICAgaGFzQWNjZXNzVG9FeGNsdXNpdmVNZW1iZXJzaGlwOiBoYXNBY2Nlc3NUb0ZlYXR1cmUoZmVhdHVyZU5hbWU6IGV4Y2x1c2l2ZU1lbWJlcnNoaXApXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5NYWtlV29ya3NwYWNlRXhjbHVzaXZlIHtcXG4gICAgICAgIGF1dGhvcml6ZWRcXG4gICAgICAgIG1lc3NhZ2VcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlXb3Jrc3BhY2VDcmVhdGlvbl9Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlTc29XcmFwcGVyX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICByb2xlXFxuICAgIHNsdWdcXG4gICAgc3NvIHtcXG4gICAgICBwcm92aWRlciB7XFxuICAgICAgICBpZFxcbiAgICAgICAgbmFtZVxcbiAgICAgICAgY2xpZW50SWRcXG4gICAgICAgIGlzc3VlclVybFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICBoYXNBY2Nlc3NUb1NTTzogaGFzQWNjZXNzVG9GZWF0dXJlKGZlYXR1cmVOYW1lOiBvaWRjU3NvKVxcbiAgfVxcblwiOiB0eXBlcy5TZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eVNzb1dyYXBwZXJfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFZpZXdlclBhZ2VTZXR1cF9TYXZlZFZpZXcgb24gU2F2ZWRWaWV3IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgfVxcblwiOiB0eXBlcy5WaWV3ZXJQYWdlU2V0dXBfU2F2ZWRWaWV3RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IE1vZGVsUGFnZVByb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIGNyZWF0ZWRBdFxcbiAgICBuYW1lXFxuICAgIHZpc2liaWxpdHlcXG4gICAgbGltaXRlZFdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICBzbHVnXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIGVtYmVkT3B0aW9ucyB7XFxuICAgICAgaGlkZVNwZWNrbGVCcmFuZGluZ1xcbiAgICB9XFxuICAgIGhhc0FjY2Vzc1RvRmVhdHVyZShmZWF0dXJlTmFtZTogaGlkZVNwZWNrbGVCcmFuZGluZylcXG4gICAgLi4uVmlld2VyTGltaXRzRGlhbG9nX1Byb2plY3RcXG4gIH1cXG5cIjogdHlwZXMuTW9kZWxQYWdlUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBWaWV3ZXJDb21tZW50VGhyZWFkRGF0YSBvbiBDb21tZW50IHtcXG4gICAgaWRcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkFyY2hpdmUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5WaWV3ZXJDb21tZW50VGhyZWFkRGF0YUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBUaHJlYWRDb21tZW50QXR0YWNobWVudCBvbiBDb21tZW50IHtcXG4gICAgdGV4dCB7XFxuICAgICAgYXR0YWNobWVudHMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGZpbGVOYW1lXFxuICAgICAgICBmaWxlVHlwZVxcbiAgICAgICAgZmlsZVNpemVcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuVGhyZWFkQ29tbWVudEF0dGFjaG1lbnRGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVmlld2VyQ29tbWVudHNMaXN0SXRlbSBvbiBDb21tZW50IHtcXG4gICAgaWRcXG4gICAgcmF3VGV4dFxcbiAgICBhcmNoaXZlZFxcbiAgICBhdXRob3Ige1xcbiAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgIH1cXG4gICAgY3JlYXRlZEF0XFxuICAgIHZpZXdlZEF0XFxuICAgIHJlcGxpZXMge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgICBjdXJzb3JcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICAuLi5WaWV3ZXJDb21tZW50c1JlcGx5SXRlbVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICByZXBseUF1dGhvcnMobGltaXQ6IDQpIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgLi4uRm9ybVVzZXJzU2VsZWN0SXRlbVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICByZXNvdXJjZXMge1xcbiAgICAgIHJlc291cmNlSWRcXG4gICAgICByZXNvdXJjZVR5cGVcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5WaWV3ZXJDb21tZW50c0xpc3RJdGVtRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFZpZXdlckxpbWl0c0RpYWxvZ19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICB3b3Jrc3BhY2VJZFxcbiAgICAuLi5WaWV3ZXJMaW1pdHNXb3Jrc3BhY2VEaWFsb2dfUHJvamVjdFxcbiAgICAuLi5Xb3Jrc3BhY2VNb3ZlUHJvamVjdF9Qcm9qZWN0XFxuICB9XFxuXCI6IHR5cGVzLlZpZXdlckxpbWl0c0RpYWxvZ19Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFZpZXdlckxpbWl0c1dvcmtzcGFjZURpYWxvZ19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgcm9sZVxcbiAgICAgIHNsdWdcXG4gICAgICAuLi5Xb3Jrc3BhY2VQbGFuTGltaXRzX1dvcmtzcGFjZVxcbiAgICB9XFxuICAgIC4uLlVzZUxvYWRMYXRlc3RWZXJzaW9uX1Byb2plY3RcXG4gIH1cXG5cIjogdHlwZXMuVmlld2VyTGltaXRzV29ya3NwYWNlRGlhbG9nX1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVmlld2VyTW9kZWxWZXJzaW9uQ2FyZEl0ZW0gb24gVmVyc2lvbiB7XFxuICAgIGlkXFxuICAgIG1lc3NhZ2VcXG4gICAgcmVmZXJlbmNlZE9iamVjdFxcbiAgICBzb3VyY2VBcHBsaWNhdGlvblxcbiAgICBjcmVhdGVkQXRcXG4gICAgcHJldmlld1VybFxcbiAgICBhdXRob3JVc2VyIHtcXG4gICAgICAuLi5MaW1pdGVkVXNlckF2YXRhclxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlZpZXdlck1vZGVsVmVyc2lvbkNhcmRJdGVtRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFZpZXdlclJlc291cmNlc0xpbWl0QWxlcnRfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgd29ya3NwYWNlSWRcXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIHNsdWdcXG4gICAgICAuLi5WaWV3ZXJSZXNvdXJjZXNXb3Jrc3BhY2VMaW1pdEFsZXJ0X1dvcmtzcGFjZVxcbiAgICB9XFxuICAgIC4uLldvcmtzcGFjZU1vdmVQcm9qZWN0X1Byb2plY3RcXG4gIH1cXG5cIjogdHlwZXMuVmlld2VyUmVzb3VyY2VzTGltaXRBbGVydF9Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFZpZXdlclJlc291cmNlc1BlcnNvbmFsTGltaXRBbGVydF9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICAuLi5Xb3Jrc3BhY2VNb3ZlUHJvamVjdF9Qcm9qZWN0XFxuICB9XFxuXCI6IHR5cGVzLlZpZXdlclJlc291cmNlc1BlcnNvbmFsTGltaXRBbGVydF9Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFZpZXdlclJlc291cmNlc1dvcmtzcGFjZUxpbWl0QWxlcnRfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHNsdWdcXG4gIH1cXG5cIjogdHlwZXMuVmlld2VyUmVzb3VyY2VzV29ya3NwYWNlTGltaXRBbGVydF9Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVmlld2VyU2F2ZWRWaWV3c1BhbmVsX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVTYXZlZFZpZXcge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgc2VhdFR5cGVcXG4gICAgICBwbGFuU3VwcG9ydHNTYXZlZFZpZXdzOiBoYXNBY2Nlc3NUb0ZlYXR1cmUoZmVhdHVyZU5hbWU6IHNhdmVkVmlld3MpXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuVmlld2VyU2F2ZWRWaWV3c1BhbmVsX1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVmlld2VyU2F2ZWRWaWV3c1BhbmVsR3JvdXBzX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHNhdmVkVmlld0dyb3VwcyhpbnB1dDogJHNhdmVkVmlld0dyb3Vwc0lucHV0KSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICAgIGN1cnNvclxcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwX1NhdmVkVmlld0dyb3VwXFxuICAgICAgfVxcbiAgICB9XFxuICAgIC4uLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBfUHJvamVjdFxcbiAgfVxcblwiOiB0eXBlcy5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxHcm91cHNfUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBxdWVyeSBWaWV3ZXJTYXZlZFZpZXdzUGFuZWxHcm91cHNfU2F2ZWRWaWV3R3JvdXBzKFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRzYXZlZFZpZXdHcm91cHNJbnB1dDogU2F2ZWRWaWV3R3JvdXBzSW5wdXQhXFxuICApIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgLi4uVmlld2VyU2F2ZWRWaWV3c1BhbmVsR3JvdXBzX1Byb2plY3RcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxHcm91cHNfU2F2ZWRWaWV3R3JvdXBzRG9jdW1lbnQsXG4gICAgXCJcXG4gIGZyYWdtZW50IFZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdfU2F2ZWRWaWV3IG9uIFNhdmVkVmlldyB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgZGVzY3JpcHRpb25cXG4gICAgdGh1bWJuYWlsVXJsXFxuICAgIHZpc2liaWxpdHlcXG4gICAgaXNIb21lVmlld1xcbiAgICByZXNvdXJjZUlkc1xcbiAgICBhdXRob3Ige1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIHVwZGF0ZWRBdFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuVXBkYXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uVXNlRGVsZXRlU2F2ZWRWaWV3X1NhdmVkVmlld1xcbiAgICAuLi5Vc2VVcGRhdGVTYXZlZFZpZXdfU2F2ZWRWaWV3XFxuICAgIC4uLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdFZGl0RGlhbG9nX1NhdmVkVmlld1xcbiAgICAuLi5Vc2VTYXZlZFZpZXdWYWxpZGF0aW9uSGVscGVyc19TYXZlZFZpZXdcXG4gICAgLi4uVXNlRHJhZ2dhYmxlVmlld19TYXZlZFZpZXdcXG4gIH1cXG5cIjogdHlwZXMuVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld19TYXZlZFZpZXdGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld0RlbGV0ZURpYWxvZ19TYXZlZFZpZXcgb24gU2F2ZWRWaWV3IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICAuLi5Vc2VEZWxldGVTYXZlZFZpZXdfU2F2ZWRWaWV3XFxuICB9XFxuXCI6IHR5cGVzLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdEZWxldGVEaWFsb2dfU2F2ZWRWaWV3RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdFZGl0RGlhbG9nX1NhdmVkVmlldyBvbiBTYXZlZFZpZXcge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGRlc2NyaXB0aW9uXFxuICAgIHZpc2liaWxpdHlcXG4gICAgZ3JvdXAge1xcbiAgICAgIC4uLkZvcm1TZWxlY3RTYXZlZFZpZXdHcm91cF9TYXZlZFZpZXdHcm91cFxcbiAgICB9XFxuICAgIC4uLlVzZVVwZGF0ZVNhdmVkVmlld19TYXZlZFZpZXdcXG4gICAgLi4uVXNlU2F2ZWRWaWV3VmFsaWRhdGlvbkhlbHBlcnNfU2F2ZWRWaWV3XFxuICB9XFxuXCI6IHR5cGVzLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdFZGl0RGlhbG9nX1NhdmVkVmlld0ZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBWaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3TW92ZURpYWxvZ19TYXZlZFZpZXcgb24gU2F2ZWRWaWV3IHtcXG4gICAgaWRcXG4gICAgZ3JvdXAge1xcbiAgICAgIC4uLkZvcm1TZWxlY3RTYXZlZFZpZXdHcm91cF9TYXZlZFZpZXdHcm91cFxcbiAgICB9XFxuICAgIC4uLlVzZVVwZGF0ZVNhdmVkVmlld19TYXZlZFZpZXdcXG4gIH1cXG5cIjogdHlwZXMuVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld01vdmVEaWFsb2dfU2F2ZWRWaWV3RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkNyZWF0ZVNhdmVkVmlldyB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICBoYXNBY2Nlc3NUb0ZlYXR1cmUoZmVhdHVyZU5hbWU6IHByZXNlbnRhdGlvbnMpXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cF9Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBfU2F2ZWRWaWV3R3JvdXAgb24gU2F2ZWRWaWV3R3JvdXAge1xcbiAgICBpZFxcbiAgICBpc1VuZ3JvdXBlZFZpZXdzR3JvdXBcXG4gICAgcmVzb3VyY2VJZHNcXG4gICAgdGl0bGVcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhblVwZGF0ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIC4uLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBJbm5lcl9TYXZlZFZpZXdHcm91cFxcbiAgICAuLi5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwRGVsZXRlRGlhbG9nX1NhdmVkVmlld0dyb3VwXFxuICAgIC4uLlVzZVVwZGF0ZVNhdmVkVmlld0dyb3VwX1NhdmVkVmlld0dyb3VwXFxuICAgIC4uLlVzZURyYWdnYWJsZVZpZXdUYXJnZXRHcm91cF9TYXZlZFZpZXdHcm91cFxcbiAgfVxcblwiOiB0eXBlcy5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwX1NhdmVkVmlld0dyb3VwRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBfU2F2ZWRWaWV3R3JvdXBfUGFnaW5hdGVkIG9uIFNhdmVkVmlld0dyb3VwIHtcXG4gICAgaWRcXG4gICAgdmlld3MoaW5wdXQ6ICRzYXZlZFZpZXdzSW5wdXQpIHtcXG4gICAgICBjdXJzb3JcXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIC4uLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdfU2F2ZWRWaWV3XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBfU2F2ZWRWaWV3R3JvdXBfUGFnaW5hdGVkRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBEZWxldGVEaWFsb2dfU2F2ZWRWaWV3R3JvdXAgb24gU2F2ZWRWaWV3R3JvdXAge1xcbiAgICBpZFxcbiAgICB0aXRsZVxcbiAgICAuLi5Vc2VEZWxldGVTYXZlZFZpZXdHcm91cF9TYXZlZFZpZXdHcm91cFxcbiAgfVxcblwiOiB0eXBlcy5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwRGVsZXRlRGlhbG9nX1NhdmVkVmlld0dyb3VwRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBJbm5lcl9TYXZlZFZpZXdHcm91cCBvbiBTYXZlZFZpZXdHcm91cCB7XFxuICAgIGlkXFxuICAgIHRpdGxlXFxuICB9XFxuXCI6IHR5cGVzLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBJbm5lcl9TYXZlZFZpZXdHcm91cEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBWaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwSW5uZXJfU2F2ZWRWaWV3R3JvdXBfUGFnaW5hdGVkIG9uIFNhdmVkVmlld0dyb3VwIHtcXG4gICAgaWRcXG4gICAgdmlld3MoaW5wdXQ6ICRzYXZlZFZpZXdzSW5wdXQpIHtcXG4gICAgICBjdXJzb3JcXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIC4uLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdfU2F2ZWRWaWV3XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBJbm5lcl9TYXZlZFZpZXdHcm91cF9QYWdpbmF0ZWRGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgcXVlcnkgVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cElubmVyX1ZpZXdzKFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRncm91cElkOiBJRCFcXG4gICAgJHNhdmVkVmlld3NJbnB1dDogU2F2ZWRWaWV3R3JvdXBWaWV3c0lucHV0IVxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHNhdmVkVmlld0dyb3VwKGlkOiAkZ3JvdXBJZCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIC4uLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBJbm5lcl9TYXZlZFZpZXdHcm91cF9QYWdpbmF0ZWRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cElubmVyX1ZpZXdzRG9jdW1lbnQsXG4gICAgXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZUFkZFByb2plY3RNZW51X1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHNsdWdcXG4gICAgcm9sZVxcbiAgICBwbGFuIHtcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkNyZWF0ZVByb2plY3Qge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5Nb3ZlUHJvamVjdFRvV29ya3NwYWNlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uUHJvamVjdHNBZGRfV29ya3NwYWNlXFxuICAgIC4uLldvcmtzcGFjZU1vdmVQcm9qZWN0X1dvcmtzcGFjZVxcbiAgICAuLi5Vc2VDYW5DcmVhdGVXb3Jrc3BhY2VQcm9qZWN0X1dvcmtzcGFjZVxcbiAgICAuLi5Vc2VDYW5Nb3ZlUHJvamVjdEludG9Xb3Jrc3BhY2VfV29ya3NwYWNlXFxuICB9XFxuXCI6IHR5cGVzLldvcmtzcGFjZUFkZFByb2plY3RNZW51X1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VEYXNoYm9hcmRfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIC4uLldvcmtzcGFjZVNpZGViYXJNZW1iZXJzX1dvcmtzcGFjZVxcbiAgICAuLi5Xb3Jrc3BhY2VEYXNoYm9hcmRIZWFkZXJfV29ya3NwYWNlXFxuICAgIC4uLldvcmtzcGFjZURhc2hib2FyZFByb2plY3RMaXN0X1dvcmtzcGFjZVxcbiAgICAuLi5CaWxsaW5nQWN0aW9uc19Xb3Jrc3BhY2VcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICByb2xlXFxuICAgIGNyZWF0aW9uU3RhdGUge1xcbiAgICAgIGNvbXBsZXRlZFxcbiAgICAgIHN0YXRlXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuV29ya3NwYWNlRGFzaGJvYXJkX1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VEYXNoYm9hcmRIZWFkZXJfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIC4uLldvcmtzcGFjZVNpZGViYXJNZW1iZXJzX1dvcmtzcGFjZVxcbiAgICAuLi5Xb3Jrc3BhY2VBZGRQcm9qZWN0TWVudV9Xb3Jrc3BhY2VcXG4gICAgLi4uQmlsbGluZ0FsZXJ0X1dvcmtzcGFjZVxcbiAgICBpZFxcbiAgICByb2xlXFxuICB9XFxuXCI6IHR5cGVzLldvcmtzcGFjZURhc2hib2FyZEhlYWRlcl9Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlRGFzaGJvYXJkUHJvamVjdExpc3RfUHJvamVjdENvbGxlY3Rpb24gb24gUHJvamVjdENvbGxlY3Rpb24ge1xcbiAgICB0b3RhbENvdW50XFxuICAgIGl0ZW1zIHtcXG4gICAgICAuLi5Qcm9qZWN0RGFzaGJvYXJkSXRlbVxcbiAgICB9XFxuICAgIGN1cnNvclxcbiAgfVxcblwiOiB0eXBlcy5Xb3Jrc3BhY2VEYXNoYm9hcmRQcm9qZWN0TGlzdF9Qcm9qZWN0Q29sbGVjdGlvbkZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VEYXNoYm9hcmRQcm9qZWN0TGlzdF9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgLi4uV29ya3NwYWNlQWRkUHJvamVjdE1lbnVfV29ya3NwYWNlXFxuICAgIGlkXFxuICB9XFxuXCI6IHR5cGVzLldvcmtzcGFjZURhc2hib2FyZFByb2plY3RMaXN0X1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VJbnZpdGVCYW5uZXJfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvciBvbiBQZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yIHtcXG4gICAgaWRcXG4gICAgaW52aXRlZEJ5IHtcXG4gICAgICBpZFxcbiAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgIH1cXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgICBsb2dvXFxuICAgIH1cXG4gICAgdG9rZW5cXG4gICAgdXNlciB7XFxuICAgICAgaWRcXG4gICAgfVxcbiAgICAuLi5Vc2VXb3Jrc3BhY2VJbnZpdGVNYW5hZ2VyX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3JcXG4gIH1cXG5cIjogdHlwZXMuV29ya3NwYWNlSW52aXRlQmFubmVyX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3JGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlSW52aXRlQmxvY2tfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvciBvbiBQZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yIHtcXG4gICAgaWRcXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgICBsb2dvXFxuICAgIH1cXG4gICAgdG9rZW5cXG4gICAgdXNlciB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgICAgLi4uTGltaXRlZFVzZXJBdmF0YXJcXG4gICAgfVxcbiAgICB0aXRsZVxcbiAgICBlbWFpbFxcbiAgICAuLi5Vc2VXb3Jrc3BhY2VJbnZpdGVNYW5hZ2VyX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3JcXG4gIH1cXG5cIjogdHlwZXMuV29ya3NwYWNlSW52aXRlQmxvY2tfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VJbnZpdGVDYXJkX0xpbWl0ZWRXb3Jrc3BhY2Ugb24gTGltaXRlZFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgc2x1Z1xcbiAgICBkZXNjcmlwdGlvblxcbiAgICBsb2dvXFxuICAgIGFkbWluVGVhbSB7XFxuICAgICAgdXNlciB7XFxuICAgICAgICBpZFxcbiAgICAgICAgbmFtZVxcbiAgICAgICAgYXZhdGFyXFxuICAgICAgfVxcbiAgICB9XFxuICAgIHRlYW0ge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICB1c2VyIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgbmFtZVxcbiAgICAgICAgICBhdmF0YXJcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuV29ya3NwYWNlSW52aXRlQ2FyZF9MaW1pdGVkV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZUludml0ZUNhcmRfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvciBvbiBQZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yIHtcXG4gICAgaWRcXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICAuLi5Xb3Jrc3BhY2VJbnZpdGVDYXJkX0xpbWl0ZWRXb3Jrc3BhY2VcXG4gICAgfVxcbiAgICBpbnZpdGVkQnkge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLldvcmtzcGFjZUludml0ZUNhcmRfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VKb2luUmVxdWVzdEFwcHJvdmVEaWFsb2dfV29ya3NwYWNlSm9pblJlcXVlc3Qgb24gV29ya3NwYWNlSm9pblJlcXVlc3Qge1xcbiAgICBpZFxcbiAgICB1c2VyIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuV29ya3NwYWNlSm9pblJlcXVlc3RBcHByb3ZlRGlhbG9nX1dvcmtzcGFjZUpvaW5SZXF1ZXN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlcl9Qcm9qZWN0QmFzZSBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBtb2RlbENvdW50OiBtb2RlbHMobGltaXQ6IDApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgdmVyc2lvbnMobGltaXQ6IDApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1Byb2plY3RCYXNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlcl9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICAuLi5Xb3Jrc3BhY2VNb3ZlUHJvamVjdE1hbmFnZXJfUHJvamVjdEJhc2VcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbk1vdmVUb1dvcmtzcGFjZSh3b3Jrc3BhY2VJZDogJHdvcmtzcGFjZUlkKSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICBzbHVnXFxuICAgICAgcGVybWlzc2lvbnMge1xcbiAgICAgICAgY2FuTW92ZVByb2plY3RUb1dvcmtzcGFjZShwcm9qZWN0SWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Xb3Jrc3BhY2VNb3ZlUHJvamVjdE1hbmFnZXJfUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VNb3ZlUHJvamVjdE1hbmFnZXJfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHJvbGVcXG4gICAgbmFtZVxcbiAgICBsb2dvXFxuICAgIHNsdWdcXG4gICAgcGxhbiB7XFxuICAgICAgbmFtZVxcbiAgICAgIHVzYWdlIHtcXG4gICAgICAgIHByb2plY3RDb3VudFxcbiAgICAgICAgbW9kZWxDb3VudFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuTW92ZVByb2plY3RUb1dvcmtzcGFjZShwcm9qZWN0SWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcHJvamVjdHMge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgfVxcbiAgICB0ZWFtIHtcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICB1c2VyIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgbmFtZVxcbiAgICAgICAgICBhdmF0YXJcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uV29ya3NwYWNlTW92ZVByb2plY3RTZWxlY3RXb3Jrc3BhY2VfV29ya3NwYWNlXFxuICB9XFxuXCI6IHR5cGVzLldvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlcl9Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlTW92ZVByb2plY3RTZWxlY3RXb3Jrc3BhY2VfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgcm9sZVxcbiAgICBzbHVnXFxuICAgIHBsYW4ge1xcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuTW92ZVByb2plY3RUb1dvcmtzcGFjZShwcm9qZWN0SWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuQ3JlYXRlUHJvamVjdCB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLldvcmtzcGFjZU1vdmVQcm9qZWN0U2VsZWN0V29ya3NwYWNlX1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VNb3ZlUHJvamVjdFNlbGVjdFdvcmtzcGFjZV9Vc2VyIG9uIFVzZXIge1xcbiAgICB3b3Jrc3BhY2VzIHtcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICAuLi5Xb3Jrc3BhY2VNb3ZlUHJvamVjdE1hbmFnZXJfV29ya3NwYWNlXFxuICAgICAgfVxcbiAgICB9XFxuICAgIHByb2plY3RzKGN1cnNvcjogJGN1cnNvciwgZmlsdGVyOiAkZmlsdGVyLCBzb3J0Qnk6ICRzb3J0QnkpIHtcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICAuLi5Xb3Jrc3BhY2VNb3ZlUHJvamVjdE1hbmFnZXJfUHJvamVjdFxcbiAgICAgIH1cXG4gICAgICBjdXJzb3JcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuV29ya3NwYWNlTW92ZVByb2plY3RTZWxlY3RXb3Jrc3BhY2VfVXNlckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VNb3ZlUHJvamVjdF9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgc2x1Z1xcbiAgICBuYW1lXFxuICAgIHJvbGVcXG4gICAgcGxhbiB7XFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVQcm9qZWN0IHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuTW92ZVByb2plY3RUb1dvcmtzcGFjZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIC4uLlVzZUNhbk1vdmVQcm9qZWN0SW50b1dvcmtzcGFjZV9Xb3Jrc3BhY2VcXG4gIH1cXG5cIjogdHlwZXMuV29ya3NwYWNlTW92ZVByb2plY3RfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZU1vdmVQcm9qZWN0X1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHdvcmtzcGFjZUlkXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5Nb3ZlVG9Xb3Jrc3BhY2Uge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5Vc2VDYW5Nb3ZlUHJvamVjdEludG9Xb3Jrc3BhY2VfUHJvamVjdFxcbiAgfVxcblwiOiB0eXBlcy5Xb3Jrc3BhY2VNb3ZlUHJvamVjdF9Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZVNpZGViYXJBYm91dF9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBkZXNjcmlwdGlvblxcbiAgfVxcblwiOiB0eXBlcy5Xb3Jrc3BhY2VTaWRlYmFyQWJvdXRfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZVNpZGViYXJNZW1iZXJzX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBzbHVnXFxuICAgIG5hbWVcXG4gICAgZG9tYWluQmFzZWRNZW1iZXJzaGlwUHJvdGVjdGlvbkVuYWJsZWRcXG4gICAgZGVmYXVsdFNlYXRUeXBlXFxuICAgIHNpZGViYXJUZWFtOiB0ZWFtKGxpbWl0OiA2KSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIGlkXFxuICAgICAgICB1c2VyIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgbmFtZVxcbiAgICAgICAgICBhdmF0YXJcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gICAgaW52aXRlZFRlYW0oZmlsdGVyOiAkaW52aXRlc0ZpbHRlcikge1xcbiAgICAgIGlkXFxuICAgICAgcm9sZVxcbiAgICB9XFxuICAgIGFkbWluV29ya3NwYWNlc0pvaW5SZXF1ZXN0cyB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIHN0YXR1c1xcbiAgICAgICAgaWRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuV29ya3NwYWNlU2lkZWJhck1lbWJlcnNfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZVNpZGViYXJTZWN1cml0eV9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgc2x1Z1xcbiAgICBkb21haW5zIHtcXG4gICAgICBpZFxcbiAgICAgIGRvbWFpblxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLldvcmtzcGFjZVNpZGViYXJTZWN1cml0eV9Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlU2lkZWJhcl9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgLi4uV29ya3NwYWNlU2lkZWJhck1lbWJlcnNfV29ya3NwYWNlXFxuICAgIC4uLldvcmtzcGFjZVNpZGViYXJBYm91dF9Xb3Jrc3BhY2VcXG4gICAgLi4uV29ya3NwYWNlU2lkZWJhclNlY3VyaXR5X1dvcmtzcGFjZVxcbiAgICBpZFxcbiAgICByb2xlXFxuICAgIHNsdWdcXG4gICAgZG9tYWlucyB7XFxuICAgICAgaWRcXG4gICAgfVxcbiAgICBwbGFuIHtcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuV29ya3NwYWNlU2lkZWJhcl9Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlV2l6YXJkX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBjcmVhdGlvblN0YXRlIHtcXG4gICAgICBjb21wbGV0ZWRcXG4gICAgICBzdGF0ZVxcbiAgICB9XFxuICAgIG5hbWVcXG4gICAgc2x1Z1xcbiAgfVxcblwiOiB0eXBlcy5Xb3Jrc3BhY2VXaXphcmRfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZVdpemFyZFN0ZXBSZWdpb25fU2VydmVySW5mbyBvbiBTZXJ2ZXJJbmZvIHtcXG4gICAgbXVsdGlSZWdpb24ge1xcbiAgICAgIHJlZ2lvbnMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc1JlZ2lvbnNTZWxlY3RfU2VydmVyUmVnaW9uSXRlbVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Xb3Jrc3BhY2VXaXphcmRTdGVwUmVnaW9uX1NlcnZlckluZm9GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgICAgICAgICBmcmFnbWVudCBBY2NGb2xkZXJDb250ZW50cyBvbiBBY2NGb2xkZXIge1xcbiAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgbmFtZVxcbiAgICAgICAgICAgIGNvbnRlbnRzIHtcXG4gICAgICAgICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICAgICAgbmFtZVxcbiAgICAgICAgICAgICAgICBsYXRlc3RWZXJzaW9uIHtcXG4gICAgICAgICAgICAgICAgICBpZFxcbiAgICAgICAgICAgICAgICAgIG5hbWVcXG4gICAgICAgICAgICAgICAgICB2ZXJzaW9uTnVtYmVyXFxuICAgICAgICAgICAgICAgICAgZmlsZVR5cGVcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBjaGlsZHJlbiB7XFxuICAgICAgICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgICAgIG5hbWVcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIFwiOiB0eXBlcy5BY2NGb2xkZXJDb250ZW50c0ZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0QWNjU3luY0l0ZW0gb24gQWNjU3luY0l0ZW0ge1xcbiAgICBpZFxcbiAgICBwcm9qZWN0IHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgICBtb2RlbCB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gICAgYWNjUmVnaW9uXFxuICAgIGFjY0h1YklkXFxuICAgIGFjY1Byb2plY3RJZFxcbiAgICBhY2NSb290UHJvamVjdEZvbGRlclVyblxcbiAgICBhY2NGaWxlTGluZWFnZVVyblxcbiAgICBhY2NGaWxlTmFtZVxcbiAgICBhY2NGaWxlRXh0ZW5zaW9uXFxuICAgIGFjY0ZpbGVWZXJzaW9uSW5kZXhcXG4gICAgYWNjRmlsZVZpZXdOYW1lXFxuICAgIHVwZGF0ZWRBdFxcbiAgICBzdGF0dXNcXG4gICAgYXV0aG9yIHtcXG4gICAgICBuYW1lXFxuICAgICAgYXZhdGFyXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdEFjY1N5bmNJdGVtRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIG11dGF0aW9uIENyZWF0ZUFjY1N5bmNJdGVtKCRpbnB1dDogQ3JlYXRlQWNjU3luY0l0ZW1JbnB1dCEpIHtcXG4gICAgYWNjU3luY0l0ZW1NdXRhdGlvbnMge1xcbiAgICAgIGNyZWF0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgbW9kZWwge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBuYW1lXFxuICAgICAgICB9XFxuICAgICAgICBhdXRob3Ige1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBuYW1lXFxuICAgICAgICB9XFxuICAgICAgICBhY2NGaWxlTmFtZVxcbiAgICAgICAgYWNjRmlsZUxpbmVhZ2VVcm5cXG4gICAgICAgIGFjY0ZpbGVWaWV3TmFtZVxcbiAgICAgICAgc3RhdHVzXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkNyZWF0ZUFjY1N5bmNJdGVtRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIERlbGV0ZUFjY1N5bmNJdGVtKCRpbnB1dDogRGVsZXRlQWNjU3luY0l0ZW1JbnB1dCEpIHtcXG4gICAgYWNjU3luY0l0ZW1NdXRhdGlvbnMge1xcbiAgICAgIGRlbGV0ZShpbnB1dDogJGlucHV0KVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkRlbGV0ZUFjY1N5bmNJdGVtRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIFVwZGF0ZUFjY1N5bmNJdGVtKCRpbnB1dDogVXBkYXRlQWNjU3luY0l0ZW1JbnB1dCEpIHtcXG4gICAgYWNjU3luY0l0ZW1NdXRhdGlvbnMge1xcbiAgICAgIHVwZGF0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgc3RhdHVzXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlVwZGF0ZUFjY1N5bmNJdGVtRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFByb2plY3RBY2NTeW5jSXRlbXMoJGlkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRpZCkge1xcbiAgICAgIGFjY1N5bmNJdGVtcyB7XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIC4uLlByb2plY3RBY2NTeW5jSXRlbVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0QWNjU3luY0l0ZW1zRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IEFjY0ZvbGRlckRhdGEoXFxuICAgICR3b3Jrc3BhY2VTbHVnOiBTdHJpbmchXFxuICAgICRhY2NUb2tlbjogU3RyaW5nIVxcbiAgICAkYWNjUHJvamVjdElkOiBTdHJpbmchXFxuICAgICRhY2NGb2xkZXJJZDogU3RyaW5nIVxcbiAgKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkd29ya3NwYWNlU2x1Zykge1xcbiAgICAgIGlkXFxuICAgICAgaW50ZWdyYXRpb25zIHtcXG4gICAgICAgIGFjYyh0b2tlbjogJGFjY1Rva2VuKSB7XFxuICAgICAgICAgIGZvbGRlcihwcm9qZWN0SWQ6ICRhY2NQcm9qZWN0SWQsIGZvbGRlcklkOiAkYWNjRm9sZGVySWQpIHtcXG4gICAgICAgICAgICBpZFxcbiAgICAgICAgICAgIC4uLkFjY0ludGVncmF0aW9uRm9sZGVyTm9kZV9BY2NGb2xkZXJcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5BY2NGb2xkZXJEYXRhRG9jdW1lbnQsXG4gICAgXCJcXG4gIHN1YnNjcmlwdGlvbiBPblByb2plY3RBY2NTeW5jSXRlbVVwZGF0ZWQoJGlkOiBTdHJpbmchLCAkaXRlbUlkczogW1N0cmluZyFdKSB7XFxuICAgIHByb2plY3RBY2NTeW5jSXRlbXNVcGRhdGVkKGlkOiAkaWQsIGl0ZW1JZHM6ICRpdGVtSWRzKSB7XFxuICAgICAgdHlwZVxcbiAgICAgIGFjY1N5bmNJdGVtIHtcXG4gICAgICAgIC4uLlByb2plY3RBY2NTeW5jSXRlbVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5PblByb2plY3RBY2NTeW5jSXRlbVVwZGF0ZWREb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgQWN0aXZlVXNlck1haW5NZXRhZGF0YSB7XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgZW1haWxcXG4gICAgICBlbWFpbHMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGVtYWlsXFxuICAgICAgICB2ZXJpZmllZFxcbiAgICAgICAgcHJpbWFyeVxcbiAgICAgIH1cXG4gICAgICBjb21wYW55XFxuICAgICAgYmlvXFxuICAgICAgbmFtZVxcbiAgICAgIHJvbGVcXG4gICAgICBhdmF0YXJcXG4gICAgICBpc09uYm9hcmRpbmdGaW5pc2hlZFxcbiAgICAgIGNyZWF0ZWRBdFxcbiAgICAgIHZlcmlmaWVkXFxuICAgICAgbm90aWZpY2F0aW9uUHJlZmVyZW5jZXNcXG4gICAgICB2ZXJzaW9ucyhsaW1pdDogMCkge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgIH1cXG4gICAgICAuLi5Qcm9qZWN0c0FkZF9Vc2VyXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuQWN0aXZlVXNlck1haW5NZXRhZGF0YURvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBBY3RpdmVVc2VyUHJvamVjdHNUb01vdmUoJGZpbHRlcjogVXNlclByb2plY3RzRmlsdGVyKSB7XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgcHJvamVjdHMoZmlsdGVyOiAkZmlsdGVyKSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkFjdGl2ZVVzZXJQcm9qZWN0c1RvTW92ZURvY3VtZW50LFxuICAgIFwiXFxuICBmcmFnbWVudCBGdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0IG9uIFBlcm1pc3Npb25DaGVja1Jlc3VsdCB7XFxuICAgIGF1dGhvcml6ZWRcXG4gICAgY29kZVxcbiAgICBtZXNzYWdlXFxuICAgIHBheWxvYWRcXG4gICAgZXJyb3JNZXNzYWdlXFxuICB9XFxuXCI6IHR5cGVzLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgbXV0YXRpb24gRmluaXNoT25ib2FyZGluZygkaW5wdXQ6IE9uYm9hcmRpbmdDb21wbGV0aW9uSW5wdXQpIHtcXG4gICAgYWN0aXZlVXNlck11dGF0aW9ucyB7XFxuICAgICAgZmluaXNoT25ib2FyZGluZyhpbnB1dDogJGlucHV0KVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkZpbmlzaE9uYm9hcmRpbmdEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gUmVxdWVzdFZlcmlmaWNhdGlvbkJ5RW1haWwoJGVtYWlsOiBTdHJpbmchKSB7XFxuICAgIHJlcXVlc3RWZXJpZmljYXRpb25CeUVtYWlsKGVtYWlsOiAkZW1haWwpXFxuICB9XFxuXCI6IHR5cGVzLlJlcXVlc3RWZXJpZmljYXRpb25CeUVtYWlsRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IEF1dGhMb2dpblBhbmVsIHtcXG4gICAgc2VydmVySW5mbyB7XFxuICAgICAgYXV0aFN0cmF0ZWdpZXMge1xcbiAgICAgICAgaWRcXG4gICAgICB9XFxuICAgICAgLi4uQXV0aFN0YXRlZ2llc1NlcnZlckluZm9GcmFnbWVudFxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkF1dGhMb2dpblBhbmVsRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IEF1dGhSZWdpc3RlclBhbmVsKCR0b2tlbjogU3RyaW5nKSB7XFxuICAgIHNlcnZlckluZm8ge1xcbiAgICAgIGludml0ZU9ubHlcXG4gICAgICBhdXRoU3RyYXRlZ2llcyB7XFxuICAgICAgICBpZFxcbiAgICAgIH1cXG4gICAgICAuLi5BdXRoU3RhdGVnaWVzU2VydmVySW5mb0ZyYWdtZW50XFxuICAgICAgLi4uU2VydmVyVGVybXNPZlNlcnZpY2VQcml2YWN5UG9saWN5RnJhZ21lbnRcXG4gICAgfVxcbiAgICBzZXJ2ZXJJbnZpdGVCeVRva2VuKHRva2VuOiAkdG9rZW4pIHtcXG4gICAgICBpZFxcbiAgICAgIGVtYWlsXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuQXV0aFJlZ2lzdGVyUGFuZWxEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgQXV0aExvZ2luUGFuZWxXb3Jrc3BhY2VJbnZpdGUoJHRva2VuOiBTdHJpbmcpIHtcXG4gICAgd29ya3NwYWNlSW52aXRlKHRva2VuOiAkdG9rZW4pIHtcXG4gICAgICBpZFxcbiAgICAgIGVtYWlsXFxuICAgICAgLi4uQXV0aFdvcmtzcGFjZUludml0ZUhlYWRlcl9QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yXFxuICAgICAgLi4uQXV0aExvZ2luV2l0aEVtYWlsQmxvY2tfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvclxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkF1dGhMb2dpblBhbmVsV29ya3NwYWNlSW52aXRlRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IEF1dGhvcml6YWJsZUFwcE1ldGFkYXRhKCRpZDogU3RyaW5nISkge1xcbiAgICBhcHAoaWQ6ICRpZCkge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICAgIGRlc2NyaXB0aW9uXFxuICAgICAgdHJ1c3RCeURlZmF1bHRcXG4gICAgICByZWRpcmVjdFVybFxcbiAgICAgIHNjb3BlcyB7XFxuICAgICAgICBuYW1lXFxuICAgICAgICBkZXNjcmlwdGlvblxcbiAgICAgIH1cXG4gICAgICBhdXRob3Ige1xcbiAgICAgICAgbmFtZVxcbiAgICAgICAgaWRcXG4gICAgICAgIGF2YXRhclxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5BdXRob3JpemFibGVBcHBNZXRhZGF0YURvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBBY3RpdmVVc2VyV29ya3NwYWNlRXhpc3RlbmNlQ2hlY2soJGZpbHRlcjogVXNlclByb2plY3RzRmlsdGVyKSB7XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgdmVyaWZpZWRcXG4gICAgICBpc09uYm9hcmRpbmdGaW5pc2hlZFxcbiAgICAgIHZlcnNpb25zKGxpbWl0OiAwKSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICAgIHByb2plY3RzKGZpbHRlcjogJGZpbHRlcikge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgIH1cXG4gICAgICB3b3Jrc3BhY2VzKGxpbWl0OiAwKSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIHNsdWdcXG4gICAgICAgICAgY3JlYXRpb25TdGF0ZSB7XFxuICAgICAgICAgICAgY29tcGxldGVkXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgZGlzY292ZXJhYmxlV29ya3NwYWNlcyB7XFxuICAgICAgICBpZFxcbiAgICAgIH1cXG4gICAgICB3b3Jrc3BhY2VKb2luUmVxdWVzdHMobGltaXQ6IDApIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuQWN0aXZlVXNlcldvcmtzcGFjZUV4aXN0ZW5jZUNoZWNrRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IEFjdGl2ZVVzZXJBY3RpdmVXb3Jrc3BhY2VDaGVjayB7XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgYWN0aXZlV29ya3NwYWNlIHtcXG4gICAgICAgIGlkXFxuICAgICAgICByb2xlXFxuICAgICAgICBzbHVnXFxuICAgICAgfVxcbiAgICAgIHdvcmtzcGFjZXMobGltaXQ6IDEpIHtcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgc2x1Z1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5BY3RpdmVVc2VyQWN0aXZlV29ya3NwYWNlQ2hlY2tEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgcHJvamVjdFdvcmtzcGFjZUFjY2Vzc0NoZWNrKCRwcm9qZWN0SWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgcm9sZVxcbiAgICAgIHdvcmtzcGFjZSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgc2x1Z1xcbiAgICAgICAgcm9sZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0V29ya3NwYWNlQWNjZXNzQ2hlY2tEb2N1bWVudCxcbiAgICBcIlxcbiAgZnJhZ21lbnQgRnVuY3Rpb25SdW5TdGF0dXNGb3JTdW1tYXJ5IG9uIEF1dG9tYXRlRnVuY3Rpb25SdW4ge1xcbiAgICBpZFxcbiAgICBzdGF0dXNcXG4gIH1cXG5cIjogdHlwZXMuRnVuY3Rpb25SdW5TdGF0dXNGb3JTdW1tYXJ5RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFRyaWdnZXJlZEF1dG9tYXRpb25zU3RhdHVzU3VtbWFyeSBvbiBUcmlnZ2VyZWRBdXRvbWF0aW9uc1N0YXR1cyB7XFxuICAgIGlkXFxuICAgIGF1dG9tYXRpb25SdW5zIHtcXG4gICAgICBpZFxcbiAgICAgIGZ1bmN0aW9uUnVucyB7XFxuICAgICAgICBpZFxcbiAgICAgICAgLi4uRnVuY3Rpb25SdW5TdGF0dXNGb3JTdW1tYXJ5XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlRyaWdnZXJlZEF1dG9tYXRpb25zU3RhdHVzU3VtbWFyeUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBBdXRvbWF0aW9uUnVuRGV0YWlscyBvbiBBdXRvbWF0ZVJ1biB7XFxuICAgIGlkXFxuICAgIHN0YXR1c1xcbiAgICBmdW5jdGlvblJ1bnMge1xcbiAgICAgIC4uLkZ1bmN0aW9uUnVuU3RhdHVzRm9yU3VtbWFyeVxcbiAgICAgIHN0YXR1c01lc3NhZ2VcXG4gICAgfVxcbiAgICB0cmlnZ2VyIHtcXG4gICAgICAuLi4gb24gVmVyc2lvbkNyZWF0ZWRUcmlnZ2VyIHtcXG4gICAgICAgIHZlcnNpb24ge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgfVxcbiAgICAgICAgbW9kZWwge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICBjcmVhdGVkQXRcXG4gICAgdXBkYXRlZEF0XFxuICB9XFxuXCI6IHR5cGVzLkF1dG9tYXRpb25SdW5EZXRhaWxzRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IEF1dG9tYXRpb25zU3RhdHVzT3JkZXJlZFJ1bnNfQXV0b21hdGlvblJ1biBvbiBBdXRvbWF0ZVJ1biB7XFxuICAgIGlkXFxuICAgIGF1dG9tYXRpb24ge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIGZ1bmN0aW9uUnVucyB7XFxuICAgICAgaWRcXG4gICAgICB1cGRhdGVkQXRcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5BdXRvbWF0aW9uc1N0YXR1c09yZGVyZWRSdW5zX0F1dG9tYXRpb25SdW5GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgU2VhcmNoQXV0b21hdGVGdW5jdGlvblJlbGVhc2VJdGVtIG9uIEF1dG9tYXRlRnVuY3Rpb25SZWxlYXNlIHtcXG4gICAgaWRcXG4gICAgdmVyc2lvblRhZ1xcbiAgICBjcmVhdGVkQXRcXG4gICAgaW5wdXRTY2hlbWFcXG4gIH1cXG5cIjogdHlwZXMuU2VhcmNoQXV0b21hdGVGdW5jdGlvblJlbGVhc2VJdGVtRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIG11dGF0aW9uIENyZWF0ZUF1dG9tYXRlRnVuY3Rpb24oJGlucHV0OiBDcmVhdGVBdXRvbWF0ZUZ1bmN0aW9uSW5wdXQhKSB7XFxuICAgIGF1dG9tYXRlTXV0YXRpb25zIHtcXG4gICAgICBjcmVhdGVGdW5jdGlvbihpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgLi4uQXV0b21hdGlvbnNGdW5jdGlvbnNDYXJkX0F1dG9tYXRlRnVuY3Rpb25cXG4gICAgICAgIC4uLkF1dG9tYXRlRnVuY3Rpb25DcmVhdGVEaWFsb2dEb25lU3RlcF9BdXRvbWF0ZUZ1bmN0aW9uXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkNyZWF0ZUF1dG9tYXRlRnVuY3Rpb25Eb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gVXBkYXRlQXV0b21hdGVGdW5jdGlvbigkaW5wdXQ6IFVwZGF0ZUF1dG9tYXRlRnVuY3Rpb25JbnB1dCEpIHtcXG4gICAgYXV0b21hdGVNdXRhdGlvbnMge1xcbiAgICAgIHVwZGF0ZUZ1bmN0aW9uKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5BdXRvbWF0ZUZ1bmN0aW9uUGFnZV9BdXRvbWF0ZUZ1bmN0aW9uXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlVwZGF0ZUF1dG9tYXRlRnVuY3Rpb25Eb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gUmVnZW5lcmF0ZUZ1bmN0aW9uVG9rZW4oJGZ1bmN0aW9uSWQ6IFN0cmluZyEpIHtcXG4gICAgYXV0b21hdGVNdXRhdGlvbnMge1xcbiAgICAgIHJlZ2VuZXJhdGVGdW5jdGlvblRva2VuKGZ1bmN0aW9uSWQ6ICRmdW5jdGlvbklkKVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlJlZ2VuZXJhdGVGdW5jdGlvblRva2VuRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFNlYXJjaEF1dG9tYXRlRnVuY3Rpb25SZWxlYXNlcyhcXG4gICAgJGZ1bmN0aW9uSWQ6IElEIVxcbiAgICAkY3Vyc29yOiBTdHJpbmdcXG4gICAgJGxpbWl0OiBJbnRcXG4gICAgJGZpbHRlcjogQXV0b21hdGVGdW5jdGlvblJlbGVhc2VzRmlsdGVyXFxuICApIHtcXG4gICAgYXV0b21hdGVGdW5jdGlvbihpZDogJGZ1bmN0aW9uSWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHJlbGVhc2VzKGN1cnNvcjogJGN1cnNvciwgbGltaXQ6ICRsaW1pdCwgZmlsdGVyOiAkZmlsdGVyKSB7XFxuICAgICAgICBjdXJzb3JcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgLi4uU2VhcmNoQXV0b21hdGVGdW5jdGlvblJlbGVhc2VJdGVtXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlNlYXJjaEF1dG9tYXRlRnVuY3Rpb25SZWxlYXNlc0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBGdW5jdGlvbkFjY2Vzc0NoZWNrKCRpZDogSUQhKSB7XFxuICAgIGF1dG9tYXRlRnVuY3Rpb24oaWQ6ICRpZCkge1xcbiAgICAgIGlkXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuRnVuY3Rpb25BY2Nlc3NDaGVja0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBQcm9qZWN0QXV0b21hdGlvbkNyZWF0aW9uUHVibGljS2V5cyhcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkYXV0b21hdGlvbklkOiBTdHJpbmchXFxuICApIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgYXV0b21hdGlvbihpZDogJGF1dG9tYXRpb25JZCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGNyZWF0aW9uUHVibGljS2V5c1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0QXV0b21hdGlvbkNyZWF0aW9uUHVibGljS2V5c0RvY3VtZW50LFxuICAgIFwiXFxuICBmcmFnbWVudCBCaWxsaW5nQWN0aW9uc19Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBpbnZpdGVkVGVhbShmaWx0ZXI6ICRpbnZpdGVzRmlsdGVyKSB7XFxuICAgICAgaWRcXG4gICAgfVxcbiAgICBwbGFuIHtcXG4gICAgICBuYW1lXFxuICAgICAgc3RhdHVzXFxuICAgIH1cXG4gICAgc3Vic2NyaXB0aW9uIHtcXG4gICAgICBiaWxsaW5nSW50ZXJ2YWxcXG4gICAgfVxcbiAgICB0ZWFtIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgZGVmYXVsdFJlZ2lvbiB7XFxuICAgICAgbmFtZVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkJpbGxpbmdBY3Rpb25zX1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcmljZXNQcmljZSBvbiBQcmljZSB7XFxuICAgIGFtb3VudFxcbiAgICBjdXJyZW5jeVN5bWJvbFxcbiAgICBjdXJyZW5jeVxcbiAgfVxcblwiOiB0eXBlcy5QcmljZXNQcmljZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcmljZXNXb3Jrc3BhY2VQbGFuUHJpY2Ugb24gV29ya3NwYWNlUGxhblByaWNlIHtcXG4gICAgbW9udGhseSB7XFxuICAgICAgLi4uUHJpY2VzUHJpY2VcXG4gICAgfVxcbiAgICB5ZWFybHkge1xcbiAgICAgIC4uLlByaWNlc1ByaWNlXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuUHJpY2VzV29ya3NwYWNlUGxhblByaWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByaWNlc1dvcmtzcGFjZVBhaWRQbGFuUHJpY2VzIG9uIFdvcmtzcGFjZVBhaWRQbGFuUHJpY2VzIHtcXG4gICAgdGVhbSB7XFxuICAgICAgLi4uUHJpY2VzV29ya3NwYWNlUGxhblByaWNlXFxuICAgIH1cXG4gICAgdGVhbVVubGltaXRlZCB7XFxuICAgICAgLi4uUHJpY2VzV29ya3NwYWNlUGxhblByaWNlXFxuICAgIH1cXG4gICAgcHJvIHtcXG4gICAgICAuLi5QcmljZXNXb3Jrc3BhY2VQbGFuUHJpY2VcXG4gICAgfVxcbiAgICBwcm9VbmxpbWl0ZWQge1xcbiAgICAgIC4uLlByaWNlc1dvcmtzcGFjZVBsYW5QcmljZVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlByaWNlc1dvcmtzcGFjZVBhaWRQbGFuUHJpY2VzRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByaWNlc0N1cnJlbmN5QmFzZWRQcmljZXMgb24gQ3VycmVuY3lCYXNlZFByaWNlcyB7XFxuICAgIGdicCB7XFxuICAgICAgLi4uUHJpY2VzV29ya3NwYWNlUGFpZFBsYW5QcmljZXNcXG4gICAgfVxcbiAgICB1c2Qge1xcbiAgICAgIC4uLlByaWNlc1dvcmtzcGFjZVBhaWRQbGFuUHJpY2VzXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuUHJpY2VzQ3VycmVuY3lCYXNlZFByaWNlc0ZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBxdWVyeSBVc2VXb3Jrc3BhY2VQbGFuUHJpY2VzIHtcXG4gICAgc2VydmVySW5mbyB7XFxuICAgICAgd29ya3NwYWNlcyB7XFxuICAgICAgICBwbGFuUHJpY2VzIHtcXG4gICAgICAgICAgLi4uUHJpY2VzQ3VycmVuY3lCYXNlZFByaWNlc1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Vc2VXb3Jrc3BhY2VQbGFuUHJpY2VzRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFVzZUFjdGl2ZVdvcmtzcGFjZVBsYW5QcmljZXMoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgaWRcXG4gICAgICBwbGFuUHJpY2VzIHtcXG4gICAgICAgIC4uLlByaWNlc1dvcmtzcGFjZVBhaWRQbGFuUHJpY2VzXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlVzZUFjdGl2ZVdvcmtzcGFjZVBsYW5QcmljZXNEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gQmlsbGluZ0NyZWF0ZUNoZWNrb3V0U2Vzc2lvbigkaW5wdXQ6IENoZWNrb3V0U2Vzc2lvbklucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIGJpbGxpbmcge1xcbiAgICAgICAgY3JlYXRlQ2hlY2tvdXRTZXNzaW9uKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgdXJsXFxuICAgICAgICAgIGlkXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkJpbGxpbmdDcmVhdGVDaGVja291dFNlc3Npb25Eb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gQmlsbGluZ1VwZ3JhZGVQbGFuKCRpbnB1dDogVXBncmFkZVBsYW5JbnB1dCEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICBiaWxsaW5nIHtcXG4gICAgICAgIHVwZ3JhZGVQbGFuKGlucHV0OiAkaW5wdXQpXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkJpbGxpbmdVcGdyYWRlUGxhbkRvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBNZW50aW9uc1VzZXJTZWFyY2goJHF1ZXJ5OiBTdHJpbmchLCAkcHJvamVjdElkOiBTdHJpbmcpIHtcXG4gICAgdXNlcnMoaW5wdXQ6IHsgcXVlcnk6ICRxdWVyeSwgbGltaXQ6IDUsIGN1cnNvcjogbnVsbCwgcHJvamVjdElkOiAkcHJvamVjdElkIH0pIHtcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICBpZFxcbiAgICAgICAgbmFtZVxcbiAgICAgICAgY29tcGFueVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5NZW50aW9uc1VzZXJTZWFyY2hEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgU2VydmVySW5mb0Jsb2JTaXplTGltaXQge1xcbiAgICBzZXJ2ZXJJbmZvIHtcXG4gICAgICBjb25maWd1cmF0aW9uIHtcXG4gICAgICAgIGJsb2JTaXplTGltaXRCeXRlc1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5TZXJ2ZXJJbmZvQmxvYlNpemVMaW1pdERvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBTZXJ2ZXJJbmZvQWxsU2NvcGVzIHtcXG4gICAgc2VydmVySW5mbyB7XFxuICAgICAgc2NvcGVzIHtcXG4gICAgICAgIG5hbWVcXG4gICAgICAgIGRlc2NyaXB0aW9uXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlNlcnZlckluZm9BbGxTY29wZXNEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgU2VydmVySW5mb0VtYWlsVmVyaWZpY2F0aW9uVGltZW91dCB7XFxuICAgIHNlcnZlckluZm8ge1xcbiAgICAgIGNvbmZpZ3VyYXRpb24ge1xcbiAgICAgICAgZW1haWxWZXJpZmljYXRpb25UaW1lb3V0TWludXRlc1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5TZXJ2ZXJJbmZvRW1haWxWZXJpZmljYXRpb25UaW1lb3V0RG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFByb2plY3RNb2RlbHNTZWxlY3RvclZhbHVlcygkcHJvamVjdElkOiBTdHJpbmchLCAkY3Vyc29yOiBTdHJpbmcpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgbW9kZWxzKGxpbWl0OiAxMDAsIGN1cnNvcjogJGN1cnNvcikge1xcbiAgICAgICAgY3Vyc29yXFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIC4uLkNvbW1vbk1vZGVsU2VsZWN0b3JNb2RlbFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0TW9kZWxzU2VsZWN0b3JWYWx1ZXNEb2N1bWVudCxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVXNlRmFpbGVkRmlsZUltcG9ydEpvYlV0aWxzX0ZpbGVVcGxvYWQgb24gRmlsZVVwbG9hZCB7XFxuICAgIGlkXFxuICAgIGZpbGVOYW1lXFxuICAgIHByb2plY3RJZFxcbiAgICBtb2RlbElkXFxuICAgIHVwZGF0ZWRBdFxcbiAgICBjb252ZXJ0ZWRTdGF0dXNcXG4gICAgY29udmVydGVkTWVzc2FnZVxcbiAgfVxcblwiOiB0eXBlcy5Vc2VGYWlsZWRGaWxlSW1wb3J0Sm9iVXRpbHNfRmlsZVVwbG9hZEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBtdXRhdGlvbiBHZW5lcmF0ZVVwbG9hZFVybCgkaW5wdXQ6IEdlbmVyYXRlRmlsZVVwbG9hZFVybElucHV0ISkge1xcbiAgICBmaWxlVXBsb2FkTXV0YXRpb25zIHtcXG4gICAgICBnZW5lcmF0ZVVwbG9hZFVybChpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICB1cmxcXG4gICAgICAgIGZpbGVJZFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5HZW5lcmF0ZVVwbG9hZFVybERvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBTdGFydEZpbGVJbXBvcnQoJGlucHV0OiBTdGFydEZpbGVJbXBvcnRJbnB1dCEpIHtcXG4gICAgZmlsZVVwbG9hZE11dGF0aW9ucyB7XFxuICAgICAgc3RhcnRGaWxlSW1wb3J0KGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlN0YXJ0RmlsZUltcG9ydERvY3VtZW50LFxuICAgIFwiXFxuICBmcmFnbWVudCBVc2VGaWxlSW1wb3J0X1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICB9XFxuXCI6IHR5cGVzLlVzZUZpbGVJbXBvcnRfUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBVc2VGaWxlSW1wb3J0X01vZGVsIG9uIE1vZGVsIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgfVxcblwiOiB0eXBlcy5Vc2VGaWxlSW1wb3J0X01vZGVsRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIHF1ZXJ5IE1haW5TZXJ2ZXJJbmZvRGF0YSB7XFxuICAgIHNlcnZlckluZm8ge1xcbiAgICAgIGFkbWluQ29udGFjdFxcbiAgICAgIGNhbm9uaWNhbFVybFxcbiAgICAgIGNvbXBhbnlcXG4gICAgICBkZXNjcmlwdGlvblxcbiAgICAgIGd1ZXN0TW9kZUVuYWJsZWRcXG4gICAgICBpbnZpdGVPbmx5XFxuICAgICAgbmFtZVxcbiAgICAgIHRlcm1zT2ZTZXJ2aWNlXFxuICAgICAgdmVyc2lvblxcbiAgICAgIGF1dG9tYXRlVXJsXFxuICAgICAgY29uZmlndXJhdGlvbiB7XFxuICAgICAgICBpc0VtYWlsRW5hYmxlZFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5NYWluU2VydmVySW5mb0RhdGFEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gQ3JlYXRlRGFzaGJvYXJkKFxcbiAgICAkd29ya3NwYWNlOiBXb3Jrc3BhY2VJZGVudGlmaWVyIVxcbiAgICAkaW5wdXQ6IERhc2hib2FyZENyZWF0ZUlucHV0IVxcbiAgKSB7XFxuICAgIGRhc2hib2FyZE11dGF0aW9ucyB7XFxuICAgICAgY3JlYXRlKHdvcmtzcGFjZTogJHdvcmtzcGFjZSwgaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHdvcmtzcGFjZSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkNyZWF0ZURhc2hib2FyZERvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBVcGRhdGVEYXNoYm9hcmQoJGlucHV0OiBEYXNoYm9hcmRVcGRhdGVJbnB1dCEpIHtcXG4gICAgZGFzaGJvYXJkTXV0YXRpb25zIHtcXG4gICAgICB1cGRhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIG5hbWVcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuVXBkYXRlRGFzaGJvYXJkRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIERlbGV0ZURhc2hib2FyZCgkaWQ6IFN0cmluZyEpIHtcXG4gICAgZGFzaGJvYXJkTXV0YXRpb25zIHtcXG4gICAgICBkZWxldGUoaWQ6ICRpZClcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5EZWxldGVEYXNoYm9hcmREb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgRGFzaGJvYXJkQWNjZXNzQ2hlY2soJGlkOiBTdHJpbmchKSB7XFxuICAgIGRhc2hib2FyZChpZDogJGlkKSB7XFxuICAgICAgaWRcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5EYXNoYm9hcmRBY2Nlc3NDaGVja0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBEYXNoYm9hcmQoJGlkOiBTdHJpbmchKSB7XFxuICAgIGRhc2hib2FyZChpZDogJGlkKSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5Xb3Jrc3BhY2VEYXNoYm9hcmRzX0Rhc2hib2FyZFxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkRhc2hib2FyZERvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBXb3Jrc3BhY2VEYXNoYm9hcmRzKFxcbiAgICAkd29ya3NwYWNlU2x1ZzogU3RyaW5nIVxcbiAgICAkY3Vyc29yOiBTdHJpbmdcXG4gICAgJGZpbHRlcjogV29ya3NwYWNlRGFzaGJvYXJkc0ZpbHRlclxcbiAgKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkd29ya3NwYWNlU2x1Zykge1xcbiAgICAgIGlkXFxuICAgICAgZGFzaGJvYXJkcyhjdXJzb3I6ICRjdXJzb3IsIGZpbHRlcjogJGZpbHRlcikge1xcbiAgICAgICAgY3Vyc29yXFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLkRhc2hib2FyZHNDYXJkX0Rhc2hib2FyZFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Xb3Jrc3BhY2VEYXNoYm9hcmRzRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFByb2plY3REYXNoYm9hcmRzKFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRjdXJzb3I6IFN0cmluZ1xcbiAgICAkZmlsdGVyOiBQcm9qZWN0RGFzaGJvYXJkc0ZpbHRlclxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHdvcmtzcGFjZSB7XFxuICAgICAgICBzbHVnXFxuICAgICAgfVxcbiAgICAgIGRhc2hib2FyZHMoY3Vyc29yOiAkY3Vyc29yLCBmaWx0ZXI6ICRmaWx0ZXIpIHtcXG4gICAgICAgIGN1cnNvclxcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICAuLi5EYXNoYm9hcmRzQ2FyZF9EYXNoYm9hcmRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdERhc2hib2FyZHNEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gRGVsZXRlQWNjZXNzVG9rZW4oJHRva2VuOiBTdHJpbmchKSB7XFxuICAgIGFwaVRva2VuUmV2b2tlKHRva2VuOiAkdG9rZW4pXFxuICB9XFxuXCI6IHR5cGVzLkRlbGV0ZUFjY2Vzc1Rva2VuRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIENyZWF0ZUFjY2Vzc1Rva2VuKCR0b2tlbjogQXBpVG9rZW5DcmVhdGVJbnB1dCEpIHtcXG4gICAgYXBpVG9rZW5DcmVhdGUodG9rZW46ICR0b2tlbilcXG4gIH1cXG5cIjogdHlwZXMuQ3JlYXRlQWNjZXNzVG9rZW5Eb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gRGVsZXRlQXBwbGljYXRpb24oJGFwcElkOiBTdHJpbmchKSB7XFxuICAgIGFwcERlbGV0ZShhcHBJZDogJGFwcElkKVxcbiAgfVxcblwiOiB0eXBlcy5EZWxldGVBcHBsaWNhdGlvbkRvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBDcmVhdGVBcHBsaWNhdGlvbigkYXBwOiBBcHBDcmVhdGVJbnB1dCEpIHtcXG4gICAgYXBwQ3JlYXRlKGFwcDogJGFwcClcXG4gIH1cXG5cIjogdHlwZXMuQ3JlYXRlQXBwbGljYXRpb25Eb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gRWRpdEFwcGxpY2F0aW9uKCRhcHA6IEFwcFVwZGF0ZUlucHV0ISkge1xcbiAgICBhcHBVcGRhdGUoYXBwOiAkYXBwKVxcbiAgfVxcblwiOiB0eXBlcy5FZGl0QXBwbGljYXRpb25Eb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gUmV2b2tlQXBwQWNjZXNzKCRhcHBJZDogU3RyaW5nISkge1xcbiAgICBhcHBSZXZva2VBY2Nlc3MoYXBwSWQ6ICRhcHBJZClcXG4gIH1cXG5cIjogdHlwZXMuUmV2b2tlQXBwQWNjZXNzRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IERldmVsb3BlclNldHRpbmdzQWNjZXNzVG9rZW5zIHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgaWRcXG4gICAgICBhcGlUb2tlbnMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIG5hbWVcXG4gICAgICAgIGxhc3RVc2VkXFxuICAgICAgICBsYXN0Q2hhcnNcXG4gICAgICAgIGNyZWF0ZWRBdFxcbiAgICAgICAgc2NvcGVzXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkRldmVsb3BlclNldHRpbmdzQWNjZXNzVG9rZW5zRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IERldmVsb3BlclNldHRpbmdzQXBwbGljYXRpb25zIHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgY3JlYXRlZEFwcHMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHNlY3JldFxcbiAgICAgICAgbmFtZVxcbiAgICAgICAgZGVzY3JpcHRpb25cXG4gICAgICAgIHJlZGlyZWN0VXJsXFxuICAgICAgICBzY29wZXMge1xcbiAgICAgICAgICBuYW1lXFxuICAgICAgICAgIGRlc2NyaXB0aW9uXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIGlkXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuRGV2ZWxvcGVyU2V0dGluZ3NBcHBsaWNhdGlvbnNEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgRGV2ZWxvcGVyU2V0dGluZ3NBdXRob3JpemVkQXBwcyB7XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgYXV0aG9yaXplZEFwcHMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGRlc2NyaXB0aW9uXFxuICAgICAgICBuYW1lXFxuICAgICAgICBhdXRob3Ige1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBuYW1lXFxuICAgICAgICAgIGF2YXRhclxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5EZXZlbG9wZXJTZXR0aW5nc0F1dGhvcml6ZWRBcHBzRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFNlYXJjaFByb2plY3RzKFxcbiAgICAkc2VhcmNoOiBTdHJpbmdcXG4gICAgJG9ubHlXaXRoUm9sZXM6IFtTdHJpbmchXSA9IG51bGxcXG4gICAgJHdvcmtzcGFjZUlkOiBJRFxcbiAgKSB7XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIHByb2plY3RzKFxcbiAgICAgICAgbGltaXQ6IDEwXFxuICAgICAgICBmaWx0ZXI6IHtcXG4gICAgICAgICAgc2VhcmNoOiAkc2VhcmNoXFxuICAgICAgICAgIG9ubHlXaXRoUm9sZXM6ICRvbmx5V2l0aFJvbGVzXFxuICAgICAgICAgIHdvcmtzcGFjZUlkOiAkd29ya3NwYWNlSWRcXG4gICAgICAgIH1cXG4gICAgICApIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgLi4uRm9ybVNlbGVjdFByb2plY3RzX1Byb2plY3RcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuU2VhcmNoUHJvamVjdHNEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgU2VhcmNoUHJvamVjdE1vZGVscygkc2VhcmNoOiBTdHJpbmcsICRwcm9qZWN0SWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgbW9kZWxzKGxpbWl0OiAxMCwgZmlsdGVyOiB7IHNlYXJjaDogJHNlYXJjaCB9KSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIC4uLkZvcm1TZWxlY3RNb2RlbHNfTW9kZWxcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuU2VhcmNoUHJvamVjdE1vZGVsc0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBJbnRlcmNvbUFjdGl2ZVdvcmtzcGFjZSgkc2x1ZzogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHNsdWcpIHtcXG4gICAgICBpZFxcbiAgICAgIHBsYW4ge1xcbiAgICAgICAgbmFtZVxcbiAgICAgICAgc3RhdHVzXFxuICAgICAgfVxcbiAgICAgIHNlYXRzIHtcXG4gICAgICAgIGVkaXRvcnMge1xcbiAgICAgICAgICBhc3NpZ25lZFxcbiAgICAgICAgICBhdmFpbGFibGVcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuSW50ZXJjb21BY3RpdmVXb3Jrc3BhY2VEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgSW52aXRlVXNlclNlYXJjaCgkaW5wdXQ6IFVzZXJzUmV0cmlldmFsSW5wdXQhKSB7XFxuICAgIHVzZXJzKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICBpZFxcbiAgICAgICAgbmFtZVxcbiAgICAgICAgYXZhdGFyXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkludml0ZVVzZXJTZWFyY2hEb2N1bWVudCxcbiAgICBcIlxcbiAgZnJhZ21lbnQgSW52aXRlUHJvamVjdEl0ZW1fV29ya3NwYWNlQ29sbGFib3JhdG9yIG9uIFdvcmtzcGFjZUNvbGxhYm9yYXRvciB7XFxuICAgIGlkXFxuICAgIHVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIHNlYXRUeXBlXFxuICAgIHJvbGVcXG4gIH1cXG5cIjogdHlwZXMuSW52aXRlUHJvamVjdEl0ZW1fV29ya3NwYWNlQ29sbGFib3JhdG9yRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIG11dGF0aW9uIENyZWF0ZU5ld1JlZ2lvbigkaW5wdXQ6IENyZWF0ZVNlcnZlclJlZ2lvbklucHV0ISkge1xcbiAgICBzZXJ2ZXJJbmZvTXV0YXRpb25zIHtcXG4gICAgICBtdWx0aVJlZ2lvbiB7XFxuICAgICAgICBjcmVhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICAuLi5TZXR0aW5nc1NlcnZlclJlZ2lvbnNBZGRFZGl0RGlhbG9nX1NlcnZlclJlZ2lvbkl0ZW1cXG4gICAgICAgICAgLi4uU2V0dGluZ3NTZXJ2ZXJSZWdpb25zVGFibGVfU2VydmVyUmVnaW9uSXRlbVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5DcmVhdGVOZXdSZWdpb25Eb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gVXBkYXRlUmVnaW9uKCRpbnB1dDogVXBkYXRlU2VydmVyUmVnaW9uSW5wdXQhKSB7XFxuICAgIHNlcnZlckluZm9NdXRhdGlvbnMge1xcbiAgICAgIG11bHRpUmVnaW9uIHtcXG4gICAgICAgIHVwZGF0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLlNldHRpbmdzU2VydmVyUmVnaW9uc0FkZEVkaXREaWFsb2dfU2VydmVyUmVnaW9uSXRlbVxcbiAgICAgICAgICAuLi5TZXR0aW5nc1NlcnZlclJlZ2lvbnNUYWJsZV9TZXJ2ZXJSZWdpb25JdGVtXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlVwZGF0ZVJlZ2lvbkRvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBOYXZpZ2F0aW9uV29ya3NwYWNlU3dpdGNoZXIoJGpvaW5SZXF1ZXN0RmlsdGVyOiBXb3Jrc3BhY2VKb2luUmVxdWVzdEZpbHRlcikge1xcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLldvcmtzcGFjZVN3aXRjaGVyQWN0aXZlV29ya3NwYWNlX1VzZXJcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5OYXZpZ2F0aW9uV29ya3NwYWNlU3dpdGNoZXJEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgV29ya3NwYWNlU3dpdGNoZXJIZWFkZXJXb3Jrc3BhY2UoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgLi4uSGVhZGVyV29ya3NwYWNlU3dpdGNoZXJIZWFkZXJXb3Jrc3BhY2VfV29ya3NwYWNlXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuV29ya3NwYWNlU3dpdGNoZXJIZWFkZXJXb3Jrc3BhY2VEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgTmF2aWdhdGlvbldvcmtzcGFjZUxpc3QoXFxuICAgICR3b3Jrc3BhY2VGaWx0ZXI6IFVzZXJXb3Jrc3BhY2VzRmlsdGVyXFxuICAgICRwcm9qZWN0RmlsdGVyOiBVc2VyUHJvamVjdHNGaWx0ZXJcXG4gICkge1xcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICBpZFxcbiAgICAgIHdvcmtzcGFjZXMoZmlsdGVyOiAkd29ya3NwYWNlRmlsdGVyKSB7XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLkhlYWRlcldvcmtzcGFjZVN3aXRjaGVyV29ya3NwYWNlTGlzdEl0ZW1fV29ya3NwYWNlXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIHByb2plY3RzKGZpbHRlcjogJHByb2plY3RGaWx0ZXIpIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuTmF2aWdhdGlvbldvcmtzcGFjZUxpc3REb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgTmF2aWdhdGlvblByb2plY3RJbnZpdGVzIHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgaWRcXG4gICAgICBwcm9qZWN0SW52aXRlcyB7XFxuICAgICAgICAuLi5IZWFkZXJOYXZOb3RpZmljYXRpb25zUHJvamVjdEludml0ZV9QZW5kaW5nU3RyZWFtQ29sbGFib3JhdG9yXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLk5hdmlnYXRpb25Qcm9qZWN0SW52aXRlc0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBOYXZpZ2F0aW9uV29ya3NwYWNlSW52aXRlcyB7XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgd29ya3NwYWNlSW52aXRlcyB7XFxuICAgICAgICAuLi5IZWFkZXJOYXZOb3RpZmljYXRpb25zV29ya3NwYWNlSW52aXRlX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3JcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuTmF2aWdhdGlvbldvcmtzcGFjZUludml0ZXNEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gVXBkYXRlUHJlc2VudGF0aW9uU2xpZGUoJGlucHV0OiBVcGRhdGVTYXZlZFZpZXdJbnB1dCEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgc2F2ZWRWaWV3TXV0YXRpb25zIHtcXG4gICAgICAgIHVwZGF0ZVZpZXcoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBuYW1lXFxuICAgICAgICAgIGRlc2NyaXB0aW9uXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlVwZGF0ZVByZXNlbnRhdGlvblNsaWRlRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFByZXNlbnRhdGlvbkFjY2Vzc0NoZWNrKCRzYXZlZFZpZXdHcm91cElkOiBJRCEsICRwcm9qZWN0SWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgc2F2ZWRWaWV3R3JvdXAoaWQ6ICRzYXZlZFZpZXdHcm91cElkKSB7XFxuICAgICAgICBpZFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5QcmVzZW50YXRpb25BY2Nlc3NDaGVja0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBQcm9qZWN0UHJlc2VudGF0aW9uUGFnZShcXG4gICAgJGlucHV0OiBTYXZlZFZpZXdHcm91cFZpZXdzSW5wdXQhXFxuICAgICRzYXZlZFZpZXdHcm91cElkOiBJRCFcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIGxpbWl0ZWRXb3Jrc3BhY2Uge1xcbiAgICAgICAgaWRcXG4gICAgICAgIC4uLlByZXNlbnRhdGlvbkxlZnRTaWRlYmFyX0xpbWl0ZWRXb3Jrc3BhY2VcXG4gICAgICAgIC4uLlByZXNlbnRhdGlvbkxvYWRpbmdfTGltaXRlZFdvcmtzcGFjZVxcbiAgICAgIH1cXG4gICAgICBzYXZlZFZpZXdHcm91cChpZDogJHNhdmVkVmlld0dyb3VwSWQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICB0aXRsZVxcbiAgICAgICAgLi4uUHJlc2VudGF0aW9uVmlld2VyUGFnZVdyYXBwZXJfU2F2ZWRWaWV3R3JvdXBcXG4gICAgICAgIC4uLlByZXNlbnRhdGlvbkhlYWRlcl9TYXZlZFZpZXdHcm91cFxcbiAgICAgICAgLi4uUHJlc2VudGF0aW9uU2xpZGVMaXN0X1NhdmVkVmlld0dyb3VwXFxuICAgICAgICAuLi5QcmVzZW50YXRpb25QYWdlV3JhcHBlcl9TYXZlZFZpZXdHcm91cFxcbiAgICAgICAgLi4uUHJlc2VudGF0aW9uTG9hZGluZ19TYXZlZFZpZXdHcm91cFxcbiAgICAgICAgdmlld3MoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgICBpZFxcbiAgICAgICAgICAgIG5hbWVcXG4gICAgICAgICAgICBkZXNjcmlwdGlvblxcbiAgICAgICAgICAgIHRodW1ibmFpbFVybFxcbiAgICAgICAgICAgIHByb2plY3RJZFxcbiAgICAgICAgICAgIHZpc2liaWxpdHlcXG4gICAgICAgICAgICAuLi5QcmVzZW50YXRpb25JbmZvU2lkZWJhcl9TYXZlZFZpZXdcXG4gICAgICAgICAgICBncm91cCB7XFxuICAgICAgICAgICAgICBpZFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0UHJlc2VudGF0aW9uUGFnZURvY3VtZW50LFxuICAgIFwiXFxuICBmcmFnbWVudCBVc2VDb3B5TW9kZWxMaW5rX01vZGVsIG9uIE1vZGVsIHtcXG4gICAgaWRcXG4gICAgcHJvamVjdElkXFxuICAgIC4uLkdldE1vZGVsSXRlbVJvdXRlX01vZGVsXFxuICB9XFxuXCI6IHR5cGVzLlVzZUNvcHlNb2RlbExpbmtfTW9kZWxGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVXNlQ2FuQ3JlYXRlUGVyc29uYWxQcm9qZWN0X1VzZXIgb24gVXNlciB7XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVQZXJzb25hbFByb2plY3Qge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Vc2VDYW5DcmVhdGVQZXJzb25hbFByb2plY3RfVXNlckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBVc2VDYW5DcmVhdGVXb3Jrc3BhY2VfVXNlciBvbiBVc2VyIHtcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkNyZWF0ZVdvcmtzcGFjZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlVzZUNhbkNyZWF0ZVdvcmtzcGFjZV9Vc2VyRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFVzZUNhbkNyZWF0ZU1vZGVsX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVNb2RlbCB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlVzZUNhbkNyZWF0ZU1vZGVsX1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVXNlQ2FuSW52aXRlVG9Qcm9qZWN0X1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5JbnZpdGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Vc2VDYW5JbnZpdGVUb1Byb2plY3RfUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZVRlYW1JbnRlcm5hbHNfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgcm9sZVxcbiAgICBpbnZpdGVkVGVhbSB7XFxuICAgICAgaWRcXG4gICAgICB0aXRsZVxcbiAgICAgIHJvbGVcXG4gICAgICBpbnZpdGVJZFxcbiAgICAgIHVzZXIge1xcbiAgICAgICAgcm9sZVxcbiAgICAgICAgLi4uTGltaXRlZFVzZXJBdmF0YXJcXG4gICAgICB9XFxuICAgIH1cXG4gICAgdGVhbSB7XFxuICAgICAgcm9sZVxcbiAgICAgIHNlYXRUeXBlXFxuICAgICAgd29ya3NwYWNlUm9sZVxcbiAgICAgIHVzZXIge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHJvbGVcXG4gICAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RQYWdlVGVhbUludGVybmFsc19Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlVGVhbURpYWxvZyBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICByb2xlXFxuICAgIGFsbG93UHVibGljQ29tbWVudHNcXG4gICAgdmlzaWJpbGl0eVxcbiAgICB0ZWFtIHtcXG4gICAgICBpZFxcbiAgICAgIHJvbGVcXG4gICAgICB1c2VyIHtcXG4gICAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgICAgICByb2xlXFxuICAgICAgfVxcbiAgICB9XFxuICAgIGludml0ZWRUZWFtIHtcXG4gICAgICBpZFxcbiAgICAgIHRpdGxlXFxuICAgICAgaW52aXRlSWRcXG4gICAgICByb2xlXFxuICAgICAgdXNlciB7XFxuICAgICAgICAuLi5MaW1pdGVkVXNlckF2YXRhclxcbiAgICAgICAgcm9sZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5Qcm9qZWN0c1BhZ2VUZWFtRGlhbG9nTWFuYWdlUGVybWlzc2lvbnNfUHJvamVjdFxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0UGFnZVRlYW1EaWFsb2dGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdERhc2hib2FyZEl0ZW1Ob01vZGVscyBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBjcmVhdGVkQXRcXG4gICAgdXBkYXRlZEF0XFxuICAgIHJvbGVcXG4gICAgdGVhbSB7XFxuICAgICAgaWRcXG4gICAgICB1c2VyIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBuYW1lXFxuICAgICAgICBhdmF0YXJcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uUHJvamVjdFBhZ2VNb2RlbHNDYXJkUHJvamVjdFxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0RGFzaGJvYXJkSXRlbU5vTW9kZWxzRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3REYXNoYm9hcmRJdGVtIG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICAuLi5Qcm9qZWN0RGFzaGJvYXJkSXRlbU5vTW9kZWxzXFxuICAgIC4uLlByb2plY3RDYXJkSW1wb3J0RmlsZUFyZWFfUHJvamVjdFxcbiAgICBtb2RlbHMobGltaXQ6IDMpIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgLi4uUHJvamVjdFBhZ2VMYXRlc3RJdGVtc01vZGVsSXRlbVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgc2x1Z1xcbiAgICAgIG5hbWVcXG4gICAgICBsb2dvXFxuICAgICAgcmVhZE9ubHlcXG4gICAgfVxcbiAgICBwZW5kaW5nSW1wb3J0ZWRNb2RlbHMobGltaXQ6IDMpIHtcXG4gICAgICAuLi5QZW5kaW5nRmlsZVVwbG9hZFxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3REYXNoYm9hcmRJdGVtRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFBlbmRpbmdGaWxlVXBsb2FkIG9uIEZpbGVVcGxvYWQge1xcbiAgICBpZFxcbiAgICBwcm9qZWN0SWRcXG4gICAgbW9kZWxOYW1lXFxuICAgIGNvbnZlcnRlZFN0YXR1c1xcbiAgICBjb252ZXJ0ZWRNZXNzYWdlXFxuICAgIHVwbG9hZERhdGVcXG4gICAgY29udmVydGVkTGFzdFVwZGF0ZVxcbiAgICBmaWxlVHlwZVxcbiAgICBmaWxlTmFtZVxcbiAgICB1c2VySWRcXG4gICAgdXBkYXRlZEF0XFxuICB9XFxuXCI6IHR5cGVzLlBlbmRpbmdGaWxlVXBsb2FkRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlTGF0ZXN0SXRlbXNNb2RlbEl0ZW0gb24gTW9kZWwge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGRpc3BsYXlOYW1lXFxuICAgIHByb2plY3RJZFxcbiAgICB2ZXJzaW9uQ291bnQ6IHZlcnNpb25zKGxpbWl0OiAwKSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICAgIGNvbW1lbnRUaHJlYWRDb3VudDogY29tbWVudFRocmVhZHMobGltaXQ6IDApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgcGVuZGluZ0ltcG9ydGVkVmVyc2lvbnMobGltaXQ6IDEpIHtcXG4gICAgICAuLi5QZW5kaW5nRmlsZVVwbG9hZFxcbiAgICB9XFxuICAgIHByZXZpZXdVcmxcXG4gICAgY3JlYXRlZEF0XFxuICAgIHVwZGF0ZWRBdFxcbiAgICAuLi5Qcm9qZWN0UGFnZU1vZGVsc0NhcmRfTW9kZWxcXG4gICAgLi4uUHJvamVjdFBhZ2VNb2RlbHNDYXJkUmVuYW1lRGlhbG9nXFxuICAgIC4uLlByb2plY3RQYWdlTW9kZWxzQ2FyZERlbGV0ZURpYWxvZ1xcbiAgICAuLi5Qcm9qZWN0UGFnZU1vZGVsc0FjdGlvbnNcXG4gICAgLi4uUHJvamVjdENhcmRJbXBvcnRGaWxlQXJlYV9Nb2RlbFxcbiAgICBhdXRvbWF0aW9uc1N0YXR1cyB7XFxuICAgICAgLi4uQXV0b21hdGVSdW5zVHJpZ2dlclN0YXR1c19UcmlnZ2VyZWRBdXRvbWF0aW9uc1N0YXR1c1xcbiAgICB9XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5VcGRhdGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5EZWxldGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0UGFnZUxhdGVzdEl0ZW1zTW9kZWxJdGVtRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RVcGRhdGFibGVNZXRhZGF0YSBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBkZXNjcmlwdGlvblxcbiAgICB2aXNpYmlsaXR5XFxuICAgIGFsbG93UHVibGljQ29tbWVudHNcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhblJlYWQge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5VcGRhdGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5VcGRhdGVBbGxvd1B1YmxpY0NvbW1lbnRzIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuUmVhZFNldHRpbmdzIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuUmVhZFdlYmhvb2tzIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuTGVhdmUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0VXBkYXRhYmxlTWV0YWRhdGFGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VMYXRlc3RJdGVtc01vZGVscyBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgcm9sZVxcbiAgICB2aXNpYmlsaXR5XFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICByZWFkT25seVxcbiAgICB9XFxuICAgIG1vZGVsQ291bnQ6IG1vZGVscyhsaW1pdDogMCkge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgfVxcbiAgICAuLi5Qcm9qZWN0UGFnZU1vZGVsc1N0cnVjdHVyZUl0ZW1fUHJvamVjdFxcbiAgICAuLi5Qcm9qZWN0Q2FyZEltcG9ydEZpbGVBcmVhX1Byb2plY3RcXG4gICAgLi4uUHJvamVjdE1vZGVsc0FkZF9Qcm9qZWN0XFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RQYWdlTGF0ZXN0SXRlbXNNb2RlbHNGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VMYXRlc3RJdGVtc0NvbW1lbnRzIG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBjb21tZW50VGhyZWFkQ291bnQ6IGNvbW1lbnRUaHJlYWRzKGxpbWl0OiAwKSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RQYWdlTGF0ZXN0SXRlbXNDb21tZW50c0ZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZUxhdGVzdEl0ZW1zQ29tbWVudEl0ZW0gb24gQ29tbWVudCB7XFxuICAgIGlkXFxuICAgIGF1dGhvciB7XFxuICAgICAgLi4uRm9ybVVzZXJzU2VsZWN0SXRlbVxcbiAgICB9XFxuICAgIHNjcmVlbnNob3RcXG4gICAgcmF3VGV4dFxcbiAgICBjcmVhdGVkQXRcXG4gICAgdXBkYXRlZEF0XFxuICAgIGFyY2hpdmVkXFxuICAgIHJlcGxpZXNDb3VudDogcmVwbGllcyhsaW1pdDogMCkge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgfVxcbiAgICByZXBseUF1dGhvcnMobGltaXQ6IDQpIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgLi4uRm9ybVVzZXJzU2VsZWN0SXRlbVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0UGFnZUxhdGVzdEl0ZW1zQ29tbWVudEl0ZW1GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgbXV0YXRpb24gQ3JlYXRlTW9kZWwoJGlucHV0OiBDcmVhdGVNb2RlbElucHV0ISkge1xcbiAgICBtb2RlbE11dGF0aW9ucyB7XFxuICAgICAgY3JlYXRlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIC4uLlByb2plY3RQYWdlTGF0ZXN0SXRlbXNNb2RlbEl0ZW1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuQ3JlYXRlTW9kZWxEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gQ3JlYXRlUHJvamVjdCgkaW5wdXQ6IFByb2plY3RDcmVhdGVJbnB1dCkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBjcmVhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgLi4uUHJvamVjdFBhZ2VQcm9qZWN0XFxuICAgICAgICAuLi5Qcm9qZWN0RGFzaGJvYXJkSXRlbVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5DcmVhdGVQcm9qZWN0RG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIENyZWF0ZVdvcmtzcGFjZVByb2plY3QoJGlucHV0OiBXb3Jrc3BhY2VQcm9qZWN0Q3JlYXRlSW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgcHJvamVjdHMge1xcbiAgICAgICAgY3JlYXRlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgLi4uUHJvamVjdFBhZ2VQcm9qZWN0XFxuICAgICAgICAgIC4uLlByb2plY3REYXNoYm9hcmRJdGVtXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkNyZWF0ZVdvcmtzcGFjZVByb2plY3REb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gVXBkYXRlTW9kZWwoJGlucHV0OiBVcGRhdGVNb2RlbElucHV0ISkge1xcbiAgICBtb2RlbE11dGF0aW9ucyB7XFxuICAgICAgdXBkYXRlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIC4uLlByb2plY3RQYWdlTGF0ZXN0SXRlbXNNb2RlbEl0ZW1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuVXBkYXRlTW9kZWxEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gRGVsZXRlTW9kZWwoJGlucHV0OiBEZWxldGVNb2RlbElucHV0ISkge1xcbiAgICBtb2RlbE11dGF0aW9ucyB7XFxuICAgICAgZGVsZXRlKGlucHV0OiAkaW5wdXQpXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuRGVsZXRlTW9kZWxEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gVXBkYXRlUHJvamVjdFJvbGUoJGlucHV0OiBQcm9qZWN0VXBkYXRlUm9sZUlucHV0ISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICB1cGRhdGVSb2xlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICB0ZWFtIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgcm9sZVxcbiAgICAgICAgICB1c2VyIHtcXG4gICAgICAgICAgICAuLi5MaW1pdGVkVXNlckF2YXRhclxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlVwZGF0ZVByb2plY3RSb2xlRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIFVwZGF0ZVdvcmtzcGFjZVByb2plY3RSb2xlKCRpbnB1dDogUHJvamVjdFVwZGF0ZVJvbGVJbnB1dCEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICBwcm9qZWN0cyB7XFxuICAgICAgICB1cGRhdGVSb2xlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgdGVhbSB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICByb2xlXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuVXBkYXRlV29ya3NwYWNlUHJvamVjdFJvbGVEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gSW52aXRlUHJvamVjdFVzZXIoJHByb2plY3RJZDogSUQhLCAkaW5wdXQ6IFtQcm9qZWN0SW52aXRlQ3JlYXRlSW5wdXQhXSEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgaW52aXRlcyB7XFxuICAgICAgICBiYXRjaENyZWF0ZShwcm9qZWN0SWQ6ICRwcm9qZWN0SWQsIGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgLi4uUHJvamVjdFBhZ2VUZWFtRGlhbG9nXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkludml0ZVByb2plY3RVc2VyRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIEludml0ZVdvcmtzcGFjZVByb2plY3RVc2VyKFxcbiAgICAkcHJvamVjdElkOiBJRCFcXG4gICAgJGlucHV0czogW1dvcmtzcGFjZVByb2plY3RJbnZpdGVDcmVhdGVJbnB1dCFdIVxcbiAgKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIGludml0ZXMge1xcbiAgICAgICAgY3JlYXRlRm9yV29ya3NwYWNlKHByb2plY3RJZDogJHByb2plY3RJZCwgaW5wdXRzOiAkaW5wdXRzKSB7XFxuICAgICAgICAgIC4uLlByb2plY3RQYWdlVGVhbURpYWxvZ1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5JbnZpdGVXb3Jrc3BhY2VQcm9qZWN0VXNlckRvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBDYW5jZWxQcm9qZWN0SW52aXRlKCRwcm9qZWN0SWQ6IElEISwgJGludml0ZUlkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIGludml0ZXMge1xcbiAgICAgICAgY2FuY2VsKHByb2plY3RJZDogJHByb2plY3RJZCwgaW52aXRlSWQ6ICRpbnZpdGVJZCkge1xcbiAgICAgICAgICAuLi5Qcm9qZWN0UGFnZVRlYW1EaWFsb2dcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuQ2FuY2VsUHJvamVjdEludml0ZURvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBVcGRhdGVQcm9qZWN0TWV0YWRhdGEoJHVwZGF0ZTogUHJvamVjdFVwZGF0ZUlucHV0ISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICB1cGRhdGUodXBkYXRlOiAkdXBkYXRlKSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgLi4uUHJvamVjdFVwZGF0YWJsZU1ldGFkYXRhXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlVwZGF0ZVByb2plY3RNZXRhZGF0YURvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBEZWxldGVQcm9qZWN0KCRpZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBkZWxldGUoaWQ6ICRpZClcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5EZWxldGVQcm9qZWN0RG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIFVzZVByb2plY3RJbnZpdGUoJGlucHV0OiBQcm9qZWN0SW52aXRlVXNlSW5wdXQhKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIGludml0ZXMge1xcbiAgICAgICAgdXNlKGlucHV0OiAkaW5wdXQpXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlVzZVByb2plY3RJbnZpdGVEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gTGVhdmVQcm9qZWN0KCRwcm9qZWN0SWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgbGVhdmUoaWQ6ICRwcm9qZWN0SWQpXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuTGVhdmVQcm9qZWN0RG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIERlbGV0ZVZlcnNpb25zKCRpbnB1dDogRGVsZXRlVmVyc2lvbnNJbnB1dCEpIHtcXG4gICAgdmVyc2lvbk11dGF0aW9ucyB7XFxuICAgICAgZGVsZXRlKGlucHV0OiAkaW5wdXQpXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuRGVsZXRlVmVyc2lvbnNEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gTW92ZVZlcnNpb25zKCRpbnB1dDogTW92ZVZlcnNpb25zSW5wdXQhKSB7XFxuICAgIHZlcnNpb25NdXRhdGlvbnMge1xcbiAgICAgIG1vdmVUb01vZGVsKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLk1vdmVWZXJzaW9uc0RvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBVcGRhdGVWZXJzaW9uKCRpbnB1dDogVXBkYXRlVmVyc2lvbklucHV0ISkge1xcbiAgICB2ZXJzaW9uTXV0YXRpb25zIHtcXG4gICAgICB1cGRhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIG1lc3NhZ2VcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuVXBkYXRlVmVyc2lvbkRvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBkZWxldGVXZWJob29rKCR3ZWJob29rOiBXZWJob29rRGVsZXRlSW5wdXQhKSB7XFxuICAgIHdlYmhvb2tEZWxldGUod2ViaG9vazogJHdlYmhvb2spXFxuICB9XFxuXCI6IHR5cGVzLkRlbGV0ZVdlYmhvb2tEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gY3JlYXRlV2ViaG9vaygkd2ViaG9vazogV2ViaG9va0NyZWF0ZUlucHV0ISkge1xcbiAgICB3ZWJob29rQ3JlYXRlKHdlYmhvb2s6ICR3ZWJob29rKVxcbiAgfVxcblwiOiB0eXBlcy5DcmVhdGVXZWJob29rRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIHVwZGF0ZVdlYmhvb2soJHdlYmhvb2s6IFdlYmhvb2tVcGRhdGVJbnB1dCEpIHtcXG4gICAgd2ViaG9va1VwZGF0ZSh3ZWJob29rOiAkd2ViaG9vaylcXG4gIH1cXG5cIjogdHlwZXMuVXBkYXRlV2ViaG9va0RvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBDcmVhdGVBdXRvbWF0aW9uKCRwcm9qZWN0SWQ6IElEISwgJGlucHV0OiBQcm9qZWN0QXV0b21hdGlvbkNyZWF0ZUlucHV0ISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBhdXRvbWF0aW9uTXV0YXRpb25zKHByb2plY3RJZDogJHByb2plY3RJZCkge1xcbiAgICAgICAgY3JlYXRlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uUHJvamVjdFBhZ2VBdXRvbWF0aW9uc1Jvd19BdXRvbWF0aW9uXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkNyZWF0ZUF1dG9tYXRpb25Eb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gRGVsZXRlQXV0b21hdGlvbigkcHJvamVjdElkOiBJRCEsICRhdXRvbWF0aW9uSWQ6IElEISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBhdXRvbWF0aW9uTXV0YXRpb25zKHByb2plY3RJZDogJHByb2plY3RJZCkge1xcbiAgICAgICAgZGVsZXRlKGF1dG9tYXRpb25JZDogJGF1dG9tYXRpb25JZClcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuRGVsZXRlQXV0b21hdGlvbkRvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBVcGRhdGVBdXRvbWF0aW9uKCRwcm9qZWN0SWQ6IElEISwgJGlucHV0OiBQcm9qZWN0QXV0b21hdGlvblVwZGF0ZUlucHV0ISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBhdXRvbWF0aW9uTXV0YXRpb25zKHByb2plY3RJZDogJHByb2plY3RJZCkge1xcbiAgICAgICAgdXBkYXRlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgbmFtZVxcbiAgICAgICAgICBlbmFibGVkXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlVwZGF0ZUF1dG9tYXRpb25Eb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gQ3JlYXRlQXV0b21hdGlvblJldmlzaW9uKFxcbiAgICAkcHJvamVjdElkOiBJRCFcXG4gICAgJGlucHV0OiBQcm9qZWN0QXV0b21hdGlvblJldmlzaW9uQ3JlYXRlSW5wdXQhXFxuICApIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgYXV0b21hdGlvbk11dGF0aW9ucyhwcm9qZWN0SWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICAgIGNyZWF0ZVJldmlzaW9uKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuQ3JlYXRlQXV0b21hdGlvblJldmlzaW9uRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIFRyaWdnZXJBdXRvbWF0aW9uKCRwcm9qZWN0SWQ6IElEISwgJGF1dG9tYXRpb25JZDogSUQhKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIGF1dG9tYXRpb25NdXRhdGlvbnMocHJvamVjdElkOiAkcHJvamVjdElkKSB7XFxuICAgICAgICB0cmlnZ2VyKGF1dG9tYXRpb25JZDogJGF1dG9tYXRpb25JZClcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuVHJpZ2dlckF1dG9tYXRpb25Eb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gQ3JlYXRlVGVzdEF1dG9tYXRpb24oXFxuICAgICRwcm9qZWN0SWQ6IElEIVxcbiAgICAkaW5wdXQ6IFByb2plY3RUZXN0QXV0b21hdGlvbkNyZWF0ZUlucHV0IVxcbiAgKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIGF1dG9tYXRpb25NdXRhdGlvbnMocHJvamVjdElkOiAkcHJvamVjdElkKSB7XFxuICAgICAgICBjcmVhdGVUZXN0QXV0b21hdGlvbihpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLlByb2plY3RQYWdlQXV0b21hdGlvbnNSb3dfQXV0b21hdGlvblxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5DcmVhdGVUZXN0QXV0b21hdGlvbkRvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBNb3ZlUHJvamVjdFRvV29ya3NwYWNlKCR3b3Jrc3BhY2VJZDogU3RyaW5nISwgJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIHByb2plY3RzIHtcXG4gICAgICAgIG1vdmVUb1dvcmtzcGFjZSh3b3Jrc3BhY2VJZDogJHdvcmtzcGFjZUlkLCBwcm9qZWN0SWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgd29ya3NwYWNlSWRcXG4gICAgICAgICAgd29ya3NwYWNlIHtcXG4gICAgICAgICAgICBpZFxcbiAgICAgICAgICAgIHByb2plY3RzIHtcXG4gICAgICAgICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLi4uV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1dvcmtzcGFjZVxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLk1vdmVQcm9qZWN0VG9Xb3Jrc3BhY2VEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gQ3JlYXRlRW1iZWRUb2tlbigkdG9rZW46IEVtYmVkVG9rZW5DcmVhdGVJbnB1dCEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgY3JlYXRlRW1iZWRUb2tlbih0b2tlbjogJHRva2VuKSB7XFxuICAgICAgICB0b2tlblxcbiAgICAgICAgdG9rZW5NZXRhZGF0YSB7XFxuICAgICAgICAgIHByb2plY3RJZFxcbiAgICAgICAgICB0b2tlbklkXFxuICAgICAgICAgIC4uLlByb2plY3RQYWdlU2V0dGluZ3NUb2tlbnNfRW1iZWRUb2tlblxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5DcmVhdGVFbWJlZFRva2VuRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIERlbGV0ZUVtYmVkVG9rZW4oJHByb2plY3RJZDogU3RyaW5nISwgJHRva2VuOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIHJldm9rZUVtYmVkVG9rZW4ocHJvamVjdElkOiAkcHJvamVjdElkLCB0b2tlbjogJHRva2VuKVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkRlbGV0ZUVtYmVkVG9rZW5Eb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gUmV2b2tlRW1iZWRUb2tlbnMoJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICByZXZva2VFbWJlZFRva2Vucyhwcm9qZWN0SWQ6ICRwcm9qZWN0SWQpXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuUmV2b2tlRW1iZWRUb2tlbnNEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgUHJvamVjdEFjY2Vzc0NoZWNrKCRpZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkaWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICAgIGNhblJlYWQge1xcbiAgICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIHdvcmtzcGFjZUlkXFxuICAgIH1cXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgaWRcXG4gICAgICBhY3RpdmVXb3Jrc3BhY2Uge1xcbiAgICAgICAgaWRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdEFjY2Vzc0NoZWNrRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFByb2plY3RzRGFzaGJvYXJkUXVlcnkoJGZpbHRlcjogVXNlclByb2plY3RzRmlsdGVyLCAkY3Vyc29yOiBTdHJpbmcpIHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgaWRcXG4gICAgICBwcm9qZWN0cyhmaWx0ZXI6ICRmaWx0ZXIsIGxpbWl0OiA2LCBjdXJzb3I6ICRjdXJzb3IpIHtcXG4gICAgICAgIC4uLlByb2plY3RzRGFzaGJvYXJkX1VzZXJQcm9qZWN0Q29sbGVjdGlvblxcbiAgICAgICAgY3Vyc29yXFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIC4uLlByb2plY3REYXNoYm9hcmRJdGVtXFxuICAgICAgICAgIC4uLldvcmtzcGFjZU1vdmVQcm9qZWN0X1Byb2plY3RcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgLi4uUHJvamVjdHNIaWRkZW5Qcm9qZWN0V2FybmluZ19Vc2VyXFxuICAgICAgLi4uUHJvamVjdHNEYXNoYm9hcmRfVXNlclxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RzRGFzaGJvYXJkUXVlcnlEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgUHJvamVjdFBhZ2VRdWVyeSgkaWQ6IFN0cmluZyEsICR0b2tlbjogU3RyaW5nKSB7XFxuICAgIHByb2plY3QoaWQ6ICRpZCkge1xcbiAgICAgIC4uLlByb2plY3RQYWdlUHJvamVjdFxcbiAgICB9XFxuICAgIHByb2plY3RJbnZpdGUocHJvamVjdElkOiAkaWQsIHRva2VuOiAkdG9rZW4pIHtcXG4gICAgICAuLi5Qcm9qZWN0c0ludml0ZUJhbm5lclxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RQYWdlUXVlcnlEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgUHJvamVjdExhdGVzdE1vZGVscygkcHJvamVjdElkOiBTdHJpbmchLCAkZmlsdGVyOiBQcm9qZWN0TW9kZWxzRmlsdGVyKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIG1vZGVscyhjdXJzb3I6IG51bGwsIGxpbWl0OiAxNiwgZmlsdGVyOiAkZmlsdGVyKSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBjdXJzb3JcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgLi4uUHJvamVjdFBhZ2VMYXRlc3RJdGVtc01vZGVsSXRlbVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICBwZW5kaW5nSW1wb3J0ZWRNb2RlbHMge1xcbiAgICAgICAgLi4uUGVuZGluZ0ZpbGVVcGxvYWRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdExhdGVzdE1vZGVsc0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBQcm9qZWN0TGF0ZXN0TW9kZWxzUGFnaW5hdGlvbihcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkZmlsdGVyOiBQcm9qZWN0TW9kZWxzRmlsdGVyXFxuICAgICRjdXJzb3I6IFN0cmluZyA9IG51bGxcXG4gICAgJGxpbWl0OiBJbnQgPSAxNlxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIG1vZGVscyhjdXJzb3I6ICRjdXJzb3IsIGxpbWl0OiAkbGltaXQsIGZpbHRlcjogJGZpbHRlcikge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgY3Vyc29yXFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIC4uLlByb2plY3RQYWdlTGF0ZXN0SXRlbXNNb2RlbEl0ZW1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdExhdGVzdE1vZGVsc1BhZ2luYXRpb25Eb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgUHJvamVjdE1vZGVsc1RyZWVUb3BMZXZlbChcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkZmlsdGVyOiBQcm9qZWN0TW9kZWxzVHJlZUZpbHRlclxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIG1vZGVsc1RyZWUoY3Vyc29yOiBudWxsLCBsaW1pdDogOCwgZmlsdGVyOiAkZmlsdGVyKSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBjdXJzb3JcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgLi4uU2luZ2xlTGV2ZWxNb2RlbFRyZWVJdGVtXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIHBlbmRpbmdJbXBvcnRlZE1vZGVscyB7XFxuICAgICAgICAuLi5QZW5kaW5nRmlsZVVwbG9hZFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0TW9kZWxzVHJlZVRvcExldmVsRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFByb2plY3RNb2RlbHNUcmVlVG9wTGV2ZWxQYWdpbmF0aW9uKFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRmaWx0ZXI6IFByb2plY3RNb2RlbHNUcmVlRmlsdGVyXFxuICAgICRjdXJzb3I6IFN0cmluZyA9IG51bGxcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBtb2RlbHNUcmVlKGN1cnNvcjogJGN1cnNvciwgbGltaXQ6IDgsIGZpbHRlcjogJGZpbHRlcikge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgY3Vyc29yXFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIC4uLlNpbmdsZUxldmVsTW9kZWxUcmVlSXRlbVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0TW9kZWxzVHJlZVRvcExldmVsUGFnaW5hdGlvbkRvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBQcm9qZWN0TW9kZWxDaGlsZHJlblRyZWUoJHByb2plY3RJZDogU3RyaW5nISwgJHBhcmVudE5hbWU6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgbW9kZWxDaGlsZHJlblRyZWUoZnVsbE5hbWU6ICRwYXJlbnROYW1lKSB7XFxuICAgICAgICAuLi5TaW5nbGVMZXZlbE1vZGVsVHJlZUl0ZW1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdE1vZGVsQ2hpbGRyZW5UcmVlRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFByb2plY3RMYXRlc3RDb21tZW50VGhyZWFkcyhcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkY3Vyc29yOiBTdHJpbmcgPSBudWxsXFxuICAgICRmaWx0ZXI6IFByb2plY3RDb21tZW50c0ZpbHRlciA9IG51bGxcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBjb21tZW50VGhyZWFkcyhjdXJzb3I6ICRjdXJzb3IsIGxpbWl0OiA4LCBmaWx0ZXI6ICRmaWx0ZXIpIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIGN1cnNvclxcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAuLi5Qcm9qZWN0UGFnZUxhdGVzdEl0ZW1zQ29tbWVudEl0ZW1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgLi4uVmlld2VyUmVzb3VyY2VzTGltaXRBbGVydF9Qcm9qZWN0XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdExhdGVzdENvbW1lbnRUaHJlYWRzRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFByb2plY3RJbnZpdGUoJHByb2plY3RJZDogU3RyaW5nISwgJHRva2VuOiBTdHJpbmcpIHtcXG4gICAgcHJvamVjdEludml0ZShwcm9qZWN0SWQ6ICRwcm9qZWN0SWQsIHRva2VuOiAkdG9rZW4pIHtcXG4gICAgICAuLi5Qcm9qZWN0c0ludml0ZUJhbm5lclxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RJbnZpdGVEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgUHJvamVjdE1vZGVsQ2hlY2soJHByb2plY3RJZDogU3RyaW5nISwgJG1vZGVsSWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIHZpc2liaWxpdHlcXG4gICAgICBtb2RlbChpZDogJG1vZGVsSWQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RNb2RlbENoZWNrRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFByb2plY3RNb2RlbFBhZ2UoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJG1vZGVsSWQ6IFN0cmluZyFcXG4gICAgJHZlcnNpb25zQ3Vyc29yOiBTdHJpbmdcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5Qcm9qZWN0TW9kZWxQYWdlSGVhZGVyUHJvamVjdFxcbiAgICAgIC4uLlByb2plY3RNb2RlbFBhZ2VWZXJzaW9uc1Byb2plY3RcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0TW9kZWxQYWdlRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFByb2plY3RNb2RlbFZlcnNpb25zKFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRtb2RlbElkOiBTdHJpbmchXFxuICAgICR2ZXJzaW9uc0N1cnNvcjogU3RyaW5nXFxuICApIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgLi4uUHJvamVjdE1vZGVsUGFnZVZlcnNpb25zUGFnaW5hdGlvblxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RNb2RlbFZlcnNpb25zRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFByb2plY3RNb2RlbHNQYWdlKCRwcm9qZWN0SWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgLi4uUHJvamVjdE1vZGVsc1BhZ2VIZWFkZXJfUHJvamVjdFxcbiAgICAgIC4uLlByb2plY3RNb2RlbHNQYWdlUmVzdWx0c19Qcm9qZWN0XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdE1vZGVsc1BhZ2VEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgUHJvamVjdERpc2N1c3Npb25zUGFnZSgkcHJvamVjdElkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLlByb2plY3REaXNjdXNzaW9uc1BhZ2VIZWFkZXJfUHJvamVjdFxcbiAgICAgIC4uLlByb2plY3REaXNjdXNzaW9uc1BhZ2VSZXN1bHRzX1Byb2plY3RcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0RGlzY3Vzc2lvbnNQYWdlRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFByb2plY3RBdXRvbWF0aW9uc1RhYigkcHJvamVjdElkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHJvbGVcXG4gICAgICBtb2RlbHMobGltaXQ6IDEpIHtcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgYXV0b21hdGlvbnMoZmlsdGVyOiBudWxsLCBjdXJzb3I6IG51bGwsIGxpbWl0OiA1KSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLlByb2plY3RQYWdlQXV0b21hdGlvbnNSb3dfQXV0b21hdGlvblxcbiAgICAgICAgfVxcbiAgICAgICAgY3Vyc29yXFxuICAgICAgfVxcbiAgICAgIHdvcmtzcGFjZSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgYXV0b21hdGVGdW5jdGlvbnMobGltaXQ6IDApIHtcXG4gICAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgfVxcbiAgICAgICAgLi4uQXV0b21hdGVGdW5jdGlvbkNyZWF0ZURpYWxvZ19Xb3Jrc3BhY2VcXG4gICAgICB9XFxuICAgICAgcGVybWlzc2lvbnMge1xcbiAgICAgICAgY2FuQ3JlYXRlQXV0b21hdGlvbiB7XFxuICAgICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgLi4uRm9ybVNlbGVjdFByb2plY3RzX1Byb2plY3RcXG4gICAgfVxcbiAgICAuLi5BdXRvbWF0ZUZ1bmN0aW9uc1BhZ2VIZWFkZXJfUXVlcnlcXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdEF1dG9tYXRpb25zVGFiRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFByb2plY3RBdXRvbWF0aW9uc1RhYkF1dG9tYXRpb25zUGFnaW5hdGlvbihcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkc2VhcmNoOiBTdHJpbmcgPSBudWxsXFxuICAgICRjdXJzb3I6IFN0cmluZyA9IG51bGxcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBhdXRvbWF0aW9ucyhmaWx0ZXI6ICRzZWFyY2gsIGN1cnNvcjogJGN1cnNvciwgbGltaXQ6IDUpIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIGN1cnNvclxcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICAuLi5Qcm9qZWN0UGFnZUF1dG9tYXRpb25zUm93X0F1dG9tYXRpb25cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdEF1dG9tYXRpb25zVGFiQXV0b21hdGlvbnNQYWdpbmF0aW9uRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFByb2plY3RBdXRvbWF0aW9uUGFnZSgkcHJvamVjdElkOiBTdHJpbmchLCAkYXV0b21hdGlvbklkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLlByb2plY3RQYWdlQXV0b21hdGlvblBhZ2VfUHJvamVjdFxcbiAgICAgIGF1dG9tYXRpb24oaWQ6ICRhdXRvbWF0aW9uSWQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5Qcm9qZWN0UGFnZUF1dG9tYXRpb25QYWdlX0F1dG9tYXRpb25cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdEF1dG9tYXRpb25QYWdlRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFByb2plY3RBdXRvbWF0aW9uUGFnZVBhZ2luYXRlZFJ1bnMoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJGF1dG9tYXRpb25JZDogU3RyaW5nIVxcbiAgICAkY3Vyc29yOiBTdHJpbmcgPSBudWxsXFxuICApIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgYXV0b21hdGlvbihpZDogJGF1dG9tYXRpb25JZCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHJ1bnMoY3Vyc29yOiAkY3Vyc29yLCBsaW1pdDogMTApIHtcXG4gICAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgICBjdXJzb3JcXG4gICAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgLi4uQXV0b21hdGlvblJ1bkRldGFpbHNcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0QXV0b21hdGlvblBhZ2VQYWdpbmF0ZWRSdW5zRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFByb2plY3RBdXRvbWF0aW9uQWNjZXNzQ2hlY2soJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBhdXRvbWF0aW9ucyhsaW1pdDogMCkge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0QXV0b21hdGlvbkFjY2Vzc0NoZWNrRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFByb2plY3RXZWJob29rcygkcHJvamVjdElkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgICAuLi5Qcm9qZWN0UGFnZVNldHRpbmdzV2ViaG9va3NfUHJvamVjdFxcbiAgICAgIHdlYmhvb2tzIHtcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgc3RyZWFtSWRcXG4gICAgICAgICAgdHJpZ2dlcnNcXG4gICAgICAgICAgZW5hYmxlZFxcbiAgICAgICAgICB1cmxcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgZGVzY3JpcHRpb25cXG4gICAgICAgICAgaGlzdG9yeShsaW1pdDogNSkge1xcbiAgICAgICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgICAgIHN0YXR1c1xcbiAgICAgICAgICAgICAgc3RhdHVzSW5mb1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0V2ViaG9va3NEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgUHJvamVjdEludGVncmF0aW9ucygkcHJvamVjdElkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgICAuLi5Qcm9qZWN0UGFnZVNldHRpbmdzSW50ZWdyYXRpb25zX1Byb2plY3RcXG4gICAgICBhY2NTeW5jSXRlbXMge1xcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgfVxcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0SW50ZWdyYXRpb25zRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFByb2plY3RFbWJlZFRva2VucygkcHJvamVjdElkOiBTdHJpbmchLCAkY3Vyc29yOiBTdHJpbmcgPSBudWxsKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLlByb2plY3RQYWdlU2V0dGluZ3NUb2tlbnNfUHJvamVjdFxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RFbWJlZFRva2Vuc0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBQcm9qZWN0QmxvYkluZm8oJGJsb2JJZDogU3RyaW5nISwgJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBibG9iKGlkOiAkYmxvYklkKSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgZmlsZU5hbWVcXG4gICAgICAgIGZpbGVUeXBlXFxuICAgICAgICBmaWxlU2l6ZVxcbiAgICAgICAgY3JlYXRlZEF0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RCbG9iSW5mb0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBNb3ZlVG9Xb3Jrc3BhY2VEcnlSdW4oJHdvcmtzcGFjZUlkOiBTdHJpbmchLCAkcHJvamVjdElkOiBTdHJpbmchLCAkbGltaXQ6IEludCkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBtb3ZlVG9Xb3Jrc3BhY2VEcnlSdW4od29ya3NwYWNlSWQ6ICR3b3Jrc3BhY2VJZCkge1xcbiAgICAgICAgYWRkZWRUb1dvcmtzcGFjZVRvdGFsQ291bnRcXG4gICAgICAgIGFkZGVkVG9Xb3Jrc3BhY2UobGltaXQ6ICRsaW1pdCkge1xcbiAgICAgICAgICBhdmF0YXJcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgbmFtZVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Nb3ZlVG9Xb3Jrc3BhY2VEcnlSdW5Eb2N1bWVudCxcbiAgICBcIlxcbiAgc3Vic2NyaXB0aW9uIE9uUHJvamVjdFVwZGF0ZWQoJGlkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3RVcGRhdGVkKGlkOiAkaWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHR5cGVcXG4gICAgICBwcm9qZWN0IHtcXG4gICAgICAgIC4uLlByb2plY3RQYWdlUHJvamVjdFxcbiAgICAgICAgLi4uUHJvamVjdERhc2hib2FyZEl0ZW1Ob01vZGVsc1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5PblByb2plY3RVcGRhdGVkRG9jdW1lbnQsXG4gICAgXCJcXG4gIHN1YnNjcmlwdGlvbiBPblByb2plY3RNb2RlbHNVcGRhdGUoJGlkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3RNb2RlbHNVcGRhdGVkKGlkOiAkaWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHR5cGVcXG4gICAgICBtb2RlbCB7XFxuICAgICAgICBpZFxcbiAgICAgICAgdmVyc2lvbnMobGltaXQ6IDEpIHtcXG4gICAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgcmVmZXJlbmNlZE9iamVjdFxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICAuLi5Qcm9qZWN0UGFnZUxhdGVzdEl0ZW1zTW9kZWxJdGVtXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLk9uUHJvamVjdE1vZGVsc1VwZGF0ZURvY3VtZW50LFxuICAgIFwiXFxuICBzdWJzY3JpcHRpb24gT25Qcm9qZWN0VmVyc2lvbnNVcGRhdGUoJGlkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3RWZXJzaW9uc1VwZGF0ZWQoaWQ6ICRpZCkge1xcbiAgICAgIGlkXFxuICAgICAgbW9kZWxJZFxcbiAgICAgIHR5cGVcXG4gICAgICB2ZXJzaW9uIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5WaWV3ZXJNb2RlbFZlcnNpb25DYXJkSXRlbVxcbiAgICAgICAgLi4uUHJvamVjdE1vZGVsUGFnZVZlcnNpb25zQ2FyZFZlcnNpb25cXG4gICAgICAgIG1vZGVsIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uUHJvamVjdFBhZ2VMYXRlc3RJdGVtc01vZGVsSXRlbVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5PblByb2plY3RWZXJzaW9uc1VwZGF0ZURvY3VtZW50LFxuICAgIFwiXFxuICBzdWJzY3JpcHRpb24gT25Qcm9qZWN0VmVyc2lvbnNQcmV2aWV3R2VuZXJhdGVkKCRpZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0VmVyc2lvbnNQcmV2aWV3R2VuZXJhdGVkKGlkOiAkaWQpIHtcXG4gICAgICBwcm9qZWN0SWRcXG4gICAgICBvYmplY3RJZFxcbiAgICAgIHZlcnNpb25JZFxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLk9uUHJvamVjdFZlcnNpb25zUHJldmlld0dlbmVyYXRlZERvY3VtZW50LFxuICAgIFwiXFxuICBzdWJzY3JpcHRpb24gT25Qcm9qZWN0UGVuZGluZ01vZGVsc1VwZGF0ZWQoJGlkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3RQZW5kaW5nTW9kZWxzVXBkYXRlZChpZDogJGlkKSB7XFxuICAgICAgaWRcXG4gICAgICB0eXBlXFxuICAgICAgbW9kZWwge1xcbiAgICAgICAgLi4uUGVuZGluZ0ZpbGVVcGxvYWRcXG4gICAgICAgIC4uLlVzZUZhaWxlZEZpbGVJbXBvcnRKb2JVdGlsc19GaWxlVXBsb2FkXFxuICAgICAgICBtb2RlbCB7XFxuICAgICAgICAgIC4uLlByb2plY3RQYWdlTGF0ZXN0SXRlbXNNb2RlbEl0ZW1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuT25Qcm9qZWN0UGVuZGluZ01vZGVsc1VwZGF0ZWREb2N1bWVudCxcbiAgICBcIlxcbiAgc3Vic2NyaXB0aW9uIE9uUHJvamVjdFBlbmRpbmdWZXJzaW9uc1VwZGF0ZWQoJGlkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3RQZW5kaW5nVmVyc2lvbnNVcGRhdGVkKGlkOiAkaWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHR5cGVcXG4gICAgICB2ZXJzaW9uIHtcXG4gICAgICAgIC4uLlBlbmRpbmdGaWxlVXBsb2FkXFxuICAgICAgICAuLi5Vc2VGYWlsZWRGaWxlSW1wb3J0Sm9iVXRpbHNfRmlsZVVwbG9hZFxcbiAgICAgICAgbW9kZWwge1xcbiAgICAgICAgICAuLi5Qcm9qZWN0UGFnZUxhdGVzdEl0ZW1zTW9kZWxJdGVtXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLk9uUHJvamVjdFBlbmRpbmdWZXJzaW9uc1VwZGF0ZWREb2N1bWVudCxcbiAgICBcIlxcbiAgc3Vic2NyaXB0aW9uIE9uUHJvamVjdFRyaWdnZXJlZEF1dG9tYXRpb25zU3RhdHVzVXBkYXRlZCgkaWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdFRyaWdnZXJlZEF1dG9tYXRpb25zU3RhdHVzVXBkYXRlZChwcm9qZWN0SWQ6ICRpZCkge1xcbiAgICAgIHR5cGVcXG4gICAgICB2ZXJzaW9uIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBhdXRvbWF0aW9uc1N0YXR1cyB7XFxuICAgICAgICAgIGF1dG9tYXRpb25SdW5zIHtcXG4gICAgICAgICAgICAuLi5BdXRvbWF0ZVZpZXdlclBhbmVsX0F1dG9tYXRlUnVuXFxuICAgICAgICAgIH1cXG4gICAgICAgICAgLi4uVHJpZ2dlcmVkQXV0b21hdGlvbnNTdGF0dXNTdW1tYXJ5XFxuICAgICAgICAgIC4uLkF1dG9tYXRlUnVuc1RyaWdnZXJTdGF0dXNEaWFsb2dfVHJpZ2dlcmVkQXV0b21hdGlvbnNTdGF0dXNcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgbW9kZWwge1xcbiAgICAgICAgaWRcXG4gICAgICB9XFxuICAgICAgcnVuIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBhdXRvbWF0aW9uSWRcXG4gICAgICAgIC4uLkF1dG9tYXRpb25SdW5EZXRhaWxzXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLk9uUHJvamVjdFRyaWdnZXJlZEF1dG9tYXRpb25zU3RhdHVzVXBkYXRlZERvY3VtZW50LFxuICAgIFwiXFxuICBzdWJzY3JpcHRpb24gT25Qcm9qZWN0QXV0b21hdGlvbnNVcGRhdGVkKCRpZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0QXV0b21hdGlvbnNVcGRhdGVkKHByb2plY3RJZDogJGlkKSB7XFxuICAgICAgdHlwZVxcbiAgICAgIGF1dG9tYXRpb25JZFxcbiAgICAgIGF1dG9tYXRpb24ge1xcbiAgICAgICAgaWRcXG4gICAgICAgIC4uLlByb2plY3RQYWdlQXV0b21hdGlvblBhZ2VfQXV0b21hdGlvblxcbiAgICAgICAgLi4uUHJvamVjdFBhZ2VBdXRvbWF0aW9uc1Jvd19BdXRvbWF0aW9uXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLk9uUHJvamVjdEF1dG9tYXRpb25zVXBkYXRlZERvY3VtZW50LFxuICAgIFwiXFxuICBmcmFnbWVudCBHZXRNb2RlbEl0ZW1Sb3V0ZV9Nb2RlbCBvbiBNb2RlbCB7XFxuICAgIGlkXFxuICAgIHByb2plY3RJZFxcbiAgICBob21lVmlldyB7XFxuICAgICAgaWRcXG4gICAgICByZXNvdXJjZUlkc1xcbiAgICB9XFxuICAgIHJlc291cmNlSWRTdHJpbmdcXG4gIH1cXG5cIjogdHlwZXMuR2V0TW9kZWxJdGVtUm91dGVfTW9kZWxGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgbXV0YXRpb24gU2VydmVySW5mb1VwZGF0ZSgkaW5mbzogU2VydmVySW5mb1VwZGF0ZUlucHV0ISkge1xcbiAgICBzZXJ2ZXJJbmZvVXBkYXRlKGluZm86ICRpbmZvKVxcbiAgfVxcblwiOiB0eXBlcy5TZXJ2ZXJJbmZvVXBkYXRlRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIEFkbWluUGFuZWxEZWxldGVVc2VyKCR1c2VyQ29uZmlybWF0aW9uOiBVc2VyRGVsZXRlSW5wdXQhKSB7XFxuICAgIGFkbWluRGVsZXRlVXNlcih1c2VyQ29uZmlybWF0aW9uOiAkdXNlckNvbmZpcm1hdGlvbilcXG4gIH1cXG5cIjogdHlwZXMuQWRtaW5QYW5lbERlbGV0ZVVzZXJEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gQWRtaW5QYW5lbERlbGV0ZVByb2plY3QoJGlkczogW1N0cmluZyFdISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBiYXRjaERlbGV0ZShpZHM6ICRpZHMpXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuQWRtaW5QYW5lbERlbGV0ZVByb2plY3REb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gQWRtaW5QYW5lbFJlc2VuZEludml0ZSgkaW52aXRlSWQ6IFN0cmluZyEpIHtcXG4gICAgaW52aXRlUmVzZW5kKGludml0ZUlkOiAkaW52aXRlSWQpXFxuICB9XFxuXCI6IHR5cGVzLkFkbWluUGFuZWxSZXNlbmRJbnZpdGVEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gQWRtaW5QYW5lbERlbGV0ZUludml0ZSgkaW52aXRlSWQ6IFN0cmluZyEpIHtcXG4gICAgaW52aXRlRGVsZXRlKGludml0ZUlkOiAkaW52aXRlSWQpXFxuICB9XFxuXCI6IHR5cGVzLkFkbWluUGFuZWxEZWxldGVJbnZpdGVEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gQWRtaW5DaGFuZ2VVc2VSb2xlKCR1c2VyUm9sZUlucHV0OiBVc2VyUm9sZUlucHV0ISkge1xcbiAgICB1c2VyUm9sZUNoYW5nZSh1c2VyUm9sZUlucHV0OiAkdXNlclJvbGVJbnB1dClcXG4gIH1cXG5cIjogdHlwZXMuQWRtaW5DaGFuZ2VVc2VSb2xlRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFNlcnZlck1hbmFnZW1lbnREYXRhUGFnZSB7XFxuICAgIGFkbWluIHtcXG4gICAgICB1c2VyTGlzdCB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICAgIHByb2plY3RMaXN0IHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICB9XFxuICAgICAgaW52aXRlTGlzdCB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHNlcnZlckluZm8ge1xcbiAgICAgIG5hbWVcXG4gICAgICB2ZXJzaW9uXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuU2VydmVyTWFuYWdlbWVudERhdGFQYWdlRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFNlcnZlclNldHRpbmdzRGlhbG9nRGF0YSB7XFxuICAgIHNlcnZlckluZm8ge1xcbiAgICAgIG5hbWVcXG4gICAgICBkZXNjcmlwdGlvblxcbiAgICAgIGFkbWluQ29udGFjdFxcbiAgICAgIGNvbXBhbnlcXG4gICAgICB0ZXJtc09mU2VydmljZVxcbiAgICAgIGludml0ZU9ubHlcXG4gICAgICBndWVzdE1vZGVFbmFibGVkXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuU2VydmVyU2V0dGluZ3NEaWFsb2dEYXRhRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IEFkbWluUGFuZWxVc2Vyc0xpc3QoJGxpbWl0OiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcsICRxdWVyeTogU3RyaW5nKSB7XFxuICAgIGFkbWluIHtcXG4gICAgICB1c2VyTGlzdChsaW1pdDogJGxpbWl0LCBjdXJzb3I6ICRjdXJzb3IsIHF1ZXJ5OiAkcXVlcnkpIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIGN1cnNvclxcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBlbWFpbFxcbiAgICAgICAgICBhdmF0YXJcXG4gICAgICAgICAgbmFtZVxcbiAgICAgICAgICByb2xlXFxuICAgICAgICAgIHZlcmlmaWVkXFxuICAgICAgICAgIGNvbXBhbnlcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuQWRtaW5QYW5lbFVzZXJzTGlzdERvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBBZG1pblBhbmVsUHJvamVjdHNMaXN0KFxcbiAgICAkcXVlcnk6IFN0cmluZ1xcbiAgICAkb3JkZXJCeTogU3RyaW5nXFxuICAgICRsaW1pdDogSW50IVxcbiAgICAkdmlzaWJpbGl0eTogU3RyaW5nXFxuICAgICRjdXJzb3I6IFN0cmluZ1xcbiAgKSB7XFxuICAgIGFkbWluIHtcXG4gICAgICBwcm9qZWN0TGlzdChcXG4gICAgICAgIHF1ZXJ5OiAkcXVlcnlcXG4gICAgICAgIG9yZGVyQnk6ICRvcmRlckJ5XFxuICAgICAgICBsaW1pdDogJGxpbWl0XFxuICAgICAgICB2aXNpYmlsaXR5OiAkdmlzaWJpbGl0eVxcbiAgICAgICAgY3Vyc29yOiAkY3Vyc29yXFxuICAgICAgKSB7XFxuICAgICAgICBjdXJzb3JcXG4gICAgICAgIC4uLlNldHRpbmdzU2VydmVyUHJvamVjdHNfUHJvamVjdENvbGxlY3Rpb25cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuQWRtaW5QYW5lbFByb2plY3RzTGlzdERvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBBZG1pblBhbmVsSW52aXRlc0xpc3QoJGxpbWl0OiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcsICRxdWVyeTogU3RyaW5nKSB7XFxuICAgIGFkbWluIHtcXG4gICAgICBpbnZpdGVMaXN0KGxpbWl0OiAkbGltaXQsIGN1cnNvcjogJGN1cnNvciwgcXVlcnk6ICRxdWVyeSkge1xcbiAgICAgICAgY3Vyc29yXFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIGVtYWlsXFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIGludml0ZWRCeSB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICBuYW1lXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuQWRtaW5QYW5lbEludml0ZXNMaXN0RG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFVzZXJzQ291bnQge1xcbiAgICBhZG1pbiB7XFxuICAgICAgdXNlckxpc3Qge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Vc2Vyc0NvdW50RG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IEludml0ZXNDb3VudCB7XFxuICAgIGFkbWluIHtcXG4gICAgICBpbnZpdGVMaXN0IHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuSW52aXRlc0NvdW50RG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIEludml0ZVNlcnZlclVzZXIoJGlucHV0OiBbU2VydmVySW52aXRlQ3JlYXRlSW5wdXQhXSEpIHtcXG4gICAgc2VydmVySW52aXRlQmF0Y2hDcmVhdGUoaW5wdXQ6ICRpbnB1dClcXG4gIH1cXG5cIjogdHlwZXMuSW52aXRlU2VydmVyVXNlckRvY3VtZW50LFxuICAgIFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc01lbnVfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHNsdWdcXG4gICAgc3NvIHtcXG4gICAgICBwcm92aWRlciB7XFxuICAgICAgICBpZFxcbiAgICAgIH1cXG4gICAgICBzZXNzaW9uIHtcXG4gICAgICAgIHZhbGlkVW50aWxcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuU2V0dGluZ3NNZW51X1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBtdXRhdGlvbiBTZXR0aW5nc1VwZGF0ZVdvcmtzcGFjZSgkaW5wdXQ6IFdvcmtzcGFjZVVwZGF0ZUlucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIHVwZGF0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNHZW5lcmFsX1dvcmtzcGFjZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5TZXR0aW5nc1VwZGF0ZVdvcmtzcGFjZURvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBTZXR0aW5nc1VwZGF0ZVdvcmtzcGFjZUVtYmVkT3B0aW9ucyhcXG4gICAgJGlucHV0OiBXb3Jrc3BhY2VVcGRhdGVFbWJlZE9wdGlvbnNJbnB1dCFcXG4gICkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIHVwZGF0ZUVtYmVkT3B0aW9ucyhpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICBoaWRlU3BlY2tsZUJyYW5kaW5nXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlNldHRpbmdzVXBkYXRlV29ya3NwYWNlRW1iZWRPcHRpb25zRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIFNldHRpbmdzQ3JlYXRlVXNlckVtYWlsKCRpbnB1dDogQ3JlYXRlVXNlckVtYWlsSW5wdXQhKSB7XFxuICAgIGFjdGl2ZVVzZXJNdXRhdGlvbnMge1xcbiAgICAgIGVtYWlsTXV0YXRpb25zIHtcXG4gICAgICAgIGNyZWF0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIGVtYWlscyB7XFxuICAgICAgICAgICAgLi4uRW1haWxGaWVsZHNcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5TZXR0aW5nc0NyZWF0ZVVzZXJFbWFpbERvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBTZXR0aW5nc0RlbGV0ZVVzZXJFbWFpbCgkaW5wdXQ6IERlbGV0ZVVzZXJFbWFpbElucHV0ISkge1xcbiAgICBhY3RpdmVVc2VyTXV0YXRpb25zIHtcXG4gICAgICBlbWFpbE11dGF0aW9ucyB7XFxuICAgICAgICBkZWxldGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBlbWFpbHMge1xcbiAgICAgICAgICAgIC4uLkVtYWlsRmllbGRzXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuU2V0dGluZ3NEZWxldGVVc2VyRW1haWxEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gU2V0dGluZ3NTZXRQcmltYXJ5VXNlckVtYWlsKCRpbnB1dDogU2V0UHJpbWFyeVVzZXJFbWFpbElucHV0ISkge1xcbiAgICBhY3RpdmVVc2VyTXV0YXRpb25zIHtcXG4gICAgICBlbWFpbE11dGF0aW9ucyB7XFxuICAgICAgICBzZXRQcmltYXJ5KGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgZW1haWxzIHtcXG4gICAgICAgICAgICAuLi5FbWFpbEZpZWxkc1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlNldHRpbmdzU2V0UHJpbWFyeVVzZXJFbWFpbERvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBTZXR0aW5nc05ld0VtYWlsVmVyaWZpY2F0aW9uKCRpbnB1dDogRW1haWxWZXJpZmljYXRpb25SZXF1ZXN0SW5wdXQhKSB7XFxuICAgIGFjdGl2ZVVzZXJNdXRhdGlvbnMge1xcbiAgICAgIGVtYWlsTXV0YXRpb25zIHtcXG4gICAgICAgIHJlcXVlc3ROZXdFbWFpbFZlcmlmaWNhdGlvbihpbnB1dDogJGlucHV0KVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5TZXR0aW5nc05ld0VtYWlsVmVyaWZpY2F0aW9uRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIFNldHRpbmdzVXBkYXRlV29ya3NwYWNlU2VjdXJpdHkoJGlucHV0OiBXb3Jrc3BhY2VVcGRhdGVJbnB1dCEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICB1cGRhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGRvbWFpbkJhc2VkTWVtYmVyc2hpcFByb3RlY3Rpb25FbmFibGVkXFxuICAgICAgICBkaXNjb3ZlcmFiaWxpdHlFbmFibGVkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlNldHRpbmdzVXBkYXRlV29ya3NwYWNlU2VjdXJpdHlEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gU2V0dGluZ3NEZWxldGVXb3Jrc3BhY2UoJHdvcmtzcGFjZUlkOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgZGVsZXRlKHdvcmtzcGFjZUlkOiAkd29ya3NwYWNlSWQpXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuU2V0dGluZ3NEZWxldGVXb3Jrc3BhY2VEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gU2V0dGluZ3NSZXNlbmRXb3Jrc3BhY2VJbnZpdGUoJGlucHV0OiBXb3Jrc3BhY2VJbnZpdGVSZXNlbmRJbnB1dCEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICBpbnZpdGVzIHtcXG4gICAgICAgIHJlc2VuZChpbnB1dDogJGlucHV0KVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5TZXR0aW5nc1Jlc2VuZFdvcmtzcGFjZUludml0ZURvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBTZXR0aW5nc0NhbmNlbFdvcmtzcGFjZUludml0ZSgkd29ya3NwYWNlSWQ6IFN0cmluZyEsICRpbnZpdGVJZDogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIGludml0ZXMge1xcbiAgICAgICAgY2FuY2VsKHdvcmtzcGFjZUlkOiAkd29ya3NwYWNlSWQsIGludml0ZUlkOiAkaW52aXRlSWQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuU2V0dGluZ3NDYW5jZWxXb3Jrc3BhY2VJbnZpdGVEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gQWRkV29ya3NwYWNlRG9tYWluKCRpbnB1dDogQWRkRG9tYWluVG9Xb3Jrc3BhY2VJbnB1dCEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICBhZGREb21haW4oaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlfV29ya3NwYWNlXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkFkZFdvcmtzcGFjZURvbWFpbkRvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBEZWxldGVXb3Jrc3BhY2VEb21haW4oJGlucHV0OiBXb3Jrc3BhY2VEb21haW5EZWxldGVJbnB1dCEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICBkZWxldGVEb21haW4oaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlEb21haW5SZW1vdmVEaWFsb2dfV29ya3NwYWNlXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkRlbGV0ZVdvcmtzcGFjZURvbWFpbkRvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBTZXR0aW5nc0xlYXZlV29ya3NwYWNlKCRsZWF2ZUlkOiBJRCEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICBsZWF2ZShpZDogJGxlYXZlSWQpXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuU2V0dGluZ3NMZWF2ZVdvcmtzcGFjZURvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBTZXR0aW5nc0JpbGxpbmdDYW5jZWxDaGVja291dFNlc3Npb24oJGlucHV0OiBDYW5jZWxDaGVja291dFNlc3Npb25JbnB1dCEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICBiaWxsaW5nIHtcXG4gICAgICAgIGNhbmNlbENoZWNrb3V0U2Vzc2lvbihpbnB1dDogJGlucHV0KVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5TZXR0aW5nc0JpbGxpbmdDYW5jZWxDaGVja291dFNlc3Npb25Eb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgU2V0dGluZ3NTaWRlYmFyKCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIC4uLlNldHRpbmdzU2lkZWJhcl9Xb3Jrc3BhY2VcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5TZXR0aW5nc1NpZGViYXJEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgU2V0dGluZ3NXb3Jrc3BhY2VHZW5lcmFsKCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc0dlbmVyYWxfV29ya3NwYWNlXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VHZW5lcmFsRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFNldHRpbmdzV29ya3NwYWNlQmlsbGluZygkc2x1ZzogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHNsdWcpIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLldvcmtzcGFjZUJpbGxpbmdQYWdlX1dvcmtzcGFjZVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlNldHRpbmdzV29ya3NwYWNlQmlsbGluZ0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBTZXR0aW5nc1dvcmtzcGFjZUJpbGxpbmdDdXN0b21lclBvcnRhbCgkd29ya3NwYWNlSWQ6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlKGlkOiAkd29ya3NwYWNlSWQpIHtcXG4gICAgICBjdXN0b21lclBvcnRhbFVybFxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlNldHRpbmdzV29ya3NwYWNlQmlsbGluZ0N1c3RvbWVyUG9ydGFsRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFNldHRpbmdzV29ya3NwYWNlUmVnaW9ucygkc2x1ZzogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHNsdWcpIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc1JlZ2lvbnNfV29ya3NwYWNlXFxuICAgIH1cXG4gICAgc2VydmVySW5mbyB7XFxuICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzUmVnaW9uc19TZXJ2ZXJJbmZvXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VSZWdpb25zRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFNldHRpbmdzV29ya3NwYWNlc01lbWJlcnMoXFxuICAgICRzbHVnOiBTdHJpbmchXFxuICAgICRmaWx0ZXI6IEFkbWluV29ya3NwYWNlSm9pblJlcXVlc3RGaWx0ZXJcXG4gICkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHNsdWcpIHtcXG4gICAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzQ291bnRzX1dvcmtzcGFjZVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc0ludml0ZXMoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc0ludml0ZXNUYWJsZV9Xb3Jrc3BhY2VcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5TZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzSW52aXRlc0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBTZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzUmVxdWVzdHMoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc1JlcXVlc3RzVGFibGVfV29ya3NwYWNlXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc1JlcXVlc3RzRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNUYWJsZVF1ZXJ5KCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIGlkXFxuICAgICAgcm9sZVxcbiAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNUYWJsZUhlYWRlcl9Xb3Jrc3BhY2VcXG4gICAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgICBjYW5SZWFkTWVtYmVyRW1haWwge1xcbiAgICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNUYWJsZVF1ZXJ5RG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNTZWFyY2goXFxuICAgICRzbHVnOiBTdHJpbmchXFxuICAgICRmaWx0ZXI6IFdvcmtzcGFjZVRlYW1GaWx0ZXJcXG4gICAgJGxpbWl0OiBJbnRcXG4gICAgJGN1cnNvcjogU3RyaW5nXFxuICApIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgaWRcXG4gICAgICB0ZWFtKGZpbHRlcjogJGZpbHRlciwgbGltaXQ6ICRsaW1pdCwgY3Vyc29yOiAkY3Vyc29yKSB7XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNUYWJsZV9Xb3Jrc3BhY2VDb2xsYWJvcmF0b3JcXG4gICAgICAgIH1cXG4gICAgICAgIGN1cnNvclxcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5TZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzU2VhcmNoRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFNldHRpbmdzV29ya3NwYWNlc0ludml0ZXNTZWFyY2goXFxuICAgICRzbHVnOiBTdHJpbmchXFxuICAgICRpbnZpdGVzRmlsdGVyOiBQZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yc0ZpbHRlclxcbiAgKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIGlkXFxuICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc1RhYmxlSGVhZGVyX1dvcmtzcGFjZVxcbiAgICAgIGludml0ZWRUZWFtKGZpbHRlcjogJGludml0ZXNGaWx0ZXIpIHtcXG4gICAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNJbnZpdGVzVGFibGVfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvclxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5TZXR0aW5nc1dvcmtzcGFjZXNJbnZpdGVzU2VhcmNoRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFNldHRpbmdzV29ya3NwYWNlc1Byb2plY3RzKFxcbiAgICAkc2x1ZzogU3RyaW5nIVxcbiAgICAkbGltaXQ6IEludCFcXG4gICAgJGN1cnNvcjogU3RyaW5nXFxuICAgICRmaWx0ZXI6IFdvcmtzcGFjZVByb2plY3RzRmlsdGVyXFxuICApIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzUHJvamVjdHNfV29ya3NwYWNlXFxuICAgICAgcHJvamVjdHMobGltaXQ6ICRsaW1pdCwgY3Vyc29yOiAkY3Vyc29yLCBmaWx0ZXI6ICRmaWx0ZXIpIHtcXG4gICAgICAgIGN1cnNvclxcbiAgICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzUHJvamVjdHNfUHJvamVjdENvbGxlY3Rpb25cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VzUHJvamVjdHNEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgU2V0dGluZ3NXb3Jrc3BhY2VTZWN1cml0eSgkc2x1ZzogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHNsdWcpIHtcXG4gICAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eV9Xb3Jrc3BhY2VcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5TZXR0aW5nc1dvcmtzcGFjZVNlY3VyaXR5RG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFNldHRpbmdzV29ya3NwYWNlQXV0b21hdGlvbigkc2x1ZzogU3RyaW5nISwgJGN1cnNvcjogU3RyaW5nID0gbnVsbCkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHNsdWcpIHtcXG4gICAgICBpZFxcbiAgICAgIGF1dG9tYXRlRnVuY3Rpb25zKFxcbiAgICAgICAgbGltaXQ6IDEwXFxuICAgICAgICBjdXJzb3I6ICRjdXJzb3JcXG4gICAgICAgIGZpbHRlcjogeyBpbmNsdWRlRmVhdHVyZWQ6IGZhbHNlIH1cXG4gICAgICApIHtcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzQXV0b21hdGlvbkZ1bmN0aW9uc19BdXRvbWF0ZUZ1bmN0aW9uXFxuICAgICAgICB9XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlNldHRpbmdzV29ya3NwYWNlQXV0b21hdGlvbkRvY3VtZW50LFxuICAgIFwiXFxuICBmcmFnbWVudCBBcHBBdXRob3JBdmF0YXIgb24gQXBwQXV0aG9yIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBhdmF0YXJcXG4gIH1cXG5cIjogdHlwZXMuQXBwQXV0aG9yQXZhdGFyRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IExpbWl0ZWRVc2VyQXZhdGFyIG9uIExpbWl0ZWRVc2VyIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBhdmF0YXJcXG4gIH1cXG5cIjogdHlwZXMuTGltaXRlZFVzZXJBdmF0YXJGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgQWN0aXZlVXNlckF2YXRhciBvbiBVc2VyIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBhdmF0YXJcXG4gIH1cXG5cIjogdHlwZXMuQWN0aXZlVXNlckF2YXRhckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBxdWVyeSBBY3RpdmVVc2VyTWV0YSB7XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIG1ldGEge1xcbiAgICAgICAgbGVnYWN5UHJvamVjdHNFeHBsYWluZXJDb2xsYXBzZWRcXG4gICAgICAgIHNwZWNrbGVDb24yNUJhbm5lckRpc21pc3NlZFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5BY3RpdmVVc2VyTWV0YURvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBVcGRhdGVMZWdhY3lQcm9qZWN0c0V4cGxhaW5lcigkdmFsdWU6IEJvb2xlYW4hKSB7XFxuICAgIGFjdGl2ZVVzZXJNdXRhdGlvbnMge1xcbiAgICAgIG1ldGEge1xcbiAgICAgICAgc2V0TGVnYWN5UHJvamVjdHNFeHBsYWluZXJDb2xsYXBzZWQodmFsdWU6ICR2YWx1ZSlcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuVXBkYXRlTGVnYWN5UHJvamVjdHNFeHBsYWluZXJEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gVXBkYXRlU3BlY2tsZUNvbjI1QmFubmVyRGlzbWlzc2VkKCR2YWx1ZTogQm9vbGVhbiEpIHtcXG4gICAgYWN0aXZlVXNlck11dGF0aW9ucyB7XFxuICAgICAgbWV0YSB7XFxuICAgICAgICBzZXRTcGVja2xlQ29uMjVCYW5uZXJEaXNtaXNzZWQodmFsdWU6ICR2YWx1ZSlcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuVXBkYXRlU3BlY2tsZUNvbjI1QmFubmVyRGlzbWlzc2VkRG9jdW1lbnQsXG4gICAgXCJcXG4gICAgICBzdWJzY3JpcHRpb24gT25Vc2VyUHJvamVjdHNVcGRhdGUge1xcbiAgICAgICAgdXNlclByb2plY3RzVXBkYXRlZCB7XFxuICAgICAgICAgIHR5cGVcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgcHJvamVjdCB7XFxuICAgICAgICAgICAgLi4uUHJvamVjdERhc2hib2FyZEl0ZW1cXG4gICAgICAgICAgICB3b3Jrc3BhY2VJZFxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICBcIjogdHlwZXMuT25Vc2VyUHJvamVjdHNVcGRhdGVEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gVXBkYXRlVXNlcigkaW5wdXQ6IFVzZXJVcGRhdGVJbnB1dCEpIHtcXG4gICAgYWN0aXZlVXNlck11dGF0aW9ucyB7XFxuICAgICAgdXBkYXRlKHVzZXI6ICRpbnB1dCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIG5hbWVcXG4gICAgICAgIGJpb1xcbiAgICAgICAgY29tcGFueVxcbiAgICAgICAgYXZhdGFyXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlVwZGF0ZVVzZXJEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gVXBkYXRlTm90aWZpY2F0aW9uUHJlZmVyZW5jZXMoJGlucHV0OiBKU09OT2JqZWN0ISkge1xcbiAgICB1c2VyTm90aWZpY2F0aW9uUHJlZmVyZW5jZXNVcGRhdGUocHJlZmVyZW5jZXM6ICRpbnB1dClcXG4gIH1cXG5cIjogdHlwZXMuVXBkYXRlTm90aWZpY2F0aW9uUHJlZmVyZW5jZXNEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gRGVsZXRlQWNjb3VudCgkaW5wdXQ6IFVzZXJEZWxldGVJbnB1dCEpIHtcXG4gICAgdXNlckRlbGV0ZSh1c2VyQ29uZmlybWF0aW9uOiAkaW5wdXQpXFxuICB9XFxuXCI6IHR5cGVzLkRlbGV0ZUFjY291bnREb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gdmVyaWZ5RW1haWwoJGlucHV0OiBWZXJpZnlVc2VyRW1haWxJbnB1dCEpIHtcXG4gICAgYWN0aXZlVXNlck11dGF0aW9ucyB7XFxuICAgICAgZW1haWxNdXRhdGlvbnMge1xcbiAgICAgICAgdmVyaWZ5KGlucHV0OiAkaW5wdXQpXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlZlcmlmeUVtYWlsRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIFNldEFjdGl2ZVdvcmtzcGFjZSgkc2x1ZzogU3RyaW5nLCAkaWQ6IFN0cmluZykge1xcbiAgICBhY3RpdmVVc2VyTXV0YXRpb25zIHtcXG4gICAgICBzZXRBY3RpdmVXb3Jrc3BhY2Uoc2x1ZzogJHNsdWcsIGlkOiAkaWQpIHtcXG4gICAgICAgIC4uLldvcmtzcGFjZVN3aXRjaGVyQWN0aXZlV29ya3NwYWNlX0xpbWl0ZWRXb3Jrc3BhY2VcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuU2V0QWN0aXZlV29ya3NwYWNlRG9jdW1lbnQsXG4gICAgXCJcXG4gIGZyYWdtZW50IEVtYWlsRmllbGRzIG9uIFVzZXJFbWFpbCB7XFxuICAgIGlkXFxuICAgIGVtYWlsXFxuICAgIHZlcmlmaWVkXFxuICAgIHByaW1hcnlcXG4gICAgdXNlcklkXFxuICB9XFxuXCI6IHR5cGVzLkVtYWlsRmllbGRzRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIHF1ZXJ5IFVzZXJFbWFpbHMge1xcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICBpZFxcbiAgICAgIGVtYWlscyB7XFxuICAgICAgICAuLi5FbWFpbEZpZWxkc1xcbiAgICAgIH1cXG4gICAgICBoYXNQZW5kaW5nVmVyaWZpY2F0aW9uXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuVXNlckVtYWlsc0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBVc2VyQWN0aXZlV29ya3NwYWNlU2x1ZyB7XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgYWN0aXZlV29ya3NwYWNlIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBzbHVnXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlVzZXJBY3RpdmVXb3Jrc3BhY2VTbHVnRG9jdW1lbnQsXG4gICAgXCJcXG4gIGZyYWdtZW50IFVzZVZpZXdlclVzZXJBY3Rpdml0eUJyb2FkY2FzdGluZ19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQnJvYWRjYXN0QWN0aXZpdHkge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Vc2VWaWV3ZXJVc2VyQWN0aXZpdHlCcm9hZGNhc3RpbmdfUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBWaWV3ZXJDb21tZW50QnViYmxlc0RhdGEgb24gQ29tbWVudCB7XFxuICAgIGlkXFxuICAgIHZpZXdlZEF0XFxuICAgIHZpZXdlclN0YXRlXFxuICB9XFxuXCI6IHR5cGVzLlZpZXdlckNvbW1lbnRCdWJibGVzRGF0YUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBVc2VDaGVja1ZpZXdlckNvbW1lbnRpbmdBY2Nlc3NfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkNyZWF0ZUNvbW1lbnQge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Vc2VDaGVja1ZpZXdlckNvbW1lbnRpbmdBY2Nlc3NfUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBVc2VMb2FkTGF0ZXN0VmVyc2lvbl9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIHNsdWdcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Vc2VMb2FkTGF0ZXN0VmVyc2lvbl9Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIG11dGF0aW9uIENyZWF0ZVNhdmVkVmlldygkaW5wdXQ6IENyZWF0ZVNhdmVkVmlld0lucHV0ISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBzYXZlZFZpZXdNdXRhdGlvbnMge1xcbiAgICAgICAgY3JlYXRlVmlldyhpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIHJlc291cmNlSWRzXFxuICAgICAgICAgIGdyb3VwSWRcXG4gICAgICAgICAgLi4uVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld19TYXZlZFZpZXdcXG4gICAgICAgICAgZ3JvdXAge1xcbiAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgLi4uVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cF9TYXZlZFZpZXdHcm91cFxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkNyZWF0ZVNhdmVkVmlld0RvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBEZWxldGVTYXZlZFZpZXcoJGlucHV0OiBEZWxldGVTYXZlZFZpZXdJbnB1dCEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgc2F2ZWRWaWV3TXV0YXRpb25zIHtcXG4gICAgICAgIGRlbGV0ZVZpZXcoaW5wdXQ6ICRpbnB1dClcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuRGVsZXRlU2F2ZWRWaWV3RG9jdW1lbnQsXG4gICAgXCJcXG4gIGZyYWdtZW50IFVzZURlbGV0ZVNhdmVkVmlld19TYXZlZFZpZXcgb24gU2F2ZWRWaWV3IHtcXG4gICAgaWRcXG4gICAgcHJvamVjdElkXFxuICAgIHJlc291cmNlSWRzXFxuICAgIGdyb3VwIHtcXG4gICAgICBpZFxcbiAgICAgIGdyb3VwSWRcXG4gICAgICByZXNvdXJjZUlkc1xcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlVzZURlbGV0ZVNhdmVkVmlld19TYXZlZFZpZXdGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgbXV0YXRpb24gVXBkYXRlU2F2ZWRWaWV3KCRpbnB1dDogVXBkYXRlU2F2ZWRWaWV3SW5wdXQhKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIHNhdmVkVmlld011dGF0aW9ucyB7XFxuICAgICAgICB1cGRhdGVWaWV3KGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld19TYXZlZFZpZXdcXG4gICAgICAgICAgLi4uVXNlVmlld2VyU2F2ZWRWaWV3U2V0dXBfU2F2ZWRWaWV3XFxuICAgICAgICAgIC4uLlVzZVVwZGF0ZVNhdmVkVmlld19TYXZlZFZpZXdcXG4gICAgICAgICAgZ3JvdXAge1xcbiAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgLi4uVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cF9TYXZlZFZpZXdHcm91cFxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlVwZGF0ZVNhdmVkVmlld0RvY3VtZW50LFxuICAgIFwiXFxuICBmcmFnbWVudCBVc2VVcGRhdGVTYXZlZFZpZXdfU2F2ZWRWaWV3IG9uIFNhdmVkVmlldyB7XFxuICAgIGlkXFxuICAgIHByb2plY3RJZFxcbiAgICBpc0hvbWVWaWV3XFxuICAgIGdyb3VwUmVzb3VyY2VJZHNcXG4gICAgcmVzb3VyY2VJZHNcXG4gICAgZ3JvdXAge1xcbiAgICAgIGlkXFxuICAgICAgZ3JvdXBJZFxcbiAgICAgIHJlc291cmNlSWRzXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuVXNlVXBkYXRlU2F2ZWRWaWV3X1NhdmVkVmlld0ZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBtdXRhdGlvbiBDcmVhdGVTYXZlZFZpZXdHcm91cCgkaW5wdXQ6IENyZWF0ZVNhdmVkVmlld0dyb3VwSW5wdXQhKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIHNhdmVkVmlld011dGF0aW9ucyB7XFxuICAgICAgICBjcmVhdGVHcm91cChpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBfU2F2ZWRWaWV3R3JvdXBcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuQ3JlYXRlU2F2ZWRWaWV3R3JvdXBEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gRGVsZXRlU2F2ZWRWaWV3R3JvdXAoJGlucHV0OiBEZWxldGVTYXZlZFZpZXdHcm91cElucHV0ISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBzYXZlZFZpZXdNdXRhdGlvbnMge1xcbiAgICAgICAgZGVsZXRlR3JvdXAoaW5wdXQ6ICRpbnB1dClcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuRGVsZXRlU2F2ZWRWaWV3R3JvdXBEb2N1bWVudCxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVXNlRGVsZXRlU2F2ZWRWaWV3R3JvdXBfU2F2ZWRWaWV3R3JvdXAgb24gU2F2ZWRWaWV3R3JvdXAge1xcbiAgICBpZFxcbiAgICBncm91cElkXFxuICAgIHByb2plY3RJZFxcbiAgICBpc1VuZ3JvdXBlZFZpZXdzR3JvdXBcXG4gIH1cXG5cIjogdHlwZXMuVXNlRGVsZXRlU2F2ZWRWaWV3R3JvdXBfU2F2ZWRWaWV3R3JvdXBGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgbXV0YXRpb24gVXBkYXRlU2F2ZWRWaWV3R3JvdXAoJGlucHV0OiBVcGRhdGVTYXZlZFZpZXdHcm91cElucHV0ISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBzYXZlZFZpZXdNdXRhdGlvbnMge1xcbiAgICAgICAgdXBkYXRlR3JvdXAoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICAuLi5Vc2VVcGRhdGVTYXZlZFZpZXdHcm91cF9TYXZlZFZpZXdHcm91cFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5VcGRhdGVTYXZlZFZpZXdHcm91cERvY3VtZW50LFxuICAgIFwiXFxuICBmcmFnbWVudCBVc2VVcGRhdGVTYXZlZFZpZXdHcm91cF9TYXZlZFZpZXdHcm91cCBvbiBTYXZlZFZpZXdHcm91cCB7XFxuICAgIGlkXFxuICAgIHByb2plY3RJZFxcbiAgICBncm91cElkXFxuICAgIHRpdGxlXFxuICAgIGlzVW5ncm91cGVkVmlld3NHcm91cFxcbiAgfVxcblwiOiB0eXBlcy5Vc2VVcGRhdGVTYXZlZFZpZXdHcm91cF9TYXZlZFZpZXdHcm91cEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBzdWJzY3JpcHRpb24gT25Qcm9qZWN0U2F2ZWRWaWV3c1VwZGF0ZWQoJHByb2plY3RJZDogSUQhKSB7XFxuICAgIHByb2plY3RTYXZlZFZpZXdzVXBkYXRlZChwcm9qZWN0SWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICB0eXBlXFxuICAgICAgaWRcXG4gICAgICBzYXZlZFZpZXcge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHJlc291cmNlSWRzXFxuICAgICAgICBncm91cCB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIGdyb3VwSWRcXG4gICAgICAgICAgcmVzb3VyY2VJZHNcXG4gICAgICAgIH1cXG4gICAgICAgIC4uLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdfU2F2ZWRWaWV3XFxuICAgICAgfVxcbiAgICAgIGJlZm9yZUNoYW5nZVNhdmVkVmlldyB7XFxuICAgICAgICBncm91cElkXFxuICAgICAgICByZXNvdXJjZUlkc1xcbiAgICAgICAgZ3JvdXBSZXNvdXJjZUlkc1xcbiAgICAgICAgcG9zaXRpb25cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuT25Qcm9qZWN0U2F2ZWRWaWV3c1VwZGF0ZWREb2N1bWVudCxcbiAgICBcIlxcbiAgc3Vic2NyaXB0aW9uIE9uUHJvamVjdFNhdmVkVmlld0dyb3Vwc1VwZGF0ZWQoJHByb2plY3RJZDogSUQhKSB7XFxuICAgIHByb2plY3RTYXZlZFZpZXdHcm91cHNVcGRhdGVkKHByb2plY3RJZDogJHByb2plY3RJZCkge1xcbiAgICAgIHR5cGVcXG4gICAgICBpZFxcbiAgICAgIHNhdmVkVmlld0dyb3VwIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBwcm9qZWN0SWRcXG4gICAgICAgIGF1dGhvciB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLk9uUHJvamVjdFNhdmVkVmlld0dyb3Vwc1VwZGF0ZWREb2N1bWVudCxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVXNlRHJhZ2dhYmxlVmlld19TYXZlZFZpZXcgb24gU2F2ZWRWaWV3IHtcXG4gICAgaWRcXG4gICAgcHJvamVjdElkXFxuICAgIG5hbWVcXG4gICAgcG9zaXRpb25cXG4gICAgZ3JvdXAge1xcbiAgICAgIGlkXFxuICAgIH1cXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbk1vdmUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5Vc2VVcGRhdGVTYXZlZFZpZXdfU2F2ZWRWaWV3XFxuICB9XFxuXCI6IHR5cGVzLlVzZURyYWdnYWJsZVZpZXdfU2F2ZWRWaWV3RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFVzZURyYWdnYWJsZVZpZXdUYXJnZXRWaWV3X1NhdmVkVmlldyBvbiBTYXZlZFZpZXcge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHBvc2l0aW9uXFxuICAgIGdyb3VwIHtcXG4gICAgICBpZFxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlVzZURyYWdnYWJsZVZpZXdUYXJnZXRWaWV3X1NhdmVkVmlld0ZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBVc2VEcmFnZ2FibGVWaWV3VGFyZ2V0R3JvdXBfU2F2ZWRWaWV3R3JvdXAgb24gU2F2ZWRWaWV3R3JvdXAge1xcbiAgICBpZFxcbiAgICB0aXRsZVxcbiAgfVxcblwiOiB0eXBlcy5Vc2VEcmFnZ2FibGVWaWV3VGFyZ2V0R3JvdXBfU2F2ZWRWaWV3R3JvdXBGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVXNlU2F2ZWRWaWV3VmFsaWRhdGlvbkhlbHBlcnNfU2F2ZWRWaWV3IG9uIFNhdmVkVmlldyB7XFxuICAgIGlkXFxuICAgIGlzSG9tZVZpZXdcXG4gICAgdmlzaWJpbGl0eVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuVXBkYXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuTW92ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhbkVkaXRUaXRsZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhbkVkaXREZXNjcmlwdGlvbiB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhblNldEFzSG9tZVZpZXcge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Vc2VTYXZlZFZpZXdWYWxpZGF0aW9uSGVscGVyc19TYXZlZFZpZXdGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVXNlVmlld2VyU2F2ZWRWaWV3U2V0dXBfU2F2ZWRWaWV3IG9uIFNhdmVkVmlldyB7XFxuICAgIGlkXFxuICAgIHZpZXdlclN0YXRlXFxuICAgIC4uLlZpZXdlclBhZ2VTZXR1cF9TYXZlZFZpZXdcXG4gIH1cXG5cIjogdHlwZXMuVXNlVmlld2VyU2F2ZWRWaWV3U2V0dXBfU2F2ZWRWaWV3RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFZpZXdlckNvbW1lbnRUaHJlYWQgb24gQ29tbWVudCB7XFxuICAgIC4uLlZpZXdlckNvbW1lbnRzTGlzdEl0ZW1cXG4gICAgLi4uVmlld2VyQ29tbWVudEJ1YmJsZXNEYXRhXFxuICAgIC4uLlZpZXdlckNvbW1lbnRzUmVwbHlJdGVtXFxuICAgIC4uLlZpZXdlckNvbW1lbnRUaHJlYWREYXRhXFxuICB9XFxuXCI6IHR5cGVzLlZpZXdlckNvbW1lbnRUaHJlYWRGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVmlld2VyQ29tbWVudHNSZXBseUl0ZW0gb24gQ29tbWVudCB7XFxuICAgIGlkXFxuICAgIGFyY2hpdmVkXFxuICAgIHJhd1RleHRcXG4gICAgdGV4dCB7XFxuICAgICAgZG9jXFxuICAgIH1cXG4gICAgYXV0aG9yIHtcXG4gICAgICAuLi5MaW1pdGVkVXNlckF2YXRhclxcbiAgICB9XFxuICAgIGNyZWF0ZWRBdFxcbiAgICAuLi5UaHJlYWRDb21tZW50QXR0YWNobWVudFxcbiAgfVxcblwiOiB0eXBlcy5WaWV3ZXJDb21tZW50c1JlcGx5SXRlbUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBtdXRhdGlvbiBCcm9hZGNhc3RWaWV3ZXJVc2VyQWN0aXZpdHkoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJHJlc291cmNlSWRTdHJpbmc6IFN0cmluZyFcXG4gICAgJG1lc3NhZ2U6IFZpZXdlclVzZXJBY3Rpdml0eU1lc3NhZ2VJbnB1dCFcXG4gICkge1xcbiAgICBicm9hZGNhc3RWaWV3ZXJVc2VyQWN0aXZpdHkoXFxuICAgICAgcHJvamVjdElkOiAkcHJvamVjdElkXFxuICAgICAgcmVzb3VyY2VJZFN0cmluZzogJHJlc291cmNlSWRTdHJpbmdcXG4gICAgICBtZXNzYWdlOiAkbWVzc2FnZVxcbiAgICApXFxuICB9XFxuXCI6IHR5cGVzLkJyb2FkY2FzdFZpZXdlclVzZXJBY3Rpdml0eURvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBNYXJrQ29tbWVudFZpZXdlZCgkaW5wdXQ6IE1hcmtDb21tZW50Vmlld2VkSW5wdXQhKSB7XFxuICAgIGNvbW1lbnRNdXRhdGlvbnMge1xcbiAgICAgIG1hcmtWaWV3ZWQoaW5wdXQ6ICRpbnB1dClcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5NYXJrQ29tbWVudFZpZXdlZERvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBDcmVhdGVDb21tZW50VGhyZWFkKCRpbnB1dDogQ3JlYXRlQ29tbWVudElucHV0ISkge1xcbiAgICBjb21tZW50TXV0YXRpb25zIHtcXG4gICAgICBjcmVhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgLi4uVmlld2VyQ29tbWVudFRocmVhZFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5DcmVhdGVDb21tZW50VGhyZWFkRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIENyZWF0ZUNvbW1lbnRSZXBseSgkaW5wdXQ6IENyZWF0ZUNvbW1lbnRSZXBseUlucHV0ISkge1xcbiAgICBjb21tZW50TXV0YXRpb25zIHtcXG4gICAgICByZXBseShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAuLi5WaWV3ZXJDb21tZW50c1JlcGx5SXRlbVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5DcmVhdGVDb21tZW50UmVwbHlEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gQXJjaGl2ZUNvbW1lbnQoJGlucHV0OiBBcmNoaXZlQ29tbWVudElucHV0ISkge1xcbiAgICBjb21tZW50TXV0YXRpb25zIHtcXG4gICAgICBhcmNoaXZlKGlucHV0OiAkaW5wdXQpXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuQXJjaGl2ZUNvbW1lbnREb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgUHJvamVjdFZpZXdlclJlc291cmNlcyhcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkcmVzb3VyY2VVcmxTdHJpbmc6IFN0cmluZyFcXG4gICAgJHNhdmVkVmlld0lkOiBJRFxcbiAgICAkc2F2ZWRWaWV3U2V0dGluZ3M6IFNhdmVkVmlld3NMb2FkU2V0dGluZ3NcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICB2aWV3ZXJSZXNvdXJjZXNFeHRlbmRlZChcXG4gICAgICAgIHJlc291cmNlSWRTdHJpbmc6ICRyZXNvdXJjZVVybFN0cmluZ1xcbiAgICAgICAgc2F2ZWRWaWV3SWQ6ICRzYXZlZFZpZXdJZFxcbiAgICAgICAgc2F2ZWRWaWV3U2V0dGluZ3M6ICRzYXZlZFZpZXdTZXR0aW5nc1xcbiAgICAgICkge1xcbiAgICAgICAgZ3JvdXBzIHtcXG4gICAgICAgICAgaWRlbnRpZmllclxcbiAgICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgICAgbW9kZWxJZFxcbiAgICAgICAgICAgIHZlcnNpb25JZFxcbiAgICAgICAgICAgIG9iamVjdElkXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHNhdmVkVmlldyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLlVzZVZpZXdlclNhdmVkVmlld1NldHVwX1NhdmVkVmlld1xcbiAgICAgICAgfVxcbiAgICAgICAgcmVxdWVzdCB7XFxuICAgICAgICAgIHNhdmVkVmlld0lkXFxuICAgICAgICB9XFxuICAgICAgICByZXNvdXJjZUlkU3RyaW5nXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RWaWV3ZXJSZXNvdXJjZXNEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgVmlld2VyTG9hZGVkUmVzb3VyY2VzKFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRtb2RlbElkczogW1N0cmluZyFdIVxcbiAgICAkdmVyc2lvbklkczogW1N0cmluZyFdXFxuICApIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgcm9sZVxcbiAgICAgIGFsbG93UHVibGljQ29tbWVudHNcXG4gICAgICBtb2RlbHMoZmlsdGVyOiB7IGlkczogJG1vZGVsSWRzIH0pIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgbmFtZVxcbiAgICAgICAgICB1cGRhdGVkQXRcXG4gICAgICAgICAgbG9hZGVkVmVyc2lvbjogdmVyc2lvbnMoXFxuICAgICAgICAgICAgZmlsdGVyOiB7IHByaW9yaXR5SWRzOiAkdmVyc2lvbklkcywgcHJpb3JpdHlJZHNPbmx5OiB0cnVlIH1cXG4gICAgICAgICAgKSB7XFxuICAgICAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAgICAgLi4uVmlld2VyTW9kZWxWZXJzaW9uQ2FyZEl0ZW1cXG4gICAgICAgICAgICAgIGF1dG9tYXRpb25zU3RhdHVzIHtcXG4gICAgICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICAgICAgYXV0b21hdGlvblJ1bnMge1xcbiAgICAgICAgICAgICAgICAgIC4uLkF1dG9tYXRlVmlld2VyUGFuZWxfQXV0b21hdGVSdW5cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgICB2ZXJzaW9ucyhsaW1pdDogNSkge1xcbiAgICAgICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgICAgICBjdXJzb3JcXG4gICAgICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgICAgICAuLi5WaWV3ZXJNb2RlbFZlcnNpb25DYXJkSXRlbVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICAuLi5Qcm9qZWN0UGFnZUxhdGVzdEl0ZW1zTW9kZWxzXFxuICAgICAgLi4uTW9kZWxQYWdlUHJvamVjdFxcbiAgICAgIC4uLkhlYWRlck5hdlNoYXJlX1Byb2plY3RcXG4gICAgICAuLi5Vc2VDaGVja1ZpZXdlckNvbW1lbnRpbmdBY2Nlc3NfUHJvamVjdFxcbiAgICAgIC4uLlVzZVZpZXdlclVzZXJBY3Rpdml0eUJyb2FkY2FzdGluZ19Qcm9qZWN0XFxuICAgICAgLi4uVmlld2VyUmVzb3VyY2VzTGltaXRBbGVydF9Qcm9qZWN0XFxuICAgICAgLi4uVmlld2VyU2F2ZWRWaWV3c1BhbmVsX1Byb2plY3RcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5WaWV3ZXJMb2FkZWRSZXNvdXJjZXNEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgVmlld2VyTW9kZWxWZXJzaW9ucyhcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkbW9kZWxJZDogU3RyaW5nIVxcbiAgICAkdmVyc2lvbnNDdXJzb3I6IFN0cmluZ1xcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHJvbGVcXG4gICAgICBtb2RlbChpZDogJG1vZGVsSWQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICB2ZXJzaW9ucyhjdXJzb3I6ICR2ZXJzaW9uc0N1cnNvciwgbGltaXQ6IDUpIHtcXG4gICAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgICBjdXJzb3JcXG4gICAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAgIC4uLlZpZXdlck1vZGVsVmVyc2lvbkNhcmRJdGVtXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuVmlld2VyTW9kZWxWZXJzaW9uc0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBWaWV3ZXJEaWZmVmVyc2lvbnMoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJG1vZGVsSWQ6IFN0cmluZyFcXG4gICAgJHZlcnNpb25BSWQ6IFN0cmluZyFcXG4gICAgJHZlcnNpb25CSWQ6IFN0cmluZyFcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBtb2RlbChpZDogJG1vZGVsSWQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICB2ZXJzaW9uQTogdmVyc2lvbihpZDogJHZlcnNpb25BSWQpIHtcXG4gICAgICAgICAgLi4uVmlld2VyTW9kZWxWZXJzaW9uQ2FyZEl0ZW1cXG4gICAgICAgIH1cXG4gICAgICAgIHZlcnNpb25COiB2ZXJzaW9uKGlkOiAkdmVyc2lvbkJJZCkge1xcbiAgICAgICAgICAuLi5WaWV3ZXJNb2RlbFZlcnNpb25DYXJkSXRlbVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5WaWV3ZXJEaWZmVmVyc2lvbnNEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgVmlld2VyTG9hZGVkVGhyZWFkcyhcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkZmlsdGVyOiBQcm9qZWN0Q29tbWVudHNGaWx0ZXIhXFxuICAgICRjdXJzb3I6IFN0cmluZ1xcbiAgICAkbGltaXQ6IEludFxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIGNvbW1lbnRUaHJlYWRzKGZpbHRlcjogJGZpbHRlciwgY3Vyc29yOiAkY3Vyc29yLCBsaW1pdDogJGxpbWl0KSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICB0b3RhbEFyY2hpdmVkQ291bnRcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgLi4uVmlld2VyQ29tbWVudFRocmVhZFxcbiAgICAgICAgICAuLi5MaW5rYWJsZUNvbW1lbnRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuVmlld2VyTG9hZGVkVGhyZWFkc0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBWaWV3ZXJSYXdQcm9qZWN0T2JqZWN0KCRwcm9qZWN0SWQ6IFN0cmluZyEsICRvYmplY3RJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBvYmplY3QoaWQ6ICRvYmplY3RJZCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGRhdGFcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuVmlld2VyUmF3UHJvamVjdE9iamVjdERvY3VtZW50LFxuICAgIFwiXFxuICBzdWJzY3JpcHRpb24gT25WaWV3ZXJVc2VyQWN0aXZpdHlCcm9hZGNhc3RlZChcXG4gICAgJHRhcmdldDogVmlld2VyVXBkYXRlVHJhY2tpbmdUYXJnZXQhXFxuICAgICRzZXNzaW9uSWQ6IFN0cmluZyFcXG4gICkge1xcbiAgICB2aWV3ZXJVc2VyQWN0aXZpdHlCcm9hZGNhc3RlZCh0YXJnZXQ6ICR0YXJnZXQsIHNlc3Npb25JZDogJHNlc3Npb25JZCkge1xcbiAgICAgIHVzZXJOYW1lXFxuICAgICAgdXNlcklkXFxuICAgICAgdXNlciB7XFxuICAgICAgICAuLi5MaW1pdGVkVXNlckF2YXRhclxcbiAgICAgIH1cXG4gICAgICBzdGF0ZVxcbiAgICAgIHN0YXR1c1xcbiAgICAgIHNlc3Npb25JZFxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLk9uVmlld2VyVXNlckFjdGl2aXR5QnJvYWRjYXN0ZWREb2N1bWVudCxcbiAgICBcIlxcbiAgc3Vic2NyaXB0aW9uIE9uVmlld2VyQ29tbWVudHNVcGRhdGVkKCR0YXJnZXQ6IFZpZXdlclVwZGF0ZVRyYWNraW5nVGFyZ2V0ISkge1xcbiAgICBwcm9qZWN0Q29tbWVudHNVcGRhdGVkKHRhcmdldDogJHRhcmdldCkge1xcbiAgICAgIGlkXFxuICAgICAgdHlwZVxcbiAgICAgIGNvbW1lbnQge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHBhcmVudCB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICB9XFxuICAgICAgICAuLi5WaWV3ZXJDb21tZW50VGhyZWFkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLk9uVmlld2VyQ29tbWVudHNVcGRhdGVkRG9jdW1lbnQsXG4gICAgXCJcXG4gIGZyYWdtZW50IExpbmthYmxlQ29tbWVudCBvbiBDb21tZW50IHtcXG4gICAgaWRcXG4gICAgdmlld2VyUmVzb3VyY2VzIHtcXG4gICAgICBtb2RlbElkXFxuICAgICAgdmVyc2lvbklkXFxuICAgICAgb2JqZWN0SWRcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5MaW5rYWJsZUNvbW1lbnRGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgQWN0aXZlV29ya3NwYWNlX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGxvZ29cXG4gICAgcm9sZVxcbiAgICBzbHVnXFxuICB9XFxuXCI6IHR5cGVzLkFjdGl2ZVdvcmtzcGFjZV9Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgRGlzY292ZXJhYmxlV29ya3NwYWNlX0xpbWl0ZWRXb3Jrc3BhY2Ugb24gTGltaXRlZFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgbG9nb1xcbiAgICBkZXNjcmlwdGlvblxcbiAgICBzbHVnXFxuICAgIGRpc2NvdmVyYWJpbGl0eUF1dG9Kb2luRW5hYmxlZFxcbiAgICB0ZWFtIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgdXNlciB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIG5hbWVcXG4gICAgICAgICAgYXZhdGFyXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICAgIGFkbWluVGVhbSB7XFxuICAgICAgdXNlciB7XFxuICAgICAgICBpZFxcbiAgICAgICAgbmFtZVxcbiAgICAgICAgYXZhdGFyXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkRpc2NvdmVyYWJsZVdvcmtzcGFjZV9MaW1pdGVkV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZUpvaW5SZXF1ZXN0c19MaW1pdGVkV29ya3NwYWNlSm9pblJlcXVlc3Qgb24gTGltaXRlZFdvcmtzcGFjZUpvaW5SZXF1ZXN0IHtcXG4gICAgaWRcXG4gICAgc3RhdHVzXFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgICAgbG9nb1xcbiAgICAgIHNsdWdcXG4gICAgICBkaXNjb3ZlcmFiaWxpdHlBdXRvSm9pbkVuYWJsZWRcXG4gICAgICBhZG1pblRlYW0ge1xcbiAgICAgICAgdXNlciB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIG5hbWVcXG4gICAgICAgICAgYXZhdGFyXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIHRlYW0ge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICB1c2VyIHtcXG4gICAgICAgICAgICBpZFxcbiAgICAgICAgICAgIG5hbWVcXG4gICAgICAgICAgICBhdmF0YXJcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Xb3Jrc3BhY2VKb2luUmVxdWVzdHNfTGltaXRlZFdvcmtzcGFjZUpvaW5SZXF1ZXN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZVBsYW5MaW1pdHNfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHNsdWdcXG4gICAgcGxhbiB7XFxuICAgICAgbmFtZVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLldvcmtzcGFjZVBsYW5MaW1pdHNfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFVzZVdvcmtzcGFjZUludml0ZU1hbmFnZXJfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvciBvbiBQZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yIHtcXG4gICAgaWRcXG4gICAgdG9rZW5cXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICAuLi5Xb3Jrc3BhY2VJbnZpdGVDYXJkX0xpbWl0ZWRXb3Jrc3BhY2VcXG4gICAgfVxcbiAgICB1c2VyIHtcXG4gICAgICBpZFxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlVzZVdvcmtzcGFjZUludml0ZU1hbmFnZXJfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VzUGxhbl9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgc2x1Z1xcbiAgICBwbGFuIHtcXG4gICAgICBzdGF0dXNcXG4gICAgICBjcmVhdGVkQXRcXG4gICAgICBuYW1lXFxuICAgICAgcGF5bWVudE1ldGhvZFxcbiAgICAgIHVzYWdlIHtcXG4gICAgICAgIHByb2plY3RDb3VudFxcbiAgICAgICAgbW9kZWxDb3VudFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICBzZWF0cyB7XFxuICAgICAgZWRpdG9ycyB7XFxuICAgICAgICBhc3NpZ25lZFxcbiAgICAgICAgYXZhaWxhYmxlXFxuICAgICAgfVxcbiAgICAgIHZpZXdlcnMge1xcbiAgICAgICAgYXNzaWduZWRcXG4gICAgICAgIGF2YWlsYWJsZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICBzdWJzY3JpcHRpb24ge1xcbiAgICAgIGJpbGxpbmdJbnRlcnZhbFxcbiAgICAgIGN1cnJlbnRCaWxsaW5nQ3ljbGVFbmRcXG4gICAgICBjdXJyZW5jeVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLldvcmtzcGFjZXNQbGFuX1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICAgICAgc3Vic2NyaXB0aW9uIE9uV29ya3NwYWNlUHJvamVjdHNVcGRhdGUoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgICAgIHdvcmtzcGFjZVByb2plY3RzVXBkYXRlZCh3b3Jrc3BhY2VJZDogbnVsbCwgd29ya3NwYWNlU2x1ZzogJHNsdWcpIHtcXG4gICAgICAgICAgcHJvamVjdElkXFxuICAgICAgICAgIHdvcmtzcGFjZUlkXFxuICAgICAgICAgIHR5cGVcXG4gICAgICAgICAgcHJvamVjdCB7XFxuICAgICAgICAgICAgLi4uUHJvamVjdERhc2hib2FyZEl0ZW1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgXCI6IHR5cGVzLk9uV29ya3NwYWNlUHJvamVjdHNVcGRhdGVEb2N1bWVudCxcbiAgICBcIlxcbiAgZnJhZ21lbnQgVXNlQ2FuQ3JlYXRlV29ya3NwYWNlUHJvamVjdF9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkNyZWF0ZVByb2plY3Qge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Vc2VDYW5DcmVhdGVXb3Jrc3BhY2VQcm9qZWN0X1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBVc2VDYW5Nb3ZlUHJvamVjdEludG9Xb3Jrc3BhY2VfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5Nb3ZlUHJvamVjdFRvV29ya3NwYWNlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuVXNlQ2FuTW92ZVByb2plY3RJbnRvV29ya3NwYWNlX1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBVc2VDYW5Nb3ZlUHJvamVjdEludG9Xb3Jrc3BhY2VfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbk1vdmVUb1dvcmtzcGFjZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlVzZUNhbk1vdmVQcm9qZWN0SW50b1dvcmtzcGFjZV9Qcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZUhhc0N1c3RvbURhdGFSZXNpZGVuY3lfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIGRlZmF1bHRSZWdpb24ge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLldvcmtzcGFjZUhhc0N1c3RvbURhdGFSZXNpZGVuY3lfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIHF1ZXJ5IENoZWNrUHJvamVjdFdvcmtzcGFjZURhdGFSZXNpZGVuY3koJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICB3b3Jrc3BhY2Uge1xcbiAgICAgICAgLi4uV29ya3NwYWNlSGFzQ3VzdG9tRGF0YVJlc2lkZW5jeV9Xb3Jrc3BhY2VcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuQ2hlY2tQcm9qZWN0V29ya3NwYWNlRGF0YVJlc2lkZW5jeURvY3VtZW50LFxuICAgIFwiXFxuICAgIGZyYWdtZW50IFdvcmtzcGFjZVNzb1N0YXR1c19Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIHNzbyB7XFxuICAgICAgICBwcm92aWRlciB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIG5hbWVcXG4gICAgICAgICAgY2xpZW50SWRcXG4gICAgICAgICAgaXNzdWVyVXJsXFxuICAgICAgICB9XFxuICAgICAgICBzZXNzaW9uIHtcXG4gICAgICAgICAgdmFsaWRVbnRpbFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgXCI6IHR5cGVzLldvcmtzcGFjZVNzb1N0YXR1c19Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgICBmcmFnbWVudCBXb3Jrc3BhY2VTc29TdGF0dXNfVXNlciBvbiBVc2VyIHtcXG4gICAgICBleHBpcmVkU3NvU2Vzc2lvbnMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHNsdWdcXG4gICAgICB9XFxuICAgIH1cXG4gIFwiOiB0eXBlcy5Xb3Jrc3BhY2VTc29TdGF0dXNfVXNlckZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VVc2FnZV9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgc2x1Z1xcbiAgICBwbGFuIHtcXG4gICAgICB1c2FnZSB7XFxuICAgICAgICBwcm9qZWN0Q291bnRcXG4gICAgICAgIG1vZGVsQ291bnRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgdGVhbSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICAgIHRlYW1CeVJvbGUge1xcbiAgICAgIGFkbWlucyB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICAgIG1lbWJlcnMge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgIH1cXG4gICAgICBndWVzdHMge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Xb3Jrc3BhY2VVc2FnZV9Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgbXV0YXRpb24gVXBkYXRlUm9sZSgkaW5wdXQ6IFdvcmtzcGFjZVJvbGVVcGRhdGVJbnB1dCEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICB1cGRhdGVSb2xlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIHRlYW0ge1xcbiAgICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICByb2xlXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuVXBkYXRlUm9sZURvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBXb3Jrc3BhY2VzVXBkYXRlU2VhdFR5cGUoJGlucHV0OiBXb3Jrc3BhY2VVcGRhdGVTZWF0VHlwZUlucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIHVwZGF0ZVNlYXRUeXBlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIHRlYW0ge1xcbiAgICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICBzZWF0VHlwZVxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLldvcmtzcGFjZXNVcGRhdGVTZWF0VHlwZURvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBJbnZpdGVUb1dvcmtzcGFjZShcXG4gICAgJHdvcmtzcGFjZUlkOiBTdHJpbmchXFxuICAgICRpbnB1dDogW1dvcmtzcGFjZUludml0ZUNyZWF0ZUlucHV0IV0hXFxuICApIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICBpbnZpdGVzIHtcXG4gICAgICAgIGJhdGNoQ3JlYXRlKHdvcmtzcGFjZUlkOiAkd29ya3NwYWNlSWQsIGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgaW52aXRlZFRlYW0ge1xcbiAgICAgICAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNJbnZpdGVzVGFibGVfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvclxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkludml0ZVRvV29ya3NwYWNlRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIENyZWF0ZVdvcmtzcGFjZSgkaW5wdXQ6IFdvcmtzcGFjZUNyZWF0ZUlucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIGNyZWF0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgLi4uU2V0dGluZ3NTaWRlYmFyX1dvcmtzcGFjZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5DcmVhdGVXb3Jrc3BhY2VEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gUHJvY2Vzc1dvcmtzcGFjZUludml0ZSgkaW5wdXQ6IFdvcmtzcGFjZUludml0ZVVzZUlucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIGludml0ZXMge1xcbiAgICAgICAgdXNlKGlucHV0OiAkaW5wdXQpXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlByb2Nlc3NXb3Jrc3BhY2VJbnZpdGVEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gU2V0RGVmYXVsdFdvcmtzcGFjZVJlZ2lvbigkd29ya3NwYWNlSWQ6IFN0cmluZyEsICRyZWdpb25LZXk6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICBzZXREZWZhdWx0UmVnaW9uKHdvcmtzcGFjZUlkOiAkd29ya3NwYWNlSWQsIHJlZ2lvbktleTogJHJlZ2lvbktleSkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGRlZmF1bHRSZWdpb24ge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNSZWdpb25zU2VsZWN0X1NlcnZlclJlZ2lvbkl0ZW1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuU2V0RGVmYXVsdFdvcmtzcGFjZVJlZ2lvbkRvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBEZWxldGVXb3Jrc3BhY2VTc29Qcm92aWRlcigkd29ya3NwYWNlSWQ6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICBkZWxldGVTc29Qcm92aWRlcih3b3Jrc3BhY2VJZDogJHdvcmtzcGFjZUlkKVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkRlbGV0ZVdvcmtzcGFjZVNzb1Byb3ZpZGVyRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIFNldFdvcmtzcGFjZUNyZWF0aW9uU3RhdGUoJGlucHV0OiBXb3Jrc3BhY2VDcmVhdGlvblN0YXRlSW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgdXBkYXRlQ3JlYXRpb25TdGF0ZShpbnB1dDogJGlucHV0KVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlNldFdvcmtzcGFjZUNyZWF0aW9uU3RhdGVEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gV29ya3NwYWNlVXBkYXRlRG9tYWluUHJvdGVjdGlvbk11dGF0aW9uKCRpbnB1dDogV29ya3NwYWNlVXBkYXRlSW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgdXBkYXRlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBkb21haW5CYXNlZE1lbWJlcnNoaXBQcm90ZWN0aW9uRW5hYmxlZFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Xb3Jrc3BhY2VVcGRhdGVEb21haW5Qcm90ZWN0aW9uTXV0YXRpb25Eb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gV29ya3NwYWNlVXBkYXRlRGlzY292ZXJhYmlsaXR5TXV0YXRpb24oJGlucHV0OiBXb3Jrc3BhY2VVcGRhdGVJbnB1dCEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICB1cGRhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGRpc2NvdmVyYWJpbGl0eUVuYWJsZWRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuV29ya3NwYWNlVXBkYXRlRGlzY292ZXJhYmlsaXR5TXV0YXRpb25Eb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gQXBwcm92ZVdvcmtzcGFjZUpvaW5SZXF1ZXN0KCRpbnB1dDogQXBwcm92ZVdvcmtzcGFjZUpvaW5SZXF1ZXN0SW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZUpvaW5SZXF1ZXN0TXV0YXRpb25zIHtcXG4gICAgICBhcHByb3ZlKGlucHV0OiAkaW5wdXQpXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuQXBwcm92ZVdvcmtzcGFjZUpvaW5SZXF1ZXN0RG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIERlbnlXb3Jrc3BhY2VKb2luUmVxdWVzdCgkaW5wdXQ6IERlbnlXb3Jrc3BhY2VKb2luUmVxdWVzdElucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VKb2luUmVxdWVzdE11dGF0aW9ucyB7XFxuICAgICAgZGVueShpbnB1dDogJGlucHV0KVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkRlbnlXb3Jrc3BhY2VKb2luUmVxdWVzdERvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBSZXF1ZXN0VG9Kb2luV29ya3NwYWNlKCRpbnB1dDogV29ya3NwYWNlUmVxdWVzdFRvSm9pbklucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIHJlcXVlc3RUb0pvaW4oaW5wdXQ6ICRpbnB1dClcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5SZXF1ZXN0VG9Kb2luV29ya3NwYWNlRG9jdW1lbnQsXG4gICAgXCJcXG4gIG11dGF0aW9uIERpc21pc3NEaXNjb3ZlcmFibGVXb3Jrc3BhY2UoJGlucHV0OiBXb3Jrc3BhY2VEaXNtaXNzSW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgZGlzbWlzcyhpbnB1dDogJGlucHV0KVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkRpc21pc3NEaXNjb3ZlcmFibGVXb3Jrc3BhY2VEb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gV29ya3NwYWNlVXBkYXRlQXV0b0pvaW5NdXRhdGlvbigkaW5wdXQ6IFdvcmtzcGFjZVVwZGF0ZUlucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIHVwZGF0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgZGlzY292ZXJhYmlsaXR5QXV0b0pvaW5FbmFibGVkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLldvcmtzcGFjZVVwZGF0ZUF1dG9Kb2luTXV0YXRpb25Eb2N1bWVudCxcbiAgICBcIlxcbiAgbXV0YXRpb24gV29ya3NwYWNlVXBkYXRlRGVmYXVsdFNlYXRUeXBlTXV0YXRpb24oJGlucHV0OiBXb3Jrc3BhY2VVcGRhdGVJbnB1dCEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICB1cGRhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGRlZmF1bHRTZWF0VHlwZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Xb3Jrc3BhY2VVcGRhdGVEZWZhdWx0U2VhdFR5cGVNdXRhdGlvbkRvY3VtZW50LFxuICAgIFwiXFxuICBtdXRhdGlvbiBXb3Jrc3BhY2VVcGRhdGVFeGNsdXNpdmVNdXRhdGlvbigkaW5wdXQ6IFdvcmtzcGFjZVVwZGF0ZUlucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIHVwZGF0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgaXNFeGNsdXNpdmVcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuV29ya3NwYWNlVXBkYXRlRXhjbHVzaXZlTXV0YXRpb25Eb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgV29ya3NwYWNlKCRmZWF0dXJlTmFtZTogV29ya3NwYWNlRmVhdHVyZU5hbWUhLCAkd29ya3NwYWNlSWQ6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlKGlkOiAkd29ya3NwYWNlSWQpIHtcXG4gICAgICBoYXNBY2Nlc3NUb0ZlYXR1cmUoZmVhdHVyZU5hbWU6ICRmZWF0dXJlTmFtZSlcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Xb3Jrc3BhY2VEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgV29ya3NwYWNlQWNjZXNzQ2hlY2soJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgaWRcXG4gICAgICBzbHVnXFxuICAgIH1cXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgaWRcXG4gICAgICBhY3RpdmVXb3Jrc3BhY2Uge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHNsdWdcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuV29ya3NwYWNlQWNjZXNzQ2hlY2tEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgV29ya3NwYWNlUGFnZVF1ZXJ5KFxcbiAgICAkd29ya3NwYWNlU2x1ZzogU3RyaW5nIVxcbiAgICAkaW52aXRlc0ZpbHRlcjogUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvcnNGaWx0ZXJcXG4gICkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHdvcmtzcGFjZVNsdWcpIHtcXG4gICAgICAuLi5Xb3Jrc3BhY2VQYWdlX1dvcmtzcGFjZVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLldvcmtzcGFjZVBhZ2VRdWVyeURvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBXb3Jrc3BhY2VQcm9qZWN0c1F1ZXJ5KFxcbiAgICAkd29ya3NwYWNlU2x1ZzogU3RyaW5nIVxcbiAgICAkZmlsdGVyOiBXb3Jrc3BhY2VQcm9qZWN0c0ZpbHRlclxcbiAgICAkY3Vyc29yOiBTdHJpbmdcXG4gICkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHdvcmtzcGFjZVNsdWcpIHtcXG4gICAgICBpZFxcbiAgICAgIHByb2plY3RzKGZpbHRlcjogJGZpbHRlciwgY3Vyc29yOiAkY3Vyc29yLCBsaW1pdDogMTApIHtcXG4gICAgICAgIC4uLldvcmtzcGFjZURhc2hib2FyZFByb2plY3RMaXN0X1Byb2plY3RDb2xsZWN0aW9uXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLldvcmtzcGFjZVByb2plY3RzUXVlcnlEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgV29ya3NwYWNlRnVuY3Rpb25zUXVlcnkoJHdvcmtzcGFjZVNsdWc6IFN0cmluZyEpIHtcXG4gICAgLi4uQXV0b21hdGVGdW5jdGlvbnNQYWdlSGVhZGVyX1F1ZXJ5XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkd29ya3NwYWNlU2x1Zykge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICAgIGF1dG9tYXRlRnVuY3Rpb25zIHtcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uQXV0b21hdGlvbnNGdW5jdGlvbnNDYXJkX0F1dG9tYXRlRnVuY3Rpb25cXG4gICAgICAgICAgLi4uQXV0b21hdGVBdXRvbWF0aW9uQ3JlYXRlRGlhbG9nX0F1dG9tYXRlRnVuY3Rpb25cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuV29ya3NwYWNlRnVuY3Rpb25zUXVlcnlEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgV29ya3NwYWNlSW52aXRlKFxcbiAgICAkd29ya3NwYWNlSWQ6IFN0cmluZ1xcbiAgICAkdG9rZW46IFN0cmluZ1xcbiAgICAkb3B0aW9uczogV29ya3NwYWNlSW52aXRlTG9va3VwT3B0aW9uc1xcbiAgKSB7XFxuICAgIHdvcmtzcGFjZUludml0ZSh3b3Jrc3BhY2VJZDogJHdvcmtzcGFjZUlkLCB0b2tlbjogJHRva2VuLCBvcHRpb25zOiAkb3B0aW9ucykge1xcbiAgICAgIC4uLldvcmtzcGFjZUludml0ZUJhbm5lcl9QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yXFxuICAgICAgLi4uV29ya3NwYWNlSW52aXRlQmxvY2tfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvclxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLldvcmtzcGFjZUludml0ZURvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBWYWxpZGF0ZVdvcmtzcGFjZVNsdWcoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgdmFsaWRhdGVXb3Jrc3BhY2VTbHVnKHNsdWc6ICRzbHVnKVxcbiAgfVxcblwiOiB0eXBlcy5WYWxpZGF0ZVdvcmtzcGFjZVNsdWdEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgV29ya3NwYWNlU3NvQnlFbWFpbCgkZW1haWw6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlU3NvQnlFbWFpbChlbWFpbDogJGVtYWlsKSB7XFxuICAgICAgLi4uQXV0aFNzb0xvZ2luX1dvcmtzcGFjZVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLldvcmtzcGFjZVNzb0J5RW1haWxEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgV29ya3NwYWNlU3NvQ2hlY2soJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgLi4uV29ya3NwYWNlU3NvU3RhdHVzX1dvcmtzcGFjZVxcbiAgICB9XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIC4uLldvcmtzcGFjZVNzb1N0YXR1c19Vc2VyXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuV29ya3NwYWNlU3NvQ2hlY2tEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgV29ya3NwYWNlV2l6YXJkKCR3b3Jrc3BhY2VJZDogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2UoaWQ6ICR3b3Jrc3BhY2VJZCkge1xcbiAgICAgIGlkXFxuICAgICAgLi4uV29ya3NwYWNlV2l6YXJkX1dvcmtzcGFjZVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLldvcmtzcGFjZVdpemFyZERvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBXb3Jrc3BhY2VXaXphcmRSZWdpb24ge1xcbiAgICBzZXJ2ZXJJbmZvIHtcXG4gICAgICAuLi5Xb3Jrc3BhY2VXaXphcmRTdGVwUmVnaW9uX1NlcnZlckluZm9cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Xb3Jrc3BhY2VXaXphcmRSZWdpb25Eb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgRGlzY292ZXJhYmxlV29ya3NwYWNlcyB7XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgZGlzY292ZXJhYmxlV29ya3NwYWNlcyB7XFxuICAgICAgICAuLi5EaXNjb3ZlcmFibGVXb3Jrc3BhY2VfTGltaXRlZFdvcmtzcGFjZVxcbiAgICAgIH1cXG4gICAgICB3b3Jrc3BhY2VKb2luUmVxdWVzdHMge1xcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAuLi5Xb3Jrc3BhY2VKb2luUmVxdWVzdHNfTGltaXRlZFdvcmtzcGFjZUpvaW5SZXF1ZXN0XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkRpc2NvdmVyYWJsZVdvcmtzcGFjZXNEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgV29ya3NwYWNlUGxhbigkc2x1ZzogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHNsdWcpIHtcXG4gICAgICAuLi5Xb3Jrc3BhY2VzUGxhbl9Xb3Jrc3BhY2VcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Xb3Jrc3BhY2VQbGFuRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IGFjdGl2ZVdvcmtzcGFjZSgkc2x1ZzogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHNsdWcpIHtcXG4gICAgICAuLi5BY3RpdmVXb3Jrc3BhY2VfV29ya3NwYWNlXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuQWN0aXZlV29ya3NwYWNlRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFdvcmtzcGFjZUxhc3RBZG1pbkNoZWNrKCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIHRlYW1CeVJvbGUge1xcbiAgICAgICAgYWRtaW5zIHtcXG4gICAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Xb3Jrc3BhY2VMYXN0QWRtaW5DaGVja0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBXb3Jrc3BhY2VMaW1pdHMoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgLi4uV29ya3NwYWNlUGxhbkxpbWl0c19Xb3Jrc3BhY2VcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Xb3Jrc3BhY2VMaW1pdHNEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgV29ya3NwYWNlVXNhZ2UoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgLi4uV29ya3NwYWNlVXNhZ2VfV29ya3NwYWNlXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuV29ya3NwYWNlVXNhZ2VEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyUHJvamVjdCgkcHJvamVjdElkOiBTdHJpbmchLCAkd29ya3NwYWNlSWQ6IFN0cmluZykge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgLi4uV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1Byb2plY3RcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Xb3Jrc3BhY2VNb3ZlUHJvamVjdE1hbmFnZXJQcm9qZWN0RG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFdvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlcldvcmtzcGFjZShcXG4gICAgJHdvcmtzcGFjZVNsdWc6IFN0cmluZyFcXG4gICAgJHByb2plY3RJZDogU3RyaW5nXFxuICApIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICR3b3Jrc3BhY2VTbHVnKSB7XFxuICAgICAgLi4uV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1dvcmtzcGFjZVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLldvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlcldvcmtzcGFjZURvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBXb3Jrc3BhY2VNb3ZlUHJvamVjdE1hbmFnZXJVc2VyKFxcbiAgICAkY3Vyc29yOiBTdHJpbmdcXG4gICAgJGZpbHRlcjogVXNlclByb2plY3RzRmlsdGVyXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZ1xcbiAgICAkc29ydEJ5OiBbU3RyaW5nIV1cXG4gICAgJHdvcmtzcGFjZUlkOiBTdHJpbmdcXG4gICkge1xcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICAuLi5Xb3Jrc3BhY2VNb3ZlUHJvamVjdFNlbGVjdFdvcmtzcGFjZV9Vc2VyXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyVXNlckRvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBVc2VDYW5DcmVhdGVXb3Jrc3BhY2Uge1xcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICAuLi5Vc2VDYW5DcmVhdGVXb3Jrc3BhY2VfVXNlclxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlVzZUNhbkNyZWF0ZVdvcmtzcGFjZURvY3VtZW50LFxuICAgIFwiXFxuICBzdWJzY3JpcHRpb24gb25Xb3Jrc3BhY2VVcGRhdGVkKFxcbiAgICAkd29ya3NwYWNlSWQ6IFN0cmluZ1xcbiAgICAkd29ya3NwYWNlU2x1ZzogU3RyaW5nXFxuICAgICRpbnZpdGVzRmlsdGVyOiBQZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yc0ZpbHRlclxcbiAgKSB7XFxuICAgIHdvcmtzcGFjZVVwZGF0ZWQod29ya3NwYWNlSWQ6ICR3b3Jrc3BhY2VJZCwgd29ya3NwYWNlU2x1ZzogJHdvcmtzcGFjZVNsdWcpIHtcXG4gICAgICBpZFxcbiAgICAgIHdvcmtzcGFjZSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgLi4uV29ya3NwYWNlRGFzaGJvYXJkX1dvcmtzcGFjZVxcbiAgICAgICAgLi4uV29ya3NwYWNlRGFzaGJvYXJkUHJvamVjdExpc3RfV29ya3NwYWNlXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLk9uV29ya3NwYWNlVXBkYXRlZERvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBMZWdhY3lCcmFuY2hSZWRpcmVjdE1ldGFkYXRhKCRzdHJlYW1JZDogU3RyaW5nISwgJGJyYW5jaE5hbWU6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHN0cmVhbUlkKSB7XFxuICAgICAgbW9kZWxCeU5hbWUobmFtZTogJGJyYW5jaE5hbWUpIHtcXG4gICAgICAgIGlkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkxlZ2FjeUJyYW5jaFJlZGlyZWN0TWV0YWRhdGFEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgTGVnYWN5Vmlld2VyQ29tbWl0UmVkaXJlY3RNZXRhZGF0YSgkc3RyZWFtSWQ6IFN0cmluZyEsICRjb21taXRJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkc3RyZWFtSWQpIHtcXG4gICAgICB2ZXJzaW9uKGlkOiAkY29tbWl0SWQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBtb2RlbCB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLkxlZ2FjeVZpZXdlckNvbW1pdFJlZGlyZWN0TWV0YWRhdGFEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgTGVnYWN5Vmlld2VyU3RyZWFtUmVkaXJlY3RNZXRhZGF0YSgkc3RyZWFtSWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHN0cmVhbUlkKSB7XFxuICAgICAgaWRcXG4gICAgICB2ZXJzaW9ucyhsaW1pdDogMSkge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBtb2RlbCB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5MZWdhY3lWaWV3ZXJTdHJlYW1SZWRpcmVjdE1ldGFkYXRhRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IEF1dG9BY2NlcHRhYmxlV29ya3NwYWNlSW52aXRlKFxcbiAgICAkdG9rZW46IFN0cmluZyFcXG4gICAgJHdvcmtzcGFjZUlkOiBTdHJpbmchXFxuICAgICRvcHRpb25zOiBXb3Jrc3BhY2VJbnZpdGVMb29rdXBPcHRpb25zXFxuICApIHtcXG4gICAgd29ya3NwYWNlSW52aXRlKHRva2VuOiAkdG9rZW4sIHdvcmtzcGFjZUlkOiAkd29ya3NwYWNlSWQsIG9wdGlvbnM6ICRvcHRpb25zKSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5Vc2VXb3Jrc3BhY2VJbnZpdGVNYW5hZ2VyX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3JcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5BdXRvQWNjZXB0YWJsZVdvcmtzcGFjZUludml0ZURvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBDYW5WaWV3UHJvamVjdFRva2VucygkcHJvamVjdElkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICAgIGNhblJlYWRFbWJlZFRva2VucyB7XFxuICAgICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuQ2FuVmlld1Byb2plY3RUb2tlbnNEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgQ2FuVmlld1Byb2plY3RTZXR0aW5ncygkcHJvamVjdElkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICAgIGNhblJlYWRTZXR0aW5ncyB7XFxuICAgICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuQ2FuVmlld1Byb2plY3RTZXR0aW5nc0RvY3VtZW50LFxuICAgIFwiXFxuICBxdWVyeSBDYW5WaWV3UHJvamVjdFdlYmhvb2tzKCRwcm9qZWN0SWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgcGVybWlzc2lvbnMge1xcbiAgICAgICAgY2FuUmVhZFdlYmhvb2tzIHtcXG4gICAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5DYW5WaWV3UHJvamVjdFdlYmhvb2tzRG9jdW1lbnQsXG4gICAgXCJcXG4gIHF1ZXJ5IFJlc29sdmVDb21tZW50TGluaygkY29tbWVudElkOiBTdHJpbmchLCAkcHJvamVjdElkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBjb21tZW50KGlkOiAkY29tbWVudElkKSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgLi4uTGlua2FibGVDb21tZW50XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlJlc29sdmVDb21tZW50TGlua0RvY3VtZW50LFxuICAgIFwiXFxuICBmcmFnbWVudCBBdXRvbWF0ZUZ1bmN0aW9uUGFnZV9BdXRvbWF0ZUZ1bmN0aW9uIG9uIEF1dG9tYXRlRnVuY3Rpb24ge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGRlc2NyaXB0aW9uXFxuICAgIGxvZ29cXG4gICAgc3VwcG9ydGVkU291cmNlQXBwc1xcbiAgICB0YWdzXFxuICAgIC4uLkF1dG9tYXRlRnVuY3Rpb25QYWdlSGVhZGVyX0Z1bmN0aW9uXFxuICAgIC4uLkF1dG9tYXRlRnVuY3Rpb25QYWdlSW5mb19BdXRvbWF0ZUZ1bmN0aW9uXFxuICAgIC4uLkF1dG9tYXRlQXV0b21hdGlvbkNyZWF0ZURpYWxvZ19BdXRvbWF0ZUZ1bmN0aW9uXFxuICAgIGNyZWF0b3Ige1xcbiAgICAgIGlkXFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuQXV0b21hdGVGdW5jdGlvblBhZ2VfQXV0b21hdGVGdW5jdGlvbkZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBxdWVyeSBBdXRvbWF0ZUZ1bmN0aW9uUGFnZSgkZnVuY3Rpb25JZDogSUQhKSB7XFxuICAgIGF1dG9tYXRlRnVuY3Rpb24oaWQ6ICRmdW5jdGlvbklkKSB7XFxuICAgICAgLi4uQXV0b21hdGVGdW5jdGlvblBhZ2VfQXV0b21hdGVGdW5jdGlvblxcbiAgICB9XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIHdvcmtzcGFjZXMge1xcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAuLi5BdXRvbWF0ZUZ1bmN0aW9uQ3JlYXRlRGlhbG9nX1dvcmtzcGFjZVxcbiAgICAgICAgICAuLi5BdXRvbWF0ZUZ1bmN0aW9uRWRpdERpYWxvZ19Xb3Jrc3BhY2VcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuQXV0b21hdGVGdW5jdGlvblBhZ2VEb2N1bWVudCxcbiAgICBcIlxcbiAgcXVlcnkgQXV0b21hdGVGdW5jdGlvblBhZ2VXb3Jrc3BhY2UoJHdvcmtzcGFjZUlkOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZShpZDogJHdvcmtzcGFjZUlkKSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5BdXRvbWF0ZUZ1bmN0aW9uUGFnZUhlYWRlcl9Xb3Jrc3BhY2VcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5BdXRvbWF0ZUZ1bmN0aW9uUGFnZVdvcmtzcGFjZURvY3VtZW50LFxuICAgIFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZVByb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIGNyZWF0ZWRBdFxcbiAgICBtb2RlbENvdW50OiBtb2RlbHMobGltaXQ6IDApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgY29tbWVudFRocmVhZENvdW50OiBjb21tZW50VGhyZWFkcyhsaW1pdDogMCkge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgfVxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgcGVybWlzc2lvbnMge1xcbiAgICAgICAgY2FuTGlzdERhc2hib2FyZHMge1xcbiAgICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5SZWFkU2V0dGluZ3Mge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5VcGRhdGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5Nb3ZlVG9Xb3Jrc3BhY2Uge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5Qcm9qZWN0UGFnZVRlYW1JbnRlcm5hbHNfUHJvamVjdFxcbiAgICAuLi5Qcm9qZWN0UGFnZVByb2plY3RIZWFkZXJcXG4gICAgLi4uUHJvamVjdFBhZ2VUZWFtRGlhbG9nXFxuICAgIC4uLldvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlcl9Qcm9qZWN0QmFzZVxcbiAgICAuLi5Qcm9qZWN0UGFnZVNldHRpbmdzVGFiX1Byb2plY3RcXG4gICAgLi4uV29ya3NwYWNlTW92ZVByb2plY3RfUHJvamVjdFxcbiAgICBoYXNBY2Nlc3NUb0Rhc2hib2FyZHM6IGhhc0FjY2Vzc1RvRmVhdHVyZShmZWF0dXJlTmFtZTogZGFzaGJvYXJkcylcXG4gIH1cXG5cIjogdHlwZXMuUHJvamVjdFBhZ2VQcm9qZWN0RnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlQXV0b21hdGlvblBhZ2VfQXV0b21hdGlvbiBvbiBBdXRvbWF0aW9uIHtcXG4gICAgaWRcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhblVwZGF0ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIC4uLlByb2plY3RQYWdlQXV0b21hdGlvbkhlYWRlcl9BdXRvbWF0aW9uXFxuICAgIC4uLlByb2plY3RQYWdlQXV0b21hdGlvbkZ1bmN0aW9uc19BdXRvbWF0aW9uXFxuICAgIC4uLlByb2plY3RQYWdlQXV0b21hdGlvblJ1bnNfQXV0b21hdGlvblxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0UGFnZUF1dG9tYXRpb25QYWdlX0F1dG9tYXRpb25GcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VBdXRvbWF0aW9uUGFnZV9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICB3b3Jrc3BhY2VJZFxcbiAgICAuLi5Qcm9qZWN0UGFnZUF1dG9tYXRpb25IZWFkZXJfUHJvamVjdFxcbiAgfVxcblwiOiB0eXBlcy5Qcm9qZWN0UGFnZUF1dG9tYXRpb25QYWdlX1Byb2plY3RGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VTZXR0aW5nc1RhYl9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5SZWFkV2ViaG9va3Mge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5SZWFkRW1iZWRUb2tlbnMge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5SZWFkQWNjSW50ZWdyYXRpb25TZXR0aW5ncyB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlByb2plY3RQYWdlU2V0dGluZ3NUYWJfUHJvamVjdEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1NlcnZlclByb2plY3RzX1Byb2plY3RDb2xsZWN0aW9uIG9uIFByb2plY3RDb2xsZWN0aW9uIHtcXG4gICAgdG90YWxDb3VudFxcbiAgICBpdGVtcyB7XFxuICAgICAgLi4uU2V0dGluZ3NTaGFyZWRQcm9qZWN0c19Qcm9qZWN0XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuU2V0dGluZ3NTZXJ2ZXJQcm9qZWN0c19Qcm9qZWN0Q29sbGVjdGlvbkZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBxdWVyeSBTZXR0aW5nc1NlcnZlclJlZ2lvbnMge1xcbiAgICBzZXJ2ZXJJbmZvIHtcXG4gICAgICBtdWx0aVJlZ2lvbiB7XFxuICAgICAgICByZWdpb25zIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uU2V0dGluZ3NTZXJ2ZXJSZWdpb25zVGFibGVfU2VydmVyUmVnaW9uSXRlbVxcbiAgICAgICAgfVxcbiAgICAgICAgYXZhaWxhYmxlS2V5c1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5TZXR0aW5nc1NlcnZlclJlZ2lvbnNEb2N1bWVudCxcbiAgICBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzR2VuZXJhbF9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzR2VuZXJhbEVkaXRBdmF0YXJfV29ya3NwYWNlXFxuICAgIC4uLlNldHRpbmdzV29ya3NwYWNlR2VuZXJhbERlbGV0ZURpYWxvZ19Xb3Jrc3BhY2VcXG4gICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzR2VuZXJhbEVkaXRTbHVnRGlhbG9nX1dvcmtzcGFjZVxcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHNsdWdcXG4gICAgZGVzY3JpcHRpb25cXG4gICAgbG9nb1xcbiAgICByb2xlXFxuICAgIHBsYW4ge1xcbiAgICAgIHN0YXR1c1xcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgICBlbWJlZE9wdGlvbnMge1xcbiAgICAgIGhpZGVTcGVja2xlQnJhbmRpbmdcXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuRWRpdEVtYmVkT3B0aW9ucyB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCI6IHR5cGVzLlNldHRpbmdzV29ya3NwYWNlc0dlbmVyYWxfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNDb3VudHNfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHJvbGVcXG4gICAgaW52aXRlZFRlYW0ge1xcbiAgICAgIGlkXFxuICAgIH1cXG4gICAgdGVhbUJ5Um9sZSB7XFxuICAgICAgYWRtaW5zIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICB9XFxuICAgICAgbWVtYmVycyB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICAgIGd1ZXN0cyB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICB9XFxuICAgIGFkbWluV29ya3NwYWNlc0pvaW5SZXF1ZXN0cyhmaWx0ZXI6ICRmaWx0ZXIpIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc0NvdW50c19Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzUHJvamVjdHNfUHJvamVjdENvbGxlY3Rpb24gb24gUHJvamVjdENvbGxlY3Rpb24ge1xcbiAgICB0b3RhbENvdW50XFxuICAgIGl0ZW1zIHtcXG4gICAgICAuLi5TZXR0aW5nc1NoYXJlZFByb2plY3RzX1Byb2plY3RcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5TZXR0aW5nc1dvcmtzcGFjZXNQcm9qZWN0c19Qcm9qZWN0Q29sbGVjdGlvbkZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNQcm9qZWN0c19Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBzbHVnXFxuICAgIHBsYW4ge1xcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgICByb2xlXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVQcm9qZWN0IHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VzUHJvamVjdHNfV29ya3NwYWNlRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc1JlZ2lvbnNfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHJvbGVcXG4gICAgZGVmYXVsdFJlZ2lvbiB7XFxuICAgICAgaWRcXG4gICAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNSZWdpb25zU2VsZWN0X1NlcnZlclJlZ2lvbkl0ZW1cXG4gICAgfVxcbiAgICBoYXNBY2Nlc3NUb011bHRpUmVnaW9uOiBoYXNBY2Nlc3NUb0ZlYXR1cmUoXFxuICAgICAgZmVhdHVyZU5hbWU6IHdvcmtzcGFjZURhdGFSZWdpb25TcGVjaWZpY2l0eVxcbiAgICApXFxuICAgIGhhc1Byb2plY3RzOiBwcm9qZWN0cyhsaW1pdDogMCkge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5TZXR0aW5nc1dvcmtzcGFjZXNSZWdpb25zX1dvcmtzcGFjZUZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNSZWdpb25zX1NlcnZlckluZm8gb24gU2VydmVySW5mbyB7XFxuICAgIG11bHRpUmVnaW9uIHtcXG4gICAgICByZWdpb25zIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNSZWdpb25zU2VsZWN0X1NlcnZlclJlZ2lvbkl0ZW1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIjogdHlwZXMuU2V0dGluZ3NXb3Jrc3BhY2VzUmVnaW9uc19TZXJ2ZXJJbmZvRnJhZ21lbnREb2MsXG4gICAgXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5X1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eURlZmF1bHRTZWF0X1dvcmtzcGFjZVxcbiAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eURvbWFpbk1hbmFnZW1lbnRfV29ya3NwYWNlXFxuICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5RGlzY292ZXJhYmlsaXR5X1dvcmtzcGFjZVxcbiAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eVNzb1dyYXBwZXJfV29ya3NwYWNlXFxuICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5RG9tYWluUHJvdGVjdGlvbl9Xb3Jrc3BhY2VcXG4gICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlXb3Jrc3BhY2VDcmVhdGlvbl9Xb3Jrc3BhY2VcXG4gICAgaWRcXG4gICAgc2x1Z1xcbiAgfVxcblwiOiB0eXBlcy5TZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eV9Xb3Jrc3BhY2VGcmFnbWVudERvYyxcbiAgICBcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlRGFzaGJvYXJkc19EYXNoYm9hcmQgb24gRGFzaGJvYXJkIHtcXG4gICAgLi4uRGFzaGJvYXJkc0VkaXREaWFsb2dfRGFzaGJvYXJkXFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgY3JlYXRlZEJ5IHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgICBhdmF0YXJcXG4gICAgfVxcbiAgICBjcmVhdGVkQXRcXG4gICAgdXBkYXRlZEF0XFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgICAgc2x1Z1xcbiAgICAgIGxvZ29cXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuRWRpdCB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhblJlYWQge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiOiB0eXBlcy5Xb3Jrc3BhY2VEYXNoYm9hcmRzX0Rhc2hib2FyZEZyYWdtZW50RG9jLFxuICAgIFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VQYWdlX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICAuLi5Xb3Jrc3BhY2VEYXNoYm9hcmRfV29ya3NwYWNlXFxuICAgIC4uLldvcmtzcGFjZVNpZGViYXJfV29ya3NwYWNlXFxuICB9XFxuXCI6IHR5cGVzLldvcmtzcGFjZVBhZ2VfV29ya3NwYWNlRnJhZ21lbnREb2MsXG59O1xuXG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCBxdWVyeSA9IGdyYXBocWwoYHF1ZXJ5IEdldFVzZXIoJGlkOiBJRCEpIHsgdXNlcihpZDogJGlkKSB7IG5hbWUgfSB9YCk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgcXVlcnkgYXJndW1lbnQgaXMgdW5rbm93biFcbiAqIFBsZWFzZSByZWdlbmVyYXRlIHRoZSB0eXBlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBzdHJpbmcpOiB1bmtub3duO1xuXG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgQXV0aExvZ2luV2l0aEVtYWlsQmxvY2tfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvciBvbiBQZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yIHtcXG4gICAgaWRcXG4gICAgZW1haWxcXG4gICAgdXNlciB7XFxuICAgICAgaWRcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBBdXRoTG9naW5XaXRoRW1haWxCbG9ja19QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yIG9uIFBlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3Ige1xcbiAgICBpZFxcbiAgICBlbWFpbFxcbiAgICB1c2VyIHtcXG4gICAgICBpZFxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IEF1dGhSZWdpc3RlclBhbmVsV29ya3NwYWNlSW52aXRlKCR0b2tlbjogU3RyaW5nKSB7XFxuICAgIHdvcmtzcGFjZUludml0ZSh0b2tlbjogJHRva2VuKSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5BdXRoV29ya3NwYWNlSW52aXRlSGVhZGVyX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3JcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBBdXRoUmVnaXN0ZXJQYW5lbFdvcmtzcGFjZUludml0ZSgkdG9rZW46IFN0cmluZykge1xcbiAgICB3b3Jrc3BhY2VJbnZpdGUodG9rZW46ICR0b2tlbikge1xcbiAgICAgIGlkXFxuICAgICAgLi4uQXV0aFdvcmtzcGFjZUludml0ZUhlYWRlcl9QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgU2VydmVyVGVybXNPZlNlcnZpY2VQcml2YWN5UG9saWN5RnJhZ21lbnQgb24gU2VydmVySW5mbyB7XFxuICAgIHRlcm1zT2ZTZXJ2aWNlXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFNlcnZlclRlcm1zT2ZTZXJ2aWNlUHJpdmFjeVBvbGljeUZyYWdtZW50IG9uIFNlcnZlckluZm8ge1xcbiAgICB0ZXJtc09mU2VydmljZVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBBdXRoV29ya3NwYWNlSW52aXRlSGVhZGVyX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3Igb24gUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvciB7XFxuICAgIGlkXFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gICAgZW1haWxcXG4gICAgdXNlciB7XFxuICAgICAgaWRcXG4gICAgICAuLi5MaW1pdGVkVXNlckF2YXRhclxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IEF1dGhXb3Jrc3BhY2VJbnZpdGVIZWFkZXJfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvciBvbiBQZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yIHtcXG4gICAgaWRcXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgICBlbWFpbFxcbiAgICB1c2VyIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgQXV0aFNzb0xvZ2luX1dvcmtzcGFjZSBvbiBMaW1pdGVkV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgc2x1Z1xcbiAgICBuYW1lXFxuICAgIGxvZ29cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgQXV0aFNzb0xvZ2luX1dvcmtzcGFjZSBvbiBMaW1pdGVkV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgc2x1Z1xcbiAgICBuYW1lXFxuICAgIGxvZ29cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgQXV0aFN0YXRlZ2llc1NlcnZlckluZm9GcmFnbWVudCBvbiBTZXJ2ZXJJbmZvIHtcXG4gICAgYXV0aFN0cmF0ZWdpZXMge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICAgIHVybFxcbiAgICB9XFxuICAgIC4uLkF1dGhUaGlyZFBhcnR5TG9naW5CdXR0b25PSURDX1NlcnZlckluZm9cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgQXV0aFN0YXRlZ2llc1NlcnZlckluZm9GcmFnbWVudCBvbiBTZXJ2ZXJJbmZvIHtcXG4gICAgYXV0aFN0cmF0ZWdpZXMge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICAgIHVybFxcbiAgICB9XFxuICAgIC4uLkF1dGhUaGlyZFBhcnR5TG9naW5CdXR0b25PSURDX1NlcnZlckluZm9cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgQXV0aFRoaXJkUGFydHlMb2dpbkJ1dHRvbk9JRENfU2VydmVySW5mbyBvbiBTZXJ2ZXJJbmZvIHtcXG4gICAgYXV0aFN0cmF0ZWdpZXMge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IEF1dGhUaGlyZFBhcnR5TG9naW5CdXR0b25PSURDX1NlcnZlckluZm8gb24gU2VydmVySW5mbyB7XFxuICAgIGF1dGhTdHJhdGVnaWVzIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBBdXRvbWF0ZUF1dG9tYXRpb25DcmVhdGVEaWFsb2dfQXV0b21hdGVGdW5jdGlvbiBvbiBBdXRvbWF0ZUZ1bmN0aW9uIHtcXG4gICAgaWRcXG4gICAgLi4uQXV0b21hdGlvbnNGdW5jdGlvbnNDYXJkX0F1dG9tYXRlRnVuY3Rpb25cXG4gICAgLi4uQXV0b21hdGVBdXRvbWF0aW9uQ3JlYXRlRGlhbG9nRnVuY3Rpb25QYXJhbWV0ZXJzU3RlcF9BdXRvbWF0ZUZ1bmN0aW9uXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IEF1dG9tYXRlQXV0b21hdGlvbkNyZWF0ZURpYWxvZ19BdXRvbWF0ZUZ1bmN0aW9uIG9uIEF1dG9tYXRlRnVuY3Rpb24ge1xcbiAgICBpZFxcbiAgICAuLi5BdXRvbWF0aW9uc0Z1bmN0aW9uc0NhcmRfQXV0b21hdGVGdW5jdGlvblxcbiAgICAuLi5BdXRvbWF0ZUF1dG9tYXRpb25DcmVhdGVEaWFsb2dGdW5jdGlvblBhcmFtZXRlcnNTdGVwX0F1dG9tYXRlRnVuY3Rpb25cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgQXV0b21hdGVBdXRvbWF0aW9uQ3JlYXRlRGlhbG9nRnVuY3Rpb25QYXJhbWV0ZXJzU3RlcF9BdXRvbWF0ZUZ1bmN0aW9uIG9uIEF1dG9tYXRlRnVuY3Rpb24ge1xcbiAgICBpZFxcbiAgICByZWxlYXNlcyhsaW1pdDogMSkge1xcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBpbnB1dFNjaGVtYVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBBdXRvbWF0ZUF1dG9tYXRpb25DcmVhdGVEaWFsb2dGdW5jdGlvblBhcmFtZXRlcnNTdGVwX0F1dG9tYXRlRnVuY3Rpb24gb24gQXV0b21hdGVGdW5jdGlvbiB7XFxuICAgIGlkXFxuICAgIHJlbGVhc2VzKGxpbWl0OiAxKSB7XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGlucHV0U2NoZW1hXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IEF1dG9tYXRpb25DcmVhdGVEaWFsb2dGdW5jdGlvbnNTZWFyY2goXFxuICAgICR3b3Jrc3BhY2VJZDogU3RyaW5nIVxcbiAgICAkZmlsdGVyOiBBdXRvbWF0ZUZ1bmN0aW9uc0ZpbHRlclxcbiAgICAkY3Vyc29yOiBTdHJpbmcgPSBudWxsXFxuICApIHtcXG4gICAgd29ya3NwYWNlKGlkOiAkd29ya3NwYWNlSWQpIHtcXG4gICAgICBhdXRvbWF0ZUZ1bmN0aW9ucyhsaW1pdDogMjAsIGN1cnNvcjogJGN1cnNvciwgZmlsdGVyOiAkZmlsdGVyKSB7XFxuICAgICAgICBjdXJzb3JcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uQXV0b21hdGVBdXRvbWF0aW9uQ3JlYXRlRGlhbG9nX0F1dG9tYXRlRnVuY3Rpb25cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgQXV0b21hdGlvbkNyZWF0ZURpYWxvZ0Z1bmN0aW9uc1NlYXJjaChcXG4gICAgJHdvcmtzcGFjZUlkOiBTdHJpbmchXFxuICAgICRmaWx0ZXI6IEF1dG9tYXRlRnVuY3Rpb25zRmlsdGVyXFxuICAgICRjdXJzb3I6IFN0cmluZyA9IG51bGxcXG4gICkge1xcbiAgICB3b3Jrc3BhY2UoaWQ6ICR3b3Jrc3BhY2VJZCkge1xcbiAgICAgIGF1dG9tYXRlRnVuY3Rpb25zKGxpbWl0OiAyMCwgY3Vyc29yOiAkY3Vyc29yLCBmaWx0ZXI6ICRmaWx0ZXIpIHtcXG4gICAgICAgIGN1cnNvclxcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICAuLi5BdXRvbWF0ZUF1dG9tYXRpb25DcmVhdGVEaWFsb2dfQXV0b21hdGVGdW5jdGlvblxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBBdXRvbWF0aW9uc0Z1bmN0aW9uc0NhcmRfQXV0b21hdGVGdW5jdGlvbiBvbiBBdXRvbWF0ZUZ1bmN0aW9uIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBpc0ZlYXR1cmVkXFxuICAgIGRlc2NyaXB0aW9uXFxuICAgIGxvZ29cXG4gICAgcmVwbyB7XFxuICAgICAgaWRcXG4gICAgICB1cmxcXG4gICAgICBvd25lclxcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBBdXRvbWF0aW9uc0Z1bmN0aW9uc0NhcmRfQXV0b21hdGVGdW5jdGlvbiBvbiBBdXRvbWF0ZUZ1bmN0aW9uIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBpc0ZlYXR1cmVkXFxuICAgIGRlc2NyaXB0aW9uXFxuICAgIGxvZ29cXG4gICAgcmVwbyB7XFxuICAgICAgaWRcXG4gICAgICB1cmxcXG4gICAgICBvd25lclxcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBBdXRvbWF0ZUZ1bmN0aW9uQ3JlYXRlRGlhbG9nX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHNsdWdcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgQXV0b21hdGVGdW5jdGlvbkNyZWF0ZURpYWxvZ19Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBzbHVnXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IEF1dG9tYXRlRnVuY3Rpb25FZGl0RGlhbG9nX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IEF1dG9tYXRlRnVuY3Rpb25FZGl0RGlhbG9nX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IEF1dG9tYXRlRnVuY3Rpb25DcmVhdGVEaWFsb2dEb25lU3RlcF9BdXRvbWF0ZUZ1bmN0aW9uIG9uIEF1dG9tYXRlRnVuY3Rpb24ge1xcbiAgICBpZFxcbiAgICByZXBvIHtcXG4gICAgICBpZFxcbiAgICAgIHVybFxcbiAgICAgIG93bmVyXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIC4uLkF1dG9tYXRpb25zRnVuY3Rpb25zQ2FyZF9BdXRvbWF0ZUZ1bmN0aW9uXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IEF1dG9tYXRlRnVuY3Rpb25DcmVhdGVEaWFsb2dEb25lU3RlcF9BdXRvbWF0ZUZ1bmN0aW9uIG9uIEF1dG9tYXRlRnVuY3Rpb24ge1xcbiAgICBpZFxcbiAgICByZXBvIHtcXG4gICAgICBpZFxcbiAgICAgIHVybFxcbiAgICAgIG93bmVyXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIC4uLkF1dG9tYXRpb25zRnVuY3Rpb25zQ2FyZF9BdXRvbWF0ZUZ1bmN0aW9uXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IEF1dG9tYXRlRnVuY3Rpb25DcmVhdGVEaWFsb2dUZW1wbGF0ZVN0ZXBfQXV0b21hdGVGdW5jdGlvblRlbXBsYXRlIG9uIEF1dG9tYXRlRnVuY3Rpb25UZW1wbGF0ZSB7XFxuICAgIGlkXFxuICAgIHRpdGxlXFxuICAgIGxvZ29cXG4gICAgdXJsXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IEF1dG9tYXRlRnVuY3Rpb25DcmVhdGVEaWFsb2dUZW1wbGF0ZVN0ZXBfQXV0b21hdGVGdW5jdGlvblRlbXBsYXRlIG9uIEF1dG9tYXRlRnVuY3Rpb25UZW1wbGF0ZSB7XFxuICAgIGlkXFxuICAgIHRpdGxlXFxuICAgIGxvZ29cXG4gICAgdXJsXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IEF1dG9tYXRlRnVuY3Rpb25QYWdlSGVhZGVyX0Z1bmN0aW9uIG9uIEF1dG9tYXRlRnVuY3Rpb24ge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGxvZ29cXG4gICAgcmVwbyB7XFxuICAgICAgaWRcXG4gICAgICB1cmxcXG4gICAgICBvd25lclxcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgICByZWxlYXNlcyhsaW1pdDogMSkge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgfVxcbiAgICB3b3Jrc3BhY2VJZHNcXG4gIH1cXG5cXG4gIGZyYWdtZW50IEF1dG9tYXRlRnVuY3Rpb25QYWdlSGVhZGVyX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHNsdWdcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgQXV0b21hdGVGdW5jdGlvblBhZ2VIZWFkZXJfRnVuY3Rpb24gb24gQXV0b21hdGVGdW5jdGlvbiB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgbG9nb1xcbiAgICByZXBvIHtcXG4gICAgICBpZFxcbiAgICAgIHVybFxcbiAgICAgIG93bmVyXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIHJlbGVhc2VzKGxpbWl0OiAxKSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICAgIHdvcmtzcGFjZUlkc1xcbiAgfVxcblxcbiAgZnJhZ21lbnQgQXV0b21hdGVGdW5jdGlvblBhZ2VIZWFkZXJfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgc2x1Z1xcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBBdXRvbWF0ZUZ1bmN0aW9uUGFnZUluZm9fQXV0b21hdGVGdW5jdGlvbiBvbiBBdXRvbWF0ZUZ1bmN0aW9uIHtcXG4gICAgaWRcXG4gICAgcmVwbyB7XFxuICAgICAgaWRcXG4gICAgICB1cmxcXG4gICAgICBvd25lclxcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgICBkZXNjcmlwdGlvblxcbiAgICByZWxlYXNlcyhsaW1pdDogMSkge1xcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBpbnB1dFNjaGVtYVxcbiAgICAgICAgY3JlYXRlZEF0XFxuICAgICAgICBjb21taXRJZFxcbiAgICAgICAgLi4uQXV0b21hdGVGdW5jdGlvblBhZ2VQYXJhbWV0ZXJzRGlhbG9nX0F1dG9tYXRlRnVuY3Rpb25SZWxlYXNlXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IEF1dG9tYXRlRnVuY3Rpb25QYWdlSW5mb19BdXRvbWF0ZUZ1bmN0aW9uIG9uIEF1dG9tYXRlRnVuY3Rpb24ge1xcbiAgICBpZFxcbiAgICByZXBvIHtcXG4gICAgICBpZFxcbiAgICAgIHVybFxcbiAgICAgIG93bmVyXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIGRlc2NyaXB0aW9uXFxuICAgIHJlbGVhc2VzKGxpbWl0OiAxKSB7XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGlucHV0U2NoZW1hXFxuICAgICAgICBjcmVhdGVkQXRcXG4gICAgICAgIGNvbW1pdElkXFxuICAgICAgICAuLi5BdXRvbWF0ZUZ1bmN0aW9uUGFnZVBhcmFtZXRlcnNEaWFsb2dfQXV0b21hdGVGdW5jdGlvblJlbGVhc2VcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgQXV0b21hdGVGdW5jdGlvblBhZ2VQYXJhbWV0ZXJzRGlhbG9nX0F1dG9tYXRlRnVuY3Rpb25SZWxlYXNlIG9uIEF1dG9tYXRlRnVuY3Rpb25SZWxlYXNlIHtcXG4gICAgaWRcXG4gICAgaW5wdXRTY2hlbWFcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgQXV0b21hdGVGdW5jdGlvblBhZ2VQYXJhbWV0ZXJzRGlhbG9nX0F1dG9tYXRlRnVuY3Rpb25SZWxlYXNlIG9uIEF1dG9tYXRlRnVuY3Rpb25SZWxlYXNlIHtcXG4gICAgaWRcXG4gICAgaW5wdXRTY2hlbWFcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgQXV0b21hdGVGdW5jdGlvbnNQYWdlSGVhZGVyX1F1ZXJ5IG9uIFF1ZXJ5IHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgaWRcXG4gICAgICByb2xlXFxuICAgICAgYXV0b21hdGVJbmZvIHtcXG4gICAgICAgIGhhc0F1dG9tYXRlR2l0aHViQXBwXFxuICAgICAgICBhdmFpbGFibGVHaXRodWJPcmdzXFxuICAgICAgfVxcbiAgICB9XFxuICAgIHNlcnZlckluZm8ge1xcbiAgICAgIGF1dG9tYXRlIHtcXG4gICAgICAgIGF2YWlsYWJsZUZ1bmN0aW9uVGVtcGxhdGVzIHtcXG4gICAgICAgICAgLi4uQXV0b21hdGVGdW5jdGlvbkNyZWF0ZURpYWxvZ1RlbXBsYXRlU3RlcF9BdXRvbWF0ZUZ1bmN0aW9uVGVtcGxhdGVcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgQXV0b21hdGVGdW5jdGlvbnNQYWdlSGVhZGVyX1F1ZXJ5IG9uIFF1ZXJ5IHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgaWRcXG4gICAgICByb2xlXFxuICAgICAgYXV0b21hdGVJbmZvIHtcXG4gICAgICAgIGhhc0F1dG9tYXRlR2l0aHViQXBwXFxuICAgICAgICBhdmFpbGFibGVHaXRodWJPcmdzXFxuICAgICAgfVxcbiAgICB9XFxuICAgIHNlcnZlckluZm8ge1xcbiAgICAgIGF1dG9tYXRlIHtcXG4gICAgICAgIGF2YWlsYWJsZUZ1bmN0aW9uVGVtcGxhdGVzIHtcXG4gICAgICAgICAgLi4uQXV0b21hdGVGdW5jdGlvbkNyZWF0ZURpYWxvZ1RlbXBsYXRlU3RlcF9BdXRvbWF0ZUZ1bmN0aW9uVGVtcGxhdGVcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgQXV0b21hdGVSdW5zVHJpZ2dlclN0YXR1c19UcmlnZ2VyZWRBdXRvbWF0aW9uc1N0YXR1cyBvbiBUcmlnZ2VyZWRBdXRvbWF0aW9uc1N0YXR1cyB7XFxuICAgIGlkXFxuICAgIC4uLlRyaWdnZXJlZEF1dG9tYXRpb25zU3RhdHVzU3VtbWFyeVxcbiAgICAuLi5BdXRvbWF0ZVJ1bnNUcmlnZ2VyU3RhdHVzRGlhbG9nX1RyaWdnZXJlZEF1dG9tYXRpb25zU3RhdHVzXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IEF1dG9tYXRlUnVuc1RyaWdnZXJTdGF0dXNfVHJpZ2dlcmVkQXV0b21hdGlvbnNTdGF0dXMgb24gVHJpZ2dlcmVkQXV0b21hdGlvbnNTdGF0dXMge1xcbiAgICBpZFxcbiAgICAuLi5UcmlnZ2VyZWRBdXRvbWF0aW9uc1N0YXR1c1N1bW1hcnlcXG4gICAgLi4uQXV0b21hdGVSdW5zVHJpZ2dlclN0YXR1c0RpYWxvZ19UcmlnZ2VyZWRBdXRvbWF0aW9uc1N0YXR1c1xcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBBdXRvbWF0ZVJ1bnNUcmlnZ2VyU3RhdHVzRGlhbG9nX1RyaWdnZXJlZEF1dG9tYXRpb25zU3RhdHVzIG9uIFRyaWdnZXJlZEF1dG9tYXRpb25zU3RhdHVzIHtcXG4gICAgaWRcXG4gICAgYXV0b21hdGlvblJ1bnMge1xcbiAgICAgIGlkXFxuICAgICAgLi4uQXV0b21hdGVSdW5zVHJpZ2dlclN0YXR1c0RpYWxvZ1J1bnNSb3dzX0F1dG9tYXRlUnVuXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgQXV0b21hdGVSdW5zVHJpZ2dlclN0YXR1c0RpYWxvZ19UcmlnZ2VyZWRBdXRvbWF0aW9uc1N0YXR1cyBvbiBUcmlnZ2VyZWRBdXRvbWF0aW9uc1N0YXR1cyB7XFxuICAgIGlkXFxuICAgIGF1dG9tYXRpb25SdW5zIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLkF1dG9tYXRlUnVuc1RyaWdnZXJTdGF0dXNEaWFsb2dSdW5zUm93c19BdXRvbWF0ZVJ1blxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IEF1dG9tYXRlUnVuc1RyaWdnZXJTdGF0dXNEaWFsb2dGdW5jdGlvblJ1bl9BdXRvbWF0ZUZ1bmN0aW9uUnVuIG9uIEF1dG9tYXRlRnVuY3Rpb25SdW4ge1xcbiAgICBpZFxcbiAgICByZXN1bHRzXFxuICAgIHN0YXR1c1xcbiAgICBzdGF0dXNNZXNzYWdlXFxuICAgIGNvbnRleHRWaWV3XFxuICAgIGZ1bmN0aW9uIHtcXG4gICAgICBpZFxcbiAgICAgIGxvZ29cXG4gICAgICBuYW1lXFxuICAgIH1cXG4gICAgY3JlYXRlZEF0XFxuICAgIHVwZGF0ZWRBdFxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBBdXRvbWF0ZVJ1bnNUcmlnZ2VyU3RhdHVzRGlhbG9nRnVuY3Rpb25SdW5fQXV0b21hdGVGdW5jdGlvblJ1biBvbiBBdXRvbWF0ZUZ1bmN0aW9uUnVuIHtcXG4gICAgaWRcXG4gICAgcmVzdWx0c1xcbiAgICBzdGF0dXNcXG4gICAgc3RhdHVzTWVzc2FnZVxcbiAgICBjb250ZXh0Vmlld1xcbiAgICBmdW5jdGlvbiB7XFxuICAgICAgaWRcXG4gICAgICBsb2dvXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIGNyZWF0ZWRBdFxcbiAgICB1cGRhdGVkQXRcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgQXV0b21hdGVSdW5zVHJpZ2dlclN0YXR1c0RpYWxvZ1J1bnNSb3dzX0F1dG9tYXRlUnVuIG9uIEF1dG9tYXRlUnVuIHtcXG4gICAgaWRcXG4gICAgZnVuY3Rpb25SdW5zIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLkF1dG9tYXRlUnVuc1RyaWdnZXJTdGF0dXNEaWFsb2dGdW5jdGlvblJ1bl9BdXRvbWF0ZUZ1bmN0aW9uUnVuXFxuICAgIH1cXG4gICAgLi4uQXV0b21hdGlvbnNTdGF0dXNPcmRlcmVkUnVuc19BdXRvbWF0aW9uUnVuXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IEF1dG9tYXRlUnVuc1RyaWdnZXJTdGF0dXNEaWFsb2dSdW5zUm93c19BdXRvbWF0ZVJ1biBvbiBBdXRvbWF0ZVJ1biB7XFxuICAgIGlkXFxuICAgIGZ1bmN0aW9uUnVucyB7XFxuICAgICAgaWRcXG4gICAgICAuLi5BdXRvbWF0ZVJ1bnNUcmlnZ2VyU3RhdHVzRGlhbG9nRnVuY3Rpb25SdW5fQXV0b21hdGVGdW5jdGlvblJ1blxcbiAgICB9XFxuICAgIC4uLkF1dG9tYXRpb25zU3RhdHVzT3JkZXJlZFJ1bnNfQXV0b21hdGlvblJ1blxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBBdXRvbWF0ZVZpZXdlclBhbmVsX0F1dG9tYXRlUnVuIG9uIEF1dG9tYXRlUnVuIHtcXG4gICAgaWRcXG4gICAgZnVuY3Rpb25SdW5zIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLkF1dG9tYXRlVmlld2VyUGFuZWxGdW5jdGlvblJ1blJvd19BdXRvbWF0ZUZ1bmN0aW9uUnVuXFxuICAgIH1cXG4gICAgLi4uQXV0b21hdGlvbnNTdGF0dXNPcmRlcmVkUnVuc19BdXRvbWF0aW9uUnVuXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IEF1dG9tYXRlVmlld2VyUGFuZWxfQXV0b21hdGVSdW4gb24gQXV0b21hdGVSdW4ge1xcbiAgICBpZFxcbiAgICBmdW5jdGlvblJ1bnMge1xcbiAgICAgIGlkXFxuICAgICAgLi4uQXV0b21hdGVWaWV3ZXJQYW5lbEZ1bmN0aW9uUnVuUm93X0F1dG9tYXRlRnVuY3Rpb25SdW5cXG4gICAgfVxcbiAgICAuLi5BdXRvbWF0aW9uc1N0YXR1c09yZGVyZWRSdW5zX0F1dG9tYXRpb25SdW5cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgQXV0b21hdGVWaWV3ZXJQYW5lbEZ1bmN0aW9uUnVuUm93X0F1dG9tYXRlRnVuY3Rpb25SdW4gb24gQXV0b21hdGVGdW5jdGlvblJ1biB7XFxuICAgIGlkXFxuICAgIHJlc3VsdHNcXG4gICAgc3RhdHVzXFxuICAgIHN0YXR1c01lc3NhZ2VcXG4gICAgY29udGV4dFZpZXdcXG4gICAgZnVuY3Rpb24ge1xcbiAgICAgIGlkXFxuICAgICAgbG9nb1xcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgICBjcmVhdGVkQXRcXG4gICAgdXBkYXRlZEF0XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IEF1dG9tYXRlVmlld2VyUGFuZWxGdW5jdGlvblJ1blJvd19BdXRvbWF0ZUZ1bmN0aW9uUnVuIG9uIEF1dG9tYXRlRnVuY3Rpb25SdW4ge1xcbiAgICBpZFxcbiAgICByZXN1bHRzXFxuICAgIHN0YXR1c1xcbiAgICBzdGF0dXNNZXNzYWdlXFxuICAgIGNvbnRleHRWaWV3XFxuICAgIGZ1bmN0aW9uIHtcXG4gICAgICBpZFxcbiAgICAgIGxvZ29cXG4gICAgICBuYW1lXFxuICAgIH1cXG4gICAgY3JlYXRlZEF0XFxuICAgIHVwZGF0ZWRBdFxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBCaWxsaW5nQWxlcnRfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHJvbGVcXG4gICAgc2x1Z1xcbiAgICBwbGFuIHtcXG4gICAgICBuYW1lXFxuICAgICAgc3RhdHVzXFxuICAgICAgY3JlYXRlZEF0XFxuICAgIH1cXG4gICAgc3Vic2NyaXB0aW9uIHtcXG4gICAgICBiaWxsaW5nSW50ZXJ2YWxcXG4gICAgICBjdXJyZW50QmlsbGluZ0N5Y2xlRW5kXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgQmlsbGluZ0FsZXJ0X1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICByb2xlXFxuICAgIHNsdWdcXG4gICAgcGxhbiB7XFxuICAgICAgbmFtZVxcbiAgICAgIHN0YXR1c1xcbiAgICAgIGNyZWF0ZWRBdFxcbiAgICB9XFxuICAgIHN1YnNjcmlwdGlvbiB7XFxuICAgICAgYmlsbGluZ0ludGVydmFsXFxuICAgICAgY3VycmVudEJpbGxpbmdDeWNsZUVuZFxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IENvbW1vbk1vZGVsU2VsZWN0b3JNb2RlbCBvbiBNb2RlbCB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgQ29tbW9uTW9kZWxTZWxlY3Rvck1vZGVsIG9uIE1vZGVsIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBEYXNoYm9hcmRTaWRlYmFyIHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgaWRcXG4gICAgICBhY3RpdmVXb3Jrc3BhY2Uge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHJvbGVcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgRGFzaGJvYXJkU2lkZWJhciB7XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgYWN0aXZlV29ya3NwYWNlIHtcXG4gICAgICAgIGlkXFxuICAgICAgICByb2xlXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFNpZGViYXJQZXJtaXNzaW9ucygkc2x1ZzogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHNsdWcpIHtcXG4gICAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgICBjYW5MaXN0RGFzaGJvYXJkcyB7XFxuICAgICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgU2lkZWJhclBlcm1pc3Npb25zKCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICAgIGNhbkxpc3REYXNoYm9hcmRzIHtcXG4gICAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBEYXNoYm9hcmRzQ2FyZF9EYXNoYm9hcmQgb24gRGFzaGJvYXJkIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBjcmVhdGVkQXRcXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICB9XFxuICAgIGNyZWF0ZWRCeSB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgICAgYXZhdGFyXFxuICAgIH1cXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkRlbGV0ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IERhc2hib2FyZHNDYXJkX0Rhc2hib2FyZCBvbiBEYXNoYm9hcmQge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGNyZWF0ZWRBdFxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgIH1cXG4gICAgY3JlYXRlZEJ5IHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgICBhdmF0YXJcXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuRGVsZXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgRGFzaGJvYXJkc0VkaXREaWFsb2dfRGFzaGJvYXJkIG9uIERhc2hib2FyZCB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IERhc2hib2FyZHNFZGl0RGlhbG9nX0Rhc2hib2FyZCBvbiBEYXNoYm9hcmQge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBEYXNoYm9hcmRzTGlzdENhbkNyZWF0ZURhc2hib2FyZHMoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgcGVybWlzc2lvbnMge1xcbiAgICAgICAgY2FuQ3JlYXRlRGFzaGJvYXJkcyB7XFxuICAgICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgRGFzaGJvYXJkc0xpc3RDYW5DcmVhdGVEYXNoYm9hcmRzKCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICAgIGNhbkNyZWF0ZURhc2hib2FyZHMge1xcbiAgICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IERhc2hib2FyZHNTaGFyRGlhbG9nUGVybWlzc2lvbnMoJGlkOiBTdHJpbmchKSB7XFxuICAgIGRhc2hib2FyZChpZDogJGlkKSB7XFxuICAgICAgaWRcXG4gICAgICBzaGFyZUxpbmsge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGNvbnRlbnRcXG4gICAgICAgIHJldm9rZWRcXG4gICAgICB9XFxuICAgICAgd29ya3NwYWNlIHtcXG4gICAgICAgIGlkXFxuICAgICAgICByb2xlXFxuICAgICAgfVxcbiAgICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICAgIGNhbkNyZWF0ZVRva2VuIHtcXG4gICAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBEYXNoYm9hcmRzU2hhckRpYWxvZ1Blcm1pc3Npb25zKCRpZDogU3RyaW5nISkge1xcbiAgICBkYXNoYm9hcmQoaWQ6ICRpZCkge1xcbiAgICAgIGlkXFxuICAgICAgc2hhcmVMaW5rIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBjb250ZW50XFxuICAgICAgICByZXZva2VkXFxuICAgICAgfVxcbiAgICAgIHdvcmtzcGFjZSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgcm9sZVxcbiAgICAgIH1cXG4gICAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgICBjYW5DcmVhdGVUb2tlbiB7XFxuICAgICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gRGFzaGJvYXJkc1NoYXJlVG9rZW4oJGRhc2hib2FyZElkOiBTdHJpbmchKSB7XFxuICAgIGRhc2hib2FyZE11dGF0aW9ucyB7XFxuICAgICAgc2hhcmUoZGFzaGJvYXJkSWQ6ICRkYXNoYm9hcmRJZCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHJldm9rZWRcXG4gICAgICAgIGNvbnRlbnRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gRGFzaGJvYXJkc1NoYXJlVG9rZW4oJGRhc2hib2FyZElkOiBTdHJpbmchKSB7XFxuICAgIGRhc2hib2FyZE11dGF0aW9ucyB7XFxuICAgICAgc2hhcmUoZGFzaGJvYXJkSWQ6ICRkYXNoYm9hcmRJZCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHJldm9rZWRcXG4gICAgICAgIGNvbnRlbnRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gRGFzaGJvYXJkc1NoYXJlRW5hYmxlVG9rZW4oJGlucHV0OiBEYXNoYm9hcmRTaGFyZUlucHV0ISkge1xcbiAgICBkYXNoYm9hcmRNdXRhdGlvbnMge1xcbiAgICAgIGVuYWJsZVNoYXJlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICByZXZva2VkXFxuICAgICAgICBjb250ZW50XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIERhc2hib2FyZHNTaGFyZUVuYWJsZVRva2VuKCRpbnB1dDogRGFzaGJvYXJkU2hhcmVJbnB1dCEpIHtcXG4gICAgZGFzaGJvYXJkTXV0YXRpb25zIHtcXG4gICAgICBlbmFibGVTaGFyZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgcmV2b2tlZFxcbiAgICAgICAgY29udGVudFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBEYXNoYm9hcmRzU2hhcmVEaXNhYmxlVG9rZW4oJGlucHV0OiBEYXNoYm9hcmRTaGFyZUlucHV0ISkge1xcbiAgICBkYXNoYm9hcmRNdXRhdGlvbnMge1xcbiAgICAgIGRpc2FibGVTaGFyZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgcmV2b2tlZFxcbiAgICAgICAgY29udGVudFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBEYXNoYm9hcmRzU2hhcmVEaXNhYmxlVG9rZW4oJGlucHV0OiBEYXNoYm9hcmRTaGFyZUlucHV0ISkge1xcbiAgICBkYXNoYm9hcmRNdXRhdGlvbnMge1xcbiAgICAgIGRpc2FibGVTaGFyZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgcmV2b2tlZFxcbiAgICAgICAgY29udGVudFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBGb3JtU2VsZWN0TW9kZWxzX01vZGVsIG9uIE1vZGVsIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBGb3JtU2VsZWN0TW9kZWxzX01vZGVsIG9uIE1vZGVsIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBGb3JtU2VsZWN0UHJvamVjdHNfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBGb3JtU2VsZWN0UHJvamVjdHNfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBGb3JtU2VsZWN0U2F2ZWRWaWV3X1NhdmVkVmlldyBvbiBTYXZlZFZpZXcge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHRodW1ibmFpbFVybFxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBGb3JtU2VsZWN0U2F2ZWRWaWV3X1NhdmVkVmlldyBvbiBTYXZlZFZpZXcge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHRodW1ibmFpbFVybFxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBGb3JtU2VsZWN0U2F2ZWRWaWV3X1NhdmVkVmlld3MoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJGlucHV0OiBQcm9qZWN0U2F2ZWRWaWV3c0lucHV0IVxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHNhdmVkVmlld3MoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICAuLi5Gb3JtU2VsZWN0U2F2ZWRWaWV3X1NhdmVkVmlld1xcbiAgICAgICAgfVxcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgY3Vyc29yXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IEZvcm1TZWxlY3RTYXZlZFZpZXdfU2F2ZWRWaWV3cyhcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkaW5wdXQ6IFByb2plY3RTYXZlZFZpZXdzSW5wdXQhXFxuICApIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgc2F2ZWRWaWV3cyhpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLkZvcm1TZWxlY3RTYXZlZFZpZXdfU2F2ZWRWaWV3XFxuICAgICAgICB9XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBjdXJzb3JcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgRm9ybVNlbGVjdFNhdmVkVmlld0dyb3VwX1NhdmVkVmlld0dyb3VwIG9uIFNhdmVkVmlld0dyb3VwIHtcXG4gICAgaWRcXG4gICAgdGl0bGVcXG4gICAgaXNVbmdyb3VwZWRWaWV3c0dyb3VwXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IEZvcm1TZWxlY3RTYXZlZFZpZXdHcm91cF9TYXZlZFZpZXdHcm91cCBvbiBTYXZlZFZpZXdHcm91cCB7XFxuICAgIGlkXFxuICAgIHRpdGxlXFxuICAgIGlzVW5ncm91cGVkVmlld3NHcm91cFxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBGb3JtU2VsZWN0U2F2ZWRWaWV3R3JvdXBfU2F2ZWRWaWV3R3JvdXBzKFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRpbnB1dDogU2F2ZWRWaWV3R3JvdXBzSW5wdXQhXFxuICApIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgc2F2ZWRWaWV3R3JvdXBzKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uRm9ybVNlbGVjdFNhdmVkVmlld0dyb3VwX1NhdmVkVmlld0dyb3VwXFxuICAgICAgICB9XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBjdXJzb3JcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgRm9ybVNlbGVjdFNhdmVkVmlld0dyb3VwX1NhdmVkVmlld0dyb3VwcyhcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkaW5wdXQ6IFNhdmVkVmlld0dyb3Vwc0lucHV0IVxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHNhdmVkVmlld0dyb3VwcyhpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLkZvcm1TZWxlY3RTYXZlZFZpZXdHcm91cF9TYXZlZFZpZXdHcm91cFxcbiAgICAgICAgfVxcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgY3Vyc29yXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IEZvcm1Vc2Vyc1NlbGVjdEl0ZW0gb24gTGltaXRlZFVzZXIge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGF2YXRhclxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBGb3JtVXNlcnNTZWxlY3RJdGVtIG9uIExpbWl0ZWRVc2VyIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBhdmF0YXJcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgSGVhZGVyV29ya3NwYWNlU3dpdGNoZXJXb3Jrc3BhY2VMaXN0SXRlbV9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBsb2dvXFxuICAgIHJvbGVcXG4gICAgc2x1Z1xcbiAgICBjcmVhdGlvblN0YXRlIHtcXG4gICAgICBjb21wbGV0ZWRcXG4gICAgfVxcbiAgICBwbGFuIHtcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgSGVhZGVyV29ya3NwYWNlU3dpdGNoZXJXb3Jrc3BhY2VMaXN0SXRlbV9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBsb2dvXFxuICAgIHJvbGVcXG4gICAgc2x1Z1xcbiAgICBjcmVhdGlvblN0YXRlIHtcXG4gICAgICBjb21wbGV0ZWRcXG4gICAgfVxcbiAgICBwbGFuIHtcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlU3dpdGNoZXJBY3RpdmVXb3Jrc3BhY2VfTGltaXRlZFdvcmtzcGFjZSBvbiBMaW1pdGVkV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBsb2dvXFxuICAgIHNsdWdcXG4gICAgcm9sZVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VTd2l0Y2hlckFjdGl2ZVdvcmtzcGFjZV9MaW1pdGVkV29ya3NwYWNlIG9uIExpbWl0ZWRXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGxvZ29cXG4gICAgc2x1Z1xcbiAgICByb2xlXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZVN3aXRjaGVyQWN0aXZlV29ya3NwYWNlX1VzZXIgb24gVXNlciB7XFxuICAgIGlkXFxuICAgIGFjdGl2ZVdvcmtzcGFjZSB7XFxuICAgICAgLi4uV29ya3NwYWNlU3dpdGNoZXJBY3RpdmVXb3Jrc3BhY2VfTGltaXRlZFdvcmtzcGFjZVxcbiAgICB9XFxuICAgIGV4cGlyZWRTc29TZXNzaW9ucyB7XFxuICAgICAgaWRcXG4gICAgICAuLi5IZWFkZXJXb3Jrc3BhY2VTd2l0Y2hlckhlYWRlckV4cGlyZWRTc29fTGltaXRlZFdvcmtzcGFjZVxcbiAgICB9XFxuICAgIGRpc2NvdmVyYWJsZVdvcmtzcGFjZXMge1xcbiAgICAgIGlkXFxuICAgIH1cXG4gICAgd29ya3NwYWNlSm9pblJlcXVlc3RzKGZpbHRlcjogJGpvaW5SZXF1ZXN0RmlsdGVyKSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZVN3aXRjaGVyQWN0aXZlV29ya3NwYWNlX1VzZXIgb24gVXNlciB7XFxuICAgIGlkXFxuICAgIGFjdGl2ZVdvcmtzcGFjZSB7XFxuICAgICAgLi4uV29ya3NwYWNlU3dpdGNoZXJBY3RpdmVXb3Jrc3BhY2VfTGltaXRlZFdvcmtzcGFjZVxcbiAgICB9XFxuICAgIGV4cGlyZWRTc29TZXNzaW9ucyB7XFxuICAgICAgaWRcXG4gICAgICAuLi5IZWFkZXJXb3Jrc3BhY2VTd2l0Y2hlckhlYWRlckV4cGlyZWRTc29fTGltaXRlZFdvcmtzcGFjZVxcbiAgICB9XFxuICAgIGRpc2NvdmVyYWJsZVdvcmtzcGFjZXMge1xcbiAgICAgIGlkXFxuICAgIH1cXG4gICAgd29ya3NwYWNlSm9pblJlcXVlc3RzKGZpbHRlcjogJGpvaW5SZXF1ZXN0RmlsdGVyKSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IEhlYWRlcldvcmtzcGFjZVN3aXRjaGVySGVhZGVyRXhwaXJlZFNzb19MaW1pdGVkV29ya3NwYWNlIG9uIExpbWl0ZWRXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBzbHVnXFxuICAgIG5hbWVcXG4gICAgbG9nb1xcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBIZWFkZXJXb3Jrc3BhY2VTd2l0Y2hlckhlYWRlckV4cGlyZWRTc29fTGltaXRlZFdvcmtzcGFjZSBvbiBMaW1pdGVkV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgc2x1Z1xcbiAgICBuYW1lXFxuICAgIGxvZ29cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgSGVhZGVyV29ya3NwYWNlU3dpdGNoZXJIZWFkZXJXb3Jrc3BhY2VfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIC4uLkludml0ZURpYWxvZ1dvcmtzcGFjZV9Xb3Jrc3BhY2VcXG4gICAgaWRcXG4gICAgbG9nb1xcbiAgICBuYW1lXFxuICAgIHJvbGVcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkludml0ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHBsYW4ge1xcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgICB0ZWFtIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgSGVhZGVyV29ya3NwYWNlU3dpdGNoZXJIZWFkZXJXb3Jrc3BhY2VfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIC4uLkludml0ZURpYWxvZ1dvcmtzcGFjZV9Xb3Jrc3BhY2VcXG4gICAgaWRcXG4gICAgbG9nb1xcbiAgICBuYW1lXFxuICAgIHJvbGVcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkludml0ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHBsYW4ge1xcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgICB0ZWFtIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgSGVhZGVyTmF2U2hhcmVfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgdmlzaWJpbGl0eVxcbiAgICAuLi5Qcm9qZWN0c01vZGVsUGFnZUVtYmVkX1Byb2plY3RcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgSGVhZGVyTmF2U2hhcmVfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgdmlzaWJpbGl0eVxcbiAgICAuLi5Qcm9qZWN0c01vZGVsUGFnZUVtYmVkX1Byb2plY3RcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgSGVhZGVyTmF2Tm90aWZpY2F0aW9uc1Byb2plY3RJbnZpdGVfUGVuZGluZ1N0cmVhbUNvbGxhYm9yYXRvciBvbiBQZW5kaW5nU3RyZWFtQ29sbGFib3JhdG9yIHtcXG4gICAgaWRcXG4gICAgaW52aXRlZEJ5IHtcXG4gICAgICAuLi5MaW1pdGVkVXNlckF2YXRhclxcbiAgICB9XFxuICAgIHByb2plY3RJZFxcbiAgICBwcm9qZWN0TmFtZVxcbiAgICB0b2tlblxcbiAgICB3b3Jrc3BhY2VTbHVnXFxuICAgIHVzZXIge1xcbiAgICAgIGlkXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgSGVhZGVyTmF2Tm90aWZpY2F0aW9uc1Byb2plY3RJbnZpdGVfUGVuZGluZ1N0cmVhbUNvbGxhYm9yYXRvciBvbiBQZW5kaW5nU3RyZWFtQ29sbGFib3JhdG9yIHtcXG4gICAgaWRcXG4gICAgaW52aXRlZEJ5IHtcXG4gICAgICAuLi5MaW1pdGVkVXNlckF2YXRhclxcbiAgICB9XFxuICAgIHByb2plY3RJZFxcbiAgICBwcm9qZWN0TmFtZVxcbiAgICB0b2tlblxcbiAgICB3b3Jrc3BhY2VTbHVnXFxuICAgIHVzZXIge1xcbiAgICAgIGlkXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgSGVhZGVyTmF2Tm90aWZpY2F0aW9uc1dvcmtzcGFjZUludml0ZV9QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yIG9uIFBlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3Ige1xcbiAgICBpZFxcbiAgICBpbnZpdGVkQnkge1xcbiAgICAgIGlkXFxuICAgICAgLi4uTGltaXRlZFVzZXJBdmF0YXJcXG4gICAgfVxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIHRva2VuXFxuICAgIHVzZXIge1xcbiAgICAgIGlkXFxuICAgIH1cXG4gICAgLi4uVXNlV29ya3NwYWNlSW52aXRlTWFuYWdlcl9QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IEhlYWRlck5hdk5vdGlmaWNhdGlvbnNXb3Jrc3BhY2VJbnZpdGVfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvciBvbiBQZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yIHtcXG4gICAgaWRcXG4gICAgaW52aXRlZEJ5IHtcXG4gICAgICBpZFxcbiAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgIH1cXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgICB0b2tlblxcbiAgICB1c2VyIHtcXG4gICAgICBpZFxcbiAgICB9XFxuICAgIC4uLlVzZVdvcmtzcGFjZUludml0ZU1hbmFnZXJfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvclxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBBY2NJbnRlZ3JhdGlvbkZvbGRlck5vZGVfQWNjRm9sZGVyIG9uIEFjY0ZvbGRlciB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgY29udGVudHMge1xcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBuYW1lXFxuICAgICAgICBsYXRlc3RWZXJzaW9uIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgbmFtZVxcbiAgICAgICAgICB2ZXJzaW9uTnVtYmVyXFxuICAgICAgICAgIGZpbGVUeXBlXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICAgIGNoaWxkcmVuIHtcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICBpZFxcbiAgICAgICAgbmFtZVxcbiAgICAgICAgY2hpbGRyZW4ge1xcbiAgICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICBuYW1lXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIGNvbnRlbnRzIHtcXG4gICAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgbmFtZVxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IEFjY0ludGVncmF0aW9uRm9sZGVyTm9kZV9BY2NGb2xkZXIgb24gQWNjRm9sZGVyIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBjb250ZW50cyB7XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIG5hbWVcXG4gICAgICAgIGxhdGVzdFZlcnNpb24ge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBuYW1lXFxuICAgICAgICAgIHZlcnNpb25OdW1iZXJcXG4gICAgICAgICAgZmlsZVR5cGVcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gICAgY2hpbGRyZW4ge1xcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBuYW1lXFxuICAgICAgICBjaGlsZHJlbiB7XFxuICAgICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgICBpZFxcbiAgICAgICAgICAgIG5hbWVcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgY29udGVudHMge1xcbiAgICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICBuYW1lXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgU3luY1N0YXR1c01vZGVsSXRlbV9BY2NTeW5jSXRlbSBvbiBBY2NTeW5jSXRlbSB7XFxuICAgIGlkXFxuICAgIHN0YXR1c1xcbiAgICB1cGRhdGVkQXRcXG4gICAgYWNjRmlsZVZlcnNpb25JbmRleFxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBTeW5jU3RhdHVzTW9kZWxJdGVtX0FjY1N5bmNJdGVtIG9uIEFjY1N5bmNJdGVtIHtcXG4gICAgaWRcXG4gICAgc3RhdHVzXFxuICAgIHVwZGF0ZWRBdFxcbiAgICBhY2NGaWxlVmVyc2lvbkluZGV4XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzUHJvamVjdEludGVncmF0aW9uc0FjdGlvbnNNZW51X0FjY1N5bmNJdGVtIG9uIEFjY1N5bmNJdGVtIHtcXG4gICAgaWRcXG4gICAgc3RhdHVzXFxuICAgIHByb2plY3Qge1xcbiAgICAgIGlkXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NQcm9qZWN0SW50ZWdyYXRpb25zQWN0aW9uc01lbnVfQWNjU3luY0l0ZW0gb24gQWNjU3luY0l0ZW0ge1xcbiAgICBpZFxcbiAgICBzdGF0dXNcXG4gICAgcHJvamVjdCB7XFxuICAgICAgaWRcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBJbnZpdGVEaWFsb2dXb3Jrc3BhY2VfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgc2x1Z1xcbiAgICBkb21haW5CYXNlZE1lbWJlcnNoaXBQcm90ZWN0aW9uRW5hYmxlZFxcbiAgICBkZWZhdWx0U2VhdFR5cGVcXG4gICAgZG9tYWlucyB7XFxuICAgICAgZG9tYWluXFxuICAgICAgaWRcXG4gICAgfVxcbiAgICBzZWF0cyB7XFxuICAgICAgZWRpdG9ycyB7XFxuICAgICAgICBhdmFpbGFibGVcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uSW52aXRlRGlhbG9nU2hhcmVkU2VsZWN0VXNlcnNfV29ya3NwYWNlXFxuICAgIC4uLldvcmtzcGFjZXNQbGFuX1dvcmtzcGFjZVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBJbnZpdGVEaWFsb2dXb3Jrc3BhY2VfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgc2x1Z1xcbiAgICBkb21haW5CYXNlZE1lbWJlcnNoaXBQcm90ZWN0aW9uRW5hYmxlZFxcbiAgICBkZWZhdWx0U2VhdFR5cGVcXG4gICAgZG9tYWlucyB7XFxuICAgICAgZG9tYWluXFxuICAgICAgaWRcXG4gICAgfVxcbiAgICBzZWF0cyB7XFxuICAgICAgZWRpdG9ycyB7XFxuICAgICAgICBhdmFpbGFibGVcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uSW52aXRlRGlhbG9nU2hhcmVkU2VsZWN0VXNlcnNfV29ya3NwYWNlXFxuICAgIC4uLldvcmtzcGFjZXNQbGFuX1dvcmtzcGFjZVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBJbnZpdGVEaWFsb2dQcm9qZWN0X1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgd29ya3NwYWNlSWRcXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgICByb2xlXFxuICAgICAgZG9tYWluQmFzZWRNZW1iZXJzaGlwUHJvdGVjdGlvbkVuYWJsZWRcXG4gICAgICBkb21haW5zIHtcXG4gICAgICAgIGRvbWFpblxcbiAgICAgICAgaWRcXG4gICAgICB9XFxuICAgICAgLi4uV29ya3NwYWNlc1BsYW5fV29ya3NwYWNlXFxuICAgIH1cXG4gICAgLi4uSW52aXRlRGlhbG9nUHJvamVjdFJvd19Qcm9qZWN0XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IEludml0ZURpYWxvZ1Byb2plY3RfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICB3b3Jrc3BhY2VJZFxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICAgIHJvbGVcXG4gICAgICBkb21haW5CYXNlZE1lbWJlcnNoaXBQcm90ZWN0aW9uRW5hYmxlZFxcbiAgICAgIGRvbWFpbnMge1xcbiAgICAgICAgZG9tYWluXFxuICAgICAgICBpZFxcbiAgICAgIH1cXG4gICAgICAuLi5Xb3Jrc3BhY2VzUGxhbl9Xb3Jrc3BhY2VcXG4gICAgfVxcbiAgICAuLi5JbnZpdGVEaWFsb2dQcm9qZWN0Um93X1Byb2plY3RcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgSW52aXRlRGlhbG9nUHJvamVjdFJvd19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICB3b3Jrc3BhY2VJZFxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgcm9sZVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IEludml0ZURpYWxvZ1Byb2plY3RSb3dfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgd29ya3NwYWNlSWRcXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIHJvbGVcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBJbnZpdGVEaWFsb2dQcm9qZWN0Um93UHJvamVjdENvbGxhYm9yYXRvcnMoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJGZpbHRlcjogSW52aXRhYmxlQ29sbGFib3JhdG9yc0ZpbHRlclxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIGludml0YWJsZUNvbGxhYm9yYXRvcnMoZmlsdGVyOiAkZmlsdGVyKSB7XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIC4uLkludml0ZVByb2plY3RJdGVtX1dvcmtzcGFjZUNvbGxhYm9yYXRvclxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBJbnZpdGVEaWFsb2dQcm9qZWN0Um93UHJvamVjdENvbGxhYm9yYXRvcnMoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJGZpbHRlcjogSW52aXRhYmxlQ29sbGFib3JhdG9yc0ZpbHRlclxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIGludml0YWJsZUNvbGxhYm9yYXRvcnMoZmlsdGVyOiAkZmlsdGVyKSB7XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIC4uLkludml0ZVByb2plY3RJdGVtX1dvcmtzcGFjZUNvbGxhYm9yYXRvclxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBJbnZpdGVEaWFsb2dTaGFyZWRTZWxlY3RVc2Vyc19Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgc2x1Z1xcbiAgICBkZWZhdWx0U2VhdFR5cGVcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgSW52aXRlRGlhbG9nU2hhcmVkU2VsZWN0VXNlcnNfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHNsdWdcXG4gICAgZGVmYXVsdFNlYXRUeXBlXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByZXNlbnRhdGlvbkhlYWRlcl9TYXZlZFZpZXdHcm91cCBvbiBTYXZlZFZpZXdHcm91cCB7XFxuICAgIGlkXFxuICAgIHRpdGxlXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFByZXNlbnRhdGlvbkhlYWRlcl9TYXZlZFZpZXdHcm91cCBvbiBTYXZlZFZpZXdHcm91cCB7XFxuICAgIGlkXFxuICAgIHRpdGxlXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByZXNlbnRhdGlvbkluZm9TaWRlYmFyX1NhdmVkVmlldyBvbiBTYXZlZFZpZXcge1xcbiAgICBpZFxcbiAgICAuLi5QcmVzZW50YXRpb25TbGlkZUVkaXREaWFsb2dfU2F2ZWRWaWV3XFxuICAgIG5hbWVcXG4gICAgZGVzY3JpcHRpb25cXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkVkaXRUaXRsZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhbkVkaXREZXNjcmlwdGlvbiB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFByZXNlbnRhdGlvbkluZm9TaWRlYmFyX1NhdmVkVmlldyBvbiBTYXZlZFZpZXcge1xcbiAgICBpZFxcbiAgICAuLi5QcmVzZW50YXRpb25TbGlkZUVkaXREaWFsb2dfU2F2ZWRWaWV3XFxuICAgIG5hbWVcXG4gICAgZGVzY3JpcHRpb25cXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkVkaXRUaXRsZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhbkVkaXREZXNjcmlwdGlvbiB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByZXNlbnRhdGlvbkxlZnRTaWRlYmFyX0xpbWl0ZWRXb3Jrc3BhY2Ugb24gTGltaXRlZFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgbG9nb1xcbiAgICBzbHVnXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFByZXNlbnRhdGlvbkxlZnRTaWRlYmFyX0xpbWl0ZWRXb3Jrc3BhY2Ugb24gTGltaXRlZFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgbG9nb1xcbiAgICBzbHVnXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByZXNlbnRhdGlvbkxvYWRpbmdfU2F2ZWRWaWV3R3JvdXAgb24gU2F2ZWRWaWV3R3JvdXAge1xcbiAgICBpZFxcbiAgICB0aXRsZVxcbiAgICB2aWV3cyhpbnB1dDogJGlucHV0KSB7XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHNjcmVlbnNob3RcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cXG4gIGZyYWdtZW50IFByZXNlbnRhdGlvbkxvYWRpbmdfTGltaXRlZFdvcmtzcGFjZSBvbiBMaW1pdGVkV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBsb2dvXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFByZXNlbnRhdGlvbkxvYWRpbmdfU2F2ZWRWaWV3R3JvdXAgb24gU2F2ZWRWaWV3R3JvdXAge1xcbiAgICBpZFxcbiAgICB0aXRsZVxcbiAgICB2aWV3cyhpbnB1dDogJGlucHV0KSB7XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHNjcmVlbnNob3RcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cXG4gIGZyYWdtZW50IFByZXNlbnRhdGlvbkxvYWRpbmdfTGltaXRlZFdvcmtzcGFjZSBvbiBMaW1pdGVkV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBsb2dvXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByZXNlbnRhdGlvblBhZ2VXcmFwcGVyX1NhdmVkVmlld0dyb3VwIG9uIFNhdmVkVmlld0dyb3VwIHtcXG4gICAgaWRcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhblVwZGF0ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFByZXNlbnRhdGlvblBhZ2VXcmFwcGVyX1NhdmVkVmlld0dyb3VwIG9uIFNhdmVkVmlld0dyb3VwIHtcXG4gICAgaWRcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhblVwZGF0ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFByZXNlbnRhdGlvblNoYXJlRGlhbG9nUGVybWlzc2lvbnMoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJHNhdmVkVmlld0dyb3VwSWQ6IElEIVxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHJvbGVcXG4gICAgICBzYXZlZFZpZXdHcm91cChpZDogJHNhdmVkVmlld0dyb3VwSWQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBncm91cElkXFxuICAgICAgICBzaGFyZUxpbmsge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBjb250ZW50XFxuICAgICAgICAgIHJldm9rZWRcXG4gICAgICAgIH1cXG4gICAgICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICAgICAgY2FuQ3JlYXRlVG9rZW4ge1xcbiAgICAgICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBQcmVzZW50YXRpb25TaGFyZURpYWxvZ1Blcm1pc3Npb25zKFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRzYXZlZFZpZXdHcm91cElkOiBJRCFcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICByb2xlXFxuICAgICAgc2F2ZWRWaWV3R3JvdXAoaWQ6ICRzYXZlZFZpZXdHcm91cElkKSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgZ3JvdXBJZFxcbiAgICAgICAgc2hhcmVMaW5rIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgY29udGVudFxcbiAgICAgICAgICByZXZva2VkXFxuICAgICAgICB9XFxuICAgICAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgICAgIGNhbkNyZWF0ZVRva2VuIHtcXG4gICAgICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gUHJlc2VudGF0aW9uU2hhcmVUb2tlbigkaW5wdXQ6IFNhdmVkVmlld0dyb3VwU2hhcmVJbnB1dCEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgc2F2ZWRWaWV3TXV0YXRpb25zIHtcXG4gICAgICAgIHNoYXJlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgcmV2b2tlZFxcbiAgICAgICAgICBjb250ZW50XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIFByZXNlbnRhdGlvblNoYXJlVG9rZW4oJGlucHV0OiBTYXZlZFZpZXdHcm91cFNoYXJlSW5wdXQhKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIHNhdmVkVmlld011dGF0aW9ucyB7XFxuICAgICAgICBzaGFyZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIHJldm9rZWRcXG4gICAgICAgICAgY29udGVudFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBQcmVzZW50YXRpb25TaGFyZUVuYWJsZVRva2VuKCRpbnB1dDogU2F2ZWRWaWV3R3JvdXBTaGFyZVVwZGF0ZUlucHV0ISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBzYXZlZFZpZXdNdXRhdGlvbnMge1xcbiAgICAgICAgZW5hYmxlU2hhcmUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICByZXZva2VkXFxuICAgICAgICAgIGNvbnRlbnRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gUHJlc2VudGF0aW9uU2hhcmVFbmFibGVUb2tlbigkaW5wdXQ6IFNhdmVkVmlld0dyb3VwU2hhcmVVcGRhdGVJbnB1dCEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgc2F2ZWRWaWV3TXV0YXRpb25zIHtcXG4gICAgICAgIGVuYWJsZVNoYXJlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgcmV2b2tlZFxcbiAgICAgICAgICBjb250ZW50XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIFByZXNlbnRhdGlvblNoYXJlRGlzYWJsZVRva2VuKCRpbnB1dDogU2F2ZWRWaWV3R3JvdXBTaGFyZVVwZGF0ZUlucHV0ISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBzYXZlZFZpZXdNdXRhdGlvbnMge1xcbiAgICAgICAgZGlzYWJsZVNoYXJlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgcmV2b2tlZFxcbiAgICAgICAgICBjb250ZW50XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIFByZXNlbnRhdGlvblNoYXJlRGlzYWJsZVRva2VuKCRpbnB1dDogU2F2ZWRWaWV3R3JvdXBTaGFyZVVwZGF0ZUlucHV0ISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBzYXZlZFZpZXdNdXRhdGlvbnMge1xcbiAgICAgICAgZGlzYWJsZVNoYXJlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgcmV2b2tlZFxcbiAgICAgICAgICBjb250ZW50XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByZXNlbnRhdGlvblNsaWRlRWRpdERpYWxvZ19TYXZlZFZpZXcgb24gU2F2ZWRWaWV3IHtcXG4gICAgaWRcXG4gICAgcHJvamVjdElkXFxuICAgIG5hbWVcXG4gICAgZGVzY3JpcHRpb25cXG4gICAgdGh1bWJuYWlsVXJsXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFByZXNlbnRhdGlvblNsaWRlRWRpdERpYWxvZ19TYXZlZFZpZXcgb24gU2F2ZWRWaWV3IHtcXG4gICAgaWRcXG4gICAgcHJvamVjdElkXFxuICAgIG5hbWVcXG4gICAgZGVzY3JpcHRpb25cXG4gICAgdGh1bWJuYWlsVXJsXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByZXNlbnRhdGlvblNsaWRlTGlzdFNsaWRlX1NhdmVkVmlldyBvbiBTYXZlZFZpZXcge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHRodW1ibmFpbFVybFxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBQcmVzZW50YXRpb25TbGlkZUxpc3RTbGlkZV9TYXZlZFZpZXcgb24gU2F2ZWRWaWV3IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICB0aHVtYm5haWxVcmxcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJlc2VudGF0aW9uU2xpZGVMaXN0X1NhdmVkVmlld0dyb3VwIG9uIFNhdmVkVmlld0dyb3VwIHtcXG4gICAgaWRcXG4gICAgdmlld3MoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5QcmVzZW50YXRpb25TbGlkZUxpc3RTbGlkZV9TYXZlZFZpZXdcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJlc2VudGF0aW9uU2xpZGVMaXN0X1NhdmVkVmlld0dyb3VwIG9uIFNhdmVkVmlld0dyb3VwIHtcXG4gICAgaWRcXG4gICAgdmlld3MoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5QcmVzZW50YXRpb25TbGlkZUxpc3RTbGlkZV9TYXZlZFZpZXdcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJlc2VudGF0aW9uVmlld2VyUGFnZVdyYXBwZXJfU2F2ZWRWaWV3R3JvdXAgb24gU2F2ZWRWaWV3R3JvdXAge1xcbiAgICBpZFxcbiAgICB2aWV3cyhpbnB1dDogJGlucHV0KSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIGlkXFxuICAgICAgICByZXNvdXJjZUlkU3RyaW5nXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFByZXNlbnRhdGlvblZpZXdlclBhZ2VXcmFwcGVyX1NhdmVkVmlld0dyb3VwIG9uIFNhdmVkVmlld0dyb3VwIHtcXG4gICAgaWRcXG4gICAgdmlld3MoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICBpZFxcbiAgICAgICAgcmVzb3VyY2VJZFN0cmluZ1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBQcm9qZWN0Q2FyZEltcG9ydEZpbGVBcmVhX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVNb2RlbCB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIC4uLlVzZUZpbGVJbXBvcnRfUHJvamVjdFxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBQcm9qZWN0Q2FyZEltcG9ydEZpbGVBcmVhX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVNb2RlbCB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIC4uLlVzZUZpbGVJbXBvcnRfUHJvamVjdFxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBQcm9qZWN0Q2FyZEltcG9ydEZpbGVBcmVhX01vZGVsIG9uIE1vZGVsIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQ3JlYXRlVmVyc2lvbiB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIC4uLlVzZUZpbGVJbXBvcnRfTW9kZWxcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdENhcmRJbXBvcnRGaWxlQXJlYV9Nb2RlbCBvbiBNb2RlbCB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkNyZWF0ZVZlcnNpb24ge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5Vc2VGaWxlSW1wb3J0X01vZGVsXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByb2plY3RJbnZpdGVBZGRfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgLi4uSW52aXRlRGlhbG9nUHJvamVjdF9Qcm9qZWN0XFxuICAgIC4uLlVzZUNhbkludml0ZVRvUHJvamVjdF9Qcm9qZWN0XFxuICAgIC4uLldvcmtzcGFjZU1vdmVQcm9qZWN0X1Byb2plY3RcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdEludml0ZUFkZF9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICAuLi5JbnZpdGVEaWFsb2dQcm9qZWN0X1Byb2plY3RcXG4gICAgLi4uVXNlQ2FuSW52aXRlVG9Qcm9qZWN0X1Byb2plY3RcXG4gICAgLi4uV29ya3NwYWNlTW92ZVByb2plY3RfUHJvamVjdFxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBQcm9qZWN0TW9kZWxQYWdlSGVhZGVyUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBtb2RlbChpZDogJG1vZGVsSWQpIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgICBkZXNjcmlwdGlvblxcbiAgICB9XFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICBzbHVnXFxuICAgICAgbmFtZVxcbiAgICAgIHJvbGVcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBQcm9qZWN0TW9kZWxQYWdlSGVhZGVyUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBtb2RlbChpZDogJG1vZGVsSWQpIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgICBkZXNjcmlwdGlvblxcbiAgICB9XFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICBzbHVnXFxuICAgICAgbmFtZVxcbiAgICAgIHJvbGVcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBQcm9qZWN0TW9kZWxQYWdlVmVyc2lvbnNQYWdpbmF0aW9uIG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICB2aXNpYmlsaXR5XFxuICAgIHJvbGVcXG4gICAgbW9kZWwoaWQ6ICRtb2RlbElkKSB7XFxuICAgICAgaWRcXG4gICAgICB2ZXJzaW9ucyhsaW1pdDogMTYsIGN1cnNvcjogJHZlcnNpb25zQ3Vyc29yKSB7XFxuICAgICAgICBjdXJzb3JcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgLi4uUHJvamVjdE1vZGVsUGFnZVZlcnNpb25zQ2FyZFZlcnNpb25cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgLi4uUHJvamVjdENhcmRJbXBvcnRGaWxlQXJlYV9Nb2RlbFxcbiAgICB9XFxuICAgIC4uLlByb2plY3RzTW9kZWxQYWdlRW1iZWRfUHJvamVjdFxcbiAgICAuLi5Qcm9qZWN0Q2FyZEltcG9ydEZpbGVBcmVhX1Byb2plY3RcXG4gICAgLi4uUHJvamVjdE1vZGVsUGFnZVZlcnNpb25zQ2FyZF9Qcm9qZWN0XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFByb2plY3RNb2RlbFBhZ2VWZXJzaW9uc1BhZ2luYXRpb24gb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHZpc2liaWxpdHlcXG4gICAgcm9sZVxcbiAgICBtb2RlbChpZDogJG1vZGVsSWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHZlcnNpb25zKGxpbWl0OiAxNiwgY3Vyc29yOiAkdmVyc2lvbnNDdXJzb3IpIHtcXG4gICAgICAgIGN1cnNvclxcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAuLi5Qcm9qZWN0TW9kZWxQYWdlVmVyc2lvbnNDYXJkVmVyc2lvblxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICAuLi5Qcm9qZWN0Q2FyZEltcG9ydEZpbGVBcmVhX01vZGVsXFxuICAgIH1cXG4gICAgLi4uUHJvamVjdHNNb2RlbFBhZ2VFbWJlZF9Qcm9qZWN0XFxuICAgIC4uLlByb2plY3RDYXJkSW1wb3J0RmlsZUFyZWFfUHJvamVjdFxcbiAgICAuLi5Qcm9qZWN0TW9kZWxQYWdlVmVyc2lvbnNDYXJkX1Byb2plY3RcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdE1vZGVsUGFnZVZlcnNpb25zUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgLi4uUHJvamVjdFBhZ2VQcm9qZWN0SGVhZGVyXFxuICAgIG1vZGVsKGlkOiAkbW9kZWxJZCkge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICAgIHBlbmRpbmdJbXBvcnRlZFZlcnNpb25zIHtcXG4gICAgICAgIC4uLlBlbmRpbmdGaWxlVXBsb2FkXFxuICAgICAgfVxcbiAgICB9XFxuICAgIC4uLlByb2plY3RNb2RlbFBhZ2VWZXJzaW9uc1BhZ2luYXRpb25cXG4gICAgLi4uUHJvamVjdHNNb2RlbFBhZ2VFbWJlZF9Qcm9qZWN0XFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICByZWFkT25seVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFByb2plY3RNb2RlbFBhZ2VWZXJzaW9uc1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIC4uLlByb2plY3RQYWdlUHJvamVjdEhlYWRlclxcbiAgICBtb2RlbChpZDogJG1vZGVsSWQpIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgICBwZW5kaW5nSW1wb3J0ZWRWZXJzaW9ucyB7XFxuICAgICAgICAuLi5QZW5kaW5nRmlsZVVwbG9hZFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5Qcm9qZWN0TW9kZWxQYWdlVmVyc2lvbnNQYWdpbmF0aW9uXFxuICAgIC4uLlByb2plY3RzTW9kZWxQYWdlRW1iZWRfUHJvamVjdFxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgcmVhZE9ubHlcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBQcm9qZWN0TW9kZWxQYWdlRGlhbG9nRGVsZXRlVmVyc2lvbiBvbiBWZXJzaW9uIHtcXG4gICAgaWRcXG4gICAgbWVzc2FnZVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBQcm9qZWN0TW9kZWxQYWdlRGlhbG9nRGVsZXRlVmVyc2lvbiBvbiBWZXJzaW9uIHtcXG4gICAgaWRcXG4gICAgbWVzc2FnZVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBQcm9qZWN0TW9kZWxQYWdlRGlhbG9nRWRpdE1lc3NhZ2VWZXJzaW9uIG9uIFZlcnNpb24ge1xcbiAgICBpZFxcbiAgICBtZXNzYWdlXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFByb2plY3RNb2RlbFBhZ2VEaWFsb2dFZGl0TWVzc2FnZVZlcnNpb24gb24gVmVyc2lvbiB7XFxuICAgIGlkXFxuICAgIG1lc3NhZ2VcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdE1vZGVsUGFnZURpYWxvZ01vdmVUb1ZlcnNpb24gb24gVmVyc2lvbiB7XFxuICAgIGlkXFxuICAgIG1lc3NhZ2VcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdE1vZGVsUGFnZURpYWxvZ01vdmVUb1ZlcnNpb24gb24gVmVyc2lvbiB7XFxuICAgIGlkXFxuICAgIG1lc3NhZ2VcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdHNNb2RlbFBhZ2VFbWJlZF9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICB2aXNpYmlsaXR5XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVFbWJlZFRva2VucyB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICBzbHVnXFxuICAgICAgcm9sZVxcbiAgICAgIGVtYmVkT3B0aW9ucyB7XFxuICAgICAgICBoaWRlU3BlY2tsZUJyYW5kaW5nXFxuICAgICAgfVxcbiAgICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICAgIGNhbkVkaXRFbWJlZE9wdGlvbnMge1xcbiAgICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFByb2plY3RzTW9kZWxQYWdlRW1iZWRfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgdmlzaWJpbGl0eVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQ3JlYXRlRW1iZWRUb2tlbnMge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgc2x1Z1xcbiAgICAgIHJvbGVcXG4gICAgICBlbWJlZE9wdGlvbnMge1xcbiAgICAgICAgaGlkZVNwZWNrbGVCcmFuZGluZ1xcbiAgICAgIH1cXG4gICAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgICBjYW5FZGl0RW1iZWRPcHRpb25zIHtcXG4gICAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBQcm9qZWN0TW9kZWxQYWdlVmVyc2lvbnNDYXJkX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICBzbHVnXFxuICAgIH1cXG4gICAgLi4uVmlld2VyUmVzb3VyY2VzTGltaXRBbGVydF9Qcm9qZWN0XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFByb2plY3RNb2RlbFBhZ2VWZXJzaW9uc0NhcmRfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIHNsdWdcXG4gICAgfVxcbiAgICAuLi5WaWV3ZXJSZXNvdXJjZXNMaW1pdEFsZXJ0X1Byb2plY3RcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdE1vZGVsUGFnZVZlcnNpb25zQ2FyZFZlcnNpb24gb24gVmVyc2lvbiB7XFxuICAgIGlkXFxuICAgIG1lc3NhZ2VcXG4gICAgYXV0aG9yVXNlciB7XFxuICAgICAgLi4uTGltaXRlZFVzZXJBdmF0YXJcXG4gICAgfVxcbiAgICBjcmVhdGVkQXRcXG4gICAgcHJldmlld1VybFxcbiAgICByZWZlcmVuY2VkT2JqZWN0XFxuICAgIHNvdXJjZUFwcGxpY2F0aW9uXFxuICAgIGNvbW1lbnRUaHJlYWRDb3VudDogY29tbWVudFRocmVhZHMobGltaXQ6IDApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgLi4uUHJvamVjdE1vZGVsUGFnZURpYWxvZ0RlbGV0ZVZlcnNpb25cXG4gICAgLi4uUHJvamVjdE1vZGVsUGFnZURpYWxvZ01vdmVUb1ZlcnNpb25cXG4gICAgYXV0b21hdGlvbnNTdGF0dXMge1xcbiAgICAgIC4uLkF1dG9tYXRlUnVuc1RyaWdnZXJTdGF0dXNfVHJpZ2dlcmVkQXV0b21hdGlvbnNTdGF0dXNcXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuVXBkYXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdE1vZGVsUGFnZVZlcnNpb25zQ2FyZFZlcnNpb24gb24gVmVyc2lvbiB7XFxuICAgIGlkXFxuICAgIG1lc3NhZ2VcXG4gICAgYXV0aG9yVXNlciB7XFxuICAgICAgLi4uTGltaXRlZFVzZXJBdmF0YXJcXG4gICAgfVxcbiAgICBjcmVhdGVkQXRcXG4gICAgcHJldmlld1VybFxcbiAgICByZWZlcmVuY2VkT2JqZWN0XFxuICAgIHNvdXJjZUFwcGxpY2F0aW9uXFxuICAgIGNvbW1lbnRUaHJlYWRDb3VudDogY29tbWVudFRocmVhZHMobGltaXQ6IDApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgLi4uUHJvamVjdE1vZGVsUGFnZURpYWxvZ0RlbGV0ZVZlcnNpb25cXG4gICAgLi4uUHJvamVjdE1vZGVsUGFnZURpYWxvZ01vdmVUb1ZlcnNpb25cXG4gICAgYXV0b21hdGlvbnNTdGF0dXMge1xcbiAgICAgIC4uLkF1dG9tYXRlUnVuc1RyaWdnZXJTdGF0dXNfVHJpZ2dlcmVkQXV0b21hdGlvbnNTdGF0dXNcXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuVXBkYXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdE1vZGVsc0FkZF9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIG5hbWVcXG4gICAgICBzbHVnXFxuICAgICAgcm9sZVxcbiAgICAgIHBsYW4ge1xcbiAgICAgICAgbmFtZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5Vc2VDYW5DcmVhdGVNb2RlbF9Qcm9qZWN0XFxuICAgIC4uLldvcmtzcGFjZU1vdmVQcm9qZWN0X1Byb2plY3RcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdE1vZGVsc0FkZF9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIG5hbWVcXG4gICAgICBzbHVnXFxuICAgICAgcm9sZVxcbiAgICAgIHBsYW4ge1xcbiAgICAgICAgbmFtZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5Vc2VDYW5DcmVhdGVNb2RlbF9Qcm9qZWN0XFxuICAgIC4uLldvcmtzcGFjZU1vdmVQcm9qZWN0X1Byb2plY3RcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VQcm9qZWN0SGVhZGVyIG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGRlc2NyaXB0aW9uXFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICBzbHVnXFxuICAgICAgbmFtZVxcbiAgICAgIGxvZ29cXG4gICAgICByb2xlXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VQcm9qZWN0SGVhZGVyIG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGRlc2NyaXB0aW9uXFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICBzbHVnXFxuICAgICAgbmFtZVxcbiAgICAgIGxvZ29cXG4gICAgICByb2xlXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VBdXRvbWF0aW9uRGVsZXRlRGlhbG9nX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgd29ya3NwYWNlSWRcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VBdXRvbWF0aW9uRGVsZXRlRGlhbG9nX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgd29ya3NwYWNlSWRcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VBdXRvbWF0aW9uRGVsZXRlRGlhbG9nX0F1dG9tYXRpb24gb24gQXV0b21hdGlvbiB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgY3VycmVudFJldmlzaW9uIHtcXG4gICAgICBmdW5jdGlvbnMge1xcbiAgICAgICAgcmVsZWFzZSB7XFxuICAgICAgICAgIGZ1bmN0aW9uIHtcXG4gICAgICAgICAgICBpZFxcbiAgICAgICAgICAgIG5hbWVcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZUF1dG9tYXRpb25EZWxldGVEaWFsb2dfQXV0b21hdGlvbiBvbiBBdXRvbWF0aW9uIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBjdXJyZW50UmV2aXNpb24ge1xcbiAgICAgIGZ1bmN0aW9ucyB7XFxuICAgICAgICByZWxlYXNlIHtcXG4gICAgICAgICAgZnVuY3Rpb24ge1xcbiAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgbmFtZVxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlQXV0b21hdGlvbkZ1bmN0aW9uU2V0dGluZ3NEaWFsb2dfQXV0b21hdGlvblJldmlzaW9uRnVuY3Rpb24gb24gQXV0b21hdGlvblJldmlzaW9uRnVuY3Rpb24ge1xcbiAgICBwYXJhbWV0ZXJzXFxuICAgIHJlbGVhc2Uge1xcbiAgICAgIGlkXFxuICAgICAgdmVyc2lvblRhZ1xcbiAgICAgIGNyZWF0ZWRBdFxcbiAgICAgIGlucHV0U2NoZW1hXFxuICAgICAgZnVuY3Rpb24ge1xcbiAgICAgICAgaWRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VBdXRvbWF0aW9uRnVuY3Rpb25TZXR0aW5nc0RpYWxvZ19BdXRvbWF0aW9uUmV2aXNpb25GdW5jdGlvbiBvbiBBdXRvbWF0aW9uUmV2aXNpb25GdW5jdGlvbiB7XFxuICAgIHBhcmFtZXRlcnNcXG4gICAgcmVsZWFzZSB7XFxuICAgICAgaWRcXG4gICAgICB2ZXJzaW9uVGFnXFxuICAgICAgY3JlYXRlZEF0XFxuICAgICAgaW5wdXRTY2hlbWFcXG4gICAgICBmdW5jdGlvbiB7XFxuICAgICAgICBpZFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZUF1dG9tYXRpb25GdW5jdGlvblNldHRpbmdzRGlhbG9nX0F1dG9tYXRpb25SZXZpc2lvbiBvbiBBdXRvbWF0aW9uUmV2aXNpb24ge1xcbiAgICBpZFxcbiAgICB0cmlnZ2VyRGVmaW5pdGlvbnMge1xcbiAgICAgIC4uLiBvbiBWZXJzaW9uQ3JlYXRlZFRyaWdnZXJEZWZpbml0aW9uIHtcXG4gICAgICAgIHR5cGVcXG4gICAgICAgIG1vZGVsIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uQ29tbW9uTW9kZWxTZWxlY3Rvck1vZGVsXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlQXV0b21hdGlvbkZ1bmN0aW9uU2V0dGluZ3NEaWFsb2dfQXV0b21hdGlvblJldmlzaW9uIG9uIEF1dG9tYXRpb25SZXZpc2lvbiB7XFxuICAgIGlkXFxuICAgIHRyaWdnZXJEZWZpbml0aW9ucyB7XFxuICAgICAgLi4uIG9uIFZlcnNpb25DcmVhdGVkVHJpZ2dlckRlZmluaXRpb24ge1xcbiAgICAgICAgdHlwZVxcbiAgICAgICAgbW9kZWwge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICAuLi5Db21tb25Nb2RlbFNlbGVjdG9yTW9kZWxcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VBdXRvbWF0aW9uRnVuY3Rpb25zX0F1dG9tYXRpb24gb24gQXV0b21hdGlvbiB7XFxuICAgIGlkXFxuICAgIGN1cnJlbnRSZXZpc2lvbiB7XFxuICAgICAgaWRcXG4gICAgICAuLi5Qcm9qZWN0UGFnZUF1dG9tYXRpb25GdW5jdGlvblNldHRpbmdzRGlhbG9nX0F1dG9tYXRpb25SZXZpc2lvblxcbiAgICAgIGZ1bmN0aW9ucyB7XFxuICAgICAgICByZWxlYXNlIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgaW5wdXRTY2hlbWFcXG4gICAgICAgICAgZnVuY3Rpb24ge1xcbiAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgLi4uQXV0b21hdGlvbnNGdW5jdGlvbnNDYXJkX0F1dG9tYXRlRnVuY3Rpb25cXG4gICAgICAgICAgICByZWxlYXNlcyhsaW1pdDogMSkge1xcbiAgICAgICAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAgICAgICBpZFxcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgLi4uUHJvamVjdFBhZ2VBdXRvbWF0aW9uRnVuY3Rpb25TZXR0aW5nc0RpYWxvZ19BdXRvbWF0aW9uUmV2aXNpb25GdW5jdGlvblxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZUF1dG9tYXRpb25GdW5jdGlvbnNfQXV0b21hdGlvbiBvbiBBdXRvbWF0aW9uIHtcXG4gICAgaWRcXG4gICAgY3VycmVudFJldmlzaW9uIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLlByb2plY3RQYWdlQXV0b21hdGlvbkZ1bmN0aW9uU2V0dGluZ3NEaWFsb2dfQXV0b21hdGlvblJldmlzaW9uXFxuICAgICAgZnVuY3Rpb25zIHtcXG4gICAgICAgIHJlbGVhc2Uge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBpbnB1dFNjaGVtYVxcbiAgICAgICAgICBmdW5jdGlvbiB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICAuLi5BdXRvbWF0aW9uc0Z1bmN0aW9uc0NhcmRfQXV0b21hdGVGdW5jdGlvblxcbiAgICAgICAgICAgIHJlbGVhc2VzKGxpbWl0OiAxKSB7XFxuICAgICAgICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICAuLi5Qcm9qZWN0UGFnZUF1dG9tYXRpb25GdW5jdGlvblNldHRpbmdzRGlhbG9nX0F1dG9tYXRpb25SZXZpc2lvbkZ1bmN0aW9uXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlQXV0b21hdGlvbkhlYWRlcl9BdXRvbWF0aW9uIG9uIEF1dG9tYXRpb24ge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGVuYWJsZWRcXG4gICAgaXNUZXN0QXV0b21hdGlvblxcbiAgICBjdXJyZW50UmV2aXNpb24ge1xcbiAgICAgIGlkXFxuICAgICAgdHJpZ2dlckRlZmluaXRpb25zIHtcXG4gICAgICAgIC4uLiBvbiBWZXJzaW9uQ3JlYXRlZFRyaWdnZXJEZWZpbml0aW9uIHtcXG4gICAgICAgICAgbW9kZWwge1xcbiAgICAgICAgICAgIC4uLlByb2plY3RQYWdlTGF0ZXN0SXRlbXNNb2RlbEl0ZW1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZUF1dG9tYXRpb25IZWFkZXJfQXV0b21hdGlvbiBvbiBBdXRvbWF0aW9uIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBlbmFibGVkXFxuICAgIGlzVGVzdEF1dG9tYXRpb25cXG4gICAgY3VycmVudFJldmlzaW9uIHtcXG4gICAgICBpZFxcbiAgICAgIHRyaWdnZXJEZWZpbml0aW9ucyB7XFxuICAgICAgICAuLi4gb24gVmVyc2lvbkNyZWF0ZWRUcmlnZ2VyRGVmaW5pdGlvbiB7XFxuICAgICAgICAgIG1vZGVsIHtcXG4gICAgICAgICAgICAuLi5Qcm9qZWN0UGFnZUxhdGVzdEl0ZW1zTW9kZWxJdGVtXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VBdXRvbWF0aW9uSGVhZGVyX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHJvbGVcXG4gICAgd29ya3NwYWNlSWRcXG4gICAgLi4uUHJvamVjdFBhZ2VNb2RlbHNDYXJkUHJvamVjdFxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZUF1dG9tYXRpb25IZWFkZXJfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgcm9sZVxcbiAgICB3b3Jrc3BhY2VJZFxcbiAgICAuLi5Qcm9qZWN0UGFnZU1vZGVsc0NhcmRQcm9qZWN0XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlQXV0b21hdGlvbk1vZGVsc19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICAuLi5Qcm9qZWN0UGFnZU1vZGVsc0NhcmRQcm9qZWN0XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlQXV0b21hdGlvbk1vZGVsc19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICAuLi5Qcm9qZWN0UGFnZU1vZGVsc0NhcmRQcm9qZWN0XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlQXV0b21hdGlvblJ1bnNfQXV0b21hdGlvbiBvbiBBdXRvbWF0aW9uIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBlbmFibGVkXFxuICAgIGlzVGVzdEF1dG9tYXRpb25cXG4gICAgcnVucyhsaW1pdDogMTApIHtcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICAuLi5BdXRvbWF0aW9uUnVuRGV0YWlsc1xcbiAgICAgIH1cXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgY3Vyc29yXFxuICAgIH1cXG4gICAgLi4uUHJvamVjdFBhZ2VBdXRvbWF0aW9uRGVsZXRlRGlhbG9nX0F1dG9tYXRpb25cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VBdXRvbWF0aW9uUnVuc19BdXRvbWF0aW9uIG9uIEF1dG9tYXRpb24ge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGVuYWJsZWRcXG4gICAgaXNUZXN0QXV0b21hdGlvblxcbiAgICBydW5zKGxpbWl0OiAxMCkge1xcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIC4uLkF1dG9tYXRpb25SdW5EZXRhaWxzXFxuICAgICAgfVxcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgICBjdXJzb3JcXG4gICAgfVxcbiAgICAuLi5Qcm9qZWN0UGFnZUF1dG9tYXRpb25EZWxldGVEaWFsb2dfQXV0b21hdGlvblxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZUF1dG9tYXRpb25zUm93X0F1dG9tYXRpb24gb24gQXV0b21hdGlvbiB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgZW5hYmxlZFxcbiAgICBpc1Rlc3RBdXRvbWF0aW9uXFxuICAgIGN1cnJlbnRSZXZpc2lvbiB7XFxuICAgICAgaWRcXG4gICAgICB0cmlnZ2VyRGVmaW5pdGlvbnMge1xcbiAgICAgICAgLi4uIG9uIFZlcnNpb25DcmVhdGVkVHJpZ2dlckRlZmluaXRpb24ge1xcbiAgICAgICAgICBtb2RlbCB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICBuYW1lXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gICAgcnVucyhsaW1pdDogMTApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgLi4uQXV0b21hdGlvblJ1bkRldGFpbHNcXG4gICAgICB9XFxuICAgICAgY3Vyc29yXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VBdXRvbWF0aW9uc1Jvd19BdXRvbWF0aW9uIG9uIEF1dG9tYXRpb24ge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGVuYWJsZWRcXG4gICAgaXNUZXN0QXV0b21hdGlvblxcbiAgICBjdXJyZW50UmV2aXNpb24ge1xcbiAgICAgIGlkXFxuICAgICAgdHJpZ2dlckRlZmluaXRpb25zIHtcXG4gICAgICAgIC4uLiBvbiBWZXJzaW9uQ3JlYXRlZFRyaWdnZXJEZWZpbml0aW9uIHtcXG4gICAgICAgICAgbW9kZWwge1xcbiAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgbmFtZVxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHJ1bnMobGltaXQ6IDEwKSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIC4uLkF1dG9tYXRpb25SdW5EZXRhaWxzXFxuICAgICAgfVxcbiAgICAgIGN1cnNvclxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlQ29sbGFib3JhdG9yc19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuVXBkYXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uUHJvamVjdEludml0ZUFkZF9Qcm9qZWN0XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlQ29sbGFib3JhdG9yc19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuVXBkYXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uUHJvamVjdEludml0ZUFkZF9Qcm9qZWN0XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFByb2plY3RQYWdlQ29sbGFib3JhdG9ycygkcHJvamVjdElkOiBTdHJpbmchLCAkZmlsdGVyOiBXb3Jrc3BhY2VUZWFtRmlsdGVyISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICB2aXNpYmlsaXR5XFxuICAgICAgLi4uUHJvamVjdFBhZ2VUZWFtSW50ZXJuYWxzX1Byb2plY3RcXG4gICAgICAuLi5JbnZpdGVEaWFsb2dQcm9qZWN0X1Byb2plY3RcXG4gICAgICAuLi5Qcm9qZWN0UGFnZUNvbGxhYm9yYXRvcnNfUHJvamVjdFxcbiAgICAgIHdvcmtzcGFjZUlkXFxuICAgICAgcGVybWlzc2lvbnMge1xcbiAgICAgICAgY2FuSW52aXRlIHtcXG4gICAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICB3b3Jrc3BhY2Uge1xcbiAgICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc1RhYmxlSGVhZGVyX1dvcmtzcGFjZVxcbiAgICAgICAgbmFtZVxcbiAgICAgICAgbG9nb1xcbiAgICAgICAgdGVhbShmaWx0ZXI6ICRmaWx0ZXIpIHtcXG4gICAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAgIC4uLlByb2plY3RQYWdlQ29sbGFib3JhdG9yc19Xb3Jrc3BhY2VDb2xsYWJvcmF0b3JcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBQcm9qZWN0UGFnZUNvbGxhYm9yYXRvcnMoJHByb2plY3RJZDogU3RyaW5nISwgJGZpbHRlcjogV29ya3NwYWNlVGVhbUZpbHRlciEpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgdmlzaWJpbGl0eVxcbiAgICAgIC4uLlByb2plY3RQYWdlVGVhbUludGVybmFsc19Qcm9qZWN0XFxuICAgICAgLi4uSW52aXRlRGlhbG9nUHJvamVjdF9Qcm9qZWN0XFxuICAgICAgLi4uUHJvamVjdFBhZ2VDb2xsYWJvcmF0b3JzX1Byb2plY3RcXG4gICAgICB3b3Jrc3BhY2VJZFxcbiAgICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICAgIGNhbkludml0ZSB7XFxuICAgICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgd29ya3NwYWNlIHtcXG4gICAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNUYWJsZUhlYWRlcl9Xb3Jrc3BhY2VcXG4gICAgICAgIG5hbWVcXG4gICAgICAgIGxvZ29cXG4gICAgICAgIHRlYW0oZmlsdGVyOiAkZmlsdGVyKSB7XFxuICAgICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgICAuLi5Qcm9qZWN0UGFnZUNvbGxhYm9yYXRvcnNfV29ya3NwYWNlQ29sbGFib3JhdG9yXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VDb2xsYWJvcmF0b3JzX1dvcmtzcGFjZUNvbGxhYm9yYXRvciBvbiBXb3Jrc3BhY2VDb2xsYWJvcmF0b3Ige1xcbiAgICBpZFxcbiAgICB1c2VyIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgICBhdmF0YXJcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZUNvbGxhYm9yYXRvcnNfV29ya3NwYWNlQ29sbGFib3JhdG9yIG9uIFdvcmtzcGFjZUNvbGxhYm9yYXRvciB7XFxuICAgIGlkXFxuICAgIHVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICAgIGF2YXRhclxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IEludml0YWJsZUNvbGxhYm9yYXRvcnMoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJGZpbHRlcjogSW52aXRhYmxlQ29sbGFib3JhdG9yc0ZpbHRlclxcbiAgICAkbGltaXQ6IEludCFcXG4gICAgJHdvcmtzcGFjZUlkOiBTdHJpbmdcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaW52aXRhYmxlQ29sbGFib3JhdG9ycyhmaWx0ZXI6ICRmaWx0ZXIsIGxpbWl0OiAkbGltaXQpIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgdXNlciB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICBhdmF0YXJcXG4gICAgICAgICAgICBuYW1lXFxuICAgICAgICAgICAgd29ya3NwYWNlUm9sZSh3b3Jrc3BhY2VJZDogJHdvcmtzcGFjZUlkKVxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IEludml0YWJsZUNvbGxhYm9yYXRvcnMoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJGZpbHRlcjogSW52aXRhYmxlQ29sbGFib3JhdG9yc0ZpbHRlclxcbiAgICAkbGltaXQ6IEludCFcXG4gICAgJHdvcmtzcGFjZUlkOiBTdHJpbmdcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaW52aXRhYmxlQ29sbGFib3JhdG9ycyhmaWx0ZXI6ICRmaWx0ZXIsIGxpbWl0OiAkbGltaXQpIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgdXNlciB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICBhdmF0YXJcXG4gICAgICAgICAgICBuYW1lXFxuICAgICAgICAgICAgd29ya3NwYWNlUm9sZSh3b3Jrc3BhY2VJZDogJHdvcmtzcGFjZUlkKVxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByb2plY3REaXNjdXNzaW9uc1BhZ2VIZWFkZXJfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBQcm9qZWN0RGlzY3Vzc2lvbnNQYWdlSGVhZGVyX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdERpc2N1c3Npb25zUGFnZVJlc3VsdHNfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdERpc2N1c3Npb25zUGFnZVJlc3VsdHNfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VNb2RlbHNBY3Rpb25zIG9uIE1vZGVsIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuVXBkYXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuRGVsZXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuQ3JlYXRlVmVyc2lvbiB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIGFjY1N5bmNJdGVtIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLlByb2plY3RQYWdlTW9kZWxzQWN0aW9uc19BY2NTeW5jSXRlbVxcbiAgICB9XFxuICAgIC4uLlVzZUNvcHlNb2RlbExpbmtfTW9kZWxcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VNb2RlbHNBY3Rpb25zIG9uIE1vZGVsIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuVXBkYXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuRGVsZXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuQ3JlYXRlVmVyc2lvbiB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIGFjY1N5bmNJdGVtIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLlByb2plY3RQYWdlTW9kZWxzQWN0aW9uc19BY2NTeW5jSXRlbVxcbiAgICB9XFxuICAgIC4uLlVzZUNvcHlNb2RlbExpbmtfTW9kZWxcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VNb2RlbHNBY3Rpb25zX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICBzbHVnXFxuICAgIH1cXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhblJlYWRBY2NJbnRlZ3JhdGlvblNldHRpbmdzIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uUHJvamVjdHNNb2RlbFBhZ2VFbWJlZF9Qcm9qZWN0XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlTW9kZWxzQWN0aW9uc19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgc2x1Z1xcbiAgICB9XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5SZWFkQWNjSW50ZWdyYXRpb25TZXR0aW5ncyB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIC4uLlByb2plY3RzTW9kZWxQYWdlRW1iZWRfUHJvamVjdFxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZU1vZGVsc0FjdGlvbnNfQWNjU3luY0l0ZW0gb24gQWNjU3luY0l0ZW0ge1xcbiAgICBpZFxcbiAgICBhY2NGaWxlTmFtZVxcbiAgICBzdGF0dXNcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VNb2RlbHNBY3Rpb25zX0FjY1N5bmNJdGVtIG9uIEFjY1N5bmNJdGVtIHtcXG4gICAgaWRcXG4gICAgYWNjRmlsZU5hbWVcXG4gICAgc3RhdHVzXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlTW9kZWxzQ2FyZFByb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHJvbGVcXG4gICAgdmlzaWJpbGl0eVxcbiAgICAuLi5Qcm9qZWN0UGFnZU1vZGVsc0FjdGlvbnNfUHJvamVjdFxcbiAgICAuLi5Qcm9qZWN0Q2FyZEltcG9ydEZpbGVBcmVhX1Byb2plY3RcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkNyZWF0ZU1vZGVsIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VNb2RlbHNDYXJkUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgcm9sZVxcbiAgICB2aXNpYmlsaXR5XFxuICAgIC4uLlByb2plY3RQYWdlTW9kZWxzQWN0aW9uc19Qcm9qZWN0XFxuICAgIC4uLlByb2plY3RDYXJkSW1wb3J0RmlsZUFyZWFfUHJvamVjdFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQ3JlYXRlTW9kZWwge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZU1vZGVsc0NhcmRfTW9kZWwgb24gTW9kZWwge1xcbiAgICBpZFxcbiAgICBob21lVmlldyB7XFxuICAgICAgaWRcXG4gICAgICByZXNvdXJjZUlkc1xcbiAgICB9XFxuICAgIGxhc3RVcGxvYWQ6IHVwbG9hZHMoaW5wdXQ6IHsgbGltaXQ6IDEsIGN1cnNvcjogbnVsbCB9KSB7XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHVwZGF0ZWRBdFxcbiAgICAgICAgY29udmVydGVkU3RhdHVzXFxuICAgICAgfVxcbiAgICB9XFxuICAgIGxhc3RWZXJzaW9uOiB2ZXJzaW9ucyhsaW1pdDogMSwgY3Vyc29yOiBudWxsKSB7XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGNyZWF0ZWRBdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZU1vZGVsc0NhcmRfTW9kZWwgb24gTW9kZWwge1xcbiAgICBpZFxcbiAgICBob21lVmlldyB7XFxuICAgICAgaWRcXG4gICAgICByZXNvdXJjZUlkc1xcbiAgICB9XFxuICAgIGxhc3RVcGxvYWQ6IHVwbG9hZHMoaW5wdXQ6IHsgbGltaXQ6IDEsIGN1cnNvcjogbnVsbCB9KSB7XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHVwZGF0ZWRBdFxcbiAgICAgICAgY29udmVydGVkU3RhdHVzXFxuICAgICAgfVxcbiAgICB9XFxuICAgIGxhc3RWZXJzaW9uOiB2ZXJzaW9ucyhsaW1pdDogMSwgY3Vyc29yOiBudWxsKSB7XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGNyZWF0ZWRBdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBQcm9qZWN0TW9kZWxzUGFnZUhlYWRlcl9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHNvdXJjZUFwcHNcXG4gICAgcm9sZVxcbiAgICBtb2RlbHMge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgfVxcbiAgICB0ZWFtIHtcXG4gICAgICBpZFxcbiAgICAgIHVzZXIge1xcbiAgICAgICAgLi4uRm9ybVVzZXJzU2VsZWN0SXRlbVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgcm9sZVxcbiAgICAgIHNsdWdcXG4gICAgICBuYW1lXFxuICAgICAgcmVhZE9ubHlcXG4gICAgICBwbGFuIHtcXG4gICAgICAgIG5hbWVcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkNyZWF0ZU1vZGVsIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuUmVhZEFjY0ludGVncmF0aW9uU2V0dGluZ3Mge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5Qcm9qZWN0TW9kZWxzQWRkX1Byb2plY3RcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdE1vZGVsc1BhZ2VIZWFkZXJfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBzb3VyY2VBcHBzXFxuICAgIHJvbGVcXG4gICAgbW9kZWxzIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgdGVhbSB7XFxuICAgICAgaWRcXG4gICAgICB1c2VyIHtcXG4gICAgICAgIC4uLkZvcm1Vc2Vyc1NlbGVjdEl0ZW1cXG4gICAgICB9XFxuICAgIH1cXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIHJvbGVcXG4gICAgICBzbHVnXFxuICAgICAgbmFtZVxcbiAgICAgIHJlYWRPbmx5XFxuICAgICAgcGxhbiB7XFxuICAgICAgICBuYW1lXFxuICAgICAgfVxcbiAgICB9XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVNb2RlbCB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhblJlYWRBY2NJbnRlZ3JhdGlvblNldHRpbmdzIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uUHJvamVjdE1vZGVsc0FkZF9Qcm9qZWN0XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByb2plY3RNb2RlbHNQYWdlUmVzdWx0c19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICAuLi5Qcm9qZWN0UGFnZUxhdGVzdEl0ZW1zTW9kZWxzXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFByb2plY3RNb2RlbHNQYWdlUmVzdWx0c19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICAuLi5Qcm9qZWN0UGFnZUxhdGVzdEl0ZW1zTW9kZWxzXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlTW9kZWxzU3RydWN0dXJlSXRlbV9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICAuLi5Qcm9qZWN0UGFnZU1vZGVsc0FjdGlvbnNfUHJvamVjdFxcbiAgICAuLi5Qcm9qZWN0Q2FyZEltcG9ydEZpbGVBcmVhX1Byb2plY3RcXG4gICAgLi4uVXNlQ2FuQ3JlYXRlTW9kZWxfUHJvamVjdFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQ3JlYXRlTW9kZWwge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZU1vZGVsc1N0cnVjdHVyZUl0ZW1fUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgLi4uUHJvamVjdFBhZ2VNb2RlbHNBY3Rpb25zX1Byb2plY3RcXG4gICAgLi4uUHJvamVjdENhcmRJbXBvcnRGaWxlQXJlYV9Qcm9qZWN0XFxuICAgIC4uLlVzZUNhbkNyZWF0ZU1vZGVsX1Byb2plY3RcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkNyZWF0ZU1vZGVsIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgU2luZ2xlTGV2ZWxNb2RlbFRyZWVJdGVtIG9uIE1vZGVsc1RyZWVJdGVtIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBmdWxsTmFtZVxcbiAgICBtb2RlbCB7XFxuICAgICAgLi4uUHJvamVjdFBhZ2VMYXRlc3RJdGVtc01vZGVsSXRlbVxcbiAgICAgIC4uLlByb2plY3RDYXJkSW1wb3J0RmlsZUFyZWFfTW9kZWxcXG4gICAgICAuLi5Qcm9qZWN0UGFnZU1vZGVsc0NhcmRfTW9kZWxcXG4gICAgICBhY2NTeW5jSXRlbSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgLi4uU3luY1N0YXR1c01vZGVsSXRlbV9BY2NTeW5jSXRlbVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICBoYXNDaGlsZHJlblxcbiAgICB1cGRhdGVkQXRcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgU2luZ2xlTGV2ZWxNb2RlbFRyZWVJdGVtIG9uIE1vZGVsc1RyZWVJdGVtIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBmdWxsTmFtZVxcbiAgICBtb2RlbCB7XFxuICAgICAgLi4uUHJvamVjdFBhZ2VMYXRlc3RJdGVtc01vZGVsSXRlbVxcbiAgICAgIC4uLlByb2plY3RDYXJkSW1wb3J0RmlsZUFyZWFfTW9kZWxcXG4gICAgICAuLi5Qcm9qZWN0UGFnZU1vZGVsc0NhcmRfTW9kZWxcXG4gICAgICBhY2NTeW5jSXRlbSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgLi4uU3luY1N0YXR1c01vZGVsSXRlbV9BY2NTeW5jSXRlbVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICBoYXNDaGlsZHJlblxcbiAgICB1cGRhdGVkQXRcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VNb2RlbHNVcGxvYWRzRGlhbG9nX0ZpbGVVcGxvYWQgb24gRmlsZVVwbG9hZCB7XFxuICAgIGlkXFxuICAgIGNvbnZlcnRlZFN0YXR1c1xcbiAgICBjb252ZXJ0ZWRNZXNzYWdlXFxuICAgIGZpbGVOYW1lXFxuICAgIGZpbGVTaXplXFxuICAgIGNvbnZlcnRlZExhc3RVcGRhdGVcXG4gICAgY29udmVydGVkVmVyc2lvbklkXFxuICAgIHVwbG9hZERhdGVcXG4gICAgdXBsb2FkQ29tcGxldGVcXG4gICAgYnJhbmNoTmFtZVxcbiAgICAuLi5Vc2VGYWlsZWRGaWxlSW1wb3J0Sm9iVXRpbHNfRmlsZVVwbG9hZFxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZU1vZGVsc1VwbG9hZHNEaWFsb2dfRmlsZVVwbG9hZCBvbiBGaWxlVXBsb2FkIHtcXG4gICAgaWRcXG4gICAgY29udmVydGVkU3RhdHVzXFxuICAgIGNvbnZlcnRlZE1lc3NhZ2VcXG4gICAgZmlsZU5hbWVcXG4gICAgZmlsZVNpemVcXG4gICAgY29udmVydGVkTGFzdFVwZGF0ZVxcbiAgICBjb252ZXJ0ZWRWZXJzaW9uSWRcXG4gICAgdXBsb2FkRGF0ZVxcbiAgICB1cGxvYWRDb21wbGV0ZVxcbiAgICBicmFuY2hOYW1lXFxuICAgIC4uLlVzZUZhaWxlZEZpbGVJbXBvcnRKb2JVdGlsc19GaWxlVXBsb2FkXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IEdldE1vZGVsVXBsb2FkcyhcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkbW9kZWxJZDogU3RyaW5nIVxcbiAgICAkaW5wdXQ6IEdldE1vZGVsVXBsb2Fkc0lucHV0IVxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIG1vZGVsKGlkOiAkbW9kZWxJZCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHVwbG9hZHMoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICAgIGN1cnNvclxcbiAgICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICAuLi5Qcm9qZWN0UGFnZU1vZGVsc1VwbG9hZHNEaWFsb2dfRmlsZVVwbG9hZFxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IEdldE1vZGVsVXBsb2FkcyhcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkbW9kZWxJZDogU3RyaW5nIVxcbiAgICAkaW5wdXQ6IEdldE1vZGVsVXBsb2Fkc0lucHV0IVxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIG1vZGVsKGlkOiAkbW9kZWxJZCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHVwbG9hZHMoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICAgIGN1cnNvclxcbiAgICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICAuLi5Qcm9qZWN0UGFnZU1vZGVsc1VwbG9hZHNEaWFsb2dfRmlsZVVwbG9hZFxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlTW9kZWxzQ2FyZERlbGV0ZURpYWxvZyBvbiBNb2RlbCB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VNb2RlbHNDYXJkRGVsZXRlRGlhbG9nIG9uIE1vZGVsIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZU1vZGVsc0NhcmRSZW5hbWVEaWFsb2cgb24gTW9kZWwge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGRlc2NyaXB0aW9uXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlTW9kZWxzQ2FyZFJlbmFtZURpYWxvZyBvbiBNb2RlbCB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgZGVzY3JpcHRpb25cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VNb2RlbFJlbW92ZVN5bmNEaWFsb2dfQWNjU3luY0l0ZW0gb24gQWNjU3luY0l0ZW0ge1xcbiAgICBpZFxcbiAgICBhY2NGaWxlTmFtZVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZU1vZGVsUmVtb3ZlU3luY0RpYWxvZ19BY2NTeW5jSXRlbSBvbiBBY2NTeW5jSXRlbSB7XFxuICAgIGlkXFxuICAgIGFjY0ZpbGVOYW1lXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlU2V0dGluZ3NJbnRlZ3JhdGlvbnNfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhblJlYWRBY2NJbnRlZ3JhdGlvblNldHRpbmdzIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VTZXR0aW5nc0ludGVncmF0aW9uc19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuUmVhZEFjY0ludGVncmF0aW9uU2V0dGluZ3Mge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBQcm9qZWN0UGFnZVNldHRpbmdzR2VuZXJhbCgkcHJvamVjdElkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLlByb2plY3RQYWdlU2V0dGluZ3NHZW5lcmFsQmxvY2tQcm9qZWN0SW5mb19Qcm9qZWN0XFxuICAgICAgLi4uUHJvamVjdFBhZ2VTZXR0aW5nc0dlbmVyYWxCbG9ja0FjY2Vzc19Qcm9qZWN0XFxuICAgICAgLi4uUHJvamVjdFBhZ2VTZXR0aW5nc0dlbmVyYWxCbG9ja0Rpc2N1c3Npb25zX1Byb2plY3RcXG4gICAgICAuLi5Qcm9qZWN0UGFnZVNldHRpbmdzR2VuZXJhbEJsb2NrTGVhdmVfUHJvamVjdFxcbiAgICAgIC4uLlByb2plY3RQYWdlU2V0dGluZ3NHZW5lcmFsQmxvY2tEZWxldGVfUHJvamVjdFxcbiAgICAgIC4uLlByb2plY3RQYWdlVGVhbUludGVybmFsc19Qcm9qZWN0XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgUHJvamVjdFBhZ2VTZXR0aW5nc0dlbmVyYWwoJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5Qcm9qZWN0UGFnZVNldHRpbmdzR2VuZXJhbEJsb2NrUHJvamVjdEluZm9fUHJvamVjdFxcbiAgICAgIC4uLlByb2plY3RQYWdlU2V0dGluZ3NHZW5lcmFsQmxvY2tBY2Nlc3NfUHJvamVjdFxcbiAgICAgIC4uLlByb2plY3RQYWdlU2V0dGluZ3NHZW5lcmFsQmxvY2tEaXNjdXNzaW9uc19Qcm9qZWN0XFxuICAgICAgLi4uUHJvamVjdFBhZ2VTZXR0aW5nc0dlbmVyYWxCbG9ja0xlYXZlX1Byb2plY3RcXG4gICAgICAuLi5Qcm9qZWN0UGFnZVNldHRpbmdzR2VuZXJhbEJsb2NrRGVsZXRlX1Byb2plY3RcXG4gICAgICAuLi5Qcm9qZWN0UGFnZVRlYW1JbnRlcm5hbHNfUHJvamVjdFxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlU2V0dGluZ3NHZW5lcmFsQmxvY2tBY2Nlc3NfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgdmlzaWJpbGl0eVxcbiAgICB3b3Jrc3BhY2VJZFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuVXBkYXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VTZXR0aW5nc0dlbmVyYWxCbG9ja0FjY2Vzc19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICB2aXNpYmlsaXR5XFxuICAgIHdvcmtzcGFjZUlkXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5VcGRhdGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZVNldHRpbmdzR2VuZXJhbEJsb2NrRGVsZXRlX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIC4uLlByb2plY3RzRGVsZXRlRGlhbG9nX1Byb2plY3RcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhblVwZGF0ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlU2V0dGluZ3NHZW5lcmFsQmxvY2tEZWxldGVfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgLi4uUHJvamVjdHNEZWxldGVEaWFsb2dfUHJvamVjdFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuVXBkYXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VTZXR0aW5nc0dlbmVyYWxCbG9ja0Rpc2N1c3Npb25zX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHZpc2liaWxpdHlcXG4gICAgYWxsb3dQdWJsaWNDb21tZW50c1xcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuVXBkYXRlQWxsb3dQdWJsaWNDb21tZW50cyB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlU2V0dGluZ3NHZW5lcmFsQmxvY2tEaXNjdXNzaW9uc19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICB2aXNpYmlsaXR5XFxuICAgIGFsbG93UHVibGljQ29tbWVudHNcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhblVwZGF0ZUFsbG93UHVibGljQ29tbWVudHMge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZVNldHRpbmdzR2VuZXJhbEJsb2NrTGVhdmVfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICByb2xlXFxuICAgIHRlYW0ge1xcbiAgICAgIHJvbGVcXG4gICAgICB1c2VyIHtcXG4gICAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgICAgICByb2xlXFxuICAgICAgfVxcbiAgICB9XFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuTGVhdmUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZVNldHRpbmdzR2VuZXJhbEJsb2NrTGVhdmVfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICByb2xlXFxuICAgIHRlYW0ge1xcbiAgICAgIHJvbGVcXG4gICAgICB1c2VyIHtcXG4gICAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgICAgICByb2xlXFxuICAgICAgfVxcbiAgICB9XFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuTGVhdmUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZVNldHRpbmdzR2VuZXJhbEJsb2NrUHJvamVjdEluZm9fUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBkZXNjcmlwdGlvblxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuVXBkYXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VTZXR0aW5nc0dlbmVyYWxCbG9ja1Byb2plY3RJbmZvX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgZGVzY3JpcHRpb25cXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhblVwZGF0ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlU2V0dGluZ3NUb2tlbnNfRW1iZWRUb2tlbiBvbiBFbWJlZFRva2VuIHtcXG4gICAgY3JlYXRlZEF0XFxuICAgIGxhc3RVc2VkXFxuICAgIHRva2VuSWRcXG4gICAgcmVzb3VyY2VJZFN0cmluZ1xcbiAgICB1c2VyIHtcXG4gICAgICBpZFxcbiAgICAgIGF2YXRhclxcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZVNldHRpbmdzVG9rZW5zX0VtYmVkVG9rZW4gb24gRW1iZWRUb2tlbiB7XFxuICAgIGNyZWF0ZWRBdFxcbiAgICBsYXN0VXNlZFxcbiAgICB0b2tlbklkXFxuICAgIHJlc291cmNlSWRTdHJpbmdcXG4gICAgdXNlciB7XFxuICAgICAgaWRcXG4gICAgICBhdmF0YXJcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VTZXR0aW5nc1Rva2Vuc19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5SZWFkRW1iZWRUb2tlbnMge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5SZXZva2VFbWJlZFRva2VucyB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIGVtYmVkVG9rZW5zKGN1cnNvcjogJGN1cnNvciwgbGltaXQ6IDIwKSB7XFxuICAgICAgY3Vyc29yXFxuICAgICAgdG90YWxDb3VudFxcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIC4uLlByb2plY3RQYWdlU2V0dGluZ3NUb2tlbnNfRW1iZWRUb2tlblxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZVNldHRpbmdzVG9rZW5zX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhblJlYWRFbWJlZFRva2VucyB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhblJldm9rZUVtYmVkVG9rZW5zIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgZW1iZWRUb2tlbnMoY3Vyc29yOiAkY3Vyc29yLCBsaW1pdDogMjApIHtcXG4gICAgICBjdXJzb3JcXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgLi4uUHJvamVjdFBhZ2VTZXR0aW5nc1Rva2Vuc19FbWJlZFRva2VuXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlU2V0dGluZ3NXZWJob29rc19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuVXBkYXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VTZXR0aW5nc1dlYmhvb2tzX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5VcGRhdGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBQcm9qZWN0c1BhZ2VUZWFtRGlhbG9nTWFuYWdlUGVybWlzc2lvbnNfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgdmlzaWJpbGl0eVxcbiAgICByb2xlXFxuICAgIHdvcmtzcGFjZUlkXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFByb2plY3RzUGFnZVRlYW1EaWFsb2dNYW5hZ2VQZXJtaXNzaW9uc19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICB2aXNpYmlsaXR5XFxuICAgIHJvbGVcXG4gICAgd29ya3NwYWNlSWRcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdHNBZGRfVXNlciBvbiBVc2VyIHtcXG4gICAgaWRcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkNyZWF0ZVBlcnNvbmFsUHJvamVjdCB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIC4uLlVzZUNhbkNyZWF0ZVBlcnNvbmFsUHJvamVjdF9Vc2VyXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFByb2plY3RzQWRkX1VzZXIgb24gVXNlciB7XFxuICAgIGlkXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVQZXJzb25hbFByb2plY3Qge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5Vc2VDYW5DcmVhdGVQZXJzb25hbFByb2plY3RfVXNlclxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBQcm9qZWN0c0FkZF9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgc2x1Z1xcbiAgICBuYW1lXFxuICAgIHJvbGVcXG4gICAgcGxhbiB7XFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVQcm9qZWN0IHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uVXNlQ2FuQ3JlYXRlV29ya3NwYWNlUHJvamVjdF9Xb3Jrc3BhY2VcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdHNBZGRfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHNsdWdcXG4gICAgbmFtZVxcbiAgICByb2xlXFxuICAgIHBsYW4ge1xcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQ3JlYXRlUHJvamVjdCB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIC4uLlVzZUNhbkNyZWF0ZVdvcmtzcGFjZVByb2plY3RfV29ya3NwYWNlXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByb2plY3RzRGFzaGJvYXJkX1VzZXJQcm9qZWN0Q29sbGVjdGlvbiBvbiBVc2VyUHJvamVjdENvbGxlY3Rpb24ge1xcbiAgICBudW1iZXJPZkhpZGRlblxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBQcm9qZWN0c0Rhc2hib2FyZF9Vc2VyUHJvamVjdENvbGxlY3Rpb24gb24gVXNlclByb2plY3RDb2xsZWN0aW9uIHtcXG4gICAgbnVtYmVyT2ZIaWRkZW5cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdHNEYXNoYm9hcmRfVXNlciBvbiBVc2VyIHtcXG4gICAgLi4uUHJvamVjdHNBZGRfVXNlclxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQ3JlYXRlUGVyc29uYWxQcm9qZWN0IHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdHNEYXNoYm9hcmRfVXNlciBvbiBVc2VyIHtcXG4gICAgLi4uUHJvamVjdHNBZGRfVXNlclxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQ3JlYXRlUGVyc29uYWxQcm9qZWN0IHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdHNEYXNoYm9hcmRGaWxsZWRQcm9qZWN0IG9uIFByb2plY3RDb2xsZWN0aW9uIHtcXG4gICAgaXRlbXMge1xcbiAgICAgIC4uLlByb2plY3REYXNoYm9hcmRJdGVtXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdHNEYXNoYm9hcmRGaWxsZWRQcm9qZWN0IG9uIFByb2plY3RDb2xsZWN0aW9uIHtcXG4gICAgaXRlbXMge1xcbiAgICAgIC4uLlByb2plY3REYXNoYm9hcmRJdGVtXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdHNEYXNoYm9hcmRGaWxsZWRVc2VyIG9uIFVzZXJQcm9qZWN0Q29sbGVjdGlvbiB7XFxuICAgIGl0ZW1zIHtcXG4gICAgICAuLi5Qcm9qZWN0RGFzaGJvYXJkSXRlbVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFByb2plY3RzRGFzaGJvYXJkRmlsbGVkVXNlciBvbiBVc2VyUHJvamVjdENvbGxlY3Rpb24ge1xcbiAgICBpdGVtcyB7XFxuICAgICAgLi4uUHJvamVjdERhc2hib2FyZEl0ZW1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBQcm9qZWN0c0RlbGV0ZURpYWxvZ19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHJvbGVcXG4gICAgbW9kZWxzKGxpbWl0OiAwKSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgc2x1Z1xcbiAgICAgIGlkXFxuICAgIH1cXG4gICAgdmVyc2lvbnMobGltaXQ6IDApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkRlbGV0ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFByb2plY3RzRGVsZXRlRGlhbG9nX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgcm9sZVxcbiAgICBtb2RlbHMobGltaXQ6IDApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBzbHVnXFxuICAgICAgaWRcXG4gICAgfVxcbiAgICB2ZXJzaW9ucyhsaW1pdDogMCkge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuRGVsZXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdHNIaWRkZW5Qcm9qZWN0V2FybmluZ19Vc2VyIG9uIFVzZXIge1xcbiAgICBpZFxcbiAgICBleHBpcmVkU3NvU2Vzc2lvbnMge1xcbiAgICAgIGlkXFxuICAgICAgc2x1Z1xcbiAgICAgIG5hbWVcXG4gICAgICBsb2dvXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdHNIaWRkZW5Qcm9qZWN0V2FybmluZ19Vc2VyIG9uIFVzZXIge1xcbiAgICBpZFxcbiAgICBleHBpcmVkU3NvU2Vzc2lvbnMge1xcbiAgICAgIGlkXFxuICAgICAgc2x1Z1xcbiAgICAgIG5hbWVcXG4gICAgICBsb2dvXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdHNXb3Jrc3BhY2VTZWxlY3RfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHJvbGVcXG4gICAgbmFtZVxcbiAgICBsb2dvXFxuICAgIHJlYWRPbmx5XFxuICAgIHNsdWdcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdHNXb3Jrc3BhY2VTZWxlY3RfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHJvbGVcXG4gICAgbmFtZVxcbiAgICBsb2dvXFxuICAgIHJlYWRPbmx5XFxuICAgIHNsdWdcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdHNJbnZpdGVCYW5uZXIgb24gUGVuZGluZ1N0cmVhbUNvbGxhYm9yYXRvciB7XFxuICAgIGlkXFxuICAgIGludml0ZWRCeSB7XFxuICAgICAgLi4uTGltaXRlZFVzZXJBdmF0YXJcXG4gICAgfVxcbiAgICBwcm9qZWN0SWRcXG4gICAgcHJvamVjdE5hbWVcXG4gICAgdG9rZW5cXG4gICAgdXNlciB7XFxuICAgICAgaWRcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBQcm9qZWN0c0ludml0ZUJhbm5lciBvbiBQZW5kaW5nU3RyZWFtQ29sbGFib3JhdG9yIHtcXG4gICAgaWRcXG4gICAgaW52aXRlZEJ5IHtcXG4gICAgICAuLi5MaW1pdGVkVXNlckF2YXRhclxcbiAgICB9XFxuICAgIHByb2plY3RJZFxcbiAgICBwcm9qZWN0TmFtZVxcbiAgICB0b2tlblxcbiAgICB1c2VyIHtcXG4gICAgICBpZFxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzU2lkZWJhcl9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgLi4uU2V0dGluZ3NNZW51X1dvcmtzcGFjZVxcbiAgICBpZFxcbiAgICBzbHVnXFxuICAgIHJvbGVcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NTaWRlYmFyX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICAuLi5TZXR0aW5nc01lbnVfV29ya3NwYWNlXFxuICAgIGlkXFxuICAgIHNsdWdcXG4gICAgcm9sZVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1NlcnZlclJlZ2lvbnNBZGRFZGl0RGlhbG9nX1NlcnZlclJlZ2lvbkl0ZW0gb24gU2VydmVyUmVnaW9uSXRlbSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgZGVzY3JpcHRpb25cXG4gICAga2V5XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzU2VydmVyUmVnaW9uc0FkZEVkaXREaWFsb2dfU2VydmVyUmVnaW9uSXRlbSBvbiBTZXJ2ZXJSZWdpb25JdGVtIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBkZXNjcmlwdGlvblxcbiAgICBrZXlcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NTZXJ2ZXJSZWdpb25zVGFibGVfU2VydmVyUmVnaW9uSXRlbSBvbiBTZXJ2ZXJSZWdpb25JdGVtIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBrZXlcXG4gICAgZGVzY3JpcHRpb25cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NTZXJ2ZXJSZWdpb25zVGFibGVfU2VydmVyUmVnaW9uSXRlbSBvbiBTZXJ2ZXJSZWdpb25JdGVtIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBrZXlcXG4gICAgZGVzY3JpcHRpb25cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NTaGFyZWRQcm9qZWN0c19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICAuLi5Qcm9qZWN0c0RlbGV0ZURpYWxvZ19Qcm9qZWN0XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgdmlzaWJpbGl0eVxcbiAgICBjcmVhdGVkQXRcXG4gICAgdXBkYXRlZEF0XFxuICAgIG1vZGVscyhsaW1pdDogMCkge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgfVxcbiAgICB2ZXJzaW9ucyhsaW1pdDogMCkge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgfVxcbiAgICB0ZWFtIHtcXG4gICAgICBpZFxcbiAgICAgIHVzZXIge1xcbiAgICAgICAgbmFtZVxcbiAgICAgICAgaWRcXG4gICAgICAgIGF2YXRhclxcbiAgICAgIH1cXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuRGVsZXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuUmVhZFNldHRpbmdzIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuUmVhZCB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzU2hhcmVkUHJvamVjdHNfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgLi4uUHJvamVjdHNEZWxldGVEaWFsb2dfUHJvamVjdFxcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHZpc2liaWxpdHlcXG4gICAgY3JlYXRlZEF0XFxuICAgIHVwZGF0ZWRBdFxcbiAgICBtb2RlbHMobGltaXQ6IDApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgdmVyc2lvbnMobGltaXQ6IDApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgdGVhbSB7XFxuICAgICAgaWRcXG4gICAgICB1c2VyIHtcXG4gICAgICAgIG5hbWVcXG4gICAgICAgIGlkXFxuICAgICAgICBhdmF0YXJcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkRlbGV0ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhblJlYWRTZXR0aW5ncyB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhblJlYWQge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1NoYXJlZFByb2plY3RzX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICAuLi5Qcm9qZWN0c0FkZF9Xb3Jrc3BhY2VcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NTaGFyZWRQcm9qZWN0c19Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgLi4uUHJvamVjdHNBZGRfV29ya3NwYWNlXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzVXNlclByb2ZpbGVDaGFuZ2VQYXNzd29yZF9Vc2VyIG9uIFVzZXIge1xcbiAgICBpZFxcbiAgICBlbWFpbFxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBTZXR0aW5nc1VzZXJQcm9maWxlQ2hhbmdlUGFzc3dvcmRfVXNlciBvbiBVc2VyIHtcXG4gICAgaWRcXG4gICAgZW1haWxcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NVc2VyUHJvZmlsZURlbGV0ZUFjY291bnRfVXNlciBvbiBVc2VyIHtcXG4gICAgaWRcXG4gICAgZW1haWxcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NVc2VyUHJvZmlsZURlbGV0ZUFjY291bnRfVXNlciBvbiBVc2VyIHtcXG4gICAgaWRcXG4gICAgZW1haWxcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NVc2VyUHJvZmlsZURldGFpbHNfVXNlciBvbiBVc2VyIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBjb21wYW55XFxuICAgIC4uLlVzZXJQcm9maWxlRWRpdERpYWxvZ0F2YXRhcl9Vc2VyXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzVXNlclByb2ZpbGVEZXRhaWxzX1VzZXIgb24gVXNlciB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgY29tcGFueVxcbiAgICAuLi5Vc2VyUHJvZmlsZUVkaXREaWFsb2dBdmF0YXJfVXNlclxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBVc2VyUHJvZmlsZUVkaXREaWFsb2dBdmF0YXJfVXNlciBvbiBVc2VyIHtcXG4gICAgaWRcXG4gICAgYXZhdGFyXFxuICAgIC4uLkFjdGl2ZVVzZXJBdmF0YXJcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgVXNlclByb2ZpbGVFZGl0RGlhbG9nQXZhdGFyX1VzZXIgb24gVXNlciB7XFxuICAgIGlkXFxuICAgIGF2YXRhclxcbiAgICAuLi5BY3RpdmVVc2VyQXZhdGFyXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlR2VuZXJhbERlbGV0ZURpYWxvZ19Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZUdlbmVyYWxEZWxldGVEaWFsb2dfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzR2VuZXJhbEVkaXRBdmF0YXJfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIGxvZ29cXG4gICAgbmFtZVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNHZW5lcmFsRWRpdEF2YXRhcl9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgbG9nb1xcbiAgICBuYW1lXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc0dlbmVyYWxFZGl0U2x1Z0RpYWxvZ19Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBzbHVnXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc0dlbmVyYWxFZGl0U2x1Z0RpYWxvZ19Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBzbHVnXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc0F1dG9tYXRpb25GdW5jdGlvbnNfQXV0b21hdGVGdW5jdGlvbiBvbiBBdXRvbWF0ZUZ1bmN0aW9uIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBsb2dvXFxuICAgIGNyZWF0b3Ige1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICAgIGF2YXRhclxcbiAgICB9XFxuICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc0F1dG9tYXRpb25UYWJsZVJvd0FjdGlvbnNfQXV0b21hdGVGdW5jdGlvblxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNBdXRvbWF0aW9uRnVuY3Rpb25zX0F1dG9tYXRlRnVuY3Rpb24gb24gQXV0b21hdGVGdW5jdGlvbiB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgbG9nb1xcbiAgICBjcmVhdG9yIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgICBhdmF0YXJcXG4gICAgfVxcbiAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNBdXRvbWF0aW9uVGFibGVSb3dBY3Rpb25zX0F1dG9tYXRlRnVuY3Rpb25cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzQXV0b21hdGlvblJlZ2VuZXJhdGVUb2tlbkRpYWxvZ19BdXRvbWF0ZUZ1bmN0aW9uIG9uIEF1dG9tYXRlRnVuY3Rpb24ge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc0F1dG9tYXRpb25SZWdlbmVyYXRlVG9rZW5EaWFsb2dfQXV0b21hdGVGdW5jdGlvbiBvbiBBdXRvbWF0ZUZ1bmN0aW9uIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNBdXRvbWF0aW9uVGFibGVSb3dBY3Rpb25zX0F1dG9tYXRlRnVuY3Rpb24gb24gQXV0b21hdGVGdW5jdGlvbiB7XFxuICAgIGlkXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNBdXRvbWF0aW9uVGFibGVSb3dBY3Rpb25zX0F1dG9tYXRlRnVuY3Rpb25QZXJtaXNzaW9uQ2hlY2tzXFxuICAgIH1cXG4gICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzQXV0b21hdGlvblJlZ2VuZXJhdGVUb2tlbkRpYWxvZ19BdXRvbWF0ZUZ1bmN0aW9uXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc0F1dG9tYXRpb25UYWJsZVJvd0FjdGlvbnNfQXV0b21hdGVGdW5jdGlvbiBvbiBBdXRvbWF0ZUZ1bmN0aW9uIHtcXG4gICAgaWRcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc0F1dG9tYXRpb25UYWJsZVJvd0FjdGlvbnNfQXV0b21hdGVGdW5jdGlvblBlcm1pc3Npb25DaGVja3NcXG4gICAgfVxcbiAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNBdXRvbWF0aW9uUmVnZW5lcmF0ZVRva2VuRGlhbG9nX0F1dG9tYXRlRnVuY3Rpb25cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzQXV0b21hdGlvblRhYmxlUm93QWN0aW9uc19BdXRvbWF0ZUZ1bmN0aW9uUGVybWlzc2lvbkNoZWNrcyBvbiBBdXRvbWF0ZUZ1bmN0aW9uUGVybWlzc2lvbkNoZWNrcyB7XFxuICAgIGNhblJlZ2VuZXJhdGVUb2tlbiB7XFxuICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc0F1dG9tYXRpb25UYWJsZVJvd0FjdGlvbnNfQXV0b21hdGVGdW5jdGlvblBlcm1pc3Npb25DaGVja3Mgb24gQXV0b21hdGVGdW5jdGlvblBlcm1pc3Npb25DaGVja3Mge1xcbiAgICBjYW5SZWdlbmVyYXRlVG9rZW4ge1xcbiAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VCaWxsaW5nUGFnZV9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgcm9sZVxcbiAgICBzdWJzY3JpcHRpb24ge1xcbiAgICAgIGN1cnJlbmN5XFxuICAgICAgYmlsbGluZ0ludGVydmFsXFxuICAgIH1cXG4gICAgcGxhbiB7XFxuICAgICAgbmFtZVxcbiAgICAgIHVzYWdlIHtcXG4gICAgICAgIHByb2plY3RDb3VudFxcbiAgICAgICAgbW9kZWxDb3VudFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5CaWxsaW5nQWxlcnRfV29ya3NwYWNlXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZUJpbGxpbmdQYWdlX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICByb2xlXFxuICAgIHN1YnNjcmlwdGlvbiB7XFxuICAgICAgY3VycmVuY3lcXG4gICAgICBiaWxsaW5nSW50ZXJ2YWxcXG4gICAgfVxcbiAgICBwbGFuIHtcXG4gICAgICBuYW1lXFxuICAgICAgdXNhZ2Uge1xcbiAgICAgICAgcHJvamVjdENvdW50XFxuICAgICAgICBtb2RlbENvdW50XFxuICAgICAgfVxcbiAgICB9XFxuICAgIC4uLkJpbGxpbmdBbGVydF9Xb3Jrc3BhY2VcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc0ludml0ZXNUYWJsZV9QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yIG9uIFBlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3Ige1xcbiAgICBpZFxcbiAgICBpbnZpdGVJZFxcbiAgICByb2xlXFxuICAgIHRpdGxlXFxuICAgIHVwZGF0ZWRBdFxcbiAgICBlbWFpbFxcbiAgICB1c2VyIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgIH1cXG4gICAgaW52aXRlZEJ5IHtcXG4gICAgICBpZFxcbiAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc0ludml0ZXNUYWJsZV9QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yIG9uIFBlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3Ige1xcbiAgICBpZFxcbiAgICBpbnZpdGVJZFxcbiAgICByb2xlXFxuICAgIHRpdGxlXFxuICAgIHVwZGF0ZWRBdFxcbiAgICBlbWFpbFxcbiAgICB1c2VyIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgIH1cXG4gICAgaW52aXRlZEJ5IHtcXG4gICAgICBpZFxcbiAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc0ludml0ZXNUYWJsZV9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc1RhYmxlSGVhZGVyX1dvcmtzcGFjZVxcbiAgICBpbnZpdGVkVGVhbSB7XFxuICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc0ludml0ZXNUYWJsZV9QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc0ludml0ZXNUYWJsZV9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc1RhYmxlSGVhZGVyX1dvcmtzcGFjZVxcbiAgICBpbnZpdGVkVGVhbSB7XFxuICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc0ludml0ZXNUYWJsZV9QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc1JlcXVlc3RzVGFibGVfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNUYWJsZUhlYWRlcl9Xb3Jrc3BhY2VcXG4gICAgaWRcXG4gICAgYWRtaW5Xb3Jrc3BhY2VzSm9pblJlcXVlc3RzIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgLi4uV29ya3NwYWNlSm9pblJlcXVlc3RBcHByb3ZlRGlhbG9nX1dvcmtzcGFjZUpvaW5SZXF1ZXN0XFxuICAgICAgICBpZFxcbiAgICAgICAgY3JlYXRlZEF0XFxuICAgICAgICBzdGF0dXNcXG4gICAgICAgIGVtYWlsXFxuICAgICAgICB1c2VyIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgYXZhdGFyXFxuICAgICAgICAgIG5hbWVcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc1JlcXVlc3RzVGFibGVfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNUYWJsZUhlYWRlcl9Xb3Jrc3BhY2VcXG4gICAgaWRcXG4gICAgYWRtaW5Xb3Jrc3BhY2VzSm9pblJlcXVlc3RzIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgLi4uV29ya3NwYWNlSm9pblJlcXVlc3RBcHByb3ZlRGlhbG9nX1dvcmtzcGFjZUpvaW5SZXF1ZXN0XFxuICAgICAgICBpZFxcbiAgICAgICAgY3JlYXRlZEF0XFxuICAgICAgICBzdGF0dXNcXG4gICAgICAgIGVtYWlsXFxuICAgICAgICB1c2VyIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgYXZhdGFyXFxuICAgICAgICAgIG5hbWVcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc1RhYmxlX1dvcmtzcGFjZUNvbGxhYm9yYXRvciBvbiBXb3Jrc3BhY2VDb2xsYWJvcmF0b3Ige1xcbiAgICBpZFxcbiAgICBlbWFpbFxcbiAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzQWN0aW9uc01lbnVfVXNlclxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzVGFibGVfV29ya3NwYWNlQ29sbGFib3JhdG9yIG9uIFdvcmtzcGFjZUNvbGxhYm9yYXRvciB7XFxuICAgIGlkXFxuICAgIGVtYWlsXFxuICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNBY3Rpb25zTWVudV9Vc2VyXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNUYWJsZUhlYWRlcl9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgc2x1Z1xcbiAgICByb2xlXFxuICAgIC4uLkludml0ZURpYWxvZ1dvcmtzcGFjZV9Xb3Jrc3BhY2VcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkludml0ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNUYWJsZUhlYWRlcl9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgc2x1Z1xcbiAgICByb2xlXFxuICAgIC4uLkludml0ZURpYWxvZ1dvcmtzcGFjZV9Xb3Jrc3BhY2VcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkludml0ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNBY3Rpb25zTWVudV9Vc2VyIG9uIFdvcmtzcGFjZUNvbGxhYm9yYXRvciB7XFxuICAgIGlkXFxuICAgIHJvbGVcXG4gICAgc2VhdFR5cGVcXG4gICAgam9pbkRhdGVcXG4gICAgdXNlciB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgICAgYXZhdGFyXFxuICAgICAgd29ya3NwYWNlRG9tYWluUG9saWN5Q29tcGxpYW50KHdvcmtzcGFjZVNsdWc6ICRzbHVnKVxcbiAgICB9XFxuICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNBY3Rpb25zUHJvamVjdFBlcm1pc3Npb25zRGlhbG9nX1VzZXJcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc0FjdGlvbnNNZW51X1VzZXIgb24gV29ya3NwYWNlQ29sbGFib3JhdG9yIHtcXG4gICAgaWRcXG4gICAgcm9sZVxcbiAgICBzZWF0VHlwZVxcbiAgICBqb2luRGF0ZVxcbiAgICB1c2VyIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgICBhdmF0YXJcXG4gICAgICB3b3Jrc3BhY2VEb21haW5Qb2xpY3lDb21wbGlhbnQod29ya3NwYWNlU2x1ZzogJHNsdWcpXFxuICAgIH1cXG4gICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc0FjdGlvbnNQcm9qZWN0UGVybWlzc2lvbnNEaWFsb2dfVXNlclxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzQWN0aW9uc1Byb2plY3RQZXJtaXNzaW9uc0RpYWxvZ19Vc2VyIG9uIFdvcmtzcGFjZUNvbGxhYm9yYXRvciB7XFxuICAgIHByb2plY3RSb2xlcyB7XFxuICAgICAgcHJvamVjdCB7XFxuICAgICAgICBpZFxcbiAgICAgICAgbmFtZVxcbiAgICAgIH1cXG4gICAgICByb2xlXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc0FjdGlvbnNQcm9qZWN0UGVybWlzc2lvbnNEaWFsb2dfVXNlciBvbiBXb3Jrc3BhY2VDb2xsYWJvcmF0b3Ige1xcbiAgICBwcm9qZWN0Um9sZXMge1xcbiAgICAgIHByb2plY3Qge1xcbiAgICAgICAgaWRcXG4gICAgICAgIG5hbWVcXG4gICAgICB9XFxuICAgICAgcm9sZVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFdvcmtzcGFjZUF2YWlsYWJsZUVkaXRvclNlYXRzKCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIGlkXFxuICAgICAgc2VhdHMge1xcbiAgICAgICAgZWRpdG9ycyB7XFxuICAgICAgICAgIGF2YWlsYWJsZVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBXb3Jrc3BhY2VBdmFpbGFibGVFZGl0b3JTZWF0cygkc2x1ZzogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHNsdWcpIHtcXG4gICAgICBpZFxcbiAgICAgIHNlYXRzIHtcXG4gICAgICAgIGVkaXRvcnMge1xcbiAgICAgICAgICBhdmFpbGFibGVcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzUmVnaW9uc1NlbGVjdF9TZXJ2ZXJSZWdpb25JdGVtIG9uIFNlcnZlclJlZ2lvbkl0ZW0ge1xcbiAgICBpZFxcbiAgICBrZXlcXG4gICAgbmFtZVxcbiAgICBkZXNjcmlwdGlvblxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNSZWdpb25zU2VsZWN0X1NlcnZlclJlZ2lvbkl0ZW0gb24gU2VydmVyUmVnaW9uSXRlbSB7XFxuICAgIGlkXFxuICAgIGtleVxcbiAgICBuYW1lXFxuICAgIGRlc2NyaXB0aW9uXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5RGVmYXVsdFNlYXRfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHNsdWdcXG4gICAgZGVmYXVsdFNlYXRUeXBlXFxuICAgIGRpc2NvdmVyYWJpbGl0eUF1dG9Kb2luRW5hYmxlZFxcbiAgICByb2xlXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5RGVmYXVsdFNlYXRfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHNsdWdcXG4gICAgZGVmYXVsdFNlYXRUeXBlXFxuICAgIGRpc2NvdmVyYWJpbGl0eUF1dG9Kb2luRW5hYmxlZFxcbiAgICByb2xlXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5RGlzY292ZXJhYmlsaXR5X1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBzbHVnXFxuICAgIHJvbGVcXG4gICAgZG9tYWlucyB7XFxuICAgICAgaWRcXG4gICAgICBkb21haW5cXG4gICAgfVxcbiAgICBkaXNjb3ZlcmFiaWxpdHlFbmFibGVkXFxuICAgIGRpc2NvdmVyYWJpbGl0eUF1dG9Kb2luRW5hYmxlZFxcbiAgICBkZWZhdWx0U2VhdFR5cGVcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlEaXNjb3ZlcmFiaWxpdHlfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHNsdWdcXG4gICAgcm9sZVxcbiAgICBkb21haW5zIHtcXG4gICAgICBpZFxcbiAgICAgIGRvbWFpblxcbiAgICB9XFxuICAgIGRpc2NvdmVyYWJpbGl0eUVuYWJsZWRcXG4gICAgZGlzY292ZXJhYmlsaXR5QXV0b0pvaW5FbmFibGVkXFxuICAgIGRlZmF1bHRTZWF0VHlwZVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eURvbWFpbk1hbmFnZW1lbnRfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHJvbGVcXG4gICAgZGlzY292ZXJhYmlsaXR5RW5hYmxlZFxcbiAgICBkb21haW5CYXNlZE1lbWJlcnNoaXBQcm90ZWN0aW9uRW5hYmxlZFxcbiAgICBoYXNBY2Nlc3NUb0RvbWFpbkJhc2VkU2VjdXJpdHlQb2xpY2llczogaGFzQWNjZXNzVG9GZWF0dXJlKFxcbiAgICAgIGZlYXR1cmVOYW1lOiBkb21haW5CYXNlZFNlY3VyaXR5UG9saWNpZXNcXG4gICAgKVxcbiAgICBoYXNBY2Nlc3NUb1NTTzogaGFzQWNjZXNzVG9GZWF0dXJlKGZlYXR1cmVOYW1lOiBvaWRjU3NvKVxcbiAgICBkb21haW5zIHtcXG4gICAgICBpZFxcbiAgICAgIGRvbWFpblxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5RG9tYWluTWFuYWdlbWVudF9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgcm9sZVxcbiAgICBkaXNjb3ZlcmFiaWxpdHlFbmFibGVkXFxuICAgIGRvbWFpbkJhc2VkTWVtYmVyc2hpcFByb3RlY3Rpb25FbmFibGVkXFxuICAgIGhhc0FjY2Vzc1RvRG9tYWluQmFzZWRTZWN1cml0eVBvbGljaWVzOiBoYXNBY2Nlc3NUb0ZlYXR1cmUoXFxuICAgICAgZmVhdHVyZU5hbWU6IGRvbWFpbkJhc2VkU2VjdXJpdHlQb2xpY2llc1xcbiAgICApXFxuICAgIGhhc0FjY2Vzc1RvU1NPOiBoYXNBY2Nlc3NUb0ZlYXR1cmUoZmVhdHVyZU5hbWU6IG9pZGNTc28pXFxuICAgIGRvbWFpbnMge1xcbiAgICAgIGlkXFxuICAgICAgZG9tYWluXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlEb21haW5Qcm90ZWN0aW9uX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBzbHVnXFxuICAgIHJvbGVcXG4gICAgZG9tYWluQmFzZWRNZW1iZXJzaGlwUHJvdGVjdGlvbkVuYWJsZWRcXG4gICAgaGFzQWNjZXNzVG9Eb21haW5CYXNlZFNlY3VyaXR5UG9saWNpZXM6IGhhc0FjY2Vzc1RvRmVhdHVyZShcXG4gICAgICBmZWF0dXJlTmFtZTogZG9tYWluQmFzZWRTZWN1cml0eVBvbGljaWVzXFxuICAgIClcXG4gICAgZG9tYWlucyB7XFxuICAgICAgaWRcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eURvbWFpblByb3RlY3Rpb25fV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHNsdWdcXG4gICAgcm9sZVxcbiAgICBkb21haW5CYXNlZE1lbWJlcnNoaXBQcm90ZWN0aW9uRW5hYmxlZFxcbiAgICBoYXNBY2Nlc3NUb0RvbWFpbkJhc2VkU2VjdXJpdHlQb2xpY2llczogaGFzQWNjZXNzVG9GZWF0dXJlKFxcbiAgICAgIGZlYXR1cmVOYW1lOiBkb21haW5CYXNlZFNlY3VyaXR5UG9saWNpZXNcXG4gICAgKVxcbiAgICBkb21haW5zIHtcXG4gICAgICBpZFxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5RG9tYWluUmVtb3ZlRGlhbG9nX1dvcmtzcGFjZURvbWFpbiBvbiBXb3Jrc3BhY2VEb21haW4ge1xcbiAgICBpZFxcbiAgICBkb21haW5cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlEb21haW5SZW1vdmVEaWFsb2dfV29ya3NwYWNlRG9tYWluIG9uIFdvcmtzcGFjZURvbWFpbiB7XFxuICAgIGlkXFxuICAgIGRvbWFpblxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eURvbWFpblJlbW92ZURpYWxvZ19Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgZG9tYWlucyB7XFxuICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlEb21haW5SZW1vdmVEaWFsb2dfV29ya3NwYWNlRG9tYWluXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlEb21haW5SZW1vdmVEaWFsb2dfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIGRvbWFpbnMge1xcbiAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5RG9tYWluUmVtb3ZlRGlhbG9nX1dvcmtzcGFjZURvbWFpblxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5V29ya3NwYWNlQ3JlYXRpb25fV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHNsdWdcXG4gICAgcm9sZVxcbiAgICBpc0V4Y2x1c2l2ZVxcbiAgICBoYXNBY2Nlc3NUb0V4Y2x1c2l2ZU1lbWJlcnNoaXA6IGhhc0FjY2Vzc1RvRmVhdHVyZShmZWF0dXJlTmFtZTogZXhjbHVzaXZlTWVtYmVyc2hpcClcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbk1ha2VXb3Jrc3BhY2VFeGNsdXNpdmUge1xcbiAgICAgICAgYXV0aG9yaXplZFxcbiAgICAgICAgbWVzc2FnZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eVdvcmtzcGFjZUNyZWF0aW9uX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBzbHVnXFxuICAgIHJvbGVcXG4gICAgaXNFeGNsdXNpdmVcXG4gICAgaGFzQWNjZXNzVG9FeGNsdXNpdmVNZW1iZXJzaGlwOiBoYXNBY2Nlc3NUb0ZlYXR1cmUoZmVhdHVyZU5hbWU6IGV4Y2x1c2l2ZU1lbWJlcnNoaXApXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5NYWtlV29ya3NwYWNlRXhjbHVzaXZlIHtcXG4gICAgICAgIGF1dGhvcml6ZWRcXG4gICAgICAgIG1lc3NhZ2VcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlTc29XcmFwcGVyX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICByb2xlXFxuICAgIHNsdWdcXG4gICAgc3NvIHtcXG4gICAgICBwcm92aWRlciB7XFxuICAgICAgICBpZFxcbiAgICAgICAgbmFtZVxcbiAgICAgICAgY2xpZW50SWRcXG4gICAgICAgIGlzc3VlclVybFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICBoYXNBY2Nlc3NUb1NTTzogaGFzQWNjZXNzVG9GZWF0dXJlKGZlYXR1cmVOYW1lOiBvaWRjU3NvKVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eVNzb1dyYXBwZXJfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHJvbGVcXG4gICAgc2x1Z1xcbiAgICBzc28ge1xcbiAgICAgIHByb3ZpZGVyIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBuYW1lXFxuICAgICAgICBjbGllbnRJZFxcbiAgICAgICAgaXNzdWVyVXJsXFxuICAgICAgfVxcbiAgICB9XFxuICAgIGhhc0FjY2Vzc1RvU1NPOiBoYXNBY2Nlc3NUb0ZlYXR1cmUoZmVhdHVyZU5hbWU6IG9pZGNTc28pXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFZpZXdlclBhZ2VTZXR1cF9TYXZlZFZpZXcgb24gU2F2ZWRWaWV3IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBWaWV3ZXJQYWdlU2V0dXBfU2F2ZWRWaWV3IG9uIFNhdmVkVmlldyB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgTW9kZWxQYWdlUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgY3JlYXRlZEF0XFxuICAgIG5hbWVcXG4gICAgdmlzaWJpbGl0eVxcbiAgICBsaW1pdGVkV29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIHNsdWdcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gICAgZW1iZWRPcHRpb25zIHtcXG4gICAgICBoaWRlU3BlY2tsZUJyYW5kaW5nXFxuICAgIH1cXG4gICAgaGFzQWNjZXNzVG9GZWF0dXJlKGZlYXR1cmVOYW1lOiBoaWRlU3BlY2tsZUJyYW5kaW5nKVxcbiAgICAuLi5WaWV3ZXJMaW1pdHNEaWFsb2dfUHJvamVjdFxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBNb2RlbFBhZ2VQcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBjcmVhdGVkQXRcXG4gICAgbmFtZVxcbiAgICB2aXNpYmlsaXR5XFxuICAgIGxpbWl0ZWRXb3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgc2x1Z1xcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgICBlbWJlZE9wdGlvbnMge1xcbiAgICAgIGhpZGVTcGVja2xlQnJhbmRpbmdcXG4gICAgfVxcbiAgICBoYXNBY2Nlc3NUb0ZlYXR1cmUoZmVhdHVyZU5hbWU6IGhpZGVTcGVja2xlQnJhbmRpbmcpXFxuICAgIC4uLlZpZXdlckxpbWl0c0RpYWxvZ19Qcm9qZWN0XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFZpZXdlckNvbW1lbnRUaHJlYWREYXRhIG9uIENvbW1lbnQge1xcbiAgICBpZFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQXJjaGl2ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFZpZXdlckNvbW1lbnRUaHJlYWREYXRhIG9uIENvbW1lbnQge1xcbiAgICBpZFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQXJjaGl2ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFRocmVhZENvbW1lbnRBdHRhY2htZW50IG9uIENvbW1lbnQge1xcbiAgICB0ZXh0IHtcXG4gICAgICBhdHRhY2htZW50cyB7XFxuICAgICAgICBpZFxcbiAgICAgICAgZmlsZU5hbWVcXG4gICAgICAgIGZpbGVUeXBlXFxuICAgICAgICBmaWxlU2l6ZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBUaHJlYWRDb21tZW50QXR0YWNobWVudCBvbiBDb21tZW50IHtcXG4gICAgdGV4dCB7XFxuICAgICAgYXR0YWNobWVudHMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGZpbGVOYW1lXFxuICAgICAgICBmaWxlVHlwZVxcbiAgICAgICAgZmlsZVNpemVcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgVmlld2VyQ29tbWVudHNMaXN0SXRlbSBvbiBDb21tZW50IHtcXG4gICAgaWRcXG4gICAgcmF3VGV4dFxcbiAgICBhcmNoaXZlZFxcbiAgICBhdXRob3Ige1xcbiAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgIH1cXG4gICAgY3JlYXRlZEF0XFxuICAgIHZpZXdlZEF0XFxuICAgIHJlcGxpZXMge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgICBjdXJzb3JcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICAuLi5WaWV3ZXJDb21tZW50c1JlcGx5SXRlbVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICByZXBseUF1dGhvcnMobGltaXQ6IDQpIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgLi4uRm9ybVVzZXJzU2VsZWN0SXRlbVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICByZXNvdXJjZXMge1xcbiAgICAgIHJlc291cmNlSWRcXG4gICAgICByZXNvdXJjZVR5cGVcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBWaWV3ZXJDb21tZW50c0xpc3RJdGVtIG9uIENvbW1lbnQge1xcbiAgICBpZFxcbiAgICByYXdUZXh0XFxuICAgIGFyY2hpdmVkXFxuICAgIGF1dGhvciB7XFxuICAgICAgLi4uTGltaXRlZFVzZXJBdmF0YXJcXG4gICAgfVxcbiAgICBjcmVhdGVkQXRcXG4gICAgdmlld2VkQXRcXG4gICAgcmVwbGllcyB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICAgIGN1cnNvclxcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIC4uLlZpZXdlckNvbW1lbnRzUmVwbHlJdGVtXFxuICAgICAgfVxcbiAgICB9XFxuICAgIHJlcGx5QXV0aG9ycyhsaW1pdDogNCkge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICAuLi5Gb3JtVXNlcnNTZWxlY3RJdGVtXFxuICAgICAgfVxcbiAgICB9XFxuICAgIHJlc291cmNlcyB7XFxuICAgICAgcmVzb3VyY2VJZFxcbiAgICAgIHJlc291cmNlVHlwZVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFZpZXdlckxpbWl0c0RpYWxvZ19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICB3b3Jrc3BhY2VJZFxcbiAgICAuLi5WaWV3ZXJMaW1pdHNXb3Jrc3BhY2VEaWFsb2dfUHJvamVjdFxcbiAgICAuLi5Xb3Jrc3BhY2VNb3ZlUHJvamVjdF9Qcm9qZWN0XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFZpZXdlckxpbWl0c0RpYWxvZ19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICB3b3Jrc3BhY2VJZFxcbiAgICAuLi5WaWV3ZXJMaW1pdHNXb3Jrc3BhY2VEaWFsb2dfUHJvamVjdFxcbiAgICAuLi5Xb3Jrc3BhY2VNb3ZlUHJvamVjdF9Qcm9qZWN0XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFZpZXdlckxpbWl0c1dvcmtzcGFjZURpYWxvZ19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgcm9sZVxcbiAgICAgIHNsdWdcXG4gICAgICAuLi5Xb3Jrc3BhY2VQbGFuTGltaXRzX1dvcmtzcGFjZVxcbiAgICB9XFxuICAgIC4uLlVzZUxvYWRMYXRlc3RWZXJzaW9uX1Byb2plY3RcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgVmlld2VyTGltaXRzV29ya3NwYWNlRGlhbG9nX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICByb2xlXFxuICAgICAgc2x1Z1xcbiAgICAgIC4uLldvcmtzcGFjZVBsYW5MaW1pdHNfV29ya3NwYWNlXFxuICAgIH1cXG4gICAgLi4uVXNlTG9hZExhdGVzdFZlcnNpb25fUHJvamVjdFxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBWaWV3ZXJNb2RlbFZlcnNpb25DYXJkSXRlbSBvbiBWZXJzaW9uIHtcXG4gICAgaWRcXG4gICAgbWVzc2FnZVxcbiAgICByZWZlcmVuY2VkT2JqZWN0XFxuICAgIHNvdXJjZUFwcGxpY2F0aW9uXFxuICAgIGNyZWF0ZWRBdFxcbiAgICBwcmV2aWV3VXJsXFxuICAgIGF1dGhvclVzZXIge1xcbiAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgVmlld2VyTW9kZWxWZXJzaW9uQ2FyZEl0ZW0gb24gVmVyc2lvbiB7XFxuICAgIGlkXFxuICAgIG1lc3NhZ2VcXG4gICAgcmVmZXJlbmNlZE9iamVjdFxcbiAgICBzb3VyY2VBcHBsaWNhdGlvblxcbiAgICBjcmVhdGVkQXRcXG4gICAgcHJldmlld1VybFxcbiAgICBhdXRob3JVc2VyIHtcXG4gICAgICAuLi5MaW1pdGVkVXNlckF2YXRhclxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFZpZXdlclJlc291cmNlc0xpbWl0QWxlcnRfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgd29ya3NwYWNlSWRcXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIHNsdWdcXG4gICAgICAuLi5WaWV3ZXJSZXNvdXJjZXNXb3Jrc3BhY2VMaW1pdEFsZXJ0X1dvcmtzcGFjZVxcbiAgICB9XFxuICAgIC4uLldvcmtzcGFjZU1vdmVQcm9qZWN0X1Byb2plY3RcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgVmlld2VyUmVzb3VyY2VzTGltaXRBbGVydF9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICB3b3Jrc3BhY2VJZFxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgc2x1Z1xcbiAgICAgIC4uLlZpZXdlclJlc291cmNlc1dvcmtzcGFjZUxpbWl0QWxlcnRfV29ya3NwYWNlXFxuICAgIH1cXG4gICAgLi4uV29ya3NwYWNlTW92ZVByb2plY3RfUHJvamVjdFxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBWaWV3ZXJSZXNvdXJjZXNQZXJzb25hbExpbWl0QWxlcnRfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgLi4uV29ya3NwYWNlTW92ZVByb2plY3RfUHJvamVjdFxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBWaWV3ZXJSZXNvdXJjZXNQZXJzb25hbExpbWl0QWxlcnRfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgLi4uV29ya3NwYWNlTW92ZVByb2plY3RfUHJvamVjdFxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBWaWV3ZXJSZXNvdXJjZXNXb3Jrc3BhY2VMaW1pdEFsZXJ0X1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBzbHVnXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFZpZXdlclJlc291cmNlc1dvcmtzcGFjZUxpbWl0QWxlcnRfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHNsdWdcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgVmlld2VyU2F2ZWRWaWV3c1BhbmVsX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVTYXZlZFZpZXcge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgc2VhdFR5cGVcXG4gICAgICBwbGFuU3VwcG9ydHNTYXZlZFZpZXdzOiBoYXNBY2Nlc3NUb0ZlYXR1cmUoZmVhdHVyZU5hbWU6IHNhdmVkVmlld3MpXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgVmlld2VyU2F2ZWRWaWV3c1BhbmVsX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVTYXZlZFZpZXcge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgc2VhdFR5cGVcXG4gICAgICBwbGFuU3VwcG9ydHNTYXZlZFZpZXdzOiBoYXNBY2Nlc3NUb0ZlYXR1cmUoZmVhdHVyZU5hbWU6IHNhdmVkVmlld3MpXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgVmlld2VyU2F2ZWRWaWV3c1BhbmVsR3JvdXBzX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHNhdmVkVmlld0dyb3VwcyhpbnB1dDogJHNhdmVkVmlld0dyb3Vwc0lucHV0KSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICAgIGN1cnNvclxcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwX1NhdmVkVmlld0dyb3VwXFxuICAgICAgfVxcbiAgICB9XFxuICAgIC4uLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBfUHJvamVjdFxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBWaWV3ZXJTYXZlZFZpZXdzUGFuZWxHcm91cHNfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgc2F2ZWRWaWV3R3JvdXBzKGlucHV0OiAkc2F2ZWRWaWV3R3JvdXBzSW5wdXQpIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgY3Vyc29yXFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIC4uLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBfU2F2ZWRWaWV3R3JvdXBcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cF9Qcm9qZWN0XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFZpZXdlclNhdmVkVmlld3NQYW5lbEdyb3Vwc19TYXZlZFZpZXdHcm91cHMoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJHNhdmVkVmlld0dyb3Vwc0lucHV0OiBTYXZlZFZpZXdHcm91cHNJbnB1dCFcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxHcm91cHNfUHJvamVjdFxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFZpZXdlclNhdmVkVmlld3NQYW5lbEdyb3Vwc19TYXZlZFZpZXdHcm91cHMoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJHNhdmVkVmlld0dyb3Vwc0lucHV0OiBTYXZlZFZpZXdHcm91cHNJbnB1dCFcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxHcm91cHNfUHJvamVjdFxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdfU2F2ZWRWaWV3IG9uIFNhdmVkVmlldyB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgZGVzY3JpcHRpb25cXG4gICAgdGh1bWJuYWlsVXJsXFxuICAgIHZpc2liaWxpdHlcXG4gICAgaXNIb21lVmlld1xcbiAgICByZXNvdXJjZUlkc1xcbiAgICBhdXRob3Ige1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIHVwZGF0ZWRBdFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuVXBkYXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uVXNlRGVsZXRlU2F2ZWRWaWV3X1NhdmVkVmlld1xcbiAgICAuLi5Vc2VVcGRhdGVTYXZlZFZpZXdfU2F2ZWRWaWV3XFxuICAgIC4uLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdFZGl0RGlhbG9nX1NhdmVkVmlld1xcbiAgICAuLi5Vc2VTYXZlZFZpZXdWYWxpZGF0aW9uSGVscGVyc19TYXZlZFZpZXdcXG4gICAgLi4uVXNlRHJhZ2dhYmxlVmlld19TYXZlZFZpZXdcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld19TYXZlZFZpZXcgb24gU2F2ZWRWaWV3IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBkZXNjcmlwdGlvblxcbiAgICB0aHVtYm5haWxVcmxcXG4gICAgdmlzaWJpbGl0eVxcbiAgICBpc0hvbWVWaWV3XFxuICAgIHJlc291cmNlSWRzXFxuICAgIGF1dGhvciB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gICAgdXBkYXRlZEF0XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5VcGRhdGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5Vc2VEZWxldGVTYXZlZFZpZXdfU2F2ZWRWaWV3XFxuICAgIC4uLlVzZVVwZGF0ZVNhdmVkVmlld19TYXZlZFZpZXdcXG4gICAgLi4uVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld0VkaXREaWFsb2dfU2F2ZWRWaWV3XFxuICAgIC4uLlVzZVNhdmVkVmlld1ZhbGlkYXRpb25IZWxwZXJzX1NhdmVkVmlld1xcbiAgICAuLi5Vc2VEcmFnZ2FibGVWaWV3X1NhdmVkVmlld1xcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBWaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3RGVsZXRlRGlhbG9nX1NhdmVkVmlldyBvbiBTYXZlZFZpZXcge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIC4uLlVzZURlbGV0ZVNhdmVkVmlld19TYXZlZFZpZXdcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld0RlbGV0ZURpYWxvZ19TYXZlZFZpZXcgb24gU2F2ZWRWaWV3IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICAuLi5Vc2VEZWxldGVTYXZlZFZpZXdfU2F2ZWRWaWV3XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdFZGl0RGlhbG9nX1NhdmVkVmlldyBvbiBTYXZlZFZpZXcge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGRlc2NyaXB0aW9uXFxuICAgIHZpc2liaWxpdHlcXG4gICAgZ3JvdXAge1xcbiAgICAgIC4uLkZvcm1TZWxlY3RTYXZlZFZpZXdHcm91cF9TYXZlZFZpZXdHcm91cFxcbiAgICB9XFxuICAgIC4uLlVzZVVwZGF0ZVNhdmVkVmlld19TYXZlZFZpZXdcXG4gICAgLi4uVXNlU2F2ZWRWaWV3VmFsaWRhdGlvbkhlbHBlcnNfU2F2ZWRWaWV3XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdFZGl0RGlhbG9nX1NhdmVkVmlldyBvbiBTYXZlZFZpZXcge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGRlc2NyaXB0aW9uXFxuICAgIHZpc2liaWxpdHlcXG4gICAgZ3JvdXAge1xcbiAgICAgIC4uLkZvcm1TZWxlY3RTYXZlZFZpZXdHcm91cF9TYXZlZFZpZXdHcm91cFxcbiAgICB9XFxuICAgIC4uLlVzZVVwZGF0ZVNhdmVkVmlld19TYXZlZFZpZXdcXG4gICAgLi4uVXNlU2F2ZWRWaWV3VmFsaWRhdGlvbkhlbHBlcnNfU2F2ZWRWaWV3XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdNb3ZlRGlhbG9nX1NhdmVkVmlldyBvbiBTYXZlZFZpZXcge1xcbiAgICBpZFxcbiAgICBncm91cCB7XFxuICAgICAgLi4uRm9ybVNlbGVjdFNhdmVkVmlld0dyb3VwX1NhdmVkVmlld0dyb3VwXFxuICAgIH1cXG4gICAgLi4uVXNlVXBkYXRlU2F2ZWRWaWV3X1NhdmVkVmlld1xcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBWaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3TW92ZURpYWxvZ19TYXZlZFZpZXcgb24gU2F2ZWRWaWV3IHtcXG4gICAgaWRcXG4gICAgZ3JvdXAge1xcbiAgICAgIC4uLkZvcm1TZWxlY3RTYXZlZFZpZXdHcm91cF9TYXZlZFZpZXdHcm91cFxcbiAgICB9XFxuICAgIC4uLlVzZVVwZGF0ZVNhdmVkVmlld19TYXZlZFZpZXdcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cF9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQ3JlYXRlU2F2ZWRWaWV3IHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIGhhc0FjY2Vzc1RvRmVhdHVyZShmZWF0dXJlTmFtZTogcHJlc2VudGF0aW9ucylcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBWaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVTYXZlZFZpZXcge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgaGFzQWNjZXNzVG9GZWF0dXJlKGZlYXR1cmVOYW1lOiBwcmVzZW50YXRpb25zKVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBfU2F2ZWRWaWV3R3JvdXAgb24gU2F2ZWRWaWV3R3JvdXAge1xcbiAgICBpZFxcbiAgICBpc1VuZ3JvdXBlZFZpZXdzR3JvdXBcXG4gICAgcmVzb3VyY2VJZHNcXG4gICAgdGl0bGVcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhblVwZGF0ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIC4uLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBJbm5lcl9TYXZlZFZpZXdHcm91cFxcbiAgICAuLi5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwRGVsZXRlRGlhbG9nX1NhdmVkVmlld0dyb3VwXFxuICAgIC4uLlVzZVVwZGF0ZVNhdmVkVmlld0dyb3VwX1NhdmVkVmlld0dyb3VwXFxuICAgIC4uLlVzZURyYWdnYWJsZVZpZXdUYXJnZXRHcm91cF9TYXZlZFZpZXdHcm91cFxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBWaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwX1NhdmVkVmlld0dyb3VwIG9uIFNhdmVkVmlld0dyb3VwIHtcXG4gICAgaWRcXG4gICAgaXNVbmdyb3VwZWRWaWV3c0dyb3VwXFxuICAgIHJlc291cmNlSWRzXFxuICAgIHRpdGxlXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5VcGRhdGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwSW5uZXJfU2F2ZWRWaWV3R3JvdXBcXG4gICAgLi4uVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cERlbGV0ZURpYWxvZ19TYXZlZFZpZXdHcm91cFxcbiAgICAuLi5Vc2VVcGRhdGVTYXZlZFZpZXdHcm91cF9TYXZlZFZpZXdHcm91cFxcbiAgICAuLi5Vc2VEcmFnZ2FibGVWaWV3VGFyZ2V0R3JvdXBfU2F2ZWRWaWV3R3JvdXBcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cF9TYXZlZFZpZXdHcm91cF9QYWdpbmF0ZWQgb24gU2F2ZWRWaWV3R3JvdXAge1xcbiAgICBpZFxcbiAgICB2aWV3cyhpbnB1dDogJHNhdmVkVmlld3NJbnB1dCkge1xcbiAgICAgIGN1cnNvclxcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICBpZFxcbiAgICAgICAgLi4uVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld19TYXZlZFZpZXdcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cF9TYXZlZFZpZXdHcm91cF9QYWdpbmF0ZWQgb24gU2F2ZWRWaWV3R3JvdXAge1xcbiAgICBpZFxcbiAgICB2aWV3cyhpbnB1dDogJHNhdmVkVmlld3NJbnB1dCkge1xcbiAgICAgIGN1cnNvclxcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICBpZFxcbiAgICAgICAgLi4uVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld19TYXZlZFZpZXdcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cERlbGV0ZURpYWxvZ19TYXZlZFZpZXdHcm91cCBvbiBTYXZlZFZpZXdHcm91cCB7XFxuICAgIGlkXFxuICAgIHRpdGxlXFxuICAgIC4uLlVzZURlbGV0ZVNhdmVkVmlld0dyb3VwX1NhdmVkVmlld0dyb3VwXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBEZWxldGVEaWFsb2dfU2F2ZWRWaWV3R3JvdXAgb24gU2F2ZWRWaWV3R3JvdXAge1xcbiAgICBpZFxcbiAgICB0aXRsZVxcbiAgICAuLi5Vc2VEZWxldGVTYXZlZFZpZXdHcm91cF9TYXZlZFZpZXdHcm91cFxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBWaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwSW5uZXJfU2F2ZWRWaWV3R3JvdXAgb24gU2F2ZWRWaWV3R3JvdXAge1xcbiAgICBpZFxcbiAgICB0aXRsZVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBWaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwSW5uZXJfU2F2ZWRWaWV3R3JvdXAgb24gU2F2ZWRWaWV3R3JvdXAge1xcbiAgICBpZFxcbiAgICB0aXRsZVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBWaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwSW5uZXJfU2F2ZWRWaWV3R3JvdXBfUGFnaW5hdGVkIG9uIFNhdmVkVmlld0dyb3VwIHtcXG4gICAgaWRcXG4gICAgdmlld3MoaW5wdXQ6ICRzYXZlZFZpZXdzSW5wdXQpIHtcXG4gICAgICBjdXJzb3JcXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIC4uLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdfU2F2ZWRWaWV3XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBJbm5lcl9TYXZlZFZpZXdHcm91cF9QYWdpbmF0ZWQgb24gU2F2ZWRWaWV3R3JvdXAge1xcbiAgICBpZFxcbiAgICB2aWV3cyhpbnB1dDogJHNhdmVkVmlld3NJbnB1dCkge1xcbiAgICAgIGN1cnNvclxcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICBpZFxcbiAgICAgICAgLi4uVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld19TYXZlZFZpZXdcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cElubmVyX1ZpZXdzKFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRncm91cElkOiBJRCFcXG4gICAgJHNhdmVkVmlld3NJbnB1dDogU2F2ZWRWaWV3R3JvdXBWaWV3c0lucHV0IVxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHNhdmVkVmlld0dyb3VwKGlkOiAkZ3JvdXBJZCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIC4uLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBJbm5lcl9TYXZlZFZpZXdHcm91cF9QYWdpbmF0ZWRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cElubmVyX1ZpZXdzKFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRncm91cElkOiBJRCFcXG4gICAgJHNhdmVkVmlld3NJbnB1dDogU2F2ZWRWaWV3R3JvdXBWaWV3c0lucHV0IVxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHNhdmVkVmlld0dyb3VwKGlkOiAkZ3JvdXBJZCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIC4uLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBJbm5lcl9TYXZlZFZpZXdHcm91cF9QYWdpbmF0ZWRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlQWRkUHJvamVjdE1lbnVfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgc2x1Z1xcbiAgICByb2xlXFxuICAgIHBsYW4ge1xcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQ3JlYXRlUHJvamVjdCB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhbk1vdmVQcm9qZWN0VG9Xb3Jrc3BhY2Uge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5Qcm9qZWN0c0FkZF9Xb3Jrc3BhY2VcXG4gICAgLi4uV29ya3NwYWNlTW92ZVByb2plY3RfV29ya3NwYWNlXFxuICAgIC4uLlVzZUNhbkNyZWF0ZVdvcmtzcGFjZVByb2plY3RfV29ya3NwYWNlXFxuICAgIC4uLlVzZUNhbk1vdmVQcm9qZWN0SW50b1dvcmtzcGFjZV9Xb3Jrc3BhY2VcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlQWRkUHJvamVjdE1lbnVfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgc2x1Z1xcbiAgICByb2xlXFxuICAgIHBsYW4ge1xcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQ3JlYXRlUHJvamVjdCB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhbk1vdmVQcm9qZWN0VG9Xb3Jrc3BhY2Uge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5Qcm9qZWN0c0FkZF9Xb3Jrc3BhY2VcXG4gICAgLi4uV29ya3NwYWNlTW92ZVByb2plY3RfV29ya3NwYWNlXFxuICAgIC4uLlVzZUNhbkNyZWF0ZVdvcmtzcGFjZVByb2plY3RfV29ya3NwYWNlXFxuICAgIC4uLlVzZUNhbk1vdmVQcm9qZWN0SW50b1dvcmtzcGFjZV9Xb3Jrc3BhY2VcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlRGFzaGJvYXJkX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICAuLi5Xb3Jrc3BhY2VTaWRlYmFyTWVtYmVyc19Xb3Jrc3BhY2VcXG4gICAgLi4uV29ya3NwYWNlRGFzaGJvYXJkSGVhZGVyX1dvcmtzcGFjZVxcbiAgICAuLi5Xb3Jrc3BhY2VEYXNoYm9hcmRQcm9qZWN0TGlzdF9Xb3Jrc3BhY2VcXG4gICAgLi4uQmlsbGluZ0FjdGlvbnNfV29ya3NwYWNlXFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgcm9sZVxcbiAgICBjcmVhdGlvblN0YXRlIHtcXG4gICAgICBjb21wbGV0ZWRcXG4gICAgICBzdGF0ZVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZURhc2hib2FyZF9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgLi4uV29ya3NwYWNlU2lkZWJhck1lbWJlcnNfV29ya3NwYWNlXFxuICAgIC4uLldvcmtzcGFjZURhc2hib2FyZEhlYWRlcl9Xb3Jrc3BhY2VcXG4gICAgLi4uV29ya3NwYWNlRGFzaGJvYXJkUHJvamVjdExpc3RfV29ya3NwYWNlXFxuICAgIC4uLkJpbGxpbmdBY3Rpb25zX1dvcmtzcGFjZVxcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHJvbGVcXG4gICAgY3JlYXRpb25TdGF0ZSB7XFxuICAgICAgY29tcGxldGVkXFxuICAgICAgc3RhdGVcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VEYXNoYm9hcmRIZWFkZXJfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIC4uLldvcmtzcGFjZVNpZGViYXJNZW1iZXJzX1dvcmtzcGFjZVxcbiAgICAuLi5Xb3Jrc3BhY2VBZGRQcm9qZWN0TWVudV9Xb3Jrc3BhY2VcXG4gICAgLi4uQmlsbGluZ0FsZXJ0X1dvcmtzcGFjZVxcbiAgICBpZFxcbiAgICByb2xlXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZURhc2hib2FyZEhlYWRlcl9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgLi4uV29ya3NwYWNlU2lkZWJhck1lbWJlcnNfV29ya3NwYWNlXFxuICAgIC4uLldvcmtzcGFjZUFkZFByb2plY3RNZW51X1dvcmtzcGFjZVxcbiAgICAuLi5CaWxsaW5nQWxlcnRfV29ya3NwYWNlXFxuICAgIGlkXFxuICAgIHJvbGVcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlRGFzaGJvYXJkUHJvamVjdExpc3RfUHJvamVjdENvbGxlY3Rpb24gb24gUHJvamVjdENvbGxlY3Rpb24ge1xcbiAgICB0b3RhbENvdW50XFxuICAgIGl0ZW1zIHtcXG4gICAgICAuLi5Qcm9qZWN0RGFzaGJvYXJkSXRlbVxcbiAgICB9XFxuICAgIGN1cnNvclxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VEYXNoYm9hcmRQcm9qZWN0TGlzdF9Qcm9qZWN0Q29sbGVjdGlvbiBvbiBQcm9qZWN0Q29sbGVjdGlvbiB7XFxuICAgIHRvdGFsQ291bnRcXG4gICAgaXRlbXMge1xcbiAgICAgIC4uLlByb2plY3REYXNoYm9hcmRJdGVtXFxuICAgIH1cXG4gICAgY3Vyc29yXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZURhc2hib2FyZFByb2plY3RMaXN0X1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICAuLi5Xb3Jrc3BhY2VBZGRQcm9qZWN0TWVudV9Xb3Jrc3BhY2VcXG4gICAgaWRcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlRGFzaGJvYXJkUHJvamVjdExpc3RfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIC4uLldvcmtzcGFjZUFkZFByb2plY3RNZW51X1dvcmtzcGFjZVxcbiAgICBpZFxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VJbnZpdGVCYW5uZXJfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvciBvbiBQZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yIHtcXG4gICAgaWRcXG4gICAgaW52aXRlZEJ5IHtcXG4gICAgICBpZFxcbiAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgIH1cXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgICBsb2dvXFxuICAgIH1cXG4gICAgdG9rZW5cXG4gICAgdXNlciB7XFxuICAgICAgaWRcXG4gICAgfVxcbiAgICAuLi5Vc2VXb3Jrc3BhY2VJbnZpdGVNYW5hZ2VyX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3JcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlSW52aXRlQmFubmVyX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3Igb24gUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvciB7XFxuICAgIGlkXFxuICAgIGludml0ZWRCeSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5MaW1pdGVkVXNlckF2YXRhclxcbiAgICB9XFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgICAgbG9nb1xcbiAgICB9XFxuICAgIHRva2VuXFxuICAgIHVzZXIge1xcbiAgICAgIGlkXFxuICAgIH1cXG4gICAgLi4uVXNlV29ya3NwYWNlSW52aXRlTWFuYWdlcl9QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZUludml0ZUJsb2NrX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3Igb24gUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvciB7XFxuICAgIGlkXFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgICAgbG9nb1xcbiAgICB9XFxuICAgIHRva2VuXFxuICAgIHVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgIH1cXG4gICAgdGl0bGVcXG4gICAgZW1haWxcXG4gICAgLi4uVXNlV29ya3NwYWNlSW52aXRlTWFuYWdlcl9QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZUludml0ZUJsb2NrX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3Igb24gUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvciB7XFxuICAgIGlkXFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgICAgbG9nb1xcbiAgICB9XFxuICAgIHRva2VuXFxuICAgIHVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgIH1cXG4gICAgdGl0bGVcXG4gICAgZW1haWxcXG4gICAgLi4uVXNlV29ya3NwYWNlSW52aXRlTWFuYWdlcl9QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZUludml0ZUNhcmRfTGltaXRlZFdvcmtzcGFjZSBvbiBMaW1pdGVkV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBzbHVnXFxuICAgIGRlc2NyaXB0aW9uXFxuICAgIGxvZ29cXG4gICAgYWRtaW5UZWFtIHtcXG4gICAgICB1c2VyIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBuYW1lXFxuICAgICAgICBhdmF0YXJcXG4gICAgICB9XFxuICAgIH1cXG4gICAgdGVhbSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIHVzZXIge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBuYW1lXFxuICAgICAgICAgIGF2YXRhclxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VJbnZpdGVDYXJkX0xpbWl0ZWRXb3Jrc3BhY2Ugb24gTGltaXRlZFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgc2x1Z1xcbiAgICBkZXNjcmlwdGlvblxcbiAgICBsb2dvXFxuICAgIGFkbWluVGVhbSB7XFxuICAgICAgdXNlciB7XFxuICAgICAgICBpZFxcbiAgICAgICAgbmFtZVxcbiAgICAgICAgYXZhdGFyXFxuICAgICAgfVxcbiAgICB9XFxuICAgIHRlYW0ge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICB1c2VyIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgbmFtZVxcbiAgICAgICAgICBhdmF0YXJcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlSW52aXRlQ2FyZF9QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yIG9uIFBlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3Ige1xcbiAgICBpZFxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIC4uLldvcmtzcGFjZUludml0ZUNhcmRfTGltaXRlZFdvcmtzcGFjZVxcbiAgICB9XFxuICAgIGludml0ZWRCeSB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlSW52aXRlQ2FyZF9QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yIG9uIFBlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3Ige1xcbiAgICBpZFxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIC4uLldvcmtzcGFjZUludml0ZUNhcmRfTGltaXRlZFdvcmtzcGFjZVxcbiAgICB9XFxuICAgIGludml0ZWRCeSB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlSm9pblJlcXVlc3RBcHByb3ZlRGlhbG9nX1dvcmtzcGFjZUpvaW5SZXF1ZXN0IG9uIFdvcmtzcGFjZUpvaW5SZXF1ZXN0IHtcXG4gICAgaWRcXG4gICAgdXNlciB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZUpvaW5SZXF1ZXN0QXBwcm92ZURpYWxvZ19Xb3Jrc3BhY2VKb2luUmVxdWVzdCBvbiBXb3Jrc3BhY2VKb2luUmVxdWVzdCB7XFxuICAgIGlkXFxuICAgIHVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VNb3ZlUHJvamVjdE1hbmFnZXJfUHJvamVjdEJhc2Ugb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgbW9kZWxDb3VudDogbW9kZWxzKGxpbWl0OiAwKSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICAgIHZlcnNpb25zKGxpbWl0OiAwKSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlcl9Qcm9qZWN0QmFzZSBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBtb2RlbENvdW50OiBtb2RlbHMobGltaXQ6IDApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgdmVyc2lvbnMobGltaXQ6IDApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIC4uLldvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlcl9Qcm9qZWN0QmFzZVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuTW92ZVRvV29ya3NwYWNlKHdvcmtzcGFjZUlkOiAkd29ya3NwYWNlSWQpIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIHNsdWdcXG4gICAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgICBjYW5Nb3ZlUHJvamVjdFRvV29ya3NwYWNlKHByb2plY3RJZDogJHByb2plY3RJZCkge1xcbiAgICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlcl9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICAuLi5Xb3Jrc3BhY2VNb3ZlUHJvamVjdE1hbmFnZXJfUHJvamVjdEJhc2VcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbk1vdmVUb1dvcmtzcGFjZSh3b3Jrc3BhY2VJZDogJHdvcmtzcGFjZUlkKSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICBzbHVnXFxuICAgICAgcGVybWlzc2lvbnMge1xcbiAgICAgICAgY2FuTW92ZVByb2plY3RUb1dvcmtzcGFjZShwcm9qZWN0SWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VNb3ZlUHJvamVjdE1hbmFnZXJfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHJvbGVcXG4gICAgbmFtZVxcbiAgICBsb2dvXFxuICAgIHNsdWdcXG4gICAgcGxhbiB7XFxuICAgICAgbmFtZVxcbiAgICAgIHVzYWdlIHtcXG4gICAgICAgIHByb2plY3RDb3VudFxcbiAgICAgICAgbW9kZWxDb3VudFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuTW92ZVByb2plY3RUb1dvcmtzcGFjZShwcm9qZWN0SWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcHJvamVjdHMge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgfVxcbiAgICB0ZWFtIHtcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICB1c2VyIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgbmFtZVxcbiAgICAgICAgICBhdmF0YXJcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uV29ya3NwYWNlTW92ZVByb2plY3RTZWxlY3RXb3Jrc3BhY2VfV29ya3NwYWNlXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlcl9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgcm9sZVxcbiAgICBuYW1lXFxuICAgIGxvZ29cXG4gICAgc2x1Z1xcbiAgICBwbGFuIHtcXG4gICAgICBuYW1lXFxuICAgICAgdXNhZ2Uge1xcbiAgICAgICAgcHJvamVjdENvdW50XFxuICAgICAgICBtb2RlbENvdW50XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5Nb3ZlUHJvamVjdFRvV29ya3NwYWNlKHByb2plY3RJZDogJHByb2plY3RJZCkge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICBwcm9qZWN0cyB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICAgIHRlYW0ge1xcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIHVzZXIge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBuYW1lXFxuICAgICAgICAgIGF2YXRhclxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5Xb3Jrc3BhY2VNb3ZlUHJvamVjdFNlbGVjdFdvcmtzcGFjZV9Xb3Jrc3BhY2VcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlTW92ZVByb2plY3RTZWxlY3RXb3Jrc3BhY2VfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgcm9sZVxcbiAgICBzbHVnXFxuICAgIHBsYW4ge1xcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuTW92ZVByb2plY3RUb1dvcmtzcGFjZShwcm9qZWN0SWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuQ3JlYXRlUHJvamVjdCB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZU1vdmVQcm9qZWN0U2VsZWN0V29ya3NwYWNlX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHJvbGVcXG4gICAgc2x1Z1xcbiAgICBwbGFuIHtcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbk1vdmVQcm9qZWN0VG9Xb3Jrc3BhY2UocHJvamVjdElkOiAkcHJvamVjdElkKSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhbkNyZWF0ZVByb2plY3Qge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VNb3ZlUHJvamVjdFNlbGVjdFdvcmtzcGFjZV9Vc2VyIG9uIFVzZXIge1xcbiAgICB3b3Jrc3BhY2VzIHtcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICAuLi5Xb3Jrc3BhY2VNb3ZlUHJvamVjdE1hbmFnZXJfV29ya3NwYWNlXFxuICAgICAgfVxcbiAgICB9XFxuICAgIHByb2plY3RzKGN1cnNvcjogJGN1cnNvciwgZmlsdGVyOiAkZmlsdGVyLCBzb3J0Qnk6ICRzb3J0QnkpIHtcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICAuLi5Xb3Jrc3BhY2VNb3ZlUHJvamVjdE1hbmFnZXJfUHJvamVjdFxcbiAgICAgIH1cXG4gICAgICBjdXJzb3JcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlTW92ZVByb2plY3RTZWxlY3RXb3Jrc3BhY2VfVXNlciBvbiBVc2VyIHtcXG4gICAgd29ya3NwYWNlcyB7XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgLi4uV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1dvcmtzcGFjZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICBwcm9qZWN0cyhjdXJzb3I6ICRjdXJzb3IsIGZpbHRlcjogJGZpbHRlciwgc29ydEJ5OiAkc29ydEJ5KSB7XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgLi4uV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1Byb2plY3RcXG4gICAgICB9XFxuICAgICAgY3Vyc29yXFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZU1vdmVQcm9qZWN0X1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBzbHVnXFxuICAgIG5hbWVcXG4gICAgcm9sZVxcbiAgICBwbGFuIHtcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkNyZWF0ZVByb2plY3Qge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5Nb3ZlUHJvamVjdFRvV29ya3NwYWNlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uVXNlQ2FuTW92ZVByb2plY3RJbnRvV29ya3NwYWNlX1dvcmtzcGFjZVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VNb3ZlUHJvamVjdF9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgc2x1Z1xcbiAgICBuYW1lXFxuICAgIHJvbGVcXG4gICAgcGxhbiB7XFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVQcm9qZWN0IHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuTW92ZVByb2plY3RUb1dvcmtzcGFjZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIC4uLlVzZUNhbk1vdmVQcm9qZWN0SW50b1dvcmtzcGFjZV9Xb3Jrc3BhY2VcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlTW92ZVByb2plY3RfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgd29ya3NwYWNlSWRcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbk1vdmVUb1dvcmtzcGFjZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIC4uLlVzZUNhbk1vdmVQcm9qZWN0SW50b1dvcmtzcGFjZV9Qcm9qZWN0XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZU1vdmVQcm9qZWN0X1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHdvcmtzcGFjZUlkXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5Nb3ZlVG9Xb3Jrc3BhY2Uge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5Vc2VDYW5Nb3ZlUHJvamVjdEludG9Xb3Jrc3BhY2VfUHJvamVjdFxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VTaWRlYmFyQWJvdXRfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgZGVzY3JpcHRpb25cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlU2lkZWJhckFib3V0X1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGRlc2NyaXB0aW9uXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZVNpZGViYXJNZW1iZXJzX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBzbHVnXFxuICAgIG5hbWVcXG4gICAgZG9tYWluQmFzZWRNZW1iZXJzaGlwUHJvdGVjdGlvbkVuYWJsZWRcXG4gICAgZGVmYXVsdFNlYXRUeXBlXFxuICAgIHNpZGViYXJUZWFtOiB0ZWFtKGxpbWl0OiA2KSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIGlkXFxuICAgICAgICB1c2VyIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgbmFtZVxcbiAgICAgICAgICBhdmF0YXJcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gICAgaW52aXRlZFRlYW0oZmlsdGVyOiAkaW52aXRlc0ZpbHRlcikge1xcbiAgICAgIGlkXFxuICAgICAgcm9sZVxcbiAgICB9XFxuICAgIGFkbWluV29ya3NwYWNlc0pvaW5SZXF1ZXN0cyB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIHN0YXR1c1xcbiAgICAgICAgaWRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlU2lkZWJhck1lbWJlcnNfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHNsdWdcXG4gICAgbmFtZVxcbiAgICBkb21haW5CYXNlZE1lbWJlcnNoaXBQcm90ZWN0aW9uRW5hYmxlZFxcbiAgICBkZWZhdWx0U2VhdFR5cGVcXG4gICAgc2lkZWJhclRlYW06IHRlYW0obGltaXQ6IDYpIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHVzZXIge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBuYW1lXFxuICAgICAgICAgIGF2YXRhclxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICBpbnZpdGVkVGVhbShmaWx0ZXI6ICRpbnZpdGVzRmlsdGVyKSB7XFxuICAgICAgaWRcXG4gICAgICByb2xlXFxuICAgIH1cXG4gICAgYWRtaW5Xb3Jrc3BhY2VzSm9pblJlcXVlc3RzIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgc3RhdHVzXFxuICAgICAgICBpZFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VTaWRlYmFyU2VjdXJpdHlfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHNsdWdcXG4gICAgZG9tYWlucyB7XFxuICAgICAgaWRcXG4gICAgICBkb21haW5cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VTaWRlYmFyU2VjdXJpdHlfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHNsdWdcXG4gICAgZG9tYWlucyB7XFxuICAgICAgaWRcXG4gICAgICBkb21haW5cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VTaWRlYmFyX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICAuLi5Xb3Jrc3BhY2VTaWRlYmFyTWVtYmVyc19Xb3Jrc3BhY2VcXG4gICAgLi4uV29ya3NwYWNlU2lkZWJhckFib3V0X1dvcmtzcGFjZVxcbiAgICAuLi5Xb3Jrc3BhY2VTaWRlYmFyU2VjdXJpdHlfV29ya3NwYWNlXFxuICAgIGlkXFxuICAgIHJvbGVcXG4gICAgc2x1Z1xcbiAgICBkb21haW5zIHtcXG4gICAgICBpZFxcbiAgICB9XFxuICAgIHBsYW4ge1xcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VTaWRlYmFyX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICAuLi5Xb3Jrc3BhY2VTaWRlYmFyTWVtYmVyc19Xb3Jrc3BhY2VcXG4gICAgLi4uV29ya3NwYWNlU2lkZWJhckFib3V0X1dvcmtzcGFjZVxcbiAgICAuLi5Xb3Jrc3BhY2VTaWRlYmFyU2VjdXJpdHlfV29ya3NwYWNlXFxuICAgIGlkXFxuICAgIHJvbGVcXG4gICAgc2x1Z1xcbiAgICBkb21haW5zIHtcXG4gICAgICBpZFxcbiAgICB9XFxuICAgIHBsYW4ge1xcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VXaXphcmRfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGNyZWF0aW9uU3RhdGUge1xcbiAgICAgIGNvbXBsZXRlZFxcbiAgICAgIHN0YXRlXFxuICAgIH1cXG4gICAgbmFtZVxcbiAgICBzbHVnXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZVdpemFyZF9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgY3JlYXRpb25TdGF0ZSB7XFxuICAgICAgY29tcGxldGVkXFxuICAgICAgc3RhdGVcXG4gICAgfVxcbiAgICBuYW1lXFxuICAgIHNsdWdcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlV2l6YXJkU3RlcFJlZ2lvbl9TZXJ2ZXJJbmZvIG9uIFNlcnZlckluZm8ge1xcbiAgICBtdWx0aVJlZ2lvbiB7XFxuICAgICAgcmVnaW9ucyB7XFxuICAgICAgICBpZFxcbiAgICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzUmVnaW9uc1NlbGVjdF9TZXJ2ZXJSZWdpb25JdGVtXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZVdpemFyZFN0ZXBSZWdpb25fU2VydmVySW5mbyBvbiBTZXJ2ZXJJbmZvIHtcXG4gICAgbXVsdGlSZWdpb24ge1xcbiAgICAgIHJlZ2lvbnMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc1JlZ2lvbnNTZWxlY3RfU2VydmVyUmVnaW9uSXRlbVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICAgICAgICAgIGZyYWdtZW50IEFjY0ZvbGRlckNvbnRlbnRzIG9uIEFjY0ZvbGRlciB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICBuYW1lXFxuICAgICAgICAgICAgY29udGVudHMge1xcbiAgICAgICAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAgICAgICBpZFxcbiAgICAgICAgICAgICAgICBuYW1lXFxuICAgICAgICAgICAgICAgIGxhdGVzdFZlcnNpb24ge1xcbiAgICAgICAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgICAgICAgbmFtZVxcbiAgICAgICAgICAgICAgICAgIHZlcnNpb25OdW1iZXJcXG4gICAgICAgICAgICAgICAgICBmaWxlVHlwZVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGNoaWxkcmVuIHtcXG4gICAgICAgICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICAgICAgbmFtZVxcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gICAgICAgICAgZnJhZ21lbnQgQWNjRm9sZGVyQ29udGVudHMgb24gQWNjRm9sZGVyIHtcXG4gICAgICAgICAgICBpZFxcbiAgICAgICAgICAgIG5hbWVcXG4gICAgICAgICAgICBjb250ZW50cyB7XFxuICAgICAgICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgICAgIG5hbWVcXG4gICAgICAgICAgICAgICAgbGF0ZXN0VmVyc2lvbiB7XFxuICAgICAgICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICAgICAgICBuYW1lXFxuICAgICAgICAgICAgICAgICAgdmVyc2lvbk51bWJlclxcbiAgICAgICAgICAgICAgICAgIGZpbGVUeXBlXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgY2hpbGRyZW4ge1xcbiAgICAgICAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAgICAgICBpZFxcbiAgICAgICAgICAgICAgICBuYW1lXFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICBcIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdEFjY1N5bmNJdGVtIG9uIEFjY1N5bmNJdGVtIHtcXG4gICAgaWRcXG4gICAgcHJvamVjdCB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gICAgbW9kZWwge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIGFjY1JlZ2lvblxcbiAgICBhY2NIdWJJZFxcbiAgICBhY2NQcm9qZWN0SWRcXG4gICAgYWNjUm9vdFByb2plY3RGb2xkZXJVcm5cXG4gICAgYWNjRmlsZUxpbmVhZ2VVcm5cXG4gICAgYWNjRmlsZU5hbWVcXG4gICAgYWNjRmlsZUV4dGVuc2lvblxcbiAgICBhY2NGaWxlVmVyc2lvbkluZGV4XFxuICAgIGFjY0ZpbGVWaWV3TmFtZVxcbiAgICB1cGRhdGVkQXRcXG4gICAgc3RhdHVzXFxuICAgIGF1dGhvciB7XFxuICAgICAgbmFtZVxcbiAgICAgIGF2YXRhclxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFByb2plY3RBY2NTeW5jSXRlbSBvbiBBY2NTeW5jSXRlbSB7XFxuICAgIGlkXFxuICAgIHByb2plY3Qge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIG1vZGVsIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgICBhY2NSZWdpb25cXG4gICAgYWNjSHViSWRcXG4gICAgYWNjUHJvamVjdElkXFxuICAgIGFjY1Jvb3RQcm9qZWN0Rm9sZGVyVXJuXFxuICAgIGFjY0ZpbGVMaW5lYWdlVXJuXFxuICAgIGFjY0ZpbGVOYW1lXFxuICAgIGFjY0ZpbGVFeHRlbnNpb25cXG4gICAgYWNjRmlsZVZlcnNpb25JbmRleFxcbiAgICBhY2NGaWxlVmlld05hbWVcXG4gICAgdXBkYXRlZEF0XFxuICAgIHN0YXR1c1xcbiAgICBhdXRob3Ige1xcbiAgICAgIG5hbWVcXG4gICAgICBhdmF0YXJcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBDcmVhdGVBY2NTeW5jSXRlbSgkaW5wdXQ6IENyZWF0ZUFjY1N5bmNJdGVtSW5wdXQhKSB7XFxuICAgIGFjY1N5bmNJdGVtTXV0YXRpb25zIHtcXG4gICAgICBjcmVhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIG1vZGVsIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgbmFtZVxcbiAgICAgICAgfVxcbiAgICAgICAgYXV0aG9yIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgbmFtZVxcbiAgICAgICAgfVxcbiAgICAgICAgYWNjRmlsZU5hbWVcXG4gICAgICAgIGFjY0ZpbGVMaW5lYWdlVXJuXFxuICAgICAgICBhY2NGaWxlVmlld05hbWVcXG4gICAgICAgIHN0YXR1c1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBDcmVhdGVBY2NTeW5jSXRlbSgkaW5wdXQ6IENyZWF0ZUFjY1N5bmNJdGVtSW5wdXQhKSB7XFxuICAgIGFjY1N5bmNJdGVtTXV0YXRpb25zIHtcXG4gICAgICBjcmVhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIG1vZGVsIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgbmFtZVxcbiAgICAgICAgfVxcbiAgICAgICAgYXV0aG9yIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgbmFtZVxcbiAgICAgICAgfVxcbiAgICAgICAgYWNjRmlsZU5hbWVcXG4gICAgICAgIGFjY0ZpbGVMaW5lYWdlVXJuXFxuICAgICAgICBhY2NGaWxlVmlld05hbWVcXG4gICAgICAgIHN0YXR1c1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBEZWxldGVBY2NTeW5jSXRlbSgkaW5wdXQ6IERlbGV0ZUFjY1N5bmNJdGVtSW5wdXQhKSB7XFxuICAgIGFjY1N5bmNJdGVtTXV0YXRpb25zIHtcXG4gICAgICBkZWxldGUoaW5wdXQ6ICRpbnB1dClcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBEZWxldGVBY2NTeW5jSXRlbSgkaW5wdXQ6IERlbGV0ZUFjY1N5bmNJdGVtSW5wdXQhKSB7XFxuICAgIGFjY1N5bmNJdGVtTXV0YXRpb25zIHtcXG4gICAgICBkZWxldGUoaW5wdXQ6ICRpbnB1dClcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBVcGRhdGVBY2NTeW5jSXRlbSgkaW5wdXQ6IFVwZGF0ZUFjY1N5bmNJdGVtSW5wdXQhKSB7XFxuICAgIGFjY1N5bmNJdGVtTXV0YXRpb25zIHtcXG4gICAgICB1cGRhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHN0YXR1c1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBVcGRhdGVBY2NTeW5jSXRlbSgkaW5wdXQ6IFVwZGF0ZUFjY1N5bmNJdGVtSW5wdXQhKSB7XFxuICAgIGFjY1N5bmNJdGVtTXV0YXRpb25zIHtcXG4gICAgICB1cGRhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHN0YXR1c1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBQcm9qZWN0QWNjU3luY0l0ZW1zKCRpZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkaWQpIHtcXG4gICAgICBhY2NTeW5jSXRlbXMge1xcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAuLi5Qcm9qZWN0QWNjU3luY0l0ZW1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgUHJvamVjdEFjY1N5bmNJdGVtcygkaWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJGlkKSB7XFxuICAgICAgYWNjU3luY0l0ZW1zIHtcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgLi4uUHJvamVjdEFjY1N5bmNJdGVtXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IEFjY0ZvbGRlckRhdGEoXFxuICAgICR3b3Jrc3BhY2VTbHVnOiBTdHJpbmchXFxuICAgICRhY2NUb2tlbjogU3RyaW5nIVxcbiAgICAkYWNjUHJvamVjdElkOiBTdHJpbmchXFxuICAgICRhY2NGb2xkZXJJZDogU3RyaW5nIVxcbiAgKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkd29ya3NwYWNlU2x1Zykge1xcbiAgICAgIGlkXFxuICAgICAgaW50ZWdyYXRpb25zIHtcXG4gICAgICAgIGFjYyh0b2tlbjogJGFjY1Rva2VuKSB7XFxuICAgICAgICAgIGZvbGRlcihwcm9qZWN0SWQ6ICRhY2NQcm9qZWN0SWQsIGZvbGRlcklkOiAkYWNjRm9sZGVySWQpIHtcXG4gICAgICAgICAgICBpZFxcbiAgICAgICAgICAgIC4uLkFjY0ludGVncmF0aW9uRm9sZGVyTm9kZV9BY2NGb2xkZXJcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBBY2NGb2xkZXJEYXRhKFxcbiAgICAkd29ya3NwYWNlU2x1ZzogU3RyaW5nIVxcbiAgICAkYWNjVG9rZW46IFN0cmluZyFcXG4gICAgJGFjY1Byb2plY3RJZDogU3RyaW5nIVxcbiAgICAkYWNjRm9sZGVySWQ6IFN0cmluZyFcXG4gICkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHdvcmtzcGFjZVNsdWcpIHtcXG4gICAgICBpZFxcbiAgICAgIGludGVncmF0aW9ucyB7XFxuICAgICAgICBhY2ModG9rZW46ICRhY2NUb2tlbikge1xcbiAgICAgICAgICBmb2xkZXIocHJvamVjdElkOiAkYWNjUHJvamVjdElkLCBmb2xkZXJJZDogJGFjY0ZvbGRlcklkKSB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICAuLi5BY2NJbnRlZ3JhdGlvbkZvbGRlck5vZGVfQWNjRm9sZGVyXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgc3Vic2NyaXB0aW9uIE9uUHJvamVjdEFjY1N5bmNJdGVtVXBkYXRlZCgkaWQ6IFN0cmluZyEsICRpdGVtSWRzOiBbU3RyaW5nIV0pIHtcXG4gICAgcHJvamVjdEFjY1N5bmNJdGVtc1VwZGF0ZWQoaWQ6ICRpZCwgaXRlbUlkczogJGl0ZW1JZHMpIHtcXG4gICAgICB0eXBlXFxuICAgICAgYWNjU3luY0l0ZW0ge1xcbiAgICAgICAgLi4uUHJvamVjdEFjY1N5bmNJdGVtXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHN1YnNjcmlwdGlvbiBPblByb2plY3RBY2NTeW5jSXRlbVVwZGF0ZWQoJGlkOiBTdHJpbmchLCAkaXRlbUlkczogW1N0cmluZyFdKSB7XFxuICAgIHByb2plY3RBY2NTeW5jSXRlbXNVcGRhdGVkKGlkOiAkaWQsIGl0ZW1JZHM6ICRpdGVtSWRzKSB7XFxuICAgICAgdHlwZVxcbiAgICAgIGFjY1N5bmNJdGVtIHtcXG4gICAgICAgIC4uLlByb2plY3RBY2NTeW5jSXRlbVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBBY3RpdmVVc2VyTWFpbk1ldGFkYXRhIHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgaWRcXG4gICAgICBlbWFpbFxcbiAgICAgIGVtYWlscyB7XFxuICAgICAgICBpZFxcbiAgICAgICAgZW1haWxcXG4gICAgICAgIHZlcmlmaWVkXFxuICAgICAgICBwcmltYXJ5XFxuICAgICAgfVxcbiAgICAgIGNvbXBhbnlcXG4gICAgICBiaW9cXG4gICAgICBuYW1lXFxuICAgICAgcm9sZVxcbiAgICAgIGF2YXRhclxcbiAgICAgIGlzT25ib2FyZGluZ0ZpbmlzaGVkXFxuICAgICAgY3JlYXRlZEF0XFxuICAgICAgdmVyaWZpZWRcXG4gICAgICBub3RpZmljYXRpb25QcmVmZXJlbmNlc1xcbiAgICAgIHZlcnNpb25zKGxpbWl0OiAwKSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICAgIC4uLlByb2plY3RzQWRkX1VzZXJcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBBY3RpdmVVc2VyTWFpbk1ldGFkYXRhIHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgaWRcXG4gICAgICBlbWFpbFxcbiAgICAgIGVtYWlscyB7XFxuICAgICAgICBpZFxcbiAgICAgICAgZW1haWxcXG4gICAgICAgIHZlcmlmaWVkXFxuICAgICAgICBwcmltYXJ5XFxuICAgICAgfVxcbiAgICAgIGNvbXBhbnlcXG4gICAgICBiaW9cXG4gICAgICBuYW1lXFxuICAgICAgcm9sZVxcbiAgICAgIGF2YXRhclxcbiAgICAgIGlzT25ib2FyZGluZ0ZpbmlzaGVkXFxuICAgICAgY3JlYXRlZEF0XFxuICAgICAgdmVyaWZpZWRcXG4gICAgICBub3RpZmljYXRpb25QcmVmZXJlbmNlc1xcbiAgICAgIHZlcnNpb25zKGxpbWl0OiAwKSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICAgIC4uLlByb2plY3RzQWRkX1VzZXJcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBBY3RpdmVVc2VyUHJvamVjdHNUb01vdmUoJGZpbHRlcjogVXNlclByb2plY3RzRmlsdGVyKSB7XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgcHJvamVjdHMoZmlsdGVyOiAkZmlsdGVyKSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IEFjdGl2ZVVzZXJQcm9qZWN0c1RvTW92ZSgkZmlsdGVyOiBVc2VyUHJvamVjdHNGaWx0ZXIpIHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgaWRcXG4gICAgICBwcm9qZWN0cyhmaWx0ZXI6ICRmaWx0ZXIpIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdCBvbiBQZXJtaXNzaW9uQ2hlY2tSZXN1bHQge1xcbiAgICBhdXRob3JpemVkXFxuICAgIGNvZGVcXG4gICAgbWVzc2FnZVxcbiAgICBwYXlsb2FkXFxuICAgIGVycm9yTWVzc2FnZVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBGdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0IG9uIFBlcm1pc3Npb25DaGVja1Jlc3VsdCB7XFxuICAgIGF1dGhvcml6ZWRcXG4gICAgY29kZVxcbiAgICBtZXNzYWdlXFxuICAgIHBheWxvYWRcXG4gICAgZXJyb3JNZXNzYWdlXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIEZpbmlzaE9uYm9hcmRpbmcoJGlucHV0OiBPbmJvYXJkaW5nQ29tcGxldGlvbklucHV0KSB7XFxuICAgIGFjdGl2ZVVzZXJNdXRhdGlvbnMge1xcbiAgICAgIGZpbmlzaE9uYm9hcmRpbmcoaW5wdXQ6ICRpbnB1dClcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBGaW5pc2hPbmJvYXJkaW5nKCRpbnB1dDogT25ib2FyZGluZ0NvbXBsZXRpb25JbnB1dCkge1xcbiAgICBhY3RpdmVVc2VyTXV0YXRpb25zIHtcXG4gICAgICBmaW5pc2hPbmJvYXJkaW5nKGlucHV0OiAkaW5wdXQpXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gUmVxdWVzdFZlcmlmaWNhdGlvbkJ5RW1haWwoJGVtYWlsOiBTdHJpbmchKSB7XFxuICAgIHJlcXVlc3RWZXJpZmljYXRpb25CeUVtYWlsKGVtYWlsOiAkZW1haWwpXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIFJlcXVlc3RWZXJpZmljYXRpb25CeUVtYWlsKCRlbWFpbDogU3RyaW5nISkge1xcbiAgICByZXF1ZXN0VmVyaWZpY2F0aW9uQnlFbWFpbChlbWFpbDogJGVtYWlsKVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBBdXRoTG9naW5QYW5lbCB7XFxuICAgIHNlcnZlckluZm8ge1xcbiAgICAgIGF1dGhTdHJhdGVnaWVzIHtcXG4gICAgICAgIGlkXFxuICAgICAgfVxcbiAgICAgIC4uLkF1dGhTdGF0ZWdpZXNTZXJ2ZXJJbmZvRnJhZ21lbnRcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBBdXRoTG9naW5QYW5lbCB7XFxuICAgIHNlcnZlckluZm8ge1xcbiAgICAgIGF1dGhTdHJhdGVnaWVzIHtcXG4gICAgICAgIGlkXFxuICAgICAgfVxcbiAgICAgIC4uLkF1dGhTdGF0ZWdpZXNTZXJ2ZXJJbmZvRnJhZ21lbnRcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBBdXRoUmVnaXN0ZXJQYW5lbCgkdG9rZW46IFN0cmluZykge1xcbiAgICBzZXJ2ZXJJbmZvIHtcXG4gICAgICBpbnZpdGVPbmx5XFxuICAgICAgYXV0aFN0cmF0ZWdpZXMge1xcbiAgICAgICAgaWRcXG4gICAgICB9XFxuICAgICAgLi4uQXV0aFN0YXRlZ2llc1NlcnZlckluZm9GcmFnbWVudFxcbiAgICAgIC4uLlNlcnZlclRlcm1zT2ZTZXJ2aWNlUHJpdmFjeVBvbGljeUZyYWdtZW50XFxuICAgIH1cXG4gICAgc2VydmVySW52aXRlQnlUb2tlbih0b2tlbjogJHRva2VuKSB7XFxuICAgICAgaWRcXG4gICAgICBlbWFpbFxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IEF1dGhSZWdpc3RlclBhbmVsKCR0b2tlbjogU3RyaW5nKSB7XFxuICAgIHNlcnZlckluZm8ge1xcbiAgICAgIGludml0ZU9ubHlcXG4gICAgICBhdXRoU3RyYXRlZ2llcyB7XFxuICAgICAgICBpZFxcbiAgICAgIH1cXG4gICAgICAuLi5BdXRoU3RhdGVnaWVzU2VydmVySW5mb0ZyYWdtZW50XFxuICAgICAgLi4uU2VydmVyVGVybXNPZlNlcnZpY2VQcml2YWN5UG9saWN5RnJhZ21lbnRcXG4gICAgfVxcbiAgICBzZXJ2ZXJJbnZpdGVCeVRva2VuKHRva2VuOiAkdG9rZW4pIHtcXG4gICAgICBpZFxcbiAgICAgIGVtYWlsXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgQXV0aExvZ2luUGFuZWxXb3Jrc3BhY2VJbnZpdGUoJHRva2VuOiBTdHJpbmcpIHtcXG4gICAgd29ya3NwYWNlSW52aXRlKHRva2VuOiAkdG9rZW4pIHtcXG4gICAgICBpZFxcbiAgICAgIGVtYWlsXFxuICAgICAgLi4uQXV0aFdvcmtzcGFjZUludml0ZUhlYWRlcl9QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yXFxuICAgICAgLi4uQXV0aExvZ2luV2l0aEVtYWlsQmxvY2tfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvclxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IEF1dGhMb2dpblBhbmVsV29ya3NwYWNlSW52aXRlKCR0b2tlbjogU3RyaW5nKSB7XFxuICAgIHdvcmtzcGFjZUludml0ZSh0b2tlbjogJHRva2VuKSB7XFxuICAgICAgaWRcXG4gICAgICBlbWFpbFxcbiAgICAgIC4uLkF1dGhXb3Jrc3BhY2VJbnZpdGVIZWFkZXJfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvclxcbiAgICAgIC4uLkF1dGhMb2dpbldpdGhFbWFpbEJsb2NrX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3JcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBBdXRob3JpemFibGVBcHBNZXRhZGF0YSgkaWQ6IFN0cmluZyEpIHtcXG4gICAgYXBwKGlkOiAkaWQpIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgICBkZXNjcmlwdGlvblxcbiAgICAgIHRydXN0QnlEZWZhdWx0XFxuICAgICAgcmVkaXJlY3RVcmxcXG4gICAgICBzY29wZXMge1xcbiAgICAgICAgbmFtZVxcbiAgICAgICAgZGVzY3JpcHRpb25cXG4gICAgICB9XFxuICAgICAgYXV0aG9yIHtcXG4gICAgICAgIG5hbWVcXG4gICAgICAgIGlkXFxuICAgICAgICBhdmF0YXJcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgQXV0aG9yaXphYmxlQXBwTWV0YWRhdGEoJGlkOiBTdHJpbmchKSB7XFxuICAgIGFwcChpZDogJGlkKSB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgICAgZGVzY3JpcHRpb25cXG4gICAgICB0cnVzdEJ5RGVmYXVsdFxcbiAgICAgIHJlZGlyZWN0VXJsXFxuICAgICAgc2NvcGVzIHtcXG4gICAgICAgIG5hbWVcXG4gICAgICAgIGRlc2NyaXB0aW9uXFxuICAgICAgfVxcbiAgICAgIGF1dGhvciB7XFxuICAgICAgICBuYW1lXFxuICAgICAgICBpZFxcbiAgICAgICAgYXZhdGFyXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IEFjdGl2ZVVzZXJXb3Jrc3BhY2VFeGlzdGVuY2VDaGVjaygkZmlsdGVyOiBVc2VyUHJvamVjdHNGaWx0ZXIpIHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgaWRcXG4gICAgICB2ZXJpZmllZFxcbiAgICAgIGlzT25ib2FyZGluZ0ZpbmlzaGVkXFxuICAgICAgdmVyc2lvbnMobGltaXQ6IDApIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICB9XFxuICAgICAgcHJvamVjdHMoZmlsdGVyOiAkZmlsdGVyKSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICAgIHdvcmtzcGFjZXMobGltaXQ6IDApIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgc2x1Z1xcbiAgICAgICAgICBjcmVhdGlvblN0YXRlIHtcXG4gICAgICAgICAgICBjb21wbGV0ZWRcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICBkaXNjb3ZlcmFibGVXb3Jrc3BhY2VzIHtcXG4gICAgICAgIGlkXFxuICAgICAgfVxcbiAgICAgIHdvcmtzcGFjZUpvaW5SZXF1ZXN0cyhsaW1pdDogMCkge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBBY3RpdmVVc2VyV29ya3NwYWNlRXhpc3RlbmNlQ2hlY2soJGZpbHRlcjogVXNlclByb2plY3RzRmlsdGVyKSB7XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgdmVyaWZpZWRcXG4gICAgICBpc09uYm9hcmRpbmdGaW5pc2hlZFxcbiAgICAgIHZlcnNpb25zKGxpbWl0OiAwKSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICAgIHByb2plY3RzKGZpbHRlcjogJGZpbHRlcikge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgIH1cXG4gICAgICB3b3Jrc3BhY2VzKGxpbWl0OiAwKSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIHNsdWdcXG4gICAgICAgICAgY3JlYXRpb25TdGF0ZSB7XFxuICAgICAgICAgICAgY29tcGxldGVkXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgZGlzY292ZXJhYmxlV29ya3NwYWNlcyB7XFxuICAgICAgICBpZFxcbiAgICAgIH1cXG4gICAgICB3b3Jrc3BhY2VKb2luUmVxdWVzdHMobGltaXQ6IDApIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgQWN0aXZlVXNlckFjdGl2ZVdvcmtzcGFjZUNoZWNrIHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgaWRcXG4gICAgICBhY3RpdmVXb3Jrc3BhY2Uge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHJvbGVcXG4gICAgICAgIHNsdWdcXG4gICAgICB9XFxuICAgICAgd29ya3NwYWNlcyhsaW1pdDogMSkge1xcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBzbHVnXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IEFjdGl2ZVVzZXJBY3RpdmVXb3Jrc3BhY2VDaGVjayB7XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgYWN0aXZlV29ya3NwYWNlIHtcXG4gICAgICAgIGlkXFxuICAgICAgICByb2xlXFxuICAgICAgICBzbHVnXFxuICAgICAgfVxcbiAgICAgIHdvcmtzcGFjZXMobGltaXQ6IDEpIHtcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgc2x1Z1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBwcm9qZWN0V29ya3NwYWNlQWNjZXNzQ2hlY2soJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICByb2xlXFxuICAgICAgd29ya3NwYWNlIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBzbHVnXFxuICAgICAgICByb2xlXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IHByb2plY3RXb3Jrc3BhY2VBY2Nlc3NDaGVjaygkcHJvamVjdElkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHJvbGVcXG4gICAgICB3b3Jrc3BhY2Uge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHNsdWdcXG4gICAgICAgIHJvbGVcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgRnVuY3Rpb25SdW5TdGF0dXNGb3JTdW1tYXJ5IG9uIEF1dG9tYXRlRnVuY3Rpb25SdW4ge1xcbiAgICBpZFxcbiAgICBzdGF0dXNcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgRnVuY3Rpb25SdW5TdGF0dXNGb3JTdW1tYXJ5IG9uIEF1dG9tYXRlRnVuY3Rpb25SdW4ge1xcbiAgICBpZFxcbiAgICBzdGF0dXNcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgVHJpZ2dlcmVkQXV0b21hdGlvbnNTdGF0dXNTdW1tYXJ5IG9uIFRyaWdnZXJlZEF1dG9tYXRpb25zU3RhdHVzIHtcXG4gICAgaWRcXG4gICAgYXV0b21hdGlvblJ1bnMge1xcbiAgICAgIGlkXFxuICAgICAgZnVuY3Rpb25SdW5zIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5GdW5jdGlvblJ1blN0YXR1c0ZvclN1bW1hcnlcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgVHJpZ2dlcmVkQXV0b21hdGlvbnNTdGF0dXNTdW1tYXJ5IG9uIFRyaWdnZXJlZEF1dG9tYXRpb25zU3RhdHVzIHtcXG4gICAgaWRcXG4gICAgYXV0b21hdGlvblJ1bnMge1xcbiAgICAgIGlkXFxuICAgICAgZnVuY3Rpb25SdW5zIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5GdW5jdGlvblJ1blN0YXR1c0ZvclN1bW1hcnlcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgQXV0b21hdGlvblJ1bkRldGFpbHMgb24gQXV0b21hdGVSdW4ge1xcbiAgICBpZFxcbiAgICBzdGF0dXNcXG4gICAgZnVuY3Rpb25SdW5zIHtcXG4gICAgICAuLi5GdW5jdGlvblJ1blN0YXR1c0ZvclN1bW1hcnlcXG4gICAgICBzdGF0dXNNZXNzYWdlXFxuICAgIH1cXG4gICAgdHJpZ2dlciB7XFxuICAgICAgLi4uIG9uIFZlcnNpb25DcmVhdGVkVHJpZ2dlciB7XFxuICAgICAgICB2ZXJzaW9uIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgIH1cXG4gICAgICAgIG1vZGVsIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gICAgY3JlYXRlZEF0XFxuICAgIHVwZGF0ZWRBdFxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBBdXRvbWF0aW9uUnVuRGV0YWlscyBvbiBBdXRvbWF0ZVJ1biB7XFxuICAgIGlkXFxuICAgIHN0YXR1c1xcbiAgICBmdW5jdGlvblJ1bnMge1xcbiAgICAgIC4uLkZ1bmN0aW9uUnVuU3RhdHVzRm9yU3VtbWFyeVxcbiAgICAgIHN0YXR1c01lc3NhZ2VcXG4gICAgfVxcbiAgICB0cmlnZ2VyIHtcXG4gICAgICAuLi4gb24gVmVyc2lvbkNyZWF0ZWRUcmlnZ2VyIHtcXG4gICAgICAgIHZlcnNpb24ge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgfVxcbiAgICAgICAgbW9kZWwge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICBjcmVhdGVkQXRcXG4gICAgdXBkYXRlZEF0XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IEF1dG9tYXRpb25zU3RhdHVzT3JkZXJlZFJ1bnNfQXV0b21hdGlvblJ1biBvbiBBdXRvbWF0ZVJ1biB7XFxuICAgIGlkXFxuICAgIGF1dG9tYXRpb24ge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIGZ1bmN0aW9uUnVucyB7XFxuICAgICAgaWRcXG4gICAgICB1cGRhdGVkQXRcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBBdXRvbWF0aW9uc1N0YXR1c09yZGVyZWRSdW5zX0F1dG9tYXRpb25SdW4gb24gQXV0b21hdGVSdW4ge1xcbiAgICBpZFxcbiAgICBhdXRvbWF0aW9uIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgICBmdW5jdGlvblJ1bnMge1xcbiAgICAgIGlkXFxuICAgICAgdXBkYXRlZEF0XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgU2VhcmNoQXV0b21hdGVGdW5jdGlvblJlbGVhc2VJdGVtIG9uIEF1dG9tYXRlRnVuY3Rpb25SZWxlYXNlIHtcXG4gICAgaWRcXG4gICAgdmVyc2lvblRhZ1xcbiAgICBjcmVhdGVkQXRcXG4gICAgaW5wdXRTY2hlbWFcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgU2VhcmNoQXV0b21hdGVGdW5jdGlvblJlbGVhc2VJdGVtIG9uIEF1dG9tYXRlRnVuY3Rpb25SZWxlYXNlIHtcXG4gICAgaWRcXG4gICAgdmVyc2lvblRhZ1xcbiAgICBjcmVhdGVkQXRcXG4gICAgaW5wdXRTY2hlbWFcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gQ3JlYXRlQXV0b21hdGVGdW5jdGlvbigkaW5wdXQ6IENyZWF0ZUF1dG9tYXRlRnVuY3Rpb25JbnB1dCEpIHtcXG4gICAgYXV0b21hdGVNdXRhdGlvbnMge1xcbiAgICAgIGNyZWF0ZUZ1bmN0aW9uKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5BdXRvbWF0aW9uc0Z1bmN0aW9uc0NhcmRfQXV0b21hdGVGdW5jdGlvblxcbiAgICAgICAgLi4uQXV0b21hdGVGdW5jdGlvbkNyZWF0ZURpYWxvZ0RvbmVTdGVwX0F1dG9tYXRlRnVuY3Rpb25cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gQ3JlYXRlQXV0b21hdGVGdW5jdGlvbigkaW5wdXQ6IENyZWF0ZUF1dG9tYXRlRnVuY3Rpb25JbnB1dCEpIHtcXG4gICAgYXV0b21hdGVNdXRhdGlvbnMge1xcbiAgICAgIGNyZWF0ZUZ1bmN0aW9uKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5BdXRvbWF0aW9uc0Z1bmN0aW9uc0NhcmRfQXV0b21hdGVGdW5jdGlvblxcbiAgICAgICAgLi4uQXV0b21hdGVGdW5jdGlvbkNyZWF0ZURpYWxvZ0RvbmVTdGVwX0F1dG9tYXRlRnVuY3Rpb25cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gVXBkYXRlQXV0b21hdGVGdW5jdGlvbigkaW5wdXQ6IFVwZGF0ZUF1dG9tYXRlRnVuY3Rpb25JbnB1dCEpIHtcXG4gICAgYXV0b21hdGVNdXRhdGlvbnMge1xcbiAgICAgIHVwZGF0ZUZ1bmN0aW9uKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5BdXRvbWF0ZUZ1bmN0aW9uUGFnZV9BdXRvbWF0ZUZ1bmN0aW9uXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIFVwZGF0ZUF1dG9tYXRlRnVuY3Rpb24oJGlucHV0OiBVcGRhdGVBdXRvbWF0ZUZ1bmN0aW9uSW5wdXQhKSB7XFxuICAgIGF1dG9tYXRlTXV0YXRpb25zIHtcXG4gICAgICB1cGRhdGVGdW5jdGlvbihpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgLi4uQXV0b21hdGVGdW5jdGlvblBhZ2VfQXV0b21hdGVGdW5jdGlvblxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBSZWdlbmVyYXRlRnVuY3Rpb25Ub2tlbigkZnVuY3Rpb25JZDogU3RyaW5nISkge1xcbiAgICBhdXRvbWF0ZU11dGF0aW9ucyB7XFxuICAgICAgcmVnZW5lcmF0ZUZ1bmN0aW9uVG9rZW4oZnVuY3Rpb25JZDogJGZ1bmN0aW9uSWQpXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gUmVnZW5lcmF0ZUZ1bmN0aW9uVG9rZW4oJGZ1bmN0aW9uSWQ6IFN0cmluZyEpIHtcXG4gICAgYXV0b21hdGVNdXRhdGlvbnMge1xcbiAgICAgIHJlZ2VuZXJhdGVGdW5jdGlvblRva2VuKGZ1bmN0aW9uSWQ6ICRmdW5jdGlvbklkKVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFNlYXJjaEF1dG9tYXRlRnVuY3Rpb25SZWxlYXNlcyhcXG4gICAgJGZ1bmN0aW9uSWQ6IElEIVxcbiAgICAkY3Vyc29yOiBTdHJpbmdcXG4gICAgJGxpbWl0OiBJbnRcXG4gICAgJGZpbHRlcjogQXV0b21hdGVGdW5jdGlvblJlbGVhc2VzRmlsdGVyXFxuICApIHtcXG4gICAgYXV0b21hdGVGdW5jdGlvbihpZDogJGZ1bmN0aW9uSWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHJlbGVhc2VzKGN1cnNvcjogJGN1cnNvciwgbGltaXQ6ICRsaW1pdCwgZmlsdGVyOiAkZmlsdGVyKSB7XFxuICAgICAgICBjdXJzb3JcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgLi4uU2VhcmNoQXV0b21hdGVGdW5jdGlvblJlbGVhc2VJdGVtXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFNlYXJjaEF1dG9tYXRlRnVuY3Rpb25SZWxlYXNlcyhcXG4gICAgJGZ1bmN0aW9uSWQ6IElEIVxcbiAgICAkY3Vyc29yOiBTdHJpbmdcXG4gICAgJGxpbWl0OiBJbnRcXG4gICAgJGZpbHRlcjogQXV0b21hdGVGdW5jdGlvblJlbGVhc2VzRmlsdGVyXFxuICApIHtcXG4gICAgYXV0b21hdGVGdW5jdGlvbihpZDogJGZ1bmN0aW9uSWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHJlbGVhc2VzKGN1cnNvcjogJGN1cnNvciwgbGltaXQ6ICRsaW1pdCwgZmlsdGVyOiAkZmlsdGVyKSB7XFxuICAgICAgICBjdXJzb3JcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgLi4uU2VhcmNoQXV0b21hdGVGdW5jdGlvblJlbGVhc2VJdGVtXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IEZ1bmN0aW9uQWNjZXNzQ2hlY2soJGlkOiBJRCEpIHtcXG4gICAgYXV0b21hdGVGdW5jdGlvbihpZDogJGlkKSB7XFxuICAgICAgaWRcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBGdW5jdGlvbkFjY2Vzc0NoZWNrKCRpZDogSUQhKSB7XFxuICAgIGF1dG9tYXRlRnVuY3Rpb24oaWQ6ICRpZCkge1xcbiAgICAgIGlkXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgUHJvamVjdEF1dG9tYXRpb25DcmVhdGlvblB1YmxpY0tleXMoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJGF1dG9tYXRpb25JZDogU3RyaW5nIVxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIGF1dG9tYXRpb24oaWQ6ICRhdXRvbWF0aW9uSWQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBjcmVhdGlvblB1YmxpY0tleXNcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgUHJvamVjdEF1dG9tYXRpb25DcmVhdGlvblB1YmxpY0tleXMoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJGF1dG9tYXRpb25JZDogU3RyaW5nIVxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIGF1dG9tYXRpb24oaWQ6ICRhdXRvbWF0aW9uSWQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBjcmVhdGlvblB1YmxpY0tleXNcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgQmlsbGluZ0FjdGlvbnNfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgaW52aXRlZFRlYW0oZmlsdGVyOiAkaW52aXRlc0ZpbHRlcikge1xcbiAgICAgIGlkXFxuICAgIH1cXG4gICAgcGxhbiB7XFxuICAgICAgbmFtZVxcbiAgICAgIHN0YXR1c1xcbiAgICB9XFxuICAgIHN1YnNjcmlwdGlvbiB7XFxuICAgICAgYmlsbGluZ0ludGVydmFsXFxuICAgIH1cXG4gICAgdGVhbSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICAgIGRlZmF1bHRSZWdpb24ge1xcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBCaWxsaW5nQWN0aW9uc19Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBpbnZpdGVkVGVhbShmaWx0ZXI6ICRpbnZpdGVzRmlsdGVyKSB7XFxuICAgICAgaWRcXG4gICAgfVxcbiAgICBwbGFuIHtcXG4gICAgICBuYW1lXFxuICAgICAgc3RhdHVzXFxuICAgIH1cXG4gICAgc3Vic2NyaXB0aW9uIHtcXG4gICAgICBiaWxsaW5nSW50ZXJ2YWxcXG4gICAgfVxcbiAgICB0ZWFtIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgZGVmYXVsdFJlZ2lvbiB7XFxuICAgICAgbmFtZVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByaWNlc1ByaWNlIG9uIFByaWNlIHtcXG4gICAgYW1vdW50XFxuICAgIGN1cnJlbmN5U3ltYm9sXFxuICAgIGN1cnJlbmN5XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFByaWNlc1ByaWNlIG9uIFByaWNlIHtcXG4gICAgYW1vdW50XFxuICAgIGN1cnJlbmN5U3ltYm9sXFxuICAgIGN1cnJlbmN5XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByaWNlc1dvcmtzcGFjZVBsYW5QcmljZSBvbiBXb3Jrc3BhY2VQbGFuUHJpY2Uge1xcbiAgICBtb250aGx5IHtcXG4gICAgICAuLi5QcmljZXNQcmljZVxcbiAgICB9XFxuICAgIHllYXJseSB7XFxuICAgICAgLi4uUHJpY2VzUHJpY2VcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBQcmljZXNXb3Jrc3BhY2VQbGFuUHJpY2Ugb24gV29ya3NwYWNlUGxhblByaWNlIHtcXG4gICAgbW9udGhseSB7XFxuICAgICAgLi4uUHJpY2VzUHJpY2VcXG4gICAgfVxcbiAgICB5ZWFybHkge1xcbiAgICAgIC4uLlByaWNlc1ByaWNlXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJpY2VzV29ya3NwYWNlUGFpZFBsYW5QcmljZXMgb24gV29ya3NwYWNlUGFpZFBsYW5QcmljZXMge1xcbiAgICB0ZWFtIHtcXG4gICAgICAuLi5QcmljZXNXb3Jrc3BhY2VQbGFuUHJpY2VcXG4gICAgfVxcbiAgICB0ZWFtVW5saW1pdGVkIHtcXG4gICAgICAuLi5QcmljZXNXb3Jrc3BhY2VQbGFuUHJpY2VcXG4gICAgfVxcbiAgICBwcm8ge1xcbiAgICAgIC4uLlByaWNlc1dvcmtzcGFjZVBsYW5QcmljZVxcbiAgICB9XFxuICAgIHByb1VubGltaXRlZCB7XFxuICAgICAgLi4uUHJpY2VzV29ya3NwYWNlUGxhblByaWNlXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJpY2VzV29ya3NwYWNlUGFpZFBsYW5QcmljZXMgb24gV29ya3NwYWNlUGFpZFBsYW5QcmljZXMge1xcbiAgICB0ZWFtIHtcXG4gICAgICAuLi5QcmljZXNXb3Jrc3BhY2VQbGFuUHJpY2VcXG4gICAgfVxcbiAgICB0ZWFtVW5saW1pdGVkIHtcXG4gICAgICAuLi5QcmljZXNXb3Jrc3BhY2VQbGFuUHJpY2VcXG4gICAgfVxcbiAgICBwcm8ge1xcbiAgICAgIC4uLlByaWNlc1dvcmtzcGFjZVBsYW5QcmljZVxcbiAgICB9XFxuICAgIHByb1VubGltaXRlZCB7XFxuICAgICAgLi4uUHJpY2VzV29ya3NwYWNlUGxhblByaWNlXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJpY2VzQ3VycmVuY3lCYXNlZFByaWNlcyBvbiBDdXJyZW5jeUJhc2VkUHJpY2VzIHtcXG4gICAgZ2JwIHtcXG4gICAgICAuLi5QcmljZXNXb3Jrc3BhY2VQYWlkUGxhblByaWNlc1xcbiAgICB9XFxuICAgIHVzZCB7XFxuICAgICAgLi4uUHJpY2VzV29ya3NwYWNlUGFpZFBsYW5QcmljZXNcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBQcmljZXNDdXJyZW5jeUJhc2VkUHJpY2VzIG9uIEN1cnJlbmN5QmFzZWRQcmljZXMge1xcbiAgICBnYnAge1xcbiAgICAgIC4uLlByaWNlc1dvcmtzcGFjZVBhaWRQbGFuUHJpY2VzXFxuICAgIH1cXG4gICAgdXNkIHtcXG4gICAgICAuLi5QcmljZXNXb3Jrc3BhY2VQYWlkUGxhblByaWNlc1xcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFVzZVdvcmtzcGFjZVBsYW5QcmljZXMge1xcbiAgICBzZXJ2ZXJJbmZvIHtcXG4gICAgICB3b3Jrc3BhY2VzIHtcXG4gICAgICAgIHBsYW5QcmljZXMge1xcbiAgICAgICAgICAuLi5QcmljZXNDdXJyZW5jeUJhc2VkUHJpY2VzXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFVzZVdvcmtzcGFjZVBsYW5QcmljZXMge1xcbiAgICBzZXJ2ZXJJbmZvIHtcXG4gICAgICB3b3Jrc3BhY2VzIHtcXG4gICAgICAgIHBsYW5QcmljZXMge1xcbiAgICAgICAgICAuLi5QcmljZXNDdXJyZW5jeUJhc2VkUHJpY2VzXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFVzZUFjdGl2ZVdvcmtzcGFjZVBsYW5QcmljZXMoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgaWRcXG4gICAgICBwbGFuUHJpY2VzIHtcXG4gICAgICAgIC4uLlByaWNlc1dvcmtzcGFjZVBhaWRQbGFuUHJpY2VzXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFVzZUFjdGl2ZVdvcmtzcGFjZVBsYW5QcmljZXMoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgaWRcXG4gICAgICBwbGFuUHJpY2VzIHtcXG4gICAgICAgIC4uLlByaWNlc1dvcmtzcGFjZVBhaWRQbGFuUHJpY2VzXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIEJpbGxpbmdDcmVhdGVDaGVja291dFNlc3Npb24oJGlucHV0OiBDaGVja291dFNlc3Npb25JbnB1dCEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICBiaWxsaW5nIHtcXG4gICAgICAgIGNyZWF0ZUNoZWNrb3V0U2Vzc2lvbihpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAgIHVybFxcbiAgICAgICAgICBpZFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBCaWxsaW5nQ3JlYXRlQ2hlY2tvdXRTZXNzaW9uKCRpbnB1dDogQ2hlY2tvdXRTZXNzaW9uSW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgYmlsbGluZyB7XFxuICAgICAgICBjcmVhdGVDaGVja291dFNlc3Npb24oaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgICB1cmxcXG4gICAgICAgICAgaWRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gQmlsbGluZ1VwZ3JhZGVQbGFuKCRpbnB1dDogVXBncmFkZVBsYW5JbnB1dCEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICBiaWxsaW5nIHtcXG4gICAgICAgIHVwZ3JhZGVQbGFuKGlucHV0OiAkaW5wdXQpXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIEJpbGxpbmdVcGdyYWRlUGxhbigkaW5wdXQ6IFVwZ3JhZGVQbGFuSW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgYmlsbGluZyB7XFxuICAgICAgICB1cGdyYWRlUGxhbihpbnB1dDogJGlucHV0KVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBNZW50aW9uc1VzZXJTZWFyY2goJHF1ZXJ5OiBTdHJpbmchLCAkcHJvamVjdElkOiBTdHJpbmcpIHtcXG4gICAgdXNlcnMoaW5wdXQ6IHsgcXVlcnk6ICRxdWVyeSwgbGltaXQ6IDUsIGN1cnNvcjogbnVsbCwgcHJvamVjdElkOiAkcHJvamVjdElkIH0pIHtcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICBpZFxcbiAgICAgICAgbmFtZVxcbiAgICAgICAgY29tcGFueVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBNZW50aW9uc1VzZXJTZWFyY2goJHF1ZXJ5OiBTdHJpbmchLCAkcHJvamVjdElkOiBTdHJpbmcpIHtcXG4gICAgdXNlcnMoaW5wdXQ6IHsgcXVlcnk6ICRxdWVyeSwgbGltaXQ6IDUsIGN1cnNvcjogbnVsbCwgcHJvamVjdElkOiAkcHJvamVjdElkIH0pIHtcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICBpZFxcbiAgICAgICAgbmFtZVxcbiAgICAgICAgY29tcGFueVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBTZXJ2ZXJJbmZvQmxvYlNpemVMaW1pdCB7XFxuICAgIHNlcnZlckluZm8ge1xcbiAgICAgIGNvbmZpZ3VyYXRpb24ge1xcbiAgICAgICAgYmxvYlNpemVMaW1pdEJ5dGVzXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFNlcnZlckluZm9CbG9iU2l6ZUxpbWl0IHtcXG4gICAgc2VydmVySW5mbyB7XFxuICAgICAgY29uZmlndXJhdGlvbiB7XFxuICAgICAgICBibG9iU2l6ZUxpbWl0Qnl0ZXNcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgU2VydmVySW5mb0FsbFNjb3BlcyB7XFxuICAgIHNlcnZlckluZm8ge1xcbiAgICAgIHNjb3BlcyB7XFxuICAgICAgICBuYW1lXFxuICAgICAgICBkZXNjcmlwdGlvblxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBTZXJ2ZXJJbmZvQWxsU2NvcGVzIHtcXG4gICAgc2VydmVySW5mbyB7XFxuICAgICAgc2NvcGVzIHtcXG4gICAgICAgIG5hbWVcXG4gICAgICAgIGRlc2NyaXB0aW9uXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFNlcnZlckluZm9FbWFpbFZlcmlmaWNhdGlvblRpbWVvdXQge1xcbiAgICBzZXJ2ZXJJbmZvIHtcXG4gICAgICBjb25maWd1cmF0aW9uIHtcXG4gICAgICAgIGVtYWlsVmVyaWZpY2F0aW9uVGltZW91dE1pbnV0ZXNcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgU2VydmVySW5mb0VtYWlsVmVyaWZpY2F0aW9uVGltZW91dCB7XFxuICAgIHNlcnZlckluZm8ge1xcbiAgICAgIGNvbmZpZ3VyYXRpb24ge1xcbiAgICAgICAgZW1haWxWZXJpZmljYXRpb25UaW1lb3V0TWludXRlc1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBQcm9qZWN0TW9kZWxzU2VsZWN0b3JWYWx1ZXMoJHByb2plY3RJZDogU3RyaW5nISwgJGN1cnNvcjogU3RyaW5nKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIG1vZGVscyhsaW1pdDogMTAwLCBjdXJzb3I6ICRjdXJzb3IpIHtcXG4gICAgICAgIGN1cnNvclxcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAuLi5Db21tb25Nb2RlbFNlbGVjdG9yTW9kZWxcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgUHJvamVjdE1vZGVsc1NlbGVjdG9yVmFsdWVzKCRwcm9qZWN0SWQ6IFN0cmluZyEsICRjdXJzb3I6IFN0cmluZykge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBtb2RlbHMobGltaXQ6IDEwMCwgY3Vyc29yOiAkY3Vyc29yKSB7XFxuICAgICAgICBjdXJzb3JcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgLi4uQ29tbW9uTW9kZWxTZWxlY3Rvck1vZGVsXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFVzZUZhaWxlZEZpbGVJbXBvcnRKb2JVdGlsc19GaWxlVXBsb2FkIG9uIEZpbGVVcGxvYWQge1xcbiAgICBpZFxcbiAgICBmaWxlTmFtZVxcbiAgICBwcm9qZWN0SWRcXG4gICAgbW9kZWxJZFxcbiAgICB1cGRhdGVkQXRcXG4gICAgY29udmVydGVkU3RhdHVzXFxuICAgIGNvbnZlcnRlZE1lc3NhZ2VcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgVXNlRmFpbGVkRmlsZUltcG9ydEpvYlV0aWxzX0ZpbGVVcGxvYWQgb24gRmlsZVVwbG9hZCB7XFxuICAgIGlkXFxuICAgIGZpbGVOYW1lXFxuICAgIHByb2plY3RJZFxcbiAgICBtb2RlbElkXFxuICAgIHVwZGF0ZWRBdFxcbiAgICBjb252ZXJ0ZWRTdGF0dXNcXG4gICAgY29udmVydGVkTWVzc2FnZVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBHZW5lcmF0ZVVwbG9hZFVybCgkaW5wdXQ6IEdlbmVyYXRlRmlsZVVwbG9hZFVybElucHV0ISkge1xcbiAgICBmaWxlVXBsb2FkTXV0YXRpb25zIHtcXG4gICAgICBnZW5lcmF0ZVVwbG9hZFVybChpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICB1cmxcXG4gICAgICAgIGZpbGVJZFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBHZW5lcmF0ZVVwbG9hZFVybCgkaW5wdXQ6IEdlbmVyYXRlRmlsZVVwbG9hZFVybElucHV0ISkge1xcbiAgICBmaWxlVXBsb2FkTXV0YXRpb25zIHtcXG4gICAgICBnZW5lcmF0ZVVwbG9hZFVybChpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICB1cmxcXG4gICAgICAgIGZpbGVJZFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBTdGFydEZpbGVJbXBvcnQoJGlucHV0OiBTdGFydEZpbGVJbXBvcnRJbnB1dCEpIHtcXG4gICAgZmlsZVVwbG9hZE11dGF0aW9ucyB7XFxuICAgICAgc3RhcnRGaWxlSW1wb3J0KGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIFN0YXJ0RmlsZUltcG9ydCgkaW5wdXQ6IFN0YXJ0RmlsZUltcG9ydElucHV0ISkge1xcbiAgICBmaWxlVXBsb2FkTXV0YXRpb25zIHtcXG4gICAgICBzdGFydEZpbGVJbXBvcnQoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaWRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgVXNlRmlsZUltcG9ydF9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBVc2VGaWxlSW1wb3J0X1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFVzZUZpbGVJbXBvcnRfTW9kZWwgb24gTW9kZWwge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFVzZUZpbGVJbXBvcnRfTW9kZWwgb24gTW9kZWwge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IE1haW5TZXJ2ZXJJbmZvRGF0YSB7XFxuICAgIHNlcnZlckluZm8ge1xcbiAgICAgIGFkbWluQ29udGFjdFxcbiAgICAgIGNhbm9uaWNhbFVybFxcbiAgICAgIGNvbXBhbnlcXG4gICAgICBkZXNjcmlwdGlvblxcbiAgICAgIGd1ZXN0TW9kZUVuYWJsZWRcXG4gICAgICBpbnZpdGVPbmx5XFxuICAgICAgbmFtZVxcbiAgICAgIHRlcm1zT2ZTZXJ2aWNlXFxuICAgICAgdmVyc2lvblxcbiAgICAgIGF1dG9tYXRlVXJsXFxuICAgICAgY29uZmlndXJhdGlvbiB7XFxuICAgICAgICBpc0VtYWlsRW5hYmxlZFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBNYWluU2VydmVySW5mb0RhdGEge1xcbiAgICBzZXJ2ZXJJbmZvIHtcXG4gICAgICBhZG1pbkNvbnRhY3RcXG4gICAgICBjYW5vbmljYWxVcmxcXG4gICAgICBjb21wYW55XFxuICAgICAgZGVzY3JpcHRpb25cXG4gICAgICBndWVzdE1vZGVFbmFibGVkXFxuICAgICAgaW52aXRlT25seVxcbiAgICAgIG5hbWVcXG4gICAgICB0ZXJtc09mU2VydmljZVxcbiAgICAgIHZlcnNpb25cXG4gICAgICBhdXRvbWF0ZVVybFxcbiAgICAgIGNvbmZpZ3VyYXRpb24ge1xcbiAgICAgICAgaXNFbWFpbEVuYWJsZWRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gQ3JlYXRlRGFzaGJvYXJkKFxcbiAgICAkd29ya3NwYWNlOiBXb3Jrc3BhY2VJZGVudGlmaWVyIVxcbiAgICAkaW5wdXQ6IERhc2hib2FyZENyZWF0ZUlucHV0IVxcbiAgKSB7XFxuICAgIGRhc2hib2FyZE11dGF0aW9ucyB7XFxuICAgICAgY3JlYXRlKHdvcmtzcGFjZTogJHdvcmtzcGFjZSwgaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHdvcmtzcGFjZSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIENyZWF0ZURhc2hib2FyZChcXG4gICAgJHdvcmtzcGFjZTogV29ya3NwYWNlSWRlbnRpZmllciFcXG4gICAgJGlucHV0OiBEYXNoYm9hcmRDcmVhdGVJbnB1dCFcXG4gICkge1xcbiAgICBkYXNoYm9hcmRNdXRhdGlvbnMge1xcbiAgICAgIGNyZWF0ZSh3b3Jrc3BhY2U6ICR3b3Jrc3BhY2UsIGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICB3b3Jrc3BhY2Uge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBVcGRhdGVEYXNoYm9hcmQoJGlucHV0OiBEYXNoYm9hcmRVcGRhdGVJbnB1dCEpIHtcXG4gICAgZGFzaGJvYXJkTXV0YXRpb25zIHtcXG4gICAgICB1cGRhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIG5hbWVcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gVXBkYXRlRGFzaGJvYXJkKCRpbnB1dDogRGFzaGJvYXJkVXBkYXRlSW5wdXQhKSB7XFxuICAgIGRhc2hib2FyZE11dGF0aW9ucyB7XFxuICAgICAgdXBkYXRlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBuYW1lXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIERlbGV0ZURhc2hib2FyZCgkaWQ6IFN0cmluZyEpIHtcXG4gICAgZGFzaGJvYXJkTXV0YXRpb25zIHtcXG4gICAgICBkZWxldGUoaWQ6ICRpZClcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBEZWxldGVEYXNoYm9hcmQoJGlkOiBTdHJpbmchKSB7XFxuICAgIGRhc2hib2FyZE11dGF0aW9ucyB7XFxuICAgICAgZGVsZXRlKGlkOiAkaWQpXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgRGFzaGJvYXJkQWNjZXNzQ2hlY2soJGlkOiBTdHJpbmchKSB7XFxuICAgIGRhc2hib2FyZChpZDogJGlkKSB7XFxuICAgICAgaWRcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBEYXNoYm9hcmRBY2Nlc3NDaGVjaygkaWQ6IFN0cmluZyEpIHtcXG4gICAgZGFzaGJvYXJkKGlkOiAkaWQpIHtcXG4gICAgICBpZFxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IERhc2hib2FyZCgkaWQ6IFN0cmluZyEpIHtcXG4gICAgZGFzaGJvYXJkKGlkOiAkaWQpIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLldvcmtzcGFjZURhc2hib2FyZHNfRGFzaGJvYXJkXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgRGFzaGJvYXJkKCRpZDogU3RyaW5nISkge1xcbiAgICBkYXNoYm9hcmQoaWQ6ICRpZCkge1xcbiAgICAgIGlkXFxuICAgICAgLi4uV29ya3NwYWNlRGFzaGJvYXJkc19EYXNoYm9hcmRcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBXb3Jrc3BhY2VEYXNoYm9hcmRzKFxcbiAgICAkd29ya3NwYWNlU2x1ZzogU3RyaW5nIVxcbiAgICAkY3Vyc29yOiBTdHJpbmdcXG4gICAgJGZpbHRlcjogV29ya3NwYWNlRGFzaGJvYXJkc0ZpbHRlclxcbiAgKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkd29ya3NwYWNlU2x1Zykge1xcbiAgICAgIGlkXFxuICAgICAgZGFzaGJvYXJkcyhjdXJzb3I6ICRjdXJzb3IsIGZpbHRlcjogJGZpbHRlcikge1xcbiAgICAgICAgY3Vyc29yXFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLkRhc2hib2FyZHNDYXJkX0Rhc2hib2FyZFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBXb3Jrc3BhY2VEYXNoYm9hcmRzKFxcbiAgICAkd29ya3NwYWNlU2x1ZzogU3RyaW5nIVxcbiAgICAkY3Vyc29yOiBTdHJpbmdcXG4gICAgJGZpbHRlcjogV29ya3NwYWNlRGFzaGJvYXJkc0ZpbHRlclxcbiAgKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkd29ya3NwYWNlU2x1Zykge1xcbiAgICAgIGlkXFxuICAgICAgZGFzaGJvYXJkcyhjdXJzb3I6ICRjdXJzb3IsIGZpbHRlcjogJGZpbHRlcikge1xcbiAgICAgICAgY3Vyc29yXFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLkRhc2hib2FyZHNDYXJkX0Rhc2hib2FyZFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBQcm9qZWN0RGFzaGJvYXJkcyhcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkY3Vyc29yOiBTdHJpbmdcXG4gICAgJGZpbHRlcjogUHJvamVjdERhc2hib2FyZHNGaWx0ZXJcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICB3b3Jrc3BhY2Uge1xcbiAgICAgICAgc2x1Z1xcbiAgICAgIH1cXG4gICAgICBkYXNoYm9hcmRzKGN1cnNvcjogJGN1cnNvciwgZmlsdGVyOiAkZmlsdGVyKSB7XFxuICAgICAgICBjdXJzb3JcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uRGFzaGJvYXJkc0NhcmRfRGFzaGJvYXJkXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFByb2plY3REYXNoYm9hcmRzKFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRjdXJzb3I6IFN0cmluZ1xcbiAgICAkZmlsdGVyOiBQcm9qZWN0RGFzaGJvYXJkc0ZpbHRlclxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHdvcmtzcGFjZSB7XFxuICAgICAgICBzbHVnXFxuICAgICAgfVxcbiAgICAgIGRhc2hib2FyZHMoY3Vyc29yOiAkY3Vyc29yLCBmaWx0ZXI6ICRmaWx0ZXIpIHtcXG4gICAgICAgIGN1cnNvclxcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICAuLi5EYXNoYm9hcmRzQ2FyZF9EYXNoYm9hcmRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gRGVsZXRlQWNjZXNzVG9rZW4oJHRva2VuOiBTdHJpbmchKSB7XFxuICAgIGFwaVRva2VuUmV2b2tlKHRva2VuOiAkdG9rZW4pXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIERlbGV0ZUFjY2Vzc1Rva2VuKCR0b2tlbjogU3RyaW5nISkge1xcbiAgICBhcGlUb2tlblJldm9rZSh0b2tlbjogJHRva2VuKVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBDcmVhdGVBY2Nlc3NUb2tlbigkdG9rZW46IEFwaVRva2VuQ3JlYXRlSW5wdXQhKSB7XFxuICAgIGFwaVRva2VuQ3JlYXRlKHRva2VuOiAkdG9rZW4pXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIENyZWF0ZUFjY2Vzc1Rva2VuKCR0b2tlbjogQXBpVG9rZW5DcmVhdGVJbnB1dCEpIHtcXG4gICAgYXBpVG9rZW5DcmVhdGUodG9rZW46ICR0b2tlbilcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gRGVsZXRlQXBwbGljYXRpb24oJGFwcElkOiBTdHJpbmchKSB7XFxuICAgIGFwcERlbGV0ZShhcHBJZDogJGFwcElkKVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBEZWxldGVBcHBsaWNhdGlvbigkYXBwSWQ6IFN0cmluZyEpIHtcXG4gICAgYXBwRGVsZXRlKGFwcElkOiAkYXBwSWQpXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIENyZWF0ZUFwcGxpY2F0aW9uKCRhcHA6IEFwcENyZWF0ZUlucHV0ISkge1xcbiAgICBhcHBDcmVhdGUoYXBwOiAkYXBwKVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBDcmVhdGVBcHBsaWNhdGlvbigkYXBwOiBBcHBDcmVhdGVJbnB1dCEpIHtcXG4gICAgYXBwQ3JlYXRlKGFwcDogJGFwcClcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gRWRpdEFwcGxpY2F0aW9uKCRhcHA6IEFwcFVwZGF0ZUlucHV0ISkge1xcbiAgICBhcHBVcGRhdGUoYXBwOiAkYXBwKVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBFZGl0QXBwbGljYXRpb24oJGFwcDogQXBwVXBkYXRlSW5wdXQhKSB7XFxuICAgIGFwcFVwZGF0ZShhcHA6ICRhcHApXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIFJldm9rZUFwcEFjY2VzcygkYXBwSWQ6IFN0cmluZyEpIHtcXG4gICAgYXBwUmV2b2tlQWNjZXNzKGFwcElkOiAkYXBwSWQpXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIFJldm9rZUFwcEFjY2VzcygkYXBwSWQ6IFN0cmluZyEpIHtcXG4gICAgYXBwUmV2b2tlQWNjZXNzKGFwcElkOiAkYXBwSWQpXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IERldmVsb3BlclNldHRpbmdzQWNjZXNzVG9rZW5zIHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgaWRcXG4gICAgICBhcGlUb2tlbnMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIG5hbWVcXG4gICAgICAgIGxhc3RVc2VkXFxuICAgICAgICBsYXN0Q2hhcnNcXG4gICAgICAgIGNyZWF0ZWRBdFxcbiAgICAgICAgc2NvcGVzXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IERldmVsb3BlclNldHRpbmdzQWNjZXNzVG9rZW5zIHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgaWRcXG4gICAgICBhcGlUb2tlbnMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIG5hbWVcXG4gICAgICAgIGxhc3RVc2VkXFxuICAgICAgICBsYXN0Q2hhcnNcXG4gICAgICAgIGNyZWF0ZWRBdFxcbiAgICAgICAgc2NvcGVzXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IERldmVsb3BlclNldHRpbmdzQXBwbGljYXRpb25zIHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgY3JlYXRlZEFwcHMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHNlY3JldFxcbiAgICAgICAgbmFtZVxcbiAgICAgICAgZGVzY3JpcHRpb25cXG4gICAgICAgIHJlZGlyZWN0VXJsXFxuICAgICAgICBzY29wZXMge1xcbiAgICAgICAgICBuYW1lXFxuICAgICAgICAgIGRlc2NyaXB0aW9uXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIGlkXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgRGV2ZWxvcGVyU2V0dGluZ3NBcHBsaWNhdGlvbnMge1xcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICBjcmVhdGVkQXBwcyB7XFxuICAgICAgICBpZFxcbiAgICAgICAgc2VjcmV0XFxuICAgICAgICBuYW1lXFxuICAgICAgICBkZXNjcmlwdGlvblxcbiAgICAgICAgcmVkaXJlY3RVcmxcXG4gICAgICAgIHNjb3BlcyB7XFxuICAgICAgICAgIG5hbWVcXG4gICAgICAgICAgZGVzY3JpcHRpb25cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgaWRcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBEZXZlbG9wZXJTZXR0aW5nc0F1dGhvcml6ZWRBcHBzIHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgaWRcXG4gICAgICBhdXRob3JpemVkQXBwcyB7XFxuICAgICAgICBpZFxcbiAgICAgICAgZGVzY3JpcHRpb25cXG4gICAgICAgIG5hbWVcXG4gICAgICAgIGF1dGhvciB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIG5hbWVcXG4gICAgICAgICAgYXZhdGFyXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IERldmVsb3BlclNldHRpbmdzQXV0aG9yaXplZEFwcHMge1xcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICBpZFxcbiAgICAgIGF1dGhvcml6ZWRBcHBzIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBkZXNjcmlwdGlvblxcbiAgICAgICAgbmFtZVxcbiAgICAgICAgYXV0aG9yIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgbmFtZVxcbiAgICAgICAgICBhdmF0YXJcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgU2VhcmNoUHJvamVjdHMoXFxuICAgICRzZWFyY2g6IFN0cmluZ1xcbiAgICAkb25seVdpdGhSb2xlczogW1N0cmluZyFdID0gbnVsbFxcbiAgICAkd29ya3NwYWNlSWQ6IElEXFxuICApIHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgcHJvamVjdHMoXFxuICAgICAgICBsaW1pdDogMTBcXG4gICAgICAgIGZpbHRlcjoge1xcbiAgICAgICAgICBzZWFyY2g6ICRzZWFyY2hcXG4gICAgICAgICAgb25seVdpdGhSb2xlczogJG9ubHlXaXRoUm9sZXNcXG4gICAgICAgICAgd29ya3NwYWNlSWQ6ICR3b3Jrc3BhY2VJZFxcbiAgICAgICAgfVxcbiAgICAgICkge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAuLi5Gb3JtU2VsZWN0UHJvamVjdHNfUHJvamVjdFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBTZWFyY2hQcm9qZWN0cyhcXG4gICAgJHNlYXJjaDogU3RyaW5nXFxuICAgICRvbmx5V2l0aFJvbGVzOiBbU3RyaW5nIV0gPSBudWxsXFxuICAgICR3b3Jrc3BhY2VJZDogSURcXG4gICkge1xcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICBwcm9qZWN0cyhcXG4gICAgICAgIGxpbWl0OiAxMFxcbiAgICAgICAgZmlsdGVyOiB7XFxuICAgICAgICAgIHNlYXJjaDogJHNlYXJjaFxcbiAgICAgICAgICBvbmx5V2l0aFJvbGVzOiAkb25seVdpdGhSb2xlc1xcbiAgICAgICAgICB3b3Jrc3BhY2VJZDogJHdvcmtzcGFjZUlkXFxuICAgICAgICB9XFxuICAgICAgKSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIC4uLkZvcm1TZWxlY3RQcm9qZWN0c19Qcm9qZWN0XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFNlYXJjaFByb2plY3RNb2RlbHMoJHNlYXJjaDogU3RyaW5nLCAkcHJvamVjdElkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIG1vZGVscyhsaW1pdDogMTAsIGZpbHRlcjogeyBzZWFyY2g6ICRzZWFyY2ggfSkge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAuLi5Gb3JtU2VsZWN0TW9kZWxzX01vZGVsXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFNlYXJjaFByb2plY3RNb2RlbHMoJHNlYXJjaDogU3RyaW5nLCAkcHJvamVjdElkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIG1vZGVscyhsaW1pdDogMTAsIGZpbHRlcjogeyBzZWFyY2g6ICRzZWFyY2ggfSkge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAuLi5Gb3JtU2VsZWN0TW9kZWxzX01vZGVsXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IEludGVyY29tQWN0aXZlV29ya3NwYWNlKCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIGlkXFxuICAgICAgcGxhbiB7XFxuICAgICAgICBuYW1lXFxuICAgICAgICBzdGF0dXNcXG4gICAgICB9XFxuICAgICAgc2VhdHMge1xcbiAgICAgICAgZWRpdG9ycyB7XFxuICAgICAgICAgIGFzc2lnbmVkXFxuICAgICAgICAgIGF2YWlsYWJsZVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBJbnRlcmNvbUFjdGl2ZVdvcmtzcGFjZSgkc2x1ZzogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHNsdWcpIHtcXG4gICAgICBpZFxcbiAgICAgIHBsYW4ge1xcbiAgICAgICAgbmFtZVxcbiAgICAgICAgc3RhdHVzXFxuICAgICAgfVxcbiAgICAgIHNlYXRzIHtcXG4gICAgICAgIGVkaXRvcnMge1xcbiAgICAgICAgICBhc3NpZ25lZFxcbiAgICAgICAgICBhdmFpbGFibGVcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgSW52aXRlVXNlclNlYXJjaCgkaW5wdXQ6IFVzZXJzUmV0cmlldmFsSW5wdXQhKSB7XFxuICAgIHVzZXJzKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICBpdGVtcyB7XFxuICAgICAgICBpZFxcbiAgICAgICAgbmFtZVxcbiAgICAgICAgYXZhdGFyXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IEludml0ZVVzZXJTZWFyY2goJGlucHV0OiBVc2Vyc1JldHJpZXZhbElucHV0ISkge1xcbiAgICB1c2VycyhpbnB1dDogJGlucHV0KSB7XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIG5hbWVcXG4gICAgICAgIGF2YXRhclxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBJbnZpdGVQcm9qZWN0SXRlbV9Xb3Jrc3BhY2VDb2xsYWJvcmF0b3Igb24gV29ya3NwYWNlQ29sbGFib3JhdG9yIHtcXG4gICAgaWRcXG4gICAgdXNlciB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gICAgc2VhdFR5cGVcXG4gICAgcm9sZVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBJbnZpdGVQcm9qZWN0SXRlbV9Xb3Jrc3BhY2VDb2xsYWJvcmF0b3Igb24gV29ya3NwYWNlQ29sbGFib3JhdG9yIHtcXG4gICAgaWRcXG4gICAgdXNlciB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gICAgc2VhdFR5cGVcXG4gICAgcm9sZVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBDcmVhdGVOZXdSZWdpb24oJGlucHV0OiBDcmVhdGVTZXJ2ZXJSZWdpb25JbnB1dCEpIHtcXG4gICAgc2VydmVySW5mb011dGF0aW9ucyB7XFxuICAgICAgbXVsdGlSZWdpb24ge1xcbiAgICAgICAgY3JlYXRlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uU2V0dGluZ3NTZXJ2ZXJSZWdpb25zQWRkRWRpdERpYWxvZ19TZXJ2ZXJSZWdpb25JdGVtXFxuICAgICAgICAgIC4uLlNldHRpbmdzU2VydmVyUmVnaW9uc1RhYmxlX1NlcnZlclJlZ2lvbkl0ZW1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gQ3JlYXRlTmV3UmVnaW9uKCRpbnB1dDogQ3JlYXRlU2VydmVyUmVnaW9uSW5wdXQhKSB7XFxuICAgIHNlcnZlckluZm9NdXRhdGlvbnMge1xcbiAgICAgIG11bHRpUmVnaW9uIHtcXG4gICAgICAgIGNyZWF0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLlNldHRpbmdzU2VydmVyUmVnaW9uc0FkZEVkaXREaWFsb2dfU2VydmVyUmVnaW9uSXRlbVxcbiAgICAgICAgICAuLi5TZXR0aW5nc1NlcnZlclJlZ2lvbnNUYWJsZV9TZXJ2ZXJSZWdpb25JdGVtXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIFVwZGF0ZVJlZ2lvbigkaW5wdXQ6IFVwZGF0ZVNlcnZlclJlZ2lvbklucHV0ISkge1xcbiAgICBzZXJ2ZXJJbmZvTXV0YXRpb25zIHtcXG4gICAgICBtdWx0aVJlZ2lvbiB7XFxuICAgICAgICB1cGRhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICAuLi5TZXR0aW5nc1NlcnZlclJlZ2lvbnNBZGRFZGl0RGlhbG9nX1NlcnZlclJlZ2lvbkl0ZW1cXG4gICAgICAgICAgLi4uU2V0dGluZ3NTZXJ2ZXJSZWdpb25zVGFibGVfU2VydmVyUmVnaW9uSXRlbVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBVcGRhdGVSZWdpb24oJGlucHV0OiBVcGRhdGVTZXJ2ZXJSZWdpb25JbnB1dCEpIHtcXG4gICAgc2VydmVySW5mb011dGF0aW9ucyB7XFxuICAgICAgbXVsdGlSZWdpb24ge1xcbiAgICAgICAgdXBkYXRlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uU2V0dGluZ3NTZXJ2ZXJSZWdpb25zQWRkRWRpdERpYWxvZ19TZXJ2ZXJSZWdpb25JdGVtXFxuICAgICAgICAgIC4uLlNldHRpbmdzU2VydmVyUmVnaW9uc1RhYmxlX1NlcnZlclJlZ2lvbkl0ZW1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgTmF2aWdhdGlvbldvcmtzcGFjZVN3aXRjaGVyKCRqb2luUmVxdWVzdEZpbHRlcjogV29ya3NwYWNlSm9pblJlcXVlc3RGaWx0ZXIpIHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgaWRcXG4gICAgICAuLi5Xb3Jrc3BhY2VTd2l0Y2hlckFjdGl2ZVdvcmtzcGFjZV9Vc2VyXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgTmF2aWdhdGlvbldvcmtzcGFjZVN3aXRjaGVyKCRqb2luUmVxdWVzdEZpbHRlcjogV29ya3NwYWNlSm9pblJlcXVlc3RGaWx0ZXIpIHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgaWRcXG4gICAgICAuLi5Xb3Jrc3BhY2VTd2l0Y2hlckFjdGl2ZVdvcmtzcGFjZV9Vc2VyXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgV29ya3NwYWNlU3dpdGNoZXJIZWFkZXJXb3Jrc3BhY2UoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgLi4uSGVhZGVyV29ya3NwYWNlU3dpdGNoZXJIZWFkZXJXb3Jrc3BhY2VfV29ya3NwYWNlXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgV29ya3NwYWNlU3dpdGNoZXJIZWFkZXJXb3Jrc3BhY2UoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgLi4uSGVhZGVyV29ya3NwYWNlU3dpdGNoZXJIZWFkZXJXb3Jrc3BhY2VfV29ya3NwYWNlXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgTmF2aWdhdGlvbldvcmtzcGFjZUxpc3QoXFxuICAgICR3b3Jrc3BhY2VGaWx0ZXI6IFVzZXJXb3Jrc3BhY2VzRmlsdGVyXFxuICAgICRwcm9qZWN0RmlsdGVyOiBVc2VyUHJvamVjdHNGaWx0ZXJcXG4gICkge1xcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICBpZFxcbiAgICAgIHdvcmtzcGFjZXMoZmlsdGVyOiAkd29ya3NwYWNlRmlsdGVyKSB7XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLkhlYWRlcldvcmtzcGFjZVN3aXRjaGVyV29ya3NwYWNlTGlzdEl0ZW1fV29ya3NwYWNlXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIHByb2plY3RzKGZpbHRlcjogJHByb2plY3RGaWx0ZXIpIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgTmF2aWdhdGlvbldvcmtzcGFjZUxpc3QoXFxuICAgICR3b3Jrc3BhY2VGaWx0ZXI6IFVzZXJXb3Jrc3BhY2VzRmlsdGVyXFxuICAgICRwcm9qZWN0RmlsdGVyOiBVc2VyUHJvamVjdHNGaWx0ZXJcXG4gICkge1xcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICBpZFxcbiAgICAgIHdvcmtzcGFjZXMoZmlsdGVyOiAkd29ya3NwYWNlRmlsdGVyKSB7XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLkhlYWRlcldvcmtzcGFjZVN3aXRjaGVyV29ya3NwYWNlTGlzdEl0ZW1fV29ya3NwYWNlXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIHByb2plY3RzKGZpbHRlcjogJHByb2plY3RGaWx0ZXIpIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgTmF2aWdhdGlvblByb2plY3RJbnZpdGVzIHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgaWRcXG4gICAgICBwcm9qZWN0SW52aXRlcyB7XFxuICAgICAgICAuLi5IZWFkZXJOYXZOb3RpZmljYXRpb25zUHJvamVjdEludml0ZV9QZW5kaW5nU3RyZWFtQ29sbGFib3JhdG9yXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IE5hdmlnYXRpb25Qcm9qZWN0SW52aXRlcyB7XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgcHJvamVjdEludml0ZXMge1xcbiAgICAgICAgLi4uSGVhZGVyTmF2Tm90aWZpY2F0aW9uc1Byb2plY3RJbnZpdGVfUGVuZGluZ1N0cmVhbUNvbGxhYm9yYXRvclxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBOYXZpZ2F0aW9uV29ya3NwYWNlSW52aXRlcyB7XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgd29ya3NwYWNlSW52aXRlcyB7XFxuICAgICAgICAuLi5IZWFkZXJOYXZOb3RpZmljYXRpb25zV29ya3NwYWNlSW52aXRlX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3JcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgTmF2aWdhdGlvbldvcmtzcGFjZUludml0ZXMge1xcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICBpZFxcbiAgICAgIHdvcmtzcGFjZUludml0ZXMge1xcbiAgICAgICAgLi4uSGVhZGVyTmF2Tm90aWZpY2F0aW9uc1dvcmtzcGFjZUludml0ZV9QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIFVwZGF0ZVByZXNlbnRhdGlvblNsaWRlKCRpbnB1dDogVXBkYXRlU2F2ZWRWaWV3SW5wdXQhKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIHNhdmVkVmlld011dGF0aW9ucyB7XFxuICAgICAgICB1cGRhdGVWaWV3KGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgbmFtZVxcbiAgICAgICAgICBkZXNjcmlwdGlvblxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBVcGRhdGVQcmVzZW50YXRpb25TbGlkZSgkaW5wdXQ6IFVwZGF0ZVNhdmVkVmlld0lucHV0ISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBzYXZlZFZpZXdNdXRhdGlvbnMge1xcbiAgICAgICAgdXBkYXRlVmlldyhpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIG5hbWVcXG4gICAgICAgICAgZGVzY3JpcHRpb25cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgUHJlc2VudGF0aW9uQWNjZXNzQ2hlY2soJHNhdmVkVmlld0dyb3VwSWQ6IElEISwgJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBzYXZlZFZpZXdHcm91cChpZDogJHNhdmVkVmlld0dyb3VwSWQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFByZXNlbnRhdGlvbkFjY2Vzc0NoZWNrKCRzYXZlZFZpZXdHcm91cElkOiBJRCEsICRwcm9qZWN0SWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgc2F2ZWRWaWV3R3JvdXAoaWQ6ICRzYXZlZFZpZXdHcm91cElkKSB7XFxuICAgICAgICBpZFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBQcm9qZWN0UHJlc2VudGF0aW9uUGFnZShcXG4gICAgJGlucHV0OiBTYXZlZFZpZXdHcm91cFZpZXdzSW5wdXQhXFxuICAgICRzYXZlZFZpZXdHcm91cElkOiBJRCFcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIGxpbWl0ZWRXb3Jrc3BhY2Uge1xcbiAgICAgICAgaWRcXG4gICAgICAgIC4uLlByZXNlbnRhdGlvbkxlZnRTaWRlYmFyX0xpbWl0ZWRXb3Jrc3BhY2VcXG4gICAgICAgIC4uLlByZXNlbnRhdGlvbkxvYWRpbmdfTGltaXRlZFdvcmtzcGFjZVxcbiAgICAgIH1cXG4gICAgICBzYXZlZFZpZXdHcm91cChpZDogJHNhdmVkVmlld0dyb3VwSWQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICB0aXRsZVxcbiAgICAgICAgLi4uUHJlc2VudGF0aW9uVmlld2VyUGFnZVdyYXBwZXJfU2F2ZWRWaWV3R3JvdXBcXG4gICAgICAgIC4uLlByZXNlbnRhdGlvbkhlYWRlcl9TYXZlZFZpZXdHcm91cFxcbiAgICAgICAgLi4uUHJlc2VudGF0aW9uU2xpZGVMaXN0X1NhdmVkVmlld0dyb3VwXFxuICAgICAgICAuLi5QcmVzZW50YXRpb25QYWdlV3JhcHBlcl9TYXZlZFZpZXdHcm91cFxcbiAgICAgICAgLi4uUHJlc2VudGF0aW9uTG9hZGluZ19TYXZlZFZpZXdHcm91cFxcbiAgICAgICAgdmlld3MoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgICBpZFxcbiAgICAgICAgICAgIG5hbWVcXG4gICAgICAgICAgICBkZXNjcmlwdGlvblxcbiAgICAgICAgICAgIHRodW1ibmFpbFVybFxcbiAgICAgICAgICAgIHByb2plY3RJZFxcbiAgICAgICAgICAgIHZpc2liaWxpdHlcXG4gICAgICAgICAgICAuLi5QcmVzZW50YXRpb25JbmZvU2lkZWJhcl9TYXZlZFZpZXdcXG4gICAgICAgICAgICBncm91cCB7XFxuICAgICAgICAgICAgICBpZFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBQcm9qZWN0UHJlc2VudGF0aW9uUGFnZShcXG4gICAgJGlucHV0OiBTYXZlZFZpZXdHcm91cFZpZXdzSW5wdXQhXFxuICAgICRzYXZlZFZpZXdHcm91cElkOiBJRCFcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIGxpbWl0ZWRXb3Jrc3BhY2Uge1xcbiAgICAgICAgaWRcXG4gICAgICAgIC4uLlByZXNlbnRhdGlvbkxlZnRTaWRlYmFyX0xpbWl0ZWRXb3Jrc3BhY2VcXG4gICAgICAgIC4uLlByZXNlbnRhdGlvbkxvYWRpbmdfTGltaXRlZFdvcmtzcGFjZVxcbiAgICAgIH1cXG4gICAgICBzYXZlZFZpZXdHcm91cChpZDogJHNhdmVkVmlld0dyb3VwSWQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICB0aXRsZVxcbiAgICAgICAgLi4uUHJlc2VudGF0aW9uVmlld2VyUGFnZVdyYXBwZXJfU2F2ZWRWaWV3R3JvdXBcXG4gICAgICAgIC4uLlByZXNlbnRhdGlvbkhlYWRlcl9TYXZlZFZpZXdHcm91cFxcbiAgICAgICAgLi4uUHJlc2VudGF0aW9uU2xpZGVMaXN0X1NhdmVkVmlld0dyb3VwXFxuICAgICAgICAuLi5QcmVzZW50YXRpb25QYWdlV3JhcHBlcl9TYXZlZFZpZXdHcm91cFxcbiAgICAgICAgLi4uUHJlc2VudGF0aW9uTG9hZGluZ19TYXZlZFZpZXdHcm91cFxcbiAgICAgICAgdmlld3MoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgICBpZFxcbiAgICAgICAgICAgIG5hbWVcXG4gICAgICAgICAgICBkZXNjcmlwdGlvblxcbiAgICAgICAgICAgIHRodW1ibmFpbFVybFxcbiAgICAgICAgICAgIHByb2plY3RJZFxcbiAgICAgICAgICAgIHZpc2liaWxpdHlcXG4gICAgICAgICAgICAuLi5QcmVzZW50YXRpb25JbmZvU2lkZWJhcl9TYXZlZFZpZXdcXG4gICAgICAgICAgICBncm91cCB7XFxuICAgICAgICAgICAgICBpZFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBVc2VDb3B5TW9kZWxMaW5rX01vZGVsIG9uIE1vZGVsIHtcXG4gICAgaWRcXG4gICAgcHJvamVjdElkXFxuICAgIC4uLkdldE1vZGVsSXRlbVJvdXRlX01vZGVsXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFVzZUNvcHlNb2RlbExpbmtfTW9kZWwgb24gTW9kZWwge1xcbiAgICBpZFxcbiAgICBwcm9qZWN0SWRcXG4gICAgLi4uR2V0TW9kZWxJdGVtUm91dGVfTW9kZWxcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgVXNlQ2FuQ3JlYXRlUGVyc29uYWxQcm9qZWN0X1VzZXIgb24gVXNlciB7XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVQZXJzb25hbFByb2plY3Qge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBVc2VDYW5DcmVhdGVQZXJzb25hbFByb2plY3RfVXNlciBvbiBVc2VyIHtcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkNyZWF0ZVBlcnNvbmFsUHJvamVjdCB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFVzZUNhbkNyZWF0ZVdvcmtzcGFjZV9Vc2VyIG9uIFVzZXIge1xcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQ3JlYXRlV29ya3NwYWNlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgVXNlQ2FuQ3JlYXRlV29ya3NwYWNlX1VzZXIgb24gVXNlciB7XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVXb3Jrc3BhY2Uge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBVc2VDYW5DcmVhdGVNb2RlbF9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQ3JlYXRlTW9kZWwge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBVc2VDYW5DcmVhdGVNb2RlbF9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQ3JlYXRlTW9kZWwge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBVc2VDYW5JbnZpdGVUb1Byb2plY3RfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkludml0ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFVzZUNhbkludml0ZVRvUHJvamVjdF9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuSW52aXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VUZWFtSW50ZXJuYWxzX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHJvbGVcXG4gICAgaW52aXRlZFRlYW0ge1xcbiAgICAgIGlkXFxuICAgICAgdGl0bGVcXG4gICAgICByb2xlXFxuICAgICAgaW52aXRlSWRcXG4gICAgICB1c2VyIHtcXG4gICAgICAgIHJvbGVcXG4gICAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgICAgfVxcbiAgICB9XFxuICAgIHRlYW0ge1xcbiAgICAgIHJvbGVcXG4gICAgICBzZWF0VHlwZVxcbiAgICAgIHdvcmtzcGFjZVJvbGVcXG4gICAgICB1c2VyIHtcXG4gICAgICAgIGlkXFxuICAgICAgICByb2xlXFxuICAgICAgICAuLi5MaW1pdGVkVXNlckF2YXRhclxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZVRlYW1JbnRlcm5hbHNfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgcm9sZVxcbiAgICBpbnZpdGVkVGVhbSB7XFxuICAgICAgaWRcXG4gICAgICB0aXRsZVxcbiAgICAgIHJvbGVcXG4gICAgICBpbnZpdGVJZFxcbiAgICAgIHVzZXIge1xcbiAgICAgICAgcm9sZVxcbiAgICAgICAgLi4uTGltaXRlZFVzZXJBdmF0YXJcXG4gICAgICB9XFxuICAgIH1cXG4gICAgdGVhbSB7XFxuICAgICAgcm9sZVxcbiAgICAgIHNlYXRUeXBlXFxuICAgICAgd29ya3NwYWNlUm9sZVxcbiAgICAgIHVzZXIge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHJvbGVcXG4gICAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlVGVhbURpYWxvZyBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICByb2xlXFxuICAgIGFsbG93UHVibGljQ29tbWVudHNcXG4gICAgdmlzaWJpbGl0eVxcbiAgICB0ZWFtIHtcXG4gICAgICBpZFxcbiAgICAgIHJvbGVcXG4gICAgICB1c2VyIHtcXG4gICAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgICAgICByb2xlXFxuICAgICAgfVxcbiAgICB9XFxuICAgIGludml0ZWRUZWFtIHtcXG4gICAgICBpZFxcbiAgICAgIHRpdGxlXFxuICAgICAgaW52aXRlSWRcXG4gICAgICByb2xlXFxuICAgICAgdXNlciB7XFxuICAgICAgICAuLi5MaW1pdGVkVXNlckF2YXRhclxcbiAgICAgICAgcm9sZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5Qcm9qZWN0c1BhZ2VUZWFtRGlhbG9nTWFuYWdlUGVybWlzc2lvbnNfUHJvamVjdFxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZVRlYW1EaWFsb2cgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgcm9sZVxcbiAgICBhbGxvd1B1YmxpY0NvbW1lbnRzXFxuICAgIHZpc2liaWxpdHlcXG4gICAgdGVhbSB7XFxuICAgICAgaWRcXG4gICAgICByb2xlXFxuICAgICAgdXNlciB7XFxuICAgICAgICAuLi5MaW1pdGVkVXNlckF2YXRhclxcbiAgICAgICAgcm9sZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICBpbnZpdGVkVGVhbSB7XFxuICAgICAgaWRcXG4gICAgICB0aXRsZVxcbiAgICAgIGludml0ZUlkXFxuICAgICAgcm9sZVxcbiAgICAgIHVzZXIge1xcbiAgICAgICAgLi4uTGltaXRlZFVzZXJBdmF0YXJcXG4gICAgICAgIHJvbGVcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uUHJvamVjdHNQYWdlVGVhbURpYWxvZ01hbmFnZVBlcm1pc3Npb25zX1Byb2plY3RcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdERhc2hib2FyZEl0ZW1Ob01vZGVscyBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBjcmVhdGVkQXRcXG4gICAgdXBkYXRlZEF0XFxuICAgIHJvbGVcXG4gICAgdGVhbSB7XFxuICAgICAgaWRcXG4gICAgICB1c2VyIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBuYW1lXFxuICAgICAgICBhdmF0YXJcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uUHJvamVjdFBhZ2VNb2RlbHNDYXJkUHJvamVjdFxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBQcm9qZWN0RGFzaGJvYXJkSXRlbU5vTW9kZWxzIG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGNyZWF0ZWRBdFxcbiAgICB1cGRhdGVkQXRcXG4gICAgcm9sZVxcbiAgICB0ZWFtIHtcXG4gICAgICBpZFxcbiAgICAgIHVzZXIge1xcbiAgICAgICAgaWRcXG4gICAgICAgIG5hbWVcXG4gICAgICAgIGF2YXRhclxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5Qcm9qZWN0UGFnZU1vZGVsc0NhcmRQcm9qZWN0XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByb2plY3REYXNoYm9hcmRJdGVtIG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICAuLi5Qcm9qZWN0RGFzaGJvYXJkSXRlbU5vTW9kZWxzXFxuICAgIC4uLlByb2plY3RDYXJkSW1wb3J0RmlsZUFyZWFfUHJvamVjdFxcbiAgICBtb2RlbHMobGltaXQ6IDMpIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgLi4uUHJvamVjdFBhZ2VMYXRlc3RJdGVtc01vZGVsSXRlbVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgc2x1Z1xcbiAgICAgIG5hbWVcXG4gICAgICBsb2dvXFxuICAgICAgcmVhZE9ubHlcXG4gICAgfVxcbiAgICBwZW5kaW5nSW1wb3J0ZWRNb2RlbHMobGltaXQ6IDMpIHtcXG4gICAgICAuLi5QZW5kaW5nRmlsZVVwbG9hZFxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFByb2plY3REYXNoYm9hcmRJdGVtIG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICAuLi5Qcm9qZWN0RGFzaGJvYXJkSXRlbU5vTW9kZWxzXFxuICAgIC4uLlByb2plY3RDYXJkSW1wb3J0RmlsZUFyZWFfUHJvamVjdFxcbiAgICBtb2RlbHMobGltaXQ6IDMpIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgLi4uUHJvamVjdFBhZ2VMYXRlc3RJdGVtc01vZGVsSXRlbVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgc2x1Z1xcbiAgICAgIG5hbWVcXG4gICAgICBsb2dvXFxuICAgICAgcmVhZE9ubHlcXG4gICAgfVxcbiAgICBwZW5kaW5nSW1wb3J0ZWRNb2RlbHMobGltaXQ6IDMpIHtcXG4gICAgICAuLi5QZW5kaW5nRmlsZVVwbG9hZFxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFBlbmRpbmdGaWxlVXBsb2FkIG9uIEZpbGVVcGxvYWQge1xcbiAgICBpZFxcbiAgICBwcm9qZWN0SWRcXG4gICAgbW9kZWxOYW1lXFxuICAgIGNvbnZlcnRlZFN0YXR1c1xcbiAgICBjb252ZXJ0ZWRNZXNzYWdlXFxuICAgIHVwbG9hZERhdGVcXG4gICAgY29udmVydGVkTGFzdFVwZGF0ZVxcbiAgICBmaWxlVHlwZVxcbiAgICBmaWxlTmFtZVxcbiAgICB1c2VySWRcXG4gICAgdXBkYXRlZEF0XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFBlbmRpbmdGaWxlVXBsb2FkIG9uIEZpbGVVcGxvYWQge1xcbiAgICBpZFxcbiAgICBwcm9qZWN0SWRcXG4gICAgbW9kZWxOYW1lXFxuICAgIGNvbnZlcnRlZFN0YXR1c1xcbiAgICBjb252ZXJ0ZWRNZXNzYWdlXFxuICAgIHVwbG9hZERhdGVcXG4gICAgY29udmVydGVkTGFzdFVwZGF0ZVxcbiAgICBmaWxlVHlwZVxcbiAgICBmaWxlTmFtZVxcbiAgICB1c2VySWRcXG4gICAgdXBkYXRlZEF0XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlTGF0ZXN0SXRlbXNNb2RlbEl0ZW0gb24gTW9kZWwge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGRpc3BsYXlOYW1lXFxuICAgIHByb2plY3RJZFxcbiAgICB2ZXJzaW9uQ291bnQ6IHZlcnNpb25zKGxpbWl0OiAwKSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICAgIGNvbW1lbnRUaHJlYWRDb3VudDogY29tbWVudFRocmVhZHMobGltaXQ6IDApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgcGVuZGluZ0ltcG9ydGVkVmVyc2lvbnMobGltaXQ6IDEpIHtcXG4gICAgICAuLi5QZW5kaW5nRmlsZVVwbG9hZFxcbiAgICB9XFxuICAgIHByZXZpZXdVcmxcXG4gICAgY3JlYXRlZEF0XFxuICAgIHVwZGF0ZWRBdFxcbiAgICAuLi5Qcm9qZWN0UGFnZU1vZGVsc0NhcmRfTW9kZWxcXG4gICAgLi4uUHJvamVjdFBhZ2VNb2RlbHNDYXJkUmVuYW1lRGlhbG9nXFxuICAgIC4uLlByb2plY3RQYWdlTW9kZWxzQ2FyZERlbGV0ZURpYWxvZ1xcbiAgICAuLi5Qcm9qZWN0UGFnZU1vZGVsc0FjdGlvbnNcXG4gICAgLi4uUHJvamVjdENhcmRJbXBvcnRGaWxlQXJlYV9Nb2RlbFxcbiAgICBhdXRvbWF0aW9uc1N0YXR1cyB7XFxuICAgICAgLi4uQXV0b21hdGVSdW5zVHJpZ2dlclN0YXR1c19UcmlnZ2VyZWRBdXRvbWF0aW9uc1N0YXR1c1xcbiAgICB9XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5VcGRhdGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5EZWxldGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZUxhdGVzdEl0ZW1zTW9kZWxJdGVtIG9uIE1vZGVsIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBkaXNwbGF5TmFtZVxcbiAgICBwcm9qZWN0SWRcXG4gICAgdmVyc2lvbkNvdW50OiB2ZXJzaW9ucyhsaW1pdDogMCkge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgfVxcbiAgICBjb21tZW50VGhyZWFkQ291bnQ6IGNvbW1lbnRUaHJlYWRzKGxpbWl0OiAwKSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICAgIHBlbmRpbmdJbXBvcnRlZFZlcnNpb25zKGxpbWl0OiAxKSB7XFxuICAgICAgLi4uUGVuZGluZ0ZpbGVVcGxvYWRcXG4gICAgfVxcbiAgICBwcmV2aWV3VXJsXFxuICAgIGNyZWF0ZWRBdFxcbiAgICB1cGRhdGVkQXRcXG4gICAgLi4uUHJvamVjdFBhZ2VNb2RlbHNDYXJkX01vZGVsXFxuICAgIC4uLlByb2plY3RQYWdlTW9kZWxzQ2FyZFJlbmFtZURpYWxvZ1xcbiAgICAuLi5Qcm9qZWN0UGFnZU1vZGVsc0NhcmREZWxldGVEaWFsb2dcXG4gICAgLi4uUHJvamVjdFBhZ2VNb2RlbHNBY3Rpb25zXFxuICAgIC4uLlByb2plY3RDYXJkSW1wb3J0RmlsZUFyZWFfTW9kZWxcXG4gICAgYXV0b21hdGlvbnNTdGF0dXMge1xcbiAgICAgIC4uLkF1dG9tYXRlUnVuc1RyaWdnZXJTdGF0dXNfVHJpZ2dlcmVkQXV0b21hdGlvbnNTdGF0dXNcXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuVXBkYXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuRGVsZXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFVwZGF0YWJsZU1ldGFkYXRhIG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGRlc2NyaXB0aW9uXFxuICAgIHZpc2liaWxpdHlcXG4gICAgYWxsb3dQdWJsaWNDb21tZW50c1xcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuUmVhZCB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhblVwZGF0ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhblVwZGF0ZUFsbG93UHVibGljQ29tbWVudHMge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5SZWFkU2V0dGluZ3Mge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5SZWFkV2ViaG9va3Mge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5MZWF2ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFByb2plY3RVcGRhdGFibGVNZXRhZGF0YSBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBkZXNjcmlwdGlvblxcbiAgICB2aXNpYmlsaXR5XFxuICAgIGFsbG93UHVibGljQ29tbWVudHNcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhblJlYWQge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5VcGRhdGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5VcGRhdGVBbGxvd1B1YmxpY0NvbW1lbnRzIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuUmVhZFNldHRpbmdzIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuUmVhZFdlYmhvb2tzIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuTGVhdmUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZUxhdGVzdEl0ZW1zTW9kZWxzIG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICByb2xlXFxuICAgIHZpc2liaWxpdHlcXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIHJlYWRPbmx5XFxuICAgIH1cXG4gICAgbW9kZWxDb3VudDogbW9kZWxzKGxpbWl0OiAwKSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICAgIC4uLlByb2plY3RQYWdlTW9kZWxzU3RydWN0dXJlSXRlbV9Qcm9qZWN0XFxuICAgIC4uLlByb2plY3RDYXJkSW1wb3J0RmlsZUFyZWFfUHJvamVjdFxcbiAgICAuLi5Qcm9qZWN0TW9kZWxzQWRkX1Byb2plY3RcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VMYXRlc3RJdGVtc01vZGVscyBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgcm9sZVxcbiAgICB2aXNpYmlsaXR5XFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICByZWFkT25seVxcbiAgICB9XFxuICAgIG1vZGVsQ291bnQ6IG1vZGVscyhsaW1pdDogMCkge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgfVxcbiAgICAuLi5Qcm9qZWN0UGFnZU1vZGVsc1N0cnVjdHVyZUl0ZW1fUHJvamVjdFxcbiAgICAuLi5Qcm9qZWN0Q2FyZEltcG9ydEZpbGVBcmVhX1Byb2plY3RcXG4gICAgLi4uUHJvamVjdE1vZGVsc0FkZF9Qcm9qZWN0XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlTGF0ZXN0SXRlbXNDb21tZW50cyBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgY29tbWVudFRocmVhZENvdW50OiBjb21tZW50VGhyZWFkcyhsaW1pdDogMCkge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZUxhdGVzdEl0ZW1zQ29tbWVudHMgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIGNvbW1lbnRUaHJlYWRDb3VudDogY29tbWVudFRocmVhZHMobGltaXQ6IDApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VMYXRlc3RJdGVtc0NvbW1lbnRJdGVtIG9uIENvbW1lbnQge1xcbiAgICBpZFxcbiAgICBhdXRob3Ige1xcbiAgICAgIC4uLkZvcm1Vc2Vyc1NlbGVjdEl0ZW1cXG4gICAgfVxcbiAgICBzY3JlZW5zaG90XFxuICAgIHJhd1RleHRcXG4gICAgY3JlYXRlZEF0XFxuICAgIHVwZGF0ZWRBdFxcbiAgICBhcmNoaXZlZFxcbiAgICByZXBsaWVzQ291bnQ6IHJlcGxpZXMobGltaXQ6IDApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgcmVwbHlBdXRob3JzKGxpbWl0OiA0KSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIC4uLkZvcm1Vc2Vyc1NlbGVjdEl0ZW1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VMYXRlc3RJdGVtc0NvbW1lbnRJdGVtIG9uIENvbW1lbnQge1xcbiAgICBpZFxcbiAgICBhdXRob3Ige1xcbiAgICAgIC4uLkZvcm1Vc2Vyc1NlbGVjdEl0ZW1cXG4gICAgfVxcbiAgICBzY3JlZW5zaG90XFxuICAgIHJhd1RleHRcXG4gICAgY3JlYXRlZEF0XFxuICAgIHVwZGF0ZWRBdFxcbiAgICBhcmNoaXZlZFxcbiAgICByZXBsaWVzQ291bnQ6IHJlcGxpZXMobGltaXQ6IDApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgcmVwbHlBdXRob3JzKGxpbWl0OiA0KSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIC4uLkZvcm1Vc2Vyc1NlbGVjdEl0ZW1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gQ3JlYXRlTW9kZWwoJGlucHV0OiBDcmVhdGVNb2RlbElucHV0ISkge1xcbiAgICBtb2RlbE11dGF0aW9ucyB7XFxuICAgICAgY3JlYXRlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIC4uLlByb2plY3RQYWdlTGF0ZXN0SXRlbXNNb2RlbEl0ZW1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gQ3JlYXRlTW9kZWwoJGlucHV0OiBDcmVhdGVNb2RlbElucHV0ISkge1xcbiAgICBtb2RlbE11dGF0aW9ucyB7XFxuICAgICAgY3JlYXRlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIC4uLlByb2plY3RQYWdlTGF0ZXN0SXRlbXNNb2RlbEl0ZW1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gQ3JlYXRlUHJvamVjdCgkaW5wdXQ6IFByb2plY3RDcmVhdGVJbnB1dCkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBjcmVhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgLi4uUHJvamVjdFBhZ2VQcm9qZWN0XFxuICAgICAgICAuLi5Qcm9qZWN0RGFzaGJvYXJkSXRlbVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBDcmVhdGVQcm9qZWN0KCRpbnB1dDogUHJvamVjdENyZWF0ZUlucHV0KSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIGNyZWF0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAuLi5Qcm9qZWN0UGFnZVByb2plY3RcXG4gICAgICAgIC4uLlByb2plY3REYXNoYm9hcmRJdGVtXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIENyZWF0ZVdvcmtzcGFjZVByb2plY3QoJGlucHV0OiBXb3Jrc3BhY2VQcm9qZWN0Q3JlYXRlSW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgcHJvamVjdHMge1xcbiAgICAgICAgY3JlYXRlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgLi4uUHJvamVjdFBhZ2VQcm9qZWN0XFxuICAgICAgICAgIC4uLlByb2plY3REYXNoYm9hcmRJdGVtXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIENyZWF0ZVdvcmtzcGFjZVByb2plY3QoJGlucHV0OiBXb3Jrc3BhY2VQcm9qZWN0Q3JlYXRlSW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgcHJvamVjdHMge1xcbiAgICAgICAgY3JlYXRlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgLi4uUHJvamVjdFBhZ2VQcm9qZWN0XFxuICAgICAgICAgIC4uLlByb2plY3REYXNoYm9hcmRJdGVtXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIFVwZGF0ZU1vZGVsKCRpbnB1dDogVXBkYXRlTW9kZWxJbnB1dCEpIHtcXG4gICAgbW9kZWxNdXRhdGlvbnMge1xcbiAgICAgIHVwZGF0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAuLi5Qcm9qZWN0UGFnZUxhdGVzdEl0ZW1zTW9kZWxJdGVtXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIFVwZGF0ZU1vZGVsKCRpbnB1dDogVXBkYXRlTW9kZWxJbnB1dCEpIHtcXG4gICAgbW9kZWxNdXRhdGlvbnMge1xcbiAgICAgIHVwZGF0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAuLi5Qcm9qZWN0UGFnZUxhdGVzdEl0ZW1zTW9kZWxJdGVtXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIERlbGV0ZU1vZGVsKCRpbnB1dDogRGVsZXRlTW9kZWxJbnB1dCEpIHtcXG4gICAgbW9kZWxNdXRhdGlvbnMge1xcbiAgICAgIGRlbGV0ZShpbnB1dDogJGlucHV0KVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIERlbGV0ZU1vZGVsKCRpbnB1dDogRGVsZXRlTW9kZWxJbnB1dCEpIHtcXG4gICAgbW9kZWxNdXRhdGlvbnMge1xcbiAgICAgIGRlbGV0ZShpbnB1dDogJGlucHV0KVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIFVwZGF0ZVByb2plY3RSb2xlKCRpbnB1dDogUHJvamVjdFVwZGF0ZVJvbGVJbnB1dCEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgdXBkYXRlUm9sZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgdGVhbSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIHJvbGVcXG4gICAgICAgICAgdXNlciB7XFxuICAgICAgICAgICAgLi4uTGltaXRlZFVzZXJBdmF0YXJcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBVcGRhdGVQcm9qZWN0Um9sZSgkaW5wdXQ6IFByb2plY3RVcGRhdGVSb2xlSW5wdXQhKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIHVwZGF0ZVJvbGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHRlYW0ge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICByb2xlXFxuICAgICAgICAgIHVzZXIge1xcbiAgICAgICAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gVXBkYXRlV29ya3NwYWNlUHJvamVjdFJvbGUoJGlucHV0OiBQcm9qZWN0VXBkYXRlUm9sZUlucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIHByb2plY3RzIHtcXG4gICAgICAgIHVwZGF0ZVJvbGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICB0ZWFtIHtcXG4gICAgICAgICAgICBpZFxcbiAgICAgICAgICAgIHJvbGVcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBVcGRhdGVXb3Jrc3BhY2VQcm9qZWN0Um9sZSgkaW5wdXQ6IFByb2plY3RVcGRhdGVSb2xlSW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgcHJvamVjdHMge1xcbiAgICAgICAgdXBkYXRlUm9sZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIHRlYW0ge1xcbiAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgcm9sZVxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIEludml0ZVByb2plY3RVc2VyKCRwcm9qZWN0SWQ6IElEISwgJGlucHV0OiBbUHJvamVjdEludml0ZUNyZWF0ZUlucHV0IV0hKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIGludml0ZXMge1xcbiAgICAgICAgYmF0Y2hDcmVhdGUocHJvamVjdElkOiAkcHJvamVjdElkLCBpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAgIC4uLlByb2plY3RQYWdlVGVhbURpYWxvZ1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBJbnZpdGVQcm9qZWN0VXNlcigkcHJvamVjdElkOiBJRCEsICRpbnB1dDogW1Byb2plY3RJbnZpdGVDcmVhdGVJbnB1dCFdISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBpbnZpdGVzIHtcXG4gICAgICAgIGJhdGNoQ3JlYXRlKHByb2plY3RJZDogJHByb2plY3RJZCwgaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgICAuLi5Qcm9qZWN0UGFnZVRlYW1EaWFsb2dcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gSW52aXRlV29ya3NwYWNlUHJvamVjdFVzZXIoXFxuICAgICRwcm9qZWN0SWQ6IElEIVxcbiAgICAkaW5wdXRzOiBbV29ya3NwYWNlUHJvamVjdEludml0ZUNyZWF0ZUlucHV0IV0hXFxuICApIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgaW52aXRlcyB7XFxuICAgICAgICBjcmVhdGVGb3JXb3Jrc3BhY2UocHJvamVjdElkOiAkcHJvamVjdElkLCBpbnB1dHM6ICRpbnB1dHMpIHtcXG4gICAgICAgICAgLi4uUHJvamVjdFBhZ2VUZWFtRGlhbG9nXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIEludml0ZVdvcmtzcGFjZVByb2plY3RVc2VyKFxcbiAgICAkcHJvamVjdElkOiBJRCFcXG4gICAgJGlucHV0czogW1dvcmtzcGFjZVByb2plY3RJbnZpdGVDcmVhdGVJbnB1dCFdIVxcbiAgKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIGludml0ZXMge1xcbiAgICAgICAgY3JlYXRlRm9yV29ya3NwYWNlKHByb2plY3RJZDogJHByb2plY3RJZCwgaW5wdXRzOiAkaW5wdXRzKSB7XFxuICAgICAgICAgIC4uLlByb2plY3RQYWdlVGVhbURpYWxvZ1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBDYW5jZWxQcm9qZWN0SW52aXRlKCRwcm9qZWN0SWQ6IElEISwgJGludml0ZUlkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIGludml0ZXMge1xcbiAgICAgICAgY2FuY2VsKHByb2plY3RJZDogJHByb2plY3RJZCwgaW52aXRlSWQ6ICRpbnZpdGVJZCkge1xcbiAgICAgICAgICAuLi5Qcm9qZWN0UGFnZVRlYW1EaWFsb2dcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gQ2FuY2VsUHJvamVjdEludml0ZSgkcHJvamVjdElkOiBJRCEsICRpbnZpdGVJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBpbnZpdGVzIHtcXG4gICAgICAgIGNhbmNlbChwcm9qZWN0SWQ6ICRwcm9qZWN0SWQsIGludml0ZUlkOiAkaW52aXRlSWQpIHtcXG4gICAgICAgICAgLi4uUHJvamVjdFBhZ2VUZWFtRGlhbG9nXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIFVwZGF0ZVByb2plY3RNZXRhZGF0YSgkdXBkYXRlOiBQcm9qZWN0VXBkYXRlSW5wdXQhKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIHVwZGF0ZSh1cGRhdGU6ICR1cGRhdGUpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5Qcm9qZWN0VXBkYXRhYmxlTWV0YWRhdGFcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gVXBkYXRlUHJvamVjdE1ldGFkYXRhKCR1cGRhdGU6IFByb2plY3RVcGRhdGVJbnB1dCEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgdXBkYXRlKHVwZGF0ZTogJHVwZGF0ZSkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIC4uLlByb2plY3RVcGRhdGFibGVNZXRhZGF0YVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBEZWxldGVQcm9qZWN0KCRpZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBkZWxldGUoaWQ6ICRpZClcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBEZWxldGVQcm9qZWN0KCRpZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBkZWxldGUoaWQ6ICRpZClcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBVc2VQcm9qZWN0SW52aXRlKCRpbnB1dDogUHJvamVjdEludml0ZVVzZUlucHV0ISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBpbnZpdGVzIHtcXG4gICAgICAgIHVzZShpbnB1dDogJGlucHV0KVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBVc2VQcm9qZWN0SW52aXRlKCRpbnB1dDogUHJvamVjdEludml0ZVVzZUlucHV0ISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBpbnZpdGVzIHtcXG4gICAgICAgIHVzZShpbnB1dDogJGlucHV0KVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBMZWF2ZVByb2plY3QoJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBsZWF2ZShpZDogJHByb2plY3RJZClcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBMZWF2ZVByb2plY3QoJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBsZWF2ZShpZDogJHByb2plY3RJZClcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBEZWxldGVWZXJzaW9ucygkaW5wdXQ6IERlbGV0ZVZlcnNpb25zSW5wdXQhKSB7XFxuICAgIHZlcnNpb25NdXRhdGlvbnMge1xcbiAgICAgIGRlbGV0ZShpbnB1dDogJGlucHV0KVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIERlbGV0ZVZlcnNpb25zKCRpbnB1dDogRGVsZXRlVmVyc2lvbnNJbnB1dCEpIHtcXG4gICAgdmVyc2lvbk11dGF0aW9ucyB7XFxuICAgICAgZGVsZXRlKGlucHV0OiAkaW5wdXQpXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gTW92ZVZlcnNpb25zKCRpbnB1dDogTW92ZVZlcnNpb25zSW5wdXQhKSB7XFxuICAgIHZlcnNpb25NdXRhdGlvbnMge1xcbiAgICAgIG1vdmVUb01vZGVsKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIE1vdmVWZXJzaW9ucygkaW5wdXQ6IE1vdmVWZXJzaW9uc0lucHV0ISkge1xcbiAgICB2ZXJzaW9uTXV0YXRpb25zIHtcXG4gICAgICBtb3ZlVG9Nb2RlbChpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICBpZFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBVcGRhdGVWZXJzaW9uKCRpbnB1dDogVXBkYXRlVmVyc2lvbklucHV0ISkge1xcbiAgICB2ZXJzaW9uTXV0YXRpb25zIHtcXG4gICAgICB1cGRhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIG1lc3NhZ2VcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gVXBkYXRlVmVyc2lvbigkaW5wdXQ6IFVwZGF0ZVZlcnNpb25JbnB1dCEpIHtcXG4gICAgdmVyc2lvbk11dGF0aW9ucyB7XFxuICAgICAgdXBkYXRlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBtZXNzYWdlXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIGRlbGV0ZVdlYmhvb2soJHdlYmhvb2s6IFdlYmhvb2tEZWxldGVJbnB1dCEpIHtcXG4gICAgd2ViaG9va0RlbGV0ZSh3ZWJob29rOiAkd2ViaG9vaylcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gZGVsZXRlV2ViaG9vaygkd2ViaG9vazogV2ViaG9va0RlbGV0ZUlucHV0ISkge1xcbiAgICB3ZWJob29rRGVsZXRlKHdlYmhvb2s6ICR3ZWJob29rKVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBjcmVhdGVXZWJob29rKCR3ZWJob29rOiBXZWJob29rQ3JlYXRlSW5wdXQhKSB7XFxuICAgIHdlYmhvb2tDcmVhdGUod2ViaG9vazogJHdlYmhvb2spXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIGNyZWF0ZVdlYmhvb2soJHdlYmhvb2s6IFdlYmhvb2tDcmVhdGVJbnB1dCEpIHtcXG4gICAgd2ViaG9va0NyZWF0ZSh3ZWJob29rOiAkd2ViaG9vaylcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gdXBkYXRlV2ViaG9vaygkd2ViaG9vazogV2ViaG9va1VwZGF0ZUlucHV0ISkge1xcbiAgICB3ZWJob29rVXBkYXRlKHdlYmhvb2s6ICR3ZWJob29rKVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiB1cGRhdGVXZWJob29rKCR3ZWJob29rOiBXZWJob29rVXBkYXRlSW5wdXQhKSB7XFxuICAgIHdlYmhvb2tVcGRhdGUod2ViaG9vazogJHdlYmhvb2spXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIENyZWF0ZUF1dG9tYXRpb24oJHByb2plY3RJZDogSUQhLCAkaW5wdXQ6IFByb2plY3RBdXRvbWF0aW9uQ3JlYXRlSW5wdXQhKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIGF1dG9tYXRpb25NdXRhdGlvbnMocHJvamVjdElkOiAkcHJvamVjdElkKSB7XFxuICAgICAgICBjcmVhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICAuLi5Qcm9qZWN0UGFnZUF1dG9tYXRpb25zUm93X0F1dG9tYXRpb25cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gQ3JlYXRlQXV0b21hdGlvbigkcHJvamVjdElkOiBJRCEsICRpbnB1dDogUHJvamVjdEF1dG9tYXRpb25DcmVhdGVJbnB1dCEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgYXV0b21hdGlvbk11dGF0aW9ucyhwcm9qZWN0SWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICAgIGNyZWF0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLlByb2plY3RQYWdlQXV0b21hdGlvbnNSb3dfQXV0b21hdGlvblxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBEZWxldGVBdXRvbWF0aW9uKCRwcm9qZWN0SWQ6IElEISwgJGF1dG9tYXRpb25JZDogSUQhKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIGF1dG9tYXRpb25NdXRhdGlvbnMocHJvamVjdElkOiAkcHJvamVjdElkKSB7XFxuICAgICAgICBkZWxldGUoYXV0b21hdGlvbklkOiAkYXV0b21hdGlvbklkKVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBEZWxldGVBdXRvbWF0aW9uKCRwcm9qZWN0SWQ6IElEISwgJGF1dG9tYXRpb25JZDogSUQhKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIGF1dG9tYXRpb25NdXRhdGlvbnMocHJvamVjdElkOiAkcHJvamVjdElkKSB7XFxuICAgICAgICBkZWxldGUoYXV0b21hdGlvbklkOiAkYXV0b21hdGlvbklkKVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBVcGRhdGVBdXRvbWF0aW9uKCRwcm9qZWN0SWQ6IElEISwgJGlucHV0OiBQcm9qZWN0QXV0b21hdGlvblVwZGF0ZUlucHV0ISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBhdXRvbWF0aW9uTXV0YXRpb25zKHByb2plY3RJZDogJHByb2plY3RJZCkge1xcbiAgICAgICAgdXBkYXRlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgbmFtZVxcbiAgICAgICAgICBlbmFibGVkXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIFVwZGF0ZUF1dG9tYXRpb24oJHByb2plY3RJZDogSUQhLCAkaW5wdXQ6IFByb2plY3RBdXRvbWF0aW9uVXBkYXRlSW5wdXQhKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIGF1dG9tYXRpb25NdXRhdGlvbnMocHJvamVjdElkOiAkcHJvamVjdElkKSB7XFxuICAgICAgICB1cGRhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBuYW1lXFxuICAgICAgICAgIGVuYWJsZWRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gQ3JlYXRlQXV0b21hdGlvblJldmlzaW9uKFxcbiAgICAkcHJvamVjdElkOiBJRCFcXG4gICAgJGlucHV0OiBQcm9qZWN0QXV0b21hdGlvblJldmlzaW9uQ3JlYXRlSW5wdXQhXFxuICApIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgYXV0b21hdGlvbk11dGF0aW9ucyhwcm9qZWN0SWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICAgIGNyZWF0ZVJldmlzaW9uKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gQ3JlYXRlQXV0b21hdGlvblJldmlzaW9uKFxcbiAgICAkcHJvamVjdElkOiBJRCFcXG4gICAgJGlucHV0OiBQcm9qZWN0QXV0b21hdGlvblJldmlzaW9uQ3JlYXRlSW5wdXQhXFxuICApIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgYXV0b21hdGlvbk11dGF0aW9ucyhwcm9qZWN0SWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICAgIGNyZWF0ZVJldmlzaW9uKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gVHJpZ2dlckF1dG9tYXRpb24oJHByb2plY3RJZDogSUQhLCAkYXV0b21hdGlvbklkOiBJRCEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgYXV0b21hdGlvbk11dGF0aW9ucyhwcm9qZWN0SWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICAgIHRyaWdnZXIoYXV0b21hdGlvbklkOiAkYXV0b21hdGlvbklkKVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBUcmlnZ2VyQXV0b21hdGlvbigkcHJvamVjdElkOiBJRCEsICRhdXRvbWF0aW9uSWQ6IElEISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBhdXRvbWF0aW9uTXV0YXRpb25zKHByb2plY3RJZDogJHByb2plY3RJZCkge1xcbiAgICAgICAgdHJpZ2dlcihhdXRvbWF0aW9uSWQ6ICRhdXRvbWF0aW9uSWQpXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIENyZWF0ZVRlc3RBdXRvbWF0aW9uKFxcbiAgICAkcHJvamVjdElkOiBJRCFcXG4gICAgJGlucHV0OiBQcm9qZWN0VGVzdEF1dG9tYXRpb25DcmVhdGVJbnB1dCFcXG4gICkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBhdXRvbWF0aW9uTXV0YXRpb25zKHByb2plY3RJZDogJHByb2plY3RJZCkge1xcbiAgICAgICAgY3JlYXRlVGVzdEF1dG9tYXRpb24oaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICAuLi5Qcm9qZWN0UGFnZUF1dG9tYXRpb25zUm93X0F1dG9tYXRpb25cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gQ3JlYXRlVGVzdEF1dG9tYXRpb24oXFxuICAgICRwcm9qZWN0SWQ6IElEIVxcbiAgICAkaW5wdXQ6IFByb2plY3RUZXN0QXV0b21hdGlvbkNyZWF0ZUlucHV0IVxcbiAgKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIGF1dG9tYXRpb25NdXRhdGlvbnMocHJvamVjdElkOiAkcHJvamVjdElkKSB7XFxuICAgICAgICBjcmVhdGVUZXN0QXV0b21hdGlvbihpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLlByb2plY3RQYWdlQXV0b21hdGlvbnNSb3dfQXV0b21hdGlvblxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBNb3ZlUHJvamVjdFRvV29ya3NwYWNlKCR3b3Jrc3BhY2VJZDogU3RyaW5nISwgJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIHByb2plY3RzIHtcXG4gICAgICAgIG1vdmVUb1dvcmtzcGFjZSh3b3Jrc3BhY2VJZDogJHdvcmtzcGFjZUlkLCBwcm9qZWN0SWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgd29ya3NwYWNlSWRcXG4gICAgICAgICAgd29ya3NwYWNlIHtcXG4gICAgICAgICAgICBpZFxcbiAgICAgICAgICAgIHByb2plY3RzIHtcXG4gICAgICAgICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLi4uV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1dvcmtzcGFjZVxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIE1vdmVQcm9qZWN0VG9Xb3Jrc3BhY2UoJHdvcmtzcGFjZUlkOiBTdHJpbmchLCAkcHJvamVjdElkOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgcHJvamVjdHMge1xcbiAgICAgICAgbW92ZVRvV29ya3NwYWNlKHdvcmtzcGFjZUlkOiAkd29ya3NwYWNlSWQsIHByb2plY3RJZDogJHByb2plY3RJZCkge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICB3b3Jrc3BhY2VJZFxcbiAgICAgICAgICB3b3Jrc3BhY2Uge1xcbiAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgcHJvamVjdHMge1xcbiAgICAgICAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAgICAgICBpZFxcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAuLi5Xb3Jrc3BhY2VNb3ZlUHJvamVjdE1hbmFnZXJfV29ya3NwYWNlXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gQ3JlYXRlRW1iZWRUb2tlbigkdG9rZW46IEVtYmVkVG9rZW5DcmVhdGVJbnB1dCEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgY3JlYXRlRW1iZWRUb2tlbih0b2tlbjogJHRva2VuKSB7XFxuICAgICAgICB0b2tlblxcbiAgICAgICAgdG9rZW5NZXRhZGF0YSB7XFxuICAgICAgICAgIHByb2plY3RJZFxcbiAgICAgICAgICB0b2tlbklkXFxuICAgICAgICAgIC4uLlByb2plY3RQYWdlU2V0dGluZ3NUb2tlbnNfRW1iZWRUb2tlblxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBDcmVhdGVFbWJlZFRva2VuKCR0b2tlbjogRW1iZWRUb2tlbkNyZWF0ZUlucHV0ISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBjcmVhdGVFbWJlZFRva2VuKHRva2VuOiAkdG9rZW4pIHtcXG4gICAgICAgIHRva2VuXFxuICAgICAgICB0b2tlbk1ldGFkYXRhIHtcXG4gICAgICAgICAgcHJvamVjdElkXFxuICAgICAgICAgIHRva2VuSWRcXG4gICAgICAgICAgLi4uUHJvamVjdFBhZ2VTZXR0aW5nc1Rva2Vuc19FbWJlZFRva2VuXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIERlbGV0ZUVtYmVkVG9rZW4oJHByb2plY3RJZDogU3RyaW5nISwgJHRva2VuOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIHJldm9rZUVtYmVkVG9rZW4ocHJvamVjdElkOiAkcHJvamVjdElkLCB0b2tlbjogJHRva2VuKVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIERlbGV0ZUVtYmVkVG9rZW4oJHByb2plY3RJZDogU3RyaW5nISwgJHRva2VuOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIHJldm9rZUVtYmVkVG9rZW4ocHJvamVjdElkOiAkcHJvamVjdElkLCB0b2tlbjogJHRva2VuKVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIFJldm9rZUVtYmVkVG9rZW5zKCRwcm9qZWN0SWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgcmV2b2tlRW1iZWRUb2tlbnMocHJvamVjdElkOiAkcHJvamVjdElkKVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIFJldm9rZUVtYmVkVG9rZW5zKCRwcm9qZWN0SWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgcmV2b2tlRW1iZWRUb2tlbnMocHJvamVjdElkOiAkcHJvamVjdElkKVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFByb2plY3RBY2Nlc3NDaGVjaygkaWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJGlkKSB7XFxuICAgICAgaWRcXG4gICAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgICBjYW5SZWFkIHtcXG4gICAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICB3b3Jrc3BhY2VJZFxcbiAgICB9XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgYWN0aXZlV29ya3NwYWNlIHtcXG4gICAgICAgIGlkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFByb2plY3RBY2Nlc3NDaGVjaygkaWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJGlkKSB7XFxuICAgICAgaWRcXG4gICAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgICBjYW5SZWFkIHtcXG4gICAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICB3b3Jrc3BhY2VJZFxcbiAgICB9XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgYWN0aXZlV29ya3NwYWNlIHtcXG4gICAgICAgIGlkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFByb2plY3RzRGFzaGJvYXJkUXVlcnkoJGZpbHRlcjogVXNlclByb2plY3RzRmlsdGVyLCAkY3Vyc29yOiBTdHJpbmcpIHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgaWRcXG4gICAgICBwcm9qZWN0cyhmaWx0ZXI6ICRmaWx0ZXIsIGxpbWl0OiA2LCBjdXJzb3I6ICRjdXJzb3IpIHtcXG4gICAgICAgIC4uLlByb2plY3RzRGFzaGJvYXJkX1VzZXJQcm9qZWN0Q29sbGVjdGlvblxcbiAgICAgICAgY3Vyc29yXFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIC4uLlByb2plY3REYXNoYm9hcmRJdGVtXFxuICAgICAgICAgIC4uLldvcmtzcGFjZU1vdmVQcm9qZWN0X1Byb2plY3RcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgLi4uUHJvamVjdHNIaWRkZW5Qcm9qZWN0V2FybmluZ19Vc2VyXFxuICAgICAgLi4uUHJvamVjdHNEYXNoYm9hcmRfVXNlclxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFByb2plY3RzRGFzaGJvYXJkUXVlcnkoJGZpbHRlcjogVXNlclByb2plY3RzRmlsdGVyLCAkY3Vyc29yOiBTdHJpbmcpIHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgaWRcXG4gICAgICBwcm9qZWN0cyhmaWx0ZXI6ICRmaWx0ZXIsIGxpbWl0OiA2LCBjdXJzb3I6ICRjdXJzb3IpIHtcXG4gICAgICAgIC4uLlByb2plY3RzRGFzaGJvYXJkX1VzZXJQcm9qZWN0Q29sbGVjdGlvblxcbiAgICAgICAgY3Vyc29yXFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIC4uLlByb2plY3REYXNoYm9hcmRJdGVtXFxuICAgICAgICAgIC4uLldvcmtzcGFjZU1vdmVQcm9qZWN0X1Byb2plY3RcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgLi4uUHJvamVjdHNIaWRkZW5Qcm9qZWN0V2FybmluZ19Vc2VyXFxuICAgICAgLi4uUHJvamVjdHNEYXNoYm9hcmRfVXNlclxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFByb2plY3RQYWdlUXVlcnkoJGlkOiBTdHJpbmchLCAkdG9rZW46IFN0cmluZykge1xcbiAgICBwcm9qZWN0KGlkOiAkaWQpIHtcXG4gICAgICAuLi5Qcm9qZWN0UGFnZVByb2plY3RcXG4gICAgfVxcbiAgICBwcm9qZWN0SW52aXRlKHByb2plY3RJZDogJGlkLCB0b2tlbjogJHRva2VuKSB7XFxuICAgICAgLi4uUHJvamVjdHNJbnZpdGVCYW5uZXJcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBQcm9qZWN0UGFnZVF1ZXJ5KCRpZDogU3RyaW5nISwgJHRva2VuOiBTdHJpbmcpIHtcXG4gICAgcHJvamVjdChpZDogJGlkKSB7XFxuICAgICAgLi4uUHJvamVjdFBhZ2VQcm9qZWN0XFxuICAgIH1cXG4gICAgcHJvamVjdEludml0ZShwcm9qZWN0SWQ6ICRpZCwgdG9rZW46ICR0b2tlbikge1xcbiAgICAgIC4uLlByb2plY3RzSW52aXRlQmFubmVyXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgUHJvamVjdExhdGVzdE1vZGVscygkcHJvamVjdElkOiBTdHJpbmchLCAkZmlsdGVyOiBQcm9qZWN0TW9kZWxzRmlsdGVyKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIG1vZGVscyhjdXJzb3I6IG51bGwsIGxpbWl0OiAxNiwgZmlsdGVyOiAkZmlsdGVyKSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBjdXJzb3JcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgLi4uUHJvamVjdFBhZ2VMYXRlc3RJdGVtc01vZGVsSXRlbVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICBwZW5kaW5nSW1wb3J0ZWRNb2RlbHMge1xcbiAgICAgICAgLi4uUGVuZGluZ0ZpbGVVcGxvYWRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgUHJvamVjdExhdGVzdE1vZGVscygkcHJvamVjdElkOiBTdHJpbmchLCAkZmlsdGVyOiBQcm9qZWN0TW9kZWxzRmlsdGVyKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIG1vZGVscyhjdXJzb3I6IG51bGwsIGxpbWl0OiAxNiwgZmlsdGVyOiAkZmlsdGVyKSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBjdXJzb3JcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgLi4uUHJvamVjdFBhZ2VMYXRlc3RJdGVtc01vZGVsSXRlbVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICBwZW5kaW5nSW1wb3J0ZWRNb2RlbHMge1xcbiAgICAgICAgLi4uUGVuZGluZ0ZpbGVVcGxvYWRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgUHJvamVjdExhdGVzdE1vZGVsc1BhZ2luYXRpb24oXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJGZpbHRlcjogUHJvamVjdE1vZGVsc0ZpbHRlclxcbiAgICAkY3Vyc29yOiBTdHJpbmcgPSBudWxsXFxuICAgICRsaW1pdDogSW50ID0gMTZcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBtb2RlbHMoY3Vyc29yOiAkY3Vyc29yLCBsaW1pdDogJGxpbWl0LCBmaWx0ZXI6ICRmaWx0ZXIpIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIGN1cnNvclxcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAuLi5Qcm9qZWN0UGFnZUxhdGVzdEl0ZW1zTW9kZWxJdGVtXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFByb2plY3RMYXRlc3RNb2RlbHNQYWdpbmF0aW9uKFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRmaWx0ZXI6IFByb2plY3RNb2RlbHNGaWx0ZXJcXG4gICAgJGN1cnNvcjogU3RyaW5nID0gbnVsbFxcbiAgICAkbGltaXQ6IEludCA9IDE2XFxuICApIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgbW9kZWxzKGN1cnNvcjogJGN1cnNvciwgbGltaXQ6ICRsaW1pdCwgZmlsdGVyOiAkZmlsdGVyKSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBjdXJzb3JcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgLi4uUHJvamVjdFBhZ2VMYXRlc3RJdGVtc01vZGVsSXRlbVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBQcm9qZWN0TW9kZWxzVHJlZVRvcExldmVsKFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRmaWx0ZXI6IFByb2plY3RNb2RlbHNUcmVlRmlsdGVyXFxuICApIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgbW9kZWxzVHJlZShjdXJzb3I6IG51bGwsIGxpbWl0OiA4LCBmaWx0ZXI6ICRmaWx0ZXIpIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIGN1cnNvclxcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAuLi5TaW5nbGVMZXZlbE1vZGVsVHJlZUl0ZW1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcGVuZGluZ0ltcG9ydGVkTW9kZWxzIHtcXG4gICAgICAgIC4uLlBlbmRpbmdGaWxlVXBsb2FkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFByb2plY3RNb2RlbHNUcmVlVG9wTGV2ZWwoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJGZpbHRlcjogUHJvamVjdE1vZGVsc1RyZWVGaWx0ZXJcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBtb2RlbHNUcmVlKGN1cnNvcjogbnVsbCwgbGltaXQ6IDgsIGZpbHRlcjogJGZpbHRlcikge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgY3Vyc29yXFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIC4uLlNpbmdsZUxldmVsTW9kZWxUcmVlSXRlbVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICBwZW5kaW5nSW1wb3J0ZWRNb2RlbHMge1xcbiAgICAgICAgLi4uUGVuZGluZ0ZpbGVVcGxvYWRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgUHJvamVjdE1vZGVsc1RyZWVUb3BMZXZlbFBhZ2luYXRpb24oXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJGZpbHRlcjogUHJvamVjdE1vZGVsc1RyZWVGaWx0ZXJcXG4gICAgJGN1cnNvcjogU3RyaW5nID0gbnVsbFxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIG1vZGVsc1RyZWUoY3Vyc29yOiAkY3Vyc29yLCBsaW1pdDogOCwgZmlsdGVyOiAkZmlsdGVyKSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBjdXJzb3JcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgLi4uU2luZ2xlTGV2ZWxNb2RlbFRyZWVJdGVtXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFByb2plY3RNb2RlbHNUcmVlVG9wTGV2ZWxQYWdpbmF0aW9uKFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRmaWx0ZXI6IFByb2plY3RNb2RlbHNUcmVlRmlsdGVyXFxuICAgICRjdXJzb3I6IFN0cmluZyA9IG51bGxcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBtb2RlbHNUcmVlKGN1cnNvcjogJGN1cnNvciwgbGltaXQ6IDgsIGZpbHRlcjogJGZpbHRlcikge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgY3Vyc29yXFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIC4uLlNpbmdsZUxldmVsTW9kZWxUcmVlSXRlbVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBQcm9qZWN0TW9kZWxDaGlsZHJlblRyZWUoJHByb2plY3RJZDogU3RyaW5nISwgJHBhcmVudE5hbWU6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgbW9kZWxDaGlsZHJlblRyZWUoZnVsbE5hbWU6ICRwYXJlbnROYW1lKSB7XFxuICAgICAgICAuLi5TaW5nbGVMZXZlbE1vZGVsVHJlZUl0ZW1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgUHJvamVjdE1vZGVsQ2hpbGRyZW5UcmVlKCRwcm9qZWN0SWQ6IFN0cmluZyEsICRwYXJlbnROYW1lOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIG1vZGVsQ2hpbGRyZW5UcmVlKGZ1bGxOYW1lOiAkcGFyZW50TmFtZSkge1xcbiAgICAgICAgLi4uU2luZ2xlTGV2ZWxNb2RlbFRyZWVJdGVtXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFByb2plY3RMYXRlc3RDb21tZW50VGhyZWFkcyhcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkY3Vyc29yOiBTdHJpbmcgPSBudWxsXFxuICAgICRmaWx0ZXI6IFByb2plY3RDb21tZW50c0ZpbHRlciA9IG51bGxcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBjb21tZW50VGhyZWFkcyhjdXJzb3I6ICRjdXJzb3IsIGxpbWl0OiA4LCBmaWx0ZXI6ICRmaWx0ZXIpIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIGN1cnNvclxcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAuLi5Qcm9qZWN0UGFnZUxhdGVzdEl0ZW1zQ29tbWVudEl0ZW1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgLi4uVmlld2VyUmVzb3VyY2VzTGltaXRBbGVydF9Qcm9qZWN0XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgUHJvamVjdExhdGVzdENvbW1lbnRUaHJlYWRzKFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRjdXJzb3I6IFN0cmluZyA9IG51bGxcXG4gICAgJGZpbHRlcjogUHJvamVjdENvbW1lbnRzRmlsdGVyID0gbnVsbFxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIGNvbW1lbnRUaHJlYWRzKGN1cnNvcjogJGN1cnNvciwgbGltaXQ6IDgsIGZpbHRlcjogJGZpbHRlcikge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgY3Vyc29yXFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIC4uLlByb2plY3RQYWdlTGF0ZXN0SXRlbXNDb21tZW50SXRlbVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICAuLi5WaWV3ZXJSZXNvdXJjZXNMaW1pdEFsZXJ0X1Byb2plY3RcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBQcm9qZWN0SW52aXRlKCRwcm9qZWN0SWQ6IFN0cmluZyEsICR0b2tlbjogU3RyaW5nKSB7XFxuICAgIHByb2plY3RJbnZpdGUocHJvamVjdElkOiAkcHJvamVjdElkLCB0b2tlbjogJHRva2VuKSB7XFxuICAgICAgLi4uUHJvamVjdHNJbnZpdGVCYW5uZXJcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBQcm9qZWN0SW52aXRlKCRwcm9qZWN0SWQ6IFN0cmluZyEsICR0b2tlbjogU3RyaW5nKSB7XFxuICAgIHByb2plY3RJbnZpdGUocHJvamVjdElkOiAkcHJvamVjdElkLCB0b2tlbjogJHRva2VuKSB7XFxuICAgICAgLi4uUHJvamVjdHNJbnZpdGVCYW5uZXJcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBQcm9qZWN0TW9kZWxDaGVjaygkcHJvamVjdElkOiBTdHJpbmchLCAkbW9kZWxJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgdmlzaWJpbGl0eVxcbiAgICAgIG1vZGVsKGlkOiAkbW9kZWxJZCkge1xcbiAgICAgICAgaWRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgUHJvamVjdE1vZGVsQ2hlY2soJHByb2plY3RJZDogU3RyaW5nISwgJG1vZGVsSWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIHZpc2liaWxpdHlcXG4gICAgICBtb2RlbChpZDogJG1vZGVsSWQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFByb2plY3RNb2RlbFBhZ2UoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJG1vZGVsSWQ6IFN0cmluZyFcXG4gICAgJHZlcnNpb25zQ3Vyc29yOiBTdHJpbmdcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5Qcm9qZWN0TW9kZWxQYWdlSGVhZGVyUHJvamVjdFxcbiAgICAgIC4uLlByb2plY3RNb2RlbFBhZ2VWZXJzaW9uc1Byb2plY3RcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBQcm9qZWN0TW9kZWxQYWdlKFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRtb2RlbElkOiBTdHJpbmchXFxuICAgICR2ZXJzaW9uc0N1cnNvcjogU3RyaW5nXFxuICApIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgLi4uUHJvamVjdE1vZGVsUGFnZUhlYWRlclByb2plY3RcXG4gICAgICAuLi5Qcm9qZWN0TW9kZWxQYWdlVmVyc2lvbnNQcm9qZWN0XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgUHJvamVjdE1vZGVsVmVyc2lvbnMoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJG1vZGVsSWQ6IFN0cmluZyFcXG4gICAgJHZlcnNpb25zQ3Vyc29yOiBTdHJpbmdcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5Qcm9qZWN0TW9kZWxQYWdlVmVyc2lvbnNQYWdpbmF0aW9uXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgUHJvamVjdE1vZGVsVmVyc2lvbnMoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJG1vZGVsSWQ6IFN0cmluZyFcXG4gICAgJHZlcnNpb25zQ3Vyc29yOiBTdHJpbmdcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5Qcm9qZWN0TW9kZWxQYWdlVmVyc2lvbnNQYWdpbmF0aW9uXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgUHJvamVjdE1vZGVsc1BhZ2UoJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5Qcm9qZWN0TW9kZWxzUGFnZUhlYWRlcl9Qcm9qZWN0XFxuICAgICAgLi4uUHJvamVjdE1vZGVsc1BhZ2VSZXN1bHRzX1Byb2plY3RcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBQcm9qZWN0TW9kZWxzUGFnZSgkcHJvamVjdElkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLlByb2plY3RNb2RlbHNQYWdlSGVhZGVyX1Byb2plY3RcXG4gICAgICAuLi5Qcm9qZWN0TW9kZWxzUGFnZVJlc3VsdHNfUHJvamVjdFxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFByb2plY3REaXNjdXNzaW9uc1BhZ2UoJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5Qcm9qZWN0RGlzY3Vzc2lvbnNQYWdlSGVhZGVyX1Byb2plY3RcXG4gICAgICAuLi5Qcm9qZWN0RGlzY3Vzc2lvbnNQYWdlUmVzdWx0c19Qcm9qZWN0XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgUHJvamVjdERpc2N1c3Npb25zUGFnZSgkcHJvamVjdElkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLlByb2plY3REaXNjdXNzaW9uc1BhZ2VIZWFkZXJfUHJvamVjdFxcbiAgICAgIC4uLlByb2plY3REaXNjdXNzaW9uc1BhZ2VSZXN1bHRzX1Byb2plY3RcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBQcm9qZWN0QXV0b21hdGlvbnNUYWIoJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICByb2xlXFxuICAgICAgbW9kZWxzKGxpbWl0OiAxKSB7XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIGF1dG9tYXRpb25zKGZpbHRlcjogbnVsbCwgY3Vyc29yOiBudWxsLCBsaW1pdDogNSkge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICAuLi5Qcm9qZWN0UGFnZUF1dG9tYXRpb25zUm93X0F1dG9tYXRpb25cXG4gICAgICAgIH1cXG4gICAgICAgIGN1cnNvclxcbiAgICAgIH1cXG4gICAgICB3b3Jrc3BhY2Uge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGF1dG9tYXRlRnVuY3Rpb25zKGxpbWl0OiAwKSB7XFxuICAgICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIH1cXG4gICAgICAgIC4uLkF1dG9tYXRlRnVuY3Rpb25DcmVhdGVEaWFsb2dfV29ya3NwYWNlXFxuICAgICAgfVxcbiAgICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICAgIGNhbkNyZWF0ZUF1dG9tYXRpb24ge1xcbiAgICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIC4uLkZvcm1TZWxlY3RQcm9qZWN0c19Qcm9qZWN0XFxuICAgIH1cXG4gICAgLi4uQXV0b21hdGVGdW5jdGlvbnNQYWdlSGVhZGVyX1F1ZXJ5XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFByb2plY3RBdXRvbWF0aW9uc1RhYigkcHJvamVjdElkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHJvbGVcXG4gICAgICBtb2RlbHMobGltaXQ6IDEpIHtcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgYXV0b21hdGlvbnMoZmlsdGVyOiBudWxsLCBjdXJzb3I6IG51bGwsIGxpbWl0OiA1KSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLlByb2plY3RQYWdlQXV0b21hdGlvbnNSb3dfQXV0b21hdGlvblxcbiAgICAgICAgfVxcbiAgICAgICAgY3Vyc29yXFxuICAgICAgfVxcbiAgICAgIHdvcmtzcGFjZSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgYXV0b21hdGVGdW5jdGlvbnMobGltaXQ6IDApIHtcXG4gICAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgfVxcbiAgICAgICAgLi4uQXV0b21hdGVGdW5jdGlvbkNyZWF0ZURpYWxvZ19Xb3Jrc3BhY2VcXG4gICAgICB9XFxuICAgICAgcGVybWlzc2lvbnMge1xcbiAgICAgICAgY2FuQ3JlYXRlQXV0b21hdGlvbiB7XFxuICAgICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgLi4uRm9ybVNlbGVjdFByb2plY3RzX1Byb2plY3RcXG4gICAgfVxcbiAgICAuLi5BdXRvbWF0ZUZ1bmN0aW9uc1BhZ2VIZWFkZXJfUXVlcnlcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgUHJvamVjdEF1dG9tYXRpb25zVGFiQXV0b21hdGlvbnNQYWdpbmF0aW9uKFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRzZWFyY2g6IFN0cmluZyA9IG51bGxcXG4gICAgJGN1cnNvcjogU3RyaW5nID0gbnVsbFxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIGF1dG9tYXRpb25zKGZpbHRlcjogJHNlYXJjaCwgY3Vyc29yOiAkY3Vyc29yLCBsaW1pdDogNSkge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgY3Vyc29yXFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLlByb2plY3RQYWdlQXV0b21hdGlvbnNSb3dfQXV0b21hdGlvblxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBQcm9qZWN0QXV0b21hdGlvbnNUYWJBdXRvbWF0aW9uc1BhZ2luYXRpb24oXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJHNlYXJjaDogU3RyaW5nID0gbnVsbFxcbiAgICAkY3Vyc29yOiBTdHJpbmcgPSBudWxsXFxuICApIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgYXV0b21hdGlvbnMoZmlsdGVyOiAkc2VhcmNoLCBjdXJzb3I6ICRjdXJzb3IsIGxpbWl0OiA1KSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBjdXJzb3JcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uUHJvamVjdFBhZ2VBdXRvbWF0aW9uc1Jvd19BdXRvbWF0aW9uXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFByb2plY3RBdXRvbWF0aW9uUGFnZSgkcHJvamVjdElkOiBTdHJpbmchLCAkYXV0b21hdGlvbklkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLlByb2plY3RQYWdlQXV0b21hdGlvblBhZ2VfUHJvamVjdFxcbiAgICAgIGF1dG9tYXRpb24oaWQ6ICRhdXRvbWF0aW9uSWQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5Qcm9qZWN0UGFnZUF1dG9tYXRpb25QYWdlX0F1dG9tYXRpb25cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgUHJvamVjdEF1dG9tYXRpb25QYWdlKCRwcm9qZWN0SWQ6IFN0cmluZyEsICRhdXRvbWF0aW9uSWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgLi4uUHJvamVjdFBhZ2VBdXRvbWF0aW9uUGFnZV9Qcm9qZWN0XFxuICAgICAgYXV0b21hdGlvbihpZDogJGF1dG9tYXRpb25JZCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIC4uLlByb2plY3RQYWdlQXV0b21hdGlvblBhZ2VfQXV0b21hdGlvblxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBQcm9qZWN0QXV0b21hdGlvblBhZ2VQYWdpbmF0ZWRSdW5zKFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRhdXRvbWF0aW9uSWQ6IFN0cmluZyFcXG4gICAgJGN1cnNvcjogU3RyaW5nID0gbnVsbFxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIGF1dG9tYXRpb24oaWQ6ICRhdXRvbWF0aW9uSWQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBydW5zKGN1cnNvcjogJGN1cnNvciwgbGltaXQ6IDEwKSB7XFxuICAgICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgICAgY3Vyc29yXFxuICAgICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgICBpZFxcbiAgICAgICAgICAgIC4uLkF1dG9tYXRpb25SdW5EZXRhaWxzXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgUHJvamVjdEF1dG9tYXRpb25QYWdlUGFnaW5hdGVkUnVucyhcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkYXV0b21hdGlvbklkOiBTdHJpbmchXFxuICAgICRjdXJzb3I6IFN0cmluZyA9IG51bGxcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBhdXRvbWF0aW9uKGlkOiAkYXV0b21hdGlvbklkKSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgcnVucyhjdXJzb3I6ICRjdXJzb3IsIGxpbWl0OiAxMCkge1xcbiAgICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICAgIGN1cnNvclxcbiAgICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICAuLi5BdXRvbWF0aW9uUnVuRGV0YWlsc1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFByb2plY3RBdXRvbWF0aW9uQWNjZXNzQ2hlY2soJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBhdXRvbWF0aW9ucyhsaW1pdDogMCkge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBQcm9qZWN0QXV0b21hdGlvbkFjY2Vzc0NoZWNrKCRwcm9qZWN0SWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgYXV0b21hdGlvbnMobGltaXQ6IDApIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgUHJvamVjdFdlYmhvb2tzKCRwcm9qZWN0SWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICAgIC4uLlByb2plY3RQYWdlU2V0dGluZ3NXZWJob29rc19Qcm9qZWN0XFxuICAgICAgd2ViaG9va3Mge1xcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICBzdHJlYW1JZFxcbiAgICAgICAgICB0cmlnZ2Vyc1xcbiAgICAgICAgICBlbmFibGVkXFxuICAgICAgICAgIHVybFxcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBkZXNjcmlwdGlvblxcbiAgICAgICAgICBoaXN0b3J5KGxpbWl0OiA1KSB7XFxuICAgICAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAgICAgc3RhdHVzXFxuICAgICAgICAgICAgICBzdGF0dXNJbmZvXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFByb2plY3RXZWJob29rcygkcHJvamVjdElkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgICAuLi5Qcm9qZWN0UGFnZVNldHRpbmdzV2ViaG9va3NfUHJvamVjdFxcbiAgICAgIHdlYmhvb2tzIHtcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgc3RyZWFtSWRcXG4gICAgICAgICAgdHJpZ2dlcnNcXG4gICAgICAgICAgZW5hYmxlZFxcbiAgICAgICAgICB1cmxcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgZGVzY3JpcHRpb25cXG4gICAgICAgICAgaGlzdG9yeShsaW1pdDogNSkge1xcbiAgICAgICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgICAgIHN0YXR1c1xcbiAgICAgICAgICAgICAgc3RhdHVzSW5mb1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBQcm9qZWN0SW50ZWdyYXRpb25zKCRwcm9qZWN0SWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICAgIC4uLlByb2plY3RQYWdlU2V0dGluZ3NJbnRlZ3JhdGlvbnNfUHJvamVjdFxcbiAgICAgIGFjY1N5bmNJdGVtcyB7XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICB9XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFByb2plY3RJbnRlZ3JhdGlvbnMoJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgICAgLi4uUHJvamVjdFBhZ2VTZXR0aW5nc0ludGVncmF0aW9uc19Qcm9qZWN0XFxuICAgICAgYWNjU3luY0l0ZW1zIHtcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgIH1cXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgUHJvamVjdEVtYmVkVG9rZW5zKCRwcm9qZWN0SWQ6IFN0cmluZyEsICRjdXJzb3I6IFN0cmluZyA9IG51bGwpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgLi4uUHJvamVjdFBhZ2VTZXR0aW5nc1Rva2Vuc19Qcm9qZWN0XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgUHJvamVjdEVtYmVkVG9rZW5zKCRwcm9qZWN0SWQ6IFN0cmluZyEsICRjdXJzb3I6IFN0cmluZyA9IG51bGwpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgLi4uUHJvamVjdFBhZ2VTZXR0aW5nc1Rva2Vuc19Qcm9qZWN0XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgUHJvamVjdEJsb2JJbmZvKCRibG9iSWQ6IFN0cmluZyEsICRwcm9qZWN0SWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgYmxvYihpZDogJGJsb2JJZCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGZpbGVOYW1lXFxuICAgICAgICBmaWxlVHlwZVxcbiAgICAgICAgZmlsZVNpemVcXG4gICAgICAgIGNyZWF0ZWRBdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBQcm9qZWN0QmxvYkluZm8oJGJsb2JJZDogU3RyaW5nISwgJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBibG9iKGlkOiAkYmxvYklkKSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgZmlsZU5hbWVcXG4gICAgICAgIGZpbGVUeXBlXFxuICAgICAgICBmaWxlU2l6ZVxcbiAgICAgICAgY3JlYXRlZEF0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IE1vdmVUb1dvcmtzcGFjZURyeVJ1bigkd29ya3NwYWNlSWQ6IFN0cmluZyEsICRwcm9qZWN0SWQ6IFN0cmluZyEsICRsaW1pdDogSW50KSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIG1vdmVUb1dvcmtzcGFjZURyeVJ1bih3b3Jrc3BhY2VJZDogJHdvcmtzcGFjZUlkKSB7XFxuICAgICAgICBhZGRlZFRvV29ya3NwYWNlVG90YWxDb3VudFxcbiAgICAgICAgYWRkZWRUb1dvcmtzcGFjZShsaW1pdDogJGxpbWl0KSB7XFxuICAgICAgICAgIGF2YXRhclxcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBuYW1lXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IE1vdmVUb1dvcmtzcGFjZURyeVJ1bigkd29ya3NwYWNlSWQ6IFN0cmluZyEsICRwcm9qZWN0SWQ6IFN0cmluZyEsICRsaW1pdDogSW50KSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIG1vdmVUb1dvcmtzcGFjZURyeVJ1bih3b3Jrc3BhY2VJZDogJHdvcmtzcGFjZUlkKSB7XFxuICAgICAgICBhZGRlZFRvV29ya3NwYWNlVG90YWxDb3VudFxcbiAgICAgICAgYWRkZWRUb1dvcmtzcGFjZShsaW1pdDogJGxpbWl0KSB7XFxuICAgICAgICAgIGF2YXRhclxcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBuYW1lXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHN1YnNjcmlwdGlvbiBPblByb2plY3RVcGRhdGVkKCRpZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0VXBkYXRlZChpZDogJGlkKSB7XFxuICAgICAgaWRcXG4gICAgICB0eXBlXFxuICAgICAgcHJvamVjdCB7XFxuICAgICAgICAuLi5Qcm9qZWN0UGFnZVByb2plY3RcXG4gICAgICAgIC4uLlByb2plY3REYXNoYm9hcmRJdGVtTm9Nb2RlbHNcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgc3Vic2NyaXB0aW9uIE9uUHJvamVjdFVwZGF0ZWQoJGlkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3RVcGRhdGVkKGlkOiAkaWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHR5cGVcXG4gICAgICBwcm9qZWN0IHtcXG4gICAgICAgIC4uLlByb2plY3RQYWdlUHJvamVjdFxcbiAgICAgICAgLi4uUHJvamVjdERhc2hib2FyZEl0ZW1Ob01vZGVsc1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBzdWJzY3JpcHRpb24gT25Qcm9qZWN0TW9kZWxzVXBkYXRlKCRpZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0TW9kZWxzVXBkYXRlZChpZDogJGlkKSB7XFxuICAgICAgaWRcXG4gICAgICB0eXBlXFxuICAgICAgbW9kZWwge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHZlcnNpb25zKGxpbWl0OiAxKSB7XFxuICAgICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgICBpZFxcbiAgICAgICAgICAgIHJlZmVyZW5jZWRPYmplY3RcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgLi4uUHJvamVjdFBhZ2VMYXRlc3RJdGVtc01vZGVsSXRlbVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBzdWJzY3JpcHRpb24gT25Qcm9qZWN0TW9kZWxzVXBkYXRlKCRpZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0TW9kZWxzVXBkYXRlZChpZDogJGlkKSB7XFxuICAgICAgaWRcXG4gICAgICB0eXBlXFxuICAgICAgbW9kZWwge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHZlcnNpb25zKGxpbWl0OiAxKSB7XFxuICAgICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgICBpZFxcbiAgICAgICAgICAgIHJlZmVyZW5jZWRPYmplY3RcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgLi4uUHJvamVjdFBhZ2VMYXRlc3RJdGVtc01vZGVsSXRlbVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBzdWJzY3JpcHRpb24gT25Qcm9qZWN0VmVyc2lvbnNVcGRhdGUoJGlkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3RWZXJzaW9uc1VwZGF0ZWQoaWQ6ICRpZCkge1xcbiAgICAgIGlkXFxuICAgICAgbW9kZWxJZFxcbiAgICAgIHR5cGVcXG4gICAgICB2ZXJzaW9uIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5WaWV3ZXJNb2RlbFZlcnNpb25DYXJkSXRlbVxcbiAgICAgICAgLi4uUHJvamVjdE1vZGVsUGFnZVZlcnNpb25zQ2FyZFZlcnNpb25cXG4gICAgICAgIG1vZGVsIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uUHJvamVjdFBhZ2VMYXRlc3RJdGVtc01vZGVsSXRlbVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBzdWJzY3JpcHRpb24gT25Qcm9qZWN0VmVyc2lvbnNVcGRhdGUoJGlkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3RWZXJzaW9uc1VwZGF0ZWQoaWQ6ICRpZCkge1xcbiAgICAgIGlkXFxuICAgICAgbW9kZWxJZFxcbiAgICAgIHR5cGVcXG4gICAgICB2ZXJzaW9uIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5WaWV3ZXJNb2RlbFZlcnNpb25DYXJkSXRlbVxcbiAgICAgICAgLi4uUHJvamVjdE1vZGVsUGFnZVZlcnNpb25zQ2FyZFZlcnNpb25cXG4gICAgICAgIG1vZGVsIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uUHJvamVjdFBhZ2VMYXRlc3RJdGVtc01vZGVsSXRlbVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBzdWJzY3JpcHRpb24gT25Qcm9qZWN0VmVyc2lvbnNQcmV2aWV3R2VuZXJhdGVkKCRpZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0VmVyc2lvbnNQcmV2aWV3R2VuZXJhdGVkKGlkOiAkaWQpIHtcXG4gICAgICBwcm9qZWN0SWRcXG4gICAgICBvYmplY3RJZFxcbiAgICAgIHZlcnNpb25JZFxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHN1YnNjcmlwdGlvbiBPblByb2plY3RWZXJzaW9uc1ByZXZpZXdHZW5lcmF0ZWQoJGlkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3RWZXJzaW9uc1ByZXZpZXdHZW5lcmF0ZWQoaWQ6ICRpZCkge1xcbiAgICAgIHByb2plY3RJZFxcbiAgICAgIG9iamVjdElkXFxuICAgICAgdmVyc2lvbklkXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgc3Vic2NyaXB0aW9uIE9uUHJvamVjdFBlbmRpbmdNb2RlbHNVcGRhdGVkKCRpZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0UGVuZGluZ01vZGVsc1VwZGF0ZWQoaWQ6ICRpZCkge1xcbiAgICAgIGlkXFxuICAgICAgdHlwZVxcbiAgICAgIG1vZGVsIHtcXG4gICAgICAgIC4uLlBlbmRpbmdGaWxlVXBsb2FkXFxuICAgICAgICAuLi5Vc2VGYWlsZWRGaWxlSW1wb3J0Sm9iVXRpbHNfRmlsZVVwbG9hZFxcbiAgICAgICAgbW9kZWwge1xcbiAgICAgICAgICAuLi5Qcm9qZWN0UGFnZUxhdGVzdEl0ZW1zTW9kZWxJdGVtXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHN1YnNjcmlwdGlvbiBPblByb2plY3RQZW5kaW5nTW9kZWxzVXBkYXRlZCgkaWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdFBlbmRpbmdNb2RlbHNVcGRhdGVkKGlkOiAkaWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHR5cGVcXG4gICAgICBtb2RlbCB7XFxuICAgICAgICAuLi5QZW5kaW5nRmlsZVVwbG9hZFxcbiAgICAgICAgLi4uVXNlRmFpbGVkRmlsZUltcG9ydEpvYlV0aWxzX0ZpbGVVcGxvYWRcXG4gICAgICAgIG1vZGVsIHtcXG4gICAgICAgICAgLi4uUHJvamVjdFBhZ2VMYXRlc3RJdGVtc01vZGVsSXRlbVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBzdWJzY3JpcHRpb24gT25Qcm9qZWN0UGVuZGluZ1ZlcnNpb25zVXBkYXRlZCgkaWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdFBlbmRpbmdWZXJzaW9uc1VwZGF0ZWQoaWQ6ICRpZCkge1xcbiAgICAgIGlkXFxuICAgICAgdHlwZVxcbiAgICAgIHZlcnNpb24ge1xcbiAgICAgICAgLi4uUGVuZGluZ0ZpbGVVcGxvYWRcXG4gICAgICAgIC4uLlVzZUZhaWxlZEZpbGVJbXBvcnRKb2JVdGlsc19GaWxlVXBsb2FkXFxuICAgICAgICBtb2RlbCB7XFxuICAgICAgICAgIC4uLlByb2plY3RQYWdlTGF0ZXN0SXRlbXNNb2RlbEl0ZW1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgc3Vic2NyaXB0aW9uIE9uUHJvamVjdFBlbmRpbmdWZXJzaW9uc1VwZGF0ZWQoJGlkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3RQZW5kaW5nVmVyc2lvbnNVcGRhdGVkKGlkOiAkaWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHR5cGVcXG4gICAgICB2ZXJzaW9uIHtcXG4gICAgICAgIC4uLlBlbmRpbmdGaWxlVXBsb2FkXFxuICAgICAgICAuLi5Vc2VGYWlsZWRGaWxlSW1wb3J0Sm9iVXRpbHNfRmlsZVVwbG9hZFxcbiAgICAgICAgbW9kZWwge1xcbiAgICAgICAgICAuLi5Qcm9qZWN0UGFnZUxhdGVzdEl0ZW1zTW9kZWxJdGVtXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHN1YnNjcmlwdGlvbiBPblByb2plY3RUcmlnZ2VyZWRBdXRvbWF0aW9uc1N0YXR1c1VwZGF0ZWQoJGlkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3RUcmlnZ2VyZWRBdXRvbWF0aW9uc1N0YXR1c1VwZGF0ZWQocHJvamVjdElkOiAkaWQpIHtcXG4gICAgICB0eXBlXFxuICAgICAgdmVyc2lvbiB7XFxuICAgICAgICBpZFxcbiAgICAgICAgYXV0b21hdGlvbnNTdGF0dXMge1xcbiAgICAgICAgICBhdXRvbWF0aW9uUnVucyB7XFxuICAgICAgICAgICAgLi4uQXV0b21hdGVWaWV3ZXJQYW5lbF9BdXRvbWF0ZVJ1blxcbiAgICAgICAgICB9XFxuICAgICAgICAgIC4uLlRyaWdnZXJlZEF1dG9tYXRpb25zU3RhdHVzU3VtbWFyeVxcbiAgICAgICAgICAuLi5BdXRvbWF0ZVJ1bnNUcmlnZ2VyU3RhdHVzRGlhbG9nX1RyaWdnZXJlZEF1dG9tYXRpb25zU3RhdHVzXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIG1vZGVsIHtcXG4gICAgICAgIGlkXFxuICAgICAgfVxcbiAgICAgIHJ1biB7XFxuICAgICAgICBpZFxcbiAgICAgICAgYXV0b21hdGlvbklkXFxuICAgICAgICAuLi5BdXRvbWF0aW9uUnVuRGV0YWlsc1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBzdWJzY3JpcHRpb24gT25Qcm9qZWN0VHJpZ2dlcmVkQXV0b21hdGlvbnNTdGF0dXNVcGRhdGVkKCRpZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0VHJpZ2dlcmVkQXV0b21hdGlvbnNTdGF0dXNVcGRhdGVkKHByb2plY3RJZDogJGlkKSB7XFxuICAgICAgdHlwZVxcbiAgICAgIHZlcnNpb24ge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGF1dG9tYXRpb25zU3RhdHVzIHtcXG4gICAgICAgICAgYXV0b21hdGlvblJ1bnMge1xcbiAgICAgICAgICAgIC4uLkF1dG9tYXRlVmlld2VyUGFuZWxfQXV0b21hdGVSdW5cXG4gICAgICAgICAgfVxcbiAgICAgICAgICAuLi5UcmlnZ2VyZWRBdXRvbWF0aW9uc1N0YXR1c1N1bW1hcnlcXG4gICAgICAgICAgLi4uQXV0b21hdGVSdW5zVHJpZ2dlclN0YXR1c0RpYWxvZ19UcmlnZ2VyZWRBdXRvbWF0aW9uc1N0YXR1c1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICBtb2RlbCB7XFxuICAgICAgICBpZFxcbiAgICAgIH1cXG4gICAgICBydW4ge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGF1dG9tYXRpb25JZFxcbiAgICAgICAgLi4uQXV0b21hdGlvblJ1bkRldGFpbHNcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgc3Vic2NyaXB0aW9uIE9uUHJvamVjdEF1dG9tYXRpb25zVXBkYXRlZCgkaWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdEF1dG9tYXRpb25zVXBkYXRlZChwcm9qZWN0SWQ6ICRpZCkge1xcbiAgICAgIHR5cGVcXG4gICAgICBhdXRvbWF0aW9uSWRcXG4gICAgICBhdXRvbWF0aW9uIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5Qcm9qZWN0UGFnZUF1dG9tYXRpb25QYWdlX0F1dG9tYXRpb25cXG4gICAgICAgIC4uLlByb2plY3RQYWdlQXV0b21hdGlvbnNSb3dfQXV0b21hdGlvblxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBzdWJzY3JpcHRpb24gT25Qcm9qZWN0QXV0b21hdGlvbnNVcGRhdGVkKCRpZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0QXV0b21hdGlvbnNVcGRhdGVkKHByb2plY3RJZDogJGlkKSB7XFxuICAgICAgdHlwZVxcbiAgICAgIGF1dG9tYXRpb25JZFxcbiAgICAgIGF1dG9tYXRpb24ge1xcbiAgICAgICAgaWRcXG4gICAgICAgIC4uLlByb2plY3RQYWdlQXV0b21hdGlvblBhZ2VfQXV0b21hdGlvblxcbiAgICAgICAgLi4uUHJvamVjdFBhZ2VBdXRvbWF0aW9uc1Jvd19BdXRvbWF0aW9uXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IEdldE1vZGVsSXRlbVJvdXRlX01vZGVsIG9uIE1vZGVsIHtcXG4gICAgaWRcXG4gICAgcHJvamVjdElkXFxuICAgIGhvbWVWaWV3IHtcXG4gICAgICBpZFxcbiAgICAgIHJlc291cmNlSWRzXFxuICAgIH1cXG4gICAgcmVzb3VyY2VJZFN0cmluZ1xcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBHZXRNb2RlbEl0ZW1Sb3V0ZV9Nb2RlbCBvbiBNb2RlbCB7XFxuICAgIGlkXFxuICAgIHByb2plY3RJZFxcbiAgICBob21lVmlldyB7XFxuICAgICAgaWRcXG4gICAgICByZXNvdXJjZUlkc1xcbiAgICB9XFxuICAgIHJlc291cmNlSWRTdHJpbmdcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gU2VydmVySW5mb1VwZGF0ZSgkaW5mbzogU2VydmVySW5mb1VwZGF0ZUlucHV0ISkge1xcbiAgICBzZXJ2ZXJJbmZvVXBkYXRlKGluZm86ICRpbmZvKVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBTZXJ2ZXJJbmZvVXBkYXRlKCRpbmZvOiBTZXJ2ZXJJbmZvVXBkYXRlSW5wdXQhKSB7XFxuICAgIHNlcnZlckluZm9VcGRhdGUoaW5mbzogJGluZm8pXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIEFkbWluUGFuZWxEZWxldGVVc2VyKCR1c2VyQ29uZmlybWF0aW9uOiBVc2VyRGVsZXRlSW5wdXQhKSB7XFxuICAgIGFkbWluRGVsZXRlVXNlcih1c2VyQ29uZmlybWF0aW9uOiAkdXNlckNvbmZpcm1hdGlvbilcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gQWRtaW5QYW5lbERlbGV0ZVVzZXIoJHVzZXJDb25maXJtYXRpb246IFVzZXJEZWxldGVJbnB1dCEpIHtcXG4gICAgYWRtaW5EZWxldGVVc2VyKHVzZXJDb25maXJtYXRpb246ICR1c2VyQ29uZmlybWF0aW9uKVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBBZG1pblBhbmVsRGVsZXRlUHJvamVjdCgkaWRzOiBbU3RyaW5nIV0hKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIGJhdGNoRGVsZXRlKGlkczogJGlkcylcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBBZG1pblBhbmVsRGVsZXRlUHJvamVjdCgkaWRzOiBbU3RyaW5nIV0hKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIGJhdGNoRGVsZXRlKGlkczogJGlkcylcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBBZG1pblBhbmVsUmVzZW5kSW52aXRlKCRpbnZpdGVJZDogU3RyaW5nISkge1xcbiAgICBpbnZpdGVSZXNlbmQoaW52aXRlSWQ6ICRpbnZpdGVJZClcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gQWRtaW5QYW5lbFJlc2VuZEludml0ZSgkaW52aXRlSWQ6IFN0cmluZyEpIHtcXG4gICAgaW52aXRlUmVzZW5kKGludml0ZUlkOiAkaW52aXRlSWQpXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIEFkbWluUGFuZWxEZWxldGVJbnZpdGUoJGludml0ZUlkOiBTdHJpbmchKSB7XFxuICAgIGludml0ZURlbGV0ZShpbnZpdGVJZDogJGludml0ZUlkKVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBBZG1pblBhbmVsRGVsZXRlSW52aXRlKCRpbnZpdGVJZDogU3RyaW5nISkge1xcbiAgICBpbnZpdGVEZWxldGUoaW52aXRlSWQ6ICRpbnZpdGVJZClcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gQWRtaW5DaGFuZ2VVc2VSb2xlKCR1c2VyUm9sZUlucHV0OiBVc2VyUm9sZUlucHV0ISkge1xcbiAgICB1c2VyUm9sZUNoYW5nZSh1c2VyUm9sZUlucHV0OiAkdXNlclJvbGVJbnB1dClcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gQWRtaW5DaGFuZ2VVc2VSb2xlKCR1c2VyUm9sZUlucHV0OiBVc2VyUm9sZUlucHV0ISkge1xcbiAgICB1c2VyUm9sZUNoYW5nZSh1c2VyUm9sZUlucHV0OiAkdXNlclJvbGVJbnB1dClcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgU2VydmVyTWFuYWdlbWVudERhdGFQYWdlIHtcXG4gICAgYWRtaW4ge1xcbiAgICAgIHVzZXJMaXN0IHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICB9XFxuICAgICAgcHJvamVjdExpc3Qge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgIH1cXG4gICAgICBpbnZpdGVMaXN0IHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgc2VydmVySW5mbyB7XFxuICAgICAgbmFtZVxcbiAgICAgIHZlcnNpb25cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBTZXJ2ZXJNYW5hZ2VtZW50RGF0YVBhZ2Uge1xcbiAgICBhZG1pbiB7XFxuICAgICAgdXNlckxpc3Qge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgIH1cXG4gICAgICBwcm9qZWN0TGlzdCB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICAgIGludml0ZUxpc3Qge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICBzZXJ2ZXJJbmZvIHtcXG4gICAgICBuYW1lXFxuICAgICAgdmVyc2lvblxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFNlcnZlclNldHRpbmdzRGlhbG9nRGF0YSB7XFxuICAgIHNlcnZlckluZm8ge1xcbiAgICAgIG5hbWVcXG4gICAgICBkZXNjcmlwdGlvblxcbiAgICAgIGFkbWluQ29udGFjdFxcbiAgICAgIGNvbXBhbnlcXG4gICAgICB0ZXJtc09mU2VydmljZVxcbiAgICAgIGludml0ZU9ubHlcXG4gICAgICBndWVzdE1vZGVFbmFibGVkXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgU2VydmVyU2V0dGluZ3NEaWFsb2dEYXRhIHtcXG4gICAgc2VydmVySW5mbyB7XFxuICAgICAgbmFtZVxcbiAgICAgIGRlc2NyaXB0aW9uXFxuICAgICAgYWRtaW5Db250YWN0XFxuICAgICAgY29tcGFueVxcbiAgICAgIHRlcm1zT2ZTZXJ2aWNlXFxuICAgICAgaW52aXRlT25seVxcbiAgICAgIGd1ZXN0TW9kZUVuYWJsZWRcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBBZG1pblBhbmVsVXNlcnNMaXN0KCRsaW1pdDogSW50ISwgJGN1cnNvcjogU3RyaW5nLCAkcXVlcnk6IFN0cmluZykge1xcbiAgICBhZG1pbiB7XFxuICAgICAgdXNlckxpc3QobGltaXQ6ICRsaW1pdCwgY3Vyc29yOiAkY3Vyc29yLCBxdWVyeTogJHF1ZXJ5KSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBjdXJzb3JcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgZW1haWxcXG4gICAgICAgICAgYXZhdGFyXFxuICAgICAgICAgIG5hbWVcXG4gICAgICAgICAgcm9sZVxcbiAgICAgICAgICB2ZXJpZmllZFxcbiAgICAgICAgICBjb21wYW55XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IEFkbWluUGFuZWxVc2Vyc0xpc3QoJGxpbWl0OiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcsICRxdWVyeTogU3RyaW5nKSB7XFxuICAgIGFkbWluIHtcXG4gICAgICB1c2VyTGlzdChsaW1pdDogJGxpbWl0LCBjdXJzb3I6ICRjdXJzb3IsIHF1ZXJ5OiAkcXVlcnkpIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIGN1cnNvclxcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBlbWFpbFxcbiAgICAgICAgICBhdmF0YXJcXG4gICAgICAgICAgbmFtZVxcbiAgICAgICAgICByb2xlXFxuICAgICAgICAgIHZlcmlmaWVkXFxuICAgICAgICAgIGNvbXBhbnlcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgQWRtaW5QYW5lbFByb2plY3RzTGlzdChcXG4gICAgJHF1ZXJ5OiBTdHJpbmdcXG4gICAgJG9yZGVyQnk6IFN0cmluZ1xcbiAgICAkbGltaXQ6IEludCFcXG4gICAgJHZpc2liaWxpdHk6IFN0cmluZ1xcbiAgICAkY3Vyc29yOiBTdHJpbmdcXG4gICkge1xcbiAgICBhZG1pbiB7XFxuICAgICAgcHJvamVjdExpc3QoXFxuICAgICAgICBxdWVyeTogJHF1ZXJ5XFxuICAgICAgICBvcmRlckJ5OiAkb3JkZXJCeVxcbiAgICAgICAgbGltaXQ6ICRsaW1pdFxcbiAgICAgICAgdmlzaWJpbGl0eTogJHZpc2liaWxpdHlcXG4gICAgICAgIGN1cnNvcjogJGN1cnNvclxcbiAgICAgICkge1xcbiAgICAgICAgY3Vyc29yXFxuICAgICAgICAuLi5TZXR0aW5nc1NlcnZlclByb2plY3RzX1Byb2plY3RDb2xsZWN0aW9uXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IEFkbWluUGFuZWxQcm9qZWN0c0xpc3QoXFxuICAgICRxdWVyeTogU3RyaW5nXFxuICAgICRvcmRlckJ5OiBTdHJpbmdcXG4gICAgJGxpbWl0OiBJbnQhXFxuICAgICR2aXNpYmlsaXR5OiBTdHJpbmdcXG4gICAgJGN1cnNvcjogU3RyaW5nXFxuICApIHtcXG4gICAgYWRtaW4ge1xcbiAgICAgIHByb2plY3RMaXN0KFxcbiAgICAgICAgcXVlcnk6ICRxdWVyeVxcbiAgICAgICAgb3JkZXJCeTogJG9yZGVyQnlcXG4gICAgICAgIGxpbWl0OiAkbGltaXRcXG4gICAgICAgIHZpc2liaWxpdHk6ICR2aXNpYmlsaXR5XFxuICAgICAgICBjdXJzb3I6ICRjdXJzb3JcXG4gICAgICApIHtcXG4gICAgICAgIGN1cnNvclxcbiAgICAgICAgLi4uU2V0dGluZ3NTZXJ2ZXJQcm9qZWN0c19Qcm9qZWN0Q29sbGVjdGlvblxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBBZG1pblBhbmVsSW52aXRlc0xpc3QoJGxpbWl0OiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcsICRxdWVyeTogU3RyaW5nKSB7XFxuICAgIGFkbWluIHtcXG4gICAgICBpbnZpdGVMaXN0KGxpbWl0OiAkbGltaXQsIGN1cnNvcjogJGN1cnNvciwgcXVlcnk6ICRxdWVyeSkge1xcbiAgICAgICAgY3Vyc29yXFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIGVtYWlsXFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIGludml0ZWRCeSB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICBuYW1lXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgQWRtaW5QYW5lbEludml0ZXNMaXN0KCRsaW1pdDogSW50ISwgJGN1cnNvcjogU3RyaW5nLCAkcXVlcnk6IFN0cmluZykge1xcbiAgICBhZG1pbiB7XFxuICAgICAgaW52aXRlTGlzdChsaW1pdDogJGxpbWl0LCBjdXJzb3I6ICRjdXJzb3IsIHF1ZXJ5OiAkcXVlcnkpIHtcXG4gICAgICAgIGN1cnNvclxcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICBlbWFpbFxcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBpbnZpdGVkQnkge1xcbiAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgbmFtZVxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFVzZXJzQ291bnQge1xcbiAgICBhZG1pbiB7XFxuICAgICAgdXNlckxpc3Qge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBVc2Vyc0NvdW50IHtcXG4gICAgYWRtaW4ge1xcbiAgICAgIHVzZXJMaXN0IHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgSW52aXRlc0NvdW50IHtcXG4gICAgYWRtaW4ge1xcbiAgICAgIGludml0ZUxpc3Qge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBJbnZpdGVzQ291bnQge1xcbiAgICBhZG1pbiB7XFxuICAgICAgaW52aXRlTGlzdCB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIEludml0ZVNlcnZlclVzZXIoJGlucHV0OiBbU2VydmVySW52aXRlQ3JlYXRlSW5wdXQhXSEpIHtcXG4gICAgc2VydmVySW52aXRlQmF0Y2hDcmVhdGUoaW5wdXQ6ICRpbnB1dClcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gSW52aXRlU2VydmVyVXNlcigkaW5wdXQ6IFtTZXJ2ZXJJbnZpdGVDcmVhdGVJbnB1dCFdISkge1xcbiAgICBzZXJ2ZXJJbnZpdGVCYXRjaENyZWF0ZShpbnB1dDogJGlucHV0KVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc01lbnVfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHNsdWdcXG4gICAgc3NvIHtcXG4gICAgICBwcm92aWRlciB7XFxuICAgICAgICBpZFxcbiAgICAgIH1cXG4gICAgICBzZXNzaW9uIHtcXG4gICAgICAgIHZhbGlkVW50aWxcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NNZW51X1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBzbHVnXFxuICAgIHNzbyB7XFxuICAgICAgcHJvdmlkZXIge1xcbiAgICAgICAgaWRcXG4gICAgICB9XFxuICAgICAgc2Vzc2lvbiB7XFxuICAgICAgICB2YWxpZFVudGlsXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIFNldHRpbmdzVXBkYXRlV29ya3NwYWNlKCRpbnB1dDogV29ya3NwYWNlVXBkYXRlSW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgdXBkYXRlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc0dlbmVyYWxfV29ya3NwYWNlXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIFNldHRpbmdzVXBkYXRlV29ya3NwYWNlKCRpbnB1dDogV29ya3NwYWNlVXBkYXRlSW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgdXBkYXRlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc0dlbmVyYWxfV29ya3NwYWNlXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIFNldHRpbmdzVXBkYXRlV29ya3NwYWNlRW1iZWRPcHRpb25zKFxcbiAgICAkaW5wdXQ6IFdvcmtzcGFjZVVwZGF0ZUVtYmVkT3B0aW9uc0lucHV0IVxcbiAgKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgdXBkYXRlRW1iZWRPcHRpb25zKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGhpZGVTcGVja2xlQnJhbmRpbmdcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gU2V0dGluZ3NVcGRhdGVXb3Jrc3BhY2VFbWJlZE9wdGlvbnMoXFxuICAgICRpbnB1dDogV29ya3NwYWNlVXBkYXRlRW1iZWRPcHRpb25zSW5wdXQhXFxuICApIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICB1cGRhdGVFbWJlZE9wdGlvbnMoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaGlkZVNwZWNrbGVCcmFuZGluZ1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBTZXR0aW5nc0NyZWF0ZVVzZXJFbWFpbCgkaW5wdXQ6IENyZWF0ZVVzZXJFbWFpbElucHV0ISkge1xcbiAgICBhY3RpdmVVc2VyTXV0YXRpb25zIHtcXG4gICAgICBlbWFpbE11dGF0aW9ucyB7XFxuICAgICAgICBjcmVhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBlbWFpbHMge1xcbiAgICAgICAgICAgIC4uLkVtYWlsRmllbGRzXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gU2V0dGluZ3NDcmVhdGVVc2VyRW1haWwoJGlucHV0OiBDcmVhdGVVc2VyRW1haWxJbnB1dCEpIHtcXG4gICAgYWN0aXZlVXNlck11dGF0aW9ucyB7XFxuICAgICAgZW1haWxNdXRhdGlvbnMge1xcbiAgICAgICAgY3JlYXRlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgZW1haWxzIHtcXG4gICAgICAgICAgICAuLi5FbWFpbEZpZWxkc1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIFNldHRpbmdzRGVsZXRlVXNlckVtYWlsKCRpbnB1dDogRGVsZXRlVXNlckVtYWlsSW5wdXQhKSB7XFxuICAgIGFjdGl2ZVVzZXJNdXRhdGlvbnMge1xcbiAgICAgIGVtYWlsTXV0YXRpb25zIHtcXG4gICAgICAgIGRlbGV0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIGVtYWlscyB7XFxuICAgICAgICAgICAgLi4uRW1haWxGaWVsZHNcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBTZXR0aW5nc0RlbGV0ZVVzZXJFbWFpbCgkaW5wdXQ6IERlbGV0ZVVzZXJFbWFpbElucHV0ISkge1xcbiAgICBhY3RpdmVVc2VyTXV0YXRpb25zIHtcXG4gICAgICBlbWFpbE11dGF0aW9ucyB7XFxuICAgICAgICBkZWxldGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBlbWFpbHMge1xcbiAgICAgICAgICAgIC4uLkVtYWlsRmllbGRzXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gU2V0dGluZ3NTZXRQcmltYXJ5VXNlckVtYWlsKCRpbnB1dDogU2V0UHJpbWFyeVVzZXJFbWFpbElucHV0ISkge1xcbiAgICBhY3RpdmVVc2VyTXV0YXRpb25zIHtcXG4gICAgICBlbWFpbE11dGF0aW9ucyB7XFxuICAgICAgICBzZXRQcmltYXJ5KGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgZW1haWxzIHtcXG4gICAgICAgICAgICAuLi5FbWFpbEZpZWxkc1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIFNldHRpbmdzU2V0UHJpbWFyeVVzZXJFbWFpbCgkaW5wdXQ6IFNldFByaW1hcnlVc2VyRW1haWxJbnB1dCEpIHtcXG4gICAgYWN0aXZlVXNlck11dGF0aW9ucyB7XFxuICAgICAgZW1haWxNdXRhdGlvbnMge1xcbiAgICAgICAgc2V0UHJpbWFyeShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIGVtYWlscyB7XFxuICAgICAgICAgICAgLi4uRW1haWxGaWVsZHNcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBTZXR0aW5nc05ld0VtYWlsVmVyaWZpY2F0aW9uKCRpbnB1dDogRW1haWxWZXJpZmljYXRpb25SZXF1ZXN0SW5wdXQhKSB7XFxuICAgIGFjdGl2ZVVzZXJNdXRhdGlvbnMge1xcbiAgICAgIGVtYWlsTXV0YXRpb25zIHtcXG4gICAgICAgIHJlcXVlc3ROZXdFbWFpbFZlcmlmaWNhdGlvbihpbnB1dDogJGlucHV0KVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBTZXR0aW5nc05ld0VtYWlsVmVyaWZpY2F0aW9uKCRpbnB1dDogRW1haWxWZXJpZmljYXRpb25SZXF1ZXN0SW5wdXQhKSB7XFxuICAgIGFjdGl2ZVVzZXJNdXRhdGlvbnMge1xcbiAgICAgIGVtYWlsTXV0YXRpb25zIHtcXG4gICAgICAgIHJlcXVlc3ROZXdFbWFpbFZlcmlmaWNhdGlvbihpbnB1dDogJGlucHV0KVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBTZXR0aW5nc1VwZGF0ZVdvcmtzcGFjZVNlY3VyaXR5KCRpbnB1dDogV29ya3NwYWNlVXBkYXRlSW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgdXBkYXRlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBkb21haW5CYXNlZE1lbWJlcnNoaXBQcm90ZWN0aW9uRW5hYmxlZFxcbiAgICAgICAgZGlzY292ZXJhYmlsaXR5RW5hYmxlZFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBTZXR0aW5nc1VwZGF0ZVdvcmtzcGFjZVNlY3VyaXR5KCRpbnB1dDogV29ya3NwYWNlVXBkYXRlSW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgdXBkYXRlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBkb21haW5CYXNlZE1lbWJlcnNoaXBQcm90ZWN0aW9uRW5hYmxlZFxcbiAgICAgICAgZGlzY292ZXJhYmlsaXR5RW5hYmxlZFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBTZXR0aW5nc0RlbGV0ZVdvcmtzcGFjZSgkd29ya3NwYWNlSWQ6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICBkZWxldGUod29ya3NwYWNlSWQ6ICR3b3Jrc3BhY2VJZClcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBTZXR0aW5nc0RlbGV0ZVdvcmtzcGFjZSgkd29ya3NwYWNlSWQ6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICBkZWxldGUod29ya3NwYWNlSWQ6ICR3b3Jrc3BhY2VJZClcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBTZXR0aW5nc1Jlc2VuZFdvcmtzcGFjZUludml0ZSgkaW5wdXQ6IFdvcmtzcGFjZUludml0ZVJlc2VuZElucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIGludml0ZXMge1xcbiAgICAgICAgcmVzZW5kKGlucHV0OiAkaW5wdXQpXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIFNldHRpbmdzUmVzZW5kV29ya3NwYWNlSW52aXRlKCRpbnB1dDogV29ya3NwYWNlSW52aXRlUmVzZW5kSW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgaW52aXRlcyB7XFxuICAgICAgICByZXNlbmQoaW5wdXQ6ICRpbnB1dClcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gU2V0dGluZ3NDYW5jZWxXb3Jrc3BhY2VJbnZpdGUoJHdvcmtzcGFjZUlkOiBTdHJpbmchLCAkaW52aXRlSWQ6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICBpbnZpdGVzIHtcXG4gICAgICAgIGNhbmNlbCh3b3Jrc3BhY2VJZDogJHdvcmtzcGFjZUlkLCBpbnZpdGVJZDogJGludml0ZUlkKSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIFNldHRpbmdzQ2FuY2VsV29ya3NwYWNlSW52aXRlKCR3b3Jrc3BhY2VJZDogU3RyaW5nISwgJGludml0ZUlkOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgaW52aXRlcyB7XFxuICAgICAgICBjYW5jZWwod29ya3NwYWNlSWQ6ICR3b3Jrc3BhY2VJZCwgaW52aXRlSWQ6ICRpbnZpdGVJZCkge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBBZGRXb3Jrc3BhY2VEb21haW4oJGlucHV0OiBBZGREb21haW5Ub1dvcmtzcGFjZUlucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIGFkZERvbWFpbihpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eV9Xb3Jrc3BhY2VcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gQWRkV29ya3NwYWNlRG9tYWluKCRpbnB1dDogQWRkRG9tYWluVG9Xb3Jrc3BhY2VJbnB1dCEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICBhZGREb21haW4oaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlfV29ya3NwYWNlXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIERlbGV0ZVdvcmtzcGFjZURvbWFpbigkaW5wdXQ6IFdvcmtzcGFjZURvbWFpbkRlbGV0ZUlucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIGRlbGV0ZURvbWFpbihpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eURvbWFpblJlbW92ZURpYWxvZ19Xb3Jrc3BhY2VcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gRGVsZXRlV29ya3NwYWNlRG9tYWluKCRpbnB1dDogV29ya3NwYWNlRG9tYWluRGVsZXRlSW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgZGVsZXRlRG9tYWluKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5RG9tYWluUmVtb3ZlRGlhbG9nX1dvcmtzcGFjZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBTZXR0aW5nc0xlYXZlV29ya3NwYWNlKCRsZWF2ZUlkOiBJRCEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICBsZWF2ZShpZDogJGxlYXZlSWQpXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gU2V0dGluZ3NMZWF2ZVdvcmtzcGFjZSgkbGVhdmVJZDogSUQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgbGVhdmUoaWQ6ICRsZWF2ZUlkKVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIFNldHRpbmdzQmlsbGluZ0NhbmNlbENoZWNrb3V0U2Vzc2lvbigkaW5wdXQ6IENhbmNlbENoZWNrb3V0U2Vzc2lvbklucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIGJpbGxpbmcge1xcbiAgICAgICAgY2FuY2VsQ2hlY2tvdXRTZXNzaW9uKGlucHV0OiAkaW5wdXQpXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIFNldHRpbmdzQmlsbGluZ0NhbmNlbENoZWNrb3V0U2Vzc2lvbigkaW5wdXQ6IENhbmNlbENoZWNrb3V0U2Vzc2lvbklucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIGJpbGxpbmcge1xcbiAgICAgICAgY2FuY2VsQ2hlY2tvdXRTZXNzaW9uKGlucHV0OiAkaW5wdXQpXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFNldHRpbmdzU2lkZWJhcigkc2x1ZzogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHNsdWcpIHtcXG4gICAgICAuLi5TZXR0aW5nc1NpZGViYXJfV29ya3NwYWNlXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgU2V0dGluZ3NTaWRlYmFyKCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIC4uLlNldHRpbmdzU2lkZWJhcl9Xb3Jrc3BhY2VcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBTZXR0aW5nc1dvcmtzcGFjZUdlbmVyYWwoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzR2VuZXJhbF9Xb3Jrc3BhY2VcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBTZXR0aW5nc1dvcmtzcGFjZUdlbmVyYWwoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzR2VuZXJhbF9Xb3Jrc3BhY2VcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBTZXR0aW5nc1dvcmtzcGFjZUJpbGxpbmcoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5Xb3Jrc3BhY2VCaWxsaW5nUGFnZV9Xb3Jrc3BhY2VcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBTZXR0aW5nc1dvcmtzcGFjZUJpbGxpbmcoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5Xb3Jrc3BhY2VCaWxsaW5nUGFnZV9Xb3Jrc3BhY2VcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBTZXR0aW5nc1dvcmtzcGFjZUJpbGxpbmdDdXN0b21lclBvcnRhbCgkd29ya3NwYWNlSWQ6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlKGlkOiAkd29ya3NwYWNlSWQpIHtcXG4gICAgICBjdXN0b21lclBvcnRhbFVybFxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFNldHRpbmdzV29ya3NwYWNlQmlsbGluZ0N1c3RvbWVyUG9ydGFsKCR3b3Jrc3BhY2VJZDogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2UoaWQ6ICR3b3Jrc3BhY2VJZCkge1xcbiAgICAgIGN1c3RvbWVyUG9ydGFsVXJsXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgU2V0dGluZ3NXb3Jrc3BhY2VSZWdpb25zKCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIGlkXFxuICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzUmVnaW9uc19Xb3Jrc3BhY2VcXG4gICAgfVxcbiAgICBzZXJ2ZXJJbmZvIHtcXG4gICAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNSZWdpb25zX1NlcnZlckluZm9cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBTZXR0aW5nc1dvcmtzcGFjZVJlZ2lvbnMoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNSZWdpb25zX1dvcmtzcGFjZVxcbiAgICB9XFxuICAgIHNlcnZlckluZm8ge1xcbiAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc1JlZ2lvbnNfU2VydmVySW5mb1xcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFNldHRpbmdzV29ya3NwYWNlc01lbWJlcnMoXFxuICAgICRzbHVnOiBTdHJpbmchXFxuICAgICRmaWx0ZXI6IEFkbWluV29ya3NwYWNlSm9pblJlcXVlc3RGaWx0ZXJcXG4gICkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHNsdWcpIHtcXG4gICAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzQ291bnRzX1dvcmtzcGFjZVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFNldHRpbmdzV29ya3NwYWNlc01lbWJlcnMoXFxuICAgICRzbHVnOiBTdHJpbmchXFxuICAgICRmaWx0ZXI6IEFkbWluV29ya3NwYWNlSm9pblJlcXVlc3RGaWx0ZXJcXG4gICkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHNsdWcpIHtcXG4gICAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzQ291bnRzX1dvcmtzcGFjZVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNJbnZpdGVzKCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNJbnZpdGVzVGFibGVfV29ya3NwYWNlXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc0ludml0ZXMoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc0ludml0ZXNUYWJsZV9Xb3Jrc3BhY2VcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBTZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzUmVxdWVzdHMoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc1JlcXVlc3RzVGFibGVfV29ya3NwYWNlXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc1JlcXVlc3RzKCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNSZXF1ZXN0c1RhYmxlX1dvcmtzcGFjZVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNUYWJsZVF1ZXJ5KCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIGlkXFxuICAgICAgcm9sZVxcbiAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNUYWJsZUhlYWRlcl9Xb3Jrc3BhY2VcXG4gICAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgICBjYW5SZWFkTWVtYmVyRW1haWwge1xcbiAgICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNUYWJsZVF1ZXJ5KCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIGlkXFxuICAgICAgcm9sZVxcbiAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNUYWJsZUhlYWRlcl9Xb3Jrc3BhY2VcXG4gICAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgICBjYW5SZWFkTWVtYmVyRW1haWwge1xcbiAgICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNTZWFyY2goXFxuICAgICRzbHVnOiBTdHJpbmchXFxuICAgICRmaWx0ZXI6IFdvcmtzcGFjZVRlYW1GaWx0ZXJcXG4gICAgJGxpbWl0OiBJbnRcXG4gICAgJGN1cnNvcjogU3RyaW5nXFxuICApIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgaWRcXG4gICAgICB0ZWFtKGZpbHRlcjogJGZpbHRlciwgbGltaXQ6ICRsaW1pdCwgY3Vyc29yOiAkY3Vyc29yKSB7XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNUYWJsZV9Xb3Jrc3BhY2VDb2xsYWJvcmF0b3JcXG4gICAgICAgIH1cXG4gICAgICAgIGN1cnNvclxcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBTZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzU2VhcmNoKFxcbiAgICAkc2x1ZzogU3RyaW5nIVxcbiAgICAkZmlsdGVyOiBXb3Jrc3BhY2VUZWFtRmlsdGVyXFxuICAgICRsaW1pdDogSW50XFxuICAgICRjdXJzb3I6IFN0cmluZ1xcbiAgKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIGlkXFxuICAgICAgdGVhbShmaWx0ZXI6ICRmaWx0ZXIsIGxpbWl0OiAkbGltaXQsIGN1cnNvcjogJGN1cnNvcikge1xcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzVGFibGVfV29ya3NwYWNlQ29sbGFib3JhdG9yXFxuICAgICAgICB9XFxuICAgICAgICBjdXJzb3JcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgU2V0dGluZ3NXb3Jrc3BhY2VzSW52aXRlc1NlYXJjaChcXG4gICAgJHNsdWc6IFN0cmluZyFcXG4gICAgJGludml0ZXNGaWx0ZXI6IFBlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3JzRmlsdGVyXFxuICApIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzVGFibGVIZWFkZXJfV29ya3NwYWNlXFxuICAgICAgaW52aXRlZFRlYW0oZmlsdGVyOiAkaW52aXRlc0ZpbHRlcikge1xcbiAgICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc0ludml0ZXNUYWJsZV9QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFNldHRpbmdzV29ya3NwYWNlc0ludml0ZXNTZWFyY2goXFxuICAgICRzbHVnOiBTdHJpbmchXFxuICAgICRpbnZpdGVzRmlsdGVyOiBQZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yc0ZpbHRlclxcbiAgKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIGlkXFxuICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc1RhYmxlSGVhZGVyX1dvcmtzcGFjZVxcbiAgICAgIGludml0ZWRUZWFtKGZpbHRlcjogJGludml0ZXNGaWx0ZXIpIHtcXG4gICAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNJbnZpdGVzVGFibGVfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvclxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBTZXR0aW5nc1dvcmtzcGFjZXNQcm9qZWN0cyhcXG4gICAgJHNsdWc6IFN0cmluZyFcXG4gICAgJGxpbWl0OiBJbnQhXFxuICAgICRjdXJzb3I6IFN0cmluZ1xcbiAgICAkZmlsdGVyOiBXb3Jrc3BhY2VQcm9qZWN0c0ZpbHRlclxcbiAgKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc1Byb2plY3RzX1dvcmtzcGFjZVxcbiAgICAgIHByb2plY3RzKGxpbWl0OiAkbGltaXQsIGN1cnNvcjogJGN1cnNvciwgZmlsdGVyOiAkZmlsdGVyKSB7XFxuICAgICAgICBjdXJzb3JcXG4gICAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc1Byb2plY3RzX1Byb2plY3RDb2xsZWN0aW9uXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFNldHRpbmdzV29ya3NwYWNlc1Byb2plY3RzKFxcbiAgICAkc2x1ZzogU3RyaW5nIVxcbiAgICAkbGltaXQ6IEludCFcXG4gICAgJGN1cnNvcjogU3RyaW5nXFxuICAgICRmaWx0ZXI6IFdvcmtzcGFjZVByb2plY3RzRmlsdGVyXFxuICApIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzUHJvamVjdHNfV29ya3NwYWNlXFxuICAgICAgcHJvamVjdHMobGltaXQ6ICRsaW1pdCwgY3Vyc29yOiAkY3Vyc29yLCBmaWx0ZXI6ICRmaWx0ZXIpIHtcXG4gICAgICAgIGN1cnNvclxcbiAgICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzUHJvamVjdHNfUHJvamVjdENvbGxlY3Rpb25cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgU2V0dGluZ3NXb3Jrc3BhY2VTZWN1cml0eSgkc2x1ZzogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHNsdWcpIHtcXG4gICAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eV9Xb3Jrc3BhY2VcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBTZXR0aW5nc1dvcmtzcGFjZVNlY3VyaXR5KCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5X1dvcmtzcGFjZVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFNldHRpbmdzV29ya3NwYWNlQXV0b21hdGlvbigkc2x1ZzogU3RyaW5nISwgJGN1cnNvcjogU3RyaW5nID0gbnVsbCkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHNsdWcpIHtcXG4gICAgICBpZFxcbiAgICAgIGF1dG9tYXRlRnVuY3Rpb25zKFxcbiAgICAgICAgbGltaXQ6IDEwXFxuICAgICAgICBjdXJzb3I6ICRjdXJzb3JcXG4gICAgICAgIGZpbHRlcjogeyBpbmNsdWRlRmVhdHVyZWQ6IGZhbHNlIH1cXG4gICAgICApIHtcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzQXV0b21hdGlvbkZ1bmN0aW9uc19BdXRvbWF0ZUZ1bmN0aW9uXFxuICAgICAgICB9XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFNldHRpbmdzV29ya3NwYWNlQXV0b21hdGlvbigkc2x1ZzogU3RyaW5nISwgJGN1cnNvcjogU3RyaW5nID0gbnVsbCkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHNsdWcpIHtcXG4gICAgICBpZFxcbiAgICAgIGF1dG9tYXRlRnVuY3Rpb25zKFxcbiAgICAgICAgbGltaXQ6IDEwXFxuICAgICAgICBjdXJzb3I6ICRjdXJzb3JcXG4gICAgICAgIGZpbHRlcjogeyBpbmNsdWRlRmVhdHVyZWQ6IGZhbHNlIH1cXG4gICAgICApIHtcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzQXV0b21hdGlvbkZ1bmN0aW9uc19BdXRvbWF0ZUZ1bmN0aW9uXFxuICAgICAgICB9XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IEFwcEF1dGhvckF2YXRhciBvbiBBcHBBdXRob3Ige1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGF2YXRhclxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBBcHBBdXRob3JBdmF0YXIgb24gQXBwQXV0aG9yIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBhdmF0YXJcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgTGltaXRlZFVzZXJBdmF0YXIgb24gTGltaXRlZFVzZXIge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGF2YXRhclxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBMaW1pdGVkVXNlckF2YXRhciBvbiBMaW1pdGVkVXNlciB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgYXZhdGFyXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IEFjdGl2ZVVzZXJBdmF0YXIgb24gVXNlciB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgYXZhdGFyXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IEFjdGl2ZVVzZXJBdmF0YXIgb24gVXNlciB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgYXZhdGFyXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IEFjdGl2ZVVzZXJNZXRhIHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgbWV0YSB7XFxuICAgICAgICBsZWdhY3lQcm9qZWN0c0V4cGxhaW5lckNvbGxhcHNlZFxcbiAgICAgICAgc3BlY2tsZUNvbjI1QmFubmVyRGlzbWlzc2VkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IEFjdGl2ZVVzZXJNZXRhIHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgbWV0YSB7XFxuICAgICAgICBsZWdhY3lQcm9qZWN0c0V4cGxhaW5lckNvbGxhcHNlZFxcbiAgICAgICAgc3BlY2tsZUNvbjI1QmFubmVyRGlzbWlzc2VkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIFVwZGF0ZUxlZ2FjeVByb2plY3RzRXhwbGFpbmVyKCR2YWx1ZTogQm9vbGVhbiEpIHtcXG4gICAgYWN0aXZlVXNlck11dGF0aW9ucyB7XFxuICAgICAgbWV0YSB7XFxuICAgICAgICBzZXRMZWdhY3lQcm9qZWN0c0V4cGxhaW5lckNvbGxhcHNlZCh2YWx1ZTogJHZhbHVlKVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBVcGRhdGVMZWdhY3lQcm9qZWN0c0V4cGxhaW5lcigkdmFsdWU6IEJvb2xlYW4hKSB7XFxuICAgIGFjdGl2ZVVzZXJNdXRhdGlvbnMge1xcbiAgICAgIG1ldGEge1xcbiAgICAgICAgc2V0TGVnYWN5UHJvamVjdHNFeHBsYWluZXJDb2xsYXBzZWQodmFsdWU6ICR2YWx1ZSlcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gVXBkYXRlU3BlY2tsZUNvbjI1QmFubmVyRGlzbWlzc2VkKCR2YWx1ZTogQm9vbGVhbiEpIHtcXG4gICAgYWN0aXZlVXNlck11dGF0aW9ucyB7XFxuICAgICAgbWV0YSB7XFxuICAgICAgICBzZXRTcGVja2xlQ29uMjVCYW5uZXJEaXNtaXNzZWQodmFsdWU6ICR2YWx1ZSlcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gVXBkYXRlU3BlY2tsZUNvbjI1QmFubmVyRGlzbWlzc2VkKCR2YWx1ZTogQm9vbGVhbiEpIHtcXG4gICAgYWN0aXZlVXNlck11dGF0aW9ucyB7XFxuICAgICAgbWV0YSB7XFxuICAgICAgICBzZXRTcGVja2xlQ29uMjVCYW5uZXJEaXNtaXNzZWQodmFsdWU6ICR2YWx1ZSlcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgICAgIHN1YnNjcmlwdGlvbiBPblVzZXJQcm9qZWN0c1VwZGF0ZSB7XFxuICAgICAgICB1c2VyUHJvamVjdHNVcGRhdGVkIHtcXG4gICAgICAgICAgdHlwZVxcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBwcm9qZWN0IHtcXG4gICAgICAgICAgICAuLi5Qcm9qZWN0RGFzaGJvYXJkSXRlbVxcbiAgICAgICAgICAgIHdvcmtzcGFjZUlkXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIFwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICAgICAgc3Vic2NyaXB0aW9uIE9uVXNlclByb2plY3RzVXBkYXRlIHtcXG4gICAgICAgIHVzZXJQcm9qZWN0c1VwZGF0ZWQge1xcbiAgICAgICAgICB0eXBlXFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIHByb2plY3Qge1xcbiAgICAgICAgICAgIC4uLlByb2plY3REYXNoYm9hcmRJdGVtXFxuICAgICAgICAgICAgd29ya3NwYWNlSWRcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIFVwZGF0ZVVzZXIoJGlucHV0OiBVc2VyVXBkYXRlSW5wdXQhKSB7XFxuICAgIGFjdGl2ZVVzZXJNdXRhdGlvbnMge1xcbiAgICAgIHVwZGF0ZSh1c2VyOiAkaW5wdXQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBuYW1lXFxuICAgICAgICBiaW9cXG4gICAgICAgIGNvbXBhbnlcXG4gICAgICAgIGF2YXRhclxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBVcGRhdGVVc2VyKCRpbnB1dDogVXNlclVwZGF0ZUlucHV0ISkge1xcbiAgICBhY3RpdmVVc2VyTXV0YXRpb25zIHtcXG4gICAgICB1cGRhdGUodXNlcjogJGlucHV0KSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgbmFtZVxcbiAgICAgICAgYmlvXFxuICAgICAgICBjb21wYW55XFxuICAgICAgICBhdmF0YXJcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gVXBkYXRlTm90aWZpY2F0aW9uUHJlZmVyZW5jZXMoJGlucHV0OiBKU09OT2JqZWN0ISkge1xcbiAgICB1c2VyTm90aWZpY2F0aW9uUHJlZmVyZW5jZXNVcGRhdGUocHJlZmVyZW5jZXM6ICRpbnB1dClcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gVXBkYXRlTm90aWZpY2F0aW9uUHJlZmVyZW5jZXMoJGlucHV0OiBKU09OT2JqZWN0ISkge1xcbiAgICB1c2VyTm90aWZpY2F0aW9uUHJlZmVyZW5jZXNVcGRhdGUocHJlZmVyZW5jZXM6ICRpbnB1dClcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gRGVsZXRlQWNjb3VudCgkaW5wdXQ6IFVzZXJEZWxldGVJbnB1dCEpIHtcXG4gICAgdXNlckRlbGV0ZSh1c2VyQ29uZmlybWF0aW9uOiAkaW5wdXQpXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIERlbGV0ZUFjY291bnQoJGlucHV0OiBVc2VyRGVsZXRlSW5wdXQhKSB7XFxuICAgIHVzZXJEZWxldGUodXNlckNvbmZpcm1hdGlvbjogJGlucHV0KVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiB2ZXJpZnlFbWFpbCgkaW5wdXQ6IFZlcmlmeVVzZXJFbWFpbElucHV0ISkge1xcbiAgICBhY3RpdmVVc2VyTXV0YXRpb25zIHtcXG4gICAgICBlbWFpbE11dGF0aW9ucyB7XFxuICAgICAgICB2ZXJpZnkoaW5wdXQ6ICRpbnB1dClcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gdmVyaWZ5RW1haWwoJGlucHV0OiBWZXJpZnlVc2VyRW1haWxJbnB1dCEpIHtcXG4gICAgYWN0aXZlVXNlck11dGF0aW9ucyB7XFxuICAgICAgZW1haWxNdXRhdGlvbnMge1xcbiAgICAgICAgdmVyaWZ5KGlucHV0OiAkaW5wdXQpXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIFNldEFjdGl2ZVdvcmtzcGFjZSgkc2x1ZzogU3RyaW5nLCAkaWQ6IFN0cmluZykge1xcbiAgICBhY3RpdmVVc2VyTXV0YXRpb25zIHtcXG4gICAgICBzZXRBY3RpdmVXb3Jrc3BhY2Uoc2x1ZzogJHNsdWcsIGlkOiAkaWQpIHtcXG4gICAgICAgIC4uLldvcmtzcGFjZVN3aXRjaGVyQWN0aXZlV29ya3NwYWNlX0xpbWl0ZWRXb3Jrc3BhY2VcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gU2V0QWN0aXZlV29ya3NwYWNlKCRzbHVnOiBTdHJpbmcsICRpZDogU3RyaW5nKSB7XFxuICAgIGFjdGl2ZVVzZXJNdXRhdGlvbnMge1xcbiAgICAgIHNldEFjdGl2ZVdvcmtzcGFjZShzbHVnOiAkc2x1ZywgaWQ6ICRpZCkge1xcbiAgICAgICAgLi4uV29ya3NwYWNlU3dpdGNoZXJBY3RpdmVXb3Jrc3BhY2VfTGltaXRlZFdvcmtzcGFjZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBFbWFpbEZpZWxkcyBvbiBVc2VyRW1haWwge1xcbiAgICBpZFxcbiAgICBlbWFpbFxcbiAgICB2ZXJpZmllZFxcbiAgICBwcmltYXJ5XFxuICAgIHVzZXJJZFxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBFbWFpbEZpZWxkcyBvbiBVc2VyRW1haWwge1xcbiAgICBpZFxcbiAgICBlbWFpbFxcbiAgICB2ZXJpZmllZFxcbiAgICBwcmltYXJ5XFxuICAgIHVzZXJJZFxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBVc2VyRW1haWxzIHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgaWRcXG4gICAgICBlbWFpbHMge1xcbiAgICAgICAgLi4uRW1haWxGaWVsZHNcXG4gICAgICB9XFxuICAgICAgaGFzUGVuZGluZ1ZlcmlmaWNhdGlvblxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFVzZXJFbWFpbHMge1xcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICBpZFxcbiAgICAgIGVtYWlscyB7XFxuICAgICAgICAuLi5FbWFpbEZpZWxkc1xcbiAgICAgIH1cXG4gICAgICBoYXNQZW5kaW5nVmVyaWZpY2F0aW9uXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgVXNlckFjdGl2ZVdvcmtzcGFjZVNsdWcge1xcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICBpZFxcbiAgICAgIGFjdGl2ZVdvcmtzcGFjZSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgc2x1Z1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBVc2VyQWN0aXZlV29ya3NwYWNlU2x1ZyB7XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgYWN0aXZlV29ya3NwYWNlIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBzbHVnXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFVzZVZpZXdlclVzZXJBY3Rpdml0eUJyb2FkY2FzdGluZ19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQnJvYWRjYXN0QWN0aXZpdHkge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBVc2VWaWV3ZXJVc2VyQWN0aXZpdHlCcm9hZGNhc3RpbmdfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkJyb2FkY2FzdEFjdGl2aXR5IHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgVmlld2VyQ29tbWVudEJ1YmJsZXNEYXRhIG9uIENvbW1lbnQge1xcbiAgICBpZFxcbiAgICB2aWV3ZWRBdFxcbiAgICB2aWV3ZXJTdGF0ZVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBWaWV3ZXJDb21tZW50QnViYmxlc0RhdGEgb24gQ29tbWVudCB7XFxuICAgIGlkXFxuICAgIHZpZXdlZEF0XFxuICAgIHZpZXdlclN0YXRlXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFVzZUNoZWNrVmlld2VyQ29tbWVudGluZ0FjY2Vzc19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQ3JlYXRlQ29tbWVudCB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFVzZUNoZWNrVmlld2VyQ29tbWVudGluZ0FjY2Vzc19Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQ3JlYXRlQ29tbWVudCB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFVzZUxvYWRMYXRlc3RWZXJzaW9uX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgc2x1Z1xcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFVzZUxvYWRMYXRlc3RWZXJzaW9uX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgc2x1Z1xcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIENyZWF0ZVNhdmVkVmlldygkaW5wdXQ6IENyZWF0ZVNhdmVkVmlld0lucHV0ISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBzYXZlZFZpZXdNdXRhdGlvbnMge1xcbiAgICAgICAgY3JlYXRlVmlldyhpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIHJlc291cmNlSWRzXFxuICAgICAgICAgIGdyb3VwSWRcXG4gICAgICAgICAgLi4uVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld19TYXZlZFZpZXdcXG4gICAgICAgICAgZ3JvdXAge1xcbiAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgLi4uVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cF9TYXZlZFZpZXdHcm91cFxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIENyZWF0ZVNhdmVkVmlldygkaW5wdXQ6IENyZWF0ZVNhdmVkVmlld0lucHV0ISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBzYXZlZFZpZXdNdXRhdGlvbnMge1xcbiAgICAgICAgY3JlYXRlVmlldyhpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIHJlc291cmNlSWRzXFxuICAgICAgICAgIGdyb3VwSWRcXG4gICAgICAgICAgLi4uVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld19TYXZlZFZpZXdcXG4gICAgICAgICAgZ3JvdXAge1xcbiAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgLi4uVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cF9TYXZlZFZpZXdHcm91cFxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIERlbGV0ZVNhdmVkVmlldygkaW5wdXQ6IERlbGV0ZVNhdmVkVmlld0lucHV0ISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBzYXZlZFZpZXdNdXRhdGlvbnMge1xcbiAgICAgICAgZGVsZXRlVmlldyhpbnB1dDogJGlucHV0KVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBEZWxldGVTYXZlZFZpZXcoJGlucHV0OiBEZWxldGVTYXZlZFZpZXdJbnB1dCEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgc2F2ZWRWaWV3TXV0YXRpb25zIHtcXG4gICAgICAgIGRlbGV0ZVZpZXcoaW5wdXQ6ICRpbnB1dClcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgVXNlRGVsZXRlU2F2ZWRWaWV3X1NhdmVkVmlldyBvbiBTYXZlZFZpZXcge1xcbiAgICBpZFxcbiAgICBwcm9qZWN0SWRcXG4gICAgcmVzb3VyY2VJZHNcXG4gICAgZ3JvdXAge1xcbiAgICAgIGlkXFxuICAgICAgZ3JvdXBJZFxcbiAgICAgIHJlc291cmNlSWRzXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgVXNlRGVsZXRlU2F2ZWRWaWV3X1NhdmVkVmlldyBvbiBTYXZlZFZpZXcge1xcbiAgICBpZFxcbiAgICBwcm9qZWN0SWRcXG4gICAgcmVzb3VyY2VJZHNcXG4gICAgZ3JvdXAge1xcbiAgICAgIGlkXFxuICAgICAgZ3JvdXBJZFxcbiAgICAgIHJlc291cmNlSWRzXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gVXBkYXRlU2F2ZWRWaWV3KCRpbnB1dDogVXBkYXRlU2F2ZWRWaWV3SW5wdXQhKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIHNhdmVkVmlld011dGF0aW9ucyB7XFxuICAgICAgICB1cGRhdGVWaWV3KGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld19TYXZlZFZpZXdcXG4gICAgICAgICAgLi4uVXNlVmlld2VyU2F2ZWRWaWV3U2V0dXBfU2F2ZWRWaWV3XFxuICAgICAgICAgIC4uLlVzZVVwZGF0ZVNhdmVkVmlld19TYXZlZFZpZXdcXG4gICAgICAgICAgZ3JvdXAge1xcbiAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgLi4uVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cF9TYXZlZFZpZXdHcm91cFxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIFVwZGF0ZVNhdmVkVmlldygkaW5wdXQ6IFVwZGF0ZVNhdmVkVmlld0lucHV0ISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBzYXZlZFZpZXdNdXRhdGlvbnMge1xcbiAgICAgICAgdXBkYXRlVmlldyhpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdfU2F2ZWRWaWV3XFxuICAgICAgICAgIC4uLlVzZVZpZXdlclNhdmVkVmlld1NldHVwX1NhdmVkVmlld1xcbiAgICAgICAgICAuLi5Vc2VVcGRhdGVTYXZlZFZpZXdfU2F2ZWRWaWV3XFxuICAgICAgICAgIGdyb3VwIHtcXG4gICAgICAgICAgICBpZFxcbiAgICAgICAgICAgIC4uLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBfU2F2ZWRWaWV3R3JvdXBcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBVc2VVcGRhdGVTYXZlZFZpZXdfU2F2ZWRWaWV3IG9uIFNhdmVkVmlldyB7XFxuICAgIGlkXFxuICAgIHByb2plY3RJZFxcbiAgICBpc0hvbWVWaWV3XFxuICAgIGdyb3VwUmVzb3VyY2VJZHNcXG4gICAgcmVzb3VyY2VJZHNcXG4gICAgZ3JvdXAge1xcbiAgICAgIGlkXFxuICAgICAgZ3JvdXBJZFxcbiAgICAgIHJlc291cmNlSWRzXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgVXNlVXBkYXRlU2F2ZWRWaWV3X1NhdmVkVmlldyBvbiBTYXZlZFZpZXcge1xcbiAgICBpZFxcbiAgICBwcm9qZWN0SWRcXG4gICAgaXNIb21lVmlld1xcbiAgICBncm91cFJlc291cmNlSWRzXFxuICAgIHJlc291cmNlSWRzXFxuICAgIGdyb3VwIHtcXG4gICAgICBpZFxcbiAgICAgIGdyb3VwSWRcXG4gICAgICByZXNvdXJjZUlkc1xcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIENyZWF0ZVNhdmVkVmlld0dyb3VwKCRpbnB1dDogQ3JlYXRlU2F2ZWRWaWV3R3JvdXBJbnB1dCEpIHtcXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XFxuICAgICAgc2F2ZWRWaWV3TXV0YXRpb25zIHtcXG4gICAgICAgIGNyZWF0ZUdyb3VwKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cF9TYXZlZFZpZXdHcm91cFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBDcmVhdGVTYXZlZFZpZXdHcm91cCgkaW5wdXQ6IENyZWF0ZVNhdmVkVmlld0dyb3VwSW5wdXQhKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIHNhdmVkVmlld011dGF0aW9ucyB7XFxuICAgICAgICBjcmVhdGVHcm91cChpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdzR3JvdXBfU2F2ZWRWaWV3R3JvdXBcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gRGVsZXRlU2F2ZWRWaWV3R3JvdXAoJGlucHV0OiBEZWxldGVTYXZlZFZpZXdHcm91cElucHV0ISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBzYXZlZFZpZXdNdXRhdGlvbnMge1xcbiAgICAgICAgZGVsZXRlR3JvdXAoaW5wdXQ6ICRpbnB1dClcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gRGVsZXRlU2F2ZWRWaWV3R3JvdXAoJGlucHV0OiBEZWxldGVTYXZlZFZpZXdHcm91cElucHV0ISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBzYXZlZFZpZXdNdXRhdGlvbnMge1xcbiAgICAgICAgZGVsZXRlR3JvdXAoaW5wdXQ6ICRpbnB1dClcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgVXNlRGVsZXRlU2F2ZWRWaWV3R3JvdXBfU2F2ZWRWaWV3R3JvdXAgb24gU2F2ZWRWaWV3R3JvdXAge1xcbiAgICBpZFxcbiAgICBncm91cElkXFxuICAgIHByb2plY3RJZFxcbiAgICBpc1VuZ3JvdXBlZFZpZXdzR3JvdXBcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgVXNlRGVsZXRlU2F2ZWRWaWV3R3JvdXBfU2F2ZWRWaWV3R3JvdXAgb24gU2F2ZWRWaWV3R3JvdXAge1xcbiAgICBpZFxcbiAgICBncm91cElkXFxuICAgIHByb2plY3RJZFxcbiAgICBpc1VuZ3JvdXBlZFZpZXdzR3JvdXBcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gVXBkYXRlU2F2ZWRWaWV3R3JvdXAoJGlucHV0OiBVcGRhdGVTYXZlZFZpZXdHcm91cElucHV0ISkge1xcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcXG4gICAgICBzYXZlZFZpZXdNdXRhdGlvbnMge1xcbiAgICAgICAgdXBkYXRlR3JvdXAoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICAuLi5Vc2VVcGRhdGVTYXZlZFZpZXdHcm91cF9TYXZlZFZpZXdHcm91cFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBVcGRhdGVTYXZlZFZpZXdHcm91cCgkaW5wdXQ6IFVwZGF0ZVNhdmVkVmlld0dyb3VwSW5wdXQhKSB7XFxuICAgIHByb2plY3RNdXRhdGlvbnMge1xcbiAgICAgIHNhdmVkVmlld011dGF0aW9ucyB7XFxuICAgICAgICB1cGRhdGVHcm91cChpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLlVzZVVwZGF0ZVNhdmVkVmlld0dyb3VwX1NhdmVkVmlld0dyb3VwXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFVzZVVwZGF0ZVNhdmVkVmlld0dyb3VwX1NhdmVkVmlld0dyb3VwIG9uIFNhdmVkVmlld0dyb3VwIHtcXG4gICAgaWRcXG4gICAgcHJvamVjdElkXFxuICAgIGdyb3VwSWRcXG4gICAgdGl0bGVcXG4gICAgaXNVbmdyb3VwZWRWaWV3c0dyb3VwXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFVzZVVwZGF0ZVNhdmVkVmlld0dyb3VwX1NhdmVkVmlld0dyb3VwIG9uIFNhdmVkVmlld0dyb3VwIHtcXG4gICAgaWRcXG4gICAgcHJvamVjdElkXFxuICAgIGdyb3VwSWRcXG4gICAgdGl0bGVcXG4gICAgaXNVbmdyb3VwZWRWaWV3c0dyb3VwXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHN1YnNjcmlwdGlvbiBPblByb2plY3RTYXZlZFZpZXdzVXBkYXRlZCgkcHJvamVjdElkOiBJRCEpIHtcXG4gICAgcHJvamVjdFNhdmVkVmlld3NVcGRhdGVkKHByb2plY3RJZDogJHByb2plY3RJZCkge1xcbiAgICAgIHR5cGVcXG4gICAgICBpZFxcbiAgICAgIHNhdmVkVmlldyB7XFxuICAgICAgICBpZFxcbiAgICAgICAgcmVzb3VyY2VJZHNcXG4gICAgICAgIGdyb3VwIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgZ3JvdXBJZFxcbiAgICAgICAgICByZXNvdXJjZUlkc1xcbiAgICAgICAgfVxcbiAgICAgICAgLi4uVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld19TYXZlZFZpZXdcXG4gICAgICB9XFxuICAgICAgYmVmb3JlQ2hhbmdlU2F2ZWRWaWV3IHtcXG4gICAgICAgIGdyb3VwSWRcXG4gICAgICAgIHJlc291cmNlSWRzXFxuICAgICAgICBncm91cFJlc291cmNlSWRzXFxuICAgICAgICBwb3NpdGlvblxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBzdWJzY3JpcHRpb24gT25Qcm9qZWN0U2F2ZWRWaWV3c1VwZGF0ZWQoJHByb2plY3RJZDogSUQhKSB7XFxuICAgIHByb2plY3RTYXZlZFZpZXdzVXBkYXRlZChwcm9qZWN0SWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICB0eXBlXFxuICAgICAgaWRcXG4gICAgICBzYXZlZFZpZXcge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHJlc291cmNlSWRzXFxuICAgICAgICBncm91cCB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIGdyb3VwSWRcXG4gICAgICAgICAgcmVzb3VyY2VJZHNcXG4gICAgICAgIH1cXG4gICAgICAgIC4uLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdfU2F2ZWRWaWV3XFxuICAgICAgfVxcbiAgICAgIGJlZm9yZUNoYW5nZVNhdmVkVmlldyB7XFxuICAgICAgICBncm91cElkXFxuICAgICAgICByZXNvdXJjZUlkc1xcbiAgICAgICAgZ3JvdXBSZXNvdXJjZUlkc1xcbiAgICAgICAgcG9zaXRpb25cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgc3Vic2NyaXB0aW9uIE9uUHJvamVjdFNhdmVkVmlld0dyb3Vwc1VwZGF0ZWQoJHByb2plY3RJZDogSUQhKSB7XFxuICAgIHByb2plY3RTYXZlZFZpZXdHcm91cHNVcGRhdGVkKHByb2plY3RJZDogJHByb2plY3RJZCkge1xcbiAgICAgIHR5cGVcXG4gICAgICBpZFxcbiAgICAgIHNhdmVkVmlld0dyb3VwIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBwcm9qZWN0SWRcXG4gICAgICAgIGF1dGhvciB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHN1YnNjcmlwdGlvbiBPblByb2plY3RTYXZlZFZpZXdHcm91cHNVcGRhdGVkKCRwcm9qZWN0SWQ6IElEISkge1xcbiAgICBwcm9qZWN0U2F2ZWRWaWV3R3JvdXBzVXBkYXRlZChwcm9qZWN0SWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICB0eXBlXFxuICAgICAgaWRcXG4gICAgICBzYXZlZFZpZXdHcm91cCB7XFxuICAgICAgICBpZFxcbiAgICAgICAgcHJvamVjdElkXFxuICAgICAgICBhdXRob3Ige1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBVc2VEcmFnZ2FibGVWaWV3X1NhdmVkVmlldyBvbiBTYXZlZFZpZXcge1xcbiAgICBpZFxcbiAgICBwcm9qZWN0SWRcXG4gICAgbmFtZVxcbiAgICBwb3NpdGlvblxcbiAgICBncm91cCB7XFxuICAgICAgaWRcXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuTW92ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIC4uLlVzZVVwZGF0ZVNhdmVkVmlld19TYXZlZFZpZXdcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgVXNlRHJhZ2dhYmxlVmlld19TYXZlZFZpZXcgb24gU2F2ZWRWaWV3IHtcXG4gICAgaWRcXG4gICAgcHJvamVjdElkXFxuICAgIG5hbWVcXG4gICAgcG9zaXRpb25cXG4gICAgZ3JvdXAge1xcbiAgICAgIGlkXFxuICAgIH1cXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbk1vdmUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5Vc2VVcGRhdGVTYXZlZFZpZXdfU2F2ZWRWaWV3XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFVzZURyYWdnYWJsZVZpZXdUYXJnZXRWaWV3X1NhdmVkVmlldyBvbiBTYXZlZFZpZXcge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHBvc2l0aW9uXFxuICAgIGdyb3VwIHtcXG4gICAgICBpZFxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFVzZURyYWdnYWJsZVZpZXdUYXJnZXRWaWV3X1NhdmVkVmlldyBvbiBTYXZlZFZpZXcge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHBvc2l0aW9uXFxuICAgIGdyb3VwIHtcXG4gICAgICBpZFxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFVzZURyYWdnYWJsZVZpZXdUYXJnZXRHcm91cF9TYXZlZFZpZXdHcm91cCBvbiBTYXZlZFZpZXdHcm91cCB7XFxuICAgIGlkXFxuICAgIHRpdGxlXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFVzZURyYWdnYWJsZVZpZXdUYXJnZXRHcm91cF9TYXZlZFZpZXdHcm91cCBvbiBTYXZlZFZpZXdHcm91cCB7XFxuICAgIGlkXFxuICAgIHRpdGxlXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFVzZVNhdmVkVmlld1ZhbGlkYXRpb25IZWxwZXJzX1NhdmVkVmlldyBvbiBTYXZlZFZpZXcge1xcbiAgICBpZFxcbiAgICBpc0hvbWVWaWV3XFxuICAgIHZpc2liaWxpdHlcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhblVwZGF0ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhbk1vdmUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5FZGl0VGl0bGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5FZGl0RGVzY3JpcHRpb24ge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5TZXRBc0hvbWVWaWV3IHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgVXNlU2F2ZWRWaWV3VmFsaWRhdGlvbkhlbHBlcnNfU2F2ZWRWaWV3IG9uIFNhdmVkVmlldyB7XFxuICAgIGlkXFxuICAgIGlzSG9tZVZpZXdcXG4gICAgdmlzaWJpbGl0eVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuVXBkYXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuTW92ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhbkVkaXRUaXRsZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhbkVkaXREZXNjcmlwdGlvbiB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhblNldEFzSG9tZVZpZXcge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBVc2VWaWV3ZXJTYXZlZFZpZXdTZXR1cF9TYXZlZFZpZXcgb24gU2F2ZWRWaWV3IHtcXG4gICAgaWRcXG4gICAgdmlld2VyU3RhdGVcXG4gICAgLi4uVmlld2VyUGFnZVNldHVwX1NhdmVkVmlld1xcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBVc2VWaWV3ZXJTYXZlZFZpZXdTZXR1cF9TYXZlZFZpZXcgb24gU2F2ZWRWaWV3IHtcXG4gICAgaWRcXG4gICAgdmlld2VyU3RhdGVcXG4gICAgLi4uVmlld2VyUGFnZVNldHVwX1NhdmVkVmlld1xcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBWaWV3ZXJDb21tZW50VGhyZWFkIG9uIENvbW1lbnQge1xcbiAgICAuLi5WaWV3ZXJDb21tZW50c0xpc3RJdGVtXFxuICAgIC4uLlZpZXdlckNvbW1lbnRCdWJibGVzRGF0YVxcbiAgICAuLi5WaWV3ZXJDb21tZW50c1JlcGx5SXRlbVxcbiAgICAuLi5WaWV3ZXJDb21tZW50VGhyZWFkRGF0YVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBWaWV3ZXJDb21tZW50VGhyZWFkIG9uIENvbW1lbnQge1xcbiAgICAuLi5WaWV3ZXJDb21tZW50c0xpc3RJdGVtXFxuICAgIC4uLlZpZXdlckNvbW1lbnRCdWJibGVzRGF0YVxcbiAgICAuLi5WaWV3ZXJDb21tZW50c1JlcGx5SXRlbVxcbiAgICAuLi5WaWV3ZXJDb21tZW50VGhyZWFkRGF0YVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBWaWV3ZXJDb21tZW50c1JlcGx5SXRlbSBvbiBDb21tZW50IHtcXG4gICAgaWRcXG4gICAgYXJjaGl2ZWRcXG4gICAgcmF3VGV4dFxcbiAgICB0ZXh0IHtcXG4gICAgICBkb2NcXG4gICAgfVxcbiAgICBhdXRob3Ige1xcbiAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgIH1cXG4gICAgY3JlYXRlZEF0XFxuICAgIC4uLlRocmVhZENvbW1lbnRBdHRhY2htZW50XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFZpZXdlckNvbW1lbnRzUmVwbHlJdGVtIG9uIENvbW1lbnQge1xcbiAgICBpZFxcbiAgICBhcmNoaXZlZFxcbiAgICByYXdUZXh0XFxuICAgIHRleHQge1xcbiAgICAgIGRvY1xcbiAgICB9XFxuICAgIGF1dGhvciB7XFxuICAgICAgLi4uTGltaXRlZFVzZXJBdmF0YXJcXG4gICAgfVxcbiAgICBjcmVhdGVkQXRcXG4gICAgLi4uVGhyZWFkQ29tbWVudEF0dGFjaG1lbnRcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gQnJvYWRjYXN0Vmlld2VyVXNlckFjdGl2aXR5KFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRyZXNvdXJjZUlkU3RyaW5nOiBTdHJpbmchXFxuICAgICRtZXNzYWdlOiBWaWV3ZXJVc2VyQWN0aXZpdHlNZXNzYWdlSW5wdXQhXFxuICApIHtcXG4gICAgYnJvYWRjYXN0Vmlld2VyVXNlckFjdGl2aXR5KFxcbiAgICAgIHByb2plY3RJZDogJHByb2plY3RJZFxcbiAgICAgIHJlc291cmNlSWRTdHJpbmc6ICRyZXNvdXJjZUlkU3RyaW5nXFxuICAgICAgbWVzc2FnZTogJG1lc3NhZ2VcXG4gICAgKVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBCcm9hZGNhc3RWaWV3ZXJVc2VyQWN0aXZpdHkoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJHJlc291cmNlSWRTdHJpbmc6IFN0cmluZyFcXG4gICAgJG1lc3NhZ2U6IFZpZXdlclVzZXJBY3Rpdml0eU1lc3NhZ2VJbnB1dCFcXG4gICkge1xcbiAgICBicm9hZGNhc3RWaWV3ZXJVc2VyQWN0aXZpdHkoXFxuICAgICAgcHJvamVjdElkOiAkcHJvamVjdElkXFxuICAgICAgcmVzb3VyY2VJZFN0cmluZzogJHJlc291cmNlSWRTdHJpbmdcXG4gICAgICBtZXNzYWdlOiAkbWVzc2FnZVxcbiAgICApXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIE1hcmtDb21tZW50Vmlld2VkKCRpbnB1dDogTWFya0NvbW1lbnRWaWV3ZWRJbnB1dCEpIHtcXG4gICAgY29tbWVudE11dGF0aW9ucyB7XFxuICAgICAgbWFya1ZpZXdlZChpbnB1dDogJGlucHV0KVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIE1hcmtDb21tZW50Vmlld2VkKCRpbnB1dDogTWFya0NvbW1lbnRWaWV3ZWRJbnB1dCEpIHtcXG4gICAgY29tbWVudE11dGF0aW9ucyB7XFxuICAgICAgbWFya1ZpZXdlZChpbnB1dDogJGlucHV0KVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIENyZWF0ZUNvbW1lbnRUaHJlYWQoJGlucHV0OiBDcmVhdGVDb21tZW50SW5wdXQhKSB7XFxuICAgIGNvbW1lbnRNdXRhdGlvbnMge1xcbiAgICAgIGNyZWF0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAuLi5WaWV3ZXJDb21tZW50VGhyZWFkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIENyZWF0ZUNvbW1lbnRUaHJlYWQoJGlucHV0OiBDcmVhdGVDb21tZW50SW5wdXQhKSB7XFxuICAgIGNvbW1lbnRNdXRhdGlvbnMge1xcbiAgICAgIGNyZWF0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAuLi5WaWV3ZXJDb21tZW50VGhyZWFkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIENyZWF0ZUNvbW1lbnRSZXBseSgkaW5wdXQ6IENyZWF0ZUNvbW1lbnRSZXBseUlucHV0ISkge1xcbiAgICBjb21tZW50TXV0YXRpb25zIHtcXG4gICAgICByZXBseShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICAuLi5WaWV3ZXJDb21tZW50c1JlcGx5SXRlbVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBDcmVhdGVDb21tZW50UmVwbHkoJGlucHV0OiBDcmVhdGVDb21tZW50UmVwbHlJbnB1dCEpIHtcXG4gICAgY29tbWVudE11dGF0aW9ucyB7XFxuICAgICAgcmVwbHkoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgLi4uVmlld2VyQ29tbWVudHNSZXBseUl0ZW1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gQXJjaGl2ZUNvbW1lbnQoJGlucHV0OiBBcmNoaXZlQ29tbWVudElucHV0ISkge1xcbiAgICBjb21tZW50TXV0YXRpb25zIHtcXG4gICAgICBhcmNoaXZlKGlucHV0OiAkaW5wdXQpXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gQXJjaGl2ZUNvbW1lbnQoJGlucHV0OiBBcmNoaXZlQ29tbWVudElucHV0ISkge1xcbiAgICBjb21tZW50TXV0YXRpb25zIHtcXG4gICAgICBhcmNoaXZlKGlucHV0OiAkaW5wdXQpXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgUHJvamVjdFZpZXdlclJlc291cmNlcyhcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkcmVzb3VyY2VVcmxTdHJpbmc6IFN0cmluZyFcXG4gICAgJHNhdmVkVmlld0lkOiBJRFxcbiAgICAkc2F2ZWRWaWV3U2V0dGluZ3M6IFNhdmVkVmlld3NMb2FkU2V0dGluZ3NcXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICB2aWV3ZXJSZXNvdXJjZXNFeHRlbmRlZChcXG4gICAgICAgIHJlc291cmNlSWRTdHJpbmc6ICRyZXNvdXJjZVVybFN0cmluZ1xcbiAgICAgICAgc2F2ZWRWaWV3SWQ6ICRzYXZlZFZpZXdJZFxcbiAgICAgICAgc2F2ZWRWaWV3U2V0dGluZ3M6ICRzYXZlZFZpZXdTZXR0aW5nc1xcbiAgICAgICkge1xcbiAgICAgICAgZ3JvdXBzIHtcXG4gICAgICAgICAgaWRlbnRpZmllclxcbiAgICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgICAgbW9kZWxJZFxcbiAgICAgICAgICAgIHZlcnNpb25JZFxcbiAgICAgICAgICAgIG9iamVjdElkXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHNhdmVkVmlldyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLlVzZVZpZXdlclNhdmVkVmlld1NldHVwX1NhdmVkVmlld1xcbiAgICAgICAgfVxcbiAgICAgICAgcmVxdWVzdCB7XFxuICAgICAgICAgIHNhdmVkVmlld0lkXFxuICAgICAgICB9XFxuICAgICAgICByZXNvdXJjZUlkU3RyaW5nXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFByb2plY3RWaWV3ZXJSZXNvdXJjZXMoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJHJlc291cmNlVXJsU3RyaW5nOiBTdHJpbmchXFxuICAgICRzYXZlZFZpZXdJZDogSURcXG4gICAgJHNhdmVkVmlld1NldHRpbmdzOiBTYXZlZFZpZXdzTG9hZFNldHRpbmdzXFxuICApIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgdmlld2VyUmVzb3VyY2VzRXh0ZW5kZWQoXFxuICAgICAgICByZXNvdXJjZUlkU3RyaW5nOiAkcmVzb3VyY2VVcmxTdHJpbmdcXG4gICAgICAgIHNhdmVkVmlld0lkOiAkc2F2ZWRWaWV3SWRcXG4gICAgICAgIHNhdmVkVmlld1NldHRpbmdzOiAkc2F2ZWRWaWV3U2V0dGluZ3NcXG4gICAgICApIHtcXG4gICAgICAgIGdyb3VwcyB7XFxuICAgICAgICAgIGlkZW50aWZpZXJcXG4gICAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAgIG1vZGVsSWRcXG4gICAgICAgICAgICB2ZXJzaW9uSWRcXG4gICAgICAgICAgICBvYmplY3RJZFxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBzYXZlZFZpZXcge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICAuLi5Vc2VWaWV3ZXJTYXZlZFZpZXdTZXR1cF9TYXZlZFZpZXdcXG4gICAgICAgIH1cXG4gICAgICAgIHJlcXVlc3Qge1xcbiAgICAgICAgICBzYXZlZFZpZXdJZFxcbiAgICAgICAgfVxcbiAgICAgICAgcmVzb3VyY2VJZFN0cmluZ1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBWaWV3ZXJMb2FkZWRSZXNvdXJjZXMoXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZyFcXG4gICAgJG1vZGVsSWRzOiBbU3RyaW5nIV0hXFxuICAgICR2ZXJzaW9uSWRzOiBbU3RyaW5nIV1cXG4gICkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICByb2xlXFxuICAgICAgYWxsb3dQdWJsaWNDb21tZW50c1xcbiAgICAgIG1vZGVscyhmaWx0ZXI6IHsgaWRzOiAkbW9kZWxJZHMgfSkge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBuYW1lXFxuICAgICAgICAgIHVwZGF0ZWRBdFxcbiAgICAgICAgICBsb2FkZWRWZXJzaW9uOiB2ZXJzaW9ucyhcXG4gICAgICAgICAgICBmaWx0ZXI6IHsgcHJpb3JpdHlJZHM6ICR2ZXJzaW9uSWRzLCBwcmlvcml0eUlkc09ubHk6IHRydWUgfVxcbiAgICAgICAgICApIHtcXG4gICAgICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgICAgICAuLi5WaWV3ZXJNb2RlbFZlcnNpb25DYXJkSXRlbVxcbiAgICAgICAgICAgICAgYXV0b21hdGlvbnNTdGF0dXMge1xcbiAgICAgICAgICAgICAgICBpZFxcbiAgICAgICAgICAgICAgICBhdXRvbWF0aW9uUnVucyB7XFxuICAgICAgICAgICAgICAgICAgLi4uQXV0b21hdGVWaWV3ZXJQYW5lbF9BdXRvbWF0ZVJ1blxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICAgIHZlcnNpb25zKGxpbWl0OiA1KSB7XFxuICAgICAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgICAgIGN1cnNvclxcbiAgICAgICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgICAgIC4uLlZpZXdlck1vZGVsVmVyc2lvbkNhcmRJdGVtXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIC4uLlByb2plY3RQYWdlTGF0ZXN0SXRlbXNNb2RlbHNcXG4gICAgICAuLi5Nb2RlbFBhZ2VQcm9qZWN0XFxuICAgICAgLi4uSGVhZGVyTmF2U2hhcmVfUHJvamVjdFxcbiAgICAgIC4uLlVzZUNoZWNrVmlld2VyQ29tbWVudGluZ0FjY2Vzc19Qcm9qZWN0XFxuICAgICAgLi4uVXNlVmlld2VyVXNlckFjdGl2aXR5QnJvYWRjYXN0aW5nX1Byb2plY3RcXG4gICAgICAuLi5WaWV3ZXJSZXNvdXJjZXNMaW1pdEFsZXJ0X1Byb2plY3RcXG4gICAgICAuLi5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxfUHJvamVjdFxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFZpZXdlckxvYWRlZFJlc291cmNlcyhcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkbW9kZWxJZHM6IFtTdHJpbmchXSFcXG4gICAgJHZlcnNpb25JZHM6IFtTdHJpbmchXVxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHJvbGVcXG4gICAgICBhbGxvd1B1YmxpY0NvbW1lbnRzXFxuICAgICAgbW9kZWxzKGZpbHRlcjogeyBpZHM6ICRtb2RlbElkcyB9KSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIG5hbWVcXG4gICAgICAgICAgdXBkYXRlZEF0XFxuICAgICAgICAgIGxvYWRlZFZlcnNpb246IHZlcnNpb25zKFxcbiAgICAgICAgICAgIGZpbHRlcjogeyBwcmlvcml0eUlkczogJHZlcnNpb25JZHMsIHByaW9yaXR5SWRzT25seTogdHJ1ZSB9XFxuICAgICAgICAgICkge1xcbiAgICAgICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgICAgIC4uLlZpZXdlck1vZGVsVmVyc2lvbkNhcmRJdGVtXFxuICAgICAgICAgICAgICBhdXRvbWF0aW9uc1N0YXR1cyB7XFxuICAgICAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgICAgIGF1dG9tYXRpb25SdW5zIHtcXG4gICAgICAgICAgICAgICAgICAuLi5BdXRvbWF0ZVZpZXdlclBhbmVsX0F1dG9tYXRlUnVuXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgdmVyc2lvbnMobGltaXQ6IDUpIHtcXG4gICAgICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICAgICAgY3Vyc29yXFxuICAgICAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAgICAgLi4uVmlld2VyTW9kZWxWZXJzaW9uQ2FyZEl0ZW1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgLi4uUHJvamVjdFBhZ2VMYXRlc3RJdGVtc01vZGVsc1xcbiAgICAgIC4uLk1vZGVsUGFnZVByb2plY3RcXG4gICAgICAuLi5IZWFkZXJOYXZTaGFyZV9Qcm9qZWN0XFxuICAgICAgLi4uVXNlQ2hlY2tWaWV3ZXJDb21tZW50aW5nQWNjZXNzX1Byb2plY3RcXG4gICAgICAuLi5Vc2VWaWV3ZXJVc2VyQWN0aXZpdHlCcm9hZGNhc3RpbmdfUHJvamVjdFxcbiAgICAgIC4uLlZpZXdlclJlc291cmNlc0xpbWl0QWxlcnRfUHJvamVjdFxcbiAgICAgIC4uLlZpZXdlclNhdmVkVmlld3NQYW5lbF9Qcm9qZWN0XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgVmlld2VyTW9kZWxWZXJzaW9ucyhcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkbW9kZWxJZDogU3RyaW5nIVxcbiAgICAkdmVyc2lvbnNDdXJzb3I6IFN0cmluZ1xcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHJvbGVcXG4gICAgICBtb2RlbChpZDogJG1vZGVsSWQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICB2ZXJzaW9ucyhjdXJzb3I6ICR2ZXJzaW9uc0N1cnNvciwgbGltaXQ6IDUpIHtcXG4gICAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgICBjdXJzb3JcXG4gICAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAgIC4uLlZpZXdlck1vZGVsVmVyc2lvbkNhcmRJdGVtXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgVmlld2VyTW9kZWxWZXJzaW9ucyhcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkbW9kZWxJZDogU3RyaW5nIVxcbiAgICAkdmVyc2lvbnNDdXJzb3I6IFN0cmluZ1xcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHJvbGVcXG4gICAgICBtb2RlbChpZDogJG1vZGVsSWQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICB2ZXJzaW9ucyhjdXJzb3I6ICR2ZXJzaW9uc0N1cnNvciwgbGltaXQ6IDUpIHtcXG4gICAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgICBjdXJzb3JcXG4gICAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAgIC4uLlZpZXdlck1vZGVsVmVyc2lvbkNhcmRJdGVtXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgVmlld2VyRGlmZlZlcnNpb25zKFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRtb2RlbElkOiBTdHJpbmchXFxuICAgICR2ZXJzaW9uQUlkOiBTdHJpbmchXFxuICAgICR2ZXJzaW9uQklkOiBTdHJpbmchXFxuICApIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgbW9kZWwoaWQ6ICRtb2RlbElkKSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgdmVyc2lvbkE6IHZlcnNpb24oaWQ6ICR2ZXJzaW9uQUlkKSB7XFxuICAgICAgICAgIC4uLlZpZXdlck1vZGVsVmVyc2lvbkNhcmRJdGVtXFxuICAgICAgICB9XFxuICAgICAgICB2ZXJzaW9uQjogdmVyc2lvbihpZDogJHZlcnNpb25CSWQpIHtcXG4gICAgICAgICAgLi4uVmlld2VyTW9kZWxWZXJzaW9uQ2FyZEl0ZW1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgVmlld2VyRGlmZlZlcnNpb25zKFxcbiAgICAkcHJvamVjdElkOiBTdHJpbmchXFxuICAgICRtb2RlbElkOiBTdHJpbmchXFxuICAgICR2ZXJzaW9uQUlkOiBTdHJpbmchXFxuICAgICR2ZXJzaW9uQklkOiBTdHJpbmchXFxuICApIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgbW9kZWwoaWQ6ICRtb2RlbElkKSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgdmVyc2lvbkE6IHZlcnNpb24oaWQ6ICR2ZXJzaW9uQUlkKSB7XFxuICAgICAgICAgIC4uLlZpZXdlck1vZGVsVmVyc2lvbkNhcmRJdGVtXFxuICAgICAgICB9XFxuICAgICAgICB2ZXJzaW9uQjogdmVyc2lvbihpZDogJHZlcnNpb25CSWQpIHtcXG4gICAgICAgICAgLi4uVmlld2VyTW9kZWxWZXJzaW9uQ2FyZEl0ZW1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgVmlld2VyTG9hZGVkVGhyZWFkcyhcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkZmlsdGVyOiBQcm9qZWN0Q29tbWVudHNGaWx0ZXIhXFxuICAgICRjdXJzb3I6IFN0cmluZ1xcbiAgICAkbGltaXQ6IEludFxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIGNvbW1lbnRUaHJlYWRzKGZpbHRlcjogJGZpbHRlciwgY3Vyc29yOiAkY3Vyc29yLCBsaW1pdDogJGxpbWl0KSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICB0b3RhbEFyY2hpdmVkQ291bnRcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgLi4uVmlld2VyQ29tbWVudFRocmVhZFxcbiAgICAgICAgICAuLi5MaW5rYWJsZUNvbW1lbnRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgVmlld2VyTG9hZGVkVGhyZWFkcyhcXG4gICAgJHByb2plY3RJZDogU3RyaW5nIVxcbiAgICAkZmlsdGVyOiBQcm9qZWN0Q29tbWVudHNGaWx0ZXIhXFxuICAgICRjdXJzb3I6IFN0cmluZ1xcbiAgICAkbGltaXQ6IEludFxcbiAgKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIGNvbW1lbnRUaHJlYWRzKGZpbHRlcjogJGZpbHRlciwgY3Vyc29yOiAkY3Vyc29yLCBsaW1pdDogJGxpbWl0KSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICB0b3RhbEFyY2hpdmVkQ291bnRcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgLi4uVmlld2VyQ29tbWVudFRocmVhZFxcbiAgICAgICAgICAuLi5MaW5rYWJsZUNvbW1lbnRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgVmlld2VyUmF3UHJvamVjdE9iamVjdCgkcHJvamVjdElkOiBTdHJpbmchLCAkb2JqZWN0SWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHByb2plY3RJZCkge1xcbiAgICAgIGlkXFxuICAgICAgb2JqZWN0KGlkOiAkb2JqZWN0SWQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBkYXRhXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFZpZXdlclJhd1Byb2plY3RPYmplY3QoJHByb2plY3RJZDogU3RyaW5nISwgJG9iamVjdElkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIG9iamVjdChpZDogJG9iamVjdElkKSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgZGF0YVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBzdWJzY3JpcHRpb24gT25WaWV3ZXJVc2VyQWN0aXZpdHlCcm9hZGNhc3RlZChcXG4gICAgJHRhcmdldDogVmlld2VyVXBkYXRlVHJhY2tpbmdUYXJnZXQhXFxuICAgICRzZXNzaW9uSWQ6IFN0cmluZyFcXG4gICkge1xcbiAgICB2aWV3ZXJVc2VyQWN0aXZpdHlCcm9hZGNhc3RlZCh0YXJnZXQ6ICR0YXJnZXQsIHNlc3Npb25JZDogJHNlc3Npb25JZCkge1xcbiAgICAgIHVzZXJOYW1lXFxuICAgICAgdXNlcklkXFxuICAgICAgdXNlciB7XFxuICAgICAgICAuLi5MaW1pdGVkVXNlckF2YXRhclxcbiAgICAgIH1cXG4gICAgICBzdGF0ZVxcbiAgICAgIHN0YXR1c1xcbiAgICAgIHNlc3Npb25JZFxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHN1YnNjcmlwdGlvbiBPblZpZXdlclVzZXJBY3Rpdml0eUJyb2FkY2FzdGVkKFxcbiAgICAkdGFyZ2V0OiBWaWV3ZXJVcGRhdGVUcmFja2luZ1RhcmdldCFcXG4gICAgJHNlc3Npb25JZDogU3RyaW5nIVxcbiAgKSB7XFxuICAgIHZpZXdlclVzZXJBY3Rpdml0eUJyb2FkY2FzdGVkKHRhcmdldDogJHRhcmdldCwgc2Vzc2lvbklkOiAkc2Vzc2lvbklkKSB7XFxuICAgICAgdXNlck5hbWVcXG4gICAgICB1c2VySWRcXG4gICAgICB1c2VyIHtcXG4gICAgICAgIC4uLkxpbWl0ZWRVc2VyQXZhdGFyXFxuICAgICAgfVxcbiAgICAgIHN0YXRlXFxuICAgICAgc3RhdHVzXFxuICAgICAgc2Vzc2lvbklkXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgc3Vic2NyaXB0aW9uIE9uVmlld2VyQ29tbWVudHNVcGRhdGVkKCR0YXJnZXQ6IFZpZXdlclVwZGF0ZVRyYWNraW5nVGFyZ2V0ISkge1xcbiAgICBwcm9qZWN0Q29tbWVudHNVcGRhdGVkKHRhcmdldDogJHRhcmdldCkge1xcbiAgICAgIGlkXFxuICAgICAgdHlwZVxcbiAgICAgIGNvbW1lbnQge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHBhcmVudCB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICB9XFxuICAgICAgICAuLi5WaWV3ZXJDb21tZW50VGhyZWFkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHN1YnNjcmlwdGlvbiBPblZpZXdlckNvbW1lbnRzVXBkYXRlZCgkdGFyZ2V0OiBWaWV3ZXJVcGRhdGVUcmFja2luZ1RhcmdldCEpIHtcXG4gICAgcHJvamVjdENvbW1lbnRzVXBkYXRlZCh0YXJnZXQ6ICR0YXJnZXQpIHtcXG4gICAgICBpZFxcbiAgICAgIHR5cGVcXG4gICAgICBjb21tZW50IHtcXG4gICAgICAgIGlkXFxuICAgICAgICBwYXJlbnQge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgfVxcbiAgICAgICAgLi4uVmlld2VyQ29tbWVudFRocmVhZFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBMaW5rYWJsZUNvbW1lbnQgb24gQ29tbWVudCB7XFxuICAgIGlkXFxuICAgIHZpZXdlclJlc291cmNlcyB7XFxuICAgICAgbW9kZWxJZFxcbiAgICAgIHZlcnNpb25JZFxcbiAgICAgIG9iamVjdElkXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgTGlua2FibGVDb21tZW50IG9uIENvbW1lbnQge1xcbiAgICBpZFxcbiAgICB2aWV3ZXJSZXNvdXJjZXMge1xcbiAgICAgIG1vZGVsSWRcXG4gICAgICB2ZXJzaW9uSWRcXG4gICAgICBvYmplY3RJZFxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IEFjdGl2ZVdvcmtzcGFjZV9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBsb2dvXFxuICAgIHJvbGVcXG4gICAgc2x1Z1xcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBBY3RpdmVXb3Jrc3BhY2VfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgbG9nb1xcbiAgICByb2xlXFxuICAgIHNsdWdcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgRGlzY292ZXJhYmxlV29ya3NwYWNlX0xpbWl0ZWRXb3Jrc3BhY2Ugb24gTGltaXRlZFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgbG9nb1xcbiAgICBkZXNjcmlwdGlvblxcbiAgICBzbHVnXFxuICAgIGRpc2NvdmVyYWJpbGl0eUF1dG9Kb2luRW5hYmxlZFxcbiAgICB0ZWFtIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgICAgaXRlbXMge1xcbiAgICAgICAgdXNlciB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIG5hbWVcXG4gICAgICAgICAgYXZhdGFyXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICAgIGFkbWluVGVhbSB7XFxuICAgICAgdXNlciB7XFxuICAgICAgICBpZFxcbiAgICAgICAgbmFtZVxcbiAgICAgICAgYXZhdGFyXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IERpc2NvdmVyYWJsZVdvcmtzcGFjZV9MaW1pdGVkV29ya3NwYWNlIG9uIExpbWl0ZWRXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGxvZ29cXG4gICAgZGVzY3JpcHRpb25cXG4gICAgc2x1Z1xcbiAgICBkaXNjb3ZlcmFiaWxpdHlBdXRvSm9pbkVuYWJsZWRcXG4gICAgdGVhbSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICAgIGl0ZW1zIHtcXG4gICAgICAgIHVzZXIge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBuYW1lXFxuICAgICAgICAgIGF2YXRhclxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICBhZG1pblRlYW0ge1xcbiAgICAgIHVzZXIge1xcbiAgICAgICAgaWRcXG4gICAgICAgIG5hbWVcXG4gICAgICAgIGF2YXRhclxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VKb2luUmVxdWVzdHNfTGltaXRlZFdvcmtzcGFjZUpvaW5SZXF1ZXN0IG9uIExpbWl0ZWRXb3Jrc3BhY2VKb2luUmVxdWVzdCB7XFxuICAgIGlkXFxuICAgIHN0YXR1c1xcbiAgICB3b3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICAgIGxvZ29cXG4gICAgICBzbHVnXFxuICAgICAgZGlzY292ZXJhYmlsaXR5QXV0b0pvaW5FbmFibGVkXFxuICAgICAgYWRtaW5UZWFtIHtcXG4gICAgICAgIHVzZXIge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBuYW1lXFxuICAgICAgICAgIGF2YXRhclxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICB0ZWFtIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgdXNlciB7XFxuICAgICAgICAgICAgaWRcXG4gICAgICAgICAgICBuYW1lXFxuICAgICAgICAgICAgYXZhdGFyXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlSm9pblJlcXVlc3RzX0xpbWl0ZWRXb3Jrc3BhY2VKb2luUmVxdWVzdCBvbiBMaW1pdGVkV29ya3NwYWNlSm9pblJlcXVlc3Qge1xcbiAgICBpZFxcbiAgICBzdGF0dXNcXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgICBsb2dvXFxuICAgICAgc2x1Z1xcbiAgICAgIGRpc2NvdmVyYWJpbGl0eUF1dG9Kb2luRW5hYmxlZFxcbiAgICAgIGFkbWluVGVhbSB7XFxuICAgICAgICB1c2VyIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgbmFtZVxcbiAgICAgICAgICBhdmF0YXJcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgdGVhbSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIHVzZXIge1xcbiAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgbmFtZVxcbiAgICAgICAgICAgIGF2YXRhclxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZVBsYW5MaW1pdHNfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHNsdWdcXG4gICAgcGxhbiB7XFxuICAgICAgbmFtZVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZVBsYW5MaW1pdHNfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHNsdWdcXG4gICAgcGxhbiB7XFxuICAgICAgbmFtZVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFVzZVdvcmtzcGFjZUludml0ZU1hbmFnZXJfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvciBvbiBQZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yIHtcXG4gICAgaWRcXG4gICAgdG9rZW5cXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICAuLi5Xb3Jrc3BhY2VJbnZpdGVDYXJkX0xpbWl0ZWRXb3Jrc3BhY2VcXG4gICAgfVxcbiAgICB1c2VyIHtcXG4gICAgICBpZFxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFVzZVdvcmtzcGFjZUludml0ZU1hbmFnZXJfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvciBvbiBQZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yIHtcXG4gICAgaWRcXG4gICAgdG9rZW5cXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICAuLi5Xb3Jrc3BhY2VJbnZpdGVDYXJkX0xpbWl0ZWRXb3Jrc3BhY2VcXG4gICAgfVxcbiAgICB1c2VyIHtcXG4gICAgICBpZFxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZXNQbGFuX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBzbHVnXFxuICAgIHBsYW4ge1xcbiAgICAgIHN0YXR1c1xcbiAgICAgIGNyZWF0ZWRBdFxcbiAgICAgIG5hbWVcXG4gICAgICBwYXltZW50TWV0aG9kXFxuICAgICAgdXNhZ2Uge1xcbiAgICAgICAgcHJvamVjdENvdW50XFxuICAgICAgICBtb2RlbENvdW50XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHNlYXRzIHtcXG4gICAgICBlZGl0b3JzIHtcXG4gICAgICAgIGFzc2lnbmVkXFxuICAgICAgICBhdmFpbGFibGVcXG4gICAgICB9XFxuICAgICAgdmlld2VycyB7XFxuICAgICAgICBhc3NpZ25lZFxcbiAgICAgICAgYXZhaWxhYmxlXFxuICAgICAgfVxcbiAgICB9XFxuICAgIHN1YnNjcmlwdGlvbiB7XFxuICAgICAgYmlsbGluZ0ludGVydmFsXFxuICAgICAgY3VycmVudEJpbGxpbmdDeWNsZUVuZFxcbiAgICAgIGN1cnJlbmN5XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlc1BsYW5fV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHNsdWdcXG4gICAgcGxhbiB7XFxuICAgICAgc3RhdHVzXFxuICAgICAgY3JlYXRlZEF0XFxuICAgICAgbmFtZVxcbiAgICAgIHBheW1lbnRNZXRob2RcXG4gICAgICB1c2FnZSB7XFxuICAgICAgICBwcm9qZWN0Q291bnRcXG4gICAgICAgIG1vZGVsQ291bnRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgc2VhdHMge1xcbiAgICAgIGVkaXRvcnMge1xcbiAgICAgICAgYXNzaWduZWRcXG4gICAgICAgIGF2YWlsYWJsZVxcbiAgICAgIH1cXG4gICAgICB2aWV3ZXJzIHtcXG4gICAgICAgIGFzc2lnbmVkXFxuICAgICAgICBhdmFpbGFibGVcXG4gICAgICB9XFxuICAgIH1cXG4gICAgc3Vic2NyaXB0aW9uIHtcXG4gICAgICBiaWxsaW5nSW50ZXJ2YWxcXG4gICAgICBjdXJyZW50QmlsbGluZ0N5Y2xlRW5kXFxuICAgICAgY3VycmVuY3lcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICAgICAgc3Vic2NyaXB0aW9uIE9uV29ya3NwYWNlUHJvamVjdHNVcGRhdGUoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgICAgIHdvcmtzcGFjZVByb2plY3RzVXBkYXRlZCh3b3Jrc3BhY2VJZDogbnVsbCwgd29ya3NwYWNlU2x1ZzogJHNsdWcpIHtcXG4gICAgICAgICAgcHJvamVjdElkXFxuICAgICAgICAgIHdvcmtzcGFjZUlkXFxuICAgICAgICAgIHR5cGVcXG4gICAgICAgICAgcHJvamVjdCB7XFxuICAgICAgICAgICAgLi4uUHJvamVjdERhc2hib2FyZEl0ZW1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gICAgICBzdWJzY3JpcHRpb24gT25Xb3Jrc3BhY2VQcm9qZWN0c1VwZGF0ZSgkc2x1ZzogU3RyaW5nISkge1xcbiAgICAgICAgd29ya3NwYWNlUHJvamVjdHNVcGRhdGVkKHdvcmtzcGFjZUlkOiBudWxsLCB3b3Jrc3BhY2VTbHVnOiAkc2x1Zykge1xcbiAgICAgICAgICBwcm9qZWN0SWRcXG4gICAgICAgICAgd29ya3NwYWNlSWRcXG4gICAgICAgICAgdHlwZVxcbiAgICAgICAgICBwcm9qZWN0IHtcXG4gICAgICAgICAgICAuLi5Qcm9qZWN0RGFzaGJvYXJkSXRlbVxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICBcIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgVXNlQ2FuQ3JlYXRlV29ya3NwYWNlUHJvamVjdF9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkNyZWF0ZVByb2plY3Qge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBVc2VDYW5DcmVhdGVXb3Jrc3BhY2VQcm9qZWN0X1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuQ3JlYXRlUHJvamVjdCB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFVzZUNhbk1vdmVQcm9qZWN0SW50b1dvcmtzcGFjZV9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbk1vdmVQcm9qZWN0VG9Xb3Jrc3BhY2Uge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBVc2VDYW5Nb3ZlUHJvamVjdEludG9Xb3Jrc3BhY2VfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5Nb3ZlUHJvamVjdFRvV29ya3NwYWNlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgVXNlQ2FuTW92ZVByb2plY3RJbnRvV29ya3NwYWNlX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5Nb3ZlVG9Xb3Jrc3BhY2Uge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBVc2VDYW5Nb3ZlUHJvamVjdEludG9Xb3Jrc3BhY2VfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbk1vdmVUb1dvcmtzcGFjZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZUhhc0N1c3RvbURhdGFSZXNpZGVuY3lfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIGRlZmF1bHRSZWdpb24ge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZUhhc0N1c3RvbURhdGFSZXNpZGVuY3lfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIGRlZmF1bHRSZWdpb24ge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IENoZWNrUHJvamVjdFdvcmtzcGFjZURhdGFSZXNpZGVuY3koJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICB3b3Jrc3BhY2Uge1xcbiAgICAgICAgLi4uV29ya3NwYWNlSGFzQ3VzdG9tRGF0YVJlc2lkZW5jeV9Xb3Jrc3BhY2VcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgQ2hlY2tQcm9qZWN0V29ya3NwYWNlRGF0YVJlc2lkZW5jeSgkcHJvamVjdElkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHdvcmtzcGFjZSB7XFxuICAgICAgICAuLi5Xb3Jrc3BhY2VIYXNDdXN0b21EYXRhUmVzaWRlbmN5X1dvcmtzcGFjZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICAgIGZyYWdtZW50IFdvcmtzcGFjZVNzb1N0YXR1c19Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIHNzbyB7XFxuICAgICAgICBwcm92aWRlciB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIG5hbWVcXG4gICAgICAgICAgY2xpZW50SWRcXG4gICAgICAgICAgaXNzdWVyVXJsXFxuICAgICAgICB9XFxuICAgICAgICBzZXNzaW9uIHtcXG4gICAgICAgICAgdmFsaWRVbnRpbFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gICAgZnJhZ21lbnQgV29ya3NwYWNlU3NvU3RhdHVzX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICAgIGlkXFxuICAgICAgc3NvIHtcXG4gICAgICAgIHByb3ZpZGVyIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgbmFtZVxcbiAgICAgICAgICBjbGllbnRJZFxcbiAgICAgICAgICBpc3N1ZXJVcmxcXG4gICAgICAgIH1cXG4gICAgICAgIHNlc3Npb24ge1xcbiAgICAgICAgICB2YWxpZFVudGlsXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICBcIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgICBmcmFnbWVudCBXb3Jrc3BhY2VTc29TdGF0dXNfVXNlciBvbiBVc2VyIHtcXG4gICAgICBleHBpcmVkU3NvU2Vzc2lvbnMge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHNsdWdcXG4gICAgICB9XFxuICAgIH1cXG4gIFwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICAgIGZyYWdtZW50IFdvcmtzcGFjZVNzb1N0YXR1c19Vc2VyIG9uIFVzZXIge1xcbiAgICAgIGV4cGlyZWRTc29TZXNzaW9ucyB7XFxuICAgICAgICBpZFxcbiAgICAgICAgc2x1Z1xcbiAgICAgIH1cXG4gICAgfVxcbiAgXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZVVzYWdlX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBzbHVnXFxuICAgIHBsYW4ge1xcbiAgICAgIHVzYWdlIHtcXG4gICAgICAgIHByb2plY3RDb3VudFxcbiAgICAgICAgbW9kZWxDb3VudFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICB0ZWFtIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgdGVhbUJ5Um9sZSB7XFxuICAgICAgYWRtaW5zIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICB9XFxuICAgICAgbWVtYmVycyB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICAgIGd1ZXN0cyB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZVVzYWdlX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBzbHVnXFxuICAgIHBsYW4ge1xcbiAgICAgIHVzYWdlIHtcXG4gICAgICAgIHByb2plY3RDb3VudFxcbiAgICAgICAgbW9kZWxDb3VudFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICB0ZWFtIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgdGVhbUJ5Um9sZSB7XFxuICAgICAgYWRtaW5zIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICB9XFxuICAgICAgbWVtYmVycyB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICAgIGd1ZXN0cyB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIFVwZGF0ZVJvbGUoJGlucHV0OiBXb3Jrc3BhY2VSb2xlVXBkYXRlSW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgdXBkYXRlUm9sZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICB0ZWFtIHtcXG4gICAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgcm9sZVxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIFVwZGF0ZVJvbGUoJGlucHV0OiBXb3Jrc3BhY2VSb2xlVXBkYXRlSW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgdXBkYXRlUm9sZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICB0ZWFtIHtcXG4gICAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgcm9sZVxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIFdvcmtzcGFjZXNVcGRhdGVTZWF0VHlwZSgkaW5wdXQ6IFdvcmtzcGFjZVVwZGF0ZVNlYXRUeXBlSW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgdXBkYXRlU2VhdFR5cGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgdGVhbSB7XFxuICAgICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgICBpZFxcbiAgICAgICAgICAgIHNlYXRUeXBlXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gV29ya3NwYWNlc1VwZGF0ZVNlYXRUeXBlKCRpbnB1dDogV29ya3NwYWNlVXBkYXRlU2VhdFR5cGVJbnB1dCEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICB1cGRhdGVTZWF0VHlwZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICB0ZWFtIHtcXG4gICAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAgIGlkXFxuICAgICAgICAgICAgc2VhdFR5cGVcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBJbnZpdGVUb1dvcmtzcGFjZShcXG4gICAgJHdvcmtzcGFjZUlkOiBTdHJpbmchXFxuICAgICRpbnB1dDogW1dvcmtzcGFjZUludml0ZUNyZWF0ZUlucHV0IV0hXFxuICApIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICBpbnZpdGVzIHtcXG4gICAgICAgIGJhdGNoQ3JlYXRlKHdvcmtzcGFjZUlkOiAkd29ya3NwYWNlSWQsIGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgaW52aXRlZFRlYW0ge1xcbiAgICAgICAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNJbnZpdGVzVGFibGVfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvclxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIEludml0ZVRvV29ya3NwYWNlKFxcbiAgICAkd29ya3NwYWNlSWQ6IFN0cmluZyFcXG4gICAgJGlucHV0OiBbV29ya3NwYWNlSW52aXRlQ3JlYXRlSW5wdXQhXSFcXG4gICkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIGludml0ZXMge1xcbiAgICAgICAgYmF0Y2hDcmVhdGUod29ya3NwYWNlSWQ6ICR3b3Jrc3BhY2VJZCwgaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgICBpbnZpdGVkVGVhbSB7XFxuICAgICAgICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzTWVtYmVyc0ludml0ZXNUYWJsZV9QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gQ3JlYXRlV29ya3NwYWNlKCRpbnB1dDogV29ya3NwYWNlQ3JlYXRlSW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgY3JlYXRlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5TZXR0aW5nc1NpZGViYXJfV29ya3NwYWNlXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIENyZWF0ZVdvcmtzcGFjZSgkaW5wdXQ6IFdvcmtzcGFjZUNyZWF0ZUlucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIGNyZWF0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgLi4uU2V0dGluZ3NTaWRlYmFyX1dvcmtzcGFjZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBQcm9jZXNzV29ya3NwYWNlSW52aXRlKCRpbnB1dDogV29ya3NwYWNlSW52aXRlVXNlSW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgaW52aXRlcyB7XFxuICAgICAgICB1c2UoaW5wdXQ6ICRpbnB1dClcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gUHJvY2Vzc1dvcmtzcGFjZUludml0ZSgkaW5wdXQ6IFdvcmtzcGFjZUludml0ZVVzZUlucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIGludml0ZXMge1xcbiAgICAgICAgdXNlKGlucHV0OiAkaW5wdXQpXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIFNldERlZmF1bHRXb3Jrc3BhY2VSZWdpb24oJHdvcmtzcGFjZUlkOiBTdHJpbmchLCAkcmVnaW9uS2V5OiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgc2V0RGVmYXVsdFJlZ2lvbih3b3Jrc3BhY2VJZDogJHdvcmtzcGFjZUlkLCByZWdpb25LZXk6ICRyZWdpb25LZXkpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBkZWZhdWx0UmVnaW9uIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzUmVnaW9uc1NlbGVjdF9TZXJ2ZXJSZWdpb25JdGVtXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIFNldERlZmF1bHRXb3Jrc3BhY2VSZWdpb24oJHdvcmtzcGFjZUlkOiBTdHJpbmchLCAkcmVnaW9uS2V5OiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgc2V0RGVmYXVsdFJlZ2lvbih3b3Jrc3BhY2VJZDogJHdvcmtzcGFjZUlkLCByZWdpb25LZXk6ICRyZWdpb25LZXkpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBkZWZhdWx0UmVnaW9uIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzUmVnaW9uc1NlbGVjdF9TZXJ2ZXJSZWdpb25JdGVtXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIG11dGF0aW9uIERlbGV0ZVdvcmtzcGFjZVNzb1Byb3ZpZGVyKCR3b3Jrc3BhY2VJZDogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIGRlbGV0ZVNzb1Byb3ZpZGVyKHdvcmtzcGFjZUlkOiAkd29ya3NwYWNlSWQpXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gRGVsZXRlV29ya3NwYWNlU3NvUHJvdmlkZXIoJHdvcmtzcGFjZUlkOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgZGVsZXRlU3NvUHJvdmlkZXIod29ya3NwYWNlSWQ6ICR3b3Jrc3BhY2VJZClcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBTZXRXb3Jrc3BhY2VDcmVhdGlvblN0YXRlKCRpbnB1dDogV29ya3NwYWNlQ3JlYXRpb25TdGF0ZUlucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIHVwZGF0ZUNyZWF0aW9uU3RhdGUoaW5wdXQ6ICRpbnB1dClcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBtdXRhdGlvbiBTZXRXb3Jrc3BhY2VDcmVhdGlvblN0YXRlKCRpbnB1dDogV29ya3NwYWNlQ3JlYXRpb25TdGF0ZUlucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIHVwZGF0ZUNyZWF0aW9uU3RhdGUoaW5wdXQ6ICRpbnB1dClcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBXb3Jrc3BhY2VVcGRhdGVEb21haW5Qcm90ZWN0aW9uTXV0YXRpb24oJGlucHV0OiBXb3Jrc3BhY2VVcGRhdGVJbnB1dCEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICB1cGRhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGRvbWFpbkJhc2VkTWVtYmVyc2hpcFByb3RlY3Rpb25FbmFibGVkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIFdvcmtzcGFjZVVwZGF0ZURvbWFpblByb3RlY3Rpb25NdXRhdGlvbigkaW5wdXQ6IFdvcmtzcGFjZVVwZGF0ZUlucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIHVwZGF0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgZG9tYWluQmFzZWRNZW1iZXJzaGlwUHJvdGVjdGlvbkVuYWJsZWRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gV29ya3NwYWNlVXBkYXRlRGlzY292ZXJhYmlsaXR5TXV0YXRpb24oJGlucHV0OiBXb3Jrc3BhY2VVcGRhdGVJbnB1dCEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICB1cGRhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGRpc2NvdmVyYWJpbGl0eUVuYWJsZWRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gV29ya3NwYWNlVXBkYXRlRGlzY292ZXJhYmlsaXR5TXV0YXRpb24oJGlucHV0OiBXb3Jrc3BhY2VVcGRhdGVJbnB1dCEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICB1cGRhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGRpc2NvdmVyYWJpbGl0eUVuYWJsZWRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gQXBwcm92ZVdvcmtzcGFjZUpvaW5SZXF1ZXN0KCRpbnB1dDogQXBwcm92ZVdvcmtzcGFjZUpvaW5SZXF1ZXN0SW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZUpvaW5SZXF1ZXN0TXV0YXRpb25zIHtcXG4gICAgICBhcHByb3ZlKGlucHV0OiAkaW5wdXQpXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gQXBwcm92ZVdvcmtzcGFjZUpvaW5SZXF1ZXN0KCRpbnB1dDogQXBwcm92ZVdvcmtzcGFjZUpvaW5SZXF1ZXN0SW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZUpvaW5SZXF1ZXN0TXV0YXRpb25zIHtcXG4gICAgICBhcHByb3ZlKGlucHV0OiAkaW5wdXQpXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gRGVueVdvcmtzcGFjZUpvaW5SZXF1ZXN0KCRpbnB1dDogRGVueVdvcmtzcGFjZUpvaW5SZXF1ZXN0SW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZUpvaW5SZXF1ZXN0TXV0YXRpb25zIHtcXG4gICAgICBkZW55KGlucHV0OiAkaW5wdXQpXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gRGVueVdvcmtzcGFjZUpvaW5SZXF1ZXN0KCRpbnB1dDogRGVueVdvcmtzcGFjZUpvaW5SZXF1ZXN0SW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZUpvaW5SZXF1ZXN0TXV0YXRpb25zIHtcXG4gICAgICBkZW55KGlucHV0OiAkaW5wdXQpXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gUmVxdWVzdFRvSm9pbldvcmtzcGFjZSgkaW5wdXQ6IFdvcmtzcGFjZVJlcXVlc3RUb0pvaW5JbnB1dCEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICByZXF1ZXN0VG9Kb2luKGlucHV0OiAkaW5wdXQpXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gUmVxdWVzdFRvSm9pbldvcmtzcGFjZSgkaW5wdXQ6IFdvcmtzcGFjZVJlcXVlc3RUb0pvaW5JbnB1dCEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICByZXF1ZXN0VG9Kb2luKGlucHV0OiAkaW5wdXQpXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gRGlzbWlzc0Rpc2NvdmVyYWJsZVdvcmtzcGFjZSgkaW5wdXQ6IFdvcmtzcGFjZURpc21pc3NJbnB1dCEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICBkaXNtaXNzKGlucHV0OiAkaW5wdXQpXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgbXV0YXRpb24gRGlzbWlzc0Rpc2NvdmVyYWJsZVdvcmtzcGFjZSgkaW5wdXQ6IFdvcmtzcGFjZURpc21pc3NJbnB1dCEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICBkaXNtaXNzKGlucHV0OiAkaW5wdXQpXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gV29ya3NwYWNlVXBkYXRlQXV0b0pvaW5NdXRhdGlvbigkaW5wdXQ6IFdvcmtzcGFjZVVwZGF0ZUlucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIHVwZGF0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgZGlzY292ZXJhYmlsaXR5QXV0b0pvaW5FbmFibGVkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIFdvcmtzcGFjZVVwZGF0ZUF1dG9Kb2luTXV0YXRpb24oJGlucHV0OiBXb3Jrc3BhY2VVcGRhdGVJbnB1dCEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICB1cGRhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGRpc2NvdmVyYWJpbGl0eUF1dG9Kb2luRW5hYmxlZFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBtdXRhdGlvbiBXb3Jrc3BhY2VVcGRhdGVEZWZhdWx0U2VhdFR5cGVNdXRhdGlvbigkaW5wdXQ6IFdvcmtzcGFjZVVwZGF0ZUlucHV0ISkge1xcbiAgICB3b3Jrc3BhY2VNdXRhdGlvbnMge1xcbiAgICAgIHVwZGF0ZShpbnB1dDogJGlucHV0KSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgZGVmYXVsdFNlYXRUeXBlXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIFdvcmtzcGFjZVVwZGF0ZURlZmF1bHRTZWF0VHlwZU11dGF0aW9uKCRpbnB1dDogV29ya3NwYWNlVXBkYXRlSW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgdXBkYXRlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBkZWZhdWx0U2VhdFR5cGVcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgbXV0YXRpb24gV29ya3NwYWNlVXBkYXRlRXhjbHVzaXZlTXV0YXRpb24oJGlucHV0OiBXb3Jrc3BhY2VVcGRhdGVJbnB1dCEpIHtcXG4gICAgd29ya3NwYWNlTXV0YXRpb25zIHtcXG4gICAgICB1cGRhdGUoaW5wdXQ6ICRpbnB1dCkge1xcbiAgICAgICAgaWRcXG4gICAgICAgIGlzRXhjbHVzaXZlXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIG11dGF0aW9uIFdvcmtzcGFjZVVwZGF0ZUV4Y2x1c2l2ZU11dGF0aW9uKCRpbnB1dDogV29ya3NwYWNlVXBkYXRlSW5wdXQhKSB7XFxuICAgIHdvcmtzcGFjZU11dGF0aW9ucyB7XFxuICAgICAgdXBkYXRlKGlucHV0OiAkaW5wdXQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBpc0V4Y2x1c2l2ZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBXb3Jrc3BhY2UoJGZlYXR1cmVOYW1lOiBXb3Jrc3BhY2VGZWF0dXJlTmFtZSEsICR3b3Jrc3BhY2VJZDogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2UoaWQ6ICR3b3Jrc3BhY2VJZCkge1xcbiAgICAgIGhhc0FjY2Vzc1RvRmVhdHVyZShmZWF0dXJlTmFtZTogJGZlYXR1cmVOYW1lKVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFdvcmtzcGFjZSgkZmVhdHVyZU5hbWU6IFdvcmtzcGFjZUZlYXR1cmVOYW1lISwgJHdvcmtzcGFjZUlkOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZShpZDogJHdvcmtzcGFjZUlkKSB7XFxuICAgICAgaGFzQWNjZXNzVG9GZWF0dXJlKGZlYXR1cmVOYW1lOiAkZmVhdHVyZU5hbWUpXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgV29ya3NwYWNlQWNjZXNzQ2hlY2soJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgaWRcXG4gICAgICBzbHVnXFxuICAgIH1cXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgaWRcXG4gICAgICBhY3RpdmVXb3Jrc3BhY2Uge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHNsdWdcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgV29ya3NwYWNlQWNjZXNzQ2hlY2soJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgaWRcXG4gICAgICBzbHVnXFxuICAgIH1cXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgaWRcXG4gICAgICBhY3RpdmVXb3Jrc3BhY2Uge1xcbiAgICAgICAgaWRcXG4gICAgICAgIHNsdWdcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgV29ya3NwYWNlUGFnZVF1ZXJ5KFxcbiAgICAkd29ya3NwYWNlU2x1ZzogU3RyaW5nIVxcbiAgICAkaW52aXRlc0ZpbHRlcjogUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvcnNGaWx0ZXJcXG4gICkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHdvcmtzcGFjZVNsdWcpIHtcXG4gICAgICAuLi5Xb3Jrc3BhY2VQYWdlX1dvcmtzcGFjZVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFdvcmtzcGFjZVBhZ2VRdWVyeShcXG4gICAgJHdvcmtzcGFjZVNsdWc6IFN0cmluZyFcXG4gICAgJGludml0ZXNGaWx0ZXI6IFBlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3JzRmlsdGVyXFxuICApIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICR3b3Jrc3BhY2VTbHVnKSB7XFxuICAgICAgLi4uV29ya3NwYWNlUGFnZV9Xb3Jrc3BhY2VcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBXb3Jrc3BhY2VQcm9qZWN0c1F1ZXJ5KFxcbiAgICAkd29ya3NwYWNlU2x1ZzogU3RyaW5nIVxcbiAgICAkZmlsdGVyOiBXb3Jrc3BhY2VQcm9qZWN0c0ZpbHRlclxcbiAgICAkY3Vyc29yOiBTdHJpbmdcXG4gICkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHdvcmtzcGFjZVNsdWcpIHtcXG4gICAgICBpZFxcbiAgICAgIHByb2plY3RzKGZpbHRlcjogJGZpbHRlciwgY3Vyc29yOiAkY3Vyc29yLCBsaW1pdDogMTApIHtcXG4gICAgICAgIC4uLldvcmtzcGFjZURhc2hib2FyZFByb2plY3RMaXN0X1Byb2plY3RDb2xsZWN0aW9uXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFdvcmtzcGFjZVByb2plY3RzUXVlcnkoXFxuICAgICR3b3Jrc3BhY2VTbHVnOiBTdHJpbmchXFxuICAgICRmaWx0ZXI6IFdvcmtzcGFjZVByb2plY3RzRmlsdGVyXFxuICAgICRjdXJzb3I6IFN0cmluZ1xcbiAgKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkd29ya3NwYWNlU2x1Zykge1xcbiAgICAgIGlkXFxuICAgICAgcHJvamVjdHMoZmlsdGVyOiAkZmlsdGVyLCBjdXJzb3I6ICRjdXJzb3IsIGxpbWl0OiAxMCkge1xcbiAgICAgICAgLi4uV29ya3NwYWNlRGFzaGJvYXJkUHJvamVjdExpc3RfUHJvamVjdENvbGxlY3Rpb25cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgV29ya3NwYWNlRnVuY3Rpb25zUXVlcnkoJHdvcmtzcGFjZVNsdWc6IFN0cmluZyEpIHtcXG4gICAgLi4uQXV0b21hdGVGdW5jdGlvbnNQYWdlSGVhZGVyX1F1ZXJ5XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkd29ya3NwYWNlU2x1Zykge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICAgIGF1dG9tYXRlRnVuY3Rpb25zIHtcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uQXV0b21hdGlvbnNGdW5jdGlvbnNDYXJkX0F1dG9tYXRlRnVuY3Rpb25cXG4gICAgICAgICAgLi4uQXV0b21hdGVBdXRvbWF0aW9uQ3JlYXRlRGlhbG9nX0F1dG9tYXRlRnVuY3Rpb25cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgV29ya3NwYWNlRnVuY3Rpb25zUXVlcnkoJHdvcmtzcGFjZVNsdWc6IFN0cmluZyEpIHtcXG4gICAgLi4uQXV0b21hdGVGdW5jdGlvbnNQYWdlSGVhZGVyX1F1ZXJ5XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkd29ya3NwYWNlU2x1Zykge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICAgIGF1dG9tYXRlRnVuY3Rpb25zIHtcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgLi4uQXV0b21hdGlvbnNGdW5jdGlvbnNDYXJkX0F1dG9tYXRlRnVuY3Rpb25cXG4gICAgICAgICAgLi4uQXV0b21hdGVBdXRvbWF0aW9uQ3JlYXRlRGlhbG9nX0F1dG9tYXRlRnVuY3Rpb25cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgV29ya3NwYWNlSW52aXRlKFxcbiAgICAkd29ya3NwYWNlSWQ6IFN0cmluZ1xcbiAgICAkdG9rZW46IFN0cmluZ1xcbiAgICAkb3B0aW9uczogV29ya3NwYWNlSW52aXRlTG9va3VwT3B0aW9uc1xcbiAgKSB7XFxuICAgIHdvcmtzcGFjZUludml0ZSh3b3Jrc3BhY2VJZDogJHdvcmtzcGFjZUlkLCB0b2tlbjogJHRva2VuLCBvcHRpb25zOiAkb3B0aW9ucykge1xcbiAgICAgIC4uLldvcmtzcGFjZUludml0ZUJhbm5lcl9QZW5kaW5nV29ya3NwYWNlQ29sbGFib3JhdG9yXFxuICAgICAgLi4uV29ya3NwYWNlSW52aXRlQmxvY2tfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvclxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFdvcmtzcGFjZUludml0ZShcXG4gICAgJHdvcmtzcGFjZUlkOiBTdHJpbmdcXG4gICAgJHRva2VuOiBTdHJpbmdcXG4gICAgJG9wdGlvbnM6IFdvcmtzcGFjZUludml0ZUxvb2t1cE9wdGlvbnNcXG4gICkge1xcbiAgICB3b3Jrc3BhY2VJbnZpdGUod29ya3NwYWNlSWQ6ICR3b3Jrc3BhY2VJZCwgdG9rZW46ICR0b2tlbiwgb3B0aW9uczogJG9wdGlvbnMpIHtcXG4gICAgICAuLi5Xb3Jrc3BhY2VJbnZpdGVCYW5uZXJfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvclxcbiAgICAgIC4uLldvcmtzcGFjZUludml0ZUJsb2NrX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3JcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBWYWxpZGF0ZVdvcmtzcGFjZVNsdWcoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgdmFsaWRhdGVXb3Jrc3BhY2VTbHVnKHNsdWc6ICRzbHVnKVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBWYWxpZGF0ZVdvcmtzcGFjZVNsdWcoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgdmFsaWRhdGVXb3Jrc3BhY2VTbHVnKHNsdWc6ICRzbHVnKVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBXb3Jrc3BhY2VTc29CeUVtYWlsKCRlbWFpbDogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2VTc29CeUVtYWlsKGVtYWlsOiAkZW1haWwpIHtcXG4gICAgICAuLi5BdXRoU3NvTG9naW5fV29ya3NwYWNlXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgV29ya3NwYWNlU3NvQnlFbWFpbCgkZW1haWw6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlU3NvQnlFbWFpbChlbWFpbDogJGVtYWlsKSB7XFxuICAgICAgLi4uQXV0aFNzb0xvZ2luX1dvcmtzcGFjZVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFdvcmtzcGFjZVNzb0NoZWNrKCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIC4uLldvcmtzcGFjZVNzb1N0YXR1c19Xb3Jrc3BhY2VcXG4gICAgfVxcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICAuLi5Xb3Jrc3BhY2VTc29TdGF0dXNfVXNlclxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFdvcmtzcGFjZVNzb0NoZWNrKCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIC4uLldvcmtzcGFjZVNzb1N0YXR1c19Xb3Jrc3BhY2VcXG4gICAgfVxcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICAuLi5Xb3Jrc3BhY2VTc29TdGF0dXNfVXNlclxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFdvcmtzcGFjZVdpemFyZCgkd29ya3NwYWNlSWQ6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlKGlkOiAkd29ya3NwYWNlSWQpIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLldvcmtzcGFjZVdpemFyZF9Xb3Jrc3BhY2VcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBXb3Jrc3BhY2VXaXphcmQoJHdvcmtzcGFjZUlkOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZShpZDogJHdvcmtzcGFjZUlkKSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5Xb3Jrc3BhY2VXaXphcmRfV29ya3NwYWNlXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgV29ya3NwYWNlV2l6YXJkUmVnaW9uIHtcXG4gICAgc2VydmVySW5mbyB7XFxuICAgICAgLi4uV29ya3NwYWNlV2l6YXJkU3RlcFJlZ2lvbl9TZXJ2ZXJJbmZvXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgV29ya3NwYWNlV2l6YXJkUmVnaW9uIHtcXG4gICAgc2VydmVySW5mbyB7XFxuICAgICAgLi4uV29ya3NwYWNlV2l6YXJkU3RlcFJlZ2lvbl9TZXJ2ZXJJbmZvXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgRGlzY292ZXJhYmxlV29ya3NwYWNlcyB7XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIGlkXFxuICAgICAgZGlzY292ZXJhYmxlV29ya3NwYWNlcyB7XFxuICAgICAgICAuLi5EaXNjb3ZlcmFibGVXb3Jrc3BhY2VfTGltaXRlZFdvcmtzcGFjZVxcbiAgICAgIH1cXG4gICAgICB3b3Jrc3BhY2VKb2luUmVxdWVzdHMge1xcbiAgICAgICAgaXRlbXMge1xcbiAgICAgICAgICAuLi5Xb3Jrc3BhY2VKb2luUmVxdWVzdHNfTGltaXRlZFdvcmtzcGFjZUpvaW5SZXF1ZXN0XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IERpc2NvdmVyYWJsZVdvcmtzcGFjZXMge1xcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICBpZFxcbiAgICAgIGRpc2NvdmVyYWJsZVdvcmtzcGFjZXMge1xcbiAgICAgICAgLi4uRGlzY292ZXJhYmxlV29ya3NwYWNlX0xpbWl0ZWRXb3Jrc3BhY2VcXG4gICAgICB9XFxuICAgICAgd29ya3NwYWNlSm9pblJlcXVlc3RzIHtcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgLi4uV29ya3NwYWNlSm9pblJlcXVlc3RzX0xpbWl0ZWRXb3Jrc3BhY2VKb2luUmVxdWVzdFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBXb3Jrc3BhY2VQbGFuKCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIC4uLldvcmtzcGFjZXNQbGFuX1dvcmtzcGFjZVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFdvcmtzcGFjZVBsYW4oJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgLi4uV29ya3NwYWNlc1BsYW5fV29ya3NwYWNlXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgYWN0aXZlV29ya3NwYWNlKCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIC4uLkFjdGl2ZVdvcmtzcGFjZV9Xb3Jrc3BhY2VcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBhY3RpdmVXb3Jrc3BhY2UoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgLi4uQWN0aXZlV29ya3NwYWNlX1dvcmtzcGFjZVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFdvcmtzcGFjZUxhc3RBZG1pbkNoZWNrKCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIHRlYW1CeVJvbGUge1xcbiAgICAgICAgYWRtaW5zIHtcXG4gICAgICAgICAgdG90YWxDb3VudFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBXb3Jrc3BhY2VMYXN0QWRtaW5DaGVjaygkc2x1ZzogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2VCeVNsdWcoc2x1ZzogJHNsdWcpIHtcXG4gICAgICB0ZWFtQnlSb2xlIHtcXG4gICAgICAgIGFkbWlucyB7XFxuICAgICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgV29ya3NwYWNlTGltaXRzKCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIC4uLldvcmtzcGFjZVBsYW5MaW1pdHNfV29ya3NwYWNlXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgV29ya3NwYWNlTGltaXRzKCRzbHVnOiBTdHJpbmchKSB7XFxuICAgIHdvcmtzcGFjZUJ5U2x1ZyhzbHVnOiAkc2x1Zykge1xcbiAgICAgIC4uLldvcmtzcGFjZVBsYW5MaW1pdHNfV29ya3NwYWNlXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgV29ya3NwYWNlVXNhZ2UoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgLi4uV29ya3NwYWNlVXNhZ2VfV29ya3NwYWNlXFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgV29ya3NwYWNlVXNhZ2UoJHNsdWc6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICRzbHVnKSB7XFxuICAgICAgLi4uV29ya3NwYWNlVXNhZ2VfV29ya3NwYWNlXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyUHJvamVjdCgkcHJvamVjdElkOiBTdHJpbmchLCAkd29ya3NwYWNlSWQ6IFN0cmluZykge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgLi4uV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1Byb2plY3RcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBXb3Jrc3BhY2VNb3ZlUHJvamVjdE1hbmFnZXJQcm9qZWN0KCRwcm9qZWN0SWQ6IFN0cmluZyEsICR3b3Jrc3BhY2VJZDogU3RyaW5nKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICAuLi5Xb3Jrc3BhY2VNb3ZlUHJvamVjdE1hbmFnZXJfUHJvamVjdFxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFdvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlcldvcmtzcGFjZShcXG4gICAgJHdvcmtzcGFjZVNsdWc6IFN0cmluZyFcXG4gICAgJHByb2plY3RJZDogU3RyaW5nXFxuICApIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICR3b3Jrc3BhY2VTbHVnKSB7XFxuICAgICAgLi4uV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1dvcmtzcGFjZVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFdvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlcldvcmtzcGFjZShcXG4gICAgJHdvcmtzcGFjZVNsdWc6IFN0cmluZyFcXG4gICAgJHByb2plY3RJZDogU3RyaW5nXFxuICApIHtcXG4gICAgd29ya3NwYWNlQnlTbHVnKHNsdWc6ICR3b3Jrc3BhY2VTbHVnKSB7XFxuICAgICAgLi4uV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1dvcmtzcGFjZVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFdvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlclVzZXIoXFxuICAgICRjdXJzb3I6IFN0cmluZ1xcbiAgICAkZmlsdGVyOiBVc2VyUHJvamVjdHNGaWx0ZXJcXG4gICAgJHByb2plY3RJZDogU3RyaW5nXFxuICAgICRzb3J0Qnk6IFtTdHJpbmchXVxcbiAgICAkd29ya3NwYWNlSWQ6IFN0cmluZ1xcbiAgKSB7XFxuICAgIGFjdGl2ZVVzZXIge1xcbiAgICAgIC4uLldvcmtzcGFjZU1vdmVQcm9qZWN0U2VsZWN0V29ya3NwYWNlX1VzZXJcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBXb3Jrc3BhY2VNb3ZlUHJvamVjdE1hbmFnZXJVc2VyKFxcbiAgICAkY3Vyc29yOiBTdHJpbmdcXG4gICAgJGZpbHRlcjogVXNlclByb2plY3RzRmlsdGVyXFxuICAgICRwcm9qZWN0SWQ6IFN0cmluZ1xcbiAgICAkc29ydEJ5OiBbU3RyaW5nIV1cXG4gICAgJHdvcmtzcGFjZUlkOiBTdHJpbmdcXG4gICkge1xcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICAuLi5Xb3Jrc3BhY2VNb3ZlUHJvamVjdFNlbGVjdFdvcmtzcGFjZV9Vc2VyXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgVXNlQ2FuQ3JlYXRlV29ya3NwYWNlIHtcXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgLi4uVXNlQ2FuQ3JlYXRlV29ya3NwYWNlX1VzZXJcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBxdWVyeSBVc2VDYW5DcmVhdGVXb3Jrc3BhY2Uge1xcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICAuLi5Vc2VDYW5DcmVhdGVXb3Jrc3BhY2VfVXNlclxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHN1YnNjcmlwdGlvbiBvbldvcmtzcGFjZVVwZGF0ZWQoXFxuICAgICR3b3Jrc3BhY2VJZDogU3RyaW5nXFxuICAgICR3b3Jrc3BhY2VTbHVnOiBTdHJpbmdcXG4gICAgJGludml0ZXNGaWx0ZXI6IFBlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3JzRmlsdGVyXFxuICApIHtcXG4gICAgd29ya3NwYWNlVXBkYXRlZCh3b3Jrc3BhY2VJZDogJHdvcmtzcGFjZUlkLCB3b3Jrc3BhY2VTbHVnOiAkd29ya3NwYWNlU2x1Zykge1xcbiAgICAgIGlkXFxuICAgICAgd29ya3NwYWNlIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5Xb3Jrc3BhY2VEYXNoYm9hcmRfV29ya3NwYWNlXFxuICAgICAgICAuLi5Xb3Jrc3BhY2VEYXNoYm9hcmRQcm9qZWN0TGlzdF9Xb3Jrc3BhY2VcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgc3Vic2NyaXB0aW9uIG9uV29ya3NwYWNlVXBkYXRlZChcXG4gICAgJHdvcmtzcGFjZUlkOiBTdHJpbmdcXG4gICAgJHdvcmtzcGFjZVNsdWc6IFN0cmluZ1xcbiAgICAkaW52aXRlc0ZpbHRlcjogUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvcnNGaWx0ZXJcXG4gICkge1xcbiAgICB3b3Jrc3BhY2VVcGRhdGVkKHdvcmtzcGFjZUlkOiAkd29ya3NwYWNlSWQsIHdvcmtzcGFjZVNsdWc6ICR3b3Jrc3BhY2VTbHVnKSB7XFxuICAgICAgaWRcXG4gICAgICB3b3Jrc3BhY2Uge1xcbiAgICAgICAgaWRcXG4gICAgICAgIC4uLldvcmtzcGFjZURhc2hib2FyZF9Xb3Jrc3BhY2VcXG4gICAgICAgIC4uLldvcmtzcGFjZURhc2hib2FyZFByb2plY3RMaXN0X1dvcmtzcGFjZVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBMZWdhY3lCcmFuY2hSZWRpcmVjdE1ldGFkYXRhKCRzdHJlYW1JZDogU3RyaW5nISwgJGJyYW5jaE5hbWU6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHN0cmVhbUlkKSB7XFxuICAgICAgbW9kZWxCeU5hbWUobmFtZTogJGJyYW5jaE5hbWUpIHtcXG4gICAgICAgIGlkXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IExlZ2FjeUJyYW5jaFJlZGlyZWN0TWV0YWRhdGEoJHN0cmVhbUlkOiBTdHJpbmchLCAkYnJhbmNoTmFtZTogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkc3RyZWFtSWQpIHtcXG4gICAgICBtb2RlbEJ5TmFtZShuYW1lOiAkYnJhbmNoTmFtZSkge1xcbiAgICAgICAgaWRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgTGVnYWN5Vmlld2VyQ29tbWl0UmVkaXJlY3RNZXRhZGF0YSgkc3RyZWFtSWQ6IFN0cmluZyEsICRjb21taXRJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkc3RyZWFtSWQpIHtcXG4gICAgICB2ZXJzaW9uKGlkOiAkY29tbWl0SWQpIHtcXG4gICAgICAgIGlkXFxuICAgICAgICBtb2RlbCB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IExlZ2FjeVZpZXdlckNvbW1pdFJlZGlyZWN0TWV0YWRhdGEoJHN0cmVhbUlkOiBTdHJpbmchLCAkY29tbWl0SWQ6IFN0cmluZyEpIHtcXG4gICAgcHJvamVjdChpZDogJHN0cmVhbUlkKSB7XFxuICAgICAgdmVyc2lvbihpZDogJGNvbW1pdElkKSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgbW9kZWwge1xcbiAgICAgICAgICBpZFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBMZWdhY3lWaWV3ZXJTdHJlYW1SZWRpcmVjdE1ldGFkYXRhKCRzdHJlYW1JZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkc3RyZWFtSWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHZlcnNpb25zKGxpbWl0OiAxKSB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIG1vZGVsIHtcXG4gICAgICAgICAgICBpZFxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IExlZ2FjeVZpZXdlclN0cmVhbVJlZGlyZWN0TWV0YWRhdGEoJHN0cmVhbUlkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRzdHJlYW1JZCkge1xcbiAgICAgIGlkXFxuICAgICAgdmVyc2lvbnMobGltaXQ6IDEpIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgaWRcXG4gICAgICAgICAgbW9kZWwge1xcbiAgICAgICAgICAgIGlkXFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgQXV0b0FjY2VwdGFibGVXb3Jrc3BhY2VJbnZpdGUoXFxuICAgICR0b2tlbjogU3RyaW5nIVxcbiAgICAkd29ya3NwYWNlSWQ6IFN0cmluZyFcXG4gICAgJG9wdGlvbnM6IFdvcmtzcGFjZUludml0ZUxvb2t1cE9wdGlvbnNcXG4gICkge1xcbiAgICB3b3Jrc3BhY2VJbnZpdGUodG9rZW46ICR0b2tlbiwgd29ya3NwYWNlSWQ6ICR3b3Jrc3BhY2VJZCwgb3B0aW9uczogJG9wdGlvbnMpIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLlVzZVdvcmtzcGFjZUludml0ZU1hbmFnZXJfUGVuZGluZ1dvcmtzcGFjZUNvbGxhYm9yYXRvclxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IEF1dG9BY2NlcHRhYmxlV29ya3NwYWNlSW52aXRlKFxcbiAgICAkdG9rZW46IFN0cmluZyFcXG4gICAgJHdvcmtzcGFjZUlkOiBTdHJpbmchXFxuICAgICRvcHRpb25zOiBXb3Jrc3BhY2VJbnZpdGVMb29rdXBPcHRpb25zXFxuICApIHtcXG4gICAgd29ya3NwYWNlSW52aXRlKHRva2VuOiAkdG9rZW4sIHdvcmtzcGFjZUlkOiAkd29ya3NwYWNlSWQsIG9wdGlvbnM6ICRvcHRpb25zKSB7XFxuICAgICAgaWRcXG4gICAgICAuLi5Vc2VXb3Jrc3BhY2VJbnZpdGVNYW5hZ2VyX1BlbmRpbmdXb3Jrc3BhY2VDb2xsYWJvcmF0b3JcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBDYW5WaWV3UHJvamVjdFRva2VucygkcHJvamVjdElkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBpZFxcbiAgICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICAgIGNhblJlYWRFbWJlZFRva2VucyB7XFxuICAgICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgQ2FuVmlld1Byb2plY3RUb2tlbnMoJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgICBjYW5SZWFkRW1iZWRUb2tlbnMge1xcbiAgICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IENhblZpZXdQcm9qZWN0U2V0dGluZ3MoJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgICBjYW5SZWFkU2V0dGluZ3Mge1xcbiAgICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IENhblZpZXdQcm9qZWN0U2V0dGluZ3MoJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgICBjYW5SZWFkU2V0dGluZ3Mge1xcbiAgICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IENhblZpZXdQcm9qZWN0V2ViaG9va3MoJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgICBjYW5SZWFkV2ViaG9va3Mge1xcbiAgICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IENhblZpZXdQcm9qZWN0V2ViaG9va3MoJHByb2plY3RJZDogU3RyaW5nISkge1xcbiAgICBwcm9qZWN0KGlkOiAkcHJvamVjdElkKSB7XFxuICAgICAgaWRcXG4gICAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgICBjYW5SZWFkV2ViaG9va3Mge1xcbiAgICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIHF1ZXJ5IFJlc29sdmVDb21tZW50TGluaygkY29tbWVudElkOiBTdHJpbmchLCAkcHJvamVjdElkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBjb21tZW50KGlkOiAkY29tbWVudElkKSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgLi4uTGlua2FibGVDb21tZW50XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IFJlc29sdmVDb21tZW50TGluaygkY29tbWVudElkOiBTdHJpbmchLCAkcHJvamVjdElkOiBTdHJpbmchKSB7XFxuICAgIHByb2plY3QoaWQ6ICRwcm9qZWN0SWQpIHtcXG4gICAgICBjb21tZW50KGlkOiAkY29tbWVudElkKSB7XFxuICAgICAgICBpZFxcbiAgICAgICAgLi4uTGlua2FibGVDb21tZW50XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IEF1dG9tYXRlRnVuY3Rpb25QYWdlX0F1dG9tYXRlRnVuY3Rpb24gb24gQXV0b21hdGVGdW5jdGlvbiB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgZGVzY3JpcHRpb25cXG4gICAgbG9nb1xcbiAgICBzdXBwb3J0ZWRTb3VyY2VBcHBzXFxuICAgIHRhZ3NcXG4gICAgLi4uQXV0b21hdGVGdW5jdGlvblBhZ2VIZWFkZXJfRnVuY3Rpb25cXG4gICAgLi4uQXV0b21hdGVGdW5jdGlvblBhZ2VJbmZvX0F1dG9tYXRlRnVuY3Rpb25cXG4gICAgLi4uQXV0b21hdGVBdXRvbWF0aW9uQ3JlYXRlRGlhbG9nX0F1dG9tYXRlRnVuY3Rpb25cXG4gICAgY3JlYXRvciB7XFxuICAgICAgaWRcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBBdXRvbWF0ZUZ1bmN0aW9uUGFnZV9BdXRvbWF0ZUZ1bmN0aW9uIG9uIEF1dG9tYXRlRnVuY3Rpb24ge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIGRlc2NyaXB0aW9uXFxuICAgIGxvZ29cXG4gICAgc3VwcG9ydGVkU291cmNlQXBwc1xcbiAgICB0YWdzXFxuICAgIC4uLkF1dG9tYXRlRnVuY3Rpb25QYWdlSGVhZGVyX0Z1bmN0aW9uXFxuICAgIC4uLkF1dG9tYXRlRnVuY3Rpb25QYWdlSW5mb19BdXRvbWF0ZUZ1bmN0aW9uXFxuICAgIC4uLkF1dG9tYXRlQXV0b21hdGlvbkNyZWF0ZURpYWxvZ19BdXRvbWF0ZUZ1bmN0aW9uXFxuICAgIGNyZWF0b3Ige1xcbiAgICAgIGlkXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgQXV0b21hdGVGdW5jdGlvblBhZ2UoJGZ1bmN0aW9uSWQ6IElEISkge1xcbiAgICBhdXRvbWF0ZUZ1bmN0aW9uKGlkOiAkZnVuY3Rpb25JZCkge1xcbiAgICAgIC4uLkF1dG9tYXRlRnVuY3Rpb25QYWdlX0F1dG9tYXRlRnVuY3Rpb25cXG4gICAgfVxcbiAgICBhY3RpdmVVc2VyIHtcXG4gICAgICB3b3Jrc3BhY2VzIHtcXG4gICAgICAgIGl0ZW1zIHtcXG4gICAgICAgICAgLi4uQXV0b21hdGVGdW5jdGlvbkNyZWF0ZURpYWxvZ19Xb3Jrc3BhY2VcXG4gICAgICAgICAgLi4uQXV0b21hdGVGdW5jdGlvbkVkaXREaWFsb2dfV29ya3NwYWNlXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IEF1dG9tYXRlRnVuY3Rpb25QYWdlKCRmdW5jdGlvbklkOiBJRCEpIHtcXG4gICAgYXV0b21hdGVGdW5jdGlvbihpZDogJGZ1bmN0aW9uSWQpIHtcXG4gICAgICAuLi5BdXRvbWF0ZUZ1bmN0aW9uUGFnZV9BdXRvbWF0ZUZ1bmN0aW9uXFxuICAgIH1cXG4gICAgYWN0aXZlVXNlciB7XFxuICAgICAgd29ya3NwYWNlcyB7XFxuICAgICAgICBpdGVtcyB7XFxuICAgICAgICAgIC4uLkF1dG9tYXRlRnVuY3Rpb25DcmVhdGVEaWFsb2dfV29ya3NwYWNlXFxuICAgICAgICAgIC4uLkF1dG9tYXRlRnVuY3Rpb25FZGl0RGlhbG9nX1dvcmtzcGFjZVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBxdWVyeSBBdXRvbWF0ZUZ1bmN0aW9uUGFnZVdvcmtzcGFjZSgkd29ya3NwYWNlSWQ6IFN0cmluZyEpIHtcXG4gICAgd29ya3NwYWNlKGlkOiAkd29ya3NwYWNlSWQpIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLkF1dG9tYXRlRnVuY3Rpb25QYWdlSGVhZGVyX1dvcmtzcGFjZVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIHF1ZXJ5IEF1dG9tYXRlRnVuY3Rpb25QYWdlV29ya3NwYWNlKCR3b3Jrc3BhY2VJZDogU3RyaW5nISkge1xcbiAgICB3b3Jrc3BhY2UoaWQ6ICR3b3Jrc3BhY2VJZCkge1xcbiAgICAgIGlkXFxuICAgICAgLi4uQXV0b21hdGVGdW5jdGlvblBhZ2VIZWFkZXJfV29ya3NwYWNlXFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VQcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBjcmVhdGVkQXRcXG4gICAgbW9kZWxDb3VudDogbW9kZWxzKGxpbWl0OiAwKSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICAgIGNvbW1lbnRUaHJlYWRDb3VudDogY29tbWVudFRocmVhZHMobGltaXQ6IDApIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICAgIGNhbkxpc3REYXNoYm9hcmRzIHtcXG4gICAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuUmVhZFNldHRpbmdzIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuVXBkYXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuTW92ZVRvV29ya3NwYWNlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uUHJvamVjdFBhZ2VUZWFtSW50ZXJuYWxzX1Byb2plY3RcXG4gICAgLi4uUHJvamVjdFBhZ2VQcm9qZWN0SGVhZGVyXFxuICAgIC4uLlByb2plY3RQYWdlVGVhbURpYWxvZ1xcbiAgICAuLi5Xb3Jrc3BhY2VNb3ZlUHJvamVjdE1hbmFnZXJfUHJvamVjdEJhc2VcXG4gICAgLi4uUHJvamVjdFBhZ2VTZXR0aW5nc1RhYl9Qcm9qZWN0XFxuICAgIC4uLldvcmtzcGFjZU1vdmVQcm9qZWN0X1Byb2plY3RcXG4gICAgaGFzQWNjZXNzVG9EYXNoYm9hcmRzOiBoYXNBY2Nlc3NUb0ZlYXR1cmUoZmVhdHVyZU5hbWU6IGRhc2hib2FyZHMpXFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgY3JlYXRlZEF0XFxuICAgIG1vZGVsQ291bnQ6IG1vZGVscyhsaW1pdDogMCkge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgfVxcbiAgICBjb21tZW50VGhyZWFkQ291bnQ6IGNvbW1lbnRUaHJlYWRzKGxpbWl0OiAwKSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgICBjYW5MaXN0RGFzaGJvYXJkcyB7XFxuICAgICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhblJlYWRTZXR0aW5ncyB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhblVwZGF0ZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhbk1vdmVUb1dvcmtzcGFjZSB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICAgIC4uLlByb2plY3RQYWdlVGVhbUludGVybmFsc19Qcm9qZWN0XFxuICAgIC4uLlByb2plY3RQYWdlUHJvamVjdEhlYWRlclxcbiAgICAuLi5Qcm9qZWN0UGFnZVRlYW1EaWFsb2dcXG4gICAgLi4uV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1Byb2plY3RCYXNlXFxuICAgIC4uLlByb2plY3RQYWdlU2V0dGluZ3NUYWJfUHJvamVjdFxcbiAgICAuLi5Xb3Jrc3BhY2VNb3ZlUHJvamVjdF9Qcm9qZWN0XFxuICAgIGhhc0FjY2Vzc1RvRGFzaGJvYXJkczogaGFzQWNjZXNzVG9GZWF0dXJlKGZlYXR1cmVOYW1lOiBkYXNoYm9hcmRzKVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZUF1dG9tYXRpb25QYWdlX0F1dG9tYXRpb24gb24gQXV0b21hdGlvbiB7XFxuICAgIGlkXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5VcGRhdGUge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICAuLi5Qcm9qZWN0UGFnZUF1dG9tYXRpb25IZWFkZXJfQXV0b21hdGlvblxcbiAgICAuLi5Qcm9qZWN0UGFnZUF1dG9tYXRpb25GdW5jdGlvbnNfQXV0b21hdGlvblxcbiAgICAuLi5Qcm9qZWN0UGFnZUF1dG9tYXRpb25SdW5zX0F1dG9tYXRpb25cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VBdXRvbWF0aW9uUGFnZV9BdXRvbWF0aW9uIG9uIEF1dG9tYXRpb24ge1xcbiAgICBpZFxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuVXBkYXRlIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gICAgLi4uUHJvamVjdFBhZ2VBdXRvbWF0aW9uSGVhZGVyX0F1dG9tYXRpb25cXG4gICAgLi4uUHJvamVjdFBhZ2VBdXRvbWF0aW9uRnVuY3Rpb25zX0F1dG9tYXRpb25cXG4gICAgLi4uUHJvamVjdFBhZ2VBdXRvbWF0aW9uUnVuc19BdXRvbWF0aW9uXFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFByb2plY3RQYWdlQXV0b21hdGlvblBhZ2VfUHJvamVjdCBvbiBQcm9qZWN0IHtcXG4gICAgaWRcXG4gICAgd29ya3NwYWNlSWRcXG4gICAgLi4uUHJvamVjdFBhZ2VBdXRvbWF0aW9uSGVhZGVyX1Byb2plY3RcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VBdXRvbWF0aW9uUGFnZV9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICB3b3Jrc3BhY2VJZFxcbiAgICAuLi5Qcm9qZWN0UGFnZUF1dG9tYXRpb25IZWFkZXJfUHJvamVjdFxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBQcm9qZWN0UGFnZVNldHRpbmdzVGFiX1Byb2plY3Qgb24gUHJvamVjdCB7XFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhblJlYWRXZWJob29rcyB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhblJlYWRFbWJlZFRva2VucyB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhblJlYWRBY2NJbnRlZ3JhdGlvblNldHRpbmdzIHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgUHJvamVjdFBhZ2VTZXR0aW5nc1RhYl9Qcm9qZWN0IG9uIFByb2plY3Qge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5SZWFkV2ViaG9va3Mge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5SZWFkRW1iZWRUb2tlbnMge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgICBjYW5SZWFkQWNjSW50ZWdyYXRpb25TZXR0aW5ncyB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzU2VydmVyUHJvamVjdHNfUHJvamVjdENvbGxlY3Rpb24gb24gUHJvamVjdENvbGxlY3Rpb24ge1xcbiAgICB0b3RhbENvdW50XFxuICAgIGl0ZW1zIHtcXG4gICAgICAuLi5TZXR0aW5nc1NoYXJlZFByb2plY3RzX1Byb2plY3RcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBTZXR0aW5nc1NlcnZlclByb2plY3RzX1Byb2plY3RDb2xsZWN0aW9uIG9uIFByb2plY3RDb2xsZWN0aW9uIHtcXG4gICAgdG90YWxDb3VudFxcbiAgICBpdGVtcyB7XFxuICAgICAgLi4uU2V0dGluZ3NTaGFyZWRQcm9qZWN0c19Qcm9qZWN0XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgcXVlcnkgU2V0dGluZ3NTZXJ2ZXJSZWdpb25zIHtcXG4gICAgc2VydmVySW5mbyB7XFxuICAgICAgbXVsdGlSZWdpb24ge1xcbiAgICAgICAgcmVnaW9ucyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLlNldHRpbmdzU2VydmVyUmVnaW9uc1RhYmxlX1NlcnZlclJlZ2lvbkl0ZW1cXG4gICAgICAgIH1cXG4gICAgICAgIGF2YWlsYWJsZUtleXNcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgcXVlcnkgU2V0dGluZ3NTZXJ2ZXJSZWdpb25zIHtcXG4gICAgc2VydmVySW5mbyB7XFxuICAgICAgbXVsdGlSZWdpb24ge1xcbiAgICAgICAgcmVnaW9ucyB7XFxuICAgICAgICAgIGlkXFxuICAgICAgICAgIC4uLlNldHRpbmdzU2VydmVyUmVnaW9uc1RhYmxlX1NlcnZlclJlZ2lvbkl0ZW1cXG4gICAgICAgIH1cXG4gICAgICAgIGF2YWlsYWJsZUtleXNcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzR2VuZXJhbF9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzR2VuZXJhbEVkaXRBdmF0YXJfV29ya3NwYWNlXFxuICAgIC4uLlNldHRpbmdzV29ya3NwYWNlR2VuZXJhbERlbGV0ZURpYWxvZ19Xb3Jrc3BhY2VcXG4gICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzR2VuZXJhbEVkaXRTbHVnRGlhbG9nX1dvcmtzcGFjZVxcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHNsdWdcXG4gICAgZGVzY3JpcHRpb25cXG4gICAgbG9nb1xcbiAgICByb2xlXFxuICAgIHBsYW4ge1xcbiAgICAgIHN0YXR1c1xcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgICBlbWJlZE9wdGlvbnMge1xcbiAgICAgIGhpZGVTcGVja2xlQnJhbmRpbmdcXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuRWRpdEVtYmVkT3B0aW9ucyB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc0dlbmVyYWxfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc0dlbmVyYWxFZGl0QXZhdGFyX1dvcmtzcGFjZVxcbiAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZUdlbmVyYWxEZWxldGVEaWFsb2dfV29ya3NwYWNlXFxuICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc0dlbmVyYWxFZGl0U2x1Z0RpYWxvZ19Xb3Jrc3BhY2VcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBzbHVnXFxuICAgIGRlc2NyaXB0aW9uXFxuICAgIGxvZ29cXG4gICAgcm9sZVxcbiAgICBwbGFuIHtcXG4gICAgICBzdGF0dXNcXG4gICAgICBuYW1lXFxuICAgIH1cXG4gICAgZW1iZWRPcHRpb25zIHtcXG4gICAgICBoaWRlU3BlY2tsZUJyYW5kaW5nXFxuICAgIH1cXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkVkaXRFbWJlZE9wdGlvbnMge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNNZW1iZXJzQ291bnRzX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICByb2xlXFxuICAgIGludml0ZWRUZWFtIHtcXG4gICAgICBpZFxcbiAgICB9XFxuICAgIHRlYW1CeVJvbGUge1xcbiAgICAgIGFkbWlucyB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICAgIG1lbWJlcnMge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgIH1cXG4gICAgICBndWVzdHMge1xcbiAgICAgICAgdG90YWxDb3VudFxcbiAgICAgIH1cXG4gICAgfVxcbiAgICBhZG1pbldvcmtzcGFjZXNKb2luUmVxdWVzdHMoZmlsdGVyOiAkZmlsdGVyKSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc01lbWJlcnNDb3VudHNfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHJvbGVcXG4gICAgaW52aXRlZFRlYW0ge1xcbiAgICAgIGlkXFxuICAgIH1cXG4gICAgdGVhbUJ5Um9sZSB7XFxuICAgICAgYWRtaW5zIHtcXG4gICAgICAgIHRvdGFsQ291bnRcXG4gICAgICB9XFxuICAgICAgbWVtYmVycyB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICAgIGd1ZXN0cyB7XFxuICAgICAgICB0b3RhbENvdW50XFxuICAgICAgfVxcbiAgICB9XFxuICAgIGFkbWluV29ya3NwYWNlc0pvaW5SZXF1ZXN0cyhmaWx0ZXI6ICRmaWx0ZXIpIHtcXG4gICAgICB0b3RhbENvdW50XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzUHJvamVjdHNfUHJvamVjdENvbGxlY3Rpb24gb24gUHJvamVjdENvbGxlY3Rpb24ge1xcbiAgICB0b3RhbENvdW50XFxuICAgIGl0ZW1zIHtcXG4gICAgICAuLi5TZXR0aW5nc1NoYXJlZFByb2plY3RzX1Byb2plY3RcXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNQcm9qZWN0c19Qcm9qZWN0Q29sbGVjdGlvbiBvbiBQcm9qZWN0Q29sbGVjdGlvbiB7XFxuICAgIHRvdGFsQ291bnRcXG4gICAgaXRlbXMge1xcbiAgICAgIC4uLlNldHRpbmdzU2hhcmVkUHJvamVjdHNfUHJvamVjdFxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc1Byb2plY3RzX1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICBpZFxcbiAgICBuYW1lXFxuICAgIHNsdWdcXG4gICAgcGxhbiB7XFxuICAgICAgbmFtZVxcbiAgICB9XFxuICAgIHJvbGVcXG4gICAgcGVybWlzc2lvbnMge1xcbiAgICAgIGNhbkNyZWF0ZVByb2plY3Qge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNQcm9qZWN0c19Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBzbHVnXFxuICAgIHBsYW4ge1xcbiAgICAgIG5hbWVcXG4gICAgfVxcbiAgICByb2xlXFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5DcmVhdGVQcm9qZWN0IHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzUmVnaW9uc19Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgaWRcXG4gICAgcm9sZVxcbiAgICBkZWZhdWx0UmVnaW9uIHtcXG4gICAgICBpZFxcbiAgICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc1JlZ2lvbnNTZWxlY3RfU2VydmVyUmVnaW9uSXRlbVxcbiAgICB9XFxuICAgIGhhc0FjY2Vzc1RvTXVsdGlSZWdpb246IGhhc0FjY2Vzc1RvRmVhdHVyZShcXG4gICAgICBmZWF0dXJlTmFtZTogd29ya3NwYWNlRGF0YVJlZ2lvblNwZWNpZmljaXR5XFxuICAgIClcXG4gICAgaGFzUHJvamVjdHM6IHByb2plY3RzKGxpbWl0OiAwKSB7XFxuICAgICAgdG90YWxDb3VudFxcbiAgICB9XFxuICB9XFxuXCIpOiAodHlwZW9mIGRvY3VtZW50cylbXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc1JlZ2lvbnNfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIGlkXFxuICAgIHJvbGVcXG4gICAgZGVmYXVsdFJlZ2lvbiB7XFxuICAgICAgaWRcXG4gICAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNSZWdpb25zU2VsZWN0X1NlcnZlclJlZ2lvbkl0ZW1cXG4gICAgfVxcbiAgICBoYXNBY2Nlc3NUb011bHRpUmVnaW9uOiBoYXNBY2Nlc3NUb0ZlYXR1cmUoXFxuICAgICAgZmVhdHVyZU5hbWU6IHdvcmtzcGFjZURhdGFSZWdpb25TcGVjaWZpY2l0eVxcbiAgICApXFxuICAgIGhhc1Byb2plY3RzOiBwcm9qZWN0cyhsaW1pdDogMCkge1xcbiAgICAgIHRvdGFsQ291bnRcXG4gICAgfVxcbiAgfVxcblwiXTtcbi8qKlxuICogVGhlIGdyYXBocWwgZnVuY3Rpb24gaXMgdXNlZCB0byBwYXJzZSBHcmFwaFFMIHF1ZXJpZXMgaW50byBhIGRvY3VtZW50IHRoYXQgY2FuIGJlIHVzZWQgYnkgR3JhcGhRTCBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhxbChzb3VyY2U6IFwiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNSZWdpb25zX1NlcnZlckluZm8gb24gU2VydmVySW5mbyB7XFxuICAgIG11bHRpUmVnaW9uIHtcXG4gICAgICByZWdpb25zIHtcXG4gICAgICAgIGlkXFxuICAgICAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNSZWdpb25zU2VsZWN0X1NlcnZlclJlZ2lvbkl0ZW1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgU2V0dGluZ3NXb3Jrc3BhY2VzUmVnaW9uc19TZXJ2ZXJJbmZvIG9uIFNlcnZlckluZm8ge1xcbiAgICBtdWx0aVJlZ2lvbiB7XFxuICAgICAgcmVnaW9ucyB7XFxuICAgICAgICBpZFxcbiAgICAgICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzUmVnaW9uc1NlbGVjdF9TZXJ2ZXJSZWdpb25JdGVtXFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5X1dvcmtzcGFjZSBvbiBXb3Jrc3BhY2Uge1xcbiAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eURlZmF1bHRTZWF0X1dvcmtzcGFjZVxcbiAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eURvbWFpbk1hbmFnZW1lbnRfV29ya3NwYWNlXFxuICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5RGlzY292ZXJhYmlsaXR5X1dvcmtzcGFjZVxcbiAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eVNzb1dyYXBwZXJfV29ya3NwYWNlXFxuICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5RG9tYWluUHJvdGVjdGlvbl9Xb3Jrc3BhY2VcXG4gICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlXb3Jrc3BhY2VDcmVhdGlvbl9Xb3Jrc3BhY2VcXG4gICAgaWRcXG4gICAgc2x1Z1xcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBTZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eV9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlEZWZhdWx0U2VhdF9Xb3Jrc3BhY2VcXG4gICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlEb21haW5NYW5hZ2VtZW50X1dvcmtzcGFjZVxcbiAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eURpc2NvdmVyYWJpbGl0eV9Xb3Jrc3BhY2VcXG4gICAgLi4uU2V0dGluZ3NXb3Jrc3BhY2VzU2VjdXJpdHlTc29XcmFwcGVyX1dvcmtzcGFjZVxcbiAgICAuLi5TZXR0aW5nc1dvcmtzcGFjZXNTZWN1cml0eURvbWFpblByb3RlY3Rpb25fV29ya3NwYWNlXFxuICAgIC4uLlNldHRpbmdzV29ya3NwYWNlc1NlY3VyaXR5V29ya3NwYWNlQ3JlYXRpb25fV29ya3NwYWNlXFxuICAgIGlkXFxuICAgIHNsdWdcXG4gIH1cXG5cIl07XG4vKipcbiAqIFRoZSBncmFwaHFsIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgR3JhcGhRTCBxdWVyaWVzIGludG8gYSBkb2N1bWVudCB0aGF0IGNhbiBiZSB1c2VkIGJ5IEdyYXBoUUwgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlRGFzaGJvYXJkc19EYXNoYm9hcmQgb24gRGFzaGJvYXJkIHtcXG4gICAgLi4uRGFzaGJvYXJkc0VkaXREaWFsb2dfRGFzaGJvYXJkXFxuICAgIGlkXFxuICAgIG5hbWVcXG4gICAgY3JlYXRlZEJ5IHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgICBhdmF0YXJcXG4gICAgfVxcbiAgICBjcmVhdGVkQXRcXG4gICAgdXBkYXRlZEF0XFxuICAgIHdvcmtzcGFjZSB7XFxuICAgICAgaWRcXG4gICAgICBuYW1lXFxuICAgICAgc2x1Z1xcbiAgICAgIGxvZ29cXG4gICAgfVxcbiAgICBwZXJtaXNzaW9ucyB7XFxuICAgICAgY2FuRWRpdCB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICAgIGNhblJlYWQge1xcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiKTogKHR5cGVvZiBkb2N1bWVudHMpW1wiXFxuICBmcmFnbWVudCBXb3Jrc3BhY2VEYXNoYm9hcmRzX0Rhc2hib2FyZCBvbiBEYXNoYm9hcmQge1xcbiAgICAuLi5EYXNoYm9hcmRzRWRpdERpYWxvZ19EYXNoYm9hcmRcXG4gICAgaWRcXG4gICAgbmFtZVxcbiAgICBjcmVhdGVkQnkge1xcbiAgICAgIGlkXFxuICAgICAgbmFtZVxcbiAgICAgIGF2YXRhclxcbiAgICB9XFxuICAgIGNyZWF0ZWRBdFxcbiAgICB1cGRhdGVkQXRcXG4gICAgd29ya3NwYWNlIHtcXG4gICAgICBpZFxcbiAgICAgIG5hbWVcXG4gICAgICBzbHVnXFxuICAgICAgbG9nb1xcbiAgICB9XFxuICAgIHBlcm1pc3Npb25zIHtcXG4gICAgICBjYW5FZGl0IHtcXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcXG4gICAgICB9XFxuICAgICAgY2FuUmVhZCB7XFxuICAgICAgICAuLi5GdWxsUGVybWlzc2lvbkNoZWNrUmVzdWx0XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCJdO1xuLyoqXG4gKiBUaGUgZ3JhcGhxbCBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIEdyYXBoUUwgcXVlcmllcyBpbnRvIGEgZG9jdW1lbnQgdGhhdCBjYW4gYmUgdXNlZCBieSBHcmFwaFFMIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmFwaHFsKHNvdXJjZTogXCJcXG4gIGZyYWdtZW50IFdvcmtzcGFjZVBhZ2VfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XFxuICAgIC4uLldvcmtzcGFjZURhc2hib2FyZF9Xb3Jrc3BhY2VcXG4gICAgLi4uV29ya3NwYWNlU2lkZWJhcl9Xb3Jrc3BhY2VcXG4gIH1cXG5cIik6ICh0eXBlb2YgZG9jdW1lbnRzKVtcIlxcbiAgZnJhZ21lbnQgV29ya3NwYWNlUGFnZV9Xb3Jrc3BhY2Ugb24gV29ya3NwYWNlIHtcXG4gICAgLi4uV29ya3NwYWNlRGFzaGJvYXJkX1dvcmtzcGFjZVxcbiAgICAuLi5Xb3Jrc3BhY2VTaWRlYmFyX1dvcmtzcGFjZVxcbiAgfVxcblwiXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdyYXBocWwoc291cmNlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIChkb2N1bWVudHMgYXMgYW55KVtzb3VyY2VdID8/IHt9O1xufVxuXG5leHBvcnQgdHlwZSBEb2N1bWVudFR5cGU8VERvY3VtZW50Tm9kZSBleHRlbmRzIERvY3VtZW50Tm9kZTxhbnksIGFueT4+ID0gVERvY3VtZW50Tm9kZSBleHRlbmRzIERvY3VtZW50Tm9kZTwgIGluZmVyIFRUeXBlLCAgYW55PiAgPyBUVHlwZSAgOiBuZXZlcjsiXSwibWFwcGluZ3MiOiJBQUNBLFlBQVksV0FBVztBQTJqQnZCLE1BQU0sWUFBdUI7QUFBQSxFQUN6Qiw4SkFBOEosTUFBTTtBQUFBLEVBQ3BLLCtMQUErTCxNQUFNO0FBQUEsRUFDck0scUdBQXFHLE1BQU07QUFBQSxFQUMzRywwT0FBME8sTUFBTTtBQUFBLEVBQ2hQLDBHQUEwRyxNQUFNO0FBQUEsRUFDaEgsc0xBQXNMLE1BQU07QUFBQSxFQUM1TCxtSUFBbUksTUFBTTtBQUFBLEVBQ3pJLHFPQUFxTyxNQUFNO0FBQUEsRUFDM08scU5BQXFOLE1BQU07QUFBQSxFQUMzTixzYUFBc2EsTUFBTTtBQUFBLEVBQzVhLHFOQUFxTixNQUFNO0FBQUEsRUFDM04seUdBQXlHLE1BQU07QUFBQSxFQUMvRyw2RkFBNkYsTUFBTTtBQUFBLEVBQ25HLDhOQUE4TixNQUFNO0FBQUEsRUFDcE8sNkpBQTZKLE1BQU07QUFBQSxFQUNuSyxzVkFBc1YsTUFBTTtBQUFBLEVBQzVWLHlYQUF5WCxNQUFNO0FBQUEsRUFDL1gsMElBQTBJLE1BQU07QUFBQSxFQUNoSixrWUFBa1ksTUFBTTtBQUFBLEVBQ3hZLGlPQUFpTyxNQUFNO0FBQUEsRUFDdk8sK05BQStOLE1BQU07QUFBQSxFQUNyTywyUUFBMlEsTUFBTTtBQUFBLEVBQ2pSLHFRQUFxUSxNQUFNO0FBQUEsRUFDM1Esd09BQXdPLE1BQU07QUFBQSxFQUM5TyxrUUFBa1EsTUFBTTtBQUFBLEVBQ3hRLHVPQUF1TyxNQUFNO0FBQUEsRUFDN08sNkVBQTZFLE1BQU07QUFBQSxFQUNuRixzSUFBc0ksTUFBTTtBQUFBLEVBQzVJLGtOQUFrTixNQUFNO0FBQUEsRUFDeE4sMFJBQTBSLE1BQU07QUFBQSxFQUNoUyx5SEFBeUgsTUFBTTtBQUFBLEVBQy9ILG1PQUFtTyxNQUFNO0FBQUEsRUFDek8sMFZBQTBWLE1BQU07QUFBQSxFQUNoVyx1TUFBdU0sTUFBTTtBQUFBLEVBQzdNLDhNQUE4TSxNQUFNO0FBQUEsRUFDcE4sZ05BQWdOLE1BQU07QUFBQSxFQUN0TiwyRUFBMkUsTUFBTTtBQUFBLEVBQ2pGLGlGQUFpRixNQUFNO0FBQUEsRUFDdkYsd0dBQXdHLE1BQU07QUFBQSxFQUM5RywrVUFBK1UsTUFBTTtBQUFBLEVBQ3JWLGlJQUFpSSxNQUFNO0FBQUEsRUFDdkksc1dBQXNXLE1BQU07QUFBQSxFQUM1VywwRkFBMEYsTUFBTTtBQUFBLEVBQ2hHLHFOQUFxTixNQUFNO0FBQUEsRUFDM04sK0lBQStJLE1BQU07QUFBQSxFQUNySix3WkFBd1osTUFBTTtBQUFBLEVBQzlaLDRJQUE0SSxNQUFNO0FBQUEsRUFDbEoscVVBQXFVLE1BQU07QUFBQSxFQUMzVSwwSEFBMEgsTUFBTTtBQUFBLEVBQ2hJLDJRQUEyUSxNQUFNO0FBQUEsRUFDalIsdVZBQXVWLE1BQU07QUFBQSxFQUM3Viw4aEJBQThoQixNQUFNO0FBQUEsRUFDcGlCLG9JQUFvSSxNQUFNO0FBQUEsRUFDMUksK0lBQStJLE1BQU07QUFBQSxFQUNySixtV0FBbVcsTUFBTTtBQUFBLEVBQ3pXLDJVQUEyVSxNQUFNO0FBQUEsRUFDalYsMElBQTBJLE1BQU07QUFBQSxFQUNoSix1VUFBdVUsTUFBTTtBQUFBLEVBQzdVLHFIQUFxSCxNQUFNO0FBQUEsRUFDM0gsZ0dBQWdHLE1BQU07QUFBQSxFQUN0RyxtVUFBbVUsTUFBTTtBQUFBLEVBQ3pVLDRIQUE0SCxNQUFNO0FBQUEsRUFDbEksc1NBQXNTLE1BQU07QUFBQSxFQUM1UyxzTEFBc0wsTUFBTTtBQUFBLEVBQzVMLDhjQUE4YyxNQUFNO0FBQUEsRUFDcGQsc1BBQXNQLE1BQU07QUFBQSxFQUM1UCx3UUFBd1EsTUFBTTtBQUFBLEVBQzlRLDBRQUEwUSxNQUFNO0FBQUEsRUFDaFIsZ0pBQWdKLE1BQU07QUFBQSxFQUN0SiwrR0FBK0csTUFBTTtBQUFBLEVBQ3JILGdOQUFnTixNQUFNO0FBQUEsRUFDdE4sbU5BQW1OLE1BQU07QUFBQSxFQUN6Tiw2TUFBNk0sTUFBTTtBQUFBLEVBQ25OLG1OQUFtTixNQUFNO0FBQUEsRUFDek4sb0xBQW9MLE1BQU07QUFBQSxFQUMxTCxxT0FBcU8sTUFBTTtBQUFBLEVBQzNPLDhlQUE4ZSxNQUFNO0FBQUEsRUFDcGYseVdBQXlXLE1BQU07QUFBQSxFQUMvVyw2RkFBNkYsTUFBTTtBQUFBLEVBQ25HLGtHQUFrRyxNQUFNO0FBQUEsRUFDeEcsNkZBQTZGLE1BQU07QUFBQSxFQUNuRyx3YUFBd2EsTUFBTTtBQUFBLEVBQzlhLHlLQUF5SyxNQUFNO0FBQUEsRUFDL0ssOGpCQUE4akIsTUFBTTtBQUFBLEVBQ3BrQiw2T0FBNk8sTUFBTTtBQUFBLEVBQ25QLGtMQUFrTCxNQUFNO0FBQUEsRUFDeEwsaUhBQWlILE1BQU07QUFBQSxFQUN2SCxtUUFBbVEsTUFBTTtBQUFBLEVBQ3pRLDJRQUEyUSxNQUFNO0FBQUEsRUFDalIsK1NBQStTLE1BQU07QUFBQSxFQUNyVCxzbEJBQXNsQixNQUFNO0FBQUEsRUFDNWxCLDZWQUE2VixNQUFNO0FBQUEsRUFDblcsZ0pBQWdKLE1BQU07QUFBQSxFQUN0SixxSEFBcUgsTUFBTTtBQUFBLEVBQzNILDZTQUE2UyxNQUFNO0FBQUEsRUFDblQsb2NBQW9jLE1BQU07QUFBQSxFQUMxYywwTUFBME0sTUFBTTtBQUFBLEVBQ2hOLHdwQkFBd3BCLE1BQU07QUFBQSxFQUM5cEIsZ0tBQWdLLE1BQU07QUFBQSxFQUN0Syw2Y0FBNmMsTUFBTTtBQUFBLEVBQ25kLDJGQUEyRixNQUFNO0FBQUEsRUFDakcsa0ZBQWtGLE1BQU07QUFBQSxFQUN4RixzYUFBc2EsTUFBTTtBQUFBLEVBQzVhLGtSQUFrUixNQUFNO0FBQUEsRUFDeFIsa0hBQWtILE1BQU07QUFBQSxFQUN4SCx1UkFBdVIsTUFBTTtBQUFBLEVBQzdSLGtZQUFrWSxNQUFNO0FBQUEsRUFDeFksOGpCQUE4akIsTUFBTTtBQUFBLEVBQ3BrQiwwR0FBMEcsTUFBTTtBQUFBLEVBQ2hILHlTQUF5UyxNQUFNO0FBQUEsRUFDL1Msd1dBQXdXLE1BQU07QUFBQSxFQUM5VyxvVEFBb1QsTUFBTTtBQUFBLEVBQzFULGdhQUFnYSxNQUFNO0FBQUEsRUFDdGEsc0ZBQXNGLE1BQU07QUFBQSxFQUM1Rix1R0FBdUcsTUFBTTtBQUFBLEVBQzdHLDhHQUE4RyxNQUFNO0FBQUEsRUFDcEgsb01BQW9NLE1BQU07QUFBQSxFQUMxTSxrY0FBa2MsTUFBTTtBQUFBLEVBQ3hjLHVOQUF1TixNQUFNO0FBQUEsRUFDN04sbU5BQW1OLE1BQU07QUFBQSxFQUN6Tix1UEFBdVAsTUFBTTtBQUFBLEVBQzdQLDRVQUE0VSxNQUFNO0FBQUEsRUFDbFYsc05BQXNOLE1BQU07QUFBQSxFQUM1TixtTUFBbU0sTUFBTTtBQUFBLEVBQ3pNLHlhQUF5YSxNQUFNO0FBQUEsRUFDL2EsNEtBQTRLLE1BQU07QUFBQSxFQUNsTCx1SUFBdUksTUFBTTtBQUFBLEVBQzdJLDhNQUE4TSxNQUFNO0FBQUEsRUFDcE4sbVJBQW1SLE1BQU07QUFBQSxFQUN6Uiw4R0FBOEcsTUFBTTtBQUFBLEVBQ3BILDRMQUE0TCxNQUFNO0FBQUEsRUFDbE0sZ0lBQWdJLE1BQU07QUFBQSxFQUN0SSxpSUFBaUksTUFBTTtBQUFBLEVBQ3ZJLDJVQUEyVSxNQUFNO0FBQUEsRUFDalYsMEpBQTBKLE1BQU07QUFBQSxFQUNoSyxzSUFBc0ksTUFBTTtBQUFBLEVBQzVJLCtNQUErTSxNQUFNO0FBQUEsRUFDck4sMkhBQTJILE1BQU07QUFBQSxFQUNqSSw2SUFBNkksTUFBTTtBQUFBLEVBQ25KLHFJQUFxSSxNQUFNO0FBQUEsRUFDM0ksOGtCQUE4a0IsTUFBTTtBQUFBLEVBQ3BsQiw2R0FBNkcsTUFBTTtBQUFBLEVBQ25ILDJGQUEyRixNQUFNO0FBQUEsRUFDakcsMEZBQTBGLE1BQU07QUFBQSxFQUNoRyx5SUFBeUksTUFBTTtBQUFBLEVBQy9JLCtHQUErRyxNQUFNO0FBQUEsRUFDckgsdUdBQXVHLE1BQU07QUFBQSxFQUM3RyxnSEFBZ0gsTUFBTTtBQUFBLEVBQ3RILG9IQUFvSCxNQUFNO0FBQUEsRUFDMUgsK1BBQStQLE1BQU07QUFBQSxFQUNyUSxrSUFBa0ksTUFBTTtBQUFBLEVBQ3hJLDhTQUE4UyxNQUFNO0FBQUEsRUFDcFQsK01BQStNLE1BQU07QUFBQSxFQUNyTix5UkFBeVIsTUFBTTtBQUFBLEVBQy9SLHdUQUF3VCxNQUFNO0FBQUEsRUFDOVQsNFBBQTRQLE1BQU07QUFBQSxFQUNsUSxzYkFBc2IsTUFBTTtBQUFBLEVBQzViLDRLQUE0SyxNQUFNO0FBQUEsRUFDbEwscVBBQXFQLE1BQU07QUFBQSxFQUMzUCxtVUFBbVUsTUFBTTtBQUFBLEVBQ3pVLDJNQUEyTSxNQUFNO0FBQUEsRUFDak4sb01BQW9NLE1BQU07QUFBQSxFQUMxTSwwSUFBMEksTUFBTTtBQUFBLEVBQ2hKLDJLQUEySyxNQUFNO0FBQUEsRUFDakwseVBBQXlQLE1BQU07QUFBQSxFQUMvUCx5WkFBeVosTUFBTTtBQUFBLEVBQy9aLDJUQUEyVCxNQUFNO0FBQUEsRUFDalUsNkhBQTZILE1BQU07QUFBQSxFQUNuSSxrTUFBa00sTUFBTTtBQUFBLEVBQ3hNLDhVQUE4VSxNQUFNO0FBQUEsRUFDcFYsMlJBQTJSLE1BQU07QUFBQSxFQUNqUyxrRkFBa0YsTUFBTTtBQUFBLEVBQ3hGLDBUQUEwVCxNQUFNO0FBQUEsRUFDaFUsaUtBQWlLLE1BQU07QUFBQSxFQUN2SywrS0FBK0ssTUFBTTtBQUFBLEVBQ3JMLDJjQUEyYyxNQUFNO0FBQUEsRUFDamQseUtBQXlLLE1BQU07QUFBQSxFQUMvSyx1TkFBdU4sTUFBTTtBQUFBLEVBQzdOLHFOQUFxTixNQUFNO0FBQUEsRUFDM04seU9BQXlPLE1BQU07QUFBQSxFQUMvTywySEFBMkgsTUFBTTtBQUFBLEVBQ2pJLHFHQUFxRyxNQUFNO0FBQUEsRUFDM0csNFNBQTRTLE1BQU07QUFBQSxFQUNsVCwyVEFBMlQsTUFBTTtBQUFBLEVBQ2pVLGlQQUFpUCxNQUFNO0FBQUEsRUFDdlAseWhCQUF5aEIsTUFBTTtBQUFBLEVBQy9oQiw2SUFBNkksTUFBTTtBQUFBLEVBQ25KLGtTQUFrUyxNQUFNO0FBQUEsRUFDeFMsdU1BQXVNLE1BQU07QUFBQSxFQUM3TSxpUkFBaVIsTUFBTTtBQUFBLEVBQ3ZSLHNkQUFzZCxNQUFNO0FBQUEsRUFDNWQsNlFBQTZRLE1BQU07QUFBQSxFQUNuUix3S0FBd0ssTUFBTTtBQUFBLEVBQzlLLGtIQUFrSCxNQUFNO0FBQUEsRUFDeEgsa1JBQWtSLE1BQU07QUFBQSxFQUN4Uix5VkFBeVYsTUFBTTtBQUFBLEVBQy9WLHVlQUF1ZSxNQUFNO0FBQUEsRUFDN2UsK1RBQStULE1BQU07QUFBQSxFQUNyVSw4TUFBOE0sTUFBTTtBQUFBLEVBQ3BOLDZLQUE2SyxNQUFNO0FBQUEsRUFDbkwsZ0lBQWdJLE1BQU07QUFBQSxFQUN0SSxtVkFBbVYsTUFBTTtBQUFBLEVBQ3pWLGtWQUFrVixNQUFNO0FBQUEsRUFDeFYsMFdBQTBXLE1BQU07QUFBQSxFQUNoWCx1T0FBdU8sTUFBTTtBQUFBLEVBQzdPLDJMQUEyTCxNQUFNO0FBQUEsRUFDak0sOE1BQThNLE1BQU07QUFBQSxFQUNwTixtYkFBbWIsTUFBTTtBQUFBLEVBQ3piLHFqQkFBcWpCLE1BQU07QUFBQSxFQUMzakIscVdBQXFXLE1BQU07QUFBQSxFQUMzVywrVkFBK1YsTUFBTTtBQUFBLEVBQ3JXLGdYQUFnWCxNQUFNO0FBQUEsRUFDdFgsOE9BQThPLE1BQU07QUFBQSxFQUNwUCx5R0FBeUcsTUFBTTtBQUFBLEVBQy9HLHdnQkFBd2dCLE1BQU07QUFBQSxFQUM5Z0IseUlBQXlJLE1BQU07QUFBQSxFQUMvSSx5UkFBeVIsTUFBTTtBQUFBLEVBQy9SLDhJQUE4SSxNQUFNO0FBQUEsRUFDcEoseU1BQXlNLE1BQU07QUFBQSxFQUMvTSxtZ0JBQW1nQixNQUFNO0FBQUEsRUFDemdCLDJaQUEyWixNQUFNO0FBQUEsRUFDamEsaVhBQWlYLE1BQU07QUFBQSxFQUN2WCw0SUFBNEksTUFBTTtBQUFBLEVBQ2xKLG1MQUFtTCxNQUFNO0FBQUEsRUFDekwsbUxBQW1MLE1BQU07QUFBQSxFQUN6TCxxYkFBcWIsTUFBTTtBQUFBLEVBQzNiLDBPQUEwTyxNQUFNO0FBQUEsRUFDaFAsb2FBQW9hLE1BQU07QUFBQSxFQUMxYSwrS0FBK0ssTUFBTTtBQUFBLEVBQ3JMLGtKQUFrSixNQUFNO0FBQUEsRUFDeEosc0pBQXNKLE1BQU07QUFBQSxFQUM1SixvSEFBb0gsTUFBTTtBQUFBLEVBQzFILHFKQUFxSixNQUFNO0FBQUEsRUFDM0osc1RBQXNULE1BQU07QUFBQSxFQUM1VCx3UUFBd1EsTUFBTTtBQUFBLEVBQzlRLHdTQUF3UyxNQUFNO0FBQUEsRUFDOVMsNGtCQUE0a0IsTUFBTTtBQUFBLEVBQ2xsQixtUUFBbVEsTUFBTTtBQUFBLEVBQ3pRLHVNQUF1TSxNQUFNO0FBQUEsRUFDN00sZ0dBQWdHLE1BQU07QUFBQSxFQUN0RywyTkFBMk4sTUFBTTtBQUFBLEVBQ2pPLGdXQUFnVyxNQUFNO0FBQUEsRUFDdFcsZ01BQWdNLE1BQU07QUFBQSxFQUN0TSw4SUFBOEksTUFBTTtBQUFBLEVBQ3BKLDBTQUEwUyxNQUFNO0FBQUEsRUFDaFQsb09BQW9PLE1BQU07QUFBQSxFQUMxTywrSkFBK0osTUFBTTtBQUFBLEVBQ3JLLDBaQUEwWixNQUFNO0FBQUEsRUFDaGEsc0dBQXNHLE1BQU07QUFBQSxFQUM1Ryw2UEFBNlAsTUFBTTtBQUFBLEVBQ25RLHlUQUF5VCxNQUFNO0FBQUEsRUFDL1QsNEZBQTRGLE1BQU07QUFBQSxFQUNsRywrSkFBK0osTUFBTTtBQUFBLEVBQ3JLLDBUQUEwVCxNQUFNO0FBQUEsRUFDaFUsOExBQThMLE1BQU07QUFBQSxFQUNwTSw0S0FBNEssTUFBTTtBQUFBLEVBQ2xMLCtMQUErTCxNQUFNO0FBQUEsRUFDck0sd09BQXdPLE1BQU07QUFBQSxFQUM5TyxzS0FBc0ssTUFBTTtBQUFBLEVBQzVLLDhPQUE4TyxNQUFNO0FBQUEsRUFDcFAsbUlBQW1JLE1BQU07QUFBQSxFQUN6SSwrSEFBK0gsTUFBTTtBQUFBLEVBQ3JJLDJKQUEySixNQUFNO0FBQUEsRUFDaksscVNBQXFTLE1BQU07QUFBQSxFQUMzUywwTEFBMEwsTUFBTTtBQUFBLEVBQ2hNLGtNQUFrTSxNQUFNO0FBQUEsRUFDeE0sdUtBQXVLLE1BQU07QUFBQSxFQUM3SyxrRUFBa0UsTUFBTTtBQUFBLEVBQ3hFLHdFQUF3RSxNQUFNO0FBQUEsRUFDOUUsa1RBQWtULE1BQU07QUFBQSxFQUN4VCxrUkFBa1IsTUFBTTtBQUFBLEVBQ3hSLDJLQUEySyxNQUFNO0FBQUEsRUFDakwsK0dBQStHLE1BQU07QUFBQSxFQUNySCxvR0FBb0csTUFBTTtBQUFBLEVBQzFHLGlJQUFpSSxNQUFNO0FBQUEsRUFDdkksd1dBQXdXLE1BQU07QUFBQSxFQUM5Vyw0WEFBNFgsTUFBTTtBQUFBLEVBQ2xZLCtGQUErRixNQUFNO0FBQUEsRUFDckcsNEdBQTRHLE1BQU07QUFBQSxFQUNsSCwwRkFBMEYsTUFBTTtBQUFBLEVBQ2hHLDRGQUE0RixNQUFNO0FBQUEsRUFDbEcsMEZBQTBGLE1BQU07QUFBQSxFQUNoRyw4RkFBOEYsTUFBTTtBQUFBLEVBQ3BHLHFOQUFxTixNQUFNO0FBQUEsRUFDM04sNlFBQTZRLE1BQU07QUFBQSxFQUNuUixzUEFBc1AsTUFBTTtBQUFBLEVBQzVQLDZhQUE2YSxNQUFNO0FBQUEsRUFDbmIsc1JBQXNSLE1BQU07QUFBQSxFQUM1Uix1UUFBdVEsTUFBTTtBQUFBLEVBQzdRLDBLQUEwSyxNQUFNO0FBQUEsRUFDaEwsbUtBQW1LLE1BQU07QUFBQSxFQUN6SyxpVUFBaVUsTUFBTTtBQUFBLEVBQ3ZVLDhUQUE4VCxNQUFNO0FBQUEsRUFDcFUscUxBQXFMLE1BQU07QUFBQSxFQUMzTCw2S0FBNkssTUFBTTtBQUFBLEVBQ25MLG9aQUFvWixNQUFNO0FBQUEsRUFDMVosNkxBQTZMLE1BQU07QUFBQSxFQUNuTSxzTUFBc00sTUFBTTtBQUFBLEVBQzVNLHlQQUF5UCxNQUFNO0FBQUEsRUFDL1AsK01BQStNLE1BQU07QUFBQSxFQUNyTiwrK0JBQSsrQixNQUFNO0FBQUEsRUFDci9CLGdIQUFnSCxNQUFNO0FBQUEsRUFDdEgsNktBQTZLLE1BQU07QUFBQSxFQUNuTCxpS0FBaUssTUFBTTtBQUFBLEVBQ3ZLLHVLQUF1SyxNQUFNO0FBQUEsRUFDN0ssc0tBQXNLLE1BQU07QUFBQSxFQUM1SywwWEFBMFgsTUFBTTtBQUFBLEVBQ2hZLG1iQUFtYixNQUFNO0FBQUEsRUFDemIsOFBBQThQLE1BQU07QUFBQSxFQUNwUSxxYUFBcWEsTUFBTTtBQUFBLEVBQzNhLDBPQUEwTyxNQUFNO0FBQUEsRUFDaFAsMHpCQUEwekIsTUFBTTtBQUFBLEVBQ2gwQiwya0JBQTJrQixNQUFNO0FBQUEsRUFDamxCLDRVQUE0VSxNQUFNO0FBQUEsRUFDbFYsd0pBQXdKLE1BQU07QUFBQSxFQUM5Six5WEFBeVgsTUFBTTtBQUFBLEVBQy9YLGlMQUFpTCxNQUFNO0FBQUEsRUFDdkwsME1BQTBNLE1BQU07QUFBQSxFQUNoTixrUUFBa1EsTUFBTTtBQUFBLEVBQ3hRLGlMQUFpTCxNQUFNO0FBQUEsRUFDdkwsMEhBQTBILE1BQU07QUFBQSxFQUNoSSw2UkFBNlIsTUFBTTtBQUFBLEVBQ25TLGdSQUFnUixNQUFNO0FBQUEsRUFDdFIsdVFBQXVRLE1BQU07QUFBQSxFQUM3USxpVEFBaVQsTUFBTTtBQUFBLEVBQ3ZULHdQQUF3UCxNQUFNO0FBQUEsRUFDOVAsdU1BQXVNLE1BQU07QUFBQSxFQUM3TSwyR0FBMkcsTUFBTTtBQUFBLEVBQ2pILCtKQUErSixNQUFNO0FBQUEsRUFDckssdUhBQXVILE1BQU07QUFBQSxFQUM3SCxrSUFBa0ksTUFBTTtBQUFBLEVBQ3hJLDBKQUEwSixNQUFNO0FBQUEsRUFDaEssd0tBQXdLLE1BQU07QUFBQSxFQUM5Syw0R0FBNEcsTUFBTTtBQUFBLEVBQ2xILDRHQUE0RyxNQUFNO0FBQUEsRUFDbEgsNEdBQTRHLE1BQU07QUFBQSxFQUNsSCwyU0FBMlMsTUFBTTtBQUFBLEVBQ2pULHdOQUF3TixNQUFNO0FBQUEsRUFDOU4sMlJBQTJSLE1BQU07QUFBQSxFQUNqUyw4UkFBOFIsTUFBTTtBQUFBLEVBQ3BTLDBOQUEwTixNQUFNO0FBQUEsRUFDaE8sK1VBQStVLE1BQU07QUFBQSxFQUNyVixrZUFBa2UsTUFBTTtBQUFBLEVBQ3hlLHlTQUF5UyxNQUFNO0FBQUEsRUFDL1MsNktBQTZLLE1BQU07QUFBQSxFQUNuTCwrSUFBK0ksTUFBTTtBQUFBLEVBQ3JKLHdTQUF3UyxNQUFNO0FBQUEsRUFDOVMsb2RBQW9kLE1BQU07QUFBQSxFQUMxZCwyTkFBMk4sTUFBTTtBQUFBLEVBQ2pPLG9ZQUFvWSxNQUFNO0FBQUEsRUFDMVksK1lBQStZLE1BQU07QUFBQSxFQUNyWix3WkFBd1osTUFBTTtBQUFBLEVBQzlaLDJYQUEyWCxNQUFNO0FBQUEsRUFDalksME9BQTBPLE1BQU07QUFBQSxFQUNoUCxpYkFBaWIsTUFBTTtBQUFBLEVBQ3ZiLDBLQUEwSyxNQUFNO0FBQUEsRUFDaEwsMExBQTBMLE1BQU07QUFBQSxFQUNoTSw0UEFBNFAsTUFBTTtBQUFBLEVBQ2xRLDJOQUEyTixNQUFNO0FBQUEsRUFDak8sa01BQWtNLE1BQU07QUFBQSxFQUN4TSxpTkFBaU4sTUFBTTtBQUFBLEVBQ3ZOLGl2QkFBaXZCLE1BQU07QUFBQSxFQUN2dkIsbVpBQW1aLE1BQU07QUFBQSxFQUN6WixrU0FBa1MsTUFBTTtBQUFBLEVBQ3hTLGdiQUFnYixNQUFNO0FBQUEsRUFDdGIsb0xBQW9MLE1BQU07QUFBQSxFQUMxTCwrZEFBK2QsTUFBTTtBQUFBLEVBQ3JlLDBRQUEwUSxNQUFNO0FBQUEsRUFDaFIsa0xBQWtMLE1BQU07QUFBQSxFQUN4TCxzUEFBc1AsTUFBTTtBQUFBLEVBQzVQLGtXQUFrVyxNQUFNO0FBQUEsRUFDeFcsME5BQTBOLE1BQU07QUFBQSxFQUNoTywwVUFBMFUsTUFBTTtBQUFBLEVBQ2hWLDJXQUEyVyxNQUFNO0FBQUEsRUFDalgsc0xBQXNMLE1BQU07QUFBQSxFQUM1TCxxVUFBcVUsTUFBTTtBQUFBLEVBQzNVLDJVQUEyVSxNQUFNO0FBQUEsRUFDalYsc2tCQUFza0IsTUFBTTtBQUFBLEVBQzVrQiwwU0FBMFMsTUFBTTtBQUFBLEVBQ2hULDJKQUEySixNQUFNO0FBQUEsRUFDakssNEdBQTRHLE1BQU07QUFBQSxFQUNsSCw2SUFBNkksTUFBTTtBQUFBLEVBQ25KLGdJQUFnSSxNQUFNO0FBQUEsRUFDdEksMkdBQTJHLE1BQU07QUFBQSxFQUNqSCwyR0FBMkcsTUFBTTtBQUFBLEVBQ2pILCtIQUErSCxNQUFNO0FBQUEsRUFDckkseVFBQXlRLE1BQU07QUFBQSxFQUMvUSwwTUFBME0sTUFBTTtBQUFBLEVBQ2hOLCtXQUErVyxNQUFNO0FBQUEsRUFDclgsaWFBQWlhLE1BQU07QUFBQSxFQUN2YSxnV0FBZ1csTUFBTTtBQUFBLEVBQ3RXLG9HQUFvRyxNQUFNO0FBQUEsRUFDMUcsd0dBQXdHLE1BQU07QUFBQSxFQUM5RywySEFBMkgsTUFBTTtBQUFBLEVBQ2pJLHNMQUFzTCxNQUFNO0FBQUEsRUFDNUwseU1BQXlNLE1BQU07QUFBQSxFQUMvTSxvT0FBb08sTUFBTTtBQUFBLEVBQzFPLDBRQUEwUSxNQUFNO0FBQUEsRUFDaFIsMFFBQTBRLE1BQU07QUFBQSxFQUNoUixzUkFBc1IsTUFBTTtBQUFBLEVBQzVSLHFOQUFxTixNQUFNO0FBQUEsRUFDM04sNlBBQTZQLE1BQU07QUFBQSxFQUNuUSxrSkFBa0osTUFBTTtBQUFBLEVBQ3hKLHNMQUFzTCxNQUFNO0FBQUEsRUFDNUwsd1BBQXdQLE1BQU07QUFBQSxFQUM5UCw2TUFBNk0sTUFBTTtBQUFBLEVBQ25OLHNPQUFzTyxNQUFNO0FBQUEsRUFDNU8sMkhBQTJILE1BQU07QUFBQSxFQUNqSSw0TUFBNE0sTUFBTTtBQUFBLEVBQ2xOLHFJQUFxSSxNQUFNO0FBQUEsRUFDM0ksd0pBQXdKLE1BQU07QUFBQSxFQUM5Siw2SkFBNkosTUFBTTtBQUFBLEVBQ25LLHVKQUF1SixNQUFNO0FBQUEsRUFDN0osME9BQTBPLE1BQU07QUFBQSxFQUNoUCx1TkFBdU4sTUFBTTtBQUFBLEVBQzdOLDRLQUE0SyxNQUFNO0FBQUEsRUFDbEwsOEtBQThLLE1BQU07QUFBQSxFQUNwTCxtVEFBbVQsTUFBTTtBQUFBLEVBQ3pULHNhQUFzYSxNQUFNO0FBQUEsRUFDNWEsNFhBQTRYLE1BQU07QUFBQSxFQUNsWSx1WUFBdVksTUFBTTtBQUFBLEVBQzdZLDBKQUEwSixNQUFNO0FBQUEsRUFDaEssMFlBQTBZLE1BQU07QUFBQSxFQUNoWixvRkFBb0YsTUFBTTtBQUFBLEVBQzFGLHdGQUF3RixNQUFNO0FBQUEsRUFDOUYsZ0ZBQWdGLE1BQU07QUFBQSxFQUN0RixvS0FBb0ssTUFBTTtBQUFBLEVBQzFLLDhMQUE4TCxNQUFNO0FBQUEsRUFDcE0sNkxBQTZMLE1BQU07QUFBQSxFQUNuTSxzT0FBc08sTUFBTTtBQUFBLEVBQzVPLCtNQUErTSxNQUFNO0FBQUEsRUFDck4sd0lBQXdJLE1BQU07QUFBQSxFQUM5SSwyR0FBMkcsTUFBTTtBQUFBLEVBQ2pILHNLQUFzSyxNQUFNO0FBQUEsRUFDNUssbU9BQW1PLE1BQU07QUFBQSxFQUN6Tyw0R0FBNEcsTUFBTTtBQUFBLEVBQ2xILG1KQUFtSixNQUFNO0FBQUEsRUFDekosNklBQTZJLE1BQU07QUFBQSxFQUNuSiw2TEFBNkwsTUFBTTtBQUFBLEVBQ25NLG9HQUFvRyxNQUFNO0FBQUEsRUFDMUcsc0xBQXNMLE1BQU07QUFBQSxFQUM1TCw2R0FBNkcsTUFBTTtBQUFBLEVBQ25ILHFaQUFxWixNQUFNO0FBQUEsRUFDM1osK0tBQStLLE1BQU07QUFBQSxFQUNyTCwyS0FBMkssTUFBTTtBQUFBLEVBQ2pMLHNjQUFzYyxNQUFNO0FBQUEsRUFDNWMsaU5BQWlOLE1BQU07QUFBQSxFQUN2TixrUkFBa1IsTUFBTTtBQUFBLEVBQ3hSLDBMQUEwTCxNQUFNO0FBQUEsRUFDaE0saUpBQWlKLE1BQU07QUFBQSxFQUN2SiwwUUFBMFEsTUFBTTtBQUFBLEVBQ2hSLDRKQUE0SixNQUFNO0FBQUEsRUFDbEssd2RBQXdkLE1BQU07QUFBQSxFQUM5ZCxrUkFBa1IsTUFBTTtBQUFBLEVBQ3hSLDZRQUE2USxNQUFNO0FBQUEsRUFDblIseUlBQXlJLE1BQU07QUFBQSxFQUMvSSx5R0FBeUcsTUFBTTtBQUFBLEVBQy9HLDJlQUEyZSxNQUFNO0FBQUEsRUFDamYsbUlBQW1JLE1BQU07QUFBQSxFQUN6SSx3TEFBd0wsTUFBTTtBQUFBLEVBQzlMLDZOQUE2TixNQUFNO0FBQUEsRUFDbk8sNlNBQTZTLE1BQU07QUFBQSxFQUNuVCw0SUFBNEksTUFBTTtBQUFBLEVBQ2xKLGlMQUFpTCxNQUFNO0FBQUEsRUFDdkwsd0xBQXdMLE1BQU07QUFBQSxFQUM5TCxtSUFBbUksTUFBTTtBQUFBLEVBQ3pJLHl0QkFBeXRCLE1BQU07QUFBQSxFQUMvdEIsb3NDQUFvc0MsTUFBTTtBQUFBLEVBQzFzQyxnYUFBZ2EsTUFBTTtBQUFBLEVBQ3RhLHliQUF5YixNQUFNO0FBQUEsRUFDL2Isa2FBQWthLE1BQU07QUFBQSxFQUN4YSx3TUFBd00sTUFBTTtBQUFBLEVBQzlNLHlWQUF5VixNQUFNO0FBQUEsRUFDL1Ysd1JBQXdSLE1BQU07QUFBQSxFQUM5UiwwSUFBMEksTUFBTTtBQUFBLEVBQ2hKLGdIQUFnSCxNQUFNO0FBQUEsRUFDdEgsZ1pBQWdaLE1BQU07QUFBQSxFQUN0Wiw2ZUFBNmUsTUFBTTtBQUFBLEVBQ25mLHFIQUFxSCxNQUFNO0FBQUEsRUFDM0gsdU9BQXVPLE1BQU07QUFBQSxFQUM3Tyx3ZEFBd2QsTUFBTTtBQUFBLEVBQzlkLDhTQUE4UyxNQUFNO0FBQUEsRUFDcFQsZ0xBQWdMLE1BQU07QUFBQSxFQUN0TCwyTEFBMkwsTUFBTTtBQUFBLEVBQ2pNLGdMQUFnTCxNQUFNO0FBQUEsRUFDdEwsMElBQTBJLE1BQU07QUFBQSxFQUNoSixnTkFBZ04sTUFBTTtBQUFBLEVBQ3ROLG1RQUFtUSxNQUFNO0FBQUEsRUFDelEsOEhBQThILE1BQU07QUFBQSxFQUNwSSw0V0FBNFcsTUFBTTtBQUFBLEVBQ2xYLGlQQUFpUCxNQUFNO0FBQUEsRUFDdlAsMlFBQTJRLE1BQU07QUFBQSxFQUNqUixzWUFBc1ksTUFBTTtBQUFBLEVBQzVZLG1NQUFtTSxNQUFNO0FBQUEsRUFDek0seUtBQXlLLE1BQU07QUFBQSxFQUMvSyxrVkFBa1YsTUFBTTtBQUFBLEVBQ3hWLGdLQUFnSyxNQUFNO0FBQUEsRUFDdEssb0tBQW9LLE1BQU07QUFBQSxFQUMxSyxxT0FBcU8sTUFBTTtBQUFBLEVBQzNPLG9OQUFvTixNQUFNO0FBQUEsRUFDMU4sMEtBQTBLLE1BQU07QUFBQSxFQUNoTCxpS0FBaUssTUFBTTtBQUFBLEVBQ3ZLLDJKQUEySixNQUFNO0FBQUEsRUFDaksscUpBQXFKLE1BQU07QUFBQSxFQUMzSixxTkFBcU4sTUFBTTtBQUFBLEVBQzNOLDZNQUE2TSxNQUFNO0FBQUEsRUFDbk4sbU1BQW1NLE1BQU07QUFBQSxFQUN6TSwyTEFBMkwsTUFBTTtBQUFBLEVBQ2pNLDJOQUEyTixNQUFNO0FBQUEsRUFDak8sMk5BQTJOLE1BQU07QUFBQSxFQUNqTyw2VUFBNlUsTUFBTTtBQUFBLEVBQ25WLCtYQUErWCxNQUFNO0FBQUEsRUFDclksMFZBQTBWLE1BQU07QUFBQSxFQUNoVyxvR0FBb0csTUFBTTtBQUFBLEVBQzFHLDZJQUE2SSxNQUFNO0FBQUEsRUFDbkoscU1BQXFNLE1BQU07QUFBQSxFQUMzTSxxSkFBcUosTUFBTTtBQUFBLEVBQzNKLG9IQUFvSCxNQUFNO0FBQUEsRUFDMUgsZ1RBQWdULE1BQU07QUFBQSxFQUN0VCxrSUFBa0ksTUFBTTtBQUFBLEVBQ3hJLHFJQUFxSSxNQUFNO0FBQUEsRUFDM0kseUxBQXlMLE1BQU07QUFBQSxFQUMvTCx5SUFBeUksTUFBTTtBQUFBLEVBQy9JLG1JQUFtSSxNQUFNO0FBQUEsRUFDekksd0xBQXdMLE1BQU07QUFBQSxFQUM5TCwwTkFBME4sTUFBTTtBQUFBLEVBQ2hPLHdRQUF3USxNQUFNO0FBQUEsRUFDOVEsMEdBQTBHLE1BQU07QUFBQSxFQUNoSCw2WUFBNlksTUFBTTtBQUFBLEVBQ25aLCtMQUErTCxNQUFNO0FBQUEsRUFDck0scU9BQXFPLE1BQU07QUFBQSxFQUMzTywrUUFBK1EsTUFBTTtBQUFBLEVBQ3JSLDRUQUE0VCxNQUFNO0FBQUEsRUFDbFUsK05BQStOLE1BQU07QUFBQSxFQUNyTyw4TkFBOE4sTUFBTTtBQUFBLEVBQ3BPLDhOQUE4TixNQUFNO0FBQUEsRUFDcE8sMk1BQTJNLE1BQU07QUFBQSxFQUNqTix5VkFBeVYsTUFBTTtBQUFBLEVBQy9WLHVWQUF1VixNQUFNO0FBQUEsRUFDN1YsOEtBQThLLE1BQU07QUFBQSxFQUNwTCxtNEJBQW00QixNQUFNO0FBQUEsRUFDejRCLDhUQUE4VCxNQUFNO0FBQUEsRUFDcFUsMklBQTJJLE1BQU07QUFBQSxFQUNqSix3VkFBd1YsTUFBTTtBQUFBLEVBQzlWLG9LQUFvSyxNQUFNO0FBQUEsRUFDMUssZ09BQWdPLE1BQU07QUFBQSxFQUN0TywyZkFBMmYsTUFBTTtBQUFBLEVBQ2pnQixvWEFBb1gsTUFBTTtBQUFBLEVBQzFYLHdLQUF3SyxNQUFNO0FBQUEsRUFDOUssbVBBQW1QLE1BQU07QUFBQSxFQUN6UCx3V0FBd1csTUFBTTtBQUFBLEVBQzlXLHlNQUF5TSxNQUFNO0FBQUEsRUFDL00sZ2NBQWdjLE1BQU07QUFBQSxFQUN0Yyx1YkFBdWIsTUFBTTtBQUFBLEVBQzdiLHNJQUFzSSxNQUFNO0FBQ2hKO0FBNnJFTyxnQkFBUyxRQUFRLFFBQWdCO0FBQ3RDLFNBQVEsVUFBa0IsTUFBTSxLQUFLLENBQUM7QUFDeEM7IiwibmFtZXMiOltdfQ== |