/// /// /// /// /// /// var Configs; (function (Configs) { Configs.pluginName = "Configs"; Configs.context = "/config"; Configs.pluginPath = 'plugins/configs/'; Configs.templatePath = Configs.pluginPath + 'html/'; Configs._module = angular.module(Configs.pluginName, ['hawtio-core', 'hawtio-ui', 'ui.codemirror', 'nvd3', 'ngTable', 'ngDialog']); Configs.route = PluginHelpers.createRoutingFunction(Configs.templatePath); Configs.controller = PluginHelpers.createControllerFunction(Configs._module, Configs.pluginName); Configs._module.config(['$provide', '$routeProvider', function ($provide, $routeProvider) { $routeProvider.when(UrlHelpers.join(Configs.context, 'gluster-fs/setting'), Configs.route('glusterfsSetting.html', false)) .when(UrlHelpers.join(Configs.context, 'kube-cluster/setting'), Configs.route('kubeClusterSetting.html', false)) .when(Configs.context, { redirectTo: UrlHelpers.join(Configs.context, '/kube-cluster/setting') }); }]); Configs._module.run(['viewRegistry', '$templateCache', 'HawtioExtension', '$compile', function (viewRegistry, $templateCache, ext, $compile) { ext.add('config-setting', function ($scope) { var template = $templateCache.get(UrlHelpers.join(Configs.templatePath, "configMenuItem.html")); return $compile(template)($scope); }); viewRegistry['config'] = Configs.templatePath + "shareLayout.html"; }]); Configs._module.directive('gfsConfigTable', [function () { return { restrict: 'AE', replace: true, scope: { tableTitle: '=', tableContent: '=' }, template: "\n \n \n \n \n \t\n \n
\n \t{{column.title}}\n
\n \t\t{{col.title}}\n \t
\n ", link: function (scope, element, attr) { } }; }]); hawtioPluginLoader.addModule(Configs.pluginName); })(Configs || (Configs = {})); /// /// var Configs; (function (Configs) { //字节大小转换成字符大小 function getStringSize(size) { var result = size; var suffix = ["B", "KB", "MB", "GB", "TB", "PB"]; var count = 1; while (result >= 1024) { result = result / 1024; count++; } return result.toFixed(2) + suffix[count]; } function formatVolume(volume) { volume["formatTotalSize"] = getStringSize(volume.allSize); volume["formatUsedSize"] = getStringSize(volume.usedSize); volume["editable"] = false; angular.forEach(volume.brick, function (brock) { brock["formatUsedSize"] = getStringSize(brock.usedSize); brock["formatAllSize"] = getStringSize(brock.availableSize); brock["editable"] = false; }); } function formatVolumes(volumes) { angular.forEach(volumes, function (volume) { formatVolume(volume); }); } Configs.formatVolumes = formatVolumes; function IsBrockEquals(brock1, brock2) { return brock1.ip == brock2.ip && brock1.path == brock2.path; } /** 刪除volume中指定的brock */ function deleteBrock(volume, brock) { for (var i = 0; i < volume.brick.length; i++) { var brick = volume.brick[i]; if (IsBrockEquals(brick, brock)) { volume.brick.splice(i, 1); break; } } } Configs.deleteBrock = deleteBrock; /** volume添加brock */ function addBrock(volume, brock) { if (brock != null && brock != undefined) volume.brick.push(brock); } Configs.addBrock = addBrock; var ConfigsModelService = (function () { function ConfigsModelService() { this.cluster = []; this.oracleParam = []; this.systemInfo = []; this.regionalismInfo = []; this.updateAllData(); } ConfigsModelService.prototype.updateAllData = function () { this.updateVolumeData(); this.updateOracleParam(); //this.updateCodeInfo(); }; ConfigsModelService.prototype.updateVolumeData = function () { var result = null; $.ajax({ async: false, type: "POST", url: "/java/console/api/volume/list", success: function (data) { if (data) { result = data; } } }); this.cluster = JSON.parse(result); formatVolumes(this.cluster); }; /*public updateCodeInfo(){ var result=null; $.ajax({ async: false, type : "POST", url : "/java/console/api/code/list", success : function(data) { if(data){ result = data; } } }); this.regionalismInfo = result.regionalism; this.systemInfo = result.system; }*/ ConfigsModelService.prototype.updateOracleParam = function () { var result = null; $.ajax({ async: false, type: "POST", url: "/java/console/api/oracle/list", success: function (data) { if (data) { result = data; } } }); this.oracleParam = result; }; ConfigsModelService.prototype.getFolderByVolumeName = function (name) { if (this.cluster === null) return null; for (var i = 0; i < this.cluster.length; i++) { if (this.cluster[i].name === name) return this.cluster[i].folder; } }; return ConfigsModelService; }()); Configs.ConfigsModelService = ConfigsModelService; Configs._module.factory('ConfigsModel', ['$rootScope', '$http', '$location', '$resource', function ($rootScope, $http, $location, $resource) { var $scope = new ConfigsModelService(); return $scope; }]); })(Configs || (Configs = {})); /// var Developer; (function (Developer) { var log = Logger.get('developer-navigation'); function developBreadcrumb() { return { href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces"), label: "Teams", title: "View all the available teams", isActive: function (subTab, path) { return false; } }; } function operateBreadcrumb() { return { href: UrlHelpers.join(HawtioCore.documentBase(), "/namespaces"), label: "Manage", title: "Manage the projects and resources inside them" }; } function workspaceLink() { return UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", Kubernetes.currentKubernetesNamespace()); } Developer.workspaceLink = workspaceLink; function projectLink(projectId) { var link = workspaceLink(); if (projectId) { return UrlHelpers.join(link, "/projects", projectId); } else { return link; } } Developer.projectLink = projectLink; function createWorkspacesBreadcrumbs(developPerspective) { return [developBreadcrumb()]; } Developer.createWorkspacesBreadcrumbs = createWorkspacesBreadcrumbs; function createWorkspacesSubNavBars(developPerspective) { return activateCurrent([ developBreadcrumb(), operateBreadcrumb() ]); } Developer.createWorkspacesSubNavBars = createWorkspacesSubNavBars; function createWorkspaceBreadcrumbs(children, workspaceName) { if (children === void 0) { children = null; } if (workspaceName === void 0) { workspaceName = null; } var answer = createWorkspacesBreadcrumbs(true); if (!workspaceName) { workspaceName = Kubernetes.currentKubernetesNamespace(); } if (workspaceName) { answer.push({ href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces/", workspaceName), label: workspaceName, title: "View the project: " + workspaceName, isActive: function (subTab, path) { return false; } }); return processChildren(answer, children); } return answer; } Developer.createWorkspaceBreadcrumbs = createWorkspaceBreadcrumbs; function createEnvironmentBreadcrumbs($scope, $location, $routeParams) { var ns = Kubernetes.currentKubernetesNamespace(); var namespacesLink = UrlHelpers.join(HawtioCore.documentBase(), "/kubernetes/namespace"); var workspaceName = $routeParams.workspace; var project = $routeParams.project; var environment = $routeParams.namespace; if (workspaceName && project) { var projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", project); $scope.$projectLink = projectLink; $scope.$projectNamespaceLink = UrlHelpers.join(projectLink, "namespace", ns); namespacesLink = UrlHelpers.join(projectLink, "namespace"); var children = [ { href: UrlHelpers.join(projectLink, "environments"), label: "Environments", title: "View the environments for this project" }, { href: UrlHelpers.join(namespacesLink, ns, "apps"), label: function () { return environmentName(workspaceName, ns); }, title: "View the runtime of the workspace: " + ns } ]; return createProjectBreadcrumbs(project, children, workspaceName); } else if (workspaceName && environment && workspaceName != environment) { // find label for namespace environment var children = [ { href: environmentsLink(workspaceName), label: "Environments", title: "View the environments for this project" }, { href: environmentLink(workspaceName, environment), label: function () { return environmentName(workspaceName, environment); }, title: "View this environment" } ]; return createProjectBreadcrumbs(project, children, workspaceName); } else if (!workspaceName) { workspaceName = Kubernetes.currentKubernetesNamespace(); } var answer = createWorkspaceBreadcrumbs(workspaceName); answer.push({ href: UrlHelpers.join(HawtioCore.documentBase(), "workspaces", workspaceName, "namespace", ns, "apps"), label: 'Runtime', title: "View the runtime of the workspace: " + ns }); return activateCurrent(answer); } Developer.createEnvironmentBreadcrumbs = createEnvironmentBreadcrumbs; /** * Returns the name of the given environment namespace */ function environmentName(workspaceName, environment) { /*var model = Kubernetes.getKubernetesModel(); if (model) { return model.environmentName(workspaceName, environment); }*/ return environment; } function createProjectBreadcrumbs(projectName, children, workspaceName) { if (projectName === void 0) { projectName = null; } if (children === void 0) { children = null; } if (workspaceName === void 0) { workspaceName = null; } if (!workspaceName) { workspaceName = Kubernetes.currentKubernetesNamespace(); } var answer = createWorkspaceBreadcrumbs(null, workspaceName); if (workspaceName) { if (projectName) { answer.push({ href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects"), label: "Apps", title: "View all the apps in this project" }); answer.push({ href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName), label: projectName, title: "View the project: " + projectName }); } return processChildren(answer, children); } return answer; } Developer.createProjectBreadcrumbs = createProjectBreadcrumbs; function createProjectSettingsBreadcrumbs(projectName, workspaceName) { if (workspaceName === void 0) { workspaceName = null; } var children = []; if (!projectName) { children = [{ label: "New App", title: "Lets make a new app" }]; } return createProjectBreadcrumbs(projectName, children, workspaceName); } Developer.createProjectSettingsBreadcrumbs = createProjectSettingsBreadcrumbs; function createWorkspaceSubNavBars() { var workspaceName = Kubernetes.currentKubernetesNamespace(); return activateCurrent([ { href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName), label: "Dashboard", class: "fa fa-tachometer", title: "View the dashboard for the apps, environments and pipelines in this project" }, { href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "apps"), label: "Apps", class: "fa fa-rocket", title: "View the apps in this project" }, { isValid: function () { return Developer.jenkinsLink(); }, href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "jenkinsJob"), label: "Builds", class: "fa fa-code", title: "View the builds in this project" }, { href: environmentsLink(), label: "Environments", class: "fa fa-cubes", title: "View the environments for this project" }, { href: namespaceRuntimeLink(workspaceName), label: "Runtime", class: "fa fa-cube", title: "View the Runtime perspective for this project" } ]); } Developer.createWorkspaceSubNavBars = createWorkspaceSubNavBars; function namespaceRuntimeLink(workspaceName) { if (workspaceName === void 0) { workspaceName = null; } if (!workspaceName) { workspaceName = Kubernetes.currentKubernetesNamespace(); } return UrlHelpers.join(HawtioCore.documentBase(), "workspaces", workspaceName, "namespace", workspaceName, "apps"); } Developer.namespaceRuntimeLink = namespaceRuntimeLink; function createBuildsLink(workspaceName, projectName, jenkinsJobId) { workspaceName = workspaceName || Kubernetes.currentKubernetesNamespace(); return UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName, "jenkinsJob", jenkinsJobId); } /** * Creates a routing function that loads a template and inject the needed directives to properly * display/update the Developer module managed tabs and bread crumbs for when the route is active. * * Example Usage: * * var route = Developer.createTabRoutingFunction("/app/somedir"); * $routeProvider.when('/profiles', route('view.html', false, [{ * label: "Profiles", * title: "Browse the profiles of this project" * }] * )); * * @param baseURL * @returns {function(string, boolean=, Array=): {template: string, reloadOnSearch: boolean, controller: string|string|(function(any, ng.route.IRouteParamsService): undefined)[]}} */ function createTabRoutingFunction(baseURL) { return function (templateName, reloadOnSearch, children) { if (reloadOnSearch === void 0) { reloadOnSearch = true; } return { template: "
", reloadOnSearch: reloadOnSearch, controller: ["$scope", "$routeParams", function ($scope, $routeParams) { if ($routeParams["namespace"] == null) { log.error("The :namespace route parameter was not defined for the route."); } if ($routeParams["projectId"] == null) { log.error("The :projectId route parameter was not defined for the route."); } $scope.namespace = $routeParams["namespace"]; $scope.projectId = $routeParams["projectId"]; $scope.contentTemplateUrl = UrlHelpers.join(baseURL, templateName); $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.projectId, children); $scope.subTabConfig = Developer.createProjectSubNavBars($scope.projectId); }] }; }; } Developer.createTabRoutingFunction = createTabRoutingFunction; function createProjectSubNavBars(projectName, jenkinsJobId, $scope) { if (jenkinsJobId === void 0) { jenkinsJobId = null; } if ($scope === void 0) { $scope = null; } var workspaceName = Kubernetes.currentKubernetesNamespace(); var projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName); var buildsLink = UrlHelpers.join(projectLink, "builds"); if (!jenkinsJobId) { jenkinsJobId = projectName; } var jenkinsBuildLink = null; var pipelinesLink = null; if (projectName && jenkinsJobId) { jenkinsBuildLink = createBuildsLink(workspaceName, projectName, jenkinsJobId); pipelinesLink = UrlHelpers.join(jenkinsBuildLink, "pipelines"); } function isJenkinsBuild() { var answer = Developer.jenkinsLink() && jenkinsBuildLink; if (answer && $scope) { var entity = Developer.projectForScope($scope); if (entity) { return answer && entity.$jenkinsJob; } } return answer; } var answer = [ /* { href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName), label: "All Apps", class: 'fa fa-angle-double-left', title: "View the apps in this project" }, { template: `
` }, */ { href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName, "environments"), isActive: function (subTab, path) { var href = normalizeHref(subTab.href); //console.log("subTab: ", subTab, " path: ", path); if (path === href) { return true; } var rootPath = href.replace(/\/environments/, ''); if (path === rootPath) { return true; } return false; }, //href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName), label: "Dashboard", class: "fa fa-tachometer", title: "View the app dashboard for the activity, environments and pipelines" }, { isValid: function () { return isJenkinsBuild() && pipelinesLink; }, id: "pipelines", href: pipelinesLink, label: "Pipelines", class: "fa fa-ellipsis-h", title: "View the pipeline builds for this app" }, { isValid: function () { return !isJenkinsBuild(); }, href: buildsLink, label: "Builds", class: "fa fa-bars", title: "View the builds for this app" }, { isValid: function () { return isJenkinsBuild(); }, isActive: function (item, path) { if (path.indexOf('/log/') > 0) { return false; } if (path.indexOf('/jenkinsJob/') > 0) { return true; } return false; }, id: "builds", href: jenkinsBuildLink, label: "Builds", class: "fa fa-bars", title: "View the Jenkins builds for this app" }, { isValid: function () { return isJenkinsBuild(); }, href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName, "jenkinsJob", jenkinsJobId, "metrics"), label: "Metrics", class: "fa fa-bar-chart", title: "View the metrics for this project" }, /* { href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName, "tools"), label: "Tools", title: "View the tools for this project" }, */ { href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName, "buildConfigEdit"), label: "Settings", class: "fa fa-cog", title: "View the app configuration", isActive: function (subTab, path) { if (_.endsWith(path, '/buildConfigEdit')) { return true; } if (_.endsWith(path, '/forge/secrets')) { return true; } if (_.endsWith(path, '/forge/command/devops-edit')) { return true; } return false; } } ]; var context = { workspaceName: workspaceName, projectName: projectName, projectLink: projectLink, jenkinsJobId: jenkinsJobId, $scope: $scope }; angular.forEach(Developer.customProjectSubTabFactories, function (fn) { if (angular.isFunction(fn)) { var subtab = fn(context); if (subtab) { if (angular.isArray(subtab)) { angular.forEach(subtab, function (t) { answer.push(t); }); } else { answer.push(subtab); } } } }); return activateCurrent(answer); } Developer.createProjectSubNavBars = createProjectSubNavBars; function createProjectSettingsSubNavBars(projectName, jenkinsJobId) { if (jenkinsJobId === void 0) { jenkinsJobId = null; } if (!projectName) { return []; } var workspaceName = Kubernetes.currentKubernetesNamespace(); var projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName); if (!jenkinsJobId) { jenkinsJobId = projectName; } var answer = [ { href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName, "buildConfigEdit"), label: "Core", title: "View the core build configuration" }, { href: projectSecretsLink(workspaceName, projectName), label: "Secrets", title: "View or change the secrets used to edit source code in the source control system" }, { href: editPipelineLink(workspaceName, projectName), label: "Pipeline", title: "View the DevOps and pipeline configuration" }, { isValid: function () { return forgeProjectHasBuilder("maven"); }, href: editMavenBuildLink(workspaceName, projectName), label: "Maven", title: "View the Maven build configuration" } ]; return activateCurrent(answer); } Developer.createProjectSettingsSubNavBars = createProjectSettingsSubNavBars; function forgeProjectHasBuilder(name) { var forgeProject = Kubernetes.inject("ForgeProject"); if (forgeProject) { return forgeProject.hasBuilder(name); } return false; } Developer.forgeProjectHasBuilder = forgeProjectHasBuilder; function forgeProjectHasPerspective(name) { var forgeProject = Kubernetes.inject("ForgeProject"); if (forgeProject) { return forgeProject.hasPerspective(name); } return false; } Developer.forgeProjectHasPerspective = forgeProjectHasPerspective; function editPipelineLinkScope($scope) { return editPipelineLink($scope.namespace, $scope.projectId || $scope.projectName || $scope.project); } Developer.editPipelineLinkScope = editPipelineLinkScope; function createProjectLink(workspaceName) { if (workspaceName === void 0) { workspaceName = null; } if (!workspaceName) { workspaceName = Kubernetes.currentKubernetesNamespace(); } return UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "/forge/createProject"); } Developer.createProjectLink = createProjectLink; function editPipelineLink(workspaceName, projectName) { return projectWorkspaceLink(workspaceName, projectName, "forge/command/devops-edit"); } Developer.editPipelineLink = editPipelineLink; function editMavenBuildLink(workspaceName, projectName) { return projectWorkspaceLink(workspaceName, projectName, "forge/command/fabric8-setup"); } Developer.editMavenBuildLink = editMavenBuildLink; function projectSecretsLink(workspaceName, projectName) { return projectWorkspaceLink(workspaceName, projectName, "forge/secrets", false); } Developer.projectSecretsLink = projectSecretsLink; function secretsNamespaceLink(workspaceName, projectName, secretsNamespace) { var prefix = projectWorkspaceLink(workspaceName, projectName, "") || "kubernetes"; return UrlHelpers.join(prefix, "namespace", secretsNamespace, "secrets"); } Developer.secretsNamespaceLink = secretsNamespaceLink; function projectWorkspaceLink(workspaceName, projectName, path, ignoreBlankProject) { if (ignoreBlankProject === void 0) { ignoreBlankProject = true; } if (ignoreBlankProject && !projectName) { return ""; } if (!workspaceName) { workspaceName = Kubernetes.currentKubernetesNamespace(); } return UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName, path); } Developer.projectWorkspaceLink = projectWorkspaceLink; function environmentsLink(workspaceName) { if (workspaceName === void 0) { workspaceName = null; } if (!workspaceName) { workspaceName = Kubernetes.currentKubernetesNamespace(); } return UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "environments"); } Developer.environmentsLink = environmentsLink; function environmentLink(workspaceName, environmentNamespace, path, ignoreBlankProject) { if (path === void 0) { path = ""; } if (ignoreBlankProject === void 0) { ignoreBlankProject = true; } if (ignoreBlankProject && !environmentNamespace) { return ""; } if (!workspaceName) { workspaceName = Kubernetes.currentKubernetesNamespace(); } return UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "namespace", environmentNamespace, path); } Developer.environmentLink = environmentLink; Developer.customProjectSubTabFactories = []; function createJenkinsBreadcrumbs(projectName, jobId, buildId) { var workspaceName = Kubernetes.currentKubernetesNamespace(); var children = [ { id: "builds", href: createBuildsLink(workspaceName, projectName, jobId), label: "Builds", title: "View the builds for this app" } ]; if (buildId) { children.push({ id: "", href: "", label: "#" + buildId, title: "Build #" + buildId }); } return createProjectBreadcrumbs(projectName, children); } Developer.createJenkinsBreadcrumbs = createJenkinsBreadcrumbs; function createJenkinsSubNavBars(projectName, jenkinsJobId, buildId, extraOption) { if (extraOption === void 0) { extraOption = null; } var answer = createProjectSubNavBars(projectName, jenkinsJobId); if (extraOption) { // extraOption.active = true; answer.push(extraOption); } return answer; } Developer.createJenkinsSubNavBars = createJenkinsSubNavBars; function createEnvironmentSubNavBars($scope, $location, $routeParams) { var ns = Kubernetes.currentKubernetesNamespace(); var workspaceName = $routeParams.workspace; var project = $routeParams.project; var environment = $routeParams.namespace; var projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/kubernetes"); /*console.log("=====================") console.log(projectLink); if (workspaceName && project) { projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/kubernetes", workspaceName, "projects", project); } else { projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/kubernetes", workspaceName || ns); }*/ var namespacesLink = UrlHelpers.join(projectLink, "namespace"); return activateCurrent([ { href: UrlHelpers.join(namespacesLink, ns, "replicationControllers"), label: "服务管理", class: "fa fa-clone", title: "View the Replicas for this project" }, ]); } Developer.createEnvironmentSubNavBars = createEnvironmentSubNavBars; function environmentInstanceLink(env, projectName) { if (projectName === void 0) { projectName = null; } if (env) { var envNamespace = env["namespace"]; if (envNamespace) { if (projectName) { return UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", Kubernetes.currentKubernetesNamespace(), "projects", projectName, "namespace", envNamespace); } else { return UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", Kubernetes.currentKubernetesNamespace(), "namespace", envNamespace); } } } return ""; } Developer.environmentInstanceLink = environmentInstanceLink; function namespaceLink($scope, $routeParams, path) { if (path === void 0) { path = null; } var ns = Kubernetes.currentKubernetesNamespace(); var workspaceName = $routeParams.workspace; var project = $routeParams.project; var projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/kubernetes"); if (workspaceName && project) { projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", project); } return UrlHelpers.join(projectLink, "namespace", ns, path); } Developer.namespaceLink = namespaceLink; /** * Removes the URL query string if its inside the given text */ function trimQuery(text) { if (text) { var idx = text.indexOf("?"); if (idx >= 0) { return text.substring(0, idx); } } return text; } // Cater for the app running at some weird document base function normalizeHref(href) { if (!href) { return null; } var regex = new RegExp('^' + HawtioCore.documentBase().replace('/', '\\/')); return href.replace(regex, '/'); } Developer.normalizeHref = normalizeHref; function activateCurrent(navBarItems) { navBarItems = _.compact(navBarItems); var injector = HawtioCore.injector; var $location = injector ? injector.get("$location") : null; if ($location) { var path = normalizeHref(trimQuery($location.path())); var found = false; function makeActive(item) { item.active = true; found = true; } function getHref(item) { var href = item.href; var trimHref = trimQuery(href); return normalizeHref(trimHref); } angular.forEach(navBarItems, function (item) { if (!found && item) { if (angular.isFunction(item.isActive)) { if (item.isActive(item, path)) { makeActive(item); } } else { var trimHref = getHref(item); if (!trimHref) { return; } if (trimHref === path) { makeActive(item); } } } }); // Maybe it's a sub-item of a tab, let's fall back to that maybe if (!found) { angular.forEach(navBarItems, function (item) { if (!found) { if (!angular.isFunction(item.isActive)) { var trimHref = getHref(item); if (!trimHref) { return; } if (_.startsWith(path, trimHref)) { makeActive(item); } } } }); } // still not found, let's log it if (!found) { log.debug("No navigation tab found for path:", path); } } return navBarItems; } Developer.activateCurrent = activateCurrent; function processChildren(answer, children) { if (children) { if (angular.isArray(children)) { answer = answer.concat(children); } else { answer.push(children); } } activateCurrent(answer); return answer; } })(Developer || (Developer = {})); var Kubernetes; (function (Kubernetes) { var consts = (function () { function consts() { } Object.defineProperty(consts.prototype, "NAMESPACE_STORAGE_KEY", { get: function () { return "k8sSelectedNamespace"; }, enumerable: true, configurable: true }); return consts; }()); Kubernetes.consts = consts; Kubernetes.Constants = new consts(); var WatchTypes = (function () { function WatchTypes() { } Object.defineProperty(WatchTypes, "ENDPOINTS", { get: function () { return "endpoints"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "EVENTS", { get: function () { return "events"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "NAMESPACES", { get: function () { return "namespaces"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "NODES", { get: function () { return "nodes"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "PERSISTENT_VOLUMES", { get: function () { return "persistentvolumes"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "PERSISTENT_VOLUME_CLAIMS", { get: function () { return "persistentvolumeclaims"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "PODS", { get: function () { return "pods"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "REPLICATION_CONTROLLERS", { get: function () { return "replicationcontrollers"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "RESOURCE_QUOTAS", { get: function () { return "resourcequotas"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "OAUTH_CLIENTS", { get: function () { return "oauthclients"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "SECRETS", { get: function () { return "secrets"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "SERVICES", { get: function () { return "services"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "SERVICE_ACCOUNTS", { get: function () { return "serviceaccounts"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "TEMPLATES", { get: function () { return "templates"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "ROUTES", { get: function () { return "routes"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "BUILD_CONFIGS", { get: function () { return "buildconfigs"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "BUILDS", { get: function () { return "builds"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "DEPLOYMENT_CONFIGS", { get: function () { return "deploymentconfigs"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "IMAGE_STREAMS", { get: function () { return "imagestreams"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "POLICIES", { get: function () { return "policies"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "POLICY_BINDINGS", { get: function () { return "policybindings"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "PROJECTS", { get: function () { return "projects"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "ROLE_BINDINGS", { get: function () { return "rolebindings"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "ROLES", { get: function () { return "roles"; }, enumerable: true, configurable: true }); return WatchTypes; }()); Kubernetes.WatchTypes = WatchTypes; var NamespacedTypes = (function () { function NamespacedTypes() { } Object.defineProperty(NamespacedTypes, "k8sTypes", { get: function () { return [ WatchTypes.ENDPOINTS, WatchTypes.EVENTS, WatchTypes.NODES, WatchTypes.PERSISTENT_VOLUMES, WatchTypes.PERSISTENT_VOLUME_CLAIMS, WatchTypes.PODS, WatchTypes.REPLICATION_CONTROLLERS, WatchTypes.RESOURCE_QUOTAS, WatchTypes.PERSISTENT_VOLUMES, WatchTypes.SECRETS, WatchTypes.SERVICES, WatchTypes.SERVICE_ACCOUNTS ]; }, enumerable: true, configurable: true }); Object.defineProperty(NamespacedTypes, "osTypes", { get: function () { return [ WatchTypes.TEMPLATES, WatchTypes.BUILD_CONFIGS, WatchTypes.ROUTES, WatchTypes.BUILDS, WatchTypes.BUILD_CONFIGS, WatchTypes.DEPLOYMENT_CONFIGS, WatchTypes.IMAGE_STREAMS, WatchTypes.OAUTH_CLIENTS, WatchTypes.POLICIES, WatchTypes.POLICY_BINDINGS, WatchTypes.PROJECTS, ]; }, enumerable: true, configurable: true }); return NamespacedTypes; }()); Kubernetes.NamespacedTypes = NamespacedTypes; var WatchActions = (function () { function WatchActions() { } Object.defineProperty(WatchActions, "ANY", { get: function () { return "*"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchActions, "ADDED", { get: function () { return "ADDED"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchActions, "MODIFIED", { get: function () { return "MODIFIED"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchActions, "DELETED", { get: function () { return "DELETED"; }, enumerable: true, configurable: true }); return WatchActions; }()); Kubernetes.WatchActions = WatchActions; })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.hostPorts = []; /** * Sorts the the ip field * * @param ip the ip such as '10.1.2.13' * @returns {any} */ function sortByPodIp(ip) { // i guess there is maybe nicer ways of sort this without parsing and slicing var regex = /(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/; var groups = regex.exec(ip); if (angular.isDefined(groups)) { var g1 = ("00" + groups[1]).slice(-3); var g2 = ("00" + groups[2]).slice(-3); var g3 = ("00" + groups[3]).slice(-3); var g4 = ("00" + groups[4]).slice(-3); var answer = g1 + g2 + g3 + g4; return answer; } else { return 0; } } Kubernetes.sortByPodIp = sortByPodIp; function ramdomPort() { var hostPort = Math.floor(30000 + Math.random() * (65535 - 30000)); while (Kubernetes.hostPorts.indexOf(hostPort) === 0) { hostPort = Math.floor(30000 + Math.random() * (65535 - 30000)); } Kubernetes.hostPorts.push(hostPort); return hostPort; } Kubernetes.ramdomPort = ramdomPort; function getRandomString(len) { len = len || 32; var $chars = 'abcdefhijkmnprstwxyz'; // 默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1 var maxPos = $chars.length; var pwd = ''; for (var i = 0; i < len; i++) { pwd += $chars.charAt(Math.floor(Math.random() * maxPos)); } return pwd; } Kubernetes.getRandomString = getRandomString; var resourceRCTemplate = (function () { function resourceRCTemplate() { this.image = "oracle:utf8"; this.names = ["oradata"]; } resourceRCTemplate.prototype.createRC = function (Obj) { var labels = { "style": "oracle", "status": "0", "isExtract": Obj.isExtract + "" || "0", "isTarget": Obj.isTarget }; for (var item in Obj.labels) labels[item] = Obj.labels[item]; return { "apiVersion": Kubernetes.defaultApiVersion, "kind": "ReplicationController", "metadata": { "name": Obj.name, "labels": labels, "annotations": Obj.annotations }, "spec": { replicas: Obj.replicas || 1, "template": this.createTemplate(Obj) } }; }; resourceRCTemplate.prototype.createVolumeMounts = function () { var volumeMounts = []; for (var item in this.names) { if (this.names[item] === 'flash-recovery-area') volumeMounts.push({ "name": this.names[item], "mountPath": "/opt/oracle/app/flash_recovery_area" }); else volumeMounts.push({ "name": this.names[item], "mountPath": "/opt/oracle/app/" + this.names[item] }); } return volumeMounts; }; resourceRCTemplate.prototype.createVolumes = function (rootPath) { var volumes = []; for (var item in this.names) { if (this.names[item] === 'flash-recovery-area') volumes.push({ "name": this.names[item], "hostPath": { "path": rootPath + "flash_recovery_area" } }); else volumes.push({ "name": this.names[item], "hostPath": { "path": rootPath + this.names[item] } }); } return volumes; }; resourceRCTemplate.prototype.createContainers = function (Obj) { var containers = []; containers.push({ "name": "oracle", "image": this.image, "imagePullPolicy": "IfNotPresent", "command": ["/assets/entrypoint.sh"], "ports": [ { "containerPort": 1521, "hostPort": Obj.port || ramdomPort() }], "volumeMounts": this.createVolumeMounts() }); return containers; }; resourceRCTemplate.prototype.createTemplate = function (Obj) { return { "metadata": { //"name": Obj.name, "labels": Obj.labels }, "spec": { "terminationGracePeriodSeconds": 0, "containers": this.createContainers(Obj), "volumes": this.createVolumes(Obj.path) } }; }; return resourceRCTemplate; }()); Kubernetes.resourceRCTemplate = resourceRCTemplate; function labelToChinese(labels) { var answer = {}; angular.forEach(labels, function (value, key) { answer[key] = labelChangeToChines(value, key); }); return answer; } Kubernetes.labelToChinese = labelToChinese; function findSameNameReplicationControllers(replicationControllers, name) { var names = []; replicationControllers.forEach(function (rc) { var rcName = Kubernetes.getName(rc); if (rcName.indexof(name) !== -1) names.push(rcName); }); if (names.length === 0) { return name + "_1"; } else { var max = 0; names.forEach(function (value) { var answer = value.split("_"); var key = parseInt(answer[1]); if (max < key) max = key; }); return name + (max + 1); } } Kubernetes.findSameNameReplicationControllers = findSameNameReplicationControllers; function isFilterRC(rc) { var answer = false; angular.forEach(Core.pathGet(rc, ["metadata", "labels"]), function (value, key) { if (key === 'isTarget' && value === 'true') { answer = true; } }); return answer; } Kubernetes.isFilterRC = isFilterRC; function isInclude(rcs, rc) { for (var i in rcs) { if (Kubernetes.getName(rcs[i]) === Kubernetes.getName(rc)) return true; } return false; } Kubernetes.isInclude = isInclude; function labelChangeToChines(value, key) { var trueValue = ''; switch (key) { case 'type': if (value === '01') trueValue = '财政'; else if (value === '02') trueValue = '社保'; else trueValue = value; break; case 'batch': if (value === 'A') trueValue = '批次A'; else if (value === 'B') trueValue = '批次B'; else trueValue = value; break; case 'region': trueValue = Kubernetes.getCountyByCode(value); break; case 'system': trueValue = Kubernetes.getSystemNameById(value); break; case 'version': var reg = new RegExp('^[0-9]$').exec(value); if (reg) trueValue = '版本' + reg[0]; else trueValue = value; break; case 'isTarget': if (value === 'true') trueValue = '汇总数据库'; else trueValue = value; break; default: trueValue = value; } return trueValue; } Kubernetes.labelChangeToChines = labelChangeToChines; function checkForExit(replicationControllers, selectItem) { for (var index in replicationControllers) { var replicas = replicationControllers[index]; if (Kubernetes.getName(replicas) == selectItem._key && getAnnotationValueBykey(replicas, "year") == selectItem["year"]) return true; } return false; } Kubernetes.checkForExit = checkForExit; function getAnnotationValueBykey(replicationController, key) { var annotations = Kubernetes.getAnnotations(replicationController); if (annotations && annotations != undefined) { return annotations[key]; } } /* 启动oracle时检查是否正在迁移 */ function checkForCreateOracle(transferTasks, selectItems) { var result = []; angular.forEach(selectItems, function (item) { if (checkForExitTask(transferTasks, item)) result.push(item); }); return result; } Kubernetes.checkForCreateOracle = checkForCreateOracle; function checkForExitTask(transferTasks, selectItem) { for (var index in transferTasks) { var task = transferTasks[index]; if (task["_key"] == selectItem["_key"] && selectItem["year"] == task.labels.dataYear) { if (task.status == 2 || task.status == 3) return false; else return true; } } return false; } /** **/ function checkForExtract(replicationControllers) { var result = []; angular.forEach(replicationControllers, function (replicas) { var labels = Kubernetes.getLabels(replicas); if (labels["isExtract"] == "1") result.push(replicas); }); return result; } Kubernetes.checkForExtract = checkForExtract; function checkIsStartSuccess(replicationControllers) { var result = []; angular.forEach(replicationControllers, function (replicas) { var labels = Kubernetes.getLabels(replicas); if (labels["status"] != "2") result.push(replicas); }); return result; } Kubernetes.checkIsStartSuccess = checkIsStartSuccess; ; /* 检查数据否已挂载使用或正在迁移。 */ function checkForMigration(replicationControllers, transferTasks, selectItem, type) { var message = ""; for (var index in selectItem) { var item = selectItem[index]; var id = null; if (type == 'manager') id = item.id; if (type == 'verify') id = item.dataId; /* 检查迁移文件是否正在迁移 */ for (i in transferTasks) { /*if(transferTasks[i]["_key"] == item["_key"] && (transferTasks[i]["status"] == "1" || transferTasks[i]["status"] == "0") && item["year"] == transferTasks[i].labels.dataYear){ message = "数据正在迁移" return message; }*/ if (transferTasks[i].fkid == id && (transferTasks[i]["status"] == "1" || transferTasks[i]["status"] == "0")) { message = "数据正在迁移"; return message; } } /** 数据是否在热区,如果在则需要判断数据是否已启动 */ if (item["mark"] == 1) continue; /* 检查迁移文件是否已挂载使用 */ for (var i in replicationControllers) { var labels = Kubernetes.getLabels(replicationControllers[i]); if (Kubernetes.getName(replicationControllers[i]) == item._key && getAnnotationValueBykey(replicationControllers[i], "year") == item["year"]) { message = "数据正在使用"; return message; } } } return message; } Kubernetes.checkForMigration = checkForMigration; function eliminateChechBoxClick() { var element = $("#tableConfig > thead > tr input:checkbox"); if (element.is(':checked')) element.click(); } Kubernetes.eliminateChechBoxClick = eliminateChechBoxClick; /* 是否已存在当前 */ function alreadyExitInFolder(selectedItems, selectNode) { var childNodes = selectNode.childNodes; for (var i in selectedItems) { var itemName = selectedItems[i].regionalismCode + "_" + selectedItems[i].systemCode; for (var j in childNodes) { if (childNodes[j].name == itemName) { var childrens = childNodes[j].childNodes; for (var k in childrens) if (childrens[k].name == selectedItems[i].dataVersion) return true; } } } return false; } Kubernetes.alreadyExitInFolder = alreadyExitInFolder; })(Kubernetes || (Kubernetes = {})); /// var Configs; (function (Configs) { function customAlert(title, content, func, cancel, focus, icon) { /* 自定义 alert框 title : text : func : cancel: focus : icon : */ icon = "../../../new/images/msgbox_" + icon + ".png"; create_mask(); var temp = "
" + "
" + title + "
" + "" + "
" + content + "
" + "
"; if (null != cancel) { temp += "   "; } temp += "
"; create_msgbox(400, 200, temp); if (focus == 0 || focus == "0" || null == focus) { document.getElementById("msgconfirmb").focus(); } else if (focus == 1 || focus == "1") { document.getElementById("msgcancelb").focus(); } } Configs.customAlert = customAlert; function get_width() { return (document.body.clientWidth + document.body.scrollLeft); } function get_height() { return (document.body.clientHeight + document.body.scrollTop); } function get_left(w) { var bw = document.body.clientWidth; var bh = document.body.clientHeight; w = parseFloat(w); return (bw / 2 - w / 2 + document.body.scrollLeft); } function get_top(h) { var bw = document.body.clientWidth; var bh = document.body.clientHeight; h = parseFloat(h); return (bh / 2 - h / 2 + document.body.scrollTop); } function create_mask() { var mask = document.createElement("div"); mask.id = "mask"; mask.style.position = "absolute"; mask.style.filter = "progid:DXImageTransform.Microsoft.Alpha(style=4,opacity=25)"; mask.style.opacity = "0.4"; mask.style.background = "black"; mask.style.top = "0px"; mask.style.left = "0px"; mask.style.width = get_width() + "px"; mask.style.height = get_height() + "px"; mask.style.zIndex = "1000000000"; document.body.appendChild(mask); } Configs.create_mask = create_mask; function create_msgbox(w, h, t) { var box = document.createElement("div"); box.id = "msgbox"; box.style.position = "absolute"; box.style.width = w + "px"; box.style.height = h + "px"; box.style.overflow = "visible"; box.innerHTML = t; box.style.zIndex = "1000000001"; document.body.appendChild(box); re_pos(); } function re_mask() { var mask = document.getElementById("mask"); if (null == mask) return; mask.style.width = get_width() + "px"; mask.style.height = get_height() + "px"; } function re_pos() { var box = document.getElementById("msgbox"); if (null != box) { var w = box.style.width; var h = box.style.height; box.style.left = get_left(w) + "px"; box.style.top = get_top(h) + "px"; } } function remove() { var mask = document.getElementById("mask"); var msgbox = document.getElementById("msgbox"); if (null == mask && null == msgbox) return; document.body.removeChild(mask); document.body.removeChild(msgbox); } Configs.remove = remove; function re_show() { re_pos(); re_mask(); } function load_func() { window.onresize = re_show; window.onscroll = re_show; } })(Configs || (Configs = {})); /* read a object from jiangsu province , such as nanjing with some information 读取江苏的某个地区的信息,以及系统信息 */ var Kubernetes; (function (Kubernetes) { Kubernetes.system_arr = [{ "sys_name": "部门预算", "sys_id": "1" }, { "sys_name": "非税收入收缴管理系统", "sys_id": "2" }, { "sys_name": "预算执行系统", "sys_id": "3" }, { "sys_name": "资产管理系统", "sys_id": "4" }, { "sys_name": "用友财政综合管理信息系统", "sys_id": "5" }, { "sys_name": "用友A++", "sys_id": "6" }, { "sys_name": "浦口财政一体化", "sys_id": "7" }, { "sys_name": "栖霞区财政业务信息管理系统", "sys_id": "8" }, { "sys_name": "一体化系统", "sys_id": "9" }, { "sys_name": "财政管理一体化系统", "sys_id": "10" }, { "sys_name": "滨江开发区财政分局", "sys_id": "11" }, { "sys_name": "江宁经济技术开发区财政分局", "sys_id": "12" }, { "sys_name": "江宁科学园财政分局", "sys_id": "13" }, { "sys_name": "财政一体化系统", "sys_id": "14" }, { "sys_name": "A++财政一体化平台", "sys_id": "15" }, { "sys_name": "非税系统", "sys_id": "16" }, { "sys_name": "一体化预算执行系统", "sys_id": "17" }, { "sys_name": "一体化", "sys_id": "18" }, { "sys_name": "国库集中支付管理信息系统", "sys_id": "19" }, { "sys_name": "国库集中支付", "sys_id": "20" }, { "sys_name": "财政专户核算及非税系统", "sys_id": "21" }, { "sys_name": "集中支付系统", "sys_id": "22" }, { "sys_name": "财政专户核算系统", "sys_id": "23" }, { "sys_name": "非税收缴系统", "sys_id": "24" }, { "sys_name": "财政一体化平台", "sys_id": "25" }, { "sys_name": "富深预算执行", "sys_id": "26" }, { "sys_name": "用友非税及票据", "sys_id": "27" }, { "sys_name": "用友预算执行", "sys_id": "28" }, { "sys_name": "江苏省财政预算执行系统", "sys_id": "29" }, { "sys_name": "用友通用软件", "sys_id": "30" }, { "sys_name": "联友软件/通用财务", "sys_id": "31" }, { "sys_name": "用友GRPG-U8R10财政管理软件", "sys_id": "32" }, { "sys_name": "用友GPP-R10财政管理软件", "sys_id": "33" }, { "sys_name": "富深协通财政一体化管理信息系统", "sys_id": "34" }, { "sys_name": "财务统一核算系统", "sys_id": "35" }, { "sys_name": "公共财政管理软件", "sys_id": "36" }, { "sys_name": "A++财政一体化信息平台", "sys_id": "37" }, { "sys_name": "新中大公共财务管理软件", "sys_id": "38" }, { "sys_name": "富深财政一体化管理系统", "sys_id": "39" }, { "sys_name": "新中大公共财政管理系统", "sys_id": "40" }, { "sys_name": "富深协通财政一体化业务管理系统软件", "sys_id": "41" }, { "sys_name": "新中大公共财政管理软件Gsoft", "sys_id": "42" }, { "sys_name": "财政一体化业务系统", "sys_id": "43" }, { "sys_name": "财政一体化软件", "sys_id": "44" }, { "sys_name": "非税收入系统", "sys_id": "45" }, { "sys_name": "总预算系统", "sys_id": "46" }, { "sys_name": "国库集中支付系统", "sys_id": "47" }, { "sys_name": "用款计划系统", "sys_id": "48" }, { "sys_name": "指标管理系统", "sys_id": "49" }, { "sys_name": "财政综合业务管理平台", "sys_id": "50" }, { "sys_name": "财政一体化管理信息系统", "sys_id": "51" }, { "sys_name": "工资统发", "sys_id": "52" }, { "sys_name": "国有资产", "sys_id": "53" }, { "sys_name": "乡镇非税收入", "sys_id": "54" }, { "sys_name": "乡镇集中支付", "sys_id": "55" }, { "sys_name": "非税征缴系统", "sys_id": "56" }, { "sys_name": "预算编制与执行系统", "sys_id": "57" }, { "sys_name": "预算管理综合业务平台", "sys_id": "58" }, { "sys_name": "u8管理软件", "sys_id": "59" }, { "sys_name": "财政指标管理系统", "sys_id": "60" }, { "sys_name": "用友GRP-R9财务管理软件", "sys_id": "61" }, { "sys_name": "用友GRP-U8财政管理软件", "sys_id": "62" }, { "sys_name": "账务处理系统", "sys_id": "63" }, { "sys_name": "R9i财政管理软件", "sys_id": "64" }, { "sys_name": "u8财政管理软件", "sys_id": "65" }, { "sys_name": "相城区财政综合管理信息系统", "sys_id": "66" }, { "sys_name": "财政非税综合管理系统", "sys_id": "67" }, { "sys_name": "财政综合管理平台", "sys_id": "68" }, { "sys_name": "吴江区财政一体化", "sys_id": "69" }, { "sys_name": "用友R9", "sys_id": "70" }, { "sys_name": "财政公共应用服务平台", "sys_id": "71" }, { "sys_name": "金蝶K/3创新管理平台", "sys_id": "72" }, { "sys_name": "账务数据系统", "sys_id": "73" }, { "sys_name": "公共财政服务平台", "sys_id": "74" }, { "sys_name": "会计核算系统", "sys_id": "75" }, { "sys_name": "项目库", "sys_id": "76" }, { "sys_name": "财政总预算(外)专户管理系统", "sys_id": "77" }, { "sys_name": "城建资金专户管理系统", "sys_id": "78" }, { "sys_name": "农保专户管理系统", "sys_id": "79" }, { "sys_name": "农业发展基金专户管理系统", "sys_id": "80" }, { "sys_name": "失地农民保障资金专户", "sys_id": "81" }, { "sys_name": "非税收入征管系统", "sys_id": "82" }, { "sys_name": "工资统发人员信息", "sys_id": "83" }, { "sys_name": "预算指标-国库集中支付系统", "sys_id": "84" }, { "sys_name": "总预算会计核算系统", "sys_id": "85" }, { "sys_name": "部门预算编审系统", "sys_id": "86" }, { "sys_name": "公务消费管理系统", "sys_id": "87" }, { "sys_name": "国有资产管理系统", "sys_id": "88" }, { "sys_name": "区镇财政管理“一体化”系统", "sys_id": "89" }, { "sys_name": "县本级财政管理“一体化”系统", "sys_id": "90" }, { "sys_name": "用友政务", "sys_id": "91" }, { "sys_name": "财政专户核算(行政口专项资金)", "sys_id": "92" }, { "sys_name": "财政专户核算(经建口专项资金)", "sys_id": "93" }, { "sys_name": "财政专户核算(农业保险专账)", "sys_id": "94" }, { "sys_name": "财政专户核算(农业综合开发专账)", "sys_id": "95" }, { "sys_name": "财政专户核算(社保资金专账)", "sys_id": "96" }, { "sys_name": "财政专户核算(土地出让专账)", "sys_id": "97" }, { "sys_name": "财政专户核算(综合口专项资金)", "sys_id": "98" }, { "sys_name": "非税收入管理系统", "sys_id": "99" }, { "sys_name": "农业专向及农业发展基金专项", "sys_id": "100" }, { "sys_name": "总预算会计核算", "sys_id": "101" }, { "sys_name": "金财工程一体化支撑平台", "sys_id": "102" }, { "sys_name": "非税收缴", "sys_id": "103" }, { "sys_name": "学校预算执行", "sys_id": "104" }, { "sys_name": "预算执行", "sys_id": "105" }, { "sys_name": "专项资金", "sys_id": "106" }, { "sys_name": "总预算", "sys_id": "107" }, { "sys_name": "部门预算系统", "sys_id": "108" }, { "sys_name": "财政专户核算", "sys_id": "109" }, { "sys_name": "财政专户账务系统", "sys_id": "110" }, { "sys_name": "富深财政一体化业务管理系统", "sys_id": "111" }, { "sys_name": "国有资产系统", "sys_id": "112" }, { "sys_name": "国库专项资金管理系统", "sys_id": "113" }, { "sys_name": "非税收缴管理系统", "sys_id": "114" }, { "sys_name": "财政管理系统(新农保)", "sys_id": "115" }, { "sys_name": "财政管理系统(城市居民医疗统筹)", "sys_id": "116" }, { "sys_name": "财政管理系统(集中支付中心)", "sys_id": "117" }, { "sys_name": "财政管理系统(解困金)", "sys_id": "118" }, { "sys_name": "财政管理系统(旧城改造)", "sys_id": "119" }, { "sys_name": "财政管理系统(社保资金账户)", "sys_id": "120" }, { "sys_name": "财政管理系统(土地出让专帐)", "sys_id": "121" }, { "sys_name": "财政管理系统(预拨及非集中支付中心)", "sys_id": "122" }, { "sys_name": "财政管理系统(预算外资金)", "sys_id": "123" }, { "sys_name": "总预算会计", "sys_id": "124" }, { "sys_name": "财务核算系统", "sys_id": "125" }, { "sys_name": "工资统发系统", "sys_id": "126" }, { "sys_name": "预算编审系统", "sys_id": "127" }, { "sys_name": "预算管理系统", "sys_id": "128" }, { "sys_name": "预算外资金(从联网审计中取数)", "sys_id": "129" }, { "sys_name": "G6-E财务管理系统", "sys_id": "130" }, { "sys_name": "新中大公共财政管理软件", "sys_id": "131" }, { "sys_name": "用友GRP/R9财政管理软件", "sys_id": "132" }, { "sys_name": "用友GRP-U8R10", "sys_id": "133" }, { "sys_name": "财政一体化管理系统(基建户)", "sys_id": "134" }, { "sys_name": "财政一体化管理系统(集中支付中心)", "sys_id": "135" }, { "sys_name": "财政一体化管理系统(农业综合开发)", "sys_id": "136" }, { "sys_name": "财政一体化管理系统(预算外资金)", "sys_id": "137" }, { "sys_name": "财政一体化管理系统(支农专户)", "sys_id": "138" }, { "sys_name": "财政一体化管理系统(总预算)", "sys_id": "139" }, { "sys_name": "国资管理系统", "sys_id": "140" }, { "sys_name": "乡财县管系统", "sys_id": "141" }, { "sys_name": "预算编制管理系统", "sys_id": "142" }, { "sys_name": "盐城市_市本级_部门预算", "sys_id": "143" }, { "sys_name": "盐城市_市本级_非税收管理系统", "sys_id": "144" }, { "sys_name": "盐城市_市本级_预算执行系统", "sys_id": "145" }, { "sys_name": "盐城市_亭湖区_财政专户", "sys_id": "146" }, { "sys_name": "盐城市_亭湖区_非税收入管理", "sys_id": "147" }, { "sys_name": "盐城市_亭湖区_国库集中支付管理", "sys_id": "148" }, { "sys_name": "盐城市_亭湖区_预算指标管理", "sys_id": "149" }, { "sys_name": "盐城市_亭湖区_总预算会计核算", "sys_id": "150" }, { "sys_name": "盐城市_盐都区_财政专户核算系统", "sys_id": "151" }, { "sys_name": "盐城市_盐都区_非税收入管理系统", "sys_id": "152" }, { "sys_name": "盐城市_盐都区_国库集中支付系统", "sys_id": "153" }, { "sys_name": "盐城市_盐都区_总预算会计核算系统", "sys_id": "154" }, { "sys_name": "盐城市_响水县_部门预算管理系统", "sys_id": "155" }, { "sys_name": "盐城市_响水县_财政一体化信息系统", "sys_id": "156" }, { "sys_name": "盐城市_响水县_非税收入收缴管理系统", "sys_id": "157" }, { "sys_name": "盐城市_滨海县财政一体化", "sys_id": "158" }, { "sys_name": "盐城市_阜宁县_财政管理软件", "sys_id": "159" }, { "sys_name": "盐城市_阜宁县_财政管理软件用友U8", "sys_id": "160" }, { "sys_name": "盐城市_射阳县_财政预算执行一体化系统", "sys_id": "161" }, { "sys_name": "盐城市_建湖县_非税收缴", "sys_id": "162" }, { "sys_name": "盐城市_建湖县_财政一体化", "sys_id": "163" }, { "sys_name": "盐城市_建湖县_国库集中支付", "sys_id": "164" }, { "sys_name": "盐城市_东台市_部门预算编审系统", "sys_id": "165" }, { "sys_name": "盐城市_东台市_财政一体化信息系统", "sys_id": "166" }, { "sys_name": "盐城市_东台市_财政专户核算系统", "sys_id": "167" }, { "sys_name": "盐城市_东台市_非税收入收缴管理系统", "sys_id": "168" }, { "sys_name": "盐城市_东台市_总预算会计核算系统", "sys_id": "169" }, { "sys_name": "盐城市_大丰区_部门预算系统", "sys_id": "170" }, { "sys_name": "盐城市_大丰区_财政一体化", "sys_id": "171" }, { "sys_name": "盐城市_大丰区_总预算会计核算财务软件", "sys_id": "172" }, { "sys_name": "盐城市_经济技术开发区_部门预算软件", "sys_id": "173" }, { "sys_name": "盐城市_经济技术开发区_国库集中支付", "sys_id": "174" }, { "sys_name": "老非税收入征缴系统", "sys_id": "175" }, { "sys_name": "扬州财政一体化信息管理系统", "sys_id": "176" }, { "sys_name": "非税收入征收", "sys_id": "177" }, { "sys_name": "部门预算编制", "sys_id": "178" }, { "sys_name": "非税收入收缴", "sys_id": "179" }, { "sys_name": "行政事业性单位国有资产管理", "sys_id": "180" }, { "sys_name": "财政业务系统", "sys_id": "181" }, { "sys_name": "财政业务综合系统", "sys_id": "182" }, { "sys_name": "江都开发区预算执行系统", "sys_id": "183" }, { "sys_name": "财政一体化", "sys_id": "184" }, { "sys_name": "富深协通财政一体化业务管理系统", "sys_id": "185" }, { "sys_name": "富深协通非税收缴系统", "sys_id": "186" }, { "sys_name": "富深协通工资统发系统", "sys_id": "187" }, { "sys_name": "非税收入", "sys_id": "188" }, { "sys_name": "财政综合业务系统", "sys_id": "189" }, { "sys_name": "泰州市_市本级_部门预算系统", "sys_id": "190" }, { "sys_name": "泰州市_市本级_非税收入系统", "sys_id": "191" }, { "sys_name": "泰州市_市本级_绩效管理系统", "sys_id": "192" }, { "sys_name": "泰州市_市本级_预算执行系统", "sys_id": "193" }, { "sys_name": "泰州市_市本级_综合治税系统", "sys_id": "194" }, { "sys_name": "泰州市_海陵区_部门预算编制系统", "sys_id": "195" }, { "sys_name": "泰州市_海陵区_县区财政一体化", "sys_id": "196" }, { "sys_name": "泰州市_高港区_预算执行系统", "sys_id": "197" }, { "sys_name": "泰州市_姜堰区_部门预算系统", "sys_id": "198" }, { "sys_name": "泰州市_姜堰区_财政一体化系统", "sys_id": "199" }, { "sys_name": "泰州市_姜堰区_非税收缴系统", "sys_id": "200" }, { "sys_name": "泰州市_姜堰区_预算执行系统", "sys_id": "201" }, { "sys_name": "泰州市_医药高新区_财政一体化系统", "sys_id": "202" }, { "sys_name": "泰州市_兴化市_部门预算", "sys_id": "203" }, { "sys_name": "泰州市_兴化市_非税收缴", "sys_id": "204" }, { "sys_name": "泰州市_兴化市_国库集中支付", "sys_id": "205" }, { "sys_name": "泰州市_靖江市_预算执行系统", "sys_id": "206" }, { "sys_name": "泰州市_靖江市_非税收入收缴", "sys_id": "207" }, { "sys_name": "泰州市_靖江市_部门预算编审系统", "sys_id": "208" }, { "sys_name": "泰州市_泰兴市_部门预算系统", "sys_id": "209" }, { "sys_name": "泰州市_泰兴市_非税收入管理系统", "sys_id": "210" }, { "sys_name": "泰州市_泰兴市_预算执行系统", "sys_id": "211" }, { "sys_name": "部门预算管理系统", "sys_id": "212" }, { "sys_name": "财政一体化平台及国库集中支付系统", "sys_id": "213" }, { "sys_name": "新中大非税收入管理", "sys_id": "214" }, { "sys_name": "联友财务管理系统", "sys_id": "215" }, { "sys_name": "国库集中支付、指标管理系统", "sys_id": "216" }, { "sys_name": "开发区总预算系统", "sys_id": "217" }, { "sys_name": "国库账务系统", "sys_id": "218" }, { "sys_name": "化学工业园区非税收入管理系统", "sys_id": "219" }, { "sys_name": "非税收入账套", "sys_id": "220" }, { "sys_name": "化学工业园区预算执行系统", "sys_id": "221" }, { "sys_name": "会计核算", "sys_id": "222" }, { "sys_name": "总预算会计账", "sys_id": "223" }, { "sys_name": "预算内外收支核算系统", "sys_id": "224" }, { "sys_name": "账户核算系统", "sys_id": "225" }, { "sys_name": "总预算核算系统", "sys_id": "226" }, { "sys_name": "账务处理系统(收支分类改革升级版)", "sys_id": "227" }, { "sys_name": "财政预算外业务", "sys_id": "228" }, { "sys_name": "用友U8R10财政一体化平台", "sys_id": "229" }, { "sys_name": "开发区财政系统", "sys_id": "230" }, { "sys_name": "高新区总预算系统", "sys_id": "231" }, { "sys_name": "开发区公共财政服务平台", "sys_id": "232" }, { "sys_name": "用友GRP-U8管理软件", "sys_id": "233" }, { "sys_name": "盐城市_城南新区_国库集中支付系统", "sys_id": "234" }, { "sys_name": "盐城市_城南新区_总预算账务处理系统", "sys_id": "235" }, { "sys_name": "财政预算指标管理", "sys_id": "236" }, { "sys_name": "泰州市_市本级_行政管理系统", "sys_id": "237" }, { "sys_name": "新中大财务软件", "sys_id": "238" }, { "sys_name": "开发区新中大财务核算系统", "sys_id": "239" }, { "sys_name": "开发区账务系统", "sys_id": "240" }]; Kubernetes.origin_place_arr = [{ "city_code": "3201", "city": "南京市", "county": "市本级", "county_code": "320100", "sys_name": "部门预算", "sys_code": "BMYS" }, { "city_code": "3201", "city": "南京市", "county": "市本级", "county_code": "320100", "sys_name": "非税收入收缴管理系统", "sys_code": "FSSR" }, { "city_code": "3201", "city": "南京市", "county": "市本级", "county_code": "320100", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3201", "city": "南京市", "county": "市本级", "county_code": "320100", "sys_name": "资产管理系统", "sys_code": "ZCGL" }, { "city_code": "3201", "city": "南京市", "county": "玄武区", "county_code": "320102", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3201", "city": "南京市", "county": "秦淮区", "county_code": "320104", "sys_name": "用友财政综合管理信息系统", "sys_code": "YTH" }, { "city_code": "3201", "city": "南京市", "county": "建邺区", "county_code": "320105", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3201", "city": "南京市", "county": "鼓楼区", "county_code": "320106", "sys_name": "用友A++", "sys_code": "YTH" }, { "city_code": "3201", "city": "南京市", "county": "浦口区", "county_code": "320111", "sys_name": "浦口财政一体化", "sys_code": "YTH" }, { "city_code": "3201", "city": "南京市", "county": "栖霞区", "county_code": "320113", "sys_name": "栖霞区财政业务信息管理系统", "sys_code": "YTH" }, { "city_code": "3201", "city": "南京市", "county": "雨花台区", "county_code": "320114", "sys_name": "一体化系统", "sys_code": "YTH" }, { "city_code": "3201", "city": "南京市", "county": "江宁区", "county_code": "320115", "sys_name": "财政管理一体化系统", "sys_code": "YTH" }, { "city_code": "3201", "city": "南京市", "county": "江宁区", "county_code": "320115", "sys_name": "滨江开发区财政分局", "sys_code": "YTH" }, { "city_code": "3201", "city": "南京市", "county": "江宁区", "county_code": "320115", "sys_name": "江宁经济技术开发区财政分局", "sys_code": "YTH" }, { "city_code": "3201", "city": "南京市", "county": "江宁区", "county_code": "320115", "sys_name": "江宁科学园财政分局", "sys_code": "YTH" }, { "city_code": "3201", "city": "南京市", "county": "六合区", "county_code": "320116", "sys_name": "一体化系统", "sys_code": "YTH" }, { "city_code": "3201", "city": "南京市", "county": "高淳区", "county_code": "320118", "sys_name": "财政一体化系统", "sys_code": "YTH" }, { "city_code": "3201", "city": "南京市", "county": "溧水区", "county_code": "320124", "sys_name": "A++财政一体化平台", "sys_code": "YTH" }, { "city_code": "3202", "city": "无锡市", "county": "市本级", "county_code": "320200", "sys_name": "财政一体化系统", "sys_code": "YTH" }, { "city_code": "3202", "city": "无锡市", "county": "市本级", "county_code": "320200", "sys_name": "非税收入收缴管理系统", "sys_code": "FSSR" }, { "city_code": "3202", "city": "无锡市", "county": "崇安区", "county_code": "320202", "sys_name": "非税系统", "sys_code": "FSSR" }, { "city_code": "3202", "city": "无锡市", "county": "崇安区", "county_code": "320202", "sys_name": "一体化预算执行系统", "sys_code": "YTH" }, { "city_code": "3202", "city": "无锡市", "county": "南长区", "county_code": "320203", "sys_name": "非税系统", "sys_code": "FSSR" }, { "city_code": "3202", "city": "无锡市", "county": "南长区", "county_code": "320203", "sys_name": "一体化", "sys_code": "YTH" }, { "city_code": "3202", "city": "无锡市", "county": "北塘区", "county_code": "320204", "sys_name": "国库集中支付管理信息系统", "sys_code": "GKZF" }, { "city_code": "3202", "city": "无锡市", "county": "锡山区", "county_code": "320205", "sys_name": "国库集中支付", "sys_code": "GKZF" }, { "city_code": "3202", "city": "无锡市", "county": "锡山区", "county_code": "320205", "sys_name": "财政专户核算及非税系统", "sys_code": "ZHHS_FSSR" }, { "city_code": "3202", "city": "无锡市", "county": "惠山区", "county_code": "320206", "sys_name": "财政一体化系统", "sys_code": "YTH" }, { "city_code": "3202", "city": "无锡市", "county": "滨湖区", "county_code": "320211", "sys_name": "集中支付系统", "sys_code": "GKZF" }, { "city_code": "3202", "city": "无锡市", "county": "滨湖区", "county_code": "320211", "sys_name": "非税系统", "sys_code": "FSSR" }, { "city_code": "3202", "city": "无锡市", "county": "滨湖区", "county_code": "320211", "sys_name": "财政专户核算系统", "sys_code": "ZHHS" }, { "city_code": "3202", "city": "无锡市", "county": "新区", "county_code": "320214", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3202", "city": "无锡市", "county": "新区", "county_code": "320214", "sys_name": "非税收缴系统", "sys_code": "FSSR" }, { "city_code": "3202", "city": "无锡市", "county": "新区", "county_code": "320214", "sys_name": "财政专户核算系统", "sys_code": "ZHHS" }, { "city_code": "3202", "city": "无锡市", "county": "江阴市", "county_code": "320281", "sys_name": "财政一体化平台", "sys_code": "YTH" }, { "city_code": "3202", "city": "无锡市", "county": "宜兴市", "county_code": "320282", "sys_name": "非税收缴系统", "sys_code": "FSSR" }, { "city_code": "3202", "city": "无锡市", "county": "宜兴市", "county_code": "320282", "sys_name": "财政一体化平台", "sys_code": "YTH" }, { "city_code": "3203", "city": "徐州市", "county": "市本级", "county_code": "320300", "sys_name": "富深预算执行", "sys_code": "YSZX" }, { "city_code": "3203", "city": "徐州市", "county": "市本级", "county_code": "320300", "sys_name": "用友非税及票据", "sys_code": "FSSR" }, { "city_code": "3203", "city": "徐州市", "county": "市本级", "county_code": "320300", "sys_name": "用友预算执行", "sys_code": "YSZX" }, { "city_code": "3203", "city": "徐州市", "county": "鼓楼区", "county_code": "320302", "sys_name": "江苏省财政预算执行系统", "sys_code": "YSZX" }, { "city_code": "3203", "city": "徐州市", "county": "鼓楼区", "county_code": "320302", "sys_name": "用友通用软件", "sys_code": "KJHS" }, { "city_code": "3203", "city": "徐州市", "county": "云龙区", "county_code": "320303", "sys_name": "江苏省财政预算执行系统", "sys_code": "YSZX" }, { "city_code": "3203", "city": "徐州市", "county": "云龙区", "county_code": "320303", "sys_name": "联友软件/通用财务", "sys_code": "KJHS" }, { "city_code": "3203", "city": "徐州市", "county": "云龙区", "county_code": "320303", "sys_name": "用友GRPG-U8R10财政管理软件", "sys_code": "YSZX" }, { "city_code": "3203", "city": "徐州市", "county": "贾汪区", "county_code": "320305", "sys_name": "用友GPP-R10财政管理软件", "sys_code": "KJHS" }, { "city_code": "3203", "city": "徐州市", "county": "泉山区", "county_code": "320311", "sys_name": "富深协通财政一体化管理信息系统", "sys_code": "YTH" }, { "city_code": "3203", "city": "徐州市", "county": "铜山区", "county_code": "320312", "sys_name": "财务统一核算系统", "sys_code": "KJHS" }, { "city_code": "3203", "city": "徐州市", "county": "铜山区", "county_code": "320312", "sys_name": "非税收入收缴管理系统", "sys_code": "FSSR" }, { "city_code": "3203", "city": "徐州市", "county": "铜山区", "county_code": "320312", "sys_name": "公共财政管理软件", "sys_code": "YSZX" }, { "city_code": "3203", "city": "徐州市", "county": "丰县", "county_code": "320321", "sys_name": "A++财政一体化信息平台", "sys_code": "YTH" }, { "city_code": "3203", "city": "徐州市", "county": "丰县", "county_code": "320321", "sys_name": "新中大公共财务管理软件", "sys_code": "KJHS" }, { "city_code": "3203", "city": "徐州市", "county": "沛县", "county_code": "320322", "sys_name": "富深财政一体化管理系统", "sys_code": "YTH" }, { "city_code": "3203", "city": "徐州市", "county": "沛县", "county_code": "320322", "sys_name": "新中大公共财政管理系统", "sys_code": "KJHS" }, { "city_code": "3203", "city": "徐州市", "county": "睢宁县", "county_code": "320324", "sys_name": "富深协通财政一体化业务管理系统软件", "sys_code": "YTH" }, { "city_code": "3203", "city": "徐州市", "county": "睢宁县", "county_code": "320324", "sys_name": "新中大公共财政管理软件Gsoft", "sys_code": "KJHS" }, { "city_code": "3203", "city": "徐州市", "county": "新沂市", "county_code": "320381", "sys_name": "江苏省财政预算执行系统", "sys_code": "YSZX" }, { "city_code": "3203", "city": "徐州市", "county": "邳州", "county_code": "320382", "sys_name": "财政一体化系统", "sys_code": "YTH" }, { "city_code": "3204", "city": "常州市", "county": "本级", "county_code": "320400", "sys_name": "财政一体化业务系统", "sys_code": "YTH" }, { "city_code": "3204", "city": "常州市", "county": "天宁区", "county_code": "320402", "sys_name": "财政一体化软件", "sys_code": "YTH" }, { "city_code": "3204", "city": "常州市", "county": "天宁区", "county_code": "320402", "sys_name": "非税收入系统", "sys_code": "FSSR" }, { "city_code": "3204", "city": "常州市", "county": "天宁区", "county_code": "320402", "sys_name": "总预算系统", "sys_code": "YSZX" }, { "city_code": "3204", "city": "常州市", "county": "钟楼区", "county_code": "320404", "sys_name": "非税收入系统", "sys_code": "FSSR" }, { "city_code": "3204", "city": "常州市", "county": "钟楼区", "county_code": "320404", "sys_name": "国库集中支付系统", "sys_code": "GKZF" }, { "city_code": "3204", "city": "常州市", "county": "钟楼区", "county_code": "320404", "sys_name": "用款计划系统", "sys_code": "JHGL" }, { "city_code": "3204", "city": "常州市", "county": "钟楼区", "county_code": "320404", "sys_name": "指标管理系统", "sys_code": "ZBGL" }, { "city_code": "3204", "city": "常州市", "county": "钟楼区", "county_code": "320404", "sys_name": "总预算系统", "sys_code": "ZYS" }, { "city_code": "3204", "city": "常州市", "county": "新北区", "county_code": "320411", "sys_name": "财政综合业务管理平台", "sys_code": "YTH" }, { "city_code": "3204", "city": "常州市", "county": "武进区", "county_code": "320412", "sys_name": "财政一体化管理信息系统", "sys_code": "YTH" }, { "city_code": "3204", "city": "常州市", "county": "溧阳市", "county_code": "320481", "sys_name": "部门预算", "sys_code": "BMYS" }, { "city_code": "3204", "city": "常州市", "county": "溧阳市", "county_code": "320481", "sys_name": "工资统发", "sys_code": "GZTF" }, { "city_code": "3204", "city": "常州市", "county": "溧阳市", "county_code": "320481", "sys_name": "国有资产", "sys_code": "ZCGL" }, { "city_code": "3204", "city": "常州市", "county": "溧阳市", "county_code": "320481", "sys_name": "乡镇非税收入", "sys_code": "XZFS" }, { "city_code": "3204", "city": "常州市", "county": "溧阳市", "county_code": "320481", "sys_name": "乡镇集中支付", "sys_code": "XZGK" }, { "city_code": "3204", "city": "常州市", "county": "金坛区", "county_code": "320482", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3205", "city": "苏州市", "county": "市本级", "county_code": "320500", "sys_name": "非税征缴系统", "sys_code": "FSSR" }, { "city_code": "3205", "city": "苏州市", "county": "市本级", "county_code": "320500", "sys_name": "预算编制与执行系统", "sys_code": "YSZX" }, { "city_code": "3205", "city": "苏州市", "county": "工业园区", "county_code": "320501", "sys_name": "预算管理综合业务平台", "sys_code": "YSGL" }, { "city_code": "3205", "city": "苏州市", "county": "虎丘区", "county_code": "320505", "sys_name": "u8管理软件", "sys_code": "CZGL" }, { "city_code": "3205", "city": "苏州市", "county": "虎丘区", "county_code": "320505", "sys_name": "财政指标管理系统", "sys_code": "ZBGL" }, { "city_code": "3205", "city": "苏州市", "county": "虎丘区", "county_code": "320505", "sys_name": "国库集中支付系统", "sys_code": "GKZF" }, { "city_code": "3205", "city": "苏州市", "county": "虎丘区", "county_code": "320505", "sys_name": "用友GRP-R9财务管理软件", "sys_code": "CWGL" }, { "city_code": "3205", "city": "苏州市", "county": "虎丘区", "county_code": "320505", "sys_name": "用友GRP-U8财政管理软件", "sys_code": "CWGL" }, { "city_code": "3205", "city": "苏州市", "county": "虎丘区", "county_code": "320505", "sys_name": "账务处理系统", "sys_code": "ZWCL" }, { "city_code": "3205", "city": "苏州市", "county": "吴中区", "county_code": "320506", "sys_name": "R9i财政管理软件", "sys_code": "CZGL" }, { "city_code": "3205", "city": "苏州市", "county": "吴中区", "county_code": "320506", "sys_name": "部门预算", "sys_code": "BMYS" }, { "city_code": "3205", "city": "苏州市", "county": "吴中区", "county_code": "320506", "sys_name": "财政一体化平台", "sys_code": "YTH" }, { "city_code": "3205", "city": "苏州市", "county": "吴中区", "county_code": "320506", "sys_name": "非税系统", "sys_code": "FSSR" }, { "city_code": "3205", "city": "苏州市", "county": "相城区", "county_code": "320507", "sys_name": "u8财政管理软件", "sys_code": "CZGL" }, { "city_code": "3205", "city": "苏州市", "county": "相城区", "county_code": "320507", "sys_name": "相城区财政综合管理信息系统", "sys_code": "YTH" }, { "city_code": "3205", "city": "苏州市", "county": "姑苏区", "county_code": "320508", "sys_name": "财政非税综合管理系统", "sys_code": "FSSR" }, { "city_code": "3205", "city": "苏州市", "county": "姑苏区", "county_code": "320508", "sys_name": "财政综合管理平台", "sys_code": "YTH" }, { "city_code": "3205", "city": "苏州市", "county": "吴江区", "county_code": "320509", "sys_name": "吴江区财政一体化", "sys_code": "YTH" }, { "city_code": "3205", "city": "苏州市", "county": "常熟市", "county_code": "320581", "sys_name": "非税收入收缴管理系统", "sys_code": "FSSR" }, { "city_code": "3205", "city": "苏州市", "county": "常熟市", "county_code": "320581", "sys_name": "用友R9", "sys_code": "KJHS" }, { "city_code": "3205", "city": "苏州市", "county": "常熟市", "county_code": "320581", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3205", "city": "苏州市", "county": "张家港市", "county_code": "320582", "sys_name": "财政公共应用服务平台", "sys_code": "GGFW" }, { "city_code": "3205", "city": "苏州市", "county": "张家港市", "county_code": "320582", "sys_name": "金蝶K/3创新管理平台", "sys_code": "CZGL" }, { "city_code": "3205", "city": "苏州市", "county": "张家港市", "county_code": "320582", "sys_name": "账务数据系统", "sys_code": "KJHS" }, { "city_code": "3205", "city": "苏州市", "county": "昆山市", "county_code": "320583", "sys_name": "非税收入收缴管理系统", "sys_code": "FSSR" }, { "city_code": "3205", "city": "苏州市", "county": "昆山市", "county_code": "320583", "sys_name": "公共财政服务平台", "sys_code": "GGFW" }, { "city_code": "3205", "city": "苏州市", "county": "昆山市", "county_code": "320583", "sys_name": "国库集中支付系统", "sys_code": "GKZF" }, { "city_code": "3205", "city": "苏州市", "county": "太仓市", "county_code": "320585", "sys_name": "非税收入系统", "sys_code": "FSSR" }, { "city_code": "3205", "city": "苏州市", "county": "太仓市", "county_code": "320585", "sys_name": "会计核算系统", "sys_code": "KJHS" }, { "city_code": "3205", "city": "苏州市", "county": "太仓市", "county_code": "320585", "sys_name": "项目库", "sys_code": "XMK" }, { "city_code": "3205", "city": "苏州市", "county": "太仓市", "county_code": "320585", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3206", "city": "南通市", "county": "本级", "county_code": "320600", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3206", "city": "南通市", "county": "崇川区", "county_code": "320602", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3206", "city": "南通市", "county": "港闸区", "county_code": "320611", "sys_name": "财政总预算(外)专户管理系统", "sys_code": "YSWZH" }, { "city_code": "3206", "city": "南通市", "county": "港闸区", "county_code": "320611", "sys_name": "城建资金专户管理系统", "sys_code": "CJZH" }, { "city_code": "3206", "city": "南通市", "county": "港闸区", "county_code": "320611", "sys_name": "农保专户管理系统", "sys_code": "NBZH" }, { "city_code": "3206", "city": "南通市", "county": "港闸区", "county_code": "320611", "sys_name": "农业发展基金专户管理系统", "sys_code": "NFJJ" }, { "city_code": "3206", "city": "南通市", "county": "港闸区", "county_code": "320611", "sys_name": "失地农民保障资金专户", "sys_code": "SDNM" }, { "city_code": "3206", "city": "南通市", "county": "港闸区", "county_code": "320611", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3206", "city": "南通市", "county": "通州区", "county_code": "320612", "sys_name": "非税收入征管系统", "sys_code": "FSSR" }, { "city_code": "3206", "city": "南通市", "county": "通州区", "county_code": "320612", "sys_name": "工资统发人员信息", "sys_code": "GZTF" }, { "city_code": "3206", "city": "南通市", "county": "通州区", "county_code": "320612", "sys_name": "预算指标-国库集中支付系统", "sys_code": "YSZX" }, { "city_code": "3206", "city": "南通市", "county": "通州区", "county_code": "320612", "sys_name": "总预算会计核算系统", "sys_code": "KJHS" }, { "city_code": "3206", "city": "南通市", "county": "海安县", "county_code": "320621", "sys_name": "部门预算编审系统", "sys_code": "BMYS" }, { "city_code": "3206", "city": "南通市", "county": "海安县", "county_code": "320621", "sys_name": "公务消费管理系统", "sys_code": "GWXF" }, { "city_code": "3206", "city": "南通市", "county": "海安县", "county_code": "320621", "sys_name": "国有资产管理系统", "sys_code": "ZCGL" }, { "city_code": "3206", "city": "南通市", "county": "海安县", "county_code": "320621", "sys_name": "区镇财政管理“一体化”系统", "sys_code": "XZYTH" }, { "city_code": "3206", "city": "南通市", "county": "海安县", "county_code": "320621", "sys_name": "县本级财政管理“一体化”系统", "sys_code": "YTH" }, { "city_code": "3206", "city": "南通市", "county": "如东县", "county_code": "320623", "sys_name": "用友政务", "sys_code": "YTH" }, { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "财政专户核算(行政口专项资金)", "sys_code": "ZHXZ" }, { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "财政专户核算(经建口专项资金)", "sys_code": "ZHJJ" }, { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "财政专户核算(农业保险专账)", "sys_code": "ZHNB" }, { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "财政专户核算(农业综合开发专账)", "sys_code": "ZHNF" }, { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "财政专户核算(社保资金专账)", "sys_code": "ZHSB" }, { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "财政专户核算(土地出让专账)", "sys_code": "ZHTD" }, { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "财政专户核算(综合口专项资金)", "sys_code": "ZHZH" }, { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "非税收入管理系统", "sys_code": "FSSR" }, { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "农业专向及农业发展基金专项", "sys_code": "NFZX" }, { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "总预算会计核算", "sys_code": "KJHS" }, { "city_code": "3206", "city": "南通市", "county": "如皋市", "county_code": "320682", "sys_name": "金财工程一体化支撑平台", "sys_code": "YTH" }, { "city_code": "3206", "city": "南通市", "county": "海门市", "county_code": "320684", "sys_name": "非税收缴", "sys_code": "FSSR" }, { "city_code": "3206", "city": "南通市", "county": "海门市", "county_code": "320684", "sys_name": "学校预算执行", "sys_code": "YSZXXX" }, { "city_code": "3206", "city": "南通市", "county": "海门市", "county_code": "320684", "sys_name": "预算执行", "sys_code": "YSZX" }, { "city_code": "3206", "city": "南通市", "county": "海门市", "county_code": "320684", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3206", "city": "南通市", "county": "海门市", "county_code": "320684", "sys_name": "专项资金", "sys_code": "ZXZJ" }, { "city_code": "3206", "city": "南通市", "county": "海门市", "county_code": "320684", "sys_name": "总预算", "sys_code": "ZYS" }, { "city_code": "3207", "city": "连云港市", "county": "市本级", "county_code": "320700", "sys_name": "部门预算系统", "sys_code": "BMYS" }, { "city_code": "3207", "city": "连云港市", "county": "市本级", "county_code": "320700", "sys_name": "财政专户核算", "sys_code": "ZHHS" }, { "city_code": "3207", "city": "连云港市", "county": "市本级", "county_code": "320700", "sys_name": "非税收入系统", "sys_code": "FSSR" }, { "city_code": "3207", "city": "连云港市", "county": "市本级", "county_code": "320700", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3207", "city": "连云港市", "county": "连云区", "county_code": "320703", "sys_name": "财政专户账务系统", "sys_code": "ZHHS" }, { "city_code": "3207", "city": "连云港市", "county": "连云区", "county_code": "320703", "sys_name": "富深财政一体化管理系统", "sys_code": "YTH" }, { "city_code": "3207", "city": "连云港市", "county": "海州区", "county_code": "320706", "sys_name": "富深财政一体化业务管理系统", "sys_code": "" }, { "city_code": "3207", "city": "连云港市", "county": "海州区", "county_code": "320706", "sys_name": "新中大公共财政管理系统", "sys_code": "" }, { "city_code": "3207", "city": "连云港市", "county": "赣榆区", "county_code": "320721", "sys_name": "财政一体化平台", "sys_code": "YTH" }, { "city_code": "3207", "city": "连云港市", "county": "赣榆区", "county_code": "320721", "sys_name": "国有资产系统", "sys_code": "CZGL" }, { "city_code": "3207", "city": "连云港市", "county": "东海县", "county_code": "320722", "sys_name": "部门预算系统", "sys_code": "BMYS" }, { "city_code": "3207", "city": "连云港市", "county": "东海县", "county_code": "320722", "sys_name": "国库专项资金管理系统", "sys_code": "ZXZJ" }, { "city_code": "3207", "city": "连云港市", "county": "东海县", "county_code": "320722", "sys_name": "国有资产管理系统", "sys_code": "ZCGL" }, { "city_code": "3207", "city": "连云港市", "county": "东海县", "county_code": "320722", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3207", "city": "连云港市", "county": "灌云县", "county_code": "320723", "sys_name": "财政一体化平台", "sys_code": "YTH" }, { "city_code": "3207", "city": "连云港市", "county": "灌南县", "county_code": "320724", "sys_name": "非税系统", "sys_code": "FSSR" }, { "city_code": "3207", "city": "连云港市", "county": "灌南县", "county_code": "320724", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3208", "city": "淮安市", "county": "市本级", "county_code": "320800", "sys_name": "非税收缴管理系统", "sys_code": "FSSR" }, { "city_code": "3208", "city": "淮安市", "county": "市本级", "county_code": "320800", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "财政管理系统(新农保)", "sys_code": "ZHNB" }, { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "财政管理系统(城市居民医疗统筹)", "sys_code": "ZHYB" }, { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "财政管理系统(集中支付中心)", "sys_code": "GKZF" }, { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "财政管理系统(解困金)", "sys_code": "ZHJK" }, { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "财政管理系统(旧城改造)", "sys_code": "ZHCG" }, { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "财政管理系统(社保资金账户)", "sys_code": "ZHSB" }, { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "财政管理系统(土地出让专帐)", "sys_code": "ZHTD" }, { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "财政管理系统(预拨及非集中支付中心)", "sys_code": "ZHYB" }, { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "财政管理系统(预算外资金)", "sys_code": "YSW" }, { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "总预算会计", "sys_code": "KJHS" }, { "city_code": "3208", "city": "淮安市", "county": "淮安区", "county_code": "320803", "sys_name": "财务核算系统", "sys_code": "KJHS" }, { "city_code": "3208", "city": "淮安市", "county": "淮安区", "county_code": "320803", "sys_name": "非税收入管理系统", "sys_code": "FSSR" }, { "city_code": "3208", "city": "淮安市", "county": "淮安区", "county_code": "320803", "sys_name": "工资统发系统", "sys_code": "GZTF" }, { "city_code": "3208", "city": "淮安市", "county": "淮安区", "county_code": "320803", "sys_name": "用友政务", "sys_code": "YYZW" }, { "city_code": "3208", "city": "淮安市", "county": "淮安区", "county_code": "320803", "sys_name": "预算编审系统", "sys_code": "BMYS" }, { "city_code": "3208", "city": "淮安市", "county": "淮安区", "county_code": "320803", "sys_name": "预算管理系统", "sys_code": "YSGL" }, { "city_code": "3208", "city": "淮安市", "county": "淮安区", "county_code": "320803", "sys_name": "预算外资金(从联网审计中取数)", "sys_code": "YSW" }, { "city_code": "3208", "city": "淮安市", "county": "淮安区", "county_code": "320803", "sys_name": "预算编审系统", "sys_code": "YSBS" }, { "city_code": "3208", "city": "淮安市", "county": "淮阴区", "county_code": "320804", "sys_name": "G6-E财务管理系统", "sys_code": "CWGL" }, { "city_code": "3208", "city": "淮安市", "county": "淮阴区", "county_code": "320804", "sys_name": "江苏省财政预算执行系统", "sys_code": "YSZX" }, { "city_code": "3208", "city": "淮安市", "county": "淮阴区", "county_code": "320804", "sys_name": "新中大公共财政管理软件", "sys_code": "CZGL" }, { "city_code": "3208", "city": "淮安市", "county": "淮阴区", "county_code": "320804", "sys_name": "用友GRP/R9财政管理软件", "sys_code": "CZGL" }, { "city_code": "3208", "city": "淮安市", "county": "淮阴区", "county_code": "320804", "sys_name": "用友GRP-U8R10", "sys_code": "CWGL" }, { "city_code": "3208", "city": "淮安市", "county": "淮安区", "county_code": "320803", "sys_name": "预算编审系统", "sys_code": "YSBS" }, { "city_code": "3208", "city": "淮安市", "county": "清浦区", "county_code": "320811", "sys_name": "财政一体化管理系统(基建户)", "sys_code": "ZHJJ" }, { "city_code": "3208", "city": "淮安市", "county": "清浦区", "county_code": "320811", "sys_name": "财政一体化管理系统(集中支付中心)", "sys_code": "GKZF" }, { "city_code": "3208", "city": "淮安市", "county": "清浦区", "county_code": "320811", "sys_name": "财政一体化管理系统(农业综合开发)", "sys_code": "ZHNF" }, { "city_code": "3208", "city": "淮安市", "county": "清浦区", "county_code": "320811", "sys_name": "财政一体化管理系统(预算外资金)", "sys_code": "YSW" }, { "city_code": "3208", "city": "淮安市", "county": "清浦区", "county_code": "320811", "sys_name": "财政一体化管理系统(支农专户)", "sys_code": "ZHZN" }, { "city_code": "3208", "city": "淮安市", "county": "清浦区", "county_code": "320811", "sys_name": "财政一体化管理系统(总预算)", "sys_code": "KJHS" }, { "city_code": "3208", "city": "淮安市", "county": "涟水县", "county_code": "320826", "sys_name": "非税征缴系统", "sys_code": "FSSR" }, { "city_code": "3208", "city": "淮安市", "county": "涟水县", "county_code": "320826", "sys_name": "国资管理系统", "sys_code": "ZCGL" }, { "city_code": "3208", "city": "淮安市", "county": "涟水县", "county_code": "320826", "sys_name": "乡财县管系统", "sys_code": "XCXG" }, { "city_code": "3208", "city": "淮安市", "county": "涟水县", "county_code": "320826", "sys_name": "乡财县管系统", "sys_code": "XCXG" }, { "city_code": "3208", "city": "淮安市", "county": "涟水县", "county_code": "320826", "sys_name": "预算编制管理系统", "sys_code": "YSBS" }, { "city_code": "3208", "city": "淮安市", "county": "涟水县", "county_code": "320826", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3208", "city": "淮安市", "county": "洪泽县", "county_code": "320829", "sys_name": "非税收入管理系统", "sys_code": "FSSR" }, { "city_code": "3208", "city": "淮安市", "county": "洪泽县", "county_code": "320829", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3208", "city": "淮安市", "county": "盱眙县", "county_code": "320830", "sys_name": "财政一体化平台", "sys_code": "YTH" }, { "city_code": "3208", "city": "淮安市", "county": "金湖县", "county_code": "320831", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3209", "city": "盐城市", "county": "市本级", "county_code": "320900", "sys_name": "盐城市_市本级_部门预算", "sys_code": "BMYS" }, { "city_code": "3209", "city": "盐城市", "county": "市本级", "county_code": "320900", "sys_name": "盐城市_市本级_非税收管理系统", "sys_code": "FSSR" }, { "city_code": "3209", "city": "盐城市", "county": "市本级", "county_code": "320900", "sys_name": "盐城市_市本级_预算执行系统", "sys_code": "YSZX" }, { "city_code": "3209", "city": "盐城市", "county": "亭湖区", "county_code": "320902", "sys_name": "盐城市_亭湖区_财政专户", "sys_code": "ZHHS" }, { "city_code": "3209", "city": "盐城市", "county": "亭湖区", "county_code": "320902", "sys_name": "盐城市_亭湖区_非税收入管理", "sys_code": "FSSR" }, { "city_code": "3209", "city": "盐城市", "county": "亭湖区", "county_code": "320902", "sys_name": "盐城市_亭湖区_国库集中支付管理", "sys_code": "GKZF" }, { "city_code": "3209", "city": "盐城市", "county": "亭湖区", "county_code": "320902", "sys_name": "盐城市_亭湖区_预算指标管理", "sys_code": "ZBGL" }, { "city_code": "3209", "city": "盐城市", "county": "亭湖区", "county_code": "320902", "sys_name": "盐城市_亭湖区_总预算会计核算", "sys_code": "KJHS" }, { "city_code": "3209", "city": "盐城市", "county": "盐都区", "county_code": "320903", "sys_name": "盐城市_盐都区_财政专户核算系统", "sys_code": "ZHHS" }, { "city_code": "3209", "city": "盐城市", "county": "盐都区", "county_code": "320903", "sys_name": "盐城市_盐都区_非税收入管理系统", "sys_code": "FSSR" }, { "city_code": "3209", "city": "盐城市", "county": "盐都区", "county_code": "320903", "sys_name": "盐城市_盐都区_国库集中支付系统", "sys_code": "GKZF" }, { "city_code": "3209", "city": "盐城市", "county": "盐都区", "county_code": "320903", "sys_name": "盐城市_盐都区_总预算会计核算系统", "sys_code": "KJHS" }, { "city_code": "3209", "city": "盐城市", "county": "响水县", "county_code": "320921", "sys_name": "盐城市_响水县_部门预算管理系统", "sys_code": "BMYS" }, { "city_code": "3209", "city": "盐城市", "county": "响水县", "county_code": "320921", "sys_name": "盐城市_响水县_财政一体化信息系统", "sys_code": "YTH" }, { "city_code": "3209", "city": "盐城市", "county": "响水县", "county_code": "320921", "sys_name": "盐城市_响水县_非税收入收缴管理系统", "sys_code": "FSSR" }, { "city_code": "3209", "city": "盐城市", "county": "滨海县", "county_code": "320922", "sys_name": "盐城市_滨海县财政一体化", "sys_code": "YTH" }, { "city_code": "3209", "city": "盐城市", "county": "阜宁县", "county_code": "320923", "sys_name": "盐城市_阜宁县_财政管理软件", "sys_code": "CZGL" }, { "city_code": "3209", "city": "盐城市", "county": "阜宁县", "county_code": "320923", "sys_name": "盐城市_阜宁县_财政管理软件用友U8", "sys_code": "YYZW" }, { "city_code": "3209", "city": "盐城市", "county": "射阳县", "county_code": "320924", "sys_name": "盐城市_射阳县_财政预算执行一体化系统", "sys_code": "YTH" }, { "city_code": "3209", "city": "盐城市", "county": "建湖县", "county_code": "320925", "sys_name": "盐城市_建湖县_非税收缴", "sys_code": "FSSR" }, { "city_code": "3209", "city": "盐城市", "county": "建湖县", "county_code": "320925", "sys_name": "盐城市_建湖县_财政一体化", "sys_code": "YTH" }, { "city_code": "3209", "city": "盐城市", "county": "建湖县", "county_code": "320925", "sys_name": "盐城市_建湖县_国库集中支付", "sys_code": "GKZF" }, { "city_code": "3209", "city": "盐城市", "county": "东台市", "county_code": "320981", "sys_name": "盐城市_东台市_部门预算编审系统", "sys_code": "BMYS" }, { "city_code": "3209", "city": "盐城市", "county": "东台市", "county_code": "320981", "sys_name": "盐城市_东台市_财政一体化信息系统", "sys_code": "YTH" }, { "city_code": "3209", "city": "盐城市", "county": "东台市", "county_code": "320981", "sys_name": "盐城市_东台市_财政专户核算系统", "sys_code": "ZHHS" }, { "city_code": "3209", "city": "盐城市", "county": "东台市", "county_code": "320981", "sys_name": "盐城市_东台市_非税收入收缴管理系统", "sys_code": "FSSR" }, { "city_code": "3209", "city": "盐城市", "county": "东台市", "county_code": "320981", "sys_name": "盐城市_东台市_总预算会计核算系统", "sys_code": "KJHS" }, { "city_code": "3209", "city": "盐城市", "county": "大丰区", "county_code": "320982", "sys_name": "盐城市_大丰区_部门预算系统", "sys_code": "BMYS" }, { "city_code": "3209", "city": "盐城市", "county": "大丰区", "county_code": "320982", "sys_name": "盐城市_大丰区_财政一体化", "sys_code": "YTH" }, { "city_code": "3209", "city": "盐城市", "county": "大丰区", "county_code": "320982", "sys_name": "盐城市_大丰区_总预算会计核算财务软件", "sys_code": "KJHS" }, { "city_code": "3209", "city": "盐城市", "county": "经济技术开发区", "county_code": "320991", "sys_name": "盐城市_经济技术开发区_部门预算软件", "sys_code": "BMYS" }, { "city_code": "3209", "city": "盐城市", "county": "经济技术开发区", "county_code": "320991", "sys_name": "盐城市_经济技术开发区_国库集中支付", "sys_code": "GKZF" }, { "city_code": "3210", "city": "扬州市", "county": "市本级", "county_code": "321000", "sys_name": "财政专户核算", "sys_code": "ZHHS" }, { "city_code": "3210", "city": "扬州市", "county": "市本级", "county_code": "321000", "sys_name": "老非税收入征缴系统", "sys_code": "FSSR" }, { "city_code": "3210", "city": "扬州市", "county": "市本级", "county_code": "321000", "sys_name": "扬州财政一体化信息管理系统", "sys_code": "YTH" }, { "city_code": "3210", "city": "扬州市", "county": "广陵区", "county_code": "321002", "sys_name": "财政一体化系统", "sys_code": "YTH" }, { "city_code": "3210", "city": "扬州市", "county": "广陵区", "county_code": "321002", "sys_name": "非税收入管理系统", "sys_code": "FSSR" }, { "city_code": "3210", "city": "扬州市", "county": "邗江区", "county_code": "321003", "sys_name": "财政一体化系统", "sys_code": "YTH" }, { "city_code": "3210", "city": "扬州市", "county": "邗江区", "county_code": "321003", "sys_name": "非税系统", "sys_code": "FSSR" }, { "city_code": "3210", "city": "扬州市", "county": "邗江区", "county_code": "321003", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3210", "city": "扬州市", "county": "宝应县", "county_code": "321023", "sys_name": "非税收入征收", "sys_code": "FSSR" }, { "city_code": "3210", "city": "扬州市", "county": "宝应县", "county_code": "321023", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3210", "city": "扬州市", "county": "仪征市", "county_code": "321081", "sys_name": "部门预算编制", "sys_code": "BMYS" }, { "city_code": "3210", "city": "扬州市", "county": "仪征市", "county_code": "321081", "sys_name": "非税收入收缴", "sys_code": "FSSR" }, { "city_code": "3210", "city": "扬州市", "county": "仪征市", "county_code": "321081", "sys_name": "行政事业性单位国有资产管理", "sys_code": "ZCGL" }, { "city_code": "3210", "city": "扬州市", "county": "仪征市", "county_code": "321081", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3210", "city": "扬州市", "county": "高邮市", "county_code": "321084", "sys_name": "财政业务系统", "sys_code": "YTH" }, { "city_code": "3210", "city": "扬州市", "county": "江都区", "county_code": "321088", "sys_name": "财政业务综合系统", "sys_code": "ZHYW" }, { "city_code": "3210", "city": "扬州市", "county": "江都区", "county_code": "321088", "sys_name": "江都开发区预算执行系统", "sys_code": "YSZX" }, { "city_code": "3211", "city": "镇江市", "county": "市本级", "county_code": "321100", "sys_name": "财政一体化", "sys_code": "YTH" }, { "city_code": "3211", "city": "镇江市", "county": "京口区", "county_code": "321102", "sys_name": "富深协通财政一体化业务管理系统", "sys_code": "YTH" }, { "city_code": "3211", "city": "镇江市", "county": "京口区", "county_code": "321102", "sys_name": "富深协通非税收缴系统", "sys_code": "FSSR" }, { "city_code": "3211", "city": "镇江市", "county": "京口区", "county_code": "321102", "sys_name": "富深协通工资统发系统", "sys_code": "GZTF" }, { "city_code": "3211", "city": "镇江市", "county": "润州区", "county_code": "321111", "sys_name": "部门预算系统", "sys_code": "BMYS" }, { "city_code": "3211", "city": "镇江市", "county": "润州区", "county_code": "321111", "sys_name": "财政一体化", "sys_code": "YTH" }, { "city_code": "3211", "city": "镇江市", "county": "润州区", "county_code": "321111", "sys_name": "非税收入", "sys_code": "FSSR" }, { "city_code": "3211", "city": "镇江市", "county": "丹徒区", "county_code": "321112", "sys_name": "财政综合业务系统", "sys_code": "YTH" }, { "city_code": "3211", "city": "镇江市", "county": "丹阳市", "county_code": "321181", "sys_name": "部门预算系统", "sys_code": "BMYS" }, { "city_code": "3211", "city": "镇江市", "county": "丹阳市", "county_code": "321181", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3211", "city": "镇江市", "county": "扬中市", "county_code": "321182", "sys_name": "部门预算系统", "sys_code": "BMYS" }, { "city_code": "3211", "city": "镇江市", "county": "扬中市", "county_code": "321182", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3211", "city": "镇江市", "county": "句容市", "county_code": "321183", "sys_name": "非税收入", "sys_code": "FSSR" }, { "city_code": "3211", "city": "镇江市", "county": "句容市", "county_code": "321183", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3212", "city": "泰州市", "county": "市本级", "county_code": "321200", "sys_name": "泰州市_市本级_部门预算系统", "sys_code": "BMYS" }, { "city_code": "3212", "city": "泰州市", "county": "市本级", "county_code": "321200", "sys_name": "泰州市_市本级_非税收入系统", "sys_code": "FSSR" }, { "city_code": "3212", "city": "泰州市", "county": "市本级", "county_code": "321200", "sys_name": "泰州市_市本级_绩效管理系统", "sys_code": "JXGL" }, { "city_code": "3212", "city": "泰州市", "county": "市本级", "county_code": "321200", "sys_name": "泰州市_市本级_预算执行系统", "sys_code": "YSZX" }, { "city_code": "3212", "city": "泰州市", "county": "市本级", "county_code": "321200", "sys_name": "泰州市_市本级_综合治税系统", "sys_code": "ZHZS" }, { "city_code": "3212", "city": "泰州市", "county": "海陵区", "county_code": "321202", "sys_name": "泰州市_海陵区_部门预算编制系统", "sys_code": "BMYS" }, { "city_code": "3212", "city": "泰州市", "county": "海陵区", "county_code": "321202", "sys_name": "泰州市_海陵区_县区财政一体化", "sys_code": "YTH" }, { "city_code": "3212", "city": "泰州市", "county": "高港区", "county_code": "321203", "sys_name": "泰州市_高港区_预算执行系统", "sys_code": "YSZX" }, { "city_code": "3212", "city": "泰州市", "county": "姜堰区", "county_code": "321204", "sys_name": "泰州市_姜堰区_部门预算系统", "sys_code": "BMYS" }, { "city_code": "3212", "city": "泰州市", "county": "姜堰区", "county_code": "321204", "sys_name": "泰州市_姜堰区_财政一体化系统", "sys_code": "YTH" }, { "city_code": "3212", "city": "泰州市", "county": "姜堰区", "county_code": "321204", "sys_name": "泰州市_姜堰区_非税收缴系统", "sys_code": "FSSR" }, { "city_code": "3212", "city": "泰州市", "county": "姜堰区", "county_code": "321204", "sys_name": "泰州市_姜堰区_预算执行系统", "sys_code": "YSZX" }, { "city_code": "3212", "city": "泰州市", "county": "医药高新区", "county_code": "321205", "sys_name": "泰州市_医药高新区_财政一体化系统", "sys_code": "YTH" }, { "city_code": "3212", "city": "泰州市", "county": "兴化市", "county_code": "321281", "sys_name": "泰州市_兴化市_部门预算", "sys_code": "BMYS" }, { "city_code": "3212", "city": "泰州市", "county": "兴化市", "county_code": "321281", "sys_name": "泰州市_兴化市_非税收缴", "sys_code": "FSSR" }, { "city_code": "3212", "city": "泰州市", "county": "兴化市", "county_code": "321281", "sys_name": "泰州市_兴化市_国库集中支付", "sys_code": "GKZF" }, { "city_code": "3212", "city": "泰州市", "county": "靖江市", "county_code": "321282", "sys_name": "泰州市_靖江市_预算执行系统", "sys_code": "YSZX" }, { "city_code": "3212", "city": "泰州市", "county": "靖江市", "county_code": "321282", "sys_name": "泰州市_靖江市_非税收入收缴", "sys_code": "FSSR" }, { "city_code": "3212", "city": "泰州市", "county": "靖江市", "county_code": "321282", "sys_name": "泰州市_靖江市_部门预算编审系统", "sys_code": "BMYS" }, { "city_code": "3212", "city": "泰州市", "county": "泰兴市", "county_code": "321283", "sys_name": "泰州市_泰兴市_部门预算系统", "sys_code": "BMYS" }, { "city_code": "3212", "city": "泰州市", "county": "泰兴市", "county_code": "321283", "sys_name": "泰州市_泰兴市_非税收入管理系统", "sys_code": "FSSR" }, { "city_code": "3212", "city": "泰州市", "county": "泰兴市", "county_code": "321283", "sys_name": "泰州市_泰兴市_预算执行系统", "sys_code": "BMYS" }, { "city_code": "3213", "city": "宿迁市", "county": "市本级", "county_code": "321300", "sys_name": "部门预算管理系统", "sys_code": "BMYS" }, { "city_code": "3213", "city": "宿迁市", "county": "市本级", "county_code": "321300", "sys_name": "非税收入管理系统", "sys_code": "FSSR" }, { "city_code": "3213", "city": "宿迁市", "county": "市本级", "county_code": "321300", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3213", "city": "宿迁市", "county": "宿城区", "county_code": "321302", "sys_name": "财政一体化平台及国库集中支付系统", "sys_code": "GKZF" }, { "city_code": "3213", "city": "宿迁市", "county": "宿城区", "county_code": "321302", "sys_name": "新中大非税收入管理", "sys_code": "FSSR" }, { "city_code": "3213", "city": "宿迁市", "county": "宿城区", "county_code": "321302", "sys_name": "总预算会计核算系统", "sys_code": "KJHS" }, { "city_code": "3213", "city": "宿迁市", "county": "宿豫区", "county_code": "321311", "sys_name": "非税收缴管理系统", "sys_code": "FSSR" }, { "city_code": "3213", "city": "宿迁市", "county": "宿豫区", "county_code": "321311", "sys_name": "联友财务管理系统", "sys_code": "CWGL" }, { "city_code": "3213", "city": "宿迁市", "county": "宿豫区", "county_code": "321311", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3213", "city": "宿迁市", "county": "沭阳县", "county_code": "321322", "sys_name": "非税收入管理系统", "sys_code": "FSSR" }, { "city_code": "3213", "city": "宿迁市", "county": "沭阳县", "county_code": "321322", "sys_name": "国库集中支付、指标管理系统", "sys_code": "YSZX" }, { "city_code": "3213", "city": "宿迁市", "county": "沭阳县", "county_code": "321322", "sys_name": "开发区总预算系统", "sys_code": "BMYS" }, { "city_code": "3213", "city": "宿迁市", "county": "沭阳县", "county_code": "321322", "sys_name": "总预算会计核算", "sys_code": "KJHS" }, { "city_code": "3213", "city": "宿迁市", "county": "泗阳县", "county_code": "321323", "sys_name": "预算执行", "sys_code": "YSZX" }, { "city_code": "3213", "city": "宿迁市", "county": "泗洪县", "county_code": "321324", "sys_name": "部门预算系统", "sys_code": "BMYS" }, { "city_code": "3213", "city": "宿迁市", "county": "泗洪县", "county_code": "321324", "sys_name": "非税收入管理系统", "sys_code": "FSSR" }, { "city_code": "3213", "city": "宿迁市", "county": "泗洪县", "county_code": "321324", "sys_name": "国库集中支付系统", "sys_code": "GKZF" }, { "city_code": "3213", "city": "宿迁市", "county": "泗洪县", "county_code": "321324", "sys_name": "国库账务系统", "sys_code": "KJHS" }, { "city_code": "3201", "city": "南京市", "county": "高新区", "county_code": "320100GXQ", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3201", "city": "南京市", "county": "化工园区", "county_code": "320100HGY", "sys_name": "化学工业园区非税收入管理系统", "sys_code": "FSSR" }, { "city_code": "3201", "city": "南京市", "county": "经济技术开发区", "county_code": "320100JKQ", "sys_name": "非税收入账套", "sys_code": "FSZT" }, { "city_code": "3201", "city": "南京市", "county": "化工园区", "county_code": "320101HGY", "sys_name": "化学工业园区预算执行系统", "sys_code": "YSZX" }, { "city_code": "3201", "city": "南京市", "county": "经济技术开发区", "county_code": "320101JKQ", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3201", "city": "南京市", "county": "化工园区", "county_code": "320102HGY", "sys_name": "会计核算", "sys_code": "KYHS" }, { "city_code": "3201", "city": "南京市", "county": "经济技术开发区", "county_code": "320102JKQ", "sys_name": "总预算会计账", "sys_code": "KJHS" }, { "city_code": "3202", "city": "无锡市", "county": "锡山开发区", "county_code": "320205KFQ", "sys_name": "预算内外收支核算系统", "sys_code": "KJHS" }, { "city_code": "3202", "city": "无锡市", "county": "滨湖区马山开发区", "county_code": "320211KFQ", "sys_name": "账户核算系统", "sys_code": "ZHHS" }, { "city_code": "3202", "city": "无锡市", "county": "江阴开发区", "county_code": "320281kfq", "sys_name": "财政一体化平台", "sys_code": "YTH" }, { "city_code": "3202", "city": "无锡市", "county": "江阴开发区", "county_code": "320281kfq", "sys_name": "账户核算系统", "sys_code": "ZHHS" }, { "city_code": "3202", "city": "无锡市", "county": "宜兴环科园", "county_code": "320282KFQ", "sys_name": "财务核算系统", "sys_code": "ZHHS" }, { "city_code": "3202", "city": "无锡市", "county": "宜兴开发区", "county_code": "320282KFQ", "sys_name": "总预算核算系统", "sys_code": "ZHHS" }, { "city_code": "3203", "city": "徐州市", "county": "经济技术开发区", "county_code": "320300JKQ", "sys_name": "富深协通财政一体化业务管理系统软件", "sys_code": "YTH" }, { "city_code": "3203", "city": "徐州市", "county": "经济技术开发区", "county_code": "320300JKQ", "sys_name": "账务处理系统(收支分类改革升级版)", "sys_code": "KJHS" }, { "city_code": "3204", "city": "常州市", "county": "天宁经开区", "county_code": "320402JKQ", "sys_name": "账务处理系统", "sys_code": "KJHS" }, { "city_code": "3204", "city": "常州市", "county": "钟楼区开发区", "county_code": "320404KFQ", "sys_name": "国库集中支付系统", "sys_code": "GKZF" }, { "city_code": "3204", "city": "常州市", "county": "钟楼区开发区", "county_code": "320405KFQ", "sys_name": "用款计划系统", "sys_code": "JHGL" }, { "city_code": "3204", "city": "常州市", "county": "钟楼区开发区", "county_code": "320406KFQ", "sys_name": "指标管理系统", "sys_code": "ZBGL" }, { "city_code": "3204", "city": "常州市", "county": "钟楼区开发区", "county_code": "320407KFQ", "sys_name": "总预算系统", "sys_code": "ZYS" }, { "city_code": "3204", "city": "常州市", "county": "经开区", "county_code": "320412JKQ", "sys_name": "财政预算外业务", "sys_code": "YSW" }, { "city_code": "3204", "city": "常州市", "county": "经开区", "county_code": "320412JKQ", "sys_name": "非税收缴系统", "sys_code": "FSSR" }, { "city_code": "3204", "city": "常州市", "county": "经开区", "county_code": "320412JKQ", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3204", "city": "常州市", "county": "武进高新区", "county_code": "320413GXQ", "sys_name": "财政一体化管理信息系统", "sys_code": "YTH" }, { "city_code": "3204", "city": "常州市", "county": "溧阳中关村", "county_code": "320481ZGC", "sys_name": "用友U8R10财政一体化平台", "sys_code": "YTH" }, { "city_code": "3204", "city": "常州市", "county": "溧阳中关村开发区", "county_code": "320481ZGCKF", "sys_name": "用友U8R10财政一体化平台", "sys_code": "YTH" }, { "city_code": "3205", "city": "苏州市", "county": "相城区开发区", "county_code": "320507KFQ", "sys_name": "开发区财政系统", "sys_code": "YTH" }, { "city_code": "3205", "city": "苏州市", "county": "常熟市高新区", "county_code": "320581GXQ", "sys_name": "高新区总预算系统", "sys_code": "ZYS" }, { "city_code": "3205", "city": "苏州市", "county": "昆山市开发区", "county_code": "320583KFQ", "sys_name": "开发区公共财政服务平台", "sys_code": "YTH" }, { "city_code": "3205", "city": "苏州市", "county": "太仓市新区", "county_code": "320585XQ", "sys_name": "非税收入系统", "sys_code": "FSSR" }, { "city_code": "3205", "city": "苏州市", "county": "太仓市新区", "county_code": "320586XQ", "sys_name": "会计核算系统", "sys_code": "KJHS" }, { "city_code": "3205", "city": "苏州市", "county": "太仓市新区", "county_code": "320587XQ", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3206", "city": "南通市", "county": "开发区", "county_code": "320600KFQ", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3206", "city": "南通市", "county": "苏通园区", "county_code": "320600STY", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3206", "city": "南通市", "county": "通州湾示范区", "county_code": "320600TZW", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3207", "city": "连云港市", "county": "开发区", "county_code": "320701KFQ", "sys_name": "非税收入", "sys_code": "FSSR" }, { "city_code": "3208", "city": "淮安市", "county": "开发区", "county_code": "320800KFQ", "sys_name": "用友GRP-U8管理软件", "sys_code": "YTH" }, { "city_code": "3209", "city": "盐城市", "county": "城南新区", "county_code": "320900CZXQ", "sys_name": "盐城市_城南新区_国库集中支付系统", "sys_code": "GKZF" }, { "city_code": "3209", "city": "盐城市", "county": "城南新区", "county_code": "320901CZXQ", "sys_name": "盐城市_城南新区_总预算账务处理系统", "sys_code": "KJHS" }, { "city_code": "3210", "city": "扬州市", "county": "化工园区", "county_code": "321000HGY", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3210", "city": "扬州市", "county": "开发区", "county_code": "321000KFQ", "sys_name": "非税收入收缴", "sys_code": "FSSR" }, { "city_code": "3210", "city": "扬州市", "county": "科技新城", "county_code": "321000KJC", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3210", "city": "扬州市", "county": "蜀冈-瘦西湖风景名胜区", "county_code": "321000SXH", "sys_name": "财政预算指标管理", "sys_code": "ZBGL" }, { "city_code": "3210", "city": "扬州市", "county": "蜀冈-瘦西湖风景名胜区", "county_code": "321000SXH", "sys_name": "总预算会计核算", "sys_code": "KJHS" }, { "city_code": "3210", "city": "扬州市", "county": "开发区", "county_code": "321001KFQ", "sys_name": "一体化系统", "sys_code": "YTH" }, { "city_code": "3210", "city": "扬州市", "county": "开发区", "county_code": "321002KFQ", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3210", "city": "扬州市", "county": "高邮开发区", "county_code": "321084KFQ", "sys_name": "财政业务系统", "sys_code": "YTH" }, { "city_code": "3211", "city": "镇江市", "county": "新区", "county_code": "321100XQ", "sys_name": "财政一体化", "sys_code": "YTH" }, { "city_code": "3212", "city": "泰州市", "county": "市本级", "county_code": "321200", "sys_name": "泰州市_市本级_行政管理系统", "sys_code": "XZGL" }, { "city_code": "3213", "city": "宿迁市", "county": "湖滨新城", "county_code": "321300HBXC", "sys_name": "新中大财务软件", "sys_code": "KJHS" }, { "city_code": "3213", "city": "宿迁市", "county": "经开区", "county_code": "321300JKQ", "sys_name": "新中大公共财政管理软件", "sys_code": "YTH" }, { "city_code": "3213", "city": "宿迁市", "county": "洋河新区", "county_code": "321300YHXQ", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3213", "city": "宿迁市", "county": "宿豫区开发区", "county_code": "321311KFQ", "sys_name": "开发区新中大财务核算系统", "sys_code": "KJHS" }, { "city_code": "3213", "city": "宿迁市", "county": "泗洪县开发区", "county_code": "321324KFQ", "sys_name": "开发区账务系统", "sys_code": "KJHS" }]; function getCountyByCode(code) { //var jsobj = JSON.parse(origin_place_arr); var jsobj = Kubernetes.origin_place_arr; var jsonlength = jsobj.length; for (var i = 0; i < jsonlength; i++) { if (jsobj[i].county_code == code) { return jsobj[i].city + jsobj[i].county; } } return code; } Kubernetes.getCountyByCode = getCountyByCode; function getCodeByCounty(place) { place = place.replace(/\s*\t*/gim, ""); //var jsobj = JSON.parse(origin_place_arr); var jsobj = Kubernetes.origin_place_arr; var jsonlength = jsobj.length; for (var i = 0; i < jsonlength; i++) { if (jsobj[i].city === "" || jsobj[i].city == undefined) continue; if (jsobj[i].county === "" || jsobj[i].county == undefined) continue; if ((place.indexOf(jsobj[i].city) != -1) && (place.indexOf(jsobj[i].county) != -1)) { return jsobj[i].county_code; } } return place; } Kubernetes.getCodeByCounty = getCodeByCounty; function getSystemNameById(id) { var temJson = Kubernetes.system_arr; var sys_size = temJson.length; for (var i = 0; i < sys_size; i++) { if (temJson[i].sys_id == id) { return temJson[i].sys_name; } } return id; } Kubernetes.getSystemNameById = getSystemNameById; function getIdBySystemName(name) { var temJson = Kubernetes.system_arr; var sys_size = temJson.length; for (var i = 0; i < sys_size; i++) { if (temJson[i].sys_name == name) { return temJson[i].sys_id; } } return name; } Kubernetes.getIdBySystemName = getIdBySystemName; function getCodeBySystemName(name) { var jsobj = Kubernetes.origin_place_arr; var jsonlength = jsobj.length; for (var i = 0; i < jsonlength; i++) { if (jsobj[i].sys_name == name) { return jsobj[i].sys_code; } } return name; } Kubernetes.getCodeBySystemName = getCodeBySystemName; })(Kubernetes || (Kubernetes = {})); /// /// /// /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.context = '/kubernetes'; Kubernetes.hash = '#' + Kubernetes.context; Kubernetes.defaultRoute = Kubernetes.hash + '/apps'; Kubernetes.pluginName = 'Kubernetes'; Kubernetes.pluginPath = 'plugins/kubernetes/'; Kubernetes.templatePath = Kubernetes.pluginPath + 'html/'; Kubernetes.log = Logger.get(Kubernetes.pluginName); Kubernetes.keepPollingModel = true; Kubernetes.defaultIconUrl = Core.url("/img/kubernetes.svg"); Kubernetes.hostIconUrl = Core.url("/img/host.svg"); // this gets set as a pre-bootstrap task Kubernetes.osConfig = undefined; Kubernetes.masterUrl = ""; Kubernetes.defaultApiVersion = "v1"; Kubernetes.defaultOSApiVersion = "v1"; Kubernetes.labelFilterTextSeparator = ","; Kubernetes.defaultNamespace = "default"; Kubernetes.appSuffix = ".app"; // kubernetes service names Kubernetes.kibanaServiceName = "kibana"; Kubernetes.fabric8ForgeServiceName = "fabric8-forge"; Kubernetes.gogsServiceName = "gogs"; Kubernetes.jenkinsServiceName = "jenkins"; Kubernetes.apimanServiceName = 'apiman'; Kubernetes.isOpenShift = true; Kubernetes.sshSecretDataKeys = ["ssh-key", "ssh-key.pub"]; Kubernetes.httpsSecretDataKeys = ["username", "password"]; function kubernetesNamespacePath() { var ns = currentKubernetesNamespace(); if (ns) { return "/namespaces/" + ns; } else { return ""; } } Kubernetes.kubernetesNamespacePath = kubernetesNamespacePath; function apiPrefix() { var prefix = Core.pathGet(Kubernetes.osConfig, ['api', 'k8s', 'prefix']); if (!prefix) { prefix = 'api'; } return Core.trimLeading(prefix, '/'); } Kubernetes.apiPrefix = apiPrefix; function osApiPrefix() { var prefix = Core.pathGet(Kubernetes.osConfig, ['api', 'openshift', 'prefix']); if (!prefix) { prefix = 'oapi'; } var answer = Core.trimLeading(prefix, '/'); if (!Kubernetes.isOpenShift) { return UrlHelpers.join(apiPrefix(), Kubernetes.defaultOSApiVersion, "proxy", kubernetesNamespacePath(), "services/templates", answer); } return answer; } Kubernetes.osApiPrefix = osApiPrefix; function masterApiUrl() { return Kubernetes.masterUrl || ""; } Kubernetes.masterApiUrl = masterApiUrl; /** WARNING - this excludes the host name - you probably want to use: kubernetesApiUrl() instead!! */ function kubernetesApiPrefix() { return UrlHelpers.join(apiPrefix(), Kubernetes.defaultApiVersion); } Kubernetes.kubernetesApiPrefix = kubernetesApiPrefix; function openshiftApiPrefix() { return UrlHelpers.join(osApiPrefix(), Kubernetes.defaultOSApiVersion); } Kubernetes.openshiftApiPrefix = openshiftApiPrefix; function prefixForType(type) { if (type === Kubernetes.WatchTypes.NAMESPACES) { return kubernetesApiPrefix(); } if (_.any(Kubernetes.NamespacedTypes.k8sTypes, function (t) { return t === type; })) { return kubernetesApiPrefix(); } if (_.any(Kubernetes.NamespacedTypes.osTypes, function (t) { return t === type; })) { return openshiftApiPrefix(); } // lets assume its an OpenShift extension type return openshiftApiPrefix(); } Kubernetes.prefixForType = prefixForType; function kubernetesApiUrl() { return UrlHelpers.join(masterApiUrl(), kubernetesApiPrefix()); } Kubernetes.kubernetesApiUrl = kubernetesApiUrl; function openshiftApiUrl() { return UrlHelpers.join(masterApiUrl(), openshiftApiPrefix()); } Kubernetes.openshiftApiUrl = openshiftApiUrl; function resourcesUriForKind(type, ns) { if (ns === void 0) { ns = null; } if (!ns) { ns = currentKubernetesNamespace(); } return UrlHelpers.join(masterApiUrl(), prefixForType(type), namespacePathForKind(type, ns)); } Kubernetes.resourcesUriForKind = resourcesUriForKind; function uriTemplateForKubernetesKind(type) { var urlTemplate = ''; switch (type) { case Kubernetes.WatchTypes.NAMESPACES: case "Namespaces": urlTemplate = UrlHelpers.join('namespaces'); break; case Kubernetes.WatchTypes.OAUTH_CLIENTS: case "OAuthClients": case "OAuthClient": return UrlHelpers.join('oauthclients'); case Kubernetes.WatchTypes.PROJECTS: case "Projects": urlTemplate = UrlHelpers.join('projects'); break; default: urlTemplate = UrlHelpers.join('namespaces/:namespace', type, ':id'); } return urlTemplate; } Kubernetes.uriTemplateForKubernetesKind = uriTemplateForKubernetesKind; function namespacePathForKind(type, ns) { var urlTemplate = ''; switch (type) { case Kubernetes.WatchTypes.NAMESPACES: case "Namespaces": case "Namespace": return UrlHelpers.join('namespaces'); case Kubernetes.WatchTypes.NODES: case "Nodes": case "node": return UrlHelpers.join('nodes'); case Kubernetes.WatchTypes.PROJECTS: case "Projects": case "Project": return UrlHelpers.join('projects'); case Kubernetes.WatchTypes.OAUTH_CLIENTS: case "OAuthClients": case "OAuthClient": return UrlHelpers.join('oauthclients'); case Kubernetes.WatchTypes.PERSISTENT_VOLUMES: case "PersistentVolumes": case "PersistentVolume": return UrlHelpers.join('persistentvolumes'); default: return UrlHelpers.join('namespaces', ns, type); } } Kubernetes.namespacePathForKind = namespacePathForKind; /** * Returns thevalue from the injector if its available or null */ function inject(name) { var injector = HawtioCore.injector; return injector ? injector.get(name) : null; } Kubernetes.inject = inject; function createResource(thing, urlTemplate, $resource, KubernetesModel) { var prefix = prefixForType(thing); if (!prefix) { Kubernetes.log.debug("Invalid type given: ", thing); return null; } var params = { namespace: currentKubernetesNamespace }; switch (thing) { case Kubernetes.WatchTypes.NAMESPACES: case Kubernetes.WatchTypes.OAUTH_CLIENTS: case Kubernetes.WatchTypes.NODES: case Kubernetes.WatchTypes.PROJECTS: case Kubernetes.WatchTypes.OAUTH_CLIENTS: case Kubernetes.WatchTypes.PERSISTENT_VOLUMES: params = {}; } var url = UrlHelpers.join(masterApiUrl(), prefix, urlTemplate); Kubernetes.log.debug("Url for ", thing, ": ", url); var resource = $resource(url, null, { query: { method: 'GET', isArray: false, params: params }, create: { method: 'POST', params: params }, save: { method: 'PUT', params: params }, delete: { method: 'DELETE', params: _.extend({ id: '@id' }, params) } }); return resource; } Kubernetes.createResource = createResource; function imageRepositoriesRestURL() { return UrlHelpers.join(openshiftApiUrl(), kubernetesNamespacePath(), "/imagestreams"); } Kubernetes.imageRepositoriesRestURL = imageRepositoriesRestURL; function deploymentConfigsRestURL() { return UrlHelpers.join(openshiftApiUrl(), kubernetesNamespacePath(), "/deploymentconfigs"); } Kubernetes.deploymentConfigsRestURL = deploymentConfigsRestURL; function buildsRestURL() { return UrlHelpers.join(openshiftApiUrl(), kubernetesNamespacePath(), "/builds"); } Kubernetes.buildsRestURL = buildsRestURL; function buildConfigHooksRestURL() { return UrlHelpers.join(openshiftApiUrl(), kubernetesNamespacePath(), "/buildconfighooks"); } Kubernetes.buildConfigHooksRestURL = buildConfigHooksRestURL; function buildConfigsRestURL() { return UrlHelpers.join(openshiftApiUrl(), kubernetesNamespacePath(), "/buildconfigs"); } Kubernetes.buildConfigsRestURL = buildConfigsRestURL; function routesRestURL() { return UrlHelpers.join(openshiftApiUrl(), kubernetesNamespacePath(), "/routes"); } Kubernetes.routesRestURL = routesRestURL; function templatesRestURL() { return UrlHelpers.join(openshiftApiUrl(), kubernetesNamespacePath(), "/templates"); } Kubernetes.templatesRestURL = templatesRestURL; function getNamespace(entity) { var answer = Core.pathGet(entity, ["metadata", "namespace"]); return answer ? answer : currentKubernetesNamespace(); } Kubernetes.getNamespace = getNamespace; function getLabels(entity) { var answer = Core.pathGet(entity, ["metadata", "labels"]); return answer ? answer : {}; } Kubernetes.getLabels = getLabels; function getName(entity) { if (angular.isString(entity)) { return entity; } return Core.pathGet(entity, ["metadata", "name"]) || Core.pathGet(entity, "name") || Core.pathGet(entity, "id"); } Kubernetes.getName = getName; function getKind(entity) { return Core.pathGet(entity, ["metadata", "kind"]) || Core.pathGet(entity, "kind"); } Kubernetes.getKind = getKind; function getSelector(entity) { return Core.pathGet(entity, ["spec", "selector"]); } Kubernetes.getSelector = getSelector; function getHost(pod) { return Core.pathGet(pod, ["spec", "host"]) || Core.pathGet(pod, ["spec", "nodeName"]) || Core.pathGet(pod, ["status", "hostIP"]); } Kubernetes.getHost = getHost; function getStatus(pod) { return Core.pathGet(pod, ["status", "phase"]); } Kubernetes.getStatus = getStatus; function getPorts(service) { return Core.pathGet(service, ["spec", "ports"]); } Kubernetes.getPorts = getPorts; function getCreationTimestamp(entity) { return Core.pathGet(entity, ["metadata", "creationTimestamp"]); } Kubernetes.getCreationTimestamp = getCreationTimestamp; ; function getAnnotations(entity) { return Core.pathGet(entity, ["metadata", "annotations"]); } Kubernetes.getAnnotations = getAnnotations; //var fabricDomain = Fabric.jmxDomain; var fabricDomain = "io.fabric8"; Kubernetes.mbean = fabricDomain + ":type=Kubernetes"; Kubernetes.managerMBean = fabricDomain + ":type=KubernetesManager"; Kubernetes.appViewMBean = fabricDomain + ":type=AppView"; function isKubernetes(workspace) { // return workspace.treeContainsDomainAndProperties(fabricDomain, {type: "Kubernetes"}); return true; } Kubernetes.isKubernetes = isKubernetes; function isKubernetesTemplateManager(workspace) { // return workspace.treeContainsDomainAndProperties(fabricDomain, {type: "KubernetesTemplateManager"}); return true; } Kubernetes.isKubernetesTemplateManager = isKubernetesTemplateManager; function isAppView(workspace) { // return workspace.treeContainsDomainAndProperties(fabricDomain, {type: "AppView"}); return true; } Kubernetes.isAppView = isAppView; function getStrippedPathName() { var pathName = Core.trimLeading((this.$location.path() || '/'), "#"); pathName = pathName.replace(/^\//, ''); return pathName; } Kubernetes.getStrippedPathName = getStrippedPathName; function linkContains() { var words = []; for (var _i = 0; _i < arguments.length; _i++) { words[_i - 0] = arguments[_i]; } var pathName = this.getStrippedPathName(); return _.every(words, function (word) { return pathName.indexOf(word) !== 0; }); } Kubernetes.linkContains = linkContains; /** * Returns true if the given link is active. The link can omit the leading # or / if necessary. * The query parameters of the URL are ignored in the comparison. * @method isLinkActive * @param {String} href * @return {Boolean} true if the given link is active */ function isLinkActive(href) { // lets trim the leading slash var pathName = getStrippedPathName(); var link = Core.trimLeading(href, "#"); link = link.replace(/^\//, ''); // strip any query arguments var idx = link.indexOf('?'); if (idx >= 0) { link = link.substring(0, idx); } if (!pathName.length) { return link === pathName; } else { return _.startsWith(pathName, link); } } Kubernetes.isLinkActive = isLinkActive; function setJson($scope, id, collection) { $scope.id = id; if (!$scope.fetched) { return; } if (!id) { $scope.json = ''; return; } if (!collection) { return; } var item = collection.find(function (item) { return getName(item) === id; }); if (item) { $scope.json = angular.toJson(item, true); $scope.item = item; } else { $scope.id = undefined; $scope.json = ''; $scope.item = undefined; } } Kubernetes.setJson = setJson; /** * Returns the labels text string using the key1=value1,key2=value2,.... format */ function labelsToString(labels, seperatorText) { if (seperatorText === void 0) { seperatorText = Kubernetes.labelFilterTextSeparator; } var answer = ""; angular.forEach(labels, function (value, key) { var separator = answer ? seperatorText : ""; answer += separator + key + "=" + value; }); return answer; } Kubernetes.labelsToString = labelsToString; function labelsFormat(replicas) { var annotion = getAnnotations(replicas); var lables = getLabels(replicas); var hasChineseVersion = lables["version"].indexOf("版本") == -1 ? "版本" + lables["version"] : lables["version"]; return { isExtract: lables["isExtract"], isTarget: lables["isTarget"], status: lables["status"], style: lables["style"], cityName: annotion["cityName"], districtName: annotion["districtName"], systemName: annotion["systemName"], year: annotion["year"], version: hasChineseVersion }; } Kubernetes.labelsFormat = labelsFormat; function initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL) { $scope.baseUri = Core.trimTrailing(Core.url("/") || "", "/") || ""; var injector = HawtioCore.injector; function hasService(name) { if (injector) { var ServiceRegistry = injector.get("ServiceRegistry"); if (ServiceRegistry) { return ServiceRegistry.hasService(name); } } return false; } $scope.hasServiceKibana = function () { return hasService(Kubernetes.kibanaServiceName); }; $scope.hasServiceGogs = function () { return hasService(Kubernetes.gogsServiceName); }; $scope.hasServiceForge = function () { return hasService(Kubernetes.fabric8ForgeServiceName); }; $scope.hasServiceApiman = function () { return hasService(Kubernetes.apimanServiceName); }; $scope.viewTemplates = function () { var returnTo = $location.url(); $location.path('/kubernetes/templates').search({ 'returnTo': returnTo }); }; $scope.namespace = $routeParams.namespace || $scope.namespace || KubernetesState.selectedNamespace || Kubernetes.defaultNamespace; if ($scope.namespace != KubernetesState.selectedNamespace) { KubernetesState.selectedNamespace = $scope.namespace; // lets show page is going to reload if ($scope.model) { $scope.model.fetched = false; } } Kubernetes.setCurrentKubernetesNamespace($scope.namespace); $scope.forgeEnabled = isForgeEnabled(); $scope.projectId = $routeParams["project"] || $scope.projectId || $scope.id; var showProjectNavBars = false; if ($scope.projectId && showProjectNavBars) { $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.projectId); $scope.subTabConfig = Developer.createProjectSubNavBars($scope.projectId, null, $scope); } else { $scope.breadcrumbConfig = Developer.createEnvironmentBreadcrumbs($scope, $location, $routeParams); $scope.subTabConfig = Developer.createEnvironmentSubNavBars($scope, $location, $routeParams); } if ($scope.projectId) { $scope.$projectLink = Developer.projectLink($scope.projectId); } $scope.link = function (href) { if (!href) { return href; } if ($scope.$projectLink) { return Developer.namespaceLink($scope, $routeParams, href.replace(/^\/kubernetes/, '')); } else { return href; } }; $scope.codeMirrorOptions = { lineWrapping: true, lineNumbers: true, readOnly: 'nocursor', mode: { name: "javascript", json: true } }; $scope.resizeDialog = { controller: null, newReplicas: 0, dialog: new UI.Dialog(), onOk: function () { var resizeDialog = $scope.resizeDialog; resizeDialog.dialog.close(); resizeController($http, KubernetesApiURL, resizeDialog.controller, resizeDialog.newReplicas, function () { Kubernetes.log.debug("updated number of replicas"); }); }, open: function (controller) { var resizeDialog = $scope.resizeDialog; resizeDialog.controller = controller; resizeDialog.newReplicas = Core.pathGet(controller, ["status", "replicas"]); resizeDialog.dialog.open(); $timeout(function () { $('#replicas').focus(); }, 50); }, close: function () { $scope.resizeDialog.dialog.close(); } }; $scope.triggerBuild = function (buildConfig) { var url = buildConfig.$triggerUrl; console.log("triggering build at url: " + url); if (url) { //var data = {}; var data = null; var config = { headers: { 'Content-Type': "application/json" } }; var name = Core.pathGet(buildConfig, ["metadata", "name"]); Core.notification('info', "Triggering build " + name); $http.post(url, data, config). success(function (data, status, headers, config) { console.log("trigger worked! got data " + angular.toJson(data, true)); // TODO should we show some link to the build Core.notification('info', "Building " + name); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); Core.notification('error', "Failed to trigger build for " + name + ". Returned code: " + status + " " + data); }); } ; }; // update the URL if the filter is changed $scope.$watch("tableConfig.filterOptions.filterText", function (text) { //var filterText = Kubernetes.findValeOfLabels(text); $location.search("q", text); }); $scope.$on("labelFilterUpdate", function ($event, text) { var filterOptions = ($scope.tableConfig || {}).filterOptions || {}; var currentFilter = filterOptions.filterText; if (Core.isBlank(currentFilter)) { filterOptions.filterText = text; } else { var expressions = currentFilter.split(/\s+/); if (expressions.indexOf(text) !== -1) { // lets exclude this filter expression expressions = expressions.remove(text); filterOptions.filterText = expressions.join(" "); } else { filterOptions.filterText = currentFilter + " " + text; } } $scope.id = undefined; }); } Kubernetes.initShared = initShared; /** * Returns the number of pods that are ready */ function readyPodCount(service) { var count = 0; angular.forEach((service || {}).$pods, function (pod) { if (pod.$ready) { count++; } }); return count; } Kubernetes.readyPodCount = readyPodCount; /** * Returns the service link URL for either the service name or the service object */ function serviceLinkUrl(service, httpOnly) { if (httpOnly === void 0) { httpOnly = false; } if (angular.isObject(service)) { var portalIP = service.$host; // lets assume no custom port for now for external routes var port = null; var protocol = "http://"; var spec = service.spec; if (spec) { if (!portalIP) { portalIP = spec.portalIP; } var hasHttps = false; var hasHttp = false; angular.forEach(spec.ports, function (portSpec) { var p = portSpec.port; if (p) { if (p === 443) { hasHttps = true; } else if (p === 80) { hasHttp = true; } if (!port) { port = p; } } }); if (!hasHttps && !hasHttp && port) { // lets treat 8080 as http which is a common service to export if (port === 8080) { hasHttp = true; } else if (port === 8443) { hasHttps = true; } } } if (portalIP) { if (hasHttps) { return "https://" + portalIP; } else if (hasHttp) { return "http://" + portalIP; } else if (!httpOnly) { if (port) { return protocol + portalIP + ":" + port + "/"; } else { return protocol + portalIP; } } } } else if (service) { var serviceId = service.toString(); if (serviceId) { var ServiceRegistry = getServiceRegistry(); if (ServiceRegistry) { return ServiceRegistry.serviceLink(serviceId) || ""; } } } return ""; } Kubernetes.serviceLinkUrl = serviceLinkUrl; /** * Returns the total number of counters for the podCounters object */ function podCounterTotal($podCounters) { var answer = 0; if ($podCounters) { angular.forEach(["ready", "valid", "waiting", "error"], function (name) { var value = $podCounters[name] || 0; answer += value; }); } return answer; } Kubernetes.podCounterTotal = podCounterTotal; /** * Given the list of pods lets iterate through them and find all pods matching the selector * and return counters based on the status of the pod */ function createPodCounters(selector, pods, outputPods, podLinkQuery, podLinkUrl) { if (outputPods === void 0) { outputPods = []; } if (podLinkQuery === void 0) { podLinkQuery = null; } if (podLinkUrl === void 0) { podLinkUrl = null; } if (!podLinkUrl) { podLinkUrl = "/kubernetes/pods"; } var filterFn; if (angular.isFunction(selector)) { filterFn = selector; } else { filterFn = function (pod) { return selectorMatches(selector, getLabels(pod)); }; } var answer = { podsLink: "", ready: 0, valid: 0, waiting: 0, error: 0 }; if (selector) { if (!podLinkQuery) { podLinkQuery = Kubernetes.labelsToString(selector, " "); } answer.podsLink = podLinkUrl + "?q=" + encodeURIComponent(podLinkQuery); angular.forEach(pods, function (pod) { if (filterFn(pod)) { outputPods.push(pod); var status = getStatus(pod); if (status) { var lower = status.toLowerCase(); if (lower.startsWith("run")) { if (isReady(pod)) { answer.ready += 1; } else { answer.valid += 1; } } else if (lower.startsWith("wait") || lower.startsWith("pend")) { answer.waiting += 1; } else if (lower.startsWith("term") || lower.startsWith("error") || lower.startsWith("fail")) { answer.error += 1; } } else { answer.error += 1; } } }); } return answer; } Kubernetes.createPodCounters = createPodCounters; /** * Converts the given json into an array of items. If the json contains a nested set of items then that is sorted; so that services * are processed first; then turned into an array. Otherwise the json is put into an array so it can be processed polymorphically */ function convertKubernetesJsonToItems(json) { var items = json.items; if (angular.isArray(items)) { // TODO we could check for List or Config types here and warn if not // sort the services first var answer = []; items.forEach(function (item) { if (item.kind === "Service") { answer.push(item); } }); items.forEach(function (item) { if (item.kind !== "Service") { answer.push(item); } }); return answer; } else { return [json]; } } Kubernetes.convertKubernetesJsonToItems = convertKubernetesJsonToItems; function isV1beta1Or2() { return Kubernetes.defaultApiVersion === "v1beta1" || Kubernetes.defaultApiVersion === "v1beta2"; } Kubernetes.isV1beta1Or2 = isV1beta1Or2; /** * Returns a link to the detail page for the given entity */ function entityPageLink(obj) { if (obj) { function getLink(entity) { var viewLink = entity["$viewLink"]; if (viewLink) { return viewLink; } var id = getName(entity); var kind = getKind(entity); if (kind && id) { var path = kind.substring(0, 1).toLowerCase() + kind.substring(1) + "s"; var namespace = getNamespace(entity); if (namespace && !isIgnoreNamespaceKind(kind)) { return Core.url(UrlHelpers.join('/kubernetes/namespace', namespace, path, id)); } else { return Core.url(UrlHelpers.join('/kubernetes', path, id)); } } } var baseLink = getLink(obj); if (!HawtioCore.injector || !baseLink) { return baseLink; } var $routeParams = HawtioCore.injector.get('$routeParams'); var projectId = $routeParams['project'] || $routeParams['project']; if (!projectId) { return baseLink; } return UrlHelpers.join(Developer.projectLink(projectId), baseLink.replace(/^\/kubernetes\//, '')); } return null; } Kubernetes.entityPageLink = entityPageLink; function resourceKindToUriPath(kind) { var kindPath = kind.toLowerCase() + "s"; if (kindPath === "replicationControllers" && !isV1beta1Or2()) { kindPath = "replicationcontrollers"; } return kindPath; } Kubernetes.resourceKindToUriPath = resourceKindToUriPath; function isIgnoreNamespaceKind(kind) { return kind === "Host" || kind === "Minion"; } /** * Returns the root URL for the kind */ function kubernetesUrlForKind(KubernetesApiURL, kind, namespace, path) { if (namespace === void 0) { namespace = null; } if (path === void 0) { path = null; } var pathSegment = ""; if (path) { pathSegment = "/" + Core.trimLeading(path, "/"); } var kindPath = resourceKindToUriPath(kind); var ignoreNamespace = isIgnoreNamespaceKind(kind); if (isV1beta1Or2() || ignoreNamespace) { var postfix = ""; if (namespace && !ignoreNamespace) { postfix = "?namespace=" + namespace; } return UrlHelpers.join(KubernetesApiURL, kindPath, pathSegment, postfix); } else { return UrlHelpers.join(KubernetesApiURL, "/namespaces/", namespace, kindPath, pathSegment); } } Kubernetes.kubernetesUrlForKind = kubernetesUrlForKind; ; /** * Returns the base URL for the kind of kubernetes resource or null if it cannot be found */ function kubernetesUrlForItemKind(KubernetesApiURL, json) { var kind = json.kind; if (kind) { return kubernetesUrlForKind(KubernetesApiURL, kind, json.namespace); } else { Kubernetes.log.warn("Ignoring missing kind " + kind + " for kubernetes json: " + angular.toJson(json)); return null; } } Kubernetes.kubernetesUrlForItemKind = kubernetesUrlForItemKind; function kubernetesProxyUrlForService(KubernetesApiURL, service, path) { if (path === void 0) { path = null; } var pathSegment = ""; if (path) { pathSegment = "/" + Core.trimLeading(path, "/"); } else { pathSegment = "/"; } var namespace = getNamespace(service); if (isV1beta1Or2()) { var postfix = "?namespace=" + namespace; return UrlHelpers.join(KubernetesApiURL, "/proxy", kubernetesNamespacePath(), "/services/" + getName(service) + pathSegment + postfix); } else { return UrlHelpers.join(KubernetesApiURL, "/proxy/namespaces/", namespace, "/services/" + getName(service) + pathSegment); } } Kubernetes.kubernetesProxyUrlForService = kubernetesProxyUrlForService; function kubernetesProxyUrlForServiceCurrentNamespace(service, path) { if (path === void 0) { path = null; } var apiPrefix = UrlHelpers.join(kubernetesApiUrl()); return kubernetesProxyUrlForService(apiPrefix, service, path); } Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace = kubernetesProxyUrlForServiceCurrentNamespace; function buildConfigRestUrl(id) { return UrlHelpers.join(buildConfigsRestURL(), id); } Kubernetes.buildConfigRestUrl = buildConfigRestUrl; function deploymentConfigRestUrl(id) { return UrlHelpers.join(deploymentConfigsRestURL(), id); } Kubernetes.deploymentConfigRestUrl = deploymentConfigRestUrl; function imageRepositoryRestUrl(id) { return UrlHelpers.join(imageRepositoriesRestURL(), id); } Kubernetes.imageRepositoryRestUrl = imageRepositoryRestUrl; function buildRestUrl(id) { return UrlHelpers.join(buildsRestURL(), id); } Kubernetes.buildRestUrl = buildRestUrl; function buildLogsRestUrl(id) { return UrlHelpers.join(buildsRestURL(), id, "log"); } Kubernetes.buildLogsRestUrl = buildLogsRestUrl; /** * Runs the given application JSON */ function runApp($location, $scope, $http, KubernetesApiURL, json, name, onSuccessFn, namespace, onCompleteFn) { if (name === void 0) { name = "App"; } if (onSuccessFn === void 0) { onSuccessFn = null; } if (namespace === void 0) { namespace = null; } if (onCompleteFn === void 0) { onCompleteFn = null; } if (json) { if (angular.isString(json)) { json = angular.fromJson(json); } name = name || "App"; var postfix = namespace ? " in namespace " + namespace : ""; Core.notification('info', "Running " + name + postfix); var items = convertKubernetesJsonToItems(json); angular.forEach(items, function (item) { var url = kubernetesUrlForItemKind(KubernetesApiURL, item); if (url) { $http.post(url, item). success(function (data, status, headers, config) { Kubernetes.log.debug("Got status: " + status + " on url: " + url + " data: " + data + " after posting: " + angular.toJson(item)); if (angular.isFunction(onCompleteFn)) { onCompleteFn(); } Core.$apply($scope); }). error(function (data, status, headers, config) { var message = null; if (angular.isObject(data)) { message = data.message; var reason = data.reason; if (reason === "AlreadyExists") { // lets ignore duplicates Kubernetes.log.debug("entity already exists at " + url); return; } } if (!message) { message = "Failed to POST to " + url + " got status: " + status; } Kubernetes.log.warn("Failed to save " + url + " status: " + status + " response: " + angular.toJson(data, true)); Core.notification('error', message); }); } }); } } Kubernetes.runApp = runApp; /** * Returns true if the current status of the pod is running */ function isRunning(podCurrentState) { var status = (podCurrentState || {}).phase; if (status) { var lower = status.toLowerCase(); return lower.startsWith("run"); } else { return false; } } Kubernetes.isRunning = isRunning; /** * Returns true if the labels object has all of the key/value pairs from the selector */ function selectorMatches(selector, labels) { if (angular.isObject(labels)) { var answer = true; var count = 0; angular.forEach(selector, function (value, key) { count++; if (answer && labels[key] !== value) { answer = false; } }); return answer && count > 0; } else { return false; } } Kubernetes.selectorMatches = selectorMatches; /** * Returns the service registry */ function getServiceRegistry() { var injector = HawtioCore.injector; return injector ? injector.get("ServiceRegistry") : null; } Kubernetes.getServiceRegistry = getServiceRegistry; /** * Returns a link to the kibana logs web application */ function kibanaLogsLink(ServiceRegistry) { var link = ServiceRegistry.serviceLink(Kubernetes.kibanaServiceName); if (link) { if (!link.endsWith("/")) { link += "/"; } return link + "#/dashboard/Fabric8"; } else { return null; } } Kubernetes.kibanaLogsLink = kibanaLogsLink; function openLogsForPods(ServiceRegistry, $window, namespace, pods) { var link = kibanaLogsLink(ServiceRegistry); if (link) { var query = ""; var count = 0; angular.forEach(pods, function (item) { var id = getName(item); if (id) { var space = query ? " OR " : ""; count++; query += space + '"' + id + '"'; } }); if (query) { if (count > 1) { query = "(" + query + ")"; } query = 'kubernetes.namespace_name:"' + namespace + '" AND kubernetes.pod_name:' + query; link += "?_a=(query:(query_string:(query:'" + query + "')))"; var newWindow = $window.open(link, "viewLogs"); } } } Kubernetes.openLogsForPods = openLogsForPods; function resizeController($http, KubernetesApiURL, replicationController, newReplicas, onCompleteFn) { if (onCompleteFn === void 0) { onCompleteFn = null; } var id = getName(replicationController); var namespace = getNamespace(replicationController) || ""; var url = kubernetesUrlForKind(KubernetesApiURL, "ReplicationController", namespace, id); $http.get(url). success(function (data, status, headers, config) { if (data) { var desiredState = data.spec; if (!desiredState) { desiredState = {}; data.spec = desiredState; } desiredState.replicas = newReplicas; $http.put(url, data). success(function (data, status, headers, config) { Kubernetes.log.debug("updated controller " + url); if (angular.isFunction(onCompleteFn)) { onCompleteFn(); } }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to save " + url + " " + data + " " + status); }); } }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); } Kubernetes.resizeController = resizeController; function statusTextToCssClass(text, ready) { if (ready === void 0) { ready = false; } if (text) { var lower = text.toLowerCase(); if (lower.startsWith("run") || lower.startsWith("ok")) { if (!ready) { return "fa fa-spinner fa-spin green"; } return 'fa fa-play-circle green'; } else if (lower.startsWith("wait") || lower.startsWith("pend")) { return 'fa fa-download'; } else if (lower.startsWith("term") || lower.startsWith("error") || lower.startsWith("fail")) { return 'fa fa-off orange'; } else if (lower.startsWith("succeeded")) { return 'fa fa-check-circle-o green'; } } return 'fa fa-question red'; } Kubernetes.statusTextToCssClass = statusTextToCssClass; function podStatus(pod) { return getStatus(pod); } Kubernetes.podStatus = podStatus; function isReady(pod) { var status = pod.status || {}; var answer = false; angular.forEach(status.conditions, function (condition) { var t = condition.type; if (t && t === "Ready") { var status = condition.status; if (status === "True") { answer = true; } } }); return answer; } Kubernetes.isReady = isReady; function createAppViewPodCounters(appView) { var array = []; var map = {}; var pods = appView.pods; var lowestDate = null; angular.forEach(pods, function (pod) { var selector = getLabels(pod); var selectorText = Kubernetes.labelsToString(selector, " "); var answer = map[selector]; if (!answer) { answer = { labelText: selectorText, podsLink: UrlHelpers.join("/kubernetes/namespace/", pod.metadata.namespace, "pods?q=" + encodeURIComponent(selectorText)), valid: 0, waiting: 0, error: 0 }; map[selector] = answer; array.push(answer); } var status = (podStatus(pod) || "Error").toLowerCase(); if (status.startsWith("run") || status.startsWith("ok")) { answer.valid += 1; } else if (status.startsWith("wait") || status.startsWith("pwnd")) { answer.waiting += 1; } else { answer.error += 1; } var creationTimestamp = getCreationTimestamp(pod); if (creationTimestamp) { var d = new Date(creationTimestamp); if (!lowestDate || d < lowestDate) { lowestDate = d; } } }); appView.$creationDate = lowestDate; return array; } Kubernetes.createAppViewPodCounters = createAppViewPodCounters; function createAppViewServiceViews(appView) { var array = []; var pods = appView.pods; angular.forEach(pods, function (pod) { var id = getName(pod); if (id) { var abbrev = id; var idx = id.indexOf("-"); if (idx > 1) { abbrev = id.substring(0, idx); } pod.idAbbrev = abbrev; } pod.statusClass = statusTextToCssClass(podStatus(pod), isReady(pod)); }); var services = appView.services || []; var replicationControllers = appView.replicationControllers || []; var size = Math.max(services.length, replicationControllers.length, 1); var appName = appView.$info.name; for (var i = 0; i < size; i++) { var service = services[i]; var replicationController = replicationControllers[i]; var controllerId = getName(replicationController); var name = getName(service) || controllerId; var address = Core.pathGet(service, ["spec", "portalIP"]); if (!name && pods.length) { name = pods[0].idAbbrev; } if (!appView.$info.name) { appView.$info.name = name; } if (!appView.id && pods.length) { appView.id = getName(pods[0]); } if (i > 0) { appName = name; } var podCount = pods.length; var podCountText = podCount + " pod" + (podCount > 1 ? "s" : ""); var view = { appName: appName || name, name: name, createdDate: appView.$creationDate, podCount: podCount, podCountText: podCountText, address: address, controllerId: controllerId, service: service, replicationController: replicationController, pods: pods }; array.push(view); } return array; } Kubernetes.createAppViewServiceViews = createAppViewServiceViews; /** * converts a git path into an accessible URL for the browser */ function gitPathToUrl(iconPath, branch) { if (branch === void 0) { branch = "master"; } return (HawtioCore.injector.get('AppLibraryURL') || '') + "/git/" + branch + iconPath; } Kubernetes.gitPathToUrl = gitPathToUrl; function asDate(value) { return value ? new Date(value) : null; } function enrichBuildConfig(buildConfig, sortedBuilds) { if (buildConfig) { var triggerUrl = null; var metadata = buildConfig.metadata || {}; var name = metadata.name; buildConfig.$name = name; var projectLink = Developer.projectLink(name); var ns = metadata.namespace || currentKubernetesNamespace(); buildConfig.$namespace = ns; buildConfig.environments = []; buildConfig.$creationDate = asDate(Kubernetes.getCreationTimestamp(buildConfig)); buildConfig.$labelsText = Kubernetes.labelsToString(getLabels(buildConfig)); if (name) { buildConfig.$viewLink = UrlHelpers.join("workspaces", ns, "projects", name, "environments"); buildConfig.$editLink = UrlHelpers.join("workspaces", ns, "projects", name, "buildConfigEdit"); angular.forEach([false, true], function (flag) { angular.forEach(buildConfig.triggers, function (trigger) { if (!triggerUrl) { var type = trigger.type; if (type === "generic" || flag) { var generic = trigger[type]; if (type && generic) { var secret = generic.secret; if (secret) { triggerUrl = UrlHelpers.join(buildConfigHooksRestURL(), name, secret, type); buildConfig.$triggerUrl = triggerUrl; } } } } }); }); // lets find the latest build... if (sortedBuilds) { buildConfig.$lastBuild = _.find(sortedBuilds, { metadata: { labels: { buildconfig: name } } }); } } var $fabric8Views = {}; function defaultPropertiesIfNotExist(name, object, autoCreate) { if (autoCreate === void 0) { autoCreate = false; } var view = $fabric8Views[name]; if (autoCreate && !view) { view = {}; $fabric8Views[name] = view; } if (view) { angular.forEach(object, function (value, property) { var current = view[property]; if (!current) { view[property] = value; } }); } } function defaultPropertiesIfNotExistStartsWith(prefix, object, autoCreate) { if (autoCreate === void 0) { autoCreate = false; } angular.forEach($fabric8Views, function (view, name) { if (view && name.startsWith(prefix)) { angular.forEach(object, function (value, property) { var current = view[property]; if (!current) { view[property] = value; } }); } }); } var labels = metadata.labels || {}; var annotations = metadata.annotations || {}; // lets default the repo and user buildConfig.$user = annotations["fabric8.jenkins/user"] || labels["user"]; buildConfig.$repo = annotations["fabric8.jenkins/repo"] || labels["repo"]; angular.forEach(annotations, function (value, key) { var parts = key.split('/', 2); if (parts.length > 1) { var linkId = parts[0]; var property = parts[1]; if (linkId && property && linkId.startsWith("fabric8.link")) { var link = $fabric8Views[linkId]; if (!link) { link = { class: linkId }; $fabric8Views[linkId] = link; } link[property] = value; } } }); if (buildConfig.$user && buildConfig.$repo) { // browse gogs repo view var gogsUrl = serviceLinkUrl(Kubernetes.gogsServiceName); if (gogsUrl) { defaultPropertiesIfNotExist("fabric8.link.browseGogs.view", { label: "Browse...", url: UrlHelpers.join(gogsUrl, buildConfig.$user, buildConfig.$repo), description: "Browse the source code of this repository", iconClass: "fa fa-external-link" }, true); } // run forge commands view defaultPropertiesIfNotExist("fabric8.link.forgeCommand.view", { label: "Command...", url: UrlHelpers.join(projectLink, "/forge/commands/user", buildConfig.$user, buildConfig.$repo), description: "Perform an action on this project", iconClass: "fa fa-play-circle" }, true); // configure devops view defaultPropertiesIfNotExist("fabric8.link.forgeCommand.devops.settings", { label: "Settings", url: UrlHelpers.join(projectLink, "/forge/command/devops-edit/user", buildConfig.$user, buildConfig.$repo), description: "Configure the DevOps settings for this project", iconClass: "fa fa-pencil-square-o" }, true); } // add some icons and descriptions defaultPropertiesIfNotExist("fabric8.link.repository.browse", { label: "Browse...", description: "Browse the source code of this repository", iconClass: "fa fa-external-link" }); defaultPropertiesIfNotExist("fabric8.link.jenkins.job", { iconClass: "fa fa-tasks", description: "View the Jenkins Job for this build" }); defaultPropertiesIfNotExist("fabric8.link.jenkins.monitor", { iconClass: "fa fa-tachometer", description: "View the Jenkins Monitor dashboard for this project" }); defaultPropertiesIfNotExist("fabric8.link.jenkins.pipeline", { iconClass: "fa fa-arrow-circle-o-right", description: "View the Jenkins Pipeline for this project" }); defaultPropertiesIfNotExist("fabric8.link.letschat.room", { iconClass: "fa fa-comment", description: "Chat room for this project" }); defaultPropertiesIfNotExist("fabric8.link.letschat.room", { iconClass: "fa fa-comment", description: "Chat room for this project" }); defaultPropertiesIfNotExist("fabric8.link.taiga", { iconClass: "fa fa-check-square-o", description: "Issue tracker for this project" }); defaultPropertiesIfNotExist("fabric8.link.issues", { iconClass: "fa fa-check-square-o", description: "Issues for this project" }); defaultPropertiesIfNotExist("fabric8.link.releases", { iconClass: "fa fa-tag", description: "Issues for this project" }); defaultPropertiesIfNotExist("fabric8.link.taiga.team", { iconClass: "fa fa-users", description: "Team members for this project" }); defaultPropertiesIfNotExist("fabric8.link.team", { iconClass: "fa fa-users", description: "Team members for this project" }); defaultPropertiesIfNotExistStartsWith("fabric8.link.environment.", { iconClass: "fa fa-cloud", description: "The kubernetes namespace for this environment" }); // lets put the views into sections... var $fabric8CodeViews = {}; var $fabric8BuildViews = {}; var $fabric8TeamViews = {}; var $fabric8EnvironmentViews = {}; angular.forEach($fabric8Views, function (value, key) { var view; if (key.indexOf("taiga") > 0 || key.indexOf(".issue") > 0 || key.indexOf("letschat") > 0 || key.indexOf(".team") > 0) { view = $fabric8TeamViews; } else if (key.indexOf("jenkins") > 0) { view = $fabric8BuildViews; } else if (key.indexOf(".environment.") > 0) { view = $fabric8EnvironmentViews; } else { view = $fabric8CodeViews; } view[key] = value; }); buildConfig.$fabric8Views = $fabric8Views; buildConfig.$fabric8CodeViews = $fabric8CodeViews; buildConfig.$fabric8BuildViews = $fabric8BuildViews; buildConfig.$fabric8EnvironmentViews = $fabric8EnvironmentViews; buildConfig.$fabric8TeamViews = $fabric8TeamViews; var $jenkinsJob = annotations["fabric8.io/jenkins-job"]; if (!$jenkinsJob && $fabric8Views["fabric8.link.jenkins.job"]) { $jenkinsJob = name; } buildConfig.$jenkinsJob = $jenkinsJob; angular.forEach($fabric8EnvironmentViews, function (env) { var c = env.class; var prefix = "fabric8.link.environment."; if (c && c.startsWith(prefix)) { var ens = c.substring(prefix.length); env.namespace = ens; env.url = UrlHelpers.join("/workspaces", ns, "projects", name, "namespace", ens); } buildConfig.environments.push(env); }); if (!buildConfig.environments.length) { // lets create a single environment var ens = ns; var env = { namespace: ens, label: "Current", description: "The environemnt that this project is built and run inside", iconClass: "fa fa-cloud", url: UrlHelpers.join("/workspaces", ns, "projects", name, "namespace", ens) }; buildConfig.environments.push(env); } buildConfig.environments = buildConfig.environments.reverse(); buildConfig.tools = []; angular.forEach($fabric8CodeViews, function (env) { buildConfig.tools.push(env); }); angular.forEach($fabric8TeamViews, function (env) { buildConfig.tools.push(env); }); } } Kubernetes.enrichBuildConfig = enrichBuildConfig; function enrichBuildConfigs(buildConfigs, sortedBuilds) { if (sortedBuilds === void 0) { sortedBuilds = null; } angular.forEach(buildConfigs, function (buildConfig) { enrichBuildConfig(buildConfig, sortedBuilds); }); return buildConfigs; } Kubernetes.enrichBuildConfigs = enrichBuildConfigs; function enrichBuilds(builds) { angular.forEach(builds, function (build) { enrichBuild(build); }); return _.sortBy(builds, "$creationDate").reverse(); } Kubernetes.enrichBuilds = enrichBuilds; function enrichBuild(build) { if (build) { var metadata = build.metadata || {}; var annotations = metadata.annotations || {}; var name = getName(build); var namespace = getNamespace(build); build.$name = name; build.$namespace = namespace; var nameArray = name.split("-"); var nameArrayLength = nameArray.length; build.$shortName = (nameArrayLength > 4) ? nameArray.slice(0, nameArrayLength - 4).join("-") : name.substring(0, 30); var labels = getLabels(build); var configId = labels.buildconfig; build.$configId = configId; if (configId) { //build.$configLink = UrlHelpers.join("kubernetes/buildConfigs", configId); build.$configLink = UrlHelpers.join("workspaces", currentKubernetesNamespace(), "projects", configId); } var creationTimestamp = getCreationTimestamp(build); if (creationTimestamp) { var d = new Date(creationTimestamp); build.$creationDate = d; } if (name) { //build.$viewLink = UrlHelpers.join("kubernetes/builds", name); var projectLink = UrlHelpers.join("workspaces", currentKubernetesNamespace(), "projects", configId); build.$viewLink = UrlHelpers.join(projectLink, "builds", name); //build.$logsLink = UrlHelpers.join("kubernetes/buildLogs", name); build.$logsLink = UrlHelpers.join(projectLink, "buildLogs", name); } build.podName = build.podName || annotations["openshift.io/build.pod-name"]; var podName = build.podName; if (podName && namespace) { var podNameArray = podName.split("-"); var podNameArrayLength = podNameArray.length; build.$podShortName = (podNameArrayLength > 5) ? podNameArray[podNameArrayLength - 5] : podName.substring(0, 30); build.$podLink = UrlHelpers.join("kubernetes/namespace", namespace, "pods", podName); } } return build; } Kubernetes.enrichBuild = enrichBuild; function enrichDeploymentConfig(deploymentConfig) { if (deploymentConfig) { var triggerUrl = null; var name = Core.pathGet(deploymentConfig, ["metadata", "name"]); deploymentConfig.$name = name; var found = false; angular.forEach(deploymentConfig.triggers, function (trigger) { var type = trigger.type; if (!deploymentConfig.$imageChangeParams && type === "ImageChange") { var imageChangeParams = trigger.imageChangeParams; if (imageChangeParams) { var containerNames = imageChangeParams.containerNames || []; imageChangeParams.$containerNames = containerNames.join(" "); deploymentConfig.$imageChangeParams = imageChangeParams; } } }); } } Kubernetes.enrichDeploymentConfig = enrichDeploymentConfig; function enrichDeploymentConfigs(deploymentConfigs) { angular.forEach(deploymentConfigs, function (deploymentConfig) { enrichDeploymentConfig(deploymentConfig); }); return deploymentConfigs; } Kubernetes.enrichDeploymentConfigs = enrichDeploymentConfigs; function enrichEvent(event) { if (event) { var metadata = event.metadata || {}; var firstTimestamp = event.firstTimestamp; if (firstTimestamp) { var d = new Date(firstTimestamp); event.$firstTimestamp = d; } var lastTimestamp = event.lastTimestamp; if (lastTimestamp) { var d = new Date(lastTimestamp); event.$lastTimestamp = d; } var labels = angular.copy(event.source || {}); var involvedObject = event.involvedObject || {}; var name = involvedObject.name; var kind = involvedObject.kind; if (name) { labels['name'] = name; } if (kind) { labels['kind'] = kind; } event.$labelsText = Kubernetes.labelsToString(labels); } } Kubernetes.enrichEvent = enrichEvent; function enrichEvents(events, model) { if (model === void 0) { model = null; } angular.forEach(events, function (event) { enrichEvent(event); }); // lets update links to the events for each pod and RC if (model) { function clearEvents(entity) { entity.$events = []; entity.$eventsLink = null; entity.$eventCount = 0; } function updateEvent(entity, event) { if (entity) { entity.$events.push(event); if (!entity.$eventsLink) { entity.$eventsLink = UrlHelpers.join("/kubernetes/namespace/", currentKubernetesNamespace(), "events") + "?q=kind%3D" + entity.kind + "%20name%3D" + entity.metadata.name; } entity.$eventCount = entity.$events.length; } } var pods = model.pods || []; var rcs = model.replicationControllers || []; angular.forEach(pods, clearEvents); angular.forEach(rcs, clearEvents); angular.forEach(events, function (event) { var involvedObject = event.involvedObject || {}; var name = involvedObject.name; var kind = involvedObject.kind; var ns = model.currentNamespace(); if (name && kind && ns) { var entity = null; if (kind === "ReplicationController") { entity = model.getReplicationController(ns, name); } else if (kind === "Pod") { entity = model.getPod(ns, name); } if (entity) { updateEvent(entity, event); } } }); } return events; } Kubernetes.enrichEvents = enrichEvents; function enrichImageRepository(imageRepository) { if (imageRepository) { var triggerUrl = null; var name = Core.pathGet(imageRepository, ["metadata", "name"]); imageRepository.$name = name; } } Kubernetes.enrichImageRepository = enrichImageRepository; function enrichImageRepositories(imageRepositories) { angular.forEach(imageRepositories, function (imageRepository) { enrichImageRepository(imageRepository); }); return imageRepositories; } Kubernetes.enrichImageRepositories = enrichImageRepositories; var labelColors = { 'region': 'k8s-badge-region', 'system': 'k8s-badge-system', 'isTarget': 'k8s-badge-target', }; function containerLabelClass(labelType) { if (!(labelType in labelColors)) { return 'mouse-pointer'; } else return labelColors[labelType] + ' mouse-pointer'; } Kubernetes.containerLabelClass = containerLabelClass; /** * Returns true if the fabric8 forge plugin is enabled */ function isForgeEnabled() { // TODO should return true if the service "fabric8-forge" is valid return true; } Kubernetes.isForgeEnabled = isForgeEnabled; /** * Returns the current kubernetes selected namespace or the default one */ function currentKubernetesNamespace() { var injector = HawtioCore.injector; if (injector) { var KubernetesState = injector.get("KubernetesState") || {}; return KubernetesState.selectedNamespace || Kubernetes.defaultNamespace; } return Kubernetes.defaultNamespace; } Kubernetes.currentKubernetesNamespace = currentKubernetesNamespace; function setCurrentKubernetesNamespace(ns) { if (ns) { var KubernetesState = inject("KubernetesState") || {}; KubernetesState.selectedNamespace = ns; } } Kubernetes.setCurrentKubernetesNamespace = setCurrentKubernetesNamespace; /** * Configures the json schema */ function configureSchema() { angular.forEach(Kubernetes.schema.definitions, function (definition, name) { var properties = definition.properties; if (properties) { var hideProperties = ["creationTimestamp", "kind", "apiVersion", "annotations", "additionalProperties", "namespace", "resourceVersion", "selfLink", "uid"]; angular.forEach(hideProperties, function (propertyName) { var property = properties[propertyName]; if (property) { property["hidden"] = true; } }); angular.forEach(properties, function (property, propertyName) { var ref = property["$ref"]; var type = property["type"]; if (ref && (!type || type === "object")) { property["type"] = ref; } if (type === "array") { var items = property["items"]; if (items) { var ref = items["$ref"]; var type = items["type"]; if (ref && (!type || type === "object")) { items["type"] = ref; } } } }); } Kubernetes.schema.definitions.os_build_WebHookTrigger.properties.secret.type = "password"; }); } Kubernetes.configureSchema = configureSchema; /** * Lets remove any enriched data to leave the original json intact */ function unenrich(item) { var o = _.cloneDeep(item); angular.forEach(o, function (value, key) { if (key.startsWith("$") || key.startsWith("_")) { delete o[key]; } }); delete o['connectTo']; return o; } Kubernetes.unenrich = unenrich; /** * Returns the unenriched JSON representation of an object */ function toRawJson(item) { var o = unenrich(item); return JSON.stringify(o, null, 2); // spacing level = 2 } Kubernetes.toRawJson = toRawJson; /** * Returns the unenriched YAML representation of an object */ function toRawYaml(item) { var o = unenrich(item); return jsyaml.dump(o, { indent: 2 }); } Kubernetes.toRawYaml = toRawYaml; function watch($scope, $element, kind, ns, fn, labelSelector) { if (labelSelector === void 0) { labelSelector = null; } var connection = KubernetesAPI.watch({ kind: kind, namespace: ns, labelSelector: labelSelector, success: function (objects) { fn(objects); Core.$apply($scope); } }); $element.on('$destroy', function () { console.log("Static controller[" + kind + ", " + ns + "] element destroyed"); $scope.$destroy(); }); $scope.$on('$destroy', function () { console.log("Static controller[" + kind + ", " + ns + "] scope destroyed"); connection.disconnect(); }); var oldDeleteScopeFn = $scope.deleteScope; $scope.deleteScope = function () { $element.remove(); if (angular.isFunction(oldDeleteScopeFn)) { oldDeleteScopeFn(); } }; } Kubernetes.watch = watch; function createKubernetesClient(kind, ns) { if (ns === void 0) { ns = null; } var K8SClientFactory = inject("K8SClientFactory"); if (!K8SClientFactory) { Kubernetes.log.warn("Could not find injected K8SClientFactory!"); return null; } if (kind === "projects" || kind === "namespaces") { ns = null; } else if (!ns) { ns = Kubernetes.currentKubernetesNamespace(); } return K8SClientFactory.create(kind, ns); } Kubernetes.createKubernetesClient = createKubernetesClient; function currentUserName() { var userDetails = HawtioOAuth.getUserProfile(); var answer = null; if (userDetails) { answer = getName(userDetails); } return answer || "admin"; } Kubernetes.currentUserName = currentUserName; function createNamespace(ns, client) { if (!client) { client = Kubernetes.isOpenShift ? Kubernetes.createKubernetesClient('projects') : Kubernetes.createKubernetesClient('namespaces'); } if (ns && ns !== currentKubernetesNamespace()) { var object = { apiVersion: Kubernetes.defaultApiVersion, kind: Kubernetes.isOpenShift ? 'Project' : 'Namespace', metadata: { name: ns, labels: {} } }; client.put(object, function (data) { Kubernetes.log.info("Created namespace: " + ns); }, function (err) { Kubernetes.log.warn("Failed to create namespace: " + ns + ": " + angular.toJson(err)); }); } } Kubernetes.createNamespace = createNamespace; function createRC(obj, onCompleteFn) { if (onCompleteFn === void 0) { onCompleteFn = null; } var client = Kubernetes.createKubernetesClient('replicationcontrollers', 'default'); var RCTemplate = new Kubernetes.resourceRCTemplate(); var rcTemplate = RCTemplate.createRC(obj); client.put(rcTemplate, function (obj) { if (angular.isFunction(onCompleteFn)) { onCompleteFn(obj); } }, function (err) { console.log(err); }); } Kubernetes.createRC = createRC; function connectOracle($http, $timeout, url, operation, replicas, delayTime) { $timeout(function () { $http({ url: url, method: 'POST', params: { oracleName: getName(replicas), operation: operation }, }).success(function (data, header, config, status) { console.log("success"); }).error(function (data, header, config, status) { //log.warn("Failed to connect " + connectParam + " " + data + " " + status); }); }, delayTime); } Kubernetes.connectOracle = connectOracle; function getOracleStatus(labels) { var answer = -1; if (typeof (labels) === 'object' && labels.hasOwnProperty("status")) { switch (labels.status) { case '0': answer = 0; break; case '1': answer = 1; break; case '2': answer = 2; break; default: answer = -1; } } return answer; } Kubernetes.getOracleStatus = getOracleStatus; function getExtractStatus(labels) { if (labels.isTarget === 'false') { return parseInt(labels.isExtract); } else { return 10; } } Kubernetes.getExtractStatus = getExtractStatus; function getOracleName(replicas) { var annotation = getAnnotations(replicas); return annotation["cityName"] + "-" + annotation["districtName"] + "-" + annotation["systemName"]; } Kubernetes.getOracleName = getOracleName; function extractDataToOracle($http, url, selectedReplicationControllers, targetOracle, fn) { //console.log(targetReplicationController.length); var answer = targetOracle && true; var inneedOracle = []; selectedReplicationControllers.forEach(function (rc) { var annotations = getAnnotations(rc); answer = answer && checkoutOracleIsRunning(rc); inneedOracle.push({ "name": getName(rc), "ip": getHost(rc.$pods[0]), "port": rc.$pods[0].spec.containers[0].ports[0].hostPort, "dataId": annotations["id"] }); }); if (answer) { var data = { "name": targetOracle.id, "target": targetOracle, "inneed": inneedOracle }; var spinner; $.ajax({ type: "POST", url: UrlHelpers.join(url, targetOracle.id + "", "extract"), timeout: 8000, dataType: 'json', //async: false, data: JSON.stringify(data), contentType: "application/json; charset=utf-8", beforeSend: function () { Configs.create_mask(); //创建遮罩层 create_locadEffect("正在验证汇总库配置信息,请稍等!"); //创建数据加载效果层 var target = document.getElementById('loading'); spinner = new Spinner(loadConfigs()).spin(target); }, complete: function (XMLHttpRequest, textStatus) { if (XMLHttpRequest.status == 200) { //spinner.spin(); Kubernetes.createSuccessInfo("success", "连接汇总库成功,即将执行汇总或抽取操作!"); setTimeout("Kubernetes.removeMask()", 1500); } else { //spinner.spin(); Kubernetes.createSuccessInfo("error", "连接汇总库失败,请检查服务集群中的汇总库配置是否正确!"); setTimeout("Kubernetes.removeMask()", 1500); } }, success: function (data) { } }); } else { //alert("您选择的汇总数据库或需要汇总的数据库中存在未启动成功的数据库,导致汇总操作失败,请重新选择!"); Configs.customAlert("提示", "操作失败:需要汇总的数据库中存在未启动成功的数据库!", '', null, 0, "error"); } } Kubernetes.extractDataToOracle = extractDataToOracle; function checkoutOracleIsRunning(rc) { if (rc.$podCounters.ready && rc.$oracleStatus == 2) { return true; } else { return false; } } Kubernetes.checkoutOracleIsRunning = checkoutOracleIsRunning; function replicasIsCreated(replicationcontrollers, name) { var result = false; if (replicationcontrollers != null || replicationcontrollers.length <= 0) { for (var i = 0; i < replicationcontrollers.length; i++) { if (getName(replicationcontrollers[i]) === name) { result = true; break; } } } return result; } Kubernetes.replicasIsCreated = replicasIsCreated; function loadConfigs() { return { lines: 9, length: 0, width: 13, radius: 38, scale: 1, corners: 1, color: '#ffffff', opacity: 0, rotate: 90, direction: 1, speed: 0.5, trail: 50, zIndex: 1000000002, className: 'spinner', top: '40%', left: '50%', shadow: false, hwaccel: false, position: 'absolute' }; } Kubernetes.loadConfigs = loadConfigs; /* 创建加载效果层 */ function create_locadEffect(msg) { var tmp = "
" + "" + msg + ""; var load = document.createElement("div"); load.id = "load"; load.innerHTML = tmp; document.body.appendChild(load); $("#load").addClass("load-effect-msg"); } Kubernetes.create_locadEffect = create_locadEffect; function createSuccessInfo(icon, msg) { $("#load").remove(); Configs.customAlert("提示", msg, '', null, 0, icon); /*var tmp = "
" + "" + msg +""; var result = document.createElement("div"); result.id = "exe_result"; result.innerHTML = tmp; document.body.appendChild(result);*/ } Kubernetes.createSuccessInfo = createSuccessInfo; function removeMask() { var mask = document.getElementById("mask"); //var result = document.getElementById("exe_result"); if (null == mask) return; document.body.removeChild(mask); //document.body.removeChild(result); } Kubernetes.removeMask = removeMask; function checkRCIsExtracting(selected) { var answer = false; for (var i = 0; i < selected.length; i++) { var label = getLabels(selected[i]); if (label.isExtract == 1) { answer = true; break; } } return answer; } Kubernetes.checkRCIsExtracting = checkRCIsExtracting; })(Kubernetes || (Kubernetes = {})); /// /// var Developer; (function (Developer) { Developer.context = '/workspaces'; Developer.hash = '#' + Developer.context; Developer.pluginName = 'Developer'; Developer.pluginPath = 'plugins/developer/'; Developer.templatePath = Developer.pluginPath + 'html/'; Developer.log = Logger.get(Developer.pluginName); Developer.jenkinsServiceName = "jenkins"; Developer.jenkinsServiceNameAndPort = Developer.jenkinsServiceName + ":http"; Developer.jenkinsHttpConfig = { headers: { Accept: "application/json, text/x-json, text/plain" } }; /** * Returns true if the value hasn't changed from the last cached JSON version of this object */ function hasObjectChanged(value, state) { var json = angular.toJson(value || ""); var oldJson = state.json; state.json = json; return !oldJson || json !== oldJson; } Developer.hasObjectChanged = hasObjectChanged; function projectForScope($scope) { if ($scope) { return $scope.buildConfig || $scope.entity || ($scope.model || {}).project; } return null; } Developer.projectForScope = projectForScope; /** * Lets load the project versions for the given namespace */ function loadProjectVersions($scope, $element, project, env, ns, answer, caches) { var projectAnnotation = "project"; var versionAnnotation = "version"; var projectNamespace = project.$namespace; var projectName = project.$name; var cache = caches[ns]; if (!cache) { cache = {}; caches[ns] = cache; } var status = { rcs: [], pods: [], routes: [], services: [] }; var imageStreamTags = []; function updateModel() { var projectInfos = {}; var model = $scope.model || {}; angular.forEach(status.rcs, function (item) { var metadata = item.metadata || {}; var name = metadata.name; var labels = metadata.labels || {}; var annotations = metadata.annotations || {}; var spec = item.spec || {}; var selector = spec.selector; var project = labels[projectAnnotation]; var version = labels[versionAnnotation]; // lets try the S2I defaults... if (!project) { project = labels["app"]; } if (!version) { version = annotations["openshift.io/deployment-config.latest-version"]; } if (project && version && project === projectName) { var projects = projectInfos[project]; if (!projects) { projects = { project: project, versions: {} }; projectInfos[project] = projects; } var versionInfo = projects.versions[version]; if (!versionInfo) { versionInfo = { replicationControllers: {} }; projects.versions[version] = versionInfo; } if (name) { versionInfo.replicationControllers[name] = item; item.$name = name; if (projectNamespace && projectName) { item.$viewLink = UrlHelpers.join("/workspaces/", projectNamespace, "projects", projectName, "namespace", ns, "replicationControllers", name); } else { Developer.log.warn("Missing project data! " + projectNamespace + " name " + projectName); } item.$services = []; var rcLink = null; status.services.forEach(function (service) { var repSelector = Kubernetes.getSelector(item); var serviceSelector = Kubernetes.getSelector(service); if (serviceSelector && repSelector && Kubernetes.selectorMatches(serviceSelector, repSelector) && Kubernetes.getNamespace(service) === Kubernetes.getNamespace(item)) { status.routes.forEach(function (route) { var serviceName = Kubernetes.getName(service); if (serviceName === Kubernetes.getName(route)) { service["$route"] = route; service["$host"] = Core.pathGet(route, ["spec", "host"]); item.$services.push(service); if (!rcLink) { var url = Kubernetes.serviceLinkUrl(service, true); if (url) { // TODO find icon etc? rcLink = { name: serviceName, href: url }; } } } }); } }); item["$serviceLink"] = rcLink; } item.$buildId = annotations["fabric8.io/build-id"] || item.$buildId; item.$buildUrl = annotations["fabric8.io/build-url"] || item.$buildUrl; item.$gitCommit = annotations["fabric8.io/git-commit"] || item.$gitCommit; item.$gitUrl = annotations["fabric8.io/git-url"] || item.$gitUrl; item.$gitBranch = annotations["fabric8.io/git-branch"] || item.$gitBranch; if (!item.$gitCommit) { var image = getImage(item); if (image) { if (!$scope.$isWatchImages) { $scope.$isWatchImages = true; Kubernetes.watch($scope, $element, "images", null, function (data) { imageStreamTags = data; checkForMissingMetadata(); }); } else { checkForMissingMetadata(); } } function getImage(item) { var image = ""; // lets see if we can find the commit id from a S2I image name // TODO needs this issue fixed to find it via an OpenShift annotation: // https://github.com/openshift/origin/issues/6241 var containers = Core.pathGet(item, ["spec", "template", "spec", "containers"]); if (containers && containers.length) { var container = containers[0]; if (container) { image = container.image; } } return image; } function checkForMissingMetadata() { angular.forEach(projects.versions, function (vi) { angular.forEach(vi.replicationControllers, function (item, name) { if (!item.$gitCommit) { var image = getImage(item); if (image) { angular.forEach(imageStreamTags, function (imageStreamTag) { var imageName = imageStreamTag.dockerImageReference; if (imageName && imageName === image) { var foundISTag = imageStreamTag; var manifestJSON = imageStreamTag.dockerImageManifest; if (manifestJSON) { var manifest = angular.fromJson(manifestJSON) || {}; var history = manifest.history; if (history && history.length) { var v1 = history[0].v1Compatibility; if (v1) { var data = angular.fromJson(v1); var env = Core.pathGet(data, ["config", "Env"]); angular.forEach(env, function (envExp) { if (envExp) { var values = envExp.split("="); if (values.length === 2 && values[0] == "OPENSHIFT_BUILD_NAME") { var buildName = values[1]; if (buildName) { item.$buildId = buildName; item.$buildUrl = Developer.projectWorkspaceLink(ns, projectName, "buildLogs/" + buildName); } } } }); var labels = Core.pathGet(data, ["config", "Labels"]); if (labels) { item.$gitCommit = labels["io.openshift.build.commit.id"] || item.$gitCommit; item.$gitCommitAuthor = labels["io.openshift.build.commit.author"] || item.$gitCommitAuthor; item.$gitCommitDate = labels["io.openshift.build.commit.date"] || item.$gitCommitDate; item.$gitCommitMessage = labels["io.openshift.build.commit.message"] || item.$gitCommitMessage; item.$gitBranch = labels["io.openshift.build.commit.ref"] || item.$gitBranch; if (!item.$gitUrl && item.$gitCommit) { item.$gitUrl = Developer.projectWorkspaceLink(ns, projectName, "wiki/commitDetail///" + item.$gitCommit); } } } } } } }); } } }); }); } } if (selector) { var selectorText = Kubernetes.labelsToString(selector, ","); var podLinkUrl = UrlHelpers.join(Developer.projectLink(projectName), "namespace", ns, "pods"); item.pods = []; item.$podCounters = Kubernetes.createPodCounters(selector, status.pods, item.pods, selectorText, podLinkUrl); } } }); // lets check for a project name if we have lots of RCs with no pods, lets remove them! angular.forEach(projectInfos, function (project, projectName) { var rcsNoPods = []; var rcsWithPods = []; angular.forEach(project.versions, function (versionInfo) { var rcs = versionInfo.replicationControllers; angular.forEach(rcs, function (item, name) { var count = Kubernetes.podCounterTotal(item.$podCounters); if (count) { rcsWithPods.push(name); } else { rcsNoPods.push(function () { delete rcs[name]; }); } }); }); if (rcsWithPods.length) { // lets remove all the empty RCs angular.forEach(rcsNoPods, function (fn) { fn(); }); } }); if (hasObjectChanged(projectInfos, cache)) { Developer.log.debug("project versions has changed!"); answer[ns] = projectInfos; } } Kubernetes.watch($scope, $element, "replicationcontrollers", ns, function (data) { if (data) { status.rcs = data; updateModel(); } }); Kubernetes.watch($scope, $element, "services", ns, function (data) { if (data) { status.services = data; updateModel(); } }); Kubernetes.watch($scope, $element, "routes", ns, function (data) { if (data) { status.routes = data; updateModel(); } }); Kubernetes.watch($scope, $element, "pods", ns, function (data) { if (data) { status.pods = data; updateModel(); } }); } Developer.loadProjectVersions = loadProjectVersions; })(Developer || (Developer = {})); /// /// /// var Developer; (function (Developer) { var log = Logger.get('developer-navigation'); function createCurrentSubNavBar($scope, $location, $routeParams) { return Developer.activateCurrent([ { href: UrlHelpers.join(Developer.context, "Overview", "cold/data-type/all"), label: "冷区数据管理", title: "数据汇总任务", items: [{ href: UrlHelpers.join(Developer.context, "Overview", "cold/data-type/all"), label: "全部", title: "全部数据" }, { href: UrlHelpers.join(Developer.context, "Overview", "cold/data-type/financial"), label: "财政", title: "财政数据" }, { href: UrlHelpers.join(Developer.context, "Overview/", "cold/data-type/social-security"), label: "社保", title: "社保数据" }] }, { href: UrlHelpers.join(Developer.context, "Overview", "hot/data-type/all"), label: "热区数据管理", title: "查看所有数据", items: [{ href: UrlHelpers.join(Developer.context, "Overview", "hot/data-type/all"), label: "全部", title: "全部数据" }, { href: UrlHelpers.join(Developer.context, "Overview", "hot/data-type/financial"), label: "财政", title: "财政数据" }, { href: UrlHelpers.join(Developer.context, "Overview/", "hot/data-type/social-security"), label: "社保", title: "社保数据" }] }, { href: UrlHelpers.join(Developer.context, "Overview/", "task"), label: "任务", title: "任务查看" }, ]); } Developer.createCurrentSubNavBar = createCurrentSubNavBar; })(Developer || (Developer = {})); /// /// /// /// /// var Configs; (function (Configs) { var OperateType = (function () { function OperateType() { } Object.defineProperty(OperateType, "DELETE", { get: function () { return "delete"; }, enumerable: true, configurable: true }); Object.defineProperty(OperateType, "UPDATE", { get: function () { return "update"; }, enumerable: true, configurable: true }); Object.defineProperty(OperateType, "PUT", { get: function () { return "put"; }, enumerable: true, configurable: true }); Object.defineProperty(OperateType, "MOVE", { get: function () { return "move"; }, enumerable: true, configurable: true }); Object.defineProperty(OperateType, "EXTRACT", { get: function () { return "extract"; }, enumerable: true, configurable: true }); return OperateType; }()); Configs.OperateType = OperateType; Configs._module.controller('Configs.MenuItemController', ['$scope', '$location', function ($scope, $location) { $scope.menuItem = [{ icon: "glyphicon glyphicon-cloud-upload", label: "数据管理配置", title: "配置数据存储信息", href: UrlHelpers.join(Configs.context, "/gluster-fs/setting") }, { icon: "glyphicon glyphicon-th-list", label: "服务集群配置", title: "配置服务集群信息", href: UrlHelpers.join(Configs.context, "/kube-cluster/setting") }]; }]); function createConfigBreadcrumbs($scope, $location, $routeParams) { var url = $location.url(); var label, title; switch (url) { case "/config/gluster-fs/setting": label = "数据管理配置"; title = "配置数据存储信息"; break; case "/config/kube-cluster/setting": label = "服务集群配置"; title = "配置服务集群信息"; break; default: break; } return Developer.activateCurrent([{ href: url, label: label, title: title //item.title }]); } function createOracleInfo(array, id) { var result = { "id": id }; angular.forEach(array, function (arr) { result[arr.field] = arr.value; }); return result; } Configs.createOracleInfo = createOracleInfo; function shareInit($scope, $location, $routeParams) { $scope.subTabConfig = Developer.createCurrentSubNavBar($scope, $location, $routeParams); $scope.mask = true; /** 创建全屏遮挡 */ $("#mask").css("position", "absolute"); $("#mask").css("background", "black"); $("#mask").css("opacity", 0.4); $("#mask").css("filter", "progid:DXImageTransform.Microsoft.Alpha(style=4,opacity=25)"); $("#mask").css("top", "0px"); $("#mask").css("left", "0px"); $("#mask").css("width", document.body.clientWidth + document.body.scrollLeft); $("#mask").css("height", document.body.clientHeight + document.body.scrollTop); $("#mask").css("zIndex", 1000); } Configs.shareInit = shareInit; function createNewObejct(array, obj) { var result = []; if (obj) { angular.forEach(array, function (arr) { result.push({ field: arr.field, name: arr.displayName, value: obj[arr.field] }); }); } else { angular.forEach(array, function (arr) { result.push({ field: arr.field, name: arr.displayName, value: null }); }); } return result; } Configs.createNewObejct = createNewObejct; function oracleInfoOperate($http, url, operate, resource, fn) { if (resource === null) throw "不能操作空资源对象"; var id = resource["id"] || resource["name"] || resource["_id"] || resource["_key"]; var RESTfulUrl = url; if (id == "undefined") { RESTfulUrl = UrlHelpers.join(url, operate); } else { RESTfulUrl = UrlHelpers.join(url, id + "", operate); } $http({ method: "POST", dataType: 'json', url: RESTfulUrl, data: JSON.stringify(resource), }).success(function (data, header, config, status) { if (angular.isFunction(fn)) fn(data, header); }).error(function (data, header, config, status) { if (angular.isFunction(fn)) fn(data, header); }); } Configs.oracleInfoOperate = oracleInfoOperate; function createConfigHelperNavBar($scope, $location, $routeParams) { return Developer.activateCurrent([ { href: UrlHelpers.join(Configs.context, "regionalism-code/searching"), label: "行政区划检索", title: "检索行政区划代码" }, { href: UrlHelpers.join(Configs.context, "system-code/searching"), label: "系统编码检索", title: "检索系统编码" } ]); } Configs.createConfigHelperNavBar = createConfigHelperNavBar; function formatVolume(volume) { var brick = []; angular.forEach(volume.brick, function (block) { brick.push({ ip: block.ip.split("."), status: block.status, path: block.path, editable: block.editable || false }); }); return { name: volume.name, path: volume.path, brick: brick, status: volume.status, editable: volume.editable || false, hot: volume.hot == 0 ? true : false }; } Configs.formatVolume = formatVolume; function volumesFormat(volumes) { var result = []; angular.forEach(volumes, function (volume) { result.push(formatVolume(volume)); }); return result; } Configs.volumesFormat = volumesFormat; })(Configs || (Configs = {})); /// /// var Configs; (function (Configs) { function removeElementByValue(array, value, key) { if (key) { for (var i = 0; i < array.length; i++) { if (array[i][key] === value) { array.splice(i, 1); break; } } } else { for (var i = 0; i < array.length; i++) { if (array[i] === value) { array.splice(i, 1); break; } } } } Configs.removeElementByValue = removeElementByValue; function removeElementsByValue(array, elements) { angular.forEach(elements, function (element) { removeElementByValue(array, element.value, element.key); }); } Configs.removeElementsByValue = removeElementsByValue; /** 对象的深拷贝 */ function deepCopy(object) { var n, i; if (object instanceof Array) { n = []; for (i = 0; i < object.length; ++i) { n[i] = deepCopy(object[i]); } return n; } else if (object instanceof Object) { n = {}; for (i in object) { n[i] = deepCopy(object[i]); } return n; } else { return object; } } Configs.deepCopy = deepCopy; function downloadFile($scope, $http, url, fn) { $http.get(url, { responseType: 'arraybuffer' }) .success(function (data, status, headers) { if (angular.isFunction(fn)) fn(); var octetStreamMime = 'application/octet-stream'; var success = false; // Get the headers headers = headers(); // Get the filename from the x-filename header or default to "服务列表" var filename = "服务文件"; var params = headers['content-disposition'].split(";"); for (var i = 0; i < params.length; i++) { if (params[i].indexOf("filename") != -1) { var tmp = params[i].split("="); if (tmp.length == 2) filename = tmp[1].replace(new RegExp("\"", "gm"), ""); } } // Determine the content type from the header or default to "application/octet-stream" var contentType = headers['content-type'] || octetStreamMime; try { // Try using msSaveBlob if supported console.log("Trying saveBlob method ..."); var blob = new Blob([data], { type: contentType }); if (navigator.msSaveBlob) navigator.msSaveBlob(blob, filename); else { // Try using other saveBlob implementations, if available var saveBlob = navigator["webkitSaveBlob"] || navigator["mozSaveBlob"] || navigator["saveBlob"]; if (saveBlob === undefined) throw "Not supported"; saveBlob(blob, filename); } console.log("saveBlob succeeded"); success = true; } catch (ex) { console.log("saveBlob method failed with the following exception:"); console.log(ex); } if (!success) { // Get the blob url creator var urlCreator = window.URL || window["webkitURL"] || window["mozURL"] || window["msURL"]; if (urlCreator) { // Try to use a download link var link = document.createElement('a'); if ('download' in link) { // Try to simulate a click try { // Prepare a blob URL console.log("Trying download link method with simulated click ..."); var blob = new Blob([data], { type: contentType }); var url = urlCreator.createObjectURL(blob); link.setAttribute('href', url); // Set the download attribute (Supported in Chrome 14+ / Firefox 20+) link.setAttribute("download", filename); // Simulate clicking the download link var event = document.createEvent('MouseEvents'); event.initMouseEvent('click', true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 0, null); link.dispatchEvent(event); console.log("Download link method with simulated click succeeded"); success = true; } catch (ex) { console.log("Download link method with simulated click failed with the following exception:"); console.log(ex); } } if (!success) { // Fallback to window.location method try { // Prepare a blob URL // Use application/octet-stream when using window.location to force download console.log("Trying download link method with window.location ..."); var blob = new Blob([data], { type: octetStreamMime }); var url = urlCreator.createObjectURL(blob); window.location = url; console.log("Download link method with window.location succeeded"); success = true; } catch (ex) { console.log("Download link method with window.location failed with the following exception:"); console.log(ex); } } } } if (!success) { // Fallback to window.open method console.log("No methods worked for saving the arraybuffer, using last resort window.open"); window.open('_blank', ''); Configs.customAlert("提示", "文件下载失败", '', null, 0, "error"); } }).error(function (data, status) { console.log("Request failed with status: " + status); // Optionally write the error out to scope fn(); Configs.customAlert("提示", "文件下载失败", '', null, 0, "error"); $scope.errorDetails = "Request failed with status: " + status; }); } Configs.downloadFile = downloadFile; function FileInputPlugin(fn, isMultiple) { var inputObj = document.createElement('input'); inputObj.setAttribute('id', 'myFileInput'); inputObj.setAttribute('type', 'file'); inputObj.setAttribute("style", 'visibility:hidden'); inputObj.setAttribute("accept", "application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); if (isMultiple) inputObj.setAttribute("multiple", "multiple"); document.body.appendChild(inputObj); inputObj.click(); inputObj.onchange = function (element) { fn(element.target["files"]); var my = document.getElementById("myFileInput"); if (null != my) document.body.removeChild(my); }; } Configs.FileInputPlugin = FileInputPlugin; })(Configs || (Configs = {})); /// /// var Kubernetes; (function (Kubernetes) { Kubernetes._module = angular.module(Kubernetes.pluginName, ['hawtio-core', 'hawtio-ui', 'ui.codemirror', 'ui.validate', 'kubernetesUI']); Kubernetes.controller = PluginHelpers.createControllerFunction(Kubernetes._module, Kubernetes.pluginName); Kubernetes.route = PluginHelpers.createRoutingFunction(Kubernetes.templatePath); Kubernetes._module.config(['$routeProvider', function ($routeProvider) { $routeProvider .when(UrlHelpers.join(Kubernetes.context, '/pods'), Kubernetes.route('pods.html', false)) .when(UrlHelpers.join(Kubernetes.context, 'replicationControllers'), Kubernetes.route('replicationControllers.html', false)) .when(UrlHelpers.join(Kubernetes.context, 'services'), Kubernetes.route('services.html', false)) .when(UrlHelpers.join(Kubernetes.context, 'events'), Kubernetes.route('events.html', false)) .when(UrlHelpers.join(Kubernetes.context, 'apps'), Kubernetes.route('apps.html', false)) .when(UrlHelpers.join(Kubernetes.context, 'apps/:namespace'), Kubernetes.route('apps.html', false)) .when(UrlHelpers.join(Kubernetes.context, 'templates'), Kubernetes.route('templates.html', false)) .when(UrlHelpers.join(Kubernetes.context, 'hosts'), Kubernetes.route('hosts.html', false)) .when(UrlHelpers.join(Kubernetes.context, 'hosts/:id'), Kubernetes.route('host.html', true)) .when(UrlHelpers.join(Kubernetes.context, 'pipelines'), Kubernetes.route('pipelines.html', false)) .when(UrlHelpers.join(Kubernetes.context, 'overview'), Kubernetes.route('overview.html', true)) .when(Kubernetes.context, { redirectTo: UrlHelpers.join(Kubernetes.context, 'replicationControllers') }); angular.forEach([Kubernetes.context, "/workspaces/:workspace/projects/:project"], function (context) { $routeProvider .when(UrlHelpers.join(context, '/namespace/:namespace/podCreate'), Kubernetes.route('podCreate.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/podEdit/:id'), Kubernetes.route('podEdit.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/pods'), Kubernetes.route('pods.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/pods/:id'), Kubernetes.route('pod.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/replicationControllers'), Kubernetes.route('replicationControllers.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/replicationControllers/:id'), Kubernetes.route('replicationController.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/replicationControllerCreate'), Kubernetes.route('replicationControllerCreate.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/replicationControllerEdit/:id'), Kubernetes.route('replicationControllerEdit.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/secrets'), Kubernetes.route('secrets.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/secrets/:id'), Kubernetes.route('secret.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/secretCreate'), Kubernetes.route('secret.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/services'), Kubernetes.route('services.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/services/:id'), Kubernetes.route('service.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/serviceCreate'), Kubernetes.route('serviceCreate.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/serviceEdit/:id'), Kubernetes.route('serviceEdit.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/events'), Kubernetes.route('events.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/apps'), Kubernetes.route('apps.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/overview'), Kubernetes.route('overview.html', true)) .when(UrlHelpers.join(context, '/namespace/:namespace/templates/:targetNamespace'), Kubernetes.route('templates.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace'), Kubernetes.route('apps.html', false)) .when(UrlHelpers.join(context, 'builds'), Kubernetes.route('builds.html', false)) .when(UrlHelpers.join(context, 'builds/:id'), Kubernetes.route('build.html', true)) .when(UrlHelpers.join(context, 'buildLogs/:id'), Kubernetes.route('buildLogs.html', true)) .when(UrlHelpers.join(context, 'buildConfigs'), Kubernetes.route('buildConfigs.html', false)) .when(UrlHelpers.join(context, 'buildConfigs/:id'), Kubernetes.route('buildConfig.html', true)) .when(UrlHelpers.join(context, 'buildConfigEdit/:id'), Kubernetes.route('buildConfigEdit.html', true)) .when(UrlHelpers.join(context, 'deploymentConfigs'), Kubernetes.route('deploymentConfigs.html', false)) .when(UrlHelpers.join(context, 'deploymentConfigs/:id'), Kubernetes.route('deploymentConfig.html', true)) .when(UrlHelpers.join(context, 'imageRepositories'), Kubernetes.route('imageRepositories.html', false)); }); angular.forEach([Kubernetes.context, "/workspaces/:workspace", "/workspaces/:workspace/projects/:project"], function (context) { $routeProvider .when(UrlHelpers.join(context, 'buildConfigEdit'), Kubernetes.route('buildConfigEdit.html', true)) .when(UrlHelpers.join(context, 'buildConfigEdit/:id'), Kubernetes.route('buildConfigEdit.html', true)) .when(UrlHelpers.join(context, 'importProject'), Kubernetes.route('importProject.html', true)); }); }]); Kubernetes._module.factory('AppLibraryURL', ['$rootScope', function ($rootScope) { return UrlHelpers.join(Kubernetes.kubernetesApiUrl(), "/proxy", Kubernetes.kubernetesNamespacePath(), "/services/app-library"); }]); Kubernetes._module.factory('WikiGitUrlPrefix', function () { return UrlHelpers.join(Kubernetes.kubernetesApiUrl(), "/proxy", Kubernetes.kubernetesNamespacePath(), "services/app-library"); }); Kubernetes._module.factory('wikiRepository', ["$location", "localStorage", function ($location, localStorage) { return false; }]); Kubernetes._module.factory('ConnectDialogService', ['$rootScope', function ($rootScope) { return { dialog: new UI.Dialog(), saveCredentials: false, userName: null, password: null, jolokiaUrl: null, containerName: null, view: null }; }]); Kubernetes._module.filter('kubernetesPageLink', function () { return Kubernetes.entityPageLink; }); Kubernetes._module.filter('relativeTime', function () { return function (date) { return humandate.relativeTime(date); }; }); Kubernetes._module.run(['viewRegistry', 'ServiceRegistry', 'HawtioNav', 'KubernetesModel', '$templateCache', function (viewRegistry, ServiceRegistry, HawtioNav, KubernetesModel, $templateCache) { Kubernetes.log.debug("Running"); viewRegistry['kubernetes'] = Kubernetes.templatePath + 'layoutKubernetes.html'; //viewRegistry['kubernetes'] = Configs.templatePath + 'shareLayout.html'; var builder = HawtioNav.builder(); var apps = builder.id('kube-apps') .href(function () { return UrlHelpers.join(Kubernetes.context, 'apps'); }) .title(function () { return 'Apps'; }) .build(); var services = builder.id('kube-services') .href(function () { return UrlHelpers.join(Kubernetes.context, 'services'); }) .title(function () { return 'Services'; }) .build(); var controllers = builder.id('kube-controllers') .href(function () { return UrlHelpers.join(Kubernetes.context, 'replicationControllers'); }) .title(function () { return 'oracle服务'; }) .build(); var pods = builder.id('kube-pods') .href(function () { return UrlHelpers.join(Kubernetes.context, 'pods'); }) .title(function () { return '测试页面'; }) .build(); var events = builder.id('kube-events') .href(function () { return UrlHelpers.join(Kubernetes.context, 'events'); }) .title(function () { return '服务启动日志'; }) .build(); var hosts = builder.id('kube-hosts') .href(function () { return UrlHelpers.join(Kubernetes.context, 'hosts'); }) .title(function () { return '集群节点'; }) .build(); var overview = builder.id('kube-overview') .href(function () { return UrlHelpers.join(Kubernetes.context, 'overview'); }) .title(function () { return 'Diagram'; }) .build(); var builds = builder.id('kube-builds') .href(function () { return UrlHelpers.join(Kubernetes.context, 'builds'); }) .title(function () { return 'Builds'; }) .build(); var buildConfigs = builder.id('kube-buildConfigs') .href(function () { return UrlHelpers.join(Kubernetes.context, 'buildConfigs'); }) .title(function () { return 'Build Configs'; }) .build(); var deploys = builder.id('kube-deploys') .href(function () { return UrlHelpers.join(Kubernetes.context, 'deploymentConfigs'); }) .title(function () { return 'Deploys'; }) .build(); var imageRepositories = builder.id('kube-imageRepositories') .href(function () { return UrlHelpers.join(Kubernetes.context, 'imageRepositories'); }) .title(function () { return 'Registries'; }) .build(); var pipelines = builder.id('kube-pipelines') .href(function () { return UrlHelpers.join(Kubernetes.context, 'pipelines'); }) .title(function () { return 'Pipelines'; }) .build(); var repos = builder.id('kube-repos') .href(function () { return "/forge/repos"; }) .isValid(function () { return ServiceRegistry.hasService(Kubernetes.fabric8ForgeServiceName) && ServiceRegistry.hasService(Kubernetes.gogsServiceName); }) .title(function () { return 'Repositories'; }) .build(); var mainTab = builder.id('kubernetes') .rank(100) .defaultPage({ rank: 20, isValid: function (yes, no) { yes(); } }) .href(function () { return UrlHelpers.join(Kubernetes.context, "/namespace/default/replicationControllers"); }) .title(function () { return '服务集群'; }) .tabs(controllers, pods, events) .build(); HawtioNav.add(mainTab); /* testKubernetesModel HawtioNav.add({ id: 'k8sAppSwitcher', title: () => '', // not used as 'template' below overrides this isValid: () => KubernetesModel.serviceApps.length > 0, context: true, template: () => $templateCache.get(UrlHelpers.join(templatePath, 'serviceApps.html')) }); */ var projectsTab = builder.id('openshift') .rank(100) .href(function () { return UrlHelpers.join(Kubernetes.context, 'buildConfigs') + '?sub-tab=kube-buildConfigs'; }) .title(function () { return 'Projects'; }) .tabs(repos, buildConfigs, builds, deploys, imageRepositories) .build(); //HawtioNav.add(projectsTab); }]); hawtioPluginLoader.registerPreBootstrapTask({ name: 'KubernetesInit', task: function (next) { $.getScript('osconsole/config.js') .done(function (script, textStatus) { var config = Kubernetes.osConfig = window['OPENSHIFT_CONFIG']; Kubernetes.log.debug("Fetched OAuth config: ", config); var master = config.master_uri; if (!master && config.api && config.api.k8s) { var masterUri = new URI().host(config.api.k8s.hostPort).path("").query(""); if (config.api.k8s.proto) { masterUri.protocol(config.api.k8s.proto); } master = masterUri.toString(); } OSOAuthConfig = config.openshift; GoogleOAuthConfig = config.google; KeycloakConfig = config.keycloak; if (OSOAuthConfig && !master) { // TODO auth.master_uri no longer used right? // master = OSOAuthConfig.master_uri; if (!master) { var oauth_authorize_uri = OSOAuthConfig.oauth_authorize_uri; if (oauth_authorize_uri) { var text = oauth_authorize_uri; var idx = text.indexOf("://"); if (idx > 0) { idx += 3; idx = text.indexOf("/", idx); if (idx > 0) { master = text.substring(0, ++idx); } } } } } if ((!Kubernetes.masterUrl || Kubernetes.masterUrl === "/") && (!master || master === "/")) { // lets default the master to the current protocol and host/port // in case the master url is "/" and we are // serving up static content from inside /api/v1/namespaces/default/services/fabric8 or something like that var href = location.href; if (href) { master = new URI(href).query("").path("").toString(); } } if (master) { Kubernetes.masterUrl = master; next(); return; } }) .fail(function (response) { Kubernetes.log.debug("Error fetching OAUTH config: ", response); }) .always(function () { next(); }); } }, true); hawtioPluginLoader.addModule('ngResource'); hawtioPluginLoader.addModule(Kubernetes.pluginName); })(Kubernetes || (Kubernetes = {})); /// var Kubernetes; (function (Kubernetes) { var log = Logger.get('kubernetes-watcher'); var k8sTypes = KubernetesAPI.NamespacedTypes.k8sTypes; var osTypes = KubernetesAPI.NamespacedTypes.osTypes; var self = {}; var updateFunction = function () { log.debug("Objects changed, firing listeners"); var objects = {}; _.forEach(self.getTypes(), function (type) { objects[type] = self.getObjects(type); }); _.forEach(self.listeners, function (listener) { listener(objects); }); }; var debouncedUpdate = _.debounce(updateFunction, 75, { trailing: true }); var namespaceWatch = { selected: undefined, watch: undefined, objects: [], objectMap: {}, watches: {} }; hawtioPluginLoader.registerPreBootstrapTask({ name: 'KubernetesWatcherInit', depends: ['KubernetesApiDiscovery'], task: function (next) { var booted = false; if (Kubernetes.isOpenShift) { log.info("Backend is an Openshift instance"); } else { log.info("Backend is a vanilla Kubernetes instance"); } namespaceWatch.watch = KubernetesAPI.watch({ kind: KubernetesAPI.WatchTypes.NAMESPACES, success: function (objects) { namespaceWatch.objects = objects; if (!booted) { booted = true; self.setNamespace(localStorage[Kubernetes.Constants.NAMESPACE_STORAGE_KEY] || Kubernetes.defaultNamespace); next(); } log.debug("Got namespaces: ", namespaceWatch.objects); }, error: function (error) { log.warn("Error fetching namespaces: ", error); // TODO is this necessary? //HawtioOAuth.doLogout(); if (!booted) { booted = true; next(); } } }); } }); hawtioPluginLoader.registerPreBootstrapTask({ name: 'KubernetesApiDiscovery', depends: ['hawtio-oauth'], task: function (next) { Kubernetes.isOpenShift = false; var userProfile = HawtioOAuth.getUserProfile(); log.debug("User profile: ", userProfile); if (userProfile && userProfile.provider === "hawtio-google-oauth") { log.debug("Possibly running on GCE"); // api master is on GCE $.ajax({ url: UrlHelpers.join(Kubernetes.masterApiUrl(), 'api', 'v1', 'namespaces'), complete: function (jqXHR, textStatus) { if (textStatus === "success") { log.debug("jqXHR: ", jqXHR); userProfile.oldToken = userProfile.token; userProfile.token = undefined; $.ajaxSetup({ beforeSend: function (request) { } }); } next(); }, beforeSend: function (request) { } }); } else { log.debug("Not running on GCE"); // double-check if we're on vanilla k8s or openshift var rootUri = new URI(Kubernetes.masterApiUrl()).path("/oapi").query("").toString(); log.debug("Checking for an openshift backend"); HawtioOAuth.authenticatedHttpRequest({ url: rootUri, success: function (data) { if (data) { Kubernetes.isOpenShift = true; } next(); }, error: function (jqXHR, textStatus, errorThrown) { var error = KubernetesAPI.getErrorObject(jqXHR); if (!error) { log.debug("Failed to find root paths: ", textStatus, ": ", errorThrown); } else { log.debug("Failed to find root paths: ", error); } Kubernetes.isOpenShift = false; next(); } }); } } }); var customUrlHandlers = {}; self.setNamespace = function (namespace) { if (namespace === namespaceWatch.selected) { return; } if (namespaceWatch.selected) { log.debug("Stopping current watches"); _.forOwn(namespaceWatch.watches, function (watch, key) { if (!KubernetesAPI.namespaced(key)) { return; } log.debug("Disconnecting watch: ", key); watch.disconnect(); }); _.forEach(_.keys(namespaceWatch.watches), function (key) { if (!KubernetesAPI.namespaced(key)) { return; } log.debug("Deleting kind: ", key); delete namespaceWatch.watches[key]; }); } namespaceWatch.selected = namespace; if (namespace) { _.forEach(self.getTypes(), function (kind) { if (kind === KubernetesAPI.WatchTypes.NAMESPACES) { return; } if (!namespaceWatch.watches[kind]) { log.debug("Creating watch for kind: ", kind); var config = { kind: kind, namespace: KubernetesAPI.namespaced(kind) ? namespace : undefined, success: function (objects) { watch.objects = objects; debouncedUpdate(); } }; if (kind in customUrlHandlers) { config.urlFunction = customUrlHandlers[kind]; } var watch = KubernetesAPI.watch(config); watch.config = config; namespaceWatch.watches[kind] = watch; } }); } }; self.hasWebSocket = true; self.getNamespace = function () { return namespaceWatch.selected; }; self.registerCustomUrlFunction = function (kind, url) { customUrlHandlers[kind] = url; if (kind in namespaceWatch.watches) { var watch = namespaceWatch.watches[kind]; var config = watch.config; config.urlFunction = url; watch.disconnect(); delete namespaceWatch.watches[kind]; config.success = function (objects) { watch.objects = objects; debouncedUpdate(); }; watch = KubernetesAPI.watch(config); watch.config = config; namespaceWatch.watches[kind] = watch; } }; self.getTypes = function () { var filter = function (kind) { // filter out stuff we don't care about yet switch (kind) { case KubernetesAPI.WatchTypes.OAUTH_CLIENTS: case KubernetesAPI.WatchTypes.IMAGE_STREAMS: case KubernetesAPI.WatchTypes.POLICIES: case KubernetesAPI.WatchTypes.ROLES: case KubernetesAPI.WatchTypes.ROLE_BINDINGS: case KubernetesAPI.WatchTypes.POLICY_BINDINGS: case KubernetesAPI.WatchTypes.PERSISTENT_VOLUME_CLAIMS: case KubernetesAPI.WatchTypes.PERSISTENT_VOLUMES: case KubernetesAPI.WatchTypes.ENDPOINTS: case KubernetesAPI.WatchTypes.RESOURCE_QUOTAS: case KubernetesAPI.WatchTypes.SERVICE_ACCOUNTS: return false; default: return true; } }; var answer = k8sTypes.concat([Kubernetes.WatchTypes.NAMESPACES]); if (Kubernetes.isOpenShift) { answer = answer.concat(osTypes); } else { answer = answer.concat(KubernetesAPI.WatchTypes.TEMPLATES); answer = answer.concat(KubernetesAPI.WatchTypes.BUILD_CONFIGS); } return _.filter(answer, filter); }; self.getObjects = function (kind) { if (kind === Kubernetes.WatchTypes.NAMESPACES) { return namespaceWatch.objects; } if (kind in namespaceWatch.watches) { return namespaceWatch.watches[kind].objects; } else { return undefined; } }; self.listeners = []; // listener gets notified after a bunch of changes have occurred self.registerListener = function (fn) { self.listeners.push(fn); }; var projectsHandle = undefined; // kick off the project watcher a bit sooner also hawtioPluginLoader.registerPreBootstrapTask({ name: 'ProjectsWatcher', depends: ['KubernetesApiDiscovery'], task: function (next) { if (Kubernetes.isOpenShift) { projectsHandle = KubernetesAPI.watch({ kind: KubernetesAPI.WatchTypes.PROJECTS, namespace: undefined, success: function (objects) { if (self.listeners && self.listeners.length) { log.debug("got projects: ", objects); _.forEach(self.listeners, function (listener) { listener({ projects: objects }); }); } } }); } next(); } }); Kubernetes._module.service('WatcherService', ['userDetails', '$rootScope', '$timeout', function (userDetails, $rootScope, $timeout) { return self; }]); })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { var log = Logger.get("kubernetes-term-windows"); Kubernetes._module.config(["kubernetesContainerSocketProvider", function (kubernetesContainerSocketProvider) { kubernetesContainerSocketProvider.WebSocketFactory = "CustomWebSockets"; }]); Kubernetes._module.factory('CustomWebSockets', ["userDetails", function (userDetails) { return function CustomWebSocket(url, protocols) { var paths = url.split('?'); if (!_.startsWith(paths[0], Kubernetes.masterApiUrl())) { paths[0] = UrlHelpers.join(Kubernetes.masterApiUrl(), paths[0]); } url = KubernetesAPI.wsUrl(paths[0]); url.search(paths[1] + '&access_token=' + userDetails.token); log.debug("Using ws url: ", url.toString()); return new WebSocket(url.toString(), protocols); }; }]); Kubernetes._module.service('TerminalService', ["$rootScope", "$document", "$compile", "$interval", "$templateCache", function ($rootScope, $document, $compile, $interval, $templateCache) { var body = $document.find('body'); function positionTerminals(terminals) { var total = _.keys(terminals).length; var dist = (body.width() - 225) / total; var position = 5; angular.forEach(terminals, function (value, key) { if (!value.scope.docked) { return; } value.el.css('left', position + 'px'); position = position + dist; }); } var defaultTemplate = $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, 'termShell.html')); var self = { positionTerminals: function () { positionTerminals(self.terminals); }, terminals: {}, httpTask: {}, newTerminal: function ($interval, podLink, containerName, entity, url, template) { if (template === void 0) { template = defaultTemplate; } var terminalId = UrlHelpers.join(podLink, containerName); if (terminalId in self.terminals) { log.debug("Already a terminal with id: ", terminalId); self.raiseTerminal(terminalId); return terminalId; } var scope = $rootScope.$new(); getLogs(entity, scope, url); scope.podLink = podLink; scope.containerName = containerName; scope.id = terminalId; scope.docked = true; if (terminalId in self.httpTask) { self.raiseTerminal(terminalId); return terminalId; } else { self.httpTask[terminalId] = $interval(function () { getLogs(entity, scope, url); }, 2000); } var el = $($compile(template)(scope)); var term = { scope: scope, el: el }; body.append(el); self.terminals[terminalId] = term; positionTerminals(self.terminals); return terminalId; }, closeTerminal: function (id) { var term = self.terminals[id]; var timer = self.httpTask[id]; if (timer) { $interval.cancel(timer); delete self.httpTask[id]; } if (term) { term.el.remove(); delete self.terminals[id]; positionTerminals(self.terminals); } }, raiseTerminal: function (id) { angular.forEach(self.terminals, function (value, key) { if (key === id) { value.el.css('z-index', '4000'); value.el.find('.terminal').focus(); } else { value.el.css('z-index', '3000'); } }); } }; return self; }]); function addWindowActions(scope, element, TerminalService) { var moved = false; var lastX = 0; var lastY = 0; var header = element.find('.terminal-title'); var body = element.find('.terminal-body'); element.on('$destroy', function () { $('#main').css({ display: 'inherit' }); }); var HEIGHT = 348; var WIDTH = 600; var TITLE_HEIGHT = 35; var NAV_OFFSET = 46; element.css({ height: HEIGHT, width: WIDTH }); header.css({ height: TITLE_HEIGHT }); body.css({ position: 'absolute', top: 35, left: 0, right: 0, bottom: 0 }); scope.close = function () { TerminalService.closeTerminal(scope.id); }; scope.raise = function () { TerminalService.raiseTerminal(scope.id); }; scope.$watch('docked', function (docked) { if (docked) { element.width(WIDTH); if (!element.hasClass('minimized')) { element.height(HEIGHT); } } }); scope.startResize = function (e) { e.preventDefault(); log.debug("Start resize"); scope.resizing = true; element.on('mouseup', scope.stopResize); $(document).on('mousemove', scope.doResize); $(document).on('mouseleave', scope.stopResize); }; scope.doResize = function (e) { if (scope.resizing) { log.debug("Resizing, e: ", e); if (!moved) { lastX = e.clientX; lastY = e.clientY; moved = true; return; } var height = element.height(); var width = element.width(); var deltaX = e.clientX - lastX; var deltaY = e.clientY - lastY; var newHeight = height + deltaY; var newWidth = width + deltaX; if (newHeight > 35 && newWidth > 80) { element.height(height + deltaY); element.width(width + deltaX); } lastX = e.clientX; lastY = e.clientY; } }; scope.stopResize = function (e) { scope.resizing = false; moved = false; element.off('mouseup', scope.stopResize); $(document).off('mousemove', scope.doResize); $(document).off('mouseleave', scope.stopResize); }; scope.mouseDown = function (e) { e.preventDefault(); if (element.hasClass('minimized') || element.hasClass('maximized')) { return; } scope.dragging = true; element.on('mouseup', scope.mouseUp); $(document).on('mousemove', scope.mouseMove); $(document).on('mouseleave', scope.mouseUp); }; scope.mouseUp = function (e) { e.preventDefault(); scope.dragging = false; moved = false; var height = element.height(); var offset = element.offset(); var winHeight = $(window).height(); if (offset.top > (winHeight - height - 20)) { element.css({ top: "inherit", left: "inherit" }); scope.docked = true; TerminalService.positionTerminals(); } else { scope.docked = false; } element.off('mouseup', scope.mouseUp); $(document).off('mousemove', scope.mouseMove); $(document).off('mouseleave', scope.mouseUp); }; scope.mouseMove = function (e) { if (scope.dragging) { if (!moved) { lastX = e.clientX; lastY = e.clientY; moved = true; return; } var deltaX = e.clientX - lastX; var deltaY = e.clientY - lastY; var elOffset = element.offset(); element.offset({ top: elOffset.top + deltaY, left: elOffset.left + deltaX }); lastX = e.clientX; lastY = e.clientY; } }; function restoreWindow(scope, element) { if (scope.offset) { element.offset(scope.offset); scope.docked = false; } if (scope.height) { element.height(scope.height); } if (scope.width) { element.width(scope.width); } } function saveWindow(scope, element) { scope.offset = element.offset(); scope.height = element.height(); scope.width = element.width(); } scope.maximized = function () { return element.hasClass('maximized'); }; scope.maximize = function ($e) { $e.preventDefault(); if (element.hasClass('minimized')) { scope.minimize(); } if (element.hasClass('maximized')) { restoreWindow(scope, element); $('#main').css({ display: 'inherit' }); } else { saveWindow(scope, element); $('#main').css({ display: 'none' }); element.css({ height: 'inherit', bottom: 0, width: '100%', top: NAV_OFFSET, left: 0 }); } element.toggleClass('maximized'); }; scope.minimize = function ($e) { $e.preventDefault(); if (element.hasClass('maximized')) { scope.maximize(); } if (element.hasClass('minimized')) { restoreWindow(scope, element); } else { saveWindow(scope, element); scope.docked = true; element.css({ height: TITLE_HEIGHT, top: "inherit", left: "inherit" }); TerminalService.positionTerminals(); } element.toggleClass('minimized'); }; } Kubernetes.addWindowActions = addWindowActions; Kubernetes._module.directive('terminalWindow', ["$compile", "TerminalService", function ($compile, TerminalService) { return { restrict: 'A', scope: false, link: function (scope, element, attr) { addWindowActions(scope, element, TerminalService); var body = element.find('.terminal-body'); body.append($compile('')(scope)); } }; }]); function getLogs(rc, scope, url) { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { if (xhr.readyState == 4) { if (xhr.status == 200) { if (xhr.responseText != "" && xhr.responseText != null) { var logObject = JSON.parse(xhr.responseText); scope.logs = logObject[Kubernetes.getName(rc)]; } else { scope.logs = "当前没有可以查看的日志信息"; } } else { } } }; xhr.open("POST", url, false); //xhr.open("POST", "/java/console/api/oracle/extract/log?rcName=" + getName(rc),false); xhr.send(null); } })(Kubernetes || (Kubernetes = {})); /// /// /// /// /// /// var Configs; (function (Configs) { Configs.TableEdit = Configs.controller('TableEdit', ['$scope', function ($scope) { $scope.editRow = function (entity) { $scope.$emit('editRow', entity); }; $scope.deleteRowOne = { show: false, item: null, open: function (entity) { var deleteRowOne = $scope.deleteRowOne; deleteRowOne.show = true; deleteRowOne.item = entity; }, onOk: function () { var deleteRowOne = $scope.deleteRowOne; $scope.$emit('deleteRow', deleteRowOne.item); }, onCancel: function () { var deleteRowOne = $scope.deleteRowOne; deleteRowOne.show = false; deleteRowOne.item = null; } }; }]); Configs.VolumeController = Configs.controller('VolumeController', ['$scope', '$http', function ($scope, $http) { $scope.submitted = false; $scope.status = $scope.ngDialogData.status; $scope.cancel = function () { $scope.closeThisDialog(); $scope.submitted = false; }; $scope.deleteBrock = function (volume, brock) { if (volume.brick.length > 1) Configs.deleteBrock(volume, brock); else $scope.showMessage = true; }; $scope.addBrock = function (volume) { var block = { ip: "", path: "", status: false, editable: true }; Configs.addBrock(volume, block); $scope.showMessage = false; }; $scope.stopVolume = function (volume) { volume.status = false; }; $scope.startVolume = function (volume) { volume.status = true; }; $scope.onSubmit = function (entity) { console.log(entity); if ($scope.volumeForm.$valid) { $scope.$emit('update', entity); $scope.closeThisDialog(); } else { $scope.submitted = true; } }; }]); Configs.SystemInfoController = Configs.controller('SystemInfoController', ['$scope', function ($scope) { }]); Configs.SqlViewController = Configs.controller('SqlViewController', ['$scope', '$http', function ($scope, $http) { $scope.title = shareInit($scope.ngDialogData); $scope.content = ""; getSqlContent(); function getSqlContent() { $http({ url: "/java/console/api/filePackage/readSqlFile", method: 'POST', params: { type: $scope.ngDialogData.type }, data: JSON.stringify($scope.ngDialogData.item) }).success(function (data, header, config, status) { $scope.old_content = data.data1; //响应成功 }).error(function (data, header, config, status) { //处理响应失败 $scope.old_content = "获取脚本内容失败"; }); } $scope.upLoadSqlFile = function () { if (typeof FileReader == 'undefined') { throw "浏览器不支持FileReader读取文件"; } else { Configs.FileInputPlugin(function (file) { if (typeof typeof FileReader == 'undefined') throw "浏览器不支持FileReader读取文件"; else { var fr = new FileReader(); fr.onloadend = function (e) { $scope.new_content = e.target["result"]; $scope.enable = true; }; fr.onloadstart = function () { $scope.$apply(function () { $scope.content = "正在读取数据请稍等..."; }); $scope.content = "正在读取数据请稍等..."; }; fr.readAsText(file[0], "GBK"); } }); } }; $scope.onOk = function () { $scope.enable = false; if (null == $scope.new_content || $scope.new_content == "") { console.log("上传的内容不能为空"); $scope.closeThisDialog(); } else { $scope.$emit("onOk", { url: "/java/console/api/filePackage/handleSqlFile", item: $scope.ngDialogData.item, content: $scope.new_content, opt: "add", type: $scope.ngDialogData.type }); $scope.closeThisDialog(); } }; $scope.cancel = function () { $scope.enable = false; $scope.closeThisDialog(); }; }]); Configs.SqlAddController = Configs.controller('SqlAddController', ['$scope', '$http', function ($scope, $http) { $scope.content = ""; $scope.title = shareInit($scope.ngDialogData); $scope.sqlFileUpload = function () { Configs.FileInputPlugin(function (file) { if (typeof FileReader == 'undefined') throw "浏览器不支持FileReader读取文件"; else { var fr = new FileReader(); fr.onloadend = function (e) { $scope.content = e.target["result"]; $scope.enable = true; }; fr.onloadstart = function () { $scope.$apply(function () { $scope.content = "正在读取数据请稍等..."; }); $scope.content = "正在读取数据请稍等..."; }; fr.readAsText(file[0], "GBK"); } }); }; $scope.onOk = function () { $scope.enable = false; if (null == $scope.content || $scope.content == "") { console.log("上传的内容不能为空"); $scope.closeThisDialog(); } else { $scope.$emit("onOk", { url: "/java/console/api/filePackage/handleSqlFile", item: $scope.ngDialogData.item, content: $scope.content, opt: "add", type: $scope.ngDialogData.type }); $scope.closeThisDialog(); } }; $scope.cancel = function () { $scope.enable = false; $scope.closeThisDialog(); }; }]); Configs.sqlVerificationController = Configs.controller('sqlVerificationController', ['$scope', '$http', function ($scope, $http) { getSqlContent(); $scope.title = shareInit($scope.ngDialogData); $scope.replace = function () { $scope.$emit("replace", { url: "/java/console/api/filePackage/handleSqlFile", item: $scope.ngDialogData.item, content: $scope.content, opt: "replace", type: $scope.ngDialogData.type }); $scope.closeThisDialog(); }; function getSqlContent() { $http({ url: "/java/console/api/filePackage/readSqlFile", method: 'POST', params: { type: $scope.ngDialogData.type }, data: JSON.stringify($scope.ngDialogData.item) }).success(function (data, header, config, status) { $scope.standard = data.data1; $scope.unnormal = data.data2; //响应成功 }).error(function (data, header, config, status) { //处理响应失败 $scope.unnormal = $scope.standard = "获取脚本内容失败"; }); } $scope.cancel = function () { //$scope.closeThisDialog(); $scope.$emit("replace", { url: "/java/console/api/filePackage/handleSqlFile", item: $scope.ngDialogData.item, content: $scope.content, opt: "delete", type: $scope.ngDialogData.type }); $scope.closeThisDialog(); }; }]); Configs.sqlMoveController = Configs.controller("sqlMoveController", ['$scope', '$http', function ($scope, $http) { getSqlContent(); $scope.title = shareInit($scope.ngDialogData); $scope.move = function () { $scope.$emit("replace", { url: "/java/console/api/filePackage/handleSqlFile", item: $scope.ngDialogData.item, content: $scope.content, opt: "replace", type: $scope.ngDialogData.type }); $scope.closeThisDialog(); }; $scope.cancel = function () { $scope.closeThisDialog(); }; function getSqlContent() { $http({ url: "/java/console/api/filePackage/readSqlFile", method: 'POST', params: { type: $scope.ngDialogData.type }, data: JSON.stringify($scope.ngDialogData.item) }).success(function (data, header, config, status) { $scope.content = data.data2; //响应成功 }).error(function (data, header, config, status) { //处理响应失败 $scope.content = "获取脚本内容失败"; }); } }]); Configs.sysVerUpdateController = Configs.controller('sysVerUpdateController', ['$scope', '$http', function ($scope, $http) { $scope.checkboxItmes = []; $scope.click = function ($event, name) { if ($event.target.checked) { if ($scope.checkboxItmes.indexOf(name) == -1) $scope.checkboxItmes.push(name); } else { for (var i = 0; i < $scope.checkboxItmes.length; i++) { if ($scope.checkboxItmes[i] === name) { $scope.checkboxItmes.splice(i, 1); break; } } } }; getData(); $scope.replace = function () { $scope.requestBody = $scope.data1; angular.forEach($scope.checkboxItmes, function (item) { $scope.requestBody[item] = $scope.data2[item]; }); $scope.$emit("updateRow", $scope.requestBody); $scope.closeThisDialog(); }; $scope.cancel = function () { $scope.closeThisDialog(); }; function getData() { $http({ url: "/java/console/api/checkout/findDetails", method: 'POST', data: JSON.stringify($scope.ngDialogData) }).success(function (data, header, config, status) { $scope.data1 = data.data1; $scope.data2 = data.data2; //响应成功 }).error(function (data, header, config, status) { //处理响应失败 $scope.content = "获取脚本内容失败"; }); } }]); function shareInit(ngDialogData) { var title = ""; if (ngDialogData.type != 'undefined') { switch (ngDialogData.type) { case "userTableStatus": title = "UserTablespace"; break; case "ckPayStatus": title = "Chechout_Pay"; break; case "ckIndicateStatus": title = "Chechout_Indicate"; break; } } return title; } })(Configs || (Configs = {})); /// /// /// /// /// /// /// /// var Configs; (function (Configs) { Configs.GfsController = Configs.controller('GfsController', ["$scope", "$templateCache", "$location", "$routeParams", "$http", "$timeout", 'ConfigsModel', 'ngDialog', function ($scope, $templateCache, $location, $routeParams, $http, $timeout, ConfigsModel, ngDialog) { $scope.model = ConfigsModel; $scope.volumes = ConfigsModel.cluster; Configs.shareInit($scope, $location, $routeParams); $scope.createGfs = function () { ngDialog.open({ template: 'newDialog.html', controller: 'Configs.VolumeController', width: 1005, scope: $scope, closeByDocument: false, data: { name: '', path: '', status: true, brick: [{ ip: ["0", "0", "0", "0"], path: '', status: false, editable: true }], editable: true, hot: true }, className: 'ngdialog-theme-default' }); }; $scope.editRow = function (volume) { var fVolume = Configs.formatVolume(volume); ngDialog.open({ template: 'newDialog.html', width: 1005, data: fVolume, scope: $scope, className: 'ngdialog-theme-default', controller: 'Configs.VolumeController', closeByDocument: false }); }; $scope.showDeleteVolume = { show: false, item: null, open: function (entity) { var showDeleteVolume = $scope.showDeleteVolume; showDeleteVolume.show = true; showDeleteVolume.item = entity; }, onOk: function () { var showDeleteVolume = $scope.showDeleteVolume; $timeout(function () { console.log(showDeleteVolume.item); var spinner; $.ajax({ type: "POST", url: "/java/console/api/volume/delete", timeout: 8000, dataType: 'json', //async: false, data: JSON.stringify(showDeleteVolume.item), contentType: "application/json; charset=utf-8", beforeSend: function () { Configs.create_mask(); //创建遮罩层 Kubernetes.create_locadEffect("正在更新云盘信息,请稍等!"); //创建数据加载效果层 var target = document.getElementById('loading'); spinner = new Spinner(Kubernetes.loadConfigs()).spin(target); }, complete: function (XMLHttpRequest, textStatus) { if (XMLHttpRequest.status == 200) { Kubernetes.createSuccessInfo("success", "更新成功!"); setTimeout("Kubernetes.removeMask()", 1500); } else { Kubernetes.createSuccessInfo("error", "更新失败!"); setTimeout("Kubernetes.removeMask()", 1500); } }, success: function (data) { if (data) { ConfigsModel.cluster = data; Configs.formatVolumes(ConfigsModel.cluster); $scope.$apply(function () { $scope.volumes = ConfigsModel.cluster; }); } } }); /*$http({ url: "/java/console/api/volume/delete", method: 'POST', data: showDeleteVolume.item }).success(function(data,header,config,status){ /* 更新volume信息 */ /*$scope.model.updateVolumeData(); }).error(function(data,header,config,status){ Configs.customAlert("提示", "删除Volume失败!", '',null, 0, "error"); });*/ }, 100); }, onCancel: function () { var showDeleteVolume = $scope.showDeleteVolume; showDeleteVolume.show = false; showDeleteVolume.item = null; } }; $scope.$on('update', function (event, data) { angular.forEach(data["brick"], function (brick) { var ip = []; if (brick["ip"] instanceof Object) { for (var key in brick["ip"]) ip.push(brick["ip"][key]); brick["ip"] = ip.join("\."); } }); data.hot = data.hot == true ? 0 : 1; var spinner; $.ajax({ type: "POST", url: "/java/console/api/volume/update", timeout: 15000, dataType: 'json', //async: false, data: JSON.stringify(data), contentType: "application/json; charset=utf-8", beforeSend: function () { Configs.create_mask(); //创建遮罩层 Kubernetes.create_locadEffect("正在更新云盘信息,请稍等!"); //创建数据加载效果层 var target = document.getElementById('loading'); spinner = new Spinner(Kubernetes.loadConfigs()).spin(target); }, complete: function (XMLHttpRequest, textStatus) { if (XMLHttpRequest.status == 200) { Kubernetes.createSuccessInfo("success", "更新成功!"); setTimeout("Kubernetes.removeMask()", 1500); } else { Kubernetes.createSuccessInfo("error", "更新失败!"); setTimeout("Kubernetes.removeMask()", 1500); } }, success: function (data) { if (data) { ConfigsModel.cluster = data; Configs.formatVolumes(ConfigsModel.cluster); $scope.$apply(function () { $scope.volumes = ConfigsModel.cluster; }); } } }); /*$http({ url: "/java/console/api/volume/update", method: 'POST', data: data }).success(function(data,header,config,status){ $scope.model.updateVolumeData(); }).error(function(data,header,config,status){ });*/ }); }]); })(Configs || (Configs = {})); /// /// /// /// var Configs; (function (Configs) { Configs.KubeController = Configs.controller('KubeController', ["$scope", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "ConfigsModel", function ($scope, $templateCache, $location, $routeParams, $http, $timeout, ConfigsModel) { $scope.model = ConfigsModel; $scope.model.updateOracleParam(); $scope.submitted = false; $scope.tableConfig = { data: 'model.oracleParam', selectedItems: [], columnDefs: [{ field: "name", displayName: "名称" }, { field: "ip", displayName: "IP" }, { field: "port", displayName: "端口号" }, { field: "user", displayName: "用户名" }, { field: "password", displayName: "密码" }, { field: "databaseName", displayName: "服务名" }, { field: "tableName", displayName: "表空间名" }, { field: "suffix", displayName: "表后缀" }, { field: "type", displayName: "标准表汇总库", cellTemplate: $templateCache.get("strandColumn.html") }, { field: "entity", displayName: "操作", cellTemplate: $templateCache.get("tableEdit.html") }], enableRowClickSelection: false, showSelectionCheckbox: false, multiSelect: false, sortInfo: { sortBy: "name", ascending: true } }; Configs.shareInit($scope, $location, $routeParams); $scope.create = function () { $scope.submitted = false; $scope.add = true; $scope.edit = false; $scope.tableForm = {}; $scope.tableForm["id"] = 0; $scope.tableForm["type"] = 0; }; $scope.cancel = function () { $scope.tableForm = null; $scope.add = false; $scope.edit = false; $scope.submitted = false; }; $scope.onSubmit = function (oracle) { if ($scope.validForm.$valid && $scope.validForm.$dirty) { $scope.edit = false; $scope.add = false; Configs.oracleInfoOperate($http, "/java/console/api/oracle", Configs.OperateType.UPDATE, oracle, function (result, status) { if (status === 200) { $scope.model.updateOracleParam(); } else { throw "资源请求失败"; } }); } else { $scope.submitted = true; } }; $scope.$on("editRow", function (event, data) { $scope.submitted = false; $scope.tableForm = Configs.deepCopy(data); $scope.edit = true; $scope.add = false; //$scope.rowId = data.id //createNewObejct($scope.tableConfig.columnDefs, data); //removeElementsByValue($scope.tableForm, [{key: "name", value: "序号"},{key: "name", value: "连接状态"},{key: "name", value: "操作"}]); }); $scope.$on("deleteRow", function (event, data) { Configs.oracleInfoOperate($http, "/java/console/api/oracle", Configs.OperateType.DELETE, data, function (result, status) { if (status === 200) { console.log("准备更新"); $scope.model.updateOracleParam(); } else { throw "资源请求失败"; } }); //removeElementByValue($scope.model, data._id, "_id"); }); }]); })(Configs || (Configs = {})); /// /// /// var Developer; (function (Developer) { Developer._module = angular.module(Developer.pluginName, ['hawtio-core', 'hawtio-ui', 'ui.codemirror', 'nvd3', 'treeControl', 'ngDialog']); Developer.controller = PluginHelpers.createControllerFunction(Developer._module, Developer.pluginName); Developer.route = PluginHelpers.createRoutingFunction(Developer.templatePath); Developer._module.config(['$routeProvider', function ($routeProvider) { $routeProvider.when(Developer.context, Developer.route('workspaces.html', false)) .when("/data-manager", Developer.route('workspaces.html', false)) .when(UrlHelpers.join(Developer.context, 'Overview/:type/data-type/all'), Developer.route('workspaces.html', false)) .when(UrlHelpers.join(Developer.context, 'Overview/:type/data-type/financial'), Developer.route('workspaces.html', false)) .when(UrlHelpers.join(Developer.context, 'Overview/:type/data-type/social-security'), Developer.route('workspaces.html', false)) .when(UrlHelpers.join(Developer.context, 'Overview/task'), Developer.route('fileMigrationTask.html', false)) .otherwise(Developer.context); }]); Developer._module.run(['viewRegistry', 'ServiceRegistry', 'HawtioNav', 'KubernetesModel', '$templateCache', function (viewRegistry, ServiceRegistry, HawtioNav, KubernetesModel, $templateCache) { Developer.log.debug("Running"); viewRegistry['workspaces'] = Kubernetes.templatePath + 'layoutKubernetes.html'; viewRegistry['namespaces'] = Kubernetes.templatePath + 'layoutKubernetes.html'; // viewRegistry['workspaces'] = Configs.templatePath + 'shareLayout.html'; var builder = HawtioNav.builder(); var dmanagerTab = builder.id('dmanager') .rank(200) .href(function () { return Developer.context; }) .title(function () { return '数据管理'; }) .build(); HawtioNav.add(dmanagerTab); }]); Developer._module.filter('asTrustedHtml', ['$sce', function ($sce) { return function (text) { return $sce.trustAsHtml(text); }; }]); hawtioPluginLoader.addModule(Developer.pluginName); // for scroll-glue directive hawtioPluginLoader.addModule('luegg.directives'); })(Developer || (Developer = {})); /// /// var Developer; (function (Developer) { var OptionsParams = (function () { function OptionsParams() { this.pagerSizeOption = [20, 50, 100]; this.dataType = null; this.currentTableSize = 20; this.dataBatch = null; this.labels = {}; this.currentPageNum = 1; this.totalSize = null; this.priorTableSize = 20; this.keyQuery = null; this.volumeType = 1; this.totlePage = 1; } OptionsParams.prototype.createParamData = function () { var extendValue = ["cityName", "districtName", "dataVersion", "systemName", "dataYear"]; var result = { currentPageNum: this.currentPageNum, dataType: this.dataType, submittedBatch: this.dataBatch, limit: this.currentTableSize, priorTableSize: this.priorTableSize, keyQuery: this.keyQuery, volumeType: this.volumeType }; angular.forEach(this.labels, function (value, key) { if (extendValue.indexOf(key)) result[key] = value; }); return result; }; OptionsParams.prototype.getPageSizeNum = function () { var num = Math.ceil(this.totalSize / this.currentTableSize); console.log(this.totalSize); if (num < this.currentPageNum) num = this.currentPageNum; return num; }; return OptionsParams; }()); Developer.OptionsParams = OptionsParams; function createLabel(cityName, districtName, systemName, version, year) { return { cityName: cityName, districtName: districtName, systemName: systemName, version: "版本" + version, year: year }; } function createAlias(cityName, districtName, systemName, version, year) { return cityName + "_" + districtName + "_" + systemName + "_" + year + "_版本" + version; } function createKey(regionalismCode, systemId, version) { return regionalismCode + "-" + systemId + "-" + version; } function populateKey(item) { var result = item; result["_key"] = createKey(item.regionalismCode, item.systemCode, item.dataVersion); return result; } function createItemsAlias(items) { var result = []; angular.forEach(items, function (item) { item.alias = createAlias(item.cityName, item.districtName, item.systemName, item.dataVersion, item.year); result.push(item); }); return result; } function populateLabel(item) { var result = item; result["labels"] = createLabel(item.cityName, item.districtName, item.systemName, item.dataVersion, item.year); return result; } function populateLabels(items) { var result = []; angular.forEach(items, function (item) { result.push(populateLabel(item)); }); return result; } function populateKeys(items) { var result = []; angular.forEach(items, function (item) { result.push(populateKey(item)); }); return result; } function createName(cityName, districtName) { return cityName + "-" + districtName; } function populateName(item) { var result = item; result["name"] = createName(item.cityName, item.districtName); return result; } function populateNames(items) { var result = []; angular.forEach(items, function (item) { result.push(populateName(item)); }); return result; } function createParamData(options) { return options.createParamData(); } function formatTask(items) { var result = []; angular.forEach(items, function (item) { var tmp_batch = ""; if (item.submittedBatch.indexOf("批次") == -1) { tmp_batch = "批次" + item.submittedBatch; } else { tmp_batch = item.submittedBatch; } item["_key"] = item.regionalismCode + "-" + item.systemCode + "-" + item.dataVersion; item["name"] = item.cityName + "-" + item.districtName; item["status"] = item.completeStatus; item["from"] = item.dataPath; item["process"] = item.rate; item["to"] = item.dstPath; item["labels"] = { dataType: item.dataType, batch: tmp_batch, dataVersion: "版本" + item.dataVersion, dataYear: item.year }; result.push(item); }); return result; } var DataModelService = (function () { function DataModelService() { this.data = []; this.paramOptions = new OptionsParams(); this.transferTasks = []; this.updateModel(); } //更新数据模型 DataModelService.prototype.getDataModel = function (paramOptions) { var result; $.ajax({ async: false, type: "POST", url: "/java/console/api/data.json", dataType: 'json', data: createParamData(paramOptions), success: function (data) { result = data.data; paramOptions.totalSize = data.length; paramOptions.totlePage = data.page.totlePage; } }); return result; }; DataModelService.prototype.initParamOptions = function () { this.paramOptions = new OptionsParams(); }; DataModelService.prototype.updateModel = function () { this.data = this.getDataModel(this.paramOptions); this.maybeFormat(); }; //格式数据模型中的每个单条记录 DataModelService.prototype.maybeFormat = function () { this.data = populateKeys(this.data); this.data = populateNames(this.data); this.data = populateLabels(this.data); this.data = createItemsAlias(this.data); }; //更新用户选择参数 DataModelService.prototype.updateParamOption = function (option, value) { this.paramOptions[option] = value; }; //根据key获取用户选择参数 DataModelService.prototype.getParamOption = function (key) { return this.paramOptions[key]; }; DataModelService.prototype.startIntervalTask = function ($interval, $http) { var _this = this; var result; var timer = $interval(function () { $.ajax({ async: false, type: "POST", url: "/java/console/api/task/transfer/list", success: function (data) { if (data) { result = data; } } }); _this.transferTasks = formatTask(result); }, 1500); timer.then(function () { console.log("Done!"); }, function () { console.log("error"); }, function () { console.log("每次都更新"); }); }; return DataModelService; }()); Developer.DataModelService = DataModelService; //创建数据模型服务 Developer._module.factory("DataModel", ['$rootScope', '$http', '$interval', '$location', '$resource', function ($rootScope, $http, $interval, $location, $resource) { var $scope = new DataModelService(); $scope.startIntervalTask($interval, $http); return $scope; }]); })(Developer || (Developer = {})); /// var Developer; (function (Developer) { function enrichWorkspaces(projects) { angular.forEach(projects, function (project) { enrichWorkspace(project); }); return projects; } Developer.enrichWorkspaces = enrichWorkspaces; function enrichWorkspace(build) { if (build) { var name = Kubernetes.getName(build); build.$name = name; build.$sortOrder = 0 - build.number; var nameArray = name.split("-"); var nameArrayLength = nameArray.length; build.$shortName = (nameArrayLength > 4) ? nameArray.slice(0, nameArrayLength - 4).join("-") : name.substring(0, 30); var labels = Kubernetes.getLabels(build); build.$creationDate = asDate(Kubernetes.getCreationTimestamp(build)); build.$labelsText = Kubernetes.labelsToString(labels); if (name) { build.$projectsLink = UrlHelpers.join("workspaces", name); build.$runtimeLink = UrlHelpers.join("kubernetes/namespace/", name, "/apps"); build.$viewLink = build.$projectsLink; } } return build; } Developer.enrichWorkspace = enrichWorkspace; function asDate(value) { return value ? new Date(value) : null; } Developer.asDate = asDate; function enrichJenkinsJobs(jobsData, projectId, jobName) { if (jobsData) { angular.forEach(jobsData.jobs, function (job) { enrichJenkinsJob(job, projectId, jobName); }); } return jobsData; } Developer.enrichJenkinsJobs = enrichJenkinsJobs; function enrichJenkinsJob(job, projectId, jobName) { if (job) { jobName = jobName || job.name || projectId; job.$jobId = jobName; job.$project = projectId || jobName; var lastBuild = job.lastBuild; var lastBuildResult = lastBuild ? lastBuild.result : "NOT_STARTED"; var $iconClass = createBuildStatusIconClass(lastBuildResult); job.$lastBuildNumber = enrichJenkinsBuild(job, lastBuild); job.$lastSuccessfulBuildNumber = enrichJenkinsBuild(job, job.lastSuccessfulBuild); job.$lastFailedlBuildNumber = enrichJenkinsBuild(job, job.lastFailedlBuild); if (lastBuild) { job.$duration = lastBuild.duration; job.$timestamp = asDate(lastBuild.timestamp); } var jobUrl = (job || {}).url; if (!jobUrl || !jobUrl.startsWith("http")) { var jenkinsUrl = jenkinsLink(); if (jenkinsUrl) { jobUrl = UrlHelpers.join(jenkinsUrl, "job", jobName); } } if (jobUrl) { job.$jobLink = jobUrl; var workspaceName = Kubernetes.currentKubernetesNamespace(); job.$pipelinesLink = UrlHelpers.join("/workspaces", workspaceName, "projects", job.$project, "jenkinsJob", jobName, "pipelines"); job.$buildsLink = UrlHelpers.join("/workspaces", workspaceName, "projects", job.$project, "jenkinsJob", jobName); } job.$iconClass = $iconClass; angular.forEach(job.builds, function (build) { enrichJenkinsBuild(job, build); }); } return job; } Developer.enrichJenkinsJob = enrichJenkinsJob; function createBuildStatusIconClass(result) { var $iconClass = "fa fa-spinner fa-spin"; if (result) { if (result === "FAILURE" || result === "FAILED") { // TODO not available yet $iconClass = "fa fa-exclamation-circle red"; } else if (result === "ABORTED" || result === "INTERUPTED") { $iconClass = "fa fa-circle grey"; } else if (result === "SUCCESS" || result === "COMPLETE" || result === "COMPLETED") { $iconClass = "fa fa-check-circle green"; } else if (result === "NOT_STARTED") { $iconClass = "fa fa-circle-thin grey"; } } return $iconClass; } Developer.createBuildStatusIconClass = createBuildStatusIconClass; function createBuildStatusBackgroundClass(result) { var $iconClass = "build-pending"; if (result) { if (result === "FAILURE" || result === "FAILED") { $iconClass = "build-fail"; } else if (result === "ABORTED" || result === "INTERUPTED") { $iconClass = "build-aborted"; } else if (result === "SUCCESS" || result === "COMPLETE" || result === "COMPLETED") { $iconClass = "build-success"; } else if (result === "NOT_STARTED") { $iconClass = "build-not-started"; } } return $iconClass; } Developer.createBuildStatusBackgroundClass = createBuildStatusBackgroundClass; function enrichJenkinsBuild(job, build) { var number = null; if (build) { build.$duration = build.duration; build.$timestamp = asDate(build.timestamp); var projectId = job.$project; var jobName = job.$jobId || projectId; var buildId = build.id; number = build.number; var workspaceName = Kubernetes.currentKubernetesNamespace(); var $iconClass = createBuildStatusIconClass(build.result); var jobUrl = (job || {}).url; if (!jobUrl || !jobUrl.startsWith("http")) { var jenkinsUrl = jenkinsLink(); if (jenkinsUrl) { jobUrl = UrlHelpers.join(jenkinsUrl, "job", jobName); } } if (jobUrl) { build.$jobLink = jobUrl; if (buildId) { //build.$logsLink = UrlHelpers.join(build.$buildLink, "console"); build.$logsLink = UrlHelpers.join("/workspaces", workspaceName, "projects", projectId, "jenkinsJob", jobName, "log", buildId); build.$pipelineLink = UrlHelpers.join("/workspaces", workspaceName, "projects", projectId, "jenkinsJob", jobName, "pipeline", buildId); build.$buildsLink = UrlHelpers.join("/workspaces", workspaceName, "projects", projectId, "jenkinsJob", jobName); //build.$buildLink = UrlHelpers.join(jobUrl, build.id); build.$buildLink = build.$logsLink; } } build.$iconClass = $iconClass; } return number; } Developer.enrichJenkinsBuild = enrichJenkinsBuild; function jenkinsLink() { var ServiceRegistry = Kubernetes.inject("ServiceRegistry"); if (ServiceRegistry) { return ServiceRegistry.serviceLink(Developer.jenkinsServiceName); } return null; } Developer.jenkinsLink = jenkinsLink; function forgeReadyLink() { var ServiceRegistry = Kubernetes.inject("ServiceRegistry"); if (ServiceRegistry) { return ServiceRegistry.serviceReadyLink(Kubernetes.fabric8ForgeServiceName); } return null; } Developer.forgeReadyLink = forgeReadyLink; function enrichJenkinsPipelineJob(job, projectId, jobId) { if (job) { job.$project = projectId; job.$jobId = jobId; angular.forEach(job.builds, function (build) { enrichJenkinsStages(build, projectId, jobId); }); } } Developer.enrichJenkinsPipelineJob = enrichJenkinsPipelineJob; function enrichJenkinsStages(build, projectId, jobName) { if (build) { build.$project = projectId; build.$jobId = jobName; build.$timestamp = asDate(build.timeInMillis); build.$iconClass = createBuildStatusIconClass(build.result || "NOT_STARTED"); var workspaceName = Kubernetes.currentKubernetesNamespace(); var parameters = build.parameters; var $parameterCount = 0; var $parameterText = "No parameters"; if (parameters) { $parameterCount = _.keys(parameters).length || 0; $parameterText = Kubernetes.labelsToString(parameters, " "); } build.$parameterCount = $parameterCount; build.$parameterText = $parameterText; var jenkinsUrl = jenkinsLink(); if (jenkinsUrl) { var url = build.url; if (url) { } } build.$logLink = UrlHelpers.join("/workspaces", workspaceName, "projects", projectId, "jenkinsJob", jobName, "log", build.id); build.$viewLink = build.$logLink; angular.forEach(build.stages, function (stage) { enrichJenkinsStage(stage, build); }); } return build; } Developer.enrichJenkinsStages = enrichJenkinsStages; function enrichJenkinsStage(stage, build) { if (build === void 0) { build = null; } if (stage) { if (build) { stage.$buildId = build.id; stage.$project = build.$project; } var projectId = build.$project; var jobName = build.$jobId || projectId; var buildId = build.id; var workspaceName = Kubernetes.currentKubernetesNamespace(); stage.$backgroundClass = createBuildStatusBackgroundClass(stage.status); stage.$iconClass = createBuildStatusIconClass(stage.status); stage.$startTime = asDate(stage.startTime); if (!stage.duration) { stage.duration = 0; } var jenkinsUrl = jenkinsLink(); if (jenkinsUrl) { var url = stage.url; if (url) { stage.$viewLink = UrlHelpers.join(jenkinsUrl, url); stage.$logLink = UrlHelpers.join(stage.$viewLink, "log"); if (projectId && buildId) { stage.$logLink = UrlHelpers.join("/workspaces", workspaceName, "projects", projectId, "jenkinsJob", jobName, "log", buildId); } } } } } Developer.enrichJenkinsStage = enrichJenkinsStage; })(Developer || (Developer = {})); /// var Developer; (function (Developer) { Developer._module.controller('Developer.EnvironmentPanelController', ["$scope", "$element", "$location", "$routeParams", "KubernetesModel", "$http", "$timeout", "KubernetesState", "KubernetesApiURL", function ($scope, $element, $location, $routeParams, KubernetesModel, $http, $timeout, KubernetesState, KubernetesApiURL) { $scope.envVersions = {}; $scope.model = KubernetesModel; $scope.env = $scope.$eval('env'); $scope.buildConfig = $scope.$eval('entity'); $scope.open = true; $scope.toggle = function () { return $scope.open = !$scope.open; }; var caches = {}; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); Developer.loadProjectVersions($scope, $element, $scope.buildConfig, $scope.env, $scope.env.namespace, $scope.envVersions, caches); }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.KubeTaskController = Developer.controller("KubeTaskController", ["$scope", "$http", "$location", "$routeParams", "DataModel", "$templateCache", function ($scope, $http, $location, $routeParams, DataModel, $templateCache) { $scope.model = DataModel; $scope.subTabConfig = Developer.createCurrentSubNavBar($scope, $location, $routeParams); $scope.tableConfig = { data: 'model.transferTasks', showSelectionCheckbox: false, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [{ field: "_key", displayName: '编码', customSortField: function (field) { return field.id; } }, { field: "name", displayName: '市-区/县' }, { field: "systemName", displayName: '系统名称' }, { field: "labels", displayName: '数据标签', cellTemplate: $templateCache.get("dataLabelsTemplate.html") }, { field: "from", displayName: '源集群', }, { field: "to", displayName: '目的集群', }, { field: "status", displayName: '迁移状态', cellTemplate: $templateCache.get("taskStatus.html") }, { field: "process", displayName: '迁移进度', cellTemplate: $templateCache.get("taskProcess.html") }, { field: "entity", displayName: '操作', cellTemplate: $templateCache.get("taskEdit.html") } ] }; $scope.$on("deleteRow", function (event, data) { Configs.oracleInfoOperate($http, "/java/console/api/task/transfer", Configs.OperateType.DELETE, data, function (data, status) { if (status === 200) console.log("删除成功"); }); }); }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.HomeController = Developer.controller("HomeController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.namespace = Kubernetes.currentKubernetesNamespace(); }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.JenkinsJobController = Developer.controller("JenkinsJobController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "ServiceRegistry", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, ServiceRegistry) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.jobId = $routeParams["job"]; $scope.schema = KubernetesSchema; $scope.entityChangedCache = {}; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, $scope.jobId); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.tableConfig = { data: 'job.builds', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: '$sortOrder', displayName: 'Name', cellTemplate: $templateCache.get("jenkinsBuildIdTemplate.html") }, { field: '$buildLink', displayName: 'Views', cellTemplate: $templateCache.get("jenkinsBuildButtonsTemplate.html") }, { field: '$duration', displayName: 'Duration', cellTemplate: $templateCache.get("jenkinsBuildDurationTemplate.html") }, { field: '$timestamp', displayName: 'Time Started', cellTemplate: $templateCache.get("jenkinsBuildTimestampTemplate.html") } ] }; updateData(); function updateData() { if ($scope.jobId) { var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, UrlHelpers.join("job", $scope.jobId, "api/json?depth=1")); if (url && (!$scope.job || Kubernetes.keepPollingModel)) { $http.get(url). success(function (data, status, headers, config) { if (data) { Developer.enrichJenkinsJob(data, $scope.id, $scope.jobId); if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { Developer.log.info("entity has changed!"); $scope.job = data; } } $scope.model.fetched = true; Core.$apply($scope); }). error(function (data, status, headers, config) { Developer.log.warn("Failed to load " + url + " " + data + " " + status); }); } } else { $scope.model.fetched = true; Core.$apply($scope); } } }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.JenkinsJobsController = Developer.controller("JenkinsJobsController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "ServiceRegistry", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, ServiceRegistry) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.schema = KubernetesSchema; $scope.jenkins = null; $scope.entityChangedCache = {}; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs(); $scope.subTabConfig = Developer.createWorkspaceSubNavBars(); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.tableConfig = { data: 'jenkins.jobs', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: 'name', displayName: 'Name', cellTemplate: $templateCache.get("jenkinsJobNameTemplate.html") }, { field: '$buildLink', displayName: 'Views', cellTemplate: $templateCache.get("jenkinsJobButtonsTemplate.html") }, { field: '$lastSuccessfulBuildNumber', displayName: 'Last Success', cellTemplate: $templateCache.get("jenkinsLastSuccessTemplate.html") }, { field: '$lastFailedlBuildNumber', displayName: 'Last Failure', cellTemplate: $templateCache.get("jenkinsLastFailureTemplate.html") }, { field: '$duration', displayName: 'Last Duration', cellTemplate: $templateCache.get("jenkinsBuildDurationTemplate.html") }, { field: '$timestamp', displayName: 'Time Started', cellTemplate: $templateCache.get("jenkinsBuildTimestampTemplate.html") } ] }; updateData(); function updateData() { // TODO only need depth 2 to be able to fetch the lastBuild var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, "api/json?depth=2"); Developer.log.info(""); if (url && (!$scope.jenkins || Kubernetes.keepPollingModel)) { $http.get(url, Developer.jenkinsHttpConfig). success(function (data, status, headers, config) { if (data) { Developer.enrichJenkinsJobs(data, $scope.id, $scope.id); if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { Developer.log.info("entity has changed!"); $scope.jenkins = data; } } $scope.model.fetched = true; Core.$apply($scope); }). error(function (data, status, headers, config) { Developer.log.warn("Failed to load " + url + " " + data + " " + status); }); } } }]); })(Developer || (Developer = {})); /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.FABRIC8_PROJECT_JSON = "fabric8ProjectJson"; function byId(thing) { return thing.id; } function createKey(namespace, id, kind) { return (namespace || "") + "-" + (kind || 'undefined').toLowerCase() + '-' + (id || 'undefined').replace(/\./g, '-'); } function populateKey(item) { var result = item; result['_key'] = createKey(Kubernetes.getNamespace(item), Kubernetes.getName(item), Kubernetes.getKind(item)); return result; } function populateKeys(items) { var result = []; angular.forEach(items, function (item) { result.push(populateKey(item)); }); return result; } function selectPods(pods, namespace, labels) { return pods.filter(function (pod) { return Kubernetes.getNamespace(pod) === namespace && Kubernetes.selectorMatches(labels, Kubernetes.getLabels(pod)); }); } /** * The object which keeps track of all the pods, replication controllers, services and their associations */ var KubernetesModelService = (function () { function KubernetesModelService() { this.kubernetes = null; this.apps = []; this.services = []; this.replicationcontrollers = []; this.filterReplicationcontrollers = []; this.pods = []; this.hosts = []; //public namespaces = []; this.routes = []; this.templates = []; this.redraw = false; this.resourceVersions = {}; // various views on the data this.podsByHost = {}; this.servicesByKey = {}; this.replicationControllersByKey = {}; this.podsByKey = {}; this.appInfos = []; this.appViews = []; this.appFolders = []; this.fetched = false; this.buildconfigs = []; this.events = []; this.workspaces = []; this.projects = []; this.project = null; } Object.defineProperty(KubernetesModelService.prototype, "replicationControllers", { /*public get filterReplicationcontrollers():Array { return this.filterReplicationcontrollers; } public set filterReplicationcontrollers(filterReplicationcontrollers:Array) { this.filterReplicationcontrollers = filterReplicationcontrollers; }*/ get: function () { return this.replicationcontrollers; }, set: function (replicationControllers) { this.replicationcontrollers = replicationControllers; }, enumerable: true, configurable: true }); Object.defineProperty(KubernetesModelService.prototype, "namespaces", { get: function () { return this.kubernetes.namespaces; }, enumerable: true, configurable: true }); Object.defineProperty(KubernetesModelService.prototype, "showRunButton", { get: function () { if (Kubernetes.isOpenShift) { return true; } return _.any(this.services, function (service) { var name = Kubernetes.getName(service); if (name === "templates") { var podCounters = service.$podCounters; return podCounters && (podCounters.valid || podCounters.ready); } else { return false; } }); }, enumerable: true, configurable: true }); Object.defineProperty(KubernetesModelService.prototype, "serviceApps", { get: function () { return _.filter(this.services, function (s) { return s.$host && s.$serviceUrl && s.$podCount; }); }, enumerable: true, configurable: true }); KubernetesModelService.prototype.$keepPolling = function () { return Kubernetes.keepPollingModel; }; KubernetesModelService.prototype.orRedraw = function (flag) { this.redraw = this.redraw || flag; }; KubernetesModelService.prototype.getService = function (namespace, id) { return this.servicesByKey[createKey(namespace, id, 'service')]; }; KubernetesModelService.prototype.getReplicationController = function (namespace, id) { return this.replicationControllersByKey[createKey(namespace, id, 'replicationController')]; }; KubernetesModelService.prototype.getPod = function (namespace, id) { return this.podsByKey[createKey(namespace, id, 'pod')]; }; KubernetesModelService.prototype.podsForNamespace = function (namespace) { if (namespace === void 0) { namespace = this.currentNamespace(); } return _.filter(this.pods, { namespace: namespace }); }; KubernetesModelService.prototype.getBuildConfig = function (name) { return _.find(this.buildconfigs, { $name: name }); }; KubernetesModelService.prototype.getProject = function (name, ns) { if (ns === void 0) { ns = this.currentNamespace(); } var buildConfig = this.project; if (!buildConfig) { var text = localStorage[Kubernetes.FABRIC8_PROJECT_JSON]; if (text) { try { buildConfig = angular.fromJson(text); } catch (e) { Kubernetes.log.warn("Could not parse json for " + Kubernetes.FABRIC8_PROJECT_JSON + ". Was: " + text + ". " + e, e); } } } if (buildConfig && ns != Kubernetes.getNamespace(buildConfig) && name != buildConfig.$name) { buildConfig = this.getBuildConfig(name); } return buildConfig; }; KubernetesModelService.prototype.setProject = function (buildConfig) { this.project = buildConfig; if (buildConfig) { // lets store in local storage var localStorage = Kubernetes.inject("localStorage"); if (localStorage) { localStorage[Kubernetes.FABRIC8_PROJECT_JSON] = angular.toJson(buildConfig); } } }; /** * Returns the current selected namespace or the default namespace */ KubernetesModelService.prototype.currentNamespace = function () { var answer = null; if (this.kubernetes) { answer = this.kubernetes.selectedNamespace; } return answer || Kubernetes.defaultNamespace; }; KubernetesModelService.prototype.updateIconUrlAndAppInfo = function (entity, nameField) { var answer = null; var id = Kubernetes.getName(entity); entity.$iconUrl = Core.pathGet(entity, ['metadata', 'annotations', 'fabric8.' + id + '/iconUrl']); entity.$info = Core.pathGet(entity, ['metadata', 'annotations', 'fabric8.' + id + '/summary']); if (entity.$iconUrl) { return; } if (id && nameField) { (this.templates || []).forEach(function (template) { var metadata = template.metadata; if (metadata) { var annotations = metadata.annotations || {}; var iconUrl = annotations["fabric8." + id + "/iconUrl"] || annotations["fabric8/iconUrl"]; if (iconUrl) { (template.objects || []).forEach(function (item) { var entityName = Kubernetes.getName(item); if (id === entityName) { entity.$iconUrl = iconUrl; } }); } } }); (this.appInfos || []).forEach(function (appInfo) { var iconPath = appInfo.iconPath; if (iconPath && !answer && iconPath !== "null") { var iconUrl = Kubernetes.gitPathToUrl(iconPath); var ids = Core.pathGet(appInfo, ["names", nameField]); angular.forEach(ids, function (appId) { if (appId === id) { entity.$iconUrl = iconUrl; entity.appPath = appInfo.appPath; entity.$info = appInfo; } }); } }); } if (!entity.$iconUrl) { entity.$iconUrl = Kubernetes.defaultIconUrl; } }; KubernetesModelService.prototype.maybeInit = function () { var _this = this; this.fetched = true; this.servicesByKey = {}; this.podsByKey = {}; this.replicationControllersByKey = {}; this.pods.forEach(function (pod) { if (!pod.kind) pod.kind = "Pod"; _this.podsByKey[pod._key] = pod; var host = Kubernetes.getHost(pod); pod.$labelsText = Kubernetes.labelsToString(Kubernetes.getLabels(pod)); if (host) { pod.$labelsText += Kubernetes.labelFilterTextSeparator + "host=" + host; } pod.$iconUrl = Kubernetes.defaultIconUrl; _this.discoverPodConnections(pod); pod.$containerPorts = []; var podStatus = pod.status || {}; var startTime = podStatus.startTime; pod.$startTime = null; if (startTime) { pod.$startTime = new Date(startTime); } var createdTime = Kubernetes.getCreationTimestamp(pod); pod.$createdTime = null; pod.$age = null; if (createdTime) { pod.$createdTime = new Date(createdTime); pod.$age = humandate.relativeTime(pod.$createdTime); } var ready = Kubernetes.isReady(pod); pod.$ready = ready; pod.$statusCss = Kubernetes.statusTextToCssClass(podStatus.phase, ready); var maxRestartCount = 0; angular.forEach(Core.pathGet(pod, ["status", "containerStatuses"]), function (status) { var restartCount = status.restartCount; if (restartCount) { if (restartCount > maxRestartCount) { maxRestartCount = restartCount; } } }); if (maxRestartCount) { pod.$restartCount = maxRestartCount; } var imageNames = ""; angular.forEach(Core.pathGet(pod, ["spec", "containers"]), function (container) { var image = container.image; if (image) { if (!imageNames) { imageNames = image; } else { imageNames = imageNames + " " + image; } var idx = image.lastIndexOf(":"); if (idx > 0) { image = image.substring(0, idx); } var paths = image.split("/", 3); if (paths.length) { var answer = null; if (paths.length == 3) { answer = paths[1] + "/" + paths[2]; } else if (paths.length == 2) { answer = paths[0] + "/" + paths[1]; } else { answer = paths[0] + "/" + paths[1]; } container.$imageLink = UrlHelpers.join("https://registry.hub.docker.com/u/", answer); } } angular.forEach(container.ports, function (port) { var containerPort = port.containerPort; if (containerPort) { pod.$containerPorts.push(containerPort); } }); }); pod.$imageNames = imageNames; var podStatus = podStatus; var podSpec = (pod.spec || {}); pod.$podIP = podStatus.podIP; pod.$host = podSpec.host || podSpec.nodeName || podStatus.hostIP; }); this.services.forEach(function (service) { if (!service.kind) service.kind = "Service"; _this.servicesByKey[service._key] = service; var selector = Kubernetes.getSelector(service); service.$pods = []; if (!service.$podCounters) { service.$podCounters = {}; } var podLinkUrl = UrlHelpers.join("/kubernetes/namespace", service.metadata.namespace, "pods"); _.assign(service.$podCounters, selector ? Kubernetes.createPodCounters(selector, _this.pods, service.$pods, Kubernetes.labelsToString(selector, ","), podLinkUrl) : {}); service.$podCount = service.$pods.length; var selectedPods = service.$pods; service.connectTo = selectedPods.map(function (pod) { return pod._key; }).join(','); service.$labelsText = Kubernetes.labelsToString(Kubernetes.getLabels(service)); _this.updateIconUrlAndAppInfo(service, "serviceNames"); var spec = service.spec || {}; service.$portalIP = spec.portalIP; service.$selectorText = Kubernetes.labelsToString(spec.selector); var ports = _.map(spec.ports || [], "port"); service.$ports = ports; service.$portsText = ports.join(", "); var iconUrl = service.$iconUrl; if (iconUrl && selectedPods) { selectedPods.forEach(function (pod) { pod.$iconUrl = iconUrl; }); } service.$serviceUrl = Kubernetes.serviceLinkUrl(service); }); this.replicationControllers.forEach(function (replicationController) { if (!replicationController.kind) replicationController.kind = "ReplicationController"; _this.replicationControllersByKey[replicationController._key] = replicationController; var selector = Kubernetes.getSelector(replicationController); replicationController.$pods = []; if (Kubernetes.isFilterRC(replicationController) && !Kubernetes.isInclude(_this.filterReplicationcontrollers, replicationController)) _this.filterReplicationcontrollers.push(replicationController); replicationController.$podCounters = selector ? Kubernetes.createPodCounters(selector, _this.pods, replicationController.$pods) : null; replicationController.$podCount = replicationController.$pods.length; replicationController.$replicas = (replicationController.spec || {}).replicas; replicationController.$oracleName = Kubernetes.getOracleName(replicationController); //console.log(getName(replicationController)); replicationController.$oracleStatus = Kubernetes.getOracleStatus(Kubernetes.getLabels(replicationController)); replicationController.$extractStatus = Kubernetes.getExtractStatus(Kubernetes.getLabels(replicationController)); // var annotation = Kubernetes.getAnnotations(replicationController); var label = Kubernetes.getLabels(replicationController); replicationController.$alias = annotation.cityName + "_" + annotation.districtName + "_" + annotation.systemName + "_" + annotation.year + "_" + label.version; var selectedPods = replicationController.$pods; replicationController.connectTo = selectedPods.map(function (pod) { return pod._key; }).join(','); //console.log(getLabels(replicationController)); replicationController.$labelsText = Kubernetes.labelsToString(Kubernetes.getLabels(replicationController)); replicationController.metadata.labels = Kubernetes.labelsFormat(replicationController); _this.updateIconUrlAndAppInfo(replicationController, "replicationControllerNames"); var iconUrl = replicationController.$iconUrl; if (iconUrl && selectedPods) { selectedPods.forEach(function (pod) { pod.$iconUrl = iconUrl; }); } }); // services may not map to an icon but their pods may do via the RC // so lets default it... this.services.forEach(function (service) { var iconUrl = service.$iconUrl; var selectedPods = service.$pods; if (selectedPods) { if (!iconUrl || iconUrl === Kubernetes.defaultIconUrl) { iconUrl = null; selectedPods.forEach(function (pod) { if (!iconUrl) { iconUrl = pod.$iconUrl; if (iconUrl) { service.$iconUrl = iconUrl; } } }); } } }); this.updateApps(); var podsByHost = {}; this.pods.forEach(function (pod) { var host = Kubernetes.getHost(pod); var podsForHost = podsByHost[host]; if (!podsForHost) { podsForHost = []; podsByHost[host] = podsForHost; } podsForHost.push(pod); }); this.podsByHost = podsByHost; var tmpHosts = []; for (var hostKey in podsByHost) { var hostPods = []; var podCounters = Kubernetes.createPodCounters(function (pod) { return Kubernetes.getHost(pod) === hostKey; }, this.pods, hostPods, "host=" + hostKey); var hostIP = null; if (hostPods.length) { var pod = hostPods[0]; var currentState = pod.status; if (currentState) { hostIP = currentState.hostIP; } } var hostDetails = { name: hostKey, id: hostKey, elementId: hostKey.replace(/\./g, '_'), hostIP: hostIP, pods: hostPods, kind: "Host", $podCounters: podCounters, $iconUrl: Kubernetes.hostIconUrl }; tmpHosts.push(hostDetails); } this.hosts = tmpHosts; Kubernetes.enrichBuildConfigs(this.buildconfigs); Kubernetes.enrichEvents(this.events, this); }; KubernetesModelService.prototype.updateApps = function () { var _this = this; try { // lets create the app views by trying to join controllers / services / pods that are related var appViews = []; this.replicationControllers.forEach(function (replicationController) { var name = Kubernetes.getName(replicationController); var $iconUrl = replicationController.$iconUrl; appViews.push({ appPath: "/dummyPath/" + name, $name: name, $info: { $iconUrl: $iconUrl }, $iconUrl: $iconUrl, replicationControllers: [replicationController], pods: replicationController.$pods || [], services: [] }); }); var noMatches = []; this.services.forEach(function (service) { // now lets see if we can find an app with an RC of the same selector var matchesApp = null; appViews.forEach(function (appView) { appView.replicationControllers.forEach(function (replicationController) { var repSelector = Kubernetes.getSelector(replicationController); if (repSelector && Kubernetes.selectorMatches(repSelector, Kubernetes.getSelector(service)) && Kubernetes.getNamespace(service) === Kubernetes.getNamespace(replicationController)) { matchesApp = appView; } }); }); if (matchesApp) { matchesApp.services.push(service); } else { noMatches.push(service); } }); Kubernetes.log.debug("no matches: ", noMatches); noMatches.forEach(function (service) { var appView = _.find(appViews, function (appView) { return _.any(appView.replicationControllers, function (rc) { return _.startsWith(Kubernetes.getName(rc), Kubernetes.getName(service)); }); }); if (appView) { appView.services.push(service); } else { var $iconUrl = service.$iconUrl; appViews.push({ appPath: "/dummyPath/" + name, $name: name, $info: { $iconUrl: $iconUrl }, $iconUrl: $iconUrl, replicationControllers: [], pods: service.$pods || [], services: [service] }); } }); angular.forEach(this.routes, function (route) { var metadata = route.metadata || {}; var spec = route.spec || {}; var serviceName = Core.pathGet(spec, ["to", "name"]); var host = spec.host; var namespace = Kubernetes.getNamespace(route); if (serviceName && host) { var service = _this.getService(namespace, serviceName); if (service) { service.$host = host; // TODO we could use some annotations / metadata to deduce what URL we should use to open this // service in the console. For now just assume its http: if (host) { var hostUrl = host; if (hostUrl.indexOf("://") < 0) { hostUrl = "http://" + host; } service.$connectUrl = UrlHelpers.join(hostUrl, "/"); } // TODO definitely need that annotation, temp hack for apiman link if (Kubernetes.getName(service) === 'apiman' && host) { service.$connectUrl = new URI().host(service.$host) .path('apimanui/index.html') .query({}) .hash(URI.encode(angular.toJson({ backTo: new URI().toString(), token: HawtioOAuth.getOAuthToken() }))).toString(); } } else { Kubernetes.log.debug("Could not find service " + serviceName + " namespace " + namespace + " for route: " + metadata.name); } } }); appViews = _.sortBy(populateKeys(appViews), function (appView) { return appView._key; }); ArrayHelpers.sync(this.appViews, appViews, '$name'); if (this.appInfos && this.appViews) { var folderMap = {}; var folders = []; var appMap = {}; angular.forEach(this.appInfos, function (appInfo) { if (!appInfo.$iconUrl && appInfo.iconPath && appInfo.iconPath !== "null") { appInfo.$iconUrl = Kubernetes.gitPathToUrl(appInfo.iconPath); } var appPath = appInfo.appPath; if (appPath) { appMap[appPath] = appInfo; var idx = appPath.lastIndexOf("/"); var folderPath = ""; if (idx >= 0) { folderPath = appPath.substring(0, idx); } folderPath = Core.trimLeading(folderPath, "/"); var folder = folderMap[folderPath]; if (!folder) { folder = { path: folderPath, expanded: true, apps: [] }; folders.push(folder); folderMap[folderPath] = folder; } folder.apps.push(appInfo); } }); this.appFolders = _.sortBy(folders, "path"); var apps = []; var defaultInfo = { $iconUrl: Kubernetes.defaultIconUrl }; angular.forEach(this.appViews, function (appView) { try { var appPath = appView.appPath; /* TODO appView.$select = () => { Kubernetes.setJson($scope, appView.id, $scope.model.apps); }; */ var appInfo = angular.copy(defaultInfo); if (appPath) { appInfo = appMap[appPath] || appInfo; } if (!appView.$info) { appView.$info = defaultInfo; appView.$info = appInfo; } appView.id = appPath; if (!appView.$name) { appView.$name = appInfo.name || appView.$name; } if (!appView.$iconUrl) { appView.$iconUrl = appInfo.$iconUrl; } apps.push(appView); appView.$podCounters = Kubernetes.createAppViewPodCounters(appView); appView.$podCount = (appView.pods || []).length; appView.$replicationControllersText = (appView.replicationControllers || []).map(function (i) { return i["_key"]; }).join(" "); appView.$servicesText = (appView.services || []).map(function (i) { return i["_key"]; }).join(" "); appView.$serviceViews = Kubernetes.createAppViewServiceViews(appView); } catch (e) { Kubernetes.log.warn("Failed to update appViews: " + e); } }); //this.apps = apps; this.apps = this.appViews; } } catch (e) { Kubernetes.log.warn("Caught error: " + e); } }; KubernetesModelService.prototype.discoverPodConnections = function (entity) { var info = Core.pathGet(entity, ["status", "info"]); var hostPort = null; var currentState = entity.status || {}; var desiredState = entity.spec || {}; var podId = Kubernetes.getName(entity); var host = currentState["hostIP"]; var podIP = currentState["podIP"]; var hasDocker = false; var foundContainerPort = null; if (desiredState) { var containers = desiredState.containers; angular.forEach(containers, function (container) { if (!hostPort) { var ports = container.ports; angular.forEach(ports, function (port) { if (!hostPort) { var containerPort = port.containerPort; var portName = port.name; var containerHostPort = port.hostPort; if (containerPort === 8778 || "jolokia" === portName) { if (containerPort) { if (podIP) { foundContainerPort = containerPort; } if (containerHostPort) { hostPort = containerHostPort; } } } } }); } }); } if (foundContainerPort && podId && Kubernetes.isRunning(currentState)) { if (!Kubernetes.isOpenShift) { // TODO temp workaround for k8s on GKE https://github.com/kubernetes/kubernetes/issues/17172 entity.$jolokiaUrl = UrlHelpers.join(Kubernetes.masterApiUrl(), "api", Kubernetes.defaultApiVersion, "proxy", "namespaces", entity.metadata.namespace, "pods", //"https:" + podId + ":" + foundContainerPort, podId + ":" + foundContainerPort, "jolokia/"); } else { entity.$jolokiaUrl = UrlHelpers.join(Kubernetes.masterApiUrl(), "api", Kubernetes.defaultApiVersion, "namespaces", entity.metadata.namespace, "pods", "https:" + podId + ":" + foundContainerPort, "proxy/jolokia/"); } } }; return KubernetesModelService; }()); Kubernetes.KubernetesModelService = KubernetesModelService; function getTemplateService(model) { var key = createKey('default', 'templates', 'service'); var answer = model.servicesByKey[key]; Kubernetes.log.debug("found template service: ", answer); return answer; } /** * Creates a model service which keeps track of all the pods, replication controllers and services along * with their associations and status */ Kubernetes._module.factory('KubernetesModel', ['$rootScope', '$http', 'KubernetesApiURL', 'KubernetesState', 'WatcherService', '$location', '$resource', function ($rootScope, $http, AppLibraryURL, KubernetesState, watcher, $location, $resource) { var $scope = new KubernetesModelService(); $scope.kubernetes = KubernetesState; // create all of our resource classes var typeNames = watcher.getTypes(); _.forEach(typeNames, function (type) { var urlTemplate = Kubernetes.uriTemplateForKubernetesKind(type); $scope[type + 'Resource'] = Kubernetes.createResource(type, urlTemplate, $resource, $scope); }); if (!Kubernetes.isOpenShift) { // register custom URL factories for templates/projects watcher.registerCustomUrlFunction(KubernetesAPI.WatchTypes.BUILD_CONFIGS, function (options) { var templateService = getTemplateService($scope); if (templateService) { return UrlHelpers.join(templateService.proxyUrl, '/oapi/v1/namespaces/default/buildconfigs/'); } return null; }); // register custom URL factories for templates/projects watcher.registerCustomUrlFunction(KubernetesAPI.WatchTypes.TEMPLATES, function (options) { var templateService = getTemplateService($scope); if (templateService) { return UrlHelpers.join(templateService.proxyUrl, '/oapi/v1/namespaces/default/templates/'); } return null; }); } // register for all updates on objects watcher.registerListener(function (objects) { var types = watcher.getTypes(); _.forEach(types, function (type) { switch (type) { case Kubernetes.WatchTypes.SERVICES: var items = populateKeys(objects[type]); angular.forEach(items, function (item) { item.proxyUrl = Kubernetes.kubernetesProxyUrlForService(Kubernetes.kubernetesApiUrl(), item); }); $scope[type] = items; break; case Kubernetes.WatchTypes.TEMPLATES: case Kubernetes.WatchTypes.ROUTES: case Kubernetes.WatchTypes.BUILDS: case Kubernetes.WatchTypes.BUILD_CONFIGS: case Kubernetes.WatchTypes.IMAGE_STREAMS: // don't put a break here :-) default: $scope[type] = populateKeys(objects[type]); } Kubernetes.log.debug("Type: ", type, " object: ", $scope[type]); }); $scope.maybeInit(); $rootScope.$broadcast('kubernetesModelUpdated', $scope); Core.$apply($rootScope); }); // set the selected namespace if set in the location bar // otherwise use whatever previously selected namespace is // available var search = $location.search(); if ('namespace' in search) { watcher.setNamespace(search['namespace']); } function selectPods(pods, namespace, labels) { return pods.filter(function (pod) { return Kubernetes.getNamespace(pod) === namespace && Kubernetes.selectorMatches(labels, Kubernetes.getLabels(pod)); }); } return $scope; }]); })(Kubernetes || (Kubernetes = {})); /// /// /// /// /// /// /// /// var Developer; (function (Developer) { function clickApprove(element, url) { var $scope = angular.element(element).scope(); if ($scope) { $scope.approve(url, element.text); } } Developer.clickApprove = clickApprove; Developer.JenkinsLogController = Developer._module.controller("Developer.JenkinsLogController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "$modal", "KubernetesApiURL", "ServiceRegistry", "$element", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, $modal, KubernetesApiURL, ServiceRegistry, $element) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.selectedBuild = $scope.$eval('build') || $scope.$eval('selectedBuild'); $scope.id = $scope.$eval('build.id') || $routeParams["id"]; $scope.schema = KubernetesSchema; $scope.entityChangedCache = {}; $element.on('$destroy', function () { $scope.$destroy(); }); $scope.log = { html: "", start: 0, firstIdx: null }; $scope.$on('kubernetesModelUpdated', function () { updateJenkinsLink(); Core.$apply($scope); }); $scope.$on('jenkinsSelectedBuild', function (event, build) { Developer.log.info("==== jenkins build selected! " + build.id + " " + build.$jobId); $scope.selectedBuild = build; }); $scope.$watch('selectedBuild', function (selectedBuild) { Developer.log.info("Selected build updated: ", selectedBuild); $scope.fetch(); }); Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createJenkinsBreadcrumbs($scope.id, getJobId(), getBuildId()); $scope.subTabConfig = Developer.createJenkinsSubNavBars($scope.id, getJobId(), getBuildId(), { label: "Log", title: "Views the logs of this build" }); function getJobId() { // lets allow the parent scope to be used too for when this is used as a panel return $routeParams["job"] || ($scope.selectedBuild || {}).$jobId; } $scope.getJobId = getJobId; function getBuildId() { // lets allow the parent scope to be used too for when this is used as a panel return $routeParams["build"] || ($scope.selectedBuild || {}).id; } $scope.getBuildId = getBuildId; function updateJenkinsLink() { var jenkinsUrl = Developer.jenkinsLink(); if (jenkinsUrl) { $scope.$viewJenkinsBuildLink = UrlHelpers.join(jenkinsUrl, "job", getJobId(), getBuildId()); $scope.$viewJenkinsLogLink = UrlHelpers.join($scope.$viewJenkinsBuildLink, "console"); } } var querySize = 50000; $scope.approve = function (url, operation) { var modal = $modal.open({ templateUrl: UrlHelpers.join(Developer.templatePath, 'jenkinsApproveModal.html'), controller: ['$scope', '$modalInstance', function ($scope, $modalInstance) { $scope.operation = operation; $scope.header = operation + "?"; $scope.ok = function () { modal.close(); postToJenkins(url, operation); }; $scope.cancel = function () { modal.dismiss(); }; }] }); }; function postToJenkins(uri, operation) { var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, uri); if (url) { var body = null; var config = { headers: {} }; Developer.log.info("posting to jenkinsUrl: " + url); $http.post(url, body, config). success(function (data, status, headers, config) { Developer.log.info("Managed to " + operation + " at " + url); }). error(function (data, status, headers, config) { Developer.log.warn("Failed " + operation + " job at " + url + " " + data + " " + status); }); } else { Developer.log.warn("Cannot post to jenkins URI: " + uri + " as no jenkins found!"); } } $scope.$keepPolling = function () { return Kubernetes.keepPollingModel; }; $scope.fetch = PollHelpers.setupPolling($scope, function (next) { if ($scope.$eval('hideLogs && !build.building')) { Developer.log.debug("Log hidden, not fetching logs"); return; } else { Developer.log.debug("Fetching logs for build: ", $scope.$eval('build')); } var buildId = getBuildId(); var jobId = getJobId(); //log.info("=== jenkins log querying job " + jobId + " build " + buildId + " selected build " + $scope.selectedBuild); if (jobId && buildId) { if ($scope.buildId !== buildId || $scope.jobId !== jobId) { // lets clear the query $scope.log = { html: "", start: 0, firstIdx: null }; } $scope.buildId = buildId; $scope.jobId = jobId; var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, UrlHelpers.join("job", jobId, buildId, "fabric8/logHtml?tail=1&start=" + $scope.log.start + "&size=" + querySize)); if ($scope.log.firstIdx !== null) { url += "&first=" + $scope.log.firstIdx; } if (url && (!$scope.log.fetched || Kubernetes.keepPollingModel)) { $http.get(url). success(function (data, status, headers, config) { if (data) { var replaceClusterIPsInHtml = replaceClusterIpFunction(); if (!$scope.log.logs) { $scope.log.logs = []; } var lines = data.lines; var returnedLength = data.returnedLength; var logLength = data.logLength; var returnedStart = data.start; var earlierLog = false; if (angular.isDefined(returnedStart)) { earlierLog = returnedStart < $scope.log.start; } var lineSplit = data.lineSplit; // log.info("start was: " + $scope.log.start + " first: " + $scope.log.firstIdx + " => returnedLength: " + returnedLength + " logLength: " + logLength + " returnedStart: " + returnedStart + " earlierLog: " + earlierLog + " lineSplit: " + lineSplit); if (lines) { var currentLogs = $scope.log.logs; // lets re-join split lines if (lineSplit && currentLogs.length) { var lastIndex; var restOfLine; if (earlierLog) { lastIndex = 0; restOfLine = lines.pop(); if (restOfLine) { currentLogs[lastIndex] = replaceClusterIPsInHtml(restOfLine + currentLogs[lastIndex]); } } else { lastIndex = currentLogs.length - 1; restOfLine = lines.shift(); if (restOfLine) { currentLogs[lastIndex] = replaceClusterIPsInHtml(currentLogs[lastIndex] + restOfLine); } } } for (var i = 0; i < lines.length; i++) { lines[i] = replaceClusterIPsInHtml(lines[i]); } if (earlierLog) { $scope.log.logs = lines.concat(currentLogs); } else { $scope.log.logs = currentLogs.concat(lines); } } var moveForward = true; if (angular.isDefined(returnedStart)) { if (returnedStart > $scope.log.start && $scope.log.start === 0) { // we've jumped to the end of the file to read the tail of it $scope.log.start = returnedStart; $scope.log.firstIdx = returnedStart; } else if ($scope.log.firstIdx === null) { // lets remember where the first request started $scope.log.firstIdx = returnedStart; } else if (returnedStart < $scope.log.firstIdx) { // we've got an earlier bit of the log // after starting at the tail // so lets move firstIdx backwards and leave start as it is (at the end of the file) $scope.log.firstIdx = returnedStart; moveForward = false; } } if (moveForward && returnedLength && !earlierLog) { $scope.log.start += returnedLength; if (logLength && $scope.log.start > logLength) { $scope.log.start = logLength; } } updateJenkinsLink(); } $scope.log.fetched = true; // Core.$apply($scope); next(); }). error(function (data, status, headers, config) { Developer.log.warn("Failed to load " + url + " " + data + " " + status); next(); }); } } else { $scope.log.fetched = true; Core.$apply($scope); next(); } }); if (angular.isFunction($scope.fetch)) { $scope.fetch(); } function replaceClusterIpFunction() { function createReplaceFunction(from, to) { return function (text) { return replaceText(text, from, to); }; } var replacements = []; angular.forEach($scope.model.services, function (service) { var $portalIP = service.$portalIP; var $serviceUrl = service.$serviceUrl; var $portsText = service.$portsText; if ($portalIP && $serviceUrl) { var idx = $serviceUrl.indexOf("://"); if (idx > 0) { var replaceWith = $serviceUrl.substring(idx, $serviceUrl.length); if (!replaceWith.endsWith("/")) { replaceWith += "/"; } if (replaceWith.length > 4) { replacements.push(createReplaceFunction("://" + $portalIP + "/", replaceWith)); if ($portsText) { var suffix = ":" + $portsText; var serviceWithPort = replaceWith.substring(0, replaceWith.length - 1); if (!serviceWithPort.endsWith(suffix)) { serviceWithPort += suffix; } serviceWithPort += "/"; replacements.push(createReplaceFunction("://" + $portalIP + ":" + $portsText + "/", serviceWithPort)); } } } } }); function addReplaceFn(from, to) { replacements.push(function (text) { return replaceText(text, from, to); }); } addReplaceFn("[INFO]", "[INFO]"); addReplaceFn("[WARN]", "[WARN]"); addReplaceFn("[WARNING]", "[WARNING]"); addReplaceFn("[ERROR]", "[ERROR]"); addReplaceFn("FAILURE", "FAILURE"); addReplaceFn("SUCCESS", "SUCCESS"); // lets try convert the Proceed / Abort links replacements.push(function (text) { var prefix = "= 0) { idx = text.indexOf(prefix, idx); if (idx >= 0) { var start = idx + prefix.length; var endQuote = text.indexOf("'", start + 1); if (endQuote <= 0) { break; } var endDoubleQuote = text.indexOf('"', endQuote + 1); if (endDoubleQuote <= 0) { break; } var url = text.substring(start, endQuote); // TODO using $compile is a tad complex, for now lets cheat with a little onclick ;) //text = text.substring(0, idx) + " '" + to + "'"); var idx = 0; while (true) { idx = text.indexOf(from, idx); if (idx >= 0) { text = text.substring(0, idx) + to + text.substring(idx + from.length); idx += to.length; } else { break; } } } return text; } }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.JenkinsMetricsController = Developer.controller("JenkinsMetricsController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "ServiceRegistry", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, ServiceRegistry) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.jobId = $routeParams["job"]; $scope.schema = KubernetesSchema; $scope.jenkins = null; $scope.entityChangedCache = {}; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, $scope.jobId); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.options = { chart: { type: 'discreteBarChart', autorefresh: false, height: 450, margin: { top: 20, right: 20, bottom: 60, left: 45 }, clipEdge: true, staggerLabels: false, transitionDuration: 500, stacked: false, interactive: true, tooltip: { enabled: true, contentGenerator: function (args) { var data = args.data || {}; return data.tooltip; }, }, color: function (d, i) { return d.color; }, xAxis: { axisLabel: 'Builds', showMaxMin: false, tickFormat: function (d) { return "#" + d; } }, yAxis: { axisLabel: 'Build Duration (seconds)', tickFormat: function (d) { return d3.format(',.1f')(d); } } } }; $scope.data = []; updateData(); function barColourForBuildResult(result) { if (result) { if (result === "FAILURE" || result === "FAILED") { return "red"; } else if (result === "ABORTED" || result === "INTERUPTED") { return "tan"; } else if (result === "SUCCESS") { return "green"; } else if (result === "NOT_STARTED") { return "lightgrey"; } } return "darkgrey"; } function updateChartData() { var useSingleSet = true; var buildsSucceeded = []; var buildsFailed = []; var successBuildKey = "Succeeded builds"; var failedBuildKey = "Failed builds"; if (useSingleSet) { successBuildKey = "Builds"; } var count = 0; var builds = _.sortBy($scope.metrics.builds || [], "number"); angular.forEach(builds, function (build) { var x = build.number; var y = build.duration / 1000; var date = Developer.asDate(build.timeInMillis); var result = build.result || "NOT_STARTED"; var color = barColourForBuildResult(result); var iconClass = Developer.createBuildStatusIconClass(result); var tooltip = '

' + build.displayName + '

' + '

duration: ' + y + ' seconds

'; if (date) { tooltip += '

started: ' + date + '

'; } if (result) { tooltip += '

result: ' + result + '

'; } if (x) { var data = buildsSucceeded; var key = successBuildKey; if (!successBuildKey && (!result || !result.startsWith("SUCC"))) { data = buildsFailed; key = failedBuildKey; } data.push({ tooltip: tooltip, color: color, x: x, y: y }); } }); $scope.data = []; if (buildsSucceeded.length) { $scope.data.push({ key: successBuildKey, values: buildsSucceeded }); } if (buildsFailed.length) { $scope.data.push({ key: failedBuildKey, values: buildsFailed }); } $scope.api.updateWithData($scope.data); $timeout(function () { $scope.api.update(); }, 50); } function updateData() { var metricsPath = $scope.jobId ? UrlHelpers.join("job", $scope.jobId, "fabric8/metrics") : "fabric8/metrics"; var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, metricsPath); Developer.log.info(""); if (url && (!$scope.jenkins || Kubernetes.keepPollingModel)) { $http.get(url, Developer.jenkinsHttpConfig). success(function (data, status, headers, config) { if (data) { if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { Developer.log.info("entity has changed!"); $scope.metrics = data; updateChartData(); } } $scope.model.fetched = true; Core.$apply($scope); }). error(function (data, status, headers, config) { Developer.log.warn("Failed to load " + url + " " + data + " " + status); }); } } }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.NavBarController = Developer.controller("NavBarController", ["$scope", "$location", "$routeParams", "$timeout", "KubernetesApiURL", function ($scope, $location, $routeParams, $timeout) { $scope.isValid = function (item) { if (item) { var value = item.isValid; if (angular.isFunction(value)) { return value(item); } else { return angular.isUndefined(value) || value; } } return false; }; }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.PipelineController = Developer.controller("PipelineController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "ServiceRegistry", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, ServiceRegistry) { $scope.kubernetes = KubernetesState; $scope.kubeModel = KubernetesModel; $scope.id = $routeParams["id"]; $scope.jobId = $routeParams["job"]; $scope.buildId = $routeParams["build"]; $scope.schema = KubernetesSchema; $scope.entityChangedCache = {}; $scope.model = { stages: null }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, $scope.jobId); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); updateData(); function updateData() { if ($scope.jobId) { var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, UrlHelpers.join("job", $scope.jobId, $scope.buildId, "fabric8/stages/")); if (url && (!$scope.model.stages || Kubernetes.keepPollingModel)) { $http.get(url). success(function (data, status, headers, config) { if (data) { Developer.enrichJenkinsStages(data, $scope.id, $scope.jobId); if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { Developer.log.info("entity has changed!"); $scope.build = data; $scope.model.stages = data.stages; } } $scope.model.fetched = true; Core.$apply($scope); }). error(function (data, status, headers, config) { Developer.log.warn("Failed to load " + url + " " + data + " " + status); $scope.model.fetched = true; }); } } else { $scope.model.fetched = true; Core.$apply($scope); } } }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer._module.directive("pipelineView", function () { return { templateUrl: Developer.templatePath + 'pipelineView.html' }; }); })(Developer || (Developer = {})); /// /// /// /// /// /// var Developer; (function (Developer) { Developer.PipelinesController = Developer._module.controller("Developer.PipelinesController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "ServiceRegistry", "$element", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, ServiceRegistry, $element) { $scope.kubernetes = KubernetesState; $scope.kubeModel = KubernetesModel; $scope.id = $routeParams["id"]; $scope.jobId = $scope.jobId || $routeParams["job"]; $scope.schema = KubernetesSchema; $scope.entityChangedCache = {}; $element.on('$destroy', function () { $scope.$destroy(); }); $scope.model = { job: null, pendingOnly: $scope.pendingPipelinesOnly }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, $scope.jobId); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.$watch('model.pendingOnly', function ($event) { updateData(); }); $scope.selectBuild = function (build) { var id = build.id; if (id) { if (id !== $scope.selectedBuildId) { $scope.selectedBuildId = id; $scope.$broadcast("jenkinsSelectedBuild", build); } } }; var updateData = _.debounce(function () { var entity = $scope.entity; if ($scope.jobId) { if ((!entity || entity.$jenkinsJob)) { var queryPath = "fabric8/stages/"; if ($scope.model.pendingOnly) { queryPath = "fabric8/pendingStages/"; } var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, UrlHelpers.join("job", $scope.jobId, queryPath)); if (url && (!$scope.model.job || Kubernetes.keepPollingModel)) { $http.get(url). success(function (data, status, headers, config) { if (data) { Developer.enrichJenkinsPipelineJob(data, $scope.id, $scope.jobId); if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { Developer.log.info("entity has changed!"); $scope.model.job = data; var builds = data.builds; if (builds && builds.length) { $scope.selectBuild(builds[0]); } } } $scope.model.fetched = true; Core.$apply($scope); }). error(function (data, status, headers, config) { Developer.log.warn("Failed to load " + url + " " + data + " " + status); $scope.model.fetched = true; }); } } else { if ($scope.model) { Kubernetes.enrichBuilds($scope.kubeModel.builds); var builds = []; angular.forEach($scope.kubeModel.builds, function (build) { var labels = Kubernetes.getLabels(build); var app = labels["app"]; if (app === $scope.projectId) { builds.push(build); } }); builds = _.sortBy(builds, "$creationDate").reverse(); var allBuilds = builds; if (allBuilds.length > 1) { builds = _.filter(allBuilds, function (b) { return !b.$creationDate; }); if (!builds.length) { builds = [allBuilds[0]]; } } var pipelines = []; angular.forEach(builds, function (build) { var buildStatus = build.status || {}; var result = buildStatus.phase || ""; var resultUpperCase = result.toUpperCase(); var description = ""; var $viewLink = build.$viewLink; var $logLink = build.$logsLink; var $timestamp = build.$creationDate; var duration = buildStatus.duration; if (duration) { // 17s = 17,000,000,000 on openshift duration = duration / 1000000; } var displayName = Kubernetes.getName(build); var $iconClass = Developer.createBuildStatusIconClass(resultUpperCase); var $backgroundClass = Developer.createBuildStatusBackgroundClass(resultUpperCase); var stage = { stageName: "OpenShift Build", $viewLink: $viewLink, $logLink: $logLink, $startTime: $timestamp, duration: duration, status: result, $iconClass: $iconClass, $backgroundClass: $backgroundClass }; var pipeline = { description: description, displayName: displayName, $viewLink: $viewLink, $logLink: $logLink, $timestamp: $timestamp, duration: duration, stages: [stage] }; pipelines.push(pipeline); }); // lets filter the OpenShift builds and make a pipeline from that $scope.model.job = { $jobId: $scope.jobId, $project: $scope.projectId, builds: pipelines }; } $scope.model.fetched = true; Core.$apply($scope); } } else { $scope.model.fetched = true; Core.$apply($scope); } }, 50); updateData(); }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.ProjectController = Developer.controller("ProjectController", ["$scope", "$element", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, $element, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.schema = KubernetesSchema; $scope.config = KubernetesSchema.definitions.os_build_BuildConfig; $scope.entityChangedCache = {}; $scope.envVersionsCache = {}; $scope.envNSCaches = {}; $scope.envVersions = {}; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = []; //Developer.createProjectBreadcrumbs($scope.id); updateTabs(); // this is used for the pendingPipelines view $scope.jobId = $scope.id; $scope.pendingPipelinesOnly = true; $scope.$on('jenkinsSelectedBuild', function (event, build) { $scope.selectedBuild = build; }); // TODO this should be unnecessary but seems sometiems this watch doesn't always trigger unless you hit reload on this page if ($scope.model.buildconfigs) { onBuildConfigs($scope.model.buildconfigs); } Kubernetes.watch($scope, $element, "buildconfigs", $scope.namespace, onBuildConfigs); function onBuildConfigs(buildConfigs) { angular.forEach(buildConfigs, function (data) { var name = Kubernetes.getName(data); if (name === $scope.id) { var sortedBuilds = null; Kubernetes.enrichBuildConfig(data, sortedBuilds); if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { Developer.log.info("entity has changed!"); $scope.entity = data; $scope.entity.$build = (data.$fabric8CodeViews || {})['fabric8.link.browseGogs.view']; $scope.model.setProject($scope.entity); } updateEnvironmentWatch(); updateTabs(); } }); $scope.model.fetched = true; Core.$apply($scope); } /** * We have updated the entity so lets make sure we are watching all the environments to find * the project versions for each namespace */ function updateEnvironmentWatch() { var project = $scope.entity; if (project) { var jenkinsJob = project.$jenkinsJob; if (jenkinsJob) { var buildsTab = _.find($scope.subTabConfig, { id: "builds" }); if (buildsTab) { buildsTab["href"] = UrlHelpers.join("/workspaces", Kubernetes.currentKubernetesNamespace(), "projects", $scope.id, "jenkinsJob", jenkinsJob); } } angular.forEach(project.environments, function (env) { var ns = env.namespace; var caches = $scope.envNSCaches[ns]; if (!caches) { caches = {}; $scope.envNSCaches[ns] = caches; Developer.loadProjectVersions($scope, $element, project, env, ns, $scope.envVersions, caches); } }); } } function updateTabs() { $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, null, $scope); } }]); })(Developer || (Developer = {})); /// var Developer; (function (Developer) { Developer._module.controller('Developer.ProjectSelector', ['$scope', '$routeParams', 'KubernetesModel', function ($scope, $routeParams, KubernetesModel) { var projectId = $routeParams['projectId'] || $routeParams['project'] || $routeParams['id']; if (projectId) { $scope.projectId = projectId; $scope.model = KubernetesModel; $scope.$watch('model.buildconfigs', function (buildconfigs) { $scope.projects = buildconfigs; }); } else { Developer.log.info("no project ID in routeParams: ", $routeParams); } }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.ProjectsController = Developer.controller("ProjectsController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.tableConfig = { data: 'model.buildconfigs', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: '$name', displayName: 'Name', cellTemplate: $templateCache.get("idTemplate.html") }, /* { field: 'spec.source.type', displayName: 'Source' }, */ { field: 'spec.source.git.uri', displayName: 'Repository' }, /* { field: 'spec.strategy.type', displayName: 'Strategy' }, { field: 'spec.strategy.stiStrategy.image', displayName: 'Source Image' }, { field: 'spec.output.imageTag', displayName: 'Output Image' }, */ { field: 'metadata.description', displayName: 'Description' }, { field: '$creationDate', displayName: 'Created', cellTemplate: $templateCache.get("creationTimeTemplate.html") }, { field: '$labelsText', displayName: 'Labels', cellTemplate: $templateCache.get("labelTemplate.html") } ] }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs(); $scope.subTabConfig = Developer.createWorkspaceSubNavBars(); // TODO //$scope.isLoggedIntoGogs = Forge.isLoggedIntoGogs; $scope.deletePrompt = function (selected) { UI.multiItemConfirmActionDialog({ collection: selected, index: '$name', onClose: function (result) { if (result) { function deleteSelected(selected, next) { if (next) { deleteEntity(next, function () { deleteSelected(selected, selected.shift()); }); } else { } } deleteSelected(selected, selected.shift()); } }, title: 'Delete Apps', action: 'The following Apps will be deleted:', okText: 'Delete', okClass: 'btn-danger', custom: "This operation is permanent once completed!", customClass: "alert alert-warning" }).open(); }; function deleteEntity(selection, nextCallback) { var name = (selection || {}).$name; var jenkinsJob = selection.$jenkinsJob; var publicJenkinsUrl = Developer.jenkinsLink(); //var jenkinsUrl = Core.pathGet(selection, ["$fabric8Views", "fabric8.link.jenkins.job", "url"]); if (name) { console.log("About to delete build config: " + name); var url = Kubernetes.buildConfigRestUrl(name); $http.delete(url). success(function (data, status, headers, config) { nextCallback(); }). error(function (data, status, headers, config) { Developer.log.warn("Failed to delete build config on " + url + " " + data + " " + status); nextCallback(); }); } else { console.log("warning: no name for selection: " + angular.toJson(selection)); } if (jenkinsJob && publicJenkinsUrl) { var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, UrlHelpers.join("job", jenkinsJob, "doDelete")); var body = ""; var config = { headers: { 'Content-Type': "text/plain" } }; Developer.log.info("posting to jenkinsUrl: " + url); $http.post(url, body, config). success(function (data, status, headers, config) { Developer.log.info("Managed to delete " + url); }). error(function (data, status, headers, config) { Developer.log.warn("Failed to delete jenkins job at " + url + " " + data + " " + status); }); } } /* $scope.$keepPolling = () => Kubernetes.keepPollingModel; $scope.fetch = PollHelpers.setupPolling($scope, (next:() => void) => { var url = Kubernetes.buildConfigsRestURL(); $http.get(url). success(function (data, status, headers, config) { if (data) { //console.log("got data " + angular.toJson(data, true)); var sortedBuilds = null; $scope.buildConfigs = Kubernetes.enrichBuildConfigs(data.items, sortedBuilds); $scope.model.fetched = true; Core.$apply($scope); next(); } }). error(function (data, status, headers, config) { log.warn("Failed to load " + url + " " + data + " " + status); next(); }); }); $scope.fetch(); */ }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.WorkspaceController = Developer.controller("WorkspaceController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["namespace"]; $scope.schema = KubernetesSchema; $scope.config = KubernetesSchema.definitions.kubernetes_Namespace; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createWorkspaceBreadcrumbs(); $scope.subTabConfig = Developer.createWorkspaceSubNavBars(); $scope.$keepPolling = function () { return Kubernetes.keepPollingModel; }; $scope.fetch = PollHelpers.setupPolling($scope, function (next) { $scope.item = null; if ($scope.id) { var url = UrlHelpers.join(Kubernetes.resourcesUriForKind("Projects"), $scope.id); Developer.log.info("Loading url: " + url); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.entity = Developer.enrichWorkspace(data); } $scope.model.fetched = true; Core.$apply($scope); next(); }). error(function (data, status, headers, config) { Developer.log.warn("Failed to load " + url + " " + data + " " + status); next(); }); } else { $scope.model.fetched = true; Core.$apply($scope); next(); } }); $scope.fetch(); }]); })(Developer || (Developer = {})); /// /// /// /// /// /// /// /// /// /// var Developer; (function (Developer) { Developer.WorkspacesController = Developer.controller("WorkspacesController", ["$scope", "KubernetesModel", "DataModel", "ConfigsModel", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "$element", "ngDialog", function ($scope, KubernetesModel, DataModel, ConfigsModel, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, $element, ngDialog) { $scope.model = DataModel; $scope.replicasModel = KubernetesModel; $scope.options = DataModel.paramOptions; $scope.pageSizeChoses = DataModel.paramOptions.pagerSizeOption; var result = getDataType($location); $scope.treeOptions = { nodeChildren: "childNodes", dirSelectable: true, injectClasses: { ul: "a1", li: "a2", liSelected: "a7", iExpanded: "a3", iCollapsed: "a4", iLeaf: "a5", label: "a6", labelSelected: "a8" } }; //配置数据表格需要显示的内容及显示格式 $scope.tableConfig = { data: 'model.data', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: "_key", displayName: '编码' }, { field: "name", displayName: '市-区/县', customSortField: function (field) { return field.regionalismCode; } }, { field: "systemName", displayName: '系统名称', customSortField: function (field) { return field.systemCode; } }, { field: "dataBaseType", displayName: '数据库类型', }, { field: "labels", displayName: '数据标签', cellTemplate: $templateCache.get("dataLabelsTemplate.html") }, { field: "year", displayName: '年度', }, { field: "collectingTime", displayName: '采集时间' }, { field: "extractStatus", displayName: '汇总状态', cellTemplate: $templateCache.get("dataExtractTemplate.html") } ], sortInfo: { sortBy: "_key", ascending: true } }; init($scope, $location, $routeParams); $scope.model.paramOptions.dataType = result["dataType"]; $scope.model.paramOptions.volumeType = result["volumeType"]; $scope.$on("dataLabelFilterUpdate", function ($event, text, key) { $scope.keyQuery += " " + text; }); $scope.selectBatchItem = function (item) { $scope.navbarItems.forEach(function (nav) { nav.class = ""; }); item.class = "active"; $scope.model.updateParamOption("currentPageNum", 1); $scope.model.updateParamOption("keyQuery", $scope.keyQuery); $scope.model.updateParamOption("dataBatch", item.alias); }; $scope.isEmptyOrFirst = function () { var idx = $scope.model.getParamOption("currentPageNum"); var length = $scope.model.paramOptions.totlePage; return length <= 0 || idx <= 1; }; $scope.isEmptyOrLast = function () { var idx = $scope.model.getParamOption("currentPageNum"); var length = $scope.model.paramOptions.totlePage; return length < 1 || idx >= length; }; $scope.first = function () { var idx = $scope.model.getParamOption("currentPageNum"); if (idx > 1) { Kubernetes.eliminateChechBoxClick(); $scope.model.updateParamOption("currentPageNum", 1); } }; $scope.last = function () { var idx = $scope.model.getParamOption("currentPageNum"); var length = $scope.model.paramOptions.totlePage; if (idx < length) { Kubernetes.eliminateChechBoxClick(); $scope.model.updateParamOption("currentPageNum", length); } }; $scope.previous = function () { var idx = $scope.model.getParamOption("currentPageNum"); var length = $scope.model.paramOptions.totlePage; if (idx > 1) { Kubernetes.eliminateChechBoxClick(); $scope.model.updateParamOption("currentPageNum", idx - 1); } }; $scope.next = function () { var length = $scope.model.paramOptions.totlePage; var idx = $scope.model.getParamOption("currentPageNum"); if (idx < length) { Kubernetes.eliminateChechBoxClick(); $scope.model.updateParamOption("currentPageNum", idx + 1); } }; $scope.$watch('model.paramOptions', function (newValue, oldValue) { if (newValue) { if (newValue.currentTableSize !== oldValue.currentTableSize) $scope.options.priorTableSize = oldValue.currentTableSize; else $scope.options.priorTableSize = newValue.currentTableSize; DataModel.updateModel(); } }, true); $scope.search = function () { //$scope.model.initParamOptions(); $scope.model.paramOptions.currentPageNum = 1; $scope.model.updateParamOption("keyQuery", $scope.keyQuery); }; $scope.deletePrompt = function (selected) { if (angular.isString(selected)) { selected = [{ id: selected }]; } /* 判断数据是否已挂载使用和正在迁移。 */ var message = Kubernetes.checkForMigration($scope.replicasModel.replicationControllers, $scope.model.transferTasks, $scope.tableConfig.selectedItems, "manager"); if (message != "") { Configs.customAlert("提示", "操作失败:" + message + ",不能删除!", '', null, 0, "error"); return; } UI.multiItemConfirmActionDialog({ collection: selected, index: 'alias', onClose: function (result) { var idColl = []; if (result) { angular.forEach(selected, function (select) { idColl.push(select.id); }); $http({ method: "POST", url: "/java/console/api/delete/data", params: { "data": idColl } }).success(function (data, status, headers, config) { //成功之后做一些事情 DataModel.updateModel(); }).error(function (data, status, headers, config) { }); } }, title: '是否需要删除采集数据?', action: '以下采集数据文件将会被删除:', okText: '删除', okClass: 'btn-danger sj_btn_cir', custom: "该删除操作将会彻底删除数据文件,是否删除,请确认!", customClass: "alert alert-warning sj_alert-warning", cancelText: "取消", cancelClass: 'sj_btn_grey' }).open(); }; $scope.migrationClick = { items: null, selectedItem: { "name": "当前没有可以迁移的集群" }, dialog: new UI.Dialog(), onOk: function () { var migrationClick = $scope.migrationClick; /* 向后台发生数据迁移请求,$http:发生http异步请求;第二个参数:请求url;第三个参数:请求操作类型;第四个参数:请求携带的数据;第五个参数: 一个回调函数,请求响应后的回调函数。 */ if (Kubernetes.alreadyExitInFolder($scope.tableConfig.selectedItems, $scope.selectNode)) { migrationClick.close(); Configs.customAlert("提示", "操作失败:" + "数据已在当前目录!", '', null, 0, "error"); return; } ; Configs.oracleInfoOperate($http, "/java/console/api/volume", Configs.OperateType.MOVE, { "name": migrationClick.selectedItem.name, "selectItems": $scope.tableConfig.selectedItems, "selectNode": $scope.selectNode }, function (result, status) { if (status === 200) { } else throw "资源请求失败"; }); /* 页面跳转 */ $timeout(function () { $location.path("/workspaces/Overview/task"); }, 250); migrationClick.close(); }, open: function (selected) { var migrationClick = $scope.migrationClick; ConfigsModel.updateVolumeData(); if (ConfigsModel.cluster != null) $scope.volumes = ConfigsModel.cluster; /* 判断数据是否已挂载使用和正在迁移。 */ var message = Kubernetes.checkForMigration($scope.replicasModel.replicationControllers, $scope.model.transferTasks, $scope.tableConfig.selectedItems, "manager"); if (message == "") { if ($scope.volumes && $scope.volumes instanceof Array && $scope.volumes.length > 0) migrationClick.selectedItem = $scope.volumes[0]; migrationClick.dialog.open(); } else { Configs.customAlert("提示", "操作失败:" + message + ", 不能迁移!", '', null, 0, "error"); } }, close: function () { $scope.migrationClick.selectedItem = { "name": "当前没有可以迁移的集群" }; $scope.migrationClick.dialog.close(); } }; $scope.createOracleService = function (items) { var exitedItems = Kubernetes.checkForCreateOracle($scope.model.transferTasks, items); for (var i = 0; i < items.length; ++i) { // code... if (items[i].dataBaseType != 'ORACLE') { Configs.customAlert("提示", "操作失败: 非ORACLE数据不需要挂载启动!", '', null, 0, "error"); return; } } if (exitedItems.length == 0) { angular.forEach(items, function (item) { console.log(item); var isExited = Kubernetes.checkForExit($scope.replicasModel.replicationControllers, item); if (!isExited) { Kubernetes.createRC({ name: item._key, labels: { system: item.systemCode.toString(), version: item.dataVersion.toString(), region: item.regionalismCode.toString() }, annotations: { cityName: item.cityName, districtName: item.districtName, systemName: item.systemName, id: item.id + "", year: item.year, checkoutFlag: item.checkoutFlag }, path: item.dataPath + "app/", isTarget: "false", isExtract: item.extractStatus }, function (rc) { Kubernetes.connectOracle($http, $timeout, "/java/console/api/connectOracle", "create", rc, 0); }); } }); $timeout(function () { $location.path('/kubernetes/namespace/default/replicationControllers'); }, 200); } else { var name = ""; angular.forEach(exitedItems, function (item) { name += item.name + "-" + item.systemName + ","; }); Configs.customAlert("提示", "操作失败: 正在迁移的数据不能被启动!", '', null, 0, "error"); } }; function init($scope, $location, $routeParams) { $scope.keyQuery = ""; $scope.model.initParamOptions(); $scope.model.updateParamOption("keyQuery", $scope.keyQuery); if (ConfigsModel.cluster != null) $scope.volumes = ConfigsModel.cluster; //创建二级菜单 $scope.subTabConfig = Developer.createCurrentSubNavBar($scope, $location, $routeParams); $scope.navbarItems = [{ herf: "", label: "全部", title: "查看全部数据", class: "active", alias: null }, { herf: "", label: "批次A", title: "查看批次A的数据", class: "", alias: "A" }, { herf: "", label: "批次B", title: "查看批次B的数据", class: "", alias: "B" }]; if (!($location.path().indexOf("hot") > -1)) { $scope.tableConfig.columnDefs.splice(7, 0, { field: "existHotData", displayName: '是否已在热区', cellTemplate: $templateCache.get("isExistHot.html") }); } } function getDataType($location) { var path = $location.path(); var dataType; var volumeType; var subPath = path.split("/"); if (path.indexOf("hot") > -1) $scope.isShow = true; else $scope.isShow = false; switch (subPath[subPath.length - 1]) { case "financial": dataType = "财政"; break; case "social-security": dataType = "社保"; break; default: dataType = null; break; } ; switch (subPath[3]) { case "hot": volumeType = 0; break; default: volumeType = 1; } return { "dataType": dataType, "volumeType": volumeType }; } }]); })(Developer || (Developer = {})); /// /// var System; (function (System) { System.pluginName = "System"; System.context = "/system"; System.pluginPath = "plugins/system/"; System.templatePath = System.pluginPath + 'html/'; function shareInit($scope) { //创建二级子菜单 $scope.subTabConfig = Developer.activateCurrent([ { href: UrlHelpers.join(System.context, 'system-list'), label: '信息系统清单', title: '查看信息系统清单' }, { href: UrlHelpers.join(System.context, 'system-verification'), label: '信息系统校验', title: '校验信息系统' }, { href: UrlHelpers.join(System.context, 'system-sqlManagement'), label: '信息系统脚本管理', title: '管理sql脚本' }, { href: UrlHelpers.join(System.context, 'system-help'), label: '帮助', title: '行政区划代码或系统代码检索', items: [{ href: UrlHelpers.join(System.context, 'system-help', 'regionalism-search'), title: '行政区划代码检索', label: '行政区划检索' }, { href: UrlHelpers.join(System.context, 'system-help', 'system-search'), title: '系统代码检索', label: '系统代码检索' }] }]); } System.shareInit = shareInit; })(System || (System = {})); /// /// /// var System; (function (System) { System._module = angular.module(System.pluginName, ['hawtio-core', 'hawtio-ui', 'ui.codemirror', 'ui.validate', 'kubernetesUI', 'ngFileUpload', 'ngDialog']); System.controller = PluginHelpers.createControllerFunction(System._module, System.pluginName); System.route = PluginHelpers.createRoutingFunction(System.templatePath); /* 页面路由配置 */ System._module.config(['$provide', '$routeProvider', function ($provide, $routeProvider) { $routeProvider.when(UrlHelpers.join(System.context, '/'), System.route('systemList.html', false)) .when(UrlHelpers.join(System.context, 'system-list'), System.route('systemList.html', false)) .when(UrlHelpers.join(System.context, 'system-help'), System.route('regionalismCodeSearch.html', false)) .when(UrlHelpers.join(System.context, 'system-help', 'regionalism-search'), System.route('regionalismCodeSearch.html', false)) .when(UrlHelpers.join(System.context, 'system-help', 'system-search'), System.route('systemCodeSearch.html', false)) .when(UrlHelpers.join(System.context, 'system-verification'), System.route('systemVerification.html', false)) .when(UrlHelpers.join(System.context, 'system-sqlManagement'), System.route('systemSQLManagement.html', false)) .when(System.context, { redirectTo: UrlHelpers.join(System.context, 'system-list') }); }]); /* 模块加载后初始化配置 */ System._module.run(['viewRegistry', '$templateCache', 'HawtioNav', '$compile', function (viewRegistry, $templateCache, HawtioNav, $compile) { viewRegistry['system'] = Configs.templatePath + "shareLayout.html"; /* 信息系统一级菜单导航 */ var builder = HawtioNav.builder(); var systemTab = builder.id('systemTab') .rank(10) .href(function () { return System.context; }) .title(function () { return '信息系统'; }) .build(); HawtioNav.add(systemTab); }]); System._module.filter("customFilter", function () { return function (input, subString) { var repx = new RegExp(subString + "$"); return input.replace(repx, ""); }; }); // 加载模块 hawtioPluginLoader.addModule(System.pluginName); })(System || (System = {})); /// /// /// \ /// var System; (function (System) { System.RegionalismCodeController = System.controller('RegionalismCodeController', ["$scope", "$templateCache", "$location", "$routeParams", "$http", "$timeout", 'SystemModel', 'NgTableParams', function ($scope, $templateCache, $location, $routeParams, $http, $timeout, SystemModel, NgTableParams) { System.shareInit($scope); $scope.model = SystemModel; //console.log($scope.model.regionalismInfo); $scope.tableParams = new NgTableParams({ count: 25 }, { counts: [25, 50, 100], dataset: $scope.model.regionalismInfo }); }]); })(System || (System = {})); /// /// var System; (function (System) { function classifyCity(regionalismInfo) { var result = []; angular.forEach(regionalismInfo, function (item) { if (result.indexOf(item.cityName) == -1) result.push(item.cityName); }); return result; } System.classifyCity = classifyCity; function classifyCountry(regionalismInfo, cityName) { var result = []; angular.forEach(regionalismInfo, function (item) { if (item.cityName == cityName) result.push({ name: item.districtName, code: item.code }); }); return result; } System.classifyCountry = classifyCountry; var systemModelServices = (function () { //public checkInfo: Array = []; function systemModelServices() { this.systemInfoList = []; this.systemInfo = []; this.regionalismInfo = []; this.sqlInfo = []; this.updateCodeInfo(); this.updateExcelInfo(); this.updateSqlInfo(); //this.updateCheckInfo(); //console.log(classifyCountry(this.regionalismInfo, '南京市')); } systemModelServices.prototype.updateExcelInfo = function () { var result = []; $.ajax({ async: false, type: "POST", url: "/java/console/api/fileOperation/findAll", success: function (data) { if (data) result = data.data; } }); this.systemInfoList = result; }; systemModelServices.prototype.updateSqlInfo = function () { var result = []; $.ajax({ async: false, type: "POST", url: "/java/console/api/filePackage/findAll", success: function (data) { if (data) result = data.data; } }); this.sqlInfo = result; }; systemModelServices.prototype.updateCodeInfo = function () { var result = []; $.ajax({ async: false, type: "POST", url: "/java/console/api/code/list", success: function (data) { if (data) { result = data; } } }); this.regionalismInfo = result["regionalism"]; this.systemInfo = result["system"]; }; return systemModelServices; }()); System._module.factory('SystemModel', ['$rootScope', '$http', function ($rootScope, $http) { return new systemModelServices(); }]); })(System || (System = {})); /// /// /// /// /// /// /// var System; (function (System) { System.SystemSQLManagement = System.controller('SystemSQLManagement', ['$scope', '$location', '$http', '$element', '$templateCache', 'NgTableParams', 'ngDialog', 'SystemModel', function ($scope, $location, $http, $element, $templateCache, NgTableParams, ngDialog, SystemModel) { System.shareInit($scope); $scope.cities = System.classifyCity(SystemModel.regionalismInfo); $scope.status = [{ id: 0, label: "有缺失" }, { id: 1, label: "正常" }, { id: 2, label: "待归档" }, { id: 3, label: "待审核" }]; SystemModel.updateSqlInfo(); $scope.model = SystemModel.sqlInfo; $scope.checkboxes = { checked: false, items: {} }; $scope.optionsFilter = { x: "all", y: "all", z: "all" }; $scope.tableParams = new NgTableParams({ count: 25 }, { counts: [25, 50, 100], dataset: $scope.model }); $scope.citySelect = function (x) { $scope.optionsFilter.x = x; $scope.optionsFilter.y = $scope.y = "all"; if (x != "all") { $scope.countries = System.classifyCountry(SystemModel.regionalismInfo, x); //获取当前市下所有区县 } else { $scope.countries = []; } }; $scope.countrySelect = function (y) { $scope.optionsFilter.y = y; }; $scope.statusSelect = function (z) { $scope.optionsFilter.z = z; }; $scope.$watch(function () { return $scope.optionsFilter; }, function (value) { shareUpdate($scope.model, value); }, true); $scope.quickCheck = function () { updateSqlStatus("/java/console/api/filePackage/totalVerifySqlFile"); }; $scope.quickFile = function () { updateSqlStatus("/java/console/api/filePackage/totalOnholeSqlFile"); }; $scope.help = function () { ngDialog.open({ template: 'statusHelp.html', width: 600, height: 370, closeByDocument: false, className: 'ngdialog-theme-default' }); }; // watch for check all checkbox $scope.$watch(function () { return $scope.checkboxes.checked; }, function (value) { angular.forEach($scope.model, function (item) { $scope.checkboxes.items[item.id] = value; }); }); // watch for data checkboxes $scope.$watch(function () { return $scope.checkboxes.items; }, function (values) { $scope.checkable = false; for (var index in values) { if (values[index] == true) { $scope.checkable = true; break; } } var checked = 0, unchecked = 0, total = $scope.model.length; angular.forEach($scope.model, function (item) { checked += ($scope.checkboxes.items[item.id]) || 0; unchecked += Number((!$scope.checkboxes.items[item.id])) || 0; }); if ((unchecked == 0) || (checked == 0)) { $scope.checkboxes.checked = (checked == total); } angular.element($element[0].getElementsByClassName("select-all")).prop("indeterminate", (checked != 0 && unchecked != 0)); }, true); //查看 $scope.viewSql = function (selected, type) { ngDialog.open({ template: 'sqlView.html', controller: 'Configs.SqlViewController', width: 1000, height: 600, scope: $scope, closeByDocument: false, data: { type: type, item: selected }, className: 'ngdialog-theme-default' }); }; //上传 $scope.addSql = function (selected, type) { ngDialog.open({ template: 'sqlAdd.html', controller: 'Configs.SqlAddController', width: 600, height: 600, scope: $scope, closeByDocument: false, data: { type: type, item: selected }, className: 'ngdialog-theme-default' }); }; //审核 $scope.verifySql = function (selected, type) { ngDialog.open({ template: 'sqlVerification.html', controller: 'Configs.sqlVerificationController', width: 1000, height: 600, scope: $scope, closeByDocument: false, data: { type: type, item: selected }, className: 'ngdialog-theme-default' }); }; //替换 $scope.moveSql = function (selected, type) { ngDialog.open({ template: 'sqlMove.html', controller: 'Configs.sqlMoveController', width: 600, height: 600, scope: $scope, closeByDocument: false, data: { type: type, item: selected }, className: 'ngdialog-theme-default' }); }; $scope.$on('onOk', function (event, data) { Configs.create_mask(); //创建遮罩层 Kubernetes.create_locadEffect("正在更新文件,请稍等!"); //创建数据加载效果层 var target = document.getElementById('loading'); var spinner = new Spinner(Kubernetes.loadConfigs()).spin(target); $http({ url: "/java/console/api/filePackage/handleSqlFile", method: "POST", params: { type: data.type, opt: data.opt }, data: JSON.stringify({ item: data.item, content: data.content }) }).success(function (data, header, config, status) { $("#load").remove(); Kubernetes.removeMask(); $scope.model = SystemModel.sqlInfo = data.data; shareUpdate($scope.model, $scope.optionsFilter); }).error(function (data, header, config, status) { $("#load").remove(); Kubernetes.removeMask(); }); }); $scope.$on("replace", function (event, data) { $http({ url: "/java/console/api/filePackage/handleSqlFile", method: "POST", params: { type: data.type, opt: data.opt }, data: JSON.stringify({ item: data.item, content: data.content }) }).success(function (data, header, config, status) { $scope.model = SystemModel.sqlInfo = data.data; shareUpdate($scope.model, $scope.optionsFilter); }).error(function (data, header, config, status) { Configs.customAlert("提示", "脚本替换或归档失败!", '', null, 0, "error"); }); }); function shareUpdate(data, value) { var filter = data, result = []; if (value.x != "all") { angular.forEach(filter, function (item) { if (item.cityName == value.x) result.push(item); }); filter = result; result = []; } if (value.y != "all") { angular.forEach(filter, function (item) { if (item.districtName == value.y) result.push(item); }); filter = result; result = []; } if (value.z != "all") { angular.forEach(filter, function (item) { if ($scope.status[item.sysStatus].label == value.z) result.push(item); }); filter = result; result = []; } $scope.tableParams.settings({ dataset: filter }); $scope.checkboxes = { checked: false, items: {} }; } function updateSqlStatus(url) { var items = []; if ($scope.model && $scope.model.length > 0) { angular.forEach($scope.model, function (item) { if ($scope.checkboxes.items[item.id]) items.push(item); }); } if (items.length <= 0) return; Configs.create_mask(); //创建遮罩层 Kubernetes.create_locadEffect("正在更新文件,请稍等!"); //创建数据加载效果层 $http({ url: url, method: 'POST', data: JSON.stringify(items) }).success(function (data, header, config, status) { $scope.model = SystemModel.sqlInfo = data.data; shareUpdate($scope.model, $scope.optionsFilter); $("#load").remove(); Kubernetes.removeMask(); //响应成功 }).error(function (data, header, config, status) { //处理响应失败 $("#load").remove(); Kubernetes.removeMask(); Configs.customAlert("提示", "一键审核或归档失败!", '', null, 0, "error"); }); } }]); })(System || (System = {})); /// /// /// var System; (function (System) { System.SystemCodeController = System.controller('SystemCodeController', ["$scope", "$templateCache", "$location", "$routeParams", "$http", "$timeout", 'SystemModel', 'NgTableParams', function ($scope, $templateCache, $location, $routeParams, $http, $timeout, SystemModel, NgTableParams) { System.shareInit($scope); $scope.model = SystemModel; $scope.tableParams = new NgTableParams({ count: 25 }, { counts: [25, 50, 100], dataset: $scope.model.systemInfo }); }]); })(System || (System = {})); /// /// /// /// /// /// /// var System; (function (System) { System.SystemListController = System.controller('SystemListController', ['$scope', '$location', '$http', '$templateCache', 'Upload', 'NgTableParams', 'ngDialog', 'SystemModel', function ($scope, $location, $http, $templateCache, Upload, NgTableParams, ngDialog, SystemModel) { System.shareInit($scope); $scope.modelServices = SystemModel; $scope.modelServices.updateExcelInfo(); $scope.model = SystemModel.systemInfoList; // 表头显示的信息 $scope.columns = [ { field: 'id', title: '操作', show: true }, { field: "collection", title: "采集对象", filter: { collection: "select" }, filterData: booleanChoose(), show: true }, { field: "cityName", title: "市", filter: { cityName: 'text' }, show: true }, { field: "districtName", title: "区/县", filter: { districtName: 'text' }, show: true }, { field: "areaCode", title: "行政区划代码", filter: { areaCode: 'text' }, show: true }, { field: "areaLevel", title: "地区级次", filter: { areaLevel: "select" }, filterData: levelType(), show: true }, { field: "sysName", title: "信息系统名称", filter: { sysName: "text" }, show: true }, { field: "departmentManager", title: "联系人", filter: { departmentManager: "text" }, show: true }, { field: "managerContacts", title: "联系方式", filter: { managerContacts: "text" }, show: true }, { field: "dataBaseType", title: "数据库类型", filter: { dataBaseType: "select" }, filterData: databaseType(), show: true }, { field: "userTablespaceStatus", title: "oracle用户名表空间", filter: { userTablespaceStatus: "select" }, filterData: booleanChoose(), show: true }, { field: "checkoutPayStatus", title: "支付信息标准表脚本", filter: { checkoutPayStatus: "select" }, filterData: booleanChoose(), show: true }, { field: "checkoutIndicateStatus", title: "可执行标准表脚本", filter: { checkoutIndicateStatus: "select" }, filterData: booleanChoose(), show: true }, ]; // 点击查看按钮事件处理函数 $scope.viewClick = function (selected) { ngDialog.open({ template: 'systemInfo.html', controller: 'Configs.SystemInfoController', width: 790, closeByDocument: false, data: selected, className: 'ngdialog-theme-default' }); }; // 表数据 $scope.tableParams = new NgTableParams({ count: 25 }, { counts: [25, 50, 100], dataset: $scope.model }); // 文件上传 $scope.upLoadExcelFile = function () { Configs.FileInputPlugin(function (files) { var fileNameList = []; //获取文件名列表 angular.forEach(files, function (file) { fileNameList.push(file.name); }); Configs.create_mask(); Kubernetes.create_locadEffect("正在上传文件..."); var target = document.getElementById('loading'); var spinner = new Spinner(Kubernetes.loadConfigs()).spin(target); var r = new Resumable({ target: '/java/console/api/fileOperation/file/upload', chunkSize: 1 * 1024 * 1024, simultaneousUploads: 4, testChunks: false, throttleProgressCallbacks: 1, method: "octet" }); if (!r.support) { throw "当前浏览器不支持Resumable.js文件上传"; } else { angular.forEach(files, function (file) { r.addFile(file); }); r.on('fileAdded', function (file) { r.upload(); }); r.on('complete', function () { $('#loadmsg').html("所以文件上传完毕,正在读取文件中的数据,此过程时间可能会较长,请稍等..."); $.ajax({ type: "POST", url: UrlHelpers.join("/java/console/api/fileOperation/importExcel"), timeout: 8000 * fileNameList.length, dataType: 'json', data: JSON.stringify(fileNameList), contentType: "application/json; charset=utf-8", complete: function (XMLHttpRequest, textStatus) { }, success: function (data) { $("#load").remove(); Kubernetes.removeMask(); $scope.model = SystemModel.systemInfoList = data.data; $scope.tableParams.settings({ dataset: $scope.model }); Configs.customAlert("提示", "操作成功: 本次合计新增了" + data.area + "个行政区划、" + data.system + "个信息系统,更新了" + data.update + "个信息系统", '', null, 0, "success"); }, error: function (XMLHttpRequest, textStatus, errorThrown) { $("#load").remove(); Kubernetes.removeMask(); if (XMLHttpRequest["responseJSON"].err && XMLHttpRequest["responseJSON"].err instanceof Array) ngDialog.open({ template: 'uploadErrorInfo.html', width: 790, closeByDocument: false, data: XMLHttpRequest["responseJSON"].err, className: 'ngdialog-theme-default' }); } }); }); r.on('fileProgress', function (file) { $('#loadmsg').html("上传文件:" + file.fileName + " " + Math.floor(r.progress() * 100) + '%'); //Kubernetes.create_locadEffect("上传文件:" + file.name + " " + Math.floor(r.progress()*100) + '%'); //创建数据加载效果层 }); //解决不同重复选择相同文件 var element = document.getElementById("file-uploads"); if (null != element) element.outerHTML = element.outerHTML; } }, true); }; //excel下载 $scope.downLoadExcelFile = function () { Configs.downloadFile($scope, $http, '/java/console/api/fileOperation/file/download'); }; $scope.downloadFilePackage = function () { Configs.create_mask(); Kubernetes.create_locadEffect("正在下载文件,请稍等..."); var target = document.getElementById('loading'); var spinner = new Spinner(Kubernetes.loadConfigs()).spin(target); Configs.downloadFile($scope, $http, '/java/console/api/filePackage/download', function () { $("#load").remove(); Kubernetes.removeMask(); }); }; //boolean选择条件:是/否 function booleanChoose() { return [{ id: '是', title: '是' }, { id: '否', title: '否' }]; } // 数据库类型选择条件:oracle/sql Server function databaseType() { return [{ id: 'oracle', title: 'ORACLE' }, { id: 'sql Server', title: 'SQL SERVER' }]; } //level选择条件 function levelType() { return [{ id: '省', title: '省' }, { id: '市', title: '市' }, { id: '县', title: '县' }]; } }]); })(System || (System = {})); /// /// /// /// /// /// /// /// /// var System; (function (System) { System.SystemVerificationController = System.controller('SystemVerificationController', ['$scope', '$interval', '$location', '$http', '$templateCache', 'Upload', 'NgTableParams', 'ngDialog', 'SystemModel', '$element', '$timeout', 'ConfigsModel', 'DataModel', 'TerminalService', 'KubernetesModel', function ($scope, $interval, $location, $http, $templateCache, Upload, NgTableParams, ngDialog, SystemModel, $element, $timeout, ConfigsModel, DataModel, TerminalService, KubernetesModel) { System.shareInit($scope); $scope.cities = System.classifyCity(SystemModel.regionalismInfo); $scope.model = SystemModel; $scope.tableData = null; $scope.checkboxes = { checked: false, items: {} }; // 表数据 $scope.tableParams = new NgTableParams({ count: 25 }, { counts: [25, 50, 100], dataset: $scope.tableData }); $scope.citySelect = function (x) { $scope.countries = []; $scope.y = "all"; if (x != 'all') { $scope.countries = System.classifyCountry(SystemModel.regionalismInfo, x); $http({ url: "/java/console/api/checkout/findByCity", method: "POST", data: x }).success(function (data, header, config, status) { $scope.tableData = data.data; $scope.tableParams.settings({ dataset: $scope.tableData }); }).error(function (data, header, config, status) { throw "请求失败"; }); } else { //$scope.countries=[]; //$scope.y = "all"; $scope.tableData = null; $scope.checkboxes = { checked: false, items: {} }; } }; $scope.countrySelect = function (y) { if (y != 'all') { var result = []; angular.forEach($scope.tableData, function (item) { if (item.districtName == y) result.push(item); }); $scope.tableParams.settings({ dataset: result }); } else { $scope.tableParams.settings({ dataset: $scope.tableData }); } }; $scope.checkSQLSERVER = function () { /** ** 检查是否有默认标准表汇总库 **/ var answer = false; for (var i = 0; i < ConfigsModel.oracleParam.length; ++i) { if (ConfigsModel.oracleParam[i].type == 1) { answer = true; break; } } if (answer == false) { /** 提示没有配置标准表汇总库 **/ Configs.customAlert("提示", "操作失败:没有配置默认的标准表汇总库", '', null, 0, "error"); return; } var selectedItems = []; if ($scope.tableData && $scope.tableData.length > 0) { for (var i = 0; i < $scope.tableData.length; ++i) { var item = $scope.tableData[i]; if ($scope.checkboxes.items[item.id]) { if (item.collection == '否') { /* **提示出现没有采集数据的信息系统 code */ Configs.customAlert("提示", "操作失败:选择的系统存在没有数据的系统", '', null, 0, "error"); return; } 7; item["_key"] = item.areaCode + "-" + item.sysCode + "-" + item.dataVersion; if (item.dataBaseType == 'ORACLE') { Configs.customAlert("提示", "操作失败:ORACLE数据请在服务集群界面中抽取标准表!", '', null, 0, "error"); return; } selectedItems.push(item); } } $http({ url: "/java/console/api/checkout/extractList", method: "POST", data: selectedItems }).success(function (data, header, config, status) { //console.log(data); }).error(function (data, header, config, status) { throw "请求失败"; }); } }; $scope.deleteRows = function () { var filter = []; if ($scope.tableData && $scope.tableData.length > 0) { angular.forEach($scope.tableData, function (item) { if ($scope.checkboxes.items[item.id]) { item["index"] = item.cityName + "_" + item.districtName + "_" + item.sysName + "_" + item.year + "_版本" + item.dataVersion; item["_key"] = item.areaCode + "-" + item.sysCode + "-" + item.dataVersion; filter.push(item); } }); } //检查数据是否存在 for (var i = 0; i < filter.length; i++) { if (filter[i].collection == '否') { Configs.customAlert("提示", "操作失败:部分数据不存在,无法删除", '', null, 0, "error"); return; } } //检查数据是否已启动 //检查数据是否在迁移 var message = Kubernetes.checkForMigration(KubernetesModel.replicationControllers, DataModel.transferTasks, filter, "verify"); if (message != "") { Configs.customAlert("提示", "操作失败:部分数据" + message + ",无法删除", '', null, 0, "error"); return; } UI.multiItemConfirmActionDialog({ collection: filter, index: 'index', onClose: function (result) { if (result) { $http({ url: "/java/console/api/checkout/deleteList", method: "POST", data: filter }).success(function (data, header, config, status) { $scope.tableData = data.data; var result = []; if ($scope.y != 'all') { angular.forEach($scope.tableData, function (item) { if (item.districtName == $scope.y) result.push(item); }); } else { result = $scope.tableData; } $scope.tableParams.settings({ dataset: result }); }).error(function (data, header, config, status) { throw "请求失败"; }); } }, title: '是否需要删除采集数据?', action: '以下采集数据文件将会被删除:', okText: '删除', okClass: 'btn-danger sj_btn_cir', custom: "该删除操作将会彻底删除数据文件,是否删除,请确认!", customClass: "alert alert-warning sj_alert-warning", cancelText: "取消", cancelClass: 'sj_btn_grey' }).open(); }; $scope.check = function () { //var sqlServerDB = []; var oracleDB = []; var selectedItems = []; /** ** 检查是否有默认标准表汇总库 **/ var answer = false; for (var i = 0; i < ConfigsModel.oracleParam.length; ++i) { if (ConfigsModel.oracleParam[i].type == 1) { answer = true; break; } } if (answer == false) { /** 提示没有配置标准表汇总库 **/ Configs.customAlert("提示", "操作失败:没有配置默认的标准表汇总库", '', null, 0, "error"); return; } if ($scope.tableData && $scope.tableData.length > 0) { for (var i = 0; i < $scope.tableData.length; ++i) { var item = $scope.tableData[i]; if ($scope.checkboxes.items[item.id]) { if (item.collection == '否') { /* **提示出现没有采集数据的信息系统 code */ Configs.customAlert("提示", "操作失败:选择的系统存在没有数据的系统", '', null, 0, "error"); return; } /** */ if (item.payResultLast == 1) { Configs.customAlert("提示", "操作失败:选择的系统存在不需要校验的系统", '', null, 0, "error"); return; } /** 检查数据是否在热区 */ if (item.mark == 1 && item.dataBaseType == 'ORACLE') { Configs.customAlert("提示", "操作失败:选择的系统的数据存储在冷区,请先将数据迁移到热区再检验!", '', null, 0, "error"); return; } item["_key"] = item.areaCode + "-" + item.sysCode + "-" + item.dataVersion; selectedItems.push(item); if (item.dataBaseType == 'ORACLE') { oracleDB.push(item); } } } /* 此处需要检查数据是否已挂载、正在迁移。 */ var exited = Kubernetes.checkForCreateOracle(DataModel.transferTasks, selectedItems); if (exited.length > 0) { Configs.customAlert("提示", "操作失败: 正在迁移的数据不能执行校验操作!", '', null, 0, "error"); return; } /* 如果是Oracle数据,先启动oracle数据 */ if (oracleDB.length > 0) { angular.forEach(oracleDB, function (item) { Kubernetes.createRC({ name: item._key, labels: { system: item.sysCode.toString(), version: item.dataVersion.toString(), region: item.areaCode.toString() }, annotations: { cityName: item.cityName, districtName: item.districtName, systemName: item.sysName, id: item.dataId + "", year: item.year, checkoutFlag: item.checkoutFlag }, path: item.path + "app/", isTarget: "false", isExtract: item.extractStatus }, function (rc) { //Kubernetes.connectOracle($http, $timeout, "/java/console/api/connectOracle", "create", rc, 0); }); }); $timeout(function () { $location.path('/kubernetes/namespace/default/replicationControllers'); }, 500); } $http({ url: "/java/console/api/checkout/checkList", method: "POST", data: selectedItems }).success(function (data, header, config, status) { $scope.tableData = data.data; var result = []; if ($scope.y != 'all') { angular.forEach($scope.tableData, function (item) { if (item.districtName == $scope.y) result.push(item); }); } else { result = $scope.tableData; } $scope.tableParams.settings({ dataset: result }); }).error(function (data, header, config, status) { throw "请求失败"; }); } }; // watch for check all checkbox $scope.$watch(function () { return $scope.checkboxes.checked; }, function (value) { angular.forEach($scope.tableData, function (item) { $scope.checkboxes.items[item.id] = value; }); }); // watch for data checkboxes $scope.$watch(function () { return $scope.checkboxes.items; }, function (values) { $scope.checkable = false; for (var index in values) { if (values[index] == true) { $scope.checkable = true; break; } } var checked = 0, unchecked = 0, total = -1; if ($scope.tableData && ($scope.tableData instanceof Array)) total = $scope.tableData.length; angular.forEach($scope.tableData, function (item) { checked += ($scope.checkboxes.items[item.id]) || 0; unchecked += Number(!$scope.checkboxes.items[item.id]) || 0; }); if ((unchecked == 0) || (checked == 0)) { $scope.checkboxes.checked = (checked == total); } // grayed checkbox angular.element($element[0].getElementsByClassName("select-all")).prop("indeterminate", (checked != 0 && unchecked != 0)); }, true); $scope.update = function (entity) { ngDialog.open({ template: 'sysVerificationUpdate.html', controller: 'Configs.sysVerUpdateController', width: 900, height: 600, closeByDocument: false, data: entity, scope: $scope, className: 'ngdialog-theme-default' }); }; $scope.$on('updateRow', function (event, data) { $http({ url: "/java/console/api/checkout/update", method: 'POST', data: JSON.stringify(data) }).success(function (data, header, config, status) { if (header == 200) { Configs.customAlert("提示", "操作成功!", '', null, 0, "success"); var result = []; if ($scope.y != 'all') { angular.forEach(data.data, function (item) { if ($scope.y == item.districtName) result.push(item); }); } else result = data.data; $scope.tableParams.settings({ dataset: result }); } else Configs.customAlert("提示", "操作失败!", '', null, 0, "error"); }).error(function (data, header, config, status) { Configs.customAlert("提示", "操作失败:发生请求失败,不能删除!", '', null, 0, "error"); }); }); $scope.openLog = function (entity) { var name = entity.areaCode + "_" + entity.sysCode + "_" + entity.dataVersion; var containerName = entity.cityName + "-" + entity.districtName + "-" + entity.sysName + "-版本" + entity.dataVersion; entity["name"] = name; TerminalService.newTerminal($interval, entity.id + "", containerName, entity, "/java/console/api/standardextract/log?rcName=" + name, $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, 'logShell.html'))); }; }]); })(System || (System = {})); /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.Apps = Kubernetes.controller("Apps", ["$scope", "KubernetesModel", "KubernetesServices", "KubernetesReplicationControllers", "KubernetesPods", "KubernetesState", "KubernetesApiURL", "$templateCache", "$location", "$routeParams", "$http", "$dialog", "$timeout", function ($scope, KubernetesModel, KubernetesServices, KubernetesReplicationControllers, KubernetesPods, KubernetesState, KubernetesApiURL, $templateCache, $location, $routeParams, $http, $dialog, $timeout) { $scope.model = KubernetesModel; $scope.apps = []; $scope.allApps = []; $scope.kubernetes = KubernetesState; $scope.fetched = false; $scope.json = ''; ControllerHelpers.bindModelToSearchParam($scope, $location, 'id', '_id', undefined); ControllerHelpers.bindModelToSearchParam($scope, $location, 'appSelectorShow', 'openApp', undefined); ControllerHelpers.bindModelToSearchParam($scope, $location, 'mode', 'mode', 'detail'); var branch = $scope.branch || "master"; var namespace = null; function appMatches(app) { var filterText = $scope.appSelector.filterText; if (filterText) { return Core.matchFilterIgnoreCase(app.groupId, filterText) || Core.matchFilterIgnoreCase(app.artifactId, filterText) || Core.matchFilterIgnoreCase(app.name, filterText) || Core.matchFilterIgnoreCase(app.description, filterText); } else { return true; } } function appRunning(app) { return $scope.model.apps.any(function (running) { return running.appPath === app.appPath; }); } $scope.tableConfig = { data: 'model.apps', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: '$name', displayName: 'App', cellTemplate: $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, "appIconTemlate.html")) }, { field: '$servicesText', displayName: 'Services', cellTemplate: $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, "appServicesTemplate.html")) }, { field: '$replicationControllersText', displayName: 'Controllers', cellTemplate: $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, "appReplicationControllerTemplate.html")) }, { field: '$podCount', displayName: 'Pods', cellTemplate: $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, "appPodCountsAndLinkTemplate.html")) }, { field: '$creationDate', displayName: 'Deployed', cellTemplate: $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, "appDeployedTemplate.html")) } ] }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.expandedPods = []; $scope.$on('do-resize', function ($event, controller) { $scope.resizeDialog.open(controller); }); $scope.podExpanded = function (pod) { var id = Kubernetes.getName(pod); return id && ($scope.expandedPods || []).indexOf(id) >= 0; }; $scope.expandPod = function (pod) { var id = Kubernetes.getName(pod); if (id) { $scope.expandedPods.push(id); } }; $scope.collapsePod = function (pod) { var id = Kubernetes.getName(pod); if (id) { _.remove($scope.expandedPods, function (v) { return id === v; }); } }; $scope.$on('$routeUpdate', function ($event) { Kubernetes.setJson($scope, $location.search()['_id'], $scope.model.apps); }); function deleteApp(app, onCompleteFn) { function deleteServices(services, service, onCompletedFn) { if (!service || !services) { return onCompletedFn(); } var id = Kubernetes.getName(service); if (!id) { Kubernetes.log.warn("No ID for service " + angular.toJson(service)); } else { KubernetesServices.delete({ id: id }, undefined, function () { Kubernetes.log.debug("Deleted service: ", id); deleteServices(services, services.shift(), onCompletedFn); }, function (error) { Kubernetes.log.debug("Error deleting service: ", error); deleteServices(services, services.shift(), onCompletedFn); }); } } function deleteReplicationControllers(replicationControllers, replicationController, onCompletedFn) { if (!replicationController || !replicationControllers) { return onCompletedFn(); } var id = Kubernetes.getName(replicationController); if (!id) { Kubernetes.log.warn("No ID for replicationController " + angular.toJson(replicationController)); } else { KubernetesReplicationControllers.delete({ id: id }, undefined, function () { Kubernetes.log.debug("Deleted replicationController: ", id); deleteReplicationControllers(replicationControllers, replicationControllers.shift(), onCompletedFn); }, function (error) { Kubernetes.log.debug("Error deleting replicationController: ", error); deleteReplicationControllers(replicationControllers, replicationControllers.shift(), onCompletedFn); }); } } function deletePods(pods, pod, onCompletedFn) { if (!pod || !pods) { return onCompletedFn(); } var id = Kubernetes.getName(pod); if (!id) { Kubernetes.log.warn("No ID for pod " + angular.toJson(pod)); } else { KubernetesPods.delete({ id: id }, undefined, function () { Kubernetes.log.debug("Deleted pod: ", id); deletePods(pods, pods.shift(), onCompletedFn); }, function (error) { Kubernetes.log.debug("Error deleting pod: ", error); deletePods(pods, pods.shift(), onCompletedFn); }); } } var services = [].concat(app.services); deleteServices(services, services.shift(), function () { var replicationControllers = [].concat(app.replicationControllers); deleteReplicationControllers(replicationControllers, replicationControllers.shift(), function () { var pods = [].concat(app.pods); deletePods(pods, pods.shift(), onCompleteFn); }); }); } $scope.deleteSingleApp = function (app) { $scope.deletePrompt([app]); }; $scope.deletePrompt = function (selected) { if (angular.isString(selected)) { selected = [{ id: selected }]; } UI.multiItemConfirmActionDialog({ collection: selected, index: '$name', onClose: function (result) { if (result) { function deleteSelected(selected, next) { if (next) { var id = next.name; Kubernetes.log.debug("deleting: ", id); deleteApp(next, function () { Kubernetes.log.debug("deleted: ", id); deleteSelected(selected, selected.shift()); }); } } deleteSelected(selected, selected.shift()); } }, title: 'Delete Apps?', action: 'The following Apps will be deleted:', okText: 'Delete', okClass: 'btn-danger', custom: "This operation is permanent once completed!", customClass: "alert alert-warning" }).open(); }; $scope.appSelector = { filterText: "", folders: [], selectedApps: [], isOpen: function (folder) { if ($scope.appSelector.filterText !== '' || folder.expanded) { return "opened"; } return "closed"; }, getSelectedClass: function (app) { if (app.abstract) { return "abstract"; } if (app.selected) { return "selected"; } return ""; }, showApp: function (app) { return appMatches(app) && !appRunning(app); }, showFolder: function (folder) { return !$scope.appSelector.filterText || folder.apps.some(function (app) { return appMatches(app) && !appRunning(app); }); }, clearSelected: function () { angular.forEach($scope.model.appFolders, function (folder) { angular.forEach(folder.apps, function (app) { app.selected = false; }); }); $scope.appSelector.selectedApps = []; Core.$apply($scope); }, updateSelected: function () { // lets update the selected apps var selectedApps = []; angular.forEach($scope.model.appFolders, function (folder) { var apps = folder.apps.filter(function (app) { return app.selected; }); if (apps) { selectedApps = selectedApps.concat(apps); } }); $scope.appSelector.selectedApps = _.sortBy(selectedApps, "name"); }, select: function (app, flag) { app.selected = flag; $scope.appSelector.updateSelected(); }, hasSelection: function () { return $scope.model.appFolders.any(function (folder) { return folder.apps.any(function (app) { return app.selected; }); }); }, runSelectedApps: function () { // lets run all the selected apps angular.forEach($scope.appSelector.selectedApps, function (app) { var name = app.name; var metadataPath = app.metadataPath; if (metadataPath) { // lets load the json/yaml //var url = gitPathToUrl(Wiki.gitRelativeURL(branch, metadataPath)); var url = Kubernetes.gitPathToUrl(metadataPath, branch); if (url) { $http.get(url). success(function (data, status, headers, config) { if (data) { // lets convert the json object structure into a string var json = angular.toJson(data); var fn = function () { }; Kubernetes.runApp($location, $scope, $http, KubernetesApiURL, json, name, fn, namespace); } }). error(function (data, status, headers, config) { $scope.summaryHtml = null; Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); } } }); // lets go back to the apps view $scope.appSelector.clearSelected(); $scope.appSelectorShow = false; } }; }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes._module.directive("hawtioBreadcrumbs", ['HawtioBreadcrumbs', function (HawtioBreadcrumbs) { return { /* templateUrl: Kubernetes.templatePath + 'breadcrumbs.html' */ link: function (scope, element, attrs) { HawtioBreadcrumbs.apply(scope.$eval('breadcrumbConfig')); } }; }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.BuildController = Kubernetes.controller("BuildController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.schema = KubernetesSchema; $scope.config = KubernetesSchema.definitions.os_build_Build; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, null, $scope); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); updateData(); function updateData() { $scope.item = null; if ($scope.id) { var url = Kubernetes.buildRestUrl($scope.id); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.entity = Kubernetes.enrichBuild(data); } $scope.fetched = true; Core.$apply($scope); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); } else { $scope.fetched = true; Core.$apply($scope); } } }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.BuildConfigController = Kubernetes.controller("BuildConfigController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.schema = KubernetesSchema; $scope.config = KubernetesSchema.definitions.os_build_BuildConfig; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); updateData(); function updateData() { $scope.item = null; if ($scope.id) { var url = Kubernetes.buildConfigRestUrl($scope.id); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.entity = data; var sortedBuilds = null; Kubernetes.enrichBuildConfig(data, sortedBuilds); $scope.model.setProject($scope.entity); } $scope.fetched = true; Core.$apply($scope); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); } else { $scope.fetched = true; Core.$apply($scope); } } }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.BuildConfigEditController = Kubernetes._module.controller("Kubernetes.BuildConfigEditController", ["$scope", "$element", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "K8SClientFactory", "SchemaRegistry", function ($scope, $element, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, K8SClientFactory, SchemaRegistry) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["project"] || $routeParams["id"]; $scope.schema = KubernetesSchema; var mode = $scope.$eval('mode') || 'edit'; Kubernetes.log.debug("Mode: ", mode); var specConfig = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.BuildConfigSpec'); var gitBuildSource = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.GitBuildSource'); var buildSource = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.BuildSource'); var buildOutput = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.BuildOutput'); var resources = SchemaRegistry.getSchema('io.fabric8.kubernetes.api.model.ResourceRequirements'); var revision = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.SourceRevision'); var strategy = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.BuildStrategy'); var customStrategy = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.CustomBuildStrategy'); var buildTriggerPolicy = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.BuildTriggerPolicy'); var getSecrets = function () { return $scope.secrets; }; var secretSchemaType = "fabric8_SecretReference"; var secretSchemaRef = "#/definitions/" + secretSchemaType; var secretSchemaJavaType = "io.fabric8.console.SecretReference"; var secretNameElement = { "type": "string", "enum": getSecrets, required: true }; var secretSchema = { "type": "object", properties: { "name": secretNameElement }, javaType: secretSchemaJavaType }; SchemaRegistry.addSchema(secretSchemaType, secretSchema); // lets switch to the new secrets types: var sourceSecretProperty = Core.pathGet(buildSource, ["properties", "sourceSecret"]); angular.forEach([ Core.pathGet(customStrategy, ["properties", "pullSecret"]), sourceSecretProperty, ], function (schemaType) { if (schemaType) { schemaType["type"] = secretSchemaType; schemaType["$ref"] = secretSchemaRef; schemaType["javaType"] = secretSchemaJavaType; } }); // lets try make the buildSource's sourceSecret mandatory //schemaSetRequired(customStrategy, 'pullSecret'); Kubernetes.schemaSetRequired(buildSource, 'sourceSecret'); if (sourceSecretProperty) { Core.pathSet(sourceSecretProperty, ['properties', 'required'], true); Core.pathSet(sourceSecretProperty, ['properties', 'input-attributes', 'required'], true); } $scope.customStrategy = customStrategy; $scope.buildSource = buildSource; $scope.secrets = []; // $scope.config = KubernetesSchema.definitions.os_build_BuildConfig; //$scope.specConfig = KubernetesSchema.definitions.os_build_BuildConfigSpec; // specConfig.style = HawtioForms.FormStyle.STANDARD; specConfig.properties['triggers']['label-attributes'] = { style: 'display: none;' }; gitBuildSource.controls = ['uri', 'ref', '*']; buildSource.properties['type'].type = 'hidden'; buildSource.properties['type']['default'] = 'Git'; buildSource.controls = ['git', 'contextDir', 'sourceSecret', '*']; gitBuildSource['hideLegend'] = true; buildSource['hideLegend'] = true; buildOutput['hideLegend'] = true; resources['hideLegend'] = true; revision['hideLegend'] = true; strategy['hideLegend'] = true; strategy.controls = ['type', '*']; strategy.properties['type'] = { type: 'text', enum: [{ 'value': 'Custom', 'label': 'Custom' }, { 'value': 'Docker', 'label': 'Docker' }, { 'value': 'Source', 'label': 'Source' }] }; customStrategy['control-group-attributes'] = { 'ng-show': "entity.type == 'Custom'" }; strategy.properties['dockerStrategy']['control-group-attributes'] = { 'ng-show': "entity.type == 'Docker'" }; strategy.properties['sourceStrategy']['control-group-attributes'] = { 'ng-show': "entity.type == 'Source'" }; buildTriggerPolicy.controls = ['type', '*']; buildTriggerPolicy.properties['type'] = { type: 'string', enum: [{ 'value': 'Github', 'label': 'Github' }, { 'value': 'ImageChange', 'label': 'Image Change' }, { 'value': 'Generic', 'label': 'Generic' }] }; buildTriggerPolicy.properties['generic']['control-group-attributes'] = { 'ng-show': "entity.type == 'Generic'" }; buildTriggerPolicy.properties['github']['control-group-attributes'] = { 'ng-show': "entity.type == 'Github'" }; buildTriggerPolicy.properties['imageChange']['control-group-attributes'] = { 'ng-show': "entity.type == 'ImageChange'" }; // re-arranging the controls //specConfig.controls = ['source', '*']; // tabs specConfig.tabs = { "Source": ["source"], "Revision": ["revision"], "Output": ["output"], "Resources": ["resources"], "Strategy": ["strategy"], "Triggers": ["triggers"], "Service Account": ["serviceAccount"] }; /* * wizard, needs an 'onFinish' function in the scope specConfig.wizard = { pages: { Source: { controls: ["source"] }, Revision: { controls: ["revision"] }, Output: { controls: ["output"] }, Resources: { controls: ["resources"] }, Strategy: { controls: ["strategy"] }, Triggers: { controls: ["triggers"] }, "Service Account": { controls: ["serviceAccount"] } } }; */ $scope.entity = { "apiVersion": "v1", "kind": "BuildConfig", "metadata": { "name": "", "labels": {} }, "spec": { "source": { "type": "Git" }, "strategy": { "type": "Custom", "customStrategy": { "from": { "kind": "DockerImage", "name": "fabric8/openshift-s2i-jenkins-trigger" }, "env": [ { "name": "BASE_URI", "value": jenkinsUrl }, { "name": "JOB_NAME", "value": jobName } ] } } } }; $scope.$watch('entity.spec.source.git.uri', function (val) { if (!val) { return; } var lastBit = val.match(/[^\/]+$/)[0]; if (lastBit) { var name = lastBit.replace(/\.git$/, ''); Kubernetes.log.debug("name: ", name); if (!Core.isBlank(name) && Core.isBlank(Core.pathGet($scope.entity, ['metadata', 'name']))) { Core.pathSet($scope.entity, ['metadata', 'name'], name); } } }); Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectSettingsBreadcrumbs($scope.projectId); $scope.subTabConfig = Developer.createProjectSubNavBars($scope.projectId); $scope.tabs = Developer.createProjectSettingsSubNavBars($scope.projectId); Kubernetes.watch($scope, $element, "secrets", $scope.namespace, onSecrets); $scope.buildConfigClient = K8SClientFactory.create("buildconfigs", $scope.namespace); $element.on('$destroy', function () { $scope.$destroy(); }); $scope.$on('$destroy', function () { K8SClientFactory.destroy($scope.buildConfigClient); }); /* $scope.$on('kubernetesModelUpdated', function () { updateData(); }); */ $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.save = function () { Kubernetes.log.info("Saving!"); var entity = $scope.entity; var spec = (entity || {}).spec || {}; // TODO update the jenkins job name! // lets delete lots of cruft var strategy = spec.strategy || {}; delete strategy["dockerStrategy"]; delete strategy["sourceStrategy"]; delete spec["revision"]; delete spec["output"]; delete spec["resources"]; var strategyPullSecretName = Core.pathGet(spec, ["strategy", "customStrategy", "pullSecret", "name"]); var sourceSecretName = Core.pathGet(spec, ["source", "sourceSecret", "name"]); Kubernetes.log.info("sourceSecretName: " + sourceSecretName); Kubernetes.log.info("strategyPullSecretName: " + strategyPullSecretName); if (!strategyPullSecretName && sourceSecretName) { Core.pathSet(spec, ["strategy", "customStrategy", "pullSecret", "name"], sourceSecretName); } /* // TODO hack until the put deals with updates var metadata = entity.metadata; if (metadata) { delete metadata["resourceVersion"]; } */ Kubernetes.log.info(angular.toJson(entity, true)); $scope.buildConfigClient.put(entity, function (obj) { Kubernetes.log.info("build config created!"); var link = Developer.projectSecretsLink($scope.namespace, Kubernetes.getName(entity)); if (link) { Kubernetes.log.info("Navigating to: " + link); $location.path(link); } else { Kubernetes.log.warn("Could not find the edit pipeline link!"); } }); }; updateData(); var jenkinsUrl = Developer.jenkinsLink(); var jobName = ""; function updateData() { $scope.item = null; if ($scope.id) { var url = Kubernetes.buildConfigRestUrl($scope.id); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.entity = data; var buildConfig = angular.copy(data); var sortedBuilds = null; Kubernetes.enrichBuildConfig(buildConfig, sortedBuilds); $scope.buildConfig = buildConfig; } $scope.spec = ($scope.entity || {}).spec || {}; $scope.fetched = true; // lets update the tabs $scope.subTabConfig = Developer.createProjectSubNavBars($scope.projectId, null, $scope); Core.$apply($scope); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); } else { $scope.fetched = true; $scope.spec = $scope.entity.spec; Core.$apply($scope); } } function onSecrets(secrets) { var array = []; angular.forEach(secrets, function (secret) { var name = Kubernetes.getName(secret); if (name) { array.push({ label: name, value: name, "attributes": { "title": name }, $secret: secret }); } }); $scope.secrets = _.sortBy(array, "label"); var specSourceSecretNamePath = ['spec', 'source', 'sourceSecret', 'name']; if ($scope.entity && !Core.pathGet($scope.entity, specSourceSecretNamePath)) { var defaultSecretName = findDefaultImportSecretName(secrets); Core.pathSet($scope.entity, specSourceSecretNamePath, defaultSecretName); } } function findDefaultImportSecretName(secrets) { var answer = null; angular.forEach(secrets, function (secret) { var name = Kubernetes.getName(secret); if (!answer && name && name.startsWith("jenkins-login")) { answer = name; } }); if (!answer) { angular.forEach(secrets, function (secret) { var name = Kubernetes.getName(secret); if (!answer && name && name.startsWith("jenkins-token")) { answer = name; } }); } return answer; } switch (mode) { case 'create': delete specConfig.tabs; _.forIn(buildSource.properties, function (property, name) { if (name !== 'git') { Kubernetes.log.info("Hiding property: ", name); property.hidden = true; } }); _.forIn(gitBuildSource.properties, function (property, name) { if (name !== 'uri') { Kubernetes.log.info("Hiding property: ", name); property.hidden = true; } else { property.label = "Git URL"; property['input-attributes'] = { 'required': true }; } }); _.forIn(specConfig.properties, function (property, name) { if (name !== 'source') { Kubernetes.log.info("Hiding property: ", name); property.hidden = true; } }); break; case 'edit': default: } $scope.specConfig = specConfig; }]); })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.BuildConfigsController = Kubernetes.controller("BuildConfigsController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.tableConfig = { data: 'model.buildconfigs', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: 'metadata.name', displayName: 'Name', cellTemplate: $templateCache.get("buildConfigLinkTemplate.html") }, /* { field: 'spec.source.type', displayName: 'Source' }, */ { field: 'spec.source.git.uri', displayName: 'Repository' }, /* { field: 'spec.strategy.type', displayName: 'Strategy' }, { field: 'spec.strategy.stiStrategy.image', displayName: 'Source Image' }, { field: 'spec.output.imageTag', displayName: 'Output Image' }, */ { field: '$fabric8CodeViews', displayName: 'Code', width: "***", minWidth: 500, cellTemplate: $templateCache.get("buildConfigCodeViewsTemplate.html") }, { field: '$fabric8BuildViews', displayName: 'Builds', width: "***", minWidth: 500, cellTemplate: $templateCache.get("buildConfigBuildViewsTemplate.html") }, { field: '$fabric8EnvironmentViews', displayName: 'Environments', width: "***", minWidth: 500, cellTemplate: $templateCache.get("buildConfigEnvironmentViewsTemplate.html") }, { field: '$fabric8TeamViews', displayName: 'People', width: "***", minWidth: 500, cellTemplate: $templateCache.get("buildConfigTeamViewsTemplate.html") } ] }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); // TODO // $scope.isLoggedIntoGogs = Forge.isLoggedIntoGogs; $scope.deletePrompt = function (selected) { UI.multiItemConfirmActionDialog({ collection: selected, index: '$name', onClose: function (result) { if (result) { function deleteSelected(selected, next) { if (next) { deleteEntity(next, function () { deleteSelected(selected, selected.shift()); }); } else { updateData(); } } deleteSelected(selected, selected.shift()); } }, title: 'Delete Build Configs?', action: 'The following Build Configs will be deleted:', okText: 'Delete', okClass: 'btn-danger', custom: "This operation is permanent once completed!", customClass: "alert alert-warning" }).open(); }; function deleteEntity(selection, nextCallback) { var name = (selection || {}).$name; if (name) { console.log("About to delete build config: " + name); var url = Kubernetes.buildConfigRestUrl(name); $http.delete(url). success(function (data, status, headers, config) { nextCallback(); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to delete build config on " + url + " " + data + " " + status); }); } else { console.log("warning: no name for selection: " + angular.toJson(selection)); } } function updateData() { } updateData(); }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.BuildLogsController = Kubernetes.controller("BuildLogsController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.schema = KubernetesSchema; $scope.config = KubernetesSchema.definitions.os_build_Build; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.logsText = "Loading logs..."; updateData(); function updateData() { $scope.item = null; if ($scope.id) { var url = Kubernetes.buildRestUrl($scope.id); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.entity = Kubernetes.enrichBuild(data); } $scope.fetched = true; Core.$apply($scope); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); url = Kubernetes.buildLogsRestUrl($scope.id); $http.get(url). success(function (data, status) { $scope.logsText = data; Core.$apply($scope); }). error(function (data, status) { $scope.logsText = "Failed to load logs from: " + url + " " + data + " status: " + status; Core.$apply($scope); }). catch(function (error) { $scope.logsText = "Failed to load logs: " + angular.toJson(error, true); Core.$apply($scope); }); } else { $scope.fetched = true; Core.$apply($scope); } } }]); })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.BuildsController = Kubernetes.controller("BuildsController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.buildConfigId = $routeParams["id"]; $scope.$on('kubernetesModelUpdated', function () { Core.$apply($scope); }); $scope.tableConfig = { data: 'model.builds', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: 'metadata.name', displayName: 'Name', cellTemplate: $templateCache.get("buildLinkTemplate.html") }, { field: '$creationDate', displayName: 'Time', defaultSort: true, cellTemplate: $templateCache.get("buildTimeTemplate.html") }, { field: 'status', displayName: 'Status', cellTemplate: $templateCache.get("buildStatusTemplate.html") }, { field: '$logsLink', displayName: 'Logs', cellTemplate: $templateCache.get("buildLogsTemplate.html") }, { field: '$podLink', displayName: 'Build Pod', cellTemplate: $templateCache.get("buildPodTemplate.html") }, /* { field: 'parameters.source.type', displayName: 'Source' }, */ { field: 'spec.source.git.uri', displayName: 'Repository', cellTemplate: $templateCache.get("buildRepositoryTemplate.html") }, { field: 'spec.strategy.type', displayName: 'Strategy' }, { field: 'spec.strategy.sourceStrategy.from.name', displayName: 'Source Image' }, { field: 'spec.output.to.name', displayName: 'Output Image' }] }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.buildConfigId); $scope.subTabConfig = Developer.createProjectSubNavBars($scope.buildConfigId, null, $scope); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); function updateData() { if ($scope.model) { var builds = $scope.model.builds; var buildConfigId = $scope.buildConfigId; Kubernetes.enrichBuilds(builds); $scope.fetched = true; if (buildConfigId) { $scope.buildConfig = $scope.model.getBuildConfig(buildConfigId); } } } updateData(); /* $scope.$keepPolling = () => keepPollingModel; $scope.fetch = PollHelpers.setupPolling($scope, (next:() => void) => { var url = buildsRestURL(); $http.get(url). success(function (data, status, headers, config) { if (data) { //console.log("got data " + angular.toJson(data, true)); $scope.builds = enrichBuilds(data.items); $scope.fetched = true; if ($scope.model) { $scope.buildConfig = $scope.model.getBuildConfig($scope.buildConfigId); } } Core.$apply($scope); next(); }). error(function (data, status, headers, config) { log.warn("Failed to load " + url + " " + data + " " + status); Core.$apply($scope); next(); }); }); $scope.fetch(); */ }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { // controller for connecting to a remote container via jolokia Kubernetes.ConnectController = Kubernetes.controller("ConnectController", [ "$scope", "localStorage", "userDetails", "ConnectDialogService", "$browser", function ($scope, localStorage, userDetails, ConnectDialogService, $browser) { $scope.doConnect = function (entity) { var connectUrl = new URI().path(UrlHelpers.join(HawtioCore.documentBase(), '/java/index.html')); var returnTo = new URI().toString(); var title = entity.metadata.name || 'Untitled Container'; var token = userDetails.token || ''; connectUrl.hash(token).query({ jolokiaUrl: entity.$jolokiaUrl, title: title, returnTo: returnTo }); Kubernetes.log.debug("Connect URI: ", connectUrl.toString()); window.open(connectUrl.toString()); }; }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.DeploymentConfigController = Kubernetes.controller("DeploymentConfigController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.schema = KubernetesSchema; $scope.config = KubernetesSchema.definitions.os_deploy_DeploymentConfig; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); updateData(); function updateData() { $scope.item = null; if ($scope.id) { var url = Kubernetes.deploymentConfigRestUrl($scope.id); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.entity = data; Kubernetes.enrichDeploymentConfig(data); } $scope.fetched = true; Core.$apply($scope); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); } else { $scope.fetched = true; Core.$apply($scope); } } }]); })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.DeploymentConfigsController = Kubernetes.controller("DeploymentConfigsController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.$on('kubernetesModelUpdated', function () { Core.$apply($scope); }); $scope.labelClass = Kubernetes.containerLabelClass; $scope.tableConfig = { data: 'deploymentConfigs', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: 'metadata.name', displayName: 'Name', cellTemplate: $templateCache.get("deploymentConfigLinkTemplate.html") }, { field: 'metadata.namespace', displayName: 'Namespace' }, { field: '$imageChangeParams.automatic', displayName: 'Automatic' }, { field: '$imageChangeParams.$containerNames', displayName: 'Container Names' }, { field: '$imageChangeParams.from.name', displayName: 'From image' }, { field: '$imageChangeParams.tag', displayName: 'Tag' }, { field: 'template.controllerTemplate.podTemplate.tags', displayName: 'Labels', cellTemplate: $templateCache.get("deploymentConfigLabelTemplate.html") } ] }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.deletePrompt = function (selected) { UI.multiItemConfirmActionDialog({ collection: selected, index: '$name', onClose: function (result) { if (result) { function deleteSelected(selected, next) { if (next) { deleteEntity(next, function () { deleteSelected(selected, selected.shift()); }); } else { updateData(); } } deleteSelected(selected, selected.shift()); } }, title: 'Delete Deployment?', action: 'The following Deployments will be deleted:', okText: 'Delete', okClass: 'btn-danger', custom: "This operation is permanent once completed!", customClass: "alert alert-warning" }).open(); }; function deleteEntity(selection, nextCallback) { var name = (selection || {}).$name; if (name) { console.log("About to delete deployment config: " + name); var url = Kubernetes.deploymentConfigRestUrl(name); $http.delete(url). success(function (data, status, headers, config) { nextCallback(); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to delete deployment config on " + url + " " + data + " " + status); }); } else { console.log("warning: no name for selection: " + angular.toJson(selection)); } } function updateData() { var url = Kubernetes.deploymentConfigsRestURL(); $http.get(url). success(function (data, status, headers, config) { if (data) { //console.log("got data " + angular.toJson(data, true)); $scope.deploymentConfigs = Kubernetes.enrichDeploymentConfigs(data.items); $scope.fetched = true; Core.$apply($scope); } }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); } updateData(); }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.EventsController = Kubernetes.controller("EventsController", ["$scope", "KubernetesModel", "KubernetesServices", "KubernetesPods", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesServices, KubernetesPods, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; ControllerHelpers.bindModelToSearchParam($scope, $location, 'mode', 'mode', 'list'); $scope.tableConfig = { data: 'model.events', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: '$firstTimestamp', displayName: 'First Seen', cellTemplate: $templateCache.get("firstTimestampTemplate.html") }, { field: '$lastTimestamp', displayName: 'Last Seen', cellTemplate: $templateCache.get("lastTimestampTemplate.html") }, { field: 'count', displayName: 'Count' }, { field: 'involvedObject.name', displayName: 'Name', cellTemplate: $templateCache.get("eventNameTemplate.html") }, { field: 'involvedObject.kind', displayName: 'Kind', cellTemplate: $templateCache.get("eventKindTemplate.html") }, { field: 'involvedObject.fieldPath', displayName: 'Subject' }, { field: 'reason', displayName: 'Reason' }, { field: 'source', displayName: 'Source', cellTemplate: $templateCache.get("eventSourceTemplate.html") }, { field: 'message', displayName: 'Message' } ] }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); }]); })(Kubernetes || (Kubernetes = {})); /// /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.HostController = Kubernetes.controller("HostController", ["$scope", "KubernetesModel", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.rawModel = null; $scope.itemConfig = { properties: {} }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.flipRaw = function () { $scope.rawMode = !$scope.rawMode; Core.$apply($scope); }; updateData(); function updateData() { $scope.id = $routeParams["id"]; $scope.item = null; if ($scope.id) { var url = UrlHelpers.join(KubernetesApiURL, "nodes", $scope.id); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.item = data; } if ($scope.item) { $scope.rawModel = Kubernetes.toRawYaml($scope.item); } }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); } else { $scope.rawModel = null; Core.$apply($scope); } } }]); })(Kubernetes || (Kubernetes = {})); /// /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.HostsController = Kubernetes.controller("HostsController", ["$scope", "KubernetesModel", "KubernetesPods", "KubernetesState", "ServiceRegistry", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesPods, KubernetesState, ServiceRegistry, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.$on('kubernetesModelUpdated', function () { Core.$apply($scope); }); $scope.tableConfig = { data: 'model.hosts', showSelectionCheckbox: false, enableRowClickSelection: false, multiSelect: false, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: 'id', displayName: 'Name', defaultSort: true, cellTemplate: $templateCache.get("idTemplate.html") }, { field: 'hostIP', displayName: 'IP', customSortField: function (field) { // use a custom sort to sort ip address return Kubernetes.sortByPodIp(field.hostIP); } }, { field: '$podsLink', displayName: 'Pods', cellTemplate: $templateCache.get("podCountsAndLinkTemplate.html"), customSortField: function (field) { // need to concat all the pod counters var ready = field.$podCounters.ready || 0; var valid = field.$podCounters.valid || 0; var waiting = field.$podCounters.waiting || 0; var error = field.$podCounters.error || 0; return ready + valid + waiting + error; } } ] }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); }]); })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.ImageRepositoriesController = Kubernetes.controller("ImageRepositoriesController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.$on('kubernetesModelUpdated', function () { Core.$apply($scope); }); $scope.tableConfig = { data: 'imageRepositories', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: 'metadata.name', displayName: 'Name' }, { field: 'metadata.namespace', displayName: 'Namespace' }, { field: 'status.dockerImageRepository', displayName: 'Docker Registry' }, { field: 'tags', displayName: 'Tags', cellTemplate: $templateCache.get('imageRegistryLabelTemplate.html') } ] }; var labelColors = { 'prod': 'background-blue', 'valid': 'background-light-green', 'test': 'background-light-grey' }; $scope.labelClass = function (labelType) { if (!(labelType in labelColors)) { return 'mouse-pointer'; } else return labelColors[labelType] + ' mouse-pointer'; }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.deletePrompt = function (selected) { UI.multiItemConfirmActionDialog({ collection: selected, index: '$name', onClose: function (result) { if (result) { function deleteSelected(selected, next) { if (next) { deleteEntity(next, function () { deleteSelected(selected, selected.shift()); }); } else { updateData(); } } deleteSelected(selected, selected.shift()); } }, title: 'Delete Image Repository?', action: 'The following Image Repositories will be deleted:', okText: 'Delete', okClass: 'btn-danger', custom: "This operation is permanent once completed!", customClass: "alert alert-warning" }).open(); }; function deleteEntity(selection, nextCallback) { var name = (selection || {}).$name; if (name) { console.log("About to delete image repository: " + name); var url = Kubernetes.imageRepositoryRestUrl(name); $http.delete(url). success(function (data, status, headers, config) { nextCallback(); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to delete image repository on " + url + " " + data + " " + status); }); } else { console.log("warning: no name for selection: " + angular.toJson(selection)); } } function updateData() { var url = Kubernetes.imageRepositoriesRestURL(); $http.get(url). success(function (data, status, headers, config) { if (data) { //console.log("got data " + angular.toJson(data, true)); $scope.imageRepositories = Kubernetes.enrichImageRepositories(data.items); $scope.fetched = true; Core.$apply($scope); } }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); } updateData(); }]); })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { function selectSubNavBar($scope, tabName, newSubTabLabel) { var foundTab = null; angular.forEach($scope.subTabConfig, function (tab) { if (tabName === tab.label || tabName === tab.id) { foundTab = tab; } }); var breadcrumbConfig = $scope.breadcrumbConfig; if (foundTab && breadcrumbConfig) { breadcrumbConfig.push(foundTab); $scope.subTabConfig = [ { label: newSubTabLabel } ]; } } Kubernetes.selectSubNavBar = selectSubNavBar; })(Kubernetes || (Kubernetes = {})); /// var Kubernetes; (function (Kubernetes) { Kubernetes.schema = { "id": "http://fabric8.io/fabric8/v2/Schema#", "$schema": "http://json-schema.org/schema#", "definitions": { "api_RootPaths": { "type": "object", "description": "", "properties": { "paths": { "type": "array", "description": "", "items": { "type": "string", "description": "" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.RootPaths" }, "kubernetes_AWSElasticBlockStoreVolumeSource": { "type": "object", "description": "", "properties": { "fsType": { "type": "string", "description": "file system type to mount" }, "partition": { "type": "integer", "description": "partition on the disk to mount (e.g." }, "readOnly": { "type": "boolean", "description": "read-only if true" }, "volumeID": { "type": "string", "description": "unique id of the PD resource in AWS; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#awselasticblockstore" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.AWSElasticBlockStoreVolumeSource" }, "kubernetes_Capabilities": { "type": "object", "description": "", "properties": { "add": { "type": "array", "description": "added capabilities", "items": { "type": "string", "description": "added capabilities" } }, "drop": { "type": "array", "description": "droped capabilities", "items": { "type": "string", "description": "droped capabilities" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Capabilities" }, "kubernetes_CephFSVolumeSource": { "type": "object", "description": "", "properties": { "monitors": { "type": "array", "description": "a collection of Ceph monitors", "items": { "type": "string", "description": "a collection of Ceph monitors" } }, "readOnly": { "type": "boolean", "description": "Ceph fs to be mounted with read-only permissions" }, "secretFile": { "type": "string", "description": "path to secret for rados user; default is /etc/ceph/user.secret; optional" }, "secretRef": { "$ref": "#/definitions/kubernetes_LocalObjectReference", "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" }, "user": { "type": "string", "description": "rados user name; default is admin; optional" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.CephFSVolumeSource" }, "kubernetes_Container": { "type": "object", "description": "", "properties": { "args": { "type": "array", "description": "command array; the docker image's cmd is used if this is not provided; arguments to the entrypoint; cannot be updated; variable references $(VAR_NAME) are expanded using the container's environment variables; if a variable cannot be resolved", "items": { "type": "string", "description": "command array; the docker image's cmd is used if this is not provided; arguments to the entrypoint; cannot be updated; variable references $(VAR_NAME) are expanded using the container's environment variables; if a variable cannot be resolved" } }, "command": { "type": "array", "description": "entrypoint array; not executed within a shell; the docker image's entrypoint is used if this is not provided; cannot be updated; variable references $(VAR_NAME) are expanded using the container's environment variables; if a variable cannot be resolved", "items": { "type": "string", "description": "entrypoint array; not executed within a shell; the docker image's entrypoint is used if this is not provided; cannot be updated; variable references $(VAR_NAME) are expanded using the container's environment variables; if a variable cannot be resolved" } }, "env": { "type": "array", "description": "list of environment variables to set in the container; cannot be updated", "items": { "$ref": "#/definitions/kubernetes_EnvVar", "javaType": "io.fabric8.kubernetes.api.model.EnvVar" } }, "image": { "type": "string", "description": "Docker image name; see http://releases.k8s.io/HEAD/docs/user-guide/images.md" }, "imagePullPolicy": { "type": "string", "description": "image pull policy; one of Always" }, "lifecycle": { "$ref": "#/definitions/kubernetes_Lifecycle", "javaType": "io.fabric8.kubernetes.api.model.Lifecycle" }, "livenessProbe": { "$ref": "#/definitions/kubernetes_Probe", "javaType": "io.fabric8.kubernetes.api.model.Probe" }, "name": { "type": "string", "description": "name of the container; must be a DNS_LABEL and unique within the pod; cannot be updated", "maxLength": 63, "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" }, "ports": { "type": "array", "description": "list of ports to expose from the container; cannot be updated", "items": { "$ref": "#/definitions/kubernetes_ContainerPort", "javaType": "io.fabric8.kubernetes.api.model.ContainerPort" } }, "readinessProbe": { "$ref": "#/definitions/kubernetes_Probe", "javaType": "io.fabric8.kubernetes.api.model.Probe" }, "resources": { "$ref": "#/definitions/kubernetes_ResourceRequirements", "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" }, "securityContext": { "$ref": "#/definitions/kubernetes_SecurityContext", "javaType": "io.fabric8.kubernetes.api.model.SecurityContext" }, "stdin": { "type": "boolean", "description": "Whether this container should allocate a buffer for stdin in the container runtime; default is false" }, "terminationMessagePath": { "type": "string", "description": "path at which the file to which the container's termination message will be written is mounted into the container's filesystem; message written is intended to be brief final status" }, "tty": { "type": "boolean", "description": "Whether this container should allocate a TTY for itself" }, "volumeMounts": { "type": "array", "description": "pod volumes to mount into the container's filesyste; cannot be updated", "items": { "$ref": "#/definitions/kubernetes_VolumeMount", "javaType": "io.fabric8.kubernetes.api.model.VolumeMount" } }, "workingDir": { "type": "string", "description": "container's working directory; defaults to image's default; cannot be updated" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Container" }, "kubernetes_ContainerPort": { "type": "object", "description": "", "properties": { "containerPort": { "type": "integer", "description": "number of port to expose on the pod's IP address" }, "hostIP": { "type": "string", "description": "host IP to bind the port to" }, "hostPort": { "type": "integer", "description": "number of port to expose on the host; most containers do not need this" }, "name": { "type": "string", "description": "name for the port that can be referred to by services; must be an IANA_SVC_NAME and unique within the pod" }, "protocol": { "type": "string", "description": "protocol for port; must be UDP or TCP; TCP if unspecified" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ContainerPort" }, "kubernetes_ContainerState": { "type": "object", "description": "", "properties": { "running": { "$ref": "#/definitions/kubernetes_ContainerStateRunning", "javaType": "io.fabric8.kubernetes.api.model.ContainerStateRunning" }, "terminated": { "$ref": "#/definitions/kubernetes_ContainerStateTerminated", "javaType": "io.fabric8.kubernetes.api.model.ContainerStateTerminated" }, "waiting": { "$ref": "#/definitions/kubernetes_ContainerStateWaiting", "javaType": "io.fabric8.kubernetes.api.model.ContainerStateWaiting" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ContainerState" }, "kubernetes_ContainerStateRunning": { "type": "object", "description": "", "properties": { "startedAt": { "type": "string", "description": "time at which the container was last (re-)started" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ContainerStateRunning" }, "kubernetes_ContainerStateTerminated": { "type": "object", "description": "", "properties": { "containerID": { "type": "string", "description": "container's ID in the format 'docker://\u003ccontainer_id\u003e'" }, "exitCode": { "type": "integer", "description": "exit status from the last termination of the container" }, "finishedAt": { "type": "string", "description": "time at which the container last terminated" }, "message": { "type": "string", "description": "message regarding the last termination of the container" }, "reason": { "type": "string", "description": "(brief) reason from the last termination of the container" }, "signal": { "type": "integer", "description": "signal from the last termination of the container" }, "startedAt": { "type": "string", "description": "time at which previous execution of the container started" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ContainerStateTerminated" }, "kubernetes_ContainerStateWaiting": { "type": "object", "description": "", "properties": { "reason": { "type": "string", "description": "(brief) reason the container is not yet running" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ContainerStateWaiting" }, "kubernetes_ContainerStatus": { "type": "object", "description": "", "properties": { "containerID": { "type": "string", "description": "container's ID in the format 'docker://\u003ccontainer_id\u003e'; see http://releases.k8s.io/HEAD/docs/user-guide/container-environment.md#container-information" }, "image": { "type": "string", "description": "image of the container; see http://releases.k8s.io/HEAD/docs/user-guide/images.md" }, "imageID": { "type": "string", "description": "ID of the container's image" }, "lastState": { "$ref": "#/definitions/kubernetes_ContainerState", "javaType": "io.fabric8.kubernetes.api.model.ContainerState" }, "name": { "type": "string", "description": "name of the container; must be a DNS_LABEL and unique within the pod; cannot be updated", "maxLength": 63, "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" }, "ready": { "type": "boolean", "description": "specifies whether the container has passed its readiness probe" }, "restartCount": { "type": "integer", "description": "the number of times the container has been restarted" }, "state": { "$ref": "#/definitions/kubernetes_ContainerState", "javaType": "io.fabric8.kubernetes.api.model.ContainerState" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ContainerStatus" }, "kubernetes_EmptyDirVolumeSource": { "type": "object", "description": "", "properties": { "medium": { "type": "string", "description": "type of storage used to back the volume; must be an empty string (default) or Memory; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#emptydir" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.EmptyDirVolumeSource" }, "kubernetes_EndpointAddress": { "type": "object", "description": "", "properties": { "ip": { "type": "string", "description": "IP address of the endpoint" }, "targetRef": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.EndpointAddress" }, "kubernetes_EndpointPort": { "type": "object", "description": "", "properties": { "name": { "type": "string", "description": "name of this port", "maxLength": 63, "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" }, "port": { "type": "integer", "description": "port number of the endpoint" }, "protocol": { "type": "string", "description": "protocol for this port; must be UDP or TCP; TCP if unspecified" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.EndpointPort" }, "kubernetes_EndpointSubset": { "type": "object", "description": "", "properties": { "addresses": { "type": "array", "description": "IP addresses which offer the related ports", "items": { "$ref": "#/definitions/kubernetes_EndpointAddress", "javaType": "io.fabric8.kubernetes.api.model.EndpointAddress" } }, "ports": { "type": "array", "description": "port numbers available on the related IP addresses", "items": { "$ref": "#/definitions/kubernetes_EndpointPort", "javaType": "io.fabric8.kubernetes.api.model.EndpointPort" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.EndpointSubset" }, "kubernetes_Endpoints": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Endpoints", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "subsets": { "type": "array", "description": "sets of addresses and ports that comprise a service", "items": { "$ref": "#/definitions/kubernetes_EndpointSubset", "javaType": "io.fabric8.kubernetes.api.model.EndpointSubset" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Endpoints", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_EndpointsList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of endpoints", "items": { "$ref": "#/definitions/kubernetes_Endpoints", "javaType": "io.fabric8.kubernetes.api.model.Endpoints" } }, "kind": { "type": "string", "description": "", "default": "EndpointsList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.EndpointsList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_EnvVar": { "type": "object", "description": "", "properties": { "name": { "type": "string", "description": "name of the environment variable; must be a C_IDENTIFIER", "pattern": "^[A-Za-z_][A-Za-z0-9_]*$" }, "value": { "type": "string", "description": "value of the environment variable; defaults to empty string; variable references $(VAR_NAME) are expanded using the previously defined environment varibles in the container and any service environment variables; if a variable cannot be resolved" }, "valueFrom": { "$ref": "#/definitions/kubernetes_EnvVarSource", "javaType": "io.fabric8.kubernetes.api.model.EnvVarSource" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.EnvVar" }, "kubernetes_EnvVarSource": { "type": "object", "description": "", "properties": { "fieldRef": { "$ref": "#/definitions/kubernetes_ObjectFieldSelector", "javaType": "io.fabric8.kubernetes.api.model.ObjectFieldSelector" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.EnvVarSource" }, "kubernetes_Event": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "count": { "type": "integer", "description": "the number of times this event has occurred" }, "firstTimestamp": { "type": "string", "description": "the time at which the event was first recorded" }, "involvedObject": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "kind": { "type": "string", "description": "", "default": "Event", "required": true }, "lastTimestamp": { "type": "string", "description": "the time at which the most recent occurrence of this event was recorded" }, "message": { "type": "string", "description": "human-readable description of the status of this operation" }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "reason": { "type": "string", "description": "short" }, "source": { "$ref": "#/definitions/kubernetes_EventSource", "javaType": "io.fabric8.kubernetes.api.model.EventSource" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Event", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_EventList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of events", "items": { "$ref": "#/definitions/kubernetes_Event", "javaType": "io.fabric8.kubernetes.api.model.Event" } }, "kind": { "type": "string", "description": "", "default": "EventList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.EventList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_EventSource": { "type": "object", "description": "", "properties": { "component": { "type": "string", "description": "component that generated the event" }, "host": { "type": "string", "description": "name of the host where the event is generated" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.EventSource" }, "kubernetes_ExecAction": { "type": "object", "description": "", "properties": { "command": { "type": "array", "description": "command line to execute inside the container; working directory for the command is root ('/') in the container's file system; the command is exec'd", "items": { "type": "string", "description": "command line to execute inside the container; working directory for the command is root ('/') in the container's file system; the command is exec'd" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ExecAction" }, "kubernetes_GCEPersistentDiskVolumeSource": { "type": "object", "description": "", "properties": { "fsType": { "type": "string", "description": "file system type to mount" }, "partition": { "type": "integer", "description": "partition on the disk to mount (e.g." }, "pdName": { "type": "string", "description": "unique name of the PD resource in GCE; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#gcepersistentdisk" }, "readOnly": { "type": "boolean", "description": "read-only if true" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.GCEPersistentDiskVolumeSource" }, "kubernetes_GitRepoVolumeSource": { "type": "object", "description": "", "properties": { "repository": { "type": "string", "description": "repository URL" }, "revision": { "type": "string", "description": "commit hash for the specified revision" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.GitRepoVolumeSource" }, "kubernetes_GlusterfsVolumeSource": { "type": "object", "description": "", "properties": { "endpoints": { "type": "string", "description": "gluster hosts endpoints name; see http://releases.k8s.io/HEAD/examples/glusterfs/README.md#create-a-pod" }, "path": { "type": "string", "description": "path to gluster volume; see http://releases.k8s.io/HEAD/examples/glusterfs/README.md#create-a-pod" }, "readOnly": { "type": "boolean", "description": "glusterfs volume to be mounted with read-only permissions; see http://releases.k8s.io/HEAD/examples/glusterfs/README.md#create-a-pod" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.GlusterfsVolumeSource" }, "kubernetes_HTTPGetAction": { "type": "object", "description": "", "properties": { "host": { "type": "string", "description": "hostname to connect to; defaults to pod IP" }, "path": { "type": "string", "description": "path to access on the HTTP server" }, "port": { "$ref": "#/definitions/kubernetes_util_IntOrString", "javaType": "io.fabric8.kubernetes.api.model.IntOrString" }, "scheme": { "type": "string", "description": "scheme to connect with" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.HTTPGetAction" }, "kubernetes_Handler": { "type": "object", "description": "", "properties": { "exec": { "$ref": "#/definitions/kubernetes_ExecAction", "javaType": "io.fabric8.kubernetes.api.model.ExecAction" }, "httpGet": { "$ref": "#/definitions/kubernetes_HTTPGetAction", "javaType": "io.fabric8.kubernetes.api.model.HTTPGetAction" }, "tcpSocket": { "$ref": "#/definitions/kubernetes_TCPSocketAction", "javaType": "io.fabric8.kubernetes.api.model.TCPSocketAction" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Handler" }, "kubernetes_HostPathVolumeSource": { "type": "object", "description": "", "properties": { "path": { "type": "string", "description": "path of the directory on the host; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#hostpath" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.HostPathVolumeSource" }, "kubernetes_ISCSIVolumeSource": { "type": "object", "description": "", "properties": { "fsType": { "type": "string", "description": "file system type to mount" }, "iqn": { "type": "string", "description": "iSCSI Qualified Name" }, "lun": { "type": "integer", "description": "iscsi target lun number" }, "readOnly": { "type": "boolean", "description": "read-only if true" }, "targetPortal": { "type": "string", "description": "iSCSI target portal" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ISCSIVolumeSource" }, "kubernetes_Lifecycle": { "type": "object", "description": "", "properties": { "postStart": { "$ref": "#/definitions/kubernetes_Handler", "javaType": "io.fabric8.kubernetes.api.model.Handler" }, "preStop": { "$ref": "#/definitions/kubernetes_Handler", "javaType": "io.fabric8.kubernetes.api.model.Handler" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Lifecycle" }, "kubernetes_List": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of objects", "items": { "$ref": "#/definitions/kubernetes_runtime_RawExtension", "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" } }, "kind": { "type": "string", "description": "", "default": "List", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.BaseKubernetesList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_ListMeta": { "type": "object", "description": "", "properties": { "resourceVersion": { "type": "string", "description": "string that identifies the internal version of this object that can be used by clients to determine when objects have changed; populated by the system" }, "selfLink": { "type": "string", "description": "URL for the object; populated by the system" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ListMeta" }, "kubernetes_LoadBalancerIngress": { "type": "object", "description": "", "properties": { "hostname": { "type": "string", "description": "hostname of ingress point" }, "ip": { "type": "string", "description": "IP address of ingress point" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.LoadBalancerIngress" }, "kubernetes_LoadBalancerStatus": { "type": "object", "description": "", "properties": { "ingress": { "type": "array", "description": "load-balancer ingress points", "items": { "$ref": "#/definitions/kubernetes_LoadBalancerIngress", "javaType": "io.fabric8.kubernetes.api.model.LoadBalancerIngress" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.LoadBalancerStatus" }, "kubernetes_LocalObjectReference": { "type": "object", "description": "", "properties": { "name": { "type": "string", "description": "name of the referent; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" }, "kubernetes_MetadataFile": { "type": "object", "description": "", "properties": { "fieldRef": { "$ref": "#/definitions/kubernetes_ObjectFieldSelector", "javaType": "io.fabric8.kubernetes.api.model.ObjectFieldSelector" }, "name": { "type": "string", "description": "the name of the file to be created" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.MetadataFile" }, "kubernetes_MetadataVolumeSource": { "type": "object", "description": "", "properties": { "items": { "type": "array", "description": "list of metadata files", "items": { "$ref": "#/definitions/kubernetes_MetadataFile", "javaType": "io.fabric8.kubernetes.api.model.MetadataFile" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.MetadataVolumeSource" }, "kubernetes_NFSVolumeSource": { "type": "object", "description": "", "properties": { "path": { "type": "string", "description": "the path that is exported by the NFS server; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#nfs" }, "readOnly": { "type": "boolean", "description": "forces the NFS export to be mounted with read-only permissions; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#nfs" }, "server": { "type": "string", "description": "the hostname or IP address of the NFS server; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#nfs" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NFSVolumeSource" }, "kubernetes_Namespace": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Namespace", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/kubernetes_NamespaceSpec", "javaType": "io.fabric8.kubernetes.api.model.NamespaceSpec" }, "status": { "$ref": "#/definitions/kubernetes_NamespaceStatus", "javaType": "io.fabric8.kubernetes.api.model.NamespaceStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Namespace", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_NamespaceList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "items is the list of Namespace objects in the list; see http://releases.k8s.io/HEAD/docs/user-guide/namespaces.md", "items": { "$ref": "#/definitions/kubernetes_Namespace", "javaType": "io.fabric8.kubernetes.api.model.Namespace" } }, "kind": { "type": "string", "description": "", "default": "NamespaceList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NamespaceList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_NamespaceSpec": { "type": "object", "description": "", "properties": { "finalizers": { "type": "array", "description": "an opaque list of values that must be empty to permanently remove object from storage; see http://releases.k8s.io/HEAD/docs/design/namespaces.md#finalizers", "items": { "type": "string", "description": "an opaque list of values that must be empty to permanently remove object from storage; see http://releases.k8s.io/HEAD/docs/design/namespaces.md#finalizers" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NamespaceSpec" }, "kubernetes_NamespaceStatus": { "type": "object", "description": "", "properties": { "phase": { "type": "string", "description": "phase is the current lifecycle phase of the namespace; see http://releases.k8s.io/HEAD/docs/design/namespaces.md#phases" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NamespaceStatus" }, "kubernetes_Node": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Node", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/kubernetes_NodeSpec", "javaType": "io.fabric8.kubernetes.api.model.NodeSpec" }, "status": { "$ref": "#/definitions/kubernetes_NodeStatus", "javaType": "io.fabric8.kubernetes.api.model.NodeStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Node", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_NodeAddress": { "type": "object", "description": "", "properties": { "address": { "type": "string", "description": "the node address" }, "type": { "type": "string", "description": "node address type" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NodeAddress" }, "kubernetes_NodeCondition": { "type": "object", "description": "", "properties": { "lastHeartbeatTime": { "type": "string", "description": "last time we got an update on a given condition" }, "lastTransitionTime": { "type": "string", "description": "last time the condition transit from one status to another" }, "message": { "type": "string", "description": "human readable message indicating details about last transition" }, "reason": { "type": "string", "description": "(brief) reason for the condition's last transition" }, "status": { "type": "string", "description": "status of the condition" }, "type": { "type": "string", "description": "type of node condition" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NodeCondition" }, "kubernetes_NodeList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of nodes", "items": { "$ref": "#/definitions/kubernetes_Node", "javaType": "io.fabric8.kubernetes.api.model.Node" } }, "kind": { "type": "string", "description": "", "default": "NodeList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NodeList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_NodeSpec": { "type": "object", "description": "", "properties": { "externalID": { "type": "string", "description": "deprecated. External ID assigned to the node by some machine database (e.g. a cloud provider). Defaults to node name when empty." }, "podCIDR": { "type": "string", "description": "pod IP range assigned to the node" }, "providerID": { "type": "string", "description": "ID of the node assigned by the cloud provider in the format: \u003cProviderName\u003e://\u003cProviderSpecificNodeID\u003e" }, "unschedulable": { "type": "boolean", "description": "disable pod scheduling on the node; see http://releases.k8s.io/HEAD/docs/admin/node.md#manual-node-administration" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NodeSpec" }, "kubernetes_NodeStatus": { "type": "object", "description": "", "properties": { "addresses": { "type": "array", "description": "list of addresses reachable to the node; see http://releases.k8s.io/HEAD/docs/admin/node.md#node-addresses", "items": { "$ref": "#/definitions/kubernetes_NodeAddress", "javaType": "io.fabric8.kubernetes.api.model.NodeAddress" } }, "capacity": { "type": "object", "description": "compute resource capacity of the node; see http://releases.k8s.io/HEAD/docs/user-guide/compute-resources.md", "additionalProperties": { "$ref": "#/definitions/kubernetes_resource_Quantity", "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" }, "conditions": { "type": "array", "description": "list of node conditions observed; see http://releases.k8s.io/HEAD/docs/admin/node.md#node-condition", "items": { "$ref": "#/definitions/kubernetes_NodeCondition", "javaType": "io.fabric8.kubernetes.api.model.NodeCondition" } }, "nodeInfo": { "$ref": "#/definitions/kubernetes_NodeSystemInfo", "javaType": "io.fabric8.kubernetes.api.model.NodeSystemInfo" }, "phase": { "type": "string", "description": "most recently observed lifecycle phase of the node; see http://releases.k8s.io/HEAD/docs/admin/node.md#node-phase" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NodeStatus" }, "kubernetes_NodeSystemInfo": { "type": "object", "description": "", "properties": { "bootID": { "type": "string", "description": "boot id is the boot-id reported by the node" }, "containerRuntimeVersion": { "type": "string", "description": "Container runtime version reported by the node through runtime remote API (e.g. docker://1.5.0)" }, "kernelVersion": { "type": "string", "description": "Kernel version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64)" }, "kubeProxyVersion": { "type": "string", "description": "Kube-proxy version reported by the node" }, "kubeletVersion": { "type": "string", "description": "Kubelet version reported by the node" }, "machineID": { "type": "string", "description": "machine-id reported by the node" }, "osImage": { "type": "string", "description": "OS image used reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy))" }, "systemUUID": { "type": "string", "description": "system-uuid reported by the node" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NodeSystemInfo" }, "kubernetes_ObjectFieldSelector": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "version of the schema that fieldPath is written in terms of; defaults to v1" }, "fieldPath": { "type": "string", "description": "path of the field to select in the specified API version" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ObjectFieldSelector" }, "kubernetes_ObjectMeta": { "type": "object", "description": "", "properties": { "annotations": { "type": "object", "description": "map of string keys and values that can be used by external tooling to store and retrieve arbitrary metadata about objects; see http://releases.k8s.io/HEAD/docs/user-guide/annotations.md", "additionalProperties": { "type": "string", "description": "map of string keys and values that can be used by external tooling to store and retrieve arbitrary metadata about objects; see http://releases.k8s.io/HEAD/docs/user-guide/annotations.md" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "creationTimestamp": { "type": "string", "description": "RFC 3339 date and time at which the object was created; populated by the system" }, "deletionTimestamp": { "type": "string", "description": "RFC 3339 date and time at which the object will be deleted; populated by the system when a graceful deletion is requested" }, "generateName": { "type": "string", "description": "an optional prefix to use to generate a unique name; has the same validation rules as name; optional" }, "generation": { "type": "integer", "description": "a sequence number representing a specific generation of the desired state; populated by the system; read-only", "javaType": "Long" }, "labels": { "type": "object", "description": "map of string keys and values that can be used to organize and categorize objects; may match selectors of replication controllers and services; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md", "additionalProperties": { "type": "string", "description": "map of string keys and values that can be used to organize and categorize objects; may match selectors of replication controllers and services; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "name": { "type": "string", "description": "string that identifies an object. Must be unique within a namespace; cannot be updated; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names", "maxLength": 63, "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" }, "namespace": { "type": "string", "description": "namespace of the object; must be a DNS_LABEL; cannot be updated; see http://releases.k8s.io/HEAD/docs/user-guide/namespaces.md", "maxLength": 253, "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$" }, "resourceVersion": { "type": "string", "description": "string that identifies the internal version of this object that can be used by clients to determine when objects have changed; populated by the system" }, "selfLink": { "type": "string", "description": "URL for the object; populated by the system" }, "uid": { "type": "string", "description": "unique UUID across space and time; populated by the system; read-only; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#uids" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "kubernetes_ObjectReference": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "API version of the referent" }, "fieldPath": { "type": "string", "description": "if referring to a piece of an object instead of an entire object" }, "kind": { "type": "string", "description": "kind of the referent; see http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds" }, "name": { "type": "string", "description": "name of the referent; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names" }, "namespace": { "type": "string", "description": "namespace of the referent; see http://releases.k8s.io/HEAD/docs/user-guide/namespaces.md" }, "resourceVersion": { "type": "string", "description": "specific resourceVersion to which this reference is made" }, "uid": { "type": "string", "description": "uid of the referent; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#uids" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "kubernetes_PersistentVolume": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "PersistentVolume", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/kubernetes_PersistentVolumeSpec", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeSpec" }, "status": { "$ref": "#/definitions/kubernetes_PersistentVolumeStatus", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolume", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_PersistentVolumeClaim": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "PersistentVolumeClaim", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/kubernetes_PersistentVolumeClaimSpec", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimSpec" }, "status": { "$ref": "#/definitions/kubernetes_PersistentVolumeClaimStatus", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaim", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_PersistentVolumeClaimList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "a list of persistent volume claims; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#persistentvolumeclaims", "items": { "$ref": "#/definitions/kubernetes_PersistentVolumeClaim", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaim" } }, "kind": { "type": "string", "description": "", "default": "PersistentVolumeClaimList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_PersistentVolumeClaimSpec": { "type": "object", "description": "", "properties": { "accessModes": { "type": "array", "description": "the desired access modes the volume should have; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes-1", "items": { "type": "string", "description": "the desired access modes the volume should have; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes-1" } }, "resources": { "$ref": "#/definitions/kubernetes_ResourceRequirements", "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" }, "volumeName": { "type": "string", "description": "the binding reference to the persistent volume backing this claim" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimSpec" }, "kubernetes_PersistentVolumeClaimStatus": { "type": "object", "description": "", "properties": { "accessModes": { "type": "array", "description": "the actual access modes the volume has; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes-1", "items": { "type": "string", "description": "the actual access modes the volume has; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes-1" } }, "capacity": { "type": "object", "description": "the actual resources the volume has", "additionalProperties": { "$ref": "#/definitions/kubernetes_resource_Quantity", "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" }, "phase": { "type": "string", "description": "the current phase of the claim" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimStatus" }, "kubernetes_PersistentVolumeClaimVolumeSource": { "type": "object", "description": "", "properties": { "claimName": { "type": "string", "description": "the name of the claim in the same namespace to be mounted as a volume; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#persistentvolumeclaims" }, "readOnly": { "type": "boolean", "description": "mount volume as read-only when true; default false" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimVolumeSource" }, "kubernetes_PersistentVolumeList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of persistent volumes; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md", "items": { "$ref": "#/definitions/kubernetes_PersistentVolume", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolume" } }, "kind": { "type": "string", "description": "", "default": "PersistentVolumeList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_PersistentVolumeSource": { "type": "object", "description": "", "properties": { "awsElasticBlockStore": { "$ref": "#/definitions/kubernetes_AWSElasticBlockStoreVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.AWSElasticBlockStoreVolumeSource" }, "cephfs": { "$ref": "#/definitions/kubernetes_CephFSVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.CephFSVolumeSource" }, "gcePersistentDisk": { "$ref": "#/definitions/kubernetes_GCEPersistentDiskVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GCEPersistentDiskVolumeSource" }, "glusterfs": { "$ref": "#/definitions/kubernetes_GlusterfsVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GlusterfsVolumeSource" }, "hostPath": { "$ref": "#/definitions/kubernetes_HostPathVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.HostPathVolumeSource" }, "iscsi": { "$ref": "#/definitions/kubernetes_ISCSIVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.ISCSIVolumeSource" }, "nfs": { "$ref": "#/definitions/kubernetes_NFSVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.NFSVolumeSource" }, "rbd": { "$ref": "#/definitions/kubernetes_RBDVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.RBDVolumeSource" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeSource" }, "kubernetes_PersistentVolumeSpec": { "type": "object", "description": "", "properties": { "accessModes": { "type": "array", "description": "all ways the volume can be mounted; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes", "items": { "type": "string", "description": "all ways the volume can be mounted; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes" } }, "awsElasticBlockStore": { "$ref": "#/definitions/kubernetes_AWSElasticBlockStoreVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.AWSElasticBlockStoreVolumeSource" }, "capacity": { "type": "object", "description": "a description of the persistent volume's resources and capacityr; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#capacity", "additionalProperties": { "$ref": "#/definitions/kubernetes_resource_Quantity", "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" }, "cephfs": { "$ref": "#/definitions/kubernetes_CephFSVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.CephFSVolumeSource" }, "claimRef": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "gcePersistentDisk": { "$ref": "#/definitions/kubernetes_GCEPersistentDiskVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GCEPersistentDiskVolumeSource" }, "glusterfs": { "$ref": "#/definitions/kubernetes_GlusterfsVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GlusterfsVolumeSource" }, "hostPath": { "$ref": "#/definitions/kubernetes_HostPathVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.HostPathVolumeSource" }, "iscsi": { "$ref": "#/definitions/kubernetes_ISCSIVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.ISCSIVolumeSource" }, "nfs": { "$ref": "#/definitions/kubernetes_NFSVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.NFSVolumeSource" }, "persistentVolumeReclaimPolicy": { "type": "string", "description": "what happens to a volume when released from its claim; Valid options are Retain (default) and Recycle. Recyling must be supported by the volume plugin underlying this persistent volume. See http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#recycling-policy" }, "rbd": { "$ref": "#/definitions/kubernetes_RBDVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.RBDVolumeSource" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeSpec" }, "kubernetes_PersistentVolumeStatus": { "type": "object", "description": "", "properties": { "message": { "type": "string", "description": "human-readable message indicating details about why the volume is in this state" }, "phase": { "type": "string", "description": "the current phase of a persistent volume; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#phase" }, "reason": { "type": "string", "description": "(brief) reason the volume is not is not available" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeStatus" }, "kubernetes_Pod": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Pod", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/kubernetes_PodSpec", "javaType": "io.fabric8.kubernetes.api.model.PodSpec" }, "status": { "$ref": "#/definitions/kubernetes_PodStatus", "javaType": "io.fabric8.kubernetes.api.model.PodStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Pod", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_PodCondition": { "type": "object", "description": "", "properties": { "status": { "type": "string", "description": "status of the condition" }, "type": { "type": "string", "description": "kind of the condition" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PodCondition" }, "kubernetes_PodList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of pods; see http://releases.k8s.io/HEAD/docs/user-guide/pods.md", "items": { "$ref": "#/definitions/kubernetes_Pod", "javaType": "io.fabric8.kubernetes.api.model.Pod" } }, "kind": { "type": "string", "description": "", "default": "PodList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PodList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_PodSpec": { "type": "object", "description": "", "properties": { "activeDeadlineSeconds": { "type": "integer", "description": "", "javaType": "Long" }, "containers": { "type": "array", "description": "list of containers belonging to the pod; cannot be updated; containers cannot currently be added or removed; there must be at least one container in a Pod; see http://releases.k8s.io/HEAD/docs/user-guide/containers.md", "items": { "$ref": "#/definitions/kubernetes_Container", "javaType": "io.fabric8.kubernetes.api.model.Container" } }, "dnsPolicy": { "type": "string", "description": "DNS policy for containers within the pod; one of 'ClusterFirst' or 'Default'" }, "host": { "type": "string", "description": "deprecated" }, "hostNetwork": { "type": "boolean", "description": "host networking requested for this pod" }, "imagePullSecrets": { "type": "array", "description": "list of references to secrets in the same namespace available for pulling the container images; see http://releases.k8s.io/HEAD/docs/user-guide/images.md#specifying-imagepullsecrets-on-a-pod", "items": { "$ref": "#/definitions/kubernetes_LocalObjectReference", "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" } }, "nodeName": { "type": "string", "description": "node requested for this pod" }, "nodeSelector": { "type": "object", "description": "selector which must match a node's labels for the pod to be scheduled on that node; see http://releases.k8s.io/HEAD/docs/user-guide/node-selection/README.md", "additionalProperties": { "type": "string", "description": "selector which must match a node's labels for the pod to be scheduled on that node; see http://releases.k8s.io/HEAD/docs/user-guide/node-selection/README.md" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "restartPolicy": { "type": "string", "description": "restart policy for all containers within the pod; one of Always" }, "serviceAccount": { "type": "string", "description": "deprecated; use serviceAccountName instead" }, "serviceAccountName": { "type": "string", "description": "name of the ServiceAccount to use to run this pod; see http://releases.k8s.io/HEAD/docs/design/service_accounts.md" }, "terminationGracePeriodSeconds": { "type": "integer", "description": "optional duration in seconds the pod needs to terminate gracefully; may be decreased in delete request; value must be non-negative integer; the value zero indicates delete immediately; if this value is not set", "javaType": "Long" }, "volumes": { "type": "array", "description": "list of volumes that can be mounted by containers belonging to the pod; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md", "items": { "$ref": "#/definitions/kubernetes_Volume", "javaType": "io.fabric8.kubernetes.api.model.Volume" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PodSpec" }, "kubernetes_PodStatus": { "type": "object", "description": "", "properties": { "conditions": { "type": "array", "description": "current service state of pod; see http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#pod-conditions", "items": { "$ref": "#/definitions/kubernetes_PodCondition", "javaType": "io.fabric8.kubernetes.api.model.PodCondition" } }, "containerStatuses": { "type": "array", "description": "list of container statuses; see http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#container-statuses", "items": { "$ref": "#/definitions/kubernetes_ContainerStatus", "javaType": "io.fabric8.kubernetes.api.model.ContainerStatus" } }, "hostIP": { "type": "string", "description": "IP address of the host to which the pod is assigned; empty if not yet scheduled" }, "message": { "type": "string", "description": "human readable message indicating details about why the pod is in this condition" }, "phase": { "type": "string", "description": "current condition of the pod; see http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#pod-phase" }, "podIP": { "type": "string", "description": "IP address allocated to the pod; routable at least within the cluster; empty if not yet allocated" }, "reason": { "type": "string", "description": "(brief-CamelCase) reason indicating details about why the pod is in this condition" }, "startTime": { "type": "string", "description": "RFC 3339 date and time at which the object was acknowledged by the Kubelet. This is before the Kubelet pulled the container image(s) for the pod." } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PodStatus" }, "kubernetes_PodTemplateSpec": { "type": "object", "description": "", "properties": { "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/kubernetes_PodSpec", "javaType": "io.fabric8.kubernetes.api.model.PodSpec" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PodTemplateSpec" }, "kubernetes_Probe": { "type": "object", "description": "", "properties": { "exec": { "$ref": "#/definitions/kubernetes_ExecAction", "javaType": "io.fabric8.kubernetes.api.model.ExecAction" }, "httpGet": { "$ref": "#/definitions/kubernetes_HTTPGetAction", "javaType": "io.fabric8.kubernetes.api.model.HTTPGetAction" }, "initialDelaySeconds": { "type": "integer", "description": "number of seconds after the container has started before liveness probes are initiated; see http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#container-probes", "javaType": "Long" }, "tcpSocket": { "$ref": "#/definitions/kubernetes_TCPSocketAction", "javaType": "io.fabric8.kubernetes.api.model.TCPSocketAction" }, "timeoutSeconds": { "type": "integer", "description": "number of seconds after which liveness probes timeout; defaults to 1 second; see http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#container-probes", "javaType": "Long" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Probe" }, "kubernetes_RBDVolumeSource": { "type": "object", "description": "", "properties": { "fsType": { "type": "string", "description": "file system type to mount" }, "image": { "type": "string", "description": "rados image name; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" }, "keyring": { "type": "string", "description": "keyring is the path to key ring for rados user; default is /etc/ceph/keyring; optional; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" }, "monitors": { "type": "array", "description": "a collection of Ceph monitors; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it", "items": { "type": "string", "description": "a collection of Ceph monitors; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" } }, "pool": { "type": "string", "description": "rados pool name; default is rbd; optional; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" }, "readOnly": { "type": "boolean", "description": "rbd volume to be mounted with read-only permissions; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" }, "secretRef": { "$ref": "#/definitions/kubernetes_LocalObjectReference", "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" }, "user": { "type": "string", "description": "rados user name; default is admin; optional; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.RBDVolumeSource" }, "kubernetes_ReplicationController": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "ReplicationController", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/kubernetes_ReplicationControllerSpec", "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerSpec" }, "status": { "$ref": "#/definitions/kubernetes_ReplicationControllerStatus", "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ReplicationController", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_ReplicationControllerList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of replication controllers; see http://releases.k8s.io/HEAD/docs/user-guide/replication-controller.md", "items": { "$ref": "#/definitions/kubernetes_ReplicationController", "javaType": "io.fabric8.kubernetes.api.model.ReplicationController" } }, "kind": { "type": "string", "description": "", "default": "ReplicationControllerList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_ReplicationControllerSpec": { "type": "object", "description": "", "properties": { "replicas": { "type": "integer", "description": "number of replicas desired; defaults to 1; see http://releases.k8s.io/HEAD/docs/user-guide/replication-controller.md#what-is-a-replication-controller" }, "selector": { "type": "object", "description": "label keys and values that must match in order to be controlled by this replication controller", "additionalProperties": { "type": "string", "description": "label keys and values that must match in order to be controlled by this replication controller" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "template": { "$ref": "#/definitions/kubernetes_PodTemplateSpec", "javaType": "io.fabric8.kubernetes.api.model.PodTemplateSpec" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerSpec" }, "kubernetes_ReplicationControllerStatus": { "type": "object", "description": "", "properties": { "observedGeneration": { "type": "integer", "description": "reflects the generation of the most recently observed replication controller", "javaType": "Long" }, "replicas": { "type": "integer", "description": "most recently oberved number of replicas; see http://releases.k8s.io/HEAD/docs/user-guide/replication-controller.md#what-is-a-replication-controller" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerStatus" }, "kubernetes_ResourceQuota": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "ResourceQuota", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/kubernetes_ResourceQuotaSpec", "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaSpec" }, "status": { "$ref": "#/definitions/kubernetes_ResourceQuotaStatus", "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ResourceQuota", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_ResourceQuotaList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "items is a list of ResourceQuota objects; see http://releases.k8s.io/HEAD/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota", "items": { "$ref": "#/definitions/kubernetes_ResourceQuota", "javaType": "io.fabric8.kubernetes.api.model.ResourceQuota" } }, "kind": { "type": "string", "description": "", "default": "ResourceQuotaList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_ResourceQuotaSpec": { "type": "object", "description": "", "properties": { "hard": { "type": "object", "description": "hard is the set of desired hard limits for each named resource; see http://releases.k8s.io/HEAD/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota", "additionalProperties": { "$ref": "#/definitions/kubernetes_resource_Quantity", "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaSpec" }, "kubernetes_ResourceQuotaStatus": { "type": "object", "description": "", "properties": { "hard": { "type": "object", "description": "hard is the set of enforced hard limits for each named resource; see http://releases.k8s.io/HEAD/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota", "additionalProperties": { "$ref": "#/definitions/kubernetes_resource_Quantity", "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" }, "used": { "type": "object", "description": "used is the current observed total usage of the resource in the namespace", "additionalProperties": { "$ref": "#/definitions/kubernetes_resource_Quantity", "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaStatus" }, "kubernetes_ResourceRequirements": { "type": "object", "description": "", "properties": { "limits": { "type": "object", "description": "Maximum amount of compute resources allowed; see http://releases.k8s.io/HEAD/docs/design/resources.md#resource-specifications", "additionalProperties": { "$ref": "#/definitions/kubernetes_resource_Quantity", "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" }, "requests": { "type": "object", "description": "Minimum amount of resources requested; if Requests is omitted for a container", "additionalProperties": { "$ref": "#/definitions/kubernetes_resource_Quantity", "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" }, "kubernetes_RunAsUserStrategyOptions": { "type": "object", "description": "", "properties": { "type": { "type": "string", "description": "strategy used to generate RunAsUser" }, "uid": { "type": "integer", "description": "the uid to always run as; required for MustRunAs", "javaType": "Long" }, "uidRangeMax": { "type": "integer", "description": "max value for range based allocators", "javaType": "Long" }, "uidRangeMin": { "type": "integer", "description": "min value for range based allocators", "javaType": "Long" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.RunAsUserStrategyOptions" }, "kubernetes_SELinuxContextStrategyOptions": { "type": "object", "description": "", "properties": { "seLinuxOptions": { "$ref": "#/definitions/kubernetes_SELinuxOptions", "javaType": "io.fabric8.kubernetes.api.model.SELinuxOptions" }, "type": { "type": "string", "description": "strategy used to generate the SELinux context" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.SELinuxContextStrategyOptions" }, "kubernetes_SELinuxOptions": { "type": "object", "description": "", "properties": { "level": { "type": "string", "description": "the level label to apply to the container; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md" }, "role": { "type": "string", "description": "the role label to apply to the container; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md" }, "type": { "type": "string", "description": "the type label to apply to the container; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md" }, "user": { "type": "string", "description": "the user label to apply to the container; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.SELinuxOptions" }, "kubernetes_Secret": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "data": { "type": "object", "description": "data contains the secret data. Each key must be a valid DNS_SUBDOMAIN or leading dot followed by valid DNS_SUBDOMAIN. Each value must be a base64 encoded string as described in https://tools.ietf.org/html/rfc4648#section-4", "additionalProperties": { "type": "string", "description": "data contains the secret data. Each key must be a valid DNS_SUBDOMAIN or leading dot followed by valid DNS_SUBDOMAIN. Each value must be a base64 encoded string as described in https://tools.ietf.org/html/rfc4648#section-4" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "kind": { "type": "string", "description": "", "default": "Secret", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "type": { "type": "string", "description": "type facilitates programmatic handling of secret data" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Secret", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_SecretList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "items is a list of secret objects; see http://releases.k8s.io/HEAD/docs/user-guide/secrets.md", "items": { "$ref": "#/definitions/kubernetes_Secret", "javaType": "io.fabric8.kubernetes.api.model.Secret" } }, "kind": { "type": "string", "description": "", "default": "SecretList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.SecretList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_SecretVolumeSource": { "type": "object", "description": "", "properties": { "secretName": { "type": "string", "description": "secretName is the name of a secret in the pod's namespace; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#secrets" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.SecretVolumeSource" }, "kubernetes_SecurityContext": { "type": "object", "description": "", "properties": { "capabilities": { "$ref": "#/definitions/kubernetes_Capabilities", "javaType": "io.fabric8.kubernetes.api.model.Capabilities" }, "privileged": { "type": "boolean", "description": "run the container in privileged mode; see http://releases.k8s.io/HEAD/docs/design/security_context.md#security-context" }, "runAsNonRoot": { "type": "boolean", "description": "indicates the container must be run as a non-root user either by specifying the runAsUser or in the image specification" }, "runAsUser": { "type": "integer", "description": "the user id that runs the first process in the container; see http://releases.k8s.io/HEAD/docs/design/security_context.md#security-context", "javaType": "Long" }, "seLinuxOptions": { "$ref": "#/definitions/kubernetes_SELinuxOptions", "javaType": "io.fabric8.kubernetes.api.model.SELinuxOptions" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.SecurityContext" }, "kubernetes_SecurityContextConstraints": { "type": "object", "description": "", "properties": { "allowHostDirVolumePlugin": { "type": "boolean", "description": "allow the use of the host dir volume plugin" }, "allowHostNetwork": { "type": "boolean", "description": "allow the use of the hostNetwork in the pod spec" }, "allowHostPorts": { "type": "boolean", "description": "allow the use of the host ports in the containers" }, "allowPrivilegedContainer": { "type": "boolean", "description": "allow containers to run as privileged" }, "allowedCapabilities": { "type": "array", "description": "capabilities that are allowed to be added", "items": { "type": "string", "description": "capabilities that are allowed to be added" } }, "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "groups": { "type": "array", "description": "groups allowed to use this SecurityContextConstraints", "items": { "type": "string", "description": "groups allowed to use this SecurityContextConstraints" } }, "kind": { "type": "string", "description": "", "default": "SecurityContextConstraints", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "runAsUser": { "$ref": "#/definitions/kubernetes_RunAsUserStrategyOptions", "javaType": "io.fabric8.kubernetes.api.model.RunAsUserStrategyOptions" }, "seLinuxContext": { "$ref": "#/definitions/kubernetes_SELinuxContextStrategyOptions", "javaType": "io.fabric8.kubernetes.api.model.SELinuxContextStrategyOptions" }, "users": { "type": "array", "description": "users allowed to use this SecurityContextConstraints", "items": { "type": "string", "description": "users allowed to use this SecurityContextConstraints" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.SecurityContextConstraints", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_SecurityContextConstraintsList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "", "items": { "$ref": "#/definitions/kubernetes_SecurityContextConstraints", "javaType": "io.fabric8.kubernetes.api.model.SecurityContextConstraints" } }, "kind": { "type": "string", "description": "", "default": "SecurityContextConstraintsList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.SecurityContextConstraintsList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_Service": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Service", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/kubernetes_ServiceSpec", "javaType": "io.fabric8.kubernetes.api.model.ServiceSpec" }, "status": { "$ref": "#/definitions/kubernetes_ServiceStatus", "javaType": "io.fabric8.kubernetes.api.model.ServiceStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Service", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_ServiceAccount": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "imagePullSecrets": { "type": "array", "description": "list of references to secrets in the same namespace available for pulling container images; see http://releases.k8s.io/HEAD/docs/user-guide/secrets.md#manually-specifying-an-imagepullsecret", "items": { "$ref": "#/definitions/kubernetes_LocalObjectReference", "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" } }, "kind": { "type": "string", "description": "", "default": "ServiceAccount", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "secrets": { "type": "array", "description": "list of secrets that can be used by pods running as this service account; see http://releases.k8s.io/HEAD/docs/user-guide/secrets.md", "items": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ServiceAccount", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_ServiceAccountList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of ServiceAccounts; see http://releases.k8s.io/HEAD/docs/design/service_accounts.md#service-accounts", "items": { "$ref": "#/definitions/kubernetes_ServiceAccount", "javaType": "io.fabric8.kubernetes.api.model.ServiceAccount" } }, "kind": { "type": "string", "description": "", "default": "ServiceAccountList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ServiceAccountList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_ServiceList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of services", "items": { "$ref": "#/definitions/kubernetes_Service", "javaType": "io.fabric8.kubernetes.api.model.Service" } }, "kind": { "type": "string", "description": "", "default": "ServiceList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ServiceList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_ServicePort": { "type": "object", "description": "", "properties": { "name": { "type": "string", "description": "the name of this port; optional if only one port is defined", "maxLength": 63, "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" }, "nodePort": { "type": "integer", "description": "the port on each node on which this service is exposed when type=NodePort or LoadBalancer; usually assigned by the system; if specified" }, "port": { "type": "integer", "description": "the port number that is exposed" }, "protocol": { "type": "string", "description": "the protocol used by this port; must be UDP or TCP; TCP if unspecified" }, "targetPort": { "$ref": "#/definitions/kubernetes_util_IntOrString", "javaType": "io.fabric8.kubernetes.api.model.IntOrString" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ServicePort" }, "kubernetes_ServiceSpec": { "type": "object", "description": "", "properties": { "clusterIP": { "type": "string", "description": "IP address of the service; usually assigned by the system; if specified" }, "deprecatedPublicIPs": { "type": "array", "description": "deprecated. externally visible IPs (e.g. load balancers) that should be proxied to this service", "items": { "type": "string", "description": "deprecated. externally visible IPs (e.g. load balancers) that should be proxied to this service" } }, "portalIP": { "type": "string", "description": "deprecated" }, "ports": { "type": "array", "description": "ports exposed by the service; see http://releases.k8s.io/HEAD/docs/user-guide/services.md#virtual-ips-and-service-proxies", "items": { "$ref": "#/definitions/kubernetes_ServicePort", "javaType": "io.fabric8.kubernetes.api.model.ServicePort" } }, "selector": { "type": "object", "description": "label keys and values that must match in order to receive traffic for this service; if empty", "additionalProperties": { "type": "string", "description": "label keys and values that must match in order to receive traffic for this service; if empty" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "sessionAffinity": { "type": "string", "description": "enable client IP based session affinity; must be ClientIP or None; defaults to None; see http://releases.k8s.io/HEAD/docs/user-guide/services.md#virtual-ips-and-service-proxies" }, "type": { "type": "string", "description": "type of this service; must be ClusterIP" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ServiceSpec" }, "kubernetes_ServiceStatus": { "type": "object", "description": "", "properties": { "loadBalancer": { "$ref": "#/definitions/kubernetes_LoadBalancerStatus", "javaType": "io.fabric8.kubernetes.api.model.LoadBalancerStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ServiceStatus" }, "kubernetes_Status": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "code": { "type": "integer", "description": "suggested HTTP return code for this status; 0 if not set" }, "details": { "$ref": "#/definitions/kubernetes_StatusDetails", "javaType": "io.fabric8.kubernetes.api.model.StatusDetails" }, "kind": { "type": "string", "description": "", "default": "Status", "required": true }, "message": { "type": "string", "description": "human-readable description of the status of this operation" }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" }, "reason": { "type": "string", "description": "machine-readable description of why this operation is in the 'Failure' status; if this value is empty there is no information available; a reason clarifies an HTTP status code but does not override it" }, "status": { "type": "string", "description": "status of the operation; either Success" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Status" }, "kubernetes_StatusCause": { "type": "object", "description": "", "properties": { "field": { "type": "string", "description": "field of the resource that has caused this error" }, "message": { "type": "string", "description": "human-readable description of the cause of the error; this field may be presented as-is to a reader" }, "reason": { "type": "string", "description": "machine-readable description of the cause of the error; if this value is empty there is no information available" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.StatusCause" }, "kubernetes_StatusDetails": { "type": "object", "description": "", "properties": { "causes": { "type": "array", "description": "the Causes array includes more details associated with the StatusReason failure; not all StatusReasons may provide detailed causes", "items": { "$ref": "#/definitions/kubernetes_StatusCause", "javaType": "io.fabric8.kubernetes.api.model.StatusCause" } }, "kind": { "type": "string", "description": "the kind attribute of the resource associated with the status StatusReason; on some operations may differ from the requested resource Kind; see http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds" }, "name": { "type": "string", "description": "the name attribute of the resource associated with the status StatusReason (when there is a single name which can be described)" }, "retryAfterSeconds": { "type": "integer", "description": "the number of seconds before the client should attempt to retry this operation" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.StatusDetails" }, "kubernetes_TCPSocketAction": { "type": "object", "description": "", "properties": { "port": { "$ref": "#/definitions/kubernetes_util_IntOrString", "javaType": "io.fabric8.kubernetes.api.model.IntOrString" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.TCPSocketAction" }, "kubernetes_TypeMeta": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "version of the schema the object should have; see http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#resources" }, "kind": { "type": "string", "description": "kind of object" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.TypeMeta" }, "kubernetes_Volume": { "type": "object", "description": "", "properties": { "awsElasticBlockStore": { "$ref": "#/definitions/kubernetes_AWSElasticBlockStoreVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.AWSElasticBlockStoreVolumeSource" }, "cephfs": { "$ref": "#/definitions/kubernetes_CephFSVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.CephFSVolumeSource" }, "emptyDir": { "$ref": "#/definitions/kubernetes_EmptyDirVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.EmptyDirVolumeSource" }, "gcePersistentDisk": { "$ref": "#/definitions/kubernetes_GCEPersistentDiskVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GCEPersistentDiskVolumeSource" }, "gitRepo": { "$ref": "#/definitions/kubernetes_GitRepoVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GitRepoVolumeSource" }, "glusterfs": { "$ref": "#/definitions/kubernetes_GlusterfsVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GlusterfsVolumeSource" }, "hostPath": { "$ref": "#/definitions/kubernetes_HostPathVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.HostPathVolumeSource" }, "iscsi": { "$ref": "#/definitions/kubernetes_ISCSIVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.ISCSIVolumeSource" }, "metadata": { "$ref": "#/definitions/kubernetes_MetadataVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.MetadataVolumeSource" }, "name": { "type": "string", "description": "volume name; must be a DNS_LABEL and unique within the pod; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names", "maxLength": 63, "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" }, "nfs": { "$ref": "#/definitions/kubernetes_NFSVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.NFSVolumeSource" }, "persistentVolumeClaim": { "$ref": "#/definitions/kubernetes_PersistentVolumeClaimVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimVolumeSource" }, "rbd": { "$ref": "#/definitions/kubernetes_RBDVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.RBDVolumeSource" }, "secret": { "$ref": "#/definitions/kubernetes_SecretVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.SecretVolumeSource" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Volume" }, "kubernetes_VolumeMount": { "type": "object", "description": "", "properties": { "mountPath": { "type": "string", "description": "path within the container at which the volume should be mounted" }, "name": { "type": "string", "description": "name of the volume to mount" }, "readOnly": { "type": "boolean", "description": "mounted read-only if true" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.VolumeMount" }, "kubernetes_VolumeSource": { "type": "object", "description": "", "properties": { "awsElasticBlockStore": { "$ref": "#/definitions/kubernetes_AWSElasticBlockStoreVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.AWSElasticBlockStoreVolumeSource" }, "cephfs": { "$ref": "#/definitions/kubernetes_CephFSVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.CephFSVolumeSource" }, "emptyDir": { "$ref": "#/definitions/kubernetes_EmptyDirVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.EmptyDirVolumeSource" }, "gcePersistentDisk": { "$ref": "#/definitions/kubernetes_GCEPersistentDiskVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GCEPersistentDiskVolumeSource" }, "gitRepo": { "$ref": "#/definitions/kubernetes_GitRepoVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GitRepoVolumeSource" }, "glusterfs": { "$ref": "#/definitions/kubernetes_GlusterfsVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GlusterfsVolumeSource" }, "hostPath": { "$ref": "#/definitions/kubernetes_HostPathVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.HostPathVolumeSource" }, "iscsi": { "$ref": "#/definitions/kubernetes_ISCSIVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.ISCSIVolumeSource" }, "metadata": { "$ref": "#/definitions/kubernetes_MetadataVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.MetadataVolumeSource" }, "nfs": { "$ref": "#/definitions/kubernetes_NFSVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.NFSVolumeSource" }, "persistentVolumeClaim": { "$ref": "#/definitions/kubernetes_PersistentVolumeClaimVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimVolumeSource" }, "rbd": { "$ref": "#/definitions/kubernetes_RBDVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.RBDVolumeSource" }, "secret": { "$ref": "#/definitions/kubernetes_SecretVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.SecretVolumeSource" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.VolumeSource" }, "kubernetes_config_AuthInfo": { "type": "object", "description": "", "properties": { "client-certificate": { "type": "string", "description": "" }, "client-certificate-data": { "type": "string", "description": "" }, "client-key": { "type": "string", "description": "" }, "client-key-data": { "type": "string", "description": "" }, "extensions": { "type": "array", "description": "", "items": { "$ref": "#/definitions/kubernetes_config_NamedExtension", "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" } }, "password": { "type": "string", "description": "" }, "token": { "type": "string", "description": "" }, "username": { "type": "string", "description": "" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.AuthInfo" }, "kubernetes_config_Cluster": { "type": "object", "description": "", "properties": { "api-version": { "type": "string", "description": "" }, "certificate-authority": { "type": "string", "description": "" }, "certificate-authority-data": { "type": "string", "description": "" }, "extensions": { "type": "array", "description": "", "items": { "$ref": "#/definitions/kubernetes_config_NamedExtension", "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" } }, "insecure-skip-tls-verify": { "type": "boolean", "description": "" }, "server": { "type": "string", "description": "" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Cluster" }, "kubernetes_config_Config": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "" }, "clusters": { "type": "array", "description": "", "items": { "$ref": "#/definitions/kubernetes_config_NamedCluster", "javaType": "io.fabric8.kubernetes.api.model.NamedCluster" } }, "contexts": { "type": "array", "description": "", "items": { "$ref": "#/definitions/kubernetes_config_NamedContext", "javaType": "io.fabric8.kubernetes.api.model.NamedContext" } }, "current-context": { "type": "string", "description": "" }, "extensions": { "type": "array", "description": "", "items": { "$ref": "#/definitions/kubernetes_config_NamedExtension", "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" } }, "kind": { "type": "string", "description": "" }, "preferences": { "$ref": "#/definitions/kubernetes_config_Preferences", "javaType": "io.fabric8.kubernetes.api.model.Preferences" }, "users": { "type": "array", "description": "", "items": { "$ref": "#/definitions/kubernetes_config_NamedAuthInfo", "javaType": "io.fabric8.kubernetes.api.model.NamedAuthInfo" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Config" }, "kubernetes_config_Context": { "type": "object", "description": "", "properties": { "cluster": { "type": "string", "description": "" }, "extensions": { "type": "array", "description": "", "items": { "$ref": "#/definitions/kubernetes_config_NamedExtension", "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" } }, "namespace": { "type": "string", "description": "" }, "user": { "type": "string", "description": "" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Context" }, "kubernetes_config_NamedAuthInfo": { "type": "object", "description": "", "properties": { "name": { "type": "string", "description": "" }, "user": { "$ref": "#/definitions/kubernetes_config_AuthInfo", "javaType": "io.fabric8.kubernetes.api.model.AuthInfo" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NamedAuthInfo" }, "kubernetes_config_NamedCluster": { "type": "object", "description": "", "properties": { "cluster": { "$ref": "#/definitions/kubernetes_config_Cluster", "javaType": "io.fabric8.kubernetes.api.model.Cluster" }, "name": { "type": "string", "description": "" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NamedCluster" }, "kubernetes_config_NamedContext": { "type": "object", "description": "", "properties": { "context": { "$ref": "#/definitions/kubernetes_config_Context", "javaType": "io.fabric8.kubernetes.api.model.Context" }, "name": { "type": "string", "description": "" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NamedContext" }, "kubernetes_config_NamedExtension": { "type": "object", "description": "", "properties": { "extension": { "$ref": "#/definitions/kubernetes_runtime_RawExtension", "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" }, "name": { "type": "string", "description": "" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" }, "kubernetes_config_Preferences": { "type": "object", "description": "", "properties": { "colors": { "type": "boolean", "description": "" }, "extensions": { "type": "array", "description": "", "items": { "$ref": "#/definitions/kubernetes_config_NamedExtension", "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Preferences" }, "kubernetes_resource_Quantity": { "type": "object", "description": "", "properties": { "Amount": { "$ref": "#/definitions/speter_inf_Dec", "javaType": "io.fabric8.openshift.api.model.Dec" }, "Format": { "type": "string", "description": "" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "kubernetes_runtime_RawExtension": { "type": "object", "description": "", "properties": { "RawJSON": { "type": "string", "description": "" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" }, "kubernetes_util_IntOrString": { "type": "object", "description": "", "properties": { "IntVal": { "type": "integer", "description": "" }, "Kind": { "type": "integer", "description": "" }, "StrVal": { "type": "string", "description": "" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.IntOrString" }, "kubernetes_watch_WatchEvent": { "type": "object", "description": "", "properties": { "object": { "$ref": "#/definitions/kubernetes_runtime_RawExtension", "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" }, "type": { "type": "string", "description": "the type of watch event; may be ADDED" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.WatchEvent" }, "os_authorization_AuthorizationAttributes": { "type": "object", "description": "", "properties": { "content": { "$ref": "#/definitions/kubernetes_runtime_RawExtension", "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" }, "namespace": { "type": "string", "description": "namespace of the action being requested" }, "resource": { "type": "string", "description": "one of the existing resource types" }, "resourceName": { "type": "string", "description": "name of the resource being requested for a get or delete" }, "verb": { "type": "string", "description": "one of get" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.AuthorizationAttributes" }, "os_authorization_ClusterPolicy": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "ClusterPolicy", "required": true }, "lastModified": { "type": "string", "description": "last time any part of the object was created" }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "roles": { "type": "array", "description": "all the roles held by this policy", "items": { "$ref": "#/definitions/os_authorization_NamedClusterRole", "javaType": "io.fabric8.openshift.api.model.NamedClusterRole" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ClusterPolicy", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_authorization_ClusterPolicyBinding": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "ClusterPolicyBinding", "required": true }, "lastModified": { "type": "string", "description": "last time any part of the object was created" }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "policyRef": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "roleBindings": { "type": "array", "description": "all the role bindings held by this policy", "items": { "$ref": "#/definitions/os_authorization_NamedClusterRoleBinding", "javaType": "io.fabric8.openshift.api.model.NamedClusterRoleBinding" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ClusterPolicyBinding", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_authorization_ClusterPolicyBindingList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of cluster policy bindings", "items": { "$ref": "#/definitions/os_authorization_ClusterPolicyBinding", "javaType": "io.fabric8.openshift.api.model.ClusterPolicyBinding" } }, "kind": { "type": "string", "description": "", "default": "ClusterPolicyBindingList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ClusterPolicyBindingList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_authorization_ClusterPolicyList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of cluster policies", "items": { "$ref": "#/definitions/os_authorization_ClusterPolicy", "javaType": "io.fabric8.openshift.api.model.ClusterPolicy" } }, "kind": { "type": "string", "description": "", "default": "ClusterPolicyList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ClusterPolicyList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_authorization_ClusterRole": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "ClusterRole", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "rules": { "type": "array", "description": "list of policy rules", "items": { "$ref": "#/definitions/os_authorization_PolicyRule", "javaType": "io.fabric8.openshift.api.model.PolicyRule" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ClusterRole", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_authorization_ClusterRoleBinding": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "groupNames": { "type": "array", "description": "all the groups directly bound to the role", "items": { "type": "string", "description": "all the groups directly bound to the role" } }, "kind": { "type": "string", "description": "", "default": "ClusterRoleBinding", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "roleRef": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "subjects": { "type": "array", "description": "references to subjects bound to the role. Only User", "items": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } }, "userNames": { "type": "array", "description": "all user names directly bound to the role", "items": { "type": "string", "description": "all user names directly bound to the role" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ClusterRoleBinding", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_authorization_ClusterRoleBindingList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of cluster role bindings", "items": { "$ref": "#/definitions/os_authorization_ClusterRoleBinding", "javaType": "io.fabric8.openshift.api.model.ClusterRoleBinding" } }, "kind": { "type": "string", "description": "", "default": "ClusterRoleBindingList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ClusterRoleBindingList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_authorization_LocalSubjectAccessReview": { "type": "object", "description": "", "properties": { "TypeMeta": { "$ref": "#/definitions/kubernetes_TypeMeta", "javaType": "io.fabric8.kubernetes.api.model.TypeMeta" }, "content": { "$ref": "#/definitions/kubernetes_runtime_RawExtension", "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" }, "groups": { "type": "array", "description": "optional", "items": { "type": "string", "description": "optional" } }, "namespace": { "type": "string", "description": "namespace of the action being requested" }, "resource": { "type": "string", "description": "one of the existing resource types" }, "resourceName": { "type": "string", "description": "name of the resource being requested for a get or delete" }, "user": { "type": "string", "description": "optional" }, "verb": { "type": "string", "description": "one of get" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.LocalSubjectAccessReview" }, "os_authorization_NamedClusterRole": { "type": "object", "description": "", "properties": { "name": { "type": "string", "description": "name of the cluster role" }, "role": { "$ref": "#/definitions/os_authorization_ClusterRole", "javaType": "io.fabric8.openshift.api.model.ClusterRole" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.NamedClusterRole" }, "os_authorization_NamedClusterRoleBinding": { "type": "object", "description": "", "properties": { "name": { "type": "string", "description": "name of the cluster role binding" }, "roleBinding": { "$ref": "#/definitions/os_authorization_ClusterRoleBinding", "javaType": "io.fabric8.openshift.api.model.ClusterRoleBinding" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.NamedClusterRoleBinding" }, "os_authorization_NamedRole": { "type": "object", "description": "", "properties": { "name": { "type": "string", "description": "name of the role" }, "role": { "$ref": "#/definitions/os_authorization_Role", "javaType": "io.fabric8.openshift.api.model.Role" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.NamedRole" }, "os_authorization_NamedRoleBinding": { "type": "object", "description": "", "properties": { "name": { "type": "string", "description": "name of the roleBinding" }, "roleBinding": { "$ref": "#/definitions/os_authorization_RoleBinding", "javaType": "io.fabric8.openshift.api.model.RoleBinding" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.NamedRoleBinding" }, "os_authorization_Policy": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Policy", "required": true }, "lastModified": { "type": "string", "description": "last time that any part of the policy was created" }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "roles": { "type": "array", "description": "roles held by this policy", "items": { "$ref": "#/definitions/os_authorization_NamedRole", "javaType": "io.fabric8.openshift.api.model.NamedRole" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Policy", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_authorization_PolicyBinding": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "PolicyBinding", "required": true }, "lastModified": { "type": "string", "description": "last time that any part of the object was created" }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "policyRef": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "roleBindings": { "type": "array", "description": "all roleBindings held by this policyBinding", "items": { "$ref": "#/definitions/os_authorization_NamedRoleBinding", "javaType": "io.fabric8.openshift.api.model.NamedRoleBinding" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.PolicyBinding", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_authorization_PolicyBindingList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of policy bindings", "items": { "$ref": "#/definitions/os_authorization_PolicyBinding", "javaType": "io.fabric8.openshift.api.model.PolicyBinding" } }, "kind": { "type": "string", "description": "", "default": "PolicyBindingList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.PolicyBindingList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_authorization_PolicyList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of policies", "items": { "$ref": "#/definitions/os_authorization_Policy", "javaType": "io.fabric8.openshift.api.model.Policy" } }, "kind": { "type": "string", "description": "", "default": "PolicyList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.PolicyList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_authorization_PolicyRule": { "type": "object", "description": "", "properties": { "attributeRestrictions": { "$ref": "#/definitions/kubernetes_runtime_RawExtension", "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" }, "nonResourceURLs": { "type": "array", "description": "set of partial urls that a user should have access to. *s are allowed", "items": { "type": "string", "description": "set of partial urls that a user should have access to. *s are allowed" } }, "resourceNames": { "type": "array", "description": "optional white list of names that the rule applies to. An empty set means that everything is allowed.", "items": { "type": "string", "description": "optional white list of names that the rule applies to. An empty set means that everything is allowed." } }, "resources": { "type": "array", "description": "list of resources this rule applies to. * represents all resources.", "items": { "type": "string", "description": "list of resources this rule applies to. * represents all resources." } }, "verbs": { "type": "array", "description": "list of verbs that apply to ALL the resourceKinds and attributeRestrictions contained in this rule. The verb * represents all kinds.", "items": { "type": "string", "description": "list of verbs that apply to ALL the resourceKinds and attributeRestrictions contained in this rule. The verb * represents all kinds." } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.PolicyRule" }, "os_authorization_Role": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Role", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "rules": { "type": "array", "description": "all the rules for this role", "items": { "$ref": "#/definitions/os_authorization_PolicyRule", "javaType": "io.fabric8.openshift.api.model.PolicyRule" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Role", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_authorization_RoleBinding": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "groupNames": { "type": "array", "description": "all the groups directly bound to the role", "items": { "type": "string", "description": "all the groups directly bound to the role" } }, "kind": { "type": "string", "description": "", "default": "RoleBinding", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "roleRef": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "subjects": { "type": "array", "description": "references to subjects bound to the role. Only User", "items": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } }, "userNames": { "type": "array", "description": "all the usernames directly bound to the role", "items": { "type": "string", "description": "all the usernames directly bound to the role" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.RoleBinding", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_authorization_RoleBindingList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of role bindings", "items": { "$ref": "#/definitions/os_authorization_RoleBinding", "javaType": "io.fabric8.openshift.api.model.RoleBinding" } }, "kind": { "type": "string", "description": "", "default": "RoleBindingList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.RoleBindingList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_authorization_RoleList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of roles", "items": { "$ref": "#/definitions/os_authorization_Role", "javaType": "io.fabric8.openshift.api.model.Role" } }, "kind": { "type": "string", "description": "", "default": "RoleList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.RoleList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_authorization_SubjectAccessReview": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "content": { "$ref": "#/definitions/kubernetes_runtime_RawExtension", "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" }, "groups": { "type": "array", "description": "optional", "items": { "type": "string", "description": "optional" } }, "kind": { "type": "string", "description": "", "default": "SubjectAccessReview", "required": true }, "namespace": { "type": "string", "description": "namespace of the action being requested" }, "resource": { "type": "string", "description": "one of the existing resource types" }, "resourceName": { "type": "string", "description": "name of the resource being requested for a get or delete" }, "user": { "type": "string", "description": "optional" }, "verb": { "type": "string", "description": "one of get" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.SubjectAccessReview" }, "os_authorization_SubjectAccessReviewResponse": { "type": "object", "description": "", "properties": { "allowed": { "type": "boolean", "description": "true if the action would be allowed" }, "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "SubjectAccessReviewResponse", "required": true }, "namespace": { "type": "string", "description": "the namespace used for the access review" }, "reason": { "type": "string", "description": "reason is optional" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.SubjectAccessReviewResponse" }, "os_build_Build": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Build", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/os_build_BuildSpec", "javaType": "io.fabric8.openshift.api.model.BuildSpec" }, "status": { "$ref": "#/definitions/os_build_BuildStatus", "javaType": "io.fabric8.openshift.api.model.BuildStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Build", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_build_BuildConfig": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "BuildConfig", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/os_build_BuildConfigSpec", "javaType": "io.fabric8.openshift.api.model.BuildConfigSpec" }, "status": { "$ref": "#/definitions/os_build_BuildConfigStatus", "javaType": "io.fabric8.openshift.api.model.BuildConfigStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildConfig", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_build_BuildConfigList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of build configs", "items": { "$ref": "#/definitions/os_build_BuildConfig", "javaType": "io.fabric8.openshift.api.model.BuildConfig" } }, "kind": { "type": "string", "description": "", "default": "BuildConfigList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildConfigList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_build_BuildConfigSpec": { "type": "object", "description": "", "properties": { "output": { "$ref": "#/definitions/os_build_BuildOutput", "javaType": "io.fabric8.openshift.api.model.BuildOutput" }, "resources": { "$ref": "#/definitions/kubernetes_ResourceRequirements", "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" }, "revision": { "$ref": "#/definitions/os_build_SourceRevision", "javaType": "io.fabric8.openshift.api.model.SourceRevision" }, "serviceAccount": { "type": "string", "description": "the name of the service account to use to run pods created by the build" }, "source": { "$ref": "#/definitions/os_build_BuildSource", "javaType": "io.fabric8.openshift.api.model.BuildSource" }, "strategy": { "$ref": "#/definitions/os_build_BuildStrategy", "javaType": "io.fabric8.openshift.api.model.BuildStrategy" }, "triggers": { "type": "array", "description": "determines how new builds can be launched from a build config. if no triggers are defined", "items": { "$ref": "#/definitions/os_build_BuildTriggerPolicy", "javaType": "io.fabric8.openshift.api.model.BuildTriggerPolicy" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildConfigSpec" }, "os_build_BuildConfigStatus": { "type": "object", "description": "", "properties": { "lastVersion": { "type": "integer", "description": "used to inform about number of last triggered build" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildConfigStatus" }, "os_build_BuildList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of builds", "items": { "$ref": "#/definitions/os_build_Build", "javaType": "io.fabric8.openshift.api.model.Build" } }, "kind": { "type": "string", "description": "", "default": "BuildList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_build_BuildOutput": { "type": "object", "description": "", "properties": { "pushSecret": { "$ref": "#/definitions/kubernetes_LocalObjectReference", "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" }, "to": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildOutput" }, "os_build_BuildRequest": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "from": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "kind": { "type": "string", "description": "", "default": "BuildRequest", "required": true }, "lastVersion": { "type": "integer", "description": "LastVersion of the BuildConfig that triggered this build" }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "revision": { "$ref": "#/definitions/os_build_SourceRevision", "javaType": "io.fabric8.openshift.api.model.SourceRevision" }, "triggeredByImage": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildRequest", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_build_BuildSource": { "type": "object", "description": "", "properties": { "contextDir": { "type": "string", "description": "specifies sub-directory where the source code for the application exists" }, "git": { "$ref": "#/definitions/os_build_GitBuildSource", "javaType": "io.fabric8.openshift.api.model.GitBuildSource" }, "sourceSecret": { "$ref": "#/definitions/kubernetes_LocalObjectReference", "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" }, "type": { "type": "string", "description": "type of source control management system" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildSource" }, "os_build_BuildSpec": { "type": "object", "description": "", "properties": { "output": { "$ref": "#/definitions/os_build_BuildOutput", "javaType": "io.fabric8.openshift.api.model.BuildOutput" }, "resources": { "$ref": "#/definitions/kubernetes_ResourceRequirements", "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" }, "revision": { "$ref": "#/definitions/os_build_SourceRevision", "javaType": "io.fabric8.openshift.api.model.SourceRevision" }, "serviceAccount": { "type": "string", "description": "the name of the service account to use to run pods created by the build" }, "source": { "$ref": "#/definitions/os_build_BuildSource", "javaType": "io.fabric8.openshift.api.model.BuildSource" }, "strategy": { "$ref": "#/definitions/os_build_BuildStrategy", "javaType": "io.fabric8.openshift.api.model.BuildStrategy" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildSpec" }, "os_build_BuildStatus": { "type": "object", "description": "", "properties": { "cancelled": { "type": "boolean", "description": "describes if a canceling event was triggered for the build" }, "completionTimestamp": { "type": "string", "description": "server time when the pod running this build stopped running" }, "config": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "duration": { "type": "integer", "description": "amount of time the build has been running", "javaType": "Long" }, "message": { "type": "string", "description": "human-readable message indicating details about why the build has this status" }, "phase": { "type": "string", "description": "observed point in the build lifecycle" }, "startTimestamp": { "type": "string", "description": "server time when this build started running in a pod" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildStatus" }, "os_build_BuildStrategy": { "type": "object", "description": "", "properties": { "customStrategy": { "$ref": "#/definitions/os_build_CustomBuildStrategy", "javaType": "io.fabric8.openshift.api.model.CustomBuildStrategy" }, "dockerStrategy": { "$ref": "#/definitions/os_build_DockerBuildStrategy", "javaType": "io.fabric8.openshift.api.model.DockerBuildStrategy" }, "sourceStrategy": { "$ref": "#/definitions/os_build_SourceBuildStrategy", "javaType": "io.fabric8.openshift.api.model.SourceBuildStrategy" }, "type": { "type": "string", "description": "identifies the type of build strategy" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildStrategy" }, "os_build_BuildTriggerPolicy": { "type": "object", "description": "", "properties": { "generic": { "$ref": "#/definitions/os_build_WebHookTrigger", "javaType": "io.fabric8.openshift.api.model.WebHookTrigger" }, "github": { "$ref": "#/definitions/os_build_WebHookTrigger", "javaType": "io.fabric8.openshift.api.model.WebHookTrigger" }, "imageChange": { "$ref": "#/definitions/os_build_ImageChangeTrigger", "javaType": "io.fabric8.openshift.api.model.ImageChangeTrigger" }, "type": { "type": "string", "description": "type of build trigger" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildTriggerPolicy" }, "os_build_CustomBuildStrategy": { "type": "object", "description": "", "properties": { "env": { "type": "array", "description": "additional environment variables you want to pass into a builder container", "items": { "$ref": "#/definitions/kubernetes_EnvVar", "javaType": "io.fabric8.kubernetes.api.model.EnvVar" } }, "exposeDockerSocket": { "type": "boolean", "description": "allow running Docker commands (and build Docker images) from inside the container" }, "forcePull": { "type": "boolean", "description": "forces pulling of builder image from remote registry if true" }, "from": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "pullSecret": { "$ref": "#/definitions/kubernetes_LocalObjectReference", "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.CustomBuildStrategy" }, "os_build_DockerBuildStrategy": { "type": "object", "description": "", "properties": { "env": { "type": "array", "description": "additional environment variables you want to pass into a builder container", "items": { "$ref": "#/definitions/kubernetes_EnvVar", "javaType": "io.fabric8.kubernetes.api.model.EnvVar" } }, "forcePull": { "type": "boolean", "description": "forces the source build to pull the image if true" }, "from": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "noCache": { "type": "boolean", "description": "if true" }, "pullSecret": { "$ref": "#/definitions/kubernetes_LocalObjectReference", "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DockerBuildStrategy" }, "os_build_GitBuildSource": { "type": "object", "description": "", "properties": { "httpProxy": { "type": "string", "description": "specifies a http proxy to be used during git clone operations" }, "httpsProxy": { "type": "string", "description": "specifies a https proxy to be used during git clone operations" }, "ref": { "type": "string", "description": "identifies the branch/tag/ref to build" }, "uri": { "type": "string", "description": "points to the source that will be built" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.GitBuildSource" }, "os_build_GitSourceRevision": { "type": "object", "description": "", "properties": { "author": { "$ref": "#/definitions/os_build_SourceControlUser", "javaType": "io.fabric8.openshift.api.model.SourceControlUser" }, "commit": { "type": "string", "description": "hash identifying a specific commit" }, "committer": { "$ref": "#/definitions/os_build_SourceControlUser", "javaType": "io.fabric8.openshift.api.model.SourceControlUser" }, "message": { "type": "string", "description": "description of a specific commit" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.GitSourceRevision" }, "os_build_ImageChangeTrigger": { "type": "object", "description": "", "properties": { "from": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "lastTriggeredImageID": { "type": "string", "description": "used internally to save last used image ID for build" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ImageChangeTrigger" }, "os_build_SourceBuildStrategy": { "type": "object", "description": "", "properties": { "env": { "type": "array", "description": "additional environment variables you want to pass into a builder container", "items": { "$ref": "#/definitions/kubernetes_EnvVar", "javaType": "io.fabric8.kubernetes.api.model.EnvVar" } }, "forcePull": { "type": "boolean", "description": "forces the source build to pull the image if true" }, "from": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "incremental": { "type": "boolean", "description": "forces the source build to do incremental builds if true" }, "pullSecret": { "$ref": "#/definitions/kubernetes_LocalObjectReference", "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" }, "scripts": { "type": "string", "description": "location of the source scripts" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.SourceBuildStrategy" }, "os_build_SourceControlUser": { "type": "object", "description": "", "properties": { "email": { "type": "string", "description": "e-mail of the source control user" }, "name": { "type": "string", "description": "name of the source control user" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.SourceControlUser" }, "os_build_SourceRevision": { "type": "object", "description": "", "properties": { "git": { "$ref": "#/definitions/os_build_GitSourceRevision", "javaType": "io.fabric8.openshift.api.model.GitSourceRevision" }, "type": { "type": "string", "description": "type of the build source" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.SourceRevision" }, "os_build_WebHookTrigger": { "type": "object", "description": "", "properties": { "secret": { "type": "string", "description": "secret used to validate requests" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.WebHookTrigger" }, "os_deploy_CustomDeploymentStrategyParams": { "type": "object", "description": "", "properties": { "command": { "type": "array", "description": "optionally overrides the container command (default is specified by the image)", "items": { "type": "string", "description": "optionally overrides the container command (default is specified by the image)" } }, "environment": { "type": "array", "description": "environment variables provided to the deployment process container", "items": { "$ref": "#/definitions/kubernetes_EnvVar", "javaType": "io.fabric8.kubernetes.api.model.EnvVar" } }, "image": { "type": "string", "description": "a Docker image which can carry out a deployment" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.CustomDeploymentStrategyParams" }, "os_deploy_DeploymentCause": { "type": "object", "description": "", "properties": { "imageTrigger": { "$ref": "#/definitions/os_deploy_DeploymentCauseImageTrigger", "javaType": "io.fabric8.openshift.api.model.DeploymentCauseImageTrigger" }, "type": { "type": "string", "description": "the type of trigger that resulted in a new deployment" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentCause" }, "os_deploy_DeploymentCauseImageTrigger": { "type": "object", "description": "", "properties": { "from": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentCauseImageTrigger" }, "os_deploy_DeploymentConfig": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "DeploymentConfig", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/os_deploy_DeploymentConfigSpec", "javaType": "io.fabric8.openshift.api.model.DeploymentConfigSpec" }, "status": { "$ref": "#/definitions/os_deploy_DeploymentConfigStatus", "javaType": "io.fabric8.openshift.api.model.DeploymentConfigStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentConfig", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_deploy_DeploymentConfigList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "a list of deployment configs", "items": { "$ref": "#/definitions/os_deploy_DeploymentConfig", "javaType": "io.fabric8.openshift.api.model.DeploymentConfig" } }, "kind": { "type": "string", "description": "", "default": "DeploymentConfigList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentConfigList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_deploy_DeploymentConfigSpec": { "type": "object", "description": "", "properties": { "replicas": { "type": "integer", "description": "the desired number of replicas" }, "selector": { "type": "object", "description": "a label query over pods that should match the replicas count", "additionalProperties": { "type": "string", "description": "a label query over pods that should match the replicas count" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "strategy": { "$ref": "#/definitions/os_deploy_DeploymentStrategy", "javaType": "io.fabric8.openshift.api.model.DeploymentStrategy" }, "template": { "$ref": "#/definitions/kubernetes_PodTemplateSpec", "javaType": "io.fabric8.kubernetes.api.model.PodTemplateSpec" }, "triggers": { "type": "array", "description": "how new deployments are triggered", "items": { "$ref": "#/definitions/os_deploy_DeploymentTriggerPolicy", "javaType": "io.fabric8.openshift.api.model.DeploymentTriggerPolicy" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentConfigSpec" }, "os_deploy_DeploymentConfigStatus": { "type": "object", "description": "", "properties": { "details": { "$ref": "#/definitions/os_deploy_DeploymentDetails", "javaType": "io.fabric8.openshift.api.model.DeploymentDetails" }, "latestVersion": { "type": "integer", "description": "used to determine whether the current deployment is out of sync" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentConfigStatus" }, "os_deploy_DeploymentDetails": { "type": "object", "description": "", "properties": { "causes": { "type": "array", "description": "extended data associated with all the causes for creating a new deployment", "items": { "$ref": "#/definitions/os_deploy_DeploymentCause", "javaType": "io.fabric8.openshift.api.model.DeploymentCause" } }, "message": { "type": "string", "description": "a user specified change message" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentDetails" }, "os_deploy_DeploymentStrategy": { "type": "object", "description": "", "properties": { "customParams": { "$ref": "#/definitions/os_deploy_CustomDeploymentStrategyParams", "javaType": "io.fabric8.openshift.api.model.CustomDeploymentStrategyParams" }, "recreateParams": { "$ref": "#/definitions/os_deploy_RecreateDeploymentStrategyParams", "javaType": "io.fabric8.openshift.api.model.RecreateDeploymentStrategyParams" }, "resources": { "$ref": "#/definitions/kubernetes_ResourceRequirements", "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" }, "rollingParams": { "$ref": "#/definitions/os_deploy_RollingDeploymentStrategyParams", "javaType": "io.fabric8.openshift.api.model.RollingDeploymentStrategyParams" }, "type": { "type": "string", "description": "the name of a deployment strategy" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentStrategy" }, "os_deploy_DeploymentTriggerImageChangeParams": { "type": "object", "description": "", "properties": { "automatic": { "type": "boolean", "description": "whether detection of a new tag value should trigger a deployment" }, "containerNames": { "type": "array", "description": "restricts tag updates to a set of container names in the pod", "items": { "type": "string", "description": "restricts tag updates to a set of container names in the pod" } }, "from": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "lastTriggeredImage": { "type": "string", "description": "the last image to be triggered" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentTriggerImageChangeParams" }, "os_deploy_DeploymentTriggerPolicy": { "type": "object", "description": "", "properties": { "imageChangeParams": { "$ref": "#/definitions/os_deploy_DeploymentTriggerImageChangeParams", "javaType": "io.fabric8.openshift.api.model.DeploymentTriggerImageChangeParams" }, "type": { "type": "string", "description": "the type of the trigger" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentTriggerPolicy" }, "os_deploy_ExecNewPodHook": { "type": "object", "description": "", "properties": { "command": { "type": "array", "description": "the hook command and its arguments", "items": { "type": "string", "description": "the hook command and its arguments" } }, "containerName": { "type": "string", "description": "the name of a container from the pod template whose image will be used for the hook container" }, "env": { "type": "array", "description": "environment variables provided to the hook container", "items": { "$ref": "#/definitions/kubernetes_EnvVar", "javaType": "io.fabric8.kubernetes.api.model.EnvVar" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ExecNewPodHook" }, "os_deploy_LifecycleHook": { "type": "object", "description": "", "properties": { "execNewPod": { "$ref": "#/definitions/os_deploy_ExecNewPodHook", "javaType": "io.fabric8.openshift.api.model.ExecNewPodHook" }, "failurePolicy": { "type": "string", "description": "what action to take if the hook fails" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.LifecycleHook" }, "os_deploy_RecreateDeploymentStrategyParams": { "type": "object", "description": "", "properties": { "post": { "$ref": "#/definitions/os_deploy_LifecycleHook", "javaType": "io.fabric8.openshift.api.model.LifecycleHook" }, "pre": { "$ref": "#/definitions/os_deploy_LifecycleHook", "javaType": "io.fabric8.openshift.api.model.LifecycleHook" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.RecreateDeploymentStrategyParams" }, "os_deploy_RollingDeploymentStrategyParams": { "type": "object", "description": "", "properties": { "intervalSeconds": { "type": "integer", "description": "the time to wait between polling deployment status after update", "javaType": "Long" }, "post": { "$ref": "#/definitions/os_deploy_LifecycleHook", "javaType": "io.fabric8.openshift.api.model.LifecycleHook" }, "pre": { "$ref": "#/definitions/os_deploy_LifecycleHook", "javaType": "io.fabric8.openshift.api.model.LifecycleHook" }, "timeoutSeconds": { "type": "integer", "description": "the time to wait for updates before giving up", "javaType": "Long" }, "updatePercent": { "type": "integer", "description": "the percentage of replicas to scale up or down each interval (negative value switches scale order to down/up instead of up/down)" }, "updatePeriodSeconds": { "type": "integer", "description": "the time to wait between individual pod updates", "javaType": "Long" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.RollingDeploymentStrategyParams" }, "os_image_Image": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "dockerImageManifest": { "type": "string", "description": "raw JSON of the manifest" }, "dockerImageMetadata": { "$ref": "#/definitions/kubernetes_runtime_RawExtension", "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" }, "dockerImageMetadataVersion": { "type": "string", "description": "conveys version of the object" }, "dockerImageReference": { "type": "string", "description": "string that can be used to pull this image" }, "kind": { "type": "string", "description": "", "default": "Image", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Image", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_image_ImageList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of image objects", "items": { "$ref": "#/definitions/os_image_Image", "javaType": "io.fabric8.openshift.api.model.Image" } }, "kind": { "type": "string", "description": "", "default": "ImageList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ImageList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_image_ImageStream": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "ImageStream", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/os_image_ImageStreamSpec", "javaType": "io.fabric8.openshift.api.model.ImageStreamSpec" }, "status": { "$ref": "#/definitions/os_image_ImageStreamStatus", "javaType": "io.fabric8.openshift.api.model.ImageStreamStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ImageStream", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_image_ImageStreamList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of image stream objects", "items": { "$ref": "#/definitions/os_image_ImageStream", "javaType": "io.fabric8.openshift.api.model.ImageStream" } }, "kind": { "type": "string", "description": "", "default": "ImageStreamList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ImageStreamList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_image_ImageStreamSpec": { "type": "object", "description": "", "properties": { "dockerImageRepository": { "type": "string", "description": "optional field if specified this stream is backed by a Docker repository on this server" }, "tags": { "type": "array", "description": "map arbitrary string values to specific image locators", "items": { "$ref": "#/definitions/os_image_NamedTagReference", "javaType": "io.fabric8.openshift.api.model.NamedTagReference" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ImageStreamSpec" }, "os_image_ImageStreamStatus": { "type": "object", "description": "", "properties": { "dockerImageRepository": { "type": "string", "description": "represents the effective location this stream may be accessed at" }, "tags": { "type": "array", "description": "historical record of images associated with each tag", "items": { "$ref": "#/definitions/os_image_NamedTagEventList", "javaType": "io.fabric8.openshift.api.model.NamedTagEventList" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ImageStreamStatus" }, "os_image_NamedTagEventList": { "type": "object", "description": "", "properties": { "items": { "type": "array", "description": "list of tag events related to the tag", "items": { "$ref": "#/definitions/os_image_TagEvent", "javaType": "io.fabric8.openshift.api.model.TagEvent" } }, "tag": { "type": "string", "description": "the tag" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.NamedTagEventList" }, "os_image_NamedTagReference": { "type": "object", "description": "", "properties": { "annotations": { "type": "object", "description": "annotations associated with images using this tag", "additionalProperties": { "type": "string", "description": "annotations associated with images using this tag" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "from": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "name": { "type": "string", "description": "name of tag" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.NamedTagReference" }, "os_image_TagEvent": { "type": "object", "description": "", "properties": { "created": { "type": "string", "description": "when the event was created" }, "dockerImageReference": { "type": "string", "description": "the string that can be used to pull this image" }, "image": { "type": "string", "description": "the image" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.TagEvent" }, "os_oauth_OAuthAccessToken": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "authorizeToken": { "type": "string", "description": "contains the token that authorized this token" }, "clientName": { "type": "string", "description": "references the client that created this token" }, "expiresIn": { "type": "integer", "description": "is the seconds from creation time before this token expires", "javaType": "Long" }, "kind": { "type": "string", "description": "", "default": "OAuthAccessToken", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "redirectURI": { "type": "string", "description": "redirection URI associated with the token" }, "refreshToken": { "type": "string", "description": "optional value by which this token can be renewed" }, "scopes": { "type": "array", "description": "list of requested scopes", "items": { "type": "string", "description": "list of requested scopes" } }, "userName": { "type": "string", "description": "user name associated with this token" }, "userUID": { "type": "string", "description": "unique UID associated with this token" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.OAuthAccessToken", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_oauth_OAuthAccessTokenList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of oauth access tokens", "items": { "$ref": "#/definitions/os_oauth_OAuthAccessToken", "javaType": "io.fabric8.openshift.api.model.OAuthAccessToken" } }, "kind": { "type": "string", "description": "", "default": "OAuthAccessTokenList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.OAuthAccessTokenList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_oauth_OAuthAuthorizeToken": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "clientName": { "type": "string", "description": "references the client that created this token" }, "expiresIn": { "type": "integer", "description": "seconds from creation time before this token expires", "javaType": "Long" }, "kind": { "type": "string", "description": "", "default": "OAuthAuthorizeToken", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "redirectURI": { "type": "string", "description": "redirection URI associated with the token" }, "scopes": { "type": "array", "description": "list of requested scopes", "items": { "type": "string", "description": "list of requested scopes" } }, "state": { "type": "string", "description": "state data from request" }, "userName": { "type": "string", "description": "user name associated with this token" }, "userUID": { "type": "string", "description": "unique UID associated with this token. userUID and userName must both match for this token to be valid" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.OAuthAuthorizeToken", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_oauth_OAuthAuthorizeTokenList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of oauth authorization tokens", "items": { "$ref": "#/definitions/os_oauth_OAuthAuthorizeToken", "javaType": "io.fabric8.openshift.api.model.OAuthAuthorizeToken" } }, "kind": { "type": "string", "description": "", "default": "OAuthAuthorizeTokenList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.OAuthAuthorizeTokenList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_oauth_OAuthClient": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "OAuthClient", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "redirectURIs": { "type": "array", "description": "valid redirection URIs associated with a client", "items": { "type": "string", "description": "valid redirection URIs associated with a client" } }, "respondWithChallenges": { "type": "boolean", "description": "indicates whether the client wants authentication needed responses made in the form of challenges instead of redirects" }, "secret": { "type": "string", "description": "unique secret associated with a client" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.OAuthClient", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_oauth_OAuthClientAuthorization": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "clientName": { "type": "string", "description": "references the client that created this authorization" }, "kind": { "type": "string", "description": "", "default": "OAuthClientAuthorization", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "scopes": { "type": "array", "description": "list of granted scopes", "items": { "type": "string", "description": "list of granted scopes" } }, "userName": { "type": "string", "description": "user name that authorized this client" }, "userUID": { "type": "string", "description": "unique UID associated with this authorization. userUID and userName must both match for this authorization to be valid" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.OAuthClientAuthorization", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_oauth_OAuthClientAuthorizationList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of oauth client authorizations", "items": { "$ref": "#/definitions/os_oauth_OAuthClientAuthorization", "javaType": "io.fabric8.openshift.api.model.OAuthClientAuthorization" } }, "kind": { "type": "string", "description": "", "default": "OAuthClientAuthorizationList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.OAuthClientAuthorizationList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_oauth_OAuthClientList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of oauth clients", "items": { "$ref": "#/definitions/os_oauth_OAuthClient", "javaType": "io.fabric8.openshift.api.model.OAuthClient" } }, "kind": { "type": "string", "description": "", "default": "OAuthClientList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.OAuthClientList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_project_Project": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Project", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/os_project_ProjectSpec", "javaType": "io.fabric8.openshift.api.model.ProjectSpec" }, "status": { "$ref": "#/definitions/os_project_ProjectStatus", "javaType": "io.fabric8.openshift.api.model.ProjectStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Project", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_project_ProjectList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of projects", "items": { "$ref": "#/definitions/os_project_Project", "javaType": "io.fabric8.openshift.api.model.Project" } }, "kind": { "type": "string", "description": "", "default": "ProjectList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ProjectList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_project_ProjectRequest": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "description": { "type": "string", "description": "description to apply to a project" }, "displayName": { "type": "string", "description": "display name to apply to a project" }, "kind": { "type": "string", "description": "", "default": "ProjectRequest", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ProjectRequest", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_project_ProjectSpec": { "type": "object", "description": "", "properties": { "finalizers": { "type": "array", "description": "an opaque list of values that must be empty to permanently remove object from storage", "items": { "type": "string", "description": "an opaque list of values that must be empty to permanently remove object from storage" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ProjectSpec" }, "os_project_ProjectStatus": { "type": "object", "description": "", "properties": { "phase": { "type": "string", "description": "phase is the current lifecycle phase of the project" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ProjectStatus" }, "os_route_Route": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Route", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/os_route_RouteSpec", "javaType": "io.fabric8.openshift.api.model.RouteSpec" }, "status": { "$ref": "#/definitions/os_route_RouteStatus", "javaType": "io.fabric8.openshift.api.model.RouteStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Route", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_route_RouteList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of routes", "items": { "$ref": "#/definitions/os_route_Route", "javaType": "io.fabric8.openshift.api.model.Route" } }, "kind": { "type": "string", "description": "", "default": "RouteList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.RouteList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_route_RouteSpec": { "type": "object", "description": "", "properties": { "host": { "type": "string", "description": "optional: alias/dns that points to the service" }, "path": { "type": "string", "description": "optional: path that the router watches to route traffic to the service" }, "tls": { "$ref": "#/definitions/os_route_TLSConfig", "javaType": "io.fabric8.openshift.api.model.TLSConfig" }, "to": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.RouteSpec" }, "os_route_RouteStatus": { "type": "object", "description": "", "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.RouteStatus" }, "os_route_TLSConfig": { "type": "object", "description": "", "properties": { "caCertificate": { "type": "string", "description": "provides the cert authority certificate contents" }, "certificate": { "type": "string", "description": "provides certificate contents" }, "destinationCACertificate": { "type": "string", "description": "provides the contents of the ca certificate of the final destination. When using re-encrypt termination this file should be provided in order to have routers use it for health checks on the secure connection" }, "key": { "type": "string", "description": "provides key file contents" }, "termination": { "type": "string", "description": "indicates termination type. if not set" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.TLSConfig" }, "os_template_Parameter": { "type": "object", "description": "", "properties": { "description": { "type": "string", "description": "optional: describes the parameter" }, "from": { "type": "string", "description": "input value for the generator" }, "generate": { "type": "string", "description": "optional: generate specifies the generator to be used to generate random string from an input value specified by the from field. the result string is stored in the value field. if not specified" }, "name": { "type": "string", "description": "name of the parameter" }, "required": { "type": "boolean", "description": "indicates the parameter must have a non-empty value or be generated" }, "value": { "type": "string", "description": "optional: holds the parameter data. if specified" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Parameter" }, "os_template_Template": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Template", "required": true }, "labels": { "type": "object", "description": "optional: list of lables that are applied to every object during the template to config transformation", "additionalProperties": { "type": "string", "description": "optional: list of lables that are applied to every object during the template to config transformation" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "objects": { "type": "array", "description": "list of objects to include in the template", "items": { "$ref": "#/definitions/kubernetes_runtime_RawExtension", "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" } }, "parameters": { "type": "array", "description": "optional: list of parameters used during template to config transformation", "items": { "$ref": "#/definitions/os_template_Parameter", "javaType": "io.fabric8.openshift.api.model.Parameter" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Template", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_template_TemplateList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of templates", "items": { "$ref": "#/definitions/os_template_Template", "javaType": "io.fabric8.openshift.api.model.Template" } }, "kind": { "type": "string", "description": "", "default": "TemplateList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.TemplateList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_user_Group": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Group", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "users": { "type": "array", "description": "list of users in this group", "items": { "type": "string", "description": "list of users in this group" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Group", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_user_GroupList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of groups", "items": { "$ref": "#/definitions/os_user_Group", "javaType": "io.fabric8.openshift.api.model.Group" } }, "kind": { "type": "string", "description": "", "default": "GroupList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.GroupList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_user_Identity": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "extra": { "type": "object", "description": "extra information for this identity", "additionalProperties": { "type": "string", "description": "extra information for this identity" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "kind": { "type": "string", "description": "", "default": "Identity", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "providerName": { "type": "string", "description": "source of identity information" }, "providerUserName": { "type": "string", "description": "uniquely represents this identity in the scope of the provider" }, "user": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Identity", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_user_IdentityList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of identities", "items": { "$ref": "#/definitions/os_user_Identity", "javaType": "io.fabric8.openshift.api.model.Identity" } }, "kind": { "type": "string", "description": "", "default": "IdentityList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.IdentityList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_user_User": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "fullName": { "type": "string", "description": "full name of user" }, "groups": { "type": "array", "description": "list of groups", "items": { "type": "string", "description": "list of groups" } }, "identities": { "type": "array", "description": "list of identities", "items": { "type": "string", "description": "list of identities" } }, "kind": { "type": "string", "description": "", "default": "User", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.User", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_user_UserList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of users", "items": { "$ref": "#/definitions/os_user_User", "javaType": "io.fabric8.openshift.api.model.User" } }, "kind": { "type": "string", "description": "", "default": "UserList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.UserList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "speter_inf_Dec": { "type": "object", "description": "", "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Dec" } }, "type": "object", "properties": { "BaseKubernetesList": { "$ref": "#/definitions/kubernetes_List", "javaType": "io.fabric8.kubernetes.api.model.BaseKubernetesList" }, "BuildConfigList": { "$ref": "#/definitions/os_build_BuildConfigList", "javaType": "io.fabric8.openshift.api.model.BuildConfigList" }, "BuildList": { "$ref": "#/definitions/os_build_BuildList", "javaType": "io.fabric8.openshift.api.model.BuildList" }, "BuildRequest": { "$ref": "#/definitions/os_build_BuildRequest", "javaType": "io.fabric8.openshift.api.model.BuildRequest" }, "ClusterPolicy": { "$ref": "#/definitions/os_authorization_ClusterPolicy", "javaType": "io.fabric8.openshift.api.model.ClusterPolicy" }, "ClusterPolicyBinding": { "$ref": "#/definitions/os_authorization_ClusterPolicyBinding", "javaType": "io.fabric8.openshift.api.model.ClusterPolicyBinding" }, "ClusterPolicyBindingList": { "$ref": "#/definitions/os_authorization_ClusterPolicyBindingList", "javaType": "io.fabric8.openshift.api.model.ClusterPolicyBindingList" }, "ClusterPolicyList": { "$ref": "#/definitions/os_authorization_ClusterPolicyList", "javaType": "io.fabric8.openshift.api.model.ClusterPolicyList" }, "ClusterRoleBinding": { "$ref": "#/definitions/os_authorization_ClusterRoleBinding", "javaType": "io.fabric8.openshift.api.model.ClusterRoleBinding" }, "ClusterRoleBindingList": { "$ref": "#/definitions/os_authorization_ClusterRoleBindingList", "javaType": "io.fabric8.openshift.api.model.ClusterRoleBindingList" }, "Config": { "$ref": "#/definitions/kubernetes_config_Config", "javaType": "io.fabric8.kubernetes.api.model.Config" }, "ContainerStatus": { "$ref": "#/definitions/kubernetes_ContainerStatus", "javaType": "io.fabric8.kubernetes.api.model.ContainerStatus" }, "DeploymentConfigList": { "$ref": "#/definitions/os_deploy_DeploymentConfigList", "javaType": "io.fabric8.openshift.api.model.DeploymentConfigList" }, "Endpoints": { "$ref": "#/definitions/kubernetes_Endpoints", "javaType": "io.fabric8.kubernetes.api.model.Endpoints" }, "EndpointsList": { "$ref": "#/definitions/kubernetes_EndpointsList", "javaType": "io.fabric8.kubernetes.api.model.EndpointsList" }, "EnvVar": { "$ref": "#/definitions/kubernetes_EnvVar", "javaType": "io.fabric8.kubernetes.api.model.EnvVar" }, "EventList": { "$ref": "#/definitions/kubernetes_EventList", "javaType": "io.fabric8.kubernetes.api.model.EventList" }, "Group": { "$ref": "#/definitions/os_user_Group", "javaType": "io.fabric8.openshift.api.model.Group" }, "GroupList": { "$ref": "#/definitions/os_user_GroupList", "javaType": "io.fabric8.openshift.api.model.GroupList" }, "Identity": { "$ref": "#/definitions/os_user_Identity", "javaType": "io.fabric8.openshift.api.model.Identity" }, "IdentityList": { "$ref": "#/definitions/os_user_IdentityList", "javaType": "io.fabric8.openshift.api.model.IdentityList" }, "ImageList": { "$ref": "#/definitions/os_image_ImageList", "javaType": "io.fabric8.openshift.api.model.ImageList" }, "ImageStreamList": { "$ref": "#/definitions/os_image_ImageStreamList", "javaType": "io.fabric8.openshift.api.model.ImageStreamList" }, "LocalSubjectAccessReview": { "$ref": "#/definitions/os_authorization_LocalSubjectAccessReview", "javaType": "io.fabric8.openshift.api.model.LocalSubjectAccessReview" }, "Namespace": { "$ref": "#/definitions/kubernetes_Namespace", "javaType": "io.fabric8.kubernetes.api.model.Namespace" }, "NamespaceList": { "$ref": "#/definitions/kubernetes_NamespaceList", "javaType": "io.fabric8.kubernetes.api.model.NamespaceList" }, "Node": { "$ref": "#/definitions/kubernetes_Node", "javaType": "io.fabric8.kubernetes.api.model.Node" }, "NodeList": { "$ref": "#/definitions/kubernetes_NodeList", "javaType": "io.fabric8.kubernetes.api.model.NodeList" }, "OAuthAccessToken": { "$ref": "#/definitions/os_oauth_OAuthAccessToken", "javaType": "io.fabric8.openshift.api.model.OAuthAccessToken" }, "OAuthAccessTokenList": { "$ref": "#/definitions/os_oauth_OAuthAccessTokenList", "javaType": "io.fabric8.openshift.api.model.OAuthAccessTokenList" }, "OAuthAuthorizeToken": { "$ref": "#/definitions/os_oauth_OAuthAuthorizeToken", "javaType": "io.fabric8.openshift.api.model.OAuthAuthorizeToken" }, "OAuthAuthorizeTokenList": { "$ref": "#/definitions/os_oauth_OAuthAuthorizeTokenList", "javaType": "io.fabric8.openshift.api.model.OAuthAuthorizeTokenList" }, "OAuthClient": { "$ref": "#/definitions/os_oauth_OAuthClient", "javaType": "io.fabric8.openshift.api.model.OAuthClient" }, "OAuthClientAuthorization": { "$ref": "#/definitions/os_oauth_OAuthClientAuthorization", "javaType": "io.fabric8.openshift.api.model.OAuthClientAuthorization" }, "OAuthClientAuthorizationList": { "$ref": "#/definitions/os_oauth_OAuthClientAuthorizationList", "javaType": "io.fabric8.openshift.api.model.OAuthClientAuthorizationList" }, "OAuthClientList": { "$ref": "#/definitions/os_oauth_OAuthClientList", "javaType": "io.fabric8.openshift.api.model.OAuthClientList" }, "ObjectMeta": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "PersistentVolume": { "$ref": "#/definitions/kubernetes_PersistentVolume", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolume" }, "PersistentVolumeClaim": { "$ref": "#/definitions/kubernetes_PersistentVolumeClaim", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaim" }, "PersistentVolumeClaimList": { "$ref": "#/definitions/kubernetes_PersistentVolumeClaimList", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimList" }, "PersistentVolumeList": { "$ref": "#/definitions/kubernetes_PersistentVolumeList", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeList" }, "PodList": { "$ref": "#/definitions/kubernetes_PodList", "javaType": "io.fabric8.kubernetes.api.model.PodList" }, "Policy": { "$ref": "#/definitions/os_authorization_Policy", "javaType": "io.fabric8.openshift.api.model.Policy" }, "PolicyBinding": { "$ref": "#/definitions/os_authorization_PolicyBinding", "javaType": "io.fabric8.openshift.api.model.PolicyBinding" }, "PolicyBindingList": { "$ref": "#/definitions/os_authorization_PolicyBindingList", "javaType": "io.fabric8.openshift.api.model.PolicyBindingList" }, "PolicyList": { "$ref": "#/definitions/os_authorization_PolicyList", "javaType": "io.fabric8.openshift.api.model.PolicyList" }, "Project": { "$ref": "#/definitions/os_project_Project", "javaType": "io.fabric8.openshift.api.model.Project" }, "ProjectList": { "$ref": "#/definitions/os_project_ProjectList", "javaType": "io.fabric8.openshift.api.model.ProjectList" }, "ProjectRequest": { "$ref": "#/definitions/os_project_ProjectRequest", "javaType": "io.fabric8.openshift.api.model.ProjectRequest" }, "Quantity": { "$ref": "#/definitions/kubernetes_resource_Quantity", "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "ReplicationControllerList": { "$ref": "#/definitions/kubernetes_ReplicationControllerList", "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerList" }, "ResourceQuota": { "$ref": "#/definitions/kubernetes_ResourceQuota", "javaType": "io.fabric8.kubernetes.api.model.ResourceQuota" }, "ResourceQuotaList": { "$ref": "#/definitions/kubernetes_ResourceQuotaList", "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaList" }, "Role": { "$ref": "#/definitions/os_authorization_Role", "javaType": "io.fabric8.openshift.api.model.Role" }, "RoleBinding": { "$ref": "#/definitions/os_authorization_RoleBinding", "javaType": "io.fabric8.openshift.api.model.RoleBinding" }, "RoleBindingList": { "$ref": "#/definitions/os_authorization_RoleBindingList", "javaType": "io.fabric8.openshift.api.model.RoleBindingList" }, "RoleList": { "$ref": "#/definitions/os_authorization_RoleList", "javaType": "io.fabric8.openshift.api.model.RoleList" }, "RootPaths": { "$ref": "#/definitions/api_RootPaths", "javaType": "io.fabric8.kubernetes.api.model.RootPaths" }, "RouteList": { "$ref": "#/definitions/os_route_RouteList", "javaType": "io.fabric8.openshift.api.model.RouteList" }, "Secret": { "$ref": "#/definitions/kubernetes_Secret", "javaType": "io.fabric8.kubernetes.api.model.Secret" }, "SecretList": { "$ref": "#/definitions/kubernetes_SecretList", "javaType": "io.fabric8.kubernetes.api.model.SecretList" }, "SecurityContextConstraints": { "$ref": "#/definitions/kubernetes_SecurityContextConstraints", "javaType": "io.fabric8.kubernetes.api.model.SecurityContextConstraints" }, "SecurityContextConstraintsList": { "$ref": "#/definitions/kubernetes_SecurityContextConstraintsList", "javaType": "io.fabric8.kubernetes.api.model.SecurityContextConstraintsList" }, "ServiceAccount": { "$ref": "#/definitions/kubernetes_ServiceAccount", "javaType": "io.fabric8.kubernetes.api.model.ServiceAccount" }, "ServiceAccountList": { "$ref": "#/definitions/kubernetes_ServiceAccountList", "javaType": "io.fabric8.kubernetes.api.model.ServiceAccountList" }, "ServiceList": { "$ref": "#/definitions/kubernetes_ServiceList", "javaType": "io.fabric8.kubernetes.api.model.ServiceList" }, "Status": { "$ref": "#/definitions/kubernetes_Status", "javaType": "io.fabric8.kubernetes.api.model.Status" }, "SubjectAccessReview": { "$ref": "#/definitions/os_authorization_SubjectAccessReview", "javaType": "io.fabric8.openshift.api.model.SubjectAccessReview" }, "SubjectAccessReviewResponse": { "$ref": "#/definitions/os_authorization_SubjectAccessReviewResponse", "javaType": "io.fabric8.openshift.api.model.SubjectAccessReviewResponse" }, "TagEvent": { "$ref": "#/definitions/os_image_TagEvent", "javaType": "io.fabric8.openshift.api.model.TagEvent" }, "Template": { "$ref": "#/definitions/os_template_Template", "javaType": "io.fabric8.openshift.api.model.Template" }, "TemplateList": { "$ref": "#/definitions/os_template_TemplateList", "javaType": "io.fabric8.openshift.api.model.TemplateList" }, "User": { "$ref": "#/definitions/os_user_User", "javaType": "io.fabric8.openshift.api.model.User" }, "UserList": { "$ref": "#/definitions/os_user_UserList", "javaType": "io.fabric8.openshift.api.model.UserList" }, "WatchEvent": { "$ref": "#/definitions/kubernetes_watch_WatchEvent", "javaType": "io.fabric8.kubernetes.api.model.WatchEvent" } }, "additionalProperties": true }; })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { var hiddenProperties = ['status', 'deletionTimestamp']; function withProperty(schema, name, action) { if (schema.properties[name]) { action(schema.properties[name]); } } function hideProperties(schema) { _.forEach(hiddenProperties, function (property) { withProperty(schema, property, function (property) { property.hidden = true; }); }); } Kubernetes._module.factory('KubernetesSchema', ['SchemaRegistry', function (schemas) { Kubernetes.configureSchema(); schemas.addListener("k8s schema customizer", function (name, schema) { if (schema.properties) { if (schema.properties.name) { schema.controls = ['name', '*']; } withProperty(schema, 'portalIP', function (property) { property.label = "Portal IP"; }); withProperty(schema, 'publicIPs', function (property) { property.label = "Public IPs"; }); withProperty(schema, 'Spec', function (property) { property.label = 'false'; }); withProperty(schema, 'Metadata', function (property) { property.label = 'false'; }); hideProperties(schema); } if (_.endsWith(name, "ServiceSpec")) { schema.controls = ["portalIP", "createExternalLoadBalancer", "sessionAffinity", "publicIPs", "ports", "selector", "*"]; withProperty(schema, 'sessionAffinity', function (property) { Kubernetes.log.debug("Schema: ", schema); property.enum = ['None', 'ClientIP']; property.default = 'None'; }); } if (_.endsWith(name, "Service")) { schema.controls = undefined; schema.tabs = { 'Basic Information': ['metadata'], 'Details': ['*'] }; Kubernetes.log.debug("Name: ", name, " Schema: ", schema); } }); schemas.addSchema('kubernetes', Kubernetes.schema); // now lets iterate and add all the definitions too angular.forEach(Kubernetes.schema.definitions, function (definition, typeName) { //schemas.addSchema(typeName, definition); schemas.addSchema("#/definitions/" + typeName, definition); }); return Kubernetes.schema; }]); })(Kubernetes || (Kubernetes = {})); /// var Kubernetes; (function (Kubernetes) { // facade this to the watcher service var KubernetesStateImpl = (function () { function KubernetesStateImpl(watcher) { this.watcher = watcher; } Object.defineProperty(KubernetesStateImpl.prototype, "namespaces", { get: function () { return _.map(this.watcher.getObjects(Kubernetes.WatchTypes.NAMESPACES), function (namespace) { return namespace.metadata.name; }); }, enumerable: true, configurable: true }); Object.defineProperty(KubernetesStateImpl.prototype, "selectedNamespace", { get: function () { return this.watcher.getNamespace(); }, set: function (namespace) { this.watcher.setNamespace(namespace); }, enumerable: true, configurable: true }); return KubernetesStateImpl; }()); Kubernetes._module.factory('KubernetesState', ['WatcherService', function (watcher) { return new KubernetesStateImpl(watcher); }]); // TODO this doesn't need to be a service really Kubernetes._module.factory('KubernetesApiURL', function () { return Kubernetes.kubernetesApiUrl(); }); // TODO we'll get rid of this... Kubernetes._module.factory('KubernetesVersion', [function () { return { query: function () { return null; } }; }]); // TODO let's move these into KubernetesModel so controllers don't have to inject them separately Kubernetes._module.factory('KubernetesPods', ['KubernetesModel', function (KubernetesModel) { return KubernetesModel['podsResource']; }]); Kubernetes._module.factory('KubernetesReplicationControllers', ['KubernetesModel', function (KubernetesModel) { return KubernetesModel['replicationcontrollersResource']; }]); Kubernetes._module.factory('KubernetesServices', ['KubernetesModel', function (KubernetesModel) { return KubernetesModel['servicesResource']; }]); })(Kubernetes || (Kubernetes = {})); /// /// /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.FileDropController = Kubernetes.controller("FileDropController", ["$scope", "KubernetesModel", "FileUploader", '$http', function ($scope, model, FileUploader, $http) { var log = Logger.get('kubernetes-file-uploader'); var uploader = $scope.uploader = new FileUploader({ autoUpload: false, removeAfterUpload: true, url: Kubernetes.kubernetesApiUrl() }); $scope.uploader.onAfterAddingFile = function (file) { var reader = new FileReader(); reader.onload = function () { if (reader.readyState === 2) { log.debug("File added: ", file); var data = reader.result; var obj = null; if (_.endsWith(file._file.name, '.json')) { log.debug("Parsing JSON file"); try { obj = angular.fromJson(data); } catch (err) { log.debug("Failed to read dropped file ", file._file.name, ": ", err); return; } } else if (_.endsWith(file._file.name, '.yaml')) { log.debug("Parsing YAML file"); try { obj = jsyaml.load(data); } catch (err) { log.debug("Failed to read dropped file ", file._file.name, ": ", err); return; } } else { log.debug("Unknown file type for file: ", file._file.name); return; } log.debug("Dropped object: ", obj); if (!KubernetesAPI.getNamespace(obj)) { obj.metadata.namespace = model.currentNamespace(); } KubernetesAPI.put({ object: obj, success: function (data) { Core.notification("success", "Applied " + file._file.name); }, error: function (err) { log.info("Got error applying", file._file.name, ": ", err); Core.notification("warning", "Failed to apply " + file._file.name + ", error: " + err.message); } }); } }; reader.readAsText(file._file); }; $scope.uploader.onBeforeUploadItem = function (item) { log.debug("Uploading: ", item); //Core.notification('info', 'Uploading ' + item); }; $scope.uploader.onSuccessItem = function (item) { log.debug("onSuccessItem: ", item); }; $scope.uploader.onErrorItem = function (item, response, status) { log.debug("Failed to apply, response: ", response, " status: ", status); }; }]); Kubernetes.NamespaceController = Kubernetes.controller('NamespaceController', ['$scope', 'WatcherService', function ($scope, watcher) { $scope.namespaces = watcher.getObjects('namespaces'); $scope.$watchCollection('namespaces', function (newValue, oldValue) { if (newValue !== oldValue) { $scope.namespace = watcher.getNamespace(); } }); $scope.$watch('namespace', function (newValue, oldValue) { if (newValue !== oldValue) { if (newValue !== oldValue) { watcher.setNamespace(newValue); } } }); }]); Kubernetes.TopLevel = Kubernetes.controller("TopLevel", ["$scope", "KubernetesVersion", "KubernetesState", function ($scope, KubernetesVersion, KubernetesState) { $scope.version = undefined; $scope.showAppView = Kubernetes.isAppView(); $scope.isActive = function (href) { return Kubernetes.isLinkActive(href); }; $scope.mode = 'yaml'; $scope.rawMode = true; $scope.dirty = false; $scope.readOnly = true; $scope.rawModel = null; $scope.$on('hawtioEditor_default_dirty', function ($event, dirty) { $scope.dirty = dirty; }); $scope.save = function (rawModel) { var obj = null; var str = rawModel.replace(/\t/g, " "); try { obj = jsyaml.load(str); } catch (err) { Core.notification("warning", "Failed to save object, error: \"" + err + "\""); } if (!obj) { return; } $scope.readOnly = true; KubernetesAPI.put({ object: obj, success: function (data) { $scope.dirty = false; Core.notification("success", "Saved object " + Kubernetes.getName(obj)); Core.$apply($scope); }, error: function (err) { console.log("Got error: ", err); Core.notification("warning", "Failed to save object, error: \"" + err.message + "\""); $scope.dirty = false; Core.$apply($scope); } }); }; $scope.kubernetes = KubernetesState; KubernetesVersion.query(function (response) { $scope.version = response; }); }]); })(Kubernetes || (Kubernetes = {})); /// var Kubernetes; (function (Kubernetes) { Kubernetes.NamespaceController = Kubernetes.controller("NamespaceController", ["$scope", "WatcherService", function ($scope, watcher) { $scope.watcher = watcher; $scope.namespaceObjects = watcher.getObjects('namespaces'); $scope.namespace = watcher.getNamespace(); $scope.namespaces = []; $scope.$watch('namespace', function (newValue, oldValue) { if (newValue !== oldValue) { watcher.setNamespace(newValue); } }); $scope.$watch('watcher.getNamespace()', function (newValue, oldValue) { if (newValue !== oldValue) { $scope.namespace = newValue; } }); $scope.$watchCollection('namespaceObjects', function (namespaceObjects) { $scope.namespaces = _.map(namespaceObjects, function (namespace) { return namespace.metadata.name; }); }); }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { var OverviewDirective = Kubernetes._module.directive("kubernetesOverview", ["$templateCache", "$compile", "$interpolate", "$timeout", "$window", "KubernetesState", 'KubernetesModel', function ($templateCache, $compile, $interpolate, $timeout, $window, KubernetesState, KubernetesModel) { var log = Logger.get('kubernetes-overview'); var model = KubernetesModel; var state = KubernetesState; return { restrict: 'E', replace: true, link: function (scope, element, attr) { scope.model = model; element.css({ visibility: 'hidden' }); scope.getEntity = function (type, key) { switch (type) { case 'host': return model.podsByHost[key]; case 'pod': return model.podsByKey[key]; case 'replicationController': return model.replicationControllersByKey[key]; case 'service': return model.servicesByKey[key]; default: return undefined; } }; scope.kubernetes = state; scope.customizeDefaultOptions = function (options) { options.Endpoint = ['Blank', {}]; }; scope.mouseEnter = function ($event) { if (scope.jsPlumb) { angular.element($event.currentTarget).addClass("hovered"); scope.jsPlumb.getEndpoints($event.currentTarget).forEach(function (endpoint) { endpoint.connections.forEach(function (connection) { if (!connection.isHover()) { connection.setHover(true); connection.endpoints.forEach(function (e) { scope.mouseEnter({ currentTarget: e.element }); }); } }); }); } }; scope.mouseLeave = function ($event) { if (scope.jsPlumb) { angular.element($event.currentTarget).removeClass("hovered"); scope.jsPlumb.getEndpoints($event.currentTarget).forEach(function (endpoint) { endpoint.connections.forEach(function (connection) { if (connection.isHover()) { connection.setHover(false); connection.endpoints.forEach(function (e) { scope.mouseLeave({ currentTarget: e.element }); }); } }); }); } }; /* scope.customizeEndpointOptions = (jsPlumb, node, options) => { var type = node.el.attr('data-type'); // log.debug("endpoint type: ", type); switch (type) { case 'pod': break; case 'service': break; case 'replicationController': break; } }; */ scope.customizeConnectionOptions = function (jsPlumb, edge, params, options) { var type = edge.source.el.attr('data-type'); options.connector = ["Bezier", { curviness: 50, stub: 25, alwaysRespectStubs: true }]; params.paintStyle = { lineWidth: 2, strokeStyle: '#5555cc' }; switch (type) { case 'pod': break; case 'service': params.anchors = [ ["Continuous", { faces: ["right"] }], ["Continuous", { faces: ["left"] }] ]; break; case 'replicationController': params.anchors = [ ["Perimeter", { shape: "Circle" }], ["Continuous", { faces: ["right"] }] ]; break; } //log.debug("connection source type: ", type); return options; }; function interpolate(template, config) { return $interpolate(template)(config); } function createElement(template, thingName, thing) { var config = {}; config[thingName] = thing; return interpolate(template, config); } function createElements(template, thingName, things) { return things.map(function (thing) { return createElement(template, thingName, thing); }); } function appendNewElements(parentEl, template, thingName, things) { things.forEach(function (thing) { var key = thing['_key'] || thing['elementId'] || thing['id']; var existing = parentEl.find("#" + key); if (!existing.length) { log.debug("existing: ", existing, " key: ", key); parentEl.append($compile(createElement(template, thingName, thing))(scope)); } }); } function namespaceFilter(item) { return Kubernetes.getNamespace(item) === scope.kubernetes.selectedNamespace; } function firstDraw() { log.debug("First draw"); element.empty(); var services = model.services; var replicationControllers = model.replicationControllers; var pods = model.pods; var hosts = model.hosts; // log.debug("hosts: ", model.hosts); var parentEl = angular.element($templateCache.get("overviewTemplate.html")); var servicesEl = parentEl.find(".services"); var hostsEl = parentEl.find(".hosts"); var replicationControllersEl = parentEl.find(".replicationControllers"); servicesEl.append(createElements($templateCache.get("serviceTemplate.html"), 'service', services.filter(namespaceFilter))); replicationControllersEl.append(createElements($templateCache.get("replicationControllerTemplate.html"), 'replicationController', replicationControllers.filter(namespaceFilter))); hosts.forEach(function (host) { var hostEl = angular.element(createElement($templateCache.get("overviewHostTemplate.html"), 'host', host)); var podContainer = angular.element(hostEl.find('.pod-container')); podContainer.append(createElements($templateCache.get("podTemplate.html"), "pod", host.pods)); hostsEl.append(hostEl); }); //parentEl.append(createElements($templateCache.get("podTemplate.html"), 'pod', pods)); element.append($compile(parentEl)(scope)); $timeout(function () { element.css({ visibility: 'visible' }); }, 250); } function update() { scope.$emit('jsplumbDoWhileSuspended', function () { log.debug("Update"); var services = model.services; var replicationControllers = model.replicationControllers; var pods = model.pods; var hosts = model.hosts; var parentEl = element.find('[hawtio-jsplumb]'); var children = parentEl.find('.jsplumb-node'); children.each(function (index, c) { var child = angular.element(c); var key = child.attr('id'); log.debug('key: ', key); if (Core.isBlank(key)) { return; } var type = child.attr('data-type'); switch (type) { case 'host': if (key in model.podsByHost) { return; } break; case 'service': if (key in model.servicesByKey && Kubernetes.getNamespace(model.servicesByKey[key]) == scope.kubernetes.selectedNamespace) { var service = model.servicesByKey[key]; child.attr('connect-to', service.connectTo); return; } break; case 'pod': /* if (hasId(pods, id)) { return; } */ if (key in model.podsByKey) { return; } break; case 'replicationController': if (key in model.replicationControllersByKey) { var replicationController = model.replicationControllersByKey[key]; child.attr('connect-to', replicationController.connectTo); return; } break; default: log.debug("Ignoring element with unknown type"); return; } log.debug("Removing: ", key); child.remove(); }); var servicesEl = element.find(".services"); var replicationControllersEl = element.find(".replicationControllers"); var hostsEl = element.find(".hosts"); appendNewElements(servicesEl, $templateCache.get("serviceTemplate.html"), "service", services); appendNewElements(replicationControllersEl, $templateCache.get("replicationControllerTemplate.html"), "replicationController", replicationControllers); appendNewElements(hostsEl, $templateCache.get("overviewHostTemplate.html"), "host", hosts); hosts.forEach(function (host) { var hostEl = angular.element(hostsEl.find("#" + host.elementId)); var podContainer = angular.element(hostEl.find('.pod-container')); appendNewElements(podContainer, $templateCache.get("podTemplate.html"), "pod", host.pods); }); }); } function refreshDrawing() { log.debug("Refreshing drawing"); if (element.children().length === 0) { firstDraw(); } else { update(); } Core.$apply(scope); } scope.$on('kubernetesModelUpdated', _.debounce(refreshDrawing, 500, { trailing: true })); setTimeout(refreshDrawing, 100); } }; }]); var OverviewBoxController = Kubernetes.controller("OverviewBoxController", ["$scope", "$location", function ($scope, $location) { $scope.viewDetails = function (entity, path) { if (entity) { var namespace = Kubernetes.getNamespace(entity); var id = Kubernetes.getName(entity); $location.path(UrlHelpers.join('/kubernetes/namespace', namespace, path, id)); } else { Kubernetes.log.warn("No entity for viewDetails!"); } }; }]); var scopeName = "OverviewController"; var OverviewController = Kubernetes.controller(scopeName, ["$scope", "$location", "$http", "$timeout", "$routeParams", "KubernetesModel", "KubernetesState", "KubernetesApiURL", function ($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL) { $scope.name = scopeName; $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); //$scope.subTabConfig = []; }]); })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.PipelinesController = Kubernetes.controller("PipelinesController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); /** * Lets update the various data to join them together to a pipeline model */ function updateData() { var pipelineSteps = {}; if ($scope.buildConfigs && $scope.builds && $scope.deploymentConfigs) { Kubernetes.enrichBuildConfigs($scope.buildConfigs, $scope.builds); $scope.fetched = true; angular.forEach($scope.buildConfigs, function (buildConfig) { var pipelineKey = createPipelineKey(buildConfig); if (pipelineKey) { pipelineSteps[pipelineKey] = { buildConfig: buildConfig, builds: [], triggeredBy: null, triggersSteps: [], $class: 'pipeline-build' }; } }); angular.forEach($scope.builds, function (build) { var pipelineKey = createPipelineKey(build); if (pipelineKey) { var pipeline = pipelineSteps[pipelineKey]; if (!pipeline) { //console.log("warning no pipeline generated for buildConfig for key " + pipelineKey + " for build " + angular.toJson(build, true)); console.log("warning no pipeline generated for buildConfig for key " + pipelineKey + " for build " + build.$name); } else { pipeline.builds.push(build); } } }); // TODO now we need to look at the triggers to figure out which pipelineSteps triggers each pipelineStep // now lets create an array of all pipelines, starting from the first known step with a list of the steps var pipelines = []; angular.forEach(pipelineSteps, function (pipelineStep, key) { if (!pipelineStep.triggeredBy) { // we are a root step.... pipelines.push(pipelineStep); // now lets add all the steps for this key... pipelineStep.triggersSteps.push(pipelineStep); angular.forEach(pipelineSteps, function (step) { if (step.triggeredBy === key) { pipelineStep.triggersSteps.push(step); } }); } }); angular.forEach($scope.deploymentConfigs, function (deploymentConfig) { if (!deploymentConfig.kind) { deploymentConfig.kind = "DeploymentConfig"; } angular.forEach(deploymentConfig.triggers, function (trigger) { var type = trigger.type; var imageChangeParams = trigger.imageChangeParams; if (imageChangeParams && type === "ImageChange") { var from = imageChangeParams.from; if (from) { var name = from.name; if (from.kind === "ImageRepository") { var tag = imageChangeParams.tag || "latest"; if (name) { // now lets find a pipeline step which fires from this angular.forEach(pipelineSteps, function (pipelineStep, key) { var to = Core.pathGet(pipelineStep, ["buildConfig", "parameters", "output", "to"]); if (to && (to.kind === "ImageRepository" || to.kind === "ImageStream")) { var toName = to.name; if (toName === name) { var selector = Core.pathGet(deploymentConfig, ["template", "controllerTemplate", "selector"]); var pods = []; var $podCounters = selector ? Kubernetes.createPodCounters(selector, KubernetesModel.podsForNamespace(), pods) : null; var deployPipelineStep = { buildConfig: deploymentConfig, $class: 'pipeline-deploy', $podCounters: $podCounters, $pods: pods }; pipelineStep.triggersSteps.push(deployPipelineStep); } } }); } } } } }); }); $scope.pipelines = pipelines; } } /** * Lets create a unique key for build / config we can use to do linking of builds / configs / triggers */ function createPipelineKey(buildConfig) { return Core.pathGet(buildConfig, ["parameters", "source", "git", "uri"]); } $scope.$keepPolling = function () { return Kubernetes.keepPollingModel; }; $scope.fetch = PollHelpers.setupPolling($scope, function (next) { var ready = 0; var numServices = 3; function maybeNext() { if (++ready >= numServices) { next(); } } var url = Kubernetes.buildsRestURL(); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.builds = Kubernetes.enrichBuilds(data.items); updateData(); } maybeNext(); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); maybeNext(); }); url = Kubernetes.buildConfigsRestURL(); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.buildConfigs = data.items; updateData(); } maybeNext(); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); maybeNext(); }); url = Kubernetes.deploymentConfigsRestURL(); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.deploymentConfigs = data.items; updateData(); } maybeNext(); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); maybeNext(); }); }); $scope.fetch(); }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.PodController = Kubernetes.controller("PodController", ["$scope", "KubernetesModel", "KubernetesState", "ServiceRegistry", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "$window", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, ServiceRegistry, $templateCache, $location, $routeParams, $http, $timeout, $window, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.rawModel = null; $scope.itemConfig = { properties: { 'containers/image$': { template: $templateCache.get('imageTemplate.html') }, 'status/phase': { template: $templateCache.get('statusTemplate.html') }, '\\/Env\\/': { template: $templateCache.get('envItemTemplate.html') }, '^\\/labels$': { template: $templateCache.get('labelTemplate.html') }, '\\/env\\/key$': { hidden: true } } }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.$watch('model.pods', function (newValue, oldValue) { updateData(); }, true); $scope.flipRaw = function () { $scope.rawMode = !$scope.rawMode; Core.$apply($scope); }; $scope.openLogs = function () { var pods = [$scope.item]; Kubernetes.openLogsForPods(ServiceRegistry, $window, KubernetesModel.currentNamespace(), pods); }; updateData(); function updateData() { $scope.id = $routeParams["id"]; $scope.item = $scope.model.getPod(KubernetesState.selectedNamespace, $scope.id); if ($scope.item) { $scope.rawModel = Kubernetes.toRawYaml($scope.item); } Core.$apply($scope); } }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.PodEditController = Kubernetes.controller("PodEditController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "SchemaRegistry", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, schemas) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.schema = KubernetesSchema; $scope.config = schemas.cloneSchema("io.fabric8.kubernetes.api.model.Pod"); //$scope.config = KubernetesSchema.definitions.kubernetes_v1beta2_Pod; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.$on('$routeUpdate', function ($event) { updateData(); }); updateData(); function updateData() { if ($scope.id) { $scope.entity = $scope.model.getPod(KubernetesState.selectedNamespace, $scope.id); Core.$apply($scope); $scope.fetched = true; } else { $scope.fetched = true; } } $scope.save = function () { console.log($scope.entity); }; }]); })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { var log = Logger.get("kubernetes-pod-logs"); Kubernetes._module.service("PodLogReplacements", function () { return []; }); Kubernetes._module.run(["PodLogReplacements", function (PodLogReplacements) { var log = Logger.get("pod-log-replacers"); // Add ANSI escape character replacer // adapted from https://github.com/mmalecki/ansispan var colors = { '30': 'black', '31': 'red', '32': 'green', '33': 'yellow', '34': 'blue', '35': 'purple', '36': 'cyan', '37': 'white' }; PodLogReplacements.push(function (msg) { if (!msg) { return msg; } var end = ""; _.forOwn(colors, function (color, code) { var start = ""; msg = msg.replace(new RegExp('\033\\[' + code + 'm', 'g'), start); msg = msg.replace(new RegExp('\033\\[0;' + code + 'm', 'g'), start); }); msg = msg.replace(/\033\[1m/g, '').replace(/\033\[22m/g, ''); msg = msg.replace(/\033\[3m/g, '').replace(/\033\[23m/g, ''); msg = msg.replace(/\033\[m/g, end); msg = msg.replace(/\033\[0m/g, end); msg = msg.replace(/\033\[39m/g, end); msg = msg.replace(/\033\[2m/g, ''); msg = msg.replace(/\033\[0;39m/g, end); log.debug("Running replacement on message: ", msg); return msg; }); }]); Kubernetes._module.controller("Kubernetes.PodLogLinkController", ["$scope", "$interval", "TerminalService", "$templateCache", function ($scope, $interval, TerminalService, $templateCache) { $scope.openLogs = function (entity) { log.debug("Open logs: ", entity); TerminalService.newTerminal($interval, entity.metadata.selfLink, entity.$oracleName, entity, "/java/console/api/oracle/extract/log?rcName=" + Kubernetes.getName(entity), $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, 'logShell.html'))); }; }]); Kubernetes._module.directive('podLogDisplay', ["userDetails", "PodLogReplacements", function (userDetails, PodLogReplacements) { return { restrict: 'E', template: "\n
\n ", link: function (scope, element, attr) { var link = scope.$eval('podLink'); var name = scope.$eval('containerName'); if (!link) { return; } scope.fetched = false; scope.previous = false; scope.messages = []; link = UrlHelpers.join(Kubernetes.masterApiUrl(), link, 'log'); link = KubernetesAPI.wsUrl(link); link.search({ follow: true, tailLines: 1000, access_token: userDetails.token }); var messages = []; var pullMessages = _.debounce(function () { scope.messages = scope.messages.concat(_.remove(messages, function () { return true; }).map(function (msg) { PodLogReplacements.forEach(function (replFunc) { if (angular.isFunction(replFunc)) { msg = replFunc(msg); } }); return msg; })); if (!scope.fetched) { scope.fetched = true; } Core.$apply(scope); }, 1000); function initSocket(link) { scope.fetched = false; messages.length = 0; scope.messages.length = 0; var ws = new WebSocket(link.toString(), 'base64.binary.k8s.io'); ws.onmessage = function (event) { try { var message = window.atob(event.data); messages.push(message); pullMessages(); } catch (err) { } }; return ws; } var ws = initSocket(link); scope.$watch('previous', function (value, old) { if (value !== old) { if (link.hasSearch('previous')) { link.removeSearch('previous').addSearch('previous', scope.previous); } else { link.addSearch('previous', scope.previous); } ws.close(); ws = initSocket(link); } }); element.on('$destroy', function () { if (ws) { try { ws.close(); } catch (err) { } delete ws; } }); } }; }]); Kubernetes._module.directive('podLogWindow', ["$compile", "TerminalService", function ($compile, TerminalService) { return { restrict: 'A', scope: false, link: function (scope, element, attr) { Kubernetes.addWindowActions(scope, element, TerminalService); scope.atBottom = true; scope.$watch('atBottom', function (val) { }); } }; }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.EnvItem = Kubernetes.controller("EnvItem", ["$scope", function ($scope) { var parts = $scope.data.split('='); $scope.key = parts.shift(); $scope.value = parts.join('='); }]); // main controller for the page Kubernetes.Pods = Kubernetes.controller("Pods", ["$scope", "KubernetesModel", "KubernetesPods", "KubernetesState", "ServiceRegistry", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesPods, KubernetesState, ServiceRegistry, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.$on('kubernetesModelUpdated', function () { Core.$apply($scope); }); $scope.itemSchema = Forms.createFormConfiguration(); $scope.tableConfig = { data: 'model.pods', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: '_key', displayName: 'Name', defaultSort: true, cellTemplate: $templateCache.get("idTemplate.html") }, { field: '$statusCss', displayName: 'Status', cellTemplate: $templateCache.get("statusTemplate.html") }, { field: '$eventCount', displayName: 'Events', cellTemplate: $templateCache.get("eventSummaryTemplate.html") }, { field: '$restartCount', displayName: 'Restarts' }, { field: '$createdTime', displayName: 'Age', cellTemplate: $templateCache.get("ageTemplate.html") }, { field: '$imageNames', displayName: 'Images', cellTemplate: $templateCache.get("imageTemplate.html") }, { field: '$host', displayName: 'Host', cellTemplate: $templateCache.get("hostTemplate.html") }, { field: '$labelsText', displayName: 'Labels', cellTemplate: $templateCache.get("labelTemplate.html") }, { field: '$podIP', displayName: 'Pod IP', customSortField: function (field) { return Kubernetes.sortByPodIp(field.$podIP); } } ] }; $scope.openLogs = function () { var pods = $scope.tableConfig.selectedItems; if (!pods || !pods.length) { if ($scope.id) { var item = $scope.item; if (item) { pods = [item]; } } } Kubernetes.openLogsForPods(ServiceRegistry, $window, KubernetesModel.currentNamespace(), pods); }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.deletePrompt = function (selected) { if (angular.isString(selected)) { selected = [{ id: selected }]; } UI.multiItemConfirmActionDialog({ collection: selected, index: 'metadata.name', onClose: function (result) { if (result) { function deleteSelected(selected, next) { if (next) { Kubernetes.log.debug("deleting: ", Kubernetes.getName(next)); KubernetesPods.delete({ id: Kubernetes.getName(next) }, undefined, function () { Kubernetes.log.debug("deleted: ", Kubernetes.getName(next)); deleteSelected(selected, selected.shift()); }, function (error) { Kubernetes.log.debug("Error deleting: ", error); deleteSelected(selected, selected.shift()); }); } } deleteSelected(selected, selected.shift()); } }, title: 'Delete pods?', action: 'The following pods will be deleted:', okText: 'Delete', okClass: 'btn-danger', custom: "This operation is permanent once completed!", customClass: "alert alert-warning" }).open(); }; $scope.createPods = function () { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { if (xhr.readyState == 4) { if (xhr.status == 200) { var obj = JSON.parse(xhr.responseText); var object = { "name": "newpod", "labels": { "aim": "test", "app": "oracle" }, "path": '/home/', "port": 1525 }; Kubernetes.createRC(object); } else { } } }; xhr.open("POST", "/oracleAppPath", false); //与服务器连接并发送 xhr.send(null); }; }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.ReplicationControllerController = Kubernetes.controller("ReplicationControllerController", ["$scope", "KubernetesModel", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.rawModel = null; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.itemConfig = { properties: { '^\\/labels$': { template: $templateCache.get('labelTemplate.html') } } }; $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.$watch('model.pods', function (newValue, oldValue) { updateData(); }, true); $scope.flipRaw = function () { $scope.rawMode = !$scope.rawMode; Core.$apply($scope); }; updateData(); function updateData() { if ($scope.dirty) { return; } $scope.id = $routeParams["id"]; $scope.item = $scope.model.getReplicationController(KubernetesState.selectedNamespace, $scope.id); if ($scope.item) { $scope.rawModel = Kubernetes.toRawYaml($scope.item); } Core.$apply($scope); } }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.ReplicationControllerEditController = Kubernetes.controller("ReplicationControllerEditController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "SchemaRegistry", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, schemas) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.schema = KubernetesSchema; Kubernetes.log.debug("Schema: ", $scope.schema); $scope.config = schemas.cloneSchema("io.fabric8.kubernetes.api.model.ReplicationController"); //$$scope.config = KubernetesSchema.definitions.kubernetes_v1beta3_ReplicationController; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.$on('$routeUpdate', function ($event) { updateData(); }); updateData(); function updateData() { if ($scope.id) { $scope.entity = $scope.model.getReplicationController(KubernetesState.selectedNamespace, $scope.id); Core.$apply($scope); $scope.fetched = true; } else { $scope.fetched = true; } } }]); })(Kubernetes || (Kubernetes = {})); /// /// /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.ReplicationControllers = Kubernetes.controller("ReplicationControllers", ["$scope", "KubernetesModel", "KubernetesReplicationControllers", "KubernetesPods", "ConfigsModel", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesReplicationControllers, KubernetesPods, ConfigsModel, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.configs = ConfigsModel; $scope.model = KubernetesModel; $scope.tableConfig = { data: 'model.replicationControllers', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: '$oracleName', displayName: '服务名称', cellTemplate: $templateCache.get("idTemplate.html"), customSortField: function (field) { return field; } }, //{ field: '$replicas', // displayName: 'Scale', // cellTemplate:$templateCache.get("desiredReplicas.html") //}, { field: '$pods.age', displayName: '启动时间', cellTemplate: $templateCache.get("ageTemplate.html") }, { field: '$labelsText', displayName: '数据标签', cellTemplate: $templateCache.get("labelTemplate.html") }, { field: '$pods', displayName: '连接参数', cellTemplate: $templateCache.get("connectParamTemplate.html") }, { field: '$podCounters', displayName: '服务状态', cellTemplate: $templateCache.get("podCountsAndLinkTemplate.html"), customSortField: function (field) { console.log(field); if (field.$podCounters.ready) { return 3; } else if (field.$podCounters.valid || field.$podCounters.waiting) { return 2; } else if (field.$podCounters.error) { return 0; } else { return 1; } } }, { field: '$extractStatus', displayName: '数据汇总状态', cellTemplate: $templateCache.get("dataSummaryTemplate.html") }, { field: '$checkStatus', displayName: '检验状态', cellTemplate: $templateCache.get("dataCheckStatus.html") } ], sortInfo: { sortBy: "$oracleName", ascending: false } }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.deletePrompt = function (selected) { if (angular.isString(selected)) { selected = [{ id: selected }]; } var extractItems = Kubernetes.checkForExtract(selected); if (extractItems.length == 0) { UI.multiItemConfirmActionDialog({ collection: selected, index: '$alias', onClose: function (result) { if (result) { function deleteSelected(selected, next) { if (next) { Kubernetes.resizeController($http, KubernetesApiURL, next, 0, function () { KubernetesReplicationControllers.delete({ id: Kubernetes.getName(next) }, undefined, function () { if (next.metadata.labels.style === "oracle") { Kubernetes.connectOracle($http, $timeout, "/java/console/api/cancelOracleConection", "delete", next, 0); } deleteSelected(selected, selected.shift()); }, function (error) { Kubernetes.log.debug("Error deleting: ", error); deleteSelected(selected, selected.shift()); }); }); } } deleteSelected(selected, selected.shift()); } }, title: '是否需要删除oracle服务?', action: '以下的oracle服务将会被删除:', okText: '删除', okClass: 'btn-danger sj_btn_cir', custom: "该服务删除后将会清除oracle对应服务的端口等资源占用,但不删除数据文件,是否删除,请确认!", customClass: "alert alert-warning sj_alert-warning", cancelText: "取消", cancelClass: 'sj_btn_grey' }).open(); } else { var name = ""; angular.forEach(extractItems, function (item) { name += item.$oracleName + ","; }); //alert("删除服务失败:" + name + "服务正在执行汇总操作,不能被删除"); Configs.customAlert("提示", "操作失败:正在执行汇总操作的服务不能被删除!", '', null, 0, "error"); } }; $scope.createRCs = function () { $http({ url: '/java/console/api/cancelOracleConection', dataType: 'json', method: 'POST', params: { param: "data" } }).success(function (data, header, config, status) { console.log("success"); }).error(function (data, header, config, status) { //log.warn("Failed to connect " + connectParam + " " + data + " " + status); }); }; $scope.stopPrompt = function (selected) { if (angular.isString(selected)) { selected = [{ id: selected }]; } var extractItems = Kubernetes.checkForExtract(selected); if (extractItems.length == 0) { UI.multiItemConfirmActionDialog({ collection: selected, index: '$alias', onClose: function (result) { if (result) { function stopSelected(selected, next) { if (next) { Kubernetes.resizeController($http, KubernetesApiURL, next, 0, function () { if (next.metadata.labels.style === "oracle") { Kubernetes.connectOracle($http, $timeout, "/java/console/api/cancelOracleConection", "stop", next, 0); } stopSelected(selected, selected.shift()); }); } } stopSelected(selected, selected.shift()); } }, title: '是否需要停止oracle服务?', action: '以下的oracle服务将会被停止:', okText: '停止', okClass: 'btn-danger sj_btn_cir', custom: "该服务停止后将无法继续提供连接访问服务,但可通过启动按钮重新启动该服务以进行访问。是否停止,请确认", customClass: "alert alert-warning sj_alert-warning", cancelText: "取消", cancelClass: 'sj_btn_grey' }).open(); } else { var name = ""; angular.forEach(extractItems, function (item) { name += item.$oracleName + ","; }); //alert("停止服务失败:" + name + "服务正在执行汇总操作,不能停止"); Configs.customAlert("提示", "操作失败:正在执行汇总操作的服务不能被停止!", '', null, 0, "error"); } }; $scope.reStartPrompt = function (selected) { function startSelected(selected, next) { if (next) { console.log(Kubernetes.getLabels(next).status); if (next.$replicas === 0) { Kubernetes.resizeController($http, KubernetesApiURL, next, 1, function () { Kubernetes.connectOracle($http, $timeout, "/java/console/api/connectOracle", "reStart", next, 200); startSelected(selected, selected.shift()); }); } else { if (Kubernetes.getLabels(next).status == "1") Kubernetes.connectOracle($http, $timeout, "/java/console/api/connectOracle", "reStart", next, 200); startSelected(selected, selected.shift()); } } } startSelected(selected, selected.shift()); }; /** 处理抽取标准表 **/ $scope.extractOracle = function (selected) { var answer = false; for (var i = 0; i < ConfigsModel.oracleParam.length; ++i) { if (ConfigsModel.oracleParam[i].type == 1) { answer = true; break; } } if (answer == false) { /** 提示没有配置标准表汇总库 **/ Configs.customAlert("提示", "操作失败:没有配置默认的标准表汇总库", '', null, 0, "error"); return; } // 检查数据库是否已启动 var result = Kubernetes.checkIsStartSuccess(selected); if (result.length > 0) { Configs.customAlert("提示", "操作失败:选择服务中存在未启动的数据库,请先启动服务", '', null, 0, "error"); return; } var answer = false; var selectedItem = null; for (var i = 0; i < ConfigsModel.oracleParam.length; ++i) { if (ConfigsModel.oracleParam[i].type == 1) { selectedItem = ConfigsModel.oracleParam[i]; answer = true; break; } } if (answer == false) { /** 提示没有配置标准表汇总库 **/ Configs.customAlert("提示", "操作失败:没有配置默认的标准表汇总库", '', null, 0, "error"); return; } Kubernetes.extractDataToOracle($http, "/java/console/api/oracle/standardextract", selected, selectedItem); }; $scope.extractClick = { items: null, selectedItem: { name: "当前没有可用的汇总库" }, dialog: new UI.Dialog(), onOk: function () { var extractClick = $scope.extractClick; extractClick.items = $scope.tableConfig.selectedItems; Kubernetes.extractDataToOracle($http, "/java/console/api/oracle", extractClick.items, extractClick.selectedItem); //extractClick.selectedItem = $scope.filterReplicationControllers[0] || ""; extractClick.dialog.close(); }, open: function (selected) { var extractClick = $scope.extractClick; if ($scope.configs && $scope.configs.oracleParam instanceof Array && $scope.configs.oracleParam.length > 0) extractClick.selectedItem = $scope.configs.oracleParam[0]; var result = Kubernetes.checkIsStartSuccess($scope.tableConfig.selectedItems); if (result.length > 0) { Configs.customAlert("提示", "操作失败:选择服务中存在未启动的数据库,请先启动服务", '', null, 0, "error"); return; } /** 检查数据库是否正在抽取 **/ if (Kubernetes.checkRCIsExtracting(selected)) { Configs.customAlert("提示", "操作失败:选择的数据库中有正在执行汇总的数据库,请勿重复执行汇总操作", '', null, 0, "error"); return; } extractClick.dialog.open(); /*extractData.selectedItem = $scope.filterReplicationControllers[0] || ""; extractData.items = selected;*/ $timeout(function () { $('#newDataName').focus(); }, 50); }, close: function () { $scope.extractClick.selectedItem = { name: "当前没有可用的汇总库" }; $scope.extractClick.dialog.close(); } }; }]); })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { function schemaSetRequired(schema, propertyName, isRequired) { if (isRequired === void 0) { isRequired = true; } if (schema && propertyName) { var required = schema.required; if (isRequired) { if (!required) { required = []; schema.required = required; } if (!_.contains(required, propertyName)) { required.push(propertyName); } } else { if (required) { var idx = required.indexOf(propertyName); if (idx >= 0) { required.splice(idx, 1); } } } } } Kubernetes.schemaSetRequired = schemaSetRequired; })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.SecretController = Kubernetes.controller("SecretController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "K8SClientFactory", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, K8SClientFactory) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); Kubernetes.selectSubNavBar($scope, "Secrets", $scope.id ? "Edit Secret: " + $scope.id : "Create Secret"); var kubeClient = Kubernetes.createKubernetesClient("secrets"); var onSaveUrl = $location.search()["savedUrl"]; var createKind = $location.search()["kind"]; $scope.sshKeys = Kubernetes.sshSecretDataKeys; $scope.httpsKeys = Kubernetes.httpsSecretDataKeys; var secretLabels = { "ssh-key": "SSH private key", "ssh-key.pub": "SSH public key", "ca.crt": "CA Certificate", ".dockercfg": "Docker config", "username": "User name" }; var secretTooltips = { "ssh-key": "SSH private key text contents", "ca.crt": "Certificate Authority (CA) Certificate", ".dockercfg": "Docker configuration token" }; $scope.$on('kubernetesModelUpdated', function () { if ($scope.id && !$scope.secret) { updateData(); } }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.propertyKeys = function () { return _.keys(secretLabels); }; $scope.checkNameUnique = function (value) { var answer = true; angular.forEach($scope.model.secrets, function (secret) { var name = Kubernetes.getName(secret); if (value === name) { answer = false; } }); return answer; }; $scope.checkFieldUnique = function (key) { return $scope.entity.properties[key] ? false : true; }; $scope.hasAllKeys = function (keys) { var answer = keys && keys.length; angular.forEach(keys, function (key) { if (!$scope.entity.properties[key]) { answer = false; } }); return answer; }; $scope.addFieldDialog = { controller: null, newReplicas: 0, dialog: new UI.Dialog(), onOk: function () { $scope.addFieldDialog.dialog.close(); $scope.addDataField(); }, open: function (controller) { var addFieldDialog = $scope.addFieldDialog; addFieldDialog.dialog.open(); $timeout(function () { $('#newDataName').focus(); }, 50); }, close: function () { $scope.addFieldDialog.dialog.close(); } }; $scope.entityChanged = function () { $scope.changed = true; }; $scope.addFields = function (keys) { angular.forEach(keys, function (key) { return addField(key); }); Core.$apply($scope); }; function addField(key) { var property = createProperty(key, ""); $scope.entity.properties[key] = property; $scope.entity.newDataKey = ""; $scope.showAddDataFieldForm = false; $scope.entityChanged(); } $scope.addDataField = function () { var key = $scope.entity.newDataKey; if (key) { addField(key); Core.$apply($scope); } }; $scope.deleteProperty = function (key) { if (key) { delete $scope.entity.properties[key]; $scope.entityChanged(); Core.$apply($scope); } }; $scope.cancel = function () { updateData(); }; $scope.save = function () { var entity = $scope.entity || {}; var name = entity.name; if (name) { if (!$scope.secret) { $scope.secret = { apiVersion: Kubernetes.defaultApiVersion, kind: "Secret", metadata: { name: "" }, data: {} }; } var data = {}; angular.forEach(entity.properties, function (property) { var key = property.key; var value = property.value || ""; if (key) { data[key] = window.btoa(value); } }); $scope.secret.metadata.name = name; $scope.secret.data = data; Core.notification('info', "Saving secret " + name); kubeClient.put($scope.secret, function (data) { var secretsLink = onSaveUrl || Developer.namespaceLink($scope, $routeParams, "secrets"); var params = {}; if (onSaveUrl) { params['secret'] = name; } $location.path(secretsLink); $location.search(params); Kubernetes.log.info("navigating to URL: " + secretsLink + " with params " + angular.toJson($location.search())); }, function (err) { Core.notification('error', "Failed to secret " + name + "\n" + err); }); } }; updateData(); function createProperty(key, text) { var label = secretLabels[key] || Core.humanizeValue(key); var tooltip = secretTooltips[key] || "Value of the " + label; var rows = 5; var lines = text.split("\n").length + 1; if (lines > rows) { rows = lines; } var type = "textarea"; if (key === "username") { type = "text"; if (!text) { text = Kubernetes.currentUserName(); } } else if (key === "password") { type = "password"; } var property = { key: key, label: label, tooltip: tooltip, rows: rows, value: text, type: type }; return property; } function updateData() { $scope.item = null; $scope.changed = false; $scope.entity = { name: $scope.id, properties: {} }; if ($scope.id) { angular.forEach($scope.model.secrets, function (secret) { var name = Kubernetes.getName(secret); if (name === $scope.id) { $scope.secret = secret; angular.forEach(secret.data, function (value, key) { var text = ""; if (angular.isString(value) && value) { text = window.atob(value); } var property = createProperty(key, text); $scope.entity.properties[key] = property; }); $scope.fetched = true; Core.$apply($scope); } }); } else { if (createKind === "ssh") { $scope.addFields($scope.sshKeys); } else if (createKind === "https") { $scope.addFields($scope.httpsKeys); } $scope.fetched = true; Core.$apply($scope); } } }]); })(Kubernetes || (Kubernetes = {})); /// /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.SecretsController = Kubernetes.controller("SecretsController", ["$scope", "KubernetesModel", "KubernetesState", "ServiceRegistry", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, ServiceRegistry, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.$on('kubernetesModelUpdated', function () { Core.$apply($scope); }); $scope.$createSecretLink = Developer.namespaceLink($scope, $routeParams, "secretCreate"); var kubeClient = Kubernetes.createKubernetesClient("secrets"); $scope.tableConfig = { data: 'model.secrets', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: '_key', displayName: 'Name', defaultSort: true, cellTemplate: $templateCache.get("idTemplate.html") }, { field: '$labelsText', displayName: 'Labels', cellTemplate: $templateCache.get("labelTemplate.html") }, ] }; $scope.deletePrompt = function (selected) { UI.multiItemConfirmActionDialog({ collection: selected, index: 'metadata.name', onClose: function (result) { if (result) { function deleteSelected(selected, next) { if (next) { kubeClient.delete(next, function () { deleteSelected(selected, selected.shift()); }); } else { } } deleteSelected(selected, selected.shift()); } }, title: 'Delete Secrets', action: 'The following Secrets will be deleted:', okText: 'Delete', okClass: 'btn-danger', custom: "This operation is permanent once completed!", customClass: "alert alert-warning" }).open(); }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.ServiceController = Kubernetes.controller("ServiceController", ["$scope", "KubernetesModel", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.rawModel = null; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.itemConfig = { properties: { '^\\/labels$': { template: $templateCache.get('labelTemplate.html') } } }; $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$watch('model.services', function (newValue, oldValue) { updateData(); }, true); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.flipRaw = function () { $scope.rawMode = !$scope.rawMode; Core.$apply($scope); }; updateData(); function updateData() { $scope.id = $routeParams["id"]; $scope.namespace = $routeParams["namespace"] || KubernetesState.selectedNamespace; $scope.item = $scope.model.getService($scope.namespace, $scope.id); if ($scope.item) { $scope.rawModel = Kubernetes.toRawYaml($scope.item); } Core.$apply($scope); } }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.ServiceEditController = Kubernetes.controller("ServiceEditController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "SchemaRegistry", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, schemas) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.schema = KubernetesSchema; $scope.config = schemas.cloneSchema("io.fabric8.kubernetes.api.model.Service"); //$scope.config = KubernetesSchema.definitions.kubernetes_v1beta2_Service; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.$on('$routeUpdate', function ($event) { updateData(); }); updateData(); function updateData() { if ($scope.id) { $scope.entity = $scope.model.getService(KubernetesState.selectedNamespace, $scope.id); Core.$apply($scope); $scope.fetched = true; } else { $scope.fetched = true; } } }]); })(Kubernetes || (Kubernetes = {})); /// /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes._module.factory('ServiceRegistry', [function () { return new ServiceRegistryService(); }]); /** * Represents a simple interface to service discovery that can be used early on in the application lifecycle before the * underlying model has been created via dependency injection */ var ServiceRegistryService = (function () { function ServiceRegistryService() { this.model = null; } /** * Returns true if there is a service available for the given ID or false */ ServiceRegistryService.prototype.hasService = function (serviceName) { return this.findService(serviceName) ? true : false; }; /** * Returns the service for the given service name (ID) or null if it cannot be found * * @param serviceName the name of the service to look for * @return {null} */ ServiceRegistryService.prototype.findService = function (serviceName) { var answer = null; if (serviceName) { var model = this.getModel(); if (model) { var namespace = model.currentNamespace(); return model.getService(namespace, serviceName); } } return answer; }; /** * Returns the service link for the given service name * * @param serviceName the name of the service * @return {null} */ ServiceRegistryService.prototype.serviceLink = function (serviceName) { var service = this.findService(serviceName); return Kubernetes.serviceLinkUrl(service); }; /** * Returns the service link for the given service name if its ready (has at least one ready pod) * * @param serviceName the name of the service * @return {null} */ ServiceRegistryService.prototype.serviceReadyLink = function (serviceName) { var service = this.findService(serviceName); if (Kubernetes.readyPodCount(service)) { return Kubernetes.serviceLinkUrl(service); } else { return null; } }; ServiceRegistryService.prototype.getModel = function () { var answer = this.model; // lets allow lazy load so we can be invoked before the injector has been created if (!answer) { var injector = HawtioCore.injector; if (injector) { this.model = injector.get('KubernetesModel'); } } answer = this.model; return answer; }; return ServiceRegistryService; }()); Kubernetes.ServiceRegistryService = ServiceRegistryService; })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.ServiceApps = Kubernetes._module.controller('Kubernetes.ServiceApps', ["$scope", "KubernetesModel", function ($scope, KubernetesModel) { $scope.model = KubernetesModel; }]); Kubernetes.Services = Kubernetes.controller("Services", ["$scope", "KubernetesModel", "KubernetesServices", "KubernetesPods", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesServices, KubernetesPods, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; ControllerHelpers.bindModelToSearchParam($scope, $location, 'mode', 'mode', 'list'); $scope.tableConfig = { data: 'model.services', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: '_key', displayName: 'Name', cellTemplate: $templateCache.get("idTemplate.html") }, { field: '$serviceUrl', displayName: 'Address', cellTemplate: $templateCache.get("portalAddress.html") }, { field: '$podCount', displayName: 'Pods', cellTemplate: $templateCache.get("podCountsAndLinkTemplate.html"), customSortField: function (field) { // need to concat all the pod counters var ready = field.$podCounters.ready || 0; var valid = field.$podCounters.valid || 0; var waiting = field.$podCounters.waiting || 0; var error = field.$podCounters.error || 0; return ready + valid + waiting + error; } }, { field: '$selectorText', displayName: 'Selector', cellTemplate: $templateCache.get("selectorTemplate.html") }, { field: '$labelsText', displayName: 'Labels', cellTemplate: $templateCache.get("labelTemplate.html") } ] }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.deletePrompt = function (selected) { if (angular.isString(selected)) { selected = [{ id: selected }]; } UI.multiItemConfirmActionDialog({ collection: selected, index: 'metadata.name', onClose: function (result) { if (result) { function deleteSelected(selected, next) { if (next) { Kubernetes.log.debug("deleting: ", Kubernetes.getName(next)); KubernetesServices.delete({ id: Kubernetes.getName(next) }, undefined, function () { Kubernetes.log.debug("deleted: ", Kubernetes.getName(next)); deleteSelected(selected, selected.shift()); }, function (error) { Kubernetes.log.debug("Error deleting: ", error); deleteSelected(selected, selected.shift()); }); } } deleteSelected(selected, selected.shift()); } }, title: 'Delete services?', action: 'The following services will be deleted:', okText: 'Delete', okClass: 'btn-danger', custom: "This operation is permanent once completed!", customClass: "alert alert-warning" }).open(); }; }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { // controller for the status icon cell Kubernetes.PodStatus = Kubernetes.controller("PodStatus", ["$scope", function ($scope) { $scope.statusMapping = function (text) { return Kubernetes.statusTextToCssClass(text); }; }]); Kubernetes._module.controller("Kubernetes.TermController", ["$scope", "TerminalService", function ($scope, TerminalService) { $scope.canConnectTo = function (container) { if (container.securityContext && container.securityContext.privileged) { return false; } return true; }; $scope.openTerminal = function (selfLink, containerName) { var id = TerminalService.newTerminal(selfLink, containerName); Kubernetes.log.debug("Created terminal, id: ", id); }; }]); Kubernetes.DataLabels = Kubernetes.controller("DataLabels", ['$scope', '$location', function ($scope, $location) { $scope.labelClick = function (entity, key, value) { $scope.$emit('dataLabelFilterUpdate', value, key); }; $scope.labelClass = Kubernetes.containerLabelClass; }]); // controller that deals with the labels per pod Kubernetes.Labels = Kubernetes.controller("Labels", ["$scope", "$location", function ($scope, $location) { $scope.labels = []; var labelKeyWeights = { "cityName": 1, "districtName": 2, "systemName": 3, "year": 4, "version": 5 }; $scope.$watch('entity', function (newValue, oldValue) { if (newValue) { // log.debug("labels: ", newValue); // massage the labels a bit $scope.labels = []; angular.forEach(Core.pathGet($scope.entity, ["metadata", "labels"]), function (value, key) { if (key === 'fabric8' || key === 'style' || key === 'status' || (key === 'isTarget' && value === 'false') || key === 'isExtract' || key === 'name') { // TODO not sure what this is for, the container type? return; } $scope.labels.push({ key: key, title: value }); }); // lets sort by key but lets make sure that we weight certain labels so they are first $scope.labels = $scope.labels.sort(function (a, b) { function getWeight(key) { return labelKeyWeights[key] || 0; } var n1 = a["key"]; var n2 = b["key"]; var w1 = getWeight(n1); var w2 = getWeight(n2); var diff = w1 - w2; if (diff < 0) { return -1; } else if (diff > 0) { return 1; } if (n1 && n2) { if (n1 > n2) { return 1; } else if (n1 < n2) { return -1; } else { return 0; } } else { if (n1 === n2) { return 0; } else if (n1) { return 1; } else { return -1; } } }); } }); $scope.handleClick = function (entity, labelType, value) { // log.debug("handleClick, entity: ", entity, " key: ", labelType, " value: ", value); $scope.$emit('labelFilterUpdate', value.title); }; $scope.labelClass = Kubernetes.containerLabelClass; }]); //服务状态过滤 Kubernetes.Status = Kubernetes.controller('Status', ["$scope", "$http", "$interval", "$location", "KubernetesApiURL", function ($scope, $http, $interval, $location, KubernetesApiURL) { /*$scope.$watch('entity', (newValue, oldValue) => { if(newValue) console.log(newValue); },true);*/ }]); Kubernetes.TaskEdit = Kubernetes.controller('TaskEdit', ['$scope', function ($scope) { $scope.showDeleteOne = { show: false, item: null, open: function (entity) { if (entity.status == 1) Configs.customAlert("提示", "操作失败: 正在迁移的任务,不能删除!", '', null, 0, "error"); else { var showDeleteOne = $scope.showDeleteOne; showDeleteOne.show = true; showDeleteOne.item = entity; } }, onOk: function () { var showDeleteOne = $scope.showDeleteOne; $scope.$emit('deleteRow', showDeleteOne.item); }, onCancel: function () { var showDeleteOne = $scope.showDeleteOne; showDeleteOne.show = false; showDeleteOne.item = null; } }; $scope.showCancelOne = { show: false, item: null, open: function (entity) { /*if(entity.status == 1) Configs.customAlert("提示", "操作失败: 正在迁移的任务,不能删除!", '',null, 0, "error"); else{*/ var showCancelOne = $scope.showCancelOne; showCancelOne.show = true; showCancelOne.item = entity; //} }, onOk: function () { var showCancelOne = $scope.showCancelOne; $scope.$emit('deleteRow', showCancelOne.item); }, onCancel: function () { var showCancelOne = $scope.showCancelOne; showCancelOne.show = false; showCancelOne.item = null; } }; }]); Kubernetes.LoadMask = Kubernetes.controller('LoadMask', ['$scope', function ($scope) { }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes._module.directive("hawtioTabs", ['HawtioSubTabs', function (HawtioSubTabs) { return { link: function (scope, element, attrs) { HawtioSubTabs.apply(scope.$eval('subTabConfig')); } }; }]); })(Kubernetes || (Kubernetes = {})); /// var Kubernetes; (function (Kubernetes) { Kubernetes.TemplateController = Kubernetes.controller("TemplateController", [ "$scope", "$location", "$http", "$timeout", "$routeParams", "marked", "$templateCache", "$modal", "KubernetesModel", "KubernetesState", "KubernetesApiURL", function ($scope, $location, $http, $timeout, $routeParams, marked, $templateCache, $modal, KubernetesModel, KubernetesState, KubernetesApiURL) { var model = $scope.model = KubernetesModel; $scope.filterText = $location.search()["q"]; $scope.targetNamespace = $routeParams.targetNamespace; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.$watchCollection('model.namespaces', function () { if (!$scope.targetNamespace) { $scope.targetNamespace = model.currentNamespace(); } }); var returnTo = new URI($location.search()['returnTo'] || '/kubernetes/apps'); function goBack() { $location.path(returnTo.path()).search(returnTo.query(true)); } function getAnnotations(obj) { return Core.pathGet(obj, ['metadata', 'annotations']); } function getValueFor(obj, key) { var annotations = getAnnotations(obj); if (!annotations) { return ""; } var name = Kubernetes.getName(obj); if (name) { var fullKey = "fabric8." + name + "/" + key; var answer = annotations[fullKey]; if (answer) { return answer; } } var key = _.find(_.keys(annotations), function (k) { return _.endsWith(k, key); }); if (key) { return annotations[key]; } else { return ""; } } $scope.cancel = function () { if ($scope.formConfig) { delete $scope.formConfig; delete $scope.entity; $scope.objects = undefined; return; } goBack(); }; /* $scope.$watch('model.templates.length', (newValue) => { if (newValue === 0) { goBack(); } }); */ $scope.filterTemplates = function (template) { if (Core.isBlank($scope.filterText)) { return true; } return _.contains(angular.toJson(template), $scope.filterText.toLowerCase()); }; $scope.openFullDescription = function (template) { var text = marked(getValueFor(template, 'description') || 'No description'); var modal = $modal.open({ templateUrl: UrlHelpers.join(Kubernetes.templatePath, 'templateDescription.html'), controller: ['$scope', '$modalInstance', function ($scope, $modalInstance) { $scope.text = text, $scope.ok = function () { modal.close(); }; }] }); }; $scope.getDescription = function (template) { var answer = $(marked(getValueFor(template, 'description') || 'No description')); var textDefault = answer.html(); var maxLength = 200; if (textDefault.length > maxLength) { var truncated = $.trim(textDefault).substring(0, maxLength).split(' ').slice(0, -1).join(' '); answer.html(truncated + '...'); answer.append($templateCache.get('truncatedDescriptionTag.html')); } return answer.html(); }; $scope.getIconUrl = function (template) { return getValueFor(template, 'iconUrl') || Kubernetes.defaultIconUrl; }; $scope.deployTemplate = function (template) { Kubernetes.log.debug("Template parameters: ", template.parameters); Kubernetes.log.debug("Template objects: ", template.objects); Kubernetes.log.debug("Template annotations: ", template.metadata.annotations); var templateAnnotations = template.metadata.annotations; if (templateAnnotations) { _.forEach(template.objects, function (object) { var annotations = object.metadata.annotations || {}; var name = Kubernetes.getName(object); var matches = _.filter(_.keys(templateAnnotations), function (key) { return key.match('.' + name + '/'); }); matches.forEach(function (match) { if (!(match in annotations)) { annotations[match] = templateAnnotations[match]; } }); object.metadata.annotations = annotations; }); } var routeServiceName = undefined; var service = _.find(template.objects, function (obj) { if (Kubernetes.getKind(obj) === "Service") { var ports = Kubernetes.getPorts(obj); if (ports && ports.length === 1) { return true; } } else { return false; } }); if (service) { routeServiceName = Kubernetes.getName(service); } Kubernetes.log.debug("Service: ", service); if ((!routeServiceName || !Kubernetes.isOpenShift) && (!template.parameters || template.parameters.length === 0)) { Kubernetes.log.debug("No parameters required, deploying objects"); applyObjects(template.objects); return; } var formConfig = { style: HawtioForms.FormStyle.STANDARD, hideLegend: true, properties: {} }; var params = template.parameters; _.forEach(params, function (param) { var property = {}; property.label = _.startCase(param.name); property.description = param.description; property.default = param.value; // TODO, do parameters support types? property.type = 'string'; formConfig.properties[param.name] = property; }); if (routeServiceName && Kubernetes.isOpenShift) { formConfig.properties.createRoute = { type: 'boolean', default: true, label: "Create Route" }; /* formConfig.properties.routeName = { type: 'string', label: 'Route Name', default: routeServiceName, 'control-group-attributes': { 'ng-show': 'entity.createRoute' } }; */ formConfig.properties.routeServiceName = { type: 'hidden', default: routeServiceName }; var namespace = Kubernetes.currentKubernetesNamespace(); // TODO store this in localStorage! var domain = "vagrant.f8"; var defaultRouteHostSuffix = '.' + (namespace === "default" ? "" : namespace + ".") + domain; formConfig.properties.routeHostname = { type: 'string', default: defaultRouteHostSuffix, label: "Route host name suffix", 'control-group-attributes': { 'ng-show': 'entity.createRoute' } }; } $scope.entity = {}; $scope.formConfig = formConfig; $scope.objects = template.objects; Kubernetes.log.debug("Form config: ", formConfig); }; function substitute(str, data) { return str.replace(/\${\w*}/g, function (match) { var key = match.replace(/\${/, '').replace(/}/, '').trim(); return data[key] || match; }); } ; $scope.substituteAndDeployTemplate = function () { var objects = $scope.objects; var objectsText = angular.toJson(objects, true); // pull these out of the entity object so they're not used in substitutions var createRoute = $scope.entity.createRoute; var routeHostnameSuffix = $scope.entity.routeHostname || ""; var routeName = $scope.entity.routeName; var routeServiceName = $scope.entity.routeServiceName; delete $scope.entity.createRoute; delete $scope.entity.routeHostname; delete $scope.entity.routeName; delete $scope.entity.routeServiceName; objectsText = substitute(objectsText, $scope.entity); objects = angular.fromJson(objectsText); if (createRoute) { var routes = []; angular.forEach(objects, function (object) { var kind = object.kind; var name = Kubernetes.getName(object); if (name && "Service" === kind) { var routeHostname = name + routeHostnameSuffix; var route = { kind: "Route", apiVersion: Kubernetes.defaultOSApiVersion, metadata: { name: name, }, spec: { host: routeHostname, to: { kind: "Service", name: name } } }; routes.push(route); } }); objects = objects.concat(routes); } if ($scope.targetNamespace !== model.currentNamespace()) { $scope.$on('WatcherNamespaceChanged', function () { Kubernetes.log.debug("Namespace changed"); setTimeout(function () { applyObjects(objects); Core.$apply($scope); }, 500); }); Core.notification('info', "Switching to namespace " + $scope.targetNamespace + " and deploying template"); model.kubernetes.selectedNamespace = $scope.targetNamespace; } else { applyObjects(objects); } }; function applyObjects(objects) { var projectClient = Kubernetes.createKubernetesClient("projects"); _.forEach(objects, function (object) { Kubernetes.log.debug("Object: ", object); var kind = Kubernetes.getKind(object); var name = Kubernetes.getName(object); var ns = Kubernetes.getNamespace(object); if (kind && name) { if (ns && ns !== Kubernetes.currentKubernetesNamespace()) { var project = { apiVersion: Kubernetes.defaultApiVersion, kind: "Project", metadata: { name: ns, labels: {} } }; projectClient.put(project, function (data) { Kubernetes.log.info("Created namespace: " + ns); }, function (err) { Kubernetes.log.warn("Failed to create namespace: " + ns + ": " + angular.toJson(err)); }); } var pluralKind = kind.toLowerCase() + "s"; var kubeClient = Kubernetes.createKubernetesClient(pluralKind, ns); kubeClient.put(object, function (data) { Kubernetes.log.info("updated " + kind + " name: " + name + (ns ? " ns: " + ns : "")); }, function (err) { Kubernetes.log.warn("Failed to update " + kind + " name: " + name + (ns ? " ns: " + ns : "") + " error: " + angular.toJson(err)); }); } }); goBack(); } $scope.deleteTemplate = function (template) { UI.multiItemConfirmActionDialog({ collection: [template], index: 'metadata.name', onClose: function (result) { if (result) { KubernetesModel['templatesResource'].delete({ id: template.metadata.name }, undefined, function () { KubernetesModel['templatesResource'].query(function (data) { KubernetesModel.templates = data.items; }); }, function (error) { Kubernetes.log.debug("Error deleting template: ", error); }); } }, title: 'Delete Template?', action: 'The following template will be deleted:', okText: 'Delete', okClass: 'btn-danger', custom: "This operation is permanent once completed!", customClass: "alert alert-warning" }).open(); }; }]); })(Kubernetes || (Kubernetes = {})); /// var Navigation; (function (Navigation) { Navigation.pluginName = 'hawtio-navigation'; Navigation.log = Logger.get(Navigation.pluginName); Navigation._module = angular.module(Navigation.pluginName, []); Navigation._module.run(function () { }); Navigation._module.service('HawtioBreadcrumbs', function () { var _config = []; var self = { apply: function (config) { _config.length = 0; _.forEach(config, function (crumb) { _config.push(crumb); }); }, get: function () { return _config; } }; return self; }); Navigation._module.service('HawtioSubTabs', function () { var _config = []; var self = { apply: function (config) { _config.length = 0; _.forEach(config, function (crumb) { _config.push(crumb); }); }, get: function () { return _config; } }; return self; }); Navigation._module.directive('hawtioRelativeHref', ['$location', function ($location) { return { restrict: 'A', link: function (scope, element, attr) { var targetPath = attr['hawtioRelativeHref']; var targetHref = new URI($location.url()); targetHref.segment(targetPath); element.attr('href', targetHref.toString()); } }; }]); Navigation._module.directive('viewportHeight', ['$window', '$document', function ($window, $document) { return { restrict: 'A', link: function (scope, element, attr) { // log.debug("Window: ", $window); // log.debug("element: ", element); var win = $($window); var resizeFunc = function () { var viewportHeight = win.innerHeight(); // log.debug("Viewport height: ", viewportHeight); var elTop = element.offset().top; // log.debug("Element top: ", elTop); var height = viewportHeight - elTop; element.css('height', height); }; win.on('resize', resizeFunc); element.on('$destroy', function () { win.off('resize', resizeFunc); }); setTimeout(resizeFunc, 50); } }; }]); Navigation._module.directive('hawtioMainOutlet', ['HawtioSubTabs', function (HawtioSubTabs) { return { restrict: 'A', link: function (scope, element, attrs) { scope.tabs = HawtioSubTabs; scope.$watchCollection('tabs.get()', function (tabs) { // log.debug("subTabConfig: ", subTabConfig); if (tabs && tabs.length > 0) { element.removeClass('hidden-nav'); element.css({ 'margin-left': '' }); } else { element.addClass('hidden-nav'); element.css({ 'margin-left': 'auto' }); } }); } }; }]); Navigation._module.directive('hawtioTabsOutlet', ['HawtioSubTabs', function (HawtioSubTabs) { var initialized = false; return { restrict: 'AE', replace: true, template: "\n
\n \n ", link: function (scope, element, attrs) { if (!initialized) { try { } catch (err) { } initialized = true; } scope.HawtioSubTabs = HawtioSubTabs; var collapsed = false; scope.getClass = function () { //log.debug("My class: ", element.attr('class')); if (!scope.subTabConfig || !scope.subTabConfig.length) { return 'hidden'; } if (collapsed) { return 'collapsed'; } return ''; }; scope.$on('hawtioCollapseNav', function () { collapsed = !collapsed; }); scope.$watch('HawtioSubTabs.get()', function (subTabConfig) { scope.subTabConfig = subTabConfig; }); } }; }]); Navigation._module.directive('hawtioBreadcrumbsOutlet', ['HawtioBreadcrumbs', 'HawtioSubTabs', function (HawtioBreadcrumbs, HawtioSubTabs) { return { restrict: 'E', scope: {}, template: "\n
\n
    \n
  1. \n \n {{label(breadcrumb)}}\n
  2. \n
  3. \n \n
  4. \n
\n
\n ", link: function (scope, element, attrs) { scope.breadcrumbs = HawtioBreadcrumbs; scope.tabs = HawtioSubTabs; scope.$watchCollection('breadcrumbs.get()', function (breadcrumbConfig) { scope.breadcrumbConfig = breadcrumbConfig; }); scope.$watchCollection('tabs.get()', function (tabs) { var active = _.find(tabs, function (tab) { return tab.active; }); if (active) { scope.pageTitle = active.label; } else { scope.pageTitle = undefined; } }); } }; }]); Navigation._module.directive('platformSubTabsOutlet', ['HawtioSubTabs', function (HawtioSubTabs) { var initialized = false; return { restrict: 'AE', replace: true, template: "\n
\n \n
\n ", link: function (scope, element, attrs) { if (!initialized) { try { } catch (err) { } initialized = true; } scope.HawtioSubTabs = HawtioSubTabs; var collapsed = false; scope.getClass = function () { //log.debug("My class: ", element.attr('class')); if (!scope.subTabConfig || !scope.subTabConfig.length) { return 'hidden'; } if (collapsed) { return 'collapsed'; } return ''; }; scope.$on('hawtioCollapseNav', function () { collapsed = !collapsed; }); scope.$watch('HawtioSubTabs.get()', function (subTabConfig) { scope.subTabConfig = subTabConfig; }); } }; }]); //hawtioPluginLoader.addModule('patternfly'); hawtioPluginLoader.addModule(Navigation.pluginName); })(Navigation || (Navigation = {})); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluY2x1ZGVzLnRzIiwiY29uZmlncy90cy9jb25maWdQbHVnaW4udHMiLCJjb25maWdzL3RzL2NvbmZpZ3NEYXRhU2VydmljZS50cyIsImRldmVsb3Blci90cy9kZXZlbG9wZXJOYXZpZ2F0aW9uLnRzIiwia3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSW50ZXJmYWNlcy50cyIsImt1YmVybmV0ZXMvdHMvdXRpbEhlbHBlcnMudHMiLCJjb25maWdzL3RzL2N1c3RvbUFsZXJ0LnRzIiwia3ViZXJuZXRlcy90cy9yZWFkUGxhY2VkaXZpc2lvbi50cyIsImt1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHMiLCJkZXZlbG9wZXIvdHMvZGV2ZWxvcGVySGVscGVycy50cyIsImRldmVsb3Blci90cy9kYXRhTWFuYWdlckhlbHBlci50cyIsImNvbmZpZ3MvdHMvQ29uZmlnc0hlbHBlci50cyIsImNvbmZpZ3MvdHMvY29uZmlnc1V0aWxzLnRzIiwia3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzUGx1Z2luLnRzIiwia3ViZXJuZXRlcy90cy93YXRjaGVyLnRzIiwia3ViZXJuZXRlcy90cy90ZXJtLnRzIiwiY29uZmlncy90cy9zaGFyZUNvbnRyb2xsZXIudHMiLCJjb25maWdzL3RzL2dsdXN0ZXJmc1NldHRpbmcudHMiLCJjb25maWdzL3RzL2t1YmVDbHVzdGVyU2V0dGluZy50cyIsImRldmVsb3Blci90cy9kZXZlbG9wZXJQbHVnaW4udHMiLCJkZXZlbG9wZXIvdHMvZGF0YU1hbmFnZXJNb2RlbC50cyIsImRldmVsb3Blci90cy9kZXZlbG9wZXJFbnJpY2hlcnMudHMiLCJkZXZlbG9wZXIvdHMvZW52aXJvbm1lbnRQYW5lbC50cyIsImRldmVsb3Blci90cy9maWxlTWlncmF0aW9uVGFzay50cyIsImRldmVsb3Blci90cy9ob21lLnRzIiwiZGV2ZWxvcGVyL3RzL2plbmtpbnNKb2IudHMiLCJkZXZlbG9wZXIvdHMvamVua2luc0pvYnMudHMiLCJrdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNNb2RlbC50cyIsImRldmVsb3Blci90cy9qZW5raW5zTG9nLnRzIiwiZGV2ZWxvcGVyL3RzL2plbmtpbnNNZXRyaWNzLnRzIiwiZGV2ZWxvcGVyL3RzL25hdmJhci50cyIsImRldmVsb3Blci90cy9waXBlbGluZS50cyIsImRldmVsb3Blci90cy9waXBlbGluZURpcmVjdGl2ZS50cyIsImRldmVsb3Blci90cy9waXBlbGluZXMudHMiLCJkZXZlbG9wZXIvdHMvcHJvamVjdC50cyIsImRldmVsb3Blci90cy9wcm9qZWN0U2VsZWN0b3IudHMiLCJkZXZlbG9wZXIvdHMvcHJvamVjdHMudHMiLCJkZXZlbG9wZXIvdHMvd29ya3NwYWNlLnRzIiwiZGV2ZWxvcGVyL3RzL3dvcmtzcGFjZXMudHMiLCJzeXN0ZW0vdHMvc3lzdGVtSGVscGVycy50cyIsInN5c3RlbS90cy9zeXN0ZW1QbHVnaW4udHMiLCJzeXN0ZW0vdHMvcmVnaW9uYWxpc21Db2RlU2VhcmNoLnRzIiwic3lzdGVtL3RzL3N5c3RlbVNlcnZpY2VzLnRzIiwic3lzdGVtL3RzL3NxbE1hbmFnZW1lbnQudHMiLCJzeXN0ZW0vdHMvc3lzdGVtQ29kZVNlYXJjaC50cyIsInN5c3RlbS90cy9zeXN0ZW1MaXN0LnRzIiwic3lzdGVtL3RzL3N5c3RlbVZlcmlmaWNhdGlvbi50cyIsImt1YmVybmV0ZXMvdHMvYXBwcy50cyIsImt1YmVybmV0ZXMvdHMvYnJlYWRjcnVtYnMudHMiLCJrdWJlcm5ldGVzL3RzL2J1aWxkLnRzIiwia3ViZXJuZXRlcy90cy9idWlsZENvbmZpZy50cyIsImt1YmVybmV0ZXMvdHMvYnVpbGRDb25maWdFZGl0LnRzIiwia3ViZXJuZXRlcy90cy9idWlsZENvbmZpZ3MudHMiLCJrdWJlcm5ldGVzL3RzL2J1aWxkTG9ncy50cyIsImt1YmVybmV0ZXMvdHMvYnVpbGRzLnRzIiwia3ViZXJuZXRlcy90cy9jb25uZWN0LnRzIiwia3ViZXJuZXRlcy90cy9kZXBsb3ltZW50Q29uZmlnLnRzIiwia3ViZXJuZXRlcy90cy9kZXBsb3ltZW50Q29uZmlncy50cyIsImt1YmVybmV0ZXMvdHMvZXZlbnRzLnRzIiwia3ViZXJuZXRlcy90cy9ob3N0LnRzIiwia3ViZXJuZXRlcy90cy9ob3N0cy50cyIsImt1YmVybmV0ZXMvdHMvaW1hZ2VSZXBvc2l0b3JpZXMudHMiLCJrdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNOYXZpZ2F0aW9uLnRzIiwia3ViZXJuZXRlcy90cy9zY2hlbWEudHMiLCJrdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNTY2hlbWEudHMiLCJrdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNTZXJ2aWNlcy50cyIsImt1YmVybmV0ZXMvdHMva3ViZXJuZXRlc1RvcExldmVsLnRzIiwia3ViZXJuZXRlcy90cy9uYW1lc3BhY2UudHMiLCJrdWJlcm5ldGVzL3RzL292ZXJ2aWV3LnRzIiwia3ViZXJuZXRlcy90cy9waXBlbGluZXMudHMiLCJrdWJlcm5ldGVzL3RzL3BvZC50cyIsImt1YmVybmV0ZXMvdHMvcG9kRWRpdC50cyIsImt1YmVybmV0ZXMvdHMvcG9kTG9ncy50cyIsImt1YmVybmV0ZXMvdHMvcG9kcy50cyIsImt1YmVybmV0ZXMvdHMvcmVwbGljYXRpb25Db250cm9sbGVyLnRzIiwia3ViZXJuZXRlcy90cy9yZXBsaWNhdGlvbkNvbnRyb2xsZXJFZGl0LnRzIiwia3ViZXJuZXRlcy90cy9yZXBsaWNhdGlvbkNvbnRyb2xsZXJzLnRzIiwia3ViZXJuZXRlcy90cy9zY2hlbWFIZWxwZXJzLnRzIiwia3ViZXJuZXRlcy90cy9zZWNyZXQudHMiLCJrdWJlcm5ldGVzL3RzL3NlY3JldHMudHMiLCJrdWJlcm5ldGVzL3RzL3NlcnZpY2UudHMiLCJrdWJlcm5ldGVzL3RzL3NlcnZpY2VFZGl0LnRzIiwia3ViZXJuZXRlcy90cy9zZXJ2aWNlUmVnaXN0cnkudHMiLCJrdWJlcm5ldGVzL3RzL3NlcnZpY2VzLnRzIiwia3ViZXJuZXRlcy90cy9zaGFyZWRDb250cm9sbGVycy50cyIsImt1YmVybmV0ZXMvdHMvdGFicy50cyIsImt1YmVybmV0ZXMvdHMvdGVtcGxhdGVzLnRzIiwibmF2aWdhdGlvbi90cy9uYXZpZ2F0aW9uUGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RCwrREFBK0Q7QUFDL0Qsc0RBQXNEO0FBQ3RELG1EQUFtRDtBQUNuRCwwREFBMEQ7O0FDSjFELHlDQUF5QztBQUV6QyxJQUFPLE9BQU8sQ0FvRGI7QUFwREQsV0FBTyxPQUFPLEVBQUMsQ0FBQztJQUVKLGtCQUFVLEdBQUcsU0FBUyxDQUFDO0lBQ3ZCLGVBQU8sR0FBRyxTQUFTLENBQUM7SUFDcEIsa0JBQVUsR0FBRyxrQkFBa0IsQ0FBQztJQUM3QixvQkFBWSxHQUFHLGtCQUFVLEdBQUcsT0FBTyxDQUFDO0lBQ3ZDLGVBQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLGtCQUFVLEVBQUUsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDbkgsYUFBSyxHQUFHLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBWSxDQUFDLENBQUM7SUFDMUQsa0JBQVUsR0FBRyxhQUFhLENBQUMsd0JBQXdCLENBQUMsZUFBTyxFQUFFLGtCQUFVLENBQUMsQ0FBQztJQUVwRixlQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBVSxFQUFFLGdCQUFnQixFQUFFLFVBQUMsUUFBUSxFQUFFLGNBQWM7WUFDdEUsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQU8sRUFBRSxvQkFBb0IsQ0FBQyxFQUFFLGFBQUssQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDcEcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBTyxFQUFFLHNCQUFzQixDQUFDLEVBQUUsYUFBSyxDQUFDLHlCQUF5QixFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUMvRixJQUFJLENBQUMsZUFBTyxFQUFFLEVBQUMsVUFBVSxFQUFFLFVB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LEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ2xILEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUM1RyxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDakgsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLG9CQUFvQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDMUgsRUFBQyxVQUFVLEVBQUMsaUJBQWlCLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGlCQUFpQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUMvSCxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGNBQWMsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDeEgsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLG1CQUFtQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDaEksRUFBQyxVQUFVLEVBQUMsa0JBQWtCLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFdBQVcsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDekgsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxPQUFPLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDaEosRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDdEosRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDN0ksRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDeEosRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFdBQVcsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ2xLLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsZUFBZSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQzlKLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDNUwsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUN0SixFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsY0FBYyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDdkgsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ25ILEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUN2SCxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsZUFBZSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDdEgsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsaUJBQWlCLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUMxSCxFQUFDLFVBQVUsRUFBQyxpQkFBaUIsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGtCQUFrQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDdEksRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxpQkFBaUIsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ3BJLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsZUFBZSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQ2pLLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQzdJLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQ2xKLEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUN6SCxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsa0JBQWtCLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUMvSCxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxjQUFjLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUNqSSxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLG9CQUFvQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDMUksRUFBQyxVQUFVLEVBQUMsZUFBZSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxPQUFPLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDekosRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxF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RUFBQyxVQUFVLEVBQUMsZUFBZSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDMUgsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDeEgsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxjQUFjLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQ2xILEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUNsSCxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLG1CQUFtQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUMzSCxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUN6SCxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGNBQWMsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsbUJBQW1CLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUNwSSxFQUFDLFVBQVUsRUFBQyxvQkFBb0IsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQ3BJLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsY0FBYyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUM7SUFFOUcsMkJBQWdCLEdBQUcsQ0FBQyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3pJLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDakgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxjQUFjLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUNsSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ25ILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxNQUFNLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDNUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFdBQVcsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsZUFBZSxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDbkgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE9BQU8sRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUNoSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDakgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFdBQVcsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUN6RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGNBQWMsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ25ILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsVUFBVSxFQUFDLFdBQVcsRUFBQztRQUN2SCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDNUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM1RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzlHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFD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LFdBQVcsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzlHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzVHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxPQUFPLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ2hILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDakgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFdBQVcsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2hILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxNQUFNLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDbEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3JILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNySCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDaEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ25ILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDakgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzlHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDakgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxNQUFNLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDbEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLE1BQU0sRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNuSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsTUFBTSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzlHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDakgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ3pHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM1RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsVUFBVSxFQUFDLE9BQU8sRUFBQztRQUN0SCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2pILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxjQUFjLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNuSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2pILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsZUFBZSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDcEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNoSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxh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QUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzlHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDakgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDekcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzlHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDOUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2hILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDbEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxlQUFlLEVBQUMsVUFBVSxFQUFDLEVBQUUsRUFBQztRQUNqSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsRUFBRSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDOUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzlHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDbEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNoSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzlHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDOUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM1RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzlHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2xILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsa0JBQWtCLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUN2SCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDckgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNsSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGNBQWMsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ25ILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNySCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDckgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxvQkFBb0IsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3pILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsZUFBZSxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDbkgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM1RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGlCQUFpQixFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDckgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2pILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDbEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNsSCxFQUFDLFdBQVcsRUFBQyxN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LEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxjQUFjLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNuSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVB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QUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3BILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUM1RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDbEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxPQUFPLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGlCQUFpQixFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDckgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNqSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2pILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxPQUFPLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDOUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxX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QU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNoSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsZUFBZSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDcEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzlHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxXQUFXLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFD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Q0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzs0QkFDaEIsVUFBVSxHQUFHLEtBQUssQ0FBQzt3QkFDckIsQ0FBQzt3QkFBQyxJQUFJLENBQUMsQ0FBQzs0QkFDTixVQUFVLEdBQUcsVUFBVSxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7d0JBQ3hDLENBQUM7d0JBQ0QsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDakMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ1osS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO3dCQUNsQyxDQUFDO3dCQUNELElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNoQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzs0QkFDakIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDOzRCQUNsQixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0NBQ3RCLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDckMsQ0FBQzs0QkFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUM3QixNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ3JDLENBQUM7NEJBQUMsSUFBSSxDQUFDLENBQUM7Z0NBQ04sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUNyQyxD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cUIsRUFBRSxVQUFDLFlBQVk7d0JBQy9DLEtBQUssQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO29CQUVwQyxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO2FBQ0YsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFSiw2Q0FBNkM7SUFFN0Msa0JBQWtCLENBQUMsU0FBUyxDQUFDLHFCQUFVLENBQUMsQ0FBQztBQUUzQyxDQUFDLEVBM1BNLFVBQVUsS0FBVixVQUFVLFFBMlBoQiIsImZpbGUiOiJjb21waWxlZC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi9saWJzL2hhd3Rpby1mb3Jtcy9kZWZzLmQudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi9saWJzL2hhd3Rpby1rdWJlcm5ldGVzLWFwaS9kZWZzLmQudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi9saWJzL2hhd3Rpby1vYXV0aC9kZWZzLmQudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi9saWJzL2hhd3Rpby11aS9kZWZzLmQudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi9saWJzL2hhd3Rpby11dGlsaXRpZXMvZGVmcy5kLnRzXCIvPlxyXG5cclxuZGVjbGFyZSB2YXIgaHVtYW5kYXRlO1xyXG5kZWNsYXJlIHZhciBqc3lhbWw6YW55O1xyXG5cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG5cclxubW9kdWxlIENvbmZpZ3Mge1xyXG5cclxuXHRleHBvcnQgdmFyIHBsdWdpbk5hbWUgPSBcIkNvbmZpZ3NcIjtcclxuXHRleHBvcnQgdmFyIGNvbnRleHQgPSBcIi9jb25maWdcIjtcdFxyXG5cdGV4cG9ydCB2YXIgcGx1Z2luUGF0aCA9ICdwbHVnaW5zL2NvbmZpZ3MvJztcclxuICAgIGV4cG9ydCB2YXIgdGVtcGxhdGVQYXRoID0gcGx1Z2luUGF0aCArICdodG1sLyc7XHJcblx0ZXhwb3J0IHZhciBfbW9kdWxlID0gYW5ndWxhci5tb2R1bGUocGx1Z2luTmFtZSwgWydoYXd0aW8tY29yZScsICdoYXd0aW8tdWknLCAndWkuY29kZW1pcnJvcicsICdudmQzJywgJ25nVGFibGUnLCAnbmdEaWFsb2cnXSk7XHJcblx0ZXhwb3J0IHZhciByb3V0ZSA9IFBsdWdpbkhlbHBlcnMuY3JlYXRlUm91dGluZ0Z1bmN0aW9uKHRlbXBsYXRlUGF0aCk7XHJcblx0ZXhwb3J0IHZhciBjb250cm9sbGVyID0gUGx1Z2luSGVscGVycy5jcmVhdGVDb250cm9sbGVyRnVuY3Rpb24oX21vZHVsZSwgcGx1Z2luTmFtZSk7XHJcblxyXG5cdF9tb2R1bGUuY29uZmlnKFsnJHByb3ZpZGUnLCAnJHJvdXRlUHJvdmlkZXInLCAoJHByb3ZpZGUsICRyb3V0ZVByb3ZpZGVyKSA9PntcclxuXHRcdCRyb3V0ZVByb3ZpZGVyLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdnbHVzdGVyLWZzL3NldHRpbmcnKSwgcm91dGUoJ2dsdXN0ZXJmc1NldHRpbmcuaHRtbCcsIGZhbHNlKSlcclxuXHRcdFx0XHRcdCAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdrdWJlLWNsdXN0ZXIvc2V0dGluZycpLCByb3V0ZSgna3ViZUNsdXN0ZXJTZXR0aW5nLmh0bWwnLCBmYWxzZSkpXHJcblx0XHRcdFx0XHQgIC53aGVuKGNvbnRleHQsIHtyZWRpcmVjdFRvOiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9rdWJlLWNsdXN0ZXIvc2V0dGluZycpfSk7XHRcdCAgIFx0XHRcdCAgXHJcblx0fV0pO1xyXG5cclxuXHQgX21vZHVsZS5ydW4oWyd2aWV3UmVnaXN0cnknLCAnJHRlbXBsYXRlQ2FjaGUnLCAnSGF3dGlvRXh0ZW5zaW9uJywgJyRjb21waWxlJywgKHZpZXdSZWdpc3RyeSwgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCBleHQsICAkY29tcGlsZTpuZy5JQ29tcGlsZVNlcnZpY2UpID0+IHtcclxuICAgICAgICBleHQuYWRkKCdjb25maWctc2V0dGluZycsICgkc2NvcGUpID0+IHtcclxuICAgICAgICBcdHZhciB0ZW1wbGF0ZSAgPSAkdGVtcGxhdGVDYWNoZS5nZXQ8c3RyaW5nPihVcmxIZWxwZXJzLmpvaW4odGVtcGxhdGVQYXRoLCBcImNvbmZpZ01lbnVJdGVtLmh0bWxcIikpO1xyXG4gICAgICAgIFx0cmV0dXJuICRjb21waWxlKHRlbXBsYXRlKSgkc2NvcGUpO1xyXG4gICAgICAgIH0pOyBcclxuXHJcbiAgICAgICAgdmlld1JlZ2lzdHJ5Wydjb25maWcnXSA9IHRlbXBsYXRlUGF0aCArIFwic2hhcmVMYXlvdXQuaHRtbFwiOyAgICAgICAgICBcclxuICAgIH1dKTtcclxuXHJcblx0IF9tb2R1bGUuZGlyZWN0aXZlKCdnZnNDb25maWdUYWJsZScsIFsoKSA9PntcclxuXHQgXHRyZXR1cm57XHJcblx0IFx0XHRyZXN0cmljdDogJ0FFJyxcclxuXHQgXHRcdHJlcGxhY2UgOiB0cnVlLCBcclxuXHQgXHRcdHNjb3BlOiB7XHJcblx0IFx0XHRcdHRhYmxlVGl0bGU6ICc9JyxcclxuXHQgXHRcdFx0dGFibGVDb250ZW50OiAnPSdcclxuXHQgXHRcdH0sXHJcblx0IFx0XHR0ZW1wbGF0ZTogYDx0YWJsZSBjbGFzcz1cInRhYmxlICB0YWJsZS1ob3ZlclwiPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBuZy1yZXBlYXQ9XCJjb2x1bW4gaW4gdGFibGVUaXRsZS5jb2x1bW5cIiBjbGFzcz1cIm5vLWZhZGUgdGFibGUtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgXHQ8c3BhbiBjbGFzcz1cInt7Y29sdW1uLmNsYXNzfX1cIj57e2NvbHVtbi50aXRsZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+ICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8dHIgbmctcmVwZWF0ID0gXCJyb3cgaW4gdGFibGVDb250ZW50XCIgY2xhc3M9XCJyb3cuY2xhc3NcIj5cclxuICAgICAgICAgICAgICAgIFx0PHRkIG5nLXJlcGVhdD1cImNvbCBpbiByb3dcIiBjbGFzcz1cImNvbC5jbGFzc1wiPlxyXG4gICAgICAgICAgICAgICAgXHRcdDxzcGFuIGNsYXNzPVwiY29sLmNsYXNzXCI+e3tjb2wudGl0bGV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIFx0PC90ZD5cclxuICAgICAgICAgICAgICAgIDwvdHI+ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L3RhYmxlPiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICBsaW5rOiAoc2NvcGUsIGVsZW1lbnQsIGF0dHIpID0+eyAgICAgICAgICAgIFx0XHJcbiAgICAgICAgICAgIH1cclxuXHQgXHR9XHQgXHRcclxuXHQgfV0pO1xyXG5cclxuXHRoYXd0aW9QbHVnaW5Mb2FkZXIuYWRkTW9kdWxlKHBsdWdpbk5hbWUpO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImNvbmZpZ1BsdWdpbi50c1wiLz5cclxubW9kdWxlIENvbmZpZ3N7XHJcblxyXG5cdGV4cG9ydCBpbnRlcmZhY2UgQmxvY2t7XHJcblx0XHRpcDpzdHJpbmc7IC8v5a2Y5YKo5Z2X55qE5py65ZmoaXDlnLDlnYBcclxuXHRcdHBhdGg6IHN0cmluZzsgLy/lrZjlgqjlnZfot6/lvoRcclxuXHRcdHN0YXR1czogYm9vbGVhbjsgLy/lrZjlgqjlnZfnmoTnirbmgIFcclxuXHRcdGF2YWlsYWJsZVNpemU/OiBudW1iZXIsIC8v5a2Y5YKo5Z2X55qE5aSn5bCPXHJcblx0XHR1c2VkU2l6ZT86IG51bWJlciAvL+WtmOWCqOWdl+W3suS9v+eUqOepuumXtFxyXG5cdFx0ZWRpdGFibGU/OiBib29sZWFuXHRcclxuXHR9XHJcblxyXG5cdGV4cG9ydCBpbnRlcmZhY2Ugb3JhY2xlUGFyYW17XHJcblx0XHRuYW1lOiBzdHJpbmdcclxuXHRcdGlwOiBzdHJpbmc7XHJcblx0XHRwb3J0OiBzdHJpbmc7XHJcblx0XHRzZXJ2aWNlTmFtZTogc3RyaW5nO1xyXG5cdFx0dGFibGVOYW1lOiBzdHJpbmc7XHJcblx0XHRzdGF0dXM6IHN0cmluZztcdFxyXG5cdFx0aWQ/Om51bWJlcjtcdFxyXG5cdH1cclxuXHJcblx0ZXhwb3J0IGludGVyZmFjZSB2b2x1bWV7XHJcblx0XHRuYW1lOiBzdHJpbmc7IC8vdm9sdW1l55qE5ZCN5a2XXHJcblx0XHRhbGxTaXplOiBudW1iZXI7IC8vdm9sdW1l56m66Ze05aSn5bCPXHJcblx0XHR1c2VkU2l6ZTogbnVtYmVyOyAvLyB2b2x1bWXlt7Lkvb/nlKjnqbrpl7TlpKflsI9cclxuXHRcdGJyaWNrOiBBcnJheTxCbG9jaz47IC8vdm9sdW1l5Lit55qE5a2Y5YKo5Z2XXHJcblx0XHRmb2xkZXI/OiBBcnJheTxhbnk+O1x0Ly92b2x1bWXnmoTmlofku7ZcdFxyXG5cdFx0c3RhdHVzOiBib29sZWFuO1xyXG5cdFx0cGF0aDogc3RyaW5nO1xyXG5cdFx0ZWRpdGFibGU/OiBib29sZWFuLFxyXG5cdFx0aG90PzogbnVtYmVyXHRcdFxyXG5cdH1cdFxyXG5cclxuICAgIC8v5a2X6IqC5aSn5bCP6L2s5o2i5oiQ5a2X56ym5aSn5bCPXHJcblx0ZnVuY3Rpb24gZ2V0U3RyaW5nU2l6ZShzaXplOiBudW1iZXIpe1xyXG5cdFx0dmFyIHJlc3VsdCA9IHNpemU7IFxyXG5cdFx0dmFyIHN1ZmZpeCA9W1wiQlwiLCBcIktCXCIgLFwiTUJcIiwgXCJHQlwiLCBcIlRCXCIsIFwiUEJcIl07XHJcblx0XHR2YXIgY291bnQ9MTsgXHJcblx0XHR3aGlsZShyZXN1bHQgPj0gMTAyNCl7XHJcblx0XHRcdHJlc3VsdCA9IHJlc3VsdC8xMDI0O1xyXG5cdFx0XHRjb3VudCArKztcdFx0XHRcclxuXHRcdH1cclxuXHRcdHJldHVybiByZXN1bHQudG9GaXhlZCgyKSArIHN1ZmZpeFtjb3VudF07XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBmb3JtYXRWb2x1bWUodm9sdW1lOnZvbHVtZSl7XHJcblx0XHR2b2x1bWVbXCJmb3JtYXRUb3RhbFNpemVcIl0gPSBnZXRTdHJpbmdTaXplKHZvbHVtZS5hbGxTaXplKTtcclxuXHRcdHZvbHVtZVtcImZvcm1hdFVzZWRTaXplXCJdID0gZ2V0U3RyaW5nU2l6ZSh2b2x1bWUudXNlZFNpemUpO1xyXG5cdFx0dm9sdW1lW1wiZWRpdGFibGVcIl0gPSBmYWxzZTtcclxuXHRcdFxyXG5cdFx0YW5ndWxhci5mb3JFYWNoKHZvbHVtZS5icmljaywgKGJyb2NrKSA9PntcclxuXHRcdFx0YnJvY2tbXCJmb3JtYXRVc2VkU2l6ZVwiXSA9IGdldFN0cmluZ1NpemUoYnJvY2sudXNlZFNpemUpO1xyXG5cdFx0XHRicm9ja1tcImZvcm1hdEFsbFNpemVcIl0gPSBnZXRTdHJpbmdTaXplKGJyb2NrLmF2YWlsYWJsZVNpemUpO1xyXG5cdFx0XHRicm9ja1tcImVkaXRhYmxlXCJdID0gZmFsc2U7XHJcblx0XHR9KVxyXG5cdH1cclxuXHJcblx0ZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFZvbHVtZXModm9sdW1lczpBcnJheTx2b2x1bWU+KXtcdFx0XHJcblx0XHRhbmd1bGFyLmZvckVhY2godm9sdW1lcywgKHZvbHVtZSkgPT4ge1x0XHRcdFxyXG5cdFx0XHRmb3JtYXRWb2x1bWUodm9sdW1lKTtcclxuXHRcdH0pXHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBJc0Jyb2NrRXF1YWxzKGJyb2NrMTogQmxvY2ssIGJyb2NrMjogQmxvY2spe1xyXG5cdFx0cmV0dXJuIGJyb2NrMS5pcCA9PSBicm9jazIuaXAgJiYgYnJvY2sxLnBhdGggPT0gYnJvY2syLnBhdGg7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHRcdOWIqumZpHZvbHVtZeS4reaMh+WumueahGJyb2NrXHJcblx0Ki9cclxuXHRleHBvcnQgZnVuY3Rpb24gZGVsZXRlQnJvY2sodm9sdW1lOnZvbHVtZSwgYnJvY2s6QmxvY2spe1x0XHRcclxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB2b2x1bWUuYnJpY2subGVuZ3RoOyBpKyspe1xyXG5cdFx0XHR2YXIgYnJpY2sgPSB2b2x1bWUuYnJpY2tbaV07XHJcblx0XHRcdGlmKElzQnJvY2tFcXVhbHMoYnJpY2ssIGJyb2NrKSl7XHJcblx0XHRcdFx0dm9sdW1lLmJyaWNrLnNwbGljZShpLCAxKTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0XHR2b2x1bWXmt7vliqBicm9ja1xyXG5cdCovXHJcblx0ZXhwb3J0IGZ1bmN0aW9uIGFkZEJyb2NrKHZvbHVtZTp2b2x1bWUsIGJyb2NrOkJsb2NrKXtcclxuXHRcdGlmKGJyb2NrICE9IG51bGwgJiYgYnJvY2sgIT0gdW5kZWZpbmVkKVxyXG5cdFx0XHR2b2x1bWUuYnJpY2sucHVzaChicm9jayk7XHJcblx0fVxyXG5cclxuXHRleHBvcnQgY2xhc3MgQ29uZmlnc01vZGVsU2VydmljZXtcclxuXHRcdHB1YmxpYyBjbHVzdGVyOiBBcnJheTx2b2x1bWU+PVtdO1xyXG5cdFx0cHVibGljIG9yYWNsZVBhcmFtOiBBcnJheTxvcmFjbGVQYXJhbT49W107XHJcblx0XHRwdWJsaWMgc3lzdGVtSW5mbzogQXJyYXk8YW55PiA9W107XHJcblx0XHRwdWJsaWMgcmVnaW9uYWxpc21JbmZvOiBBcnJheTxhbnk+ID0gW107XHJcblxyXG5cdFx0cHVibGljIGNvbnN0cnVjdG9yKCl7XHJcblx0XHRcdHRoaXMudXBkYXRlQWxsRGF0YSgpO1x0XHRcclxuXHRcdH1cclxuXHJcblx0XHRwdWJsaWMgdXBkYXRlQWxsRGF0YSgpe1xyXG5cdFx0XHR0aGlzLnVwZGF0ZVZvbHVtZURhdGEoKTtcclxuXHRcdFx0dGhpcy51cGRhdGVPcmFjbGVQYXJhbSgpO1xyXG5cdFx0XHQvL3RoaXMudXBkYXRlQ29kZUluZm8oKTtcclxuXHRcdH1cclxuXHQgICAgcHVibGljIHVwZGF0ZVZvbHVtZURhdGEoKXtcclxuXHQgICAgXHR2YXIgcmVzdWx0PW51bGw7XHQgICAgXHRcclxuXHQgICAgXHQkLmFqYXgoeyBcclxuXHRcdFx0XHRhc3luYzogZmFsc2UsIFxyXG5cdFx0XHRcdHR5cGUgOiBcIlBPU1RcIiwgXHJcblx0XHRcdFx0dXJsIDogXCIvamF2YS9jb25zb2xlL2FwaS92b2x1bWUvbGlzdFwiLFx0XHRcdFx0XHRcclxuXHRcdFx0XHRzdWNjZXNzIDogZnVuY3Rpb24oZGF0YSkgeyBcclxuXHRcdFx0XHQgICAgaWYoZGF0YSl7XHRcdFx0XHJcblx0XHRcdFx0XHQgICAgcmVzdWx0ID0gZGF0YTtcclxuXHRcdFx0XHRcdH1cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHR9IFxyXG5cdFx0XHR9KTtcdFx0XHRcclxuXHRcdFx0dGhpcy5jbHVzdGVyID1KU09OLnBhcnNlKHJlc3VsdCk7XHRcdFx0XHRcdFx0XHRcclxuXHQgICAgXHRmb3JtYXRWb2x1bWVzKHRoaXMuY2x1c3Rlcik7XHJcblx0XHR9XHJcblxyXG5cdFx0LypwdWJsaWMgdXBkYXRlQ29kZUluZm8oKXtcclxuXHRcdFx0XHR2YXIgcmVzdWx0PW51bGw7XHJcblx0ICAgIFx0JC5hamF4KHsgXHJcblx0XHRcdFx0YXN5bmM6IGZhbHNlLCBcclxuXHRcdFx0XHR0eXBlIDogXCJQT1NUXCIsIFxyXG5cdFx0XHRcdHVybCA6IFwiL2phdmEvY29uc29sZS9hcGkvY29kZS9saXN0XCIsXHRcdFx0XHRcdFxyXG5cdFx0XHRcdHN1Y2Nlc3MgOiBmdW5jdGlvbihkYXRhKSB7IFxyXG5cdFx0XHRcdCAgICBpZihkYXRhKXtcdFx0XHRcdCAgICBcdFx0XHJcblx0XHRcdFx0XHQgICAgcmVzdWx0ID0gZGF0YTtcclxuXHRcdFx0XHRcdH1cdFx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHR9IFxyXG5cdFx0XHR9KTtcclxuXHRcdFx0dGhpcy5yZWdpb25hbGlzbUluZm8gPSByZXN1bHQucmVnaW9uYWxpc207XHJcblx0XHRcdHRoaXMuc3lzdGVtSW5mbyA9IHJlc3VsdC5zeXN0ZW07XHJcblx0XHR9Ki9cclxuXHJcblx0XHRwdWJsaWMgdXBkYXRlT3JhY2xlUGFyYW0oKXtcclxuXHRcdFx0dmFyIHJlc3VsdD1udWxsO1xyXG5cdFx0XHQkLmFqYXgoe1xyXG5cdFx0XHRcdGFzeW5jOiBmYWxzZSxcclxuXHRcdFx0XHR0eXBlIDogXCJQT1NUXCIsXHJcblx0XHRcdFx0dXJsIDogXCIvamF2YS9jb25zb2xlL2FwaS9vcmFjbGUvbGlzdFwiLFxyXG5cdFx0XHRcdHN1Y2Nlc3MgOiBmdW5jdGlvbihkYXRhKSB7IFxyXG5cdFx0XHRcdCAgICBpZihkYXRhKXtcdFx0XHRcdCAgICBcdFxyXG5cdFx0XHRcdFx0ICAgIHJlc3VsdCA9IGRhdGE7XHRcdFx0XHRcdCAgIFxyXG5cdFx0XHRcdFx0fVx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHR9IFx0XHJcblx0XHRcdH0pO1x0XHRcdFxyXG5cdFx0XHR0aGlzLm9yYWNsZVBhcmFtID0gcmVzdWx0O1x0XHRcdFxyXG5cdFx0fVxyXG5cclxuXHRcdHB1YmxpYyBnZXRGb2xkZXJCeVZvbHVtZU5hbWUobmFtZTogc3RyaW5nKXtcclxuXHRcdFx0aWYodGhpcy5jbHVzdGVyPT09bnVsbClcclxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdFx0Zm9yKHZhciAgaT0wOyBpPCB0aGlzLmNsdXN0ZXIubGVuZ3RoOyBpKyspe1xyXG5cdFx0XHRcdGlmKHRoaXMuY2x1c3RlcltpXS5uYW1lID09PSBuYW1lKVxyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuY2x1c3RlcltpXS5mb2xkZXI7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG4gICAgX21vZHVsZS5mYWN0b3J5KCdDb25maWdzTW9kZWwnLCBbJyRyb290U2NvcGUnLCAnJGh0dHAnLCAnJGxvY2F0aW9uJywgJyRyZXNvdXJjZScsICgkcm9vdFNjb3BlLCAkaHR0cCwgJGxvY2F0aW9uLCAkcmVzb3VyY2UpID0+eyAgICBcdFxyXG4gICAgXHR2YXIgJHNjb3BlID0gbmV3IENvbmZpZ3NNb2RlbFNlcnZpY2UoKTtcclxuICAgIFx0cmV0dXJuICRzY29wZTtcclxuICAgIH1dKTtcclxufSIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxubW9kdWxlIERldmVsb3BlciB7XHJcblxyXG4gIHZhciBsb2cgPSBMb2dnZXIuZ2V0KCdkZXZlbG9wZXItbmF2aWdhdGlvbicpO1xyXG5cclxuICBleHBvcnQgdHlwZSBMYWJlbFJlc29sdmVyID0gKCkgPT4gc3RyaW5nO1xyXG5cclxuICBleHBvcnQgaW50ZXJmYWNlIEJyZWFkY3J1bWJDb25maWcge1xyXG4gICAgICBocmVmPzogc3RyaW5nO1xyXG4gICAgICBsYWJlbD86IHN0cmluZyB8IExhYmVsUmVzb2x2ZXI7XHJcbiAgICAgIHRpdGxlPzogc3RyaW5nO1xyXG4gICAgICBjbGFzcz86IHN0cmluZztcclxuICAgICAgaXNWYWxpZD86ICgpID0+IGJvb2xlYW47XHJcbiAgICAgIGlzQWN0aXZlPzogKHN1YlRhYiwgcGF0aCkgPT4gYm9vbGVhbjtcclxuICB9XHJcblxyXG5cclxuICBmdW5jdGlvbiBkZXZlbG9wQnJlYWRjcnVtYigpIDogQnJlYWRjcnVtYkNvbmZpZyB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiKSxcclxuICAgICAgbGFiZWw6IFwiVGVhbXNcIixcclxuICAgICAgdGl0bGU6IFwiVmlldyBhbGwgdGhlIGF2YWlsYWJsZSB0ZWFtc1wiLFxyXG4gICAgICBpc0FjdGl2ZTogKHN1YlRhYiwgcGF0aCkgPT4gZmFsc2VcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBvcGVyYXRlQnJlYWRjcnVtYigpIDogQnJlYWRjcnVtYkNvbmZpZyB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvbmFtZXNwYWNlc1wiKSxcclxuICAgICAgbGFiZWw6IFwiTWFuYWdlXCIsXHJcbiAgICAgIHRpdGxlOiBcIk1hbmFnZSB0aGUgcHJvamVjdHMgYW5kIHJlc291cmNlcyBpbnNpZGUgdGhlbVwiXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHdvcmtzcGFjZUxpbmsoKSB7XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBwcm9qZWN0TGluayhwcm9qZWN0SWQpIHtcclxuICAgIHZhciBsaW5rID0gd29ya3NwYWNlTGluaygpO1xyXG4gICAgaWYgKHByb2plY3RJZCkge1xyXG4gICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKGxpbmssIFwiL3Byb2plY3RzXCIsIHByb2plY3RJZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbGluaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXb3Jrc3BhY2VzQnJlYWRjcnVtYnMoZGV2ZWxvcFBlcnNwZWN0aXZlPykge1xyXG4gICAgcmV0dXJuIFtkZXZlbG9wQnJlYWRjcnVtYigpXTtcclxuICB9XHJcblxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlV29ya3NwYWNlc1N1Yk5hdkJhcnMoZGV2ZWxvcFBlcnNwZWN0aXZlKSB7XHJcbiAgICAgIHJldHVybiBhY3RpdmF0ZUN1cnJlbnQoW1xyXG4gICAgICAgIGRldmVsb3BCcmVhZGNydW1iKCksXHJcbiAgICAgICAgb3BlcmF0ZUJyZWFkY3J1bWIoKVxyXG4gICAgICBdKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXb3Jrc3BhY2VCcmVhZGNydW1icyhjaGlsZHJlbiA9IG51bGwsIHdvcmtzcGFjZU5hbWUgPSBudWxsKSB7XHJcbiAgICB2YXIgYW5zd2VyID0gY3JlYXRlV29ya3NwYWNlc0JyZWFkY3J1bWJzKHRydWUpO1xyXG4gICAgaWYgKCF3b3Jrc3BhY2VOYW1lKSB7XHJcbiAgICAgIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAod29ya3NwYWNlTmFtZSkge1xyXG4gICAgICBhbnN3ZXIucHVzaChcclxuICAgICAgICB7XHJcbiAgICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlcy9cIiwgd29ya3NwYWNlTmFtZSksXHJcbiAgICAgICAgICBsYWJlbDogd29ya3NwYWNlTmFtZSxcclxuICAgICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIHByb2plY3Q6IFwiICsgd29ya3NwYWNlTmFtZSxcclxuICAgICAgICAgIGlzQWN0aXZlOiAoc3ViVGFiLCBwYXRoKSA9PiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIHByb2Nlc3NDaGlsZHJlbihhbnN3ZXIsIGNoaWxkcmVuKTtcclxuICAgIH1cclxuICAgIHJldHVybiBhbnN3ZXI7XHJcbiAgfVxyXG5cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVudmlyb25tZW50QnJlYWRjcnVtYnMoJHNjb3BlLCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcykge1xyXG4gICAgdmFyIG5zID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgdmFyIG5hbWVzcGFjZXNMaW5rID0gVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL2t1YmVybmV0ZXMvbmFtZXNwYWNlXCIpO1xyXG4gICAgdmFyIHdvcmtzcGFjZU5hbWUgPSAkcm91dGVQYXJhbXMud29ya3NwYWNlO1xyXG4gICAgdmFyIHByb2plY3QgPSAkcm91dGVQYXJhbXMucHJvamVjdDtcclxuICAgIHZhciBlbnZpcm9ubWVudCA9ICRyb3V0ZVBhcmFtcy5uYW1lc3BhY2U7XHJcbiAgICBpZiAod29ya3NwYWNlTmFtZSAmJiBwcm9qZWN0KSB7XHJcbiAgICAgIHZhciBwcm9qZWN0TGluayA9IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdCk7XHJcbiAgICAgICRzY29wZS4kcHJvamVjdExpbmsgPSBwcm9qZWN0TGluaztcclxuICAgICAgJHNjb3BlLiRwcm9qZWN0TmFtZXNwYWNlTGluayA9IFVybEhlbHBlcnMuam9pbihwcm9qZWN0TGluaywgXCJuYW1lc3BhY2VcIiwgbnMpO1xyXG4gICAgICBuYW1lc3BhY2VzTGluayA9IFVybEhlbHBlcnMuam9pbihwcm9qZWN0TGluaywgXCJuYW1lc3BhY2VcIik7XHJcbiAgICAgIHZhciBjaGlsZHJlbjogQXJyYXk8QnJlYWRjcnVtYkNvbmZpZz4gPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKHByb2plY3RMaW5rLCBcImVudmlyb25tZW50c1wiKSxcclxuICAgICAgICAgIGxhYmVsOiBcIkVudmlyb25tZW50c1wiLFxyXG4gICAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgZW52aXJvbm1lbnRzIGZvciB0aGlzIHByb2plY3RcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKG5hbWVzcGFjZXNMaW5rLCBucywgXCJhcHBzXCIpLFxyXG4gICAgICAgICAgbGFiZWw6ICgpID0+ICBlbnZpcm9ubWVudE5hbWUod29ya3NwYWNlTmFtZSwgbnMpLFxyXG4gICAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgcnVudGltZSBvZiB0aGUgd29ya3NwYWNlOiBcIiArIG5zXHJcbiAgICAgICAgfVxyXG4gICAgICBdO1xyXG4gICAgICByZXR1cm4gY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKHByb2plY3QsIGNoaWxkcmVuLCB3b3Jrc3BhY2VOYW1lKTtcclxuICAgIH0gZWxzZSBpZiAod29ya3NwYWNlTmFtZSAmJiBlbnZpcm9ubWVudCAmJiB3b3Jrc3BhY2VOYW1lICE9IGVudmlyb25tZW50KSB7XHJcbiAgICAgIC8vIGZpbmQgbGFiZWwgZm9yIG5hbWVzcGFjZSBlbnZpcm9ubWVudFxyXG4gICAgICB2YXIgY2hpbGRyZW46IEFycmF5PEJyZWFkY3J1bWJDb25maWc+ID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhyZWY6IGVudmlyb25tZW50c0xpbmsod29ya3NwYWNlTmFtZSksXHJcbiAgICAgICAgICBsYWJlbDogXCJFbnZpcm9ubWVudHNcIixcclxuICAgICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIGVudmlyb25tZW50cyBmb3IgdGhpcyBwcm9qZWN0XCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhyZWY6IGVudmlyb25tZW50TGluayh3b3Jrc3BhY2VOYW1lLCBlbnZpcm9ubWVudCksXHJcbiAgICAgICAgICBsYWJlbDogKCkgPT4gIGVudmlyb25tZW50TmFtZSh3b3Jrc3BhY2VOYW1lLCBlbnZpcm9ubWVudCksXHJcbiAgICAgICAgICB0aXRsZTogXCJWaWV3IHRoaXMgZW52aXJvbm1lbnRcIlxyXG4gICAgICAgIH1cclxuICAgICAgXTtcclxuICAgICAgcmV0dXJuIGNyZWF0ZVByb2plY3RCcmVhZGNydW1icyhwcm9qZWN0LCBjaGlsZHJlbiwgd29ya3NwYWNlTmFtZSk7XHJcbiAgICB9IGVsc2UgaWYgKCF3b3Jrc3BhY2VOYW1lKSB7XHJcbiAgICAgIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XHJcbiAgICB9XHJcbiAgICB2YXIgYW5zd2VyID0gY3JlYXRlV29ya3NwYWNlQnJlYWRjcnVtYnMod29ya3NwYWNlTmFtZSk7XHJcbiAgICBhbnN3ZXIucHVzaCh7XHJcbiAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIndvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJuYW1lc3BhY2VcIiwgbnMsIFwiYXBwc1wiKSxcclxuICAgICAgbGFiZWw6ICdSdW50aW1lJyxcclxuICAgICAgdGl0bGU6IFwiVmlldyB0aGUgcnVudGltZSBvZiB0aGUgd29ya3NwYWNlOiBcIiArIG5zXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBhY3RpdmF0ZUN1cnJlbnQoYW5zd2VyKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGdpdmVuIGVudmlyb25tZW50IG5hbWVzcGFjZVxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGVudmlyb25tZW50TmFtZSh3b3Jrc3BhY2VOYW1lLCBlbnZpcm9ubWVudCkge1xyXG4gICAgLyp2YXIgbW9kZWwgPSBLdWJlcm5ldGVzLmdldEt1YmVybmV0ZXNNb2RlbCgpO1xyXG4gICAgaWYgKG1vZGVsKSB7XHJcbiAgICAgIHJldHVybiBtb2RlbC5lbnZpcm9ubWVudE5hbWUod29ya3NwYWNlTmFtZSwgZW52aXJvbm1lbnQpO1xyXG4gICAgfSovXHJcbiAgICByZXR1cm4gZW52aXJvbm1lbnQ7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKHByb2plY3ROYW1lID0gbnVsbCwgY2hpbGRyZW46IEFycmF5PEJyZWFkY3J1bWJDb25maWc+ID0gbnVsbCwgd29ya3NwYWNlTmFtZSA9IG51bGwpIHtcclxuICAgIGlmICghd29ya3NwYWNlTmFtZSkge1xyXG4gICAgICB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgfVxyXG4gICAgdmFyIGFuc3dlciA9IGNyZWF0ZVdvcmtzcGFjZUJyZWFkY3J1bWJzKG51bGwsIHdvcmtzcGFjZU5hbWUpO1xyXG4gICAgaWYgKHdvcmtzcGFjZU5hbWUpIHtcclxuICAgICAgaWYgKHByb2plY3ROYW1lKSB7XHJcbiAgICAgICAgYW5zd2VyLnB1c2goXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiksXHJcbiAgICAgICAgICAgIGxhYmVsOiBcIkFwcHNcIixcclxuICAgICAgICAgICAgdGl0bGU6IFwiVmlldyBhbGwgdGhlIGFwcHMgaW4gdGhpcyBwcm9qZWN0XCJcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBhbnN3ZXIucHVzaChcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0TmFtZSksXHJcbiAgICAgICAgICAgIGxhYmVsOiBwcm9qZWN0TmFtZSxcclxuICAgICAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgcHJvamVjdDogXCIgKyBwcm9qZWN0TmFtZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHByb2Nlc3NDaGlsZHJlbihhbnN3ZXIsIGNoaWxkcmVuKTtcclxuICAgIH1cclxuICAgIHJldHVybiBhbnN3ZXI7XHJcbiAgfVxyXG5cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb2plY3RTZXR0aW5nc0JyZWFkY3J1bWJzKHByb2plY3ROYW1lLCB3b3Jrc3BhY2VOYW1lID0gbnVsbCkge1xyXG4gICAgdmFyIGNoaWxkcmVuID0gW107XHJcbiAgICBpZiAoIXByb2plY3ROYW1lKSB7XHJcbiAgICAgIGNoaWxkcmVuID0gW3tcclxuICAgICAgICBsYWJlbDogXCJOZXcgQXBwXCIsXHJcbiAgICAgICAgdGl0bGU6IFwiTGV0cyBtYWtlIGEgbmV3IGFwcFwiXHJcbiAgICAgIH1dO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNyZWF0ZVByb2plY3RCcmVhZGNydW1icyhwcm9qZWN0TmFtZSwgY2hpbGRyZW4sIHdvcmtzcGFjZU5hbWUpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdvcmtzcGFjZVN1Yk5hdkJhcnMoKSB7XHJcbiAgICB2YXIgd29ya3NwYWNlTmFtZSA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcclxuICAgIHJldHVybiBhY3RpdmF0ZUN1cnJlbnQoW1xyXG4gICAgICB7XHJcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSksXHJcbiAgICAgICAgbGFiZWw6IFwiRGFzaGJvYXJkXCIsXHJcbiAgICAgICAgY2xhc3M6IFwiZmEgZmEtdGFjaG9tZXRlclwiLFxyXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIGRhc2hib2FyZCBmb3IgdGhlIGFwcHMsIGVudmlyb25tZW50cyBhbmQgcGlwZWxpbmVzIGluIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcImFwcHNcIiksXHJcbiAgICAgICAgbGFiZWw6IFwiQXBwc1wiLFxyXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLXJvY2tldFwiLFxyXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIGFwcHMgaW4gdGhpcyBwcm9qZWN0XCJcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlzVmFsaWQ6ICgpID0+IGplbmtpbnNMaW5rKCksXHJcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJqZW5raW5zSm9iXCIpLFxyXG4gICAgICAgIGxhYmVsOiBcIkJ1aWxkc1wiLFxyXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLWNvZGVcIixcclxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBidWlsZHMgaW4gdGhpcyBwcm9qZWN0XCJcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhyZWY6IGVudmlyb25tZW50c0xpbmsoKSxcclxuICAgICAgICBsYWJlbDogXCJFbnZpcm9ubWVudHNcIixcclxuICAgICAgICBjbGFzczogXCJmYSBmYS1jdWJlc1wiLFxyXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIGVudmlyb25tZW50cyBmb3IgdGhpcyBwcm9qZWN0XCJcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhyZWY6IG5hbWVzcGFjZVJ1bnRpbWVMaW5rKHdvcmtzcGFjZU5hbWUpLFxyXG4gICAgICAgIGxhYmVsOiBcIlJ1bnRpbWVcIixcclxuICAgICAgICBjbGFzczogXCJmYSBmYS1jdWJlXCIsXHJcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgUnVudGltZSBwZXJzcGVjdGl2ZSBmb3IgdGhpcyBwcm9qZWN0XCJcclxuICAgICAgfVxyXG4vKlxyXG4gICAgICB7XHJcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJkZXRhaWxcIiksXHJcbiAgICAgICAgbGFiZWw6IFwiRGV0YWlsc1wiLFxyXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLWdlYXJcIixcclxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBwcm9qZWN0IGRldGFpbHNcIlxyXG4gICAgICB9XHJcbiovXHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBuYW1lc3BhY2VSdW50aW1lTGluayh3b3Jrc3BhY2VOYW1lID0gbnVsbCkge1xyXG4gICAgaWYgKCF3b3Jrc3BhY2VOYW1lKSB7XHJcbiAgICAgIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwid29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcIm5hbWVzcGFjZVwiLCB3b3Jrc3BhY2VOYW1lLCBcImFwcHNcIik7XHJcbiAgfVxyXG4gIFxyXG4gIGZ1bmN0aW9uIGNyZWF0ZUJ1aWxkc0xpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUsIGplbmtpbnNKb2JJZCkge1xyXG4gICAgd29ya3NwYWNlTmFtZSA9IHdvcmtzcGFjZU5hbWUgfHwgS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdE5hbWUsIFwiamVua2luc0pvYlwiLCBqZW5raW5zSm9iSWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIHJvdXRpbmcgZnVuY3Rpb24gdGhhdCBsb2FkcyBhIHRlbXBsYXRlIGFuZCBpbmplY3QgdGhlIG5lZWRlZCBkaXJlY3RpdmVzIHRvIHByb3Blcmx5XHJcbiAgICogZGlzcGxheS91cGRhdGUgdGhlIERldmVsb3BlciBtb2R1bGUgbWFuYWdlZCB0YWJzIGFuZCBicmVhZCBjcnVtYnMgZm9yIHdoZW4gdGhlIHJvdXRlIGlzIGFjdGl2ZS5cclxuICAgKlxyXG4gICAqIEV4YW1wbGUgVXNhZ2U6XHJcbiAgICpcclxuICAgKiB2YXIgcm91dGUgPSBEZXZlbG9wZXIuY3JlYXRlVGFiUm91dGluZ0Z1bmN0aW9uKFwiL2FwcC9zb21lZGlyXCIpO1xyXG4gICAqICRyb3V0ZVByb3ZpZGVyLndoZW4oJy9wcm9maWxlcycsIHJvdXRlKCd2aWV3Lmh0bWwnLCBmYWxzZSwgW3tcclxuICAgKiAgICAgbGFiZWw6IFwiUHJvZmlsZXNcIixcclxuICAgKiAgICAgdGl0bGU6IFwiQnJvd3NlIHRoZSBwcm9maWxlcyBvZiB0aGlzIHByb2plY3RcIlxyXG4gICAqICAgfV1cclxuICAgKiApKTtcclxuICAgKlxyXG4gICAqIEBwYXJhbSBiYXNlVVJMXHJcbiAgICogQHJldHVybnMge2Z1bmN0aW9uKHN0cmluZywgYm9vbGVhbj0sIEFycmF5PERldmVsb3Blci5CcmVhZGNydW1iQ29uZmlnPj0pOiB7dGVtcGxhdGU6IHN0cmluZywgcmVsb2FkT25TZWFyY2g6IGJvb2xlYW4sIGNvbnRyb2xsZXI6IHN0cmluZ3xzdHJpbmd8KGZ1bmN0aW9uKGFueSwgbmcucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSk6IHVuZGVmaW5lZClbXX19XHJcbiAgICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRhYlJvdXRpbmdGdW5jdGlvbihiYXNlVVJMOnN0cmluZykge1xyXG4gICAgcmV0dXJuICh0ZW1wbGF0ZU5hbWU6c3RyaW5nLCByZWxvYWRPblNlYXJjaDpib29sZWFuID0gdHJ1ZSwgY2hpbGRyZW4/OiBBcnJheTxEZXZlbG9wZXIuQnJlYWRjcnVtYkNvbmZpZz4pID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB0ZW1wbGF0ZTogXCI8ZGl2IGhhd3Rpby1icmVhZGNydW1icz48L2Rpdj48ZGl2IGhhd3Rpby10YWJzPjwvZGl2PjxuZy1pbmNsdWRlIHNyYz0nY29udGVudFRlbXBsYXRlVXJsJz48L25nLWluY2x1ZGU+XCIsXHJcbiAgICAgICAgcmVsb2FkT25TZWFyY2g6IHJlbG9hZE9uU2VhcmNoLFxyXG4gICAgICAgIGNvbnRyb2xsZXI6IFtcIiRzY29wZVwiLCBcIiRyb3V0ZVBhcmFtc1wiLCAoJHNjb3BlLCAkcm91dGVQYXJhbXM6bmcucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSkgPT4ge1xyXG4gICAgICAgICAgaWYoICRyb3V0ZVBhcmFtc1tcIm5hbWVzcGFjZVwiXT09bnVsbCApIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKFwiVGhlIDpuYW1lc3BhY2Ugcm91dGUgcGFyYW1ldGVyIHdhcyBub3QgZGVmaW5lZCBmb3IgdGhlIHJvdXRlLlwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmKCAkcm91dGVQYXJhbXNbXCJwcm9qZWN0SWRcIl0gPT0gbnVsbCApIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKFwiVGhlIDpwcm9qZWN0SWQgcm91dGUgcGFyYW1ldGVyIHdhcyBub3QgZGVmaW5lZCBmb3IgdGhlIHJvdXRlLlwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgICRzY29wZS5uYW1lc3BhY2UgPSAkcm91dGVQYXJhbXNbXCJuYW1lc3BhY2VcIl07XHJcbiAgICAgICAgICAkc2NvcGUucHJvamVjdElkID0gJHJvdXRlUGFyYW1zW1wicHJvamVjdElkXCJdO1xyXG4gICAgICAgICAgJHNjb3BlLmNvbnRlbnRUZW1wbGF0ZVVybCA9IFVybEhlbHBlcnMuam9pbihiYXNlVVJMLCB0ZW1wbGF0ZU5hbWUpO1xyXG4gICAgICAgICAgJHNjb3BlLmJyZWFkY3J1bWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKCRzY29wZS5wcm9qZWN0SWQsIGNoaWxkcmVuKTtcclxuICAgICAgICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdFN1Yk5hdkJhcnMoJHNjb3BlLnByb2plY3RJZCk7XHJcbiAgICAgICAgfV1cclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm9qZWN0U3ViTmF2QmFycyhwcm9qZWN0TmFtZSwgamVua2luc0pvYklkID0gbnVsbCwgJHNjb3BlID0gbnVsbCkge1xyXG4gICAgdmFyIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XHJcbiAgICB2YXIgcHJvamVjdExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3ROYW1lKTtcclxuICAgIHZhciBidWlsZHNMaW5rID0gVXJsSGVscGVycy5qb2luKHByb2plY3RMaW5rLCBcImJ1aWxkc1wiKTtcclxuICAgIGlmICghamVua2luc0pvYklkKSB7XHJcbiAgICAgIGplbmtpbnNKb2JJZCA9IHByb2plY3ROYW1lO1xyXG4gICAgfVxyXG4gICAgdmFyIGplbmtpbnNCdWlsZExpbmsgPSBudWxsO1xyXG4gICAgdmFyIHBpcGVsaW5lc0xpbmsgPSBudWxsO1xyXG4gICAgaWYgKHByb2plY3ROYW1lICYmIGplbmtpbnNKb2JJZCkge1xyXG4gICAgICBqZW5raW5zQnVpbGRMaW5rID0gY3JlYXRlQnVpbGRzTGluayh3b3Jrc3BhY2VOYW1lLCBwcm9qZWN0TmFtZSwgamVua2luc0pvYklkKTtcclxuICAgICAgcGlwZWxpbmVzTGluayA9IFVybEhlbHBlcnMuam9pbihqZW5raW5zQnVpbGRMaW5rLCBcInBpcGVsaW5lc1wiKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBpc0plbmtpbnNCdWlsZCgpIHtcclxuICAgICAgdmFyIGFuc3dlciA9IGplbmtpbnNMaW5rKCkgJiYgamVua2luc0J1aWxkTGluaztcclxuICAgICAgaWYgKGFuc3dlciAmJiAkc2NvcGUpIHtcclxuICAgICAgICB2YXIgZW50aXR5ID0gRGV2ZWxvcGVyLnByb2plY3RGb3JTY29wZSgkc2NvcGUpO1xyXG4gICAgICAgIGlmIChlbnRpdHkpIHtcclxuICAgICAgICAgIHJldHVybiBhbnN3ZXIgJiYgZW50aXR5LiRqZW5raW5zSm9iO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYW5zd2VyO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBhbnN3ZXIgPSBbXHJcbiAgICAgIC8qXHJcbiAgICAgIHtcclxuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lKSxcclxuICAgICAgICBsYWJlbDogXCJBbGwgQXBwc1wiLFxyXG4gICAgICAgIGNsYXNzOiAnZmEgZmEtYW5nbGUtZG91YmxlLWxlZnQnLFxyXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIGFwcHMgaW4gdGhpcyBwcm9qZWN0XCJcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRlbXBsYXRlOiBgPGRpdiBuZy1pbmNsdWRlPVwiJ3BsdWdpbnMvZGV2ZWxvcGVyL2h0bWwvcHJvamVjdFNlbGVjdG9yLmh0bWwnXCI+PC9kaXY+YFxyXG4gICAgICB9LFxyXG4qL1xyXG4gICAgICB7XHJcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0TmFtZSwgXCJlbnZpcm9ubWVudHNcIiksXHJcbiAgICAgICAgaXNBY3RpdmU6IChzdWJUYWIsIHBhdGgpID0+IHtcclxuICAgICAgICAgIHZhciBocmVmID0gbm9ybWFsaXplSHJlZihzdWJUYWIuaHJlZik7XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwic3ViVGFiOiBcIiwgc3ViVGFiLCBcIiBwYXRoOiBcIiwgcGF0aCk7XHJcbiAgICAgICAgICBpZiAocGF0aCA9PT0gaHJlZikge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHZhciByb290UGF0aCA9IGhyZWYucmVwbGFjZSgvXFwvZW52aXJvbm1lbnRzLywgJycpO1xyXG4gICAgICAgICAgaWYgKHBhdGggPT09IHJvb3RQYXRoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy9ocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3ROYW1lKSxcclxuICAgICAgICBsYWJlbDogXCJEYXNoYm9hcmRcIixcclxuICAgICAgICBjbGFzczogXCJmYSBmYS10YWNob21ldGVyXCIsXHJcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgYXBwIGRhc2hib2FyZCBmb3IgdGhlIGFjdGl2aXR5LCBlbnZpcm9ubWVudHMgYW5kIHBpcGVsaW5lc1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBpc1ZhbGlkOiAoKSA9PiBpc0plbmtpbnNCdWlsZCgpICYmIHBpcGVsaW5lc0xpbmssXHJcbiAgICAgICAgaWQ6IFwicGlwZWxpbmVzXCIsXHJcbiAgICAgICAgaHJlZjogcGlwZWxpbmVzTGluayxcclxuICAgICAgICBsYWJlbDogXCJQaXBlbGluZXNcIixcclxuICAgICAgICBjbGFzczogXCJmYSBmYS1lbGxpcHNpcy1oXCIsXHJcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgcGlwZWxpbmUgYnVpbGRzIGZvciB0aGlzIGFwcFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBpc1ZhbGlkOiAoKSA9PiAhaXNKZW5raW5zQnVpbGQoKSxcclxuICAgICAgICBocmVmOiBidWlsZHNMaW5rLFxyXG4gICAgICAgIGxhYmVsOiBcIkJ1aWxkc1wiLFxyXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLWJhcnNcIixcclxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBidWlsZHMgZm9yIHRoaXMgYXBwXCJcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlzVmFsaWQ6ICgpID0+IGlzSmVua2luc0J1aWxkKCksXHJcbiAgICAgICAgaXNBY3RpdmU6IChpdGVtLCBwYXRoKSA9PiB7XHJcbiAgICAgICAgICBpZiAocGF0aC5pbmRleE9mKCcvbG9nLycpID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAocGF0aC5pbmRleE9mKCcvamVua2luc0pvYi8nKSA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBpZDogXCJidWlsZHNcIixcclxuICAgICAgICBocmVmOiBqZW5raW5zQnVpbGRMaW5rLFxyXG4gICAgICAgIGxhYmVsOiBcIkJ1aWxkc1wiLFxyXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLWJhcnNcIixcclxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBKZW5raW5zIGJ1aWxkcyBmb3IgdGhpcyBhcHBcIlxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaXNWYWxpZDogKCkgPT4gaXNKZW5raW5zQnVpbGQoKSxcclxuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3ROYW1lLCBcImplbmtpbnNKb2JcIiwgamVua2luc0pvYklkLCBcIm1ldHJpY3NcIiksXHJcbiAgICAgICAgbGFiZWw6IFwiTWV0cmljc1wiLFxyXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLWJhci1jaGFydFwiLFxyXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIG1ldHJpY3MgZm9yIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgIH0sXHJcbi8qXHJcbiAgICAgIHtcclxuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3ROYW1lLCBcInRvb2xzXCIpLFxyXG4gICAgICAgIGxhYmVsOiBcIlRvb2xzXCIsXHJcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgdG9vbHMgZm9yIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgIH0sXHJcbiovXHJcbiAgICAgIHtcclxuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3ROYW1lLCBcImJ1aWxkQ29uZmlnRWRpdFwiKSxcclxuICAgICAgICBsYWJlbDogXCJTZXR0aW5nc1wiLFxyXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLWNvZ1wiLFxyXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIGFwcCBjb25maWd1cmF0aW9uXCIsXHJcbiAgICAgICAgaXNBY3RpdmU6IChzdWJUYWIsIHBhdGgpID0+IHtcclxuICAgICAgICAgIGlmIChfLmVuZHNXaXRoKHBhdGgsICcvYnVpbGRDb25maWdFZGl0JykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoXy5lbmRzV2l0aChwYXRoLCAnL2ZvcmdlL3NlY3JldHMnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChfLmVuZHNXaXRoKHBhdGgsICcvZm9yZ2UvY29tbWFuZC9kZXZvcHMtZWRpdCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgXTtcclxuXHJcbiAgICB2YXIgY29udGV4dCA9IHtcclxuICAgICAgd29ya3NwYWNlTmFtZTogd29ya3NwYWNlTmFtZSxcclxuICAgICAgcHJvamVjdE5hbWU6IHByb2plY3ROYW1lLFxyXG4gICAgICBwcm9qZWN0TGluazogcHJvamVjdExpbmssXHJcbiAgICAgIGplbmtpbnNKb2JJZDogamVua2luc0pvYklkLFxyXG4gICAgICAkc2NvcGU6ICRzY29wZVxyXG4gICAgfTtcclxuICAgIGFuZ3VsYXIuZm9yRWFjaChjdXN0b21Qcm9qZWN0U3ViVGFiRmFjdG9yaWVzLCAoZm4pID0+IHtcclxuICAgICAgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbihmbikpIHtcclxuICAgICAgICB2YXIgc3VidGFiID0gZm4oY29udGV4dCk7XHJcbiAgICAgICAgaWYgKHN1YnRhYikge1xyXG4gICAgICAgICAgaWYgKGFuZ3VsYXIuaXNBcnJheShzdWJ0YWIpKSB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChzdWJ0YWIsICh0KSA9PiB7XHJcbiAgICAgICAgICAgICAgYW5zd2VyLnB1c2godCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYW5zd2VyLnB1c2goc3VidGFiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBhY3RpdmF0ZUN1cnJlbnQoYW5zd2VyKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm9qZWN0U2V0dGluZ3NTdWJOYXZCYXJzKHByb2plY3ROYW1lLCBqZW5raW5zSm9iSWQgPSBudWxsKSB7XHJcbiAgICBpZiAoIXByb2plY3ROYW1lKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIHZhciB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgdmFyIHByb2plY3RMaW5rID0gVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0TmFtZSk7XHJcbiAgICBpZiAoIWplbmtpbnNKb2JJZCkge1xyXG4gICAgICBqZW5raW5zSm9iSWQgPSBwcm9qZWN0TmFtZTtcclxuICAgIH1cclxuICAgIHZhciBhbnN3ZXIgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3ROYW1lLCBcImJ1aWxkQ29uZmlnRWRpdFwiKSxcclxuICAgICAgICBsYWJlbDogXCJDb3JlXCIsXHJcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgY29yZSBidWlsZCBjb25maWd1cmF0aW9uXCJcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhyZWY6IHByb2plY3RTZWNyZXRzTGluayh3b3Jrc3BhY2VOYW1lLCBwcm9qZWN0TmFtZSksXHJcbiAgICAgICAgbGFiZWw6IFwiU2VjcmV0c1wiLFxyXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgb3IgY2hhbmdlIHRoZSBzZWNyZXRzIHVzZWQgdG8gZWRpdCBzb3VyY2UgY29kZSBpbiB0aGUgc291cmNlIGNvbnRyb2wgc3lzdGVtXCJcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhyZWY6IGVkaXRQaXBlbGluZUxpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUpLFxyXG4gICAgICAgIGxhYmVsOiBcIlBpcGVsaW5lXCIsXHJcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgRGV2T3BzIGFuZCBwaXBlbGluZSBjb25maWd1cmF0aW9uXCJcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlzVmFsaWQ6ICgpID0+IGZvcmdlUHJvamVjdEhhc0J1aWxkZXIoXCJtYXZlblwiKSxcclxuICAgICAgICBocmVmOiBlZGl0TWF2ZW5CdWlsZExpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUpLFxyXG4gICAgICAgIGxhYmVsOiBcIk1hdmVuXCIsXHJcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgTWF2ZW4gYnVpbGQgY29uZmlndXJhdGlvblwiXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgICByZXR1cm4gYWN0aXZhdGVDdXJyZW50KGFuc3dlcik7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZm9yZ2VQcm9qZWN0SGFzQnVpbGRlcihuYW1lKSB7XHJcbiAgICB2YXIgZm9yZ2VQcm9qZWN0ID0gS3ViZXJuZXRlcy5pbmplY3Q8YW55PihcIkZvcmdlUHJvamVjdFwiKTtcclxuICAgIGlmIChmb3JnZVByb2plY3QpIHtcclxuICAgICAgcmV0dXJuIGZvcmdlUHJvamVjdC5oYXNCdWlsZGVyKG5hbWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGZvcmdlUHJvamVjdEhhc1BlcnNwZWN0aXZlKG5hbWUpIHtcclxuICAgIHZhciBmb3JnZVByb2plY3QgPSBLdWJlcm5ldGVzLmluamVjdDxhbnk+KFwiRm9yZ2VQcm9qZWN0XCIpO1xyXG4gICAgaWYgKGZvcmdlUHJvamVjdCkge1xyXG4gICAgICByZXR1cm4gZm9yZ2VQcm9qZWN0Lmhhc1BlcnNwZWN0aXZlKG5hbWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGVkaXRQaXBlbGluZUxpbmtTY29wZSgkc2NvcGUpIHtcclxuICAgIHJldHVybiBlZGl0UGlwZWxpbmVMaW5rKCRzY29wZS5uYW1lc3BhY2UsICRzY29wZS5wcm9qZWN0SWQgfHwgJHNjb3BlLnByb2plY3ROYW1lIHx8ICRzY29wZS5wcm9qZWN0KTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm9qZWN0TGluayh3b3Jrc3BhY2VOYW1lID0gbnVsbCkge1xyXG4gICAgaWYgKCF3b3Jrc3BhY2VOYW1lKSB7XHJcbiAgICAgIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCIvZm9yZ2UvY3JlYXRlUHJvamVjdFwiKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBlZGl0UGlwZWxpbmVMaW5rKHdvcmtzcGFjZU5hbWUsIHByb2plY3ROYW1lKSB7XHJcbiAgICByZXR1cm4gcHJvamVjdFdvcmtzcGFjZUxpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUsIFwiZm9yZ2UvY29tbWFuZC9kZXZvcHMtZWRpdFwiKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBlZGl0TWF2ZW5CdWlsZExpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUpIHtcclxuICAgIHJldHVybiBwcm9qZWN0V29ya3NwYWNlTGluayh3b3Jrc3BhY2VOYW1lLCBwcm9qZWN0TmFtZSwgXCJmb3JnZS9jb21tYW5kL2ZhYnJpYzgtc2V0dXBcIik7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gcHJvamVjdFNlY3JldHNMaW5rKHdvcmtzcGFjZU5hbWUsIHByb2plY3ROYW1lKSB7XHJcbiAgICByZXR1cm4gcHJvamVjdFdvcmtzcGFjZUxpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUsIFwiZm9yZ2Uvc2VjcmV0c1wiLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gc2VjcmV0c05hbWVzcGFjZUxpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUsIHNlY3JldHNOYW1lc3BhY2UpIHtcclxuICAgIHZhciBwcmVmaXggPSBwcm9qZWN0V29ya3NwYWNlTGluayh3b3Jrc3BhY2VOYW1lLCBwcm9qZWN0TmFtZSwgXCJcIikgfHwgXCJrdWJlcm5ldGVzXCI7XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKHByZWZpeCwgXCJuYW1lc3BhY2VcIiwgc2VjcmV0c05hbWVzcGFjZSwgXCJzZWNyZXRzXCIpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHByb2plY3RXb3Jrc3BhY2VMaW5rKHdvcmtzcGFjZU5hbWUsIHByb2plY3ROYW1lLCBwYXRoLCBpZ25vcmVCbGFua1Byb2plY3QgPSB0cnVlKSB7XHJcbiAgICBpZiAoaWdub3JlQmxhbmtQcm9qZWN0ICYmICFwcm9qZWN0TmFtZSkge1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICAgIGlmICghd29ya3NwYWNlTmFtZSkge1xyXG4gICAgICB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdE5hbWUsIHBhdGgpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGVudmlyb25tZW50c0xpbmsod29ya3NwYWNlTmFtZSA9IG51bGwpIHtcclxuICAgIGlmICghd29ya3NwYWNlTmFtZSkge1xyXG4gICAgICB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwiZW52aXJvbm1lbnRzXCIpXHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZW52aXJvbm1lbnRMaW5rKHdvcmtzcGFjZU5hbWUsIGVudmlyb25tZW50TmFtZXNwYWNlLCBwYXRoID0gXCJcIiwgaWdub3JlQmxhbmtQcm9qZWN0ID0gdHJ1ZSkge1xyXG4gICAgaWYgKGlnbm9yZUJsYW5rUHJvamVjdCAmJiAhZW52aXJvbm1lbnROYW1lc3BhY2UpIHtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgICBpZiAoIXdvcmtzcGFjZU5hbWUpIHtcclxuICAgICAgd29ya3NwYWNlTmFtZSA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcIm5hbWVzcGFjZVwiLCBlbnZpcm9ubWVudE5hbWVzcGFjZSwgcGF0aCk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgdmFyIGN1c3RvbVByb2plY3RTdWJUYWJGYWN0b3JpZXMgPSBbXTtcclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUplbmtpbnNCcmVhZGNydW1icyhwcm9qZWN0TmFtZSwgam9iSWQsIGJ1aWxkSWQpIHtcclxuICAgIHZhciB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgdmFyIGNoaWxkcmVuID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgaWQ6IFwiYnVpbGRzXCIsXHJcbiAgICAgICAgaHJlZjogY3JlYXRlQnVpbGRzTGluayh3b3Jrc3BhY2VOYW1lLCBwcm9qZWN0TmFtZSwgam9iSWQpLFxyXG4gICAgICAgIGxhYmVsOiBcIkJ1aWxkc1wiLFxyXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIGJ1aWxkcyBmb3IgdGhpcyBhcHBcIlxyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gICAgaWYgKGJ1aWxkSWQpIHtcclxuICAgICAgY2hpbGRyZW4ucHVzaCh7XHJcbiAgICAgICAgaWQ6IFwiXCIsXHJcbiAgICAgICAgaHJlZjogXCJcIixcclxuICAgICAgICBsYWJlbDogXCIjXCIgKyBidWlsZElkLFxyXG4gICAgICAgIHRpdGxlOiBcIkJ1aWxkICNcIiArIGJ1aWxkSWRcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKHByb2plY3ROYW1lLCBjaGlsZHJlbik7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlSmVua2luc1N1Yk5hdkJhcnMocHJvamVjdE5hbWUsIGplbmtpbnNKb2JJZCwgYnVpbGRJZCwgZXh0cmFPcHRpb246IGFueSA9IG51bGwpIHtcclxuICAgIHZhciBhbnN3ZXIgPSBjcmVhdGVQcm9qZWN0U3ViTmF2QmFycyhwcm9qZWN0TmFtZSwgamVua2luc0pvYklkKTtcclxuICAgIGlmIChleHRyYU9wdGlvbikge1xyXG4gICAgICAvLyBleHRyYU9wdGlvbi5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICBhbnN3ZXIucHVzaChleHRyYU9wdGlvbik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYW5zd2VyO1xyXG4gIH1cclxuXHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbnZpcm9ubWVudFN1Yk5hdkJhcnMoJHNjb3BlLCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcykge1xyXG4gICAgdmFyIG5zID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgdmFyIHdvcmtzcGFjZU5hbWUgPSAkcm91dGVQYXJhbXMud29ya3NwYWNlO1xyXG4gICAgdmFyIHByb2plY3QgPSAkcm91dGVQYXJhbXMucHJvamVjdDtcclxuICAgIHZhciBlbnZpcm9ubWVudCA9ICRyb3V0ZVBhcmFtcy5uYW1lc3BhY2U7XHJcbiAgICB2YXIgcHJvamVjdExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIva3ViZXJuZXRlc1wiKTtcclxuICAgIC8qY29uc29sZS5sb2coXCI9PT09PT09PT09PT09PT09PT09PT1cIilcclxuICAgIGNvbnNvbGUubG9nKHByb2plY3RMaW5rKTtcclxuICAgIGlmICh3b3Jrc3BhY2VOYW1lICYmIHByb2plY3QpIHtcclxuICAgICAgcHJvamVjdExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIva3ViZXJuZXRlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcHJvamVjdExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIva3ViZXJuZXRlc1wiLCB3b3Jrc3BhY2VOYW1lIHx8IG5zKTtcclxuICAgIH0qL1xyXG4gICAgdmFyIG5hbWVzcGFjZXNMaW5rID0gVXJsSGVscGVycy5qb2luKHByb2plY3RMaW5rLCBcIm5hbWVzcGFjZVwiKTsgICAgXHJcbiAgICByZXR1cm4gYWN0aXZhdGVDdXJyZW50KFsgICAgIFxyXG4gICAgICB7XHJcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKG5hbWVzcGFjZXNMaW5rLCBucywgXCJyZXBsaWNhdGlvbkNvbnRyb2xsZXJzXCIpLFxyXG4gICAgICAgIGxhYmVsOiBcIuacjeWKoeeuoeeQhlwiLFxyXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLWNsb25lXCIsXHJcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgUmVwbGljYXMgZm9yIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgIH0sICAgICBcclxuICAgICAgLyp7XHJcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKG5hbWVzcGFjZXNMaW5rLCBucywgXCJldmVudHNcIiksXHJcbiAgICAgICAgbGFiZWw6IFwi5pel5b+X5L+h5oGvXCIsXHJcbiAgICAgICAgY2xhc3M6IFwiZmEgZmEtbmV3c3BhcGVyLW9cIixcclxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBldmVudHMgZm9yIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFxyXG4gICAgICB7XHJcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKHByb2plY3RMaW5rLCBcImhvc3RzXCIpLFxyXG4gICAgICAgIGxhYmVsOiBcIumbhue+pOiKgueCuVwiLFxyXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLXNlcnZlclwiLFxyXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIG5vZGVzIGZvciB0aGlzIHByb2plY3RcIlxyXG4gICAgICB9ICovICAgIFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZW52aXJvbm1lbnRJbnN0YW5jZUxpbmsoZW52LCBwcm9qZWN0TmFtZSA9IG51bGwpIHtcclxuICAgIGlmIChlbnYpIHtcclxuICAgICAgdmFyIGVudk5hbWVzcGFjZSA9IGVudltcIm5hbWVzcGFjZVwiXTtcclxuICAgICAgaWYgKGVudk5hbWVzcGFjZSkge1xyXG4gICAgICAgIGlmIChwcm9qZWN0TmFtZSkge1xyXG4gICAgICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0TmFtZSwgXCJuYW1lc3BhY2VcIiwgZW52TmFtZXNwYWNlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKSwgXCJuYW1lc3BhY2VcIiwgZW52TmFtZXNwYWNlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBcIlwiO1xyXG4gIH1cclxuXHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBuYW1lc3BhY2VMaW5rKCRzY29wZSwgJHJvdXRlUGFyYW1zLCBwYXRoID0gbnVsbCkge1xyXG4gICAgdmFyIG5zID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgdmFyIHdvcmtzcGFjZU5hbWUgPSAkcm91dGVQYXJhbXMud29ya3NwYWNlO1xyXG4gICAgdmFyIHByb2plY3QgPSAkcm91dGVQYXJhbXMucHJvamVjdDtcclxuICAgIHZhciBwcm9qZWN0TGluayA9IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi9rdWJlcm5ldGVzXCIpO1xyXG4gICAgaWYgKHdvcmtzcGFjZU5hbWUgJiYgcHJvamVjdCkge1xyXG4gICAgICBwcm9qZWN0TGluayA9IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKHByb2plY3RMaW5rLCBcIm5hbWVzcGFjZVwiLCBucywgcGF0aCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmVzIHRoZSBVUkwgcXVlcnkgc3RyaW5nIGlmIGl0cyBpbnNpZGUgdGhlIGdpdmVuIHRleHRcclxuICAgKi9cclxuICBmdW5jdGlvbiB0cmltUXVlcnkodGV4dCkge1xyXG4gICAgaWYgKHRleHQpIHtcclxuICAgICAgdmFyIGlkeCA9IHRleHQuaW5kZXhPZihcIj9cIik7XHJcbiAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgIHJldHVybiB0ZXh0LnN1YnN0cmluZygwLCBpZHgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGV4dDtcclxuICB9XHJcblxyXG4gIC8vIENhdGVyIGZvciB0aGUgYXBwIHJ1bm5pbmcgYXQgc29tZSB3ZWlyZCBkb2N1bWVudCBiYXNlXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUhyZWYoaHJlZjpzdHJpbmcpIHtcclxuICAgIGlmICghaHJlZikge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHZhciByZWdleCA9IG5ldyBSZWdFeHAoJ14nICsgSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKS5yZXBsYWNlKCcvJywgJ1xcXFwvJykpO1xyXG4gICAgcmV0dXJuIGhyZWYucmVwbGFjZShyZWdleCwgJy8nKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBhY3RpdmF0ZUN1cnJlbnQobmF2QmFySXRlbXMpIHtcclxuICAgIG5hdkJhckl0ZW1zID0gXy5jb21wYWN0KG5hdkJhckl0ZW1zKTtcclxuICAgIHZhciBpbmplY3RvciA9IEhhd3Rpb0NvcmUuaW5qZWN0b3I7XHJcbiAgICB2YXIgJGxvY2F0aW9uID0gaW5qZWN0b3IgPyBpbmplY3Rvci5nZXQ8bmcuSUxvY2F0aW9uU2VydmljZT4oXCIkbG9jYXRpb25cIikgOiBudWxsO1xyXG4gICAgaWYgKCRsb2NhdGlvbikge1xyXG4gICAgICB2YXIgcGF0aCA9IG5vcm1hbGl6ZUhyZWYodHJpbVF1ZXJ5KCRsb2NhdGlvbi5wYXRoKCkpKTtcclxuICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XHJcbiAgICAgIGZ1bmN0aW9uIG1ha2VBY3RpdmUoaXRlbSkge1xyXG4gICAgICAgIGl0ZW0uYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICBmb3VuZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgZnVuY3Rpb24gZ2V0SHJlZihpdGVtKSB7XHJcbiAgICAgICAgdmFyIGhyZWYgPSBpdGVtLmhyZWY7XHJcbiAgICAgICAgdmFyIHRyaW1IcmVmID0gdHJpbVF1ZXJ5KGhyZWYpO1xyXG4gICAgICAgIHJldHVybiBub3JtYWxpemVIcmVmKHRyaW1IcmVmKTtcclxuICAgICAgfVxyXG4gICAgICBhbmd1bGFyLmZvckVhY2gobmF2QmFySXRlbXMsIChpdGVtKSA9PiB7XHJcbiAgICAgICAgaWYgKCFmb3VuZCAmJiBpdGVtKSB7XHJcbiAgICAgICAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKGl0ZW0uaXNBY3RpdmUpKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLmlzQWN0aXZlKGl0ZW0sIHBhdGgpKSB7XHJcbiAgICAgICAgICAgICAgbWFrZUFjdGl2ZShpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIHRyaW1IcmVmID0gZ2V0SHJlZihpdGVtKTtcclxuICAgICAgICAgICAgaWYgKCF0cmltSHJlZikge1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHJpbUhyZWYgPT09IHBhdGgpIHtcclxuICAgICAgICAgICAgICBtYWtlQWN0aXZlKGl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgLy8gTWF5YmUgaXQncyBhIHN1Yi1pdGVtIG9mIGEgdGFiLCBsZXQncyBmYWxsIGJhY2sgdG8gdGhhdCBtYXliZVxyXG4gICAgICBpZiAoIWZvdW5kKSB7XHJcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKG5hdkJhckl0ZW1zLCAoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFmb3VuZCkge1xyXG4gICAgICAgICAgICBpZiAoIWFuZ3VsYXIuaXNGdW5jdGlvbihpdGVtLmlzQWN0aXZlKSkge1xyXG4gICAgICAgICAgICAgIHZhciB0cmltSHJlZiA9IGdldEhyZWYoaXRlbSk7XHJcbiAgICAgICAgICAgICAgaWYgKCF0cmltSHJlZikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoXy5zdGFydHNXaXRoKHBhdGgsIHRyaW1IcmVmKSkge1xyXG4gICAgICAgICAgICAgICAgbWFrZUFjdGl2ZShpdGVtKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICAvLyBzdGlsbCBub3QgZm91bmQsIGxldCdzIGxvZyBpdFxyXG4gICAgICBpZiAoIWZvdW5kKSB7XHJcbiAgICAgICAgbG9nLmRlYnVnKFwiTm8gbmF2aWdhdGlvbiB0YWIgZm91bmQgZm9yIHBhdGg6XCIsIHBhdGgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmF2QmFySXRlbXM7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwcm9jZXNzQ2hpbGRyZW4oYW5zd2VyLCBjaGlsZHJlbikge1xyXG4gICAgaWYgKGNoaWxkcmVuKSB7XHJcbiAgICAgIGlmIChhbmd1bGFyLmlzQXJyYXkoY2hpbGRyZW4pKSB7XHJcbiAgICAgICAgYW5zd2VyID0gYW5zd2VyLmNvbmNhdChjaGlsZHJlbik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYW5zd2VyLnB1c2goY2hpbGRyZW4pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBhY3RpdmF0ZUN1cnJlbnQoYW5zd2VyKTtcclxuICAgIHJldHVybiBhbnN3ZXI7XHJcbiAgfVxyXG59XHJcbiIsIm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgZXhwb3J0IGNsYXNzIGNvbnN0cyB7XHJcbiAgICBnZXQgTkFNRVNQQUNFX1NUT1JBR0VfS0VZKCk6c3RyaW5nIHsgcmV0dXJuIFwiazhzU2VsZWN0ZWROYW1lc3BhY2VcIjsgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0IHZhciBDb25zdGFudHMgPSBuZXcgY29uc3RzKCk7XHJcblx0XHJcbiAgZXhwb3J0IGludGVyZmFjZSBBcGlMb2NhdGlvbiB7XHJcbiAgICBwcm90bz86c3RyaW5nO1xyXG4gICAgaG9zdFBvcnQ6c3RyaW5nO1xyXG4gICAgcHJlZml4OnN0cmluZztcclxuICB9XHJcbiAgXHJcbiAgZXhwb3J0IGludGVyZmFjZSBBcGlMb2NhdGlvbnMge1xyXG4gICAgb3BlbnNoaWZ0PzogQXBpTG9jYXRpb247XHJcbiAgICBrOHM/OiBBcGlMb2NhdGlvbjtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBpbnRlcmZhY2UgS3ViZXJuZXRlc0NvbmZpZyB7XHJcbiAgICBtYXN0ZXJfdXJpPzogc3RyaW5nO1xyXG4gICAgYXBpPzogQXBpTG9jYXRpb25zO1xyXG4gICAgb3BlbnNoaWZ0PzogT3BlblNoaWZ0T0F1dGhDb25maWc7XHJcbiAgICBnb29nbGU/OiBHb29nbGVPQXV0aENvbmZpZztcclxuICAgIGtleWNsb2FrPzogS2V5Q2xvYWtBdXRoQ29uZmlnO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGludGVyZmFjZSBPcGVuU2hpZnRPQXV0aENvbmZpZyB7XHJcbiAgICBvYXV0aF9hdXRob3JpemVfdXJpOnN0cmluZztcclxuICAgIG9hdXRoX2NsaWVudF9pZDpzdHJpbmc7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgaW50ZXJmYWNlIEdvb2dsZU9BdXRoQ29uZmlnIHtcclxuICAgIGF1dGhlbnRpY2F0aW9uVVJJOnN0cmluZztcclxuICAgIGF1dGhvcml6YXRpb25VUkk6c3RyaW5nO1xyXG4gICAgY2xpZW50SWQ6c3RyaW5nO1xyXG4gICAgY2xpZW50U2VjcmV0OnN0cmluZztcclxuICAgIHJlZGlyZWN0VVJJOnN0cmluZztcclxuICAgIHNjb3BlOnN0cmluZztcclxuICAgIHRva2VuVVJJPzpzdHJpbmc7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgaW50ZXJmYWNlIEtleUNsb2FrQXV0aENvbmZpZyB7XHJcbiAgICBvYXV0aF9hdXRob3JpemVfdXJpOnN0cmluZztcclxuICAgIG9hdXRoX2NsaWVudF9pZDpzdHJpbmc7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgaW50ZXJmYWNlIEt1YmVybmV0ZXNTdGF0ZSB7XHJcbiAgICBuYW1lc3BhY2VzOiBBcnJheTxzdHJpbmc+O1xyXG4gICAgc2VsZWN0ZWROYW1lc3BhY2U6IHN0cmluZztcclxuICB9XHJcblxyXG5cdGV4cG9ydCBjbGFzcyBXYXRjaFR5cGVzIHtcclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IEVORFBPSU5UUygpOnN0cmluZyB7IHJldHVybiBcImVuZHBvaW50c1wiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBFVkVOVFMoKTpzdHJpbmcgeyByZXR1cm4gXCJldmVudHNcIjsgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgTkFNRVNQQUNFUygpOnN0cmluZyB7IHJldHVybiBcIm5hbWVzcGFjZXNcIjsgfVxyXG5cdFx0cHVibGljIHN0YXRpYyBnZXQgTk9ERVMoKTpzdHJpbmcgeyByZXR1cm4gXCJub2Rlc1wiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBQRVJTSVNURU5UX1ZPTFVNRVMoKTpzdHJpbmcgeyByZXR1cm4gXCJwZXJzaXN0ZW50dm9sdW1lc1wiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBQRVJTSVNURU5UX1ZPTFVNRV9DTEFJTVMoKTpzdHJpbmcgeyByZXR1cm4gXCJwZXJzaXN0ZW50dm9sdW1lY2xhaW1zXCI7IH1cclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFBPRFMoKTpzdHJpbmcgeyByZXR1cm4gXCJwb2RzXCI7IH1cclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFJFUExJQ0FUSU9OX0NPTlRST0xMRVJTKCk6c3RyaW5nIHsgcmV0dXJuIFwicmVwbGljYXRpb25jb250cm9sbGVyc1wiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBSRVNPVVJDRV9RVU9UQVMoKTpzdHJpbmcgeyByZXR1cm4gXCJyZXNvdXJjZXF1b3Rhc1wiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBPQVVUSF9DTElFTlRTKCk6c3RyaW5nIHsgcmV0dXJuIFwib2F1dGhjbGllbnRzXCI7IH1cclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFNFQ1JFVFMoKTpzdHJpbmcgeyByZXR1cm4gXCJzZWNyZXRzXCI7IH1cclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFNFUlZJQ0VTKCk6c3RyaW5nIHsgcmV0dXJuIFwic2VydmljZXNcIjsgfVxyXG5cdFx0cHVibGljIHN0YXRpYyBnZXQgU0VSVklDRV9BQ0NPVU5UUygpOnN0cmluZyB7IHJldHVybiBcInNlcnZpY2VhY2NvdW50c1wiOyB9XHJcblxyXG5cdFx0cHVibGljIHN0YXRpYyBnZXQgVEVNUExBVEVTKCk6c3RyaW5nIHsgcmV0dXJuIFwidGVtcGxhdGVzXCI7IH1cclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFJPVVRFUygpOnN0cmluZyB7IHJldHVybiBcInJvdXRlc1wiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBCVUlMRF9DT05GSUdTKCk6c3RyaW5nIHsgcmV0dXJuIFwiYnVpbGRjb25maWdzXCI7IH1cclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IEJVSUxEUygpOnN0cmluZyB7IHJldHVybiBcImJ1aWxkc1wiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBERVBMT1lNRU5UX0NPTkZJR1MoKTpzdHJpbmcgeyByZXR1cm4gXCJkZXBsb3ltZW50Y29uZmlnc1wiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBJTUFHRV9TVFJFQU1TKCk6c3RyaW5nIHsgcmV0dXJuIFwiaW1hZ2VzdHJlYW1zXCI7IH1cclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFBPTElDSUVTKCk6c3RyaW5nIHsgcmV0dXJuIFwicG9saWNpZXNcIjsgfVxyXG5cdFx0cHVibGljIHN0YXRpYyBnZXQgUE9MSUNZX0JJTkRJTkdTKCk6c3RyaW5nIHsgcmV0dXJuIFwicG9saWN5YmluZGluZ3NcIjsgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgUFJPSkVDVFMoKTpzdHJpbmcgeyByZXR1cm4gXCJwcm9qZWN0c1wiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBST0xFX0JJTkRJTkdTKCk6c3RyaW5nIHsgcmV0dXJuIFwicm9sZWJpbmRpbmdzXCI7IH1cclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFJPTEVTKCk6c3RyaW5nIHsgcmV0dXJuIFwicm9sZXNcIjsgfVxyXG5cdH1cclxuXHJcbiAgZXhwb3J0IGNsYXNzIE5hbWVzcGFjZWRUeXBlcyB7XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBrOHNUeXBlcygpOkFycmF5PHN0cmluZz4ge1xyXG4gICAgICByZXR1cm4gW1xyXG4gICAgICAgIFdhdGNoVHlwZXMuRU5EUE9JTlRTLFxyXG4gICAgICAgIFdhdGNoVHlwZXMuRVZFTlRTLFxyXG4gICAgICAgIFdhdGNoVHlwZXMuTk9ERVMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5QRVJTSVNURU5UX1ZPTFVNRVMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5QRVJTSVNURU5UX1ZPTFVNRV9DTEFJTVMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5QT0RTLFxyXG4gICAgICAgIFdhdGNoVHlwZXMuUkVQTElDQVRJT05fQ09OVFJPTExFUlMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5SRVNPVVJDRV9RVU9UQVMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5QRVJTSVNURU5UX1ZPTFVNRVMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5TRUNSRVRTLFxyXG4gICAgICAgIFdhdGNoVHlwZXMuU0VSVklDRVMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5TRVJWSUNFX0FDQ09VTlRTXHJcbiAgICAgIF07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBvc1R5cGVzKCk6QXJyYXk8c3RyaW5nPiB7XHJcbiAgICAgIHJldHVybiBbXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5URU1QTEFURVMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5CVUlMRF9DT05GSUdTLFxyXG4gICAgICAgIFdhdGNoVHlwZXMuUk9VVEVTLFxyXG4gICAgICAgIFdhdGNoVHlwZXMuQlVJTERTLFxyXG4gICAgICAgIFdhdGNoVHlwZXMuQlVJTERfQ09ORklHUyxcclxuICAgICAgICBXYXRjaFR5cGVzLkRFUExPWU1FTlRfQ09ORklHUyxcclxuICAgICAgICBXYXRjaFR5cGVzLklNQUdFX1NUUkVBTVMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5PQVVUSF9DTElFTlRTLFxyXG4gICAgICAgIFdhdGNoVHlwZXMuUE9MSUNJRVMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5QT0xJQ1lfQklORElOR1MsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5QUk9KRUNUUyxcclxuICAgICAgICAvL1dhdGNoVHlwZXMuUk9MRV9CSU5ESU5HUyxcclxuICAgICAgICAvL1dhdGNoVHlwZXMuUk9MRVNcclxuICAgICAgXTtcclxuICAgIH1cclxuICB9XHJcblx0XHJcblx0ZXhwb3J0IGNsYXNzIFdhdGNoQWN0aW9ucyB7XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBBTlkoKTpzdHJpbmcgeyByZXR1cm4gXCIqXCI7IH1cclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IEFEREVEKCk6c3RyaW5nIHsgcmV0dXJuIFwiQURERURcIjsgfVxyXG5cdFx0cHVibGljIHN0YXRpYyBnZXQgTU9ESUZJRUQoKTpzdHJpbmcgeyByZXR1cm4gXCJNT0RJRklFRFwiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBERUxFVEVEKCk6c3RyaW5nIHsgcmV0dXJuIFwiREVMRVRFRFwiOyB9XHJcblx0fVxyXG5cdFxyXG5cdGV4cG9ydCBpbnRlcmZhY2UgT2JqZWN0TWFwIHtcclxuXHRcdFt1aWQ6c3RyaW5nXTogYW55O1x0XHRcclxuXHR9XHJcblx0XHJcblx0ZXhwb3J0IGludGVyZmFjZSBXYXRjaGVyU2VydmljZSB7XHJcblx0XHRoYXNXZWJTb2NrZXQ6IGJvb2xlYW47XHJcblx0XHRhZGRDdXN0b21pemVyOiAodHlwZTogc3RyaW5nLCBjdXN0b21pemVyOiAob2JqOmFueSkgPT4gdm9pZCkgPT4gdm9pZDtcclxuXHRcdGdldFR5cGVzOiAoKSA9PiBBcnJheTxzdHJpbmc+O1xyXG5cdFx0Z2V0TmFtZXNwYWNlOiAoKSA9PiBzdHJpbmc7XHJcblx0XHRzZXROYW1lc3BhY2U6IChuYW1lc3BhY2U6IHN0cmluZykgPT4gdm9pZDtcclxuXHRcdGdldE9iamVjdHM6ICh0eXBlOiBzdHJpbmcpID0+IEFycmF5PGFueT47XHJcblx0XHRnZXRPYmplY3RNYXA6ICh0eXBlOiBzdHJpbmcpID0+IE9iamVjdE1hcDtcclxuXHRcdGFkZEFjdGlvbjogKHR5cGU6IHN0cmluZywgYWN0aW9uOiBzdHJpbmcsIGZuOiAob2JqOmFueSkgPT4gdm9pZCkgPT4gdm9pZDtcclxuXHRcdHJlZ2lzdGVyTGlzdGVuZXI6IChmbjoob2JqZWN0czpPYmplY3RNYXApID0+IHZvaWQpID0+IHZvaWQ7XHJcbiAgICByZWdpc3RlckN1c3RvbVVybEZ1bmN0aW9uOiAoa2luZDpzdHJpbmcsIHVybDooa2luZDpzdHJpbmcpID0+IHN0cmluZykgPT4gdm9pZDtcclxuXHR9XHJcblxyXG4gIGV4cG9ydCBpbnRlcmZhY2UgS3ViZVBvZCB7XHJcbiAgICBpZDpzdHJpbmc7XHJcbiAgICBuYW1lc3BhY2U6c3RyaW5nO1xyXG4gICAgbWV0YWRhdGE7XHJcbiAgICAkcmVwbGljYXM6IG51bWJlcjtcclxuICB9XHJcblxyXG5cdFxyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4va3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuICBleHBvcnQgdmFyIGhvc3RQb3J0cyA9W107XHJcblxyXG4gIC8qKlxyXG4gICAqIFNvcnRzIHRoZSB0aGUgaXAgZmllbGRcclxuICAgKlxyXG4gICAqIEBwYXJhbSBpcCB0aGUgaXAgc3VjaCBhcyAnMTAuMS4yLjEzJ1xyXG4gICAqIEByZXR1cm5zIHthbnl9XHJcbiAgICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHNvcnRCeVBvZElwKGlwKSA6IGFueSB7XHJcbiAgICAvLyBpIGd1ZXNzIHRoZXJlIGlzIG1heWJlIG5pY2VyIHdheXMgb2Ygc29ydCB0aGlzIHdpdGhvdXQgcGFyc2luZyBhbmQgc2xpY2luZ1xyXG4gICAgdmFyIHJlZ2V4ID0gLyhcXGR7MSwzfSlcXC4oXFxkezEsM30pXFwuKFxcZHsxLDN9KVxcLihcXGR7MSwzfSkvO1xyXG4gICAgdmFyIGdyb3VwcyA9IHJlZ2V4LmV4ZWMoaXApO1xyXG4gICAgaWYgKGFuZ3VsYXIuaXNEZWZpbmVkKGdyb3VwcykpIHtcclxuICAgICAgdmFyIGcxID0gKFwiMDBcIiArIGdyb3Vwc1sxXSkuc2xpY2UoLTMpO1xyXG4gICAgICB2YXIgZzIgPSAoXCIwMFwiICsgZ3JvdXBzWzJdKS5zbGljZSgtMyk7XHJcbiAgICAgIHZhciBnMyA9IChcIjAwXCIgKyBncm91cHNbM10pLnNsaWNlKC0zKTtcclxuICAgICAgdmFyIGc0ID0gKFwiMDBcIiArIGdyb3Vwc1s0XSkuc2xpY2UoLTMpO1xyXG4gICAgICB2YXIgYW5zd2VyID0gZzEgKyBnMiArIGczICsgZzQ7XHJcbiAgICAgIHJldHVybiBhbnN3ZXI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiByYW1kb21Qb3J0KCk6IG51bWJlcntcclxuICAgICB2YXIgaG9zdFBvcnQ9TWF0aC5mbG9vcigzMDAwMCtNYXRoLnJhbmRvbSgpKig2NTUzNS0zMDAwMCkpO1xyXG4gICAgIHdoaWxlKGhvc3RQb3J0cy5pbmRleE9mKGhvc3RQb3J0KSA9PT0gMCl7XHJcbiAgICAgICAgaG9zdFBvcnQgPSBNYXRoLmZsb29yKDMwMDAwK01hdGgucmFuZG9tKCkqKDY1NTM1LTMwMDAwKSk7XHJcbiAgICAgfVxyXG4gICAgIGhvc3RQb3J0cy5wdXNoKGhvc3RQb3J0KTtcclxuICAgICByZXR1cm4gaG9zdFBvcnRcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRSYW5kb21TdHJpbmcobGVuIDogbnVtYmVyKSA6IHN0cmluZ3tcclxuICAgICAgbGVuID0gbGVuIHx8IDMyO1xyXG4gICAgICB2YXIgJGNoYXJzID0gJ2FiY2RlZmhpamttbnByc3R3eHl6JzsgLy8g6buY6K6k5Y675o6J5LqG5a655piT5re35reG55qE5a2X56ymb09MbCw5Z3EsVnYsVXUsSTFcclxuICAgICAgdmFyIG1heFBvcyA9ICRjaGFycy5sZW5ndGg7XHJcbiAgICAgIHZhciBwd2QgPSAnJztcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgcHdkICs9ICRjaGFycy5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbWF4UG9zKSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHB3ZDtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBjbGFzcyByZXNvdXJjZVJDVGVtcGxhdGV7XHJcblxyXG4gICAgIHB1YmxpYyBpbWFnZT1cIm9yYWNsZTp1dGY4XCI7XHJcbiAgICAgcHVibGljIG5hbWVzID0gW1wib3JhZGF0YVwiXTtcclxuXHJcbiAgICAgcHVibGljIGNyZWF0ZVJDKE9iail7XHJcbiAgICAgICAgdmFyIGxhYmVscyA9IHtcclxuICAgICAgICAgICBcInN0eWxlXCI6IFwib3JhY2xlXCIsXHJcbiAgICAgICAgICAgXCJzdGF0dXNcIjogXCIwXCIsXHJcbiAgICAgICAgICAgXCJpc0V4dHJhY3RcIjogT2JqLmlzRXh0cmFjdCtcIlwiIHx8IFwiMFwiLFxyXG4gICAgICAgICAgIFwiaXNUYXJnZXRcIjogT2JqLmlzVGFyZ2V0XHJcbiAgICAgICAgfTtcclxuICAgICAgICBmb3IodmFyIGl0ZW0gaW4gT2JqLmxhYmVscylcclxuICAgICAgICAgICBsYWJlbHNbaXRlbV0gPSBPYmoubGFiZWxzW2l0ZW1dO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgIFwiYXBpVmVyc2lvblwiIDogIEt1YmVybmV0ZXMuZGVmYXVsdEFwaVZlcnNpb24sXHJcbiAgICAgICAgICAgXCJraW5kXCIgOiBcIlJlcGxpY2F0aW9uQ29udHJvbGxlclwiLFxyXG4gICAgICAgICAgIFwibWV0YWRhdGFcIiA6IHtcclxuICAgICAgICAgICAgICBcIm5hbWVcIiA6IE9iai5uYW1lLFxyXG4gICAgICAgICAgICAgIFwibGFiZWxzXCIgOiBsYWJlbHMsXHJcbiAgICAgICAgICAgICAgXCJhbm5vdGF0aW9uc1wiOiBPYmouYW5ub3RhdGlvbnNcclxuICAgICAgICAgICB9LFxyXG4gICAgICAgICAgIFwic3BlY1wiIDoge1xyXG4gICAgICAgICAgICAgIHJlcGxpY2FzIDogT2JqLnJlcGxpY2FzIHx8IDEsXHJcbiAgICAgICAgICAgICAgXCJ0ZW1wbGF0ZVwiIDogdGhpcy5jcmVhdGVUZW1wbGF0ZShPYmopXHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICB9XHJcblxyXG4gICAgIHB1YmxpYyBjcmVhdGVWb2x1bWVNb3VudHMoKXtcclxuICAgICAgICB2YXIgdm9sdW1lTW91bnRzID0gW107XHJcbiAgICAgICAgZm9yKHZhciBpdGVtIGluIHRoaXMubmFtZXMpe1xyXG4gICAgICAgICAgIGlmKHRoaXMubmFtZXNbaXRlbV0gPT09ICdmbGFzaC1yZWNvdmVyeS1hcmVhJylcclxuICAgICAgICAgICAgICB2b2x1bWVNb3VudHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgXCJuYW1lXCIgOiB0aGlzLm5hbWVzW2l0ZW1dLFxyXG4gICAgICAgICAgICAgICAgIFwibW91bnRQYXRoXCIgOiBcIi9vcHQvb3JhY2xlL2FwcC9mbGFzaF9yZWNvdmVyeV9hcmVhXCJcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgdm9sdW1lTW91bnRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgIFwibmFtZVwiIDogdGhpcy5uYW1lc1tpdGVtXSxcclxuICAgICAgICAgICAgICAgICBcIm1vdW50UGF0aFwiIDogXCIvb3B0L29yYWNsZS9hcHAvXCIgKyB0aGlzLm5hbWVzW2l0ZW1dXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2b2x1bWVNb3VudHM7XHJcbiAgICAgfVxyXG5cclxuICAgICBwdWJsaWMgY3JlYXRlVm9sdW1lcyhyb290UGF0aCA6c3RyaW5nKXtcclxuICAgICAgICB2YXIgdm9sdW1lcyA9IFtdO1xyXG4gICAgICAgIGZvcih2YXIgaXRlbSBpbiB0aGlzLm5hbWVzKXtcclxuICAgICAgICAgICAgaWYodGhpcy5uYW1lc1tpdGVtXSA9PT0gJ2ZsYXNoLXJlY292ZXJ5LWFyZWEnKVxyXG4gICAgICAgICAgICAgICB2b2x1bWVzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICBcIm5hbWVcIiA6IHRoaXMubmFtZXNbaXRlbV0sXHJcbiAgICAgICAgICAgICAgICAgIFwiaG9zdFBhdGhcIiA6e1xyXG4gICAgICAgICAgICAgICAgICAgICAgXCJwYXRoXCIgOiByb290UGF0aCArIFwiZmxhc2hfcmVjb3ZlcnlfYXJlYVwiXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgdm9sdW1lcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgXCJuYW1lXCIgOiB0aGlzLm5hbWVzW2l0ZW1dLFxyXG4gICAgICAgICAgICAgICAgICBcImhvc3RQYXRoXCIgOntcclxuICAgICAgICAgICAgICAgICAgICAgIFwicGF0aFwiIDogcm9vdFBhdGggKyB0aGlzLm5hbWVzW2l0ZW1dXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2b2x1bWVzO1xyXG4gICAgIH1cclxuXHJcbiAgICAgcHVibGljIGNyZWF0ZUNvbnRhaW5lcnMoT2JqKXtcclxuICAgICAgICB2YXIgY29udGFpbmVycyA9IFtdO1xyXG4gICAgICAgIGNvbnRhaW5lcnMucHVzaChcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgXCJuYW1lXCIgOiBcIm9yYWNsZVwiLFxyXG4gICAgICAgICAgIFwiaW1hZ2VcIjogdGhpcy5pbWFnZSxcclxuICAgICAgICAgICBcImltYWdlUHVsbFBvbGljeVwiOiBcIklmTm90UHJlc2VudFwiLFxyXG4gICAgICAgICAgIFwiY29tbWFuZFwiOltcIi9hc3NldHMvZW50cnlwb2ludC5zaFwiXSxcclxuICAgICAgICAgICBcInBvcnRzXCI6IFtcclxuICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICBcImNvbnRhaW5lclBvcnRcIjogMTUyMSxcclxuICAgICAgICAgICAgIFwiaG9zdFBvcnRcIjogT2JqLnBvcnQgfHwgcmFtZG9tUG9ydCgpXHJcbiAgICAgICAgICAgfV0sXHJcbiAgICAgICAgICAgXCJ2b2x1bWVNb3VudHNcIiA6IHRoaXMuY3JlYXRlVm9sdW1lTW91bnRzKClcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gY29udGFpbmVyc1xyXG4gICAgIH1cclxuXHJcbiAgICAgcHVibGljIGNyZWF0ZVRlbXBsYXRlKE9iail7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgXCJtZXRhZGF0YVwiOlxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgIC8vXCJuYW1lXCI6IE9iai5uYW1lLFxyXG4gICAgICAgICAgICAgICBcImxhYmVsc1wiOiBPYmoubGFiZWxzXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwic3BlY1wiIDoge1xyXG4gICAgICAgICAgICAgICAgXCJ0ZXJtaW5hdGlvbkdyYWNlUGVyaW9kU2Vjb25kc1wiIDogMCxcclxuICAgICAgICAgICAgICAgIFwiY29udGFpbmVyc1wiIDogIHRoaXMuY3JlYXRlQ29udGFpbmVycyhPYmopLFxyXG4gICAgICAgICAgICAgICAgXCJ2b2x1bWVzXCIgOiAgdGhpcy5jcmVhdGVWb2x1bWVzKE9iai5wYXRoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBsYWJlbFRvQ2hpbmVzZShsYWJlbHMpe1xyXG4gICAgIHZhciBhbnN3ZXIgPSB7fTtcclxuICAgICBhbmd1bGFyLmZvckVhY2gobGFiZWxzLCh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgYW5zd2VyW2tleV0gPSBsYWJlbENoYW5nZVRvQ2hpbmVzKHZhbHVlLCBrZXkpO1xyXG4gICAgIH0pO1xyXG4gICAgIHJldHVybiBhbnN3ZXJcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiAgZmluZFNhbWVOYW1lUmVwbGljYXRpb25Db250cm9sbGVycyhyZXBsaWNhdGlvbkNvbnRyb2xsZXJzLCBuYW1lKXtcclxuICAgICAgdmFyIG5hbWVzID0gW107XHJcbiAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlcnMuZm9yRWFjaCgocmMpID0+IHtcclxuICAgICAgICAgIHZhciByY05hbWUgPSBnZXROYW1lKHJjKTtcclxuICAgICAgICAgIGlmKHJjTmFtZS5pbmRleG9mKG5hbWUpICE9PSAtMSlcclxuICAgICAgICAgICAgICBuYW1lcy5wdXNoKHJjTmFtZSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYobmFtZXMubGVuZ3RoID09PSAwKXtcclxuICAgICAgICAgIHJldHVybiBuYW1lICsgXCJfMVwiO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICAgIHZhciBtYXggPSAwO1xyXG4gICAgICAgICAgbmFtZXMuZm9yRWFjaCgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgIHZhciBhbnN3ZXIgPSB2YWx1ZS5zcGxpdChcIl9cIik7XHJcbiAgICAgICAgICAgICB2YXIga2V5ID0gcGFyc2VJbnQoYW5zd2VyWzFdKTtcclxuICAgICAgICAgICAgIGlmKG1heCA8IGtleSlcclxuICAgICAgICAgICAgICAgIG1heCA9IGtleTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuIG5hbWUgKyAobWF4KzEpO1xyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gaXNGaWx0ZXJSQyhyYyl7XHJcbiAgICAgIHZhciBhbnN3ZXIgPSBmYWxzZTtcclxuICAgICAgYW5ndWxhci5mb3JFYWNoKENvcmUucGF0aEdldChyYywgW1wibWV0YWRhdGFcIiwgXCJsYWJlbHNcIl0pLCh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgICBpZihrZXkgPT09ICdpc1RhcmdldCcgJiYgdmFsdWUgPT09ICd0cnVlJyl7XHJcbiAgICAgICAgICAgICBhbnN3ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGFuc3dlcjtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBpc0luY2x1ZGUocmNzLCByYyl7XHJcbiAgICAgZm9yKHZhciBpIGluIHJjcyl7XHJcbiAgICAgICAgIGlmKGdldE5hbWUocmNzW2ldKSA9PT0gZ2V0TmFtZShyYykpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgIH1cclxuICAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gbGFiZWxDaGFuZ2VUb0NoaW5lcyh2YWx1ZTpzdHJpbmcsIGtleTpzdHJpbmcpe1xyXG4gIFx0dmFyIHRydWVWYWx1ZSA9ICcnO1xyXG4gIFx0c3dpdGNoKGtleSl7XHJcbiAgXHRcdGNhc2UgJ3R5cGUnOlxyXG4gIFx0XHQgICBpZih2YWx1ZSA9PT0gJzAxJylcclxuICBcdFx0ICAgXHQgIHRydWVWYWx1ZSA9ICfotKLmlL8nO1xyXG4gIFx0XHQgICBlbHNlIGlmKHZhbHVlID09PSAnMDInKVxyXG4gIFx0XHQgICAgICB0cnVlVmFsdWUgPSAn56S+5L+dJztcclxuICBcdFx0ICAgZWxzZVxyXG4gIFx0XHQgICBcdCAgdHJ1ZVZhbHVlID0gdmFsdWU7XHJcbiAgXHRcdCAgIGJyZWFrO1xyXG4gIFx0XHRjYXNlICdiYXRjaCc6XHJcbiAgXHQgICAgICAgaWYodmFsdWUgPT09ICdBJylcclxuICBcdCAgICAgICBcdCAgdHJ1ZVZhbHVlID0gJ+aJueasoUEnO1xyXG4gIFx0ICAgICAgIGVsc2UgaWYodmFsdWUgPT09ICdCJylcclxuICBcdCAgICAgICBcdCAgdHJ1ZVZhbHVlID0gJ+aJueasoUInO1xyXG4gIFx0ICAgICAgIGVsc2VcclxuICBcdCAgICAgICBcdCAgdHJ1ZVZhbHVlID0gdmFsdWU7XHJcblxyXG4gIFx0XHQgICBicmVhaztcclxuICBcdFx0Y2FzZSAncmVnaW9uJzpcclxuICBcdFx0ICAgdHJ1ZVZhbHVlID0gS3ViZXJuZXRlcy5nZXRDb3VudHlCeUNvZGUodmFsdWUpO1xyXG4gIFx0XHQgICBicmVhaztcclxuICBcdFx0Y2FzZSAnc3lzdGVtJzpcclxuICBcdFx0ICAgdHJ1ZVZhbHVlID0gS3ViZXJuZXRlcy5nZXRTeXN0ZW1OYW1lQnlJZCh2YWx1ZSk7XHJcbiAgXHRcdCAgIGJyZWFrO1xyXG4gIFx0XHRjYXNlICd2ZXJzaW9uJzpcclxuICBcdFx0ICAgdmFyIHJlZz0gbmV3IFJlZ0V4cCgnXlswLTldJCcpLmV4ZWModmFsdWUpO1xyXG4gIFx0XHQgICBpZihyZWcpXHJcbiAgXHRcdCAgICAgICB0cnVlVmFsdWUgPSAn54mI5pysJyArIHJlZ1swXTtcclxuICBcdFx0ICAgZWxzZVxyXG4gIFx0XHQgICBcdCAgIHRydWVWYWx1ZSA9IHZhbHVlO1xyXG4gIFx0ICAgICAgIGJyZWFrO1xyXG4gIFx0ICAgIGNhc2UgJ2lzVGFyZ2V0JzpcclxuICBcdCAgICAgICBpZih2YWx1ZSA9PT0gJ3RydWUnKVxyXG4gIFx0ICAgICAgIFx0ICAgdHJ1ZVZhbHVlID0gJ+axh+aAu+aVsOaNruW6kyc7XHJcbiAgXHQgICAgICAgZWxzZVxyXG4gIFx0ICAgICAgICAgICB0cnVlVmFsdWUgPSB2YWx1ZTtcclxuICBcdCAgICAgICBicmVhaztcclxuICBcdCAgICBkZWZhdWx0OlxyXG4gIFx0ICAgICAgIHRydWVWYWx1ZSA9IHZhbHVlO1xyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIHRydWVWYWx1ZTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjaGVja0ZvckV4aXQocmVwbGljYXRpb25Db250cm9sbGVyczpBcnJheTxLdWJlUG9kPiwgc2VsZWN0SXRlbSl7XHJcbiAgICBmb3IodmFyIGluZGV4IGluIHJlcGxpY2F0aW9uQ29udHJvbGxlcnMpIHtcclxuICAgICAgdmFyIHJlcGxpY2FzID0gcmVwbGljYXRpb25Db250cm9sbGVyc1tpbmRleF07XHJcbiAgICAgIGlmKGdldE5hbWUocmVwbGljYXMpPT1zZWxlY3RJdGVtLl9rZXkgJiYgZ2V0QW5ub3RhdGlvblZhbHVlQnlrZXkocmVwbGljYXMsXCJ5ZWFyXCIpID09IHNlbGVjdEl0ZW1bXCJ5ZWFyXCJdKVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlOyBcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdldEFubm90YXRpb25WYWx1ZUJ5a2V5KHJlcGxpY2F0aW9uQ29udHJvbGxlciwga2V5OnN0cmluZyl7XHJcbiAgICB2YXIgYW5ub3RhdGlvbnMgPSBnZXRBbm5vdGF0aW9ucyhyZXBsaWNhdGlvbkNvbnRyb2xsZXIpOyAgIFxyXG4gICAgaWYoYW5ub3RhdGlvbnMgJiYgYW5ub3RhdGlvbnMgIT0gdW5kZWZpbmVkKXtcclxuICAgICAgcmV0dXJuIGFubm90YXRpb25zW2tleV07XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIC8qXHJcbiAgICDlkK/liqhvcmFjbGXml7bmo4Dmn6XmmK/lkKbmraPlnKjov4Hnp7tcclxuICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBjaGVja0ZvckNyZWF0ZU9yYWNsZSh0cmFuc2ZlclRhc2tzOkFycmF5PGFueT4sIHNlbGVjdEl0ZW1zOkFycmF5PGFueT4pe1xyXG4gICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgYW5ndWxhci5mb3JFYWNoKHNlbGVjdEl0ZW1zLCAoaXRlbSkgPT4ge1xyXG4gICAgICBpZihjaGVja0ZvckV4aXRUYXNrKHRyYW5zZmVyVGFza3MsIGl0ZW0pKVxyXG4gICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY2hlY2tGb3JFeGl0VGFzayh0cmFuc2ZlclRhc2tzOkFycmF5PGFueT4sIHNlbGVjdEl0ZW0pe1xyXG4gICAgZm9yKHZhciBpbmRleCBpbiB0cmFuc2ZlclRhc2tzKXtcclxuICAgICAgdmFyIHRhc2sgPSB0cmFuc2ZlclRhc2tzW2luZGV4XTsgICAgICAgICBcclxuICAgICAgaWYodGFza1tcIl9rZXlcIl0gPT0gc2VsZWN0SXRlbVtcIl9rZXlcIl0gICYmIHNlbGVjdEl0ZW1bXCJ5ZWFyXCJdID09IHRhc2subGFiZWxzLmRhdGFZZWFyICl7XHJcbiAgICAgICAgaWYodGFzay5zdGF0dXMgPT0gMiB8fCB0YXNrLnN0YXR1cyA9PSAzKVxyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgIFxyXG4gICoqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBjaGVja0ZvckV4dHJhY3QocmVwbGljYXRpb25Db250cm9sbGVyczogQXJyYXk8YW55Pil7XHJcbiAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICBhbmd1bGFyLmZvckVhY2gocmVwbGljYXRpb25Db250cm9sbGVycywgKHJlcGxpY2FzKSA9PiB7XHJcbiAgICAgIHZhciBsYWJlbHMgPSBnZXRMYWJlbHMocmVwbGljYXMpO1xyXG4gICAgICBpZihsYWJlbHNbXCJpc0V4dHJhY3RcIl0gPT0gXCIxXCIpXHJcbiAgICAgICAgcmVzdWx0LnB1c2gocmVwbGljYXMpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGNoZWNrSXNTdGFydFN1Y2Nlc3MocmVwbGljYXRpb25Db250cm9sbGVyczogQXJyYXk8YW55Pil7XHJcbiAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICAgYW5ndWxhci5mb3JFYWNoKHJlcGxpY2F0aW9uQ29udHJvbGxlcnMsIChyZXBsaWNhcykgPT4ge1xyXG4gICAgICB2YXIgbGFiZWxzID0gZ2V0TGFiZWxzKHJlcGxpY2FzKTtcclxuICAgICAgaWYobGFiZWxzW1wic3RhdHVzXCJdICE9IFwiMlwiKVxyXG4gICAgICAgIHJlc3VsdC5wdXNoKHJlcGxpY2FzKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9O1xyXG5cclxuICAvKlxyXG4gICAg5qOA5p+l5pWw5o2u5ZCm5bey5oyC6L295L2/55So5oiW5q2j5Zyo6L+B56e744CCXHJcbiAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24gY2hlY2tGb3JNaWdyYXRpb24ocmVwbGljYXRpb25Db250cm9sbGVyczpBcnJheTxLdWJlUG9kPiwgdHJhbnNmZXJUYXNrczogQXJyYXk8YW55Piwgc2VsZWN0SXRlbTpBcnJheTxhbnk+LCB0eXBlOnN0cmluZyl7XHJcbiAgICB2YXIgbWVzc2FnZSA9IFwiXCI7ICAgIFxyXG4gICAgXHJcbiAgICBmb3IgKHZhciBpbmRleCBpbiBzZWxlY3RJdGVtKSB7XHJcbiAgICAgIHZhciBpdGVtID0gc2VsZWN0SXRlbVtpbmRleF07XHJcbiAgICBcclxuICAgICAgdmFyIGlkID0gbnVsbDtcclxuICAgICAgaWYodHlwZSA9PSAnbWFuYWdlcicpXHJcbiAgICAgICAgaWQgPSBpdGVtLmlkO1xyXG4gICAgICBpZih0eXBlID09ICd2ZXJpZnknKVxyXG4gICAgICAgIGlkID0gaXRlbS5kYXRhSWRcclxuICAgIFxyXG4gICAgICAvKlxyXG4gICAgICAgIOajgOafpei/geenu+aWh+S7tuaYr+WQpuato+WcqOi/geenu1xyXG4gICAgICAqL1xyXG4gIFxyXG4gICAgICBmb3IoaSBpbiB0cmFuc2ZlclRhc2tzKXsgICAgICAgICAgXHJcbiAgICAgICAgLyppZih0cmFuc2ZlclRhc2tzW2ldW1wiX2tleVwiXSA9PSBpdGVtW1wiX2tleVwiXSAmJiAodHJhbnNmZXJUYXNrc1tpXVtcInN0YXR1c1wiXSA9PSBcIjFcIiB8fCB0cmFuc2ZlclRhc2tzW2ldW1wic3RhdHVzXCJdID09IFwiMFwiKSAmJiBpdGVtW1wieWVhclwiXSA9PSB0cmFuc2ZlclRhc2tzW2ldLmxhYmVscy5kYXRhWWVhcil7XHJcbiAgICAgICAgICBtZXNzYWdlID0gXCLmlbDmja7mraPlnKjov4Hnp7tcIlxyXG4gICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XHJcbiAgICAgICAgfSovXHJcbiAgICAgIFxyXG4gICAgICAgIGlmKHRyYW5zZmVyVGFza3NbaV0uZmtpZCA9PSBpZCAmJiAodHJhbnNmZXJUYXNrc1tpXVtcInN0YXR1c1wiXSA9PSBcIjFcIiB8fCB0cmFuc2ZlclRhc2tzW2ldW1wic3RhdHVzXCJdID09IFwiMFwiKSl7XHJcbiAgICAgICAgICBtZXNzYWdlID0gXCLmlbDmja7mraPlnKjov4Hnp7tcIlxyXG4gICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvKipcclxuICAgICAgICDmlbDmja7mmK/lkKblnKjng63ljLrvvIzlpoLmnpzlnKjliJnpnIDopoHliKTmlq3mlbDmja7mmK/lkKblt7LlkK/liqhcclxuICAgICAgKi9cclxuICAgICAgaWYoaXRlbVtcIm1hcmtcIl0gPT0gMSlcclxuICAgICAgICBjb250aW51ZTsgXHJcblxyXG4gICAgICAvKlxyXG4gICAgICAgIOajgOafpei/geenu+aWh+S7tuaYr+WQpuW3suaMgui9veS9v+eUqFxyXG4gICAgICAqL1xyXG4gICAgICBmb3IgKHZhciBpIGluIHJlcGxpY2F0aW9uQ29udHJvbGxlcnMpIHtcclxuICAgICAgICB2YXIgbGFiZWxzID0gZ2V0TGFiZWxzKHJlcGxpY2F0aW9uQ29udHJvbGxlcnNbaV0pOyAgICAgICBcclxuICAgICAgICBpZihnZXROYW1lKHJlcGxpY2F0aW9uQ29udHJvbGxlcnNbaV0pID09IGl0ZW0uX2tleSAmJiBnZXRBbm5vdGF0aW9uVmFsdWVCeWtleShyZXBsaWNhdGlvbkNvbnRyb2xsZXJzW2ldLFwieWVhclwiKSA9PSBpdGVtW1wieWVhclwiXSl7XHJcbiAgICAgICAgICBtZXNzYWdlID0gXCLmlbDmja7mraPlnKjkvb/nlKhcIjtcclxuICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIHJldHVybiBtZXNzYWdlO1xyXG4gIH1cclxuXHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBlbGltaW5hdGVDaGVjaEJveENsaWNrKCl7XHJcbiAgICB2YXIgZWxlbWVudCA9ICQoXCIjdGFibGVDb25maWcgPiB0aGVhZCA+IHRyIGlucHV0OmNoZWNrYm94XCIpOyAgIFxyXG4gICAgaWYoZWxlbWVudC5pcygnOmNoZWNrZWQnKSlcclxuICAgICAgZWxlbWVudC5jbGljaygpOyAgICBcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICDmmK/lkKblt7LlrZjlnKjlvZPliY1cclxuICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBhbHJlYWR5RXhpdEluRm9sZGVyKHNlbGVjdGVkSXRlbXM6IEFycmF5PGFueT4sIHNlbGVjdE5vZGUpeyAgICBcclxuICAgIHZhciBjaGlsZE5vZGVzID0gc2VsZWN0Tm9kZS5jaGlsZE5vZGVzO1xyXG4gICAgZm9yKHZhciBpIGluIHNlbGVjdGVkSXRlbXMpIHtcclxuICAgICAgIHZhciBpdGVtTmFtZSA9IHNlbGVjdGVkSXRlbXNbaV0ucmVnaW9uYWxpc21Db2RlICsgXCJfXCIgKyBzZWxlY3RlZEl0ZW1zW2ldLnN5c3RlbUNvZGU7XHJcbiAgICAgICBmb3IgKHZhciBqIGluIGNoaWxkTm9kZXMpIHtcclxuICAgICAgICAgaWYoY2hpbGROb2Rlc1tqXS5uYW1lID09IGl0ZW1OYW1lKXtcclxuICAgICAgICAgICAgdmFyIGNoaWxkcmVucyA9IGNoaWxkTm9kZXNbal0uY2hpbGROb2RlcztcclxuICAgICAgICAgICAgZm9yKHZhciBrIGluIGNoaWxkcmVucylcclxuICAgICAgICAgICAgICBpZihjaGlsZHJlbnNba10ubmFtZSA9PSBzZWxlY3RlZEl0ZW1zW2ldLmRhdGFWZXJzaW9uKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgIH1cclxuICAgICB9IFxyXG4gICAgIHJldHVybiBmYWxzZTtcclxuICB9ICBcclxufSIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxubW9kdWxlIENvbmZpZ3N7XHJcblx0ZXhwb3J0IGZ1bmN0aW9uIGN1c3RvbUFsZXJ0KHRpdGxlLCBjb250ZW50LCBmdW5jLCBjYW5jZWwsIGZvY3VzLCBpY29uKXtcclxuXHRcdC8qXHRcdFxyXG5cdCAgICAgICAg6Ieq5a6a5LmJIGFsZXJ05qGGXHJcblx0ICAgICAgICB0aXRsZSA6XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxyXG5cdCAgICAgICAgdGV4dCAgOlxyXG5cdCAgICAgICAgZnVuYyAgOlxyXG5cdCAgICAgICAgY2FuY2VsOlxyXG5cdCAgICAgICAgZm9jdXMgOlxyXG5cdCAgICAgICAgaWNvbiAgOiAgICAgXHJcbiAgICAgICAgKi9cclxuICAgICAgICBpY29uID0gXCIuLi8uLi8uLi9uZXcvaW1hZ2VzL21zZ2JveF9cIiArIGljb24gKyBcIi5wbmdcIjtcclxuICAgICAgICBjcmVhdGVfbWFzaygpO1xyXG4gICAgICAgIHZhciB0ZW1wID0gXCI8ZGl2IGNsYXNzPVxcXCJjdXN0b20tYWxlcnRcXFwiID5cIiBcclxuICAgICAgICBcdCsgXCI8ZGl2IGNsYXNzPVxcXCJjdXN0b20tYWxlcnQtdGl0bGVcXFwiPlwiICsgdGl0bGUgKyBcIjwvZGl2PlwiIFxyXG4gICAgICAgIFx0KyBcIjx0YWJsZSAgY2xhc3M9XFxcImN1c3RvbS1hbGVydC1ib2R5XFxcIj48dHI+PHRkIGNsYXNzPVxcXCJjdXN0b20tYWxlcnQtdGRcXFwiPjxpbWcgc3JjPVxcXCJcIiBcclxuICAgICAgICBcdCsgaWNvbiArIFwiXFxcIiBjbGFzcz1cXFwiY3VzdG9tLWFsZXJ0LWltZ1xcXCI+PC90ZD5cIiBcclxuICAgICAgICBcdCsgXCI8dGQgPjxkaXYgY2Fsc3M9XFxcImN1c3RvbS1hbGVydC1jb250ZW50XFxcIj5cIiBcclxuICAgICAgICBcdCsgY29udGVudCArIFwiPC9kaXY+PC90ZD48L3RyPjwvdGFibGU+XCIgXHJcbiAgICAgICAgXHQrIFwiPGRpdiBjbGFzcz1cXFwiY3VzdG9tLWFsZXJ0LWJvdHRvbVxcXCI+PGlucHV0IHR5cGU9J2J1dHRvbicgXCIgXHJcbiAgICAgICAgXHQrIFwiIGNsYXNzPVxcXCJjdXN0b20tYWxlcnQtb2tcXFwiIHZhbHVlPSfnoa7orqQnIGlkPVxcXCJtc2djb25maXJtYlxcXCIgb25jbGljaz1cXFwiQ29uZmlncy5yZW1vdmUoKTtcIiBcclxuICAgICAgICBcdCsgZnVuYyArIFwiO1xcXCI+XCI7XHJcbiAgICAgICAgaWYgKG51bGwgIT0gY2FuY2VsKSB7XHJcbiAgICAgICAgICAgIHRlbXAgKz0gXCImbmJzcDsmbmJzcDsmbmJzcDs8aW5wdXQgdHlwZT0nYnV0dG9uJyBjbGFzcz1cXFwiY3VzdG9tLWFsZXJ0LWNhbmNlbFxcXCIgb25DbGljaz0nQ29uZmlncy5yZW1vdmUoKSc+XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRlbXAgKz0gXCI8L2Rpdj48L2Rpdj5cIjtcclxuXHJcbiAgICAgICAgY3JlYXRlX21zZ2JveCg0MDAsIDIwMCwgdGVtcCk7XHJcblxyXG4gICAgICAgIGlmIChmb2N1cyA9PSAwIHx8IGZvY3VzID09IFwiMFwiIHx8IG51bGwgPT0gZm9jdXMpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtc2djb25maXJtYlwiKS5mb2N1cygpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZm9jdXMgPT0gMSB8fCBmb2N1cyA9PSBcIjFcIikge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1zZ2NhbmNlbGJcIikuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0X3dpZHRoKCkgeyAgXHJcbiAgICAgICAgcmV0dXJuIChkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0KTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRfaGVpZ2h0KCkgeyAgICAgXHJcbiAgICAgICAgcmV0dXJuIChkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCArIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRfbGVmdCh3KSB7XHJcbiAgICAgICAgdmFyIGJ3ID0gZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aDtcclxuICAgICAgICB2YXIgYmggPSBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodDtcclxuICAgICAgICB3ID0gcGFyc2VGbG9hdCh3KTtcclxuICAgICAgICByZXR1cm4gKGJ3IC8gMiAtIHcgLyAyICsgZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0KTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRfdG9wKGgpIHtcclxuICAgICAgICB2YXIgYncgPSBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoO1xyXG4gICAgICAgIHZhciBiaCA9IGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgIGggPSBwYXJzZUZsb2F0KGgpO1xyXG4gICAgICAgIHJldHVybiAoYmggLyAyIC0gaCAvIDIgKyBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZV9tYXNrKCkgeyBcclxuICAgICAgICB2YXIgbWFzayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgICAgbWFzay5pZCA9IFwibWFza1wiO1xyXG4gICAgICAgIG1hc2suc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgICAgbWFzay5zdHlsZS5maWx0ZXIgPSBcInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYShzdHlsZT00LG9wYWNpdHk9MjUpXCI7IFxyXG4gICAgICAgIG1hc2suc3R5bGUub3BhY2l0eSA9IFwiMC40XCI7IFxyXG4gICAgICAgIG1hc2suc3R5bGUuYmFja2dyb3VuZCA9IFwiYmxhY2tcIjtcclxuICAgICAgICBtYXNrLnN0eWxlLnRvcCA9IFwiMHB4XCI7XHJcbiAgICAgICAgbWFzay5zdHlsZS5sZWZ0ID0gXCIwcHhcIjsgICAgICBcclxuICAgICAgICBtYXNrLnN0eWxlLndpZHRoID0gZ2V0X3dpZHRoKCkgKyBcInB4XCI7ICAgICAgIFxyXG4gICAgICAgIG1hc2suc3R5bGUuaGVpZ2h0ID0gZ2V0X2hlaWdodCgpICsgXCJweFwiO1xyXG4gICAgICAgIG1hc2suc3R5bGUuekluZGV4ID0gXCIxMDAwMDAwMDAwXCI7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtYXNrKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjcmVhdGVfbXNnYm94KHcsIGgsIHQpIHsgXHJcbiAgICAgICAgdmFyIGJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgICAgYm94LmlkID0gXCJtc2dib3hcIjtcclxuICAgICAgICBib3guc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgICAgYm94LnN0eWxlLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgICAgICBib3guc3R5bGUuaGVpZ2h0ID0gaCArIFwicHhcIjtcclxuICAgICAgICBib3guc3R5bGUub3ZlcmZsb3cgPSBcInZpc2libGVcIjtcclxuICAgICAgICBib3guaW5uZXJIVE1MID0gdDtcclxuICAgICAgICBib3guc3R5bGUuekluZGV4ID0gXCIxMDAwMDAwMDAxXCI7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChib3gpO1xyXG4gICAgICAgIHJlX3BvcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHJlX21hc2soKSB7XHJcbiAgICAgICAgdmFyIG1hc2sgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1hc2tcIik7XHJcbiAgICAgICAgaWYgKG51bGwgPT0gbWFzaykgcmV0dXJuO1xyXG4gICAgICAgIG1hc2suc3R5bGUud2lkdGggPSBnZXRfd2lkdGgoKSArIFwicHhcIjtcclxuICAgICAgICBtYXNrLnN0eWxlLmhlaWdodCA9IGdldF9oZWlnaHQoKSArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiByZV9wb3MoKSB7XHJcbiAgICAgICAgdmFyIGJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibXNnYm94XCIpO1xyXG4gICAgICAgIGlmIChudWxsICE9IGJveCkge1xyXG4gICAgICAgICAgICB2YXIgdyA9IGJveC5zdHlsZS53aWR0aDtcclxuICAgICAgICAgICAgdmFyIGggPSBib3guc3R5bGUuaGVpZ2h0O1xyXG4gICAgICAgICAgICBib3guc3R5bGUubGVmdCA9IGdldF9sZWZ0KHcpICsgXCJweFwiO1xyXG4gICAgICAgICAgICBib3guc3R5bGUudG9wID0gZ2V0X3RvcChoKSArIFwicHhcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZSgpIHtcclxuICAgICAgICB2YXIgbWFzayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWFza1wiKTtcclxuICAgICAgICB2YXIgbXNnYm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtc2dib3hcIik7XHJcbiAgICAgICAgaWYgKG51bGwgPT0gbWFzayAmJiBudWxsID09IG1zZ2JveCkgcmV0dXJuO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobWFzayk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChtc2dib3gpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHJlX3Nob3coKSB7XHJcbiAgICAgICAgcmVfcG9zKCk7XHJcbiAgICAgICAgcmVfbWFzaygpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGxvYWRfZnVuYygpIHtcclxuICAgICAgICB3aW5kb3cub25yZXNpemUgPSByZV9zaG93O1xyXG4gICAgICAgIHdpbmRvdy5vbnNjcm9sbCA9IHJlX3Nob3c7XHJcbiAgICB9XHRcclxufSIsIi8qXHJcbnJlYWQgYSBvYmplY3QgZnJvbSBqaWFuZ3N1IHByb3ZpbmNlICwgc3VjaCBhcyBuYW5qaW5nIHdpdGggc29tZSBpbmZvcm1hdGlvblxyXG7or7vlj5bmsZ/oi4/nmoTmn5DkuKrlnLDljLrnmoTkv6Hmga/vvIzku6Xlj4rns7vnu5/kv6Hmga9cclxuICovXHJcbm1vZHVsZSBLdWJlcm5ldGVze1xyXG5cdGV4cG9ydCB2YXIgc3lzdGVtX2FyciA9IFt7XCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566XXCIsXCJzeXNfaWRcIjpcIjFcIn0se1wic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeaUtue8tOeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIyXCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2lkXCI6XCIzXCJ9LHtcInN5c19uYW1lXCI6XCLotYTkuqfnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiNFwifSx7XCJzeXNfbmFtZVwiOlwi55So5Y+L6LSi5pS/57u85ZCI566h55CG5L+h5oGv57O757ufXCIsXCJzeXNfaWRcIjpcIjVcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi55So5Y+LQSsrXCIsXCJzeXNfaWRcIjpcIjZcIn0se1wic3lzX25hbWVcIjpcIua1puWPo+i0ouaUv+S4gOS9k+WMllwiLFwic3lzX2lkXCI6XCI3XCJ9LHtcInN5c19uYW1lXCI6XCLmoJbpnJ7ljLrotKLmlL/kuJrliqHkv6Hmga/nrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiOFwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLkuIDkvZPljJbns7vnu59cIixcInN5c19pZFwiOlwiOVwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG5LiA5L2T5YyW57O757ufXCIsXCJzeXNfaWRcIjpcIjEwXCJ9LHtcInN5c19uYW1lXCI6XCLmu6jmsZ/lvIDlj5HljLrotKLmlL/liIblsYBcIixcInN5c19pZFwiOlwiMTFcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5rGf5a6B57uP5rWO5oqA5pyv5byA5Y+R5Yy66LSi5pS/5YiG5bGAXCIsXCJzeXNfaWRcIjpcIjEyXCJ9LHtcInN5c19uYW1lXCI6XCLmsZ/lroHnp5Hlrablm63otKLmlL/liIblsYBcIixcInN5c19pZFwiOlwiMTNcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluezu+e7n1wiLFwic3lzX2lkXCI6XCIxNFwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCJBKyvotKLmlL/kuIDkvZPljJblubPlj7BcIixcInN5c19pZFwiOlwiMTVcIn0se1wic3lzX25hbWVcIjpcIumdnueojuezu+e7n1wiLFwic3lzX2lkXCI6XCIxNlwifSx7XCJzeXNfbmFtZVwiOlwi5LiA5L2T5YyW6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfaWRcIjpcIjE3XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuS4gOS9k+WMllwiLFwic3lzX2lkXCI6XCIxOFwifSx7XCJzeXNfbmFtZVwiOlwi5Zu95bqT6ZuG5Lit5pSv5LuY566h55CG5L+h5oGv57O757ufXCIsXCJzeXNfaWRcIjpcIjE5XCJ9LHtcInN5c19uYW1lXCI6XCLlm73lupPpm4bkuK3mlK/ku5hcIixcInN5c19pZFwiOlwiMjBcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X5Y+K6Z2e56iO57O757ufXCIsXCJzeXNfaWRcIjpcIjIxXCJ9LHtcInN5c19uYW1lXCI6XCLpm4bkuK3mlK/ku5jns7vnu59cIixcInN5c19pZFwiOlwiMjJcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIyM1wifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLbnvLTns7vnu59cIixcInN5c19pZFwiOlwiMjRcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluW5s+WPsFwiLFwic3lzX2lkXCI6XCIyNVwifSx7XCJzeXNfbmFtZVwiOlwi5a+M5rex6aKE566X5omn6KGMXCIsXCJzeXNfaWRcIjpcIjI2XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIueUqOWPi+mdnueojuWPiuelqOaNrlwiLFwic3lzX2lkXCI6XCIyN1wifSx7XCJzeXNfbmFtZVwiOlwi55So5Y+L6aKE566X5omn6KGMXCIsXCJzeXNfaWRcIjpcIjI4XCJ9LHtcInN5c19uYW1lXCI6XCLmsZ/oi4/nnIHotKLmlL/pooTnrpfmiafooYzns7vnu59cIixcInN5c19pZFwiOlwiMjlcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi55So5Y+L6YCa55So6L2v5Lu2XCIsXCJzeXNfaWRcIjpcIjMwXCJ9LHtcInN5c19uYW1lXCI6XCLogZTlj4vova/ku7Yv6YCa55So6LSi5YqhXCIsXCJzeXNfaWRcIjpcIjMxXCJ9LHtcInN5c19uYW1lXCI6XCLnlKjlj4tHUlBHLVU4UjEw6LSi5pS/566h55CG6L2v5Lu2XCIsXCJzeXNfaWRcIjpcIjMyXCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIueUqOWPi0dQUC1SMTDotKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19pZFwiOlwiMzNcIn0se1wic3lzX25hbWVcIjpcIuWvjOa3seWNj+mAmui0ouaUv+S4gOS9k+WMlueuoeeQhuS/oeaBr+ezu+e7n1wiLFwic3lzX2lkXCI6XCIzNFwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5Yqh57uf5LiA5qC4566X57O757ufXCIsXCJzeXNfaWRcIjpcIjM1XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuWFrOWFsei0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2lkXCI6XCIzNlwifSx7XCJzeXNfbmFtZVwiOlwiQSsr6LSi5pS/5LiA5L2T5YyW5L+h5oGv5bmz5Y+wXCIsXCJzeXNfaWRcIjpcIjM3XCJ9LHtcInN5c19uYW1lXCI6XCLmlrDkuK3lpKflhazlhbHotKLliqHnrqHnkIbova/ku7ZcIixcInN5c19pZFwiOlwiMzhcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5a+M5rex6LSi5pS/5LiA5L2T5YyW566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjM5XCJ9LHtcInN5c19uYW1lXCI6XCLmlrDkuK3lpKflhazlhbHotKLmlL/nrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiNDBcIn0se1wic3lzX25hbWVcIjpcIuWvjOa3seWNj+mAmui0ouaUv+S4gOS9k+WMluS4muWKoeeuoeeQhuezu+e7n+i9r+S7tlwiLFwic3lzX2lkXCI6XCI0MVwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLmlrDkuK3lpKflhazlhbHotKLmlL/nrqHnkIbova/ku7ZHc29mdFwiLFwic3lzX2lkXCI6XCI0MlwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW5Lia5Yqh57O757ufXCIsXCJzeXNfaWRcIjpcIjQzXCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbova/ku7ZcIixcInN5c19pZFwiOlwiNDRcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl57O757ufXCIsXCJzeXNfaWRcIjpcIjQ1XCJ9LHtcInN5c19uYW1lXCI6XCLmgLvpooTnrpfns7vnu59cIixcInN5c19pZFwiOlwiNDZcIn0se1wic3lzX25hbWVcIjpcIuWbveW6k+mbhuS4reaUr+S7mOezu+e7n1wiLFwic3lzX2lkXCI6XCI0N1wifSx7XCJzeXNfbmFtZVwiOlwi55So5qy+6K6h5YiS57O757ufXCIsXCJzeXNfaWRcIjpcIjQ4XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuaMh+agh+euoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCI0OVwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/57u85ZCI5Lia5Yqh566h55CG5bmz5Y+wXCIsXCJzeXNfaWRcIjpcIjUwXCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbkv6Hmga/ns7vnu59cIixcInN5c19pZFwiOlwiNTFcIn0se1wic3lzX25hbWVcIjpcIuW3pei1hOe7n+WPkVwiLFwic3lzX2lkXCI6XCI1MlwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLlm73mnInotYTkuqdcIixcInN5c19pZFwiOlwiNTNcIn0se1wic3lzX25hbWVcIjpcIuS5oemVh+mdnueojuaUtuWFpVwiLFwic3lzX2lkXCI6XCI1NFwifSx7XCJzeXNfbmFtZVwiOlwi5Lmh6ZWH6ZuG5Lit5pSv5LuYXCIsXCJzeXNfaWRcIjpcIjU1XCJ9LHtcInN5c19uYW1lXCI6XCLpnZ7nqI7lvoHnvLTns7vnu59cIixcInN5c19pZFwiOlwiNTZcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi6aKE566X57yW5Yi25LiO5omn6KGM57O757ufXCIsXCJzeXNfaWRcIjpcIjU3XCJ9LHtcInN5c19uYW1lXCI6XCLpooTnrpfnrqHnkIbnu7zlkIjkuJrliqHlubPlj7BcIixcInN5c19pZFwiOlwiNThcIn0se1wic3lzX25hbWVcIjpcInU4566h55CG6L2v5Lu2XCIsXCJzeXNfaWRcIjpcIjU5XCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/mjIfmoIfnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiNjBcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi55So5Y+LR1JQLVI56LSi5Yqh566h55CG6L2v5Lu2XCIsXCJzeXNfaWRcIjpcIjYxXCJ9LHtcInN5c19uYW1lXCI6XCLnlKjlj4tHUlAtVTjotKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19pZFwiOlwiNjJcIn0se1wic3lzX25hbWVcIjpcIui0puWKoeWkhOeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCI2M1wifSx7XCJzeXNfbmFtZVwiOlwiUjlp6LSi5pS/566h55CG6L2v5Lu2XCIsXCJzeXNfaWRcIjpcIjY0XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcInU46LSi5pS/566h55CG6L2v5Lu2XCIsXCJzeXNfaWRcIjpcIjY1XCJ9LHtcInN5c19uYW1lXCI6XCLnm7jln47ljLrotKLmlL/nu7zlkIjnrqHnkIbkv6Hmga/ns7vnu59cIixcInN5c19pZFwiOlwiNjZcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+mdnueojue7vOWQiOeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCI2N1wifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/57u85ZCI566h55CG5bmz5Y+wXCIsXCJzeXNfaWRcIjpcIjY4XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuWQtOaxn+WMuui0ouaUv+S4gOS9k+WMllwiLFwic3lzX2lkXCI6XCI2OVwifSx7XCJzeXNfbmFtZVwiOlwi55So5Y+LUjlcIixcInN5c19pZFwiOlwiNzBcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+WFrOWFseW6lOeUqOacjeWKoeW5s+WPsFwiLFwic3lzX2lkXCI6XCI3MVwifSx7XCJzeXNfbmFtZVwiOlwi6YeR6J22Sy8z5Yib5paw566h55CG5bmz5Y+wXCIsXCJzeXNfaWRcIjpcIjcyXCJ9LHtcInN5c19uYW1lXCI6XCLotKbliqHmlbDmja7ns7vnu59cIixcInN5c19pZFwiOlwiNzNcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5YWs5YWx6LSi5pS/5pyN5Yqh5bmz5Y+wXCIsXCJzeXNfaWRcIjpcIjc0XCJ9LHtcInN5c19uYW1lXCI6XCLkvJrorqHmoLjnrpfns7vnu59cIixcInN5c19pZFwiOlwiNzVcIn0se1wic3lzX25hbWVcIjpcIumhueebruW6k1wiLFwic3lzX2lkXCI6XCI3NlwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5oC76aKE566X77yI5aSW77yJ5LiT5oi3566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjc3XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuWfjuW7uui1hOmHkeS4k+aIt+euoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCI3OFwifSx7XCJzeXNfbmFtZVwiOlwi5Yac5L+d5LiT5oi3566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjc5XCJ9LHtcInN5c19uYW1lXCI6XCLlhpzkuJrlj5HlsZXln7rph5HkuJPmiLfnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiODBcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5aSx5Zyw5Yac5rCR5L+d6Zqc6LWE6YeR5LiT5oi3XCIsXCJzeXNfaWRcIjpcIjgxXCJ9LHtcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXlvoHnrqHns7vnu59cIixcInN5c19pZFwiOlwiODJcIn0se1wic3lzX25hbWVcIjpcIuW3pei1hOe7n+WPkeS6uuWRmOS/oeaBr1wiLFwic3lzX2lkXCI6XCI4M1wifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLpooTnrpfmjIfmoIct5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfaWRcIjpcIjg0XCJ9LHtcInN5c19uYW1lXCI6XCLmgLvpooTnrpfkvJrorqHmoLjnrpfns7vnu59cIixcInN5c19pZFwiOlwiODVcIn0se1wic3lzX25hbWVcIjpcIumDqOmXqOmihOeul+e8luWuoeezu+e7n1wiLFwic3lzX2lkXCI6XCI4NlwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLlhazliqHmtojotLnnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiODdcIn0se1wic3lzX25hbWVcIjpcIuWbveaciei1hOS6p+euoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCI4OFwifSx7XCJzeXNfbmFtZVwiOlwi5Yy66ZWH6LSi5pS/566h55CG4oCc5LiA5L2T5YyW4oCd57O757ufXCIsXCJzeXNfaWRcIjpcIjg5XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuWOv+acrOe6p+i0ouaUv+euoeeQhuKAnOS4gOS9k+WMluKAneezu+e7n1wiLFwic3lzX2lkXCI6XCI5MFwifSx7XCJzeXNfbmFtZVwiOlwi55So5Y+L5pS/5YqhXCIsXCJzeXNfaWRcIjpcIjkxXCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpfvvIjooYzmlL/lj6PkuJPpobnotYTph5HvvIlcIixcInN5c19pZFwiOlwiOTJcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X77yI57uP5bu65Y+j5LiT6aG56LWE6YeR77yJXCIsXCJzeXNfaWRcIjpcIjkzXCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpfvvIjlhpzkuJrkv53pmankuJPotKbvvIlcIixcInN5c19pZFwiOlwiOTRcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul++8iOWGnOS4mue7vOWQiOW8gOWPkeS4k+i0pu+8iVwiLFwic3lzX2lkXCI6XCI5NVwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpfvvIjnpL7kv53otYTph5HkuJPotKbvvIlcIixcInN5c19pZFwiOlwiOTZcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul++8iOWcn+WcsOWHuuiuqeS4k+i0pu+8iVwiLFwic3lzX2lkXCI6XCI5N1wifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X77yI57u85ZCI5Y+j5LiT6aG56LWE6YeR77yJXCIsXCJzeXNfaWRcIjpcIjk4XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCI5OVwifSx7XCJzeXNfbmFtZVwiOlwi5Yac5Lia5LiT5ZCR5Y+K5Yac5Lia5Y+R5bGV5Z+66YeR5LiT6aG5XCIsXCJzeXNfaWRcIjpcIjEwMFwifSx7XCJzeXNfbmFtZVwiOlwi5oC76aKE566X5Lya6K6h5qC4566XXCIsXCJzeXNfaWRcIjpcIjEwMVwifSx7XCJzeXNfbmFtZVwiOlwi6YeR6LSi5bel56iL5LiA5L2T5YyW5pSv5pKR5bmz5Y+wXCIsXCJzeXNfaWRcIjpcIjEwMlwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLbnvLRcIixcInN5c19pZFwiOlwiMTAzXCJ9LHtcInN5c19uYW1lXCI6XCLlrabmoKHpooTnrpfmiafooYxcIixcInN5c19pZFwiOlwiMTA0XCJ9LHtcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYxcIixcInN5c19pZFwiOlwiMTA1XCJ9LHtcInN5c19uYW1lXCI6XCLkuJPpobnotYTph5FcIixcInN5c19pZFwiOlwiMTA2XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuaAu+mihOeul1wiLFwic3lzX2lkXCI6XCIxMDdcIn0se1wic3lzX25hbWVcIjpcIumDqOmXqOmihOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIxMDhcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul1wiLFwic3lzX2lkXCI6XCIxMDlcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+i0puWKoeezu+e7n1wiLFwic3lzX2lkXCI6XCIxMTBcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5a+M5rex6LSi5pS/5LiA5L2T5YyW5Lia5Yqh566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjExMVwifSx7XCJzeXNfbmFtZVwiOlwi5Zu95pyJ6LWE5Lqn57O757ufXCIsXCJzeXNfaWRcIjpcIjExMlwifSx7XCJzeXNfbmFtZVwiOlwi5Zu95bqT5LiT6aG56LWE6YeR566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjExM1wifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLbnvLTnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMTE0XCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/nrqHnkIbns7vnu5/vvIjmlrDlhpzkv53vvIlcIixcInN5c19pZFwiOlwiMTE1XCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/nrqHnkIbns7vnu5/vvIjln47luILlsYXmsJHljLvnlpfnu5/nrbnvvIlcIixcInN5c19pZFwiOlwiMTE2XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOmbhuS4reaUr+S7mOS4reW/g++8iVwiLFwic3lzX2lkXCI6XCIxMTdcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOino+WbsOmHke+8iVwiLFwic3lzX2lkXCI6XCIxMThcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOaXp+WfjuaUuemAoO+8iVwiLFwic3lzX2lkXCI6XCIxMTlcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI56S+5L+d6LWE6YeR6LSm5oi377yJXCIsXCJzeXNfaWRcIjpcIjEyMFwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI5Zyf5Zyw5Ye66K6p5LiT5biQ77yJXCIsXCJzeXNfaWRcIjpcIjEyMVwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI6aKE5ouo5Y+K6Z2e6ZuG5Lit5pSv5LuY5Lit5b+D77yJXCIsXCJzeXNfaWRcIjpcIjEyMlwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLotKLmlL/nrqHnkIbns7vnu5/vvIjpooTnrpflpJbotYTph5HvvIlcIixcInN5c19pZFwiOlwiMTIzXCJ9LHtcInN5c19uYW1lXCI6XCLmgLvpooTnrpfkvJrorqFcIixcInN5c19pZFwiOlwiMTI0XCJ9LHtcInN5c19uYW1lXCI6XCLotKLliqHmoLjnrpfns7vnu59cIixcInN5c19pZFwiOlwiMTI1XCJ9LHtcInN5c19uYW1lXCI6XCLlt6XotYTnu5/lj5Hns7vnu59cIixcInN5c19pZFwiOlwiMTI2XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIumihOeul+e8luWuoeezu+e7n1wiLFwic3lzX2lkXCI6XCIxMjdcIn0se1wic3lzX25hbWVcIjpcIumihOeul+euoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxMjhcIn0se1wic3lzX25hbWVcIjpcIumihOeul+Wklui1hOmHke+8iOS7juiBlOe9keWuoeiuoeS4reWPluaVsO+8iVwiLFwic3lzX2lkXCI6XCIxMjlcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwiRzYtRei0ouWKoeeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxMzBcIn0se1wic3lzX25hbWVcIjpcIuaWsOS4reWkp+WFrOWFsei0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2lkXCI6XCIxMzFcIn0se1wic3lzX25hbWVcIjpcIueUqOWPi0dSUC9SOei0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2lkXCI6XCIxMzJcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi55So5Y+LR1JQLVU4UjEwXCIsXCJzeXNfaWRcIjpcIjEzM1wifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW566h55CG57O757uf77yI5Z+65bu65oi377yJXCIsXCJzeXNfaWRcIjpcIjEzNFwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW566h55CG57O757uf77yI6ZuG5Lit5pSv5LuY5Lit5b+D77yJXCIsXCJzeXNfaWRcIjpcIjEzNVwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu5/vvIjlhpzkuJrnu7zlkIjlvIDlj5HvvIlcIixcInN5c19pZFwiOlwiMTM2XCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu5/vvIjpooTnrpflpJbotYTph5HvvIlcIixcInN5c19pZFwiOlwiMTM3XCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu5/vvIjmlK/lhpzkuJPmiLfvvIlcIixcInN5c19pZFwiOlwiMTM4XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlueuoeeQhuezu+e7n++8iOaAu+mihOeul++8iVwiLFwic3lzX2lkXCI6XCIxMzlcIn0se1wic3lzX25hbWVcIjpcIuWbvei1hOeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxNDBcIn0se1wic3lzX25hbWVcIjpcIuS5oei0ouWOv+euoeezu+e7n1wiLFwic3lzX2lkXCI6XCIxNDFcIn0se1wic3lzX25hbWVcIjpcIumihOeul+e8luWItueuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxNDJcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+W4guacrOe6p1/pg6jpl6jpooTnrpdcIixcInN5c19pZFwiOlwiMTQzXCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5biC5pys57qnX+mdnueojuaUtueuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxNDRcIn0se1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/luILmnKznuqdf6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfaWRcIjpcIjE0NVwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5Lqt5rmW5Yy6X+i0ouaUv+S4k+aIt1wiLFwic3lzX2lkXCI6XCIxNDZcIn0se1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuq3muZbljLpf6Z2e56iO5pS25YWl566h55CGXCIsXCJzeXNfaWRcIjpcIjE0N1wifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S6rea5luWMul/lm73lupPpm4bkuK3mlK/ku5jnrqHnkIZcIixcInN5c19pZFwiOlwiMTQ4XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuq3muZbljLpf6aKE566X5oyH5qCH566h55CGXCIsXCJzeXNfaWRcIjpcIjE0OVwifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S6rea5luWMul/mgLvpooTnrpfkvJrorqHmoLjnrpdcIixcInN5c19pZFwiOlwiMTUwXCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf55uQ6YO95Yy6X+i0ouaUv+S4k+aIt+aguOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIxNTFcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+ebkOmDveWMul/pnZ7nqI7mlLblhaXnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMTUyXCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf55uQ6YO95Yy6X+WbveW6k+mbhuS4reaUr+S7mOezu+e7n1wiLFwic3lzX2lkXCI6XCIxNTNcIn0se1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/nm5Dpg73ljLpf5oC76aKE566X5Lya6K6h5qC4566X57O757ufXCIsXCJzeXNfaWRcIjpcIjE1NFwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5ZON5rC05Y6/X+mDqOmXqOmihOeul+euoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxNTVcIn0se1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/lk43msLTljr9f6LSi5pS/5LiA5L2T5YyW5L+h5oGv57O757ufXCIsXCJzeXNfaWRcIjpcIjE1NlwifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+WTjeawtOWOv1/pnZ7nqI7mlLblhaXmlLbnvLTnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMTU3XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/mu6jmtbfljr/otKLmlL/kuIDkvZPljJZcIixcInN5c19pZFwiOlwiMTU4XCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf6Zic5a6B5Y6/X+i0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2lkXCI6XCIxNTlcIn0se1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/pmJzlroHljr9f6LSi5pS/566h55CG6L2v5Lu255So5Y+LVThcIixcInN5c19pZFwiOlwiMTYwXCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/lsITpmLPljr9f6LSi5pS/6aKE566X5omn6KGM5LiA5L2T5YyW57O757ufXCIsXCJzeXNfaWRcIjpcIjE2MVwifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+W7uua5luWOv1/pnZ7nqI7mlLbnvLRcIixcInN5c19pZFwiOlwiMTYyXCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/lu7rmuZbljr9f6LSi5pS/5LiA5L2T5YyWXCIsXCJzeXNfaWRcIjpcIjE2M1wifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+W7uua5luWOv1/lm73lupPpm4bkuK3mlK/ku5hcIixcInN5c19pZFwiOlwiMTY0XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuJzlj7DluIJf6YOo6Zeo6aKE566X57yW5a6h57O757ufXCIsXCJzeXNfaWRcIjpcIjE2NVwifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S4nOWPsOW4gl/otKLmlL/kuIDkvZPljJbkv6Hmga/ns7vnu59cIixcInN5c19pZFwiOlwiMTY2XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuJzlj7DluIJf6LSi5pS/5LiT5oi35qC4566X57O757ufXCIsXCJzeXNfaWRcIjpcIjE2N1wifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S4nOWPsOW4gl/pnZ7nqI7mlLblhaXmlLbnvLTnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMTY4XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuJzlj7DluIJf5oC76aKE566X5Lya6K6h5qC4566X57O757ufXCIsXCJzeXNfaWRcIjpcIjE2OVwifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+Wkp+S4sOWMul/pg6jpl6jpooTnrpfns7vnu59cIixcInN5c19pZFwiOlwiMTcwXCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/lpKfkuLDljLpf6LSi5pS/5LiA5L2T5YyWXCIsXCJzeXNfaWRcIjpcIjE3MVwifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+Wkp+S4sOWMul/mgLvpooTnrpfkvJrorqHmoLjnrpfotKLliqHova/ku7ZcIixcInN5c19pZFwiOlwiMTcyXCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/nu4/mtY7mioDmnK/lvIDlj5HljLpf6YOo6Zeo6aKE566X6L2v5Lu2XCIsXCJzeXNfaWRcIjpcIjE3M1wifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+e7j+a1juaKgOacr+W8gOWPkeWMul/lm73lupPpm4bkuK3mlK/ku5hcIixcInN5c19pZFwiOlwiMTc0XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuiAgemdnueojuaUtuWFpeW+gee8tOezu+e7n1wiLFwic3lzX2lkXCI6XCIxNzVcIn0se1wic3lzX25hbWVcIjpcIuaJrOW3nui0ouaUv+S4gOS9k+WMluS/oeaBr+euoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxNzZcIn0se1wic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeW+geaUtlwiLFwic3lzX2lkXCI6XCIxNzdcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566X57yW5Yi2XCIsXCJzeXNfaWRcIjpcIjE3OFwifSx7XCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl5pS257y0XCIsXCJzeXNfaWRcIjpcIjE3OVwifSx7XCJzeXNfbmFtZVwiOlwi6KGM5pS/5LqL5Lia5oCn5Y2V5L2N5Zu95pyJ6LWE5Lqn566h55CGXCIsXCJzeXNfaWRcIjpcIjE4MFwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLotKLmlL/kuJrliqHns7vnu59cIixcInN5c19pZFwiOlwiMTgxXCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuJrliqHnu7zlkIjns7vnu59cIixcInN5c19pZFwiOlwiMTgyXCJ9LHtcInN5c19uYW1lXCI6XCLmsZ/pg73lvIDlj5HljLrpooTnrpfmiafooYzns7vnu59cIixcInN5c19pZFwiOlwiMTgzXCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMllwiLFwic3lzX2lkXCI6XCIxODRcIn0se1wic3lzX25hbWVcIjpcIuWvjOa3seWNj+mAmui0ouaUv+S4gOS9k+WMluS4muWKoeeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxODVcIn0se1wic3lzX25hbWVcIjpcIuWvjOa3seWNj+mAmumdnueojuaUtue8tOezu+e7n1wiLFwic3lzX2lkXCI6XCIxODZcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5a+M5rex5Y2P6YCa5bel6LWE57uf5Y+R57O757ufXCIsXCJzeXNfaWRcIjpcIjE4N1wifSx7XCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWlXCIsXCJzeXNfaWRcIjpcIjE4OFwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/57u85ZCI5Lia5Yqh57O757ufXCIsXCJzeXNfaWRcIjpcIjE4OVwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5biC5pys57qnX+mDqOmXqOmihOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIxOTBcIn0se1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/luILmnKznuqdf6Z2e56iO5pS25YWl57O757ufXCIsXCJzeXNfaWRcIjpcIjE5MVwifSx7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+W4guacrOe6p1/nu6nmlYjnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMTkyXCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/luILmnKznuqdf6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfaWRcIjpcIjE5M1wifSx7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+W4guacrOe6p1/nu7zlkIjmsrvnqI7ns7vnu59cIixcInN5c19pZFwiOlwiMTk0XCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5rW36Zm15Yy6X+mDqOmXqOmihOeul+e8luWItuezu+e7n1wiLFwic3lzX2lkXCI6XCIxOTVcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+a1t+mZteWMul/ljr/ljLrotKLmlL/kuIDkvZPljJZcIixcInN5c19pZFwiOlwiMTk2XCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf6auY5riv5Yy6X+mihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2lkXCI6XCIxOTdcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+WnnOWgsOWMul/pg6jpl6jpooTnrpfns7vnu59cIixcInN5c19pZFwiOlwiMTk4XCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5aec5aCw5Yy6X+i0ouaUv+S4gOS9k+WMluezu+e7n1wiLFwic3lzX2lkXCI6XCIxOTlcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+WnnOWgsOWMul/pnZ7nqI7mlLbnvLTns7vnu59cIixcInN5c19pZFwiOlwiMjAwXCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5aec5aCw5Yy6X+mihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2lkXCI6XCIyMDFcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+WMu+iNr+mrmOaWsOWMul/otKLmlL/kuIDkvZPljJbns7vnu59cIixcInN5c19pZFwiOlwiMjAyXCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5YW05YyW5biCX+mDqOmXqOmihOeul1wiLFwic3lzX2lkXCI6XCIyMDNcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+WFtOWMluW4gl/pnZ7nqI7mlLbnvLRcIixcInN5c19pZFwiOlwiMjA0XCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5YW05YyW5biCX+WbveW6k+mbhuS4reaUr+S7mFwiLFwic3lzX2lkXCI6XCIyMDVcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+mdluaxn+W4gl/pooTnrpfmiafooYzns7vnu59cIixcInN5c19pZFwiOlwiMjA2XCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf6Z2W5rGf5biCX+mdnueojuaUtuWFpeaUtue8tFwiLFwic3lzX2lkXCI6XCIyMDdcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+mdluaxn+W4gl/pg6jpl6jpooTnrpfnvJblrqHns7vnu59cIixcInN5c19pZFwiOlwiMjA4XCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5rOw5YW05biCX+mDqOmXqOmihOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIyMDlcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+azsOWFtOW4gl/pnZ7nqI7mlLblhaXnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMjEwXCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5rOw5YW05biCX+mihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2lkXCI6XCIyMTFcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566X566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjIxMlwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW5bmz5Y+w5Y+K5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfaWRcIjpcIjIxM1wifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLmlrDkuK3lpKfpnZ7nqI7mlLblhaXnrqHnkIZcIixcInN5c19pZFwiOlwiMjE0XCJ9LHtcInN5c19uYW1lXCI6XCLogZTlj4votKLliqHnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMjE1XCJ9LHtcInN5c19uYW1lXCI6XCLlm73lupPpm4bkuK3mlK/ku5jjgIHmjIfmoIfnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMjE2XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuW8gOWPkeWMuuaAu+mihOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIyMTdcIn0se1wic3lzX25hbWVcIjpcIuWbveW6k+i0puWKoeezu+e7n1wiLFwic3lzX2lkXCI6XCIyMThcIn0se1wic3lzX25hbWVcIjpcIuWMluWtpuW3peS4muWbreWMuumdnueojuaUtuWFpeeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIyMTlcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl6LSm5aWXXCIsXCJzeXNfaWRcIjpcIjIyMFwifSx7XCJzeXNfbmFtZVwiOlwi5YyW5a2m5bel5Lia5Zut5Yy66aKE566X5omn6KGM57O757ufXCIsXCJzeXNfaWRcIjpcIjIyMVwifSx7XCJzeXNfbmFtZVwiOlwi5Lya6K6h5qC4566XXCIsXCJzeXNfaWRcIjpcIjIyMlwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLmgLvpooTnrpfkvJrorqHotKZcIixcInN5c19pZFwiOlwiMjIzXCJ9LHtcInN5c19uYW1lXCI6XCLpooTnrpflhoXlpJbmlLbmlK/moLjnrpfns7vnu59cIixcInN5c19pZFwiOlwiMjI0XCJ9LHtcInN5c19uYW1lXCI6XCLotKbmiLfmoLjnrpfns7vnu59cIixcInN5c19pZFwiOlwiMjI1XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuaAu+mihOeul+aguOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIyMjZcIn0se1wic3lzX25hbWVcIjpcIui0puWKoeWkhOeQhuezu+e7n++8iOaUtuaUr+WIhuexu+aUuemdqeWNh+e6p+eJiO+8iVwiLFwic3lzX2lkXCI6XCIyMjdcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+mihOeul+WkluS4muWKoVwiLFwic3lzX2lkXCI6XCIyMjhcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi55So5Y+LVThSMTDotKLmlL/kuIDkvZPljJblubPlj7BcIixcInN5c19pZFwiOlwiMjI5XCJ9LHtcInN5c19uYW1lXCI6XCLlvIDlj5HljLrotKLmlL/ns7vnu59cIixcInN5c19pZFwiOlwiMjMwXCJ9LHtcInN5c19uYW1lXCI6XCLpq5jmlrDljLrmgLvpooTnrpfns7vnu59cIixcInN5c19pZFwiOlwiMjMxXCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuW8gOWPkeWMuuWFrOWFsei0ouaUv+acjeWKoeW5s+WPsFwiLFwic3lzX2lkXCI6XCIyMzJcIn0se1wic3lzX25hbWVcIjpcIueUqOWPi0dSUC1VOOeuoeeQhui9r+S7tlwiLFwic3lzX2lkXCI6XCIyMzNcIn0se1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/ln47ljZfmlrDljLpf5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfaWRcIjpcIjIzNFwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5Z+O5Y2X5paw5Yy6X+aAu+mihOeul+i0puWKoeWkhOeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIyMzVcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+mihOeul+aMh+agh+euoeeQhlwiLFwic3lzX2lkXCI6XCIyMzZcIn0se1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/luILmnKznuqdf6KGM5pS/566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjIzN1wifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLmlrDkuK3lpKfotKLliqHova/ku7ZcIixcInN5c19pZFwiOlwiMjM4XCJ9LHtcInN5c19uYW1lXCI6XCLlvIDlj5HljLrmlrDkuK3lpKfotKLliqHmoLjnrpfns7vnu59cIixcInN5c19pZFwiOlwiMjM5XCJ9LHtcInN5c19uYW1lXCI6XCLlvIDlj5HljLrotKbliqHns7vnu59cIixcInN5c19pZFwiOlwiMjQwXCJ9XTtcclxuXHJcblx0ZXhwb3J0IHZhciBvcmlnaW5fcGxhY2VfYXJyID0gW3tcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEwMFwiLFwic3lzX25hbWVcIjpcIumDqOmXqOmihOeul1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDFcIixcImNpdHlcIjpcIuWNl+S6rOW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjAxMDBcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXmlLbnvLTnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTAwXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEwMFwiLFwic3lzX25hbWVcIjpcIui1hOS6p+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpDR0xcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDFcIixcImNpdHlcIjpcIuWNl+S6rOW4glwiLFwiY291bnR5XCI6XCLnjoTmrabljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAxMDJcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi56em5reu5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTA0XCIsXCJzeXNfbmFtZVwiOlwi55So5Y+L6LSi5pS/57u85ZCI566h55CG5L+h5oGv57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi5bu66YK65Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTA1XCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIum8k+alvOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEwNlwiLFwic3lzX25hbWVcIjpcIueUqOWPi0ErK1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIua1puWPo+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDExMVwiLFwic3lzX25hbWVcIjpcIua1puWPo+i0ouaUv+S4gOS9k+WMllwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIuaglumcnuWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDExM1wiLFwic3lzX25hbWVcIjpcIuaglumcnuWMuui0ouaUv+S4muWKoeS/oeaBr+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIumbqOiKseWPsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDExNFwiLFwic3lzX25hbWVcIjpcIuS4gOS9k+WMluezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIuaxn+WugeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDExNVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuS4gOS9k+WMluezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIuaxn+WugeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDExNVwiLFwic3lzX25hbWVcIjpcIua7qOaxn+W8gOWPkeWMuui0ouaUv+WIhuWxgFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIuaxn+WugeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDExNVwiLFwic3lzX25hbWVcIjpcIuaxn+Wugee7j+a1juaKgOacr+W8gOWPkeWMuui0ouaUv+WIhuWxgFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIuaxn+WugeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDExNVwiLFwic3lzX25hbWVcIjpcIuaxn+WugeenkeWtpuWbrei0ouaUv+WIhuWxgFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIuWFreWQiOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDExNlwiLFwic3lzX25hbWVcIjpcIuS4gOS9k+WMluezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIumrmOa3s+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDExOFwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIua6p+awtOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEyNFwiLFwic3lzX25hbWVcIjpcIkErK+i0ouaUv+S4gOS9k+WMluW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDIwMFwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDIwMFwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeaUtue8tOeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLltIflronljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMDJcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7ns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5bSH5a6J5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjAyXCIsXCJzeXNfbmFtZVwiOlwi5LiA5L2T5YyW6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5Y2X6ZW/5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjAzXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIuWNl+mVv+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDIwM1wiLFwic3lzX25hbWVcIjpcIuS4gOS9k+WMllwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIuWMl+WhmOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDIwNFwiLFwic3lzX25hbWVcIjpcIuWbveW6k+mbhuS4reaUr+S7mOeuoeeQhuS/oeaBr+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkdLWkZcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLplKHlsbHljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMDVcIixcInN5c19uYW1lXCI6XCLlm73lupPpm4bkuK3mlK/ku5hcIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi6ZSh5bGx5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjA1XCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X5Y+K6Z2e56iO57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkhIU19GU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5oOg5bGx5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjA2XCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5ruo5rmW5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjExXCIsXCJzeXNfbmFtZVwiOlwi6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIua7qOa5luWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDIxMVwiLFwic3lzX25hbWVcIjpcIumdnueojuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLmu6jmuZbljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMTFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJaSEhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5paw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjE0XCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIuaWsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDIxNFwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtue8tOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLmlrDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMTRcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJaSEhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5rGf6Zi05biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjgxXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5a6c5YW05biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjgyXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS257y057O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIuWunOWFtOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDI4MlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMwMFwiLFwic3lzX25hbWVcIjpcIuWvjOa3semihOeul+aJp+ihjFwiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMDBcIixcInN5c19uYW1lXCI6XCLnlKjlj4vpnZ7nqI7lj4rnpajmja5cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzAwXCIsXCJzeXNfbmFtZVwiOlwi55So5Y+L6aKE566X5omn6KGMXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIum8k+alvOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMwMlwiLFwic3lzX25hbWVcIjpcIuaxn+iLj+ecgei0ouaUv+mihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLpvJPmpbzljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMDJcIixcInN5c19uYW1lXCI6XCLnlKjlj4vpgJrnlKjova/ku7ZcIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi5LqR6b6Z5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzAzXCIsXCJzeXNfbmFtZVwiOlwi5rGf6IuP55yB6LSi5pS/6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIuS6kem+meWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMwM1wiLFwic3lzX25hbWVcIjpcIuiBlOWPi+i9r+S7ti/pgJrnlKjotKLliqFcIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi5LqR6b6Z5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzAzXCIsXCJzeXNfbmFtZVwiOlwi55So5Y+LR1JQRy1VOFIxMOi0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLotL7msarljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMDVcIixcInN5c19uYW1lXCI6XCLnlKjlj4tHUFAtUjEw6LSi5pS/566h55CG6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIuazieWxseWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMxMVwiLFwic3lzX25hbWVcIjpcIuWvjOa3seWNj+mAmui0ouaUv+S4gOS9k+WMlueuoeeQhuS/oeaBr+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIumTnOWxseWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMxMlwiLFwic3lzX25hbWVcIjpcIui0ouWKoee7n+S4gOaguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLpk5zlsbHljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMTJcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXmlLbnvLTnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi6ZOc5bGx5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzEyXCIsXCJzeXNfbmFtZVwiOlwi5YWs5YWx6LSi5pS/566h55CG6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIuS4sOWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMyMVwiLFwic3lzX25hbWVcIjpcIkErK+i0ouaUv+S4gOS9k+WMluS/oeaBr+W5s+WPsFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIuS4sOWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMyMVwiLFwic3lzX25hbWVcIjpcIuaWsOS4reWkp+WFrOWFsei0ouWKoeeuoeeQhui9r+S7tlwiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLmspvljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMjJcIixcInN5c19uYW1lXCI6XCLlr4zmt7HotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLmspvljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMjJcIixcInN5c19uYW1lXCI6XCLmlrDkuK3lpKflhazlhbHotKLmlL/nrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi552i5a6B5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzI0XCIsXCJzeXNfbmFtZVwiOlwi5a+M5rex5Y2P6YCa6LSi5pS/5LiA5L2T5YyW5Lia5Yqh566h55CG57O757uf6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi552i5a6B5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzI0XCIsXCJzeXNfbmFtZVwiOlwi5paw5Lit5aSn5YWs5YWx6LSi5pS/566h55CG6L2v5Lu2R3NvZnRcIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi5paw5rKC5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzgxXCIsXCJzeXNfbmFtZVwiOlwi5rGf6IuP55yB6LSi5pS/6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIumCs+W3nlwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDM4MlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIuacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQwMFwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluS4muWKoeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIuWkqeWugeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQwMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlui9r+S7tlwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIuWkqeWugeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQwMlwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLlpKnlroHljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0MDJcIixcInN5c19uYW1lXCI6XCLmgLvpooTnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi6ZKf5qW85Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDA0XCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIumSn+alvOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQwNFwiLFwic3lzX25hbWVcIjpcIuWbveW6k+mbhuS4reaUr+S7mOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkdLWkZcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLpkp/mpbzljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0MDRcIixcInN5c19uYW1lXCI6XCLnlKjmrL7orqHliJLns7vnu59cIixcInN5c19jb2RlXCI6XCJKSEdMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi6ZKf5qW85Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDA0XCIsXCJzeXNfbmFtZVwiOlwi5oyH5qCH566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkJHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIumSn+alvOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQwNFwiLFwic3lzX25hbWVcIjpcIuaAu+mihOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIuaWsOWMl+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQxMVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+e7vOWQiOS4muWKoeeuoeeQhuW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIuatpui/m+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQxMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlueuoeeQhuS/oeaBr+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIua6p+mYs+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQ4MVwiLFwic3lzX25hbWVcIjpcIumDqOmXqOmihOeul1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLmuqfpmLPluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0ODFcIixcInN5c19uYW1lXCI6XCLlt6XotYTnu5/lj5FcIixcInN5c19jb2RlXCI6XCJHWlRGXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi5rqn6Ziz5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDgxXCIsXCJzeXNfbmFtZVwiOlwi5Zu95pyJ6LWE5LqnXCIsXCJzeXNfY29kZVwiOlwiWkNHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIua6p+mYs+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQ4MVwiLFwic3lzX25hbWVcIjpcIuS5oemVh+mdnueojuaUtuWFpVwiLFwic3lzX2NvZGVcIjpcIlhaRlNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLmuqfpmLPluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0ODFcIixcInN5c19uYW1lXCI6XCLkuaHplYfpm4bkuK3mlK/ku5hcIixcInN5c19jb2RlXCI6XCJYWkdLXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi6YeR5Z2b5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDgyXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwMFwiLFwic3lzX25hbWVcIjpcIumdnueojuW+gee8tOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1MDBcIixcInN5c19uYW1lXCI6XCLpooTnrpfnvJbliLbkuI7miafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5bel5Lia5Zut5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTAxXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X566h55CG57u85ZCI5Lia5Yqh5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiWVNHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuiZjuS4mOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwNVwiLFwic3lzX25hbWVcIjpcInU4566h55CG6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiQ1pHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuiZjuS4mOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwNVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+aMh+agh+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpCR0xcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLomY7kuJjljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1MDVcIixcInN5c19uYW1lXCI6XCLlm73lupPpm4bkuK3mlK/ku5jns7vnu59cIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi6JmO5LiY5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTA1XCIsXCJzeXNfbmFtZVwiOlwi55So5Y+LR1JQLVI56LSi5Yqh566h55CG6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiQ1dHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuiZjuS4mOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwNVwiLFwic3lzX25hbWVcIjpcIueUqOWPi0dSUC1VOOi0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2NvZGVcIjpcIkNXR0xcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLomY7kuJjljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1MDVcIixcInN5c19uYW1lXCI6XCLotKbliqHlpITnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJaV0NMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5ZC05Lit5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTA2XCIsXCJzeXNfbmFtZVwiOlwiUjlp6LSi5pS/566h55CG6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiQ1pHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuWQtOS4reWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwNlwiLFwic3lzX25hbWVcIjpcIumDqOmXqOmihOeul1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlkLTkuK3ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1MDZcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJblubPlj7BcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlkLTkuK3ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1MDZcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7ns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi55u45Z+O5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTA3XCIsXCJzeXNfbmFtZVwiOlwidTjotKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19jb2RlXCI6XCJDWkdMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi55u45Z+O5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTA3XCIsXCJzeXNfbmFtZVwiOlwi55u45Z+O5Yy66LSi5pS/57u85ZCI566h55CG5L+h5oGv57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5aeR6IuP5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTA4XCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/6Z2e56iO57u85ZCI566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuWnkeiLj+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwOFwiLFwic3lzX25hbWVcIjpcIui0ouaUv+e7vOWQiOeuoeeQhuW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuWQtOaxn+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwOVwiLFwic3lzX25hbWVcIjpcIuWQtOaxn+WMuui0ouaUv+S4gOS9k+WMllwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuW4uOeGn+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4MVwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeaUtue8tOeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLluLjnhp/luIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODFcIixcInN5c19uYW1lXCI6XCLnlKjlj4tSOVwiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLluLjnhp/luIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODFcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5byg5a625riv5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTgyXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5YWs5YWx5bqU55So5pyN5Yqh5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiR0dGV1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuW8oOWutua4r+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4MlwiLFwic3lzX25hbWVcIjpcIumHkeidtksvM+WIm+aWsOeuoeeQhuW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIkNaR0xcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlvKDlrrbmuK/luIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODJcIixcInN5c19uYW1lXCI6XCLotKbliqHmlbDmja7ns7vnu59cIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5piG5bGx5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTgzXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl5pS257y0566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuaYhuWxseW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4M1wiLFwic3lzX25hbWVcIjpcIuWFrOWFsei0ouaUv+acjeWKoeW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIkdHRldcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLmmIblsbHluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODNcIixcInN5c19uYW1lXCI6XCLlm73lupPpm4bkuK3mlK/ku5jns7vnu59cIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5aSq5LuT5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTg1XCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuWkquS7k+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4NVwiLFwic3lzX25hbWVcIjpcIuS8muiuoeaguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlpKrku5PluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODVcIixcInN5c19uYW1lXCI6XCLpobnnm67lupNcIixcInN5c19jb2RlXCI6XCJYTUtcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlpKrku5PluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODVcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjAwXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIuW0h+W3neWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYwMlwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmuK/pl7jljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MTFcIixcInN5c19uYW1lXCI6XCLotKLmlL/mgLvpooTnrpfvvIjlpJbvvInkuJPmiLfnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1daSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua4r+mXuOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYxMVwiLFwic3lzX25hbWVcIjpcIuWfjuW7uui1hOmHkeS4k+aIt+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkNKWkhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmuK/pl7jljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MTFcIixcInN5c19uYW1lXCI6XCLlhpzkv53kuJPmiLfnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJOQlpIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5riv6Ze45Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjExXCIsXCJzeXNfbmFtZVwiOlwi5Yac5Lia5Y+R5bGV5Z+66YeR5LiT5oi3566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiTkZKSlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua4r+mXuOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYxMVwiLFwic3lzX25hbWVcIjpcIuWkseWcsOWGnOawkeS/nemanOi1hOmHkeS4k+aIt1wiLFwic3lzX2NvZGVcIjpcIlNETk1cIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmuK/pl7jljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MTFcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi6YCa5bee5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjEyXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl5b6B566h57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIumAmuW3nuWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYxMlwiLFwic3lzX25hbWVcIjpcIuW3pei1hOe7n+WPkeS6uuWRmOS/oeaBr1wiLFwic3lzX2NvZGVcIjpcIkdaVEZcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLpgJrlt57ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MTJcIixcInN5c19uYW1lXCI6XCLpooTnrpfmjIfmoIct5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIumAmuW3nuWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYxMlwiLFwic3lzX25hbWVcIjpcIuaAu+mihOeul+S8muiuoeaguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmtbflronljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MjFcIixcInN5c19uYW1lXCI6XCLpg6jpl6jpooTnrpfnvJblrqHns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5rW35a6J5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjIxXCIsXCJzeXNfbmFtZVwiOlwi5YWs5Yqh5raI6LS5566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiR1dYRlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua1t+WuieWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYyMVwiLFwic3lzX25hbWVcIjpcIuWbveaciei1hOS6p+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpDR0xcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmtbflronljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MjFcIixcInN5c19uYW1lXCI6XCLljLrplYfotKLmlL/nrqHnkIbigJzkuIDkvZPljJbigJ3ns7vnu59cIixcInN5c19jb2RlXCI6XCJYWllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua1t+WuieWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYyMVwiLFwic3lzX25hbWVcIjpcIuWOv+acrOe6p+i0ouaUv+euoeeQhuKAnOS4gOS9k+WMluKAneezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIuWmguS4nOWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYyM1wiLFwic3lzX25hbWVcIjpcIueUqOWPi+aUv+WKoVwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIuWQr+S4nOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4MVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul++8iOihjOaUv+WPo+S4k+mhuei1hOmHke+8iVwiLFwic3lzX2NvZGVcIjpcIlpIWFpcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLlkK/kuJzluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2ODFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpfvvIjnu4/lu7rlj6PkuJPpobnotYTph5HvvIlcIixcInN5c19jb2RlXCI6XCJaSEpKXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5ZCv5Lic5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjgxXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X77yI5Yac5Lia5L+d6Zmp5LiT6LSm77yJXCIsXCJzeXNfY29kZVwiOlwiWkhOQlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIuWQr+S4nOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4MVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul++8iOWGnOS4mue7vOWQiOW8gOWPkeS4k+i0pu+8iVwiLFwic3lzX2NvZGVcIjpcIlpITkZcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLlkK/kuJzluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2ODFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpfvvIjnpL7kv53otYTph5HkuJPotKbvvIlcIixcInN5c19jb2RlXCI6XCJaSFNCXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5ZCv5Lic5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjgxXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X77yI5Zyf5Zyw5Ye66K6p5LiT6LSm77yJXCIsXCJzeXNfY29kZVwiOlwiWkhURFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIuWQr+S4nOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4MVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul++8iOe7vOWQiOWPo+S4k+mhuei1hOmHke+8iVwiLFwic3lzX2NvZGVcIjpcIlpIWkhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLlkK/kuJzluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2ODFcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5ZCv5Lic5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjgxXCIsXCJzeXNfbmFtZVwiOlwi5Yac5Lia5LiT5ZCR5Y+K5Yac5Lia5Y+R5bGV5Z+66YeR5LiT6aG5XCIsXCJzeXNfY29kZVwiOlwiTkZaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIuWQr+S4nOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4MVwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLlkK/kuJzluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2ODFcIixcInN5c19uYW1lXCI6XCLmgLvpooTnrpfkvJrorqHmoLjnrpdcIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5aaC55qL5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjgyXCIsXCJzeXNfbmFtZVwiOlwi6YeR6LSi5bel56iL5LiA5L2T5YyW5pSv5pKR5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5rW36Zeo5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjg0XCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS257y0XCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua1t+mXqOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4NFwiLFwic3lzX25hbWVcIjpcIuWtpuagoemihOeul+aJp+ihjFwiLFwic3lzX2NvZGVcIjpcIllTWlhYWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua1t+mXqOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4NFwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjFwiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmtbfpl6jluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2ODRcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5rW36Zeo5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjg0XCIsXCJzeXNfbmFtZVwiOlwi5LiT6aG56LWE6YeRXCIsXCJzeXNfY29kZVwiOlwiWlhaSlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua1t+mXqOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4NFwiLFwic3lzX25hbWVcIjpcIuaAu+mihOeul1wiLFwic3lzX2NvZGVcIjpcIlpZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwN1wiLFwiY2l0eVwiOlwi6L+e5LqR5riv5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDcwMFwiLFwic3lzX25hbWVcIjpcIumDqOmXqOmihOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MDBcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpdcIixcInN5c19jb2RlXCI6XCJaSEhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzAwXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwN1wiLFwiY2l0eVwiOlwi6L+e5LqR5riv5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDcwMFwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLov57kupHljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MDNcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfotKbliqHns7vnu59cIixcInN5c19jb2RlXCI6XCJaSEhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi6L+e5LqR5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzAzXCIsXCJzeXNfbmFtZVwiOlwi5a+M5rex6LSi5pS/5LiA5L2T5YyW566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi5rW35bee5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzA2XCIsXCJzeXNfbmFtZVwiOlwi5a+M5rex6LSi5pS/5LiA5L2T5YyW5Lia5Yqh566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi5rW35bee5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzA2XCIsXCJzeXNfbmFtZVwiOlwi5paw5Lit5aSn5YWs5YWx6LSi5pS/566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi6LWj5qaG5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzIxXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi6LWj5qaG5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzIxXCIsXCJzeXNfbmFtZVwiOlwi5Zu95pyJ6LWE5Lqn57O757ufXCIsXCJzeXNfY29kZVwiOlwiQ1pHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwN1wiLFwiY2l0eVwiOlwi6L+e5LqR5riv5biCXCIsXCJjb3VudHlcIjpcIuS4nOa1t+WOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDcyMlwiLFwic3lzX25hbWVcIjpcIumDqOmXqOmihOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLkuJzmtbfljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MjJcIixcInN5c19uYW1lXCI6XCLlm73lupPkuJPpobnotYTph5HnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJaWFpKXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi5Lic5rW35Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzIyXCIsXCJzeXNfbmFtZVwiOlwi5Zu95pyJ6LWE5Lqn566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkNHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwN1wiLFwiY2l0eVwiOlwi6L+e5LqR5riv5biCXCIsXCJjb3VudHlcIjpcIuS4nOa1t+WOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDcyMlwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLngYzkupHljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MjNcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJblubPlj7BcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLngYzljZfljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MjRcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7ns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi54GM5Y2X5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzI0XCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwMFwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtue8tOeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDBcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5riF5rKz5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAyXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI5paw5Yac5L+d77yJXCIsXCJzeXNfY29kZVwiOlwiWkhOQlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua4heays+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOWfjuW4guWxheawkeWMu+eWl+e7n+etue+8iVwiLFwic3lzX2NvZGVcIjpcIlpIWUJcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmsrPljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDJcIixcInN5c19uYW1lXCI6XCLotKLmlL/nrqHnkIbns7vnu5/vvIjpm4bkuK3mlK/ku5jkuK3lv4PvvIlcIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5riF5rKz5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAyXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI6Kej5Zuw6YeR77yJXCIsXCJzeXNfY29kZVwiOlwiWkhKS1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua4heays+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOaXp+WfjuaUuemAoO+8iVwiLFwic3lzX2NvZGVcIjpcIlpIQ0dcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmsrPljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDJcIixcInN5c19uYW1lXCI6XCLotKLmlL/nrqHnkIbns7vnu5/vvIjnpL7kv53otYTph5HotKbmiLfvvIlcIixcInN5c19jb2RlXCI6XCJaSFNCXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5riF5rKz5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAyXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI5Zyf5Zyw5Ye66K6p5LiT5biQ77yJXCIsXCJzeXNfY29kZVwiOlwiWkhURFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua4heays+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOmihOaLqOWPiumdnumbhuS4reaUr+S7mOS4reW/g++8iVwiLFwic3lzX2NvZGVcIjpcIlpIWUJcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmsrPljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDJcIixcInN5c19uYW1lXCI6XCLotKLmlL/nrqHnkIbns7vnu5/vvIjpooTnrpflpJbotYTph5HvvIlcIixcInN5c19jb2RlXCI6XCJZU1dcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmsrPljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDJcIixcInN5c19uYW1lXCI6XCLmgLvpooTnrpfkvJrorqFcIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5reu5a6J5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAzXCIsXCJzeXNfbmFtZVwiOlwi6LSi5Yqh5qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua3ruWuieWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwM1wiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmt67lronljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDNcIixcInN5c19uYW1lXCI6XCLlt6XotYTnu5/lj5Hns7vnu59cIixcInN5c19jb2RlXCI6XCJHWlRGXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5reu5a6J5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAzXCIsXCJzeXNfbmFtZVwiOlwi55So5Y+L5pS/5YqhXCIsXCJzeXNfY29kZVwiOlwiWVlaV1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua3ruWuieWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwM1wiLFwic3lzX25hbWVcIjpcIumihOeul+e8luWuoeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmt67lronljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDNcIixcInN5c19uYW1lXCI6XCLpooTnrpfnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJZU0dMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5reu5a6J5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAzXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5aSW6LWE6YeR77yI5LuO6IGU572R5a6h6K6h5Lit5Y+W5pWw77yJXCIsXCJzeXNfY29kZVwiOlwiWVNXXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5reu5a6J5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAzXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X57yW5a6h57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNCU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua3rumYtOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwNFwiLFwic3lzX25hbWVcIjpcIkc2LUXotKLliqHnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJDV0dMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5reu6Zi05Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODA0XCIsXCJzeXNfbmFtZVwiOlwi5rGf6IuP55yB6LSi5pS/6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua3rumYtOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwNFwiLFwic3lzX25hbWVcIjpcIuaWsOS4reWkp+WFrOWFsei0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2NvZGVcIjpcIkNaR0xcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmt67pmLTljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDRcIixcInN5c19uYW1lXCI6XCLnlKjlj4tHUlAvUjnotKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19jb2RlXCI6XCJDWkdMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5reu6Zi05Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODA0XCIsXCJzeXNfbmFtZVwiOlwi55So5Y+LR1JQLVU4UjEwXCIsXCJzeXNfY29kZVwiOlwiQ1dHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua3ruWuieWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwM1wiLFwic3lzX25hbWVcIjpcIumihOeul+e8luWuoeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTQlNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmtabljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MTFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu5/vvIjln7rlu7rmiLfvvIlcIixcInN5c19jb2RlXCI6XCJaSEpKXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5riF5rWm5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODExXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW566h55CG57O757uf77yI6ZuG5Lit5pSv5LuY5Lit5b+D77yJXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua4hea1puWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgxMVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlueuoeeQhuezu+e7n++8iOWGnOS4mue7vOWQiOW8gOWPke+8iVwiLFwic3lzX2NvZGVcIjpcIlpITkZcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmtabljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MTFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu5/vvIjpooTnrpflpJbotYTph5HvvIlcIixcInN5c19jb2RlXCI6XCJZU1dcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmtabljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MTFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu5/vvIjmlK/lhpzkuJPmiLfvvIlcIixcInN5c19jb2RlXCI6XCJaSFpOXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5riF5rWm5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODExXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW566h55CG57O757uf77yI5oC76aKE566X77yJXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua2n+awtOWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgyNlwiLFwic3lzX25hbWVcIjpcIumdnueojuW+gee8tOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmtp/msLTljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MjZcIixcInN5c19uYW1lXCI6XCLlm73otYTnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJaQ0dMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5raf5rC05Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODI2XCIsXCJzeXNfbmFtZVwiOlwi5Lmh6LSi5Y6/566h57O757ufXCIsXCJzeXNfY29kZVwiOlwiWENYR1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua2n+awtOWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgyNlwiLFwic3lzX25hbWVcIjpcIuS5oei0ouWOv+euoeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlhDWEdcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmtp/msLTljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MjZcIixcInN5c19uYW1lXCI6XCLpooTnrpfnvJbliLbnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJZU0JTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5raf5rC05Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODI2XCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua0quazveWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgyOVwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmtKrms73ljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MjlcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi55ux55yZ5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODMwXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi6YeR5rmW5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODMxXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwMFwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/luILmnKznuqdf6YOo6Zeo6aKE566XXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwMFwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/luILmnKznuqdf6Z2e56iO5pS2566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwMFwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/luILmnKznuqdf6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuS6rea5luWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwMlwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuq3muZbljLpf6LSi5pS/5LiT5oi3XCIsXCJzeXNfY29kZVwiOlwiWkhIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuS6rea5luWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwMlwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuq3muZbljLpf6Z2e56iO5pS25YWl566h55CGXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuS6rea5luWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwMlwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuq3muZbljLpf5Zu95bqT6ZuG5Lit5pSv5LuY566h55CGXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuS6rea5luWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwMlwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuq3muZbljLpf6aKE566X5oyH5qCH566h55CGXCIsXCJzeXNfY29kZVwiOlwiWkJHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuS6rea5luWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwMlwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuq3muZbljLpf5oC76aKE566X5Lya6K6h5qC4566XXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuebkOmDveWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwM1wiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/nm5Dpg73ljLpf6LSi5pS/5LiT5oi35qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkhIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuebkOmDveWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwM1wiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/nm5Dpg73ljLpf6Z2e56iO5pS25YWl566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuebkOmDveWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwM1wiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/nm5Dpg73ljLpf5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuebkOmDveWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwM1wiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/nm5Dpg73ljLpf5oC76aKE566X5Lya6K6h5qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuWTjeawtOWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkyMVwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/lk43msLTljr9f6YOo6Zeo6aKE566X566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuWTjeawtOWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkyMVwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/lk43msLTljr9f6LSi5pS/5LiA5L2T5YyW5L+h5oGv57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5ZON5rC05Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTIxXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+WTjeawtOWOv1/pnZ7nqI7mlLblhaXmlLbnvLTnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5ruo5rW35Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTIyXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+a7qOa1t+WOv+i0ouaUv+S4gOS9k+WMllwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIumYnOWugeWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkyM1wiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/pmJzlroHljr9f6LSi5pS/566h55CG6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiQ1pHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIumYnOWugeWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkyM1wiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/pmJzlroHljr9f6LSi5pS/566h55CG6L2v5Lu255So5Y+LVThcIixcInN5c19jb2RlXCI6XCJZWVpXXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5bCE6Ziz5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTI0XCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+WwhOmYs+WOv1/otKLmlL/pooTnrpfmiafooYzkuIDkvZPljJbns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLlu7rmuZbljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA5MjVcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5bu65rmW5Y6/X+mdnueojuaUtue8tFwiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLlu7rmuZbljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA5MjVcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5bu65rmW5Y6/X+i0ouaUv+S4gOS9k+WMllwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuW7uua5luWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkyNVwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/lu7rmuZbljr9f5Zu95bqT6ZuG5Lit5pSv5LuYXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuS4nOWPsOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDk4MVwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuJzlj7DluIJf6YOo6Zeo6aKE566X57yW5a6h57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuS4nOWPsOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDk4MVwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuJzlj7DluIJf6LSi5pS/5LiA5L2T5YyW5L+h5oGv57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5Lic5Y+w5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTgxXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S4nOWPsOW4gl/otKLmlL/kuJPmiLfmoLjnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJaSEhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5Lic5Y+w5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTgxXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S4nOWPsOW4gl/pnZ7nqI7mlLblhaXmlLbnvLTnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5Lic5Y+w5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTgxXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S4nOWPsOW4gl/mgLvpooTnrpfkvJrorqHmoLjnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5aSn5Liw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTgyXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+Wkp+S4sOWMul/pg6jpl6jpooTnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5aSn5Liw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTgyXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+Wkp+S4sOWMul/otKLmlL/kuIDkvZPljJZcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLlpKfkuLDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA5ODJcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5aSn5Liw5Yy6X+aAu+mihOeul+S8muiuoeaguOeul+i0ouWKoei9r+S7tlwiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLnu4/mtY7mioDmnK/lvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA5OTFcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf57uP5rWO5oqA5pyv5byA5Y+R5Yy6X+mDqOmXqOmihOeul+i9r+S7tlwiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLnu4/mtY7mioDmnK/lvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA5OTFcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf57uP5rWO5oqA5pyv5byA5Y+R5Yy6X+WbveW6k+mbhuS4reaUr+S7mFwiLFwic3lzX2NvZGVcIjpcIkdLWkZcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMDBcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpdcIixcInN5c19jb2RlXCI6XCJaSEhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDAwXCIsXCJzeXNfbmFtZVwiOlwi6ICB6Z2e56iO5pS25YWl5b6B57y057O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTAwMFwiLFwic3lzX25hbWVcIjpcIuaJrOW3nui0ouaUv+S4gOS9k+WMluS/oeaBr+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuW5v+mZteWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTAwMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuW5v+mZteWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTAwMlwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLpgpfmsZ/ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMDNcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLpgpfmsZ/ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMDNcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7ns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi6YKX5rGf5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDAzXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuWuneW6lOWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTAyM1wiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeW+geaUtlwiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLlrp3lupTljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMjNcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi5Luq5b6B5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDgxXCIsXCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566X57yW5Yi2XCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuS7quW+geW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTA4MVwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeaUtue8tFwiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLku6rlvoHluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwODFcIixcInN5c19uYW1lXCI6XCLooYzmlL/kuovkuJrmgKfljZXkvY3lm73mnInotYTkuqfnrqHnkIZcIixcInN5c19jb2RlXCI6XCJaQ0dMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi5Luq5b6B5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDgxXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIumrmOmCruW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTA4NFwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4muWKoeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuaxn+mDveWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTA4OFwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4muWKoee7vOWQiOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpIWVdcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLmsZ/pg73ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwODhcIixcInN5c19uYW1lXCI6XCLmsZ/pg73lvIDlj5HljLrpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjExXCIsXCJjaXR5XCI6XCLplYfmsZ/luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMTAwXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyWXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjExXCIsXCJjaXR5XCI6XCLplYfmsZ/luIJcIixcImNvdW50eVwiOlwi5Lqs5Y+j5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMTAyXCIsXCJzeXNfbmFtZVwiOlwi5a+M5rex5Y2P6YCa6LSi5pS/5LiA5L2T5YyW5Lia5Yqh566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjExXCIsXCJjaXR5XCI6XCLplYfmsZ/luIJcIixcImNvdW50eVwiOlwi5Lqs5Y+j5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMTAyXCIsXCJzeXNfbmFtZVwiOlwi5a+M5rex5Y2P6YCa6Z2e56iO5pS257y057O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMVwiLFwiY2l0eVwiOlwi6ZWH5rGf5biCXCIsXCJjb3VudHlcIjpcIuS6rOWPo+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTEwMlwiLFwic3lzX25hbWVcIjpcIuWvjOa3seWNj+mAmuW3pei1hOe7n+WPkeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkdaVEZcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTFcIixcImNpdHlcIjpcIumVh+axn+W4glwiLFwiY291bnR5XCI6XCLmtqblt57ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjExMTFcIixcInN5c19uYW1lXCI6XCLpg6jpl6jpooTnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjExXCIsXCJjaXR5XCI6XCLplYfmsZ/luIJcIixcImNvdW50eVwiOlwi5ram5bee5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMTExXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyWXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjExXCIsXCJjaXR5XCI6XCLplYfmsZ/luIJcIixcImNvdW50eVwiOlwi5ram5bee5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMTExXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWlXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMVwiLFwiY2l0eVwiOlwi6ZWH5rGf5biCXCIsXCJjb3VudHlcIjpcIuS4ueW+kuWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTExMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+e7vOWQiOS4muWKoeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMVwiLFwiY2l0eVwiOlwi6ZWH5rGf5biCXCIsXCJjb3VudHlcIjpcIuS4uemYs+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTE4MVwiLFwic3lzX25hbWVcIjpcIumDqOmXqOmihOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTFcIixcImNpdHlcIjpcIumVh+axn+W4glwiLFwiY291bnR5XCI6XCLkuLnpmLPluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjExODFcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjExXCIsXCJjaXR5XCI6XCLplYfmsZ/luIJcIixcImNvdW50eVwiOlwi5oms5Lit5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMTgyXCIsXCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMVwiLFwiY2l0eVwiOlwi6ZWH5rGf5biCXCIsXCJjb3VudHlcIjpcIuaJrOS4reW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTE4MlwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTFcIixcImNpdHlcIjpcIumVh+axn+W4glwiLFwiY291bnR5XCI6XCLlj6XlrrnluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjExODNcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaVcIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjExXCIsXCJjaXR5XCI6XCLplYfmsZ/luIJcIixcImNvdW50eVwiOlwi5Y+l5a655biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMTgzXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTIwMFwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/luILmnKznuqdf6YOo6Zeo6aKE566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTIwMFwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/luILmnKznuqdf6Z2e56iO5pS25YWl57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTIwMFwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/luILmnKznuqdf57up5pWI566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiSlhHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTIwMFwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/luILmnKznuqdf6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTIwMFwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/luILmnKznuqdf57u85ZCI5rK756iO57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkhaU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIua1t+mZteWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTIwMlwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/mtbfpmbXljLpf6YOo6Zeo6aKE566X57yW5Yi257O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIua1t+mZteWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTIwMlwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/mtbfpmbXljLpf5Y6/5Yy66LSi5pS/5LiA5L2T5YyWXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi6auY5riv5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjAzXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+mrmOa4r+WMul/pooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5aec5aCw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjA0XCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+WnnOWgsOWMul/pg6jpl6jpooTnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5aec5aCw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjA0XCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+WnnOWgsOWMul/otKLmlL/kuIDkvZPljJbns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTJcIixcImNpdHlcIjpcIuazsOW3nuW4glwiLFwiY291bnR5XCI6XCLlp5zloLDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEyMDRcIixcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5aec5aCw5Yy6X+mdnueojuaUtue8tOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTJcIixcImNpdHlcIjpcIuazsOW3nuW4glwiLFwiY291bnR5XCI6XCLlp5zloLDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEyMDRcIixcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5aec5aCw5Yy6X+mihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTJcIixcImNpdHlcIjpcIuazsOW3nuW4glwiLFwiY291bnR5XCI6XCLljLvoja/pq5jmlrDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEyMDVcIixcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5Yy76I2v6auY5paw5Yy6X+i0ouaUv+S4gOS9k+WMluezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuWFtOWMluW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTI4MVwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/lhbTljJbluIJf6YOo6Zeo6aKE566XXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuWFtOWMluW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTI4MVwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/lhbTljJbluIJf6Z2e56iO5pS257y0XCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuWFtOWMluW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTI4MVwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/lhbTljJbluIJf5Zu95bqT6ZuG5Lit5pSv5LuYXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIumdluaxn+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTI4MlwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/pnZbmsZ/luIJf6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIumdluaxn+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTI4MlwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/pnZbmsZ/luIJf6Z2e56iO5pS25YWl5pS257y0XCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIumdluaxn+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTI4MlwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/pnZbmsZ/luIJf6YOo6Zeo6aKE566X57yW5a6h57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuazsOWFtOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTI4M1wiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/ms7DlhbTluIJf6YOo6Zeo6aKE566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuazsOWFtOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTI4M1wiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/ms7DlhbTluIJf6Z2e56iO5pS25YWl566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuazsOWFtOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTI4M1wiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/ms7DlhbTluIJf6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMwMFwiLFwic3lzX25hbWVcIjpcIumDqOmXqOmihOeul+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMDBcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzAwXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuWuv+WfjuWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMwMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluW5s+WPsOWPiuWbveW6k+mbhuS4reaUr+S7mOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkdLWkZcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLlrr/ln47ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMDJcIixcInN5c19uYW1lXCI6XCLmlrDkuK3lpKfpnZ7nqI7mlLblhaXnrqHnkIZcIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5a6/5Z+O5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzAyXCIsXCJzeXNfbmFtZVwiOlwi5oC76aKE566X5Lya6K6h5qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuWuv+ixq+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMxMVwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtue8tOeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLlrr/osavljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMTFcIixcInN5c19uYW1lXCI6XCLogZTlj4votKLliqHnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJDV0dMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5a6/6LGr5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzExXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuayremYs+WOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMyMlwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLmsq3pmLPljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMjJcIixcInN5c19uYW1lXCI6XCLlm73lupPpm4bkuK3mlK/ku5jjgIHmjIfmoIfnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5rKt6Ziz5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzIyXCIsXCJzeXNfbmFtZVwiOlwi5byA5Y+R5Yy65oC76aKE566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuayremYs+WOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMyMlwiLFwic3lzX25hbWVcIjpcIuaAu+mihOeul+S8muiuoeaguOeul1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLms5fpmLPljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMjNcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYxcIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5rOX5rSq5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzI0XCIsXCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuazl+a0quWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMyNFwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLms5fmtKrljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMjRcIixcInN5c19uYW1lXCI6XCLlm73lupPpm4bkuK3mlK/ku5jns7vnu59cIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5rOX5rSq5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzI0XCIsXCJzeXNfbmFtZVwiOlwi5Zu95bqT6LSm5Yqh57O757ufXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIumrmOaWsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEwMEdYUVwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDFcIixcImNpdHlcIjpcIuWNl+S6rOW4glwiLFwiY291bnR5XCI6XCLljJblt6Xlm63ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAxMDBIR1lcIixcInN5c19uYW1lXCI6XCLljJblrablt6XkuJrlm63ljLrpnZ7nqI7mlLblhaXnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi57uP5rWO5oqA5pyv5byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTAwSktRXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl6LSm5aWXXCIsXCJzeXNfY29kZVwiOlwiRlNaVFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIuWMluW3peWbreWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEwMUhHWVwiLFwic3lzX25hbWVcIjpcIuWMluWtpuW3peS4muWbreWMuumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDFcIixcImNpdHlcIjpcIuWNl+S6rOW4glwiLFwiY291bnR5XCI6XCLnu4/mtY7mioDmnK/lvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAxMDFKS1FcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi5YyW5bel5Zut5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTAySEdZXCIsXCJzeXNfbmFtZVwiOlwi5Lya6K6h5qC4566XXCIsXCJzeXNfY29kZVwiOlwiS1lIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIue7j+a1juaKgOacr+W8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEwMkpLUVwiLFwic3lzX25hbWVcIjpcIuaAu+mihOeul+S8muiuoei0plwiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLplKHlsbHlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMDVLRlFcIixcInN5c19uYW1lXCI6XCLpooTnrpflhoXlpJbmlLbmlK/moLjnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5ruo5rmW5Yy66ams5bGx5byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjExS0ZRXCIsXCJzeXNfbmFtZVwiOlwi6LSm5oi35qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkhIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIuaxn+mYtOW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDI4MWtmcVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIuaxn+mYtOW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDI4MWtmcVwiLFwic3lzX25hbWVcIjpcIui0puaIt+aguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpISFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLlrpzlhbTnjq/np5Hlm61cIixcImNvdW50eV9jb2RlXCI6XCIzMjAyODJLRlFcIixcInN5c19uYW1lXCI6XCLotKLliqHmoLjnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJaSEhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5a6c5YW05byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjgyS0ZRXCIsXCJzeXNfbmFtZVwiOlwi5oC76aKE566X5qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkhIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIue7j+a1juaKgOacr+W8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMwMEpLUVwiLFwic3lzX25hbWVcIjpcIuWvjOa3seWNj+mAmui0ouaUv+S4gOS9k+WMluS4muWKoeeuoeeQhuezu+e7n+i9r+S7tlwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIue7j+a1juaKgOacr+W8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMwMEpLUVwiLFwic3lzX25hbWVcIjpcIui0puWKoeWkhOeQhuezu+e7n++8iOaUtuaUr+WIhuexu+aUuemdqeWNh+e6p+eJiO+8iVwiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLlpKnlroHnu4/lvIDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0MDJKS1FcIixcInN5c19uYW1lXCI6XCLotKbliqHlpITnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi6ZKf5qW85Yy65byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDA0S0ZRXCIsXCJzeXNfbmFtZVwiOlwi5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIumSn+alvOWMuuW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQwNUtGUVwiLFwic3lzX25hbWVcIjpcIueUqOasvuiuoeWIkuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkpIR0xcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLpkp/mpbzljLrlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0MDZLRlFcIixcInN5c19uYW1lXCI6XCLmjIfmoIfnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJaQkdMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi6ZKf5qW85Yy65byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDA3S0ZRXCIsXCJzeXNfbmFtZVwiOlwi5oC76aKE566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiWllTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi57uP5byA5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDEySktRXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/6aKE566X5aSW5Lia5YqhXCIsXCJzeXNfY29kZVwiOlwiWVNXXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi57uP5byA5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDEySktRXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS257y057O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIue7j+W8gOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQxMkpLUVwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLmrabov5vpq5jmlrDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0MTNHWFFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbkv6Hmga/ns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLmuqfpmLPkuK3lhbPmnZFcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0ODFaR0NcIixcInN5c19uYW1lXCI6XCLnlKjlj4tVOFIxMOi0ouaUv+S4gOS9k+WMluW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIua6p+mYs+S4reWFs+adkeW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQ4MVpHQ0tGXCIsXCJzeXNfbmFtZVwiOlwi55So5Y+LVThSMTDotKLmlL/kuIDkvZPljJblubPlj7BcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLnm7jln47ljLrlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1MDdLRlFcIixcInN5c19uYW1lXCI6XCLlvIDlj5HljLrotKLmlL/ns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLluLjnhp/luILpq5jmlrDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODFHWFFcIixcInN5c19uYW1lXCI6XCLpq5jmlrDljLrmgLvpooTnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJaWVNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLmmIblsbHluILlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODNLRlFcIixcInN5c19uYW1lXCI6XCLlvIDlj5HljLrlhazlhbHotKLmlL/mnI3liqHlubPlj7BcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlpKrku5PluILmlrDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODVYUVwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlpKrku5PluILmlrDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODZYUVwiLFwic3lzX25hbWVcIjpcIuS8muiuoeaguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlpKrku5PluILmlrDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODdYUVwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MDBLRlFcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi6IuP6YCa5Zut5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjAwU1RZXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIumAmuW3nua5vuekuuiMg+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYwMFRaV1wiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MDFLRlFcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaVcIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAwS0ZRXCIsXCJzeXNfbmFtZVwiOlwi55So5Y+LR1JQLVU4566h55CG6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5Z+O5Y2X5paw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTAwQ1pYUVwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/ln47ljZfmlrDljLpf5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuWfjuWNl+aWsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwMUNaWFFcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5Z+O5Y2X5paw5Yy6X+aAu+mihOeul+i0puWKoeWkhOeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLljJblt6Xlm63ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMDBIR1lcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi5byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDAwS0ZRXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl5pS257y0XCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuenkeaKgOaWsOWfjlwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTAwMEtKQ1wiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLonIDlhogt55im6KW/5rmW6aOO5pmv5ZCN6IOc5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDAwU1hIXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/6aKE566X5oyH5qCH566h55CGXCIsXCJzeXNfY29kZVwiOlwiWkJHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuicgOWGiC3nmKbopb/muZbpo47mma/lkI3og5zljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMDBTWEhcIixcInN5c19uYW1lXCI6XCLmgLvpooTnrpfkvJrorqHmoLjnrpdcIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi5byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDAxS0ZRXCIsXCJzeXNfbmFtZVwiOlwi5LiA5L2T5YyW57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi5byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDAyS0ZRXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIumrmOmCruW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTA4NEtGUVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4muWKoeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMVwiLFwiY2l0eVwiOlwi6ZWH5rGf5biCXCIsXCJjb3VudHlcIjpcIuaWsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTEwMFhRXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyWXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjAwXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+W4guacrOe6p1/ooYzmlL/nrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJYWkdMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5rmW5ruo5paw5Z+OXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzAwSEJYQ1wiLFwic3lzX25hbWVcIjpcIuaWsOS4reWkp+i0ouWKoei9r+S7tlwiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLnu4/lvIDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMDBKS1FcIixcInN5c19uYW1lXCI6XCLmlrDkuK3lpKflhazlhbHotKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLmtIvmsrPmlrDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMDBZSFhRXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuWuv+ixq+WMuuW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMxMUtGUVwiLFwic3lzX25hbWVcIjpcIuW8gOWPkeWMuuaWsOS4reWkp+i0ouWKoeaguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLms5fmtKrljr/lvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMjRLRlFcIixcInN5c19uYW1lXCI6XCLlvIDlj5HljLrotKbliqHns7vnu59cIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9XTtcclxuXHJcblxyXG5cclxuXHJcblx0ZXhwb3J0IGZ1bmN0aW9uIGdldENvdW50eUJ5Q29kZShjb2RlKXtcclxuXHRcdC8vdmFyIGpzb2JqID0gSlNPTi5wYXJzZShvcmlnaW5fcGxhY2VfYXJyKTtcclxuXHRcdHZhciBqc29iaiA9IG9yaWdpbl9wbGFjZV9hcnI7XHJcblxyXG5cdFx0dmFyIGpzb25sZW5ndGggPSBqc29iai5sZW5ndGg7XHJcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGpzb25sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRpZihqc29ialtpXS5jb3VudHlfY29kZSA9PSBjb2RlKXtcclxuXHRcdFx0XHRyZXR1cm4ganNvYmpbaV0uY2l0eStqc29ialtpXS5jb3VudHk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBjb2RlO1xyXG5cdH1cclxuXHJcblx0ZXhwb3J0IGZ1bmN0aW9uIGdldENvZGVCeUNvdW50eShwbGFjZSl7XHJcblx0XHRwbGFjZSA9IHBsYWNlLnJlcGxhY2UoL1xccypcXHQqL2dpbSxcIlwiKTtcclxuXHRcdC8vdmFyIGpzb2JqID0gSlNPTi5wYXJzZShvcmlnaW5fcGxhY2VfYXJyKTtcclxuXHRcdHZhciBqc29iaiA9IG9yaWdpbl9wbGFjZV9hcnI7XHJcblxyXG5cdFx0dmFyIGpzb25sZW5ndGggPSBqc29iai5sZW5ndGg7XHJcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGpzb25sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRpZihqc29ialtpXS5jaXR5ID09PSBcIlwiIHx8IGpzb2JqW2ldLmNpdHkgPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRpZihqc29ialtpXS5jb3VudHkgPT09IFwiXCIgfHwganNvYmpbaV0uY291bnR5ID09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0aWYoKHBsYWNlLmluZGV4T2YoanNvYmpbaV0uY2l0eSkgIT0gLTEpICYmIChwbGFjZS5pbmRleE9mKGpzb2JqW2ldLmNvdW50eSkgIT0gLTEpKXtcclxuXHRcdFx0XHRyZXR1cm4ganNvYmpbaV0uY291bnR5X2NvZGU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBwbGFjZTtcclxuXHR9XHJcblxyXG5cdGV4cG9ydCBmdW5jdGlvbiBnZXRTeXN0ZW1OYW1lQnlJZChpZCl7XHJcblx0XHR2YXIgdGVtSnNvbiA9IHN5c3RlbV9hcnI7XHJcblx0XHR2YXIgc3lzX3NpemUgPSB0ZW1Kc29uLmxlbmd0aDtcclxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3lzX3NpemU7IGkrKykge1xyXG5cdFx0XHRpZih0ZW1Kc29uW2ldLnN5c19pZCA9PSBpZCl7XHJcblx0XHRcdFx0cmV0dXJuIHRlbUpzb25baV0uc3lzX25hbWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBpZDtcclxuXHR9XHJcblxyXG5cclxuXHJcblx0ZXhwb3J0IGZ1bmN0aW9uIGdldElkQnlTeXN0ZW1OYW1lKG5hbWUpe1xyXG5cdFx0dmFyIHRlbUpzb24gPSBzeXN0ZW1fYXJyO1xyXG5cdFx0dmFyIHN5c19zaXplID0gdGVtSnNvbi5sZW5ndGg7XHJcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5c19zaXplOyBpKyspIHtcclxuXHRcdFx0aWYodGVtSnNvbltpXS5zeXNfbmFtZSA9PSBuYW1lKXtcclxuXHRcdFx0XHRyZXR1cm4gdGVtSnNvbltpXS5zeXNfaWQ7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBuYW1lO1xyXG5cdH1cclxuXHJcblx0ZXhwb3J0IGZ1bmN0aW9uIGdldENvZGVCeVN5c3RlbU5hbWUobmFtZSl7XHJcblx0XHR2YXIganNvYmogPSBvcmlnaW5fcGxhY2VfYXJyO1xyXG5cclxuXHRcdHZhciBqc29ubGVuZ3RoID0ganNvYmoubGVuZ3RoO1xyXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBqc29ubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0aWYoanNvYmpbaV0uc3lzX25hbWUgPT0gbmFtZSl7XHJcblx0XHRcdFx0cmV0dXJuIGpzb2JqW2ldLnN5c19jb2RlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbmFtZTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSW50ZXJmYWNlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cInV0aWxIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vY29uZmlncy90cy9jdXN0b21BbGVydC50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cInJlYWRQbGFjZWRpdmlzaW9uLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vY29uZmlncy90cy9Db25maWdzSGVscGVyLnRzXCIvPlxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcblxyXG4gIGV4cG9ydCB2YXIgY29udGV4dCA9ICcva3ViZXJuZXRlcyc7XHJcbiAgZXhwb3J0IHZhciBoYXNoID0gJyMnICsgY29udGV4dDtcclxuICBleHBvcnQgdmFyIGRlZmF1bHRSb3V0ZSA9IGhhc2ggKyAnL2FwcHMnO1xyXG4gIGV4cG9ydCB2YXIgcGx1Z2luTmFtZSA9ICdLdWJlcm5ldGVzJztcclxuICBleHBvcnQgdmFyIHBsdWdpblBhdGggPSAncGx1Z2lucy9rdWJlcm5ldGVzLyc7XHJcbiAgZXhwb3J0IHZhciB0ZW1wbGF0ZVBhdGggPSBwbHVnaW5QYXRoICsgJ2h0bWwvJztcclxuICBleHBvcnQgdmFyIGxvZzpMb2dnaW5nLkxvZ2dlciA9IExvZ2dlci5nZXQocGx1Z2luTmFtZSk7XHJcblxyXG4gIGV4cG9ydCB2YXIga2VlcFBvbGxpbmdNb2RlbCA9IHRydWU7XHJcblxyXG4gIGV4cG9ydCB2YXIgZGVmYXVsdEljb25VcmwgPSBDb3JlLnVybChcIi9pbWcva3ViZXJuZXRlcy5zdmdcIik7XHJcbiAgZXhwb3J0IHZhciBob3N0SWNvblVybCA9IENvcmUudXJsKFwiL2ltZy9ob3N0LnN2Z1wiKTtcclxuXHJcbiAgLy8gdGhpcyBnZXRzIHNldCBhcyBhIHByZS1ib290c3RyYXAgdGFza1xyXG4gIGV4cG9ydCB2YXIgb3NDb25maWc6S3ViZXJuZXRlc0NvbmZpZyA9IHVuZGVmaW5lZDtcclxuICBleHBvcnQgdmFyIG1hc3RlclVybCA9IFwiXCI7XHJcblxyXG4gIGV4cG9ydCB2YXIgZGVmYXVsdEFwaVZlcnNpb24gPSBcInYxXCI7XHJcbiAgZXhwb3J0IHZhciBkZWZhdWx0T1NBcGlWZXJzaW9uID0gXCJ2MVwiO1xyXG4gIGV4cG9ydCB2YXIgbGFiZWxGaWx0ZXJUZXh0U2VwYXJhdG9yID0gXCIsXCI7XHJcblxyXG4gIGV4cG9ydCB2YXIgZGVmYXVsdE5hbWVzcGFjZSA9IFwiZGVmYXVsdFwiO1xyXG5cclxuICBleHBvcnQgdmFyIGFwcFN1ZmZpeCA9IFwiLmFwcFwiO1xyXG5cclxuICAvLyBrdWJlcm5ldGVzIHNlcnZpY2UgbmFtZXNcclxuICBleHBvcnQgdmFyIGtpYmFuYVNlcnZpY2VOYW1lID0gXCJraWJhbmFcIjtcclxuICBleHBvcnQgdmFyIGZhYnJpYzhGb3JnZVNlcnZpY2VOYW1lID0gXCJmYWJyaWM4LWZvcmdlXCI7XHJcbiAgZXhwb3J0IHZhciBnb2dzU2VydmljZU5hbWUgPSBcImdvZ3NcIjtcclxuICBleHBvcnQgdmFyIGplbmtpbnNTZXJ2aWNlTmFtZSA9IFwiamVua2luc1wiO1xyXG4gIGV4cG9ydCB2YXIgYXBpbWFuU2VydmljZU5hbWUgPSAnYXBpbWFuJztcclxuICBleHBvcnQgdmFyIGlzT3BlblNoaWZ0ID0gdHJ1ZTtcclxuXHJcbiAgZXhwb3J0IHZhciBzc2hTZWNyZXREYXRhS2V5cyA9IFtcInNzaC1rZXlcIiwgXCJzc2gta2V5LnB1YlwiXTtcclxuICBleHBvcnQgdmFyIGh0dHBzU2VjcmV0RGF0YUtleXMgPSBbXCJ1c2VybmFtZVwiLCBcInBhc3N3b3JkXCJdO1xyXG5cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGt1YmVybmV0ZXNOYW1lc3BhY2VQYXRoKCkge1xyXG4gICAgdmFyIG5zID0gY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcclxuICAgIGlmIChucykge1xyXG4gICAgICByZXR1cm4gXCIvbmFtZXNwYWNlcy9cIiArIG5zO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gYXBpUHJlZml4KCkge1xyXG4gICAgdmFyIHByZWZpeCA9IENvcmUucGF0aEdldChvc0NvbmZpZywgWydhcGknLCAnazhzJywgJ3ByZWZpeCddKTtcclxuICAgIGlmICghcHJlZml4KSB7XHJcbiAgICAgIHByZWZpeCA9ICdhcGknO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIENvcmUudHJpbUxlYWRpbmcocHJlZml4LCAnLycpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIG9zQXBpUHJlZml4KCkge1xyXG4gICAgdmFyIHByZWZpeCA9IENvcmUucGF0aEdldChvc0NvbmZpZywgWydhcGknLCAnb3BlbnNoaWZ0JywgJ3ByZWZpeCddKTtcclxuICAgIGlmICghcHJlZml4KSB7XHJcbiAgICAgIHByZWZpeCA9ICdvYXBpJztcclxuICAgIH1cclxuICAgIHZhciBhbnN3ZXIgPSBDb3JlLnRyaW1MZWFkaW5nKHByZWZpeCwgJy8nKTtcclxuICAgIGlmICghaXNPcGVuU2hpZnQpIHtcclxuICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihhcGlQcmVmaXgoKSwgZGVmYXVsdE9TQXBpVmVyc2lvbiwgXCJwcm94eVwiLCBrdWJlcm5ldGVzTmFtZXNwYWNlUGF0aCgpLCBcInNlcnZpY2VzL3RlbXBsYXRlc1wiLCBhbnN3ZXIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFuc3dlcjtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBtYXN0ZXJBcGlVcmwoKSB7XHJcbiAgICByZXR1cm4gbWFzdGVyVXJsIHx8IFwiXCI7XHJcbiAgfVxyXG5cclxuICAvKiogV0FSTklORyAtIHRoaXMgZXhjbHVkZXMgdGhlIGhvc3QgbmFtZSAtIHlvdSBwcm9iYWJseSB3YW50IHRvIHVzZToga3ViZXJuZXRlc0FwaVVybCgpIGluc3RlYWQhISAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBrdWJlcm5ldGVzQXBpUHJlZml4KCkge1xyXG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihhcGlQcmVmaXgoKSwgZGVmYXVsdEFwaVZlcnNpb24pO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIG9wZW5zaGlmdEFwaVByZWZpeCgpIHtcclxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4ob3NBcGlQcmVmaXgoKSwgZGVmYXVsdE9TQXBpVmVyc2lvbik7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gcHJlZml4Rm9yVHlwZSh0eXBlOnN0cmluZykge1xyXG4gICAgaWYgKHR5cGUgPT09IFdhdGNoVHlwZXMuTkFNRVNQQUNFUykge1xyXG4gICAgICByZXR1cm4ga3ViZXJuZXRlc0FwaVByZWZpeCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKF8uYW55KE5hbWVzcGFjZWRUeXBlcy5rOHNUeXBlcywgKHQpID0+IHQgPT09IHR5cGUpKSB7XHJcbiAgICAgIHJldHVybiBrdWJlcm5ldGVzQXBpUHJlZml4KCk7XHJcbiAgICB9XHJcbiAgICBpZiAoXy5hbnkoTmFtZXNwYWNlZFR5cGVzLm9zVHlwZXMsICh0KSA9PiB0ID09PSB0eXBlKSkge1xyXG4gICAgICByZXR1cm4gb3BlbnNoaWZ0QXBpUHJlZml4KCk7XHJcbiAgICB9XHJcbiAgICAvLyBsZXRzIGFzc3VtZSBpdHMgYW4gT3BlblNoaWZ0IGV4dGVuc2lvbiB0eXBlXHJcbiAgICByZXR1cm4gb3BlbnNoaWZ0QXBpUHJlZml4KCk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24ga3ViZXJuZXRlc0FwaVVybCgpIHtcclxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4obWFzdGVyQXBpVXJsKCksIGt1YmVybmV0ZXNBcGlQcmVmaXgoKSk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gb3BlbnNoaWZ0QXBpVXJsKCkge1xyXG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihtYXN0ZXJBcGlVcmwoKSwgb3BlbnNoaWZ0QXBpUHJlZml4KCkpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHJlc291cmNlc1VyaUZvcktpbmQodHlwZSwgbnMgPSBudWxsKSB7XHJcbiAgICBpZiAoIW5zKSB7XHJcbiAgICAgIG5zID0gY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4obWFzdGVyQXBpVXJsKCksIHByZWZpeEZvclR5cGUodHlwZSksIG5hbWVzcGFjZVBhdGhGb3JLaW5kKHR5cGUsIG5zKSk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gdXJpVGVtcGxhdGVGb3JLdWJlcm5ldGVzS2luZCh0eXBlKSB7XHJcbiAgICB2YXIgdXJsVGVtcGxhdGUgPSAnJztcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIFdhdGNoVHlwZXMuTkFNRVNQQUNFUzpcclxuICAgICAgY2FzZSBcIk5hbWVzcGFjZXNcIjpcclxuICAgICAgICB1cmxUZW1wbGF0ZSA9IFVybEhlbHBlcnMuam9pbignbmFtZXNwYWNlcycpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFdhdGNoVHlwZXMuT0FVVEhfQ0xJRU5UUzpcclxuICAgICAgY2FzZSBcIk9BdXRoQ2xpZW50c1wiOlxyXG4gICAgICBjYXNlIFwiT0F1dGhDbGllbnRcIjpcclxuICAgICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKCdvYXV0aGNsaWVudHMnKTtcclxuICAgICAgY2FzZSBXYXRjaFR5cGVzLlBST0pFQ1RTOlxyXG4gICAgICBjYXNlIFwiUHJvamVjdHNcIjpcclxuICAgICAgICB1cmxUZW1wbGF0ZSA9IFVybEhlbHBlcnMuam9pbigncHJvamVjdHMnKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB1cmxUZW1wbGF0ZSA9IFVybEhlbHBlcnMuam9pbignbmFtZXNwYWNlcy86bmFtZXNwYWNlJywgdHlwZSwgJzppZCcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVybFRlbXBsYXRlO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIG5hbWVzcGFjZVBhdGhGb3JLaW5kKHR5cGUsIG5zKSB7XHJcbiAgICB2YXIgdXJsVGVtcGxhdGUgPSAnJztcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIFdhdGNoVHlwZXMuTkFNRVNQQUNFUzpcclxuICAgICAgY2FzZSBcIk5hbWVzcGFjZXNcIjpcclxuICAgICAgY2FzZSBcIk5hbWVzcGFjZVwiOlxyXG4gICAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oJ25hbWVzcGFjZXMnKTtcclxuICAgICAgY2FzZSBXYXRjaFR5cGVzLk5PREVTOlxyXG4gICAgICBjYXNlIFwiTm9kZXNcIjpcclxuICAgICAgY2FzZSBcIm5vZGVcIjpcclxuICAgICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKCdub2RlcycpO1xyXG4gICAgICBjYXNlIFdhdGNoVHlwZXMuUFJPSkVDVFM6XHJcbiAgICAgIGNhc2UgXCJQcm9qZWN0c1wiOlxyXG4gICAgICBjYXNlIFwiUHJvamVjdFwiOlxyXG4gICAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oJ3Byb2plY3RzJyk7XHJcbiAgICAgIGNhc2UgV2F0Y2hUeXBlcy5PQVVUSF9DTElFTlRTOlxyXG4gICAgICBjYXNlIFwiT0F1dGhDbGllbnRzXCI6XHJcbiAgICAgIGNhc2UgXCJPQXV0aENsaWVudFwiOlxyXG4gICAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oJ29hdXRoY2xpZW50cycpO1xyXG4gICAgICBjYXNlIFdhdGNoVHlwZXMuUEVSU0lTVEVOVF9WT0xVTUVTOlxyXG4gICAgICBjYXNlIFwiUGVyc2lzdGVudFZvbHVtZXNcIjpcclxuICAgICAgY2FzZSBcIlBlcnNpc3RlbnRWb2x1bWVcIjpcclxuICAgICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKCdwZXJzaXN0ZW50dm9sdW1lcycpO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oJ25hbWVzcGFjZXMnLCBucywgdHlwZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZXZhbHVlIGZyb20gdGhlIGluamVjdG9yIGlmIGl0cyBhdmFpbGFibGUgb3IgbnVsbFxyXG4gICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBpbmplY3Q8VD4obmFtZSk6VCB7XHJcbiAgICB2YXIgaW5qZWN0b3IgPSBIYXd0aW9Db3JlLmluamVjdG9yO1xyXG4gICAgcmV0dXJuIGluamVjdG9yID8gaW5qZWN0b3IuZ2V0PFQ+KG5hbWUpIDogbnVsbDtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZXNvdXJjZSh0aGluZzpzdHJpbmcsIHVybFRlbXBsYXRlOnN0cmluZywgJHJlc291cmNlOiBuZy5yZXNvdXJjZS5JUmVzb3VyY2VTZXJ2aWNlLCBLdWJlcm5ldGVzTW9kZWwpIHtcclxuICAgIHZhciBwcmVmaXggPSBwcmVmaXhGb3JUeXBlKHRoaW5nKTtcclxuICAgIGlmICghcHJlZml4KSB7XHJcbiAgICAgIGxvZy5kZWJ1ZyhcIkludmFsaWQgdHlwZSBnaXZlbjogXCIsIHRoaW5nKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHBhcmFtcyA9IDxhbnk+IHtcclxuICAgICAgbmFtZXNwYWNlOiBjdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZVxyXG4gICAgfVxyXG4gICAgc3dpdGNoICh0aGluZykge1xyXG4gICAgICBjYXNlIFdhdGNoVHlwZXMuTkFNRVNQQUNFUzpcclxuICAgICAgY2FzZSBXYXRjaFR5cGVzLk9BVVRIX0NMSUVOVFM6XHJcbiAgICAgIGNhc2UgV2F0Y2hUeXBlcy5OT0RFUzpcclxuICAgICAgY2FzZSBXYXRjaFR5cGVzLlBST0pFQ1RTOlxyXG4gICAgICBjYXNlIFdhdGNoVHlwZXMuT0FVVEhfQ0xJRU5UUzpcclxuICAgICAgY2FzZSBXYXRjaFR5cGVzLlBFUlNJU1RFTlRfVk9MVU1FUzpcclxuICAgICAgcGFyYW1zID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHVybCA9IFVybEhlbHBlcnMuam9pbihtYXN0ZXJBcGlVcmwoKSwgcHJlZml4LCB1cmxUZW1wbGF0ZSk7XHJcbiAgICBsb2cuZGVidWcoXCJVcmwgZm9yIFwiLCB0aGluZywgXCI6IFwiLCB1cmwpO1xyXG4gICAgdmFyIHJlc291cmNlID0gJHJlc291cmNlKHVybCwgbnVsbCwge1xyXG4gICAgICBxdWVyeTogeyBtZXRob2Q6ICdHRVQnLCBpc0FycmF5OiBmYWxzZSwgcGFyYW1zOiBwYXJhbXN9LFxyXG4gICAgICBjcmVhdGU6IHsgbWV0aG9kOiAnUE9TVCcsIHBhcmFtczogcGFyYW1zfSxcclxuICAgICAgc2F2ZTogeyBtZXRob2Q6ICdQVVQnLCBwYXJhbXM6IHBhcmFtc30sXHJcbiAgICAgIGRlbGV0ZTogeyBtZXRob2Q6ICdERUxFVEUnLCBwYXJhbXM6IF8uZXh0ZW5kKHtcclxuICAgICAgICBpZDogJ0BpZCdcclxuICAgICAgfSwgcGFyYW1zKX1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlc291cmNlO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGltYWdlUmVwb3NpdG9yaWVzUmVzdFVSTCgpIHtcclxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4ob3BlbnNoaWZ0QXBpVXJsKCksIGt1YmVybmV0ZXNOYW1lc3BhY2VQYXRoKCksIFwiL2ltYWdlc3RyZWFtc1wiKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBkZXBsb3ltZW50Q29uZmlnc1Jlc3RVUkwoKSB7XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKG9wZW5zaGlmdEFwaVVybCgpLCBrdWJlcm5ldGVzTmFtZXNwYWNlUGF0aCgpLCBcIi9kZXBsb3ltZW50Y29uZmlnc1wiKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBidWlsZHNSZXN0VVJMKCkge1xyXG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihvcGVuc2hpZnRBcGlVcmwoKSwga3ViZXJuZXRlc05hbWVzcGFjZVBhdGgoKSwgXCIvYnVpbGRzXCIpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ29uZmlnSG9va3NSZXN0VVJMKCkge1xyXG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihvcGVuc2hpZnRBcGlVcmwoKSwga3ViZXJuZXRlc05hbWVzcGFjZVBhdGgoKSwgXCIvYnVpbGRjb25maWdob29rc1wiKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBidWlsZENvbmZpZ3NSZXN0VVJMKCkge1xyXG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihvcGVuc2hpZnRBcGlVcmwoKSwga3ViZXJuZXRlc05hbWVzcGFjZVBhdGgoKSwgXCIvYnVpbGRjb25maWdzXCIpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHJvdXRlc1Jlc3RVUkwoKSB7XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKG9wZW5zaGlmdEFwaVVybCgpLCBrdWJlcm5ldGVzTmFtZXNwYWNlUGF0aCgpLCBcIi9yb3V0ZXNcIik7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gdGVtcGxhdGVzUmVzdFVSTCgpIHtcclxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4ob3BlbnNoaWZ0QXBpVXJsKCksIGt1YmVybmV0ZXNOYW1lc3BhY2VQYXRoKCksIFwiL3RlbXBsYXRlc1wiKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXROYW1lc3BhY2UoZW50aXR5KSB7XHJcbiAgICB2YXIgYW5zd2VyID0gQ29yZS5wYXRoR2V0KGVudGl0eSwgW1wibWV0YWRhdGFcIiwgXCJuYW1lc3BhY2VcIl0pO1xyXG4gICAgcmV0dXJuIGFuc3dlciA/IGFuc3dlciA6IGN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0TGFiZWxzKGVudGl0eSkge1xyXG4gICAgdmFyIGFuc3dlciA9IENvcmUucGF0aEdldChlbnRpdHksIFtcIm1ldGFkYXRhXCIsIFwibGFiZWxzXCJdKTtcclxuICAgIHJldHVybiBhbnN3ZXIgPyBhbnN3ZXIgOiB7fTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXROYW1lKGVudGl0eSkge1xyXG4gICAgaWYgKGFuZ3VsYXIuaXNTdHJpbmcoZW50aXR5KSkge1xyXG4gICAgICByZXR1cm4gZW50aXR5O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIENvcmUucGF0aEdldChlbnRpdHksIFtcIm1ldGFkYXRhXCIsIFwibmFtZVwiXSkgfHwgQ29yZS5wYXRoR2V0KGVudGl0eSwgXCJuYW1lXCIpIHx8IENvcmUucGF0aEdldChlbnRpdHksIFwiaWRcIik7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0S2luZChlbnRpdHkpIHtcclxuICAgIHJldHVybiBDb3JlLnBhdGhHZXQoZW50aXR5LCBbXCJtZXRhZGF0YVwiLCBcImtpbmRcIl0pIHx8IENvcmUucGF0aEdldChlbnRpdHksIFwia2luZFwiKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3RvcihlbnRpdHkpIHtcclxuICAgIHJldHVybiBDb3JlLnBhdGhHZXQoZW50aXR5LCBbXCJzcGVjXCIsIFwic2VsZWN0b3JcIl0pO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldEhvc3QocG9kKSB7XHJcbiAgICByZXR1cm4gQ29yZS5wYXRoR2V0KHBvZCwgW1wic3BlY1wiLCBcImhvc3RcIl0pIHx8IENvcmUucGF0aEdldChwb2QsIFtcInNwZWNcIiwgXCJub2RlTmFtZVwiXSkgfHwgQ29yZS5wYXRoR2V0KHBvZCwgW1wic3RhdHVzXCIsIFwiaG9zdElQXCJdKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRTdGF0dXMocG9kKSB7XHJcbiAgICByZXR1cm4gQ29yZS5wYXRoR2V0KHBvZCwgW1wic3RhdHVzXCIsIFwicGhhc2VcIl0pO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldFBvcnRzKHNlcnZpY2UpIHtcclxuICAgIHJldHVybiBDb3JlLnBhdGhHZXQoc2VydmljZSwgW1wic3BlY1wiLCBcInBvcnRzXCJdKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRDcmVhdGlvblRpbWVzdGFtcChlbnRpdHkpIHtcclxuICAgIHJldHVybiBDb3JlLnBhdGhHZXQoZW50aXR5LCBbXCJtZXRhZGF0YVwiLCBcImNyZWF0aW9uVGltZXN0YW1wXCJdKTtcclxuICB9O1xyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0QW5ub3RhdGlvbnMoZW50aXR5KXtcclxuICAgIHJldHVybiBDb3JlLnBhdGhHZXQoZW50aXR5LFtcIm1ldGFkYXRhXCIsXCJhbm5vdGF0aW9uc1wiXSk7XHJcbiAgfVxyXG5cclxuICAvL3ZhciBmYWJyaWNEb21haW4gPSBGYWJyaWMuam14RG9tYWluO1xyXG4gIHZhciBmYWJyaWNEb21haW4gPSBcImlvLmZhYnJpYzhcIjtcclxuICBleHBvcnQgdmFyIG1iZWFuID0gZmFicmljRG9tYWluICsgXCI6dHlwZT1LdWJlcm5ldGVzXCI7XHJcbiAgZXhwb3J0IHZhciBtYW5hZ2VyTUJlYW4gPSBmYWJyaWNEb21haW4gKyBcIjp0eXBlPUt1YmVybmV0ZXNNYW5hZ2VyXCI7XHJcbiAgZXhwb3J0IHZhciBhcHBWaWV3TUJlYW4gPSBmYWJyaWNEb21haW4gKyBcIjp0eXBlPUFwcFZpZXdcIjtcclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGlzS3ViZXJuZXRlcyh3b3Jrc3BhY2U/KSB7XHJcbiAgICAvLyByZXR1cm4gd29ya3NwYWNlLnRyZWVDb250YWluc0RvbWFpbkFuZFByb3BlcnRpZXMoZmFicmljRG9tYWluLCB7dHlwZTogXCJLdWJlcm5ldGVzXCJ9KTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGlzS3ViZXJuZXRlc1RlbXBsYXRlTWFuYWdlcih3b3Jrc3BhY2U/KSB7XHJcbiAgICAvLyByZXR1cm4gd29ya3NwYWNlLnRyZWVDb250YWluc0RvbWFpbkFuZFByb3BlcnRpZXMoZmFicmljRG9tYWluLCB7dHlwZTogXCJLdWJlcm5ldGVzVGVtcGxhdGVNYW5hZ2VyXCJ9KTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGlzQXBwVmlldyh3b3Jrc3BhY2U/KSB7XHJcbiAgICAvLyByZXR1cm4gd29ya3NwYWNlLnRyZWVDb250YWluc0RvbWFpbkFuZFByb3BlcnRpZXMoZmFicmljRG9tYWluLCB7dHlwZTogXCJBcHBWaWV3XCJ9KTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldFN0cmlwcGVkUGF0aE5hbWUoKTpzdHJpbmcge1xyXG4gICAgdmFyIHBhdGhOYW1lID0gQ29yZS50cmltTGVhZGluZygodGhpcy4kbG9jYXRpb24ucGF0aCgpIHx8ICcvJyksIFwiI1wiKTtcclxuICAgIHBhdGhOYW1lID0gcGF0aE5hbWUucmVwbGFjZSgvXlxcLy8sICcnKTtcclxuICAgIHJldHVybiBwYXRoTmFtZTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBsaW5rQ29udGFpbnMoLi4ud29yZHM6U3RyaW5nW10pOmJvb2xlYW4ge1xyXG4gICAgdmFyIHBhdGhOYW1lID0gdGhpcy5nZXRTdHJpcHBlZFBhdGhOYW1lKCk7XHJcbiAgICByZXR1cm4gXy5ldmVyeSh3b3JkcywgKHdvcmQ6c3RyaW5nKSA9PiBwYXRoTmFtZS5pbmRleE9mKHdvcmQpICE9PSAwKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGxpbmsgaXMgYWN0aXZlLiBUaGUgbGluayBjYW4gb21pdCB0aGUgbGVhZGluZyAjIG9yIC8gaWYgbmVjZXNzYXJ5LlxyXG4gICAqIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIG9mIHRoZSBVUkwgYXJlIGlnbm9yZWQgaW4gdGhlIGNvbXBhcmlzb24uXHJcbiAgICogQG1ldGhvZCBpc0xpbmtBY3RpdmVcclxuICAgKiBAcGFyYW0ge1N0cmluZ30gaHJlZlxyXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgdGhlIGdpdmVuIGxpbmsgaXMgYWN0aXZlXHJcbiAgICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGlzTGlua0FjdGl2ZShocmVmOnN0cmluZyk6Ym9vbGVhbiB7XHJcbiAgICAvLyBsZXRzIHRyaW0gdGhlIGxlYWRpbmcgc2xhc2hcclxuICAgIHZhciBwYXRoTmFtZSA9IGdldFN0cmlwcGVkUGF0aE5hbWUoKTtcclxuXHJcbiAgICB2YXIgbGluayA9IENvcmUudHJpbUxlYWRpbmcoaHJlZiwgXCIjXCIpO1xyXG4gICAgbGluayA9IGxpbmsucmVwbGFjZSgvXlxcLy8sICcnKTtcclxuICAgIC8vIHN0cmlwIGFueSBxdWVyeSBhcmd1bWVudHNcclxuICAgIHZhciBpZHggPSBsaW5rLmluZGV4T2YoJz8nKTtcclxuICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICBsaW5rID0gbGluay5zdWJzdHJpbmcoMCwgaWR4KTtcclxuICAgIH1cclxuICAgIGlmICghcGF0aE5hbWUubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBsaW5rID09PSBwYXRoTmFtZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBfLnN0YXJ0c1dpdGgocGF0aE5hbWUsIGxpbmspO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHNldEpzb24oJHNjb3BlLCBpZCwgY29sbGVjdGlvbikge1xyXG4gICAgJHNjb3BlLmlkID0gaWQ7XHJcbiAgICBpZiAoISRzY29wZS5mZXRjaGVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghaWQpIHtcclxuICAgICAgJHNjb3BlLmpzb24gPSAnJztcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCFjb2xsZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBpdGVtID0gY29sbGVjdGlvbi5maW5kKChpdGVtKSA9PiB7IHJldHVybiBnZXROYW1lKGl0ZW0pID09PSBpZDsgfSk7XHJcbiAgICBpZiAoaXRlbSkge1xyXG4gICAgICAkc2NvcGUuanNvbiA9IGFuZ3VsYXIudG9Kc29uKGl0ZW0sIHRydWUpO1xyXG4gICAgICAkc2NvcGUuaXRlbSA9IGl0ZW07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAkc2NvcGUuaWQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICRzY29wZS5qc29uID0gJyc7XHJcbiAgICAgICRzY29wZS5pdGVtID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgbGFiZWxzIHRleHQgc3RyaW5nIHVzaW5nIHRoZSA8Y29kZT5rZXkxPXZhbHVlMSxrZXkyPXZhbHVlMiwuLi4uPC9jb2RlPiBmb3JtYXRcclxuICAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24gbGFiZWxzVG9TdHJpbmcobGFiZWxzLCBzZXBlcmF0b3JUZXh0ID0gbGFiZWxGaWx0ZXJUZXh0U2VwYXJhdG9yKSB7XHJcbiAgICB2YXIgYW5zd2VyID0gXCJcIjtcclxuICAgIGFuZ3VsYXIuZm9yRWFjaChsYWJlbHMsICh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgIHZhciBzZXBhcmF0b3IgPSBhbnN3ZXIgPyBzZXBlcmF0b3JUZXh0IDogXCJcIjtcclxuXHJcbiAgICAgIGFuc3dlciArPSBzZXBhcmF0b3IgKyBrZXkgKyBcIj1cIiArIHZhbHVlO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gYW5zd2VyO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zvcm1hdChyZXBsaWNhcyl7ICAgXHJcbiAgICB2YXIgYW5ub3Rpb24gPSBnZXRBbm5vdGF0aW9ucyhyZXBsaWNhcyk7XHJcbiAgICB2YXIgbGFibGVzID0gZ2V0TGFiZWxzKHJlcGxpY2FzKTsgICAgXHJcbiAgICB2YXIgaGFzQ2hpbmVzZVZlcnNpb24gPSBsYWJsZXNbXCJ2ZXJzaW9uXCJdLmluZGV4T2YoXCLniYjmnKxcIikgPT0gLTEgPyBcIueJiOacrFwiICsgbGFibGVzW1widmVyc2lvblwiXSA6IGxhYmxlc1tcInZlcnNpb25cIl0gOyAgIFxyXG4gICAgcmV0dXJue1xyXG4gICAgICBpc0V4dHJhY3Q6IGxhYmxlc1tcImlzRXh0cmFjdFwiXSxcclxuICAgICAgaXNUYXJnZXQ6IGxhYmxlc1tcImlzVGFyZ2V0XCJdLFxyXG4gICAgICBzdGF0dXM6IGxhYmxlc1tcInN0YXR1c1wiXSxcclxuICAgICAgc3R5bGU6IGxhYmxlc1tcInN0eWxlXCJdLFxyXG4gICAgICBjaXR5TmFtZTogYW5ub3Rpb25bXCJjaXR5TmFtZVwiXSxcclxuICAgICAgZGlzdHJpY3ROYW1lOiBhbm5vdGlvbltcImRpc3RyaWN0TmFtZVwiXSxcclxuICAgICAgc3lzdGVtTmFtZTogYW5ub3Rpb25bXCJzeXN0ZW1OYW1lXCJdLFxyXG4gICAgICB5ZWFyOiBhbm5vdGlvbltcInllYXJcIl0sXHJcbiAgICAgIHZlcnNpb246IGhhc0NoaW5lc2VWZXJzaW9uXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCkge1xyXG4gICAgJHNjb3BlLmJhc2VVcmkgPSBDb3JlLnRyaW1UcmFpbGluZyhDb3JlLnVybChcIi9cIikgfHwgXCJcIiwgXCIvXCIpIHx8IFwiXCI7XHJcblxyXG4gICAgdmFyIGluamVjdG9yID0gSGF3dGlvQ29yZS5pbmplY3RvcjtcclxuXHJcbiAgICBmdW5jdGlvbiBoYXNTZXJ2aWNlKG5hbWUpIHtcclxuICAgICAgaWYgKGluamVjdG9yKSB7XHJcbiAgICAgICAgdmFyIFNlcnZpY2VSZWdpc3RyeSA9IGluamVjdG9yLmdldDxhbnk+KFwiU2VydmljZVJlZ2lzdHJ5XCIpO1xyXG4gICAgICAgIGlmIChTZXJ2aWNlUmVnaXN0cnkpIHtcclxuICAgICAgICAgIHJldHVybiBTZXJ2aWNlUmVnaXN0cnkuaGFzU2VydmljZShuYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgICRzY29wZS5oYXNTZXJ2aWNlS2liYW5hID0gKCkgPT4gaGFzU2VydmljZShraWJhbmFTZXJ2aWNlTmFtZSk7XHJcbiAgICAkc2NvcGUuaGFzU2VydmljZUdvZ3MgPSAoKSA9PiBoYXNTZXJ2aWNlKGdvZ3NTZXJ2aWNlTmFtZSk7XHJcbiAgICAkc2NvcGUuaGFzU2VydmljZUZvcmdlID0gKCkgPT4gaGFzU2VydmljZShmYWJyaWM4Rm9yZ2VTZXJ2aWNlTmFtZSk7XHJcbiAgICAkc2NvcGUuaGFzU2VydmljZUFwaW1hbiA9ICgpID0+IGhhc1NlcnZpY2UoYXBpbWFuU2VydmljZU5hbWUpO1xyXG5cclxuICAgICRzY29wZS52aWV3VGVtcGxhdGVzID0gKCkgPT4ge1xyXG4gICAgICB2YXIgcmV0dXJuVG8gPSAkbG9jYXRpb24udXJsKCk7XHJcbiAgICAgICRsb2NhdGlvbi5wYXRoKCcva3ViZXJuZXRlcy90ZW1wbGF0ZXMnKS5zZWFyY2goeydyZXR1cm5Ubyc6IHJldHVyblRvfSk7XHJcbiAgICB9O1xyXG5cclxuICAgICRzY29wZS5uYW1lc3BhY2UgPSAkcm91dGVQYXJhbXMubmFtZXNwYWNlIHx8ICRzY29wZS5uYW1lc3BhY2UgfHwgS3ViZXJuZXRlc1N0YXRlLnNlbGVjdGVkTmFtZXNwYWNlIHx8IGRlZmF1bHROYW1lc3BhY2U7XHJcbiAgICBpZiAoJHNjb3BlLm5hbWVzcGFjZSAhPSBLdWJlcm5ldGVzU3RhdGUuc2VsZWN0ZWROYW1lc3BhY2UpIHtcclxuICAgICAgS3ViZXJuZXRlc1N0YXRlLnNlbGVjdGVkTmFtZXNwYWNlID0gJHNjb3BlLm5hbWVzcGFjZTtcclxuXHJcbiAgICAgIC8vIGxldHMgc2hvdyBwYWdlIGlzIGdvaW5nIHRvIHJlbG9hZFxyXG4gICAgICBpZiAoJHNjb3BlLm1vZGVsKSB7XHJcbiAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgS3ViZXJuZXRlcy5zZXRDdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgkc2NvcGUubmFtZXNwYWNlKTtcclxuXHJcbiAgICAkc2NvcGUuZm9yZ2VFbmFibGVkID0gaXNGb3JnZUVuYWJsZWQoKTtcclxuXHJcbiAgICAkc2NvcGUucHJvamVjdElkID0gJHJvdXRlUGFyYW1zW1wicHJvamVjdFwiXSB8fCAkc2NvcGUucHJvamVjdElkIHx8ICRzY29wZS5pZDtcclxuICAgIHZhciBzaG93UHJvamVjdE5hdkJhcnMgPSBmYWxzZTtcclxuICAgIGlmICgkc2NvcGUucHJvamVjdElkICYmIHNob3dQcm9qZWN0TmF2QmFycykge1xyXG4gICAgICAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0QnJlYWRjcnVtYnMoJHNjb3BlLnByb2plY3RJZCk7XHJcbiAgICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdFN1Yk5hdkJhcnMoJHNjb3BlLnByb2plY3RJZCwgbnVsbCwgJHNjb3BlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZUVudmlyb25tZW50QnJlYWRjcnVtYnMoJHNjb3BlLCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcyk7XHJcbiAgICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlRW52aXJvbm1lbnRTdWJOYXZCYXJzKCRzY29wZSwgJGxvY2F0aW9uLCAkcm91dGVQYXJhbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICgkc2NvcGUucHJvamVjdElkKSB7XHJcbiAgICAgICRzY29wZS4kcHJvamVjdExpbmsgPSBEZXZlbG9wZXIucHJvamVjdExpbmsoJHNjb3BlLnByb2plY3RJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgJHNjb3BlLmxpbmsgPSAoaHJlZikgPT4ge1xyXG4gICAgICBpZiAoIWhyZWYpIHtcclxuICAgICAgICByZXR1cm4gaHJlZjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoJHNjb3BlLiRwcm9qZWN0TGluaykge1xyXG4gICAgICAgIHJldHVybiBEZXZlbG9wZXIubmFtZXNwYWNlTGluaygkc2NvcGUsICRyb3V0ZVBhcmFtcywgaHJlZi5yZXBsYWNlKC9eXFwva3ViZXJuZXRlcy8sICcnKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGhyZWY7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAkc2NvcGUuY29kZU1pcnJvck9wdGlvbnMgPSB7XHJcbiAgICAgIGxpbmVXcmFwcGluZyA6IHRydWUsXHJcbiAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLFxyXG4gICAgICByZWFkT25seTogJ25vY3Vyc29yJyxcclxuICAgICAgbW9kZToge25hbWU6IFwiamF2YXNjcmlwdFwiLCBqc29uOiB0cnVlfVxyXG4gICAgfTtcclxuXHJcbiAgICAkc2NvcGUucmVzaXplRGlhbG9nID0ge1xyXG4gICAgICBjb250cm9sbGVyOiBudWxsLFxyXG4gICAgICBuZXdSZXBsaWNhczogMCxcclxuICAgICAgZGlhbG9nOiBuZXcgVUkuRGlhbG9nKCksXHJcbiAgICAgIG9uT2s6ICgpID0+IHtcclxuICAgICAgICB2YXIgcmVzaXplRGlhbG9nID0gJHNjb3BlLnJlc2l6ZURpYWxvZztcclxuICAgICAgICByZXNpemVEaWFsb2cuZGlhbG9nLmNsb3NlKCk7XHJcbiAgICAgICAgcmVzaXplQ29udHJvbGxlcigkaHR0cCwgS3ViZXJuZXRlc0FwaVVSTCwgcmVzaXplRGlhbG9nLmNvbnRyb2xsZXIsIHJlc2l6ZURpYWxvZy5uZXdSZXBsaWNhcywgKCkgPT4geyBsb2cuZGVidWcoXCJ1cGRhdGVkIG51bWJlciBvZiByZXBsaWNhc1wiKTsgfSlcclxuICAgICAgfSxcclxuICAgICAgb3BlbjogKGNvbnRyb2xsZXIpID0+IHtcclxuICAgICAgICB2YXIgcmVzaXplRGlhbG9nID0gJHNjb3BlLnJlc2l6ZURpYWxvZztcclxuICAgICAgICByZXNpemVEaWFsb2cuY29udHJvbGxlciA9IGNvbnRyb2xsZXI7XHJcbiAgICAgICAgcmVzaXplRGlhbG9nLm5ld1JlcGxpY2FzID0gQ29yZS5wYXRoR2V0KGNvbnRyb2xsZXIsIFtcInN0YXR1c1wiLCBcInJlcGxpY2FzXCJdKTtcclxuICAgICAgICByZXNpemVEaWFsb2cuZGlhbG9nLm9wZW4oKTtcclxuXHJcbiAgICAgICAgJHRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgJCgnI3JlcGxpY2FzJykuZm9jdXMoKTtcclxuICAgICAgICB9LCA1MCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNsb3NlOiAoKSA9PiB7XHJcbiAgICAgICAgJHNjb3BlLnJlc2l6ZURpYWxvZy5kaWFsb2cuY2xvc2UoKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAkc2NvcGUudHJpZ2dlckJ1aWxkID0gKGJ1aWxkQ29uZmlnKSA9PiB7XHJcbiAgICAgIHZhciB1cmwgPSBidWlsZENvbmZpZy4kdHJpZ2dlclVybDtcclxuICAgICAgY29uc29sZS5sb2coXCJ0cmlnZ2VyaW5nIGJ1aWxkIGF0IHVybDogXCIgKyB1cmwpO1xyXG4gICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgLy92YXIgZGF0YSA9IHt9O1xyXG4gICAgICAgIHZhciBkYXRhID0gbnVsbDtcclxuICAgICAgICB2YXIgY29uZmlnID0ge1xyXG4gICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogXCJhcHBsaWNhdGlvbi9qc29uXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciBuYW1lID0gQ29yZS5wYXRoR2V0KGJ1aWxkQ29uZmlnLCBbXCJtZXRhZGF0YVwiLCBcIm5hbWVcIl0pO1xyXG4gICAgICAgIENvcmUubm90aWZpY2F0aW9uKCdpbmZvJywgXCJUcmlnZ2VyaW5nIGJ1aWxkIFwiICsgbmFtZSk7XHJcbiAgICAgICAgJGh0dHAucG9zdCh1cmwsIGRhdGEsIGNvbmZpZykuXHJcbiAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInRyaWdnZXIgd29ya2VkISBnb3QgZGF0YSBcIiArIGFuZ3VsYXIudG9Kc29uKGRhdGEsIHRydWUpKTtcclxuICAgICAgICAgICAgLy8gVE9ETyBzaG91bGQgd2Ugc2hvdyBzb21lIGxpbmsgdG8gdGhlIGJ1aWxkXHJcbiAgICAgICAgICAgIENvcmUubm90aWZpY2F0aW9uKCdpbmZvJywgXCJCdWlsZGluZyBcIiArIG5hbWUpO1xyXG4gICAgICAgICAgfSkuXHJcbiAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgICAgQ29yZS5ub3RpZmljYXRpb24oJ2Vycm9yJywgXCJGYWlsZWQgdG8gdHJpZ2dlciBidWlsZCBmb3IgXCIgKyBuYW1lICsgXCIuIFJldHVybmVkIGNvZGU6IFwiICsgc3RhdHVzICsgXCIgXCIgKyBkYXRhKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHVwZGF0ZSB0aGUgVVJMIGlmIHRoZSBmaWx0ZXIgaXMgY2hhbmdlZFxyXG4gICAgJHNjb3BlLiR3YXRjaChcInRhYmxlQ29uZmlnLmZpbHRlck9wdGlvbnMuZmlsdGVyVGV4dFwiLCAodGV4dCkgPT4ge1xyXG4gICAgICAvL3ZhciBmaWx0ZXJUZXh0ID0gS3ViZXJuZXRlcy5maW5kVmFsZU9mTGFiZWxzKHRleHQpO1xyXG4gICAgICAkbG9jYXRpb24uc2VhcmNoKFwicVwiLCB0ZXh0KTtcclxuICAgIH0pO1xyXG5cclxuICAgICRzY29wZS4kb24oXCJsYWJlbEZpbHRlclVwZGF0ZVwiLCAoJGV2ZW50LCB0ZXh0KSA9PiB7XHJcbiAgICAgIHZhciBmaWx0ZXJPcHRpb25zID0gKCRzY29wZS50YWJsZUNvbmZpZyB8fCB7fSkuZmlsdGVyT3B0aW9ucyB8fCB7fTtcclxuICAgICAgdmFyIGN1cnJlbnRGaWx0ZXIgPSBmaWx0ZXJPcHRpb25zLmZpbHRlclRleHQ7XHJcbiAgICAgIGlmIChDb3JlLmlzQmxhbmsoY3VycmVudEZpbHRlcikpIHtcclxuICAgICAgICBmaWx0ZXJPcHRpb25zLmZpbHRlclRleHQgPSB0ZXh0O1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICB2YXIgZXhwcmVzc2lvbnMgPSBjdXJyZW50RmlsdGVyLnNwbGl0KC9cXHMrLyk7XHJcbiAgICAgICAgaWYgKGV4cHJlc3Npb25zLmluZGV4T2YodGV4dCkgIT09IC0xKSB7XHJcbiAgICAgICAgICAvLyBsZXRzIGV4Y2x1ZGUgdGhpcyBmaWx0ZXIgZXhwcmVzc2lvblxyXG4gICAgICAgICAgZXhwcmVzc2lvbnMgPSBleHByZXNzaW9ucy5yZW1vdmUodGV4dCk7XHJcbiAgICAgICAgICBmaWx0ZXJPcHRpb25zLmZpbHRlclRleHQgPSBleHByZXNzaW9ucy5qb2luKFwiIFwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZmlsdGVyT3B0aW9ucy5maWx0ZXJUZXh0ID0gY3VycmVudEZpbHRlciArIFwiIFwiICsgdGV4dDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgJHNjb3BlLmlkID0gdW5kZWZpbmVkO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHBvZHMgdGhhdCBhcmUgcmVhZHlcclxuICAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24gcmVhZHlQb2RDb3VudChzZXJ2aWNlKSB7XHJcbiAgICB2YXIgY291bnQgPSAwO1xyXG4gICAgYW5ndWxhci5mb3JFYWNoKChzZXJ2aWNlIHx8IHt9KS4kcG9kcywgKHBvZCk9PiB7XHJcbiAgICAgIGlmIChwb2QuJHJlYWR5KSB7XHJcbiAgICAgICAgY291bnQrKztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY291bnQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBzZXJ2aWNlIGxpbmsgVVJMIGZvciBlaXRoZXIgdGhlIHNlcnZpY2UgbmFtZSBvciB0aGUgc2VydmljZSBvYmplY3RcclxuICAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24gc2VydmljZUxpbmtVcmwoc2VydmljZSwgaHR0cE9ubHkgPSBmYWxzZSkge1xyXG4gICAgaWYgKGFuZ3VsYXIuaXNPYmplY3Qoc2VydmljZSkpIHtcclxuICAgICAgdmFyIHBvcnRhbElQID0gc2VydmljZS4kaG9zdDtcclxuICAgICAgLy8gbGV0cyBhc3N1bWUgbm8gY3VzdG9tIHBvcnQgZm9yIG5vdyBmb3IgZXh0ZXJuYWwgcm91dGVzXHJcbiAgICAgIHZhciBwb3J0ID0gbnVsbDtcclxuICAgICAgdmFyIHByb3RvY29sID0gXCJodHRwOi8vXCI7XHJcbiAgICAgIHZhciBzcGVjID0gc2VydmljZS5zcGVjO1xyXG4gICAgICBpZiAoc3BlYykge1xyXG4gICAgICAgIGlmICghcG9ydGFsSVApIHtcclxuICAgICAgICAgIHBvcnRhbElQID0gc3BlYy5wb3J0YWxJUDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGhhc0h0dHBzID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGhhc0h0dHAgPSBmYWxzZTtcclxuICAgICAgICBhbmd1bGFyLmZvckVhY2goc3BlYy5wb3J0cywgKHBvcnRTcGVjKSA9PiB7XHJcbiAgICAgICAgICB2YXIgcCA9IHBvcnRTcGVjLnBvcnQ7XHJcbiAgICAgICAgICBpZiAocCkge1xyXG4gICAgICAgICAgICBpZiAocCA9PT0gNDQzKSB7XHJcbiAgICAgICAgICAgICAgaGFzSHR0cHMgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHAgPT09IDgwKSB7XHJcbiAgICAgICAgICAgICAgaGFzSHR0cCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFwb3J0KSB7XHJcbiAgICAgICAgICAgICAgcG9ydCA9IHA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoIWhhc0h0dHBzICYmICFoYXNIdHRwICYmIHBvcnQpIHtcclxuICAgICAgICAgIC8vIGxldHMgdHJlYXQgODA4MCBhcyBodHRwIHdoaWNoIGlzIGEgY29tbW9uIHNlcnZpY2UgdG8gZXhwb3J0XHJcbiAgICAgICAgICBpZiAocG9ydCA9PT0gODA4MCkge1xyXG4gICAgICAgICAgICBoYXNIdHRwID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAocG9ydCA9PT0gODQ0Mykge1xyXG4gICAgICAgICAgICBoYXNIdHRwcyA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChwb3J0YWxJUCkge1xyXG4gICAgICAgIGlmIChoYXNIdHRwcykge1xyXG4gICAgICAgICAgcmV0dXJuIFwiaHR0cHM6Ly9cIiArIHBvcnRhbElQO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaGFzSHR0cCkge1xyXG4gICAgICAgICAgcmV0dXJuIFwiaHR0cDovL1wiICsgcG9ydGFsSVA7XHJcbiAgICAgICAgfSBlbHNlIGlmICghaHR0cE9ubHkpIHtcclxuICAgICAgICAgIGlmIChwb3J0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwcm90b2NvbCArIHBvcnRhbElQICsgXCI6XCIgKyBwb3J0ICsgXCIvXCI7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gcHJvdG9jb2wgKyBwb3J0YWxJUDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoc2VydmljZSkge1xyXG4gICAgICB2YXIgc2VydmljZUlkID0gc2VydmljZS50b1N0cmluZygpO1xyXG4gICAgICBpZiAoc2VydmljZUlkKSB7XHJcbiAgICAgICAgdmFyIFNlcnZpY2VSZWdpc3RyeSA9IGdldFNlcnZpY2VSZWdpc3RyeSgpO1xyXG4gICAgICAgIGlmIChTZXJ2aWNlUmVnaXN0cnkpIHtcclxuICAgICAgICAgIHJldHVybiBTZXJ2aWNlUmVnaXN0cnkuc2VydmljZUxpbmsoc2VydmljZUlkKSB8fCBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGNvdW50ZXJzIGZvciB0aGUgcG9kQ291bnRlcnMgb2JqZWN0XHJcbiAgICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHBvZENvdW50ZXJUb3RhbCgkcG9kQ291bnRlcnMpIHtcclxuICAgIHZhciBhbnN3ZXIgPSAwO1xyXG4gICAgaWYgKCRwb2RDb3VudGVycykge1xyXG4gICAgICBhbmd1bGFyLmZvckVhY2goW1wicmVhZHlcIiwgXCJ2YWxpZFwiLCBcIndhaXRpbmdcIiwgXCJlcnJvclwiXSwgKG5hbWUpID0+IHtcclxuICAgICAgICB2YXIgdmFsdWUgPSAkcG9kQ291bnRlcnNbbmFtZV0gfHwgMDtcclxuICAgICAgICBhbnN3ZXIgKz0gdmFsdWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFuc3dlcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdpdmVuIHRoZSBsaXN0IG9mIHBvZHMgbGV0cyBpdGVyYXRlIHRocm91Z2ggdGhlbSBhbmQgZmluZCBhbGwgcG9kcyBtYXRjaGluZyB0aGUgc2VsZWN0b3JcclxuICAgKiBhbmQgcmV0dXJuIGNvdW50ZXJzIGJhc2VkIG9uIHRoZSBzdGF0dXMgb2YgdGhlIHBvZFxyXG4gICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQb2RDb3VudGVycyhzZWxlY3RvciwgcG9kcywgb3V0cHV0UG9kcyA9IFtdLCBwb2RMaW5rUXVlcnkgPSBudWxsLCBwb2RMaW5rVXJsID0gbnVsbCkge1xyXG4gICAgaWYgKCFwb2RMaW5rVXJsKSB7XHJcbiAgICAgIHBvZExpbmtVcmwgPSBcIi9rdWJlcm5ldGVzL3BvZHNcIjtcclxuICAgIH1cclxuICAgIHZhciBmaWx0ZXJGbjtcclxuICAgIGlmIChhbmd1bGFyLmlzRnVuY3Rpb24oc2VsZWN0b3IpKSB7XHJcbiAgICAgIGZpbHRlckZuID0gc2VsZWN0b3I7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmaWx0ZXJGbiA9IChwb2QpID0+IHNlbGVjdG9yTWF0Y2hlcyhzZWxlY3RvciwgZ2V0TGFiZWxzKHBvZCkpO1xyXG4gICAgfVxyXG4gICAgdmFyIGFuc3dlciA9IHtcclxuICAgICAgcG9kc0xpbms6IFwiXCIsXHJcbiAgICAgIHJlYWR5OiAwLFxyXG4gICAgICB2YWxpZDogMCxcclxuICAgICAgd2FpdGluZzogMCxcclxuICAgICAgZXJyb3I6IDBcclxuICAgIH07XHJcbiAgICBpZiAoc2VsZWN0b3IpIHtcclxuICAgICAgaWYgKCFwb2RMaW5rUXVlcnkpIHtcclxuICAgICAgICBwb2RMaW5rUXVlcnkgPSBLdWJlcm5ldGVzLmxhYmVsc1RvU3RyaW5nKHNlbGVjdG9yLCBcIiBcIik7XHJcbiAgICAgIH1cclxuICAgICAgYW5zd2VyLnBvZHNMaW5rID0gcG9kTGlua1VybCArIFwiP3E9XCIgKyBlbmNvZGVVUklDb21wb25lbnQocG9kTGlua1F1ZXJ5KTtcclxuICAgICAgYW5ndWxhci5mb3JFYWNoKHBvZHMsIHBvZCA9PiB7XHJcbiAgICAgICAgaWYgKGZpbHRlckZuKHBvZCkpIHtcclxuICAgICAgICAgIG91dHB1dFBvZHMucHVzaChwb2QpO1xyXG4gICAgICAgICAgdmFyIHN0YXR1cyA9IGdldFN0YXR1cyhwb2QpO1xyXG4gICAgICAgICAgaWYgKHN0YXR1cykge1xyXG4gICAgICAgICAgICB2YXIgbG93ZXIgPSBzdGF0dXMudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgaWYgKGxvd2VyLnN0YXJ0c1dpdGgoXCJydW5cIikpIHtcclxuICAgICAgICAgICAgICBpZiAoaXNSZWFkeShwb2QpKSB7XHJcbiAgICAgICAgICAgICAgICBhbnN3ZXIucmVhZHkgKz0gMTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYW5zd2VyLnZhbGlkICs9IDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxvd2VyLnN0YXJ0c1dpdGgoXCJ3YWl0XCIpIHx8IGxvd2VyLnN0YXJ0c1dpdGgoXCJwZW5kXCIpKSB7XHJcbiAgICAgICAgICAgICAgYW5zd2VyLndhaXRpbmcgKz0gMTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChsb3dlci5zdGFydHNXaXRoKFwidGVybVwiKSB8fCBsb3dlci5zdGFydHNXaXRoKFwiZXJyb3JcIikgfHwgbG93ZXIuc3RhcnRzV2l0aChcImZhaWxcIikpIHtcclxuICAgICAgICAgICAgICBhbnN3ZXIuZXJyb3IgKz0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYW5zd2VyLmVycm9yICs9IDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBhbnN3ZXI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb252ZXJ0cyB0aGUgZ2l2ZW4ganNvbiBpbnRvIGFuIGFycmF5IG9mIGl0ZW1zLiBJZiB0aGUganNvbiBjb250YWlucyBhIG5lc3RlZCBzZXQgb2YgaXRlbXMgdGhlbiB0aGF0IGlzIHNvcnRlZDsgc28gdGhhdCBzZXJ2aWNlc1xyXG4gICAqIGFyZSBwcm9jZXNzZWQgZmlyc3Q7IHRoZW4gdHVybmVkIGludG8gYW4gYXJyYXkuIE90aGVyd2lzZSB0aGUganNvbiBpcyBwdXQgaW50byBhbiBhcnJheSBzbyBpdCBjYW4gYmUgcHJvY2Vzc2VkIHBvbHltb3JwaGljYWxseVxyXG4gICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0S3ViZXJuZXRlc0pzb25Ub0l0ZW1zKGpzb24pIHtcclxuICAgIHZhciBpdGVtcyA9IGpzb24uaXRlbXM7XHJcbiAgICBpZiAoYW5ndWxhci5pc0FycmF5KGl0ZW1zKSkge1xyXG4gICAgICAvLyBUT0RPIHdlIGNvdWxkIGNoZWNrIGZvciBMaXN0IG9yIENvbmZpZyB0eXBlcyBoZXJlIGFuZCB3YXJuIGlmIG5vdFxyXG5cclxuICAgICAgLy8gc29ydCB0aGUgc2VydmljZXMgZmlyc3RcclxuICAgICAgdmFyIGFuc3dlciA9IFtdO1xyXG4gICAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0ua2luZCA9PT0gXCJTZXJ2aWNlXCIpIHtcclxuICAgICAgICAgIGFuc3dlci5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICBpZiAoaXRlbS5raW5kICE9PSBcIlNlcnZpY2VcIikge1xyXG4gICAgICAgICAgYW5zd2VyLnB1c2goaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGFuc3dlcjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBbanNvbl07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gaXNWMWJldGExT3IyKCkge1xyXG4gICAgcmV0dXJuIGRlZmF1bHRBcGlWZXJzaW9uID09PSBcInYxYmV0YTFcIiB8fCBkZWZhdWx0QXBpVmVyc2lvbiA9PT0gXCJ2MWJldGEyXCI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGEgbGluayB0byB0aGUgZGV0YWlsIHBhZ2UgZm9yIHRoZSBnaXZlbiBlbnRpdHlcclxuICAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24gZW50aXR5UGFnZUxpbmsob2JqKSB7XHJcbiAgICBpZiAob2JqKSB7XHJcbiAgICAgIGZ1bmN0aW9uIGdldExpbmsoZW50aXR5KSB7XHJcbiAgICAgICAgdmFyIHZpZXdMaW5rID0gZW50aXR5W1wiJHZpZXdMaW5rXCJdO1xyXG4gICAgICAgIGlmICh2aWV3TGluaykge1xyXG4gICAgICAgICAgcmV0dXJuIHZpZXdMaW5rO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaWQgPSBnZXROYW1lKGVudGl0eSk7XHJcbiAgICAgICAgdmFyIGtpbmQgPSBnZXRLaW5kKGVudGl0eSk7XHJcbiAgICAgICAgaWYgKGtpbmQgJiYgaWQpIHtcclxuICAgICAgICAgIHZhciBwYXRoID0ga2luZC5zdWJzdHJpbmcoMCwgMSkudG9Mb3dlckNhc2UoKSArIGtpbmQuc3Vic3RyaW5nKDEpICsgXCJzXCI7XHJcbiAgICAgICAgICB2YXIgbmFtZXNwYWNlID0gZ2V0TmFtZXNwYWNlKGVudGl0eSk7XHJcbiAgICAgICAgICBpZiAobmFtZXNwYWNlICYmICFpc0lnbm9yZU5hbWVzcGFjZUtpbmQoa2luZCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIENvcmUudXJsKFVybEhlbHBlcnMuam9pbignL2t1YmVybmV0ZXMvbmFtZXNwYWNlJywgbmFtZXNwYWNlLCBwYXRoLCBpZCkpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIENvcmUudXJsKFVybEhlbHBlcnMuam9pbignL2t1YmVybmV0ZXMnLCBwYXRoLCBpZCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB2YXIgYmFzZUxpbmsgPSBnZXRMaW5rKG9iaik7XHJcbiAgICAgIGlmICghSGF3dGlvQ29yZS5pbmplY3RvciB8fCAhYmFzZUxpbmspIHtcclxuICAgICAgICByZXR1cm4gYmFzZUxpbms7XHJcbiAgICAgIH1cclxuICAgICAgdmFyICRyb3V0ZVBhcmFtcyA9IEhhd3Rpb0NvcmUuaW5qZWN0b3IuZ2V0PG5nLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2U+KCckcm91dGVQYXJhbXMnKTtcclxuICAgICAgdmFyIHByb2plY3RJZCA9ICRyb3V0ZVBhcmFtc1sncHJvamVjdCddIHx8ICRyb3V0ZVBhcmFtc1sncHJvamVjdCddO1xyXG4gICAgICBpZiAoIXByb2plY3RJZCkge1xyXG4gICAgICAgIHJldHVybiBiYXNlTGluaztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKERldmVsb3Blci5wcm9qZWN0TGluayhwcm9qZWN0SWQpLCBiYXNlTGluay5yZXBsYWNlKC9eXFwva3ViZXJuZXRlc1xcLy8sICcnKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gcmVzb3VyY2VLaW5kVG9VcmlQYXRoKGtpbmQpIHtcclxuICAgIHZhciBraW5kUGF0aCA9IGtpbmQudG9Mb3dlckNhc2UoKSArIFwic1wiO1xyXG4gICAgaWYgKGtpbmRQYXRoID09PSBcInJlcGxpY2F0aW9uQ29udHJvbGxlcnNcIiAmJiAhaXNWMWJldGExT3IyKCkpIHtcclxuICAgICAga2luZFBhdGggPSBcInJlcGxpY2F0aW9uY29udHJvbGxlcnNcIjtcclxuICAgIH1cclxuICAgIHJldHVybiBraW5kUGF0aDtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGlzSWdub3JlTmFtZXNwYWNlS2luZChraW5kKSB7XHJcbiAgICByZXR1cm4ga2luZCA9PT0gXCJIb3N0XCIgfHwga2luZCA9PT0gXCJNaW5pb25cIjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHJvb3QgVVJMIGZvciB0aGUga2luZFxyXG4gICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBrdWJlcm5ldGVzVXJsRm9yS2luZChLdWJlcm5ldGVzQXBpVVJMLCBraW5kLCBuYW1lc3BhY2UgPSBudWxsLCBwYXRoID0gbnVsbCkge1xyXG4gICAgdmFyIHBhdGhTZWdtZW50ID0gXCJcIjtcclxuICAgIGlmIChwYXRoKSB7XHJcbiAgICAgIHBhdGhTZWdtZW50ID0gXCIvXCIgKyBDb3JlLnRyaW1MZWFkaW5nKHBhdGgsIFwiL1wiKTtcclxuICAgIH1cclxuICAgIHZhciBraW5kUGF0aCA9IHJlc291cmNlS2luZFRvVXJpUGF0aChraW5kKTtcclxuICAgIHZhciBpZ25vcmVOYW1lc3BhY2UgPSBpc0lnbm9yZU5hbWVzcGFjZUtpbmQoa2luZCk7XHJcbiAgICBpZiAoaXNWMWJldGExT3IyKCkgfHwgaWdub3JlTmFtZXNwYWNlKSB7XHJcbiAgICAgIHZhciBwb3N0Zml4ID0gXCJcIjtcclxuICAgICAgaWYgKG5hbWVzcGFjZSAmJiAhaWdub3JlTmFtZXNwYWNlKSB7XHJcbiAgICAgICAgcG9zdGZpeCA9IFwiP25hbWVzcGFjZT1cIiArIG5hbWVzcGFjZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKEt1YmVybmV0ZXNBcGlVUkwsIGtpbmRQYXRoLCBwYXRoU2VnbWVudCwgcG9zdGZpeCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKEt1YmVybmV0ZXNBcGlVUkwsIFwiL25hbWVzcGFjZXMvXCIsIG5hbWVzcGFjZSAsIGtpbmRQYXRoLCBwYXRoU2VnbWVudCk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgYmFzZSBVUkwgZm9yIHRoZSBraW5kIG9mIGt1YmVybmV0ZXMgcmVzb3VyY2Ugb3IgbnVsbCBpZiBpdCBjYW5ub3QgYmUgZm91bmRcclxuICAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24ga3ViZXJuZXRlc1VybEZvckl0ZW1LaW5kKEt1YmVybmV0ZXNBcGlVUkwsIGpzb24pIHtcclxuICAgIHZhciBraW5kID0ganNvbi5raW5kO1xyXG4gICAgaWYgKGtpbmQpIHtcclxuICAgICAgcmV0dXJuIGt1YmVybmV0ZXNVcmxGb3JLaW5kKEt1YmVybmV0ZXNBcGlVUkwsIGtpbmQsIGpzb24ubmFtZXNwYWNlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxvZy53YXJuKFwiSWdub3JpbmcgbWlzc2luZyBraW5kIFwiICsga2luZCArIFwiIGZvciBrdWJlcm5ldGVzIGpzb246IFwiICsgYW5ndWxhci50b0pzb24oanNvbikpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBrdWJlcm5ldGVzUHJveHlVcmxGb3JTZXJ2aWNlKEt1YmVybmV0ZXNBcGlVUkwsIHNlcnZpY2UsIHBhdGggPSBudWxsKSB7XHJcbiAgICB2YXIgcGF0aFNlZ21lbnQgPSBcIlwiO1xyXG4gICAgaWYgKHBhdGgpIHtcclxuICAgICAgcGF0aFNlZ21lbnQgPSBcIi9cIiArIENvcmUudHJpbUxlYWRpbmcocGF0aCwgXCIvXCIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGF0aFNlZ21lbnQgPSBcIi9cIjtcclxuICAgIH1cclxuICAgIHZhciBuYW1lc3BhY2UgPSBnZXROYW1lc3BhY2Uoc2VydmljZSk7XHJcbiAgICBpZiAoaXNWMWJldGExT3IyKCkpIHtcclxuICAgICAgdmFyIHBvc3RmaXggPSBcIj9uYW1lc3BhY2U9XCIgKyBuYW1lc3BhY2U7XHJcbiAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oS3ViZXJuZXRlc0FwaVVSTCwgXCIvcHJveHlcIiwgIGt1YmVybmV0ZXNOYW1lc3BhY2VQYXRoKCksIFwiL3NlcnZpY2VzL1wiICsgZ2V0TmFtZShzZXJ2aWNlKSArIHBhdGhTZWdtZW50ICsgcG9zdGZpeCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKEt1YmVybmV0ZXNBcGlVUkwsIFwiL3Byb3h5L25hbWVzcGFjZXMvXCIsIG5hbWVzcGFjZSwgXCIvc2VydmljZXMvXCIgKyBnZXROYW1lKHNlcnZpY2UpICsgcGF0aFNlZ21lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBrdWJlcm5ldGVzUHJveHlVcmxGb3JTZXJ2aWNlQ3VycmVudE5hbWVzcGFjZShzZXJ2aWNlLCBwYXRoID0gbnVsbCkge1xyXG4gICAgdmFyIGFwaVByZWZpeCA9IFVybEhlbHBlcnMuam9pbihrdWJlcm5ldGVzQXBpVXJsKCkpO1xyXG4gICAgcmV0dXJuIGt1YmVybmV0ZXNQcm94eVVybEZvclNlcnZpY2UoYXBpUHJlZml4LCBzZXJ2aWNlLCBwYXRoKTtcclxuXHJcbiAgfVxyXG4gIGV4cG9ydCBmdW5jdGlvbiBidWlsZENvbmZpZ1Jlc3RVcmwoaWQpIHtcclxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oYnVpbGRDb25maWdzUmVzdFVSTCgpLCBpZCk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZGVwbG95bWVudENvbmZpZ1Jlc3RVcmwoaWQpIHtcclxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oZGVwbG95bWVudENvbmZpZ3NSZXN0VVJMKCksIGlkKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBpbWFnZVJlcG9zaXRvcnlSZXN0VXJsKGlkKSB7XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKGltYWdlUmVwb3NpdG9yaWVzUmVzdFVSTCgpLCBpZCk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gYnVpbGRSZXN0VXJsKGlkKSB7XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKGJ1aWxkc1Jlc3RVUkwoKSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTG9nc1Jlc3RVcmwoaWQpIHtcclxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oYnVpbGRzUmVzdFVSTCgpLCBpZCwgXCJsb2dcIik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSdW5zIHRoZSBnaXZlbiBhcHBsaWNhdGlvbiBKU09OXHJcbiAgICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHJ1bkFwcCgkbG9jYXRpb24sICRzY29wZSwgJGh0dHAsIEt1YmVybmV0ZXNBcGlVUkwsIGpzb24sIG5hbWUgPSBcIkFwcFwiLCBvblN1Y2Nlc3NGbiA9IG51bGwsIG5hbWVzcGFjZSA9IG51bGwsIG9uQ29tcGxldGVGbiA9IG51bGwpIHtcclxuICAgIGlmIChqc29uKSB7XHJcbiAgICAgIGlmIChhbmd1bGFyLmlzU3RyaW5nKGpzb24pKSB7XHJcbiAgICAgICAganNvbiA9IGFuZ3VsYXIuZnJvbUpzb24oanNvbik7XHJcbiAgICAgIH1cclxuICAgICAgbmFtZSA9IG5hbWUgfHwgXCJBcHBcIjtcclxuICAgICAgdmFyIHBvc3RmaXggPSBuYW1lc3BhY2UgPyBcIiBpbiBuYW1lc3BhY2UgXCIgKyBuYW1lc3BhY2UgOiBcIlwiO1xyXG4gICAgICBDb3JlLm5vdGlmaWNhdGlvbignaW5mbycsIFwiUnVubmluZyBcIiArIG5hbWUgKyBwb3N0Zml4KTtcclxuXHJcbiAgICAgIHZhciBpdGVtcyA9IGNvbnZlcnRLdWJlcm5ldGVzSnNvblRvSXRlbXMoanNvbik7XHJcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChpdGVtcywgKGl0ZW0pID0+IHtcclxuICAgICAgICB2YXIgdXJsID0ga3ViZXJuZXRlc1VybEZvckl0ZW1LaW5kKEt1YmVybmV0ZXNBcGlVUkwsIGl0ZW0pO1xyXG4gICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICRodHRwLnBvc3QodXJsLCBpdGVtKS5cclxuICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICBsb2cuZGVidWcoXCJHb3Qgc3RhdHVzOiBcIiArIHN0YXR1cyArIFwiIG9uIHVybDogXCIgKyB1cmwgKyBcIiBkYXRhOiBcIiArIGRhdGEgKyBcIiBhZnRlciBwb3N0aW5nOiBcIiArIGFuZ3VsYXIudG9Kc29uKGl0ZW0pKTtcclxuICAgICAgICAgICAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKG9uQ29tcGxldGVGbikpIHtcclxuICAgICAgICAgICAgICAgIG9uQ29tcGxldGVGbigpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgICB9KS5cclxuICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzT2JqZWN0KGRhdGEpKSB7XHJcbiAgICAgICAgICAgICAgbWVzc2FnZSA9IGRhdGEubWVzc2FnZTtcclxuICAgICAgICAgICAgICB2YXIgcmVhc29uID0gZGF0YS5yZWFzb247XHJcbiAgICAgICAgICAgICAgaWYgKHJlYXNvbiA9PT0gXCJBbHJlYWR5RXhpc3RzXCIpIHtcclxuICAgICAgICAgICAgICAgIC8vIGxldHMgaWdub3JlIGR1cGxpY2F0ZXNcclxuICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcImVudGl0eSBhbHJlYWR5IGV4aXN0cyBhdCBcIiArIHVybCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghbWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgIG1lc3NhZ2UgPSBcIkZhaWxlZCB0byBQT1NUIHRvIFwiICsgdXJsICsgXCIgZ290IHN0YXR1czogXCIgKyBzdGF0dXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gc2F2ZSBcIiArIHVybCArIFwiIHN0YXR1czogXCIgKyBzdGF0dXMgKyBcIiByZXNwb25zZTogXCIgKyBhbmd1bGFyLnRvSnNvbihkYXRhLCB0cnVlKSk7XHJcbiAgICAgICAgICAgIENvcmUubm90aWZpY2F0aW9uKCdlcnJvcicsIG1lc3NhZ2UpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBwb2QgaXMgcnVubmluZ1xyXG4gICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBpc1J1bm5pbmcocG9kQ3VycmVudFN0YXRlKSB7XHJcbiAgICB2YXIgc3RhdHVzID0gKHBvZEN1cnJlbnRTdGF0ZSB8fCB7fSkucGhhc2U7XHJcbiAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgIHZhciBsb3dlciA9IHN0YXR1cy50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICByZXR1cm4gbG93ZXIuc3RhcnRzV2l0aChcInJ1blwiKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbGFiZWxzIG9iamVjdCBoYXMgYWxsIG9mIHRoZSBrZXkvdmFsdWUgcGFpcnMgZnJvbSB0aGUgc2VsZWN0b3JcclxuICAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24gc2VsZWN0b3JNYXRjaGVzKHNlbGVjdG9yLCBsYWJlbHMpIHtcclxuICAgIGlmIChhbmd1bGFyLmlzT2JqZWN0KGxhYmVscykpIHtcclxuICAgICAgdmFyIGFuc3dlciA9IHRydWU7XHJcbiAgICAgIHZhciBjb3VudCA9IDA7XHJcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChzZWxlY3RvciwgKHZhbHVlLCBrZXkpID0+IHtcclxuICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgIGlmIChhbnN3ZXIgJiYgbGFiZWxzW2tleV0gIT09IHZhbHVlKSB7XHJcbiAgICAgICAgICBhbnN3ZXIgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gYW5zd2VyICYmIGNvdW50ID4gMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHNlcnZpY2UgcmVnaXN0cnlcclxuICAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0U2VydmljZVJlZ2lzdHJ5KCkge1xyXG4gICAgdmFyIGluamVjdG9yID0gSGF3dGlvQ29yZS5pbmplY3RvcjtcclxuICAgIHJldHVybiBpbmplY3RvciA/IGluamVjdG9yLmdldDxhbnk+KFwiU2VydmljZVJlZ2lzdHJ5XCIpIDogbnVsbDtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGEgbGluayB0byB0aGUga2liYW5hIGxvZ3Mgd2ViIGFwcGxpY2F0aW9uXHJcbiAgICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGtpYmFuYUxvZ3NMaW5rKFNlcnZpY2VSZWdpc3RyeSkge1xyXG4gICAgdmFyIGxpbmsgPSBTZXJ2aWNlUmVnaXN0cnkuc2VydmljZUxpbmsoa2liYW5hU2VydmljZU5hbWUpO1xyXG4gICAgaWYgKGxpbmspIHtcclxuICAgICAgaWYgKCFsaW5rLmVuZHNXaXRoKFwiL1wiKSkge1xyXG4gICAgICAgIGxpbmsgKz0gXCIvXCI7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGxpbmsgKyBcIiMvZGFzaGJvYXJkL0ZhYnJpYzhcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIG9wZW5Mb2dzRm9yUG9kcyhTZXJ2aWNlUmVnaXN0cnksICR3aW5kb3csIG5hbWVzcGFjZSwgcG9kcykge1xyXG4gICAgdmFyIGxpbmsgPSBraWJhbmFMb2dzTGluayhTZXJ2aWNlUmVnaXN0cnkpO1xyXG4gICAgaWYgKGxpbmspIHtcclxuICAgICAgdmFyIHF1ZXJ5ID0gXCJcIjtcclxuICAgICAgdmFyIGNvdW50ID0gMDtcclxuICAgICAgYW5ndWxhci5mb3JFYWNoKHBvZHMsIChpdGVtKSA9PiB7XHJcbiAgICAgICAgdmFyIGlkID0gZ2V0TmFtZShpdGVtKTtcclxuICAgICAgICBpZiAoaWQpIHtcclxuICAgICAgICAgIHZhciBzcGFjZSA9IHF1ZXJ5ID8gXCIgT1IgXCIgOiBcIlwiO1xyXG4gICAgICAgICAgY291bnQrKztcclxuICAgICAgICAgIHF1ZXJ5ICs9IHNwYWNlICsgJ1wiJyArIGlkICsgJ1wiJztcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAocXVlcnkpIHtcclxuICAgICAgICBpZiAoY291bnQgPiAxKSB7XHJcbiAgICAgICAgICBxdWVyeSA9IFwiKFwiICsgcXVlcnkgKyBcIilcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcXVlcnkgPSAna3ViZXJuZXRlcy5uYW1lc3BhY2VfbmFtZTpcIicgKyBuYW1lc3BhY2UgKyAnXCIgQU5EIGt1YmVybmV0ZXMucG9kX25hbWU6JyArIHF1ZXJ5O1xyXG4gICAgICAgIGxpbmsgKz0gXCI/X2E9KHF1ZXJ5OihxdWVyeV9zdHJpbmc6KHF1ZXJ5OidcIiArIHF1ZXJ5ICsgXCInKSkpXCI7XHJcbiAgICAgICAgdmFyIG5ld1dpbmRvdyA9ICR3aW5kb3cub3BlbihsaW5rLCBcInZpZXdMb2dzXCIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gcmVzaXplQ29udHJvbGxlcigkaHR0cCwgS3ViZXJuZXRlc0FwaVVSTCwgcmVwbGljYXRpb25Db250cm9sbGVyLCBuZXdSZXBsaWNhcywgb25Db21wbGV0ZUZuID0gbnVsbCkge1xyXG4gICAgdmFyIGlkID0gZ2V0TmFtZShyZXBsaWNhdGlvbkNvbnRyb2xsZXIpO1xyXG4gICAgdmFyIG5hbWVzcGFjZSA9IGdldE5hbWVzcGFjZShyZXBsaWNhdGlvbkNvbnRyb2xsZXIpIHx8IFwiXCI7XHJcbiAgICB2YXIgdXJsID0ga3ViZXJuZXRlc1VybEZvcktpbmQoS3ViZXJuZXRlc0FwaVVSTCwgXCJSZXBsaWNhdGlvbkNvbnRyb2xsZXJcIiwgbmFtZXNwYWNlLCBpZCk7XHJcbiAgICAkaHR0cC5nZXQodXJsKS5cclxuICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICBpZiAoZGF0YSkgeyAgICAgICAgICAgXHJcbiAgICAgICAgICB2YXIgZGVzaXJlZFN0YXRlID0gZGF0YS5zcGVjO1xyXG4gICAgICAgICAgaWYgKCFkZXNpcmVkU3RhdGUpIHtcclxuICAgICAgICAgICAgZGVzaXJlZFN0YXRlID0ge307XHJcbiAgICAgICAgICAgIGRhdGEuc3BlYyA9IGRlc2lyZWRTdGF0ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGRlc2lyZWRTdGF0ZS5yZXBsaWNhcyA9IG5ld1JlcGxpY2FzO1xyXG4gICAgICAgICAgJGh0dHAucHV0KHVybCwgZGF0YSkuXHJcbiAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKFwidXBkYXRlZCBjb250cm9sbGVyIFwiICsgdXJsKTtcclxuICAgICAgICAgICAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKG9uQ29tcGxldGVGbikpIHtcclxuICAgICAgICAgICAgICAgIG9uQ29tcGxldGVGbigpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkuXHJcbiAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gc2F2ZSBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSkuXHJcbiAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHN0YXR1c1RleHRUb0Nzc0NsYXNzKHRleHQsIHJlYWR5ID0gZmFsc2UpIHtcclxuICAgIGlmICh0ZXh0KSB7XHJcbiAgICAgIHZhciBsb3dlciA9IHRleHQudG9Mb3dlckNhc2UoKTtcclxuICAgICAgaWYgKGxvd2VyLnN0YXJ0c1dpdGgoXCJydW5cIikgfHwgbG93ZXIuc3RhcnRzV2l0aChcIm9rXCIpKSB7XHJcbiAgICAgICAgaWYgKCFyZWFkeSkge1xyXG4gICAgICAgICAgcmV0dXJuIFwiZmEgZmEtc3Bpbm5lciBmYS1zcGluIGdyZWVuXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnZmEgZmEtcGxheS1jaXJjbGUgZ3JlZW4nO1xyXG4gICAgICB9IGVsc2UgaWYgKGxvd2VyLnN0YXJ0c1dpdGgoXCJ3YWl0XCIpIHx8IGxvd2VyLnN0YXJ0c1dpdGgoXCJwZW5kXCIpKSB7XHJcbiAgICAgICAgcmV0dXJuICdmYSBmYS1kb3dubG9hZCc7XHJcbiAgICAgIH0gZWxzZSBpZiAobG93ZXIuc3RhcnRzV2l0aChcInRlcm1cIikgfHwgbG93ZXIuc3RhcnRzV2l0aChcImVycm9yXCIpIHx8IGxvd2VyLnN0YXJ0c1dpdGgoXCJmYWlsXCIpKSB7XHJcbiAgICAgICAgcmV0dXJuICdmYSBmYS1vZmYgb3JhbmdlJztcclxuICAgICAgfSBlbHNlIGlmIChsb3dlci5zdGFydHNXaXRoKFwic3VjY2VlZGVkXCIpKSB7XHJcbiAgICAgICAgcmV0dXJuICdmYSBmYS1jaGVjay1jaXJjbGUtbyBncmVlbic7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAnZmEgZmEtcXVlc3Rpb24gcmVkJztcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBwb2RTdGF0dXMocG9kKSB7XHJcbiAgICByZXR1cm4gZ2V0U3RhdHVzKHBvZCk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gaXNSZWFkeShwb2QpIHtcclxuICAgIHZhciBzdGF0dXMgPSBwb2Quc3RhdHVzIHx8IHt9O1xyXG4gICAgdmFyIGFuc3dlciA9IGZhbHNlO1xyXG4gICAgYW5ndWxhci5mb3JFYWNoKHN0YXR1cy5jb25kaXRpb25zLCAoY29uZGl0aW9uKSA9PiB7XHJcbiAgICAgIHZhciB0ID0gY29uZGl0aW9uLnR5cGU7XHJcbiAgICAgIGlmICh0ICYmIHQgPT09IFwiUmVhZHlcIikge1xyXG4gICAgICAgIHZhciBzdGF0dXMgPSBjb25kaXRpb24uc3RhdHVzO1xyXG4gICAgICAgIGlmIChzdGF0dXMgPT09IFwiVHJ1ZVwiKSB7XHJcbiAgICAgICAgICBhbnN3ZXIgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gYW5zd2VyO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFwcFZpZXdQb2RDb3VudGVycyhhcHBWaWV3KSB7XHJcbiAgICB2YXIgYXJyYXkgPSBbXTtcclxuICAgIHZhciBtYXAgPSB7fTtcclxuICAgIHZhciBwb2RzID0gYXBwVmlldy5wb2RzO1xyXG4gICAgdmFyIGxvd2VzdERhdGUgPSBudWxsO1xyXG4gICAgYW5ndWxhci5mb3JFYWNoKHBvZHMsIHBvZCA9PiB7XHJcbiAgICAgIHZhciBzZWxlY3RvciA9IGdldExhYmVscyhwb2QpO1xyXG4gICAgICB2YXIgc2VsZWN0b3JUZXh0ID0gS3ViZXJuZXRlcy5sYWJlbHNUb1N0cmluZyhzZWxlY3RvciwgXCIgXCIpO1xyXG4gICAgICB2YXIgYW5zd2VyID0gbWFwW3NlbGVjdG9yXTtcclxuICAgICAgaWYgKCFhbnN3ZXIpIHtcclxuICAgICAgICBhbnN3ZXIgPSB7XHJcbiAgICAgICAgICBsYWJlbFRleHQ6IHNlbGVjdG9yVGV4dCxcclxuICAgICAgICAgIHBvZHNMaW5rOiBVcmxIZWxwZXJzLmpvaW4oXCIva3ViZXJuZXRlcy9uYW1lc3BhY2UvXCIsIHBvZC5tZXRhZGF0YS5uYW1lc3BhY2UsIFwicG9kcz9xPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHNlbGVjdG9yVGV4dCkpLFxyXG4gICAgICAgICAgdmFsaWQ6IDAsXHJcbiAgICAgICAgICB3YWl0aW5nOiAwLFxyXG4gICAgICAgICAgZXJyb3I6IDBcclxuICAgICAgICB9O1xyXG4gICAgICAgIG1hcFtzZWxlY3Rvcl0gPSBhbnN3ZXI7XHJcbiAgICAgICAgYXJyYXkucHVzaChhbnN3ZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciBzdGF0dXMgPSAocG9kU3RhdHVzKHBvZCkgfHwgXCJFcnJvclwiKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICBpZiAoc3RhdHVzLnN0YXJ0c1dpdGgoXCJydW5cIikgfHwgc3RhdHVzLnN0YXJ0c1dpdGgoXCJva1wiKSkge1xyXG4gICAgICAgIGFuc3dlci52YWxpZCArPSAxO1xyXG4gICAgICB9IGVsc2UgaWYgKHN0YXR1cy5zdGFydHNXaXRoKFwid2FpdFwiKSB8fCBzdGF0dXMuc3RhcnRzV2l0aChcInB3bmRcIikpIHtcclxuICAgICAgICBhbnN3ZXIud2FpdGluZyArPSAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGFuc3dlci5lcnJvciArPSAxO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciBjcmVhdGlvblRpbWVzdGFtcCA9IGdldENyZWF0aW9uVGltZXN0YW1wKHBvZCk7XHJcbiAgICAgIGlmIChjcmVhdGlvblRpbWVzdGFtcCkge1xyXG4gICAgICAgIHZhciBkID0gbmV3IERhdGUoY3JlYXRpb25UaW1lc3RhbXApO1xyXG4gICAgICAgIGlmICghbG93ZXN0RGF0ZSB8fCBkIDwgbG93ZXN0RGF0ZSkge1xyXG4gICAgICAgICAgbG93ZXN0RGF0ZSA9IGQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGFwcFZpZXcuJGNyZWF0aW9uRGF0ZSA9IGxvd2VzdERhdGU7XHJcbiAgICByZXR1cm4gYXJyYXk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlQXBwVmlld1NlcnZpY2VWaWV3cyhhcHBWaWV3KSB7XHJcbiAgICB2YXIgYXJyYXkgPSBbXTtcclxuICAgIHZhciBwb2RzID0gYXBwVmlldy5wb2RzO1xyXG4gICAgYW5ndWxhci5mb3JFYWNoKHBvZHMsIHBvZCA9PiB7XHJcbiAgICAgIHZhciBpZCA9IGdldE5hbWUocG9kKTtcclxuICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgdmFyIGFiYnJldiA9IGlkO1xyXG4gICAgICAgIHZhciBpZHggPSBpZC5pbmRleE9mKFwiLVwiKTtcclxuICAgICAgICBpZiAoaWR4ID4gMSkge1xyXG4gICAgICAgICAgYWJicmV2ID0gaWQuc3Vic3RyaW5nKDAsIGlkeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBvZC5pZEFiYnJldiA9IGFiYnJldjtcclxuICAgICAgfVxyXG4gICAgICBwb2Quc3RhdHVzQ2xhc3MgPSBzdGF0dXNUZXh0VG9Dc3NDbGFzcyhwb2RTdGF0dXMocG9kKSwgaXNSZWFkeShwb2QpKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHZhciBzZXJ2aWNlcyA9IGFwcFZpZXcuc2VydmljZXMgfHwgW107XHJcbiAgICB2YXIgcmVwbGljYXRpb25Db250cm9sbGVycyA9IGFwcFZpZXcucmVwbGljYXRpb25Db250cm9sbGVycyB8fCBbXTtcclxuICAgIHZhciBzaXplID0gTWF0aC5tYXgoc2VydmljZXMubGVuZ3RoLCByZXBsaWNhdGlvbkNvbnRyb2xsZXJzLmxlbmd0aCwgMSk7XHJcbiAgICB2YXIgYXBwTmFtZSA9IGFwcFZpZXcuJGluZm8ubmFtZTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XHJcbiAgICAgIHZhciBzZXJ2aWNlID0gc2VydmljZXNbaV07XHJcbiAgICAgIHZhciByZXBsaWNhdGlvbkNvbnRyb2xsZXIgPSByZXBsaWNhdGlvbkNvbnRyb2xsZXJzW2ldO1xyXG4gICAgICB2YXIgY29udHJvbGxlcklkID0gZ2V0TmFtZShyZXBsaWNhdGlvbkNvbnRyb2xsZXIpO1xyXG4gICAgICB2YXIgbmFtZSA9IGdldE5hbWUoc2VydmljZSkgfHwgY29udHJvbGxlcklkO1xyXG4gICAgICB2YXIgYWRkcmVzcyA9IENvcmUucGF0aEdldChzZXJ2aWNlLCBbXCJzcGVjXCIsIFwicG9ydGFsSVBcIl0pO1xyXG4gICAgICBpZiAoIW5hbWUgJiYgcG9kcy5sZW5ndGgpIHtcclxuICAgICAgICBuYW1lID0gcG9kc1swXS5pZEFiYnJldjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWFwcFZpZXcuJGluZm8ubmFtZSkge1xyXG4gICAgICAgIGFwcFZpZXcuJGluZm8ubmFtZSA9IG5hbWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFhcHBWaWV3LmlkICYmIHBvZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgYXBwVmlldy5pZCA9IGdldE5hbWUocG9kc1swXSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGkgPiAwKSB7XHJcbiAgICAgICAgYXBwTmFtZSA9IG5hbWU7XHJcbiAgICAgIH1cclxuICAgICAgdmFyIHBvZENvdW50ID0gcG9kcy5sZW5ndGg7XHJcbiAgICAgIHZhciBwb2RDb3VudFRleHQgPSBwb2RDb3VudCArIFwiIHBvZFwiICsgKHBvZENvdW50ID4gMSA/IFwic1wiIDogXCJcIik7XHJcbiAgICAgIHZhciB2aWV3ID0ge1xyXG4gICAgICAgIGFwcE5hbWU6IGFwcE5hbWUgfHwgbmFtZSxcclxuICAgICAgICBuYW1lOiBuYW1lLFxyXG4gICAgICAgIGNyZWF0ZWREYXRlOiBhcHBWaWV3LiRjcmVhdGlvbkRhdGUsXHJcbiAgICAgICAgcG9kQ291bnQ6IHBvZENvdW50LFxyXG4gICAgICAgIHBvZENvdW50VGV4dDogcG9kQ291bnRUZXh0LFxyXG4gICAgICAgIGFkZHJlc3M6IGFkZHJlc3MsXHJcbiAgICAgICAgY29udHJvbGxlcklkOiBjb250cm9sbGVySWQsXHJcbiAgICAgICAgc2VydmljZTogc2VydmljZSxcclxuICAgICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXI6IHJlcGxpY2F0aW9uQ29udHJvbGxlcixcclxuICAgICAgICBwb2RzOiBwb2RzXHJcbiAgICAgIH07XHJcbiAgICAgIGFycmF5LnB1c2godmlldyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJyYXk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBjb252ZXJ0cyBhIGdpdCBwYXRoIGludG8gYW4gYWNjZXNzaWJsZSBVUkwgZm9yIHRoZSBicm93c2VyXHJcbiAgICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdpdFBhdGhUb1VybChpY29uUGF0aCwgYnJhbmNoID0gXCJtYXN0ZXJcIikge1xyXG4gICAgcmV0dXJuIChIYXd0aW9Db3JlLmluamVjdG9yLmdldDxzdHJpbmc+KCdBcHBMaWJyYXJ5VVJMJykgfHwgJycpICsgXCIvZ2l0L1wiICsgYnJhbmNoICsgaWNvblBhdGg7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBhc0RhdGUodmFsdWUpIHtcclxuICAgIHJldHVybiB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoQnVpbGRDb25maWcoYnVpbGRDb25maWcsIHNvcnRlZEJ1aWxkcykge1xyXG4gICAgaWYgKGJ1aWxkQ29uZmlnKSB7XHJcbiAgICAgIHZhciB0cmlnZ2VyVXJsOnN0cmluZyA9IG51bGw7XHJcbiAgICAgIHZhciBtZXRhZGF0YSA9IGJ1aWxkQ29uZmlnLm1ldGFkYXRhIHx8IHt9O1xyXG4gICAgICB2YXIgbmFtZSA9IG1ldGFkYXRhLm5hbWU7XHJcbiAgICAgIGJ1aWxkQ29uZmlnLiRuYW1lID0gbmFtZTtcclxuICAgICAgdmFyIHByb2plY3RMaW5rID0gRGV2ZWxvcGVyLnByb2plY3RMaW5rKG5hbWUpO1xyXG4gICAgICB2YXIgbnMgPSBtZXRhZGF0YS5uYW1lc3BhY2UgfHwgY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcclxuICAgICAgYnVpbGRDb25maWcuJG5hbWVzcGFjZSA9IG5zO1xyXG4gICAgICBidWlsZENvbmZpZy5lbnZpcm9ubWVudHMgPSBbXTtcclxuICAgICAgYnVpbGRDb25maWcuJGNyZWF0aW9uRGF0ZSA9IGFzRGF0ZShLdWJlcm5ldGVzLmdldENyZWF0aW9uVGltZXN0YW1wKGJ1aWxkQ29uZmlnKSk7XHJcbiAgICAgIGJ1aWxkQ29uZmlnLiRsYWJlbHNUZXh0ID0gS3ViZXJuZXRlcy5sYWJlbHNUb1N0cmluZyhnZXRMYWJlbHMoYnVpbGRDb25maWcpKTtcclxuXHJcbiAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgYnVpbGRDb25maWcuJHZpZXdMaW5rID0gVXJsSGVscGVycy5qb2luKFwid29ya3NwYWNlc1wiLCBucywgXCJwcm9qZWN0c1wiLCBuYW1lLCBcImVudmlyb25tZW50c1wiKTtcclxuICAgICAgICBidWlsZENvbmZpZy4kZWRpdExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCJ3b3Jrc3BhY2VzXCIsIG5zLCBcInByb2plY3RzXCIsIG5hbWUsIFwiYnVpbGRDb25maWdFZGl0XCIpO1xyXG5cclxuICAgICAgICBhbmd1bGFyLmZvckVhY2goW2ZhbHNlLCB0cnVlXSwgKGZsYWcpID0+IHtcclxuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChidWlsZENvbmZpZy50cmlnZ2VycywgKHRyaWdnZXIpID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0cmlnZ2VyVXJsKSB7XHJcbiAgICAgICAgICAgICAgdmFyIHR5cGUgPSB0cmlnZ2VyLnR5cGU7XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IFwiZ2VuZXJpY1wiIHx8IGZsYWcpIHtcclxuICAgICAgICAgICAgICAgIHZhciBnZW5lcmljID0gdHJpZ2dlclt0eXBlXTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlICYmIGdlbmVyaWMpIHtcclxuICAgICAgICAgICAgICAgICAgdmFyIHNlY3JldCA9IGdlbmVyaWMuc2VjcmV0O1xyXG4gICAgICAgICAgICAgICAgICBpZiAoc2VjcmV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlclVybCA9IFVybEhlbHBlcnMuam9pbihidWlsZENvbmZpZ0hvb2tzUmVzdFVSTCgpLCBuYW1lLCBzZWNyZXQsIHR5cGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29uZmlnLiR0cmlnZ2VyVXJsID0gdHJpZ2dlclVybDtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIGxldHMgZmluZCB0aGUgbGF0ZXN0IGJ1aWxkLi4uXHJcbiAgICAgICAgaWYgKHNvcnRlZEJ1aWxkcykge1xyXG4gICAgICAgICAgYnVpbGRDb25maWcuJGxhc3RCdWlsZCA9IF8uZmluZChzb3J0ZWRCdWlsZHMsIHtcclxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcclxuICAgICAgICAgICAgICBsYWJlbHM6IHtcclxuICAgICAgICAgICAgICAgIGJ1aWxkY29uZmlnOiBuYW1lXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdmFyICRmYWJyaWM4Vmlld3MgPSB7fTtcclxuXHJcbiAgICAgIGZ1bmN0aW9uIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdChuYW1lLCBvYmplY3QsIGF1dG9DcmVhdGUgPSBmYWxzZSkge1xyXG4gICAgICAgIHZhciB2aWV3ID0gJGZhYnJpYzhWaWV3c1tuYW1lXTtcclxuICAgICAgICBpZiAoYXV0b0NyZWF0ZSAmJiAhdmlldykge1xyXG4gICAgICAgICAgdmlldyA9IHt9XHJcbiAgICAgICAgICAkZmFicmljOFZpZXdzW25hbWVdID0gdmlldztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZpZXcpIHtcclxuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChvYmplY3QsICh2YWx1ZSwgcHJvcGVydHkpID0+IHtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSB2aWV3W3Byb3BlcnR5XTtcclxuICAgICAgICAgICAgaWYgKCFjdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgdmlld1twcm9wZXJ0eV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBmdW5jdGlvbiBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3RTdGFydHNXaXRoKHByZWZpeCwgb2JqZWN0LCBhdXRvQ3JlYXRlID0gZmFsc2UpIHtcclxuICAgICAgICBhbmd1bGFyLmZvckVhY2goJGZhYnJpYzhWaWV3cywgKHZpZXcsIG5hbWUpID0+IHtcclxuICAgICAgICAgIGlmICh2aWV3ICYmIG5hbWUuc3RhcnRzV2l0aChwcmVmaXgpKSB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChvYmplY3QsICh2YWx1ZSwgcHJvcGVydHkpID0+IHtcclxuICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IHZpZXdbcHJvcGVydHldO1xyXG4gICAgICAgICAgICAgIGlmICghY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgdmlld1twcm9wZXJ0eV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgbGFiZWxzID0gbWV0YWRhdGEubGFiZWxzIHx8IHt9O1xyXG4gICAgICB2YXIgYW5ub3RhdGlvbnMgPSBtZXRhZGF0YS5hbm5vdGF0aW9ucyB8fCB7fTtcclxuXHJcbiAgICAgIC8vIGxldHMgZGVmYXVsdCB0aGUgcmVwbyBhbmQgdXNlclxyXG4gICAgICBidWlsZENvbmZpZy4kdXNlciA9IGFubm90YXRpb25zW1wiZmFicmljOC5qZW5raW5zL3VzZXJcIl0gfHwgbGFiZWxzW1widXNlclwiXTtcclxuICAgICAgYnVpbGRDb25maWcuJHJlcG8gPSBhbm5vdGF0aW9uc1tcImZhYnJpYzguamVua2lucy9yZXBvXCJdIHx8IGxhYmVsc1tcInJlcG9cIl07XHJcblxyXG4gICAgICBhbmd1bGFyLmZvckVhY2goYW5ub3RhdGlvbnMsICh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgdmFyIHBhcnRzID0ga2V5LnNwbGl0KCcvJywgMik7XHJcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgIHZhciBsaW5rSWQgPSBwYXJ0c1swXTtcclxuICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IHBhcnRzWzFdO1xyXG4gICAgICAgICAgaWYgKGxpbmtJZCAmJiBwcm9wZXJ0eSAmJiBsaW5rSWQuc3RhcnRzV2l0aChcImZhYnJpYzgubGlua1wiKSkge1xyXG4gICAgICAgICAgICB2YXIgbGluayA9ICRmYWJyaWM4Vmlld3NbbGlua0lkXTtcclxuICAgICAgICAgICAgaWYgKCFsaW5rKSB7XHJcbiAgICAgICAgICAgICAgbGluayA9IHtcclxuICAgICAgICAgICAgICAgIGNsYXNzOiBsaW5rSWRcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICRmYWJyaWM4Vmlld3NbbGlua0lkXSA9IGxpbms7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGlua1twcm9wZXJ0eV0gPSB2YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKGJ1aWxkQ29uZmlnLiR1c2VyICYmIGJ1aWxkQ29uZmlnLiRyZXBvKSB7XHJcbiAgICAgICAgLy8gYnJvd3NlIGdvZ3MgcmVwbyB2aWV3XHJcbiAgICAgICAgdmFyIGdvZ3NVcmwgPSBzZXJ2aWNlTGlua1VybChnb2dzU2VydmljZU5hbWUpO1xyXG4gICAgICAgIGlmIChnb2dzVXJsKSB7XHJcbiAgICAgICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsuYnJvd3NlR29ncy52aWV3XCIsIHtcclxuICAgICAgICAgICAgbGFiZWw6IFwiQnJvd3NlLi4uXCIsXHJcbiAgICAgICAgICAgIHVybDogVXJsSGVscGVycy5qb2luKGdvZ3NVcmwsIGJ1aWxkQ29uZmlnLiR1c2VyLCBidWlsZENvbmZpZy4kcmVwbyksXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkJyb3dzZSB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyByZXBvc2l0b3J5XCIsXHJcbiAgICAgICAgICAgIGljb25DbGFzczogXCJmYSBmYS1leHRlcm5hbC1saW5rXCJcclxuICAgICAgICAgIH0sIHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcnVuIGZvcmdlIGNvbW1hbmRzIHZpZXdcclxuICAgICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsuZm9yZ2VDb21tYW5kLnZpZXdcIiwge1xyXG4gICAgICAgICAgbGFiZWw6IFwiQ29tbWFuZC4uLlwiLFxyXG4gICAgICAgICAgdXJsOiBVcmxIZWxwZXJzLmpvaW4ocHJvamVjdExpbmssIFwiL2ZvcmdlL2NvbW1hbmRzL3VzZXJcIiwgYnVpbGRDb25maWcuJHVzZXIsIGJ1aWxkQ29uZmlnLiRyZXBvKSxcclxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlBlcmZvcm0gYW4gYWN0aW9uIG9uIHRoaXMgcHJvamVjdFwiLFxyXG4gICAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLXBsYXktY2lyY2xlXCJcclxuICAgICAgICB9LCB0cnVlKTtcclxuXHJcblxyXG4gICAgICAgIC8vIGNvbmZpZ3VyZSBkZXZvcHMgdmlld1xyXG4gICAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdChcImZhYnJpYzgubGluay5mb3JnZUNvbW1hbmQuZGV2b3BzLnNldHRpbmdzXCIsIHtcclxuICAgICAgICAgIGxhYmVsOiBcIlNldHRpbmdzXCIsXHJcbiAgICAgICAgICB1cmw6IFVybEhlbHBlcnMuam9pbihwcm9qZWN0TGluaywgXCIvZm9yZ2UvY29tbWFuZC9kZXZvcHMtZWRpdC91c2VyXCIsIGJ1aWxkQ29uZmlnLiR1c2VyLCBidWlsZENvbmZpZy4kcmVwbyksXHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJDb25maWd1cmUgdGhlIERldk9wcyBzZXR0aW5ncyBmb3IgdGhpcyBwcm9qZWN0XCIsXHJcbiAgICAgICAgICBpY29uQ2xhc3M6IFwiZmEgZmEtcGVuY2lsLXNxdWFyZS1vXCJcclxuICAgICAgICB9LCB0cnVlKTtcclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGFkZCBzb21lIGljb25zIGFuZCBkZXNjcmlwdGlvbnNcclxuICAgICAgZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0KFwiZmFicmljOC5saW5rLnJlcG9zaXRvcnkuYnJvd3NlXCIsIHtcclxuICAgICAgICBsYWJlbDogXCJCcm93c2UuLi5cIixcclxuICAgICAgICBkZXNjcmlwdGlvbjogXCJCcm93c2UgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgcmVwb3NpdG9yeVwiLFxyXG4gICAgICAgIGljb25DbGFzczogXCJmYSBmYS1leHRlcm5hbC1saW5rXCJcclxuICAgICAgfSk7XHJcbiAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdChcImZhYnJpYzgubGluay5qZW5raW5zLmpvYlwiLCB7XHJcbiAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLXRhc2tzXCIsXHJcbiAgICAgICAgZGVzY3JpcHRpb246IFwiVmlldyB0aGUgSmVua2lucyBKb2IgZm9yIHRoaXMgYnVpbGRcIlxyXG4gICAgICB9KTtcclxuICAgICAgZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0KFwiZmFicmljOC5saW5rLmplbmtpbnMubW9uaXRvclwiLCB7XHJcbiAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLXRhY2hvbWV0ZXJcIixcclxuICAgICAgICBkZXNjcmlwdGlvbjogXCJWaWV3IHRoZSBKZW5raW5zIE1vbml0b3IgZGFzaGJvYXJkIGZvciB0aGlzIHByb2plY3RcIlxyXG4gICAgICB9KTtcclxuICAgICAgZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0KFwiZmFicmljOC5saW5rLmplbmtpbnMucGlwZWxpbmVcIiwge1xyXG4gICAgICAgIGljb25DbGFzczogXCJmYSBmYS1hcnJvdy1jaXJjbGUtby1yaWdodFwiLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlZpZXcgdGhlIEplbmtpbnMgUGlwZWxpbmUgZm9yIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgIH0pO1xyXG4gICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsubGV0c2NoYXQucm9vbVwiLCB7XHJcbiAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLWNvbW1lbnRcIixcclxuICAgICAgICBkZXNjcmlwdGlvbjogXCJDaGF0IHJvb20gZm9yIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgIH0pO1xyXG4gICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsubGV0c2NoYXQucm9vbVwiLCB7XHJcbiAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLWNvbW1lbnRcIixcclxuICAgICAgICBkZXNjcmlwdGlvbjogXCJDaGF0IHJvb20gZm9yIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgIH0pO1xyXG4gICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsudGFpZ2FcIiwge1xyXG4gICAgICAgIGljb25DbGFzczogXCJmYSBmYS1jaGVjay1zcXVhcmUtb1wiLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIklzc3VlIHRyYWNrZXIgZm9yIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgIH0pO1xyXG4gICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsuaXNzdWVzXCIsIHtcclxuICAgICAgICBpY29uQ2xhc3M6IFwiZmEgZmEtY2hlY2stc3F1YXJlLW9cIixcclxuICAgICAgICBkZXNjcmlwdGlvbjogXCJJc3N1ZXMgZm9yIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgIH0pO1xyXG4gICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsucmVsZWFzZXNcIiwge1xyXG4gICAgICAgIGljb25DbGFzczogXCJmYSBmYS10YWdcIixcclxuICAgICAgICBkZXNjcmlwdGlvbjogXCJJc3N1ZXMgZm9yIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgIH0pO1xyXG4gICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsudGFpZ2EudGVhbVwiLCB7XHJcbiAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLXVzZXJzXCIsXHJcbiAgICAgICAgZGVzY3JpcHRpb246IFwiVGVhbSBtZW1iZXJzIGZvciB0aGlzIHByb2plY3RcIlxyXG4gICAgICB9KTtcclxuICAgICAgZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0KFwiZmFicmljOC5saW5rLnRlYW1cIiwge1xyXG4gICAgICAgIGljb25DbGFzczogXCJmYSBmYS11c2Vyc1wiLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlRlYW0gbWVtYmVycyBmb3IgdGhpcyBwcm9qZWN0XCJcclxuICAgICAgfSk7XHJcbiAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdFN0YXJ0c1dpdGgoXCJmYWJyaWM4LmxpbmsuZW52aXJvbm1lbnQuXCIsIHtcclxuICAgICAgICBpY29uQ2xhc3M6IFwiZmEgZmEtY2xvdWRcIixcclxuICAgICAgICBkZXNjcmlwdGlvbjogXCJUaGUga3ViZXJuZXRlcyBuYW1lc3BhY2UgZm9yIHRoaXMgZW52aXJvbm1lbnRcIlxyXG4gICAgICB9KTtcclxuXHJcblxyXG4gICAgICAvLyBsZXRzIHB1dCB0aGUgdmlld3MgaW50byBzZWN0aW9ucy4uLlxyXG4gICAgICB2YXIgJGZhYnJpYzhDb2RlVmlld3MgPSB7fTtcclxuICAgICAgdmFyICRmYWJyaWM4QnVpbGRWaWV3cyA9IHt9O1xyXG4gICAgICB2YXIgJGZhYnJpYzhUZWFtVmlld3MgPSB7fTtcclxuICAgICAgdmFyICRmYWJyaWM4RW52aXJvbm1lbnRWaWV3cyA9IHt9O1xyXG4gICAgICBhbmd1bGFyLmZvckVhY2goJGZhYnJpYzhWaWV3cywgKHZhbHVlLCBrZXkpID0+IHtcclxuICAgICAgICB2YXIgdmlldztcclxuICAgICAgICBpZiAoa2V5LmluZGV4T2YoXCJ0YWlnYVwiKSA+IDAgfHwga2V5LmluZGV4T2YoXCIuaXNzdWVcIikgPiAwIHx8IGtleS5pbmRleE9mKFwibGV0c2NoYXRcIikgPiAwfHwga2V5LmluZGV4T2YoXCIudGVhbVwiKSA+IDApIHtcclxuICAgICAgICAgIHZpZXcgPSAkZmFicmljOFRlYW1WaWV3cztcclxuICAgICAgICB9IGVsc2UgaWYgKGtleS5pbmRleE9mKFwiamVua2luc1wiKSA+IDApIHtcclxuICAgICAgICAgIHZpZXcgPSAkZmFicmljOEJ1aWxkVmlld3M7XHJcbiAgICAgICAgfSBlbHNlIGlmIChrZXkuaW5kZXhPZihcIi5lbnZpcm9ubWVudC5cIikgPiAwKSB7XHJcbiAgICAgICAgICB2aWV3ID0gJGZhYnJpYzhFbnZpcm9ubWVudFZpZXdzO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2aWV3ID0gJGZhYnJpYzhDb2RlVmlld3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZpZXdba2V5XSA9IHZhbHVlO1xyXG4gICAgICB9KTtcclxuXHJcblxyXG4gICAgICBidWlsZENvbmZpZy4kZmFicmljOFZpZXdzID0gJGZhYnJpYzhWaWV3cztcclxuICAgICAgYnVpbGRDb25maWcuJGZhYnJpYzhDb2RlVmlld3MgPSAkZmFicmljOENvZGVWaWV3cztcclxuICAgICAgYnVpbGRDb25maWcuJGZhYnJpYzhCdWlsZFZpZXdzID0gJGZhYnJpYzhCdWlsZFZpZXdzO1xyXG4gICAgICBidWlsZENvbmZpZy4kZmFicmljOEVudmlyb25tZW50Vmlld3MgPSAkZmFicmljOEVudmlyb25tZW50Vmlld3M7XHJcbiAgICAgIGJ1aWxkQ29uZmlnLiRmYWJyaWM4VGVhbVZpZXdzID0gJGZhYnJpYzhUZWFtVmlld3M7XHJcblxyXG4gICAgICB2YXIgJGplbmtpbnNKb2IgPSBhbm5vdGF0aW9uc1tcImZhYnJpYzguaW8vamVua2lucy1qb2JcIl07XHJcbiAgICAgIGlmICghJGplbmtpbnNKb2IgJiYgJGZhYnJpYzhWaWV3c1tcImZhYnJpYzgubGluay5qZW5raW5zLmpvYlwiXSkge1xyXG4gICAgICAgICRqZW5raW5zSm9iID0gbmFtZTtcclxuICAgICAgfVxyXG4gICAgICBidWlsZENvbmZpZy4kamVua2luc0pvYiA9ICRqZW5raW5zSm9iO1xyXG5cclxuICAgICAgYW5ndWxhci5mb3JFYWNoKCRmYWJyaWM4RW52aXJvbm1lbnRWaWV3cywgKGVudikgPT4ge1xyXG4gICAgICAgIHZhciBjID0gZW52LmNsYXNzO1xyXG4gICAgICAgIHZhciBwcmVmaXggPSBcImZhYnJpYzgubGluay5lbnZpcm9ubWVudC5cIjtcclxuICAgICAgICBpZiAoYyAmJiBjLnN0YXJ0c1dpdGgocHJlZml4KSkge1xyXG4gICAgICAgICAgdmFyIGVucyA9IGMuc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpO1xyXG4gICAgICAgICAgZW52Lm5hbWVzcGFjZSA9IGVucztcclxuICAgICAgICAgIGVudi51cmwgPSBVcmxIZWxwZXJzLmpvaW4oXCIvd29ya3NwYWNlc1wiLCBucywgXCJwcm9qZWN0c1wiLCBuYW1lLCBcIm5hbWVzcGFjZVwiLCBlbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBidWlsZENvbmZpZy5lbnZpcm9ubWVudHMucHVzaChlbnYpO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKCFidWlsZENvbmZpZy5lbnZpcm9ubWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgLy8gbGV0cyBjcmVhdGUgYSBzaW5nbGUgZW52aXJvbm1lbnRcclxuICAgICAgICB2YXIgZW5zID0gbnM7XHJcbiAgICAgICAgdmFyIGVudiA9IHtcclxuICAgICAgICAgIG5hbWVzcGFjZTogZW5zLFxyXG4gICAgICAgICAgbGFiZWw6IFwiQ3VycmVudFwiLFxyXG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiVGhlIGVudmlyb25lbW50IHRoYXQgdGhpcyBwcm9qZWN0IGlzIGJ1aWx0IGFuZCBydW4gaW5zaWRlXCIsXHJcbiAgICAgICAgICBpY29uQ2xhc3M6IFwiZmEgZmEtY2xvdWRcIixcclxuICAgICAgICAgIHVybDogVXJsSGVscGVycy5qb2luKFwiL3dvcmtzcGFjZXNcIiwgbnMsIFwicHJvamVjdHNcIiwgbmFtZSwgXCJuYW1lc3BhY2VcIiwgZW5zKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnVpbGRDb25maWcuZW52aXJvbm1lbnRzLnB1c2goZW52KTtcclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGJ1aWxkQ29uZmlnLmVudmlyb25tZW50cyA9IGJ1aWxkQ29uZmlnLmVudmlyb25tZW50cy5yZXZlcnNlKCk7XHJcblxyXG4gICAgICBidWlsZENvbmZpZy50b29scyA9IFtdO1xyXG4gICAgICBhbmd1bGFyLmZvckVhY2goJGZhYnJpYzhDb2RlVmlld3MsIChlbnYpID0+IHtcclxuICAgICAgICBidWlsZENvbmZpZy50b29scy5wdXNoKGVudik7XHJcbiAgICAgIH0pO1xyXG4gICAgICBhbmd1bGFyLmZvckVhY2goJGZhYnJpYzhUZWFtVmlld3MsIChlbnYpID0+IHtcclxuICAgICAgICBidWlsZENvbmZpZy50b29scy5wdXNoKGVudik7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hCdWlsZENvbmZpZ3MoYnVpbGRDb25maWdzLCBzb3J0ZWRCdWlsZHMgPSBudWxsKSB7XHJcbiAgICBhbmd1bGFyLmZvckVhY2goYnVpbGRDb25maWdzLCAoYnVpbGRDb25maWcpID0+IHtcclxuICAgICAgZW5yaWNoQnVpbGRDb25maWcoYnVpbGRDb25maWcsIHNvcnRlZEJ1aWxkcyk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBidWlsZENvbmZpZ3M7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoQnVpbGRzKGJ1aWxkcykge1xyXG4gICAgYW5ndWxhci5mb3JFYWNoKGJ1aWxkcywgKGJ1aWxkKSA9PiB7XHJcbiAgICAgIGVucmljaEJ1aWxkKGJ1aWxkKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIF8uc29ydEJ5KGJ1aWxkcywgXCIkY3JlYXRpb25EYXRlXCIpLnJldmVyc2UoKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hCdWlsZChidWlsZCkge1xyXG4gICAgaWYgKGJ1aWxkKSB7XHJcbiAgICAgIHZhciBtZXRhZGF0YSA9IGJ1aWxkLm1ldGFkYXRhIHx8IHt9O1xyXG4gICAgICB2YXIgYW5ub3RhdGlvbnMgPSBtZXRhZGF0YS5hbm5vdGF0aW9ucyB8fCB7fTtcclxuICAgICAgdmFyIG5hbWUgPSBnZXROYW1lKGJ1aWxkKTtcclxuICAgICAgdmFyIG5hbWVzcGFjZSA9IGdldE5hbWVzcGFjZShidWlsZCk7XHJcbiAgICAgIGJ1aWxkLiRuYW1lID0gbmFtZTtcclxuICAgICAgYnVpbGQuJG5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcclxuXHJcbiAgICAgIHZhciBuYW1lQXJyYXkgPSBuYW1lLnNwbGl0KFwiLVwiKTtcclxuICAgICAgdmFyIG5hbWVBcnJheUxlbmd0aCA9IG5hbWVBcnJheS5sZW5ndGg7XHJcbiAgICAgIGJ1aWxkLiRzaG9ydE5hbWUgPSAobmFtZUFycmF5TGVuZ3RoID4gNCkgPyBuYW1lQXJyYXkuc2xpY2UoMCwgbmFtZUFycmF5TGVuZ3RoIC0gNCkuam9pbihcIi1cIikgOiBuYW1lLnN1YnN0cmluZygwLCAzMCk7XHJcblxyXG4gICAgICB2YXIgbGFiZWxzID0gZ2V0TGFiZWxzKGJ1aWxkKTtcclxuICAgICAgdmFyIGNvbmZpZ0lkID0gbGFiZWxzLmJ1aWxkY29uZmlnO1xyXG4gICAgICBidWlsZC4kY29uZmlnSWQgPSBjb25maWdJZDtcclxuICAgICAgaWYgKGNvbmZpZ0lkKSB7XHJcbiAgICAgICAgLy9idWlsZC4kY29uZmlnTGluayA9IFVybEhlbHBlcnMuam9pbihcImt1YmVybmV0ZXMvYnVpbGRDb25maWdzXCIsIGNvbmZpZ0lkKTtcclxuICAgICAgICBidWlsZC4kY29uZmlnTGluayA9IFVybEhlbHBlcnMuam9pbihcIndvcmtzcGFjZXNcIiwgY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKSwgXCJwcm9qZWN0c1wiLCBjb25maWdJZCk7XHJcbiAgICAgIH1cclxuICAgICAgdmFyIGNyZWF0aW9uVGltZXN0YW1wID0gZ2V0Q3JlYXRpb25UaW1lc3RhbXAoYnVpbGQpO1xyXG4gICAgICBpZiAoY3JlYXRpb25UaW1lc3RhbXApIHtcclxuICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKGNyZWF0aW9uVGltZXN0YW1wKTtcclxuICAgICAgICBidWlsZC4kY3JlYXRpb25EYXRlID0gZDtcclxuICAgICAgfVxyXG4gICAgICBpZiAobmFtZSkge1xyXG4gICAgICAgIC8vYnVpbGQuJHZpZXdMaW5rID0gVXJsSGVscGVycy5qb2luKFwia3ViZXJuZXRlcy9idWlsZHNcIiwgbmFtZSk7XHJcbiAgICAgICAgdmFyIHByb2plY3RMaW5rID0gVXJsSGVscGVycy5qb2luKFwid29ya3NwYWNlc1wiLCBjdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpLCBcInByb2plY3RzXCIsIGNvbmZpZ0lkKTtcclxuICAgICAgICBidWlsZC4kdmlld0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4ocHJvamVjdExpbmssIFwiYnVpbGRzXCIsIG5hbWUpO1xyXG4gICAgICAgIC8vYnVpbGQuJGxvZ3NMaW5rID0gVXJsSGVscGVycy5qb2luKFwia3ViZXJuZXRlcy9idWlsZExvZ3NcIiwgbmFtZSk7XHJcbiAgICAgICAgYnVpbGQuJGxvZ3NMaW5rID0gVXJsSGVscGVycy5qb2luKHByb2plY3RMaW5rLCBcImJ1aWxkTG9nc1wiLCBuYW1lKTtcclxuICAgICAgfVxyXG4gICAgICBidWlsZC5wb2ROYW1lID0gYnVpbGQucG9kTmFtZSB8fCBhbm5vdGF0aW9uc1tcIm9wZW5zaGlmdC5pby9idWlsZC5wb2QtbmFtZVwiXTtcclxuICAgICAgdmFyIHBvZE5hbWUgPSBidWlsZC5wb2ROYW1lO1xyXG4gICAgICBpZiAocG9kTmFtZSAmJiBuYW1lc3BhY2UpIHtcclxuICAgICAgICB2YXIgcG9kTmFtZUFycmF5ID0gcG9kTmFtZS5zcGxpdChcIi1cIik7XHJcbiAgICAgICAgdmFyIHBvZE5hbWVBcnJheUxlbmd0aCA9IHBvZE5hbWVBcnJheS5sZW5ndGg7XHJcbiAgICAgICAgYnVpbGQuJHBvZFNob3J0TmFtZSA9IChwb2ROYW1lQXJyYXlMZW5ndGggPiA1KSA/IHBvZE5hbWVBcnJheVtwb2ROYW1lQXJyYXlMZW5ndGggLSA1XSA6IHBvZE5hbWUuc3Vic3RyaW5nKDAsIDMwKTtcclxuICAgICAgICBidWlsZC4kcG9kTGluayA9IFVybEhlbHBlcnMuam9pbihcImt1YmVybmV0ZXMvbmFtZXNwYWNlXCIsIG5hbWVzcGFjZSwgXCJwb2RzXCIsIHBvZE5hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYnVpbGQ7XHJcbiAgfVxyXG5cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaERlcGxveW1lbnRDb25maWcoZGVwbG95bWVudENvbmZpZykge1xyXG4gICAgaWYgKGRlcGxveW1lbnRDb25maWcpIHtcclxuICAgICAgdmFyIHRyaWdnZXJVcmw6c3RyaW5nID0gbnVsbDtcclxuICAgICAgdmFyIG5hbWUgPSBDb3JlLnBhdGhHZXQoZGVwbG95bWVudENvbmZpZywgW1wibWV0YWRhdGFcIiwgXCJuYW1lXCJdKTtcclxuICAgICAgZGVwbG95bWVudENvbmZpZy4kbmFtZSA9IG5hbWU7XHJcbiAgICAgIHZhciBmb3VuZCA9IGZhbHNlO1xyXG4gICAgICBhbmd1bGFyLmZvckVhY2goZGVwbG95bWVudENvbmZpZy50cmlnZ2VycywgKHRyaWdnZXIpID0+IHtcclxuICAgICAgICB2YXIgdHlwZSA9IHRyaWdnZXIudHlwZTtcclxuICAgICAgICBpZiAoIWRlcGxveW1lbnRDb25maWcuJGltYWdlQ2hhbmdlUGFyYW1zICYmIHR5cGUgPT09IFwiSW1hZ2VDaGFuZ2VcIikge1xyXG4gICAgICAgICAgdmFyIGltYWdlQ2hhbmdlUGFyYW1zID0gdHJpZ2dlci5pbWFnZUNoYW5nZVBhcmFtcztcclxuICAgICAgICAgIGlmIChpbWFnZUNoYW5nZVBhcmFtcykge1xyXG4gICAgICAgICAgICB2YXIgY29udGFpbmVyTmFtZXMgPSBpbWFnZUNoYW5nZVBhcmFtcy5jb250YWluZXJOYW1lcyB8fCBbXTtcclxuICAgICAgICAgICAgaW1hZ2VDaGFuZ2VQYXJhbXMuJGNvbnRhaW5lck5hbWVzID0gY29udGFpbmVyTmFtZXMuam9pbihcIiBcIik7XHJcbiAgICAgICAgICAgIGRlcGxveW1lbnRDb25maWcuJGltYWdlQ2hhbmdlUGFyYW1zID0gaW1hZ2VDaGFuZ2VQYXJhbXM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hEZXBsb3ltZW50Q29uZmlncyhkZXBsb3ltZW50Q29uZmlncykge1xyXG4gICAgYW5ndWxhci5mb3JFYWNoKGRlcGxveW1lbnRDb25maWdzLCAoZGVwbG95bWVudENvbmZpZykgPT4ge1xyXG4gICAgICBlbnJpY2hEZXBsb3ltZW50Q29uZmlnKGRlcGxveW1lbnRDb25maWcpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZGVwbG95bWVudENvbmZpZ3M7XHJcbiAgfVxyXG5cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEV2ZW50KGV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgdmFyIG1ldGFkYXRhID0gZXZlbnQubWV0YWRhdGEgfHwge307XHJcblxyXG4gICAgICB2YXIgZmlyc3RUaW1lc3RhbXAgPSBldmVudC5maXJzdFRpbWVzdGFtcDtcclxuICAgICAgaWYgKGZpcnN0VGltZXN0YW1wKSB7XHJcbiAgICAgICAgdmFyIGQgPSBuZXcgRGF0ZShmaXJzdFRpbWVzdGFtcCk7XHJcbiAgICAgICAgZXZlbnQuJGZpcnN0VGltZXN0YW1wID0gZDtcclxuICAgICAgfVxyXG4gICAgICB2YXIgbGFzdFRpbWVzdGFtcCA9IGV2ZW50Lmxhc3RUaW1lc3RhbXA7XHJcbiAgICAgIGlmIChsYXN0VGltZXN0YW1wKSB7XHJcbiAgICAgICAgdmFyIGQgPSBuZXcgRGF0ZShsYXN0VGltZXN0YW1wKTtcclxuICAgICAgICBldmVudC4kbGFzdFRpbWVzdGFtcCA9IGQ7XHJcbiAgICAgIH1cclxuICAgICAgdmFyIGxhYmVscyA9IGFuZ3VsYXIuY29weShldmVudC5zb3VyY2UgfHwge30pO1xyXG4gICAgICB2YXIgaW52b2x2ZWRPYmplY3QgPSBldmVudC5pbnZvbHZlZE9iamVjdCB8fCB7fTtcclxuICAgICAgdmFyIG5hbWUgPSBpbnZvbHZlZE9iamVjdC5uYW1lO1xyXG4gICAgICB2YXIga2luZCA9IGludm9sdmVkT2JqZWN0LmtpbmQ7XHJcbiAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgbGFiZWxzWyduYW1lJ10gPSBuYW1lO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChraW5kKSB7XHJcbiAgICAgICAgbGFiZWxzWydraW5kJ10gPSBraW5kO1xyXG4gICAgICB9XHJcbiAgICAgIGV2ZW50LiRsYWJlbHNUZXh0ID0gS3ViZXJuZXRlcy5sYWJlbHNUb1N0cmluZyhsYWJlbHMpO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hFdmVudHMoZXZlbnRzLCBtb2RlbCA9IG51bGwpIHtcclxuICAgIGFuZ3VsYXIuZm9yRWFjaChldmVudHMsIChldmVudCkgPT4ge1xyXG4gICAgICBlbnJpY2hFdmVudChldmVudCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBsZXRzIHVwZGF0ZSBsaW5rcyB0byB0aGUgZXZlbnRzIGZvciBlYWNoIHBvZCBhbmQgUkNcclxuICAgIGlmIChtb2RlbCkge1xyXG4gICAgICBmdW5jdGlvbiBjbGVhckV2ZW50cyhlbnRpdHkpIHtcclxuICAgICAgICBlbnRpdHkuJGV2ZW50cyA9IFtdO1xyXG4gICAgICAgIGVudGl0eS4kZXZlbnRzTGluayA9IG51bGw7XHJcbiAgICAgICAgZW50aXR5LiRldmVudENvdW50ID0gMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgZnVuY3Rpb24gdXBkYXRlRXZlbnQoZW50aXR5LCBldmVudCkge1xyXG4gICAgICAgIGlmIChlbnRpdHkpIHtcclxuICAgICAgICAgIGVudGl0eS4kZXZlbnRzLnB1c2goZXZlbnQpO1xyXG4gICAgICAgICAgaWYgKCFlbnRpdHkuJGV2ZW50c0xpbmspIHtcclxuICAgICAgICAgICAgZW50aXR5LiRldmVudHNMaW5rID0gVXJsSGVscGVycy5qb2luKFwiL2t1YmVybmV0ZXMvbmFtZXNwYWNlL1wiLCBjdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpLCBcImV2ZW50c1wiKSArIFwiP3E9a2luZCUzRFwiICsgZW50aXR5LmtpbmQgKyBcIiUyMG5hbWUlM0RcIiArIGVudGl0eS5tZXRhZGF0YS5uYW1lO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZW50aXR5LiRldmVudENvdW50ID0gZW50aXR5LiRldmVudHMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHBvZHMgPSBtb2RlbC5wb2RzIHx8IFtdO1xyXG4gICAgICB2YXIgcmNzID0gbW9kZWwucmVwbGljYXRpb25Db250cm9sbGVycyB8fCBbXTtcclxuICAgICAgYW5ndWxhci5mb3JFYWNoKHBvZHMsIGNsZWFyRXZlbnRzKTtcclxuICAgICAgYW5ndWxhci5mb3JFYWNoKHJjcywgY2xlYXJFdmVudHMpO1xyXG5cclxuICAgICAgYW5ndWxhci5mb3JFYWNoKGV2ZW50cywgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgdmFyIGludm9sdmVkT2JqZWN0ID0gZXZlbnQuaW52b2x2ZWRPYmplY3QgfHwge307XHJcbiAgICAgICAgdmFyIG5hbWUgPSBpbnZvbHZlZE9iamVjdC5uYW1lO1xyXG4gICAgICAgIHZhciBraW5kID0gaW52b2x2ZWRPYmplY3Qua2luZDtcclxuICAgICAgICB2YXIgbnMgPSBtb2RlbC5jdXJyZW50TmFtZXNwYWNlKCk7XHJcbiAgICAgICAgaWYgKG5hbWUgJiYga2luZCAmJiBucykge1xyXG4gICAgICAgICAgdmFyIGVudGl0eSA9IG51bGw7XHJcbiAgICAgICAgICBpZiAoa2luZCA9PT0gXCJSZXBsaWNhdGlvbkNvbnRyb2xsZXJcIikge1xyXG4gICAgICAgICAgICBlbnRpdHkgPSBtb2RlbC5nZXRSZXBsaWNhdGlvbkNvbnRyb2xsZXIobnMsIG5hbWUpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChraW5kID09PSBcIlBvZFwiKSB7XHJcbiAgICAgICAgICAgIGVudGl0eSA9IG1vZGVsLmdldFBvZChucywgbmFtZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZW50aXR5KSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZUV2ZW50KGVudGl0eSwgZXZlbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZXZlbnRzO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEltYWdlUmVwb3NpdG9yeShpbWFnZVJlcG9zaXRvcnkpIHtcclxuICAgIGlmIChpbWFnZVJlcG9zaXRvcnkpIHtcclxuICAgICAgdmFyIHRyaWdnZXJVcmw6c3RyaW5nID0gbnVsbDtcclxuICAgICAgdmFyIG5hbWUgPSBDb3JlLnBhdGhHZXQoaW1hZ2VSZXBvc2l0b3J5LCBbXCJtZXRhZGF0YVwiLCBcIm5hbWVcIl0pO1xyXG4gICAgICBpbWFnZVJlcG9zaXRvcnkuJG5hbWUgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEltYWdlUmVwb3NpdG9yaWVzKGltYWdlUmVwb3NpdG9yaWVzKSB7XHJcbiAgICBhbmd1bGFyLmZvckVhY2goaW1hZ2VSZXBvc2l0b3JpZXMsIChpbWFnZVJlcG9zaXRvcnkpID0+IHtcclxuICAgICAgZW5yaWNoSW1hZ2VSZXBvc2l0b3J5KGltYWdlUmVwb3NpdG9yeSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBpbWFnZVJlcG9zaXRvcmllcztcclxuICB9XHJcblxyXG5cclxuICB2YXIgbGFiZWxDb2xvcnMgPSB7ICAgIFxyXG4gICAgJ3JlZ2lvbic6ICdrOHMtYmFkZ2UtcmVnaW9uJywgICAgXHJcbiAgICAnc3lzdGVtJzogJ2s4cy1iYWRnZS1zeXN0ZW0nLFxyXG4gICAgJ2lzVGFyZ2V0JzogJ2s4cy1iYWRnZS10YXJnZXQnLFxyXG4gIH07XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjb250YWluZXJMYWJlbENsYXNzKGxhYmVsVHlwZTpzdHJpbmcpIHsgICAgXHJcbiAgICBpZiAoIShsYWJlbFR5cGUgaW4gbGFiZWxDb2xvcnMpKSB7XHJcbiAgICAgIHJldHVybiAnbW91c2UtcG9pbnRlcic7XHJcbiAgICB9XHJcbiAgICBlbHNlIHJldHVybiBsYWJlbENvbG9yc1tsYWJlbFR5cGVdICsgJyBtb3VzZS1wb2ludGVyJztcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGZhYnJpYzggZm9yZ2UgcGx1Z2luIGlzIGVuYWJsZWRcclxuICAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24gaXNGb3JnZUVuYWJsZWQoKSB7XHJcbiAgICAvLyBUT0RPIHNob3VsZCByZXR1cm4gdHJ1ZSBpZiB0aGUgc2VydmljZSBcImZhYnJpYzgtZm9yZ2VcIiBpcyB2YWxpZFxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGt1YmVybmV0ZXMgc2VsZWN0ZWQgbmFtZXNwYWNlIG9yIHRoZSBkZWZhdWx0IG9uZVxyXG4gICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBjdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpIHtcclxuICAgIHZhciBpbmplY3RvciA9IEhhd3Rpb0NvcmUuaW5qZWN0b3I7XHJcbiAgICBpZiAoaW5qZWN0b3IpIHtcclxuICAgICAgdmFyIEt1YmVybmV0ZXNTdGF0ZSA9IGluamVjdG9yLmdldDxhbnk+KFwiS3ViZXJuZXRlc1N0YXRlXCIpIHx8IHt9O1xyXG4gICAgICByZXR1cm4gS3ViZXJuZXRlc1N0YXRlLnNlbGVjdGVkTmFtZXNwYWNlIHx8IGRlZmF1bHROYW1lc3BhY2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGVmYXVsdE5hbWVzcGFjZTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBzZXRDdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZShucykge1xyXG4gICAgaWYgKG5zKSB7XHJcbiAgICAgIHZhciBLdWJlcm5ldGVzU3RhdGUgPSBpbmplY3Q8YW55PihcIkt1YmVybmV0ZXNTdGF0ZVwiKSB8fCB7fTtcclxuICAgICAgS3ViZXJuZXRlc1N0YXRlLnNlbGVjdGVkTmFtZXNwYWNlID0gbnM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb25maWd1cmVzIHRoZSBqc29uIHNjaGVtYVxyXG4gICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBjb25maWd1cmVTY2hlbWEoKSB7XHJcbiAgICBhbmd1bGFyLmZvckVhY2goc2NoZW1hLmRlZmluaXRpb25zLCAoZGVmaW5pdGlvbiwgbmFtZSkgPT4ge1xyXG4gICAgICB2YXIgcHJvcGVydGllcyA9IGRlZmluaXRpb24ucHJvcGVydGllcztcclxuICAgICAgaWYgKHByb3BlcnRpZXMpIHtcclxuICAgICAgICB2YXIgaGlkZVByb3BlcnRpZXMgPSBbXCJjcmVhdGlvblRpbWVzdGFtcFwiLCBcImtpbmRcIiwgXCJhcGlWZXJzaW9uXCIsIFwiYW5ub3RhdGlvbnNcIiwgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiLCBcIm5hbWVzcGFjZVwiLCBcInJlc291cmNlVmVyc2lvblwiLCBcInNlbGZMaW5rXCIsIFwidWlkXCJdO1xyXG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChoaWRlUHJvcGVydGllcywgKHByb3BlcnR5TmFtZSkgPT4ge1xyXG4gICAgICAgICAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xyXG4gICAgICAgICAgaWYgKHByb3BlcnR5KSB7XHJcbiAgICAgICAgICAgIHByb3BlcnR5W1wiaGlkZGVuXCJdICA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKHByb3BlcnRpZXMsIChwcm9wZXJ0eSwgcHJvcGVydHlOYW1lKSA9PiB7XHJcbiAgICAgICAgICB2YXIgcmVmID0gcHJvcGVydHlbXCIkcmVmXCJdO1xyXG4gICAgICAgICAgdmFyIHR5cGUgPSBwcm9wZXJ0eVtcInR5cGVcIl07XHJcbiAgICAgICAgICBpZiAocmVmICYmICghdHlwZSB8fCB0eXBlID09PSBcIm9iamVjdFwiKSkge1xyXG4gICAgICAgICAgICBwcm9wZXJ0eVtcInR5cGVcIl0gPSByZWY7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodHlwZSA9PT0gXCJhcnJheVwiKSB7XHJcbiAgICAgICAgICAgIHZhciBpdGVtcyA9IHByb3BlcnR5W1wiaXRlbXNcIl07XHJcbiAgICAgICAgICAgIGlmIChpdGVtcykge1xyXG4gICAgICAgICAgICAgIHZhciByZWYgPSBpdGVtc1tcIiRyZWZcIl07XHJcbiAgICAgICAgICAgICAgdmFyIHR5cGUgPSBpdGVtc1tcInR5cGVcIl07XHJcbiAgICAgICAgICAgICAgaWYgKHJlZiAmJiAoIXR5cGUgfHwgdHlwZSA9PT0gXCJvYmplY3RcIikpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1zW1widHlwZVwiXSA9IHJlZjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2NoZW1hLmRlZmluaXRpb25zLm9zX2J1aWxkX1dlYkhvb2tUcmlnZ2VyLnByb3BlcnRpZXMuc2VjcmV0LnR5cGUgPSBcInBhc3N3b3JkXCI7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGV0cyByZW1vdmUgYW55IGVucmljaGVkIGRhdGEgdG8gbGVhdmUgdGhlIG9yaWdpbmFsIGpzb24gaW50YWN0XHJcbiAgICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHVuZW5yaWNoKGl0ZW0pIHtcclxuICAgIHZhciBvID0gXy5jbG9uZURlZXAoaXRlbSk7XHJcbiAgICBhbmd1bGFyLmZvckVhY2gobywgKHZhbHVlLCBrZXkpID0+IHtcclxuICAgICAgaWYgKGtleS5zdGFydHNXaXRoKFwiJFwiKSB8fCBrZXkuc3RhcnRzV2l0aChcIl9cIikpIHtcclxuICAgICAgICBkZWxldGUgb1trZXldO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGRlbGV0ZSBvWydjb25uZWN0VG8nXTtcclxuICAgIHJldHVybiBvO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgdW5lbnJpY2hlZCBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdFxyXG4gICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiB0b1Jhd0pzb24oaXRlbSkge1xyXG4gICAgdmFyIG8gPSB1bmVucmljaChpdGVtKTtcclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvLCBudWxsLCAyKTsgLy8gc3BhY2luZyBsZXZlbCA9IDJcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHVuZW5yaWNoZWQgWUFNTCByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3RcclxuICAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24gdG9SYXdZYW1sKGl0ZW0pIHtcclxuICAgIHZhciBvID0gdW5lbnJpY2goaXRlbSk7XHJcbiAgICByZXR1cm4ganN5YW1sLmR1bXAobywgeyBpbmRlbnQ6IDIgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHdhdGNoKCRzY29wZTogYW55LCAkZWxlbWVudDogYW55LCBraW5kLCBucywgZm4sIGxhYmVsU2VsZWN0b3IgPSBudWxsKSB7XHJcbiAgICAgdmFyIGNvbm5lY3Rpb24gPSBLdWJlcm5ldGVzQVBJLndhdGNoKHtcclxuICAgICAgICBraW5kOiBraW5kLFxyXG4gICAgICAgIG5hbWVzcGFjZTogbnMsXHJcbiAgICAgICAgbGFiZWxTZWxlY3RvcjogbGFiZWxTZWxlY3RvcixcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAob2JqZWN0cykge1xyXG4gICAgICAgICAgZm4ob2JqZWN0cyk7XHJcbiAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgICRlbGVtZW50Lm9uKCckZGVzdHJveScsICgpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlN0YXRpYyBjb250cm9sbGVyW1wiICsga2luZCArIFwiLCBcIiArIG5zICsgXCJdIGVsZW1lbnQgZGVzdHJveWVkXCIpO1xyXG4gICAgICAgICRzY29wZS4kZGVzdHJveSgpO1xyXG4gICAgICB9KTtcclxuICAgICAgJHNjb3BlLiRvbignJGRlc3Ryb3knLCAoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJTdGF0aWMgY29udHJvbGxlcltcIiArIGtpbmQgKyBcIiwgXCIgKyBucyArIFwiXSBzY29wZSBkZXN0cm95ZWRcIik7XHJcbiAgICAgICAgY29ubmVjdGlvbi5kaXNjb25uZWN0KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB2YXIgb2xkRGVsZXRlU2NvcGVGbiA9ICRzY29wZS5kZWxldGVTY29wZTtcclxuICAgICAgJHNjb3BlLmRlbGV0ZVNjb3BlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICRlbGVtZW50LnJlbW92ZSgpO1xyXG4gICAgICAgIGlmIChhbmd1bGFyLmlzRnVuY3Rpb24ob2xkRGVsZXRlU2NvcGVGbikpIHtcclxuICAgICAgICAgIG9sZERlbGV0ZVNjb3BlRm4oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVLdWJlcm5ldGVzQ2xpZW50KGtpbmQsIG5zID0gbnVsbCkge1xyXG4gICAgdmFyIEs4U0NsaWVudEZhY3RvcnkgPSBpbmplY3Q8YW55PihcIks4U0NsaWVudEZhY3RvcnlcIik7XHJcbiAgICBpZiAoIUs4U0NsaWVudEZhY3RvcnkpIHtcclxuICAgICAgbG9nLndhcm4oXCJDb3VsZCBub3QgZmluZCBpbmplY3RlZCBLOFNDbGllbnRGYWN0b3J5IVwiKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAoa2luZCA9PT0gXCJwcm9qZWN0c1wiIHx8IGtpbmQgPT09IFwibmFtZXNwYWNlc1wiKSB7XHJcbiAgICAgIG5zID0gbnVsbDtcclxuICAgIH0gZWxzZSBpZiAoIW5zKSB7XHJcbiAgICAgIG5zID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIEs4U0NsaWVudEZhY3RvcnkuY3JlYXRlKGtpbmQsIG5zKTtcclxuICB9XHJcblxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gY3VycmVudFVzZXJOYW1lKCkge1xyXG4gICAgdmFyIHVzZXJEZXRhaWxzID0gSGF3dGlvT0F1dGguZ2V0VXNlclByb2ZpbGUoKTtcclxuICAgIHZhciBhbnN3ZXIgPSBudWxsO1xyXG4gICAgaWYgKHVzZXJEZXRhaWxzKSB7XHJcbiAgICAgIGFuc3dlciA9IGdldE5hbWUodXNlckRldGFpbHMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFuc3dlciB8fCBcImFkbWluXCI7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlTmFtZXNwYWNlKG5zLCBjbGllbnQ/KSB7XHJcbiAgICBpZiAoIWNsaWVudCkge1xyXG4gICAgICBjbGllbnQgPSBpc09wZW5TaGlmdCA/IEt1YmVybmV0ZXMuY3JlYXRlS3ViZXJuZXRlc0NsaWVudCgncHJvamVjdHMnKSA6IEt1YmVybmV0ZXMuY3JlYXRlS3ViZXJuZXRlc0NsaWVudCgnbmFtZXNwYWNlcycpO1xyXG4gICAgfVxyXG4gICAgaWYgKG5zICYmIG5zICE9PSBjdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpKSB7XHJcbiAgICAgIHZhciBvYmplY3QgPSB7XHJcbiAgICAgICAgYXBpVmVyc2lvbjogS3ViZXJuZXRlcy5kZWZhdWx0QXBpVmVyc2lvbixcclxuICAgICAgICBraW5kOiBpc09wZW5TaGlmdCA/ICdQcm9qZWN0JyA6ICdOYW1lc3BhY2UnLFxyXG4gICAgICAgIG1ldGFkYXRhOiB7XHJcbiAgICAgICAgICBuYW1lOiBucyxcclxuICAgICAgICAgIGxhYmVsczoge1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgY2xpZW50LnB1dChvYmplY3QsXHJcbiAgICAgICAgKGRhdGEpID0+IHtcclxuICAgICAgICAgIGxvZy5pbmZvKFwiQ3JlYXRlZCBuYW1lc3BhY2U6IFwiICsgbnMpXHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBjcmVhdGUgbmFtZXNwYWNlOiBcIiArIG5zICsgXCI6IFwiICsgYW5ndWxhci50b0pzb24oZXJyKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlUkMob2JqLCBvbkNvbXBsZXRlRm4gPSBudWxsKXtcclxuICAgIHZhciBjbGllbnQgPSAgS3ViZXJuZXRlcy5jcmVhdGVLdWJlcm5ldGVzQ2xpZW50KCdyZXBsaWNhdGlvbmNvbnRyb2xsZXJzJywnZGVmYXVsdCcpO1xyXG4gICAgdmFyIFJDVGVtcGxhdGUgPSBuZXcgcmVzb3VyY2VSQ1RlbXBsYXRlKCk7XHJcbiAgICB2YXIgcmNUZW1wbGF0ZSA9IFJDVGVtcGxhdGUuY3JlYXRlUkMob2JqKTsgIFxyXG4gICAgY2xpZW50LnB1dChyY1RlbXBsYXRlLCBmdW5jdGlvbihvYmopIHsgICAgICAgXHJcbiAgICAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKG9uQ29tcGxldGVGbikpIHtcclxuICAgICAgICAgICBvbkNvbXBsZXRlRm4ob2JqKTtcclxuICAgICAgIH1cclxuICAgIH0sKGVycikgPT57XHJcbiAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAgZXhwb3J0IGZ1bmN0aW9uIGNvbm5lY3RPcmFjbGUoJGh0dHAsICR0aW1lb3V0LCB1cmwsIG9wZXJhdGlvbiwgcmVwbGljYXMsIGRlbGF5VGltZSl7XHJcbiAgICAgICR0aW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgJGh0dHAoe1xyXG4gICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgICBtZXRob2Q6J1BPU1QnLFxyXG4gICAgICAgICAgICAgcGFyYW1zOntvcmFjbGVOYW1lOiBnZXROYW1lKHJlcGxpY2FzKSwgb3BlcmF0aW9uOiBvcGVyYXRpb259LCAgICAgICAgICAgIFxyXG4gICAgICAgICB9KS5zdWNjZXNzKGZ1bmN0aW9uKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpe1xyXG4gICAgICAgICAgICAgY29uc29sZS5sb2coXCJzdWNjZXNzXCIpO1xyXG4gICAgICAgICB9KS5lcnJvcihmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcclxuICAgICAgICAgICAgIC8vbG9nLndhcm4oXCJGYWlsZWQgdG8gY29ubmVjdCBcIiArIGNvbm5lY3RQYXJhbSArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgfSk7XHJcbiAgICB9LCBkZWxheVRpbWUpO1xyXG4gICB9XHJcblxyXG4gICBleHBvcnQgZnVuY3Rpb24gZ2V0T3JhY2xlU3RhdHVzKGxhYmVscyl7XHJcbiAgICAgICB2YXIgYW5zd2VyID0gLTE7XHJcbiAgICAgICBpZih0eXBlb2YobGFiZWxzKSA9PT0gJ29iamVjdCcgJiYgbGFiZWxzLmhhc093blByb3BlcnR5KFwic3RhdHVzXCIpKXtcclxuICAgICAgICAgICBzd2l0Y2gobGFiZWxzLnN0YXR1cyl7XHJcbiAgICAgICAgICAgICAgIGNhc2UgJzAnOlxyXG4gICAgICAgICAgICAgICAgICBhbnN3ZXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgY2FzZSAnMSc6XHJcbiAgICAgICAgICAgICAgICAgIGFuc3dlciA9IDE7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICBjYXNlICcyJzpcclxuICAgICAgICAgICAgICAgICAgYW5zd2VyID0gMjtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgIGFuc3dlciA9IC0xO1xyXG4gICAgICAgICAgIH1cclxuICAgICAgIH1cclxuICAgICAgIHJldHVybiBhbnN3ZXI7XHJcbiAgIH1cclxuXHJcbiAgIGV4cG9ydCBmdW5jdGlvbiBnZXRFeHRyYWN0U3RhdHVzKGxhYmVscyl7XHJcbiAgICAgICBpZihsYWJlbHMuaXNUYXJnZXQgPT09ICdmYWxzZScpe1xyXG4gICAgICAgICAgIHJldHVybiBwYXJzZUludChsYWJlbHMuaXNFeHRyYWN0KTtcclxuICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgIHJldHVybiAxMDtcclxuICAgICAgIH1cclxuICAgfVxyXG5cclxuICAgZXhwb3J0IGZ1bmN0aW9uIGdldE9yYWNsZU5hbWUocmVwbGljYXMpOnN0cmluZyB7XHJcbiAgICAgIHZhciBhbm5vdGF0aW9uID0gZ2V0QW5ub3RhdGlvbnMocmVwbGljYXMpO1xyXG4gICAgICByZXR1cm4gYW5ub3RhdGlvbltcImNpdHlOYW1lXCJdICsgXCItXCIgKyBhbm5vdGF0aW9uW1wiZGlzdHJpY3ROYW1lXCJdICsgXCItXCIgKyBhbm5vdGF0aW9uW1wic3lzdGVtTmFtZVwiXTtcclxuICAgfVxyXG5cclxuICAgZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REYXRhVG9PcmFjbGUoJGh0dHAsIHVybCwgc2VsZWN0ZWRSZXBsaWNhdGlvbkNvbnRyb2xsZXJzLCB0YXJnZXRPcmFjbGU6IENvbmZpZ3Mub3JhY2xlUGFyYW0sIGZuPzooZGF0YSwgc3RhdHVzKSA9PiB2b2lkKXtcclxuICAgICAgIC8vY29uc29sZS5sb2codGFyZ2V0UmVwbGljYXRpb25Db250cm9sbGVyLmxlbmd0aCk7ICAgICAgXHJcbiAgICAgIHZhciBhbnN3ZXIgPSB0YXJnZXRPcmFjbGUgJiYgdHJ1ZTsgXHJcbiAgICAgIHZhciBpbm5lZWRPcmFjbGUgPSBbXTsgICAgIFxyXG4gICAgICBzZWxlY3RlZFJlcGxpY2F0aW9uQ29udHJvbGxlcnMuZm9yRWFjaCgocmMpID0+IHsgXHJcbiAgICAgICAgIHZhciBhbm5vdGF0aW9ucyA9IGdldEFubm90YXRpb25zKHJjKTsgICAgICAgICAgICBcclxuICAgICAgICAgYW5zd2VyID0gYW5zd2VyICYmIGNoZWNrb3V0T3JhY2xlSXNSdW5uaW5nKHJjKTtcclxuICAgICAgICAgICAgICBpbm5lZWRPcmFjbGUucHVzaCh7XHJcbiAgICAgICAgICAgICAgXCJuYW1lXCI6IGdldE5hbWUocmMpLFxyXG4gICAgICAgICAgICAgIFwiaXBcIjogZ2V0SG9zdChyYy4kcG9kc1swXSksXHJcbiAgICAgICAgICAgICAgXCJwb3J0XCI6IHJjLiRwb2RzWzBdLnNwZWMuY29udGFpbmVyc1swXS5wb3J0c1swXS5ob3N0UG9ydCxcclxuICAgICAgICAgICAgICBcImRhdGFJZFwiOiBhbm5vdGF0aW9uc1tcImlkXCJdXHJcbiAgICAgICAgICB9KTsgICAgICAgICAgXHJcbiAgICAgIH0pO1xyXG4gICAgIFxyXG4gICAgICBpZihhbnN3ZXIpe1xyXG4gICAgICAgICAgdmFyIGRhdGEgPXtcIm5hbWVcIjogdGFyZ2V0T3JhY2xlLmlkLCBcInRhcmdldFwiOiB0YXJnZXRPcmFjbGUsIFwiaW5uZWVkXCI6IGlubmVlZE9yYWNsZX07ICAgIFxyXG4gICAgICAgICAgdmFyIHNwaW5uZXI7XHJcbiAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICB0eXBlOiBcIlBPU1RcIixcclxuICAgICAgICAgICAgdXJsOiBVcmxIZWxwZXJzLmpvaW4odXJsLCB0YXJnZXRPcmFjbGUuaWQrXCJcIiwgXCJleHRyYWN0XCIpLFxyXG4gICAgICAgICAgICB0aW1lb3V0OiA4MDAwLFxyXG4gICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgICAgICAvL2FzeW5jOiBmYWxzZSxcclxuICAgICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoZGF0YSksXHJcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLThcIixcclxuICAgICAgICAgICAgYmVmb3JlU2VuZDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgIENvbmZpZ3MuY3JlYXRlX21hc2soKTsgIC8v5Yib5bu66YGu572p5bGCXHJcbiAgICAgICAgICAgICAgY3JlYXRlX2xvY2FkRWZmZWN0KFwi5q2j5Zyo6aqM6K+B5rGH5oC75bqT6YWN572u5L+h5oGvLOivt+eojeetie+8gVwiKTsgLy/liJvlu7rmlbDmja7liqDovb3mlYjmnpzlsYJcclxuICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvYWRpbmcnKVxyXG4gICAgICAgICAgICAgIHNwaW5uZXIgPSBuZXcgU3Bpbm5lcihsb2FkQ29uZmlncygpKS5zcGluKHRhcmdldCk7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbXBsZXRlOiAoWE1MSHR0cFJlcXVlc3QsIHRleHRTdGF0dXMpID0+IHtcclxuICAgICAgICAgICAgICBpZihYTUxIdHRwUmVxdWVzdC5zdGF0dXMgPT0gMjAwKXtcclxuICAgICAgICAgICAgICAgIC8vc3Bpbm5lci5zcGluKCk7XHJcbiAgICAgICAgICAgICAgICBLdWJlcm5ldGVzLmNyZWF0ZVN1Y2Nlc3NJbmZvKFwic3VjY2Vzc1wiLCBcIui/nuaOpeaxh+aAu+W6k+aIkOWKn++8jOWNs+WwhuaJp+ihjOaxh+aAu+aIluaKveWPluaTjeS9nO+8gVwiKTtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoXCJLdWJlcm5ldGVzLnJlbW92ZU1hc2soKVwiLCAxNTAwKTtcclxuICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgIC8vc3Bpbm5lci5zcGluKCk7IFxyXG4gICAgICAgICAgICAgICAgS3ViZXJuZXRlcy5jcmVhdGVTdWNjZXNzSW5mbyhcImVycm9yXCIsIFwi6L+e5o6l5rGH5oC75bqT5aSx6LSl77yM6K+35qOA5p+l5pyN5Yqh6ZuG576k5Lit55qE5rGH5oC75bqT6YWN572u5piv5ZCm5q2j56Gu77yBXCIpO1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChcIkt1YmVybmV0ZXMucmVtb3ZlTWFzaygpXCIsIDE1MDApOyBcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgfSk7ICAgICAgICBcclxuICAgICAgICAgIC8vQ29uZmlncy5vcmFjbGVJbmZvT3BlcmF0ZSgkaHR0cCwgXCIvamF2YS9jb25zb2xlL2FwaS9vcmFjbGVcIiwgQ29uZmlncy5PcGVyYXRlVHlwZS5FWFRSQUNULCBkYXRhLCBmbik7XHJcbiAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAvL2FsZXJ0KFwi5oKo6YCJ5oup55qE5rGH5oC75pWw5o2u5bqT5oiW6ZyA6KaB5rGH5oC755qE5pWw5o2u5bqT5Lit5a2Y5Zyo5pyq5ZCv5Yqo5oiQ5Yqf55qE5pWw5o2u5bqT77yM5a+86Ie05rGH5oC75pON5L2c5aSx6LSl77yM6K+36YeN5paw6YCJ5oup77yBXCIpO1xyXG4gICAgICAgICAgIENvbmZpZ3MuY3VzdG9tQWxlcnQoXCLmj5DnpLpcIiwgXCLmk43kvZzlpLHotKU66ZyA6KaB5rGH5oC755qE5pWw5o2u5bqT5Lit5a2Y5Zyo5pyq5ZCv5Yqo5oiQ5Yqf55qE5pWw5o2u5bqT77yBXCIsICcnLG51bGwsIDAsIFwiZXJyb3JcIik7XHJcbiAgICAgICB9XHJcbiAgIH1cclxuXHJcbiAgIGV4cG9ydCBmdW5jdGlvbiBjaGVja291dE9yYWNsZUlzUnVubmluZyhyYyl7XHJcbiAgICAgIGlmKHJjLiRwb2RDb3VudGVycy5yZWFkeSAmJiByYy4kb3JhY2xlU3RhdHVzID09IDIpe1xyXG4gICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICB9XHJcbiAgIH1cclxuXHJcbiAgIGV4cG9ydCBmdW5jdGlvbiByZXBsaWNhc0lzQ3JlYXRlZCAocmVwbGljYXRpb25jb250cm9sbGVyczpBcnJheTxhbnk+LCBuYW1lOnN0cmluZyl7XHJcbiAgICAgdmFyIHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgIGlmKCByZXBsaWNhdGlvbmNvbnRyb2xsZXJzICE9bnVsbCB8fCByZXBsaWNhdGlvbmNvbnRyb2xsZXJzLmxlbmd0aDw9MCl7XHJcbiAgICAgICBmb3IodmFyIGk9MDsgaTxyZXBsaWNhdGlvbmNvbnRyb2xsZXJzLmxlbmd0aDtpKyspe1xyXG4gICAgICAgICBpZihnZXROYW1lKHJlcGxpY2F0aW9uY29udHJvbGxlcnNbaV0pID09PSBuYW1lKXtcclxuICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG4gICAgIH1cclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gbG9hZENvbmZpZ3MoKXtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGxpbmVzOiA5LFxyXG4gICAgICAgICAgbGVuZ3RoOiAwLFxyXG4gICAgICAgICAgd2lkdGg6IDEzLCBcclxuICAgICAgICAgIHJhZGl1czogMzgsXHJcbiAgICAgICAgICBzY2FsZTogMSxcclxuICAgICAgICAgIGNvcm5lcnM6IDEsIFxyXG4gICAgICAgICAgY29sb3I6ICcjZmZmZmZmJywgXHJcbiAgICAgICAgICBvcGFjaXR5OiAwLCBcclxuICAgICAgICAgIHJvdGF0ZTogOTAsIFxyXG4gICAgICAgICAgZGlyZWN0aW9uOiAxLCBcclxuICAgICAgICAgIHNwZWVkOiAwLjUsIFxyXG4gICAgICAgICAgdHJhaWw6IDUwLCAgICAgICAgICAgXHJcbiAgICAgICAgICB6SW5kZXg6IDEwMDAwMDAwMDIsIFxyXG4gICAgICAgICAgY2xhc3NOYW1lOiAnc3Bpbm5lcicsIFxyXG4gICAgICAgICAgdG9wOiAnNDAlJyAsIFxyXG4gICAgICAgICAgbGVmdDogJzUwJScsIFxyXG4gICAgICAgICAgc2hhZG93OiBmYWxzZSwgXHJcbiAgICAgICAgICBod2FjY2VsOiBmYWxzZSwgXHJcbiAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJ1xyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAg5Yib5bu65Yqg6L295pWI5p6c5bGCXHJcbiAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlX2xvY2FkRWZmZWN0KG1zZyl7XHJcbiAgICB2YXIgdG1wICA9IFwiPGRpdiBpZD1cXFwibG9hZGluZ1xcXCI+PC9kaXY+XCJcclxuICAgICAgICArIFwiPHNwYW4gaWQ9XFxcImxvYWRtc2dcXFwiPlwiICsgbXNnICsgXCI8L3NwYW4+XCI7XHJcbiAgICB2YXIgbG9hZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7IFxyXG4gICAgbG9hZC5pZCA9IFwibG9hZFwiOyAgICBcclxuICAgIGxvYWQuaW5uZXJIVE1MID0gdG1wO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsb2FkKTtcclxuICAgICQoXCIjbG9hZFwiKS5hZGRDbGFzcyhcImxvYWQtZWZmZWN0LW1zZ1wiKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdWNjZXNzSW5mbyhpY29uOnN0cmluZywgbXNnOnN0cmluZyl7XHJcbiAgICAkKFwiI2xvYWRcIikucmVtb3ZlKCk7XHJcbiAgICAgQ29uZmlncy5jdXN0b21BbGVydChcIuaPkOekulwiLCBtc2csICcnLG51bGwsIDAsIGljb24pO1xyXG4gICAgLyp2YXIgdG1wID0gXCI8ZGl2IGNsYXNzPVxcXCJsb2FkLXJlc3VsdFxcXCIgPjxpbWcgc3JjPVxcXCJcIiBcclxuICAgICAgKyBpY29uICsgXCJcXFwiIGNsYXNzPVxcXCJjdXN0b20tYWxlcnQtaW1nXFxcIj48L2Rpdj5cIlxyXG4gICAgICArIFwiPHNwYW4gY2xhc3M9XFxcImxvYWQtcmVzdWx0LW1zZ1xcXCI+XCIgKyBtc2cgK1wiPC9zcGFuPlwiOyBcclxuICAgIHZhciByZXN1bHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgcmVzdWx0LmlkID0gXCJleGVfcmVzdWx0XCI7IFxyXG4gICAgcmVzdWx0LmlubmVySFRNTCA9IHRtcDsgICAgICAgXHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJlc3VsdCk7Ki9cclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiByZW1vdmVNYXNrKCl7XHJcbiAgICB2YXIgbWFzayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWFza1wiKTtcclxuICAgIC8vdmFyIHJlc3VsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZXhlX3Jlc3VsdFwiKTtcclxuICAgIGlmKG51bGwgPT0gbWFzaylcclxuICAgICAgcmV0dXJuOyAgICBcclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobWFzayk7XHJcbiAgICAvL2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQocmVzdWx0KTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjaGVja1JDSXNFeHRyYWN0aW5nKHNlbGVjdGVkOkFycmF5PGFueT4pe1xyXG4gICAgdmFyIGFuc3dlciA9IGZhbHNlO1xyXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNlbGVjdGVkLmxlbmd0aDsgaSsrKXtcclxuICAgICAgdmFyIGxhYmVsID0gZ2V0TGFiZWxzKHNlbGVjdGVkW2ldKTtcclxuICAgICAgICBpZihsYWJlbC5pc0V4dHJhY3QgPT0gMSl7XHJcbiAgICAgICAgICBhbnN3ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFuc3dlcjtcclxuICB9XHJcblxyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIiAvPlxyXG5cclxubW9kdWxlIERldmVsb3BlciB7XHJcblxyXG4gIGV4cG9ydCB2YXIgY29udGV4dCA9ICcvd29ya3NwYWNlcyc7XHJcbiAgZXhwb3J0IHZhciBoYXNoID0gJyMnICsgY29udGV4dDtcclxuICBleHBvcnQgdmFyIHBsdWdpbk5hbWUgPSAnRGV2ZWxvcGVyJztcclxuICBleHBvcnQgdmFyIHBsdWdpblBhdGggPSAncGx1Z2lucy9kZXZlbG9wZXIvJztcclxuICBleHBvcnQgdmFyIHRlbXBsYXRlUGF0aCA9IHBsdWdpblBhdGggKyAnaHRtbC8nO1xyXG4gIGV4cG9ydCB2YXIgbG9nOkxvZ2dpbmcuTG9nZ2VyID0gTG9nZ2VyLmdldChwbHVnaW5OYW1lKTtcclxuXHJcbiAgZXhwb3J0IHZhciBqZW5raW5zU2VydmljZU5hbWUgPSBcImplbmtpbnNcIjtcclxuICBleHBvcnQgdmFyIGplbmtpbnNTZXJ2aWNlTmFtZUFuZFBvcnQgPSBqZW5raW5zU2VydmljZU5hbWUgKyBcIjpodHRwXCI7XHJcblxyXG4gIGV4cG9ydCB2YXIgamVua2luc0h0dHBDb25maWcgPSB7XHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3gtanNvbiwgdGV4dC9wbGFpblwiXHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZSBoYXNuJ3QgY2hhbmdlZCBmcm9tIHRoZSBsYXN0IGNhY2hlZCBKU09OIHZlcnNpb24gb2YgdGhpcyBvYmplY3RcclxuICAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24gaGFzT2JqZWN0Q2hhbmdlZCh2YWx1ZSwgc3RhdGUpIHtcclxuICAgIHZhciBqc29uID0gYW5ndWxhci50b0pzb24odmFsdWUgfHwgXCJcIik7XHJcbiAgICB2YXIgb2xkSnNvbiA9IHN0YXRlLmpzb247XHJcbiAgICBzdGF0ZS5qc29uID0ganNvbjtcclxuICAgIHJldHVybiAhb2xkSnNvbiB8fCBqc29uICE9PSBvbGRKc29uO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHByb2plY3RGb3JTY29wZSgkc2NvcGUpIHtcclxuICAgIGlmICgkc2NvcGUpIHtcclxuICAgICAgcmV0dXJuICRzY29wZS5idWlsZENvbmZpZyB8fCAkc2NvcGUuZW50aXR5IHx8ICgkc2NvcGUubW9kZWwgfHwge30pLnByb2plY3Q7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogTGV0cyBsb2FkIHRoZSBwcm9qZWN0IHZlcnNpb25zIGZvciB0aGUgZ2l2ZW4gbmFtZXNwYWNlXHJcbiAgICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGxvYWRQcm9qZWN0VmVyc2lvbnMoJHNjb3BlLCAkZWxlbWVudCwgcHJvamVjdCwgZW52LCBucywgYW5zd2VyLCBjYWNoZXMpIHtcclxuICAgIHZhciBwcm9qZWN0QW5ub3RhdGlvbiA9IFwicHJvamVjdFwiO1xyXG4gICAgdmFyIHZlcnNpb25Bbm5vdGF0aW9uID0gXCJ2ZXJzaW9uXCI7XHJcblxyXG4gICAgdmFyIHByb2plY3ROYW1lc3BhY2UgPSBwcm9qZWN0LiRuYW1lc3BhY2U7XHJcbiAgICB2YXIgcHJvamVjdE5hbWUgPSBwcm9qZWN0LiRuYW1lO1xyXG5cclxuICAgIHZhciBjYWNoZSA9IGNhY2hlc1tuc107XHJcbiAgICBpZiAoIWNhY2hlKSB7XHJcbiAgICAgIGNhY2hlID0ge307XHJcbiAgICAgIGNhY2hlc1tuc10gPSBjYWNoZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgc3RhdHVzID0ge1xyXG4gICAgICByY3M6IFtdLFxyXG4gICAgICBwb2RzOiBbXSxcclxuICAgICAgcm91dGVzOiBbXSxcclxuICAgICAgc2VydmljZXM6IFtdXHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBpbWFnZVN0cmVhbVRhZ3MgPSBbXTtcclxuXHJcbiAgICBmdW5jdGlvbiB1cGRhdGVNb2RlbCgpIHtcclxuICAgICAgdmFyIHByb2plY3RJbmZvcyA9IHt9O1xyXG4gICAgICB2YXIgbW9kZWwgPSAkc2NvcGUubW9kZWwgfHwge307XHJcblxyXG4gICAgICBhbmd1bGFyLmZvckVhY2goc3RhdHVzLnJjcywgKGl0ZW0pID0+IHtcclxuICAgICAgICB2YXIgbWV0YWRhdGEgPSBpdGVtLm1ldGFkYXRhIHx8IHt9O1xyXG4gICAgICAgIHZhciBuYW1lID0gbWV0YWRhdGEubmFtZTtcclxuICAgICAgICB2YXIgbGFiZWxzID0gbWV0YWRhdGEubGFiZWxzIHx8IHt9O1xyXG4gICAgICAgIHZhciBhbm5vdGF0aW9ucyA9IG1ldGFkYXRhLmFubm90YXRpb25zIHx8IHt9O1xyXG4gICAgICAgIHZhciBzcGVjID0gaXRlbS5zcGVjIHx8IHt9O1xyXG4gICAgICAgIHZhciBzZWxlY3RvciA9IHNwZWMuc2VsZWN0b3I7XHJcblxyXG4gICAgICAgIHZhciBwcm9qZWN0ID0gbGFiZWxzW3Byb2plY3RBbm5vdGF0aW9uXTtcclxuICAgICAgICB2YXIgdmVyc2lvbiA9IGxhYmVsc1t2ZXJzaW9uQW5ub3RhdGlvbl07XHJcblxyXG4gICAgICAgIC8vIGxldHMgdHJ5IHRoZSBTMkkgZGVmYXVsdHMuLi5cclxuICAgICAgICBpZiAoIXByb2plY3QpIHtcclxuICAgICAgICAgIHByb2plY3QgPSBsYWJlbHNbXCJhcHBcIl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdmVyc2lvbikge1xyXG4gICAgICAgICAgdmVyc2lvbiA9IGFubm90YXRpb25zW1wib3BlbnNoaWZ0LmlvL2RlcGxveW1lbnQtY29uZmlnLmxhdGVzdC12ZXJzaW9uXCJdXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwcm9qZWN0ICYmIHZlcnNpb24gJiYgcHJvamVjdCA9PT0gcHJvamVjdE5hbWUpIHtcclxuICAgICAgICAgIHZhciBwcm9qZWN0cyA9IHByb2plY3RJbmZvc1twcm9qZWN0XTtcclxuICAgICAgICAgIGlmICghcHJvamVjdHMpIHtcclxuICAgICAgICAgICAgcHJvamVjdHMgPSB7XHJcbiAgICAgICAgICAgICAgcHJvamVjdDogcHJvamVjdCxcclxuICAgICAgICAgICAgICB2ZXJzaW9uczoge31cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcHJvamVjdEluZm9zW3Byb2plY3RdID0gcHJvamVjdHM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB2YXIgdmVyc2lvbkluZm8gPSBwcm9qZWN0cy52ZXJzaW9uc1t2ZXJzaW9uXTtcclxuICAgICAgICAgIGlmICghdmVyc2lvbkluZm8pIHtcclxuICAgICAgICAgICAgdmVyc2lvbkluZm8gPSB7XHJcbiAgICAgICAgICAgICAgcmVwbGljYXRpb25Db250cm9sbGVyczoge31cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcHJvamVjdHMudmVyc2lvbnNbdmVyc2lvbl0gPSB2ZXJzaW9uSW5mbztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgICAgIHZlcnNpb25JbmZvLnJlcGxpY2F0aW9uQ29udHJvbGxlcnNbbmFtZV0gPSBpdGVtO1xyXG4gICAgICAgICAgICBpdGVtLiRuYW1lID0gbmFtZTtcclxuICAgICAgICAgICAgaWYgKHByb2plY3ROYW1lc3BhY2UgJiYgcHJvamVjdE5hbWUpIHtcclxuICAgICAgICAgICAgICBpdGVtLiR2aWV3TGluayA9IFVybEhlbHBlcnMuam9pbihcIi93b3Jrc3BhY2VzL1wiLCBwcm9qZWN0TmFtZXNwYWNlLCBcInByb2plY3RzXCIsIHByb2plY3ROYW1lLCBcIm5hbWVzcGFjZVwiLCBucywgXCJyZXBsaWNhdGlvbkNvbnRyb2xsZXJzXCIsIG5hbWUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGxvZy53YXJuKFwiTWlzc2luZyBwcm9qZWN0IGRhdGEhIFwiICsgcHJvamVjdE5hbWVzcGFjZSArIFwiIG5hbWUgXCIgKyBwcm9qZWN0TmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGl0ZW0uJHNlcnZpY2VzID0gW107XHJcbiAgICAgICAgICAgIHZhciByY0xpbmsgPSBudWxsO1xyXG4gICAgICAgICAgICBzdGF0dXMuc2VydmljZXMuZm9yRWFjaCgoc2VydmljZSkgPT4ge1xyXG4gICAgICAgICAgICAgIHZhciByZXBTZWxlY3RvciA9IEt1YmVybmV0ZXMuZ2V0U2VsZWN0b3IoaXRlbSk7XHJcbiAgICAgICAgICAgICAgdmFyIHNlcnZpY2VTZWxlY3RvciA9IEt1YmVybmV0ZXMuZ2V0U2VsZWN0b3Ioc2VydmljZSk7XHJcbiAgICAgICAgICAgICAgaWYgKHNlcnZpY2VTZWxlY3RvciAmJiByZXBTZWxlY3RvciAmJlxyXG4gICAgICAgICAgICAgICAgS3ViZXJuZXRlcy5zZWxlY3Rvck1hdGNoZXMoc2VydmljZVNlbGVjdG9yLCByZXBTZWxlY3RvcikgJiZcclxuICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMuZ2V0TmFtZXNwYWNlKHNlcnZpY2UpID09PSBLdWJlcm5ldGVzLmdldE5hbWVzcGFjZShpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzLnJvdXRlcy5mb3JFYWNoKChyb3V0ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB2YXIgc2VydmljZU5hbWUgPSBLdWJlcm5ldGVzLmdldE5hbWUoc2VydmljZSk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChzZXJ2aWNlTmFtZSA9PT0gS3ViZXJuZXRlcy5nZXROYW1lKHJvdXRlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlcnZpY2VbXCIkcm91dGVcIl0gPSByb3V0ZTtcclxuICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlW1wiJGhvc3RcIl0gPSBDb3JlLnBhdGhHZXQocm91dGUsIFtcInNwZWNcIiwgXCJob3N0XCJdKTtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLiRzZXJ2aWNlcy5wdXNoKHNlcnZpY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcmNMaW5rKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgdXJsID0gS3ViZXJuZXRlcy5zZXJ2aWNlTGlua1VybChzZXJ2aWNlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBmaW5kIGljb24gZXRjP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByY0xpbmsgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogc2VydmljZU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZjogdXJsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpdGVtW1wiJHNlcnZpY2VMaW5rXCJdID0gcmNMaW5rO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaXRlbS4kYnVpbGRJZCA9IGFubm90YXRpb25zW1wiZmFicmljOC5pby9idWlsZC1pZFwiXSB8fCBpdGVtLiRidWlsZElkO1xyXG4gICAgICAgICAgaXRlbS4kYnVpbGRVcmwgPSBhbm5vdGF0aW9uc1tcImZhYnJpYzguaW8vYnVpbGQtdXJsXCJdIHx8IGl0ZW0uJGJ1aWxkVXJsO1xyXG4gICAgICAgICAgaXRlbS4kZ2l0Q29tbWl0ID0gYW5ub3RhdGlvbnNbXCJmYWJyaWM4LmlvL2dpdC1jb21taXRcIl0gfHwgaXRlbS4kZ2l0Q29tbWl0O1xyXG4gICAgICAgICAgaXRlbS4kZ2l0VXJsID0gYW5ub3RhdGlvbnNbXCJmYWJyaWM4LmlvL2dpdC11cmxcIl0gfHwgaXRlbS4kZ2l0VXJsO1xyXG4gICAgICAgICAgaXRlbS4kZ2l0QnJhbmNoID0gYW5ub3RhdGlvbnNbXCJmYWJyaWM4LmlvL2dpdC1icmFuY2hcIl0gfHwgaXRlbS4kZ2l0QnJhbmNoO1xyXG4gICAgICAgICAgaWYgKCFpdGVtLiRnaXRDb21taXQpIHtcclxuICAgICAgICAgICAgdmFyIGltYWdlID0gZ2V0SW1hZ2UoaXRlbSk7XHJcbiAgICAgICAgICAgIGlmIChpbWFnZSkge1xyXG4gICAgICAgICAgICAgIGlmICghJHNjb3BlLiRpc1dhdGNoSW1hZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICAkc2NvcGUuJGlzV2F0Y2hJbWFnZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgS3ViZXJuZXRlcy53YXRjaCgkc2NvcGUsICRlbGVtZW50LCBcImltYWdlc1wiLCBudWxsLCAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpbWFnZVN0cmVhbVRhZ3MgPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICBjaGVja0Zvck1pc3NpbmdNZXRhZGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNoZWNrRm9yTWlzc2luZ01ldGFkYXRhKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRJbWFnZShpdGVtKSB7XHJcbiAgICAgICAgICAgICAgdmFyIGltYWdlID0gXCJcIjtcclxuICAgICAgICAgICAgICAvLyBsZXRzIHNlZSBpZiB3ZSBjYW4gZmluZCB0aGUgY29tbWl0IGlkIGZyb20gYSBTMkkgaW1hZ2UgbmFtZVxyXG4gICAgICAgICAgICAgIC8vIFRPRE8gbmVlZHMgdGhpcyBpc3N1ZSBmaXhlZCB0byBmaW5kIGl0IHZpYSBhbiBPcGVuU2hpZnQgYW5ub3RhdGlvbjpcclxuICAgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vb3BlbnNoaWZ0L29yaWdpbi9pc3N1ZXMvNjI0MVxyXG4gICAgICAgICAgICAgIHZhciBjb250YWluZXJzID0gQ29yZS5wYXRoR2V0KGl0ZW0sIFtcInNwZWNcIiwgXCJ0ZW1wbGF0ZVwiLCBcInNwZWNcIiwgXCJjb250YWluZXJzXCJdKTtcclxuICAgICAgICAgICAgICBpZiAoY29udGFpbmVycyAmJiBjb250YWluZXJzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGNvbnRhaW5lcnNbMF07XHJcbiAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgIGltYWdlID0gY29udGFpbmVyLmltYWdlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gaW1hZ2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrRm9yTWlzc2luZ01ldGFkYXRhKCkge1xyXG4gICAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChwcm9qZWN0cy52ZXJzaW9ucywgKHZpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBhbmd1bGFyLmZvckVhY2godmkucmVwbGljYXRpb25Db250cm9sbGVycywgKGl0ZW0sIG5hbWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKCFpdGVtLiRnaXRDb21taXQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSBnZXRJbWFnZShpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChpbWFnZVN0cmVhbVRhZ3MsIChpbWFnZVN0cmVhbVRhZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW1hZ2VOYW1lID0gaW1hZ2VTdHJlYW1UYWcuZG9ja2VySW1hZ2VSZWZlcmVuY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZU5hbWUgJiYgaW1hZ2VOYW1lID09PSBpbWFnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3VuZElTVGFnID0gaW1hZ2VTdHJlYW1UYWc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hbmlmZXN0SlNPTiA9IGltYWdlU3RyZWFtVGFnLmRvY2tlckltYWdlTWFuaWZlc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hbmlmZXN0SlNPTikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hbmlmZXN0ID0gYW5ndWxhci5mcm9tSnNvbihtYW5pZmVzdEpTT04pIHx8IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhpc3RvcnkgPSBtYW5pZmVzdC5oaXN0b3J5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhpc3RvcnkgJiYgaGlzdG9yeS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHYxID0gaGlzdG9yeVswXS52MUNvbXBhdGliaWxpdHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2MSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gYW5ndWxhci5mcm9tSnNvbih2MSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVudiA9IENvcmUucGF0aEdldChkYXRhLCBbXCJjb25maWdcIiwgXCJFbnZcIl0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChlbnYsIChlbnZFeHApID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnZFeHApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IGVudkV4cC5zcGxpdChcIj1cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAyICYmIHZhbHVlc1swXSA9PSBcIk9QRU5TSElGVF9CVUlMRF9OQU1FXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVpbGROYW1lID0gdmFsdWVzWzFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWlsZE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uJGJ1aWxkSWQgPSBidWlsZE5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLiRidWlsZFVybCA9IERldmVsb3Blci5wcm9qZWN0V29ya3NwYWNlTGluayhucywgcHJvamVjdE5hbWUsIFwiYnVpbGRMb2dzL1wiICsgYnVpbGROYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGFiZWxzID0gQ29yZS5wYXRoR2V0KGRhdGEsIFtcImNvbmZpZ1wiLCBcIkxhYmVsc1wiXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhYmVscykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS4kZ2l0Q29tbWl0ID0gbGFiZWxzW1wiaW8ub3BlbnNoaWZ0LmJ1aWxkLmNvbW1pdC5pZFwiXSB8fCBpdGVtLiRnaXRDb21taXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLiRnaXRDb21taXRBdXRob3IgPSBsYWJlbHNbXCJpby5vcGVuc2hpZnQuYnVpbGQuY29tbWl0LmF1dGhvclwiXSB8fCBpdGVtLiRnaXRDb21taXRBdXRob3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLiRnaXRDb21taXREYXRlID0gbGFiZWxzW1wiaW8ub3BlbnNoaWZ0LmJ1aWxkLmNvbW1pdC5kYXRlXCJdIHx8IGl0ZW0uJGdpdENvbW1pdERhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLiRnaXRDb21taXRNZXNzYWdlID0gbGFiZWxzW1wiaW8ub3BlbnNoaWZ0LmJ1aWxkLmNvbW1pdC5tZXNzYWdlXCJdIHx8IGl0ZW0uJGdpdENvbW1pdE1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLiRnaXRCcmFuY2ggPSBsYWJlbHNbXCJpby5vcGVuc2hpZnQuYnVpbGQuY29tbWl0LnJlZlwiXSB8fCBpdGVtLiRnaXRCcmFuY2g7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVtLiRnaXRVcmwgJiYgaXRlbS4kZ2l0Q29tbWl0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uJGdpdFVybCA9IERldmVsb3Blci5wcm9qZWN0V29ya3NwYWNlTGluayhucywgcHJvamVjdE5hbWUsIFwid2lraS9jb21taXREZXRhaWwvLy9cIiArIGl0ZW0uJGdpdENvbW1pdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHNlbGVjdG9yKSB7XHJcbiAgICAgICAgICAgIHZhciBzZWxlY3RvclRleHQgPSBLdWJlcm5ldGVzLmxhYmVsc1RvU3RyaW5nKHNlbGVjdG9yLCBcIixcIik7XHJcbiAgICAgICAgICAgIHZhciBwb2RMaW5rVXJsID0gVXJsSGVscGVycy5qb2luKHByb2plY3RMaW5rKHByb2plY3ROYW1lKSwgXCJuYW1lc3BhY2VcIiwgbnMsIFwicG9kc1wiKTtcclxuICAgICAgICAgICAgaXRlbS5wb2RzID0gW107XHJcbiAgICAgICAgICAgIGl0ZW0uJHBvZENvdW50ZXJzID0gS3ViZXJuZXRlcy5jcmVhdGVQb2RDb3VudGVycyhzZWxlY3Rvciwgc3RhdHVzLnBvZHMsIGl0ZW0ucG9kcywgc2VsZWN0b3JUZXh0LCBwb2RMaW5rVXJsKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gbGV0cyBjaGVjayBmb3IgYSBwcm9qZWN0IG5hbWUgaWYgd2UgaGF2ZSBsb3RzIG9mIFJDcyB3aXRoIG5vIHBvZHMsIGxldHMgcmVtb3ZlIHRoZW0hXHJcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChwcm9qZWN0SW5mb3MsIChwcm9qZWN0LCBwcm9qZWN0TmFtZSkgPT4ge1xyXG4gICAgICAgIHZhciByY3NOb1BvZHMgPSBbXTtcclxuICAgICAgICB2YXIgcmNzV2l0aFBvZHMgPSBbXTtcclxuICAgICAgICBhbmd1bGFyLmZvckVhY2gocHJvamVjdC52ZXJzaW9ucywgKHZlcnNpb25JbmZvKSA9PiB7XHJcbiAgICAgICAgICB2YXIgcmNzID0gdmVyc2lvbkluZm8ucmVwbGljYXRpb25Db250cm9sbGVycztcclxuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChyY3MsIChpdGVtLCBuYW1lKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBjb3VudCA9IEt1YmVybmV0ZXMucG9kQ291bnRlclRvdGFsKGl0ZW0uJHBvZENvdW50ZXJzKTtcclxuICAgICAgICAgICAgaWYgKGNvdW50KSB7XHJcbiAgICAgICAgICAgICAgcmNzV2l0aFBvZHMucHVzaChuYW1lKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByY3NOb1BvZHMucHVzaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgcmNzW25hbWVdO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAocmNzV2l0aFBvZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAvLyBsZXRzIHJlbW92ZSBhbGwgdGhlIGVtcHR5IFJDc1xyXG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKHJjc05vUG9kcywgKGZuKSA9PiB7XHJcbiAgICAgICAgICAgIGZuKCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKGhhc09iamVjdENoYW5nZWQocHJvamVjdEluZm9zLCBjYWNoZSkpIHtcclxuICAgICAgICBsb2cuZGVidWcoXCJwcm9qZWN0IHZlcnNpb25zIGhhcyBjaGFuZ2VkIVwiKTtcclxuICAgICAgICBhbnN3ZXJbbnNdID0gcHJvamVjdEluZm9zO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgS3ViZXJuZXRlcy53YXRjaCgkc2NvcGUsICRlbGVtZW50LCBcInJlcGxpY2F0aW9uY29udHJvbGxlcnNcIiwgbnMsIChkYXRhKSA9PiB7XHJcbiAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgc3RhdHVzLnJjcyA9IGRhdGE7XHJcbiAgICAgICAgdXBkYXRlTW9kZWwoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBLdWJlcm5ldGVzLndhdGNoKCRzY29wZSwgJGVsZW1lbnQsIFwic2VydmljZXNcIiwgbnMsIChkYXRhKSA9PiB7XHJcbiAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgc3RhdHVzLnNlcnZpY2VzID0gZGF0YTtcclxuICAgICAgICB1cGRhdGVNb2RlbCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIEt1YmVybmV0ZXMud2F0Y2goJHNjb3BlLCAkZWxlbWVudCwgXCJyb3V0ZXNcIiwgbnMsIChkYXRhKSA9PiB7XHJcbiAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgc3RhdHVzLnJvdXRlcyA9IGRhdGE7XHJcbiAgICAgICAgdXBkYXRlTW9kZWwoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBLdWJlcm5ldGVzLndhdGNoKCRzY29wZSwgJGVsZW1lbnQsIFwicG9kc1wiLCBucywgKGRhdGEpID0+IHtcclxuICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICBzdGF0dXMucG9kcyA9IGRhdGE7XHJcbiAgICAgICAgdXBkYXRlTW9kZWwoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbn0iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJOYXZpZ2F0aW9uLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVySGVscGVycy50c1wiLz5cclxubW9kdWxlIERldmVsb3BlcntcclxuICAgIHZhciBsb2cgPSBMb2dnZXIuZ2V0KCdkZXZlbG9wZXItbmF2aWdhdGlvbicpO1xyXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUN1cnJlbnRTdWJOYXZCYXIoJHNjb3BlLCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcyl7ICAgIFx0XHJcblx0XHRyZXR1cm4gYWN0aXZhdGVDdXJyZW50KFtcclxuXHRcdFx0e1xyXG5cdFx0XHQgaHJlZjogVXJsSGVscGVycy5qb2luKGNvbnRleHQsXCJPdmVydmlld1wiLFwiY29sZC9kYXRhLXR5cGUvYWxsXCIpLFxyXG5cdFx0XHQgbGFiZWw6IFwi5Ya35Yy65pWw5o2u566h55CGXCIsXHJcblx0XHRcdCB0aXRsZTogXCLmlbDmja7msYfmgLvku7vliqFcIixcclxuXHRcdFx0IGl0ZW1zOiBbe1xyXG5cdFx0XHQgXHRocmVmOiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCxcIk92ZXJ2aWV3XCIsXCJjb2xkL2RhdGEtdHlwZS9hbGxcIiksXHJcblx0XHRcdCBcdGxhYmVsOiBcIuWFqOmDqFwiLFxyXG5cdFx0XHQgXHR0aXRsZTogXCLlhajpg6jmlbDmja5cIlxyXG5cdFx0XHQgfSxcclxuXHRcdFx0IHtcclxuXHRcdFx0XHRocmVmOiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCxcIk92ZXJ2aWV3XCIsXCJjb2xkL2RhdGEtdHlwZS9maW5hbmNpYWxcIiksXHJcblx0XHRcdCBcdGxhYmVsOiBcIui0ouaUv1wiLFxyXG5cdFx0XHQgXHR0aXRsZTogXCLotKLmlL/mlbDmja5cIlxyXG5cdFx0XHQgfSxcclxuXHRcdFx0IHtcclxuXHRcdFx0IFx0aHJlZjogVXJsSGVscGVycy5qb2luKGNvbnRleHQsXCJPdmVydmlldy9cIixcImNvbGQvZGF0YS10eXBlL3NvY2lhbC1zZWN1cml0eVwiKSxcclxuXHRcdFx0IFx0bGFiZWw6IFwi56S+5L+dXCIsXHJcblx0XHRcdCBcdHRpdGxlOiBcIuekvuS/neaVsOaNrlwiXHJcblx0XHRcdCB9XVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0aHJlZjogVXJsSGVscGVycy5qb2luKGNvbnRleHQsXCJPdmVydmlld1wiLFwiaG90L2RhdGEtdHlwZS9hbGxcIiksXHJcblx0XHRcdFx0bGFiZWw6IFwi54Ot5Yy65pWw5o2u566h55CGXCIsXHJcblx0XHRcdFx0dGl0bGU6IFwi5p+l55yL5omA5pyJ5pWw5o2uXCIsXHJcblx0XHRcdFx0aXRlbXM6IFt7XHJcblx0XHRcdCBcdGhyZWY6IFVybEhlbHBlcnMuam9pbihjb250ZXh0LFwiT3ZlcnZpZXdcIixcImhvdC9kYXRhLXR5cGUvYWxsXCIpLFxyXG5cdFx0XHQgXHRsYWJlbDogXCLlhajpg6hcIixcclxuXHRcdFx0IFx0dGl0bGU6IFwi5YWo6YOo5pWw5o2uXCJcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGhyZWY6IFVybEhlbHBlcnMuam9pbihjb250ZXh0LFwiT3ZlcnZpZXdcIixcImhvdC9kYXRhLXR5cGUvZmluYW5jaWFsXCIpLFxyXG5cdFx0XHQgXHRsYWJlbDogXCLotKLmlL9cIixcclxuXHRcdFx0IFx0dGl0bGU6IFwi6LSi5pS/5pWw5o2uXCJcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHQgXHRocmVmOiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCxcIk92ZXJ2aWV3L1wiLFwiaG90L2RhdGEtdHlwZS9zb2NpYWwtc2VjdXJpdHlcIiksXHJcblx0XHRcdCBcdGxhYmVsOiBcIuekvuS/nVwiLFxyXG5cdFx0XHQgXHR0aXRsZTogXCLnpL7kv53mlbDmja5cIlxyXG5cdFx0XHQgfV1cclxuXHRcdFx0fSxcdFx0XHRcclxuXHRcdFx0e1xyXG5cdFx0XHQgXHRocmVmOiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCxcIk92ZXJ2aWV3L1wiLFwidGFza1wiKSxcclxuXHRcdFx0IFx0bGFiZWw6IFwi5Lu75YqhXCIsXHJcblx0XHRcdCBcdHRpdGxlOiBcIuS7u+WKoeafpeeci1wiXHJcblx0XHRcdH0sXHRcdFx0XHJcblx0XHRdKTtcclxuXHR9XHJcbn0iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJjb25maWdQbHVnaW4udHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJjb25maWdzRGF0YVNlcnZpY2UudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9kZXZlbG9wZXIvdHMvZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cclxuLy8vICA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9kZXZlbG9wZXIvdHMvZGF0YU1hbmFnZXJIZWxwZXIudHNcIi8+XHJcbm1vZHVsZSBDb25maWdze1xyXG5cdGV4cG9ydCBjbGFzcyBPcGVyYXRlVHlwZXtcclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IERFTEVURSgpOnN0cmluZyB7cmV0dXJuIFwiZGVsZXRlXCJ9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBVUERBVEUoKTpzdHJpbmcge3JldHVybiBcInVwZGF0ZVwifVxyXG5cdFx0cHVibGljIHN0YXRpYyBnZXQgUFVUKCk6c3RyaW5ne3JldHVybiBcInB1dFwifSBcclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IE1PVkUoKTpzdHJpbmd7cmV0dXJuIFwibW92ZVwifVxyXG5cdFx0cHVibGljIHN0YXRpYyBnZXQgRVhUUkFDVCgpOnN0cmluZ3tyZXR1cm4gXCJleHRyYWN0XCJ9XHJcblx0fVxyXG5cclxuXHRfbW9kdWxlLmNvbnRyb2xsZXIoJ0NvbmZpZ3MuTWVudUl0ZW1Db250cm9sbGVyJyxbJyRzY29wZScsICckbG9jYXRpb24nLCAoJHNjb3BlLCAkbG9jYXRpb24pID0+IHtcdFx0XHJcblx0XHQkc2NvcGUubWVudUl0ZW09W3tcclxuXHRcdFx0aWNvbjogXCJnbHlwaGljb24gZ2x5cGhpY29uLWNsb3VkLXVwbG9hZFwiLFxyXG5cdFx0XHRsYWJlbDogXCLmlbDmja7nrqHnkIbphY3nva5cIixcclxuXHRcdFx0dGl0bGU6IFwi6YWN572u5pWw5o2u5a2Y5YKo5L+h5oGvXCIsXHRcdFx0XHJcblx0XHRcdGhyZWY6IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCBcIi9nbHVzdGVyLWZzL3NldHRpbmdcIilcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGljb246IFwiZ2x5cGhpY29uIGdseXBoaWNvbi10aC1saXN0XCIsXHJcblx0XHRcdGxhYmVsOiBcIuacjeWKoembhue+pOmFjee9rlwiLFxyXG5cdFx0XHR0aXRsZTogXCLphY3nva7mnI3liqHpm4bnvqTkv6Hmga9cIixcclxuXHRcdFx0aHJlZjogVXJsSGVscGVycy5qb2luKGNvbnRleHQsIFwiL2t1YmUtY2x1c3Rlci9zZXR0aW5nXCIpXHJcblx0XHR9XVx0XHRcclxuXHR9XSk7XHJcblxyXG5cdGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ0JyZWFkY3J1bWJzKCRzY29wZSwgJGxvY2F0aW9uLCAkcm91dGVQYXJhbXMpe1xyXG5cdFx0dmFyIHVybCA9ICRsb2NhdGlvbi51cmwoKTtcclxuXHRcdHZhciBsYWJlbCwgdGl0bGU7XHJcblx0XHRzd2l0Y2ggKHVybCkge1xyXG5cdFx0XHRjYXNlIFwiL2NvbmZpZy9nbHVzdGVyLWZzL3NldHRpbmdcIjpcclxuXHRcdFx0XHRsYWJlbCA9IFwi5pWw5o2u566h55CG6YWN572uXCI7XHJcblx0XHRcdFx0dGl0bGU9IFwi6YWN572u5pWw5o2u5a2Y5YKo5L+h5oGvXCI7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgXCIvY29uZmlnL2t1YmUtY2x1c3Rlci9zZXR0aW5nXCI6XHJcblx0XHRcdCAgICBsYWJlbCA9IFwi5pyN5Yqh6ZuG576k6YWN572uXCI7XHJcblx0XHRcdFx0dGl0bGU9IFwi6YWN572u5pyN5Yqh6ZuG576k5L+h5oGvXCI7XHJcblx0XHRcdCAgICBicmVhaztcdFx0XHQgICAgXHRcdFx0XHJcblx0XHRcdGRlZmF1bHQ6XHRcdFx0XHRcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0cmV0dXJuIERldmVsb3Blci5hY3RpdmF0ZUN1cnJlbnQoW3tcclxuXHRcdFx0aHJlZjogdXJsLFxyXG5cdFx0XHRsYWJlbDogbGFiZWwsLy9pdGVtLmxhYmVsLFxyXG5cdFx0XHR0aXRsZTogdGl0bGUvL2l0ZW0udGl0bGVcclxuXHRcdH1dKTsgXHJcblx0fVxyXG5cclxuXHRleHBvcnQgZnVuY3Rpb24gY3JlYXRlT3JhY2xlSW5mbyhhcnJheTpBcnJheTxhbnk+LCBpZDpudW1iZXIpe1xyXG5cdFx0dmFyIHJlc3VsdCA9e1wiaWRcIjogaWR9O1xyXG5cdFx0YW5ndWxhci5mb3JFYWNoKGFycmF5LCAoYXJyKSA9PiB7XHJcblx0XHRcdHJlc3VsdFthcnIuZmllbGRdICA9IGFyci52YWx1ZTtcclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGV4cG9ydCBmdW5jdGlvbiBzaGFyZUluaXQoJHNjb3BlLCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcyl7XHJcblx0XHQkc2NvcGUuIHN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVDdXJyZW50U3ViTmF2QmFyKCRzY29wZSwgJGxvY2F0aW9uLCAkcm91dGVQYXJhbXMpOyBcclxuXHRcdCRzY29wZS5tYXNrID0gdHJ1ZTtcclxuXHRcdC8qKlxyXG5cdFx0ICDliJvlu7rlhajlsY/pga7mjKFcclxuXHRcdCovXHJcblx0XHQkKFwiI21hc2tcIikuY3NzKFwicG9zaXRpb25cIiwgXCJhYnNvbHV0ZVwiKTtcclxuXHRcdCQoXCIjbWFza1wiKS5jc3MoXCJiYWNrZ3JvdW5kXCIsIFwiYmxhY2tcIik7XHJcblx0XHQkKFwiI21hc2tcIikuY3NzKFwib3BhY2l0eVwiLCAwLjQpO1xyXG5cdFx0JChcIiNtYXNrXCIpLmNzcyhcImZpbHRlclwiLCBcInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYShzdHlsZT00LG9wYWNpdHk9MjUpXCIpO1xyXG5cdFx0JChcIiNtYXNrXCIpLmNzcyhcInRvcFwiLCBcIjBweFwiKTtcclxuXHRcdCQoXCIjbWFza1wiKS5jc3MoXCJsZWZ0XCIsIFwiMHB4XCIpO1xyXG5cdFx0JChcIiNtYXNrXCIpLmNzcyhcIndpZHRoXCIsIGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQpO1xyXG5cdFx0JChcIiNtYXNrXCIpLmNzcyhcImhlaWdodFwiLCBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCArIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKTtcclxuXHRcdCQoXCIjbWFza1wiKS5jc3MoXCJ6SW5kZXhcIiwgMTAwMCk7XHJcblx0fVxyXG5cclxuXHRleHBvcnQgZnVuY3Rpb24gY3JlYXRlTmV3T2JlamN0KGFycmF5OkFycmF5PGFueT4sIG9iail7XHJcblx0XHR2YXIgcmVzdWx0ID1bXTtcclxuXHRcdGlmKG9iail7XHJcblx0XHRcdGFuZ3VsYXIuZm9yRWFjaChhcnJheSwgKGFycikgPT57XHRcdFx0XHJcblx0XHRcdFx0cmVzdWx0LnB1c2goe1xyXG5cdFx0XHRcdFx0ZmllbGQ6IGFyci5maWVsZCxcclxuXHRcdFx0XHRcdG5hbWU6IGFyci5kaXNwbGF5TmFtZSxcclxuXHRcdFx0XHRcdHZhbHVlOiBvYmpbYXJyLmZpZWxkXVxyXG5cdFx0XHRcdH0pO1x0XHRcdFxyXG5cdFx0XHR9KTtcclxuXHRcdH1lbHNle1xyXG5cdFx0XHRhbmd1bGFyLmZvckVhY2goYXJyYXksIChhcnIpID0+e1x0XHRcdFxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHtcclxuXHRcdFx0XHRcdGZpZWxkOiBhcnIuZmllbGQsXHJcblx0XHRcdFx0XHRuYW1lOiBhcnIuZGlzcGxheU5hbWUsXHJcblx0XHRcdFx0XHR2YWx1ZTogbnVsbFxyXG5cdFx0XHRcdH0pO1x0XHRcdFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cdFxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcdFx0XHJcblx0fVxyXG5cclxuXHRleHBvcnQgZnVuY3Rpb24gb3JhY2xlSW5mb09wZXJhdGUoJGh0dHAsIHVybDpzdHJpbmcsIG9wZXJhdGU6c3RyaW5nLCByZXNvdXJjZSwgZm4/OiAoZGF0YSwgc3RhdHVzKT0+dm9pZCApe1xyXG5cdFx0aWYocmVzb3VyY2UgPT09IG51bGwpXHJcblx0XHRcdHRocm93IFwi5LiN6IO95pON5L2c56m66LWE5rqQ5a+56LGhXCI7XHRcdFx0XHRcclxuXHRcdHZhciBpZCA9IHJlc291cmNlW1wiaWRcIl0gfHwgcmVzb3VyY2VbXCJuYW1lXCJdIHx8IHJlc291cmNlW1wiX2lkXCJdIHx8IHJlc291cmNlW1wiX2tleVwiXTtcdFx0XHJcblx0XHR2YXIgUkVTVGZ1bFVybD11cmw7XHJcblx0XHRpZihpZCA9PSBcInVuZGVmaW5lZFwiKXtcclxuXHRcdFx0UkVTVGZ1bFVybCA9ICBVcmxIZWxwZXJzLmpvaW4odXJsLCBvcGVyYXRlKTtcclxuXHRcdH1lbHNle1xyXG5cdFx0XHRSRVNUZnVsVXJsID0gVXJsSGVscGVycy5qb2luKHVybCwgaWQrXCJcIiwgb3BlcmF0ZSk7XHJcblx0XHR9XHRcdFxyXG5cdFx0XHJcblx0XHQkaHR0cCh7ICBcclxuICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJywgXHJcbiAgICAgICAgICAgIHVybDogUkVTVGZ1bFVybCwgICAgXHJcbiAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHJlc291cmNlKSwgICAgIFxyXG4gICAgICAgIH0pLnN1Y2Nlc3MoKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpID0+IHsgICAgICAgIFx0XHJcbiAgICAgICAgXHRpZihhbmd1bGFyLmlzRnVuY3Rpb24oZm4pKVxyXG4gICAgICAgICAgICBcdGZuKGRhdGEsIGhlYWRlcik7ICBcclxuICAgICAgICB9KS5lcnJvcigoZGF0YSxoZWFkZXIsY29uZmlnLHN0YXR1cykgPT4ge1xyXG5cdFx0XHRpZihhbmd1bGFyLmlzRnVuY3Rpb24oZm4pKVxyXG4gICAgICAgICAgICBcdGZuKGRhdGEsIGhlYWRlcik7ICAgXHJcbiAgICAgICAgfSk7XHJcblx0fVxyXG5cclxuXHRleHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uZmlnSGVscGVyTmF2QmFyKCRzY29wZSwgJGxvY2F0aW9uLCAkcm91dGVQYXJhbXMpe1xyXG5cdFx0cmV0dXJuIERldmVsb3Blci5hY3RpdmF0ZUN1cnJlbnQoW1xyXG5cdFx0XHR7XHJcblx0XHRcdCBocmVmOiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgXCJyZWdpb25hbGlzbS1jb2RlL3NlYXJjaGluZ1wiKSxcclxuXHRcdFx0IGxhYmVsOiBcIuihjOaUv+WMuuWIkuajgOe0olwiLFxyXG5cdFx0XHQgdGl0bGU6IFwi5qOA57Si6KGM5pS/5Yy65YiS5Luj56CBXCJcdFx0XHRcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHQgXHRocmVmOiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCxcInN5c3RlbS1jb2RlL3NlYXJjaGluZ1wiKSxcclxuXHRcdFx0IFx0bGFiZWw6IFwi57O757uf57yW56CB5qOA57SiXCIsXHJcblx0XHRcdCBcdHRpdGxlOiBcIuajgOe0ouezu+e7n+e8lueggVwiXHJcblx0XHRcdH1cdFx0XHRcclxuXHRcdF0pO1xyXG5cdH1cclxuXHJcblx0ZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFZvbHVtZSh2b2x1bWU6IHZvbHVtZSk6IGZvcm1hdGVkVm9sdW1le1xyXG5cdFx0dmFyIGJyaWNrOkFycmF5PEJyaWNrPiA9IFtdO1xyXG5cdFx0YW5ndWxhci5mb3JFYWNoKHZvbHVtZS5icmljaywgKGJsb2NrOkJsb2NrKSA9PiB7XHJcblx0XHRcdGJyaWNrLnB1c2goe1xyXG5cdFx0XHRcdGlwOiBibG9jay5pcC5zcGxpdChcIi5cIiksXHJcblx0XHRcdFx0c3RhdHVzOiBibG9jay5zdGF0dXMsXHJcblx0XHRcdFx0cGF0aDogYmxvY2sucGF0aCxcclxuXHRcdFx0XHRlZGl0YWJsZTogYmxvY2suZWRpdGFibGUgfHwgZmFsc2VcdFxyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdFx0XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRuYW1lOiB2b2x1bWUubmFtZSxcclxuXHRcdFx0cGF0aDogdm9sdW1lLnBhdGgsXHJcblx0XHRcdGJyaWNrOiBicmljayxcclxuXHRcdFx0c3RhdHVzOiB2b2x1bWUuc3RhdHVzLFxyXG5cdFx0XHRlZGl0YWJsZTogdm9sdW1lLmVkaXRhYmxlIHx8IGZhbHNlLFxyXG5cdFx0XHRob3Q6IHZvbHVtZS5ob3QgPT0gMCA/IHRydWUgOiBmYWxzZSBcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGV4cG9ydCBmdW5jdGlvbiB2b2x1bWVzRm9ybWF0KHZvbHVtZXM6IEFycmF5PHZvbHVtZT4pOiBBcnJheTxmb3JtYXRlZFZvbHVtZT57XHJcblx0XHR2YXIgcmVzdWx0OkFycmF5PGZvcm1hdGVkVm9sdW1lPiA9IFtdO1xyXG5cdFx0YW5ndWxhci5mb3JFYWNoKHZvbHVtZXMsICh2b2x1bWUpID0+IHtcclxuXHRcdFx0cmVzdWx0LnB1c2goZm9ybWF0Vm9sdW1lKHZvbHVtZSkpO1xyXG5cdFx0fSk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZXhwb3J0IGludGVyZmFjZSBmb3JtYXRlZFZvbHVtZXtcclxuXHRcdG5hbWU6IHN0cmluZ1x0XHRcclxuXHRcdHBhdGg6IHN0cmluZ1xyXG5cdFx0YnJpY2s6IEFycmF5PEJyaWNrPjtcclxuXHRcdHN0YXR1czogYm9vbGVhbjtcclxuXHRcdGVkaXRhYmxlOiBib29sZWFuLFxyXG5cdFx0aG90OiBib29sZWFuXHJcblx0fVxyXG5cclxuXHRleHBvcnQgaW50ZXJmYWNlIEJyaWNre1xyXG5cdFx0aXA6IEFycmF5PHN0cmluZz47XHJcblx0XHRzdGF0dXM6IGJvb2xlYW47XHJcblx0XHRwYXRoOiBzdHJpbmc7XHJcblx0XHRlZGl0YWJsZTogYm9vbGVhblxyXG5cdH1cclxuXHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiY3VzdG9tQWxlcnQudHNcIi8+XHJcbm1vZHVsZSBDb25maWdze1xyXG5cdGV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbGVtZW50QnlWYWx1ZShhcnJheTpBcnJheTxhbnk+ICx2YWx1ZTphbnksIGtleT86c3RyaW5nICl7XHJcblx0XHRpZihrZXkpe1xyXG5cdFx0XHRmb3IodmFyIGk9MDsgaTxhcnJheS5sZW5ndGg7IGkrKyl7XHJcblx0XHRcdFx0aWYoYXJyYXlbaV1ba2V5XSA9PT0gdmFsdWUpe1xyXG5cdFx0XHRcdFx0YXJyYXkuc3BsaWNlKGkgLDEpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9ZWxzZXtcclxuXHRcdFx0Zm9yKHZhciBpPTAgOyBpPGFycmF5Lmxlbmd0aDsgaSsrKXtcclxuXHRcdFx0XHRpZihhcnJheVtpXSA9PT0gdmFsdWUpe1xyXG5cdFx0XHRcdFx0YXJyYXkuc3BsaWNlKGkgLDEpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRleHBvcnQgZnVuY3Rpb24gcmVtb3ZlRWxlbWVudHNCeVZhbHVlKGFycmF5OiBBcnJheTxhbnk+LCBlbGVtZW50czpBcnJheTxhbnk+KXtcclxuXHRcdGFuZ3VsYXIuZm9yRWFjaChlbGVtZW50cywgKGVsZW1lbnQpID0+e1xyXG5cdFx0XHRyZW1vdmVFbGVtZW50QnlWYWx1ZShhcnJheSwgZWxlbWVudC52YWx1ZSwgZWxlbWVudC5rZXkpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHRcdOWvueixoeeahOa3seaLt+i0nVxyXG5cdCovXHJcblxyXG5cdGV4cG9ydCBmdW5jdGlvbiBkZWVwQ29weShvYmplY3QpIHtcclxuXHRcdHZhciBuLGk7XHJcblx0ICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBBcnJheSkge1xyXG5cdCAgICAgICAgbiA9IFtdO1xyXG5cdCAgICAgICAgZm9yIChpID0gMDsgaSA8IG9iamVjdC5sZW5ndGg7ICsraSkge1xyXG5cdCAgICAgICAgICAgIG5baV0gPSBkZWVwQ29weShvYmplY3RbaV0pO1xyXG5cdCAgICAgICAgfVxyXG5cdCAgICAgICAgcmV0dXJuIG47XHJcblxyXG5cdCAgICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE9iamVjdCkge1xyXG5cdCAgICAgICAgbiA9IHt9XHJcblx0ICAgICAgICBmb3IgKGkgaW4gb2JqZWN0KSB7XHJcblx0ICAgICAgICAgICAgbltpXSA9IGRlZXBDb3B5KG9iamVjdFtpXSk7XHJcblx0ICAgICAgICB9XHJcblx0ICAgICAgICByZXR1cm4gbjtcclxuXHQgICAgfSBlbHNlIHtcclxuXHQgICAgICAgIHJldHVybiBvYmplY3Q7XHJcblx0ICAgIH1cclxuXHR9XHJcblxyXG5cdGV4cG9ydCBmdW5jdGlvbiBkb3dubG9hZEZpbGUoJHNjb3BlLCAkaHR0cCwgdXJsLCBmbj8pe1xyXG5cdFx0JGh0dHAuZ2V0KHVybCwgeyByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcid9KVxyXG4gICAgICAgICAgLnN1Y2Nlc3MoIGZ1bmN0aW9uKGRhdGEsIHN0YXR1cywgaGVhZGVycykgeyAgICAgICAgICBcclxuICAgICAgICAgIFx0aWYoYW5ndWxhci5pc0Z1bmN0aW9uKGZuKSlcclxuICAgICAgICAgIFx0XHRmbigpO1xyXG4gICAgICAgICAgICB2YXIgb2N0ZXRTdHJlYW1NaW1lID0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XHJcbiAgICAgICAgICAgIHZhciBzdWNjZXNzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vIEdldCB0aGUgaGVhZGVyc1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycygpOyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBHZXQgdGhlIGZpbGVuYW1lIGZyb20gdGhlIHgtZmlsZW5hbWUgaGVhZGVyIG9yIGRlZmF1bHQgdG8gXCLmnI3liqHliJfooahcIlxyXG4gICAgICAgICAgICB2YXIgZmlsZW5hbWUgPSBcIuacjeWKoeaWh+S7tlwiO1xyXG4gICAgICAgICAgICB2YXIgcGFyYW1zID0gaGVhZGVyc1snY29udGVudC1kaXNwb3NpdGlvbiddLnNwbGl0KFwiO1wiKTsgICAgICAgICAgICBcclxuICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaTwgcGFyYW1zLmxlbmd0aDsgaSsrKXtcclxuICAgICAgICAgICAgXHRpZihwYXJhbXNbaV0uaW5kZXhPZihcImZpbGVuYW1lXCIpICE9IC0xKXtcclxuICAgICAgICAgICAgXHRcdHZhciB0bXAgPSBwYXJhbXNbaV0uc3BsaXQoXCI9XCIpO1xyXG4gICAgICAgICAgICBcdFx0aWYodG1wLmxlbmd0aCA9PSAyKVxyXG4gICAgICAgICAgICBcdFx0XHRmaWxlbmFtZSA9IHRtcFsxXS5yZXBsYWNlKG5ldyBSZWdFeHAoXCJcXFwiXCIsIFwiZ21cIiksXCJcIik7XHJcbiAgICAgICAgICAgIFx0fVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIGNvbnRlbnQgdHlwZSBmcm9tIHRoZSBoZWFkZXIgb3IgZGVmYXVsdCB0byBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiXHJcbiAgICAgICAgICAgIHZhciBjb250ZW50VHlwZSA9IGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddIHx8IG9jdGV0U3RyZWFtTWltZTtcclxuICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICBcdC8vIFRyeSB1c2luZyBtc1NhdmVCbG9iIGlmIHN1cHBvcnRlZFxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJUcnlpbmcgc2F2ZUJsb2IgbWV0aG9kIC4uLlwiKTtcclxuICAgICAgICAgICAgICAgIHZhciBibG9iID0gbmV3IEJsb2IoW2RhdGFdLCB7IHR5cGU6IGNvbnRlbnRUeXBlIH0pO1xyXG4gICAgICAgICAgICAgICAgICBcdGlmKG5hdmlnYXRvci5tc1NhdmVCbG9iKVxyXG4gICAgICAgICAgICAgICAgICAgICAgXHRuYXZpZ2F0b3IubXNTYXZlQmxvYihibG9iLCBmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgIFx0ZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBcdC8vIFRyeSB1c2luZyBvdGhlciBzYXZlQmxvYiBpbXBsZW1lbnRhdGlvbnMsIGlmIGF2YWlsYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgXHR2YXIgc2F2ZUJsb2IgPSBuYXZpZ2F0b3JbXCJ3ZWJraXRTYXZlQmxvYlwiXSB8fCBuYXZpZ2F0b3JbXCJtb3pTYXZlQmxvYlwiXSB8fCBuYXZpZ2F0b3JbXCJzYXZlQmxvYlwiXTtcclxuICAgICAgICAgICAgICAgICAgICAgIFx0aWYoc2F2ZUJsb2IgPT09IHVuZGVmaW5lZCkgdGhyb3cgXCJOb3Qgc3VwcG9ydGVkXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICBcdHNhdmVCbG9iKGJsb2IsIGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgICAgICAgXHR9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJzYXZlQmxvYiBzdWNjZWVkZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgXHR9IGNhdGNoKGV4KXtcclxuICAgICAgICAgICAgICAgICAgXHRjb25zb2xlLmxvZyhcInNhdmVCbG9iIG1ldGhvZCBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbjpcIik7XHJcbiAgICAgICAgICAgICAgICAgIFx0Y29uc29sZS5sb2coZXgpO1xyXG4gICAgICAgICAgICAgIFx0fVxyXG4gICAgICAgICAgICAgIFx0aWYoIXN1Y2Nlc3Mpe1xyXG4gICAgICAgICAgICAgICAgXHQvLyBHZXQgdGhlIGJsb2IgdXJsIGNyZWF0b3JcclxuICAgICAgICAgICAgICAgIFx0dmFyIHVybENyZWF0b3IgPSB3aW5kb3cuVVJMIHx8IHdpbmRvd1tcIndlYmtpdFVSTFwiXSB8fCB3aW5kb3dbXCJtb3pVUkxcIl0gfHwgd2luZG93W1wibXNVUkxcIl07XHJcbiAgICAgICAgICAgICAgXHRpZih1cmxDcmVhdG9yKXtcclxuICAgICAgICAgICAgICAgIFx0Ly8gVHJ5IHRvIHVzZSBhIGRvd25sb2FkIGxpbmtcclxuICAgICAgICAgICAgICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgICAgICAgICAgaWYoJ2Rvd25sb2FkJyBpbiBsaW5rKXtcclxuICAgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIHNpbXVsYXRlIGEgY2xpY2tcclxuICAgICAgICAgICAgICAgICAgXHR0cnl7XHJcblx0ICAgICAgICAgICAgICAgICAgICAvLyBQcmVwYXJlIGEgYmxvYiBVUkxcclxuXHQgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVHJ5aW5nIGRvd25sb2FkIGxpbmsgbWV0aG9kIHdpdGggc2ltdWxhdGVkIGNsaWNrIC4uLlwiKTtcclxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBibG9iID0gbmV3IEJsb2IoW2RhdGFdLCB7IHR5cGU6IGNvbnRlbnRUeXBlIH0pO1xyXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IHVybENyZWF0b3IuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG5cdCAgICAgICAgICAgICAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB1cmwpO1xyXG5cdCAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBkb3dubG9hZCBhdHRyaWJ1dGUgKFN1cHBvcnRlZCBpbiBDaHJvbWUgMTQrIC8gRmlyZWZveCAyMCspXHJcblx0ICAgICAgICAgICAgICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShcImRvd25sb2FkXCIsIGZpbGVuYW1lKTtcclxuXHQgICAgICAgICAgICAgICAgICAgIC8vIFNpbXVsYXRlIGNsaWNraW5nIHRoZSBkb3dubG9hZCBsaW5rXHJcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnTW91c2VFdmVudHMnKTtcclxuXHQgICAgICAgICAgICAgICAgICAgIGV2ZW50LmluaXRNb3VzZUV2ZW50KCdjbGljaycsIHRydWUsIHRydWUsIHdpbmRvdywgMSwgMCwgMCwgMCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDAsIG51bGwpO1xyXG5cdCAgICAgICAgICAgICAgICAgICAgbGluay5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuXHQgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRG93bmxvYWQgbGluayBtZXRob2Qgd2l0aCBzaW11bGF0ZWQgY2xpY2sgc3VjY2VlZGVkXCIpO1xyXG5cdCAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIFx0fWNhdGNoKGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgIFx0Y29uc29sZS5sb2coXCJEb3dubG9hZCBsaW5rIG1ldGhvZCB3aXRoIHNpbXVsYXRlZCBjbGljayBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbjpcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICBcdGNvbnNvbGUubG9nKGV4KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZighc3VjY2Vzcyl7XHJcbiAgICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHdpbmRvdy5sb2NhdGlvbiBtZXRob2RcclxuICAgICAgICAgICAgICAgICAgXHR0cnl7XHJcblx0ICAgICAgICAgICAgICAgICAgICAvLyBQcmVwYXJlIGEgYmxvYiBVUkxcclxuXHQgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0gd2hlbiB1c2luZyB3aW5kb3cubG9jYXRpb24gdG8gZm9yY2UgZG93bmxvYWRcclxuXHQgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVHJ5aW5nIGRvd25sb2FkIGxpbmsgbWV0aG9kIHdpdGggd2luZG93LmxvY2F0aW9uIC4uLlwiKTtcclxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBibG9iID0gbmV3IEJsb2IoW2RhdGFdLCB7IHR5cGU6IG9jdGV0U3RyZWFtTWltZSB9KTtcclxuXHQgICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSB1cmxDcmVhdG9yLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuXHQgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IHVybDtcclxuXHQgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRG93bmxvYWQgbGluayBtZXRob2Qgd2l0aCB3aW5kb3cubG9jYXRpb24gc3VjY2VlZGVkXCIpO1xyXG5cdCAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIFx0fWNhdGNoKGV4KXtcclxuICAgICAgICAgICAgICAgICAgICAgIFx0Y29uc29sZS5sb2coXCJEb3dubG9hZCBsaW5rIG1ldGhvZCB3aXRoIHdpbmRvdy5sb2NhdGlvbiBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbjpcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICBcdGNvbnNvbGUubG9nKGV4KTtcclxuICAgICAgICAgICAgICAgICAgXHR9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFzdWNjZXNzKXtcclxuICAgICAgICAgICAgICBcdC8vIEZhbGxiYWNrIHRvIHdpbmRvdy5vcGVuIG1ldGhvZFxyXG4gICAgICAgICAgICAgXHRjb25zb2xlLmxvZyhcIk5vIG1ldGhvZHMgd29ya2VkIGZvciBzYXZpbmcgdGhlIGFycmF5YnVmZmVyLCB1c2luZyBsYXN0IHJlc29ydCB3aW5kb3cub3BlblwiKTtcclxuICAgICAgICAgICAgICBcdHdpbmRvdy5vcGVuKCdfYmxhbmsnLCAnJyk7XHJcbiAgICAgICAgICAgICAgXHRDb25maWdzLmN1c3RvbUFsZXJ0KFwi5o+Q56S6XCIsIFwi5paH5Lu25LiL6L295aSx6LSlXCIsICcnLG51bGwsIDAsIFwiZXJyb3JcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5lcnJvcihmdW5jdGlvbihkYXRhLCBzdGF0dXMpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1czogXCIgKyBzdGF0dXMpO1xyXG4gICAgICAgICAgICAvLyBPcHRpb25hbGx5IHdyaXRlIHRoZSBlcnJvciBvdXQgdG8gc2NvcGVcclxuICAgICAgICAgICAgZm4oKTtcclxuICAgICAgICAgICAgQ29uZmlncy5jdXN0b21BbGVydChcIuaPkOekulwiLCBcIuaWh+S7tuS4i+i9veWksei0pVwiLCAnJyxudWxsLCAwLCBcImVycm9yXCIpO1xyXG4gICAgICAgICAgICAkc2NvcGUuZXJyb3JEZXRhaWxzID0gXCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1czogXCIgKyBzdGF0dXM7XHJcbiAgICAgICAgfSk7XHJcblx0ICB9XHJcblxyXG4gICAgZXhwb3J0IGZ1bmN0aW9uIEZpbGVJbnB1dFBsdWdpbihmbjogRnVuY3Rpb24sIGlzTXVsdGlwbGU/OmJvb2xlYW4pe1xyXG4gICAgICB2YXIgaW5wdXRPYmogPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xyXG4gICAgICBpbnB1dE9iai5zZXRBdHRyaWJ1dGUoJ2lkJywgJ215RmlsZUlucHV0Jyk7XHJcbiAgICAgIGlucHV0T2JqLnNldEF0dHJpYnV0ZSgndHlwZScsICdmaWxlJyk7XHJcbiAgICAgIGlucHV0T2JqLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsICd2aXNpYmlsaXR5OmhpZGRlbicpOyAgXHJcbiAgICAgIGlucHV0T2JqLnNldEF0dHJpYnV0ZShcImFjY2VwdFwiLCBcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCxhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldFwiKTtcclxuICAgICAgaWYoaXNNdWx0aXBsZSlcclxuICAgICAgICBpbnB1dE9iai5zZXRBdHRyaWJ1dGUoXCJtdWx0aXBsZVwiLCBcIm11bHRpcGxlXCIpOyAgICAgICAgIFxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlucHV0T2JqKTtcclxuICAgICAgaW5wdXRPYmouY2xpY2soKTtcclxuICAgICAgaW5wdXRPYmoub25jaGFuZ2UgPSAoZWxlbWVudCkgPT57ICBcclxuICAgICAgICBmbihlbGVtZW50LnRhcmdldFtcImZpbGVzXCJdKTsgICBcclxuICAgICAgICB2YXIgbXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm15RmlsZUlucHV0XCIpO1xyXG4gICAgICAgIGlmKG51bGwgIT0gbXkpXHJcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG15KTtcclxuICAgICAgfSAgICAgIFxyXG4gICAgfVxyXG59IiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcblxyXG5cclxuZGVjbGFyZSB2YXIgT1NPQXV0aENvbmZpZzphbnk7XHJcbmRlY2xhcmUgdmFyIEdvb2dsZU9BdXRoQ29uZmlnOmFueTtcclxuZGVjbGFyZSB2YXIgS2V5Y2xvYWtDb25maWc6YW55O1xyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBleHBvcnQgdmFyIF9tb2R1bGUgPSBhbmd1bGFyLm1vZHVsZShwbHVnaW5OYW1lLCBbJ2hhd3Rpby1jb3JlJywgJ2hhd3Rpby11aScsICd1aS5jb2RlbWlycm9yJywgJ3VpLnZhbGlkYXRlJywna3ViZXJuZXRlc1VJJ10pO1xyXG4gIGV4cG9ydCB2YXIgY29udHJvbGxlciA9IFBsdWdpbkhlbHBlcnMuY3JlYXRlQ29udHJvbGxlckZ1bmN0aW9uKF9tb2R1bGUsIHBsdWdpbk5hbWUpO1xyXG4gIGV4cG9ydCB2YXIgcm91dGUgPSBQbHVnaW5IZWxwZXJzLmNyZWF0ZVJvdXRpbmdGdW5jdGlvbih0ZW1wbGF0ZVBhdGgpO1xyXG5cclxuICBfbW9kdWxlLmNvbmZpZyhbJyRyb3V0ZVByb3ZpZGVyJywgKCRyb3V0ZVByb3ZpZGVyOm5nLnJvdXRlLklSb3V0ZVByb3ZpZGVyKSA9PiB7ICAgXHJcbiAgICAkcm91dGVQcm92aWRlclxyXG4gICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9wb2RzJyksIHJvdXRlKCdwb2RzLmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAncmVwbGljYXRpb25Db250cm9sbGVycycpLCByb3V0ZSgncmVwbGljYXRpb25Db250cm9sbGVycy5odG1sJywgZmFsc2UpKVxyXG4gICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3NlcnZpY2VzJyksIHJvdXRlKCdzZXJ2aWNlcy5odG1sJywgZmFsc2UpKVxyXG4gICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2V2ZW50cycpLCByb3V0ZSgnZXZlbnRzLmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnYXBwcycpLCByb3V0ZSgnYXBwcy5odG1sJywgZmFsc2UpKVxyXG4gICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2FwcHMvOm5hbWVzcGFjZScpLCByb3V0ZSgnYXBwcy5odG1sJywgZmFsc2UpKVxyXG4gICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3RlbXBsYXRlcycpLCByb3V0ZSgndGVtcGxhdGVzLmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnaG9zdHMnKSwgcm91dGUoJ2hvc3RzLmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnaG9zdHMvOmlkJyksIHJvdXRlKCdob3N0Lmh0bWwnLCB0cnVlKSlcclxuICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdwaXBlbGluZXMnKSwgcm91dGUoJ3BpcGVsaW5lcy5odG1sJywgZmFsc2UpKVxyXG4gICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ292ZXJ2aWV3JyksIHJvdXRlKCdvdmVydmlldy5odG1sJywgdHJ1ZSkpXHJcbiAgICAgIC53aGVuKGNvbnRleHQsIHtyZWRpcmVjdFRvOiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3JlcGxpY2F0aW9uQ29udHJvbGxlcnMnKX0pOyAgICAgIFxyXG5cclxuICAgIGFuZ3VsYXIuZm9yRWFjaChbY29udGV4dCwgXCIvd29ya3NwYWNlcy86d29ya3NwYWNlL3Byb2plY3RzLzpwcm9qZWN0XCJdLCAoY29udGV4dCkgPT4geyAgICAgXHJcbiAgICAgICRyb3V0ZVByb3ZpZGVyXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2UvcG9kQ3JlYXRlJyksIHJvdXRlKCdwb2RDcmVhdGUuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9wb2RFZGl0LzppZCcpLCByb3V0ZSgncG9kRWRpdC5odG1sJywgZmFsc2UpKVxyXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3BvZHMnKSwgcm91dGUoJ3BvZHMuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9wb2RzLzppZCcpLCByb3V0ZSgncG9kLmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2UvcmVwbGljYXRpb25Db250cm9sbGVycycpLCByb3V0ZSgncmVwbGljYXRpb25Db250cm9sbGVycy5odG1sJywgZmFsc2UpKVxyXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3JlcGxpY2F0aW9uQ29udHJvbGxlcnMvOmlkJyksIHJvdXRlKCdyZXBsaWNhdGlvbkNvbnRyb2xsZXIuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9yZXBsaWNhdGlvbkNvbnRyb2xsZXJDcmVhdGUnKSwgcm91dGUoJ3JlcGxpY2F0aW9uQ29udHJvbGxlckNyZWF0ZS5odG1sJywgZmFsc2UpKVxyXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3JlcGxpY2F0aW9uQ29udHJvbGxlckVkaXQvOmlkJyksIHJvdXRlKCdyZXBsaWNhdGlvbkNvbnRyb2xsZXJFZGl0Lmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2Uvc2VjcmV0cycpLCByb3V0ZSgnc2VjcmV0cy5odG1sJywgZmFsc2UpKVxyXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3NlY3JldHMvOmlkJyksIHJvdXRlKCdzZWNyZXQuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9zZWNyZXRDcmVhdGUnKSwgcm91dGUoJ3NlY3JldC5odG1sJywgZmFsc2UpKVxyXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3NlcnZpY2VzJyksIHJvdXRlKCdzZXJ2aWNlcy5odG1sJywgZmFsc2UpKVxyXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3NlcnZpY2VzLzppZCcpLCByb3V0ZSgnc2VydmljZS5odG1sJywgZmFsc2UpKVxyXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3NlcnZpY2VDcmVhdGUnKSwgcm91dGUoJ3NlcnZpY2VDcmVhdGUuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9zZXJ2aWNlRWRpdC86aWQnKSwgcm91dGUoJ3NlcnZpY2VFZGl0Lmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2UvZXZlbnRzJyksIHJvdXRlKCdldmVudHMuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9hcHBzJyksIHJvdXRlKCdhcHBzLmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2Uvb3ZlcnZpZXcnKSwgcm91dGUoJ292ZXJ2aWV3Lmh0bWwnLCB0cnVlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS90ZW1wbGF0ZXMvOnRhcmdldE5hbWVzcGFjZScpLCByb3V0ZSgndGVtcGxhdGVzLmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2UnKSwgcm91dGUoJ2FwcHMuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2J1aWxkcycpLCByb3V0ZSgnYnVpbGRzLmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdidWlsZHMvOmlkJyksIHJvdXRlKCdidWlsZC5odG1sJywgdHJ1ZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdidWlsZExvZ3MvOmlkJyksIHJvdXRlKCdidWlsZExvZ3MuaHRtbCcsIHRydWUpKVxyXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnYnVpbGRDb25maWdzJyksIHJvdXRlKCdidWlsZENvbmZpZ3MuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2J1aWxkQ29uZmlncy86aWQnKSwgcm91dGUoJ2J1aWxkQ29uZmlnLmh0bWwnLCB0cnVlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2J1aWxkQ29uZmlnRWRpdC86aWQnKSwgcm91dGUoJ2J1aWxkQ29uZmlnRWRpdC5odG1sJywgdHJ1ZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdkZXBsb3ltZW50Q29uZmlncycpLCByb3V0ZSgnZGVwbG95bWVudENvbmZpZ3MuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2RlcGxveW1lbnRDb25maWdzLzppZCcpLCByb3V0ZSgnZGVwbG95bWVudENvbmZpZy5odG1sJywgdHJ1ZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdpbWFnZVJlcG9zaXRvcmllcycpLCByb3V0ZSgnaW1hZ2VSZXBvc2l0b3JpZXMuaHRtbCcsIGZhbHNlKSlcclxuICAgIH0pO1xyXG5cclxuICAgIGFuZ3VsYXIuZm9yRWFjaChbY29udGV4dCwgXCIvd29ya3NwYWNlcy86d29ya3NwYWNlXCIsIFwiL3dvcmtzcGFjZXMvOndvcmtzcGFjZS9wcm9qZWN0cy86cHJvamVjdFwiXSwgKGNvbnRleHQpID0+IHtcclxuICAgICAgJHJvdXRlUHJvdmlkZXJcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2J1aWxkQ29uZmlnRWRpdCcpLCByb3V0ZSgnYnVpbGRDb25maWdFZGl0Lmh0bWwnLCB0cnVlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2J1aWxkQ29uZmlnRWRpdC86aWQnKSwgcm91dGUoJ2J1aWxkQ29uZmlnRWRpdC5odG1sJywgdHJ1ZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdpbXBvcnRQcm9qZWN0JyksIHJvdXRlKCdpbXBvcnRQcm9qZWN0Lmh0bWwnLCB0cnVlKSlcclxuICAgIH0pO1xyXG4gIH1dKTtcclxuXHJcblxyXG4gIF9tb2R1bGUuZmFjdG9yeSgnQXBwTGlicmFyeVVSTCcsIFsnJHJvb3RTY29wZScsICgkcm9vdFNjb3BlOm5nLklSb290U2NvcGVTZXJ2aWNlKSA9PiB7XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKGt1YmVybmV0ZXNBcGlVcmwoKSwgXCIvcHJveHlcIiwga3ViZXJuZXRlc05hbWVzcGFjZVBhdGgoKSwgXCIvc2VydmljZXMvYXBwLWxpYnJhcnlcIik7XHJcbiAgfV0pO1xyXG5cclxuICBfbW9kdWxlLmZhY3RvcnkoJ1dpa2lHaXRVcmxQcmVmaXgnLCAoKSA9PiB7XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKGt1YmVybmV0ZXNBcGlVcmwoKSwgXCIvcHJveHlcIiwga3ViZXJuZXRlc05hbWVzcGFjZVBhdGgoKSwgXCJzZXJ2aWNlcy9hcHAtbGlicmFyeVwiKTtcclxuICB9KTtcclxuXHJcbiAgX21vZHVsZS5mYWN0b3J5KCd3aWtpUmVwb3NpdG9yeScsIFtcIiRsb2NhdGlvblwiLCBcImxvY2FsU3RvcmFnZVwiLCAoJGxvY2F0aW9uLCBsb2NhbFN0b3JhZ2UpID0+IHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XSk7XHJcblxyXG4gIF9tb2R1bGUuZmFjdG9yeSgnQ29ubmVjdERpYWxvZ1NlcnZpY2UnLCBbJyRyb290U2NvcGUnLCAoJHJvb3RTY29wZTpuZy5JUm9vdFNjb3BlU2VydmljZSkgPT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZGlhbG9nOiBuZXcgVUkuRGlhbG9nKCksXHJcbiAgICAgIHNhdmVDcmVkZW50aWFsczogZmFsc2UsXHJcbiAgICAgIHVzZXJOYW1lOiBudWxsLFxyXG4gICAgICBwYXNzd29yZDogbnVsbCxcclxuICAgICAgam9sb2tpYVVybDogbnVsbCxcclxuICAgICAgY29udGFpbmVyTmFtZTogbnVsbCxcclxuICAgICAgdmlldzogbnVsbFxyXG4gICAgfTtcclxuICB9XSk7XHJcblxyXG4gIF9tb2R1bGUuZmlsdGVyKCdrdWJlcm5ldGVzUGFnZUxpbmsnLCAoKSA9PiBlbnRpdHlQYWdlTGluayk7XHJcblxyXG4gIF9tb2R1bGUuZmlsdGVyKCdyZWxhdGl2ZVRpbWUnLCAoKSA9PiB7XHJcbiAgICByZXR1cm4gKGRhdGUpID0+IHtcclxuICAgICAgcmV0dXJuIGh1bWFuZGF0ZS5yZWxhdGl2ZVRpbWUoZGF0ZSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIF9tb2R1bGUucnVuKFsndmlld1JlZ2lzdHJ5JywgJ1NlcnZpY2VSZWdpc3RyeScsICdIYXd0aW9OYXYnLCAnS3ViZXJuZXRlc01vZGVsJywgJyR0ZW1wbGF0ZUNhY2hlJywgKHZpZXdSZWdpc3RyeSwgU2VydmljZVJlZ2lzdHJ5LCBIYXd0aW9OYXYsIEt1YmVybmV0ZXNNb2RlbCwgJHRlbXBsYXRlQ2FjaGUpID0+IHtcclxuICAgIGxvZy5kZWJ1ZyhcIlJ1bm5pbmdcIik7XHJcbiAgICB2aWV3UmVnaXN0cnlbJ2t1YmVybmV0ZXMnXSA9IHRlbXBsYXRlUGF0aCArICdsYXlvdXRLdWJlcm5ldGVzLmh0bWwnO1xyXG4gICAgLy92aWV3UmVnaXN0cnlbJ2t1YmVybmV0ZXMnXSA9IENvbmZpZ3MudGVtcGxhdGVQYXRoICsgJ3NoYXJlTGF5b3V0Lmh0bWwnO1xyXG5cclxuICAgIHZhciBidWlsZGVyID0gSGF3dGlvTmF2LmJ1aWxkZXIoKTtcclxuICAgIHZhciBhcHBzID0gYnVpbGRlci5pZCgna3ViZS1hcHBzJylcclxuICAgICAgLmhyZWYoKCkgPT4gVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdhcHBzJykpXHJcbiAgICAgIC50aXRsZSgoKSA9PiAnQXBwcycpXHJcbiAgICAgIC5idWlsZCgpO1xyXG5cclxuICAgIHZhciBzZXJ2aWNlcyA9IGJ1aWxkZXIuaWQoJ2t1YmUtc2VydmljZXMnKVxyXG4gICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3NlcnZpY2VzJykpXHJcbiAgICAgIC50aXRsZSgoKSA9PiAnU2VydmljZXMnKVxyXG4gICAgICAuYnVpbGQoKTtcclxuXHJcbiAgICB2YXIgY29udHJvbGxlcnMgPSBidWlsZGVyLmlkKCdrdWJlLWNvbnRyb2xsZXJzJylcclxuICAgICAgLmhyZWYoKCkgPT4gVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdyZXBsaWNhdGlvbkNvbnRyb2xsZXJzJykpXHJcbiAgICAgIC50aXRsZSgoKSA9PiAnb3JhY2xl5pyN5YqhJylcclxuICAgICAgLmJ1aWxkKCk7XHJcblxyXG4gICAgdmFyIHBvZHMgPSBidWlsZGVyLmlkKCdrdWJlLXBvZHMnKVxyXG4gICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3BvZHMnKSlcclxuICAgICAgLnRpdGxlKCgpID0+ICfmtYvor5XpobXpnaInKVxyXG4gICAgICAuYnVpbGQoKTtcclxuXHJcbiAgICB2YXIgZXZlbnRzID0gYnVpbGRlci5pZCgna3ViZS1ldmVudHMnKVxyXG4gICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2V2ZW50cycpKVxyXG4gICAgICAudGl0bGUoKCkgPT4gJ+acjeWKoeWQr+WKqOaXpeW/lycpXHJcbiAgICAgIC5idWlsZCgpO1xyXG5cclxuICAgIHZhciBob3N0cyA9IGJ1aWxkZXIuaWQoJ2t1YmUtaG9zdHMnKVxyXG4gICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2hvc3RzJykpXHJcbiAgICAgIC50aXRsZSgoKSA9PiAn6ZuG576k6IqC54K5JylcclxuICAgICAgLmJ1aWxkKCk7XHJcblxyXG4gICAgdmFyIG92ZXJ2aWV3ID0gYnVpbGRlci5pZCgna3ViZS1vdmVydmlldycpXHJcbiAgICAgIC5ocmVmKCgpID0+IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnb3ZlcnZpZXcnKSlcclxuICAgICAgLnRpdGxlKCgpID0+ICdEaWFncmFtJylcclxuICAgICAgLmJ1aWxkKCk7XHJcblxyXG4gICAgdmFyIGJ1aWxkcyA9IGJ1aWxkZXIuaWQoJ2t1YmUtYnVpbGRzJylcclxuICAgICAgLmhyZWYoKCkgPT4gVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdidWlsZHMnKSlcclxuICAgICAgLnRpdGxlKCgpID0+ICdCdWlsZHMnKVxyXG4gICAgICAuYnVpbGQoKTtcclxuXHJcbiAgICB2YXIgYnVpbGRDb25maWdzID0gYnVpbGRlci5pZCgna3ViZS1idWlsZENvbmZpZ3MnKVxyXG4gICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2J1aWxkQ29uZmlncycpKVxyXG4gICAgICAudGl0bGUoKCkgPT4gJ0J1aWxkIENvbmZpZ3MnKVxyXG4gICAgICAuYnVpbGQoKTtcclxuXHJcbiAgICB2YXIgZGVwbG95cyA9IGJ1aWxkZXIuaWQoJ2t1YmUtZGVwbG95cycpXHJcbiAgICAgIC5ocmVmKCgpID0+IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnZGVwbG95bWVudENvbmZpZ3MnKSlcclxuICAgICAgLnRpdGxlKCgpID0+ICdEZXBsb3lzJylcclxuICAgICAgLmJ1aWxkKCk7XHJcblxyXG4gICAgdmFyIGltYWdlUmVwb3NpdG9yaWVzID0gYnVpbGRlci5pZCgna3ViZS1pbWFnZVJlcG9zaXRvcmllcycpXHJcbiAgICAgIC5ocmVmKCgpID0+IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnaW1hZ2VSZXBvc2l0b3JpZXMnKSlcclxuICAgICAgLnRpdGxlKCgpID0+ICdSZWdpc3RyaWVzJylcclxuICAgICAgLmJ1aWxkKCk7XHJcblxyXG4gICAgdmFyIHBpcGVsaW5lcyA9IGJ1aWxkZXIuaWQoJ2t1YmUtcGlwZWxpbmVzJylcclxuICAgICAgLmhyZWYoKCkgPT4gVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdwaXBlbGluZXMnKSlcclxuICAgICAgLnRpdGxlKCgpID0+ICdQaXBlbGluZXMnKVxyXG4gICAgICAuYnVpbGQoKTtcclxuXHJcbiAgICB2YXIgcmVwb3MgPSBidWlsZGVyLmlkKCdrdWJlLXJlcG9zJylcclxuICAgICAgLmhyZWYoKCkgPT4gXCIvZm9yZ2UvcmVwb3NcIilcclxuICAgICAgLmlzVmFsaWQoKCkgPT4gU2VydmljZVJlZ2lzdHJ5Lmhhc1NlcnZpY2UoZmFicmljOEZvcmdlU2VydmljZU5hbWUpICYmIFNlcnZpY2VSZWdpc3RyeS5oYXNTZXJ2aWNlKGdvZ3NTZXJ2aWNlTmFtZSkpXHJcbiAgICAgIC50aXRsZSgoKSA9PiAnUmVwb3NpdG9yaWVzJylcclxuICAgICAgLmJ1aWxkKCk7XHJcblxyXG4gICAgdmFyIG1haW5UYWIgPSBidWlsZGVyLmlkKCdrdWJlcm5ldGVzJylcclxuICAgICAgLnJhbmsoMTAwKVxyXG4gICAgICAuZGVmYXVsdFBhZ2Uoe1xyXG4gICAgICAgIHJhbms6IDIwLFxyXG4gICAgICAgIGlzVmFsaWQ6ICh5ZXMsIG5vKSA9PiB7XHJcbiAgICAgICAgICB5ZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5ocmVmKCgpID0+IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCBcIi9uYW1lc3BhY2UvZGVmYXVsdC9yZXBsaWNhdGlvbkNvbnRyb2xsZXJzXCIpKVxyXG4gICAgICAudGl0bGUoKCkgPT4gJ+acjeWKoembhue+pCcpXHJcbiAgICAgIC50YWJzKGNvbnRyb2xsZXJzLCBwb2RzLCBldmVudHMpXHJcbiAgICAgIC5idWlsZCgpO1xyXG4gICAgSGF3dGlvTmF2LmFkZChtYWluVGFiKTtcclxuXHJcbiAgICAvKiB0ZXN0S3ViZXJuZXRlc01vZGVsXHJcbiAgICBIYXd0aW9OYXYuYWRkKHtcclxuICAgICAgaWQ6ICdrOHNBcHBTd2l0Y2hlcicsXHJcbiAgICAgIHRpdGxlOiAoKSA9PiAnJywgLy8gbm90IHVzZWQgYXMgJ3RlbXBsYXRlJyBiZWxvdyBvdmVycmlkZXMgdGhpc1xyXG4gICAgICBpc1ZhbGlkOiAoKSA9PiBLdWJlcm5ldGVzTW9kZWwuc2VydmljZUFwcHMubGVuZ3RoID4gMCxcclxuICAgICAgY29udGV4dDogdHJ1ZSxcclxuICAgICAgdGVtcGxhdGU6ICgpID0+ICR0ZW1wbGF0ZUNhY2hlLmdldChVcmxIZWxwZXJzLmpvaW4odGVtcGxhdGVQYXRoLCAnc2VydmljZUFwcHMuaHRtbCcpKVxyXG4gICAgfSk7XHJcbiAgICAqL1xyXG5cclxuICAgIHZhciBwcm9qZWN0c1RhYiA9IGJ1aWxkZXIuaWQoJ29wZW5zaGlmdCcpXHJcbiAgICAgIC5yYW5rKDEwMClcclxuICAgICAgLmhyZWYoKCkgPT4gVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdidWlsZENvbmZpZ3MnKSArICc/c3ViLXRhYj1rdWJlLWJ1aWxkQ29uZmlncycpXHJcbiAgICAgIC50aXRsZSgoKSA9PiAnUHJvamVjdHMnKVxyXG4gICAgICAvLyBsZXRzIGRpc2FibGUgdGhlIHBpcGVsaW5lcyB2aWV3IGZvciBub3dcclxuICAgICAgLy8gcGlwZWxpbmVzLFxyXG4gICAgICAudGFicyhyZXBvcywgYnVpbGRDb25maWdzLCBidWlsZHMsIGRlcGxveXMsIGltYWdlUmVwb3NpdG9yaWVzKVxyXG4gICAgICAuYnVpbGQoKTtcclxuXHJcbiAgICAvL0hhd3Rpb05hdi5hZGQocHJvamVjdHNUYWIpO1xyXG4gIH1dKTtcclxuXHJcbiAgaGF3dGlvUGx1Z2luTG9hZGVyLnJlZ2lzdGVyUHJlQm9vdHN0cmFwVGFzayh7XHJcbiAgICBuYW1lOiAnS3ViZXJuZXRlc0luaXQnLFxyXG4gICAgdGFzazogKG5leHQpID0+IHtcclxuICAgICAgJC5nZXRTY3JpcHQoJ29zY29uc29sZS9jb25maWcuanMnKVxyXG4gICAgICAgIC5kb25lKChzY3JpcHQsIHRleHRTdGF0dXMpID0+IHtcclxuICAgICAgICAgIHZhciBjb25maWc6S3ViZXJuZXRlc0NvbmZpZyA9IEt1YmVybmV0ZXMub3NDb25maWcgPSB3aW5kb3dbJ09QRU5TSElGVF9DT05GSUcnXTtcclxuICAgICAgICAgIGxvZy5kZWJ1ZyhcIkZldGNoZWQgT0F1dGggY29uZmlnOiBcIiwgY29uZmlnKTtcclxuICAgICAgICAgIHZhciBtYXN0ZXI6c3RyaW5nID0gY29uZmlnLm1hc3Rlcl91cmk7XHJcbiAgICAgICAgICBpZiAoIW1hc3RlciAmJiBjb25maWcuYXBpICYmIGNvbmZpZy5hcGkuazhzKSB7XHJcbiAgICAgICAgICAgIHZhciBtYXN0ZXJVcmkgPSBuZXcgVVJJKCkuaG9zdChjb25maWcuYXBpLms4cy5ob3N0UG9ydCkucGF0aChcIlwiKS5xdWVyeShcIlwiKTtcclxuICAgICAgICAgICAgaWYgKGNvbmZpZy5hcGkuazhzLnByb3RvKSB7XHJcbiAgICAgICAgICAgICAgbWFzdGVyVXJpLnByb3RvY29sKGNvbmZpZy5hcGkuazhzLnByb3RvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtYXN0ZXIgPSBtYXN0ZXJVcmkudG9TdHJpbmcoKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBPU09BdXRoQ29uZmlnID0gY29uZmlnLm9wZW5zaGlmdDtcclxuICAgICAgICAgIEdvb2dsZU9BdXRoQ29uZmlnID0gY29uZmlnLmdvb2dsZTtcclxuICAgICAgICAgIEtleWNsb2FrQ29uZmlnID0gY29uZmlnLmtleWNsb2FrO1xyXG5cclxuICAgICAgICAgIGlmIChPU09BdXRoQ29uZmlnICYmICFtYXN0ZXIpIHtcclxuICAgICAgICAgICAgLy8gVE9ETyBhdXRoLm1hc3Rlcl91cmkgbm8gbG9uZ2VyIHVzZWQgcmlnaHQ/XHJcbiAgICAgICAgICAgIC8vIG1hc3RlciA9IE9TT0F1dGhDb25maWcubWFzdGVyX3VyaTtcclxuICAgICAgICAgICAgaWYgKCFtYXN0ZXIpIHtcclxuICAgICAgICAgICAgICB2YXIgb2F1dGhfYXV0aG9yaXplX3VyaSA9IE9TT0F1dGhDb25maWcub2F1dGhfYXV0aG9yaXplX3VyaTtcclxuICAgICAgICAgICAgICBpZiAob2F1dGhfYXV0aG9yaXplX3VyaSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRleHQgPSBvYXV0aF9hdXRob3JpemVfdXJpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGlkeCA9IHRleHQuaW5kZXhPZihcIjovL1wiKTtcclxuICAgICAgICAgICAgICAgIGlmIChpZHggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlkeCArPSAzO1xyXG4gICAgICAgICAgICAgICAgICBpZHggPSB0ZXh0LmluZGV4T2YoXCIvXCIsIGlkeCk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpZHggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFzdGVyID0gdGV4dC5zdWJzdHJpbmcoMCwgKytpZHgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoKCFLdWJlcm5ldGVzLm1hc3RlclVybCB8fCBLdWJlcm5ldGVzLm1hc3RlclVybCA9PT0gXCIvXCIpICYmICghbWFzdGVyIHx8IG1hc3RlciA9PT0gXCIvXCIpKSB7XHJcbiAgICAgICAgICAgIC8vIGxldHMgZGVmYXVsdCB0aGUgbWFzdGVyIHRvIHRoZSBjdXJyZW50IHByb3RvY29sIGFuZCBob3N0L3BvcnRcclxuICAgICAgICAgICAgLy8gaW4gY2FzZSB0aGUgbWFzdGVyIHVybCBpcyBcIi9cIiBhbmQgd2UgYXJlXHJcbiAgICAgICAgICAgIC8vIHNlcnZpbmcgdXAgc3RhdGljIGNvbnRlbnQgZnJvbSBpbnNpZGUgL2FwaS92MS9uYW1lc3BhY2VzL2RlZmF1bHQvc2VydmljZXMvZmFicmljOCBvciBzb21ldGhpbmcgbGlrZSB0aGF0XHJcbiAgICAgICAgICAgIHZhciBocmVmID0gbG9jYXRpb24uaHJlZjtcclxuICAgICAgICAgICAgaWYgKGhyZWYpIHtcclxuICAgICAgICAgICAgICBtYXN0ZXIgPSBuZXcgVVJJKGhyZWYpLnF1ZXJ5KFwiXCIpLnBhdGgoXCJcIikudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKG1hc3Rlcikge1xyXG4gICAgICAgICAgICBLdWJlcm5ldGVzLm1hc3RlclVybCA9IG1hc3RlcjtcclxuICAgICAgICAgICAgbmV4dCgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuZmFpbCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGxvZy5kZWJ1ZyhcIkVycm9yIGZldGNoaW5nIE9BVVRIIGNvbmZpZzogXCIsIHJlc3BvbnNlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hbHdheXMoKCkgPT4ge1xyXG4gICAgICAgICAgbmV4dCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH0sIHRydWUpO1xyXG5cclxuICBoYXd0aW9QbHVnaW5Mb2FkZXIuYWRkTW9kdWxlKCduZ1Jlc291cmNlJyk7XHJcbiAgaGF3dGlvUGx1Z2luTG9hZGVyLmFkZE1vZHVsZShwbHVnaW5OYW1lKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuICB2YXIgbG9nID0gTG9nZ2VyLmdldCgna3ViZXJuZXRlcy13YXRjaGVyJyk7XHJcblxyXG4gIHZhciBrOHNUeXBlcyA9IEt1YmVybmV0ZXNBUEkuTmFtZXNwYWNlZFR5cGVzLms4c1R5cGVzO1xyXG4gIHZhciBvc1R5cGVzICA9IEt1YmVybmV0ZXNBUEkuTmFtZXNwYWNlZFR5cGVzLm9zVHlwZXM7XHJcblxyXG4gIHZhciBzZWxmID0gPGFueT4ge307XHJcblxyXG4gIHZhciB1cGRhdGVGdW5jdGlvbiA9ICgpID0+IHtcclxuICAgIFxyXG4gICAgbG9nLmRlYnVnKFwiT2JqZWN0cyBjaGFuZ2VkLCBmaXJpbmcgbGlzdGVuZXJzXCIpO1xyXG4gICAgdmFyIG9iamVjdHMgPSA8T2JqZWN0TWFwPnt9O1xyXG4gICAgXy5mb3JFYWNoKHNlbGYuZ2V0VHlwZXMoKSwgKHR5cGU6c3RyaW5nKSA9PiB7XHJcbiAgICAgIG9iamVjdHNbdHlwZV0gPSBzZWxmLmdldE9iamVjdHModHlwZSk7XHJcbiAgICB9KTtcclxuICAgIF8uZm9yRWFjaChzZWxmLmxpc3RlbmVycywgKGxpc3RlbmVyOihPYmplY3RNYXApID0+IHZvaWQpID0+IHtcclxuICAgICAgbGlzdGVuZXIob2JqZWN0cyk7XHJcbiAgICB9KTsgIFxyXG4gIH07XHJcbiAgdmFyIGRlYm91bmNlZFVwZGF0ZSA9IF8uZGVib3VuY2UodXBkYXRlRnVuY3Rpb24sIDc1LCB7IHRyYWlsaW5nOiB0cnVlIH0pO1xyXG5cclxuICB2YXIgbmFtZXNwYWNlV2F0Y2ggPSB7XHJcbiAgICBzZWxlY3RlZDogdW5kZWZpbmVkLFxyXG4gICAgd2F0Y2g6IHVuZGVmaW5lZCxcclxuICAgIG9iamVjdHM6IFtdLFxyXG4gICAgb2JqZWN0TWFwOiB7fSxcclxuICAgIHdhdGNoZXM6IHt9XHJcbiAgfTtcclxuXHJcbiAgaGF3dGlvUGx1Z2luTG9hZGVyLnJlZ2lzdGVyUHJlQm9vdHN0cmFwVGFzayh7XHJcbiAgICBuYW1lOiAnS3ViZXJuZXRlc1dhdGNoZXJJbml0JyxcclxuICAgIGRlcGVuZHM6IFsnS3ViZXJuZXRlc0FwaURpc2NvdmVyeSddLFxyXG4gICAgdGFzazogKG5leHQpID0+IHtcclxuICAgICAgdmFyIGJvb3RlZCA9IGZhbHNlO1xyXG4gICAgICBpZiAoaXNPcGVuU2hpZnQpIHtcclxuICAgICAgICBsb2cuaW5mbyhcIkJhY2tlbmQgaXMgYW4gT3BlbnNoaWZ0IGluc3RhbmNlXCIpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxvZy5pbmZvKFwiQmFja2VuZCBpcyBhIHZhbmlsbGEgS3ViZXJuZXRlcyBpbnN0YW5jZVwiKTtcclxuICAgICAgfVxyXG4gICAgICBuYW1lc3BhY2VXYXRjaC53YXRjaCA9IEt1YmVybmV0ZXNBUEkud2F0Y2goe1xyXG4gICAgICAgIGtpbmQ6IEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5OQU1FU1BBQ0VTLFxyXG4gICAgICAgIHN1Y2Nlc3M6IChvYmplY3RzKSA9PiB7XHJcbiAgICAgICAgICBuYW1lc3BhY2VXYXRjaC5vYmplY3RzID0gb2JqZWN0cztcclxuICAgICAgICAgIGlmICghYm9vdGVkKSB7XHJcbiAgICAgICAgICAgIGJvb3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHNlbGYuc2V0TmFtZXNwYWNlKGxvY2FsU3RvcmFnZVtDb25zdGFudHMuTkFNRVNQQUNFX1NUT1JBR0VfS0VZXSB8fCBkZWZhdWx0TmFtZXNwYWNlKTtcclxuICAgICAgICAgICAgbmV4dCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbG9nLmRlYnVnKFwiR290IG5hbWVzcGFjZXM6IFwiLCBuYW1lc3BhY2VXYXRjaC5vYmplY3RzKTtcclxuICAgICAgICB9LCBlcnJvcjogKGVycm9yOmFueSkgPT4ge1xyXG4gICAgICAgICAgbG9nLndhcm4oXCJFcnJvciBmZXRjaGluZyBuYW1lc3BhY2VzOiBcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgLy8gVE9ETyBpcyB0aGlzIG5lY2Vzc2FyeT9cclxuICAgICAgICAgIC8vSGF3dGlvT0F1dGguZG9Mb2dvdXQoKTtcclxuICAgICAgICAgIGlmICghYm9vdGVkKSB7XHJcbiAgICAgICAgICAgIGJvb3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIG5leHQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICBoYXd0aW9QbHVnaW5Mb2FkZXIucmVnaXN0ZXJQcmVCb290c3RyYXBUYXNrKHtcclxuICAgIG5hbWU6ICdLdWJlcm5ldGVzQXBpRGlzY292ZXJ5JyxcclxuICAgIGRlcGVuZHM6IFsnaGF3dGlvLW9hdXRoJ10sXHJcbiAgICB0YXNrOiAobmV4dCkgPT4ge1xyXG4gICAgICBpc09wZW5TaGlmdCA9IGZhbHNlO1xyXG5cclxuICAgICAgdmFyIHVzZXJQcm9maWxlID0gSGF3dGlvT0F1dGguZ2V0VXNlclByb2ZpbGUoKTtcclxuICAgICAgbG9nLmRlYnVnKFwiVXNlciBwcm9maWxlOiBcIiwgdXNlclByb2ZpbGUpO1xyXG4gICAgICBpZiAodXNlclByb2ZpbGUgJiYgdXNlclByb2ZpbGUucHJvdmlkZXIgPT09IFwiaGF3dGlvLWdvb2dsZS1vYXV0aFwiKSB7XHJcbiAgICAgICAgbG9nLmRlYnVnKFwiUG9zc2libHkgcnVubmluZyBvbiBHQ0VcIik7XHJcbiAgICAgICAgLy8gYXBpIG1hc3RlciBpcyBvbiBHQ0VcclxuICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgdXJsOiBVcmxIZWxwZXJzLmpvaW4obWFzdGVyQXBpVXJsKCksICdhcGknLCAndjEnLCAnbmFtZXNwYWNlcycpLFxyXG4gICAgICAgICAgY29tcGxldGU6IChqcVhIUiwgdGV4dFN0YXR1cykgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGV4dFN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcclxuICAgICAgICAgICAgICBsb2cuZGVidWcoXCJqcVhIUjogXCIsIGpxWEhSKTtcclxuICAgICAgICAgICAgICB1c2VyUHJvZmlsZS5vbGRUb2tlbiA9IHVzZXJQcm9maWxlLnRva2VuO1xyXG4gICAgICAgICAgICAgIHVzZXJQcm9maWxlLnRva2VuID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICQuYWpheFNldHVwKHtcclxuICAgICAgICAgICAgICAgIGJlZm9yZVNlbmQ6IChyZXF1ZXN0KSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG5leHQoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBiZWZvcmVTZW5kOiAocmVxdWVzdCkgPT4ge1xyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsb2cuZGVidWcoXCJOb3QgcnVubmluZyBvbiBHQ0VcIik7XHJcbiAgICAgICAgLy8gZG91YmxlLWNoZWNrIGlmIHdlJ3JlIG9uIHZhbmlsbGEgazhzIG9yIG9wZW5zaGlmdFxyXG4gICAgICAgIHZhciByb290VXJpID0gbmV3IFVSSShtYXN0ZXJBcGlVcmwoKSkucGF0aChcIi9vYXBpXCIpLnF1ZXJ5KFwiXCIpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgbG9nLmRlYnVnKFwiQ2hlY2tpbmcgZm9yIGFuIG9wZW5zaGlmdCBiYWNrZW5kXCIpO1xyXG4gICAgICAgIEhhd3Rpb09BdXRoLmF1dGhlbnRpY2F0ZWRIdHRwUmVxdWVzdCh7XHJcbiAgICAgICAgICB1cmw6IHJvb3RVcmksXHJcbiAgICAgICAgICBzdWNjZXNzOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgIGlzT3BlblNoaWZ0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBuZXh0KCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pID0+IHtcclxuICAgICAgICAgICAgdmFyIGVycm9yID0gS3ViZXJuZXRlc0FQSS5nZXRFcnJvck9iamVjdChqcVhIUik7XHJcbiAgICAgICAgICAgIGlmICghZXJyb3IpIHtcclxuICAgICAgICAgICAgICBsb2cuZGVidWcoXCJGYWlsZWQgdG8gZmluZCByb290IHBhdGhzOiBcIiwgdGV4dFN0YXR1cywgXCI6IFwiLCBlcnJvclRocm93bik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiRmFpbGVkIHRvIGZpbmQgcm9vdCBwYXRoczogXCIsIGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpc09wZW5TaGlmdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBuZXh0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgdmFyIGN1c3RvbVVybEhhbmRsZXJzID0ge307XHJcblxyXG4gIHNlbGYuc2V0TmFtZXNwYWNlID0gKG5hbWVzcGFjZTogc3RyaW5nKSA9PiB7XHJcbiAgICBpZiAobmFtZXNwYWNlID09PSBuYW1lc3BhY2VXYXRjaC5zZWxlY3RlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAobmFtZXNwYWNlV2F0Y2guc2VsZWN0ZWQpIHtcclxuICAgICAgbG9nLmRlYnVnKFwiU3RvcHBpbmcgY3VycmVudCB3YXRjaGVzXCIpO1xyXG4gICAgICBfLmZvck93bihuYW1lc3BhY2VXYXRjaC53YXRjaGVzLCAod2F0Y2gsIGtleSkgPT4ge1xyXG4gICAgICAgIGlmICghS3ViZXJuZXRlc0FQSS5uYW1lc3BhY2VkKGtleSkpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbG9nLmRlYnVnKFwiRGlzY29ubmVjdGluZyB3YXRjaDogXCIsIGtleSk7XHJcbiAgICAgICAgd2F0Y2guZGlzY29ubmVjdCgpO1xyXG4gICAgICB9KTtcclxuICAgICAgXy5mb3JFYWNoKF8ua2V5cyhuYW1lc3BhY2VXYXRjaC53YXRjaGVzKSwgKGtleSkgPT4ge1xyXG4gICAgICAgIGlmICghS3ViZXJuZXRlc0FQSS5uYW1lc3BhY2VkKGtleSkpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbG9nLmRlYnVnKFwiRGVsZXRpbmcga2luZDogXCIsIGtleSk7XHJcbiAgICAgICAgZGVsZXRlIG5hbWVzcGFjZVdhdGNoLndhdGNoZXNba2V5XTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBuYW1lc3BhY2VXYXRjaC5zZWxlY3RlZCA9IG5hbWVzcGFjZTtcclxuICAgIGlmIChuYW1lc3BhY2UpIHtcclxuICAgICAgXy5mb3JFYWNoKHNlbGYuZ2V0VHlwZXMoKSwgKGtpbmQ6c3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKGtpbmQgPT09IEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5OQU1FU1BBQ0VTKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghbmFtZXNwYWNlV2F0Y2gud2F0Y2hlc1traW5kXSkge1xyXG4gICAgICAgICAgbG9nLmRlYnVnKFwiQ3JlYXRpbmcgd2F0Y2ggZm9yIGtpbmQ6IFwiLCBraW5kKTtcclxuICAgICAgICAgIHZhciBjb25maWcgPSA8YW55PiB7XHJcbiAgICAgICAgICAgIGtpbmQ6IGtpbmQsXHJcbiAgICAgICAgICAgIG5hbWVzcGFjZTogS3ViZXJuZXRlc0FQSS5uYW1lc3BhY2VkKGtpbmQpID8gbmFtZXNwYWNlIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBzdWNjZXNzOiAob2JqZWN0cykgPT4ge1xyXG4gICAgICAgICAgICAgIHdhdGNoLm9iamVjdHMgPSBvYmplY3RzO1xyXG4gICAgICAgICAgICAgIGRlYm91bmNlZFVwZGF0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgaWYgKGtpbmQgaW4gY3VzdG9tVXJsSGFuZGxlcnMpIHtcclxuICAgICAgICAgICAgY29uZmlnLnVybEZ1bmN0aW9uID0gY3VzdG9tVXJsSGFuZGxlcnNba2luZF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB2YXIgd2F0Y2ggPSA8YW55PiBLdWJlcm5ldGVzQVBJLndhdGNoKGNvbmZpZyk7XHJcbiAgICAgICAgICB3YXRjaC5jb25maWcgPSBjb25maWc7XHJcbiAgICAgICAgICBuYW1lc3BhY2VXYXRjaC53YXRjaGVzW2tpbmRdID0gd2F0Y2g7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBzZWxmLmhhc1dlYlNvY2tldCA9IHRydWU7XHJcblxyXG4gIHNlbGYuZ2V0TmFtZXNwYWNlID0gKCkgPT4gbmFtZXNwYWNlV2F0Y2guc2VsZWN0ZWQ7XHJcblxyXG4gIHNlbGYucmVnaXN0ZXJDdXN0b21VcmxGdW5jdGlvbiA9IChraW5kOnN0cmluZywgdXJsOihvcHRpb25zOkt1YmVybmV0ZXNBUEkuSzhTT3B0aW9ucykgPT4gc3RyaW5nKSA9PiB7XHJcbiAgICBjdXN0b21VcmxIYW5kbGVyc1traW5kXSA9IHVybDtcclxuICAgIGlmIChraW5kIGluIG5hbWVzcGFjZVdhdGNoLndhdGNoZXMpIHtcclxuICAgICAgdmFyIHdhdGNoID0gbmFtZXNwYWNlV2F0Y2gud2F0Y2hlc1traW5kXTtcclxuICAgICAgdmFyIGNvbmZpZyA9IHdhdGNoLmNvbmZpZztcclxuICAgICAgY29uZmlnLnVybEZ1bmN0aW9uID0gdXJsO1xyXG4gICAgICB3YXRjaC5kaXNjb25uZWN0KCk7XHJcbiAgICAgIGRlbGV0ZSBuYW1lc3BhY2VXYXRjaC53YXRjaGVzW2tpbmRdO1xyXG4gICAgICBjb25maWcuc3VjY2VzcyA9IChvYmplY3RzKSA9PiB7XHJcbiAgICAgICAgd2F0Y2gub2JqZWN0cyA9IG9iamVjdHM7XHJcbiAgICAgICAgZGVib3VuY2VkVXBkYXRlKCk7XHJcbiAgICAgIH1cclxuICAgICAgd2F0Y2ggPSA8YW55PiBLdWJlcm5ldGVzQVBJLndhdGNoKGNvbmZpZyk7XHJcbiAgICAgIHdhdGNoLmNvbmZpZyA9IGNvbmZpZztcclxuICAgICAgbmFtZXNwYWNlV2F0Y2gud2F0Y2hlc1traW5kXSA9IHdhdGNoO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZi5nZXRUeXBlcyA9ICgpID0+IHtcclxuICAgIHZhciBmaWx0ZXIgPSAoa2luZDpzdHJpbmcpID0+IHtcclxuICAgICAgLy8gZmlsdGVyIG91dCBzdHVmZiB3ZSBkb24ndCBjYXJlIGFib3V0IHlldFxyXG4gICAgICBzd2l0Y2goa2luZCkge1xyXG4gICAgICAgIGNhc2UgS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLk9BVVRIX0NMSUVOVFM6XHJcbiAgICAgICAgY2FzZSBLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuSU1BR0VfU1RSRUFNUzpcclxuICAgICAgICBjYXNlIEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5QT0xJQ0lFUzpcclxuICAgICAgICBjYXNlIEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5ST0xFUzpcclxuICAgICAgICBjYXNlIEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5ST0xFX0JJTkRJTkdTOlxyXG4gICAgICAgIGNhc2UgS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLlBPTElDWV9CSU5ESU5HUzpcclxuICAgICAgICBjYXNlIEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5QRVJTSVNURU5UX1ZPTFVNRV9DTEFJTVM6XHJcbiAgICAgICAgY2FzZSBLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuUEVSU0lTVEVOVF9WT0xVTUVTOlxyXG4gICAgICAgIGNhc2UgS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLkVORFBPSU5UUzpcclxuICAgICAgICBjYXNlIEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5SRVNPVVJDRV9RVU9UQVM6XHJcbiAgICAgICAgY2FzZSBLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuU0VSVklDRV9BQ0NPVU5UUzpcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgYW5zd2VyID0gazhzVHlwZXMuY29uY2F0KFtXYXRjaFR5cGVzLk5BTUVTUEFDRVNdKTtcclxuICAgIGlmIChpc09wZW5TaGlmdCkge1xyXG4gICAgICBhbnN3ZXIgPSBhbnN3ZXIuY29uY2F0KG9zVHlwZXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYW5zd2VyID0gYW5zd2VyLmNvbmNhdChLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuVEVNUExBVEVTKTtcclxuICAgICAgYW5zd2VyID0gYW5zd2VyLmNvbmNhdChLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuQlVJTERfQ09ORklHUyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gXy5maWx0ZXIoYW5zd2VyLCBmaWx0ZXIpO1xyXG4gIH1cclxuXHJcbiAgc2VsZi5nZXRPYmplY3RzID0gKGtpbmQ6IHN0cmluZykgPT4ge1xyXG4gICAgaWYgKGtpbmQgPT09IFdhdGNoVHlwZXMuTkFNRVNQQUNFUykge1xyXG4gICAgICByZXR1cm4gbmFtZXNwYWNlV2F0Y2gub2JqZWN0cztcclxuICAgIH1cclxuICAgIGlmIChraW5kIGluIG5hbWVzcGFjZVdhdGNoLndhdGNoZXMpIHtcclxuICAgICAgcmV0dXJuIG5hbWVzcGFjZVdhdGNoLndhdGNoZXNba2luZF0ub2JqZWN0cztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxmLmxpc3RlbmVycyA9IDxBcnJheTwoT2JqZWN0TWFwKSA9PiB2b2lkPj4gW107XHJcblxyXG4gIC8vIGxpc3RlbmVyIGdldHMgbm90aWZpZWQgYWZ0ZXIgYSBidW5jaCBvZiBjaGFuZ2VzIGhhdmUgb2NjdXJyZWRcclxuICBzZWxmLnJlZ2lzdGVyTGlzdGVuZXIgPSAoZm46KG9iamVjdHM6T2JqZWN0TWFwKSA9PiB2b2lkKSA9PiB7XHJcbiAgICBzZWxmLmxpc3RlbmVycy5wdXNoKGZuKTtcclxuICB9XHJcblxyXG4gIHZhciBwcm9qZWN0c0hhbmRsZSA9IDxhbnk+IHVuZGVmaW5lZDtcclxuXHJcbiAgLy8ga2ljayBvZmYgdGhlIHByb2plY3Qgd2F0Y2hlciBhIGJpdCBzb29uZXIgYWxzb1xyXG4gIGhhd3Rpb1BsdWdpbkxvYWRlci5yZWdpc3RlclByZUJvb3RzdHJhcFRhc2soe1xyXG4gICAgbmFtZTogJ1Byb2plY3RzV2F0Y2hlcicsXHJcbiAgICBkZXBlbmRzOiBbJ0t1YmVybmV0ZXNBcGlEaXNjb3ZlcnknXSxcclxuICAgIHRhc2s6IChuZXh0KSA9PiB7XHJcbiAgICAgIGlmIChpc09wZW5TaGlmdCkge1xyXG5cclxuICAgICAgICBwcm9qZWN0c0hhbmRsZSA9IEt1YmVybmV0ZXNBUEkud2F0Y2goe1xyXG4gICAgICAgICAga2luZDogS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLlBST0pFQ1RTLFxyXG4gICAgICAgICAgbmFtZXNwYWNlOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBzdWNjZXNzOiAob2JqZWN0cykgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5saXN0ZW5lcnMgJiYgc2VsZi5saXN0ZW5lcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiZ290IHByb2plY3RzOiBcIiwgb2JqZWN0cyk7XHJcbiAgICAgICAgICAgICAgXy5mb3JFYWNoKHNlbGYubGlzdGVuZXJzLCAobGlzdGVuZXI6KG9iamVjdHM6T2JqZWN0TWFwKSA9PiB2b2lkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsaXN0ZW5lcih7XHJcbiAgICAgICAgICAgICAgICAgIHByb2plY3RzOiBvYmplY3RzXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIG5leHQoKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG5fbW9kdWxlLnNlcnZpY2UoJ1dhdGNoZXJTZXJ2aWNlJywgWyd1c2VyRGV0YWlscycsICckcm9vdFNjb3BlJywgJyR0aW1lb3V0JywgKHVzZXJEZXRhaWxzLCAkcm9vdFNjb3BlLCAkdGltZW91dCkgPT4ge1xyXG4gICAgcmV0dXJuIHNlbGY7XHJcbn1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIndhdGNoZXIudHNcIi8+XHJcblxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcblxyXG4gIHZhciBsb2cgPSBMb2dnZXIuZ2V0KFwia3ViZXJuZXRlcy10ZXJtLXdpbmRvd3NcIik7XHJcblxyXG4gIF9tb2R1bGUuY29uZmlnKChrdWJlcm5ldGVzQ29udGFpbmVyU29ja2V0UHJvdmlkZXIpID0+IHtcclxuICAgIGt1YmVybmV0ZXNDb250YWluZXJTb2NrZXRQcm92aWRlci5XZWJTb2NrZXRGYWN0b3J5ID0gXCJDdXN0b21XZWJTb2NrZXRzXCI7XHJcbiAgfSk7XHJcblxyXG4gIF9tb2R1bGUuZmFjdG9yeSgnQ3VzdG9tV2ViU29ja2V0cycsICh1c2VyRGV0YWlsczphbnkpID0+IHtcclxuICAgIHJldHVybiBmdW5jdGlvbiBDdXN0b21XZWJTb2NrZXQodXJsLCBwcm90b2NvbHMpIHtcclxuICAgICAgdmFyIHBhdGhzID0gdXJsLnNwbGl0KCc/Jyk7XHJcbiAgICAgIGlmICghXy5zdGFydHNXaXRoKHBhdGhzWzBdLCBtYXN0ZXJBcGlVcmwoKSkpIHtcclxuICAgICAgICBwYXRoc1swXSA9IFVybEhlbHBlcnMuam9pbihtYXN0ZXJBcGlVcmwoKSwgcGF0aHNbMF0pO1xyXG4gICAgICB9XHJcbiAgICAgIHVybCA9IEt1YmVybmV0ZXNBUEkud3NVcmwocGF0aHNbMF0pO1xyXG4gICAgICB1cmwuc2VhcmNoKHBhdGhzWzFdICsgJyZhY2Nlc3NfdG9rZW49JyArIHVzZXJEZXRhaWxzLnRva2VuKTtcclxuICAgICAgbG9nLmRlYnVnKFwiVXNpbmcgd3MgdXJsOiBcIiwgdXJsLnRvU3RyaW5nKCkpO1xyXG4gICAgICByZXR1cm4gbmV3IFdlYlNvY2tldCh1cmwudG9TdHJpbmcoKSwgcHJvdG9jb2xzKTtcclxuICAgIH07XHJcbiAgfSk7XHJcblxyXG4gIF9tb2R1bGUuc2VydmljZSgnVGVybWluYWxTZXJ2aWNlJywgKCRyb290U2NvcGUsICRkb2N1bWVudCwgJGNvbXBpbGUsICRpbnRlcnZhbCwgJHRlbXBsYXRlQ2FjaGUpID0+IHtcclxuICAgIHZhciBib2R5ID0gJGRvY3VtZW50LmZpbmQoJ2JvZHknKTtcclxuICAgIGZ1bmN0aW9uIHBvc2l0aW9uVGVybWluYWxzKHRlcm1pbmFscykge1xyXG4gICAgICB2YXIgdG90YWwgPSBfLmtleXModGVybWluYWxzKS5sZW5ndGg7XHJcbiAgICAgIHZhciBkaXN0ID0gKGJvZHkud2lkdGgoKSAtIDIyNSkgLyB0b3RhbDtcclxuICAgICAgdmFyIHBvc2l0aW9uID0gNTtcclxuICAgICAgYW5ndWxhci5mb3JFYWNoKHRlcm1pbmFscywgKHZhbHVlLCBrZXkpID0+IHtcclxuICAgICAgICBpZiAoIXZhbHVlLnNjb3BlLmRvY2tlZCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YWx1ZS5lbC5jc3MoJ2xlZnQnLCBwb3NpdGlvbiArICdweCcpO1xyXG4gICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gKyBkaXN0O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHZhciBkZWZhdWx0VGVtcGxhdGUgPSAkdGVtcGxhdGVDYWNoZS5nZXQoVXJsSGVscGVycy5qb2luKHRlbXBsYXRlUGF0aCwgJ3Rlcm1TaGVsbC5odG1sJykpO1xyXG4gICAgdmFyIHNlbGYgPSB7XHJcbiAgICAgIHBvc2l0aW9uVGVybWluYWxzOiAoKSA9PiB7XHJcbiAgICAgICAgcG9zaXRpb25UZXJtaW5hbHMoc2VsZi50ZXJtaW5hbHMpO1xyXG4gICAgICB9LFxyXG4gICAgICB0ZXJtaW5hbHM6IHt9LFxyXG4gICAgICBodHRwVGFzazoge30sXHJcbiAgICAgIG5ld1Rlcm1pbmFsOiAoJGludGVydmFsLCBwb2RMaW5rLCBjb250YWluZXJOYW1lLCBlbnRpdHksIHVybCAsdGVtcGxhdGUgPSBkZWZhdWx0VGVtcGxhdGUpID0+IHtcclxuICAgICAgICB2YXIgdGVybWluYWxJZCA9IFVybEhlbHBlcnMuam9pbihwb2RMaW5rLCBjb250YWluZXJOYW1lKTtcclxuICAgICAgICBpZiAodGVybWluYWxJZCBpbiBzZWxmLnRlcm1pbmFscykge1xyXG4gICAgICAgICAgbG9nLmRlYnVnKFwiQWxyZWFkeSBhIHRlcm1pbmFsIHdpdGggaWQ6IFwiLCB0ZXJtaW5hbElkKTtcclxuICAgICAgICAgIHNlbGYucmFpc2VUZXJtaW5hbCh0ZXJtaW5hbElkKTtcclxuICAgICAgICAgIHJldHVybiB0ZXJtaW5hbElkO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgc2NvcGUgPSAkcm9vdFNjb3BlLiRuZXcoKTtcclxuICAgICAgICBnZXRMb2dzKGVudGl0eSwgc2NvcGUsIHVybCk7XHJcbiAgICAgICAgc2NvcGUucG9kTGluayA9IHBvZExpbms7XHJcbiAgICAgICAgc2NvcGUuY29udGFpbmVyTmFtZSA9IGNvbnRhaW5lck5hbWU7XHJcbiAgICAgICAgc2NvcGUuaWQgPSB0ZXJtaW5hbElkO1xyXG4gICAgICAgIHNjb3BlLmRvY2tlZCA9IHRydWU7XHJcbiAgICAgICAgaWYodGVybWluYWxJZCBpbiBzZWxmLmh0dHBUYXNrKXtcclxuICAgICAgICAgICBzZWxmLnJhaXNlVGVybWluYWwodGVybWluYWxJZCk7XHJcbiAgICAgICAgICAgcmV0dXJuIHRlcm1pbmFsSWQ7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgc2VsZi5odHRwVGFza1t0ZXJtaW5hbElkXSA9ICRpbnRlcnZhbCgoKSA9PntcclxuICAgICAgICAgICAgICBnZXRMb2dzKGVudGl0eSwgc2NvcGUsIHVybCk7XHJcbiAgICAgICAgICAgfSwyMDAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGVsID0gJCgkY29tcGlsZSh0ZW1wbGF0ZSkoc2NvcGUpKTtcclxuICAgICAgICB2YXIgdGVybSA9IHtcclxuICAgICAgICAgIHNjb3BlOiBzY29wZSxcclxuICAgICAgICAgIGVsOiBlbFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYm9keS5hcHBlbmQoZWwpO1xyXG4gICAgICAgIHNlbGYudGVybWluYWxzW3Rlcm1pbmFsSWRdID0gdGVybTtcclxuICAgICAgICBwb3NpdGlvblRlcm1pbmFscyhzZWxmLnRlcm1pbmFscyk7XHJcbiAgICAgICAgcmV0dXJuIHRlcm1pbmFsSWQ7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNsb3NlVGVybWluYWw6IChpZCkgPT4ge1xyXG4gICAgICAgIHZhciB0ZXJtID0gc2VsZi50ZXJtaW5hbHNbaWRdO1xyXG4gICAgICAgIHZhciB0aW1lciA9IHNlbGYuaHR0cFRhc2tbaWRdO1xyXG4gICAgICAgIGlmKHRpbWVyKXtcclxuICAgICAgICAgICRpbnRlcnZhbC5jYW5jZWwodGltZXIpO1xyXG4gICAgICAgICAgZGVsZXRlIHNlbGYuaHR0cFRhc2tbaWRdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGVybSkge1xyXG4gICAgICAgICAgdGVybS5lbC5yZW1vdmUoKTtcclxuICAgICAgICAgIGRlbGV0ZSBzZWxmLnRlcm1pbmFsc1tpZF07XHJcbiAgICAgICAgICBwb3NpdGlvblRlcm1pbmFscyhzZWxmLnRlcm1pbmFscyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICByYWlzZVRlcm1pbmFsOiAoaWQpID0+IHtcclxuICAgICAgICBhbmd1bGFyLmZvckVhY2goc2VsZi50ZXJtaW5hbHMsICh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgICBpZiAoa2V5ID09PSBpZCkge1xyXG4gICAgICAgICAgICB2YWx1ZS5lbC5jc3MoJ3otaW5kZXgnLCAnNDAwMCcpO1xyXG4gICAgICAgICAgICB2YWx1ZS5lbC5maW5kKCcudGVybWluYWwnKS5mb2N1cygpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFsdWUuZWwuY3NzKCd6LWluZGV4JywgJzMwMDAnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBzZWxmO1xyXG4gIH0pO1xyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gYWRkV2luZG93QWN0aW9ucyhzY29wZSwgZWxlbWVudCwgVGVybWluYWxTZXJ2aWNlKSB7XHJcbiAgICB2YXIgbW92ZWQgPSBmYWxzZTtcclxuICAgIHZhciBsYXN0WCA9IDA7XHJcbiAgICB2YXIgbGFzdFkgPSAwO1xyXG4gICAgdmFyIGhlYWRlciA9IGVsZW1lbnQuZmluZCgnLnRlcm1pbmFsLXRpdGxlJyk7XHJcbiAgICB2YXIgYm9keSA9IGVsZW1lbnQuZmluZCgnLnRlcm1pbmFsLWJvZHknKTtcclxuICAgIGVsZW1lbnQub24oJyRkZXN0cm95JywgKCkgPT4ge1xyXG4gICAgICAkKCcjbWFpbicpLmNzcyh7IGRpc3BsYXk6ICdpbmhlcml0JyB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHZhciBIRUlHSFQgPSAzNDg7XHJcbiAgICB2YXIgV0lEVEggPSA2MDA7XHJcbiAgICB2YXIgVElUTEVfSEVJR0hUID0gMzU7XHJcbiAgICB2YXIgTkFWX09GRlNFVCA9IDQ2O1xyXG5cclxuICAgIGVsZW1lbnQuY3NzKHtcclxuICAgICAgaGVpZ2h0OiBIRUlHSFQsXHJcbiAgICAgIHdpZHRoOiBXSURUSFxyXG4gICAgfSk7XHJcbiAgICBoZWFkZXIuY3NzKHtcclxuICAgICAgaGVpZ2h0OiBUSVRMRV9IRUlHSFRcclxuICAgIH0pO1xyXG4gICAgYm9keS5jc3Moe1xyXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcclxuICAgICAgdG9wOiAzNSxcclxuICAgICAgbGVmdDogMCxcclxuICAgICAgcmlnaHQ6IDAsIFxyXG4gICAgICBib3R0b206IDBcclxuICAgIH0pO1xyXG4gICAgc2NvcGUuY2xvc2UgPSAoKSA9PiB7XHJcbiAgICAgIFRlcm1pbmFsU2VydmljZS5jbG9zZVRlcm1pbmFsKHNjb3BlLmlkKTtcclxuICAgIH07XHJcbiAgICBzY29wZS5yYWlzZSA9ICgpID0+IHtcclxuICAgICAgVGVybWluYWxTZXJ2aWNlLnJhaXNlVGVybWluYWwoc2NvcGUuaWQpO1xyXG4gICAgfTtcclxuICAgIHNjb3BlLiR3YXRjaCgnZG9ja2VkJywgKGRvY2tlZCkgPT4ge1xyXG4gICAgICBpZiAoZG9ja2VkKSB7XHJcbiAgICAgICAgZWxlbWVudC53aWR0aChXSURUSCk7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50Lmhhc0NsYXNzKCdtaW5pbWl6ZWQnKSkge1xyXG4gICAgICAgICAgZWxlbWVudC5oZWlnaHQoSEVJR0hUKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgc2NvcGUuc3RhcnRSZXNpemUgPSAoZSkgPT4ge1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGxvZy5kZWJ1ZyhcIlN0YXJ0IHJlc2l6ZVwiKTtcclxuICAgICAgc2NvcGUucmVzaXppbmcgPSB0cnVlO1xyXG4gICAgICBlbGVtZW50Lm9uKCdtb3VzZXVwJywgc2NvcGUuc3RvcFJlc2l6ZSk7XHJcbiAgICAgICQoZG9jdW1lbnQpLm9uKCdtb3VzZW1vdmUnLCBzY29wZS5kb1Jlc2l6ZSk7XHJcbiAgICAgICQoZG9jdW1lbnQpLm9uKCdtb3VzZWxlYXZlJywgc2NvcGUuc3RvcFJlc2l6ZSk7XHJcbiAgICB9O1xyXG4gICAgc2NvcGUuZG9SZXNpemUgPSAoZSkgPT4ge1xyXG4gICAgICBpZiAoc2NvcGUucmVzaXppbmcpIHtcclxuICAgICAgICBsb2cuZGVidWcoXCJSZXNpemluZywgZTogXCIsIGUpO1xyXG4gICAgICAgIGlmICghbW92ZWQpIHtcclxuICAgICAgICAgIGxhc3RYID0gZS5jbGllbnRYO1xyXG4gICAgICAgICAgbGFzdFkgPSBlLmNsaWVudFk7XHJcbiAgICAgICAgICBtb3ZlZCA9IHRydWU7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBoZWlnaHQgPSBlbGVtZW50LmhlaWdodCgpO1xyXG4gICAgICAgIHZhciB3aWR0aCA9IGVsZW1lbnQud2lkdGgoKTtcclxuICAgICAgICB2YXIgZGVsdGFYID0gZS5jbGllbnRYIC0gbGFzdFg7XHJcbiAgICAgICAgdmFyIGRlbHRhWSA9IGUuY2xpZW50WSAtIGxhc3RZO1xyXG4gICAgICAgIHZhciBuZXdIZWlnaHQgPSBoZWlnaHQgKyBkZWx0YVk7XHJcbiAgICAgICAgdmFyIG5ld1dpZHRoID0gd2lkdGggKyBkZWx0YVg7XHJcbiAgICAgICAgaWYgKG5ld0hlaWdodCA+IDM1ICYmIG5ld1dpZHRoID4gODApIHtcclxuICAgICAgICAgIGVsZW1lbnQuaGVpZ2h0KGhlaWdodCArIGRlbHRhWSk7XHJcbiAgICAgICAgICBlbGVtZW50LndpZHRoKHdpZHRoICsgZGVsdGFYKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGFzdFggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgbGFzdFkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICBzY29wZS5zdG9wUmVzaXplID0gKGUpID0+IHtcclxuICAgICAgc2NvcGUucmVzaXppbmcgPSBmYWxzZTtcclxuICAgICAgbW92ZWQgPSBmYWxzZTtcclxuICAgICAgZWxlbWVudC5vZmYoJ21vdXNldXAnLCBzY29wZS5zdG9wUmVzaXplKTtcclxuICAgICAgJChkb2N1bWVudCkub2ZmKCdtb3VzZW1vdmUnLCBzY29wZS5kb1Jlc2l6ZSk7XHJcbiAgICAgICQoZG9jdW1lbnQpLm9mZignbW91c2VsZWF2ZScsIHNjb3BlLnN0b3BSZXNpemUpO1xyXG4gICAgfVxyXG4gICAgc2NvcGUubW91c2VEb3duID0gKGUpID0+IHtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBpZiAoZWxlbWVudC5oYXNDbGFzcygnbWluaW1pemVkJykgfHwgZWxlbWVudC5oYXNDbGFzcygnbWF4aW1pemVkJykpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgc2NvcGUuZHJhZ2dpbmcgPSB0cnVlO1xyXG4gICAgICBlbGVtZW50Lm9uKCdtb3VzZXVwJywgc2NvcGUubW91c2VVcCk7XHJcbiAgICAgICQoZG9jdW1lbnQpLm9uKCdtb3VzZW1vdmUnLCBzY29wZS5tb3VzZU1vdmUpO1xyXG4gICAgICAkKGRvY3VtZW50KS5vbignbW91c2VsZWF2ZScsIHNjb3BlLm1vdXNlVXApO1xyXG4gICAgfTtcclxuICAgIHNjb3BlLm1vdXNlVXAgPSAoZSkgPT4ge1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHNjb3BlLmRyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgIG1vdmVkID0gZmFsc2U7XHJcbiAgICAgIHZhciBoZWlnaHQgPSBlbGVtZW50LmhlaWdodCgpO1xyXG4gICAgICB2YXIgb2Zmc2V0ID0gZWxlbWVudC5vZmZzZXQoKTtcclxuICAgICAgdmFyIHdpbkhlaWdodCA9ICQod2luZG93KS5oZWlnaHQoKTtcclxuICAgICAgaWYgKG9mZnNldC50b3AgPiAod2luSGVpZ2h0IC0gaGVpZ2h0IC0gMjApKSB7XHJcbiAgICAgICAgZWxlbWVudC5jc3MoeyB0b3A6IFwiaW5oZXJpdFwiLCBsZWZ0OiBcImluaGVyaXRcIiB9KTtcclxuICAgICAgICBzY29wZS5kb2NrZWQgPSB0cnVlO1xyXG4gICAgICAgIFRlcm1pbmFsU2VydmljZS5wb3NpdGlvblRlcm1pbmFscygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNjb3BlLmRvY2tlZCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsZW1lbnQub2ZmKCdtb3VzZXVwJywgc2NvcGUubW91c2VVcCk7XHJcbiAgICAgICQoZG9jdW1lbnQpLm9mZignbW91c2Vtb3ZlJywgc2NvcGUubW91c2VNb3ZlKTtcclxuICAgICAgJChkb2N1bWVudCkub2ZmKCdtb3VzZWxlYXZlJywgc2NvcGUubW91c2VVcCk7XHJcbiAgICB9O1xyXG4gICAgc2NvcGUubW91c2VNb3ZlID0gKGUpID0+IHtcclxuICAgICAgaWYgKHNjb3BlLmRyYWdnaW5nKSB7XHJcbiAgICAgICAgaWYgKCFtb3ZlZCkge1xyXG4gICAgICAgICAgbGFzdFggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgICBsYXN0WSA9IGUuY2xpZW50WTtcclxuICAgICAgICAgIG1vdmVkID0gdHJ1ZTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGRlbHRhWCA9IGUuY2xpZW50WCAtIGxhc3RYO1xyXG4gICAgICAgIHZhciBkZWx0YVkgPSBlLmNsaWVudFkgLSBsYXN0WTtcclxuICAgICAgICB2YXIgZWxPZmZzZXQgPSBlbGVtZW50Lm9mZnNldCgpO1xyXG4gICAgICAgIGVsZW1lbnQub2Zmc2V0KHsgdG9wOiBlbE9mZnNldC50b3AgKyBkZWx0YVksIGxlZnQ6IGVsT2Zmc2V0LmxlZnQgKyBkZWx0YVggfSk7XHJcbiAgICAgICAgbGFzdFggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgbGFzdFkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiByZXN0b3JlV2luZG93KHNjb3BlLCBlbGVtZW50KSB7XHJcbiAgICAgIGlmIChzY29wZS5vZmZzZXQpIHtcclxuICAgICAgICBlbGVtZW50Lm9mZnNldChzY29wZS5vZmZzZXQpO1xyXG4gICAgICAgIHNjb3BlLmRvY2tlZCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChzY29wZS5oZWlnaHQpIHtcclxuICAgICAgICBlbGVtZW50LmhlaWdodChzY29wZS5oZWlnaHQpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChzY29wZS53aWR0aCkge1xyXG4gICAgICAgIGVsZW1lbnQud2lkdGgoc2NvcGUud2lkdGgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc2F2ZVdpbmRvdyhzY29wZSwgZWxlbWVudCkge1xyXG4gICAgICBzY29wZS5vZmZzZXQgPSBlbGVtZW50Lm9mZnNldCgpO1xyXG4gICAgICBzY29wZS5oZWlnaHQgPSBlbGVtZW50LmhlaWdodCgpO1xyXG4gICAgICBzY29wZS53aWR0aCA9IGVsZW1lbnQud2lkdGgoKTtcclxuICAgIH1cclxuXHJcbiAgICBzY29wZS5tYXhpbWl6ZWQgPSAoKSA9PiB7XHJcbiAgICAgIHJldHVybiBlbGVtZW50Lmhhc0NsYXNzKCdtYXhpbWl6ZWQnKTtcclxuICAgIH1cclxuXHJcbiAgICBzY29wZS5tYXhpbWl6ZSA9ICgkZSkgPT4ge1xyXG4gICAgICAkZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBpZiAoZWxlbWVudC5oYXNDbGFzcygnbWluaW1pemVkJykpIHtcclxuICAgICAgICBzY29wZS5taW5pbWl6ZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChlbGVtZW50Lmhhc0NsYXNzKCdtYXhpbWl6ZWQnKSkge1xyXG4gICAgICAgIHJlc3RvcmVXaW5kb3coc2NvcGUsIGVsZW1lbnQpO1xyXG4gICAgICAgICQoJyNtYWluJykuY3NzKHsgZGlzcGxheTogJ2luaGVyaXQnIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNhdmVXaW5kb3coc2NvcGUsIGVsZW1lbnQpO1xyXG4gICAgICAgICQoJyNtYWluJykuY3NzKHsgZGlzcGxheTogJ25vbmUnIH0pO1xyXG4gICAgICAgIGVsZW1lbnQuY3NzKHsgXHJcbiAgICAgICAgICBoZWlnaHQ6ICdpbmhlcml0JywgXHJcbiAgICAgICAgICBib3R0b206IDAsIFxyXG4gICAgICAgICAgd2lkdGg6ICcxMDAlJywgXHJcbiAgICAgICAgICB0b3A6IE5BVl9PRkZTRVQsIFxyXG4gICAgICAgICAgbGVmdDogMCBcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBlbGVtZW50LnRvZ2dsZUNsYXNzKCdtYXhpbWl6ZWQnKTtcclxuICAgIH1cclxuICAgIHNjb3BlLm1pbmltaXplID0gKCRlKSA9PiB7XHJcbiAgICAgICRlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGlmIChlbGVtZW50Lmhhc0NsYXNzKCdtYXhpbWl6ZWQnKSkge1xyXG4gICAgICAgIHNjb3BlLm1heGltaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGVsZW1lbnQuaGFzQ2xhc3MoJ21pbmltaXplZCcpKSB7XHJcbiAgICAgICAgcmVzdG9yZVdpbmRvdyhzY29wZSwgZWxlbWVudCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2F2ZVdpbmRvdyhzY29wZSwgZWxlbWVudCk7XHJcbiAgICAgICAgc2NvcGUuZG9ja2VkID0gdHJ1ZTtcclxuICAgICAgICBlbGVtZW50LmNzcyh7IGhlaWdodDogVElUTEVfSEVJR0hULCB0b3A6IFwiaW5oZXJpdFwiLCBsZWZ0OiBcImluaGVyaXRcIiB9KTtcclxuICAgICAgICBUZXJtaW5hbFNlcnZpY2UucG9zaXRpb25UZXJtaW5hbHMoKTtcclxuICAgICAgfVxyXG4gICAgICBlbGVtZW50LnRvZ2dsZUNsYXNzKCdtaW5pbWl6ZWQnKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBfbW9kdWxlLmRpcmVjdGl2ZSgndGVybWluYWxXaW5kb3cnLCAoJGNvbXBpbGUsIFRlcm1pbmFsU2VydmljZSkgPT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVzdHJpY3Q6ICdBJyxcclxuICAgICAgc2NvcGU6IGZhbHNlLFxyXG4gICAgICBsaW5rOiAoc2NvcGU6YW55LCBlbGVtZW50LCBhdHRyKSA9PiB7XHJcbiAgICAgICAgYWRkV2luZG93QWN0aW9ucyhzY29wZSwgZWxlbWVudCwgVGVybWluYWxTZXJ2aWNlKTtcclxuICAgICAgICB2YXIgYm9keSA9IGVsZW1lbnQuZmluZCgnLnRlcm1pbmFsLWJvZHknKTtcclxuICAgICAgICBib2R5LmFwcGVuZCgkY29tcGlsZSgnPGt1YmVybmV0ZXMtY29udGFpbmVyLXRlcm1pbmFsIHBvZD1cInBvZExpbmtcIiBjb250YWluZXI9XCJjb250YWluZXJOYW1lXCIgY29tbWFuZD1cImJhc2hcIj48L2t1YmVybmV0ZXMtY29udGFpbmVyLXRlcm1pbmFsPicpKHNjb3BlKSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfSk7XHJcblxyXG4gIGZ1bmN0aW9uIGdldExvZ3MocmMsIHNjb3BlLCB1cmwpeyAgICBcclxuICAgICB2YXIgeGhyPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xyXG4gICAgICAgIGlmKHhoci5yZWFkeVN0YXRlID09IDQpe1xyXG4gICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09IDIwMCl7XHJcbiAgICAgICAgICAgICAgIGlmKHhoci5yZXNwb25zZVRleHQgIT1cIlwiICYmIHhoci5yZXNwb25zZVRleHQgIT1udWxsKXsgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgdmFyIGxvZ09iamVjdCA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7ICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICBzY29wZS5sb2dzID0gbG9nT2JqZWN0W2dldE5hbWUocmMpXTtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICBzY29wZS5sb2dzID0gXCLlvZPliY3msqHmnInlj6/ku6Xmn6XnnIvnmoTml6Xlv5fkv6Hmga9cIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgIC8vcmV0dXJuICh7dGV4dDogXCJhYWFhYWFcIn0pO1xyXG5cclxuICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgLy9sb2cgPSBcIuW9k+WJjeayoeacieWPr+S7peafpeeci+eahOaXpeW/l++8gVwiO1xyXG4gICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgfVxyXG4gICAgIHhoci5vcGVuKFwiUE9TVFwiLCB1cmwsIGZhbHNlKTtcclxuICAgICAvL3hoci5vcGVuKFwiUE9TVFwiLCBcIi9qYXZhL2NvbnNvbGUvYXBpL29yYWNsZS9leHRyYWN0L2xvZz9yY05hbWU9XCIgKyBnZXROYW1lKHJjKSxmYWxzZSk7XHJcbiAgICAgeGhyLnNlbmQobnVsbCk7XHJcbiAgfVxyXG59XHJcblxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJjb25maWdQbHVnaW4udHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJjb25maWdzRGF0YVNlcnZpY2UudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9jb25maWdzL3RzL2NvbmZpZ3NVdGlscy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2NvbmZpZ3MvdHMvY3VzdG9tQWxlcnQudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG5cclxubW9kdWxlIENvbmZpZ3N7XHJcblx0ZXhwb3J0IHZhciBUYWJsZUVkaXQgPSBjb250cm9sbGVyKCdUYWJsZUVkaXQnLCBbJyRzY29wZScsICgkc2NvcGUpID0+IHtcclxuXHRcdCRzY29wZS5lZGl0Um93ID0gKGVudGl0eSk9PntcdFx0XHRcclxuXHRcdFx0JHNjb3BlLiRlbWl0KCdlZGl0Um93JywgZW50aXR5KTtcclxuXHRcdH1cclxuXHJcblx0XHQkc2NvcGUuZGVsZXRlUm93T25lID17XHJcblx0XHRcdHNob3c6IGZhbHNlLFxyXG4gICAgICAgXHRcdGl0ZW06IG51bGwsXHJcbiAgICAgICBcdFx0b3BlbjogKGVudGl0eSkgPT4ge1xyXG4gXHRcdFx0XHR2YXIgZGVsZXRlUm93T25lID0gJHNjb3BlLmRlbGV0ZVJvd09uZTtcclxuICAgICAgICAgXHRcdGRlbGV0ZVJvd09uZS5zaG93ID0gdHJ1ZTtcclxuICAgICAgICAgXHRcdGRlbGV0ZVJvd09uZS5pdGVtID0gZW50aXR5O1xyXG4gICAgICAgXHRcdH0sXHJcbiAgICAgICBcdFx0b25PazogKCkgPT4ge1xyXG4gICAgICAgXHRcdFx0dmFyIGRlbGV0ZVJvd09uZSA9ICRzY29wZS5kZWxldGVSb3dPbmU7XHJcbiAgICAgICBcdFx0XHQkc2NvcGUuJGVtaXQoJ2RlbGV0ZVJvdycsIGRlbGV0ZVJvd09uZS5pdGVtKTtcclxuICAgICAgIFx0XHR9LFxyXG4gICAgICAgXHRcdG9uQ2FuY2VsOiAoKSA9PiB7XHJcbiAgICAgICBcdFx0XHR2YXIgZGVsZXRlUm93T25lID0gJHNjb3BlLmRlbGV0ZVJvd09uZTtcclxuICAgICAgICAgXHRcdGRlbGV0ZVJvd09uZS5zaG93ID0gZmFsc2U7XHJcbiAgICAgICAgIFx0XHRkZWxldGVSb3dPbmUuaXRlbSA9IG51bGw7XHJcbiAgICAgICBcdFx0fVxyXG5cdFx0fVxyXG5cdH1dKTtcclxuXHJcblx0ZXhwb3J0IHZhciBWb2x1bWVDb250cm9sbGVyID0gY29udHJvbGxlcignVm9sdW1lQ29udHJvbGxlcicsIFsnJHNjb3BlJywgJyRodHRwJywgKCRzY29wZSwgJGh0dHApID0+IHtcclxuXHRcdCRzY29wZS5zdWJtaXR0ZWQgPSBmYWxzZTtcclxuXHRcdCRzY29wZS5zdGF0dXMgPSAkc2NvcGUubmdEaWFsb2dEYXRhLnN0YXR1cztcdFxyXG5cclxuXHRcdCRzY29wZS4gY2FuY2VsID0gKCkgPT57XHJcblx0XHRcdCRzY29wZS5jbG9zZVRoaXNEaWFsb2coKTtcclxuXHRcdFx0JHNjb3BlLnN1Ym1pdHRlZCA9IGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdCRzY29wZS5kZWxldGVCcm9jayA9ICh2b2x1bWU6dm9sdW1lLCBicm9jaykgPT4ge1xyXG5cdFx0XHRpZih2b2x1bWUuYnJpY2subGVuZ3RoPjEpXHJcblx0XHRcdFx0ZGVsZXRlQnJvY2sodm9sdW1lLCBicm9jayk7XHJcblx0XHRcdGVsc2VcclxuXHRcdFx0XHQkc2NvcGUuc2hvd01lc3NhZ2UgPSB0cnVlO1x0ICAgIFx0XHRcdFx0XHJcblx0XHR9XHJcblxyXG5cdFx0JHNjb3BlLmFkZEJyb2NrID0gKHZvbHVtZSkgPT4ge1xyXG5cdFx0XHR2YXIgIGJsb2NrID0ge1xyXG5cdFx0XHRcdGlwOiBcIlwiLCAvL+WtmOWCqOWdl+eahOacuuWZqGlw5Zyw5Z2AXHJcblx0XHRcdFx0cGF0aDogXCJcIiwgLy/lrZjlgqjlnZfot6/lvoRcclxuXHRcdFx0XHRzdGF0dXM6IGZhbHNlLCAvL+WtmOWCqOWdl+eahOeKtuaAgVxyXG5cdFx0XHRcdGVkaXRhYmxlOnRydWVcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHR9O1xyXG5cdFx0XHRhZGRCcm9jayh2b2x1bWUsIGJsb2NrKTtcclxuXHRcdFx0JHNjb3BlLnNob3dNZXNzYWdlID0gZmFsc2U7XHRcclxuXHRcdH1cclxuXHJcblx0XHQkc2NvcGUuc3RvcFZvbHVtZSA9ICh2b2x1bWUpID0+e1xyXG5cdFx0XHR2b2x1bWUuc3RhdHVzID0gZmFsc2U7XHRcdFxyXG5cdFx0fVxyXG5cclxuXHRcdCRzY29wZS5zdGFydFZvbHVtZSA9ICh2b2x1bWUpID0+e1xyXG5cdFx0XHR2b2x1bWUuc3RhdHVzID0gdHJ1ZTtcclxuXHJcblx0XHR9XHJcblxyXG5cdFx0JHNjb3BlLm9uU3VibWl0ID0gKGVudGl0eSkgPT4ge1x0XHJcblx0XHRcdGNvbnNvbGUubG9nKGVudGl0eSk7XHRcdFx0XHRcclxuXHRcdFx0aWYoJHNjb3BlLnZvbHVtZUZvcm0uJHZhbGlkKXtcdFx0XHRcdFxyXG5cdFx0XHRcdCRzY29wZS4kZW1pdCgndXBkYXRlJywgZW50aXR5KTtcdFx0XHJcblx0XHRcdFx0JHNjb3BlLmNsb3NlVGhpc0RpYWxvZygpO1xyXG5cdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHQkc2NvcGUuc3VibWl0dGVkID0gdHJ1ZTtcclxuXHRcdFx0fVx0XHRcclxuXHRcdH1cclxuXHR9XSk7XHJcblxyXG5cdGV4cG9ydCB2YXIgU3lzdGVtSW5mb0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKCdTeXN0ZW1JbmZvQ29udHJvbGxlcicsIFsnJHNjb3BlJywgKCRzY29wZSkgPT57XHRcdFxyXG5cdH1dKTtcclxuXHJcblx0ZXhwb3J0IHZhciBTcWxWaWV3Q29udHJvbGxlciA9IGNvbnRyb2xsZXIoJ1NxbFZpZXdDb250cm9sbGVyJywgWyckc2NvcGUnLCAnJGh0dHAnLCAoJHNjb3BlLCAkaHR0cCkgPT57XHJcblx0ICAgICRzY29wZS50aXRsZSA9IHNoYXJlSW5pdCgkc2NvcGUubmdEaWFsb2dEYXRhKTtcdFxyXG5cdFx0JHNjb3BlLmNvbnRlbnQgPSBcIlwiO1xyXG5cdFx0Z2V0U3FsQ29udGVudCgpO1x0XHRcclxuXHRcdGZ1bmN0aW9uIGdldFNxbENvbnRlbnQoKXtcclxuXHRcdFx0JGh0dHAoe1xyXG5cdFx0XHRcdHVybDogXCIvamF2YS9jb25zb2xlL2FwaS9maWxlUGFja2FnZS9yZWFkU3FsRmlsZVwiLFxyXG5cdFx0XHRcdG1ldGhvZDonUE9TVCcsXHJcblx0XHRcdFx0cGFyYW1zOiB7dHlwZTogJHNjb3BlLm5nRGlhbG9nRGF0YS50eXBlfSxcdFx0XHRcdFxyXG5cdFx0XHRcdGRhdGE6IEpTT04uc3RyaW5naWZ5KCRzY29wZS5uZ0RpYWxvZ0RhdGEuaXRlbSlcclxuXHRcdFx0fSkuc3VjY2VzcyhmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcclxuXHRcdFx0XHQkc2NvcGUub2xkX2NvbnRlbnQgPSBkYXRhLmRhdGExO1xyXG5cdFx0XHRcdC8v5ZON5bqU5oiQ5YqfXHJcblx0XHRcdH0pLmVycm9yKGZ1bmN0aW9uKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpe1xyXG5cdFx0XHRcdC8v5aSE55CG5ZON5bqU5aSx6LSlXHJcblx0XHRcdFx0JHNjb3BlLm9sZF9jb250ZW50ID0gXCLojrflj5bohJrmnKzlhoXlrrnlpLHotKVcIlxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHQkc2NvcGUudXBMb2FkU3FsRmlsZSA9ICgpID0+IHtcdFx0XHRcclxuXHRcdFx0aWYodHlwZW9mIEZpbGVSZWFkZXIgPT0gJ3VuZGVmaW5lZCcpe1xyXG5cdFx0XHRcdHRocm93IFwi5rWP6KeI5Zmo5LiN5pSv5oyBRmlsZVJlYWRlcuivu+WPluaWh+S7tlwiO1xyXG5cdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRDb25maWdzLkZpbGVJbnB1dFBsdWdpbigoZmlsZSkgPT57XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0aWYodHlwZW9mIHR5cGVvZiBGaWxlUmVhZGVyID09ICd1bmRlZmluZWQnKVxyXG5cdFx0XHRcdFx0XHR0aHJvdyBcIua1j+iniOWZqOS4jeaUr+aMgUZpbGVSZWFkZXLor7vlj5bmlofku7ZcIjtcclxuXHRcdFx0XHRcdGVsc2V7XHJcblx0XHRcdFx0XHRcdHZhciBmciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblx0XHRcdFx0XHRcdGZyLm9ubG9hZGVuZCA9IChlKSA9PntcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHQkc2NvcGUubmV3X2NvbnRlbnQgPSBlLnRhcmdldFtcInJlc3VsdFwiXTtcclxuXHRcdFx0XHRcdFx0XHQkc2NvcGUuZW5hYmxlID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0ZnIub25sb2Fkc3RhcnQgPSAoKSA9PntcdFxyXG5cdFx0XHRcdFx0XHRcdCRzY29wZS4kYXBwbHkoKCkgPT57XHJcblx0XHRcdFx0XHRcdFx0XHQkc2NvcGUuY29udGVudCAgPSBcIuato+WcqOivu+WPluaVsOaNruivt+eojeetiS4uLlwiO1xyXG5cdFx0XHRcdFx0XHRcdH0pO1x0XHJcblx0XHRcdFx0XHRcdCRzY29wZS5jb250ZW50ICA9IFwi5q2j5Zyo6K+75Y+W5pWw5o2u6K+356iN562JLi4uXCI7XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0ZnIucmVhZEFzVGV4dChmaWxlWzBdLFwiR0JLXCIpOyBcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdCRzY29wZS5vbk9rID0gKCkgPT4ge1xyXG5cdFx0XHQkc2NvcGUuZW5hYmxlID0gZmFsc2U7XHJcblx0XHRcdGlmKG51bGwgPT0gJHNjb3BlLm5ld19jb250ZW50IHx8ICRzY29wZS5uZXdfY29udGVudCA9PSBcIlwiKXtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhcIuS4iuS8oOeahOWGheWuueS4jeiDveS4uuepulwiKTtcclxuXHRcdFx0XHQkc2NvcGUuY2xvc2VUaGlzRGlhbG9nKCk7XHJcblx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdCRzY29wZS4kZW1pdChcIm9uT2tcIix7XHJcblx0XHRcdFx0XHR1cmw6IFwiL2phdmEvY29uc29sZS9hcGkvZmlsZVBhY2thZ2UvaGFuZGxlU3FsRmlsZVwiLFxyXG5cdFx0XHRcdFx0aXRlbTogJHNjb3BlLm5nRGlhbG9nRGF0YS5pdGVtLFxyXG5cdFx0XHRcdFx0Y29udGVudDogJHNjb3BlLm5ld19jb250ZW50LFxyXG5cdFx0XHRcdFx0b3B0OiBcImFkZFwiLFxyXG5cdFx0XHRcdFx0dHlwZTogJHNjb3BlLm5nRGlhbG9nRGF0YS50eXBlXHJcblx0XHRcdFx0fSk7XHRcclxuXHRcdFx0XHQkc2NvcGUuY2xvc2VUaGlzRGlhbG9nKCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQkc2NvcGUuY2FuY2VsID0gKCkgPT4ge1xyXG5cdFx0XHQkc2NvcGUuZW5hYmxlID0gZmFsc2U7XHJcblx0XHRcdCRzY29wZS5jbG9zZVRoaXNEaWFsb2coKTtcclxuXHRcdH0gXHJcblx0fV0pO1xyXG5cclxuXHRleHBvcnQgdmFyIFNxbEFkZENvbnRyb2xsZXIgPSBjb250cm9sbGVyKCdTcWxBZGRDb250cm9sbGVyJywgWyckc2NvcGUnLCAnJGh0dHAnLCAoJHNjb3BlLCAkaHR0cCkgPT4ge1xyXG5cdFx0JHNjb3BlLmNvbnRlbnQgPSAgXCJcIjtcdFxyXG5cdFx0JHNjb3BlLnRpdGxlID0gc2hhcmVJbml0KCRzY29wZS5uZ0RpYWxvZ0RhdGEpO1x0XHRcclxuXHRcdCRzY29wZS5zcWxGaWxlVXBsb2FkID0gKCkgPT57XHJcblx0XHRcdENvbmZpZ3MuRmlsZUlucHV0UGx1Z2luKChmaWxlKSA9PntcdFx0XHRcdFxyXG5cdFx0XHRcdGlmKHR5cGVvZiBGaWxlUmVhZGVyID09ICd1bmRlZmluZWQnKVxyXG5cdFx0XHRcdFx0dGhyb3cgXCLmtY/op4jlmajkuI3mlK/mjIFGaWxlUmVhZGVy6K+75Y+W5paH5Lu2XCI7XHJcblx0XHRcdFx0ZWxzZXtcclxuXHRcdFx0XHRcdHZhciBmciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblx0XHRcdFx0XHRmci5vbmxvYWRlbmQgPSAoZSkgPT57XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdCRzY29wZS5jb250ZW50ID0gZS50YXJnZXRbXCJyZXN1bHRcIl07XHJcblx0XHRcdFx0XHRcdCRzY29wZS5lbmFibGUgPSB0cnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRmci5vbmxvYWRzdGFydCA9ICgpID0+e1x0XHJcblx0XHRcdFx0XHRcdCRzY29wZS4kYXBwbHkoKCkgPT57XHJcblx0XHRcdFx0XHRcdFx0JHNjb3BlLmNvbnRlbnQgID0gXCLmraPlnKjor7vlj5bmlbDmja7or7fnqI3nrYkuLi5cIjtcclxuXHRcdFx0XHRcdFx0fSk7XHRcclxuXHRcdFx0XHRcdFx0JHNjb3BlLmNvbnRlbnQgID0gXCLmraPlnKjor7vlj5bmlbDmja7or7fnqI3nrYkuLi5cIjtcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdGZyLnJlYWRBc1RleHQoZmlsZVswXSxcIkdCS1wiKTsgXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHQkc2NvcGUub25PayA9ICgpID0+IHtcclxuXHRcdFx0JHNjb3BlLmVuYWJsZSA9IGZhbHNlO1xyXG5cdFx0XHRpZihudWxsID09JHNjb3BlLmNvbnRlbnQgfHwgJHNjb3BlLmNvbnRlbnQgPT0gXCJcIil7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coXCLkuIrkvKDnmoTlhoXlrrnkuI3og73kuLrnqbpcIik7XHJcblx0XHRcdFx0JHNjb3BlLmNsb3NlVGhpc0RpYWxvZygpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2V7XHJcblx0XHRcdFx0JHNjb3BlLiRlbWl0KFwib25Pa1wiLHtcclxuXHRcdFx0XHRcdHVybDogXCIvamF2YS9jb25zb2xlL2FwaS9maWxlUGFja2FnZS9oYW5kbGVTcWxGaWxlXCIsXHJcblx0XHRcdFx0XHRpdGVtOiAkc2NvcGUubmdEaWFsb2dEYXRhLml0ZW0sXHJcblx0XHRcdFx0XHRjb250ZW50OiAkc2NvcGUuY29udGVudCxcclxuXHRcdFx0XHRcdG9wdDogXCJhZGRcIixcclxuXHRcdFx0XHRcdHR5cGU6ICRzY29wZS5uZ0RpYWxvZ0RhdGEudHlwZVxyXG5cdFx0XHRcdH0pO1x0XHJcblx0XHRcdFx0JHNjb3BlLmNsb3NlVGhpc0RpYWxvZygpO1x0XHRcdFxyXG5cdFx0XHR9XHRcdFx0XHRcclxuXHRcdH1cclxuXHJcblx0XHQkc2NvcGUuY2FuY2VsID0gKCkgPT4ge1xyXG5cdFx0XHQkc2NvcGUuZW5hYmxlID0gZmFsc2U7XHRcdFx0XHJcblx0XHRcdCRzY29wZS5jbG9zZVRoaXNEaWFsb2coKTtcclxuXHRcdH1cclxuXHRcdFx0XHJcblx0fV0pO1xyXG5cclxuXHRleHBvcnQgdmFyIHNxbFZlcmlmaWNhdGlvbkNvbnRyb2xsZXIgPSAgY29udHJvbGxlcignc3FsVmVyaWZpY2F0aW9uQ29udHJvbGxlcicsIFsnJHNjb3BlJywgJyRodHRwJywgKCRzY29wZSwgJGh0dHApID0+IHtcclxuXHRcdGdldFNxbENvbnRlbnQoKTtcclxuXHRcdCRzY29wZS50aXRsZSA9IHNoYXJlSW5pdCgkc2NvcGUubmdEaWFsb2dEYXRhKTtcdFxyXG5cdFx0JHNjb3BlLnJlcGxhY2UgPSAoKSA9PiB7XHJcblx0XHRcdCRzY29wZS4kZW1pdChcInJlcGxhY2VcIiwge1xyXG5cdFx0XHRcdHVybDogXCIvamF2YS9jb25zb2xlL2FwaS9maWxlUGFja2FnZS9oYW5kbGVTcWxGaWxlXCIsXHJcblx0XHRcdFx0aXRlbTogJHNjb3BlLm5nRGlhbG9nRGF0YS5pdGVtLFxyXG5cdFx0XHRcdGNvbnRlbnQ6ICRzY29wZS5jb250ZW50LFxyXG5cdFx0XHRcdG9wdDogXCJyZXBsYWNlXCIsXHJcblx0XHRcdFx0dHlwZTogJHNjb3BlLm5nRGlhbG9nRGF0YS50eXBlXHJcblx0XHRcdH0pO1xyXG5cdFx0XHQkc2NvcGUuY2xvc2VUaGlzRGlhbG9nKCk7XHJcblx0XHR9XHRcdFxyXG5cdFx0ZnVuY3Rpb24gZ2V0U3FsQ29udGVudCgpe1xyXG5cdFx0XHQkaHR0cCh7XHJcblx0XHRcdFx0dXJsOiBcIi9qYXZhL2NvbnNvbGUvYXBpL2ZpbGVQYWNrYWdlL3JlYWRTcWxGaWxlXCIsXHJcblx0XHRcdFx0bWV0aG9kOidQT1NUJyxcclxuXHRcdFx0XHRwYXJhbXM6IHt0eXBlOiAkc2NvcGUubmdEaWFsb2dEYXRhLnR5cGV9LFx0XHRcdFx0XHJcblx0XHRcdFx0ZGF0YTogSlNPTi5zdHJpbmdpZnkoJHNjb3BlLm5nRGlhbG9nRGF0YS5pdGVtKVxyXG5cdFx0XHR9KS5zdWNjZXNzKGZ1bmN0aW9uKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpe1xyXG5cdFx0XHRcdCRzY29wZS5zdGFuZGFyZCA9IGRhdGEuZGF0YTE7XHJcblx0XHRcdFx0JHNjb3BlLnVubm9ybWFsID0gZGF0YS5kYXRhMjtcclxuXHRcdFx0XHQvL+WTjeW6lOaIkOWKn1xyXG5cdFx0XHR9KS5lcnJvcihmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcclxuXHRcdFx0XHQvL+WkhOeQhuWTjeW6lOWksei0pVxyXG5cdFx0XHRcdCRzY29wZS51bm5vcm1hbCA9ICRzY29wZS5zdGFuZGFyZCA9IFwi6I635Y+W6ISa5pys5YaF5a655aSx6LSlXCI7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdCRzY29wZS5jYW5jZWwgPSAoKSA9PiB7XHJcblx0XHRcdC8vJHNjb3BlLmNsb3NlVGhpc0RpYWxvZygpO1xyXG5cdFx0XHQkc2NvcGUuJGVtaXQoXCJyZXBsYWNlXCIsIHtcclxuXHRcdFx0XHR1cmw6IFwiL2phdmEvY29uc29sZS9hcGkvZmlsZVBhY2thZ2UvaGFuZGxlU3FsRmlsZVwiLFxyXG5cdFx0XHRcdGl0ZW06ICRzY29wZS5uZ0RpYWxvZ0RhdGEuaXRlbSxcclxuXHRcdFx0XHRjb250ZW50OiAkc2NvcGUuY29udGVudCxcclxuXHRcdFx0XHRvcHQ6IFwiZGVsZXRlXCIsXHJcblx0XHRcdFx0dHlwZTogJHNjb3BlLm5nRGlhbG9nRGF0YS50eXBlXHJcblx0XHRcdH0pO1xyXG5cdFx0XHQkc2NvcGUuY2xvc2VUaGlzRGlhbG9nKCk7XHRcdFx0XHJcblx0XHR9XHJcblx0fV0pO1xyXG5cclxuXHRleHBvcnQgdmFyIHNxbE1vdmVDb250cm9sbGVyID0gY29udHJvbGxlcihcInNxbE1vdmVDb250cm9sbGVyXCIsIFsnJHNjb3BlJywgJyRodHRwJywgKCRzY29wZSwgJGh0dHApID0+IHtcclxuXHRcdGdldFNxbENvbnRlbnQoKTtcclxuXHRcdCRzY29wZS50aXRsZSA9IHNoYXJlSW5pdCgkc2NvcGUubmdEaWFsb2dEYXRhKTtcdFxyXG5cdFx0JHNjb3BlLm1vdmUgPSAoKSA9PiB7XHJcblx0XHRcdCRzY29wZS4kZW1pdChcInJlcGxhY2VcIiwge1xyXG5cdFx0XHRcdHVybDogXCIvamF2YS9jb25zb2xlL2FwaS9maWxlUGFja2FnZS9oYW5kbGVTcWxGaWxlXCIsXHJcblx0XHRcdFx0aXRlbTogJHNjb3BlLm5nRGlhbG9nRGF0YS5pdGVtLFxyXG5cdFx0XHRcdGNvbnRlbnQ6ICRzY29wZS5jb250ZW50LFxyXG5cdFx0XHRcdG9wdDogXCJyZXBsYWNlXCIsXHJcblx0XHRcdFx0dHlwZTogJHNjb3BlLm5nRGlhbG9nRGF0YS50eXBlXHJcblx0XHRcdH0pO1xyXG5cdFx0XHQkc2NvcGUuY2xvc2VUaGlzRGlhbG9nKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0JHNjb3BlLmNhbmNlbCA9ICgpID0+IHtcclxuXHRcdFx0JHNjb3BlLmNsb3NlVGhpc0RpYWxvZygpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZ1bmN0aW9uIGdldFNxbENvbnRlbnQoKXtcclxuXHRcdFx0JGh0dHAoe1xyXG5cdFx0XHRcdHVybDogXCIvamF2YS9jb25zb2xlL2FwaS9maWxlUGFja2FnZS9yZWFkU3FsRmlsZVwiLFxyXG5cdFx0XHRcdG1ldGhvZDonUE9TVCcsXHJcblx0XHRcdFx0cGFyYW1zOiB7dHlwZTogJHNjb3BlLm5nRGlhbG9nRGF0YS50eXBlfSxcdFx0XHRcdFxyXG5cdFx0XHRcdGRhdGE6IEpTT04uc3RyaW5naWZ5KCRzY29wZS5uZ0RpYWxvZ0RhdGEuaXRlbSlcclxuXHRcdFx0fSkuc3VjY2VzcyhmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcclxuXHRcdFx0XHQkc2NvcGUuY29udGVudCA9IGRhdGEuZGF0YTI7XHRcdFx0XHRcclxuXHRcdFx0XHQvL+WTjeW6lOaIkOWKn1xyXG5cdFx0XHR9KS5lcnJvcihmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcclxuXHRcdFx0XHQvL+WkhOeQhuWTjeW6lOWksei0pVxyXG5cdFx0XHRcdCRzY29wZS5jb250ZW50ID0gXCLojrflj5bohJrmnKzlhoXlrrnlpLHotKVcIjtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHRcdFx0XHRcclxuXHR9XSk7XHJcblxyXG5cdGV4cG9ydCB2YXIgc3lzVmVyVXBkYXRlQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoJ3N5c1ZlclVwZGF0ZUNvbnRyb2xsZXInLCBbJyRzY29wZScsICckaHR0cCcsICgkc2NvcGUsICRodHRwKSA9PiB7XHJcblx0XHQkc2NvcGUuY2hlY2tib3hJdG1lcyA9IFtdO1xyXG5cdFx0JHNjb3BlLmNsaWNrID0gKCRldmVudCwgbmFtZSkgPT4ge1x0XHRcdFxyXG5cdFx0XHRpZigkZXZlbnQudGFyZ2V0LmNoZWNrZWQpe1xyXG5cdFx0XHRcdGlmKCRzY29wZS5jaGVja2JveEl0bWVzLmluZGV4T2YobmFtZSkgPT0gLTEpXHJcblx0XHRcdFx0XHQkc2NvcGUuY2hlY2tib3hJdG1lcy5wdXNoKG5hbWUpXHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZXtcclxuXHRcdFx0XHRmb3IodmFyIGk9IDA7IGkgPCAkc2NvcGUuY2hlY2tib3hJdG1lcy5sZW5ndGg7IGkrKyl7XHJcblx0XHRcdFx0XHRpZigkc2NvcGUuY2hlY2tib3hJdG1lc1tpXSA9PT0gbmFtZSl7XHJcblx0XHRcdFx0XHRcdCRzY29wZS5jaGVja2JveEl0bWVzLnNwbGljZShpLDEpO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cdFx0XHRcclxuXHRcdH1cclxuXHJcblx0XHRnZXREYXRhKCk7XHJcblxyXG5cdFx0JHNjb3BlLnJlcGxhY2UgPSAoKSA9PiB7XHRcdFx0XHJcblx0XHRcdCRzY29wZS5yZXF1ZXN0Qm9keSA9ICRzY29wZS5kYXRhMTtcclxuXHRcdFx0YW5ndWxhci5mb3JFYWNoKCRzY29wZS5jaGVja2JveEl0bWVzLCAoaXRlbSkgPT4ge1xyXG5cdFx0XHRcdCRzY29wZS5yZXF1ZXN0Qm9keVtpdGVtXSA9ICRzY29wZS5kYXRhMltpdGVtXTtcclxuXHRcdFx0fSk7XHRcdFx0XHJcblx0XHRcdCRzY29wZS4kZW1pdChcInVwZGF0ZVJvd1wiLCAkc2NvcGUucmVxdWVzdEJvZHkpO1x0XHJcblx0XHRcdCRzY29wZS5jbG9zZVRoaXNEaWFsb2coKTtcclxuXHRcdH1cclxuXHJcblx0XHQkc2NvcGUuY2FuY2VsID0gKCkgPT4ge1xyXG5cdFx0XHQkc2NvcGUuY2xvc2VUaGlzRGlhbG9nKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0ZnVuY3Rpb24gZ2V0RGF0YSgpe1xyXG5cdFx0XHQkaHR0cCh7XHJcblx0XHRcdFx0dXJsOiBcIi9qYXZhL2NvbnNvbGUvYXBpL2NoZWNrb3V0L2ZpbmREZXRhaWxzXCIsXHJcblx0XHRcdFx0bWV0aG9kOidQT1NUJyxcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRkYXRhOiBKU09OLnN0cmluZ2lmeSgkc2NvcGUubmdEaWFsb2dEYXRhKVxyXG5cdFx0XHR9KS5zdWNjZXNzKGZ1bmN0aW9uKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpe1xyXG5cdFx0XHRcdCRzY29wZS5kYXRhMSA9IGRhdGEuZGF0YTE7XHJcblx0XHRcdFx0JHNjb3BlLmRhdGEyID0gZGF0YS5kYXRhMjtcclxuXHRcdFx0XHQvL+WTjeW6lOaIkOWKn1xyXG5cdFx0XHR9KS5lcnJvcihmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcclxuXHRcdFx0XHQvL+WkhOeQhuWTjeW6lOWksei0pVxyXG5cdFx0XHRcdCRzY29wZS5jb250ZW50ID0gXCLojrflj5bohJrmnKzlhoXlrrnlpLHotKVcIjtcclxuXHRcdFx0fSk7XHRcdFx0XHJcblx0XHR9XHJcblx0fV0pO1xyXG5cclxuXHRmdW5jdGlvbiBzaGFyZUluaXQobmdEaWFsb2dEYXRhKSB7XHJcblx0XHR2YXIgdGl0bGUgPSBcIlwiO1xyXG5cdFx0aWYobmdEaWFsb2dEYXRhLnR5cGUgIT0gJ3VuZGVmaW5lZCcpe1xyXG5cdFx0XHRzd2l0Y2ggKG5nRGlhbG9nRGF0YS50eXBlKSB7XHJcblx0XHRcdFx0Y2FzZSBcInVzZXJUYWJsZVN0YXR1c1wiIDpcclxuXHRcdFx0XHRcdHRpdGxlID0gXCJVc2VyVGFibGVzcGFjZVwiO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcImNrUGF5U3RhdHVzXCI6XHJcblx0XHRcdFx0XHR0aXRsZSA9IFwiQ2hlY2hvdXRfUGF5XCJcclxuXHRcdFx0XHQgXHRicmVhaztcdFxyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdGNhc2UgXCJja0luZGljYXRlU3RhdHVzXCI6XHJcblx0XHRcdFx0XHR0aXRsZSA9IFwiQ2hlY2hvdXRfSW5kaWNhdGVcIlxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiB0aXRsZTtcclxuXHR9XHJcbn0iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJjb25maWdQbHVnaW4udHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJjb25maWdzSGVscGVyLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiY29uZmlnc1V0aWxzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiY29uZmlnc0RhdGFTZXJ2aWNlLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy90ZXJtLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cInNoYXJlQ29udHJvbGxlci50c1wiLz5cclxubW9kdWxlIENvbmZpZ3N7XHJcblxyXG5cdGV4cG9ydCB2YXIgR2ZzQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoJ0dmc0NvbnRyb2xsZXInLCBbXCIkc2NvcGVcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgJ0NvbmZpZ3NNb2RlbCcsICduZ0RpYWxvZycsXHJcblx0XHQoJHNjb3BlLCAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbiwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIENvbmZpZ3NNb2RlbCwgbmdEaWFsb2cpID0+e1xyXG5cdFx0JHNjb3BlLm1vZGVsID0gQ29uZmlnc01vZGVsO1xyXG5cdFx0JHNjb3BlLnZvbHVtZXMgPSBDb25maWdzTW9kZWwuY2x1c3RlcjtcclxuXHQgICAgc2hhcmVJbml0KCRzY29wZSwgJGxvY2F0aW9uLCAkcm91dGVQYXJhbXMpO1x0ICAgIFx0ICAgXHJcblxyXG5cdCAgICAkc2NvcGUuY3JlYXRlR2ZzID0gKCkgPT4ge1xyXG5cdCAgICBcdG5nRGlhbG9nLm9wZW4oeyBcclxuXHQgICAgXHRcdHRlbXBsYXRlOiAnbmV3RGlhbG9nLmh0bWwnLFxyXG5cdCAgICBcdFx0Y29udHJvbGxlcjonQ29uZmlncy5Wb2x1bWVDb250cm9sbGVyJyxcclxuXHQgICAgXHRcdHdpZHRoOiAxMDA1LFxyXG5cdCAgICBcdFx0c2NvcGU6ICRzY29wZSwgXHJcblx0ICAgIFx0XHRjbG9zZUJ5RG9jdW1lbnQgOiBmYWxzZSxcclxuXHQgICAgXHRcdGRhdGE6IHtcclxuXHQgICAgXHRcdFx0bmFtZTogJycsXHJcblx0ICAgIFx0XHRcdHBhdGg6ICcnLFxyXG5cdCAgICBcdFx0XHRzdGF0dXM6IHRydWUsXHJcblx0ICAgIFx0XHRcdGJyaWNrOiBbe1xyXG5cdCAgICBcdFx0XHRcdGlwOiBbXCIwXCIsIFwiMFwiLCBcIjBcIiwgXCIwXCJdLFxyXG5cdCAgICBcdFx0XHRcdHBhdGg6ICcnLFxyXG5cdCAgICBcdFx0XHRcdHN0YXR1czogZmFsc2UsXHJcblx0ICAgIFx0XHRcdFx0ZWRpdGFibGU6IHRydWVcclxuXHQgICAgXHRcdFx0fV0sXHJcblx0ICAgIFx0XHRcdGVkaXRhYmxlOiB0cnVlLFxyXG5cdCAgICBcdFx0XHRob3Q6IHRydWVcclxuXHQgICAgXHRcdH0sXHQgICAgXHRcdFxyXG5cdCAgICBcdFx0Y2xhc3NOYW1lOiAnbmdkaWFsb2ctdGhlbWUtZGVmYXVsdCdcclxuXHQgICAgXHR9KTtcdCAgICBcdFx0XHJcblx0ICAgIH1cclxuXHJcblx0ICAgICRzY29wZS5lZGl0Um93ID0gKHZvbHVtZSkgPT4ge1x0ICAgIFx0XHJcblx0ICAgIFx0dmFyIGZWb2x1bWUgPSBmb3JtYXRWb2x1bWUodm9sdW1lKTtcdFx0ICAgIFx0XHRcclxuXHQgICAgXHRuZ0RpYWxvZy5vcGVuKHsgXHJcblx0ICAgIFx0XHR0ZW1wbGF0ZTogJ25ld0RpYWxvZy5odG1sJyxcclxuXHQgICAgXHRcdHdpZHRoOiAxMDA1LCBcclxuXHQgICAgXHRcdGRhdGE6IGZWb2x1bWUsXHRcclxuXHQgICAgXHRcdHNjb3BlOiAkc2NvcGUsICAgIFx0XHRcclxuXHQgICAgXHRcdGNsYXNzTmFtZTogJ25nZGlhbG9nLXRoZW1lLWRlZmF1bHQnLFx0ICAgIFx0XHRcclxuXHQgICAgXHRcdGNvbnRyb2xsZXI6ICdDb25maWdzLlZvbHVtZUNvbnRyb2xsZXInLFxyXG5cdCAgICBcdFx0Y2xvc2VCeURvY3VtZW50IDogZmFsc2VcclxuXHQgICAgXHR9KTtcclxuXHQgICAgfVxyXG5cclxuXHQgICAgJHNjb3BlLnNob3dEZWxldGVWb2x1bWUgPSB7XHJcblx0ICAgIFx0c2hvdzogZmFsc2UsXHJcbiAgICAgICBcdFx0aXRlbTogbnVsbCxcclxuICAgICAgIFx0XHRvcGVuOiAoZW50aXR5KSA9PiB7XHJcbiBcdFx0XHRcdHZhciBzaG93RGVsZXRlVm9sdW1lID0gJHNjb3BlLnNob3dEZWxldGVWb2x1bWU7XHJcbiAgICAgICAgIFx0XHRzaG93RGVsZXRlVm9sdW1lLnNob3cgPSB0cnVlO1xyXG4gICAgICAgICBcdFx0c2hvd0RlbGV0ZVZvbHVtZS5pdGVtID0gZW50aXR5O1xyXG4gICAgICAgXHRcdH0sXHJcbiAgICAgICBcdFx0b25PazogKCkgPT4ge1xyXG4gICAgICAgXHRcdFx0dmFyIHNob3dEZWxldGVWb2x1bWUgPSAkc2NvcGUuc2hvd0RlbGV0ZVZvbHVtZTtcclxuICAgICAgIFx0XHRcdCR0aW1lb3V0KCgpID0+e1xyXG4gICAgICAgXHRcdFx0XHRjb25zb2xlLmxvZyhzaG93RGVsZXRlVm9sdW1lLml0ZW0pO1xyXG4gICAgICAgXHRcdFx0XHR2YXIgc3Bpbm5lcjtcclxuXHRcdFx0XHRcdCQuYWpheCh7XHJcblx0XHRcdFx0XHRcdHR5cGU6IFwiUE9TVFwiLFxyXG5cdFx0XHRcdFx0XHR1cmw6IFwiL2phdmEvY29uc29sZS9hcGkvdm9sdW1lL2RlbGV0ZVwiLFxyXG5cdFx0XHRcdFx0XHR0aW1lb3V0OiA4MDAwLFxyXG5cdFx0XHRcdFx0XHRkYXRhVHlwZTogJ2pzb24nLFxyXG5cdFx0XHRcdFx0XHQvL2FzeW5jOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0ZGF0YTogSlNPTi5zdHJpbmdpZnkoc2hvd0RlbGV0ZVZvbHVtZS5pdGVtKSxcclxuXHRcdFx0XHRcdFx0Y29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiLFxyXG5cdFx0XHRcdFx0XHRiZWZvcmVTZW5kOiAoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0Q29uZmlncy5jcmVhdGVfbWFzaygpOyAgLy/liJvlu7rpga7nvanlsYJcclxuXHRcdFx0XHRcdFx0XHRLdWJlcm5ldGVzLmNyZWF0ZV9sb2NhZEVmZmVjdChcIuato+WcqOabtOaWsOS6keebmOS/oeaBryzor7fnqI3nrYnvvIFcIik7IC8v5Yib5bu65pWw5o2u5Yqg6L295pWI5p6c5bGCXHJcblx0XHQgICAgICAgICAgICAgIFx0XHR2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvYWRpbmcnKVxyXG5cdFx0ICAgICAgICAgICAgICBcdFx0c3Bpbm5lciA9IG5ldyBTcGlubmVyKEt1YmVybmV0ZXMubG9hZENvbmZpZ3MoKSkuc3Bpbih0YXJnZXQpOyAgICAgICBcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdGNvbXBsZXRlOiAoWE1MSHR0cFJlcXVlc3QsIHRleHRTdGF0dXMpID0+IHtcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdGlmKFhNTEh0dHBSZXF1ZXN0LnN0YXR1cyA9PSAyMDApe1x0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRcdEt1YmVybmV0ZXMuY3JlYXRlU3VjY2Vzc0luZm8oXCJzdWNjZXNzXCIsIFwi5pu05paw5oiQ5Yqf77yBXCIpO1x0XHRcdFx0XHQgIFx0XHJcblx0XHRcdFx0XHRcdFx0XHRzZXRUaW1lb3V0KFwiS3ViZXJuZXRlcy5yZW1vdmVNYXNrKClcIiwgMTUwMCk7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyRzY29wZS5tb2RlbC51cGRhdGVWb2x1bWVEYXRhKCk7XHJcblx0XHRcdFx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHRcdFx0XHRLdWJlcm5ldGVzLmNyZWF0ZVN1Y2Nlc3NJbmZvKFwiZXJyb3JcIiwgXCLmm7TmlrDlpLHotKXvvIFcIik7XHJcblx0XHQgICAgICAgICAgICAgICAgXHRcdHNldFRpbWVvdXQoXCJLdWJlcm5ldGVzLnJlbW92ZU1hc2soKVwiLCAxNTAwKTsgXHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRzdWNjZXNzOiAoZGF0YSkgPT4ge1x0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0aWYoZGF0YSl7XHJcblx0XHRcdFx0XHRcdFx0XHRDb25maWdzTW9kZWwuY2x1c3RlciA9IGRhdGE7XHJcblx0XHRcdFx0XHRcdFx0XHRDb25maWdzLmZvcm1hdFZvbHVtZXMoQ29uZmlnc01vZGVsLmNsdXN0ZXIpO1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0XHQkc2NvcGUuJGFwcGx5KCgpID0+e1x0XHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQkc2NvcGUudm9sdW1lcyA9IENvbmZpZ3NNb2RlbC5jbHVzdGVyO1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcdFx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0fVx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdCBcdFx0XHR9KTtcdFxyXG4gICAgICAgXHRcdFx0XHQvKiRodHRwKHtcclxuXHRcdFx0XHRcdFx0dXJsOiBcIi9qYXZhL2NvbnNvbGUvYXBpL3ZvbHVtZS9kZWxldGVcIixcclxuXHRcdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRcdGRhdGE6IHNob3dEZWxldGVWb2x1bWUuaXRlbVxyXG5cdFx0XHRcdFx0fSkuc3VjY2VzcyhmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcclxuXHRcdFx0XHRcdFx0LypcclxuXHRcdFx0XHRcdFx0XHTmm7TmlrB2b2x1bWXkv6Hmga9cclxuXHRcdFx0XHRcdFx0Ki9cclxuXHRcdFx0XHRcdFx0Lyokc2NvcGUubW9kZWwudXBkYXRlVm9sdW1lRGF0YSgpO1x0XHRcdFx0XHJcbiAgICAgICAgICAgIFx0XHR9KS5lcnJvcihmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcclxuICAgICAgICAgICAgXHRcdFx0Q29uZmlncy5jdXN0b21BbGVydChcIuaPkOekulwiLCBcIuWIoOmZpFZvbHVtZeWksei0pe+8gVwiLCAnJyxudWxsLCAwLCBcImVycm9yXCIpOyAgICAgICAgICAgIFxyXG4gICAgICAgICAgIFx0XHRcdCB9KTsqL1x0XHRcclxuICAgICAgIFx0XHRcdH0sIDEwMCk7XHJcbiAgICAgICBcdFx0fSxcclxuICAgICAgIFx0XHRvbkNhbmNlbDogKCkgPT57XHJcbiAgICAgICBcdFx0XHR2YXIgc2hvd0RlbGV0ZVZvbHVtZSA9ICRzY29wZS5zaG93RGVsZXRlVm9sdW1lO1xyXG4gICAgICAgICBcdFx0c2hvd0RlbGV0ZVZvbHVtZS5zaG93ID0gZmFsc2U7XHJcbiAgICAgICAgIFx0XHRzaG93RGVsZXRlVm9sdW1lLml0ZW0gPSBudWxsO1xyXG4gICAgICAgXHRcdH1cclxuXHQgICAgfVxyXG5cclxuXHQgICAgJHNjb3BlLiRvbigndXBkYXRlJywgKGV2ZW50LCBkYXRhKSA9PiB7XHQgICAgXHRcclxuXHQgICAgXHRhbmd1bGFyLmZvckVhY2goZGF0YVtcImJyaWNrXCJdLCAoYnJpY2spID0+e1xyXG5cdFx0XHRcdHZhciBpcCA9IFtdO1xyXG5cdFx0XHRcdGlmKGJyaWNrW1wiaXBcIl0gaW5zdGFuY2VvZiBPYmplY3Qpe1xyXG5cdFx0XHRcdFx0Zm9yKHZhciBrZXkgaW4gYnJpY2tbXCJpcFwiXSlcclxuXHRcdFx0XHRcdFx0aXAucHVzaChicmlja1tcImlwXCJdW2tleV0pO1xyXG5cdFx0XHRcdFx0YnJpY2tbXCJpcFwiXSA9IGlwLmpvaW4oXCJcXC5cIik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdGRhdGEuaG90ID0gZGF0YS5ob3QgPT0gdHJ1ZSA/IDAgOiAxO1x0XHJcblxyXG5cdFx0XHR2YXIgc3Bpbm5lcjtcclxuXHJcblx0XHRcdCQuYWpheCh7XHJcblx0XHRcdFx0dHlwZTogXCJQT1NUXCIsXHJcblx0XHRcdFx0dXJsOiBcIi9qYXZhL2NvbnNvbGUvYXBpL3ZvbHVtZS91cGRhdGVcIixcclxuXHRcdFx0XHR0aW1lb3V0OiAxNTAwMCxcclxuXHRcdFx0XHRkYXRhVHlwZTogJ2pzb24nLFxyXG5cdFx0XHRcdC8vYXN5bmM6IGZhbHNlLFxyXG5cdFx0XHRcdGRhdGE6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxyXG5cdFx0XHRcdGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLThcIixcclxuXHRcdFx0XHRiZWZvcmVTZW5kOiAoKSA9PiB7XHJcblx0XHRcdFx0XHRDb25maWdzLmNyZWF0ZV9tYXNrKCk7ICAvL+WIm+W7uumBrue9qeWxglxyXG5cdFx0XHRcdFx0S3ViZXJuZXRlcy5jcmVhdGVfbG9jYWRFZmZlY3QoXCLmraPlnKjmm7TmlrDkupHnm5jkv6Hmga8s6K+356iN562J77yBXCIpOyAvL+WIm+W7uuaVsOaNruWKoOi9veaViOaenOWxglxyXG4gICAgICAgICAgICAgIFx0XHR2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvYWRpbmcnKVxyXG4gICAgICAgICAgICAgIFx0XHRzcGlubmVyID0gbmV3IFNwaW5uZXIoS3ViZXJuZXRlcy5sb2FkQ29uZmlncygpKS5zcGluKHRhcmdldCk7ICAgICAgIFx0XHRcdFx0XHRcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGNvbXBsZXRlOiAoWE1MSHR0cFJlcXVlc3QsIHRleHRTdGF0dXMpID0+IHtcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRpZihYTUxIdHRwUmVxdWVzdC5zdGF0dXMgPT0gMjAwKXtcclxuXHRcdFx0XHRcdFx0S3ViZXJuZXRlcy5jcmVhdGVTdWNjZXNzSW5mbyhcInN1Y2Nlc3NcIiwgXCLmm7TmlrDmiJDlip/vvIFcIik7XHRcdFx0XHRcdCAgXHRcclxuXHRcdFx0XHRcdFx0c2V0VGltZW91dChcIkt1YmVybmV0ZXMucmVtb3ZlTWFzaygpXCIsIDE1MDApO1xyXG5cdFx0XHRcdFx0XHQvLyRzY29wZS5tb2RlbC51cGRhdGVWb2x1bWVEYXRhKCk7XHJcblx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0S3ViZXJuZXRlcy5jcmVhdGVTdWNjZXNzSW5mbyhcImVycm9yXCIsIFwi5pu05paw5aSx6LSl77yBXCIpO1xyXG4gICAgICAgICAgICAgICAgXHRcdHNldFRpbWVvdXQoXCJLdWJlcm5ldGVzLnJlbW92ZU1hc2soKVwiLCAxNTAwKTsgXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRzdWNjZXNzOiAoZGF0YSkgPT4ge1x0XHRcdFx0XHRcclxuXHRcdFx0XHRcdGlmKGRhdGEpe1xyXG5cdFx0XHRcdFx0XHRDb25maWdzTW9kZWwuY2x1c3RlciA9IGRhdGE7XHJcblx0XHRcdFx0XHRcdENvbmZpZ3MuZm9ybWF0Vm9sdW1lcyhDb25maWdzTW9kZWwuY2x1c3Rlcik7XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdCRzY29wZS4kYXBwbHkoKCkgPT57XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0JHNjb3BlLnZvbHVtZXMgPSBDb25maWdzTW9kZWwuY2x1c3RlcjtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdH0pO1x0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHR9XHRcdFx0XHRcdFxyXG5cdFx0XHRcdH1cclxuIFx0XHRcdH0pO1x0XHRcclxuXHRcdFx0XHJcblx0XHRcdC8qJGh0dHAoe1xyXG5cdFx0XHRcdHVybDogXCIvamF2YS9jb25zb2xlL2FwaS92b2x1bWUvdXBkYXRlXCIsXHJcblx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0ZGF0YTogZGF0YVxyXG5cdFx0XHR9KS5zdWNjZXNzKGZ1bmN0aW9uKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpe1xyXG5cdFx0XHRcdCRzY29wZS5tb2RlbC51cGRhdGVWb2x1bWVEYXRhKCk7XHRcdFx0XHRcclxuICAgICAgICAgICAgfSkuZXJyb3IoZnVuY3Rpb24oZGF0YSxoZWFkZXIsY29uZmlnLHN0YXR1cyl7XHRcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH0pOyovXHJcblx0ICAgIH0pO1xyXG5cdH1dKTtcclxufSIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImNvbmZpZ1BsdWdpbi50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImNvbmZpZ3NIZWxwZXIudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJjb25maWdzVXRpbHMudHNcIi8+XHJcblxyXG5tb2R1bGUgQ29uZmlnc3tcclxuXHJcblx0ZXhwb3J0IHZhciBLdWJlQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoJ0t1YmVDb250cm9sbGVyJywgW1wiJHNjb3BlXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsXCJDb25maWdzTW9kZWxcIixcclxuXHRcdCgkc2NvcGUsICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgQ29uZmlnc01vZGVsKSA9PiB7XHJcblx0XHQkc2NvcGUubW9kZWw9IENvbmZpZ3NNb2RlbDsgXHJcbiAgICAgICAgJHNjb3BlLm1vZGVsLnVwZGF0ZU9yYWNsZVBhcmFtKCk7XHJcbiAgICAgICAgJHNjb3BlLnN1Ym1pdHRlZCA9IGZhbHNlOyAgICAgICBcclxuXHJcblx0XHQkc2NvcGUudGFibGVDb25maWc9e1xyXG4gICAgICAgICAgICBkYXRhOiAnbW9kZWwub3JhY2xlUGFyYW0nLFxyXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcclxuICAgICAgICAgICAgY29sdW1uRGVmczogW3tcclxuICAgICAgICAgICAgICAgIGZpZWxkOiBcIm5hbWVcIixcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBcIuWQjeensFwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiBcImlwXCIsXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogXCJJUFwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgXHRmaWVsZDogXCJwb3J0XCIsXHJcbiAgICAgICAgICAgIFx0ZGlzcGxheU5hbWU6IFwi56uv5Y+j5Y+3XCJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICBcdGZpZWxkOiBcInVzZXJcIixcclxuICAgICAgICAgICAgXHRkaXNwbGF5TmFtZTogXCLnlKjmiLflkI1cIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFx0ZmllbGQ6IFwicGFzc3dvcmRcIixcclxuICAgICAgICAgICAgXHRkaXNwbGF5TmFtZTogXCLlr4bnoIFcIiAgICAgICAgICAgIFx0XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgXHRmaWVsZDogXCJkYXRhYmFzZU5hbWVcIixcclxuICAgICAgICAgICAgXHRkaXNwbGF5TmFtZTogXCLmnI3liqHlkI1cIiAgICAgICAgICAgICBcdFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogXCJ0YWJsZU5hbWVcIixcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBcIuihqOepuumXtOWQjVwiICBcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6IFwic3VmZml4XCIsXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogXCLooajlkI7nvIBcIiAgXHJcbiAgICAgICAgICAgIH0sIFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogXCJ0eXBlXCIsXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogXCLmoIflh4booajmsYfmgLvlupNcIixcclxuICAgICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwic3RyYW5kQ29sdW1uLmh0bWxcIikgIFxyXG4gICAgICAgICAgICB9LCAgICAgICAgICBcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICBcdGZpZWxkOiBcImVudGl0eVwiLFxyXG4gICAgICAgICAgICBcdGRpc3BsYXlOYW1lOiBcIuaTjeS9nFwiLCAgXHJcbiAgICAgICAgICAgIFx0Y2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJ0YWJsZUVkaXQuaHRtbFwiKSAgICAgICAgICAgXHRcclxuICAgICAgICAgICAgfV0sXHJcbiAgICAgICAgICAgIGVuYWJsZVJvd0NsaWNrU2VsZWN0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiBmYWxzZSxcclxuICAgICAgICAgICAgbXVsdGlTZWxlY3Q6IGZhbHNlLFxyXG4gICAgICAgICAgICBzb3J0SW5mbzoge1xyXG4gICAgICAgICAgICAgICAgc29ydEJ5OiBcIm5hbWVcIixcclxuICAgICAgICAgICAgICAgIGFzY2VuZGluZzogdHJ1ZVxyXG4gICAgICAgICAgICB9ICAgICAgIFxyXG4gICAgICAgIH0gICAgICAgXHJcblxyXG4gICAgICAgIHNoYXJlSW5pdCgkc2NvcGUsICRsb2NhdGlvbiwgJHJvdXRlUGFyYW1zKTtcclxuXHJcbiAgICAgICAgJHNjb3BlLmNyZWF0ZSA9ICgpID0+e1xyXG4gICAgICAgICAgICAkc2NvcGUuc3VibWl0dGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICRzY29wZS5hZGQ9IHRydWU7XHJcbiAgICAgICAgICAgICRzY29wZS5lZGl0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICRzY29wZS50YWJsZUZvcm0gPSB7fTsgIFxyXG4gICAgICAgICAgICAkc2NvcGUudGFibGVGb3JtW1wiaWRcIl09MDsgXHJcbiAgICAgICAgICAgICRzY29wZS50YWJsZUZvcm1bXCJ0eXBlXCJdPTA7ICAgICAgICAgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAkc2NvcGUuY2FuY2VsICA9ICgpID0+IHtcclxuICAgICAgICAgICAgJHNjb3BlLnRhYmxlRm9ybSA9bnVsbDtcclxuICAgICAgICAgICAgJHNjb3BlLmFkZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAkc2NvcGUuZWRpdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAkc2NvcGUuc3VibWl0dGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAkc2NvcGUub25TdWJtaXQgPSAob3JhY2xlKSA9PiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZigkc2NvcGUudmFsaWRGb3JtLiR2YWxpZCAmJiAkc2NvcGUudmFsaWRGb3JtLiRkaXJ0eSl7XHJcbiAgICAgICAgICAgICAgICAkc2NvcGUuZWRpdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgJHNjb3BlLmFkZCA9IGZhbHNlOyAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG9yYWNsZUluZm9PcGVyYXRlKCRodHRwLCBcIi9qYXZhL2NvbnNvbGUvYXBpL29yYWNsZVwiLCBPcGVyYXRlVHlwZS5VUERBVEUsIG9yYWNsZSwgKHJlc3VsdCwgc3RhdHVzKSA9PiB7ICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoc3RhdHVzPT09MjAwKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLnVwZGF0ZU9yYWNsZVBhcmFtKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFwi6LWE5rqQ6K+35rGC5aSx6LSlXCI7ICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTsgXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgJHNjb3BlLnN1Ym1pdHRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gICAgICAgICAgIFxyXG4gICAgICAgIH0gXHJcblxyXG4gICAgICAgICRzY29wZS4kb24oXCJlZGl0Um93XCIsIChldmVudCwgZGF0YSkgPT57IFxyXG4gICAgICAgICAgICAkc2NvcGUuc3VibWl0dGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICRzY29wZS50YWJsZUZvcm0gPSBkZWVwQ29weShkYXRhKTsgICAgICAgICAgXHJcbiAgICAgICAgICAgICRzY29wZS5lZGl0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgJHNjb3BlLmFkZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvLyRzY29wZS5yb3dJZCA9IGRhdGEuaWRcclxuICAgICAgICAgICAgLy9jcmVhdGVOZXdPYmVqY3QoJHNjb3BlLnRhYmxlQ29uZmlnLmNvbHVtbkRlZnMsIGRhdGEpOyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vcmVtb3ZlRWxlbWVudHNCeVZhbHVlKCRzY29wZS50YWJsZUZvcm0sIFt7a2V5OiBcIm5hbWVcIiwgdmFsdWU6IFwi5bqP5Y+3XCJ9LHtrZXk6IFwibmFtZVwiLCB2YWx1ZTogXCLov57mjqXnirbmgIFcIn0se2tleTogXCJuYW1lXCIsIHZhbHVlOiBcIuaTjeS9nFwifV0pOyAgICAgICAgICAgIFxyXG4gICAgICAgIH0pIDtcclxuXHJcbiAgICAgICAgJHNjb3BlLiRvbihcImRlbGV0ZVJvd1wiLCAoZXZlbnQsIGRhdGEpID0+eyAgIFxyXG4gICAgICAgICAgICBvcmFjbGVJbmZvT3BlcmF0ZSgkaHR0cCwgXCIvamF2YS9jb25zb2xlL2FwaS9vcmFjbGVcIiwgT3BlcmF0ZVR5cGUuREVMRVRFLCBkYXRhLCAocmVzdWx0LCBzdGF0dXMpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKHN0YXR1cz09PTIwMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLlh4blpIfmm7TmlrBcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLnVwZGF0ZU9yYWNsZVBhcmFtKCk7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBcIui1hOa6kOivt+axguWksei0pVwiOyAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvL3JlbW92ZUVsZW1lbnRCeVZhbHVlKCRzY29wZS5tb2RlbCwgZGF0YS5faWQsIFwiX2lkXCIpO1xyXG4gICAgICAgIH0pO1xyXG5cdH1dKTtcclxufSIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG5tb2R1bGUgRGV2ZWxvcGVyIHtcclxuXHJcbiAgZXhwb3J0IHZhciBfbW9kdWxlID0gYW5ndWxhci5tb2R1bGUocGx1Z2luTmFtZSwgWydoYXd0aW8tY29yZScsICdoYXd0aW8tdWknLCAndWkuY29kZW1pcnJvcicsICdudmQzJywgJ3RyZWVDb250cm9sJywgJ25nRGlhbG9nJ10pO1xyXG4gIGV4cG9ydCB2YXIgY29udHJvbGxlciA9IFBsdWdpbkhlbHBlcnMuY3JlYXRlQ29udHJvbGxlckZ1bmN0aW9uKF9tb2R1bGUsIHBsdWdpbk5hbWUpO1xyXG4gIGV4cG9ydCB2YXIgcm91dGUgPSBQbHVnaW5IZWxwZXJzLmNyZWF0ZVJvdXRpbmdGdW5jdGlvbih0ZW1wbGF0ZVBhdGgpO1xyXG5cclxuICBfbW9kdWxlLmNvbmZpZyhbJyRyb3V0ZVByb3ZpZGVyJywgKCRyb3V0ZVByb3ZpZGVyOm5nLnJvdXRlLklSb3V0ZVByb3ZpZGVyKSA9PiB7ICAgICAgIFxyXG4gICAgJHJvdXRlUHJvdmlkZXIud2hlbihjb250ZXh0LCByb3V0ZSgnd29ya3NwYWNlcy5odG1sJywgZmFsc2UpKVxyXG4gICAgICAgICAgICAgICAgICAud2hlbihcIi9kYXRhLW1hbmFnZXJcIiwgcm91dGUoJ3dvcmtzcGFjZXMuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAgICAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdPdmVydmlldy86dHlwZS9kYXRhLXR5cGUvYWxsJyksIHJvdXRlKCd3b3Jrc3BhY2VzLmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgICAgICAgICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnT3ZlcnZpZXcvOnR5cGUvZGF0YS10eXBlL2ZpbmFuY2lhbCcpLCByb3V0ZSgnd29ya3NwYWNlcy5odG1sJywgZmFsc2UpKVxyXG4gICAgICAgICAgICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ092ZXJ2aWV3Lzp0eXBlL2RhdGEtdHlwZS9zb2NpYWwtc2VjdXJpdHknKSwgcm91dGUoJ3dvcmtzcGFjZXMuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAgICAgICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnT3ZlcnZpZXcvdGFzaycpLCByb3V0ZSgnZmlsZU1pZ3JhdGlvblRhc2suaHRtbCcsIGZhbHNlKSkgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAub3RoZXJ3aXNlKGNvbnRleHQpOyAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgfV0pOyAgXHJcblxyXG4gIF9tb2R1bGUucnVuKFsndmlld1JlZ2lzdHJ5JywgJ1NlcnZpY2VSZWdpc3RyeScsICdIYXd0aW9OYXYnLCAnS3ViZXJuZXRlc01vZGVsJywgJyR0ZW1wbGF0ZUNhY2hlJywgKHZpZXdSZWdpc3RyeSwgU2VydmljZVJlZ2lzdHJ5LCBIYXd0aW9OYXYsIEt1YmVybmV0ZXNNb2RlbCwgJHRlbXBsYXRlQ2FjaGUpID0+IHtcclxuICAgIGxvZy5kZWJ1ZyhcIlJ1bm5pbmdcIik7ICAgXHJcbiAgICB2aWV3UmVnaXN0cnlbJ3dvcmtzcGFjZXMnXSA9IEt1YmVybmV0ZXMudGVtcGxhdGVQYXRoICsgJ2xheW91dEt1YmVybmV0ZXMuaHRtbCc7XHJcbiAgICB2aWV3UmVnaXN0cnlbJ25hbWVzcGFjZXMnXSA9IEt1YmVybmV0ZXMudGVtcGxhdGVQYXRoICsgJ2xheW91dEt1YmVybmV0ZXMuaHRtbCc7XHJcbiAgIC8vIHZpZXdSZWdpc3RyeVsnd29ya3NwYWNlcyddID0gQ29uZmlncy50ZW1wbGF0ZVBhdGggKyAnc2hhcmVMYXlvdXQuaHRtbCc7XHJcblxyXG4gICAgdmFyIGJ1aWxkZXIgPSBIYXd0aW9OYXYuYnVpbGRlcigpO1xyXG5cclxuICAgIHZhciBkbWFuYWdlclRhYiA9IGJ1aWxkZXIuaWQoJ2RtYW5hZ2VyJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgIC5yYW5rKDIwMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgIC5ocmVmKCgpID0+IGNvbnRleHQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAudGl0bGUoKCkgPT4gJ+aVsOaNrueuoeeQhicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAvLy5pc1ZhbGlkKCgpID0+ICFDb3JlLmlzUmVtb3RlQ29ubmVjdGlvbigpKSAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpO1xyXG5cclxuICAgIEhhd3Rpb05hdi5hZGQoZG1hbmFnZXJUYWIpO1xyXG4gIH1dKTtcclxuXHJcbiAgX21vZHVsZS5maWx0ZXIoJ2FzVHJ1c3RlZEh0bWwnLCBbJyRzY2UnLCBmdW5jdGlvbiAoJHNjZSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0ZXh0KSB7XHJcbiAgICAgIHJldHVybiAkc2NlLnRydXN0QXNIdG1sKHRleHQpO1xyXG4gICAgfTtcclxuICB9XSk7XHJcblxyXG4gIGhhd3Rpb1BsdWdpbkxvYWRlci5hZGRNb2R1bGUocGx1Z2luTmFtZSk7XHJcblxyXG4gIC8vIGZvciBzY3JvbGwtZ2x1ZSBkaXJlY3RpdmVcclxuICBoYXd0aW9QbHVnaW5Mb2FkZXIuYWRkTW9kdWxlKCdsdWVnZy5kaXJlY3RpdmVzJyk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyUGx1Z2luLnRzXCIvPlxyXG5tb2R1bGUgRGV2ZWxvcGVye1xyXG5cdGV4cG9ydCBjbGFzcyBPcHRpb25zUGFyYW1ze1xyXG5cdFx0cHVibGljIHBhZ2VyU2l6ZU9wdGlvbiA9IFsyMCw1MCwxMDBdO1xyXG5cdFx0cHVibGljIGRhdGFUeXBlID1udWxsO1xyXG5cdFx0cHVibGljIGN1cnJlbnRUYWJsZVNpemUgPSAyMDtcclxuXHRcdHB1YmxpYyBkYXRhQmF0Y2ggPSBudWxsO1xyXG5cdFx0cHVibGljIGxhYmVscyA9IHt9O1xyXG5cdFx0cHVibGljIGN1cnJlbnRQYWdlTnVtID0gMTtcdFx0XHJcblx0XHRwdWJsaWMgdG90YWxTaXplID0gbnVsbDtcclxuXHRcdHB1YmxpYyBwcmlvclRhYmxlU2l6ZSA9IDIwO1x0XHJcblx0XHRwdWJsaWMga2V5UXVlcnkgPSBudWxsO1xyXG5cdFx0cHVibGljIHZvbHVtZVR5cGUgPSAxO1xyXG5cdFx0cHVibGljIHRvdGxlUGFnZSA9IDE7XHRcclxuXHJcblx0XHRwdWJsaWMgY3JlYXRlUGFyYW1EYXRhKCl7XHJcblx0XHRcdHZhciBleHRlbmRWYWx1ZSA9W1wiY2l0eU5hbWVcIiwgXCJkaXN0cmljdE5hbWVcIiwgXCJkYXRhVmVyc2lvblwiLCBcInN5c3RlbU5hbWVcIiwgXCJkYXRhWWVhclwiXTtcclxuXHRcdFx0dmFyIHJlc3VsdD17XHJcblx0XHRcdFx0Y3VycmVudFBhZ2VOdW06IHRoaXMuY3VycmVudFBhZ2VOdW0sXHJcblx0XHRcdFx0ZGF0YVR5cGU6IHRoaXMuZGF0YVR5cGUsXHJcblx0XHRcdFx0c3VibWl0dGVkQmF0Y2g6IHRoaXMuZGF0YUJhdGNoLFxyXG5cdFx0XHRcdGxpbWl0OiB0aGlzLmN1cnJlbnRUYWJsZVNpemUsXHJcblx0XHRcdFx0cHJpb3JUYWJsZVNpemU6IHRoaXMucHJpb3JUYWJsZVNpemUsXHJcblx0XHRcdFx0a2V5UXVlcnk6IHRoaXMua2V5UXVlcnksXHJcblx0XHRcdFx0dm9sdW1lVHlwZTogdGhpcy52b2x1bWVUeXBlXHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGFuZ3VsYXIuZm9yRWFjaCh0aGlzLmxhYmVscywodmFsdWUsIGtleSkgPT57XHJcblx0XHRcdFx0aWYoZXh0ZW5kVmFsdWUuaW5kZXhPZihrZXkpKVxyXG5cdFx0XHRcdFx0cmVzdWx0W2tleV0gPSB2YWx1ZTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0fVxyXG5cclxuXHRcdHB1YmxpYyBnZXRQYWdlU2l6ZU51bSgpe1xyXG5cdFx0ICAgIHZhciBudW0gPSBNYXRoLmNlaWwodGhpcy50b3RhbFNpemUvdGhpcy5jdXJyZW50VGFibGVTaXplKTtcclxuXHRcdCAgICBjb25zb2xlLmxvZyh0aGlzLnRvdGFsU2l6ZSk7XHJcblx0XHQgICAgaWYobnVtIDwgdGhpcy5jdXJyZW50UGFnZU51bSlcdFx0ICAgIFx0XHJcblx0XHRcdCAgbnVtID0gIHRoaXMuY3VycmVudFBhZ2VOdW07XHRcdFx0XHJcblx0XHRcdHJldHVybiBudW07XHJcblx0XHR9XHJcblx0fVxyXG5cdGZ1bmN0aW9uIGNyZWF0ZUxhYmVsKGNpdHlOYW1lOnN0cmluZywgZGlzdHJpY3ROYW1lOnN0cmluZywgc3lzdGVtTmFtZTpzdHJpbmcsIHZlcnNpb246c3RyaW5nLCB5ZWFyOnN0cmluZyl7XHJcblx0XHRyZXR1cm57XHJcblx0XHRcdGNpdHlOYW1lOiBjaXR5TmFtZSxcclxuXHRcdFx0ZGlzdHJpY3ROYW1lOiBkaXN0cmljdE5hbWUsXHJcblx0XHRcdHN5c3RlbU5hbWU6IHN5c3RlbU5hbWUsXHJcblx0XHRcdHZlcnNpb246IFwi54mI5pysXCIrdmVyc2lvbixcclxuXHRcdFx0eWVhcjogeWVhclxyXG5cdFx0fVxyXG5cdH1cclxuXHRmdW5jdGlvbiBjcmVhdGVBbGlhcyhjaXR5TmFtZTpzdHJpbmcsICBkaXN0cmljdE5hbWU6c3RyaW5nLCBzeXN0ZW1OYW1lOnN0cmluZywgdmVyc2lvbjpzdHJpbmcsIHllYXI6c3RyaW5nKXtcclxuXHRcdHJldHVybiAgY2l0eU5hbWUgKyBcIl9cIiArIGRpc3RyaWN0TmFtZSArIFwiX1wiICsgc3lzdGVtTmFtZSArIFwiX1wiICsgeWVhciArIFwiX+eJiOacrFwiICsgdmVyc2lvbjtcclxuXHR9XHJcblx0ZnVuY3Rpb24gY3JlYXRlS2V5KHJlZ2lvbmFsaXNtQ29kZSwgc3lzdGVtSWQsIHZlcnNpb24pe1xyXG5cdFx0cmV0dXJuIHJlZ2lvbmFsaXNtQ29kZSArIFwiLVwiICsgc3lzdGVtSWQgKyBcIi1cIiArIHZlcnNpb247XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBwb3B1bGF0ZUtleShpdGVtKXtcclxuXHRcdHZhciByZXN1bHQgPSBpdGVtO1xyXG5cdFx0cmVzdWx0W1wiX2tleVwiXSA9IGNyZWF0ZUtleShpdGVtLnJlZ2lvbmFsaXNtQ29kZSwgIGl0ZW0uc3lzdGVtQ29kZSwgaXRlbS5kYXRhVmVyc2lvbik7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gY3JlYXRlSXRlbXNBbGlhcyhpdGVtczogQXJyYXk8YW55Pil7XHJcblx0XHR2YXIgcmVzdWx0ID0gW107XHJcblx0XHRhbmd1bGFyLmZvckVhY2goaXRlbXMsIChpdGVtKSA9PiB7XHJcblx0XHRcdGl0ZW0uYWxpYXMgPSBjcmVhdGVBbGlhcyhpdGVtLmNpdHlOYW1lLCBpdGVtLmRpc3RyaWN0TmFtZSwgaXRlbS5zeXN0ZW1OYW1lLCBpdGVtLmRhdGFWZXJzaW9uLCBpdGVtLnllYXIpO1xyXG5cdFx0XHRyZXN1bHQucHVzaChpdGVtKTtcclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHBvcHVsYXRlTGFiZWwoaXRlbSl7XHJcblx0XHR2YXIgcmVzdWx0ID0gaXRlbVxyXG5cdFx0cmVzdWx0W1wibGFiZWxzXCJdID0gY3JlYXRlTGFiZWwoaXRlbS5jaXR5TmFtZSwgaXRlbS5kaXN0cmljdE5hbWUsIGl0ZW0uc3lzdGVtTmFtZSwgaXRlbS5kYXRhVmVyc2lvbiwgaXRlbS55ZWFyKTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBwb3B1bGF0ZUxhYmVscyhpdGVtczpBcnJheTxhbnk+KXtcclxuXHRcdHZhciByZXN1bHQgPSBbXTtcclxuXHRcdGFuZ3VsYXIuZm9yRWFjaChpdGVtcywgKGl0ZW0pID0+IHtcdFx0XHRcclxuXHRcdFx0cmVzdWx0LnB1c2gocG9wdWxhdGVMYWJlbChpdGVtKSk7XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBwb3B1bGF0ZUtleXMoaXRlbXM6QXJyYXk8YW55Pil7XHJcblx0XHR2YXIgcmVzdWx0ID1bXTtcclxuXHRcdGFuZ3VsYXIuZm9yRWFjaChpdGVtcywgKGl0ZW0pID0+e1xyXG5cdFx0XHRyZXN1bHQucHVzaChwb3B1bGF0ZUtleShpdGVtKSk7XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBjcmVhdGVOYW1lKGNpdHlOYW1lLCBkaXN0cmljdE5hbWUpe1xyXG5cdFx0cmV0dXJuIGNpdHlOYW1lICsgXCItXCIgKyBkaXN0cmljdE5hbWU7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBwb3B1bGF0ZU5hbWUoaXRlbSl7XHJcblx0XHR2YXIgcmVzdWx0ID0gaXRlbTtcclxuXHRcdHJlc3VsdFtcIm5hbWVcIl0gPSBjcmVhdGVOYW1lKGl0ZW0uY2l0eU5hbWUsIGl0ZW0uZGlzdHJpY3ROYW1lKTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBwb3B1bGF0ZU5hbWVzKGl0ZW1zOkFycmF5PGFueT4pe1xyXG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xyXG5cdFx0YW5ndWxhci5mb3JFYWNoKGl0ZW1zLCAoaXRlbSkgPT57XHRcdFx0XHJcblx0XHRcdHJlc3VsdC5wdXNoKHBvcHVsYXRlTmFtZShpdGVtKSk7XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBjcmVhdGVQYXJhbURhdGEob3B0aW9uczogT3B0aW9uc1BhcmFtcyl7XHJcblx0XHRyZXR1cm4gb3B0aW9ucy5jcmVhdGVQYXJhbURhdGEoKTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGZvcm1hdFRhc2soaXRlbXM6QXJyYXk8YW55Pil7XHJcblx0XHR2YXIgcmVzdWx0ID0gW107XHJcblx0XHRhbmd1bGFyLmZvckVhY2goaXRlbXMsIChpdGVtKSA9PiB7XHJcblx0XHRcdHZhciB0bXBfYmF0Y2g9XCJcIjtcclxuXHRcdFx0aWYoaXRlbS5zdWJtaXR0ZWRCYXRjaC5pbmRleE9mKFwi5om55qyhXCIpPT0tMSl7XHJcblx0XHRcdFx0dG1wX2JhdGNoPVwi5om55qyhXCIraXRlbS5zdWJtaXR0ZWRCYXRjaDtcclxuXHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0dG1wX2JhdGNoPWl0ZW0uc3VibWl0dGVkQmF0Y2g7XHJcblx0XHRcdH1cclxuXHRcdFx0aXRlbVtcIl9rZXlcIl0gPSBpdGVtLnJlZ2lvbmFsaXNtQ29kZSArIFwiLVwiICsgaXRlbS5zeXN0ZW1Db2RlICsgXCItXCIgKyBpdGVtLmRhdGFWZXJzaW9uO1xyXG5cdFx0XHRpdGVtW1wibmFtZVwiXSA9IGl0ZW0uY2l0eU5hbWUrIFwiLVwiICsgaXRlbS5kaXN0cmljdE5hbWU7XHJcblx0XHRcdGl0ZW1bXCJzdGF0dXNcIl0gPSBpdGVtLmNvbXBsZXRlU3RhdHVzO1xyXG5cdFx0XHRpdGVtW1wiZnJvbVwiXSA9IGl0ZW0uZGF0YVBhdGg7XHJcblx0XHRcdGl0ZW1bXCJwcm9jZXNzXCJdID0gaXRlbS5yYXRlO1xyXG5cdFx0XHRpdGVtW1widG9cIl0gID0gaXRlbS5kc3RQYXRoO1xyXG5cdFx0XHRpdGVtW1wibGFiZWxzXCJdID17XHJcblx0XHRcdFx0ZGF0YVR5cGU6IGl0ZW0uZGF0YVR5cGUsXHJcblx0XHRcdFx0YmF0Y2g6IHRtcF9iYXRjaCxcdFx0XHRcdFx0XHJcblx0XHRcdFx0ZGF0YVZlcnNpb246IFwi54mI5pysXCIraXRlbS5kYXRhVmVyc2lvbixcclxuXHRcdFx0XHRkYXRhWWVhcjogaXRlbS55ZWFyXHJcblx0XHRcdH1cclxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbSk7XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRleHBvcnQgY2xhc3MgRGF0YU1vZGVsU2VydmljZXtcclxuXHRcdHB1YmxpYyBkYXRhOkFycmF5PGFueT4gPSBbXTtcclxuXHRcdHB1YmxpYyBwYXJhbU9wdGlvbnM6IE9wdGlvbnNQYXJhbXMgPSBuZXcgT3B0aW9uc1BhcmFtcygpO1xyXG5cdFx0cHVibGljIHRyYW5zZmVyVGFza3M6IEFycmF5PGFueT4gPSBbXTtcclxuXHJcblx0XHRjb25zdHJ1Y3Rvcigpe1x0XHRcdFx0XHJcblx0XHRcdHRoaXMudXBkYXRlTW9kZWwoKTtcdFx0XHRcdFx0XHRcdFxyXG5cdFx0fVxyXG5cclxuXHRcdC8v5pu05paw5pWw5o2u5qih5Z6LXHJcblx0XHRwcm90ZWN0ZWQgZ2V0RGF0YU1vZGVsKHBhcmFtT3B0aW9ucyl7XHRcdFx0XHJcblx0XHRcdHZhciByZXN1bHQgO1xyXG5cdFx0XHQkLmFqYXgoeyBcclxuXHRcdFx0XHRhc3luYzogZmFsc2UsIFxyXG5cdFx0XHRcdHR5cGUgOiBcIlBPU1RcIixcclxuXHRcdFx0XHR1cmwgOiBcIi9qYXZhL2NvbnNvbGUvYXBpL2RhdGEuanNvblwiLCBcclxuXHRcdFx0XHRkYXRhVHlwZSA6ICdqc29uJyxcclxuXHRcdFx0XHRkYXRhOiBjcmVhdGVQYXJhbURhdGEocGFyYW1PcHRpb25zKSxcdFx0XHJcblx0XHRcdFx0c3VjY2VzcyA6IGZ1bmN0aW9uKGRhdGEpIHtcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdHJlc3VsdCA9IGRhdGEuZGF0YTtcclxuXHRcdFx0XHRcdHBhcmFtT3B0aW9ucy50b3RhbFNpemUgPSBkYXRhLmxlbmd0aDtcdFxyXG5cdFx0XHRcdFx0cGFyYW1PcHRpb25zLnRvdGxlUGFnZSA9IGRhdGEucGFnZS50b3RsZVBhZ2U7XHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdH0gXHJcblx0XHRcdH0pO1x0XHRcdFxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1x0XHJcblx0XHR9XHJcblxyXG5cdFx0cHVibGljIGluaXRQYXJhbU9wdGlvbnMoKXtcclxuXHRcdFx0dGhpcy5wYXJhbU9wdGlvbnMgPSBuZXcgT3B0aW9uc1BhcmFtcygpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHB1YmxpYyB1cGRhdGVNb2RlbCgpe1xyXG5cdFx0XHR0aGlzLmRhdGEgPSB0aGlzLmdldERhdGFNb2RlbCh0aGlzLnBhcmFtT3B0aW9ucyk7XHJcblx0XHRcdHRoaXMubWF5YmVGb3JtYXQoKTtcclxuXHRcdH1cclxuXHJcblx0XHQvL+agvOW8j+aVsOaNruaooeWei+S4reeahOavj+S4quWNleadoeiusOW9lVxyXG5cdFx0cHVibGljIG1heWJlRm9ybWF0KCl7XHJcblx0XHRcdHRoaXMuZGF0YSA9IHBvcHVsYXRlS2V5cyh0aGlzLmRhdGEpO1xyXG5cdFx0XHR0aGlzLmRhdGEgPSBwb3B1bGF0ZU5hbWVzKHRoaXMuZGF0YSk7XHJcblx0XHRcdHRoaXMuZGF0YSAgPSBwb3B1bGF0ZUxhYmVscyh0aGlzLmRhdGEpO1xyXG5cdFx0XHR0aGlzLmRhdGEgPSBjcmVhdGVJdGVtc0FsaWFzKHRoaXMuZGF0YSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly/mm7TmlrDnlKjmiLfpgInmi6nlj4LmlbBcclxuXHRcdHB1YmxpYyB1cGRhdGVQYXJhbU9wdGlvbihvcHRpb246c3RyaW5nLCB2YWx1ZTphbnkpe1xyXG5cdFx0XHR0aGlzLnBhcmFtT3B0aW9uc1tvcHRpb25dID0gdmFsdWU7XHJcblx0XHR9XHRcclxuXHJcblx0XHQvL+agueaNrmtleeiOt+WPlueUqOaIt+mAieaLqeWPguaVsFxyXG5cdFx0cHVibGljIGdldFBhcmFtT3B0aW9uKGtleTpzdHJpbmcpe1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJhbU9wdGlvbnNba2V5XTtcclxuXHRcdH1cclxuXHJcblx0XHRwdWJsaWMgc3RhcnRJbnRlcnZhbFRhc2soJGludGVydmFsLCAkaHR0cCl7XHJcblx0XHRcdHZhciByZXN1bHQ7XHJcblx0XHRcdHZhciB0aW1lciA9ICRpbnRlcnZhbCgoKSA9PiB7XHQgXHRcdFx0XHJcblx0XHQgXHRcdCQuYWpheCh7XHJcblx0XHRcdFx0XHRhc3luYzogZmFsc2UsXHJcblx0XHRcdFx0XHR0eXBlIDogXCJQT1NUXCIsXHJcblx0XHRcdFx0XHR1cmwgOiBcIi9qYXZhL2NvbnNvbGUvYXBpL3Rhc2svdHJhbnNmZXIvbGlzdFwiLFxyXG5cdFx0XHRcdFx0c3VjY2VzcyA6IGZ1bmN0aW9uKGRhdGEpIHsgXHJcblx0XHRcdFx0XHQgICAgaWYoZGF0YSl7XHRcdFx0XHJcblx0XHRcdFx0XHRcdCAgICByZXN1bHQgPSBkYXRhO1x0XHRcdFx0XHRcdCAgIFx0XHRcdFx0ICAgXHJcblx0XHRcdFx0XHRcdH1cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdH0gXHRcclxuXHRcdFx0XHR9KTtcdFx0XHRcdFxyXG5cdFx0XHRcdHRoaXMudHJhbnNmZXJUYXNrcyA9IGZvcm1hdFRhc2socmVzdWx0KTtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHJcbiBcdFx0ICAgIH0sMTUwMCk7XHJcblxyXG4gXHRcdCAgICB0aW1lci50aGVuKCgpID0+e1xyXG4gXHRcdCAgICBcdGNvbnNvbGUubG9nKFwiRG9uZSFcIik7XHJcbiBcdFx0ICAgIH0sICgpID0+e1xyXG4gXHRcdCAgICBcdGNvbnNvbGUubG9nKFwiZXJyb3JcIik7XHJcbiBcdFx0ICAgIH0sICgpID0+eyBcdFx0ICAgIFx0XHJcbiBcdFx0ICAgIFx0Y29uc29sZS5sb2coXCLmr4/mrKHpg73mm7TmlrBcIik7IFx0XHQgICAgXHRcclxuIFx0XHQgICAgfSk7XHJcblx0XHR9XHRcclxuXHR9XHJcblxyXG5cdC8v5Yib5bu65pWw5o2u5qih5Z6L5pyN5YqhXHJcbiBcdF9tb2R1bGUuZmFjdG9yeShcIkRhdGFNb2RlbFwiLCBbJyRyb290U2NvcGUnLCAnJGh0dHAnLCAnJGludGVydmFsJywgJyRsb2NhdGlvbicsICckcmVzb3VyY2UnLCAoJHJvb3RTY29wZSwgJGh0dHAsICRpbnRlcnZhbCwgJGxvY2F0aW9uLCAkcmVzb3VyY2UpID0+IHtcclxuIFx0XHR2YXIgJHNjb3BlID0gbmV3IERhdGFNb2RlbFNlcnZpY2UoKTsgIFxyXG4gXHRcdCRzY29wZS5zdGFydEludGVydmFsVGFzaygkaW50ZXJ2YWwsICRodHRwKTsgXHRcdFxyXG4gXHQgICAgcmV0dXJuICRzY29wZTtcclxuIFx0fV0pO1xyXG59IiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG5tb2R1bGUgRGV2ZWxvcGVyIHtcclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaFdvcmtzcGFjZXMocHJvamVjdHMpIHtcclxuICAgIGFuZ3VsYXIuZm9yRWFjaChwcm9qZWN0cywgKHByb2plY3QpID0+IHtcclxuICAgICAgZW5yaWNoV29ya3NwYWNlKHByb2plY3QpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcHJvamVjdHM7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoV29ya3NwYWNlKGJ1aWxkKSB7XHJcbiAgICBpZiAoYnVpbGQpIHtcclxuICAgICAgdmFyIG5hbWUgPSBLdWJlcm5ldGVzLmdldE5hbWUoYnVpbGQpO1xyXG4gICAgICBidWlsZC4kbmFtZSA9IG5hbWU7XHJcbiAgICAgIGJ1aWxkLiRzb3J0T3JkZXIgPSAwIC0gYnVpbGQubnVtYmVyO1xyXG5cclxuICAgICAgdmFyIG5hbWVBcnJheSA9IG5hbWUuc3BsaXQoXCItXCIpO1xyXG4gICAgICB2YXIgbmFtZUFycmF5TGVuZ3RoID0gbmFtZUFycmF5Lmxlbmd0aDtcclxuICAgICAgYnVpbGQuJHNob3J0TmFtZSA9IChuYW1lQXJyYXlMZW5ndGggPiA0KSA/IG5hbWVBcnJheS5zbGljZSgwLCBuYW1lQXJyYXlMZW5ndGggLSA0KS5qb2luKFwiLVwiKSA6IG5hbWUuc3Vic3RyaW5nKDAsIDMwKTtcclxuXHJcbiAgICAgIHZhciBsYWJlbHMgPSBLdWJlcm5ldGVzLmdldExhYmVscyhidWlsZCk7XHJcbiAgICAgIGJ1aWxkLiRjcmVhdGlvbkRhdGUgPSBhc0RhdGUoS3ViZXJuZXRlcy5nZXRDcmVhdGlvblRpbWVzdGFtcChidWlsZCkpO1xyXG4gICAgICBidWlsZC4kbGFiZWxzVGV4dCA9IEt1YmVybmV0ZXMubGFiZWxzVG9TdHJpbmcobGFiZWxzKTtcclxuXHJcbiAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgYnVpbGQuJHByb2plY3RzTGluayA9IFVybEhlbHBlcnMuam9pbihcIndvcmtzcGFjZXNcIiwgbmFtZSk7XHJcbiAgICAgICAgYnVpbGQuJHJ1bnRpbWVMaW5rID0gVXJsSGVscGVycy5qb2luKFwia3ViZXJuZXRlcy9uYW1lc3BhY2UvXCIsIG5hbWUsIFwiL2FwcHNcIik7XHJcbiAgICAgICAgYnVpbGQuJHZpZXdMaW5rID0gYnVpbGQuJHByb2plY3RzTGluaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJ1aWxkO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGFzRGF0ZSh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlID8gbmV3IERhdGUodmFsdWUpIDogbnVsbDtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hKZW5raW5zSm9icyhqb2JzRGF0YSwgcHJvamVjdElkLCBqb2JOYW1lKSB7XHJcbiAgICBpZiAoam9ic0RhdGEpIHtcclxuICAgICAgYW5ndWxhci5mb3JFYWNoKGpvYnNEYXRhLmpvYnMsIChqb2IpID0+IHtcclxuICAgICAgICBlbnJpY2hKZW5raW5zSm9iKGpvYiwgcHJvamVjdElkLCBqb2JOYW1lKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gam9ic0RhdGE7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoSmVua2luc0pvYihqb2IsIHByb2plY3RJZCwgam9iTmFtZSkge1xyXG4gICAgaWYgKGpvYikge1xyXG4gICAgICBqb2JOYW1lID0gam9iTmFtZSB8fCBqb2IubmFtZSB8fCBwcm9qZWN0SWQ7XHJcbiAgICAgIGpvYi4kam9iSWQgPSBqb2JOYW1lO1xyXG4gICAgICBqb2IuJHByb2plY3QgPSBwcm9qZWN0SWQgfHwgam9iTmFtZTtcclxuICAgICAgdmFyIGxhc3RCdWlsZCA9IGpvYi5sYXN0QnVpbGQ7XHJcbiAgICAgIHZhciBsYXN0QnVpbGRSZXN1bHQgPSBsYXN0QnVpbGQgPyBsYXN0QnVpbGQucmVzdWx0IDogXCJOT1RfU1RBUlRFRFwiO1xyXG4gICAgICB2YXIgJGljb25DbGFzcyA9IGNyZWF0ZUJ1aWxkU3RhdHVzSWNvbkNsYXNzKGxhc3RCdWlsZFJlc3VsdCk7XHJcblxyXG4gICAgICBqb2IuJGxhc3RCdWlsZE51bWJlciA9IGVucmljaEplbmtpbnNCdWlsZChqb2IsIGxhc3RCdWlsZCk7XHJcbiAgICAgIGpvYi4kbGFzdFN1Y2Nlc3NmdWxCdWlsZE51bWJlciA9IGVucmljaEplbmtpbnNCdWlsZChqb2IsIGpvYi5sYXN0U3VjY2Vzc2Z1bEJ1aWxkKTtcclxuICAgICAgam9iLiRsYXN0RmFpbGVkbEJ1aWxkTnVtYmVyID0gZW5yaWNoSmVua2luc0J1aWxkKGpvYiwgam9iLmxhc3RGYWlsZWRsQnVpbGQpO1xyXG5cclxuICAgICAgaWYgKGxhc3RCdWlsZCkge1xyXG4gICAgICAgIGpvYi4kZHVyYXRpb24gPSBsYXN0QnVpbGQuZHVyYXRpb247XHJcbiAgICAgICAgam9iLiR0aW1lc3RhbXAgPSBhc0RhdGUobGFzdEJ1aWxkLnRpbWVzdGFtcCk7XHJcbiAgICAgIH1cclxuICAgICAgdmFyIGpvYlVybCA9IChqb2IgfHwge30pLnVybDtcclxuICAgICAgaWYgKCFqb2JVcmwgfHwgIWpvYlVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xyXG4gICAgICAgIHZhciBqZW5raW5zVXJsID0gamVua2luc0xpbmsoKTtcclxuICAgICAgICBpZiAoamVua2luc1VybCkge1xyXG4gICAgICAgICAgam9iVXJsID0gVXJsSGVscGVycy5qb2luKGplbmtpbnNVcmwsIFwiam9iXCIsIGpvYk5hbWUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChqb2JVcmwpIHtcclxuICAgICAgICBqb2IuJGpvYkxpbmsgPSBqb2JVcmw7XHJcbiAgICAgICAgdmFyIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XHJcbiAgICAgICAgam9iLiRwaXBlbGluZXNMaW5rID0gVXJsSGVscGVycy5qb2luKFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBqb2IuJHByb2plY3QsIFwiamVua2luc0pvYlwiLCBqb2JOYW1lLCBcInBpcGVsaW5lc1wiKTtcclxuICAgICAgICBqb2IuJGJ1aWxkc0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIGpvYi4kcHJvamVjdCwgXCJqZW5raW5zSm9iXCIsIGpvYk5hbWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGpvYi4kaWNvbkNsYXNzID0gJGljb25DbGFzcztcclxuXHJcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChqb2IuYnVpbGRzLCAoYnVpbGQpID0+IHtcclxuICAgICAgICBlbnJpY2hKZW5raW5zQnVpbGQoam9iLCBidWlsZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGpvYjtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCdWlsZFN0YXR1c0ljb25DbGFzcyhyZXN1bHQpIHtcclxuICAgIHZhciAkaWNvbkNsYXNzID0gXCJmYSBmYS1zcGlubmVyIGZhLXNwaW5cIjtcclxuICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgaWYgKHJlc3VsdCA9PT0gXCJGQUlMVVJFXCIgfHwgcmVzdWx0ID09PSBcIkZBSUxFRFwiKSB7XHJcbiAgICAgICAgLy8gVE9ETyBub3QgYXZhaWxhYmxlIHlldFxyXG4gICAgICAgICRpY29uQ2xhc3MgPSBcImZhIGZhLWV4Y2xhbWF0aW9uLWNpcmNsZSByZWRcIjtcclxuICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IFwiQUJPUlRFRFwiIHx8IHJlc3VsdCA9PT0gXCJJTlRFUlVQVEVEXCIpIHtcclxuICAgICAgICAkaWNvbkNsYXNzID0gXCJmYSBmYS1jaXJjbGUgZ3JleVwiO1xyXG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJTVUNDRVNTXCIgfHwgcmVzdWx0ID09PSBcIkNPTVBMRVRFXCIgfHwgcmVzdWx0ID09PSBcIkNPTVBMRVRFRFwiKSB7XHJcbiAgICAgICAgJGljb25DbGFzcyA9IFwiZmEgZmEtY2hlY2stY2lyY2xlIGdyZWVuXCI7XHJcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSBcIk5PVF9TVEFSVEVEXCIpIHtcclxuICAgICAgICAkaWNvbkNsYXNzID0gXCJmYSBmYS1jaXJjbGUtdGhpbiBncmV5XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAkaWNvbkNsYXNzO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJ1aWxkU3RhdHVzQmFja2dyb3VuZENsYXNzKHJlc3VsdCkge1xyXG4gICAgdmFyICRpY29uQ2xhc3MgPSBcImJ1aWxkLXBlbmRpbmdcIjtcclxuICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgaWYgKHJlc3VsdCA9PT0gXCJGQUlMVVJFXCIgfHwgcmVzdWx0ID09PSBcIkZBSUxFRFwiKSB7XHJcbiAgICAgICAgJGljb25DbGFzcyA9IFwiYnVpbGQtZmFpbFwiO1xyXG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJBQk9SVEVEXCIgfHwgcmVzdWx0ID09PSBcIklOVEVSVVBURURcIikge1xyXG4gICAgICAgICRpY29uQ2xhc3MgPSBcImJ1aWxkLWFib3J0ZWRcIjtcclxuICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IFwiU1VDQ0VTU1wiIHx8IHJlc3VsdCA9PT0gXCJDT01QTEVURVwiIHx8IHJlc3VsdCA9PT0gXCJDT01QTEVURURcIikge1xyXG4gICAgICAgICRpY29uQ2xhc3MgPSBcImJ1aWxkLXN1Y2Nlc3NcIjtcclxuICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IFwiTk9UX1NUQVJURURcIikge1xyXG4gICAgICAgICRpY29uQ2xhc3MgPSBcImJ1aWxkLW5vdC1zdGFydGVkXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAkaWNvbkNsYXNzO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEplbmtpbnNCdWlsZChqb2IsIGJ1aWxkKSB7XHJcbiAgICB2YXIgbnVtYmVyID0gbnVsbDtcclxuICAgIGlmIChidWlsZCkge1xyXG4gICAgICBidWlsZC4kZHVyYXRpb24gPSBidWlsZC5kdXJhdGlvbjtcclxuICAgICAgYnVpbGQuJHRpbWVzdGFtcCA9IGFzRGF0ZShidWlsZC50aW1lc3RhbXApO1xyXG4gICAgICB2YXIgcHJvamVjdElkID0gam9iLiRwcm9qZWN0O1xyXG4gICAgICB2YXIgam9iTmFtZSA9IGpvYi4kam9iSWQgfHwgcHJvamVjdElkO1xyXG4gICAgICB2YXIgYnVpbGRJZCA9IGJ1aWxkLmlkO1xyXG4gICAgICBudW1iZXIgPSBidWlsZC5udW1iZXI7XHJcbiAgICAgIHZhciB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG5cclxuICAgICAgdmFyICRpY29uQ2xhc3MgPSBjcmVhdGVCdWlsZFN0YXR1c0ljb25DbGFzcyhidWlsZC5yZXN1bHQpO1xyXG4gICAgICB2YXIgam9iVXJsID0gKGpvYiB8fCB7fSkudXJsO1xyXG4gICAgICBpZiAoIWpvYlVybCB8fCAham9iVXJsLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XHJcbiAgICAgICAgdmFyIGplbmtpbnNVcmwgPSBqZW5raW5zTGluaygpO1xyXG4gICAgICAgIGlmIChqZW5raW5zVXJsKSB7XHJcbiAgICAgICAgICBqb2JVcmwgPSBVcmxIZWxwZXJzLmpvaW4oamVua2luc1VybCwgXCJqb2JcIiwgam9iTmFtZSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGpvYlVybCkge1xyXG4gICAgICAgIGJ1aWxkLiRqb2JMaW5rID0gam9iVXJsO1xyXG4gICAgICAgIGlmIChidWlsZElkKSB7XHJcbiAgICAgICAgICAvL2J1aWxkLiRsb2dzTGluayA9IFVybEhlbHBlcnMuam9pbihidWlsZC4kYnVpbGRMaW5rLCBcImNvbnNvbGVcIik7XHJcbiAgICAgICAgICBidWlsZC4kbG9nc0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3RJZCwgXCJqZW5raW5zSm9iXCIsIGpvYk5hbWUsIFwibG9nXCIsIGJ1aWxkSWQpO1xyXG4gICAgICAgICAgYnVpbGQuJHBpcGVsaW5lTGluayA9IFVybEhlbHBlcnMuam9pbihcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdElkLCBcImplbmtpbnNKb2JcIiwgam9iTmFtZSwgXCJwaXBlbGluZVwiLCBidWlsZElkKTtcclxuICAgICAgICAgIGJ1aWxkLiRidWlsZHNMaW5rID0gVXJsSGVscGVycy5qb2luKFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0SWQsIFwiamVua2luc0pvYlwiLCBqb2JOYW1lKTtcclxuICAgICAgICAgIC8vYnVpbGQuJGJ1aWxkTGluayA9IFVybEhlbHBlcnMuam9pbihqb2JVcmwsIGJ1aWxkLmlkKTtcclxuICAgICAgICAgIGJ1aWxkLiRidWlsZExpbmsgPSBidWlsZC4kbG9nc0xpbms7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGJ1aWxkLiRpY29uQ2xhc3MgPSAkaWNvbkNsYXNzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bWJlcjtcclxuICB9XHJcblxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gamVua2luc0xpbmsoKSB7XHJcbiAgICB2YXIgU2VydmljZVJlZ2lzdHJ5ID0gS3ViZXJuZXRlcy5pbmplY3Q8YW55PihcIlNlcnZpY2VSZWdpc3RyeVwiKTtcclxuICAgIGlmIChTZXJ2aWNlUmVnaXN0cnkpIHtcclxuICAgICAgcmV0dXJuIFNlcnZpY2VSZWdpc3RyeS5zZXJ2aWNlTGluayhqZW5raW5zU2VydmljZU5hbWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZm9yZ2VSZWFkeUxpbmsoKSB7XHJcbiAgICB2YXIgU2VydmljZVJlZ2lzdHJ5ID0gS3ViZXJuZXRlcy5pbmplY3Q8YW55PihcIlNlcnZpY2VSZWdpc3RyeVwiKTtcclxuICAgIGlmIChTZXJ2aWNlUmVnaXN0cnkpIHtcclxuICAgICAgcmV0dXJuIFNlcnZpY2VSZWdpc3RyeS5zZXJ2aWNlUmVhZHlMaW5rKEt1YmVybmV0ZXMuZmFicmljOEZvcmdlU2VydmljZU5hbWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoSmVua2luc1BpcGVsaW5lSm9iKGpvYiwgcHJvamVjdElkLCBqb2JJZCkge1xyXG4gICAgaWYgKGpvYikge1xyXG4gICAgICBqb2IuJHByb2plY3QgPSBwcm9qZWN0SWQ7XHJcbiAgICAgIGpvYi4kam9iSWQgPSBqb2JJZDtcclxuICAgICAgYW5ndWxhci5mb3JFYWNoKGpvYi5idWlsZHMsIChidWlsZCkgPT4ge1xyXG4gICAgICAgIGVucmljaEplbmtpbnNTdGFnZXMoYnVpbGQsIHByb2plY3RJZCwgam9iSWQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hKZW5raW5zU3RhZ2VzKGJ1aWxkLCBwcm9qZWN0SWQsIGpvYk5hbWUpIHtcclxuICAgIGlmIChidWlsZCkge1xyXG4gICAgICBidWlsZC4kcHJvamVjdCA9IHByb2plY3RJZDtcclxuICAgICAgYnVpbGQuJGpvYklkID0gam9iTmFtZTtcclxuICAgICAgYnVpbGQuJHRpbWVzdGFtcCA9IGFzRGF0ZShidWlsZC50aW1lSW5NaWxsaXMpO1xyXG4gICAgICBidWlsZC4kaWNvbkNsYXNzID0gY3JlYXRlQnVpbGRTdGF0dXNJY29uQ2xhc3MoYnVpbGQucmVzdWx0IHx8IFwiTk9UX1NUQVJURURcIik7XHJcblxyXG4gICAgICB2YXIgd29ya3NwYWNlTmFtZSA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcclxuICAgICAgdmFyIHBhcmFtZXRlcnMgPSBidWlsZC5wYXJhbWV0ZXJzO1xyXG4gICAgICB2YXIgJHBhcmFtZXRlckNvdW50ID0gMDtcclxuICAgICAgdmFyICRwYXJhbWV0ZXJUZXh0ID0gXCJObyBwYXJhbWV0ZXJzXCI7XHJcbiAgICAgIGlmIChwYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgJHBhcmFtZXRlckNvdW50ID0gXy5rZXlzKHBhcmFtZXRlcnMpLmxlbmd0aCB8fCAwO1xyXG4gICAgICAgICRwYXJhbWV0ZXJUZXh0ID0gS3ViZXJuZXRlcy5sYWJlbHNUb1N0cmluZyhwYXJhbWV0ZXJzLCBcIiBcIik7XHJcbiAgICAgIH1cclxuICAgICAgYnVpbGQuJHBhcmFtZXRlckNvdW50ID0gJHBhcmFtZXRlckNvdW50O1xyXG4gICAgICBidWlsZC4kcGFyYW1ldGVyVGV4dCA9ICRwYXJhbWV0ZXJUZXh0O1xyXG4gICAgICB2YXIgamVua2luc1VybCA9IGplbmtpbnNMaW5rKCk7XHJcbiAgICAgIGlmIChqZW5raW5zVXJsKSB7XHJcbiAgICAgICAgdmFyIHVybCA9IGJ1aWxkLnVybDtcclxuICAgICAgICBpZiAodXJsKSB7XHJcbi8qXHJcbiAgICAgICAgICBidWlsZC4kdmlld0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oamVua2luc1VybCwgdXJsKTtcclxuICAgICAgICAgIGJ1aWxkLiRsb2dMaW5rID0gVXJsSGVscGVycy5qb2luKGJ1aWxkLiR2aWV3TGluaywgXCJsb2dcIik7XHJcbiovXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGJ1aWxkLiRsb2dMaW5rID0gVXJsSGVscGVycy5qb2luKFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0SWQsIFwiamVua2luc0pvYlwiLCBqb2JOYW1lLCBcImxvZ1wiLCBidWlsZC5pZCk7XHJcbiAgICAgIGJ1aWxkLiR2aWV3TGluayA9IGJ1aWxkLiRsb2dMaW5rO1xyXG5cclxuICAgICAgYW5ndWxhci5mb3JFYWNoKGJ1aWxkLnN0YWdlcywgKHN0YWdlKSA9PiB7XHJcbiAgICAgICAgZW5yaWNoSmVua2luc1N0YWdlKHN0YWdlLCBidWlsZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJ1aWxkO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEplbmtpbnNTdGFnZShzdGFnZSwgYnVpbGQgPSBudWxsKSB7XHJcbiAgICBpZiAoc3RhZ2UpIHtcclxuICAgICAgaWYgKGJ1aWxkKSB7XHJcbiAgICAgICAgc3RhZ2UuJGJ1aWxkSWQgPSBidWlsZC5pZDtcclxuICAgICAgICBzdGFnZS4kcHJvamVjdCA9IGJ1aWxkLiRwcm9qZWN0O1xyXG4gICAgICB9XHJcbiAgICAgIHZhciBwcm9qZWN0SWQgPSBidWlsZC4kcHJvamVjdDtcclxuICAgICAgdmFyIGpvYk5hbWUgPSBidWlsZC4kam9iSWQgfHwgcHJvamVjdElkO1xyXG4gICAgICB2YXIgYnVpbGRJZCA9IGJ1aWxkLmlkO1xyXG4gICAgICB2YXIgd29ya3NwYWNlTmFtZSA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcclxuICAgICAgc3RhZ2UuJGJhY2tncm91bmRDbGFzcyA9ICBjcmVhdGVCdWlsZFN0YXR1c0JhY2tncm91bmRDbGFzcyhzdGFnZS5zdGF0dXMpO1xyXG4gICAgICBzdGFnZS4kaWNvbkNsYXNzID0gY3JlYXRlQnVpbGRTdGF0dXNJY29uQ2xhc3Moc3RhZ2Uuc3RhdHVzKTtcclxuICAgICAgc3RhZ2UuJHN0YXJ0VGltZSA9IGFzRGF0ZShzdGFnZS5zdGFydFRpbWUpO1xyXG4gICAgICBpZiAoIXN0YWdlLmR1cmF0aW9uKSB7XHJcbiAgICAgICAgc3RhZ2UuZHVyYXRpb24gPSAwO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciBqZW5raW5zVXJsID0gamVua2luc0xpbmsoKTtcclxuICAgICAgaWYgKGplbmtpbnNVcmwpIHtcclxuICAgICAgICB2YXIgdXJsID0gc3RhZ2UudXJsO1xyXG4gICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgIHN0YWdlLiR2aWV3TGluayA9IFVybEhlbHBlcnMuam9pbihqZW5raW5zVXJsLCB1cmwpO1xyXG4gICAgICAgICAgc3RhZ2UuJGxvZ0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oc3RhZ2UuJHZpZXdMaW5rLCBcImxvZ1wiKTtcclxuICAgICAgICAgIGlmIChwcm9qZWN0SWQgJiYgYnVpbGRJZCkge1xyXG4gICAgICAgICAgICBzdGFnZS4kbG9nTGluayA9IFVybEhlbHBlcnMuam9pbihcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdElkLCBcImplbmtpbnNKb2JcIiwgam9iTmFtZSwgXCJsb2dcIiwgYnVpbGRJZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJQbHVnaW4udHNcIi8+XHJcblxyXG5tb2R1bGUgRGV2ZWxvcGVyIHtcclxuICBfbW9kdWxlLmNvbnRyb2xsZXIoJ0RldmVsb3Blci5FbnZpcm9ubWVudFBhbmVsQ29udHJvbGxlcicsICgkc2NvcGUsICRlbGVtZW50LCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcclxuXHJcbiAgICAkc2NvcGUuZW52VmVyc2lvbnMgPSB7fTtcclxuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuICAgICRzY29wZS5lbnYgPSAkc2NvcGUuJGV2YWwoJ2VudicpO1xyXG4gICAgJHNjb3BlLmJ1aWxkQ29uZmlnID0gJHNjb3BlLiRldmFsKCdlbnRpdHknKTtcclxuXHJcbiAgICAkc2NvcGUub3BlbiA9IHRydWU7XHJcblxyXG4gICAgJHNjb3BlLnRvZ2dsZSA9ICgpID0+ICRzY29wZS5vcGVuID0gISRzY29wZS5vcGVuO1xyXG5cclxuICAgIHZhciBjYWNoZXMgPSB7fTtcclxuXHJcbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcblxyXG4gICAgbG9hZFByb2plY3RWZXJzaW9ucygkc2NvcGUsICRlbGVtZW50LCAkc2NvcGUuYnVpbGRDb25maWcsICRzY29wZS5lbnYsICRzY29wZS5lbnYubmFtZXNwYWNlLCAkc2NvcGUuZW52VmVyc2lvbnMsIGNhY2hlcyk7XHJcblxyXG4gIH0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlclBsdWdpbi50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRhdGFNYW5hZ2VyTW9kZWwudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkYXRhTWFuYWdlckhlbHBlci50c1wiLz5cclxuLy8vICA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9jb25maWdzL3RzL0NvbmZpZ3NIZWxwZXIudHNcIi8+XHJcbm1vZHVsZSBEZXZlbG9wZXIge1xyXG5cdGV4cG9ydCB2YXIgS3ViZVRhc2tDb250cm9sbGVyID0gY29udHJvbGxlcihcIkt1YmVUYXNrQ29udHJvbGxlclwiLCBbXCIkc2NvcGVcIiwgXCIkaHR0cFwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIkRhdGFNb2RlbFwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsICgkc2NvcGUsICRodHRwLCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcywgRGF0YU1vZGVsLCAkdGVtcGxhdGVDYWNoZSkgPT4ge1xyXG5cdFx0JHNjb3BlLm1vZGVsID0gRGF0YU1vZGVsO1x0XHJcbiAgICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVDdXJyZW50U3ViTmF2QmFyKCRzY29wZSwgJGxvY2F0aW9uLCAkcm91dGVQYXJhbXMpOyBcdFx0XHJcblxyXG5cdFx0JHNjb3BlLnRhYmxlQ29uZmlnID0ge1xyXG5cdFx0ICBcdGRhdGE6ICdtb2RlbC50cmFuc2ZlclRhc2tzJywgICAgIFxyXG5cdFx0XHRzaG93U2VsZWN0aW9uQ2hlY2tib3g6IGZhbHNlLFxyXG5cdFx0XHRlbmFibGVSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXHJcblx0XHRcdG11bHRpU2VsZWN0OiB0cnVlLCAgICAgXHJcblx0XHRcdHNlbGVjdGVkSXRlbXM6IFtdLCAgICAgXHJcblx0XHRcdGZpbHRlck9wdGlvbnM6IHtcclxuXHRcdFx0ZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xyXG5cdFx0XHR9LFxyXG5cdFx0IFx0Y29sdW1uRGVmczogW3tcclxuXHRcdCAgICAgIFx0ZmllbGQ6IFwiX2tleVwiLFxyXG5cdFx0ICAgICAgXHRkaXNwbGF5TmFtZTogJ+e8lueggScsXHJcblx0XHQgICAgICBcdGN1c3RvbVNvcnRGaWVsZDogKGZpZWxkKSA9PntcclxuXHRcdCAgICAgICAgXHRyZXR1cm4gZmllbGQuaWQ7ICAgICAgICAgICBcclxuXHRcdCAgICAgIFx0fSAgICAgICAgIFxyXG5cdFx0ICAgIH0sXHJcblx0XHQgICAge1xyXG5cdFx0ICAgICAgXHRmaWVsZDogXCJuYW1lXCIsXHJcblx0XHQgICAgICBcdGRpc3BsYXlOYW1lOiAn5biCLeWMui/ljr8nICAgICAgIFxyXG5cdFx0ICAgIH0sXHJcblx0XHQgICAgeyBcclxuXHRcdCAgICAgIFx0ZmllbGQ6IFwic3lzdGVtTmFtZVwiLFxyXG5cdFx0ICAgICAgXHRkaXNwbGF5TmFtZTogJ+ezu+e7n+WQjeensCcgICAgICAgICBcclxuXHRcdCAgICB9LFxyXG5cdFx0ICAgIHtcclxuXHRcdCAgICAgIFx0ZmllbGQ6IFwibGFiZWxzXCIsXHJcblx0XHQgICAgICBcdGRpc3BsYXlOYW1lOiAn5pWw5o2u5qCH562+JyxcclxuXHRcdCAgICAgIFx0Y2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJkYXRhTGFiZWxzVGVtcGxhdGUuaHRtbFwiKSAgICAgIFxyXG5cdFx0ICAgIH0sIFxyXG5cdFx0ICAgIHtcclxuXHRcdCAgICBcdGZpZWxkOiBcImZyb21cIixcclxuXHRcdCAgICAgIFx0ZGlzcGxheU5hbWU6ICfmupDpm4bnvqQnLFx0XHQgICAgICBcdFxyXG5cdFx0ICAgIH0sXHJcblx0XHQgICAge1xyXG5cdFx0ICAgIFx0ZmllbGQ6IFwidG9cIixcclxuXHRcdCAgICAgIFx0ZGlzcGxheU5hbWU6ICfnm67nmoTpm4bnvqQnLFx0XHQgICAgICBcdFxyXG5cdFx0ICAgIH0sXHJcblx0XHQgICAge1xyXG5cdFx0ICAgIFx0ZmllbGQ6IFwic3RhdHVzXCIsXHJcblx0XHQgICAgICBcdGRpc3BsYXlOYW1lOiAn6L+B56e754q25oCBJyxcclxuXHRcdCAgICAgIFx0Y2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJ0YXNrU3RhdHVzLmh0bWxcIikgICAgIFxyXG5cdFx0ICAgIH0sXHJcblx0XHQgICAge1xyXG5cdFx0ICAgIFx0ZmllbGQ6IFwicHJvY2Vzc1wiLFxyXG5cdFx0ICAgICAgXHRkaXNwbGF5TmFtZTogJ+i/geenu+i/m+W6picsXHJcblx0XHQgICAgICBcdGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwidGFza1Byb2Nlc3MuaHRtbFwiKSBcdFx0ICAgICAgXHQgICAgICBcclxuXHRcdCAgICB9LFxyXG5cdFx0ICAgIHtcclxuXHRcdCAgICBcdGZpZWxkOiBcImVudGl0eVwiLFxyXG5cdFx0ICAgICAgXHRkaXNwbGF5TmFtZTogJ+aTjeS9nCcsXHJcblx0XHQgICAgICBcdGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwidGFza0VkaXQuaHRtbFwiKSAgXHRcdCAgICAgIFx0ICAgICAgXHJcblx0XHQgICAgfSAgICAgICAgICAgXHJcblx0XHRdfTtcclxuXHJcblxyXG5cdFx0JHNjb3BlLiRvbihcImRlbGV0ZVJvd1wiLCAoZXZlbnQsIGRhdGEpID0+e1x0XHRcdFx0XHRcclxuXHRcdFx0Q29uZmlncy5vcmFjbGVJbmZvT3BlcmF0ZSgkaHR0cCwgXCIvamF2YS9jb25zb2xlL2FwaS90YXNrL3RyYW5zZmVyXCIsIENvbmZpZ3MuT3BlcmF0ZVR5cGUuREVMRVRFLCBkYXRhLCAoZGF0YSwgc3RhdHVzKSA9PntcclxuXHRcdFx0XHRpZihzdGF0dXMgPT09IDIwMClcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKFwi5Yig6Zmk5oiQ5YqfXCIpO1xyXG5cdFx0XHR9KTtcdFx0XHRcclxuXHRcdH0pO1x0XHJcblx0fV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJFbnJpY2hlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cclxuXHJcbm1vZHVsZSBEZXZlbG9wZXIge1xyXG5cclxuICBleHBvcnQgdmFyIEhvbWVDb250cm9sbGVyID0gY29udHJvbGxlcihcIkhvbWVDb250cm9sbGVyXCIsXHJcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzU2NoZW1hXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxyXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsXHJcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xyXG5cclxuICAgICAgICAkc2NvcGUubmFtZXNwYWNlID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG5cclxuICAgICAgfV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJFbnJpY2hlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cclxuXHJcbm1vZHVsZSBEZXZlbG9wZXIge1xyXG5cclxuICBleHBvcnQgdmFyIEplbmtpbnNKb2JDb250cm9sbGVyID0gY29udHJvbGxlcihcIkplbmtpbnNKb2JDb250cm9sbGVyXCIsXHJcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzU2NoZW1hXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLCBcIlNlcnZpY2VSZWdpc3RyeVwiLFxyXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsXHJcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCwgU2VydmljZVJlZ2lzdHJ5KSA9PiB7XHJcblxyXG4gICAgICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xyXG4gICAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuICAgICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcclxuICAgICAgICAkc2NvcGUuam9iSWQgPSAkcm91dGVQYXJhbXNbXCJqb2JcIl07XHJcbiAgICAgICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XHJcbiAgICAgICAgJHNjb3BlLmVudGl0eUNoYW5nZWRDYWNoZSA9IHt9O1xyXG5cclxuICAgICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcbiAgICAgICAgJHNjb3BlLmJyZWFkY3J1bWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKCRzY29wZS5pZCk7XHJcbiAgICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0U3ViTmF2QmFycygkc2NvcGUuaWQsICRzY29wZS5qb2JJZCk7XHJcblxyXG4gICAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcclxuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xyXG4gICAgICAgICAgZGF0YTogJ2pvYi5idWlsZHMnLFxyXG4gICAgICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxyXG4gICAgICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxyXG4gICAgICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsXHJcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcclxuICAgICAgICAgIGZpbHRlck9wdGlvbnM6IHtcclxuICAgICAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNvbHVtbkRlZnM6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGZpZWxkOiAnJHNvcnRPcmRlcicsXHJcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdOYW1lJyxcclxuICAgICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImplbmtpbnNCdWlsZElkVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZmllbGQ6ICckYnVpbGRMaW5rJyxcclxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1ZpZXdzJyxcclxuICAgICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImplbmtpbnNCdWlsZEJ1dHRvbnNUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBmaWVsZDogJyRkdXJhdGlvbicsXHJcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdEdXJhdGlvbicsXHJcbiAgICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJqZW5raW5zQnVpbGREdXJhdGlvblRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGZpZWxkOiAnJHRpbWVzdGFtcCcsXHJcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdUaW1lIFN0YXJ0ZWQnLFxyXG4gICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiamVua2luc0J1aWxkVGltZXN0YW1wVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgfTtcclxuICAgICAgICB1cGRhdGVEYXRhKCk7XHJcblxyXG5cclxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xyXG4gICAgICAgICAgaWYgKCRzY29wZS5qb2JJZCkge1xyXG4gICAgICAgICAgICB2YXIgdXJsID0gS3ViZXJuZXRlcy5rdWJlcm5ldGVzUHJveHlVcmxGb3JTZXJ2aWNlQ3VycmVudE5hbWVzcGFjZShqZW5raW5zU2VydmljZU5hbWVBbmRQb3J0LCBVcmxIZWxwZXJzLmpvaW4oXCJqb2JcIiwgJHNjb3BlLmpvYklkLCBcImFwaS9qc29uP2RlcHRoPTFcIikpO1xyXG4gICAgICAgICAgICBpZiAodXJsICYmICghJHNjb3BlLmpvYiB8fCBLdWJlcm5ldGVzLmtlZXBQb2xsaW5nTW9kZWwpKSB7XHJcbiAgICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVucmljaEplbmtpbnNKb2IoZGF0YSwgJHNjb3BlLmlkLCAkc2NvcGUuam9iSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNPYmplY3RDaGFuZ2VkKGRhdGEsICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbyhcImVudGl0eSBoYXMgY2hhbmdlZCFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuam9iID0gZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgICAgICAgfSkuXHJcbiAgICAgICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckVucmljaGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJOYXZpZ2F0aW9uLnRzXCIvPlxyXG5cclxubW9kdWxlIERldmVsb3BlciB7XHJcblxyXG4gIGV4cG9ydCB2YXIgSmVua2luc0pvYnNDb250cm9sbGVyID0gY29udHJvbGxlcihcIkplbmtpbnNKb2JzQ29udHJvbGxlclwiLFxyXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgXCJTZXJ2aWNlUmVnaXN0cnlcIixcclxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxyXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwsIFNlcnZpY2VSZWdpc3RyeSkgPT4ge1xyXG5cclxuICAgICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuICAgICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcbiAgICAgICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XHJcbiAgICAgICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XHJcbiAgICAgICAgJHNjb3BlLmplbmtpbnMgPSBudWxsO1xyXG4gICAgICAgICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUgPSB7fTtcclxuXHJcbiAgICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG4gICAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKCk7XHJcbiAgICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVXb3Jrc3BhY2VTdWJOYXZCYXJzKCk7XHJcblxyXG4gICAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcclxuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xyXG4gICAgICAgICAgZGF0YTogJ2plbmtpbnMuam9icycsXHJcbiAgICAgICAgICBzaG93U2VsZWN0aW9uQ2hlY2tib3g6IHRydWUsXHJcbiAgICAgICAgICBlbmFibGVSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICBtdWx0aVNlbGVjdDogdHJ1ZSxcclxuICAgICAgICAgIHNlbGVjdGVkSXRlbXM6IFtdLFxyXG4gICAgICAgICAgZmlsdGVyT3B0aW9uczoge1xyXG4gICAgICAgICAgICBmaWx0ZXJUZXh0OiAkbG9jYXRpb24uc2VhcmNoKClbXCJxXCJdIHx8ICcnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY29sdW1uRGVmczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZmllbGQ6ICduYW1lJyxcclxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ05hbWUnLFxyXG4gICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiamVua2luc0pvYk5hbWVUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBmaWVsZDogJyRidWlsZExpbmsnLFxyXG4gICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnVmlld3MnLFxyXG4gICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiamVua2luc0pvYkJ1dHRvbnNUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBmaWVsZDogJyRsYXN0U3VjY2Vzc2Z1bEJ1aWxkTnVtYmVyJyxcclxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0xhc3QgU3VjY2VzcycsXHJcbiAgICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJqZW5raW5zTGFzdFN1Y2Nlc3NUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBmaWVsZDogJyRsYXN0RmFpbGVkbEJ1aWxkTnVtYmVyJyxcclxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0xhc3QgRmFpbHVyZScsXHJcbiAgICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJqZW5raW5zTGFzdEZhaWx1cmVUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBmaWVsZDogJyRkdXJhdGlvbicsXHJcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdMYXN0IER1cmF0aW9uJyxcclxuICAgICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImplbmtpbnNCdWlsZER1cmF0aW9uVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZmllbGQ6ICckdGltZXN0YW1wJyxcclxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1RpbWUgU3RhcnRlZCcsXHJcbiAgICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJqZW5raW5zQnVpbGRUaW1lc3RhbXBUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIF1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHVwZGF0ZURhdGEoKTtcclxuXHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XHJcbiAgICAgICAgICAvLyBUT0RPIG9ubHkgbmVlZCBkZXB0aCAyIHRvIGJlIGFibGUgdG8gZmV0Y2ggdGhlIGxhc3RCdWlsZFxyXG4gICAgICAgICAgdmFyIHVybCA9IEt1YmVybmV0ZXMua3ViZXJuZXRlc1Byb3h5VXJsRm9yU2VydmljZUN1cnJlbnROYW1lc3BhY2UoamVua2luc1NlcnZpY2VOYW1lQW5kUG9ydCwgXCJhcGkvanNvbj9kZXB0aD0yXCIpO1xyXG4gICAgICAgICAgbG9nLmluZm8oXCJcIik7XHJcbiAgICAgICAgICBpZiAodXJsICYmICghJHNjb3BlLmplbmtpbnMgfHwgS3ViZXJuZXRlcy5rZWVwUG9sbGluZ01vZGVsKSkge1xyXG4gICAgICAgICAgICAkaHR0cC5nZXQodXJsLCBqZW5raW5zSHR0cENvbmZpZykuXHJcbiAgICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgIGVucmljaEplbmtpbnNKb2JzKGRhdGEsICRzY29wZS5pZCwgJHNjb3BlLmlkKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGhhc09iamVjdENoYW5nZWQoZGF0YSwgJHNjb3BlLmVudGl0eUNoYW5nZWRDYWNoZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbyhcImVudGl0eSBoYXMgY2hhbmdlZCFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmplbmtpbnMgPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgICAgIH0pLlxyXG4gICAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBleHBvcnQgdmFyIEZBQlJJQzhfUFJPSkVDVF9KU09OID0gXCJmYWJyaWM4UHJvamVjdEpzb25cIjtcclxuXHJcbiAgZnVuY3Rpb24gYnlJZCh0aGluZykge1xyXG4gICAgcmV0dXJuIHRoaW5nLmlkO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY3JlYXRlS2V5KG5hbWVzcGFjZSwgaWQsIGtpbmQpIHtcclxuICAgIHJldHVybiAobmFtZXNwYWNlIHx8IFwiXCIpICsgXCItXCIgKyAoa2luZCB8fCAndW5kZWZpbmVkJykudG9Mb3dlckNhc2UoKSArICctJyArIChpZCB8fCAndW5kZWZpbmVkJykucmVwbGFjZSgvXFwuL2csICctJyk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwb3B1bGF0ZUtleShpdGVtKSB7XHJcbiAgICB2YXIgcmVzdWx0ID0gaXRlbTtcclxuICAgIHJlc3VsdFsnX2tleSddID0gY3JlYXRlS2V5KGdldE5hbWVzcGFjZShpdGVtKSwgZ2V0TmFtZShpdGVtKSwgZ2V0S2luZChpdGVtKSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcG9wdWxhdGVLZXlzKGl0ZW1zOkFycmF5PGFueT4pIHtcclxuICAgIHZhciByZXN1bHQgPSBbXTtcclxuICAgIGFuZ3VsYXIuZm9yRWFjaChpdGVtcywgKGl0ZW0pID0+IHtcclxuICAgICAgcmVzdWx0LnB1c2gocG9wdWxhdGVLZXkoaXRlbSkpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2VsZWN0UG9kcyhwb2RzLCBuYW1lc3BhY2UsIGxhYmVscykge1xyXG4gICAgcmV0dXJuIHBvZHMuZmlsdGVyKChwb2QpID0+IHtcclxuICAgICAgcmV0dXJuIGdldE5hbWVzcGFjZShwb2QpID09PSBuYW1lc3BhY2UgJiYgc2VsZWN0b3JNYXRjaGVzKGxhYmVscywgZ2V0TGFiZWxzKHBvZCkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgb2JqZWN0IHdoaWNoIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgcG9kcywgcmVwbGljYXRpb24gY29udHJvbGxlcnMsIHNlcnZpY2VzIGFuZCB0aGVpciBhc3NvY2lhdGlvbnNcclxuICAgKi9cclxuICBleHBvcnQgY2xhc3MgS3ViZXJuZXRlc01vZGVsU2VydmljZSB7XHJcbiAgICBwdWJsaWMga3ViZXJuZXRlcyA9IDxLdWJlcm5ldGVzU3RhdGU+IG51bGw7XHJcbiAgICBwdWJsaWMgYXBwcyA9IFtdO1xyXG4gICAgcHVibGljIHNlcnZpY2VzID0gW107XHJcblxyXG4gICAgcHVibGljIHJlcGxpY2F0aW9uY29udHJvbGxlcnMgPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgZmlsdGVyUmVwbGljYXRpb25jb250cm9sbGVycyA9IFtdO1xyXG5cclxuICAgIC8qcHVibGljIGdldCBmaWx0ZXJSZXBsaWNhdGlvbmNvbnRyb2xsZXJzKCk6QXJyYXk8YW55PiB7XHJcbiAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJSZXBsaWNhdGlvbmNvbnRyb2xsZXJzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXQgZmlsdGVyUmVwbGljYXRpb25jb250cm9sbGVycyhmaWx0ZXJSZXBsaWNhdGlvbmNvbnRyb2xsZXJzOkFycmF5PGFueT4pIHtcclxuICAgICAgICB0aGlzLmZpbHRlclJlcGxpY2F0aW9uY29udHJvbGxlcnMgPSBmaWx0ZXJSZXBsaWNhdGlvbmNvbnRyb2xsZXJzO1xyXG4gICAgfSovXHJcblxyXG4gICAgcHVibGljIGdldCByZXBsaWNhdGlvbkNvbnRyb2xsZXJzKCk6QXJyYXk8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLnJlcGxpY2F0aW9uY29udHJvbGxlcnM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IHJlcGxpY2F0aW9uQ29udHJvbGxlcnMocmVwbGljYXRpb25Db250cm9sbGVyczpBcnJheTxhbnk+KSB7XHJcbiAgICAgIHRoaXMucmVwbGljYXRpb25jb250cm9sbGVycyA9IHJlcGxpY2F0aW9uQ29udHJvbGxlcnM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcG9kcyA9IFtdO1xyXG4gICAgcHVibGljIGhvc3RzID0gW107XHJcbiAgICBwdWJsaWMgZ2V0IG5hbWVzcGFjZXMoKTpBcnJheTxzdHJpbmc+IHtcclxuICAgICAgcmV0dXJuIHRoaXMua3ViZXJuZXRlcy5uYW1lc3BhY2VzO1xyXG4gICAgfVxyXG4gICAgLy9wdWJsaWMgbmFtZXNwYWNlcyA9IFtdO1xyXG4gICAgcHVibGljIHJvdXRlcyA9IFtdO1xyXG4gICAgcHVibGljIHRlbXBsYXRlcyA9IFtdO1xyXG4gICAgcHVibGljIHJlZHJhdyA9IGZhbHNlO1xyXG4gICAgcHVibGljIHJlc291cmNlVmVyc2lvbnMgPSB7fTtcclxuXHJcbiAgICAvLyB2YXJpb3VzIHZpZXdzIG9uIHRoZSBkYXRhXHJcbiAgICBwdWJsaWMgcG9kc0J5SG9zdCA9IHt9O1xyXG4gICAgcHVibGljIHNlcnZpY2VzQnlLZXkgPSB7fTtcclxuICAgIHB1YmxpYyByZXBsaWNhdGlvbkNvbnRyb2xsZXJzQnlLZXkgPSB7fTtcclxuICAgIHB1YmxpYyBwb2RzQnlLZXkgPSB7fTtcclxuXHJcbiAgICBwdWJsaWMgYXBwSW5mb3MgPSBbXTtcclxuICAgIHB1YmxpYyBhcHBWaWV3cyA9IFtdO1xyXG4gICAgcHVibGljIGFwcEZvbGRlcnMgPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgZmV0Y2hlZCA9IGZhbHNlO1xyXG4gICAgcHVibGljIGdldCBzaG93UnVuQnV0dG9uKCk6Ym9vbGVhbiB7XHJcbiAgICAgIGlmIChpc09wZW5TaGlmdCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBfLmFueSh0aGlzLnNlcnZpY2VzLCAoc2VydmljZSkgPT4ge1xyXG4gICAgICAgIHZhciBuYW1lID0gZ2V0TmFtZShzZXJ2aWNlKTtcclxuICAgICAgICBpZiAobmFtZSA9PT0gXCJ0ZW1wbGF0ZXNcIikge1xyXG4gICAgICAgICAgdmFyIHBvZENvdW50ZXJzID0gc2VydmljZS4kcG9kQ291bnRlcnM7XHJcbiAgICAgICAgICByZXR1cm4gcG9kQ291bnRlcnMgJiYgKHBvZENvdW50ZXJzLnZhbGlkIHx8IHBvZENvdW50ZXJzLnJlYWR5KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGJ1aWxkY29uZmlncyA9IFtdO1xyXG4gICAgcHVibGljIGV2ZW50cyA9IFtdO1xyXG4gICAgcHVibGljIHdvcmtzcGFjZXMgPSBbXTtcclxuICAgIHB1YmxpYyBwcm9qZWN0cyA9IFtdO1xyXG4gICAgcHVibGljIHByb2plY3QgPSBudWxsO1xyXG5cclxuICAgIHB1YmxpYyBnZXQgc2VydmljZUFwcHMoKTpBcnJheTxhbnk+IHtcclxuICAgICAgcmV0dXJuIF8uZmlsdGVyKHRoaXMuc2VydmljZXMsIChzKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHMuJGhvc3QgJiYgcy4kc2VydmljZVVybCAmJiBzLiRwb2RDb3VudFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgJGtlZXBQb2xsaW5nKCkge1xyXG4gICAgICByZXR1cm4ga2VlcFBvbGxpbmdNb2RlbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb3JSZWRyYXcoZmxhZykge1xyXG4gICAgICB0aGlzLnJlZHJhdyA9IHRoaXMucmVkcmF3IHx8IGZsYWc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNlcnZpY2UobmFtZXNwYWNlLCBpZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlc0J5S2V5W2NyZWF0ZUtleShuYW1lc3BhY2UsIGlkLCAnc2VydmljZScpXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UmVwbGljYXRpb25Db250cm9sbGVyKG5hbWVzcGFjZSwgaWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucmVwbGljYXRpb25Db250cm9sbGVyc0J5S2V5W2NyZWF0ZUtleShuYW1lc3BhY2UsIGlkLCAncmVwbGljYXRpb25Db250cm9sbGVyJyldO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQb2QobmFtZXNwYWNlLCBpZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wb2RzQnlLZXlbY3JlYXRlS2V5KG5hbWVzcGFjZSwgaWQsICdwb2QnKV07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHBvZHNGb3JOYW1lc3BhY2UobmFtZXNwYWNlID0gdGhpcy5jdXJyZW50TmFtZXNwYWNlKCkpIHtcclxuICAgICAgcmV0dXJuIF8uZmlsdGVyKHRoaXMucG9kcywgeyBuYW1lc3BhY2U6IG5hbWVzcGFjZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QnVpbGRDb25maWcobmFtZSkge1xyXG4gICAgICByZXR1cm4gXy5maW5kKHRoaXMuYnVpbGRjb25maWdzLCB7ICRuYW1lOiBuYW1lIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQcm9qZWN0KG5hbWUsIG5zID0gdGhpcy5jdXJyZW50TmFtZXNwYWNlKCkpIHtcclxuICAgICAgdmFyIGJ1aWxkQ29uZmlnID0gdGhpcy5wcm9qZWN0O1xyXG4gICAgICBpZiAoIWJ1aWxkQ29uZmlnKSB7XHJcbiAgICAgICAgdmFyIHRleHQgPSBsb2NhbFN0b3JhZ2VbRkFCUklDOF9QUk9KRUNUX0pTT05dO1xyXG4gICAgICAgIGlmICh0ZXh0KSB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBidWlsZENvbmZpZyA9IGFuZ3VsYXIuZnJvbUpzb24odGV4dCk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy53YXJuKFwiQ291bGQgbm90IHBhcnNlIGpzb24gZm9yIFwiICsgRkFCUklDOF9QUk9KRUNUX0pTT04gKyBcIi4gV2FzOiBcIiArIHRleHQgKyBcIi4gXCIgKyBlLCBlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGJ1aWxkQ29uZmlnICYmIG5zICE9IGdldE5hbWVzcGFjZShidWlsZENvbmZpZykgJiYgbmFtZSAhPSBidWlsZENvbmZpZy4kbmFtZSkge1xyXG4gICAgICAgIGJ1aWxkQ29uZmlnID0gdGhpcy5nZXRCdWlsZENvbmZpZyhuYW1lKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYnVpbGRDb25maWc7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBzZXRQcm9qZWN0KGJ1aWxkQ29uZmlnKSB7XHJcbiAgICAgIHRoaXMucHJvamVjdCA9IGJ1aWxkQ29uZmlnO1xyXG4gICAgICBpZiAoYnVpbGRDb25maWcpIHtcclxuICAgICAgICAvLyBsZXRzIHN0b3JlIGluIGxvY2FsIHN0b3JhZ2VcclxuICAgICAgICB2YXIgbG9jYWxTdG9yYWdlID0gaW5qZWN0KFwibG9jYWxTdG9yYWdlXCIpO1xyXG4gICAgICAgIGlmIChsb2NhbFN0b3JhZ2UpIHtcclxuICAgICAgICAgIGxvY2FsU3RvcmFnZVtGQUJSSUM4X1BST0pFQ1RfSlNPTl0gPSBhbmd1bGFyLnRvSnNvbihidWlsZENvbmZpZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHNlbGVjdGVkIG5hbWVzcGFjZSBvciB0aGUgZGVmYXVsdCBuYW1lc3BhY2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIGN1cnJlbnROYW1lc3BhY2UoKSB7XHJcbiAgICAgIHZhciBhbnN3ZXIgPSBudWxsO1xyXG4gICAgICBpZiAodGhpcy5rdWJlcm5ldGVzKSB7XHJcbiAgICAgICAgYW5zd2VyID0gdGhpcy5rdWJlcm5ldGVzLnNlbGVjdGVkTmFtZXNwYWNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhbnN3ZXIgfHwgZGVmYXVsdE5hbWVzcGFjZTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlSWNvblVybEFuZEFwcEluZm8oZW50aXR5LCBuYW1lRmllbGQ6IHN0cmluZykge1xyXG4gICAgICB2YXIgYW5zd2VyID0gbnVsbDtcclxuICAgICAgdmFyIGlkID0gZ2V0TmFtZShlbnRpdHkpO1xyXG4gICAgICBlbnRpdHkuJGljb25VcmwgPSBDb3JlLnBhdGhHZXQoZW50aXR5LCBbJ21ldGFkYXRhJywgJ2Fubm90YXRpb25zJywgJ2ZhYnJpYzguJyArIGlkICsgJy9pY29uVXJsJ10pO1xyXG4gICAgICBlbnRpdHkuJGluZm8gPSBDb3JlLnBhdGhHZXQoZW50aXR5LCBbJ21ldGFkYXRhJywgJ2Fubm90YXRpb25zJywgJ2ZhYnJpYzguJyArIGlkICsgJy9zdW1tYXJ5J10pO1xyXG4gICAgICBpZiAoZW50aXR5LiRpY29uVXJsKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpZCAmJiBuYW1lRmllbGQpIHtcclxuICAgICAgICAodGhpcy50ZW1wbGF0ZXMgfHwgW10pLmZvckVhY2goKHRlbXBsYXRlKSA9PiB7XHJcbiAgICAgICAgICB2YXIgbWV0YWRhdGEgPSB0ZW1wbGF0ZS5tZXRhZGF0YTtcclxuICAgICAgICAgIGlmIChtZXRhZGF0YSkge1xyXG4gICAgICAgICAgICB2YXIgYW5ub3RhdGlvbnMgPSBtZXRhZGF0YS5hbm5vdGF0aW9ucyB8fCB7fTtcclxuICAgICAgICAgICAgdmFyIGljb25VcmwgPSBhbm5vdGF0aW9uc1tcImZhYnJpYzguXCIgKyBpZCArIFwiL2ljb25VcmxcIl0gfHwgYW5ub3RhdGlvbnNbXCJmYWJyaWM4L2ljb25VcmxcIl07XHJcbiAgICAgICAgICAgIGlmIChpY29uVXJsKSB7XHJcbiAgICAgICAgICAgICAgKHRlbXBsYXRlLm9iamVjdHMgfHwgW10pLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBlbnRpdHlOYW1lID0gZ2V0TmFtZShpdGVtKTtcclxuICAgICAgICAgICAgICAgIGlmIChpZCA9PT0gZW50aXR5TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICBlbnRpdHkuJGljb25VcmwgPSBpY29uVXJsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgKHRoaXMuYXBwSW5mb3MgfHwgW10pLmZvckVhY2goKGFwcEluZm8pID0+IHtcclxuICAgICAgICAgIHZhciBpY29uUGF0aCA9IGFwcEluZm8uaWNvblBhdGg7XHJcbiAgICAgICAgICBpZiAoaWNvblBhdGggJiYgIWFuc3dlciAmJiBpY29uUGF0aCAhPT0gXCJudWxsXCIpIHtcclxuICAgICAgICAgICAgdmFyIGljb25VcmwgPSBnaXRQYXRoVG9VcmwoaWNvblBhdGgpO1xyXG4gICAgICAgICAgICB2YXIgaWRzID0gQ29yZS5wYXRoR2V0KGFwcEluZm8sIFtcIm5hbWVzXCIsIG5hbWVGaWVsZF0pO1xyXG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goaWRzLCAoYXBwSWQpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoYXBwSWQgPT09IGlkKSB7XHJcbiAgICAgICAgICAgICAgICBlbnRpdHkuJGljb25VcmwgPSBpY29uVXJsO1xyXG4gICAgICAgICAgICAgICAgZW50aXR5LmFwcFBhdGggPSBhcHBJbmZvLmFwcFBhdGg7XHJcbiAgICAgICAgICAgICAgICBlbnRpdHkuJGluZm8gPSBhcHBJbmZvO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFlbnRpdHkuJGljb25VcmwpIHtcclxuICAgICAgICBlbnRpdHkuJGljb25VcmwgPSBkZWZhdWx0SWNvblVybDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtYXliZUluaXQoKSB7XHJcbiAgICAgIHRoaXMuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2VydmljZXNCeUtleSA9IHt9O1xyXG4gICAgICB0aGlzLnBvZHNCeUtleSA9IHt9O1xyXG4gICAgICB0aGlzLnJlcGxpY2F0aW9uQ29udHJvbGxlcnNCeUtleSA9IHt9O1xyXG5cclxuICAgICAgdGhpcy5wb2RzLmZvckVhY2goKHBvZCkgPT4ge1xyXG4gICAgICAgIGlmICghcG9kLmtpbmQpIHBvZC5raW5kID0gXCJQb2RcIjtcclxuICAgICAgICB0aGlzLnBvZHNCeUtleVtwb2QuX2tleV0gPSBwb2Q7XHJcbiAgICAgICAgdmFyIGhvc3QgPSBnZXRIb3N0KHBvZCk7XHJcbiAgICAgICAgcG9kLiRsYWJlbHNUZXh0ID0gS3ViZXJuZXRlcy5sYWJlbHNUb1N0cmluZyhnZXRMYWJlbHMocG9kKSk7XHJcbiAgICAgICAgaWYgKGhvc3QpIHtcclxuICAgICAgICAgIHBvZC4kbGFiZWxzVGV4dCArPSBsYWJlbEZpbHRlclRleHRTZXBhcmF0b3IgKyBcImhvc3Q9XCIgKyBob3N0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBwb2QuJGljb25VcmwgPSBkZWZhdWx0SWNvblVybDtcclxuICAgICAgICB0aGlzLmRpc2NvdmVyUG9kQ29ubmVjdGlvbnMocG9kKTtcclxuICAgICAgICBwb2QuJGNvbnRhaW5lclBvcnRzID0gW107XHJcblxyXG4gICAgICAgIHZhciBwb2RTdGF0dXMgPSBwb2Quc3RhdHVzIHx8IHt9O1xyXG4gICAgICAgIHZhciBzdGFydFRpbWUgPSBwb2RTdGF0dXMuc3RhcnRUaW1lO1xyXG4gICAgICAgIHBvZC4kc3RhcnRUaW1lID0gbnVsbDtcclxuICAgICAgICBpZiAoc3RhcnRUaW1lKSB7XHJcbiAgICAgICAgICBwb2QuJHN0YXJ0VGltZSA9IG5ldyBEYXRlKHN0YXJ0VGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjcmVhdGVkVGltZSA9IGdldENyZWF0aW9uVGltZXN0YW1wKHBvZCk7XHJcbiAgICAgICAgcG9kLiRjcmVhdGVkVGltZSA9IG51bGw7XHJcbiAgICAgICAgcG9kLiRhZ2UgPSBudWxsO1xyXG4gICAgICAgIGlmIChjcmVhdGVkVGltZSkge1xyXG4gICAgICAgICAgcG9kLiRjcmVhdGVkVGltZSA9IG5ldyBEYXRlKGNyZWF0ZWRUaW1lKTtcclxuICAgICAgICAgIHBvZC4kYWdlID0gaHVtYW5kYXRlLnJlbGF0aXZlVGltZShwb2QuJGNyZWF0ZWRUaW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlYWR5ID0gaXNSZWFkeShwb2QpO1xyXG4gICAgICAgIHBvZC4kcmVhZHkgPSByZWFkeTtcclxuICAgICAgICBwb2QuJHN0YXR1c0NzcyA9IHN0YXR1c1RleHRUb0Nzc0NsYXNzKHBvZFN0YXR1cy5waGFzZSwgcmVhZHkpO1xyXG5cclxuICAgICAgICB2YXIgbWF4UmVzdGFydENvdW50ID0gMDtcclxuICAgICAgICBhbmd1bGFyLmZvckVhY2goQ29yZS5wYXRoR2V0KHBvZCwgW1wic3RhdHVzXCIsIFwiY29udGFpbmVyU3RhdHVzZXNcIl0pLCAoc3RhdHVzKSA9PiB7XHJcbiAgICAgICAgICB2YXIgcmVzdGFydENvdW50ID0gc3RhdHVzLnJlc3RhcnRDb3VudDtcclxuICAgICAgICAgIGlmIChyZXN0YXJ0Q291bnQpIHtcclxuICAgICAgICAgICAgaWYgKHJlc3RhcnRDb3VudCA+IG1heFJlc3RhcnRDb3VudCkge1xyXG4gICAgICAgICAgICAgIG1heFJlc3RhcnRDb3VudCA9IHJlc3RhcnRDb3VudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChtYXhSZXN0YXJ0Q291bnQgKSB7XHJcbiAgICAgICAgICBwb2QuJHJlc3RhcnRDb3VudCA9IG1heFJlc3RhcnRDb3VudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGltYWdlTmFtZXMgPSBcIlwiO1xyXG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChDb3JlLnBhdGhHZXQocG9kLCBbXCJzcGVjXCIsIFwiY29udGFpbmVyc1wiXSksIChjb250YWluZXIpID0+IHtcclxuICAgICAgICAgIHZhciBpbWFnZSA9IGNvbnRhaW5lci5pbWFnZTtcclxuICAgICAgICAgIGlmIChpbWFnZSkge1xyXG4gICAgICAgICAgICBpZiAoIWltYWdlTmFtZXMpIHtcclxuICAgICAgICAgICAgICBpbWFnZU5hbWVzID0gaW1hZ2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaW1hZ2VOYW1lcyA9IGltYWdlTmFtZXMgKyBcIiBcIiArIGltYWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBpZHggPSBpbWFnZS5sYXN0SW5kZXhPZihcIjpcIik7XHJcbiAgICAgICAgICAgIGlmIChpZHggPiAwKSB7XHJcbiAgICAgICAgICAgICAgaW1hZ2UgPSBpbWFnZS5zdWJzdHJpbmcoMCwgaWR4KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcGF0aHMgPSBpbWFnZS5zcGxpdChcIi9cIiwgMyk7XHJcbiAgICAgICAgICAgIGlmIChwYXRocy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICB2YXIgYW5zd2VyID0gbnVsbDtcclxuICAgICAgICAgICAgICBpZiAocGF0aHMubGVuZ3RoID09IDMpIHtcclxuICAgICAgICAgICAgICAgIGFuc3dlciA9IHBhdGhzWzFdICsgXCIvXCIgKyBwYXRoc1syXTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhdGhzLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICBhbnN3ZXIgPSBwYXRoc1swXSArIFwiL1wiICsgcGF0aHNbMV07XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFuc3dlciA9IHBhdGhzWzBdICsgXCIvXCIgKyBwYXRoc1sxXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgY29udGFpbmVyLiRpbWFnZUxpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCJodHRwczovL3JlZ2lzdHJ5Lmh1Yi5kb2NrZXIuY29tL3UvXCIsIGFuc3dlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChjb250YWluZXIucG9ydHMsIChwb3J0KSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBjb250YWluZXJQb3J0ID0gcG9ydC5jb250YWluZXJQb3J0O1xyXG4gICAgICAgICAgICBpZiAoY29udGFpbmVyUG9ydCkge1xyXG4gICAgICAgICAgICAgIHBvZC4kY29udGFpbmVyUG9ydHMucHVzaChjb250YWluZXJQb3J0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcG9kLiRpbWFnZU5hbWVzID0gaW1hZ2VOYW1lcztcclxuICAgICAgICB2YXIgcG9kU3RhdHVzID0gcG9kU3RhdHVzO1xyXG4gICAgICAgIHZhciBwb2RTcGVjID0gKHBvZC5zcGVjIHx8IHt9KTtcclxuICAgICAgICBwb2QuJHBvZElQID0gcG9kU3RhdHVzLnBvZElQO1xyXG4gICAgICAgIHBvZC4kaG9zdCA9IHBvZFNwZWMuaG9zdCB8fCBwb2RTcGVjLm5vZGVOYW1lIHx8IHBvZFN0YXR1cy5ob3N0SVA7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5zZXJ2aWNlcy5mb3JFYWNoKChzZXJ2aWNlKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzZXJ2aWNlLmtpbmQpIHNlcnZpY2Uua2luZCA9IFwiU2VydmljZVwiO1xyXG4gICAgICAgIHRoaXMuc2VydmljZXNCeUtleVtzZXJ2aWNlLl9rZXldID0gc2VydmljZTtcclxuICAgICAgICB2YXIgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihzZXJ2aWNlKTtcclxuICAgICAgICBzZXJ2aWNlLiRwb2RzID0gW107XHJcbiAgICAgICAgaWYgKCFzZXJ2aWNlLiRwb2RDb3VudGVycykge1xyXG4gICAgICAgICAgc2VydmljZS4kcG9kQ291bnRlcnMgPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHBvZExpbmtVcmwgPSBVcmxIZWxwZXJzLmpvaW4oXCIva3ViZXJuZXRlcy9uYW1lc3BhY2VcIiwgc2VydmljZS5tZXRhZGF0YS5uYW1lc3BhY2UsIFwicG9kc1wiKTtcclxuICAgICAgICBfLmFzc2lnbihzZXJ2aWNlLiRwb2RDb3VudGVycywgc2VsZWN0b3IgPyBjcmVhdGVQb2RDb3VudGVycyhzZWxlY3RvciwgdGhpcy5wb2RzLCBzZXJ2aWNlLiRwb2RzLCBLdWJlcm5ldGVzLmxhYmVsc1RvU3RyaW5nKHNlbGVjdG9yLCBcIixcIiksIHBvZExpbmtVcmwpIDoge30pO1xyXG4gICAgICAgIHNlcnZpY2UuJHBvZENvdW50ID0gc2VydmljZS4kcG9kcy5sZW5ndGg7XHJcblxyXG4gICAgICAgIHZhciBzZWxlY3RlZFBvZHMgPSBzZXJ2aWNlLiRwb2RzO1xyXG4gICAgICAgIHNlcnZpY2UuY29ubmVjdFRvID0gc2VsZWN0ZWRQb2RzLm1hcCgocG9kKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcG9kLl9rZXk7XHJcbiAgICAgICAgfSkuam9pbignLCcpO1xyXG4gICAgICAgIHNlcnZpY2UuJGxhYmVsc1RleHQgPSBLdWJlcm5ldGVzLmxhYmVsc1RvU3RyaW5nKGdldExhYmVscyhzZXJ2aWNlKSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVJY29uVXJsQW5kQXBwSW5mbyhzZXJ2aWNlLCBcInNlcnZpY2VOYW1lc1wiKTtcclxuICAgICAgICB2YXIgc3BlYyA9IHNlcnZpY2Uuc3BlYyB8fCB7fTtcclxuICAgICAgICBzZXJ2aWNlLiRwb3J0YWxJUCA9IHNwZWMucG9ydGFsSVA7XHJcbiAgICAgICAgc2VydmljZS4kc2VsZWN0b3JUZXh0ID0gS3ViZXJuZXRlcy5sYWJlbHNUb1N0cmluZyhzcGVjLnNlbGVjdG9yKTtcclxuICAgICAgICB2YXIgcG9ydHMgPSBfLm1hcChzcGVjLnBvcnRzIHx8IFtdLCBcInBvcnRcIik7XHJcbiAgICAgICAgc2VydmljZS4kcG9ydHMgPSBwb3J0cztcclxuICAgICAgICBzZXJ2aWNlLiRwb3J0c1RleHQgPSBwb3J0cy5qb2luKFwiLCBcIik7XHJcbiAgICAgICAgdmFyIGljb25VcmwgPSBzZXJ2aWNlLiRpY29uVXJsO1xyXG4gICAgICAgIGlmIChpY29uVXJsICYmIHNlbGVjdGVkUG9kcykge1xyXG4gICAgICAgICAgc2VsZWN0ZWRQb2RzLmZvckVhY2goKHBvZCkgPT4ge1xyXG4gICAgICAgICAgICBwb2QuJGljb25VcmwgPSBpY29uVXJsO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlcnZpY2UuJHNlcnZpY2VVcmwgPSBzZXJ2aWNlTGlua1VybChzZXJ2aWNlKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnJlcGxpY2F0aW9uQ29udHJvbGxlcnMuZm9yRWFjaCgocmVwbGljYXRpb25Db250cm9sbGVyKSA9PiB7XHJcbiAgICAgICAgaWYgKCFyZXBsaWNhdGlvbkNvbnRyb2xsZXIua2luZCkgcmVwbGljYXRpb25Db250cm9sbGVyLmtpbmQgPSBcIlJlcGxpY2F0aW9uQ29udHJvbGxlclwiO1xyXG4gICAgICAgIHRoaXMucmVwbGljYXRpb25Db250cm9sbGVyc0J5S2V5W3JlcGxpY2F0aW9uQ29udHJvbGxlci5fa2V5XSA9IHJlcGxpY2F0aW9uQ29udHJvbGxlclxyXG4gICAgICAgICAgdmFyIHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IocmVwbGljYXRpb25Db250cm9sbGVyKTtcclxuICAgICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJHBvZHMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoaXNGaWx0ZXJSQyhyZXBsaWNhdGlvbkNvbnRyb2xsZXIpICYmICFpc0luY2x1ZGUodGhpcy5maWx0ZXJSZXBsaWNhdGlvbmNvbnRyb2xsZXJzLCByZXBsaWNhdGlvbkNvbnRyb2xsZXIpKVxyXG4gICAgICAgICAgIHRoaXMuZmlsdGVyUmVwbGljYXRpb25jb250cm9sbGVycy5wdXNoKHJlcGxpY2F0aW9uQ29udHJvbGxlcik7XHJcblxyXG4gICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlci4kcG9kQ291bnRlcnMgPSBzZWxlY3RvciA/IGNyZWF0ZVBvZENvdW50ZXJzKHNlbGVjdG9yLCB0aGlzLnBvZHMsIHJlcGxpY2F0aW9uQ29udHJvbGxlci4kcG9kcykgOiBudWxsO1xyXG4gICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlci4kcG9kQ291bnQgPSByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJHBvZHMubGVuZ3RoO1xyXG4gICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlci4kcmVwbGljYXMgPSAocmVwbGljYXRpb25Db250cm9sbGVyLnNwZWMgfHwge30pLnJlcGxpY2FzO1xyXG5cclxuICAgICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJG9yYWNsZU5hbWUgPSBnZXRPcmFjbGVOYW1lKHJlcGxpY2F0aW9uQ29udHJvbGxlcik7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhnZXROYW1lKHJlcGxpY2F0aW9uQ29udHJvbGxlcikpO1xyXG4gICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlci4kb3JhY2xlU3RhdHVzID0gZ2V0T3JhY2xlU3RhdHVzKGdldExhYmVscyhyZXBsaWNhdGlvbkNvbnRyb2xsZXIpKTtcclxuICAgICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJGV4dHJhY3RTdGF0dXMgPSBnZXRFeHRyYWN0U3RhdHVzKGdldExhYmVscyhyZXBsaWNhdGlvbkNvbnRyb2xsZXIpKTtcclxuXHJcbiAgICAgICAgLy9cclxuICAgICAgICB2YXIgYW5ub3RhdGlvbiA9IGdldEFubm90YXRpb25zKHJlcGxpY2F0aW9uQ29udHJvbGxlcik7XHJcbiAgICAgICAgdmFyIGxhYmVsID0gZ2V0TGFiZWxzKHJlcGxpY2F0aW9uQ29udHJvbGxlcik7ICAgICAgICBcclxuICAgICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJGFsaWFzID0gYW5ub3RhdGlvbi5jaXR5TmFtZSArIFwiX1wiICsgYW5ub3RhdGlvbi5kaXN0cmljdE5hbWUgKyBcIl9cIiArIGFubm90YXRpb24uc3lzdGVtTmFtZSArIFwiX1wiICsgYW5ub3RhdGlvbi55ZWFyICsgXCJfXCIgKyBsYWJlbC52ZXJzaW9uOyAgXHJcblxyXG4gICAgICAgIHZhciBzZWxlY3RlZFBvZHMgPSByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJHBvZHM7XHJcbiAgICAgICAgcmVwbGljYXRpb25Db250cm9sbGVyLmNvbm5lY3RUbyA9IHNlbGVjdGVkUG9kcy5tYXAoKHBvZCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHBvZC5fa2V5O1xyXG4gICAgICAgIH0pLmpvaW4oJywnKTtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGdldExhYmVscyhyZXBsaWNhdGlvbkNvbnRyb2xsZXIpKTsgICAgICAgIFxyXG4gICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlci4kbGFiZWxzVGV4dCA9IEt1YmVybmV0ZXMubGFiZWxzVG9TdHJpbmcoZ2V0TGFiZWxzKHJlcGxpY2F0aW9uQ29udHJvbGxlcikpO1xyXG4gICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlci5tZXRhZGF0YS5sYWJlbHMgPSBsYWJlbHNGb3JtYXQocmVwbGljYXRpb25Db250cm9sbGVyKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUljb25VcmxBbmRBcHBJbmZvKHJlcGxpY2F0aW9uQ29udHJvbGxlciwgXCJyZXBsaWNhdGlvbkNvbnRyb2xsZXJOYW1lc1wiKTtcclxuICAgICAgICB2YXIgaWNvblVybCA9ICByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJGljb25Vcmw7XHJcbiAgICAgICAgaWYgKGljb25VcmwgJiYgc2VsZWN0ZWRQb2RzKSB7XHJcbiAgICAgICAgICBzZWxlY3RlZFBvZHMuZm9yRWFjaCgocG9kKSA9PiB7XHJcbiAgICAgICAgICAgIHBvZC4kaWNvblVybCA9IGljb25Vcmw7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gc2VydmljZXMgbWF5IG5vdCBtYXAgdG8gYW4gaWNvbiBidXQgdGhlaXIgcG9kcyBtYXkgZG8gdmlhIHRoZSBSQ1xyXG4gICAgICAvLyBzbyBsZXRzIGRlZmF1bHQgaXQuLi5cclxuICAgICAgdGhpcy5zZXJ2aWNlcy5mb3JFYWNoKChzZXJ2aWNlKSA9PiB7XHJcbiAgICAgICAgdmFyIGljb25VcmwgPSBzZXJ2aWNlLiRpY29uVXJsO1xyXG4gICAgICAgIHZhciBzZWxlY3RlZFBvZHMgPSBzZXJ2aWNlLiRwb2RzO1xyXG4gICAgICAgIGlmIChzZWxlY3RlZFBvZHMpIHtcclxuICAgICAgICAgIGlmICghaWNvblVybCB8fCBpY29uVXJsID09PSBkZWZhdWx0SWNvblVybCkge1xyXG4gICAgICAgICAgICBpY29uVXJsID0gbnVsbDtcclxuICAgICAgICAgICAgc2VsZWN0ZWRQb2RzLmZvckVhY2goKHBvZCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICghaWNvblVybCkge1xyXG4gICAgICAgICAgICAgICAgaWNvblVybCA9IHBvZC4kaWNvblVybDtcclxuICAgICAgICAgICAgICAgIGlmIChpY29uVXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgIHNlcnZpY2UuJGljb25VcmwgPSBpY29uVXJsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMudXBkYXRlQXBwcygpO1xyXG5cclxuICAgICAgdmFyIHBvZHNCeUhvc3QgPSB7fTtcclxuICAgICAgdGhpcy5wb2RzLmZvckVhY2goKHBvZCkgPT4ge1xyXG4gICAgICAgIHZhciBob3N0ID0gZ2V0SG9zdChwb2QpO1xyXG4gICAgICAgIHZhciBwb2RzRm9ySG9zdCA9IHBvZHNCeUhvc3RbaG9zdF07XHJcbiAgICAgICAgaWYgKCFwb2RzRm9ySG9zdCkge1xyXG4gICAgICAgICAgcG9kc0Zvckhvc3QgPSBbXTtcclxuICAgICAgICAgIHBvZHNCeUhvc3RbaG9zdF0gPSBwb2RzRm9ySG9zdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcG9kc0Zvckhvc3QucHVzaChwb2QpO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5wb2RzQnlIb3N0ID0gcG9kc0J5SG9zdDtcclxuXHJcbiAgICAgIHZhciB0bXBIb3N0cyA9IFtdO1xyXG4gICAgICBmb3IgKHZhciBob3N0S2V5IGluIHBvZHNCeUhvc3QpIHtcclxuICAgICAgICB2YXIgaG9zdFBvZHMgPSBbXTtcclxuICAgICAgICB2YXIgcG9kQ291bnRlcnMgPSBjcmVhdGVQb2RDb3VudGVycygocG9kKSA9PiBnZXRIb3N0KHBvZCkgPT09IGhvc3RLZXksIHRoaXMucG9kcywgaG9zdFBvZHMsIFwiaG9zdD1cIiArIGhvc3RLZXkpO1xyXG4gICAgICAgIHZhciBob3N0SVAgPSBudWxsO1xyXG4gICAgICAgIGlmIChob3N0UG9kcy5sZW5ndGgpIHtcclxuICAgICAgICAgIHZhciBwb2QgPSBob3N0UG9kc1swXTtcclxuICAgICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBwb2Quc3RhdHVzO1xyXG4gICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSkge1xyXG4gICAgICAgICAgICBob3N0SVAgPSBjdXJyZW50U3RhdGUuaG9zdElQO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaG9zdERldGFpbHMgPSB7XHJcbiAgICAgICAgICBuYW1lOiBob3N0S2V5LFxyXG4gICAgICAgICAgaWQ6IGhvc3RLZXksXHJcbiAgICAgICAgICBlbGVtZW50SWQ6IGhvc3RLZXkucmVwbGFjZSgvXFwuL2csICdfJyksXHJcbiAgICAgICAgICBob3N0SVA6IGhvc3RJUCxcclxuICAgICAgICAgIHBvZHM6IGhvc3RQb2RzLFxyXG4gICAgICAgICAga2luZDogXCJIb3N0XCIsXHJcbiAgICAgICAgICAgICRwb2RDb3VudGVyczogcG9kQ291bnRlcnMsXHJcbiAgICAgICAgICAgICRpY29uVXJsOiBob3N0SWNvblVybFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdG1wSG9zdHMucHVzaChob3N0RGV0YWlscyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuaG9zdHMgPSB0bXBIb3N0cztcclxuXHJcbiAgICAgIGVucmljaEJ1aWxkQ29uZmlncyh0aGlzLmJ1aWxkY29uZmlncyk7XHJcbiAgICAgIGVucmljaEV2ZW50cyh0aGlzLmV2ZW50cywgdGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUFwcHMoKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgLy8gbGV0cyBjcmVhdGUgdGhlIGFwcCB2aWV3cyBieSB0cnlpbmcgdG8gam9pbiBjb250cm9sbGVycyAvIHNlcnZpY2VzIC8gcG9kcyB0aGF0IGFyZSByZWxhdGVkXHJcbiAgICAgICAgdmFyIGFwcFZpZXdzID0gW107XHJcblxyXG4gICAgICAgIHRoaXMucmVwbGljYXRpb25Db250cm9sbGVycy5mb3JFYWNoKChyZXBsaWNhdGlvbkNvbnRyb2xsZXIpID0+IHtcclxuICAgICAgICAgIHZhciBuYW1lID0gZ2V0TmFtZShyZXBsaWNhdGlvbkNvbnRyb2xsZXIpO1xyXG4gICAgICAgICAgdmFyICRpY29uVXJsID0gcmVwbGljYXRpb25Db250cm9sbGVyLiRpY29uVXJsO1xyXG4gICAgICAgICAgYXBwVmlld3MucHVzaCh7XHJcbiAgICAgICAgICAgIGFwcFBhdGg6IFwiL2R1bW15UGF0aC9cIiArIG5hbWUsXHJcbiAgICAgICAgICAgICRuYW1lOiBuYW1lLFxyXG4gICAgICAgICAgICAkaW5mbzoge1xyXG4gICAgICAgICAgICAgICRpY29uVXJsOiAkaWNvblVybFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAkaWNvblVybDogJGljb25VcmwsXHJcbiAgICAgICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlcnM6IFtyZXBsaWNhdGlvbkNvbnRyb2xsZXJdLFxyXG4gICAgICAgICAgICBwb2RzOiByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJHBvZHMgfHwgW10sXHJcbiAgICAgICAgICAgIHNlcnZpY2VzOiBbXVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHZhciBub01hdGNoZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnNlcnZpY2VzLmZvckVhY2goKHNlcnZpY2UpID0+IHtcclxuICAgICAgICAgIC8vIG5vdyBsZXRzIHNlZSBpZiB3ZSBjYW4gZmluZCBhbiBhcHAgd2l0aCBhbiBSQyBvZiB0aGUgc2FtZSBzZWxlY3RvclxyXG4gICAgICAgICAgdmFyIG1hdGNoZXNBcHAgPSBudWxsO1xyXG4gICAgICAgICAgYXBwVmlld3MuZm9yRWFjaCgoYXBwVmlldykgPT4ge1xyXG4gICAgICAgICAgICBhcHBWaWV3LnJlcGxpY2F0aW9uQ29udHJvbGxlcnMuZm9yRWFjaCgocmVwbGljYXRpb25Db250cm9sbGVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgdmFyIHJlcFNlbGVjdG9yID0gZ2V0U2VsZWN0b3IocmVwbGljYXRpb25Db250cm9sbGVyKTtcclxuICAgICAgICAgICAgICBpZiAocmVwU2VsZWN0b3IgJiZcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0b3JNYXRjaGVzKHJlcFNlbGVjdG9yLCBnZXRTZWxlY3RvcihzZXJ2aWNlKSkgJiZcclxuICAgICAgICAgICAgICAgICAgZ2V0TmFtZXNwYWNlKHNlcnZpY2UpID09PSBnZXROYW1lc3BhY2UocmVwbGljYXRpb25Db250cm9sbGVyKSkge1xyXG4gICAgICAgICAgICAgICAgbWF0Y2hlc0FwcCA9IGFwcFZpZXc7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGlmIChtYXRjaGVzQXBwKSB7XHJcbiAgICAgICAgICAgIG1hdGNoZXNBcHAuc2VydmljZXMucHVzaChzZXJ2aWNlKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG5vTWF0Y2hlcy5wdXNoKHNlcnZpY2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxvZy5kZWJ1ZyhcIm5vIG1hdGNoZXM6IFwiLCBub01hdGNoZXMpO1xyXG4gICAgICAgIG5vTWF0Y2hlcy5mb3JFYWNoKChzZXJ2aWNlKSA9PiB7XHJcbiAgICAgICAgICB2YXIgYXBwVmlldyA9IF8uZmluZChhcHBWaWV3cywgKGFwcFZpZXcpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIF8uYW55KGFwcFZpZXcucmVwbGljYXRpb25Db250cm9sbGVycywgKHJjKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIF8uc3RhcnRzV2l0aChnZXROYW1lKHJjKSwgZ2V0TmFtZShzZXJ2aWNlKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBpZiAoYXBwVmlldykge1xyXG4gICAgICAgICAgICBhcHBWaWV3LnNlcnZpY2VzLnB1c2goc2VydmljZSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgJGljb25VcmwgPSBzZXJ2aWNlLiRpY29uVXJsO1xyXG4gICAgICAgICAgICBhcHBWaWV3cy5wdXNoKHtcclxuICAgICAgICAgICAgICBhcHBQYXRoOiBcIi9kdW1teVBhdGgvXCIgKyBuYW1lLFxyXG4gICAgICAgICAgICAgICRuYW1lOiBuYW1lLFxyXG4gICAgICAgICAgICAgICRpbmZvOiB7XHJcbiAgICAgICAgICAgICAgICAkaWNvblVybDogJGljb25VcmxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgJGljb25Vcmw6ICRpY29uVXJsLFxyXG4gICAgICAgICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlcnM6IFtdLFxyXG4gICAgICAgICAgICAgIHBvZHM6IHNlcnZpY2UuJHBvZHMgfHwgW10sXHJcbiAgICAgICAgICAgICAgc2VydmljZXM6IFtzZXJ2aWNlXVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKHRoaXMucm91dGVzLCAocm91dGUpID0+IHtcclxuICAgICAgICAgIHZhciBtZXRhZGF0YSA9IHJvdXRlLm1ldGFkYXRhIHx8IHt9O1xyXG4gICAgICAgICAgdmFyIHNwZWMgPSByb3V0ZS5zcGVjIHx8IHt9O1xyXG4gICAgICAgICAgdmFyIHNlcnZpY2VOYW1lID0gQ29yZS5wYXRoR2V0KHNwZWMsIFtcInRvXCIsIFwibmFtZVwiXSk7XHJcbiAgICAgICAgICB2YXIgaG9zdCA9IHNwZWMuaG9zdDtcclxuICAgICAgICAgIHZhciBuYW1lc3BhY2UgPSBnZXROYW1lc3BhY2Uocm91dGUpO1xyXG4gICAgICAgICAgaWYgKHNlcnZpY2VOYW1lICYmIGhvc3QpIHtcclxuICAgICAgICAgICAgdmFyIHNlcnZpY2UgPSB0aGlzLmdldFNlcnZpY2UobmFtZXNwYWNlLCBzZXJ2aWNlTmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChzZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgc2VydmljZS4kaG9zdCA9IGhvc3Q7XHJcblxyXG4gICAgICAgICAgICAgIC8vIFRPRE8gd2UgY291bGQgdXNlIHNvbWUgYW5ub3RhdGlvbnMgLyBtZXRhZGF0YSB0byBkZWR1Y2Ugd2hhdCBVUkwgd2Ugc2hvdWxkIHVzZSB0byBvcGVuIHRoaXNcclxuICAgICAgICAgICAgICAvLyBzZXJ2aWNlIGluIHRoZSBjb25zb2xlLiBGb3Igbm93IGp1c3QgYXNzdW1lIGl0cyBodHRwOlxyXG5cclxuICAgICAgICAgICAgICBpZiAoaG9zdCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGhvc3RVcmwgPSAgaG9zdDtcclxuICAgICAgICAgICAgICAgIGlmIChob3N0VXJsLmluZGV4T2YoXCI6Ly9cIikgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIGhvc3RVcmwgPSBcImh0dHA6Ly9cIiArIGhvc3Q7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBzZXJ2aWNlLiRjb25uZWN0VXJsID0gVXJsSGVscGVycy5qb2luKGhvc3RVcmwsICBcIi9cIik7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAvLyBUT0RPIGRlZmluaXRlbHkgbmVlZCB0aGF0IGFubm90YXRpb24sIHRlbXAgaGFjayBmb3IgYXBpbWFuIGxpbmtcclxuICAgICAgICAgICAgICBpZiAoZ2V0TmFtZShzZXJ2aWNlKSA9PT0gJ2FwaW1hbicgJiYgaG9zdCkge1xyXG4gICAgICAgICAgICAgICAgc2VydmljZS4kY29ubmVjdFVybCA9ICg8YW55PiBuZXcgVVJJKCkuaG9zdChzZXJ2aWNlLiRob3N0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBhdGgoJ2FwaW1hbnVpL2luZGV4Lmh0bWwnKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5xdWVyeSh7fSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5oYXNoKFVSSS5lbmNvZGUoYW5ndWxhci50b0pzb24oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrVG86IG5ldyBVUkkoKS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogSGF3dGlvT0F1dGguZ2V0T0F1dGhUb2tlbigpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSkpLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBsb2cuZGVidWcoXCJDb3VsZCBub3QgZmluZCBzZXJ2aWNlIFwiICsgc2VydmljZU5hbWUgKyBcIiBuYW1lc3BhY2UgXCIgKyBuYW1lc3BhY2UgKyBcIiBmb3Igcm91dGU6IFwiICsgbWV0YWRhdGEubmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgYXBwVmlld3MgPSBfLnNvcnRCeShwb3B1bGF0ZUtleXMoYXBwVmlld3MpLCAoYXBwVmlldykgPT4gYXBwVmlldy5fa2V5KTtcclxuXHJcbiAgICAgICAgQXJyYXlIZWxwZXJzLnN5bmModGhpcy5hcHBWaWV3cywgYXBwVmlld3MsICckbmFtZScpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hcHBJbmZvcyAmJiB0aGlzLmFwcFZpZXdzKSB7XHJcbiAgICAgICAgICB2YXIgZm9sZGVyTWFwID0ge307XHJcbiAgICAgICAgICB2YXIgZm9sZGVycyA9IFtdO1xyXG4gICAgICAgICAgdmFyIGFwcE1hcCA9IHt9O1xyXG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKHRoaXMuYXBwSW5mb3MsIChhcHBJbmZvKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghYXBwSW5mby4kaWNvblVybCAmJiBhcHBJbmZvLmljb25QYXRoICYmIGFwcEluZm8uaWNvblBhdGggIT09IFwibnVsbFwiKSB7XHJcbiAgICAgICAgICAgICAgYXBwSW5mby4kaWNvblVybCA9IGdpdFBhdGhUb1VybChhcHBJbmZvLmljb25QYXRoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgYXBwUGF0aCA9IGFwcEluZm8uYXBwUGF0aDtcclxuICAgICAgICAgICAgaWYgKGFwcFBhdGgpIHtcclxuICAgICAgICAgICAgICBhcHBNYXBbYXBwUGF0aF0gPSBhcHBJbmZvO1xyXG4gICAgICAgICAgICAgIHZhciBpZHggPSBhcHBQYXRoLmxhc3RJbmRleE9mKFwiL1wiKTtcclxuICAgICAgICAgICAgICB2YXIgZm9sZGVyUGF0aCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgaWYgKGlkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBmb2xkZXJQYXRoID0gYXBwUGF0aC5zdWJzdHJpbmcoMCwgaWR4KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZm9sZGVyUGF0aCA9IENvcmUudHJpbUxlYWRpbmcoZm9sZGVyUGF0aCwgXCIvXCIpO1xyXG4gICAgICAgICAgICAgIHZhciBmb2xkZXIgPSBmb2xkZXJNYXBbZm9sZGVyUGF0aF07XHJcbiAgICAgICAgICAgICAgaWYgKCFmb2xkZXIpIHtcclxuICAgICAgICAgICAgICAgIGZvbGRlciA9IHtcclxuICAgICAgICAgICAgICAgICAgcGF0aDogZm9sZGVyUGF0aCxcclxuICAgICAgICAgICAgICAgICAgZXhwYW5kZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgIGFwcHM6IFtdXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgZm9sZGVycy5wdXNoKGZvbGRlcik7XHJcbiAgICAgICAgICAgICAgICBmb2xkZXJNYXBbZm9sZGVyUGF0aF0gPSBmb2xkZXI7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGZvbGRlci5hcHBzLnB1c2goYXBwSW5mbyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5hcHBGb2xkZXJzID0gXy5zb3J0QnkoZm9sZGVycywgXCJwYXRoXCIpO1xyXG5cclxuICAgICAgICAgIHZhciBhcHBzID0gW107XHJcbiAgICAgICAgICB2YXIgZGVmYXVsdEluZm8gPSB7XHJcbiAgICAgICAgICAgICRpY29uVXJsOiBkZWZhdWx0SWNvblVybFxyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2godGhpcy5hcHBWaWV3cywgKGFwcFZpZXc6YW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgdmFyIGFwcFBhdGggPSBhcHBWaWV3LmFwcFBhdGg7XHJcblxyXG4gICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgIFRPRE9cclxuICAgICAgICAgICAgICAgYXBwVmlldy4kc2VsZWN0ID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICBLdWJlcm5ldGVzLnNldEpzb24oJHNjb3BlLCBhcHBWaWV3LmlkLCAkc2NvcGUubW9kZWwuYXBwcyk7XHJcbiAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICovXHJcblxyXG4gICAgICAgICAgICAgIHZhciBhcHBJbmZvOmFueSA9IGFuZ3VsYXIuY29weShkZWZhdWx0SW5mbyk7XHJcbiAgICAgICAgICAgICAgaWYgKGFwcFBhdGgpIHtcclxuICAgICAgICAgICAgICAgIGFwcEluZm8gPSBhcHBNYXBbYXBwUGF0aF0gfHwgYXBwSW5mbztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKCFhcHBWaWV3LiRpbmZvKSB7XHJcbiAgICAgICAgICAgICAgICBhcHBWaWV3LiRpbmZvID0gZGVmYXVsdEluZm87XHJcbiAgICAgICAgICAgICAgICBhcHBWaWV3LiRpbmZvID0gYXBwSW5mbztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYXBwVmlldy5pZCA9IGFwcFBhdGg7XHJcbiAgICAgICAgICAgICAgaWYgKCFhcHBWaWV3LiRuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBhcHBWaWV3LiRuYW1lID0gYXBwSW5mby5uYW1lIHx8IGFwcFZpZXcuJG5hbWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICghYXBwVmlldy4kaWNvblVybCkge1xyXG4gICAgICAgICAgICAgICAgYXBwVmlldy4kaWNvblVybCA9IGFwcEluZm8uJGljb25Vcmw7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGFwcHMucHVzaChhcHBWaWV3KTtcclxuICAgICAgICAgICAgICBhcHBWaWV3LiRwb2RDb3VudGVycyA9IGNyZWF0ZUFwcFZpZXdQb2RDb3VudGVycyhhcHBWaWV3KTtcclxuICAgICAgICAgICAgICBhcHBWaWV3LiRwb2RDb3VudCA9IChhcHBWaWV3LnBvZHMgfHwgW10pLmxlbmd0aDtcclxuICAgICAgICAgICAgICBhcHBWaWV3LiRyZXBsaWNhdGlvbkNvbnRyb2xsZXJzVGV4dCA9IChhcHBWaWV3LnJlcGxpY2F0aW9uQ29udHJvbGxlcnMgfHwgW10pLm1hcCgoaSkgPT4gaVtcIl9rZXlcIl0pLmpvaW4oXCIgXCIpO1xyXG4gICAgICAgICAgICAgIGFwcFZpZXcuJHNlcnZpY2VzVGV4dD0gKGFwcFZpZXcuc2VydmljZXMgfHwgW10pLm1hcCgoaSkgPT4gaVtcIl9rZXlcIl0pLmpvaW4oXCIgXCIpO1xyXG4gICAgICAgICAgICAgIGFwcFZpZXcuJHNlcnZpY2VWaWV3cyA9IGNyZWF0ZUFwcFZpZXdTZXJ2aWNlVmlld3MoYXBwVmlldyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byB1cGRhdGUgYXBwVmlld3M6IFwiICsgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgLy90aGlzLmFwcHMgPSBhcHBzO1xyXG4gICAgICAgICAgdGhpcy5hcHBzID0gdGhpcy5hcHBWaWV3cztcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBsb2cud2FybihcIkNhdWdodCBlcnJvcjogXCIgKyBlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBkaXNjb3ZlclBvZENvbm5lY3Rpb25zKGVudGl0eSkge1xyXG4gICAgICB2YXIgaW5mbyA9IENvcmUucGF0aEdldChlbnRpdHksIFtcInN0YXR1c1wiLCBcImluZm9cIl0pO1xyXG4gICAgICB2YXIgaG9zdFBvcnQgPSBudWxsO1xyXG4gICAgICB2YXIgY3VycmVudFN0YXRlID0gZW50aXR5LnN0YXR1cyB8fCB7fTtcclxuICAgICAgdmFyIGRlc2lyZWRTdGF0ZSA9IGVudGl0eS5zcGVjIHx8IHt9O1xyXG4gICAgICB2YXIgcG9kSWQgPSBnZXROYW1lKGVudGl0eSk7XHJcbiAgICAgIHZhciBob3N0ID0gY3VycmVudFN0YXRlW1wiaG9zdElQXCJdO1xyXG4gICAgICB2YXIgcG9kSVAgPSBjdXJyZW50U3RhdGVbXCJwb2RJUFwiXTtcclxuICAgICAgdmFyIGhhc0RvY2tlciA9IGZhbHNlO1xyXG4gICAgICB2YXIgZm91bmRDb250YWluZXJQb3J0ID0gbnVsbDtcclxuICAgICAgaWYgKGRlc2lyZWRTdGF0ZSkge1xyXG4gICAgICAgIHZhciBjb250YWluZXJzID0gZGVzaXJlZFN0YXRlLmNvbnRhaW5lcnM7XHJcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKGNvbnRhaW5lcnMsIChjb250YWluZXIpID0+IHtcclxuICAgICAgICAgIGlmICghaG9zdFBvcnQpIHtcclxuICAgICAgICAgICAgdmFyIHBvcnRzID0gY29udGFpbmVyLnBvcnRzO1xyXG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2gocG9ydHMsIChwb3J0KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCFob3N0UG9ydCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lclBvcnQgPSBwb3J0LmNvbnRhaW5lclBvcnQ7XHJcbiAgICAgICAgICAgICAgICB2YXIgcG9ydE5hbWUgPSBwb3J0Lm5hbWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVySG9zdFBvcnQgPSBwb3J0Lmhvc3RQb3J0O1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lclBvcnQgPT09IDg3NzggfHwgXCJqb2xva2lhXCIgPT09IHBvcnROYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChjb250YWluZXJQb3J0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvZElQKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmb3VuZENvbnRhaW5lclBvcnQgPSBjb250YWluZXJQb3J0O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVySG9zdFBvcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGhvc3RQb3J0ID0gY29udGFpbmVySG9zdFBvcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZm91bmRDb250YWluZXJQb3J0ICYmIHBvZElkICYmIGlzUnVubmluZyhjdXJyZW50U3RhdGUpKSB7XHJcbiAgICAgICAgaWYgKCFLdWJlcm5ldGVzLmlzT3BlblNoaWZ0KSB7XHJcbiAgICAgICAgICAvLyBUT0RPIHRlbXAgd29ya2Fyb3VuZCBmb3IgazhzIG9uIEdLRSBodHRwczovL2dpdGh1Yi5jb20va3ViZXJuZXRlcy9rdWJlcm5ldGVzL2lzc3Vlcy8xNzE3MlxyXG4gICAgICAgICAgZW50aXR5LiRqb2xva2lhVXJsID0gVXJsSGVscGVycy5qb2luKEt1YmVybmV0ZXMubWFzdGVyQXBpVXJsKCksXHJcbiAgICAgICAgICAgICAgXCJhcGlcIixcclxuICAgICAgICAgICAgICBLdWJlcm5ldGVzLmRlZmF1bHRBcGlWZXJzaW9uLFxyXG4gICAgICAgICAgICAgIFwicHJveHlcIixcclxuICAgICAgICAgICAgICBcIm5hbWVzcGFjZXNcIixcclxuICAgICAgICAgICAgICBlbnRpdHkubWV0YWRhdGEubmFtZXNwYWNlICxcclxuICAgICAgICAgICAgICBcInBvZHNcIixcclxuICAgICAgICAgICAgICAvL1wiaHR0cHM6XCIgKyBwb2RJZCArIFwiOlwiICsgZm91bmRDb250YWluZXJQb3J0LFxyXG4gICAgICAgICAgICAgIHBvZElkICsgXCI6XCIgKyBmb3VuZENvbnRhaW5lclBvcnQsXHJcbiAgICAgICAgICAgICAgXCJqb2xva2lhL1wiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZW50aXR5LiRqb2xva2lhVXJsID0gVXJsSGVscGVycy5qb2luKEt1YmVybmV0ZXMubWFzdGVyQXBpVXJsKCksXHJcbiAgICAgICAgICAgICAgXCJhcGlcIixcclxuICAgICAgICAgICAgICBLdWJlcm5ldGVzLmRlZmF1bHRBcGlWZXJzaW9uLFxyXG4gICAgICAgICAgICAgIFwibmFtZXNwYWNlc1wiLFxyXG4gICAgICAgICAgICAgIGVudGl0eS5tZXRhZGF0YS5uYW1lc3BhY2UgLFxyXG4gICAgICAgICAgICAgIFwicG9kc1wiLFxyXG4gICAgICAgICAgICAgIFwiaHR0cHM6XCIgKyBwb2RJZCArIFwiOlwiICsgZm91bmRDb250YWluZXJQb3J0LFxyXG4gICAgICAgICAgICAgIFwicHJveHkvam9sb2tpYS9cIik7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0VGVtcGxhdGVTZXJ2aWNlKG1vZGVsKSB7XHJcbiAgICB2YXIga2V5ID0gY3JlYXRlS2V5KCdkZWZhdWx0JywgJ3RlbXBsYXRlcycsICdzZXJ2aWNlJyk7XHJcbiAgICB2YXIgYW5zd2VyID0gbW9kZWwuc2VydmljZXNCeUtleVtrZXldO1xyXG4gICAgbG9nLmRlYnVnKFwiZm91bmQgdGVtcGxhdGUgc2VydmljZTogXCIsIGFuc3dlcik7XHJcbiAgICByZXR1cm4gYW5zd2VyO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIG1vZGVsIHNlcnZpY2Ugd2hpY2gga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBwb2RzLCByZXBsaWNhdGlvbiBjb250cm9sbGVycyBhbmQgc2VydmljZXMgYWxvbmdcclxuICAgKiB3aXRoIHRoZWlyIGFzc29jaWF0aW9ucyBhbmQgc3RhdHVzXHJcbiAgICovXHJcbiAgX21vZHVsZS5mYWN0b3J5KCdLdWJlcm5ldGVzTW9kZWwnLCBbJyRyb290U2NvcGUnLCAnJGh0dHAnLCAnS3ViZXJuZXRlc0FwaVVSTCcsICdLdWJlcm5ldGVzU3RhdGUnLCAnV2F0Y2hlclNlcnZpY2UnLCAnJGxvY2F0aW9uJywgJyRyZXNvdXJjZScsICgkcm9vdFNjb3BlLCAkaHR0cCwgQXBwTGlicmFyeVVSTCwgS3ViZXJuZXRlc1N0YXRlLCB3YXRjaGVyOldhdGNoZXJTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJlc291cmNlOm5nLnJlc291cmNlLklSZXNvdXJjZVNlcnZpY2UpID0+IHtcclxuXHJcbiAgICB2YXIgJHNjb3BlID0gbmV3IEt1YmVybmV0ZXNNb2RlbFNlcnZpY2UoKTtcclxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xyXG5cclxuICAgIC8vIGNyZWF0ZSBhbGwgb2Ygb3VyIHJlc291cmNlIGNsYXNzZXNcclxuICAgIHZhciB0eXBlTmFtZXMgPSB3YXRjaGVyLmdldFR5cGVzKCk7XHJcbiAgICBfLmZvckVhY2godHlwZU5hbWVzLCAodHlwZTpzdHJpbmcpID0+IHtcclxuICAgICAgdmFyIHVybFRlbXBsYXRlID0gdXJpVGVtcGxhdGVGb3JLdWJlcm5ldGVzS2luZCh0eXBlKTtcclxuICAgICAgJHNjb3BlW3R5cGUgKyAnUmVzb3VyY2UnXSA9IGNyZWF0ZVJlc291cmNlKHR5cGUsIHVybFRlbXBsYXRlLCAkcmVzb3VyY2UsICRzY29wZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoIWlzT3BlblNoaWZ0KSB7XHJcbiAgICAgIC8vIHJlZ2lzdGVyIGN1c3RvbSBVUkwgZmFjdG9yaWVzIGZvciB0ZW1wbGF0ZXMvcHJvamVjdHNcclxuICAgICAgd2F0Y2hlci5yZWdpc3RlckN1c3RvbVVybEZ1bmN0aW9uKEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5CVUlMRF9DT05GSUdTLCAob3B0aW9uczpLdWJlcm5ldGVzQVBJLks4U09wdGlvbnMpID0+IHtcclxuICAgICAgICB2YXIgdGVtcGxhdGVTZXJ2aWNlID0gZ2V0VGVtcGxhdGVTZXJ2aWNlKCRzY29wZSk7XHJcbiAgICAgICAgaWYgKHRlbXBsYXRlU2VydmljZSkge1xyXG4gICAgICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVNlcnZpY2UucHJveHlVcmwsICcvb2FwaS92MS9uYW1lc3BhY2VzL2RlZmF1bHQvYnVpbGRjb25maWdzLycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfSk7XHJcbiAgICAgIC8vIHJlZ2lzdGVyIGN1c3RvbSBVUkwgZmFjdG9yaWVzIGZvciB0ZW1wbGF0ZXMvcHJvamVjdHNcclxuICAgICAgd2F0Y2hlci5yZWdpc3RlckN1c3RvbVVybEZ1bmN0aW9uKEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5URU1QTEFURVMsIChvcHRpb25zOkt1YmVybmV0ZXNBUEkuSzhTT3B0aW9ucykgPT4ge1xyXG4gICAgICAgIHZhciB0ZW1wbGF0ZVNlcnZpY2UgPSBnZXRUZW1wbGF0ZVNlcnZpY2UoJHNjb3BlKTtcclxuICAgICAgICBpZiAodGVtcGxhdGVTZXJ2aWNlKSB7XHJcbiAgICAgICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKHRlbXBsYXRlU2VydmljZS5wcm94eVVybCwgJy9vYXBpL3YxL25hbWVzcGFjZXMvZGVmYXVsdC90ZW1wbGF0ZXMvJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyByZWdpc3RlciBmb3IgYWxsIHVwZGF0ZXMgb24gb2JqZWN0c1xyXG5cdFx0d2F0Y2hlci5yZWdpc3Rlckxpc3RlbmVyKChvYmplY3RzOk9iamVjdE1hcCkgPT4ge1xyXG5cdFx0XHR2YXIgdHlwZXMgPSB3YXRjaGVyLmdldFR5cGVzKCk7XHJcblx0XHRcdF8uZm9yRWFjaCh0eXBlcywgKHR5cGU6c3RyaW5nKSA9PiB7XHJcblx0XHRcdFx0c3dpdGNoICh0eXBlKSB7XHJcblx0XHRcdFx0XHRjYXNlIFdhdGNoVHlwZXMuU0VSVklDRVM6XHJcblx0XHRcdFx0XHRcdHZhciBpdGVtcyA9IHBvcHVsYXRlS2V5cyhvYmplY3RzW3R5cGVdKTtcclxuXHRcdFx0XHRcdFx0YW5ndWxhci5mb3JFYWNoKGl0ZW1zLCAoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgIGl0ZW0ucHJveHlVcmwgPSBrdWJlcm5ldGVzUHJveHlVcmxGb3JTZXJ2aWNlKGt1YmVybmV0ZXNBcGlVcmwoKSwgaXRlbSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cdFx0XHRcdFx0XHQkc2NvcGVbdHlwZV0gPSBpdGVtcztcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFdhdGNoVHlwZXMuVEVNUExBVEVTOlxyXG4gICAgICAgICAgY2FzZSBXYXRjaFR5cGVzLlJPVVRFUzpcclxuICAgICAgICAgIGNhc2UgV2F0Y2hUeXBlcy5CVUlMRFM6XHJcbiAgICAgICAgICBjYXNlIFdhdGNoVHlwZXMuQlVJTERfQ09ORklHUzpcclxuICAgICAgICAgIGNhc2UgV2F0Y2hUeXBlcy5JTUFHRV9TVFJFQU1TOlxyXG4gICAgICAgICAgICAvLyBkb24ndCBwdXQgYSBicmVhayBoZXJlIDotKVxyXG5cdFx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdFx0JHNjb3BlW3R5cGVdID0gcG9wdWxhdGVLZXlzKG9iamVjdHNbdHlwZV0pO1xyXG5cdFx0XHRcdH1cclxuICAgICAgICBsb2cuZGVidWcoXCJUeXBlOiBcIiwgdHlwZSwgXCIgb2JqZWN0OiBcIiwgJHNjb3BlW3R5cGVdKTtcclxuXHRcdFx0fSk7XHJcblx0XHRcdCRzY29wZS5tYXliZUluaXQoKTtcclxuICAgICAgJHJvb3RTY29wZS4kYnJvYWRjYXN0KCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgJHNjb3BlKTtcclxuICAgICAgQ29yZS4kYXBwbHkoJHJvb3RTY29wZSk7XHJcblx0XHR9KTtcclxuXHJcbiAgICAvLyBzZXQgdGhlIHNlbGVjdGVkIG5hbWVzcGFjZSBpZiBzZXQgaW4gdGhlIGxvY2F0aW9uIGJhclxyXG4gICAgLy8gb3RoZXJ3aXNlIHVzZSB3aGF0ZXZlciBwcmV2aW91c2x5IHNlbGVjdGVkIG5hbWVzcGFjZSBpc1xyXG4gICAgLy8gYXZhaWxhYmxlXHJcbiAgICB2YXIgc2VhcmNoID0gJGxvY2F0aW9uLnNlYXJjaCgpO1xyXG4gICAgaWYgKCduYW1lc3BhY2UnIGluIHNlYXJjaCkge1xyXG4gICAgICB3YXRjaGVyLnNldE5hbWVzcGFjZShzZWFyY2hbJ25hbWVzcGFjZSddKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBzZWxlY3RQb2RzKHBvZHMsIG5hbWVzcGFjZSwgbGFiZWxzKSB7XHJcbiAgICAgIHJldHVybiBwb2RzLmZpbHRlcigocG9kKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGdldE5hbWVzcGFjZShwb2QpID09PSBuYW1lc3BhY2UgJiYgc2VsZWN0b3JNYXRjaGVzKGxhYmVscywgZ2V0TGFiZWxzKHBvZCkpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiAkc2NvcGU7XHJcbiAgfV0pO1xyXG5cclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSW50ZXJmYWNlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc01vZGVsLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyUGx1Z2luLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyRW5yaWNoZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVySGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3Blck5hdmlnYXRpb24udHNcIi8+XHJcblxyXG5tb2R1bGUgRGV2ZWxvcGVyIHtcclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGNsaWNrQXBwcm92ZShlbGVtZW50LCB1cmwpIHtcclxuICAgIHZhciAkc2NvcGU6IGFueSA9IGFuZ3VsYXIuZWxlbWVudChlbGVtZW50KS5zY29wZSgpO1xyXG4gICAgaWYgKCRzY29wZSkge1xyXG4gICAgICAkc2NvcGUuYXBwcm92ZSh1cmwsIGVsZW1lbnQudGV4dCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHBvcnQgdmFyIEplbmtpbnNMb2dDb250cm9sbGVyID0gX21vZHVsZS5jb250cm9sbGVyKFwiRGV2ZWxvcGVyLkplbmtpbnNMb2dDb250cm9sbGVyXCIsICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc1NjaGVtYSxcclxuICAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgJG1vZGFsLCBLdWJlcm5ldGVzQXBpVVJMLCBTZXJ2aWNlUmVnaXN0cnksICRlbGVtZW50KSA9PiB7XHJcblxyXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcblxyXG4gICAgJHNjb3BlLnNlbGVjdGVkQnVpbGQgPSAkc2NvcGUuJGV2YWwoJ2J1aWxkJykgfHwgJHNjb3BlLiRldmFsKCdzZWxlY3RlZEJ1aWxkJyk7XHJcblxyXG4gICAgJHNjb3BlLmlkID0gJHNjb3BlLiRldmFsKCdidWlsZC5pZCcpIHx8ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xyXG4gICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XHJcbiAgICAkc2NvcGUuZW50aXR5Q2hhbmdlZENhY2hlID0ge307XHJcblxyXG4gICAgJGVsZW1lbnQub24oJyRkZXN0cm95JywgKCkgPT4ge1xyXG4gICAgICAkc2NvcGUuJGRlc3Ryb3koKTtcclxuICAgIH0pO1xyXG5cclxuICAgICRzY29wZS5sb2cgPSB7XHJcbiAgICAgIGh0bWw6IFwiXCIsXHJcbiAgICAgIHN0YXJ0OiAwLFxyXG4gICAgICBmaXJzdElkeDogbnVsbFxyXG4gICAgfTtcclxuXHJcbiAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICB1cGRhdGVKZW5raW5zTGluaygpO1xyXG4gICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJHNjb3BlLiRvbignamVua2luc1NlbGVjdGVkQnVpbGQnLCAoZXZlbnQsIGJ1aWxkKSA9PiB7XHJcbiAgICAgIGxvZy5pbmZvKFwiPT09PSBqZW5raW5zIGJ1aWxkIHNlbGVjdGVkISBcIiArIGJ1aWxkLmlkICsgXCIgXCIgKyBidWlsZC4kam9iSWQpO1xyXG4gICAgICAkc2NvcGUuc2VsZWN0ZWRCdWlsZCA9IGJ1aWxkO1xyXG4gICAgfSk7XHJcblxyXG5cclxuICAgICRzY29wZS4kd2F0Y2goJ3NlbGVjdGVkQnVpbGQnLCAoc2VsZWN0ZWRCdWlsZCkgPT4ge1xyXG4gICAgICBsb2cuaW5mbyhcIlNlbGVjdGVkIGJ1aWxkIHVwZGF0ZWQ6IFwiLCBzZWxlY3RlZEJ1aWxkKTtcclxuICAgICAgJHNjb3BlLmZldGNoKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcbiAgICAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IGNyZWF0ZUplbmtpbnNCcmVhZGNydW1icygkc2NvcGUuaWQsIGdldEpvYklkKCksIGdldEJ1aWxkSWQoKSk7XHJcbiAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gY3JlYXRlSmVua2luc1N1Yk5hdkJhcnMoJHNjb3BlLmlkLCBnZXRKb2JJZCgpLCBnZXRCdWlsZElkKCksIHtcclxuICAgICAgbGFiZWw6IFwiTG9nXCIsXHJcbiAgICAgIHRpdGxlOiBcIlZpZXdzIHRoZSBsb2dzIG9mIHRoaXMgYnVpbGRcIlxyXG4gICAgfSk7XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0Sm9iSWQoKSB7XHJcbiAgICAgIC8vIGxldHMgYWxsb3cgdGhlIHBhcmVudCBzY29wZSB0byBiZSB1c2VkIHRvbyBmb3Igd2hlbiB0aGlzIGlzIHVzZWQgYXMgYSBwYW5lbFxyXG4gICAgICByZXR1cm4gJHJvdXRlUGFyYW1zW1wiam9iXCJdIHx8ICgkc2NvcGUuc2VsZWN0ZWRCdWlsZCB8fCB7fSkuJGpvYklkO1xyXG4gICAgfVxyXG4gICAgJHNjb3BlLmdldEpvYklkID0gZ2V0Sm9iSWQ7XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0QnVpbGRJZCgpIHtcclxuICAgICAgLy8gbGV0cyBhbGxvdyB0aGUgcGFyZW50IHNjb3BlIHRvIGJlIHVzZWQgdG9vIGZvciB3aGVuIHRoaXMgaXMgdXNlZCBhcyBhIHBhbmVsXHJcbiAgICAgIHJldHVybiAkcm91dGVQYXJhbXNbXCJidWlsZFwiXSB8fCAoJHNjb3BlLnNlbGVjdGVkQnVpbGQgfHwge30pLmlkO1xyXG4gICAgfVxyXG4gICAgJHNjb3BlLmdldEJ1aWxkSWQgPSBnZXRCdWlsZElkO1xyXG5cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZUplbmtpbnNMaW5rKCkge1xyXG4gICAgICB2YXIgamVua2luc1VybCA9IGplbmtpbnNMaW5rKCk7XHJcbiAgICAgIGlmIChqZW5raW5zVXJsKSB7XHJcbiAgICAgICAgJHNjb3BlLiR2aWV3SmVua2luc0J1aWxkTGluayA9IFVybEhlbHBlcnMuam9pbihqZW5raW5zVXJsLCBcImpvYlwiLCBnZXRKb2JJZCgpLCBnZXRCdWlsZElkKCkpO1xyXG4gICAgICAgICRzY29wZS4kdmlld0plbmtpbnNMb2dMaW5rID0gVXJsSGVscGVycy5qb2luKCRzY29wZS4kdmlld0plbmtpbnNCdWlsZExpbmssIFwiY29uc29sZVwiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciBxdWVyeVNpemUgPSA1MDAwMDtcclxuXHJcbiAgICAkc2NvcGUuYXBwcm92ZSA9ICh1cmwsIG9wZXJhdGlvbikgPT4ge1xyXG4gICAgICB2YXIgbW9kYWwgPSAkbW9kYWwub3Blbih7XHJcbiAgICAgIHRlbXBsYXRlVXJsOiBVcmxIZWxwZXJzLmpvaW4odGVtcGxhdGVQYXRoLCAnamVua2luc0FwcHJvdmVNb2RhbC5odG1sJyksXHJcbiAgICAgIGNvbnRyb2xsZXI6IFsnJHNjb3BlJywgJyRtb2RhbEluc3RhbmNlJywgKCRzY29wZSwgJG1vZGFsSW5zdGFuY2UpID0+IHtcclxuICAgICAgICAkc2NvcGUub3BlcmF0aW9uID0gb3BlcmF0aW9uO1xyXG4gICAgICAgICRzY29wZS5oZWFkZXIgPSBvcGVyYXRpb24gKyBcIj9cIjtcclxuICAgICAgICAkc2NvcGUub2sgPSAoKSA9PiB7XHJcbiAgICAgICAgICBtb2RhbC5jbG9zZSgpO1xyXG4gICAgICAgICAgcG9zdFRvSmVua2lucyh1cmwsIG9wZXJhdGlvbik7XHJcbiAgICAgICAgfTtcclxuICAgICAgICAkc2NvcGUuY2FuY2VsID0gKCkgPT4ge1xyXG4gICAgICAgICAgbW9kYWwuZGlzbWlzcygpO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1dXHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBmdW5jdGlvbiBwb3N0VG9KZW5raW5zKHVyaSwgb3BlcmF0aW9uKSB7XHJcbiAgICAgIHZhciB1cmwgPSAgS3ViZXJuZXRlcy5rdWJlcm5ldGVzUHJveHlVcmxGb3JTZXJ2aWNlQ3VycmVudE5hbWVzcGFjZShqZW5raW5zU2VydmljZU5hbWVBbmRQb3J0LCB1cmkpO1xyXG4gICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgdmFyIGJvZHkgPSBudWxsO1xyXG4gICAgICAgIHZhciBjb25maWcgPSB7XHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGxvZy5pbmZvKFwicG9zdGluZyB0byBqZW5raW5zVXJsOiBcIiArIHVybCk7XHJcbiAgICAgICAgJGh0dHAucG9zdCh1cmwsIGJvZHksIGNvbmZpZykuXHJcbiAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICBsb2cuaW5mbyhcIk1hbmFnZWQgdG8gXCIgKyBvcGVyYXRpb24gKyBcIiBhdCBcIiArIHVybCk7XHJcbiAgICAgICAgICB9KS5cclxuICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIFwiICsgb3BlcmF0aW9uICsgXCIgam9iIGF0IFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxvZy53YXJuKFwiQ2Fubm90IHBvc3QgdG8gamVua2lucyBVUkk6IFwiICsgdXJpICsgXCIgYXMgbm8gamVua2lucyBmb3VuZCFcIik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAkc2NvcGUuJGtlZXBQb2xsaW5nID0gKCkgPT4gS3ViZXJuZXRlcy5rZWVwUG9sbGluZ01vZGVsO1xyXG5cclxuICAgICRzY29wZS5mZXRjaCA9IFBvbGxIZWxwZXJzLnNldHVwUG9sbGluZygkc2NvcGUsIChuZXh0OigpID0+IHZvaWQpID0+IHtcclxuICAgICAgaWYgKCRzY29wZS4kZXZhbCgnaGlkZUxvZ3MgJiYgIWJ1aWxkLmJ1aWxkaW5nJykpIHtcclxuICAgICAgICBsb2cuZGVidWcoXCJMb2cgaGlkZGVuLCBub3QgZmV0Y2hpbmcgbG9nc1wiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbG9nLmRlYnVnKFwiRmV0Y2hpbmcgbG9ncyBmb3IgYnVpbGQ6IFwiLCAkc2NvcGUuJGV2YWwoJ2J1aWxkJykpO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciBidWlsZElkID0gZ2V0QnVpbGRJZCgpO1xyXG4gICAgICB2YXIgam9iSWQgPSBnZXRKb2JJZCgpO1xyXG4gICAgICAvL2xvZy5pbmZvKFwiPT09IGplbmtpbnMgbG9nIHF1ZXJ5aW5nIGpvYiBcIiArIGpvYklkICsgXCIgYnVpbGQgXCIgKyBidWlsZElkICsgXCIgc2VsZWN0ZWQgYnVpbGQgXCIgKyAgJHNjb3BlLnNlbGVjdGVkQnVpbGQpO1xyXG4gICAgICBpZiAoam9iSWQgJiYgYnVpbGRJZCkge1xyXG4gICAgICAgIGlmICgkc2NvcGUuYnVpbGRJZCAhPT0gYnVpbGRJZCB8fCAkc2NvcGUuam9iSWQgIT09IGpvYklkKSB7XHJcbiAgICAgICAgICAvLyBsZXRzIGNsZWFyIHRoZSBxdWVyeVxyXG4gICAgICAgICAgJHNjb3BlLmxvZyA9IHtcclxuICAgICAgICAgICAgaHRtbDogXCJcIixcclxuICAgICAgICAgICAgc3RhcnQ6IDAsXHJcbiAgICAgICAgICAgIGZpcnN0SWR4OiBudWxsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICAkc2NvcGUuYnVpbGRJZCA9IGJ1aWxkSWQ7XHJcbiAgICAgICAgJHNjb3BlLmpvYklkID0gam9iSWQ7XHJcblxyXG4gICAgICAgIHZhciB1cmwgPSBLdWJlcm5ldGVzLmt1YmVybmV0ZXNQcm94eVVybEZvclNlcnZpY2VDdXJyZW50TmFtZXNwYWNlKGplbmtpbnNTZXJ2aWNlTmFtZUFuZFBvcnQsIFVybEhlbHBlcnMuam9pbihcImpvYlwiLCBqb2JJZCwgYnVpbGRJZCwgXCJmYWJyaWM4L2xvZ0h0bWw/dGFpbD0xJnN0YXJ0PVwiICsgJHNjb3BlLmxvZy5zdGFydCArIFwiJnNpemU9XCIgKyBxdWVyeVNpemUpKTtcclxuICAgICAgICBpZiAoJHNjb3BlLmxvZy5maXJzdElkeCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgdXJsICs9IFwiJmZpcnN0PVwiICsgJHNjb3BlLmxvZy5maXJzdElkeDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHVybCAmJiAoISRzY29wZS5sb2cuZmV0Y2hlZCB8fCBLdWJlcm5ldGVzLmtlZXBQb2xsaW5nTW9kZWwpKSB7XHJcbiAgICAgICAgICAkaHR0cC5nZXQodXJsKS5cclxuICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlcGxhY2VDbHVzdGVySVBzSW5IdG1sID0gcmVwbGFjZUNsdXN0ZXJJcEZ1bmN0aW9uKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCEkc2NvcGUubG9nLmxvZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgJHNjb3BlLmxvZy5sb2dzID0gW107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgbGluZXMgPSBkYXRhLmxpbmVzO1xyXG4gICAgICAgICAgICAgICAgdmFyIHJldHVybmVkTGVuZ3RoID0gZGF0YS5yZXR1cm5lZExlbmd0aDtcclxuICAgICAgICAgICAgICAgIHZhciBsb2dMZW5ndGggPSBkYXRhLmxvZ0xlbmd0aDtcclxuICAgICAgICAgICAgICAgIHZhciByZXR1cm5lZFN0YXJ0ID0gZGF0YS5zdGFydDtcclxuICAgICAgICAgICAgICAgIHZhciBlYXJsaWVyTG9nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAoYW5ndWxhci5pc0RlZmluZWQocmV0dXJuZWRTdGFydCkpIHtcclxuICAgICAgICAgICAgICAgICAgZWFybGllckxvZyA9IHJldHVybmVkU3RhcnQgPCAkc2NvcGUubG9nLnN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIGxpbmVTcGxpdCA9IGRhdGEubGluZVNwbGl0O1xyXG4gICAgICAgICAgICAgICAgLy8gbG9nLmluZm8oXCJzdGFydCB3YXM6IFwiICsgJHNjb3BlLmxvZy5zdGFydCArIFwiIGZpcnN0OiBcIiArICRzY29wZS5sb2cuZmlyc3RJZHggKyBcIiA9PiByZXR1cm5lZExlbmd0aDogXCIgKyByZXR1cm5lZExlbmd0aCArIFwiIGxvZ0xlbmd0aDogXCIgKyBsb2dMZW5ndGggKyAgXCIgcmV0dXJuZWRTdGFydDogXCIgKyByZXR1cm5lZFN0YXJ0ICsgXCIgZWFybGllckxvZzogXCIgKyBlYXJsaWVyTG9nICsgXCIgbGluZVNwbGl0OiBcIiArIGxpbmVTcGxpdCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobGluZXMpIHtcclxuICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRMb2dzID0gJHNjb3BlLmxvZy5sb2dzO1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gbGV0cyByZS1qb2luIHNwbGl0IGxpbmVzXHJcbiAgICAgICAgICAgICAgICAgIGlmIChsaW5lU3BsaXQgJiYgY3VycmVudExvZ3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3RJbmRleDtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdE9mTGluZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWFybGllckxvZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgIHJlc3RPZkxpbmUgPSBsaW5lcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN0T2ZMaW5lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMb2dzW2xhc3RJbmRleF0gPSByZXBsYWNlQ2x1c3RlcklQc0luSHRtbChyZXN0T2ZMaW5lICsgY3VycmVudExvZ3NbbGFzdEluZGV4XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9IGN1cnJlbnRMb2dzLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZXN0T2ZMaW5lID0gbGluZXMuc2hpZnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN0T2ZMaW5lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMb2dzW2xhc3RJbmRleF0gPSByZXBsYWNlQ2x1c3RlcklQc0luSHRtbChjdXJyZW50TG9nc1tsYXN0SW5kZXhdICsgcmVzdE9mTGluZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBsaW5lc1tpXSA9IHJlcGxhY2VDbHVzdGVySVBzSW5IdG1sKGxpbmVzW2ldKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAoZWFybGllckxvZykge1xyXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5sb2cubG9ncyA9IGxpbmVzLmNvbmNhdChjdXJyZW50TG9ncyk7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmxvZy5sb2dzID0gY3VycmVudExvZ3MuY29uY2F0KGxpbmVzKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIG1vdmVGb3J3YXJkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZChyZXR1cm5lZFN0YXJ0KSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAocmV0dXJuZWRTdGFydCA+ICRzY29wZS5sb2cuc3RhcnQgJiYgJHNjb3BlLmxvZy5zdGFydCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHdlJ3ZlIGp1bXBlZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIHRvIHJlYWQgdGhlIHRhaWwgb2YgaXRcclxuICAgICAgICAgICAgICAgICAgICAkc2NvcGUubG9nLnN0YXJ0ID0gcmV0dXJuZWRTdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAkc2NvcGUubG9nLmZpcnN0SWR4ID0gcmV0dXJuZWRTdGFydDtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkc2NvcGUubG9nLmZpcnN0SWR4ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gbGV0cyByZW1lbWJlciB3aGVyZSB0aGUgZmlyc3QgcmVxdWVzdCBzdGFydGVkXHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmxvZy5maXJzdElkeCA9IHJldHVybmVkU3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmV0dXJuZWRTdGFydCA8ICRzY29wZS5sb2cuZmlyc3RJZHgpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSd2ZSBnb3QgYW4gZWFybGllciBiaXQgb2YgdGhlIGxvZ1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFmdGVyIHN0YXJ0aW5nIGF0IHRoZSB0YWlsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc28gbGV0cyBtb3ZlIGZpcnN0SWR4IGJhY2t3YXJkcyBhbmQgbGVhdmUgc3RhcnQgYXMgaXQgaXMgKGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUpXHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmxvZy5maXJzdElkeCA9IHJldHVybmVkU3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbW92ZUZvcndhcmQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG1vdmVGb3J3YXJkICYmIHJldHVybmVkTGVuZ3RoICYmICFlYXJsaWVyTG9nKSB7XHJcbiAgICAgICAgICAgICAgICAgICRzY29wZS5sb2cuc3RhcnQgKz0gcmV0dXJuZWRMZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChsb2dMZW5ndGggJiYgJHNjb3BlLmxvZy5zdGFydCA+IGxvZ0xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5sb2cuc3RhcnQgPSBsb2dMZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHVwZGF0ZUplbmtpbnNMaW5rKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICRzY29wZS5sb2cuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgLy8gQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgICAgICBuZXh0KCk7XHJcbiAgICAgICAgICAgIH0pLlxyXG4gICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XHJcbiAgICAgICAgICAgIG5leHQoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAkc2NvcGUubG9nLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgbmV4dCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKCRzY29wZS5mZXRjaCkpIHtcclxuICAgICAgJHNjb3BlLmZldGNoKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZ1bmN0aW9uIHJlcGxhY2VDbHVzdGVySXBGdW5jdGlvbigpIHtcclxuICAgICAgZnVuY3Rpb24gY3JlYXRlUmVwbGFjZUZ1bmN0aW9uKGZyb20sIHRvKSB7XHJcbiAgICAgICAgcmV0dXJuICh0ZXh0KSA9PiByZXBsYWNlVGV4dCh0ZXh0LCBmcm9tLCB0byk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciByZXBsYWNlbWVudHMgPSBbXTtcclxuICAgICAgYW5ndWxhci5mb3JFYWNoKCRzY29wZS5tb2RlbC5zZXJ2aWNlcywgKHNlcnZpY2UpID0+IHtcclxuICAgICAgICB2YXIgJHBvcnRhbElQID0gc2VydmljZS4kcG9ydGFsSVA7XHJcbiAgICAgICAgdmFyICRzZXJ2aWNlVXJsID0gc2VydmljZS4kc2VydmljZVVybDtcclxuICAgICAgICB2YXIgJHBvcnRzVGV4dCA9IHNlcnZpY2UuJHBvcnRzVGV4dDtcclxuICAgICAgICBpZiAoJHBvcnRhbElQICYmICRzZXJ2aWNlVXJsKSB7XHJcbiAgICAgICAgICB2YXIgaWR4ID0gJHNlcnZpY2VVcmwuaW5kZXhPZihcIjovL1wiKTtcclxuICAgICAgICAgIGlmIChpZHggPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciByZXBsYWNlV2l0aCA9ICRzZXJ2aWNlVXJsLnN1YnN0cmluZyhpZHgsICRzZXJ2aWNlVXJsLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGlmICghcmVwbGFjZVdpdGguZW5kc1dpdGgoXCIvXCIpKSB7XHJcbiAgICAgICAgICAgICAgcmVwbGFjZVdpdGggKz0gXCIvXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJlcGxhY2VXaXRoLmxlbmd0aCA+IDQpIHtcclxuICAgICAgICAgICAgICByZXBsYWNlbWVudHMucHVzaChjcmVhdGVSZXBsYWNlRnVuY3Rpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgXCI6Ly9cIiArICRwb3J0YWxJUCArIFwiL1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoXHJcbiAgICAgICAgICAgICAgICAgICAgKSk7XHJcbiAgICAgICAgICAgICAgaWYgKCRwb3J0c1RleHQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzdWZmaXggPSBcIjpcIiArICRwb3J0c1RleHQ7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2VydmljZVdpdGhQb3J0ID0gcmVwbGFjZVdpdGguc3Vic3RyaW5nKDAsIHJlcGxhY2VXaXRoLmxlbmd0aCAtIDEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFzZXJ2aWNlV2l0aFBvcnQuZW5kc1dpdGgoc3VmZml4KSkge1xyXG4gICAgICAgICAgICAgICAgICBzZXJ2aWNlV2l0aFBvcnQgKz0gc3VmZml4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc2VydmljZVdpdGhQb3J0ICs9IFwiL1wiO1xyXG4gICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2goY3JlYXRlUmVwbGFjZUZ1bmN0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCI6Ly9cIiArICRwb3J0YWxJUCArIFwiOlwiICsgJHBvcnRzVGV4dCArIFwiL1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2VydmljZVdpdGhQb3J0XHJcbiAgICAgICAgICAgICAgICAgICAgICApKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgZnVuY3Rpb24gYWRkUmVwbGFjZUZuKGZyb20sIHRvKSB7XHJcbiAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2goKHRleHQpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXBsYWNlVGV4dCh0ZXh0LCBmcm9tLCB0byk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB9XHJcbiAgICAgIGFkZFJlcGxhY2VGbihcIltJTkZPXVwiLCBcIjxzcGFuIGNsYXNzPSdsb2ctc3VjY2Vzcyc+W0lORk9dPC9zcGFuPlwiKTtcclxuICAgICAgYWRkUmVwbGFjZUZuKFwiW1dBUk5dXCIsIFwiPHNwYW4gY2xhc3M9J2xvZy13YXJuJz5bV0FSTl08L3NwYW4+XCIpO1xyXG4gICAgICBhZGRSZXBsYWNlRm4oXCJbV0FSTklOR11cIiwgXCI8c3BhbiBjbGFzcz0nbG9nLXdhcm4nPltXQVJOSU5HXTwvc3Bhbj5cIik7XHJcbiAgICAgIGFkZFJlcGxhY2VGbihcIltFUlJPUl1cIiwgXCI8c3BhbiBjbGFzcz0nbG9nLWVycm9yJz5bRVJST1JdPC9zcGFuPlwiKTtcclxuICAgICAgYWRkUmVwbGFjZUZuKFwiRkFJTFVSRVwiLCBcIjxzcGFuIGNsYXNzPSdsb2ctZXJyb3InPkZBSUxVUkU8L3NwYW4+XCIpO1xyXG4gICAgICBhZGRSZXBsYWNlRm4oXCJTVUNDRVNTXCIsIFwiPHNwYW4gY2xhc3M9J2xvZy1zdWNjZXNzJz5TVUNDRVNTPC9zcGFuPlwiKTtcclxuXHJcbiAgICAgIC8vIGxldHMgdHJ5IGNvbnZlcnQgdGhlIFByb2NlZWQgLyBBYm9ydCBsaW5rc1xyXG4gICAgICByZXBsYWNlbWVudHMucHVzaCgodGV4dCkgPT4ge1xyXG4gICAgICAgIHZhciBwcmVmaXggPSBcIjxhIGhyZWY9JyMnIG9uY2xpY2s9XFxcIm5ldyBBamF4LlJlcXVlc3QoJ1wiO1xyXG4gICAgICAgIHZhciBpZHggPSAwO1xyXG4gICAgICAgIHdoaWxlIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgaWR4ID0gdGV4dC5pbmRleE9mKHByZWZpeCwgaWR4KTtcclxuICAgICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICB2YXIgc3RhcnQgPSBpZHggKyBwcmVmaXgubGVuZ3RoO1xyXG4gICAgICAgICAgICB2YXIgZW5kUXVvdGUgPSB0ZXh0LmluZGV4T2YoXCInXCIsIHN0YXJ0ICsgMSk7XHJcbiAgICAgICAgICAgIGlmIChlbmRRdW90ZSA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGVuZERvdWJsZVF1b3RlID0gdGV4dC5pbmRleE9mKCdcIicsIGVuZFF1b3RlICsgMSk7XHJcbiAgICAgICAgICAgIGlmIChlbmREb3VibGVRdW90ZSA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHVybCA9IHRleHQuc3Vic3RyaW5nKHN0YXJ0LCBlbmRRdW90ZSk7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gdXNpbmcgJGNvbXBpbGUgaXMgYSB0YWQgY29tcGxleCwgZm9yIG5vdyBsZXRzIGNoZWF0IHdpdGggYSBsaXR0bGUgb25jbGljayA7KVxyXG4gICAgICAgICAgICAvL3RleHQgPSB0ZXh0LnN1YnN0cmluZygwLCBpZHgpICsgXCI8YSBjbGFzcz0nYnRuIGJ0bi1kZWZhdWx0IGJ0bi1sZycgbmctY2xpY2s9XFxcImFwcHJvdmUoJ1wiICsgdXJsICsgXCInKVxcXCJcIiArIHRleHQuc3Vic3RyaW5nKGVuZERvdWJsZVF1b3RlICsgMSk7XHJcbiAgICAgICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cmluZygwLCBpZHgpICsgXCI8YSBjbGFzcz0nYnRuIGJ0bi1kZWZhdWx0IGJ0bi1sZycgb25jbGljaz1cXFwiRGV2ZWxvcGVyLmNsaWNrQXBwcm92ZSh0aGlzLCAnXCIgKyB1cmwgKyBcIicpXFxcIlwiICsgdGV4dC5zdWJzdHJpbmcoZW5kRG91YmxlUXVvdGUgKyAxKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRleHQ7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZnVuY3Rpb24odGV4dCkge1xyXG4gICAgICAgIHZhciBhbnN3ZXIgPSB0ZXh0O1xyXG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChyZXBsYWNlbWVudHMsIChmbikgPT4ge1xyXG4gICAgICAgICAgYW5zd2VyID0gZm4oYW5zd2VyKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gYW5zd2VyO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcmVwbGFjZVRleHQodGV4dCwgZnJvbSwgdG8pIHtcclxuICAgICAgaWYgKGZyb20gJiYgdG8gJiYgdGV4dCkge1xyXG4gICAgICAgIC8vbG9nLmluZm8oXCJSZXBsYWNpbmcgJ1wiICsgZnJvbSArIFwiJyA9PiAnXCIgKyB0byArIFwiJ1wiKTtcclxuICAgICAgICB2YXIgaWR4ID0gMDtcclxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgICAgaWR4ID0gdGV4dC5pbmRleE9mKGZyb20sIGlkeCk7XHJcbiAgICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIGlkeCkgKyB0byArIHRleHQuc3Vic3RyaW5nKGlkeCArIGZyb20ubGVuZ3RoKTtcclxuICAgICAgICAgICAgaWR4ICs9IHRvLmxlbmd0aDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGV4dDtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckVucmljaGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJOYXZpZ2F0aW9uLnRzXCIvPlxyXG5cclxubW9kdWxlIERldmVsb3BlciB7XHJcblxyXG4gIGV4cG9ydCB2YXIgSmVua2luc01ldHJpY3NDb250cm9sbGVyID0gY29udHJvbGxlcihcIkplbmtpbnNNZXRyaWNzQ29udHJvbGxlclwiLFxyXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgXCJTZXJ2aWNlUmVnaXN0cnlcIixcclxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxyXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwsIFNlcnZpY2VSZWdpc3RyeSkgPT4ge1xyXG5cclxuICAgICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuICAgICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcbiAgICAgICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XHJcbiAgICAgICAgJHNjb3BlLmpvYklkID0gJHJvdXRlUGFyYW1zW1wiam9iXCJdO1xyXG4gICAgICAgICRzY29wZS5zY2hlbWEgPSBLdWJlcm5ldGVzU2NoZW1hO1xyXG4gICAgICAgICRzY29wZS5qZW5raW5zID0gbnVsbDtcclxuICAgICAgICAkc2NvcGUuZW50aXR5Q2hhbmdlZENhY2hlID0ge307XHJcblxyXG4gICAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcclxuICAgICAgICAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0QnJlYWRjcnVtYnMoJHNjb3BlLmlkKTtcclxuICAgICAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RTdWJOYXZCYXJzKCRzY29wZS5pZCwgJHNjb3BlLmpvYklkKTtcclxuXHJcbiAgICAgICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xyXG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkc2NvcGUub3B0aW9ucyA9IHtcclxuICAgICAgICAgIGNoYXJ0OiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICdkaXNjcmV0ZUJhckNoYXJ0JyxcclxuICAgICAgICAgICAgYXV0b3JlZnJlc2g6IGZhbHNlLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IDQ1MCxcclxuICAgICAgICAgICAgbWFyZ2luOiB7XHJcbiAgICAgICAgICAgICAgdG9wOiAyMCxcclxuICAgICAgICAgICAgICByaWdodDogMjAsXHJcbiAgICAgICAgICAgICAgYm90dG9tOiA2MCxcclxuICAgICAgICAgICAgICBsZWZ0OiA0NVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjbGlwRWRnZTogdHJ1ZSxcclxuICAgICAgICAgICAgc3RhZ2dlckxhYmVsczogZmFsc2UsXHJcbiAgICAgICAgICAgIHRyYW5zaXRpb25EdXJhdGlvbjogNTAwLFxyXG4gICAgICAgICAgICBzdGFja2VkOiBmYWxzZSxcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXHJcbiAgICAgICAgICAgIHRvb2x0aXA6IHtcclxuICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgIGNvbnRlbnRHZW5lcmF0b3I6IChhcmdzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGFyZ3MuZGF0YSB8fCB7fTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLnRvb2x0aXA7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY29sb3I6IChkLCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGQuY29sb3I7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHhBeGlzOiB7XHJcbiAgICAgICAgICAgICAgYXhpc0xhYmVsOiAnQnVpbGRzJyxcclxuICAgICAgICAgICAgICBzaG93TWF4TWluOiBmYWxzZSxcclxuICAgICAgICAgICAgICB0aWNrRm9ybWF0OiBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiI1wiICsgZDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHlBeGlzOiB7XHJcbiAgICAgICAgICAgICAgYXhpc0xhYmVsOiAnQnVpbGQgRHVyYXRpb24gKHNlY29uZHMpJyxcclxuICAgICAgICAgICAgICB0aWNrRm9ybWF0OiBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGQzLmZvcm1hdCgnLC4xZicpKGQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgICRzY29wZS5kYXRhID0gW107XHJcblxyXG4gICAgICAgIHVwZGF0ZURhdGEoKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gYmFyQ29sb3VyRm9yQnVpbGRSZXN1bHQocmVzdWx0KSB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IFwiRkFJTFVSRVwiIHx8IHJlc3VsdCA9PT0gXCJGQUlMRURcIikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBcInJlZFwiO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJBQk9SVEVEXCIgfHwgcmVzdWx0ID09PSBcIklOVEVSVVBURURcIikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBcInRhblwiO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJTVUNDRVNTXCIpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gXCJncmVlblwiO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJOT1RfU1RBUlRFRFwiKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIFwibGlnaHRncmV5XCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIFwiZGFya2dyZXlcIjtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVDaGFydERhdGEoKSB7XHJcbiAgICAgICAgICB2YXIgdXNlU2luZ2xlU2V0ID0gdHJ1ZTtcclxuICAgICAgICAgIHZhciBidWlsZHNTdWNjZWVkZWQgPSBbXTtcclxuICAgICAgICAgIHZhciBidWlsZHNGYWlsZWQgPSBbXTtcclxuICAgICAgICAgIHZhciBzdWNjZXNzQnVpbGRLZXkgPSBcIlN1Y2NlZWRlZCBidWlsZHNcIjtcclxuICAgICAgICAgIHZhciBmYWlsZWRCdWlsZEtleSA9IFwiRmFpbGVkIGJ1aWxkc1wiO1xyXG5cclxuICAgICAgICAgIGlmICh1c2VTaW5nbGVTZXQpIHtcclxuICAgICAgICAgICAgc3VjY2Vzc0J1aWxkS2V5ID0gXCJCdWlsZHNcIjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB2YXIgY291bnQgPSAwO1xyXG4gICAgICAgICAgdmFyIGJ1aWxkcyA9IF8uc29ydEJ5KCRzY29wZS5tZXRyaWNzLmJ1aWxkcyB8fCBbXSwgXCJudW1iZXJcIik7XHJcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goYnVpbGRzLCAoYnVpbGQ6YW55KSA9PiB7XHJcbiAgICAgICAgICAgIHZhciB4ID0gYnVpbGQubnVtYmVyO1xyXG4gICAgICAgICAgICB2YXIgeSA9IGJ1aWxkLmR1cmF0aW9uIC8gMTAwMDtcclxuICAgICAgICAgICAgdmFyIGRhdGUgPSBEZXZlbG9wZXIuYXNEYXRlKGJ1aWxkLnRpbWVJbk1pbGxpcyk7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBidWlsZC5yZXN1bHQgfHwgXCJOT1RfU1RBUlRFRFwiO1xyXG4gICAgICAgICAgICB2YXIgY29sb3IgPSBiYXJDb2xvdXJGb3JCdWlsZFJlc3VsdChyZXN1bHQpO1xyXG4gICAgICAgICAgICB2YXIgaWNvbkNsYXNzID0gY3JlYXRlQnVpbGRTdGF0dXNJY29uQ2xhc3MocmVzdWx0KTtcclxuICAgICAgICAgICAgdmFyIHRvb2x0aXAgPSAnPGgzPjxpIGNsYXNzPVwiJyArIGljb25DbGFzcyArICdcIj48L2k+ICcgKyBidWlsZC5kaXNwbGF5TmFtZSArICc8L2gzPicgK1xyXG4gICAgICAgICAgICAgICc8cD5kdXJhdGlvbjogPGI+JyArIHkgKyAnPC9iPiBzZWNvbmRzPC9wPic7XHJcbiAgICAgICAgICAgIGlmIChkYXRlKSB7XHJcbiAgICAgICAgICAgICAgdG9vbHRpcCArPSAnPHA+c3RhcnRlZDogPGI+JyArIGRhdGUgKyAnPC9iPjwvcD4nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICB0b29sdGlwICs9ICc8cD5yZXN1bHQ6IDxiPicgKyByZXN1bHQgKyAnPC9iPjwvcD4nO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoeCkge1xyXG4gICAgICAgICAgICAgIHZhciBkYXRhID0gYnVpbGRzU3VjY2VlZGVkO1xyXG4gICAgICAgICAgICAgIHZhciBrZXkgPSBzdWNjZXNzQnVpbGRLZXk7XHJcbiAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzQnVpbGRLZXkgJiYgKCFyZXN1bHQgfHwgIXJlc3VsdC5zdGFydHNXaXRoKFwiU1VDQ1wiKSkpIHtcclxuICAgICAgICAgICAgICAgIGRhdGEgPSBidWlsZHNGYWlsZWQ7XHJcbiAgICAgICAgICAgICAgICBrZXkgPSBmYWlsZWRCdWlsZEtleTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZGF0YS5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHRvb2x0aXA6IHRvb2x0aXAsXHJcbiAgICAgICAgICAgICAgICBjb2xvcjogY29sb3IsXHJcbiAgICAgICAgICAgICAgICB4OiB4LCB5OiB5fSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgJHNjb3BlLmRhdGEgPSBbXTtcclxuICAgICAgICAgIGlmIChidWlsZHNTdWNjZWVkZWQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICRzY29wZS5kYXRhLnB1c2goe1xyXG4gICAgICAgICAgICAgIGtleTogc3VjY2Vzc0J1aWxkS2V5LFxyXG4gICAgICAgICAgICAgIHZhbHVlczogYnVpbGRzU3VjY2VlZGVkXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGJ1aWxkc0ZhaWxlZC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgJHNjb3BlLmRhdGEucHVzaCh7XHJcbiAgICAgICAgICAgICAga2V5OiBmYWlsZWRCdWlsZEtleSxcclxuICAgICAgICAgICAgICB2YWx1ZXM6IGJ1aWxkc0ZhaWxlZFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgICRzY29wZS5hcGkudXBkYXRlV2l0aERhdGEoJHNjb3BlLmRhdGEpO1xyXG5cclxuICAgICAgICAgICR0aW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgJHNjb3BlLmFwaS51cGRhdGUoKTtcclxuICAgICAgICAgIH0sIDUwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XHJcbiAgICAgICAgICB2YXIgbWV0cmljc1BhdGggPSAkc2NvcGUuam9iSWQgPyBVcmxIZWxwZXJzLmpvaW4oXCJqb2JcIiwgJHNjb3BlLmpvYklkLCBcImZhYnJpYzgvbWV0cmljc1wiKSA6IFwiZmFicmljOC9tZXRyaWNzXCI7XHJcbiAgICAgICAgICB2YXIgdXJsID0gS3ViZXJuZXRlcy5rdWJlcm5ldGVzUHJveHlVcmxGb3JTZXJ2aWNlQ3VycmVudE5hbWVzcGFjZShqZW5raW5zU2VydmljZU5hbWVBbmRQb3J0LCBtZXRyaWNzUGF0aCk7XHJcbiAgICAgICAgICBsb2cuaW5mbyhcIlwiKTtcclxuICAgICAgICAgIGlmICh1cmwgJiYgKCEkc2NvcGUuamVua2lucyB8fCBLdWJlcm5ldGVzLmtlZXBQb2xsaW5nTW9kZWwpKSB7XHJcbiAgICAgICAgICAgICRodHRwLmdldCh1cmwsIGplbmtpbnNIdHRwQ29uZmlnKS5cclxuICAgICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGhhc09iamVjdENoYW5nZWQoZGF0YSwgJHNjb3BlLmVudGl0eUNoYW5nZWRDYWNoZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbyhcImVudGl0eSBoYXMgY2hhbmdlZCFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLm1ldHJpY3MgPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNoYXJ0RGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgICAgIH0pLlxyXG4gICAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyRW5yaWNoZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVySGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3Blck5hdmlnYXRpb24udHNcIi8+XHJcblxyXG5tb2R1bGUgRGV2ZWxvcGVyIHtcclxuXHJcbiAgZXhwb3J0IHZhciBOYXZCYXJDb250cm9sbGVyID0gY29udHJvbGxlcihcIk5hdkJhckNvbnRyb2xsZXJcIixcclxuICAgIFtcIiRzY29wZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxyXG4gICAgICAoJHNjb3BlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkdGltZW91dCkgPT4ge1xyXG5cclxuICAgICAgICAkc2NvcGUuaXNWYWxpZCA9IChpdGVtKSA9PiB7XHJcbiAgICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBpdGVtLmlzVmFsaWQ7XHJcbiAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzRnVuY3Rpb24odmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlKGl0ZW0pXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGFuZ3VsYXIuaXNVbmRlZmluZWQodmFsdWUpIHx8IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckVucmljaGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJOYXZpZ2F0aW9uLnRzXCIvPlxyXG5cclxubW9kdWxlIERldmVsb3BlciB7XHJcblxyXG4gIGV4cG9ydCB2YXIgUGlwZWxpbmVDb250cm9sbGVyID0gY29udHJvbGxlcihcIlBpcGVsaW5lQ29udHJvbGxlclwiLFxyXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgXCJTZXJ2aWNlUmVnaXN0cnlcIixcclxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxyXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwsIFNlcnZpY2VSZWdpc3RyeSkgPT4ge1xyXG5cclxuICAgICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuICAgICAgICAkc2NvcGUua3ViZU1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG4gICAgICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xyXG4gICAgICAgICRzY29wZS5qb2JJZCA9ICRyb3V0ZVBhcmFtc1tcImpvYlwiXTtcclxuICAgICAgICAkc2NvcGUuYnVpbGRJZCA9ICRyb3V0ZVBhcmFtc1tcImJ1aWxkXCJdO1xyXG4gICAgICAgICRzY29wZS5zY2hlbWEgPSBLdWJlcm5ldGVzU2NoZW1hO1xyXG4gICAgICAgICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUgPSB7fTtcclxuXHJcbiAgICAgICAgJHNjb3BlLm1vZGVsID0ge1xyXG4gICAgICAgICAgc3RhZ2VzOiBudWxsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcbiAgICAgICAgJHNjb3BlLmJyZWFkY3J1bWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKCRzY29wZS5pZCk7XHJcbiAgICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0U3ViTmF2QmFycygkc2NvcGUuaWQsICRzY29wZS5qb2JJZCk7XHJcblxyXG4gICAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcclxuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdXBkYXRlRGF0YSgpO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xyXG4gICAgICAgICAgaWYgKCRzY29wZS5qb2JJZCkge1xyXG4gICAgICAgICAgICB2YXIgdXJsID0gS3ViZXJuZXRlcy5rdWJlcm5ldGVzUHJveHlVcmxGb3JTZXJ2aWNlQ3VycmVudE5hbWVzcGFjZShqZW5raW5zU2VydmljZU5hbWVBbmRQb3J0LCBVcmxIZWxwZXJzLmpvaW4oXCJqb2JcIiwgJHNjb3BlLmpvYklkLCAkc2NvcGUuYnVpbGRJZCwgXCJmYWJyaWM4L3N0YWdlcy9cIikpO1xyXG4gICAgICAgICAgICBpZiAodXJsICYmICghJHNjb3BlLm1vZGVsLnN0YWdlcyB8fCBLdWJlcm5ldGVzLmtlZXBQb2xsaW5nTW9kZWwpKSB7XHJcbiAgICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVucmljaEplbmtpbnNTdGFnZXMoZGF0YSwgJHNjb3BlLmlkLCAkc2NvcGUuam9iSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNPYmplY3RDaGFuZ2VkKGRhdGEsICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbyhcImVudGl0eSBoYXMgY2hhbmdlZCFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuYnVpbGQgPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLnN0YWdlcyA9IGRhdGEuc3RhZ2VzO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgICAgICAgICB9KS5cclxuICAgICAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJFbnJpY2hlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cclxuXHJcbm1vZHVsZSBEZXZlbG9wZXIge1xyXG4gIF9tb2R1bGUuZGlyZWN0aXZlKFwicGlwZWxpbmVWaWV3XCIsICgpID0+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHRlbXBsYXRlVXJsOiB0ZW1wbGF0ZVBhdGggKyAncGlwZWxpbmVWaWV3Lmh0bWwnXHJcbiAgICB9O1xyXG4gIH0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJQbHVnaW4udHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJFbnJpY2hlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cclxuXHJcbm1vZHVsZSBEZXZlbG9wZXIge1xyXG5cclxuICBleHBvcnQgdmFyIFBpcGVsaW5lc0NvbnRyb2xsZXIgPSBfbW9kdWxlLmNvbnRyb2xsZXIoXCJEZXZlbG9wZXIuUGlwZWxpbmVzQ29udHJvbGxlclwiLCAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsXHJcbiAgICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwsIFNlcnZpY2VSZWdpc3RyeSwgJGVsZW1lbnQpID0+IHtcclxuXHJcbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuICAgICRzY29wZS5rdWJlTW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcbiAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcclxuICAgICRzY29wZS5qb2JJZCA9ICRzY29wZS5qb2JJZCB8fCAkcm91dGVQYXJhbXNbXCJqb2JcIl07XHJcbiAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcclxuICAgICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUgPSB7fTtcclxuXHJcbiAgICAkZWxlbWVudC5vbignJGRlc3Ryb3knLCAoKSA9PiB7XHJcbiAgICAgICRzY29wZS4kZGVzdHJveSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJHNjb3BlLm1vZGVsID0ge1xyXG4gICAgICBqb2I6IG51bGwsXHJcbiAgICAgIHBlbmRpbmdPbmx5OiAkc2NvcGUucGVuZGluZ1BpcGVsaW5lc09ubHlcclxuICAgIH07XHJcbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcbiAgICAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0QnJlYWRjcnVtYnMoJHNjb3BlLmlkKTtcclxuICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdFN1Yk5hdkJhcnMoJHNjb3BlLmlkLCAkc2NvcGUuam9iSWQpO1xyXG5cclxuICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgIH0pO1xyXG5cclxuICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcclxuICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJHNjb3BlLiR3YXRjaCgnbW9kZWwucGVuZGluZ09ubHknLCAoJGV2ZW50KSA9PiB7XHJcbiAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgIH0pO1xyXG5cclxuICAgICRzY29wZS5zZWxlY3RCdWlsZCA9IChidWlsZCkgPT4ge1xyXG4gICAgICB2YXIgaWQgPSBidWlsZC5pZDtcclxuICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgaWYgKGlkICE9PSAkc2NvcGUuc2VsZWN0ZWRCdWlsZElkKSB7XHJcbiAgICAgICAgICAkc2NvcGUuc2VsZWN0ZWRCdWlsZElkID0gaWQ7XHJcbiAgICAgICAgICAkc2NvcGUuJGJyb2FkY2FzdChcImplbmtpbnNTZWxlY3RlZEJ1aWxkXCIsIGJ1aWxkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdmFyIHVwZGF0ZURhdGEgPSBfLmRlYm91bmNlKCgpID0+IHtcclxuICAgICAgdmFyIGVudGl0eSA9ICRzY29wZS5lbnRpdHk7XHJcbiAgICAgIGlmICgkc2NvcGUuam9iSWQpIHtcclxuICAgICAgICBpZiAoKCFlbnRpdHkgfHwgZW50aXR5LiRqZW5raW5zSm9iKSkge1xyXG4gICAgICAgICAgdmFyIHF1ZXJ5UGF0aCA9IFwiZmFicmljOC9zdGFnZXMvXCI7XHJcbiAgICAgICAgICBpZiAoJHNjb3BlLm1vZGVsLnBlbmRpbmdPbmx5KSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGF0aCA9IFwiZmFicmljOC9wZW5kaW5nU3RhZ2VzL1wiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdmFyIHVybCA9IEt1YmVybmV0ZXMua3ViZXJuZXRlc1Byb3h5VXJsRm9yU2VydmljZUN1cnJlbnROYW1lc3BhY2UoamVua2luc1NlcnZpY2VOYW1lQW5kUG9ydCwgVXJsSGVscGVycy5qb2luKFwiam9iXCIsICRzY29wZS5qb2JJZCwgcXVlcnlQYXRoKSk7XHJcbiAgICAgICAgICBpZiAodXJsICYmICghJHNjb3BlLm1vZGVsLmpvYiB8fCBLdWJlcm5ldGVzLmtlZXBQb2xsaW5nTW9kZWwpKSB7XHJcbiAgICAgICAgICAgICRodHRwLmdldCh1cmwpLlxyXG4gICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBlbnJpY2hKZW5raW5zUGlwZWxpbmVKb2IoZGF0YSwgJHNjb3BlLmlkLCAkc2NvcGUuam9iSWQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGhhc09iamVjdENoYW5nZWQoZGF0YSwgJHNjb3BlLmVudGl0eUNoYW5nZWRDYWNoZSkpIHtcclxuICAgICAgICAgICAgICAgICAgbG9nLmluZm8oXCJlbnRpdHkgaGFzIGNoYW5nZWQhXCIpO1xyXG4gICAgICAgICAgICAgICAgICAkc2NvcGUubW9kZWwuam9iID0gZGF0YTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIHZhciBidWlsZHMgPSBkYXRhLmJ1aWxkcztcclxuICAgICAgICAgICAgICAgICAgaWYgKGJ1aWxkcyAmJiBidWlsZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnNlbGVjdEJ1aWxkKGJ1aWxkc1swXSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgICAgIH0pLlxyXG4gICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICRzY29wZS5tb2RlbC5mZXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICgkc2NvcGUubW9kZWwpIHtcclxuICAgICAgICAgICAgS3ViZXJuZXRlcy5lbnJpY2hCdWlsZHMoJHNjb3BlLmt1YmVNb2RlbC5idWlsZHMpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGJ1aWxkcyA9IFtdO1xyXG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goJHNjb3BlLmt1YmVNb2RlbC5idWlsZHMsIChidWlsZCkgPT4ge1xyXG4gICAgICAgICAgICAgIHZhciBsYWJlbHMgPSBLdWJlcm5ldGVzLmdldExhYmVscyhidWlsZCk7XHJcbiAgICAgICAgICAgICAgdmFyIGFwcCA9IGxhYmVsc1tcImFwcFwiXTtcclxuICAgICAgICAgICAgICBpZiAoYXBwID09PSAkc2NvcGUucHJvamVjdElkKSB7XHJcbiAgICAgICAgICAgICAgICBidWlsZHMucHVzaChidWlsZCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYnVpbGRzID0gXy5zb3J0QnkoYnVpbGRzLCBcIiRjcmVhdGlvbkRhdGVcIikucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgICB2YXIgYWxsQnVpbGRzID0gYnVpbGRzO1xyXG4gICAgICAgICAgICBpZiAoYWxsQnVpbGRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICBidWlsZHMgPSBfLmZpbHRlcihhbGxCdWlsZHMsIChiKSA9PiAhYi4kY3JlYXRpb25EYXRlKTtcclxuICAgICAgICAgICAgICBpZiAoIWJ1aWxkcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGJ1aWxkcyA9IFthbGxCdWlsZHNbMF1dO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcGlwZWxpbmVzID0gW107XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChidWlsZHMsIChidWlsZCkgPT4ge1xyXG4gICAgICAgICAgICAgIHZhciBidWlsZFN0YXR1cyA9IGJ1aWxkLnN0YXR1cyB8fCB7fTtcclxuICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYnVpbGRTdGF0dXMucGhhc2UgfHwgXCJcIjtcclxuICAgICAgICAgICAgICB2YXIgcmVzdWx0VXBwZXJDYXNlID0gcmVzdWx0LnRvVXBwZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgICAgIHZhciBkZXNjcmlwdGlvbiA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgdmFyICR2aWV3TGluayA9IGJ1aWxkLiR2aWV3TGluaztcclxuICAgICAgICAgICAgICB2YXIgJGxvZ0xpbmsgPSBidWlsZC4kbG9nc0xpbms7XHJcbiAgICAgICAgICAgICAgdmFyICR0aW1lc3RhbXAgPSBidWlsZC4kY3JlYXRpb25EYXRlO1xyXG4gICAgICAgICAgICAgIHZhciBkdXJhdGlvbiA9IGJ1aWxkU3RhdHVzLmR1cmF0aW9uO1xyXG4gICAgICAgICAgICAgIGlmIChkdXJhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgLy8gMTdzID0gMTcsMDAwLDAwMCwwMDAgb24gb3BlbnNoaWZ0XHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IGR1cmF0aW9uIC8gMTAwMDAwMDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdmFyIGRpc3BsYXlOYW1lID0gS3ViZXJuZXRlcy5nZXROYW1lKGJ1aWxkKTtcclxuICAgICAgICAgICAgICB2YXIgJGljb25DbGFzcyA9IGNyZWF0ZUJ1aWxkU3RhdHVzSWNvbkNsYXNzKHJlc3VsdFVwcGVyQ2FzZSk7XHJcbiAgICAgICAgICAgICAgdmFyICRiYWNrZ3JvdW5kQ2xhc3MgPSBjcmVhdGVCdWlsZFN0YXR1c0JhY2tncm91bmRDbGFzcyhyZXN1bHRVcHBlckNhc2UpO1xyXG4gICAgICAgICAgICAgIHZhciBzdGFnZSA9IHtcclxuICAgICAgICAgICAgICAgIHN0YWdlTmFtZTogXCJPcGVuU2hpZnQgQnVpbGRcIixcclxuICAgICAgICAgICAgICAgICR2aWV3TGluazogJHZpZXdMaW5rLFxyXG4gICAgICAgICAgICAgICAgJGxvZ0xpbms6ICRsb2dMaW5rLFxyXG4gICAgICAgICAgICAgICAgJHN0YXJ0VGltZTogJHRpbWVzdGFtcCxcclxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbixcclxuICAgICAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgJGljb25DbGFzczogJGljb25DbGFzcyxcclxuICAgICAgICAgICAgICAgICRiYWNrZ3JvdW5kQ2xhc3M6ICRiYWNrZ3JvdW5kQ2xhc3NcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIHZhciBwaXBlbGluZSA9IHtcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbixcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBkaXNwbGF5TmFtZSxcclxuICAgICAgICAgICAgICAgICR2aWV3TGluazogJHZpZXdMaW5rLFxyXG4gICAgICAgICAgICAgICAgJGxvZ0xpbms6ICRsb2dMaW5rLFxyXG4gICAgICAgICAgICAgICAgJHRpbWVzdGFtcDogJHRpbWVzdGFtcCxcclxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbixcclxuICAgICAgICAgICAgICAgIHN0YWdlczogW3N0YWdlXVxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgcGlwZWxpbmVzLnB1c2gocGlwZWxpbmUpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIGxldHMgZmlsdGVyIHRoZSBPcGVuU2hpZnQgYnVpbGRzIGFuZCBtYWtlIGEgcGlwZWxpbmUgZnJvbSB0aGF0XHJcbiAgICAgICAgICAgICRzY29wZS5tb2RlbC5qb2IgPSB7XHJcbiAgICAgICAgICAgICAgJGpvYklkOiAkc2NvcGUuam9iSWQsXHJcbiAgICAgICAgICAgICAgJHByb2plY3Q6ICRzY29wZS5wcm9qZWN0SWQsXHJcbiAgICAgICAgICAgICAgYnVpbGRzOiBwaXBlbGluZXNcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgICRzY29wZS5tb2RlbC5mZXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICRzY29wZS5tb2RlbC5mZXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICB9XHJcbiAgICB9LCA1MCk7XHJcblxyXG4gICAgdXBkYXRlRGF0YSgpO1xyXG5cclxuICB9KTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyRW5yaWNoZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVySGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3Blck5hdmlnYXRpb24udHNcIi8+XHJcblxyXG5tb2R1bGUgRGV2ZWxvcGVyIHtcclxuXHJcbiAgZXhwb3J0IHZhciBQcm9qZWN0Q29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJQcm9qZWN0Q29udHJvbGxlclwiLFxyXG4gICAgW1wiJHNjb3BlXCIsIFwiJGVsZW1lbnRcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzU2NoZW1hXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxyXG4gICAgICAoJHNjb3BlLCAkZWxlbWVudCwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxyXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcclxuXHJcbiAgICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG4gICAgICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xyXG5cclxuICAgICAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcclxuICAgICAgICAkc2NvcGUuY29uZmlnID0gS3ViZXJuZXRlc1NjaGVtYS5kZWZpbml0aW9ucy5vc19idWlsZF9CdWlsZENvbmZpZztcclxuICAgICAgICAkc2NvcGUuZW50aXR5Q2hhbmdlZENhY2hlID0ge307XHJcbiAgICAgICAgJHNjb3BlLmVudlZlcnNpb25zQ2FjaGUgPSB7fTtcclxuICAgICAgICAkc2NvcGUuZW52TlNDYWNoZXMgPSB7fTtcclxuICAgICAgICAkc2NvcGUuZW52VmVyc2lvbnMgPSB7fTtcclxuXHJcbiAgICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG4gICAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gW107IC8vRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RCcmVhZGNydW1icygkc2NvcGUuaWQpO1xyXG4gICAgICAgIHVwZGF0ZVRhYnMoKTtcclxuICAgICAgICAvLyB0aGlzIGlzIHVzZWQgZm9yIHRoZSBwZW5kaW5nUGlwZWxpbmVzIHZpZXdcclxuICAgICAgICAkc2NvcGUuam9iSWQgPSAkc2NvcGUuaWQ7XHJcbiAgICAgICAgJHNjb3BlLnBlbmRpbmdQaXBlbGluZXNPbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgJHNjb3BlLiRvbignamVua2luc1NlbGVjdGVkQnVpbGQnLCAoZXZlbnQsIGJ1aWxkKSA9PiB7XHJcbiAgICAgICAgICAkc2NvcGUuc2VsZWN0ZWRCdWlsZCA9IGJ1aWxkO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBUT0RPIHRoaXMgc2hvdWxkIGJlIHVubmVjZXNzYXJ5IGJ1dCBzZWVtcyBzb21ldGllbXMgdGhpcyB3YXRjaCBkb2Vzbid0IGFsd2F5cyB0cmlnZ2VyIHVubGVzcyB5b3UgaGl0IHJlbG9hZCBvbiB0aGlzIHBhZ2VcclxuICAgICAgICBpZiAoJHNjb3BlLm1vZGVsLmJ1aWxkY29uZmlncykge1xyXG4gICAgICAgICAgb25CdWlsZENvbmZpZ3MoJHNjb3BlLm1vZGVsLmJ1aWxkY29uZmlncyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEt1YmVybmV0ZXMud2F0Y2goJHNjb3BlLCAkZWxlbWVudCwgXCJidWlsZGNvbmZpZ3NcIiwgJHNjb3BlLm5hbWVzcGFjZSwgb25CdWlsZENvbmZpZ3MpO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBvbkJ1aWxkQ29uZmlncyhidWlsZENvbmZpZ3MpIHtcclxuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChidWlsZENvbmZpZ3MsIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lID0gS3ViZXJuZXRlcy5nZXROYW1lKGRhdGEpO1xyXG4gICAgICAgICAgICBpZiAobmFtZSA9PT0gJHNjb3BlLmlkKSB7XHJcbiAgICAgICAgICAgICAgdmFyIHNvcnRlZEJ1aWxkcyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgS3ViZXJuZXRlcy5lbnJpY2hCdWlsZENvbmZpZyhkYXRhLCBzb3J0ZWRCdWlsZHMpO1xyXG4gICAgICAgICAgICAgIGlmIChoYXNPYmplY3RDaGFuZ2VkKGRhdGEsICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUpKSB7XHJcbiAgICAgICAgICAgICAgICBsb2cuaW5mbyhcImVudGl0eSBoYXMgY2hhbmdlZCFcIik7XHJcbiAgICAgICAgICAgICAgICAkc2NvcGUuZW50aXR5ID0gZGF0YTtcclxuICAgICAgICAgICAgICAgICRzY29wZS5lbnRpdHkuJGJ1aWxkID0gKGRhdGEuJGZhYnJpYzhDb2RlVmlld3MgfHwge30pWydmYWJyaWM4LmxpbmsuYnJvd3NlR29ncy52aWV3J107XHJcbiAgICAgICAgICAgICAgICAkc2NvcGUubW9kZWwuc2V0UHJvamVjdCgkc2NvcGUuZW50aXR5KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdXBkYXRlRW52aXJvbm1lbnRXYXRjaCgpO1xyXG4gICAgICAgICAgICAgIHVwZGF0ZVRhYnMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdlIGhhdmUgdXBkYXRlZCB0aGUgZW50aXR5IHNvIGxldHMgbWFrZSBzdXJlIHdlIGFyZSB3YXRjaGluZyBhbGwgdGhlIGVudmlyb25tZW50cyB0byBmaW5kXHJcbiAgICAgICAgICogdGhlIHByb2plY3QgdmVyc2lvbnMgZm9yIGVhY2ggbmFtZXNwYWNlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlRW52aXJvbm1lbnRXYXRjaCgpIHtcclxuICAgICAgICAgIHZhciBwcm9qZWN0ID0gJHNjb3BlLmVudGl0eTtcclxuICAgICAgICAgIGlmIChwcm9qZWN0KSB7XHJcbiAgICAgICAgICAgIHZhciBqZW5raW5zSm9iID0gcHJvamVjdC4kamVua2luc0pvYjtcclxuICAgICAgICAgICAgaWYgKGplbmtpbnNKb2IpIHtcclxuICAgICAgICAgICAgICB2YXIgYnVpbGRzVGFiID0gXy5maW5kKCRzY29wZS5zdWJUYWJDb25maWcsIHtpZDogXCJidWlsZHNcIn0pO1xyXG4gICAgICAgICAgICAgIGlmIChidWlsZHNUYWIpIHtcclxuICAgICAgICAgICAgICAgIGJ1aWxkc1RhYltcImhyZWZcIl0gPSBVcmxIZWxwZXJzLmpvaW4oXCIvd29ya3NwYWNlc1wiLCBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCksIFwicHJvamVjdHNcIiwgJHNjb3BlLmlkLCBcImplbmtpbnNKb2JcIiwgamVua2luc0pvYik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2gocHJvamVjdC5lbnZpcm9ubWVudHMsIChlbnYpID0+IHtcclxuICAgICAgICAgICAgICB2YXIgbnMgPSBlbnYubmFtZXNwYWNlO1xyXG4gICAgICAgICAgICAgIHZhciBjYWNoZXMgPSAkc2NvcGUuZW52TlNDYWNoZXNbbnNdO1xyXG4gICAgICAgICAgICAgIGlmICghY2FjaGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjYWNoZXMgPSB7fTtcclxuICAgICAgICAgICAgICAgICRzY29wZS5lbnZOU0NhY2hlc1tuc10gPSBjYWNoZXM7XHJcbiAgICAgICAgICAgICAgICBsb2FkUHJvamVjdFZlcnNpb25zKCRzY29wZSwgJGVsZW1lbnQsIHByb2plY3QsIGVudiwgbnMsICRzY29wZS5lbnZWZXJzaW9ucywgY2FjaGVzKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlVGFicygpIHtcclxuICAgICAgICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdFN1Yk5hdkJhcnMoJHNjb3BlLmlkLCBudWxsLCAkc2NvcGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIERldmVsb3BlciB7XHJcblxyXG4gIF9tb2R1bGUuY29udHJvbGxlcignRGV2ZWxvcGVyLlByb2plY3RTZWxlY3RvcicsIFsnJHNjb3BlJywgJyRyb3V0ZVBhcmFtcycsICdLdWJlcm5ldGVzTW9kZWwnLCAoJHNjb3BlLCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCkgPT4ge1xyXG4gICAgdmFyIHByb2plY3RJZCA9ICRyb3V0ZVBhcmFtc1sncHJvamVjdElkJ10gfHwgJHJvdXRlUGFyYW1zWydwcm9qZWN0J10gfHwgJHJvdXRlUGFyYW1zWydpZCddO1xyXG4gICAgaWYgKHByb2plY3RJZCkge1xyXG4gICAgICAkc2NvcGUucHJvamVjdElkID0gcHJvamVjdElkO1xyXG4gICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWxcclxuICAgICAgJHNjb3BlLiR3YXRjaCgnbW9kZWwuYnVpbGRjb25maWdzJywgKGJ1aWxkY29uZmlncykgPT4ge1xyXG4gICAgICAgICRzY29wZS5wcm9qZWN0cyA9IGJ1aWxkY29uZmlncztcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsb2cuaW5mbyhcIm5vIHByb2plY3QgSUQgaW4gcm91dGVQYXJhbXM6IFwiLCAkcm91dGVQYXJhbXMpO1xyXG4gICAgfVxyXG4gIH1dKTtcclxuXHJcbn1cclxuXHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJFbnJpY2hlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cclxuXHJcbm1vZHVsZSBEZXZlbG9wZXIge1xyXG5cclxuICBleHBvcnQgdmFyIFByb2plY3RzQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJQcm9qZWN0c0NvbnRyb2xsZXJcIiwgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiJGRpYWxvZ1wiLCBcIiR3aW5kb3dcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRsb2NhdGlvblwiLCBcImxvY2FsU3RvcmFnZVwiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXHJcbiAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsICRkaWFsb2csICR3aW5kb3csICR0ZW1wbGF0ZUNhY2hlLCAkcm91dGVQYXJhbXMsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCBsb2NhbFN0b3JhZ2UsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xyXG5cclxuICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuXHJcbiAgICAgICRzY29wZS50YWJsZUNvbmZpZyA9IHtcclxuICAgICAgICBkYXRhOiAnbW9kZWwuYnVpbGRjb25maWdzJyxcclxuICAgICAgICBzaG93U2VsZWN0aW9uQ2hlY2tib3g6IHRydWUsXHJcbiAgICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxyXG4gICAgICAgIG11bHRpU2VsZWN0OiB0cnVlLFxyXG4gICAgICAgIHNlbGVjdGVkSXRlbXM6IFtdLFxyXG4gICAgICAgIGZpbHRlck9wdGlvbnM6IHtcclxuICAgICAgICAgIGZpbHRlclRleHQ6ICRsb2NhdGlvbi5zZWFyY2goKVtcInFcIl0gfHwgJydcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbHVtbkRlZnM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6ICckbmFtZScsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTmFtZScsXHJcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiaWRUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgICB9LFxyXG4vKlxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMuc291cmNlLnR5cGUnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1NvdXJjZSdcclxuICAgICAgICAgIH0sXHJcbiovXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnc3BlYy5zb3VyY2UuZ2l0LnVyaScsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnUmVwb3NpdG9yeSdcclxuICAgICAgICAgIH0sXHJcbi8qXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnc3BlYy5zdHJhdGVneS50eXBlJyxcclxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdTdHJhdGVneSdcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnc3BlYy5zdHJhdGVneS5zdGlTdHJhdGVneS5pbWFnZScsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnU291cmNlIEltYWdlJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6ICdzcGVjLm91dHB1dC5pbWFnZVRhZycsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnT3V0cHV0IEltYWdlJ1xyXG4gICAgICAgICAgfSxcclxuKi9cclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6ICdtZXRhZGF0YS5kZXNjcmlwdGlvbicsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnRGVzY3JpcHRpb24nXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWVsZDogJyRjcmVhdGlvbkRhdGUnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0NyZWF0ZWQnLFxyXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImNyZWF0aW9uVGltZVRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnJGxhYmVsc1RleHQnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0xhYmVscycsXHJcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwibGFiZWxUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG5cclxuICAgICAgJHNjb3BlLmJyZWFkY3J1bWJDb25maWcgPSBjcmVhdGVQcm9qZWN0QnJlYWRjcnVtYnMoKTtcclxuICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVXb3Jrc3BhY2VTdWJOYXZCYXJzKCk7XHJcblxyXG4gICAgICAvLyBUT0RPXHJcbiAgICAgIC8vJHNjb3BlLmlzTG9nZ2VkSW50b0dvZ3MgPSBGb3JnZS5pc0xvZ2dlZEludG9Hb2dzO1xyXG5cclxuICAgICAgJHNjb3BlLmRlbGV0ZVByb21wdCA9IChzZWxlY3RlZCkgPT4ge1xyXG4gICAgICAgIFVJLm11bHRpSXRlbUNvbmZpcm1BY3Rpb25EaWFsb2coPFVJLk11bHRpSXRlbUNvbmZpcm1BY3Rpb25PcHRpb25zPntcclxuICAgICAgICAgIGNvbGxlY3Rpb246IHNlbGVjdGVkLFxyXG4gICAgICAgICAgaW5kZXg6ICckbmFtZScsXHJcbiAgICAgICAgICBvbkNsb3NlOiAocmVzdWx0OmJvb2xlYW4pID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBuZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xyXG4gICAgICAgICAgICAgICAgICBkZWxldGVFbnRpdHkobmV4dCwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZURhdGEoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRpdGxlOiAnRGVsZXRlIEFwcHMnLFxyXG4gICAgICAgICAgYWN0aW9uOiAnVGhlIGZvbGxvd2luZyBBcHBzIHdpbGwgYmUgZGVsZXRlZDonLFxyXG4gICAgICAgICAgb2tUZXh0OiAnRGVsZXRlJyxcclxuICAgICAgICAgIG9rQ2xhc3M6ICdidG4tZGFuZ2VyJyxcclxuICAgICAgICAgIGN1c3RvbTogXCJUaGlzIG9wZXJhdGlvbiBpcyBwZXJtYW5lbnQgb25jZSBjb21wbGV0ZWQhXCIsXHJcbiAgICAgICAgICBjdXN0b21DbGFzczogXCJhbGVydCBhbGVydC13YXJuaW5nXCJcclxuICAgICAgICB9KS5vcGVuKCk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBmdW5jdGlvbiBkZWxldGVFbnRpdHkoc2VsZWN0aW9uLCBuZXh0Q2FsbGJhY2spIHtcclxuICAgICAgICB2YXIgbmFtZSA9IChzZWxlY3Rpb24gfHwge30pLiRuYW1lO1xyXG4gICAgICAgIHZhciBqZW5raW5zSm9iID0gc2VsZWN0aW9uLiRqZW5raW5zSm9iO1xyXG4gICAgICAgIHZhciBwdWJsaWNKZW5raW5zVXJsID0gamVua2luc0xpbmsoKTtcclxuICAgICAgICAvL3ZhciBqZW5raW5zVXJsID0gQ29yZS5wYXRoR2V0KHNlbGVjdGlvbiwgW1wiJGZhYnJpYzhWaWV3c1wiLCBcImZhYnJpYzgubGluay5qZW5raW5zLmpvYlwiLCBcInVybFwiXSk7XHJcbiAgICAgICAgaWYgKG5hbWUpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQWJvdXQgdG8gZGVsZXRlIGJ1aWxkIGNvbmZpZzogXCIgKyBuYW1lKTtcclxuICAgICAgICAgIHZhciB1cmwgPSBLdWJlcm5ldGVzLmJ1aWxkQ29uZmlnUmVzdFVybChuYW1lKTtcclxuICAgICAgICAgICRodHRwLmRlbGV0ZSh1cmwpLlxyXG4gICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgIG5leHRDYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9KS5cclxuICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gZGVsZXRlIGJ1aWxkIGNvbmZpZyBvbiBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgICAgICBuZXh0Q2FsbGJhY2soKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwid2FybmluZzogbm8gbmFtZSBmb3Igc2VsZWN0aW9uOiBcIiArIGFuZ3VsYXIudG9Kc29uKHNlbGVjdGlvbikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGplbmtpbnNKb2IgJiYgcHVibGljSmVua2luc1VybCkge1xyXG4gICAgICAgICAgdmFyIHVybCA9IEt1YmVybmV0ZXMua3ViZXJuZXRlc1Byb3h5VXJsRm9yU2VydmljZUN1cnJlbnROYW1lc3BhY2UoamVua2luc1NlcnZpY2VOYW1lQW5kUG9ydCwgVXJsSGVscGVycy5qb2luKFwiam9iXCIsIGplbmtpbnNKb2IsIFwiZG9EZWxldGVcIikpO1xyXG4gICAgICAgICAgdmFyIGJvZHkgPSBcIlwiO1xyXG4gICAgICAgICAgdmFyIGNvbmZpZyA9IHtcclxuICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiBcInRleHQvcGxhaW5cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgbG9nLmluZm8oXCJwb3N0aW5nIHRvIGplbmtpbnNVcmw6IFwiICsgdXJsKTtcclxuICAgICAgICAgICRodHRwLnBvc3QodXJsLCBib2R5LCBjb25maWcpLlxyXG4gICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgIGxvZy5pbmZvKFwiTWFuYWdlZCB0byBkZWxldGUgXCIgKyB1cmwpO1xyXG4gICAgICAgICAgICB9KS5cclxuICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gZGVsZXRlIGplbmtpbnMgam9iIGF0IFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbi8qXHJcbiAgICAgICRzY29wZS4ka2VlcFBvbGxpbmcgPSAoKSA9PiBLdWJlcm5ldGVzLmtlZXBQb2xsaW5nTW9kZWw7XHJcbiAgICAgICRzY29wZS5mZXRjaCA9IFBvbGxIZWxwZXJzLnNldHVwUG9sbGluZygkc2NvcGUsIChuZXh0OigpID0+IHZvaWQpID0+IHtcclxuICAgICAgICB2YXIgdXJsID0gS3ViZXJuZXRlcy5idWlsZENvbmZpZ3NSZXN0VVJMKCk7XHJcbiAgICAgICAgJGh0dHAuZ2V0KHVybCkuXHJcbiAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJnb3QgZGF0YSBcIiArIGFuZ3VsYXIudG9Kc29uKGRhdGEsIHRydWUpKTtcclxuICAgICAgICAgICAgICB2YXIgc29ydGVkQnVpbGRzID0gbnVsbDtcclxuICAgICAgICAgICAgICAkc2NvcGUuYnVpbGRDb25maWdzID0gS3ViZXJuZXRlcy5lbnJpY2hCdWlsZENvbmZpZ3MoZGF0YS5pdGVtcywgc29ydGVkQnVpbGRzKTtcclxuICAgICAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgICAgICBuZXh0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pLlxyXG4gICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XHJcbiAgICAgICAgICAgIG5leHQoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgICRzY29wZS5mZXRjaCgpO1xyXG4qL1xyXG4gICAgfV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJFbnJpY2hlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cclxuXHJcbm1vZHVsZSBEZXZlbG9wZXIge1xyXG5cclxuICBleHBvcnQgdmFyIFdvcmtzcGFjZUNvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiV29ya3NwYWNlQ29udHJvbGxlclwiLFxyXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcclxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxyXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcclxuXHJcbiAgICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG4gICAgICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcIm5hbWVzcGFjZVwiXTtcclxuICAgICAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcclxuICAgICAgICAkc2NvcGUuY29uZmlnID0gS3ViZXJuZXRlc1NjaGVtYS5kZWZpbml0aW9ucy5rdWJlcm5ldGVzX05hbWVzcGFjZTtcclxuXHJcbiAgICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG4gICAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gY3JlYXRlV29ya3NwYWNlQnJlYWRjcnVtYnMoKTtcclxuICAgICAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVdvcmtzcGFjZVN1Yk5hdkJhcnMoKTtcclxuXHJcbiAgICAgICAgJHNjb3BlLiRrZWVwUG9sbGluZyA9ICgpID0+IEt1YmVybmV0ZXMua2VlcFBvbGxpbmdNb2RlbDtcclxuICAgICAgICAkc2NvcGUuZmV0Y2ggPSBQb2xsSGVscGVycy5zZXR1cFBvbGxpbmcoJHNjb3BlLCAobmV4dDooKSA9PiB2b2lkKSA9PiB7XHJcbiAgICAgICAgICAkc2NvcGUuaXRlbSA9IG51bGw7XHJcbiAgICAgICAgICBpZiAoJHNjb3BlLmlkKSB7XHJcbiAgICAgICAgICAgIHZhciB1cmwgPSBVcmxIZWxwZXJzLmpvaW4oS3ViZXJuZXRlcy5yZXNvdXJjZXNVcmlGb3JLaW5kKFwiUHJvamVjdHNcIiksICRzY29wZS5pZCk7XHJcbiAgICAgICAgICAgIGxvZy5pbmZvKFwiTG9hZGluZyB1cmw6IFwiICsgdXJsKTtcclxuICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXHJcbiAgICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICRzY29wZS5lbnRpdHkgPSBlbnJpY2hXb3Jrc3BhY2UoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgICAgICAgbmV4dCgpO1xyXG4gICAgICAgICAgICAgIH0pLlxyXG4gICAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgIG5leHQoKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICRzY29wZS5tb2RlbC5mZXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgICAgbmV4dCgpO1xyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJHNjb3BlLmZldGNoKCk7XHJcbiAgICAgIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzTW9kZWwudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9jb25maWdzL3RzL2NvbmZpZ3NEYXRhU2VydmljZS50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckVucmljaGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkYXRhTWFuYWdlckhlbHBlci50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRhdGFNYW5hZ2VyTW9kZWwudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9jb25maWdzL3RzL2NvbmZpZ3NIZWxwZXIudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9jb25maWdzL3RzL2N1c3RvbUFsZXJ0LnRzXCIvPlxyXG5cclxubW9kdWxlIERldmVsb3BlciB7XHJcbiAgZXhwb3J0IHZhciBXb3Jrc3BhY2VzQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJXb3Jrc3BhY2VzQ29udHJvbGxlclwiLCBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJEYXRhTW9kZWxcIiwgXCJDb25maWdzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsIFwiJGVsZW1lbnRcIiwgXCJuZ0RpYWxvZ1wiLFxyXG4gICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDogS3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBEYXRhTW9kZWw6RGV2ZWxvcGVyLkRhdGFNb2RlbFNlcnZpY2UsIENvbmZpZ3NNb2RlbDpDb25maWdzLkNvbmZpZ3NNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMLCAkZWxlbWVudCwgbmdEaWFsb2cpID0+IHsgICAgXHJcbiAgICAkc2NvcGUubW9kZWw9RGF0YU1vZGVsOyBcclxuICAgICRzY29wZS5yZXBsaWNhc01vZGVsID0gS3ViZXJuZXRlc01vZGVsOyBcclxuICAgXHJcbiAgICAkc2NvcGUub3B0aW9ucyA9IERhdGFNb2RlbC5wYXJhbU9wdGlvbnM7XHJcbiAgICAkc2NvcGUucGFnZVNpemVDaG9zZXMgPSBEYXRhTW9kZWwucGFyYW1PcHRpb25zLnBhZ2VyU2l6ZU9wdGlvbjtcclxuICAgIHZhciByZXN1bHQgPSBnZXREYXRhVHlwZSgkbG9jYXRpb24pO1xyXG4gICBcclxuXHJcbiAgICAkc2NvcGUudHJlZU9wdGlvbnMgPSB7XHJcbiAgICAgIG5vZGVDaGlsZHJlbjogXCJjaGlsZE5vZGVzXCIsXHJcbiAgICAgIGRpclNlbGVjdGFibGU6IHRydWUsXHJcbiAgICAgIGluamVjdENsYXNzZXM6IHtcclxuICAgICAgICB1bDogXCJhMVwiLFxyXG4gICAgICAgIGxpOiBcImEyXCIsXHJcbiAgICAgICAgbGlTZWxlY3RlZDogXCJhN1wiLFxyXG4gICAgICAgIGlFeHBhbmRlZDogXCJhM1wiLFxyXG4gICAgICAgIGlDb2xsYXBzZWQ6IFwiYTRcIixcclxuICAgICAgICBpTGVhZjogXCJhNVwiLFxyXG4gICAgICAgIGxhYmVsOiBcImE2XCIsXHJcbiAgICAgICAgbGFiZWxTZWxlY3RlZDogXCJhOFwiXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvL+mFjee9ruaVsOaNruihqOagvOmcgOimgeaYvuekuueahOWGheWuueWPiuaYvuekuuagvOW8j1xyXG4gICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xyXG4gICAgICBkYXRhOiAnbW9kZWwuZGF0YScsICAgICBcclxuICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxyXG4gICAgICBlbmFibGVSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXHJcbiAgICAgIG11bHRpU2VsZWN0OiB0cnVlLCAgICAgXHJcbiAgICAgIHNlbGVjdGVkSXRlbXM6IFtdLCAgICAgXHJcbiAgICAgIGZpbHRlck9wdGlvbnM6IHtcclxuICAgICAgICBmaWx0ZXJUZXh0OiAkbG9jYXRpb24uc2VhcmNoKClbXCJxXCJdIHx8ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbHVtbkRlZnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaWVsZDogXCJfa2V5XCIsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ+e8lueggScgICAgICAgICAgICAgICBcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpZWxkOiBcIm5hbWVcIixcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAn5biCLeWMui/ljr8nLFxyXG4gICAgICAgICAgY3VzdG9tU29ydEZpZWxkOiAoZmllbGQpID0+IHsgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXR1cm4gZmllbGQucmVnaW9uYWxpc21Db2RlO1xyXG4gICAgICAgICAgfSAgICAgICBcclxuICAgICAgICB9LFxyXG4gICAgICAgIHsgXHJcbiAgICAgICAgICBmaWVsZDogXCJzeXN0ZW1OYW1lXCIsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ+ezu+e7n+WQjeensCcsXHJcbiAgICAgICAgICBjdXN0b21Tb3J0RmllbGQ6IChmaWVsZCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZmllbGQuc3lzdGVtQ29kZTtcclxuICAgICAgICAgIH0gICAgICAgICBcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpZWxkOiBcImRhdGFCYXNlVHlwZVwiLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICfmlbDmja7lupPnsbvlnosnLFxyXG4gICAgICAgIH0sICAgICAgICAgXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmllbGQ6IFwibGFiZWxzXCIsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ+aVsOaNruagh+etvicsXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImRhdGFMYWJlbHNUZW1wbGF0ZS5odG1sXCIpICAgICAgXHJcbiAgICAgICAgfSwgXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmllbGQ6IFwieWVhclwiLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICflubTluqYnLCAgICAgICAgXHJcbiAgICAgICAgfSwgICAgXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmllbGQ6IFwiY29sbGVjdGluZ1RpbWVcIixcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAn6YeH6ZuG5pe26Ze0JyAgICAgICAgXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaWVsZDogXCJleHRyYWN0U3RhdHVzXCIsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ+axh+aAu+eKtuaAgScsXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImRhdGFFeHRyYWN0VGVtcGxhdGUuaHRtbFwiKSAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgIF0sXHJcbiAgICAgIHNvcnRJbmZvOiB7XHJcbiAgICAgICAgc29ydEJ5OiBcIl9rZXlcIixcclxuICAgICAgICBhc2NlbmRpbmc6IHRydWVcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBpbml0KCRzY29wZSwgJGxvY2F0aW9uLCAkcm91dGVQYXJhbXMpO1xyXG4gICAgJHNjb3BlLm1vZGVsLnBhcmFtT3B0aW9ucy5kYXRhVHlwZSA9IHJlc3VsdFtcImRhdGFUeXBlXCJdOyBcclxuICAgICRzY29wZS5tb2RlbC5wYXJhbU9wdGlvbnMudm9sdW1lVHlwZSA9IHJlc3VsdFtcInZvbHVtZVR5cGVcIl07ICAgXHJcblxyXG4gICAgJHNjb3BlLiRvbihcImRhdGFMYWJlbEZpbHRlclVwZGF0ZVwiLCAoJGV2ZW50LCB0ZXh0LCBrZXkpID0+IHtcclxuICAgICAgJHNjb3BlLmtleVF1ZXJ5ICs9IFwiIFwiICsgdGV4dDsgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgfSlcclxuXHJcbiAgICAkc2NvcGUuc2VsZWN0QmF0Y2hJdGVtID0gKGl0ZW0pPT4geyAgICAgICBcclxuICAgICAgJHNjb3BlLm5hdmJhckl0ZW1zLmZvckVhY2goKG5hdikgPT57XHJcbiAgICAgICAgbmF2LmNsYXNzPVwiXCI7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpdGVtLmNsYXNzPVwiYWN0aXZlXCI7XHJcbiAgICAgICRzY29wZS5tb2RlbC51cGRhdGVQYXJhbU9wdGlvbihcImN1cnJlbnRQYWdlTnVtXCIsIDEpO1xyXG4gICAgICAkc2NvcGUubW9kZWwudXBkYXRlUGFyYW1PcHRpb24oXCJrZXlRdWVyeVwiLCAkc2NvcGUua2V5UXVlcnkpOyBcclxuICAgICAgJHNjb3BlLm1vZGVsLnVwZGF0ZVBhcmFtT3B0aW9uKFwiZGF0YUJhdGNoXCIsIGl0ZW0uYWxpYXMpOyAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgJHNjb3BlLmlzRW1wdHlPckZpcnN0ID0gKCkgPT4ge1xyXG4gICAgICB2YXIgaWR4ID0gJHNjb3BlLm1vZGVsLmdldFBhcmFtT3B0aW9uKFwiY3VycmVudFBhZ2VOdW1cIik7XHJcbiAgICAgIHZhciBsZW5ndGggPSRzY29wZS5tb2RlbC5wYXJhbU9wdGlvbnMudG90bGVQYWdlOyAgICAgIFxyXG4gICAgICByZXR1cm4gbGVuZ3RoIDw9IDAgfHwgaWR4IDw9IDE7XHJcbiAgICB9XHJcblxyXG4gICAgJHNjb3BlLmlzRW1wdHlPckxhc3QgPSAoKSA9PntcclxuICAgICAgdmFyIGlkeCA9ICRzY29wZS5tb2RlbC5nZXRQYXJhbU9wdGlvbihcImN1cnJlbnRQYWdlTnVtXCIpO1xyXG4gICAgICB2YXIgbGVuZ3RoID0kc2NvcGUubW9kZWwucGFyYW1PcHRpb25zLnRvdGxlUGFnZTtcclxuICAgICAgcmV0dXJuIGxlbmd0aCA8IDEgfHwgaWR4ID49IGxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICAkc2NvcGUuZmlyc3QgPSAoKSA9PiB7ICAgICAgXHJcbiAgICAgIHZhciBpZHggPSAkc2NvcGUubW9kZWwuZ2V0UGFyYW1PcHRpb24oXCJjdXJyZW50UGFnZU51bVwiKTsgICAgICBcclxuICAgICAgaWYoaWR4ID4xKXtcclxuICAgICAgICBLdWJlcm5ldGVzLmVsaW1pbmF0ZUNoZWNoQm94Q2xpY2soKTsgICAgICAgXHJcbiAgICAgICAgJHNjb3BlLm1vZGVsLnVwZGF0ZVBhcmFtT3B0aW9uKFwiY3VycmVudFBhZ2VOdW1cIiwgMSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAkc2NvcGUubGFzdCA9ICgpID0+eyAgICAgIFxyXG4gICAgICB2YXIgaWR4ID0gJHNjb3BlLm1vZGVsLmdldFBhcmFtT3B0aW9uKFwiY3VycmVudFBhZ2VOdW1cIik7IFxyXG4gICAgICB2YXIgbGVuZ3RoID0kc2NvcGUubW9kZWwucGFyYW1PcHRpb25zLnRvdGxlUGFnZTtcclxuICAgICAgaWYoaWR4IDwgbGVuZ3RoKXtcclxuICAgICAgICBLdWJlcm5ldGVzLmVsaW1pbmF0ZUNoZWNoQm94Q2xpY2soKTtcclxuICAgICAgICAkc2NvcGUubW9kZWwudXBkYXRlUGFyYW1PcHRpb24oXCJjdXJyZW50UGFnZU51bVwiLCBsZW5ndGgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgJHNjb3BlLnByZXZpb3VzID0gKCkgPT4geyAgICAgIFxyXG4gICAgICB2YXIgaWR4ID0gJHNjb3BlLm1vZGVsLmdldFBhcmFtT3B0aW9uKFwiY3VycmVudFBhZ2VOdW1cIik7IFxyXG4gICAgICB2YXIgbGVuZ3RoID0kc2NvcGUubW9kZWwucGFyYW1PcHRpb25zLnRvdGxlUGFnZTtcclxuICAgICAgaWYoaWR4ID4gMSl7XHJcbiAgICAgICAgS3ViZXJuZXRlcy5lbGltaW5hdGVDaGVjaEJveENsaWNrKCk7XHJcbiAgICAgICAgJHNjb3BlLm1vZGVsLnVwZGF0ZVBhcmFtT3B0aW9uKFwiY3VycmVudFBhZ2VOdW1cIiwgaWR4LTEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgJHNjb3BlLm5leHQgPSAoKSA9PntcclxuICAgICAgdmFyIGxlbmd0aCA9JHNjb3BlLm1vZGVsLnBhcmFtT3B0aW9ucy50b3RsZVBhZ2U7XHJcbiAgICAgIHZhciBpZHggPSAkc2NvcGUubW9kZWwuZ2V0UGFyYW1PcHRpb24oXCJjdXJyZW50UGFnZU51bVwiKTtcclxuICAgICAgaWYoaWR4IDwgbGVuZ3RoKXtcclxuICAgICAgICBLdWJlcm5ldGVzLmVsaW1pbmF0ZUNoZWNoQm94Q2xpY2soKTsgICAgICBcclxuICAgICAgICAkc2NvcGUubW9kZWwudXBkYXRlUGFyYW1PcHRpb24oXCJjdXJyZW50UGFnZU51bVwiLCBpZHgrMSk7ICAgICAgXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAkc2NvcGUuJHdhdGNoKCdtb2RlbC5wYXJhbU9wdGlvbnMnLCAobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiB7ICAgICAgICAgICAgICAgIFxyXG4gICAgICBpZihuZXdWYWx1ZSl7ICAgICAgICBcclxuICAgICAgICBpZihuZXdWYWx1ZS5jdXJyZW50VGFibGVTaXplICE9PSBvbGRWYWx1ZS5jdXJyZW50VGFibGVTaXplKVxyXG4gICAgICAgICAgJHNjb3BlLm9wdGlvbnMucHJpb3JUYWJsZVNpemUgPSBvbGRWYWx1ZS5jdXJyZW50VGFibGVTaXplOyAgICAgICAgXHJcbiAgICAgICAgZWxzZSBcclxuICAgICAgICAgICRzY29wZS5vcHRpb25zLnByaW9yVGFibGVTaXplID0gbmV3VmFsdWUuY3VycmVudFRhYmxlU2l6ZTsgICAgICAgIFxyXG4gICAgICAgIERhdGFNb2RlbC51cGRhdGVNb2RlbCgpO1xyXG4gICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgfSwgdHJ1ZSk7ICBcclxuXHJcbiAgICAkc2NvcGUuc2VhcmNoID0gKCkgPT4ge1xyXG4gICAgICAvLyRzY29wZS5tb2RlbC5pbml0UGFyYW1PcHRpb25zKCk7XHJcbiAgICAgICRzY29wZS5tb2RlbC5wYXJhbU9wdGlvbnMuY3VycmVudFBhZ2VOdW0gPSAxO1xyXG4gICAgICAkc2NvcGUubW9kZWwudXBkYXRlUGFyYW1PcHRpb24oXCJrZXlRdWVyeVwiLCAkc2NvcGUua2V5UXVlcnkpO1xyXG4gICAgICBcclxuICAgIH1cclxuXHJcbiAgICAkc2NvcGUuZGVsZXRlUHJvbXB0ID0gKHNlbGVjdGVkKSA9PiB7XHJcbiAgICAgIGlmIChhbmd1bGFyLmlzU3RyaW5nKHNlbGVjdGVkKSkge1xyXG4gICAgICAgIHNlbGVjdGVkID0gW3tcclxuICAgICAgICAgIGlkOiBzZWxlY3RlZFxyXG4gICAgICAgIH1dO1xyXG4gICAgICB9XHJcbiAgICAgIC8qXHJcbiAgICAgICAg5Yik5pat5pWw5o2u5piv5ZCm5bey5oyC6L295L2/55So5ZKM5q2j5Zyo6L+B56e744CCXHJcbiAgICAgICovXHJcbiAgICAgIHZhciBtZXNzYWdlID0gS3ViZXJuZXRlcy5jaGVja0Zvck1pZ3JhdGlvbigkc2NvcGUucmVwbGljYXNNb2RlbC5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzLCAkc2NvcGUubW9kZWwudHJhbnNmZXJUYXNrcyAsICRzY29wZS50YWJsZUNvbmZpZy5zZWxlY3RlZEl0ZW1zLCBcIm1hbmFnZXJcIik7XHJcbiAgICAgIGlmKG1lc3NhZ2UgIT0gXCJcIil7XHJcbiAgICAgICAgQ29uZmlncy5jdXN0b21BbGVydChcIuaPkOekulwiLCBcIuaTjeS9nOWksei0pTpcIiArIG1lc3NhZ2UgKyBcIizkuI3og73liKDpmaTvvIFcIiwgJycsbnVsbCwgMCwgXCJlcnJvclwiKTtcclxuICAgICAgICByZXR1cm47IFxyXG4gICAgICB9XHJcblxyXG4gICAgICBVSS5tdWx0aUl0ZW1Db25maXJtQWN0aW9uRGlhbG9nKDxVSS5NdWx0aUl0ZW1Db25maXJtQWN0aW9uT3B0aW9ucz57XHJcbiAgICAgICAgY29sbGVjdGlvbjogc2VsZWN0ZWQsXHJcbiAgICAgICAgaW5kZXg6ICdhbGlhcycsXHJcbiAgICAgICAgb25DbG9zZTogKHJlc3VsdDpib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICB2YXIgaWRDb2xsID0gW107XHJcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChzZWxlY3RlZCwgKHNlbGVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlkQ29sbC5wdXNoKHNlbGVjdC5pZCk7ICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgJGh0dHAoeyAgXHJcbiAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIiwgIFxyXG4gICAgICAgICAgICAgIHVybDogXCIvamF2YS9jb25zb2xlL2FwaS9kZWxldGUvZGF0YVwiLCAgICAgICAgIFxyXG4gICAgICAgICAgICAgIHBhcmFtczoge1wiZGF0YVwiOiBpZENvbGx9ICAgXHJcbiAgICAgICAgICAgIH0pLnN1Y2Nlc3MoZnVuY3Rpb24oZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHsgIFxyXG4gICAgICAgICAgICAgIC8v5oiQ5Yqf5LmL5ZCO5YGa5LiA5Lqb5LqL5oOFIFxyXG4gICAgICAgICAgICAgIERhdGFNb2RlbC51cGRhdGVNb2RlbCgpOyAgICAgIFxyXG4gICAgICAgICAgICB9KS5lcnJvcihmdW5jdGlvbihkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykgeyAgXHJcbiAgICAgICAgICBcclxuICAgICAgICAgICAgfSk7ICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHRpdGxlOiAn5piv5ZCm6ZyA6KaB5Yig6Zmk6YeH6ZuG5pWw5o2u77yfJyxcclxuICAgICAgICBhY3Rpb246ICfku6XkuIvph4fpm4bmlbDmja7mlofku7blsIbkvJrooqvliKDpmaQ6JyxcclxuICAgICAgICBva1RleHQ6ICfliKDpmaQnLFxyXG4gICAgICAgIG9rQ2xhc3M6ICdidG4tZGFuZ2VyIHNqX2J0bl9jaXInLFxyXG4gICAgICAgIGN1c3RvbTogXCLor6XliKDpmaTmk43kvZzlsIbkvJrlvbvlupXliKDpmaTmlbDmja7mlofku7Ys5piv5ZCm5Yig6Zmk77yM6K+356Gu6K6k77yBXCIsXHJcbiAgICAgICAgY3VzdG9tQ2xhc3M6IFwiYWxlcnQgYWxlcnQtd2FybmluZyBzal9hbGVydC13YXJuaW5nXCIsXHJcbiAgICAgICAgY2FuY2VsVGV4dDogXCLlj5bmtohcIixcclxuICAgICAgICBjYW5jZWxDbGFzczogJ3NqX2J0bl9ncmV5J1xyXG4gICAgICB9KS5vcGVuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgJHNjb3BlLm1pZ3JhdGlvbkNsaWNrID0ge1xyXG4gICAgICBpdGVtczpudWxsLFxyXG4gICAgICBzZWxlY3RlZEl0ZW06IHtcIm5hbWVcIjogXCLlvZPliY3msqHmnInlj6/ku6Xov4Hnp7vnmoTpm4bnvqRcIn0sXHJcbiAgICAgIGRpYWxvZzogbmV3IFVJLkRpYWxvZygpLFxyXG4gICAgICBvbk9rOiAoKSA9PiB7ICAgICAgICBcclxuICAgICAgICB2YXIgbWlncmF0aW9uQ2xpY2sgPSAkc2NvcGUubWlncmF0aW9uQ2xpY2s7XHJcbiAgICAgICAgLypcclxuICAgICAgICAgIOWQkeWQjuWPsOWPkeeUn+aVsOaNrui/geenu+ivt+axgiwkaHR0cDrlj5HnlJ9odHRw5byC5q2l6K+35rGC77yb56ys5LqM5Liq5Y+C5pWw77ya6K+35rGCdXJsO+esrOS4ieS4quWPguaVsO+8muivt+axguaTjeS9nOexu+Wei++8m+esrOWbm+S4quWPguaVsO+8muivt+axguaQuuW4pueahOaVsOaNru+8m+esrOS6lOS4quWPguaVsO+8mlxyXG4gICAgICAgICAg5LiA5Liq5Zue6LCD5Ye95pWw77yM6K+35rGC5ZON5bqU5ZCO55qE5Zue6LCD5Ye95pWw44CCXHJcbiAgICAgICAgKi8gIFxyXG5cclxuICAgICAgICBpZihLdWJlcm5ldGVzLmFscmVhZHlFeGl0SW5Gb2xkZXIoJHNjb3BlLnRhYmxlQ29uZmlnLnNlbGVjdGVkSXRlbXMsICRzY29wZS5zZWxlY3ROb2RlKSl7XHJcbiAgICAgICAgICBtaWdyYXRpb25DbGljay5jbG9zZSgpO1xyXG4gICAgICAgICAgQ29uZmlncy5jdXN0b21BbGVydChcIuaPkOekulwiLCBcIuaTjeS9nOWksei0pTpcIiArIFwi5pWw5o2u5bey5Zyo5b2T5YmN55uu5b2V77yBXCIsICcnLG51bGwsIDAsIFwiZXJyb3JcIik7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfTtcclxuICAgICAgICAgIFxyXG4gICAgICAgIENvbmZpZ3Mub3JhY2xlSW5mb09wZXJhdGUoJGh0dHAsIFwiL2phdmEvY29uc29sZS9hcGkvdm9sdW1lXCIsIENvbmZpZ3MuT3BlcmF0ZVR5cGUuTU9WRSwgXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IG1pZ3JhdGlvbkNsaWNrLnNlbGVjdGVkSXRlbS5uYW1lLFxyXG4gICAgICAgICAgXCJzZWxlY3RJdGVtc1wiOiAkc2NvcGUudGFibGVDb25maWcuc2VsZWN0ZWRJdGVtcyxcclxuICAgICAgICAgIFwic2VsZWN0Tm9kZVwiOiAkc2NvcGUuc2VsZWN0Tm9kZVxyXG4gICAgICAgIH0sIChyZXN1bHQsIHN0YXR1cykgPT4ge1xyXG4gICAgICAgICAgaWYoc3RhdHVzPT09MjAwKXtcclxuICAgICAgICAgICAgICAgIC8vJHNjb3BlLm1vZGVsLnVwZGF0ZU9yYWNsZVBhcmFtKCk7XHJcbiAgICAgICAgICB9ZWxzZVxyXG4gICAgICAgICAgICB0aHJvdyBcIui1hOa6kOivt+axguWksei0pVwiOyAgICAgICAgICAgXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLypcclxuICAgICAgICAg6aG16Z2i6Lez6L2sXHJcbiAgICAgICAgKi9cclxuICAgICAgICAkdGltZW91dCgoKSA9PntcclxuICAgICAgICAgICAgJGxvY2F0aW9uLnBhdGgoXCIvd29ya3NwYWNlcy9PdmVydmlldy90YXNrXCIpO1xyXG4gICAgICAgIH0sMjUwKTtcclxuICAgICAgICBtaWdyYXRpb25DbGljay5jbG9zZSgpOyAgICAgXHJcbiAgICAgIH0sXHJcbiAgICAgIG9wZW46IChzZWxlY3RlZCkgPT57XHJcbiAgICAgICAgdmFyIG1pZ3JhdGlvbkNsaWNrID0gJHNjb3BlLm1pZ3JhdGlvbkNsaWNrOyAgIFxyXG4gICAgICAgIFxyXG4gICAgICAgIENvbmZpZ3NNb2RlbC51cGRhdGVWb2x1bWVEYXRhKCk7XHJcbiAgICAgICAgaWYoQ29uZmlnc01vZGVsLmNsdXN0ZXIhPW51bGwpXHJcbiAgICAgICAgICAkc2NvcGUudm9sdW1lcyA9IENvbmZpZ3NNb2RlbC5jbHVzdGVyOyAgXHJcblxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICDliKTmlq3mlbDmja7mmK/lkKblt7LmjILovb3kvb/nlKjlkozmraPlnKjov4Hnp7vjgIJcclxuICAgICAgICAqLyAgXHJcblxyXG4gICAgICAgIHZhciBtZXNzYWdlID0gS3ViZXJuZXRlcy5jaGVja0Zvck1pZ3JhdGlvbigkc2NvcGUucmVwbGljYXNNb2RlbC5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzLCAkc2NvcGUubW9kZWwudHJhbnNmZXJUYXNrcyAsICRzY29wZS50YWJsZUNvbmZpZy5zZWxlY3RlZEl0ZW1zLCBcIm1hbmFnZXJcIik7XHJcblxyXG4gICAgICAgIGlmKG1lc3NhZ2UgPT0gXCJcIil7XHJcbiAgICAgICAgICBpZigkc2NvcGUudm9sdW1lcyAmJiAkc2NvcGUudm9sdW1lcyBpbnN0YW5jZW9mIEFycmF5ICYmICRzY29wZS52b2x1bWVzLmxlbmd0aCA+MClcclxuICAgICAgICAgICAgbWlncmF0aW9uQ2xpY2suc2VsZWN0ZWRJdGVtID0gJHNjb3BlLnZvbHVtZXNbMF07IFxyXG4gICAgICAgICAgbWlncmF0aW9uQ2xpY2suZGlhbG9nLm9wZW4oKTsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICBDb25maWdzLmN1c3RvbUFsZXJ0KFwi5o+Q56S6XCIsIFwi5pON5L2c5aSx6LSlOlwiICsgbWVzc2FnZSArIFwiLCDkuI3og73ov4Hnp7vvvIFcIiwgJycsbnVsbCwgMCwgXCJlcnJvclwiKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGNsb3NlOiAoKSA9PiB7XHJcbiAgICAgICAgJHNjb3BlLm1pZ3JhdGlvbkNsaWNrLnNlbGVjdGVkSXRlbSA9IHtcIm5hbWVcIjogXCLlvZPliY3msqHmnInlj6/ku6Xov4Hnp7vnmoTpm4bnvqRcIn07XHJcbiAgICAgICAgJHNjb3BlLm1pZ3JhdGlvbkNsaWNrLmRpYWxvZy5jbG9zZSgpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgICRzY29wZS5jcmVhdGVPcmFjbGVTZXJ2aWNlID0gKGl0ZW1zKSA9PnsgICAgICAgICAgXHJcbiAgICAgIHZhciAgZXhpdGVkSXRlbXMgPSAgS3ViZXJuZXRlcy5jaGVja0ZvckNyZWF0ZU9yYWNsZSgkc2NvcGUubW9kZWwudHJhbnNmZXJUYXNrcywgaXRlbXMpOyBcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgICAgICAvLyBjb2RlLi4uXHJcbiAgICAgICAgaWYoaXRlbXNbaV0uZGF0YUJhc2VUeXBlICE9ICdPUkFDTEUnKXtcclxuICAgICAgICAgIENvbmZpZ3MuY3VzdG9tQWxlcnQoXCLmj5DnpLpcIiwgXCLmk43kvZzlpLHotKU6IOmdnk9SQUNMReaVsOaNruS4jemcgOimgeaMgui9veWQr+WKqO+8gVwiLCAnJywgbnVsbCwgMCwgXCJlcnJvclwiKTsgXHJcbiAgICAgICAgICByZXR1cm47ICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICB9ICAgIFxyXG4gICAgICBpZihleGl0ZWRJdGVtcy5sZW5ndGggPT0gMCl7ICAgIFxyXG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChpdGVtcywoaXRlbSk9PnsgIFxyXG4gICAgICAgIGNvbnNvbGUubG9nKGl0ZW0pOyAgICAgICAgXHJcbiAgICAgICAgICB2YXIgaXNFeGl0ZWQgPSBLdWJlcm5ldGVzLmNoZWNrRm9yRXhpdCgkc2NvcGUucmVwbGljYXNNb2RlbC5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzLCBpdGVtKTtcclxuICAgICAgICAgIGlmKCFpc0V4aXRlZCl7ICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBLdWJlcm5ldGVzLmNyZWF0ZVJDKHtcclxuICAgICAgICAgICAgICBuYW1lOiBpdGVtLl9rZXksXHJcbiAgICAgICAgICAgICAgbGFiZWxzOiB7XHJcbiAgICAgICAgICAgICAgICBzeXN0ZW06IGl0ZW0uc3lzdGVtQ29kZS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogaXRlbS5kYXRhVmVyc2lvbi50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgcmVnaW9uOiBpdGVtLnJlZ2lvbmFsaXNtQ29kZS50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBhbm5vdGF0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgY2l0eU5hbWU6IGl0ZW0uY2l0eU5hbWUsXHJcbiAgICAgICAgICAgICAgICBkaXN0cmljdE5hbWU6IGl0ZW0uZGlzdHJpY3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgc3lzdGVtTmFtZTogaXRlbS5zeXN0ZW1OYW1lLFxyXG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQrXCJcIixcclxuICAgICAgICAgICAgICAgIHllYXI6IGl0ZW0ueWVhcixcclxuICAgICAgICAgICAgICAgIGNoZWNrb3V0RmxhZzogaXRlbS5jaGVja291dEZsYWdcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHBhdGg6IGl0ZW0uZGF0YVBhdGgrXCJhcHAvXCIsXHJcbiAgICAgICAgICAgICAgaXNUYXJnZXQ6IFwiZmFsc2VcIixcclxuICAgICAgICAgICAgICBpc0V4dHJhY3Q6IGl0ZW0uZXh0cmFjdFN0YXR1c1xyXG4gICAgICAgICAgICB9LCAocmMpID0+eyBcclxuICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMuY29ubmVjdE9yYWNsZSgkaHR0cCwgJHRpbWVvdXQsIFwiL2phdmEvY29uc29sZS9hcGkvY29ubmVjdE9yYWNsZVwiLCBcImNyZWF0ZVwiLCByYywgMCk7ICBcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9ICAgICAgICAgICAgICBcclxuICAgICAgICB9KTsgICAgXHJcbiAgICAgICBcclxuICAgICAgICAkdGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAkbG9jYXRpb24ucGF0aCgnL2t1YmVybmV0ZXMvbmFtZXNwYWNlL2RlZmF1bHQvcmVwbGljYXRpb25Db250cm9sbGVycycpOyAgICAgICAgICAgIFxyXG4gICAgICAgIH0sIDIwMCk7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdmFyIG5hbWUgPSBcIlwiO1xyXG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKGV4aXRlZEl0ZW1zLCAoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBuYW1lICs9IGl0ZW0ubmFtZSArIFwiLVwiICsgaXRlbS5zeXN0ZW1OYW1lICsgXCIsXCI7XHJcbiAgICAgICAgICB9KTsgICAgXHJcbiAgICAgICAgICBDb25maWdzLmN1c3RvbUFsZXJ0KFwi5o+Q56S6XCIsIFwi5pON5L2c5aSx6LSlOiDmraPlnKjov4Hnp7vnmoTmlbDmja7kuI3og73ooqvlkK/liqjvvIFcIiwgJycsIG51bGwsIDAsIFwiZXJyb3JcIik7ICAgICAgICAgIFxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaW5pdCgkc2NvcGUsJGxvY2F0aW9uLCRyb3V0ZVBhcmFtcyl7ICAgICBcclxuICAgICAgJHNjb3BlLmtleVF1ZXJ5ID0gXCJcIjsgXHJcbiAgICAgICRzY29wZS5tb2RlbC5pbml0UGFyYW1PcHRpb25zKCk7XHJcbiAgICAgICRzY29wZS5tb2RlbC51cGRhdGVQYXJhbU9wdGlvbihcImtleVF1ZXJ5XCIsICRzY29wZS5rZXlRdWVyeSk7IFxyXG4gICAgICBpZihDb25maWdzTW9kZWwuY2x1c3RlciE9bnVsbClcclxuICAgICAgICAkc2NvcGUudm9sdW1lcyA9IENvbmZpZ3NNb2RlbC5jbHVzdGVyOyAgXHJcblxyXG4gICAgICAvL+WIm+W7uuS6jOe6p+iPnOWNlSAgICAgIFxyXG4gICAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZUN1cnJlbnRTdWJOYXZCYXIoJHNjb3BlLCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcyk7XHJcbiAgICAgICRzY29wZS5uYXZiYXJJdGVtcyA9W3sgICAgICAgXHJcbiAgICAgICAgaGVyZjogXCJcIixcclxuICAgICAgICBsYWJlbDogXCLlhajpg6hcIixcclxuICAgICAgICB0aXRsZTogXCLmn6XnnIvlhajpg6jmlbDmja5cIixcclxuICAgICAgICBjbGFzczogXCJhY3RpdmVcIixcclxuICAgICAgICBhbGlhczogbnVsbFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVyZjogXCJcIixcclxuICAgICAgICBsYWJlbDogXCLmibnmrKFBXCIsXHJcbiAgICAgICAgdGl0bGU6IFwi5p+l55yL5om55qyhQeeahOaVsOaNrlwiLFxyXG4gICAgICAgIGNsYXNzOiBcIlwiLFxyXG4gICAgICAgIGFsaWFzOiBcIkFcIlxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVyZjogXCJcIixcclxuICAgICAgICBsYWJlbDogXCLmibnmrKFCXCIsXHJcbiAgICAgICAgdGl0bGU6IFwi5p+l55yL5om55qyhQueahOaVsOaNrlwiLFxyXG4gICAgICAgIGNsYXNzOiBcIlwiLFxyXG4gICAgICAgIGFsaWFzOiBcIkJcIlxyXG4gICAgICB9XTtcclxuXHJcbiAgICAgIGlmKCEoJGxvY2F0aW9uLnBhdGgoKS5pbmRleE9mKFwiaG90XCIpID4gLTEpKXtcclxuICAgICAgICAkc2NvcGUudGFibGVDb25maWcuY29sdW1uRGVmcy5zcGxpY2UoNywwLHtcclxuICAgICAgICAgIGZpZWxkOiBcImV4aXN0SG90RGF0YVwiLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICfmmK/lkKblt7LlnKjng63ljLonLFxyXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJpc0V4aXN0SG90Lmh0bWxcIikgICAgXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXREYXRhVHlwZSgkbG9jYXRpb24pe1xyXG4gICAgICB2YXIgcGF0aCA9ICRsb2NhdGlvbi5wYXRoKCk7XHJcbiAgICAgIHZhciBkYXRhVHlwZTtcclxuICAgICAgdmFyIHZvbHVtZVR5cGU7XHJcbiAgICAgIHZhciBzdWJQYXRoID0gcGF0aC5zcGxpdChcIi9cIik7IFxyXG4gICAgICBpZihwYXRoLmluZGV4T2YoXCJob3RcIikgPiAtMSlcclxuICAgICAgICAkc2NvcGUuaXNTaG93ID0gdHJ1ZTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgICRzY29wZS5pc1Nob3cgPSBmYWxzZTtcclxuXHJcbiAgICAgIHN3aXRjaCAoc3ViUGF0aFtzdWJQYXRoLmxlbmd0aCAtMV0pIHtcclxuICAgICAgICBjYXNlIFwiZmluYW5jaWFsXCI6XHJcbiAgICAgICAgICBkYXRhVHlwZSA9IFwi6LSi5pS/XCI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic29jaWFsLXNlY3VyaXR5XCI6XHJcbiAgICAgICAgICBkYXRhVHlwZSA9IFwi56S+5L+dXCI7XHJcbiAgICAgICAgICBicmVhazsgICAgICAgICAgXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGRhdGFUeXBlID0gbnVsbDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9OyAgICAgIFxyXG4gICAgICBzd2l0Y2ggKHN1YlBhdGhbM10pIHtcclxuICAgICAgICBjYXNlIFwiaG90XCI6XHJcbiAgICAgICAgICB2b2x1bWVUeXBlID0gMFxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHZvbHVtZVR5cGUgPSAxXHJcbiAgICAgIH0gICBcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBcImRhdGFUeXBlXCI6IGRhdGFUeXBlLFxyXG4gICAgICAgIFwidm9sdW1lVHlwZVwiOiB2b2x1bWVUeXBlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vZGV2ZWxvcGVyL3RzL2RldmVsb3Blck5hdmlnYXRpb24udHNcIi8+XHJcblxyXG5tb2R1bGUgU3lzdGVte1xyXG5cdGV4cG9ydCB2YXIgIHBsdWdpbk5hbWUgPSBcIlN5c3RlbVwiO1xyXG5cdGV4cG9ydCB2YXIgY29udGV4dCA9IFwiL3N5c3RlbVwiO1x0XHJcblx0ZXhwb3J0IHZhciBwbHVnaW5QYXRoID0gXCJwbHVnaW5zL3N5c3RlbS9cIlxyXG5cdGV4cG9ydCB2YXIgdGVtcGxhdGVQYXRoID0gcGx1Z2luUGF0aCArICdodG1sLyc7XHJcblxyXG5cdGV4cG9ydCBmdW5jdGlvbiBzaGFyZUluaXQoJHNjb3BlKXtcclxuXHRcdC8v5Yib5bu65LqM57qn5a2Q6I+c5Y2VXHJcblx0XHQkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmFjdGl2YXRlQ3VycmVudChbXHJcblx0XHR7XHJcblx0XHRcdGhyZWY6IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnc3lzdGVtLWxpc3QnKSxcclxuXHRcdFx0bGFiZWw6ICfkv6Hmga/ns7vnu5/muIXljZUnLFxyXG5cdFx0XHR0aXRsZTogJ+afpeeci+S/oeaBr+ezu+e7n+a4heWNlSdcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGhyZWY6IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnc3lzdGVtLXZlcmlmaWNhdGlvbicpLFxyXG5cdFx0XHRsYWJlbDogJ+S/oeaBr+ezu+e7n+agoemqjCcsXHJcblx0XHRcdHRpdGxlOiAn5qCh6aqM5L+h5oGv57O757ufJ1x0XHRcdFxyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0aHJlZjogVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdzeXN0ZW0tc3FsTWFuYWdlbWVudCcpLFxyXG5cdFx0XHRsYWJlbDogJ+S/oeaBr+ezu+e7n+iEmuacrOeuoeeQhicsXHJcblx0XHRcdHRpdGxlOiAn566h55CGc3Fs6ISa5pysJ1x0XHRcdFxyXG5cdFx0fSxcclxuXHRcdHtcclxuXHRcdFx0aHJlZjogVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdzeXN0ZW0taGVscCcpLFxyXG5cdFx0XHRsYWJlbDogJ+W4ruWKqScsXHJcblx0XHRcdHRpdGxlOiAn6KGM5pS/5Yy65YiS5Luj56CB5oiW57O757uf5Luj56CB5qOA57SiJyxcclxuXHRcdFx0aXRlbXM6IFt7XHJcblx0XHRcdFx0aHJlZjogVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdzeXN0ZW0taGVscCcsICdyZWdpb25hbGlzbS1zZWFyY2gnKSxcclxuXHRcdFx0XHR0aXRsZTogJ+ihjOaUv+WMuuWIkuS7o+eggeajgOe0oicsXHJcblx0XHRcdFx0bGFiZWw6ICfooYzmlL/ljLrliJLmo4DntKInXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRocmVmOiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3N5c3RlbS1oZWxwJywgJ3N5c3RlbS1zZWFyY2gnKSxcclxuXHRcdFx0XHR0aXRsZTogJ+ezu+e7n+S7o+eggeajgOe0oicsXHJcblx0XHRcdFx0bGFiZWw6ICfns7vnu5/ku6PnoIHmo4DntKInXHJcblx0XHRcdH1dXHRcdFxyXG5cdFx0fV0pO1xyXG5cdH1cclxufSIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cInN5c3RlbUhlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9jb25maWdzL3RzL2NvbmZpZ1BsdWdpbi50c1wiLz5cclxuXHJcbm1vZHVsZSBTeXN0ZW17XHJcblx0ZXhwb3J0IHZhciBfbW9kdWxlID0gYW5ndWxhci5tb2R1bGUocGx1Z2luTmFtZSwgWydoYXd0aW8tY29yZScsICdoYXd0aW8tdWknLCAndWkuY29kZW1pcnJvcicsICd1aS52YWxpZGF0ZScsICdrdWJlcm5ldGVzVUknLCAnbmdGaWxlVXBsb2FkJywgJ25nRGlhbG9nJ10pO1xyXG4gIFx0ZXhwb3J0IHZhciBjb250cm9sbGVyID0gUGx1Z2luSGVscGVycy5jcmVhdGVDb250cm9sbGVyRnVuY3Rpb24oX21vZHVsZSwgcGx1Z2luTmFtZSk7XHJcblx0ZXhwb3J0IHZhciByb3V0ZSA9IFBsdWdpbkhlbHBlcnMuY3JlYXRlUm91dGluZ0Z1bmN0aW9uKHRlbXBsYXRlUGF0aCk7XHJcblxyXG5cdC8qXHJcblx0XHTpobXpnaLot6/nlLHphY3nva5cclxuXHQqL1xyXG5cdF9tb2R1bGUuY29uZmlnKFsnJHByb3ZpZGUnLCAnJHJvdXRlUHJvdmlkZXInLCAoJHByb3ZpZGUsICRyb3V0ZVByb3ZpZGVyKSA9PntcclxuXHRcdCRyb3V0ZVByb3ZpZGVyLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvJyksIHJvdXRlKCdzeXN0ZW1MaXN0Lmh0bWwnLCBmYWxzZSkpXHJcblx0XHRcdFx0XHQgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnc3lzdGVtLWxpc3QnKSwgcm91dGUoJ3N5c3RlbUxpc3QuaHRtbCcsIGZhbHNlKSlcclxuXHRcdFx0XHRcdCAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdzeXN0ZW0taGVscCcpLCByb3V0ZSgncmVnaW9uYWxpc21Db2RlU2VhcmNoLmh0bWwnLCBmYWxzZSkpXHJcblx0XHRcdFx0XHQgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnc3lzdGVtLWhlbHAnLCAncmVnaW9uYWxpc20tc2VhcmNoJyksIHJvdXRlKCdyZWdpb25hbGlzbUNvZGVTZWFyY2guaHRtbCcsIGZhbHNlKSlcclxuXHRcdFx0XHRcdCAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdzeXN0ZW0taGVscCcsICdzeXN0ZW0tc2VhcmNoJyksIHJvdXRlKCdzeXN0ZW1Db2RlU2VhcmNoLmh0bWwnLCBmYWxzZSkpXHJcblx0XHRcdFx0XHQgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnc3lzdGVtLXZlcmlmaWNhdGlvbicpLCByb3V0ZSgnc3lzdGVtVmVyaWZpY2F0aW9uLmh0bWwnLCBmYWxzZSkpXHJcblx0XHRcdFx0XHQgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnc3lzdGVtLXNxbE1hbmFnZW1lbnQnKSwgcm91dGUoJ3N5c3RlbVNRTE1hbmFnZW1lbnQuaHRtbCcsIGZhbHNlKSlcclxuXHRcdFx0XHRcdCAgLndoZW4oY29udGV4dCwge3JlZGlyZWN0VG86IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnc3lzdGVtLWxpc3QnKX0pO1x0XHQgICBcdFx0XHQgIFxyXG5cdH1dKTtcclxuXHJcblx0LypcclxuXHRcdOaooeWdl+WKoOi9veWQjuWIneWni+WMlumFjee9rlxyXG5cdCovXHJcblx0X21vZHVsZS5ydW4oWyd2aWV3UmVnaXN0cnknLCAnJHRlbXBsYXRlQ2FjaGUnLCAnSGF3dGlvTmF2JywgJyRjb21waWxlJywgKHZpZXdSZWdpc3RyeSwgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCBIYXd0aW9OYXYsICAkY29tcGlsZTpuZy5JQ29tcGlsZVNlcnZpY2UpID0+IHtcclxuICAgICAgICB2aWV3UmVnaXN0cnlbJ3N5c3RlbSddID0gQ29uZmlncy50ZW1wbGF0ZVBhdGggKyBcInNoYXJlTGF5b3V0Lmh0bWxcIjsgXHJcbiAgICAgICAgLypcclxuICAgICAgICBcdOS/oeaBr+ezu+e7n+S4gOe6p+iPnOWNleWvvOiIqlxyXG4gICAgICAgICovXHJcbiAgICAgICAgdmFyIGJ1aWxkZXIgPSBIYXd0aW9OYXYuYnVpbGRlcigpOyBcclxuICAgICAgICB2YXIgc3lzdGVtVGFiID0gYnVpbGRlci5pZCgnc3lzdGVtVGFiJylcclxuICAgICAgICAgICAgICAgICAgICAgLnJhbmsoMTApXHJcbiAgICAgICAgICAgICAgICAgICAgIC5ocmVmKCgpID0+IGNvbnRleHQpXHJcbiAgICAgICAgICAgICAgICAgICAgIC50aXRsZSgoKSA9PiAn5L+h5oGv57O757ufJylcclxuICAgICAgICAgICAgICAgICAgICAgLy8uaXNWYWxpZCgoKSA9PiAhQ29yZS5pc1JlbW90ZUNvbm5lY3Rpb24oKSkgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpOyAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICBIYXd0aW9OYXYuYWRkKHN5c3RlbVRhYik7XHJcbiAgICB9XSk7XHJcblxyXG4gICAgX21vZHVsZS5maWx0ZXIoXCJjdXN0b21GaWx0ZXJcIiwgKCkgPT4geyAgIFx0IFx0XHJcbiAgICBcdHJldHVybiAoaW5wdXQsIHN1YlN0cmluZykgPT4ge1xyXG4gICAgXHRcdHZhciByZXB4ICA9IG5ldyBSZWdFeHAoc3ViU3RyaW5nICsgXCIkXCIpO1xyXG4gICAgXHRcdHJldHVybiBpbnB1dC5yZXBsYWNlKHJlcHgsIFwiXCIpO1xyXG4gICAgXHR9XHJcbiAgICB9KTtcclxuXHJcblx0Ly8g5Yqg6L295qih5Z2XIFxyXG5cdGhhd3Rpb1BsdWdpbkxvYWRlci5hZGRNb2R1bGUocGx1Z2luTmFtZSk7IFxyXG59IiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwic3lzdGVtUGx1Z2luLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwic3lzdGVtSGVscGVycy50c1wiLz5cXFxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vY29uZmlncy90cy9jb25maWdzRGF0YVNlcnZpY2UudHNcIi8+XHJcbm1vZHVsZSBTeXN0ZW17XHJcblxyXG5cdGV4cG9ydCB2YXIgUmVnaW9uYWxpc21Db2RlQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoJ1JlZ2lvbmFsaXNtQ29kZUNvbnRyb2xsZXInLCBbXCIkc2NvcGVcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgJ1N5c3RlbU1vZGVsJywgJ05nVGFibGVQYXJhbXMnLCBcclxuXHRcdCgkc2NvcGUsICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgU3lzdGVtTW9kZWwsIE5nVGFibGVQYXJhbXMpID0+e1x0XHRcclxuXHQgICAgXHJcblx0ICAgIHNoYXJlSW5pdCgkc2NvcGUpO1xyXG5cdCAgICAgICAgXHJcblx0ICAgICRzY29wZS5tb2RlbCA9IFN5c3RlbU1vZGVsO1x0ICAgXHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKCRzY29wZS5tb2RlbC5yZWdpb25hbGlzbUluZm8pOyBcclxuXHJcblx0ICAgICRzY29wZS50YWJsZVBhcmFtcyA9IG5ldyBOZ1RhYmxlUGFyYW1zKHtjb3VudDogMjV9LCB7XHJcblx0ICAgIFx0Y291bnRzOiBbMjUsIDUwLCAxMDBdLFxyXG4gICAgICBcdFx0ZGF0YXNldDogJHNjb3BlLm1vZGVsLnJlZ2lvbmFsaXNtSW5mb1xyXG4gICBcdFx0IH0pO1x0ICBcclxuXHR9XSk7XHJcbn0iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJzeXN0ZW1QbHVnaW4udHNcIi8+XHJcbm1vZHVsZSBTeXN0ZW17XHJcblxyXG5cdGV4cG9ydCBmdW5jdGlvbiBjbGFzc2lmeUNpdHkocmVnaW9uYWxpc21JbmZvOiBBcnJheTxhbnk+KXtcclxuXHRcdHZhciByZXN1bHQgPSBbXTtcclxuXHRcdGFuZ3VsYXIuZm9yRWFjaChyZWdpb25hbGlzbUluZm8sIChpdGVtKSA9PntcclxuXHRcdFx0aWYocmVzdWx0LmluZGV4T2YoaXRlbS5jaXR5TmFtZSkgPT0gLTEpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbS5jaXR5TmFtZSk7XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRleHBvcnQgZnVuY3Rpb24gY2xhc3NpZnlDb3VudHJ5KHJlZ2lvbmFsaXNtSW5mbzogQXJyYXk8YW55PiwgY2l0eU5hbWU6IHN0cmluZyl7XHJcblx0XHR2YXIgcmVzdWx0ID0gW107XHJcblx0XHRhbmd1bGFyLmZvckVhY2gocmVnaW9uYWxpc21JbmZvLCAoaXRlbSkgPT57XHJcblx0XHRcdGlmKGl0ZW0uY2l0eU5hbWUgPT0gY2l0eU5hbWUpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goe1xyXG5cdFx0XHRcdFx0bmFtZTogaXRlbS5kaXN0cmljdE5hbWUsIFxyXG5cdFx0XHRcdFx0Y29kZTogaXRlbS5jb2RlXHJcblx0XHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRjbGFzcyBzeXN0ZW1Nb2RlbFNlcnZpY2Vze1xyXG5cdFx0cHVibGljIHN5c3RlbUluZm9MaXN0OiBBcnJheTxhbnk+ID0gW107XHJcblx0XHRwdWJsaWMgc3lzdGVtSW5mbzogQXJyYXk8YW55PiA9IFtdO1xyXG5cdFx0cHVibGljIHJlZ2lvbmFsaXNtSW5mbzogQXJyYXk8YW55PiA9IFtdO1xyXG5cdFx0cHVibGljIHNxbEluZm86IEFycmF5PGFueT4gPSBbXTtcclxuXHRcdC8vcHVibGljIGNoZWNrSW5mbzogQXJyYXk8YW55PiA9IFtdO1xyXG5cclxuXHRcdHB1YmxpYyBjb25zdHJ1Y3Rvcigpe1x0XHRcdFxyXG5cdFx0XHR0aGlzLnVwZGF0ZUNvZGVJbmZvKCk7XHJcblx0XHRcdHRoaXMudXBkYXRlRXhjZWxJbmZvKCk7XHJcblx0XHRcdHRoaXMudXBkYXRlU3FsSW5mbygpO1xyXG5cdFx0XHQvL3RoaXMudXBkYXRlQ2hlY2tJbmZvKCk7XHJcblx0XHRcdC8vY29uc29sZS5sb2coY2xhc3NpZnlDb3VudHJ5KHRoaXMucmVnaW9uYWxpc21JbmZvLCAn5Y2X5Lqs5biCJykpO1xyXG5cdFx0fVx0XHRcclxuXHJcblx0XHRwdWJsaWMgdXBkYXRlRXhjZWxJbmZvKCl7XHJcblx0XHRcdHZhciByZXN1bHQgPSBbXTtcclxuXHRcdFx0JC5hamF4KHtcclxuXHRcdFx0XHRhc3luYzogZmFsc2UsXHJcblx0XHRcdFx0dHlwZTogXCJQT1NUXCIsXHJcblx0XHRcdFx0dXJsOiBcIi9qYXZhL2NvbnNvbGUvYXBpL2ZpbGVPcGVyYXRpb24vZmluZEFsbFwiLFxyXG5cdFx0XHRcdHN1Y2Nlc3M6IChkYXRhKSA9PntcclxuXHRcdFx0XHRcdGlmKGRhdGEpXHJcblx0XHRcdFx0XHRcdHJlc3VsdCA9IGRhdGEuZGF0YTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0XHR0aGlzLnN5c3RlbUluZm9MaXN0ID0gcmVzdWx0O1x0XHRcdFxyXG5cdFx0fVxyXG5cclxuXHRcdHB1YmxpYyB1cGRhdGVTcWxJbmZvKCl7XHJcblx0XHRcdHZhciByZXN1bHQgPSBbXTtcclxuXHRcdFx0JC5hamF4KHtcclxuXHRcdFx0XHRhc3luYzogZmFsc2UsXHJcblx0XHRcdFx0dHlwZTogXCJQT1NUXCIsXHJcblx0XHRcdFx0dXJsOiBcIi9qYXZhL2NvbnNvbGUvYXBpL2ZpbGVQYWNrYWdlL2ZpbmRBbGxcIixcclxuXHRcdFx0XHRzdWNjZXNzOiAoZGF0YSkgPT57XHJcblx0XHRcdFx0XHRpZihkYXRhKVxyXG5cdFx0XHRcdFx0XHRyZXN1bHQgPSBkYXRhLmRhdGE7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdFx0dGhpcy5zcWxJbmZvID0gcmVzdWx0O1x0XHRcdFx0XHJcblx0XHR9XHJcblxyXG5cdFx0cHVibGljIHVwZGF0ZUNvZGVJbmZvKCl7XHJcblx0XHRcdHZhciByZXN1bHQgPSBbXTtcclxuXHQgICAgXHQkLmFqYXgoeyBcclxuXHRcdFx0XHRhc3luYzogZmFsc2UsIFxyXG5cdFx0XHRcdHR5cGUgOiBcIlBPU1RcIiwgXHJcblx0XHRcdFx0dXJsIDogXCIvamF2YS9jb25zb2xlL2FwaS9jb2RlL2xpc3RcIixcdFx0XHRcdFx0XHJcblx0XHRcdFx0c3VjY2VzcyA6IGZ1bmN0aW9uKGRhdGEpIHsgXHJcblx0XHRcdFx0ICAgIGlmKGRhdGEpe1x0XHRcdFx0ICAgIFx0XHRcclxuXHRcdFx0XHRcdCAgICByZXN1bHQgPSBkYXRhO1xyXG5cdFx0XHRcdFx0fVx0XHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdH0gXHJcblx0XHRcdH0pO1xyXG5cdFx0XHR0aGlzLnJlZ2lvbmFsaXNtSW5mbyA9IHJlc3VsdFtcInJlZ2lvbmFsaXNtXCJdO1xyXG5cdFx0XHR0aGlzLnN5c3RlbUluZm8gPSByZXN1bHRbXCJzeXN0ZW1cIl07XHJcblx0XHR9XHJcblxyXG5cdFx0LypwdWJsaWMgdXBkYXRlQ2hlY2tJbmZvKCl7XHJcblx0XHRcdHZhciByZXN1bHQgPSBudWxsO1xyXG5cdCAgICBcdCQuYWpheCh7IFxyXG5cdFx0XHRcdGFzeW5jOiBmYWxzZSwgXHJcblx0XHRcdFx0dHlwZSA6IFwiUE9TVFwiLCBcclxuXHRcdFx0XHR1cmwgOiBcIi9qYXZhL2NvbnNvbGUvYXBpL2NoZWNrb3V0L2ZpbmRBbGxcIixcdFx0XHRcdFx0XHJcblx0XHRcdFx0c3VjY2VzcyA6IGZ1bmN0aW9uKGRhdGEpIHsgXHJcblx0XHRcdFx0ICAgIGlmKGRhdGEpe1x0XHRcdFx0ICAgIFx0XHRcclxuXHRcdFx0XHRcdCAgICByZXN1bHQgPSBkYXRhLmRhdGE7XHRcdFx0XHRcdCAgICBcclxuXHRcdFx0XHRcdH1cdFx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHR9IFxyXG5cdFx0XHR9KTtcclxuXHRcdFx0dGhpcy5jaGVja0luZm8gPSByZXN1bHQ7XHJcblx0XHR9Ki9cclxuXHR9XHJcblxyXG5cdF9tb2R1bGUuZmFjdG9yeSgnU3lzdGVtTW9kZWwnLCBbJyRyb290U2NvcGUnLCAnJGh0dHAnLCAoJHJvb3RTY29wZSwgJGh0dHApID0+IHtcclxuXHRcdHJldHVybiBuZXcgc3lzdGVtTW9kZWxTZXJ2aWNlcygpO1xyXG5cdH1dKTtcclxufSIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cInN5c3RlbVBsdWdpbi50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cInN5c3RlbUhlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJzeXN0ZW1TZXJ2aWNlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2NvbmZpZ3MvdHMvY29uZmlnc1V0aWxzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vY29uZmlncy90cy9jdXN0b21BbGVydC50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcblxyXG5tb2R1bGUgU3lzdGVte1xyXG5cdGV4cG9ydCB2YXIgU3lzdGVtU1FMTWFuYWdlbWVudCA9IGNvbnRyb2xsZXIoJ1N5c3RlbVNRTE1hbmFnZW1lbnQnLCBbJyRzY29wZScsICckbG9jYXRpb24nLCAnJGh0dHAnLCAnJGVsZW1lbnQnLCAnJHRlbXBsYXRlQ2FjaGUnLCAnTmdUYWJsZVBhcmFtcycsICduZ0RpYWxvZycsICdTeXN0ZW1Nb2RlbCcsICgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICRlbGVtZW50LCAkdGVtcGxhdGVDYWNoZSwgTmdUYWJsZVBhcmFtcywgbmdEaWFsb2csIFN5c3RlbU1vZGVsKSA9PiB7XHJcblx0XHRzaGFyZUluaXQoJHNjb3BlKTtcclxuXHRcdCRzY29wZS5jaXRpZXMgPSAgY2xhc3NpZnlDaXR5KFN5c3RlbU1vZGVsLnJlZ2lvbmFsaXNtSW5mbyk7XHJcblxyXG5cdFx0JHNjb3BlLnN0YXR1cyA9IFt7aWQ6IDAsIGxhYmVsOiBcIuaciee8uuWksVwifSwge2lkOiAxLCBsYWJlbDogXCLmraPluLhcIn0sIHtpZDogMiwgbGFiZWw6XCLlvoXlvZLmoaNcIn0sIHtpZDogMywgbGFiZWw6IFwi5b6F5a6h5qC4XCJ9XTtcdFxyXG5cclxuICAgIFN5c3RlbU1vZGVsLnVwZGF0ZVNxbEluZm8oKTtcdFxyXG5cclxuICAgICRzY29wZS5tb2RlbCA9IFN5c3RlbU1vZGVsLnNxbEluZm87IFxyXG5cclxuICAgICRzY29wZS5jaGVja2JveGVzID0ge1xyXG4gICAgICBjaGVja2VkOiBmYWxzZSxcclxuICAgICAgaXRlbXM6IHt9XHJcbiAgICB9O1xyXG5cclxuICAgICRzY29wZS5vcHRpb25zRmlsdGVyPSB7XHJcbiAgICAgIHg6IFwiYWxsXCIsXHJcbiAgICAgIHk6IFwiYWxsXCIsXHJcbiAgICAgIHo6IFwiYWxsXCJcclxuICAgIH1cclxuXHJcblx0XHQkc2NvcGUudGFibGVQYXJhbXMgPSBuZXcgTmdUYWJsZVBhcmFtcyh7Y291bnQ6IDI1fSwge1xyXG5cdCAgICBjb3VudHM6IFsyNSwgNTAsIDEwMF0sXHJcbiAgICAgIGRhdGFzZXQ6ICRzY29wZS5tb2RlbFxyXG4gICBcdH0pO1xyXG5cclxuICAgICRzY29wZS5jaXR5U2VsZWN0ID0gKHgpID0+IHtcclxuICAgICAgJHNjb3BlLm9wdGlvbnNGaWx0ZXIueCA9IHg7XHJcbiAgICAgICRzY29wZS5vcHRpb25zRmlsdGVyLnkgPSAkc2NvcGUueSA9IFwiYWxsXCI7XHJcbiAgICAgIGlmKHggIT0gXCJhbGxcIil7XHJcbiAgICAgICAgJHNjb3BlLmNvdW50cmllcyA9IGNsYXNzaWZ5Q291bnRyeShTeXN0ZW1Nb2RlbC5yZWdpb25hbGlzbUluZm8sIHgpOyAgLy/ojrflj5blvZPliY3luILkuIvmiYDmnInljLrljr8gXHJcbiAgICAgIH1lbHNleyAgICAgICAgXHJcbiAgICAgICAgJHNjb3BlLmNvdW50cmllcyA9IFtdOyAgICAgICAgICAgICBcclxuICAgICAgfSAgICAgIFxyXG4gICAgfSBcclxuXHJcbiAgICAkc2NvcGUuY291bnRyeVNlbGVjdCA9ICh5KSA9PiB7XHJcbiAgICAgICRzY29wZS5vcHRpb25zRmlsdGVyLnkgPSB5O1xyXG4gICAgfVxyXG5cclxuICAgICRzY29wZS5zdGF0dXNTZWxlY3QgPSAoeikgPT4ge1xyXG4gICAgICAkc2NvcGUub3B0aW9uc0ZpbHRlci56ID0gejsgXHJcbiAgICB9XHJcblxyXG4gICAgJHNjb3BlLiR3YXRjaCgoKSA9PntcclxuICAgICAgcmV0dXJuICRzY29wZS5vcHRpb25zRmlsdGVyO1xyXG4gICAgfSwgKHZhbHVlKSA9PnsgICAgICAgXHJcbiAgICAgIHNoYXJlVXBkYXRlKCRzY29wZS5tb2RlbCwgdmFsdWUpO1xyXG4gICAgfSwgdHJ1ZSk7XHJcblxyXG4gICAgJHNjb3BlLnF1aWNrQ2hlY2sgPSAoKSA9PiB7XHJcbiAgICAgIHVwZGF0ZVNxbFN0YXR1cyhcIi9qYXZhL2NvbnNvbGUvYXBpL2ZpbGVQYWNrYWdlL3RvdGFsVmVyaWZ5U3FsRmlsZVwiKTsgICAgIFxyXG4gICAgfVxyXG5cclxuICAgICRzY29wZS5xdWlja0ZpbGUgPSAoKSA9PiB7XHJcbiAgICAgIHVwZGF0ZVNxbFN0YXR1cyhcIi9qYXZhL2NvbnNvbGUvYXBpL2ZpbGVQYWNrYWdlL3RvdGFsT25ob2xlU3FsRmlsZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICAkc2NvcGUuaGVscCA9ICgpID0+IHtcclxuICAgICAgbmdEaWFsb2cub3Blbih7XHJcbiAgICAgICAgdGVtcGxhdGU6ICdzdGF0dXNIZWxwLmh0bWwnLCAgICAgICAgXHJcbiAgICAgICAgd2lkdGg6IDYwMCwgXHJcbiAgICAgICAgaGVpZ2h0OiAzNzAsICAgICAgICAgXHJcbiAgICAgICAgY2xvc2VCeURvY3VtZW50OiBmYWxzZSwgXHJcbiAgICAgICAgY2xhc3NOYW1lOiAnbmdkaWFsb2ctdGhlbWUtZGVmYXVsdCdcclxuICAgICAgfSk7ICBcclxuICAgIH1cclxuXHJcbiAgICAgXHQvLyB3YXRjaCBmb3IgY2hlY2sgYWxsIGNoZWNrYm94XHJcbiBcdFx0JHNjb3BlLiR3YXRjaChmdW5jdGlvbigpIHtcclxuICAgIFx0XHRyZXR1cm4gJHNjb3BlLmNoZWNrYm94ZXMuY2hlY2tlZDtcclxuICBcdH0sIGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICBcdFx0YW5ndWxhci5mb3JFYWNoKCRzY29wZS5tb2RlbCwgZnVuY3Rpb24oaXRlbSkge1xyXG4gICAgICBcdFx0JHNjb3BlLmNoZWNrYm94ZXMuaXRlbXNbaXRlbS5pZF0gPSB2YWx1ZTtcclxuICAgIFx0XHR9KTtcclxuICBcdH0pO1xyXG4gICAgXHJcbiAgXHQvLyB3YXRjaCBmb3IgZGF0YSBjaGVja2JveGVzXHJcbiAgXHQkc2NvcGUuJHdhdGNoKGZ1bmN0aW9uKCkge1xyXG4gICAgXHRcdHJldHVybiAkc2NvcGUuY2hlY2tib3hlcy5pdGVtcztcclxuIFx0XHR9LCBmdW5jdGlvbih2YWx1ZXMpIHsgIFxyXG4gICAgICAkc2NvcGUuY2hlY2thYmxlID0gZmFsc2U7XHJcbiAgICAgIGZvcih2YXIgaW5kZXggaW4gdmFsdWVzKXtcclxuICAgICAgICBpZih2YWx1ZXNbaW5kZXhdID09IHRydWUpe1xyXG4gICAgICAgICAgJHNjb3BlLmNoZWNrYWJsZSA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH0gXHJcbiAgICAgIHZhciBjaGVja2VkID0gMCwgdW5jaGVja2VkID0gMCxcclxuICAgICAgdG90YWwgPSAkc2NvcGUubW9kZWwubGVuZ3RoO1xyXG4gICAgICBhbmd1bGFyLmZvckVhY2goJHNjb3BlLm1vZGVsLCBmdW5jdGlvbihpdGVtKSB7XHJcbiAgICAgICAgY2hlY2tlZCArPSAoJHNjb3BlLmNoZWNrYm94ZXMuaXRlbXNbaXRlbS5pZF0pIHx8IDA7XHJcbiAgICAgICAgdW5jaGVja2VkICs9IE51bWJlcigoISRzY29wZS5jaGVja2JveGVzLml0ZW1zW2l0ZW0uaWRdKSkgfHwgMDtcclxuICAgICAgfSk7XHJcbiAgICBcdGlmICgodW5jaGVja2VkID09IDApIHx8IChjaGVja2VkID09IDApKSB7XHJcbiAgICAgIFx0JHNjb3BlLmNoZWNrYm94ZXMuY2hlY2tlZCA9IChjaGVja2VkID09IHRvdGFsKTtcclxuICAgIFx0fSAgICBcdFxyXG4gICAgXHRhbmd1bGFyLmVsZW1lbnQoJGVsZW1lbnRbMF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInNlbGVjdC1hbGxcIikpLnByb3AoXCJpbmRldGVybWluYXRlXCIsIChjaGVja2VkICE9IDAgJiYgdW5jaGVja2VkICE9IDApKTtcclxuICBcdH0sIHRydWUpOyBcclxuXHJcbiAgICBcdC8v5p+l55yLXHJcbiAgXHQkc2NvcGUudmlld1NxbCA9IChzZWxlY3RlZCwgdHlwZSkgPT4geyAgICBcdFx0XHJcbiAgXHRcdG5nRGlhbG9nLm9wZW4oeyBcclxuICAgIFx0XHR0ZW1wbGF0ZTogJ3NxbFZpZXcuaHRtbCcsXHJcbiAgICBcdFx0Y29udHJvbGxlcjonQ29uZmlncy5TcWxWaWV3Q29udHJvbGxlcicsXHJcbiAgICBcdFx0d2lkdGg6IDEwMDAsXHJcbiAgICBcdFx0aGVpZ2h0OiA2MDAsXHJcbiAgICBcdFx0c2NvcGU6ICRzY29wZSwgXHJcbiAgICBcdFx0Y2xvc2VCeURvY3VtZW50IDogZmFsc2UsXHJcbiAgICBcdFx0ZGF0YToge3R5cGU6IHR5cGUsIGl0ZW06IHNlbGVjdGVkIH0sXHRcclxuICAgIFx0XHRjbGFzc05hbWU6ICduZ2RpYWxvZy10aGVtZS1kZWZhdWx0J1xyXG4gICAgXHR9KTtcdCBcclxuICBcdH1cclxuXHJcbiAgICBcdC8v5LiK5LygXHJcbiAgXHQkc2NvcGUuYWRkU3FsID0gKHNlbGVjdGVkLCB0eXBlKSA9PiB7ICAgIFx0XHRcclxuICBcdFx0bmdEaWFsb2cub3Blbih7IFxyXG4gICAgXHRcdHRlbXBsYXRlOiAnc3FsQWRkLmh0bWwnLFxyXG4gICAgXHRcdGNvbnRyb2xsZXI6J0NvbmZpZ3MuU3FsQWRkQ29udHJvbGxlcicsXHJcbiAgICBcdFx0d2lkdGg6IDYwMCxcclxuICAgIFx0XHRoZWlnaHQ6IDYwMCxcclxuICAgIFx0XHRzY29wZTogJHNjb3BlLCBcclxuICAgIFx0XHRjbG9zZUJ5RG9jdW1lbnQgOiBmYWxzZSxcclxuICAgIFx0XHRkYXRhOiB7dHlwZTogdHlwZSwgaXRlbTogc2VsZWN0ZWQgfSxcdFxyXG4gICAgXHRcdGNsYXNzTmFtZTogJ25nZGlhbG9nLXRoZW1lLWRlZmF1bHQnXHJcbiAgICBcdH0pO1x0XHJcbiAgXHR9IFxyXG5cclxuICAgIC8v5a6h5qC4XHJcbiAgXHQkc2NvcGUudmVyaWZ5U3FsID0gKHNlbGVjdGVkLCB0eXBlKSA9PiB7XHJcbiAgXHRcdG5nRGlhbG9nLm9wZW4oeyBcclxuICAgIFx0XHR0ZW1wbGF0ZTogJ3NxbFZlcmlmaWNhdGlvbi5odG1sJyxcclxuICAgIFx0XHRjb250cm9sbGVyOidDb25maWdzLnNxbFZlcmlmaWNhdGlvbkNvbnRyb2xsZXInLFxyXG4gICAgXHRcdHdpZHRoOiAxMDAwLFxyXG4gICAgXHRcdGhlaWdodDogNjAwLFxyXG4gICAgXHRcdHNjb3BlOiAkc2NvcGUsIFxyXG4gICAgXHRcdGNsb3NlQnlEb2N1bWVudCA6IGZhbHNlLFxyXG4gICAgXHRcdGRhdGE6IHt0eXBlOiB0eXBlLCBpdGVtOiBzZWxlY3RlZCB9LFx0XHJcbiAgICBcdFx0Y2xhc3NOYW1lOiAnbmdkaWFsb2ctdGhlbWUtZGVmYXVsdCdcclxuICAgIFx0fSk7XHJcbiAgXHR9XHJcblxyXG4gICAgLy/mm7/mjaJcclxuICBcdCRzY29wZS5tb3ZlU3FsID0gKHNlbGVjdGVkLCB0eXBlKSA9PiB7XHJcbiAgIFx0XHRuZ0RpYWxvZy5vcGVuKHsgXHJcbiAgICBcdFx0dGVtcGxhdGU6ICdzcWxNb3ZlLmh0bWwnLFxyXG4gICAgXHRcdGNvbnRyb2xsZXI6J0NvbmZpZ3Muc3FsTW92ZUNvbnRyb2xsZXInLFxyXG4gICAgXHRcdHdpZHRoOiA2MDAsXHJcbiAgICBcdFx0aGVpZ2h0OiA2MDAsXHJcbiAgICBcdFx0c2NvcGU6ICRzY29wZSwgXHJcbiAgICBcdFx0Y2xvc2VCeURvY3VtZW50IDogZmFsc2UsXHJcbiAgICBcdFx0ZGF0YToge3R5cGU6IHR5cGUsIGl0ZW06IHNlbGVjdGVkIH0sXHRcclxuICAgIFx0XHRjbGFzc05hbWU6ICduZ2RpYWxvZy10aGVtZS1kZWZhdWx0J1xyXG4gICAgXHR9KTsgICBcdFx0XHJcbiAgXHR9XHJcblxyXG4gIFx0JHNjb3BlLiRvbignb25PaycsIChldmVudCwgZGF0YSkgPT4ge1xyXG4gIFx0XHRDb25maWdzLmNyZWF0ZV9tYXNrKCk7ICAvL+WIm+W7uumBrue9qeWxglxyXG5cdFx0ICBLdWJlcm5ldGVzLmNyZWF0ZV9sb2NhZEVmZmVjdChcIuato+WcqOabtOaWsOaWh+S7tizor7fnqI3nrYnvvIFcIik7IC8v5Yib5bu65pWw5o2u5Yqg6L295pWI5p6c5bGCXHJcbiAgICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9hZGluZycpXHJcbiAgICAgIHZhciBzcGlubmVyID0gbmV3IFNwaW5uZXIoS3ViZXJuZXRlcy5sb2FkQ29uZmlncygpKS5zcGluKHRhcmdldCk7ICAgIFxyXG4gIFx0XHQkaHR0cCh7XHJcblx0XHRcdCAgdXJsOiBcIi9qYXZhL2NvbnNvbGUvYXBpL2ZpbGVQYWNrYWdlL2hhbmRsZVNxbEZpbGVcIixcclxuXHRcdFx0ICBtZXRob2Q6IFwiUE9TVFwiLFxyXG5cdFx0XHQgIHBhcmFtczoge3R5cGU6IGRhdGEudHlwZSwgb3B0OiBkYXRhLm9wdH0sXHRcdFx0XHRcclxuXHRcdFx0ICBkYXRhOiBKU09OLnN0cmluZ2lmeSh7XHJcblx0XHRcdFx0ICBpdGVtOiBkYXRhLml0ZW0sIFxyXG5cdFx0XHRcdCAgY29udGVudDogZGF0YS5jb250ZW50XHJcblx0XHRcdCAgfSlcclxuXHRcdCAgfSkuc3VjY2VzcygoZGF0YSxoZWFkZXIsY29uZmlnLHN0YXR1cykgPT4ge1xyXG5cdFx0IFx0ICAkKFwiI2xvYWRcIikucmVtb3ZlKCk7XHJcbiAgICAgICAgS3ViZXJuZXRlcy5yZW1vdmVNYXNrKCk7IFxyXG4gICAgICAgICRzY29wZS5tb2RlbCA9IFN5c3RlbU1vZGVsLnNxbEluZm8gPSBkYXRhLmRhdGE7ICAgXHJcbiAgICAgICAgc2hhcmVVcGRhdGUoJHNjb3BlLm1vZGVsLCAkc2NvcGUub3B0aW9uc0ZpbHRlcik7XHJcblx0XHQgIH0pLmVycm9yKChkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKSA9PiB7XHRcclxuICAgICAgICAkKFwiI2xvYWRcIikucmVtb3ZlKCk7XHJcbiAgICAgICAgS3ViZXJuZXRlcy5yZW1vdmVNYXNrKCk7XHRcdFx0XHRcclxuXHRcdCAgfSk7XHJcbiAgXHR9KTtcclxuXHJcbiAgXHQkc2NvcGUuJG9uKFwicmVwbGFjZVwiLCAoZXZlbnQsIGRhdGEpID0+IHtcclxuICBcdFx0JGh0dHAoe1xyXG5cdFx0XHQgIHVybDogXCIvamF2YS9jb25zb2xlL2FwaS9maWxlUGFja2FnZS9oYW5kbGVTcWxGaWxlXCIsXHJcblx0XHRcdCAgbWV0aG9kOiBcIlBPU1RcIixcclxuXHRcdFx0ICBwYXJhbXM6IHt0eXBlOiBkYXRhLnR5cGUsIG9wdDogZGF0YS5vcHR9LFx0XHRcdFx0XHJcblx0XHRcdCAgZGF0YTogSlNPTi5zdHJpbmdpZnkoe1xyXG5cdFx0XHRcdCAgaXRlbTogZGF0YS5pdGVtLCBcclxuXHRcdFx0XHQgIGNvbnRlbnQ6IGRhdGEuY29udGVudFxyXG5cdFx0XHQgIH0pXHJcblx0XHQgIH0pLnN1Y2Nlc3MoKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpID0+IHtcclxuICAgICAgICAkc2NvcGUubW9kZWwgPSBTeXN0ZW1Nb2RlbC5zcWxJbmZvID0gZGF0YS5kYXRhO1xyXG5cdFx0XHQgIHNoYXJlVXBkYXRlKCRzY29wZS5tb2RlbCwgJHNjb3BlLm9wdGlvbnNGaWx0ZXIpO1xyXG5cdFx0ICB9KS5lcnJvcigoZGF0YSxoZWFkZXIsY29uZmlnLHN0YXR1cykgPT4ge1xyXG5cdFx0XHQgIENvbmZpZ3MuY3VzdG9tQWxlcnQoXCLmj5DnpLpcIiwgXCLohJrmnKzmm7/mjaLmiJblvZLmoaPlpLHotKXvvIFcIiwgJycsbnVsbCwgMCwgXCJlcnJvclwiKTtcclxuXHRcdCAgfSk7ICAgIFx0XHRcclxuICBcdH0pOyBcclxuXHJcbiAgXHRmdW5jdGlvbiBzaGFyZVVwZGF0ZSAoZGF0YSwgdmFsdWUpeyAgICAgICAgICAgICAgICBcclxuICAgICAgdmFyIGZpbHRlciA9IGRhdGEsIHJlc3VsdCA9IFtdOyAgICAgICAgICAgIFxyXG4gICAgICBpZih2YWx1ZS54ICE9IFwiYWxsXCIpe1xyXG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChmaWx0ZXIsIChpdGVtKSA9PiB7XHJcbiAgICAgICAgICBpZihpdGVtLmNpdHlOYW1lID09IHZhbHVlLngpXHJcbiAgICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZmlsdGVyID0gcmVzdWx0O1xyXG4gICAgICAgIHJlc3VsdCA9IFtdO1xyXG4gICAgICB9ICAgICAgICAgIFxyXG5cclxuICAgICAgaWYodmFsdWUueSAhPSBcImFsbFwiKXtcclxuICAgICAgICBhbmd1bGFyLmZvckVhY2goZmlsdGVyLCAoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgaWYoaXRlbS5kaXN0cmljdE5hbWUgPT0gdmFsdWUueSlcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICBmaWx0ZXIgPSByZXN1bHQ7XHJcbiAgICAgICAgcmVzdWx0ID0gW107XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmKHZhbHVlLnogIT0gXCJhbGxcIil7XHJcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKGZpbHRlciwgKGl0ZW0pID0+e1xyXG4gICAgICAgICAgaWYoJHNjb3BlLnN0YXR1c1tpdGVtLnN5c1N0YXR1c10ubGFiZWwgPT0gdmFsdWUueilcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICBmaWx0ZXIgPSByZXN1bHQ7XHJcbiAgICAgICAgcmVzdWx0ID0gW107XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgICRzY29wZS50YWJsZVBhcmFtcy5zZXR0aW5ncyh7XHJcbiAgICAgICAgZGF0YXNldDogZmlsdGVyXHJcbiAgICAgIH0pOyBcclxuXHJcbiAgICAgICRzY29wZS5jaGVja2JveGVzID0ge1xyXG4gICAgICAgIGNoZWNrZWQ6IGZhbHNlLFxyXG4gICAgICAgIGl0ZW1zOiB7fVxyXG4gICAgICB9OyAgICAgICBcclxuICBcdH0gXHJcblxyXG4gICAgZnVuY3Rpb24gdXBkYXRlU3FsU3RhdHVzKHVybDogc3RyaW5nKSB7XHJcbiAgICAgIHZhciBpdGVtcyA9IFtdO1xyXG4gICAgICBpZigkc2NvcGUubW9kZWwgJiYgJHNjb3BlLm1vZGVsLmxlbmd0aCA+IDApe1xyXG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUubW9kZWwsIChpdGVtKSA9PiB7XHJcbiAgICAgICAgICBpZigkc2NvcGUuY2hlY2tib3hlcy5pdGVtc1tpdGVtLmlkXSlcclxuICAgICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBpZihpdGVtcy5sZW5ndGggPD0gMClcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIENvbmZpZ3MuY3JlYXRlX21hc2soKTsgIC8v5Yib5bu66YGu572p5bGCXHJcbiAgICAgIEt1YmVybmV0ZXMuY3JlYXRlX2xvY2FkRWZmZWN0KFwi5q2j5Zyo5pu05paw5paH5Lu2LOivt+eojeetie+8gVwiKTsgLy/liJvlu7rmlbDmja7liqDovb3mlYjmnpzlsYJcclxuXHJcbiAgICAgICRodHRwKHtcclxuICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICBtZXRob2Q6ICdQT1NUJywgICAgICAgICAgICBcclxuICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShpdGVtcylcclxuICAgICAgfSkuc3VjY2VzcyhmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcclxuICAgICAgICAkc2NvcGUubW9kZWwgPSBTeXN0ZW1Nb2RlbC5zcWxJbmZvID0gZGF0YS5kYXRhOyAgIFxyXG4gICAgICAgIHNoYXJlVXBkYXRlKCRzY29wZS5tb2RlbCwgJHNjb3BlLm9wdGlvbnNGaWx0ZXIpOyAgICAgICBcclxuICAgICAgICAkKFwiI2xvYWRcIikucmVtb3ZlKCk7XHJcbiAgICAgICAgS3ViZXJuZXRlcy5yZW1vdmVNYXNrKCk7ICAgIFxyXG4gICAgICAgIC8v5ZON5bqU5oiQ5YqfXHJcbiAgICAgIH0pLmVycm9yKGZ1bmN0aW9uKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpe1xyXG4gICAgICAgIC8v5aSE55CG5ZON5bqU5aSx6LSlIFxyXG4gICAgICAgICQoXCIjbG9hZFwiKS5yZW1vdmUoKTtcclxuICAgICAgICBLdWJlcm5ldGVzLnJlbW92ZU1hc2soKTsgXHJcbiAgICAgICAgQ29uZmlncy5jdXN0b21BbGVydChcIuaPkOekulwiLCBcIuS4gOmUruWuoeaguOaIluW9kuaho+Wksei0pe+8gVwiLCAnJyxudWxsLCAwLCBcImVycm9yXCIpOyAgICAgICAgXHJcbiAgICAgIH0pOyAgICAgXHJcbiAgICB9ICAgICBcclxuXHR9XSlcclxufSIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cInN5c3RlbVBsdWdpbi50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cInN5c3RlbUhlbHBlcnMudHNcIi8+XHJcbm1vZHVsZSBTeXN0ZW17XHJcblxyXG4gICAgZXhwb3J0IHZhciBTeXN0ZW1Db2RlQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoJ1N5c3RlbUNvZGVDb250cm9sbGVyJywgW1wiJHNjb3BlXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsICdTeXN0ZW1Nb2RlbCcsICdOZ1RhYmxlUGFyYW1zJyxcclxuICAgICAgICAoJHNjb3BlLCAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbiwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIFN5c3RlbU1vZGVsLCBOZ1RhYmxlUGFyYW1zKSA9PnsgICAgICAgICAgICAgIFxyXG5cclxuICAgICAgICBzaGFyZUluaXQoJHNjb3BlKTtcclxuXHJcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gU3lzdGVtTW9kZWw7XHJcblxyXG4gICAgICAgICRzY29wZS50YWJsZVBhcmFtcyA9IG5ldyBOZ1RhYmxlUGFyYW1zKHtjb3VudDogMjV9LCB7XHJcblx0ICAgIFx0Y291bnRzOiBbMjUsIDUwLCAxMDBdLFxyXG4gICAgICBcdFx0ZGF0YXNldDogJHNjb3BlLm1vZGVsLnN5c3RlbUluZm9cclxuICAgXHRcdH0pO1xyXG4gICAgfV0pO1xyXG59IiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwic3lzdGVtUGx1Z2luLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwic3lzdGVtSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2NvbmZpZ3MvdHMvY3VzdG9tQWxlcnQudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwic3lzdGVtSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2NvbmZpZ3MvdHMvY29uZmlnc1V0aWxzLnRzXCIvPlxyXG5cclxubW9kdWxlIFN5c3RlbXtcclxuXHRleHBvcnQgdmFyIFN5c3RlbUxpc3RDb250cm9sbGVyID0gY29udHJvbGxlcignU3lzdGVtTGlzdENvbnRyb2xsZXInLCBbJyRzY29wZScsICckbG9jYXRpb24nLCAnJGh0dHAnLCAnJHRlbXBsYXRlQ2FjaGUnLCAnVXBsb2FkJywgJ05nVGFibGVQYXJhbXMnLCAnbmdEaWFsb2cnLCAnU3lzdGVtTW9kZWwnLCAoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGVtcGxhdGVDYWNoZSwgVXBsb2FkLCBOZ1RhYmxlUGFyYW1zLCBuZ0RpYWxvZywgU3lzdGVtTW9kZWwpID0+IHtcclxuXHRcdHNoYXJlSW5pdCgkc2NvcGUpO1xyXG5cclxuICAgICRzY29wZS5tb2RlbFNlcnZpY2VzID0gU3lzdGVtTW9kZWw7XHJcbiAgICAkc2NvcGUubW9kZWxTZXJ2aWNlcy51cGRhdGVFeGNlbEluZm8oKTtcclxuICAgICRzY29wZS5tb2RlbCA9IFN5c3RlbU1vZGVsLnN5c3RlbUluZm9MaXN0OyAgIFxyXG5cclxuXHRcdC8vIOihqOWktOaYvuekuueahOS/oeaBr1xyXG5cdFx0JHNjb3BlLmNvbHVtbnM9IFtcclxuICAgICAgICAgIHsgZmllbGQ6ICdpZCcsIHRpdGxlOiAn5pON5L2cJywgc2hvdzogdHJ1ZX0sXHRcdFx0XHJcbiAgICAgIFx0XHR7IGZpZWxkOiBcImNvbGxlY3Rpb25cIiwgdGl0bGU6IFwi6YeH6ZuG5a+56LGhXCIsIGZpbHRlcjogeyBjb2xsZWN0aW9uOiBcInNlbGVjdFwiIH0sIGZpbHRlckRhdGE6IGJvb2xlYW5DaG9vc2UoKSwgc2hvdzogdHJ1ZSB9LFxyXG4gICAgICBcdFx0eyBmaWVsZDogXCJjaXR5TmFtZVwiLCB0aXRsZTogXCLluIJcIiwgZmlsdGVyOiB7IGNpdHlOYW1lOiAndGV4dCcgfSwgc2hvdzogdHJ1ZSB9LFxyXG4gICAgICBcdFx0eyBmaWVsZDogXCJkaXN0cmljdE5hbWVcIiwgdGl0bGU6IFwi5Yy6L+WOv1wiLCBmaWx0ZXI6IHsgZGlzdHJpY3ROYW1lOiAndGV4dCcgfSwgc2hvdzogdHJ1ZSB9LFxyXG4gICAgICBcdFx0eyBmaWVsZDogXCJhcmVhQ29kZVwiLCB0aXRsZTogXCLooYzmlL/ljLrliJLku6PnoIFcIiwgZmlsdGVyOiB7YXJlYUNvZGU6ICd0ZXh0J30sIHNob3c6IHRydWUgfSxcclxuICAgICAgXHRcdHsgZmllbGQ6IFwiYXJlYUxldmVsXCIsIHRpdGxlOiBcIuWcsOWMuue6p+asoVwiLCBmaWx0ZXI6IHsgYXJlYUxldmVsOiBcInNlbGVjdFwiIH0sIGZpbHRlckRhdGE6IGxldmVsVHlwZSgpLCBzaG93OiB0cnVlIH0sICAgICAgXHRcdFxyXG4gICAgICBcdFx0eyBmaWVsZDogXCJzeXNOYW1lXCIsIHRpdGxlOiBcIuS/oeaBr+ezu+e7n+WQjeensFwiLCBmaWx0ZXI6IHsgc3lzTmFtZTogXCJ0ZXh0XCIgfSwgc2hvdzogdHJ1ZSB9LFxyXG4gICAgICBcdFx0eyBmaWVsZDogXCJkZXBhcnRtZW50TWFuYWdlclwiLCB0aXRsZTogXCLogZTns7vkurpcIiwgZmlsdGVyOiB7IGRlcGFydG1lbnRNYW5hZ2VyOiBcInRleHRcIiB9LCBzaG93OiB0cnVlIH0sXHJcbiAgICAgIFx0XHR7IGZpZWxkOiBcIm1hbmFnZXJDb250YWN0c1wiLCB0aXRsZTogXCLogZTns7vmlrnlvI9cIiwgZmlsdGVyOiB7IG1hbmFnZXJDb250YWN0czogXCJ0ZXh0XCIgfSwgc2hvdzogdHJ1ZSB9LFxyXG4gICAgICBcdFx0eyBmaWVsZDogXCJkYXRhQmFzZVR5cGVcIiwgdGl0bGU6IFwi5pWw5o2u5bqT57G75Z6LXCIsIGZpbHRlcjogeyBkYXRhQmFzZVR5cGU6IFwic2VsZWN0XCIgfSwgZmlsdGVyRGF0YTogZGF0YWJhc2VUeXBlKCksIHNob3c6IHRydWV9LFxyXG4gICAgICBcdFx0eyBmaWVsZDogXCJ1c2VyVGFibGVzcGFjZVN0YXR1c1wiLCB0aXRsZTogXCJvcmFjbGXnlKjmiLflkI3ooajnqbrpl7RcIiwgZmlsdGVyOiB7IHVzZXJUYWJsZXNwYWNlU3RhdHVzOiBcInNlbGVjdFwiIH0sIGZpbHRlckRhdGE6IGJvb2xlYW5DaG9vc2UoKSwgc2hvdzogdHJ1ZX0sXHJcbiAgICAgIFx0XHR7IGZpZWxkOiBcImNoZWNrb3V0UGF5U3RhdHVzXCIsIHRpdGxlOiBcIuaUr+S7mOS/oeaBr+agh+WHhuihqOiEmuacrFwiLCBmaWx0ZXI6IHsgY2hlY2tvdXRQYXlTdGF0dXM6IFwic2VsZWN0XCIgfSwgZmlsdGVyRGF0YTogYm9vbGVhbkNob29zZSgpLCBzaG93OiB0cnVlfSxcclxuICAgICAgXHRcdHsgZmllbGQ6IFwiY2hlY2tvdXRJbmRpY2F0ZVN0YXR1c1wiLCB0aXRsZTogXCLlj6/miafooYzmoIflh4booajohJrmnKxcIiwgZmlsdGVyOiB7IGNoZWNrb3V0SW5kaWNhdGVTdGF0dXM6IFwic2VsZWN0XCIgfSwgZmlsdGVyRGF0YTogYm9vbGVhbkNob29zZSgpLCBzaG93OiB0cnVlfSxcclxuICAgIFx0XTtcclxuXHJcbiAgXHQvLyDngrnlh7vmn6XnnIvmjInpkq7kuovku7blpITnkIblh73mlbBcclxuICBcdCRzY29wZS52aWV3Q2xpY2sgPSAoc2VsZWN0ZWQpID0+IHtcclxuICBcdFx0bmdEaWFsb2cub3Blbih7XHJcbiAgXHRcdFx0dGVtcGxhdGU6ICdzeXN0ZW1JbmZvLmh0bWwnLFxyXG4gIFx0XHRcdGNvbnRyb2xsZXI6ICdDb25maWdzLlN5c3RlbUluZm9Db250cm9sbGVyJyxcclxuICBcdFx0XHR3aWR0aDogNzkwLCAgICBcdFx0XHRcclxuICBcdFx0XHRjbG9zZUJ5RG9jdW1lbnQ6IGZhbHNlLFxyXG4gIFx0XHRcdGRhdGE6IHNlbGVjdGVkLFxyXG4gIFx0XHRcdGNsYXNzTmFtZTogJ25nZGlhbG9nLXRoZW1lLWRlZmF1bHQnXHJcbiAgXHRcdH0pOyAgICBcdCAgICBcdFx0XHJcbiAgXHR9XHJcbiAgICBcdC8vIOihqOaVsOaNrlxyXG5cdFx0JHNjb3BlLnRhYmxlUGFyYW1zID0gbmV3IE5nVGFibGVQYXJhbXMoe2NvdW50OiAyNX0sIHtcclxuXHQgICAgXHRjb3VudHM6IFsyNSwgNTAsIDEwMF0sXHJcbiAgICAgIFx0ZGF0YXNldDogJHNjb3BlLm1vZGVsXHJcbiAgIFx0fSk7XHJcblx0XHRcclxuICAgIC8vIOaWh+S7tuS4iuS8oFxyXG4gICAgJHNjb3BlLnVwTG9hZEV4Y2VsRmlsZSA9ICgpID0+IHtcclxuICAgICAgQ29uZmlncy5GaWxlSW5wdXRQbHVnaW4oKGZpbGVzKSA9PntcclxuICAgICAgICB2YXIgZmlsZU5hbWVMaXN0ID0gW107IC8v6I635Y+W5paH5Lu25ZCN5YiX6KGoXHJcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKGZpbGVzLCAoZmlsZSkgPT4ge1xyXG4gICAgICAgICAgZmlsZU5hbWVMaXN0LnB1c2goZmlsZS5uYW1lKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBDb25maWdzLmNyZWF0ZV9tYXNrKCk7IFxyXG4gICAgICAgIEt1YmVybmV0ZXMuY3JlYXRlX2xvY2FkRWZmZWN0KFwi5q2j5Zyo5LiK5Lyg5paH5Lu2Li4uXCIpO1xyXG4gICAgICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9hZGluZycpO1xyXG4gICAgICAgIHZhciBzcGlubmVyID0gbmV3IFNwaW5uZXIoS3ViZXJuZXRlcy5sb2FkQ29uZmlncygpKS5zcGluKHRhcmdldCk7XHJcblxyXG4gICAgICAgIHZhciByID0gbmV3IFJlc3VtYWJsZSh7XHJcbiAgICAgICAgICAgIHRhcmdldDonL2phdmEvY29uc29sZS9hcGkvZmlsZU9wZXJhdGlvbi9maWxlL3VwbG9hZCcsXHJcbiAgICAgICAgICAgIGNodW5rU2l6ZToxKjEwMjQqMTAyNCxcclxuICAgICAgICAgICAgc2ltdWx0YW5lb3VzVXBsb2Fkczo0LFxyXG4gICAgICAgICAgICB0ZXN0Q2h1bmtzOiBmYWxzZSxcclxuICAgICAgICAgICAgdGhyb3R0bGVQcm9ncmVzc0NhbGxiYWNrczoxLFxyXG4gICAgICAgICAgICBtZXRob2Q6IFwib2N0ZXRcIiAgICAgICAgICBcclxuICAgICAgICAgICAgLypoZWFkZXJzOiB7ICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLThcIlxyXG4gICAgICAgICAgICB9Ki9cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZighci5zdXBwb3J0KXtcclxuICAgICAgICAgICAgdGhyb3cgXCLlvZPliY3mtY/op4jlmajkuI3mlK/mjIFSZXN1bWFibGUuanPmlofku7bkuIrkvKBcIjsgICAgICAgICAgXHJcbiAgICAgICAgfWVsc2V7ICAgICAgICAgICBcclxuICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKGZpbGVzLCAoZmlsZSkgPT4ge1xyXG4gICAgICAgICAgICAgICByLmFkZEZpbGUoZmlsZSk7XHJcbiAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICByLm9uKCdmaWxlQWRkZWQnLCBmdW5jdGlvbihmaWxlKXsgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHIudXBsb2FkKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgci5vbignY29tcGxldGUnLCBmdW5jdGlvbigpeyAgIFxyXG4gICAgICAgICAgICAgICAgJCgnI2xvYWRtc2cnKS5odG1sKFwi5omA5Lul5paH5Lu25LiK5Lyg5a6M5q+VLOato+WcqOivu+WPluaWh+S7tuS4reeahOaVsOaNrizmraTov4fnqIvml7bpl7Tlj6/og73kvJrovoPplb8s6K+356iN562JLi4uXCIpOyAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgdHlwZTogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgICAgICAgIHVybDogVXJsSGVscGVycy5qb2luKFwiL2phdmEvY29uc29sZS9hcGkvZmlsZU9wZXJhdGlvbi9pbXBvcnRFeGNlbFwiKSxcclxuICAgICAgICAgICAgICAgICAgdGltZW91dDogODAwMCAqIGZpbGVOYW1lTGlzdC5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGZpbGVOYW1lTGlzdCksXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLThcIixcclxuICAgICAgICAgICAgICAgICAgY29tcGxldGU6IChYTUxIdHRwUmVxdWVzdCwgdGV4dFN0YXR1cykgPT57XHJcblxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICBzdWNjZXNzIDogKGRhdGEpID0+eyBcclxuICAgICAgICAgICAgICAgICAgICAkKFwiI2xvYWRcIikucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgS3ViZXJuZXRlcy5yZW1vdmVNYXNrKCk7ICAgXHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsID0gU3lzdGVtTW9kZWwuc3lzdGVtSW5mb0xpc3QgPSBkYXRhLmRhdGE7ICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAkc2NvcGUudGFibGVQYXJhbXMuc2V0dGluZ3Moe1xyXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YXNldDogJHNjb3BlLm1vZGVsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7IFxyXG4gICAgICAgICAgICAgICAgICAgIENvbmZpZ3MuY3VzdG9tQWxlcnQoXCLmj5DnpLpcIiwgXCLmk43kvZzmiJDlip86IOacrOasoeWQiOiuoeaWsOWinuS6hlwiICsgZGF0YS5hcmVhICsgXCLkuKrooYzmlL/ljLrliJLjgIFcIiArIGRhdGEuc3lzdGVtICsgXCLkuKrkv6Hmga/ns7vnu58s5pu05paw5LqGXCIgKyBkYXRhLnVwZGF0ZSArIFwi5Liq5L+h5oGv57O757ufXCIsICcnLG51bGwsIDAsIFwic3VjY2Vzc1wiKTtcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgZXJyb3I6IChYTUxIdHRwUmVxdWVzdCwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pID0+e1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCIjbG9hZFwiKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICBLdWJlcm5ldGVzLnJlbW92ZU1hc2soKTsgICBcclxuICAgICAgICAgICAgICAgICAgICBpZihYTUxIdHRwUmVxdWVzdFtcInJlc3BvbnNlSlNPTlwiXS5lcnIgJiYgWE1MSHR0cFJlcXVlc3RbXCJyZXNwb25zZUpTT05cIl0uZXJyIGluc3RhbmNlb2YgQXJyYXkpXHJcbiAgICAgICAgICAgICAgICAgICAgICBuZ0RpYWxvZy5vcGVuKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU6ICd1cGxvYWRFcnJvckluZm8uaHRtbCcsICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogNzkwLCAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VCeURvY3VtZW50OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogWE1MSHR0cFJlcXVlc3RbXCJyZXNwb25zZUpTT05cIl0uZXJyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICduZ2RpYWxvZy10aGVtZS1kZWZhdWx0J1xyXG4gICAgICAgICAgICAgICAgICAgIH0pOyAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgci5vbignZmlsZVByb2dyZXNzJywgZnVuY3Rpb24oZmlsZSl7ICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAkKCcjbG9hZG1zZycpLmh0bWwoXCLkuIrkvKDmlofku7Y6XCIgKyBmaWxlLmZpbGVOYW1lICsgXCIgXCIgKyBNYXRoLmZsb29yKHIucHJvZ3Jlc3MoKSoxMDApICsgJyUnKTtcclxuICAgICAgICAgICAgICAgIC8vS3ViZXJuZXRlcy5jcmVhdGVfbG9jYWRFZmZlY3QoXCLkuIrkvKDmlofku7Y6XCIgKyBmaWxlLm5hbWUgKyBcIiBcIiArIE1hdGguZmxvb3Ioci5wcm9ncmVzcygpKjEwMCkgKyAnJScpOyAvL+WIm+W7uuaVsOaNruWKoOi9veaViOaenOWxglxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8v6Kej5Yaz5LiN5ZCM6YeN5aSN6YCJ5oup55u45ZCM5paH5Lu2XHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJmaWxlLXVwbG9hZHNcIik7XHJcbiAgICAgICAgICAgIGlmKG51bGwgIT0gZWxlbWVudClcclxuICAgICAgICAgICAgICBlbGVtZW50Lm91dGVySFRNTCA9ICBlbGVtZW50Lm91dGVySFRNTDtcclxuICAgICAgICAgIH1cclxuICAgICAgfSwgdHJ1ZSk7XHJcbiAgICB9IFx0XHJcblxyXG4gICAgLy9leGNlbOS4i+i9vVxyXG4gICAgJHNjb3BlLmRvd25Mb2FkRXhjZWxGaWxlID0gKCkgPT57ICAgICAgICBcclxuICAgICAgICBDb25maWdzLmRvd25sb2FkRmlsZSgkc2NvcGUsICRodHRwLCAnL2phdmEvY29uc29sZS9hcGkvZmlsZU9wZXJhdGlvbi9maWxlL2Rvd25sb2FkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgJHNjb3BlLmRvd25sb2FkRmlsZVBhY2thZ2UgPSAoKSA9PntcclxuICAgICAgICBDb25maWdzLmNyZWF0ZV9tYXNrKCk7IFxyXG4gICAgICAgIEt1YmVybmV0ZXMuY3JlYXRlX2xvY2FkRWZmZWN0KFwi5q2j5Zyo5LiL6L295paH5Lu2LOivt+eojeetiS4uLlwiKTtcclxuICAgICAgICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvYWRpbmcnKTtcclxuICAgICAgICB2YXIgc3Bpbm5lciA9IG5ldyBTcGlubmVyKEt1YmVybmV0ZXMubG9hZENvbmZpZ3MoKSkuc3Bpbih0YXJnZXQpO1xyXG4gICAgICAgIENvbmZpZ3MuZG93bmxvYWRGaWxlKCRzY29wZSwgJGh0dHAsICcvamF2YS9jb25zb2xlL2FwaS9maWxlUGFja2FnZS9kb3dubG9hZCcsICgpID0+e1xyXG4gICAgICAgICAgJChcIiNsb2FkXCIpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgS3ViZXJuZXRlcy5yZW1vdmVNYXNrKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cdFx0Ly9ib29sZWFu6YCJ5oup5p2h5Lu277ya5pivL+WQplxyXG5cdFx0ZnVuY3Rpb24gYm9vbGVhbkNob29zZSgpe1xyXG5cdFx0XHRyZXR1cm4gW3tpZDogJ+aYrycsIHRpdGxlOiAn5pivJ30sIHtpZDogJ+WQpicsIHRpdGxlOiAn5ZCmJ31dO1xyXG5cdFx0fVxyXG5cdFx0Ly8g5pWw5o2u5bqT57G75Z6L6YCJ5oup5p2h5Lu277yab3JhY2xlL3NxbCBTZXJ2ZXJcclxuXHRcdGZ1bmN0aW9uIGRhdGFiYXNlVHlwZSgpe1xyXG5cdFx0XHRyZXR1cm4gW3tpZDogJ29yYWNsZScsIHRpdGxlOiAnT1JBQ0xFJ30sIHtpZDogJ3NxbCBTZXJ2ZXInLCB0aXRsZTogJ1NRTCBTRVJWRVInfV07XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9sZXZlbOmAieaLqeadoeS7tlxyXG5cdFx0ZnVuY3Rpb24gbGV2ZWxUeXBlKCl7XHJcblx0XHRcdHJldHVybiBbe2lkOiAn55yBJywgdGl0bGU6ICfnnIEnfSwge2lkOiAn5biCJywgdGl0bGU6ICfluIInfSwge2lkOiAn5Y6/JywgdGl0bGU6ICfljr8nfV07XHJcblx0XHR9XHJcblx0fV0pXHJcbn0iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJzeXN0ZW1QbHVnaW4udHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJzeXN0ZW1IZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwic3lzdGVtU2VydmljZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9jb25maWdzL3RzL2NvbmZpZ3NVdGlscy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9jb25maWdzL3RzL2N1c3RvbUFsZXJ0LnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vY29uZmlncy90cy9jb25maWdzRGF0YVNlcnZpY2UudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL3Rlcm0udHNcIi8+XHJcblxyXG5tb2R1bGUgU3lzdGVte1xyXG4gICAgZXhwb3J0IHZhciBTeXN0ZW1WZXJpZmljYXRpb25Db250cm9sbGVyID0gY29udHJvbGxlcignU3lzdGVtVmVyaWZpY2F0aW9uQ29udHJvbGxlcicsIFsnJHNjb3BlJywgJyRpbnRlcnZhbCcsICckbG9jYXRpb24nLCAnJGh0dHAnLCAnJHRlbXBsYXRlQ2FjaGUnLCAnVXBsb2FkJywgJ05nVGFibGVQYXJhbXMnLCAnbmdEaWFsb2cnLCAnU3lzdGVtTW9kZWwnLCAnJGVsZW1lbnQnLCAnJHRpbWVvdXQnLCAnQ29uZmlnc01vZGVsJywgJ0RhdGFNb2RlbCcsICdUZXJtaW5hbFNlcnZpY2UnLCAnS3ViZXJuZXRlc01vZGVsJywgKCRzY29wZSwgJGludGVydmFsLCAkbG9jYXRpb24sICRodHRwLCAkdGVtcGxhdGVDYWNoZSwgVXBsb2FkLCBOZ1RhYmxlUGFyYW1zLCBuZ0RpYWxvZywgU3lzdGVtTW9kZWwsICRlbGVtZW50LCAkdGltZW91dCwgQ29uZmlnc01vZGVsLCBEYXRhTW9kZWwsIFRlcm1pbmFsU2VydmljZSwgS3ViZXJuZXRlc01vZGVsKSA9PiB7XHJcblx0XHQgICAgc2hhcmVJbml0KCRzY29wZSk7XHJcbiAgICAgICAgJHNjb3BlLmNpdGllcyA9ICBjbGFzc2lmeUNpdHkoU3lzdGVtTW9kZWwucmVnaW9uYWxpc21JbmZvKTtcclxuICAgICAgICAkc2NvcGUubW9kZWwgPSBTeXN0ZW1Nb2RlbDtcclxuICAgICAgICAkc2NvcGUudGFibGVEYXRhID0gbnVsbDsgICAgICAgXHJcbiAgICAgICAgJHNjb3BlLmNoZWNrYm94ZXMgPSB7XHJcbiAgICAgICAgICAgIGNoZWNrZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBpdGVtczoge31cclxuICAgICAgICB9OyAgICAgICAgXHJcbiAgICAgICAgICAvLyDooajmlbDmja5cclxuICAgICAgICAkc2NvcGUudGFibGVQYXJhbXMgPSBuZXcgTmdUYWJsZVBhcmFtcyh7Y291bnQ6IDI1fSwge1xyXG4gICAgICAgICAgICBjb3VudHM6IFsyNSwgNTAsIDEwMF0sXHJcbiAgICAgICAgICAgIGRhdGFzZXQ6ICRzY29wZS50YWJsZURhdGFcclxuICAgICAgICB9KTsgIFxyXG5cclxuICAgICAgICAkc2NvcGUuY2l0eVNlbGVjdCA9ICh4KSA9PntcclxuICAgICAgICAgICRzY29wZS5jb3VudHJpZXM9W107XHJcbiAgICAgICAgICAkc2NvcGUueSA9IFwiYWxsXCI7ICAgICAgICAgICBcclxuICAgICAgICAgIGlmKHggIT0gJ2FsbCcpe1xyXG4gICAgICAgICAgICAkc2NvcGUuY291bnRyaWVzID0gY2xhc3NpZnlDb3VudHJ5KFN5c3RlbU1vZGVsLnJlZ2lvbmFsaXNtSW5mbywgeCk7ICBcclxuICAgICAgICAgICAgJGh0dHAoe1xyXG4gICAgICAgICAgICAgIHVybDogXCIvamF2YS9jb25zb2xlL2FwaS9jaGVja291dC9maW5kQnlDaXR5XCIsXHJcbiAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICAgICAgICBkYXRhOiB4XHJcbiAgICAgICAgICAgIH0pLnN1Y2Nlc3MoKGRhdGEsIGhlYWRlciwgY29uZmlnLCBzdGF0dXMpID0+IHsgXHJcbiAgICAgICAgICAgICAgICAkc2NvcGUudGFibGVEYXRhID1kYXRhLmRhdGE7ICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAkc2NvcGUudGFibGVQYXJhbXMuc2V0dGluZ3Moe1xyXG4gICAgICAgICAgICAgICAgICBkYXRhc2V0OiAkc2NvcGUudGFibGVEYXRhXHJcbiAgICAgICAgICAgICAgICB9KTsgICAgICAgIFxyXG4gICAgICAgICAgICB9KS5lcnJvcigoZGF0YSwgaGVhZGVyLCBjb25maWcsIHN0YXR1cykgPT4geyBcclxuICAgICAgICAgICAgICB0aHJvdyBcIuivt+axguWksei0pVwiICAgICAgICAgXHJcbiAgICAgICAgICAgIH0pOyAgICAgICBcclxuICAgICAgICAgIH1lbHNleyBcclxuICAgICAgICAgICAgLy8kc2NvcGUuY291bnRyaWVzPVtdOyAgICAgICAgICBcclxuICAgICAgICAgICAgLy8kc2NvcGUueSA9IFwiYWxsXCI7XHJcbiAgICAgICAgICAgICRzY29wZS50YWJsZURhdGEgPSBudWxsO1xyXG4gICAgICAgICAgICAkc2NvcGUuY2hlY2tib3hlcyA9IHtcclxuICAgICAgICAgICAgICBjaGVja2VkOiBmYWxzZSxcclxuICAgICAgICAgICAgICBpdGVtczoge31cclxuICAgICAgICAgICAgfTsgXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBcclxuXHJcbiAgICAgICAgJHNjb3BlLmNvdW50cnlTZWxlY3QgPSAoeSkgPT4geyAgICAgICAgIFxyXG4gICAgICAgICAgaWYoeSAhPSAnYWxsJyl7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcclxuICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKCRzY29wZS50YWJsZURhdGEsIChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYoaXRlbS5kaXN0cmljdE5hbWUgPT0geSlcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgJHNjb3BlLnRhYmxlUGFyYW1zLnNldHRpbmdzKHtcclxuICAgICAgICAgICAgICBkYXRhc2V0OiByZXN1bHRcclxuICAgICAgICAgICAgfSk7IFxyXG4gICAgICAgICAgfWVsc2V7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICRzY29wZS50YWJsZVBhcmFtcy5zZXR0aW5ncyh7XHJcbiAgICAgICAgICAgICAgZGF0YXNldDogJHNjb3BlLnRhYmxlRGF0YVxyXG4gICAgICAgICAgICB9KTsgICAgICAgICAgICBcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICRzY29wZS5jaGVja1NRTFNFUlZFUiA9ICgpID0+IHtcclxuICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICoqICDmo4Dmn6XmmK/lkKbmnInpu5jorqTmoIflh4booajmsYfmgLvlupNcclxuICAgICAgICAgICoqL1xyXG4gICAgICAgICAgdmFyIGFuc3dlciA9IGZhbHNlO1xyXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBDb25maWdzTW9kZWwub3JhY2xlUGFyYW0ubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAgICAgaWYoQ29uZmlnc01vZGVsLm9yYWNsZVBhcmFtW2ldLnR5cGUgPT0gMSl7XHJcbiAgICAgICAgICAgICAgYW5zd2VyID0gdHJ1ZVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYoYW5zd2VyID09IGZhbHNlKXtcclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAg5o+Q56S65rKh5pyJ6YWN572u5qCH5YeG6KGo5rGH5oC75bqTXHJcbiAgICAgICAgICAgICoqL1xyXG4gICAgICAgICAgICBDb25maWdzLmN1c3RvbUFsZXJ0KFwi5o+Q56S6XCIsIFwi5pON5L2c5aSx6LSlOuayoeaciemFjee9rum7mOiupOeahOagh+WHhuihqOaxh+aAu+W6k1wiLCAnJyxudWxsLCAwLCBcImVycm9yXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdmFyIHNlbGVjdGVkSXRlbXMgPSBbXTtcclxuICAgICAgICAgIGlmKCRzY29wZS50YWJsZURhdGEgJiYgJHNjb3BlLnRhYmxlRGF0YS5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAkc2NvcGUudGFibGVEYXRhLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSAkc2NvcGUudGFibGVEYXRhW2ldO1xyXG4gICAgICAgICAgICAgIGlmKCRzY29wZS5jaGVja2JveGVzLml0ZW1zW2l0ZW0uaWRdKXtcclxuICAgICAgICAgICAgICAgIGlmKGl0ZW0uY29sbGVjdGlvbiA9PSAn5ZCmJyl7ICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgICAqKuaPkOekuuWHuueOsOayoeaciemHh+mbhuaVsOaNrueahOS/oeaBr+ezu+e7n1xyXG4gICAgICAgICAgICAgICAgICAgIGNvZGVcclxuICAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgICAgQ29uZmlncy5jdXN0b21BbGVydChcIuaPkOekulwiLCBcIuaTjeS9nOWksei0pTrpgInmi6nnmoTns7vnu5/lrZjlnKjmsqHmnInmlbDmja7nmoTns7vnu59cIiwgJycsbnVsbCwgMCwgXCJlcnJvclwiKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfTdcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtW1wiX2tleVwiXSA9IGl0ZW0uYXJlYUNvZGUgKyBcIi1cIiArIGl0ZW0uc3lzQ29kZSArIFwiLVwiICsgaXRlbS5kYXRhVmVyc2lvbjsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZihpdGVtLmRhdGFCYXNlVHlwZSA9PSAnT1JBQ0xFJyl7ICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIENvbmZpZ3MuY3VzdG9tQWxlcnQoXCLmj5DnpLpcIiwgXCLmk43kvZzlpLHotKU6T1JBQ0xF5pWw5o2u6K+35Zyo5pyN5Yqh6ZuG576k55WM6Z2i5Lit5oq95Y+W5qCH5YeG6KGo77yBXCIsICcnLG51bGwsIDAsIFwiZXJyb3JcIik7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICBcclxuICAgICAgICAgICAgJGh0dHAoe1xyXG4gICAgICAgICAgICAgIHVybDogXCIvamF2YS9jb25zb2xlL2FwaS9jaGVja291dC9leHRyYWN0TGlzdFwiLFxyXG4gICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgICAgZGF0YTogc2VsZWN0ZWRJdGVtc1xyXG4gICAgICAgICAgICB9KS5zdWNjZXNzKChkYXRhLCBoZWFkZXIsIGNvbmZpZywgc3RhdHVzKSA9PiB7ICBcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKGRhdGEpOyAgICAgICAgICAgIFxyXG4gICAgICAgXHJcbiAgICAgICAgICAgIH0pLmVycm9yKChkYXRhLCBoZWFkZXIsIGNvbmZpZywgc3RhdHVzKSA9PiB7IFxyXG4gICAgICAgICAgICAgICAgdGhyb3cgXCLor7fmsYLlpLHotKVcIiAgICAgICAgIFxyXG4gICAgICAgICAgICB9KTsgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAkc2NvcGUuZGVsZXRlUm93cyA9ICgpID0+e1xyXG4gICAgICAgICAgdmFyICBmaWx0ZXIgPSBbXTtcclxuICAgICAgICAgIGlmKCRzY29wZS50YWJsZURhdGEgJiYgJHNjb3BlLnRhYmxlRGF0YS5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKCRzY29wZS50YWJsZURhdGEsIChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYoJHNjb3BlLmNoZWNrYm94ZXMuaXRlbXNbaXRlbS5pZF0pe1xyXG4gICAgICAgICAgICAgICAgaXRlbVtcImluZGV4XCJdID0gaXRlbS5jaXR5TmFtZSArIFwiX1wiICsgaXRlbS5kaXN0cmljdE5hbWUgKyBcIl9cIiArIGl0ZW0uc3lzTmFtZSArIFwiX1wiICsgaXRlbS55ZWFyICsgXCJf54mI5pysXCIgKyBpdGVtLmRhdGFWZXJzaW9uO1xyXG4gICAgICAgICAgICAgICAgaXRlbVtcIl9rZXlcIl0gPSBpdGVtLmFyZWFDb2RlICsgXCItXCIgKyBpdGVtLnN5c0NvZGUgKyBcIi1cIiArIGl0ZW0uZGF0YVZlcnNpb247XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXIucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pOyAgICAgICAgICAgICBcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8v5qOA5p+l5pWw5o2u5piv5ZCm5a2Y5ZyoXHJcbiAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgZmlsdGVyLmxlbmd0aDsgaSsrKXsgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZihmaWx0ZXJbaV0uY29sbGVjdGlvbiA9PSAn5ZCmJyl7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICBDb25maWdzLmN1c3RvbUFsZXJ0KFwi5o+Q56S6XCIsIFwi5pON5L2c5aSx6LSlOumDqOWIhuaVsOaNruS4jeWtmOWcqO+8jOaXoOazleWIoOmZpFwiLCAnJyxudWxsLCAwLCBcImVycm9yXCIpO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfSAgICAgICAgICAgICAgXHJcbiAgICAgICAgICB9ICAgICAgICAgIFxyXG5cclxuICAgICAgICAgIC8v5qOA5p+l5pWw5o2u5piv5ZCm5bey5ZCv5YqoIC8v5qOA5p+l5pWw5o2u5piv5ZCm5Zyo6L+B56e7XHJcblxyXG4gICAgICAgICAgdmFyIG1lc3NhZ2UgPSBLdWJlcm5ldGVzLmNoZWNrRm9yTWlncmF0aW9uKEt1YmVybmV0ZXNNb2RlbC5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzLCBEYXRhTW9kZWwudHJhbnNmZXJUYXNrcywgZmlsdGVyLCBcInZlcmlmeVwiKTtcclxuXHJcbiAgICAgICAgICBpZihtZXNzYWdlICE9IFwiXCIpe1xyXG4gICAgICAgICAgICBDb25maWdzLmN1c3RvbUFsZXJ0KFwi5o+Q56S6XCIsIFwi5pON5L2c5aSx6LSlOumDqOWIhuaVsOaNrlwiICsgbWVzc2FnZSArXCLvvIzml6Dms5XliKDpmaRcIiwgJycsbnVsbCwgMCwgXCJlcnJvclwiKTtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiBcclxuXHJcbiAgICAgICAgICBVSS5tdWx0aUl0ZW1Db25maXJtQWN0aW9uRGlhbG9nKDxVSS5NdWx0aUl0ZW1Db25maXJtQWN0aW9uT3B0aW9ucz57XHJcbiAgICAgICAgICAgIGNvbGxlY3Rpb246IGZpbHRlcixcclxuICAgICAgICAgICAgaW5kZXg6ICdpbmRleCcsXHJcbiAgICAgICAgICAgIG9uQ2xvc2U6IChyZXN1bHQ6Ym9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgICAgIGlmKHJlc3VsdCl7XHJcbiAgICAgICAgICAgICAgICAkaHR0cCh7XHJcbiAgICAgICAgICAgICAgICAgIHVybDogXCIvamF2YS9jb25zb2xlL2FwaS9jaGVja291dC9kZWxldGVMaXN0XCIsXHJcbiAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgICAgICAgIGRhdGE6IGZpbHRlclxyXG4gICAgICAgICAgICAgICAgfSkuc3VjY2VzcygoZGF0YSwgaGVhZGVyLCBjb25maWcsIHN0YXR1cykgPT4geyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICRzY29wZS50YWJsZURhdGEgPSBkYXRhLmRhdGE7XHJcbiAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgaWYoJHNjb3BlLnkgIT0gJ2FsbCcpeyAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goJHNjb3BlLnRhYmxlRGF0YSwgKGl0ZW0pID0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYoaXRlbS5kaXN0cmljdE5hbWUgPT0gJHNjb3BlLnkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAkc2NvcGUudGFibGVEYXRhO1xyXG4gICAgICAgICAgICAgICAgICB9ICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAkc2NvcGUudGFibGVQYXJhbXMuc2V0dGluZ3Moe1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXQ6IHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgICB9KTsgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfSkuZXJyb3IoKGRhdGEsIGhlYWRlciwgY29uZmlnLCBzdGF0dXMpID0+IHsgXHJcbiAgICAgICAgICAgICAgICAgIHRocm93IFwi6K+35rGC5aSx6LSlXCIgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH0pOyAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0aXRsZTogJ+aYr+WQpumcgOimgeWIoOmZpOmHh+mbhuaVsOaNru+8nycsXHJcbiAgICAgICAgICAgIGFjdGlvbjogJ+S7peS4i+mHh+mbhuaVsOaNruaWh+S7tuWwhuS8muiiq+WIoOmZpDonLFxyXG4gICAgICAgICAgICBva1RleHQ6ICfliKDpmaQnLFxyXG4gICAgICAgICAgICBva0NsYXNzOiAnYnRuLWRhbmdlciBzal9idG5fY2lyJyxcclxuICAgICAgICAgICAgY3VzdG9tOiBcIuivpeWIoOmZpOaTjeS9nOWwhuS8muW9u+W6leWIoOmZpOaVsOaNruaWh+S7tizmmK/lkKbliKDpmaTvvIzor7fnoa7orqTvvIFcIixcclxuICAgICAgICAgICAgY3VzdG9tQ2xhc3M6IFwiYWxlcnQgYWxlcnQtd2FybmluZyBzal9hbGVydC13YXJuaW5nXCIsXHJcbiAgICAgICAgICAgIGNhbmNlbFRleHQ6IFwi5Y+W5raIXCIsXHJcbiAgICAgICAgICAgIGNhbmNlbENsYXNzOiAnc2pfYnRuX2dyZXknXHJcbiAgICAgICAgICB9KS5vcGVuKCk7ICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICRzY29wZS5jaGVjayA9ICgpID0+IHtcclxuICAgICAgICAgIC8vdmFyICBzcWxTZXJ2ZXJEQiA9IFtdO1xyXG4gICAgICAgICAgdmFyIG9yYWNsZURCID0gW107IFxyXG4gICAgICAgICAgdmFyIHNlbGVjdGVkSXRlbXMgPSBbXTtcclxuICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICoqICDmo4Dmn6XmmK/lkKbmnInpu5jorqTmoIflh4booajmsYfmgLvlupNcclxuICAgICAgICAgICoqL1xyXG4gICAgICAgICAgdmFyIGFuc3dlciA9IGZhbHNlO1xyXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBDb25maWdzTW9kZWwub3JhY2xlUGFyYW0ubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAgICAgaWYoQ29uZmlnc01vZGVsLm9yYWNsZVBhcmFtW2ldLnR5cGUgPT0gMSl7XHJcbiAgICAgICAgICAgICAgYW5zd2VyID0gdHJ1ZVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZihhbnN3ZXIgPT0gZmFsc2Upe1xyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICDmj5DnpLrmsqHmnInphY3nva7moIflh4booajmsYfmgLvlupNcclxuICAgICAgICAgICAgKiovXHJcbiAgICAgICAgICAgIENvbmZpZ3MuY3VzdG9tQWxlcnQoXCLmj5DnpLpcIiwgXCLmk43kvZzlpLHotKU65rKh5pyJ6YWN572u6buY6K6k55qE5qCH5YeG6KGo5rGH5oC75bqTXCIsICcnLG51bGwsIDAsIFwiZXJyb3JcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZigkc2NvcGUudGFibGVEYXRhICYmICRzY29wZS50YWJsZURhdGEubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgJHNjb3BlLnRhYmxlRGF0YS5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgICAgICAgIHZhciBpdGVtID0gJHNjb3BlLnRhYmxlRGF0YVtpXTtcclxuICAgICAgICAgICAgICBpZigkc2NvcGUuY2hlY2tib3hlcy5pdGVtc1tpdGVtLmlkXSl7XHJcbiAgICAgICAgICAgICAgICBpZihpdGVtLmNvbGxlY3Rpb24gPT0gJ+WQpicpeyAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICAgKirmj5DnpLrlh7rnjrDmsqHmnInph4fpm4bmlbDmja7nmoTkv6Hmga/ns7vnu59cclxuICAgICAgICAgICAgICAgICAgICBjb2RlXHJcbiAgICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICAgIENvbmZpZ3MuY3VzdG9tQWxlcnQoXCLmj5DnpLpcIiwgXCLmk43kvZzlpLHotKU66YCJ5oup55qE57O757uf5a2Y5Zyo5rKh5pyJ5pWw5o2u55qE57O757ufXCIsICcnLG51bGwsIDAsIFwiZXJyb3JcIik7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGlmKGl0ZW0ucGF5UmVzdWx0TGFzdCA9PSAxKXtcclxuICAgICAgICAgICAgICAgICAgIENvbmZpZ3MuY3VzdG9tQWxlcnQoXCLmj5DnpLpcIiwgXCLmk43kvZzlpLHotKU66YCJ5oup55qE57O757uf5a2Y5Zyo5LiN6ZyA6KaB5qCh6aqM55qE57O757ufXCIsICcnLG51bGwsIDAsIFwiZXJyb3JcIik7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAgICDmo4Dmn6XmlbDmja7mmK/lkKblnKjng63ljLpcclxuICAgICAgICAgICAgICAgICovICAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgICAgIGlmKGl0ZW0ubWFyayA9PSAxICYmIGl0ZW0uZGF0YUJhc2VUeXBlID09ICdPUkFDTEUnKXtcclxuICAgICAgICAgICAgICAgICAgQ29uZmlncy5jdXN0b21BbGVydChcIuaPkOekulwiLCBcIuaTjeS9nOWksei0pTrpgInmi6nnmoTns7vnu5/nmoTmlbDmja7lrZjlgqjlnKjlhrfljLrvvIzor7flhYjlsIbmlbDmja7ov4Hnp7vliLDng63ljLrlho3mo4DpqozvvIFcIiwgJycsbnVsbCwgMCwgXCJlcnJvclwiKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpdGVtW1wiX2tleVwiXSA9IGl0ZW0uYXJlYUNvZGUgKyBcIi1cIiArIGl0ZW0uc3lzQ29kZSArIFwiLVwiICsgaXRlbS5kYXRhVmVyc2lvbjtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgIGlmKGl0ZW0uZGF0YUJhc2VUeXBlID09ICdPUkFDTEUnKXsgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgb3JhY2xlREIucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAg5q2k5aSE6ZyA6KaB5qOA5p+l5pWw5o2u5piv5ZCm5bey5oyC6L2944CB5q2j5Zyo6L+B56e744CCXHJcbiAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIHZhciAgZXhpdGVkID0gIEt1YmVybmV0ZXMuY2hlY2tGb3JDcmVhdGVPcmFjbGUoRGF0YU1vZGVsLnRyYW5zZmVyVGFza3MsIHNlbGVjdGVkSXRlbXMpOyAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKGV4aXRlZC5sZW5ndGggPiAwICl7XHJcbiAgICAgICAgICAgICAgQ29uZmlncy5jdXN0b21BbGVydChcIuaPkOekulwiLCBcIuaTjeS9nOWksei0pTog5q2j5Zyo6L+B56e755qE5pWw5o2u5LiN6IO95omn6KGM5qCh6aqM5pON5L2c77yBXCIsICcnLCBudWxsLCAwLCBcImVycm9yXCIpOyBcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAg5aaC5p6c5pivT3JhY2xl5pWw5o2u77yM5YWI5ZCv5Yqob3JhY2xl5pWw5o2uXHJcbiAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIGlmKG9yYWNsZURCLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChvcmFjbGVEQiwgKGl0ZW0pID0+e1xyXG4gICAgICAgICAgICAgICAgS3ViZXJuZXRlcy5jcmVhdGVSQyh7XHJcbiAgICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0uX2tleSxcclxuICAgICAgICAgICAgICAgICAgbGFiZWxzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtOiBpdGVtLnN5c0NvZGUudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOiBpdGVtLmRhdGFWZXJzaW9uLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICAgICAgcmVnaW9uOiBpdGVtLmFyZWFDb2RlLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGNpdHlOYW1lOiBpdGVtLmNpdHlOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3RyaWN0TmFtZTogaXRlbS5kaXN0cmljdE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtTmFtZTogaXRlbS5zeXNOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLmRhdGFJZCtcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHllYXI6IGl0ZW0ueWVhcixcclxuICAgICAgICAgICAgICAgICAgICBjaGVja291dEZsYWc6IGl0ZW0uY2hlY2tvdXRGbGFnXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIHBhdGg6IGl0ZW0ucGF0aCtcImFwcC9cIixcclxuICAgICAgICAgICAgICAgICAgaXNUYXJnZXQ6IFwiZmFsc2VcIixcclxuICAgICAgICAgICAgICAgICAgaXNFeHRyYWN0OiBpdGVtLmV4dHJhY3RTdGF0dXNcclxuICAgICAgICAgICAgICB9LCAocmMpID0+eyBcclxuICAgICAgICAgICAgICAgICAgLy9LdWJlcm5ldGVzLmNvbm5lY3RPcmFjbGUoJGh0dHAsICR0aW1lb3V0LCBcIi9qYXZhL2NvbnNvbGUvYXBpL2Nvbm5lY3RPcmFjbGVcIiwgXCJjcmVhdGVcIiwgcmMsIDApOyAgXHJcbiAgICAgICAgICAgICAgICB9KTsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgJHRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgJGxvY2F0aW9uLnBhdGgoJy9rdWJlcm5ldGVzL25hbWVzcGFjZS9kZWZhdWx0L3JlcGxpY2F0aW9uQ29udHJvbGxlcnMnKTsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICAgICRodHRwKHtcclxuICAgICAgICAgICAgICB1cmw6IFwiL2phdmEvY29uc29sZS9hcGkvY2hlY2tvdXQvY2hlY2tMaXN0XCIsXHJcbiAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICAgICAgICBkYXRhOiBzZWxlY3RlZEl0ZW1zXHJcbiAgICAgICAgICAgIH0pLnN1Y2Nlc3MoKGRhdGEsIGhlYWRlciwgY29uZmlnLCBzdGF0dXMpID0+IHsgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICRzY29wZS50YWJsZURhdGEgPSBkYXRhLmRhdGE7XHJcbiAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgICAgICAgICAgIGlmKCRzY29wZS55ICE9ICdhbGwnKXsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goJHNjb3BlLnRhYmxlRGF0YSwgKGl0ZW0pID0+e1xyXG4gICAgICAgICAgICAgICAgICBpZihpdGVtLmRpc3RyaWN0TmFtZSA9PSAkc2NvcGUueSlcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gJHNjb3BlLnRhYmxlRGF0YTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICRzY29wZS50YWJsZVBhcmFtcy5zZXR0aW5ncyh7XHJcbiAgICAgICAgICAgICAgICBkYXRhc2V0OiByZXN1bHRcclxuICAgICAgICAgICAgICB9KTsgICAgICAgXHJcbiAgICAgICAgICAgIH0pLmVycm9yKChkYXRhLCBoZWFkZXIsIGNvbmZpZywgc3RhdHVzKSA9PiB7IFxyXG4gICAgICAgICAgICAgICAgdGhyb3cgXCLor7fmsYLlpLHotKVcIiAgICAgICAgIFxyXG4gICAgICAgICAgICB9KTsgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICB9ICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHdhdGNoIGZvciBjaGVjayBhbGwgY2hlY2tib3hcclxuICAgICAgICAkc2NvcGUuJHdhdGNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgcmV0dXJuICRzY29wZS5jaGVja2JveGVzLmNoZWNrZWQ7XHJcbiAgICAgICAgfSwgZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUudGFibGVEYXRhLCBmdW5jdGlvbihpdGVtKSB7XHJcbiAgICAgICAgICAgICRzY29wZS5jaGVja2JveGVzLml0ZW1zW2l0ZW0uaWRdID0gdmFsdWU7ICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgXHJcbiAgICAgICAgLy8gd2F0Y2ggZm9yIGRhdGEgY2hlY2tib3hlc1xyXG4gICAgICAgICRzY29wZS4kd2F0Y2goZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICByZXR1cm4gJHNjb3BlLmNoZWNrYm94ZXMuaXRlbXM7XHJcbiAgICAgICAgfSwgZnVuY3Rpb24odmFsdWVzKSB7XHJcbiAgICAgICAgICAkc2NvcGUuY2hlY2thYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICBmb3IodmFyIGluZGV4IGluIHZhbHVlcyl7XHJcbiAgICAgICAgICAgIGlmKHZhbHVlc1tpbmRleF0gPT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgICAgJHNjb3BlLmNoZWNrYWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gICAgICAgXHJcbiAgICAgICAgICB2YXIgY2hlY2tlZCA9IDAsIHVuY2hlY2tlZCA9IDAsIHRvdGFsID0gLTE7XHJcbiAgICAgICAgICBpZigkc2NvcGUudGFibGVEYXRhICYmICgkc2NvcGUudGFibGVEYXRhIGluc3RhbmNlb2YgQXJyYXkpKVxyXG4gICAgICAgICAgICB0b3RhbCA9ICRzY29wZS50YWJsZURhdGEubGVuZ3RoO1xyXG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKCRzY29wZS50YWJsZURhdGEsIGZ1bmN0aW9uKGl0ZW0pIHtcclxuICAgICAgICAgICAgY2hlY2tlZCAgICs9ICAoJHNjb3BlLmNoZWNrYm94ZXMuaXRlbXNbaXRlbS5pZF0pIHx8IDA7XHJcbiAgICAgICAgICAgIHVuY2hlY2tlZCArPSBOdW1iZXIoISRzY29wZS5jaGVja2JveGVzLml0ZW1zW2l0ZW0uaWRdKSB8fCAwO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgaWYgKCh1bmNoZWNrZWQgPT0gMCkgfHwgKGNoZWNrZWQgPT0gMCkpIHtcclxuICAgICAgICAgICAgJHNjb3BlLmNoZWNrYm94ZXMuY2hlY2tlZCA9IChjaGVja2VkID09IHRvdGFsKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIGdyYXllZCBjaGVja2JveFxyXG4gICAgICAgICAgYW5ndWxhci5lbGVtZW50KCRlbGVtZW50WzBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJzZWxlY3QtYWxsXCIpKS5wcm9wKFwiaW5kZXRlcm1pbmF0ZVwiLCAoY2hlY2tlZCAhPSAwICYmIHVuY2hlY2tlZCAhPSAwKSk7XHJcbiAgICAgICAgfSwgdHJ1ZSk7IFxyXG5cclxuICAgICAgICAkc2NvcGUudXBkYXRlID0gKGVudGl0eSkgPT4ge1xyXG4gICAgICAgICAgbmdEaWFsb2cub3Blbih7XHJcbiAgICAgICAgICAgIHRlbXBsYXRlOiAnc3lzVmVyaWZpY2F0aW9uVXBkYXRlLmh0bWwnLFxyXG4gICAgICAgICAgICBjb250cm9sbGVyOiAnQ29uZmlncy5zeXNWZXJVcGRhdGVDb250cm9sbGVyJyxcclxuICAgICAgICAgICAgd2lkdGg6IDkwMCwgXHJcbiAgICAgICAgICAgIGhlaWdodDogNjAwLCAgICAgICAgIFxyXG4gICAgICAgICAgICBjbG9zZUJ5RG9jdW1lbnQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBkYXRhOiBlbnRpdHksXHJcbiAgICAgICAgICAgIHNjb3BlOiAkc2NvcGUsIFxyXG4gICAgICAgICAgICBjbGFzc05hbWU6ICduZ2RpYWxvZy10aGVtZS1kZWZhdWx0J1xyXG4gICAgICAgICAgfSk7ICBcclxuICAgICAgICB9IFxyXG5cclxuICAgICAgICAkc2NvcGUuJG9uKCd1cGRhdGVSb3cnLCAoZXZlbnQsIGRhdGEpID0+IHtcclxuICAgICAgICAgICRodHRwKHtcclxuICAgICAgICAgICAgdXJsOiBcIi9qYXZhL2NvbnNvbGUvYXBpL2NoZWNrb3V0L3VwZGF0ZVwiLFxyXG4gICAgICAgICAgICBtZXRob2Q6J1BPU1QnLCAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShkYXRhKVxyXG4gICAgICAgICAgfSkuc3VjY2VzcyhmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcclxuICAgICAgICAgICAgaWYoaGVhZGVyID09IDIwMCl7XHJcbiAgICAgICAgICAgICAgQ29uZmlncy5jdXN0b21BbGVydChcIuaPkOekulwiLCBcIuaTjeS9nOaIkOWKnyFcIiwgJycsbnVsbCwgMCwgXCJzdWNjZXNzXCIpO1xyXG4gICAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcclxuICAgICAgICAgICAgICBpZigkc2NvcGUueSAhPSAnYWxsJyl7XHJcbiAgICAgICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goZGF0YS5kYXRhLCAoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZigkc2NvcGUueSA9PSBpdGVtLmRpc3RyaWN0TmFtZSlcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgfWVsc2VcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRhdGEuZGF0YTtcclxuICAgICAgICAgICAgICAkc2NvcGUudGFibGVQYXJhbXMuc2V0dGluZ3Moe1xyXG4gICAgICAgICAgICAgICAgZGF0YXNldDogcmVzdWx0XHJcbiAgICAgICAgICAgICAgfSk7ICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgQ29uZmlncy5jdXN0b21BbGVydChcIuaPkOekulwiLCBcIuaTjeS9nOWksei0pSFcIiwgJycsbnVsbCwgMCwgXCJlcnJvclwiKTtcclxuICAgICAgICAgIH0pLmVycm9yKGZ1bmN0aW9uKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpe1xyXG4gICAgICAgICAgICBDb25maWdzLmN1c3RvbUFsZXJ0KFwi5o+Q56S6XCIsIFwi5pON5L2c5aSx6LSlOuWPkeeUn+ivt+axguWksei0pSzkuI3og73liKDpmaTvvIFcIiwgJycsbnVsbCwgMCwgXCJlcnJvclwiKTtcclxuICAgICAgICAgIH0pOyAgICAgICAgIFxyXG4gICAgICAgIH0pOyBcclxuXHJcbiAgICAgICAgJHNjb3BlLm9wZW5Mb2cgPSAoZW50aXR5KSA9PiB7ICAgICAgICAgIFxyXG4gICAgICAgICAgdmFyIG5hbWUgPSBlbnRpdHkuYXJlYUNvZGUgKyBcIl9cIiArIGVudGl0eS5zeXNDb2RlICsgXCJfXCIgKyBlbnRpdHkuZGF0YVZlcnNpb25cclxuICAgICAgICAgIHZhciBjb250YWluZXJOYW1lID0gZW50aXR5LmNpdHlOYW1lICsgXCItXCIgKyBlbnRpdHkuZGlzdHJpY3ROYW1lICsgXCItXCIgKyBlbnRpdHkuc3lzTmFtZSArIFwiLeeJiOacrFwiICsgZW50aXR5LmRhdGFWZXJzaW9uO1xyXG4gICAgICAgICAgZW50aXR5W1wibmFtZVwiXSA9IG5hbWU7XHJcbiAgICAgICAgICBUZXJtaW5hbFNlcnZpY2UubmV3VGVybWluYWwoJGludGVydmFsLCBlbnRpdHkuaWQrXCJcIiwgY29udGFpbmVyTmFtZSwgZW50aXR5LCBcIi9qYXZhL2NvbnNvbGUvYXBpL3N0YW5kYXJkZXh0cmFjdC9sb2c/cmNOYW1lPVwiICsgbmFtZSwgJHRlbXBsYXRlQ2FjaGUuZ2V0KFVybEhlbHBlcnMuam9pbihLdWJlcm5ldGVzLnRlbXBsYXRlUGF0aCwgJ2xvZ1NoZWxsLmh0bWwnKSkpOyAgICAgICAgICBcclxuICAgICAgICB9XHJcblx0ICB9XSk7XHRcclxufSIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XHJcblxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcbiAgXHJcbiAgZXhwb3J0IHZhciBBcHBzID0gY29udHJvbGxlcihcIkFwcHNcIixcclxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTZXJ2aWNlc1wiLCBcIkt1YmVybmV0ZXNSZXBsaWNhdGlvbkNvbnRyb2xsZXJzXCIsIFwiS3ViZXJuZXRlc1BvZHNcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiRkaWFsb2dcIiwgXCIkdGltZW91dFwiLCBcclxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOiBLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTZXJ2aWNlczpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBLdWJlcm5ldGVzUmVwbGljYXRpb25Db250cm9sbGVyczpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBLdWJlcm5ldGVzUG9kczpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwsXHJcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkZGlhbG9nLCAkdGltZW91dCkgPT4ge1xyXG5cclxuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuXHJcbiAgICAkc2NvcGUuYXBwcyA9IFtdO1xyXG4gICAgJHNjb3BlLmFsbEFwcHMgPSBbXTtcclxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xyXG4gICAgJHNjb3BlLmZldGNoZWQgPSBmYWxzZTtcclxuICAgICRzY29wZS5qc29uID0gJyc7XHJcbiAgICBDb250cm9sbGVySGVscGVycy5iaW5kTW9kZWxUb1NlYXJjaFBhcmFtKCRzY29wZSwgJGxvY2F0aW9uLCAnaWQnLCAnX2lkJywgdW5kZWZpbmVkKTtcclxuICAgIENvbnRyb2xsZXJIZWxwZXJzLmJpbmRNb2RlbFRvU2VhcmNoUGFyYW0oJHNjb3BlLCAkbG9jYXRpb24sICdhcHBTZWxlY3RvclNob3cnLCAnb3BlbkFwcCcsIHVuZGVmaW5lZCk7XHJcbiAgICBDb250cm9sbGVySGVscGVycy5iaW5kTW9kZWxUb1NlYXJjaFBhcmFtKCRzY29wZSwgJGxvY2F0aW9uLCAnbW9kZScsICdtb2RlJywgJ2RldGFpbCcpO1xyXG5cclxuICAgIHZhciBicmFuY2ggPSAkc2NvcGUuYnJhbmNoIHx8IFwibWFzdGVyXCI7XHJcbiAgICB2YXIgbmFtZXNwYWNlID0gbnVsbDtcclxuXHJcbiAgICBmdW5jdGlvbiBhcHBNYXRjaGVzKGFwcCkge1xyXG4gICAgICB2YXIgZmlsdGVyVGV4dCA9ICRzY29wZS5hcHBTZWxlY3Rvci5maWx0ZXJUZXh0O1xyXG4gICAgICBpZiAoZmlsdGVyVGV4dCkge1xyXG4gICAgICAgIHJldHVybiBDb3JlLm1hdGNoRmlsdGVySWdub3JlQ2FzZShhcHAuZ3JvdXBJZCwgZmlsdGVyVGV4dCkgfHxcclxuICAgICAgICAgIENvcmUubWF0Y2hGaWx0ZXJJZ25vcmVDYXNlKGFwcC5hcnRpZmFjdElkLCBmaWx0ZXJUZXh0KSB8fFxyXG4gICAgICAgICAgQ29yZS5tYXRjaEZpbHRlcklnbm9yZUNhc2UoYXBwLm5hbWUsIGZpbHRlclRleHQpIHx8XHJcbiAgICAgICAgICBDb3JlLm1hdGNoRmlsdGVySWdub3JlQ2FzZShhcHAuZGVzY3JpcHRpb24sIGZpbHRlclRleHQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gYXBwUnVubmluZyhhcHApIHtcclxuICAgICAgcmV0dXJuICRzY29wZS5tb2RlbC5hcHBzLmFueSgocnVubmluZykgPT4gcnVubmluZy5hcHBQYXRoID09PSBhcHAuYXBwUGF0aCk7XHJcbiAgICB9XHJcblxyXG4gICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xyXG4gICAgICBkYXRhOiAnbW9kZWwuYXBwcycsXHJcbiAgICAgIHNob3dTZWxlY3Rpb25DaGVja2JveDogdHJ1ZSxcclxuICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxyXG4gICAgICBtdWx0aVNlbGVjdDogdHJ1ZSxcclxuICAgICAgc2VsZWN0ZWRJdGVtczogW10sXHJcbiAgICAgIGZpbHRlck9wdGlvbnM6IHtcclxuICAgICAgICBmaWx0ZXJUZXh0OiAkbG9jYXRpb24uc2VhcmNoKClbXCJxXCJdIHx8ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbHVtbkRlZnM6IFtcclxuICAgICAgICB7IGZpZWxkOiAnJG5hbWUnLCBkaXNwbGF5TmFtZTogJ0FwcCcsIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVBhdGgsIFwiYXBwSWNvblRlbWxhdGUuaHRtbFwiKSkgfSxcclxuICAgICAgICB7IGZpZWxkOiAnJHNlcnZpY2VzVGV4dCcsIGRpc3BsYXlOYW1lOiAnU2VydmljZXMnLCBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChVcmxIZWxwZXJzLmpvaW4odGVtcGxhdGVQYXRoLCBcImFwcFNlcnZpY2VzVGVtcGxhdGUuaHRtbFwiKSkgfSxcclxuICAgICAgICB7IGZpZWxkOiAnJHJlcGxpY2F0aW9uQ29udHJvbGxlcnNUZXh0JywgZGlzcGxheU5hbWU6ICdDb250cm9sbGVycycsIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVBhdGgsIFwiYXBwUmVwbGljYXRpb25Db250cm9sbGVyVGVtcGxhdGUuaHRtbFwiKSkgfSxcclxuICAgICAgICB7IGZpZWxkOiAnJHBvZENvdW50JywgZGlzcGxheU5hbWU6ICdQb2RzJywgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoVXJsSGVscGVycy5qb2luKHRlbXBsYXRlUGF0aCwgXCJhcHBQb2RDb3VudHNBbmRMaW5rVGVtcGxhdGUuaHRtbFwiKSkgfSxcclxuICAgICAgICB7IGZpZWxkOiAnJGNyZWF0aW9uRGF0ZScsIGRpc3BsYXlOYW1lOiAnRGVwbG95ZWQnLCBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChVcmxIZWxwZXJzLmpvaW4odGVtcGxhdGVQYXRoLCBcImFwcERlcGxveWVkVGVtcGxhdGUuaHRtbFwiKSkgfVxyXG4gICAgICBdXHJcbiAgICB9O1xyXG5cclxuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcclxuXHJcblxyXG4gICAgJHNjb3BlLmV4cGFuZGVkUG9kcyA9IFtdO1xyXG5cclxuICAgICRzY29wZS4kb24oJ2RvLXJlc2l6ZScsICgkZXZlbnQsIGNvbnRyb2xsZXIpID0+IHtcclxuICAgICAgJHNjb3BlLnJlc2l6ZURpYWxvZy5vcGVuKGNvbnRyb2xsZXIpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgICAgIFxyXG4gICAgJHNjb3BlLnBvZEV4cGFuZGVkID0gKHBvZCkgPT4ge1xyXG4gICAgICB2YXIgaWQgPSBnZXROYW1lKHBvZClcclxuICAgICAgcmV0dXJuIGlkICYmICgkc2NvcGUuZXhwYW5kZWRQb2RzIHx8IFtdKS5pbmRleE9mKGlkKSA+PSAwO1xyXG4gICAgfTtcclxuXHJcbiAgICAkc2NvcGUuZXhwYW5kUG9kID0gKHBvZCkgPT4ge1xyXG4gICAgICB2YXIgaWQgPSBnZXROYW1lKHBvZCk7XHJcbiAgICAgIGlmIChpZCkge1xyXG4gICAgICAgICRzY29wZS5leHBhbmRlZFBvZHMucHVzaChpZCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgJHNjb3BlLmNvbGxhcHNlUG9kID0gKHBvZCkgPT4ge1xyXG4gICAgICB2YXIgaWQgPSBnZXROYW1lKHBvZCk7XHJcbiAgICAgIGlmIChpZCkge1xyXG4gICAgICAgIF8ucmVtb3ZlKCRzY29wZS5leHBhbmRlZFBvZHMsICh2KSA9PiBpZCA9PT0gdik7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xyXG4gICAgICBLdWJlcm5ldGVzLnNldEpzb24oJHNjb3BlLCAkbG9jYXRpb24uc2VhcmNoKClbJ19pZCddLCAkc2NvcGUubW9kZWwuYXBwcyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBmdW5jdGlvbiBkZWxldGVBcHAoYXBwLCBvbkNvbXBsZXRlRm4pIHtcclxuICAgICAgZnVuY3Rpb24gZGVsZXRlU2VydmljZXMoc2VydmljZXMsIHNlcnZpY2UsIG9uQ29tcGxldGVkRm4pIHtcclxuICAgICAgICBpZiAoIXNlcnZpY2UgfHwgIXNlcnZpY2VzKSB7XHJcbiAgICAgICAgICByZXR1cm4gb25Db21wbGV0ZWRGbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaWQgPSBnZXROYW1lKHNlcnZpY2UpO1xyXG4gICAgICAgIGlmICghaWQpIHtcclxuICAgICAgICAgIGxvZy53YXJuKFwiTm8gSUQgZm9yIHNlcnZpY2UgXCIgKyBhbmd1bGFyLnRvSnNvbihzZXJ2aWNlKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIEt1YmVybmV0ZXNTZXJ2aWNlcy5kZWxldGUoe1xyXG4gICAgICAgICAgICBpZDogaWRcclxuICAgICAgICAgIH0sIHVuZGVmaW5lZCwgKCkgPT4ge1xyXG4gICAgICAgICAgICBsb2cuZGVidWcoXCJEZWxldGVkIHNlcnZpY2U6IFwiLCBpZCk7XHJcbiAgICAgICAgICAgIGRlbGV0ZVNlcnZpY2VzKHNlcnZpY2VzLCBzZXJ2aWNlcy5zaGlmdCgpLCBvbkNvbXBsZXRlZEZuKTtcclxuICAgICAgICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBsb2cuZGVidWcoXCJFcnJvciBkZWxldGluZyBzZXJ2aWNlOiBcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgICBkZWxldGVTZXJ2aWNlcyhzZXJ2aWNlcywgc2VydmljZXMuc2hpZnQoKSwgb25Db21wbGV0ZWRGbik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZ1bmN0aW9uIGRlbGV0ZVJlcGxpY2F0aW9uQ29udHJvbGxlcnMocmVwbGljYXRpb25Db250cm9sbGVycywgcmVwbGljYXRpb25Db250cm9sbGVyLCBvbkNvbXBsZXRlZEZuKSB7XHJcbiAgICAgICAgaWYgKCFyZXBsaWNhdGlvbkNvbnRyb2xsZXIgfHwgIXJlcGxpY2F0aW9uQ29udHJvbGxlcnMpIHtcclxuICAgICAgICAgIHJldHVybiBvbkNvbXBsZXRlZEZuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBpZCA9IGdldE5hbWUocmVwbGljYXRpb25Db250cm9sbGVyKTtcclxuICAgICAgICBpZiAoIWlkKSB7XHJcbiAgICAgICAgICBsb2cud2FybihcIk5vIElEIGZvciByZXBsaWNhdGlvbkNvbnRyb2xsZXIgXCIgKyBhbmd1bGFyLnRvSnNvbihyZXBsaWNhdGlvbkNvbnRyb2xsZXIpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgS3ViZXJuZXRlc1JlcGxpY2F0aW9uQ29udHJvbGxlcnMuZGVsZXRlKHtcclxuICAgICAgICAgICAgaWQ6IGlkXHJcbiAgICAgICAgICB9LCB1bmRlZmluZWQsICgpID0+IHtcclxuICAgICAgICAgICAgbG9nLmRlYnVnKFwiRGVsZXRlZCByZXBsaWNhdGlvbkNvbnRyb2xsZXI6IFwiLCBpZCk7XHJcbiAgICAgICAgICAgIGRlbGV0ZVJlcGxpY2F0aW9uQ29udHJvbGxlcnMocmVwbGljYXRpb25Db250cm9sbGVycywgcmVwbGljYXRpb25Db250cm9sbGVycy5zaGlmdCgpLCBvbkNvbXBsZXRlZEZuKTtcclxuICAgICAgICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBsb2cuZGVidWcoXCJFcnJvciBkZWxldGluZyByZXBsaWNhdGlvbkNvbnRyb2xsZXI6IFwiLCBlcnJvcik7XHJcbiAgICAgICAgICAgIGRlbGV0ZVJlcGxpY2F0aW9uQ29udHJvbGxlcnMocmVwbGljYXRpb25Db250cm9sbGVycywgcmVwbGljYXRpb25Db250cm9sbGVycy5zaGlmdCgpLCBvbkNvbXBsZXRlZEZuKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgZnVuY3Rpb24gZGVsZXRlUG9kcyhwb2RzLCBwb2QsIG9uQ29tcGxldGVkRm4pIHtcclxuICAgICAgICBpZiAoIXBvZCB8fCAhcG9kcykge1xyXG4gICAgICAgICAgcmV0dXJuIG9uQ29tcGxldGVkRm4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGlkID0gZ2V0TmFtZShwb2QpO1xyXG4gICAgICAgIGlmICghaWQpIHtcclxuICAgICAgICAgIGxvZy53YXJuKFwiTm8gSUQgZm9yIHBvZCBcIiArIGFuZ3VsYXIudG9Kc29uKHBvZCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBLdWJlcm5ldGVzUG9kcy5kZWxldGUoe1xyXG4gICAgICAgICAgICBpZDogaWRcclxuICAgICAgICAgIH0sIHVuZGVmaW5lZCwgKCkgPT4ge1xyXG4gICAgICAgICAgICBsb2cuZGVidWcoXCJEZWxldGVkIHBvZDogXCIsIGlkKTtcclxuICAgICAgICAgICAgZGVsZXRlUG9kcyhwb2RzLCBwb2RzLnNoaWZ0KCksIG9uQ29tcGxldGVkRm4pO1xyXG4gICAgICAgICAgfSwgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIkVycm9yIGRlbGV0aW5nIHBvZDogXCIsIGVycm9yKTtcclxuICAgICAgICAgICAgZGVsZXRlUG9kcyhwb2RzLCBwb2RzLnNoaWZ0KCksIG9uQ29tcGxldGVkRm4pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgc2VydmljZXMgPSBbXS5jb25jYXQoYXBwLnNlcnZpY2VzKTtcclxuICAgICAgZGVsZXRlU2VydmljZXMoc2VydmljZXMsIHNlcnZpY2VzLnNoaWZ0KCksICgpID0+IHtcclxuXHJcbiAgICAgICAgdmFyIHJlcGxpY2F0aW9uQ29udHJvbGxlcnMgPSBbXS5jb25jYXQoYXBwLnJlcGxpY2F0aW9uQ29udHJvbGxlcnMpO1xyXG4gICAgICAgIGRlbGV0ZVJlcGxpY2F0aW9uQ29udHJvbGxlcnMocmVwbGljYXRpb25Db250cm9sbGVycywgcmVwbGljYXRpb25Db250cm9sbGVycy5zaGlmdCgpLCAoKSA9PiB7XHJcblxyXG4gICAgICAgICAgdmFyIHBvZHMgPSBbXS5jb25jYXQoYXBwLnBvZHMpO1xyXG4gICAgICAgICAgZGVsZXRlUG9kcyhwb2RzLCBwb2RzLnNoaWZ0KCksIG9uQ29tcGxldGVGbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgICRzY29wZS5kZWxldGVTaW5nbGVBcHAgPSAoYXBwKSA9PiB7XHJcbiAgICAgICRzY29wZS5kZWxldGVQcm9tcHQoW2FwcF0pO1xyXG4gICAgfVxyXG5cclxuICAgICRzY29wZS5kZWxldGVQcm9tcHQgPSAoc2VsZWN0ZWQpID0+IHtcclxuICAgICAgaWYgKGFuZ3VsYXIuaXNTdHJpbmcoc2VsZWN0ZWQpKSB7XHJcbiAgICAgICAgc2VsZWN0ZWQgPSBbe1xyXG4gICAgICAgICAgaWQ6IHNlbGVjdGVkXHJcbiAgICAgICAgfV07XHJcbiAgICAgIH1cclxuICAgICAgVUkubXVsdGlJdGVtQ29uZmlybUFjdGlvbkRpYWxvZyg8VUkuTXVsdGlJdGVtQ29uZmlybUFjdGlvbk9wdGlvbnM+e1xyXG4gICAgICAgIGNvbGxlY3Rpb246IHNlbGVjdGVkLFxyXG4gICAgICAgIGluZGV4OiAnJG5hbWUnLFxyXG4gICAgICAgIG9uQ2xvc2U6IChyZXN1bHQ6Ym9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICBmdW5jdGlvbiBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgbmV4dCkge1xyXG4gICAgICAgICAgICAgIGlmIChuZXh0KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWQgPSBuZXh0Lm5hbWU7XHJcbiAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJkZWxldGluZzogXCIsIGlkKTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZUFwcChuZXh0LCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcImRlbGV0ZWQ6IFwiLCBpZCk7XHJcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGl0bGU6ICdEZWxldGUgQXBwcz8nLFxyXG4gICAgICAgIGFjdGlvbjogJ1RoZSBmb2xsb3dpbmcgQXBwcyB3aWxsIGJlIGRlbGV0ZWQ6JyxcclxuICAgICAgICBva1RleHQ6ICdEZWxldGUnLFxyXG4gICAgICAgIG9rQ2xhc3M6ICdidG4tZGFuZ2VyJyxcclxuICAgICAgICBjdXN0b206IFwiVGhpcyBvcGVyYXRpb24gaXMgcGVybWFuZW50IG9uY2UgY29tcGxldGVkIVwiLFxyXG4gICAgICAgIGN1c3RvbUNsYXNzOiBcImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIlxyXG4gICAgICB9KS5vcGVuKCk7XHJcbiAgICB9O1xyXG5cclxuICAgICRzY29wZS5hcHBTZWxlY3RvciA9IHtcclxuICAgICAgZmlsdGVyVGV4dDogXCJcIixcclxuICAgICAgZm9sZGVyczogW10sXHJcbiAgICAgIHNlbGVjdGVkQXBwczogW10sXHJcblxyXG4gICAgICBpc09wZW46IChmb2xkZXIpID0+IHtcclxuICAgICAgICBpZiAoJHNjb3BlLmFwcFNlbGVjdG9yLmZpbHRlclRleHQgIT09ICcnIHx8IGZvbGRlci5leHBhbmRlZCkge1xyXG4gICAgICAgICAgcmV0dXJuIFwib3BlbmVkXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcImNsb3NlZFwiO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgZ2V0U2VsZWN0ZWRDbGFzczogKGFwcCkgPT4ge1xyXG4gICAgICAgIGlmIChhcHAuYWJzdHJhY3QpIHtcclxuICAgICAgICAgIHJldHVybiBcImFic3RyYWN0XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhcHAuc2VsZWN0ZWQpIHtcclxuICAgICAgICAgIHJldHVybiBcInNlbGVjdGVkXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgc2hvd0FwcDogKGFwcCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBhcHBNYXRjaGVzKGFwcCkgJiYgIWFwcFJ1bm5pbmcoYXBwKTtcclxuICAgICAgfSxcclxuXHJcbiAgICAgIHNob3dGb2xkZXI6IChmb2xkZXIpID0+IHtcclxuICAgICAgICByZXR1cm4gISRzY29wZS5hcHBTZWxlY3Rvci5maWx0ZXJUZXh0IHx8IGZvbGRlci5hcHBzLnNvbWUoKGFwcCkgPT4gYXBwTWF0Y2hlcyhhcHApICYmICFhcHBSdW5uaW5nKGFwcCkpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgY2xlYXJTZWxlY3RlZDogKCkgPT4ge1xyXG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUubW9kZWwuYXBwRm9sZGVycywgKGZvbGRlcikgPT4ge1xyXG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKGZvbGRlci5hcHBzLCAoYXBwKSA9PiB7XHJcbiAgICAgICAgICAgIGFwcC5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJHNjb3BlLmFwcFNlbGVjdG9yLnNlbGVjdGVkQXBwcyA9IFtdO1xyXG4gICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICB1cGRhdGVTZWxlY3RlZDogKCkgPT4ge1xyXG4gICAgICAgIC8vIGxldHMgdXBkYXRlIHRoZSBzZWxlY3RlZCBhcHBzXHJcbiAgICAgICAgdmFyIHNlbGVjdGVkQXBwcyA9IFtdO1xyXG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUubW9kZWwuYXBwRm9sZGVycywgKGZvbGRlcikgPT4ge1xyXG4gICAgICAgICAgdmFyIGFwcHMgPSBmb2xkZXIuYXBwcy5maWx0ZXIoKGFwcCkgPT4gYXBwLnNlbGVjdGVkKTtcclxuICAgICAgICAgIGlmIChhcHBzKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkQXBwcyA9IHNlbGVjdGVkQXBwcy5jb25jYXQoYXBwcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJHNjb3BlLmFwcFNlbGVjdG9yLnNlbGVjdGVkQXBwcyA9IF8uc29ydEJ5KHNlbGVjdGVkQXBwcywgXCJuYW1lXCIpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgc2VsZWN0OiAoYXBwLCBmbGFnKSA9PiB7XHJcbiAgICAgICAgYXBwLnNlbGVjdGVkID0gZmxhZztcclxuICAgICAgICAkc2NvcGUuYXBwU2VsZWN0b3IudXBkYXRlU2VsZWN0ZWQoKTtcclxuICAgICAgfSxcclxuXHJcbiAgICAgIGhhc1NlbGVjdGlvbjogKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAkc2NvcGUubW9kZWwuYXBwRm9sZGVycy5hbnkoKGZvbGRlcikgPT4gZm9sZGVyLmFwcHMuYW55KChhcHApID0+IGFwcC5zZWxlY3RlZCkpO1xyXG4gICAgICB9LFxyXG5cclxuXHJcbiAgICAgIHJ1blNlbGVjdGVkQXBwczogKCkgPT4ge1xyXG4gICAgICAgIC8vIGxldHMgcnVuIGFsbCB0aGUgc2VsZWN0ZWQgYXBwc1xyXG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUuYXBwU2VsZWN0b3Iuc2VsZWN0ZWRBcHBzLCAoYXBwKSA9PiB7XHJcbiAgICAgICAgICB2YXIgbmFtZSA9IGFwcC5uYW1lO1xyXG4gICAgICAgICAgdmFyIG1ldGFkYXRhUGF0aCA9IGFwcC5tZXRhZGF0YVBhdGg7XHJcbiAgICAgICAgICBpZiAobWV0YWRhdGFQYXRoKSB7XHJcbiAgICAgICAgICAgIC8vIGxldHMgbG9hZCB0aGUganNvbi95YW1sXHJcbiAgICAgICAgICAgIC8vdmFyIHVybCA9IGdpdFBhdGhUb1VybChXaWtpLmdpdFJlbGF0aXZlVVJMKGJyYW5jaCwgbWV0YWRhdGFQYXRoKSk7XHJcbiAgICAgICAgICAgIHZhciB1cmwgPSBnaXRQYXRoVG9VcmwobWV0YWRhdGFQYXRoLCBicmFuY2gpO1xyXG4gICAgICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGxldHMgY29udmVydCB0aGUganNvbiBvYmplY3Qgc3RydWN0dXJlIGludG8gYSBzdHJpbmdcclxuICAgICAgICAgICAgICAgICAgICB2YXIganNvbiA9IGFuZ3VsYXIudG9Kc29uKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBmbiA9ICgpID0+IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMucnVuQXBwKCRsb2NhdGlvbiwgJHNjb3BlLCAkaHR0cCwgS3ViZXJuZXRlc0FwaVVSTCwganNvbiwgbmFtZSwgZm4sIG5hbWVzcGFjZSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLlxyXG4gICAgICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICRzY29wZS5zdW1tYXJ5SHRtbCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIGxldHMgZ28gYmFjayB0byB0aGUgYXBwcyB2aWV3XHJcbiAgICAgICAgJHNjb3BlLmFwcFNlbGVjdG9yLmNsZWFyU2VsZWN0ZWQoKTtcclxuICAgICAgICAkc2NvcGUuYXBwU2VsZWN0b3JTaG93ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XHJcblxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcblxyXG4gIF9tb2R1bGUuZGlyZWN0aXZlKFwiaGF3dGlvQnJlYWRjcnVtYnNcIiwgWydIYXd0aW9CcmVhZGNydW1icycsIChIYXd0aW9CcmVhZGNydW1icykgPT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLypcclxuICAgICAgdGVtcGxhdGVVcmw6IEt1YmVybmV0ZXMudGVtcGxhdGVQYXRoICsgJ2JyZWFkY3J1bWJzLmh0bWwnXHJcbiAgICAgICovXHJcbiAgICAgIGxpbms6IChzY29wZSwgZWxlbWVudCwgYXR0cnMpID0+IHtcclxuICAgICAgICBIYXd0aW9CcmVhZGNydW1icy5hcHBseShzY29wZS4kZXZhbCgnYnJlYWRjcnVtYkNvbmZpZycpKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBleHBvcnQgdmFyIEJ1aWxkQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJCdWlsZENvbnRyb2xsZXJcIixcclxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNTY2hlbWFcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXHJcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc1NjaGVtYSxcclxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XHJcblxyXG4gICAgICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xyXG4gICAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuICAgICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcclxuICAgICAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcclxuICAgICAgICAkc2NvcGUuY29uZmlnID0gS3ViZXJuZXRlc1NjaGVtYS5kZWZpbml0aW9ucy5vc19idWlsZF9CdWlsZDtcclxuXHJcbiAgICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG4gICAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RCcmVhZGNydW1icygkc2NvcGUuaWQpO1xyXG4gICAgICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdFN1Yk5hdkJhcnMoJHNjb3BlLmlkLCBudWxsLCAkc2NvcGUpO1xyXG5cclxuICAgICAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHVwZGF0ZURhdGEoKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcclxuICAgICAgICAgICRzY29wZS5pdGVtID0gbnVsbDtcclxuICAgICAgICAgIGlmICgkc2NvcGUuaWQpIHtcclxuICAgICAgICAgICAgdmFyIHVybCA9IGJ1aWxkUmVzdFVybCgkc2NvcGUuaWQpO1xyXG4gICAgICAgICAgICAkaHR0cC5nZXQodXJsKS5cclxuICAgICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgJHNjb3BlLmVudGl0eSA9IGVucmljaEJ1aWxkKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgICAgICB9KS5cclxuICAgICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBleHBvcnQgdmFyIEJ1aWxkQ29uZmlnQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJCdWlsZENvbmZpZ0NvbnRyb2xsZXJcIixcclxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNTY2hlbWFcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXHJcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc1NjaGVtYSxcclxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XHJcblxyXG4gICAgICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xyXG4gICAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuICAgICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcclxuICAgICAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcclxuICAgICAgICAkc2NvcGUuY29uZmlnID0gS3ViZXJuZXRlc1NjaGVtYS5kZWZpbml0aW9ucy5vc19idWlsZF9CdWlsZENvbmZpZztcclxuXHJcbiAgICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG4gICAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RCcmVhZGNydW1icygkc2NvcGUuaWQpO1xyXG4gICAgICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdFN1Yk5hdkJhcnMoJHNjb3BlLmlkKTtcclxuXHJcbiAgICAgICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xyXG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB1cGRhdGVEYXRhKCk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XHJcbiAgICAgICAgICAkc2NvcGUuaXRlbSA9IG51bGw7XHJcbiAgICAgICAgICBpZiAoJHNjb3BlLmlkKSB7XHJcbiAgICAgICAgICAgIHZhciB1cmwgPSBidWlsZENvbmZpZ1Jlc3RVcmwoJHNjb3BlLmlkKTtcclxuICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXHJcbiAgICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICRzY29wZS5lbnRpdHkgPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICB2YXIgc29ydGVkQnVpbGRzID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgZW5yaWNoQnVpbGRDb25maWcoZGF0YSwgc29ydGVkQnVpbGRzKTtcclxuICAgICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLnNldFByb2plY3QoJHNjb3BlLmVudGl0eSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgICAgIH0pLlxyXG4gICAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XHJcblxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcblxyXG4gIGV4cG9ydCB2YXIgQnVpbGRDb25maWdFZGl0Q29udHJvbGxlciA9IF9tb2R1bGUuY29udHJvbGxlcihcIkt1YmVybmV0ZXMuQnVpbGRDb25maWdFZGl0Q29udHJvbGxlclwiLCAoJHNjb3BlLCAkZWxlbWVudCwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLCAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCwgSzhTQ2xpZW50RmFjdG9yeSwgU2NoZW1hUmVnaXN0cnk6SGF3dGlvRm9ybXMuU2NoZW1hUmVnaXN0cnkpID0+IHtcclxuXHJcbiAgICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG4gICAgICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcInByb2plY3RcIl0gfHwgJHJvdXRlUGFyYW1zW1wiaWRcIl07XHJcbiAgICAgICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XHJcblxyXG4gICAgICAgIHZhciBtb2RlID0gJHNjb3BlLiRldmFsKCdtb2RlJykgfHwgJ2VkaXQnO1xyXG5cclxuICAgICAgICBsb2cuZGVidWcoXCJNb2RlOiBcIiwgbW9kZSk7XHJcblxyXG5cclxuICAgICAgICB2YXIgc3BlY0NvbmZpZyA9IFNjaGVtYVJlZ2lzdHJ5LmdldFNjaGVtYSgnaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkQ29uZmlnU3BlYycpO1xyXG4gICAgICAgIHZhciBnaXRCdWlsZFNvdXJjZSA9IFNjaGVtYVJlZ2lzdHJ5LmdldFNjaGVtYSgnaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkdpdEJ1aWxkU291cmNlJyk7XHJcbiAgICAgICAgdmFyIGJ1aWxkU291cmNlID0gU2NoZW1hUmVnaXN0cnkuZ2V0U2NoZW1hKCdpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRTb3VyY2UnKTtcclxuICAgICAgICB2YXIgYnVpbGRPdXRwdXQgPSBTY2hlbWFSZWdpc3RyeS5nZXRTY2hlbWEoJ2lvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZE91dHB1dCcpO1xyXG4gICAgICAgIHZhciByZXNvdXJjZXMgPSBTY2hlbWFSZWdpc3RyeS5nZXRTY2hlbWEoJ2lvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VSZXF1aXJlbWVudHMnKTtcclxuICAgICAgICB2YXIgcmV2aXNpb24gPSBTY2hlbWFSZWdpc3RyeS5nZXRTY2hlbWEoJ2lvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Tb3VyY2VSZXZpc2lvbicpO1xyXG4gICAgICAgIHZhciBzdHJhdGVneSA9IFNjaGVtYVJlZ2lzdHJ5LmdldFNjaGVtYSgnaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkU3RyYXRlZ3knKTtcclxuICAgICAgICB2YXIgY3VzdG9tU3RyYXRlZ3kgPSBTY2hlbWFSZWdpc3RyeS5nZXRTY2hlbWEoJ2lvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DdXN0b21CdWlsZFN0cmF0ZWd5Jyk7XHJcbiAgICAgICAgdmFyIGJ1aWxkVHJpZ2dlclBvbGljeSA9IFNjaGVtYVJlZ2lzdHJ5LmdldFNjaGVtYSgnaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkVHJpZ2dlclBvbGljeScpO1xyXG5cclxuICAgICAgICB2YXIgZ2V0U2VjcmV0cyA9ICgpID0+IHtcclxuICAgICAgICAgIHJldHVybiAkc2NvcGUuc2VjcmV0cztcclxuICAgICAgICB9O1xyXG5cclxuXHJcbiAgICAgICAgdmFyIHNlY3JldFNjaGVtYVR5cGUgPSBcImZhYnJpYzhfU2VjcmV0UmVmZXJlbmNlXCI7XHJcbiAgICAgICAgdmFyIHNlY3JldFNjaGVtYVJlZiA9IFwiIy9kZWZpbml0aW9ucy9cIiArIHNlY3JldFNjaGVtYVR5cGU7XHJcbiAgICAgICAgdmFyIHNlY3JldFNjaGVtYUphdmFUeXBlID0gXCJpby5mYWJyaWM4LmNvbnNvbGUuU2VjcmV0UmVmZXJlbmNlXCI7XHJcblxyXG4gICAgICAgIHZhciBzZWNyZXROYW1lRWxlbWVudCA9IDxIYXd0aW9Gb3Jtcy5Gb3JtRWxlbWVudD4ge1xyXG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICBcImVudW1cIjogZ2V0U2VjcmV0cyxcclxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIHNlY3JldFNjaGVtYTogSGF3dGlvRm9ybXMuRm9ybUNvbmZpZ3VyYXRpb24gPSA8YW55PiB7XHJcbiAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcclxuICAgICAgICAgICAgXCJuYW1lXCI6IHNlY3JldE5hbWVFbGVtZW50XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgamF2YVR5cGU6IHNlY3JldFNjaGVtYUphdmFUeXBlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBTY2hlbWFSZWdpc3RyeS5hZGRTY2hlbWEoc2VjcmV0U2NoZW1hVHlwZSwgc2VjcmV0U2NoZW1hKTtcclxuXHJcbiAgICAgICAgLy8gbGV0cyBzd2l0Y2ggdG8gdGhlIG5ldyBzZWNyZXRzIHR5cGVzOlxyXG4gICAgICAgIHZhciBzb3VyY2VTZWNyZXRQcm9wZXJ0eSA9IENvcmUucGF0aEdldChidWlsZFNvdXJjZSwgW1wicHJvcGVydGllc1wiLCBcInNvdXJjZVNlY3JldFwiXSk7XHJcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKFtcclxuICAgICAgICAgIENvcmUucGF0aEdldChjdXN0b21TdHJhdGVneSwgW1wicHJvcGVydGllc1wiLCBcInB1bGxTZWNyZXRcIl0pLFxyXG4gICAgICAgICAgc291cmNlU2VjcmV0UHJvcGVydHksXHJcbiAgICAgICAgXSwgKHNjaGVtYVR5cGUpID0+IHtcclxuICAgICAgICAgIGlmIChzY2hlbWFUeXBlKSB7XHJcbiAgICAgICAgICAgIHNjaGVtYVR5cGVbXCJ0eXBlXCJdID0gc2VjcmV0U2NoZW1hVHlwZTtcclxuICAgICAgICAgICAgc2NoZW1hVHlwZVtcIiRyZWZcIl0gPSBzZWNyZXRTY2hlbWFSZWY7XHJcbiAgICAgICAgICAgIHNjaGVtYVR5cGVbXCJqYXZhVHlwZVwiXSA9IHNlY3JldFNjaGVtYUphdmFUeXBlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBsZXRzIHRyeSBtYWtlIHRoZSBidWlsZFNvdXJjZSdzIHNvdXJjZVNlY3JldCBtYW5kYXRvcnlcclxuICAgICAgICAvL3NjaGVtYVNldFJlcXVpcmVkKGN1c3RvbVN0cmF0ZWd5LCAncHVsbFNlY3JldCcpO1xyXG4gICAgICAgIHNjaGVtYVNldFJlcXVpcmVkKGJ1aWxkU291cmNlLCAnc291cmNlU2VjcmV0Jyk7XHJcbiAgICAgICAgaWYgKHNvdXJjZVNlY3JldFByb3BlcnR5KSB7XHJcbiAgICAgICAgICBDb3JlLnBhdGhTZXQoc291cmNlU2VjcmV0UHJvcGVydHksIFsncHJvcGVydGllcycsICdyZXF1aXJlZCddLCB0cnVlKTtcclxuICAgICAgICAgIENvcmUucGF0aFNldChzb3VyY2VTZWNyZXRQcm9wZXJ0eSwgWydwcm9wZXJ0aWVzJywgJ2lucHV0LWF0dHJpYnV0ZXMnLCAncmVxdWlyZWQnXSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAkc2NvcGUuY3VzdG9tU3RyYXRlZ3kgPSBjdXN0b21TdHJhdGVneTtcclxuICAgICAgICAkc2NvcGUuYnVpbGRTb3VyY2UgPSBidWlsZFNvdXJjZTtcclxuXHJcbiAgICAgICAgJHNjb3BlLnNlY3JldHMgPSBbXTtcclxuXHJcbiAgICAgICAgLy8gJHNjb3BlLmNvbmZpZyA9IEt1YmVybmV0ZXNTY2hlbWEuZGVmaW5pdGlvbnMub3NfYnVpbGRfQnVpbGRDb25maWc7XHJcbiAgICAgICAgLy8kc2NvcGUuc3BlY0NvbmZpZyA9IEt1YmVybmV0ZXNTY2hlbWEuZGVmaW5pdGlvbnMub3NfYnVpbGRfQnVpbGRDb25maWdTcGVjO1xyXG4gICAgICAgIC8vXHJcbiAgICAgICAgc3BlY0NvbmZpZy5zdHlsZSA9IEhhd3Rpb0Zvcm1zLkZvcm1TdHlsZS5TVEFOREFSRDtcclxuICAgICAgICBzcGVjQ29uZmlnLnByb3BlcnRpZXNbJ3RyaWdnZXJzJ11bJ2xhYmVsLWF0dHJpYnV0ZXMnXSA9IHtcclxuICAgICAgICAgIHN0eWxlOiAnZGlzcGxheTogbm9uZTsnXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZ2l0QnVpbGRTb3VyY2UuY29udHJvbHMgPSBbJ3VyaScsICdyZWYnLCAnKiddO1xyXG4gICAgICAgIGJ1aWxkU291cmNlLnByb3BlcnRpZXNbJ3R5cGUnXS50eXBlID0gJ2hpZGRlbic7XHJcbiAgICAgICAgYnVpbGRTb3VyY2UucHJvcGVydGllc1sndHlwZSddWydkZWZhdWx0J10gPSAnR2l0JztcclxuICAgICAgICBidWlsZFNvdXJjZS5jb250cm9scyA9IFsnZ2l0JywgJ2NvbnRleHREaXInLCAnc291cmNlU2VjcmV0JywgJyonXTtcclxuXHJcbiAgICAgICAgZ2l0QnVpbGRTb3VyY2VbJ2hpZGVMZWdlbmQnXSA9IHRydWU7XHJcbiAgICAgICAgYnVpbGRTb3VyY2VbJ2hpZGVMZWdlbmQnXSA9IHRydWU7XHJcbiAgICAgICAgYnVpbGRPdXRwdXRbJ2hpZGVMZWdlbmQnXSA9IHRydWU7XHJcbiAgICAgICAgcmVzb3VyY2VzWydoaWRlTGVnZW5kJ10gPSB0cnVlO1xyXG4gICAgICAgIHJldmlzaW9uWydoaWRlTGVnZW5kJ10gPSB0cnVlO1xyXG4gICAgICAgIHN0cmF0ZWd5WydoaWRlTGVnZW5kJ10gPSB0cnVlO1xyXG5cclxuICAgICAgICBzdHJhdGVneS5jb250cm9scyA9IFsndHlwZScsICcqJ107XHJcbiAgICAgICAgc3RyYXRlZ3kucHJvcGVydGllc1sndHlwZSddID0ge1xyXG4gICAgICAgICAgdHlwZTogJ3RleHQnLFxyXG4gICAgICAgICAgZW51bTogW3tcclxuICAgICAgICAgICAgJ3ZhbHVlJzogJ0N1c3RvbScsXHJcbiAgICAgICAgICAgICdsYWJlbCc6ICdDdXN0b20nXHJcbiAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICd2YWx1ZSc6ICdEb2NrZXInLFxyXG4gICAgICAgICAgICAnbGFiZWwnOiAnRG9ja2VyJ1xyXG4gICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAndmFsdWUnOiAnU291cmNlJyxcclxuICAgICAgICAgICAgJ2xhYmVsJzogJ1NvdXJjZSdcclxuICAgICAgICAgIH1dXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjdXN0b21TdHJhdGVneVsnY29udHJvbC1ncm91cC1hdHRyaWJ1dGVzJ10gPSB7XHJcbiAgICAgICAgICAnbmctc2hvdyc6IFwiZW50aXR5LnR5cGUgPT0gJ0N1c3RvbSdcIlxyXG4gICAgICAgIH07XHJcbiAgICAgICAgc3RyYXRlZ3kucHJvcGVydGllc1snZG9ja2VyU3RyYXRlZ3knXVsnY29udHJvbC1ncm91cC1hdHRyaWJ1dGVzJ10gPSB7XHJcbiAgICAgICAgICAnbmctc2hvdyc6IFwiZW50aXR5LnR5cGUgPT0gJ0RvY2tlcidcIlxyXG4gICAgICAgIH07XHJcbiAgICAgICAgc3RyYXRlZ3kucHJvcGVydGllc1snc291cmNlU3RyYXRlZ3knXVsnY29udHJvbC1ncm91cC1hdHRyaWJ1dGVzJ10gPSB7XHJcbiAgICAgICAgICAnbmctc2hvdyc6IFwiZW50aXR5LnR5cGUgPT0gJ1NvdXJjZSdcIlxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGJ1aWxkVHJpZ2dlclBvbGljeS5jb250cm9scyA9IFsndHlwZScsICcqJ107XHJcbiAgICAgICAgYnVpbGRUcmlnZ2VyUG9saWN5LnByb3BlcnRpZXNbJ3R5cGUnXSA9IHtcclxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICAgICAgZW51bTogW3tcclxuICAgICAgICAgICAgJ3ZhbHVlJzogJ0dpdGh1YicsXHJcbiAgICAgICAgICAgICdsYWJlbCc6ICdHaXRodWInXHJcbiAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICd2YWx1ZSc6ICdJbWFnZUNoYW5nZScsXHJcbiAgICAgICAgICAgICdsYWJlbCc6ICdJbWFnZSBDaGFuZ2UnXHJcbiAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICd2YWx1ZSc6ICdHZW5lcmljJyxcclxuICAgICAgICAgICAgJ2xhYmVsJzogJ0dlbmVyaWMnXHJcbiAgICAgICAgICB9XVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnVpbGRUcmlnZ2VyUG9saWN5LnByb3BlcnRpZXNbJ2dlbmVyaWMnXVsnY29udHJvbC1ncm91cC1hdHRyaWJ1dGVzJ10gPSB7XHJcbiAgICAgICAgICAnbmctc2hvdyc6IFwiZW50aXR5LnR5cGUgPT0gJ0dlbmVyaWMnXCJcclxuICAgICAgICB9O1xyXG4gICAgICAgIGJ1aWxkVHJpZ2dlclBvbGljeS5wcm9wZXJ0aWVzWydnaXRodWInXVsnY29udHJvbC1ncm91cC1hdHRyaWJ1dGVzJ10gPSB7XHJcbiAgICAgICAgICAnbmctc2hvdyc6IFwiZW50aXR5LnR5cGUgPT0gJ0dpdGh1YidcIlxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnVpbGRUcmlnZ2VyUG9saWN5LnByb3BlcnRpZXNbJ2ltYWdlQ2hhbmdlJ11bJ2NvbnRyb2wtZ3JvdXAtYXR0cmlidXRlcyddID0ge1xyXG4gICAgICAgICAgJ25nLXNob3cnOiBcImVudGl0eS50eXBlID09ICdJbWFnZUNoYW5nZSdcIlxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIHJlLWFycmFuZ2luZyB0aGUgY29udHJvbHNcclxuICAgICAgICAvL3NwZWNDb25maWcuY29udHJvbHMgPSBbJ3NvdXJjZScsICcqJ107XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gdGFic1xyXG4gICAgICAgIHNwZWNDb25maWcudGFicyA9IHtcclxuICAgICAgICAgIFwiU291cmNlXCI6IFtcInNvdXJjZVwiXSxcclxuICAgICAgICAgIFwiUmV2aXNpb25cIjogW1wicmV2aXNpb25cIl0sXHJcbiAgICAgICAgICBcIk91dHB1dFwiOiBbXCJvdXRwdXRcIl0sXHJcbiAgICAgICAgICBcIlJlc291cmNlc1wiOiBbXCJyZXNvdXJjZXNcIl0sXHJcbiAgICAgICAgICBcIlN0cmF0ZWd5XCI6IFtcInN0cmF0ZWd5XCJdLFxyXG4gICAgICAgICAgXCJUcmlnZ2Vyc1wiOiBbXCJ0cmlnZ2Vyc1wiXSxcclxuICAgICAgICAgIFwiU2VydmljZSBBY2NvdW50XCI6IFtcInNlcnZpY2VBY2NvdW50XCJdXHJcbiAgICAgICAgfTtcclxuICAgICAgICAvKlxyXG4gICAgICAgICAqIHdpemFyZCwgbmVlZHMgYW4gJ29uRmluaXNoJyBmdW5jdGlvbiBpbiB0aGUgc2NvcGVcclxuICAgICAgICBzcGVjQ29uZmlnLndpemFyZCA9IDxhbnk+e1xyXG4gICAgICAgICAgcGFnZXM6IHtcclxuICAgICAgICAgICAgU291cmNlOiB7XHJcbiAgICAgICAgICAgICAgY29udHJvbHM6IFtcInNvdXJjZVwiXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBSZXZpc2lvbjoge1xyXG4gICAgICAgICAgICAgIGNvbnRyb2xzOiBbXCJyZXZpc2lvblwiXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBPdXRwdXQ6IHtcclxuICAgICAgICAgICAgICBjb250cm9sczogW1wib3V0cHV0XCJdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFJlc291cmNlczoge1xyXG4gICAgICAgICAgICAgIGNvbnRyb2xzOiBbXCJyZXNvdXJjZXNcIl1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgU3RyYXRlZ3k6IHtcclxuICAgICAgICAgICAgICBjb250cm9sczogW1wic3RyYXRlZ3lcIl1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgVHJpZ2dlcnM6IHtcclxuICAgICAgICAgICAgICBjb250cm9sczogW1widHJpZ2dlcnNcIl1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJTZXJ2aWNlIEFjY291bnRcIjoge1xyXG4gICAgICAgICAgICAgIGNvbnRyb2xzOiBbXCJzZXJ2aWNlQWNjb3VudFwiXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICAqL1xyXG5cclxuICAgICAgICAkc2NvcGUuZW50aXR5ID0ge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IFwidjFcIixcclxuICAgICAgICAgIFwia2luZFwiOiBcIkJ1aWxkQ29uZmlnXCIsXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCJuYW1lXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwibGFiZWxzXCI6IHtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3BlY1wiOiB7XHJcbiAgICAgICAgICAgIFwic291cmNlXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJHaXRcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcInN0cmF0ZWd5XCI6IHtcclxuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIkN1c3RvbVwiLFxyXG4gICAgICAgICAgICAgICAgXCJjdXN0b21TdHJhdGVneVwiOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJmcm9tXCI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJraW5kXCI6IFwiRG9ja2VySW1hZ2VcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiZmFicmljOC9vcGVuc2hpZnQtczJpLWplbmtpbnMtdHJpZ2dlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBcImVudlwiOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIkJBU0VfVVJJXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZhbHVlXCI6IGplbmtpbnNVcmxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiSk9CX05BTUVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmFsdWVcIjogam9iTmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgJHNjb3BlLiR3YXRjaCgnZW50aXR5LnNwZWMuc291cmNlLmdpdC51cmknLCAodmFsKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXZhbCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB2YXIgbGFzdEJpdCA9IHZhbC5tYXRjaCgvW15cXC9dKyQvKVswXTtcclxuICAgICAgICAgIGlmIChsYXN0Qml0KSB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lID0gbGFzdEJpdC5yZXBsYWNlKC9cXC5naXQkLywgJycpO1xyXG4gICAgICAgICAgICBsb2cuZGVidWcoXCJuYW1lOiBcIiwgbmFtZSk7XHJcbiAgICAgICAgICAgIGlmICghQ29yZS5pc0JsYW5rKG5hbWUpIFxyXG4gICAgICAgICAgICAgICYmIENvcmUuaXNCbGFuayhDb3JlLnBhdGhHZXQoJHNjb3BlLmVudGl0eSwgWydtZXRhZGF0YScsICduYW1lJ10pKSkge1xyXG4gICAgICAgICAgICAgIENvcmUucGF0aFNldCgkc2NvcGUuZW50aXR5LCBbJ21ldGFkYXRhJywgJ25hbWUnXSwgbmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG4gICAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RTZXR0aW5nc0JyZWFkY3J1bWJzKCRzY29wZS5wcm9qZWN0SWQpO1xyXG4gICAgICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdFN1Yk5hdkJhcnMoJHNjb3BlLnByb2plY3RJZCk7XHJcbiAgICAgICAgJHNjb3BlLnRhYnMgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdFNldHRpbmdzU3ViTmF2QmFycygkc2NvcGUucHJvamVjdElkKTtcclxuXHJcbiAgICAgICAgd2F0Y2goJHNjb3BlLCAkZWxlbWVudCwgXCJzZWNyZXRzXCIsICRzY29wZS5uYW1lc3BhY2UsIG9uU2VjcmV0cyk7XHJcblxyXG5cclxuICAgICAgICAkc2NvcGUuYnVpbGRDb25maWdDbGllbnQgPSBLOFNDbGllbnRGYWN0b3J5LmNyZWF0ZShcImJ1aWxkY29uZmlnc1wiLCAkc2NvcGUubmFtZXNwYWNlKTtcclxuXHJcbiAgICAgICAgJGVsZW1lbnQub24oJyRkZXN0cm95JywgKCkgPT4ge1xyXG4gICAgICAgICAgJHNjb3BlLiRkZXN0cm95KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJHNjb3BlLiRvbignJGRlc3Ryb3knLCAoKSA9PiB7XHJcbiAgICAgICAgICBLOFNDbGllbnRGYWN0b3J5LmRlc3Ryb3koJHNjb3BlLmJ1aWxkQ29uZmlnQ2xpZW50KTtcclxuICAgICAgICB9KTtcclxuXHJcbi8qXHJcbiAgICAgICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiovXHJcbiAgICAgICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xyXG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkc2NvcGUuc2F2ZSA9ICgpID0+IHtcclxuICAgICAgICAgIGxvZy5pbmZvKFwiU2F2aW5nIVwiKTtcclxuXHJcblxyXG4gICAgICAgICAgdmFyIGVudGl0eSA9ICRzY29wZS5lbnRpdHk7XHJcbiAgICAgICAgICB2YXIgc3BlYyA9IChlbnRpdHkgfHwge30pLnNwZWMgfHwge307XHJcblxyXG4gICAgICAgICAgLy8gVE9ETyB1cGRhdGUgdGhlIGplbmtpbnMgam9iIG5hbWUhXHJcblxyXG4gICAgICAgICAgLy8gbGV0cyBkZWxldGUgbG90cyBvZiBjcnVmdFxyXG4gICAgICAgICAgdmFyIHN0cmF0ZWd5ID0gc3BlYy5zdHJhdGVneSB8fCB7fTtcclxuICAgICAgICAgIGRlbGV0ZSBzdHJhdGVneVtcImRvY2tlclN0cmF0ZWd5XCJdO1xyXG4gICAgICAgICAgZGVsZXRlIHN0cmF0ZWd5W1wic291cmNlU3RyYXRlZ3lcIl07XHJcblxyXG4gICAgICAgICAgZGVsZXRlIHNwZWNbXCJyZXZpc2lvblwiXTtcclxuICAgICAgICAgIGRlbGV0ZSBzcGVjW1wib3V0cHV0XCJdO1xyXG4gICAgICAgICAgZGVsZXRlIHNwZWNbXCJyZXNvdXJjZXNcIl07XHJcblxyXG4gICAgICAgICAgdmFyIHN0cmF0ZWd5UHVsbFNlY3JldE5hbWUgPSBDb3JlLnBhdGhHZXQoc3BlYywgW1wic3RyYXRlZ3lcIiwgXCJjdXN0b21TdHJhdGVneVwiLCBcInB1bGxTZWNyZXRcIiwgXCJuYW1lXCJdKTtcclxuICAgICAgICAgIHZhciBzb3VyY2VTZWNyZXROYW1lID0gQ29yZS5wYXRoR2V0KHNwZWMsIFtcInNvdXJjZVwiLCBcInNvdXJjZVNlY3JldFwiLCBcIm5hbWVcIl0pO1xyXG4gICAgICAgICAgbG9nLmluZm8oXCJzb3VyY2VTZWNyZXROYW1lOiBcIiArIHNvdXJjZVNlY3JldE5hbWUpO1xyXG4gICAgICAgICAgbG9nLmluZm8oXCJzdHJhdGVneVB1bGxTZWNyZXROYW1lOiBcIiArIHN0cmF0ZWd5UHVsbFNlY3JldE5hbWUpO1xyXG4gICAgICAgICAgaWYgKCFzdHJhdGVneVB1bGxTZWNyZXROYW1lICYmIHNvdXJjZVNlY3JldE5hbWUpIHtcclxuICAgICAgICAgICAgQ29yZS5wYXRoU2V0KHNwZWMsIFtcInN0cmF0ZWd5XCIsIFwiY3VzdG9tU3RyYXRlZ3lcIiwgXCJwdWxsU2VjcmV0XCIsIFwibmFtZVwiXSwgc291cmNlU2VjcmV0TmFtZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4vKlxyXG4gICAgICAgICAgLy8gVE9ETyBoYWNrIHVudGlsIHRoZSBwdXQgZGVhbHMgd2l0aCB1cGRhdGVzXHJcbiAgICAgICAgICB2YXIgbWV0YWRhdGEgPSBlbnRpdHkubWV0YWRhdGE7XHJcbiAgICAgICAgICBpZiAobWV0YWRhdGEpIHtcclxuICAgICAgICAgICAgZGVsZXRlIG1ldGFkYXRhW1wicmVzb3VyY2VWZXJzaW9uXCJdO1xyXG4gICAgICAgICAgfVxyXG4qL1xyXG5cclxuICAgICAgICAgIGxvZy5pbmZvKGFuZ3VsYXIudG9Kc29uKGVudGl0eSwgdHJ1ZSkpO1xyXG5cclxuICAgICAgICAgICRzY29wZS5idWlsZENvbmZpZ0NsaWVudC5wdXQoZW50aXR5LCAob2JqKSA9PiB7XHJcbiAgICAgICAgICAgIGxvZy5pbmZvKFwiYnVpbGQgY29uZmlnIGNyZWF0ZWQhXCIpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGxpbmsgPSBEZXZlbG9wZXIucHJvamVjdFNlY3JldHNMaW5rKCRzY29wZS5uYW1lc3BhY2UsIGdldE5hbWUoZW50aXR5KSk7XHJcbiAgICAgICAgICAgIGlmIChsaW5rKSB7XHJcbiAgICAgICAgICAgICAgbG9nLmluZm8oXCJOYXZpZ2F0aW5nIHRvOiBcIisgbGluayk7XHJcbiAgICAgICAgICAgICAgJGxvY2F0aW9uLnBhdGgobGluayk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbG9nLndhcm4oXCJDb3VsZCBub3QgZmluZCB0aGUgZWRpdCBwaXBlbGluZSBsaW5rIVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB1cGRhdGVEYXRhKCk7XHJcblxyXG5cclxuICAgICAgICB2YXIgamVua2luc1VybCA9IERldmVsb3Blci5qZW5raW5zTGluaygpO1xyXG4gICAgICAgIHZhciBqb2JOYW1lID0gXCJcIjtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcclxuICAgICAgICAgICRzY29wZS5pdGVtID0gbnVsbDtcclxuICAgICAgICAgIGlmICgkc2NvcGUuaWQpIHtcclxuICAgICAgICAgICAgdmFyIHVybCA9IGJ1aWxkQ29uZmlnUmVzdFVybCgkc2NvcGUuaWQpO1xyXG4gICAgICAgICAgICAkaHR0cC5nZXQodXJsKS5cclxuICAgICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgJHNjb3BlLmVudGl0eSA9IGRhdGE7XHJcblxyXG4gICAgICAgICAgICAgICAgICB2YXIgYnVpbGRDb25maWcgPSBhbmd1bGFyLmNvcHkoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgIHZhciBzb3J0ZWRCdWlsZHMgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICBLdWJlcm5ldGVzLmVucmljaEJ1aWxkQ29uZmlnKGJ1aWxkQ29uZmlnLCBzb3J0ZWRCdWlsZHMpO1xyXG4gICAgICAgICAgICAgICAgICAkc2NvcGUuYnVpbGRDb25maWcgPSBidWlsZENvbmZpZztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICRzY29wZS5zcGVjID0gKCRzY29wZS5lbnRpdHkgfHwge30pLnNwZWMgfHwge307XHJcbiAgICAgICAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gbGV0cyB1cGRhdGUgdGhlIHRhYnNcclxuICAgICAgICAgICAgICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdFN1Yk5hdkJhcnMoJHNjb3BlLnByb2plY3RJZCwgbnVsbCwgJHNjb3BlKTtcclxuICAgICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgICAgICAgfSkuXHJcbiAgICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgJHNjb3BlLnNwZWMgPSAkc2NvcGUuZW50aXR5LnNwZWM7XHJcbiAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBvblNlY3JldHMoc2VjcmV0cykge1xyXG4gICAgICAgICAgdmFyIGFycmF5ID0gW107XHJcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goc2VjcmV0cywgKHNlY3JldCkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgbmFtZSA9IGdldE5hbWUoc2VjcmV0KTtcclxuICAgICAgICAgICAgaWYgKG5hbWUpIHtcclxuICAgICAgICAgICAgICBhcnJheS5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBuYW1lLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IG5hbWUsXHJcbiAgICAgICAgICAgICAgICBcImF0dHJpYnV0ZXNcIjoge1xyXG4gICAgICAgICAgICAgICAgICBcInRpdGxlXCI6IG5hbWVcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAkc2VjcmV0OiBzZWNyZXRcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICAkc2NvcGUuc2VjcmV0cyA9IF8uc29ydEJ5KGFycmF5LCBcImxhYmVsXCIpO1xyXG5cclxuICAgICAgICAgIHZhciBzcGVjU291cmNlU2VjcmV0TmFtZVBhdGggPSBbJ3NwZWMnLCAnc291cmNlJywgJ3NvdXJjZVNlY3JldCcsICduYW1lJ107XHJcbiAgICAgICAgICBpZiAoJHNjb3BlLmVudGl0eSAmJiAhQ29yZS5wYXRoR2V0KCRzY29wZS5lbnRpdHksIHNwZWNTb3VyY2VTZWNyZXROYW1lUGF0aCkpIHtcclxuICAgICAgICAgICAgdmFyIGRlZmF1bHRTZWNyZXROYW1lID0gZmluZERlZmF1bHRJbXBvcnRTZWNyZXROYW1lKHNlY3JldHMpO1xyXG4gICAgICAgICAgICBDb3JlLnBhdGhTZXQoJHNjb3BlLmVudGl0eSwgc3BlY1NvdXJjZVNlY3JldE5hbWVQYXRoLCBkZWZhdWx0U2VjcmV0TmFtZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBmaW5kRGVmYXVsdEltcG9ydFNlY3JldE5hbWUoc2VjcmV0cykge1xyXG4gICAgICAgICAgdmFyIGFuc3dlciA9IG51bGw7XHJcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goc2VjcmV0cywgKHNlY3JldCkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgbmFtZSA9IGdldE5hbWUoc2VjcmV0KTtcclxuICAgICAgICAgICAgaWYgKCFhbnN3ZXIgJiYgbmFtZSAmJiBuYW1lLnN0YXJ0c1dpdGgoXCJqZW5raW5zLWxvZ2luXCIpKSB7XHJcbiAgICAgICAgICAgICAgYW5zd2VyID0gbmFtZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBpZiAoIWFuc3dlcikge1xyXG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goc2VjcmV0cywgKHNlY3JldCkgPT4ge1xyXG4gICAgICAgICAgICAgIHZhciBuYW1lID0gZ2V0TmFtZShzZWNyZXQpO1xyXG4gICAgICAgICAgICAgIGlmICghYW5zd2VyICYmIG5hbWUgJiYgbmFtZS5zdGFydHNXaXRoKFwiamVua2lucy10b2tlblwiKSkge1xyXG4gICAgICAgICAgICAgICAgYW5zd2VyID0gbmFtZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGFuc3dlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN3aXRjaCAobW9kZSkge1xyXG4gICAgICAgICAgY2FzZSAnY3JlYXRlJzpcclxuICAgICAgICAgICAgZGVsZXRlIHNwZWNDb25maWcudGFicztcclxuICAgICAgICAgICAgXy5mb3JJbihidWlsZFNvdXJjZS5wcm9wZXJ0aWVzLCAocHJvcGVydHk6YW55LCBuYW1lOnN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChuYW1lICE9PSAnZ2l0Jykge1xyXG4gICAgICAgICAgICAgICAgbG9nLmluZm8oXCJIaWRpbmcgcHJvcGVydHk6IFwiLCBuYW1lKTtcclxuICAgICAgICAgICAgICAgIHByb3BlcnR5LmhpZGRlbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgXy5mb3JJbihnaXRCdWlsZFNvdXJjZS5wcm9wZXJ0aWVzLCAocHJvcGVydHk6YW55LCBuYW1lOnN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChuYW1lICE9PSAndXJpJykge1xyXG4gICAgICAgICAgICAgICAgbG9nLmluZm8oXCJIaWRpbmcgcHJvcGVydHk6IFwiLCBuYW1lKTtcclxuICAgICAgICAgICAgICAgIHByb3BlcnR5LmhpZGRlbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHByb3BlcnR5LmxhYmVsID0gXCJHaXQgVVJMXCI7XHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eVsnaW5wdXQtYXR0cmlidXRlcyddID0ge1xyXG4gICAgICAgICAgICAgICAgICAncmVxdWlyZWQnOiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTsgXHJcbiAgICAgICAgICAgIF8uZm9ySW4oc3BlY0NvbmZpZy5wcm9wZXJ0aWVzLCAocHJvcGVydHk6YW55LCBuYW1lOnN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChuYW1lICE9PSAnc291cmNlJykge1xyXG4gICAgICAgICAgICAgICAgbG9nLmluZm8oXCJIaWRpbmcgcHJvcGVydHk6IFwiLCBuYW1lKTtcclxuICAgICAgICAgICAgICAgIHByb3BlcnR5LmhpZGRlbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlICdlZGl0JzpcclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAkc2NvcGUuc3BlY0NvbmZpZyA9IHNwZWNDb25maWc7XHJcbiAgfSk7XHJcblxyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XHJcblxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcblxyXG4gIGV4cG9ydCB2YXIgQnVpbGRDb25maWdzQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJCdWlsZENvbmZpZ3NDb250cm9sbGVyXCIsIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIiRkaWFsb2dcIiwgXCIkd2luZG93XCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkbG9jYXRpb25cIiwgXCJsb2NhbFN0b3JhZ2VcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxyXG4gICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCAkZGlhbG9nLCAkd2luZG93LCAkdGVtcGxhdGVDYWNoZSwgJHJvdXRlUGFyYW1zLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgbG9jYWxTdG9yYWdlLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcclxuXHJcbiAgICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xyXG4gICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcblxyXG4gICAgICAkc2NvcGUudGFibGVDb25maWcgPSB7XHJcbiAgICAgICAgZGF0YTogJ21vZGVsLmJ1aWxkY29uZmlncycsXHJcbiAgICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxyXG4gICAgICAgIGVuYWJsZVJvd0NsaWNrU2VsZWN0aW9uOiBmYWxzZSxcclxuICAgICAgICBtdWx0aVNlbGVjdDogdHJ1ZSxcclxuICAgICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcclxuICAgICAgICBmaWx0ZXJPcHRpb25zOiB7XHJcbiAgICAgICAgICBmaWx0ZXJUZXh0OiAkbG9jYXRpb24uc2VhcmNoKClbXCJxXCJdIHx8ICcnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb2x1bW5EZWZzOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnbWV0YWRhdGEubmFtZScsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTmFtZScsXHJcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiYnVpbGRDb25maWdMaW5rVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgICAgfSxcclxuLypcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6ICdzcGVjLnNvdXJjZS50eXBlJyxcclxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdTb3VyY2UnXHJcbiAgICAgICAgICB9LFxyXG4qL1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMuc291cmNlLmdpdC51cmknLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1JlcG9zaXRvcnknXHJcbiAgICAgICAgICB9LFxyXG4vKlxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMuc3RyYXRlZ3kudHlwZScsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnU3RyYXRlZ3knXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMuc3RyYXRlZ3kuc3RpU3RyYXRlZ3kuaW1hZ2UnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1NvdXJjZSBJbWFnZSdcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnc3BlYy5vdXRwdXQuaW1hZ2VUYWcnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ091dHB1dCBJbWFnZSdcclxuICAgICAgICAgIH0sXHJcbiovXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnJGZhYnJpYzhDb2RlVmlld3MnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0NvZGUnLFxyXG4gICAgICAgICAgICB3aWR0aDogXCIqKipcIixcclxuICAgICAgICAgICAgbWluV2lkdGg6IDUwMCxcclxuICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJidWlsZENvbmZpZ0NvZGVWaWV3c1RlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnJGZhYnJpYzhCdWlsZFZpZXdzJyxcclxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdCdWlsZHMnLFxyXG4gICAgICAgICAgICB3aWR0aDogXCIqKipcIixcclxuICAgICAgICAgICAgbWluV2lkdGg6IDUwMCxcclxuICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJidWlsZENvbmZpZ0J1aWxkVmlld3NUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWVsZDogJyRmYWJyaWM4RW52aXJvbm1lbnRWaWV3cycsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnRW52aXJvbm1lbnRzJyxcclxuICAgICAgICAgICAgd2lkdGg6IFwiKioqXCIsXHJcbiAgICAgICAgICAgIG1pbldpZHRoOiA1MDAsXHJcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiYnVpbGRDb25maWdFbnZpcm9ubWVudFZpZXdzVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6ICckZmFicmljOFRlYW1WaWV3cycsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnUGVvcGxlJyxcclxuICAgICAgICAgICAgd2lkdGg6IFwiKioqXCIsXHJcbiAgICAgICAgICAgIG1pbldpZHRoOiA1MDAsXHJcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiYnVpbGRDb25maWdUZWFtVmlld3NUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG5cclxuICAgICAgLy8gVE9ET1xyXG4gICAgICAvLyAkc2NvcGUuaXNMb2dnZWRJbnRvR29ncyA9IEZvcmdlLmlzTG9nZ2VkSW50b0dvZ3M7XHJcblxyXG4gICAgICAkc2NvcGUuZGVsZXRlUHJvbXB0ID0gKHNlbGVjdGVkKSA9PiB7XHJcbiAgICAgICAgVUkubXVsdGlJdGVtQ29uZmlybUFjdGlvbkRpYWxvZyg8VUkuTXVsdGlJdGVtQ29uZmlybUFjdGlvbk9wdGlvbnM+e1xyXG4gICAgICAgICAgY29sbGVjdGlvbjogc2VsZWN0ZWQsXHJcbiAgICAgICAgICBpbmRleDogJyRuYW1lJyxcclxuICAgICAgICAgIG9uQ2xvc2U6IChyZXN1bHQ6Ym9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgZnVuY3Rpb24gZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIG5leHQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZUVudGl0eShuZXh0LCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRpdGxlOiAnRGVsZXRlIEJ1aWxkIENvbmZpZ3M/JyxcclxuICAgICAgICAgIGFjdGlvbjogJ1RoZSBmb2xsb3dpbmcgQnVpbGQgQ29uZmlncyB3aWxsIGJlIGRlbGV0ZWQ6JyxcclxuICAgICAgICAgIG9rVGV4dDogJ0RlbGV0ZScsXHJcbiAgICAgICAgICBva0NsYXNzOiAnYnRuLWRhbmdlcicsXHJcbiAgICAgICAgICBjdXN0b206IFwiVGhpcyBvcGVyYXRpb24gaXMgcGVybWFuZW50IG9uY2UgY29tcGxldGVkIVwiLFxyXG4gICAgICAgICAgY3VzdG9tQ2xhc3M6IFwiYWxlcnQgYWxlcnQtd2FybmluZ1wiXHJcbiAgICAgICAgfSkub3BlbigpO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgZnVuY3Rpb24gZGVsZXRlRW50aXR5KHNlbGVjdGlvbiwgbmV4dENhbGxiYWNrKSB7XHJcbiAgICAgICAgdmFyIG5hbWUgPSAoc2VsZWN0aW9uIHx8IHt9KS4kbmFtZTtcclxuICAgICAgICBpZiAobmFtZSkge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJBYm91dCB0byBkZWxldGUgYnVpbGQgY29uZmlnOiBcIiArIG5hbWUpO1xyXG4gICAgICAgICAgdmFyIHVybCA9IGJ1aWxkQ29uZmlnUmVzdFVybChuYW1lKTtcclxuICAgICAgICAgICRodHRwLmRlbGV0ZSh1cmwpLlxyXG4gICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgIG5leHRDYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9KS5cclxuICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gZGVsZXRlIGJ1aWxkIGNvbmZpZyBvbiBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwid2FybmluZzogbm8gbmFtZSBmb3Igc2VsZWN0aW9uOiBcIiArIGFuZ3VsYXIudG9Kc29uKHNlbGVjdGlvbikpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcclxuICAgICAgfVxyXG5cclxuICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgfV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgZXhwb3J0IHZhciBCdWlsZExvZ3NDb250cm9sbGVyID0gY29udHJvbGxlcihcIkJ1aWxkTG9nc0NvbnRyb2xsZXJcIixcclxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNTY2hlbWFcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXHJcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc1NjaGVtYSxcclxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XHJcblxyXG4gICAgICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xyXG4gICAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuICAgICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcclxuICAgICAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcclxuICAgICAgICAkc2NvcGUuY29uZmlnID0gS3ViZXJuZXRlc1NjaGVtYS5kZWZpbml0aW9ucy5vc19idWlsZF9CdWlsZDtcclxuXHJcbiAgICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG5cclxuICAgICAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICRzY29wZS5sb2dzVGV4dCA9IFwiTG9hZGluZyBsb2dzLi4uXCI7XHJcblxyXG4gICAgICAgIHVwZGF0ZURhdGEoKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcclxuICAgICAgICAgICRzY29wZS5pdGVtID0gbnVsbDtcclxuICAgICAgICAgIGlmICgkc2NvcGUuaWQpIHtcclxuICAgICAgICAgICAgdmFyIHVybCA9IGJ1aWxkUmVzdFVybCgkc2NvcGUuaWQpO1xyXG4gICAgICAgICAgICAkaHR0cC5nZXQodXJsKS5cclxuICAgICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgJHNjb3BlLmVudGl0eSA9IGVucmljaEJ1aWxkKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgICAgICB9KS5cclxuICAgICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB1cmwgPSBidWlsZExvZ3NSZXN0VXJsKCRzY29wZS5pZCk7XHJcbiAgICAgICAgICAgICRodHRwLmdldCh1cmwpLlxyXG4gICAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgJHNjb3BlLmxvZ3NUZXh0ID0gZGF0YTtcclxuICAgICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgICAgICAgfSkuXHJcbiAgICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgJHNjb3BlLmxvZ3NUZXh0ID0gXCJGYWlsZWQgdG8gbG9hZCBsb2dzIGZyb206IFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgc3RhdHVzOiBcIiArIHN0YXR1cztcclxuICAgICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgICAgICAgfSkuXHJcbiAgICAgICAgICAgICAgY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAkc2NvcGUubG9nc1RleHQgPSBcIkZhaWxlZCB0byBsb2FkIGxvZ3M6IFwiICsgYW5ndWxhci50b0pzb24oZXJyb3IsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBleHBvcnQgdmFyIEJ1aWxkc0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiQnVpbGRzQ29udHJvbGxlclwiLCBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCIkZGlhbG9nXCIsIFwiJHdpbmRvd1wiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGxvY2F0aW9uXCIsIFwibG9jYWxTdG9yYWdlXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcclxuICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgJGRpYWxvZywgJHdpbmRvdywgJHRlbXBsYXRlQ2FjaGUsICRyb3V0ZVBhcmFtcywgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsIGxvY2FsU3RvcmFnZSwgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XHJcblxyXG4gICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG4gICAgICAkc2NvcGUuYnVpbGRDb25maWdJZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xyXG5cclxuICAgICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgICRzY29wZS50YWJsZUNvbmZpZyA9IHtcclxuICAgICAgICBkYXRhOiAnbW9kZWwuYnVpbGRzJyxcclxuICAgICAgICBzaG93U2VsZWN0aW9uQ2hlY2tib3g6IHRydWUsXHJcbiAgICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxyXG4gICAgICAgIG11bHRpU2VsZWN0OiB0cnVlLFxyXG4gICAgICAgIHNlbGVjdGVkSXRlbXM6IFtdLFxyXG4gICAgICAgIGZpbHRlck9wdGlvbnM6IHtcclxuICAgICAgICAgIGZpbHRlclRleHQ6ICRsb2NhdGlvbi5zZWFyY2goKVtcInFcIl0gfHwgJydcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbHVtbkRlZnM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6ICdtZXRhZGF0YS5uYW1lJyxcclxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdOYW1lJyxcclxuICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJidWlsZExpbmtUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWVsZDogJyRjcmVhdGlvbkRhdGUnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1RpbWUnLFxyXG4gICAgICAgICAgICBkZWZhdWx0U29ydDogdHJ1ZSxcclxuICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJidWlsZFRpbWVUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWVsZDogJ3N0YXR1cycsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnU3RhdHVzJyxcclxuICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJidWlsZFN0YXR1c1RlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnJGxvZ3NMaW5rJyxcclxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdMb2dzJyxcclxuICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJidWlsZExvZ3NUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWVsZDogJyRwb2RMaW5rJyxcclxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdCdWlsZCBQb2QnLFxyXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImJ1aWxkUG9kVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgICAgfSxcclxuLypcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6ICdwYXJhbWV0ZXJzLnNvdXJjZS50eXBlJyxcclxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdTb3VyY2UnXHJcbiAgICAgICAgICB9LFxyXG4qL1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMuc291cmNlLmdpdC51cmknLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1JlcG9zaXRvcnknLFxyXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImJ1aWxkUmVwb3NpdG9yeVRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnc3BlYy5zdHJhdGVneS50eXBlJyxcclxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdTdHJhdGVneSdcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnc3BlYy5zdHJhdGVneS5zb3VyY2VTdHJhdGVneS5mcm9tLm5hbWUnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1NvdXJjZSBJbWFnZSdcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnc3BlYy5vdXRwdXQudG8ubmFtZScsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnT3V0cHV0IEltYWdlJ1xyXG4gICAgICAgICAgfV1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcclxuICAgICAgJHNjb3BlLmJyZWFkY3J1bWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKCRzY29wZS5idWlsZENvbmZpZ0lkKTtcclxuICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0U3ViTmF2QmFycygkc2NvcGUuYnVpbGRDb25maWdJZCwgbnVsbCwgJHNjb3BlKTtcclxuXHJcbiAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XHJcbiAgICAgICAgaWYgKCRzY29wZS5tb2RlbCkge1xyXG4gICAgICAgICAgdmFyIGJ1aWxkcyA9ICRzY29wZS5tb2RlbC5idWlsZHM7XHJcbiAgICAgICAgICB2YXIgYnVpbGRDb25maWdJZCA9ICRzY29wZS5idWlsZENvbmZpZ0lkO1xyXG5cclxuICAgICAgICAgIGVucmljaEJ1aWxkcyhidWlsZHMpO1xyXG4gICAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgIGlmIChidWlsZENvbmZpZ0lkKSB7XHJcbiAgICAgICAgICAgICRzY29wZS5idWlsZENvbmZpZyA9ICRzY29wZS5tb2RlbC5nZXRCdWlsZENvbmZpZyhidWlsZENvbmZpZ0lkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHVwZGF0ZURhdGEoKTtcclxuXHJcblxyXG4gICAgICAvKlxyXG4gICAgICAkc2NvcGUuJGtlZXBQb2xsaW5nID0gKCkgPT4ga2VlcFBvbGxpbmdNb2RlbDtcclxuICAgICAgJHNjb3BlLmZldGNoID0gUG9sbEhlbHBlcnMuc2V0dXBQb2xsaW5nKCRzY29wZSwgKG5leHQ6KCkgPT4gdm9pZCkgPT4ge1xyXG4gICAgICAgIHZhciB1cmwgPSBidWlsZHNSZXN0VVJMKCk7XHJcbiAgICAgICAgJGh0dHAuZ2V0KHVybCkuXHJcbiAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJnb3QgZGF0YSBcIiArIGFuZ3VsYXIudG9Kc29uKGRhdGEsIHRydWUpKTtcclxuICAgICAgICAgICAgICAkc2NvcGUuYnVpbGRzID0gZW5yaWNoQnVpbGRzKGRhdGEuaXRlbXMpO1xyXG4gICAgICAgICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKCRzY29wZS5tb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgJHNjb3BlLmJ1aWxkQ29uZmlnID0gJHNjb3BlLm1vZGVsLmdldEJ1aWxkQ29uZmlnKCRzY29wZS5idWlsZENvbmZpZ0lkKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgICAgbmV4dCgpO1xyXG4gICAgICAgICAgfSkuXHJcbiAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgICAgbmV4dCgpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgJHNjb3BlLmZldGNoKCk7XHJcbiAgICAgICovXHJcbiAgICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICAvLyBjb250cm9sbGVyIGZvciBjb25uZWN0aW5nIHRvIGEgcmVtb3RlIGNvbnRhaW5lciB2aWEgam9sb2tpYVxyXG4gIGV4cG9ydCB2YXIgQ29ubmVjdENvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiQ29ubmVjdENvbnRyb2xsZXJcIiwgW1xyXG4gICAgXCIkc2NvcGVcIiwgXCJsb2NhbFN0b3JhZ2VcIiwgXCJ1c2VyRGV0YWlsc1wiLCBcIkNvbm5lY3REaWFsb2dTZXJ2aWNlXCIsIFwiJGJyb3dzZXJcIixcclxuICAgICgkc2NvcGUsIGxvY2FsU3RvcmFnZSwgdXNlckRldGFpbHMsIENvbm5lY3REaWFsb2dTZXJ2aWNlLCAkYnJvd3NlcjpuZy5JQnJvd3NlclNlcnZpY2UpID0+IHtcclxuXHJcbiAgICAgICRzY29wZS5kb0Nvbm5lY3QgPSAoZW50aXR5KSA9PiB7XHJcbiAgICAgICAgdmFyIGNvbm5lY3RVcmw6YW55ID0gbmV3IFVSSSgpLnBhdGgoVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksICcvamF2YS9pbmRleC5odG1sJykpO1xyXG4gICAgICAgIHZhciByZXR1cm5UbyA9IG5ldyBVUkkoKS50b1N0cmluZygpO1xyXG4gICAgICAgIHZhciB0aXRsZSA9IGVudGl0eS5tZXRhZGF0YS5uYW1lIHx8ICdVbnRpdGxlZCBDb250YWluZXInO1xyXG4gICAgICAgIHZhciB0b2tlbiA9IHVzZXJEZXRhaWxzLnRva2VuIHx8ICcnO1xyXG4gICAgICAgIGNvbm5lY3RVcmwuaGFzaCh0b2tlbikucXVlcnkoe1xyXG4gICAgICAgICAgam9sb2tpYVVybDogZW50aXR5LiRqb2xva2lhVXJsLFxyXG4gICAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgICAgcmV0dXJuVG86IHJldHVyblRvXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbG9nLmRlYnVnKFwiQ29ubmVjdCBVUkk6IFwiLCBjb25uZWN0VXJsLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIHdpbmRvdy5vcGVuKGNvbm5lY3RVcmwudG9TdHJpbmcoKSk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgfV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgZXhwb3J0IHZhciBEZXBsb3ltZW50Q29uZmlnQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJEZXBsb3ltZW50Q29uZmlnQ29udHJvbGxlclwiLFxyXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcclxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxyXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcclxuXHJcbiAgICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG4gICAgICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xyXG4gICAgICAgICRzY29wZS5zY2hlbWEgPSBLdWJlcm5ldGVzU2NoZW1hO1xyXG4gICAgICAgICRzY29wZS5jb25maWcgPSBLdWJlcm5ldGVzU2NoZW1hLmRlZmluaXRpb25zLm9zX2RlcGxveV9EZXBsb3ltZW50Q29uZmlnO1xyXG5cclxuICAgICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcblxyXG4gICAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcclxuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdXBkYXRlRGF0YSgpO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xyXG4gICAgICAgICAgJHNjb3BlLml0ZW0gPSBudWxsO1xyXG4gICAgICAgICAgaWYgKCRzY29wZS5pZCkge1xyXG4gICAgICAgICAgICB2YXIgdXJsID0gZGVwbG95bWVudENvbmZpZ1Jlc3RVcmwoJHNjb3BlLmlkKTtcclxuICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXHJcbiAgICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICRzY29wZS5lbnRpdHkgPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICBlbnJpY2hEZXBsb3ltZW50Q29uZmlnKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgICAgICB9KS5cclxuICAgICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgZXhwb3J0IHZhciBEZXBsb3ltZW50Q29uZmlnc0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiRGVwbG95bWVudENvbmZpZ3NDb250cm9sbGVyXCIsIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIiRkaWFsb2dcIiwgXCIkd2luZG93XCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkbG9jYXRpb25cIiwgXCJsb2NhbFN0b3JhZ2VcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxyXG4gICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCAkZGlhbG9nLCAkd2luZG93LCAkdGVtcGxhdGVDYWNoZSwgJHJvdXRlUGFyYW1zLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgbG9jYWxTdG9yYWdlLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcclxuXHJcbiAgICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xyXG4gICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcbiAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgfSk7XHJcbiAgICAgICRzY29wZS5sYWJlbENsYXNzID0gY29udGFpbmVyTGFiZWxDbGFzcztcclxuXHJcbiAgICAgICRzY29wZS50YWJsZUNvbmZpZyA9IHtcclxuICAgICAgICBkYXRhOiAnZGVwbG95bWVudENvbmZpZ3MnLFxyXG4gICAgICAgIHNob3dTZWxlY3Rpb25DaGVja2JveDogdHJ1ZSxcclxuICAgICAgICBlbmFibGVSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXHJcbiAgICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsXHJcbiAgICAgICAgc2VsZWN0ZWRJdGVtczogW10sXHJcbiAgICAgICAgZmlsdGVyT3B0aW9uczoge1xyXG4gICAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29sdW1uRGVmczogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWVsZDogJ21ldGFkYXRhLm5hbWUnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ05hbWUnLFxyXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImRlcGxveW1lbnRDb25maWdMaW5rVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6ICdtZXRhZGF0YS5uYW1lc3BhY2UnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ05hbWVzcGFjZSdcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnJGltYWdlQ2hhbmdlUGFyYW1zLmF1dG9tYXRpYycsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnQXV0b21hdGljJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6ICckaW1hZ2VDaGFuZ2VQYXJhbXMuJGNvbnRhaW5lck5hbWVzJyxcclxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdDb250YWluZXIgTmFtZXMnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWVsZDogJyRpbWFnZUNoYW5nZVBhcmFtcy5mcm9tLm5hbWUnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0Zyb20gaW1hZ2UnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWVsZDogJyRpbWFnZUNoYW5nZVBhcmFtcy50YWcnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1RhZydcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAndGVtcGxhdGUuY29udHJvbGxlclRlbXBsYXRlLnBvZFRlbXBsYXRlLnRhZ3MnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0xhYmVscycsXHJcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiZGVwbG95bWVudENvbmZpZ0xhYmVsVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcclxuXHJcbiAgICAgICRzY29wZS5kZWxldGVQcm9tcHQgPSAoc2VsZWN0ZWQpID0+IHtcclxuICAgICAgICBVSS5tdWx0aUl0ZW1Db25maXJtQWN0aW9uRGlhbG9nKDxVSS5NdWx0aUl0ZW1Db25maXJtQWN0aW9uT3B0aW9ucz57XHJcbiAgICAgICAgICBjb2xsZWN0aW9uOiBzZWxlY3RlZCxcclxuICAgICAgICAgIGluZGV4OiAnJG5hbWUnLFxyXG4gICAgICAgICAgb25DbG9zZTogKHJlc3VsdDpib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICBmdW5jdGlvbiBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgbmV4dCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcclxuICAgICAgICAgICAgICAgICAgZGVsZXRlRW50aXR5KG5leHQsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdGl0bGU6ICdEZWxldGUgRGVwbG95bWVudD8nLFxyXG4gICAgICAgICAgYWN0aW9uOiAnVGhlIGZvbGxvd2luZyBEZXBsb3ltZW50cyB3aWxsIGJlIGRlbGV0ZWQ6JyxcclxuICAgICAgICAgIG9rVGV4dDogJ0RlbGV0ZScsXHJcbiAgICAgICAgICBva0NsYXNzOiAnYnRuLWRhbmdlcicsXHJcbiAgICAgICAgICBjdXN0b206IFwiVGhpcyBvcGVyYXRpb24gaXMgcGVybWFuZW50IG9uY2UgY29tcGxldGVkIVwiLFxyXG4gICAgICAgICAgY3VzdG9tQ2xhc3M6IFwiYWxlcnQgYWxlcnQtd2FybmluZ1wiXHJcbiAgICAgICAgfSkub3BlbigpO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgZnVuY3Rpb24gZGVsZXRlRW50aXR5KHNlbGVjdGlvbiwgbmV4dENhbGxiYWNrKSB7XHJcbiAgICAgICAgdmFyIG5hbWUgPSAoc2VsZWN0aW9uIHx8IHt9KS4kbmFtZTtcclxuICAgICAgICBpZiAobmFtZSkge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJBYm91dCB0byBkZWxldGUgZGVwbG95bWVudCBjb25maWc6IFwiICsgbmFtZSk7XHJcbiAgICAgICAgICB2YXIgdXJsID0gZGVwbG95bWVudENvbmZpZ1Jlc3RVcmwobmFtZSk7XHJcbiAgICAgICAgICAkaHR0cC5kZWxldGUodXJsKS5cclxuICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICBuZXh0Q2FsbGJhY2soKTtcclxuICAgICAgICAgICAgfSkuXHJcbiAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGRlbGV0ZSBkZXBsb3ltZW50IGNvbmZpZyBvbiBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwid2FybmluZzogbm8gbmFtZSBmb3Igc2VsZWN0aW9uOiBcIiArIGFuZ3VsYXIudG9Kc29uKHNlbGVjdGlvbikpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcclxuICAgICAgICB2YXIgdXJsID0gZGVwbG95bWVudENvbmZpZ3NSZXN0VVJMKCk7XHJcbiAgICAgICAgJGh0dHAuZ2V0KHVybCkuXHJcbiAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJnb3QgZGF0YSBcIiArIGFuZ3VsYXIudG9Kc29uKGRhdGEsIHRydWUpKTtcclxuICAgICAgICAgICAgICAkc2NvcGUuZGVwbG95bWVudENvbmZpZ3MgPSBlbnJpY2hEZXBsb3ltZW50Q29uZmlncyhkYXRhLml0ZW1zKTtcclxuICAgICAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSkuXHJcbiAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBleHBvcnQgdmFyIEV2ZW50c0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiRXZlbnRzQ29udHJvbGxlclwiLFxyXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1NlcnZpY2VzXCIsIFwiS3ViZXJuZXRlc1BvZHNcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXHJcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDogS3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU2VydmljZXM6bmcucmVzb3VyY2UuSVJlc291cmNlQ2xhc3M8YW55PiwgS3ViZXJuZXRlc1BvZHM6bmcucmVzb3VyY2UuSVJlc291cmNlQ2xhc3M8YW55PiwgS3ViZXJuZXRlc1N0YXRlLFxyXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcclxuXHJcbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuXHJcbiAgICBDb250cm9sbGVySGVscGVycy5iaW5kTW9kZWxUb1NlYXJjaFBhcmFtKCRzY29wZSwgJGxvY2F0aW9uLCAnbW9kZScsICdtb2RlJywgJ2xpc3QnKTtcclxuXHJcbiAgICAkc2NvcGUudGFibGVDb25maWcgPSB7XHJcbiAgICAgIGRhdGE6ICdtb2RlbC5ldmVudHMnLFxyXG4gICAgICBzaG93U2VsZWN0aW9uQ2hlY2tib3g6IHRydWUsXHJcbiAgICAgIGVuYWJsZVJvd0NsaWNrU2VsZWN0aW9uOiBmYWxzZSxcclxuICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsXHJcbiAgICAgIHNlbGVjdGVkSXRlbXM6IFtdLFxyXG4gICAgICBmaWx0ZXJPcHRpb25zOiB7XHJcbiAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xyXG4gICAgICB9LFxyXG4gICAgICBjb2x1bW5EZWZzOiBbXHJcbiAgICAgICAgeyBmaWVsZDogJyRmaXJzdFRpbWVzdGFtcCcsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ0ZpcnN0IFNlZW4nLFxyXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJmaXJzdFRpbWVzdGFtcFRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICB9LFxyXG4gICAgICAgIHsgZmllbGQ6ICckbGFzdFRpbWVzdGFtcCcsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ0xhc3QgU2VlbicsXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImxhc3RUaW1lc3RhbXBUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7IGZpZWxkOiAnY291bnQnLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdDb3VudCdcclxuICAgICAgICB9LFxyXG4gICAgICAgIHsgZmllbGQ6ICdpbnZvbHZlZE9iamVjdC5uYW1lJyxcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTmFtZScsXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImV2ZW50TmFtZVRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICB9LFxyXG4gICAgICAgIHsgZmllbGQ6ICdpbnZvbHZlZE9iamVjdC5raW5kJyxcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnS2luZCcsXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImV2ZW50S2luZFRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICB9LFxyXG4gICAgICAgIHsgZmllbGQ6ICdpbnZvbHZlZE9iamVjdC5maWVsZFBhdGgnLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdTdWJqZWN0J1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyBmaWVsZDogJ3JlYXNvbicsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ1JlYXNvbidcclxuICAgICAgICB9LFxyXG4gICAgICAgIHsgZmllbGQ6ICdzb3VyY2UnLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdTb3VyY2UnLFxyXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJldmVudFNvdXJjZVRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICB9LFxyXG4gICAgICAgIHsgZmllbGQ6ICdtZXNzYWdlJyxcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTWVzc2FnZSdcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH07XHJcblxyXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG4gIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzTW9kZWwudHNcIi8+XHJcblxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcblxyXG4gIGV4cG9ydCB2YXIgSG9zdENvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiSG9zdENvbnRyb2xsZXJcIixcclxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcclxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLFxyXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcclxuXHJcbiAgICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG4gICAgICAgICRzY29wZS5yYXdNb2RlbCA9IG51bGw7XHJcblxyXG4gICAgICAgICRzY29wZS5pdGVtQ29uZmlnID0ge1xyXG4gICAgICAgICAgcHJvcGVydGllczoge31cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcblxyXG4gICAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcclxuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJHNjb3BlLmZsaXBSYXcgPSAoKSA9PiB7XHJcbiAgICAgICAgICAkc2NvcGUucmF3TW9kZSA9ICEkc2NvcGUucmF3TW9kZTtcclxuICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdXBkYXRlRGF0YSgpO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xyXG4gICAgICAgICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XHJcbiAgICAgICAgICAkc2NvcGUuaXRlbSA9IG51bGw7XHJcbiAgICAgICAgICBpZiAoJHNjb3BlLmlkKSB7XHJcbiAgICAgICAgICAgIHZhciB1cmwgPSBVcmxIZWxwZXJzLmpvaW4oS3ViZXJuZXRlc0FwaVVSTCwgXCJub2Rlc1wiLCAkc2NvcGUuaWQpO1xyXG4gICAgICAgICAgICAkaHR0cC5nZXQodXJsKS5cclxuICAgICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgJHNjb3BlLml0ZW0gPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCRzY29wZS5pdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICRzY29wZS5yYXdNb2RlbCA9IHRvUmF3WWFtbCgkc2NvcGUuaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSkuXHJcbiAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgJHNjb3BlLnJhd01vZGVsID0gbnVsbDtcclxuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc01vZGVsLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwidXRpbEhlbHBlcnMudHNcIi8+XHJcblxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcblxyXG4gIGV4cG9ydCB2YXIgSG9zdHNDb250cm9sbGVyID0gY29udHJvbGxlcihcIkhvc3RzQ29udHJvbGxlclwiLCBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzUG9kc1wiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIlNlcnZpY2VSZWdpc3RyeVwiLCBcIiRkaWFsb2dcIiwgXCIkd2luZG93XCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkbG9jYXRpb25cIiwgXCJsb2NhbFN0b3JhZ2VcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxyXG4gICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOiBLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNQb2RzOm5nLklQcm9taXNlPG5nLnJlc291cmNlLklSZXNvdXJjZUNsYXNzPGFueT4+LCBLdWJlcm5ldGVzU3RhdGUsIFNlcnZpY2VSZWdpc3RyeSwgJGRpYWxvZywgJHdpbmRvdywgJHRlbXBsYXRlQ2FjaGUsICRyb3V0ZVBhcmFtcywgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsIGxvY2FsU3RvcmFnZSwgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XHJcblxyXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcbiAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xyXG4gICAgICBkYXRhOiAnbW9kZWwuaG9zdHMnLFxyXG4gICAgICBzaG93U2VsZWN0aW9uQ2hlY2tib3g6IGZhbHNlLFxyXG4gICAgICBlbmFibGVSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXHJcbiAgICAgIG11bHRpU2VsZWN0OiBmYWxzZSxcclxuICAgICAgc2VsZWN0ZWRJdGVtczogW10sXHJcbiAgICAgIGZpbHRlck9wdGlvbnM6IHtcclxuICAgICAgICBmaWx0ZXJUZXh0OiAkbG9jYXRpb24uc2VhcmNoKClbXCJxXCJdIHx8ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbHVtbkRlZnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaWVsZDogJ2lkJyxcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTmFtZScsXHJcbiAgICAgICAgICBkZWZhdWx0U29ydDogdHJ1ZSxcclxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiaWRUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaWVsZDogJ2hvc3RJUCcsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ0lQJyxcclxuICAgICAgICAgIGN1c3RvbVNvcnRGaWVsZDogKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIHVzZSBhIGN1c3RvbSBzb3J0IHRvIHNvcnQgaXAgYWRkcmVzc1xyXG4gICAgICAgICAgICByZXR1cm4gS3ViZXJuZXRlcy5zb3J0QnlQb2RJcChmaWVsZC5ob3N0SVApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyBmaWVsZDogJyRwb2RzTGluaycsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ1BvZHMnLFxyXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJwb2RDb3VudHNBbmRMaW5rVGVtcGxhdGUuaHRtbFwiKSxcclxuICAgICAgICAgIGN1c3RvbVNvcnRGaWVsZDogKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gY29uY2F0IGFsbCB0aGUgcG9kIGNvdW50ZXJzXHJcbiAgICAgICAgICAgIHZhciByZWFkeSA9IGZpZWxkLiRwb2RDb3VudGVycy5yZWFkeSB8fCAwO1xyXG4gICAgICAgICAgICB2YXIgdmFsaWQgPSBmaWVsZC4kcG9kQ291bnRlcnMudmFsaWQgfHwgMDtcclxuICAgICAgICAgICAgdmFyIHdhaXRpbmcgPSBmaWVsZC4kcG9kQ291bnRlcnMud2FpdGluZyB8fCAwO1xyXG4gICAgICAgICAgICB2YXIgZXJyb3IgPSBmaWVsZC4kcG9kQ291bnRlcnMuZXJyb3IgfHwgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHJlYWR5ICsgdmFsaWQgKyB3YWl0aW5nICsgZXJyb3I7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9O1xyXG5cclxuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcclxuICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgZXhwb3J0IHZhciBJbWFnZVJlcG9zaXRvcmllc0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiSW1hZ2VSZXBvc2l0b3JpZXNDb250cm9sbGVyXCIsIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIiRkaWFsb2dcIiwgXCIkd2luZG93XCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkbG9jYXRpb25cIiwgXCJsb2NhbFN0b3JhZ2VcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxyXG4gICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCAkZGlhbG9nLCAkd2luZG93LCAkdGVtcGxhdGVDYWNoZSwgJHJvdXRlUGFyYW1zLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgbG9jYWxTdG9yYWdlLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcclxuXHJcbiAgICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xyXG4gICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcbiAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICAkc2NvcGUudGFibGVDb25maWcgPSB7XHJcbiAgICAgICAgZGF0YTogJ2ltYWdlUmVwb3NpdG9yaWVzJyxcclxuICAgICAgICBzaG93U2VsZWN0aW9uQ2hlY2tib3g6IHRydWUsXHJcbiAgICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxyXG4gICAgICAgIG11bHRpU2VsZWN0OiB0cnVlLFxyXG4gICAgICAgIHNlbGVjdGVkSXRlbXM6IFtdLFxyXG4gICAgICAgIGZpbHRlck9wdGlvbnM6IHtcclxuICAgICAgICAgIGZpbHRlclRleHQ6ICRsb2NhdGlvbi5zZWFyY2goKVtcInFcIl0gfHwgJydcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbHVtbkRlZnM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6ICdtZXRhZGF0YS5uYW1lJyxcclxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdOYW1lJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6ICdtZXRhZGF0YS5uYW1lc3BhY2UnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ05hbWVzcGFjZSdcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnc3RhdHVzLmRvY2tlckltYWdlUmVwb3NpdG9yeScsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnRG9ja2VyIFJlZ2lzdHJ5J1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6ICd0YWdzJyxcclxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdUYWdzJyxcclxuICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoJ2ltYWdlUmVnaXN0cnlMYWJlbFRlbXBsYXRlLmh0bWwnKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIHZhciBsYWJlbENvbG9ycyA9IHtcclxuICAgICAgICAncHJvZCc6ICdiYWNrZ3JvdW5kLWJsdWUnLFxyXG4gICAgICAgICd2YWxpZCc6ICdiYWNrZ3JvdW5kLWxpZ2h0LWdyZWVuJyxcclxuICAgICAgICAndGVzdCc6ICdiYWNrZ3JvdW5kLWxpZ2h0LWdyZXknXHJcbiAgICAgIH07XHJcbiAgICAgICRzY29wZS5sYWJlbENsYXNzID0gKGxhYmVsVHlwZTpzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAoIShsYWJlbFR5cGUgaW4gbGFiZWxDb2xvcnMpKSB7XHJcbiAgICAgICAgICByZXR1cm4gJ21vdXNlLXBvaW50ZXInO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHJldHVybiBsYWJlbENvbG9yc1tsYWJlbFR5cGVdICsgJyBtb3VzZS1wb2ludGVyJztcclxuICAgICAgfVxyXG5cclxuICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG5cclxuICAgICAgJHNjb3BlLmRlbGV0ZVByb21wdCA9IChzZWxlY3RlZCkgPT4ge1xyXG4gICAgICAgIFVJLm11bHRpSXRlbUNvbmZpcm1BY3Rpb25EaWFsb2coPFVJLk11bHRpSXRlbUNvbmZpcm1BY3Rpb25PcHRpb25zPntcclxuICAgICAgICAgIGNvbGxlY3Rpb246IHNlbGVjdGVkLFxyXG4gICAgICAgICAgaW5kZXg6ICckbmFtZScsXHJcbiAgICAgICAgICBvbkNsb3NlOiAocmVzdWx0OmJvb2xlYW4pID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBuZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xyXG4gICAgICAgICAgICAgICAgICBkZWxldGVFbnRpdHkobmV4dCwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0aXRsZTogJ0RlbGV0ZSBJbWFnZSBSZXBvc2l0b3J5PycsXHJcbiAgICAgICAgICBhY3Rpb246ICdUaGUgZm9sbG93aW5nIEltYWdlIFJlcG9zaXRvcmllcyB3aWxsIGJlIGRlbGV0ZWQ6JyxcclxuICAgICAgICAgIG9rVGV4dDogJ0RlbGV0ZScsXHJcbiAgICAgICAgICBva0NsYXNzOiAnYnRuLWRhbmdlcicsXHJcbiAgICAgICAgICBjdXN0b206IFwiVGhpcyBvcGVyYXRpb24gaXMgcGVybWFuZW50IG9uY2UgY29tcGxldGVkIVwiLFxyXG4gICAgICAgICAgY3VzdG9tQ2xhc3M6IFwiYWxlcnQgYWxlcnQtd2FybmluZ1wiXHJcbiAgICAgICAgfSkub3BlbigpO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgZnVuY3Rpb24gZGVsZXRlRW50aXR5KHNlbGVjdGlvbiwgbmV4dENhbGxiYWNrKSB7XHJcbiAgICAgICAgdmFyIG5hbWUgPSAoc2VsZWN0aW9uIHx8IHt9KS4kbmFtZTtcclxuICAgICAgICBpZiAobmFtZSkge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJBYm91dCB0byBkZWxldGUgaW1hZ2UgcmVwb3NpdG9yeTogXCIgKyBuYW1lKTtcclxuICAgICAgICAgIHZhciB1cmwgPSBpbWFnZVJlcG9zaXRvcnlSZXN0VXJsKG5hbWUpO1xyXG4gICAgICAgICAgJGh0dHAuZGVsZXRlKHVybCkuXHJcbiAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgbmV4dENhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH0pLlxyXG4gICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBkZWxldGUgaW1hZ2UgcmVwb3NpdG9yeSBvbiBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwid2FybmluZzogbm8gbmFtZSBmb3Igc2VsZWN0aW9uOiBcIiArIGFuZ3VsYXIudG9Kc29uKHNlbGVjdGlvbikpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcclxuICAgICAgICB2YXIgdXJsID0gaW1hZ2VSZXBvc2l0b3JpZXNSZXN0VVJMKCk7XHJcbiAgICAgICAgJGh0dHAuZ2V0KHVybCkuXHJcbiAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJnb3QgZGF0YSBcIiArIGFuZ3VsYXIudG9Kc29uKGRhdGEsIHRydWUpKTtcclxuICAgICAgICAgICAgICAkc2NvcGUuaW1hZ2VSZXBvc2l0b3JpZXMgPSBlbnJpY2hJbWFnZVJlcG9zaXRvcmllcyhkYXRhLml0ZW1zKTtcclxuICAgICAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSkuXHJcbiAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdFN1Yk5hdkJhcigkc2NvcGUsIHRhYk5hbWUsIG5ld1N1YlRhYkxhYmVsKSB7XHJcbiAgICB2YXIgZm91bmRUYWIgPSBudWxsO1xyXG4gICAgYW5ndWxhci5mb3JFYWNoKCRzY29wZS5zdWJUYWJDb25maWcsICh0YWIpID0+IHtcclxuICAgICAgaWYgKHRhYk5hbWUgPT09IHRhYi5sYWJlbCB8fCB0YWJOYW1lID09PSB0YWIuaWQpIHtcclxuICAgICAgICBmb3VuZFRhYiA9IHRhYjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB2YXIgYnJlYWRjcnVtYkNvbmZpZyA9ICRzY29wZS5icmVhZGNydW1iQ29uZmlnO1xyXG4gICAgaWYgKGZvdW5kVGFiICYmIGJyZWFkY3J1bWJDb25maWcpIHtcclxuICAgICAgYnJlYWRjcnVtYkNvbmZpZy5wdXNoKGZvdW5kVGFiKTtcclxuICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBsYWJlbDogbmV3U3ViVGFiTGFiZWxcclxuICAgICAgICB9XHJcbiAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG4gXHJcbiAgZXhwb3J0IHZhciBzY2hlbWEgPSBcclxuICB7XHJcbiAgICBcImlkXCI6IFwiaHR0cDovL2ZhYnJpYzguaW8vZmFicmljOC92Mi9TY2hlbWEjXCIsXHJcbiAgICBcIiRzY2hlbWFcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL3NjaGVtYSNcIixcclxuICAgIFwiZGVmaW5pdGlvbnNcIjoge1xyXG4gICAgICBcImFwaV9Sb290UGF0aHNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJwYXRoc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Sb290UGF0aHNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfQVdTRWxhc3RpY0Jsb2NrU3RvcmVWb2x1bWVTb3VyY2VcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJmc1R5cGVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImZpbGUgc3lzdGVtIHR5cGUgdG8gbW91bnRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicGFydGl0aW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicGFydGl0aW9uIG9uIHRoZSBkaXNrIHRvIG1vdW50IChlLmcuXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlYWRPbmx5XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmVhZC1vbmx5IGlmIHRydWVcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidm9sdW1lSURcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVuaXF1ZSBpZCBvZiB0aGUgUEQgcmVzb3VyY2UgaW4gQVdTOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS92b2x1bWVzLm1kI2F3c2VsYXN0aWNibG9ja3N0b3JlXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5BV1NFbGFzdGljQmxvY2tTdG9yZVZvbHVtZVNvdXJjZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19DYXBhYmlsaXRpZXNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhZGRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWRkZWQgY2FwYWJpbGl0aWVzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhZGRlZCBjYXBhYmlsaXRpZXNcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJkcm9wXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImRyb3BlZCBjYXBhYmlsaXRpZXNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImRyb3BlZCBjYXBhYmlsaXRpZXNcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ2FwYWJpbGl0aWVzXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX0NlcGhGU1ZvbHVtZVNvdXJjZVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcIm1vbml0b3JzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImEgY29sbGVjdGlvbiBvZiBDZXBoIG1vbml0b3JzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhIGNvbGxlY3Rpb24gb2YgQ2VwaCBtb25pdG9yc1wiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlYWRPbmx5XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ2VwaCBmcyB0byBiZSBtb3VudGVkIHdpdGggcmVhZC1vbmx5IHBlcm1pc3Npb25zXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInNlY3JldEZpbGVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBhdGggdG8gc2VjcmV0IGZvciByYWRvcyB1c2VyOyBkZWZhdWx0IGlzIC9ldGMvY2VwaC91c2VyLnNlY3JldDsgb3B0aW9uYWxcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic2VjcmV0UmVmXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xvY2FsT2JqZWN0UmVmZXJlbmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxvY2FsT2JqZWN0UmVmZXJlbmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInVzZXJcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJhZG9zIHVzZXIgbmFtZTsgZGVmYXVsdCBpcyBhZG1pbjsgb3B0aW9uYWxcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNlcGhGU1ZvbHVtZVNvdXJjZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19Db250YWluZXJcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcmdzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImNvbW1hbmQgYXJyYXk7IHRoZSBkb2NrZXIgaW1hZ2UncyBjbWQgaXMgdXNlZCBpZiB0aGlzIGlzIG5vdCBwcm92aWRlZDsgYXJndW1lbnRzIHRvIHRoZSBlbnRyeXBvaW50OyBjYW5ub3QgYmUgdXBkYXRlZDsgdmFyaWFibGUgcmVmZXJlbmNlcyAkKFZBUl9OQU1FKSBhcmUgZXhwYW5kZWQgdXNpbmcgdGhlIGNvbnRhaW5lcidzIGVudmlyb25tZW50IHZhcmlhYmxlczsgaWYgYSB2YXJpYWJsZSBjYW5ub3QgYmUgcmVzb2x2ZWRcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImNvbW1hbmQgYXJyYXk7IHRoZSBkb2NrZXIgaW1hZ2UncyBjbWQgaXMgdXNlZCBpZiB0aGlzIGlzIG5vdCBwcm92aWRlZDsgYXJndW1lbnRzIHRvIHRoZSBlbnRyeXBvaW50OyBjYW5ub3QgYmUgdXBkYXRlZDsgdmFyaWFibGUgcmVmZXJlbmNlcyAkKFZBUl9OQU1FKSBhcmUgZXhwYW5kZWQgdXNpbmcgdGhlIGNvbnRhaW5lcidzIGVudmlyb25tZW50IHZhcmlhYmxlczsgaWYgYSB2YXJpYWJsZSBjYW5ub3QgYmUgcmVzb2x2ZWRcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJjb21tYW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImVudHJ5cG9pbnQgYXJyYXk7IG5vdCBleGVjdXRlZCB3aXRoaW4gYSBzaGVsbDsgdGhlIGRvY2tlciBpbWFnZSdzIGVudHJ5cG9pbnQgaXMgdXNlZCBpZiB0aGlzIGlzIG5vdCBwcm92aWRlZDsgY2Fubm90IGJlIHVwZGF0ZWQ7IHZhcmlhYmxlIHJlZmVyZW5jZXMgJChWQVJfTkFNRSkgYXJlIGV4cGFuZGVkIHVzaW5nIHRoZSBjb250YWluZXIncyBlbnZpcm9ubWVudCB2YXJpYWJsZXM7IGlmIGEgdmFyaWFibGUgY2Fubm90IGJlIHJlc29sdmVkXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJlbnRyeXBvaW50IGFycmF5OyBub3QgZXhlY3V0ZWQgd2l0aGluIGEgc2hlbGw7IHRoZSBkb2NrZXIgaW1hZ2UncyBlbnRyeXBvaW50IGlzIHVzZWQgaWYgdGhpcyBpcyBub3QgcHJvdmlkZWQ7IGNhbm5vdCBiZSB1cGRhdGVkOyB2YXJpYWJsZSByZWZlcmVuY2VzICQoVkFSX05BTUUpIGFyZSBleHBhbmRlZCB1c2luZyB0aGUgY29udGFpbmVyJ3MgZW52aXJvbm1lbnQgdmFyaWFibGVzOyBpZiBhIHZhcmlhYmxlIGNhbm5vdCBiZSByZXNvbHZlZFwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImVudlwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgaW4gdGhlIGNvbnRhaW5lcjsgY2Fubm90IGJlIHVwZGF0ZWRcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0VudlZhclwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVudlZhclwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImltYWdlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEb2NrZXIgaW1hZ2UgbmFtZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvaW1hZ2VzLm1kXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImltYWdlUHVsbFBvbGljeVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaW1hZ2UgcHVsbCBwb2xpY3k7IG9uZSBvZiBBbHdheXNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibGlmZWN5Y2xlXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpZmVjeWNsZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaWZlY3ljbGVcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibGl2ZW5lc3NQcm9iZVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Qcm9iZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Qcm9iZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJuYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoZSBjb250YWluZXI7IG11c3QgYmUgYSBETlNfTEFCRUwgYW5kIHVuaXF1ZSB3aXRoaW4gdGhlIHBvZDsgY2Fubm90IGJlIHVwZGF0ZWRcIixcclxuICAgICAgICAgICAgXCJtYXhMZW5ndGhcIjogNjMsXHJcbiAgICAgICAgICAgIFwicGF0dGVyblwiOiBcIl5bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPyRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicG9ydHNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBwb3J0cyB0byBleHBvc2UgZnJvbSB0aGUgY29udGFpbmVyOyBjYW5ub3QgYmUgdXBkYXRlZFwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQ29udGFpbmVyUG9ydFwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclBvcnRcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZWFkaW5lc3NQcm9iZVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Qcm9iZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Qcm9iZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZXNvdXJjZXNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUmVzb3VyY2VSZXF1aXJlbWVudHNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VSZXF1aXJlbWVudHNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic2VjdXJpdHlDb250ZXh0XCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NlY3VyaXR5Q29udGV4dFwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZWN1cml0eUNvbnRleHRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3RkaW5cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJXaGV0aGVyIHRoaXMgY29udGFpbmVyIHNob3VsZCBhbGxvY2F0ZSBhIGJ1ZmZlciBmb3Igc3RkaW4gaW4gdGhlIGNvbnRhaW5lciBydW50aW1lOyBkZWZhdWx0IGlzIGZhbHNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInRlcm1pbmF0aW9uTWVzc2FnZVBhdGhcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBhdGggYXQgd2hpY2ggdGhlIGZpbGUgdG8gd2hpY2ggdGhlIGNvbnRhaW5lcidzIHRlcm1pbmF0aW9uIG1lc3NhZ2Ugd2lsbCBiZSB3cml0dGVuIGlzIG1vdW50ZWQgaW50byB0aGUgY29udGFpbmVyJ3MgZmlsZXN5c3RlbTsgbWVzc2FnZSB3cml0dGVuIGlzIGludGVuZGVkIHRvIGJlIGJyaWVmIGZpbmFsIHN0YXR1c1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ0dHlcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJXaGV0aGVyIHRoaXMgY29udGFpbmVyIHNob3VsZCBhbGxvY2F0ZSBhIFRUWSBmb3IgaXRzZWxmXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInZvbHVtZU1vdW50c1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJwb2Qgdm9sdW1lcyB0byBtb3VudCBpbnRvIHRoZSBjb250YWluZXIncyBmaWxlc3lzdGU7IGNhbm5vdCBiZSB1cGRhdGVkXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Wb2x1bWVNb3VudFwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlZvbHVtZU1vdW50XCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwid29ya2luZ0RpclwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiY29udGFpbmVyJ3Mgd29ya2luZyBkaXJlY3Rvcnk7IGRlZmF1bHRzIHRvIGltYWdlJ3MgZGVmYXVsdDsgY2Fubm90IGJlIHVwZGF0ZWRcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19Db250YWluZXJQb3J0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiY29udGFpbmVyUG9ydFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm51bWJlciBvZiBwb3J0IHRvIGV4cG9zZSBvbiB0aGUgcG9kJ3MgSVAgYWRkcmVzc1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJob3N0SVBcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImhvc3QgSVAgdG8gYmluZCB0aGUgcG9ydCB0b1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJob3N0UG9ydFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm51bWJlciBvZiBwb3J0IHRvIGV4cG9zZSBvbiB0aGUgaG9zdDsgbW9zdCBjb250YWluZXJzIGRvIG5vdCBuZWVkIHRoaXNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibmFtZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBmb3IgdGhlIHBvcnQgdGhhdCBjYW4gYmUgcmVmZXJyZWQgdG8gYnkgc2VydmljZXM7IG11c3QgYmUgYW4gSUFOQV9TVkNfTkFNRSBhbmQgdW5pcXVlIHdpdGhpbiB0aGUgcG9kXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInByb3RvY29sXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJwcm90b2NvbCBmb3IgcG9ydDsgbXVzdCBiZSBVRFAgb3IgVENQOyBUQ1AgaWYgdW5zcGVjaWZpZWRcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclBvcnRcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfQ29udGFpbmVyU3RhdGVcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJydW5uaW5nXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0NvbnRhaW5lclN0YXRlUnVubmluZ1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Db250YWluZXJTdGF0ZVJ1bm5pbmdcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidGVybWluYXRlZFwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Db250YWluZXJTdGF0ZVRlcm1pbmF0ZWRcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGFpbmVyU3RhdGVUZXJtaW5hdGVkXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIndhaXRpbmdcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQ29udGFpbmVyU3RhdGVXYWl0aW5nXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclN0YXRlV2FpdGluZ1wiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGFpbmVyU3RhdGVcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfQ29udGFpbmVyU3RhdGVSdW5uaW5nXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwic3RhcnRlZEF0XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aW1lIGF0IHdoaWNoIHRoZSBjb250YWluZXIgd2FzIGxhc3QgKHJlLSlzdGFydGVkXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Db250YWluZXJTdGF0ZVJ1bm5pbmdcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfQ29udGFpbmVyU3RhdGVUZXJtaW5hdGVkXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiY29udGFpbmVySURcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImNvbnRhaW5lcidzIElEIGluIHRoZSBmb3JtYXQgJ2RvY2tlcjovL1xcdTAwM2Njb250YWluZXJfaWRcXHUwMDNlJ1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJleGl0Q29kZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImV4aXQgc3RhdHVzIGZyb20gdGhlIGxhc3QgdGVybWluYXRpb24gb2YgdGhlIGNvbnRhaW5lclwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJmaW5pc2hlZEF0XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aW1lIGF0IHdoaWNoIHRoZSBjb250YWluZXIgbGFzdCB0ZXJtaW5hdGVkXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1lc3NhZ2VcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm1lc3NhZ2UgcmVnYXJkaW5nIHRoZSBsYXN0IHRlcm1pbmF0aW9uIG9mIHRoZSBjb250YWluZXJcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmVhc29uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCIoYnJpZWYpIHJlYXNvbiBmcm9tIHRoZSBsYXN0IHRlcm1pbmF0aW9uIG9mIHRoZSBjb250YWluZXJcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic2lnbmFsXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic2lnbmFsIGZyb20gdGhlIGxhc3QgdGVybWluYXRpb24gb2YgdGhlIGNvbnRhaW5lclwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzdGFydGVkQXRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRpbWUgYXQgd2hpY2ggcHJldmlvdXMgZXhlY3V0aW9uIG9mIHRoZSBjb250YWluZXIgc3RhcnRlZFwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGFpbmVyU3RhdGVUZXJtaW5hdGVkXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX0NvbnRhaW5lclN0YXRlV2FpdGluZ1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcInJlYXNvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiKGJyaWVmKSByZWFzb24gdGhlIGNvbnRhaW5lciBpcyBub3QgeWV0IHJ1bm5pbmdcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclN0YXRlV2FpdGluZ1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19Db250YWluZXJTdGF0dXNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJjb250YWluZXJJRFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiY29udGFpbmVyJ3MgSUQgaW4gdGhlIGZvcm1hdCAnZG9ja2VyOi8vXFx1MDAzY2NvbnRhaW5lcl9pZFxcdTAwM2UnOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9jb250YWluZXItZW52aXJvbm1lbnQubWQjY29udGFpbmVyLWluZm9ybWF0aW9uXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImltYWdlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpbWFnZSBvZiB0aGUgY29udGFpbmVyOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9pbWFnZXMubWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaW1hZ2VJRFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSUQgb2YgdGhlIGNvbnRhaW5lcidzIGltYWdlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImxhc3RTdGF0ZVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Db250YWluZXJTdGF0ZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Db250YWluZXJTdGF0ZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJuYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoZSBjb250YWluZXI7IG11c3QgYmUgYSBETlNfTEFCRUwgYW5kIHVuaXF1ZSB3aXRoaW4gdGhlIHBvZDsgY2Fubm90IGJlIHVwZGF0ZWRcIixcclxuICAgICAgICAgICAgXCJtYXhMZW5ndGhcIjogNjMsXHJcbiAgICAgICAgICAgIFwicGF0dGVyblwiOiBcIl5bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPyRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmVhZHlcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzcGVjaWZpZXMgd2hldGhlciB0aGUgY29udGFpbmVyIGhhcyBwYXNzZWQgaXRzIHJlYWRpbmVzcyBwcm9iZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZXN0YXJ0Q291bnRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBjb250YWluZXIgaGFzIGJlZW4gcmVzdGFydGVkXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInN0YXRlXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0NvbnRhaW5lclN0YXRlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclN0YXRlXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Db250YWluZXJTdGF0dXNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfRW1wdHlEaXJWb2x1bWVTb3VyY2VcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJtZWRpdW1cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInR5cGUgb2Ygc3RvcmFnZSB1c2VkIHRvIGJhY2sgdGhlIHZvbHVtZTsgbXVzdCBiZSBhbiBlbXB0eSBzdHJpbmcgKGRlZmF1bHQpIG9yIE1lbW9yeTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvdm9sdW1lcy5tZCNlbXB0eWRpclwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRW1wdHlEaXJWb2x1bWVTb3VyY2VcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfRW5kcG9pbnRBZGRyZXNzXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiaXBcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIklQIGFkZHJlc3Mgb2YgdGhlIGVuZHBvaW50XCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInRhcmdldFJlZlwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbmRwb2ludEFkZHJlc3NcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfRW5kcG9pbnRQb3J0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwibmFtZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBvZiB0aGlzIHBvcnRcIixcclxuICAgICAgICAgICAgXCJtYXhMZW5ndGhcIjogNjMsXHJcbiAgICAgICAgICAgIFwicGF0dGVyblwiOiBcIl5bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPyRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicG9ydFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBvcnQgbnVtYmVyIG9mIHRoZSBlbmRwb2ludFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJwcm90b2NvbFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicHJvdG9jb2wgZm9yIHRoaXMgcG9ydDsgbXVzdCBiZSBVRFAgb3IgVENQOyBUQ1AgaWYgdW5zcGVjaWZpZWRcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVuZHBvaW50UG9ydFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19FbmRwb2ludFN1YnNldFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFkZHJlc3Nlc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJUCBhZGRyZXNzZXMgd2hpY2ggb2ZmZXIgdGhlIHJlbGF0ZWQgcG9ydHNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0VuZHBvaW50QWRkcmVzc1wiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVuZHBvaW50QWRkcmVzc1wiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInBvcnRzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBvcnQgbnVtYmVycyBhdmFpbGFibGUgb24gdGhlIHJlbGF0ZWQgSVAgYWRkcmVzc2VzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FbmRwb2ludFBvcnRcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbmRwb2ludFBvcnRcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRW5kcG9pbnRTdWJzZXRcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfRW5kcG9pbnRzXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkVuZHBvaW50c1wiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzdWJzZXRzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNldHMgb2YgYWRkcmVzc2VzIGFuZCBwb3J0cyB0aGF0IGNvbXByaXNlIGEgc2VydmljZVwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW5kcG9pbnRTdWJzZXRcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbmRwb2ludFN1YnNldFwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbmRwb2ludHNcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfRW5kcG9pbnRzTGlzdFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgZW5kcG9pbnRzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FbmRwb2ludHNcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbmRwb2ludHNcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiRW5kcG9pbnRzTGlzdFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbmRwb2ludHNMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfRW52VmFyXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwibmFtZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGU7IG11c3QgYmUgYSBDX0lERU5USUZJRVJcIixcclxuICAgICAgICAgICAgXCJwYXR0ZXJuXCI6IFwiXltBLVphLXpfXVtBLVphLXowLTlfXSokXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInZhbHVlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ2YWx1ZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGU7IGRlZmF1bHRzIHRvIGVtcHR5IHN0cmluZzsgdmFyaWFibGUgcmVmZXJlbmNlcyAkKFZBUl9OQU1FKSBhcmUgZXhwYW5kZWQgdXNpbmcgdGhlIHByZXZpb3VzbHkgZGVmaW5lZCBlbnZpcm9ubWVudCB2YXJpYmxlcyBpbiB0aGUgY29udGFpbmVyIGFuZCBhbnkgc2VydmljZSBlbnZpcm9ubWVudCB2YXJpYWJsZXM7IGlmIGEgdmFyaWFibGUgY2Fubm90IGJlIHJlc29sdmVkXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInZhbHVlRnJvbVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FbnZWYXJTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRW52VmFyU291cmNlXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbnZWYXJcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfRW52VmFyU291cmNlXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiZmllbGRSZWZcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0RmllbGRTZWxlY3RvclwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RGaWVsZFNlbGVjdG9yXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbnZWYXJTb3VyY2VcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfRXZlbnRcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJjb3VudFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBudW1iZXIgb2YgdGltZXMgdGhpcyBldmVudCBoYXMgb2NjdXJyZWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZmlyc3RUaW1lc3RhbXBcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSB0aW1lIGF0IHdoaWNoIHRoZSBldmVudCB3YXMgZmlyc3QgcmVjb3JkZWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaW52b2x2ZWRPYmplY3RcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiRXZlbnRcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJsYXN0VGltZXN0YW1wXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgdGltZSBhdCB3aGljaCB0aGUgbW9zdCByZWNlbnQgb2NjdXJyZW5jZSBvZiB0aGlzIGV2ZW50IHdhcyByZWNvcmRlZFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXNzYWdlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgc3RhdHVzIG9mIHRoaXMgb3BlcmF0aW9uXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZWFzb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNob3J0XCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInNvdXJjZVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FdmVudFNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FdmVudFNvdXJjZVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRXZlbnRcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfRXZlbnRMaXN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBldmVudHNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0V2ZW50XCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRXZlbnRcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiRXZlbnRMaXN0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkV2ZW50TGlzdFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX0V2ZW50U291cmNlXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiY29tcG9uZW50XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJjb21wb25lbnQgdGhhdCBnZW5lcmF0ZWQgdGhlIGV2ZW50XCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImhvc3RcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIGhvc3Qgd2hlcmUgdGhlIGV2ZW50IGlzIGdlbmVyYXRlZFwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRXZlbnRTb3VyY2VcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfRXhlY0FjdGlvblwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImNvbW1hbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiY29tbWFuZCBsaW5lIHRvIGV4ZWN1dGUgaW5zaWRlIHRoZSBjb250YWluZXI7IHdvcmtpbmcgZGlyZWN0b3J5IGZvciB0aGUgY29tbWFuZCBpcyByb290ICgnLycpIGluIHRoZSBjb250YWluZXIncyBmaWxlIHN5c3RlbTsgdGhlIGNvbW1hbmQgaXMgZXhlYydkXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJjb21tYW5kIGxpbmUgdG8gZXhlY3V0ZSBpbnNpZGUgdGhlIGNvbnRhaW5lcjsgd29ya2luZyBkaXJlY3RvcnkgZm9yIHRoZSBjb21tYW5kIGlzIHJvb3QgKCcvJykgaW4gdGhlIGNvbnRhaW5lcidzIGZpbGUgc3lzdGVtOyB0aGUgY29tbWFuZCBpcyBleGVjJ2RcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRXhlY0FjdGlvblwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19HQ0VQZXJzaXN0ZW50RGlza1ZvbHVtZVNvdXJjZVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImZzVHlwZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZmlsZSBzeXN0ZW0gdHlwZSB0byBtb3VudFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJwYXJ0aXRpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJwYXJ0aXRpb24gb24gdGhlIGRpc2sgdG8gbW91bnQgKGUuZy5cIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicGROYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ1bmlxdWUgbmFtZSBvZiB0aGUgUEQgcmVzb3VyY2UgaW4gR0NFOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS92b2x1bWVzLm1kI2djZXBlcnNpc3RlbnRkaXNrXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlYWRPbmx5XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmVhZC1vbmx5IGlmIHRydWVcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkdDRVBlcnNpc3RlbnREaXNrVm9sdW1lU291cmNlXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX0dpdFJlcG9Wb2x1bWVTb3VyY2VcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJyZXBvc2l0b3J5XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyZXBvc2l0b3J5IFVSTFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZXZpc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiY29tbWl0IGhhc2ggZm9yIHRoZSBzcGVjaWZpZWQgcmV2aXNpb25cIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkdpdFJlcG9Wb2x1bWVTb3VyY2VcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfR2x1c3RlcmZzVm9sdW1lU291cmNlXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiZW5kcG9pbnRzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJnbHVzdGVyIGhvc3RzIGVuZHBvaW50cyBuYW1lOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL2dsdXN0ZXJmcy9SRUFETUUubWQjY3JlYXRlLWEtcG9kXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInBhdGhcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBhdGggdG8gZ2x1c3RlciB2b2x1bWU7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvZ2x1c3RlcmZzL1JFQURNRS5tZCNjcmVhdGUtYS1wb2RcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmVhZE9ubHlcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJnbHVzdGVyZnMgdm9sdW1lIHRvIGJlIG1vdW50ZWQgd2l0aCByZWFkLW9ubHkgcGVybWlzc2lvbnM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvZ2x1c3RlcmZzL1JFQURNRS5tZCNjcmVhdGUtYS1wb2RcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkdsdXN0ZXJmc1ZvbHVtZVNvdXJjZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19IVFRQR2V0QWN0aW9uXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiaG9zdFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaG9zdG5hbWUgdG8gY29ubmVjdCB0bzsgZGVmYXVsdHMgdG8gcG9kIElQXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInBhdGhcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBhdGggdG8gYWNjZXNzIG9uIHRoZSBIVFRQIHNlcnZlclwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJwb3J0XCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3V0aWxfSW50T3JTdHJpbmdcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSW50T3JTdHJpbmdcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic2NoZW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzY2hlbWUgdG8gY29ubmVjdCB3aXRoXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IVFRQR2V0QWN0aW9uXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX0hhbmRsZXJcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJleGVjXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0V4ZWNBY3Rpb25cIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRXhlY0FjdGlvblwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJodHRwR2V0XCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0hUVFBHZXRBY3Rpb25cIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSFRUUEdldEFjdGlvblwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ0Y3BTb2NrZXRcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfVENQU29ja2V0QWN0aW9uXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlRDUFNvY2tldEFjdGlvblwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFuZGxlclwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19Ib3N0UGF0aFZvbHVtZVNvdXJjZVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcInBhdGhcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBhdGggb2YgdGhlIGRpcmVjdG9yeSBvbiB0aGUgaG9zdDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvdm9sdW1lcy5tZCNob3N0cGF0aFwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSG9zdFBhdGhWb2x1bWVTb3VyY2VcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfSVNDU0lWb2x1bWVTb3VyY2VcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJmc1R5cGVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImZpbGUgc3lzdGVtIHR5cGUgdG8gbW91bnRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXFuXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpU0NTSSBRdWFsaWZpZWQgTmFtZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJsdW5cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpc2NzaSB0YXJnZXQgbHVuIG51bWJlclwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZWFkT25seVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlYWQtb25seSBpZiB0cnVlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInRhcmdldFBvcnRhbFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaVNDU0kgdGFyZ2V0IHBvcnRhbFwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSVNDU0lWb2x1bWVTb3VyY2VcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfTGlmZWN5Y2xlXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwicG9zdFN0YXJ0XCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0hhbmRsZXJcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFuZGxlclwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJwcmVTdG9wXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0hhbmRsZXJcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFuZGxlclwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlmZWN5Y2xlXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX0xpc3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIG9iamVjdHNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3J1bnRpbWVfUmF3RXh0ZW5zaW9uXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiTGlzdFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5CYXNlS3ViZXJuZXRlc0xpc3RcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19MaXN0TWV0YVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcInJlc291cmNlVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3RyaW5nIHRoYXQgaWRlbnRpZmllcyB0aGUgaW50ZXJuYWwgdmVyc2lvbiBvZiB0aGlzIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGJ5IGNsaWVudHMgdG8gZGV0ZXJtaW5lIHdoZW4gb2JqZWN0cyBoYXZlIGNoYW5nZWQ7IHBvcHVsYXRlZCBieSB0aGUgc3lzdGVtXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInNlbGZMaW5rXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJVUkwgZm9yIHRoZSBvYmplY3Q7IHBvcHVsYXRlZCBieSB0aGUgc3lzdGVtXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19Mb2FkQmFsYW5jZXJJbmdyZXNzXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiaG9zdG5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImhvc3RuYW1lIG9mIGluZ3Jlc3MgcG9pbnRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXBcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIklQIGFkZHJlc3Mgb2YgaW5ncmVzcyBwb2ludFwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTG9hZEJhbGFuY2VySW5ncmVzc1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19Mb2FkQmFsYW5jZXJTdGF0dXNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJpbmdyZXNzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxvYWQtYmFsYW5jZXIgaW5ncmVzcyBwb2ludHNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xvYWRCYWxhbmNlckluZ3Jlc3NcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Mb2FkQmFsYW5jZXJJbmdyZXNzXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxvYWRCYWxhbmNlclN0YXR1c1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19Mb2NhbE9iamVjdFJlZmVyZW5jZVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcIm5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIHJlZmVyZW50OyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9pZGVudGlmaWVycy5tZCNuYW1lc1wiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTG9jYWxPYmplY3RSZWZlcmVuY2VcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfTWV0YWRhdGFGaWxlXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiZmllbGRSZWZcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0RmllbGRTZWxlY3RvclwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RGaWVsZFNlbGVjdG9yXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIGNyZWF0ZWRcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk1ldGFkYXRhRmlsZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19NZXRhZGF0YVZvbHVtZVNvdXJjZVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgbWV0YWRhdGEgZmlsZXNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX01ldGFkYXRhRmlsZVwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk1ldGFkYXRhRmlsZVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5NZXRhZGF0YVZvbHVtZVNvdXJjZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19ORlNWb2x1bWVTb3VyY2VcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJwYXRoXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgcGF0aCB0aGF0IGlzIGV4cG9ydGVkIGJ5IHRoZSBORlMgc2VydmVyOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS92b2x1bWVzLm1kI25mc1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZWFkT25seVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImZvcmNlcyB0aGUgTkZTIGV4cG9ydCB0byBiZSBtb3VudGVkIHdpdGggcmVhZC1vbmx5IHBlcm1pc3Npb25zOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS92b2x1bWVzLm1kI25mc1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzZXJ2ZXJcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBob3N0bmFtZSBvciBJUCBhZGRyZXNzIG9mIHRoZSBORlMgc2VydmVyOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS92b2x1bWVzLm1kI25mc1wiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTkZTVm9sdW1lU291cmNlXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX05hbWVzcGFjZVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJOYW1lc3BhY2VcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3BlY1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19OYW1lc3BhY2VTcGVjXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVzcGFjZVNwZWNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3RhdHVzXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX05hbWVzcGFjZVN0YXR1c1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lc3BhY2VTdGF0dXNcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVzcGFjZVwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19OYW1lc3BhY2VMaXN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaXRlbXMgaXMgdGhlIGxpc3Qgb2YgTmFtZXNwYWNlIG9iamVjdHMgaW4gdGhlIGxpc3Q7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL25hbWVzcGFjZXMubWRcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX05hbWVzcGFjZVwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVzcGFjZVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJOYW1lc3BhY2VMaXN0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVzcGFjZUxpc3RcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19OYW1lc3BhY2VTcGVjXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiZmluYWxpemVyc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbiBvcGFxdWUgbGlzdCBvZiB2YWx1ZXMgdGhhdCBtdXN0IGJlIGVtcHR5IHRvIHBlcm1hbmVudGx5IHJlbW92ZSBvYmplY3QgZnJvbSBzdG9yYWdlOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvZGVzaWduL25hbWVzcGFjZXMubWQjZmluYWxpemVyc1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYW4gb3BhcXVlIGxpc3Qgb2YgdmFsdWVzIHRoYXQgbXVzdCBiZSBlbXB0eSB0byBwZXJtYW5lbnRseSByZW1vdmUgb2JqZWN0IGZyb20gc3RvcmFnZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2Rlc2lnbi9uYW1lc3BhY2VzLm1kI2ZpbmFsaXplcnNcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZXNwYWNlU3BlY1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19OYW1lc3BhY2VTdGF0dXNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJwaGFzZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicGhhc2UgaXMgdGhlIGN1cnJlbnQgbGlmZWN5Y2xlIHBoYXNlIG9mIHRoZSBuYW1lc3BhY2U7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9kZXNpZ24vbmFtZXNwYWNlcy5tZCNwaGFzZXNcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVzcGFjZVN0YXR1c1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19Ob2RlXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIk5vZGVcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3BlY1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Ob2RlU3BlY1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ob2RlU3BlY1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTm9kZVN0YXR1c1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ob2RlU3RhdHVzXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ob2RlXCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX05vZGVBZGRyZXNzXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYWRkcmVzc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIG5vZGUgYWRkcmVzc1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJub2RlIGFkZHJlc3MgdHlwZVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTm9kZUFkZHJlc3NcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfTm9kZUNvbmRpdGlvblwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImxhc3RIZWFydGJlYXRUaW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsYXN0IHRpbWUgd2UgZ290IGFuIHVwZGF0ZSBvbiBhIGdpdmVuIGNvbmRpdGlvblwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJsYXN0VHJhbnNpdGlvblRpbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxhc3QgdGltZSB0aGUgY29uZGl0aW9uIHRyYW5zaXQgZnJvbSBvbmUgc3RhdHVzIHRvIGFub3RoZXJcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWVzc2FnZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaHVtYW4gcmVhZGFibGUgbWVzc2FnZSBpbmRpY2F0aW5nIGRldGFpbHMgYWJvdXQgbGFzdCB0cmFuc2l0aW9uXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlYXNvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiKGJyaWVmKSByZWFzb24gZm9yIHRoZSBjb25kaXRpb24ncyBsYXN0IHRyYW5zaXRpb25cIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3RhdHVzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzdGF0dXMgb2YgdGhlIGNvbmRpdGlvblwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0eXBlIG9mIG5vZGUgY29uZGl0aW9uXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ob2RlQ29uZGl0aW9uXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX05vZGVMaXN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBub2Rlc1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTm9kZVwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5vZGVcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiTm9kZUxpc3RcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTm9kZUxpc3RcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19Ob2RlU3BlY1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImV4dGVybmFsSURcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImRlcHJlY2F0ZWQuIEV4dGVybmFsIElEIGFzc2lnbmVkIHRvIHRoZSBub2RlIGJ5IHNvbWUgbWFjaGluZSBkYXRhYmFzZSAoZS5nLiBhIGNsb3VkIHByb3ZpZGVyKS4gRGVmYXVsdHMgdG8gbm9kZSBuYW1lIHdoZW4gZW1wdHkuXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInBvZENJRFJcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBvZCBJUCByYW5nZSBhc3NpZ25lZCB0byB0aGUgbm9kZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJwcm92aWRlcklEXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJRCBvZiB0aGUgbm9kZSBhc3NpZ25lZCBieSB0aGUgY2xvdWQgcHJvdmlkZXIgaW4gdGhlIGZvcm1hdDogXFx1MDAzY1Byb3ZpZGVyTmFtZVxcdTAwM2U6Ly9cXHUwMDNjUHJvdmlkZXJTcGVjaWZpY05vZGVJRFxcdTAwM2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidW5zY2hlZHVsYWJsZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImRpc2FibGUgcG9kIHNjaGVkdWxpbmcgb24gdGhlIG5vZGU7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9hZG1pbi9ub2RlLm1kI21hbnVhbC1ub2RlLWFkbWluaXN0cmF0aW9uXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ob2RlU3BlY1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19Ob2RlU3RhdHVzXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYWRkcmVzc2VzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgYWRkcmVzc2VzIHJlYWNoYWJsZSB0byB0aGUgbm9kZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2FkbWluL25vZGUubWQjbm9kZS1hZGRyZXNzZXNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX05vZGVBZGRyZXNzXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTm9kZUFkZHJlc3NcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJjYXBhY2l0eVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiY29tcHV0ZSByZXNvdXJjZSBjYXBhY2l0eSBvZiB0aGUgbm9kZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvY29tcHV0ZS1yZXNvdXJjZXMubWRcIixcclxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3Jlc291cmNlX1F1YW50aXR5XCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUXVhbnRpdHlcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVxcdTAwM2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiY29uZGl0aW9uc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIG5vZGUgY29uZGl0aW9ucyBvYnNlcnZlZDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2FkbWluL25vZGUubWQjbm9kZS1jb25kaXRpb25cIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX05vZGVDb25kaXRpb25cIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ob2RlQ29uZGl0aW9uXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibm9kZUluZm9cIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTm9kZVN5c3RlbUluZm9cIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTm9kZVN5c3RlbUluZm9cIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicGhhc2VcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm1vc3QgcmVjZW50bHkgb2JzZXJ2ZWQgbGlmZWN5Y2xlIHBoYXNlIG9mIHRoZSBub2RlOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvYWRtaW4vbm9kZS5tZCNub2RlLXBoYXNlXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ob2RlU3RhdHVzXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX05vZGVTeXN0ZW1JbmZvXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYm9vdElEXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJib290IGlkIGlzIHRoZSBib290LWlkIHJlcG9ydGVkIGJ5IHRoZSBub2RlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImNvbnRhaW5lclJ1bnRpbWVWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJDb250YWluZXIgcnVudGltZSB2ZXJzaW9uIHJlcG9ydGVkIGJ5IHRoZSBub2RlIHRocm91Z2ggcnVudGltZSByZW1vdGUgQVBJIChlLmcuIGRvY2tlcjovLzEuNS4wKVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJrZXJuZWxWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJLZXJuZWwgdmVyc2lvbiByZXBvcnRlZCBieSB0aGUgbm9kZSBmcm9tICd1bmFtZSAtcicgKGUuZy4gMy4xNi4wLTAuYnBvLjQtYW1kNjQpXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImt1YmVQcm94eVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkt1YmUtcHJveHkgdmVyc2lvbiByZXBvcnRlZCBieSB0aGUgbm9kZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJrdWJlbGV0VmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiS3ViZWxldCB2ZXJzaW9uIHJlcG9ydGVkIGJ5IHRoZSBub2RlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1hY2hpbmVJRFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibWFjaGluZS1pZCByZXBvcnRlZCBieSB0aGUgbm9kZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJvc0ltYWdlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJPUyBpbWFnZSB1c2VkIHJlcG9ydGVkIGJ5IHRoZSBub2RlIGZyb20gL2V0Yy9vcy1yZWxlYXNlIChlLmcuIERlYmlhbiBHTlUvTGludXggNyAod2hlZXp5KSlcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3lzdGVtVVVJRFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3lzdGVtLXV1aWQgcmVwb3J0ZWQgYnkgdGhlIG5vZGVcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5vZGVTeXN0ZW1JbmZvXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX09iamVjdEZpZWxkU2VsZWN0b3JcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ2ZXJzaW9uIG9mIHRoZSBzY2hlbWEgdGhhdCBmaWVsZFBhdGggaXMgd3JpdHRlbiBpbiB0ZXJtcyBvZjsgZGVmYXVsdHMgdG8gdjFcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZmllbGRQYXRoXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJwYXRoIG9mIHRoZSBmaWVsZCB0byBzZWxlY3QgaW4gdGhlIHNwZWNpZmllZCBBUEkgdmVyc2lvblwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0RmllbGRTZWxlY3RvclwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19PYmplY3RNZXRhXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYW5ub3RhdGlvbnNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm1hcCBvZiBzdHJpbmcga2V5cyBhbmQgdmFsdWVzIHRoYXQgY2FuIGJlIHVzZWQgYnkgZXh0ZXJuYWwgdG9vbGluZyB0byBzdG9yZSBhbmQgcmV0cmlldmUgYXJiaXRyYXJ5IG1ldGFkYXRhIGFib3V0IG9iamVjdHM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2Fubm90YXRpb25zLm1kXCIsXHJcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJtYXAgb2Ygc3RyaW5nIGtleXMgYW5kIHZhbHVlcyB0aGF0IGNhbiBiZSB1c2VkIGJ5IGV4dGVybmFsIHRvb2xpbmcgdG8gc3RvcmUgYW5kIHJldHJpZXZlIGFyYml0cmFyeSBtZXRhZGF0YSBhYm91dCBvYmplY3RzOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9hbm5vdGF0aW9ucy5tZFwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxTdHJpbmdcXHUwMDNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImNyZWF0aW9uVGltZXN0YW1wXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSRkMgMzMzOSBkYXRlIGFuZCB0aW1lIGF0IHdoaWNoIHRoZSBvYmplY3Qgd2FzIGNyZWF0ZWQ7IHBvcHVsYXRlZCBieSB0aGUgc3lzdGVtXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImRlbGV0aW9uVGltZXN0YW1wXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSRkMgMzMzOSBkYXRlIGFuZCB0aW1lIGF0IHdoaWNoIHRoZSBvYmplY3Qgd2lsbCBiZSBkZWxldGVkOyBwb3B1bGF0ZWQgYnkgdGhlIHN5c3RlbSB3aGVuIGEgZ3JhY2VmdWwgZGVsZXRpb24gaXMgcmVxdWVzdGVkXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImdlbmVyYXRlTmFtZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYW4gb3B0aW9uYWwgcHJlZml4IHRvIHVzZSB0byBnZW5lcmF0ZSBhIHVuaXF1ZSBuYW1lOyBoYXMgdGhlIHNhbWUgdmFsaWRhdGlvbiBydWxlcyBhcyBuYW1lOyBvcHRpb25hbFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJnZW5lcmF0aW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYSBzZXF1ZW5jZSBudW1iZXIgcmVwcmVzZW50aW5nIGEgc3BlY2lmaWMgZ2VuZXJhdGlvbiBvZiB0aGUgZGVzaXJlZCBzdGF0ZTsgcG9wdWxhdGVkIGJ5IHRoZSBzeXN0ZW07IHJlYWQtb25seVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiTG9uZ1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJsYWJlbHNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm1hcCBvZiBzdHJpbmcga2V5cyBhbmQgdmFsdWVzIHRoYXQgY2FuIGJlIHVzZWQgdG8gb3JnYW5pemUgYW5kIGNhdGVnb3JpemUgb2JqZWN0czsgbWF5IG1hdGNoIHNlbGVjdG9ycyBvZiByZXBsaWNhdGlvbiBjb250cm9sbGVycyBhbmQgc2VydmljZXM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2xhYmVscy5tZFwiLFxyXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibWFwIG9mIHN0cmluZyBrZXlzIGFuZCB2YWx1ZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBvcmdhbml6ZSBhbmQgY2F0ZWdvcml6ZSBvYmplY3RzOyBtYXkgbWF0Y2ggc2VsZWN0b3JzIG9mIHJlcGxpY2F0aW9uIGNvbnRyb2xsZXJzIGFuZCBzZXJ2aWNlczsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvbGFiZWxzLm1kXCJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImphdmEudXRpbC5NYXBcXHUwMDNjU3RyaW5nLFN0cmluZ1xcdTAwM2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibmFtZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3RyaW5nIHRoYXQgaWRlbnRpZmllcyBhbiBvYmplY3QuIE11c3QgYmUgdW5pcXVlIHdpdGhpbiBhIG5hbWVzcGFjZTsgY2Fubm90IGJlIHVwZGF0ZWQ7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2lkZW50aWZpZXJzLm1kI25hbWVzXCIsXHJcbiAgICAgICAgICAgIFwibWF4TGVuZ3RoXCI6IDYzLFxyXG4gICAgICAgICAgICBcInBhdHRlcm5cIjogXCJeW2EtejAtOV0oWy1hLXowLTldKlthLXowLTldKT8kXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm5hbWVzcGFjZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZXNwYWNlIG9mIHRoZSBvYmplY3Q7IG11c3QgYmUgYSBETlNfTEFCRUw7IGNhbm5vdCBiZSB1cGRhdGVkOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9uYW1lc3BhY2VzLm1kXCIsXHJcbiAgICAgICAgICAgIFwibWF4TGVuZ3RoXCI6IDI1MyxcclxuICAgICAgICAgICAgXCJwYXR0ZXJuXCI6IFwiXlthLXowLTldKFstYS16MC05XSpbYS16MC05XSk/KFxcXFwuW2EtejAtOV0oWy1hLXowLTldKlthLXowLTldKT8pKiRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmVzb3VyY2VWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzdHJpbmcgdGhhdCBpZGVudGlmaWVzIHRoZSBpbnRlcm5hbCB2ZXJzaW9uIG9mIHRoaXMgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgYnkgY2xpZW50cyB0byBkZXRlcm1pbmUgd2hlbiBvYmplY3RzIGhhdmUgY2hhbmdlZDsgcG9wdWxhdGVkIGJ5IHRoZSBzeXN0ZW1cIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic2VsZkxpbmtcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlVSTCBmb3IgdGhlIG9iamVjdDsgcG9wdWxhdGVkIGJ5IHRoZSBzeXN0ZW1cIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidWlkXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ1bmlxdWUgVVVJRCBhY3Jvc3Mgc3BhY2UgYW5kIHRpbWU7IHBvcHVsYXRlZCBieSB0aGUgc3lzdGVtOyByZWFkLW9ubHk7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2lkZW50aWZpZXJzLm1kI3VpZHNcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQVBJIHZlcnNpb24gb2YgdGhlIHJlZmVyZW50XCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImZpZWxkUGF0aFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaWYgcmVmZXJyaW5nIHRvIGEgcGllY2Ugb2YgYW4gb2JqZWN0IGluc3RlYWQgb2YgYW4gZW50aXJlIG9iamVjdFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJraW5kIG9mIHRoZSByZWZlcmVudDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCN0eXBlcy1raW5kc1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJuYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoZSByZWZlcmVudDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvaWRlbnRpZmllcnMubWQjbmFtZXNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibmFtZXNwYWNlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lc3BhY2Ugb2YgdGhlIHJlZmVyZW50OyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9uYW1lc3BhY2VzLm1kXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlc291cmNlVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3BlY2lmaWMgcmVzb3VyY2VWZXJzaW9uIHRvIHdoaWNoIHRoaXMgcmVmZXJlbmNlIGlzIG1hZGVcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidWlkXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ1aWQgb2YgdGhlIHJlZmVyZW50OyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9pZGVudGlmaWVycy5tZCN1aWRzXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJQZXJzaXN0ZW50Vm9sdW1lXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInNwZWNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZVNwZWNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUGVyc2lzdGVudFZvbHVtZVNwZWNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3RhdHVzXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1BlcnNpc3RlbnRWb2x1bWVTdGF0dXNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUGVyc2lzdGVudFZvbHVtZVN0YXR1c1wiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUGVyc2lzdGVudFZvbHVtZVwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1cIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUGVyc2lzdGVudFZvbHVtZUNsYWltXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInNwZWNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZUNsYWltU3BlY1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1TcGVjXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInN0YXR1c1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1TdGF0dXNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUGVyc2lzdGVudFZvbHVtZUNsYWltU3RhdHVzXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1cIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZUNsYWltTGlzdFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImEgbGlzdCBvZiBwZXJzaXN0ZW50IHZvbHVtZSBjbGFpbXM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BlcnNpc3RlbnQtdm9sdW1lcy5tZCNwZXJzaXN0ZW50dm9sdW1lY2xhaW1zXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1cIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUGVyc2lzdGVudFZvbHVtZUNsYWltTGlzdFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1MaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZUNsYWltU3BlY1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFjY2Vzc01vZGVzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBkZXNpcmVkIGFjY2VzcyBtb2RlcyB0aGUgdm9sdW1lIHNob3VsZCBoYXZlOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9wZXJzaXN0ZW50LXZvbHVtZXMubWQjYWNjZXNzLW1vZGVzLTFcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBkZXNpcmVkIGFjY2VzcyBtb2RlcyB0aGUgdm9sdW1lIHNob3VsZCBoYXZlOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9wZXJzaXN0ZW50LXZvbHVtZXMubWQjYWNjZXNzLW1vZGVzLTFcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZXNvdXJjZXNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUmVzb3VyY2VSZXF1aXJlbWVudHNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VSZXF1aXJlbWVudHNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidm9sdW1lTmFtZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGJpbmRpbmcgcmVmZXJlbmNlIHRvIHRoZSBwZXJzaXN0ZW50IHZvbHVtZSBiYWNraW5nIHRoaXMgY2xhaW1cIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVDbGFpbVNwZWNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZUNsYWltU3RhdHVzXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYWNjZXNzTW9kZXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGFjdHVhbCBhY2Nlc3MgbW9kZXMgdGhlIHZvbHVtZSBoYXM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BlcnNpc3RlbnQtdm9sdW1lcy5tZCNhY2Nlc3MtbW9kZXMtMVwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGFjdHVhbCBhY2Nlc3MgbW9kZXMgdGhlIHZvbHVtZSBoYXM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BlcnNpc3RlbnQtdm9sdW1lcy5tZCNhY2Nlc3MtbW9kZXMtMVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImNhcGFjaXR5XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgYWN0dWFsIHJlc291cmNlcyB0aGUgdm9sdW1lIGhhc1wiLFxyXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcmVzb3VyY2VfUXVhbnRpdHlcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XFx1MDAzZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJwaGFzZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGN1cnJlbnQgcGhhc2Ugb2YgdGhlIGNsYWltXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1TdGF0dXNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZUNsYWltVm9sdW1lU291cmNlXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiY2xhaW1OYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgbmFtZSBvZiB0aGUgY2xhaW0gaW4gdGhlIHNhbWUgbmFtZXNwYWNlIHRvIGJlIG1vdW50ZWQgYXMgYSB2b2x1bWU7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BlcnNpc3RlbnQtdm9sdW1lcy5tZCNwZXJzaXN0ZW50dm9sdW1lY2xhaW1zXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlYWRPbmx5XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibW91bnQgdm9sdW1lIGFzIHJlYWQtb25seSB3aGVuIHRydWU7IGRlZmF1bHQgZmFsc2VcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVDbGFpbVZvbHVtZVNvdXJjZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lTGlzdFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgcGVyc2lzdGVudCB2b2x1bWVzOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9wZXJzaXN0ZW50LXZvbHVtZXMubWRcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1BlcnNpc3RlbnRWb2x1bWVcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlBlcnNpc3RlbnRWb2x1bWVMaXN0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZVNvdXJjZVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImF3c0VsYXN0aWNCbG9ja1N0b3JlXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0FXU0VsYXN0aWNCbG9ja1N0b3JlVm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkFXU0VsYXN0aWNCbG9ja1N0b3JlVm9sdW1lU291cmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImNlcGhmc1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19DZXBoRlNWb2x1bWVTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ2VwaEZTVm9sdW1lU291cmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImdjZVBlcnNpc3RlbnREaXNrXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0dDRVBlcnNpc3RlbnREaXNrVm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkdDRVBlcnNpc3RlbnREaXNrVm9sdW1lU291cmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImdsdXN0ZXJmc1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19HbHVzdGVyZnNWb2x1bWVTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuR2x1c3RlcmZzVm9sdW1lU291cmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImhvc3RQYXRoXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0hvc3RQYXRoVm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhvc3RQYXRoVm9sdW1lU291cmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImlzY3NpXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0lTQ1NJVm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLklTQ1NJVm9sdW1lU291cmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm5mc1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19ORlNWb2x1bWVTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTkZTVm9sdW1lU291cmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJiZFwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SQkRWb2x1bWVTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUkJEVm9sdW1lU291cmNlXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lU291cmNlXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1BlcnNpc3RlbnRWb2x1bWVTcGVjXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYWNjZXNzTW9kZXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsIHdheXMgdGhlIHZvbHVtZSBjYW4gYmUgbW91bnRlZDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcGVyc2lzdGVudC12b2x1bWVzLm1kI2FjY2Vzcy1tb2Rlc1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsIHdheXMgdGhlIHZvbHVtZSBjYW4gYmUgbW91bnRlZDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcGVyc2lzdGVudC12b2x1bWVzLm1kI2FjY2Vzcy1tb2Rlc1wiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImF3c0VsYXN0aWNCbG9ja1N0b3JlXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0FXU0VsYXN0aWNCbG9ja1N0b3JlVm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkFXU0VsYXN0aWNCbG9ja1N0b3JlVm9sdW1lU291cmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImNhcGFjaXR5XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhIGRlc2NyaXB0aW9uIG9mIHRoZSBwZXJzaXN0ZW50IHZvbHVtZSdzIHJlc291cmNlcyBhbmQgY2FwYWNpdHlyOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9wZXJzaXN0ZW50LXZvbHVtZXMubWQjY2FwYWNpdHlcIixcclxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3Jlc291cmNlX1F1YW50aXR5XCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUXVhbnRpdHlcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVxcdTAwM2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiY2VwaGZzXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0NlcGhGU1ZvbHVtZVNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5DZXBoRlNWb2x1bWVTb3VyY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiY2xhaW1SZWZcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJnY2VQZXJzaXN0ZW50RGlza1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19HQ0VQZXJzaXN0ZW50RGlza1ZvbHVtZVNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5HQ0VQZXJzaXN0ZW50RGlza1ZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJnbHVzdGVyZnNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfR2x1c3RlcmZzVm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkdsdXN0ZXJmc1ZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJob3N0UGF0aFwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Ib3N0UGF0aFZvbHVtZVNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ib3N0UGF0aFZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpc2NzaVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19JU0NTSVZvbHVtZVNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5JU0NTSVZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJuZnNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTkZTVm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5GU1ZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJwZXJzaXN0ZW50Vm9sdW1lUmVjbGFpbVBvbGljeVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwid2hhdCBoYXBwZW5zIHRvIGEgdm9sdW1lIHdoZW4gcmVsZWFzZWQgZnJvbSBpdHMgY2xhaW07IFZhbGlkIG9wdGlvbnMgYXJlIFJldGFpbiAoZGVmYXVsdCkgYW5kIFJlY3ljbGUuICBSZWN5bGluZyBtdXN0IGJlIHN1cHBvcnRlZCBieSB0aGUgdm9sdW1lIHBsdWdpbiB1bmRlcmx5aW5nIHRoaXMgcGVyc2lzdGVudCB2b2x1bWUuIFNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BlcnNpc3RlbnQtdm9sdW1lcy5tZCNyZWN5Y2xpbmctcG9saWN5XCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJiZFwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SQkRWb2x1bWVTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUkJEVm9sdW1lU291cmNlXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lU3BlY1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lU3RhdHVzXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwibWVzc2FnZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaHVtYW4tcmVhZGFibGUgbWVzc2FnZSBpbmRpY2F0aW5nIGRldGFpbHMgYWJvdXQgd2h5IHRoZSB2b2x1bWUgaXMgaW4gdGhpcyBzdGF0ZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJwaGFzZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGN1cnJlbnQgcGhhc2Ugb2YgYSBwZXJzaXN0ZW50IHZvbHVtZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcGVyc2lzdGVudC12b2x1bWVzLm1kI3BoYXNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlYXNvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiKGJyaWVmKSByZWFzb24gdGhlIHZvbHVtZSBpcyBub3QgaXMgbm90IGF2YWlsYWJsZVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUGVyc2lzdGVudFZvbHVtZVN0YXR1c1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19Qb2RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUG9kXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInNwZWNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUG9kU3BlY1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Qb2RTcGVjXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInN0YXR1c1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Qb2RTdGF0dXNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUG9kU3RhdHVzXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Qb2RcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfUG9kQ29uZGl0aW9uXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwic3RhdHVzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzdGF0dXMgb2YgdGhlIGNvbmRpdGlvblwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJraW5kIG9mIHRoZSBjb25kaXRpb25cIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBvZENvbmRpdGlvblwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19Qb2RMaXN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBwb2RzOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9wb2RzLm1kXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Qb2RcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Qb2RcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUG9kTGlzdFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Qb2RMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfUG9kU3BlY1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFjdGl2ZURlYWRsaW5lU2Vjb25kc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiTG9uZ1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJjb250YWluZXJzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgY29udGFpbmVycyBiZWxvbmdpbmcgdG8gdGhlIHBvZDsgY2Fubm90IGJlIHVwZGF0ZWQ7IGNvbnRhaW5lcnMgY2Fubm90IGN1cnJlbnRseSBiZSBhZGRlZCBvciByZW1vdmVkOyB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBjb250YWluZXIgaW4gYSBQb2Q7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2NvbnRhaW5lcnMubWRcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0NvbnRhaW5lclwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImRuc1BvbGljeVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRE5TIHBvbGljeSBmb3IgY29udGFpbmVycyB3aXRoaW4gdGhlIHBvZDsgb25lIG9mICdDbHVzdGVyRmlyc3QnIG9yICdEZWZhdWx0J1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJob3N0XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJkZXByZWNhdGVkXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImhvc3ROZXR3b3JrXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaG9zdCBuZXR3b3JraW5nIHJlcXVlc3RlZCBmb3IgdGhpcyBwb2RcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaW1hZ2VQdWxsU2VjcmV0c1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHJlZmVyZW5jZXMgdG8gc2VjcmV0cyBpbiB0aGUgc2FtZSBuYW1lc3BhY2UgYXZhaWxhYmxlIGZvciBwdWxsaW5nIHRoZSBjb250YWluZXIgaW1hZ2VzOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9pbWFnZXMubWQjc3BlY2lmeWluZy1pbWFnZXB1bGxzZWNyZXRzLW9uLWEtcG9kXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Mb2NhbE9iamVjdFJlZmVyZW5jZVwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxvY2FsT2JqZWN0UmVmZXJlbmNlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibm9kZU5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5vZGUgcmVxdWVzdGVkIGZvciB0aGlzIHBvZFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJub2RlU2VsZWN0b3JcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNlbGVjdG9yIHdoaWNoIG11c3QgbWF0Y2ggYSBub2RlJ3MgbGFiZWxzIGZvciB0aGUgcG9kIHRvIGJlIHNjaGVkdWxlZCBvbiB0aGF0IG5vZGU7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL25vZGUtc2VsZWN0aW9uL1JFQURNRS5tZFwiLFxyXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic2VsZWN0b3Igd2hpY2ggbXVzdCBtYXRjaCBhIG5vZGUncyBsYWJlbHMgZm9yIHRoZSBwb2QgdG8gYmUgc2NoZWR1bGVkIG9uIHRoYXQgbm9kZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvbm9kZS1zZWxlY3Rpb24vUkVBRE1FLm1kXCJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImphdmEudXRpbC5NYXBcXHUwMDNjU3RyaW5nLFN0cmluZ1xcdTAwM2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmVzdGFydFBvbGljeVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmVzdGFydCBwb2xpY3kgZm9yIGFsbCBjb250YWluZXJzIHdpdGhpbiB0aGUgcG9kOyBvbmUgb2YgQWx3YXlzXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInNlcnZpY2VBY2NvdW50XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJkZXByZWNhdGVkOyB1c2Ugc2VydmljZUFjY291bnROYW1lIGluc3RlYWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic2VydmljZUFjY291bnROYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoZSBTZXJ2aWNlQWNjb3VudCB0byB1c2UgdG8gcnVuIHRoaXMgcG9kOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvZGVzaWduL3NlcnZpY2VfYWNjb3VudHMubWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidGVybWluYXRpb25HcmFjZVBlcmlvZFNlY29uZHNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbCBkdXJhdGlvbiBpbiBzZWNvbmRzIHRoZSBwb2QgbmVlZHMgdG8gdGVybWluYXRlIGdyYWNlZnVsbHk7IG1heSBiZSBkZWNyZWFzZWQgaW4gZGVsZXRlIHJlcXVlc3Q7IHZhbHVlIG11c3QgYmUgbm9uLW5lZ2F0aXZlIGludGVnZXI7IHRoZSB2YWx1ZSB6ZXJvIGluZGljYXRlcyBkZWxldGUgaW1tZWRpYXRlbHk7IGlmIHRoaXMgdmFsdWUgaXMgbm90IHNldFwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiTG9uZ1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ2b2x1bWVzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2Ygdm9sdW1lcyB0aGF0IGNhbiBiZSBtb3VudGVkIGJ5IGNvbnRhaW5lcnMgYmVsb25naW5nIHRvIHRoZSBwb2Q7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3ZvbHVtZXMubWRcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1ZvbHVtZVwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlZvbHVtZVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Qb2RTcGVjXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1BvZFN0YXR1c1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImNvbmRpdGlvbnNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiY3VycmVudCBzZXJ2aWNlIHN0YXRlIG9mIHBvZDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcG9kLXN0YXRlcy5tZCNwb2QtY29uZGl0aW9uc1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUG9kQ29uZGl0aW9uXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUG9kQ29uZGl0aW9uXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiY29udGFpbmVyU3RhdHVzZXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBjb250YWluZXIgc3RhdHVzZXM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BvZC1zdGF0ZXMubWQjY29udGFpbmVyLXN0YXR1c2VzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Db250YWluZXJTdGF0dXNcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Db250YWluZXJTdGF0dXNcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJob3N0SVBcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIklQIGFkZHJlc3Mgb2YgdGhlIGhvc3QgdG8gd2hpY2ggdGhlIHBvZCBpcyBhc3NpZ25lZDsgZW1wdHkgaWYgbm90IHlldCBzY2hlZHVsZWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWVzc2FnZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaHVtYW4gcmVhZGFibGUgbWVzc2FnZSBpbmRpY2F0aW5nIGRldGFpbHMgYWJvdXQgd2h5IHRoZSBwb2QgaXMgaW4gdGhpcyBjb25kaXRpb25cIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicGhhc2VcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImN1cnJlbnQgY29uZGl0aW9uIG9mIHRoZSBwb2Q7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BvZC1zdGF0ZXMubWQjcG9kLXBoYXNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInBvZElQXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJUCBhZGRyZXNzIGFsbG9jYXRlZCB0byB0aGUgcG9kOyByb3V0YWJsZSBhdCBsZWFzdCB3aXRoaW4gdGhlIGNsdXN0ZXI7IGVtcHR5IGlmIG5vdCB5ZXQgYWxsb2NhdGVkXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlYXNvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiKGJyaWVmLUNhbWVsQ2FzZSkgcmVhc29uIGluZGljYXRpbmcgZGV0YWlscyBhYm91dCB3aHkgdGhlIHBvZCBpcyBpbiB0aGlzIGNvbmRpdGlvblwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzdGFydFRpbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJGQyAzMzM5IGRhdGUgYW5kIHRpbWUgYXQgd2hpY2ggdGhlIG9iamVjdCB3YXMgYWNrbm93bGVkZ2VkIGJ5IHRoZSBLdWJlbGV0LiAgVGhpcyBpcyBiZWZvcmUgdGhlIEt1YmVsZXQgcHVsbGVkIHRoZSBjb250YWluZXIgaW1hZ2UocykgZm9yIHRoZSBwb2QuXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Qb2RTdGF0dXNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfUG9kVGVtcGxhdGVTcGVjXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInNwZWNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUG9kU3BlY1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Qb2RTcGVjXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Qb2RUZW1wbGF0ZVNwZWNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfUHJvYmVcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJleGVjXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0V4ZWNBY3Rpb25cIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRXhlY0FjdGlvblwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJodHRwR2V0XCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0hUVFBHZXRBY3Rpb25cIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSFRUUEdldEFjdGlvblwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpbml0aWFsRGVsYXlTZWNvbmRzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibnVtYmVyIG9mIHNlY29uZHMgYWZ0ZXIgdGhlIGNvbnRhaW5lciBoYXMgc3RhcnRlZCBiZWZvcmUgbGl2ZW5lc3MgcHJvYmVzIGFyZSBpbml0aWF0ZWQ7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BvZC1zdGF0ZXMubWQjY29udGFpbmVyLXByb2Jlc1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiTG9uZ1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ0Y3BTb2NrZXRcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfVENQU29ja2V0QWN0aW9uXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlRDUFNvY2tldEFjdGlvblwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ0aW1lb3V0U2Vjb25kc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm51bWJlciBvZiBzZWNvbmRzIGFmdGVyIHdoaWNoIGxpdmVuZXNzIHByb2JlcyB0aW1lb3V0OyBkZWZhdWx0cyB0byAxIHNlY29uZDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcG9kLXN0YXRlcy5tZCNjb250YWluZXItcHJvYmVzXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Qcm9iZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19SQkRWb2x1bWVTb3VyY2VcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJmc1R5cGVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImZpbGUgc3lzdGVtIHR5cGUgdG8gbW91bnRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaW1hZ2VcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJhZG9zIGltYWdlIG5hbWU7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvcmJkL1JFQURNRS5tZCNob3ctdG8tdXNlLWl0XCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtleXJpbmdcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImtleXJpbmcgaXMgdGhlIHBhdGggdG8ga2V5IHJpbmcgZm9yIHJhZG9zIHVzZXI7IGRlZmF1bHQgaXMgL2V0Yy9jZXBoL2tleXJpbmc7IG9wdGlvbmFsOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL3JiZC9SRUFETUUubWQjaG93LXRvLXVzZS1pdFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtb25pdG9yc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhIGNvbGxlY3Rpb24gb2YgQ2VwaCBtb25pdG9yczsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy9yYmQvUkVBRE1FLm1kI2hvdy10by11c2UtaXRcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImEgY29sbGVjdGlvbiBvZiBDZXBoIG1vbml0b3JzOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL3JiZC9SRUFETUUubWQjaG93LXRvLXVzZS1pdFwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInBvb2xcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJhZG9zIHBvb2wgbmFtZTsgZGVmYXVsdCBpcyByYmQ7IG9wdGlvbmFsOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL3JiZC9SRUFETUUubWQjaG93LXRvLXVzZS1pdFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZWFkT25seVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJiZCB2b2x1bWUgdG8gYmUgbW91bnRlZCB3aXRoIHJlYWQtb25seSBwZXJtaXNzaW9uczsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy9yYmQvUkVBRE1FLm1kI2hvdy10by11c2UtaXRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic2VjcmV0UmVmXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xvY2FsT2JqZWN0UmVmZXJlbmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxvY2FsT2JqZWN0UmVmZXJlbmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInVzZXJcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJhZG9zIHVzZXIgbmFtZTsgZGVmYXVsdCBpcyBhZG1pbjsgb3B0aW9uYWw7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvcmJkL1JFQURNRS5tZCNob3ctdG8tdXNlLWl0XCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SQkRWb2x1bWVTb3VyY2VcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfUmVwbGljYXRpb25Db250cm9sbGVyXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlJlcGxpY2F0aW9uQ29udHJvbGxlclwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzcGVjXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1JlcGxpY2F0aW9uQ29udHJvbGxlclNwZWNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVwbGljYXRpb25Db250cm9sbGVyU3BlY1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUmVwbGljYXRpb25Db250cm9sbGVyU3RhdHVzXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlcGxpY2F0aW9uQ29udHJvbGxlclN0YXR1c1wiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVwbGljYXRpb25Db250cm9sbGVyXCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1JlcGxpY2F0aW9uQ29udHJvbGxlckxpc3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHJlcGxpY2F0aW9uIGNvbnRyb2xsZXJzOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9yZXBsaWNhdGlvbi1jb250cm9sbGVyLm1kXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SZXBsaWNhdGlvbkNvbnRyb2xsZXJcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXBsaWNhdGlvbkNvbnRyb2xsZXJcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUmVwbGljYXRpb25Db250cm9sbGVyTGlzdFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXBsaWNhdGlvbkNvbnRyb2xsZXJMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfUmVwbGljYXRpb25Db250cm9sbGVyU3BlY1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcInJlcGxpY2FzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibnVtYmVyIG9mIHJlcGxpY2FzIGRlc2lyZWQ7IGRlZmF1bHRzIHRvIDE7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3JlcGxpY2F0aW9uLWNvbnRyb2xsZXIubWQjd2hhdC1pcy1hLXJlcGxpY2F0aW9uLWNvbnRyb2xsZXJcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic2VsZWN0b3JcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxhYmVsIGtleXMgYW5kIHZhbHVlcyB0aGF0IG11c3QgbWF0Y2ggaW4gb3JkZXIgdG8gYmUgY29udHJvbGxlZCBieSB0aGlzIHJlcGxpY2F0aW9uIGNvbnRyb2xsZXJcIixcclxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxhYmVsIGtleXMgYW5kIHZhbHVlcyB0aGF0IG11c3QgbWF0Y2ggaW4gb3JkZXIgdG8gYmUgY29udHJvbGxlZCBieSB0aGlzIHJlcGxpY2F0aW9uIGNvbnRyb2xsZXJcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsU3RyaW5nXFx1MDAzZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ0ZW1wbGF0ZVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Qb2RUZW1wbGF0ZVNwZWNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUG9kVGVtcGxhdGVTcGVjXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXBsaWNhdGlvbkNvbnRyb2xsZXJTcGVjXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1JlcGxpY2F0aW9uQ29udHJvbGxlclN0YXR1c1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcIm9ic2VydmVkR2VuZXJhdGlvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlZmxlY3RzIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBtb3N0IHJlY2VudGx5IG9ic2VydmVkIHJlcGxpY2F0aW9uIGNvbnRyb2xsZXJcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcIkxvbmdcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmVwbGljYXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJtb3N0IHJlY2VudGx5IG9iZXJ2ZWQgbnVtYmVyIG9mIHJlcGxpY2FzOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9yZXBsaWNhdGlvbi1jb250cm9sbGVyLm1kI3doYXQtaXMtYS1yZXBsaWNhdGlvbi1jb250cm9sbGVyXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXBsaWNhdGlvbkNvbnRyb2xsZXJTdGF0dXNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfUmVzb3VyY2VRdW90YVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJSZXNvdXJjZVF1b3RhXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInNwZWNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUmVzb3VyY2VRdW90YVNwZWNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VRdW90YVNwZWNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3RhdHVzXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1Jlc291cmNlUXVvdGFTdGF0dXNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VRdW90YVN0YXR1c1wiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VRdW90YVwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19SZXNvdXJjZVF1b3RhTGlzdFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIml0ZW1zIGlzIGEgbGlzdCBvZiBSZXNvdXJjZVF1b3RhIG9iamVjdHM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9kZXNpZ24vYWRtaXNzaW9uX2NvbnRyb2xfcmVzb3VyY2VfcXVvdGEubWQjYWRtaXNzaW9uY29udHJvbC1wbHVnaW4tcmVzb3VyY2VxdW90YVwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUmVzb3VyY2VRdW90YVwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlc291cmNlUXVvdGFcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUmVzb3VyY2VRdW90YUxpc3RcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VRdW90YUxpc3RcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19SZXNvdXJjZVF1b3RhU3BlY1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImhhcmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImhhcmQgaXMgdGhlIHNldCBvZiBkZXNpcmVkIGhhcmQgbGltaXRzIGZvciBlYWNoIG5hbWVkIHJlc291cmNlOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvZGVzaWduL2FkbWlzc2lvbl9jb250cm9sX3Jlc291cmNlX3F1b3RhLm1kI2FkbWlzc2lvbmNvbnRyb2wtcGx1Z2luLXJlc291cmNlcXVvdGFcIixcclxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3Jlc291cmNlX1F1YW50aXR5XCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUXVhbnRpdHlcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVxcdTAwM2VcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlc291cmNlUXVvdGFTcGVjXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1Jlc291cmNlUXVvdGFTdGF0dXNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJoYXJkXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJoYXJkIGlzIHRoZSBzZXQgb2YgZW5mb3JjZWQgaGFyZCBsaW1pdHMgZm9yIGVhY2ggbmFtZWQgcmVzb3VyY2U7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9kZXNpZ24vYWRtaXNzaW9uX2NvbnRyb2xfcmVzb3VyY2VfcXVvdGEubWQjYWRtaXNzaW9uY29udHJvbC1wbHVnaW4tcmVzb3VyY2VxdW90YVwiLFxyXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcmVzb3VyY2VfUXVhbnRpdHlcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XFx1MDAzZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ1c2VkXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ1c2VkIGlzIHRoZSBjdXJyZW50IG9ic2VydmVkIHRvdGFsIHVzYWdlIG9mIHRoZSByZXNvdXJjZSBpbiB0aGUgbmFtZXNwYWNlXCIsXHJcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19yZXNvdXJjZV9RdWFudGl0eVwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XCJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImphdmEudXRpbC5NYXBcXHUwMDNjU3RyaW5nLGlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUXVhbnRpdHlcXHUwMDNlXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXNvdXJjZVF1b3RhU3RhdHVzXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1Jlc291cmNlUmVxdWlyZW1lbnRzXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwibGltaXRzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJNYXhpbXVtIGFtb3VudCBvZiBjb21wdXRlIHJlc291cmNlcyBhbGxvd2VkOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvZGVzaWduL3Jlc291cmNlcy5tZCNyZXNvdXJjZS1zcGVjaWZpY2F0aW9uc1wiLFxyXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcmVzb3VyY2VfUXVhbnRpdHlcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XFx1MDAzZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZXF1ZXN0c1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTWluaW11bSBhbW91bnQgb2YgcmVzb3VyY2VzIHJlcXVlc3RlZDsgaWYgUmVxdWVzdHMgaXMgb21pdHRlZCBmb3IgYSBjb250YWluZXJcIixcclxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3Jlc291cmNlX1F1YW50aXR5XCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUXVhbnRpdHlcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVxcdTAwM2VcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlc291cmNlUmVxdWlyZW1lbnRzXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1J1bkFzVXNlclN0cmF0ZWd5T3B0aW9uc1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcInR5cGVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInN0cmF0ZWd5IHVzZWQgdG8gZ2VuZXJhdGUgUnVuQXNVc2VyXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInVpZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSB1aWQgdG8gYWx3YXlzIHJ1biBhczsgcmVxdWlyZWQgZm9yIE11c3RSdW5Bc1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiTG9uZ1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ1aWRSYW5nZU1heFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm1heCB2YWx1ZSBmb3IgcmFuZ2UgYmFzZWQgYWxsb2NhdG9yc1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiTG9uZ1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ1aWRSYW5nZU1pblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm1pbiB2YWx1ZSBmb3IgcmFuZ2UgYmFzZWQgYWxsb2NhdG9yc1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiTG9uZ1wiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUnVuQXNVc2VyU3RyYXRlZ3lPcHRpb25zXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1NFTGludXhDb250ZXh0U3RyYXRlZ3lPcHRpb25zXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwic2VMaW51eE9wdGlvbnNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU0VMaW51eE9wdGlvbnNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU0VMaW51eE9wdGlvbnNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidHlwZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3RyYXRlZ3kgdXNlZCB0byBnZW5lcmF0ZSB0aGUgU0VMaW51eCBjb250ZXh0XCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TRUxpbnV4Q29udGV4dFN0cmF0ZWd5T3B0aW9uc1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19TRUxpbnV4T3B0aW9uc1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImxldmVsXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgbGV2ZWwgbGFiZWwgdG8gYXBwbHkgdG8gdGhlIGNvbnRhaW5lcjsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvbGFiZWxzLm1kXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJvbGVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSByb2xlIGxhYmVsIHRvIGFwcGx5IHRvIHRoZSBjb250YWluZXI7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2xhYmVscy5tZFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgdHlwZSBsYWJlbCB0byBhcHBseSB0byB0aGUgY29udGFpbmVyOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9sYWJlbHMubWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidXNlclwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHVzZXIgbGFiZWwgdG8gYXBwbHkgdG8gdGhlIGNvbnRhaW5lcjsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvbGFiZWxzLm1kXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TRUxpbnV4T3B0aW9uc1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19TZWNyZXRcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJkYXRhIGNvbnRhaW5zIHRoZSBzZWNyZXQgZGF0YS4gIEVhY2gga2V5IG11c3QgYmUgYSB2YWxpZCBETlNfU1VCRE9NQUlOIG9yIGxlYWRpbmcgZG90IGZvbGxvd2VkIGJ5IHZhbGlkIEROU19TVUJET01BSU4uICBFYWNoIHZhbHVlIG11c3QgYmUgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgYXMgZGVzY3JpYmVkIGluIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0NjQ4I3NlY3Rpb24tNFwiLFxyXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZGF0YSBjb250YWlucyB0aGUgc2VjcmV0IGRhdGEuICBFYWNoIGtleSBtdXN0IGJlIGEgdmFsaWQgRE5TX1NVQkRPTUFJTiBvciBsZWFkaW5nIGRvdCBmb2xsb3dlZCBieSB2YWxpZCBETlNfU1VCRE9NQUlOLiAgRWFjaCB2YWx1ZSBtdXN0IGJlIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nIGFzIGRlc2NyaWJlZCBpbiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDY0OCNzZWN0aW9uLTRcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsU3RyaW5nXFx1MDAzZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiU2VjcmV0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInR5cGVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInR5cGUgZmFjaWxpdGF0ZXMgcHJvZ3JhbW1hdGljIGhhbmRsaW5nIG9mIHNlY3JldCBkYXRhXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZWNyZXRcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfU2VjcmV0TGlzdFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIml0ZW1zIGlzIGEgbGlzdCBvZiBzZWNyZXQgb2JqZWN0czsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvc2VjcmV0cy5tZFwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU2VjcmV0XCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjcmV0XCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlNlY3JldExpc3RcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjcmV0TGlzdFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1NlY3JldFZvbHVtZVNvdXJjZVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcInNlY3JldE5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNlY3JldE5hbWUgaXMgdGhlIG5hbWUgb2YgYSBzZWNyZXQgaW4gdGhlIHBvZCdzIG5hbWVzcGFjZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvdm9sdW1lcy5tZCNzZWNyZXRzXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZWNyZXRWb2x1bWVTb3VyY2VcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfU2VjdXJpdHlDb250ZXh0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiY2FwYWJpbGl0aWVzXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0NhcGFiaWxpdGllc1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5DYXBhYmlsaXRpZXNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicHJpdmlsZWdlZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJ1biB0aGUgY29udGFpbmVyIGluIHByaXZpbGVnZWQgbW9kZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2Rlc2lnbi9zZWN1cml0eV9jb250ZXh0Lm1kI3NlY3VyaXR5LWNvbnRleHRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicnVuQXNOb25Sb290XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaW5kaWNhdGVzIHRoZSBjb250YWluZXIgbXVzdCBiZSBydW4gYXMgYSBub24tcm9vdCB1c2VyIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBydW5Bc1VzZXIgb3IgaW4gdGhlIGltYWdlIHNwZWNpZmljYXRpb25cIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicnVuQXNVc2VyXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHVzZXIgaWQgdGhhdCBydW5zIHRoZSBmaXJzdCBwcm9jZXNzIGluIHRoZSBjb250YWluZXI7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9kZXNpZ24vc2VjdXJpdHlfY29udGV4dC5tZCNzZWN1cml0eS1jb250ZXh0XCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInNlTGludXhPcHRpb25zXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NFTGludXhPcHRpb25zXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNFTGludXhPcHRpb25zXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZWN1cml0eUNvbnRleHRcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhbGxvd0hvc3REaXJWb2x1bWVQbHVnaW5cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGxvdyB0aGUgdXNlIG9mIHRoZSBob3N0IGRpciB2b2x1bWUgcGx1Z2luXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImFsbG93SG9zdE5ldHdvcmtcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGxvdyB0aGUgdXNlIG9mIHRoZSBob3N0TmV0d29yayBpbiB0aGUgcG9kIHNwZWNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiYWxsb3dIb3N0UG9ydHNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGxvdyB0aGUgdXNlIG9mIHRoZSBob3N0IHBvcnRzIGluIHRoZSBjb250YWluZXJzXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImFsbG93UHJpdmlsZWdlZENvbnRhaW5lclwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbG93IGNvbnRhaW5lcnMgdG8gcnVuIGFzIHByaXZpbGVnZWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiYWxsb3dlZENhcGFiaWxpdGllc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJjYXBhYmlsaXRpZXMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSBhZGRlZFwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiY2FwYWJpbGl0aWVzIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgYWRkZWRcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJncm91cHNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZ3JvdXBzIGFsbG93ZWQgdG8gdXNlIHRoaXMgU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImdyb3VwcyBhbGxvd2VkIHRvIHVzZSB0aGlzIFNlY3VyaXR5Q29udGV4dENvbnN0cmFpbnRzXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlNlY3VyaXR5Q29udGV4dENvbnN0cmFpbnRzXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJ1bkFzVXNlclwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SdW5Bc1VzZXJTdHJhdGVneU9wdGlvbnNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUnVuQXNVc2VyU3RyYXRlZ3lPcHRpb25zXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInNlTGludXhDb250ZXh0XCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NFTGludXhDb250ZXh0U3RyYXRlZ3lPcHRpb25zXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNFTGludXhDb250ZXh0U3RyYXRlZ3lPcHRpb25zXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInVzZXJzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVzZXJzIGFsbG93ZWQgdG8gdXNlIHRoaXMgU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVzZXJzIGFsbG93ZWQgdG8gdXNlIHRoaXMgU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNMaXN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZWN1cml0eUNvbnRleHRDb25zdHJhaW50c1wiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlY3VyaXR5Q29udGV4dENvbnN0cmFpbnRzXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlNlY3VyaXR5Q29udGV4dENvbnN0cmFpbnRzTGlzdFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZWN1cml0eUNvbnRleHRDb25zdHJhaW50c0xpc3RcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19TZXJ2aWNlXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlNlcnZpY2VcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3BlY1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZXJ2aWNlU3BlY1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZXJ2aWNlU3BlY1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU2VydmljZVN0YXR1c1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZXJ2aWNlU3RhdHVzXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZXJ2aWNlXCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1NlcnZpY2VBY2NvdW50XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaW1hZ2VQdWxsU2VjcmV0c1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHJlZmVyZW5jZXMgdG8gc2VjcmV0cyBpbiB0aGUgc2FtZSBuYW1lc3BhY2UgYXZhaWxhYmxlIGZvciBwdWxsaW5nIGNvbnRhaW5lciBpbWFnZXM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3NlY3JldHMubWQjbWFudWFsbHktc3BlY2lmeWluZy1hbi1pbWFnZXB1bGxzZWNyZXRcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xvY2FsT2JqZWN0UmVmZXJlbmNlXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTG9jYWxPYmplY3RSZWZlcmVuY2VcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiU2VydmljZUFjY291bnRcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic2VjcmV0c1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHNlY3JldHMgdGhhdCBjYW4gYmUgdXNlZCBieSBwb2RzIHJ1bm5pbmcgYXMgdGhpcyBzZXJ2aWNlIGFjY291bnQ7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3NlY3JldHMubWRcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZXJ2aWNlQWNjb3VudFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19TZXJ2aWNlQWNjb3VudExpc3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIFNlcnZpY2VBY2NvdW50czsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2Rlc2lnbi9zZXJ2aWNlX2FjY291bnRzLm1kI3NlcnZpY2UtYWNjb3VudHNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NlcnZpY2VBY2NvdW50XCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VydmljZUFjY291bnRcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiU2VydmljZUFjY291bnRMaXN0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlcnZpY2VBY2NvdW50TGlzdFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1NlcnZpY2VMaXN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBzZXJ2aWNlc1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU2VydmljZVwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlcnZpY2VcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiU2VydmljZUxpc3RcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VydmljZUxpc3RcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19TZXJ2aWNlUG9ydFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcIm5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBuYW1lIG9mIHRoaXMgcG9ydDsgb3B0aW9uYWwgaWYgb25seSBvbmUgcG9ydCBpcyBkZWZpbmVkXCIsXHJcbiAgICAgICAgICAgIFwibWF4TGVuZ3RoXCI6IDYzLFxyXG4gICAgICAgICAgICBcInBhdHRlcm5cIjogXCJeW2EtejAtOV0oWy1hLXowLTldKlthLXowLTldKT8kXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm5vZGVQb3J0XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHBvcnQgb24gZWFjaCBub2RlIG9uIHdoaWNoIHRoaXMgc2VydmljZSBpcyBleHBvc2VkIHdoZW4gdHlwZT1Ob2RlUG9ydCBvciBMb2FkQmFsYW5jZXI7IHVzdWFsbHkgYXNzaWduZWQgYnkgdGhlIHN5c3RlbTsgaWYgc3BlY2lmaWVkXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInBvcnRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgcG9ydCBudW1iZXIgdGhhdCBpcyBleHBvc2VkXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInByb3RvY29sXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgcHJvdG9jb2wgdXNlZCBieSB0aGlzIHBvcnQ7IG11c3QgYmUgVURQIG9yIFRDUDsgVENQIGlmIHVuc3BlY2lmaWVkXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInRhcmdldFBvcnRcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfdXRpbF9JbnRPclN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5JbnRPclN0cmluZ1wiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VydmljZVBvcnRcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfU2VydmljZVNwZWNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJjbHVzdGVySVBcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIklQIGFkZHJlc3Mgb2YgdGhlIHNlcnZpY2U7IHVzdWFsbHkgYXNzaWduZWQgYnkgdGhlIHN5c3RlbTsgaWYgc3BlY2lmaWVkXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImRlcHJlY2F0ZWRQdWJsaWNJUHNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZGVwcmVjYXRlZC4gZXh0ZXJuYWxseSB2aXNpYmxlIElQcyAoZS5nLiBsb2FkIGJhbGFuY2VycykgdGhhdCBzaG91bGQgYmUgcHJveGllZCB0byB0aGlzIHNlcnZpY2VcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImRlcHJlY2F0ZWQuIGV4dGVybmFsbHkgdmlzaWJsZSBJUHMgKGUuZy4gbG9hZCBiYWxhbmNlcnMpIHRoYXQgc2hvdWxkIGJlIHByb3hpZWQgdG8gdGhpcyBzZXJ2aWNlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicG9ydGFsSVBcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImRlcHJlY2F0ZWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicG9ydHNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicG9ydHMgZXhwb3NlZCBieSB0aGUgc2VydmljZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvc2VydmljZXMubWQjdmlydHVhbC1pcHMtYW5kLXNlcnZpY2UtcHJveGllc1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU2VydmljZVBvcnRcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZXJ2aWNlUG9ydFwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInNlbGVjdG9yXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsYWJlbCBrZXlzIGFuZCB2YWx1ZXMgdGhhdCBtdXN0IG1hdGNoIGluIG9yZGVyIHRvIHJlY2VpdmUgdHJhZmZpYyBmb3IgdGhpcyBzZXJ2aWNlOyBpZiBlbXB0eVwiLFxyXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGFiZWwga2V5cyBhbmQgdmFsdWVzIHRoYXQgbXVzdCBtYXRjaCBpbiBvcmRlciB0byByZWNlaXZlIHRyYWZmaWMgZm9yIHRoaXMgc2VydmljZTsgaWYgZW1wdHlcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsU3RyaW5nXFx1MDAzZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzZXNzaW9uQWZmaW5pdHlcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImVuYWJsZSBjbGllbnQgSVAgYmFzZWQgc2Vzc2lvbiBhZmZpbml0eTsgbXVzdCBiZSBDbGllbnRJUCBvciBOb25lOyBkZWZhdWx0cyB0byBOb25lOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9zZXJ2aWNlcy5tZCN2aXJ0dWFsLWlwcy1hbmQtc2VydmljZS1wcm94aWVzXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInR5cGVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInR5cGUgb2YgdGhpcyBzZXJ2aWNlOyBtdXN0IGJlIENsdXN0ZXJJUFwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VydmljZVNwZWNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfU2VydmljZVN0YXR1c1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImxvYWRCYWxhbmNlclwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Mb2FkQmFsYW5jZXJTdGF0dXNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTG9hZEJhbGFuY2VyU3RhdHVzXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZXJ2aWNlU3RhdHVzXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1N0YXR1c1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImNvZGVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzdWdnZXN0ZWQgSFRUUCByZXR1cm4gY29kZSBmb3IgdGhpcyBzdGF0dXM7IDAgaWYgbm90IHNldFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJkZXRhaWxzXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1N0YXR1c0RldGFpbHNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU3RhdHVzRGV0YWlsc1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiU3RhdHVzXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWVzc2FnZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIHN0YXR1cyBvZiB0aGlzIG9wZXJhdGlvblwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZWFzb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm1hY2hpbmUtcmVhZGFibGUgZGVzY3JpcHRpb24gb2Ygd2h5IHRoaXMgb3BlcmF0aW9uIGlzIGluIHRoZSAnRmFpbHVyZScgc3RhdHVzOyBpZiB0aGlzIHZhbHVlIGlzIGVtcHR5IHRoZXJlIGlzIG5vIGluZm9ybWF0aW9uIGF2YWlsYWJsZTsgYSByZWFzb24gY2xhcmlmaWVzIGFuIEhUVFAgc3RhdHVzIGNvZGUgYnV0IGRvZXMgbm90IG92ZXJyaWRlIGl0XCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInN0YXR1c1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3RhdHVzIG9mIHRoZSBvcGVyYXRpb247IGVpdGhlciBTdWNjZXNzXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TdGF0dXNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfU3RhdHVzQ2F1c2VcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJmaWVsZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZmllbGQgb2YgdGhlIHJlc291cmNlIHRoYXQgaGFzIGNhdXNlZCB0aGlzIGVycm9yXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1lc3NhZ2VcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBjYXVzZSBvZiB0aGUgZXJyb3I7IHRoaXMgZmllbGQgbWF5IGJlIHByZXNlbnRlZCBhcy1pcyB0byBhIHJlYWRlclwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZWFzb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm1hY2hpbmUtcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGNhdXNlIG9mIHRoZSBlcnJvcjsgaWYgdGhpcyB2YWx1ZSBpcyBlbXB0eSB0aGVyZSBpcyBubyBpbmZvcm1hdGlvbiBhdmFpbGFibGVcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlN0YXR1c0NhdXNlXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1N0YXR1c0RldGFpbHNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJjYXVzZXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIENhdXNlcyBhcnJheSBpbmNsdWRlcyBtb3JlIGRldGFpbHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBTdGF0dXNSZWFzb24gZmFpbHVyZTsgbm90IGFsbCBTdGF0dXNSZWFzb25zIG1heSBwcm92aWRlIGRldGFpbGVkIGNhdXNlc1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU3RhdHVzQ2F1c2VcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TdGF0dXNDYXVzZVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBraW5kIGF0dHJpYnV0ZSBvZiB0aGUgcmVzb3VyY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGF0dXMgU3RhdHVzUmVhc29uOyBvbiBzb21lIG9wZXJhdGlvbnMgbWF5IGRpZmZlciBmcm9tIHRoZSByZXF1ZXN0ZWQgcmVzb3VyY2UgS2luZDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCN0eXBlcy1raW5kc1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJuYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgbmFtZSBhdHRyaWJ1dGUgb2YgdGhlIHJlc291cmNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RhdHVzIFN0YXR1c1JlYXNvbiAod2hlbiB0aGVyZSBpcyBhIHNpbmdsZSBuYW1lIHdoaWNoIGNhbiBiZSBkZXNjcmliZWQpXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJldHJ5QWZ0ZXJTZWNvbmRzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSB0aGUgY2xpZW50IHNob3VsZCBhdHRlbXB0IHRvIHJldHJ5IHRoaXMgb3BlcmF0aW9uXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TdGF0dXNEZXRhaWxzXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1RDUFNvY2tldEFjdGlvblwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcInBvcnRcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfdXRpbF9JbnRPclN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5JbnRPclN0cmluZ1wiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuVENQU29ja2V0QWN0aW9uXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1R5cGVNZXRhXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidmVyc2lvbiBvZiB0aGUgc2NoZW1hIHRoZSBvYmplY3Qgc2hvdWxkIGhhdmU7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9kZXZlbC9hcGktY29udmVudGlvbnMubWQjcmVzb3VyY2VzXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImtpbmQgb2Ygb2JqZWN0XCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5UeXBlTWV0YVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19Wb2x1bWVcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhd3NFbGFzdGljQmxvY2tTdG9yZVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19BV1NFbGFzdGljQmxvY2tTdG9yZVZvbHVtZVNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5BV1NFbGFzdGljQmxvY2tTdG9yZVZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJjZXBoZnNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQ2VwaEZTVm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNlcGhGU1ZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJlbXB0eURpclwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FbXB0eURpclZvbHVtZVNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbXB0eURpclZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJnY2VQZXJzaXN0ZW50RGlza1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19HQ0VQZXJzaXN0ZW50RGlza1ZvbHVtZVNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5HQ0VQZXJzaXN0ZW50RGlza1ZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJnaXRSZXBvXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0dpdFJlcG9Wb2x1bWVTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuR2l0UmVwb1ZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJnbHVzdGVyZnNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfR2x1c3RlcmZzVm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkdsdXN0ZXJmc1ZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJob3N0UGF0aFwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Ib3N0UGF0aFZvbHVtZVNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ib3N0UGF0aFZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpc2NzaVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19JU0NTSVZvbHVtZVNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5JU0NTSVZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19NZXRhZGF0YVZvbHVtZVNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5NZXRhZGF0YVZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJuYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ2b2x1bWUgbmFtZTsgbXVzdCBiZSBhIEROU19MQUJFTCBhbmQgdW5pcXVlIHdpdGhpbiB0aGUgcG9kOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9pZGVudGlmaWVycy5tZCNuYW1lc1wiLFxyXG4gICAgICAgICAgICBcIm1heExlbmd0aFwiOiA2MyxcclxuICAgICAgICAgICAgXCJwYXR0ZXJuXCI6IFwiXlthLXowLTldKFstYS16MC05XSpbYS16MC05XSk/JFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJuZnNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTkZTVm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5GU1ZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJwZXJzaXN0ZW50Vm9sdW1lQ2xhaW1cIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZUNsYWltVm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVDbGFpbVZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyYmRcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUkJEVm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJCRFZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzZWNyZXRcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU2VjcmV0Vm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlY3JldFZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuVm9sdW1lXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1ZvbHVtZU1vdW50XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwibW91bnRQYXRoXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJwYXRoIHdpdGhpbiB0aGUgY29udGFpbmVyIGF0IHdoaWNoIHRoZSB2b2x1bWUgc2hvdWxkIGJlIG1vdW50ZWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibmFtZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBvZiB0aGUgdm9sdW1lIHRvIG1vdW50XCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlYWRPbmx5XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibW91bnRlZCByZWFkLW9ubHkgaWYgdHJ1ZVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuVm9sdW1lTW91bnRcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfVm9sdW1lU291cmNlXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXdzRWxhc3RpY0Jsb2NrU3RvcmVcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQVdTRWxhc3RpY0Jsb2NrU3RvcmVWb2x1bWVTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQVdTRWxhc3RpY0Jsb2NrU3RvcmVWb2x1bWVTb3VyY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiY2VwaGZzXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0NlcGhGU1ZvbHVtZVNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5DZXBoRlNWb2x1bWVTb3VyY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZW1wdHlEaXJcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW1wdHlEaXJWb2x1bWVTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRW1wdHlEaXJWb2x1bWVTb3VyY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZ2NlUGVyc2lzdGVudERpc2tcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfR0NFUGVyc2lzdGVudERpc2tWb2x1bWVTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuR0NFUGVyc2lzdGVudERpc2tWb2x1bWVTb3VyY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZ2l0UmVwb1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19HaXRSZXBvVm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkdpdFJlcG9Wb2x1bWVTb3VyY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZ2x1c3RlcmZzXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0dsdXN0ZXJmc1ZvbHVtZVNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5HbHVzdGVyZnNWb2x1bWVTb3VyY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaG9zdFBhdGhcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfSG9zdFBhdGhWb2x1bWVTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSG9zdFBhdGhWb2x1bWVTb3VyY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXNjc2lcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfSVNDU0lWb2x1bWVTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSVNDU0lWb2x1bWVTb3VyY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTWV0YWRhdGFWb2x1bWVTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTWV0YWRhdGFWb2x1bWVTb3VyY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibmZzXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX05GU1ZvbHVtZVNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5ORlNWb2x1bWVTb3VyY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicGVyc2lzdGVudFZvbHVtZUNsYWltXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1BlcnNpc3RlbnRWb2x1bWVDbGFpbVZvbHVtZVNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Wb2x1bWVTb3VyY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmJkXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1JCRFZvbHVtZVNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SQkRWb2x1bWVTb3VyY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic2VjcmV0XCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NlY3JldFZvbHVtZVNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZWNyZXRWb2x1bWVTb3VyY2VcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlZvbHVtZVNvdXJjZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19jb25maWdfQXV0aEluZm9cIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJjbGllbnQtY2VydGlmaWNhdGVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJjbGllbnQtY2VydGlmaWNhdGUtZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImNsaWVudC1rZXlcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJjbGllbnQta2V5LWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJleHRlbnNpb25zXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfY29uZmlnX05hbWVkRXh0ZW5zaW9uXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZWRFeHRlbnNpb25cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJwYXNzd29yZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInRva2VuXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidXNlcm5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQXV0aEluZm9cIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfY29uZmlnX0NsdXN0ZXJcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGktdmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImNlcnRpZmljYXRlLWF1dGhvcml0eVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImNlcnRpZmljYXRlLWF1dGhvcml0eS1kYXRhXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZXh0ZW5zaW9uc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX2NvbmZpZ19OYW1lZEV4dGVuc2lvblwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVkRXh0ZW5zaW9uXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaW5zZWN1cmUtc2tpcC10bHMtdmVyaWZ5XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInNlcnZlclwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5DbHVzdGVyXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX2NvbmZpZ19Db25maWdcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiY2x1c3RlcnNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19jb25maWdfTmFtZWRDbHVzdGVyXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZWRDbHVzdGVyXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiY29udGV4dHNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19jb25maWdfTmFtZWRDb250ZXh0XCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZWRDb250ZXh0XCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiY3VycmVudC1jb250ZXh0XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZXh0ZW5zaW9uc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX2NvbmZpZ19OYW1lZEV4dGVuc2lvblwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVkRXh0ZW5zaW9uXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInByZWZlcmVuY2VzXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX2NvbmZpZ19QcmVmZXJlbmNlc1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QcmVmZXJlbmNlc1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ1c2Vyc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX2NvbmZpZ19OYW1lZEF1dGhJbmZvXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZWRBdXRoSW5mb1wiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Db25maWdcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfY29uZmlnX0NvbnRleHRcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJjbHVzdGVyXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZXh0ZW5zaW9uc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX2NvbmZpZ19OYW1lZEV4dGVuc2lvblwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVkRXh0ZW5zaW9uXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibmFtZXNwYWNlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidXNlclwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Db250ZXh0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX2NvbmZpZ19OYW1lZEF1dGhJbmZvXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwibmFtZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInVzZXJcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfY29uZmlnX0F1dGhJbmZvXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkF1dGhJbmZvXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lZEF1dGhJbmZvXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX2NvbmZpZ19OYW1lZENsdXN0ZXJcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJjbHVzdGVyXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX2NvbmZpZ19DbHVzdGVyXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNsdXN0ZXJcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibmFtZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lZENsdXN0ZXJcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfY29uZmlnX05hbWVkQ29udGV4dFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImNvbnRleHRcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfY29uZmlnX0NvbnRleHRcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGV4dFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJuYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVkQ29udGV4dFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19jb25maWdfTmFtZWRFeHRlbnNpb25cIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJleHRlbnNpb25cIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcnVudGltZV9SYXdFeHRlbnNpb25cIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibmFtZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lZEV4dGVuc2lvblwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19jb25maWdfUHJlZmVyZW5jZXNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJjb2xvcnNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZXh0ZW5zaW9uc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX2NvbmZpZ19OYW1lZEV4dGVuc2lvblwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVkRXh0ZW5zaW9uXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlByZWZlcmVuY2VzXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX3Jlc291cmNlX1F1YW50aXR5XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiQW1vdW50XCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zcGV0ZXJfaW5mX0RlY1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlY1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJGb3JtYXRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUXVhbnRpdHlcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfcnVudGltZV9SYXdFeHRlbnNpb25cIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJSYXdKU09OXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX3V0aWxfSW50T3JTdHJpbmdcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJJbnRWYWxcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiS2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJTdHJWYWxcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSW50T3JTdHJpbmdcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfd2F0Y2hfV2F0Y2hFdmVudFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcIm9iamVjdFwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19ydW50aW1lX1Jhd0V4dGVuc2lvblwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgdHlwZSBvZiB3YXRjaCBldmVudDsgbWF5IGJlIEFEREVEXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5XYXRjaEV2ZW50XCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX0F1dGhvcml6YXRpb25BdHRyaWJ1dGVzXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiY29udGVudFwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19ydW50aW1lX1Jhd0V4dGVuc2lvblwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJuYW1lc3BhY2VcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWVzcGFjZSBvZiB0aGUgYWN0aW9uIGJlaW5nIHJlcXVlc3RlZFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZXNvdXJjZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib25lIG9mIHRoZSBleGlzdGluZyByZXNvdXJjZSB0eXBlc1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZXNvdXJjZU5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIHJlc291cmNlIGJlaW5nIHJlcXVlc3RlZCBmb3IgYSBnZXQgb3IgZGVsZXRlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInZlcmJcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9uZSBvZiBnZXRcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQXV0aG9yaXphdGlvbkF0dHJpYnV0ZXNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fQ2x1c3RlclBvbGljeVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJDbHVzdGVyUG9saWN5XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibGFzdE1vZGlmaWVkXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsYXN0IHRpbWUgYW55IHBhcnQgb2YgdGhlIG9iamVjdCB3YXMgY3JlYXRlZFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicm9sZXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsIHRoZSByb2xlcyBoZWxkIGJ5IHRoaXMgcG9saWN5XCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9OYW1lZENsdXN0ZXJSb2xlXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5OYW1lZENsdXN0ZXJSb2xlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ2x1c3RlclBvbGljeVwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9DbHVzdGVyUG9saWN5QmluZGluZ1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJDbHVzdGVyUG9saWN5QmluZGluZ1wiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImxhc3RNb2RpZmllZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGFzdCB0aW1lIGFueSBwYXJ0IG9mIHRoZSBvYmplY3Qgd2FzIGNyZWF0ZWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInBvbGljeVJlZlwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJvbGVCaW5kaW5nc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGwgdGhlIHJvbGUgYmluZGluZ3MgaGVsZCBieSB0aGlzIHBvbGljeVwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fTmFtZWRDbHVzdGVyUm9sZUJpbmRpbmdcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk5hbWVkQ2x1c3RlclJvbGVCaW5kaW5nXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ2x1c3RlclBvbGljeUJpbmRpbmdcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fQ2x1c3RlclBvbGljeUJpbmRpbmdMaXN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBjbHVzdGVyIHBvbGljeSBiaW5kaW5nc1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fQ2x1c3RlclBvbGljeUJpbmRpbmdcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJQb2xpY3lCaW5kaW5nXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkNsdXN0ZXJQb2xpY3lCaW5kaW5nTGlzdFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJQb2xpY3lCaW5kaW5nTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX0NsdXN0ZXJQb2xpY3lMaXN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBjbHVzdGVyIHBvbGljaWVzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9DbHVzdGVyUG9saWN5XCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUG9saWN5XCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkNsdXN0ZXJQb2xpY3lMaXN0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ2x1c3RlclBvbGljeUxpc3RcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9DbHVzdGVyUm9sZVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJDbHVzdGVyUm9sZVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJydWxlc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHBvbGljeSBydWxlc1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fUG9saWN5UnVsZVwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUG9saWN5UnVsZVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJSb2xlXCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX0NsdXN0ZXJSb2xlQmluZGluZ1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImdyb3VwTmFtZXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsIHRoZSBncm91cHMgZGlyZWN0bHkgYm91bmQgdG8gdGhlIHJvbGVcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbCB0aGUgZ3JvdXBzIGRpcmVjdGx5IGJvdW5kIHRvIHRoZSByb2xlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkNsdXN0ZXJSb2xlQmluZGluZ1wiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyb2xlUmVmXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3ViamVjdHNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmVmZXJlbmNlcyB0byBzdWJqZWN0cyBib3VuZCB0byB0aGUgcm9sZS4gIE9ubHkgVXNlclwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidXNlck5hbWVzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbCB1c2VyIG5hbWVzIGRpcmVjdGx5IGJvdW5kIHRvIHRoZSByb2xlXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGwgdXNlciBuYW1lcyBkaXJlY3RseSBib3VuZCB0byB0aGUgcm9sZVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJSb2xlQmluZGluZ1wiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9DbHVzdGVyUm9sZUJpbmRpbmdMaXN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBjbHVzdGVyIHJvbGUgYmluZGluZ3NcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX0NsdXN0ZXJSb2xlQmluZGluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ2x1c3RlclJvbGVCaW5kaW5nXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkNsdXN0ZXJSb2xlQmluZGluZ0xpc3RcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUm9sZUJpbmRpbmdMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fTG9jYWxTdWJqZWN0QWNjZXNzUmV2aWV3XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiVHlwZU1ldGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfVHlwZU1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuVHlwZU1ldGFcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiY29udGVudFwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19ydW50aW1lX1Jhd0V4dGVuc2lvblwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJncm91cHNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWxcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibmFtZXNwYWNlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lc3BhY2Ugb2YgdGhlIGFjdGlvbiBiZWluZyByZXF1ZXN0ZWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmVzb3VyY2VcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9uZSBvZiB0aGUgZXhpc3RpbmcgcmVzb3VyY2UgdHlwZXNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmVzb3VyY2VOYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoZSByZXNvdXJjZSBiZWluZyByZXF1ZXN0ZWQgZm9yIGEgZ2V0IG9yIGRlbGV0ZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ1c2VyXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ2ZXJiXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvbmUgb2YgZ2V0XCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkxvY2FsU3ViamVjdEFjY2Vzc1Jldmlld1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9OYW1lZENsdXN0ZXJSb2xlXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwibmFtZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBvZiB0aGUgY2x1c3RlciByb2xlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJvbGVcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fQ2x1c3RlclJvbGVcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUm9sZVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5OYW1lZENsdXN0ZXJSb2xlXCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX05hbWVkQ2x1c3RlclJvbGVCaW5kaW5nXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwibmFtZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBvZiB0aGUgY2x1c3RlciByb2xlIGJpbmRpbmdcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicm9sZUJpbmRpbmdcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fQ2x1c3RlclJvbGVCaW5kaW5nXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ2x1c3RlclJvbGVCaW5kaW5nXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk5hbWVkQ2x1c3RlclJvbGVCaW5kaW5nXCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX05hbWVkUm9sZVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcIm5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIHJvbGVcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicm9sZVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Sb2xlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm9sZVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5OYW1lZFJvbGVcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fTmFtZWRSb2xlQmluZGluZ1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcIm5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIHJvbGVCaW5kaW5nXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJvbGVCaW5kaW5nXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX1JvbGVCaW5kaW5nXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm9sZUJpbmRpbmdcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuTmFtZWRSb2xlQmluZGluZ1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9Qb2xpY3lcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUG9saWN5XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibGFzdE1vZGlmaWVkXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsYXN0IHRpbWUgdGhhdCBhbnkgcGFydCBvZiB0aGUgcG9saWN5IHdhcyBjcmVhdGVkXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyb2xlc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyb2xlcyBoZWxkIGJ5IHRoaXMgcG9saWN5XCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9OYW1lZFJvbGVcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk5hbWVkUm9sZVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlBvbGljeVwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9Qb2xpY3lCaW5kaW5nXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlBvbGljeUJpbmRpbmdcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJsYXN0TW9kaWZpZWRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxhc3QgdGltZSB0aGF0IGFueSBwYXJ0IG9mIHRoZSBvYmplY3Qgd2FzIGNyZWF0ZWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInBvbGljeVJlZlwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJvbGVCaW5kaW5nc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGwgcm9sZUJpbmRpbmdzIGhlbGQgYnkgdGhpcyBwb2xpY3lCaW5kaW5nXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9OYW1lZFJvbGVCaW5kaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5OYW1lZFJvbGVCaW5kaW5nXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUG9saWN5QmluZGluZ1wiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9Qb2xpY3lCaW5kaW5nTGlzdFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgcG9saWN5IGJpbmRpbmdzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Qb2xpY3lCaW5kaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qb2xpY3lCaW5kaW5nXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlBvbGljeUJpbmRpbmdMaXN0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUG9saWN5QmluZGluZ0xpc3RcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9Qb2xpY3lMaXN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBwb2xpY2llc1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fUG9saWN5XCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qb2xpY3lcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUG9saWN5TGlzdFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlBvbGljeUxpc3RcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9Qb2xpY3lSdWxlXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXR0cmlidXRlUmVzdHJpY3Rpb25zXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3J1bnRpbWVfUmF3RXh0ZW5zaW9uXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm5vblJlc291cmNlVVJMc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzZXQgb2YgcGFydGlhbCB1cmxzIHRoYXQgYSB1c2VyIHNob3VsZCBoYXZlIGFjY2VzcyB0by4gKnMgYXJlIGFsbG93ZWRcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNldCBvZiBwYXJ0aWFsIHVybHMgdGhhdCBhIHVzZXIgc2hvdWxkIGhhdmUgYWNjZXNzIHRvLiAqcyBhcmUgYWxsb3dlZFwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlc291cmNlTmFtZXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWwgd2hpdGUgbGlzdCBvZiBuYW1lcyB0aGF0IHRoZSBydWxlIGFwcGxpZXMgdG8uICBBbiBlbXB0eSBzZXQgbWVhbnMgdGhhdCBldmVyeXRoaW5nIGlzIGFsbG93ZWQuXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbCB3aGl0ZSBsaXN0IG9mIG5hbWVzIHRoYXQgdGhlIHJ1bGUgYXBwbGllcyB0by4gIEFuIGVtcHR5IHNldCBtZWFucyB0aGF0IGV2ZXJ5dGhpbmcgaXMgYWxsb3dlZC5cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZXNvdXJjZXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiByZXNvdXJjZXMgdGhpcyBydWxlIGFwcGxpZXMgdG8uICAqIHJlcHJlc2VudHMgYWxsIHJlc291cmNlcy5cIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgcmVzb3VyY2VzIHRoaXMgcnVsZSBhcHBsaWVzIHRvLiAgKiByZXByZXNlbnRzIGFsbCByZXNvdXJjZXMuXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidmVyYnNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiB2ZXJicyB0aGF0IGFwcGx5IHRvIEFMTCB0aGUgcmVzb3VyY2VLaW5kcyBhbmQgYXR0cmlidXRlUmVzdHJpY3Rpb25zIGNvbnRhaW5lZCBpbiB0aGlzIHJ1bGUuICBUaGUgdmVyYiAqIHJlcHJlc2VudHMgYWxsIGtpbmRzLlwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiB2ZXJicyB0aGF0IGFwcGx5IHRvIEFMTCB0aGUgcmVzb3VyY2VLaW5kcyBhbmQgYXR0cmlidXRlUmVzdHJpY3Rpb25zIGNvbnRhaW5lZCBpbiB0aGlzIHJ1bGUuICBUaGUgdmVyYiAqIHJlcHJlc2VudHMgYWxsIGtpbmRzLlwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlBvbGljeVJ1bGVcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fUm9sZVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJSb2xlXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJ1bGVzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbCB0aGUgcnVsZXMgZm9yIHRoaXMgcm9sZVwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fUG9saWN5UnVsZVwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUG9saWN5UnVsZVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvbGVcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fUm9sZUJpbmRpbmdcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJncm91cE5hbWVzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbCB0aGUgZ3JvdXBzIGRpcmVjdGx5IGJvdW5kIHRvIHRoZSByb2xlXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGwgdGhlIGdyb3VwcyBkaXJlY3RseSBib3VuZCB0byB0aGUgcm9sZVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJSb2xlQmluZGluZ1wiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyb2xlUmVmXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3ViamVjdHNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmVmZXJlbmNlcyB0byBzdWJqZWN0cyBib3VuZCB0byB0aGUgcm9sZS4gIE9ubHkgVXNlclwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidXNlck5hbWVzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbCB0aGUgdXNlcm5hbWVzIGRpcmVjdGx5IGJvdW5kIHRvIHRoZSByb2xlXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGwgdGhlIHVzZXJuYW1lcyBkaXJlY3RseSBib3VuZCB0byB0aGUgcm9sZVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvbGVCaW5kaW5nXCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX1JvbGVCaW5kaW5nTGlzdFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2Ygcm9sZSBiaW5kaW5nc1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fUm9sZUJpbmRpbmdcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvbGVCaW5kaW5nXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlJvbGVCaW5kaW5nTGlzdFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvbGVCaW5kaW5nTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX1JvbGVMaXN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiByb2xlc1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fUm9sZVwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm9sZVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJSb2xlTGlzdFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvbGVMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fU3ViamVjdEFjY2Vzc1Jldmlld1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImNvbnRlbnRcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcnVudGltZV9SYXdFeHRlbnNpb25cIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZ3JvdXBzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbFwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJTdWJqZWN0QWNjZXNzUmV2aWV3XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibmFtZXNwYWNlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lc3BhY2Ugb2YgdGhlIGFjdGlvbiBiZWluZyByZXF1ZXN0ZWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmVzb3VyY2VcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9uZSBvZiB0aGUgZXhpc3RpbmcgcmVzb3VyY2UgdHlwZXNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmVzb3VyY2VOYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoZSByZXNvdXJjZSBiZWluZyByZXF1ZXN0ZWQgZm9yIGEgZ2V0IG9yIGRlbGV0ZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ1c2VyXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ2ZXJiXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvbmUgb2YgZ2V0XCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlN1YmplY3RBY2Nlc3NSZXZpZXdcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fU3ViamVjdEFjY2Vzc1Jldmlld1Jlc3BvbnNlXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYWxsb3dlZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRydWUgaWYgdGhlIGFjdGlvbiB3b3VsZCBiZSBhbGxvd2VkXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJTdWJqZWN0QWNjZXNzUmV2aWV3UmVzcG9uc2VcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJuYW1lc3BhY2VcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBuYW1lc3BhY2UgdXNlZCBmb3IgdGhlIGFjY2VzcyByZXZpZXdcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmVhc29uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyZWFzb24gaXMgb3B0aW9uYWxcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuU3ViamVjdEFjY2Vzc1Jldmlld1Jlc3BvbnNlXCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19idWlsZF9CdWlsZFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJCdWlsZFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzcGVjXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZFNwZWNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFNwZWNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3RhdHVzXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZFN0YXR1c1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkU3RhdHVzXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkXCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc19idWlsZF9CdWlsZENvbmZpZ1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJCdWlsZENvbmZpZ1wiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzcGVjXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZENvbmZpZ1NwZWNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZENvbmZpZ1NwZWNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3RhdHVzXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZENvbmZpZ1N0YXR1c1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkQ29uZmlnU3RhdHVzXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkQ29uZmlnXCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc19idWlsZF9CdWlsZENvbmZpZ0xpc3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGJ1aWxkIGNvbmZpZ3NcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZENvbmZpZ1wiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRDb25maWdcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiQnVpbGRDb25maWdMaXN0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRDb25maWdMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2J1aWxkX0J1aWxkQ29uZmlnU3BlY1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcIm91dHB1dFwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRPdXRwdXRcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZE91dHB1dFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZXNvdXJjZXNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUmVzb3VyY2VSZXF1aXJlbWVudHNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VSZXF1aXJlbWVudHNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmV2aXNpb25cIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX1NvdXJjZVJldmlzaW9uXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuU291cmNlUmV2aXNpb25cIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic2VydmljZUFjY291bnRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIGFjY291bnQgdG8gdXNlIHRvIHJ1biBwb2RzIGNyZWF0ZWQgYnkgdGhlIGJ1aWxkXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInNvdXJjZVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzdHJhdGVneVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRTdHJhdGVneVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkU3RyYXRlZ3lcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidHJpZ2dlcnNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZGV0ZXJtaW5lcyBob3cgbmV3IGJ1aWxkcyBjYW4gYmUgbGF1bmNoZWQgZnJvbSBhIGJ1aWxkIGNvbmZpZy4gIGlmIG5vIHRyaWdnZXJzIGFyZSBkZWZpbmVkXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRUcmlnZ2VyUG9saWN5XCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFRyaWdnZXJQb2xpY3lcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZENvbmZpZ1NwZWNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2J1aWxkX0J1aWxkQ29uZmlnU3RhdHVzXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwibGFzdFZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ1c2VkIHRvIGluZm9ybSBhYm91dCBudW1iZXIgb2YgbGFzdCB0cmlnZ2VyZWQgYnVpbGRcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRDb25maWdTdGF0dXNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2J1aWxkX0J1aWxkTGlzdFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgYnVpbGRzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkJ1aWxkTGlzdFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc19idWlsZF9CdWlsZE91dHB1dFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcInB1c2hTZWNyZXRcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTG9jYWxPYmplY3RSZWZlcmVuY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTG9jYWxPYmplY3RSZWZlcmVuY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidG9cIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZE91dHB1dFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYnVpbGRfQnVpbGRSZXF1ZXN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZnJvbVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJCdWlsZFJlcXVlc3RcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJsYXN0VmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkxhc3RWZXJzaW9uIG9mIHRoZSBCdWlsZENvbmZpZyB0aGF0IHRyaWdnZXJlZCB0aGlzIGJ1aWxkXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZXZpc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfU291cmNlUmV2aXNpb25cIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Tb3VyY2VSZXZpc2lvblwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ0cmlnZ2VyZWRCeUltYWdlXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRSZXF1ZXN0XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc19idWlsZF9CdWlsZFNvdXJjZVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImNvbnRleHREaXJcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNwZWNpZmllcyBzdWItZGlyZWN0b3J5IHdoZXJlIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIGFwcGxpY2F0aW9uIGV4aXN0c1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJnaXRcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX0dpdEJ1aWxkU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuR2l0QnVpbGRTb3VyY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic291cmNlU2VjcmV0XCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xvY2FsT2JqZWN0UmVmZXJlbmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxvY2FsT2JqZWN0UmVmZXJlbmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInR5cGVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInR5cGUgb2Ygc291cmNlIGNvbnRyb2wgbWFuYWdlbWVudCBzeXN0ZW1cIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRTb3VyY2VcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2J1aWxkX0J1aWxkU3BlY1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcIm91dHB1dFwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRPdXRwdXRcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZE91dHB1dFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZXNvdXJjZXNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUmVzb3VyY2VSZXF1aXJlbWVudHNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VSZXF1aXJlbWVudHNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmV2aXNpb25cIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX1NvdXJjZVJldmlzaW9uXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuU291cmNlUmV2aXNpb25cIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic2VydmljZUFjY291bnRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIGFjY291bnQgdG8gdXNlIHRvIHJ1biBwb2RzIGNyZWF0ZWQgYnkgdGhlIGJ1aWxkXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInNvdXJjZVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzdHJhdGVneVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRTdHJhdGVneVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkU3RyYXRlZ3lcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRTcGVjXCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19idWlsZF9CdWlsZFN0YXR1c1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImNhbmNlbGxlZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImRlc2NyaWJlcyBpZiBhIGNhbmNlbGluZyBldmVudCB3YXMgdHJpZ2dlcmVkIGZvciB0aGUgYnVpbGRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiY29tcGxldGlvblRpbWVzdGFtcFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic2VydmVyIHRpbWUgd2hlbiB0aGUgcG9kIHJ1bm5pbmcgdGhpcyBidWlsZCBzdG9wcGVkIHJ1bm5pbmdcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiY29uZmlnXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZHVyYXRpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbW91bnQgb2YgdGltZSB0aGUgYnVpbGQgaGFzIGJlZW4gcnVubmluZ1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiTG9uZ1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXNzYWdlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJodW1hbi1yZWFkYWJsZSBtZXNzYWdlIGluZGljYXRpbmcgZGV0YWlscyBhYm91dCB3aHkgdGhlIGJ1aWxkIGhhcyB0aGlzIHN0YXR1c1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJwaGFzZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib2JzZXJ2ZWQgcG9pbnQgaW4gdGhlIGJ1aWxkIGxpZmVjeWNsZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzdGFydFRpbWVzdGFtcFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic2VydmVyIHRpbWUgd2hlbiB0aGlzIGJ1aWxkIHN0YXJ0ZWQgcnVubmluZyBpbiBhIHBvZFwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFN0YXR1c1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYnVpbGRfQnVpbGRTdHJhdGVneVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImN1c3RvbVN0cmF0ZWd5XCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9DdXN0b21CdWlsZFN0cmF0ZWd5XCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ3VzdG9tQnVpbGRTdHJhdGVneVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJkb2NrZXJTdHJhdGVneVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfRG9ja2VyQnVpbGRTdHJhdGVneVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRvY2tlckJ1aWxkU3RyYXRlZ3lcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic291cmNlU3RyYXRlZ3lcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX1NvdXJjZUJ1aWxkU3RyYXRlZ3lcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Tb3VyY2VCdWlsZFN0cmF0ZWd5XCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInR5cGVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImlkZW50aWZpZXMgdGhlIHR5cGUgb2YgYnVpbGQgc3RyYXRlZ3lcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRTdHJhdGVneVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYnVpbGRfQnVpbGRUcmlnZ2VyUG9saWN5XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiZ2VuZXJpY1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfV2ViSG9va1RyaWdnZXJcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5XZWJIb29rVHJpZ2dlclwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJnaXRodWJcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX1dlYkhvb2tUcmlnZ2VyXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuV2ViSG9va1RyaWdnZXJcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaW1hZ2VDaGFuZ2VcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX0ltYWdlQ2hhbmdlVHJpZ2dlclwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkltYWdlQ2hhbmdlVHJpZ2dlclwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0eXBlIG9mIGJ1aWxkIHRyaWdnZXJcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRUcmlnZ2VyUG9saWN5XCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19idWlsZF9DdXN0b21CdWlsZFN0cmF0ZWd5XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiZW52XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIHlvdSB3YW50IHRvIHBhc3MgaW50byBhIGJ1aWxkZXIgY29udGFpbmVyXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FbnZWYXJcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbnZWYXJcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJleHBvc2VEb2NrZXJTb2NrZXRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGxvdyBydW5uaW5nIERvY2tlciBjb21tYW5kcyAoYW5kIGJ1aWxkIERvY2tlciBpbWFnZXMpIGZyb20gaW5zaWRlIHRoZSBjb250YWluZXJcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZm9yY2VQdWxsXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZm9yY2VzIHB1bGxpbmcgb2YgYnVpbGRlciBpbWFnZSBmcm9tIHJlbW90ZSByZWdpc3RyeSBpZiB0cnVlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImZyb21cIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJwdWxsU2VjcmV0XCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xvY2FsT2JqZWN0UmVmZXJlbmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxvY2FsT2JqZWN0UmVmZXJlbmNlXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkN1c3RvbUJ1aWxkU3RyYXRlZ3lcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2J1aWxkX0RvY2tlckJ1aWxkU3RyYXRlZ3lcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJlbnZcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgeW91IHdhbnQgdG8gcGFzcyBpbnRvIGEgYnVpbGRlciBjb250YWluZXJcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0VudlZhclwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVudlZhclwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImZvcmNlUHVsbFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImZvcmNlcyB0aGUgc291cmNlIGJ1aWxkIHRvIHB1bGwgdGhlIGltYWdlIGlmIHRydWVcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZnJvbVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm5vQ2FjaGVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpZiB0cnVlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInB1bGxTZWNyZXRcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTG9jYWxPYmplY3RSZWZlcmVuY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTG9jYWxPYmplY3RSZWZlcmVuY2VcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRG9ja2VyQnVpbGRTdHJhdGVneVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYnVpbGRfR2l0QnVpbGRTb3VyY2VcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJodHRwUHJveHlcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNwZWNpZmllcyBhIGh0dHAgcHJveHkgdG8gYmUgdXNlZCBkdXJpbmcgZ2l0IGNsb25lIG9wZXJhdGlvbnNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaHR0cHNQcm94eVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3BlY2lmaWVzIGEgaHR0cHMgcHJveHkgdG8gYmUgdXNlZCBkdXJpbmcgZ2l0IGNsb25lIG9wZXJhdGlvbnNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmVmXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpZGVudGlmaWVzIHRoZSBicmFuY2gvdGFnL3JlZiB0byBidWlsZFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ1cmlcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBvaW50cyB0byB0aGUgc291cmNlIHRoYXQgd2lsbCBiZSBidWlsdFwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5HaXRCdWlsZFNvdXJjZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYnVpbGRfR2l0U291cmNlUmV2aXNpb25cIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhdXRob3JcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX1NvdXJjZUNvbnRyb2xVc2VyXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuU291cmNlQ29udHJvbFVzZXJcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiY29tbWl0XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJoYXNoIGlkZW50aWZ5aW5nIGEgc3BlY2lmaWMgY29tbWl0XCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImNvbW1pdHRlclwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfU291cmNlQ29udHJvbFVzZXJcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Tb3VyY2VDb250cm9sVXNlclwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXNzYWdlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJkZXNjcmlwdGlvbiBvZiBhIHNwZWNpZmljIGNvbW1pdFwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5HaXRTb3VyY2VSZXZpc2lvblwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYnVpbGRfSW1hZ2VDaGFuZ2VUcmlnZ2VyXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiZnJvbVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImxhc3RUcmlnZ2VyZWRJbWFnZUlEXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ1c2VkIGludGVybmFsbHkgdG8gc2F2ZSBsYXN0IHVzZWQgaW1hZ2UgSUQgZm9yIGJ1aWxkXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkltYWdlQ2hhbmdlVHJpZ2dlclwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYnVpbGRfU291cmNlQnVpbGRTdHJhdGVneVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImVudlwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhZGRpdGlvbmFsIGVudmlyb25tZW50IHZhcmlhYmxlcyB5b3Ugd2FudCB0byBwYXNzIGludG8gYSBidWlsZGVyIGNvbnRhaW5lclwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW52VmFyXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRW52VmFyXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZm9yY2VQdWxsXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZm9yY2VzIHRoZSBzb3VyY2UgYnVpbGQgdG8gcHVsbCB0aGUgaW1hZ2UgaWYgdHJ1ZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJmcm9tXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaW5jcmVtZW50YWxcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJmb3JjZXMgdGhlIHNvdXJjZSBidWlsZCB0byBkbyBpbmNyZW1lbnRhbCBidWlsZHMgaWYgdHJ1ZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJwdWxsU2VjcmV0XCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xvY2FsT2JqZWN0UmVmZXJlbmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxvY2FsT2JqZWN0UmVmZXJlbmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInNjcmlwdHNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxvY2F0aW9uIG9mIHRoZSBzb3VyY2Ugc2NyaXB0c1wiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Tb3VyY2VCdWlsZFN0cmF0ZWd5XCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19idWlsZF9Tb3VyY2VDb250cm9sVXNlclwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImVtYWlsXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJlLW1haWwgb2YgdGhlIHNvdXJjZSBjb250cm9sIHVzZXJcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibmFtZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBvZiB0aGUgc291cmNlIGNvbnRyb2wgdXNlclwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Tb3VyY2VDb250cm9sVXNlclwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYnVpbGRfU291cmNlUmV2aXNpb25cIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJnaXRcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX0dpdFNvdXJjZVJldmlzaW9uXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuR2l0U291cmNlUmV2aXNpb25cIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidHlwZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidHlwZSBvZiB0aGUgYnVpbGQgc291cmNlXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlNvdXJjZVJldmlzaW9uXCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19idWlsZF9XZWJIb29rVHJpZ2dlclwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcInNlY3JldFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic2VjcmV0IHVzZWQgdG8gdmFsaWRhdGUgcmVxdWVzdHNcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuV2ViSG9va1RyaWdnZXJcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2RlcGxveV9DdXN0b21EZXBsb3ltZW50U3RyYXRlZ3lQYXJhbXNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJjb21tYW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsbHkgb3ZlcnJpZGVzIHRoZSBjb250YWluZXIgY29tbWFuZCAoZGVmYXVsdCBpcyBzcGVjaWZpZWQgYnkgdGhlIGltYWdlKVwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWxseSBvdmVycmlkZXMgdGhlIGNvbnRhaW5lciBjb21tYW5kIChkZWZhdWx0IGlzIHNwZWNpZmllZCBieSB0aGUgaW1hZ2UpXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZW52aXJvbm1lbnRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZW52aXJvbm1lbnQgdmFyaWFibGVzIHByb3ZpZGVkIHRvIHRoZSBkZXBsb3ltZW50IHByb2Nlc3MgY29udGFpbmVyXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FbnZWYXJcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbnZWYXJcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpbWFnZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYSBEb2NrZXIgaW1hZ2Ugd2hpY2ggY2FuIGNhcnJ5IG91dCBhIGRlcGxveW1lbnRcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ3VzdG9tRGVwbG95bWVudFN0cmF0ZWd5UGFyYW1zXCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19kZXBsb3lfRGVwbG95bWVudENhdXNlXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiaW1hZ2VUcmlnZ2VyXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfRGVwbG95bWVudENhdXNlSW1hZ2VUcmlnZ2VyXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudENhdXNlSW1hZ2VUcmlnZ2VyXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInR5cGVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSB0eXBlIG9mIHRyaWdnZXIgdGhhdCByZXN1bHRlZCBpbiBhIG5ldyBkZXBsb3ltZW50XCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRDYXVzZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfZGVwbG95X0RlcGxveW1lbnRDYXVzZUltYWdlVHJpZ2dlclwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImZyb21cIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50Q2F1c2VJbWFnZVRyaWdnZXJcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2RlcGxveV9EZXBsb3ltZW50Q29uZmlnXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkRlcGxveW1lbnRDb25maWdcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3BlY1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfZGVwbG95X0RlcGxveW1lbnRDb25maWdTcGVjXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudENvbmZpZ1NwZWNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3RhdHVzXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfRGVwbG95bWVudENvbmZpZ1N0YXR1c1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRDb25maWdTdGF0dXNcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudENvbmZpZ1wiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfZGVwbG95X0RlcGxveW1lbnRDb25maWdMaXN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYSBsaXN0IG9mIGRlcGxveW1lbnQgY29uZmlnc1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2RlcGxveV9EZXBsb3ltZW50Q29uZmlnXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50Q29uZmlnXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkRlcGxveW1lbnRDb25maWdMaXN0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudENvbmZpZ0xpc3RcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfZGVwbG95X0RlcGxveW1lbnRDb25maWdTcGVjXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwicmVwbGljYXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgZGVzaXJlZCBudW1iZXIgb2YgcmVwbGljYXNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic2VsZWN0b3JcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImEgbGFiZWwgcXVlcnkgb3ZlciBwb2RzIHRoYXQgc2hvdWxkIG1hdGNoIHRoZSByZXBsaWNhcyBjb3VudFwiLFxyXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYSBsYWJlbCBxdWVyeSBvdmVyIHBvZHMgdGhhdCBzaG91bGQgbWF0Y2ggdGhlIHJlcGxpY2FzIGNvdW50XCJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImphdmEudXRpbC5NYXBcXHUwMDNjU3RyaW5nLFN0cmluZ1xcdTAwM2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3RyYXRlZ3lcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2RlcGxveV9EZXBsb3ltZW50U3RyYXRlZ3lcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50U3RyYXRlZ3lcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidGVtcGxhdGVcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUG9kVGVtcGxhdGVTcGVjXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBvZFRlbXBsYXRlU3BlY1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ0cmlnZ2Vyc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJob3cgbmV3IGRlcGxveW1lbnRzIGFyZSB0cmlnZ2VyZWRcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfRGVwbG95bWVudFRyaWdnZXJQb2xpY3lcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRUcmlnZ2VyUG9saWN5XCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudENvbmZpZ1NwZWNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2RlcGxveV9EZXBsb3ltZW50Q29uZmlnU3RhdHVzXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiZGV0YWlsc1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfZGVwbG95X0RlcGxveW1lbnREZXRhaWxzXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudERldGFpbHNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibGF0ZXN0VmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGN1cnJlbnQgZGVwbG95bWVudCBpcyBvdXQgb2Ygc3luY1wiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50Q29uZmlnU3RhdHVzXCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19kZXBsb3lfRGVwbG95bWVudERldGFpbHNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJjYXVzZXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZXh0ZW5kZWQgZGF0YSBhc3NvY2lhdGVkIHdpdGggYWxsIHRoZSBjYXVzZXMgZm9yIGNyZWF0aW5nIGEgbmV3IGRlcGxveW1lbnRcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfRGVwbG95bWVudENhdXNlXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50Q2F1c2VcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXNzYWdlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhIHVzZXIgc3BlY2lmaWVkIGNoYW5nZSBtZXNzYWdlXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnREZXRhaWxzXCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19kZXBsb3lfRGVwbG95bWVudFN0cmF0ZWd5XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiY3VzdG9tUGFyYW1zXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfQ3VzdG9tRGVwbG95bWVudFN0cmF0ZWd5UGFyYW1zXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ3VzdG9tRGVwbG95bWVudFN0cmF0ZWd5UGFyYW1zXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlY3JlYXRlUGFyYW1zXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfUmVjcmVhdGVEZXBsb3ltZW50U3RyYXRlZ3lQYXJhbXNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5SZWNyZWF0ZURlcGxveW1lbnRTdHJhdGVneVBhcmFtc1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZXNvdXJjZXNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUmVzb3VyY2VSZXF1aXJlbWVudHNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VSZXF1aXJlbWVudHNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicm9sbGluZ1BhcmFtc1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfZGVwbG95X1JvbGxpbmdEZXBsb3ltZW50U3RyYXRlZ3lQYXJhbXNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb2xsaW5nRGVwbG95bWVudFN0cmF0ZWd5UGFyYW1zXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInR5cGVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBuYW1lIG9mIGEgZGVwbG95bWVudCBzdHJhdGVneVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50U3RyYXRlZ3lcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2RlcGxveV9EZXBsb3ltZW50VHJpZ2dlckltYWdlQ2hhbmdlUGFyYW1zXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXV0b21hdGljXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwid2hldGhlciBkZXRlY3Rpb24gb2YgYSBuZXcgdGFnIHZhbHVlIHNob3VsZCB0cmlnZ2VyIGEgZGVwbG95bWVudFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJjb250YWluZXJOYW1lc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyZXN0cmljdHMgdGFnIHVwZGF0ZXMgdG8gYSBzZXQgb2YgY29udGFpbmVyIG5hbWVzIGluIHRoZSBwb2RcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlc3RyaWN0cyB0YWcgdXBkYXRlcyB0byBhIHNldCBvZiBjb250YWluZXIgbmFtZXMgaW4gdGhlIHBvZFwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImZyb21cIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJsYXN0VHJpZ2dlcmVkSW1hZ2VcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBsYXN0IGltYWdlIHRvIGJlIHRyaWdnZXJlZFwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50VHJpZ2dlckltYWdlQ2hhbmdlUGFyYW1zXCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19kZXBsb3lfRGVwbG95bWVudFRyaWdnZXJQb2xpY3lcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJpbWFnZUNoYW5nZVBhcmFtc1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfZGVwbG95X0RlcGxveW1lbnRUcmlnZ2VySW1hZ2VDaGFuZ2VQYXJhbXNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50VHJpZ2dlckltYWdlQ2hhbmdlUGFyYW1zXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInR5cGVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSB0eXBlIG9mIHRoZSB0cmlnZ2VyXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRUcmlnZ2VyUG9saWN5XCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19kZXBsb3lfRXhlY05ld1BvZEhvb2tcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJjb21tYW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBob29rIGNvbW1hbmQgYW5kIGl0cyBhcmd1bWVudHNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBob29rIGNvbW1hbmQgYW5kIGl0cyBhcmd1bWVudHNcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJjb250YWluZXJOYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgbmFtZSBvZiBhIGNvbnRhaW5lciBmcm9tIHRoZSBwb2QgdGVtcGxhdGUgd2hvc2UgaW1hZ2Ugd2lsbCBiZSB1c2VkIGZvciB0aGUgaG9vayBjb250YWluZXJcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZW52XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImVudmlyb25tZW50IHZhcmlhYmxlcyBwcm92aWRlZCB0byB0aGUgaG9vayBjb250YWluZXJcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0VudlZhclwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVudlZhclwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkV4ZWNOZXdQb2RIb29rXCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19kZXBsb3lfTGlmZWN5Y2xlSG9va1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImV4ZWNOZXdQb2RcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2RlcGxveV9FeGVjTmV3UG9kSG9va1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkV4ZWNOZXdQb2RIb29rXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImZhaWx1cmVQb2xpY3lcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIndoYXQgYWN0aW9uIHRvIHRha2UgaWYgdGhlIGhvb2sgZmFpbHNcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuTGlmZWN5Y2xlSG9va1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfZGVwbG95X1JlY3JlYXRlRGVwbG95bWVudFN0cmF0ZWd5UGFyYW1zXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwicG9zdFwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfZGVwbG95X0xpZmVjeWNsZUhvb2tcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5MaWZlY3ljbGVIb29rXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInByZVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfZGVwbG95X0xpZmVjeWNsZUhvb2tcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5MaWZlY3ljbGVIb29rXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJlY3JlYXRlRGVwbG95bWVudFN0cmF0ZWd5UGFyYW1zXCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19kZXBsb3lfUm9sbGluZ0RlcGxveW1lbnRTdHJhdGVneVBhcmFtc1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImludGVydmFsU2Vjb25kc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSB0aW1lIHRvIHdhaXQgYmV0d2VlbiBwb2xsaW5nIGRlcGxveW1lbnQgc3RhdHVzIGFmdGVyIHVwZGF0ZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiTG9uZ1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJwb3N0XCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfTGlmZWN5Y2xlSG9va1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkxpZmVjeWNsZUhvb2tcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicHJlXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfTGlmZWN5Y2xlSG9va1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkxpZmVjeWNsZUhvb2tcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidGltZW91dFNlY29uZHNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgdGltZSB0byB3YWl0IGZvciB1cGRhdGVzIGJlZm9yZSBnaXZpbmcgdXBcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcIkxvbmdcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidXBkYXRlUGVyY2VudFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBwZXJjZW50YWdlIG9mIHJlcGxpY2FzIHRvIHNjYWxlIHVwIG9yIGRvd24gZWFjaCBpbnRlcnZhbCAobmVnYXRpdmUgdmFsdWUgc3dpdGNoZXMgc2NhbGUgb3JkZXIgdG8gZG93bi91cCBpbnN0ZWFkIG9mIHVwL2Rvd24pXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInVwZGF0ZVBlcmlvZFNlY29uZHNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgdGltZSB0byB3YWl0IGJldHdlZW4gaW5kaXZpZHVhbCBwb2QgdXBkYXRlc1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiTG9uZ1wiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb2xsaW5nRGVwbG95bWVudFN0cmF0ZWd5UGFyYW1zXCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19pbWFnZV9JbWFnZVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImRvY2tlckltYWdlTWFuaWZlc3RcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJhdyBKU09OIG9mIHRoZSBtYW5pZmVzdFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJkb2NrZXJJbWFnZU1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3J1bnRpbWVfUmF3RXh0ZW5zaW9uXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImRvY2tlckltYWdlTWV0YWRhdGFWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJjb252ZXlzIHZlcnNpb24gb2YgdGhlIG9iamVjdFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJkb2NrZXJJbWFnZVJlZmVyZW5jZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3RyaW5nIHRoYXQgY2FuIGJlIHVzZWQgdG8gcHVsbCB0aGlzIGltYWdlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJJbWFnZVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JbWFnZVwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfaW1hZ2VfSW1hZ2VMaXN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBpbWFnZSBvYmplY3RzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfaW1hZ2VfSW1hZ2VcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkltYWdlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkltYWdlTGlzdFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkltYWdlTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc19pbWFnZV9JbWFnZVN0cmVhbVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJJbWFnZVN0cmVhbVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzcGVjXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19pbWFnZV9JbWFnZVN0cmVhbVNwZWNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JbWFnZVN0cmVhbVNwZWNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3RhdHVzXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19pbWFnZV9JbWFnZVN0cmVhbVN0YXR1c1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkltYWdlU3RyZWFtU3RhdHVzXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkltYWdlU3RyZWFtXCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc19pbWFnZV9JbWFnZVN0cmVhbUxpc3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGltYWdlIHN0cmVhbSBvYmplY3RzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfaW1hZ2VfSW1hZ2VTdHJlYW1cIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkltYWdlU3RyZWFtXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkltYWdlU3RyZWFtTGlzdFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkltYWdlU3RyZWFtTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc19pbWFnZV9JbWFnZVN0cmVhbVNwZWNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJkb2NrZXJJbWFnZVJlcG9zaXRvcnlcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsIGZpZWxkIGlmIHNwZWNpZmllZCB0aGlzIHN0cmVhbSBpcyBiYWNrZWQgYnkgYSBEb2NrZXIgcmVwb3NpdG9yeSBvbiB0aGlzIHNlcnZlclwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ0YWdzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm1hcCBhcmJpdHJhcnkgc3RyaW5nIHZhbHVlcyB0byBzcGVjaWZpYyBpbWFnZSBsb2NhdG9yc1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2ltYWdlX05hbWVkVGFnUmVmZXJlbmNlXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5OYW1lZFRhZ1JlZmVyZW5jZVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkltYWdlU3RyZWFtU3BlY1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfaW1hZ2VfSW1hZ2VTdHJlYW1TdGF0dXNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJkb2NrZXJJbWFnZVJlcG9zaXRvcnlcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlcHJlc2VudHMgdGhlIGVmZmVjdGl2ZSBsb2NhdGlvbiB0aGlzIHN0cmVhbSBtYXkgYmUgYWNjZXNzZWQgYXRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidGFnc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJoaXN0b3JpY2FsIHJlY29yZCBvZiBpbWFnZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggdGFnXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfaW1hZ2VfTmFtZWRUYWdFdmVudExpc3RcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk5hbWVkVGFnRXZlbnRMaXN0XCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSW1hZ2VTdHJlYW1TdGF0dXNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2ltYWdlX05hbWVkVGFnRXZlbnRMaXN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiB0YWcgZXZlbnRzIHJlbGF0ZWQgdG8gdGhlIHRhZ1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2ltYWdlX1RhZ0V2ZW50XCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5UYWdFdmVudFwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInRhZ1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHRhZ1wiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5OYW1lZFRhZ0V2ZW50TGlzdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfaW1hZ2VfTmFtZWRUYWdSZWZlcmVuY2VcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhbm5vdGF0aW9uc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYW5ub3RhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGltYWdlcyB1c2luZyB0aGlzIHRhZ1wiLFxyXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYW5ub3RhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGltYWdlcyB1c2luZyB0aGlzIHRhZ1wiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxTdHJpbmdcXHUwMDNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImZyb21cIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJuYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRhZ1wiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5OYW1lZFRhZ1JlZmVyZW5jZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfaW1hZ2VfVGFnRXZlbnRcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJjcmVhdGVkXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ3aGVuIHRoZSBldmVudCB3YXMgY3JlYXRlZFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJkb2NrZXJJbWFnZVJlZmVyZW5jZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIHRvIHB1bGwgdGhpcyBpbWFnZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpbWFnZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGltYWdlXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlRhZ0V2ZW50XCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19vYXV0aF9PQXV0aEFjY2Vzc1Rva2VuXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiYXV0aG9yaXplVG9rZW5cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImNvbnRhaW5zIHRoZSB0b2tlbiB0aGF0IGF1dGhvcml6ZWQgdGhpcyB0b2tlblwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJjbGllbnROYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyZWZlcmVuY2VzIHRoZSBjbGllbnQgdGhhdCBjcmVhdGVkIHRoaXMgdG9rZW5cIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZXhwaXJlc0luXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaXMgdGhlIHNlY29uZHMgZnJvbSBjcmVhdGlvbiB0aW1lIGJlZm9yZSB0aGlzIHRva2VuIGV4cGlyZXNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcIkxvbmdcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIk9BdXRoQWNjZXNzVG9rZW5cIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmVkaXJlY3RVUklcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlZGlyZWN0aW9uIFVSSSBhc3NvY2lhdGVkIHdpdGggdGhlIHRva2VuXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlZnJlc2hUb2tlblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWwgdmFsdWUgYnkgd2hpY2ggdGhpcyB0b2tlbiBjYW4gYmUgcmVuZXdlZFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzY29wZXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiByZXF1ZXN0ZWQgc2NvcGVzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHJlcXVlc3RlZCBzY29wZXNcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ1c2VyTmFtZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidXNlciBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRva2VuXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInVzZXJVSURcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVuaXF1ZSBVSUQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdG9rZW5cIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuT0F1dGhBY2Nlc3NUb2tlblwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3Nfb2F1dGhfT0F1dGhBY2Nlc3NUb2tlbkxpc3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIG9hdXRoIGFjY2VzcyB0b2tlbnNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19vYXV0aF9PQXV0aEFjY2Vzc1Rva2VuXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aEFjY2Vzc1Rva2VuXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIk9BdXRoQWNjZXNzVG9rZW5MaXN0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuT0F1dGhBY2Nlc3NUb2tlbkxpc3RcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3Nfb2F1dGhfT0F1dGhBdXRob3JpemVUb2tlblwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImNsaWVudE5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlZmVyZW5jZXMgdGhlIGNsaWVudCB0aGF0IGNyZWF0ZWQgdGhpcyB0b2tlblwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJleHBpcmVzSW5cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzZWNvbmRzIGZyb20gY3JlYXRpb24gdGltZSBiZWZvcmUgdGhpcyB0b2tlbiBleHBpcmVzXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJPQXV0aEF1dGhvcml6ZVRva2VuXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlZGlyZWN0VVJJXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyZWRpcmVjdGlvbiBVUkkgYXNzb2NpYXRlZCB3aXRoIHRoZSB0b2tlblwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzY29wZXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiByZXF1ZXN0ZWQgc2NvcGVzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHJlcXVlc3RlZCBzY29wZXNcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzdGF0ZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3RhdGUgZGF0YSBmcm9tIHJlcXVlc3RcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidXNlck5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVzZXIgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhpcyB0b2tlblwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ1c2VyVUlEXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ1bmlxdWUgVUlEIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRva2VuLiAgdXNlclVJRCBhbmQgdXNlck5hbWUgbXVzdCBib3RoIG1hdGNoIGZvciB0aGlzIHRva2VuIHRvIGJlIHZhbGlkXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQXV0aG9yaXplVG9rZW5cIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX29hdXRoX09BdXRoQXV0aG9yaXplVG9rZW5MaXN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBvYXV0aCBhdXRob3JpemF0aW9uIHRva2Vuc1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX29hdXRoX09BdXRoQXV0aG9yaXplVG9rZW5cIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQXV0aG9yaXplVG9rZW5cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiT0F1dGhBdXRob3JpemVUb2tlbkxpc3RcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aEF1dGhvcml6ZVRva2VuTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc19vYXV0aF9PQXV0aENsaWVudFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJPQXV0aENsaWVudFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZWRpcmVjdFVSSXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidmFsaWQgcmVkaXJlY3Rpb24gVVJJcyBhc3NvY2lhdGVkIHdpdGggYSBjbGllbnRcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInZhbGlkIHJlZGlyZWN0aW9uIFVSSXMgYXNzb2NpYXRlZCB3aXRoIGEgY2xpZW50XCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmVzcG9uZFdpdGhDaGFsbGVuZ2VzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNsaWVudCB3YW50cyBhdXRoZW50aWNhdGlvbiBuZWVkZWQgcmVzcG9uc2VzIG1hZGUgaW4gdGhlIGZvcm0gb2YgY2hhbGxlbmdlcyBpbnN0ZWFkIG9mIHJlZGlyZWN0c1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzZWNyZXRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVuaXF1ZSBzZWNyZXQgYXNzb2NpYXRlZCB3aXRoIGEgY2xpZW50XCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQ2xpZW50XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc19vYXV0aF9PQXV0aENsaWVudEF1dGhvcml6YXRpb25cIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJjbGllbnROYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyZWZlcmVuY2VzIHRoZSBjbGllbnQgdGhhdCBjcmVhdGVkIHRoaXMgYXV0aG9yaXphdGlvblwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiT0F1dGhDbGllbnRBdXRob3JpemF0aW9uXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInNjb3Blc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGdyYW50ZWQgc2NvcGVzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGdyYW50ZWQgc2NvcGVzXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidXNlck5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVzZXIgbmFtZSB0aGF0IGF1dGhvcml6ZWQgdGhpcyBjbGllbnRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidXNlclVJRFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidW5pcXVlIFVJRCBhc3NvY2lhdGVkIHdpdGggdGhpcyBhdXRob3JpemF0aW9uLiB1c2VyVUlEIGFuZCB1c2VyTmFtZSBtdXN0IGJvdGggbWF0Y2ggZm9yIHRoaXMgYXV0aG9yaXphdGlvbiB0byBiZSB2YWxpZFwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aENsaWVudEF1dGhvcml6YXRpb25cIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX29hdXRoX09BdXRoQ2xpZW50QXV0aG9yaXphdGlvbkxpc3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIG9hdXRoIGNsaWVudCBhdXRob3JpemF0aW9uc1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX29hdXRoX09BdXRoQ2xpZW50QXV0aG9yaXphdGlvblwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuT0F1dGhDbGllbnRBdXRob3JpemF0aW9uXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIk9BdXRoQ2xpZW50QXV0aG9yaXphdGlvbkxpc3RcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aENsaWVudEF1dGhvcml6YXRpb25MaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX29hdXRoX09BdXRoQ2xpZW50TGlzdFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2Ygb2F1dGggY2xpZW50c1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX29hdXRoX09BdXRoQ2xpZW50XCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aENsaWVudFwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJPQXV0aENsaWVudExpc3RcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aENsaWVudExpc3RcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfcHJvamVjdF9Qcm9qZWN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlByb2plY3RcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3BlY1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfcHJvamVjdF9Qcm9qZWN0U3BlY1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlByb2plY3RTcGVjXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInN0YXR1c1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfcHJvamVjdF9Qcm9qZWN0U3RhdHVzXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUHJvamVjdFN0YXR1c1wiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qcm9qZWN0XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc19wcm9qZWN0X1Byb2plY3RMaXN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBwcm9qZWN0c1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3Byb2plY3RfUHJvamVjdFwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUHJvamVjdFwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJQcm9qZWN0TGlzdFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlByb2plY3RMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX3Byb2plY3RfUHJvamVjdFJlcXVlc3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZGVzY3JpcHRpb24gdG8gYXBwbHkgdG8gYSBwcm9qZWN0XCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImRpc3BsYXlOYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJkaXNwbGF5IG5hbWUgdG8gYXBwbHkgdG8gYSBwcm9qZWN0XCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJQcm9qZWN0UmVxdWVzdFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qcm9qZWN0UmVxdWVzdFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfcHJvamVjdF9Qcm9qZWN0U3BlY1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImZpbmFsaXplcnNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYW4gb3BhcXVlIGxpc3Qgb2YgdmFsdWVzIHRoYXQgbXVzdCBiZSBlbXB0eSB0byBwZXJtYW5lbnRseSByZW1vdmUgb2JqZWN0IGZyb20gc3RvcmFnZVwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYW4gb3BhcXVlIGxpc3Qgb2YgdmFsdWVzIHRoYXQgbXVzdCBiZSBlbXB0eSB0byBwZXJtYW5lbnRseSByZW1vdmUgb2JqZWN0IGZyb20gc3RvcmFnZVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlByb2plY3RTcGVjXCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19wcm9qZWN0X1Byb2plY3RTdGF0dXNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJwaGFzZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicGhhc2UgaXMgdGhlIGN1cnJlbnQgbGlmZWN5Y2xlIHBoYXNlIG9mIHRoZSBwcm9qZWN0XCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlByb2plY3RTdGF0dXNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX3JvdXRlX1JvdXRlXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlJvdXRlXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInNwZWNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3JvdXRlX1JvdXRlU3BlY1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvdXRlU3BlY1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3JvdXRlX1JvdXRlU3RhdHVzXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm91dGVTdGF0dXNcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm91dGVcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX3JvdXRlX1JvdXRlTGlzdFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2Ygcm91dGVzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3Nfcm91dGVfUm91dGVcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvdXRlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlJvdXRlTGlzdFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvdXRlTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc19yb3V0ZV9Sb3V0ZVNwZWNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJob3N0XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbDogYWxpYXMvZG5zIHRoYXQgcG9pbnRzIHRvIHRoZSBzZXJ2aWNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInBhdGhcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsOiBwYXRoIHRoYXQgdGhlIHJvdXRlciB3YXRjaGVzIHRvIHJvdXRlIHRyYWZmaWMgdG8gdGhlIHNlcnZpY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidGxzXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19yb3V0ZV9UTFNDb25maWdcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5UTFNDb25maWdcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidG9cIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb3V0ZVNwZWNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX3JvdXRlX1JvdXRlU3RhdHVzXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm91dGVTdGF0dXNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX3JvdXRlX1RMU0NvbmZpZ1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImNhQ2VydGlmaWNhdGVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInByb3ZpZGVzIHRoZSBjZXJ0IGF1dGhvcml0eSBjZXJ0aWZpY2F0ZSBjb250ZW50c1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJjZXJ0aWZpY2F0ZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicHJvdmlkZXMgY2VydGlmaWNhdGUgY29udGVudHNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZGVzdGluYXRpb25DQUNlcnRpZmljYXRlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJwcm92aWRlcyB0aGUgY29udGVudHMgb2YgdGhlIGNhIGNlcnRpZmljYXRlIG9mIHRoZSBmaW5hbCBkZXN0aW5hdGlvbi4gIFdoZW4gdXNpbmcgcmUtZW5jcnlwdCB0ZXJtaW5hdGlvbiB0aGlzIGZpbGUgc2hvdWxkIGJlIHByb3ZpZGVkIGluIG9yZGVyIHRvIGhhdmUgcm91dGVycyB1c2UgaXQgZm9yIGhlYWx0aCBjaGVja3Mgb24gdGhlIHNlY3VyZSBjb25uZWN0aW9uXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtleVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicHJvdmlkZXMga2V5IGZpbGUgY29udGVudHNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidGVybWluYXRpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImluZGljYXRlcyB0ZXJtaW5hdGlvbiB0eXBlLiAgaWYgbm90IHNldFwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5UTFNDb25maWdcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX3RlbXBsYXRlX1BhcmFtZXRlclwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbDogZGVzY3JpYmVzIHRoZSBwYXJhbWV0ZXJcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZnJvbVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaW5wdXQgdmFsdWUgZm9yIHRoZSBnZW5lcmF0b3JcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZ2VuZXJhdGVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsOiBnZW5lcmF0ZSBzcGVjaWZpZXMgdGhlIGdlbmVyYXRvciB0byBiZSB1c2VkIHRvIGdlbmVyYXRlIHJhbmRvbSBzdHJpbmcgZnJvbSBhbiBpbnB1dCB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIGZyb20gZmllbGQuICB0aGUgcmVzdWx0IHN0cmluZyBpcyBzdG9yZWQgaW4gdGhlIHZhbHVlIGZpZWxkLiBpZiBub3Qgc3BlY2lmaWVkXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIHBhcmFtZXRlclwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZXF1aXJlZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImluZGljYXRlcyB0aGUgcGFyYW1ldGVyIG11c3QgaGF2ZSBhIG5vbi1lbXB0eSB2YWx1ZSBvciBiZSBnZW5lcmF0ZWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidmFsdWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsOiBob2xkcyB0aGUgcGFyYW1ldGVyIGRhdGEuICBpZiBzcGVjaWZpZWRcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUGFyYW1ldGVyXCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc190ZW1wbGF0ZV9UZW1wbGF0ZVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJUZW1wbGF0ZVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImxhYmVsc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWw6IGxpc3Qgb2YgbGFibGVzIHRoYXQgYXJlIGFwcGxpZWQgdG8gZXZlcnkgb2JqZWN0IGR1cmluZyB0aGUgdGVtcGxhdGUgdG8gY29uZmlnIHRyYW5zZm9ybWF0aW9uXCIsXHJcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbDogbGlzdCBvZiBsYWJsZXMgdGhhdCBhcmUgYXBwbGllZCB0byBldmVyeSBvYmplY3QgZHVyaW5nIHRoZSB0ZW1wbGF0ZSB0byBjb25maWcgdHJhbnNmb3JtYXRpb25cIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsU3RyaW5nXFx1MDAzZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwib2JqZWN0c1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIG9iamVjdHMgdG8gaW5jbHVkZSBpbiB0aGUgdGVtcGxhdGVcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3J1bnRpbWVfUmF3RXh0ZW5zaW9uXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJwYXJhbWV0ZXJzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsOiBsaXN0IG9mIHBhcmFtZXRlcnMgdXNlZCBkdXJpbmcgdGVtcGxhdGUgdG8gY29uZmlnIHRyYW5zZm9ybWF0aW9uXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfdGVtcGxhdGVfUGFyYW1ldGVyXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5QYXJhbWV0ZXJcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5UZW1wbGF0ZVwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfdGVtcGxhdGVfVGVtcGxhdGVMaXN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiB0ZW1wbGF0ZXNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc190ZW1wbGF0ZV9UZW1wbGF0ZVwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiVGVtcGxhdGVMaXN0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuVGVtcGxhdGVMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX3VzZXJfR3JvdXBcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiR3JvdXBcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidXNlcnNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiB1c2VycyBpbiB0aGlzIGdyb3VwXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHVzZXJzIGluIHRoaXMgZ3JvdXBcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Hcm91cFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfdXNlcl9Hcm91cExpc3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGdyb3Vwc1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3VzZXJfR3JvdXBcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkdyb3VwXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkdyb3VwTGlzdFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkdyb3VwTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc191c2VyX0lkZW50aXR5XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZXh0cmFcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImV4dHJhIGluZm9ybWF0aW9uIGZvciB0aGlzIGlkZW50aXR5XCIsXHJcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJleHRyYSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBpZGVudGl0eVwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxTdHJpbmdcXHUwMDNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJJZGVudGl0eVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJwcm92aWRlck5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNvdXJjZSBvZiBpZGVudGl0eSBpbmZvcm1hdGlvblwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJwcm92aWRlclVzZXJOYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ1bmlxdWVseSByZXByZXNlbnRzIHRoaXMgaWRlbnRpdHkgaW4gdGhlIHNjb3BlIG9mIHRoZSBwcm92aWRlclwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ1c2VyXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSWRlbnRpdHlcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX3VzZXJfSWRlbnRpdHlMaXN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBpZGVudGl0aWVzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfdXNlcl9JZGVudGl0eVwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSWRlbnRpdHlcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiSWRlbnRpdHlMaXN0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSWRlbnRpdHlMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX3VzZXJfVXNlclwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImZ1bGxOYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJmdWxsIG5hbWUgb2YgdXNlclwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJncm91cHNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBncm91cHNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgZ3JvdXBzXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaWRlbnRpdGllc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGlkZW50aXRpZXNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgaWRlbnRpdGllc1wiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJVc2VyXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlVzZXJcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX3VzZXJfVXNlckxpc3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHVzZXJzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfdXNlcl9Vc2VyXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Vc2VyXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlVzZXJMaXN0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuVXNlckxpc3RcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwic3BldGVyX2luZl9EZWNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZWNcIlxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICBcIkJhc2VLdWJlcm5ldGVzTGlzdFwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5CYXNlS3ViZXJuZXRlc0xpc3RcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIkJ1aWxkQ29uZmlnTGlzdFwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZENvbmZpZ0xpc3RcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkQ29uZmlnTGlzdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiQnVpbGRMaXN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX0J1aWxkTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRMaXN0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJCdWlsZFJlcXVlc3RcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRSZXF1ZXN0XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFJlcXVlc3RcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIkNsdXN0ZXJQb2xpY3lcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9DbHVzdGVyUG9saWN5XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUG9saWN5XCJcclxuICAgICAgfSxcclxuICAgICAgXCJDbHVzdGVyUG9saWN5QmluZGluZ1wiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX0NsdXN0ZXJQb2xpY3lCaW5kaW5nXCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUG9saWN5QmluZGluZ1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiQ2x1c3RlclBvbGljeUJpbmRpbmdMaXN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fQ2x1c3RlclBvbGljeUJpbmRpbmdMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUG9saWN5QmluZGluZ0xpc3RcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIkNsdXN0ZXJQb2xpY3lMaXN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fQ2x1c3RlclBvbGljeUxpc3RcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJQb2xpY3lMaXN0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJDbHVzdGVyUm9sZUJpbmRpbmdcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9DbHVzdGVyUm9sZUJpbmRpbmdcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJSb2xlQmluZGluZ1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiQ2x1c3RlclJvbGVCaW5kaW5nTGlzdFwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX0NsdXN0ZXJSb2xlQmluZGluZ0xpc3RcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJSb2xlQmluZGluZ0xpc3RcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIkNvbmZpZ1wiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX2NvbmZpZ19Db25maWdcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Db25maWdcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIkNvbnRhaW5lclN0YXR1c1wiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0NvbnRhaW5lclN0YXR1c1wiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclN0YXR1c1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiRGVwbG95bWVudENvbmZpZ0xpc3RcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfZGVwbG95X0RlcGxveW1lbnRDb25maWdMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50Q29uZmlnTGlzdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiRW5kcG9pbnRzXCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW5kcG9pbnRzXCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRW5kcG9pbnRzXCJcclxuICAgICAgfSxcclxuICAgICAgXCJFbmRwb2ludHNMaXN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW5kcG9pbnRzTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVuZHBvaW50c0xpc3RcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIkVudlZhclwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0VudlZhclwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVudlZhclwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiRXZlbnRMaXN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRXZlbnRMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRXZlbnRMaXN0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJHcm91cFwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc191c2VyX0dyb3VwXCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Hcm91cFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiR3JvdXBMaXN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3VzZXJfR3JvdXBMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Hcm91cExpc3RcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIklkZW50aXR5XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3VzZXJfSWRlbnRpdHlcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLklkZW50aXR5XCJcclxuICAgICAgfSxcclxuICAgICAgXCJJZGVudGl0eUxpc3RcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfdXNlcl9JZGVudGl0eUxpc3RcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLklkZW50aXR5TGlzdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiSW1hZ2VMaXN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2ltYWdlX0ltYWdlTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSW1hZ2VMaXN0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJJbWFnZVN0cmVhbUxpc3RcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfaW1hZ2VfSW1hZ2VTdHJlYW1MaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JbWFnZVN0cmVhbUxpc3RcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIkxvY2FsU3ViamVjdEFjY2Vzc1Jldmlld1wiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX0xvY2FsU3ViamVjdEFjY2Vzc1Jldmlld1wiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuTG9jYWxTdWJqZWN0QWNjZXNzUmV2aWV3XCJcclxuICAgICAgfSxcclxuICAgICAgXCJOYW1lc3BhY2VcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19OYW1lc3BhY2VcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lc3BhY2VcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIk5hbWVzcGFjZUxpc3RcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19OYW1lc3BhY2VMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZXNwYWNlTGlzdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiTm9kZVwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX05vZGVcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ob2RlXCJcclxuICAgICAgfSxcclxuICAgICAgXCJOb2RlTGlzdFwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX05vZGVMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTm9kZUxpc3RcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIk9BdXRoQWNjZXNzVG9rZW5cIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3Nfb2F1dGhfT0F1dGhBY2Nlc3NUb2tlblwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuT0F1dGhBY2Nlc3NUb2tlblwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiT0F1dGhBY2Nlc3NUb2tlbkxpc3RcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3Nfb2F1dGhfT0F1dGhBY2Nlc3NUb2tlbkxpc3RcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQWNjZXNzVG9rZW5MaXN0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJPQXV0aEF1dGhvcml6ZVRva2VuXCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX29hdXRoX09BdXRoQXV0aG9yaXplVG9rZW5cIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQXV0aG9yaXplVG9rZW5cIlxyXG4gICAgICB9LFxyXG4gICAgICBcIk9BdXRoQXV0aG9yaXplVG9rZW5MaXN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX29hdXRoX09BdXRoQXV0aG9yaXplVG9rZW5MaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aEF1dGhvcml6ZVRva2VuTGlzdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiT0F1dGhDbGllbnRcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3Nfb2F1dGhfT0F1dGhDbGllbnRcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQ2xpZW50XCJcclxuICAgICAgfSxcclxuICAgICAgXCJPQXV0aENsaWVudEF1dGhvcml6YXRpb25cIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3Nfb2F1dGhfT0F1dGhDbGllbnRBdXRob3JpemF0aW9uXCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aENsaWVudEF1dGhvcml6YXRpb25cIlxyXG4gICAgICB9LFxyXG4gICAgICBcIk9BdXRoQ2xpZW50QXV0aG9yaXphdGlvbkxpc3RcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3Nfb2F1dGhfT0F1dGhDbGllbnRBdXRob3JpemF0aW9uTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuT0F1dGhDbGllbnRBdXRob3JpemF0aW9uTGlzdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiT0F1dGhDbGllbnRMaXN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX29hdXRoX09BdXRoQ2xpZW50TGlzdFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuT0F1dGhDbGllbnRMaXN0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJPYmplY3RNZXRhXCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIlBlcnNpc3RlbnRWb2x1bWVcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lXCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUGVyc2lzdGVudFZvbHVtZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiUGVyc2lzdGVudFZvbHVtZUNsYWltXCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZUNsYWltXCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUGVyc2lzdGVudFZvbHVtZUNsYWltXCJcclxuICAgICAgfSxcclxuICAgICAgXCJQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1MaXN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZUNsYWltTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVDbGFpbUxpc3RcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIlBlcnNpc3RlbnRWb2x1bWVMaXN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZUxpc3RcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lTGlzdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiUG9kTGlzdFwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1BvZExpc3RcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Qb2RMaXN0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJQb2xpY3lcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Qb2xpY3lcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlBvbGljeVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiUG9saWN5QmluZGluZ1wiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX1BvbGljeUJpbmRpbmdcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlBvbGljeUJpbmRpbmdcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIlBvbGljeUJpbmRpbmdMaXN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fUG9saWN5QmluZGluZ0xpc3RcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlBvbGljeUJpbmRpbmdMaXN0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJQb2xpY3lMaXN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fUG9saWN5TGlzdFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUG9saWN5TGlzdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiUHJvamVjdFwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19wcm9qZWN0X1Byb2plY3RcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlByb2plY3RcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIlByb2plY3RMaXN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3Byb2plY3RfUHJvamVjdExpc3RcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlByb2plY3RMaXN0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJQcm9qZWN0UmVxdWVzdFwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19wcm9qZWN0X1Byb2plY3RSZXF1ZXN0XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qcm9qZWN0UmVxdWVzdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiUXVhbnRpdHlcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19yZXNvdXJjZV9RdWFudGl0eVwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XCJcclxuICAgICAgfSxcclxuICAgICAgXCJSZXBsaWNhdGlvbkNvbnRyb2xsZXJMaXN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUmVwbGljYXRpb25Db250cm9sbGVyTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlcGxpY2F0aW9uQ29udHJvbGxlckxpc3RcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIlJlc291cmNlUXVvdGFcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SZXNvdXJjZVF1b3RhXCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VRdW90YVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiUmVzb3VyY2VRdW90YUxpc3RcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SZXNvdXJjZVF1b3RhTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlc291cmNlUXVvdGFMaXN0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJSb2xlXCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fUm9sZVwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm9sZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiUm9sZUJpbmRpbmdcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Sb2xlQmluZGluZ1wiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm9sZUJpbmRpbmdcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIlJvbGVCaW5kaW5nTGlzdFwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX1JvbGVCaW5kaW5nTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm9sZUJpbmRpbmdMaXN0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJSb2xlTGlzdFwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX1JvbGVMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb2xlTGlzdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiUm9vdFBhdGhzXCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2FwaV9Sb290UGF0aHNcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Sb290UGF0aHNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIlJvdXRlTGlzdFwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19yb3V0ZV9Sb3V0ZUxpc3RcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvdXRlTGlzdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiU2VjcmV0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU2VjcmV0XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjcmV0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJTZWNyZXRMaXN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU2VjcmV0TGlzdFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlY3JldExpc3RcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIlNlY3VyaXR5Q29udGV4dENvbnN0cmFpbnRzXCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZWN1cml0eUNvbnRleHRDb25zdHJhaW50c1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNMaXN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNMaXN0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJTZXJ2aWNlQWNjb3VudFwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NlcnZpY2VBY2NvdW50XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VydmljZUFjY291bnRcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIlNlcnZpY2VBY2NvdW50TGlzdFwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NlcnZpY2VBY2NvdW50TGlzdFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlcnZpY2VBY2NvdW50TGlzdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiU2VydmljZUxpc3RcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZXJ2aWNlTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlcnZpY2VMaXN0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJTdGF0dXNcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TdGF0dXNcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TdGF0dXNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIlN1YmplY3RBY2Nlc3NSZXZpZXdcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9TdWJqZWN0QWNjZXNzUmV2aWV3XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5TdWJqZWN0QWNjZXNzUmV2aWV3XCJcclxuICAgICAgfSxcclxuICAgICAgXCJTdWJqZWN0QWNjZXNzUmV2aWV3UmVzcG9uc2VcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9TdWJqZWN0QWNjZXNzUmV2aWV3UmVzcG9uc2VcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlN1YmplY3RBY2Nlc3NSZXZpZXdSZXNwb25zZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiVGFnRXZlbnRcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfaW1hZ2VfVGFnRXZlbnRcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlRhZ0V2ZW50XCJcclxuICAgICAgfSxcclxuICAgICAgXCJUZW1wbGF0ZVwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc190ZW1wbGF0ZV9UZW1wbGF0ZVwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuVGVtcGxhdGVcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIlRlbXBsYXRlTGlzdFwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc190ZW1wbGF0ZV9UZW1wbGF0ZUxpc3RcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlRlbXBsYXRlTGlzdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiVXNlclwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc191c2VyX1VzZXJcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlVzZXJcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIlVzZXJMaXN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3VzZXJfVXNlckxpc3RcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlVzZXJMaXN0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJXYXRjaEV2ZW50XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfd2F0Y2hfV2F0Y2hFdmVudFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLldhdGNoRXZlbnRcIlxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlXHJcbiAgfVxyXG5cclxuXHJcbn0iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwic2NoZW1hLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG4gIFxyXG4gIFxyXG4gIHZhciBoaWRkZW5Qcm9wZXJ0aWVzID0gWydzdGF0dXMnLCAnZGVsZXRpb25UaW1lc3RhbXAnXTtcclxuXHJcbiAgZnVuY3Rpb24gd2l0aFByb3BlcnR5KHNjaGVtYTphbnksIG5hbWU6c3RyaW5nLCBhY3Rpb246KGFueSkgPT4gdm9pZCkge1xyXG4gICAgaWYgKHNjaGVtYS5wcm9wZXJ0aWVzW25hbWVdKSB7XHJcbiAgICAgIGFjdGlvbihzY2hlbWEucHJvcGVydGllc1tuYW1lXSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIGZ1bmN0aW9uIGhpZGVQcm9wZXJ0aWVzKHNjaGVtYSkge1xyXG4gICAgXy5mb3JFYWNoKGhpZGRlblByb3BlcnRpZXMsIChwcm9wZXJ0eSkgPT4ge1xyXG4gICAgICB3aXRoUHJvcGVydHkoc2NoZW1hLCBwcm9wZXJ0eSwgKHByb3BlcnR5KSA9PiB7XHJcbiAgICAgICAgcHJvcGVydHkuaGlkZGVuID0gdHJ1ZTtcclxuICAgICAgfSlcclxuICAgIH0pO1xyXG4gIH1cclxuICBcclxuICBfbW9kdWxlLmZhY3RvcnkoJ0t1YmVybmV0ZXNTY2hlbWEnLCBbJ1NjaGVtYVJlZ2lzdHJ5JywgKHNjaGVtYXM6SGF3dGlvRm9ybXMuU2NoZW1hUmVnaXN0cnkpID0+IHtcclxuICAgIGNvbmZpZ3VyZVNjaGVtYSgpO1xyXG4gICAgXHJcbiAgICBzY2hlbWFzLmFkZExpc3RlbmVyKFwiazhzIHNjaGVtYSBjdXN0b21pemVyXCIsIChuYW1lLCBzY2hlbWEpID0+IHtcclxuICAgICAgaWYgKHNjaGVtYS5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgaWYgKHNjaGVtYS5wcm9wZXJ0aWVzLm5hbWUpIHtcclxuICAgICAgICAgIHNjaGVtYS5jb250cm9scyA9IFsnbmFtZScsICcqJ107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdpdGhQcm9wZXJ0eShzY2hlbWEsICdwb3J0YWxJUCcsIChwcm9wZXJ0eSkgPT4ge1xyXG4gICAgICAgICAgcHJvcGVydHkubGFiZWwgPSBcIlBvcnRhbCBJUFwiXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgd2l0aFByb3BlcnR5KHNjaGVtYSwgJ3B1YmxpY0lQcycsIChwcm9wZXJ0eSkgPT4ge1xyXG4gICAgICAgICAgcHJvcGVydHkubGFiZWwgPSBcIlB1YmxpYyBJUHNcIlxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHdpdGhQcm9wZXJ0eShzY2hlbWEsICdTcGVjJywgKHByb3BlcnR5KSA9PiB7XHJcbiAgICAgICAgICBwcm9wZXJ0eS5sYWJlbCA9ICdmYWxzZSc7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgd2l0aFByb3BlcnR5KHNjaGVtYSwgJ01ldGFkYXRhJywgKHByb3BlcnR5KSA9PiB7XHJcbiAgICAgICAgICBwcm9wZXJ0eS5sYWJlbCA9ICdmYWxzZSc7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaGlkZVByb3BlcnRpZXMoc2NoZW1hKTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgaWYgKF8uZW5kc1dpdGgobmFtZSwgXCJTZXJ2aWNlU3BlY1wiKSkge1xyXG4gICAgICAgIHNjaGVtYS5jb250cm9scyA9IFtcInBvcnRhbElQXCIsIFwiY3JlYXRlRXh0ZXJuYWxMb2FkQmFsYW5jZXJcIiwgXCJzZXNzaW9uQWZmaW5pdHlcIiwgXCJwdWJsaWNJUHNcIiwgXCJwb3J0c1wiLCBcInNlbGVjdG9yXCIsIFwiKlwiXTtcclxuICAgICAgICB3aXRoUHJvcGVydHkoc2NoZW1hLCAnc2Vzc2lvbkFmZmluaXR5JywgKHByb3BlcnR5KSA9PiB7XHJcbiAgICAgICAgICBsb2cuZGVidWcoXCJTY2hlbWE6IFwiLCBzY2hlbWEpO1xyXG4gICAgICAgICAgcHJvcGVydHkuZW51bSA9IFsnTm9uZScsICdDbGllbnRJUCddO1xyXG4gICAgICAgICAgcHJvcGVydHkuZGVmYXVsdCA9ICdOb25lJztcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgaWYgKF8uZW5kc1dpdGgobmFtZSwgXCJTZXJ2aWNlXCIpKSB7XHJcbiAgICAgICAgc2NoZW1hLmNvbnRyb2xzID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHNjaGVtYS50YWJzID0ge1xyXG4gICAgICAgICAgJ0Jhc2ljIEluZm9ybWF0aW9uJzogWydtZXRhZGF0YSddLFxyXG4gICAgICAgICAgJ0RldGFpbHMnOiBbJyonXVxyXG4gICAgICAgIH1cclxuICAgICAgICBsb2cuZGVidWcoXCJOYW1lOiBcIiwgbmFtZSwgXCIgU2NoZW1hOiBcIiwgc2NoZW1hKTtcclxuICAgICAgfVxyXG4gICAgIFxyXG4gICAgfSk7XHJcbiAgICBcclxuICAgIFxyXG4gICAgc2NoZW1hcy5hZGRTY2hlbWEoJ2t1YmVybmV0ZXMnLCA8YW55PiBzY2hlbWEpO1xyXG4gICAgLy8gbm93IGxldHMgaXRlcmF0ZSBhbmQgYWRkIGFsbCB0aGUgZGVmaW5pdGlvbnMgdG9vXHJcbiAgICBhbmd1bGFyLmZvckVhY2goc2NoZW1hLmRlZmluaXRpb25zLCAoZGVmaW5pdGlvbiwgdHlwZU5hbWUpID0+IHtcclxuICAgICAgLy9zY2hlbWFzLmFkZFNjaGVtYSh0eXBlTmFtZSwgZGVmaW5pdGlvbik7XHJcbiAgICAgIHNjaGVtYXMuYWRkU2NoZW1hKFwiIy9kZWZpbml0aW9ucy9cIiArIHR5cGVOYW1lLCBkZWZpbml0aW9uKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHNjaGVtYTtcclxuICB9XSk7XHJcblxyXG5cclxuICBcclxufSIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICAvLyBmYWNhZGUgdGhpcyB0byB0aGUgd2F0Y2hlciBzZXJ2aWNlXHJcbiAgY2xhc3MgS3ViZXJuZXRlc1N0YXRlSW1wbCBpbXBsZW1lbnRzIEt1YmVybmV0ZXNTdGF0ZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHdhdGNoZXI6V2F0Y2hlclNlcnZpY2UpIHtcclxuICAgIH1cclxuICAgIGdldCBuYW1lc3BhY2VzKCk6QXJyYXk8c3RyaW5nPiB7XHJcbiAgICAgIHJldHVybiBfLm1hcCh0aGlzLndhdGNoZXIuZ2V0T2JqZWN0cyhXYXRjaFR5cGVzLk5BTUVTUEFDRVMpLCAobmFtZXNwYWNlKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG5hbWVzcGFjZS5tZXRhZGF0YS5uYW1lO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGdldCBzZWxlY3RlZE5hbWVzcGFjZSgpOnN0cmluZyB7XHJcbiAgICAgIHJldHVybiB0aGlzLndhdGNoZXIuZ2V0TmFtZXNwYWNlKCk7XHJcbiAgICB9XHJcbiAgICBzZXQgc2VsZWN0ZWROYW1lc3BhY2UobmFtZXNwYWNlOnN0cmluZykge1xyXG4gICAgICB0aGlzLndhdGNoZXIuc2V0TmFtZXNwYWNlKG5hbWVzcGFjZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBfbW9kdWxlLmZhY3RvcnkoJ0t1YmVybmV0ZXNTdGF0ZScsIFsnV2F0Y2hlclNlcnZpY2UnLCAod2F0Y2hlcjpXYXRjaGVyU2VydmljZSkgPT4ge1xyXG4gICAgcmV0dXJuIG5ldyBLdWJlcm5ldGVzU3RhdGVJbXBsKHdhdGNoZXIpO1xyXG4gIH1dKTtcclxuXHJcbiAgLy8gVE9ETyB0aGlzIGRvZXNuJ3QgbmVlZCB0byBiZSBhIHNlcnZpY2UgcmVhbGx5XHJcbiAgX21vZHVsZS5mYWN0b3J5KCdLdWJlcm5ldGVzQXBpVVJMJywgKCkgPT4ga3ViZXJuZXRlc0FwaVVybCgpKTtcclxuXHJcbiAgLy8gVE9ETyB3ZSdsbCBnZXQgcmlkIG9mIHRoaXMuLi5cclxuICBfbW9kdWxlLmZhY3RvcnkoJ0t1YmVybmV0ZXNWZXJzaW9uJywgWygpID0+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHF1ZXJ5OiAoKSA9PiBudWxsXHJcbiAgICB9XHJcbiAgfV0pO1xyXG5cclxuICAvLyBUT0RPIGxldCdzIG1vdmUgdGhlc2UgaW50byBLdWJlcm5ldGVzTW9kZWwgc28gY29udHJvbGxlcnMgZG9uJ3QgaGF2ZSB0byBpbmplY3QgdGhlbSBzZXBhcmF0ZWx5XHJcbiAgX21vZHVsZS5mYWN0b3J5KCdLdWJlcm5ldGVzUG9kcycsIFsnS3ViZXJuZXRlc01vZGVsJywgKEt1YmVybmV0ZXNNb2RlbCkgPT4ge1xyXG4gICAgcmV0dXJuIEt1YmVybmV0ZXNNb2RlbFsncG9kc1Jlc291cmNlJ107XHJcbiAgfV0pO1xyXG5cclxuICBfbW9kdWxlLmZhY3RvcnkoJ0t1YmVybmV0ZXNSZXBsaWNhdGlvbkNvbnRyb2xsZXJzJywgWydLdWJlcm5ldGVzTW9kZWwnLCAoS3ViZXJuZXRlc01vZGVsKSA9PiB7XHJcbiAgICByZXR1cm4gS3ViZXJuZXRlc01vZGVsWydyZXBsaWNhdGlvbmNvbnRyb2xsZXJzUmVzb3VyY2UnXTtcclxuICB9XSk7XHJcblxyXG4gIF9tb2R1bGUuZmFjdG9yeSgnS3ViZXJuZXRlc1NlcnZpY2VzJywgWydLdWJlcm5ldGVzTW9kZWwnLCAoS3ViZXJuZXRlc01vZGVsKSA9PiB7XHJcbiAgICByZXR1cm4gS3ViZXJuZXRlc01vZGVsWydzZXJ2aWNlc1Jlc291cmNlJ107XHJcbiAgfV0pO1xyXG5cclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzTW9kZWwudHNcIi8+XHJcbi8vLyBcclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgZXhwb3J0IHZhciBGaWxlRHJvcENvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiRmlsZURyb3BDb250cm9sbGVyXCIsIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkZpbGVVcGxvYWRlclwiLCAnJGh0dHAnLCAoJHNjb3BlLCBtb2RlbDpLdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBGaWxlVXBsb2FkZXIsICRodHRwOm5nLklIdHRwU2VydmljZSkgPT4ge1xyXG5cclxuICAgICAgdmFyIGxvZyA9IExvZ2dlci5nZXQoJ2t1YmVybmV0ZXMtZmlsZS11cGxvYWRlcicpOyAgICAgIFxyXG5cclxuICAgICAgdmFyIHVwbG9hZGVyID0gJHNjb3BlLnVwbG9hZGVyID0gPEZpbGVVcGxvYWQuRmlsZVVwbG9hZGVyPiBuZXcgRmlsZVVwbG9hZGVyKDxGaWxlVXBsb2FkLklPcHRpb25zPntcclxuICAgICAgICBhdXRvVXBsb2FkOiBmYWxzZSxcclxuICAgICAgICByZW1vdmVBZnRlclVwbG9hZDogdHJ1ZSxcclxuICAgICAgICB1cmw6IGt1YmVybmV0ZXNBcGlVcmwoKVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgICRzY29wZS51cGxvYWRlci5vbkFmdGVyQWRkaW5nRmlsZSA9IChmaWxlKSA9PiB7XHJcbiAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgIGlmIChyZWFkZXIucmVhZHlTdGF0ZSA9PT0gMikge1xyXG4gICAgICAgICAgICBsb2cuZGVidWcoXCJGaWxlIGFkZGVkOiBcIiwgZmlsZSk7ICAgICAgICBcclxuICAgICAgICAgICAgdmFyIGRhdGEgPSByZWFkZXIucmVzdWx0O1xyXG4gICAgICAgICAgICB2YXIgb2JqID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKF8uZW5kc1dpdGgoZmlsZS5fZmlsZS5uYW1lLCAnLmpzb24nKSkge1xyXG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIlBhcnNpbmcgSlNPTiBmaWxlXCIpO1xyXG4gICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBvYmogPSBhbmd1bGFyLmZyb21Kc29uKGRhdGEpO1xyXG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiRmFpbGVkIHRvIHJlYWQgZHJvcHBlZCBmaWxlIFwiLCBmaWxlLl9maWxlLm5hbWUsIFwiOiBcIiwgZXJyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXy5lbmRzV2l0aChmaWxlLl9maWxlLm5hbWUsICcueWFtbCcpKSB7XHJcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiUGFyc2luZyBZQU1MIGZpbGVcIik7XHJcbiAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIG9iaiA9IGpzeWFtbC5sb2FkKGRhdGEpO1xyXG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiRmFpbGVkIHRvIHJlYWQgZHJvcHBlZCBmaWxlIFwiLCBmaWxlLl9maWxlLm5hbWUsIFwiOiBcIiwgZXJyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiVW5rbm93biBmaWxlIHR5cGUgZm9yIGZpbGU6IFwiLCBmaWxlLl9maWxlLm5hbWUpO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsb2cuZGVidWcoXCJEcm9wcGVkIG9iamVjdDogXCIsIG9iaik7XHJcbiAgICAgICAgICAgIGlmICghS3ViZXJuZXRlc0FQSS5nZXROYW1lc3BhY2Uob2JqKSkge1xyXG4gICAgICAgICAgICAgIG9iai5tZXRhZGF0YS5uYW1lc3BhY2UgPSBtb2RlbC5jdXJyZW50TmFtZXNwYWNlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgS3ViZXJuZXRlc0FQSS5wdXQoe1xyXG4gICAgICAgICAgICAgIG9iamVjdDogb2JqLFxyXG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBDb3JlLm5vdGlmaWNhdGlvbihcInN1Y2Nlc3NcIiwgXCJBcHBsaWVkIFwiICsgZmlsZS5fZmlsZS5uYW1lKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsb2cuaW5mbyhcIkdvdCBlcnJvciBhcHBseWluZ1wiLCBmaWxlLl9maWxlLm5hbWUsIFwiOiBcIiwgZXJyKTtcclxuICAgICAgICAgICAgICAgIENvcmUubm90aWZpY2F0aW9uKFwid2FybmluZ1wiLCBcIkZhaWxlZCB0byBhcHBseSBcIiArIGZpbGUuX2ZpbGUubmFtZSArIFwiLCBlcnJvcjogXCIgKyBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZS5fZmlsZSk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICAkc2NvcGUudXBsb2FkZXIub25CZWZvcmVVcGxvYWRJdGVtID0gKGl0ZW0pID0+IHtcclxuICAgICAgICBsb2cuZGVidWcoXCJVcGxvYWRpbmc6IFwiLCBpdGVtKTtcclxuICAgICAgICAvL0NvcmUubm90aWZpY2F0aW9uKCdpbmZvJywgJ1VwbG9hZGluZyAnICsgaXRlbSk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICAkc2NvcGUudXBsb2FkZXIub25TdWNjZXNzSXRlbSA9IChpdGVtOkZpbGVVcGxvYWQuSUZpbGVJdGVtKSA9PiB7XHJcbiAgICAgICAgbG9nLmRlYnVnKFwib25TdWNjZXNzSXRlbTogXCIsIGl0ZW0pO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgJHNjb3BlLnVwbG9hZGVyLm9uRXJyb3JJdGVtID0gKGl0ZW0sIHJlc3BvbnNlLCBzdGF0dXMpID0+IHtcclxuICAgICAgICBsb2cuZGVidWcoXCJGYWlsZWQgdG8gYXBwbHksIHJlc3BvbnNlOiBcIiwgcmVzcG9uc2UsIFwiIHN0YXR1czogXCIsIHN0YXR1cyk7XHJcbiAgICAgIH1cclxuXHJcbiAgfV0pO1xyXG5cdFxyXG5cdGV4cG9ydCB2YXIgTmFtZXNwYWNlQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoJ05hbWVzcGFjZUNvbnRyb2xsZXInLCBbJyRzY29wZScsICdXYXRjaGVyU2VydmljZScsICgkc2NvcGUsIHdhdGNoZXI6V2F0Y2hlclNlcnZpY2UpID0+IHtcclxuXHRcdCRzY29wZS5uYW1lc3BhY2VzID0gd2F0Y2hlci5nZXRPYmplY3RzKCduYW1lc3BhY2VzJyk7XHJcblx0XHQkc2NvcGUuJHdhdGNoQ29sbGVjdGlvbignbmFtZXNwYWNlcycsIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcclxuXHRcdFx0aWYgKG5ld1ZhbHVlICE9PSBvbGRWYWx1ZSkge1xyXG5cdFx0XHRcdCRzY29wZS5uYW1lc3BhY2UgPSB3YXRjaGVyLmdldE5hbWVzcGFjZSgpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdCRzY29wZS4kd2F0Y2goJ25hbWVzcGFjZScsIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcclxuXHRcdFx0aWYgKG5ld1ZhbHVlICE9PSBvbGRWYWx1ZSkge1xyXG5cdFx0XHRcdGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUpIHtcclxuXHRcdFx0XHRcdHdhdGNoZXIuc2V0TmFtZXNwYWNlKG5ld1ZhbHVlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1dKTtcclxuXHJcbiAgZXhwb3J0IHZhciBUb3BMZXZlbCA9IGNvbnRyb2xsZXIoXCJUb3BMZXZlbFwiLCBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzVmVyc2lvblwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCAoJHNjb3BlLCBLdWJlcm5ldGVzVmVyc2lvbjpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBLdWJlcm5ldGVzU3RhdGUpID0+IHtcclxuXHJcbiAgICAkc2NvcGUudmVyc2lvbiA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICAkc2NvcGUuc2hvd0FwcFZpZXcgPSBpc0FwcFZpZXcoKTtcclxuXHJcbiAgICAkc2NvcGUuaXNBY3RpdmUgPSAoaHJlZikgPT4ge1xyXG4gICAgICByZXR1cm4gaXNMaW5rQWN0aXZlKGhyZWYpO1xyXG4gICAgfTtcclxuXHJcbiAgICAkc2NvcGUubW9kZSA9ICd5YW1sJztcclxuICAgICRzY29wZS5yYXdNb2RlID0gdHJ1ZTtcclxuICAgICRzY29wZS5kaXJ0eSA9IGZhbHNlO1xyXG4gICAgJHNjb3BlLnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICRzY29wZS5yYXdNb2RlbCA9IG51bGw7XHJcblxyXG4gICAgJHNjb3BlLiRvbignaGF3dGlvRWRpdG9yX2RlZmF1bHRfZGlydHknLCAoJGV2ZW50LCBkaXJ0eSkgPT4ge1xyXG4gICAgICAkc2NvcGUuZGlydHkgPSBkaXJ0eTtcclxuICAgIH0pO1xyXG5cclxuICAgICRzY29wZS5zYXZlID0gKHJhd01vZGVsKSA9PiB7XHJcbiAgICAgIHZhciBvYmo6YW55ID0gbnVsbDtcclxuICAgICAgdmFyIHN0ciA9IHJhd01vZGVsLnJlcGxhY2UoL1xcdC9nLCBcIiAgICBcIik7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgb2JqID0ganN5YW1sLmxvYWQoc3RyKTtcclxuICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgQ29yZS5ub3RpZmljYXRpb24oXCJ3YXJuaW5nXCIsIFwiRmFpbGVkIHRvIHNhdmUgb2JqZWN0LCBlcnJvcjogXFxcIlwiICsgZXJyICsgXCJcXFwiXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghb2JqKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgICRzY29wZS5yZWFkT25seSA9IHRydWU7XHJcbiAgICAgIEt1YmVybmV0ZXNBUEkucHV0KHtcclxuICAgICAgICBvYmplY3Q6IG9iaixcclxuICAgICAgICBzdWNjZXNzOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgJHNjb3BlLmRpcnR5ID0gZmFsc2U7XHJcbiAgICAgICAgICBDb3JlLm5vdGlmaWNhdGlvbihcInN1Y2Nlc3NcIiwgXCJTYXZlZCBvYmplY3QgXCIgKyBnZXROYW1lKG9iaikpO1xyXG4gICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkdvdCBlcnJvcjogXCIsIGVycik7XHJcbiAgICAgICAgICBDb3JlLm5vdGlmaWNhdGlvbihcIndhcm5pbmdcIiwgXCJGYWlsZWQgdG8gc2F2ZSBvYmplY3QsIGVycm9yOiBcXFwiXCIgKyBlcnIubWVzc2FnZSArIFwiXFxcIlwiKTtcclxuICAgICAgICAgICRzY29wZS5kaXJ0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcblxyXG4gICAgS3ViZXJuZXRlc1ZlcnNpb24ucXVlcnkoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICRzY29wZS52ZXJzaW9uID0gcmVzcG9uc2U7XHJcbiAgICB9KTtcclxuXHJcbiAgfV0pO1xyXG5cclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cdFxyXG5cdGV4cG9ydCB2YXIgTmFtZXNwYWNlQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJOYW1lc3BhY2VDb250cm9sbGVyXCIsIFtcIiRzY29wZVwiLCBcIldhdGNoZXJTZXJ2aWNlXCIsICgkc2NvcGUsIHdhdGNoZXI6V2F0Y2hlclNlcnZpY2UpID0+IHtcclxuXHRcdCRzY29wZS53YXRjaGVyID0gd2F0Y2hlcjtcclxuXHRcdCRzY29wZS5uYW1lc3BhY2VPYmplY3RzID0gd2F0Y2hlci5nZXRPYmplY3RzKCduYW1lc3BhY2VzJyk7XHJcblx0XHQkc2NvcGUubmFtZXNwYWNlID0gd2F0Y2hlci5nZXROYW1lc3BhY2UoKTtcclxuXHRcdCRzY29wZS5uYW1lc3BhY2VzID0gW107XHJcblx0XHQkc2NvcGUuJHdhdGNoKCduYW1lc3BhY2UnLCAobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiB7XHJcblx0XHRcdGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUpIHtcclxuXHRcdFx0XHR3YXRjaGVyLnNldE5hbWVzcGFjZShuZXdWYWx1ZSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0JHNjb3BlLiR3YXRjaCgnd2F0Y2hlci5nZXROYW1lc3BhY2UoKScsIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcclxuXHRcdFx0aWYgKG5ld1ZhbHVlICE9PSBvbGRWYWx1ZSkge1xyXG5cdFx0XHRcdCRzY29wZS5uYW1lc3BhY2UgPSBuZXdWYWx1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHQkc2NvcGUuJHdhdGNoQ29sbGVjdGlvbignbmFtZXNwYWNlT2JqZWN0cycsIChuYW1lc3BhY2VPYmplY3RzKSA9PiB7XHJcblx0XHRcdCRzY29wZS5uYW1lc3BhY2VzID0gXy5tYXAobmFtZXNwYWNlT2JqZWN0cywgKG5hbWVzcGFjZTphbnkpID0+IG5hbWVzcGFjZS5tZXRhZGF0YS5uYW1lKTtcclxuXHRcdH0pXHRcdFxyXG5cdH1dKTtcclxuXHRcclxufSIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgdmFyIE92ZXJ2aWV3RGlyZWN0aXZlID0gX21vZHVsZS5kaXJlY3RpdmUoXCJrdWJlcm5ldGVzT3ZlcnZpZXdcIiwgW1wiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkY29tcGlsZVwiLCBcIiRpbnRlcnBvbGF0ZVwiLCBcIiR0aW1lb3V0XCIsIFwiJHdpbmRvd1wiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCAnS3ViZXJuZXRlc01vZGVsJywgKCR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGNvbXBpbGU6bmcuSUNvbXBpbGVTZXJ2aWNlLCAkaW50ZXJwb2xhdGU6bmcuSUludGVycG9sYXRlU2VydmljZSwgJHRpbWVvdXQ6bmcuSVRpbWVvdXRTZXJ2aWNlLCAkd2luZG93Om5nLklXaW5kb3dTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNNb2RlbCkgPT4ge1xyXG5cclxuICAgIHZhciBsb2cgPSBMb2dnZXIuZ2V0KCdrdWJlcm5ldGVzLW92ZXJ2aWV3Jyk7XHJcbiAgICB2YXIgbW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcbiAgICB2YXIgc3RhdGUgPSBLdWJlcm5ldGVzU3RhdGU7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVzdHJpY3Q6ICdFJyxcclxuICAgICAgcmVwbGFjZTogdHJ1ZSxcclxuICAgICAgbGluazogKHNjb3BlLCBlbGVtZW50LCBhdHRyKSA9PiB7XHJcbiAgICAgICAgc2NvcGUubW9kZWwgPSBtb2RlbDtcclxuICAgICAgICBlbGVtZW50LmNzcyh7dmlzaWJpbGl0eTogJ2hpZGRlbid9KTtcclxuICAgICAgICBzY29wZS5nZXRFbnRpdHkgPSAodHlwZTpzdHJpbmcsIGtleTpzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICdob3N0JzpcclxuICAgICAgICAgICAgICByZXR1cm4gbW9kZWwucG9kc0J5SG9zdFtrZXldO1xyXG4gICAgICAgICAgICBjYXNlICdwb2QnOlxyXG4gICAgICAgICAgICAgIHJldHVybiBtb2RlbC5wb2RzQnlLZXlba2V5XTtcclxuICAgICAgICAgICAgY2FzZSAncmVwbGljYXRpb25Db250cm9sbGVyJzpcclxuICAgICAgICAgICAgICByZXR1cm4gbW9kZWwucmVwbGljYXRpb25Db250cm9sbGVyc0J5S2V5W2tleV07XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlcnZpY2UnOlxyXG4gICAgICAgICAgICAgIHJldHVybiBtb2RlbC5zZXJ2aWNlc0J5S2V5W2tleV07XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBzY29wZS5rdWJlcm5ldGVzID0gc3RhdGU7XHJcblxyXG4gICAgICAgIHNjb3BlLmN1c3RvbWl6ZURlZmF1bHRPcHRpb25zID0gKG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgIG9wdGlvbnMuRW5kcG9pbnQgPSBbJ0JsYW5rJywge31dO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgc2NvcGUubW91c2VFbnRlciA9ICgkZXZlbnQpID0+IHtcclxuICAgICAgICAgIGlmIChzY29wZS5qc1BsdW1iKSB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuZWxlbWVudCgkZXZlbnQuY3VycmVudFRhcmdldCkuYWRkQ2xhc3MoXCJob3ZlcmVkXCIpO1xyXG4gICAgICAgICAgICBzY29wZS5qc1BsdW1iLmdldEVuZHBvaW50cygkZXZlbnQuY3VycmVudFRhcmdldCkuZm9yRWFjaCgoZW5kcG9pbnQpID0+IHtcclxuICAgICAgICAgICAgICBlbmRwb2ludC5jb25uZWN0aW9ucy5mb3JFYWNoKChjb25uZWN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNvbm5lY3Rpb24uaXNIb3ZlcigpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uc2V0SG92ZXIodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uZW5kcG9pbnRzLmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzY29wZS5tb3VzZUVudGVyKHtcclxuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQ6IGUuZWxlbWVudFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNjb3BlLm1vdXNlTGVhdmUgPSAoJGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICBpZiAoc2NvcGUuanNQbHVtYikge1xyXG4gICAgICAgICAgICBhbmd1bGFyLmVsZW1lbnQoJGV2ZW50LmN1cnJlbnRUYXJnZXQpLnJlbW92ZUNsYXNzKFwiaG92ZXJlZFwiKTtcclxuICAgICAgICAgICAgc2NvcGUuanNQbHVtYi5nZXRFbmRwb2ludHMoJGV2ZW50LmN1cnJlbnRUYXJnZXQpLmZvckVhY2goKGVuZHBvaW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgZW5kcG9pbnQuY29ubmVjdGlvbnMuZm9yRWFjaCgoY29ubmVjdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb24uaXNIb3ZlcigpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uc2V0SG92ZXIoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLmVuZHBvaW50cy5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUubW91c2VMZWF2ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0OiBlLmVsZW1lbnRcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvKlxyXG4gICAgICAgIHNjb3BlLmN1c3RvbWl6ZUVuZHBvaW50T3B0aW9ucyA9IChqc1BsdW1iLCBub2RlLCBvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICB2YXIgdHlwZSA9IG5vZGUuZWwuYXR0cignZGF0YS10eXBlJyk7XHJcbiAgICAgICAgICAvLyBsb2cuZGVidWcoXCJlbmRwb2ludCB0eXBlOiBcIiwgdHlwZSk7XHJcbiAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSAncG9kJzpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnc2VydmljZSc6XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlcGxpY2F0aW9uQ29udHJvbGxlcic6XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICAqL1xyXG4gICAgICAgIHNjb3BlLmN1c3RvbWl6ZUNvbm5lY3Rpb25PcHRpb25zID0gKGpzUGx1bWIsIGVkZ2UsIHBhcmFtcywgb3B0aW9ucykgPT4ge1xyXG4gICAgICAgICAgdmFyIHR5cGUgPSBlZGdlLnNvdXJjZS5lbC5hdHRyKCdkYXRhLXR5cGUnKTtcclxuICAgICAgICAgIG9wdGlvbnMuY29ubmVjdG9yID0gWyBcIkJlemllclwiLCB7IGN1cnZpbmVzczogNTAsIHN0dWI6IDI1LCBhbHdheXNSZXNwZWN0U3R1YnM6IHRydWUgfSBdO1xyXG4gICAgICAgICAgcGFyYW1zLnBhaW50U3R5bGUgPSB7XHJcbiAgICAgICAgICAgIGxpbmVXaWR0aDogMixcclxuICAgICAgICAgICAgc3Ryb2tlU3R5bGU6ICcjNTU1NWNjJ1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICdwb2QnOlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZXJ2aWNlJzpcclxuICAgICAgICAgICAgICBwYXJhbXMuYW5jaG9ycyA9IFtcclxuICAgICAgICAgICAgICAgIFsgXCJDb250aW51b3VzXCIsIHsgZmFjZXM6IFtcInJpZ2h0XCJdIH0gXSxcclxuICAgICAgICAgICAgICAgIFsgXCJDb250aW51b3VzXCIsIHsgZmFjZXM6IFtcImxlZnRcIl0gfSBdIFxyXG4gICAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgIFsxLCAwLjUsIDAsIDAsIC0xMCwgLTkwXSxcclxuICAgICAgICAgICAgICAgIFswLCAwLjUsIDAsIDAsIC0xMCwgLTkwXVxyXG4gICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdyZXBsaWNhdGlvbkNvbnRyb2xsZXInOlxyXG4gICAgICAgICAgICAgIHBhcmFtcy5hbmNob3JzID0gW1xyXG4gICAgICAgICAgICAgICAgWyBcIlBlcmltZXRlclwiLCB7IHNoYXBlOiBcIkNpcmNsZVwiIH0gXSxcclxuICAgICAgICAgICAgICAgIFsgXCJDb250aW51b3VzXCIsIHsgZmFjZXM6IFtcInJpZ2h0XCJdIH0gXVxyXG4gICAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgIFswLCAwLjUsIDAsIDAsIC0xMCwgLTkwXSxcclxuICAgICAgICAgICAgICAgIFsxLCAwLjUsIDAsIDAsIC0xMCwgLTkwXVxyXG4gICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy9sb2cuZGVidWcoXCJjb25uZWN0aW9uIHNvdXJjZSB0eXBlOiBcIiwgdHlwZSk7XHJcbiAgICAgICAgICByZXR1cm4gb3B0aW9ucztcclxuICAgICAgICB9O1xyXG4gICAgICAgIGZ1bmN0aW9uIGludGVycG9sYXRlKHRlbXBsYXRlLCBjb25maWcpIHtcclxuICAgICAgICAgIHJldHVybiAkaW50ZXJwb2xhdGUodGVtcGxhdGUpKGNvbmZpZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodGVtcGxhdGUsIHRoaW5nTmFtZSwgdGhpbmcpIHtcclxuICAgICAgICAgIHZhciBjb25maWcgPSB7fTtcclxuICAgICAgICAgIGNvbmZpZ1t0aGluZ05hbWVdID0gdGhpbmc7XHJcbiAgICAgICAgICByZXR1cm4gaW50ZXJwb2xhdGUodGVtcGxhdGUsIGNvbmZpZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRzKHRlbXBsYXRlLCB0aGluZ05hbWUsIHRoaW5ncykge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaW5ncy5tYXAoKHRoaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KHRlbXBsYXRlLCB0aGluZ05hbWUsIHRoaW5nKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmdW5jdGlvbiBhcHBlbmROZXdFbGVtZW50cyhwYXJlbnRFbCwgdGVtcGxhdGUsIHRoaW5nTmFtZSwgdGhpbmdzKSB7XHJcbiAgICAgICAgICB0aGluZ3MuZm9yRWFjaCgodGhpbmcpID0+IHtcclxuICAgICAgICAgICAgdmFyIGtleSA9IHRoaW5nWydfa2V5J10gfHwgdGhpbmdbJ2VsZW1lbnRJZCddIHx8IHRoaW5nWydpZCddXHJcbiAgICAgICAgICAgIHZhciBleGlzdGluZyA9IHBhcmVudEVsLmZpbmQoXCIjXCIgKyBrZXkgKTtcclxuICAgICAgICAgICAgaWYgKCFleGlzdGluZy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBsb2cuZGVidWcoXCJleGlzdGluZzogXCIsIGV4aXN0aW5nLCBcIiBrZXk6IFwiLCBrZXkpO1xyXG4gICAgICAgICAgICAgIHBhcmVudEVsLmFwcGVuZCgkY29tcGlsZShjcmVhdGVFbGVtZW50KHRlbXBsYXRlLCB0aGluZ05hbWUsIHRoaW5nKSkoc2NvcGUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZ1bmN0aW9uIG5hbWVzcGFjZUZpbHRlcihpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBnZXROYW1lc3BhY2UoaXRlbSkgPT09IHNjb3BlLmt1YmVybmV0ZXMuc2VsZWN0ZWROYW1lc3BhY2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZ1bmN0aW9uIGZpcnN0RHJhdygpIHtcclxuICAgICAgICAgIGxvZy5kZWJ1ZyhcIkZpcnN0IGRyYXdcIik7XHJcbiAgICAgICAgICBlbGVtZW50LmVtcHR5KCk7XHJcbiAgICAgICAgICB2YXIgc2VydmljZXMgPSBtb2RlbC5zZXJ2aWNlcztcclxuICAgICAgICAgIHZhciByZXBsaWNhdGlvbkNvbnRyb2xsZXJzID0gbW9kZWwucmVwbGljYXRpb25Db250cm9sbGVycztcclxuICAgICAgICAgIHZhciBwb2RzID0gbW9kZWwucG9kcztcclxuICAgICAgICAgIHZhciBob3N0cyA9IG1vZGVsLmhvc3RzO1xyXG4gICAgICAgICAgLy8gbG9nLmRlYnVnKFwiaG9zdHM6IFwiLCBtb2RlbC5ob3N0cyk7XHJcbiAgICAgICAgICB2YXIgcGFyZW50RWwgPSBhbmd1bGFyLmVsZW1lbnQoJHRlbXBsYXRlQ2FjaGUuZ2V0KFwib3ZlcnZpZXdUZW1wbGF0ZS5odG1sXCIpKTtcclxuICAgICAgICAgIHZhciBzZXJ2aWNlc0VsID0gcGFyZW50RWwuZmluZChcIi5zZXJ2aWNlc1wiKTtcclxuICAgICAgICAgIHZhciBob3N0c0VsID0gcGFyZW50RWwuZmluZChcIi5ob3N0c1wiKTtcclxuICAgICAgICAgIHZhciByZXBsaWNhdGlvbkNvbnRyb2xsZXJzRWwgPSBwYXJlbnRFbC5maW5kKFwiLnJlcGxpY2F0aW9uQ29udHJvbGxlcnNcIik7XHJcblxyXG4gICAgICAgICAgc2VydmljZXNFbC5hcHBlbmQoY3JlYXRlRWxlbWVudHMoJHRlbXBsYXRlQ2FjaGUuZ2V0KFwic2VydmljZVRlbXBsYXRlLmh0bWxcIiksICdzZXJ2aWNlJywgc2VydmljZXMuZmlsdGVyKG5hbWVzcGFjZUZpbHRlcikpKTtcclxuICAgICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlcnNFbC5hcHBlbmQoY3JlYXRlRWxlbWVudHMoJHRlbXBsYXRlQ2FjaGUuZ2V0KFwicmVwbGljYXRpb25Db250cm9sbGVyVGVtcGxhdGUuaHRtbFwiKSwgJ3JlcGxpY2F0aW9uQ29udHJvbGxlcicsIHJlcGxpY2F0aW9uQ29udHJvbGxlcnMuZmlsdGVyKG5hbWVzcGFjZUZpbHRlcikpKTtcclxuXHJcbiAgICAgICAgICBob3N0cy5mb3JFYWNoKChob3N0KSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBob3N0RWwgPSBhbmd1bGFyLmVsZW1lbnQoY3JlYXRlRWxlbWVudCgkdGVtcGxhdGVDYWNoZS5nZXQoXCJvdmVydmlld0hvc3RUZW1wbGF0ZS5odG1sXCIpLCAnaG9zdCcsIGhvc3QpKTtcclxuICAgICAgICAgICAgdmFyIHBvZENvbnRhaW5lciA9IGFuZ3VsYXIuZWxlbWVudChob3N0RWwuZmluZCgnLnBvZC1jb250YWluZXInKSk7XHJcbiAgICAgICAgICAgIHBvZENvbnRhaW5lci5hcHBlbmQoY3JlYXRlRWxlbWVudHMoJHRlbXBsYXRlQ2FjaGUuZ2V0KFwicG9kVGVtcGxhdGUuaHRtbFwiKSwgXCJwb2RcIiwgaG9zdC5wb2RzKSk7XHJcbiAgICAgICAgICAgIGhvc3RzRWwuYXBwZW5kKGhvc3RFbCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIC8vcGFyZW50RWwuYXBwZW5kKGNyZWF0ZUVsZW1lbnRzKCR0ZW1wbGF0ZUNhY2hlLmdldChcInBvZFRlbXBsYXRlLmh0bWxcIiksICdwb2QnLCBwb2RzKSk7XHJcbiAgICAgICAgICBlbGVtZW50LmFwcGVuZCgkY29tcGlsZShwYXJlbnRFbCkoc2NvcGUpKTtcclxuICAgICAgICAgICR0aW1lb3V0KCgpID0+IHsgZWxlbWVudC5jc3Moe3Zpc2liaWxpdHk6ICd2aXNpYmxlJ30pOyB9LCAyNTApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlKCkge1xyXG4gICAgICAgICAgc2NvcGUuJGVtaXQoJ2pzcGx1bWJEb1doaWxlU3VzcGVuZGVkJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBsb2cuZGVidWcoXCJVcGRhdGVcIik7XHJcbiAgICAgICAgICAgIHZhciBzZXJ2aWNlcyA9IG1vZGVsLnNlcnZpY2VzO1xyXG4gICAgICAgICAgICB2YXIgcmVwbGljYXRpb25Db250cm9sbGVycyA9IG1vZGVsLnJlcGxpY2F0aW9uQ29udHJvbGxlcnM7XHJcbiAgICAgICAgICAgIHZhciBwb2RzID0gbW9kZWwucG9kcztcclxuICAgICAgICAgICAgdmFyIGhvc3RzID0gbW9kZWwuaG9zdHM7XHJcbiAgICAgICAgICAgIHZhciBwYXJlbnRFbCA9IGVsZW1lbnQuZmluZCgnW2hhd3Rpby1qc3BsdW1iXScpO1xyXG4gICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBwYXJlbnRFbC5maW5kKCcuanNwbHVtYi1ub2RlJyk7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuLmVhY2goKGluZGV4LCBjKSA9PiB7XHJcbiAgICAgICAgICAgICAgdmFyIGNoaWxkID0gYW5ndWxhci5lbGVtZW50KGMpO1xyXG4gICAgICAgICAgICAgIHZhciBrZXkgPSBjaGlsZC5hdHRyKCdpZCcpO1xyXG4gICAgICAgICAgICAgIGxvZy5kZWJ1Zygna2V5OiAnLCBrZXkpO1xyXG4gICAgICAgICAgICAgIGlmIChDb3JlLmlzQmxhbmsoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB2YXIgdHlwZSA9IGNoaWxkLmF0dHIoJ2RhdGEtdHlwZScpO1xyXG4gICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnaG9zdCc6XHJcbiAgICAgICAgICAgICAgICAgIGlmIChrZXkgaW4gbW9kZWwucG9kc0J5SG9zdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3NlcnZpY2UnOlxyXG4gICAgICAgICAgICAgICAgICBpZiAoa2V5IGluIG1vZGVsLnNlcnZpY2VzQnlLZXkgJiYgZ2V0TmFtZXNwYWNlKG1vZGVsLnNlcnZpY2VzQnlLZXlba2V5XSkgPT0gc2NvcGUua3ViZXJuZXRlcy5zZWxlY3RlZE5hbWVzcGFjZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZXJ2aWNlID0gbW9kZWwuc2VydmljZXNCeUtleVtrZXldO1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLmF0dHIoJ2Nvbm5lY3QtdG8nLCBzZXJ2aWNlLmNvbm5lY3RUbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAncG9kJzpcclxuICAgICAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgICAgaWYgKGhhc0lkKHBvZHMsIGlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgICBpZiAoa2V5IGluIG1vZGVsLnBvZHNCeUtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3JlcGxpY2F0aW9uQ29udHJvbGxlcic6XHJcbiAgICAgICAgICAgICAgICAgIGlmIChrZXkgaW4gbW9kZWwucmVwbGljYXRpb25Db250cm9sbGVyc0J5S2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcGxpY2F0aW9uQ29udHJvbGxlciA9IG1vZGVsLnJlcGxpY2F0aW9uQ29udHJvbGxlcnNCeUtleVtrZXldO1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLmF0dHIoJ2Nvbm5lY3QtdG8nLCByZXBsaWNhdGlvbkNvbnRyb2xsZXIuY29ubmVjdFRvKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJJZ25vcmluZyBlbGVtZW50IHdpdGggdW5rbm93biB0eXBlXCIpO1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIlJlbW92aW5nOiBcIiwga2V5KTtcclxuICAgICAgICAgICAgICBjaGlsZC5yZW1vdmUoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHZhciBzZXJ2aWNlc0VsID0gZWxlbWVudC5maW5kKFwiLnNlcnZpY2VzXCIpO1xyXG4gICAgICAgICAgICB2YXIgcmVwbGljYXRpb25Db250cm9sbGVyc0VsID0gZWxlbWVudC5maW5kKFwiLnJlcGxpY2F0aW9uQ29udHJvbGxlcnNcIik7XHJcbiAgICAgICAgICAgIHZhciBob3N0c0VsID0gZWxlbWVudC5maW5kKFwiLmhvc3RzXCIpO1xyXG5cclxuICAgICAgICAgICAgYXBwZW5kTmV3RWxlbWVudHMoc2VydmljZXNFbCwgJHRlbXBsYXRlQ2FjaGUuZ2V0KFwic2VydmljZVRlbXBsYXRlLmh0bWxcIiksIFwic2VydmljZVwiLCBzZXJ2aWNlcyk7XHJcbiAgICAgICAgICAgIGFwcGVuZE5ld0VsZW1lbnRzKHJlcGxpY2F0aW9uQ29udHJvbGxlcnNFbCwgJHRlbXBsYXRlQ2FjaGUuZ2V0KFwicmVwbGljYXRpb25Db250cm9sbGVyVGVtcGxhdGUuaHRtbFwiKSwgXCJyZXBsaWNhdGlvbkNvbnRyb2xsZXJcIiwgcmVwbGljYXRpb25Db250cm9sbGVycyk7XHJcbiAgICAgICAgICAgIGFwcGVuZE5ld0VsZW1lbnRzKGhvc3RzRWwsICR0ZW1wbGF0ZUNhY2hlLmdldChcIm92ZXJ2aWV3SG9zdFRlbXBsYXRlLmh0bWxcIiksIFwiaG9zdFwiLCBob3N0cyk7XHJcbiAgICAgICAgICAgIGhvc3RzLmZvckVhY2goKGhvc3QpID0+IHtcclxuICAgICAgICAgICAgICB2YXIgaG9zdEVsID0gYW5ndWxhci5lbGVtZW50KGhvc3RzRWwuZmluZChcIiNcIiArIGhvc3QuZWxlbWVudElkKSk7XHJcbiAgICAgICAgICAgICAgdmFyIHBvZENvbnRhaW5lciA9IGFuZ3VsYXIuZWxlbWVudChob3N0RWwuZmluZCgnLnBvZC1jb250YWluZXInKSk7XHJcbiAgICAgICAgICAgICAgYXBwZW5kTmV3RWxlbWVudHMocG9kQ29udGFpbmVyLCAkdGVtcGxhdGVDYWNoZS5nZXQoXCJwb2RUZW1wbGF0ZS5odG1sXCIpLCBcInBvZFwiLCBob3N0LnBvZHMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gcmVmcmVzaERyYXdpbmcoKSB7XHJcbiAgICAgICAgICBsb2cuZGVidWcoXCJSZWZyZXNoaW5nIGRyYXdpbmdcIik7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5jaGlsZHJlbigpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBmaXJzdERyYXcoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgQ29yZS4kYXBwbHkoc2NvcGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgXy5kZWJvdW5jZShyZWZyZXNoRHJhd2luZywgNTAwLCB7IHRyYWlsaW5nOiB0cnVlfSkpO1xyXG4gICAgICAgIHNldFRpbWVvdXQocmVmcmVzaERyYXdpbmcsIDEwMCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfV0pO1xyXG5cclxuICB2YXIgT3ZlcnZpZXdCb3hDb250cm9sbGVyID0gY29udHJvbGxlcihcIk92ZXJ2aWV3Qm94Q29udHJvbGxlclwiLCBbXCIkc2NvcGVcIiwgXCIkbG9jYXRpb25cIiwgKCRzY29wZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UpID0+IHtcclxuICAgICRzY29wZS52aWV3RGV0YWlscyA9IChlbnRpdHksIHBhdGg6c3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmIChlbnRpdHkpIHtcclxuICAgICAgICB2YXIgbmFtZXNwYWNlID0gZ2V0TmFtZXNwYWNlKGVudGl0eSk7XHJcbiAgICAgICAgdmFyIGlkID0gZ2V0TmFtZShlbnRpdHkpO1xyXG4gICAgICAgICRsb2NhdGlvbi5wYXRoKFVybEhlbHBlcnMuam9pbignL2t1YmVybmV0ZXMvbmFtZXNwYWNlJywgbmFtZXNwYWNlLCBwYXRoLCBpZCkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxvZy53YXJuKFwiTm8gZW50aXR5IGZvciB2aWV3RGV0YWlscyFcIik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XSk7XHJcblxyXG4gIHZhciBzY29wZU5hbWUgPSBcIk92ZXJ2aWV3Q29udHJvbGxlclwiO1xyXG5cclxuICB2YXIgT3ZlcnZpZXdDb250cm9sbGVyID0gY29udHJvbGxlcihzY29wZU5hbWUsIFtcIiRzY29wZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCIkcm91dGVQYXJhbXNcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIixcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcclxuICAgICRzY29wZS5uYW1lID0gc2NvcGVOYW1lO1xyXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcblxyXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG5cclxuICAgIC8vJHNjb3BlLnN1YlRhYkNvbmZpZyA9IFtdO1xyXG4gIH1dKTtcclxuXHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgZXhwb3J0IHZhciBQaXBlbGluZXNDb250cm9sbGVyID0gY29udHJvbGxlcihcIlBpcGVsaW5lc0NvbnRyb2xsZXJcIiwgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiJGRpYWxvZ1wiLCBcIiR3aW5kb3dcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRsb2NhdGlvblwiLCBcImxvY2FsU3RvcmFnZVwiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXHJcbiAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsICRkaWFsb2csICR3aW5kb3csICR0ZW1wbGF0ZUNhY2hlLCAkcm91dGVQYXJhbXMsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCBsb2NhbFN0b3JhZ2UsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xyXG5cclxuICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuXHJcbiAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBMZXRzIHVwZGF0ZSB0aGUgdmFyaW91cyBkYXRhIHRvIGpvaW4gdGhlbSB0b2dldGhlciB0byBhIHBpcGVsaW5lIG1vZGVsXHJcbiAgICAgICAqL1xyXG4gICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xyXG4gICAgICAgIHZhciBwaXBlbGluZVN0ZXBzID0ge307XHJcbiAgICAgICAgaWYgKCRzY29wZS5idWlsZENvbmZpZ3MgJiYgJHNjb3BlLmJ1aWxkcyAmJiAkc2NvcGUuZGVwbG95bWVudENvbmZpZ3MpIHtcclxuICAgICAgICAgIGVucmljaEJ1aWxkQ29uZmlncygkc2NvcGUuYnVpbGRDb25maWdzLCAkc2NvcGUuYnVpbGRzKTtcclxuICAgICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goJHNjb3BlLmJ1aWxkQ29uZmlncywgKGJ1aWxkQ29uZmlnKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBwaXBlbGluZUtleSA9IGNyZWF0ZVBpcGVsaW5lS2V5KGJ1aWxkQ29uZmlnKTtcclxuICAgICAgICAgICAgaWYgKHBpcGVsaW5lS2V5KSB7XHJcbiAgICAgICAgICAgICAgcGlwZWxpbmVTdGVwc1twaXBlbGluZUtleV0gPSB7XHJcbiAgICAgICAgICAgICAgICBidWlsZENvbmZpZzogYnVpbGRDb25maWcsXHJcbiAgICAgICAgICAgICAgICBidWlsZHM6IFtdLFxyXG4gICAgICAgICAgICAgICAgdHJpZ2dlcmVkQnk6IG51bGwsXHJcbiAgICAgICAgICAgICAgICB0cmlnZ2Vyc1N0ZXBzOiBbXSxcclxuICAgICAgICAgICAgICAgICRjbGFzczogJ3BpcGVsaW5lLWJ1aWxkJ1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goJHNjb3BlLmJ1aWxkcywgKGJ1aWxkKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBwaXBlbGluZUtleSA9IGNyZWF0ZVBpcGVsaW5lS2V5KGJ1aWxkKTtcclxuICAgICAgICAgICAgaWYgKHBpcGVsaW5lS2V5KSB7XHJcbiAgICAgICAgICAgICAgdmFyIHBpcGVsaW5lID0gcGlwZWxpbmVTdGVwc1twaXBlbGluZUtleV07XHJcbiAgICAgICAgICAgICAgaWYgKCFwaXBlbGluZSkge1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIndhcm5pbmcgbm8gcGlwZWxpbmUgZ2VuZXJhdGVkIGZvciBidWlsZENvbmZpZyBmb3Iga2V5IFwiICsgcGlwZWxpbmVLZXkgKyBcIiBmb3IgYnVpbGQgXCIgKyBhbmd1bGFyLnRvSnNvbihidWlsZCwgdHJ1ZSkpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJ3YXJuaW5nIG5vIHBpcGVsaW5lIGdlbmVyYXRlZCBmb3IgYnVpbGRDb25maWcgZm9yIGtleSBcIiArIHBpcGVsaW5lS2V5ICsgXCIgZm9yIGJ1aWxkIFwiICsgYnVpbGQuJG5hbWUpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwaXBlbGluZS5idWlsZHMucHVzaChidWlsZCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAvLyBUT0RPIG5vdyB3ZSBuZWVkIHRvIGxvb2sgYXQgdGhlIHRyaWdnZXJzIHRvIGZpZ3VyZSBvdXQgd2hpY2ggcGlwZWxpbmVTdGVwcyB0cmlnZ2VycyBlYWNoIHBpcGVsaW5lU3RlcFxyXG5cclxuXHJcbiAgICAgICAgICAvLyBub3cgbGV0cyBjcmVhdGUgYW4gYXJyYXkgb2YgYWxsIHBpcGVsaW5lcywgc3RhcnRpbmcgZnJvbSB0aGUgZmlyc3Qga25vd24gc3RlcCB3aXRoIGEgbGlzdCBvZiB0aGUgc3RlcHNcclxuXHJcbiAgICAgICAgICB2YXIgcGlwZWxpbmVzID0gW107XHJcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2gocGlwZWxpbmVTdGVwcywgKHBpcGVsaW5lU3RlcCwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghcGlwZWxpbmVTdGVwLnRyaWdnZXJlZEJ5KSB7XHJcbiAgICAgICAgICAgICAgLy8gd2UgYXJlIGEgcm9vdCBzdGVwLi4uLlxyXG4gICAgICAgICAgICAgIHBpcGVsaW5lcy5wdXNoKHBpcGVsaW5lU3RlcCk7XHJcbiAgICAgICAgICAgICAgLy8gbm93IGxldHMgYWRkIGFsbCB0aGUgc3RlcHMgZm9yIHRoaXMga2V5Li4uXHJcbiAgICAgICAgICAgICAgcGlwZWxpbmVTdGVwLnRyaWdnZXJzU3RlcHMucHVzaChwaXBlbGluZVN0ZXApO1xyXG4gICAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChwaXBlbGluZVN0ZXBzLCAoc3RlcCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN0ZXAudHJpZ2dlcmVkQnkgPT09IGtleSkge1xyXG4gICAgICAgICAgICAgICAgICBwaXBlbGluZVN0ZXAudHJpZ2dlcnNTdGVwcy5wdXNoKHN0ZXApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goJHNjb3BlLmRlcGxveW1lbnRDb25maWdzLCAoZGVwbG95bWVudENvbmZpZykgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWRlcGxveW1lbnRDb25maWcua2luZCkge1xyXG4gICAgICAgICAgICAgIGRlcGxveW1lbnRDb25maWcua2luZCA9IFwiRGVwbG95bWVudENvbmZpZ1wiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChkZXBsb3ltZW50Q29uZmlnLnRyaWdnZXJzLCAodHJpZ2dlcikgPT4ge1xyXG4gICAgICAgICAgICAgIHZhciB0eXBlID0gdHJpZ2dlci50eXBlO1xyXG4gICAgICAgICAgICAgIHZhciBpbWFnZUNoYW5nZVBhcmFtcyA9IHRyaWdnZXIuaW1hZ2VDaGFuZ2VQYXJhbXM7XHJcbiAgICAgICAgICAgICAgaWYgKGltYWdlQ2hhbmdlUGFyYW1zICYmIHR5cGUgPT09IFwiSW1hZ2VDaGFuZ2VcIikge1xyXG4gICAgICAgICAgICAgICAgdmFyIGZyb20gPSBpbWFnZUNoYW5nZVBhcmFtcy5mcm9tO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZyb20pIHtcclxuICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBmcm9tLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChmcm9tLmtpbmQgPT09IFwiSW1hZ2VSZXBvc2l0b3J5XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gaW1hZ2VDaGFuZ2VQYXJhbXMudGFnIHx8IFwibGF0ZXN0XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdyBsZXRzIGZpbmQgYSBwaXBlbGluZSBzdGVwIHdoaWNoIGZpcmVzIGZyb20gdGhpc1xyXG4gICAgICAgICAgICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKHBpcGVsaW5lU3RlcHMsIChwaXBlbGluZVN0ZXAsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG8gPSBDb3JlLnBhdGhHZXQocGlwZWxpbmVTdGVwLCBbXCJidWlsZENvbmZpZ1wiLCBcInBhcmFtZXRlcnNcIiwgXCJvdXRwdXRcIiwgXCJ0b1wiXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0byAmJiAodG8ua2luZCA9PT0gXCJJbWFnZVJlcG9zaXRvcnlcIiB8fCB0by5raW5kID09PSBcIkltYWdlU3RyZWFtXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRvTmFtZSA9IHRvLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRvTmFtZSA9PT0gbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdG9yID0gQ29yZS5wYXRoR2V0KGRlcGxveW1lbnRDb25maWcsIFtcInRlbXBsYXRlXCIsIFwiY29udHJvbGxlclRlbXBsYXRlXCIsIFwic2VsZWN0b3JcIl0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkcG9kQ291bnRlcnMgPSBzZWxlY3RvciA/IGNyZWF0ZVBvZENvdW50ZXJzKHNlbGVjdG9yLCBLdWJlcm5ldGVzTW9kZWwucG9kc0Zvck5hbWVzcGFjZSgpLCBwb2RzKSA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVwbG95UGlwZWxpbmVTdGVwID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZENvbmZpZzogZGVwbG95bWVudENvbmZpZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNsYXNzOiAncGlwZWxpbmUtZGVwbG95JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBvZENvdW50ZXJzOiAkcG9kQ291bnRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwb2RzOiBwb2RzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmVTdGVwLnRyaWdnZXJzU3RlcHMucHVzaChkZXBsb3lQaXBlbGluZVN0ZXApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgJHNjb3BlLnBpcGVsaW5lcyA9IHBpcGVsaW5lcztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBMZXRzIGNyZWF0ZSBhIHVuaXF1ZSBrZXkgZm9yIGJ1aWxkIC8gY29uZmlnIHdlIGNhbiB1c2UgdG8gZG8gbGlua2luZyBvZiBidWlsZHMgLyBjb25maWdzIC8gdHJpZ2dlcnNcclxuICAgICAgICovXHJcbiAgICAgIGZ1bmN0aW9uIGNyZWF0ZVBpcGVsaW5lS2V5KGJ1aWxkQ29uZmlnKSB7XHJcbiAgICAgICAgcmV0dXJuIENvcmUucGF0aEdldChidWlsZENvbmZpZywgW1wicGFyYW1ldGVyc1wiLCBcInNvdXJjZVwiLCBcImdpdFwiLCBcInVyaVwiXSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICRzY29wZS4ka2VlcFBvbGxpbmcgPSAoKSA9PiBrZWVwUG9sbGluZ01vZGVsO1xyXG4gICAgICAkc2NvcGUuZmV0Y2ggPSBQb2xsSGVscGVycy5zZXR1cFBvbGxpbmcoJHNjb3BlLCAobmV4dDooKSA9PiB2b2lkKSA9PiB7XHJcbiAgICAgICAgdmFyIHJlYWR5ID0gMDtcclxuICAgICAgICB2YXIgbnVtU2VydmljZXMgPSAzO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBtYXliZU5leHQoKSB7XHJcbiAgICAgICAgICBpZiAoKytyZWFkeSA+PSBudW1TZXJ2aWNlcykge1xyXG4gICAgICAgICAgICBuZXh0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdXJsID0gYnVpbGRzUmVzdFVSTCgpO1xyXG4gICAgICAgICRodHRwLmdldCh1cmwpLlxyXG4gICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAkc2NvcGUuYnVpbGRzID0gZW5yaWNoQnVpbGRzKGRhdGEuaXRlbXMpO1xyXG4gICAgICAgICAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtYXliZU5leHQoKTtcclxuICAgICAgICAgIH0pLlxyXG4gICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XHJcbiAgICAgICAgICAgIG1heWJlTmV4dCgpO1xyXG5cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIHVybCA9IGJ1aWxkQ29uZmlnc1Jlc3RVUkwoKTtcclxuICAgICAgICAkaHR0cC5nZXQodXJsKS5cclxuICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgJHNjb3BlLmJ1aWxkQ29uZmlncyA9IGRhdGEuaXRlbXM7XHJcbiAgICAgICAgICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG1heWJlTmV4dCgpO1xyXG4gICAgICAgICAgfSkuXHJcbiAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgICAgbWF5YmVOZXh0KCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB1cmwgPSBkZXBsb3ltZW50Q29uZmlnc1Jlc3RVUkwoKTtcclxuICAgICAgICAkaHR0cC5nZXQodXJsKS5cclxuICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgJHNjb3BlLmRlcGxveW1lbnRDb25maWdzID0gZGF0YS5pdGVtcztcclxuICAgICAgICAgICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbWF5YmVOZXh0KCk7XHJcbiAgICAgICAgICB9KS5cclxuICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xyXG4gICAgICAgICAgICBtYXliZU5leHQoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgICRzY29wZS5mZXRjaCgpO1xyXG4gICAgfV0pO1xyXG5cclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XHJcblxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcblxyXG4gIGV4cG9ydCB2YXIgUG9kQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJQb2RDb250cm9sbGVyXCIsXHJcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJTZXJ2aWNlUmVnaXN0cnlcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCIkd2luZG93XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxyXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6IEt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBTZXJ2aWNlUmVnaXN0cnksXHJcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgJHdpbmRvdywgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xyXG5cclxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xyXG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG4gICAgJHNjb3BlLnJhd01vZGVsID0gbnVsbDtcclxuXHJcbiAgICAkc2NvcGUuaXRlbUNvbmZpZyA9IHtcclxuICAgICAgcHJvcGVydGllczoge1xyXG4gICAgICAgICdjb250YWluZXJzL2ltYWdlJCc6IHtcclxuICAgICAgICAgIHRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoJ2ltYWdlVGVtcGxhdGUuaHRtbCcpXHJcbiAgICAgICAgfSxcclxuICAgICAgICAnc3RhdHVzL3BoYXNlJzoge1xyXG4gICAgICAgICAgdGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldCgnc3RhdHVzVGVtcGxhdGUuaHRtbCcpXHJcbiAgICAgICAgfSxcclxuICAgICAgICAnXFxcXC9FbnZcXFxcLyc6IHtcclxuICAgICAgICAgIHRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoJ2Vudkl0ZW1UZW1wbGF0ZS5odG1sJylcclxuICAgICAgICB9LFxyXG4gICAgICAgICdeXFxcXC9sYWJlbHMkJzoge1xyXG4gICAgICAgICAgdGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldCgnbGFiZWxUZW1wbGF0ZS5odG1sJylcclxuICAgICAgICB9LFxyXG4gICAgICAgICdcXFxcL2VudlxcXFwva2V5JCc6IHtcclxuICAgICAgICAgIGhpZGRlbjogdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcblxyXG4gICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xyXG4gICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAkc2NvcGUuJHdhdGNoKCdtb2RlbC5wb2RzJywgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xyXG4gICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICB9LCB0cnVlKTtcclxuXHJcbiAgICAkc2NvcGUuZmxpcFJhdyA9ICgpID0+IHtcclxuICAgICAgJHNjb3BlLnJhd01vZGUgPSAhJHNjb3BlLnJhd01vZGU7XHJcbiAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICB9O1xyXG5cclxuICAgICRzY29wZS5vcGVuTG9ncyA9ICgpID0+IHtcclxuICAgICAgdmFyIHBvZHMgPSBbJHNjb3BlLml0ZW1dO1xyXG4gICAgICBvcGVuTG9nc0ZvclBvZHMoU2VydmljZVJlZ2lzdHJ5LCAkd2luZG93LCBLdWJlcm5ldGVzTW9kZWwuY3VycmVudE5hbWVzcGFjZSgpLCBwb2RzKTtcclxuICAgIH07XHJcblxyXG4gICAgdXBkYXRlRGF0YSgpO1xyXG5cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XHJcbiAgICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xyXG4gICAgICAkc2NvcGUuaXRlbSA9ICRzY29wZS5tb2RlbC5nZXRQb2QoS3ViZXJuZXRlc1N0YXRlLnNlbGVjdGVkTmFtZXNwYWNlLCAkc2NvcGUuaWQpO1xyXG4gICAgICBpZiAoJHNjb3BlLml0ZW0pIHtcclxuICAgICAgICAkc2NvcGUucmF3TW9kZWwgPSB0b1Jhd1lhbWwoJHNjb3BlLml0ZW0pO1xyXG4gICAgICB9XHJcbiAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICB9XHJcbiAgfV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgZXhwb3J0IHZhciBQb2RFZGl0Q29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJQb2RFZGl0Q29udHJvbGxlclwiLFxyXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgXCJTY2hlbWFSZWdpc3RyeVwiLFxyXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6IEt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxyXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwsIHNjaGVtYXM6SGF3dGlvRm9ybXMuU2NoZW1hUmVnaXN0cnkpID0+IHtcclxuXHJcbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xyXG4gICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XHJcbiAgICAkc2NvcGUuY29uZmlnID0gc2NoZW1hcy5jbG9uZVNjaGVtYShcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUG9kXCIpO1xyXG4gICAgLy8kc2NvcGUuY29uZmlnID0gS3ViZXJuZXRlc1NjaGVtYS5kZWZpbml0aW9ucy5rdWJlcm5ldGVzX3YxYmV0YTJfUG9kO1xyXG5cclxuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcclxuXHJcbiAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XHJcbiAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHVwZGF0ZURhdGEoKTtcclxuXHJcbiAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xyXG4gICAgICBpZiAoJHNjb3BlLmlkKSB7XHJcbiAgICAgICAgJHNjb3BlLmVudGl0eSA9ICRzY29wZS5tb2RlbC5nZXRQb2QoS3ViZXJuZXRlc1N0YXRlLnNlbGVjdGVkTmFtZXNwYWNlLCAkc2NvcGUuaWQpO1xyXG4gICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgICRzY29wZS5zYXZlID0gKCk9PntcclxuICAgICAgY29uc29sZS5sb2coJHNjb3BlLmVudGl0eSk7XHJcbiAgICB9XHJcbiAgfV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwidGVybS50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgdmFyIGxvZyA9IExvZ2dlci5nZXQoXCJrdWJlcm5ldGVzLXBvZC1sb2dzXCIpO1xyXG5cclxuICBfbW9kdWxlLnNlcnZpY2UoXCJQb2RMb2dSZXBsYWNlbWVudHNcIiwgKCkgPT4ge1xyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH0pO1xyXG5cclxuICBfbW9kdWxlLnJ1bigoUG9kTG9nUmVwbGFjZW1lbnRzKSA9PiB7XHJcbiAgICB2YXIgbG9nID0gTG9nZ2VyLmdldChcInBvZC1sb2ctcmVwbGFjZXJzXCIpO1xyXG4gICAgLy8gQWRkIEFOU0kgZXNjYXBlIGNoYXJhY3RlciByZXBsYWNlclxyXG4gICAgLy8gYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tbWFsZWNraS9hbnNpc3BhblxyXG4gICAgdmFyIGNvbG9ycyA9IHtcclxuICAgICAgJzMwJzogJ2JsYWNrJyxcclxuICAgICAgJzMxJzogJ3JlZCcsXHJcbiAgICAgICczMic6ICdncmVlbicsXHJcbiAgICAgICczMyc6ICd5ZWxsb3cnLFxyXG4gICAgICAnMzQnOiAnYmx1ZScsXHJcbiAgICAgICczNSc6ICdwdXJwbGUnLFxyXG4gICAgICAnMzYnOiAnY3lhbicsXHJcbiAgICAgICczNyc6ICd3aGl0ZScgXHJcbiAgICB9XHJcbiAgICBQb2RMb2dSZXBsYWNlbWVudHMucHVzaCgobXNnKSA9PiB7XHJcbiAgICAgIGlmICghbXNnKSB7XHJcbiAgICAgICAgcmV0dXJuIG1zZztcclxuICAgICAgfVxyXG4gICAgICB2YXIgZW5kID0gXCI8L3NwYW4+XCI7XHJcbiAgICAgIF8uZm9yT3duKGNvbG9ycywgKGNvbG9yLCBjb2RlKSA9PiB7XHJcbiAgICAgICAgdmFyIHN0YXJ0ID0gYDxzcGFuIGNsYXNzPVwiYCArIGNvbG9yICsgYFwiPmA7XHJcbiAgICAgICAgbXNnID0gbXNnLnJlcGxhY2UobmV3IFJlZ0V4cCgnXFwwMzNcXFxcWycgKyBjb2RlICsgJ20nLCAnZycpLCBzdGFydClcclxuICAgICAgICBtc2cgPSBtc2cucmVwbGFjZShuZXcgUmVnRXhwKCdcXDAzM1xcXFxbMDsnICsgY29kZSArICdtJywgJ2cnKSwgc3RhcnQpO1xyXG4gICAgICB9KTtcclxuICAgICAgbXNnID0gbXNnLnJlcGxhY2UoL1xcMDMzXFxbMW0vZywgJzxiPicpLnJlcGxhY2UoL1xcMDMzXFxbMjJtL2csICc8L2I+Jyk7XHJcbiAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKC9cXDAzM1xcWzNtL2csICc8aT4nKS5yZXBsYWNlKC9cXDAzM1xcWzIzbS9nLCAnPC9pPicpO1xyXG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvXFwwMzNcXFttL2csIGVuZCk7XHJcbiAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKC9cXDAzM1xcWzBtL2csIGVuZCk7XHJcbiAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKC9cXDAzM1xcWzM5bS9nLCBlbmQpO1xyXG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvXFwwMzNcXFsybS9nLCAnPHNwYW4+Jyk7XHJcbiAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKC9cXDAzM1xcWzA7MzltL2csIGVuZCk7XHJcbiAgICAgIGxvZy5kZWJ1ZyhcIlJ1bm5pbmcgcmVwbGFjZW1lbnQgb24gbWVzc2FnZTogXCIsIG1zZyk7XHJcbiAgICAgIHJldHVybiBtc2c7XHJcbiAgICB9KTtcclxuICB9KTtcclxuXHJcbiAgX21vZHVsZS5jb250cm9sbGVyKFwiS3ViZXJuZXRlcy5Qb2RMb2dMaW5rQ29udHJvbGxlclwiLCAoJHNjb3BlLCAkaW50ZXJ2YWwsIFRlcm1pbmFsU2VydmljZSwgJHRlbXBsYXRlQ2FjaGUpID0+IHtcclxuXHJcbiAgICAkc2NvcGUub3BlbkxvZ3MgPSAoZW50aXR5KSA9PiB7XHJcbiAgICAgIGxvZy5kZWJ1ZyhcIk9wZW4gbG9nczogXCIsIGVudGl0eSk7XHJcbiAgICAgIFRlcm1pbmFsU2VydmljZS5uZXdUZXJtaW5hbCgkaW50ZXJ2YWwsIGVudGl0eS5tZXRhZGF0YS5zZWxmTGluaywgZW50aXR5LiRvcmFjbGVOYW1lLCBlbnRpdHksIFwiL2phdmEvY29uc29sZS9hcGkvb3JhY2xlL2V4dHJhY3QvbG9nP3JjTmFtZT1cIiArIGdldE5hbWUoZW50aXR5KSwgJHRlbXBsYXRlQ2FjaGUuZ2V0KFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVBhdGgsICdsb2dTaGVsbC5odG1sJykpKTtcclxuICAgIH1cclxuXHJcbiAgfSk7XHJcblxyXG4gIF9tb2R1bGUuZGlyZWN0aXZlKCdwb2RMb2dEaXNwbGF5JywgKHVzZXJEZXRhaWxzLCBQb2RMb2dSZXBsYWNlbWVudHMpID0+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlc3RyaWN0OiAnRScsXHJcbiAgICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBvZC1sb2ctbGluZXNcIj5cclxuICAgICAgICAgIDxwIG5nLWhpZGU9XCJmZXRjaGVkXCI+UGxlYXNlIHdhaXQsIGZldGNoaW5nIGxvZ3MuLi48L3A+XHJcbiAgICAgICAgICA8cCBuZy1oaWRlPVwibWVzc2FnZXMubGVuZ3RoIHx8IHByZXZpb3VzXCI+VmlldyA8YSBocmVmPVwiXCIgbmctY2xpY2s9XCJwcmV2aW91cz0hcHJldmlvdXNcIj5wcmV2aW91cyBjb250YWluZXIgbG9nczwvYT4/PC9wPlxyXG4gICAgICAgICAgPHAgbmctcmVwZWF0PVwibWVzc2FnZSBpbiBtZXNzYWdlcyB0cmFjayBieSAkaW5kZXhcIiBuZy1iaW5kLWh0bWw9XCJtZXNzYWdlXCI+PC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICBgLFxyXG4gICAgICBsaW5rOiAoc2NvcGU6YW55LCBlbGVtZW50LCBhdHRyKSA9PiB7XHJcbiAgICAgICAgdmFyIGxpbmsgPSBzY29wZS4kZXZhbCgncG9kTGluaycpO1xyXG4gICAgICAgIHZhciBuYW1lID0gc2NvcGUuJGV2YWwoJ2NvbnRhaW5lck5hbWUnKTtcclxuXHJcbiAgICAgICAgaWYgKCFsaW5rKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzY29wZS5mZXRjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgc2NvcGUucHJldmlvdXMgPSBmYWxzZTtcclxuICAgICAgICBzY29wZS5tZXNzYWdlcyA9IFtdO1xyXG5cclxuICAgICAgICBsaW5rID0gVXJsSGVscGVycy5qb2luKG1hc3RlckFwaVVybCgpLCBsaW5rLCAnbG9nJyk7XHJcbiAgICAgICAgbGluayA9IEt1YmVybmV0ZXNBUEkud3NVcmwobGluayk7XHJcbiAgICAgICAgbGluay5zZWFyY2goe1xyXG4gICAgICAgICAgZm9sbG93OiB0cnVlLFxyXG4gICAgICAgICAgdGFpbExpbmVzOiAxMDAwLFxyXG4gICAgICAgICAgYWNjZXNzX3Rva2VuOiB1c2VyRGV0YWlscy50b2tlblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB2YXIgbWVzc2FnZXMgPSBbXTtcclxuXHJcbiAgICAgICAgdmFyIHB1bGxNZXNzYWdlcyA9IF8uZGVib3VuY2UoKCkgPT4ge1xyXG4gICAgICAgICAgc2NvcGUubWVzc2FnZXMgPSBzY29wZS5tZXNzYWdlcy5jb25jYXQoXy5yZW1vdmUobWVzc2FnZXMsICgpID0+IHRydWUpLm1hcCgobXNnKSA9PiB7XHJcbiAgICAgICAgICAgIFBvZExvZ1JlcGxhY2VtZW50cy5mb3JFYWNoKChyZXBsRnVuYzphbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKHJlcGxGdW5jKSkge1xyXG4gICAgICAgICAgICAgICAgbXNnID0gcmVwbEZ1bmMobXNnKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gbXNnO1xyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgaWYgKCFzY29wZS5mZXRjaGVkKSB7XHJcbiAgICAgICAgICAgIHNjb3BlLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgQ29yZS4kYXBwbHkoc2NvcGUpO1xyXG4gICAgICAgIH0sIDEwMDApO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBpbml0U29ja2V0KGxpbmspIHtcclxuICAgICAgICAgIHNjb3BlLmZldGNoZWQgPSBmYWxzZTtcclxuICAgICAgICAgIG1lc3NhZ2VzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICBzY29wZS5tZXNzYWdlcy5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgdmFyIHdzID0gbmV3IFdlYlNvY2tldChsaW5rLnRvU3RyaW5nKCksICdiYXNlNjQuYmluYXJ5Lms4cy5pbycpO1xyXG4gICAgICAgICAgd3Mub25tZXNzYWdlID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSB3aW5kb3cuYXRvYihldmVudC5kYXRhKTtcclxuICAgICAgICAgICAgICBtZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgIHB1bGxNZXNzYWdlcygpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAvLyB3ZSdsbCBqdXN0IGlnbm9yZSB0aGVzZVxyXG4gICAgICAgICAgICAgIC8vbG9nLmRlYnVnKFwiRmFpbGVkIHRvIGRlY29kZSBtZXNzYWdlOiBcIiwgZXZlbnQuZGF0YSwgXCIgZXJyb3I6IFwiLCBlcnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gd3M7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgd3MgPSBpbml0U29ja2V0KGxpbmspO1xyXG5cclxuICAgICAgICBzY29wZS4kd2F0Y2goJ3ByZXZpb3VzJywgKHZhbHVlLCBvbGQpID0+IHtcclxuICAgICAgICAgIGlmICh2YWx1ZSAhPT0gb2xkKSB7XHJcbiAgICAgICAgICAgIGlmIChsaW5rLmhhc1NlYXJjaCgncHJldmlvdXMnKSkge1xyXG4gICAgICAgICAgICAgIGxpbmsucmVtb3ZlU2VhcmNoKCdwcmV2aW91cycpLmFkZFNlYXJjaCgncHJldmlvdXMnLCBzY29wZS5wcmV2aW91cyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGluay5hZGRTZWFyY2goJ3ByZXZpb3VzJywgc2NvcGUucHJldmlvdXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIHdzID0gaW5pdFNvY2tldChsaW5rKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZWxlbWVudC5vbignJGRlc3Ryb3knLCAoKSA9PiB7XHJcbiAgICAgICAgICBpZiAod3MpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICB3cy5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVsZXRlIHdzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIF9tb2R1bGUuZGlyZWN0aXZlKCdwb2RMb2dXaW5kb3cnLCAoJGNvbXBpbGUsIFRlcm1pbmFsU2VydmljZSkgPT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVzdHJpY3Q6ICdBJyxcclxuICAgICAgc2NvcGU6IGZhbHNlLFxyXG4gICAgICBsaW5rOiAoc2NvcGU6YW55LCBlbGVtZW50LCBhdHRyKSA9PiB7XHJcbiAgICAgICAgYWRkV2luZG93QWN0aW9ucyhzY29wZSwgZWxlbWVudCwgVGVybWluYWxTZXJ2aWNlKTtcclxuICAgICAgICBzY29wZS5hdEJvdHRvbSA9IHRydWU7XHJcbiAgICAgICAgc2NvcGUuJHdhdGNoKCdhdEJvdHRvbScsICh2YWwpID0+IHsgICAgICAgICBcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9KTtcclxuXHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cInV0aWxIZWxwZXJzLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBleHBvcnQgdmFyIEVudkl0ZW0gPSBjb250cm9sbGVyKFwiRW52SXRlbVwiLCBbXCIkc2NvcGVcIiwgKCRzY29wZSkgPT4ge1xyXG4gICAgdmFyIHBhcnRzID0gJHNjb3BlLmRhdGEuc3BsaXQoJz0nKTtcclxuICAgICRzY29wZS5rZXkgPSBwYXJ0cy5zaGlmdCgpO1xyXG4gICAgJHNjb3BlLnZhbHVlID0gcGFydHMuam9pbignPScpO1xyXG4gIH1dKTtcclxuXHJcbiAgLy8gbWFpbiBjb250cm9sbGVyIGZvciB0aGUgcGFnZVxyXG4gIGV4cG9ydCB2YXIgUG9kcyA9IGNvbnRyb2xsZXIoXCJQb2RzXCIsIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNQb2RzXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiU2VydmljZVJlZ2lzdHJ5XCIsIFwiJGRpYWxvZ1wiLCBcIiR3aW5kb3dcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRsb2NhdGlvblwiLCBcImxvY2FsU3RvcmFnZVwiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXHJcbiAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6IEt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1BvZHM6bmcucmVzb3VyY2UuSVJlc291cmNlQ2xhc3M8YW55PiwgS3ViZXJuZXRlc1N0YXRlLCBTZXJ2aWNlUmVnaXN0cnksICRkaWFsb2csICR3aW5kb3csICR0ZW1wbGF0ZUNhY2hlLCAkcm91dGVQYXJhbXMsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCBsb2NhbFN0b3JhZ2UsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xyXG5cclxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xyXG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG4gICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgIH0pO1xyXG5cclxuICAgICRzY29wZS5pdGVtU2NoZW1hID0gRm9ybXMuY3JlYXRlRm9ybUNvbmZpZ3VyYXRpb24oKTtcclxuXHJcbiAgICAkc2NvcGUudGFibGVDb25maWcgPSB7XHJcbiAgICAgIGRhdGE6ICdtb2RlbC5wb2RzJyxcclxuICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxyXG4gICAgICBlbmFibGVSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXHJcbiAgICAgIG11bHRpU2VsZWN0OiB0cnVlLFxyXG4gICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcclxuICAgICAgZmlsdGVyT3B0aW9uczoge1xyXG4gICAgICAgIGZpbHRlclRleHQ6ICRsb2NhdGlvbi5zZWFyY2goKVtcInFcIl0gfHwgJydcclxuICAgICAgfSxcclxuICAgICAgY29sdW1uRGVmczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpZWxkOiAnX2tleScsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ05hbWUnLFxyXG4gICAgICAgICAgZGVmYXVsdFNvcnQ6IHRydWUsXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImlkVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmllbGQ6ICckc3RhdHVzQ3NzJyxcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnU3RhdHVzJyxcclxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwic3RhdHVzVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyBmaWVsZDogJyRldmVudENvdW50JyxcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnRXZlbnRzJyxcclxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiZXZlbnRTdW1tYXJ5VGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmllbGQ6ICckcmVzdGFydENvdW50JyxcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnUmVzdGFydHMnXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaWVsZDogJyRjcmVhdGVkVGltZScsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ0FnZScsXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImFnZVRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpZWxkOiAnJGltYWdlTmFtZXMnLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdJbWFnZXMnLFxyXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJpbWFnZVRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpZWxkOiAnJGhvc3QnLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdIb3N0JyxcclxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiaG9zdFRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpZWxkOiAnJGxhYmVsc1RleHQnLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdMYWJlbHMnLFxyXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJsYWJlbFRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpZWxkOiAnJHBvZElQJyxcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnUG9kIElQJyxcclxuICAgICAgICAgIGN1c3RvbVNvcnRGaWVsZDogKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBLdWJlcm5ldGVzLnNvcnRCeVBvZElwKGZpZWxkLiRwb2RJUCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9O1xyXG5cclxuICAgICRzY29wZS5vcGVuTG9ncyA9ICgpID0+IHtcclxuICAgICAgdmFyIHBvZHMgPSAkc2NvcGUudGFibGVDb25maWcuc2VsZWN0ZWRJdGVtcztcclxuICAgICAgaWYgKCFwb2RzIHx8ICFwb2RzLmxlbmd0aCkge1xyXG4gICAgICAgIGlmICgkc2NvcGUuaWQpIHtcclxuICAgICAgICAgIHZhciBpdGVtID0gJHNjb3BlLml0ZW07XHJcbiAgICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICBwb2RzID0gW2l0ZW1dO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBvcGVuTG9nc0ZvclBvZHMoU2VydmljZVJlZ2lzdHJ5LCAkd2luZG93LCBLdWJlcm5ldGVzTW9kZWwuY3VycmVudE5hbWVzcGFjZSgpLCBwb2RzKTtcclxuICAgIH07XHJcblxyXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG5cclxuICAgICRzY29wZS5kZWxldGVQcm9tcHQgPSAoc2VsZWN0ZWQpID0+IHtcclxuICAgICAgaWYgKGFuZ3VsYXIuaXNTdHJpbmcoc2VsZWN0ZWQpKSB7XHJcbiAgICAgICAgc2VsZWN0ZWQgPSBbe1xyXG4gICAgICAgICAgaWQ6IHNlbGVjdGVkXHJcbiAgICAgICAgfV07XHJcbiAgICAgIH1cclxuICAgICAgVUkubXVsdGlJdGVtQ29uZmlybUFjdGlvbkRpYWxvZyg8VUkuTXVsdGlJdGVtQ29uZmlybUFjdGlvbk9wdGlvbnM+e1xyXG4gICAgICAgIGNvbGxlY3Rpb246IHNlbGVjdGVkLFxyXG4gICAgICAgIGluZGV4OiAnbWV0YWRhdGEubmFtZScsXHJcbiAgICAgICAgb25DbG9zZTogKHJlc3VsdDpib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkOkFycmF5PEt1YmVQb2Q+LCBuZXh0Okt1YmVQb2QpIHtcclxuICAgICAgICAgICAgICBpZiAobmV4dCkge1xyXG4gICAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiZGVsZXRpbmc6IFwiLCBnZXROYW1lKG5leHQpKTtcclxuICAgICAgICAgICAgICAgIEt1YmVybmV0ZXNQb2RzLmRlbGV0ZSh7XHJcbiAgICAgICAgICAgICAgICAgIGlkOiBnZXROYW1lKG5leHQpXHJcbiAgICAgICAgICAgICAgICB9LCB1bmRlZmluZWQsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiZGVsZXRlZDogXCIsIGdldE5hbWUobmV4dCkpO1xyXG4gICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XHJcbiAgICAgICAgICAgICAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiRXJyb3IgZGVsZXRpbmc6IFwiLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0aXRsZTogJ0RlbGV0ZSBwb2RzPycsXHJcbiAgICAgICAgYWN0aW9uOiAnVGhlIGZvbGxvd2luZyBwb2RzIHdpbGwgYmUgZGVsZXRlZDonLFxyXG4gICAgICAgIG9rVGV4dDogJ0RlbGV0ZScsXHJcbiAgICAgICAgb2tDbGFzczogJ2J0bi1kYW5nZXInLFxyXG4gICAgICAgIGN1c3RvbTogXCJUaGlzIG9wZXJhdGlvbiBpcyBwZXJtYW5lbnQgb25jZSBjb21wbGV0ZWQhXCIsXHJcbiAgICAgICAgY3VzdG9tQ2xhc3M6IFwiYWxlcnQgYWxlcnQtd2FybmluZ1wiXHJcbiAgICAgIH0pLm9wZW4oKTtcclxuICAgIH07XHJcblxyXG4gICAgJHNjb3BlLmNyZWF0ZVBvZHM9ICgpID0+IHtcclxuICAgICAgdmFyIHhocj0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09IDQpIHsvLzTooajnpLrmlbDmja7lt7Lnu4/osIPnlKjlrozmiJBcclxuICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09IDIwMCkgey8vSFRUUOeahOeKtuaAgeeggVxyXG4gICAgICAgICAgICB2YXIgb2JqPUpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgIHZhciBvYmplY3QgPSB7XHJcbiAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIm5ld3BvZFwiLFxyXG4gICAgICAgICAgICAgICBcImxhYmVsc1wiOiB7XHJcbiAgICAgICAgICAgICAgICAgXCJhaW1cIjogXCJ0ZXN0XCIsXHJcbiAgICAgICAgICAgICAgICAgXCJhcHBcIjogXCJvcmFjbGVcIlxyXG4gICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICBcInBhdGhcIjogJy9ob21lLycsXHJcbiAgICAgICAgICAgICAgIFwicG9ydFwiOiAxNTI1XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgS3ViZXJuZXRlcy5jcmVhdGVSQyhvYmplY3QpO1xyXG5cclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgLy9hbHRlcihcInNoaWJhaVwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICAgIHhoci5vcGVuKFwiUE9TVFwiLCBcIi9vcmFjbGVBcHBQYXRoXCIsIGZhbHNlKTsvL+S4juacjeWKoeWZqOi/nuaOpeW5tuWPkemAgVxyXG4gICAgICB4aHIuc2VuZChudWxsKTtcclxuICAgIH07XHJcbiAgfV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgZXhwb3J0IHZhciBSZXBsaWNhdGlvbkNvbnRyb2xsZXJDb250cm9sbGVyID0gY29udHJvbGxlcihcIlJlcGxpY2F0aW9uQ29udHJvbGxlckNvbnRyb2xsZXJcIixcclxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcclxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOiBLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSxcclxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XHJcblxyXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcbiAgICAkc2NvcGUucmF3TW9kZWwgPSBudWxsXHJcblxyXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG5cclxuICAgICRzY29wZS5pdGVtQ29uZmlnID0ge1xyXG4gICAgICBwcm9wZXJ0aWVzOiB7XHJcbiAgICAgICAgJ15cXFxcL2xhYmVscyQnOiB7XHJcbiAgICAgICAgICB0ZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KCdsYWJlbFRlbXBsYXRlLmh0bWwnKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgKCkgPT4ge1xyXG4gICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XHJcbiAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgIH0pO1xyXG5cclxuICAgICRzY29wZS4kd2F0Y2goJ21vZGVsLnBvZHMnLCAobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiB7XHJcbiAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgIH0sIHRydWUpO1xyXG5cclxuICAgICRzY29wZS5mbGlwUmF3ID0gKCkgPT4ge1xyXG4gICAgICAkc2NvcGUucmF3TW9kZSA9ICEkc2NvcGUucmF3TW9kZTtcclxuICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgIH07XHJcblxyXG4gICAgdXBkYXRlRGF0YSgpO1xyXG5cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XHJcbiAgICAgIGlmICgkc2NvcGUuZGlydHkpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XHJcbiAgICAgICRzY29wZS5pdGVtID0gJHNjb3BlLm1vZGVsLmdldFJlcGxpY2F0aW9uQ29udHJvbGxlcihLdWJlcm5ldGVzU3RhdGUuc2VsZWN0ZWROYW1lc3BhY2UsICRzY29wZS5pZCk7XHJcbiAgICAgIGlmICgkc2NvcGUuaXRlbSkge1xyXG4gICAgICAgICRzY29wZS5yYXdNb2RlbCA9IHRvUmF3WWFtbCgkc2NvcGUuaXRlbSk7XHJcbiAgICAgIH1cclxuICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgIH1cclxuICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBleHBvcnQgdmFyIFJlcGxpY2F0aW9uQ29udHJvbGxlckVkaXRDb250cm9sbGVyID0gY29udHJvbGxlcihcIlJlcGxpY2F0aW9uQ29udHJvbGxlckVkaXRDb250cm9sbGVyXCIsXHJcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzU2NoZW1hXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLCBcIlNjaGVtYVJlZ2lzdHJ5XCIsXHJcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDogS3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsXHJcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCwgc2NoZW1hczpIYXd0aW9Gb3Jtcy5TY2hlbWFSZWdpc3RyeSkgPT4ge1xyXG5cclxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xyXG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG4gICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XHJcbiAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcclxuICAgIGxvZy5kZWJ1ZyhcIlNjaGVtYTogXCIsICRzY29wZS5zY2hlbWEpO1xyXG4gICAgJHNjb3BlLmNvbmZpZyA9IHNjaGVtYXMuY2xvbmVTY2hlbWEoXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlcGxpY2F0aW9uQ29udHJvbGxlclwiKTtcclxuICAgIC8vJCRzY29wZS5jb25maWcgPSBLdWJlcm5ldGVzU2NoZW1hLmRlZmluaXRpb25zLmt1YmVybmV0ZXNfdjFiZXRhM19SZXBsaWNhdGlvbkNvbnRyb2xsZXI7XHJcblxyXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG5cclxuICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcclxuICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdXBkYXRlRGF0YSgpO1xyXG5cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XHJcbiAgICAgIGlmICgkc2NvcGUuaWQpIHtcclxuICAgICAgICAkc2NvcGUuZW50aXR5ID0gJHNjb3BlLm1vZGVsLmdldFJlcGxpY2F0aW9uQ29udHJvbGxlcihLdWJlcm5ldGVzU3RhdGUuc2VsZWN0ZWROYW1lc3BhY2UsICRzY29wZS5pZCk7XHJcbiAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNNb2RlbC50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2NvbmZpZ3MvdHMvY3VzdG9tQWxlcnQudHNcIi8+XHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgZXhwb3J0IHZhciBSZXBsaWNhdGlvbkNvbnRyb2xsZXJzID0gY29udHJvbGxlcihcIlJlcGxpY2F0aW9uQ29udHJvbGxlcnNcIixcclxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNSZXBsaWNhdGlvbkNvbnRyb2xsZXJzXCIsIFwiS3ViZXJuZXRlc1BvZHNcIiwgXCJDb25maWdzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXHJcbiAgICAgICgkc2NvcGUsICBLdWJlcm5ldGVzTW9kZWw6IEt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgIEt1YmVybmV0ZXNSZXBsaWNhdGlvbkNvbnRyb2xsZXJzOm5nLnJlc291cmNlLklSZXNvdXJjZUNsYXNzPGFueT4sIEt1YmVybmV0ZXNQb2RzOm5nLnJlc291cmNlLklSZXNvdXJjZUNsYXNzPGFueT4sIENvbmZpZ3NNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLFxyXG4gICAgICAgJHRlbXBsYXRlQ2FjaGUsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xyXG5cclxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xyXG4gICAgJHNjb3BlLmNvbmZpZ3MgPSBDb25maWdzTW9kZWw7XHJcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7ICAgIFxyXG5cclxuICAgICRzY29wZS50YWJsZUNvbmZpZyA9IHtcclxuICAgICAgZGF0YTogJ21vZGVsLnJlcGxpY2F0aW9uQ29udHJvbGxlcnMnLFxyXG4gICAgICBzaG93U2VsZWN0aW9uQ2hlY2tib3g6IHRydWUsXHJcbiAgICAgIGVuYWJsZVJvd0NsaWNrU2VsZWN0aW9uOiBmYWxzZSxcclxuICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsXHJcbiAgICAgIHNlbGVjdGVkSXRlbXM6IFtdLFxyXG4gICAgICBmaWx0ZXJPcHRpb25zOiB7XHJcbiAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xyXG4gICAgICB9LFxyXG4gICAgICBjb2x1bW5EZWZzOiBbXHJcbiAgICAgICAgIHsgZmllbGQ6ICckb3JhY2xlTmFtZScsXHJcbiAgICAgICAgICAgZGlzcGxheU5hbWU6ICfmnI3liqHlkI3np7AnLFxyXG4gICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiaWRUZW1wbGF0ZS5odG1sXCIpLFxyXG4gICAgICAgICAgIGN1c3RvbVNvcnRGaWVsZDogKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgICAgICByZXR1cm4gZmllbGQ7XHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgICB9LFxyXG4gICAgICAgICAvL3sgZmllbGQ6ICckcmVwbGljYXMnLFxyXG4gICAgICAgICAvLyAgZGlzcGxheU5hbWU6ICdTY2FsZScsXHJcbiAgICAgICAgIC8vICBjZWxsVGVtcGxhdGU6JHRlbXBsYXRlQ2FjaGUuZ2V0KFwiZGVzaXJlZFJlcGxpY2FzLmh0bWxcIilcclxuICAgICAgICAgLy99LFxyXG4gICAgICAgICB7IGZpZWxkOiAnJHBvZHMuYWdlJyxcclxuICAgICAgICAgICBkaXNwbGF5TmFtZTogJ+WQr+WKqOaXtumXtCcsXHJcbiAgICAgICAgICAgY2VsbFRlbXBsYXRlOiR0ZW1wbGF0ZUNhY2hlLmdldChcImFnZVRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICAgfSxcclxuICAgICAgICAgeyBmaWVsZDogJyRsYWJlbHNUZXh0JyxcclxuICAgICAgICAgICBkaXNwbGF5TmFtZTogJ+aVsOaNruagh+etvicsXHJcbiAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJsYWJlbFRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICAgfSxcclxuICAgICAgICAgeyBmaWVsZDogJyRwb2RzJyxcclxuICAgICAgICAgICBkaXNwbGF5TmFtZTogJ+i/nuaOpeWPguaVsCcsXHJcbiAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJjb25uZWN0UGFyYW1UZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgIH0sICAgICAgICBcclxuICAgICAgICAgeyBmaWVsZDogJyRwb2RDb3VudGVycycsXHJcbiAgICAgICAgICAgZGlzcGxheU5hbWU6ICfmnI3liqHnirbmgIEnLFxyXG4gICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwicG9kQ291bnRzQW5kTGlua1RlbXBsYXRlLmh0bWxcIiksXHJcbiAgICAgICAgICAgY3VzdG9tU29ydEZpZWxkOiAoZmllbGQpID0+IHtcclxuICAgICAgICAgICAgIGNvbnNvbGUubG9nKGZpZWxkKTtcclxuICAgICAgICAgICAgIGlmKGZpZWxkLiRwb2RDb3VudGVycy5yZWFkeSApe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDM7XHJcbiAgICAgICAgICAgICB9ZWxzZSBpZihmaWVsZC4kcG9kQ291bnRlcnMudmFsaWQgfHwgZmllbGQuJHBvZENvdW50ZXJzLndhaXRpbmcpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDI7XHJcbiAgICAgICAgICAgICB9ZWxzZSBpZihmaWVsZC4kcG9kQ291bnRlcnMuZXJyb3Ipe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICAgfVxyXG4gICAgICAgICAgIH1cclxuICAgICAgICAgfSxcclxuICAgICAgICAgeyBmaWVsZDogJyRleHRyYWN0U3RhdHVzJyxcclxuICAgICAgICAgICBkaXNwbGF5TmFtZTogJ+aVsOaNruaxh+aAu+eKtuaAgScsXHJcbiAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJkYXRhU3VtbWFyeVRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICAgfSxcclxuICAgICAgICAge1xyXG4gICAgICAgICAgIGZpZWxkOiAnJGNoZWNrU3RhdHVzJyxcclxuICAgICAgICAgICBkaXNwbGF5TmFtZTogJ+ajgOmqjOeKtuaAgScsIFxyXG4gICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiZGF0YUNoZWNrU3RhdHVzLmh0bWxcIikgICAgICAgICAgXHJcbiAgICAgICAgIH1cclxuICAgICAgXSxcclxuICAgICAgc29ydEluZm86IHtcclxuICAgICAgICBzb3J0Qnk6IFwiJG9yYWNsZU5hbWVcIixcclxuICAgICAgICBhc2NlbmRpbmc6IGZhbHNlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgXHJcbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcblxyXG4gICAgJHNjb3BlLmRlbGV0ZVByb21wdCA9IChzZWxlY3RlZCkgPT4geyAgICAgIFxyXG4gICAgICBpZiAoYW5ndWxhci5pc1N0cmluZyhzZWxlY3RlZCkpIHtcclxuICAgICAgICBzZWxlY3RlZCA9IFt7XHJcbiAgICAgICAgICBpZDogc2VsZWN0ZWRcclxuICAgICAgICB9XTtcclxuICAgICAgfVxyXG4gICAgICB2YXIgZXh0cmFjdEl0ZW1zID0gY2hlY2tGb3JFeHRyYWN0KHNlbGVjdGVkKTtcclxuICAgICAgaWYoZXh0cmFjdEl0ZW1zLmxlbmd0aCA9PSAwKXtcclxuICAgICAgICBVSS5tdWx0aUl0ZW1Db25maXJtQWN0aW9uRGlhbG9nKDxVSS5NdWx0aUl0ZW1Db25maXJtQWN0aW9uT3B0aW9ucz57XHJcbiAgICAgICAgICBjb2xsZWN0aW9uOiBzZWxlY3RlZCxcclxuICAgICAgICAgIGluZGV4OiAnJGFsaWFzJyxcclxuICAgICAgICAgIG9uQ2xvc2U6IChyZXN1bHQ6Ym9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgZnVuY3Rpb24gZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQ6QXJyYXk8S3ViZVBvZD4sIG5leHQ6S3ViZVBvZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5leHQpIHsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMucmVzaXplQ29udHJvbGxlcigkaHR0cCwgS3ViZXJuZXRlc0FwaVVSTCwgbmV4dCwgMCwgKCkgPT4geyAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgS3ViZXJuZXRlc1JlcGxpY2F0aW9uQ29udHJvbGxlcnMuZGVsZXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICBpZDogZ2V0TmFtZShuZXh0KVxyXG4gICAgICAgICAgICAgICAgICAgICB9LCB1bmRlZmluZWQsICgpID0+IHsgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICBpZihuZXh0Lm1ldGFkYXRhLmxhYmVscy5zdHlsZSA9PT0gXCJvcmFjbGVcIil7ICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBLdWJlcm5ldGVzLmNvbm5lY3RPcmFjbGUoJGh0dHAsICR0aW1lb3V0LCBcIi9qYXZhL2NvbnNvbGUvYXBpL2NhbmNlbE9yYWNsZUNvbmVjdGlvblwiLCBcImRlbGV0ZVwiLCBuZXh0LCAwKTsgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJFcnJvciBkZWxldGluZzogXCIsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XHJcbiAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTsgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdGl0bGU6ICfmmK/lkKbpnIDopoHliKDpmaRvcmFjbGXmnI3liqHvvJ8nLFxyXG4gICAgICAgICAgYWN0aW9uOiAn5Lul5LiL55qEb3JhY2xl5pyN5Yqh5bCG5Lya6KKr5Yig6ZmkOicsXHJcbiAgICAgICAgICBva1RleHQ6ICfliKDpmaQnLFxyXG4gICAgICAgICAgb2tDbGFzczogJ2J0bi1kYW5nZXIgc2pfYnRuX2NpcicsXHJcbiAgICAgICAgICBjdXN0b206IFwi6K+l5pyN5Yqh5Yig6Zmk5ZCO5bCG5Lya5riF6Zmkb3JhY2xl5a+55bqU5pyN5Yqh55qE56uv5Y+j562J6LWE5rqQ5Y2g55So77yM5L2G5LiN5Yig6Zmk5pWw5o2u5paH5Lu277yM5piv5ZCm5Yig6Zmk77yM6K+356Gu6K6k77yBXCIsXHJcbiAgICAgICAgICBjdXN0b21DbGFzczogXCJhbGVydCBhbGVydC13YXJuaW5nIHNqX2FsZXJ0LXdhcm5pbmdcIixcclxuICAgICAgICAgIGNhbmNlbFRleHQ6IFwi5Y+W5raIXCIsXHJcbiAgICAgICAgICBjYW5jZWxDbGFzczogJ3NqX2J0bl9ncmV5J1xyXG4gICAgICAgIH0pLm9wZW4oKTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgICB2YXIgbmFtZSA9IFwiXCI7XHJcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goZXh0cmFjdEl0ZW1zLCAoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBuYW1lICs9IGl0ZW0uJG9yYWNsZU5hbWUgKyBcIixcIjtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAvL2FsZXJ0KFwi5Yig6Zmk5pyN5Yqh5aSx6LSlOlwiICsgbmFtZSArICBcIuacjeWKoeato+WcqOaJp+ihjOaxh+aAu+aTjeS9nO+8jOS4jeiDveiiq+WIoOmZpFwiKTtcclxuICAgICAgICAgIENvbmZpZ3MuY3VzdG9tQWxlcnQoXCLmj5DnpLpcIiwgXCLmk43kvZzlpLHotKU65q2j5Zyo5omn6KGM5rGH5oC75pON5L2c55qE5pyN5Yqh5LiN6IO96KKr5Yig6Zmk77yBXCIsICcnLG51bGwsIDAsIFwiZXJyb3JcIik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAkc2NvcGUuY3JlYXRlUkNzPSAoKSA9PiB7IFxyXG4gICAgICAgJGh0dHAoe1xyXG4gICAgICAgICAgICAgICB1cmw6ICcvamF2YS9jb25zb2xlL2FwaS9jYW5jZWxPcmFjbGVDb25lY3Rpb24nLFxyXG4gICAgICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgICAgICAgICBtZXRob2Q6J1BPU1QnLFxyXG4gICAgICAgICAgICAgICBwYXJhbXM6e3BhcmFtOiBcImRhdGFcIn1cclxuICAgICAgICAgICB9KS5zdWNjZXNzKGZ1bmN0aW9uKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpe1xyXG4gICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInN1Y2Nlc3NcIik7XHJcbiAgICAgICAgICAgfSkuZXJyb3IoZnVuY3Rpb24oZGF0YSxoZWFkZXIsY29uZmlnLHN0YXR1cyl7XHJcbiAgICAgICAgICAgICAgIC8vbG9nLndhcm4oXCJGYWlsZWQgdG8gY29ubmVjdCBcIiArIGNvbm5lY3RQYXJhbSArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgICB9KTsgIFxyXG4gICAgfVxyXG5cclxuICAgICRzY29wZS5zdG9wUHJvbXB0ID0gKHNlbGVjdGVkKSA9PnsgICAgICAgICAgXHJcbiAgICAgIGlmIChhbmd1bGFyLmlzU3RyaW5nKHNlbGVjdGVkKSkge1xyXG4gICAgICAgIHNlbGVjdGVkID0gW3tcclxuICAgICAgICAgIGlkOiBzZWxlY3RlZFxyXG4gICAgICAgIH1dO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciBleHRyYWN0SXRlbXMgPSBjaGVja0ZvckV4dHJhY3Qoc2VsZWN0ZWQpO1xyXG4gICAgICBpZihleHRyYWN0SXRlbXMubGVuZ3RoID09IDApe1xyXG4gICAgICAgIFVJLm11bHRpSXRlbUNvbmZpcm1BY3Rpb25EaWFsb2coPFVJLk11bHRpSXRlbUNvbmZpcm1BY3Rpb25PcHRpb25zPntcclxuICAgICAgICAgIGNvbGxlY3Rpb246IHNlbGVjdGVkLFxyXG4gICAgICAgICAgaW5kZXg6ICckYWxpYXMnLFxyXG4gICAgICAgICAgb25DbG9zZTogKHJlc3VsdDpib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0KSB7ICAgICAgICAgIFxyXG4gICAgICAgICAgICAgZnVuY3Rpb24gc3RvcFNlbGVjdGVkKHNlbGVjdGVkOkFycmF5PEt1YmVQb2Q+LCBuZXh0Okt1YmVQb2QpIHtcclxuICAgICAgICAgICAgICAgaWYgKG5leHQpIHsgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICBLdWJlcm5ldGVzLnJlc2l6ZUNvbnRyb2xsZXIoJGh0dHAsIEt1YmVybmV0ZXNBcGlVUkwsIG5leHQsIDAsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgIGlmKG5leHQubWV0YWRhdGEubGFiZWxzLnN0eWxlID09PSBcIm9yYWNsZVwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMuY29ubmVjdE9yYWNsZSgkaHR0cCwgJHRpbWVvdXQsIFwiL2phdmEvY29uc29sZS9hcGkvY2FuY2VsT3JhY2xlQ29uZWN0aW9uXCIsIFwic3RvcFwiLCBuZXh0LCAwKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgc3RvcFNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcclxuICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgc3RvcFNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTsgICAgICAgICAgXHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGl0bGU6ICfmmK/lkKbpnIDopoHlgZzmraJvcmFjbGXmnI3liqHvvJ8nLFxyXG4gICAgICAgIGFjdGlvbjogJ+S7peS4i+eahG9yYWNsZeacjeWKoeWwhuS8muiiq+WBnOatojonLFxyXG4gICAgICAgIG9rVGV4dDogJ+WBnOatoicsXHJcbiAgICAgICAgb2tDbGFzczogJ2J0bi1kYW5nZXIgc2pfYnRuX2NpcicsXHJcbiAgICAgICAgY3VzdG9tOiBcIuivpeacjeWKoeWBnOatouWQjuWwhuaXoOazlee7p+e7reaPkOS+m+i/nuaOpeiuv+mXruacjeWKoe+8jOS9huWPr+mAmui/h+WQr+WKqOaMiemSrumHjeaWsOWQr+WKqOivpeacjeWKoeS7pei/m+ihjOiuv+mXruOAguaYr+WQpuWBnOatou+8jOivt+ehruiupFwiLFxyXG4gICAgICAgIGN1c3RvbUNsYXNzOiBcImFsZXJ0IGFsZXJ0LXdhcm5pbmcgc2pfYWxlcnQtd2FybmluZ1wiLFxyXG4gICAgICAgIGNhbmNlbFRleHQ6IFwi5Y+W5raIXCIsXHJcbiAgICAgICAgY2FuY2VsQ2xhc3M6ICdzal9idG5fZ3JleSdcclxuICAgICAgICB9KS5vcGVuKCk7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgICB2YXIgbmFtZSA9IFwiXCI7XHJcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goZXh0cmFjdEl0ZW1zLCAoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBuYW1lICs9IGl0ZW0uJG9yYWNsZU5hbWUgKyBcIixcIjtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAvL2FsZXJ0KFwi5YGc5q2i5pyN5Yqh5aSx6LSlOlwiICsgbmFtZSArICBcIuacjeWKoeato+WcqOaJp+ihjOaxh+aAu+aTjeS9nO+8jOS4jeiDveWBnOatolwiKTsgXHJcbiAgICAgICAgICBDb25maWdzLmN1c3RvbUFsZXJ0KFwi5o+Q56S6XCIsIFwi5pON5L2c5aSx6LSlOuato+WcqOaJp+ihjOaxh+aAu+aTjeS9nOeahOacjeWKoeS4jeiDveiiq+WBnOatou+8gVwiLCAnJyxudWxsLCAwLCBcImVycm9yXCIpO1xyXG4gICAgICB9XHJcbiAgIH07XHJcblxyXG4gICAkc2NvcGUucmVTdGFydFByb21wdCA9IChzZWxlY3RlZCkgPT4geyAgICBcclxuICAgICAgZnVuY3Rpb24gc3RhcnRTZWxlY3RlZChzZWxlY3RlZDpBcnJheTxLdWJlUG9kPiwgbmV4dDpLdWJlUG9kKXtcclxuICAgICAgICAgaWYobmV4dCl7XHJcbiAgICAgICAgICAgY29uc29sZS5sb2coZ2V0TGFiZWxzKG5leHQpLnN0YXR1cyk7XHJcbiAgICAgICAgICAgIGlmKG5leHQuJHJlcGxpY2FzID09PSAwKXtcclxuICAgICAgICAgICAgICBLdWJlcm5ldGVzLnJlc2l6ZUNvbnRyb2xsZXIoJGh0dHAsIEt1YmVybmV0ZXNBcGlVUkwsIG5leHQsIDEsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMuY29ubmVjdE9yYWNsZSgkaHR0cCwgJHRpbWVvdXQsIFwiL2phdmEvY29uc29sZS9hcGkvY29ubmVjdE9yYWNsZVwiLCBcInJlU3RhcnRcIiwgbmV4dCwgMjAwKTtcclxuICAgICAgICAgICAgICAgIHN0YXJ0U2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICBpZihnZXRMYWJlbHMobmV4dCkuc3RhdHVzID09IFwiMVwiKVxyXG4gICAgICAgICAgICAgICAgS3ViZXJuZXRlcy5jb25uZWN0T3JhY2xlKCRodHRwLCAkdGltZW91dCwgXCIvamF2YS9jb25zb2xlL2FwaS9jb25uZWN0T3JhY2xlXCIsIFwicmVTdGFydFwiLCBuZXh0LCAyMDApO1xyXG4gICAgICAgICAgICAgICAgc3RhcnRTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHN0YXJ0U2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpOyAgICAgXHJcbiAgIH07XHJcblxyXG4gICAvKipcclxuICAgICDlpITnkIbmir3lj5bmoIflh4booahcclxuICAgKiovXHJcbiAgJHNjb3BlLmV4dHJhY3RPcmFjbGUgPSAoc2VsZWN0ZWQpID0+eyAgXHJcbiAgICB2YXIgYW5zd2VyID0gZmFsc2U7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IENvbmZpZ3NNb2RlbC5vcmFjbGVQYXJhbS5sZW5ndGg7ICsraSkge1xyXG4gICAgICBpZihDb25maWdzTW9kZWwub3JhY2xlUGFyYW1baV0udHlwZSA9PSAxKXtcclxuICAgICAgICBhbnN3ZXIgPSB0cnVlXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKGFuc3dlciA9PSBmYWxzZSl7XHJcbiAgICAgIC8qKlxyXG4gICAgICDmj5DnpLrmsqHmnInphY3nva7moIflh4booajmsYfmgLvlupNcclxuICAgICAgKiovXHJcbiAgICAgIENvbmZpZ3MuY3VzdG9tQWxlcnQoXCLmj5DnpLpcIiwgXCLmk43kvZzlpLHotKU65rKh5pyJ6YWN572u6buY6K6k55qE5qCH5YeG6KGo5rGH5oC75bqTXCIsICcnLG51bGwsIDAsIFwiZXJyb3JcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIOajgOafpeaVsOaNruW6k+aYr+WQpuW3suWQr+WKqFxyXG4gICAgdmFyIHJlc3VsdCA9IGNoZWNrSXNTdGFydFN1Y2Nlc3Moc2VsZWN0ZWQpOyBcclxuICAgIGlmKHJlc3VsdC5sZW5ndGggPiAwKXtcclxuICAgICAgQ29uZmlncy5jdXN0b21BbGVydChcIuaPkOekulwiLCBcIuaTjeS9nOWksei0pTrpgInmi6nmnI3liqHkuK3lrZjlnKjmnKrlkK/liqjnmoTmlbDmja7lupPvvIzor7flhYjlkK/liqjmnI3liqFcIiwgJycsbnVsbCwgMCwgXCJlcnJvclwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIGFuc3dlciA9IGZhbHNlO1xyXG4gICAgdmFyIHNlbGVjdGVkSXRlbSA9IG51bGw7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IENvbmZpZ3NNb2RlbC5vcmFjbGVQYXJhbS5sZW5ndGg7ICsraSkge1xyXG4gICAgICBpZihDb25maWdzTW9kZWwub3JhY2xlUGFyYW1baV0udHlwZSA9PSAxKXtcclxuICAgICAgICBzZWxlY3RlZEl0ZW0gPSBDb25maWdzTW9kZWwub3JhY2xlUGFyYW1baV07XHJcbiAgICAgICAgYW5zd2VyID0gdHJ1ZVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZihhbnN3ZXIgPT0gZmFsc2Upe1xyXG4gICAgICAvKipcclxuICAgICAgICDmj5DnpLrmsqHmnInphY3nva7moIflh4booajmsYfmgLvlupNcclxuICAgICAgKiovXHJcbiAgICAgIENvbmZpZ3MuY3VzdG9tQWxlcnQoXCLmj5DnpLpcIiwgXCLmk43kvZzlpLHotKU65rKh5pyJ6YWN572u6buY6K6k55qE5qCH5YeG6KGo5rGH5oC75bqTXCIsICcnLG51bGwsIDAsIFwiZXJyb3JcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBLdWJlcm5ldGVzLmV4dHJhY3REYXRhVG9PcmFjbGUoJGh0dHAsIFwiL2phdmEvY29uc29sZS9hcGkvb3JhY2xlL3N0YW5kYXJkZXh0cmFjdFwiLCBzZWxlY3RlZCwgc2VsZWN0ZWRJdGVtKTtcclxuICB9XHJcblxyXG4gICAkc2NvcGUuZXh0cmFjdENsaWNrID0ge1xyXG4gICAgICBpdGVtczogbnVsbCxcclxuICAgICAgc2VsZWN0ZWRJdGVtOiAge25hbWU6IFwi5b2T5YmN5rKh5pyJ5Y+v55So55qE5rGH5oC75bqTXCJ9LFxyXG4gICAgICBkaWFsb2c6IG5ldyBVSS5EaWFsb2coKSxcclxuICAgICAgb25PazogKCkgPT4geyAgICAgICAgICAgICAgXHJcbiAgICAgICAgdmFyIGV4dHJhY3RDbGljayA9ICRzY29wZS5leHRyYWN0Q2xpY2s7ICAgIFxyXG4gICAgICAgIGV4dHJhY3RDbGljay5pdGVtcyA9ICRzY29wZS50YWJsZUNvbmZpZy5zZWxlY3RlZEl0ZW1zO1xyXG4gICAgICAgIEt1YmVybmV0ZXMuZXh0cmFjdERhdGFUb09yYWNsZSgkaHR0cCwgXCIvamF2YS9jb25zb2xlL2FwaS9vcmFjbGVcIiwgZXh0cmFjdENsaWNrLml0ZW1zLCBleHRyYWN0Q2xpY2suc2VsZWN0ZWRJdGVtKTtcclxuICAgICAgICAvL2V4dHJhY3RDbGljay5zZWxlY3RlZEl0ZW0gPSAkc2NvcGUuZmlsdGVyUmVwbGljYXRpb25Db250cm9sbGVyc1swXSB8fCBcIlwiO1xyXG4gICAgICAgIGV4dHJhY3RDbGljay5kaWFsb2cuY2xvc2UoKTtcclxuICAgICAgfSxcclxuICAgICAgb3BlbjogKHNlbGVjdGVkKSA9PiB7ICAgICAgICAgICBcclxuICAgICAgICB2YXIgZXh0cmFjdENsaWNrID0gJHNjb3BlLmV4dHJhY3RDbGljazsgXHJcbiAgICAgICAgaWYoJHNjb3BlLmNvbmZpZ3MgJiYgJHNjb3BlLmNvbmZpZ3Mub3JhY2xlUGFyYW0gaW5zdGFuY2VvZiBBcnJheSAmJiAkc2NvcGUuY29uZmlncy5vcmFjbGVQYXJhbS5sZW5ndGg+MClcclxuICAgICAgICAgICBleHRyYWN0Q2xpY2suc2VsZWN0ZWRJdGVtID0gJHNjb3BlLmNvbmZpZ3Mub3JhY2xlUGFyYW1bMF07XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGNoZWNrSXNTdGFydFN1Y2Nlc3MoJHNjb3BlLnRhYmxlQ29uZmlnLnNlbGVjdGVkSXRlbXMpOyAgICAgICAgXHJcbiAgICAgICAgaWYocmVzdWx0Lmxlbmd0aCA+MCl7XHJcbiAgICAgICAgICBDb25maWdzLmN1c3RvbUFsZXJ0KFwi5o+Q56S6XCIsIFwi5pON5L2c5aSx6LSlOumAieaLqeacjeWKoeS4reWtmOWcqOacquWQr+WKqOeahOaVsOaNruW6k++8jOivt+WFiOWQr+WKqOacjeWKoVwiLCAnJyxudWxsLCAwLCBcImVycm9yXCIpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAg5qOA5p+l5pWw5o2u5bqT5piv5ZCm5q2j5Zyo5oq95Y+WXHJcbiAgICAgICAgKiovXHJcbiAgICAgICAgaWYoY2hlY2tSQ0lzRXh0cmFjdGluZyhzZWxlY3RlZCkpe1xyXG4gICAgICAgICAgQ29uZmlncy5jdXN0b21BbGVydChcIuaPkOekulwiLCBcIuaTjeS9nOWksei0pTrpgInmi6nnmoTmlbDmja7lupPkuK3mnInmraPlnKjmiafooYzmsYfmgLvnmoTmlbDmja7lupPvvIzor7fli7/ph43lpI3miafooYzmsYfmgLvmk43kvZxcIiwgJycsbnVsbCwgMCwgXCJlcnJvclwiKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9ICAgICAgXHJcbiAgICAgICAgZXh0cmFjdENsaWNrLmRpYWxvZy5vcGVuKCk7XHJcbiAgICAgICAgLypleHRyYWN0RGF0YS5zZWxlY3RlZEl0ZW0gPSAkc2NvcGUuZmlsdGVyUmVwbGljYXRpb25Db250cm9sbGVyc1swXSB8fCBcIlwiO1xyXG4gICAgICAgICAgZXh0cmFjdERhdGEuaXRlbXMgPSBzZWxlY3RlZDsqL1xyXG4gICAgICAgICAgJHRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAkKCcjbmV3RGF0YU5hbWUnKS5mb2N1cygpO1xyXG4gICAgICAgICAgfSwgNTApO1xyXG4gICAgICAgfSxcclxuICAgICAgIGNsb3NlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgJHNjb3BlLmV4dHJhY3RDbGljay5zZWxlY3RlZEl0ZW0gPSB7bmFtZTogXCLlvZPliY3msqHmnInlj6/nlKjnmoTmsYfmgLvlupNcIn07XHJcbiAgICAgICAgICAgJHNjb3BlLmV4dHJhY3RDbGljay5kaWFsb2cuY2xvc2UoKTtcclxuICAgICAgIH1cclxuICAgfTtcclxuXHJcbiAgfV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNJbnRlcmZhY2VzLnRzXCIvPlxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBzY2hlbWFTZXRSZXF1aXJlZChzY2hlbWEsIHByb3BlcnR5TmFtZSwgaXNSZXF1aXJlZCA9IHRydWUpIHtcclxuICAgIGlmIChzY2hlbWEgJiYgcHJvcGVydHlOYW1lKSB7XHJcbiAgICAgIHZhciByZXF1aXJlZCA9IHNjaGVtYS5yZXF1aXJlZDtcclxuICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcclxuICAgICAgICBpZiAoIXJlcXVpcmVkKSB7XHJcbiAgICAgICAgICByZXF1aXJlZCA9IFtdO1xyXG4gICAgICAgICAgc2NoZW1hLnJlcXVpcmVkID0gcmVxdWlyZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghXy5jb250YWlucyhyZXF1aXJlZCwgcHJvcGVydHlOYW1lKSkge1xyXG4gICAgICAgICAgcmVxdWlyZWQucHVzaChwcm9wZXJ0eU5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAocmVxdWlyZWQpIHtcclxuICAgICAgICAgIHZhciBpZHggPSByZXF1aXJlZC5pbmRleE9mKHByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgcmVxdWlyZWQuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgZXhwb3J0IHZhciBTZWNyZXRDb250cm9sbGVyID0gY29udHJvbGxlcihcIlNlY3JldENvbnRyb2xsZXJcIixcclxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNTY2hlbWFcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsIFwiSzhTQ2xpZW50RmFjdG9yeVwiLFxyXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsXHJcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCwgSzhTQ2xpZW50RmFjdG9yeSkgPT4ge1xyXG5cclxuICAgICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuICAgICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcbiAgICAgICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XHJcblxyXG4gICAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcclxuICAgICAgICBzZWxlY3RTdWJOYXZCYXIoJHNjb3BlLCBcIlNlY3JldHNcIiwgJHNjb3BlLmlkID8gXCJFZGl0IFNlY3JldDogXCIgKyAkc2NvcGUuaWQgOiBcIkNyZWF0ZSBTZWNyZXRcIik7XHJcblxyXG4gICAgICAgIHZhciBrdWJlQ2xpZW50ID0gY3JlYXRlS3ViZXJuZXRlc0NsaWVudChcInNlY3JldHNcIik7XHJcblxyXG4gICAgICAgIHZhciBvblNhdmVVcmwgPSAkbG9jYXRpb24uc2VhcmNoKClbXCJzYXZlZFVybFwiXTtcclxuICAgICAgICB2YXIgY3JlYXRlS2luZCA9ICRsb2NhdGlvbi5zZWFyY2goKVtcImtpbmRcIl07XHJcblxyXG4gICAgICAgICRzY29wZS5zc2hLZXlzID0gc3NoU2VjcmV0RGF0YUtleXM7XHJcbiAgICAgICAgJHNjb3BlLmh0dHBzS2V5cyA9IGh0dHBzU2VjcmV0RGF0YUtleXM7XHJcblxyXG4gICAgICAgIHZhciBzZWNyZXRMYWJlbHMgPSB7XHJcbiAgICAgICAgICBcInNzaC1rZXlcIjogXCJTU0ggcHJpdmF0ZSBrZXlcIixcclxuICAgICAgICAgIFwic3NoLWtleS5wdWJcIjogXCJTU0ggcHVibGljIGtleVwiLFxyXG4gICAgICAgICAgXCJjYS5jcnRcIjogXCJDQSBDZXJ0aWZpY2F0ZVwiLFxyXG4gICAgICAgICAgXCIuZG9ja2VyY2ZnXCI6IFwiRG9ja2VyIGNvbmZpZ1wiLFxyXG4gICAgICAgICAgXCJ1c2VybmFtZVwiOiBcIlVzZXIgbmFtZVwiXHJcbiAgICAgICAgfTtcclxuICAgICAgICB2YXIgc2VjcmV0VG9vbHRpcHMgPSB7XHJcbiAgICAgICAgICBcInNzaC1rZXlcIjogXCJTU0ggcHJpdmF0ZSBrZXkgdGV4dCBjb250ZW50c1wiLFxyXG4gICAgICAgICAgXCJjYS5jcnRcIjogXCJDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKENBKSBDZXJ0aWZpY2F0ZVwiLFxyXG4gICAgICAgICAgXCIuZG9ja2VyY2ZnXCI6IFwiRG9ja2VyIGNvbmZpZ3VyYXRpb24gdG9rZW5cIlxyXG4gICAgICAgIH07XHJcblxyXG5cclxuICAgICAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgaWYgKCRzY29wZS5pZCAmJiAhJHNjb3BlLnNlY3JldCkge1xyXG4gICAgICAgICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcclxuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJHNjb3BlLnByb3BlcnR5S2V5cyA9ICgpID0+IHtcclxuICAgICAgICAgIHJldHVybiBfLmtleXMoc2VjcmV0TGFiZWxzKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAkc2NvcGUuY2hlY2tOYW1lVW5pcXVlID0gKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICB2YXIgYW5zd2VyID0gdHJ1ZTtcclxuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUubW9kZWwuc2VjcmV0cywgKHNlY3JldCkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgbmFtZSA9IGdldE5hbWUoc2VjcmV0KTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBuYW1lKSB7XHJcbiAgICAgICAgICAgICAgYW5zd2VyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuIGFuc3dlcjtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAkc2NvcGUuY2hlY2tGaWVsZFVuaXF1ZSA9IChrZXkpID0+IHtcclxuICAgICAgICAgIHJldHVybiAkc2NvcGUuZW50aXR5LnByb3BlcnRpZXNba2V5XSA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAkc2NvcGUuaGFzQWxsS2V5cyA9IChrZXlzKSA9PiB7XHJcbiAgICAgICAgICB2YXIgYW5zd2VyID0ga2V5cyAmJiBrZXlzLmxlbmd0aDtcclxuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChrZXlzLCAoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghJHNjb3BlLmVudGl0eS5wcm9wZXJ0aWVzW2tleV0pIHtcclxuICAgICAgICAgICAgICBhbnN3ZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4gYW5zd2VyO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgICRzY29wZS5hZGRGaWVsZERpYWxvZyA9IHtcclxuICAgICAgICAgIGNvbnRyb2xsZXI6IG51bGwsXHJcbiAgICAgICAgICBuZXdSZXBsaWNhczogMCxcclxuICAgICAgICAgIGRpYWxvZzogbmV3IFVJLkRpYWxvZygpLFxyXG4gICAgICAgICAgb25PazogKCkgPT4ge1xyXG4gICAgICAgICAgICAkc2NvcGUuYWRkRmllbGREaWFsb2cuZGlhbG9nLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICRzY29wZS5hZGREYXRhRmllbGQoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBvcGVuOiAoY29udHJvbGxlcikgPT4ge1xyXG4gICAgICAgICAgICB2YXIgYWRkRmllbGREaWFsb2cgPSAkc2NvcGUuYWRkRmllbGREaWFsb2c7XHJcbiAgICAgICAgICAgIGFkZEZpZWxkRGlhbG9nLmRpYWxvZy5vcGVuKCk7XHJcblxyXG4gICAgICAgICAgICAkdGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgJCgnI25ld0RhdGFOYW1lJykuZm9jdXMoKTtcclxuICAgICAgICAgICAgfSwgNTApO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNsb3NlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICRzY29wZS5hZGRGaWVsZERpYWxvZy5kaWFsb2cuY2xvc2UoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuXHJcblxyXG4gICAgICAgICRzY29wZS5lbnRpdHlDaGFuZ2VkID0gKCkgPT4ge1xyXG4gICAgICAgICAgJHNjb3BlLmNoYW5nZWQgPSB0cnVlO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgICRzY29wZS5hZGRGaWVsZHMgPSAoa2V5cykgPT4ge1xyXG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKGtleXMsIChrZXkpID0+IGFkZEZpZWxkKGtleSkpO1xyXG4gICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBhZGRGaWVsZChrZXkpIHtcclxuICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IGNyZWF0ZVByb3BlcnR5KGtleSwgXCJcIik7XHJcbiAgICAgICAgICAkc2NvcGUuZW50aXR5LnByb3BlcnRpZXNba2V5XSA9IHByb3BlcnR5O1xyXG4gICAgICAgICAgJHNjb3BlLmVudGl0eS5uZXdEYXRhS2V5ID0gXCJcIjtcclxuICAgICAgICAgICRzY29wZS5zaG93QWRkRGF0YUZpZWxkRm9ybSA9IGZhbHNlO1xyXG4gICAgICAgICAgJHNjb3BlLmVudGl0eUNoYW5nZWQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICRzY29wZS5hZGREYXRhRmllbGQgPSAoKSA9PiB7XHJcbiAgICAgICAgICB2YXIga2V5ID0gJHNjb3BlLmVudGl0eS5uZXdEYXRhS2V5O1xyXG4gICAgICAgICAgaWYgKGtleSkge1xyXG4gICAgICAgICAgICBhZGRGaWVsZChrZXkpO1xyXG4gICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgICRzY29wZS5kZWxldGVQcm9wZXJ0eSA9IChrZXkpID0+IHtcclxuICAgICAgICAgIGlmIChrZXkpIHtcclxuICAgICAgICAgICAgZGVsZXRlICRzY29wZS5lbnRpdHkucHJvcGVydGllc1trZXldO1xyXG4gICAgICAgICAgICAkc2NvcGUuZW50aXR5Q2hhbmdlZCgpO1xyXG4gICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgICRzY29wZS5jYW5jZWwgPSAoKSA9PiB7XHJcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgJHNjb3BlLnNhdmUgPSAoKSA9PiB7XHJcbiAgICAgICAgICB2YXIgZW50aXR5ID0gJHNjb3BlLmVudGl0eSB8fCB7fTtcclxuICAgICAgICAgIHZhciBuYW1lID0gZW50aXR5Lm5hbWU7XHJcbiAgICAgICAgICBpZiAobmFtZSkge1xyXG4gICAgICAgICAgICBpZiAoISRzY29wZS5zZWNyZXQpIHtcclxuICAgICAgICAgICAgICAkc2NvcGUuc2VjcmV0ID0ge1xyXG4gICAgICAgICAgICAgICAgYXBpVmVyc2lvbjogS3ViZXJuZXRlcy5kZWZhdWx0QXBpVmVyc2lvbixcclxuICAgICAgICAgICAgICAgIGtpbmQ6IFwiU2VjcmV0XCIsXHJcbiAgICAgICAgICAgICAgICBtZXRhZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICBuYW1lOiBcIlwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZGF0YToge31cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGRhdGEgPSB7fTtcclxuICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKGVudGl0eS5wcm9wZXJ0aWVzLCAocHJvcGVydHkpID0+IHtcclxuICAgICAgICAgICAgICB2YXIga2V5ID0gcHJvcGVydHkua2V5O1xyXG4gICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHByb3BlcnR5LnZhbHVlIHx8IFwiXCI7XHJcbiAgICAgICAgICAgICAgaWYgKGtleSkge1xyXG4gICAgICAgICAgICAgICAgZGF0YVtrZXldID0gd2luZG93LmJ0b2EodmFsdWUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICRzY29wZS5zZWNyZXQubWV0YWRhdGEubmFtZSA9IG5hbWU7XHJcbiAgICAgICAgICAgICRzY29wZS5zZWNyZXQuZGF0YSA9IGRhdGE7XHJcblxyXG4gICAgICAgICAgICBDb3JlLm5vdGlmaWNhdGlvbignaW5mbycsIFwiU2F2aW5nIHNlY3JldCBcIiArIG5hbWUpO1xyXG5cclxuICAgICAgICAgICAga3ViZUNsaWVudC5wdXQoJHNjb3BlLnNlY3JldCxcclxuICAgICAgICAgICAgICAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNlY3JldHNMaW5rID0gb25TYXZlVXJsIHx8IERldmVsb3Blci5uYW1lc3BhY2VMaW5rKCRzY29wZSwgJHJvdXRlUGFyYW1zLCBcInNlY3JldHNcIik7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGFyYW1zID0ge307XHJcbiAgICAgICAgICAgICAgICBpZiAob25TYXZlVXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgIHBhcmFtc1snc2VjcmV0J10gPSBuYW1lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgJGxvY2F0aW9uLnBhdGgoc2VjcmV0c0xpbmspO1xyXG4gICAgICAgICAgICAgICAgJGxvY2F0aW9uLnNlYXJjaChwYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgbG9nLmluZm8oXCJuYXZpZ2F0aW5nIHRvIFVSTDogXCIgKyBzZWNyZXRzTGluayArIFwiIHdpdGggcGFyYW1zIFwiICsgYW5ndWxhci50b0pzb24oJGxvY2F0aW9uLnNlYXJjaCgpKSk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBDb3JlLm5vdGlmaWNhdGlvbignZXJyb3InLCBcIkZhaWxlZCB0byBzZWNyZXQgXCIgKyBuYW1lICsgXCJcXG5cIiArIGVycik7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdXBkYXRlRGF0YSgpO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVQcm9wZXJ0eShrZXksIHRleHQpIHtcclxuICAgICAgICAgIHZhciBsYWJlbCA9IHNlY3JldExhYmVsc1trZXldIHx8IENvcmUuaHVtYW5pemVWYWx1ZShrZXkpO1xyXG4gICAgICAgICAgdmFyIHRvb2x0aXAgPSBzZWNyZXRUb29sdGlwc1trZXldIHx8IFwiVmFsdWUgb2YgdGhlIFwiICsgbGFiZWw7XHJcblxyXG4gICAgICAgICAgdmFyIHJvd3MgPSA1O1xyXG4gICAgICAgICAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdChcIlxcblwiKS5sZW5ndGggKyAxO1xyXG4gICAgICAgICAgaWYgKGxpbmVzID4gcm93cykge1xyXG4gICAgICAgICAgICByb3dzID0gbGluZXM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB2YXIgdHlwZSA9IFwidGV4dGFyZWFcIjtcclxuICAgICAgICAgIGlmIChrZXkgPT09IFwidXNlcm5hbWVcIikge1xyXG4gICAgICAgICAgICB0eXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgICAgICAgIGlmICghdGV4dCkge1xyXG4gICAgICAgICAgICAgIHRleHQgPSBjdXJyZW50VXNlck5hbWUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IFwicGFzc3dvcmRcIikge1xyXG4gICAgICAgICAgICB0eXBlID0gXCJwYXNzd29yZFwiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdmFyIHByb3BlcnR5ID0ge1xyXG4gICAgICAgICAgICBrZXk6IGtleSxcclxuICAgICAgICAgICAgbGFiZWw6IGxhYmVsLFxyXG4gICAgICAgICAgICB0b29sdGlwOiB0b29sdGlwLFxyXG4gICAgICAgICAgICByb3dzOiByb3dzLFxyXG4gICAgICAgICAgICB2YWx1ZTogdGV4dCxcclxuICAgICAgICAgICAgdHlwZTogdHlwZVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHJldHVybiBwcm9wZXJ0eTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XHJcbiAgICAgICAgICAkc2NvcGUuaXRlbSA9IG51bGw7XHJcbiAgICAgICAgICAkc2NvcGUuY2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgJHNjb3BlLmVudGl0eSA9IHtcclxuICAgICAgICAgICAgbmFtZTogJHNjb3BlLmlkLFxyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7fVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGlmICgkc2NvcGUuaWQpIHtcclxuICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKCRzY29wZS5tb2RlbC5zZWNyZXRzLCAoc2VjcmV0KSA9PiB7XHJcbiAgICAgICAgICAgICAgdmFyIG5hbWUgPSBnZXROYW1lKHNlY3JldCk7XHJcbiAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICRzY29wZS5pZCkge1xyXG4gICAgICAgICAgICAgICAgJHNjb3BlLnNlY3JldCA9IHNlY3JldDtcclxuICAgICAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChzZWNyZXQuZGF0YSwgKHZhbHVlLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdmFyIHRleHQgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoYW5ndWxhci5pc1N0cmluZyh2YWx1ZSkgJiYgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gd2luZG93LmF0b2IodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IGNyZWF0ZVByb3BlcnR5KGtleSwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICRzY29wZS5lbnRpdHkucHJvcGVydGllc1trZXldID0gcHJvcGVydHk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChjcmVhdGVLaW5kID09PSBcInNzaFwiKSB7XHJcbiAgICAgICAgICAgICAgJHNjb3BlLmFkZEZpZWxkcygkc2NvcGUuc3NoS2V5cyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3JlYXRlS2luZCA9PT0gXCJodHRwc1wiKSB7XHJcbiAgICAgICAgICAgICAgJHNjb3BlLmFkZEZpZWxkcygkc2NvcGUuaHR0cHNLZXlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNNb2RlbC50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cInV0aWxIZWxwZXJzLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBleHBvcnQgdmFyIFNlY3JldHNDb250cm9sbGVyID0gY29udHJvbGxlcihcIlNlY3JldHNDb250cm9sbGVyXCIsIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIlNlcnZpY2VSZWdpc3RyeVwiLCBcIiRkaWFsb2dcIiwgXCIkd2luZG93XCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkbG9jYXRpb25cIiwgXCJsb2NhbFN0b3JhZ2VcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxyXG4gICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOiBLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgU2VydmljZVJlZ2lzdHJ5LCAkZGlhbG9nLCAkd2luZG93LCAkdGVtcGxhdGVDYWNoZSwgJHJvdXRlUGFyYW1zLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgbG9jYWxTdG9yYWdlLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcclxuXHJcbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAkc2NvcGUuJGNyZWF0ZVNlY3JldExpbmsgPSBEZXZlbG9wZXIubmFtZXNwYWNlTGluaygkc2NvcGUsICRyb3V0ZVBhcmFtcywgXCJzZWNyZXRDcmVhdGVcIik7XHJcblxyXG4gICAgdmFyIGt1YmVDbGllbnQgPSBjcmVhdGVLdWJlcm5ldGVzQ2xpZW50KFwic2VjcmV0c1wiKTtcclxuXHJcbiAgICAkc2NvcGUudGFibGVDb25maWcgPSB7XHJcbiAgICAgIGRhdGE6ICdtb2RlbC5zZWNyZXRzJyxcclxuICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxyXG4gICAgICBlbmFibGVSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXHJcbiAgICAgIG11bHRpU2VsZWN0OiB0cnVlLFxyXG4gICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcclxuICAgICAgZmlsdGVyT3B0aW9uczoge1xyXG4gICAgICAgIGZpbHRlclRleHQ6ICRsb2NhdGlvbi5zZWFyY2goKVtcInFcIl0gfHwgJydcclxuICAgICAgfSxcclxuICAgICAgY29sdW1uRGVmczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpZWxkOiAnX2tleScsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ05hbWUnLFxyXG4gICAgICAgICAgZGVmYXVsdFNvcnQ6IHRydWUsXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImlkVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmllbGQ6ICckbGFiZWxzVGV4dCcsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ0xhYmVscycsXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImxhYmVsVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgIH0sXHJcbiAgICAgIF1cclxuICAgIH07XHJcblxyXG4gICAgJHNjb3BlLmRlbGV0ZVByb21wdCA9IChzZWxlY3RlZCkgPT4ge1xyXG4gICAgICAgVUkubXVsdGlJdGVtQ29uZmlybUFjdGlvbkRpYWxvZyg8VUkuTXVsdGlJdGVtQ29uZmlybUFjdGlvbk9wdGlvbnM+e1xyXG4gICAgICAgICBjb2xsZWN0aW9uOiBzZWxlY3RlZCxcclxuICAgICAgICAgaW5kZXg6ICdtZXRhZGF0YS5uYW1lJyxcclxuICAgICAgICAgb25DbG9zZTogKHJlc3VsdDpib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgZnVuY3Rpb24gZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIG5leHQpIHtcclxuICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcclxuICAgICAgICAgICAgICAgICBrdWJlQ2xpZW50LmRlbGV0ZShuZXh0LCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XHJcbiAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgICAgICAgICAgIC8vIHVwZGF0ZURhdGEoKTtcclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcclxuICAgICAgICAgICB9XHJcbiAgICAgICAgIH0sXHJcbiAgICAgICAgIHRpdGxlOiAnRGVsZXRlIFNlY3JldHMnLFxyXG4gICAgICAgICBhY3Rpb246ICdUaGUgZm9sbG93aW5nIFNlY3JldHMgd2lsbCBiZSBkZWxldGVkOicsXHJcbiAgICAgICAgIG9rVGV4dDogJ0RlbGV0ZScsXHJcbiAgICAgICAgIG9rQ2xhc3M6ICdidG4tZGFuZ2VyJyxcclxuICAgICAgICAgY3VzdG9tOiBcIlRoaXMgb3BlcmF0aW9uIGlzIHBlcm1hbmVudCBvbmNlIGNvbXBsZXRlZCFcIixcclxuICAgICAgICAgY3VzdG9tQ2xhc3M6IFwiYWxlcnQgYWxlcnQtd2FybmluZ1wiXHJcbiAgICAgICB9KS5vcGVuKCk7XHJcbiAgICAgfTtcclxuXHJcbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcbiAgfV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgZXhwb3J0IHZhciBTZXJ2aWNlQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJTZXJ2aWNlQ29udHJvbGxlclwiLFxyXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxyXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6IEt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLFxyXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcclxuXHJcbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuICAgICRzY29wZS5yYXdNb2RlbCA9IG51bGw7XHJcblxyXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG5cclxuICAgICRzY29wZS5pdGVtQ29uZmlnID0ge1xyXG4gICAgICBwcm9wZXJ0aWVzOiB7XHJcbiAgICAgICAgJ15cXFxcL2xhYmVscyQnOiB7XHJcbiAgICAgICAgICB0ZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KCdsYWJlbFRlbXBsYXRlLmh0bWwnKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAkc2NvcGUuJHdhdGNoKCdtb2RlbC5zZXJ2aWNlcycsIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcclxuICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgfSwgdHJ1ZSk7XHJcblxyXG4gICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xyXG4gICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAkc2NvcGUuZmxpcFJhdyA9ICgpID0+IHtcclxuICAgICAgJHNjb3BlLnJhd01vZGUgPSAhJHNjb3BlLnJhd01vZGU7XHJcbiAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHVwZGF0ZURhdGEoKTtcclxuXHJcbiAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xyXG4gICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcclxuICAgICAgJHNjb3BlLm5hbWVzcGFjZSA9ICRyb3V0ZVBhcmFtc1tcIm5hbWVzcGFjZVwiXSB8fCBLdWJlcm5ldGVzU3RhdGUuc2VsZWN0ZWROYW1lc3BhY2U7XHJcbiAgICAgICRzY29wZS5pdGVtID0gJHNjb3BlLm1vZGVsLmdldFNlcnZpY2UoJHNjb3BlLm5hbWVzcGFjZSwgJHNjb3BlLmlkKTtcclxuICAgICAgaWYgKCRzY29wZS5pdGVtKSB7XHJcbiAgICAgICAgJHNjb3BlLnJhd01vZGVsID0gdG9SYXdZYW1sKCRzY29wZS5pdGVtKTtcclxuICAgICAgfVxyXG4gICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgfVxyXG4gIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XHJcblxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcblxyXG4gIGV4cG9ydCB2YXIgU2VydmljZUVkaXRDb250cm9sbGVyID0gY29udHJvbGxlcihcIlNlcnZpY2VFZGl0Q29udHJvbGxlclwiLFxyXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgXCJTY2hlbWFSZWdpc3RyeVwiLFxyXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6IEt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxyXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwsIHNjaGVtYXM6SGF3dGlvRm9ybXMuU2NoZW1hUmVnaXN0cnkpID0+IHtcclxuXHJcbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xyXG4gICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XHJcbiAgICAkc2NvcGUuY29uZmlnID0gc2NoZW1hcy5jbG9uZVNjaGVtYShcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VydmljZVwiKTtcclxuICAgIC8vJHNjb3BlLmNvbmZpZyA9IEt1YmVybmV0ZXNTY2hlbWEuZGVmaW5pdGlvbnMua3ViZXJuZXRlc192MWJldGEyX1NlcnZpY2U7XHJcblxyXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG5cclxuICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcclxuICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdXBkYXRlRGF0YSgpO1xyXG5cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XHJcbiAgICAgIGlmICgkc2NvcGUuaWQpIHtcclxuICAgICAgICAkc2NvcGUuZW50aXR5ID0gJHNjb3BlLm1vZGVsLmdldFNlcnZpY2UoS3ViZXJuZXRlc1N0YXRlLnNlbGVjdGVkTmFtZXNwYWNlLCAkc2NvcGUuaWQpO1xyXG4gICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzTW9kZWwudHNcIi8+XHJcblxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcblxyXG4gIF9tb2R1bGUuZmFjdG9yeSgnU2VydmljZVJlZ2lzdHJ5JywgWygpID0+IHtcclxuICAgIHJldHVybiBuZXcgU2VydmljZVJlZ2lzdHJ5U2VydmljZSgpO1xyXG4gIH1dKTtcclxuXHJcbiAgLyoqXHJcbiAgICogUmVwcmVzZW50cyBhIHNpbXBsZSBpbnRlcmZhY2UgdG8gc2VydmljZSBkaXNjb3ZlcnkgdGhhdCBjYW4gYmUgdXNlZCBlYXJseSBvbiBpbiB0aGUgYXBwbGljYXRpb24gbGlmZWN5Y2xlIGJlZm9yZSB0aGVcclxuICAgKiB1bmRlcmx5aW5nIG1vZGVsIGhhcyBiZWVuIGNyZWF0ZWQgdmlhIGRlcGVuZGVuY3kgaW5qZWN0aW9uXHJcbiAgICovXHJcbiAgZXhwb3J0IGNsYXNzIFNlcnZpY2VSZWdpc3RyeVNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSBtb2RlbDpLdWJlcm5ldGVzTW9kZWxTZXJ2aWNlID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhIHNlcnZpY2UgYXZhaWxhYmxlIGZvciB0aGUgZ2l2ZW4gSUQgb3IgZmFsc2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIGhhc1NlcnZpY2Uoc2VydmljZU5hbWU6IHN0cmluZykge1xyXG4gICAgICByZXR1cm4gdGhpcy5maW5kU2VydmljZShzZXJ2aWNlTmFtZSkgPyB0cnVlIDogZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBzZXJ2aWNlIGZvciB0aGUgZ2l2ZW4gc2VydmljZSBuYW1lIChJRCkgb3IgbnVsbCBpZiBpdCBjYW5ub3QgYmUgZm91bmRcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gc2VydmljZU5hbWUgdGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgdG8gbG9vayBmb3JcclxuICAgICAqIEByZXR1cm4ge251bGx9XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBmaW5kU2VydmljZShzZXJ2aWNlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgIHZhciBhbnN3ZXIgPSBudWxsO1xyXG4gICAgICBpZiAoc2VydmljZU5hbWUpIHtcclxuICAgICAgICB2YXIgbW9kZWwgPSB0aGlzLmdldE1vZGVsKCk7XHJcbiAgICAgICAgaWYgKG1vZGVsKSB7XHJcbiAgICAgICAgICB2YXIgbmFtZXNwYWNlID0gbW9kZWwuY3VycmVudE5hbWVzcGFjZSgpO1xyXG4gICAgICAgICAgcmV0dXJuIG1vZGVsLmdldFNlcnZpY2UobmFtZXNwYWNlICxzZXJ2aWNlTmFtZSk7XHJcbi8qXHJcbiAgICAgICAgVE9ETyBsZXRzIG9ubHkgbG9vayBpbiB0aGUgY3VycmVudCBuYW1lc3BhY2VcclxuICAgICAgICBhbmd1bGFyLmZvckVhY2gobW9kZWwuc2VydmljZXMsIChzZXJ2aWNlKSA9PiB7XHJcbiAgICAgICAgICBpZiAoc2VydmljZU5hbWUgPT09IGdldE5hbWUoc2VydmljZSkpIHtcclxuICAgICAgICAgICAgYW5zd2VyID0gc2VydmljZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuKi9cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFuc3dlcjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHNlcnZpY2UgbGluayBmb3IgdGhlIGdpdmVuIHNlcnZpY2UgbmFtZVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzZXJ2aWNlTmFtZSB0aGUgbmFtZSBvZiB0aGUgc2VydmljZVxyXG4gICAgICogQHJldHVybiB7bnVsbH1cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNlcnZpY2VMaW5rKHNlcnZpY2VOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICB2YXIgc2VydmljZSA9IHRoaXMuZmluZFNlcnZpY2Uoc2VydmljZU5hbWUpO1xyXG4gICAgICByZXR1cm4gc2VydmljZUxpbmtVcmwoc2VydmljZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBzZXJ2aWNlIGxpbmsgZm9yIHRoZSBnaXZlbiBzZXJ2aWNlIG5hbWUgaWYgaXRzIHJlYWR5IChoYXMgYXQgbGVhc3Qgb25lIHJlYWR5IHBvZClcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gc2VydmljZU5hbWUgdGhlIG5hbWUgb2YgdGhlIHNlcnZpY2VcclxuICAgICAqIEByZXR1cm4ge251bGx9XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXJ2aWNlUmVhZHlMaW5rKHNlcnZpY2VOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICB2YXIgc2VydmljZSA9IHRoaXMuZmluZFNlcnZpY2Uoc2VydmljZU5hbWUpO1xyXG4gICAgICBpZiAocmVhZHlQb2RDb3VudChzZXJ2aWNlKSkge1xyXG4gICAgICAgIHJldHVybiBzZXJ2aWNlTGlua1VybChzZXJ2aWNlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0TW9kZWwoKTpLdWJlcm5ldGVzTW9kZWxTZXJ2aWNlIHtcclxuICAgICAgdmFyIGFuc3dlciA9IHRoaXMubW9kZWw7XHJcbiAgICAgIC8vIGxldHMgYWxsb3cgbGF6eSBsb2FkIHNvIHdlIGNhbiBiZSBpbnZva2VkIGJlZm9yZSB0aGUgaW5qZWN0b3IgaGFzIGJlZW4gY3JlYXRlZFxyXG4gICAgICBpZiAoIWFuc3dlcikge1xyXG4gICAgICAgIHZhciBpbmplY3RvciA9IEhhd3Rpb0NvcmUuaW5qZWN0b3I7XHJcbiAgICAgICAgaWYgKGluamVjdG9yKSB7XHJcbiAgICAgICAgICB0aGlzLm1vZGVsID0gaW5qZWN0b3IuZ2V0PEt1YmVybmV0ZXNNb2RlbFNlcnZpY2U+KCdLdWJlcm5ldGVzTW9kZWwnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgYW5zd2VyID0gdGhpcy5tb2RlbDtcclxuICAgICAgcmV0dXJuIGFuc3dlcjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBleHBvcnQgdmFyIFNlcnZpY2VBcHBzID0gX21vZHVsZS5jb250cm9sbGVyKCdLdWJlcm5ldGVzLlNlcnZpY2VBcHBzJywgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsKSA9PiB7XHJcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcbiAgfSk7XHJcblxyXG4gIGV4cG9ydCB2YXIgU2VydmljZXMgPSBjb250cm9sbGVyKFwiU2VydmljZXNcIixcclxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTZXJ2aWNlc1wiLCBcIkt1YmVybmV0ZXNQb2RzXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxyXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6IEt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1NlcnZpY2VzOm5nLnJlc291cmNlLklSZXNvdXJjZUNsYXNzPGFueT4sIEt1YmVybmV0ZXNQb2RzOm5nLnJlc291cmNlLklSZXNvdXJjZUNsYXNzPGFueT4sIEt1YmVybmV0ZXNTdGF0ZSxcclxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XHJcblxyXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcblxyXG4gICAgQ29udHJvbGxlckhlbHBlcnMuYmluZE1vZGVsVG9TZWFyY2hQYXJhbSgkc2NvcGUsICRsb2NhdGlvbiwgJ21vZGUnLCAnbW9kZScsICdsaXN0Jyk7XHJcblxyXG4gICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xyXG4gICAgICBkYXRhOiAnbW9kZWwuc2VydmljZXMnLFxyXG4gICAgICBzaG93U2VsZWN0aW9uQ2hlY2tib3g6IHRydWUsXHJcbiAgICAgIGVuYWJsZVJvd0NsaWNrU2VsZWN0aW9uOiBmYWxzZSxcclxuICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsXHJcbiAgICAgIHNlbGVjdGVkSXRlbXM6IFtdLFxyXG4gICAgICBmaWx0ZXJPcHRpb25zOiB7XHJcbiAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xyXG4gICAgICB9LFxyXG4gICAgICBjb2x1bW5EZWZzOiBbXHJcbiAgICAgICAgeyBmaWVsZDogJ19rZXknLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdOYW1lJyxcclxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiaWRUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7IGZpZWxkOiAnJHNlcnZpY2VVcmwnLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdBZGRyZXNzJyxcclxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwicG9ydGFsQWRkcmVzcy5odG1sXCIpXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7IGZpZWxkOiAnJHBvZENvdW50JyxcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnUG9kcycsXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcInBvZENvdW50c0FuZExpbmtUZW1wbGF0ZS5odG1sXCIpLFxyXG4gICAgICAgICAgY3VzdG9tU29ydEZpZWxkOiAoZmllbGQpID0+IHtcclxuICAgICAgICAgICAgLy8gbmVlZCB0byBjb25jYXQgYWxsIHRoZSBwb2QgY291bnRlcnNcclxuICAgICAgICAgICAgdmFyIHJlYWR5ID0gZmllbGQuJHBvZENvdW50ZXJzLnJlYWR5IHx8IDA7XHJcbiAgICAgICAgICAgIHZhciB2YWxpZCA9IGZpZWxkLiRwb2RDb3VudGVycy52YWxpZCB8fCAwO1xyXG4gICAgICAgICAgICB2YXIgd2FpdGluZyA9IGZpZWxkLiRwb2RDb3VudGVycy53YWl0aW5nIHx8IDA7XHJcbiAgICAgICAgICAgIHZhciBlcnJvciA9IGZpZWxkLiRwb2RDb3VudGVycy5lcnJvciB8fCAwO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVhZHkgKyB2YWxpZCArIHdhaXRpbmcgKyBlcnJvcjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHsgZmllbGQ6ICckc2VsZWN0b3JUZXh0JyxcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnU2VsZWN0b3InLFxyXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJzZWxlY3RvclRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICB9LFxyXG4gICAgICAgIHsgZmllbGQ6ICckbGFiZWxzVGV4dCcsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ0xhYmVscycsXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImxhYmVsVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfTtcclxuXHJcbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcblxyXG4gICAgJHNjb3BlLmRlbGV0ZVByb21wdCA9IChzZWxlY3RlZCkgPT4ge1xyXG4gICAgICBpZiAoYW5ndWxhci5pc1N0cmluZyhzZWxlY3RlZCkpIHtcclxuICAgICAgICBzZWxlY3RlZCA9IFt7XHJcbiAgICAgICAgICBpZDogc2VsZWN0ZWRcclxuICAgICAgICB9XTtcclxuICAgICAgfVxyXG4gICAgICBVSS5tdWx0aUl0ZW1Db25maXJtQWN0aW9uRGlhbG9nKDxVSS5NdWx0aUl0ZW1Db25maXJtQWN0aW9uT3B0aW9ucz57XHJcbiAgICAgICAgY29sbGVjdGlvbjogc2VsZWN0ZWQsXHJcbiAgICAgICAgaW5kZXg6ICdtZXRhZGF0YS5uYW1lJyxcclxuICAgICAgICBvbkNsb3NlOiAocmVzdWx0OmJvb2xlYW4pID0+IHtcclxuICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgZnVuY3Rpb24gZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQ6QXJyYXk8S3ViZVBvZD4sIG5leHQ6S3ViZVBvZCkge1xyXG4gICAgICAgICAgICAgIGlmIChuZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJkZWxldGluZzogXCIsIGdldE5hbWUobmV4dCkpO1xyXG4gICAgICAgICAgICAgICAgS3ViZXJuZXRlc1NlcnZpY2VzLmRlbGV0ZSh7XHJcbiAgICAgICAgICAgICAgICAgIGlkOiBnZXROYW1lKG5leHQpXHJcbiAgICAgICAgICAgICAgICB9LCB1bmRlZmluZWQsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiZGVsZXRlZDogXCIsIGdldE5hbWUobmV4dCkpO1xyXG4gICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XHJcbiAgICAgICAgICAgICAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiRXJyb3IgZGVsZXRpbmc6IFwiLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0aXRsZTogJ0RlbGV0ZSBzZXJ2aWNlcz8nLFxyXG4gICAgICAgIGFjdGlvbjogJ1RoZSBmb2xsb3dpbmcgc2VydmljZXMgd2lsbCBiZSBkZWxldGVkOicsXHJcbiAgICAgICAgb2tUZXh0OiAnRGVsZXRlJyxcclxuICAgICAgICBva0NsYXNzOiAnYnRuLWRhbmdlcicsXHJcbiAgICAgICAgY3VzdG9tOiBcIlRoaXMgb3BlcmF0aW9uIGlzIHBlcm1hbmVudCBvbmNlIGNvbXBsZXRlZCFcIixcclxuICAgICAgICBjdXN0b21DbGFzczogXCJhbGVydCBhbGVydC13YXJuaW5nXCJcclxuICAgICAgfSkub3BlbigpO1xyXG4gICAgfTtcclxuXHJcbiAgfV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgLy8gY29udHJvbGxlciBmb3IgdGhlIHN0YXR1cyBpY29uIGNlbGxcclxuICBleHBvcnQgdmFyIFBvZFN0YXR1cyA9IGNvbnRyb2xsZXIoXCJQb2RTdGF0dXNcIiwgW1wiJHNjb3BlXCIsICgkc2NvcGUpID0+IHtcclxuICAgICRzY29wZS5zdGF0dXNNYXBwaW5nID0gKHRleHQpID0+IHtcclxuICAgICAgcmV0dXJuIHN0YXR1c1RleHRUb0Nzc0NsYXNzKHRleHQpO1xyXG4gICAgfVxyXG4gIH1dKTtcclxuXHJcbiAgX21vZHVsZS5jb250cm9sbGVyKFwiS3ViZXJuZXRlcy5UZXJtQ29udHJvbGxlclwiLCAoJHNjb3BlLCBUZXJtaW5hbFNlcnZpY2UpID0+IHtcclxuICAgICRzY29wZS5jYW5Db25uZWN0VG8gPSAoY29udGFpbmVyKSA9PiB7XHJcbiAgICAgIGlmIChjb250YWluZXIuc2VjdXJpdHlDb250ZXh0ICYmIGNvbnRhaW5lci5zZWN1cml0eUNvbnRleHQucHJpdmlsZWdlZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgICRzY29wZS5vcGVuVGVybWluYWwgPSAoc2VsZkxpbmssIGNvbnRhaW5lck5hbWUpID0+IHtcclxuICAgICAgdmFyIGlkID0gVGVybWluYWxTZXJ2aWNlLm5ld1Rlcm1pbmFsKHNlbGZMaW5rLCBjb250YWluZXJOYW1lKTtcclxuICAgICAgbG9nLmRlYnVnKFwiQ3JlYXRlZCB0ZXJtaW5hbCwgaWQ6IFwiLCBpZCk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIGV4cG9ydCB2YXIgRGF0YUxhYmVscyA9IGNvbnRyb2xsZXIoXCJEYXRhTGFiZWxzXCIsWyckc2NvcGUnLCckbG9jYXRpb24nLCAoJHNjb3BlLCAkbG9jYXRpb24pID0+e1xyXG4gICAgXHJcbiAgICAgICRzY29wZS5sYWJlbENsaWNrID0gKGVudGl0eSwga2V5OnN0cmluZywgdmFsdWU6c3RyaW5nKSA9PiB7ICAgICAgICAgICAgICBcclxuICAgICAgICAkc2NvcGUuJGVtaXQoJ2RhdGFMYWJlbEZpbHRlclVwZGF0ZScsIHZhbHVlLCBrZXkpXHJcbiAgICB9XHJcbiAgICAkc2NvcGUubGFiZWxDbGFzcyA9IGNvbnRhaW5lckxhYmVsQ2xhc3M7XHJcbiAgfV0pO1xyXG5cclxuICAvLyBjb250cm9sbGVyIHRoYXQgZGVhbHMgd2l0aCB0aGUgbGFiZWxzIHBlciBwb2RcclxuICBleHBvcnQgdmFyIExhYmVscyA9IGNvbnRyb2xsZXIoXCJMYWJlbHNcIiwgW1wiJHNjb3BlXCIsIFwiJGxvY2F0aW9uXCIsICgkc2NvcGUsICRsb2NhdGlvbikgPT4geyAgIFxyXG4gICAgJHNjb3BlLmxhYmVscyA9IFtdO1xyXG4gICAgdmFyIGxhYmVsS2V5V2VpZ2h0cyA9IHtcclxuICAgICAgXCJjaXR5TmFtZVwiOiAxLFxyXG4gICAgICBcImRpc3RyaWN0TmFtZVwiOiAyLFxyXG4gICAgICBcInN5c3RlbU5hbWVcIjogMyxcclxuICAgICAgXCJ5ZWFyXCI6IDQsXHJcbiAgICAgIFwidmVyc2lvblwiOiA1XHJcbiAgICB9O1xyXG4gICAgJHNjb3BlLiR3YXRjaCgnZW50aXR5JywgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xyXG4gICAgICBpZiAobmV3VmFsdWUpIHtcclxuICAgICAgICAvLyBsb2cuZGVidWcoXCJsYWJlbHM6IFwiLCBuZXdWYWx1ZSk7XHJcbiAgICAgICAgLy8gbWFzc2FnZSB0aGUgbGFiZWxzIGEgYml0XHJcbiAgICAgICAgJHNjb3BlLmxhYmVscyA9IFtdO1xyXG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChDb3JlLnBhdGhHZXQoJHNjb3BlLmVudGl0eSwgW1wibWV0YWRhdGFcIiwgXCJsYWJlbHNcIl0pLCAodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGtleSA9PT0gJ2ZhYnJpYzgnIHx8IGtleSA9PT0gJ3N0eWxlJyB8fCBrZXkgPT09ICdzdGF0dXMnIHx8IChrZXkgPT09ICdpc1RhcmdldCcgJiYgdmFsdWUgPT09ICdmYWxzZScpIHx8IGtleSA9PT0gJ2lzRXh0cmFjdCcgfHwga2V5ID09PSAnbmFtZScpIHtcclxuICAgICAgICAgICAgLy8gVE9ETyBub3Qgc3VyZSB3aGF0IHRoaXMgaXMgZm9yLCB0aGUgY29udGFpbmVyIHR5cGU/XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAkc2NvcGUubGFiZWxzLnB1c2goe1xyXG4gICAgICAgICAgICBrZXk6IGtleSxcclxuICAgICAgICAgICAgdGl0bGU6IHZhbHVlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gIGxldHMgc29ydCBieSBrZXkgYnV0IGxldHMgbWFrZSBzdXJlIHRoYXQgd2Ugd2VpZ2h0IGNlcnRhaW4gbGFiZWxzIHNvIHRoZXkgYXJlIGZpcnN0XHJcbiAgICAgICAgJHNjb3BlLmxhYmVscyA9ICRzY29wZS5sYWJlbHMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgZnVuY3Rpb24gZ2V0V2VpZ2h0KGtleSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbGFiZWxLZXlXZWlnaHRzW2tleV0gfHwgMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHZhciBuMSA9IGFbXCJrZXlcIl07XHJcbiAgICAgICAgICB2YXIgbjIgPSBiW1wia2V5XCJdO1xyXG4gICAgICAgICAgdmFyIHcxID0gZ2V0V2VpZ2h0KG4xKTtcclxuICAgICAgICAgIHZhciB3MiA9IGdldFdlaWdodChuMik7XHJcbiAgICAgICAgICB2YXIgZGlmZiA9IHcxIC0gdzI7XHJcbiAgICAgICAgICBpZiAoZGlmZiA8IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChkaWZmID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChuMSAmJiBuMikge1xyXG4gICAgICAgICAgICBpZiAobjEgPiBuMikge1xyXG4gICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG4xIDwgbjIpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChuMSA9PT0gbjIpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChuMSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAkc2NvcGUuaGFuZGxlQ2xpY2sgPSAoZW50aXR5LCBsYWJlbFR5cGU6c3RyaW5nLCB2YWx1ZSkgPT4ge1xyXG4gICAgICAvLyBsb2cuZGVidWcoXCJoYW5kbGVDbGljaywgZW50aXR5OiBcIiwgZW50aXR5LCBcIiBrZXk6IFwiLCBsYWJlbFR5cGUsIFwiIHZhbHVlOiBcIiwgdmFsdWUpO1xyXG4gICAgICAkc2NvcGUuJGVtaXQoJ2xhYmVsRmlsdGVyVXBkYXRlJywgdmFsdWUudGl0bGUpXHJcbiAgICB9XHJcblxyXG4gICAgJHNjb3BlLmxhYmVsQ2xhc3MgPSBjb250YWluZXJMYWJlbENsYXNzO1xyXG4gIH1dKTtcclxuXHJcbiAgLy/mnI3liqHnirbmgIHov4fmu6RcclxuICBleHBvcnQgdmFyIFN0YXR1cyA9IGNvbnRyb2xsZXIoJ1N0YXR1cycsIFtcIiRzY29wZVwiLCBcIiRodHRwXCIsIFwiJGludGVydmFsXCIsIFwiJGxvY2F0aW9uXCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLCAoJHNjb3BlLCAkaHR0cCwgJGludGVydmFsLCAkbG9jYXRpb24sIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcclxuICAgICAgLyokc2NvcGUuJHdhdGNoKCdlbnRpdHknLCAobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiB7XHJcbiAgICAgICAgICBpZihuZXdWYWx1ZSlcclxuICAgICAgICAgICAgIGNvbnNvbGUubG9nKG5ld1ZhbHVlKTtcclxuICAgICAgfSx0cnVlKTsqL1xyXG4gIH1dKTtcclxuXHJcbiAgZXhwb3J0IHZhciBUYXNrRWRpdCA9IGNvbnRyb2xsZXIoJ1Rhc2tFZGl0JywgWyckc2NvcGUnLCAoJHNjb3BlKSA9PiB7XHJcblxyXG4gICAgJHNjb3BlLnNob3dEZWxldGVPbmUgPSB7XHJcbiAgICAgICBzaG93OiBmYWxzZSxcclxuICAgICAgIGl0ZW06IG51bGwsXHJcbiAgICAgICBvcGVuOiAoZW50aXR5KSA9PiB7XHJcbiAgICAgICAgIGlmKGVudGl0eS5zdGF0dXMgPT0gMSlcclxuICAgICAgICAgIENvbmZpZ3MuY3VzdG9tQWxlcnQoXCLmj5DnpLpcIiwgXCLmk43kvZzlpLHotKU6IOato+WcqOi/geenu+eahOS7u+WKoSzkuI3og73liKDpmaTvvIFcIiwgJycsbnVsbCwgMCwgXCJlcnJvclwiKTtcclxuICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICB2YXIgc2hvd0RlbGV0ZU9uZSA9ICRzY29wZS5zaG93RGVsZXRlT25lO1xyXG4gICAgICAgICAgIHNob3dEZWxldGVPbmUuc2hvdyA9IHRydWU7XHJcbiAgICAgICAgICAgc2hvd0RlbGV0ZU9uZS5pdGVtID0gZW50aXR5O1xyXG4gICAgICAgICB9XHJcbiAgICAgICB9LFxyXG4gICAgICAgb25PazogKCkgPT4ge1xyXG4gICAgICAgICB2YXIgc2hvd0RlbGV0ZU9uZSA9ICRzY29wZS5zaG93RGVsZXRlT25lOyAgICAgICAgXHJcbiAgICAgICAgICRzY29wZS4kZW1pdCgnZGVsZXRlUm93Jywgc2hvd0RlbGV0ZU9uZS5pdGVtKTtcclxuICAgICAgIH0sXHJcbiAgICAgICBvbkNhbmNlbDogKCk9PntcclxuICAgICAgICAgdmFyIHNob3dEZWxldGVPbmUgPSAkc2NvcGUuc2hvd0RlbGV0ZU9uZTtcclxuICAgICAgICAgc2hvd0RlbGV0ZU9uZS5zaG93ID0gZmFsc2U7XHJcbiAgICAgICAgIHNob3dEZWxldGVPbmUuaXRlbSA9IG51bGw7XHJcbiAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICAkc2NvcGUuc2hvd0NhbmNlbE9uZSA9IHtcclxuICAgICAgIHNob3c6IGZhbHNlLFxyXG4gICAgICAgaXRlbTogbnVsbCxcclxuICAgICAgIG9wZW46IChlbnRpdHkpID0+IHtcclxuICAgICAgICAgLyppZihlbnRpdHkuc3RhdHVzID09IDEpXHJcbiAgICAgICAgICBDb25maWdzLmN1c3RvbUFsZXJ0KFwi5o+Q56S6XCIsIFwi5pON5L2c5aSx6LSlOiDmraPlnKjov4Hnp7vnmoTku7vliqEs5LiN6IO95Yig6Zmk77yBXCIsICcnLG51bGwsIDAsIFwiZXJyb3JcIik7XHJcbiAgICAgICAgIGVsc2V7Ki9cclxuICAgICAgICAgIHZhciBzaG93Q2FuY2VsT25lID0gJHNjb3BlLnNob3dDYW5jZWxPbmU7XHJcbiAgICAgICAgICBzaG93Q2FuY2VsT25lLnNob3cgPSB0cnVlO1xyXG4gICAgICAgICAgc2hvd0NhbmNlbE9uZS5pdGVtID0gZW50aXR5O1xyXG4gICAgICAgICAvL31cclxuICAgICAgIH0sXHJcbiAgICAgICBvbk9rOiAoKSA9PiB7XHJcbiAgICAgICAgIHZhciBzaG93Q2FuY2VsT25lID0gJHNjb3BlLnNob3dDYW5jZWxPbmU7ICAgICAgICBcclxuICAgICAgICAgJHNjb3BlLiRlbWl0KCdkZWxldGVSb3cnLCBzaG93Q2FuY2VsT25lLml0ZW0pO1xyXG4gICAgICAgfSxcclxuICAgICAgIG9uQ2FuY2VsOiAoKT0+e1xyXG4gICAgICAgICB2YXIgc2hvd0NhbmNlbE9uZSA9ICRzY29wZS5zaG93Q2FuY2VsT25lO1xyXG4gICAgICAgICBzaG93Q2FuY2VsT25lLnNob3cgPSBmYWxzZTtcclxuICAgICAgICAgc2hvd0NhbmNlbE9uZS5pdGVtID0gbnVsbDtcclxuICAgICAgIH1cclxuICAgIH07ICBcclxuICB9XSk7XHJcblxyXG4gIGV4cG9ydCB2YXIgTG9hZE1hc2sgPSBjb250cm9sbGVyKCdMb2FkTWFzaycsIFsnJHNjb3BlJywgKCRzY29wZSkgPT4geyAgICBcclxuICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBfbW9kdWxlLmRpcmVjdGl2ZShcImhhd3Rpb1RhYnNcIiwgWydIYXd0aW9TdWJUYWJzJywgKEhhd3Rpb1N1YlRhYnMpID0+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGxpbms6IChzY29wZSwgZWxlbWVudCwgYXR0cnMpID0+IHtcclxuICAgICAgICBIYXd0aW9TdWJUYWJzLmFwcGx5KHNjb3BlLiRldmFsKCdzdWJUYWJDb25maWcnKSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG4gIGV4cG9ydCB2YXIgVGVtcGxhdGVDb250cm9sbGVyID0gY29udHJvbGxlcihcIlRlbXBsYXRlQ29udHJvbGxlclwiLCBbXHJcbiAgICBcIiRzY29wZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCIkcm91dGVQYXJhbXNcIiwgXCJtYXJrZWRcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRtb2RhbFwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcclxuICAgICgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIG1hcmtlZCwgJHRlbXBsYXRlQ2FjaGUsICRtb2RhbCwgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcclxuICAgIHZhciBtb2RlbCA9ICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuICAgICRzY29wZS5maWx0ZXJUZXh0ID0gJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXTtcclxuXHJcbiAgICAkc2NvcGUudGFyZ2V0TmFtZXNwYWNlID0gJHJvdXRlUGFyYW1zLnRhcmdldE5hbWVzcGFjZTtcclxuICAgIGluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcblxyXG4gICAgJHNjb3BlLiR3YXRjaENvbGxlY3Rpb24oJ21vZGVsLm5hbWVzcGFjZXMnLCAoKSA9PiB7XHJcbiAgICAgIGlmICghJHNjb3BlLnRhcmdldE5hbWVzcGFjZSkge1xyXG4gICAgICAgICRzY29wZS50YXJnZXROYW1lc3BhY2UgPSBtb2RlbC5jdXJyZW50TmFtZXNwYWNlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHZhciByZXR1cm5UbyA9IG5ldyBVUkkoJGxvY2F0aW9uLnNlYXJjaCgpWydyZXR1cm5UbyddIHx8ICcva3ViZXJuZXRlcy9hcHBzJyk7XHJcblxyXG4gICAgZnVuY3Rpb24gZ29CYWNrKCkge1xyXG4gICAgICAkbG9jYXRpb24ucGF0aChyZXR1cm5Uby5wYXRoKCkpLnNlYXJjaChyZXR1cm5Uby5xdWVyeSh0cnVlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0QW5ub3RhdGlvbnMob2JqKSB7XHJcbiAgICAgIHJldHVybiBDb3JlLnBhdGhHZXQob2JqLCBbJ21ldGFkYXRhJywgJ2Fubm90YXRpb25zJ10pO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldFZhbHVlRm9yKG9iaiwga2V5KSB7XHJcbiAgICAgIHZhciBhbm5vdGF0aW9ucyA9IGdldEFubm90YXRpb25zKG9iaik7XHJcbiAgICAgIGlmICghYW5ub3RhdGlvbnMpIHtcclxuICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgICAgfVxyXG4gICAgICB2YXIgbmFtZSA9IGdldE5hbWUob2JqKTtcclxuICAgICAgaWYgKG5hbWUpIHtcclxuICAgICAgICB2YXIgZnVsbEtleSA9IFwiZmFicmljOC5cIiArIG5hbWUgKyBcIi9cIiArIGtleTtcclxuICAgICAgICB2YXIgYW5zd2VyID0gYW5ub3RhdGlvbnNbZnVsbEtleV07XHJcbiAgICAgICAgaWYgKGFuc3dlcikge1xyXG4gICAgICAgICAgcmV0dXJuIGFuc3dlcjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdmFyIGtleTogYW55ID0gXy5maW5kKF8ua2V5cyhhbm5vdGF0aW9ucyksIChrOiBzdHJpbmcpID0+IF8uZW5kc1dpdGgoaywga2V5KSk7XHJcbiAgICAgIGlmIChrZXkpIHtcclxuICAgICAgICByZXR1cm4gYW5ub3RhdGlvbnNba2V5XTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgICRzY29wZS5jYW5jZWwgPSAoKSA9PiB7XHJcbiAgICAgIGlmICgkc2NvcGUuZm9ybUNvbmZpZykge1xyXG4gICAgICAgIGRlbGV0ZSAkc2NvcGUuZm9ybUNvbmZpZztcclxuICAgICAgICBkZWxldGUgJHNjb3BlLmVudGl0eTtcclxuICAgICAgICAkc2NvcGUub2JqZWN0cyA9IHVuZGVmaW5lZDtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgZ29CYWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICRzY29wZS4kd2F0Y2goJ21vZGVsLnRlbXBsYXRlcy5sZW5ndGgnLCAobmV3VmFsdWUpID0+IHtcclxuICAgICAgaWYgKG5ld1ZhbHVlID09PSAwKSB7XHJcbiAgICAgICAgZ29CYWNrKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgKi9cclxuXHJcbiAgICAkc2NvcGUuZmlsdGVyVGVtcGxhdGVzID0gKHRlbXBsYXRlKSA9PiB7XHJcbiAgICAgIGlmIChDb3JlLmlzQmxhbmsoJHNjb3BlLmZpbHRlclRleHQpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIF8uY29udGFpbnMoYW5ndWxhci50b0pzb24odGVtcGxhdGUpLCAkc2NvcGUuZmlsdGVyVGV4dC50b0xvd2VyQ2FzZSgpKTtcclxuICAgIH07XHJcblxyXG4gICAgJHNjb3BlLm9wZW5GdWxsRGVzY3JpcHRpb24gPSAodGVtcGxhdGUpID0+IHtcclxuICAgICAgdmFyIHRleHQgPSBtYXJrZWQoZ2V0VmFsdWVGb3IodGVtcGxhdGUsICdkZXNjcmlwdGlvbicpIHx8ICdObyBkZXNjcmlwdGlvbicpO1xyXG4gICAgICB2YXIgbW9kYWwgPSAkbW9kYWwub3Blbih7XHJcbiAgICAgICAgdGVtcGxhdGVVcmw6IFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVBhdGgsICd0ZW1wbGF0ZURlc2NyaXB0aW9uLmh0bWwnKSxcclxuICAgICAgICBjb250cm9sbGVyOiBbJyRzY29wZScsICckbW9kYWxJbnN0YW5jZScsICgkc2NvcGUsICRtb2RhbEluc3RhbmNlKSA9PiB7XHJcbiAgICAgICAgICAkc2NvcGUudGV4dCA9IHRleHQsXHJcbiAgICAgICAgICAkc2NvcGUub2sgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIG1vZGFsLmNsb3NlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfV1cclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgICRzY29wZS5nZXREZXNjcmlwdGlvbiA9ICh0ZW1wbGF0ZSkgPT4ge1xyXG4gICAgICB2YXIgYW5zd2VyOmFueSA9ICQobWFya2VkKGdldFZhbHVlRm9yKHRlbXBsYXRlLCAnZGVzY3JpcHRpb24nKSB8fCAnTm8gZGVzY3JpcHRpb24nKSk7XHJcbiAgICAgIHZhciB0ZXh0RGVmYXVsdCA9IGFuc3dlci5odG1sKCk7XHJcbiAgICAgIHZhciBtYXhMZW5ndGggPSAyMDA7XHJcbiAgICAgIGlmICh0ZXh0RGVmYXVsdC5sZW5ndGggPiBtYXhMZW5ndGgpIHtcclxuICAgICAgICB2YXIgdHJ1bmNhdGVkID0gJC50cmltKHRleHREZWZhdWx0KS5zdWJzdHJpbmcoMCwgbWF4TGVuZ3RoKS5zcGxpdCgnICcpLnNsaWNlKDAsIC0xKS5qb2luKCcgJyk7XHJcbiAgICAgICAgYW5zd2VyLmh0bWwodHJ1bmNhdGVkICsgJy4uLicpO1xyXG4gICAgICAgIGFuc3dlci5hcHBlbmQoJHRlbXBsYXRlQ2FjaGUuZ2V0KCd0cnVuY2F0ZWREZXNjcmlwdGlvblRhZy5odG1sJykpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhbnN3ZXIuaHRtbCgpO1xyXG4gICAgfTtcclxuXHJcbiAgICAkc2NvcGUuZ2V0SWNvblVybCA9ICh0ZW1wbGF0ZSkgPT4ge1xyXG4gICAgICByZXR1cm4gZ2V0VmFsdWVGb3IodGVtcGxhdGUsICdpY29uVXJsJykgfHwgZGVmYXVsdEljb25Vcmw7XHJcbiAgICB9O1xyXG5cclxuICAgICRzY29wZS5kZXBsb3lUZW1wbGF0ZSA9ICh0ZW1wbGF0ZSkgPT4ge1xyXG4gICAgICBsb2cuZGVidWcoXCJUZW1wbGF0ZSBwYXJhbWV0ZXJzOiBcIiwgdGVtcGxhdGUucGFyYW1ldGVycyk7XHJcbiAgICAgIGxvZy5kZWJ1ZyhcIlRlbXBsYXRlIG9iamVjdHM6IFwiLCB0ZW1wbGF0ZS5vYmplY3RzKTtcclxuICAgICAgbG9nLmRlYnVnKFwiVGVtcGxhdGUgYW5ub3RhdGlvbnM6IFwiLCB0ZW1wbGF0ZS5tZXRhZGF0YS5hbm5vdGF0aW9ucyk7XHJcbiAgICAgIHZhciB0ZW1wbGF0ZUFubm90YXRpb25zID0gdGVtcGxhdGUubWV0YWRhdGEuYW5ub3RhdGlvbnM7XHJcbiAgICAgIGlmICh0ZW1wbGF0ZUFubm90YXRpb25zKSB7XHJcbiAgICAgICAgXy5mb3JFYWNoKHRlbXBsYXRlLm9iamVjdHMsIChvYmplY3Q6YW55KSA9PiB7XHJcbiAgICAgICAgICB2YXIgYW5ub3RhdGlvbnMgPSBvYmplY3QubWV0YWRhdGEuYW5ub3RhdGlvbnMgfHwge307XHJcbiAgICAgICAgICB2YXIgbmFtZSA9IGdldE5hbWUob2JqZWN0KTtcclxuICAgICAgICAgIHZhciBtYXRjaGVzID0gXy5maWx0ZXIoXy5rZXlzKHRlbXBsYXRlQW5ub3RhdGlvbnMpLCAoa2V5KSA9PiBrZXkubWF0Y2goJy4nICsgbmFtZSArICcvJykpO1xyXG4gICAgICAgICAgbWF0Y2hlcy5mb3JFYWNoKChtYXRjaCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIShtYXRjaCBpbiBhbm5vdGF0aW9ucykpIHtcclxuICAgICAgICAgICAgICBhbm5vdGF0aW9uc1ttYXRjaF0gPSB0ZW1wbGF0ZUFubm90YXRpb25zW21hdGNoXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBvYmplY3QubWV0YWRhdGEuYW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9ucztcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB2YXIgcm91dGVTZXJ2aWNlTmFtZSA9IDxzdHJpbmc+IHVuZGVmaW5lZDtcclxuICAgICAgdmFyIHNlcnZpY2UgPSBfLmZpbmQodGVtcGxhdGUub2JqZWN0cywgKG9iaikgPT4ge1xyXG4gICAgICAgIGlmIChnZXRLaW5kKG9iaikgPT09IFwiU2VydmljZVwiKSB7XHJcbiAgICAgICAgICB2YXIgcG9ydHMgPSBnZXRQb3J0cyhvYmopO1xyXG4gICAgICAgICAgaWYgKHBvcnRzICYmIHBvcnRzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChzZXJ2aWNlKSB7XHJcbiAgICAgICAgcm91dGVTZXJ2aWNlTmFtZSA9IGdldE5hbWUoc2VydmljZSk7XHJcbiAgICAgIH1cclxuICAgICAgbG9nLmRlYnVnKFwiU2VydmljZTogXCIsIHNlcnZpY2UpO1xyXG4gICAgICBpZiAoKCFyb3V0ZVNlcnZpY2VOYW1lIHx8ICFpc09wZW5TaGlmdCkgJiYgKCF0ZW1wbGF0ZS5wYXJhbWV0ZXJzIHx8IHRlbXBsYXRlLnBhcmFtZXRlcnMubGVuZ3RoID09PSAwKSkge1xyXG4gICAgICAgIGxvZy5kZWJ1ZyhcIk5vIHBhcmFtZXRlcnMgcmVxdWlyZWQsIGRlcGxveWluZyBvYmplY3RzXCIpO1xyXG4gICAgICAgIGFwcGx5T2JqZWN0cyh0ZW1wbGF0ZS5vYmplY3RzKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdmFyIGZvcm1Db25maWcgPSB7XHJcbiAgICAgICAgc3R5bGU6IEhhd3Rpb0Zvcm1zLkZvcm1TdHlsZS5TVEFOREFSRCxcclxuICAgICAgICBoaWRlTGVnZW5kOiB0cnVlLFxyXG4gICAgICAgIHByb3BlcnRpZXM6IDxhbnk+IHt9XHJcbiAgICAgIH07XHJcbiAgICAgIHZhciBwYXJhbXMgPSB0ZW1wbGF0ZS5wYXJhbWV0ZXJzO1xyXG4gICAgICBfLmZvckVhY2gocGFyYW1zLCAocGFyYW06YW55KSA9PiB7XHJcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gPGFueT4ge307XHJcbiAgICAgICAgcHJvcGVydHkubGFiZWwgPSBfLnN0YXJ0Q2FzZShwYXJhbS5uYW1lKTtcclxuICAgICAgICBwcm9wZXJ0eS5kZXNjcmlwdGlvbiA9IHBhcmFtLmRlc2NyaXB0aW9uO1xyXG4gICAgICAgIHByb3BlcnR5LmRlZmF1bHQgPSBwYXJhbS52YWx1ZTtcclxuICAgICAgICAvLyBUT0RPLCBkbyBwYXJhbWV0ZXJzIHN1cHBvcnQgdHlwZXM/XHJcbiAgICAgICAgcHJvcGVydHkudHlwZSA9ICdzdHJpbmcnO1xyXG4gICAgICAgIGZvcm1Db25maWcucHJvcGVydGllc1twYXJhbS5uYW1lXSA9IHByb3BlcnR5O1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHJvdXRlU2VydmljZU5hbWUgJiYgaXNPcGVuU2hpZnQpIHtcclxuICAgICAgICBmb3JtQ29uZmlnLnByb3BlcnRpZXMuY3JlYXRlUm91dGUgPSB7XHJcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXHJcbiAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxyXG4gICAgICAgICAgbGFiZWw6IFwiQ3JlYXRlIFJvdXRlXCJcclxuICAgICAgICB9O1xyXG4vKlxyXG4gICAgICAgIGZvcm1Db25maWcucHJvcGVydGllcy5yb3V0ZU5hbWUgPSB7XHJcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcclxuICAgICAgICAgIGxhYmVsOiAnUm91dGUgTmFtZScsXHJcbiAgICAgICAgICBkZWZhdWx0OiByb3V0ZVNlcnZpY2VOYW1lLFxyXG4gICAgICAgICAgJ2NvbnRyb2wtZ3JvdXAtYXR0cmlidXRlcyc6IHtcclxuICAgICAgICAgICAgJ25nLXNob3cnOiAnZW50aXR5LmNyZWF0ZVJvdXRlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiovXHJcbiAgICAgICAgZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLnJvdXRlU2VydmljZU5hbWUgPSB7XHJcbiAgICAgICAgICB0eXBlOiAnaGlkZGVuJyxcclxuICAgICAgICAgIGRlZmF1bHQ6IHJvdXRlU2VydmljZU5hbWVcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBuYW1lc3BhY2UgPSBjdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgICAgIC8vIFRPRE8gc3RvcmUgdGhpcyBpbiBsb2NhbFN0b3JhZ2UhXHJcbiAgICAgICAgdmFyIGRvbWFpbiA9IFwidmFncmFudC5mOFwiO1xyXG4gICAgICAgIHZhciBkZWZhdWx0Um91dGVIb3N0U3VmZml4ID0gJy4nICsgKG5hbWVzcGFjZSA9PT0gXCJkZWZhdWx0XCIgPyBcIlwiIDogbmFtZXNwYWNlICsgXCIuXCIpICsgZG9tYWluO1xyXG4gICAgICAgIGZvcm1Db25maWcucHJvcGVydGllcy5yb3V0ZUhvc3RuYW1lID0ge1xyXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXHJcbiAgICAgICAgICBkZWZhdWx0OiBkZWZhdWx0Um91dGVIb3N0U3VmZml4LFxyXG4gICAgICAgICAgbGFiZWw6IFwiUm91dGUgaG9zdCBuYW1lIHN1ZmZpeFwiLFxyXG4gICAgICAgICAgJ2NvbnRyb2wtZ3JvdXAtYXR0cmlidXRlcyc6IHtcclxuICAgICAgICAgICAgJ25nLXNob3cnOiAnZW50aXR5LmNyZWF0ZVJvdXRlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgJHNjb3BlLmVudGl0eSA9IDxhbnk+IHt9O1xyXG4gICAgICAkc2NvcGUuZm9ybUNvbmZpZyA9IGZvcm1Db25maWc7XHJcbiAgICAgICRzY29wZS5vYmplY3RzID0gdGVtcGxhdGUub2JqZWN0cztcclxuICAgICAgbG9nLmRlYnVnKFwiRm9ybSBjb25maWc6IFwiLCBmb3JtQ29uZmlnKTtcclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gc3Vic3RpdHV0ZShzdHIsIGRhdGEpIHtcclxuICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXCR7XFx3Kn0vZywgKG1hdGNoKSA9PiB7XHJcbiAgICAgICAgdmFyIGtleSA9IG1hdGNoLnJlcGxhY2UoL1xcJHsvLCAnJykucmVwbGFjZSgvfS8sICcnKS50cmltKCk7XHJcbiAgICAgICAgcmV0dXJuIGRhdGFba2V5XSB8fCBtYXRjaDtcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgICRzY29wZS5zdWJzdGl0dXRlQW5kRGVwbG95VGVtcGxhdGUgPSAoKSA9PiB7XHJcbiAgICAgIHZhciBvYmplY3RzID0gJHNjb3BlLm9iamVjdHM7XHJcbiAgICAgIHZhciBvYmplY3RzVGV4dCA9IGFuZ3VsYXIudG9Kc29uKG9iamVjdHMsIHRydWUpO1xyXG4gICAgICAvLyBwdWxsIHRoZXNlIG91dCBvZiB0aGUgZW50aXR5IG9iamVjdCBzbyB0aGV5J3JlIG5vdCB1c2VkIGluIHN1YnN0aXR1dGlvbnNcclxuICAgICAgdmFyIGNyZWF0ZVJvdXRlID0gJHNjb3BlLmVudGl0eS5jcmVhdGVSb3V0ZTtcclxuICAgICAgdmFyIHJvdXRlSG9zdG5hbWVTdWZmaXggPSAkc2NvcGUuZW50aXR5LnJvdXRlSG9zdG5hbWUgfHwgXCJcIjtcclxuICAgICAgdmFyIHJvdXRlTmFtZSA9ICRzY29wZS5lbnRpdHkucm91dGVOYW1lO1xyXG4gICAgICB2YXIgcm91dGVTZXJ2aWNlTmFtZSA9ICRzY29wZS5lbnRpdHkucm91dGVTZXJ2aWNlTmFtZTtcclxuICAgICAgZGVsZXRlICRzY29wZS5lbnRpdHkuY3JlYXRlUm91dGU7XHJcbiAgICAgIGRlbGV0ZSAkc2NvcGUuZW50aXR5LnJvdXRlSG9zdG5hbWU7XHJcbiAgICAgIGRlbGV0ZSAkc2NvcGUuZW50aXR5LnJvdXRlTmFtZTtcclxuICAgICAgZGVsZXRlICRzY29wZS5lbnRpdHkucm91dGVTZXJ2aWNlTmFtZTtcclxuICAgICAgb2JqZWN0c1RleHQgPSBzdWJzdGl0dXRlKG9iamVjdHNUZXh0LCAkc2NvcGUuZW50aXR5KTtcclxuICAgICAgb2JqZWN0cyA9IGFuZ3VsYXIuZnJvbUpzb24ob2JqZWN0c1RleHQpO1xyXG4gICAgICBpZiAoY3JlYXRlUm91dGUpIHtcclxuICAgICAgICB2YXIgcm91dGVzID0gW107XHJcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKG9iamVjdHMsIChvYmplY3QpID0+IHtcclxuICAgICAgICAgIHZhciBraW5kID0gb2JqZWN0LmtpbmQ7XHJcbiAgICAgICAgICB2YXIgbmFtZSA9IGdldE5hbWUob2JqZWN0KTtcclxuICAgICAgICAgIGlmIChuYW1lICYmIFwiU2VydmljZVwiID09PSBraW5kKSB7XHJcbiAgICAgICAgICAgIHZhciByb3V0ZUhvc3RuYW1lID0gbmFtZSArIHJvdXRlSG9zdG5hbWVTdWZmaXg7XHJcbiAgICAgICAgICAgIHZhciByb3V0ZSA9IHtcclxuICAgICAgICAgICAgICBraW5kOiBcIlJvdXRlXCIsXHJcbiAgICAgICAgICAgICAgYXBpVmVyc2lvbjogZGVmYXVsdE9TQXBpVmVyc2lvbixcclxuICAgICAgICAgICAgICBtZXRhZGF0YToge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHNwZWM6IHtcclxuICAgICAgICAgICAgICAgIGhvc3Q6IHJvdXRlSG9zdG5hbWUsXHJcbiAgICAgICAgICAgICAgICB0bzoge1xyXG4gICAgICAgICAgICAgICAgICBraW5kOiBcIlNlcnZpY2VcIixcclxuICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcm91dGVzLnB1c2gocm91dGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG9iamVjdHMgPSBvYmplY3RzLmNvbmNhdChyb3V0ZXMpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICgkc2NvcGUudGFyZ2V0TmFtZXNwYWNlICE9PSBtb2RlbC5jdXJyZW50TmFtZXNwYWNlKCkpIHtcclxuICAgICAgICAkc2NvcGUuJG9uKCdXYXRjaGVyTmFtZXNwYWNlQ2hhbmdlZCcsICgpID0+IHtcclxuICAgICAgICAgIGxvZy5kZWJ1ZyhcIk5hbWVzcGFjZSBjaGFuZ2VkXCIpO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGFwcGx5T2JqZWN0cyhvYmplY3RzKTtcclxuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgQ29yZS5ub3RpZmljYXRpb24oJ2luZm8nLCBcIlN3aXRjaGluZyB0byBuYW1lc3BhY2UgXCIgKyAkc2NvcGUudGFyZ2V0TmFtZXNwYWNlICsgXCIgYW5kIGRlcGxveWluZyB0ZW1wbGF0ZVwiKTtcclxuICAgICAgICBtb2RlbC5rdWJlcm5ldGVzLnNlbGVjdGVkTmFtZXNwYWNlID0gJHNjb3BlLnRhcmdldE5hbWVzcGFjZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhcHBseU9iamVjdHMob2JqZWN0cyk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gYXBwbHlPYmplY3RzKG9iamVjdHMpIHtcclxuICAgICAgdmFyIHByb2plY3RDbGllbnQgPSBLdWJlcm5ldGVzLmNyZWF0ZUt1YmVybmV0ZXNDbGllbnQoXCJwcm9qZWN0c1wiKTtcclxuXHJcbiAgICAgIF8uZm9yRWFjaChvYmplY3RzLCAob2JqZWN0OmFueSkgPT4ge1xyXG4gICAgICAgIGxvZy5kZWJ1ZyhcIk9iamVjdDogXCIsIG9iamVjdCk7XHJcblxyXG4gICAgICAgIHZhciBraW5kID0gZ2V0S2luZChvYmplY3QpO1xyXG4gICAgICAgIHZhciBuYW1lID0gZ2V0TmFtZShvYmplY3QpO1xyXG4gICAgICAgIHZhciBucyA9IGdldE5hbWVzcGFjZShvYmplY3QpO1xyXG5cclxuICAgICAgICBpZiAoa2luZCAmJiBuYW1lKSB7XHJcbiAgICAgICAgICBpZiAobnMgJiYgbnMgIT09IGN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCkpIHtcclxuICAgICAgICAgICAgdmFyIHByb2plY3QgPSB7XHJcbiAgICAgICAgICAgICAgYXBpVmVyc2lvbjogS3ViZXJuZXRlcy5kZWZhdWx0QXBpVmVyc2lvbixcclxuICAgICAgICAgICAgICBraW5kOiBcIlByb2plY3RcIixcclxuICAgICAgICAgICAgICBtZXRhZGF0YToge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogbnMsXHJcbiAgICAgICAgICAgICAgICBsYWJlbHM6IHtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHByb2plY3RDbGllbnQucHV0KHByb2plY3QsXHJcbiAgICAgICAgICAgICAgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIGxvZy5pbmZvKFwiQ3JlYXRlZCBuYW1lc3BhY2U6IFwiICsgbnMpXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBjcmVhdGUgbmFtZXNwYWNlOiBcIiArIG5zICsgXCI6IFwiICsgYW5ndWxhci50b0pzb24oZXJyKSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdmFyIHBsdXJhbEtpbmQgPSBraW5kLnRvTG93ZXJDYXNlKCkgKyBcInNcIjtcclxuICAgICAgICAgIHZhciBrdWJlQ2xpZW50ID0gS3ViZXJuZXRlcy5jcmVhdGVLdWJlcm5ldGVzQ2xpZW50KHBsdXJhbEtpbmQsIG5zKTtcclxuICAgICAgICAgIGt1YmVDbGllbnQucHV0KG9iamVjdCxcclxuICAgICAgICAgICAgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICBsb2cuaW5mbyhcInVwZGF0ZWQgXCIgKyBraW5kICsgXCIgbmFtZTogXCIgKyBuYW1lICsgKG5zID8gXCIgbnM6IFwiICsgbnM6IFwiXCIpKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIHVwZGF0ZSBcIiArIGtpbmQgKyBcIiBuYW1lOiBcIiArIG5hbWUgKyAobnMgPyBcIiBuczogXCIgKyBuczogXCJcIikgKyBcIiBlcnJvcjogXCIgKyBhbmd1bGFyLnRvSnNvbihlcnIpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgZ29CYWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgJHNjb3BlLmRlbGV0ZVRlbXBsYXRlID0gKHRlbXBsYXRlKSA9PiB7XHJcbiAgICAgIFVJLm11bHRpSXRlbUNvbmZpcm1BY3Rpb25EaWFsb2coPFVJLk11bHRpSXRlbUNvbmZpcm1BY3Rpb25PcHRpb25zPntcclxuICAgICAgICBjb2xsZWN0aW9uOiBbdGVtcGxhdGVdLFxyXG4gICAgICAgIGluZGV4OiAnbWV0YWRhdGEubmFtZScsXHJcbiAgICAgICAgb25DbG9zZTogKHJlc3VsdDpib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIEt1YmVybmV0ZXNNb2RlbFsndGVtcGxhdGVzUmVzb3VyY2UnXS5kZWxldGUoe1xyXG4gICAgICAgICAgICAgIGlkOiB0ZW1wbGF0ZS5tZXRhZGF0YS5uYW1lXHJcbiAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgIEt1YmVybmV0ZXNNb2RlbFsndGVtcGxhdGVzUmVzb3VyY2UnXS5xdWVyeSgoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgS3ViZXJuZXRlc01vZGVsLnRlbXBsYXRlcyA9IGRhdGEuaXRlbXM7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIkVycm9yIGRlbGV0aW5nIHRlbXBsYXRlOiBcIiwgZXJyb3IpOyBcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0aXRsZTogJ0RlbGV0ZSBUZW1wbGF0ZT8nLFxyXG4gICAgICAgIGFjdGlvbjogJ1RoZSBmb2xsb3dpbmcgdGVtcGxhdGUgd2lsbCBiZSBkZWxldGVkOicsXHJcbiAgICAgICAgb2tUZXh0OiAnRGVsZXRlJyxcclxuICAgICAgICBva0NsYXNzOiAnYnRuLWRhbmdlcicsXHJcbiAgICAgICAgY3VzdG9tOiBcIlRoaXMgb3BlcmF0aW9uIGlzIHBlcm1hbmVudCBvbmNlIGNvbXBsZXRlZCFcIixcclxuICAgICAgICBjdXN0b21DbGFzczogXCJhbGVydCBhbGVydC13YXJuaW5nXCJcclxuICAgICAgfSkub3BlbigpO1xyXG4gICAgfTtcclxuICB9XSk7XHJcbn1cclxuXHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxubW9kdWxlIE5hdmlnYXRpb24ge1xyXG5cclxuICBleHBvcnQgdmFyIHBsdWdpbk5hbWUgPSAnaGF3dGlvLW5hdmlnYXRpb24nO1xyXG4gIGV4cG9ydCB2YXIgbG9nID0gTG9nZ2VyLmdldChwbHVnaW5OYW1lKTtcclxuICBleHBvcnQgdmFyIF9tb2R1bGUgPSBhbmd1bGFyLm1vZHVsZShwbHVnaW5OYW1lLCBbXSk7XHJcblxyXG4gIF9tb2R1bGUucnVuKCgpID0+eyAgICBcclxuICB9KTtcclxuXHJcbiAgX21vZHVsZS5zZXJ2aWNlKCdIYXd0aW9CcmVhZGNydW1icycsICgpID0+IHtcclxuICAgIHZhciBfY29uZmlnID0gW107XHJcbiAgICB2YXIgc2VsZiA9IHtcclxuICAgICAgYXBwbHk6IChjb25maWcpID0+IHtcclxuICAgICAgICBfY29uZmlnLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgXy5mb3JFYWNoKGNvbmZpZywgKGNydW1iKSA9PiB7XHJcbiAgICAgICAgICBfY29uZmlnLnB1c2goY3J1bWIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICBnZXQ6ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gX2NvbmZpZztcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBzZWxmO1xyXG4gIH0pO1xyXG5cclxuICBfbW9kdWxlLnNlcnZpY2UoJ0hhd3Rpb1N1YlRhYnMnLCAoKSA9PiB7XHJcbiAgICB2YXIgX2NvbmZpZyA9IFtdO1xyXG4gICAgdmFyIHNlbGYgPSB7XHJcbiAgICAgIGFwcGx5OiAoY29uZmlnKSA9PiB7XHJcbiAgICAgICAgX2NvbmZpZy5sZW5ndGggPSAwO1xyXG4gICAgICAgIF8uZm9yRWFjaChjb25maWcsIChjcnVtYikgPT4ge1xyXG4gICAgICAgICAgX2NvbmZpZy5wdXNoKGNydW1iKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSxcclxuICAgICAgZ2V0OiAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIF9jb25maWc7XHJcbiAgICAgIH0gXHJcbiAgICB9IFxyXG4gICAgcmV0dXJuIHNlbGY7XHJcbiAgfSk7XHJcblxyXG4gIF9tb2R1bGUuZGlyZWN0aXZlKCdoYXd0aW9SZWxhdGl2ZUhyZWYnLCBbJyRsb2NhdGlvbicsICgkbG9jYXRpb24pID0+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlc3RyaWN0OiAnQScsXHJcbiAgICAgIGxpbms6IChzY29wZSwgZWxlbWVudCwgYXR0cikgPT4ge1xyXG4gICAgICAgIHZhciB0YXJnZXRQYXRoID0gYXR0clsnaGF3dGlvUmVsYXRpdmVIcmVmJ107XHJcbiAgICAgICAgdmFyIHRhcmdldEhyZWYgPSBuZXcgVVJJKCRsb2NhdGlvbi51cmwoKSk7XHJcbiAgICAgICAgdGFyZ2V0SHJlZi5zZWdtZW50KHRhcmdldFBhdGgpO1xyXG4gICAgICAgIGVsZW1lbnQuYXR0cignaHJlZicsIHRhcmdldEhyZWYudG9TdHJpbmcoKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XSk7XHJcblxyXG4gIF9tb2R1bGUuZGlyZWN0aXZlKCd2aWV3cG9ydEhlaWdodCcsIFsnJHdpbmRvdycsICckZG9jdW1lbnQnLCAoJHdpbmRvdywgJGRvY3VtZW50KSA9PiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByZXN0cmljdDogJ0EnLFxyXG4gICAgICBsaW5rOiAoc2NvcGUsIGVsZW1lbnQsIGF0dHIpID0+IHtcclxuICAgICAgICAvLyBsb2cuZGVidWcoXCJXaW5kb3c6IFwiLCAkd2luZG93KTtcclxuICAgICAgICAvLyBsb2cuZGVidWcoXCJlbGVtZW50OiBcIiwgZWxlbWVudCk7XHJcbiAgICAgICAgdmFyIHdpbiA9ICQoJHdpbmRvdyk7XHJcbiAgICAgICAgdmFyIHJlc2l6ZUZ1bmMgPSAoKSA9PiB7XHJcbiAgICAgICAgICB2YXIgdmlld3BvcnRIZWlnaHQgPSB3aW4uaW5uZXJIZWlnaHQoKTtcclxuICAgICAgICAgIC8vIGxvZy5kZWJ1ZyhcIlZpZXdwb3J0IGhlaWdodDogXCIsIHZpZXdwb3J0SGVpZ2h0KTtcclxuICAgICAgICAgIHZhciBlbFRvcCA9IGVsZW1lbnQub2Zmc2V0KCkudG9wO1xyXG4gICAgICAgICAgLy8gbG9nLmRlYnVnKFwiRWxlbWVudCB0b3A6IFwiLCBlbFRvcCk7XHJcbiAgICAgICAgICB2YXIgaGVpZ2h0ID0gdmlld3BvcnRIZWlnaHQgLSBlbFRvcDtcclxuICAgICAgICAgIGVsZW1lbnQuY3NzKCdoZWlnaHQnLCBoZWlnaHQpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgd2luLm9uKCdyZXNpemUnLCByZXNpemVGdW5jKTtcclxuICAgICAgICBlbGVtZW50Lm9uKCckZGVzdHJveScsICgpID0+IHtcclxuICAgICAgICAgIHdpbi5vZmYoJ3Jlc2l6ZScsIHJlc2l6ZUZ1bmMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNldFRpbWVvdXQocmVzaXplRnVuYywgNTApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfV0pO1xyXG5cclxuICBfbW9kdWxlLmRpcmVjdGl2ZSgnaGF3dGlvTWFpbk91dGxldCcsIFsnSGF3dGlvU3ViVGFicycsIChIYXd0aW9TdWJUYWJzKSA9PiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByZXN0cmljdDogJ0EnLFxyXG4gICAgICBsaW5rOiAoc2NvcGUsIGVsZW1lbnQsIGF0dHJzKSA9PiB7XHJcbiAgICAgICAgc2NvcGUudGFicyA9IEhhd3Rpb1N1YlRhYnM7XHJcbiAgICAgICAgc2NvcGUuJHdhdGNoQ29sbGVjdGlvbigndGFicy5nZXQoKScsICh0YWJzKSA9PiB7XHJcbiAgICAgICAgICAvLyBsb2cuZGVidWcoXCJzdWJUYWJDb25maWc6IFwiLCBzdWJUYWJDb25maWcpO1xyXG4gICAgICAgICAgaWYgKHRhYnMgJiYgdGFicy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQ2xhc3MoJ2hpZGRlbi1uYXYnKTtcclxuICAgICAgICAgICAgZWxlbWVudC5jc3MoeyAnbWFyZ2luLWxlZnQnOiAnJyB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuYWRkQ2xhc3MoJ2hpZGRlbi1uYXYnKTtcclxuICAgICAgICAgICAgZWxlbWVudC5jc3MoeyAnbWFyZ2luLWxlZnQnOiAnYXV0bycgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gIH1dKTtcclxuXHJcbiAgX21vZHVsZS5kaXJlY3RpdmUoJ2hhd3Rpb1RhYnNPdXRsZXQnLCBbJ0hhd3Rpb1N1YlRhYnMnLCAoSGF3dGlvU3ViVGFicykgPT4ge1xyXG4gICAgdmFyIGluaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByZXN0cmljdDogJ0FFJyxcclxuICAgICAgcmVwbGFjZTogdHJ1ZSxcclxuICAgICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LXBmLXZlcnRpY2FsIG5hdi1wZi12ZXJ0aWNhbC13aXRoLXNlY29uZGFyeS1uYXZcIiBuZy1jb250cm9sbGVyPVwiRGV2ZWxvcGVyLk5hdkJhckNvbnRyb2xsZXJcIiBuZy1jbGFzcz1cImdldENsYXNzKClcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgbmctcmVwZWF0PVwic3ViVGFiIGluIHN1YlRhYkNvbmZpZ1wiIG5nLXNob3c9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIHt7c3ViVGFiLmFjdGl2ZSA/ICdhY3RpdmUnIDogJyd9fVwiID5cclxuICAgICAgICAgICAgICAgIDxhIG5nLWhpZGU9XCJzdWJUYWIudGVtcGxhdGVcIiBocmVmPVwie3tzdWJUYWIuaHJlZn19XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIG5nLXNob3c9XCJzdWJUYWIuY2xhc3NcIiBuZy1jbGFzcz1cInN1YlRhYi5jbGFzc1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGltZyBuZy1zaG93PVwic3ViVGFiLmljb25cIiBuZy1zcmM9XCJ7e3N1YlRhYi5pY29ufX1cIj5cclxuICAgICAgICAgICAgICAgICAge3tzdWJUYWIubGFiZWx9fVxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZy1zaG93PVwic3ViVGFiLnRlbXBsYXRlXCIgY29tcGlsZT1cInN1YlRhYi50ZW1wbGF0ZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICBgLFxyXG4gICAgICBsaW5rOiAoc2NvcGUsIGVsZW1lbnQsIGF0dHJzKSA9PiB7XHJcbiAgICAgICAgaWYgKCFpbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8oPGFueT4kKSgpLnNldHVwVmVydGljYWxOYXZpZ2F0aW9uKGZhbHNlKTtcclxuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAvLyBpZ25vcmUgaWYgd2UgaGF2ZW4ndCBsb2FkZWQgcGF0dGVybmZseVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzY29wZS5IYXd0aW9TdWJUYWJzID0gSGF3dGlvU3ViVGFicztcclxuXHJcbiAgICAgICAgdmFyIGNvbGxhcHNlZCA9IGZhbHNlO1xyXG4gICAgICAgIHNjb3BlLmdldENsYXNzID0gKCkgPT4ge1xyXG4gICAgICAgICAgLy9sb2cuZGVidWcoXCJNeSBjbGFzczogXCIsIGVsZW1lbnQuYXR0cignY2xhc3MnKSk7XHJcbiAgICAgICAgICBpZiAoIXNjb3BlLnN1YlRhYkNvbmZpZyB8fCAhc2NvcGUuc3ViVGFiQ29uZmlnLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2hpZGRlbic7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29sbGFwc2VkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnY29sbGFwc2VkJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgc2NvcGUuJG9uKCdoYXd0aW9Db2xsYXBzZU5hdicsICgpID0+IHtcclxuICAgICAgICAgIGNvbGxhcHNlZCA9ICFjb2xsYXBzZWQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc2NvcGUuJHdhdGNoKCdIYXd0aW9TdWJUYWJzLmdldCgpJywgKHN1YlRhYkNvbmZpZykgPT4ge1xyXG4gICAgICAgICAgc2NvcGUuc3ViVGFiQ29uZmlnID0gc3ViVGFiQ29uZmlnO1xyXG5cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XSk7XHJcblxyXG4gIF9tb2R1bGUuZGlyZWN0aXZlKCdoYXd0aW9CcmVhZGNydW1ic091dGxldCcsIFsnSGF3dGlvQnJlYWRjcnVtYnMnLCAnSGF3dGlvU3ViVGFicycsIChIYXd0aW9CcmVhZGNydW1icywgSGF3dGlvU3ViVGFicykgPT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVzdHJpY3Q6ICdFJyxcclxuICAgICAgc2NvcGU6IHt9LFxyXG4gICAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJuYXYgbmF2YmFyLW5hdiBuYXYtYnJlYWRjcnVtYiBuYXYtYnJlYWRjcnVtYnNcIiBuZy1zaG93PVwiYnJlYWRjcnVtYkNvbmZpZ1wiIG5nLWNvbnRyb2xsZXI9XCJEZXZlbG9wZXIuTmF2QmFyQ29udHJvbGxlclwiPlxyXG4gICAgICAgICAgPG9sIGNsYXNzPVwiYnJlYWRjcnVtYlwiPlxyXG4gICAgICAgICAgICA8bGkgbmctcmVwZWF0PVwiYnJlYWRjcnVtYiBpbiBicmVhZGNydW1iQ29uZmlnXCIgbmctc2hvdz1cImlzVmFsaWQoYnJlYWRjcnVtYikgJiYgbGFiZWwoYnJlYWRjcnVtYilcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ7e2JyZWFkY3J1bWIuYWN0aXZlID8gJ2FjdGl2ZScgOiAnJ319XCJcclxuICAgICAgICAgICAgICAgIG5nLWNsYXNzPVwiJGxhc3QgPyAnZHJvcGRvd24nIDogJydcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxhIG5nLXNob3c9XCJmYWxzZVwiIGhyZWY9XCJ7e2JyZWFkY3J1bWIuaHJlZn19XCI+PC9hPlxyXG4gICAgICAgICAgICAgIDxzcGFuIG5nLWhpZGU9XCJ0cnVlXCI+e3tsYWJlbChicmVhZGNydW1iKX19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8bGkgbmctc2hvdz1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gbmctYmluZD1cInBhZ2VUaXRsZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgIDwvb2w+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIGAsXHJcbiAgICAgIGxpbms6IChzY29wZSwgZWxlbWVudCwgYXR0cnMpID0+ICB7XHJcbiAgICAgICAgc2NvcGUuYnJlYWRjcnVtYnMgPSBIYXd0aW9CcmVhZGNydW1icztcclxuICAgICAgICBzY29wZS50YWJzID0gSGF3dGlvU3ViVGFicztcclxuICAgICAgICBzY29wZS4kd2F0Y2hDb2xsZWN0aW9uKCdicmVhZGNydW1icy5nZXQoKScsIChicmVhZGNydW1iQ29uZmlnKSA9PiB7XHJcbiAgICAgICAgICBzY29wZS5icmVhZGNydW1iQ29uZmlnID0gYnJlYWRjcnVtYkNvbmZpZzsgICAgICAgICAgXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc2NvcGUuJHdhdGNoQ29sbGVjdGlvbigndGFicy5nZXQoKScsICh0YWJzKSA9PiB7ICAgICAgICBcclxuICAgICAgICAgIHZhciBhY3RpdmUgPSBfLmZpbmQodGFicywgKHRhYjphbnkpID0+IHRhYi5hY3RpdmUpO1xyXG4gICAgICAgICAgaWYgKGFjdGl2ZSkge1xyXG4gICAgICAgICAgICBzY29wZS5wYWdlVGl0bGUgPSBhY3RpdmUubGFiZWw7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzY29wZS5wYWdlVGl0bGUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfV0pO1xyXG5cclxuICBfbW9kdWxlLmRpcmVjdGl2ZSgncGxhdGZvcm1TdWJUYWJzT3V0bGV0JywgWydIYXd0aW9TdWJUYWJzJywgKEhhd3Rpb1N1YlRhYnMpID0+IHtcclxuICAgIHZhciBpbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVzdHJpY3Q6ICdBRScsXHJcbiAgICAgIHJlcGxhY2U6IHRydWUsXHJcbiAgICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm5hdi1wZi12ZXJ0aWNhbCBuYXYtcGYtdmVydGljYWwtd2l0aC1zZWNvbmRhcnktbmF2IHNqX21lbnVcIiAgbmctY29udHJvbGxlcj1cIkRldmVsb3Blci5OYXZCYXJDb250cm9sbGVyXCIgbmctY2xhc3M9XCJnZXRDbGFzcygpXCI+XHJcbiAgICAgICAgICA8dWwgY2xhc3M9XCJuYXZiYXItbGYtbWVudSBcIiAgPlxyXG4gICAgICAgICAgICA8bGkgbmctcmVwZWF0PVwic3ViVGFiIGluIHN1YlRhYkNvbmZpZyBcIiA+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4cGFuZGFibGUgY2xvc2VkIFwiICBuZy1zaG93PVwic3ViVGFiLml0ZW1zLmxlbmd0aFwiIHN0eWxlPVwiIHBhZGRpbmc6MDtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZSBzal9tZW51X25hdlwiID5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCIgc2pfbWVudV8wMVwiID57e3N1YlRhYi5sYWJlbH19PC9pPiBcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiZXhwYW5kYWJsZS1ib2R5ICBzal9tZW51X3VsXCIgPlxyXG4gICAgICAgICAgICAgICAgICA8bGkgbmctcmVwZWF0PVwiaXRlbSBpbiBzdWJUYWIuaXRlbXNcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cInt7aXRlbS5ocmVmfX1cIiA+e3tpdGVtLmxhYmVsfX08L2E+XHJcbiAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgbmctaGlkZT1cInN1YlRhYi5pdGVtcy5sZW5ndGhcIiBjbGFzcz1cInNqX21lbnVfbmF2XCIgPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCIgc2pfbWVudV8wMlwiID48L2k+PGEgaHJlZj1cInt7c3ViVGFiLmhyZWZ9fVwiPnt7c3ViVGFiLmxhYmVsfX08L2E+ICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbGk+ICBcclxuICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+IFxyXG4gICAgICBgLFxyXG4gICAgICBsaW5rOiAoc2NvcGUsIGVsZW1lbnQsIGF0dHJzKSA9PiB7XHJcbiAgICAgICAgaWYgKCFpbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8oPGFueT4kKSgpLnNldHVwVmVydGljYWxOYXZpZ2F0aW9uKGZhbHNlKTtcclxuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAvLyBpZ25vcmUgaWYgd2UgaGF2ZW4ndCBsb2FkZWQgcGF0dGVybmZseVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzY29wZS5IYXd0aW9TdWJUYWJzID0gSGF3dGlvU3ViVGFicztcclxuXHJcbiAgICAgICAgdmFyIGNvbGxhcHNlZCA9IGZhbHNlO1xyXG4gICAgICAgIHNjb3BlLmdldENsYXNzID0gKCkgPT4ge1xyXG4gICAgICAgICAgLy9sb2cuZGVidWcoXCJNeSBjbGFzczogXCIsIGVsZW1lbnQuYXR0cignY2xhc3MnKSk7XHJcbiAgICAgICAgICBpZiAoIXNjb3BlLnN1YlRhYkNvbmZpZyB8fCAhc2NvcGUuc3ViVGFiQ29uZmlnLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2hpZGRlbic7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29sbGFwc2VkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnY29sbGFwc2VkJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgc2NvcGUuJG9uKCdoYXd0aW9Db2xsYXBzZU5hdicsICgpID0+IHtcclxuICAgICAgICAgIGNvbGxhcHNlZCA9ICFjb2xsYXBzZWQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc2NvcGUuJHdhdGNoKCdIYXd0aW9TdWJUYWJzLmdldCgpJywgKHN1YlRhYkNvbmZpZykgPT4ge1xyXG4gICAgICAgICAgc2NvcGUuc3ViVGFiQ29uZmlnID0gc3ViVGFiQ29uZmlnO1xyXG5cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XSk7XHJcblxyXG4gIC8vaGF3dGlvUGx1Z2luTG9hZGVyLmFkZE1vZHVsZSgncGF0dGVybmZseScpO1xyXG5cclxuICBoYXd0aW9QbHVnaW5Mb2FkZXIuYWRkTW9kdWxlKHBsdWdpbk5hbWUpO1xyXG5cclxufVxyXG5cclxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 angular.module("hawtio-kubernetes-templates", []).run(["$templateCache", function($templateCache) {$templateCache.put("plugins/configs/html/configMenuItem.html","\r\n"); $templateCache.put("plugins/configs/html/glusterfsSetting.html","
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
已启用已停止\r\n {{volume.name}}\r\n \r\n 云路径:{{volume.path}}\r\n \r\n 存储类型:\r\n 热区\r\n 冷区\r\n \r\n 已用 {{volume.formatUsedSize}}  /  共 {{volume.formatTotalSize}}\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n 服务器{{$index+1}}\r\n \r\n {{row.ip}}\r\n \r\n 存储路径:{{row.path}}\r\n \r\n 已用 {{row.formatUsedSize}}  /  可用 {{row.formatAllSize}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

\r\n 是否删除:{{showDeleteVolume.item.name}} 云盘?\r\n

\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/configs/html/kubeClusterSetting.html","
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n

当前没有配置汇总库信息,请配置,否则汇总操作将不可用!

\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

编辑汇总库连接信息:

\r\n

添加汇总库信息:

\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n 名称不能为空 请输入输入2-20个字符的数据名称 \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n IP不能为空\r\n 请输入正确的IP地址\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n 端口号不能为空\r\n 端口号必须为1~65535的数字\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n 用户名不能为空\r\n 用户名必须为2-15个字母、数字或下划线\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n 密码不能为空\r\n 密码必须为2-15个字母、数字或下划线\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n 服务名不能为空\r\n 服务名必须为1-10个字母\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n 表空间名不能为空\r\n 表空间名必须为1-15个字母、数字或下划线\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n 表后缀名不能为空\r\n 表后缀名必须为1-10个字母、数字或下划线\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n"); $templateCache.put("plugins/configs/html/shareLayout.html","\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/developer/html/addDataFile.html","
\r\n
\r\n

江苏省审计厅数据汇总平台

\r\n
\r\n
\r\n
\r\n

本地文件列表

\r\n
    \r\n
  • 文件名
  • \r\n
  • \r\n
  • \r\n
  • \r\n
  • \r\n
  • \r\n
  • \r\n
\r\n
    \r\n
  • 文件属性
  • \r\n
  • \r\n
  • \r\n
\r\n
\r\n
\r\n \r\n
\r\n

服务器文件列表

\r\n
\r\n
\r\n employee: {{node.name}} age {{node.age}}\r\n
\r\n \r\n
\r\n
\r\n
    \r\n
  • 文件名
  • \r\n
  • \r\n
  • \r\n
  • \r\n
  • \r\n
  • \r\n
  • \r\n
\r\n
    \r\n
  • 文件属性
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n\r\n\r\n\r\n
"); $templateCache.put("plugins/developer/html/code.html","
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no tools currently available.

\r\n
\r\n
\r\n
\r\n

There are no tools currently available.

\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/developer/html/environment.html","environment!!!!"); $templateCache.put("plugins/developer/html/environmentPanel.html","
\r\n
\r\n
\r\n
\r\n

\r\n \r\n \r\n {{env.label}}\r\n \r\n

\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {{rc.$name}}\r\n : {{version}}\r\n \r\n \r\n \r\n {{rc.$name}}\r\n : {{version}}\r\n \r\n \r\n  \r\n  \r\n  \r\n \r\n \r\n \r\n \r\n  \r\n  \r\n  \r\n \r\n \r\n {{rc.$podCounters.ready}}\r\n {{rc.$podCounters.valid}}\r\n {{rc.$podCounters.waiting}}\r\n {{rc.$podCounters.error}}\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n Build #{{rc.$buildId}}\r\n \r\n  \r\n  \r\n  \r\n \r\n \r\n Commit {{rc.$gitCommit | limitTo:7}}\r\n \r\n \r\n \r\n Commit {{rc.$gitCommit | limitTo:7}}\r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n\r\n
\r\n
\r\n"); $templateCache.put("plugins/developer/html/environments.html","
\r\n\r\n
\r\n
\r\n\r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n\r\n\r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n

Environments Overview

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

No Environment Available

\r\n

Environment is a logical place where deployments happen which maps to a kubernetes / openshift namespace. You will see environments here after you add a build.

\r\n New Build\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n

Active Pipelines

\r\n View All Pipelines >>\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n

Commits

\r\n View All Commits >>\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n"); $templateCache.put("plugins/developer/html/fileMigrationTask.html","
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

当前没有可以查看的任务列表!

\r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n"); $templateCache.put("plugins/developer/html/home.html","
\r\n
\r\n

Perspectives

\r\n\r\n

\r\n Please choose the perspective you would like to use:\r\n

\r\n
\r\n
\r\n\r\n
\r\n

\r\n \r\n \r\n  Develop »\r\n \r\n

\r\n\r\n

\r\n Work on projects and source code\r\n

\r\n
\r\n
\r\n

\r\n \r\n \r\n  Operate »\r\n \r\n

\r\n\r\n

\r\n Manage and run Pods and Services\r\n

\r\n
\r\n
\r\n
"); $templateCache.put("plugins/developer/html/jenkinsApproveModal.html","
\r\n

{{operation}}?

\r\n
\r\n
\r\n Are you sure you wish to {{operation}}?\r\n
\r\n
\r\n \r\n \r\n
\r\n"); $templateCache.put("plugins/developer/html/jenkinsJob.html","
\r\n \r\n \r\n \r\n \r\n\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n\r\n \r\n Trigger\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no builds in this job.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n"); $templateCache.put("plugins/developer/html/jenkinsJobs.html","
\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n Trigger\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no jobs in this jenkins.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/developer/html/jenkinsLog.html","
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n Log in Jenkins\r\n \r\n  \r\n \r\n Build in Jenkins\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n

\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/developer/html/jenkinsMetrics.html","
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no completed builds in this job.

\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/developer/html/logPanel.html","
\r\n
\r\n

\r\n
\r\n
\r\n\r\n\r\n"); $templateCache.put("plugins/developer/html/overview.html",""); $templateCache.put("plugins/developer/html/pipeline.html","
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no pipeline stages in this build.

\r\n
\r\n
\r\n\r\n

Pipeline for {{jobId}}

\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/developer/html/pipelineView.html","
\r\n
\r\n
\r\n

\r\n \r\n Build {{build.displayName}}\r\n \r\n \r\n started {{build.$timestamp.relative()}}\r\n \r\n

\r\n
\r\n\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n View Full Log\r\n
\r\n
\r\n
\r\n
\r\n

Logs

\r\n View Full Log\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n"); $templateCache.put("plugins/developer/html/pipelines.html","
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no pipelines for this job.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/developer/html/projectDetail.html","
\r\n
\r\n
\r\n  \r\n \r\n \r\n  \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/developer/html/projectSelector.html","\r\n"); $templateCache.put("plugins/developer/html/projects.html","
\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n  \r\n \r\n\r\n \r\n\r\n  \r\n\r\n \r\n Create App\r\n \r\n\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no projects in this workspace.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/developer/html/tools.html","
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no tools currently available.

\r\n
\r\n
\r\n
\r\n

There are no tools currently available.

\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/developer/html/workspace.html","
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n  \r\n \r\n Configuration\r\n \r\n  \r\n \r\n Pod\r\n \r\n  \r\n \r\n View Log\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/developer/html/workspaces.html","
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n

当前没有可以查看的数据.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n  \r\n \r\n  \r\n \r\n  \r\n \r\n
\r\n
    \r\n
  • 当前显示{{(model.paramOptions.currentPageNum-1)*20 + 1}}~{{(model.paramOptions.currentPageNum-1)*20 + model.data.length}}行,共{{model.paramOptions.totalSize}}行,
  • \r\n \r\n
  • 当前页码
  • \r\n
  • \r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

数据迁移

\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/appDeployedTemplate.html","
\r\n {{row.entity.$creationDate ? (row.entity.$creationDate | relativeTime) : \'\'}}\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/appDetailTemplate.html","
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{view.appName}}\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n {{view.service.$host}}\r\n \r\n {{view.service.$host}}\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n deployed:\r\n {{view.createdDate | relativeTime}}\r\n
\r\n
\r\n not deployed\r\n
\r\n
\r\n
\r\n
\r\n pod template:\r\n {{view.controllerId}}\r\n
\r\n
\r\n no pod template\r\n
\r\n
\r\n
\r\n \r\n pods:\r\n \r\n {{view.podCount}}\r\n \r\n \r\n {{view.podCount}}\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n Pod {{pod.idAbbrev}}\r\n
\r\n
\r\n IP:\r\n {{pod.status.podIP}}\r\n
\r\n
\r\n
\r\n ports: {{pod.$containerPorts.join(\", \")}}\r\n
\r\n
\r\n minion:\r\n \r\n {{pod.$host}}\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n Pod {{pod.idAbbrev}}\r\n
\r\n
\r\n IP:\r\n {{pod.status.podIP}}\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/appIconTemplate.html","\r\n"); $templateCache.put("plugins/kubernetes/html/appPodCountsAndLinkTemplate.html","\r\n"); $templateCache.put("plugins/kubernetes/html/appReplicationControllerTemplate.html","\r\n"); $templateCache.put("plugins/kubernetes/html/appServicesTemplate.html","\r\n"); $templateCache.put("plugins/kubernetes/html/apps.html","
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n  \r\n \r\n  \r\n\r\n  \r\n \r\n  \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no apps currently available.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
    \r\n
  • \r\n
    \r\n
    \r\n {{folder.path.capitalize(true)}}Uncategorized\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n  \r\n \r\n  \r\n \r\n
\r\n
\r\n \r\n\r\n
\r\n\r\n
    \r\n
  • \r\n \r\n {{app.name}}\r\n  \r\n \r\n
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/breadcrumbs.html","
\r\n
    \r\n
  1. \r\n {{breadcrumb.label}}\r\n {{breadcrumb.label}}\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/build.html","
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n  \r\n \r\n Configuration\r\n \r\n  \r\n \r\n Pod\r\n \r\n  \r\n \r\n View Log\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/buildConfig.html","
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n  \r\n \r\n Edit\r\n \r\n \r\n  \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/buildConfigEdit.html","
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n

\r\n Project name must be a lower case DNS name with letters, numbers and dots or dashes such as `example.com`\r\n

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/buildConfigs.html","
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n  \r\n Add Build\r\n  \r\n\r\n \r\n Create Project\r\n \r\n  \r\n\r\n \r\n Sign In\r\n \r\n  \r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no build configurations available.

\r\n Add Build Configuration\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/buildLogs.html","
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n

logs for {{entity.$configId}}

\r\n\r\n

\r\n

\r\n            \r\n              {{logsText}}\r\n            \r\n          
\r\n

\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/builds.html","
\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no builds currently running.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/deploymentConfig.html","
\r\n
\r\n
\r\n  \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/deploymentConfigs.html","
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n  \r\n Create\r\n  \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no deployment configurations available.

\r\n Create Deployment Configuration\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/events.html","
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n  \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no events currently available.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n

\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/host.html","
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n  \r\n \r\n {{rawMode ? \'Form\' : \'Raw\'}}\r\n Edit\r\n  \r\n\r\n Save\r\n  \r\n\r\n  \r\n \r\n Pods\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/hosts.html","
\r\n \r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no hosts currently running.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/imageRepositories.html","
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n  \r\n Create\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no image repositories available.

\r\n Create Image Repository\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/importProject.html","
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n

\r\n Create a project by entering or copy/pasting the Git URL for a repository, and give the project a name. By default the name will be based on the repository name.\r\n

\r\n\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n

\r\n Project name must be a lower case DNS name with letters, numbers and dots or dashes such as `example.com`\r\n

\r\n

Name of this project

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/kubernetesJsonDirective.html","
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n  \r\n
\r\n
\r\n
\r\n

 {{displayName || appTitle}}

\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/layoutKubernetes.html","\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/logShell.html","
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
{{containerName}}的抽取日志
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/overview.html","
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/pendingPipelines.html","
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

No Pipeline Available

\r\n

Pipeline is a kind of build which uses Jenkins Workflow internally which has multiple Stages. You will see the active pipelines here after you add a build to this project

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/pipelines.html","
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n Create Project\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no build pipelines available.

\r\n Create Build Configuration\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n {{step.buildConfig.metadata.name}}\r\n \r\n \r\n    \r\n \r\n \r\n \r\n build\r\n \r\n \r\n\r\n
\r\n
\r\n \r\n new: {{step.buildConfig.$lastBuild.$creationDate.relative()}}\r\n \r\n \r\n pending: {{step.buildConfig.$lastBuild.$creationDate.relative()}}\r\n \r\n \r\n running {{step.buildConfig.$lastBuild.$creationDate.relative()}}\r\n \r\n \r\n completed {{step.buildConfig.$lastBuild.$creationDate.relative()}}\r\n \r\n \r\n failed {{step.buildConfig.$lastBuild.$creationDate.relative()}}\r\n \r\n \r\n {{step.buildConfig.$lastBuild.status}}: {{step.buildConfig.$lastBuild.$creationDate.relative()}}\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/pod.html","
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n\r\n  {{item.metadata.name}}\r\n \r\n\r\n \r\n  \r\n\r\n \r\n  \r\n \r\n\r\n {{rawMode ? \'Form\' : \'Raw\'}}\r\n  \r\n\r\n Edit\r\n  \r\n\r\n Save\r\n  \r\n\r\n \r\n Events\r\n \r\n  \r\n\r\n
\r\n  \r\n \r\n Connect\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/podCreate.html","
\r\n
\r\n
\r\n  \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/podEdit.html","
\r\n
\r\n
\r\n  \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/pods.html","
\r\n \r\n \r\n \r\n\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n  \r\n \r\n  \r\n \r\n  \r\n 创建新服务\r\n  \r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no pods currently running.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/replicationController.html","
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n  {{item.metadata.name}}\r\n \r\n\r\n \r\n  \r\n\r\n \r\n  \r\n\r\n {{rawMode ? \'Form\' : \'Raw\'}}\r\n  \r\n\r\n Edit\r\n  \r\n\r\n Save\r\n  \r\n\r\n \r\n Events\r\n \r\n\r\n    \r\n\r\n \r\n Scale\r\n \r\n\r\n Pods:\r\n \r\n {{item.$podCounters.ready}}\r\n {{item.$podCounters.valid}}\r\n {{item.$podCounters.waiting}}\r\n {{item.$podCounters.error}}\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/replicationControllerCreate.html","
\r\n
\r\n
\r\n  \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/replicationControllerEdit.html","
\r\n
\r\n
\r\n  \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/replicationControllers.html","
\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n  \r\n\r\n \r\n  \r\n\r\n \r\n  \r\n\r\n \r\n  \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

当前没有正在运行的oracle服务.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n

数据汇总

\r\n
\r\n\r\n
\r\n \r\n\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\n 0 && extractClick.selectedItem\">\r\n
\r\n 您所选择的数据库数据将会被抽取到汇总数据库:\r\n {{extractClick.selectedItem.name}} 中,是否继续请确认!\r\n
\r\n \r\n 当前没有汇总数据库可以选择,请先创建,可以点击创建汇总数据库按钮进行创建或从汇总页面中的服务器数据列表中启动已创建的汇总数据库!\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/secret.html","
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n  \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n\r\n
\r\n \r\n \r\n There is already a secret with that name!\r\n \r\n
\r\n
\r\n\r\n
\r\n \r\n\r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n

Add New Data Field

\r\n
\r\n\r\n
\r\n \r\n\r\n
\r\n \r\n\r\n \r\n That field name is already in use!\r\n \r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\n \r\n Enter the name of the new data field to add to the secret\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/secrets.html","
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n  \r\n \r\n Create\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no secrets currently available.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/service.html","
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n  {{item.metadata.name}}\r\n \r\n\r\n \r\n  \r\n\r\n \r\n\r\n {{rawMode ? \'Form\' : \'Raw\'}}\r\n  \r\n\r\n Edit\r\n  \r\n\r\n Save\r\n  \r\n\r\n \r\n Connect\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/serviceApps.html","
\r\n \r\n \r\n \r\n \r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/serviceCreate.html","
\r\n
\r\n
\r\n  \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/serviceEdit.html","
\r\n
\r\n
\r\n  \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/services.html","
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n  \r\n \r\n  \r\n \r\n  \r\n Create\r\n  \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no services currently available.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n

\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/tabs.html","
\r\n \r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/templateDescription.html","
\r\n

Description

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/templates.html","
\r\n \r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n \r\n  \r\n \r\n  \r\n \r\n Target namespace: \r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n There are no templates currently available. Add templates by dragging and dropping template files into this area.\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n

\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/termShell.html","
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/system/html/regionalismCodeSearch.html","
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

当前没有可以查看的数据.

\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {{row.code}}\r\n {{row.cityName}}\r\n {{row.districtName}}
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/system/html/systemCodeSearch.html","
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

当前没有可以查看的数据.

\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n {{row.code}}\r\n {{row.systemName}}
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/system/html/systemList.html","
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n  \r\n \r\n   \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n 当前没有可以查看的数据,请点击Excel导入按钮导入Excel数据
\r\n \r\n \r\n \r\n \r\n
\r\n {{row[col.field]}}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/system/html/systemSQLManagement.html","
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n 当前没有查到符合过滤条件的数据,请重新选择过滤条件
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n 有缺失\r\n 正常\r\n 待归档\r\n 待审核\r\n {{row.areaCode}}{{row.cityName}}{{row.districtName}}{{row.sysName}}{{row.dataBaseType}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/system/html/systemVerification.html","
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n 0\" ng-table=\"tableParams\" class=\"table table-condensed table-bordered table-striped table_sj_td_center\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n {{row.checkResult}}{{row.collection}}\r\n 未校验\r\n 不需校验\r\n 校验中\r\n 标准表存在\r\n 标准表不存在\r\n 待抽取\r\n 正在抽取\r\n 抽取完成\r\n \r\n 未校验\r\n 不需校验\r\n 校验中\r\n 标准表存在\r\n 标准表不存在\r\n 待抽取\r\n 正在抽取\r\n 抽取完成\r\n {{row.cityName}}{{row.districtName}}{{row.areaCode}}\r\n \r\n \r\n {{row.sysName}}{{row.dataVersion}}{{row.departmentManager}}{{row.managerContacts}}{{row.dataBaseType}}\r\n 热区\r\n 冷区\r\n \r\n \r\n \r\n
\r\n
0\" class=\"col-sm-12 alert alert-warning sj_alert-warning\">\r\n \r\n 当前没有选择需要校验的数据,请选择需要校验的数据!\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n");}]); hawtioPluginLoader.addModule("hawtio-kubernetes-templates");